v20201105
authorKilian Saffran <ksaffran@dks.lu>
Thu, 5 Nov 2020 13:29:09 +0000 (14:29 +0100)
committerKilian Saffran <ksaffran@dks.lu>
Thu, 5 Nov 2020 13:29:09 +0000 (14:29 +0100)
443 files changed:
.gitignore
admin/.htaccess [new file with mode: 0644]
admin/css/fonts/pot.svg [new file with mode: 0644]
admin/css/fonts/pot.ttf [new file with mode: 0644]
admin/css/fonts/pot.woff [new file with mode: 0644]
admin/css/icons.css [new file with mode: 0644]
admin/css/icons.min.css [new file with mode: 0644]
admin/css/theme.css [new file with mode: 0644]
admin/css/theme.min.css [new file with mode: 0644]
admin/db.php [new file with mode: 0644]
admin/img/POT-logo.png [new file with mode: 0644]
admin/img/bg1.jpg [new file with mode: 0644]
admin/img/favicon/android-icon-144x144.png [new file with mode: 0644]
admin/img/favicon/android-icon-192x192.png [new file with mode: 0644]
admin/img/favicon/android-icon-36x36.png [new file with mode: 0644]
admin/img/favicon/android-icon-48x48.png [new file with mode: 0644]
admin/img/favicon/android-icon-72x72.png [new file with mode: 0644]
admin/img/favicon/android-icon-96x96.png [new file with mode: 0644]
admin/img/favicon/apple-icon-114x114.png [new file with mode: 0644]
admin/img/favicon/apple-icon-120x120.png [new file with mode: 0644]
admin/img/favicon/apple-icon-144x144.png [new file with mode: 0644]
admin/img/favicon/apple-icon-152x152.png [new file with mode: 0644]
admin/img/favicon/apple-icon-180x180.png [new file with mode: 0644]
admin/img/favicon/apple-icon-57x57.png [new file with mode: 0644]
admin/img/favicon/apple-icon-60x60.png [new file with mode: 0644]
admin/img/favicon/apple-icon-72x72.png [new file with mode: 0644]
admin/img/favicon/apple-icon-76x76.png [new file with mode: 0644]
admin/img/favicon/apple-icon-precomposed.png [new file with mode: 0644]
admin/img/favicon/apple-icon.png [new file with mode: 0644]
admin/img/favicon/browserconfig.xml [new file with mode: 0644]
admin/img/favicon/favicon-16x16.png [new file with mode: 0644]
admin/img/favicon/favicon-32x32.png [new file with mode: 0644]
admin/img/favicon/favicon-96x96.png [new file with mode: 0644]
admin/img/favicon/favicon.ico [new file with mode: 0644]
admin/img/favicon/manifest.json [new file with mode: 0644]
admin/img/favicon/ms-icon-144x144.png [new file with mode: 0644]
admin/img/favicon/ms-icon-150x150.png [new file with mode: 0644]
admin/img/favicon/ms-icon-310x310.png [new file with mode: 0644]
admin/img/favicon/ms-icon-70x70.png [new file with mode: 0644]
admin/img/logo_512.png [new file with mode: 0644]
admin/img/logo_512_xx.png [new file with mode: 0644]
admin/img/potbg.jpg [new file with mode: 0644]
admin/img/poticon512.png [new file with mode: 0644]
admin/img/potlogowhite.svg [new file with mode: 0644]
admin/img/pottop.png [new file with mode: 0644]
admin/img/toplogo.png [new file with mode: 0644]
admin/index.php [new file with mode: 0644]
admin/js/app.js [new file with mode: 0644]
admin/js/app.min.js [new file with mode: 0644]
admin/js/dataform.js [new file with mode: 0644]
admin/js/dataform.min.js [new file with mode: 0644]
admin/js/report.js [new file with mode: 0644]
admin/js/report.min.js [new file with mode: 0644]
admin/js/request.js [new file with mode: 0644]
admin/js/request.min.js [new file with mode: 0644]
admin/js/timecalc.js [new file with mode: 0644]
admin/js/timecalc.min.js [new file with mode: 0644]
admin/js/vendors/flatpickr/flatpickr.css [new file with mode: 0644]
admin/js/vendors/flatpickr/flatpickr.js [new file with mode: 0644]
admin/js/vendors/flatpickr/flatpickr.min.css [new file with mode: 0644]
admin/js/vendors/flatpickr/flatpickr.min.js [new file with mode: 0644]
admin/js/vendors/flatpickr/ie.css [new file with mode: 0644]
admin/js/vendors/flatpickr/index.d.ts [new file with mode: 0644]
admin/js/vendors/flatpickr/l10n/de.d.ts [new file with mode: 0644]
admin/js/vendors/flatpickr/l10n/de.js [new file with mode: 0644]
admin/js/vendors/flatpickr/l10n/default.d.ts [new file with mode: 0644]
admin/js/vendors/flatpickr/l10n/default.js [new file with mode: 0644]
admin/js/vendors/flatpickr/l10n/fr.d.ts [new file with mode: 0644]
admin/js/vendors/flatpickr/l10n/fr.js [new file with mode: 0644]
admin/js/vendors/flatpickr/l10n/index.d.ts [new file with mode: 0644]
admin/js/vendors/flatpickr/l10n/index.js [new file with mode: 0644]
admin/js/vendors/flatpickr/plugins/confirmDate/confirmDate.css [new file with mode: 0644]
admin/js/vendors/flatpickr/plugins/confirmDate/confirmDate.d.ts [new file with mode: 0644]
admin/js/vendors/flatpickr/plugins/confirmDate/confirmDate.js [new file with mode: 0644]
admin/js/vendors/flatpickr/plugins/labelPlugin/labelPlugin.d.ts [new file with mode: 0644]
admin/js/vendors/flatpickr/plugins/labelPlugin/labelPlugin.js [new file with mode: 0644]
admin/js/vendors/flatpickr/plugins/minMaxTimePlugin.d.ts [new file with mode: 0644]
admin/js/vendors/flatpickr/plugins/minMaxTimePlugin.js [new file with mode: 0644]
admin/js/vendors/flatpickr/plugins/momentPlugin.d.ts [new file with mode: 0644]
admin/js/vendors/flatpickr/plugins/momentPlugin.js [new file with mode: 0644]
admin/js/vendors/flatpickr/plugins/monthSelect/index.d.ts [new file with mode: 0644]
admin/js/vendors/flatpickr/plugins/monthSelect/index.js [new file with mode: 0644]
admin/js/vendors/flatpickr/plugins/monthSelect/style.css [new file with mode: 0644]
admin/js/vendors/flatpickr/plugins/monthSelect/tests.spec.d.ts [new file with mode: 0644]
admin/js/vendors/flatpickr/plugins/rangePlugin.d.ts [new file with mode: 0644]
admin/js/vendors/flatpickr/plugins/rangePlugin.js [new file with mode: 0644]
admin/js/vendors/flatpickr/plugins/scrollPlugin.d.ts [new file with mode: 0644]
admin/js/vendors/flatpickr/plugins/scrollPlugin.js [new file with mode: 0644]
admin/js/vendors/flatpickr/plugins/weekSelect/weekSelect.d.ts [new file with mode: 0644]
admin/js/vendors/flatpickr/plugins/weekSelect/weekSelect.js [new file with mode: 0644]
admin/js/vendors/flatpickr/themes/airbnb.css [new file with mode: 0644]
admin/js/vendors/flatpickr/types/globals.d.ts [new file with mode: 0644]
admin/js/vendors/flatpickr/types/instance.d.ts [new file with mode: 0644]
admin/js/vendors/flatpickr/types/locale.d.ts [new file with mode: 0644]
admin/js/vendors/flatpickr/types/options.d.ts [new file with mode: 0644]
admin/js/vendors/flatpickr/typings.d.ts [new file with mode: 0644]
admin/js/vendors/flatpickr/utils/dates.d.ts [new file with mode: 0644]
admin/js/vendors/flatpickr/utils/dom.d.ts [new file with mode: 0644]
admin/js/vendors/flatpickr/utils/formatting.d.ts [new file with mode: 0644]
admin/js/vendors/flatpickr/utils/index.d.ts [new file with mode: 0644]
admin/js/vendors/flatpickr/utils/polyfills.d.ts [new file with mode: 0644]
admin/js/vendors/moment/locales.js [new file with mode: 0644]
admin/js/vendors/moment/locales.min.js [new file with mode: 0644]
admin/js/vendors/moment/locales.min.js.map [new file with mode: 0644]
admin/js/vendors/moment/moment-with-locales.js [new file with mode: 0644]
admin/js/vendors/moment/moment-with-locales.min.js [new file with mode: 0644]
admin/js/vendors/moment/moment-with-locales.min.js.map [new file with mode: 0644]
admin/js/vendors/moment/moment.js [new file with mode: 0644]
admin/js/vendors/moment/moment.min.js [new file with mode: 0644]
admin/js/vendors/moment/moment.min.js.map [new file with mode: 0644]
admin/js/vendors/slimselect/slimselect.css [new file with mode: 0644]
admin/js/vendors/slimselect/slimselect.min.css [new file with mode: 0644]
admin/js/vendors/slimselect/slimselect.min.js [new file with mode: 0644]
admin/js/vendors/slimselect/slimselect.min.orig.css [new file with mode: 0644]
admin/js/vendors/slimselect/slimselect.min.xx.js [new file with mode: 0644]
admin/js/vendors/slimselect/slimselect.scss [new file with mode: 0644]
admin/js/vendors/slimselect/slimselect.xx.js [new file with mode: 0644]
admin/js/vendors/tabulator/css/tabulator.css [new file with mode: 0644]
admin/js/vendors/tabulator/css/tabulator.min.css [new file with mode: 0644]
admin/js/vendors/tabulator/css/tabulator.min.css.map [new file with mode: 0644]
admin/js/vendors/tabulator/css/tabulator_site.css [new file with mode: 0644]
admin/js/vendors/tabulator/css/tabulator_site.min.css [new file with mode: 0644]
admin/js/vendors/tabulator/css/tabulator_site.min.css.map [new file with mode: 0644]
admin/js/vendors/tabulator/css/tabulator_site.min.orig.css [new file with mode: 0644]
admin/js/vendors/tabulator/js/modules/accessor.js [new file with mode: 0644]
admin/js/vendors/tabulator/js/modules/accessor.min.js [new file with mode: 0644]
admin/js/vendors/tabulator/js/modules/ajax.js [new file with mode: 0644]
admin/js/vendors/tabulator/js/modules/ajax.min.js [new file with mode: 0644]
admin/js/vendors/tabulator/js/modules/calculation_colums.js [new file with mode: 0644]
admin/js/vendors/tabulator/js/modules/calculation_colums.min.js [new file with mode: 0644]
admin/js/vendors/tabulator/js/modules/clipboard.js [new file with mode: 0644]
admin/js/vendors/tabulator/js/modules/clipboard.min.js [new file with mode: 0644]
admin/js/vendors/tabulator/js/modules/data_tree.js [new file with mode: 0644]
admin/js/vendors/tabulator/js/modules/data_tree.min.js [new file with mode: 0644]
admin/js/vendors/tabulator/js/modules/download.js [new file with mode: 0644]
admin/js/vendors/tabulator/js/modules/download.min.js [new file with mode: 0644]
admin/js/vendors/tabulator/js/modules/edit.js [new file with mode: 0644]
admin/js/vendors/tabulator/js/modules/edit.min.js [new file with mode: 0644]
admin/js/vendors/tabulator/js/modules/export.js [new file with mode: 0644]
admin/js/vendors/tabulator/js/modules/export.min.js [new file with mode: 0644]
admin/js/vendors/tabulator/js/modules/filter.js [new file with mode: 0644]
admin/js/vendors/tabulator/js/modules/filter.min.js [new file with mode: 0644]
admin/js/vendors/tabulator/js/modules/format.js [new file with mode: 0644]
admin/js/vendors/tabulator/js/modules/format.min.js [new file with mode: 0644]
admin/js/vendors/tabulator/js/modules/frozen_columns.js [new file with mode: 0644]
admin/js/vendors/tabulator/js/modules/frozen_columns.min.js [new file with mode: 0644]
admin/js/vendors/tabulator/js/modules/frozen_rows.js [new file with mode: 0644]
admin/js/vendors/tabulator/js/modules/frozen_rows.min.js [new file with mode: 0644]
admin/js/vendors/tabulator/js/modules/group_rows.js [new file with mode: 0644]
admin/js/vendors/tabulator/js/modules/group_rows.min.js [new file with mode: 0644]
admin/js/vendors/tabulator/js/modules/history.js [new file with mode: 0644]
admin/js/vendors/tabulator/js/modules/history.min.js [new file with mode: 0644]
admin/js/vendors/tabulator/js/modules/html_table_import.js [new file with mode: 0644]
admin/js/vendors/tabulator/js/modules/html_table_import.min.js [new file with mode: 0644]
admin/js/vendors/tabulator/js/modules/keybindings.js [new file with mode: 0644]
admin/js/vendors/tabulator/js/modules/keybindings.min.js [new file with mode: 0644]
admin/js/vendors/tabulator/js/modules/menu.js [new file with mode: 0644]
admin/js/vendors/tabulator/js/modules/menu.min.js [new file with mode: 0644]
admin/js/vendors/tabulator/js/modules/moveable_columns.js [new file with mode: 0644]
admin/js/vendors/tabulator/js/modules/moveable_columns.min.js [new file with mode: 0644]
admin/js/vendors/tabulator/js/modules/moveable_rows.js [new file with mode: 0644]
admin/js/vendors/tabulator/js/modules/moveable_rows.min.js [new file with mode: 0644]
admin/js/vendors/tabulator/js/modules/mutator.js [new file with mode: 0644]
admin/js/vendors/tabulator/js/modules/mutator.min.js [new file with mode: 0644]
admin/js/vendors/tabulator/js/modules/page.js [new file with mode: 0644]
admin/js/vendors/tabulator/js/modules/page.min.js [new file with mode: 0644]
admin/js/vendors/tabulator/js/modules/persistence.js [new file with mode: 0644]
admin/js/vendors/tabulator/js/modules/persistence.min.js [new file with mode: 0644]
admin/js/vendors/tabulator/js/modules/print.js [new file with mode: 0644]
admin/js/vendors/tabulator/js/modules/print.min.js [new file with mode: 0644]
admin/js/vendors/tabulator/js/modules/reactive_data.js [new file with mode: 0644]
admin/js/vendors/tabulator/js/modules/reactive_data.min.js [new file with mode: 0644]
admin/js/vendors/tabulator/js/modules/resize_columns.js [new file with mode: 0644]
admin/js/vendors/tabulator/js/modules/resize_columns.min.js [new file with mode: 0644]
admin/js/vendors/tabulator/js/modules/resize_rows.js [new file with mode: 0644]
admin/js/vendors/tabulator/js/modules/resize_rows.min.js [new file with mode: 0644]
admin/js/vendors/tabulator/js/modules/resize_table.js [new file with mode: 0644]
admin/js/vendors/tabulator/js/modules/resize_table.min.js [new file with mode: 0644]
admin/js/vendors/tabulator/js/modules/responsive_layout.js [new file with mode: 0644]
admin/js/vendors/tabulator/js/modules/responsive_layout.min.js [new file with mode: 0644]
admin/js/vendors/tabulator/js/modules/select_row.js [new file with mode: 0644]
admin/js/vendors/tabulator/js/modules/select_row.min.js [new file with mode: 0644]
admin/js/vendors/tabulator/js/modules/sort.js [new file with mode: 0644]
admin/js/vendors/tabulator/js/modules/sort.min.js [new file with mode: 0644]
admin/js/vendors/tabulator/js/modules/validate.js [new file with mode: 0644]
admin/js/vendors/tabulator/js/modules/validate.min.js [new file with mode: 0644]
admin/js/vendors/tabulator/js/tabulator.js [new file with mode: 0644]
admin/js/vendors/tabulator/js/tabulator.min.js [new file with mode: 0644]
admin/js/vendors/tabulator/js/tabulator.min.orig.js [new file with mode: 0644]
admin/js/vendors/tabulator/js/tabulator_core.js [new file with mode: 0644]
admin/js/vendors/tabulator/js/tabulator_core.min.js [new file with mode: 0644]
admin/lib/composer.json [new file with mode: 0644]
admin/lib/composer.lock [new file with mode: 0644]
admin/lib/config.php [new file with mode: 0644]
admin/lib/database.php [new file with mode: 0644]
admin/lib/session.php [new file with mode: 0644]
admin/lib/web/galleries.php [new file with mode: 0644]
admin/lib/web/rendezvous.php [new file with mode: 0644]
admin/lib/web/websites.php [new file with mode: 0644]
admin/tmpl/.htaccess [new file with mode: 0644]
admin/tmpl/index.html.mustache [new file with mode: 0644]
admin/tmpl/login.html.mustache [new file with mode: 0644]
admin/tmpl/pages/error.html.mustache [new file with mode: 0644]
admin/tmpl/pages/galleries.html.mustache [new file with mode: 0644]
admin/tmpl/pages/home.html.mustache [new file with mode: 0644]
admin/tmpl/pages/login/forgotpassword.html.mustache [new file with mode: 0644]
admin/tmpl/pages/login/login.html.mustache [new file with mode: 0644]
admin/tmpl/pages/login/message.html.mustache [new file with mode: 0644]
admin/tmpl/pages/orders.html.mustache [new file with mode: 0644]
admin/tmpl/pages/rdvconfig.html.mustache [new file with mode: 0644]
admin/tmpl/pages/rendezvous.html.mustache [new file with mode: 0644]
admin/tmpl/pages/shop.html.mustache [new file with mode: 0644]
admin/upload.php [new file with mode: 0644]
oldwebsite/img/logo1.png [new file with mode: 0644]
website/css/fonts/ledf.svg [deleted file]
website/css/fonts/ledf.ttf [deleted file]
website/css/fonts/ledf.woff [deleted file]
website/css/fonts/siteicons.svg [new file with mode: 0644]
website/css/fonts/siteicons.ttf [new file with mode: 0644]
website/css/fonts/siteicons.woff [new file with mode: 0644]
website/css/icons.css
website/css/style.css
website/css/theme.css
website/img/IMG_20201029_105226.jpg [new file with mode: 0644]
website/img/dose.jpg [new file with mode: 0644]
website/img/favicon/manifest.json
website/img/logo.png [new file with mode: 0644]
website/img/logo1.png [new file with mode: 0644]
website/img/thumb.jpg [new file with mode: 0644]
website/img/wood-pattern.jpg [new file with mode: 0644]
website/index.php
website/info.php [new file with mode: 0644]
website/js/gallery.js [new file with mode: 0644]
website/js/rendezvous.js [new file with mode: 0644]
website/js/shop.js [new file with mode: 0644]
website/js/site.js
website/js/sw.js
website/js/vendor/flatpickr/flatpickr.css [new file with mode: 0644]
website/js/vendor/flatpickr/flatpickr.js [new file with mode: 0644]
website/js/vendor/flatpickr/flatpickr.min.css [new file with mode: 0644]
website/js/vendor/flatpickr/flatpickr.min.js [new file with mode: 0644]
website/js/vendor/flatpickr/ie.css [new file with mode: 0644]
website/js/vendor/flatpickr/index.d.ts [new file with mode: 0644]
website/js/vendor/flatpickr/l10n/de.d.ts [new file with mode: 0644]
website/js/vendor/flatpickr/l10n/de.js [new file with mode: 0644]
website/js/vendor/flatpickr/l10n/default.d.ts [new file with mode: 0644]
website/js/vendor/flatpickr/l10n/default.js [new file with mode: 0644]
website/js/vendor/flatpickr/l10n/fr.d.ts [new file with mode: 0644]
website/js/vendor/flatpickr/l10n/fr.js [new file with mode: 0644]
website/js/vendor/flatpickr/l10n/index.d.ts [new file with mode: 0644]
website/js/vendor/flatpickr/l10n/index.js [new file with mode: 0644]
website/js/vendor/flatpickr/plugins/confirmDate/confirmDate.css [new file with mode: 0644]
website/js/vendor/flatpickr/plugins/confirmDate/confirmDate.d.ts [new file with mode: 0644]
website/js/vendor/flatpickr/plugins/confirmDate/confirmDate.js [new file with mode: 0644]
website/js/vendor/flatpickr/plugins/labelPlugin/labelPlugin.d.ts [new file with mode: 0644]
website/js/vendor/flatpickr/plugins/labelPlugin/labelPlugin.js [new file with mode: 0644]
website/js/vendor/flatpickr/plugins/minMaxTimePlugin.d.ts [new file with mode: 0644]
website/js/vendor/flatpickr/plugins/minMaxTimePlugin.js [new file with mode: 0644]
website/js/vendor/flatpickr/plugins/momentPlugin.d.ts [new file with mode: 0644]
website/js/vendor/flatpickr/plugins/momentPlugin.js [new file with mode: 0644]
website/js/vendor/flatpickr/plugins/monthSelect/index.d.ts [new file with mode: 0644]
website/js/vendor/flatpickr/plugins/monthSelect/index.js [new file with mode: 0644]
website/js/vendor/flatpickr/plugins/monthSelect/style.css [new file with mode: 0644]
website/js/vendor/flatpickr/plugins/monthSelect/tests.spec.d.ts [new file with mode: 0644]
website/js/vendor/flatpickr/plugins/rangePlugin.d.ts [new file with mode: 0644]
website/js/vendor/flatpickr/plugins/rangePlugin.js [new file with mode: 0644]
website/js/vendor/flatpickr/plugins/scrollPlugin.d.ts [new file with mode: 0644]
website/js/vendor/flatpickr/plugins/scrollPlugin.js [new file with mode: 0644]
website/js/vendor/flatpickr/plugins/weekSelect/weekSelect.d.ts [new file with mode: 0644]
website/js/vendor/flatpickr/plugins/weekSelect/weekSelect.js [new file with mode: 0644]
website/js/vendor/flatpickr/themes/airbnb.css [new file with mode: 0644]
website/js/vendor/flatpickr/types/globals.d.ts [new file with mode: 0644]
website/js/vendor/flatpickr/types/instance.d.ts [new file with mode: 0644]
website/js/vendor/flatpickr/types/locale.d.ts [new file with mode: 0644]
website/js/vendor/flatpickr/types/options.d.ts [new file with mode: 0644]
website/js/vendor/flatpickr/typings.d.ts [new file with mode: 0644]
website/js/vendor/flatpickr/utils/dates.d.ts [new file with mode: 0644]
website/js/vendor/flatpickr/utils/dom.d.ts [new file with mode: 0644]
website/js/vendor/flatpickr/utils/formatting.d.ts [new file with mode: 0644]
website/js/vendor/flatpickr/utils/index.d.ts [new file with mode: 0644]
website/js/vendor/flatpickr/utils/polyfills.d.ts [new file with mode: 0644]
website/js/vendor/moment/moment-with-locales.min.js [new file with mode: 0644]
website/js/vendor/moment/moment.min.js [new file with mode: 0644]
website/js/vendor/mustache/mustache.js [new file with mode: 0644]
website/js/vendor/mustache/mustache.min.js [new file with mode: 0644]
website/js/vendor/slimselect/slimselect.css [new file with mode: 0644]
website/js/vendor/slimselect/slimselect.js [new file with mode: 0644]
website/js/vendor/slimselect/slimselect.min.css [new file with mode: 0644]
website/js/vendor/slimselect/slimselect.min.js [new file with mode: 0644]
website/js/vendor/slimselect/slimselect.scss [new file with mode: 0644]
website/js/vendor/tabulator/css/tabulator.css [new file with mode: 0644]
website/js/vendor/tabulator/css/tabulator.min.css [new file with mode: 0644]
website/js/vendor/tabulator/css/tabulator.min.css.map [new file with mode: 0644]
website/js/vendor/tabulator/css/tabulator_site.css [new file with mode: 0644]
website/js/vendor/tabulator/css/tabulator_site.min.css [new file with mode: 0644]
website/js/vendor/tabulator/css/tabulator_site.min.css.map [new file with mode: 0644]
website/js/vendor/tabulator/js/modules/accessor.js [new file with mode: 0644]
website/js/vendor/tabulator/js/modules/accessor.min.js [new file with mode: 0644]
website/js/vendor/tabulator/js/modules/ajax.js [new file with mode: 0644]
website/js/vendor/tabulator/js/modules/ajax.min.js [new file with mode: 0644]
website/js/vendor/tabulator/js/modules/calculation_colums.js [new file with mode: 0644]
website/js/vendor/tabulator/js/modules/calculation_colums.min.js [new file with mode: 0644]
website/js/vendor/tabulator/js/modules/clipboard.js [new file with mode: 0644]
website/js/vendor/tabulator/js/modules/clipboard.min.js [new file with mode: 0644]
website/js/vendor/tabulator/js/modules/data_tree.js [new file with mode: 0644]
website/js/vendor/tabulator/js/modules/data_tree.min.js [new file with mode: 0644]
website/js/vendor/tabulator/js/modules/download.js [new file with mode: 0644]
website/js/vendor/tabulator/js/modules/download.min.js [new file with mode: 0644]
website/js/vendor/tabulator/js/modules/edit.js [new file with mode: 0644]
website/js/vendor/tabulator/js/modules/edit.min.js [new file with mode: 0644]
website/js/vendor/tabulator/js/modules/export.js [new file with mode: 0644]
website/js/vendor/tabulator/js/modules/export.min.js [new file with mode: 0644]
website/js/vendor/tabulator/js/modules/filter.js [new file with mode: 0644]
website/js/vendor/tabulator/js/modules/filter.min.js [new file with mode: 0644]
website/js/vendor/tabulator/js/modules/format.js [new file with mode: 0644]
website/js/vendor/tabulator/js/modules/format.min.js [new file with mode: 0644]
website/js/vendor/tabulator/js/modules/frozen_columns.js [new file with mode: 0644]
website/js/vendor/tabulator/js/modules/frozen_columns.min.js [new file with mode: 0644]
website/js/vendor/tabulator/js/modules/frozen_rows.js [new file with mode: 0644]
website/js/vendor/tabulator/js/modules/frozen_rows.min.js [new file with mode: 0644]
website/js/vendor/tabulator/js/modules/group_rows.js [new file with mode: 0644]
website/js/vendor/tabulator/js/modules/group_rows.min.js [new file with mode: 0644]
website/js/vendor/tabulator/js/modules/history.js [new file with mode: 0644]
website/js/vendor/tabulator/js/modules/history.min.js [new file with mode: 0644]
website/js/vendor/tabulator/js/modules/html_table_import.js [new file with mode: 0644]
website/js/vendor/tabulator/js/modules/html_table_import.min.js [new file with mode: 0644]
website/js/vendor/tabulator/js/modules/keybindings.js [new file with mode: 0644]
website/js/vendor/tabulator/js/modules/keybindings.min.js [new file with mode: 0644]
website/js/vendor/tabulator/js/modules/menu.js [new file with mode: 0644]
website/js/vendor/tabulator/js/modules/menu.min.js [new file with mode: 0644]
website/js/vendor/tabulator/js/modules/moveable_columns.js [new file with mode: 0644]
website/js/vendor/tabulator/js/modules/moveable_columns.min.js [new file with mode: 0644]
website/js/vendor/tabulator/js/modules/moveable_rows.js [new file with mode: 0644]
website/js/vendor/tabulator/js/modules/moveable_rows.min.js [new file with mode: 0644]
website/js/vendor/tabulator/js/modules/mutator.js [new file with mode: 0644]
website/js/vendor/tabulator/js/modules/mutator.min.js [new file with mode: 0644]
website/js/vendor/tabulator/js/modules/page.js [new file with mode: 0644]
website/js/vendor/tabulator/js/modules/page.min.js [new file with mode: 0644]
website/js/vendor/tabulator/js/modules/persistence.js [new file with mode: 0644]
website/js/vendor/tabulator/js/modules/persistence.min.js [new file with mode: 0644]
website/js/vendor/tabulator/js/modules/print.js [new file with mode: 0644]
website/js/vendor/tabulator/js/modules/print.min.js [new file with mode: 0644]
website/js/vendor/tabulator/js/modules/reactive_data.js [new file with mode: 0644]
website/js/vendor/tabulator/js/modules/reactive_data.min.js [new file with mode: 0644]
website/js/vendor/tabulator/js/modules/resize_columns.js [new file with mode: 0644]
website/js/vendor/tabulator/js/modules/resize_columns.min.js [new file with mode: 0644]
website/js/vendor/tabulator/js/modules/resize_rows.js [new file with mode: 0644]
website/js/vendor/tabulator/js/modules/resize_rows.min.js [new file with mode: 0644]
website/js/vendor/tabulator/js/modules/resize_table.js [new file with mode: 0644]
website/js/vendor/tabulator/js/modules/resize_table.min.js [new file with mode: 0644]
website/js/vendor/tabulator/js/modules/responsive_layout.js [new file with mode: 0644]
website/js/vendor/tabulator/js/modules/responsive_layout.min.js [new file with mode: 0644]
website/js/vendor/tabulator/js/modules/select_row.js [new file with mode: 0644]
website/js/vendor/tabulator/js/modules/select_row.min.js [new file with mode: 0644]
website/js/vendor/tabulator/js/modules/sort.js [new file with mode: 0644]
website/js/vendor/tabulator/js/modules/sort.min.js [new file with mode: 0644]
website/js/vendor/tabulator/js/modules/validate.js [new file with mode: 0644]
website/js/vendor/tabulator/js/modules/validate.min.js [new file with mode: 0644]
website/js/vendor/tabulator/js/tabulator.es2015.js [new file with mode: 0644]
website/js/vendor/tabulator/js/tabulator.js [new file with mode: 0644]
website/js/vendor/tabulator/js/tabulator.min.js [new file with mode: 0644]
website/js/vendor/tabulator/js/tabulator_core.js [new file with mode: 0644]
website/js/vendor/tabulator/js/tabulator_core.min.js [new file with mode: 0644]
website/js/vendor/tinymce/changelog.txt [new file with mode: 0644]
website/js/vendor/tinymce/js/tinymce/jquery.tinymce.min.js [new file with mode: 0644]
website/js/vendor/tinymce/js/tinymce/langs/de.js [new file with mode: 0644]
website/js/vendor/tinymce/js/tinymce/langs/fr_FR.js [new file with mode: 0644]
website/js/vendor/tinymce/js/tinymce/langs/readme.md [new file with mode: 0644]
website/js/vendor/tinymce/js/tinymce/license.txt [new file with mode: 0644]
website/js/vendor/tinymce/js/tinymce/plugins/advlist/plugin.min.js [new file with mode: 0644]
website/js/vendor/tinymce/js/tinymce/plugins/anchor/plugin.min.js [new file with mode: 0644]
website/js/vendor/tinymce/js/tinymce/plugins/autolink/plugin.min.js [new file with mode: 0644]
website/js/vendor/tinymce/js/tinymce/plugins/autoresize/plugin.min.js [new file with mode: 0644]
website/js/vendor/tinymce/js/tinymce/plugins/autosave/plugin.min.js [new file with mode: 0644]
website/js/vendor/tinymce/js/tinymce/plugins/bbcode/plugin.min.js [new file with mode: 0644]
website/js/vendor/tinymce/js/tinymce/plugins/charmap/plugin.min.js [new file with mode: 0644]
website/js/vendor/tinymce/js/tinymce/plugins/code/plugin.min.js [new file with mode: 0644]
website/js/vendor/tinymce/js/tinymce/plugins/codesample/plugin.min.js [new file with mode: 0644]
website/js/vendor/tinymce/js/tinymce/plugins/colorpicker/plugin.min.js [new file with mode: 0644]
website/js/vendor/tinymce/js/tinymce/plugins/contextmenu/plugin.min.js [new file with mode: 0644]
website/js/vendor/tinymce/js/tinymce/plugins/directionality/plugin.min.js [new file with mode: 0644]
website/js/vendor/tinymce/js/tinymce/plugins/emoticons/js/emojis.js [new file with mode: 0644]
website/js/vendor/tinymce/js/tinymce/plugins/emoticons/js/emojis.min.js [new file with mode: 0644]
website/js/vendor/tinymce/js/tinymce/plugins/emoticons/plugin.min.js [new file with mode: 0644]
website/js/vendor/tinymce/js/tinymce/plugins/fullpage/plugin.min.js [new file with mode: 0644]
website/js/vendor/tinymce/js/tinymce/plugins/fullscreen/plugin.min.js [new file with mode: 0644]
website/js/vendor/tinymce/js/tinymce/plugins/help/plugin.min.js [new file with mode: 0644]
website/js/vendor/tinymce/js/tinymce/plugins/hr/plugin.min.js [new file with mode: 0644]
website/js/vendor/tinymce/js/tinymce/plugins/image/plugin.min.js [new file with mode: 0644]
website/js/vendor/tinymce/js/tinymce/plugins/imagetools/plugin.min.js [new file with mode: 0644]
website/js/vendor/tinymce/js/tinymce/plugins/importcss/plugin.min.js [new file with mode: 0644]
website/js/vendor/tinymce/js/tinymce/plugins/insertdatetime/plugin.min.js [new file with mode: 0644]
website/js/vendor/tinymce/js/tinymce/plugins/legacyoutput/plugin.min.js [new file with mode: 0644]
website/js/vendor/tinymce/js/tinymce/plugins/link/plugin.min.js [new file with mode: 0644]
website/js/vendor/tinymce/js/tinymce/plugins/lists/plugin.min.js [new file with mode: 0644]
website/js/vendor/tinymce/js/tinymce/plugins/media/plugin.min.js [new file with mode: 0644]
website/js/vendor/tinymce/js/tinymce/plugins/nonbreaking/plugin.min.js [new file with mode: 0644]
website/js/vendor/tinymce/js/tinymce/plugins/noneditable/plugin.min.js [new file with mode: 0644]
website/js/vendor/tinymce/js/tinymce/plugins/pagebreak/plugin.min.js [new file with mode: 0644]
website/js/vendor/tinymce/js/tinymce/plugins/paste/plugin.min.js [new file with mode: 0644]
website/js/vendor/tinymce/js/tinymce/plugins/preview/plugin.min.js [new file with mode: 0644]
website/js/vendor/tinymce/js/tinymce/plugins/print/plugin.min.js [new file with mode: 0644]
website/js/vendor/tinymce/js/tinymce/plugins/quickbars/plugin.min.js [new file with mode: 0644]
website/js/vendor/tinymce/js/tinymce/plugins/save/plugin.min.js [new file with mode: 0644]
website/js/vendor/tinymce/js/tinymce/plugins/searchreplace/plugin.min.js [new file with mode: 0644]
website/js/vendor/tinymce/js/tinymce/plugins/spellchecker/plugin.min.js [new file with mode: 0644]
website/js/vendor/tinymce/js/tinymce/plugins/tabfocus/plugin.min.js [new file with mode: 0644]
website/js/vendor/tinymce/js/tinymce/plugins/table/plugin.min.js [new file with mode: 0644]
website/js/vendor/tinymce/js/tinymce/plugins/template/plugin.min.js [new file with mode: 0644]
website/js/vendor/tinymce/js/tinymce/plugins/textcolor/plugin.min.js [new file with mode: 0644]
website/js/vendor/tinymce/js/tinymce/plugins/textpattern/plugin.min.js [new file with mode: 0644]
website/js/vendor/tinymce/js/tinymce/plugins/toc/plugin.min.js [new file with mode: 0644]
website/js/vendor/tinymce/js/tinymce/plugins/visualblocks/plugin.min.js [new file with mode: 0644]
website/js/vendor/tinymce/js/tinymce/plugins/visualchars/plugin.min.js [new file with mode: 0644]
website/js/vendor/tinymce/js/tinymce/plugins/wordcount/plugin.min.js [new file with mode: 0644]
website/js/vendor/tinymce/js/tinymce/skins/content/dark/content.min.css [new file with mode: 0644]
website/js/vendor/tinymce/js/tinymce/skins/content/default/content.min.css [new file with mode: 0644]
website/js/vendor/tinymce/js/tinymce/skins/content/document/content.min.css [new file with mode: 0644]
website/js/vendor/tinymce/js/tinymce/skins/content/writer/content.min.css [new file with mode: 0644]
website/js/vendor/tinymce/js/tinymce/skins/ui/oxide-dark/content.inline.min.css [new file with mode: 0644]
website/js/vendor/tinymce/js/tinymce/skins/ui/oxide-dark/content.min.css [new file with mode: 0644]
website/js/vendor/tinymce/js/tinymce/skins/ui/oxide-dark/content.mobile.min.css [new file with mode: 0644]
website/js/vendor/tinymce/js/tinymce/skins/ui/oxide-dark/fonts/tinymce-mobile.woff [new file with mode: 0644]
website/js/vendor/tinymce/js/tinymce/skins/ui/oxide-dark/skin.min.css [new file with mode: 0644]
website/js/vendor/tinymce/js/tinymce/skins/ui/oxide-dark/skin.mobile.min.css [new file with mode: 0644]
website/js/vendor/tinymce/js/tinymce/skins/ui/oxide/content.inline.min.css [new file with mode: 0644]
website/js/vendor/tinymce/js/tinymce/skins/ui/oxide/content.min.css [new file with mode: 0644]
website/js/vendor/tinymce/js/tinymce/skins/ui/oxide/content.mobile.min.css [new file with mode: 0644]
website/js/vendor/tinymce/js/tinymce/skins/ui/oxide/fonts/tinymce-mobile.woff [new file with mode: 0644]
website/js/vendor/tinymce/js/tinymce/skins/ui/oxide/skin.min.css [new file with mode: 0644]
website/js/vendor/tinymce/js/tinymce/skins/ui/oxide/skin.mobile.min.css [new file with mode: 0644]
website/js/vendor/tinymce/js/tinymce/themes/mobile/theme.min.js [new file with mode: 0644]
website/js/vendor/tinymce/js/tinymce/themes/silver/theme.min.js [new file with mode: 0644]
website/js/vendor/tinymce/js/tinymce/tinymce.min.js [new file with mode: 0644]
website/lib/config.php
website/lib/database.php
website/manifest copy.json [deleted file]
website/manifest.json [deleted file]
website/tmpl/index.html.mustache
website/tmpl/pages/gallery.html.mustache [new file with mode: 0644]
website/tmpl/pages/home.html.mustache
website/tmpl/pages/rendezvous.html.mustache [new file with mode: 0644]
website/tmpl/pages/shop.html.mustache

index b41cef1..745ab62 100644 (file)
@@ -1,2 +1,3 @@
 app/lib/perl5/*
-website/lib/vendor/*
\ No newline at end of file
+website/lib/vendor/*
+admin/lib/vendor/*
diff --git a/admin/.htaccess b/admin/.htaccess
new file mode 100644 (file)
index 0000000..0969f29
--- /dev/null
@@ -0,0 +1,9 @@
+
+RewriteEngine on
+DirectoryIndex index.php index.html 
+php_flag display_startup_errors on
+php_flag display_errors on
+php_flag html_errors on
+RewriteCond %{REQUEST_FILENAME} !-f
+RewriteCond %{REQUEST_FILENAME} !-d
+RewriteRule "^(.*)$" "index.php"  [NC,L,QSA]
\ No newline at end of file
diff --git a/admin/css/fonts/pot.svg b/admin/css/fonts/pot.svg
new file mode 100644 (file)
index 0000000..0858544
--- /dev/null
@@ -0,0 +1,138 @@
+<?xml version="1.0" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
+<svg xmlns="http://www.w3.org/2000/svg">
+<metadata>Generated by IcoMoon</metadata>
+<defs>
+<font id="pot" horiz-adv-x="1024">
+<font-face units-per-em="1024" ascent="960" descent="-64" />
+<missing-glyph horiz-adv-x="1024" />
+<glyph unicode="&#x20;" horiz-adv-x="512" d="" />
+<glyph unicode="&#xe900;" glyph-name="pause" d="M811.771 362.91c-12.827-56.112-29.899-108.479-50.513-156.048h68.561c41.745 0 75.792 34.992 75.792 78.049 0 42.958-34.047 77.999-75.792 77.999zM448.901 572.858c-21.735 0-41.836-0.864-61.427-2.062-2.425-36.767-16.93-71.759-56.016-103.2-10.542-8.496-64.738-14.256-42.069 4.034 35.26 28.415 47.108 60.67 46.966 94.654-131.062-14.976-204.753-52.945-217.020-72.433 15.484-24.48 126.723-78.91 329.566-78.91s314.083 54.43 329.566 78.91c-11.054 17.616-72.293 50.402-180.407 67.584-4.29-33.31-19.31-65.088-55.036-93.84-10.542-8.496-64.692-14.256-42.069 4.034 35.772 28.845 47.433 61.535 47.014 96.046-30.412 2.977-62.734 5.183-99.067 5.183zM606.361 959.994c12.045 0.162 19.893-2.922 8.443-11.779-122.060-94.127-39.598-214.366-19.355-324.668 139.969-20.256 238.521-68.495 238.57-124.991-2.659-27.263-6.576-53.519-11.008-79.391h6.809c72.014 0 130.41-60.096 130.41-134.255s-58.395-134.304-130.41-134.304h-95.802c-71.22-131.805-172.385-214.606-285.117-214.606-193.653 0-353.96 243.311-385.118 562.363 0 59.856 110.027 110.305 262.545 128.255-12.082 41.569-31.764 84.049-41.045 124.367-20.055 87.169 6.997 148.223 75.886 201.312 5.34 4.128 21.583 7.536 33.628 7.698s19.892-2.922 8.441-11.779c-119.122-91.871-43.515-208.557-20.895-316.605 21.689 1.298 43.797 2.112 66.557 2.112 30.318 0 59.654-1.392 87.919-3.694-12.173 40.462-30.97 81.694-39.971 120.957-20.055 87.169 6.994 148.223 75.886 201.312 5.339 4.128 21.581 7.536 33.626 7.698z" />
+<glyph unicode="&#xe901;" glyph-name="calendar" d="M800 832h-544c-52.995-0.060-95.94-43.005-96-95.994v-608.006c0.042-35.329 28.671-63.958 63.996-64h608.004c35.329 0.042 63.958 28.671 64 63.996v608.004c-0.060 52.995-43.005 95.94-95.994 96h-0.006zM384 144c0-8.837-7.163-16-16-16v0h-128c-8.837 0-16 7.163-16 16v0 96c0 8.837 7.163 16 16 16v0h128c8.837 0 16-7.163 16-16v0zM384 336c0-8.837-7.163-16-16-16v0h-128c-8.837 0-16 7.163-16 16v0 96c0 8.837 7.163 16 16 16v0h128c8.837 0 16-7.163 16-16v0zM384 528c0-8.837-7.163-16-16-16v0h-128c-8.837 0-16 7.163-16 16v0 96c0 8.837 7.163 16 16 16v0h128c8.837 0 16-7.163 16-16v0zM608 144c0-8.837-7.163-16-16-16v0h-128c-8.837 0-16 7.163-16 16v0 96c0 8.837 7.163 16 16 16v0h128c8.837 0 16-7.163 16-16v0zM608 336c0-8.837-7.163-16-16-16v0h-128c-8.837 0-16 7.163-16 16v0 96c0 8.837 7.163 16 16 16v0h128c8.837 0 16-7.163 16-16v0zM608 528c0-8.837-7.163-16-16-16v0h-128c-8.837 0-16 7.163-16 16v0 96c0 8.837 7.163 16 16 16v0h128c8.837 0 16-7.163 16-16v0zM832 144c0-8.837-7.163-16-16-16v0h-128c-8.837 0-16 7.163-16 16v0 96c0 8.837 7.163 16 16 16v0h128c8.837 0 16-7.163 16-16v0zM832 336c0-8.837-7.163-16-16-16v0h-128c-8.837 0-16 7.163-16 16v0 96c0 8.837 7.163 16 16 16v0h128c8.837 0 16-7.163 16-16v0zM832 528c0-8.837-7.163-16-16-16v0h-128c-8.837 0-16 7.163-16 16v0 96c0 8.837 7.163 16 16 16v0h128c8.837 0 16-7.163 16-16v0z" />
+<glyph unicode="&#xe902;" glyph-name="clocktime" d="M398.164 640.5v-137.594c-19.007-10.912-31.602-31.092-31.602-54.214 0-6.076 0.87-11.948 2.491-17.5l-0.11 0.44-51.514-51.516c-5.698-5.775-9.217-13.712-9.217-22.471 0-17.673 14.327-32 32-32 8.759 0 16.696 3.519 22.474 9.22l-0.004-0.003 51.514 51.512c4.998-1.409 10.738-2.219 16.666-2.219 35.183 0 63.704 28.521 63.704 63.704 0 23.678-12.918 44.339-32.091 55.319l-0.311 0.164v137.156c0 17.673-14.327 32-32 32s-32-14.327-32-32v0zM433.931 831.984c199.204-2.11 361.934-155.453 378.912-350.54l0.101-1.444h67.084c8.837-0.001 16.001-7.165 16.001-16.002 0-3.407-1.064-6.564-2.879-9.159l0.034 0.052-113.465-163.891c-2.927-4.187-7.725-6.891-13.154-6.891s-10.227 2.704-13.12 6.84l-0.034 0.052-113.465 163.891c-1.78 2.543-2.845 5.701-2.845 9.108 0 8.837 7.164 16.001 16.001 16.002h63.575c-16.574 142.661-135.194 252.799-280.171 255.94l-0.315 0.005c-0.737 0.007-1.609 0.011-2.481 0.011-156.612 0-284.354-123.605-290.993-278.582l-0.020-0.6c-0.089-2.677-0.14-5.823-0.14-8.982 0-158.943 128.849-287.792 287.792-287.792 76.653 0 146.307 29.968 197.884 78.827l-0.131-0.123c5.699 5.468 13.451 8.834 21.988 8.834 10.78 0 20.307-5.367 26.053-13.575l0.068-0.102 18.316-26.461c3.512-5.104 5.609-11.419 5.609-18.223 0-9.59-4.165-18.207-10.786-24.14l-0.031-0.027c-68.025-62.619-159.201-101.009-259.344-101.009-211.769 0-383.441 171.672-383.441 383.441 0 5.662 0.123 11.296 0.366 16.898l-0.028-0.799c10.572 205.602 179.792 368.321 387.044 368.445h0.012z" />
+<glyph unicode="&#xe903;" glyph-name="cube" d="M160 621.883l320-192.008v-351.992l-304.469 182.68c-9.368 5.696-15.53 15.847-15.531 27.437v0zM528.469 859.437c-4.703 2.857-10.388 4.547-16.469 4.547s-11.766-1.691-16.612-4.628l0.143 0.080-303.527-182.117 319.996-192 319.996 192zM544 429.875v-351.992l304.469 182.68c9.368 5.696 15.53 15.847 15.531 27.437v0 333.883z" />
+<glyph unicode="&#xe904;" glyph-name="cubelight" d="M862.891 648.313c-0.42 1.193-0.819 2.148-1.264 3.077l0.080-0.186c-0.606 1.84-1.273 3.397-2.054 4.885l0.084-0.175c-2.136 2.898-3.775 5.032-5.443 7.141l0.447-0.586c-0.89 0.795-1.858 1.567-2.869 2.283l-0.102 0.069c-0.991 0.903-2.067 1.762-3.198 2.549l-0.103 0.068-320 192c-4.703 2.857-10.388 4.547-16.469 4.547s-11.766-1.691-16.612-4.628l0.143 0.080-320-192c-1.226-0.854-2.295-1.709-3.306-2.626l0.027 0.024c-1.121-0.791-2.097-1.571-3.025-2.402l0.031 0.027c-0.962-1.071-1.874-2.241-2.701-3.472l-0.072-0.114c-0.744-0.875-1.474-1.84-2.148-2.846l-0.072-0.115c-0.675-1.276-1.326-2.795-1.858-4.368l-0.066-0.226c-0.389-1.024-0.947-1.961-1.232-3.016-0.699-2.49-1.103-5.349-1.107-8.302v-352.002c0.001-11.591 6.163-21.742 15.39-27.357l0.141-0.080 320.688-192.406c1.479-0.783 3.216-1.505 5.024-2.066l0.221-0.059c0.76-0.266 1.461-0.704 2.232-0.906 2.489-0.714 5.349-1.125 8.304-1.125s5.815 0.411 8.524 1.178l-0.22-0.053c0.772 0.203 1.472 0.64 2.232 0.906 2.028 0.62 3.765 1.342 5.415 2.207l-0.171-0.082 0.34 0.258 0.348 0.148 320 192c9.368 5.695 15.531 15.847 15.532 27.437v0 352c-0.004 2.958-0.408 5.821-1.163 8.538l0.053-0.225zM480 152.531l-256 153.594v277.344l256-153.594zM512 485.32l-257.807 154.68 257.807 154.688 257.807-154.688zM800 306.125l-256-153.594v277.344l256 153.594z" />
+<glyph unicode="&#xe905;" glyph-name="dashboard" d="M797.156 159.875c-8.529-10.218-21.271-16.672-35.519-16.672-14.515 0-27.465 6.697-35.93 17.171l-0.068 0.087c-3.873 1.648-7.184 3.885-9.987 6.638l-67.901 67.901c-5.79 5.79-9.372 13.789-9.372 22.625 0 17.671 14.325 31.997 31.997 31.997 8.836 0 16.835-3.581 22.625-9.372v0l43.26-43.258c32.994 40.283 55.204 90.578 61.549 145.7l0.122 1.308h-61.932c-17.673 0-32 14.327-32 32s14.327 32 32 32v0h61.98c-0.262 2.437-0.252 4.84-0.574 7.281-7.523 53.851-29.185 101.615-61.077 140.704l0.405-0.512-43.703-43.723c-5.79-5.79-13.789-9.372-22.625-9.372-17.671 0-31.997 14.325-31.997 31.997 0 8.836 3.581 16.835 9.372 22.625l43.729 43.75c-40.045 32.607-89.888 54.662-144.495 61.243l-1.359 0.133c-0.555 0.064-1.102 0.043-1.656 0.101v-62.228c0-17.673-14.327-32-32-32s-32 14.327-32 32v0 62.14c-56.57-6.349-107.037-28.47-148.016-61.804l0.52 0.41 43.746-43.746c5.754-5.74 9.32-13.67 9.342-22.433v-0.004l165.252-120.793c13.687-10.088 22.469-26.147 22.469-44.256 0-30.276-24.544-54.82-54.82-54.82-18.11 0-34.169 8.782-44.151 22.32l-0.106 0.151-120.787 165.242c-8.77 0.028-16.703 3.594-22.449 9.344l-43.724 43.726c-32.699-40.559-54.775-90.956-61.278-146.12l-0.13-1.357h62.133c17.673 0 32-14.327 32-32s-14.327-32-32-32v0h-61.984c6.676-56.414 28.847-106.679 62.085-147.591l-0.416 0.528 43.313 43.312c5.79 5.79 13.789 9.372 22.625 9.372 17.671 0 31.997-14.325 31.997-31.997 0-8.836-3.581-16.835-9.372-22.625v0l-67.905-67.906c-2.759-2.694-6.015-4.893-9.616-6.445l-0.206-0.079c-8.543-10.61-21.531-17.341-36.092-17.341-14.245 0-26.985 6.443-35.465 16.573l-0.059 0.072c-61.126 67.675-98.527 157.799-98.527 256.658 0 211.831 171.723 383.555 383.555 383.555 15.672 0 31.124-0.94 46.303-2.766l-1.83 0.179c192.044-22.638 339.606-184.452 339.606-380.731 0-98.991-37.534-189.216-99.146-257.219l0.29 0.325z" />
+<glyph unicode="&#xe906;" glyph-name="history" d="M623.040 527.829l-69.717-69.76c0.811-3.264 1.344-6.699 1.344-10.197 0-23.552-19.093-42.795-42.667-42.795-15.957 0-29.717 10.923-37.035 21.589h-58.965c-5.867 0-10.667 5.312-10.667 11.157v20.331c0 5.867 4.8 11.179 10.667 11.179h58.965c7.339 10.667 21.077 21.589 37.035 21.589 4.203 0 8.213-1.045 12.053-2.176l69.077 69.056c4.139 4.139 10.944 4.139 15.083 0l14.805-14.848c4.181-4.16 4.181-10.944 0.021-15.125zM763.541 405.333c2.453 21.333 4.203 28.459 4.203 43.051 0 141.184-114.837 256.213-256 256.213s-255.872-114.731-255.872-255.936c0-141.12 106.795-255.872 256.128-255.872v0.043c42.667 0.128 96.192 13.696 139.243 41.835l1.216 0.832 31.488-43.648c3.456-4.779 7.701-4.011 9.429 1.557l47.040 137.387c1.749 5.611-1.643 10.24-7.531 10.368l-145.792-0.043c-5.888 0.128-7.893-3.712-4.48-8.448l32.32-45.227c-31.893-20.48-60.267-30.357-102.933-30.507v-0.171c-106.667 0.021-192.171 85.973-192.128 192.021 0 106.048 85.909 192 191.957 192 106.027 0 191.957-86.357 191.957-192.427 0-14.677-1.963-21.717-5.12-43.051h64.875z" />
+<glyph unicode="&#xe907;" glyph-name="shop" d="M188.588 347.734v-280.78h320.912v280.78zM108.388 788.962h802.215c22.085 0 40.105-18.021 40.105-40.115v-43.691l68.324-195.76c0 0 4.999-41.069-36.35-41.069-17.128 0-26.522 7.093-31.975 15.333v-496.922c0-22.095-18.019-40.116-40.105-40.116h-80.227v401.112h-200.56v-401.112h-521.429c-22.105 0-40.104 18.021-40.104 40.116v496.985c-4.935-8.275-13.188-15.397-27.579-15.397-41.369 0-40.705 41.069-40.705 41.069l68.284 195.74v43.712c0 22.093 17.999 40.115 40.104 40.115zM108.377 949.41h802.23c22.086 0 40.105-18.019 40.105-40.113v-40.115c0-22.084-18.020-40.104-40.105-40.104h-802.23c-22.105 0-40.105 18.021-40.105 40.104v40.115c0 22.094 17.999 40.113 40.105 40.113z" />
+<glyph unicode="&#xe908;" glyph-name="template" d="M502.522 615.239l80.861-74.562-92.996-19.661zM411.045 829.025h192.977l-70.344-75.324h-117.69l-5.087-164.232c0 0-6.541-108.612-126.229-95.489l-102.575 2.793v-466.617c0-10.396 8.467-18.817 18.858-18.817h527.19c10.354 0 18.821 8.421 18.821 18.817v559.653l75.36 75.979v-635.632c0-51.997-42.186-94.113-94.181-94.113h-527.19c-51.996 0-94.145 42.117-94.145 94.113v477.886l37.28 39.323 0.037 1.077 195.375 205.259h-0.546l-52.214-55.075 54.721 57.95h0.763l1.744 1.812h0.145zM707.15 880.343l131.403-121.256-162.198-175.828-2.761 27.837-43.293 14.716-1.217 29.473-43.201 11.446-5.196 33.247-35.771 4.578zM797.329 959.977c5.834-0.231 11.27-2.23 15.501-6.119l93.089-85.922c11.299-10.41 9.845-30.426-3.307-44.623l-17.841-19.376-134.038 123.651 17.859 19.376c8.187 8.874 19.013 13.399 28.736 13.013z" />
+<glyph unicode="&#xe909;" glyph-name="remove" d="M824.447 960l199.553-199.586-312.445-312.431 312.445-312.443-199.552-199.541-312.448 312.437-312.451-312.437-199.533 199.539 312.432 312.443-312.448 312.438 199.552 199.564 312.446-312.444z" />
+<glyph unicode="&#xe90a;" glyph-name="access" d="M941.97 557.736l-133.783-128.013h-172.028l-38.165-22.101h-126.982l-354.747-358.103 38.248-36.558 328.823 332.987h114.658l38.165 22.060h191.111l152.906 146.273zM769.981 813.727v-124.175h114.658v124.175zM502.457 960h401.307l114.658-109.715v-409.121l-129.769-139.457h-176.002l-38.245-36.558-38.248 36.558-38.165-36.558h-95.536v-73.157h-76.453v-73.119h-76.41v-73.155h-76.493v-73.119h-38.208v-36.599h-191.069l-38.248 36.599v255.95l349.545 334.517-38.248 36.558 32.719 31.23v182.872z" />
+<glyph unicode="&#xe90b;" glyph-name="address" d="M800 832h-480c-0.001 0-0.002 0-0.003 0-70.691 0-127.997-57.306-127.997-127.997 0-0.001 0-0.002 0-0.003v0-512c0-70.692 57.308-128 128-128v0h480c17.673 0 32 14.327 32 32v0 64h-512c-17.673 0-32 14.327-32 32s14.327 32 32 32v0h512v576c0 17.673-14.327 32-32 32v0zM642.012 368.25c0-0.001 0-0.001 0-0.002 0-8.974-7.274-16.248-16.248-16.248-0.001 0-0.003 0-0.004 0h-227.52c-0.001 0-0.003 0-0.004 0-8.974 0-16.248 7.274-16.248 16.248 0 0.001 0 0.001 0 0.002v0 30.918c0.002 11.475 5.947 21.561 14.924 27.348l0.128 0.077 49.947 31.773-4.711 37.672c-11.313 5.176-20.058 14.331-24.579 25.633l-0.113 0.319-3.48 10.437c-0.96 2.477-1.516 5.344-1.516 8.341 0 4.42 1.21 8.558 3.316 12.1l-0.060-0.109v58.58c0 53.105 43.050 96.154 96.154 96.154s96.154-43.050 96.154-96.154v-58.578c2.046-3.433 3.256-7.571 3.256-11.991 0-2.997-0.556-5.864-1.571-8.503l0.055 0.162-3.48-10.437c-4.633-11.621-13.379-20.776-24.396-25.831l-0.295-0.121-4.71-37.672 49.947-31.773c9.106-5.864 15.051-15.95 15.053-27.425v0zM992 320v-96c0-17.673-14.327-32-32-32v0h-64v160h64c17.673 0 32-14.327 32-32v0zM992 544v-96c0-17.673-14.327-32-32-32v0h-64v160h64c17.673 0 32-14.327 32-32v0zM992 768v-96c0-17.673-14.327-32-32-32v0h-64v160h64c17.673 0 32-14.327 32-32v0z" />
+<glyph unicode="&#xe90c;" glyph-name="apps" d="M608 256v-128c0-17.673-14.327-32-32-32v0h-128c-17.673 0-32 14.327-32 32v0 128c0 17.673 14.327 32 32 32v0h128c17.673 0 32-14.327 32-32v0zM320 288h-128c-17.673 0-32-14.327-32-32v0-128c0-17.673 14.327-32 32-32v0h128c17.673 0 32 14.327 32 32v0 128c0 17.673-14.327 32-32 32v0zM320 544h-128c-17.673 0-32-14.327-32-32v0-128c0-17.673 14.327-32 32-32v0h128c17.673 0 32 14.327 32 32v0 128c0 17.673-14.327 32-32 32v0zM576 544h-128c-17.673 0-32-14.327-32-32v0-128c0-17.673 14.327-32 32-32v0h128c17.673 0 32 14.327 32 32v0 128c0 17.673-14.327 32-32 32v0zM320 800h-128c-17.673 0-32-14.327-32-32v0-128c0-17.673 14.327-32 32-32v0h128c17.673 0 32 14.327 32 32v0 128c0 17.673-14.327 32-32 32v0zM832 800h-128c-17.673 0-32-14.327-32-32v0-128c0-17.673 14.327-32 32-32v0h128c17.673 0 32 14.327 32 32v0 128c0 17.673-14.327 32-32 32v0zM832 544h-128c-17.673 0-32-14.327-32-32v0-128c0-17.673 14.327-32 32-32v0h128c17.673 0 32 14.327 32 32v0 128c0 17.673-14.327 32-32 32v0zM832 288h-128c-17.673 0-32-14.327-32-32v0-128c0-17.673 14.327-32 32-32v0h128c17.673 0 32 14.327 32 32v0 128c0 17.673-14.327 32-32 32v0zM576 800h-128c-17.673 0-32-14.327-32-32v0-128c0-17.673 14.327-32 32-32v0h128c17.673 0 32 14.327 32 32v0 128c0 17.673-14.327 32-32 32v0z" />
+<glyph unicode="&#xe90d;" glyph-name="archive" d="M382.656 229.376v-65.376h258.736v65.376zM25.92 276.432h972.224v-340.432h-972.224zM377.248 654.976v-65.36h258.704v65.36zM25.92 698.56h972.224v-354.064h-85.849l-28.506 178.992-614.892-178.992h-242.976zM230.155 960h544.695l183.054-160.745-0.594-35.335h-890.554l-3.332 36.015z" />
+<glyph unicode="&#xe90e;" glyph-name="calendar1" d="M559.767 183.959h125.060v-121.123h-125.060zM365.241 183.959h125.012v-121.123h-125.012zM170.715 183.959h125.060v-121.123h-125.060zM744.356 374.453h125.059v-121.075h-125.059zM559.767 374.453h125.060v-121.075h-125.060zM365.241 374.453h125.012v-121.075h-125.012zM170.715 374.453h125.060v-121.075h-125.060zM744.356 568.979h125.059v-121.075h-125.059zM549.83 568.979h125.059v-121.075h-125.059zM355.304 568.979h125.060v-121.075h-125.060zM92.933 696.021v-702.974h838.384v702.974zM35.766 960h952.709v-1024.144h-952.709z" />
+<glyph unicode="&#xe90f;" glyph-name="code" d="M684.251 763.073l339.893-251.789v-131.2l-339.893-250.662v136.459l222.52 178.772v2.121l-222.52 178.783zM339.941 763.073v-136.519l-222.478-178.771v-2.063l222.478-178.84v-137.458l-339.941 251.719v131.21zM543.108 906.232l92.079-15.94-155.219-900.571-92.020 15.881z" />
+<glyph unicode="&#xe910;" glyph-name="coin" d="M532.288 652.47c-50.624 0-90.208-20.802-118.912-62.404-17.152-24.802-28.96-53.923-35.264-87.365h-58.432l-11.6-39.364h65.776c-0.528-6.719-0.784-13.6-0.784-20.482 0-7.68 0.256-15.521 0.784-23.041h-54.176l-11.6-39.043h69.504c7.088-48.161 23.488-85.765 48.88-112.486 26.96-28.642 60.24-42.723 99.52-42.723 46.096 0 82.4 17.28 109.344 52.163 22.64 28.963 36 64.645 40.048 107.206h-44.88c-4.768-26.72-11.536-48.003-21.136-64.643-17.616-31.043-43.856-46.563-77.84-46.563-37.024 0-64.752 14.722-83.12 44.163-11.36 17.761-19.152 38.563-23.664 62.565h144.304l11.872 39.362h-160.24c-0.256 4.16-0.256 8.96-0.256 13.761 0 10.401 0.256 20.482 1.024 29.762h147.872l11.6 39.364h-153.92c5.024 24.32 13.088 44.321 24.432 59.844 20.64 28.002 47.856 42.083 81.392 42.083 27.408 0 48.8-7.522 63.968-22.882 15.344-15.040 25.408-36.002 30.432-61.924h45.136c-2.768 34.242-15.856 64.963-39.792 92.166-23.728 26.881-57.2 40.483-100.272 40.483zM512.048 822.4c206.688 0 374.384-167.69 374.384-374.424s-167.696-374.424-374.384-374.424c-206.768 0-374.464 167.69-374.464 374.424s167.392 374.424 374.464 374.424zM512.064 909.28c-254.4 0-461.376-206.88-461.376-461.28s206.976-461.28 461.376-461.28c254.336 0 461.248 206.88 461.248 461.28s-206.912 461.28-461.248 461.28zM512.064 960c282.272 0 511.936-229.6 511.936-512 0-282.24-229.664-512-511.936-512-282.368 0-512.064 229.76-512.064 512 0 282.4 229.696 512 512.064 512z" />
+<glyph unicode="&#xe911;" glyph-name="company" d="M575.675 131.977v-163.575h59.362v163.575zM483.014 131.977v-163.575h59.362v163.575zM391.839 131.977v-163.575h59.345v163.575zM575.675 330.29v-163.575h59.362v163.575zM483.014 330.29v-163.575h59.362v163.575zM391.839 330.29v-163.575h59.345v163.575zM349.372 372.282h328.131v-436.233h-328.131zM345.5 435.484h332.967v-34.738h-332.967zM530.055 549.485v-68.038h57.907v68.038zM438.145 549.485v-68.038h57.907v68.038zM530.79 652.277v-68.038h57.907v68.038zM438.88 652.277v-68.038h57.907v68.038zM403.407 678.682h220.028v-218.574h-220.028zM506.673 960h13.496v-190.111h69.476v-34.754h46.355v-23.153h-244.162v23.153h46.306v34.754h68.528z" />
+<glyph unicode="&#xe912;" glyph-name="cube1" d="M160 621.883l320-192.008v-351.992l-304.469 182.68c-9.368 5.696-15.53 15.847-15.531 27.437v0zM528.469 859.437c-4.703 2.857-10.388 4.547-16.469 4.547s-11.766-1.691-16.612-4.628l0.143 0.080-303.527-182.117 319.996-192 319.996 192zM544 429.875v-351.992l304.469 182.68c9.368 5.696 15.53 15.847 15.531 27.437v0 333.883z" />
+<glyph unicode="&#xe913;" glyph-name="cubelight1" d="M862.891 648.313c-0.42 1.193-0.819 2.148-1.264 3.077l0.080-0.186c-0.606 1.84-1.273 3.397-2.054 4.885l0.084-0.175c-2.136 2.898-3.775 5.032-5.443 7.141l0.447-0.586c-0.89 0.795-1.858 1.567-2.869 2.283l-0.102 0.069c-0.991 0.903-2.067 1.762-3.198 2.549l-0.103 0.068-320 192c-4.703 2.857-10.388 4.547-16.469 4.547s-11.766-1.691-16.612-4.628l0.143 0.080-320-192c-1.226-0.854-2.295-1.709-3.306-2.626l0.027 0.024c-1.121-0.791-2.097-1.571-3.025-2.402l0.031 0.027c-0.962-1.071-1.874-2.241-2.701-3.472l-0.072-0.114c-0.744-0.875-1.474-1.84-2.148-2.846l-0.072-0.115c-0.675-1.276-1.326-2.795-1.858-4.368l-0.066-0.226c-0.389-1.024-0.947-1.961-1.232-3.016-0.699-2.49-1.103-5.349-1.107-8.302v-352.002c0.001-11.591 6.163-21.742 15.39-27.357l0.141-0.080 320.688-192.406c1.479-0.783 3.216-1.505 5.024-2.066l0.221-0.059c0.76-0.266 1.461-0.704 2.232-0.906 2.489-0.714 5.349-1.125 8.304-1.125s5.815 0.411 8.524 1.178l-0.22-0.053c0.772 0.203 1.472 0.64 2.232 0.906 2.028 0.62 3.765 1.342 5.415 2.207l-0.171-0.082 0.34 0.258 0.348 0.148 320 192c9.368 5.695 15.531 15.847 15.532 27.437v0 352c-0.004 2.958-0.408 5.821-1.163 8.538l0.053-0.225zM480 152.531l-256 153.594v277.344l256-153.594zM512 485.32l-257.807 154.68 257.807 154.688 257.807-154.688zM800 306.125l-256-153.594v277.344l256 153.594z" />
+<glyph unicode="&#xe914;" glyph-name="dashboard1" d="M797.156 159.875c-8.529-10.218-21.271-16.672-35.519-16.672-14.515 0-27.465 6.697-35.93 17.171l-0.068 0.087c-3.873 1.648-7.184 3.885-9.987 6.638l-67.901 67.901c-5.79 5.79-9.372 13.789-9.372 22.625 0 17.671 14.325 31.997 31.997 31.997 8.836 0 16.835-3.581 22.625-9.372v0l43.26-43.258c32.994 40.283 55.204 90.578 61.549 145.7l0.122 1.308h-61.932c-17.673 0-32 14.327-32 32s14.327 32 32 32v0h61.98c-0.262 2.437-0.252 4.84-0.574 7.281-7.523 53.851-29.185 101.615-61.077 140.704l0.405-0.512-43.703-43.723c-5.79-5.79-13.789-9.372-22.625-9.372-17.671 0-31.997 14.325-31.997 31.997 0 8.836 3.581 16.835 9.372 22.625l43.729 43.75c-40.045 32.607-89.888 54.662-144.495 61.243l-1.359 0.133c-0.555 0.064-1.102 0.043-1.656 0.101v-62.228c0-17.673-14.327-32-32-32s-32 14.327-32 32v0 62.14c-56.57-6.349-107.037-28.47-148.016-61.804l0.52 0.41 43.746-43.746c5.754-5.74 9.32-13.67 9.342-22.433v-0.004l165.252-120.793c13.687-10.088 22.469-26.147 22.469-44.256 0-30.276-24.544-54.82-54.82-54.82-18.11 0-34.169 8.782-44.151 22.32l-0.106 0.151-120.787 165.242c-8.77 0.028-16.703 3.594-22.449 9.344l-43.724 43.726c-32.699-40.559-54.775-90.956-61.278-146.12l-0.13-1.357h62.133c17.673 0 32-14.327 32-32s-14.327-32-32-32v0h-61.984c6.676-56.414 28.847-106.679 62.085-147.591l-0.416 0.528 43.313 43.312c5.79 5.79 13.789 9.372 22.625 9.372 17.671 0 31.997-14.325 31.997-31.997 0-8.836-3.581-16.835-9.372-22.625v0l-67.905-67.906c-2.759-2.694-6.015-4.893-9.616-6.445l-0.206-0.079c-8.543-10.61-21.531-17.341-36.092-17.341-14.245 0-26.985 6.443-35.465 16.573l-0.059 0.072c-61.126 67.675-98.527 157.799-98.527 256.658 0 211.831 171.723 383.555 383.555 383.555 15.672 0 31.124-0.94 46.303-2.766l-1.83 0.179c192.044-22.638 339.606-184.452 339.606-380.731 0-98.991-37.534-189.216-99.146-257.219l0.29 0.325z" />
+<glyph unicode="&#xe915;" glyph-name="datarefresh" d="M56.046 365.538h300.061c-16.969-43.564-26.759-90.717-26.759-140.317 0-33.611 4.732-66.080 12.89-97.080h-286.192c-26.596 0-48.134 21.537-48.134 48.132v140.97c0 26.758 21.538 48.295 48.134 48.295zM720.679 512.952c3.12 0.082 6.26 0.082 9.442 0h0.489c39.969-0.326 77.818-8.81 112.24-23.984l1.142-0.653c101.636-45.194 172.113-147.492 170.971-265.78-1.631-158.913-131.654-286.501-290.553-284.869-123.987 1.305-228.723 80.925-267.876 191.218l102.942 17.947c28.876-62.978 92.011-107.030 165.914-107.846 101.963-0.979 185.327 80.925 186.306 182.897 1.142 101.809-80.754 185.345-182.717 186.323-8.646 0-17.13-0.653-25.45-1.632l-0.163 0.653c-27.408-3.589-52.857-13.216-75.045-27.736l35.401-33.447c2.121-1.958 2.936-5.058 1.794-7.668-0.979-2.774-3.426-4.568-6.362-4.732l-162.814-8.647c-2.121 0-3.915 0.979-5.384 2.447-1.468 1.632-2.121 3.753-1.631 6.037l12.236 68.036 17.619 96.262c0.489 2.937 2.61 5.221 5.384 5.71 2.936 0.653 5.873-0.489 7.504-2.937l28.223-41.441c39.154 28.226 85.649 46.499 136.059 52.047 0.653 0.163 1.305 0.163 1.958 0.163 4.405 0.489 8.646 0.816 13.051 1.142 3.1 0.245 6.199 0.408 9.319 0.489zM56.036 665.378h674.698c26.59 0 48.285-21.538 48.285-48.294v-13.217c-21.206 3.589-42.903 5.871-65.088 5.871-138.006 0-258.558-72.767-326.42-181.755h-331.476c-26.59 0-48.124 21.538-48.124 48.131v140.97c0 26.756 21.534 48.294 48.124 48.294zM149.834 895.923c-30.179 0-54.811-24.457-54.811-54.62s24.632-54.783 54.811-54.783c30.179 0 54.648 24.62 54.648 54.783s-24.469 54.62-54.648 54.62zM56.035 960h674.699c26.59 0 48.286-21.685 48.286-48.261v-141.034c0-26.576-21.696-48.098-48.286-48.098h-674.699c-26.59 0-48.123 21.522-48.123 48.098v141.034c0 26.576 21.533 48.261 48.123 48.261z" />
+<glyph unicode="&#xe916;" glyph-name="documentsave" d="M345.584 354.72v-202.88h345.36v202.88zM533.952 557.568h56.752v-130.416h-56.752zM286.432 586.544h114.104v-186.55h231.83v186.55h35.629l82.102-82.093v-381.571h-463.664zM194.583 882.635v-869.291h634.898v674.562h-201.145v194.729zM121.52 960h548.147l232.877-227.99v-796.010h-781.024z" />
+<glyph unicode="&#xe917;" glyph-name="documents" d="M301.347 410.718v-155.408h72.277v82.877h267.51v-82.877h72.62v155.408zM74.104 686.18v-82.471h866.943v82.471l30.484-30.67c30.546-30.641 52.389-38.879 40.118-103.597-12.236-64.501-71.375-418.254-80.171-466.116-9.667-52.479-63.044-51.798-63.044-51.798h-721.747c0 0-53.375-0.68-63.009 51.798-8.796 47.863-67.967 401.616-80.204 466.116-12.266 64.717 9.571 72.956 40.115 103.597zM146.677 759.102h721.749v-103.59h-721.749zM249.767 862.691h515.569v-51.795h-515.569z" />
+<glyph unicode="&#xe918;" glyph-name="download" d="M896 224v-128c0-17.673-14.327-32-32-32v0h-704c-17.673 0-32 14.327-32 32v0 128c0 17.673 14.327 32 32 32v0h704c17.673 0 32-14.327 32-32v0zM485.961 340.455c5.876-8.154 15.345-13.4 26.039-13.4s20.163 5.246 25.974 13.305l0.065 0.095 177.818 248.945c3.727 5.164 5.961 11.621 5.961 18.6 0 17.673-14.327 32-32 32h-81.818v192c0 17.673-14.327 32-32 32v0h-128c-17.673 0-32-14.327-32-32v0-192h-81.818c-17.673 0-32-14.327-32-32 0-6.978 2.234-13.435 6.025-18.694l-0.065 0.095z" />
+<glyph unicode="&#xe919;" glyph-name="duplicate1" d="M736 464v144l160-160h-144c-8.837 0-16 7.163-16 16v0zM352 640v176c0 8.837-7.163 16-16 16v0h-144c-17.673 0-32-14.327-32-32v0-480c0-17.673 14.327-32 32-32v0h224v288c0.116 11.518 2.262 22.501 6.096 32.655l-0.217-0.655h-37.879c-17.673 0-32 14.327-32 32v0zM672 416v176c0 8.837-7.163 16-16 16v0h-144c-17.673 0-32-14.327-32-32v0-480c0-17.673 14.327-32 32-32v0h352c17.673 0 32 14.327 32 32v0 272c0 8.837-7.163 16-16 16v0h-176c-17.673 0-32 14.327-32 32v0zM416 832v-144c0-8.837 7.163-16 16-16v0h144z" />
+<glyph unicode="&#xe91a;" glyph-name="edit" d="M150.64 131.024l196.688-112.934-177.876-82.090zM440.518 757.632l319.786-183.541-245.536-427.755-18.294 54.689-93.831 9.688-15.939 58.789-92.020 3.171-25.749 64.455-73.896-7.251zM594.229 959.985c8.817 0.212 17.429-1.772 25.181-6.213l226.455-129.975c27.498-15.797 33.665-56.711 13.811-91.334l-26.999-47.086-326.116 187.209 26.999 47.086c14.27 24.886 38.139 39.772 60.67 40.314z" />
+<glyph unicode="&#xe91b;" glyph-name="excel" d="M789.441 241.11v-102.216h168.092v102.216zM789.441 373.99v-102.216h168.092v102.216zM789.441 506.871v-102.216h168.092v102.216zM345.376 635.776l-51.108-127.204-43.156 115.844h-69.282l70.42-166.952-78.365-165.819h68.144l51.108 118.12 51.108-129.471h74.959l-86.318 182.848 80.635 172.633zM789.441 639.751v-102.216h168.092v102.216zM789.441 772.631v-102.216h168.092v102.216zM608.293 830.554h402.053c7.527 0 13.629-6.102 13.629-13.629v-729.139c0-7.533-6.102-13.625-13.629-13.625h-402.053v64.733h149.918v102.216h-149.918v30.665h149.918v102.216h-149.918v30.665h149.918v102.216h-149.918v30.663h149.918v102.216h-149.918v30.665h149.918v102.216h-149.918zM589.444 943.748v-991.49l-589.444 102.216v787.058z" />
+<glyph unicode="&#xe91c;" glyph-name="expand" d="M139.462 308.298h744.932l-372.468-372.442zM511.926 960l372.468-372.442h-744.932z" />
+<glyph unicode="&#xe91d;" glyph-name="file" d="M640 608h176c8.837 0 16-7.163 16-16v0-496c0-17.673-14.327-32-32-32v0h-544c-17.673 0-32 14.327-32 32v0 704c0 17.673 14.327 32 32 32v0h336c8.837 0 16-7.163 16-16v0-176c0-17.673 14.327-32 32-32v0zM688 672h144l-160 160v-144c0-8.837 7.163-16 16-16v0z" />
+<glyph unicode="&#xe91e;" glyph-name="Floppy" d="M109.804 141.178c-10.916 0-19.935-8.978-19.935-19.968v-65.146c0-10.907 9.020-19.97 19.935-19.97h65.315c10.978 0 19.894 9.062 19.894 19.97v65.146c0 10.99-8.917 19.968-19.894 19.968zM589.312 869.072h146.912v-222.912h-146.912zM213.307 919.544v-250.771c0-43.802 35.811-79.718 79.687-79.718h427.524c43.875 0 79.77 35.917 79.77 79.718v250.771zM138.578 960h733.023l144.751-144.697v-793.092l-21.958-31.824c-23.251-35.272-63.021-54.387-109-54.387h-746.815c-72.023 0-130.898 58.958-130.898 130.898v762.168c0 72.112 58.875 130.935 130.898 130.935z" />
+<glyph unicode="&#xe91f;" glyph-name="folder" d="M193.912 591.524l-65.912-263.649v408.125c0.001 35.346 28.654 63.999 64 64h133.49c0 0 0.001 0 0.001 0 17.673 0 33.673-7.164 45.255-18.746l45.254-45.254h416c35.346-0.001 63.999-28.654 64-64v0-32h-640c-0.001 0-0.001 0-0.002 0-29.833 0-54.898-20.413-61.99-48.033l-0.097-0.444zM942.031 576h-636.063c-0.001 0-0.001 0-0.002 0-29.833 0-54.897-20.413-61.989-48.033l-0.097-0.444-115.881-463.524h768l108.119 432.476c1.214 4.66 1.911 10.011 1.911 15.524 0 35.346-28.653 63.999-63.999 64v0z" />
+<glyph unicode="&#xe920;" glyph-name="folder_add" d="M785.553 312.399v-95.808h-95.774v-57.011h95.774v-95.791h57.045v95.791h95.774v57.011h-95.774v95.808zM809.218 404.602c118.6 0 214.747-96.162 214.747-214.765s-96.148-214.765-214.747-214.765c-118.603 0-214.749 96.162-214.749 214.765s96.146 214.765 214.749 214.765zM81.172 920.86h285.817c44.839 0 81.184-36.345 81.184-81.163v-38.919h365.342c44.838 0 81.184-36.366 81.184-81.182v-253.204l-6.333 1.888c-25.165 7.163-51.718 10.999-79.149 10.999-159.599 0-289.459-129.845-289.459-289.441 0-24.937 3.17-49.147 9.129-72.249l1.406-5.182h-449.12c-44.828 0-81.174 36.346-81.174 81.185v526.004c0 1.401 0.035 2.793 0.106 4.176l0.068 0.898-0.068 0.899c-0.070 1.384-0.106 2.777-0.106 4.178v109.951c0 44.817 36.345 81.163 81.172 81.163z" />
+<glyph unicode="&#xe921;" glyph-name="folder_delete" d="M688.355 220.883v-67.036h248.593v67.036zM809.218 404.602c118.6 0 214.747-96.162 214.747-214.765s-96.148-214.765-214.747-214.765c-118.6 0-214.749 96.162-214.749 214.765s96.149 214.765 214.749 214.765zM81.172 920.86h285.819c44.837 0 81.182-36.345 81.182-81.163v-38.919h365.342c44.838 0 81.184-36.366 81.184-81.182v-253.204l-6.333 1.888c-25.165 7.163-51.718 10.999-79.149 10.999-159.599 0-289.459-129.845-289.459-289.441 0-24.937 3.17-49.147 9.129-72.249l1.406-5.182h-449.12c-44.828 0-81.174 36.346-81.174 81.185v526.004c0 1.401 0.035 2.793 0.106 4.176l0.068 0.898-0.068 0.899c-0.070 1.384-0.106 2.777-0.106 4.178v109.951c0 44.817 36.345 81.163 81.172 81.163z" />
+<glyph unicode="&#xe922;" glyph-name="folder_find" d="M494.046 553.696c90.647 0 164.146-73.457 164.146-164.1 0-90.632-73.498-164.108-164.146-164.108-90.646 0-164.126 73.476-164.126 164.108 0 90.643 73.481 164.1 164.126 164.1zM494.046 602.144c-117.376 0-212.542-95.145-212.542-212.548 0-117.391 95.165-212.556 212.542-212.556 34.851 0 67.744 8.387 96.769 23.254l4.077 2.151 54.362-69.117h93.29l-89.772 114.911 2.001 2.255c32.294 37.28 51.834 85.909 51.834 139.102 0 117.403-95.168 212.548-212.562 212.548zM92.896 910.64h327.164c51.312 0 92.916-41.604 92.916-92.904v-44.536h418.106c51.315 0 92.918-41.615 92.918-92.907v-602.031c0-51.325-41.603-92.918-92.918-92.918h-838.185c-51.293 0-92.896 41.594-92.896 92.918v602.031c0 1.603 0.041 3.196 0.121 4.779l0.078 1.030-0.078 1.030c-0.080 1.584-0.121 3.178-0.121 4.782v125.822c0 51.299 41.603 92.904 92.896 92.904z" />
+<glyph unicode="&#xe923;" glyph-name="globe" d="M388.544 743.172c-28.448-28.809-51.452-63.073-67.291-101.070l-0.777-2.102h-63.865c33.945 44.926 78.421 80.17 129.848 102.371l2.085 0.801zM218.906 576h81.85c-6.347-28.27-10.618-61.247-11.874-94.995l-0.030-1.005h-95.229c3.656 35.474 12.605 67.979 26.088 98.006l-0.805-2.006zM218.906 320c-12.678 28.021-21.627 60.526-25.169 94.637l-0.115 1.363h95.228c1.286-34.754 5.557-67.731 12.582-99.676l-0.678 3.676zM256.611 256h63.865c16.616-40.099 39.619-74.362 68.1-103.205l-0.033 0.033c-53.511 23.002-97.988 58.245-131.347 102.364l-0.586 0.808zM480 158.068c-37.056 25.495-67.243 58.29-89.018 96.499l-0.752 1.432h89.77zM480 320h-114.076c-7.272 28.429-12.009 61.37-13.155 95.221l-0.021 0.779h127.252zM480 480h-127.252c1.166 34.63 5.904 67.571 13.864 99.232l-0.688-3.232h114.076zM480 640h-89.77c22.527 39.642 52.714 72.436 88.791 97.294l0.978 0.637zM767.389 640h-63.872c-16.622 40.103-39.631 74.369-68.118 103.214l0.032-0.033c53.521-23.001 98.007-58.249 131.372-102.374l0.586-0.808zM544 737.926c37.050-25.497 67.233-58.289 89.008-96.493l0.752-1.432h-89.76zM544 576h114.072c7.273-28.428 12.012-61.369 13.159-95.221l0.021-0.779h-127.252zM544 416h127.252c-1.168-34.631-5.906-67.572-13.868-99.232l0.688 3.232h-114.072zM544 158.074v97.926h89.76c-22.527-39.637-52.71-72.429-88.782-97.288l-0.978-0.637zM635.432 152.818c28.454 28.812 51.464 63.079 67.309 101.080l0.777 2.101h63.872c-33.951-44.933-78.436-80.181-129.873-102.381l-2.085-0.801zM805.096 320h-81.853c6.349 28.27 10.621 61.246 11.877 94.995l0.030 1.005h95.228c-3.655-35.474-12.603-67.979-26.086-98.006l0.805 2.006zM735.148 480c-1.285 34.754-5.558 67.73-12.585 99.674l0.678-3.674h81.853c12.678-28.021 21.625-60.526 25.165-94.638l0.115-1.362zM896 448c0 212.077-171.923 384-384 384s-384-171.923-384-384c0-212.077 171.923-384 384-384v0c212.077 0 384 171.923 384 384v0z" />
+<glyph unicode="&#xe924;" glyph-name="group" d="M823.502 288h-47.004c-2.992 0.083-5.847 0.358-8.641 0.815l0.368-0.050c-13.662 11.227-29.91 24.652-48.35 39.953l-4.238 3.531c-1.115 3.304-2.023 7.215-2.557 11.244l-0.035 0.326c0.527 2.031 1.156 4.008 1.612 6.070l16.094 73.688c19.613 16.339 34.884 37.23 44.269 61.083l0.356 1.026 8.906 24c5.094 12.059 8.054 26.079 8.054 40.791 0 25.917-9.187 49.689-24.482 68.236l0.147-0.183v48.945c10.060 2.878 21.614 4.533 33.555 4.533 69.839 0 126.455-56.616 126.455-126.455 0-0.547-0.003-1.092-0.010-1.637l0.001 0.083v-69.961c4.573-3.984 7.447-9.817 7.447-16.322 0-2.91-0.575-5.686-1.618-8.22l0.052 0.144-11.762-35.281c-5.295-13.384-16.081-23.612-29.505-28.040l-0.337-0.096-5.269-42.16c-4.084-31.766-30.958-56.062-63.506-56.062 0 0 0 0 0 0v0zM287.012 288.695c15.744 12.945 33.188 27.312 49.082 40.414l4.424 3.641c1.037 3.152 1.89 6.897 2.402 10.751l0.036 0.327c-0.527 2.020-1.162 4-1.612 6.048l-16.094 73.703c-19.595 16.329-34.856 37.204-44.238 61.037l-0.356 1.026-8.969 24.109c-5.079 12.041-8.030 26.039-8.030 40.727 0 25.918 9.19 49.69 24.489 68.235l-0.146-0.183v48.945c-10.060 2.878-21.614 4.533-33.555 4.533-69.839 0-126.455-56.616-126.455-126.455 0-0.547 0.003-1.092 0.010-1.637l-0.001 0.083v-69.961c-4.573-3.984-7.447-9.817-7.447-16.322 0-2.91 0.575-5.686 1.618-8.22l-0.052 0.144 11.762-35.281c5.295-13.384 16.081-23.612 29.505-28.040l0.337-0.096 5.269-42.16c4.084-31.766 30.958-56.062 63.506-56.062 0 0 0 0 0 0h47.004c2.735 0.090 5.326 0.34 7.866 0.742l-0.356-0.046zM1010.352 249.555l-70.819 49.571c-18.173-39.272-54.546-67.41-97.992-73.753l-0.693-0.083c14.011-17.84 22.585-40.532 22.921-65.213l0.001-0.076h144.23c8.837 0 16 7.163 16 16v0 47.34c-0.001 10.801-5.352 20.352-13.548 26.147l-0.1 0.067zM116.467 299.125l-70.819-49.571c-8.296-5.862-13.648-15.413-13.648-26.215v0-47.34c0-8.837 7.163-16 16-16v0h144.824c1.185 24.746 9.937 47.241 23.973 65.456l-0.201-0.272c-44.747 5.947-81.747 34.258-99.8 73.151l-0.329 0.791zM773.455 202.297c-13.924 10.547-58.512 47.348-94.453 77.188-29.443-33.897-72.541-55.268-120.636-55.484h-60.694c-48.237 0.222-91.415 21.695-120.684 55.531l-0.172 0.203c-36.762-30.304-82.34-67.828-94.272-77.437-16.096-10.821-26.545-28.963-26.545-49.546 0-0.114 0-0.228 0.001-0.343v0.018-40.426c0-8.837 7.163-16 16-16v0h512c8.837 0 16 7.163 16 16v0 40.426c0.088 1.147 0.139 2.484 0.139 3.833 0 19.598-10.626 36.714-26.43 45.902l-0.253 0.136zM340.633 507.977c8.558-20.091 23.145-36.239 41.462-46.535l0.481-0.249 21.307-97.656c9.736-43.507 48.024-75.536 93.792-75.536 0 0 0.001 0 0.001 0h60.648c0 0 0 0 0 0 45.768 0 84.055 32.028 93.671 74.895l0.121 0.64 21.307 97.656c18.799 10.544 33.386 26.693 41.706 46.16l0.237 0.624 8.96 24.047c2.746 5.341 4.356 11.654 4.356 18.343 0 16.707-10.042 31.068-24.42 37.377l-0.262 0.102v84.156c0 96-64 160-176 160s-176-64-176-160v-84.156c-14.639-6.411-24.682-20.772-24.682-37.479 0-6.689 1.61-13.001 4.463-18.572l-0.107 0.23z" />
+<glyph unicode="&#xe925;" glyph-name="home" d="M661.333 553.6v129.067h-64v-65.749l-74.304 73.685-0.043 1.024-266.283-264.96h84.629v-234.667h128v128h106.667v-128h128v234.667h85.333z" />
+<glyph unicode="&#xe926;" glyph-name="inbox" d="M816 800h-608c-44.164-0.048-79.952-35.836-80-79.995v-576.005c0.048-44.164 35.836-79.952 79.995-80h608.005c44.164 0.048 79.952 35.836 80 79.995v576.005c-0.048 44.164-35.836 79.952-79.995 80h-0.005zM800 384h-130.883c0 0 0 0-0.001 0-7.725 0-14.172-5.475-15.671-12.756l-0.018-0.103-26.856-134.281c-1.517-7.385-7.964-12.86-15.689-12.86 0 0 0 0-0.001 0h-197.766c0 0 0 0-0.001 0-7.725 0-14.172 5.475-15.671 12.756l-0.018 0.103-26.856 134.281c-1.517 7.385-7.964 12.86-15.689 12.86 0 0 0 0-0.001 0h-130.883v320h576z" />
+<glyph unicode="&#xe927;" glyph-name="library" d="M576 832h-160c-17.673 0-32-14.327-32-32v0-704c0-17.673 14.327-32 32-32v0h160c17.673 0 32 14.327 32 32v0 704c0 17.673-14.327 32-32 32v0zM544 144c0-8.837-7.163-16-16-16v0h-64c-8.837 0-16 7.163-16 16v0 32c0 8.837 7.163 16 16 16v0h64c8.837 0 16-7.163 16-16v0zM544 720c0-8.837-7.163-16-16-16v0h-64c-8.837 0-16 7.163-16 16v0 32c0 8.837 7.163 16 16 16v0h64c8.837 0 16-7.163 16-16v0zM865.174 814.101c-2.739 15.123-15.804 26.443-31.514 26.443-1.964 0-3.886-0.177-5.752-0.516l0.195 0.029-157.568-27.783c-15.123-2.739-26.443-15.804-26.443-31.514 0-1.964 0.177-3.886 0.516-5.752l-0.029 0.195 122.248-693.305c2.737-15.123 15.802-26.444 31.512-26.444 1.964 0 3.888 0.177 5.754 0.516l-0.195-0.029 157.568 27.783c15.123 2.737 26.443 15.802 26.443 31.511 0 1.964-0.177 3.888-0.516 5.754l0.029-0.195zM903.082 138.418l-63.029-11.113c-0.835-0.154-1.795-0.243-2.776-0.243-7.855 0-14.388 5.66-15.745 13.123l-0.015 0.098-5.556 31.514c-0.155 0.835-0.243 1.797-0.243 2.778 0 7.855 5.66 14.387 13.124 15.742l0.098 0.015 63.029 11.115c0.835 0.154 1.795 0.243 2.776 0.243 7.855 0 14.388-5.66 15.745-13.123l0.015-0.098 5.556-31.516c0.154-0.835 0.243-1.795 0.243-2.776 0-7.855-5.66-14.388-13.124-15.744l-0.098-0.015zM288 832h-160c-17.673 0-32-14.327-32-32v0-704c0-17.673 14.327-32 32-32v0h160c17.673 0 32 14.327 32 32v0 704c0 17.673-14.327 32-32 32v0zM256 144c0-8.837-7.163-16-16-16v0h-64c-8.837 0-16 7.163-16 16v0 32c0 8.837 7.163 16 16 16v0h64c8.837 0 16-7.163 16-16v0zM256 720c0-8.837-7.163-16-16-16v0h-64c-8.837 0-16 7.163-16 16v0 32c0 8.837 7.163 16 16 16v0h64c8.837 0 16-7.163 16-16v0z" />
+<glyph unicode="&#xe928;" glyph-name="license" d="M875.125 506.258l-204.547-148.578 77.998-240.192c0.65-1.932 1.025-4.157 1.025-6.47 0-11.561-9.372-20.932-20.932-20.932-0.003 0-0.006 0-0.009 0v0c-4.595 0.025-8.829 1.553-12.24 4.116l0.053-0.038-204.342 148.426-204.344-148.426c-3.358-2.525-7.592-4.053-12.182-4.078h-0.006c-0.002 0-0.004 0-0.006 0-11.562 0-20.934 9.373-20.934 20.934 0 2.312 0.375 4.536 1.067 6.616l-0.043-0.148 77.998 240.192-204.547 148.578c-5.239 3.837-8.603 9.966-8.603 16.88 0 11.522 9.34 20.862 20.862 20.862 0 0 0 0 0 0h252.793l78.1 240.5c2.803 8.438 10.625 14.417 19.843 14.417s17.040-5.978 19.8-14.27l0.042-0.147 78.099-240.5h252.793c11.521-0.003 20.859-9.343 20.859-20.864 0-6.913-3.362-13.041-8.54-16.837l-0.058-0.041z" />
+<glyph unicode="&#xe929;" glyph-name="list" d="M352 512v-128c0-17.673-14.327-32-32-32v0h-128c-17.673 0-32 14.327-32 32v0 128c0 17.673 14.327 32 32 32v0h128c17.673 0 32-14.327 32-32v0zM320 288h-128c-17.673 0-32-14.327-32-32v0-128c0-17.673 14.327-32 32-32v0h128c17.673 0 32 14.327 32 32v0 128c0 17.673-14.327 32-32 32v0zM320 800h-128c-17.673 0-32-14.327-32-32v0-128c0-17.673 14.327-32 32-32v0h128c17.673 0 32 14.327 32 32v0 128c0 17.673-14.327 32-32 32v0zM864 608h-416c-17.673 0-32-14.327-32-32v0-32c0-17.673 14.327-32 32-32v0h416c17.673 0 32 14.327 32 32v0 32c0 17.673-14.327 32-32 32v0zM864 800h-416c-17.673 0-32-14.327-32-32v0-32c0-17.673 14.327-32 32-32v0h416c17.673 0 32 14.327 32 32v0 32c0 17.673-14.327 32-32 32v0zM864 224h-416c-17.673 0-32-14.327-32-32v0-32c0-17.673 14.327-32 32-32v0h416c17.673 0 32 14.327 32 32v0 32c0 17.673-14.327 32-32 32v0zM864 416h-416c-17.673 0-32-14.327-32-32v0-32c0-17.673 14.327-32 32-32v0h416c17.673 0 32 14.327 32 32v0 32c0 17.673-14.327 32-32 32v0z" />
+<glyph unicode="&#xe92a;" glyph-name="log" d="M484.605 523.186c-29.216 0-46.245-27.795-46.245-64.947 0-37.435 17.56-63.807 46.528-63.807 29.216 0 45.967 27.778 45.967 64.933 0 34.325-16.468 63.821-46.25 63.821zM264.531 554.432h43.398v-154.911h76.017v-36.306h-119.415zM708.043 556.399c24.685 0 43.682-4.829 53.027-9.343l-9.062-34.624c-10.53 4.514-23.562 8.203-44.529 8.203-36.031 0-63.308-20.39-63.308-61.828 0-39.451 24.721-62.687 60.152-62.687 9.969 0 17.908 1.111 21.279 2.846v40h-29.465v33.734h71.179v-100.705c-13.341-4.546-38.556-10.797-63.804-10.797-34.906 0-60.152 8.813-77.745 25.86-17.593 16.421-27.216 41.407-26.936 69.469 0.281 63.561 46.528 99.872 109.211 99.872zM485.733 557.527c58.746 0 90.774-43.996 90.774-96.728 0-62.681-37.999-100.729-93.901-100.729-56.716 0-89.901 42.842-89.901 97.306 0 57.313 36.562 100.15 93.028 100.15zM192.874 899.427v-898.747h449.428l-0.689 224.562 185.203-0.187v674.372zM132.35 960h759.397v-807.847l-193.105-216.081h-566.292z" />
+<glyph unicode="&#xe92b;" glyph-name="logout" d="M802.658 802.445l-320 26.668c-0.736 0.061-1.594 0.096-2.459 0.096-16.632 0-30.273-12.806-31.6-29.096l-0.007-0.113h-0.592v-672h0.592c1.335-16.401 14.974-29.205 31.604-29.205 0.867 0 1.725 0.035 2.575 0.103l-0.112-0.007 320 26.664c16.491 1.418 29.341 15.154 29.342 31.891v0 613.109c0 0 0 0.001 0 0.001 0 16.737-12.85 30.474-29.223 31.881l-0.119 0.008zM544 416c-17.673 0-32 14.327-32 32s14.327 32 32 32c17.673 0 32-14.327 32-32v0c0-17.673-14.327-32-32-32v0zM256 800h128v-64h-128v-544h128v-64h-128c-35.327 0.047-63.953 28.673-64 63.995v544.005c0.047 35.327 28.673 63.953 63.995 64h0.005z" />
+<glyph unicode="&#xe92c;" glyph-name="menu" d="M870.4 755.2v-51.2c0-28.277-22.923-51.2-51.2-51.2v0h-614.4c-28.277 0-51.2 22.923-51.2 51.2v0 51.2c0 28.277 22.923 51.2 51.2 51.2v0h614.4c28.277 0 51.2-22.923 51.2-51.2v0zM819.2 550.4h-614.4c-28.277 0-51.2-22.923-51.2-51.2v0-51.2c0-28.277 22.923-51.2 51.2-51.2v0h614.4c28.277 0 51.2 22.923 51.2 51.2v0 51.2c0 28.277-22.923 51.2-51.2 51.2v0zM819.2 294.4h-614.4c-28.277 0-51.2-22.923-51.2-51.2v0-51.2c0-28.277 22.923-51.2 51.2-51.2v0h614.4c28.277 0 51.2 22.923 51.2 51.2v0 51.2c0 28.277-22.923 51.2-51.2 51.2v0z" />
+<glyph unicode="&#xe92d;" glyph-name="newspaper" d="M400 512h352c8.837 0 16 7.163 16 16v0 128c0 8.837-7.163 16-16 16v0h-352c-8.837 0-16-7.163-16-16v0-128c0-8.837 7.163-16 16-16v0zM751.998 448h-128c-8.837 0-16-7.163-16-16v0-32c0-8.837 7.163-16 16-16v0h128c8.837 0 16 7.163 16 16v0 32c0 8.837-7.163 16-16 16v0zM751.998 320h-128c-8.837 0-16-7.163-16-16v0-32c0-8.837 7.163-16 16-16v0h128c8.837 0 16 7.163 16 16v0 32c0 8.837-7.163 16-16 16v0zM399.998 256h128c8.837 0 16 7.163 16 16v0 32c0 8.837-7.163 16-16 16v0h-128c-8.837 0-16-7.163-16-16v0-32c0-8.837 7.163-16 16-16v0zM864 800h-576c-0.005 0-0.012 0-0.018 0-17.663 0-31.982-14.319-31.982-31.982 0-0.006 0-0.013 0-0.019v0.001-544c0-17.673-14.327-32-32-32s-32 14.327-32 32v0 544c-35.327-0.047-63.953-28.673-64-63.995v-480.005c0.064-52.972 42.971-95.901 95.928-96h576.071c52.995 0.060 95.94 43.005 96 95.994v544.006c0 0.005 0 0.012 0 0.018 0 17.663-14.319 31.982-31.982 31.982-0.006 0-0.013 0-0.019 0h0.001zM832 224c-0.012-17.668-14.332-31.988-31.999-32h-485.47c3.465 9.51 5.469 20.489 5.469 31.935 0 0.023 0 0.045 0 0.068v-0.004 512h512zM399.998 384h128c8.837 0 16 7.163 16 16v0 32c0 8.837-7.163 16-16 16v0h-128c-8.837 0-16-7.163-16-16v0-32c0-8.837 7.163-16 16-16v0z" />
+<glyph unicode="&#xe92e;" glyph-name="numberlist" d="M448 544v32c0 17.673 14.327 32 32 32v0h256c17.673 0 32-14.327 32-32v0-32c0-17.673-14.327-32-32-32v0h-256c-17.673 0-32 14.327-32 32v0zM736 224h-256c-17.673 0-32-14.327-32-32v0-32c0-17.673 14.327-32 32-32v0h256c17.673 0 32 14.327 32 32v0 32c0 17.673-14.327 32-32 32v0zM864 416h-384c-17.673 0-32-14.327-32-32v0-32c0-17.673 14.327-32 32-32v0h384c17.673 0 32 14.327 32 32v0 32c0 17.673-14.327 32-32 32v0zM864 800h-384c-17.673 0-32-14.327-32-32v0-32c0-17.673 14.327-32 32-32v0h384c17.673 0 32 14.327 32 32v0 32c0 17.673-14.327 32-32 32v0zM320 224h-78.375c5.243 9.382 13.594 16.497 23.633 20.032l0.305 0.093c18.844 6.72 76.156 27.094 76.156 85.031-0.068 47.946-38.926 86.794-86.87 86.844h-0.005c-32.111-0.153-60.674-15.208-79.15-38.599l-0.163-0.214c-4.685-5.53-7.533-12.745-7.533-20.626 0-17.674 14.328-32.002 32.002-32.002 9.794 0 18.56 4.399 24.43 11.33l0.039 0.047c6.893 9.542 17.877 15.76 30.328 16.063l0.047 0.001c12.621-0.003 22.854-10.225 22.875-22.842v-0.002c0-3.812 0-12.781-33.625-24.719-43.636-17.22-73.949-59.019-73.949-107.899 0-2.19 0.061-4.366 0.181-6.526l-0.013 0.3c0.935-16.931 14.889-30.307 31.968-30.313h117.719c17.673 0 32 14.327 32 32s-14.327 32-32 32v0zM214.624 681.376l9.376 9.374v-114.75c0-17.673 14.327-32 32-32s32 14.327 32 32v0 192c0 0 0 0 0 0 0 17.672-14.326 31.997-31.997 31.997-8.837 0-16.836-3.582-22.627-9.373l-64-64c-5.668-5.769-9.168-13.685-9.168-22.419 0-17.671 14.325-31.996 31.996-31.996 8.734 0 16.65 3.499 22.424 9.172l-0.005-0.005z" />
+<glyph unicode="&#xe92f;" glyph-name="package" d="M734.549 503.648l-380.418 258.141 126.775 76.055 383.994-255.984zM293.65 725.5l-132.754-79.641 384.006-256 129.17 77.5zM128 334.875l384-255.992v255.992l-384 256zM768 449.078v-86.93c0-0.002 0-0.003 0-0.005 0-5.797-3.082-10.875-7.697-13.683l-0.071-0.040-32-19.195c-2.35-1.432-5.192-2.28-8.232-2.28-8.836 0-15.999 7.163-16 15.999v0 67.744l-128-76.804v-255.984l320 191.976v256.007z" />
+<glyph unicode="&#xe930;" glyph-name="dataset" d="M96.734 228.331h830.597c32.681 0 59.317-26.584 59.317-59.329v-173.575c0-32.777-26.635-59.378-59.317-59.378h-830.597c-32.845 0-59.317 26.602-59.317 59.378v173.575c0 32.745 26.472 59.329 59.317 59.329zM96.736 597.425h830.597c32.681 0 59.317-26.535 59.317-59.28v-173.575c0-32.728-26.635-59.345-59.317-59.345h-830.597c-32.845 0-59.317 26.617-59.317 59.345v173.575c0 32.744 26.472 59.28 59.317 59.28zM212.102 881.309c-37.093 0-67.324-30.212-67.324-67.384s30.23-67.368 67.324-67.368c37.093 0 67.324 30.196 67.324 67.368s-30.23 67.384-67.324 67.384zM96.736 960h830.597c32.681 0 59.317-26.552 59.317-59.345v-173.559c0-32.728-26.635-59.296-59.317-59.296h-830.597c-32.845 0-59.317 26.568-59.317 59.296v173.559c0 32.794 26.472 59.345 59.317 59.345z" />
+<glyph unicode="&#xe931;" glyph-name="check" d="M916.971 762.262c33.615 0 67.23 0 100.862 0 6.16-8.589-24.368-19.371-41.255-30.652-249.52-166.853-456.719-384.262-641.873-597.871-113.945 102.664-214.918 213.992-334.704 312.729 20.277 21.201 46.237 38.582 77.926 52.13 55.357-29.907 102.485-57.26 169.397-89.382 9.391-4.491 72.785-33.537 78.197-33.26 12.033 0.639 44.327 38.741 64.191 55.175 143.868 119.108 350.573 253.499 527.26 331.131z" />
+<glyph unicode="&#xe932;" glyph-name="pay" d="M290.893 44.681h341.090v-108.598h-341.090zM654.474 488.13c21.302 0.828 42.039-10.909 51.67-31.4l71.345-151.834c10.431-22.197 4.638-47.869-12.567-63.604l-3.157-2.611-124.45-130.921-0.691-1.528c-7.41-15.376-23.143-25.987-41.351-25.987h-261.553c-25.332 0-45.875 20.541-45.875 45.875v160.864l124.446-124.443c15.624-15.621 36.383-24.211 58.458-24.211 22.076 0 42.833 8.591 58.436 24.211l111.965 111.961v-31.040l29.568 27.14-65.221 138.828c-12.864 27.341-1.1 59.903 26.241 72.766l1.639 0.777c6.836 3.21 13.999 4.882 21.1 5.158zM501.391 542.007l-50.752-50.734c19.938-13.614 36.101-14.219 48.485-1.833 10.359 10.358 11.115 27.88 2.267 52.567zM546.232 658.468c-8.654 0.045-16.055-3.021-22.205-9.17-6.496-6.52-10.034-13.596-10.618-21.278s1.511-18.126 6.281-31.311l52.587 52.588c-8.72 6.085-17.414 9.128-26.045 9.17zM620.373 697.396l18.193-18.19-23.198-23.197c20.196-21.254 32.044-38.023 35.541-50.301l-28.204-28.205c-3.732 17.782-14.24 35.865-31.568 54.251l-60.765-60.765c12.732-30.643 18.881-54.186 18.45-70.629-0.454-16.42-5.999-29.95-16.615-40.567-12.926-12.928-28.7-18.754-47.367-17.479-18.664 1.273-38.063 9.581-58.175 24.965l-28.612-28.591-18.19 18.192 27.535 27.534c-21.882 21.902-35.928 43.503-42.078 64.759l29.387 29.39c1.362-10.681 5.611-22.744 12.777-36.21 7.141-13.487 15.19-24.708 24.166-33.684l58.651 58.651c-13.702 32.865-19.938 56.755-18.708 71.685 1.23 14.954 7.358 27.947 18.45 39.015 13.077 13.097 29.626 19.183 49.609 18.255 19.981-0.925 38.993-8.459 57.010-22.592zM548.714 960c11.758 0 23.518-4.488 32.494-13.464l307.536-307.538c17.955-17.954 17.955-47.041 0-64.972l-144.476-144.477-17.35 36.933c-3.986 8.47-9.421 16.004-15.925 22.36l-2.552 2.326 115.333 115.332-275.062 275.064-353.027-353.025 275.062-275.064 124.276 124.275 31.153-66.294-122.952-122.953c-17.931-17.953-47.021-17.953-64.975 0l-307.535 307.539c-17.953 17.951-17.953 47.040 0 64.972l385.521 385.522c8.966 8.976 20.722 13.464 32.479 13.464z" />
+<glyph unicode="&#xe933;" glyph-name="pdf" d="M200.571 163.069c-65.7-20.885-113.75-73.848-130.451-94.215 0.202 3.96-6.842-8.705-6.842-8.705s2.706 3.609 6.842 8.705c-0.062-1.554-1.135-5.38-4.261-13.7-11.29-29.974 23.636-29.205 23.636-29.205 99.024 16.106 111.076 137.121 111.076 137.121zM767.851 265.049c-18.402 0.001-29.754-1.181-29.754-1.181 105.384-92.26 203.398-70.757 203.398-70.757 40.12 5.38-21.102 42.521-21.102 42.521-56.586 25.098-117.411 29.415-152.542 29.417zM407.732 514.149c0 0-38.052-198.070-85.604-256.815l263.733 42.154c0 0-131.431 126.545-178.128 214.661zM413.841 879.988c-0.327 0.031-0.655 0.025-0.984-0.018-2.95-0.391-5.989-3.865-8.935-12.118 0 0-14.213-73.113 21.382-194.629 0 0 30.308 96.404 7.495 170.219 0 0-8.827 35.592-18.958 36.546zM380.637 959.983c28.069 1.161 53.374-56.91 53.374-56.91 78.685-180.728 4.276-296.195 4.276-296.195 77.907-197.402 234.047-302.811 234.047-302.811 151.708 8.755 262.38-32.43 262.38-32.43 87.066-49.221 57.909-95.201 57.909-95.201-91.233-109.402-359.227 61.184-359.227 61.184l-345.434-62.554c-49.916-183.551-216.724-226.674-216.724-226.674-79.509-12.464-68.639 76.672-68.639 76.672 62.061 146.761 218.123 180.527 218.123 180.527 61.47 70.59 161.941 402.39 161.941 402.39-101.512 245.186-30.183 326.754-30.183 326.754 9.136 17.894 18.799 24.862 28.156 25.249z" />
+<glyph unicode="&#xe934;" glyph-name="pdfexport" d="M186.878 198.357c-61.858-18.302-107.102-64.709-122.827-82.566 0.191 3.469-6.445-7.624-6.445-7.624s2.548 3.151 6.445 7.624c-0.066-1.354-1.068-4.711-4.028-12.017-10.629-26.259 22.267-25.589 22.267-25.589 93.244 14.117 104.589 120.172 104.589 120.172zM721.065 287.733c-17.328 0.001-28.016-1.035-28.016-1.035 99.242-80.847 191.531-62.003 191.531-62.003 37.782 4.708-19.861 37.254-19.861 37.254-53.296 21.995-110.573 25.78-143.653 25.783zM381.96 506.055c0 0-35.839-173.585-80.605-225.069l248.329 36.937c0 0-123.752 110.91-167.724 188.132zM845.111 705.497c4.827 0.315 10.331-1.799 16.15-6.633l38.243-31.943c18.558-15.55 48.954-40.949 67.525-56.433l38.272-31.99c18.607-15.533 18.321-40.666-0.508-55.8l-38.832-31.256c-18.859-15.249-49.683-40.059-68.539-55.228l-38.835-31.239c-18.822-15.249-34.021-2.515-33.753 28.201l0.526 59.012h-225.156c-15.85 0-28.705 12.878-28.705 28.729v62.246c0 15.834 12.855 28.694 28.705 28.694h226.241l0.506 59.362c0.198 21.13 7.54 33.585 18.16 34.279zM386.788 826.673c-2.777-0.341-5.637-3.384-8.408-10.615 0 0-13.398-64.091 20.135-170.59 0 0 28.535 84.507 7.050 149.183 0 0-8.859 33.241-18.777 32.022zM356.447 896.795c26.43 1.014 50.261-49.878 50.261-49.878 74.083-158.383 4.029-259.586 4.029-259.586 73.367-173.011 220.388-265.396 220.388-265.396 142.849 7.671 247.075-28.422 247.075-28.422 81.976-43.129 54.534-83.444 54.534-83.444-85.921-95.871-338.276 53.635-338.276 53.635l-325.281-54.828c-46.998-160.866-204.075-198.666-204.075-198.666-74.88-10.915-64.627 67.21-64.627 67.21 58.439 128.623 205.395 158.211 205.395 158.211 57.879 61.876 152.495 352.67 152.495 352.67-95.602 214.882-28.427 286.37-28.427 286.37 8.602 15.68 17.701 21.786 26.511 22.124z" />
+<glyph unicode="&#xe935;" glyph-name="pictures" d="M490.078 477.525c115.421-29.010 218.49-140.465 249.026-175.898v112.194h74.003v-130.009h48.004v-60.007h-440.037v60.007h69.004zM146.397 671.379l-74.038-7.249 70.472-612.97 63.542 6.188zM778.103 777.091c45.819 0 83.007-37.202 83.007-83.032 0-45.824-37.188-83.026-83.007-83.026-45.814 0-83.003 37.202-83.003 83.026 0 45.83 37.188 83.032 83.003 83.032zM270.261 791.335l-68.169-6.625 68.169-698.111v596.849h-0.031c0 25.314 0 47.128 0 64.443h0.031zM336.703 851.095v-725.174h621.029v725.174h-71.381zM270.261 915.353h753.883v-853.631h-102.797l-708.662-69.13-0.089 0.931-129.677-12.684-82.919 740.739 140.175 13.684-10.439 106.832 140.525 13.751z" />
+<glyph unicode="&#xe936;" glyph-name="plus" d="M388.095 960h247.889v-388.114h388.095v-247.869h-388.095v-388.075h-247.889v388.075h-388.095v247.869h388.095z" />
+<glyph unicode="&#xe937;" d="M741.3 471.948c-63.591 0.034-127.198 0.034-190.772-0.084-3.373 0-5.344 1.040-7.615 3.707-3.824 4.496-8.249 8.823-13.293 11.692-4.025 2.315-4.943 4.613-4.943 8.84 0.117 81.708 0.067 163.432 0.067 245.14 0 2.013 0.117 4.043-0.067 6.022-0.618 7.314-6.797 12.078-14.044 10.937-6.463-1.023-10.053-5.938-10.053-13.99-0.033-41.5 0-82.999 0-124.499 0-41.265-0.033-82.58 0.033-123.895 0.050-3.976-0.685-6.24-4.709-8.454-4.943-2.634-9.285-6.827-13.009-11.121-2.455-2.835-4.425-4.479-8.35-4.412-12.675 0.252-25.366 0.067-38.057 0-5.878-0.034-10.454-2.785-13.627-7.632-3.741-5.586-3.908-11.675-0.918-17.63 3.139-6.207 8.633-9.259 15.497-9.327 12.658-0.117 25.383 0.101 38.024-0.185 2.238-0.084 4.676-1.795 6.579-3.305 5.010-4.043 9.552-8.773 14.812-12.447 2.555-1.761 3.841-3.053 3.807-6.257-0.184-11.994-0.117-24.004-0.083-36.015 0-1.979-0.033-4.043 0.451-5.955 1.386-5.687 6.98-9.478 12.708-8.924 6.296 0.621 10.871 5.401 10.971 12.128 0.15 12.916 0.117 25.849 0 38.765 0 3.305 1.319 4.848 4.242 6.626 4.826 2.885 9.552 6.559 13.126 10.903 2.705 3.305 5.127 4.73 9.318 4.73 46.040-0.151 92.063-0.101 138.052-0.101 17.768 0 35.536-0.117 53.27 0.034 11.122 0.101 18.419 7.632 18.102 18.1-0.334 10.216-7.748 16.607-19.521 16.607zM533.212 452.607c0-0.017 0-0.034-0.017-0.067-0.017-0.218-0.033-0.419-0.067-0.637-0.033-0.319-0.083-0.621-0.15-0.939-0.167-0.923-0.401-1.845-0.701-2.734-0.1-0.302-0.2-0.604-0.317-0.889-0.134-0.352-0.267-0.688-0.434-1.040-0.134-0.319-0.267-0.621-0.434-0.906-0.301-0.604-0.635-1.208-1.002-1.761-0.534-0.839-1.136-1.644-1.787-2.416 0-0.017 0-0.017-0.017-0.034-0.451-0.503-0.902-0.973-1.369-1.443-0.25-0.235-0.501-0.47-0.751-0.705 0 0 0-0.017-0.017-0.017-0.334-0.302-0.685-0.587-1.035-0.855-0.267-0.218-0.534-0.419-0.802-0.604-1.57-1.124-3.306-2.046-5.16-2.717-1.303-0.47-2.638-0.822-4.041-1.040-0.701-0.101-1.403-0.185-2.121-0.218-0.351 0-0.701-0.017-1.069-0.017-0.384-0.017-0.751 0-1.136 0.034-0.284 0.017-0.568 0.050-0.868 0.084-0.618 0.067-1.236 0.185-1.837 0.335s-1.202 0.335-1.787 0.537c-2.137 0.788-4.175 1.979-6.012 3.472-0.317 0.252-0.635 0.537-0.935 0.805-0.401 0.369-0.785 0.738-1.152 1.124-0.083 0.084-0.167 0.185-0.25 0.268-0.367 0.403-0.735 0.822-1.069 1.241-0.434 0.52-0.835 1.057-1.202 1.61s-0.718 1.107-1.052 1.694c-0.635 1.174-1.186 2.382-1.586 3.623-0.217 0.621-0.384 1.258-0.534 1.879-0.067 0.319-0.134 0.637-0.184 0.956-0.1 0.486-0.167 0.99-0.184 1.493-0.050 0.503-0.067 1.006-0.067 1.51 0 0.369 0.017 0.738 0.017 1.107 0.033 0.671 0.083 1.325 0.184 1.979 0.033 0.235 0.067 0.486 0.117 0.721 0.017 0.134 0.033 0.252 0.067 0.386 0.033 0.117 0.067 0.252 0.083 0.386 0.050 0.268 0.1 0.52 0.167 0.772 0.1 0.419 0.217 0.839 0.351 1.241 0.267 0.906 0.618 1.795 1.019 2.65 0.134 0.302 0.284 0.604 0.451 0.906 0.2 0.369 0.401 0.738 0.618 1.090s0.434 0.705 0.685 1.057c0.468 0.671 0.985 1.325 1.536 1.946 0.284 0.335 0.601 0.671 0.935 0.973 0.267 0.268 0.534 0.52 0.818 0.772 0.301 0.268 0.618 0.537 0.952 0.788 0.317 0.252 0.651 0.486 1.002 0.721 1.019 0.705 2.121 1.308 3.273 1.812 0.384 0.168 0.768 0.319 1.169 0.47 0.284 0.101 0.568 0.201 0.852 0.285 0.284 0.101 0.568 0.185 0.852 0.252s0.584 0.151 0.885 0.218c0.301 0.050 0.584 0.117 0.885 0.168 0.918 0.151 1.837 0.252 2.789 0.302 0.367 0.017 0.735 0.017 1.102 0.017 0.267 0 0.534 0 0.802-0.017 0.25-0.017 0.518-0.034 0.785-0.050 0.518-0.050 1.035-0.101 1.536-0.185 0.451-0.067 0.902-0.168 1.353-0.268 0.434-0.101 0.885-0.218 1.319-0.352 0.417-0.117 0.852-0.268 1.252-0.419l0.017-0.017c0.401-0.151 0.802-0.302 1.186-0.47 0.067-0.034 0.117-0.050 0.184-0.101 0.367-0.168 0.718-0.335 1.085-0.537 0.367-0.185 0.735-0.403 1.102-0.621 0.017-0.017 0.033-0.017 0.050-0.034 0.367-0.235 0.735-0.486 1.102-0.738 0.351-0.252 0.701-0.52 1.052-0.805 0.167-0.134 0.334-0.268 0.484-0.403 0.334-0.285 0.668-0.604 0.985-0.923 0.301-0.285 0.584-0.587 0.852-0.889 0.451-0.486 0.868-0.99 1.252-1.526 0.184-0.268 0.384-0.537 0.568-0.805 0.367-0.537 0.701-1.107 1.019-1.694 0.417-0.788 0.802-1.61 1.102-2.466 0.134-0.319 0.25-0.637 0.351-0.973 0.685-2.080 1.035-4.311 1.002-6.626 0-0.587-0.033-1.157-0.1-1.728z" />
+<glyph unicode="&#xe938;" d="M522.992 804.030c0-3.992 0.301-8.001-0.083-11.96-0.551-5.804-4.576-9.41-9.969-9.528-5.594-0.134-10.17 3.556-10.487 9.528-0.434 8.136-0.434 16.321 0 24.457 0.301 5.619 4.826 9.226 10.22 9.226 5.411 0 9.702-3.59 10.27-9.226 0.401-4.126 0.083-8.337 0.083-12.514-0.033 0.017-0.033 0.017-0.033 0.017z" />
+<glyph unicode="&#xe939;" d="M523.075 105.11c0-3.808 0.234-7.632-0.050-11.423-0.484-6.307-4.809-10.367-10.487-10.283-5.494 0.084-9.869 3.992-10.153 10.014-0.367 7.783-0.367 15.6-0.033 23.4 0.267 5.988 4.626 9.863 10.17 9.947 5.761 0.067 10.070-3.942 10.52-10.199 0.284-3.791 0.050-7.616 0.050-11.44-0.017-0.017-0.017-0.017-0.017-0.017z" />
+<glyph unicode="&#xe93a;" d="M882.242 454.318c-0.167-5.519-4.342-9.662-10.12-10.031-0.351-0.034-0.735-0.017-1.085-0.017h-10.854c0 0.017 0 0.017 0 0.017-3.791 0-7.598-0.168-11.389 0.050-5.494 0.302-9.519 4.479-9.786 9.779-0.267 5.435 3.757 10.551 9.318 10.819 8.116 0.352 16.282 0.335 24.398 0.017 5.644-0.235 9.686-5.15 9.519-10.635z" />
+<glyph unicode="&#xe93b;" d="M186.319 454.536c-0.017-5.502-4.191-9.813-9.903-10.249-0.351-0.017-0.735-0.017-1.085-0.017-2.405-0.017-4.809-0.017-7.231-0.017-1.202 0.017-2.421 0.017-3.624 0.017-3.006 0.017-6.028-0.084-9.051-0.034-0.768 0.017-1.553 0.050-2.338 0.084-5.745 0.285-9.919 4.613-10.003 10.132-0.083 5.485 4.008 10.316 9.652 10.518 7.932 0.302 15.914 0.302 23.863 0.017 5.628-0.218 9.752-4.982 9.719-10.45z" />
+<glyph unicode="&#xe93c;" d="M492.065 454.234c0-0.503 0.017-1.006 0.067-1.51-0.067 0.503-0.083 1.006-0.083 1.526 0 0.369 0.017 0.721 0.033 1.090 0-0.369-0.017-0.738-0.017-1.107z" />
+<glyph unicode="&#xe93d;" d="M497.358 468.476c-0.551-0.621-1.069-1.275-1.536-1.946 0.468 0.671 0.969 1.325 1.536 1.946z" />
+<glyph unicode="&#xe93e;" d="M508.981 474.934c0.902 0.168 1.837 0.268 2.789 0.302-0.952-0.050-1.87-0.151-2.789-0.302z" />
+<glyph unicode="&#xe93f;" d="M511.92 433.568c0.367 0 0.718 0.017 1.069 0.017-0.367-0.017-0.718-0.034-1.085-0.034-0.384 0-0.751 0.017-1.119 0.050 0.384-0.034 0.751-0.050 1.136-0.034z" />
+<glyph unicode="&#xe940;" d="M512.872 475.269c0.267 0 0.534-0.017 0.802-0.034-0.267 0.017-0.534 0.017-0.802 0.017-0.367 0-0.735 0-1.102-0.017 0.367 0.034 0.735 0.034 1.102 0.034z" />
+<glyph unicode="&#xe941;" d="M526.916 439.741c0.468 0.47 0.918 0.939 1.369 1.443-0.651-0.772-1.353-1.493-2.121-2.147 0.25 0.235 0.501 0.47 0.751 0.705z" />
+<glyph unicode="&#xe942;" d="M528.302 441.217c0.651 0.772 1.252 1.577 1.787 2.416-0.534-0.855-1.119-1.661-1.787-2.416z" />
+<glyph unicode="&#xe943;" glyph-name="staff" d="M852.529 206.541c-40.953 0.285-74.344-32.751-74.586-73.619-0.285-41.010 32.708-74.331 73.589-74.616 40.981-0.285 74.373 32.609 74.629 73.619 0.256 40.868-32.708 74.331-73.632 74.616zM853.184 311.346c15.493 0 30.472-2.421 44.755-6.123l5.909-39.159c14.453-5.696 27.795-13.385 39.529-23.068l37.065 13.955c20.847-21.502 36.211-48.13 44.213-77.891l-31.042-24.777c1.153-7.405 1.908-15.094 1.837-22.784-0.086-7.832-0.897-15.379-2.136-22.784l30.743-25.204c-8.415-29.619-24.122-56.105-45.224-77.322l-36.866 14.525c-11.876-9.541-25.332-17.088-39.813-22.641l-6.436-39.017c-14.353-3.702-29.333-5.696-44.812-5.696-15.521 0.142-30.472 2.421-44.811 6.265l-5.852 39.159c-14.439 5.554-27.824 13.385-39.557 23.068l-37.065-13.955c-20.818 21.36-36.211 48.13-44.242 77.891l31.070 24.635c-1.139 7.547-1.88 15.094-1.837 22.926 0.085 7.689 0.897 15.379 2.136 22.784l-30.743 25.062c8.387 29.761 24.122 56.105 45.21 77.464l36.909-14.525c11.847 9.541 25.318 17.088 39.828 22.499l6.365 39.159c14.382 3.56 29.362 5.696 44.868 5.553zM409.028 371.574l49.657-49.694-38.586-38.587 39.825-46.143-52.696-157.924-54.289 156.107 44.44 48.528-38.046 38.019zM618.515 376.928c38.144-7.169 73.391-22.554 103.826-44.248l0.426-0.317-2.897-1.86c-63.883-43.209-105.968-116.325-105.968-199.009 0-41.386 10.521-80.353 29.028-114.37l0.909-1.579h-643.838v102.668c0 127.586 90.779 233.999 211.264 258.14l194.355-304.663zM344.453 820.627c-25.958 0.065-58.686-6.617-62.522-39.908 0 0 0-64.687-17.265-73.32l-4.285-60.371-17.266 17.252 6.459-81.938 32.358-2.176c0 0 8.634-166.017 166.052-133.689 0 0 75.464 23.726 92.699 133.689l25.901 2.176 6.459 73.32-10.776-2.173c0 0-6.491 62.544-12.949 88.412l-4.317 62.531c0 0-36.645 30.199-90.556 4.316 0 0-62.546 2.173-77.637 8.633 0 0-14.592 3.203-32.352 3.248zM418.251 942.627c73.513 0.006 124.602-38.985 124.602-38.985 94.873-75.478 43.136-204.866 43.136-204.866 21.551-12.933 19.41-23.709 19.41-23.709 0-140.181-38.819-129.388-38.819-129.388-21.583-90.57-105.648-131.53-105.648-131.53-163.908-40.977-204.867 129.371-204.867 129.371-34.503 4.316-38.819 84.095-38.819 84.095-10.809 53.91 19.409 75.477 19.409 75.477-64.718 150.938 51.737 196.216 51.737 196.216 46.692 32.612 91.352 43.315 129.859 43.318z" />
+<glyph unicode="&#xe944;" glyph-name="back" d="M580.895 960h273.723l-413.813-509.791 2.338-2.896 415.046-511.313h-273.736l-280.542 345.584-1.234-1.48-136.868 168.605 136.868 168.646z" />
+<glyph unicode="&#xe945;" glyph-name="next" d="M165.81 960h273.728l280.547-345.583 1.234 1.48 136.87-168.604-415.080-511.292h-273.741l413.82 509.792-2.338 2.896-99.387 122.396z" />
+<glyph unicode="&#xe946;" glyph-name="sendemail" d="M27.191 706.781c-25.772-241.871 124.762-457.551 339.243-483.692 130.086-15.899 254.021 41.716 338.899 143.179l-99.362 77.659 417.947 168.715-62.835-446.319-94.675 73.987c-102.159-126.221-264.94-198.635-437.993-177.524-267.144 32.56-457.349 275.497-424.787 542.664 4.313 35.279 12.355 69.116 23.562 101.329zM119.785 802.29l301.541-301.517c9.96-9.956 26.039-9.956 35.971 0l300.424 300.37c6.124-4.049 10.197-10.971 10.197-18.876v-222.443l-254.765-102.9 107.427-83.946h-452.099c-22.788 22.312-43.559 47.202-61.051 74.628v334.661c0 8.758 5.061 16.291 12.355 20.023zM154.8 854.39h569.177c-0.319-5.431-2.529-10.81-6.738-14.938l-263.022-261.552c-8.813-8.573-22.738-8.625-31.099-0.080l-262.357 260.383c-4.368 4.42-6.284 10.331-5.962 16.186z" />
+<glyph unicode="&#xe947;" glyph-name="exit" d="M826.547 713.055l174.681-174.731-174.681-174.856v116.127h-324.501v117.521h324.501zM22.578 960h748.846v-322.493h-85.415v233.478h-527.32l143.325-93.695v-571.717h383.995v233.478h85.415v-322.493h-469.41v-180.559l-279.436 180.559z" />
+<glyph unicode="&#xe948;" glyph-name="key" d="M738.8 883.463c-8.706 0-17.411-3.312-24.038-9.937-13.313-13.315-13.313-34.816 0-48.13l148.772-148.899c13.318-13.25 34.83-13.25 48.143 0.064 13.308 13.25 13.308 34.816-0.067 48.13l-148.768 148.835c-6.63 6.625-15.336 9.937-24.042 9.937zM711.352 960c26.51 0.008 53.012-10.118 73.233-30.404l177.155-177.025c40.447-40.509 40.447-106.138 0-146.523l-213.276-213.222c-40.389-40.436-106.026-40.436-146.535 0l-20.948 20.956-146.829-147.025-75.136 22.819 16.939-80.955-78.011 19.881 12.629-85.271-86.701 11.249 16.942-80.95-78.887 18.878 15.316-82.52-74.011-74.080-81.386 174.416 431.31 431.342 110.665-110.618-138.919 138.968c-40.498 40.383-40.498 106.017 0 146.523l213.17 213.157c20.255 20.253 46.773 30.396 73.283 30.404z" />
+<glyph unicode="&#xe949;" glyph-name="duplicate" d="M10.24 553.574v-396.186h104.448v54.497h-52.224v685.67h685.67v-52.224h54.477v104.448h-792.371v-396.206zM168.038 790.374c-0.686-1.587-0.911-191.846-0.686-422.973l0.686-420.024 845.722-1.137-0.451 422.748-0.686 422.973-421.837 0.676c-336.251 0.461-422.072 0.010-422.748-2.263zM959.273 369.674v-368.937h-737.884v737.874h737.874v-368.937zM538.563 580.588c-0.911-0.911-1.587-36.782-1.587-79.688v-77.875l-78.787-0.451-79.012-0.686v-104.448l78.787-0.686 79.012-0.451 0.451-79.012 0.686-78.787 52.9-0.686 52.675-0.451v158.925h158.925l-0.451 52.9-0.686 52.675-78.787 0.686-79.012 0.451-0.451 79.012-0.686 78.787-51.313 0.676c-28.14 0.246-51.753-0.205-52.664-0.891z" />
+<glyph unicode="&#xe94a;" glyph-name="paste" d="M605.659 64.886h204.831v-28.466h-204.831zM605.659 156.302h204.831v-28.481h-204.831zM550.693 412.216c-5.984 0-10.938-4.925-10.938-10.968v-410.451c0-6.055 4.955-10.969 10.938-10.969h307.123c6.043 0 10.967 4.913 10.967 10.969v266.799l-81.768 0.329c-69.89-5.489-71.762 57.844-71.762 57.844v96.447zM550.69 456.091h184.737l39.994-42.204h0.562l96.757-102.552 0.057-0.204 39.816-42.017v-278.318c0-30.288-24.536-54.812-54.81-54.812h-307.112c-30.276 0-54.81 24.524-54.81 54.812v410.453c0 30.265 24.534 54.842 54.81 54.842zM473.656 917.935c-30.071 0-54.464-23.086-54.464-51.573 0-28.453 24.394-51.569 54.464-51.569 30.074 0 54.464 23.116 54.464 51.569 0 28.487-24.39 51.573-54.464 51.573zM473.656 960c52.904 0 96.089-39.324 98.736-88.812l0.128-4.816h83.897v-29.951h179.521v-404.837l-76.399 80.603h-3.089v225.206h-100.033v-100.188h-365.509v100.188h-100.049v-694.723h248.938v-51.875c0-7.646 0.777-15.114 2.256-22.328l0.886-3.83h-331.552v871.785h179.521v29.951h83.882l0.129 4.816c2.647 49.488 45.833 88.812 98.736 88.812z" />
+<glyph unicode="&#xe94b;" glyph-name="copy" d="M614.832 590.144v-132.453c0 0-2.565-87.003-98.572-79.45l-112.324-0.455v-366.468c0-8.312 6.771-15.062 15.082-15.062h421.761c8.278 0 15.061 6.75 15.061 15.062v563.764c0 8.289-6.782 15.062-15.061 15.062zM436.672 886.928v-160.666c0 0-3.093-105.514-119.549-96.373l-136.227-0.54v-444.483c0-10.086 8.22-18.258 18.305-18.258h144.511v226.987l54.706 57.72 0.080 0.29 132.935 140.843h0.746l54.925 57.952h141.888v218.278c0 10.031-8.205 18.25-18.259 18.25zM403.040 960h307.691c50.448 0 91.366-40.914 91.366-91.32v-218.28h38.685c41.603 0 75.331-33.742 75.331-75.313v-563.775c0-41.61-33.728-75.312-75.331-75.312h-421.76c-41.593 0-75.309 33.703-75.309 75.312v82.224h-144.516c-50.46 0-91.356 40.875-91.356 91.335v463.677l66.357 70.010 0.095 0.341 161.216 170.811h0.911z" />
+<glyph unicode="&#xe94c;" glyph-name="replace" d="M202.716 688.95l202.812-202.848h-127.928v-257.484h236.225v-137.025h-373.306v394.509h-140.518zM474.506 804.216h412.622v-378.822h137.016l-202.713-202.789-202.809 202.789h131.457v241.798h-275.572z" />
+<glyph unicode="&#xe94d;" glyph-name="week" d="M528.871 122.241c-5.104 0-9.357-4.98-9.357-11.12v-101.089c0-6.14 4.253-11.12 9.357-11.12h95.404c5.245 0 9.497 4.98 9.497 11.12v101.089c0 6.14-4.252 11.12-9.497 11.12zM404.547 122.241c-5.245 0-9.499-4.98-9.499-11.12v-101.089c0-6.14 4.253-11.12 9.499-11.12h95.404c5.103 0 9.357 4.98 9.357 11.12v101.089c0 6.14-4.255 11.12-9.357 11.12zM280.080 122.241c-5.245 0-9.499-4.98-9.499-11.12v-101.089c0-6.14 4.253-11.12 9.499-11.12h95.404c5.245 0 9.499 4.98 9.499 11.12v101.089c0 6.14-4.253 11.12-9.499 11.12zM155.614 122.241c-5.103 0-9.355-4.98-9.355-11.12v-101.089c0-6.14 4.252-11.12 9.355-11.12h95.405c5.247 0 9.499 4.98 9.499 11.12v101.089c0 6.14-4.252 11.12-9.499 11.12zM777.801 258.021c-5.245 0-9.497-4.98-9.497-11.12v-101.089c0-6.14 4.252-11.121 9.497-11.121h95.404c5.245 0 9.499 4.981 9.499 11.121v101.089c0 6.14-4.253 11.12-9.499 11.12zM653.335 258.021c-5.245 0-9.497-4.98-9.497-11.12v-101.089c0-6.14 4.252-11.121 9.497-11.121h95.407c5.245 0 9.496 4.981 9.496 11.121v101.089c0 6.14-4.251 11.12-9.496 11.12zM528.871 258.021c-5.104 0-9.357-4.98-9.357-11.12v-101.089c0-6.14 4.253-11.121 9.357-11.121h95.404c5.245 0 9.497 4.981 9.497 11.121v101.089c0 6.14-4.252 11.12-9.497 11.12zM404.547 258.021c-5.245 0-9.499-4.98-9.499-11.12v-101.089c0-6.14 4.253-11.121 9.499-11.121h95.404c5.103 0 9.357 4.981 9.357 11.121v101.089c0 6.14-4.255 11.12-9.357 11.12zM280.080 258.021c-5.245 0-9.499-4.98-9.499-11.12v-101.089c0-6.14 4.253-11.121 9.499-11.121h95.404c5.245 0 9.499 4.981 9.499 11.121v101.089c0 6.14-4.253 11.12-9.499 11.12zM155.614 258.021c-5.103 0-9.355-4.98-9.355-11.12v-101.089c0-6.14 4.252-11.121 9.355-11.121h95.405c5.247 0 9.499 4.981 9.499 11.121v101.089c0 6.14-4.252 11.12-9.499 11.12zM777.801 393.972c-5.245 0-9.497-4.981-9.497-10.959v-101.252c0-6.144 4.252-11.124 9.497-11.124h95.404c5.245 0 9.499 4.98 9.499 11.124v101.252c0 5.977-4.253 10.959-9.499 10.959zM653.335 393.972c-5.245 0-9.497-4.981-9.497-10.959v-101.252c0-6.144 4.252-11.124 9.497-11.124h95.407c5.245 0 9.496 4.98 9.496 11.124v101.252c0 5.977-4.251 10.959-9.496 10.959zM528.871 393.972c-5.104 0-9.357-4.981-9.357-10.959v-101.252c0-6.144 4.253-11.124 9.357-11.124h95.404c5.245 0 9.497 4.98 9.497 11.124v101.252c0 5.977-4.252 10.959-9.497 10.959zM404.547 393.972c-5.245 0-9.499-4.981-9.499-10.959v-101.252c0-6.144 4.253-11.124 9.499-11.124h95.404c5.103 0 9.357 4.98 9.357 11.124v101.252c0 5.977-4.255 10.959-9.357 10.959zM280.080 393.972c-5.245 0-9.499-4.981-9.499-10.959v-101.252c0-6.144 4.253-11.124 9.499-11.124h95.404c5.245 0 9.499 4.98 9.499 11.124v101.252c0 5.977-4.253 10.959-9.499 10.959zM155.614 393.972c-5.103 0-9.355-4.981-9.355-10.959v-101.252c0-6.144 4.252-11.124 9.355-11.124h95.405c5.247 0 9.499 4.98 9.499 11.124v101.252c0 5.977-4.252 10.959-9.499 10.959zM777.801 527.093c-5.245 0-9.497-4.977-9.497-11.12v-101.252c0-5.979 4.252-10.959 9.497-10.959h95.404c5.245 0 9.499 4.98 9.499 10.959v101.252c0 6.143-4.253 11.12-9.499 11.12zM653.335 527.093c-5.245 0-9.497-4.977-9.497-11.12v-101.252c0-5.979 4.252-10.959 9.497-10.959h95.407c5.245 0 9.496 4.98 9.496 10.959v101.252c0 6.143-4.251 11.12-9.496 11.12zM528.871 527.093c-5.104 0-9.357-4.977-9.357-11.12v-101.252c0-5.979 4.253-10.959 9.357-10.959h95.404c5.245 0 9.497 4.98 9.497 10.959v101.252c0 6.143-4.252 11.12-9.497 11.12zM404.547 527.093c-5.245 0-9.499-4.977-9.499-11.12v-101.252c0-5.979 4.253-10.959 9.499-10.959h95.404c5.103 0 9.357 4.98 9.357 10.959v101.252c0 6.143-4.255 11.12-9.357 11.12zM103.731 908.379v-308.082h804.773v308.082zM67.865 960h888.271c5.245 0 9.497-4.981 9.497-11.12v-975.365c0-6.144-1.701-15.603-3.828-21.248l-9.496-11.619c-4.68-2.492-12.76-4.648-18.004-4.648h-844.608c-5.247 0-13.326 2.156-18.004 4.648l-9.64 11.619c-1.985 5.645-3.686 15.104-3.686 21.248v975.365c0 6.14 4.254 11.12 9.499 11.12z" />
+<glyph unicode="&#xe94e;" glyph-name="baggage" d="M733.725 664.051v-522.022h122.802v522.022zM170.739 664.051v-522.022h122.77v522.022zM438.264 769.338l-22.849-67.612h194.723l-24.368 67.612zM415.655 791.666h192.707l51.857-89.94h232.036c72.769 0 131.762-54.978 131.762-122.813v-351.734c0-67.85-58.993-122.843-131.762-122.843h-760.493c-72.753 0-131.763 54.993-131.763 122.843v351.734c0 67.835 59.009 122.813 131.763 122.813h232.036z" />
+<glyph unicode="&#xe94f;" glyph-name="trash" d="M191.166 630.621h136.774v-577.939h105.019v577.939h157.78v-577.939h105.083v577.939h136.772v-694.765h-641.428zM126.98 847.182h769.8v-99.472h-769.8zM335.572 960h352.663v-90.878h-352.663z" />
+<glyph unicode="&#xe950;" glyph-name="erase" d="M88.57 4.16h886.236c18.731 0 34.042-15.353 34.042-34.060 0-18.79-15.311-34.1-34.042-34.1h-886.236c-18.729 0-34.042 15.31-34.042 34.1 0 18.707 15.313 34.060 34.042 34.060zM331.535 590.147l-248.272-249.935 157.96-161.957c13.749-13.833 48.813-37.771 68.188-37.771h104.73c19.416 0 46.979 23.937 60.73 37.771l131.647 136.812zM629.682 960c17.438 0 34.877-7.814 48.146-21.084l278.586-279.645c26.499-26.457 26.499-72.207 0-98.729l-425.897-430.494c-26.523-26.605-78.815-57.729-116.377-57.729h-104.73c-37.459 0-89.815 31.125-116.375 57.729l-157.96 167.29c-26.5 26.499-26.5 69.935 0 96.332l546.42 546.452c13.166 13.293 30.711 19.877 48.187 19.877z" />
+<glyph unicode="&#xe951;" d="M458.499-21.888c-57.395 4.965-111.283 21.958-162.466 47.857-82.11 41.567-147.22 102.24-194.462 181.079-42.082 70.251-63.941 147.010-65.728 229.423-0.15 6.458-0.15 12.933 0 19.324 0.15 12.228 0.802 24.306 1.87 36.283 19.889 225.447 189.82 404.698 419.2 432.208 7.197 0.839 14.478 0.99 23.88 1.61v-48.763c-77.434-6.425-148.974-28.533-210.978-73.891-116.844-85.381-180.786-195.035-184.91-329.163-0.334-10.216-0.301-20.532 0.117-30.999 0.701-19.542 2.588-39.554 5.745-60.035 23.546-153.988 112.419-260.623 251.49-324.533 34.484-15.869 74.028-21.22 111.684-29.053 16.933-3.523 26.836-9.813 27.704-27.577 0.701-16.238-5.811-25.279-23.145-23.769z" />
+<glyph unicode="&#xe952;" d="M831.743 103.969c-73.527-71.928-163.752-112.925-266.219-124.885-13.844-1.627-29.073-4.311-32.146 16.053-2.622 17.328 7.181 28.768 26.936 33.264 32.53 7.431 65.594 13.369 97.356 23.484 58.731 18.737 108.612 53.275 150.744 97.61 122.188 128.408 158.358 279.829 98.492 446.147-59.867 166.418-184.81 258.308-359.935 280.299-2.839 0.352-5.694 0.755-11.038 1.459v48.696c18.703-2.114 36.655-2.634 53.955-6.29 187.565-39.235 316.667-149.090 371.591-333.222 54.94-184.4 7.732-348.168-129.736-482.614z" />
+<glyph unicode="&#xe953;" glyph-name="projects" d="M738.064 471.472l-206.048-117.081 0.648-237.415 205.4 118.386zM296.816 471.472v-236.11l205.402-118.386 0.646 237.415zM517.439 619.312l-204.671-118.352 204.671-117.696 205.313 117.696zM92.872 910.64h327.139c51.335 0 92.917-41.604 92.917-92.904v-44.536h418.154c51.314 0 92.918-41.615 92.918-92.907v-602.031c0-51.325-41.605-92.918-92.918-92.918h-838.208c-51.27 0-92.873 41.594-92.873 92.918v602.031c0 1.603 0.041 3.196 0.121 4.779l0.078 1.030-0.078 1.030c-0.080 1.584-0.121 3.178-0.121 4.782v125.822c0 51.299 41.603 92.904 92.872 92.904z" />
+<glyph unicode="&#xe954;" glyph-name="usertime" d="M557.61 283.76c0 0 234.191-55.807 256.508-278.821h-814.117c0 0 66.954 245.319 267.693 267.648l54.36-232.801 39.942 0.321 45.427 119.165-42.397 73.563h84.77l-40.646-75.446 51.832-116.487 31.151 0.25zM721.151 752.498c3.881 0.061 7.808-1.164 11.085-3.756l86.55-69.216c0.927-0.749 1.758-1.573 2.49-2.458l1.384-2.053 0.604-0.177c3.044-1.077 5.694-2.969 7.708-5.437 2.408-2.972 3.834-6.662 3.883-10.763l0.775-110.79c0.044-9.547-7.646-17.359-17.196-17.446-9.534-0.042-17.332 7.639-17.418 17.206l-0.771 102.937-0.623 0.275c-0.864 0.474-1.701 1.029-2.502 1.669l-86.513 69.196c-7.448 5.987-8.658 16.859-2.723 24.365 3.363 4.163 8.277 6.368 13.267 6.447zM401.426 759.683c33.843 0 65.776-7.706 94.582-21.095-8.652-26.989-13.395-55.697-13.395-85.511 0-93.086 45.61-175.496 115.472-226.751-38.319-69.217-111.983-116.086-196.66-116.086-124.119 0-224.722 100.616-224.722 224.733 0 124.113 100.603 224.711 224.722 224.711zM786.072 821.774c-92.958 0-168.706-75.661-168.706-168.701 0-93.019 75.748-168.723 168.706-168.723 93.042 0 168.708 75.705 168.708 168.723 0 93.040-75.666 168.701-168.708 168.701zM786.072 891.011c131.44 0 237.961-106.559 237.961-237.939 0-131.359-106.521-237.917-237.961-237.917-131.347 0-237.911 106.558-237.911 237.917 0 131.38 106.564 237.939 237.911 237.939z" />
+<glyph unicode="&#xe955;" glyph-name="finger1" d="M943.765 724.484c-6.925 3.208-14.269 4.937-21.133 4.937-9.938 0-18.217-3.5-23.398-9.749-30.615-37.272-58.645-109.766-81.218-168.016-10.382-26.932-24.32-62.974-33.738-79.891-5.144 49.556 17.094 228.345 25.656 297.196l0.146 1.111c5.948 47.828 6.885 56.222 6.584 59.957-2.304 26.624-11.603 44.65-27.656 53.547-16.23 9.022-38.279 7.083-62.748-5.485-12.282-6.313-17.24-30.624-35.123-141.157l-0.073-0.499c-9.841-60.706-32.478-200.564-49.876-222.875-15.487 34.036-26.917 222.032-31.854 303.405-3.427 56.977-5.488 89.686-7.686 99.713-4.657 20.932-29.135 40.188-54.521 42.927-21.115 2.514-39.271-7.083-48.869-25.291-16.744-16.266-15.277-74.205-7.646-211.704 3.625-65.442 11.113-200.603-0.536-214.912-20.99 3.811-51.453 90.274-90.514 257.081-10.952 46.707-14.391 60.791-18.312 67.104-7.113 21.578-35.135 39.786-61.388 39.786-2.249 0-4.438-0.146-6.599-0.417-13.88-1.75-45.974-12.224-43.384-71.055 12.76-82.235 28.661-143.017 44.035-202.058l0.307-1.16c9.214-35.348 17.931-68.766 25.611-105.685 18.092-87.187 5.025-139.581 4.876-140.183-1.184-5.397-3.096-8.626-5.704-9.603-0.953-0.344-2.125-0.566-3.436-0.566-7.667 0-18.75 5.899-24.427 9.603-11.676 26.813-70.108 154.724-129.679 176.082l-2.155 0.807-2.219-0.064c-22.442-0.569-39.399-7.874-50.464-21.751-17.484-21.94-12.964-51.754-11.777-57.723l0.734-2.189c0.438-0.937 42.93-93.579 47.581-135.599 4.033-36.081 34.98-76.978 59.863-109.876l1.020-1.351c8.118-10.76 15.113-20.074 20.555-28.594 72.744-87.708 192.059-165.572 193.048-166.226 14.683-12.562 22.521-24.238 22.756-33.875 0.149-6.289-3.351-9.792-3.47-9.938l-2.892-2.645 0.244-0.271h-1.172v-21.334h346.783v7.186l17.773 59.957c55.854 178.514 57.683 333.929 57.601 334.994 0.572 5.665 16.534 59.915 29.385 103.703l0.344 1.126c25.571 87.291 57.446 195.882 65.007 237.516 3.202 17.858-7.086 35.15-26.244 44.005zM946.191 684.793c-7.345-40.501-40.532-153.555-64.742-236.122-20.978-71.429-29.604-101.308-30.31-109.346 0-1.488-0.645-150.225-56.633-329.138l-15.664-52.853h-296.359c1.208 3.622 2.073 7.81 2.036 12.687-0.073 17.137-10.943 35.080-32.532 53.437-1.193 0.77-119.558 78.75-187.856 160.954-5.464 8.73-13.792 19.751-21.858 30.374-21.864 28.916-51.839 68.593-55.093 97.968-4.876 43.819-43.989 130.687-48.978 141.568-0.621 4.395-2.666 23.784 7.339 36.267 6.045 7.561 16.062 11.777 29.769 12.525 53.386-22.25 114.369-163.831 114.971-165.267l1.303-3.023 2.615-2c3.656-2.663 22.829-16.020 41.408-16.020 4.255 0 8.264 0.667 11.844 2.030 7.412 2.782 17.051 9.667 20.735 26.603 0.621 2.292 14.635 57.553-4.712 150.751-7.704 37.287-16.619 71.369-26.016 107.493l-0.161 0.527c-15.167 58.058-30.88 118.097-43.399 198.329-1.166 26.88 6.843 42.754 22.451 44.744 17.812 2.52 40.318-12.124 42.802-23.666l3.126-8.915c3.306-10.775 9.545-37.555 13.719-55.455 35.4-150.91 68.565-275.843 115.419-275.843 3.814 0 9.412 1.108 14.455 6.474 19.267 20.311 16.224 102.002 8.867 234.183-3.573 64.021-8.094 180.517-0.907 191.977l2.901 5.984c4.417 9.506 15.387 13.77 24.092 13.77 1.272 0 2.49-0.067 3.668-0.213 14.875-1.598 31.196-13.332 33.561-24.15 1.851-8.307 4.258-48.214 7.101-94.38l0.082-1.552c16.001-264.082 26.603-328.559 53.836-328.559 30.934 0 46.062 61.461 75.895 246.114l0.146 0.77c7.311 45.222 18.324 113.248 23.23 123.247 15.989 7.999 30.517 9.962 38.946 5.333 10.708-5.917 14.23-21.812 15.271-33.957 0.033-3.296-3.278-29.772-6.447-55.416-28.925-232.454-33.083-312.208-17.103-328.2 4.24-4.2 10.218-6.024 15.572-4.791 16.312 3.436 27.093 27.958 56.052 102.973 21.894 56.588 49.082 126.952 77.301 161.268 0.228 0.244 1.574 0.937 4.52 0.937 3.458 0 7.406-0.937 11.165-2.666 7.022-3.275 14.044-9.649 12.574-17.758zM156.185 382.742c-0.332 1.948-0.457 3.857-0.569 5.792-34.791 3.354-65.947 26.84-76.884 62.267-14.525 47.082 11.968 97.186 59.041 111.711 47.070 14.516 97.168-11.959 111.699-59.041 6.365-20.671 4.642-41.853-3.114-60.386 6.645-3.065 12.592-7.899 17.021-13.98 11.831 24.281 15.040 52.823 6.453 80.664-17.995 58.289-80.062 91.123-138.363 73.14-58.317-18.007-91.123-80.089-73.137-138.397 14.239-46.126 56.082-76.147 101.81-77.812-1.61 5.29-3.029 10.623-3.957 16.041z" />
+<glyph unicode="&#xe956;" glyph-name="finger2" d="M913.761 724.494c-6.927 3.219-14.27 4.928-21.132 4.928-9.947 0-18.208-3.48-23.397-9.751-30.623-37.268-58.642-109.756-81.228-168.014-10.372-26.923-24.311-62.962-33.726-79.891-5.139 49.579 17.093 228.366 25.646 297.194l0.141 1.122c5.969 47.825 6.898 56.21 6.583 59.934-2.292 26.644-11.602 44.67-27.644 53.556-16.224 9.020-38.267 7.084-62.748-5.485-12.288-6.333-17.249-30.633-35.125-141.167l-0.060-0.49c-9.867-60.717-32.489-200.561-49.886-222.882-15.496 34.044-26.904 222.030-31.843 303.402-3.436 56.998-5.511 89.705-7.7 99.721-4.667 20.939-29.135 40.203-54.511 42.931-21.121 2.526-39.276-7.082-48.874-25.3-16.746-16.256-15.276-74.195-7.652-211.699 3.632-65.423 11.105-200.587-0.542-214.894-20.976 3.803-51.457 90.274-90.51 257.081-10.958 46.712-14.379 60.768-18.319 67.104-7.103 21.575-35.123 39.775-61.373 39.775-2.249 0-4.438-0.147-6.605-0.409-13.874-1.758-45.983-12.222-43.388-71.070 12.77-82.21 28.67-143 44.038-202.042l0.313-1.17c9.205-35.337 17.917-68.753 25.599-105.675 18.099-87.181 5.026-139.594 4.872-140.199-1.182-5.406-3.082-8.613-5.707-9.603-0.936-0.333-2.121-0.538-3.433-0.538-7.671 0-18.754 5.874-24.415 9.572-11.693 26.821-70.121 154.744-129.684 176.102l-2.162 0.798-2.208-0.052c-22.453-0.568-39.416-7.895-50.477-21.761-17.478-21.932-12.959-51.744-11.777-57.738l0.73-2.167c0.439-0.936 42.931-93.571 47.583-135.622 4.041-36.061 34.973-76.973 59.867-109.851l1.026-1.351c8.105-10.753 15.105-20.065 20.541-28.586 72.749-87.733 192.061-165.596 193.064-166.221 14.666-12.573 22.514-24.253 22.754-33.907 0.144-6.288-3.353-9.789-3.48-9.914l-2.891-2.647 0.245-0.283h-1.162v-21.333h346.781v7.188l17.772 59.96c55.852 178.522 57.683 333.927 57.602 334.977 0.56 5.69 16.519 59.916 29.375 103.72l0.353 1.11c25.569 87.296 57.434 195.886 64.996 237.54 3.211 17.866-7.080 35.138-26.224 44zM916.189 684.812c-7.356-40.499-40.532-153.551-64.751-236.119-20.958-71.453-29.598-101.331-30.29-109.35 0-1.499-0.654-150.247-56.654-329.124l-15.665-52.875h-296.346c1.204 3.626 2.058 7.803 2.037 12.698-0.084 17.125-10.954 35.060-32.542 53.435-1.188 0.773-119.557 78.74-187.847 160.941-5.458 8.723-13.791 19.754-21.855 30.377-21.872 28.934-51.847 68.6-55.102 97.975-4.874 43.832-43.976 130.661-48.977 141.551-0.61 4.408-2.666 23.807 7.34 36.288 6.057 7.553 16.063 11.775 29.771 12.526 53.393-22.25 114.37-163.842 114.97-165.281l1.293-3 2.625-2.019c3.645-2.668 22.811-16.025 41.396-16.025 4.264 0 8.265 0.692 11.848 2.064 7.416 2.772 17.045 9.664 20.723 26.582 0.629 2.293 14.644 57.552-4.704 150.746-7.707 37.306-16.628 71.389-26.014 107.494l-0.174 0.546c-15.165 58.055-30.873 118.095-43.389 198.326-1.162 26.87 6.84 42.745 22.453 44.749 17.813 2.496 40.311-12.14 42.798-23.671l3.122-8.916c3.319-10.794 9.548-37.556 13.73-55.456 35.389-150.917 68.562-275.861 115.407-275.861 3.808 0 9.417 1.12 14.454 6.485 19.275 20.321 16.223 101.991 8.875 234.18-3.583 64.018-8.105 180.526-0.917 191.963l2.913 6.005c4.416 9.504 15.37 13.77 24.080 13.77 1.272 0 2.501-0.090 3.673-0.227 14.878-1.598 31.192-13.342 33.555-24.159 1.856-8.288 4.274-48.193 7.105-94.358l0.083-1.552c16.001-264.081 26.603-328.557 53.833-328.557 30.939 0 46.063 61.46 75.891 246.092l0.158 0.781c7.291 45.229 18.311 113.247 23.207 123.235 16.001 8.026 30.541 9.992 38.947 5.36 10.722-5.921 14.232-21.818 15.283-33.962 0.023-3.298-3.283-29.792-6.458-55.416-28.917-232.462-33.083-312.209-17.107-328.196 4.242-4.215 10.209-6.037 15.567-4.791 16.33 3.409 27.099 27.954 56.062 102.959 21.893 56.575 49.081 126.964 77.285 161.254 0.24 0.268 1.573 0.959 4.526 0.959 3.457 0 7.416-0.959 11.162-2.666 7.049-3.279 14.072-9.652 12.624-17.764zM294.016 937.701c-61.024 0-110.663-49.65-110.663-110.684 0-54.4 39.498-99.664 91.291-108.846-2.539 7.603-3.958 15.167-4.963 22.974-37.455 10.635-64.998 45.064-64.998 85.872 0 49.271 40.082 89.351 89.332 89.351 49.268 0 89.33-40.080 89.33-89.351 0-26.536-11.753-50.322-30.205-66.684 0.852-1.682 1.682-3.37 2.333-5.194 1.942-5.557 3.315-11.186 4.269-16.885 27.208 20.171 44.936 52.375 44.936 88.763-0.001 61.036-49.655 110.684-110.663 110.684z" />
+<glyph unicode="&#xe957;" glyph-name="finger3" d="M890.066 678.005c-6.499 3.030-13.428 4.637-19.87 4.637-9.352 0-17.155-3.274-22.035-9.174-28.798-35.074-55.187-103.285-76.418-158.112-9.765-25.332-22.889-59.249-31.751-75.178-4.841 46.654 16.095 214.9 24.146 279.675l0.146 1.054c5.588 45.007 6.479 52.899 6.184 56.402-2.177 25.074-10.919 42.037-26.034 50.398-15.261 8.487-36.013 6.665-59.028-5.162-11.566-5.961-16.232-28.827-33.055-132.845l-0.077-0.461c-9.252-57.138-30.563-188.737-46.932-209.744-14.568 32.038-25.329 208.94-29.975 285.515-3.237 53.638-5.159 84.418-7.232 93.842-4.382 19.701-27.406 37.832-51.32 40.399-19.873 2.377-36.953-6.665-45.993-23.808-15.757-15.296-14.37-69.821-7.195-199.215 3.411-61.569 10.469-188.76-0.49-202.226-19.767 3.578-48.425 84.951-85.183 241.922-10.306 43.959-13.545 57.187-17.232 63.147-6.705 20.305-33.072 37.428-57.774 37.428-2.122 0-4.176-0.137-6.213-0.381-13.061-1.658-43.252-11.503-40.811-66.882 11.993-77.363 26.962-134.57 41.424-190.129l0.289-1.103c8.685-33.255 16.885-64.7 24.112-99.444 17.011-82.041 4.723-131.365 4.583-131.935-1.114-5.084-2.922-8.106-5.368-9.037-0.905-0.312-1.999-0.51-3.234-0.51-7.215 0-17.644 5.531-22.998 9.011-10.979 25.241-65.963 145.62-122.032 165.719l-2.019 0.75-2.097-0.049c-21.119-0.536-37.067-7.43-47.476-20.477-16.453-20.638-12.194-48.688-11.091-54.334l0.702-2.039c0.412-0.885 40.404-88.053 44.775-127.627 3.79-33.937 32.917-72.439 56.324-103.374l0.96-1.275c7.651-10.114 14.239-18.879 19.354-26.899 68.455-82.562 180.734-155.835 181.66-156.422 13.82-11.833 21.188-22.82 21.408-31.909 0.143-5.918-3.151-9.215-3.248-9.332l-2.721-2.489 0.232-0.264h-1.137v-20.076h326.346v6.763l16.725 56.419c52.549 167.999 54.274 314.241 54.196 315.232 0.559 5.351 15.568 56.385 27.661 97.6l0.312 1.048c24.075 82.149 54.070 184.335 61.185 223.536 3.045 16.819-6.64 33.072-24.685 41.413zM892.369 640.666c-6.92-38.113-38.15-144.5-60.93-222.199-19.744-67.243-27.85-95.357-28.526-102.904 0-1.412-0.607-141.387-53.285-309.721l-14.751-49.757h-278.893c1.137 3.411 1.962 7.341 1.922 11.95-0.063 16.115-10.292 32.994-30.608 50.286-1.131 0.725-112.509 74.095-176.787 151.455-5.141 8.203-12.978 18.584-20.566 28.583-20.569 27.231-48.777 64.557-51.833 92.2-4.589 41.247-41.407 122.958-46.096 133.212-0.593 4.145-2.509 22.396 6.906 34.14 5.68 7.106 15.121 11.082 28.016 11.787 50.226-20.938 107.613-154.182 108.178-155.537l1.229-2.821 2.449-1.902c3.457-2.509 21.491-15.078 38.978-15.078 3.996 0 7.777 0.647 11.131 1.942 6.975 2.607 16.060 9.097 19.521 25.014 0.573 2.157 13.763 54.156-4.445 141.857-7.238 35.108-15.631 67.18-24.482 101.154l-0.14 0.516c-14.273 54.634-29.059 111.134-40.851 186.635-1.094 25.284 6.453 40.221 21.127 42.112 16.762 2.346 37.95-11.426 40.287-22.276l2.945-8.39c3.099-10.16 8.98-35.34 12.895-52.185 33.327-142.020 64.522-259.598 108.627-259.598 3.583 0 8.842 1.054 13.6 6.101 18.114 19.125 15.258 95.978 8.332 220.377-3.351 60.243-7.611 169.881-0.842 180.646l2.721 5.651c4.15 8.945 14.482 12.958 22.683 12.958 1.194 0 2.326-0.083 3.454-0.209 13.978-1.504 29.348-12.557 31.565-22.737 1.753-7.8 4.019-45.351 6.685-88.795l0.086-1.461c15.058-248.51 25.034-309.186 50.662-309.186 29.102 0 43.335 57.837 71.42 231.582l0.137 0.733c6.88 42.561 17.232 106.571 21.861 115.972 15.035 7.553 28.718 9.401 36.661 5.044 10.077-5.571 13.388-20.529 14.35-31.96 0.040-3.102-3.076-28.036-6.058-52.148-27.231-218.759-31.141-293.799-16.115-308.842 3.999-3.973 9.624-5.686 14.665-4.508 15.347 3.202 25.484 26.309 52.735 96.884 20.612 53.24 46.196 119.48 72.751 151.75 0.212 0.249 1.489 0.899 4.251 0.899 3.257 0 6.98-0.899 10.518-2.509 6.617-3.088 13.233-9.086 11.861-16.716zM522.754 959.258c-57.015 6.817-108.945-34.048-115.765-91.063-6.064-50.839 25.799-97.542 73.164-111.907-1.504 7.401-1.994 14.617-2.077 22.035-33.794 14.11-55.697 49.364-51.149 87.494 5.508 46.033 47.442 79.007 93.452 73.508 46.041-5.505 79.016-47.419 73.528-93.449-2.979-24.825-16.596-45.724-35.681-58.951 0.61-1.676 1.197-3.343 1.59-5.121 1.197-5.402 1.862-10.821 2.117-16.247 27.661 15.797 47.835 43.933 51.893 77.927 6.806 57.023-34.031 108.954-91.072 115.774z" />
+<glyph unicode="&#xe958;" glyph-name="finger4" d="M913.759 724.495c-6.916 3.217-14.278 4.925-21.124 4.925-9.938 0-18.226-3.479-23.413-9.749-30.605-37.268-58.645-109.757-81.197-168.015-10.385-26.922-24.332-62.964-33.75-79.888-5.144 49.577 17.103 228.361 25.656 297.194l0.155 1.12c5.938 47.827 6.888 56.213 6.584 59.936-2.322 26.645-11.612 44.671-27.677 53.556-16.217 9.022-38.267 7.083-62.724-5.485-12.282-6.334-17.252-30.633-35.126-141.169l-0.082-0.49c-9.831-60.718-32.477-200.562-49.876-222.886-15.478 34.045-26.916 222.030-31.853 303.403-3.436 56.998-5.479 89.707-7.686 99.721-4.654 20.938-29.123 40.203-54.518 42.93-21.118 2.526-39.274-7.083-48.874-25.3-16.75-16.254-15.277-74.196-7.652-211.697 3.631-65.427 11.125-200.587-0.52-214.896-21.005 3.802-51.459 90.273-90.514 257.080-10.958 46.713-14.4 60.77-18.318 67.104-7.126 21.578-35.144 39.773-61.394 39.773-2.249 0-4.438-0.146-6.602-0.408-13.874-1.759-45.961-12.224-43.368-71.070 12.744-82.21 28.651-143.001 44.020-202.042l0.314-1.172c9.226-35.336 17.937-68.753 25.62-105.675 18.077-87.181 5.019-139.595 4.876-140.201-1.187-5.406-3.105-8.614-5.707-9.603-0.956-0.332-2.118-0.542-3.43-0.542-7.673 0-18.756 5.875-24.436 9.573-11.67 26.822-70.102 154.747-129.684 176.105l-2.146 0.797-2.228-0.055c-22.442-0.569-39.39-7.896-50.451-21.757-17.478-21.934-12.957-51.745-11.786-57.738l0.752-2.17c0.438-0.937 42.93-93.567 47.581-135.62 4.021-36.063 34.973-76.978 59.847-109.854l1.026-1.351c8.124-10.751 15.125-20.062 20.561-28.584 72.747-87.738 192.064-165.598 193.041-166.222 14.686-12.574 22.515-24.25 22.749-33.908 0.152-6.292-3.348-9.792-3.452-9.917l-2.892-2.645 0.247-0.283h-1.184v-21.331h346.744v7.186l17.773 59.954c55.842 178.525 57.683 333.93 57.592 334.983 0.594 5.686 16.552 59.914 29.406 103.715l0.32 1.114c25.583 87.293 57.467 195.884 65.028 237.542 3.217 17.876-7.062 35.144-26.228 44.010zM916.185 684.813c-7.354-40.498-40.54-153.554-64.748-236.117-20.981-71.459-29.595-101.331-30.313-109.352 0-1.501-0.645-150.245-56.624-329.127l-15.676-52.874h-296.351c1.205 3.622 2.079 7.798 2.036 12.699-0.064 17.124-10.933 35.062-32.52 53.437-1.208 0.77-119.561 78.737-187.87 160.941-5.458 8.717-13.791 19.751-21.855 30.374-21.858 28.937-51.827 68.601-55.081 97.974-4.876 43.831-44.001 130.664-48.978 141.555-0.63 4.404-2.666 23.806 7.339 36.285 6.036 7.552 16.062 11.776 29.768 12.525 53.373-22.25 114.353-163.845 114.952-165.282l1.312-3.001 2.599-2.021c3.674-2.663 22.838-16.020 41.42-16.020 4.246 0 8.264 0.688 11.828 2.064 7.412 2.77 17.067 9.667 20.744 26.582 0.609 2.292 14.625 57.549-4.724 150.744-7.689 37.305-16.61 71.389-26.015 107.492l-0.152 0.548c-15.164 58.058-30.876 118.097-43.408 198.328-1.163 26.871 6.858 42.744 22.451 44.75 17.812 2.496 40.33-12.142 42.814-23.672l3.126-8.915c3.296-10.796 9.545-37.558 13.706-55.458 35.412-150.918 68.562-275.863 115.43-275.863 3.805 0 9.396 1.12 14.452 6.483 19.255 20.323 16.214 101.992 8.854 234.181-3.561 64.020-8.087 180.528-0.895 191.964l2.892 6.005c4.417 9.506 15.389 13.77 24.101 13.77 1.272 0 2.475-0.088 3.674-0.225 14.863-1.598 31.184-13.344 33.549-24.162 1.854-8.285 4.258-48.193 7.104-94.358l0.082-1.552c15.998-264.084 26.603-328.561 53.833-328.561 30.937 0 46.062 61.461 75.894 246.092l0.146 0.782c7.323 45.228 18.315 113.248 23.23 123.238 15.98 8.027 30.52 9.99 38.958 5.357 10.708-5.92 14.23-21.815 15.249-33.963 0.043-3.296-3.269-29.793-6.435-55.416-28.937-232.465-33.092-312.212-17.124-328.195 4.249-4.219 10.227-6.039 15.581-4.791 16.312 3.406 27.081 27.954 56.039 102.957 21.906 56.575 49.094 126.966 77.31 161.258 0.228 0.265 1.586 0.959 4.529 0.959 3.449 0 7.409-0.959 11.168-2.666 7.043-3.269 14.053-9.646 12.595-17.755zM747.836 947.338c-59.893 11.612-118.069-27.671-129.724-87.573-10.352-53.41 19.791-105.367 68.893-124.251-1.041 7.953-0.998 15.645-0.499 23.495-34.748 17.578-55.209 56.627-47.459 96.68 9.408 48.375 56.396 80.076 104.75 70.686 48.351-9.375 80.061-56.347 70.665-104.722-5.062-26.058-21.115-47.167-42.355-59.713 0.499-1.823 1.001-3.634 1.294-5.54 0.852-5.829 1.114-11.63 0.977-17.401 30.542 14.604 54.082 42.869 61.019 78.582 11.624 59.92-27.647 118.118-87.561 129.757z" />
+<glyph unicode="&#xe959;" glyph-name="finger5" d="M882.684 724.498c-6.915 3.217-14.278 4.925-21.124 4.925-9.938 0-18.226-3.479-23.413-9.749-30.605-37.268-58.647-109.755-81.196-168.013-10.385-26.922-24.332-62.963-33.749-79.893-5.144 49.577 17.103 228.365 25.656 297.197l0.155 1.12c5.938 47.827 6.888 56.212 6.584 59.935-2.322 26.645-11.612 44.67-27.677 53.555-16.217 9.022-38.269 7.080-62.726-5.485-12.279-6.337-17.249-30.632-35.122-141.167l-0.082-0.493c-9.831-60.711-32.48-200.557-49.875-222.883-15.478 34.051-26.916 222.031-31.853 303.406-3.436 56.998-5.479 89.7-7.686 99.72-4.657 20.938-29.123 40.196-54.52 42.929-21.118 2.526-39.274-7.083-48.874-25.3-16.75-16.254-15.277-74.195-7.652-211.694 3.628-65.426 11.125-200.584-0.52-214.893-21.002 3.796-51.455 90.266-90.513 257.077-10.958 46.707-14.4 60.769-18.317 67.103-7.125 21.577-35.143 39.773-61.393 39.773-2.249 0-4.438-0.152-6.602-0.408-13.877-1.759-45.964-12.224-43.371-71.069 12.747-82.215 28.651-142.999 44.019-202.039l0.314-1.172c9.223-35.335 17.937-68.753 25.619-105.674 18.077-87.18 5.019-139.593 4.876-140.205-1.187-5.397-3.105-8.605-5.707-9.594-0.959-0.332-2.118-0.542-3.43-0.542-7.673 0-18.756 5.874-24.438 9.573-11.67 26.813-70.101 154.745-129.68 176.097l-2.146 0.804-2.228-0.055c-22.442-0.569-39.389-7.896-50.45-21.757-17.477-21.933-12.957-51.744-11.785-57.737l0.749-2.17c0.438-0.937 42.929-93.565 47.583-135.618 4.021-36.063 34.973-76.977 59.847-109.853l1.026-1.351c8.124-10.751 15.124-20.061 20.561-28.584 72.746-87.737 192.059-165.596 193.039-166.22 14.686-12.574 22.515-24.25 22.749-33.908 0.152-6.291-3.348-9.792-3.452-9.917l-2.892-2.645 0.244-0.292h-1.181v-21.334h346.734v7.199l17.77 59.944c55.844 178.532 57.686 333.935 57.594 334.988 0.59 5.686 16.552 59.914 29.403 103.713l0.323 1.114c25.583 87.292 57.466 195.882 65.027 237.539 3.229 17.858-7.049 35.137-26.216 44.004zM885.11 684.816c-7.354-40.497-40.537-153.552-64.744-236.114-20.981-71.459-29.595-101.33-30.313-109.35 0-1.501-0.645-150.243-56.623-329.135l-15.675-52.873h-296.347c1.205 3.634 2.079 7.81 2.036 12.711-0.064 17.124-10.93 35.061-32.52 53.436-1.208 0.77-119.559 78.724-187.868 160.93-5.457 8.726-13.791 19.76-21.854 30.383-21.86 28.937-51.826 68.6-55.083 97.973-4.876 43.83-43.998 130.663-48.977 141.554-0.63 4.404-2.666 23.805 7.339 36.285 6.036 7.552 16.062 11.776 29.771 12.519 53.372-22.25 114.348-163.837 114.948-165.274l1.312-3.001 2.599-2.021c3.671-2.663 22.837-16.019 41.42-16.019 4.246 0 8.264 0.688 11.828 2.064 7.412 2.77 17.066 9.667 20.743 26.581 0.609 2.292 14.625 57.549-4.724 150.737-7.686 37.311-16.61 71.395-26.015 107.497l-0.149 0.548c-15.167 58.054-30.879 118.092-43.41 198.326-1.16 26.87 6.858 42.738 22.451 44.743 17.812 2.499 40.333-12.136 42.817-23.665l3.126-8.915c3.296-10.796 9.545-37.557 13.706-55.457 35.411-150.916 68.558-275.86 115.426-275.86 3.808 0 9.396 1.12 14.455 6.483 19.255 20.317 16.214 101.991 8.854 234.178-3.561 64.020-8.087 180.526-0.895 191.961l2.889 6.005c4.417 9.5 15.392 13.77 24.104 13.77 1.269 0 2.475-0.088 3.674-0.225 14.857-1.598 31.186-13.344 33.545-24.161 1.854-8.285 4.264-48.192 7.11-94.357l0.082-1.558c15.998-264.074 26.603-328.551 53.832-328.551 30.937 0 46.061 61.457 75.893 246.089l0.146 0.782c7.323 45.221 18.314 113.24 23.23 123.236 15.977 8.026 30.517 9.984 38.957 5.357 10.708-5.92 14.23-21.815 15.249-33.962 0.043-3.296-3.269-29.795-6.435-55.415-28.94-232.462-33.095-312.212-17.127-328.2 4.249-4.21 10.23-6.030 15.584-4.782 16.309 3.406 27.080 27.948 56.039 102.955 21.903 56.575 49.093 126.965 77.309 161.256 0.228 0.265 1.583 0.959 4.529 0.959 3.449 0 7.409-0.959 11.168-2.666 7.040-3.281 14.047-9.646 12.589-17.754zM914.902 777.057c-53.269 29.728-120.807 10.571-150.578-42.707-26.49-47.51-14.053-106.279 26.666-139.56 1.531 7.892 3.936 15.188 6.885 22.496-27.519 27.54-34.802 71.017-14.896 106.663 24.021 43.018 78.538 58.462 121.559 34.449 42.987-24 58.468-78.511 34.446-121.553-12.939-23.175-34.793-38.218-58.876-43.508-0.082-1.887-0.195-3.771-0.52-5.661-1.011-5.792-2.542-11.381-4.48-16.832 33.573 4.353 64.741 23.842 82.489 55.628 29.759 53.287 10.617 120.835-42.695 150.584z" />
+<glyph unicode="&#xe95a;" glyph-name="fingerprint-check" d="M146.534 672.217c6.854-1.498 13.212-1.402 32.776 13.622 8.665 6.661 21.497 17.898 33.366 33.572l5.182 6.877c44.38 59.027 148.287 197.224 298.353 189.725 123.76-9.033 211.48-102.489 253.695-270.301 1.434-5.704 2.317-9.203 3.264-11.888 6.451-27.443 17.257-61.634 32.85-72.883 3.87-2.8 8.34-4.134 12.784-4.134 6.774 0 13.444 3.155 17.721 9.068 6.825 9.442 5.008 22.509-3.948 29.744-4.302 5.578-12.426 28.941-17.25 49.823-0.277 1.241-0.683 2.456-1.167 3.612-0.4 1.428-1.192 4.531-1.898 7.322-6.693 26.592-24.462 97.249-67.557 163.7-55.646 85.799-131.53 132.742-225.592 139.525-0.161 0.016-0.303 0.016-0.464 0.029-173.364 8.836-287.151-142.483-335.727-207.101l-5.117-6.78c-13.299-17.585-28.999-28.529-34.407-31.7-1.853-0.712-3.612-1.692-5.249-2.952-6.799-5.162-10.119-13.934-8.292-22.255 1.84-8.292 8.369-14.795 16.676-16.625zM693.79 588.429c16.499 41.193 16.896 83.756 1.105 116.764-14.095 29.438-40.362 50.783-75.961 61.679-52.25 15.99-115.595-13.029-173.606-79.512-0.744-0.809-83.35-87.694-170.1-140.804-0.645-0.387-64.138-38.486-130.441-56.545-11.646-3.171-18.533-15.175-15.346-26.821 3.181-11.646 15.175-18.517 26.821-15.339 72.145 19.648 138.768 59.613 141.687 61.369 94.091 57.615 179.423 148.432 180.151 149.27 35.238 40.355 87.359 79.058 128.040 66.603 23.921-7.328 40.539-20.373 49.33-38.77 10.531-22.013 9.706-51.763-2.24-81.655-22.287-55.63-91.597-122.807-195.197-189.152-51.96-33.305-182.793-114.989-275.186-154.487-11.095-4.744-16.238-17.579-11.498-28.684 3.535-8.282 11.598-13.254 20.086-13.254 2.868 0 5.784 0.564 8.588 1.766 95.409 40.79 228.698 123.976 281.567 157.838 78.694 50.397 179.358 127.679 212.199 209.734zM341.889 751.546c-9.909-10.928-18.813-22.651-28.394-33.856-12.545-14.679-26.289-28.387-40.61-41.316-14.733-13.303-26.637-22.822-44.019-32.795-18.439-10.583-37.207-21.275-56.304-30.569-6.574-3.203-12.22-5.282-19.603-7.512-11.408-3.419-18.465-15.184-15.268-26.876 3.103-11.272 15.478-18.687 26.885-15.268 22.348 6.722 42.582 18.217 62.755 29.676 17.050 9.693 33.965 18.41 49.63 30.321 30.498 23.208 56.768 50.31 80.924 79.954 9.787 12.004 20.247 23.444 31.165 34.42 5.975 6 12.133 11.785 18.439 17.431 3.264 2.936 6.593 5.801 9.974 8.636 1.692 1.434 3.442 2.845 5.162 4.257 0.464 0.374 3.838 3.039 4.721 3.738 15.223 11.669 31.423 22.023 48.479 30.785 16.1 8.275 32.283 14.082 51.902 18.159 6.484 1.357 7.918 1.505 12.771 2.001 11.843 1.231 21.868 9.010 21.868 21.852 0 10.982-9.983 23.083-21.868 21.845-79-8.153-146.531-57.525-198.61-114.882zM171.843 333.171c47.487 16.29 291.202 107.303 427.691 298.607 7.003 9.825 4.721 23.47-5.095 30.472-9.816 7.009-23.466 4.731-30.482-5.095-128.739-180.444-361.037-267.114-406.303-282.649-0.97-0.332-1.566-0.551-1.759-0.638-11.292-4.267-16.983-16.883-12.703-28.178 3.306-8.733 11.617-14.115 20.45-14.115 2.472 0 4.979 0.429 7.454 1.321l0.748 0.274zM456.713 240.968c5.066 23.444 13.448 45.644 24.707 66.090-26.27-14.691-60-36.624-102.45-64.605-54.544-35.97-116.394-76.721-143.279-83.966-11.662-3.132-18.578-15.13-15.433-26.779 2.639-9.758 11.446-16.187 21.078-16.187 1.898 0 3.793 0.242 5.691 0.761 33.724 9.075 93.118 48.225 155.995 89.666 17.186 11.34 35.802 23.592 53.69 35.019zM452.985 159.523c-29.686-18.968-68.108-46.272-116.545-81.639-11.662-8.504-21.723-15.858-28.716-20.798-9.861-6.957-12.191-20.601-5.249-30.446 4.279-6.033 11.034-9.242 17.866-9.242 4.373 0 8.772 1.289 12.587 4.002 7.26 5.127 17.472 12.571 29.273 21.185 21.82 15.922 64.353 46.978 100.774 71.237-4.74 14.691-8.092 29.976-9.99 45.702zM493.943 50.712c-38.135-12.99-91.245-66.355-102.182-77.669-8.404-8.669-8.188-22.496 0.483-30.891 4.257-4.112 9.722-6.152 15.197-6.152 5.71 0 11.43 2.217 15.71 6.648 29.27 30.227 70.837 64.566 86.969 67.357 7.405 1.27 16.612-1.853 27.056-7.421-16.435 14.086-30.994 30.24-43.233 48.128zM830.182 438.444c-18.217 7.699-37.252 15.781-52.578 28.545-16.873 14.034-24.713 32.48-28.232 53.761-4.589 27.759-46.691 15.945-42.147-11.617 6.207-37.584 26.663-63.686 54.267-83.186 22.496-6.142 43.713-15.381 63.171-27.295 5.314 1.115 10.080 4.234 13.396 9.88 5.404 9.287 3.11 25.277-7.876 29.911zM639.774 442.204c-7.94-2.175-15.152-10.138-16.241-18.681 12.958 4.047 26.421 7.012 40.207 8.875-5.195 7.885-13.686 12.639-23.966 9.806zM683.6 412.815c-116.761 0-211.735-94.987-211.735-211.738s94.974-211.735 211.735-211.735c116.745 0 211.738 94.983 211.738 211.735s-94.996 211.738-211.738 211.738zM683.6 34.512c-91.838 0-166.565 74.723-166.565 166.565s74.727 166.565 166.565 166.565c91.841 0 166.565-74.723 166.565-166.565 0-91.838-74.723-166.565-166.565-166.565zM658.126 161.73l-57.158 52.537-30.569-33.272 91.874-84.394 136.502 161.825-34.507 29.135z" />
+<glyph unicode="&#xe95b;" glyph-name="fingerprint-crosshair" d="M199.95 704.952c-6.121-4.648-9.109-12.544-7.465-20.035 1.668-7.496 7.525-13.348 15.036-14.996 6.171-1.355 11.895-1.262 29.487 12.26 7.827 5.997 19.374 16.113 30.038 30.221l4.665 6.194c39.954 53.134 133.497 177.553 268.593 170.803 111.411-8.132 190.411-92.273 228.387-243.342 1.288-5.132 2.086-8.283 2.959-10.702 5.799-24.706 15.547-55.487 29.565-65.614 3.493-2.521 7.505-3.722 11.497-3.722 6.124 0 12.132 2.84 15.965 8.167 6.153 8.497 4.508 20.261-3.536 26.774-3.893 5.022-11.198 26.055-15.527 44.854-0.261 1.117-0.618 2.205-1.073 3.252-0.357 1.279-1.062 4.079-1.688 6.588-6.034 23.946-22.019 87.555-60.807 147.373-50.128 77.245-118.432 119.502-203.121 125.615-0.139 0.009-0.267 0.009-0.418 0.023-156.068 7.978-258.503-128.249-302.228-186.422l-4.607-6.11c-11.973-15.826-26.107-25.681-30.995-28.532-1.648-0.641-3.229-1.529-4.726-2.649zM700.184 594.478c14.833 37.088 15.19 75.406 0.975 105.119-12.689 26.504-36.336 45.719-68.365 55.527-47.039 14.395-104.066-11.729-156.312-71.582-0.67-0.728-75.037-78.951-153.115-126.761-0.577-0.348-57.761-34.648-117.448-50.906-10.485-2.855-16.664-13.661-13.795-24.146 2.834-10.479 13.661-16.676 24.143-13.803 64.93 17.682 124.91 53.656 127.535 55.243 84.706 51.869 161.554 133.628 162.204 134.376 31.709 36.336 78.646 71.176 115.252 59.96 21.535-6.597 36.496-18.338 44.41-34.897 9.498-19.817 8.758-46.6-2.016-73.511-20.044-50.082-82.441-110.558-175.729-170.286-46.786-29.971-164.554-103.511-247.72-139.073-10.009-4.27-14.627-15.826-10.371-25.811 3.194-7.465 10.458-11.932 18.083-11.932 2.582 0 5.207 0.496 7.729 1.578 85.893 36.722 205.888 111.62 253.504 142.099 70.828 45.359 161.473 114.948 191.035 188.807zM383.381 741.341c-8.941-9.843-16.937-20.392-25.579-30.479-11.294-13.215-23.65-25.559-36.56-37.195-13.244-11.979-23.983-20.551-39.629-29.527-16.58-9.524-33.496-19.153-50.688-27.52-5.918-2.89-10.981-4.755-17.627-6.76-10.27-3.078-16.644-13.67-13.745-24.195 2.773-10.148 13.914-16.829 24.184-13.745 20.119 6.052 38.358 16.397 56.516 26.716 15.329 8.721 30.557 16.574 44.663 27.296 27.476 20.894 51.126 45.292 72.873 71.979 8.79 10.807 18.207 21.106 28.036 30.984 5.376 5.402 10.94 10.604 16.6 15.686 2.959 2.646 5.962 5.228 8.982 7.778 1.543 1.291 3.095 2.562 4.665 3.832 0.418 0.339 3.476 2.744 4.25 3.377 13.705 10.493 28.289 19.815 43.641 27.703 14.497 7.45 29.043 12.678 46.708 16.345 5.857 1.221 7.128 1.352 11.517 1.802 10.662 1.108 19.675 8.111 19.675 19.667 0 9.896-8.996 20.781-19.675 19.672-71.126-7.331-131.942-51.791-178.807-103.416zM230.295 364.682c42.73 14.662 262.158 96.598 385.006 268.825 6.313 8.845 4.268 21.126-4.59 27.427-8.834 6.313-21.126 4.265-27.41-4.581-115.899-162.447-325.048-240.473-365.783-254.47-0.879-0.29-1.395-0.476-1.59-0.554-10.165-3.853-15.269-15.21-11.436-25.376 2.979-7.862 10.458-12.71 18.413-12.71 2.228 0 4.503 0.4 6.71 1.192l0.679 0.247zM765.57 247.579c-27.259 9.086-60.639 32.843-92.888 55.817-46.74 33.279-87.068 62.029-119.949 56.36-24.703-4.27-67.854-31.84-135.981-76.752-49.124-32.385-104.785-69.072-129.001-75.594-10.479-2.82-16.705-13.621-13.876-24.105 2.359-8.787 10.305-14.575 18.979-14.575 1.688 0 3.415 0.218 5.123 0.685 30.34 8.17 83.813 43.415 140.428 80.723 45.727 30.145 102.641 67.66 121.017 70.828 16.71 2.858 57.584-26.229 90.436-49.638 34.619-24.642 70.427-50.148 103.262-61.1 10.316-3.447 21.445 2.144 24.88 12.431 3.435 10.345-2.144 21.486-12.431 24.92zM716.309 151.218c-15.846 5.738-41.619 21.654-66.557 37.050-52.655 32.533-86.116 52.281-110.14 48.129-24.334-4.198-75.4-38.927-161.162-101.521-10.499-7.647-19.559-14.279-25.831-18.727-8.877-6.252-11.001-18.547-4.726-27.398 3.832-5.442 9.913-8.341 16.084-8.341 3.911 0 7.876 1.172 11.338 3.615 6.533 4.616 15.707 11.317 26.33 19.081 34.129 24.909 124.785 91.098 144.452 94.495 12.269 0.833 56.54-26.47 82.98-42.791 27.851-17.215 54.158-33.476 73.865-40.584 10.215-3.702 21.483 1.587 25.187 11.813 3.687 10.206-1.593 21.483-11.819 25.179zM649.871 53.416c-11.042 7.215-21.21 14.465-31.036 21.474-32.266 23.032-60.143 42.939-90.703 37.627-34.436-5.939-89.235-61.057-99.876-72.037-7.546-7.804-7.351-20.253 0.458-27.81 3.812-3.702 8.753-5.55 13.682-5.55 5.147 0 10.27 2.005 14.143 5.997 26.33 27.212 63.755 58.129 78.289 60.639 14.355 2.463 36.058-12.985 61.187-30.894 9.658-6.91 20.618-14.732 32.365-22.399 9.104-5.936 21.314-3.374 27.233 5.721 5.915 9.104 3.351 21.294-5.741 27.233zM822.974 459.47c-16.4 6.925-33.537 14.201-47.334 25.692-15.21 12.631-22.28 29.237-25.437 48.399-4.111 24.99-42.014 14.358-37.923-10.458 8.399-51.036 45.965-78.649 90.839-97.613 9.875-4.169 20.987-3.078 26.902 7.061 4.909 8.346 2.843 22.739-7.047 26.919zM784.792 356.828c-14.775 4.546-25.971 10.325-41.619 19.556-28.634 16.916-54.744 41.439-67.43 72.734-4.033 9.922-12.948 16.838-24.207 13.737-9.431-2.594-17.769-14.242-13.74-24.201 23.45-57.802 77.262-101.492 136.532-119.752 24.323-7.494 34.628 30.476 10.464 37.926zM30.801 929.019h191.145v30.499h-221.644v-221.641h30.499zM802.344 959.518v-30.499h191.157v-191.142h30.496v221.641zM30.499 158.129h-30.499v-221.647h221.633v30.499h-191.133zM993.182-33.019h-191.154v-30.499h221.653v221.647h-30.499z" />
+<glyph unicode="&#xe95c;" glyph-name="fingerprint-remove" d="M146.555 672.221c6.851-1.498 13.212-1.402 32.747 13.621 8.694 6.664 21.526 17.898 33.369 33.572l5.185 6.877c44.38 59.026 148.279 197.221 298.346 189.726 123.772-9.036 211.5-102.491 253.711-270.294 1.434-5.704 2.282-9.203 3.264-11.894 6.429-27.439 17.256-61.633 32.85-72.883 3.87-2.797 8.34-4.131 12.784-4.131 6.774 0 13.444 3.148 17.72 9.065 6.825 9.442 4.985 22.509-3.948 29.747-4.325 5.575-12.426 28.941-17.25 49.823-0.277 1.241-0.683 2.449-1.167 3.612-0.419 1.421-1.192 4.528-1.898 7.318-6.693 26.592-24.462 97.248-67.556 163.698-55.646 85.801-131.564 132.74-225.605 139.53-0.139 0.010-0.287 0.010-0.464 0.023-173.34 8.842-287.148-142.481-335.713-207.092l-5.117-6.787c-13.306-17.585-28.999-28.525-34.429-31.699-1.83-0.712-3.596-1.692-5.256-2.945-6.799-5.162-10.106-13.94-8.266-22.261 1.853-8.298 8.362-14.804 16.692-16.625zM693.797 588.421c16.499 41.196 16.895 83.755 1.083 116.763-14.073 29.444-40.342 50.783-75.937 61.684-52.249 15.99-115.587-13.035-173.62-79.511-0.722-0.815-83.327-87.699-170.075-140.809-0.644-0.38-64.143-38.479-130.458-56.538-11.623-3.174-18.51-15.178-15.329-26.821 3.187-11.652 15.178-18.523 26.821-15.332 72.148 19.634 138.753 59.6 141.666 61.362 94.112 57.598 179.446 148.414 180.168 149.249 35.222 40.361 87.358 79.060 128.038 66.602 23.92-7.328 40.516-20.376 49.307-38.769 10.55-22.006 9.729-51.762-2.236-81.654-22.267-55.623-91.576-122.805-195.172-189.149-51.969-33.291-182.804-114.974-275.186-154.466-11.089-4.756-16.248-17.591-11.52-28.683 3.548-8.291 11.623-13.267 20.115-13.267 2.845 0 5.778 0.577 8.581 1.766 95.391 40.79 228.695 123.988 281.566 157.849 78.664 50.393 179.35 127.677 212.19 209.725zM341.9 751.555c-9.903-10.934-18.813-22.657-28.409-33.855-12.548-14.685-26.266-28.39-40.587-41.322-14.74-13.299-26.637-22.822-44.038-32.792-18.416-10.583-37.207-21.278-56.303-30.568-6.551-3.21-12.197-5.288-19.586-7.512-11.404-3.425-18.481-15.191-15.268-26.875 3.11-11.272 15.484-18.694 26.891-15.268 22.348 6.716 42.585 18.213 62.748 29.676 17.034 9.687 33.971 18.404 49.629 30.32 30.504 23.202 56.77 50.303 80.923 79.946 9.771 12.010 20.247 23.443 31.171 34.426 5.949 5.994 12.126 11.778 18.416 17.424 3.287 2.936 6.616 5.807 9.999 8.639 1.692 1.434 3.438 2.845 5.162 4.257 0.435 0.367 3.835 3.036 4.718 3.738 15.197 11.662 31.403 22.016 48.479 30.778 16.103 8.282 32.26 14.082 51.875 18.165 6.506 1.35 7.918 1.498 12.793 1.995 11.843 1.231 21.868 9.010 21.868 21.852 0 10.989-9.983 23.083-21.868 21.852-79.002-8.163-146.564-57.534-198.614-114.874zM171.851 333.166c47.46 16.29 291.195 107.302 427.67 298.607 6.993 9.825 4.731 23.466-5.082 30.468-9.838 7.015-23.489 4.731-30.481-5.095-128.734-180.442-361.029-267.11-406.292-282.649-0.97-0.332-1.566-0.538-1.782-0.638-11.272-4.267-16.96-16.883-12.684-28.174 3.306-8.736 11.598-14.118 20.427-14.118 2.491 0 5.001 0.432 7.45 1.324l0.773 0.274zM456.72 240.965c5.050 23.443 13.454 45.643 24.707 66.090-26.263-14.688-59.999-36.623-102.445-64.601-54.566-35.96-116.392-76.72-143.29-83.955-11.646-3.145-18.555-15.139-15.416-26.785 2.623-9.758 11.453-16.186 21.085-16.186 1.875 0 3.793 0.242 5.691 0.757 33.701 9.074 93.097 48.227 155.983 89.668 17.179 11.356 35.779 23.608 53.686 35.012zM453.001 159.523c-29.692-18.971-68.129-46.271-116.563-81.641-11.64-8.501-21.726-15.845-28.693-20.798-9.861-6.957-12.197-20.601-5.249-30.446 4.257-6.020 11.011-9.242 17.862-9.242 4.366 0 8.752 1.289 12.59 4.006 7.26 5.127 17.453 12.568 29.273 21.181 21.819 15.922 64.353 46.98 100.77 71.239-4.74 14.691-8.095 29.975-9.99 45.701zM493.956 50.723c-38.154-12.999-91.241-66.354-102.21-77.678-8.378-8.665-8.163-22.496 0.506-30.887 4.234-4.115 9.725-6.155 15.2-6.155 5.713 0 11.43 2.217 15.71 6.648 29.27 30.23 70.836 64.569 86.961 67.359 7.386 1.266 16.589-1.853 27.046-7.425-16.412 14.082-30.971 30.249-43.213 48.137zM830.188 438.46c-18.217 7.689-37.252 15.777-52.578 28.535-16.873 14.037-24.726 32.479-28.232 53.767-4.589 27.755-46.69 15.938-42.147-11.623 6.206-37.577 26.663-63.686 54.266-83.185 22.464-6.142 43.713-15.381 63.17-27.294 5.295 1.115 10.057 4.234 13.364 9.88 5.436 9.277 3.142 25.267-7.843 29.921zM639.76 442.221c-7.918-2.185-15.152-10.144-16.244-18.69 12.97 4.047 26.411 7.012 40.2 8.875-5.188 7.872-13.654 12.651-23.956 9.816zM683.585 412.809c-116.74 0-211.729-94.982-211.729-211.732s94.989-211.735 211.729-211.735c116.763 0 211.735 94.985 211.735 211.735s-94.985 211.732-211.735 211.732zM683.585 34.511c-91.837 0-166.56 74.723-166.56 166.563s74.723 166.563 166.56 166.563c91.84 0 166.563-74.723 166.563-166.563s-74.735-166.563-166.563-166.563zM739.54 290.301l-53.883-57.144-53.857 57.144-35.334-26.685 58.945-62.538-58.945-62.529 35.334-26.698 53.857 57.147 53.883-57.147 35.334 26.698-58.955 62.529 58.955 62.538z" />
+<glyph unicode="&#xe95d;" glyph-name="rename" d="M292.64 960h438.752v-27.918h-37c-41.803 0-72.25-12.332-91.376-37-12.592-16.125-18.875-54.875-18.875-116.292v-487.75h90.1v-64h-90.1v-109.79c0-51.834 3.261-86.083 9.813-102.709 5.030-12.584 15.595-23.374 31.709-32.459 21.647-12.082 44.562-18.114 68.73-18.114h37v-27.968h-438.752v27.968h36.249c42.292 0 72.99 12.323 92.126 36.989 12.083 16.125 18.125 54.875 18.125 116.293v109.79h-93.157v64h93.157v487.75c0 51.835-3.282 86.085-9.813 102.667-5.042 12.584-15.365 23.418-30.97 32.5-22.155 12.084-45.302 18.125-69.469 18.125h-36.249z" />
+<glyph unicode="&#xe95e;" glyph-name="fingerprint-scanning" d="M309.333 835.448c-3.31-4.367-7.212-7.084-8.56-7.869-0.449-0.183-0.889-0.428-1.308-0.727-1.69-1.287-2.515-3.462-2.054-5.538 0.449-2.066 2.075-3.683 4.147-4.141 1.699-0.376 3.285-0.333 8.138 3.383 2.155 1.647 5.345 4.456 8.288 8.34l1.287 1.705c11.017 14.672 36.841 48.991 74.127 47.13 30.747-2.237 52.543-25.457 63.028-67.16 0.351-1.412 0.575-2.292 0.801-2.943 1.611-6.833 4.3-15.326 8.184-18.107 0.963-0.7 2.066-1.030 3.169-1.030 1.684 0 3.352 0.779 4.401 2.249 1.696 2.356 1.247 5.589-0.981 7.386-1.073 1.39-3.074 7.185-4.288 12.371-0.064 0.309-0.168 0.608-0.278 0.898-0.092 0.351-0.296 1.125-0.471 1.818-1.656 6.604-6.069 24.158-16.79 40.682-13.826 21.313-32.675 32.975-56.042 34.659-0.046 0-0.076 0-0.119 0.009-43.072 2.191-71.346-35.404-83.415-51.458l-1.265-1.659zM350.1 836.884c-2.463-2.708-4.679-5.62-7.053-8.407-3.126-3.649-6.525-7.059-10.091-10.268-3.649-3.301-6.616-5.666-10.935-8.147-4.581-2.625-9.251-5.284-13.994-7.591-1.644-0.795-3.035-1.32-4.874-1.867-2.839-0.859-4.596-3.78-3.793-6.684 0.758-2.802 3.832-4.639 6.674-3.789 5.559 1.672 10.577 4.532 15.592 7.377 4.23 2.411 8.435 4.575 12.325 7.53 7.582 5.773 14.104 12.499 20.1 19.855 2.433 2.977 5.036 5.825 7.744 8.554 1.476 1.501 3.007 2.919 4.581 4.33 0.816 0.727 1.641 1.442 2.475 2.139 0.419 0.355 0.847 0.709 1.287 1.073 0.11 0.089 0.911 0.706 1.146 0.911 3.793 2.903 7.817 5.486 12.068 7.671 4.006 2.044 8.022 3.487 12.896 4.508 1.617 0.339 1.971 0.361 3.178 0.501 2.934 0.299 5.434 2.237 5.434 5.434 0 2.72-2.463 5.727-5.434 5.428-19.611-2.038-36.401-14.299-49.328-28.556zM473.366 751.66c1.339 2.301 0.767 6.274-1.95 7.42-4.529 1.931-9.266 3.933-13.077 7.102-4.196 3.478-6.146 8.065-7.014 13.355-1.134 6.897-11.598 3.964-10.473-2.891 2.323-14.070 12.692-21.71 25.081-26.945 2.732-1.137 5.779-0.837 7.432 1.959zM785.586 295.125c2.53 29.032-4.434 53.609-20.665 73.082-23.972 28.623-60.754 37.556-76.453 40.141-9.996 25.066-25.246 41.59-45.388 49.117-7.888 2.943-16.463 4.456-25.478 4.456-15.121 0-28.76-4.168-37.919-7.86-12.102 21.942-28.259 35.578-48.026 40.557-5.458 1.381-11.207 2.087-17.102 2.087-18.856 0-36.098-7.090-47.833-13.471-4.071 27.156-9.413 91.703-13.346 139.187l-0.031 0.544c-4.089 49.639-6.876 82.149-9.147 103.719 4.373-2.637 8.963-4.905 13.786-6.384 6.714-2.066 9.562 8.407 2.891 10.464-4.083 1.256-7.176 2.86-11.485 5.397-2.396 1.418-4.67 3.074-6.839 4.874-1.867 14.501-3.493 21.527-5.443 24.956-1.497 5.131-4.22 10.861-7.839 16.524 3.45 4.508 6.363 9.125 8.257 13.847 4.089 10.229 4.199 20.812 0.266 29.011-3.499 7.325-10.036 12.618-18.877 15.317-12.967 3.976-28.715-3.227-43.13-19.748-0.083-0.095-4.538-4.722-11.274-10.925-2.964-1.87-5.904-4.367-8.697-7.655-6.671-5.62-14.394-11.576-22.297-16.405-0.162-0.101-15.934-9.575-32.406-14.052-2.9-0.795-4.605-3.78-3.811-6.671 0.788-2.891 3.768-4.609 6.671-3.802 17.915 4.874 34.472 14.81 35.199 15.247 1.565 0.953 3.074 2.014 4.596 3.035-2.075-6.097-3.9-13.162-5.333-21.395-16.063-8.514-29.332-13.477-34.121-15.103-0.235-0.083-0.385-0.15-0.44-0.171-2.802-1.064-4.22-4.19-3.148-6.992 0.828-2.164 2.891-3.502 5.079-3.502 0.623 0 1.238 0.11 1.849 0.324l0.193 0.070c4.303 1.479 15.121 5.461 28.745 12.2-0.226-1.91-0.458-3.741-0.642-5.751 0-3.933 0-7.808-0.009-11.711-8.795-4.838-17.606-9.361-25.362-12.664-2.76-1.17-4.037-4.373-2.87-7.133 0.889-2.051 2.891-3.288 5.003-3.288 0.706 0 1.433 0.141 2.127 0.44 6.509 2.781 13.764 6.47 21.078 10.366-0.428-201.161-6.017-348.392-7.283-379.273-18.944-8.618-36.239-28.155-38.158-30.371-60.934-67.306-32.055-116.765-30.802-118.804 46.586-81.557 142.818-242.1 143.707-243.573l1.886-3.12 0.92 0.556v-1.455h307.753l11.356-3.359 15.898 54.382c63.908 122.055 46.589 286.712 44.392 304.739zM415.735 830.308c5.956-1.818 10.082-5.061 12.264-9.627 2.625-5.47 2.43-12.848-0.544-20.295-1.125-2.793-2.787-5.715-4.914-8.737-9.984 11.943-23.571 21.948-37.556 23.229 8.716 9.605 21.041 18.4 30.75 15.43zM720.651-1.281l-10.867-36.608h-291.669c-20.457 34.179-98.814 165.344-139.178 235.96-0.889 1.537-21.267 38.259 28.253 92.953 5.29 6.173 21.909 22.957 35.16 26.45l7.869 2.103 0.339 8.126c0.089 1.265 7.658 166.261 7.582 410.656 2.992 32.859 11.781 53.698 22.856 54.364l0.513 0.021c13.761 0 31.911-21.805 34.622-34.448l1.583-7.457 0.935-0.147c3.365-18.923 8.413-80.142 12.521-129.552 13.407-162.352 15.023-162.835 25.622-166.013l5.455-1.586 4.486 3.438c2.402 1.788 24.024 17.453 47.836 17.453 4.074 0 8.022-0.483 11.671-1.4 15.748-3.955 28.589-16.833 38.182-38.222l5.049-11.292 10.678 6.21c0.712 0.376 18.083 9.871 37.443 9.871 6.369 0 12.307-1.002 17.694-3.010 15.311-5.721 26.93-19.849 34.585-41.99l2.362-6.849 7.194-0.648c0.422-0.043 44.45-4.511 68.379-33.195 12.466-14.923 17.694-34.261 15.54-57.582l-0.064-1.623 0.104-0.7c0.822-7.096 19.806-175.401-42.736-295.284zM463.381 591.729h85.062v85.050h-11.714v-73.333h-73.348zM319.686 603.446h-73.348v73.333h-11.692v-85.050h85.040zM246.338 948.292h73.348v11.708h-85.040v-85.037h11.692zM536.729 874.953h11.714v85.047h-85.062v-11.708h73.348z" />
+<glyph unicode="&#xe95f;" d="M312.281 806.136c1.723-0.372 3.32-0.35 8.219 3.421 2.188 1.669 5.409 4.499 8.385 8.432l1.288 1.723c11.154 14.82 37.239 49.532 74.934 47.63 31.074-2.258 53.106-25.733 63.697-67.875 0.369-1.428 0.595-2.308 0.827-2.986 1.625-6.884 4.334-15.472 8.242-18.308 0.986-0.703 2.095-1.033 3.211-1.033 1.707 0 3.389 0.789 4.445 2.273 1.72 2.372 1.262 5.647-0.979 7.466-1.094 1.415-3.116 7.262-4.337 12.515-0.086 0.312-0.175 0.607-0.299 0.913-0.095 0.343-0.299 1.138-0.477 1.828-1.669 6.68-6.137 24.423-16.947 41.103-13.981 21.548-33.036 33.335-56.657 35.052-0.032 0-0.076 0-0.127 0-43.519 2.226-72.097-35.777-84.291-51.999l-1.278-1.698c-3.345-4.413-7.275-7.17-8.645-7.965-0.458-0.178-0.89-0.436-1.307-0.734-1.714-1.294-2.55-3.498-2.095-5.593s2.099-3.707 4.194-4.165z" />
+<glyph unicode="&#xe960;" d="M449.977 814.4c-3.542 7.399-10.137 12.776-19.074 15.501-13.138 4.009-29.014-3.262-43.599-19.955-0.191-0.223-20.925-22.041-42.708-35.364-0.169-0.102-16.108-9.663-32.756-14.194-2.916-0.795-4.636-3.825-3.857-6.731 0.804-2.932 3.825-4.655 6.747-3.857 18.105 4.925 34.842 14.979 35.564 15.408 23.624 14.477 45.058 37.284 45.249 37.475 8.846 10.14 21.936 19.86 32.155 16.737 6.006-1.851 10.175-5.113 12.385-9.739 2.639-5.529 2.439-13.001-0.572-20.502-3.351-8.388-11.055-17.818-22.232-27.621 1.339-1.625 2.553-3.367 3.58-5.304 0.757-1.479 1.259-3.021 1.873-4.55 11.777 10.032 22.219 21.507 26.963 33.386 4.149 10.35 4.238 21.033 0.283 29.31z" />
+<glyph unicode="&#xe961;" d="M361.339 826.050c-2.502-2.741-4.731-5.685-7.138-8.493-3.157-3.688-6.601-7.145-10.197-10.388-3.701-3.339-6.696-5.723-11.065-8.219-4.614-2.665-9.335-5.348-14.14-7.676-1.637-0.804-3.049-1.326-4.912-1.882-2.862-0.858-4.645-3.825-3.825-6.753 0.76-2.833 3.879-4.696 6.728-3.835 5.609 1.682 10.703 4.572 15.768 7.453 4.27 2.442 8.525 4.626 12.448 7.612 7.666 5.828 14.257 12.645 20.327 20.086 2.458 3.014 5.087 5.876 7.815 8.639 1.507 1.501 3.052 2.96 4.626 4.378 0.827 0.734 1.669 1.456 2.518 2.172 0.423 0.359 0.858 0.712 1.294 1.065 0.121 0.092 0.967 0.76 1.192 0.951 3.809 2.925 7.879 5.51 12.165 7.72 4.048 2.083 8.098 3.529 13.024 4.56 1.637 0.343 1.997 0.366 3.208 0.502 2.986 0.299 5.498 2.261 5.498 5.478 0 2.763-2.518 5.806-5.498 5.485-19.806-2.051-36.775-14.451-49.837-28.855z" />
+<glyph unicode="&#xe962;" d="M403.949 771.316c7.965 7.361 15.545 15.51 22.060 24.658 1.765 2.474 1.192 5.892-1.272 7.666-2.458 1.774-5.892 1.183-7.65-1.285-7.447-10.445-16.305-19.542-25.621-27.551 4.305-0.671 8.55-1.784 12.483-3.488z" />
+<glyph unicode="&#xe963;" d="M470.737 754.604c-4.238 3.52-6.21 8.146-7.1 13.494-1.148 6.973-11.71 3.997-10.579-2.922 1.126-6.785 4.114-12.079 8.27-16.343h19.351c-3.517 1.558-6.992 3.316-9.943 5.771z" />
+<glyph unicode="&#xe964;" d="M363.963 749.51h-66.969v-3.583h64.47c0.725 1.256 1.552 2.467 2.499 3.583z" />
+<glyph unicode="&#xe965;" d="M427.307 749.51c1.17-1.052 2.118-2.35 3.116-3.583h83.032v3.583h-86.148z" />
+<glyph unicode="&#xe966;" d="M523.292 751.246h19.847v-7.075h-19.847v7.075z" />
+<glyph unicode="&#xe967;" d="M264.769 751.246h19.86v-7.075h-19.86v7.075z" />
+<glyph unicode="&#xe968;" d="M353.874 720.296c-11.122-6.318-22.741-12.493-32.645-16.725-2.785-1.18-4.079-4.423-2.9-7.208 0.893-2.073 2.932-3.32 5.049-3.32 0.712 0 1.456 0.14 2.149 0.445 8.315 3.542 17.764 8.401 27.122 13.558 0.223 4.458 0.658 8.858 1.224 13.249z" />
+<glyph unicode="&#xe969;" d="M360.093 745.927h-13.214c-15.119-7.78-27.386-12.296-31.99-13.863-0.235-0.079-0.388-0.146-0.436-0.156-2.839-1.081-4.264-4.242-3.192-7.075 0.833-2.197 2.925-3.548 5.135-3.548 0.63 0 1.256 0.105 1.87 0.327l0.2 0.076c5.393 1.851 20.957 7.622 39.497 17.787 0.661 2.156 1.332 4.308 2.13 6.451z" />
+<glyph unicode="&#xe96a;" d="M467.783 689.015c-7.612 2.541-16.915 9.173-25.917 15.567-2.286 1.637-4.455 3.135-6.649 4.658-0.944-3.52-2.687-6.849-5.358-9.612 1.924-1.326 3.831-2.677 5.657-3.968 9.647-6.877 19.631-13.981 28.791-17.033 2.884-0.976 5.984 0.598 6.941 3.469 0.957 2.868-0.604 5.974-3.466 6.919z" />
+<glyph unicode="&#xe96b;" d="M485.932 745.927h-20.702c3.831-2.922 8.27-5.284 13.014-7.281 2.763-1.161 5.847-0.849 7.507 1.987 0.874 1.469 0.948 3.618 0.181 5.294z" />
+<glyph unicode="&#xe96c;" d="M473.131 719.495c-4.111 1.256-7.243 2.871-11.599 5.447-7.987 4.722-15.278 11.567-18.811 20.286-0.099 0.238-0.223 0.458-0.331 0.696h-10.009c-0.544-1.141-0.715-2.41-0.235-3.602 6.556-16.127 21.561-28.314 38.085-33.405 6.779-2.092 9.641 8.505 2.9 10.579z" />
+<glyph unicode="&#xe96d;" d="M475.417 576.839h88.485v88.491h-12.187v-76.298h-76.298z" />
+<glyph unicode="&#xe96e;" d="M325.89 589.033h-76.295v76.298h-12.191v-88.491h88.485z" />
+<glyph unicode="&#xe96f;" d="M249.595 947.819h76.295v12.181h-88.485v-88.472h12.191z" />
+<glyph unicode="&#xe970;" d="M551.715 871.515h12.187v88.485h-88.485v-12.181h76.298z" />
+<glyph unicode="&#xe971;" d="M782.916 287.505c2.477 28.419-4.331 52.47-20.216 71.531-23.45 28.019-59.455 36.759-74.819 39.281-9.793 24.537-24.721 40.696-44.429 48.072-7.726 2.881-16.101 4.362-24.941 4.362-14.785 0-28.127-4.079-37.103-7.695-11.854 21.485-27.65 34.836-47.017 39.707-5.335 1.348-10.963 2.035-16.725 2.035-18.458 0-35.344-6.951-46.823-13.189-3.987 26.581-9.214 89.757-13.068 136.249l-0.022 0.525c-8.582 104.033-11.3 131.88-15.914 139.979-5.86 20.168-31.055 49.716-56.171 47.929-16.588-1.011-37.513-14.661-42.848-73.97 0-208.862-5.866-363.288-7.167-394.712-18.54-8.423-35.478-27.551-37.351-29.729-59.656-65.862-31.376-114.272-30.152-116.275 45.592-79.802 139.791-236.966 140.65-238.403l1.838-3.037 0.916 0.556v-1.424h301.204l11.122-3.297 15.567 53.23c62.552 119.454 45.599 280.612 43.468 298.275zM287.023 192.489c-0.871 1.523-20.801 37.453 27.653 90.987 5.173 6.051 21.443 22.47 34.413 25.876l7.698 2.089 0.331 7.946c0.092 1.24 7.497 162.732 7.431 401.917 2.922 32.181 11.513 52.562 22.378 53.22l0.49 0.010c13.469 0 31.24-21.335 33.895-33.716l1.558-7.288 0.903-0.159c3.304-18.515 8.248-78.425 12.257-126.787 13.125-158.907 14.706-159.39 25.081-162.481l5.339-1.568 4.401 3.374c2.34 1.742 23.51 17.090 46.823 17.090 3.975 0 7.844-0.483 11.389-1.393 15.434-3.87 27.99-16.467 37.389-37.392l4.919-11.046 10.458 6.070c0.706 0.382 17.691 9.663 36.658 9.663 6.222 0 12.044-0.979 17.322-2.97 14.973-5.596 26.34-19.411 33.84-41.090l2.327-6.68 7.030-0.655c0.413-0.032 43.491-4.416 66.918-32.489 12.21-14.582 17.332-33.538 15.211-56.368l-0.073-1.587 0.118-0.687c0.817-6.954 19.38-171.683-41.824-289.013l-10.623-35.812h-285.493c-20.012 33.468-96.717 161.845-136.214 230.938z" />
+<glyph unicode="&#xe972;" glyph-name="fingerprint-search" d="M69.645 672.197c6.871-1.506 13.222-1.395 32.783 13.627 8.667 6.664 21.495 17.903 33.359 33.566l5.184 6.894c44.378 59.021 148.266 197.203 298.338 189.71 123.749-9.029 211.491-102.481 253.678-270.282 1.431-5.697 2.306-9.21 3.276-11.887 0.076-0.352 0.204-0.73 0.27-1.102 11.953-21.005 21.373-43.608 27.902-67.431 1.506-1.625 3.052-3.167 4.671-4.345 3.861-2.793 8.341-4.134 12.778-4.134 6.753 0 13.463 3.144 17.716 9.072 6.822 9.427 5 22.485-3.937 29.734-4.312 5.582-12.427 28.932-17.245 49.818-0.293 1.233-0.674 2.431-1.191 3.608-0.382 1.441-1.181 4.552-1.878 7.338-6.687 26.59-24.462 97.235-67.55 163.686-55.65 85.788-131.538 132.738-225.592 139.514-0.151 0.023-0.286 0.023-0.451 0.046-173.35 8.851-287.139-142.474-335.71-207.090l-5.105-6.776c-13.305-17.577-29.024-28.527-34.444-31.698-1.819-0.727-3.598-1.707-5.233-2.954-6.799-5.148-10.121-13.933-8.295-22.264 1.849-8.325 8.368-14.824 16.676-16.65zM590.263 740.954c-13.206 11.298-29.369 20.097-48.246 25.886-6.888 2.098-13.979 3.375-21.222 3.944 24.623-6.983 47.933-17.068 69.467-29.83zM79.388 447.842c23.856 6.499 47.062 15.212 67.599 24.044-0.273 5.269-0.431 10.558-0.431 15.893 0 11.032 0.664 21.929 1.852 32.642-22.922-10.765-51.453-22.511-80.509-30.435-11.64-3.151-18.502-15.173-15.331-26.813 3.154-11.644 15.163-18.525 26.82-15.331zM205.945 310.782c-34.711-19.021-69.435-36.707-99.978-49.752-11.104-4.75-16.252-17.574-11.506-28.672 3.536-8.315 11.617-13.259 20.087-13.259 2.871 0 5.786 0.562 8.588 1.733 34.395 14.712 73.724 34.974 112.437 56.413-10.69 10.427-20.613 21.603-29.629 33.536zM265.006 751.535c-9.914-10.94-18.811-22.676-28.399-33.862-12.555-14.67-26.271-28.386-40.585-41.309-14.745-13.305-26.659-22.82-44.032-32.806-18.426-10.558-37.217-21.278-56.304-30.563-6.575-3.197-12.229-5.289-19.607-7.496-11.384-3.424-18.465-15.189-15.235-26.873 3.089-11.285 15.466-18.686 26.866-15.265 22.34 6.73 42.588 18.212 62.748 29.672 6.822 3.894 13.601 7.624 20.304 11.476 32.254 74.312 94.311 132.784 171.008 160.265 1.312 1.102 2.641 2.177 3.963 3.289 0.451 0.352 3.848 3.039 4.707 3.73 15.212 11.647 31.431 22.018 48.492 30.774 16.104 8.292 32.27 14.078 51.877 18.166 6.503 1.345 7.92 1.487 12.782 1.983 11.838 1.233 21.857 9.029 21.857 21.853 0 10.986-9.986 23.077-21.857 21.843-78.986-8.18-146.53-57.574-198.584-114.878zM94.962 333.158c13.209 4.536 41.631 14.861 78.703 31.517-6.092 13.147-11.239 26.833-15.344 40.95-36.543-16.502-64.655-26.711-77.549-31.158-0.977-0.329-1.579-0.539-1.779-0.608-11.285-4.302-16.975-16.91-12.703-28.175 3.309-8.743 11.621-14.101 20.442-14.101 2.477 0 4.996 0.405 7.447 1.283l0.783 0.293zM569.38 223.523c21.748-15.439 43.786-30.751 65.33-42.953l-50.561 50.65c-4.848-2.71-9.802-5.266-14.768-7.697zM336.483 212.761c-15.989 6.069-31.32 13.509-45.841 22.153-51.525-33.925-106.826-69.698-131.837-76.427-11.667-3.151-18.574-15.15-15.439-26.794 2.628-9.769 11.446-16.186 21.084-16.186 1.881 0 3.806 0.247 5.697 0.766 33.701 9.095 93.1 48.242 155.979 89.666 3.408 2.233 6.861 4.529 10.358 6.822zM634.801 96.048c-17.594 6.374-46.239 24.064-73.931 41.167-58.482 36.141-95.656 58.057-122.325 53.475-27.021-4.681-83.762-43.243-178.994-112.786-11.66-8.509-21.725-15.847-28.711-20.797-9.841-6.97-12.196-20.6-5.246-30.451 4.266-6.019 11.022-9.249 17.864-9.249 4.368 0 8.762 1.303 12.601 4.006 7.263 5.134 17.459 12.598 29.267 21.182 37.895 27.692 138.59 101.195 160.443 104.977 13.62 0.921 62.781-29.402 92.15-47.525 30.954-19.113 60.185-37.191 82.045-45.091 11.331-4.108 23.873 1.779 27.981 13.124 4.102 11.354-1.786 23.86-13.144 27.968zM561.009-12.57c-12.279 8.006-23.547 16.074-34.477 23.853-35.826 25.606-66.81 47.713-100.757 41.782-38.22-6.598-99.1-67.806-110.914-79.999-8.401-8.667-8.17-22.511 0.497-30.918 4.24-4.072 9.726-6.144 15.189-6.144 5.707 0 11.407 2.23 15.686 6.661 29.264 30.214 70.839 64.58 86.976 67.366 15.956 2.737 40.065-14.43 67.948-34.319 10.756-7.677 22.929-16.367 35.97-24.873 10.108-6.585 23.659-3.753 30.244 6.358 6.572 10.104 3.737 23.626-6.361 30.234zM761.096 408.553c5.46 9.262 3.154 25.238-7.832 29.885-7.026 2.97-14.14 6.095-21.143 9.404-2.023-14.719-5.21-29.205-9.43-43.388 2.812-1.283 5.651-2.52 8.532-3.737 10.963-4.661 23.278-3.444 29.872 7.835zM710.87 324.426c-6.966 2.148-13.203 4.615-19.416 7.453l33.925-33.994c2.523 10.384-1.408 22.485-14.509 26.54zM957.447 42.247l-295.348 295.865c-0.451 0.474-1.003 0.753-1.474 1.194 32.069 44.552 51.183 98.985 51.183 157.927 0 149.503-121.624 271.107-271.114 271.107-149.5 0-271.097-121.604-271.097-271.107 0-149.487 121.611-271.094 271.107-271.094 54.334 0 104.885 16.196 147.355 43.828 0.898-1.056 1.654-2.23 2.644-3.24l295.329-295.878c19.709-19.719 51.676-19.696 71.408 0 19.692 19.722 19.692 51.696 0.007 71.398zM658.056 503.153c-1.96-3.062-4.73-4.842-8.41-4.842-7.2 0-11.884 7.489-11.884 20.689 0 13.821 5.052 21.14 11.976 21.14 1.714 0 3.177-0.421 4.516-1.102 2.25-11.667 3.477-23.666 3.802-35.885zM559.127 662.658c0-12.946-3.861-21.146-11.956-21.146-7.2 0-11.884 7.473-11.884 20.672 0 13.818 5.052 21.163 11.976 21.163 8.183 0 11.864-8.197 11.864-20.689zM263.289 609.094c8.193 0 11.881-8.2 11.881-20.696 0-12.966-3.885-21.163-11.976-21.163-7.193 0-11.867 7.489-11.867 20.689 0 13.838 5.046 21.169 11.963 21.169zM225.71 464.844c2.066 2.809 4.717 4.322 7.785 4.322 8.206 0 11.881-8.193 11.881-20.666 0-12.236-3.49-20.126-10.683-20.982-4.069 11.989-7.045 24.481-8.983 37.326zM277.117 354.117c-5.743 6.552-11.213 13.351-16.137 20.554 0.23 13.193 5.144 20.238 11.92 20.238 8.183 0 11.871-8.193 11.871-20.689 0.003-10.354-2.51-17.581-7.654-20.103zM347.636 300.786c-7.884 3.737-15.518 7.901-22.833 12.538 1.671 8.285 5.842 12.65 11.167 12.65 8.2 0 11.887-8.193 11.887-20.686 0-1.599-0.092-3.062-0.22-4.503zM370.194 304.816c0 13.824 5.049 21.163 11.976 21.163 8.183 0 11.867-8.193 11.867-20.686 0-9.118-1.97-15.795-5.93-19.011-5.098 1.273-10.17 2.598-15.124 4.23-1.766 3.477-2.789 8.272-2.789 14.305zM508.773 304.816c0 13.824 5.049 21.163 11.966 21.163 8.21 0 11.877-8.193 11.877-20.686 0-1.914-0.224-3.559-0.391-5.246-6.845-3.187-13.841-6.022-21.034-8.499-1.493 3.365-2.418 7.73-2.418 13.269zM540.432 303.997c0.013 0.562 0.112 1.033 0.112 1.618 0 16.163-7.013 25.698-19.344 25.698-11.874 0-20.353-9.381-20.353-26.382 0.069-6.476 1.372-11.673 3.454-15.785-7.812-2.404-15.831-4.253-23.991-5.763v47.075h-6.749l-12.769-5.953 1.536-5.213 10.164 4.736h0.184v-41.828c-10.456-1.529-21.084-2.612-31.961-2.612-2.217 0-4.384 0.26-6.585 0.339v50.518h-6.743l-12.782-5.957 1.543-5.21 10.17 4.736h0.181v-43.72c-10.568 0.71-20.988 1.96-31.096 4.098 4.256 4.523 6.601 11.614 6.601 21.205 0 16.163-7.029 25.695-19.35 25.695-11.887 0-20.347-9.377-20.347-26.382 0.046-4.144 0.553-7.825 1.464-11.009-2.927 1.102-5.897 2.095-8.756 3.332 0.474 2.566 0.783 5.289 0.783 8.374 0 16.163-7.029 25.698-19.354 25.698-8.47 0-15.143-4.875-18.301-13.759-13.532 9.252-25.83 20.103-36.934 32.106 7.414 3.556 11.506 12.088 11.506 24.896 0 16.153-7.019 25.688-19.35 25.688-8.92 0-15.92-5.289-18.847-15.13-7.108 11.749-13.114 24.198-17.919 37.27 10.67 1.677 16.709 10.851 16.709 26.412 0 16.16-7.019 25.692-19.35 25.692-3.473 0-6.585-0.878-9.348-2.431-0.957 8.285-1.582 16.653-1.582 25.198 0 13.176 1.372 25.978 3.608 38.497l5.269 2.477h0.187v-44.348h7.654v50.739h-6.766l-5.223-2.444c3.431 16.275 8.841 31.787 15.686 46.483-0.010-0.224-0.046-0.401-0.046-0.655 0.187-16.772 7.93-26.073 19.367-26.073 12.94 0 20.33 9.522 20.33 26.79 0 16.156-7.006 25.692-19.35 25.692-2.516 0-4.845-0.516-6.996-1.349 15.117 23.929 34.704 44.664 57.653 61.096v-37.099h7.637v42.421c34.181 22.337 74.888 35.428 118.667 35.428 37.681 0 73.132-9.634 104.066-26.563-10.302-1.47-17.393-10.535-17.393-26.073 0.181-16.795 7.914-26.077 19.35-26.077 12.956 0 20.344 9.525 20.344 26.767 0 4.842-0.71 9.022-1.927 12.607 24.481-17.15 45.18-39.233 60.886-64.741l-6.957-3.22 1.543-5.217 8.206 3.829c0.697-1.204 1.474-2.319 2.148-3.516v-39.891h7.644v24.514c6.121-13.394 10.94-27.471 14.262-42.141-0.881 0.118-1.733 0.266-2.677 0.266-11.874 0-20.344-9.364-20.344-26.379 0.181-16.772 7.914-26.073 19.35-26.073 3.424 0 6.45 0.727 9.052 2.003-0.125-11.769-1.316-23.284-3.243-34.556v13.176h-6.743l-12.775-5.95 1.543-5.217 10.164 4.773h0.171v-37.934c-3.546-10.752-7.924-21.093-13.045-31.024-6.217-3.105-10.446-9.884-11.459-19.807-6.226-9.525-13.236-18.449-20.847-26.836v47.749h-6.743l-12.775-5.944 1.529-5.223 10.177 4.773h0.181v-44.348h4.93c-16.929-18.018-36.773-33.155-58.889-44.634zM361.944 636.2c12.953 0 20.34 9.522 20.34 26.767 0 16.156-7.006 25.692-19.35 25.692-11.874 0-20.347-9.384-20.347-26.386 0.187-16.801 7.92-26.073 19.357-26.073zM362.484 683.347c8.193 0 11.881-8.193 11.881-20.689 0-12.946-3.881-21.146-11.976-21.146-7.187 0-11.867 7.473-11.867 20.672-0.013 13.818 5.036 21.163 11.963 21.163zM406.608 681.387h0.168v-44.332h7.644v50.739h-6.756l-12.769-5.937 1.529-5.217zM452.805 681.387h0.171v-44.332h7.654v50.739h-6.769l-12.769-5.937 1.536-5.217zM501.514 688.659c-11.887 0-20.347-9.384-20.347-26.386 0.187-16.791 7.92-26.073 19.357-26.073 12.953 0 20.34 9.522 20.34 26.767-0.003 16.156-7.042 25.692-19.35 25.692zM500.975 641.512c-7.203 0-11.887 7.473-11.887 20.672 0 13.818 5.049 21.163 11.966 21.163 8.193 0 11.871-8.193 11.871-20.689-0.003-12.943-3.861-21.146-11.95-21.146zM307.423 607.134h0.171v-44.315h7.654v50.713h-6.753l-12.772-5.927 1.52-5.217zM353.794 607.134v-44.315h7.654v50.713h-6.759l-12.792-5.927 1.536-5.217 10.187 4.746zM421.669 588.727c0 16.16-7.019 25.695-19.35 25.695-11.874 0-20.347-9.384-20.347-26.406 0.187-16.775 7.93-26.077 19.354-26.077 12.979-0.013 20.344 9.522 20.344 26.787zM389.906 587.928c0 13.824 5.049 21.166 11.966 21.166 8.193 0 11.871-8.2 11.871-20.696 0-12.966-3.861-21.163-11.966-21.163-7.18 0.003-11.871 7.506-11.871 20.692zM446.006 607.134h0.158v-44.315h7.654v50.713h-6.746l-12.778-5.927 1.529-5.217zM493.719 561.927c12.956 0 20.347 9.522 20.347 26.79 0 16.156-7.019 25.692-19.35 25.692-11.887 0-20.347-9.381-20.347-26.406 0.187-16.772 7.92-26.077 19.35-26.077zM494.265 609.094c8.183 0 11.871-8.2 11.871-20.696 0-12.966-3.875-21.163-11.966-21.163-7.203 0-11.881 7.489-11.881 20.689 0 13.838 5.049 21.169 11.976 21.169zM538.563 607.134v-44.315h7.644v50.713h-6.743l-12.775-5.927 1.52-5.217 10.164 4.746zM586.118 561.927c12.956 0 20.33 9.522 20.33 26.79 0 16.156-7.003 25.692-19.35 25.692-11.874 0-20.34-9.381-20.34-26.406 0.181-16.772 7.927-26.077 19.36-26.077zM586.648 609.094c8.193 0 11.874-8.2 11.874-20.696 0-12.966-3.875-21.163-11.966-21.163-7.193 0-11.874 7.489-11.874 20.689 0.003 13.838 5.046 21.169 11.966 21.169zM280.636 545.455c-11.881 0-20.347-9.364-20.347-26.379 0.187-16.772 7.92-26.073 19.354-26.073 12.956 0 20.347 9.522 20.347 26.767 0 16.166-7.045 25.685-19.354 25.685zM280.083 498.315c-7.203 0-11.874 7.489-11.874 20.689 0 13.821 5.049 21.14 11.966 21.14 8.193 0 11.887-8.193 11.887-20.666-0.003-12.969-3.881-21.163-11.979-21.163zM326.829 545.455c-11.881 0-20.34-9.364-20.34-26.379 0.181-16.772 7.917-26.073 19.347-26.073 12.956 0 20.347 9.522 20.347 26.767 0.003 16.166-7.039 25.685-19.354 25.685zM326.29 498.315c-7.216 0-11.881 7.489-11.881 20.689 0 13.821 5.049 21.14 11.976 21.14 8.183 0 11.871-8.193 11.871-20.666 0-12.969-3.871-21.163-11.966-21.163zM358.78 538.679l1.549-5.246 10.164 4.773h0.184v-44.351h7.644v50.749h-6.743zM424.505 493.854v50.749h-6.743l-12.769-5.924 1.529-5.246 10.17 4.773h0.168v-44.351zM465.399 545.455c-11.867 0-20.35-9.364-20.35-26.379 0.181-16.772 7.93-26.073 19.36-26.073 12.956 0 20.337 9.522 20.337 26.767-0.003 16.166-7.009 25.685-19.347 25.685zM464.846 498.315c-7.193 0-11.871 7.489-11.871 20.689 0 13.821 5.049 21.14 11.966 21.14 8.206 0 11.881-8.193 11.881-20.666 0-12.969-3.861-21.163-11.976-21.163zM497.376 538.679l1.533-5.246 10.164 4.773h0.184v-44.351h7.654v50.749h-6.749zM557.789 545.455c-11.874 0-20.353-9.364-20.353-26.379 0.204-16.772 7.937-26.073 19.373-26.073 12.953 0 20.33 9.522 20.33 26.767 0 16.166-7.026 25.685-19.35 25.685zM557.259 498.315c-7.203 0-11.884 7.489-11.884 20.689 0 13.821 5.052 21.14 11.966 21.14 8.193 0 11.884-8.193 11.884-20.666 0-12.969-3.871-21.163-11.966-21.163zM589.756 538.679l1.543-5.246 10.173 4.773h0.171v-44.351h7.654v50.749h-6.756zM265.93 467.679l1.52-5.223 10.173 4.776h0.174v-44.361h7.657v50.742h-6.746zM331.648 422.871v50.742h-6.743l-12.792-5.934 1.529-5.223 10.183 4.776h0.174v-44.361zM358.297 467.679l1.546-5.223 10.167 4.776h0.184v-44.361h7.644v50.742h-6.743zM418.719 474.478c-11.871 0-20.347-9.371-20.347-26.382 0.184-16.772 7.93-26.080 19.354-26.080 12.956 0 20.347 9.525 20.347 26.774 0.003 16.156-7.009 25.688-19.354 25.688zM418.189 427.341c-7.193 0-11.874 7.483-11.874 20.689 0 13.795 5.049 21.14 11.966 21.14 8.197 0 11.887-8.193 11.887-20.666-0.003-12.969-3.885-21.163-11.979-21.163zM470.221 422.871v50.742h-6.759l-12.769-5.934 1.536-5.223 10.173 4.776h0.178v-44.361zM496.893 467.679l1.529-5.223 10.167 4.776h0.184v-44.361h7.654v50.742h-6.766zM557.315 474.478c-11.887 0-20.344-9.371-20.344-26.382 0.181-16.772 7.914-26.080 19.35-26.080 12.956 0 20.344 9.525 20.344 26.774 0 16.156-7.045 25.688-19.35 25.688zM556.772 427.341c-7.2 0-11.884 7.483-11.884 20.689 0 13.795 5.052 21.14 11.966 21.14 8.193 0 11.874-8.193 11.874-20.666 0-12.969-3.861-21.163-11.956-21.163zM583.171 448.082c0.181-16.772 7.914-26.080 19.35-26.080 12.953 0 20.34 9.522 20.34 26.771 0 16.16-7.022 25.692-19.35 25.692-11.9 0.013-20.34-9.354-20.34-26.382zM614.925 448.5c0-12.966-3.861-21.163-11.956-21.163-7.203 0-11.884 7.483-11.884 20.689 0 13.795 5.052 21.14 11.976 21.14 8.183 0 11.864-8.193 11.864-20.666zM319.537 400.221c-11.857 0-20.347-9.368-20.347-26.382 0.184-16.775 7.93-26.070 19.367-26.070 12.946 0 20.334 9.525 20.334 26.767 0 16.163-7.026 25.685-19.354 25.685zM318.994 353.081c-7.193 0-11.874 7.463-11.874 20.689 0 13.798 5.049 21.14 11.966 21.14 8.193 0 11.887-8.193 11.887-20.689 0-12.943-3.891-21.14-11.979-21.14zM351.508 393.423l1.536-5.223 10.177 4.773h0.174v-44.335h7.654v50.729h-6.759zM397.698 393.423l1.529-5.223 10.19 4.773h0.161v-44.335h7.667v50.729h-6.753zM458.117 400.221c-11.871 0-20.347-9.368-20.347-26.382 0.184-16.775 7.93-26.070 19.354-26.070 12.966 0 20.347 9.525 20.347 26.767 0 16.163-7.022 25.685-19.354 25.685zM457.587 353.081c-7.193 0-11.874 7.463-11.874 20.689 0 13.798 5.055 21.14 11.966 21.14 8.193 0 11.874-8.193 11.874-20.689 0-12.943-3.861-21.14-11.966-21.14zM490.087 393.423l1.536-5.223 10.167 4.773h0.174v-44.335h7.654v50.729h-6.743zM550.516 400.221c-11.884 0-20.353-9.368-20.353-26.382 0.194-16.775 7.924-26.070 19.363-26.070 12.953 0 20.34 9.525 20.34 26.767 0 16.163-7.036 25.685-19.35 25.685zM549.977 353.081c-7.203 0-11.887 7.463-11.887 20.689 0 13.798 5.042 21.14 11.979 21.14 8.183 0 11.864-8.193 11.864-20.689 0-12.943-3.875-21.14-11.956-21.14z" />
+<glyph unicode="&#xe973;" glyph-name="fingerprint-simple" d="M173.793 672.211c6.855-1.487 13.22-1.378 32.768 13.628 8.677 6.674 21.512 17.897 33.36 33.577l5.19 6.878c44.379 59.029 148.274 197.225 298.345 189.706 123.756-9.023 211.475-102.478 253.676-270.271 1.441-5.707 2.306-9.197 3.276-11.901 6.437-27.429 17.265-61.615 32.843-72.877 3.852-2.793 8.342-4.125 12.779-4.125 6.766 0 13.463 3.135 17.729 9.055 6.822 9.447 5 22.512-3.941 29.752-4.312 5.582-12.414 28.933-17.242 49.819-0.283 1.243-0.687 2.444-1.181 3.608-0.405 1.431-1.181 4.543-1.891 7.329-6.684 26.604-24.462 97.248-67.539 163.691-55.658 85.798-131.558 132.746-225.609 139.525-0.145 0.023-0.303 0.023-0.46 0.023-173.349 8.851-287.138-142.469-335.717-207.074l-5.105-6.786c-13.299-17.585-29.015-28.531-34.429-31.699-1.826-0.73-3.598-1.71-5.246-2.954-6.799-5.151-10.121-13.937-8.292-22.262 1.839-8.309 8.351-14.822 16.687-16.644zM721.037 588.423c16.479 41.198 16.897 83.752 1.079 116.75-14.068 29.452-40.343 50.78-75.933 61.681-52.257 15.989-115.595-13.022-173.622-79.509-0.737-0.816-83.337-87.696-170.072-140.808-0.635-0.382-64.134-38.462-130.446-56.539-11.647-3.158-18.512-15.18-15.345-26.804 3.158-11.644 15.167-18.525 26.818-15.338 72.127 19.627 138.758 59.585 141.673 61.335 94.093 57.622 179.44 148.416 180.154 149.271 35.238 40.353 87.367 79.048 128.025 66.598 23.939-7.329 40.544-20.367 49.336-38.761 10.536-22.005 9.713-51.78-2.253-81.666-22.255-55.632-91.584-122.786-195.203-189.144-51.948-33.271-182.766-114.983-275.175-154.471-11.101-4.75-16.242-17.561-11.506-28.673 3.552-8.305 11.618-13.269 20.104-13.269 2.872 0 5.786 0.562 8.588 1.756 95.393 40.813 228.684 123.986 281.559 157.846 78.693 50.398 179.371 127.69 212.218 209.744zM369.13 751.552c-9.911-10.93-18.808-22.666-28.4-33.853-12.552-14.673-26.268-28.383-40.596-41.313-14.729-13.305-26.65-22.811-44.017-32.807-18.433-10.559-37.218-21.252-56.309-30.557-6.569-3.21-12.22-5.279-19.604-7.503-11.391-3.427-18.466-15.187-15.252-26.88 3.089-11.272 15.473-18.696 26.88-15.275 22.338 6.733 42.59 18.236 62.75 29.696 17.048 9.68 33.962 18.404 49.612 30.314 30.521 23.199 56.776 50.29 80.93 79.949 9.789 12.009 20.239 23.439 31.169 34.426 5.96 5.996 12.124 11.769 18.427 17.43 3.276 2.937 6.608 5.799 9.983 8.644 1.707 1.431 3.434 2.849 5.177 4.26 0.444 0.372 3.839 3.043 4.7 3.737 15.22 11.657 31.436 22.018 48.494 30.775 16.114 8.292 32.278 14.075 51.888 18.167 6.496 1.352 7.911 1.497 12.776 1.99 11.841 1.22 21.861 9.016 21.861 21.844 0 10.999-9.983 23.087-21.861 21.857-78.995-8.187-146.551-57.569-198.607-114.898zM199.090 333.161c47.471 16.289 291.187 107.296 427.673 298.604 7.016 9.822 4.73 23.453-5.085 30.479-9.838 7.006-23.482 4.723-30.495-5.098-128.729-180.457-361.025-267.106-406.292-282.671-0.967-0.316-1.566-0.53-1.773-0.599-11.286-4.302-16.969-16.897-12.69-28.173 3.309-8.746 11.618-14.104 20.446-14.104 2.467 0 4.993 0.418 7.447 1.296l0.77 0.266zM793.651 203.093c-30.278 10.095-67.348 36.481-103.175 62-51.905 36.991-96.702 68.901-133.219 62.621-27.446-4.75-75.381-35.393-151.050-85.245-54.543-35.965-116.385-76.723-143.278-83.962-11.651-3.161-18.558-15.141-15.42-26.778 2.628-9.772 11.447-16.19 21.094-16.19 1.881 0 3.789 0.25 5.681 0.753 33.718 9.098 93.113 48.247 155.991 89.682 50.783 33.478 113.997 75.147 134.413 78.67 18.555 3.177 63.96-29.13 100.442-55.122 38.452-27.387 78.209-55.711 114.704-67.891 11.457-3.802 23.828 2.388 27.643 13.825 3.812 11.437-2.378 23.821-13.825 27.637zM738.944 96.053c-17.614 6.361-46.241 24.055-73.933 41.156-58.487 36.143-95.656 58.072-122.332 53.48-27.018-4.684-83.768-43.238-178.996-112.79-11.667-8.509-21.729-15.848-28.715-20.788-9.845-6.98-12.197-20.601-5.246-30.462 4.276-6.023 11.019-9.243 17.871-9.243 4.358 0 8.759 1.303 12.585 3.996 7.259 5.135 17.453 12.595 29.265 21.183 37.899 27.679 138.601 101.198 160.451 104.968 13.631 0.934 62.789-29.393 92.156-47.537 30.955-19.114 60.177-37.169 82.061-45.093 11.332-4.098 23.874 1.78 27.972 13.134 4.095 11.381-1.766 23.887-13.137 27.995zM665.146-12.572c-12.269 8.006-23.548 16.075-34.478 23.841-35.817 25.607-66.805 47.718-100.744 41.797-38.238-6.598-99.113-67.822-110.938-79.999-8.391-8.68-8.161-22.515 0.507-30.923 4.246-4.072 9.72-6.144 15.18-6.144 5.717 0 11.424 2.217 15.703 6.651 29.265 30.222 70.841 64.569 86.965 67.361 15.953 2.733 40.077-14.41 67.957-34.311 10.74-7.677 22.92-16.358 35.978-24.887 10.095-6.585 23.647-3.74 30.245 6.371 6.572 10.115 3.727 23.634-6.375 30.242zM857.418 438.451c-18.213 7.69-37.258 15.782-52.589 28.541-16.874 14.039-24.719 32.469-28.242 53.757-4.559 27.758-46.682 15.946-42.136-11.605 9.345-56.674 51.060-87.37 100.905-108.411 10.973-4.661 23.288-3.444 29.883 7.825 5.454 9.272 3.141 25.245-7.822 29.893zM815.006 324.435c-16.4 5.065-28.86 11.457-46.221 21.722-31.798 18.788-60.806 46.004-74.91 80.798-4.467 11.022-14.374 18.7-26.88 15.252-10.483-2.881-19.732-15.828-15.266-26.89 26.048-64.197 85.821-112.734 151.669-133.028 27.008-8.305 38.465 33.873 11.608 42.146z" />
+<glyph unicode="&#xe974;" glyph-name="settings" d="M225.037 959.932c64.288 1.523 129.795-22.546 179.775-72.557 73.543-73.574 90.917-180.699 52.646-267.98l531.791-483.041c34.747-34.789 34.747-91.040 0-125.733l-39.794-39.834c-34.747-34.788-90.964-34.788-125.712 0l-483.096 531.774c-87.347-38.31-194.495-20.94-267.942 52.634-57.121 57.108-80.539 134.49-70.401 207.207l138.755-138.868c53.074-53.063 139.85-52.302 193.781 1.618 53.978 53.873 54.693 140.725 1.618 193.836l-138.85 138.725c9.086 1.261 18.246 2.001 27.43 2.219z" />
+<glyph unicode="&#xe975;" glyph-name="Save" d="M178.857 170.418v-103.511h664.66v103.511zM270.958 958.932h127.786v-260.744h-127.786zM5.556 960h168.819v-312.888h669.074v312.888h175.017v-1023.936h-1012.91z" />
+<glyph unicode="&#xe976;" glyph-name="squares" d="M928 752v-416c-0.171-56.042-41.533-102.371-95.391-110.309l-0.609-0.074v526.383c-0.114 8.79-7.21 15.886-15.989 16h-526.394c8.012 54.467 54.341 95.829 110.365 96h416.018c61.825-0.077 111.923-50.175 112-111.993v-0.007zM768 592v-416c-0.077-61.825-50.175-111.923-111.993-112h-416.007c-61.825 0.077-111.923 50.175-112 111.993v416.007c0.077 61.825 50.175 111.923 111.993 112h416.007c61.825-0.077 111.923-50.175 112-111.993v-0.007zM672 592c-0.114 8.79-7.21 15.886-15.989 16h-416.011c-8.79-0.114-15.886-7.21-16-15.989v-416.011c0.114-8.79 7.21-15.886 15.989-16h416.011c8.79 0.114 15.886 7.21 16 15.989v0.011z" />
+<glyph unicode="&#xe977;" glyph-name="table" d="M0 147.354h1023.919v-129.997h-1023.919zM0 391.18h1023.919v-130.079h-1023.919zM0 635.007h1023.919v-130.079h-1023.919zM0 878.752h1023.919v-130.079h-1023.919z" />
+<glyph unicode="&#xe978;" glyph-name="upload" d="M511.975 447.953l-242.846-242.843h161.146v-184.088h163.402v184.088h161.146zM646.038 924.618l311.664-313.105h-311.664zM66.25 960h514.016v-388.045h377.436v-636.099h-891.451z" />
+<glyph unicode="&#xe979;" glyph-name="user" d="M784 832h-544c-61.825-0.077-111.923-50.175-112-111.993v-544.007c0.077-61.825 50.175-111.923 111.993-112h544.007c61.825 0.077 111.923 50.175 112 111.993v544.007c-0.077 61.825-50.175 111.923-111.993 112h-0.007zM384 506.039v69.961c0 70.692 57.308 128 128 128s128-57.308 128-128v0-69.961c4.573-3.984 7.447-9.818 7.447-16.322 0-2.91-0.575-5.686-1.618-8.22l0.052 0.144-11.762-35.281c-5.297-13.384-16.083-23.612-29.504-28.044l-0.337-0.096-5.269-42.156c-4.083-31.765-30.956-56.062-63.504-56.062-0.001 0-0.002 0-0.002 0h-47.004c-0.001 0-0.001 0-0.002 0-32.548 0-59.421 24.298-63.47 55.744l-0.034 0.32-5.27 42.156c-13.759 4.528-24.544 14.757-29.729 27.818l-0.113 0.323-11.762 35.281c-0.99 2.39-1.565 5.165-1.565 8.075 0 6.504 2.873 12.338 7.42 16.3l0.026 0.022zM736 176c0-8.837-7.163-16-16-16v0h-416c-8.837 0-16 7.163-16 16v0 62.68c0.001 21.603 10.705 40.706 27.098 52.295l0.201 0.135 57.17 40.016c20.522-44.54 64.704-74.939 116.007-75.125h47.024c51.327 0.185 95.509 30.585 115.704 74.332l0.328 0.793 57.17-40.016c16.594-11.724 27.298-30.827 27.298-52.43v0z" />
+<glyph unicode="&#xe97a;" glyph-name="entry" d="M393.929 713.001l174.72-174.764-174.72-174.827v116.073h-324.558v117.572h324.558zM205.76 960h749.061v-843.557l-279.544-180.587v180.587h-469.517v322.548h85.455v-233.539h384.062v571.835l143.461 93.764h-527.523v-233.535h-85.455z" />
+<glyph unicode="&#xe97b;" glyph-name="lock" d="M521.113 345.977c-36.247 0-65.622-30.173-65.622-67.384 0-26.94 15.629-49.757 37.892-60.574v-91.901h55.619v91.957c22.292 10.76 37.947 33.661 37.947 60.517 0 37.211-29.428 67.384-65.836 67.384zM511.933 882.117c-91.257 0-165.188-80.448-165.188-179.648v-94.869c0-11.971 1.142-23.651 3.186-35.018h324.163c2.071 11.367 3.184 23.047 3.184 35.018v94.869c0 99.2-74.089 179.648-165.345 179.648zM511.933 960c122.569 0 222-108.056 222-241.289v-127.351c0-8.021-0.396-15.951-1.087-23.8 62.837-17.306 109.461-79.119 109.461-152.847v-320.929c0-87.113-65.041-157.781-145.152-157.781h-370.284c-80.244 0-145.179 70.668-145.179 157.781v320.929c0 73.757 46.598 135.541 109.515 152.88-0.69 7.816-1.088 15.746-1.088 23.767v127.351c0 133.232 99.271 241.289 221.816 241.289z" />
+<glyph unicode="&#xe97c;" glyph-name="unlock" d="M500.472 357.966c-50.471 0-91.375-41.364-91.375-92.479 0-36.908 21.775-68.247 52.794-83.072v-126.117h77.391v126.212c31.052 14.729 52.797 46.159 52.797 82.976 0 51.115-40.934 92.479-91.607 92.479zM452.81 959.958c90.471 1.822 176.486-56.22 211.078-151.903l42.359-117.054c6.804-18.844 11.019-38.031 13.14-57.156l-60.906 0.746c-1.25 16.539-4.652 33.204-10.496 49.403l-31.514 87.276c-32.967 91.078-128.617 136.429-213.798 101.076-85.183-35.291-127.339-137.766-94.341-229.002l28.868-79.958h289.913l90.183-1.151c-0.030-0.186-0.060-0.343-0.060-0.529 70.675-10.497 125.071-75.316 125.071-153.869v-316.25c0-85.904-64.948-155.584-145.158-155.584h-370.297c-80.125 0-145.16 69.68-145.16 155.584v316.25c0 68.085 40.963 125.865 97.829 146.892l-29.507 81.607c-44.219 122.474 12.56 260.148 126.785 307.524 25 10.384 50.681 15.588 76.013 16.098z" />
+<glyph unicode="&#xe97d;" glyph-name="category" d="M632.965 307.194v-260.497h320.022v260.497zM236.496 342.238l-53.124-106.723-118.088-16.801 85.126-83.363-20.481-117.444 105.607 55.042 105.287-55.682-19.681 117.444 85.606 82.883-117.928 17.601zM562.080 404.16h461.952v-461.95h-461.952zM0 404.16h461.952v-461.934h-461.952zM230.976 861.302l-159.956-277.049h319.911l-79.978 138.525zM793.133 872.015c-82.564 0-149.45-66.702-149.45-149.235 0-82.385 66.886-149.243 149.45-149.243 82.406 0 149.292 66.858 149.292 149.243 0 82.534-66.886 149.235-149.292 149.235zM0 953.759h461.952v-461.962h-461.952zM562.078 953.76h461.952v-461.968h-461.952z" />
+<glyph unicode="&#xe97e;" glyph-name="vacancydays" d="M440.576 617.536l60.752-30.48c17.296-621.056 391.136-651.056 391.136-651.056h-349.152c-203.376 163.936-150.192 654.48-150.192 654.48zM668.568 959.978c142.582 1.91 235.284-118.058 227.397-277.457-66.24 160.75-267.727 179.613-353.263 91.711 201.439 23.968 480.895-116.75 283.088-519.639-39.504 307.595-277.504 402.889-381.215 417.369-144.447-10.464-335.375-168.893-345.007-414.969-306.399 398.057 184.735 544.519 303.199 499.224-27.104 64.367-194.319 117.438-368.607-28.943 63.312 411.721 413.823 146.813 413.823 146.813 80.66 58.974 155.776 85.024 220.586 85.892z" />
+<glyph unicode="&#xe97f;" glyph-name="sector" d="M369.796 543.236c-21.646-0.589-122.661-41.523-111.068-51.392 13.153-11.33 47.996-39.607 59.337-39.607 11.313 0 49.935 74.462 55.589 88.573 0.707 1.771-0.765 2.51-3.858 2.426zM221.988 716.273c-16.176-0.073-32.162-1.473-35.88-3.963-8.437-5.61-31.119-99.868-19.779-90.46 11.343 9.467 85.774 79.166 93.336 87.616 4.236 4.801-16.878 6.901-37.676 6.807zM267.16 817.528c55.835-0.239 111.197-2.719 121.555-6.727 20.749-8.011 102.742-145.582 117.304-165.407 14.653-19.765-2.784-45.201-2.784-45.201l-120.43-213.404 253.871-204.151 1.945-0.191c6.281-0.682 10.206-1.616 10.206-1.616 31.395 31.174 59.289 41.548 82.598 41.417 47.728-0.27 76.237-44.589 76.237-44.589s86.209 11.656 97.524-92.962c0 0 35.808-1.889 33.965-32.062 0 0 70.62 11.327 84.776-52.729h-629.519c0 56.573 99.869 54.651 99.869 54.651 4.749 60.295 56.557 52.81 56.557 52.81 1.2 40.536 18.828 59.945 38.809 68.838l2.291 0.914-225.238 181.126-6.262-11.096c0 0 16.969-19.328 35.373-36.748 18.342-17.468-1.406-49.465-1.406-49.465l-128.614-246.013c0 0-23.122-24.437-59.871-7.516-36.776 16.986-26.371 55.589-26.371 55.589s109.302 206.361 106.021 217.719c-3.343 11.315-117.332 145.597-117.332 145.597s-1.875-147.483-4.281-162.564c-2.343-15.092-77.712-250.217-77.712-250.217s-31.091-20.264-56.557-8.937c-25.467 11.344-29.685 40.060-29.685 40.060s56.059 203.114 57.963 219.094c1.875 16.028-3.75 235.605 0 247.388 3.782 11.781 42.434 46.619 42.434 46.619l-25.467 18.375c0 0 0.392 4.798 1.251 13.040l0.262 2.483-51.222 41.19 20.279 25.186 35.641-28.661 0.281 2.011c8.771 61.144 27.369 154.383 61.346 179.419 12.249 4.962 68.556 6.966 124.391 6.727zM556.962 905.524c52.304 0 94.707-42.405 94.707-94.719 0-52.308-42.403-94.698-94.707-94.698-52.309 0-94.71 42.39-94.71 94.698 0 52.314 42.401 94.719 94.71 94.719z" />
+</font></defs></svg>
\ No newline at end of file
diff --git a/admin/css/fonts/pot.ttf b/admin/css/fonts/pot.ttf
new file mode 100644 (file)
index 0000000..2f0e87f
Binary files /dev/null and b/admin/css/fonts/pot.ttf differ
diff --git a/admin/css/fonts/pot.woff b/admin/css/fonts/pot.woff
new file mode 100644 (file)
index 0000000..dbc69a9
Binary files /dev/null and b/admin/css/fonts/pot.woff differ
diff --git a/admin/css/icons.css b/admin/css/icons.css
new file mode 100644 (file)
index 0000000..2d6fc0e
--- /dev/null
@@ -0,0 +1,479 @@
+@font-face {
+  font-family: 'pot';
+  src:
+    url('fonts/pot.ttf?8s8vvb') format('truetype'),
+    url('fonts/pot.woff?8s8vvb') format('woff'),
+    url('fonts/pot.svg?8s8vvb#pot') format('svg');
+  font-weight: normal;
+  font-style: normal;
+  font-display: block;
+}
+
+[class^="icon-"], [class*=" icon-"] {
+  /* use !important to prevent issues with browser extensions that change fonts */
+  font-family: 'pot' !important;
+  speak: never;
+  font-style: normal;
+  font-weight: normal;
+  font-variant: normal;
+  text-transform: none;
+  line-height: 1;
+
+  /* Better Font Rendering =========== */
+  -webkit-font-smoothing: antialiased;
+  -moz-osx-font-smoothing: grayscale;
+}
+
+.icon-category:before {
+  content: "\e97d";
+}
+.icon-vacancydays:before {
+  content: "\e97e";
+}
+.icon-sector:before {
+  content: "\e97f";
+}
+.icon-lock:before {
+  content: "\e97b";
+}
+.icon-unlock:before {
+  content: "\e97c";
+}
+.icon-entry:before {
+  content: "\e97a";
+}
+.icon-settings:before {
+  content: "\e974";
+}
+.icon-dataset:before {
+  content: "\e930";
+}
+.icon-check:before {
+  content: "\e931";
+}
+.icon-pause:before {
+  content: "\e900";
+}
+.icon-duplicate:before {
+  content: "\e949";
+}
+.icon-finger1:before {
+  content: "\e955";
+}
+.icon-finger2:before {
+  content: "\e956";
+}
+.icon-finger3:before {
+  content: "\e957";
+}
+.icon-finger4:before {
+  content: "\e958";
+}
+.icon-finger5:before {
+  content: "\e959";
+}
+.icon-fingerprint-check:before {
+  content: "\e95a";
+}
+.icon-fingerprint-crosshair:before {
+  content: "\e95b";
+}
+.icon-fingerprint-remove:before {
+  content: "\e95c";
+}
+.icon-fingerprint-scanning:before {
+  content: "\e95e";
+}
+.icon-fingerprint-scanning-index .path1:before {
+  content: "\e95f";
+  color: rgb(0, 0, 0);
+}
+.icon-fingerprint-scanning-index .path2:before {
+  content: "\e960";
+  margin-left: -1em;
+  color: rgb(0, 0, 0);
+}
+.icon-fingerprint-scanning-index .path3:before {
+  content: "\e961";
+  margin-left: -1em;
+  color: rgb(0, 0, 0);
+}
+.icon-fingerprint-scanning-index .path4:before {
+  content: "\e962";
+  margin-left: -1em;
+  color: rgb(0, 0, 0);
+}
+.icon-fingerprint-scanning-index .path5:before {
+  content: "\e963";
+  margin-left: -1em;
+  color: rgb(0, 0, 0);
+}
+.icon-fingerprint-scanning-index .path6:before {
+  content: "\e964";
+  margin-left: -1em;
+  color: rgb(0, 0, 0);
+}
+.icon-fingerprint-scanning-index .path7:before {
+  content: "\e965";
+  margin-left: -1em;
+  color: rgb(0, 0, 0);
+}
+.icon-fingerprint-scanning-index .path8:before {
+  content: "\e966";
+  margin-left: -1em;
+  color: rgb(0, 0, 0);
+}
+.icon-fingerprint-scanning-index .path9:before {
+  content: "\e967";
+  margin-left: -1em;
+  color: rgb(0, 0, 0);
+}
+.icon-fingerprint-scanning-index .path10:before {
+  content: "\e968";
+  margin-left: -1em;
+  color: rgb(0, 0, 0);
+  opacity: 0.4;
+}
+.icon-fingerprint-scanning-index .path11:before {
+  content: "\e969";
+  margin-left: -1em;
+  color: rgb(0, 0, 0);
+  opacity: 0.4;
+}
+.icon-fingerprint-scanning-index .path12:before {
+  content: "\e96a";
+  margin-left: -1em;
+  color: rgb(0, 0, 0);
+  opacity: 0.4;
+}
+.icon-fingerprint-scanning-index .path13:before {
+  content: "\e96b";
+  margin-left: -1em;
+  color: rgb(0, 0, 0);
+  opacity: 0.4;
+}
+.icon-fingerprint-scanning-index .path14:before {
+  content: "\e96c";
+  margin-left: -1em;
+  color: rgb(0, 0, 0);
+  opacity: 0.4;
+}
+.icon-fingerprint-scanning-index .path15:before {
+  content: "\e96d";
+  margin-left: -1em;
+  color: rgb(0, 0, 0);
+}
+.icon-fingerprint-scanning-index .path16:before {
+  content: "\e96e";
+  margin-left: -1em;
+  color: rgb(0, 0, 0);
+}
+.icon-fingerprint-scanning-index .path17:before {
+  content: "\e96f";
+  margin-left: -1em;
+  color: rgb(0, 0, 0);
+}
+.icon-fingerprint-scanning-index .path18:before {
+  content: "\e970";
+  margin-left: -1em;
+  color: rgb(0, 0, 0);
+}
+.icon-fingerprint-scanning-index .path19:before {
+  content: "\e971";
+  margin-left: -1em;
+  color: rgb(0, 0, 0);
+}
+.icon-fingerprint-search:before {
+  content: "\e972";
+}
+.icon-fingerprint-simple:before {
+  content: "\e973";
+}
+.icon-calendar:before {
+  content: "\e901";
+}
+.icon-clocktime:before {
+  content: "\e902";
+}
+.icon-cube:before {
+  content: "\e903";
+}
+.icon-cubelight:before {
+  content: "\e904";
+}
+.icon-dashboard:before {
+  content: "\e905";
+}
+.icon-history:before {
+  content: "\e906";
+}
+.icon-usertime:before {
+  content: "\e954";
+}
+.icon-replace:before {
+  content: "\e94c";
+}
+.icon-week:before {
+  content: "\e94d";
+}
+.icon-baggage:before {
+  content: "\e94e";
+}
+.icon-trash:before {
+  content: "\e94f";
+}
+.icon-erase:before {
+  content: "\e950";
+}
+.icon-paste:before {
+  content: "\e94a";
+}
+.icon-copy:before {
+  content: "\e94b";
+}
+.icon-sendemail:before {
+  content: "\e946";
+}
+.icon-exit:before {
+  content: "\e947";
+}
+.icon-key:before {
+  content: "\e948";
+}
+.icon-back:before {
+  content: "\e944";
+}
+.icon-next:before {
+  content: "\e945";
+}
+.icon-staff:before {
+  content: "\e943";
+}
+.icon-shop:before {
+  content: "\e907";
+}
+.icon-template:before {
+  content: "\e908";
+}
+.icon-remove:before {
+  content: "\e909";
+}
+.icon-access:before {
+  content: "\e90a";
+}
+.icon-address:before {
+  content: "\e90b";
+}
+.icon-apps:before {
+  content: "\e90c";
+}
+.icon-archive:before {
+  content: "\e90d";
+}
+.icon-calendar1:before {
+  content: "\e90e";
+}
+.icon-code:before {
+  content: "\e90f";
+}
+.icon-coin:before {
+  content: "\e910";
+}
+.icon-company:before {
+  content: "\e911";
+}
+.icon-cube1:before {
+  content: "\e912";
+}
+.icon-cubelight1:before {
+  content: "\e913";
+}
+.icon-dashboard1:before {
+  content: "\e914";
+}
+.icon-datarefresh:before {
+  content: "\e915";
+}
+.icon-documentsave:before {
+  content: "\e916";
+}
+.icon-documents:before {
+  content: "\e917";
+}
+.icon-download:before {
+  content: "\e918";
+}
+.icon-duplicate1:before {
+  content: "\e919";
+}
+.icon-edit:before {
+  content: "\e91a";
+}
+.icon-excel:before {
+  content: "\e91b";
+}
+.icon-expand:before {
+  content: "\e91c";
+}
+.icon-file:before {
+  content: "\e91d";
+}
+.icon-Floppy:before {
+  content: "\e91e";
+}
+.icon-folder:before {
+  content: "\e91f";
+}
+.icon-folder_add:before {
+  content: "\e920";
+}
+.icon-folder_delete:before {
+  content: "\e921";
+}
+.icon-folder_find:before {
+  content: "\e922";
+}
+.icon-globe:before {
+  content: "\e923";
+}
+.icon-group:before {
+  content: "\e924";
+}
+.icon-home:before {
+  content: "\e925";
+}
+.icon-inbox:before {
+  content: "\e926";
+}
+.icon-library:before {
+  content: "\e927";
+}
+.icon-license:before {
+  content: "\e928";
+}
+.icon-list:before {
+  content: "\e929";
+}
+.icon-log:before {
+  content: "\e92a";
+}
+.icon-logout:before {
+  content: "\e92b";
+}
+.icon-menu:before {
+  content: "\e92c";
+}
+.icon-newspaper:before {
+  content: "\e92d";
+}
+.icon-numberlist:before {
+  content: "\e92e";
+}
+.icon-package:before {
+  content: "\e92f";
+}
+.icon-pay:before {
+  content: "\e932";
+}
+.icon-pdf:before {
+  content: "\e933";
+}
+.icon-pdfexport:before {
+  content: "\e934";
+}
+.icon-pictures:before {
+  content: "\e935";
+}
+.icon-plus:before {
+  content: "\e936";
+}
+.icon-poticon .path1:before {
+  content: "\e937";
+  color: rgb(0, 50, 104);
+}
+.icon-poticon .path2:before {
+  content: "\e938";
+  margin-left: -1em;
+  color: rgb(0, 50, 104);
+}
+.icon-poticon .path3:before {
+  content: "\e939";
+  margin-left: -1em;
+  color: rgb(0, 50, 104);
+}
+.icon-poticon .path4:before {
+  content: "\e93a";
+  margin-left: -1em;
+  color: rgb(0, 50, 104);
+}
+.icon-poticon .path5:before {
+  content: "\e93b";
+  margin-left: -1em;
+  color: rgb(0, 50, 104);
+}
+.icon-poticon .path6:before {
+  content: "\e93c";
+  margin-left: -1em;
+  color: rgb(255, 255, 255);
+}
+.icon-poticon .path7:before {
+  content: "\e93d";
+  margin-left: -1em;
+  color: rgb(255, 255, 255);
+}
+.icon-poticon .path8:before {
+  content: "\e93e";
+  margin-left: -1em;
+  color: rgb(255, 255, 255);
+}
+.icon-poticon .path9:before {
+  content: "\e93f";
+  margin-left: -1em;
+  color: rgb(255, 255, 255);
+}
+.icon-poticon .path10:before {
+  content: "\e940";
+  margin-left: -1em;
+  color: rgb(255, 255, 255);
+}
+.icon-poticon .path11:before {
+  content: "\e941";
+  margin-left: -1em;
+  color: rgb(255, 255, 255);
+}
+.icon-poticon .path12:before {
+  content: "\e942";
+  margin-left: -1em;
+  color: rgb(255, 255, 255);
+}
+.icon-poticon .path13:before {
+  content: "\e951";
+  margin-left: -1em;
+  color: rgb(0, 91, 206);
+}
+.icon-poticon .path14:before {
+  content: "\e952";
+  margin-left: -1em;
+  color: rgb(0, 50, 104);
+}
+.icon-projects:before {
+  content: "\e953";
+}
+.icon-rename:before {
+  content: "\e95d";
+}
+.icon-Save:before {
+  content: "\e975";
+}
+.icon-squares:before {
+  content: "\e976";
+}
+.icon-table:before {
+  content: "\e977";
+}
+.icon-upload:before {
+  content: "\e978";
+}
+.icon-user:before {
+  content: "\e979";
+}
diff --git a/admin/css/icons.min.css b/admin/css/icons.min.css
new file mode 100644 (file)
index 0000000..2a1ad1f
--- /dev/null
@@ -0,0 +1 @@
+@font-face{font-family:pot;src:url(fonts/pot.ttf?8s8vvb) format('truetype'),url(fonts/pot.woff?8s8vvb) format('woff'),url(fonts/pot.svg?8s8vvb#pot) format('svg');font-weight:400;font-style:normal;font-display:block}[class*=" icon-"],[class^=icon-]{font-family:pot!important;speak:never;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.icon-category:before{content:"\e97d"}.icon-vacancydays:before{content:"\e97e"}.icon-sector:before{content:"\e97f"}.icon-lock:before{content:"\e97b"}.icon-unlock:before{content:"\e97c"}.icon-entry:before{content:"\e97a"}.icon-settings:before{content:"\e974"}.icon-dataset:before{content:"\e930"}.icon-check:before{content:"\e931"}.icon-pause:before{content:"\e900"}.icon-duplicate:before{content:"\e949"}.icon-finger1:before{content:"\e955"}.icon-finger2:before{content:"\e956"}.icon-finger3:before{content:"\e957"}.icon-finger4:before{content:"\e958"}.icon-finger5:before{content:"\e959"}.icon-fingerprint-check:before{content:"\e95a"}.icon-fingerprint-crosshair:before{content:"\e95b"}.icon-fingerprint-remove:before{content:"\e95c"}.icon-fingerprint-scanning:before{content:"\e95e"}.icon-fingerprint-scanning-index .path1:before{content:"\e95f";color:#000}.icon-fingerprint-scanning-index .path2:before{content:"\e960";margin-left:-1em;color:#000}.icon-fingerprint-scanning-index .path3:before{content:"\e961";margin-left:-1em;color:#000}.icon-fingerprint-scanning-index .path4:before{content:"\e962";margin-left:-1em;color:#000}.icon-fingerprint-scanning-index .path5:before{content:"\e963";margin-left:-1em;color:#000}.icon-fingerprint-scanning-index .path6:before{content:"\e964";margin-left:-1em;color:#000}.icon-fingerprint-scanning-index .path7:before{content:"\e965";margin-left:-1em;color:#000}.icon-fingerprint-scanning-index .path8:before{content:"\e966";margin-left:-1em;color:#000}.icon-fingerprint-scanning-index .path9:before{content:"\e967";margin-left:-1em;color:#000}.icon-fingerprint-scanning-index .path10:before{content:"\e968";margin-left:-1em;color:#000;opacity:.4}.icon-fingerprint-scanning-index .path11:before{content:"\e969";margin-left:-1em;color:#000;opacity:.4}.icon-fingerprint-scanning-index .path12:before{content:"\e96a";margin-left:-1em;color:#000;opacity:.4}.icon-fingerprint-scanning-index .path13:before{content:"\e96b";margin-left:-1em;color:#000;opacity:.4}.icon-fingerprint-scanning-index .path14:before{content:"\e96c";margin-left:-1em;color:#000;opacity:.4}.icon-fingerprint-scanning-index .path15:before{content:"\e96d";margin-left:-1em;color:#000}.icon-fingerprint-scanning-index .path16:before{content:"\e96e";margin-left:-1em;color:#000}.icon-fingerprint-scanning-index .path17:before{content:"\e96f";margin-left:-1em;color:#000}.icon-fingerprint-scanning-index .path18:before{content:"\e970";margin-left:-1em;color:#000}.icon-fingerprint-scanning-index .path19:before{content:"\e971";margin-left:-1em;color:#000}.icon-fingerprint-search:before{content:"\e972"}.icon-fingerprint-simple:before{content:"\e973"}.icon-calendar:before{content:"\e901"}.icon-clocktime:before{content:"\e902"}.icon-cube:before{content:"\e903"}.icon-cubelight:before{content:"\e904"}.icon-dashboard:before{content:"\e905"}.icon-history:before{content:"\e906"}.icon-usertime:before{content:"\e954"}.icon-replace:before{content:"\e94c"}.icon-week:before{content:"\e94d"}.icon-baggage:before{content:"\e94e"}.icon-trash:before{content:"\e94f"}.icon-erase:before{content:"\e950"}.icon-paste:before{content:"\e94a"}.icon-copy:before{content:"\e94b"}.icon-sendemail:before{content:"\e946"}.icon-exit:before{content:"\e947"}.icon-key:before{content:"\e948"}.icon-back:before{content:"\e944"}.icon-next:before{content:"\e945"}.icon-staff:before{content:"\e943"}.icon-shop:before{content:"\e907"}.icon-template:before{content:"\e908"}.icon-remove:before{content:"\e909"}.icon-access:before{content:"\e90a"}.icon-address:before{content:"\e90b"}.icon-apps:before{content:"\e90c"}.icon-archive:before{content:"\e90d"}.icon-calendar1:before{content:"\e90e"}.icon-code:before{content:"\e90f"}.icon-coin:before{content:"\e910"}.icon-company:before{content:"\e911"}.icon-cube1:before{content:"\e912"}.icon-cubelight1:before{content:"\e913"}.icon-dashboard1:before{content:"\e914"}.icon-datarefresh:before{content:"\e915"}.icon-documentsave:before{content:"\e916"}.icon-documents:before{content:"\e917"}.icon-download:before{content:"\e918"}.icon-duplicate1:before{content:"\e919"}.icon-edit:before{content:"\e91a"}.icon-excel:before{content:"\e91b"}.icon-expand:before{content:"\e91c"}.icon-file:before{content:"\e91d"}.icon-Floppy:before{content:"\e91e"}.icon-folder:before{content:"\e91f"}.icon-folder_add:before{content:"\e920"}.icon-folder_delete:before{content:"\e921"}.icon-folder_find:before{content:"\e922"}.icon-globe:before{content:"\e923"}.icon-group:before{content:"\e924"}.icon-home:before{content:"\e925"}.icon-inbox:before{content:"\e926"}.icon-library:before{content:"\e927"}.icon-license:before{content:"\e928"}.icon-list:before{content:"\e929"}.icon-log:before{content:"\e92a"}.icon-logout:before{content:"\e92b"}.icon-menu:before{content:"\e92c"}.icon-newspaper:before{content:"\e92d"}.icon-numberlist:before{content:"\e92e"}.icon-package:before{content:"\e92f"}.icon-pay:before{content:"\e932"}.icon-pdf:before{content:"\e933"}.icon-pdfexport:before{content:"\e934"}.icon-pictures:before{content:"\e935"}.icon-plus:before{content:"\e936"}.icon-poticon .path1:before{content:"\e937";color:#003268}.icon-poticon .path2:before{content:"\e938";margin-left:-1em;color:#003268}.icon-poticon .path3:before{content:"\e939";margin-left:-1em;color:#003268}.icon-poticon .path4:before{content:"\e93a";margin-left:-1em;color:#003268}.icon-poticon .path5:before{content:"\e93b";margin-left:-1em;color:#003268}.icon-poticon .path6:before{content:"\e93c";margin-left:-1em;color:#fff}.icon-poticon .path7:before{content:"\e93d";margin-left:-1em;color:#fff}.icon-poticon .path8:before{content:"\e93e";margin-left:-1em;color:#fff}.icon-poticon .path9:before{content:"\e93f";margin-left:-1em;color:#fff}.icon-poticon .path10:before{content:"\e940";margin-left:-1em;color:#fff}.icon-poticon .path11:before{content:"\e941";margin-left:-1em;color:#fff}.icon-poticon .path12:before{content:"\e942";margin-left:-1em;color:#fff}.icon-poticon .path13:before{content:"\e951";margin-left:-1em;color:#005bce}.icon-poticon .path14:before{content:"\e952";margin-left:-1em;color:#003268}.icon-projects:before{content:"\e953"}.icon-rename:before{content:"\e95d"}.icon-Save:before{content:"\e975"}.icon-squares:before{content:"\e976"}.icon-table:before{content:"\e977"}.icon-upload:before{content:"\e978"}.icon-user:before{content:"\e979"}
\ No newline at end of file
diff --git a/admin/css/theme.css b/admin/css/theme.css
new file mode 100644 (file)
index 0000000..7d36c92
--- /dev/null
@@ -0,0 +1,1054 @@
+/* W3PRO.CSS 4.13 June 2019 by Jan Egil and Borge Refsnes */
+html{box-sizing:border-box}*,*:before,*:after{box-sizing:inherit}
+/* Extract from normalize.css by Nicolas Gallagher and Jonathan Neal git.io/normalize */
+html{-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}
+html,body {-webkit-user-select: none;-ms-user-select: none;user-select: none;-moz-user-select:none;}
+article,aside,details,figcaption,figure,footer,header,main,menu,nav,section{display:block}summary{display:list-item}
+audio,canvas,progress,video{display:inline-block}progress{vertical-align:baseline}
+audio:not([controls]){display:none;height:0}[hidden],template{display:none}
+a{background-color:transparent}a:active,a:hover{outline-width:0}
+abbr[title]{border-bottom:none;text-decoration:underline;text-decoration:underline dotted}
+b,strong{font-weight:bolder}dfn{font-style:italic}mark{background:#ff0;color:#000}
+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}figure{margin:1em 40px}img{border-style:none}
+code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}hr{box-sizing:content-box;height:0;overflow:visible}
+button,input,select,textarea,optgroup{font:inherit;margin:0}optgroup{font-weight:bold}
+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{border:1px solid #c0c0c0;margin:0 2px;padding:.35em .625em .75em}
+legend{color:inherit;display:table;max-width:100%;padding:0;white-space:normal}textarea{overflow:auto}
+[type=checkbox],[type=radio]{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}
+/* End extract */
+/* html,body {
+       background-color: #52638e;
+} */
+html,body{font-family:Verdana,sans-serif;font-size:10pt;line-height:1.5}html{overflow-x:hidden}
+h1{font-size:36px}h2{font-size:30px}h3{font-size:24px}h4{font-size:20px}h5{font-size:18px}h6{font-size:16px}.serif{font-family:serif}
+h1,h2,h3,h4,h5,h6{font-family:"Segoe UI",Arial,sans-serif;font-weight:400;margin: 0}.wide{letter-spacing:4px}
+hr{border:0;border-top:1px solid #eee;margin:20px 0}
+.img{max-width:100%;height:auto; vertical-align:middle}a{color:inherit}
+.table,.table-all{border-collapse:collapse;border-spacing:0;width:100%;display:table}.table-all{border:1px solid #ccc}
+.bordered tr,.table-all tr{border-bottom:1px solid #ddd}.striped tbody tr:nth-child(even){background-color:#f1f1f1}
+.table-all tr:nth-child(odd){background-color:#fff}.table-all tr:nth-child(even){background-color:#f1f1f1}
+.hoverable tbody tr:hover,.ul.hoverable li:hover{background-color:#ccc}.centered tr th,.centered tr td{text-align:center}
+.table td,.table th,.table-all td,.table-all th{padding:8px 8px;display:table-cell;text-align:left;vertical-align:top}
+.table th:first-child,.table td:first-child,.table-all th:first-child,.table-all td:first-child{padding-left:16px}
+.btn,.button{border:none;display:inline-block;padding:8px 16px;vertical-align:middle;overflow:hidden;text-decoration:none;color:inherit;background-color:inherit;text-align:center;cursor:pointer;white-space:nowrap}
+.btn:hover{box-shadow:0 8px 16px 0 rgba(0,0,0,0.2),0 6px 20px 0 rgba(0,0,0,0.19)}
+.btn,.button{-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}   
+.disabled,.btn:disabled,.button:disabled{cursor:not-allowed;background-color: #e6e6e6}.disabled *,:disabled *{pointer-events:none}
+.btn.disabled:hover,.btn:disabled:hover{box-shadow:none}
+.badge,.tag{background-color:#000;color:#fff;display:inline-block;padding-left:8px;padding-right:8px;text-align:center}.badge{border-radius:50%}
+.ul{list-style-type:none;padding:0;margin:0}.ul li{padding:8px 16px;border-bottom:1px solid #ddd}.ul li:last-child{border-bottom:none}
+.tooltip,.display-container{position:relative}.tooltip .text{display:none}.tooltip:hover .text{display:inline-block}
+.ripple:active{opacity:0.5}.ripple{transition:opacity 0s}
+.input{padding:6px;display:block;border: 1px solid #ccc;width:100%;background-color: #fff; }/*#e8f0fe*/
+.select{padding:2px 0; display:block;width:100%;border:1px solid #ccc;background-color: #fff;}
+.dropdown-click,.dropdown-hover{position:relative;display:inline-block;cursor:pointer}
+.dropdown-hover:hover .dropdown-content{display:block; }
+.dropdown-hover:first-child,.dropdown-click:hover{background-color:#ccc;color:#000}
+.dropdown-hover:hover > .button:first-child,.dropdown-click:hover > .button:first-child{background-color:#ccc;color:#000}
+.dropdown-content{cursor:auto;color:#000;background-color:#fff;display:none;position:absolute;min-width:160px;margin:0;padding:0;z-index:1}
+.check,.radio{width:24px;height:24px;position:relative;top:6px}
+.sidebar{height:100%;width:160px;background-color:#fff;position:fixed!important;z-index:1;overflow:auto}
+.bar-block .dropdown-hover,.bar-block .dropdown-click{width:100%}
+.bar-block .dropdown-hover .dropdown-content,.bar-block .dropdown-click .dropdown-content{min-width:100%}
+.bar-block .dropdown-hover .button,.bar-block .dropdown-click .button{width:100%;text-align:left;padding:8px 16px}
+.main,#main{transition:margin-left .4s}
+.modal{z-index:3;display:none;padding-top:100px;position:fixed;left:0;top:0;width:100%;height:100%;overflow:auto;background-color:rgb(0,0,0);background-color:rgba(0,0,0,0.4)}
+.modal-content{margin:auto;background-color:#fff;position:relative;padding:0;outline:0;width:600px}
+.bar{width:100%}.center .bar{display:inline-block;width:auto}
+.bar .bar-item{padding:8px 16px;float:left;width:auto;border:none;display:block;outline:0}
+.bar .dropdown-hover,.bar .dropdown-click{position:static;float:left}
+.bar .button{white-space:normal}
+.bar-block .bar-item{width:100%;display:block;padding:8px 16px;text-align:left;border:none;white-space:normal;float:none;outline:0}
+.bar-block.center .bar-item{text-align:center}.block{display:block;width:100%}
+.responsive{display:block;overflow-x:auto}
+.container:after,.container:before,.datapanel:after,.datapanel:before,.row:after,.row:before,.row-padding:after,.row-padding:before,
+.cell-row:before,.cell-row:after,.clear:after,.clear:before,.bar:before,.bar:after{content:"";display:table;clear:both}
+.col,.half,.third,.twothird,.threequarter,.quarter,.fifth,.twofifth,.threefifth,.fourfifth{float:left;width:100%}
+.col.s1{width:8.33333%}.col.s2{width:16.66666%}.col.s3{width:24.99999%}.col.s4{width:33.33333%}
+.col.s5{width:41.66666%}.col.s6{width:49.99999%}.col.s7{width:58.33333%}.col.s8{width:66.66666%}
+.col.s9{width:74.99999%}.col.s10{width:83.33333%}.col.s11{width:91.66666%}.col.s12{width:99.99999%}
+@media (min-width:601px){.col.m1{width:8.33333%}.col.m2{width:16.66666%}.col.m3,.quarter{width:24.99999%}.col.m4,.third{width:33.33333%}.fifth{width:20%;min-width:100px}
+.col.m5{width:41.66666%}.col.m6,.half{width:49.99999%}.col.m7{width:58.33333%}.col.m8,.twothird{width:66.66666%}
+.col.m9,.threequarter{width:74.99999%}.col.m10{width:83.33333%}.col.m11{width:91.66666%}.col.m12{width:99.99999%}.twofifth{width:40%}.threefifth{width:60%}.fourfifth{width:80%}}
+@media (min-width:993px){.col.l1{width:8.33333%}.col.l2{width:16.66666%}.col.l3{width:24.99999%}.col.l4{width:33.33333%}
+.col.l5{width:41.66666%}.col.l6{width:49.99999%}.col.l7{width:58.33333%}.col.l8{width:66.66666%}
+.col.l9{width:74.99999%}.col.l10{width:83.33333%}.col.l11{width:91.66666%}.col.l12{width:99.99999%}}
+.rest{overflow:hidden}.stretch{margin-left:-16px;margin-right:-16px}
+.content,.auto{margin-left:auto;margin-right:auto}.content{max-width:980px}.auto{max-width:1140px}
+.cell-row{display:table;width:100%}.cell{display:table-cell;vertical-align: top;}
+.cell-top{vertical-align:top}.cell-middle{vertical-align:middle}.cell-bottom{vertical-align:bottom}
+.hide{display:none!important}.show-block,.show{display:block!important}.show-inline-block{display:inline-block!important}
+@media (max-width:1205px){.auto{max-width:95%}}
+@media (max-width:600px){.modal-content{margin:0 10px;width:auto!important}.modal{padding-top:30px}
+.dropdown-hover.mobile .dropdown-content,.dropdown-click.mobile .dropdown-content{position:relative}   
+.hide-small{display:none!important}.mobile{display:block;width:100%!important}.bar-item.mobile,.dropdown-hover.mobile,.dropdown-click.mobile{text-align:center}
+.dropdown-hover.mobile,.dropdown-hover.mobile .btn,.dropdown-hover.mobile .button,.dropdown-click.mobile,.dropdown-click.mobile .btn,.dropdown-click.mobile .button{width:100%}}
+@media (max-width:768px){.modal-content{width:500px}.modal{padding-top:50px}}
+@media (min-width:993px){.modal-content{width:900px}.hide-large{display:none!important}.sidebar.collapse{display:block!important}}
+@media (max-width:992px) and (min-width:601px){.hide-medium{display:none!important}}
+@media (max-width:992px){.sidebar.collapse{display:none}.main{margin-left:0!important;margin-right:0!important}.auto{max-width:100%}}
+.top,.bottom{position:fixed;width:100%;z-index:1}.top{top:0}.bottom{bottom:0}
+.overlay{position:fixed;display:none;width:100%;height:100%;top:0;left:0;right:0;bottom:0;background-color:rgba(0,0,0,0.5);z-index:2}
+.display-topleft{position:absolute;left:0;top:0}.display-topright{position:absolute;right:0;top:0}
+.display-bottomleft{position:absolute;left:0;bottom:0}.display-bottomright{position:absolute;right:0;bottom:0}
+.display-middle{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);-ms-transform:translate(-50%,-50%)}
+.display-left{position:absolute;top:50%;left:0%;transform:translate(0%,-50%);-ms-transform:translate(-0%,-50%)}
+.display-right{position:absolute;top:50%;right:0%;transform:translate(0%,-50%);-ms-transform:translate(0%,-50%)}
+.display-topmiddle{position:absolute;left:50%;top:0;transform:translate(-50%,0%);-ms-transform:translate(-50%,0%)}
+.display-bottommiddle{position:absolute;left:50%;bottom:0;transform:translate(-50%,0%);-ms-transform:translate(-50%,0%)}
+.display-container:hover .display-hover{display:block}.display-container:hover span.display-hover{display:inline-block}.display-hover{display:none}
+.display-position{position:absolute}
+.circle{border-radius:50%}
+.round-small{border-radius:2px}.round,.round-medium{border-radius:4px}.round-large{border-radius:8px}.round-xlarge{border-radius:16px}.round-xxlarge{border-radius:32px}
+.row-padding,.row-padding>.half,.row-padding>.third,.row-padding>.twothird,.row-padding>.threequarter,.row-padding>.quarter,.row-padding>.col{padding:0 8px}
+.container,.datapanel{padding:0.01em 8px}.datapanel{margin-top:8px;margin-bottom:8px}
+.code,.codespan{font-family:Consolas,"courier new";font-size:16px}
+.code{width:auto;background-color:#fff;padding:8px 12px;border-left:4px solid #4CAF50;word-wrap:break-word}
+.codespan{color:crimson;background-color:#f1f1f1;padding-left:4px;padding-right:4px;font-size:110%}
+.card,.card-2{box-shadow:0 2px 5px 0 rgba(0,0,0,0.16)}
+.card-4,.hover-shadow:hover{box-shadow:0 4px 10px 0 rgba(0,0,0,0.2),0 4px 20px 0 rgba(0,0,0,0.19)}
+.spin{animation:spin 2s infinite linear}@keyframes spin{0%{transform:rotate(0deg)}100%{transform:rotate(359deg)}}
+.animate-fading{animation:fading 2s infinite}@keyframes fading{0%{opacity:0}50%{opacity:1}100%{opacity:0}}
+.animate-opacity{animation:opac 0.8s}@keyframes opac{from{opacity:0} to{opacity:1}}
+.animate-top{position:relative;animation:animatetop 1s}@keyframes animatetop{from{top:-300px;opacity:0} to{top:0;opacity:1}}
+.animate-left{position:relative;animation:animateleft 0.4s}@keyframes animateleft{from{left:-300px;opacity:0} to{left:0;opacity:1}}
+.animate-right{position:relative;animation:animateright 0.4s}@keyframes animateright{from{right:-300px;opacity:0} to{right:0;opacity:1}}
+.animate-bottom{position:relative;animation:animatebottom 1s}@keyframes animatebottom{from{bottom:-300px;opacity:0} to{bottom:0;opacity:1}}
+.animate-zoom {animation:animatezoom 0.6s}@keyframes animatezoom{from{transform:scale(0)} to{transform:scale(1)}}
+.animate-input{transition:width 0.4s ease-in-out}.animate-input:focus{width:100%!important}
+.opacity,.hover-opacity:hover{opacity:0.60}.opacity-off,.hover-opacity-off:hover{opacity:1}
+.opacity-max{opacity:0.25}.opacity-min{opacity:0.75}
+.greyscale-max,.grayscale-max,.hover-greyscale:hover,.hover-grayscale:hover{filter:grayscale(100%)}
+.greyscale,.grayscale{filter:grayscale(75%)}.greyscale-min,.grayscale-min{filter:grayscale(50%)}
+.sepia{filter:sepia(75%)}.sepia-max,.hover-sepia:hover{filter:sepia(100%)}.sepia-min{filter:sepia(50%)}
+.tiny{font-size:10px!important}.small{font-size:12px!important}.medium{font-size:15px!important}.large{font-size:18px!important}
+.xlarge{font-size:24px!important}.xxlarge{font-size:36px!important}.xxxlarge{font-size:48px!important}.jumbo{font-size:64px!important}
+.left-align{text-align:left!important}.right-align{text-align:right!important}.justify{text-align:justify!important}.center{text-align:center!important}
+.border-0{border:0!important}.border{border:1px solid #ccc!important}
+.border-top{border-top:1px solid #ccc!important}.border-bottom{border-bottom:1px solid #ccc!important}
+.border-left{border-left:1px solid #ccc!important}.border-right{border-right:1px solid #ccc!important}
+.topbar{border-top:6px solid #ccc!important}.bottombar{border-bottom:6px solid #ccc!important}
+.leftbar{border-left:6px solid #ccc!important}.rightbar{border-right:6px solid #ccc!important}
+.section,.code{margin-top:16px!important;margin-bottom:16px!important}
+.margin{margin:16px!important}.margin-top{margin-top:16px!important}.margin-bottom{margin-bottom:16px!important}
+.margin-left{margin-left:16px!important}.margin-right{margin-right:16px!important}
+.padding-small{padding:4px 8px!important}.padding{padding:8px 16px!important}.padding-large{padding:12px 24px!important}
+.padding-16{padding-top:16px!important;padding-bottom:16px!important}.padding-24{padding-top:24px!important;padding-bottom:24px!important}
+.padding-32{padding-top:32px!important;padding-bottom:32px!important}.padding-48{padding-top:48px!important;padding-bottom:48px!important}
+.padding-64{padding-top:64px!important;padding-bottom:64px!important}
+.left{float:left!important}.right{float:right!important}
+.button:hover{color:#fff!important;background-color:#343434!important}
+.transparent,.hover-none:hover{background-color:transparent!important}
+.hover-none:hover{box-shadow:none!important}
+/* DEFAULT COLORS */
+.amber,.hover-amber:hover{color:#000!important;background-color:#ffc107!important}
+.aqua,.hover-aqua:hover{color:#000!important;background-color:#00ffff!important}
+.blue,.hover-blue:hover{color:#fff!important;background-color:#2196F3!important}
+.light-blue,.hover-light-blue:hover{color:#000!important;background-color:#87CEEB!important}
+.brown,.hover-brown:hover{color:#fff!important;background-color:#795548!important}
+.cyan,.hover-cyan:hover{color:#000!important;background-color:#00bcd4!important}
+.blue-grey,.hover-blue-grey:hover{color:#fff!important;background-color:#607d8b!important}
+.green,.hover-green:hover{color:#fff!important;background-color:#4CAF50!important}
+.light-green,.hover-light-green:hover{color:#000!important;background-color:#8bc34a!important}
+.indigo,.hover-indigo:hover{color:#fff!important;background-color:#3f51b5!important}
+.khaki,.hover-khaki:hover{color:#000!important;background-color:#f0e68c!important}
+.lime,.hover-lime:hover{color:#000!important;background-color:#cddc39!important}
+.orange,.hover-orange:hover{color:#000!important;background-color:#ff9800!important}
+.deep-orange,.hover-deep-orange:hover{color:#fff!important;background-color:#ff5722!important}
+.pink,.hover-pink:hover{color:#fff!important;background-color:#e91e63!important}
+.purple,.hover-purple:hover{color:#fff!important;background-color:#9c27b0!important}
+.deep-purple,.hover-deep-purple:hover{color:#fff!important;background-color:#673ab7!important}
+.red,.hover-red:hover{color:#fff!important;background-color:#f44336!important}
+.sand,.hover-sand:hover{color:#000!important;background-color:#fdf5e6!important}
+.teal,.hover-teal:hover{color:#fff!important;background-color:#009688!important}
+.yellow,.hover-yellow:hover{color:#000!important;background-color:#ffeb3b!important}
+.white,.hover-white:hover{color:#000!important;background-color:#fff!important}
+.black,.hover-black:hover{color:#fff!important;background-color:#000!important}
+.grey,.hover-grey:hover{color:#000!important;background-color:#9e9e9e!important}
+.light-grey,.hover-light-grey:hover{color:#000!important;background-color:#f1f1f1!important}
+.dark-grey,.hover-dark-grey:hover{color:#fff!important;background-color:#616161!important}
+.pale-red,.hover-pale-red:hover{color:#000!important;background-color:#ffe7e7!important}.pale-green,.hover-pale-green:hover{color:#000!important;background-color:#e7ffe7!important}
+.pale-yellow,.hover-pale-yellow:hover{color:#000!important;background-color:#ffffd7!important}.pale-blue,.hover-pale-blue:hover{color:#000!important;background-color:#e7ffff!important}
+.text-align-right { text-align: right;}
+.text-amber,.hover-text-amber:hover{color:#ffc107!important}
+.text-aqua,.hover-text-aqua:hover{color:#00ffff!important}
+.text-blue,.hover-text-blue:hover{color:#2196F3!important}
+.text-light-blue,.hover-text-light-blue:hover{color:#87CEEB!important}
+.text-brown,.hover-text-brown:hover{color:#795548!important}
+.text-cyan,.hover-text-cyan:hover{color:#00bcd4!important}
+.text-blue-grey,.hover-text-blue-grey:hover{color:#607d8b!important}
+.text-green,.hover-text-green:hover{color:#4CAF50!important}
+.text-light-green,.hover-text-light-green:hover{color:#8bc34a!important}
+.text-indigo,.hover-text-indigo:hover{color:#3f51b5!important}
+.text-khaki,.hover-text-khaki:hover{color:#b4aa50!important}
+.text-lime,.hover-text-lime:hover{color:#cddc39!important}
+.text-orange,.hover-text-orange:hover{color:#ff9800!important}
+.text-deep-orange,.hover-text-deep-orange:hover{color:#ff5722!important}
+.text-pink,.hover-text-pink:hover{color:#e91e63!important}
+.text-purple,.hover-text-purple:hover{color:#9c27b0!important}
+.text-deep-purple,.hover-text-deep-purple:hover{color:#673ab7!important}
+.text-red,.hover-text-red:hover{color:#f44336!important}
+.text-sand,.hover-text-sand:hover{color:#fdf5e6!important}
+.text-teal,.hover-text-teal:hover{color:#009688!important}
+.text-yellow,.hover-text-yellow:hover{color:#d2be0e!important}
+.text-white,.hover-text-white:hover{color:#fff!important}
+.text-black,.hover-text-black:hover{color:#000!important}
+.text-grey,.hover-text-grey:hover{color:#757575!important}
+.text-light-grey,.hover-text-light-grey:hover{color:#f1f1f1!important}
+.text-dark-grey,.hover-text-dark-grey:hover{color:#3a3a3a!important}
+.border-amber,.hover-border-amber:hover{border-color:#ffc107!important}
+.border-aqua,.hover-border-aqua:hover{border-color:#00ffff!important}
+.border-blue,.hover-border-blue:hover{border-color:#2196F3!important}
+.border-light-blue,.hover-border-light-blue:hover{border-color:#87CEEB!important}
+.border-brown,.hover-border-brown:hover{border-color:#795548!important}
+.border-cyan,.hover-border-cyan:hover{border-color:#00bcd4!important}
+.border-blue-grey,.hover-blue-grey:hover{border-color:#607d8b!important}
+.border-green,.hover-border-green:hover{border-color:#4CAF50!important}
+.border-light-green,.hover-border-light-green:hover{border-color:#8bc34a!important}
+.border-indigo,.hover-border-indigo:hover{border-color:#3f51b5!important}
+.border-khaki,.hover-border-khaki:hover{border-color:#f0e68c!important}
+.border-lime,.hover-border-lime:hover{border-color:#cddc39!important}
+.border-orange,.hover-border-orange:hover{border-color:#ff9800!important}
+.border-deep-orange,.hover-border-deep-orange:hover{border-color:#ff5722!important}
+.border-pink,.hover-border-pink:hover{border-color:#e91e63!important}
+.border-purple,.hover-border-purple:hover{border-color:#9c27b0!important}
+.border-deep-purple,.hover-border-deep-purple:hover{border-color:#673ab7!important}
+.border-red,.hover-border-red:hover{border-color:#f44336!important}
+.border-sand,.hover-border-sand:hover{border-color:#fdf5e6!important}
+.border-teal,.hover-border-teal:hover{border-color:#009688!important}
+.border-yellow,.hover-border-yellow:hover{border-color:#ffeb3b!important}
+.border-white,.hover-border-white:hover{border-color:#fff!important}
+.border-black,.hover-border-black:hover{border-color:#000!important}
+.border-grey,.hover-border-grey:hover{border-color:#9e9e9e!important}
+.border-light-grey,.hover-border-light-grey:hover{border-color:#f1f1f1!important}
+.border-dark-grey,.hover-border-dark-grey:hover{border-color:#616161!important}
+.border-pale-red,.hover-border-pale-red:hover{border-color:#ffe7e7!important}.border-pale-green,.hover-border-pale-green:hover{border-color:#e7ffe7!important}
+.border-pale-yellow,.hover-border-pale-yellow:hover{border-color:#ffffd7!important}.border-pale-blue,.hover-border-pale-blue:hover{border-color:#e7ffff!important}
+/* DEFAULT THEME */
+.theme-l5 {color:#000 !important; background-color:#f6f8fc !important}
+.theme-l4 {color:#000 !important; background-color:#e1e9f6 !important}
+.theme-l3 {color:#000 !important; background-color:#c3d3ed !important}
+.theme-l2 {color:#000 !important; background-color:#a5bee4 !important}
+.theme-l1 {color:#fff !important; background-color:#88a8db !important}
+.theme-d1 {color:#fff !important; background-color:#5180cb !important}
+.theme-d2 {color:#fff !important; background-color:#3a6fc3 !important}
+.theme-d3 {color:#fff !important; background-color:#3361aa !important}
+.theme-d4 {color:#fff !important; background-color:#2c5392 !important}
+.theme-d5 {color:#fff !important; background-color:#24457a !important}
+
+.theme-light {color:#000 !important; background-color:#f6f8fc !important}
+.theme-dark {color:#fff !important; background-color:#24457a !important}
+.theme-action {color:#fff !important; background-color:#24457a !important}
+
+.theme {color:#fff !important; background-color:#6a92d3 !important}
+.text-theme {color:#6a92d3 !important}
+.border-theme {border-color:#6a92d3 !important}
+
+.hover-theme:hover {color:#fff !important; background-color:#6a92d3 !important}
+.hover-text-theme:hover {color:#6a92d3 !important}
+.hover-border-theme:hover {border-color:#6a92d3 !important}
+
+/* .label { color: #000; font-size: 8pt;} */
+/* #main {margin-left: 210px;} */
+/* @media (max-width:768px){
+  #sidebar { display: none;}
+  #main { margin-left: 0px;} 
+} */
+
+.info-panel {
+  padding: 3px;
+  color: #ff4500;
+  border: 1px solid #ff4500;
+  background-color: #f89774;
+}
+
+.error-panel {
+       padding: 3px;
+  color: #ff0000;
+  border: 1px solid #ff0000;
+  background-color: #fcb2b2;
+}
+
+.table {
+  table-layout: fixed;
+}
+
+.text-line-through { text-decoration: line-through; }
+
+#snackbar {
+  visibility: hidden;
+  min-width: 250px;
+  margin-left: -125px;
+  background-color: #333;
+  color: #fff;
+  text-align: center;
+  
+  padding: 16px;
+  position: fixed;
+  z-index: 1;
+  left: 50%;
+  bottom: 30px;
+  font-size: 17px;
+}
+
+#snackbar.show {
+  visibility: visible;
+  -webkit-animation: fadein 0.5s, fadeout 0.5s 2.5s;
+  animation: fadein 0.5s, fadeout 0.5s 2.5s;
+}
+
+@-webkit-keyframes fadein {
+  from {bottom: 0; opacity: 0;} 
+  to {bottom: 30px; opacity: 1;}
+}
+
+@keyframes fadein {
+  from {bottom: 0; opacity: 0;}
+  to {bottom: 30px; opacity: 1;}
+}
+
+@-webkit-keyframes fadeout {
+  from {bottom: 30px; opacity: 1;} 
+  to {bottom: 0; opacity: 0;}
+}
+
+@keyframes fadeout {
+  from {bottom: 30px; opacity: 1;}
+  to {bottom: 0; opacity: 0;}
+}
+
+.tabulator-header-filter > input {
+  background-color: #fff;
+  border: 1px solid #ccc;
+  font-weight: normal;
+}
+
+.readonly {
+  pointer-events:none;
+  color: #000!important;
+  background-color: #d3d3d3!important;
+}
+
+
+
+.right-side-bg {
+  background: url("../img/bg1.jpg");
+  background-size: cover;
+  min-height: 100vh;
+}
+
+
+
+
+/* .mceContentBody { 
+  background: #fff;
+  color:#000;
+} */
+
+/* .tabulator-row-even {
+  background-color: #757575;
+} */
+
+
+button
+{
+       background-color: #f4f4f4;
+       border: 1pt solid #cccccc;
+       font-size: 10pt;
+       color: #000;
+       line-height: 1line;
+       text-align: center;
+}
+button:hover
+{
+       background-color: #343434;
+}
+button:pressed
+{
+       background-color: #343434;
+}
+button:focus
+{
+       background-color: #343434;
+}
+
+
+
+
+header
+{
+       background-color: #fff;
+       box-sizing: border-box;
+}
+
+.actionbtn {
+       background-color: #293146;
+       color: #fff;
+}
+
+::-webkit-input-placeholder
+{
+       color: rgba(60.3922%,60.3922%,60.3922%,1);
+}
+
+
+textarea
+{
+       background-color: #fff;
+       border-top-color: rgba(80%,80%,80%,1);
+       border-right-color: rgba(80%,80%,80%,1);
+       border-bottom-color: rgba(80%,80%,80%,1);
+       border-left-color: rgba(80%,80%,80%,1);
+       border-top-style: solid;
+       border-right-style: solid;
+       border-bottom-style: solid;
+       border-left-style: solid;
+       border-top-width: 1pt;
+       border-right-width: 1pt;
+       border-bottom-width: 1pt;
+       border-left-width: 1pt;
+       font-size: 11pt;
+       color: #000;
+       line-height: 1line;
+       text-align: left;
+       /* margin-top: 0.88em;
+       margin-right: 0.75em;
+       margin-bottom: 0.63em;
+       margin-left: 0.75em;
+       top: 0pt;
+       right: 30pt;
+       bottom: 0pt;
+       left: 0pt;
+       position: absolute;
+       box-sizing: border-box; */
+}
+textarea:focus
+{
+       border-top-color: rgba(0%,43.9216%,81.1765%,1);
+       border-right-color: rgba(0%,43.9216%,81.1765%,1);
+       border-bottom-color: rgba(0%,43.9216%,81.1765%,1);
+       border-left-color: rgba(0%,43.9216%,81.1765%,1);
+}
+textarea:placeholder
+{
+       color: rgba(80%,80%,80%,1);
+}
+/* textarea .text
+{
+       
+} */
+textarea .scrollbar_track
+{
+       width: 30pt;
+       top: 0pt;
+       right: 0pt;
+       bottom: 0pt;
+       position: absolute;
+       box-sizing: border-box;
+}
+
+
+footer
+{
+       background-color: #fff;
+       box-sizing: border-box;
+}
+
+
+div.group_container
+{
+       background-color: #e3e3e3;
+       border-top-color: rgba(80%,80%,80%,1);
+       border-right-color: rgba(80%,80%,80%,1);
+       border-bottom-color: rgba(80%,80%,80%,1);
+       border-left-color: rgba(80%,80%,80%,1);
+       border-top-style: solid;
+       border-right-style: solid;
+       border-bottom-style: solid;
+       border-left-style: solid;
+       border-top-width: 1pt;
+       border-right-width: 1pt;
+       border-bottom-width: 1pt;
+  border-left-width: 1pt;
+  padding-top: 4px;
+  padding-bottom: 8px;
+}
+
+/* Custom Styles */
+.ListView_Default
+{
+
+       background-color: rgba(0%,0%,0%,0);
+       border-top-style: none;
+       border-right-style: none;
+       border-bottom-style: none;
+       border-left-style: none;
+
+       color: #000;
+       text-align: left;
+       margin-top: 2pt;
+       margin-right: 2pt;
+       margin-bottom: 2pt;
+       margin-left: 2pt;
+}
+
+
+button.btnNavigation 
+{
+
+       background-color: rgba(0%,0%,0%,0);
+
+       font-family: -fm-font-family(Arial,Arial-BoldMT);
+       font-weight: bold;
+       font-size: 10pt;
+       color: #fff;
+       padding-top: 0pt;
+       padding-right: 0pt;
+       padding-bottom: 0pt;
+       padding-left: 0pt;
+}
+
+div.PageListHeader
+{
+       border-top-color: rgba(80%,80%,80%,1);
+       border-right-color: rgba(80%,80%,80%,1);
+       border-bottom-color: rgba(80%,80%,80%,1);
+       border-left-color: rgba(80%,80%,80%,1);
+       border-top-style: solid;
+       border-right-style: solid;
+       border-bottom-style: solid;
+       border-left-style: solid;
+       border-top-width: 1pt;
+       border-right-width: 1pt;
+       border-bottom-width: 1pt;
+       border-left-width: 1pt;
+       color: #fff;
+       -fm-text-vertical-align: center;
+}
+div.PageListHeader .inner_border
+{
+       padding-top: 5pt;
+       padding-right: 5pt;
+       padding-bottom: 5pt;
+       padding-left: 5pt;
+}
+
+.moduletoolbar
+{
+  background-color: #293146;
+  color: #fff;
+}
+
+div.BodySectionHeader
+{
+       font-family: -fm-font-family(Arial,Arial-BoldMT);
+       font-weight: bold;
+}
+
+
+div.PageHeadTitle
+{
+       font-size: 18pt;
+       color: #fff;
+}
+
+div.SubHeadTitle
+{
+       font-size: 13pt;
+       color: #fff;
+}
+
+div.SectionHeader
+{
+
+       background-color: rgba(22.3529%,26.6667%,38.4314%,1);
+
+}
+
+button.toolbarbtn
+{
+  border: 0.5px solid #c6c6c6;
+       background-color: rgba(0%,0%,0%,0);
+       color: #fff;
+}
+button.toolbarbtn:hover
+{
+
+       background-color: #343434;
+       color: #fff;
+}
+button.toolbarbtn:pressed
+{
+
+       background-color: rgba(20.3922%,20.3922%,20.3922%,1);
+       color: #fff;
+}
+button.toolbarbtn:focus
+{
+       border-top-color: rgba(80%,80%,80%,1);
+       border-right-color: rgba(80%,80%,80%,1);
+       border-bottom-color: rgba(80%,80%,80%,1);
+       border-left-color: rgba(80%,80%,80%,1);
+}
+
+
+a.toolbarbtn
+{
+  border: 0.5px solid #c6c6c6;
+       background-color: rgba(0%,0%,0%,0);
+       color: #fff;
+       text-align: center;
+       text-decoration: unset;
+}
+a.toolbarbtn:hover
+{
+
+       background-color: rgba(20.3922%,20.3922%,20.3922%,1);
+       color: #fff;
+}
+a.toolbarbtn:pressed
+{
+       background-color: rgba(20.3922%,20.3922%,20.3922%,1);
+       color: #fff;
+}
+a.toolbarbtn:focus
+{
+       border-top-color: rgba(80%,80%,80%,1);
+       border-right-color: rgba(80%,80%,80%,1);
+       border-bottom-color: rgba(80%,80%,80%,1);
+       border-left-color: rgba(80%,80%,80%,1);
+}
+
+button.bodybtn
+{
+  border: 0.5px solid #c6c6c6;
+
+       background-color: rgba(0%,0%,0%,0);
+
+       color: #000;
+}
+button.bodybtn:hover
+{
+
+       background-color: rgba(20.3922%,20.3922%,20.3922%,1);
+       color: #fff;
+}
+button.bodybtn:pressed
+{
+
+       background-color: rgba(20.3922%,20.3922%,20.3922%,1);
+       color: #fff;
+}
+button.bodybtn:focus
+{
+       border-top-color: rgba(80%,80%,80%,1);
+       border-right-color: rgba(80%,80%,80%,1);
+       border-bottom-color: rgba(80%,80%,80%,1);
+       border-left-color: rgba(80%,80%,80%,1);
+}
+
+
+a.bodybtn
+{
+  border: 0.5px solid #c6c6c6;
+
+       background-color: rgba(0%,0%,0%,0);
+
+       color: #000;
+       text-align: center;
+       text-decoration: unset;
+}
+a.bodybtn:hover
+{
+
+       background-color: rgba(20.3922%,20.3922%,20.3922%,1);
+       color: #fff;
+}
+a.bodybtn:pressed
+{
+       background-color: rgba(20.3922%,20.3922%,20.3922%,1);
+       color: #fff;
+}
+a.bodybtn:focus
+{
+       border-top-color: rgba(80%,80%,80%,1);
+       border-right-color: rgba(80%,80%,80%,1);
+       border-bottom-color: rgba(80%,80%,80%,1);
+       border-left-color: rgba(80%,80%,80%,1);
+}
+
+
+div.ListView_Header
+{
+       border-top-color: rgba(80%,80%,80%,1);
+       border-right-color: rgba(80%,80%,80%,1);
+       border-bottom-color: rgba(80%,80%,80%,1);
+       border-left-color: rgba(80%,80%,80%,1);
+       border-top-style: solid;
+       border-right-style: solid;
+       border-bottom-style: solid;
+       border-left-style: solid;
+       border-top-width: 1pt;
+       border-right-width: 1pt;
+       border-bottom-width: 1pt;
+       border-left-width: 1pt;
+       font-weight: normal;
+       color: #fff;
+       -fm-text-vertical-align: center;
+}
+div.ListView_Header .inner_border
+{
+       padding-top: 2pt;
+       padding-right: 2pt;
+       padding-bottom: 2pt;
+       padding-left: 2pt;
+}
+
+div.toolbar
+{
+
+       background-color: rgba(32.1569%,38.8235%,55.6863%,1);
+
+}
+
+div.sectiontoolbar
+{
+  margin-top: 8px;
+  margin-bottom: 8px;
+       background-color: rgb(97, 98, 100);
+
+}
+
+div.FooterLabel
+{
+       color: #fff;
+}
+
+button.Buttom_BodyNav:hover
+{
+
+       background-color: rgb(141, 141, 141);
+
+       /* color: #fff; */
+}
+
+
+::-webkit-scrollbar {
+-webkit-appearance: none;
+width: 10px;
+}
+
+::-webkit-scrollbar-track {
+       background-color:  rgba(80%, 80%, 80%, .5);
+}
+
+::-webkit-scrollbar-thumb {
+border-radius: 0px;
+background-color: rgba(0, 0, 0, .5);
+-webkit-box-shadow: 0 0 1px rgba(255, 255, 255, .5);
+}      
+
+div.portaltextheader {
+       padding: 2px;
+       border: 1px solid white;
+}
+
+
+
+
+
+select {
+  /* -webkit-appearance: none; */
+  display: block;
+  color: #000;
+  line-height: 1line;
+       text-align: left;
+  padding: 3.5px;
+  width: 100%;
+  max-width: 100%; 
+  box-sizing: border-box;
+  margin: 0;
+  border: 1px solid #cccccc;
+  /* box-shadow: 0 1px 0 1px rgba(0,0,0,.04); */
+  border-radius: 0px;
+  font-weight: normal;
+  font-size: 11pt;
+  background-color: #fff;
+  /* background-image: url('data:image/svg+xml;charset=US-ASCII,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22292.4%22%20height%3D%22292.4%22%3E%3Cpath%20fill%3D%22%23000%22%20d%3D%22M287%2069.4a17.6%2017.6%200%200%200-13-5.4H18.4c-5%200-9.3%201.8-12.9%205.4A17.6%2017.6%200%200%200%200%2082.2c0%205%201.8%209.3%205.4%2012.9l128%20127.9c3.6%203.6%207.8%205.4%2012.8%205.4s9.2-1.8%2012.8-5.4L287%2095c3.5-3.5%205.4-7.8%205.4-12.8%200-5-1.9-9.2-5.5-12.8z%22%2F%3E%3C%2Fsvg%3E'), 
+    linear-gradient(to bottom, #fff 0%,#fff 100%);
+  background-repeat: no-repeat, repeat;
+  background-position: right .7em top 50%, 0 0;
+  background-size: .65em auto, 100%; */
+}
+
+
+/* option {
+  appearance: none;
+  border: 1px solid 0070cf;
+  padding: 2px;
+} */
+select:focus
+{
+       border: 1px solid #3a6fc3;
+  border-radius: unset;
+}
+
+
+::-webkit-select-placeholder
+{
+       color: #9a9a9a;
+}
+
+div.DataFooter{
+       background: #384462;
+}
+.input-sum{padding:2px;display:block;border: 1px solid #ccc;width:100%;background-color: #4D4D4D; }  
+
+
+.currency-sum {padding:2px;display:block;border: 1px solid #ccc;width:100%;background-color: #4D4D4D;}
+
+.currency-sum,.currency-sum:read-only {
+  display: block;
+  color: #fff;
+  padding: 2px;
+  padding-right: 12px;
+  width: 100%;
+  max-width: 100%; 
+  box-sizing: border-box;
+  margin: 0;
+  border: 1px solid #ccc;
+  border-radius: unset;
+  -moz-appearance: none;
+  -webkit-appearance: none;
+  appearance: none;
+  background-color: #4D4D4D;
+  background-image: url('data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22225%22%20height=%22300%22%3E%3Cpath%20fill=%22white%22%20stroke=%22none%22%20d=%22m%20224.99996,16.22698%20-8.11342,36.41161%20q%20-24.14255,-19.78892%20-54.61741,-19.78892%20-41.3588,0%20-65.00658,23.74671%20-23.647774,23.7467%20-28.397115,53.23215%20l%20134.960355,0%20-5.14505,26.71508%20-132.981532,0%20-0.395848,7.71771%200.395848,18.20566%20127.242642,0%20-5.14505,26.71508%20-117.941954,0%20q%207.519719,40.17154%2032.552754,59.06997%2025.03303,18.89844%2056.49745,18.89844%2037.20302,0%2057.98149,-19.59107%20l%200,40.9631%20Q%20192.34828,300%20162.26913,300%2053.034301,300%2030.474864,189.18206%20l%20-30.474864,0%205.738751,-26.71508%2020.580475,0%20q%20-0.395708,-4.74934%20-0.395708,-17.80995%20l%200,-8.11342%20-25.923518,0%205.738751,-26.71508%2023.152999,0%20Q%2039.181988,55.21112%2076.583149,27.60556%20113.98417,0%20163.06069,0%20199.868,0%20224.99996,16.22698%20z%22%20/%3E%3C/svg%3E');
+  background-repeat: no-repeat, repeat;
+  background-position: right 2px top 50%, 0 0;
+  background-size: 9px auto, 100%;
+}
+
+
+
+
+/* input[type=date]::-webkit-inner-spin-button, 
+input[type=date]::-webkit-outer-spin-button { 
+  display: none;
+} */
+
+:focus {
+  outline: unset;
+}
+
+input
+{
+       background-color: #ffffff;
+       border: 1px solid #cccccc; 
+       font-weight: normal;
+       font-size: 11pt;
+       color: #000000;
+       line-height: 1line;
+  text-align: left;
+  width:100%;
+  padding:2px;
+  display:block;
+  border-radius: unset;
+}
+/* input:focus
+{
+       border: #0070cf;
+} */
+
+input:focus {
+  border: 1px solid #3a6fc3;
+  border-radius: unset;
+}
+
+input[readonly=true]{
+  color: #000!important;
+  background-color: #d3d3d3!important;
+}
+
+input[type=number]::-webkit-inner-spin-button, 
+input[type=number]::-webkit-outer-spin-button { 
+  -webkit-appearance: none; 
+  margin: 0; 
+}
+/* input[type=checkbox]{
+  appearance: none;
+  display:inline-block;
+  font-size: 24px!important;
+  border: 1px solid green;
+} */
+
+input[class=currency] {
+  padding: 2px;
+  padding-right: 12px;
+  text-align: right;
+  background-image: url('data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22225%22%20height=%22300%22%3E%3Cpath%20stroke=%22none%22%20d=%22m%20224.99996,16.22698%20-8.11342,36.41161%20q%20-24.14255,-19.78892%20-54.61741,-19.78892%20-41.3588,0%20-65.00658,23.74671%20-23.647774,23.7467%20-28.397115,53.23215%20l%20134.960355,0%20-5.14505,26.71508%20-132.981532,0%20-0.395848,7.71771%200.395848,18.20566%20127.242642,0%20-5.14505,26.71508%20-117.941954,0%20q%207.519719,40.17154%2032.552754,59.06997%2025.03303,18.89844%2056.49745,18.89844%2037.20302,0%2057.98149,-19.59107%20l%200,40.9631%20Q%20192.34828,300%20162.26913,300%2053.034301,300%2030.474864,189.18206%20l%20-30.474864,0%205.738751,-26.71508%2020.580475,0%20q%20-0.395708,-4.74934%20-0.395708,-17.80995%20l%200,-8.11342%20-25.923518,0%205.738751,-26.71508%2023.152999,0%20Q%2039.181988,55.21112%2076.583149,27.60556%20113.98417,0%20163.06069,0%20199.868,0%20224.99996,16.22698%20z%22%20/%3E%0A%3C/svg%3E'), 
+  linear-gradient(to bottom, #fff 0%,#fff 100%);
+  background-repeat: no-repeat, repeat;
+  background-position: right 2px top 50%, 0 0;
+  background-size: 9px auto, 100%;
+}
+
+input[class=currency]:read-only {
+  background-image: url('data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22225%22%20height=%22300%22%3E%3Cpath%20stroke=%22none%22%20d=%22m%20224.99996,16.22698%20-8.11342,36.41161%20q%20-24.14255,-19.78892%20-54.61741,-19.78892%20-41.3588,0%20-65.00658,23.74671%20-23.647774,23.7467%20-28.397115,53.23215%20l%20134.960355,0%20-5.14505,26.71508%20-132.981532,0%20-0.395848,7.71771%200.395848,18.20566%20127.242642,0%20-5.14505,26.71508%20-117.941954,0%20q%207.519719,40.17154%2032.552754,59.06997%2025.03303,18.89844%2056.49745,18.89844%2037.20302,0%2057.98149,-19.59107%20l%200,40.9631%20Q%20192.34828,300%20162.26913,300%2053.034301,300%2030.474864,189.18206%20l%20-30.474864,0%205.738751,-26.71508%2020.580475,0%20q%20-0.395708,-4.74934%20-0.395708,-17.80995%20l%200,-8.11342%20-25.923518,0%205.738751,-26.71508%2023.152999,0%20Q%2039.181988,55.21112%2076.583149,27.60556%20113.98417,0%20163.06069,0%20199.868,0%20224.99996,16.22698%20z%22%20/%3E%0A%3C/svg%3E'), 
+    linear-gradient(to bottom, #d3d3d3 0%,#d3d3d3 100%);
+}
+
+input[class=percent] {
+  padding: 2px;
+  padding-right: 12px;
+  text-align: right;
+  background-image: url('data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22256%22%20height=%22232%22%20version=%221.0%22%3E%3Cg%20transform=%22translate(-112.3674,-128.3649)%22%3E%3Cpath%20style=%22fill:black;fill-opacity:1;stroke:none%22%20d=%22M%20317.1674,257.53698%20C%20308.53463,257.53708%20301.73774,261.20839%20296.77671,268.55094%20C%20291.91449,275.89365%20289.48349,286.1138%20289.48368,299.2114%20C%20289.48349,312.11067%20291.91449,322.2812%20296.77671,329.72303%20C%20301.73774,337.06568%20308.53463,340.737%20317.1674,340.73698%20C%20325.60128,340.737%20332.24934,337.06568%20337.11159,329.72303%20C%20342.07258,322.2812%20344.5532,312.11067%20344.55345,299.2114%20C%20344.5532,286.21302%20342.07258,276.04249%20337.11159,268.69977%20C%20332.24934,261.25801%20325.60128,257.53708%20317.1674,257.53698%20M%20317.1674,238.63466%20C%20332.84469,238.63477%20345.29739,244.09213%20354.52554,255.00675%20C%20363.75318,265.92157%20368.36713,280.65644%20368.3674,299.2114%20C%20368.36713,317.76648%20363.70357,332.50135%20354.37671,343.41605%20C%20345.14855,354.23156%20332.74546,359.6393%20317.1674,359.63931%20C%20301.29123,359.6393%20288.7393,354.23156%20279.51159,343.41605%20C%20270.28351,332.50135%20265.66956,317.76648%20265.66973,299.2114%20C%20265.66956,280.55721%20270.28351,265.82234%20279.51159,255.00675%20C%20288.83853,244.09213%20301.39045,238.63477%20317.1674,238.63466%20M%20163.5674,147.9928%20C%20155.03401,147.993%20148.28673,151.71393%20143.32554,159.15559%20C%20138.46349,166.49841%20136.03248,176.61933%20136.03252,189.51838%20C%20136.03248,202.61621%20138.46349,212.83635%20143.32554,220.17884%20C%20148.18751,227.52161%20154.93479,231.19292%20163.5674,231.1928%20C%20172.19989,231.19292%20178.94717,227.52161%20183.80926,220.17884%20C%20188.77041,212.83635%20191.25103,202.61621%20191.25113,189.51838%20C%20191.25103,176.71856%20188.77041,166.59764%20183.80926,159.15559%20C%20178.84794,151.71393%20172.10066,147.993%20163.5674,147.9928%20M%20297.9674,129.09047%20L%20321.78136,129.09047%20L%20182.7674,359.63931%20L%20158.95345,359.63931%20L%20297.9674,129.09047%20M%20163.5674,129.09047%20C%20179.24484,129.0907%20191.74715,134.54806%20201.07438,145.46256%20C%20210.4014,156.27827%20215.06496,170.96352%20215.06508,189.51838%20C%20215.06496,208.27201%20210.4014,223.05649%20201.07438,233.87187%20C%20191.84638,244.68748%20179.34406,250.09523%20163.5674,250.09512%20C%20147.79061,250.09523%20135.28829,244.68748%20126.06043,233.87187%20C%20116.93172,222.95727%20112.36739,208.17279%20112.3674,189.51838%20C%20112.36739,171.06275%20116.98134,156.37749%20126.20926,145.46256%20C%20135.43713,134.54806%20147.88983,129.0907%20163.5674,129.09047%22%20/%3E%3C/g%3E%3C/svg%3E'), 
+    linear-gradient(to bottom, #fff 0%,#fff 100%);
+  background-repeat: no-repeat, repeat;
+  background-position: right 2px top 50%, 0 0;
+  background-size: 9px auto, 100%;
+}
+
+
+label {
+  height: 12.8px!important;
+  color: #000; 
+  font-size: 8pt;
+}
+
+
+
+input[type="checkbox"] {
+  display: block;
+  -webkit-appearance:none;/* Hides the default checkbox style */ 
+  height:29.66px;
+  width:29.66px;
+  cursor:pointer;
+  position:relative;
+  -webkit-transition: .15s;
+  border-radius: unset;
+  border: 1px solid #cccccc; 
+  background-color:#fff;
+ }
+ input[type="checkbox"]:checked {
+  background-color:#9ABCEA;
+ }
+ input[type="checkbox"]:before, input[type="checkbox"]:checked:before {
+  position:absolute;
+  top:0;
+  left:0;
+  width:100%;
+  height:100%;
+  line-height:2em;
+  text-align:center;
+  color:#000;
+  content: '';
+ }
+ input[type="checkbox"]:checked:before {
+  font-size: 11pt;
+  content: '✔';
+ }
+ input[type="checkbox"]:hover:before {
+  background:rgba(255,255,255,0.3);
+ }
+
+ body.mceContentBody { 
+  background:#e8f0fe;
+  color:#000;
+}
+
+/* .mceContentBody { 
+  background: #e8f0fe;
+  color:#000;
+} */
+
+/* .tabulator-row-even {
+  background-color: #757575;
+} */
+
+:focus {
+  outline: 1px solid #607d8b;
+}
+
+.modal-content > header {
+       background-color: #293146;
+       color: #fff;
+       padding:8px!important;
+       margin-bottom: 10px;
+}
+
+.modal-content > header > h2 {
+       font-size: 13pt;
+}
+
+.modal-content > footer {
+       
+       /* padding:0.01em 8px;  */
+       text-align:right!important;
+       color:#000!important;
+       background-color:#c6c6c6!important;
+       margin-top: 6px;
+       padding-top:8px!important;
+       padding-bottom:8px!important;
+}
+
+.modal-content > header:after,.modal-content > header:before,.modal-content > footer:after,.modal-content > footer:before {
+       content:"";display:table;clear:both
+}
+
+span[class^="icon"]::after {
+       content: "\A";
+       white-space: pre;
+}
+
+.inlinebtn {
+       position: relative;
+       height: 28px;
+       margin-top: -28px;
+       margin-left: -20px; 
+       padding: 4px 8px; 
+       border: 0!important; 
+       float: right;
+}
+
+#loader {
+  position: absolute;
+  left: 50%;
+  top: 50%;
+  z-index: 1;
+  width: 150px;
+  height: 150px;
+  margin: -75px 0 0 -75px;
+  border: 16px solid #f3f3f3;
+  border-radius: 50%;
+  border-top: 16px solid #3498db;
+  width: 120px;
+  height: 120px;
+  -webkit-animation: spin 2s linear infinite;
+  animation: spin 2s linear infinite;
+}
+
+@-webkit-keyframes spin {
+  0% { -webkit-transform: rotate(0deg); }
+  100% { -webkit-transform: rotate(360deg); }
+}
+
+@keyframes spin {
+  0% { transform: rotate(0deg); }
+  100% { transform: rotate(360deg); }
+}
+
diff --git a/admin/css/theme.min.css b/admin/css/theme.min.css
new file mode 100644 (file)
index 0000000..f954084
--- /dev/null
@@ -0,0 +1 @@
+html{box-sizing:border-box}*,:after,:before{box-sizing:inherit}html{-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}body,html{-webkit-user-select:none;-ms-user-select:none;user-select:none;-moz-user-select:none}article,aside,details,figcaption,figure,footer,header,main,menu,nav,section{display:block}summary{display:list-item}audio,canvas,progress,video{display:inline-block}progress{vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline-width:0}abbr[title]{border-bottom:none;text-decoration:underline;text-decoration:underline dotted}b,strong{font-weight:bolder}dfn{font-style:italic}mark{background:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}figure{margin:1em 40px}img{border-style:none}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}hr{box-sizing:content-box;height:0;overflow:visible}button,input,optgroup,select,textarea{font:inherit;margin:0}optgroup{font-weight:700}button,input{overflow:visible}button,select{text-transform:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{border-style:none;padding:0}[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring,button:-moz-focusring{outline:1px dotted ButtonText}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}legend{color:inherit;display:table;max-width:100%;padding:0;white-space:normal}textarea{overflow:auto}[type=checkbox],[type=radio]{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}body,html{font-family:Verdana,sans-serif;font-size:10pt;line-height:1.5}html{overflow-x:hidden}h1{font-size:36px}h2{font-size:30px}h3{font-size:24px}h4{font-size:20px}h5{font-size:18px}h6{font-size:16px}.serif{font-family:serif}h1,h2,h3,h4,h5,h6{font-family:"Segoe UI",Arial,sans-serif;font-weight:400;margin:0}.wide{letter-spacing:4px}hr{border:0;border-top:1px solid #eee;margin:20px 0}.img{max-width:100%;height:auto;vertical-align:middle}a{color:inherit}.table,.table-all{border-collapse:collapse;border-spacing:0;width:100%;display:table}.table-all{border:1px solid #ccc}.bordered tr,.table-all tr{border-bottom:1px solid #ddd}.striped tbody tr:nth-child(even){background-color:#f1f1f1}.table-all tr:nth-child(odd){background-color:#fff}.table-all tr:nth-child(even){background-color:#f1f1f1}.hoverable tbody tr:hover,.ul.hoverable li:hover{background-color:#ccc}.centered tr td,.centered tr th{text-align:center}.table td,.table th,.table-all td,.table-all th{padding:8px 8px;display:table-cell;text-align:left;vertical-align:top}.table td:first-child,.table th:first-child,.table-all td:first-child,.table-all th:first-child{padding-left:16px}.btn,.button{border:none;display:inline-block;padding:8px 16px;vertical-align:middle;overflow:hidden;text-decoration:none;color:inherit;background-color:inherit;text-align:center;cursor:pointer;white-space:nowrap}.btn:hover{box-shadow:0 8px 16px 0 rgba(0,0,0,.2),0 6px 20px 0 rgba(0,0,0,.19)}.btn,.button{-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.btn:disabled,.button:disabled,.disabled{cursor:not-allowed;background-color:#e6e6e6}.disabled *,:disabled *{pointer-events:none}.btn.disabled:hover,.btn:disabled:hover{box-shadow:none}.badge,.tag{background-color:#000;color:#fff;display:inline-block;padding-left:8px;padding-right:8px;text-align:center}.badge{border-radius:50%}.ul{list-style-type:none;padding:0;margin:0}.ul li{padding:8px 16px;border-bottom:1px solid #ddd}.ul li:last-child{border-bottom:none}.display-container,.tooltip{position:relative}.tooltip .text{display:none}.tooltip:hover .text{display:inline-block}.ripple:active{opacity:.5}.ripple{transition:opacity 0s}.input{padding:6px;display:block;border:1px solid #ccc;width:100%;background-color:#fff}.select{padding:2px 0;display:block;width:100%;border:1px solid #ccc;background-color:#fff}.dropdown-click,.dropdown-hover{position:relative;display:inline-block;cursor:pointer}.dropdown-hover:hover .dropdown-content{display:block}.dropdown-click:hover,.dropdown-hover:first-child{background-color:#ccc;color:#000}.dropdown-click:hover>.button:first-child,.dropdown-hover:hover>.button:first-child{background-color:#ccc;color:#000}.dropdown-content{cursor:auto;color:#000;background-color:#fff;display:none;position:absolute;min-width:160px;margin:0;padding:0;z-index:1}.check,.radio{width:24px;height:24px;position:relative;top:6px}.sidebar{height:100%;width:160px;background-color:#fff;position:fixed!important;z-index:1;overflow:auto}.bar-block .dropdown-click,.bar-block .dropdown-hover{width:100%}.bar-block .dropdown-click .dropdown-content,.bar-block .dropdown-hover .dropdown-content{min-width:100%}.bar-block .dropdown-click .button,.bar-block .dropdown-hover .button{width:100%;text-align:left;padding:8px 16px}#main,.main{transition:margin-left .4s}.modal{z-index:3;display:none;padding-top:100px;position:fixed;left:0;top:0;width:100%;height:100%;overflow:auto;background-color:#000;background-color:rgba(0,0,0,.4)}.modal-content{margin:auto;background-color:#fff;position:relative;padding:0;outline:0;width:600px}.bar{width:100%}.center .bar{display:inline-block;width:auto}.bar .bar-item{padding:8px 16px;float:left;width:auto;border:none;display:block;outline:0}.bar .dropdown-click,.bar .dropdown-hover{position:static;float:left}.bar .button{white-space:normal}.bar-block .bar-item{width:100%;display:block;padding:8px 16px;text-align:left;border:none;white-space:normal;float:none;outline:0}.bar-block.center .bar-item{text-align:center}.block{display:block;width:100%}.responsive{display:block;overflow-x:auto}.bar:after,.bar:before,.cell-row:after,.cell-row:before,.clear:after,.clear:before,.container:after,.container:before,.datapanel:after,.datapanel:before,.row-padding:after,.row-padding:before,.row:after,.row:before{content:"";display:table;clear:both}.col,.fifth,.fourfifth,.half,.quarter,.third,.threefifth,.threequarter,.twofifth,.twothird{float:left;width:100%}.col.s1{width:8.33333%}.col.s2{width:16.66666%}.col.s3{width:24.99999%}.col.s4{width:33.33333%}.col.s5{width:41.66666%}.col.s6{width:49.99999%}.col.s7{width:58.33333%}.col.s8{width:66.66666%}.col.s9{width:74.99999%}.col.s10{width:83.33333%}.col.s11{width:91.66666%}.col.s12{width:99.99999%}@media (min-width:601px){.col.m1{width:8.33333%}.col.m2{width:16.66666%}.col.m3,.quarter{width:24.99999%}.col.m4,.third{width:33.33333%}.fifth{width:20%;min-width:100px}.col.m5{width:41.66666%}.col.m6,.half{width:49.99999%}.col.m7{width:58.33333%}.col.m8,.twothird{width:66.66666%}.col.m9,.threequarter{width:74.99999%}.col.m10{width:83.33333%}.col.m11{width:91.66666%}.col.m12{width:99.99999%}.twofifth{width:40%}.threefifth{width:60%}.fourfifth{width:80%}}@media (min-width:993px){.col.l1{width:8.33333%}.col.l2{width:16.66666%}.col.l3{width:24.99999%}.col.l4{width:33.33333%}.col.l5{width:41.66666%}.col.l6{width:49.99999%}.col.l7{width:58.33333%}.col.l8{width:66.66666%}.col.l9{width:74.99999%}.col.l10{width:83.33333%}.col.l11{width:91.66666%}.col.l12{width:99.99999%}}.rest{overflow:hidden}.stretch{margin-left:-16px;margin-right:-16px}.auto,.content{margin-left:auto;margin-right:auto}.content{max-width:980px}.auto{max-width:1140px}.cell-row{display:table;width:100%}.cell{display:table-cell;vertical-align:top}.cell-top{vertical-align:top}.cell-middle{vertical-align:middle}.cell-bottom{vertical-align:bottom}.hide{display:none!important}.show,.show-block{display:block!important}.show-inline-block{display:inline-block!important}@media (max-width:1205px){.auto{max-width:95%}}@media (max-width:600px){.modal-content{margin:0 10px;width:auto!important}.modal{padding-top:30px}.dropdown-click.mobile .dropdown-content,.dropdown-hover.mobile .dropdown-content{position:relative}.hide-small{display:none!important}.mobile{display:block;width:100%!important}.bar-item.mobile,.dropdown-click.mobile,.dropdown-hover.mobile{text-align:center}.dropdown-click.mobile,.dropdown-click.mobile .btn,.dropdown-click.mobile .button,.dropdown-hover.mobile,.dropdown-hover.mobile .btn,.dropdown-hover.mobile .button{width:100%}}@media (max-width:768px){.modal-content{width:500px}.modal{padding-top:50px}}@media (min-width:993px){.modal-content{width:900px}.hide-large{display:none!important}.sidebar.collapse{display:block!important}}@media (max-width:992px) and (min-width:601px){.hide-medium{display:none!important}}@media (max-width:992px){.sidebar.collapse{display:none}.main{margin-left:0!important;margin-right:0!important}.auto{max-width:100%}}.bottom,.top{position:fixed;width:100%;z-index:1}.top{top:0}.bottom{bottom:0}.overlay{position:fixed;display:none;width:100%;height:100%;top:0;left:0;right:0;bottom:0;background-color:rgba(0,0,0,.5);z-index:2}.display-topleft{position:absolute;left:0;top:0}.display-topright{position:absolute;right:0;top:0}.display-bottomleft{position:absolute;left:0;bottom:0}.display-bottomright{position:absolute;right:0;bottom:0}.display-middle{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);-ms-transform:translate(-50%,-50%)}.display-left{position:absolute;top:50%;left:0;transform:translate(0,-50%);-ms-transform:translate(0,-50%)}.display-right{position:absolute;top:50%;right:0;transform:translate(0,-50%);-ms-transform:translate(0,-50%)}.display-topmiddle{position:absolute;left:50%;top:0;transform:translate(-50%,0);-ms-transform:translate(-50%,0)}.display-bottommiddle{position:absolute;left:50%;bottom:0;transform:translate(-50%,0);-ms-transform:translate(-50%,0)}.display-container:hover .display-hover{display:block}.display-container:hover span.display-hover{display:inline-block}.display-hover{display:none}.display-position{position:absolute}.circle{border-radius:50%}.round-small{border-radius:2px}.round,.round-medium{border-radius:4px}.round-large{border-radius:8px}.round-xlarge{border-radius:16px}.round-xxlarge{border-radius:32px}.row-padding,.row-padding>.col,.row-padding>.half,.row-padding>.quarter,.row-padding>.third,.row-padding>.threequarter,.row-padding>.twothird{padding:0 8px}.container,.datapanel{padding:.01em 8px}.datapanel{margin-top:8px;margin-bottom:8px}.code,.codespan{font-family:Consolas,"courier new";font-size:16px}.code{width:auto;background-color:#fff;padding:8px 12px;border-left:4px solid #4caf50;word-wrap:break-word}.codespan{color:#dc143c;background-color:#f1f1f1;padding-left:4px;padding-right:4px;font-size:110%}.card,.card-2{box-shadow:0 2px 5px 0 rgba(0,0,0,.16)}.card-4,.hover-shadow:hover{box-shadow:0 4px 10px 0 rgba(0,0,0,.2),0 4px 20px 0 rgba(0,0,0,.19)}.spin{animation:spin 2s infinite linear}@keyframes spin{0%{transform:rotate(0)}100%{transform:rotate(359deg)}}.animate-fading{animation:fading 2s infinite}@keyframes fading{0%{opacity:0}50%{opacity:1}100%{opacity:0}}.animate-opacity{animation:opac .8s}@keyframes opac{from{opacity:0}to{opacity:1}}.animate-top{position:relative;animation:animatetop 1s}@keyframes animatetop{from{top:-300px;opacity:0}to{top:0;opacity:1}}.animate-left{position:relative;animation:animateleft .4s}@keyframes animateleft{from{left:-300px;opacity:0}to{left:0;opacity:1}}.animate-right{position:relative;animation:animateright .4s}@keyframes animateright{from{right:-300px;opacity:0}to{right:0;opacity:1}}.animate-bottom{position:relative;animation:animatebottom 1s}@keyframes animatebottom{from{bottom:-300px;opacity:0}to{bottom:0;opacity:1}}.animate-zoom{animation:animatezoom .6s}@keyframes animatezoom{from{transform:scale(0)}to{transform:scale(1)}}.animate-input{transition:width .4s ease-in-out}.animate-input:focus{width:100%!important}.hover-opacity:hover,.opacity{opacity:.6}.hover-opacity-off:hover,.opacity-off{opacity:1}.opacity-max{opacity:.25}.opacity-min{opacity:.75}.grayscale-max,.greyscale-max,.hover-grayscale:hover,.hover-greyscale:hover{filter:grayscale(100%)}.grayscale,.greyscale{filter:grayscale(75%)}.grayscale-min,.greyscale-min{filter:grayscale(50%)}.sepia{filter:sepia(75%)}.hover-sepia:hover,.sepia-max{filter:sepia(100%)}.sepia-min{filter:sepia(50%)}.tiny{font-size:10px!important}.small{font-size:12px!important}.medium{font-size:15px!important}.large{font-size:18px!important}.xlarge{font-size:24px!important}.xxlarge{font-size:36px!important}.xxxlarge{font-size:48px!important}.jumbo{font-size:64px!important}.left-align{text-align:left!important}.right-align{text-align:right!important}.justify{text-align:justify!important}.center{text-align:center!important}.border-0{border:0!important}.border{border:1px solid #ccc!important}.border-top{border-top:1px solid #ccc!important}.border-bottom{border-bottom:1px solid #ccc!important}.border-left{border-left:1px solid #ccc!important}.border-right{border-right:1px solid #ccc!important}.topbar{border-top:6px solid #ccc!important}.bottombar{border-bottom:6px solid #ccc!important}.leftbar{border-left:6px solid #ccc!important}.rightbar{border-right:6px solid #ccc!important}.code,.section{margin-top:16px!important;margin-bottom:16px!important}.margin{margin:16px!important}.margin-top{margin-top:16px!important}.margin-bottom{margin-bottom:16px!important}.margin-left{margin-left:16px!important}.margin-right{margin-right:16px!important}.padding-small{padding:4px 8px!important}.padding{padding:8px 16px!important}.padding-large{padding:12px 24px!important}.padding-16{padding-top:16px!important;padding-bottom:16px!important}.padding-24{padding-top:24px!important;padding-bottom:24px!important}.padding-32{padding-top:32px!important;padding-bottom:32px!important}.padding-48{padding-top:48px!important;padding-bottom:48px!important}.padding-64{padding-top:64px!important;padding-bottom:64px!important}.left{float:left!important}.right{float:right!important}.button:hover{color:#fff!important;background-color:#343434!important}.hover-none:hover,.transparent{background-color:transparent!important}.hover-none:hover{box-shadow:none!important}.amber,.hover-amber:hover{color:#000!important;background-color:#ffc107!important}.aqua,.hover-aqua:hover{color:#000!important;background-color:#0ff!important}.blue,.hover-blue:hover{color:#fff!important;background-color:#2196f3!important}.hover-light-blue:hover,.light-blue{color:#000!important;background-color:#87ceeb!important}.brown,.hover-brown:hover{color:#fff!important;background-color:#795548!important}.cyan,.hover-cyan:hover{color:#000!important;background-color:#00bcd4!important}.blue-grey,.hover-blue-grey:hover{color:#fff!important;background-color:#607d8b!important}.green,.hover-green:hover{color:#fff!important;background-color:#4caf50!important}.hover-light-green:hover,.light-green{color:#000!important;background-color:#8bc34a!important}.hover-indigo:hover,.indigo{color:#fff!important;background-color:#3f51b5!important}.hover-khaki:hover,.khaki{color:#000!important;background-color:khaki!important}.hover-lime:hover,.lime{color:#000!important;background-color:#cddc39!important}.hover-orange:hover,.orange{color:#000!important;background-color:#ff9800!important}.deep-orange,.hover-deep-orange:hover{color:#fff!important;background-color:#ff5722!important}.hover-pink:hover,.pink{color:#fff!important;background-color:#e91e63!important}.hover-purple:hover,.purple{color:#fff!important;background-color:#9c27b0!important}.deep-purple,.hover-deep-purple:hover{color:#fff!important;background-color:#673ab7!important}.hover-red:hover,.red{color:#fff!important;background-color:#f44336!important}.hover-sand:hover,.sand{color:#000!important;background-color:#fdf5e6!important}.hover-teal:hover,.teal{color:#fff!important;background-color:#009688!important}.hover-yellow:hover,.yellow{color:#000!important;background-color:#ffeb3b!important}.hover-white:hover,.white{color:#000!important;background-color:#fff!important}.black,.hover-black:hover{color:#fff!important;background-color:#000!important}.grey,.hover-grey:hover{color:#000!important;background-color:#9e9e9e!important}.hover-light-grey:hover,.light-grey{color:#000!important;background-color:#f1f1f1!important}.dark-grey,.hover-dark-grey:hover{color:#fff!important;background-color:#616161!important}.hover-pale-red:hover,.pale-red{color:#000!important;background-color:#ffe7e7!important}.hover-pale-green:hover,.pale-green{color:#000!important;background-color:#e7ffe7!important}.hover-pale-yellow:hover,.pale-yellow{color:#000!important;background-color:#ffffd7!important}.hover-pale-blue:hover,.pale-blue{color:#000!important;background-color:#e7ffff!important}.text-align-right{text-align:right}.hover-text-amber:hover,.text-amber{color:#ffc107!important}.hover-text-aqua:hover,.text-aqua{color:#0ff!important}.hover-text-blue:hover,.text-blue{color:#2196f3!important}.hover-text-light-blue:hover,.text-light-blue{color:#87ceeb!important}.hover-text-brown:hover,.text-brown{color:#795548!important}.hover-text-cyan:hover,.text-cyan{color:#00bcd4!important}.hover-text-blue-grey:hover,.text-blue-grey{color:#607d8b!important}.hover-text-green:hover,.text-green{color:#4caf50!important}.hover-text-light-green:hover,.text-light-green{color:#8bc34a!important}.hover-text-indigo:hover,.text-indigo{color:#3f51b5!important}.hover-text-khaki:hover,.text-khaki{color:#b4aa50!important}.hover-text-lime:hover,.text-lime{color:#cddc39!important}.hover-text-orange:hover,.text-orange{color:#ff9800!important}.hover-text-deep-orange:hover,.text-deep-orange{color:#ff5722!important}.hover-text-pink:hover,.text-pink{color:#e91e63!important}.hover-text-purple:hover,.text-purple{color:#9c27b0!important}.hover-text-deep-purple:hover,.text-deep-purple{color:#673ab7!important}.hover-text-red:hover,.text-red{color:#f44336!important}.hover-text-sand:hover,.text-sand{color:#fdf5e6!important}.hover-text-teal:hover,.text-teal{color:#009688!important}.hover-text-yellow:hover,.text-yellow{color:#d2be0e!important}.hover-text-white:hover,.text-white{color:#fff!important}.hover-text-black:hover,.text-black{color:#000!important}.hover-text-grey:hover,.text-grey{color:#757575!important}.hover-text-light-grey:hover,.text-light-grey{color:#f1f1f1!important}.hover-text-dark-grey:hover,.text-dark-grey{color:#3a3a3a!important}.border-amber,.hover-border-amber:hover{border-color:#ffc107!important}.border-aqua,.hover-border-aqua:hover{border-color:#0ff!important}.border-blue,.hover-border-blue:hover{border-color:#2196f3!important}.border-light-blue,.hover-border-light-blue:hover{border-color:#87ceeb!important}.border-brown,.hover-border-brown:hover{border-color:#795548!important}.border-cyan,.hover-border-cyan:hover{border-color:#00bcd4!important}.border-blue-grey,.hover-blue-grey:hover{border-color:#607d8b!important}.border-green,.hover-border-green:hover{border-color:#4caf50!important}.border-light-green,.hover-border-light-green:hover{border-color:#8bc34a!important}.border-indigo,.hover-border-indigo:hover{border-color:#3f51b5!important}.border-khaki,.hover-border-khaki:hover{border-color:khaki!important}.border-lime,.hover-border-lime:hover{border-color:#cddc39!important}.border-orange,.hover-border-orange:hover{border-color:#ff9800!important}.border-deep-orange,.hover-border-deep-orange:hover{border-color:#ff5722!important}.border-pink,.hover-border-pink:hover{border-color:#e91e63!important}.border-purple,.hover-border-purple:hover{border-color:#9c27b0!important}.border-deep-purple,.hover-border-deep-purple:hover{border-color:#673ab7!important}.border-red,.hover-border-red:hover{border-color:#f44336!important}.border-sand,.hover-border-sand:hover{border-color:#fdf5e6!important}.border-teal,.hover-border-teal:hover{border-color:#009688!important}.border-yellow,.hover-border-yellow:hover{border-color:#ffeb3b!important}.border-white,.hover-border-white:hover{border-color:#fff!important}.border-black,.hover-border-black:hover{border-color:#000!important}.border-grey,.hover-border-grey:hover{border-color:#9e9e9e!important}.border-light-grey,.hover-border-light-grey:hover{border-color:#f1f1f1!important}.border-dark-grey,.hover-border-dark-grey:hover{border-color:#616161!important}.border-pale-red,.hover-border-pale-red:hover{border-color:#ffe7e7!important}.border-pale-green,.hover-border-pale-green:hover{border-color:#e7ffe7!important}.border-pale-yellow,.hover-border-pale-yellow:hover{border-color:#ffffd7!important}.border-pale-blue,.hover-border-pale-blue:hover{border-color:#e7ffff!important}.theme-l5{color:#000!important;background-color:#f6f8fc!important}.theme-l4{color:#000!important;background-color:#e1e9f6!important}.theme-l3{color:#000!important;background-color:#c3d3ed!important}.theme-l2{color:#000!important;background-color:#a5bee4!important}.theme-l1{color:#fff!important;background-color:#88a8db!important}.theme-d1{color:#fff!important;background-color:#5180cb!important}.theme-d2{color:#fff!important;background-color:#3a6fc3!important}.theme-d3{color:#fff!important;background-color:#3361aa!important}.theme-d4{color:#fff!important;background-color:#2c5392!important}.theme-d5{color:#fff!important;background-color:#24457a!important}.theme-light{color:#000!important;background-color:#f6f8fc!important}.theme-dark{color:#fff!important;background-color:#24457a!important}.theme-action{color:#fff!important;background-color:#24457a!important}.theme{color:#fff!important;background-color:#6a92d3!important}.text-theme{color:#6a92d3!important}.border-theme{border-color:#6a92d3!important}.hover-theme:hover{color:#fff!important;background-color:#6a92d3!important}.hover-text-theme:hover{color:#6a92d3!important}.hover-border-theme:hover{border-color:#6a92d3!important}.info-panel{padding:3px;color:#ff4500;border:1px solid #ff4500;background-color:#f89774}.error-panel{padding:3px;color:red;border:1px solid red;background-color:#fcb2b2}.table{table-layout:fixed}.text-line-through{text-decoration:line-through}#snackbar{visibility:hidden;min-width:250px;margin-left:-125px;background-color:#333;color:#fff;text-align:center;padding:16px;position:fixed;z-index:1;left:50%;bottom:30px;font-size:17px}#snackbar.show{visibility:visible;-webkit-animation:fadein .5s,fadeout .5s 2.5s;animation:fadein .5s,fadeout .5s 2.5s}@-webkit-keyframes fadein{from{bottom:0;opacity:0}to{bottom:30px;opacity:1}}@keyframes fadein{from{bottom:0;opacity:0}to{bottom:30px;opacity:1}}@-webkit-keyframes fadeout{from{bottom:30px;opacity:1}to{bottom:0;opacity:0}}@keyframes fadeout{from{bottom:30px;opacity:1}to{bottom:0;opacity:0}}.tabulator-header-filter>input{background-color:#fff;border:1px solid #ccc;font-weight:400}.readonly{pointer-events:none;color:#000!important;background-color:#d3d3d3!important}.right-side-bg{background:url(../img/bg1.jpg);background-size:cover;min-height:100vh}button{background-color:#f4f4f4;border:1pt solid #ccc;font-size:10pt;color:#000;line-height:1line;text-align:center}button:hover{background-color:#343434}button:pressed{background-color:#343434}button:focus{background-color:#343434}header{background-color:#fff;box-sizing:border-box}.actionbtn{background-color:#293146;color:#fff}::-webkit-input-placeholder{color:rgba(60.3922%,60.3922%,60.3922%,1)}textarea{background-color:#fff;border-top-color:rgba(80%,80%,80%,1);border-right-color:rgba(80%,80%,80%,1);border-bottom-color:rgba(80%,80%,80%,1);border-left-color:rgba(80%,80%,80%,1);border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-width:1pt;border-right-width:1pt;border-bottom-width:1pt;border-left-width:1pt;font-size:11pt;color:#000;line-height:1line;text-align:left}textarea:focus{border-top-color:rgba(0%,43.9216%,81.1765%,1);border-right-color:rgba(0%,43.9216%,81.1765%,1);border-bottom-color:rgba(0%,43.9216%,81.1765%,1);border-left-color:rgba(0%,43.9216%,81.1765%,1)}textarea:placeholder{color:rgba(80%,80%,80%,1)}textarea .scrollbar_track{width:30pt;top:0;right:0;bottom:0;position:absolute;box-sizing:border-box}footer{background-color:#fff;box-sizing:border-box}div.group_container{background-color:#e3e3e3;border-top-color:rgba(80%,80%,80%,1);border-right-color:rgba(80%,80%,80%,1);border-bottom-color:rgba(80%,80%,80%,1);border-left-color:rgba(80%,80%,80%,1);border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-width:1pt;border-right-width:1pt;border-bottom-width:1pt;border-left-width:1pt;padding-top:4px;padding-bottom:8px}.ListView_Default{background-color:rgba(0%,0%,0%,0);border-top-style:none;border-right-style:none;border-bottom-style:none;border-left-style:none;color:#000;text-align:left;margin-top:2pt;margin-right:2pt;margin-bottom:2pt;margin-left:2pt}button.btnNavigation{background-color:rgba(0%,0%,0%,0);font-family:-fm-font-family(Arial,Arial-BoldMT);font-weight:700;font-size:10pt;color:#fff;padding-top:0;padding-right:0;padding-bottom:0;padding-left:0}div.PageListHeader{border-top-color:rgba(80%,80%,80%,1);border-right-color:rgba(80%,80%,80%,1);border-bottom-color:rgba(80%,80%,80%,1);border-left-color:rgba(80%,80%,80%,1);border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-width:1pt;border-right-width:1pt;border-bottom-width:1pt;border-left-width:1pt;color:#fff;-fm-text-vertical-align:center}div.PageListHeader .inner_border{padding-top:5pt;padding-right:5pt;padding-bottom:5pt;padding-left:5pt}.moduletoolbar{background-color:#293146;color:#fff}div.BodySectionHeader{font-family:-fm-font-family(Arial,Arial-BoldMT);font-weight:700}div.PageHeadTitle{font-size:18pt;color:#fff}div.SubHeadTitle{font-size:13pt;color:#fff}div.SectionHeader{background-color:rgba(22.3529%,26.6667%,38.4314%,1)}button.toolbarbtn{border:.5px solid #c6c6c6;background-color:rgba(0%,0%,0%,0);color:#fff}button.toolbarbtn:hover{background-color:#343434;color:#fff}button.toolbarbtn:pressed{background-color:rgba(20.3922%,20.3922%,20.3922%,1);color:#fff}button.toolbarbtn:focus{border-top-color:rgba(80%,80%,80%,1);border-right-color:rgba(80%,80%,80%,1);border-bottom-color:rgba(80%,80%,80%,1);border-left-color:rgba(80%,80%,80%,1)}a.toolbarbtn{border:.5px solid #c6c6c6;background-color:rgba(0%,0%,0%,0);color:#fff;text-align:center;text-decoration:unset}a.toolbarbtn:hover{background-color:rgba(20.3922%,20.3922%,20.3922%,1);color:#fff}a.toolbarbtn:pressed{background-color:rgba(20.3922%,20.3922%,20.3922%,1);color:#fff}a.toolbarbtn:focus{border-top-color:rgba(80%,80%,80%,1);border-right-color:rgba(80%,80%,80%,1);border-bottom-color:rgba(80%,80%,80%,1);border-left-color:rgba(80%,80%,80%,1)}button.bodybtn{border:.5px solid #c6c6c6;background-color:rgba(0%,0%,0%,0);color:#000}button.bodybtn:hover{background-color:rgba(20.3922%,20.3922%,20.3922%,1);color:#fff}button.bodybtn:pressed{background-color:rgba(20.3922%,20.3922%,20.3922%,1);color:#fff}button.bodybtn:focus{border-top-color:rgba(80%,80%,80%,1);border-right-color:rgba(80%,80%,80%,1);border-bottom-color:rgba(80%,80%,80%,1);border-left-color:rgba(80%,80%,80%,1)}a.bodybtn{border:.5px solid #c6c6c6;background-color:rgba(0%,0%,0%,0);color:#000;text-align:center;text-decoration:unset}a.bodybtn:hover{background-color:rgba(20.3922%,20.3922%,20.3922%,1);color:#fff}a.bodybtn:pressed{background-color:rgba(20.3922%,20.3922%,20.3922%,1);color:#fff}a.bodybtn:focus{border-top-color:rgba(80%,80%,80%,1);border-right-color:rgba(80%,80%,80%,1);border-bottom-color:rgba(80%,80%,80%,1);border-left-color:rgba(80%,80%,80%,1)}div.ListView_Header{border-top-color:rgba(80%,80%,80%,1);border-right-color:rgba(80%,80%,80%,1);border-bottom-color:rgba(80%,80%,80%,1);border-left-color:rgba(80%,80%,80%,1);border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-width:1pt;border-right-width:1pt;border-bottom-width:1pt;border-left-width:1pt;font-weight:400;color:#fff;-fm-text-vertical-align:center}div.ListView_Header .inner_border{padding-top:2pt;padding-right:2pt;padding-bottom:2pt;padding-left:2pt}div.toolbar{background-color:rgba(32.1569%,38.8235%,55.6863%,1)}div.sectiontoolbar{margin-top:8px;margin-bottom:8px;background-color:#616264}div.FooterLabel{color:#fff}button.Buttom_BodyNav:hover{background-color:#8d8d8d}::-webkit-scrollbar{-webkit-appearance:none;width:10px}::-webkit-scrollbar-track{background-color:rgba(80%,80%,80%,.5)}::-webkit-scrollbar-thumb{border-radius:0;background-color:rgba(0,0,0,.5);-webkit-box-shadow:0 0 1px rgba(255,255,255,.5)}div.portaltextheader{padding:2px;border:1px solid #fff}select{display:block;color:#000;line-height:1line;text-align:left;padding:3.5px;width:100%;max-width:100%;box-sizing:border-box;margin:0;border:1px solid #ccc;border-radius:0;font-weight:400;font-size:11pt;background-color:#fff}select:focus{border:1px solid #3a6fc3;border-radius:unset}::-webkit-select-placeholder{color:#9a9a9a}div.DataFooter{background:#384462}.input-sum{padding:2px;display:block;border:1px solid #ccc;width:100%;background-color:#4d4d4d}.currency-sum{padding:2px;display:block;border:1px solid #ccc;width:100%;background-color:#4d4d4d}.currency-sum,.currency-sum:read-only{display:block;color:#fff;padding:2px;padding-right:12px;width:100%;max-width:100%;box-sizing:border-box;margin:0;border:1px solid #ccc;border-radius:unset;-moz-appearance:none;-webkit-appearance:none;appearance:none;background-color:#4d4d4d;background-image:url(data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22225%22%20height=%22300%22%3E%3Cpath%20fill=%22white%22%20stroke=%22none%22%20d=%22m%20224.99996,16.22698%20-8.11342,36.41161%20q%20-24.14255,-19.78892%20-54.61741,-19.78892%20-41.3588,0%20-65.00658,23.74671%20-23.647774,23.7467%20-28.397115,53.23215%20l%20134.960355,0%20-5.14505,26.71508%20-132.981532,0%20-0.395848,7.71771%200.395848,18.20566%20127.242642,0%20-5.14505,26.71508%20-117.941954,0%20q%207.519719,40.17154%2032.552754,59.06997%2025.03303,18.89844%2056.49745,18.89844%2037.20302,0%2057.98149,-19.59107%20l%200,40.9631%20Q%20192.34828,300%20162.26913,300%2053.034301,300%2030.474864,189.18206%20l%20-30.474864,0%205.738751,-26.71508%2020.580475,0%20q%20-0.395708,-4.74934%20-0.395708,-17.80995%20l%200,-8.11342%20-25.923518,0%205.738751,-26.71508%2023.152999,0%20Q%2039.181988,55.21112%2076.583149,27.60556%20113.98417,0%20163.06069,0%20199.868,0%20224.99996,16.22698%20z%22%20/%3E%3C/svg%3E);background-repeat:no-repeat,repeat;background-position:right 2px top 50%,0 0;background-size:9px auto,100%}:focus{outline:unset}input{background-color:#fff;border:1px solid #ccc;font-weight:400;font-size:11pt;color:#000;line-height:1line;text-align:left;width:100%;padding:2px;display:block;border-radius:unset}input:focus{border:1px solid #3a6fc3;border-radius:unset}input[readonly=true]{color:#000!important;background-color:#d3d3d3!important}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}input[class=currency]{padding:2px;padding-right:12px;text-align:right;background-image:url(data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22225%22%20height=%22300%22%3E%3Cpath%20stroke=%22none%22%20d=%22m%20224.99996,16.22698%20-8.11342,36.41161%20q%20-24.14255,-19.78892%20-54.61741,-19.78892%20-41.3588,0%20-65.00658,23.74671%20-23.647774,23.7467%20-28.397115,53.23215%20l%20134.960355,0%20-5.14505,26.71508%20-132.981532,0%20-0.395848,7.71771%200.395848,18.20566%20127.242642,0%20-5.14505,26.71508%20-117.941954,0%20q%207.519719,40.17154%2032.552754,59.06997%2025.03303,18.89844%2056.49745,18.89844%2037.20302,0%2057.98149,-19.59107%20l%200,40.9631%20Q%20192.34828,300%20162.26913,300%2053.034301,300%2030.474864,189.18206%20l%20-30.474864,0%205.738751,-26.71508%2020.580475,0%20q%20-0.395708,-4.74934%20-0.395708,-17.80995%20l%200,-8.11342%20-25.923518,0%205.738751,-26.71508%2023.152999,0%20Q%2039.181988,55.21112%2076.583149,27.60556%20113.98417,0%20163.06069,0%20199.868,0%20224.99996,16.22698%20z%22%20/%3E%0A%3C/svg%3E),linear-gradient(to bottom,#fff 0,#fff 100%);background-repeat:no-repeat,repeat;background-position:right 2px top 50%,0 0;background-size:9px auto,100%}input[class=currency]:read-only{background-image:url(data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22225%22%20height=%22300%22%3E%3Cpath%20stroke=%22none%22%20d=%22m%20224.99996,16.22698%20-8.11342,36.41161%20q%20-24.14255,-19.78892%20-54.61741,-19.78892%20-41.3588,0%20-65.00658,23.74671%20-23.647774,23.7467%20-28.397115,53.23215%20l%20134.960355,0%20-5.14505,26.71508%20-132.981532,0%20-0.395848,7.71771%200.395848,18.20566%20127.242642,0%20-5.14505,26.71508%20-117.941954,0%20q%207.519719,40.17154%2032.552754,59.06997%2025.03303,18.89844%2056.49745,18.89844%2037.20302,0%2057.98149,-19.59107%20l%200,40.9631%20Q%20192.34828,300%20162.26913,300%2053.034301,300%2030.474864,189.18206%20l%20-30.474864,0%205.738751,-26.71508%2020.580475,0%20q%20-0.395708,-4.74934%20-0.395708,-17.80995%20l%200,-8.11342%20-25.923518,0%205.738751,-26.71508%2023.152999,0%20Q%2039.181988,55.21112%2076.583149,27.60556%20113.98417,0%20163.06069,0%20199.868,0%20224.99996,16.22698%20z%22%20/%3E%0A%3C/svg%3E),linear-gradient(to bottom,#d3d3d3 0,#d3d3d3 100%)}input[class=percent]{padding:2px;padding-right:12px;text-align:right;background-image:url('data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22256%22%20height=%22232%22%20version=%221.0%22%3E%3Cg%20transform=%22translate(-112.3674,-128.3649)%22%3E%3Cpath%20style=%22fill:black;fill-opacity:1;stroke:none%22%20d=%22M%20317.1674,257.53698%20C%20308.53463,257.53708%20301.73774,261.20839%20296.77671,268.55094%20C%20291.91449,275.89365%20289.48349,286.1138%20289.48368,299.2114%20C%20289.48349,312.11067%20291.91449,322.2812%20296.77671,329.72303%20C%20301.73774,337.06568%20308.53463,340.737%20317.1674,340.73698%20C%20325.60128,340.737%20332.24934,337.06568%20337.11159,329.72303%20C%20342.07258,322.2812%20344.5532,312.11067%20344.55345,299.2114%20C%20344.5532,286.21302%20342.07258,276.04249%20337.11159,268.69977%20C%20332.24934,261.25801%20325.60128,257.53708%20317.1674,257.53698%20M%20317.1674,238.63466%20C%20332.84469,238.63477%20345.29739,244.09213%20354.52554,255.00675%20C%20363.75318,265.92157%20368.36713,280.65644%20368.3674,299.2114%20C%20368.36713,317.76648%20363.70357,332.50135%20354.37671,343.41605%20C%20345.14855,354.23156%20332.74546,359.6393%20317.1674,359.63931%20C%20301.29123,359.6393%20288.7393,354.23156%20279.51159,343.41605%20C%20270.28351,332.50135%20265.66956,317.76648%20265.66973,299.2114%20C%20265.66956,280.55721%20270.28351,265.82234%20279.51159,255.00675%20C%20288.83853,244.09213%20301.39045,238.63477%20317.1674,238.63466%20M%20163.5674,147.9928%20C%20155.03401,147.993%20148.28673,151.71393%20143.32554,159.15559%20C%20138.46349,166.49841%20136.03248,176.61933%20136.03252,189.51838%20C%20136.03248,202.61621%20138.46349,212.83635%20143.32554,220.17884%20C%20148.18751,227.52161%20154.93479,231.19292%20163.5674,231.1928%20C%20172.19989,231.19292%20178.94717,227.52161%20183.80926,220.17884%20C%20188.77041,212.83635%20191.25103,202.61621%20191.25113,189.51838%20C%20191.25103,176.71856%20188.77041,166.59764%20183.80926,159.15559%20C%20178.84794,151.71393%20172.10066,147.993%20163.5674,147.9928%20M%20297.9674,129.09047%20L%20321.78136,129.09047%20L%20182.7674,359.63931%20L%20158.95345,359.63931%20L%20297.9674,129.09047%20M%20163.5674,129.09047%20C%20179.24484,129.0907%20191.74715,134.54806%20201.07438,145.46256%20C%20210.4014,156.27827%20215.06496,170.96352%20215.06508,189.51838%20C%20215.06496,208.27201%20210.4014,223.05649%20201.07438,233.87187%20C%20191.84638,244.68748%20179.34406,250.09523%20163.5674,250.09512%20C%20147.79061,250.09523%20135.28829,244.68748%20126.06043,233.87187%20C%20116.93172,222.95727%20112.36739,208.17279%20112.3674,189.51838%20C%20112.36739,171.06275%20116.98134,156.37749%20126.20926,145.46256%20C%20135.43713,134.54806%20147.88983,129.0907%20163.5674,129.09047%22%20/%3E%3C/g%3E%3C/svg%3E'),linear-gradient(to bottom,#fff 0,#fff 100%);background-repeat:no-repeat,repeat;background-position:right 2px top 50%,0 0;background-size:9px auto,100%}label{height:12.8px!important;color:#000;font-size:8pt}input[type=checkbox]{display:block;-webkit-appearance:none;height:29.66px;width:29.66px;cursor:pointer;position:relative;-webkit-transition:.15s;border-radius:unset;border:1px solid #ccc;background-color:#fff}input[type=checkbox]:checked{background-color:#9abcea}input[type=checkbox]:before,input[type=checkbox]:checked:before{position:absolute;top:0;left:0;width:100%;height:100%;line-height:2em;text-align:center;color:#000;content:''}input[type=checkbox]:checked:before{font-size:11pt;content:'✔'}input[type=checkbox]:hover:before{background:rgba(255,255,255,.3)}body.mceContentBody{background:#e8f0fe;color:#000}:focus{outline:1px solid #607d8b}.modal-content>header{background-color:#293146;color:#fff;padding:8px!important;margin-bottom:10px}.modal-content>header>h2{font-size:13pt}.modal-content>footer{text-align:right!important;color:#000!important;background-color:#c6c6c6!important;margin-top:6px;padding-top:8px!important;padding-bottom:8px!important}.modal-content>footer:after,.modal-content>footer:before,.modal-content>header:after,.modal-content>header:before{content:"";display:table;clear:both}span[class^=icon]::after{content:"\A";white-space:pre}.inlinebtn{position:relative;height:28px;margin-top:-28px;margin-left:-20px;padding:4px 8px;border:0!important;float:right}#loader{position:absolute;left:50%;top:50%;z-index:1;width:150px;height:150px;margin:-75px 0 0 -75px;border:16px solid #f3f3f3;border-radius:50%;border-top:16px solid #3498db;width:120px;height:120px;-webkit-animation:spin 2s linear infinite;animation:spin 2s linear infinite}@-webkit-keyframes spin{0%{-webkit-transform:rotate(0)}100%{-webkit-transform:rotate(360deg)}}@keyframes spin{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}
\ No newline at end of file
diff --git a/admin/db.php b/admin/db.php
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/admin/img/POT-logo.png b/admin/img/POT-logo.png
new file mode 100644 (file)
index 0000000..e2c8028
Binary files /dev/null and b/admin/img/POT-logo.png differ
diff --git a/admin/img/bg1.jpg b/admin/img/bg1.jpg
new file mode 100644 (file)
index 0000000..80c5326
Binary files /dev/null and b/admin/img/bg1.jpg differ
diff --git a/admin/img/favicon/android-icon-144x144.png b/admin/img/favicon/android-icon-144x144.png
new file mode 100644 (file)
index 0000000..6aa79d8
Binary files /dev/null and b/admin/img/favicon/android-icon-144x144.png differ
diff --git a/admin/img/favicon/android-icon-192x192.png b/admin/img/favicon/android-icon-192x192.png
new file mode 100644 (file)
index 0000000..f58a3e6
Binary files /dev/null and b/admin/img/favicon/android-icon-192x192.png differ
diff --git a/admin/img/favicon/android-icon-36x36.png b/admin/img/favicon/android-icon-36x36.png
new file mode 100644 (file)
index 0000000..f52eed7
Binary files /dev/null and b/admin/img/favicon/android-icon-36x36.png differ
diff --git a/admin/img/favicon/android-icon-48x48.png b/admin/img/favicon/android-icon-48x48.png
new file mode 100644 (file)
index 0000000..d5beba1
Binary files /dev/null and b/admin/img/favicon/android-icon-48x48.png differ
diff --git a/admin/img/favicon/android-icon-72x72.png b/admin/img/favicon/android-icon-72x72.png
new file mode 100644 (file)
index 0000000..7c7f324
Binary files /dev/null and b/admin/img/favicon/android-icon-72x72.png differ
diff --git a/admin/img/favicon/android-icon-96x96.png b/admin/img/favicon/android-icon-96x96.png
new file mode 100644 (file)
index 0000000..38484ee
Binary files /dev/null and b/admin/img/favicon/android-icon-96x96.png differ
diff --git a/admin/img/favicon/apple-icon-114x114.png b/admin/img/favicon/apple-icon-114x114.png
new file mode 100644 (file)
index 0000000..3d448dd
Binary files /dev/null and b/admin/img/favicon/apple-icon-114x114.png differ
diff --git a/admin/img/favicon/apple-icon-120x120.png b/admin/img/favicon/apple-icon-120x120.png
new file mode 100644 (file)
index 0000000..99a1a39
Binary files /dev/null and b/admin/img/favicon/apple-icon-120x120.png differ
diff --git a/admin/img/favicon/apple-icon-144x144.png b/admin/img/favicon/apple-icon-144x144.png
new file mode 100644 (file)
index 0000000..6aa79d8
Binary files /dev/null and b/admin/img/favicon/apple-icon-144x144.png differ
diff --git a/admin/img/favicon/apple-icon-152x152.png b/admin/img/favicon/apple-icon-152x152.png
new file mode 100644 (file)
index 0000000..3ee4143
Binary files /dev/null and b/admin/img/favicon/apple-icon-152x152.png differ
diff --git a/admin/img/favicon/apple-icon-180x180.png b/admin/img/favicon/apple-icon-180x180.png
new file mode 100644 (file)
index 0000000..7541cce
Binary files /dev/null and b/admin/img/favicon/apple-icon-180x180.png differ
diff --git a/admin/img/favicon/apple-icon-57x57.png b/admin/img/favicon/apple-icon-57x57.png
new file mode 100644 (file)
index 0000000..58d5700
Binary files /dev/null and b/admin/img/favicon/apple-icon-57x57.png differ
diff --git a/admin/img/favicon/apple-icon-60x60.png b/admin/img/favicon/apple-icon-60x60.png
new file mode 100644 (file)
index 0000000..31a3f78
Binary files /dev/null and b/admin/img/favicon/apple-icon-60x60.png differ
diff --git a/admin/img/favicon/apple-icon-72x72.png b/admin/img/favicon/apple-icon-72x72.png
new file mode 100644 (file)
index 0000000..7c7f324
Binary files /dev/null and b/admin/img/favicon/apple-icon-72x72.png differ
diff --git a/admin/img/favicon/apple-icon-76x76.png b/admin/img/favicon/apple-icon-76x76.png
new file mode 100644 (file)
index 0000000..bd28884
Binary files /dev/null and b/admin/img/favicon/apple-icon-76x76.png differ
diff --git a/admin/img/favicon/apple-icon-precomposed.png b/admin/img/favicon/apple-icon-precomposed.png
new file mode 100644 (file)
index 0000000..cd3635a
Binary files /dev/null and b/admin/img/favicon/apple-icon-precomposed.png differ
diff --git a/admin/img/favicon/apple-icon.png b/admin/img/favicon/apple-icon.png
new file mode 100644 (file)
index 0000000..cd3635a
Binary files /dev/null and b/admin/img/favicon/apple-icon.png differ
diff --git a/admin/img/favicon/browserconfig.xml b/admin/img/favicon/browserconfig.xml
new file mode 100644 (file)
index 0000000..c554148
--- /dev/null
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="utf-8"?>
+<browserconfig><msapplication><tile><square70x70logo src="/ms-icon-70x70.png"/><square150x150logo src="/ms-icon-150x150.png"/><square310x310logo src="/ms-icon-310x310.png"/><TileColor>#ffffff</TileColor></tile></msapplication></browserconfig>
\ No newline at end of file
diff --git a/admin/img/favicon/favicon-16x16.png b/admin/img/favicon/favicon-16x16.png
new file mode 100644 (file)
index 0000000..09adf92
Binary files /dev/null and b/admin/img/favicon/favicon-16x16.png differ
diff --git a/admin/img/favicon/favicon-32x32.png b/admin/img/favicon/favicon-32x32.png
new file mode 100644 (file)
index 0000000..3281e25
Binary files /dev/null and b/admin/img/favicon/favicon-32x32.png differ
diff --git a/admin/img/favicon/favicon-96x96.png b/admin/img/favicon/favicon-96x96.png
new file mode 100644 (file)
index 0000000..38484ee
Binary files /dev/null and b/admin/img/favicon/favicon-96x96.png differ
diff --git a/admin/img/favicon/favicon.ico b/admin/img/favicon/favicon.ico
new file mode 100644 (file)
index 0000000..bbf93a1
Binary files /dev/null and b/admin/img/favicon/favicon.ico differ
diff --git a/admin/img/favicon/manifest.json b/admin/img/favicon/manifest.json
new file mode 100644 (file)
index 0000000..013d4a6
--- /dev/null
@@ -0,0 +1,41 @@
+{
+ "name": "App",
+ "icons": [
+  {
+   "src": "\/android-icon-36x36.png",
+   "sizes": "36x36",
+   "type": "image\/png",
+   "density": "0.75"
+  },
+  {
+   "src": "\/android-icon-48x48.png",
+   "sizes": "48x48",
+   "type": "image\/png",
+   "density": "1.0"
+  },
+  {
+   "src": "\/android-icon-72x72.png",
+   "sizes": "72x72",
+   "type": "image\/png",
+   "density": "1.5"
+  },
+  {
+   "src": "\/android-icon-96x96.png",
+   "sizes": "96x96",
+   "type": "image\/png",
+   "density": "2.0"
+  },
+  {
+   "src": "\/android-icon-144x144.png",
+   "sizes": "144x144",
+   "type": "image\/png",
+   "density": "3.0"
+  },
+  {
+   "src": "\/android-icon-192x192.png",
+   "sizes": "192x192",
+   "type": "image\/png",
+   "density": "4.0"
+  }
+ ]
+}
\ No newline at end of file
diff --git a/admin/img/favicon/ms-icon-144x144.png b/admin/img/favicon/ms-icon-144x144.png
new file mode 100644 (file)
index 0000000..6aa79d8
Binary files /dev/null and b/admin/img/favicon/ms-icon-144x144.png differ
diff --git a/admin/img/favicon/ms-icon-150x150.png b/admin/img/favicon/ms-icon-150x150.png
new file mode 100644 (file)
index 0000000..b08e562
Binary files /dev/null and b/admin/img/favicon/ms-icon-150x150.png differ
diff --git a/admin/img/favicon/ms-icon-310x310.png b/admin/img/favicon/ms-icon-310x310.png
new file mode 100644 (file)
index 0000000..12046d8
Binary files /dev/null and b/admin/img/favicon/ms-icon-310x310.png differ
diff --git a/admin/img/favicon/ms-icon-70x70.png b/admin/img/favicon/ms-icon-70x70.png
new file mode 100644 (file)
index 0000000..5135560
Binary files /dev/null and b/admin/img/favicon/ms-icon-70x70.png differ
diff --git a/admin/img/logo_512.png b/admin/img/logo_512.png
new file mode 100644 (file)
index 0000000..37e2068
Binary files /dev/null and b/admin/img/logo_512.png differ
diff --git a/admin/img/logo_512_xx.png b/admin/img/logo_512_xx.png
new file mode 100644 (file)
index 0000000..b82da90
Binary files /dev/null and b/admin/img/logo_512_xx.png differ
diff --git a/admin/img/potbg.jpg b/admin/img/potbg.jpg
new file mode 100644 (file)
index 0000000..5167072
Binary files /dev/null and b/admin/img/potbg.jpg differ
diff --git a/admin/img/poticon512.png b/admin/img/poticon512.png
new file mode 100644 (file)
index 0000000..bce391c
Binary files /dev/null and b/admin/img/poticon512.png differ
diff --git a/admin/img/potlogowhite.svg b/admin/img/potlogowhite.svg
new file mode 100644 (file)
index 0000000..7c2ec3b
--- /dev/null
@@ -0,0 +1,133 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   height="160"
+   width="360"
+   xml:space="preserve"
+   viewBox="0 0 360 160"
+   y="0px"
+   x="0px"
+   id="Calque_1"
+   version="1.1"><metadata
+   id="metadata107"><rdf:RDF><cc:Work
+       rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
+         rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs
+   id="defs105" />
+<style
+   id="style2"
+   type="text/css">
+       .st0{fill:#003268;}
+       .st1{fill:#FFFFFF;}
+       .st2{fill:#005BCE;}
+</style>
+
+
+
+
+<g
+   transform="matrix(0.25,0,0,0.25,-0.12375257,-116.72349)"
+   id="g953"><g
+     id="g36"
+     style="fill:#ffffff;fill-opacity:1"
+     transform="translate(-247.74194,307.80059)">
+       <g
+   id="g28"
+   style="fill:#ffffff;fill-opacity:1">
+               <path
+   class="st0"
+   d="m 1107.86,464.03 c -38.08,-0.02 -76.17,-0.02 -114.24,0.05 -2.02,0 -3.2,-0.62 -4.56,-2.21 -2.29,-2.68 -4.94,-5.26 -7.96,-6.97 -2.41,-1.38 -2.96,-2.75 -2.96,-5.27 0.07,-48.71 0.04,-97.43 0.04,-146.14 0,-1.2 0.07,-2.41 -0.04,-3.59 -0.37,-4.36 -4.07,-7.2 -8.41,-6.52 -3.87,0.61 -6.02,3.54 -6.02,8.34 -0.02,24.74 0,49.48 0,74.22 0,24.6 -0.02,49.23 0.02,73.86 0.03,2.37 -0.41,3.72 -2.82,5.04 -2.96,1.57 -5.56,4.07 -7.79,6.63 -1.47,1.69 -2.65,2.67 -5,2.63 -7.59,-0.15 -15.19,-0.04 -22.79,0 -3.52,0.02 -6.26,1.66 -8.16,4.55 -2.24,3.33 -2.34,6.96 -0.55,10.51 1.88,3.7 5.17,5.52 9.28,5.56 7.58,0.07 15.2,-0.06 22.77,0.11 1.34,0.05 2.8,1.07 3.94,1.97 3,2.41 5.72,5.23 8.87,7.42 1.53,1.05 2.3,1.82 2.28,3.73 -0.11,7.15 -0.07,14.31 -0.05,21.47 0,1.18 -0.02,2.41 0.27,3.55 0.83,3.39 4.18,5.65 7.61,5.32 3.77,-0.37 6.51,-3.22 6.57,-7.23 0.09,-7.7 0.07,-15.41 0,-23.11 0,-1.97 0.79,-2.89 2.54,-3.95 2.89,-1.72 5.72,-3.91 7.86,-6.5 1.62,-1.97 3.07,-2.82 5.58,-2.82 27.57,0.09 55.13,0.06 82.67,0.06 10.64,0 21.28,0.07 31.9,-0.02 6.66,-0.06 11.03,-4.55 10.84,-10.79 -0.2,-6.09 -4.64,-9.9 -11.69,-9.9 z m -124.61,11.53 c 0,0.01 0,0.02 -0.01,0.04 -0.01,0.13 -0.02,0.25 -0.04,0.38 -0.02,0.19 -0.05,0.37 -0.09,0.56 -0.1,0.55 -0.24,1.1 -0.42,1.63 -0.06,0.18 -0.12,0.36 -0.19,0.53 -0.08,0.21 -0.16,0.41 -0.26,0.62 -0.08,0.19 -0.16,0.37 -0.26,0.54 -0.18,0.36 -0.38,0.72 -0.6,1.05 -0.32,0.5 -0.68,0.98 -1.07,1.44 0,0.01 0,0.01 -0.01,0.02 -0.27,0.3 -0.54,0.58 -0.82,0.86 -0.15,0.14 -0.3,0.28 -0.45,0.42 0,0 0,0.01 -0.01,0.01 -0.2,0.18 -0.41,0.35 -0.62,0.51 -0.16,0.13 -0.32,0.25 -0.48,0.36 -0.94,0.67 -1.98,1.22 -3.09,1.62 -0.78,0.28 -1.58,0.49 -2.42,0.62 -0.42,0.06 -0.84,0.11 -1.27,0.13 -0.21,0 -0.42,0.01 -0.64,0.01 -0.23,0.01 -0.45,0 -0.68,-0.02 -0.17,-0.01 -0.34,-0.03 -0.52,-0.05 -0.37,-0.04 -0.74,-0.11 -1.1,-0.2 -0.36,-0.09 -0.72,-0.2 -1.07,-0.32 -1.28,-0.47 -2.5,-1.18 -3.6,-2.07 -0.19,-0.15 -0.38,-0.32 -0.56,-0.48 -0.24,-0.22 -0.47,-0.44 -0.69,-0.67 -0.05,-0.05 -0.1,-0.11 -0.15,-0.16 -0.22,-0.24 -0.44,-0.49 -0.64,-0.74 -0.26,-0.31 -0.5,-0.63 -0.72,-0.96 -0.22,-0.33 -0.43,-0.66 -0.63,-1.01 -0.38,-0.7 -0.71,-1.42 -0.95,-2.16 -0.13,-0.37 -0.23,-0.75 -0.32,-1.12 -0.04,-0.19 -0.08,-0.38 -0.11,-0.57 -0.06,-0.29 -0.1,-0.59 -0.11,-0.89 -0.03,-0.3 -0.04,-0.6 -0.04,-0.9 0,-0.22 0.01,-0.44 0.01,-0.66 0.02,-0.4 0.05,-0.79 0.11,-1.18 0.02,-0.14 0.04,-0.29 0.07,-0.43 0.01,-0.08 0.02,-0.15 0.04,-0.23 0.02,-0.07 0.04,-0.15 0.05,-0.23 0.03,-0.16 0.06,-0.31 0.1,-0.46 0.06,-0.25 0.13,-0.5 0.21,-0.74 0.16,-0.54 0.37,-1.07 0.61,-1.58 0.08,-0.18 0.17,-0.36 0.27,-0.54 0.12,-0.22 0.24,-0.44 0.37,-0.65 0.13,-0.21 0.26,-0.42 0.41,-0.63 0.28,-0.4 0.59,-0.79 0.92,-1.16 0.17,-0.2 0.36,-0.4 0.56,-0.58 0.16,-0.16 0.32,-0.31 0.49,-0.46 0.18,-0.16 0.37,-0.32 0.57,-0.47 0.19,-0.15 0.39,-0.29 0.6,-0.43 0.61,-0.42 1.27,-0.78 1.96,-1.08 0.23,-0.1 0.46,-0.19 0.7,-0.28 0.17,-0.06 0.34,-0.12 0.51,-0.17 0.17,-0.06 0.34,-0.11 0.51,-0.15 0.17,-0.04 0.35,-0.09 0.53,-0.13 0.18,-0.03 0.35,-0.07 0.53,-0.1 0.55,-0.09 1.1,-0.15 1.67,-0.18 0.22,-0.01 0.44,-0.01 0.66,-0.01 0.16,0 0.32,0 0.48,0.01 0.15,0.01 0.31,0.02 0.47,0.03 0.31,0.03 0.62,0.06 0.92,0.11 0.27,0.04 0.54,0.1 0.81,0.16 0.26,0.06 0.53,0.13 0.79,0.21 0.25,0.07 0.51,0.16 0.75,0.25 l 0.01,0.01 c 0.24,0.09 0.48,0.18 0.71,0.28 0.04,0.02 0.07,0.03 0.11,0.06 0.22,0.1 0.43,0.2 0.65,0.32 0.22,0.11 0.44,0.24 0.66,0.37 0.01,0.01 0.02,0.01 0.03,0.02 0.22,0.14 0.44,0.29 0.66,0.44 0.21,0.15 0.42,0.31 0.63,0.48 0.1,0.08 0.2,0.16 0.29,0.24 0.2,0.17 0.4,0.36 0.59,0.55 0.18,0.17 0.35,0.35 0.51,0.53 0.27,0.29 0.52,0.59 0.75,0.91 0.11,0.16 0.23,0.32 0.34,0.48 0.22,0.32 0.42,0.66 0.61,1.01 0.25,0.47 0.48,0.96 0.66,1.47 0.08,0.19 0.15,0.38 0.21,0.58 0.41,1.24 0.62,2.57 0.6,3.95 0,0.35 -0.02,0.69 -0.06,1.03 z"
+   id="path4"
+   style="fill:#ffffff;fill-opacity:1" />
+               <path
+   class="st0"
+   d="m 977.13,266.06 c 0,2.38 0.18,4.77 -0.05,7.13 -0.33,3.46 -2.74,5.61 -5.97,5.68 -3.35,0.08 -6.09,-2.12 -6.28,-5.68 -0.26,-4.85 -0.26,-9.73 0,-14.58 0.18,-3.35 2.89,-5.5 6.12,-5.5 3.24,0 5.81,2.14 6.15,5.5 0.24,2.46 0.05,4.97 0.05,7.46 -0.02,-0.01 -0.02,-0.01 -0.02,-0.01 z"
+   id="path6"
+   style="fill:#ffffff;fill-opacity:1" />
+               <path
+   class="st0"
+   d="m 977.18,682.72 c 0,2.27 0.14,4.55 -0.03,6.81 -0.29,3.76 -2.88,6.18 -6.28,6.13 -3.29,-0.05 -5.91,-2.38 -6.08,-5.97 -0.22,-4.64 -0.22,-9.3 -0.02,-13.95 0.16,-3.57 2.77,-5.88 6.09,-5.93 3.45,-0.04 6.03,2.35 6.3,6.08 0.17,2.26 0.03,4.54 0.03,6.82 -0.01,0.01 -0.01,0.01 -0.01,0.01 z"
+   id="path8"
+   style="fill:#ffffff;fill-opacity:1" />
+               <path
+   class="st0"
+   d="m 1192.26,474.54 c -0.1,3.29 -2.6,5.76 -6.06,5.98 -0.21,0.02 -0.44,0.01 -0.65,0.01 h -6.5 c 0,-0.01 0,-0.01 0,-0.01 -2.27,0 -4.55,0.1 -6.82,-0.03 -3.29,-0.18 -5.7,-2.67 -5.86,-5.83 -0.16,-3.24 2.25,-6.29 5.58,-6.45 4.86,-0.21 9.75,-0.2 14.61,-0.01 3.38,0.14 5.8,3.07 5.7,6.34 z"
+   id="path10"
+   style="fill:#ffffff;fill-opacity:1" />
+               <path
+   class="st0"
+   d="m 775.52,474.41 c -0.01,3.28 -2.51,5.85 -5.93,6.11 -0.21,0.01 -0.44,0.01 -0.65,0.01 -1.44,0.01 -2.88,0.01 -4.33,0.01 -0.72,-0.01 -1.45,-0.01 -2.17,-0.01 -1.8,-0.01 -3.61,0.05 -5.42,0.02 -0.46,-0.01 -0.93,-0.03 -1.4,-0.05 -3.44,-0.17 -5.94,-2.75 -5.99,-6.04 -0.05,-3.27 2.4,-6.15 5.78,-6.27 4.75,-0.18 9.53,-0.18 14.29,-0.01 3.37,0.13 5.84,2.97 5.82,6.23 z"
+   id="path12"
+   style="fill:#ffffff;fill-opacity:1" />
+               <path
+   class="st1"
+   d="m 958.61,474.59 c 0,0.3 0.01,0.6 0.04,0.9 -0.04,-0.3 -0.05,-0.6 -0.05,-0.91 0,-0.22 0.01,-0.43 0.02,-0.65 0,0.22 -0.01,0.44 -0.01,0.66 z"
+   id="path14"
+   style="fill:#ffffff;fill-opacity:1" />
+               <path
+   class="st1"
+   d="m 961.78,466.1 c -0.33,0.37 -0.64,0.76 -0.92,1.16 0.28,-0.4 0.58,-0.79 0.92,-1.16 z"
+   id="path16"
+   style="fill:#ffffff;fill-opacity:1" />
+               <path
+   class="st1"
+   d="m 968.74,462.25 c 0.54,-0.1 1.1,-0.16 1.67,-0.18 -0.57,0.03 -1.12,0.09 -1.67,0.18 z"
+   id="path18"
+   style="fill:#ffffff;fill-opacity:1" />
+               <path
+   class="st1"
+   d="m 970.5,486.91 c 0.22,0 0.43,-0.01 0.64,-0.01 -0.22,0.01 -0.43,0.02 -0.65,0.02 -0.23,0 -0.45,-0.01 -0.67,-0.03 0.23,0.02 0.45,0.03 0.68,0.02 z"
+   id="path20"
+   style="fill:#ffffff;fill-opacity:1" />
+               <path
+   class="st1"
+   d="m 971.07,462.05 c 0.16,0 0.32,0.01 0.48,0.02 -0.16,-0.01 -0.32,-0.01 -0.48,-0.01 -0.22,0 -0.44,0 -0.66,0.01 0.22,-0.02 0.44,-0.02 0.66,-0.02 z"
+   id="path22"
+   style="fill:#ffffff;fill-opacity:1" />
+               <path
+   class="st1"
+   d="m 979.48,483.23 c 0.28,-0.28 0.55,-0.56 0.82,-0.86 -0.39,0.46 -0.81,0.89 -1.27,1.28 0.15,-0.14 0.3,-0.28 0.45,-0.42 z"
+   id="path24"
+   style="fill:#ffffff;fill-opacity:1" />
+               <path
+   class="st1"
+   d="m 980.31,482.35 c 0.39,-0.46 0.75,-0.94 1.07,-1.44 -0.32,0.51 -0.67,0.99 -1.07,1.44 z"
+   id="path26"
+   style="fill:#ffffff;fill-opacity:1" />
+       </g>
+       <g
+   id="g34"
+   style="fill:#ffffff;fill-opacity:1">
+               <path
+   class="st2"
+   d="m 938.51,758.43 c -34.37,-2.96 -66.64,-13.09 -97.29,-28.53 -49.17,-24.78 -88.16,-60.95 -116.45,-107.95 -25.2,-41.88 -38.29,-87.64 -39.36,-136.77 -0.09,-3.85 -0.09,-7.71 0,-11.52 0.09,-7.29 0.48,-14.49 1.12,-21.63 11.91,-134.4 113.67,-241.26 251.03,-257.66 4.31,-0.5 8.67,-0.59 14.3,-0.96 v 29.07 c -46.37,3.83 -89.21,17.01 -126.34,44.05 -69.97,50.9 -108.26,116.27 -110.73,196.23 -0.2,6.09 -0.18,12.24 0.07,18.48 0.42,11.65 1.55,23.58 3.44,35.79 14.1,91.8 67.32,155.37 150.6,193.47 20.65,9.46 44.33,12.65 66.88,17.32 10.14,2.1 16.07,5.85 16.59,16.44 0.42,9.68 -3.48,15.07 -13.86,14.17 z"
+   id="path30"
+   style="fill:#ffffff;fill-opacity:1" />
+               <path
+   class="st0"
+   d="m 1162.02,683.4 c -44.03,42.88 -98.06,67.32 -159.42,74.45 -8.29,0.97 -17.41,2.57 -19.25,-9.57 -1.57,-10.33 4.3,-17.15 16.13,-19.83 19.48,-4.43 39.28,-7.97 58.3,-14 35.17,-11.17 65.04,-31.76 90.27,-58.19 73.17,-76.55 94.83,-166.82 58.98,-265.97 -35.85,-99.21 -110.67,-153.99 -215.54,-167.1 -1.7,-0.21 -3.41,-0.45 -6.61,-0.87 v -29.03 c 11.2,1.26 21.95,1.57 32.31,3.75 112.32,23.39 189.63,88.88 222.52,198.65 32.9,109.93 4.63,207.56 -77.69,287.71 z"
+   id="path32"
+   style="fill:#ffffff;fill-opacity:1" />
+       </g>
+</g><path
+     class="st2"
+     d="m 372.73806,659.40059 c -0.72,-46.47 -16.42,-83.63 -47.1,-111.47 -31.42,-28.52 -73.53,-42.77 -126.33,-42.77 H 41.938065 c -9.98,0 -18.07,8.09 -18.07,18.07 v 82.8 c 14.78,-16.16 35.3,-26.83 57.84,-27.88 28.019995,-1.31 56.119995,-0.7 84.179995,-0.92 0.8,0 1.58,0.38 2.4,0.6 l 0.4,63.51 c -16.76,1.57 -26.57,10.97 -26.99,25.49 -0.43,14.39 9.08,23.89 27.48,27.23 l 0.4,63.57 c -25.22,0.16 -49.7,0.4 -74.199995,0.4 -7.3,0 -14.69,-0.05 -21.88,-1.21 -19.86,-3.2 -36.97,-13 -49.63,-27.15 v 311.46001 c 0,9.98 8.09,18.08 18.07,18.08 h 43.45 c 9.98,0 18.079995,-8.1 18.079995,-18.08 V 837.29059 c 0,-9.99 8.09,-18.08 18.08,-18.08 h 40.53 c 52.28,0 92.41,-5.61 120.39,-16.83 27.99,-11.22 50.03,-29.24 66.14,-54.06 13.39,-20.63 21.21,-43.82 23.47,-69.57 0.46,-5.22 0.69,-10.54 0.69,-15.97 0,-1.13 -0.01,-2.26 -0.03,-3.38 z m -83.69,-0.2 c -14.22,0.09 -28.41,0.29 -42.61,0.1 -1.43,-0.01 -3.22,-2.13 -4.18,-3.71 -5.51,-9.04 -12.77,-14.53 -23.58,-14.25 -11.44,0.29 -22.88,0.19 -34.61,0.27 l -0.41,-64 c 63.78,-8.71 102.92,37.04 105.39,81.59 z m -121.78,19 c -6.43,-0.07 -10.54,-4.08 -10.89,-10.11 -0.37,-6.14 3.22,-10.98 9.61,-11.2 17.95,-0.62 35.92,-0.96 53.88,-0.86 6.81,0.03 10.48,4.78 10.28,11.31 -0.21,6.76 -3.71,10.47 -10.85,10.71 -8.74,0.32 -17.52,0.18 -26.3,0.24 v -0.2 c -8.57,0.06 -17.16,0.23 -25.73,0.11 z m 17.61,78.72 -0.41,-63.97 c 10.99,-0.07 21.62,-0.7 32.19,-0.06 12.21,0.74 20.12,-5.14 26.08,-15.3 0.73,-1.24 2.22,-2.85 3.38,-2.87 14.39,-0.3 28.77,-0.31 43.19,-0.4 -2.61,44.46 -40.31,90.56 -104.43,82.6 z"
+     id="path94"
+     style="fill:#ffffff;fill-opacity:1" /><path
+     class="st2"
+     d="M 1401.8881,501.41059 H 995.96806 c -12.49,0 -22.62,10.12 -22.62,22.62 v 25.52 c 0,12.49 10.13,22.62 22.62,22.62 h 144.46004 c 12.49,0 22.62,10.13 22.62,22.62 v 440.19001 c 0,12.49 10.13,22.62 22.62,22.62 h 34.36 c 12.5,0 22.62,-10.13 22.62,-22.62 V 594.79059 c 0,-12.49 10.13,-22.62 22.62,-22.62 h 136.62 c 12.49,0 22.62,-10.13 22.62,-22.62 v -25.52 c 0,-12.5 -10.13,-22.62 -22.62,-22.62 z"
+     id="path96"
+     style="fill:#ffffff;fill-opacity:1" /><g
+     id="g100"
+     style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-opacity:1"
+     transform="translate(-247.74194,307.80059)">
+       <path
+   class="st2"
+   d="m 560.4,349.53 c -1.41,0 -2.83,0.29 -4.51,0.47 l 0.11,17.56 c 1.71,0.12 3.48,0.34 5.27,0.34 15.07,0.02 30.16,-0.19 45.24,0.06 13.92,0.22 19.38,5.01 21.47,19.27 1.25,8.54 1.73,17.24 2.01,25.87 0.99,30.98 17.18,50.79 46.85,55.6 9.62,1.56 19.56,1.28 29.35,1.22 6.08,-0.04 9.74,-4.48 9.29,-9.82 -0.42,-5.1 -4.33,-8.12 -10.16,-8.33 -9.15,-0.33 -18.49,0.09 -27.43,-1.58 -19.96,-3.75 -29.56,-16.55 -30.35,-37.68 -0.39,-10.14 -0.67,-20.43 -2.58,-30.33 -4.1,-21.16 -13.12,-30.28 -33.7,-32.1 -16.84,-1.48 -33.9,-0.47 -50.86,-0.55 z"
+   id="path98"
+   style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-opacity:1" />
+</g></g>
+</svg>
diff --git a/admin/img/pottop.png b/admin/img/pottop.png
new file mode 100644 (file)
index 0000000..5f159c5
Binary files /dev/null and b/admin/img/pottop.png differ
diff --git a/admin/img/toplogo.png b/admin/img/toplogo.png
new file mode 100644 (file)
index 0000000..37e2068
Binary files /dev/null and b/admin/img/toplogo.png differ
diff --git a/admin/index.php b/admin/index.php
new file mode 100644 (file)
index 0000000..f785fc3
--- /dev/null
@@ -0,0 +1,108 @@
+<?php 
+  require('lib/vendor/mustache/mustache/src/Mustache/Autoloader.php');
+  Mustache_Autoloader::register();
+
+  require("lib/config.php");
+  require("lib/database.php");
+  require("lib/session.php");
+  $vars = array();
+  $vars["skeleton"] = "index.html";
+  $vars["page"] = 'home.html';
+  $vars["config"] = $cfg;
+  $vars["requri"] = $_SERVER["REQUEST_URI"];
+  $postdata = [];
+  if (isset($_POST)){
+    $postdata = $_POST;
+  }
+  $vars["posts"] = $postdata;
+  if ($_SERVER["REQUEST_URI"] != $cfg["basepath"]){
+    if (strpos($_SERVER["REQUEST_URI"], ".html?") === false){
+      $vars["filepath"] = $_SERVER["REQUEST_URI"];
+    }else {
+      $vars["filepath"] = substr($_SERVER["REQUEST_URI"],0,strpos($_SERVER["REQUEST_URI"],".html?")).".html";
+    }
+    $vars["filepath"] = str_replace($cfg["basepath"],'',$vars["filepath"]);
+    $vars["params"] = getparams();
+    $vars["page"] = $vars["filepath"];
+  }
+  $abslen = substr_count($vars["page"],'/');
+  $vars["abspath"] = "";
+  if ($abslen > 0){
+    for ($i=0;$i<$abslen;$i++){
+      $vars["abspath"] .= "../";
+    }
+     
+  }
+  $vars["contenttype"] = "text/html";
+  if (substr($vars["page"],-3) == "css"){
+    $vars["contenttype"] = "text/css";
+  } elseif (substr($vars["page"],-2) == "js"){
+    $vars["contenttype"] = "text/javascript";
+  }
+  header('Content-Type: '.$vars["contenttype"]);
+  $vars["sid"] = "";
+  if (isset($_COOKIE[$cfg["cookie"]])){
+    $vars["sid"] = $_COOKIE[$cfg["cookie"]]; 
+  }
+  $db = new database($cfg["db"]);
+  $sess = new session($db);
+  if (count($postdata) > 0){
+    if (isset($postdata["btnlogin"])){
+      echo "CHECKLOGIN";
+      $vars["sid"] = $sess->checkLogin($postdata["login"],$postdata["password"],$cfg["cookie"]);
+    }
+  }
+  if($vars["sid"] == "") {
+    $vars["skeleton"] = 'login.html';
+    if ((!file_exists($cfg["templatepath"].'/pages/'.$vars["filepath"].'.mustache') && 
+      ($vars["filepath"] != 'login/forgotpassword.html') && $vars["filepath"] != 'login/message.html')){
+      $vars["page"] = 'login/login.html';
+    }
+  } else{
+
+  }
+  
+   if (($vars["skeleton"] != 'login.html') && (!file_exists($cfg["templatepath"].'/pages/'.$vars["page"].'.mustache'))){
+    $vars["origpage"] =$vars["page"];  
+    $vars["page"] = 'error.html';
+    // $vars["skeleton"] = 'login.html';
+    // $vars["page"] = 'login/login.html';
+  }
+  if (file_exists($cfg["templatepath"].'/pages/'.$vars["page"].'.json')){
+       
+    $tmpdata = file_get_contents($cfg["templatepath"].'/pages/'.$vars["page"].'.json');
+    try {
+      $vars["data"] = json_decode($tmpdata,true);
+      foreach ($vars["data"] as $key => $value) {
+        if ($value["sql"]){
+          if ($value["sqltype"] == "query"){
+            $vars["data"][$key] = $db->query($value["sql"]);
+          } elseif ($value["sqltype"] == "queryarray"){
+            $vars["data"][$key] = $db->queryarray($value["sql"]);
+          }
+        }
+      }
+    } catch(JsonException $je){
+      fwrite(STDERR, "JSON ERROR: ".$je->getMessage()."\n");
+    }
+    
+  }
+  $vars["page"] = 'pages/'.$vars["page"];
+  $m = new Mustache_Engine(array(
+    'loader' => new Mustache_Loader_FilesystemLoader($cfg["templatepath"]),
+    'partials_loader' => new Mustache_Loader_FilesystemLoader($cfg["templatepath"].'/blocks'),
+    'escape' => function($value) {
+      return $value;
+    },
+    'entity_flags' => ENT_HTML5
+    
+  ));
+  
+  
+  $vars["pagedata"] = $m->render($vars["page"],$vars);
+
+  $mainsite = $m->render($vars['skeleton'],$vars);
+  echo $mainsite;
+  $vars["pagedata"]= "";
+  echo "<pre>".print_r($vars)."</pre>";
+?>
\ No newline at end of file
diff --git a/admin/js/app.js b/admin/js/app.js
new file mode 100644 (file)
index 0000000..fbbb48a
--- /dev/null
@@ -0,0 +1,70 @@
+let app = {
+    loadpage: function(modulepage, modulename) {
+      location.href=modulepage;
+    },
+    logout: function() {
+      postData(location.href, { "logout": "1" }).then (data => { location.href = 'login.html';});
+    },
+    reloadpage() { },
+    changedataset: function(){},
+    getCurrentSchemata: function(){
+      return schemata;
+    },
+    changedataset: function(){
+      let csel = document.getElementById("current_schemata").value;
+      schemata =  csel;
+      postData("db.cgi",{"fn":"setsessiondata","params":{"schemata":csel}}).then(data => {
+        document.getElementById("current_schemata").dataset.selected = csel;
+      });
+    },
+    setschemata(data){
+    },
+    reload_page: function() {
+      location.href = location.href;
+    },
+    viewpanel: function(pnlname){
+      let panels = document.getElementsByClassName("panel");
+      let toolbars = document.getElementsByClassName("paneltoolbar");
+      currentview = pnlname;
+      for (let p=0;p<panels.length;p++){
+        panels[p].style.display = 'none';
+      }
+      for (let p=0;p<toolbars.length;p++){
+         toolbars[p].style.display = 'none';
+      }
+      if (document.getElementById('pnl_' + pnlname)){
+        document.getElementById('pnl_' + pnlname).style.display = 'block';
+      }
+      if (document.getElementById('tlb_' +pnlname)){
+         document.getElementById('tlb_' +pnlname).style.display = 'block';
+      }
+      return false;
+    },
+    viewdialog: function(dlgname){
+      if (document.getElementById('dlg_' +dlgname)){
+        document.getElementById('dlg_' +dlgname).style.display = 'block';
+      } 
+    },
+    opendlg: function(dlgname,msgdata,callback){
+      for (var x in msgdata){
+        if (document.getElementById(dlgname + x)){
+          document.getElementById(dlgname + x).innerHTML = msgdata[x];
+        }
+      }
+      if (callback){
+        if (document.getElementById(dlgname + "_button")){
+          document.getElementById(dlgname + "_button").addEventListener("click",callback,true);
+        }
+        if (document.getElementById(dlgname + "_button")){
+          document.getElementById(dlgname + "_button").addEventListener("click",callback,true);
+        }
+      }
+    },
+    closedlg: function(dlgid){
+      document.getElementById(dlgid).style.display='none';
+    }
+}
+document.addEventListener("DOMContentLoaded", function() {
+  moment.locale('fr');
+  initpage();
+});
diff --git a/admin/js/app.min.js b/admin/js/app.min.js
new file mode 100644 (file)
index 0000000..08ec326
--- /dev/null
@@ -0,0 +1 @@
+let app={loadpage:function(modulepage,modulename){location.href=modulepage},logout:function(){postData(location.href,{logout:"1"}).then(data=>{location.href="login.html"})},reloadpage(){},changedataset:function(){},getCurrentSchemata:function(){return schemata},changedataset:function(){let csel=document.getElementById("current_schemata").value;schemata=csel,postData("db.cgi",{fn:"setsessiondata",params:{schemata:csel}}).then(data=>{document.getElementById("current_schemata").dataset.selected=csel})},setschemata(data){},reload_page:function(){location.href=location.href},viewpanel:function(pnlname){let panels=document.getElementsByClassName("panel"),toolbars=document.getElementsByClassName("paneltoolbar");currentview=pnlname;for(let p=0;p<panels.length;p++)panels[p].style.display="none";for(let p=0;p<toolbars.length;p++)toolbars[p].style.display="none";return document.getElementById("pnl_"+pnlname)&&(document.getElementById("pnl_"+pnlname).style.display="block"),document.getElementById("tlb_"+pnlname)&&(document.getElementById("tlb_"+pnlname).style.display="block"),!1},viewdialog:function(dlgname){document.getElementById("dlg_"+dlgname)&&(document.getElementById("dlg_"+dlgname).style.display="block")},opendlg:function(dlgname,msgdata,callback){for(var x in msgdata)document.getElementById(dlgname+x)&&(document.getElementById(dlgname+x).innerHTML=msgdata[x]);callback&&(document.getElementById(dlgname+"_button")&&document.getElementById(dlgname+"_button").addEventListener("click",callback,!0),document.getElementById(dlgname+"_button")&&document.getElementById(dlgname+"_button").addEventListener("click",callback,!0))},closedlg:function(dlgid){document.getElementById(dlgid).style.display="none"}};document.addEventListener("DOMContentLoaded",(function(){moment.locale("fr"),initpage()}));
\ No newline at end of file
diff --git a/admin/js/dataform.js b/admin/js/dataform.js
new file mode 100644 (file)
index 0000000..2251bae
--- /dev/null
@@ -0,0 +1,263 @@
+let dataform = {
+saveform: function(frmid,aftercallback,clientschema){
+  var flds=form.getformcontent(frmid,null);
+  flds["fn"] ="saveform";
+  flds["schemata"]=clientschema;
+  flds["table"] = frmid;
+  if (clientschema == null){
+    flds["schemata"]=schemata;
+  }
+  delete flds["null"]; 
+  postData("db.cgi",flds).then(data => {
+    if (aftercallback){
+      aftercallback(data.result);
+      form.formsaved({});
+    } else {
+      form.formsaved(data.result);
+    }
+  });
+  return false;
+},
+saveformdata: function(flds,aftercallback,clientschema){
+  flds["fn"] ="saveform";
+  flds["schemata"]=clientschema;
+  if (clientschema == null){
+    flds["schemata"]=schemata;
+  }
+  delete flds["null"];
+  postData("db.cgi",flds).then(data => {
+    if (aftercallback){
+      aftercallback(data.result);
+      form.formsaved({});
+    } else {
+      form.formsaved(data.result);
+    }
+  });
+  return false;
+},
+formsaved: function(data){
+  var sb = document.getElementById("snackbar");
+  sb.className="show green";
+  sb.innerHTML = 'Les données ont été sauvegardées!';
+  setTimeout(function(){ sb.className = sb.className.replace("show green", ""); }, 3000);
+  return false;
+},
+getformcontent: function(frmid,dataflds){
+  var frm = document.getElementById("frm_" + frmid);
+  var flds = {};
+  // if (dataflds){
+  //   flds = dataflds;
+  // } 
+  for (var i = 0; i < frm.elements.length; i++) {
+    var field = frm.elements[i];
+    if ((field.getAttribute("name") != 'null') && (field.tagName == "INPUT" || field.tagName == "SELECT" || field.tagName == "TEXTAREA")){
+      if (field.classList.contains("tagedit")){
+        var fvalue=field.value.trim();
+        var ndata = null;
+        if (fvalue != ""){
+          ndata =  fvalue.split(",");  
+        }
+        flds[field.getAttribute("name")] = ndata;
+      }else if (field.tagName == "TEXTAREA" ){
+        if (field.classList.contains("richeditarea")){
+          flds[field.getAttribute("name")] = tinymce.get(field.id).getContent();
+        } else {
+          flds[field.getAttribute("name")] = field.innerHTML;
+        }
+      }else if (field.type == "checkbox" ){
+        if (field.checked){
+          flds[field.getAttribute("name")] = "1";
+        } else {
+          flds[field.getAttribute("name")] = "";
+        }
+      }
+      else if (field.tagName == "SELECT" && field.multiple == true){
+        flds[field.getAttribute("name")] = dataflds[field.getAttribute("id")].selected();
+      } 
+      else if (field.tagName == "SELECT"){
+         flds[field.getAttribute("name")] = dataflds[field.getAttribute("id")].selected();
+      }
+      else {
+        flds[field.getAttribute("name")] = field.value;
+      }
+    }
+  }
+  return flds;
+},
+cleanform: function(frmname){
+  var frm = document.getElementById("frm_" + frmname);
+  for (var f in frm){
+    if (frm[f] && frm[f].id){
+    if (frm[f].tagName == 'INPUT'){
+      if (frm[f].type == "checkbox"){
+        frm[f].checked = false;
+      } else if (frm[f].classList.contains("datefield")){
+          if (frm[f]._flatpickr){ frm[f]._flatpickr.clear(); }
+      } 
+      // else if (frm[f].classList.contains("choices__input")){
+      //   if (choice[frmname][frm[f].id]){
+      //     choice[frmname][frm[f].id].removeActiveItems();
+      //   }
+      // } 
+      else {
+        frm[f].value = "";
+      }
+    }
+    if (frm[f].tagName == 'SELECT'){
+      if (frm[f].multiple == true){
+        if (frm[f].classList.contains("choices__input")){
+          choice[frmname][frm[f].id].removeActiveItems();
+        }
+      } else {
+        frm[f].value = "";
+      }
+      
+    }
+    if (frm[f].tagName == 'TEXTAREA'){
+      if (frm[f].classList.contains("richeditarea")){
+        tinymce.get(frm[f].id).setContent("");
+      } else {
+        frm[f].innerHTML = "";
+      } 
+    }
+  }
+  }
+  return false;
+},
+cleanform2: function(frmname,choices){
+  var frm = document.getElementById("frm_" + frmname);
+  for (var f in frm){
+    if (frm[f] && frm[f].id){
+    if (frm[f].tagName == 'INPUT'){
+      if (frm[f].type == "checkbox"){
+        frm[f].checked = false;
+      } else if (frm[f].classList.contains("datefield")){
+          if (frm[f]._flatpickr){ frm[f]._flatpickr.clear(); }
+      } 
+      // else if (frm[f].classList.contains("choices__input")){
+      //   if (choices[frm[f].id]){
+      //     choices[frm[f].id].removeActiveItems();
+      //   }
+      // } 
+      else {
+        frm[f].value = "";
+      }
+    }
+    if (frm[f].tagName == 'SELECT'){
+      if (frm[f].multiple == true){
+        if (frm[f].classList.contains("choices__input")){
+          choices[frm[f].id].removeActiveItems();
+        }
+      } else {
+        frm[f].value = "";
+      }
+      
+    }
+    if (frm[f].tagName == 'TEXTAREA'){
+      if (frm[f].classList.contains("richeditarea")){
+        tinymce.get(frm[f].id).setContent("");
+      } else {
+        frm[f].innerHTML = "";
+      } 
+    }
+  }
+  }
+  return false;
+},
+fillformbydataclass2: function(dataclass,choices,data,onblur){
+  var frm = document.getElementsByClassName('data_'+ dataclass);
+  //console.log("frmdata",frm);
+  if (data){
+    for (var f in frm){
+      //console.log("field",frm[f].id);
+      if (frm[f].id){
+        frm[f].dataset.id=data['id'];
+      }
+      if (data[frm[f].id]){
+
+        if (frm[f].tagName == 'INPUT'){
+          if (frm[f].type == "checkbox"){
+            if (data[frm[f].id] == "1"){
+              frm[f].checked = true;
+            } else {
+              frm[f].checked = false;
+            }
+          } 
+          else if (frm[f].classList.contains("datefield")){ 
+            frm[f]._flatpickr.setDate(data[frm[f].id]);
+          } 
+          else if (frm[f].classList.contains("timefield")){
+            frm[f].value = timecalc.StringToTime(data[frm[f].id]);
+          }
+          else {
+            frm[f].value=data[frm[f].id];
+          }
+        }
+        if (frm[f].tagName == 'SELECT'){
+          if (frm[f].multiple == true){
+       
+            choices[frm[f].id].set(JSON.parse(data[frm[f].id]));
+          } else {
+            frm[f].value=data[frm[f].id];
+          }
+        }
+      } 
+    }
+  }
+},
+fillselectlist: function(obj,data,vidcol,vvalcol){
+  var sellist = [];
+  let csel = obj.value;
+  if (data){
+    for (var i in data){
+      sellist.push({value:data[i][vidcol],text:data[i][vvalcol]});
+    }
+  }
+  obj.setData(sellist);
+  if (obj.select.element.dataset.selected && obj.select.element.dataset.selected != ""){
+     obj.set(obj.select.element.dataset.selected);
+  }
+  return false;
+},
+savefield: function(obj,callback){
+  fdata = obj.dataset;
+  fdata["save"] = "field";
+  fdata["schemata"] = schemata;
+  if (obj.tagName == 'INPUT' || obj.tagName == 'SELECT' || obj.tagName == 'TEXTAREA'){
+    if (obj.type == 'checkbox' || obj.type == 'radio'){
+      if (obj.checked == true){
+        fdata["value"] = 1;
+      } else {
+        fdata["value"] = null;
+      }
+    }else {
+      fdata["value"] = obj.value;
+    }
+  }
+  postData("db.cgi",fdata).then(data => { if (callback){callback(data);}});
+  return false;
+},
+saveschemafield: function(obj,schema){
+  fdata = obj.dataset;
+  fdata["save"] = "field";
+  fdata["schemata"] = schema;
+  if (obj.tagName == 'INPUT' || obj.tagName == 'SELECT' || obj.tagName == 'TEXTAREA'){
+    if (obj.type == 'checkbox' || obj.type == 'radio'){
+      if (obj.checked == true){
+        fdata["value"] = 1;
+      } else {
+        fdata["value"] = null;
+      }
+    }else {
+      fdata["value"] = obj.value;
+    }
+  }
+  postData("db.cgi",fdata).then(data => { });
+  return false;
+},
+cleanfield: function(objid){
+  document.getElementById(objid).value='';
+}
+
+
+}
\ No newline at end of file
diff --git a/admin/js/dataform.min.js b/admin/js/dataform.min.js
new file mode 100644 (file)
index 0000000..5516ad3
--- /dev/null
@@ -0,0 +1 @@
+let dataform={saveform:function(frmid,aftercallback,clientschema){var flds=form.getformcontent(frmid,null);return flds.fn="saveform",flds.schemata=clientschema,flds.table=frmid,null==clientschema&&(flds.schemata=schemata),delete flds.null,postData("db.cgi",flds).then(data=>{aftercallback?(aftercallback(data.result),form.formsaved({})):form.formsaved(data.result)}),!1},saveformdata:function(flds,aftercallback,clientschema){return flds.fn="saveform",flds.schemata=clientschema,null==clientschema&&(flds.schemata=schemata),delete flds.null,postData("db.cgi",flds).then(data=>{aftercallback?(aftercallback(data.result),form.formsaved({})):form.formsaved(data.result)}),!1},formsaved:function(data){var sb=document.getElementById("snackbar");return sb.className="show green",sb.innerHTML="Les données ont été sauvegardées!",setTimeout((function(){sb.className=sb.className.replace("show green","")}),3e3),!1},getformcontent:function(frmid,dataflds){for(var frm=document.getElementById("frm_"+frmid),flds={},i=0;i<frm.elements.length;i++){var field=frm.elements[i];if("null"!=field.getAttribute("name")&&("INPUT"==field.tagName||"SELECT"==field.tagName||"TEXTAREA"==field.tagName))if(field.classList.contains("tagedit")){var fvalue=field.value.trim(),ndata=null;""!=fvalue&&(ndata=fvalue.split(",")),flds[field.getAttribute("name")]=ndata}else"TEXTAREA"==field.tagName?field.classList.contains("richeditarea")?flds[field.getAttribute("name")]=tinymce.get(field.id).getContent():flds[field.getAttribute("name")]=field.innerHTML:"checkbox"==field.type?field.checked?flds[field.getAttribute("name")]="1":flds[field.getAttribute("name")]="":"SELECT"==field.tagName&&1==field.multiple?flds[field.getAttribute("name")]=dataflds[field.getAttribute("id")].selected():flds[field.getAttribute("name")]=field.value}return flds},cleanform:function(frmname){var frm=document.getElementById("frm_"+frmname);for(var f in frm)frm[f]&&frm[f].id&&("INPUT"==frm[f].tagName&&("checkbox"==frm[f].type?frm[f].checked=!1:frm[f].classList.contains("datefield")?frm[f]._flatpickr&&frm[f]._flatpickr.clear():frm[f].value=""),"SELECT"==frm[f].tagName&&(1==frm[f].multiple?frm[f].classList.contains("choices__input")&&choice[frmname][frm[f].id].removeActiveItems():frm[f].value=""),"TEXTAREA"==frm[f].tagName&&(frm[f].classList.contains("richeditarea")?tinymce.get(frm[f].id).setContent(""):frm[f].innerHTML=""));return!1},cleanform2:function(frmname,choices){var frm=document.getElementById("frm_"+frmname);for(var f in frm)frm[f]&&frm[f].id&&("INPUT"==frm[f].tagName&&("checkbox"==frm[f].type?frm[f].checked=!1:frm[f].classList.contains("datefield")?frm[f]._flatpickr&&frm[f]._flatpickr.clear():frm[f].value=""),"SELECT"==frm[f].tagName&&(1==frm[f].multiple?frm[f].classList.contains("choices__input")&&choices[frm[f].id].removeActiveItems():frm[f].value=""),"TEXTAREA"==frm[f].tagName&&(frm[f].classList.contains("richeditarea")?tinymce.get(frm[f].id).setContent(""):frm[f].innerHTML=""));return!1},fillformbydataclass2:function(dataclass,choices,data,onblur){var frm=document.getElementsByClassName("data_"+dataclass);if(data)for(var f in frm)frm[f].id&&(frm[f].dataset.id=data.id),data[frm[f].id]&&("INPUT"==frm[f].tagName&&("checkbox"==frm[f].type?"1"==data[frm[f].id]?frm[f].checked=!0:frm[f].checked=!1:frm[f].classList.contains("datefield")?frm[f]._flatpickr.setDate(data[frm[f].id]):frm[f].classList.contains("timefield")?frm[f].value=timecalc.StringToTime(data[frm[f].id]):frm[f].value=data[frm[f].id]),"SELECT"==frm[f].tagName&&(1==frm[f].multiple?choices[frm[f].id].set(JSON.parse(data[frm[f].id])):frm[f].value=data[frm[f].id]))},fillselectlist:function(obj,data,vidcol,vvalcol){var sellist=[];let csel=obj.value;if(data)for(var i in data)sellist.push({value:data[i][vidcol],text:data[i][vvalcol]});return obj.setData(sellist),obj.select.element.dataset.selected&&""!=obj.select.element.dataset.selected&&obj.set(obj.select.element.dataset.selected),!1},savefield:function(obj,callback){return fdata=obj.dataset,fdata.save="field",fdata.schemata=schemata,"INPUT"!=obj.tagName&&"SELECT"!=obj.tagName&&"TEXTAREA"!=obj.tagName||("checkbox"==obj.type||"radio"==obj.type?1==obj.checked?fdata.value=1:fdata.value=null:fdata.value=obj.value),postData("db.cgi",fdata).then(data=>{callback&&callback(data)}),!1},saveschemafield:function(obj,schema){return fdata=obj.dataset,fdata.save="field",fdata.schemata=schema,"INPUT"!=obj.tagName&&"SELECT"!=obj.tagName&&"TEXTAREA"!=obj.tagName||("checkbox"==obj.type||"radio"==obj.type?1==obj.checked?fdata.value=1:fdata.value=null:fdata.value=obj.value),postData("db.cgi",fdata).then(data=>{}),!1},cleanfield:function(objid){document.getElementById(objid).value=""}};
\ No newline at end of file
diff --git a/admin/js/report.js b/admin/js/report.js
new file mode 100644 (file)
index 0000000..97733df
--- /dev/null
@@ -0,0 +1,13 @@
+var report ={
+  generate: function(repname,filename,data){
+    showdataloaddlg("Création PDF encours","Attendez s.v.p.");//closedataloaddlg();
+    postData("report.cgi",{"generate":repname,"file": filename + ".pdf","data":data}).then(data => {closedataloaddlg();;report.openreport(data.result)}).catch(e => {closedataloaddlg();});
+    return false;
+  },
+  openreport(data){
+    
+    if (data && data.file){
+      window.open(api + "report.cgi?open=" + encodeURIComponent(data.file));
+    }
+  }
+}
\ No newline at end of file
diff --git a/admin/js/report.min.js b/admin/js/report.min.js
new file mode 100644 (file)
index 0000000..56cd31e
--- /dev/null
@@ -0,0 +1 @@
+var report={generate:function(repname,filename,data){return showdataloaddlg("Création PDF encours","Attendez s.v.p."),postData("report.cgi",{generate:repname,file:filename+".pdf",data:data}).then(data=>{closedataloaddlg(),report.openreport(data.result)}).catch(e=>{closedataloaddlg()}),!1},openreport(data){data&&data.file&&window.open(api+"report.cgi?open="+encodeURIComponent(data.file))}};
\ No newline at end of file
diff --git a/admin/js/request.js b/admin/js/request.js
new file mode 100644 (file)
index 0000000..2eba8bb
--- /dev/null
@@ -0,0 +1,56 @@
+var api = location.origin + location.pathname.substring(0,location.pathname.lastIndexOf('/')) + '/';
+
+var Base64={_keyStr:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",encode:function(e){var t="";var n,r,i,s,o,u,a;var f=0;e=Base64._utf8_encode(e);while(f<e.length){n=e.charCodeAt(f++);r=e.charCodeAt(f++);i=e.charCodeAt(f++);s=n>>2;o=(n&3)<<4|r>>4;u=(r&15)<<2|i>>6;a=i&63;if(isNaN(r)){u=a=64}else if(isNaN(i)){a=64}t=t+this._keyStr.charAt(s)+this._keyStr.charAt(o)+this._keyStr.charAt(u)+this._keyStr.charAt(a)}return t},decode:function(e){var t="";var n,r,i;var s,o,u,a;var f=0;e=e.replace(/[^A-Za-z0-9\+\/\=]/g,"");while(f<e.length){s=this._keyStr.indexOf(e.charAt(f++));o=this._keyStr.indexOf(e.charAt(f++));u=this._keyStr.indexOf(e.charAt(f++));a=this._keyStr.indexOf(e.charAt(f++));n=s<<2|o>>4;r=(o&15)<<4|u>>2;i=(u&3)<<6|a;t=t+String.fromCharCode(n);if(u!=64){t=t+String.fromCharCode(r)}if(a!=64){t=t+String.fromCharCode(i)}}t=Base64._utf8_decode(t);return t},_utf8_encode:function(e){e=e.replace(/\r\n/g,"\n");var t="";for(var n=0;n<e.length;n++){var r=e.charCodeAt(n);if(r<128){t+=String.fromCharCode(r)}else if(r>127&&r<2048){t+=String.fromCharCode(r>>6|192);t+=String.fromCharCode(r&63|128)}else{t+=String.fromCharCode(r>>12|224);t+=String.fromCharCode(r>>6&63|128);t+=String.fromCharCode(r&63|128)}}return t},_utf8_decode:function(e){var t="";var n=0;var r=c1=c2=0;while(n<e.length){r=e.charCodeAt(n);if(r<128){t+=String.fromCharCode(r);n++}else if(r>191&&r<224){c2=e.charCodeAt(n+1);t+=String.fromCharCode((r&31)<<6|c2&63);n+=2}else{c2=e.charCodeAt(n+1);c3=e.charCodeAt(n+2);t+=String.fromCharCode((r&15)<<12|(c2&63)<<6|c3&63);n+=3}}return t}}
+
+async function postData(url = '', data = {}) {
+  const response = await fetch(api + url, {
+    method: 'POST', 
+    mode: 'same-origin', 
+    cache: 'no-cache', 
+    credentials: 'same-origin', 
+    headers: {
+      'Content-Type': 'application/json'
+      
+    },
+    redirect: 'follow', 
+    referrerPolicy: 'strict-origin', 
+    body: JSON.stringify(data) 
+  });
+  
+  return response.json();
+}
+
+var report ={
+  generate: function(repname,filename,data){
+    showdataloaddlg("Création PDF encours","Attendez s.v.p.");
+    postData("report.cgi",{"generate":repname,"file": filename + ".pdf","data":data}).then (data => {closedataloaddlg();report.openreport(data);});
+    return false;
+  },
+  openreport(data){
+    if (data && data.file){
+      window.open(api + "report.cgi?open=" + encodeURIComponent(data.file));
+    }
+  }
+}
+
+async function syncData(url,username,password, data = {}) {
+  //var decodedString = Base64.decode(encodedString);
+  let hh = {};
+  hh['Content-Type'] = 'application/json'; 
+  if ((username != null) && (username != '')){
+    hh['Authorization'] = Base64.encode(username + ":" + password);
+  }
+  const response = await fetch(url, {
+    method: 'POST', 
+    mode: 'cors', 
+    cache: 'no-cache', 
+    credentials: 'omit', 
+    headers: hh,  
+    redirect: 'follow', 
+    referrerPolicy: 'strict-origin', 
+    body: JSON.stringify(data) 
+  });
+  
+  return response.json();
+}
+
diff --git a/admin/js/request.min.js b/admin/js/request.min.js
new file mode 100644 (file)
index 0000000..82b32c6
--- /dev/null
@@ -0,0 +1,12 @@
+async function postData(r="",e={}){const t=await fetch(api+r,{method:"POST",mode:"same-origin",cache:"no-cache",credentials:"same-origin",headers:{"Content-Type":"application/json"},redirect:"follow",referrerPolicy:"strict-origin",body:JSON.stringify(e)})
+return t.json()}async function syncData(r,e,t,o={}){let n={"Content-Type":"application/json"}
+null!=e&&""!=e&&(n["Authorization"]=Base64.encode(e+":"+t))
+const a=await fetch(r,{method:"POST",mode:"cors",cache:"no-cache",credentials:"omit",headers:n,redirect:"follow",referrerPolicy:"strict-origin",body:JSON.stringify(o)})
+return a.json()}var api=location.origin+location.pathname.substring(0,location.pathname.lastIndexOf("/"))+"/",Base64={_keyStr:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",encode:function(r){var e,t,o,n,a,i,c,d="",h=0
+for(r=Base64._utf8_encode(r);h<r.length;)e=r.charCodeAt(h++),t=r.charCodeAt(h++),o=r.charCodeAt(h++),n=e>>2,a=(3&e)<<4|t>>4,i=(15&t)<<2|o>>6,c=63&o,isNaN(t)?i=c=64:isNaN(o)&&(c=64),d=d+this._keyStr.charAt(n)+this._keyStr.charAt(a)+this._keyStr.charAt(i)+this._keyStr.charAt(c)
+return d},decode:function(r){var e,t,o,n,a,i,c,d="",h=0
+for(r=r.replace(/[^A-Za-z0-9\+\/\=]/g,"");h<r.length;)n=this._keyStr.indexOf(r.charAt(h++)),a=this._keyStr.indexOf(r.charAt(h++)),i=this._keyStr.indexOf(r.charAt(h++)),c=this._keyStr.indexOf(r.charAt(h++)),e=n<<2|a>>4,t=(15&a)<<4|i>>2,o=(3&i)<<6|c,d+=String.fromCharCode(e),64!=i&&(d+=String.fromCharCode(t)),64!=c&&(d+=String.fromCharCode(o))
+return d=Base64._utf8_decode(d),d},_utf8_encode:function(r){r=r.replace(/\r\n/g,"\n")
+for(var e="",t=0;t<r.length;t++){var o=r.charCodeAt(t)
+o<128?e+=String.fromCharCode(o):o>127&&o<2048?(e+=String.fromCharCode(o>>6|192),e+=String.fromCharCode(63&o|128)):(e+=String.fromCharCode(o>>12|224),e+=String.fromCharCode(o>>6&63|128),e+=String.fromCharCode(63&o|128))}return e},_utf8_decode:function(r){for(var e="",t=0,o=c1=c2=0;t<r.length;)o=r.charCodeAt(t),o<128?(e+=String.fromCharCode(o),t++):o>191&&o<224?(c2=r.charCodeAt(t+1),e+=String.fromCharCode((31&o)<<6|63&c2),t+=2):(c2=r.charCodeAt(t+1),c3=r.charCodeAt(t+2),e+=String.fromCharCode((15&o)<<12|(63&c2)<<6|63&c3),t+=3)
+return e}},report={generate:function(r,e,t){return showdataloaddlg("Création PDF encours","Attendez s.v.p."),postData("report.cgi",{generate:r,file:e+".pdf",data:t}).then(r=>{closedataloaddlg(),report.openreport(r)}),!1},openreport(r){r&&r.file&&window.open(api+"report.cgi?open="+encodeURIComponent(r.file))}}
diff --git a/admin/js/timecalc.js b/admin/js/timecalc.js
new file mode 100644 (file)
index 0000000..72425a2
--- /dev/null
@@ -0,0 +1,128 @@
+let timecalc = {
+  MinutesToTime:function (minutes) {
+    minutes = parseInt(minutes);
+    if ((minutes == null) || (minutes == 0)){ return "00:00";};
+    let hours = parseInt(minutes/60);
+    
+    let restminutes = minutes-(hours*60);
+    // console.log(hours + " : " + restminutes);
+    return timecalc.lpad(hours,2,'0') + ":"+ timecalc.lpad(restminutes,2,'0');
+  },
+  TimeToMinutes:function (strtime){
+    let hours = parseInt(strtime.substring(0,2)) * 60;
+    let minutes = parseInt(strtime.substring(3,5));
+    return hours+minutes;
+  },
+  lpad: function(str, length,padString) {
+    let xstr = str.toString();
+    while (xstr.length < length){xstr = padString + xstr};
+    return xstr;
+  },
+  mondayBefore: function(sdate){
+     if (sdate == null){
+       sdate=new Date();
+     }
+    let day = sdate.getDay();
+    let prevMonday = new Date();
+     if(sdate.getDay() == 0){
+         prevMonday = new Date().setDate(sdate.getDate() - 0);
+    }
+    else{
+         prevMonday = new Date().setDate(sdate.getDate() - day);
+   }
+    return new Date(prevMonday);
+  },
+  sundayAfter: function(sdate){
+    let nextSunday = new Date();
+  },
+  StringToTime: function(strin){
+    strin = strin.toString().substring(0,5);
+    strin = strin.replace(/\D/g,'');
+    //console.log("StT:",strin);
+    if (strin.length == 0){ return "";}
+    if (strin.length <= 2){
+      if (strin > "23") {return ""} else {
+        //console.log("xtime",timecalc.lpad(strin,2,'0')+":00");
+        return timecalc.lpad(strin,2,'0')+":00";
+      }
+    } else if (strin.length == 3){
+      let hours = strin.substring(0,1);
+      let minutes = strin.substring(1,3);
+      if (minutes > "59"){ return "";} 
+      return timecalc.lpad(hours,2,'0')+ ":"+ timecalc.lpad(minutes,2,'0');
+    } else if (strin.length == 4){
+      let hours = strin.substring(0,2);
+      let minutes = strin.substring(2,4);
+      if ((hours > "23") || (minutes > "59")){return "";}
+      return timecalc.lpad(hours,2,'0')+ ":"+ timecalc.lpad(minutes,2,'0');
+    }
+    return "";
+  },
+  StringToInterval: function(strin){
+    let minus = "";
+    if (strin.startsWith('-')){
+      minus = '-';
+    }
+    if (strin.indexOf(":") > 0){
+      let spl = strin.split(":");
+      hours = spl[0].replace(/\D/g,'');
+      if (hours == ""){
+        hours =  "0";
+      }
+      minutes = spl[1].replace(/\D/g,'');
+      if (minutes > "59"){
+        minutes = "0";
+      }
+      return minus + hours + ":" + timecalc.lpad(minutes,2,'0');
+    } 
+    if (strin == ""){ return "";}
+    strin = strin.replace(/\D/g,'');
+    return minus + strin + ":00";
+    
+  },
+  MinutesToInterval: function(minutes){
+    if ((minutes == null) || (minutes == "")){ return "0:00";}
+    let prep ="";
+    if (minutes < 0){
+      prep = "-";
+      minutes = minutes * -1;
+    }
+    let hours = parseInt(minutes/60);
+    let restminutes = minutes-(hours*60);
+    restminutes = Math.round(restminutes);
+    return prep+hours+ ":"+ timecalc.lpad(restminutes,2,'0');
+  },
+  IntervalToMinutes: function(strin){
+    if (strin == "" || strin == null){
+      return 0;
+    }
+    let mult = 1;
+    if (strin.startsWith("-")){
+      mult = -1;
+      strin =  strin.replace(/-/g,'');
+    }
+    let spl = strin.split(":");
+    let hours = parseInt(spl[0]) * 60;
+    let minutes = parseInt(spl[1]);
+    return (hours+minutes) * mult;
+  },
+  validateTime(obj){
+    obj.value = timecalc.StringToTime(obj.value);
+    return false;
+  },
+  validateInterval(obj){
+    obj.value = timecalc.StringToInterval(obj.value);
+    return false;
+  },
+  copyInterval(obj,idobjout,factor){
+    if (factor){
+      let mval = timecalc.IntervalToMinutes(obj.value) * factor;
+      document.getElementById(idobjout).value = timecalc.MinutesToInterval(mval);
+    }else {
+      document.getElementById(idobjout).value=obj.value;
+    }
+    if (document.getElementById(idobjout).value == '0:00'){
+      document.getElementById(idobjout).value = '';
+    }
+  }
+}
diff --git a/admin/js/timecalc.min.js b/admin/js/timecalc.min.js
new file mode 100644 (file)
index 0000000..28aa58e
--- /dev/null
@@ -0,0 +1,24 @@
+let timecalc={MinutesToTime:function(e){if(e=parseInt(e),null==e||0==e)return"00:00"
+let t=parseInt(e/60),n=e-60*t
+return timecalc.lpad(t,2,"0")+":"+timecalc.lpad(n,2,"0")},TimeToMinutes:function(e){let t=60*parseInt(e.substring(0,2)),n=parseInt(e.substring(3,5))
+return t+n},lpad:function(e,t,n){let l=e.toString()
+for(;l.length<t;)l=n+l
+return l},mondayBefore:function(e){null==e&&(e=new Date)
+let t=e.getDay(),n=new Date
+return n=0==e.getDay()?(new Date).setDate(e.getDate()-0):(new Date).setDate(e.getDate()-t),new Date(n)},sundayAfter:function(e){new Date},StringToTime:function(e){if(e=e.toString().substring(0,5),e=e.replace(/\D/g,""),0==e.length)return""
+if(e.length<=2)return e>"23"?"":timecalc.lpad(e,2,"0")+":00"
+if(3==e.length){let t=e.substring(0,1),n=e.substring(1,3)
+return n>"59"?"":timecalc.lpad(t,2,"0")+":"+timecalc.lpad(n,2,"0")}if(4==e.length){let t=e.substring(0,2),n=e.substring(2,4)
+return t>"23"||n>"59"?"":timecalc.lpad(t,2,"0")+":"+timecalc.lpad(n,2,"0")}return""},StringToInterval:function(e){let t=""
+if(e.startsWith("-")&&(t="-"),e.indexOf(":")>0){let n=e.split(":")
+return hours=n[0].replace(/\D/g,""),""==hours&&(hours="0"),minutes=n[1].replace(/\D/g,""),minutes>"59"&&(minutes="0"),t+hours+":"+timecalc.lpad(minutes,2,"0")}return""==e?"":(e=e.replace(/\D/g,""),t+e+":00")},MinutesToInterval:function(e){if(null==e||""==e)return"0:00"
+let t=""
+e<0&&(t="-",e*=-1)
+let n=parseInt(e/60),l=e-60*n
+return l=Math.round(l),t+n+":"+timecalc.lpad(l,2,"0")},IntervalToMinutes:function(e){if(""==e||null==e)return 0
+let t=1
+e.startsWith("-")&&(t=-1,e=e.replace(/-/g,""))
+let n=e.split(":"),l=60*parseInt(n[0]),a=parseInt(n[1])
+return(l+a)*t},validateTime:e=>(e.value=timecalc.StringToTime(e.value),!1),validateInterval:e=>(e.value=timecalc.StringToInterval(e.value),!1),copyInterval(e,t,n){if(n){let l=timecalc.IntervalToMinutes(e.value)*n
+document.getElementById(t).value=timecalc.MinutesToInterval(l)}else document.getElementById(t).value=e.value
+"0:00"==document.getElementById(t).value&&(document.getElementById(t).value="")}}
diff --git a/admin/js/vendors/flatpickr/flatpickr.css b/admin/js/vendors/flatpickr/flatpickr.css
new file mode 100644 (file)
index 0000000..4c58f46
--- /dev/null
@@ -0,0 +1,791 @@
+.flatpickr-calendar {
+  background: transparent;
+  opacity: 0;
+  display: none;
+  text-align: center;
+  visibility: hidden;
+  padding: 0;
+  -webkit-animation: none;
+          animation: none;
+  direction: ltr;
+  border: 0;
+  font-size: 14px;
+  line-height: 24px;
+  border-radius: 5px;
+  position: absolute;
+  width: 307.875px;
+  -webkit-box-sizing: border-box;
+          box-sizing: border-box;
+  -ms-touch-action: manipulation;
+      touch-action: manipulation;
+  background: #fff;
+  -webkit-box-shadow: 1px 0 0 #e6e6e6, -1px 0 0 #e6e6e6, 0 1px 0 #e6e6e6, 0 -1px 0 #e6e6e6, 0 3px 13px rgba(0,0,0,0.08);
+          box-shadow: 1px 0 0 #e6e6e6, -1px 0 0 #e6e6e6, 0 1px 0 #e6e6e6, 0 -1px 0 #e6e6e6, 0 3px 13px rgba(0,0,0,0.08);
+}
+.flatpickr-calendar.open,
+.flatpickr-calendar.inline {
+  opacity: 1;
+  max-height: 640px;
+  visibility: visible;
+}
+.flatpickr-calendar.open {
+  display: inline-block;
+  z-index: 99999;
+}
+.flatpickr-calendar.animate.open {
+  -webkit-animation: fpFadeInDown 300ms cubic-bezier(0.23, 1, 0.32, 1);
+          animation: fpFadeInDown 300ms cubic-bezier(0.23, 1, 0.32, 1);
+}
+.flatpickr-calendar.inline {
+  display: block;
+  position: relative;
+  top: 2px;
+}
+.flatpickr-calendar.static {
+  position: absolute;
+  top: calc(100% + 2px);
+}
+.flatpickr-calendar.static.open {
+  z-index: 999;
+  display: block;
+}
+.flatpickr-calendar.multiMonth .flatpickr-days .dayContainer:nth-child(n+1) .flatpickr-day.inRange:nth-child(7n+7) {
+  -webkit-box-shadow: none !important;
+          box-shadow: none !important;
+}
+.flatpickr-calendar.multiMonth .flatpickr-days .dayContainer:nth-child(n+2) .flatpickr-day.inRange:nth-child(7n+1) {
+  -webkit-box-shadow: -2px 0 0 #e6e6e6, 5px 0 0 #e6e6e6;
+          box-shadow: -2px 0 0 #e6e6e6, 5px 0 0 #e6e6e6;
+}
+.flatpickr-calendar .hasWeeks .dayContainer,
+.flatpickr-calendar .hasTime .dayContainer {
+  border-bottom: 0;
+  border-bottom-right-radius: 0;
+  border-bottom-left-radius: 0;
+}
+.flatpickr-calendar .hasWeeks .dayContainer {
+  border-left: 0;
+}
+.flatpickr-calendar.hasTime .flatpickr-time {
+  height: 40px;
+  border-top: 1px solid #e6e6e6;
+}
+.flatpickr-calendar.noCalendar.hasTime .flatpickr-time {
+  height: auto;
+}
+.flatpickr-calendar:before,
+.flatpickr-calendar:after {
+  position: absolute;
+  display: block;
+  pointer-events: none;
+  border: solid transparent;
+  content: '';
+  height: 0;
+  width: 0;
+  left: 22px;
+}
+.flatpickr-calendar.rightMost:before,
+.flatpickr-calendar.arrowRight:before,
+.flatpickr-calendar.rightMost:after,
+.flatpickr-calendar.arrowRight:after {
+  left: auto;
+  right: 22px;
+}
+.flatpickr-calendar.arrowCenter:before,
+.flatpickr-calendar.arrowCenter:after {
+  left: 50%;
+  right: 50%;
+}
+.flatpickr-calendar:before {
+  border-width: 5px;
+  margin: 0 -5px;
+}
+.flatpickr-calendar:after {
+  border-width: 4px;
+  margin: 0 -4px;
+}
+.flatpickr-calendar.arrowTop:before,
+.flatpickr-calendar.arrowTop:after {
+  bottom: 100%;
+}
+.flatpickr-calendar.arrowTop:before {
+  border-bottom-color: #e6e6e6;
+}
+.flatpickr-calendar.arrowTop:after {
+  border-bottom-color: #fff;
+}
+.flatpickr-calendar.arrowBottom:before,
+.flatpickr-calendar.arrowBottom:after {
+  top: 100%;
+}
+.flatpickr-calendar.arrowBottom:before {
+  border-top-color: #e6e6e6;
+}
+.flatpickr-calendar.arrowBottom:after {
+  border-top-color: #fff;
+}
+.flatpickr-calendar:focus {
+  outline: 0;
+}
+.flatpickr-wrapper {
+  position: relative;
+  display: inline-block;
+}
+.flatpickr-months {
+  display: -webkit-box;
+  display: -webkit-flex;
+  display: -ms-flexbox;
+  display: flex;
+}
+.flatpickr-months .flatpickr-month {
+  background: transparent;
+  color: rgba(0,0,0,0.9);
+  fill: rgba(0,0,0,0.9);
+  height: 34px;
+  line-height: 1;
+  text-align: center;
+  position: relative;
+  -webkit-user-select: none;
+     -moz-user-select: none;
+      -ms-user-select: none;
+          user-select: none;
+  overflow: hidden;
+  -webkit-box-flex: 1;
+  -webkit-flex: 1;
+      -ms-flex: 1;
+          flex: 1;
+}
+.flatpickr-months .flatpickr-prev-month,
+.flatpickr-months .flatpickr-next-month {
+  text-decoration: none;
+  cursor: pointer;
+  position: absolute;
+  top: 0;
+  height: 34px;
+  padding: 10px;
+  z-index: 3;
+  color: rgba(0,0,0,0.9);
+  fill: rgba(0,0,0,0.9);
+}
+.flatpickr-months .flatpickr-prev-month.flatpickr-disabled,
+.flatpickr-months .flatpickr-next-month.flatpickr-disabled {
+  display: none;
+}
+.flatpickr-months .flatpickr-prev-month i,
+.flatpickr-months .flatpickr-next-month i {
+  position: relative;
+}
+.flatpickr-months .flatpickr-prev-month.flatpickr-prev-month,
+.flatpickr-months .flatpickr-next-month.flatpickr-prev-month {
+/*
+      /*rtl:begin:ignore*/
+/*
+      */
+  left: 0;
+/*
+      /*rtl:end:ignore*/
+/*
+      */
+}
+/*
+      /*rtl:begin:ignore*/
+/*
+      /*rtl:end:ignore*/
+.flatpickr-months .flatpickr-prev-month.flatpickr-next-month,
+.flatpickr-months .flatpickr-next-month.flatpickr-next-month {
+/*
+      /*rtl:begin:ignore*/
+/*
+      */
+  right: 0;
+/*
+      /*rtl:end:ignore*/
+/*
+      */
+}
+/*
+      /*rtl:begin:ignore*/
+/*
+      /*rtl:end:ignore*/
+.flatpickr-months .flatpickr-prev-month:hover,
+.flatpickr-months .flatpickr-next-month:hover {
+  color: #959ea9;
+}
+.flatpickr-months .flatpickr-prev-month:hover svg,
+.flatpickr-months .flatpickr-next-month:hover svg {
+  fill: #f64747;
+}
+.flatpickr-months .flatpickr-prev-month svg,
+.flatpickr-months .flatpickr-next-month svg {
+  width: 14px;
+  height: 14px;
+}
+.flatpickr-months .flatpickr-prev-month svg path,
+.flatpickr-months .flatpickr-next-month svg path {
+  -webkit-transition: fill 0.1s;
+  transition: fill 0.1s;
+  fill: inherit;
+}
+.numInputWrapper {
+  position: relative;
+  height: auto;
+}
+.numInputWrapper input,
+.numInputWrapper span {
+  display: inline-block;
+}
+.numInputWrapper input {
+  width: 100%;
+}
+.numInputWrapper input::-ms-clear {
+  display: none;
+}
+.numInputWrapper input::-webkit-outer-spin-button,
+.numInputWrapper input::-webkit-inner-spin-button {
+  margin: 0;
+  -webkit-appearance: none;
+}
+.numInputWrapper span {
+  position: absolute;
+  right: 0;
+  width: 14px;
+  padding: 0 4px 0 2px;
+  height: 50%;
+  line-height: 50%;
+  opacity: 0;
+  cursor: pointer;
+  border: 1px solid rgba(57,57,57,0.15);
+  -webkit-box-sizing: border-box;
+          box-sizing: border-box;
+}
+.numInputWrapper span:hover {
+  background: rgba(0,0,0,0.1);
+}
+.numInputWrapper span:active {
+  background: rgba(0,0,0,0.2);
+}
+.numInputWrapper span:after {
+  display: block;
+  content: "";
+  position: absolute;
+}
+.numInputWrapper span.arrowUp {
+  top: 0;
+  border-bottom: 0;
+}
+.numInputWrapper span.arrowUp:after {
+  border-left: 4px solid transparent;
+  border-right: 4px solid transparent;
+  border-bottom: 4px solid rgba(57,57,57,0.6);
+  top: 26%;
+}
+.numInputWrapper span.arrowDown {
+  top: 50%;
+}
+.numInputWrapper span.arrowDown:after {
+  border-left: 4px solid transparent;
+  border-right: 4px solid transparent;
+  border-top: 4px solid rgba(57,57,57,0.6);
+  top: 40%;
+}
+.numInputWrapper span svg {
+  width: inherit;
+  height: auto;
+}
+.numInputWrapper span svg path {
+  fill: rgba(0,0,0,0.5);
+}
+.numInputWrapper:hover {
+  background: rgba(0,0,0,0.05);
+}
+.numInputWrapper:hover span {
+  opacity: 1;
+}
+.flatpickr-current-month {
+  font-size: 135%;
+  line-height: inherit;
+  font-weight: 300;
+  color: inherit;
+  position: absolute;
+  width: 75%;
+  left: 12.5%;
+  padding: 7.48px 0 0 0;
+  line-height: 1;
+  height: 34px;
+  display: inline-block;
+  text-align: center;
+  -webkit-transform: translate3d(0px, 0px, 0px);
+          transform: translate3d(0px, 0px, 0px);
+}
+.flatpickr-current-month span.cur-month {
+  font-family: inherit;
+  font-weight: 700;
+  color: inherit;
+  display: inline-block;
+  margin-left: 0.5ch;
+  padding: 0;
+}
+.flatpickr-current-month span.cur-month:hover {
+  background: rgba(0,0,0,0.05);
+}
+.flatpickr-current-month .numInputWrapper {
+  width: 6ch;
+  width: 7ch\0;
+  display: inline-block;
+}
+.flatpickr-current-month .numInputWrapper span.arrowUp:after {
+  border-bottom-color: rgba(0,0,0,0.9);
+}
+.flatpickr-current-month .numInputWrapper span.arrowDown:after {
+  border-top-color: rgba(0,0,0,0.9);
+}
+.flatpickr-current-month input.cur-year {
+  background: transparent;
+  -webkit-box-sizing: border-box;
+          box-sizing: border-box;
+  color: inherit;
+  cursor: text;
+  padding: 0 0 0 0.5ch;
+  margin: 0;
+  display: inline-block;
+  font-size: inherit;
+  font-family: inherit;
+  font-weight: 300;
+  line-height: inherit;
+  height: auto;
+  border: 0;
+  border-radius: 0;
+  vertical-align: initial;
+  -webkit-appearance: textfield;
+  -moz-appearance: textfield;
+  appearance: textfield;
+}
+.flatpickr-current-month input.cur-year:focus {
+  outline: 0;
+}
+.flatpickr-current-month input.cur-year[disabled],
+.flatpickr-current-month input.cur-year[disabled]:hover {
+  font-size: 100%;
+  color: rgba(0,0,0,0.5);
+  background: transparent;
+  pointer-events: none;
+}
+.flatpickr-current-month .flatpickr-monthDropdown-months {
+  appearance: menulist;
+  background: transparent;
+  border: none;
+  border-radius: 0;
+  box-sizing: border-box;
+  color: inherit;
+  cursor: pointer;
+  font-size: inherit;
+  font-family: inherit;
+  font-weight: 300;
+  height: auto;
+  line-height: inherit;
+  margin: -1px 0 0 0;
+  outline: none;
+  padding: 0 0 0 0.5ch;
+  position: relative;
+  vertical-align: initial;
+  -webkit-box-sizing: border-box;
+  -webkit-appearance: menulist;
+  -moz-appearance: menulist;
+  width: auto;
+}
+.flatpickr-current-month .flatpickr-monthDropdown-months:focus,
+.flatpickr-current-month .flatpickr-monthDropdown-months:active {
+  outline: none;
+}
+.flatpickr-current-month .flatpickr-monthDropdown-months:hover {
+  background: rgba(0,0,0,0.05);
+}
+.flatpickr-current-month .flatpickr-monthDropdown-months .flatpickr-monthDropdown-month {
+  background-color: transparent;
+  outline: none;
+  padding: 0;
+}
+.flatpickr-weekdays {
+  background: transparent;
+  text-align: center;
+  overflow: hidden;
+  width: 100%;
+  display: -webkit-box;
+  display: -webkit-flex;
+  display: -ms-flexbox;
+  display: flex;
+  -webkit-box-align: center;
+  -webkit-align-items: center;
+      -ms-flex-align: center;
+          align-items: center;
+  height: 28px;
+}
+.flatpickr-weekdays .flatpickr-weekdaycontainer {
+  display: -webkit-box;
+  display: -webkit-flex;
+  display: -ms-flexbox;
+  display: flex;
+  -webkit-box-flex: 1;
+  -webkit-flex: 1;
+      -ms-flex: 1;
+          flex: 1;
+}
+span.flatpickr-weekday {
+  cursor: default;
+  font-size: 90%;
+  background: transparent;
+  color: rgba(0,0,0,0.54);
+  line-height: 1;
+  margin: 0;
+  text-align: center;
+  display: block;
+  -webkit-box-flex: 1;
+  -webkit-flex: 1;
+      -ms-flex: 1;
+          flex: 1;
+  font-weight: bolder;
+}
+.dayContainer,
+.flatpickr-weeks {
+  padding: 1px 0 0 0;
+}
+.flatpickr-days {
+  position: relative;
+  overflow: hidden;
+  display: -webkit-box;
+  display: -webkit-flex;
+  display: -ms-flexbox;
+  display: flex;
+  -webkit-box-align: start;
+  -webkit-align-items: flex-start;
+      -ms-flex-align: start;
+          align-items: flex-start;
+  width: 307.875px;
+}
+.flatpickr-days:focus {
+  outline: 0;
+}
+.dayContainer {
+  padding: 0;
+  outline: 0;
+  text-align: left;
+  width: 307.875px;
+  min-width: 307.875px;
+  max-width: 307.875px;
+  -webkit-box-sizing: border-box;
+          box-sizing: border-box;
+  display: inline-block;
+  display: -ms-flexbox;
+  display: -webkit-box;
+  display: -webkit-flex;
+  display: flex;
+  -webkit-flex-wrap: wrap;
+          flex-wrap: wrap;
+  -ms-flex-wrap: wrap;
+  -ms-flex-pack: justify;
+  -webkit-justify-content: space-around;
+          justify-content: space-around;
+  -webkit-transform: translate3d(0px, 0px, 0px);
+          transform: translate3d(0px, 0px, 0px);
+  opacity: 1;
+}
+.dayContainer + .dayContainer {
+  -webkit-box-shadow: -1px 0 0 #e6e6e6;
+          box-shadow: -1px 0 0 #e6e6e6;
+}
+.flatpickr-day {
+  background: none;
+  border: 1px solid transparent;
+  border-radius: 150px;
+  -webkit-box-sizing: border-box;
+          box-sizing: border-box;
+  color: #393939;
+  cursor: pointer;
+  font-weight: 400;
+  width: 14.2857143%;
+  -webkit-flex-basis: 14.2857143%;
+      -ms-flex-preferred-size: 14.2857143%;
+          flex-basis: 14.2857143%;
+  max-width: 39px;
+  height: 39px;
+  line-height: 39px;
+  margin: 0;
+  display: inline-block;
+  position: relative;
+  -webkit-box-pack: center;
+  -webkit-justify-content: center;
+      -ms-flex-pack: center;
+          justify-content: center;
+  text-align: center;
+}
+.flatpickr-day.inRange,
+.flatpickr-day.prevMonthDay.inRange,
+.flatpickr-day.nextMonthDay.inRange,
+.flatpickr-day.today.inRange,
+.flatpickr-day.prevMonthDay.today.inRange,
+.flatpickr-day.nextMonthDay.today.inRange,
+.flatpickr-day:hover,
+.flatpickr-day.prevMonthDay:hover,
+.flatpickr-day.nextMonthDay:hover,
+.flatpickr-day:focus,
+.flatpickr-day.prevMonthDay:focus,
+.flatpickr-day.nextMonthDay:focus {
+  cursor: pointer;
+  outline: 0;
+  background: #e6e6e6;
+  border-color: #e6e6e6;
+}
+.flatpickr-day.today {
+  border-color: #959ea9;
+}
+.flatpickr-day.today:hover,
+.flatpickr-day.today:focus {
+  border-color: #959ea9;
+  background: #959ea9;
+  color: #fff;
+}
+.flatpickr-day.selected,
+.flatpickr-day.startRange,
+.flatpickr-day.endRange,
+.flatpickr-day.selected.inRange,
+.flatpickr-day.startRange.inRange,
+.flatpickr-day.endRange.inRange,
+.flatpickr-day.selected:focus,
+.flatpickr-day.startRange:focus,
+.flatpickr-day.endRange:focus,
+.flatpickr-day.selected:hover,
+.flatpickr-day.startRange:hover,
+.flatpickr-day.endRange:hover,
+.flatpickr-day.selected.prevMonthDay,
+.flatpickr-day.startRange.prevMonthDay,
+.flatpickr-day.endRange.prevMonthDay,
+.flatpickr-day.selected.nextMonthDay,
+.flatpickr-day.startRange.nextMonthDay,
+.flatpickr-day.endRange.nextMonthDay {
+  background: #569ff7;
+  -webkit-box-shadow: none;
+          box-shadow: none;
+  color: #fff;
+  border-color: #569ff7;
+}
+.flatpickr-day.selected.startRange,
+.flatpickr-day.startRange.startRange,
+.flatpickr-day.endRange.startRange {
+  border-radius: 50px 0 0 50px;
+}
+.flatpickr-day.selected.endRange,
+.flatpickr-day.startRange.endRange,
+.flatpickr-day.endRange.endRange {
+  border-radius: 0 50px 50px 0;
+}
+.flatpickr-day.selected.startRange + .endRange:not(:nth-child(7n+1)),
+.flatpickr-day.startRange.startRange + .endRange:not(:nth-child(7n+1)),
+.flatpickr-day.endRange.startRange + .endRange:not(:nth-child(7n+1)) {
+  -webkit-box-shadow: -10px 0 0 #569ff7;
+          box-shadow: -10px 0 0 #569ff7;
+}
+.flatpickr-day.selected.startRange.endRange,
+.flatpickr-day.startRange.startRange.endRange,
+.flatpickr-day.endRange.startRange.endRange {
+  border-radius: 50px;
+}
+.flatpickr-day.inRange {
+  border-radius: 0;
+  -webkit-box-shadow: -5px 0 0 #e6e6e6, 5px 0 0 #e6e6e6;
+          box-shadow: -5px 0 0 #e6e6e6, 5px 0 0 #e6e6e6;
+}
+.flatpickr-day.flatpickr-disabled,
+.flatpickr-day.flatpickr-disabled:hover,
+.flatpickr-day.prevMonthDay,
+.flatpickr-day.nextMonthDay,
+.flatpickr-day.notAllowed,
+.flatpickr-day.notAllowed.prevMonthDay,
+.flatpickr-day.notAllowed.nextMonthDay {
+  color: rgba(57,57,57,0.3);
+  background: transparent;
+  border-color: transparent;
+  cursor: default;
+}
+.flatpickr-day.flatpickr-disabled,
+.flatpickr-day.flatpickr-disabled:hover {
+  cursor: not-allowed;
+  color: rgba(57,57,57,0.1);
+}
+.flatpickr-day.week.selected {
+  border-radius: 0;
+  -webkit-box-shadow: -5px 0 0 #569ff7, 5px 0 0 #569ff7;
+          box-shadow: -5px 0 0 #569ff7, 5px 0 0 #569ff7;
+}
+.flatpickr-day.hidden {
+  visibility: hidden;
+}
+.rangeMode .flatpickr-day {
+  margin-top: 1px;
+}
+.flatpickr-weekwrapper {
+  float: left;
+}
+.flatpickr-weekwrapper .flatpickr-weeks {
+  padding: 0 12px;
+  -webkit-box-shadow: 1px 0 0 #e6e6e6;
+          box-shadow: 1px 0 0 #e6e6e6;
+}
+.flatpickr-weekwrapper .flatpickr-weekday {
+  float: none;
+  width: 100%;
+  line-height: 28px;
+}
+.flatpickr-weekwrapper span.flatpickr-day,
+.flatpickr-weekwrapper span.flatpickr-day:hover {
+  display: block;
+  width: 100%;
+  max-width: none;
+  color: rgba(57,57,57,0.3);
+  background: transparent;
+  cursor: default;
+  border: none;
+}
+.flatpickr-innerContainer {
+  display: block;
+  display: -webkit-box;
+  display: -webkit-flex;
+  display: -ms-flexbox;
+  display: flex;
+  -webkit-box-sizing: border-box;
+          box-sizing: border-box;
+  overflow: hidden;
+}
+.flatpickr-rContainer {
+  display: inline-block;
+  padding: 0;
+  -webkit-box-sizing: border-box;
+          box-sizing: border-box;
+}
+.flatpickr-time {
+  text-align: center;
+  outline: 0;
+  display: block;
+  height: 0;
+  line-height: 40px;
+  max-height: 40px;
+  -webkit-box-sizing: border-box;
+          box-sizing: border-box;
+  overflow: hidden;
+  display: -webkit-box;
+  display: -webkit-flex;
+  display: -ms-flexbox;
+  display: flex;
+}
+.flatpickr-time:after {
+  content: "";
+  display: table;
+  clear: both;
+}
+.flatpickr-time .numInputWrapper {
+  -webkit-box-flex: 1;
+  -webkit-flex: 1;
+      -ms-flex: 1;
+          flex: 1;
+  width: 40%;
+  height: 40px;
+  float: left;
+}
+.flatpickr-time .numInputWrapper span.arrowUp:after {
+  border-bottom-color: #393939;
+}
+.flatpickr-time .numInputWrapper span.arrowDown:after {
+  border-top-color: #393939;
+}
+.flatpickr-time.hasSeconds .numInputWrapper {
+  width: 26%;
+}
+.flatpickr-time.time24hr .numInputWrapper {
+  width: 49%;
+}
+.flatpickr-time input {
+  background: transparent;
+  -webkit-box-shadow: none;
+          box-shadow: none;
+  border: 0;
+  border-radius: 0;
+  text-align: center;
+  margin: 0;
+  padding: 0;
+  height: inherit;
+  line-height: inherit;
+  color: #393939;
+  font-size: 14px;
+  position: relative;
+  -webkit-box-sizing: border-box;
+          box-sizing: border-box;
+  -webkit-appearance: textfield;
+  -moz-appearance: textfield;
+  appearance: textfield;
+}
+.flatpickr-time input.flatpickr-hour {
+  font-weight: bold;
+}
+.flatpickr-time input.flatpickr-minute,
+.flatpickr-time input.flatpickr-second {
+  font-weight: 400;
+}
+.flatpickr-time input:focus {
+  outline: 0;
+  border: 0;
+}
+.flatpickr-time .flatpickr-time-separator,
+.flatpickr-time .flatpickr-am-pm {
+  height: inherit;
+  float: left;
+  line-height: inherit;
+  color: #393939;
+  font-weight: bold;
+  width: 2%;
+  -webkit-user-select: none;
+     -moz-user-select: none;
+      -ms-user-select: none;
+          user-select: none;
+  -webkit-align-self: center;
+      -ms-flex-item-align: center;
+          align-self: center;
+}
+.flatpickr-time .flatpickr-am-pm {
+  outline: 0;
+  width: 18%;
+  cursor: pointer;
+  text-align: center;
+  font-weight: 400;
+}
+.flatpickr-time input:hover,
+.flatpickr-time .flatpickr-am-pm:hover,
+.flatpickr-time input:focus,
+.flatpickr-time .flatpickr-am-pm:focus {
+  background: #eee;
+}
+.flatpickr-input[readonly] {
+  cursor: pointer;
+}
+@-webkit-keyframes fpFadeInDown {
+  from {
+    opacity: 0;
+    -webkit-transform: translate3d(0, -20px, 0);
+            transform: translate3d(0, -20px, 0);
+  }
+  to {
+    opacity: 1;
+    -webkit-transform: translate3d(0, 0, 0);
+            transform: translate3d(0, 0, 0);
+  }
+}
+@keyframes fpFadeInDown {
+  from {
+    opacity: 0;
+    -webkit-transform: translate3d(0, -20px, 0);
+            transform: translate3d(0, -20px, 0);
+  }
+  to {
+    opacity: 1;
+    -webkit-transform: translate3d(0, 0, 0);
+            transform: translate3d(0, 0, 0);
+  }
+}
diff --git a/admin/js/vendors/flatpickr/flatpickr.js b/admin/js/vendors/flatpickr/flatpickr.js
new file mode 100644 (file)
index 0000000..a94e6ac
--- /dev/null
@@ -0,0 +1,2658 @@
+/* flatpickr v4.6.6, @license MIT */
+(function (global, factory) {
+    typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
+    typeof define === 'function' && define.amd ? define(factory) :
+    (global = global || self, global.flatpickr = factory());
+}(this, (function () { 'use strict';
+
+    /*! *****************************************************************************
+    Copyright (c) Microsoft Corporation.
+
+    Permission to use, copy, modify, and/or distribute this software for any
+    purpose with or without fee is hereby granted.
+
+    THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
+    REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+    AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
+    INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+    LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
+    OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+    PERFORMANCE OF THIS SOFTWARE.
+    ***************************************************************************** */
+
+    var __assign = function() {
+        __assign = Object.assign || function __assign(t) {
+            for (var s, i = 1, n = arguments.length; i < n; i++) {
+                s = arguments[i];
+                for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
+            }
+            return t;
+        };
+        return __assign.apply(this, arguments);
+    };
+
+    function __spreadArrays() {
+        for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;
+        for (var r = Array(s), k = 0, i = 0; i < il; i++)
+            for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)
+                r[k] = a[j];
+        return r;
+    }
+
+    var HOOKS = [
+        "onChange",
+        "onClose",
+        "onDayCreate",
+        "onDestroy",
+        "onKeyDown",
+        "onMonthChange",
+        "onOpen",
+        "onParseConfig",
+        "onReady",
+        "onValueUpdate",
+        "onYearChange",
+        "onPreCalendarPosition",
+    ];
+    var defaults = {
+        _disable: [],
+        _enable: [],
+        allowInput: false,
+        allowInvalidPreload: false,
+        altFormat: "F j, Y",
+        altInput: false,
+        altInputClass: "form-control input",
+        animate: typeof window === "object" &&
+            window.navigator.userAgent.indexOf("MSIE") === -1,
+        ariaDateFormat: "F j, Y",
+        autoFillDefaultTime: true,
+        clickOpens: true,
+        closeOnSelect: true,
+        conjunction: ", ",
+        dateFormat: "Y-m-d",
+        defaultHour: 12,
+        defaultMinute: 0,
+        defaultSeconds: 0,
+        disable: [],
+        disableMobile: false,
+        enable: [],
+        enableSeconds: false,
+        enableTime: false,
+        errorHandler: function (err) {
+            return typeof console !== "undefined" && console.warn(err);
+        },
+        getWeek: function (givenDate) {
+            var date = new Date(givenDate.getTime());
+            date.setHours(0, 0, 0, 0);
+            // Thursday in current week decides the year.
+            date.setDate(date.getDate() + 3 - ((date.getDay() + 6) % 7));
+            // January 4 is always in week 1.
+            var week1 = new Date(date.getFullYear(), 0, 4);
+            // Adjust to Thursday in week 1 and count number of weeks from date to week1.
+            return (1 +
+                Math.round(((date.getTime() - week1.getTime()) / 86400000 -
+                    3 +
+                    ((week1.getDay() + 6) % 7)) /
+                    7));
+        },
+        hourIncrement: 1,
+        ignoredFocusElements: [],
+        inline: false,
+        locale: "default",
+        minuteIncrement: 5,
+        mode: "single",
+        monthSelectorType: "dropdown",
+        nextArrow: "<svg version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 17 17'><g></g><path d='M13.207 8.472l-7.854 7.854-0.707-0.707 7.146-7.146-7.146-7.148 0.707-0.707 7.854 7.854z' /></svg>",
+        noCalendar: false,
+        now: new Date(),
+        onChange: [],
+        onClose: [],
+        onDayCreate: [],
+        onDestroy: [],
+        onKeyDown: [],
+        onMonthChange: [],
+        onOpen: [],
+        onParseConfig: [],
+        onReady: [],
+        onValueUpdate: [],
+        onYearChange: [],
+        onPreCalendarPosition: [],
+        plugins: [],
+        position: "auto",
+        positionElement: undefined,
+        prevArrow: "<svg version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 17 17'><g></g><path d='M5.207 8.471l7.146 7.147-0.707 0.707-7.853-7.854 7.854-7.853 0.707 0.707-7.147 7.146z' /></svg>",
+        shorthandCurrentMonth: false,
+        showMonths: 1,
+        static: false,
+        time_24hr: false,
+        weekNumbers: false,
+        wrap: false,
+    };
+
+    var english = {
+        weekdays: {
+            shorthand: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"],
+            longhand: [
+                "Sunday",
+                "Monday",
+                "Tuesday",
+                "Wednesday",
+                "Thursday",
+                "Friday",
+                "Saturday",
+            ],
+        },
+        months: {
+            shorthand: [
+                "Jan",
+                "Feb",
+                "Mar",
+                "Apr",
+                "May",
+                "Jun",
+                "Jul",
+                "Aug",
+                "Sep",
+                "Oct",
+                "Nov",
+                "Dec",
+            ],
+            longhand: [
+                "January",
+                "February",
+                "March",
+                "April",
+                "May",
+                "June",
+                "July",
+                "August",
+                "September",
+                "October",
+                "November",
+                "December",
+            ],
+        },
+        daysInMonth: [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31],
+        firstDayOfWeek: 0,
+        ordinal: function (nth) {
+            var s = nth % 100;
+            if (s > 3 && s < 21)
+                return "th";
+            switch (s % 10) {
+                case 1:
+                    return "st";
+                case 2:
+                    return "nd";
+                case 3:
+                    return "rd";
+                default:
+                    return "th";
+            }
+        },
+        rangeSeparator: " to ",
+        weekAbbreviation: "Wk",
+        scrollTitle: "Scroll to increment",
+        toggleTitle: "Click to toggle",
+        amPM: ["AM", "PM"],
+        yearAriaLabel: "Year",
+        monthAriaLabel: "Month",
+        hourAriaLabel: "Hour",
+        minuteAriaLabel: "Minute",
+        time_24hr: false,
+    };
+
+    var pad = function (number, length) {
+        if (length === void 0) { length = 2; }
+        return ("000" + number).slice(length * -1);
+    };
+    var int = function (bool) { return (bool === true ? 1 : 0); };
+    /* istanbul ignore next */
+    function debounce(func, wait, immediate) {
+        if (immediate === void 0) { immediate = false; }
+        var timeout;
+        return function () {
+            var context = this, args = arguments;
+            timeout !== null && clearTimeout(timeout);
+            timeout = window.setTimeout(function () {
+                timeout = null;
+                if (!immediate)
+                    func.apply(context, args);
+            }, wait);
+            if (immediate && !timeout)
+                func.apply(context, args);
+        };
+    }
+    var arrayify = function (obj) {
+        return obj instanceof Array ? obj : [obj];
+    };
+
+    function toggleClass(elem, className, bool) {
+        if (bool === true)
+            return elem.classList.add(className);
+        elem.classList.remove(className);
+    }
+    function createElement(tag, className, content) {
+        var e = window.document.createElement(tag);
+        className = className || "";
+        content = content || "";
+        e.className = className;
+        if (content !== undefined)
+            e.textContent = content;
+        return e;
+    }
+    function clearNode(node) {
+        while (node.firstChild)
+            node.removeChild(node.firstChild);
+    }
+    function findParent(node, condition) {
+        if (condition(node))
+            return node;
+        else if (node.parentNode)
+            return findParent(node.parentNode, condition);
+        return undefined; // nothing found
+    }
+    function createNumberInput(inputClassName, opts) {
+        var wrapper = createElement("div", "numInputWrapper"), numInput = createElement("input", "numInput " + inputClassName), arrowUp = createElement("span", "arrowUp"), arrowDown = createElement("span", "arrowDown");
+        if (navigator.userAgent.indexOf("MSIE 9.0") === -1) {
+            numInput.type = "number";
+        }
+        else {
+            numInput.type = "text";
+            numInput.pattern = "\\d*";
+        }
+        if (opts !== undefined)
+            for (var key in opts)
+                numInput.setAttribute(key, opts[key]);
+        wrapper.appendChild(numInput);
+        wrapper.appendChild(arrowUp);
+        wrapper.appendChild(arrowDown);
+        return wrapper;
+    }
+    function getEventTarget(event) {
+        try {
+            if (typeof event.composedPath === "function") {
+                var path = event.composedPath();
+                return path[0];
+            }
+            return event.target;
+        }
+        catch (error) {
+            return event.target;
+        }
+    }
+
+    var doNothing = function () { return undefined; };
+    var monthToStr = function (monthNumber, shorthand, locale) { return locale.months[shorthand ? "shorthand" : "longhand"][monthNumber]; };
+    var revFormat = {
+        D: doNothing,
+        F: function (dateObj, monthName, locale) {
+            dateObj.setMonth(locale.months.longhand.indexOf(monthName));
+        },
+        G: function (dateObj, hour) {
+            dateObj.setHours(parseFloat(hour));
+        },
+        H: function (dateObj, hour) {
+            dateObj.setHours(parseFloat(hour));
+        },
+        J: function (dateObj, day) {
+            dateObj.setDate(parseFloat(day));
+        },
+        K: function (dateObj, amPM, locale) {
+            dateObj.setHours((dateObj.getHours() % 12) +
+                12 * int(new RegExp(locale.amPM[1], "i").test(amPM)));
+        },
+        M: function (dateObj, shortMonth, locale) {
+            dateObj.setMonth(locale.months.shorthand.indexOf(shortMonth));
+        },
+        S: function (dateObj, seconds) {
+            dateObj.setSeconds(parseFloat(seconds));
+        },
+        U: function (_, unixSeconds) { return new Date(parseFloat(unixSeconds) * 1000); },
+        W: function (dateObj, weekNum, locale) {
+            var weekNumber = parseInt(weekNum);
+            var date = new Date(dateObj.getFullYear(), 0, 2 + (weekNumber - 1) * 7, 0, 0, 0, 0);
+            date.setDate(date.getDate() - date.getDay() + locale.firstDayOfWeek);
+            return date;
+        },
+        Y: function (dateObj, year) {
+            dateObj.setFullYear(parseFloat(year));
+        },
+        Z: function (_, ISODate) { return new Date(ISODate); },
+        d: function (dateObj, day) {
+            dateObj.setDate(parseFloat(day));
+        },
+        h: function (dateObj, hour) {
+            dateObj.setHours(parseFloat(hour));
+        },
+        i: function (dateObj, minutes) {
+            dateObj.setMinutes(parseFloat(minutes));
+        },
+        j: function (dateObj, day) {
+            dateObj.setDate(parseFloat(day));
+        },
+        l: doNothing,
+        m: function (dateObj, month) {
+            dateObj.setMonth(parseFloat(month) - 1);
+        },
+        n: function (dateObj, month) {
+            dateObj.setMonth(parseFloat(month) - 1);
+        },
+        s: function (dateObj, seconds) {
+            dateObj.setSeconds(parseFloat(seconds));
+        },
+        u: function (_, unixMillSeconds) {
+            return new Date(parseFloat(unixMillSeconds));
+        },
+        w: doNothing,
+        y: function (dateObj, year) {
+            dateObj.setFullYear(2000 + parseFloat(year));
+        },
+    };
+    var tokenRegex = {
+        D: "(\\w+)",
+        F: "(\\w+)",
+        G: "(\\d\\d|\\d)",
+        H: "(\\d\\d|\\d)",
+        J: "(\\d\\d|\\d)\\w+",
+        K: "",
+        M: "(\\w+)",
+        S: "(\\d\\d|\\d)",
+        U: "(.+)",
+        W: "(\\d\\d|\\d)",
+        Y: "(\\d{4})",
+        Z: "(.+)",
+        d: "(\\d\\d|\\d)",
+        h: "(\\d\\d|\\d)",
+        i: "(\\d\\d|\\d)",
+        j: "(\\d\\d|\\d)",
+        l: "(\\w+)",
+        m: "(\\d\\d|\\d)",
+        n: "(\\d\\d|\\d)",
+        s: "(\\d\\d|\\d)",
+        u: "(.+)",
+        w: "(\\d\\d|\\d)",
+        y: "(\\d{2})",
+    };
+    var formats = {
+        // get the date in UTC
+        Z: function (date) { return date.toISOString(); },
+        // weekday name, short, e.g. Thu
+        D: function (date, locale, options) {
+            return locale.weekdays.shorthand[formats.w(date, locale, options)];
+        },
+        // full month name e.g. January
+        F: function (date, locale, options) {
+            return monthToStr(formats.n(date, locale, options) - 1, false, locale);
+        },
+        // padded hour 1-12
+        G: function (date, locale, options) {
+            return pad(formats.h(date, locale, options));
+        },
+        // hours with leading zero e.g. 03
+        H: function (date) { return pad(date.getHours()); },
+        // day (1-30) with ordinal suffix e.g. 1st, 2nd
+        J: function (date, locale) {
+            return locale.ordinal !== undefined
+                ? date.getDate() + locale.ordinal(date.getDate())
+                : date.getDate();
+        },
+        // AM/PM
+        K: function (date, locale) { return locale.amPM[int(date.getHours() > 11)]; },
+        // shorthand month e.g. Jan, Sep, Oct, etc
+        M: function (date, locale) {
+            return monthToStr(date.getMonth(), true, locale);
+        },
+        // seconds 00-59
+        S: function (date) { return pad(date.getSeconds()); },
+        // unix timestamp
+        U: function (date) { return date.getTime() / 1000; },
+        W: function (date, _, options) {
+            return options.getWeek(date);
+        },
+        // full year e.g. 2016, padded (0001-9999)
+        Y: function (date) { return pad(date.getFullYear(), 4); },
+        // day in month, padded (01-30)
+        d: function (date) { return pad(date.getDate()); },
+        // hour from 1-12 (am/pm)
+        h: function (date) { return (date.getHours() % 12 ? date.getHours() % 12 : 12); },
+        // minutes, padded with leading zero e.g. 09
+        i: function (date) { return pad(date.getMinutes()); },
+        // day in month (1-30)
+        j: function (date) { return date.getDate(); },
+        // weekday name, full, e.g. Thursday
+        l: function (date, locale) {
+            return locale.weekdays.longhand[date.getDay()];
+        },
+        // padded month number (01-12)
+        m: function (date) { return pad(date.getMonth() + 1); },
+        // the month number (1-12)
+        n: function (date) { return date.getMonth() + 1; },
+        // seconds 0-59
+        s: function (date) { return date.getSeconds(); },
+        // Unix Milliseconds
+        u: function (date) { return date.getTime(); },
+        // number of the day of the week
+        w: function (date) { return date.getDay(); },
+        // last two digits of year e.g. 16 for 2016
+        y: function (date) { return String(date.getFullYear()).substring(2); },
+    };
+
+    var createDateFormatter = function (_a) {
+        var _b = _a.config, config = _b === void 0 ? defaults : _b, _c = _a.l10n, l10n = _c === void 0 ? english : _c, _d = _a.isMobile, isMobile = _d === void 0 ? false : _d;
+        return function (dateObj, frmt, overrideLocale) {
+            var locale = overrideLocale || l10n;
+            if (config.formatDate !== undefined && !isMobile) {
+                return config.formatDate(dateObj, frmt, locale);
+            }
+            return frmt
+                .split("")
+                .map(function (c, i, arr) {
+                return formats[c] && arr[i - 1] !== "\\"
+                    ? formats[c](dateObj, locale, config)
+                    : c !== "\\"
+                        ? c
+                        : "";
+            })
+                .join("");
+        };
+    };
+    var createDateParser = function (_a) {
+        var _b = _a.config, config = _b === void 0 ? defaults : _b, _c = _a.l10n, l10n = _c === void 0 ? english : _c;
+        return function (date, givenFormat, timeless, customLocale) {
+            if (date !== 0 && !date)
+                return undefined;
+            var locale = customLocale || l10n;
+            var parsedDate;
+            var dateOrig = date;
+            if (date instanceof Date)
+                parsedDate = new Date(date.getTime());
+            else if (typeof date !== "string" &&
+                date.toFixed !== undefined // timestamp
+            )
+                // create a copy
+                parsedDate = new Date(date);
+            else if (typeof date === "string") {
+                // date string
+                var format = givenFormat || (config || defaults).dateFormat;
+                var datestr = String(date).trim();
+                if (datestr === "today") {
+                    parsedDate = new Date();
+                    timeless = true;
+                }
+                else if (/Z$/.test(datestr) ||
+                    /GMT$/.test(datestr) // datestrings w/ timezone
+                )
+                    parsedDate = new Date(date);
+                else if (config && config.parseDate)
+                    parsedDate = config.parseDate(date, format);
+                else {
+                    parsedDate =
+                        !config || !config.noCalendar
+                            ? new Date(new Date().getFullYear(), 0, 1, 0, 0, 0, 0)
+                            : new Date(new Date().setHours(0, 0, 0, 0));
+                    var matched = void 0, ops = [];
+                    for (var i = 0, matchIndex = 0, regexStr = ""; i < format.length; i++) {
+                        var token_1 = format[i];
+                        var isBackSlash = token_1 === "\\";
+                        var escaped = format[i - 1] === "\\" || isBackSlash;
+                        if (tokenRegex[token_1] && !escaped) {
+                            regexStr += tokenRegex[token_1];
+                            var match = new RegExp(regexStr).exec(date);
+                            if (match && (matched = true)) {
+                                ops[token_1 !== "Y" ? "push" : "unshift"]({
+                                    fn: revFormat[token_1],
+                                    val: match[++matchIndex],
+                                });
+                            }
+                        }
+                        else if (!isBackSlash)
+                            regexStr += "."; // don't really care
+                        ops.forEach(function (_a) {
+                            var fn = _a.fn, val = _a.val;
+                            return (parsedDate = fn(parsedDate, val, locale) || parsedDate);
+                        });
+                    }
+                    parsedDate = matched ? parsedDate : undefined;
+                }
+            }
+            /* istanbul ignore next */
+            if (!(parsedDate instanceof Date && !isNaN(parsedDate.getTime()))) {
+                config.errorHandler(new Error("Invalid date provided: " + dateOrig));
+                return undefined;
+            }
+            if (timeless === true)
+                parsedDate.setHours(0, 0, 0, 0);
+            return parsedDate;
+        };
+    };
+    /**
+     * Compute the difference in dates, measured in ms
+     */
+    function compareDates(date1, date2, timeless) {
+        if (timeless === void 0) { timeless = true; }
+        if (timeless !== false) {
+            return (new Date(date1.getTime()).setHours(0, 0, 0, 0) -
+                new Date(date2.getTime()).setHours(0, 0, 0, 0));
+        }
+        return date1.getTime() - date2.getTime();
+    }
+    var isBetween = function (ts, ts1, ts2) {
+        return ts > Math.min(ts1, ts2) && ts < Math.max(ts1, ts2);
+    };
+    var duration = {
+        DAY: 86400000,
+    };
+
+    if (typeof Object.assign !== "function") {
+        Object.assign = function (target) {
+            var args = [];
+            for (var _i = 1; _i < arguments.length; _i++) {
+                args[_i - 1] = arguments[_i];
+            }
+            if (!target) {
+                throw TypeError("Cannot convert undefined or null to object");
+            }
+            var _loop_1 = function (source) {
+                if (source) {
+                    Object.keys(source).forEach(function (key) { return (target[key] = source[key]); });
+                }
+            };
+            for (var _a = 0, args_1 = args; _a < args_1.length; _a++) {
+                var source = args_1[_a];
+                _loop_1(source);
+            }
+            return target;
+        };
+    }
+
+    var DEBOUNCED_CHANGE_MS = 300;
+    function FlatpickrInstance(element, instanceConfig) {
+        var self = {
+            config: __assign(__assign({}, defaults), flatpickr.defaultConfig),
+            l10n: english,
+        };
+        self.parseDate = createDateParser({ config: self.config, l10n: self.l10n });
+        self._handlers = [];
+        self.pluginElements = [];
+        self.loadedPlugins = [];
+        self._bind = bind;
+        self._setHoursFromDate = setHoursFromDate;
+        self._positionCalendar = positionCalendar;
+        self.changeMonth = changeMonth;
+        self.changeYear = changeYear;
+        self.clear = clear;
+        self.close = close;
+        self._createElement = createElement;
+        self.destroy = destroy;
+        self.isEnabled = isEnabled;
+        self.jumpToDate = jumpToDate;
+        self.open = open;
+        self.redraw = redraw;
+        self.set = set;
+        self.setDate = setDate;
+        self.toggle = toggle;
+        function setupHelperFunctions() {
+            self.utils = {
+                getDaysInMonth: function (month, yr) {
+                    if (month === void 0) { month = self.currentMonth; }
+                    if (yr === void 0) { yr = self.currentYear; }
+                    if (month === 1 && ((yr % 4 === 0 && yr % 100 !== 0) || yr % 400 === 0))
+                        return 29;
+                    return self.l10n.daysInMonth[month];
+                },
+            };
+        }
+        function init() {
+            self.element = self.input = element;
+            self.isOpen = false;
+            parseConfig();
+            setupLocale();
+            setupInputs();
+            setupDates();
+            setupHelperFunctions();
+            if (!self.isMobile)
+                build();
+            bindEvents();
+            if (self.selectedDates.length || self.config.noCalendar) {
+                if (self.config.enableTime) {
+                    setHoursFromDate(self.config.noCalendar
+                        ? self.latestSelectedDateObj || self.config.minDate
+                        : undefined);
+                }
+                updateValue(false);
+            }
+            setCalendarWidth();
+            var isSafari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent);
+            /* TODO: investigate this further
+        
+              Currently, there is weird positioning behavior in safari causing pages
+              to scroll up. https://github.com/chmln/flatpickr/issues/563
+        
+              However, most browsers are not Safari and positioning is expensive when used
+              in scale. https://github.com/chmln/flatpickr/issues/1096
+            */
+            if (!self.isMobile && isSafari) {
+                positionCalendar();
+            }
+            triggerEvent("onReady");
+        }
+        function bindToInstance(fn) {
+            return fn.bind(self);
+        }
+        function setCalendarWidth() {
+            var config = self.config;
+            if (config.weekNumbers === false && config.showMonths === 1) {
+                return;
+            }
+            else if (config.noCalendar !== true) {
+                window.requestAnimationFrame(function () {
+                    if (self.calendarContainer !== undefined) {
+                        self.calendarContainer.style.visibility = "hidden";
+                        self.calendarContainer.style.display = "block";
+                    }
+                    if (self.daysContainer !== undefined) {
+                        var daysWidth = (self.days.offsetWidth + 1) * config.showMonths;
+                        self.daysContainer.style.width = daysWidth + "px";
+                        self.calendarContainer.style.width =
+                            daysWidth +
+                                (self.weekWrapper !== undefined
+                                    ? self.weekWrapper.offsetWidth
+                                    : 0) +
+                                "px";
+                        self.calendarContainer.style.removeProperty("visibility");
+                        self.calendarContainer.style.removeProperty("display");
+                    }
+                });
+            }
+        }
+        /**
+         * The handler for all events targeting the time inputs
+         */
+        function updateTime(e) {
+            if (self.selectedDates.length === 0) {
+                var defaultDate = self.config.minDate !== undefined
+                    ? new Date(self.config.minDate.getTime())
+                    : new Date();
+                var _a = getDefaultHours(), hours = _a.hours, minutes = _a.minutes, seconds = _a.seconds;
+                defaultDate.setHours(hours, minutes, seconds, 0);
+                self.setDate(defaultDate, false);
+            }
+            if (e !== undefined && e.type !== "blur") {
+                timeWrapper(e);
+            }
+            var prevValue = self._input.value;
+            setHoursFromInputs();
+            updateValue();
+            if (self._input.value !== prevValue) {
+                self._debouncedChange();
+            }
+        }
+        function ampm2military(hour, amPM) {
+            return (hour % 12) + 12 * int(amPM === self.l10n.amPM[1]);
+        }
+        function military2ampm(hour) {
+            switch (hour % 24) {
+                case 0:
+                case 12:
+                    return 12;
+                default:
+                    return hour % 12;
+            }
+        }
+        /**
+         * Syncs the selected date object time with user's time input
+         */
+        function setHoursFromInputs() {
+            if (self.hourElement === undefined || self.minuteElement === undefined)
+                return;
+            var hours = (parseInt(self.hourElement.value.slice(-2), 10) || 0) % 24, minutes = (parseInt(self.minuteElement.value, 10) || 0) % 60, seconds = self.secondElement !== undefined
+                ? (parseInt(self.secondElement.value, 10) || 0) % 60
+                : 0;
+            if (self.amPM !== undefined) {
+                hours = ampm2military(hours, self.amPM.textContent);
+            }
+            var limitMinHours = self.config.minTime !== undefined ||
+                (self.config.minDate &&
+                    self.minDateHasTime &&
+                    self.latestSelectedDateObj &&
+                    compareDates(self.latestSelectedDateObj, self.config.minDate, true) ===
+                        0);
+            var limitMaxHours = self.config.maxTime !== undefined ||
+                (self.config.maxDate &&
+                    self.maxDateHasTime &&
+                    self.latestSelectedDateObj &&
+                    compareDates(self.latestSelectedDateObj, self.config.maxDate, true) ===
+                        0);
+            if (limitMaxHours) {
+                var maxTime = self.config.maxTime !== undefined
+                    ? self.config.maxTime
+                    : self.config.maxDate;
+                hours = Math.min(hours, maxTime.getHours());
+                if (hours === maxTime.getHours())
+                    minutes = Math.min(minutes, maxTime.getMinutes());
+                if (minutes === maxTime.getMinutes())
+                    seconds = Math.min(seconds, maxTime.getSeconds());
+            }
+            if (limitMinHours) {
+                var minTime = self.config.minTime !== undefined
+                    ? self.config.minTime
+                    : self.config.minDate;
+                hours = Math.max(hours, minTime.getHours());
+                if (hours === minTime.getHours())
+                    minutes = Math.max(minutes, minTime.getMinutes());
+                if (minutes === minTime.getMinutes())
+                    seconds = Math.max(seconds, minTime.getSeconds());
+            }
+            setHours(hours, minutes, seconds);
+        }
+        /**
+         * Syncs time input values with a date
+         */
+        function setHoursFromDate(dateObj) {
+            var date = dateObj || self.latestSelectedDateObj;
+            if (date) {
+                setHours(date.getHours(), date.getMinutes(), date.getSeconds());
+            }
+        }
+        function getDefaultHours() {
+            var hours = self.config.defaultHour;
+            var minutes = self.config.defaultMinute;
+            var seconds = self.config.defaultSeconds;
+            if (self.config.minDate !== undefined) {
+                var minHr = self.config.minDate.getHours();
+                var minMinutes = self.config.minDate.getMinutes();
+                hours = Math.max(hours, minHr);
+                if (hours === minHr)
+                    minutes = Math.max(minMinutes, minutes);
+                if (hours === minHr && minutes === minMinutes)
+                    seconds = self.config.minDate.getSeconds();
+            }
+            if (self.config.maxDate !== undefined) {
+                var maxHr = self.config.maxDate.getHours();
+                var maxMinutes = self.config.maxDate.getMinutes();
+                hours = Math.min(hours, maxHr);
+                if (hours === maxHr)
+                    minutes = Math.min(maxMinutes, minutes);
+                if (hours === maxHr && minutes === maxMinutes)
+                    seconds = self.config.maxDate.getSeconds();
+            }
+            return { hours: hours, minutes: minutes, seconds: seconds };
+        }
+        /**
+         * Sets the hours, minutes, and optionally seconds
+         * of the latest selected date object and the
+         * corresponding time inputs
+         * @param {Number} hours the hour. whether its military
+         *                 or am-pm gets inferred from config
+         * @param {Number} minutes the minutes
+         * @param {Number} seconds the seconds (optional)
+         */
+        function setHours(hours, minutes, seconds) {
+            if (self.latestSelectedDateObj !== undefined) {
+                self.latestSelectedDateObj.setHours(hours % 24, minutes, seconds || 0, 0);
+            }
+            if (!self.hourElement || !self.minuteElement || self.isMobile)
+                return;
+            self.hourElement.value = pad(!self.config.time_24hr
+                ? ((12 + hours) % 12) + 12 * int(hours % 12 === 0)
+                : hours);
+            self.minuteElement.value = pad(minutes);
+            if (self.amPM !== undefined)
+                self.amPM.textContent = self.l10n.amPM[int(hours >= 12)];
+            if (self.secondElement !== undefined)
+                self.secondElement.value = pad(seconds);
+        }
+        /**
+         * Handles the year input and incrementing events
+         * @param {Event} event the keyup or increment event
+         */
+        function onYearInput(event) {
+            var eventTarget = getEventTarget(event);
+            var year = parseInt(eventTarget.value) + (event.delta || 0);
+            if (year / 1000 > 1 ||
+                (event.key === "Enter" && !/[^\d]/.test(year.toString()))) {
+                changeYear(year);
+            }
+        }
+        /**
+         * Essentially addEventListener + tracking
+         * @param {Element} element the element to addEventListener to
+         * @param {String} event the event name
+         * @param {Function} handler the event handler
+         */
+        function bind(element, event, handler, options) {
+            if (event instanceof Array)
+                return event.forEach(function (ev) { return bind(element, ev, handler, options); });
+            if (element instanceof Array)
+                return element.forEach(function (el) { return bind(el, event, handler, options); });
+            element.addEventListener(event, handler, options);
+            self._handlers.push({
+                element: element,
+                event: event,
+                handler: handler,
+                options: options,
+            });
+        }
+        function triggerChange() {
+            triggerEvent("onChange");
+        }
+        /**
+         * Adds all the necessary event listeners
+         */
+        function bindEvents() {
+            if (self.config.wrap) {
+                ["open", "close", "toggle", "clear"].forEach(function (evt) {
+                    Array.prototype.forEach.call(self.element.querySelectorAll("[data-" + evt + "]"), function (el) {
+                        return bind(el, "click", self[evt]);
+                    });
+                });
+            }
+            if (self.isMobile) {
+                setupMobile();
+                return;
+            }
+            var debouncedResize = debounce(onResize, 50);
+            self._debouncedChange = debounce(triggerChange, DEBOUNCED_CHANGE_MS);
+            if (self.daysContainer && !/iPhone|iPad|iPod/i.test(navigator.userAgent))
+                bind(self.daysContainer, "mouseover", function (e) {
+                    if (self.config.mode === "range")
+                        onMouseOver(getEventTarget(e));
+                });
+            bind(window.document.body, "keydown", onKeyDown);
+            if (!self.config.inline && !self.config.static)
+                bind(window, "resize", debouncedResize);
+            if (window.ontouchstart !== undefined)
+                bind(window.document, "touchstart", documentClick);
+            else
+                bind(window.document, "click", documentClick);
+            bind(window.document, "focus", documentClick, { capture: true });
+            if (self.config.clickOpens === true) {
+                bind(self._input, "focus", self.open);
+                bind(self._input, "click", self.open);
+            }
+            if (self.daysContainer !== undefined) {
+                bind(self.monthNav, "click", onMonthNavClick);
+                bind(self.monthNav, ["keyup", "increment"], onYearInput);
+                bind(self.daysContainer, "click", selectDate);
+            }
+            if (self.timeContainer !== undefined &&
+                self.minuteElement !== undefined &&
+                self.hourElement !== undefined) {
+                var selText = function (e) {
+                    return getEventTarget(e).select();
+                };
+                bind(self.timeContainer, ["increment"], updateTime);
+                bind(self.timeContainer, "blur", updateTime, { capture: true });
+                bind(self.timeContainer, "click", timeIncrement);
+                bind([self.hourElement, self.minuteElement], ["focus", "click"], selText);
+                if (self.secondElement !== undefined)
+                    bind(self.secondElement, "focus", function () { return self.secondElement && self.secondElement.select(); });
+                if (self.amPM !== undefined) {
+                    bind(self.amPM, "click", function (e) {
+                        updateTime(e);
+                        triggerChange();
+                    });
+                }
+            }
+            if (self.config.allowInput)
+                bind(self._input, "blur", onBlur);
+        }
+        /**
+         * Set the calendar view to a particular date.
+         * @param {Date} jumpDate the date to set the view to
+         * @param {boolean} triggerChange if change events should be triggered
+         */
+        function jumpToDate(jumpDate, triggerChange) {
+            var jumpTo = jumpDate !== undefined
+                ? self.parseDate(jumpDate)
+                : self.latestSelectedDateObj ||
+                    (self.config.minDate && self.config.minDate > self.now
+                        ? self.config.minDate
+                        : self.config.maxDate && self.config.maxDate < self.now
+                            ? self.config.maxDate
+                            : self.now);
+            var oldYear = self.currentYear;
+            var oldMonth = self.currentMonth;
+            try {
+                if (jumpTo !== undefined) {
+                    self.currentYear = jumpTo.getFullYear();
+                    self.currentMonth = jumpTo.getMonth();
+                }
+            }
+            catch (e) {
+                /* istanbul ignore next */
+                e.message = "Invalid date supplied: " + jumpTo;
+                self.config.errorHandler(e);
+            }
+            if (triggerChange && self.currentYear !== oldYear) {
+                triggerEvent("onYearChange");
+                buildMonthSwitch();
+            }
+            if (triggerChange &&
+                (self.currentYear !== oldYear || self.currentMonth !== oldMonth)) {
+                triggerEvent("onMonthChange");
+            }
+            self.redraw();
+        }
+        /**
+         * The up/down arrow handler for time inputs
+         * @param {Event} e the click event
+         */
+        function timeIncrement(e) {
+            var eventTarget = getEventTarget(e);
+            if (~eventTarget.className.indexOf("arrow"))
+                incrementNumInput(e, eventTarget.classList.contains("arrowUp") ? 1 : -1);
+        }
+        /**
+         * Increments/decrements the value of input associ-
+         * ated with the up/down arrow by dispatching an
+         * "increment" event on the input.
+         *
+         * @param {Event} e the click event
+         * @param {Number} delta the diff (usually 1 or -1)
+         * @param {Element} inputElem the input element
+         */
+        function incrementNumInput(e, delta, inputElem) {
+            var target = e && getEventTarget(e);
+            var input = inputElem ||
+                (target && target.parentNode && target.parentNode.firstChild);
+            var event = createEvent("increment");
+            event.delta = delta;
+            input && input.dispatchEvent(event);
+        }
+        function build() {
+            var fragment = window.document.createDocumentFragment();
+            self.calendarContainer = createElement("div", "flatpickr-calendar");
+            self.calendarContainer.tabIndex = -1;
+            if (!self.config.noCalendar) {
+                fragment.appendChild(buildMonthNav());
+                self.innerContainer = createElement("div", "flatpickr-innerContainer");
+                if (self.config.weekNumbers) {
+                    var _a = buildWeeks(), weekWrapper = _a.weekWrapper, weekNumbers = _a.weekNumbers;
+                    self.innerContainer.appendChild(weekWrapper);
+                    self.weekNumbers = weekNumbers;
+                    self.weekWrapper = weekWrapper;
+                }
+                self.rContainer = createElement("div", "flatpickr-rContainer");
+                self.rContainer.appendChild(buildWeekdays());
+                if (!self.daysContainer) {
+                    self.daysContainer = createElement("div", "flatpickr-days");
+                    self.daysContainer.tabIndex = -1;
+                }
+                buildDays();
+                self.rContainer.appendChild(self.daysContainer);
+                self.innerContainer.appendChild(self.rContainer);
+                fragment.appendChild(self.innerContainer);
+            }
+            if (self.config.enableTime) {
+                fragment.appendChild(buildTime());
+            }
+            toggleClass(self.calendarContainer, "rangeMode", self.config.mode === "range");
+            toggleClass(self.calendarContainer, "animate", self.config.animate === true);
+            toggleClass(self.calendarContainer, "multiMonth", self.config.showMonths > 1);
+            self.calendarContainer.appendChild(fragment);
+            var customAppend = self.config.appendTo !== undefined &&
+                self.config.appendTo.nodeType !== undefined;
+            if (self.config.inline || self.config.static) {
+                self.calendarContainer.classList.add(self.config.inline ? "inline" : "static");
+                if (self.config.inline) {
+                    if (!customAppend && self.element.parentNode)
+                        self.element.parentNode.insertBefore(self.calendarContainer, self._input.nextSibling);
+                    else if (self.config.appendTo !== undefined)
+                        self.config.appendTo.appendChild(self.calendarContainer);
+                }
+                if (self.config.static) {
+                    var wrapper = createElement("div", "flatpickr-wrapper");
+                    if (self.element.parentNode)
+                        self.element.parentNode.insertBefore(wrapper, self.element);
+                    wrapper.appendChild(self.element);
+                    if (self.altInput)
+                        wrapper.appendChild(self.altInput);
+                    wrapper.appendChild(self.calendarContainer);
+                }
+            }
+            if (!self.config.static && !self.config.inline)
+                (self.config.appendTo !== undefined
+                    ? self.config.appendTo
+                    : window.document.body).appendChild(self.calendarContainer);
+        }
+        function createDay(className, date, dayNumber, i) {
+            var dateIsEnabled = isEnabled(date, true), dayElement = createElement("span", "flatpickr-day " + className, date.getDate().toString());
+            dayElement.dateObj = date;
+            dayElement.$i = i;
+            dayElement.setAttribute("aria-label", self.formatDate(date, self.config.ariaDateFormat));
+            if (className.indexOf("hidden") === -1 &&
+                compareDates(date, self.now) === 0) {
+                self.todayDateElem = dayElement;
+                dayElement.classList.add("today");
+                dayElement.setAttribute("aria-current", "date");
+            }
+            if (dateIsEnabled) {
+                dayElement.tabIndex = -1;
+                if (isDateSelected(date)) {
+                    dayElement.classList.add("selected");
+                    self.selectedDateElem = dayElement;
+                    if (self.config.mode === "range") {
+                        toggleClass(dayElement, "startRange", self.selectedDates[0] &&
+                            compareDates(date, self.selectedDates[0], true) === 0);
+                        toggleClass(dayElement, "endRange", self.selectedDates[1] &&
+                            compareDates(date, self.selectedDates[1], true) === 0);
+                        if (className === "nextMonthDay")
+                            dayElement.classList.add("inRange");
+                    }
+                }
+            }
+            else {
+                dayElement.classList.add("flatpickr-disabled");
+            }
+            if (self.config.mode === "range") {
+                if (isDateInRange(date) && !isDateSelected(date))
+                    dayElement.classList.add("inRange");
+            }
+            if (self.weekNumbers &&
+                self.config.showMonths === 1 &&
+                className !== "prevMonthDay" &&
+                dayNumber % 7 === 1) {
+                self.weekNumbers.insertAdjacentHTML("beforeend", "<span class='flatpickr-day'>" + self.config.getWeek(date) + "</span>");
+            }
+            triggerEvent("onDayCreate", dayElement);
+            return dayElement;
+        }
+        function focusOnDayElem(targetNode) {
+            targetNode.focus();
+            if (self.config.mode === "range")
+                onMouseOver(targetNode);
+        }
+        function getFirstAvailableDay(delta) {
+            var startMonth = delta > 0 ? 0 : self.config.showMonths - 1;
+            var endMonth = delta > 0 ? self.config.showMonths : -1;
+            for (var m = startMonth; m != endMonth; m += delta) {
+                var month = self.daysContainer.children[m];
+                var startIndex = delta > 0 ? 0 : month.children.length - 1;
+                var endIndex = delta > 0 ? month.children.length : -1;
+                for (var i = startIndex; i != endIndex; i += delta) {
+                    var c = month.children[i];
+                    if (c.className.indexOf("hidden") === -1 && isEnabled(c.dateObj))
+                        return c;
+                }
+            }
+            return undefined;
+        }
+        function getNextAvailableDay(current, delta) {
+            var givenMonth = current.className.indexOf("Month") === -1
+                ? current.dateObj.getMonth()
+                : self.currentMonth;
+            var endMonth = delta > 0 ? self.config.showMonths : -1;
+            var loopDelta = delta > 0 ? 1 : -1;
+            for (var m = givenMonth - self.currentMonth; m != endMonth; m += loopDelta) {
+                var month = self.daysContainer.children[m];
+                var startIndex = givenMonth - self.currentMonth === m
+                    ? current.$i + delta
+                    : delta < 0
+                        ? month.children.length - 1
+                        : 0;
+                var numMonthDays = month.children.length;
+                for (var i = startIndex; i >= 0 && i < numMonthDays && i != (delta > 0 ? numMonthDays : -1); i += loopDelta) {
+                    var c = month.children[i];
+                    if (c.className.indexOf("hidden") === -1 &&
+                        isEnabled(c.dateObj) &&
+                        Math.abs(current.$i - i) >= Math.abs(delta))
+                        return focusOnDayElem(c);
+                }
+            }
+            self.changeMonth(loopDelta);
+            focusOnDay(getFirstAvailableDay(loopDelta), 0);
+            return undefined;
+        }
+        function focusOnDay(current, offset) {
+            var dayFocused = isInView(document.activeElement || document.body);
+            var startElem = current !== undefined
+                ? current
+                : dayFocused
+                    ? document.activeElement
+                    : self.selectedDateElem !== undefined && isInView(self.selectedDateElem)
+                        ? self.selectedDateElem
+                        : self.todayDateElem !== undefined && isInView(self.todayDateElem)
+                            ? self.todayDateElem
+                            : getFirstAvailableDay(offset > 0 ? 1 : -1);
+            if (startElem === undefined) {
+                self._input.focus();
+            }
+            else if (!dayFocused) {
+                focusOnDayElem(startElem);
+            }
+            else {
+                getNextAvailableDay(startElem, offset);
+            }
+        }
+        function buildMonthDays(year, month) {
+            var firstOfMonth = (new Date(year, month, 1).getDay() - self.l10n.firstDayOfWeek + 7) % 7;
+            var prevMonthDays = self.utils.getDaysInMonth((month - 1 + 12) % 12, year);
+            var daysInMonth = self.utils.getDaysInMonth(month, year), days = window.document.createDocumentFragment(), isMultiMonth = self.config.showMonths > 1, prevMonthDayClass = isMultiMonth ? "prevMonthDay hidden" : "prevMonthDay", nextMonthDayClass = isMultiMonth ? "nextMonthDay hidden" : "nextMonthDay";
+            var dayNumber = prevMonthDays + 1 - firstOfMonth, dayIndex = 0;
+            // prepend days from the ending of previous month
+            for (; dayNumber <= prevMonthDays; dayNumber++, dayIndex++) {
+                days.appendChild(createDay(prevMonthDayClass, new Date(year, month - 1, dayNumber), dayNumber, dayIndex));
+            }
+            // Start at 1 since there is no 0th day
+            for (dayNumber = 1; dayNumber <= daysInMonth; dayNumber++, dayIndex++) {
+                days.appendChild(createDay("", new Date(year, month, dayNumber), dayNumber, dayIndex));
+            }
+            // append days from the next month
+            for (var dayNum = daysInMonth + 1; dayNum <= 42 - firstOfMonth &&
+                (self.config.showMonths === 1 || dayIndex % 7 !== 0); dayNum++, dayIndex++) {
+                days.appendChild(createDay(nextMonthDayClass, new Date(year, month + 1, dayNum % daysInMonth), dayNum, dayIndex));
+            }
+            //updateNavigationCurrentMonth();
+            var dayContainer = createElement("div", "dayContainer");
+            dayContainer.appendChild(days);
+            return dayContainer;
+        }
+        function buildDays() {
+            if (self.daysContainer === undefined) {
+                return;
+            }
+            clearNode(self.daysContainer);
+            // TODO: week numbers for each month
+            if (self.weekNumbers)
+                clearNode(self.weekNumbers);
+            var frag = document.createDocumentFragment();
+            for (var i = 0; i < self.config.showMonths; i++) {
+                var d = new Date(self.currentYear, self.currentMonth, 1);
+                d.setMonth(self.currentMonth + i);
+                frag.appendChild(buildMonthDays(d.getFullYear(), d.getMonth()));
+            }
+            self.daysContainer.appendChild(frag);
+            self.days = self.daysContainer.firstChild;
+            if (self.config.mode === "range" && self.selectedDates.length === 1) {
+                onMouseOver();
+            }
+        }
+        function buildMonthSwitch() {
+            if (self.config.showMonths > 1 ||
+                self.config.monthSelectorType !== "dropdown")
+                return;
+            var shouldBuildMonth = function (month) {
+                if (self.config.minDate !== undefined &&
+                    self.currentYear === self.config.minDate.getFullYear() &&
+                    month < self.config.minDate.getMonth()) {
+                    return false;
+                }
+                return !(self.config.maxDate !== undefined &&
+                    self.currentYear === self.config.maxDate.getFullYear() &&
+                    month > self.config.maxDate.getMonth());
+            };
+            self.monthsDropdownContainer.tabIndex = -1;
+            self.monthsDropdownContainer.innerHTML = "";
+            for (var i = 0; i < 12; i++) {
+                if (!shouldBuildMonth(i))
+                    continue;
+                var month = createElement("option", "flatpickr-monthDropdown-month");
+                month.value = new Date(self.currentYear, i).getMonth().toString();
+                month.textContent = monthToStr(i, self.config.shorthandCurrentMonth, self.l10n);
+                month.tabIndex = -1;
+                if (self.currentMonth === i) {
+                    month.selected = true;
+                }
+                self.monthsDropdownContainer.appendChild(month);
+            }
+        }
+        function buildMonth() {
+            var container = createElement("div", "flatpickr-month");
+            var monthNavFragment = window.document.createDocumentFragment();
+            var monthElement;
+            if (self.config.showMonths > 1 ||
+                self.config.monthSelectorType === "static") {
+                monthElement = createElement("span", "cur-month");
+            }
+            else {
+                self.monthsDropdownContainer = createElement("select", "flatpickr-monthDropdown-months");
+                self.monthsDropdownContainer.setAttribute("aria-label", self.l10n.monthAriaLabel);
+                bind(self.monthsDropdownContainer, "change", function (e) {
+                    var target = getEventTarget(e);
+                    var selectedMonth = parseInt(target.value, 10);
+                    self.changeMonth(selectedMonth - self.currentMonth);
+                    triggerEvent("onMonthChange");
+                });
+                buildMonthSwitch();
+                monthElement = self.monthsDropdownContainer;
+            }
+            var yearInput = createNumberInput("cur-year", { tabindex: "-1" });
+            var yearElement = yearInput.getElementsByTagName("input")[0];
+            yearElement.setAttribute("aria-label", self.l10n.yearAriaLabel);
+            if (self.config.minDate) {
+                yearElement.setAttribute("min", self.config.minDate.getFullYear().toString());
+            }
+            if (self.config.maxDate) {
+                yearElement.setAttribute("max", self.config.maxDate.getFullYear().toString());
+                yearElement.disabled =
+                    !!self.config.minDate &&
+                        self.config.minDate.getFullYear() === self.config.maxDate.getFullYear();
+            }
+            var currentMonth = createElement("div", "flatpickr-current-month");
+            currentMonth.appendChild(monthElement);
+            currentMonth.appendChild(yearInput);
+            monthNavFragment.appendChild(currentMonth);
+            container.appendChild(monthNavFragment);
+            return {
+                container: container,
+                yearElement: yearElement,
+                monthElement: monthElement,
+            };
+        }
+        function buildMonths() {
+            clearNode(self.monthNav);
+            self.monthNav.appendChild(self.prevMonthNav);
+            if (self.config.showMonths) {
+                self.yearElements = [];
+                self.monthElements = [];
+            }
+            for (var m = self.config.showMonths; m--;) {
+                var month = buildMonth();
+                self.yearElements.push(month.yearElement);
+                self.monthElements.push(month.monthElement);
+                self.monthNav.appendChild(month.container);
+            }
+            self.monthNav.appendChild(self.nextMonthNav);
+        }
+        function buildMonthNav() {
+            self.monthNav = createElement("div", "flatpickr-months");
+            self.yearElements = [];
+            self.monthElements = [];
+            self.prevMonthNav = createElement("span", "flatpickr-prev-month");
+            self.prevMonthNav.innerHTML = self.config.prevArrow;
+            self.nextMonthNav = createElement("span", "flatpickr-next-month");
+            self.nextMonthNav.innerHTML = self.config.nextArrow;
+            buildMonths();
+            Object.defineProperty(self, "_hidePrevMonthArrow", {
+                get: function () { return self.__hidePrevMonthArrow; },
+                set: function (bool) {
+                    if (self.__hidePrevMonthArrow !== bool) {
+                        toggleClass(self.prevMonthNav, "flatpickr-disabled", bool);
+                        self.__hidePrevMonthArrow = bool;
+                    }
+                },
+            });
+            Object.defineProperty(self, "_hideNextMonthArrow", {
+                get: function () { return self.__hideNextMonthArrow; },
+                set: function (bool) {
+                    if (self.__hideNextMonthArrow !== bool) {
+                        toggleClass(self.nextMonthNav, "flatpickr-disabled", bool);
+                        self.__hideNextMonthArrow = bool;
+                    }
+                },
+            });
+            self.currentYearElement = self.yearElements[0];
+            updateNavigationCurrentMonth();
+            return self.monthNav;
+        }
+        function buildTime() {
+            self.calendarContainer.classList.add("hasTime");
+            if (self.config.noCalendar)
+                self.calendarContainer.classList.add("noCalendar");
+            self.timeContainer = createElement("div", "flatpickr-time");
+            self.timeContainer.tabIndex = -1;
+            var separator = createElement("span", "flatpickr-time-separator", ":");
+            var hourInput = createNumberInput("flatpickr-hour", {
+                "aria-label": self.l10n.hourAriaLabel,
+            });
+            self.hourElement = hourInput.getElementsByTagName("input")[0];
+            var minuteInput = createNumberInput("flatpickr-minute", {
+                "aria-label": self.l10n.minuteAriaLabel,
+            });
+            self.minuteElement = minuteInput.getElementsByTagName("input")[0];
+            self.hourElement.tabIndex = self.minuteElement.tabIndex = -1;
+            self.hourElement.value = pad(self.latestSelectedDateObj
+                ? self.latestSelectedDateObj.getHours()
+                : self.config.time_24hr
+                    ? self.config.defaultHour
+                    : military2ampm(self.config.defaultHour));
+            self.minuteElement.value = pad(self.latestSelectedDateObj
+                ? self.latestSelectedDateObj.getMinutes()
+                : self.config.defaultMinute);
+            self.hourElement.setAttribute("step", self.config.hourIncrement.toString());
+            self.minuteElement.setAttribute("step", self.config.minuteIncrement.toString());
+            self.hourElement.setAttribute("min", self.config.time_24hr ? "0" : "1");
+            self.hourElement.setAttribute("max", self.config.time_24hr ? "23" : "12");
+            self.minuteElement.setAttribute("min", "0");
+            self.minuteElement.setAttribute("max", "59");
+            self.timeContainer.appendChild(hourInput);
+            self.timeContainer.appendChild(separator);
+            self.timeContainer.appendChild(minuteInput);
+            if (self.config.time_24hr)
+                self.timeContainer.classList.add("time24hr");
+            if (self.config.enableSeconds) {
+                self.timeContainer.classList.add("hasSeconds");
+                var secondInput = createNumberInput("flatpickr-second");
+                self.secondElement = secondInput.getElementsByTagName("input")[0];
+                self.secondElement.value = pad(self.latestSelectedDateObj
+                    ? self.latestSelectedDateObj.getSeconds()
+                    : self.config.defaultSeconds);
+                self.secondElement.setAttribute("step", self.minuteElement.getAttribute("step"));
+                self.secondElement.setAttribute("min", "0");
+                self.secondElement.setAttribute("max", "59");
+                self.timeContainer.appendChild(createElement("span", "flatpickr-time-separator", ":"));
+                self.timeContainer.appendChild(secondInput);
+            }
+            if (!self.config.time_24hr) {
+                // add self.amPM if appropriate
+                self.amPM = createElement("span", "flatpickr-am-pm", self.l10n.amPM[int((self.latestSelectedDateObj
+                    ? self.hourElement.value
+                    : self.config.defaultHour) > 11)]);
+                self.amPM.title = self.l10n.toggleTitle;
+                self.amPM.tabIndex = -1;
+                self.timeContainer.appendChild(self.amPM);
+            }
+            return self.timeContainer;
+        }
+        function buildWeekdays() {
+            if (!self.weekdayContainer)
+                self.weekdayContainer = createElement("div", "flatpickr-weekdays");
+            else
+                clearNode(self.weekdayContainer);
+            for (var i = self.config.showMonths; i--;) {
+                var container = createElement("div", "flatpickr-weekdaycontainer");
+                self.weekdayContainer.appendChild(container);
+            }
+            updateWeekdays();
+            return self.weekdayContainer;
+        }
+        function updateWeekdays() {
+            if (!self.weekdayContainer) {
+                return;
+            }
+            var firstDayOfWeek = self.l10n.firstDayOfWeek;
+            var weekdays = __spreadArrays(self.l10n.weekdays.shorthand);
+            if (firstDayOfWeek > 0 && firstDayOfWeek < weekdays.length) {
+                weekdays = __spreadArrays(weekdays.splice(firstDayOfWeek, weekdays.length), weekdays.splice(0, firstDayOfWeek));
+            }
+            for (var i = self.config.showMonths; i--;) {
+                self.weekdayContainer.children[i].innerHTML = "\n      <span class='flatpickr-weekday'>\n        " + weekdays.join("</span><span class='flatpickr-weekday'>") + "\n      </span>\n      ";
+            }
+        }
+        /* istanbul ignore next */
+        function buildWeeks() {
+            self.calendarContainer.classList.add("hasWeeks");
+            var weekWrapper = createElement("div", "flatpickr-weekwrapper");
+            weekWrapper.appendChild(createElement("span", "flatpickr-weekday", self.l10n.weekAbbreviation));
+            var weekNumbers = createElement("div", "flatpickr-weeks");
+            weekWrapper.appendChild(weekNumbers);
+            return {
+                weekWrapper: weekWrapper,
+                weekNumbers: weekNumbers,
+            };
+        }
+        function changeMonth(value, isOffset) {
+            if (isOffset === void 0) { isOffset = true; }
+            var delta = isOffset ? value : value - self.currentMonth;
+            if ((delta < 0 && self._hidePrevMonthArrow === true) ||
+                (delta > 0 && self._hideNextMonthArrow === true))
+                return;
+            self.currentMonth += delta;
+            if (self.currentMonth < 0 || self.currentMonth > 11) {
+                self.currentYear += self.currentMonth > 11 ? 1 : -1;
+                self.currentMonth = (self.currentMonth + 12) % 12;
+                triggerEvent("onYearChange");
+                buildMonthSwitch();
+            }
+            buildDays();
+            triggerEvent("onMonthChange");
+            updateNavigationCurrentMonth();
+        }
+        function clear(triggerChangeEvent, toInitial) {
+            if (triggerChangeEvent === void 0) { triggerChangeEvent = true; }
+            if (toInitial === void 0) { toInitial = true; }
+            self.input.value = "";
+            if (self.altInput !== undefined)
+                self.altInput.value = "";
+            if (self.mobileInput !== undefined)
+                self.mobileInput.value = "";
+            self.selectedDates = [];
+            self.latestSelectedDateObj = undefined;
+            if (toInitial === true) {
+                self.currentYear = self._initialDate.getFullYear();
+                self.currentMonth = self._initialDate.getMonth();
+            }
+            if (self.config.enableTime === true) {
+                var _a = getDefaultHours(), hours = _a.hours, minutes = _a.minutes, seconds = _a.seconds;
+                setHours(hours, minutes, seconds);
+            }
+            self.redraw();
+            if (triggerChangeEvent)
+                // triggerChangeEvent is true (default) or an Event
+                triggerEvent("onChange");
+        }
+        function close() {
+            self.isOpen = false;
+            if (!self.isMobile) {
+                if (self.calendarContainer !== undefined) {
+                    self.calendarContainer.classList.remove("open");
+                }
+                if (self._input !== undefined) {
+                    self._input.classList.remove("active");
+                }
+            }
+            triggerEvent("onClose");
+        }
+        function destroy() {
+            if (self.config !== undefined)
+                triggerEvent("onDestroy");
+            for (var i = self._handlers.length; i--;) {
+                var h = self._handlers[i];
+                h.element.removeEventListener(h.event, h.handler, h.options);
+            }
+            self._handlers = [];
+            if (self.mobileInput) {
+                if (self.mobileInput.parentNode)
+                    self.mobileInput.parentNode.removeChild(self.mobileInput);
+                self.mobileInput = undefined;
+            }
+            else if (self.calendarContainer && self.calendarContainer.parentNode) {
+                if (self.config.static && self.calendarContainer.parentNode) {
+                    var wrapper = self.calendarContainer.parentNode;
+                    wrapper.lastChild && wrapper.removeChild(wrapper.lastChild);
+                    if (wrapper.parentNode) {
+                        while (wrapper.firstChild)
+                            wrapper.parentNode.insertBefore(wrapper.firstChild, wrapper);
+                        wrapper.parentNode.removeChild(wrapper);
+                    }
+                }
+                else
+                    self.calendarContainer.parentNode.removeChild(self.calendarContainer);
+            }
+            if (self.altInput) {
+                self.input.type = "text";
+                if (self.altInput.parentNode)
+                    self.altInput.parentNode.removeChild(self.altInput);
+                delete self.altInput;
+            }
+            if (self.input) {
+                self.input.type = self.input._type;
+                self.input.classList.remove("flatpickr-input");
+                self.input.removeAttribute("readonly");
+            }
+            [
+                "_showTimeInput",
+                "latestSelectedDateObj",
+                "_hideNextMonthArrow",
+                "_hidePrevMonthArrow",
+                "__hideNextMonthArrow",
+                "__hidePrevMonthArrow",
+                "isMobile",
+                "isOpen",
+                "selectedDateElem",
+                "minDateHasTime",
+                "maxDateHasTime",
+                "days",
+                "daysContainer",
+                "_input",
+                "_positionElement",
+                "innerContainer",
+                "rContainer",
+                "monthNav",
+                "todayDateElem",
+                "calendarContainer",
+                "weekdayContainer",
+                "prevMonthNav",
+                "nextMonthNav",
+                "monthsDropdownContainer",
+                "currentMonthElement",
+                "currentYearElement",
+                "navigationCurrentMonth",
+                "selectedDateElem",
+                "config",
+            ].forEach(function (k) {
+                try {
+                    delete self[k];
+                }
+                catch (_) { }
+            });
+        }
+        function isCalendarElem(elem) {
+            if (self.config.appendTo && self.config.appendTo.contains(elem))
+                return true;
+            return self.calendarContainer.contains(elem);
+        }
+        function documentClick(e) {
+            if (self.isOpen && !self.config.inline) {
+                var eventTarget_1 = getEventTarget(e);
+                var isCalendarElement = isCalendarElem(eventTarget_1);
+                var isInput = eventTarget_1 === self.input ||
+                    eventTarget_1 === self.altInput ||
+                    self.element.contains(eventTarget_1) ||
+                    // web components
+                    // e.path is not present in all browsers. circumventing typechecks
+                    (e.path &&
+                        e.path.indexOf &&
+                        (~e.path.indexOf(self.input) ||
+                            ~e.path.indexOf(self.altInput)));
+                var lostFocus = e.type === "blur"
+                    ? isInput &&
+                        e.relatedTarget &&
+                        !isCalendarElem(e.relatedTarget)
+                    : !isInput &&
+                        !isCalendarElement &&
+                        !isCalendarElem(e.relatedTarget);
+                var isIgnored = !self.config.ignoredFocusElements.some(function (elem) {
+                    return elem.contains(eventTarget_1);
+                });
+                if (lostFocus && isIgnored) {
+                    if (self.timeContainer !== undefined &&
+                        self.minuteElement !== undefined &&
+                        self.hourElement !== undefined &&
+                        self.input.value !== "" &&
+                        self.input.value !== undefined) {
+                        updateTime();
+                    }
+                    self.close();
+                    if (self.config &&
+                        self.config.mode === "range" &&
+                        self.selectedDates.length === 1) {
+                        self.clear(false);
+                        self.redraw();
+                    }
+                }
+            }
+        }
+        function changeYear(newYear) {
+            if (!newYear ||
+                (self.config.minDate && newYear < self.config.minDate.getFullYear()) ||
+                (self.config.maxDate && newYear > self.config.maxDate.getFullYear()))
+                return;
+            var newYearNum = newYear, isNewYear = self.currentYear !== newYearNum;
+            self.currentYear = newYearNum || self.currentYear;
+            if (self.config.maxDate &&
+                self.currentYear === self.config.maxDate.getFullYear()) {
+                self.currentMonth = Math.min(self.config.maxDate.getMonth(), self.currentMonth);
+            }
+            else if (self.config.minDate &&
+                self.currentYear === self.config.minDate.getFullYear()) {
+                self.currentMonth = Math.max(self.config.minDate.getMonth(), self.currentMonth);
+            }
+            if (isNewYear) {
+                self.redraw();
+                triggerEvent("onYearChange");
+                buildMonthSwitch();
+            }
+        }
+        function isEnabled(date, timeless) {
+            if (timeless === void 0) { timeless = true; }
+            var dateToCheck = self.parseDate(date, undefined, timeless); // timeless
+            if ((self.config.minDate &&
+                dateToCheck &&
+                compareDates(dateToCheck, self.config.minDate, timeless !== undefined ? timeless : !self.minDateHasTime) < 0) ||
+                (self.config.maxDate &&
+                    dateToCheck &&
+                    compareDates(dateToCheck, self.config.maxDate, timeless !== undefined ? timeless : !self.maxDateHasTime) > 0))
+                return false;
+            if (self.config.enable.length === 0 && self.config.disable.length === 0)
+                return true;
+            if (dateToCheck === undefined)
+                return false;
+            var bool = self.config.enable.length > 0, array = bool ? self.config.enable : self.config.disable;
+            for (var i = 0, d = void 0; i < array.length; i++) {
+                d = array[i];
+                if (typeof d === "function" &&
+                    d(dateToCheck) // disabled by function
+                )
+                    return bool;
+                else if (d instanceof Date &&
+                    dateToCheck !== undefined &&
+                    d.getTime() === dateToCheck.getTime())
+                    // disabled by date
+                    return bool;
+                else if (typeof d === "string" && dateToCheck !== undefined) {
+                    // disabled by date string
+                    var parsed = self.parseDate(d, undefined, true);
+                    return parsed && parsed.getTime() === dateToCheck.getTime()
+                        ? bool
+                        : !bool;
+                }
+                else if (
+                // disabled by range
+                typeof d === "object" &&
+                    dateToCheck !== undefined &&
+                    d.from &&
+                    d.to &&
+                    dateToCheck.getTime() >= d.from.getTime() &&
+                    dateToCheck.getTime() <= d.to.getTime())
+                    return bool;
+            }
+            return !bool;
+        }
+        function isInView(elem) {
+            if (self.daysContainer !== undefined)
+                return (elem.className.indexOf("hidden") === -1 &&
+                    elem.className.indexOf("flatpickr-disabled") === -1 &&
+                    self.daysContainer.contains(elem));
+            return false;
+        }
+        function onBlur(e) {
+            var isInput = e.target === self._input;
+            if (isInput &&
+                !(e.relatedTarget && isCalendarElem(e.relatedTarget))) {
+                self.setDate(self._input.value, true, e.target === self.altInput
+                    ? self.config.altFormat
+                    : self.config.dateFormat);
+            }
+        }
+        function onKeyDown(e) {
+            // e.key                      e.keyCode
+            // "Backspace"                        8
+            // "Tab"                              9
+            // "Enter"                           13
+            // "Escape"     (IE "Esc")           27
+            // "ArrowLeft"  (IE "Left")          37
+            // "ArrowUp"    (IE "Up")            38
+            // "ArrowRight" (IE "Right")         39
+            // "ArrowDown"  (IE "Down")          40
+            // "Delete"     (IE "Del")           46
+            var eventTarget = getEventTarget(e);
+            var isInput = self.config.wrap
+                ? element.contains(eventTarget)
+                : eventTarget === self._input;
+            var allowInput = self.config.allowInput;
+            var allowKeydown = self.isOpen && (!allowInput || !isInput);
+            var allowInlineKeydown = self.config.inline && isInput && !allowInput;
+            if (e.keyCode === 13 && isInput) {
+                if (allowInput) {
+                    self.setDate(self._input.value, true, eventTarget === self.altInput
+                        ? self.config.altFormat
+                        : self.config.dateFormat);
+                    return eventTarget.blur();
+                }
+                else {
+                    self.open();
+                }
+            }
+            else if (isCalendarElem(eventTarget) ||
+                allowKeydown ||
+                allowInlineKeydown) {
+                var isTimeObj = !!self.timeContainer &&
+                    self.timeContainer.contains(eventTarget);
+                switch (e.keyCode) {
+                    case 13:
+                        if (isTimeObj) {
+                            e.preventDefault();
+                            updateTime();
+                            focusAndClose();
+                        }
+                        else
+                            selectDate(e);
+                        break;
+                    case 27: // escape
+                        e.preventDefault();
+                        focusAndClose();
+                        break;
+                    case 8:
+                    case 46:
+                        if (isInput && !self.config.allowInput) {
+                            e.preventDefault();
+                            self.clear();
+                        }
+                        break;
+                    case 37:
+                    case 39:
+                        if (!isTimeObj && !isInput) {
+                            e.preventDefault();
+                            if (self.daysContainer !== undefined &&
+                                (allowInput === false ||
+                                    (document.activeElement && isInView(document.activeElement)))) {
+                                var delta_1 = e.keyCode === 39 ? 1 : -1;
+                                if (!e.ctrlKey)
+                                    focusOnDay(undefined, delta_1);
+                                else {
+                                    e.stopPropagation();
+                                    changeMonth(delta_1);
+                                    focusOnDay(getFirstAvailableDay(1), 0);
+                                }
+                            }
+                        }
+                        else if (self.hourElement)
+                            self.hourElement.focus();
+                        break;
+                    case 38:
+                    case 40:
+                        e.preventDefault();
+                        var delta = e.keyCode === 40 ? 1 : -1;
+                        if ((self.daysContainer &&
+                            eventTarget.$i !== undefined) ||
+                            eventTarget === self.input ||
+                            eventTarget === self.altInput) {
+                            if (e.ctrlKey) {
+                                e.stopPropagation();
+                                changeYear(self.currentYear - delta);
+                                focusOnDay(getFirstAvailableDay(1), 0);
+                            }
+                            else if (!isTimeObj)
+                                focusOnDay(undefined, delta * 7);
+                        }
+                        else if (eventTarget === self.currentYearElement) {
+                            changeYear(self.currentYear - delta);
+                        }
+                        else if (self.config.enableTime) {
+                            if (!isTimeObj && self.hourElement)
+                                self.hourElement.focus();
+                            updateTime(e);
+                            self._debouncedChange();
+                        }
+                        break;
+                    case 9:
+                        if (isTimeObj) {
+                            var elems = [
+                                self.hourElement,
+                                self.minuteElement,
+                                self.secondElement,
+                                self.amPM,
+                            ]
+                                .concat(self.pluginElements)
+                                .filter(function (x) { return x; });
+                            var i = elems.indexOf(eventTarget);
+                            if (i !== -1) {
+                                var target = elems[i + (e.shiftKey ? -1 : 1)];
+                                e.preventDefault();
+                                (target || self._input).focus();
+                            }
+                        }
+                        else if (!self.config.noCalendar &&
+                            self.daysContainer &&
+                            self.daysContainer.contains(eventTarget) &&
+                            e.shiftKey) {
+                            e.preventDefault();
+                            self._input.focus();
+                        }
+                        break;
+                }
+            }
+            if (self.amPM !== undefined && eventTarget === self.amPM) {
+                switch (e.key) {
+                    case self.l10n.amPM[0].charAt(0):
+                    case self.l10n.amPM[0].charAt(0).toLowerCase():
+                        self.amPM.textContent = self.l10n.amPM[0];
+                        setHoursFromInputs();
+                        updateValue();
+                        break;
+                    case self.l10n.amPM[1].charAt(0):
+                    case self.l10n.amPM[1].charAt(0).toLowerCase():
+                        self.amPM.textContent = self.l10n.amPM[1];
+                        setHoursFromInputs();
+                        updateValue();
+                        break;
+                }
+            }
+            if (isInput || isCalendarElem(eventTarget)) {
+                triggerEvent("onKeyDown", e);
+            }
+        }
+        function onMouseOver(elem) {
+            if (self.selectedDates.length !== 1 ||
+                (elem &&
+                    (!elem.classList.contains("flatpickr-day") ||
+                        elem.classList.contains("flatpickr-disabled"))))
+                return;
+            var hoverDate = elem
+                ? elem.dateObj.getTime()
+                : self.days.firstElementChild.dateObj.getTime(), initialDate = self.parseDate(self.selectedDates[0], undefined, true).getTime(), rangeStartDate = Math.min(hoverDate, self.selectedDates[0].getTime()), rangeEndDate = Math.max(hoverDate, self.selectedDates[0].getTime());
+            var containsDisabled = false;
+            var minRange = 0, maxRange = 0;
+            for (var t = rangeStartDate; t < rangeEndDate; t += duration.DAY) {
+                if (!isEnabled(new Date(t), true)) {
+                    containsDisabled =
+                        containsDisabled || (t > rangeStartDate && t < rangeEndDate);
+                    if (t < initialDate && (!minRange || t > minRange))
+                        minRange = t;
+                    else if (t > initialDate && (!maxRange || t < maxRange))
+                        maxRange = t;
+                }
+            }
+            for (var m = 0; m < self.config.showMonths; m++) {
+                var month = self.daysContainer.children[m];
+                var _loop_1 = function (i, l) {
+                    var dayElem = month.children[i], date = dayElem.dateObj;
+                    var timestamp = date.getTime();
+                    var outOfRange = (minRange > 0 && timestamp < minRange) ||
+                        (maxRange > 0 && timestamp > maxRange);
+                    if (outOfRange) {
+                        dayElem.classList.add("notAllowed");
+                        ["inRange", "startRange", "endRange"].forEach(function (c) {
+                            dayElem.classList.remove(c);
+                        });
+                        return "continue";
+                    }
+                    else if (containsDisabled && !outOfRange)
+                        return "continue";
+                    ["startRange", "inRange", "endRange", "notAllowed"].forEach(function (c) {
+                        dayElem.classList.remove(c);
+                    });
+                    if (elem !== undefined) {
+                        elem.classList.add(hoverDate <= self.selectedDates[0].getTime()
+                            ? "startRange"
+                            : "endRange");
+                        if (initialDate < hoverDate && timestamp === initialDate)
+                            dayElem.classList.add("startRange");
+                        else if (initialDate > hoverDate && timestamp === initialDate)
+                            dayElem.classList.add("endRange");
+                        if (timestamp >= minRange &&
+                            (maxRange === 0 || timestamp <= maxRange) &&
+                            isBetween(timestamp, initialDate, hoverDate))
+                            dayElem.classList.add("inRange");
+                    }
+                };
+                for (var i = 0, l = month.children.length; i < l; i++) {
+                    _loop_1(i, l);
+                }
+            }
+        }
+        function onResize() {
+            if (self.isOpen && !self.config.static && !self.config.inline)
+                positionCalendar();
+        }
+        function open(e, positionElement) {
+            if (positionElement === void 0) { positionElement = self._positionElement; }
+            if (self.isMobile === true) {
+                if (e) {
+                    e.preventDefault();
+                    var eventTarget = getEventTarget(e);
+                    eventTarget && eventTarget.blur();
+                }
+                if (self.mobileInput !== undefined) {
+                    self.mobileInput.focus();
+                    self.mobileInput.click();
+                }
+                triggerEvent("onOpen");
+                return;
+            }
+            if (self._input.disabled || self.config.inline)
+                return;
+            var wasOpen = self.isOpen;
+            self.isOpen = true;
+            if (!wasOpen) {
+                self.calendarContainer.classList.add("open");
+                self._input.classList.add("active");
+                triggerEvent("onOpen");
+                positionCalendar(positionElement);
+            }
+            if (self.config.enableTime === true && self.config.noCalendar === true) {
+                if (self.config.allowInput === false &&
+                    (e === undefined ||
+                        !self.timeContainer.contains(e.relatedTarget))) {
+                    setTimeout(function () { return self.hourElement.select(); }, 50);
+                }
+            }
+        }
+        function minMaxDateSetter(type) {
+            return function (date) {
+                var dateObj = (self.config["_" + type + "Date"] = self.parseDate(date, self.config.dateFormat));
+                var inverseDateObj = self.config["_" + (type === "min" ? "max" : "min") + "Date"];
+                if (dateObj !== undefined) {
+                    self[type === "min" ? "minDateHasTime" : "maxDateHasTime"] =
+                        dateObj.getHours() > 0 ||
+                            dateObj.getMinutes() > 0 ||
+                            dateObj.getSeconds() > 0;
+                }
+                if (self.selectedDates) {
+                    self.selectedDates = self.selectedDates.filter(function (d) { return isEnabled(d); });
+                    if (!self.selectedDates.length && type === "min")
+                        setHoursFromDate(dateObj);
+                    updateValue();
+                }
+                if (self.daysContainer) {
+                    redraw();
+                    if (dateObj !== undefined)
+                        self.currentYearElement[type] = dateObj.getFullYear().toString();
+                    else
+                        self.currentYearElement.removeAttribute(type);
+                    self.currentYearElement.disabled =
+                        !!inverseDateObj &&
+                            dateObj !== undefined &&
+                            inverseDateObj.getFullYear() === dateObj.getFullYear();
+                }
+            };
+        }
+        function parseConfig() {
+            var boolOpts = [
+                "wrap",
+                "weekNumbers",
+                "allowInput",
+                "allowInvalidPreload",
+                "clickOpens",
+                "time_24hr",
+                "enableTime",
+                "noCalendar",
+                "altInput",
+                "shorthandCurrentMonth",
+                "inline",
+                "static",
+                "enableSeconds",
+                "disableMobile",
+            ];
+            var userConfig = __assign(__assign({}, JSON.parse(JSON.stringify(element.dataset || {}))), instanceConfig);
+            var formats = {};
+            self.config.parseDate = userConfig.parseDate;
+            self.config.formatDate = userConfig.formatDate;
+            Object.defineProperty(self.config, "enable", {
+                get: function () { return self.config._enable; },
+                set: function (dates) {
+                    self.config._enable = parseDateRules(dates);
+                },
+            });
+            Object.defineProperty(self.config, "disable", {
+                get: function () { return self.config._disable; },
+                set: function (dates) {
+                    self.config._disable = parseDateRules(dates);
+                },
+            });
+            var timeMode = userConfig.mode === "time";
+            if (!userConfig.dateFormat && (userConfig.enableTime || timeMode)) {
+                var defaultDateFormat = flatpickr.defaultConfig.dateFormat || defaults.dateFormat;
+                formats.dateFormat =
+                    userConfig.noCalendar || timeMode
+                        ? "H:i" + (userConfig.enableSeconds ? ":S" : "")
+                        : defaultDateFormat + " H:i" + (userConfig.enableSeconds ? ":S" : "");
+            }
+            if (userConfig.altInput &&
+                (userConfig.enableTime || timeMode) &&
+                !userConfig.altFormat) {
+                var defaultAltFormat = flatpickr.defaultConfig.altFormat || defaults.altFormat;
+                formats.altFormat =
+                    userConfig.noCalendar || timeMode
+                        ? "h:i" + (userConfig.enableSeconds ? ":S K" : " K")
+                        : defaultAltFormat + (" h:i" + (userConfig.enableSeconds ? ":S" : "") + " K");
+            }
+            Object.defineProperty(self.config, "minDate", {
+                get: function () { return self.config._minDate; },
+                set: minMaxDateSetter("min"),
+            });
+            Object.defineProperty(self.config, "maxDate", {
+                get: function () { return self.config._maxDate; },
+                set: minMaxDateSetter("max"),
+            });
+            var minMaxTimeSetter = function (type) { return function (val) {
+                self.config[type === "min" ? "_minTime" : "_maxTime"] = self.parseDate(val, "H:i:S");
+            }; };
+            Object.defineProperty(self.config, "minTime", {
+                get: function () { return self.config._minTime; },
+                set: minMaxTimeSetter("min"),
+            });
+            Object.defineProperty(self.config, "maxTime", {
+                get: function () { return self.config._maxTime; },
+                set: minMaxTimeSetter("max"),
+            });
+            if (userConfig.mode === "time") {
+                self.config.noCalendar = true;
+                self.config.enableTime = true;
+            }
+            Object.assign(self.config, formats, userConfig);
+            for (var i = 0; i < boolOpts.length; i++)
+                // https://github.com/microsoft/TypeScript/issues/31663
+                self.config[boolOpts[i]] =
+                    self.config[boolOpts[i]] === true ||
+                        self.config[boolOpts[i]] === "true";
+            HOOKS.filter(function (hook) { return self.config[hook] !== undefined; }).forEach(function (hook) {
+                self.config[hook] = arrayify(self.config[hook] || []).map(bindToInstance);
+            });
+            self.isMobile =
+                !self.config.disableMobile &&
+                    !self.config.inline &&
+                    self.config.mode === "single" &&
+                    !self.config.disable.length &&
+                    !self.config.enable.length &&
+                    !self.config.weekNumbers &&
+                    /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);
+            for (var i = 0; i < self.config.plugins.length; i++) {
+                var pluginConf = self.config.plugins[i](self) || {};
+                for (var key in pluginConf) {
+                    if (HOOKS.indexOf(key) > -1) {
+                        self.config[key] = arrayify(pluginConf[key])
+                            .map(bindToInstance)
+                            .concat(self.config[key]);
+                    }
+                    else if (typeof userConfig[key] === "undefined")
+                        self.config[key] = pluginConf[key];
+                }
+            }
+            if (!userConfig.altInputClass) {
+                self.config.altInputClass =
+                    getInputElem().className + " " + self.config.altInputClass;
+            }
+            triggerEvent("onParseConfig");
+        }
+        function getInputElem() {
+            return self.config.wrap
+                ? element.querySelector("[data-input]")
+                : element;
+        }
+        function setupLocale() {
+            if (typeof self.config.locale !== "object" &&
+                typeof flatpickr.l10ns[self.config.locale] === "undefined")
+                self.config.errorHandler(new Error("flatpickr: invalid locale " + self.config.locale));
+            self.l10n = __assign(__assign({}, flatpickr.l10ns.default), (typeof self.config.locale === "object"
+                ? self.config.locale
+                : self.config.locale !== "default"
+                    ? flatpickr.l10ns[self.config.locale]
+                    : undefined));
+            tokenRegex.K = "(" + self.l10n.amPM[0] + "|" + self.l10n.amPM[1] + "|" + self.l10n.amPM[0].toLowerCase() + "|" + self.l10n.amPM[1].toLowerCase() + ")";
+            var userConfig = __assign(__assign({}, instanceConfig), JSON.parse(JSON.stringify(element.dataset || {})));
+            if (userConfig.time_24hr === undefined &&
+                flatpickr.defaultConfig.time_24hr === undefined) {
+                self.config.time_24hr = self.l10n.time_24hr;
+            }
+            self.formatDate = createDateFormatter(self);
+            self.parseDate = createDateParser({ config: self.config, l10n: self.l10n });
+        }
+        function positionCalendar(customPositionElement) {
+            if (self.calendarContainer === undefined)
+                return;
+            triggerEvent("onPreCalendarPosition");
+            var positionElement = customPositionElement || self._positionElement;
+            var calendarHeight = Array.prototype.reduce.call(self.calendarContainer.children, (function (acc, child) { return acc + child.offsetHeight; }), 0), calendarWidth = self.calendarContainer.offsetWidth, configPos = self.config.position.split(" "), configPosVertical = configPos[0], configPosHorizontal = configPos.length > 1 ? configPos[1] : null, inputBounds = positionElement.getBoundingClientRect(), distanceFromBottom = window.innerHeight - inputBounds.bottom, showOnTop = configPosVertical === "above" ||
+                (configPosVertical !== "below" &&
+                    distanceFromBottom < calendarHeight &&
+                    inputBounds.top > calendarHeight);
+            var top = window.pageYOffset +
+                inputBounds.top +
+                (!showOnTop ? positionElement.offsetHeight + 2 : -calendarHeight - 2);
+            toggleClass(self.calendarContainer, "arrowTop", !showOnTop);
+            toggleClass(self.calendarContainer, "arrowBottom", showOnTop);
+            if (self.config.inline)
+                return;
+            var left = window.pageXOffset + inputBounds.left;
+            var isCenter = false;
+            var isRight = false;
+            if (configPosHorizontal === "center") {
+                left -= (calendarWidth - inputBounds.width) / 2;
+                isCenter = true;
+            }
+            else if (configPosHorizontal === "right") {
+                left -= calendarWidth - inputBounds.width;
+                isRight = true;
+            }
+            toggleClass(self.calendarContainer, "arrowLeft", !isCenter && !isRight);
+            toggleClass(self.calendarContainer, "arrowCenter", isCenter);
+            toggleClass(self.calendarContainer, "arrowRight", isRight);
+            var right = window.document.body.offsetWidth -
+                (window.pageXOffset + inputBounds.right);
+            var rightMost = left + calendarWidth > window.document.body.offsetWidth;
+            var centerMost = right + calendarWidth > window.document.body.offsetWidth;
+            toggleClass(self.calendarContainer, "rightMost", rightMost);
+            if (self.config.static)
+                return;
+            self.calendarContainer.style.top = top + "px";
+            if (!rightMost) {
+                self.calendarContainer.style.left = left + "px";
+                self.calendarContainer.style.right = "auto";
+            }
+            else if (!centerMost) {
+                self.calendarContainer.style.left = "auto";
+                self.calendarContainer.style.right = right + "px";
+            }
+            else {
+                var doc = getDocumentStyleSheet();
+                // some testing environments don't have css support
+                if (doc === undefined)
+                    return;
+                var bodyWidth = window.document.body.offsetWidth;
+                var centerLeft = Math.max(0, bodyWidth / 2 - calendarWidth / 2);
+                var centerBefore = ".flatpickr-calendar.centerMost:before";
+                var centerAfter = ".flatpickr-calendar.centerMost:after";
+                var centerIndex = doc.cssRules.length;
+                var centerStyle = "{left:" + inputBounds.left + "px;right:auto;}";
+                toggleClass(self.calendarContainer, "rightMost", false);
+                toggleClass(self.calendarContainer, "centerMost", true);
+                doc.insertRule(centerBefore + "," + centerAfter + centerStyle, centerIndex);
+                self.calendarContainer.style.left = centerLeft + "px";
+                self.calendarContainer.style.right = "auto";
+            }
+        }
+        function getDocumentStyleSheet() {
+            var editableSheet = null;
+            for (var i = 0; i < document.styleSheets.length; i++) {
+                var sheet = document.styleSheets[i];
+                try {
+                    sheet.cssRules;
+                }
+                catch (err) {
+                    continue;
+                }
+                editableSheet = sheet;
+                break;
+            }
+            return editableSheet != null ? editableSheet : createStyleSheet();
+        }
+        function createStyleSheet() {
+            var style = document.createElement("style");
+            document.head.appendChild(style);
+            return style.sheet;
+        }
+        function redraw() {
+            if (self.config.noCalendar || self.isMobile)
+                return;
+            buildMonthSwitch();
+            updateNavigationCurrentMonth();
+            buildDays();
+        }
+        function focusAndClose() {
+            self._input.focus();
+            if (window.navigator.userAgent.indexOf("MSIE") !== -1 ||
+                navigator.msMaxTouchPoints !== undefined) {
+                // hack - bugs in the way IE handles focus keeps the calendar open
+                setTimeout(self.close, 0);
+            }
+            else {
+                self.close();
+            }
+        }
+        function selectDate(e) {
+            e.preventDefault();
+            e.stopPropagation();
+            var isSelectable = function (day) {
+                return day.classList &&
+                    day.classList.contains("flatpickr-day") &&
+                    !day.classList.contains("flatpickr-disabled") &&
+                    !day.classList.contains("notAllowed");
+            };
+            var t = findParent(getEventTarget(e), isSelectable);
+            if (t === undefined)
+                return;
+            var target = t;
+            var selectedDate = (self.latestSelectedDateObj = new Date(target.dateObj.getTime()));
+            var shouldChangeMonth = (selectedDate.getMonth() < self.currentMonth ||
+                selectedDate.getMonth() >
+                    self.currentMonth + self.config.showMonths - 1) &&
+                self.config.mode !== "range";
+            self.selectedDateElem = target;
+            if (self.config.mode === "single")
+                self.selectedDates = [selectedDate];
+            else if (self.config.mode === "multiple") {
+                var selectedIndex = isDateSelected(selectedDate);
+                if (selectedIndex)
+                    self.selectedDates.splice(parseInt(selectedIndex), 1);
+                else
+                    self.selectedDates.push(selectedDate);
+            }
+            else if (self.config.mode === "range") {
+                if (self.selectedDates.length === 2) {
+                    self.clear(false, false);
+                }
+                self.latestSelectedDateObj = selectedDate;
+                self.selectedDates.push(selectedDate);
+                // unless selecting same date twice, sort ascendingly
+                if (compareDates(selectedDate, self.selectedDates[0], true) !== 0)
+                    self.selectedDates.sort(function (a, b) { return a.getTime() - b.getTime(); });
+            }
+            setHoursFromInputs();
+            if (shouldChangeMonth) {
+                var isNewYear = self.currentYear !== selectedDate.getFullYear();
+                self.currentYear = selectedDate.getFullYear();
+                self.currentMonth = selectedDate.getMonth();
+                if (isNewYear) {
+                    triggerEvent("onYearChange");
+                    buildMonthSwitch();
+                }
+                triggerEvent("onMonthChange");
+            }
+            updateNavigationCurrentMonth();
+            buildDays();
+            updateValue();
+            // maintain focus
+            if (!shouldChangeMonth &&
+                self.config.mode !== "range" &&
+                self.config.showMonths === 1)
+                focusOnDayElem(target);
+            else if (self.selectedDateElem !== undefined &&
+                self.hourElement === undefined) {
+                self.selectedDateElem && self.selectedDateElem.focus();
+            }
+            if (self.hourElement !== undefined)
+                self.hourElement !== undefined && self.hourElement.focus();
+            if (self.config.closeOnSelect) {
+                var single = self.config.mode === "single" && !self.config.enableTime;
+                var range = self.config.mode === "range" &&
+                    self.selectedDates.length === 2 &&
+                    !self.config.enableTime;
+                if (single || range) {
+                    focusAndClose();
+                }
+            }
+            triggerChange();
+        }
+        var CALLBACKS = {
+            locale: [setupLocale, updateWeekdays],
+            showMonths: [buildMonths, setCalendarWidth, buildWeekdays],
+            minDate: [jumpToDate],
+            maxDate: [jumpToDate],
+        };
+        function set(option, value) {
+            if (option !== null && typeof option === "object") {
+                Object.assign(self.config, option);
+                for (var key in option) {
+                    if (CALLBACKS[key] !== undefined)
+                        CALLBACKS[key].forEach(function (x) { return x(); });
+                }
+            }
+            else {
+                self.config[option] = value;
+                if (CALLBACKS[option] !== undefined)
+                    CALLBACKS[option].forEach(function (x) { return x(); });
+                else if (HOOKS.indexOf(option) > -1)
+                    self.config[option] = arrayify(value);
+            }
+            self.redraw();
+            updateValue(true);
+        }
+        function setSelectedDate(inputDate, format) {
+            var dates = [];
+            if (inputDate instanceof Array)
+                dates = inputDate.map(function (d) { return self.parseDate(d, format); });
+            else if (inputDate instanceof Date || typeof inputDate === "number")
+                dates = [self.parseDate(inputDate, format)];
+            else if (typeof inputDate === "string") {
+                switch (self.config.mode) {
+                    case "single":
+                    case "time":
+                        dates = [self.parseDate(inputDate, format)];
+                        break;
+                    case "multiple":
+                        dates = inputDate
+                            .split(self.config.conjunction)
+                            .map(function (date) { return self.parseDate(date, format); });
+                        break;
+                    case "range":
+                        dates = inputDate
+                            .split(self.l10n.rangeSeparator)
+                            .map(function (date) { return self.parseDate(date, format); });
+                        break;
+                }
+            }
+            else
+                self.config.errorHandler(new Error("Invalid date supplied: " + JSON.stringify(inputDate)));
+            self.selectedDates = (self.config.allowInvalidPreload
+                ? dates
+                : dates.filter(function (d) { return d instanceof Date && isEnabled(d, false); }));
+            if (self.config.mode === "range")
+                self.selectedDates.sort(function (a, b) { return a.getTime() - b.getTime(); });
+        }
+        function setDate(date, triggerChange, format) {
+            if (triggerChange === void 0) { triggerChange = false; }
+            if (format === void 0) { format = self.config.dateFormat; }
+            if ((date !== 0 && !date) || (date instanceof Array && date.length === 0))
+                return self.clear(triggerChange);
+            setSelectedDate(date, format);
+            self.latestSelectedDateObj =
+                self.selectedDates[self.selectedDates.length - 1];
+            self.redraw();
+            jumpToDate(undefined, triggerChange);
+            setHoursFromDate();
+            if (self.selectedDates.length === 0) {
+                self.clear(false);
+            }
+            updateValue(triggerChange);
+            if (triggerChange)
+                triggerEvent("onChange");
+        }
+        function parseDateRules(arr) {
+            return arr
+                .slice()
+                .map(function (rule) {
+                if (typeof rule === "string" ||
+                    typeof rule === "number" ||
+                    rule instanceof Date) {
+                    return self.parseDate(rule, undefined, true);
+                }
+                else if (rule &&
+                    typeof rule === "object" &&
+                    rule.from &&
+                    rule.to)
+                    return {
+                        from: self.parseDate(rule.from, undefined),
+                        to: self.parseDate(rule.to, undefined),
+                    };
+                return rule;
+            })
+                .filter(function (x) { return x; }); // remove falsy values
+        }
+        function setupDates() {
+            self.selectedDates = [];
+            self.now = self.parseDate(self.config.now) || new Date();
+            // Workaround IE11 setting placeholder as the input's value
+            var preloadedDate = self.config.defaultDate ||
+                ((self.input.nodeName === "INPUT" ||
+                    self.input.nodeName === "TEXTAREA") &&
+                    self.input.placeholder &&
+                    self.input.value === self.input.placeholder
+                    ? null
+                    : self.input.value);
+            if (preloadedDate)
+                setSelectedDate(preloadedDate, self.config.dateFormat);
+            self._initialDate =
+                self.selectedDates.length > 0
+                    ? self.selectedDates[0]
+                    : self.config.minDate &&
+                        self.config.minDate.getTime() > self.now.getTime()
+                        ? self.config.minDate
+                        : self.config.maxDate &&
+                            self.config.maxDate.getTime() < self.now.getTime()
+                            ? self.config.maxDate
+                            : self.now;
+            self.currentYear = self._initialDate.getFullYear();
+            self.currentMonth = self._initialDate.getMonth();
+            if (self.selectedDates.length > 0)
+                self.latestSelectedDateObj = self.selectedDates[0];
+            if (self.config.minTime !== undefined)
+                self.config.minTime = self.parseDate(self.config.minTime, "H:i");
+            if (self.config.maxTime !== undefined)
+                self.config.maxTime = self.parseDate(self.config.maxTime, "H:i");
+            self.minDateHasTime =
+                !!self.config.minDate &&
+                    (self.config.minDate.getHours() > 0 ||
+                        self.config.minDate.getMinutes() > 0 ||
+                        self.config.minDate.getSeconds() > 0);
+            self.maxDateHasTime =
+                !!self.config.maxDate &&
+                    (self.config.maxDate.getHours() > 0 ||
+                        self.config.maxDate.getMinutes() > 0 ||
+                        self.config.maxDate.getSeconds() > 0);
+        }
+        function setupInputs() {
+            self.input = getInputElem();
+            /* istanbul ignore next */
+            if (!self.input) {
+                self.config.errorHandler(new Error("Invalid input element specified"));
+                return;
+            }
+            // hack: store previous type to restore it after destroy()
+            self.input._type = self.input.type;
+            self.input.type = "text";
+            self.input.classList.add("flatpickr-input");
+            self._input = self.input;
+            if (self.config.altInput) {
+                // replicate self.element
+                self.altInput = createElement(self.input.nodeName, self.config.altInputClass);
+                self._input = self.altInput;
+                self.altInput.placeholder = self.input.placeholder;
+                self.altInput.disabled = self.input.disabled;
+                self.altInput.required = self.input.required;
+                self.altInput.tabIndex = self.input.tabIndex;
+                self.altInput.type = "text";
+                self.input.setAttribute("type", "hidden");
+                if (!self.config.static && self.input.parentNode)
+                    self.input.parentNode.insertBefore(self.altInput, self.input.nextSibling);
+            }
+            if (!self.config.allowInput)
+                self._input.setAttribute("readonly", "readonly");
+            self._positionElement = self.config.positionElement || self._input;
+        }
+        function setupMobile() {
+            var inputType = self.config.enableTime
+                ? self.config.noCalendar
+                    ? "time"
+                    : "datetime-local"
+                : "date";
+            self.mobileInput = createElement("input", self.input.className + " flatpickr-mobile");
+            self.mobileInput.tabIndex = 1;
+            self.mobileInput.type = inputType;
+            self.mobileInput.disabled = self.input.disabled;
+            self.mobileInput.required = self.input.required;
+            self.mobileInput.placeholder = self.input.placeholder;
+            self.mobileFormatStr =
+                inputType === "datetime-local"
+                    ? "Y-m-d\\TH:i:S"
+                    : inputType === "date"
+                        ? "Y-m-d"
+                        : "H:i:S";
+            if (self.selectedDates.length > 0) {
+                self.mobileInput.defaultValue = self.mobileInput.value = self.formatDate(self.selectedDates[0], self.mobileFormatStr);
+            }
+            if (self.config.minDate)
+                self.mobileInput.min = self.formatDate(self.config.minDate, "Y-m-d");
+            if (self.config.maxDate)
+                self.mobileInput.max = self.formatDate(self.config.maxDate, "Y-m-d");
+            if (self.input.getAttribute("step"))
+                self.mobileInput.step = String(self.input.getAttribute("step"));
+            self.input.type = "hidden";
+            if (self.altInput !== undefined)
+                self.altInput.type = "hidden";
+            try {
+                if (self.input.parentNode)
+                    self.input.parentNode.insertBefore(self.mobileInput, self.input.nextSibling);
+            }
+            catch (_a) { }
+            bind(self.mobileInput, "change", function (e) {
+                self.setDate(getEventTarget(e).value, false, self.mobileFormatStr);
+                triggerEvent("onChange");
+                triggerEvent("onClose");
+            });
+        }
+        function toggle(e) {
+            if (self.isOpen === true)
+                return self.close();
+            self.open(e);
+        }
+        function triggerEvent(event, data) {
+            // If the instance has been destroyed already, all hooks have been removed
+            if (self.config === undefined)
+                return;
+            var hooks = self.config[event];
+            if (hooks !== undefined && hooks.length > 0) {
+                for (var i = 0; hooks[i] && i < hooks.length; i++)
+                    hooks[i](self.selectedDates, self.input.value, self, data);
+            }
+            if (event === "onChange") {
+                self.input.dispatchEvent(createEvent("change"));
+                // many front-end frameworks bind to the input event
+                self.input.dispatchEvent(createEvent("input"));
+            }
+        }
+        function createEvent(name) {
+            var e = document.createEvent("Event");
+            e.initEvent(name, true, true);
+            return e;
+        }
+        function isDateSelected(date) {
+            for (var i = 0; i < self.selectedDates.length; i++) {
+                if (compareDates(self.selectedDates[i], date) === 0)
+                    return "" + i;
+            }
+            return false;
+        }
+        function isDateInRange(date) {
+            if (self.config.mode !== "range" || self.selectedDates.length < 2)
+                return false;
+            return (compareDates(date, self.selectedDates[0]) >= 0 &&
+                compareDates(date, self.selectedDates[1]) <= 0);
+        }
+        function updateNavigationCurrentMonth() {
+            if (self.config.noCalendar || self.isMobile || !self.monthNav)
+                return;
+            self.yearElements.forEach(function (yearElement, i) {
+                var d = new Date(self.currentYear, self.currentMonth, 1);
+                d.setMonth(self.currentMonth + i);
+                if (self.config.showMonths > 1 ||
+                    self.config.monthSelectorType === "static") {
+                    self.monthElements[i].textContent =
+                        monthToStr(d.getMonth(), self.config.shorthandCurrentMonth, self.l10n) + " ";
+                }
+                else {
+                    self.monthsDropdownContainer.value = d.getMonth().toString();
+                }
+                yearElement.value = d.getFullYear().toString();
+            });
+            self._hidePrevMonthArrow =
+                self.config.minDate !== undefined &&
+                    (self.currentYear === self.config.minDate.getFullYear()
+                        ? self.currentMonth <= self.config.minDate.getMonth()
+                        : self.currentYear < self.config.minDate.getFullYear());
+            self._hideNextMonthArrow =
+                self.config.maxDate !== undefined &&
+                    (self.currentYear === self.config.maxDate.getFullYear()
+                        ? self.currentMonth + 1 > self.config.maxDate.getMonth()
+                        : self.currentYear > self.config.maxDate.getFullYear());
+        }
+        function getDateStr(format) {
+            return self.selectedDates
+                .map(function (dObj) { return self.formatDate(dObj, format); })
+                .filter(function (d, i, arr) {
+                return self.config.mode !== "range" ||
+                    self.config.enableTime ||
+                    arr.indexOf(d) === i;
+            })
+                .join(self.config.mode !== "range"
+                ? self.config.conjunction
+                : self.l10n.rangeSeparator);
+        }
+        /**
+         * Updates the values of inputs associated with the calendar
+         */
+        function updateValue(triggerChange) {
+            if (triggerChange === void 0) { triggerChange = true; }
+            if (self.mobileInput !== undefined && self.mobileFormatStr) {
+                self.mobileInput.value =
+                    self.latestSelectedDateObj !== undefined
+                        ? self.formatDate(self.latestSelectedDateObj, self.mobileFormatStr)
+                        : "";
+            }
+            self.input.value = getDateStr(self.config.dateFormat);
+            if (self.altInput !== undefined) {
+                self.altInput.value = getDateStr(self.config.altFormat);
+            }
+            if (triggerChange !== false)
+                triggerEvent("onValueUpdate");
+        }
+        function onMonthNavClick(e) {
+            var eventTarget = getEventTarget(e);
+            var isPrevMonth = self.prevMonthNav.contains(eventTarget);
+            var isNextMonth = self.nextMonthNav.contains(eventTarget);
+            if (isPrevMonth || isNextMonth) {
+                changeMonth(isPrevMonth ? -1 : 1);
+            }
+            else if (self.yearElements.indexOf(eventTarget) >= 0) {
+                eventTarget.select();
+            }
+            else if (eventTarget.classList.contains("arrowUp")) {
+                self.changeYear(self.currentYear + 1);
+            }
+            else if (eventTarget.classList.contains("arrowDown")) {
+                self.changeYear(self.currentYear - 1);
+            }
+        }
+        function timeWrapper(e) {
+            e.preventDefault();
+            var isKeyDown = e.type === "keydown", eventTarget = getEventTarget(e), input = eventTarget;
+            if (self.amPM !== undefined && eventTarget === self.amPM) {
+                self.amPM.textContent =
+                    self.l10n.amPM[int(self.amPM.textContent === self.l10n.amPM[0])];
+            }
+            var min = parseFloat(input.getAttribute("min")), max = parseFloat(input.getAttribute("max")), step = parseFloat(input.getAttribute("step")), curValue = parseInt(input.value, 10), delta = e.delta ||
+                (isKeyDown ? (e.which === 38 ? 1 : -1) : 0);
+            var newValue = curValue + step * delta;
+            if (typeof input.value !== "undefined" && input.value.length === 2) {
+                var isHourElem = input === self.hourElement, isMinuteElem = input === self.minuteElement;
+                if (newValue < min) {
+                    newValue =
+                        max +
+                            newValue +
+                            int(!isHourElem) +
+                            (int(isHourElem) && int(!self.amPM));
+                    if (isMinuteElem)
+                        incrementNumInput(undefined, -1, self.hourElement);
+                }
+                else if (newValue > max) {
+                    newValue =
+                        input === self.hourElement ? newValue - max - int(!self.amPM) : min;
+                    if (isMinuteElem)
+                        incrementNumInput(undefined, 1, self.hourElement);
+                }
+                if (self.amPM &&
+                    isHourElem &&
+                    (step === 1
+                        ? newValue + curValue === 23
+                        : Math.abs(newValue - curValue) > step)) {
+                    self.amPM.textContent =
+                        self.l10n.amPM[int(self.amPM.textContent === self.l10n.amPM[0])];
+                }
+                input.value = pad(newValue);
+            }
+        }
+        init();
+        return self;
+    }
+    /* istanbul ignore next */
+    function _flatpickr(nodeList, config) {
+        // static list
+        var nodes = Array.prototype.slice
+            .call(nodeList)
+            .filter(function (x) { return x instanceof HTMLElement; });
+        var instances = [];
+        for (var i = 0; i < nodes.length; i++) {
+            var node = nodes[i];
+            try {
+                if (node.getAttribute("data-fp-omit") !== null)
+                    continue;
+                if (node._flatpickr !== undefined) {
+                    node._flatpickr.destroy();
+                    node._flatpickr = undefined;
+                }
+                node._flatpickr = FlatpickrInstance(node, config || {});
+                instances.push(node._flatpickr);
+            }
+            catch (e) {
+                console.error(e);
+            }
+        }
+        return instances.length === 1 ? instances[0] : instances;
+    }
+    /* istanbul ignore next */
+    if (typeof HTMLElement !== "undefined" &&
+        typeof HTMLCollection !== "undefined" &&
+        typeof NodeList !== "undefined") {
+        // browser env
+        HTMLCollection.prototype.flatpickr = NodeList.prototype.flatpickr = function (config) {
+            return _flatpickr(this, config);
+        };
+        HTMLElement.prototype.flatpickr = function (config) {
+            return _flatpickr([this], config);
+        };
+    }
+    /* istanbul ignore next */
+    var flatpickr = function (selector, config) {
+        if (typeof selector === "string") {
+            return _flatpickr(window.document.querySelectorAll(selector), config);
+        }
+        else if (selector instanceof Node) {
+            return _flatpickr([selector], config);
+        }
+        else {
+            return _flatpickr(selector, config);
+        }
+    };
+    /* istanbul ignore next */
+    flatpickr.defaultConfig = {};
+    flatpickr.l10ns = {
+        en: __assign({}, english),
+        default: __assign({}, english),
+    };
+    flatpickr.localize = function (l10n) {
+        flatpickr.l10ns.default = __assign(__assign({}, flatpickr.l10ns.default), l10n);
+    };
+    flatpickr.setDefaults = function (config) {
+        flatpickr.defaultConfig = __assign(__assign({}, flatpickr.defaultConfig), config);
+    };
+    flatpickr.parseDate = createDateParser({});
+    flatpickr.formatDate = createDateFormatter({});
+    flatpickr.compareDates = compareDates;
+    /* istanbul ignore next */
+    if (typeof jQuery !== "undefined" && typeof jQuery.fn !== "undefined") {
+        jQuery.fn.flatpickr = function (config) {
+            return _flatpickr(this, config);
+        };
+    }
+    // eslint-disable-next-line @typescript-eslint/camelcase
+    Date.prototype.fp_incr = function (days) {
+        return new Date(this.getFullYear(), this.getMonth(), this.getDate() + (typeof days === "string" ? parseInt(days, 10) : days));
+    };
+    if (typeof window !== "undefined") {
+        window.flatpickr = flatpickr;
+    }
+
+    return flatpickr;
+
+})));
diff --git a/admin/js/vendors/flatpickr/flatpickr.min.css b/admin/js/vendors/flatpickr/flatpickr.min.css
new file mode 100644 (file)
index 0000000..2b5da59
--- /dev/null
@@ -0,0 +1,13 @@
+.flatpickr-calendar{background:transparent;opacity:0;display:none;text-align:center;visibility:hidden;padding:0;-webkit-animation:none;animation:none;direction:ltr;border:0;font-size:14px;line-height:24px;border-radius:5px;position:absolute;width:307.875px;-webkit-box-sizing:border-box;box-sizing:border-box;-ms-touch-action:manipulation;touch-action:manipulation;background:#fff;-webkit-box-shadow:1px 0 0 #e6e6e6,-1px 0 0 #e6e6e6,0 1px 0 #e6e6e6,0 -1px 0 #e6e6e6,0 3px 13px rgba(0,0,0,0.08);box-shadow:1px 0 0 #e6e6e6,-1px 0 0 #e6e6e6,0 1px 0 #e6e6e6,0 -1px 0 #e6e6e6,0 3px 13px rgba(0,0,0,0.08)}.flatpickr-calendar.open,.flatpickr-calendar.inline{opacity:1;max-height:640px;visibility:visible}.flatpickr-calendar.open{display:inline-block;z-index:99999}.flatpickr-calendar.animate.open{-webkit-animation:fpFadeInDown 300ms cubic-bezier(.23,1,.32,1);animation:fpFadeInDown 300ms cubic-bezier(.23,1,.32,1)}.flatpickr-calendar.inline{display:block;position:relative;top:2px}.flatpickr-calendar.static{position:absolute;top:calc(100% + 2px)}.flatpickr-calendar.static.open{z-index:999;display:block}.flatpickr-calendar.multiMonth .flatpickr-days .dayContainer:nth-child(n+1) .flatpickr-day.inRange:nth-child(7n+7){-webkit-box-shadow:none !important;box-shadow:none !important}.flatpickr-calendar.multiMonth .flatpickr-days .dayContainer:nth-child(n+2) .flatpickr-day.inRange:nth-child(7n+1){-webkit-box-shadow:-2px 0 0 #e6e6e6,5px 0 0 #e6e6e6;box-shadow:-2px 0 0 #e6e6e6,5px 0 0 #e6e6e6}.flatpickr-calendar .hasWeeks .dayContainer,.flatpickr-calendar .hasTime .dayContainer{border-bottom:0;border-bottom-right-radius:0;border-bottom-left-radius:0}.flatpickr-calendar .hasWeeks .dayContainer{border-left:0}.flatpickr-calendar.hasTime .flatpickr-time{height:40px;border-top:1px solid #e6e6e6}.flatpickr-calendar.noCalendar.hasTime .flatpickr-time{height:auto}.flatpickr-calendar:before,.flatpickr-calendar:after{position:absolute;display:block;pointer-events:none;border:solid transparent;content:'';height:0;width:0;left:22px}.flatpickr-calendar.rightMost:before,.flatpickr-calendar.arrowRight:before,.flatpickr-calendar.rightMost:after,.flatpickr-calendar.arrowRight:after{left:auto;right:22px}.flatpickr-calendar.arrowCenter:before,.flatpickr-calendar.arrowCenter:after{left:50%;right:50%}.flatpickr-calendar:before{border-width:5px;margin:0 -5px}.flatpickr-calendar:after{border-width:4px;margin:0 -4px}.flatpickr-calendar.arrowTop:before,.flatpickr-calendar.arrowTop:after{bottom:100%}.flatpickr-calendar.arrowTop:before{border-bottom-color:#e6e6e6}.flatpickr-calendar.arrowTop:after{border-bottom-color:#fff}.flatpickr-calendar.arrowBottom:before,.flatpickr-calendar.arrowBottom:after{top:100%}.flatpickr-calendar.arrowBottom:before{border-top-color:#e6e6e6}.flatpickr-calendar.arrowBottom:after{border-top-color:#fff}.flatpickr-calendar:focus{outline:0}.flatpickr-wrapper{position:relative;display:inline-block}.flatpickr-months{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.flatpickr-months .flatpickr-month{background:transparent;color:rgba(0,0,0,0.9);fill:rgba(0,0,0,0.9);height:34px;line-height:1;text-align:center;position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;overflow:hidden;-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1}.flatpickr-months .flatpickr-prev-month,.flatpickr-months .flatpickr-next-month{text-decoration:none;cursor:pointer;position:absolute;top:0;height:34px;padding:10px;z-index:3;color:rgba(0,0,0,0.9);fill:rgba(0,0,0,0.9)}.flatpickr-months .flatpickr-prev-month.flatpickr-disabled,.flatpickr-months .flatpickr-next-month.flatpickr-disabled{display:none}.flatpickr-months .flatpickr-prev-month i,.flatpickr-months .flatpickr-next-month i{position:relative}.flatpickr-months .flatpickr-prev-month.flatpickr-prev-month,.flatpickr-months .flatpickr-next-month.flatpickr-prev-month{/*
+      /*rtl:begin:ignore*/left:0/*
+      /*rtl:end:ignore*/}/*
+      /*rtl:begin:ignore*/
+/*
+      /*rtl:end:ignore*/
+.flatpickr-months .flatpickr-prev-month.flatpickr-next-month,.flatpickr-months .flatpickr-next-month.flatpickr-next-month{/*
+      /*rtl:begin:ignore*/right:0/*
+      /*rtl:end:ignore*/}/*
+      /*rtl:begin:ignore*/
+/*
+      /*rtl:end:ignore*/
+.flatpickr-months .flatpickr-prev-month:hover,.flatpickr-months .flatpickr-next-month:hover{color:#959ea9}.flatpickr-months .flatpickr-prev-month:hover svg,.flatpickr-months .flatpickr-next-month:hover svg{fill:#f64747}.flatpickr-months .flatpickr-prev-month svg,.flatpickr-months .flatpickr-next-month svg{width:14px;height:14px}.flatpickr-months .flatpickr-prev-month svg path,.flatpickr-months .flatpickr-next-month svg path{-webkit-transition:fill .1s;transition:fill .1s;fill:inherit}.numInputWrapper{position:relative;height:auto}.numInputWrapper input,.numInputWrapper span{display:inline-block}.numInputWrapper input{width:100%}.numInputWrapper input::-ms-clear{display:none}.numInputWrapper input::-webkit-outer-spin-button,.numInputWrapper input::-webkit-inner-spin-button{margin:0;-webkit-appearance:none}.numInputWrapper span{position:absolute;right:0;width:14px;padding:0 4px 0 2px;height:50%;line-height:50%;opacity:0;cursor:pointer;border:1px solid rgba(57,57,57,0.15);-webkit-box-sizing:border-box;box-sizing:border-box}.numInputWrapper span:hover{background:rgba(0,0,0,0.1)}.numInputWrapper span:active{background:rgba(0,0,0,0.2)}.numInputWrapper span:after{display:block;content:"";position:absolute}.numInputWrapper span.arrowUp{top:0;border-bottom:0}.numInputWrapper span.arrowUp:after{border-left:4px solid transparent;border-right:4px solid transparent;border-bottom:4px solid rgba(57,57,57,0.6);top:26%}.numInputWrapper span.arrowDown{top:50%}.numInputWrapper span.arrowDown:after{border-left:4px solid transparent;border-right:4px solid transparent;border-top:4px solid rgba(57,57,57,0.6);top:40%}.numInputWrapper span svg{width:inherit;height:auto}.numInputWrapper span svg path{fill:rgba(0,0,0,0.5)}.numInputWrapper:hover{background:rgba(0,0,0,0.05)}.numInputWrapper:hover span{opacity:1}.flatpickr-current-month{font-size:135%;line-height:inherit;font-weight:300;color:inherit;position:absolute;width:75%;left:12.5%;padding:7.48px 0 0 0;line-height:1;height:34px;display:inline-block;text-align:center;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}.flatpickr-current-month span.cur-month{font-family:inherit;font-weight:700;color:inherit;display:inline-block;margin-left:.5ch;padding:0}.flatpickr-current-month span.cur-month:hover{background:rgba(0,0,0,0.05)}.flatpickr-current-month .numInputWrapper{width:6ch;width:7ch\0;display:inline-block}.flatpickr-current-month .numInputWrapper span.arrowUp:after{border-bottom-color:rgba(0,0,0,0.9)}.flatpickr-current-month .numInputWrapper span.arrowDown:after{border-top-color:rgba(0,0,0,0.9)}.flatpickr-current-month input.cur-year{background:transparent;-webkit-box-sizing:border-box;box-sizing:border-box;color:inherit;cursor:text;padding:0 0 0 .5ch;margin:0;display:inline-block;font-size:inherit;font-family:inherit;font-weight:300;line-height:inherit;height:auto;border:0;border-radius:0;vertical-align:initial;-webkit-appearance:textfield;-moz-appearance:textfield;appearance:textfield}.flatpickr-current-month input.cur-year:focus{outline:0}.flatpickr-current-month input.cur-year[disabled],.flatpickr-current-month input.cur-year[disabled]:hover{font-size:100%;color:rgba(0,0,0,0.5);background:transparent;pointer-events:none}.flatpickr-current-month .flatpickr-monthDropdown-months{appearance:menulist;background:transparent;border:none;border-radius:0;box-sizing:border-box;color:inherit;cursor:pointer;font-size:inherit;font-family:inherit;font-weight:300;height:auto;line-height:inherit;margin:-1px 0 0 0;outline:none;padding:0 0 0 .5ch;position:relative;vertical-align:initial;-webkit-box-sizing:border-box;-webkit-appearance:menulist;-moz-appearance:menulist;width:auto}.flatpickr-current-month .flatpickr-monthDropdown-months:focus,.flatpickr-current-month .flatpickr-monthDropdown-months:active{outline:none}.flatpickr-current-month .flatpickr-monthDropdown-months:hover{background:rgba(0,0,0,0.05)}.flatpickr-current-month .flatpickr-monthDropdown-months .flatpickr-monthDropdown-month{background-color:transparent;outline:none;padding:0}.flatpickr-weekdays{background:transparent;text-align:center;overflow:hidden;width:100%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;height:28px}.flatpickr-weekdays .flatpickr-weekdaycontainer{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1}span.flatpickr-weekday{cursor:default;font-size:90%;background:transparent;color:rgba(0,0,0,0.54);line-height:1;margin:0;text-align:center;display:block;-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;font-weight:bolder}.dayContainer,.flatpickr-weeks{padding:1px 0 0 0}.flatpickr-days{position:relative;overflow:hidden;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:start;-webkit-align-items:flex-start;-ms-flex-align:start;align-items:flex-start;width:307.875px}.flatpickr-days:focus{outline:0}.dayContainer{padding:0;outline:0;text-align:left;width:307.875px;min-width:307.875px;max-width:307.875px;-webkit-box-sizing:border-box;box-sizing:border-box;display:inline-block;display:-ms-flexbox;display:-webkit-box;display:-webkit-flex;display:flex;-webkit-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-wrap:wrap;-ms-flex-pack:justify;-webkit-justify-content:space-around;justify-content:space-around;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);opacity:1}.dayContainer + .dayContainer{-webkit-box-shadow:-1px 0 0 #e6e6e6;box-shadow:-1px 0 0 #e6e6e6}.flatpickr-day{background:none;border:1px solid transparent;border-radius:150px;-webkit-box-sizing:border-box;box-sizing:border-box;color:#393939;cursor:pointer;font-weight:400;width:14.2857143%;-webkit-flex-basis:14.2857143%;-ms-flex-preferred-size:14.2857143%;flex-basis:14.2857143%;max-width:39px;height:39px;line-height:39px;margin:0;display:inline-block;position:relative;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;text-align:center}.flatpickr-day.inRange,.flatpickr-day.prevMonthDay.inRange,.flatpickr-day.nextMonthDay.inRange,.flatpickr-day.today.inRange,.flatpickr-day.prevMonthDay.today.inRange,.flatpickr-day.nextMonthDay.today.inRange,.flatpickr-day:hover,.flatpickr-day.prevMonthDay:hover,.flatpickr-day.nextMonthDay:hover,.flatpickr-day:focus,.flatpickr-day.prevMonthDay:focus,.flatpickr-day.nextMonthDay:focus{cursor:pointer;outline:0;background:#e6e6e6;border-color:#e6e6e6}.flatpickr-day.today{border-color:#959ea9}.flatpickr-day.today:hover,.flatpickr-day.today:focus{border-color:#959ea9;background:#959ea9;color:#fff}.flatpickr-day.selected,.flatpickr-day.startRange,.flatpickr-day.endRange,.flatpickr-day.selected.inRange,.flatpickr-day.startRange.inRange,.flatpickr-day.endRange.inRange,.flatpickr-day.selected:focus,.flatpickr-day.startRange:focus,.flatpickr-day.endRange:focus,.flatpickr-day.selected:hover,.flatpickr-day.startRange:hover,.flatpickr-day.endRange:hover,.flatpickr-day.selected.prevMonthDay,.flatpickr-day.startRange.prevMonthDay,.flatpickr-day.endRange.prevMonthDay,.flatpickr-day.selected.nextMonthDay,.flatpickr-day.startRange.nextMonthDay,.flatpickr-day.endRange.nextMonthDay{background:#569ff7;-webkit-box-shadow:none;box-shadow:none;color:#fff;border-color:#569ff7}.flatpickr-day.selected.startRange,.flatpickr-day.startRange.startRange,.flatpickr-day.endRange.startRange{border-radius:50px 0 0 50px}.flatpickr-day.selected.endRange,.flatpickr-day.startRange.endRange,.flatpickr-day.endRange.endRange{border-radius:0 50px 50px 0}.flatpickr-day.selected.startRange + .endRange:not(:nth-child(7n+1)),.flatpickr-day.startRange.startRange + .endRange:not(:nth-child(7n+1)),.flatpickr-day.endRange.startRange + .endRange:not(:nth-child(7n+1)){-webkit-box-shadow:-10px 0 0 #569ff7;box-shadow:-10px 0 0 #569ff7}.flatpickr-day.selected.startRange.endRange,.flatpickr-day.startRange.startRange.endRange,.flatpickr-day.endRange.startRange.endRange{border-radius:50px}.flatpickr-day.inRange{border-radius:0;-webkit-box-shadow:-5px 0 0 #e6e6e6,5px 0 0 #e6e6e6;box-shadow:-5px 0 0 #e6e6e6,5px 0 0 #e6e6e6}.flatpickr-day.flatpickr-disabled,.flatpickr-day.flatpickr-disabled:hover,.flatpickr-day.prevMonthDay,.flatpickr-day.nextMonthDay,.flatpickr-day.notAllowed,.flatpickr-day.notAllowed.prevMonthDay,.flatpickr-day.notAllowed.nextMonthDay{color:rgba(57,57,57,0.3);background:transparent;border-color:transparent;cursor:default}.flatpickr-day.flatpickr-disabled,.flatpickr-day.flatpickr-disabled:hover{cursor:not-allowed;color:rgba(57,57,57,0.1)}.flatpickr-day.week.selected{border-radius:0;-webkit-box-shadow:-5px 0 0 #569ff7,5px 0 0 #569ff7;box-shadow:-5px 0 0 #569ff7,5px 0 0 #569ff7}.flatpickr-day.hidden{visibility:hidden}.rangeMode .flatpickr-day{margin-top:1px}.flatpickr-weekwrapper{float:left}.flatpickr-weekwrapper .flatpickr-weeks{padding:0 12px;-webkit-box-shadow:1px 0 0 #e6e6e6;box-shadow:1px 0 0 #e6e6e6}.flatpickr-weekwrapper .flatpickr-weekday{float:none;width:100%;line-height:28px}.flatpickr-weekwrapper span.flatpickr-day,.flatpickr-weekwrapper span.flatpickr-day:hover{display:block;width:100%;max-width:none;color:rgba(57,57,57,0.3);background:transparent;cursor:default;border:none}.flatpickr-innerContainer{display:block;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-sizing:border-box;box-sizing:border-box;overflow:hidden}.flatpickr-rContainer{display:inline-block;padding:0;-webkit-box-sizing:border-box;box-sizing:border-box}.flatpickr-time{text-align:center;outline:0;display:block;height:0;line-height:40px;max-height:40px;-webkit-box-sizing:border-box;box-sizing:border-box;overflow:hidden;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.flatpickr-time:after{content:"";display:table;clear:both}.flatpickr-time .numInputWrapper{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;width:40%;height:40px;float:left}.flatpickr-time .numInputWrapper span.arrowUp:after{border-bottom-color:#393939}.flatpickr-time .numInputWrapper span.arrowDown:after{border-top-color:#393939}.flatpickr-time.hasSeconds .numInputWrapper{width:26%}.flatpickr-time.time24hr .numInputWrapper{width:49%}.flatpickr-time input{background:transparent;-webkit-box-shadow:none;box-shadow:none;border:0;border-radius:0;text-align:center;margin:0;padding:0;height:inherit;line-height:inherit;color:#393939;font-size:14px;position:relative;-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-appearance:textfield;-moz-appearance:textfield;appearance:textfield}.flatpickr-time input.flatpickr-hour{font-weight:bold}.flatpickr-time input.flatpickr-minute,.flatpickr-time input.flatpickr-second{font-weight:400}.flatpickr-time input:focus{outline:0;border:0}.flatpickr-time .flatpickr-time-separator,.flatpickr-time .flatpickr-am-pm{height:inherit;float:left;line-height:inherit;color:#393939;font-weight:bold;width:2%;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-align-self:center;-ms-flex-item-align:center;align-self:center}.flatpickr-time .flatpickr-am-pm{outline:0;width:18%;cursor:pointer;text-align:center;font-weight:400}.flatpickr-time input:hover,.flatpickr-time .flatpickr-am-pm:hover,.flatpickr-time input:focus,.flatpickr-time .flatpickr-am-pm:focus{background:#eee}.flatpickr-input[readonly]{cursor:pointer}@-webkit-keyframes fpFadeInDown{from{opacity:0;-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}to{opacity:1;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}@keyframes fpFadeInDown{from{opacity:0;-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}to{opacity:1;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}
\ No newline at end of file
diff --git a/admin/js/vendors/flatpickr/flatpickr.min.js b/admin/js/vendors/flatpickr/flatpickr.min.js
new file mode 100644 (file)
index 0000000..bded21e
--- /dev/null
@@ -0,0 +1,2 @@
+/* flatpickr v4.6.6,, @license MIT */
+!function(e,n){"object"==typeof exports&&"undefined"!=typeof module?module.exports=n():"function"==typeof define&&define.amd?define(n):(e=e||self).flatpickr=n()}(this,(function(){"use strict";var e=function(){return(e=Object.assign||function(e){for(var n,t=1,a=arguments.length;t<a;t++)for(var i in n=arguments[t])Object.prototype.hasOwnProperty.call(n,i)&&(e[i]=n[i]);return e}).apply(this,arguments)};function n(){for(var e=0,n=0,t=arguments.length;n<t;n++)e+=arguments[n].length;var a=Array(e),i=0;for(n=0;n<t;n++)for(var o=arguments[n],r=0,l=o.length;r<l;r++,i++)a[i]=o[r];return a}var t=["onChange","onClose","onDayCreate","onDestroy","onKeyDown","onMonthChange","onOpen","onParseConfig","onReady","onValueUpdate","onYearChange","onPreCalendarPosition"],a={_disable:[],_enable:[],allowInput:!1,allowInvalidPreload:!1,altFormat:"F j, Y",altInput:!1,altInputClass:"form-control input",animate:"object"==typeof window&&-1===window.navigator.userAgent.indexOf("MSIE"),ariaDateFormat:"F j, Y",autoFillDefaultTime:!0,clickOpens:!0,closeOnSelect:!0,conjunction:", ",dateFormat:"Y-m-d",defaultHour:12,defaultMinute:0,defaultSeconds:0,disable:[],disableMobile:!1,enable:[],enableSeconds:!1,enableTime:!1,errorHandler:function(e){return"undefined"!=typeof console&&console.warn(e)},getWeek:function(e){var n=new Date(e.getTime());n.setHours(0,0,0,0),n.setDate(n.getDate()+3-(n.getDay()+6)%7);var t=new Date(n.getFullYear(),0,4);return 1+Math.round(((n.getTime()-t.getTime())/864e5-3+(t.getDay()+6)%7)/7)},hourIncrement:1,ignoredFocusElements:[],inline:!1,locale:"default",minuteIncrement:5,mode:"single",monthSelectorType:"dropdown",nextArrow:"<svg version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 17 17'><g></g><path d='M13.207 8.472l-7.854 7.854-0.707-0.707 7.146-7.146-7.146-7.148 0.707-0.707 7.854 7.854z' /></svg>",noCalendar:!1,now:new Date,onChange:[],onClose:[],onDayCreate:[],onDestroy:[],onKeyDown:[],onMonthChange:[],onOpen:[],onParseConfig:[],onReady:[],onValueUpdate:[],onYearChange:[],onPreCalendarPosition:[],plugins:[],position:"auto",positionElement:void 0,prevArrow:"<svg version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 17 17'><g></g><path d='M5.207 8.471l7.146 7.147-0.707 0.707-7.853-7.854 7.854-7.853 0.707 0.707-7.147 7.146z' /></svg>",shorthandCurrentMonth:!1,showMonths:1,static:!1,time_24hr:!1,weekNumbers:!1,wrap:!1},i={weekdays:{shorthand:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],longhand:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"]},months:{shorthand:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],longhand:["January","February","March","April","May","June","July","August","September","October","November","December"]},daysInMonth:[31,28,31,30,31,30,31,31,30,31,30,31],firstDayOfWeek:0,ordinal:function(e){var n=e%100;if(n>3&&n<21)return"th";switch(n%10){case 1:return"st";case 2:return"nd";case 3:return"rd";default:return"th"}},rangeSeparator:" to ",weekAbbreviation:"Wk",scrollTitle:"Scroll to increment",toggleTitle:"Click to toggle",amPM:["AM","PM"],yearAriaLabel:"Year",monthAriaLabel:"Month",hourAriaLabel:"Hour",minuteAriaLabel:"Minute",time_24hr:!1},o=function(e,n){return void 0===n&&(n=2),("000"+e).slice(-1*n)},r=function(e){return!0===e?1:0};function l(e,n,t){var a;return void 0===t&&(t=!1),function(){var i=this,o=arguments;null!==a&&clearTimeout(a),a=window.setTimeout((function(){a=null,t||e.apply(i,o)}),n),t&&!a&&e.apply(i,o)}}var c=function(e){return e instanceof Array?e:[e]};function d(e,n,t){if(!0===t)return e.classList.add(n);e.classList.remove(n)}function s(e,n,t){var a=window.document.createElement(e);return n=n||"",t=t||"",a.className=n,void 0!==t&&(a.textContent=t),a}function u(e){for(;e.firstChild;)e.removeChild(e.firstChild)}function f(e,n){var t=s("div","numInputWrapper"),a=s("input","numInput "+e),i=s("span","arrowUp"),o=s("span","arrowDown");if(-1===navigator.userAgent.indexOf("MSIE 9.0")?a.type="number":(a.type="text",a.pattern="\\d*"),void 0!==n)for(var r in n)a.setAttribute(r,n[r]);return t.appendChild(a),t.appendChild(i),t.appendChild(o),t}function m(e){try{return"function"==typeof e.composedPath?e.composedPath()[0]:e.target}catch(n){return e.target}}var g=function(){},p=function(e,n,t){return t.months[n?"shorthand":"longhand"][e]},h={D:g,F:function(e,n,t){e.setMonth(t.months.longhand.indexOf(n))},G:function(e,n){e.setHours(parseFloat(n))},H:function(e,n){e.setHours(parseFloat(n))},J:function(e,n){e.setDate(parseFloat(n))},K:function(e,n,t){e.setHours(e.getHours()%12+12*r(new RegExp(t.amPM[1],"i").test(n)))},M:function(e,n,t){e.setMonth(t.months.shorthand.indexOf(n))},S:function(e,n){e.setSeconds(parseFloat(n))},U:function(e,n){return new Date(1e3*parseFloat(n))},W:function(e,n,t){var a=parseInt(n),i=new Date(e.getFullYear(),0,2+7*(a-1),0,0,0,0);return i.setDate(i.getDate()-i.getDay()+t.firstDayOfWeek),i},Y:function(e,n){e.setFullYear(parseFloat(n))},Z:function(e,n){return new Date(n)},d:function(e,n){e.setDate(parseFloat(n))},h:function(e,n){e.setHours(parseFloat(n))},i:function(e,n){e.setMinutes(parseFloat(n))},j:function(e,n){e.setDate(parseFloat(n))},l:g,m:function(e,n){e.setMonth(parseFloat(n)-1)},n:function(e,n){e.setMonth(parseFloat(n)-1)},s:function(e,n){e.setSeconds(parseFloat(n))},u:function(e,n){return new Date(parseFloat(n))},w:g,y:function(e,n){e.setFullYear(2e3+parseFloat(n))}},v={D:"(\\w+)",F:"(\\w+)",G:"(\\d\\d|\\d)",H:"(\\d\\d|\\d)",J:"(\\d\\d|\\d)\\w+",K:"",M:"(\\w+)",S:"(\\d\\d|\\d)",U:"(.+)",W:"(\\d\\d|\\d)",Y:"(\\d{4})",Z:"(.+)",d:"(\\d\\d|\\d)",h:"(\\d\\d|\\d)",i:"(\\d\\d|\\d)",j:"(\\d\\d|\\d)",l:"(\\w+)",m:"(\\d\\d|\\d)",n:"(\\d\\d|\\d)",s:"(\\d\\d|\\d)",u:"(.+)",w:"(\\d\\d|\\d)",y:"(\\d{2})"},D={Z:function(e){return e.toISOString()},D:function(e,n,t){return n.weekdays.shorthand[D.w(e,n,t)]},F:function(e,n,t){return p(D.n(e,n,t)-1,!1,n)},G:function(e,n,t){return o(D.h(e,n,t))},H:function(e){return o(e.getHours())},J:function(e,n){return void 0!==n.ordinal?e.getDate()+n.ordinal(e.getDate()):e.getDate()},K:function(e,n){return n.amPM[r(e.getHours()>11)]},M:function(e,n){return p(e.getMonth(),!0,n)},S:function(e){return o(e.getSeconds())},U:function(e){return e.getTime()/1e3},W:function(e,n,t){return t.getWeek(e)},Y:function(e){return o(e.getFullYear(),4)},d:function(e){return o(e.getDate())},h:function(e){return e.getHours()%12?e.getHours()%12:12},i:function(e){return o(e.getMinutes())},j:function(e){return e.getDate()},l:function(e,n){return n.weekdays.longhand[e.getDay()]},m:function(e){return o(e.getMonth()+1)},n:function(e){return e.getMonth()+1},s:function(e){return e.getSeconds()},u:function(e){return e.getTime()},w:function(e){return e.getDay()},y:function(e){return String(e.getFullYear()).substring(2)}},w=function(e){var n=e.config,t=void 0===n?a:n,o=e.l10n,r=void 0===o?i:o,l=e.isMobile,c=void 0!==l&&l;return function(e,n,a){var i=a||r;return void 0===t.formatDate||c?n.split("").map((function(n,a,o){return D[n]&&"\\"!==o[a-1]?D[n](e,i,t):"\\"!==n?n:""})).join(""):t.formatDate(e,n,i)}},b=function(e){var n=e.config,t=void 0===n?a:n,o=e.l10n,r=void 0===o?i:o;return function(e,n,i,o){if(0===e||e){var l,c=o||r,d=e;if(e instanceof Date)l=new Date(e.getTime());else if("string"!=typeof e&&void 0!==e.toFixed)l=new Date(e);else if("string"==typeof e){var s=n||(t||a).dateFormat,u=String(e).trim();if("today"===u)l=new Date,i=!0;else if(/Z$/.test(u)||/GMT$/.test(u))l=new Date(e);else if(t&&t.parseDate)l=t.parseDate(e,s);else{l=t&&t.noCalendar?new Date((new Date).setHours(0,0,0,0)):new Date((new Date).getFullYear(),0,1,0,0,0,0);for(var f=void 0,m=[],g=0,p=0,D="";g<s.length;g++){var w=s[g],b="\\"===w,C="\\"===s[g-1]||b;if(v[w]&&!C){D+=v[w];var M=new RegExp(D).exec(e);M&&(f=!0)&&m["Y"!==w?"push":"unshift"]({fn:h[w],val:M[++p]})}else b||(D+=".");m.forEach((function(e){var n=e.fn,t=e.val;return l=n(l,t,c)||l}))}l=f?l:void 0}}if(l instanceof Date&&!isNaN(l.getTime()))return!0===i&&l.setHours(0,0,0,0),l;t.errorHandler(new Error("Invalid date provided: "+d))}}};function C(e,n,t){return void 0===t&&(t=!0),!1!==t?new Date(e.getTime()).setHours(0,0,0,0)-new Date(n.getTime()).setHours(0,0,0,0):e.getTime()-n.getTime()}var M=864e5;"function"!=typeof Object.assign&&(Object.assign=function(e){for(var n=[],t=1;t<arguments.length;t++)n[t-1]=arguments[t];if(!e)throw TypeError("Cannot convert undefined or null to object");for(var a=function(n){n&&Object.keys(n).forEach((function(t){return e[t]=n[t]}))},i=0,o=n;i<o.length;i++){var r=o[i];a(r)}return e});function y(g,h){var D={config:e(e({},a),E.defaultConfig),l10n:i};function y(e){return e.bind(D)}function x(){var e=D.config;!1===e.weekNumbers&&1===e.showMonths||!0!==e.noCalendar&&window.requestAnimationFrame((function(){if(void 0!==D.calendarContainer&&(D.calendarContainer.style.visibility="hidden",D.calendarContainer.style.display="block"),void 0!==D.daysContainer){var n=(D.days.offsetWidth+1)*e.showMonths;D.daysContainer.style.width=n+"px",D.calendarContainer.style.width=n+(void 0!==D.weekWrapper?D.weekWrapper.offsetWidth:0)+"px",D.calendarContainer.style.removeProperty("visibility"),D.calendarContainer.style.removeProperty("display")}}))}function k(e){if(0===D.selectedDates.length){var n=void 0!==D.config.minDate?new Date(D.config.minDate.getTime()):new Date,t=S(),a=t.hours,i=t.minutes,l=t.seconds;n.setHours(a,i,l,0),D.setDate(n,!1)}void 0!==e&&"blur"!==e.type&&function(e){e.preventDefault();var n="keydown"===e.type,t=m(e),a=t;void 0!==D.amPM&&t===D.amPM&&(D.amPM.textContent=D.l10n.amPM[r(D.amPM.textContent===D.l10n.amPM[0])]);var i=parseFloat(a.getAttribute("min")),l=parseFloat(a.getAttribute("max")),c=parseFloat(a.getAttribute("step")),d=parseInt(a.value,10),s=e.delta||(n?38===e.which?1:-1:0),u=d+c*s;if(void 0!==a.value&&2===a.value.length){var f=a===D.hourElement,g=a===D.minuteElement;u<i?(u=l+u+r(!f)+(r(f)&&r(!D.amPM)),g&&Y(void 0,-1,D.hourElement)):u>l&&(u=a===D.hourElement?u-l-r(!D.amPM):i,g&&Y(void 0,1,D.hourElement)),D.amPM&&f&&(1===c?u+d===23:Math.abs(u-d)>c)&&(D.amPM.textContent=D.l10n.amPM[r(D.amPM.textContent===D.l10n.amPM[0])]),a.value=o(u)}}(e);var c=D._input.value;T(),we(),D._input.value!==c&&D._debouncedChange()}function T(){if(void 0!==D.hourElement&&void 0!==D.minuteElement){var e,n,t=(parseInt(D.hourElement.value.slice(-2),10)||0)%24,a=(parseInt(D.minuteElement.value,10)||0)%60,i=void 0!==D.secondElement?(parseInt(D.secondElement.value,10)||0)%60:0;void 0!==D.amPM&&(e=t,n=D.amPM.textContent,t=e%12+12*r(n===D.l10n.amPM[1]));var o=void 0!==D.config.minTime||D.config.minDate&&D.minDateHasTime&&D.latestSelectedDateObj&&0===C(D.latestSelectedDateObj,D.config.minDate,!0);if(void 0!==D.config.maxTime||D.config.maxDate&&D.maxDateHasTime&&D.latestSelectedDateObj&&0===C(D.latestSelectedDateObj,D.config.maxDate,!0)){var l=void 0!==D.config.maxTime?D.config.maxTime:D.config.maxDate;(t=Math.min(t,l.getHours()))===l.getHours()&&(a=Math.min(a,l.getMinutes())),a===l.getMinutes()&&(i=Math.min(i,l.getSeconds()))}if(o){var c=void 0!==D.config.minTime?D.config.minTime:D.config.minDate;(t=Math.max(t,c.getHours()))===c.getHours()&&(a=Math.max(a,c.getMinutes())),a===c.getMinutes()&&(i=Math.max(i,c.getSeconds()))}_(t,a,i)}}function I(e){var n=e||D.latestSelectedDateObj;n&&_(n.getHours(),n.getMinutes(),n.getSeconds())}function S(){var e=D.config.defaultHour,n=D.config.defaultMinute,t=D.config.defaultSeconds;if(void 0!==D.config.minDate){var a=D.config.minDate.getHours(),i=D.config.minDate.getMinutes();(e=Math.max(e,a))===a&&(n=Math.max(i,n)),e===a&&n===i&&(t=D.config.minDate.getSeconds())}if(void 0!==D.config.maxDate){var o=D.config.maxDate.getHours(),r=D.config.maxDate.getMinutes();(e=Math.min(e,o))===o&&(n=Math.min(r,n)),e===o&&n===r&&(t=D.config.maxDate.getSeconds())}return{hours:e,minutes:n,seconds:t}}function _(e,n,t){void 0!==D.latestSelectedDateObj&&D.latestSelectedDateObj.setHours(e%24,n,t||0,0),D.hourElement&&D.minuteElement&&!D.isMobile&&(D.hourElement.value=o(D.config.time_24hr?e:(12+e)%12+12*r(e%12==0)),D.minuteElement.value=o(n),void 0!==D.amPM&&(D.amPM.textContent=D.l10n.amPM[r(e>=12)]),void 0!==D.secondElement&&(D.secondElement.value=o(t)))}function O(e){var n=m(e),t=parseInt(n.value)+(e.delta||0);(t/1e3>1||"Enter"===e.key&&!/[^\d]/.test(t.toString()))&&Z(t)}function F(e,n,t,a){return n instanceof Array?n.forEach((function(n){return F(e,n,t,a)})):e instanceof Array?e.forEach((function(e){return F(e,n,t,a)})):(e.addEventListener(n,t,a),void D._handlers.push({element:e,event:n,handler:t,options:a}))}function N(){ge("onChange")}function A(e,n){var t=void 0!==e?D.parseDate(e):D.latestSelectedDateObj||(D.config.minDate&&D.config.minDate>D.now?D.config.minDate:D.config.maxDate&&D.config.maxDate<D.now?D.config.maxDate:D.now),a=D.currentYear,i=D.currentMonth;try{void 0!==t&&(D.currentYear=t.getFullYear(),D.currentMonth=t.getMonth())}catch(e){e.message="Invalid date supplied: "+t,D.config.errorHandler(e)}n&&D.currentYear!==a&&(ge("onYearChange"),J()),!n||D.currentYear===a&&D.currentMonth===i||ge("onMonthChange"),D.redraw()}function P(e){var n=m(e);~n.className.indexOf("arrow")&&Y(e,n.classList.contains("arrowUp")?1:-1)}function Y(e,n,t){var a=e&&m(e),i=t||a&&a.parentNode&&a.parentNode.firstChild,o=pe("increment");o.delta=n,i&&i.dispatchEvent(o)}function H(e,n,t,a){var i=Q(n,!0),o=s("span","flatpickr-day "+e,n.getDate().toString());return o.dateObj=n,o.$i=a,o.setAttribute("aria-label",D.formatDate(n,D.config.ariaDateFormat)),-1===e.indexOf("hidden")&&0===C(n,D.now)&&(D.todayDateElem=o,o.classList.add("today"),o.setAttribute("aria-current","date")),i?(o.tabIndex=-1,he(n)&&(o.classList.add("selected"),D.selectedDateElem=o,"range"===D.config.mode&&(d(o,"startRange",D.selectedDates[0]&&0===C(n,D.selectedDates[0],!0)),d(o,"endRange",D.selectedDates[1]&&0===C(n,D.selectedDates[1],!0)),"nextMonthDay"===e&&o.classList.add("inRange")))):o.classList.add("flatpickr-disabled"),"range"===D.config.mode&&function(e){return!("range"!==D.config.mode||D.selectedDates.length<2)&&(C(e,D.selectedDates[0])>=0&&C(e,D.selectedDates[1])<=0)}(n)&&!he(n)&&o.classList.add("inRange"),D.weekNumbers&&1===D.config.showMonths&&"prevMonthDay"!==e&&t%7==1&&D.weekNumbers.insertAdjacentHTML("beforeend","<span class='flatpickr-day'>"+D.config.getWeek(n)+"</span>"),ge("onDayCreate",o),o}function j(e){e.focus(),"range"===D.config.mode&&te(e)}function L(e){for(var n=e>0?0:D.config.showMonths-1,t=e>0?D.config.showMonths:-1,a=n;a!=t;a+=e)for(var i=D.daysContainer.children[a],o=e>0?0:i.children.length-1,r=e>0?i.children.length:-1,l=o;l!=r;l+=e){var c=i.children[l];if(-1===c.className.indexOf("hidden")&&Q(c.dateObj))return c}}function W(e,n){var t=X(document.activeElement||document.body),a=void 0!==e?e:t?document.activeElement:void 0!==D.selectedDateElem&&X(D.selectedDateElem)?D.selectedDateElem:void 0!==D.todayDateElem&&X(D.todayDateElem)?D.todayDateElem:L(n>0?1:-1);void 0===a?D._input.focus():t?function(e,n){for(var t=-1===e.className.indexOf("Month")?e.dateObj.getMonth():D.currentMonth,a=n>0?D.config.showMonths:-1,i=n>0?1:-1,o=t-D.currentMonth;o!=a;o+=i)for(var r=D.daysContainer.children[o],l=t-D.currentMonth===o?e.$i+n:n<0?r.children.length-1:0,c=r.children.length,d=l;d>=0&&d<c&&d!=(n>0?c:-1);d+=i){var s=r.children[d];if(-1===s.className.indexOf("hidden")&&Q(s.dateObj)&&Math.abs(e.$i-d)>=Math.abs(n))return j(s)}D.changeMonth(i),W(L(i),0)}(a,n):j(a)}function R(e,n){for(var t=(new Date(e,n,1).getDay()-D.l10n.firstDayOfWeek+7)%7,a=D.utils.getDaysInMonth((n-1+12)%12,e),i=D.utils.getDaysInMonth(n,e),o=window.document.createDocumentFragment(),r=D.config.showMonths>1,l=r?"prevMonthDay hidden":"prevMonthDay",c=r?"nextMonthDay hidden":"nextMonthDay",d=a+1-t,u=0;d<=a;d++,u++)o.appendChild(H(l,new Date(e,n-1,d),d,u));for(d=1;d<=i;d++,u++)o.appendChild(H("",new Date(e,n,d),d,u));for(var f=i+1;f<=42-t&&(1===D.config.showMonths||u%7!=0);f++,u++)o.appendChild(H(c,new Date(e,n+1,f%i),f,u));var m=s("div","dayContainer");return m.appendChild(o),m}function B(){if(void 0!==D.daysContainer){u(D.daysContainer),D.weekNumbers&&u(D.weekNumbers);for(var e=document.createDocumentFragment(),n=0;n<D.config.showMonths;n++){var t=new Date(D.currentYear,D.currentMonth,1);t.setMonth(D.currentMonth+n),e.appendChild(R(t.getFullYear(),t.getMonth()))}D.daysContainer.appendChild(e),D.days=D.daysContainer.firstChild,"range"===D.config.mode&&1===D.selectedDates.length&&te()}}function J(){if(!(D.config.showMonths>1||"dropdown"!==D.config.monthSelectorType)){var e=function(e){return!(void 0!==D.config.minDate&&D.currentYear===D.config.minDate.getFullYear()&&e<D.config.minDate.getMonth())&&!(void 0!==D.config.maxDate&&D.currentYear===D.config.maxDate.getFullYear()&&e>D.config.maxDate.getMonth())};D.monthsDropdownContainer.tabIndex=-1,D.monthsDropdownContainer.innerHTML="";for(var n=0;n<12;n++)if(e(n)){var t=s("option","flatpickr-monthDropdown-month");t.value=new Date(D.currentYear,n).getMonth().toString(),t.textContent=p(n,D.config.shorthandCurrentMonth,D.l10n),t.tabIndex=-1,D.currentMonth===n&&(t.selected=!0),D.monthsDropdownContainer.appendChild(t)}}}function K(){var e,n=s("div","flatpickr-month"),t=window.document.createDocumentFragment();D.config.showMonths>1||"static"===D.config.monthSelectorType?e=s("span","cur-month"):(D.monthsDropdownContainer=s("select","flatpickr-monthDropdown-months"),D.monthsDropdownContainer.setAttribute("aria-label",D.l10n.monthAriaLabel),F(D.monthsDropdownContainer,"change",(function(e){var n=m(e),t=parseInt(n.value,10);D.changeMonth(t-D.currentMonth),ge("onMonthChange")})),J(),e=D.monthsDropdownContainer);var a=f("cur-year",{tabindex:"-1"}),i=a.getElementsByTagName("input")[0];i.setAttribute("aria-label",D.l10n.yearAriaLabel),D.config.minDate&&i.setAttribute("min",D.config.minDate.getFullYear().toString()),D.config.maxDate&&(i.setAttribute("max",D.config.maxDate.getFullYear().toString()),i.disabled=!!D.config.minDate&&D.config.minDate.getFullYear()===D.config.maxDate.getFullYear());var o=s("div","flatpickr-current-month");return o.appendChild(e),o.appendChild(a),t.appendChild(o),n.appendChild(t),{container:n,yearElement:i,monthElement:e}}function U(){u(D.monthNav),D.monthNav.appendChild(D.prevMonthNav),D.config.showMonths&&(D.yearElements=[],D.monthElements=[]);for(var e=D.config.showMonths;e--;){var n=K();D.yearElements.push(n.yearElement),D.monthElements.push(n.monthElement),D.monthNav.appendChild(n.container)}D.monthNav.appendChild(D.nextMonthNav)}function q(){D.weekdayContainer?u(D.weekdayContainer):D.weekdayContainer=s("div","flatpickr-weekdays");for(var e=D.config.showMonths;e--;){var n=s("div","flatpickr-weekdaycontainer");D.weekdayContainer.appendChild(n)}return $(),D.weekdayContainer}function $(){if(D.weekdayContainer){var e=D.l10n.firstDayOfWeek,t=n(D.l10n.weekdays.shorthand);e>0&&e<t.length&&(t=n(t.splice(e,t.length),t.splice(0,e)));for(var a=D.config.showMonths;a--;)D.weekdayContainer.children[a].innerHTML="\n      <span class='flatpickr-weekday'>\n        "+t.join("</span><span class='flatpickr-weekday'>")+"\n      </span>\n      "}}function z(e,n){void 0===n&&(n=!0);var t=n?e:e-D.currentMonth;t<0&&!0===D._hidePrevMonthArrow||t>0&&!0===D._hideNextMonthArrow||(D.currentMonth+=t,(D.currentMonth<0||D.currentMonth>11)&&(D.currentYear+=D.currentMonth>11?1:-1,D.currentMonth=(D.currentMonth+12)%12,ge("onYearChange"),J()),B(),ge("onMonthChange"),ve())}function G(e){return!(!D.config.appendTo||!D.config.appendTo.contains(e))||D.calendarContainer.contains(e)}function V(e){if(D.isOpen&&!D.config.inline){var n=m(e),t=G(n),a=n===D.input||n===D.altInput||D.element.contains(n)||e.path&&e.path.indexOf&&(~e.path.indexOf(D.input)||~e.path.indexOf(D.altInput)),i="blur"===e.type?a&&e.relatedTarget&&!G(e.relatedTarget):!a&&!t&&!G(e.relatedTarget),o=!D.config.ignoredFocusElements.some((function(e){return e.contains(n)}));i&&o&&(void 0!==D.timeContainer&&void 0!==D.minuteElement&&void 0!==D.hourElement&&""!==D.input.value&&void 0!==D.input.value&&k(),D.close(),D.config&&"range"===D.config.mode&&1===D.selectedDates.length&&(D.clear(!1),D.redraw()))}}function Z(e){if(!(!e||D.config.minDate&&e<D.config.minDate.getFullYear()||D.config.maxDate&&e>D.config.maxDate.getFullYear())){var n=e,t=D.currentYear!==n;D.currentYear=n||D.currentYear,D.config.maxDate&&D.currentYear===D.config.maxDate.getFullYear()?D.currentMonth=Math.min(D.config.maxDate.getMonth(),D.currentMonth):D.config.minDate&&D.currentYear===D.config.minDate.getFullYear()&&(D.currentMonth=Math.max(D.config.minDate.getMonth(),D.currentMonth)),t&&(D.redraw(),ge("onYearChange"),J())}}function Q(e,n){void 0===n&&(n=!0);var t=D.parseDate(e,void 0,n);if(D.config.minDate&&t&&C(t,D.config.minDate,void 0!==n?n:!D.minDateHasTime)<0||D.config.maxDate&&t&&C(t,D.config.maxDate,void 0!==n?n:!D.maxDateHasTime)>0)return!1;if(0===D.config.enable.length&&0===D.config.disable.length)return!0;if(void 0===t)return!1;for(var a=D.config.enable.length>0,i=a?D.config.enable:D.config.disable,o=0,r=void 0;o<i.length;o++){if("function"==typeof(r=i[o])&&r(t))return a;if(r instanceof Date&&void 0!==t&&r.getTime()===t.getTime())return a;if("string"==typeof r&&void 0!==t){var l=D.parseDate(r,void 0,!0);return l&&l.getTime()===t.getTime()?a:!a}if("object"==typeof r&&void 0!==t&&r.from&&r.to&&t.getTime()>=r.from.getTime()&&t.getTime()<=r.to.getTime())return a}return!a}function X(e){return void 0!==D.daysContainer&&(-1===e.className.indexOf("hidden")&&-1===e.className.indexOf("flatpickr-disabled")&&D.daysContainer.contains(e))}function ee(e){!(e.target===D._input)||e.relatedTarget&&G(e.relatedTarget)||D.setDate(D._input.value,!0,e.target===D.altInput?D.config.altFormat:D.config.dateFormat)}function ne(e){var n=m(e),t=D.config.wrap?g.contains(n):n===D._input,a=D.config.allowInput,i=D.isOpen&&(!a||!t),o=D.config.inline&&t&&!a;if(13===e.keyCode&&t){if(a)return D.setDate(D._input.value,!0,n===D.altInput?D.config.altFormat:D.config.dateFormat),n.blur();D.open()}else if(G(n)||i||o){var r=!!D.timeContainer&&D.timeContainer.contains(n);switch(e.keyCode){case 13:r?(e.preventDefault(),k(),de()):se(e);break;case 27:e.preventDefault(),de();break;case 8:case 46:t&&!D.config.allowInput&&(e.preventDefault(),D.clear());break;case 37:case 39:if(r||t)D.hourElement&&D.hourElement.focus();else if(e.preventDefault(),void 0!==D.daysContainer&&(!1===a||document.activeElement&&X(document.activeElement))){var l=39===e.keyCode?1:-1;e.ctrlKey?(e.stopPropagation(),z(l),W(L(1),0)):W(void 0,l)}break;case 38:case 40:e.preventDefault();var c=40===e.keyCode?1:-1;D.daysContainer&&void 0!==n.$i||n===D.input||n===D.altInput?e.ctrlKey?(e.stopPropagation(),Z(D.currentYear-c),W(L(1),0)):r||W(void 0,7*c):n===D.currentYearElement?Z(D.currentYear-c):D.config.enableTime&&(!r&&D.hourElement&&D.hourElement.focus(),k(e),D._debouncedChange());break;case 9:if(r){var d=[D.hourElement,D.minuteElement,D.secondElement,D.amPM].concat(D.pluginElements).filter((function(e){return e})),s=d.indexOf(n);if(-1!==s){var u=d[s+(e.shiftKey?-1:1)];e.preventDefault(),(u||D._input).focus()}}else!D.config.noCalendar&&D.daysContainer&&D.daysContainer.contains(n)&&e.shiftKey&&(e.preventDefault(),D._input.focus())}}if(void 0!==D.amPM&&n===D.amPM)switch(e.key){case D.l10n.amPM[0].charAt(0):case D.l10n.amPM[0].charAt(0).toLowerCase():D.amPM.textContent=D.l10n.amPM[0],T(),we();break;case D.l10n.amPM[1].charAt(0):case D.l10n.amPM[1].charAt(0).toLowerCase():D.amPM.textContent=D.l10n.amPM[1],T(),we()}(t||G(n))&&ge("onKeyDown",e)}function te(e){if(1===D.selectedDates.length&&(!e||e.classList.contains("flatpickr-day")&&!e.classList.contains("flatpickr-disabled"))){for(var n=e?e.dateObj.getTime():D.days.firstElementChild.dateObj.getTime(),t=D.parseDate(D.selectedDates[0],void 0,!0).getTime(),a=Math.min(n,D.selectedDates[0].getTime()),i=Math.max(n,D.selectedDates[0].getTime()),o=!1,r=0,l=0,c=a;c<i;c+=M)Q(new Date(c),!0)||(o=o||c>a&&c<i,c<t&&(!r||c>r)?r=c:c>t&&(!l||c<l)&&(l=c));for(var d=0;d<D.config.showMonths;d++)for(var s=D.daysContainer.children[d],u=function(a,i){var c,d,u,f=s.children[a],m=f.dateObj.getTime(),g=r>0&&m<r||l>0&&m>l;return g?(f.classList.add("notAllowed"),["inRange","startRange","endRange"].forEach((function(e){f.classList.remove(e)})),"continue"):o&&!g?"continue":(["startRange","inRange","endRange","notAllowed"].forEach((function(e){f.classList.remove(e)})),void(void 0!==e&&(e.classList.add(n<=D.selectedDates[0].getTime()?"startRange":"endRange"),t<n&&m===t?f.classList.add("startRange"):t>n&&m===t&&f.classList.add("endRange"),m>=r&&(0===l||m<=l)&&(d=t,u=n,(c=m)>Math.min(d,u)&&c<Math.max(d,u))&&f.classList.add("inRange"))))},f=0,m=s.children.length;f<m;f++)u(f)}}function ae(){!D.isOpen||D.config.static||D.config.inline||le()}function ie(e){return function(n){var t=D.config["_"+e+"Date"]=D.parseDate(n,D.config.dateFormat),a=D.config["_"+("min"===e?"max":"min")+"Date"];void 0!==t&&(D["min"===e?"minDateHasTime":"maxDateHasTime"]=t.getHours()>0||t.getMinutes()>0||t.getSeconds()>0),D.selectedDates&&(D.selectedDates=D.selectedDates.filter((function(e){return Q(e)})),D.selectedDates.length||"min"!==e||I(t),we()),D.daysContainer&&(ce(),void 0!==t?D.currentYearElement[e]=t.getFullYear().toString():D.currentYearElement.removeAttribute(e),D.currentYearElement.disabled=!!a&&void 0!==t&&a.getFullYear()===t.getFullYear())}}function oe(){return D.config.wrap?g.querySelector("[data-input]"):g}function re(){"object"!=typeof D.config.locale&&void 0===E.l10ns[D.config.locale]&&D.config.errorHandler(new Error("flatpickr: invalid locale "+D.config.locale)),D.l10n=e(e({},E.l10ns.default),"object"==typeof D.config.locale?D.config.locale:"default"!==D.config.locale?E.l10ns[D.config.locale]:void 0),v.K="("+D.l10n.amPM[0]+"|"+D.l10n.amPM[1]+"|"+D.l10n.amPM[0].toLowerCase()+"|"+D.l10n.amPM[1].toLowerCase()+")",void 0===e(e({},h),JSON.parse(JSON.stringify(g.dataset||{}))).time_24hr&&void 0===E.defaultConfig.time_24hr&&(D.config.time_24hr=D.l10n.time_24hr),D.formatDate=w(D),D.parseDate=b({config:D.config,l10n:D.l10n})}function le(e){if(void 0!==D.calendarContainer){ge("onPreCalendarPosition");var n=e||D._positionElement,t=Array.prototype.reduce.call(D.calendarContainer.children,(function(e,n){return e+n.offsetHeight}),0),a=D.calendarContainer.offsetWidth,i=D.config.position.split(" "),o=i[0],r=i.length>1?i[1]:null,l=n.getBoundingClientRect(),c=window.innerHeight-l.bottom,s="above"===o||"below"!==o&&c<t&&l.top>t,u=window.pageYOffset+l.top+(s?-t-2:n.offsetHeight+2);if(d(D.calendarContainer,"arrowTop",!s),d(D.calendarContainer,"arrowBottom",s),!D.config.inline){var f=window.pageXOffset+l.left,m=!1,g=!1;"center"===r?(f-=(a-l.width)/2,m=!0):"right"===r&&(f-=a-l.width,g=!0),d(D.calendarContainer,"arrowLeft",!m&&!g),d(D.calendarContainer,"arrowCenter",m),d(D.calendarContainer,"arrowRight",g);var p=window.document.body.offsetWidth-(window.pageXOffset+l.right),h=f+a>window.document.body.offsetWidth,v=p+a>window.document.body.offsetWidth;if(d(D.calendarContainer,"rightMost",h),!D.config.static)if(D.calendarContainer.style.top=u+"px",h)if(v){var w=function(){for(var e=null,n=0;n<document.styleSheets.length;n++){var t=document.styleSheets[n];try{t.cssRules}catch(e){continue}e=t;break}return null!=e?e:(a=document.createElement("style"),document.head.appendChild(a),a.sheet);var a}();if(void 0===w)return;var b=window.document.body.offsetWidth,C=Math.max(0,b/2-a/2),M=w.cssRules.length,y="{left:"+l.left+"px;right:auto;}";d(D.calendarContainer,"rightMost",!1),d(D.calendarContainer,"centerMost",!0),w.insertRule(".flatpickr-calendar.centerMost:before,.flatpickr-calendar.centerMost:after"+y,M),D.calendarContainer.style.left=C+"px",D.calendarContainer.style.right="auto"}else D.calendarContainer.style.left="auto",D.calendarContainer.style.right=p+"px";else D.calendarContainer.style.left=f+"px",D.calendarContainer.style.right="auto"}}}function ce(){D.config.noCalendar||D.isMobile||(J(),ve(),B())}function de(){D._input.focus(),-1!==window.navigator.userAgent.indexOf("MSIE")||void 0!==navigator.msMaxTouchPoints?setTimeout(D.close,0):D.close()}function se(e){e.preventDefault(),e.stopPropagation();var n=function e(n,t){return t(n)?n:n.parentNode?e(n.parentNode,t):void 0}(m(e),(function(e){return e.classList&&e.classList.contains("flatpickr-day")&&!e.classList.contains("flatpickr-disabled")&&!e.classList.contains("notAllowed")}));if(void 0!==n){var t=n,a=D.latestSelectedDateObj=new Date(t.dateObj.getTime()),i=(a.getMonth()<D.currentMonth||a.getMonth()>D.currentMonth+D.config.showMonths-1)&&"range"!==D.config.mode;if(D.selectedDateElem=t,"single"===D.config.mode)D.selectedDates=[a];else if("multiple"===D.config.mode){var o=he(a);o?D.selectedDates.splice(parseInt(o),1):D.selectedDates.push(a)}else"range"===D.config.mode&&(2===D.selectedDates.length&&D.clear(!1,!1),D.latestSelectedDateObj=a,D.selectedDates.push(a),0!==C(a,D.selectedDates[0],!0)&&D.selectedDates.sort((function(e,n){return e.getTime()-n.getTime()})));if(T(),i){var r=D.currentYear!==a.getFullYear();D.currentYear=a.getFullYear(),D.currentMonth=a.getMonth(),r&&(ge("onYearChange"),J()),ge("onMonthChange")}if(ve(),B(),we(),i||"range"===D.config.mode||1!==D.config.showMonths?void 0!==D.selectedDateElem&&void 0===D.hourElement&&D.selectedDateElem&&D.selectedDateElem.focus():j(t),void 0!==D.hourElement&&void 0!==D.hourElement&&D.hourElement.focus(),D.config.closeOnSelect){var l="single"===D.config.mode&&!D.config.enableTime,c="range"===D.config.mode&&2===D.selectedDates.length&&!D.config.enableTime;(l||c)&&de()}N()}}D.parseDate=b({config:D.config,l10n:D.l10n}),D._handlers=[],D.pluginElements=[],D.loadedPlugins=[],D._bind=F,D._setHoursFromDate=I,D._positionCalendar=le,D.changeMonth=z,D.changeYear=Z,D.clear=function(e,n){void 0===e&&(e=!0);void 0===n&&(n=!0);D.input.value="",void 0!==D.altInput&&(D.altInput.value="");void 0!==D.mobileInput&&(D.mobileInput.value="");D.selectedDates=[],D.latestSelectedDateObj=void 0,!0===n&&(D.currentYear=D._initialDate.getFullYear(),D.currentMonth=D._initialDate.getMonth());if(!0===D.config.enableTime){var t=S(),a=t.hours,i=t.minutes,o=t.seconds;_(a,i,o)}D.redraw(),e&&ge("onChange")},D.close=function(){D.isOpen=!1,D.isMobile||(void 0!==D.calendarContainer&&D.calendarContainer.classList.remove("open"),void 0!==D._input&&D._input.classList.remove("active"));ge("onClose")},D._createElement=s,D.destroy=function(){void 0!==D.config&&ge("onDestroy");for(var e=D._handlers.length;e--;){var n=D._handlers[e];n.element.removeEventListener(n.event,n.handler,n.options)}if(D._handlers=[],D.mobileInput)D.mobileInput.parentNode&&D.mobileInput.parentNode.removeChild(D.mobileInput),D.mobileInput=void 0;else if(D.calendarContainer&&D.calendarContainer.parentNode)if(D.config.static&&D.calendarContainer.parentNode){var t=D.calendarContainer.parentNode;if(t.lastChild&&t.removeChild(t.lastChild),t.parentNode){for(;t.firstChild;)t.parentNode.insertBefore(t.firstChild,t);t.parentNode.removeChild(t)}}else D.calendarContainer.parentNode.removeChild(D.calendarContainer);D.altInput&&(D.input.type="text",D.altInput.parentNode&&D.altInput.parentNode.removeChild(D.altInput),delete D.altInput);D.input&&(D.input.type=D.input._type,D.input.classList.remove("flatpickr-input"),D.input.removeAttribute("readonly"));["_showTimeInput","latestSelectedDateObj","_hideNextMonthArrow","_hidePrevMonthArrow","__hideNextMonthArrow","__hidePrevMonthArrow","isMobile","isOpen","selectedDateElem","minDateHasTime","maxDateHasTime","days","daysContainer","_input","_positionElement","innerContainer","rContainer","monthNav","todayDateElem","calendarContainer","weekdayContainer","prevMonthNav","nextMonthNav","monthsDropdownContainer","currentMonthElement","currentYearElement","navigationCurrentMonth","selectedDateElem","config"].forEach((function(e){try{delete D[e]}catch(e){}}))},D.isEnabled=Q,D.jumpToDate=A,D.open=function(e,n){void 0===n&&(n=D._positionElement);if(!0===D.isMobile){if(e){e.preventDefault();var t=m(e);t&&t.blur()}return void 0!==D.mobileInput&&(D.mobileInput.focus(),D.mobileInput.click()),void ge("onOpen")}if(D._input.disabled||D.config.inline)return;var a=D.isOpen;D.isOpen=!0,a||(D.calendarContainer.classList.add("open"),D._input.classList.add("active"),ge("onOpen"),le(n));!0===D.config.enableTime&&!0===D.config.noCalendar&&(!1!==D.config.allowInput||void 0!==e&&D.timeContainer.contains(e.relatedTarget)||setTimeout((function(){return D.hourElement.select()}),50))},D.redraw=ce,D.set=function(e,n){if(null!==e&&"object"==typeof e)for(var a in Object.assign(D.config,e),e)void 0!==ue[a]&&ue[a].forEach((function(e){return e()}));else D.config[e]=n,void 0!==ue[e]?ue[e].forEach((function(e){return e()})):t.indexOf(e)>-1&&(D.config[e]=c(n));D.redraw(),we(!0)},D.setDate=function(e,n,t){void 0===n&&(n=!1);void 0===t&&(t=D.config.dateFormat);if(0!==e&&!e||e instanceof Array&&0===e.length)return D.clear(n);fe(e,t),D.latestSelectedDateObj=D.selectedDates[D.selectedDates.length-1],D.redraw(),A(void 0,n),I(),0===D.selectedDates.length&&D.clear(!1);we(n),n&&ge("onChange")},D.toggle=function(e){if(!0===D.isOpen)return D.close();D.open(e)};var ue={locale:[re,$],showMonths:[U,x,q],minDate:[A],maxDate:[A]};function fe(e,n){var t=[];if(e instanceof Array)t=e.map((function(e){return D.parseDate(e,n)}));else if(e instanceof Date||"number"==typeof e)t=[D.parseDate(e,n)];else if("string"==typeof e)switch(D.config.mode){case"single":case"time":t=[D.parseDate(e,n)];break;case"multiple":t=e.split(D.config.conjunction).map((function(e){return D.parseDate(e,n)}));break;case"range":t=e.split(D.l10n.rangeSeparator).map((function(e){return D.parseDate(e,n)}))}else D.config.errorHandler(new Error("Invalid date supplied: "+JSON.stringify(e)));D.selectedDates=D.config.allowInvalidPreload?t:t.filter((function(e){return e instanceof Date&&Q(e,!1)})),"range"===D.config.mode&&D.selectedDates.sort((function(e,n){return e.getTime()-n.getTime()}))}function me(e){return e.slice().map((function(e){return"string"==typeof e||"number"==typeof e||e instanceof Date?D.parseDate(e,void 0,!0):e&&"object"==typeof e&&e.from&&e.to?{from:D.parseDate(e.from,void 0),to:D.parseDate(e.to,void 0)}:e})).filter((function(e){return e}))}function ge(e,n){if(void 0!==D.config){var t=D.config[e];if(void 0!==t&&t.length>0)for(var a=0;t[a]&&a<t.length;a++)t[a](D.selectedDates,D.input.value,D,n);"onChange"===e&&(D.input.dispatchEvent(pe("change")),D.input.dispatchEvent(pe("input")))}}function pe(e){var n=document.createEvent("Event");return n.initEvent(e,!0,!0),n}function he(e){for(var n=0;n<D.selectedDates.length;n++)if(0===C(D.selectedDates[n],e))return""+n;return!1}function ve(){D.config.noCalendar||D.isMobile||!D.monthNav||(D.yearElements.forEach((function(e,n){var t=new Date(D.currentYear,D.currentMonth,1);t.setMonth(D.currentMonth+n),D.config.showMonths>1||"static"===D.config.monthSelectorType?D.monthElements[n].textContent=p(t.getMonth(),D.config.shorthandCurrentMonth,D.l10n)+" ":D.monthsDropdownContainer.value=t.getMonth().toString(),e.value=t.getFullYear().toString()})),D._hidePrevMonthArrow=void 0!==D.config.minDate&&(D.currentYear===D.config.minDate.getFullYear()?D.currentMonth<=D.config.minDate.getMonth():D.currentYear<D.config.minDate.getFullYear()),D._hideNextMonthArrow=void 0!==D.config.maxDate&&(D.currentYear===D.config.maxDate.getFullYear()?D.currentMonth+1>D.config.maxDate.getMonth():D.currentYear>D.config.maxDate.getFullYear()))}function De(e){return D.selectedDates.map((function(n){return D.formatDate(n,e)})).filter((function(e,n,t){return"range"!==D.config.mode||D.config.enableTime||t.indexOf(e)===n})).join("range"!==D.config.mode?D.config.conjunction:D.l10n.rangeSeparator)}function we(e){void 0===e&&(e=!0),void 0!==D.mobileInput&&D.mobileFormatStr&&(D.mobileInput.value=void 0!==D.latestSelectedDateObj?D.formatDate(D.latestSelectedDateObj,D.mobileFormatStr):""),D.input.value=De(D.config.dateFormat),void 0!==D.altInput&&(D.altInput.value=De(D.config.altFormat)),!1!==e&&ge("onValueUpdate")}function be(e){var n=m(e),t=D.prevMonthNav.contains(n),a=D.nextMonthNav.contains(n);t||a?z(t?-1:1):D.yearElements.indexOf(n)>=0?n.select():n.classList.contains("arrowUp")?D.changeYear(D.currentYear+1):n.classList.contains("arrowDown")&&D.changeYear(D.currentYear-1)}return function(){D.element=D.input=g,D.isOpen=!1,function(){var n=["wrap","weekNumbers","allowInput","allowInvalidPreload","clickOpens","time_24hr","enableTime","noCalendar","altInput","shorthandCurrentMonth","inline","static","enableSeconds","disableMobile"],i=e(e({},JSON.parse(JSON.stringify(g.dataset||{}))),h),o={};D.config.parseDate=i.parseDate,D.config.formatDate=i.formatDate,Object.defineProperty(D.config,"enable",{get:function(){return D.config._enable},set:function(e){D.config._enable=me(e)}}),Object.defineProperty(D.config,"disable",{get:function(){return D.config._disable},set:function(e){D.config._disable=me(e)}});var r="time"===i.mode;if(!i.dateFormat&&(i.enableTime||r)){var l=E.defaultConfig.dateFormat||a.dateFormat;o.dateFormat=i.noCalendar||r?"H:i"+(i.enableSeconds?":S":""):l+" H:i"+(i.enableSeconds?":S":"")}if(i.altInput&&(i.enableTime||r)&&!i.altFormat){var d=E.defaultConfig.altFormat||a.altFormat;o.altFormat=i.noCalendar||r?"h:i"+(i.enableSeconds?":S K":" K"):d+" h:i"+(i.enableSeconds?":S":"")+" K"}Object.defineProperty(D.config,"minDate",{get:function(){return D.config._minDate},set:ie("min")}),Object.defineProperty(D.config,"maxDate",{get:function(){return D.config._maxDate},set:ie("max")});var s=function(e){return function(n){D.config["min"===e?"_minTime":"_maxTime"]=D.parseDate(n,"H:i:S")}};Object.defineProperty(D.config,"minTime",{get:function(){return D.config._minTime},set:s("min")}),Object.defineProperty(D.config,"maxTime",{get:function(){return D.config._maxTime},set:s("max")}),"time"===i.mode&&(D.config.noCalendar=!0,D.config.enableTime=!0);Object.assign(D.config,o,i);for(var u=0;u<n.length;u++)D.config[n[u]]=!0===D.config[n[u]]||"true"===D.config[n[u]];t.filter((function(e){return void 0!==D.config[e]})).forEach((function(e){D.config[e]=c(D.config[e]||[]).map(y)})),D.isMobile=!D.config.disableMobile&&!D.config.inline&&"single"===D.config.mode&&!D.config.disable.length&&!D.config.enable.length&&!D.config.weekNumbers&&/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);for(u=0;u<D.config.plugins.length;u++){var f=D.config.plugins[u](D)||{};for(var m in f)t.indexOf(m)>-1?D.config[m]=c(f[m]).map(y).concat(D.config[m]):void 0===i[m]&&(D.config[m]=f[m])}i.altInputClass||(D.config.altInputClass=oe().className+" "+D.config.altInputClass);ge("onParseConfig")}(),re(),function(){if(D.input=oe(),!D.input)return void D.config.errorHandler(new Error("Invalid input element specified"));D.input._type=D.input.type,D.input.type="text",D.input.classList.add("flatpickr-input"),D._input=D.input,D.config.altInput&&(D.altInput=s(D.input.nodeName,D.config.altInputClass),D._input=D.altInput,D.altInput.placeholder=D.input.placeholder,D.altInput.disabled=D.input.disabled,D.altInput.required=D.input.required,D.altInput.tabIndex=D.input.tabIndex,D.altInput.type="text",D.input.setAttribute("type","hidden"),!D.config.static&&D.input.parentNode&&D.input.parentNode.insertBefore(D.altInput,D.input.nextSibling));D.config.allowInput||D._input.setAttribute("readonly","readonly");D._positionElement=D.config.positionElement||D._input}(),function(){D.selectedDates=[],D.now=D.parseDate(D.config.now)||new Date;var e=D.config.defaultDate||("INPUT"!==D.input.nodeName&&"TEXTAREA"!==D.input.nodeName||!D.input.placeholder||D.input.value!==D.input.placeholder?D.input.value:null);e&&fe(e,D.config.dateFormat);D._initialDate=D.selectedDates.length>0?D.selectedDates[0]:D.config.minDate&&D.config.minDate.getTime()>D.now.getTime()?D.config.minDate:D.config.maxDate&&D.config.maxDate.getTime()<D.now.getTime()?D.config.maxDate:D.now,D.currentYear=D._initialDate.getFullYear(),D.currentMonth=D._initialDate.getMonth(),D.selectedDates.length>0&&(D.latestSelectedDateObj=D.selectedDates[0]);void 0!==D.config.minTime&&(D.config.minTime=D.parseDate(D.config.minTime,"H:i"));void 0!==D.config.maxTime&&(D.config.maxTime=D.parseDate(D.config.maxTime,"H:i"));D.minDateHasTime=!!D.config.minDate&&(D.config.minDate.getHours()>0||D.config.minDate.getMinutes()>0||D.config.minDate.getSeconds()>0),D.maxDateHasTime=!!D.config.maxDate&&(D.config.maxDate.getHours()>0||D.config.maxDate.getMinutes()>0||D.config.maxDate.getSeconds()>0)}(),D.utils={getDaysInMonth:function(e,n){return void 0===e&&(e=D.currentMonth),void 0===n&&(n=D.currentYear),1===e&&(n%4==0&&n%100!=0||n%400==0)?29:D.l10n.daysInMonth[e]}},D.isMobile||function(){var e=window.document.createDocumentFragment();if(D.calendarContainer=s("div","flatpickr-calendar"),D.calendarContainer.tabIndex=-1,!D.config.noCalendar){if(e.appendChild((D.monthNav=s("div","flatpickr-months"),D.yearElements=[],D.monthElements=[],D.prevMonthNav=s("span","flatpickr-prev-month"),D.prevMonthNav.innerHTML=D.config.prevArrow,D.nextMonthNav=s("span","flatpickr-next-month"),D.nextMonthNav.innerHTML=D.config.nextArrow,U(),Object.defineProperty(D,"_hidePrevMonthArrow",{get:function(){return D.__hidePrevMonthArrow},set:function(e){D.__hidePrevMonthArrow!==e&&(d(D.prevMonthNav,"flatpickr-disabled",e),D.__hidePrevMonthArrow=e)}}),Object.defineProperty(D,"_hideNextMonthArrow",{get:function(){return D.__hideNextMonthArrow},set:function(e){D.__hideNextMonthArrow!==e&&(d(D.nextMonthNav,"flatpickr-disabled",e),D.__hideNextMonthArrow=e)}}),D.currentYearElement=D.yearElements[0],ve(),D.monthNav)),D.innerContainer=s("div","flatpickr-innerContainer"),D.config.weekNumbers){var n=function(){D.calendarContainer.classList.add("hasWeeks");var e=s("div","flatpickr-weekwrapper");e.appendChild(s("span","flatpickr-weekday",D.l10n.weekAbbreviation));var n=s("div","flatpickr-weeks");return e.appendChild(n),{weekWrapper:e,weekNumbers:n}}(),t=n.weekWrapper,a=n.weekNumbers;D.innerContainer.appendChild(t),D.weekNumbers=a,D.weekWrapper=t}D.rContainer=s("div","flatpickr-rContainer"),D.rContainer.appendChild(q()),D.daysContainer||(D.daysContainer=s("div","flatpickr-days"),D.daysContainer.tabIndex=-1),B(),D.rContainer.appendChild(D.daysContainer),D.innerContainer.appendChild(D.rContainer),e.appendChild(D.innerContainer)}D.config.enableTime&&e.appendChild(function(){D.calendarContainer.classList.add("hasTime"),D.config.noCalendar&&D.calendarContainer.classList.add("noCalendar");D.timeContainer=s("div","flatpickr-time"),D.timeContainer.tabIndex=-1;var e=s("span","flatpickr-time-separator",":"),n=f("flatpickr-hour",{"aria-label":D.l10n.hourAriaLabel});D.hourElement=n.getElementsByTagName("input")[0];var t=f("flatpickr-minute",{"aria-label":D.l10n.minuteAriaLabel});D.minuteElement=t.getElementsByTagName("input")[0],D.hourElement.tabIndex=D.minuteElement.tabIndex=-1,D.hourElement.value=o(D.latestSelectedDateObj?D.latestSelectedDateObj.getHours():D.config.time_24hr?D.config.defaultHour:function(e){switch(e%24){case 0:case 12:return 12;default:return e%12}}(D.config.defaultHour)),D.minuteElement.value=o(D.latestSelectedDateObj?D.latestSelectedDateObj.getMinutes():D.config.defaultMinute),D.hourElement.setAttribute("step",D.config.hourIncrement.toString()),D.minuteElement.setAttribute("step",D.config.minuteIncrement.toString()),D.hourElement.setAttribute("min",D.config.time_24hr?"0":"1"),D.hourElement.setAttribute("max",D.config.time_24hr?"23":"12"),D.minuteElement.setAttribute("min","0"),D.minuteElement.setAttribute("max","59"),D.timeContainer.appendChild(n),D.timeContainer.appendChild(e),D.timeContainer.appendChild(t),D.config.time_24hr&&D.timeContainer.classList.add("time24hr");if(D.config.enableSeconds){D.timeContainer.classList.add("hasSeconds");var a=f("flatpickr-second");D.secondElement=a.getElementsByTagName("input")[0],D.secondElement.value=o(D.latestSelectedDateObj?D.latestSelectedDateObj.getSeconds():D.config.defaultSeconds),D.secondElement.setAttribute("step",D.minuteElement.getAttribute("step")),D.secondElement.setAttribute("min","0"),D.secondElement.setAttribute("max","59"),D.timeContainer.appendChild(s("span","flatpickr-time-separator",":")),D.timeContainer.appendChild(a)}D.config.time_24hr||(D.amPM=s("span","flatpickr-am-pm",D.l10n.amPM[r((D.latestSelectedDateObj?D.hourElement.value:D.config.defaultHour)>11)]),D.amPM.title=D.l10n.toggleTitle,D.amPM.tabIndex=-1,D.timeContainer.appendChild(D.amPM));return D.timeContainer}());d(D.calendarContainer,"rangeMode","range"===D.config.mode),d(D.calendarContainer,"animate",!0===D.config.animate),d(D.calendarContainer,"multiMonth",D.config.showMonths>1),D.calendarContainer.appendChild(e);var i=void 0!==D.config.appendTo&&void 0!==D.config.appendTo.nodeType;if((D.config.inline||D.config.static)&&(D.calendarContainer.classList.add(D.config.inline?"inline":"static"),D.config.inline&&(!i&&D.element.parentNode?D.element.parentNode.insertBefore(D.calendarContainer,D._input.nextSibling):void 0!==D.config.appendTo&&D.config.appendTo.appendChild(D.calendarContainer)),D.config.static)){var l=s("div","flatpickr-wrapper");D.element.parentNode&&D.element.parentNode.insertBefore(l,D.element),l.appendChild(D.element),D.altInput&&l.appendChild(D.altInput),l.appendChild(D.calendarContainer)}D.config.static||D.config.inline||(void 0!==D.config.appendTo?D.config.appendTo:window.document.body).appendChild(D.calendarContainer)}(),function(){D.config.wrap&&["open","close","toggle","clear"].forEach((function(e){Array.prototype.forEach.call(D.element.querySelectorAll("[data-"+e+"]"),(function(n){return F(n,"click",D[e])}))}));if(D.isMobile)return void function(){var e=D.config.enableTime?D.config.noCalendar?"time":"datetime-local":"date";D.mobileInput=s("input",D.input.className+" flatpickr-mobile"),D.mobileInput.tabIndex=1,D.mobileInput.type=e,D.mobileInput.disabled=D.input.disabled,D.mobileInput.required=D.input.required,D.mobileInput.placeholder=D.input.placeholder,D.mobileFormatStr="datetime-local"===e?"Y-m-d\\TH:i:S":"date"===e?"Y-m-d":"H:i:S",D.selectedDates.length>0&&(D.mobileInput.defaultValue=D.mobileInput.value=D.formatDate(D.selectedDates[0],D.mobileFormatStr));D.config.minDate&&(D.mobileInput.min=D.formatDate(D.config.minDate,"Y-m-d"));D.config.maxDate&&(D.mobileInput.max=D.formatDate(D.config.maxDate,"Y-m-d"));D.input.getAttribute("step")&&(D.mobileInput.step=String(D.input.getAttribute("step")));D.input.type="hidden",void 0!==D.altInput&&(D.altInput.type="hidden");try{D.input.parentNode&&D.input.parentNode.insertBefore(D.mobileInput,D.input.nextSibling)}catch(e){}F(D.mobileInput,"change",(function(e){D.setDate(m(e).value,!1,D.mobileFormatStr),ge("onChange"),ge("onClose")}))}();var e=l(ae,50);D._debouncedChange=l(N,300),D.daysContainer&&!/iPhone|iPad|iPod/i.test(navigator.userAgent)&&F(D.daysContainer,"mouseover",(function(e){"range"===D.config.mode&&te(m(e))}));F(window.document.body,"keydown",ne),D.config.inline||D.config.static||F(window,"resize",e);void 0!==window.ontouchstart?F(window.document,"touchstart",V):F(window.document,"click",V);F(window.document,"focus",V,{capture:!0}),!0===D.config.clickOpens&&(F(D._input,"focus",D.open),F(D._input,"click",D.open));void 0!==D.daysContainer&&(F(D.monthNav,"click",be),F(D.monthNav,["keyup","increment"],O),F(D.daysContainer,"click",se));if(void 0!==D.timeContainer&&void 0!==D.minuteElement&&void 0!==D.hourElement){F(D.timeContainer,["increment"],k),F(D.timeContainer,"blur",k,{capture:!0}),F(D.timeContainer,"click",P),F([D.hourElement,D.minuteElement],["focus","click"],(function(e){return m(e).select()})),void 0!==D.secondElement&&F(D.secondElement,"focus",(function(){return D.secondElement&&D.secondElement.select()})),void 0!==D.amPM&&F(D.amPM,"click",(function(e){k(e),N()}))}D.config.allowInput&&F(D._input,"blur",ee)}(),(D.selectedDates.length||D.config.noCalendar)&&(D.config.enableTime&&I(D.config.noCalendar?D.latestSelectedDateObj||D.config.minDate:void 0),we(!1)),x();var n=/^((?!chrome|android).)*safari/i.test(navigator.userAgent);!D.isMobile&&n&&le(),ge("onReady")}(),D}function x(e,n){for(var t=Array.prototype.slice.call(e).filter((function(e){return e instanceof HTMLElement})),a=[],i=0;i<t.length;i++){var o=t[i];try{if(null!==o.getAttribute("data-fp-omit"))continue;void 0!==o._flatpickr&&(o._flatpickr.destroy(),o._flatpickr=void 0),o._flatpickr=y(o,n||{}),a.push(o._flatpickr)}catch(e){console.error(e)}}return 1===a.length?a[0]:a}"undefined"!=typeof HTMLElement&&"undefined"!=typeof HTMLCollection&&"undefined"!=typeof NodeList&&(HTMLCollection.prototype.flatpickr=NodeList.prototype.flatpickr=function(e){return x(this,e)},HTMLElement.prototype.flatpickr=function(e){return x([this],e)});var E=function(e,n){return"string"==typeof e?x(window.document.querySelectorAll(e),n):e instanceof Node?x([e],n):x(e,n)};return E.defaultConfig={},E.l10ns={en:e({},i),default:e({},i)},E.localize=function(n){E.l10ns.default=e(e({},E.l10ns.default),n)},E.setDefaults=function(n){E.defaultConfig=e(e({},E.defaultConfig),n)},E.parseDate=b({}),E.formatDate=w({}),E.compareDates=C,"undefined"!=typeof jQuery&&void 0!==jQuery.fn&&(jQuery.fn.flatpickr=function(e){return x(this,e)}),Date.prototype.fp_incr=function(e){return new Date(this.getFullYear(),this.getMonth(),this.getDate()+("string"==typeof e?parseInt(e,10):e))},"undefined"!=typeof window&&(window.flatpickr=E),E}));
\ No newline at end of file
diff --git a/admin/js/vendors/flatpickr/ie.css b/admin/js/vendors/flatpickr/ie.css
new file mode 100644 (file)
index 0000000..30d7f76
--- /dev/null
@@ -0,0 +1,13 @@
+span.flatpickr-weekday {
+  display: inline-block;
+  width: 14.2857143%;
+}
+span.flatpickr-day {
+  width: 14.2857143%;
+  margin: 0 2.491071428571428px;
+}
+@media screen and (min-width: 0\0) {
+  div.flatpickr-current-month {
+    padding-top: 0px !important;
+  }
+}
diff --git a/admin/js/vendors/flatpickr/index.d.ts b/admin/js/vendors/flatpickr/index.d.ts
new file mode 100644 (file)
index 0000000..a3893d5
--- /dev/null
@@ -0,0 +1,4 @@
+import { FlatpickrFn } from "./types/instance";
+import "./utils/polyfills";
+declare var flatpickr: FlatpickrFn;
+export default flatpickr;
diff --git a/admin/js/vendors/flatpickr/l10n/de.d.ts b/admin/js/vendors/flatpickr/l10n/de.d.ts
new file mode 100644 (file)
index 0000000..a0b30b4
--- /dev/null
@@ -0,0 +1,69 @@
+import { CustomLocale } from "../types/locale";
+export declare const German: CustomLocale;
+declare const _default: {
+    default?: CustomLocale | undefined;
+    hr?: CustomLocale | undefined;
+    th?: CustomLocale | undefined;
+    tr?: CustomLocale | undefined;
+    ar?: CustomLocale | undefined;
+    at?: CustomLocale | undefined;
+    az?: CustomLocale | undefined;
+    be?: CustomLocale | undefined;
+    bg?: CustomLocale | undefined;
+    bn?: CustomLocale | undefined;
+    bs?: CustomLocale | undefined;
+    ca?: CustomLocale | undefined;
+    cat?: CustomLocale | undefined;
+    cs?: CustomLocale | undefined;
+    cy?: CustomLocale | undefined;
+    da?: CustomLocale | undefined;
+    de?: CustomLocale | undefined;
+    en?: CustomLocale | undefined;
+    eo?: CustomLocale | undefined;
+    es?: CustomLocale | undefined;
+    et?: CustomLocale | undefined;
+    fa?: CustomLocale | undefined;
+    fi?: CustomLocale | undefined;
+    fo?: CustomLocale | undefined;
+    fr?: CustomLocale | undefined;
+    gr?: CustomLocale | undefined;
+    he?: CustomLocale | undefined;
+    hi?: CustomLocale | undefined;
+    hu?: CustomLocale | undefined;
+    id?: CustomLocale | undefined;
+    is?: CustomLocale | undefined;
+    it?: CustomLocale | undefined;
+    ja?: CustomLocale | undefined;
+    ka?: CustomLocale | undefined;
+    ko?: CustomLocale | undefined;
+    km?: CustomLocale | undefined;
+    kz?: CustomLocale | undefined;
+    lt?: CustomLocale | undefined;
+    lv?: CustomLocale | undefined;
+    mk?: CustomLocale | undefined;
+    mn?: CustomLocale | undefined;
+    ms?: CustomLocale | undefined;
+    my?: CustomLocale | undefined;
+    nl?: CustomLocale | undefined;
+    no?: CustomLocale | undefined;
+    pa?: CustomLocale | undefined;
+    pl?: CustomLocale | undefined;
+    pt?: CustomLocale | undefined;
+    ro?: CustomLocale | undefined;
+    ru?: CustomLocale | undefined;
+    si?: CustomLocale | undefined;
+    sk?: CustomLocale | undefined;
+    sl?: CustomLocale | undefined;
+    sq?: CustomLocale | undefined;
+    sr?: CustomLocale | undefined;
+    sv?: CustomLocale | undefined;
+    uk?: CustomLocale | undefined;
+    vn?: CustomLocale | undefined;
+    zh?: CustomLocale | undefined;
+    uz?: CustomLocale | undefined;
+    uz_latn?: CustomLocale | undefined;
+    zh_tw?: CustomLocale | undefined;
+} & {
+    default: import("../types/locale").Locale;
+};
+export default _default;
diff --git a/admin/js/vendors/flatpickr/l10n/de.js b/admin/js/vendors/flatpickr/l10n/de.js
new file mode 100644 (file)
index 0000000..75cd041
--- /dev/null
@@ -0,0 +1,70 @@
+(function (global, factory) {
+  typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
+  typeof define === 'function' && define.amd ? define(['exports'], factory) :
+  (global = global || self, factory(global.de = {}));
+}(this, (function (exports) { 'use strict';
+
+  var fp = typeof window !== "undefined" && window.flatpickr !== undefined
+      ? window.flatpickr
+      : {
+          l10ns: {},
+      };
+  var German = {
+      weekdays: {
+          shorthand: ["So", "Mo", "Di", "Mi", "Do", "Fr", "Sa"],
+          longhand: [
+              "Sonntag",
+              "Montag",
+              "Dienstag",
+              "Mittwoch",
+              "Donnerstag",
+              "Freitag",
+              "Samstag",
+          ],
+      },
+      months: {
+          shorthand: [
+              "Jan",
+              "Feb",
+              "Mär",
+              "Apr",
+              "Mai",
+              "Jun",
+              "Jul",
+              "Aug",
+              "Sep",
+              "Okt",
+              "Nov",
+              "Dez",
+          ],
+          longhand: [
+              "Januar",
+              "Februar",
+              "März",
+              "April",
+              "Mai",
+              "Juni",
+              "Juli",
+              "August",
+              "September",
+              "Oktober",
+              "November",
+              "Dezember",
+          ],
+      },
+      firstDayOfWeek: 1,
+      weekAbbreviation: "KW",
+      rangeSeparator: " bis ",
+      scrollTitle: "Zum Ändern scrollen",
+      toggleTitle: "Zum Umschalten klicken",
+      time_24hr: true,
+  };
+  fp.l10ns.de = German;
+  var de = fp.l10ns;
+
+  exports.German = German;
+  exports.default = de;
+
+  Object.defineProperty(exports, '__esModule', { value: true });
+
+})));
diff --git a/admin/js/vendors/flatpickr/l10n/default.d.ts b/admin/js/vendors/flatpickr/l10n/default.d.ts
new file mode 100644 (file)
index 0000000..ba7d9bb
--- /dev/null
@@ -0,0 +1,3 @@
+import { Locale } from "../types/locale";
+export declare const english: Locale;
+export default english;
diff --git a/admin/js/vendors/flatpickr/l10n/default.js b/admin/js/vendors/flatpickr/l10n/default.js
new file mode 100644 (file)
index 0000000..5a92478
--- /dev/null
@@ -0,0 +1,84 @@
+(function (global, factory) {
+  typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
+  typeof define === 'function' && define.amd ? define(['exports'], factory) :
+  (global = global || self, factory(global.default = {}));
+}(this, (function (exports) { 'use strict';
+
+  var english = {
+      weekdays: {
+          shorthand: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"],
+          longhand: [
+              "Sunday",
+              "Monday",
+              "Tuesday",
+              "Wednesday",
+              "Thursday",
+              "Friday",
+              "Saturday",
+          ],
+      },
+      months: {
+          shorthand: [
+              "Jan",
+              "Feb",
+              "Mar",
+              "Apr",
+              "May",
+              "Jun",
+              "Jul",
+              "Aug",
+              "Sep",
+              "Oct",
+              "Nov",
+              "Dec",
+          ],
+          longhand: [
+              "January",
+              "February",
+              "March",
+              "April",
+              "May",
+              "June",
+              "July",
+              "August",
+              "September",
+              "October",
+              "November",
+              "December",
+          ],
+      },
+      daysInMonth: [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31],
+      firstDayOfWeek: 0,
+      ordinal: function (nth) {
+          var s = nth % 100;
+          if (s > 3 && s < 21)
+              return "th";
+          switch (s % 10) {
+              case 1:
+                  return "st";
+              case 2:
+                  return "nd";
+              case 3:
+                  return "rd";
+              default:
+                  return "th";
+          }
+      },
+      rangeSeparator: " to ",
+      weekAbbreviation: "Wk",
+      scrollTitle: "Scroll to increment",
+      toggleTitle: "Click to toggle",
+      amPM: ["AM", "PM"],
+      yearAriaLabel: "Year",
+      monthAriaLabel: "Month",
+      hourAriaLabel: "Hour",
+      minuteAriaLabel: "Minute",
+      time_24hr: false,
+  };
+
+  exports.default = english;
+  exports.english = english;
+
+  Object.defineProperty(exports, '__esModule', { value: true });
+
+})));
diff --git a/admin/js/vendors/flatpickr/l10n/fr.d.ts b/admin/js/vendors/flatpickr/l10n/fr.d.ts
new file mode 100644 (file)
index 0000000..6fcd191
--- /dev/null
@@ -0,0 +1,69 @@
+import { CustomLocale } from "../types/locale";
+export declare const French: CustomLocale;
+declare const _default: {
+    default?: CustomLocale | undefined;
+    hr?: CustomLocale | undefined;
+    th?: CustomLocale | undefined;
+    tr?: CustomLocale | undefined;
+    ar?: CustomLocale | undefined;
+    at?: CustomLocale | undefined;
+    az?: CustomLocale | undefined;
+    be?: CustomLocale | undefined;
+    bg?: CustomLocale | undefined;
+    bn?: CustomLocale | undefined;
+    bs?: CustomLocale | undefined;
+    ca?: CustomLocale | undefined;
+    cat?: CustomLocale | undefined;
+    cs?: CustomLocale | undefined;
+    cy?: CustomLocale | undefined;
+    da?: CustomLocale | undefined;
+    de?: CustomLocale | undefined;
+    en?: CustomLocale | undefined;
+    eo?: CustomLocale | undefined;
+    es?: CustomLocale | undefined;
+    et?: CustomLocale | undefined;
+    fa?: CustomLocale | undefined;
+    fi?: CustomLocale | undefined;
+    fo?: CustomLocale | undefined;
+    fr?: CustomLocale | undefined;
+    gr?: CustomLocale | undefined;
+    he?: CustomLocale | undefined;
+    hi?: CustomLocale | undefined;
+    hu?: CustomLocale | undefined;
+    id?: CustomLocale | undefined;
+    is?: CustomLocale | undefined;
+    it?: CustomLocale | undefined;
+    ja?: CustomLocale | undefined;
+    ka?: CustomLocale | undefined;
+    ko?: CustomLocale | undefined;
+    km?: CustomLocale | undefined;
+    kz?: CustomLocale | undefined;
+    lt?: CustomLocale | undefined;
+    lv?: CustomLocale | undefined;
+    mk?: CustomLocale | undefined;
+    mn?: CustomLocale | undefined;
+    ms?: CustomLocale | undefined;
+    my?: CustomLocale | undefined;
+    nl?: CustomLocale | undefined;
+    no?: CustomLocale | undefined;
+    pa?: CustomLocale | undefined;
+    pl?: CustomLocale | undefined;
+    pt?: CustomLocale | undefined;
+    ro?: CustomLocale | undefined;
+    ru?: CustomLocale | undefined;
+    si?: CustomLocale | undefined;
+    sk?: CustomLocale | undefined;
+    sl?: CustomLocale | undefined;
+    sq?: CustomLocale | undefined;
+    sr?: CustomLocale | undefined;
+    sv?: CustomLocale | undefined;
+    uk?: CustomLocale | undefined;
+    vn?: CustomLocale | undefined;
+    zh?: CustomLocale | undefined;
+    uz?: CustomLocale | undefined;
+    uz_latn?: CustomLocale | undefined;
+    zh_tw?: CustomLocale | undefined;
+} & {
+    default: import("../types/locale").Locale;
+};
+export default _default;
diff --git a/admin/js/vendors/flatpickr/l10n/fr.js b/admin/js/vendors/flatpickr/l10n/fr.js
new file mode 100644 (file)
index 0000000..4a63cfe
--- /dev/null
@@ -0,0 +1,75 @@
+(function (global, factory) {
+  typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
+  typeof define === 'function' && define.amd ? define(['exports'], factory) :
+  (global = global || self, factory(global.fr = {}));
+}(this, (function (exports) { 'use strict';
+
+  var fp = typeof window !== "undefined" && window.flatpickr !== undefined
+      ? window.flatpickr
+      : {
+          l10ns: {},
+      };
+  var French = {
+      firstDayOfWeek: 1,
+      weekdays: {
+          shorthand: ["dim", "lun", "mar", "mer", "jeu", "ven", "sam"],
+          longhand: [
+              "dimanche",
+              "lundi",
+              "mardi",
+              "mercredi",
+              "jeudi",
+              "vendredi",
+              "samedi",
+          ],
+      },
+      months: {
+          shorthand: [
+              "janv",
+              "févr",
+              "mars",
+              "avr",
+              "mai",
+              "juin",
+              "juil",
+              "août",
+              "sept",
+              "oct",
+              "nov",
+              "déc",
+          ],
+          longhand: [
+              "janvier",
+              "février",
+              "mars",
+              "avril",
+              "mai",
+              "juin",
+              "juillet",
+              "août",
+              "septembre",
+              "octobre",
+              "novembre",
+              "décembre",
+          ],
+      },
+      ordinal: function (nth) {
+          if (nth > 1)
+              return "";
+          return "er";
+      },
+      rangeSeparator: " au ",
+      weekAbbreviation: "Sem",
+      scrollTitle: "Défiler pour augmenter la valeur",
+      toggleTitle: "Cliquer pour basculer",
+      time_24hr: true,
+  };
+  fp.l10ns.fr = French;
+  var fr = fp.l10ns;
+
+  exports.French = French;
+  exports.default = fr;
+
+  Object.defineProperty(exports, '__esModule', { value: true });
+
+})));
diff --git a/admin/js/vendors/flatpickr/l10n/index.d.ts b/admin/js/vendors/flatpickr/l10n/index.d.ts
new file mode 100644 (file)
index 0000000..8b2ef7d
--- /dev/null
@@ -0,0 +1,3 @@
+import { key, CustomLocale } from "../types/locale";
+declare const l10n: Record<key, CustomLocale>;
+export default l10n;
diff --git a/admin/js/vendors/flatpickr/l10n/index.js b/admin/js/vendors/flatpickr/l10n/index.js
new file mode 100644 (file)
index 0000000..c197ead
--- /dev/null
@@ -0,0 +1,3594 @@
+(function (global, factory) {
+    typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
+    typeof define === 'function' && define.amd ? define(['exports'], factory) :
+    (global = global || self, factory(global.index = {}));
+}(this, (function (exports) { 'use strict';
+
+    /*! *****************************************************************************
+    Copyright (c) Microsoft Corporation.
+
+    Permission to use, copy, modify, and/or distribute this software for any
+    purpose with or without fee is hereby granted.
+
+    THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
+    REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+    AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
+    INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+    LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
+    OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+    PERFORMANCE OF THIS SOFTWARE.
+    ***************************************************************************** */
+
+    var __assign = function() {
+        __assign = Object.assign || function __assign(t) {
+            for (var s, i = 1, n = arguments.length; i < n; i++) {
+                s = arguments[i];
+                for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
+            }
+            return t;
+        };
+        return __assign.apply(this, arguments);
+    };
+
+    var fp = typeof window !== "undefined" && window.flatpickr !== undefined
+        ? window.flatpickr
+        : {
+            l10ns: {},
+        };
+    var Arabic = {
+        weekdays: {
+            shorthand: ["أحد", "اثنين", "ثلاثاء", "أربعاء", "خميس", "جمعة", "سبت"],
+            longhand: [
+                "الأحد",
+                "الاثنين",
+                "الثلاثاء",
+                "الأربعاء",
+                "الخميس",
+                "الجمعة",
+                "السبت",
+            ],
+        },
+        months: {
+            shorthand: ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"],
+            longhand: [
+                "يناير",
+                "فبراير",
+                "مارس",
+                "أبريل",
+                "مايو",
+                "يونيو",
+                "يوليو",
+                "أغسطس",
+                "سبتمبر",
+                "أكتوبر",
+                "نوفمبر",
+                "ديسمبر",
+            ],
+        },
+        rangeSeparator: " - ",
+    };
+    fp.l10ns.ar = Arabic;
+    fp.l10ns;
+
+    var fp$1 = typeof window !== "undefined" && window.flatpickr !== undefined
+        ? window.flatpickr
+        : {
+            l10ns: {},
+        };
+    var Austria = {
+        weekdays: {
+            shorthand: ["So", "Mo", "Di", "Mi", "Do", "Fr", "Sa"],
+            longhand: [
+                "Sonntag",
+                "Montag",
+                "Dienstag",
+                "Mittwoch",
+                "Donnerstag",
+                "Freitag",
+                "Samstag",
+            ],
+        },
+        months: {
+            shorthand: [
+                "Jän",
+                "Feb",
+                "Mär",
+                "Apr",
+                "Mai",
+                "Jun",
+                "Jul",
+                "Aug",
+                "Sep",
+                "Okt",
+                "Nov",
+                "Dez",
+            ],
+            longhand: [
+                "Jänner",
+                "Februar",
+                "März",
+                "April",
+                "Mai",
+                "Juni",
+                "Juli",
+                "August",
+                "September",
+                "Oktober",
+                "November",
+                "Dezember",
+            ],
+        },
+        firstDayOfWeek: 1,
+        weekAbbreviation: "KW",
+        rangeSeparator: " bis ",
+        scrollTitle: "Zum Ändern scrollen",
+        toggleTitle: "Zum Umschalten klicken",
+    };
+    fp$1.l10ns.at = Austria;
+    fp$1.l10ns;
+
+    var fp$2 = typeof window !== "undefined" && window.flatpickr !== undefined
+        ? window.flatpickr
+        : {
+            l10ns: {},
+        };
+    var Azerbaijan = {
+        weekdays: {
+            shorthand: ["B.", "B.e.", "Ç.a.", "Ç.", "C.a.", "C.", "Ş."],
+            longhand: [
+                "Bazar",
+                "Bazar ertəsi",
+                "Çərşənbə axşamı",
+                "Çərşənbə",
+                "Cümə axşamı",
+                "Cümə",
+                "Şənbə",
+            ],
+        },
+        months: {
+            shorthand: [
+                "Yan",
+                "Fev",
+                "Mar",
+                "Apr",
+                "May",
+                "İyn",
+                "İyl",
+                "Avq",
+                "Sen",
+                "Okt",
+                "Noy",
+                "Dek",
+            ],
+            longhand: [
+                "Yanvar",
+                "Fevral",
+                "Mart",
+                "Aprel",
+                "May",
+                "İyun",
+                "İyul",
+                "Avqust",
+                "Sentyabr",
+                "Oktyabr",
+                "Noyabr",
+                "Dekabr",
+            ],
+        },
+        firstDayOfWeek: 1,
+        ordinal: function () {
+            return ".";
+        },
+        rangeSeparator: " - ",
+        weekAbbreviation: "Hf",
+        scrollTitle: "Artırmaq üçün sürüşdürün",
+        toggleTitle: "Aç / Bağla",
+        amPM: ["GƏ", "GS"],
+        time_24hr: true,
+    };
+    fp$2.l10ns.az = Azerbaijan;
+    fp$2.l10ns;
+
+    var fp$3 = typeof window !== "undefined" && window.flatpickr !== undefined
+        ? window.flatpickr
+        : {
+            l10ns: {},
+        };
+    var Belarusian = {
+        weekdays: {
+            shorthand: ["Нд", "Пн", "Аў", "Ср", "Чц", "Пт", "Сб"],
+            longhand: [
+                "Нядзеля",
+                "Панядзелак",
+                "Аўторак",
+                "Серада",
+                "Чацвер",
+                "Пятніца",
+                "Субота",
+            ],
+        },
+        months: {
+            shorthand: [
+                "Сту",
+                "Лют",
+                "Сак",
+                "Кра",
+                "Тра",
+                "Чэр",
+                "Ліп",
+                "Жні",
+                "Вер",
+                "Кас",
+                "Ліс",
+                "Сне",
+            ],
+            longhand: [
+                "Студзень",
+                "Люты",
+                "Сакавік",
+                "Красавік",
+                "Травень",
+                "Чэрвень",
+                "Ліпень",
+                "Жнівень",
+                "Верасень",
+                "Кастрычнік",
+                "Лістапад",
+                "Снежань",
+            ],
+        },
+        firstDayOfWeek: 1,
+        ordinal: function () {
+            return "";
+        },
+        rangeSeparator: " — ",
+        weekAbbreviation: "Тыд.",
+        scrollTitle: "Пракруціце для павелічэння",
+        toggleTitle: "Націсніце для пераключэння",
+        amPM: ["ДП", "ПП"],
+        yearAriaLabel: "Год",
+        time_24hr: true,
+    };
+    fp$3.l10ns.be = Belarusian;
+    fp$3.l10ns;
+
+    var fp$4 = typeof window !== "undefined" && window.flatpickr !== undefined
+        ? window.flatpickr
+        : {
+            l10ns: {},
+        };
+    var Bosnian = {
+        firstDayOfWeek: 1,
+        weekdays: {
+            shorthand: ["Ned", "Pon", "Uto", "Sri", "Čet", "Pet", "Sub"],
+            longhand: [
+                "Nedjelja",
+                "Ponedjeljak",
+                "Utorak",
+                "Srijeda",
+                "Četvrtak",
+                "Petak",
+                "Subota",
+            ],
+        },
+        months: {
+            shorthand: [
+                "Jan",
+                "Feb",
+                "Mar",
+                "Apr",
+                "Maj",
+                "Jun",
+                "Jul",
+                "Avg",
+                "Sep",
+                "Okt",
+                "Nov",
+                "Dec",
+            ],
+            longhand: [
+                "Januar",
+                "Februar",
+                "Mart",
+                "April",
+                "Maj",
+                "Juni",
+                "Juli",
+                "Avgust",
+                "Septembar",
+                "Oktobar",
+                "Novembar",
+                "Decembar",
+            ],
+        },
+        time_24hr: true,
+    };
+    fp$4.l10ns.bs = Bosnian;
+    fp$4.l10ns;
+
+    var fp$5 = typeof window !== "undefined" && window.flatpickr !== undefined
+        ? window.flatpickr
+        : {
+            l10ns: {},
+        };
+    var Bulgarian = {
+        weekdays: {
+            shorthand: ["Нд", "Пн", "Вт", "Ср", "Чт", "Пт", "Сб"],
+            longhand: [
+                "Неделя",
+                "Понеделник",
+                "Вторник",
+                "Сряда",
+                "Четвъртък",
+                "Петък",
+                "Събота",
+            ],
+        },
+        months: {
+            shorthand: [
+                "Яну",
+                "Фев",
+                "Март",
+                "Апр",
+                "Май",
+                "Юни",
+                "Юли",
+                "Авг",
+                "Сеп",
+                "Окт",
+                "Ное",
+                "Дек",
+            ],
+            longhand: [
+                "Януари",
+                "Февруари",
+                "Март",
+                "Април",
+                "Май",
+                "Юни",
+                "Юли",
+                "Август",
+                "Септември",
+                "Октомври",
+                "Ноември",
+                "Декември",
+            ],
+        },
+        time_24hr: true,
+        firstDayOfWeek: 1,
+    };
+    fp$5.l10ns.bg = Bulgarian;
+    fp$5.l10ns;
+
+    var fp$6 = typeof window !== "undefined" && window.flatpickr !== undefined
+        ? window.flatpickr
+        : {
+            l10ns: {},
+        };
+    var Bangla = {
+        weekdays: {
+            shorthand: ["রবি", "সোম", "মঙ্গল", "বুধ", "বৃহস্পতি", "শুক্র", "শনি"],
+            longhand: [
+                "রবিবার",
+                "সোমবার",
+                "মঙ্গলবার",
+                "বুধবার",
+                "বৃহস্পতিবার",
+                "শুক্রবার",
+                "শনিবার",
+            ],
+        },
+        months: {
+            shorthand: [
+                "জানু",
+                "ফেব্রু",
+                "মার্চ",
+                "এপ্রিল",
+                "মে",
+                "জুন",
+                "জুলাই",
+                "আগ",
+                "সেপ্টে",
+                "অক্টো",
+                "নভে",
+                "ডিসে",
+            ],
+            longhand: [
+                "জানুয়ারী",
+                "ফেব্রুয়ারী",
+                "মার্চ",
+                "এপ্রিল",
+                "মে",
+                "জুন",
+                "জুলাই",
+                "আগস্ট",
+                "সেপ্টেম্বর",
+                "অক্টোবর",
+                "নভেম্বর",
+                "ডিসেম্বর",
+            ],
+        },
+    };
+    fp$6.l10ns.bn = Bangla;
+    fp$6.l10ns;
+
+    var fp$7 = typeof window !== "undefined" && window.flatpickr !== undefined
+        ? window.flatpickr
+        : {
+            l10ns: {},
+        };
+    var Catalan = {
+        weekdays: {
+            shorthand: ["Dg", "Dl", "Dt", "Dc", "Dj", "Dv", "Ds"],
+            longhand: [
+                "Diumenge",
+                "Dilluns",
+                "Dimarts",
+                "Dimecres",
+                "Dijous",
+                "Divendres",
+                "Dissabte",
+            ],
+        },
+        months: {
+            shorthand: [
+                "Gen",
+                "Febr",
+                "Març",
+                "Abr",
+                "Maig",
+                "Juny",
+                "Jul",
+                "Ag",
+                "Set",
+                "Oct",
+                "Nov",
+                "Des",
+            ],
+            longhand: [
+                "Gener",
+                "Febrer",
+                "Març",
+                "Abril",
+                "Maig",
+                "Juny",
+                "Juliol",
+                "Agost",
+                "Setembre",
+                "Octubre",
+                "Novembre",
+                "Desembre",
+            ],
+        },
+        ordinal: function (nth) {
+            var s = nth % 100;
+            if (s > 3 && s < 21)
+                return "è";
+            switch (s % 10) {
+                case 1:
+                    return "r";
+                case 2:
+                    return "n";
+                case 3:
+                    return "r";
+                case 4:
+                    return "t";
+                default:
+                    return "è";
+            }
+        },
+        firstDayOfWeek: 1,
+        time_24hr: true,
+    };
+    fp$7.l10ns.cat = fp$7.l10ns.ca = Catalan;
+    fp$7.l10ns;
+
+    var fp$8 = typeof window !== "undefined" && window.flatpickr !== undefined
+        ? window.flatpickr
+        : {
+            l10ns: {},
+        };
+    var Czech = {
+        weekdays: {
+            shorthand: ["Ne", "Po", "Út", "St", "Čt", "Pá", "So"],
+            longhand: [
+                "Neděle",
+                "Pondělí",
+                "Úterý",
+                "Středa",
+                "Čtvrtek",
+                "Pátek",
+                "Sobota",
+            ],
+        },
+        months: {
+            shorthand: [
+                "Led",
+                "Ún",
+                "Bře",
+                "Dub",
+                "Kvě",
+                "Čer",
+                "Čvc",
+                "Srp",
+                "Zář",
+                "Říj",
+                "Lis",
+                "Pro",
+            ],
+            longhand: [
+                "Leden",
+                "Únor",
+                "Březen",
+                "Duben",
+                "Květen",
+                "Červen",
+                "Červenec",
+                "Srpen",
+                "Září",
+                "Říjen",
+                "Listopad",
+                "Prosinec",
+            ],
+        },
+        firstDayOfWeek: 1,
+        ordinal: function () {
+            return ".";
+        },
+        rangeSeparator: " do ",
+        weekAbbreviation: "Týd.",
+        scrollTitle: "Rolujte pro změnu",
+        toggleTitle: "Přepnout dopoledne/odpoledne",
+        amPM: ["dop.", "odp."],
+        yearAriaLabel: "Rok",
+        time_24hr: true,
+    };
+    fp$8.l10ns.cs = Czech;
+    fp$8.l10ns;
+
+    var fp$9 = typeof window !== "undefined" && window.flatpickr !== undefined
+        ? window.flatpickr
+        : {
+            l10ns: {},
+        };
+    var Welsh = {
+        weekdays: {
+            shorthand: ["Sul", "Llun", "Maw", "Mer", "Iau", "Gwe", "Sad"],
+            longhand: [
+                "Dydd Sul",
+                "Dydd Llun",
+                "Dydd Mawrth",
+                "Dydd Mercher",
+                "Dydd Iau",
+                "Dydd Gwener",
+                "Dydd Sadwrn",
+            ],
+        },
+        months: {
+            shorthand: [
+                "Ion",
+                "Chwef",
+                "Maw",
+                "Ebr",
+                "Mai",
+                "Meh",
+                "Gorff",
+                "Awst",
+                "Medi",
+                "Hyd",
+                "Tach",
+                "Rhag",
+            ],
+            longhand: [
+                "Ionawr",
+                "Chwefror",
+                "Mawrth",
+                "Ebrill",
+                "Mai",
+                "Mehefin",
+                "Gorffennaf",
+                "Awst",
+                "Medi",
+                "Hydref",
+                "Tachwedd",
+                "Rhagfyr",
+            ],
+        },
+        firstDayOfWeek: 1,
+        ordinal: function (nth) {
+            if (nth === 1)
+                return "af";
+            if (nth === 2)
+                return "ail";
+            if (nth === 3 || nth === 4)
+                return "ydd";
+            if (nth === 5 || nth === 6)
+                return "ed";
+            if ((nth >= 7 && nth <= 10) ||
+                nth == 12 ||
+                nth == 15 ||
+                nth == 18 ||
+                nth == 20)
+                return "fed";
+            if (nth == 11 ||
+                nth == 13 ||
+                nth == 14 ||
+                nth == 16 ||
+                nth == 17 ||
+                nth == 19)
+                return "eg";
+            if (nth >= 21 && nth <= 39)
+                return "ain";
+            // Inconclusive.
+            return "";
+        },
+        time_24hr: true,
+    };
+    fp$9.l10ns.cy = Welsh;
+    fp$9.l10ns;
+
+    var fp$a = typeof window !== "undefined" && window.flatpickr !== undefined
+        ? window.flatpickr
+        : {
+            l10ns: {},
+        };
+    var Danish = {
+        weekdays: {
+            shorthand: ["søn", "man", "tir", "ons", "tors", "fre", "lør"],
+            longhand: [
+                "søndag",
+                "mandag",
+                "tirsdag",
+                "onsdag",
+                "torsdag",
+                "fredag",
+                "lørdag",
+            ],
+        },
+        months: {
+            shorthand: [
+                "jan",
+                "feb",
+                "mar",
+                "apr",
+                "maj",
+                "jun",
+                "jul",
+                "aug",
+                "sep",
+                "okt",
+                "nov",
+                "dec",
+            ],
+            longhand: [
+                "januar",
+                "februar",
+                "marts",
+                "april",
+                "maj",
+                "juni",
+                "juli",
+                "august",
+                "september",
+                "oktober",
+                "november",
+                "december",
+            ],
+        },
+        ordinal: function () {
+            return ".";
+        },
+        firstDayOfWeek: 1,
+        rangeSeparator: " til ",
+        weekAbbreviation: "uge",
+        time_24hr: true,
+    };
+    fp$a.l10ns.da = Danish;
+    fp$a.l10ns;
+
+    var fp$b = typeof window !== "undefined" && window.flatpickr !== undefined
+        ? window.flatpickr
+        : {
+            l10ns: {},
+        };
+    var German = {
+        weekdays: {
+            shorthand: ["So", "Mo", "Di", "Mi", "Do", "Fr", "Sa"],
+            longhand: [
+                "Sonntag",
+                "Montag",
+                "Dienstag",
+                "Mittwoch",
+                "Donnerstag",
+                "Freitag",
+                "Samstag",
+            ],
+        },
+        months: {
+            shorthand: [
+                "Jan",
+                "Feb",
+                "Mär",
+                "Apr",
+                "Mai",
+                "Jun",
+                "Jul",
+                "Aug",
+                "Sep",
+                "Okt",
+                "Nov",
+                "Dez",
+            ],
+            longhand: [
+                "Januar",
+                "Februar",
+                "März",
+                "April",
+                "Mai",
+                "Juni",
+                "Juli",
+                "August",
+                "September",
+                "Oktober",
+                "November",
+                "Dezember",
+            ],
+        },
+        firstDayOfWeek: 1,
+        weekAbbreviation: "KW",
+        rangeSeparator: " bis ",
+        scrollTitle: "Zum Ändern scrollen",
+        toggleTitle: "Zum Umschalten klicken",
+        time_24hr: true,
+    };
+    fp$b.l10ns.de = German;
+    fp$b.l10ns;
+
+    var english = {
+        weekdays: {
+            shorthand: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"],
+            longhand: [
+                "Sunday",
+                "Monday",
+                "Tuesday",
+                "Wednesday",
+                "Thursday",
+                "Friday",
+                "Saturday",
+            ],
+        },
+        months: {
+            shorthand: [
+                "Jan",
+                "Feb",
+                "Mar",
+                "Apr",
+                "May",
+                "Jun",
+                "Jul",
+                "Aug",
+                "Sep",
+                "Oct",
+                "Nov",
+                "Dec",
+            ],
+            longhand: [
+                "January",
+                "February",
+                "March",
+                "April",
+                "May",
+                "June",
+                "July",
+                "August",
+                "September",
+                "October",
+                "November",
+                "December",
+            ],
+        },
+        daysInMonth: [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31],
+        firstDayOfWeek: 0,
+        ordinal: function (nth) {
+            var s = nth % 100;
+            if (s > 3 && s < 21)
+                return "th";
+            switch (s % 10) {
+                case 1:
+                    return "st";
+                case 2:
+                    return "nd";
+                case 3:
+                    return "rd";
+                default:
+                    return "th";
+            }
+        },
+        rangeSeparator: " to ",
+        weekAbbreviation: "Wk",
+        scrollTitle: "Scroll to increment",
+        toggleTitle: "Click to toggle",
+        amPM: ["AM", "PM"],
+        yearAriaLabel: "Year",
+        monthAriaLabel: "Month",
+        hourAriaLabel: "Hour",
+        minuteAriaLabel: "Minute",
+        time_24hr: false,
+    };
+
+    var fp$c = typeof window !== "undefined" && window.flatpickr !== undefined
+        ? window.flatpickr
+        : {
+            l10ns: {},
+        };
+    var Esperanto = {
+        firstDayOfWeek: 1,
+        rangeSeparator: " ĝis ",
+        weekAbbreviation: "Sem",
+        scrollTitle: "Rulumu por pligrandigi la valoron",
+        toggleTitle: "Klaku por ŝalti",
+        weekdays: {
+            shorthand: ["Dim", "Lun", "Mar", "Mer", "Ĵaŭ", "Ven", "Sab"],
+            longhand: [
+                "dimanĉo",
+                "lundo",
+                "mardo",
+                "merkredo",
+                "ĵaŭdo",
+                "vendredo",
+                "sabato",
+            ],
+        },
+        months: {
+            shorthand: [
+                "Jan",
+                "Feb",
+                "Mar",
+                "Apr",
+                "Maj",
+                "Jun",
+                "Jul",
+                "Aŭg",
+                "Sep",
+                "Okt",
+                "Nov",
+                "Dec",
+            ],
+            longhand: [
+                "januaro",
+                "februaro",
+                "marto",
+                "aprilo",
+                "majo",
+                "junio",
+                "julio",
+                "aŭgusto",
+                "septembro",
+                "oktobro",
+                "novembro",
+                "decembro",
+            ],
+        },
+        ordinal: function () {
+            return "-a";
+        },
+        time_24hr: true,
+    };
+    fp$c.l10ns.eo = Esperanto;
+    fp$c.l10ns;
+
+    var fp$d = typeof window !== "undefined" && window.flatpickr !== undefined
+        ? window.flatpickr
+        : {
+            l10ns: {},
+        };
+    var Spanish = {
+        weekdays: {
+            shorthand: ["Dom", "Lun", "Mar", "Mié", "Jue", "Vie", "Sáb"],
+            longhand: [
+                "Domingo",
+                "Lunes",
+                "Martes",
+                "Miércoles",
+                "Jueves",
+                "Viernes",
+                "Sábado",
+            ],
+        },
+        months: {
+            shorthand: [
+                "Ene",
+                "Feb",
+                "Mar",
+                "Abr",
+                "May",
+                "Jun",
+                "Jul",
+                "Ago",
+                "Sep",
+                "Oct",
+                "Nov",
+                "Dic",
+            ],
+            longhand: [
+                "Enero",
+                "Febrero",
+                "Marzo",
+                "Abril",
+                "Mayo",
+                "Junio",
+                "Julio",
+                "Agosto",
+                "Septiembre",
+                "Octubre",
+                "Noviembre",
+                "Diciembre",
+            ],
+        },
+        ordinal: function () {
+            return "º";
+        },
+        firstDayOfWeek: 1,
+        rangeSeparator: " a ",
+        time_24hr: true,
+    };
+    fp$d.l10ns.es = Spanish;
+    fp$d.l10ns;
+
+    var fp$e = typeof window !== "undefined" && window.flatpickr !== undefined
+        ? window.flatpickr
+        : {
+            l10ns: {},
+        };
+    var Estonian = {
+        weekdays: {
+            shorthand: ["P", "E", "T", "K", "N", "R", "L"],
+            longhand: [
+                "Pühapäev",
+                "Esmaspäev",
+                "Teisipäev",
+                "Kolmapäev",
+                "Neljapäev",
+                "Reede",
+                "Laupäev",
+            ],
+        },
+        months: {
+            shorthand: [
+                "Jaan",
+                "Veebr",
+                "Märts",
+                "Apr",
+                "Mai",
+                "Juuni",
+                "Juuli",
+                "Aug",
+                "Sept",
+                "Okt",
+                "Nov",
+                "Dets",
+            ],
+            longhand: [
+                "Jaanuar",
+                "Veebruar",
+                "Märts",
+                "Aprill",
+                "Mai",
+                "Juuni",
+                "Juuli",
+                "August",
+                "September",
+                "Oktoober",
+                "November",
+                "Detsember",
+            ],
+        },
+        firstDayOfWeek: 1,
+        ordinal: function () {
+            return ".";
+        },
+        weekAbbreviation: "Näd",
+        rangeSeparator: " kuni ",
+        scrollTitle: "Keri, et suurendada",
+        toggleTitle: "Klõpsa, et vahetada",
+        time_24hr: true,
+    };
+    fp$e.l10ns.et = Estonian;
+    fp$e.l10ns;
+
+    var fp$f = typeof window !== "undefined" && window.flatpickr !== undefined
+        ? window.flatpickr
+        : {
+            l10ns: {},
+        };
+    var Persian = {
+        weekdays: {
+            shorthand: ["یک", "دو", "سه", "چهار", "پنج", "جمعه", "شنبه"],
+            longhand: [
+                "یک‌شنبه",
+                "دوشنبه",
+                "سه‌شنبه",
+                "چهارشنبه",
+                "پنچ‌شنبه",
+                "جمعه",
+                "شنبه",
+            ],
+        },
+        months: {
+            shorthand: [
+                "ژانویه",
+                "فوریه",
+                "مارس",
+                "آوریل",
+                "مه",
+                "ژوئن",
+                "ژوئیه",
+                "اوت",
+                "سپتامبر",
+                "اکتبر",
+                "نوامبر",
+                "دسامبر",
+            ],
+            longhand: [
+                "ژانویه",
+                "فوریه",
+                "مارس",
+                "آوریل",
+                "مه",
+                "ژوئن",
+                "ژوئیه",
+                "اوت",
+                "سپتامبر",
+                "اکتبر",
+                "نوامبر",
+                "دسامبر",
+            ],
+        },
+        firstDayOfWeek: 6,
+        ordinal: function () {
+            return "";
+        },
+    };
+    fp$f.l10ns.fa = Persian;
+    fp$f.l10ns;
+
+    var fp$g = typeof window !== "undefined" && window.flatpickr !== undefined
+        ? window.flatpickr
+        : {
+            l10ns: {},
+        };
+    var Finnish = {
+        firstDayOfWeek: 1,
+        weekdays: {
+            shorthand: ["Su", "Ma", "Ti", "Ke", "To", "Pe", "La"],
+            longhand: [
+                "Sunnuntai",
+                "Maanantai",
+                "Tiistai",
+                "Keskiviikko",
+                "Torstai",
+                "Perjantai",
+                "Lauantai",
+            ],
+        },
+        months: {
+            shorthand: [
+                "Tammi",
+                "Helmi",
+                "Maalis",
+                "Huhti",
+                "Touko",
+                "Kesä",
+                "Heinä",
+                "Elo",
+                "Syys",
+                "Loka",
+                "Marras",
+                "Joulu",
+            ],
+            longhand: [
+                "Tammikuu",
+                "Helmikuu",
+                "Maaliskuu",
+                "Huhtikuu",
+                "Toukokuu",
+                "Kesäkuu",
+                "Heinäkuu",
+                "Elokuu",
+                "Syyskuu",
+                "Lokakuu",
+                "Marraskuu",
+                "Joulukuu",
+            ],
+        },
+        ordinal: function () {
+            return ".";
+        },
+        time_24hr: true,
+    };
+    fp$g.l10ns.fi = Finnish;
+    fp$g.l10ns;
+
+    var fp$h = typeof window !== "undefined" && window.flatpickr !== undefined
+        ? window.flatpickr
+        : {
+            l10ns: {},
+        };
+    var Faroese = {
+        weekdays: {
+            shorthand: ["Sun", "Mán", "Týs", "Mik", "Hós", "Frí", "Ley"],
+            longhand: [
+                "Sunnudagur",
+                "Mánadagur",
+                "Týsdagur",
+                "Mikudagur",
+                "Hósdagur",
+                "Fríggjadagur",
+                "Leygardagur",
+            ],
+        },
+        months: {
+            shorthand: [
+                "Jan",
+                "Feb",
+                "Mar",
+                "Apr",
+                "Mai",
+                "Jun",
+                "Jul",
+                "Aug",
+                "Sep",
+                "Okt",
+                "Nov",
+                "Des",
+            ],
+            longhand: [
+                "Januar",
+                "Februar",
+                "Mars",
+                "Apríl",
+                "Mai",
+                "Juni",
+                "Juli",
+                "August",
+                "Septembur",
+                "Oktobur",
+                "Novembur",
+                "Desembur",
+            ],
+        },
+        ordinal: function () {
+            return ".";
+        },
+        firstDayOfWeek: 1,
+        rangeSeparator: " til ",
+        weekAbbreviation: "vika",
+        scrollTitle: "Rulla fyri at broyta",
+        toggleTitle: "Trýst fyri at skifta",
+        yearAriaLabel: "Ár",
+        time_24hr: true,
+    };
+    fp$h.l10ns.fo = Faroese;
+    fp$h.l10ns;
+
+    var fp$i = typeof window !== "undefined" && window.flatpickr !== undefined
+        ? window.flatpickr
+        : {
+            l10ns: {},
+        };
+    var French = {
+        firstDayOfWeek: 1,
+        weekdays: {
+            shorthand: ["dim", "lun", "mar", "mer", "jeu", "ven", "sam"],
+            longhand: [
+                "dimanche",
+                "lundi",
+                "mardi",
+                "mercredi",
+                "jeudi",
+                "vendredi",
+                "samedi",
+            ],
+        },
+        months: {
+            shorthand: [
+                "janv",
+                "févr",
+                "mars",
+                "avr",
+                "mai",
+                "juin",
+                "juil",
+                "août",
+                "sept",
+                "oct",
+                "nov",
+                "déc",
+            ],
+            longhand: [
+                "janvier",
+                "février",
+                "mars",
+                "avril",
+                "mai",
+                "juin",
+                "juillet",
+                "août",
+                "septembre",
+                "octobre",
+                "novembre",
+                "décembre",
+            ],
+        },
+        ordinal: function (nth) {
+            if (nth > 1)
+                return "";
+            return "er";
+        },
+        rangeSeparator: " au ",
+        weekAbbreviation: "Sem",
+        scrollTitle: "Défiler pour augmenter la valeur",
+        toggleTitle: "Cliquer pour basculer",
+        time_24hr: true,
+    };
+    fp$i.l10ns.fr = French;
+    fp$i.l10ns;
+
+    var fp$j = typeof window !== "undefined" && window.flatpickr !== undefined
+        ? window.flatpickr
+        : {
+            l10ns: {},
+        };
+    var Greek = {
+        weekdays: {
+            shorthand: ["Κυ", "Δε", "Τρ", "Τε", "Πέ", "Πα", "Σά"],
+            longhand: [
+                "Κυριακή",
+                "Δευτέρα",
+                "Τρίτη",
+                "Τετάρτη",
+                "Πέμπτη",
+                "Παρασκευή",
+                "Σάββατο",
+            ],
+        },
+        months: {
+            shorthand: [
+                "Ιαν",
+                "Φεβ",
+                "Μάρ",
+                "Απρ",
+                "Μάι",
+                "Ιού",
+                "Ιού",
+                "Αύγ",
+                "Σεπ",
+                "Οκτ",
+                "Νοέ",
+                "Δεκ",
+            ],
+            longhand: [
+                "Ιανουάριος",
+                "Φεβρουάριος",
+                "Μάρτιος",
+                "Απρίλιος",
+                "Μάιος",
+                "Ιούνιος",
+                "Ιούλιος",
+                "Αύγουστος",
+                "Σεπτέμβριος",
+                "Οκτώβριος",
+                "Νοέμβριος",
+                "Δεκέμβριος",
+            ],
+        },
+        firstDayOfWeek: 1,
+        ordinal: function () {
+            return "";
+        },
+        weekAbbreviation: "Εβδ",
+        rangeSeparator: " έως ",
+        scrollTitle: "Μετακυλήστε για προσαύξηση",
+        toggleTitle: "Κάντε κλικ για αλλαγή",
+        amPM: ["ΠΜ", "ΜΜ"],
+    };
+    fp$j.l10ns.gr = Greek;
+    fp$j.l10ns;
+
+    var fp$k = typeof window !== "undefined" && window.flatpickr !== undefined
+        ? window.flatpickr
+        : {
+            l10ns: {},
+        };
+    var Hebrew = {
+        weekdays: {
+            shorthand: ["א", "ב", "ג", "ד", "ה", "ו", "ש"],
+            longhand: ["ראשון", "שני", "שלישי", "רביעי", "חמישי", "שישי", "שבת"],
+        },
+        months: {
+            shorthand: [
+                "ינו׳",
+                "פבר׳",
+                "מרץ",
+                "אפר׳",
+                "מאי",
+                "יוני",
+                "יולי",
+                "אוג׳",
+                "ספט׳",
+                "אוק׳",
+                "נוב׳",
+                "דצמ׳",
+            ],
+            longhand: [
+                "ינואר",
+                "פברואר",
+                "מרץ",
+                "אפריל",
+                "מאי",
+                "יוני",
+                "יולי",
+                "אוגוסט",
+                "ספטמבר",
+                "אוקטובר",
+                "נובמבר",
+                "דצמבר",
+            ],
+        },
+        rangeSeparator: " אל ",
+        time_24hr: true,
+    };
+    fp$k.l10ns.he = Hebrew;
+    fp$k.l10ns;
+
+    var fp$l = typeof window !== "undefined" && window.flatpickr !== undefined
+        ? window.flatpickr
+        : {
+            l10ns: {},
+        };
+    var Hindi = {
+        weekdays: {
+            shorthand: ["रवि", "सोम", "मंगल", "बुध", "गुरु", "शुक्र", "शनि"],
+            longhand: [
+                "रविवार",
+                "सोमवार",
+                "मंगलवार",
+                "बुधवार",
+                "गुरुवार",
+                "शुक्रवार",
+                "शनिवार",
+            ],
+        },
+        months: {
+            shorthand: [
+                "जन",
+                "फर",
+                "मार्च",
+                "अप्रेल",
+                "मई",
+                "जून",
+                "जूलाई",
+                "अग",
+                "सित",
+                "अक्ट",
+                "नव",
+                "दि",
+            ],
+            longhand: [
+                "जनवरी ",
+                "फरवरी",
+                "मार्च",
+                "अप्रेल",
+                "मई",
+                "जून",
+                "जूलाई",
+                "अगस्त ",
+                "सितम्बर",
+                "अक्टूबर",
+                "नवम्बर",
+                "दिसम्बर",
+            ],
+        },
+    };
+    fp$l.l10ns.hi = Hindi;
+    fp$l.l10ns;
+
+    var fp$m = typeof window !== "undefined" && window.flatpickr !== undefined
+        ? window.flatpickr
+        : {
+            l10ns: {},
+        };
+    var Croatian = {
+        firstDayOfWeek: 1,
+        weekdays: {
+            shorthand: ["Ned", "Pon", "Uto", "Sri", "Čet", "Pet", "Sub"],
+            longhand: [
+                "Nedjelja",
+                "Ponedjeljak",
+                "Utorak",
+                "Srijeda",
+                "Četvrtak",
+                "Petak",
+                "Subota",
+            ],
+        },
+        months: {
+            shorthand: [
+                "Sij",
+                "Velj",
+                "Ožu",
+                "Tra",
+                "Svi",
+                "Lip",
+                "Srp",
+                "Kol",
+                "Ruj",
+                "Lis",
+                "Stu",
+                "Pro",
+            ],
+            longhand: [
+                "Siječanj",
+                "Veljača",
+                "Ožujak",
+                "Travanj",
+                "Svibanj",
+                "Lipanj",
+                "Srpanj",
+                "Kolovoz",
+                "Rujan",
+                "Listopad",
+                "Studeni",
+                "Prosinac",
+            ],
+        },
+        time_24hr: true,
+    };
+    fp$m.l10ns.hr = Croatian;
+    fp$m.l10ns;
+
+    var fp$n = typeof window !== "undefined" && window.flatpickr !== undefined
+        ? window.flatpickr
+        : {
+            l10ns: {},
+        };
+    var Hungarian = {
+        firstDayOfWeek: 1,
+        weekdays: {
+            shorthand: ["V", "H", "K", "Sz", "Cs", "P", "Szo"],
+            longhand: [
+                "Vasárnap",
+                "Hétfő",
+                "Kedd",
+                "Szerda",
+                "Csütörtök",
+                "Péntek",
+                "Szombat",
+            ],
+        },
+        months: {
+            shorthand: [
+                "Jan",
+                "Feb",
+                "Már",
+                "Ápr",
+                "Máj",
+                "Jún",
+                "Júl",
+                "Aug",
+                "Szep",
+                "Okt",
+                "Nov",
+                "Dec",
+            ],
+            longhand: [
+                "Január",
+                "Február",
+                "Március",
+                "Április",
+                "Május",
+                "Június",
+                "Július",
+                "Augusztus",
+                "Szeptember",
+                "Október",
+                "November",
+                "December",
+            ],
+        },
+        ordinal: function () {
+            return ".";
+        },
+        weekAbbreviation: "Hét",
+        scrollTitle: "Görgessen",
+        toggleTitle: "Kattintson a váltáshoz",
+        rangeSeparator: " - ",
+        time_24hr: true,
+    };
+    fp$n.l10ns.hu = Hungarian;
+    fp$n.l10ns;
+
+    var fp$o = typeof window !== "undefined" && window.flatpickr !== undefined
+        ? window.flatpickr
+        : {
+            l10ns: {},
+        };
+    var Indonesian = {
+        weekdays: {
+            shorthand: ["Min", "Sen", "Sel", "Rab", "Kam", "Jum", "Sab"],
+            longhand: ["Minggu", "Senin", "Selasa", "Rabu", "Kamis", "Jumat", "Sabtu"],
+        },
+        months: {
+            shorthand: [
+                "Jan",
+                "Feb",
+                "Mar",
+                "Apr",
+                "Mei",
+                "Jun",
+                "Jul",
+                "Agu",
+                "Sep",
+                "Okt",
+                "Nov",
+                "Des",
+            ],
+            longhand: [
+                "Januari",
+                "Februari",
+                "Maret",
+                "April",
+                "Mei",
+                "Juni",
+                "Juli",
+                "Agustus",
+                "September",
+                "Oktober",
+                "November",
+                "Desember",
+            ],
+        },
+        firstDayOfWeek: 1,
+        ordinal: function () {
+            return "";
+        },
+        time_24hr: true,
+        rangeSeparator: " - ",
+    };
+    fp$o.l10ns.id = Indonesian;
+    fp$o.l10ns;
+
+    var fp$p = typeof window !== "undefined" && window.flatpickr !== undefined
+        ? window.flatpickr
+        : {
+            l10ns: {},
+        };
+    var Icelandic = {
+        weekdays: {
+            shorthand: ["Sun", "Mán", "Þri", "Mið", "Fim", "Fös", "Lau"],
+            longhand: [
+                "Sunnudagur",
+                "Mánudagur",
+                "Þriðjudagur",
+                "Miðvikudagur",
+                "Fimmtudagur",
+                "Föstudagur",
+                "Laugardagur",
+            ],
+        },
+        months: {
+            shorthand: [
+                "Jan",
+                "Feb",
+                "Mar",
+                "Apr",
+                "Maí",
+                "Jún",
+                "Júl",
+                "Ágú",
+                "Sep",
+                "Okt",
+                "Nóv",
+                "Des",
+            ],
+            longhand: [
+                "Janúar",
+                "Febrúar",
+                "Mars",
+                "Apríl",
+                "Maí",
+                "Júní",
+                "Júlí",
+                "Ágúst",
+                "September",
+                "Október",
+                "Nóvember",
+                "Desember",
+            ],
+        },
+        ordinal: function () {
+            return ".";
+        },
+        firstDayOfWeek: 1,
+        rangeSeparator: " til ",
+        weekAbbreviation: "vika",
+        yearAriaLabel: "Ár",
+        time_24hr: true,
+    };
+    fp$p.l10ns.is = Icelandic;
+    fp$p.l10ns;
+
+    var fp$q = typeof window !== "undefined" && window.flatpickr !== undefined
+        ? window.flatpickr
+        : {
+            l10ns: {},
+        };
+    var Italian = {
+        weekdays: {
+            shorthand: ["Dom", "Lun", "Mar", "Mer", "Gio", "Ven", "Sab"],
+            longhand: [
+                "Domenica",
+                "Lunedì",
+                "Martedì",
+                "Mercoledì",
+                "Giovedì",
+                "Venerdì",
+                "Sabato",
+            ],
+        },
+        months: {
+            shorthand: [
+                "Gen",
+                "Feb",
+                "Mar",
+                "Apr",
+                "Mag",
+                "Giu",
+                "Lug",
+                "Ago",
+                "Set",
+                "Ott",
+                "Nov",
+                "Dic",
+            ],
+            longhand: [
+                "Gennaio",
+                "Febbraio",
+                "Marzo",
+                "Aprile",
+                "Maggio",
+                "Giugno",
+                "Luglio",
+                "Agosto",
+                "Settembre",
+                "Ottobre",
+                "Novembre",
+                "Dicembre",
+            ],
+        },
+        firstDayOfWeek: 1,
+        ordinal: function () { return "°"; },
+        rangeSeparator: " al ",
+        weekAbbreviation: "Se",
+        scrollTitle: "Scrolla per aumentare",
+        toggleTitle: "Clicca per cambiare",
+        time_24hr: true,
+    };
+    fp$q.l10ns.it = Italian;
+    fp$q.l10ns;
+
+    var fp$r = typeof window !== "undefined" && window.flatpickr !== undefined
+        ? window.flatpickr
+        : {
+            l10ns: {},
+        };
+    var Japanese = {
+        weekdays: {
+            shorthand: ["日", "月", "火", "水", "木", "金", "土"],
+            longhand: [
+                "日曜日",
+                "月曜日",
+                "火曜日",
+                "水曜日",
+                "木曜日",
+                "金曜日",
+                "土曜日",
+            ],
+        },
+        months: {
+            shorthand: [
+                "1月",
+                "2月",
+                "3月",
+                "4月",
+                "5月",
+                "6月",
+                "7月",
+                "8月",
+                "9月",
+                "10月",
+                "11月",
+                "12月",
+            ],
+            longhand: [
+                "1月",
+                "2月",
+                "3月",
+                "4月",
+                "5月",
+                "6月",
+                "7月",
+                "8月",
+                "9月",
+                "10月",
+                "11月",
+                "12月",
+            ],
+        },
+        time_24hr: true,
+        rangeSeparator: " から ",
+        firstDayOfWeek: 1,
+    };
+    fp$r.l10ns.ja = Japanese;
+    fp$r.l10ns;
+
+    var fp$s = typeof window !== "undefined" && window.flatpickr !== undefined
+        ? window.flatpickr
+        : {
+            l10ns: {},
+        };
+    var Georgian = {
+        weekdays: {
+            shorthand: ["კვ", "ორ", "სა", "ოთ", "ხუ", "პა", "შა"],
+            longhand: [
+                "კვირა",
+                "ორშაბათი",
+                "სამშაბათი",
+                "ოთხშაბათი",
+                "ხუთშაბათი",
+                "პარასკევი",
+                "შაბათი",
+            ],
+        },
+        months: {
+            shorthand: [
+                "იან",
+                "თებ",
+                "მარ",
+                "აპრ",
+                "მაი",
+                "ივნ",
+                "ივლ",
+                "აგვ",
+                "სექ",
+                "ოქტ",
+                "ნოე",
+                "დეკ",
+            ],
+            longhand: [
+                "იანვარი",
+                "თებერვალი",
+                "მარტი",
+                "აპრილი",
+                "მაისი",
+                "ივნისი",
+                "ივლისი",
+                "აგვისტო",
+                "სექტემბერი",
+                "ოქტომბერი",
+                "ნოემბერი",
+                "დეკემბერი",
+            ],
+        },
+        firstDayOfWeek: 1,
+        ordinal: function () {
+            return "";
+        },
+        rangeSeparator: " — ",
+        weekAbbreviation: "კვ.",
+        scrollTitle: "დასქროლეთ გასადიდებლად",
+        toggleTitle: "დააკლიკეთ გადართვისთვის",
+        amPM: ["AM", "PM"],
+        yearAriaLabel: "წელი",
+        time_24hr: true,
+    };
+    fp$s.l10ns.ka = Georgian;
+    fp$s.l10ns;
+
+    var fp$t = typeof window !== "undefined" && window.flatpickr !== undefined
+        ? window.flatpickr
+        : {
+            l10ns: {},
+        };
+    var Korean = {
+        weekdays: {
+            shorthand: ["일", "월", "화", "수", "목", "금", "토"],
+            longhand: [
+                "일요일",
+                "월요일",
+                "화요일",
+                "수요일",
+                "목요일",
+                "금요일",
+                "토요일",
+            ],
+        },
+        months: {
+            shorthand: [
+                "1월",
+                "2월",
+                "3월",
+                "4월",
+                "5월",
+                "6월",
+                "7월",
+                "8월",
+                "9월",
+                "10월",
+                "11월",
+                "12월",
+            ],
+            longhand: [
+                "1월",
+                "2월",
+                "3월",
+                "4월",
+                "5월",
+                "6월",
+                "7월",
+                "8월",
+                "9월",
+                "10월",
+                "11월",
+                "12월",
+            ],
+        },
+        ordinal: function () {
+            return "일";
+        },
+        rangeSeparator: " ~ ",
+    };
+    fp$t.l10ns.ko = Korean;
+    fp$t.l10ns;
+
+    var fp$u = typeof window !== "undefined" && window.flatpickr !== undefined
+        ? window.flatpickr
+        : {
+            l10ns: {},
+        };
+    var Khmer = {
+        weekdays: {
+            shorthand: ["អាទិត្យ", "ចន្ទ", "អង្គារ", "ពុធ", "ព្រហស.", "សុក្រ", "សៅរ៍"],
+            longhand: [
+                "អាទិត្យ",
+                "ចន្ទ",
+                "អង្គារ",
+                "ពុធ",
+                "ព្រហស្បតិ៍",
+                "សុក្រ",
+                "សៅរ៍",
+            ],
+        },
+        months: {
+            shorthand: [
+                "មករា",
+                "កុម្ភះ",
+                "មីនា",
+                "មេសា",
+                "ឧសភា",
+                "មិថុនា",
+                "កក្កដា",
+                "សីហា",
+                "កញ្ញា",
+                "តុលា",
+                "វិច្ឆិកា",
+                "ធ្នូ",
+            ],
+            longhand: [
+                "មករា",
+                "កុម្ភះ",
+                "មីនា",
+                "មេសា",
+                "ឧសភា",
+                "មិថុនា",
+                "កក្កដា",
+                "សីហា",
+                "កញ្ញា",
+                "តុលា",
+                "វិច្ឆិកា",
+                "ធ្នូ",
+            ],
+        },
+        ordinal: function () {
+            return "";
+        },
+        firstDayOfWeek: 1,
+        rangeSeparator: " ដល់ ",
+        weekAbbreviation: "សប្តាហ៍",
+        scrollTitle: "រំកិលដើម្បីបង្កើន",
+        toggleTitle: "ចុចដើម្បីផ្លាស់ប្ដូរ",
+        yearAriaLabel: "ឆ្នាំ",
+        time_24hr: true,
+    };
+    fp$u.l10ns.km = Khmer;
+    fp$u.l10ns;
+
+    var fp$v = typeof window !== "undefined" && window.flatpickr !== undefined
+        ? window.flatpickr
+        : {
+            l10ns: {},
+        };
+    var Kazakh = {
+        weekdays: {
+            shorthand: ["Жс", "Дс", "Сc", "Ср", "Бс", "Жм", "Сб"],
+            longhand: [
+                "Жексенбi",
+                "Дүйсенбi",
+                "Сейсенбi",
+                "Сәрсенбi",
+                "Бейсенбi",
+                "Жұма",
+                "Сенбi",
+            ],
+        },
+        months: {
+            shorthand: [
+                "Қаң",
+                "Ақп",
+                "Нау",
+                "Сәу",
+                "Мам",
+                "Мау",
+                "Шiл",
+                "Там",
+                "Қыр",
+                "Қаз",
+                "Қар",
+                "Жел",
+            ],
+            longhand: [
+                "Қаңтар",
+                "Ақпан",
+                "Наурыз",
+                "Сәуiр",
+                "Мамыр",
+                "Маусым",
+                "Шiлде",
+                "Тамыз",
+                "Қыркүйек",
+                "Қазан",
+                "Қараша",
+                "Желтоқсан",
+            ],
+        },
+        firstDayOfWeek: 1,
+        ordinal: function () {
+            return "";
+        },
+        rangeSeparator: " — ",
+        weekAbbreviation: "Апта",
+        scrollTitle: "Үлкейту үшін айналдырыңыз",
+        toggleTitle: "Ауыстыру үшін басыңыз",
+        amPM: ["ТД", "ТК"],
+        yearAriaLabel: "Жыл",
+    };
+    fp$v.l10ns.kz = Kazakh;
+    fp$v.l10ns;
+
+    var fp$w = typeof window !== "undefined" && window.flatpickr !== undefined
+        ? window.flatpickr
+        : {
+            l10ns: {},
+        };
+    var Lithuanian = {
+        weekdays: {
+            shorthand: ["S", "Pr", "A", "T", "K", "Pn", "Š"],
+            longhand: [
+                "Sekmadienis",
+                "Pirmadienis",
+                "Antradienis",
+                "Trečiadienis",
+                "Ketvirtadienis",
+                "Penktadienis",
+                "Šeštadienis",
+            ],
+        },
+        months: {
+            shorthand: [
+                "Sau",
+                "Vas",
+                "Kov",
+                "Bal",
+                "Geg",
+                "Bir",
+                "Lie",
+                "Rgp",
+                "Rgs",
+                "Spl",
+                "Lap",
+                "Grd",
+            ],
+            longhand: [
+                "Sausis",
+                "Vasaris",
+                "Kovas",
+                "Balandis",
+                "Gegužė",
+                "Birželis",
+                "Liepa",
+                "Rugpjūtis",
+                "Rugsėjis",
+                "Spalis",
+                "Lapkritis",
+                "Gruodis",
+            ],
+        },
+        firstDayOfWeek: 1,
+        ordinal: function () {
+            return "-a";
+        },
+        rangeSeparator: " iki ",
+        weekAbbreviation: "Sav",
+        scrollTitle: "Keisti laiką pelės rateliu",
+        toggleTitle: "Perjungti laiko formatą",
+        time_24hr: true,
+    };
+    fp$w.l10ns.lt = Lithuanian;
+    fp$w.l10ns;
+
+    var fp$x = typeof window !== "undefined" && window.flatpickr !== undefined
+        ? window.flatpickr
+        : {
+            l10ns: {},
+        };
+    var Latvian = {
+        firstDayOfWeek: 1,
+        weekdays: {
+            shorthand: ["Sv", "Pr", "Ot", "Tr", "Ce", "Pk", "Se"],
+            longhand: [
+                "Svētdiena",
+                "Pirmdiena",
+                "Otrdiena",
+                "Trešdiena",
+                "Ceturtdiena",
+                "Piektdiena",
+                "Sestdiena",
+            ],
+        },
+        months: {
+            shorthand: [
+                "Jan",
+                "Feb",
+                "Mar",
+                "Apr",
+                "Mai",
+                "Jūn",
+                "Jūl",
+                "Aug",
+                "Sep",
+                "Okt",
+                "Nov",
+                "Dec",
+            ],
+            longhand: [
+                "Janvāris",
+                "Februāris",
+                "Marts",
+                "Aprīlis",
+                "Maijs",
+                "Jūnijs",
+                "Jūlijs",
+                "Augusts",
+                "Septembris",
+                "Oktobris",
+                "Novembris",
+                "Decembris",
+            ],
+        },
+        rangeSeparator: " līdz ",
+        time_24hr: true,
+    };
+    fp$x.l10ns.lv = Latvian;
+    fp$x.l10ns;
+
+    var fp$y = typeof window !== "undefined" && window.flatpickr !== undefined
+        ? window.flatpickr
+        : {
+            l10ns: {},
+        };
+    var Macedonian = {
+        weekdays: {
+            shorthand: ["Не", "По", "Вт", "Ср", "Че", "Пе", "Са"],
+            longhand: [
+                "Недела",
+                "Понеделник",
+                "Вторник",
+                "Среда",
+                "Четврток",
+                "Петок",
+                "Сабота",
+            ],
+        },
+        months: {
+            shorthand: [
+                "Јан",
+                "Фев",
+                "Мар",
+                "Апр",
+                "Мај",
+                "Јун",
+                "Јул",
+                "Авг",
+                "Сеп",
+                "Окт",
+                "Ное",
+                "Дек",
+            ],
+            longhand: [
+                "Јануари",
+                "Февруари",
+                "Март",
+                "Април",
+                "Мај",
+                "Јуни",
+                "Јули",
+                "Август",
+                "Септември",
+                "Октомври",
+                "Ноември",
+                "Декември",
+            ],
+        },
+        firstDayOfWeek: 1,
+        weekAbbreviation: "Нед.",
+        rangeSeparator: " до ",
+        time_24hr: true,
+    };
+    fp$y.l10ns.mk = Macedonian;
+    fp$y.l10ns;
+
+    var fp$z = typeof window !== "undefined" && window.flatpickr !== undefined
+        ? window.flatpickr
+        : {
+            l10ns: {},
+        };
+    var Mongolian = {
+        firstDayOfWeek: 1,
+        weekdays: {
+            shorthand: ["Да", "Мя", "Лх", "Пү", "Ба", "Бя", "Ня"],
+            longhand: ["Даваа", "Мягмар", "Лхагва", "Пүрэв", "Баасан", "Бямба", "Ням"],
+        },
+        months: {
+            shorthand: [
+                "1-р сар",
+                "2-р сар",
+                "3-р сар",
+                "4-р сар",
+                "5-р сар",
+                "6-р сар",
+                "7-р сар",
+                "8-р сар",
+                "9-р сар",
+                "10-р сар",
+                "11-р сар",
+                "12-р сар",
+            ],
+            longhand: [
+                "Нэгдүгээр сар",
+                "Хоёрдугаар сар",
+                "Гуравдугаар сар",
+                "Дөрөвдүгээр сар",
+                "Тавдугаар сар",
+                "Зургаадугаар сар",
+                "Долдугаар сар",
+                "Наймдугаар сар",
+                "Есдүгээр сар",
+                "Аравдугаар сар",
+                "Арваннэгдүгээр сар",
+                "Арванхоёрдугаар сар",
+            ],
+        },
+        rangeSeparator: "-с ",
+        time_24hr: true,
+    };
+    fp$z.l10ns.mn = Mongolian;
+    fp$z.l10ns;
+
+    var fp$A = typeof window !== "undefined" && window.flatpickr !== undefined
+        ? window.flatpickr
+        : {
+            l10ns: {},
+        };
+    var Malaysian = {
+        weekdays: {
+            shorthand: ["Min", "Isn", "Sel", "Rab", "Kha", "Jum", "Sab"],
+            longhand: [
+                "Minggu",
+                "Isnin",
+                "Selasa",
+                "Rabu",
+                "Khamis",
+                "Jumaat",
+                "Sabtu",
+            ],
+        },
+        months: {
+            shorthand: [
+                "Jan",
+                "Feb",
+                "Mac",
+                "Apr",
+                "Mei",
+                "Jun",
+                "Jul",
+                "Ogo",
+                "Sep",
+                "Okt",
+                "Nov",
+                "Dis",
+            ],
+            longhand: [
+                "Januari",
+                "Februari",
+                "Mac",
+                "April",
+                "Mei",
+                "Jun",
+                "Julai",
+                "Ogos",
+                "September",
+                "Oktober",
+                "November",
+                "Disember",
+            ],
+        },
+        firstDayOfWeek: 1,
+        ordinal: function () {
+            return "";
+        },
+    };
+    fp$A.l10ns;
+
+    var fp$B = typeof window !== "undefined" && window.flatpickr !== undefined
+        ? window.flatpickr
+        : {
+            l10ns: {},
+        };
+    var Burmese = {
+        weekdays: {
+            shorthand: ["နွေ", "လာ", "ဂါ", "ဟူး", "ကြာ", "သော", "နေ"],
+            longhand: [
+                "တနင်္ဂနွေ",
+                "တနင်္လာ",
+                "အင်္ဂါ",
+                "ဗုဒ္ဓဟူး",
+                "ကြာသပတေး",
+                "သောကြာ",
+                "စနေ",
+            ],
+        },
+        months: {
+            shorthand: [
+                "ဇန်",
+                "ဖေ",
+                "မတ်",
+                "ပြီ",
+                "မေ",
+                "ဇွန်",
+                "လိုင်",
+                "သြ",
+                "စက်",
+                "အောက်",
+                "နို",
+                "ဒီ",
+            ],
+            longhand: [
+                "ဇန်နဝါရီ",
+                "ဖေဖော်ဝါရီ",
+                "မတ်",
+                "ဧပြီ",
+                "မေ",
+                "ဇွန်",
+                "ဇူလိုင်",
+                "သြဂုတ်",
+                "စက်တင်ဘာ",
+                "အောက်တိုဘာ",
+                "နိုဝင်ဘာ",
+                "ဒီဇင်ဘာ",
+            ],
+        },
+        firstDayOfWeek: 1,
+        ordinal: function () {
+            return "";
+        },
+        time_24hr: true,
+    };
+    fp$B.l10ns.my = Burmese;
+    fp$B.l10ns;
+
+    var fp$C = typeof window !== "undefined" && window.flatpickr !== undefined
+        ? window.flatpickr
+        : {
+            l10ns: {},
+        };
+    var Dutch = {
+        weekdays: {
+            shorthand: ["zo", "ma", "di", "wo", "do", "vr", "za"],
+            longhand: [
+                "zondag",
+                "maandag",
+                "dinsdag",
+                "woensdag",
+                "donderdag",
+                "vrijdag",
+                "zaterdag",
+            ],
+        },
+        months: {
+            shorthand: [
+                "jan",
+                "feb",
+                "mrt",
+                "apr",
+                "mei",
+                "jun",
+                "jul",
+                "aug",
+                "sept",
+                "okt",
+                "nov",
+                "dec",
+            ],
+            longhand: [
+                "januari",
+                "februari",
+                "maart",
+                "april",
+                "mei",
+                "juni",
+                "juli",
+                "augustus",
+                "september",
+                "oktober",
+                "november",
+                "december",
+            ],
+        },
+        firstDayOfWeek: 1,
+        weekAbbreviation: "wk",
+        rangeSeparator: " t/m ",
+        scrollTitle: "Scroll voor volgende / vorige",
+        toggleTitle: "Klik om te wisselen",
+        time_24hr: true,
+        ordinal: function (nth) {
+            if (nth === 1 || nth === 8 || nth >= 20)
+                return "ste";
+            return "de";
+        },
+    };
+    fp$C.l10ns.nl = Dutch;
+    fp$C.l10ns;
+
+    var fp$D = typeof window !== "undefined" && window.flatpickr !== undefined
+        ? window.flatpickr
+        : {
+            l10ns: {},
+        };
+    var Norwegian = {
+        weekdays: {
+            shorthand: ["Søn", "Man", "Tir", "Ons", "Tor", "Fre", "Lør"],
+            longhand: [
+                "Søndag",
+                "Mandag",
+                "Tirsdag",
+                "Onsdag",
+                "Torsdag",
+                "Fredag",
+                "Lørdag",
+            ],
+        },
+        months: {
+            shorthand: [
+                "Jan",
+                "Feb",
+                "Mar",
+                "Apr",
+                "Mai",
+                "Jun",
+                "Jul",
+                "Aug",
+                "Sep",
+                "Okt",
+                "Nov",
+                "Des",
+            ],
+            longhand: [
+                "Januar",
+                "Februar",
+                "Mars",
+                "April",
+                "Mai",
+                "Juni",
+                "Juli",
+                "August",
+                "September",
+                "Oktober",
+                "November",
+                "Desember",
+            ],
+        },
+        firstDayOfWeek: 1,
+        rangeSeparator: " til ",
+        weekAbbreviation: "Uke",
+        scrollTitle: "Scroll for å endre",
+        toggleTitle: "Klikk for å veksle",
+        time_24hr: true,
+        ordinal: function () {
+            return ".";
+        },
+    };
+    fp$D.l10ns.no = Norwegian;
+    fp$D.l10ns;
+
+    var fp$E = typeof window !== "undefined" && window.flatpickr !== undefined
+        ? window.flatpickr
+        : {
+            l10ns: {},
+        };
+    var Punjabi = {
+        weekdays: {
+            shorthand: ["ਐਤ", "ਸੋਮ", "ਮੰਗਲ", "ਬੁੱਧ", "ਵੀਰ", "ਸ਼ੁੱਕਰ", "ਸ਼ਨਿੱਚਰ"],
+            longhand: [
+                "ਐਤਵਾਰ",
+                "ਸੋਮਵਾਰ",
+                "ਮੰਗਲਵਾਰ",
+                "ਬੁੱਧਵਾਰ",
+                "ਵੀਰਵਾਰ",
+                "ਸ਼ੁੱਕਰਵਾਰ",
+                "ਸ਼ਨਿੱਚਰਵਾਰ",
+            ],
+        },
+        months: {
+            shorthand: [
+                "ਜਨ",
+                "ਫ਼ਰ",
+                "ਮਾਰ",
+                "ਅਪ੍ਰੈ",
+                "ਮਈ",
+                "ਜੂਨ",
+                "ਜੁਲਾ",
+                "ਅਗ",
+                "ਸਤੰ",
+                "ਅਕ",
+                "ਨਵੰ",
+                "ਦਸੰ",
+            ],
+            longhand: [
+                "ਜਨਵਰੀ",
+                "ਫ਼ਰਵਰੀ",
+                "ਮਾਰਚ",
+                "ਅਪ੍ਰੈਲ",
+                "ਮਈ",
+                "ਜੂਨ",
+                "ਜੁਲਾਈ",
+                "ਅਗਸਤ",
+                "ਸਤੰਬਰ",
+                "ਅਕਤੂਬਰ",
+                "ਨਵੰਬਰ",
+                "ਦਸੰਬਰ",
+            ],
+        },
+        time_24hr: true,
+    };
+    fp$E.l10ns.pa = Punjabi;
+    fp$E.l10ns;
+
+    var fp$F = typeof window !== "undefined" && window.flatpickr !== undefined
+        ? window.flatpickr
+        : {
+            l10ns: {},
+        };
+    var Polish = {
+        weekdays: {
+            shorthand: ["Nd", "Pn", "Wt", "Śr", "Cz", "Pt", "So"],
+            longhand: [
+                "Niedziela",
+                "Poniedziałek",
+                "Wtorek",
+                "Środa",
+                "Czwartek",
+                "Piątek",
+                "Sobota",
+            ],
+        },
+        months: {
+            shorthand: [
+                "Sty",
+                "Lut",
+                "Mar",
+                "Kwi",
+                "Maj",
+                "Cze",
+                "Lip",
+                "Sie",
+                "Wrz",
+                "Paź",
+                "Lis",
+                "Gru",
+            ],
+            longhand: [
+                "Styczeń",
+                "Luty",
+                "Marzec",
+                "Kwiecień",
+                "Maj",
+                "Czerwiec",
+                "Lipiec",
+                "Sierpień",
+                "Wrzesień",
+                "Październik",
+                "Listopad",
+                "Grudzień",
+            ],
+        },
+        rangeSeparator: " do ",
+        weekAbbreviation: "tydz.",
+        scrollTitle: "Przewiń, aby zwiększyć",
+        toggleTitle: "Kliknij, aby przełączyć",
+        firstDayOfWeek: 1,
+        time_24hr: true,
+        ordinal: function () {
+            return ".";
+        },
+    };
+    fp$F.l10ns.pl = Polish;
+    fp$F.l10ns;
+
+    var fp$G = typeof window !== "undefined" && window.flatpickr !== undefined
+        ? window.flatpickr
+        : {
+            l10ns: {},
+        };
+    var Portuguese = {
+        weekdays: {
+            shorthand: ["Dom", "Seg", "Ter", "Qua", "Qui", "Sex", "Sáb"],
+            longhand: [
+                "Domingo",
+                "Segunda-feira",
+                "Terça-feira",
+                "Quarta-feira",
+                "Quinta-feira",
+                "Sexta-feira",
+                "Sábado",
+            ],
+        },
+        months: {
+            shorthand: [
+                "Jan",
+                "Fev",
+                "Mar",
+                "Abr",
+                "Mai",
+                "Jun",
+                "Jul",
+                "Ago",
+                "Set",
+                "Out",
+                "Nov",
+                "Dez",
+            ],
+            longhand: [
+                "Janeiro",
+                "Fevereiro",
+                "Março",
+                "Abril",
+                "Maio",
+                "Junho",
+                "Julho",
+                "Agosto",
+                "Setembro",
+                "Outubro",
+                "Novembro",
+                "Dezembro",
+            ],
+        },
+        rangeSeparator: " até ",
+        time_24hr: true,
+    };
+    fp$G.l10ns.pt = Portuguese;
+    fp$G.l10ns;
+
+    var fp$H = typeof window !== "undefined" && window.flatpickr !== undefined
+        ? window.flatpickr
+        : {
+            l10ns: {},
+        };
+    var Romanian = {
+        weekdays: {
+            shorthand: ["Dum", "Lun", "Mar", "Mie", "Joi", "Vin", "Sâm"],
+            longhand: [
+                "Duminică",
+                "Luni",
+                "Marți",
+                "Miercuri",
+                "Joi",
+                "Vineri",
+                "Sâmbătă",
+            ],
+        },
+        months: {
+            shorthand: [
+                "Ian",
+                "Feb",
+                "Mar",
+                "Apr",
+                "Mai",
+                "Iun",
+                "Iul",
+                "Aug",
+                "Sep",
+                "Oct",
+                "Noi",
+                "Dec",
+            ],
+            longhand: [
+                "Ianuarie",
+                "Februarie",
+                "Martie",
+                "Aprilie",
+                "Mai",
+                "Iunie",
+                "Iulie",
+                "August",
+                "Septembrie",
+                "Octombrie",
+                "Noiembrie",
+                "Decembrie",
+            ],
+        },
+        firstDayOfWeek: 1,
+        time_24hr: true,
+        ordinal: function () {
+            return "";
+        },
+    };
+    fp$H.l10ns.ro = Romanian;
+    fp$H.l10ns;
+
+    var fp$I = typeof window !== "undefined" && window.flatpickr !== undefined
+        ? window.flatpickr
+        : {
+            l10ns: {},
+        };
+    var Russian = {
+        weekdays: {
+            shorthand: ["Вс", "Пн", "Вт", "Ср", "Чт", "Пт", "Сб"],
+            longhand: [
+                "Воскресенье",
+                "Понедельник",
+                "Вторник",
+                "Среда",
+                "Четверг",
+                "Пятница",
+                "Суббота",
+            ],
+        },
+        months: {
+            shorthand: [
+                "Янв",
+                "Фев",
+                "Март",
+                "Апр",
+                "Май",
+                "Июнь",
+                "Июль",
+                "Авг",
+                "Сен",
+                "Окт",
+                "Ноя",
+                "Дек",
+            ],
+            longhand: [
+                "Январь",
+                "Февраль",
+                "Март",
+                "Апрель",
+                "Май",
+                "Июнь",
+                "Июль",
+                "Август",
+                "Сентябрь",
+                "Октябрь",
+                "Ноябрь",
+                "Декабрь",
+            ],
+        },
+        firstDayOfWeek: 1,
+        ordinal: function () {
+            return "";
+        },
+        rangeSeparator: " — ",
+        weekAbbreviation: "Нед.",
+        scrollTitle: "Прокрутите для увеличения",
+        toggleTitle: "Нажмите для переключения",
+        amPM: ["ДП", "ПП"],
+        yearAriaLabel: "Год",
+        time_24hr: true,
+    };
+    fp$I.l10ns.ru = Russian;
+    fp$I.l10ns;
+
+    var fp$J = typeof window !== "undefined" && window.flatpickr !== undefined
+        ? window.flatpickr
+        : {
+            l10ns: {},
+        };
+    var Sinhala = {
+        weekdays: {
+            shorthand: ["ඉ", "ස", "අ", "බ", "බ්‍ර", "සි", "සෙ"],
+            longhand: [
+                "ඉරිදා",
+                "සඳුදා",
+                "අඟහරුවාදා",
+                "බදාදා",
+                "බ්‍රහස්පතින්දා",
+                "සිකුරාදා",
+                "සෙනසුරාදා",
+            ],
+        },
+        months: {
+            shorthand: [
+                "ජන",
+                "පෙබ",
+                "මාර්",
+                "අප්‍රේ",
+                "මැයි",
+                "ජුනි",
+                "ජූලි",
+                "අගෝ",
+                "සැප්",
+                "ඔක්",
+                "නොවැ",
+                "දෙසැ",
+            ],
+            longhand: [
+                "ජනවාරි",
+                "පෙබරවාරි",
+                "මාර්තු",
+                "අප්‍රේල්",
+                "මැයි",
+                "ජුනි",
+                "ජූලි",
+                "අගෝස්තු",
+                "සැප්තැම්බර්",
+                "ඔක්තෝබර්",
+                "නොවැම්බර්",
+                "දෙසැම්බර්",
+            ],
+        },
+        time_24hr: true,
+    };
+    fp$J.l10ns.si = Sinhala;
+    fp$J.l10ns;
+
+    var fp$K = typeof window !== "undefined" && window.flatpickr !== undefined
+        ? window.flatpickr
+        : {
+            l10ns: {},
+        };
+    var Slovak = {
+        weekdays: {
+            shorthand: ["Ned", "Pon", "Ut", "Str", "Štv", "Pia", "Sob"],
+            longhand: [
+                "Nedeľa",
+                "Pondelok",
+                "Utorok",
+                "Streda",
+                "Štvrtok",
+                "Piatok",
+                "Sobota",
+            ],
+        },
+        months: {
+            shorthand: [
+                "Jan",
+                "Feb",
+                "Mar",
+                "Apr",
+                "Máj",
+                "Jún",
+                "Júl",
+                "Aug",
+                "Sep",
+                "Okt",
+                "Nov",
+                "Dec",
+            ],
+            longhand: [
+                "Január",
+                "Február",
+                "Marec",
+                "Apríl",
+                "Máj",
+                "Jún",
+                "Júl",
+                "August",
+                "September",
+                "Október",
+                "November",
+                "December",
+            ],
+        },
+        firstDayOfWeek: 1,
+        rangeSeparator: " do ",
+        time_24hr: true,
+        ordinal: function () {
+            return ".";
+        },
+    };
+    fp$K.l10ns.sk = Slovak;
+    fp$K.l10ns;
+
+    var fp$L = typeof window !== "undefined" && window.flatpickr !== undefined
+        ? window.flatpickr
+        : {
+            l10ns: {},
+        };
+    var Slovenian = {
+        weekdays: {
+            shorthand: ["Ned", "Pon", "Tor", "Sre", "Čet", "Pet", "Sob"],
+            longhand: [
+                "Nedelja",
+                "Ponedeljek",
+                "Torek",
+                "Sreda",
+                "Četrtek",
+                "Petek",
+                "Sobota",
+            ],
+        },
+        months: {
+            shorthand: [
+                "Jan",
+                "Feb",
+                "Mar",
+                "Apr",
+                "Maj",
+                "Jun",
+                "Jul",
+                "Avg",
+                "Sep",
+                "Okt",
+                "Nov",
+                "Dec",
+            ],
+            longhand: [
+                "Januar",
+                "Februar",
+                "Marec",
+                "April",
+                "Maj",
+                "Junij",
+                "Julij",
+                "Avgust",
+                "September",
+                "Oktober",
+                "November",
+                "December",
+            ],
+        },
+        firstDayOfWeek: 1,
+        rangeSeparator: " do ",
+        time_24hr: true,
+        ordinal: function () {
+            return ".";
+        },
+    };
+    fp$L.l10ns.sl = Slovenian;
+    fp$L.l10ns;
+
+    var fp$M = typeof window !== "undefined" && window.flatpickr !== undefined
+        ? window.flatpickr
+        : {
+            l10ns: {},
+        };
+    var Albanian = {
+        weekdays: {
+            shorthand: ["Di", "Hë", "Ma", "Më", "En", "Pr", "Sh"],
+            longhand: [
+                "E Diel",
+                "E Hënë",
+                "E Martë",
+                "E Mërkurë",
+                "E Enjte",
+                "E Premte",
+                "E Shtunë",
+            ],
+        },
+        months: {
+            shorthand: [
+                "Jan",
+                "Shk",
+                "Mar",
+                "Pri",
+                "Maj",
+                "Qer",
+                "Kor",
+                "Gus",
+                "Sht",
+                "Tet",
+                "Nën",
+                "Dhj",
+            ],
+            longhand: [
+                "Janar",
+                "Shkurt",
+                "Mars",
+                "Prill",
+                "Maj",
+                "Qershor",
+                "Korrik",
+                "Gusht",
+                "Shtator",
+                "Tetor",
+                "Nëntor",
+                "Dhjetor",
+            ],
+        },
+        time_24hr: true,
+    };
+    fp$M.l10ns.sq = Albanian;
+    fp$M.l10ns;
+
+    var fp$N = typeof window !== "undefined" && window.flatpickr !== undefined
+        ? window.flatpickr
+        : {
+            l10ns: {},
+        };
+    var Serbian = {
+        weekdays: {
+            shorthand: ["Ned", "Pon", "Uto", "Sre", "Čet", "Pet", "Sub"],
+            longhand: [
+                "Nedelja",
+                "Ponedeljak",
+                "Utorak",
+                "Sreda",
+                "Četvrtak",
+                "Petak",
+                "Subota",
+            ],
+        },
+        months: {
+            shorthand: [
+                "Jan",
+                "Feb",
+                "Mar",
+                "Apr",
+                "Maj",
+                "Jun",
+                "Jul",
+                "Avg",
+                "Sep",
+                "Okt",
+                "Nov",
+                "Dec",
+            ],
+            longhand: [
+                "Januar",
+                "Februar",
+                "Mart",
+                "April",
+                "Maj",
+                "Jun",
+                "Jul",
+                "Avgust",
+                "Septembar",
+                "Oktobar",
+                "Novembar",
+                "Decembar",
+            ],
+        },
+        firstDayOfWeek: 1,
+        weekAbbreviation: "Ned.",
+        rangeSeparator: " do ",
+        time_24hr: true,
+    };
+    fp$N.l10ns.sr = Serbian;
+    fp$N.l10ns;
+
+    var fp$O = typeof window !== "undefined" && window.flatpickr !== undefined
+        ? window.flatpickr
+        : {
+            l10ns: {},
+        };
+    var Swedish = {
+        firstDayOfWeek: 1,
+        weekAbbreviation: "v",
+        weekdays: {
+            shorthand: ["Sön", "Mån", "Tis", "Ons", "Tor", "Fre", "Lör"],
+            longhand: [
+                "Söndag",
+                "Måndag",
+                "Tisdag",
+                "Onsdag",
+                "Torsdag",
+                "Fredag",
+                "Lördag",
+            ],
+        },
+        months: {
+            shorthand: [
+                "Jan",
+                "Feb",
+                "Mar",
+                "Apr",
+                "Maj",
+                "Jun",
+                "Jul",
+                "Aug",
+                "Sep",
+                "Okt",
+                "Nov",
+                "Dec",
+            ],
+            longhand: [
+                "Januari",
+                "Februari",
+                "Mars",
+                "April",
+                "Maj",
+                "Juni",
+                "Juli",
+                "Augusti",
+                "September",
+                "Oktober",
+                "November",
+                "December",
+            ],
+        },
+        time_24hr: true,
+        ordinal: function () {
+            return ".";
+        },
+    };
+    fp$O.l10ns.sv = Swedish;
+    fp$O.l10ns;
+
+    var fp$P = typeof window !== "undefined" && window.flatpickr !== undefined
+        ? window.flatpickr
+        : {
+            l10ns: {},
+        };
+    var Thai = {
+        weekdays: {
+            shorthand: ["อา", "จ", "อ", "พ", "พฤ", "ศ", "ส"],
+            longhand: [
+                "อาทิตย์",
+                "จันทร์",
+                "อังคาร",
+                "พุธ",
+                "พฤหัสบดี",
+                "ศุกร์",
+                "เสาร์",
+            ],
+        },
+        months: {
+            shorthand: [
+                "ม.ค.",
+                "ก.พ.",
+                "มี.ค.",
+                "เม.ย.",
+                "พ.ค.",
+                "มิ.ย.",
+                "ก.ค.",
+                "ส.ค.",
+                "ก.ย.",
+                "ต.ค.",
+                "พ.ย.",
+                "ธ.ค.",
+            ],
+            longhand: [
+                "มกราคม",
+                "กุมภาพันธ์",
+                "มีนาคม",
+                "เมษายน",
+                "พฤษภาคม",
+                "มิถุนายน",
+                "กรกฎาคม",
+                "สิงหาคม",
+                "กันยายน",
+                "ตุลาคม",
+                "พฤศจิกายน",
+                "ธันวาคม",
+            ],
+        },
+        firstDayOfWeek: 1,
+        rangeSeparator: " ถึง ",
+        scrollTitle: "เลื่อนเพื่อเพิ่มหรือลด",
+        toggleTitle: "คลิกเพื่อเปลี่ยน",
+        time_24hr: true,
+        ordinal: function () {
+            return "";
+        },
+    };
+    fp$P.l10ns.th = Thai;
+    fp$P.l10ns;
+
+    var fp$Q = typeof window !== "undefined" && window.flatpickr !== undefined
+        ? window.flatpickr
+        : {
+            l10ns: {},
+        };
+    var Turkish = {
+        weekdays: {
+            shorthand: ["Paz", "Pzt", "Sal", "Çar", "Per", "Cum", "Cmt"],
+            longhand: [
+                "Pazar",
+                "Pazartesi",
+                "Salı",
+                "Çarşamba",
+                "Perşembe",
+                "Cuma",
+                "Cumartesi",
+            ],
+        },
+        months: {
+            shorthand: [
+                "Oca",
+                "Şub",
+                "Mar",
+                "Nis",
+                "May",
+                "Haz",
+                "Tem",
+                "Ağu",
+                "Eyl",
+                "Eki",
+                "Kas",
+                "Ara",
+            ],
+            longhand: [
+                "Ocak",
+                "Şubat",
+                "Mart",
+                "Nisan",
+                "Mayıs",
+                "Haziran",
+                "Temmuz",
+                "Ağustos",
+                "Eylül",
+                "Ekim",
+                "Kasım",
+                "Aralık",
+            ],
+        },
+        firstDayOfWeek: 1,
+        ordinal: function () {
+            return ".";
+        },
+        rangeSeparator: " - ",
+        weekAbbreviation: "Hf",
+        scrollTitle: "Artırmak için kaydırın",
+        toggleTitle: "Aç/Kapa",
+        amPM: ["ÖÖ", "ÖS"],
+        time_24hr: true,
+    };
+    fp$Q.l10ns.tr = Turkish;
+    fp$Q.l10ns;
+
+    var fp$R = typeof window !== "undefined" && window.flatpickr !== undefined
+        ? window.flatpickr
+        : {
+            l10ns: {},
+        };
+    var Ukrainian = {
+        firstDayOfWeek: 1,
+        weekdays: {
+            shorthand: ["Нд", "Пн", "Вт", "Ср", "Чт", "Пт", "Сб"],
+            longhand: [
+                "Неділя",
+                "Понеділок",
+                "Вівторок",
+                "Середа",
+                "Четвер",
+                "П'ятниця",
+                "Субота",
+            ],
+        },
+        months: {
+            shorthand: [
+                "Січ",
+                "Лют",
+                "Бер",
+                "Кві",
+                "Тра",
+                "Чер",
+                "Лип",
+                "Сер",
+                "Вер",
+                "Жов",
+                "Лис",
+                "Гру",
+            ],
+            longhand: [
+                "Січень",
+                "Лютий",
+                "Березень",
+                "Квітень",
+                "Травень",
+                "Червень",
+                "Липень",
+                "Серпень",
+                "Вересень",
+                "Жовтень",
+                "Листопад",
+                "Грудень",
+            ],
+        },
+        time_24hr: true,
+    };
+    fp$R.l10ns.uk = Ukrainian;
+    fp$R.l10ns;
+
+    var fp$S = typeof window !== "undefined" && window.flatpickr !== undefined
+        ? window.flatpickr
+        : {
+            l10ns: {},
+        };
+    var Uzbek = {
+        weekdays: {
+            shorthand: ["Якш", "Душ", "Сеш", "Чор", "Пай", "Жум", "Шан"],
+            longhand: [
+                "Якшанба",
+                "Душанба",
+                "Сешанба",
+                "Чоршанба",
+                "Пайшанба",
+                "Жума",
+                "Шанба",
+            ],
+        },
+        months: {
+            shorthand: [
+                "Янв",
+                "Фев",
+                "Мар",
+                "Апр",
+                "Май",
+                "Июн",
+                "Июл",
+                "Авг",
+                "Сен",
+                "Окт",
+                "Ноя",
+                "Дек",
+            ],
+            longhand: [
+                "Январ",
+                "Феврал",
+                "Март",
+                "Апрел",
+                "Май",
+                "Июн",
+                "Июл",
+                "Август",
+                "Сентябр",
+                "Октябр",
+                "Ноябр",
+                "Декабр",
+            ],
+        },
+        firstDayOfWeek: 1,
+        ordinal: function () {
+            return "";
+        },
+        rangeSeparator: " — ",
+        weekAbbreviation: "Ҳафта",
+        scrollTitle: "Катталаштириш учун айлантиринг",
+        toggleTitle: "Ўтиш учун босинг",
+        amPM: ["AM", "PM"],
+        yearAriaLabel: "Йил",
+        time_24hr: true,
+    };
+    fp$S.l10ns.uz = Uzbek;
+    fp$S.l10ns;
+
+    var fp$T = typeof window !== "undefined" && window.flatpickr !== undefined
+        ? window.flatpickr
+        : {
+            l10ns: {},
+        };
+    var UzbekLatin = {
+        weekdays: {
+            shorthand: ["Ya", "Du", "Se", "Cho", "Pa", "Ju", "Sha"],
+            longhand: [
+                "Yakshanba",
+                "Dushanba",
+                "Seshanba",
+                "Chorshanba",
+                "Payshanba",
+                "Juma",
+                "Shanba",
+            ],
+        },
+        months: {
+            shorthand: [
+                "Yan",
+                "Fev",
+                "Mar",
+                "Apr",
+                "May",
+                "Iyun",
+                "Iyul",
+                "Avg",
+                "Sen",
+                "Okt",
+                "Noy",
+                "Dek",
+            ],
+            longhand: [
+                "Yanvar",
+                "Fevral",
+                "Mart",
+                "Aprel",
+                "May",
+                "Iyun",
+                "Iyul",
+                "Avgust",
+                "Sentabr",
+                "Oktabr",
+                "Noyabr",
+                "Dekabr",
+            ],
+        },
+        firstDayOfWeek: 1,
+        ordinal: function () {
+            return "";
+        },
+        rangeSeparator: " — ",
+        weekAbbreviation: "Hafta",
+        scrollTitle: "Kattalashtirish uchun aylantiring",
+        toggleTitle: "O‘tish uchun bosing",
+        amPM: ["AM", "PM"],
+        yearAriaLabel: "Yil",
+        time_24hr: true,
+    };
+    fp$T.l10ns["uz_latn"] = UzbekLatin;
+    fp$T.l10ns;
+
+    var fp$U = typeof window !== "undefined" && window.flatpickr !== undefined
+        ? window.flatpickr
+        : {
+            l10ns: {},
+        };
+    var Vietnamese = {
+        weekdays: {
+            shorthand: ["CN", "T2", "T3", "T4", "T5", "T6", "T7"],
+            longhand: [
+                "Chủ nhật",
+                "Thứ hai",
+                "Thứ ba",
+                "Thứ tư",
+                "Thứ năm",
+                "Thứ sáu",
+                "Thứ bảy",
+            ],
+        },
+        months: {
+            shorthand: [
+                "Th1",
+                "Th2",
+                "Th3",
+                "Th4",
+                "Th5",
+                "Th6",
+                "Th7",
+                "Th8",
+                "Th9",
+                "Th10",
+                "Th11",
+                "Th12",
+            ],
+            longhand: [
+                "Tháng một",
+                "Tháng hai",
+                "Tháng ba",
+                "Tháng tư",
+                "Tháng năm",
+                "Tháng sáu",
+                "Tháng bảy",
+                "Tháng tám",
+                "Tháng chín",
+                "Tháng mười",
+                "Tháng 11",
+                "Tháng 12",
+            ],
+        },
+        firstDayOfWeek: 1,
+        rangeSeparator: " đến ",
+    };
+    fp$U.l10ns.vn = Vietnamese;
+    fp$U.l10ns;
+
+    var fp$V = typeof window !== "undefined" && window.flatpickr !== undefined
+        ? window.flatpickr
+        : {
+            l10ns: {},
+        };
+    var Mandarin = {
+        weekdays: {
+            shorthand: ["周日", "周一", "周二", "周三", "周四", "周五", "周六"],
+            longhand: [
+                "星期日",
+                "星期一",
+                "星期二",
+                "星期三",
+                "星期四",
+                "星期五",
+                "星期六",
+            ],
+        },
+        months: {
+            shorthand: [
+                "一月",
+                "二月",
+                "三月",
+                "四月",
+                "五月",
+                "六月",
+                "七月",
+                "八月",
+                "九月",
+                "十月",
+                "十一月",
+                "十二月",
+            ],
+            longhand: [
+                "一月",
+                "二月",
+                "三月",
+                "四月",
+                "五月",
+                "六月",
+                "七月",
+                "八月",
+                "九月",
+                "十月",
+                "十一月",
+                "十二月",
+            ],
+        },
+        rangeSeparator: " 至 ",
+        weekAbbreviation: "周",
+        scrollTitle: "滚动切换",
+        toggleTitle: "点击切换 12/24 小时时制",
+    };
+    fp$V.l10ns.zh = Mandarin;
+    fp$V.l10ns;
+
+    var fp$W = typeof window !== "undefined" && window.flatpickr !== undefined
+        ? window.flatpickr
+        : {
+            l10ns: {},
+        };
+    var MandarinTraditional = {
+        weekdays: {
+            shorthand: ["週日", "週一", "週二", "週三", "週四", "週五", "週六"],
+            longhand: [
+                "星期日",
+                "星期一",
+                "星期二",
+                "星期三",
+                "星期四",
+                "星期五",
+                "星期六",
+            ],
+        },
+        months: {
+            shorthand: [
+                "一月",
+                "二月",
+                "三月",
+                "四月",
+                "五月",
+                "六月",
+                "七月",
+                "八月",
+                "九月",
+                "十月",
+                "十一月",
+                "十二月",
+            ],
+            longhand: [
+                "一月",
+                "二月",
+                "三月",
+                "四月",
+                "五月",
+                "六月",
+                "七月",
+                "八月",
+                "九月",
+                "十月",
+                "十一月",
+                "十二月",
+            ],
+        },
+        rangeSeparator: " 至 ",
+        weekAbbreviation: "週",
+        scrollTitle: "滾動切換",
+        toggleTitle: "點擊切換 12/24 小時時制",
+    };
+    fp$W.l10ns.zh_tw = MandarinTraditional;
+    fp$W.l10ns;
+
+    var l10n = {
+        ar: Arabic,
+        at: Austria,
+        az: Azerbaijan,
+        be: Belarusian,
+        bg: Bulgarian,
+        bn: Bangla,
+        bs: Bosnian,
+        ca: Catalan,
+        cat: Catalan,
+        cs: Czech,
+        cy: Welsh,
+        da: Danish,
+        de: German,
+        default: __assign({}, english),
+        en: english,
+        eo: Esperanto,
+        es: Spanish,
+        et: Estonian,
+        fa: Persian,
+        fi: Finnish,
+        fo: Faroese,
+        fr: French,
+        gr: Greek,
+        he: Hebrew,
+        hi: Hindi,
+        hr: Croatian,
+        hu: Hungarian,
+        id: Indonesian,
+        is: Icelandic,
+        it: Italian,
+        ja: Japanese,
+        ka: Georgian,
+        ko: Korean,
+        km: Khmer,
+        kz: Kazakh,
+        lt: Lithuanian,
+        lv: Latvian,
+        mk: Macedonian,
+        mn: Mongolian,
+        ms: Malaysian,
+        my: Burmese,
+        nl: Dutch,
+        no: Norwegian,
+        pa: Punjabi,
+        pl: Polish,
+        pt: Portuguese,
+        ro: Romanian,
+        ru: Russian,
+        si: Sinhala,
+        sk: Slovak,
+        sl: Slovenian,
+        sq: Albanian,
+        sr: Serbian,
+        sv: Swedish,
+        th: Thai,
+        tr: Turkish,
+        uk: Ukrainian,
+        vn: Vietnamese,
+        zh: Mandarin,
+        zh_tw: MandarinTraditional,
+        uz: Uzbek,
+        uz_latn: UzbekLatin,
+    };
+
+    exports.default = l10n;
+
+    Object.defineProperty(exports, '__esModule', { value: true });
+
+})));
diff --git a/admin/js/vendors/flatpickr/plugins/confirmDate/confirmDate.css b/admin/js/vendors/flatpickr/plugins/confirmDate/confirmDate.css
new file mode 100644 (file)
index 0000000..9508ea9
--- /dev/null
@@ -0,0 +1,24 @@
+.flatpickr-confirm {
+       height: 40px;
+       max-height: 0px;
+       visibility: hidden;
+       display: flex;
+       justify-content: center;
+       align-items: center;
+       cursor: pointer;
+       background: rgba(0,0,0,0.06)
+}
+
+.flatpickr-confirm svg path {
+       fill: inherit;
+}
+
+.flatpickr-confirm.darkTheme {
+       color: white;
+       fill: white;
+}
+
+.flatpickr-confirm.visible {
+       max-height: 40px;
+       visibility: visible
+}
diff --git a/admin/js/vendors/flatpickr/plugins/confirmDate/confirmDate.d.ts b/admin/js/vendors/flatpickr/plugins/confirmDate/confirmDate.d.ts
new file mode 100644 (file)
index 0000000..a4ddf39
--- /dev/null
@@ -0,0 +1,9 @@
+import { Plugin } from "../../types/options";
+export interface Config {
+    confirmIcon?: string;
+    confirmText?: string;
+    showAlways?: boolean;
+    theme?: string;
+}
+declare function confirmDatePlugin(pluginConfig: Config): Plugin;
+export default confirmDatePlugin;
diff --git a/admin/js/vendors/flatpickr/plugins/confirmDate/confirmDate.js b/admin/js/vendors/flatpickr/plugins/confirmDate/confirmDate.js
new file mode 100644 (file)
index 0000000..8c55a4e
--- /dev/null
@@ -0,0 +1,100 @@
+(function (global, factory) {
+    typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
+    typeof define === 'function' && define.amd ? define(factory) :
+    (global = global || self, global.confirmDatePlugin = factory());
+}(this, (function () { 'use strict';
+
+    /*! *****************************************************************************
+    Copyright (c) Microsoft Corporation.
+
+    Permission to use, copy, modify, and/or distribute this software for any
+    purpose with or without fee is hereby granted.
+
+    THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
+    REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+    AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
+    INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+    LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
+    OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+    PERFORMANCE OF THIS SOFTWARE.
+    ***************************************************************************** */
+
+    var __assign = function() {
+        __assign = Object.assign || function __assign(t) {
+            for (var s, i = 1, n = arguments.length; i < n; i++) {
+                s = arguments[i];
+                for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
+            }
+            return t;
+        };
+        return __assign.apply(this, arguments);
+    };
+
+    function getEventTarget(event) {
+        try {
+            if (typeof event.composedPath === "function") {
+                var path = event.composedPath();
+                return path[0];
+            }
+            return event.target;
+        }
+        catch (error) {
+            return event.target;
+        }
+    }
+
+    var defaultConfig = {
+        confirmIcon: "<svg version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' width='17' height='17' viewBox='0 0 17 17'> <g> </g> <path d='M15.418 1.774l-8.833 13.485-4.918-4.386 0.666-0.746 4.051 3.614 8.198-12.515 0.836 0.548z' fill='#000000' /> </svg>",
+        confirmText: "OK ",
+        showAlways: false,
+        theme: "light",
+    };
+    function confirmDatePlugin(pluginConfig) {
+        var config = __assign(__assign({}, defaultConfig), pluginConfig);
+        var confirmContainer;
+        var confirmButtonCSSClass = "flatpickr-confirm";
+        return function (fp) {
+            if (fp.config.noCalendar || fp.isMobile)
+                return {};
+            return __assign({ onKeyDown: function (_, __, ___, e) {
+                    var eventTarget = getEventTarget(e);
+                    if (fp.config.enableTime &&
+                        e.key === "Tab" &&
+                        eventTarget === fp.amPM) {
+                        e.preventDefault();
+                        confirmContainer.focus();
+                    }
+                    else if (e.key === "Enter" && eventTarget === confirmContainer)
+                        fp.close();
+                },
+                onReady: function () {
+                    confirmContainer = fp._createElement("div", confirmButtonCSSClass + " " + (config.showAlways ? "visible" : "") + " " + config.theme + "Theme", config.confirmText);
+                    confirmContainer.tabIndex = -1;
+                    confirmContainer.innerHTML += config.confirmIcon;
+                    confirmContainer.addEventListener("click", fp.close);
+                    fp.calendarContainer.appendChild(confirmContainer);
+                    fp.loadedPlugins.push("confirmDate");
+                } }, (!config.showAlways
+                ? {
+                    onChange: function (_, dateStr) {
+                        var showCondition = fp.config.enableTime ||
+                            fp.config.mode === "multiple" ||
+                            fp.loadedPlugins.indexOf("monthSelect") !== -1;
+                        var localConfirmContainer = fp.calendarContainer.querySelector("." + confirmButtonCSSClass);
+                        if (!localConfirmContainer)
+                            return;
+                        if (dateStr &&
+                            !fp.config.inline &&
+                            showCondition &&
+                            localConfirmContainer)
+                            return localConfirmContainer.classList.add("visible");
+                        localConfirmContainer.classList.remove("visible");
+                    },
+                }
+                : {}));
+        };
+    }
+
+    return confirmDatePlugin;
+
+})));
diff --git a/admin/js/vendors/flatpickr/plugins/labelPlugin/labelPlugin.d.ts b/admin/js/vendors/flatpickr/plugins/labelPlugin/labelPlugin.d.ts
new file mode 100644 (file)
index 0000000..1a9cbce
--- /dev/null
@@ -0,0 +1,3 @@
+import { Plugin } from "../../types/options";
+declare function labelPlugin(): Plugin;
+export default labelPlugin;
diff --git a/admin/js/vendors/flatpickr/plugins/labelPlugin/labelPlugin.js b/admin/js/vendors/flatpickr/plugins/labelPlugin/labelPlugin.js
new file mode 100644 (file)
index 0000000..1d8f0b0
--- /dev/null
@@ -0,0 +1,31 @@
+(function (global, factory) {
+  typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
+  typeof define === 'function' && define.amd ? define(factory) :
+  (global = global || self, global.labelPlugin = factory());
+}(this, (function () { 'use strict';
+
+  function labelPlugin() {
+      return function (fp) {
+          return {
+              onReady: function () {
+                  var id = fp.input.id;
+                  if (!id) {
+                      return;
+                  }
+                  if (fp.mobileInput) {
+                      fp.input.removeAttribute("id");
+                      fp.mobileInput.id = id;
+                  }
+                  else if (fp.altInput) {
+                      fp.input.removeAttribute("id");
+                      fp.altInput.id = id;
+                  }
+                  fp.loadedPlugins.push("labelPlugin");
+              },
+          };
+      };
+  }
+
+  return labelPlugin;
+
+})));
diff --git a/admin/js/vendors/flatpickr/plugins/minMaxTimePlugin.d.ts b/admin/js/vendors/flatpickr/plugins/minMaxTimePlugin.d.ts
new file mode 100644 (file)
index 0000000..4fe2e5c
--- /dev/null
@@ -0,0 +1,17 @@
+import { Plugin } from "../types/options";
+export interface MinMaxTime {
+    minTime?: string;
+    maxTime?: string;
+}
+export interface Config {
+    table?: Record<string, MinMaxTime>;
+    getTimeLimits?: (date: Date) => MinMaxTime;
+    tableDateFormat?: string;
+}
+export interface State {
+    formatDate: (date: Date, f: string) => string;
+    tableDateFormat: string;
+    defaults: MinMaxTime;
+}
+declare function minMaxTimePlugin(config?: Config): Plugin;
+export default minMaxTimePlugin;
diff --git a/admin/js/vendors/flatpickr/plugins/minMaxTimePlugin.js b/admin/js/vendors/flatpickr/plugins/minMaxTimePlugin.js
new file mode 100644 (file)
index 0000000..cfc485f
--- /dev/null
@@ -0,0 +1,332 @@
+(function (global, factory) {
+  typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
+  typeof define === 'function' && define.amd ? define(factory) :
+  (global = global || self, global.minMaxTimePlugin = factory());
+}(this, (function () { 'use strict';
+
+  var pad = function (number, length) {
+      if (length === void 0) { length = 2; }
+      return ("000" + number).slice(length * -1);
+  };
+  var int = function (bool) { return (bool === true ? 1 : 0); };
+
+  var monthToStr = function (monthNumber, shorthand, locale) { return locale.months[shorthand ? "shorthand" : "longhand"][monthNumber]; };
+  var formats = {
+      // get the date in UTC
+      Z: function (date) { return date.toISOString(); },
+      // weekday name, short, e.g. Thu
+      D: function (date, locale, options) {
+          return locale.weekdays.shorthand[formats.w(date, locale, options)];
+      },
+      // full month name e.g. January
+      F: function (date, locale, options) {
+          return monthToStr(formats.n(date, locale, options) - 1, false, locale);
+      },
+      // padded hour 1-12
+      G: function (date, locale, options) {
+          return pad(formats.h(date, locale, options));
+      },
+      // hours with leading zero e.g. 03
+      H: function (date) { return pad(date.getHours()); },
+      // day (1-30) with ordinal suffix e.g. 1st, 2nd
+      J: function (date, locale) {
+          return locale.ordinal !== undefined
+              ? date.getDate() + locale.ordinal(date.getDate())
+              : date.getDate();
+      },
+      // AM/PM
+      K: function (date, locale) { return locale.amPM[int(date.getHours() > 11)]; },
+      // shorthand month e.g. Jan, Sep, Oct, etc
+      M: function (date, locale) {
+          return monthToStr(date.getMonth(), true, locale);
+      },
+      // seconds 00-59
+      S: function (date) { return pad(date.getSeconds()); },
+      // unix timestamp
+      U: function (date) { return date.getTime() / 1000; },
+      W: function (date, _, options) {
+          return options.getWeek(date);
+      },
+      // full year e.g. 2016, padded (0001-9999)
+      Y: function (date) { return pad(date.getFullYear(), 4); },
+      // day in month, padded (01-30)
+      d: function (date) { return pad(date.getDate()); },
+      // hour from 1-12 (am/pm)
+      h: function (date) { return (date.getHours() % 12 ? date.getHours() % 12 : 12); },
+      // minutes, padded with leading zero e.g. 09
+      i: function (date) { return pad(date.getMinutes()); },
+      // day in month (1-30)
+      j: function (date) { return date.getDate(); },
+      // weekday name, full, e.g. Thursday
+      l: function (date, locale) {
+          return locale.weekdays.longhand[date.getDay()];
+      },
+      // padded month number (01-12)
+      m: function (date) { return pad(date.getMonth() + 1); },
+      // the month number (1-12)
+      n: function (date) { return date.getMonth() + 1; },
+      // seconds 0-59
+      s: function (date) { return date.getSeconds(); },
+      // Unix Milliseconds
+      u: function (date) { return date.getTime(); },
+      // number of the day of the week
+      w: function (date) { return date.getDay(); },
+      // last two digits of year e.g. 16 for 2016
+      y: function (date) { return String(date.getFullYear()).substring(2); },
+  };
+
+  var defaults = {
+      _disable: [],
+      _enable: [],
+      allowInput: false,
+      allowInvalidPreload: false,
+      altFormat: "F j, Y",
+      altInput: false,
+      altInputClass: "form-control input",
+      animate: typeof window === "object" &&
+          window.navigator.userAgent.indexOf("MSIE") === -1,
+      ariaDateFormat: "F j, Y",
+      autoFillDefaultTime: true,
+      clickOpens: true,
+      closeOnSelect: true,
+      conjunction: ", ",
+      dateFormat: "Y-m-d",
+      defaultHour: 12,
+      defaultMinute: 0,
+      defaultSeconds: 0,
+      disable: [],
+      disableMobile: false,
+      enable: [],
+      enableSeconds: false,
+      enableTime: false,
+      errorHandler: function (err) {
+          return typeof console !== "undefined" && console.warn(err);
+      },
+      getWeek: function (givenDate) {
+          var date = new Date(givenDate.getTime());
+          date.setHours(0, 0, 0, 0);
+          // Thursday in current week decides the year.
+          date.setDate(date.getDate() + 3 - ((date.getDay() + 6) % 7));
+          // January 4 is always in week 1.
+          var week1 = new Date(date.getFullYear(), 0, 4);
+          // Adjust to Thursday in week 1 and count number of weeks from date to week1.
+          return (1 +
+              Math.round(((date.getTime() - week1.getTime()) / 86400000 -
+                  3 +
+                  ((week1.getDay() + 6) % 7)) /
+                  7));
+      },
+      hourIncrement: 1,
+      ignoredFocusElements: [],
+      inline: false,
+      locale: "default",
+      minuteIncrement: 5,
+      mode: "single",
+      monthSelectorType: "dropdown",
+      nextArrow: "<svg version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 17 17'><g></g><path d='M13.207 8.472l-7.854 7.854-0.707-0.707 7.146-7.146-7.146-7.148 0.707-0.707 7.854 7.854z' /></svg>",
+      noCalendar: false,
+      now: new Date(),
+      onChange: [],
+      onClose: [],
+      onDayCreate: [],
+      onDestroy: [],
+      onKeyDown: [],
+      onMonthChange: [],
+      onOpen: [],
+      onParseConfig: [],
+      onReady: [],
+      onValueUpdate: [],
+      onYearChange: [],
+      onPreCalendarPosition: [],
+      plugins: [],
+      position: "auto",
+      positionElement: undefined,
+      prevArrow: "<svg version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 17 17'><g></g><path d='M5.207 8.471l7.146 7.147-0.707 0.707-7.853-7.854 7.854-7.853 0.707 0.707-7.147 7.146z' /></svg>",
+      shorthandCurrentMonth: false,
+      showMonths: 1,
+      static: false,
+      time_24hr: false,
+      weekNumbers: false,
+      wrap: false,
+  };
+
+  var english = {
+      weekdays: {
+          shorthand: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"],
+          longhand: [
+              "Sunday",
+              "Monday",
+              "Tuesday",
+              "Wednesday",
+              "Thursday",
+              "Friday",
+              "Saturday",
+          ],
+      },
+      months: {
+          shorthand: [
+              "Jan",
+              "Feb",
+              "Mar",
+              "Apr",
+              "May",
+              "Jun",
+              "Jul",
+              "Aug",
+              "Sep",
+              "Oct",
+              "Nov",
+              "Dec",
+          ],
+          longhand: [
+              "January",
+              "February",
+              "March",
+              "April",
+              "May",
+              "June",
+              "July",
+              "August",
+              "September",
+              "October",
+              "November",
+              "December",
+          ],
+      },
+      daysInMonth: [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31],
+      firstDayOfWeek: 0,
+      ordinal: function (nth) {
+          var s = nth % 100;
+          if (s > 3 && s < 21)
+              return "th";
+          switch (s % 10) {
+              case 1:
+                  return "st";
+              case 2:
+                  return "nd";
+              case 3:
+                  return "rd";
+              default:
+                  return "th";
+          }
+      },
+      rangeSeparator: " to ",
+      weekAbbreviation: "Wk",
+      scrollTitle: "Scroll to increment",
+      toggleTitle: "Click to toggle",
+      amPM: ["AM", "PM"],
+      yearAriaLabel: "Year",
+      monthAriaLabel: "Month",
+      hourAriaLabel: "Hour",
+      minuteAriaLabel: "Minute",
+      time_24hr: false,
+  };
+
+  var createDateFormatter = function (_a) {
+      var _b = _a.config, config = _b === void 0 ? defaults : _b, _c = _a.l10n, l10n = _c === void 0 ? english : _c, _d = _a.isMobile, isMobile = _d === void 0 ? false : _d;
+      return function (dateObj, frmt, overrideLocale) {
+          var locale = overrideLocale || l10n;
+          if (config.formatDate !== undefined && !isMobile) {
+              return config.formatDate(dateObj, frmt, locale);
+          }
+          return frmt
+              .split("")
+              .map(function (c, i, arr) {
+              return formats[c] && arr[i - 1] !== "\\"
+                  ? formats[c](dateObj, locale, config)
+                  : c !== "\\"
+                      ? c
+                      : "";
+          })
+              .join("");
+      };
+  };
+  /**
+   * Compute the difference in dates, measured in ms
+   */
+  function compareDates(date1, date2, timeless) {
+      if (timeless === void 0) { timeless = true; }
+      if (timeless !== false) {
+          return (new Date(date1.getTime()).setHours(0, 0, 0, 0) -
+              new Date(date2.getTime()).setHours(0, 0, 0, 0));
+      }
+      return date1.getTime() - date2.getTime();
+  }
+  /**
+   * Compute the difference in times, measured in ms
+   */
+  function compareTimes(date1, date2) {
+      return (3600 * (date1.getHours() - date2.getHours()) +
+          60 * (date1.getMinutes() - date2.getMinutes()) +
+          date1.getSeconds() -
+          date2.getSeconds());
+  }
+
+  function minMaxTimePlugin(config) {
+      if (config === void 0) { config = {}; }
+      var state = {
+          formatDate: createDateFormatter({}),
+          tableDateFormat: config.tableDateFormat || "Y-m-d",
+          defaults: {
+              minTime: undefined,
+              maxTime: undefined,
+          },
+      };
+      function findDateTimeLimit(date) {
+          if (config.table !== undefined) {
+              return config.table[state.formatDate(date, state.tableDateFormat)];
+          }
+          return config.getTimeLimits && config.getTimeLimits(date);
+      }
+      return function (fp) {
+          return {
+              onReady: function () {
+                  state.formatDate = this.formatDate;
+                  state.defaults = {
+                      minTime: this.config.minTime && state.formatDate(this.config.minTime, "H:i"),
+                      maxTime: this.config.maxTime && state.formatDate(this.config.maxTime, "H:i"),
+                  };
+                  fp.loadedPlugins.push("minMaxTime");
+              },
+              onChange: function () {
+                  var latest = this.latestSelectedDateObj;
+                  var matchingTimeLimit = latest && findDateTimeLimit(latest);
+                  if (latest && matchingTimeLimit !== undefined) {
+                      this.set(matchingTimeLimit);
+                      fp.config.minTime.setFullYear(latest.getFullYear());
+                      fp.config.maxTime.setFullYear(latest.getFullYear());
+                      fp.config.minTime.setMonth(latest.getMonth());
+                      fp.config.maxTime.setMonth(latest.getMonth());
+                      fp.config.minTime.setDate(latest.getDate());
+                      fp.config.maxTime.setDate(latest.getDate());
+                      if (compareDates(latest, fp.config.maxTime, false) > 0) {
+                          fp.setDate(new Date(latest.getTime()).setHours(fp.config.maxTime.getHours(), fp.config.maxTime.getMinutes(), fp.config.maxTime.getSeconds(), fp.config.maxTime.getMilliseconds()), false);
+                      }
+                      else if (compareDates(latest, fp.config.minTime, false) < 0)
+                          fp.setDate(new Date(latest.getTime()).setHours(fp.config.minTime.getHours(), fp.config.minTime.getMinutes(), fp.config.minTime.getSeconds(), fp.config.minTime.getMilliseconds()), false);
+                  }
+                  else {
+                      var newMinMax = state.defaults || {
+                          minTime: undefined,
+                          maxTime: undefined,
+                      };
+                      this.set(newMinMax);
+                      if (!latest)
+                          return;
+                      var _a = fp.config, minTime = _a.minTime, maxTime = _a.maxTime;
+                      if (minTime && compareTimes(latest, minTime) < 0) {
+                          fp.setDate(new Date(latest.getTime()).setHours(minTime.getHours(), minTime.getMinutes(), minTime.getSeconds(), minTime.getMilliseconds()), false);
+                      }
+                      else if (maxTime && compareTimes(latest, maxTime) > 0) {
+                          fp.setDate(new Date(latest.getTime()).setHours(maxTime.getHours(), maxTime.getMinutes(), maxTime.getSeconds(), maxTime.getMilliseconds()));
+                      }
+                      //
+                  }
+              },
+          };
+      };
+  }
+
+  return minMaxTimePlugin;
+
+})));
diff --git a/admin/js/vendors/flatpickr/plugins/momentPlugin.d.ts b/admin/js/vendors/flatpickr/plugins/momentPlugin.d.ts
new file mode 100644 (file)
index 0000000..c0ed5aa
--- /dev/null
@@ -0,0 +1,6 @@
+import { Plugin } from "../types/options";
+export interface Config {
+    moment: Function;
+}
+declare function momentPlugin(config: Config): Plugin;
+export default momentPlugin;
diff --git a/admin/js/vendors/flatpickr/plugins/momentPlugin.js b/admin/js/vendors/flatpickr/plugins/momentPlugin.js
new file mode 100644 (file)
index 0000000..777ef3a
--- /dev/null
@@ -0,0 +1,69 @@
+(function (global, factory) {
+  typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
+  typeof define === 'function' && define.amd ? define(factory) :
+  (global = global || self, global.momentPlugin = factory());
+}(this, (function () { 'use strict';
+
+  function getEventTarget(event) {
+      try {
+          if (typeof event.composedPath === "function") {
+              var path = event.composedPath();
+              return path[0];
+          }
+          return event.target;
+      }
+      catch (error) {
+          return event.target;
+      }
+  }
+
+  function momentPlugin(config) {
+      var moment = config.moment;
+      return function (fp) {
+          function captureIncrement(e) {
+              var event = e;
+              event.stopPropagation();
+              var date = moment(fp.selectedDates[0]);
+              var input = getEventTarget(event);
+              var unit = Array.from(input.classList)
+                  .filter(function (name) { return name.startsWith("flatpickr-"); })
+                  .map(function (name) { return name.substring(10); })[0];
+              var step = parseFloat(input.getAttribute("step"));
+              date.add(step * event.delta, unit);
+              fp.setDate(date.toDate());
+          }
+          return {
+              parseDate: function (datestr, format) {
+                  return moment(datestr, format, true).toDate();
+              },
+              formatDate: function (date, format) {
+                  // locale can also be used
+                  var momentDate = moment(date);
+                  if (typeof fp.config.locale === "string") {
+                      momentDate.locale(fp.config.locale);
+                  }
+                  return momentDate.format(format);
+              },
+              onReady: function () {
+                  [fp.hourElement, fp.minuteElement, fp.secondElement].forEach(function (element) {
+                      return element &&
+                          element.addEventListener("increment", captureIncrement, {
+                              capture: true,
+                          });
+                  });
+              },
+              onDestroy: function () {
+                  [fp.hourElement, fp.minuteElement, fp.secondElement].forEach(function (element) {
+                      return element &&
+                          element.removeEventListener("increment", captureIncrement, {
+                              capture: true,
+                          });
+                  });
+              },
+          };
+      };
+  }
+
+  return momentPlugin;
+
+})));
diff --git a/admin/js/vendors/flatpickr/plugins/monthSelect/index.d.ts b/admin/js/vendors/flatpickr/plugins/monthSelect/index.d.ts
new file mode 100644 (file)
index 0000000..78d5c52
--- /dev/null
@@ -0,0 +1,16 @@
+import { Plugin } from "../../types/options";
+export interface Config {
+    shorthand: boolean;
+    dateFormat: string;
+    altFormat: string;
+    theme: string;
+}
+export interface ElementDate extends Element {
+    dateObj: Date;
+}
+export declare type MonthElement = HTMLSpanElement & {
+    dateObj: Date;
+    $i: number;
+};
+declare function monthSelectPlugin(pluginConfig?: Partial<Config>): Plugin;
+export default monthSelectPlugin;
diff --git a/admin/js/vendors/flatpickr/plugins/monthSelect/index.js b/admin/js/vendors/flatpickr/plugins/monthSelect/index.js
new file mode 100644 (file)
index 0000000..87f7629
--- /dev/null
@@ -0,0 +1,233 @@
+(function (global, factory) {
+    typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
+    typeof define === 'function' && define.amd ? define(factory) :
+    (global = global || self, global.monthSelectPlugin = factory());
+}(this, (function () { 'use strict';
+
+    /*! *****************************************************************************
+    Copyright (c) Microsoft Corporation.
+
+    Permission to use, copy, modify, and/or distribute this software for any
+    purpose with or without fee is hereby granted.
+
+    THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
+    REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+    AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
+    INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+    LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
+    OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+    PERFORMANCE OF THIS SOFTWARE.
+    ***************************************************************************** */
+
+    var __assign = function() {
+        __assign = Object.assign || function __assign(t) {
+            for (var s, i = 1, n = arguments.length; i < n; i++) {
+                s = arguments[i];
+                for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
+            }
+            return t;
+        };
+        return __assign.apply(this, arguments);
+    };
+
+    var monthToStr = function (monthNumber, shorthand, locale) { return locale.months[shorthand ? "shorthand" : "longhand"][monthNumber]; };
+
+    function getEventTarget(event) {
+        try {
+            if (typeof event.composedPath === "function") {
+                var path = event.composedPath();
+                return path[0];
+            }
+            return event.target;
+        }
+        catch (error) {
+            return event.target;
+        }
+    }
+
+    var defaultConfig = {
+        shorthand: false,
+        dateFormat: "F Y",
+        altFormat: "F Y",
+        theme: "light",
+    };
+    function monthSelectPlugin(pluginConfig) {
+        var config = __assign(__assign({}, defaultConfig), pluginConfig);
+        return function (fp) {
+            fp.config.dateFormat = config.dateFormat;
+            fp.config.altFormat = config.altFormat;
+            var self = { monthsContainer: null };
+            function clearUnnecessaryDOMElements() {
+                if (!fp.rContainer || !fp.daysContainer || !fp.weekdayContainer)
+                    return;
+                fp.rContainer.removeChild(fp.daysContainer);
+                fp.rContainer.removeChild(fp.weekdayContainer);
+                for (var index = 0; index < fp.monthElements.length; index++) {
+                    var element = fp.monthElements[index];
+                    if (!element.parentNode)
+                        continue;
+                    element.parentNode.removeChild(element);
+                }
+            }
+            function addListeners() {
+                fp._bind(fp.prevMonthNav, "click", function (e) {
+                    var _a;
+                    e.preventDefault();
+                    e.stopPropagation();
+                    var selectedMonth = (_a = fp.rContainer) === null || _a === void 0 ? void 0 : _a.querySelector(".flatpickr-monthSelect-month.selected").dateObj.getMonth();
+                    if (selectedMonth === 0) {
+                        fp.currentYear--;
+                    }
+                    selectYear();
+                });
+                fp._bind(fp.nextMonthNav, "click", function (e) {
+                    var _a;
+                    e.preventDefault();
+                    e.stopPropagation();
+                    var selectedMonth = (_a = fp.rContainer) === null || _a === void 0 ? void 0 : _a.querySelector(".flatpickr-monthSelect-month.selected").dateObj.getMonth();
+                    if (selectedMonth === 11) {
+                        fp.currentYear++;
+                    }
+                    selectYear();
+                });
+            }
+            function addMonths() {
+                if (!fp.rContainer)
+                    return;
+                self.monthsContainer = fp._createElement("div", "flatpickr-monthSelect-months");
+                self.monthsContainer.tabIndex = -1;
+                fp.calendarContainer.classList.add("flatpickr-monthSelect-theme-" + config.theme);
+                for (var i = 0; i < 12; i++) {
+                    var month = fp._createElement("span", "flatpickr-monthSelect-month");
+                    month.dateObj = new Date(fp.currentYear, i);
+                    month.$i = i;
+                    month.textContent = monthToStr(i, config.shorthand, fp.l10n);
+                    month.tabIndex = -1;
+                    month.addEventListener("click", selectMonth);
+                    self.monthsContainer.appendChild(month);
+                    if ((fp.config.minDate && month.dateObj < fp.config.minDate) ||
+                        (fp.config.maxDate && month.dateObj > fp.config.maxDate)) {
+                        month.classList.add("disabled");
+                    }
+                }
+                fp.rContainer.appendChild(self.monthsContainer);
+            }
+            function setCurrentlySelected() {
+                if (!fp.rContainer)
+                    return;
+                var currentlySelected = fp.rContainer.querySelectorAll(".flatpickr-monthSelect-month.selected");
+                for (var index = 0; index < currentlySelected.length; index++) {
+                    currentlySelected[index].classList.remove("selected");
+                }
+                var month = fp.rContainer.querySelector(".flatpickr-monthSelect-month:nth-child(" + (fp.currentMonth + 1) + ")");
+                if (month) {
+                    month.classList.add("selected");
+                }
+            }
+            function selectYear() {
+                var selectedDate = fp.selectedDates[0];
+                if (selectedDate) {
+                    selectedDate = new Date(selectedDate);
+                    selectedDate.setFullYear(fp.currentYear);
+                    if (fp.config.minDate && selectedDate < fp.config.minDate) {
+                        selectedDate = fp.config.minDate;
+                    }
+                    if (fp.config.maxDate && selectedDate > fp.config.maxDate) {
+                        selectedDate = fp.config.maxDate;
+                    }
+                    fp.currentYear = selectedDate.getFullYear();
+                    fp.currentYearElement.value = String(fp.currentYear);
+                    fp.currentMonth = selectedDate.getMonth();
+                }
+                if (fp.rContainer) {
+                    var months = fp.rContainer.querySelectorAll(".flatpickr-monthSelect-month");
+                    months.forEach(function (month) {
+                        month.dateObj.setFullYear(fp.currentYear);
+                        if ((fp.config.minDate && month.dateObj < fp.config.minDate) ||
+                            (fp.config.maxDate && month.dateObj > fp.config.maxDate)) {
+                            month.classList.add("disabled");
+                        }
+                        else {
+                            month.classList.remove("disabled");
+                        }
+                    });
+                }
+                setCurrentlySelected();
+            }
+            function selectMonth(e) {
+                e.preventDefault();
+                e.stopPropagation();
+                var eventTarget = getEventTarget(e);
+                if (eventTarget instanceof Element &&
+                    !eventTarget.classList.contains("disabled")) {
+                    setMonth(eventTarget.dateObj);
+                    fp.close();
+                }
+            }
+            function setMonth(date) {
+                var selectedDate = new Date(date);
+                selectedDate.setFullYear(fp.currentYear);
+                fp.currentMonth = selectedDate.getMonth();
+                fp.setDate(selectedDate, true);
+                setCurrentlySelected();
+            }
+            var shifts = {
+                37: -1,
+                39: 1,
+                40: 3,
+                38: -3,
+            };
+            function onKeyDown(_, __, ___, e) {
+                var shouldMove = shifts[e.keyCode] !== undefined;
+                if (!shouldMove && e.keyCode !== 13) {
+                    return;
+                }
+                if (!fp.rContainer || !self.monthsContainer)
+                    return;
+                var currentlySelected = fp.rContainer.querySelector(".flatpickr-monthSelect-month.selected");
+                var index = Array.prototype.indexOf.call(self.monthsContainer.children, document.activeElement);
+                if (index === -1) {
+                    var target = currentlySelected || self.monthsContainer.firstElementChild;
+                    target.focus();
+                    index = target.$i;
+                }
+                if (shouldMove) {
+                    self.monthsContainer.children[(12 + index + shifts[e.keyCode]) % 12].focus();
+                }
+                else if (e.keyCode === 13 &&
+                    self.monthsContainer.contains(document.activeElement)) {
+                    setMonth(document.activeElement.dateObj);
+                }
+            }
+            function destroyPluginInstance() {
+                if (self.monthsContainer !== null) {
+                    var months = self.monthsContainer.querySelectorAll(".flatpickr-monthSelect-month");
+                    for (var index = 0; index < months.length; index++) {
+                        months[index].removeEventListener("click", selectMonth);
+                    }
+                }
+            }
+            return {
+                onParseConfig: function () {
+                    fp.config.mode = "single";
+                    fp.config.enableTime = false;
+                },
+                onValueUpdate: setCurrentlySelected,
+                onKeyDown: onKeyDown,
+                onReady: [
+                    clearUnnecessaryDOMElements,
+                    addListeners,
+                    addMonths,
+                    setCurrentlySelected,
+                    function () {
+                        fp.loadedPlugins.push("monthSelect");
+                    },
+                ],
+                onDestroy: destroyPluginInstance,
+            };
+        };
+    }
+
+    return monthSelectPlugin;
+
+})));
diff --git a/admin/js/vendors/flatpickr/plugins/monthSelect/style.css b/admin/js/vendors/flatpickr/plugins/monthSelect/style.css
new file mode 100644 (file)
index 0000000..f49a9ec
--- /dev/null
@@ -0,0 +1,79 @@
+.flatpickr-monthSelect-months {
+  margin: 10px 1px 3px 1px;
+  flex-wrap: wrap;
+}
+
+.flatpickr-monthSelect-month {
+  background: none;
+  border: 0;
+  border-radius: 2px;
+  -webkit-box-sizing: border-box;
+  box-sizing: border-box;
+  color: #393939;
+  cursor: pointer;
+  display: inline-block;
+  font-weight: 400;
+  margin: 0.5px;
+  justify-content: center;
+  padding: 10px;
+  position: relative;
+  -webkit-box-pack: center;
+  -webkit-justify-content: center;
+  -ms-flex-pack: center;
+  text-align: center;
+  width: 33%;
+}
+
+.flatpickr-monthSelect-month.disabled {
+       color: #eee;
+}
+
+.flatpickr-monthSelect-month.disabled:hover,
+.flatpickr-monthSelect-month.disabled:focus {
+       cursor: not-allowed;
+       background: none !important;
+}
+
+.flatpickr-monthSelect-theme-dark {
+  background: #3f4458;
+}
+
+.flatpickr-monthSelect-theme-dark .flatpickr-current-month input.cur-year {
+  color: #fff;
+}
+
+.flatpickr-monthSelect-theme-dark .flatpickr-months .flatpickr-prev-month,
+.flatpickr-monthSelect-theme-dark .flatpickr-months .flatpickr-next-month {
+  color: #fff;
+  fill: #fff;
+}
+
+.flatpickr-monthSelect-theme-dark .flatpickr-monthSelect-month {
+  color: rgba(255, 255, 255, 0.95);
+}
+
+.flatpickr-monthSelect-month:hover,
+.flatpickr-monthSelect-month:focus {
+  background: #e6e6e6;
+  cursor: pointer;
+  outline: 0;
+}
+
+.flatpickr-monthSelect-theme-dark .flatpickr-monthSelect-month:hover,
+.flatpickr-monthSelect-theme-dark .flatpickr-monthSelect-month:focus {
+  background: #646c8c;
+  border-color: #646c8c;
+}
+
+.flatpickr-monthSelect-month.selected {
+  background-color: #569ff7;
+  color: #fff;
+}
+
+.flatpickr-monthSelect-theme-dark .flatpickr-monthSelect-month.selected {
+  background: #80cbc4;
+  -webkit-box-shadow: none;
+  box-shadow: none;
+  color: #fff;
+  border-color: #80cbc4;
+}
diff --git a/admin/js/vendors/flatpickr/plugins/monthSelect/tests.spec.d.ts b/admin/js/vendors/flatpickr/plugins/monthSelect/tests.spec.d.ts
new file mode 100644 (file)
index 0000000..cb0ff5c
--- /dev/null
@@ -0,0 +1 @@
+export {};
diff --git a/admin/js/vendors/flatpickr/plugins/rangePlugin.d.ts b/admin/js/vendors/flatpickr/plugins/rangePlugin.d.ts
new file mode 100644 (file)
index 0000000..960a834
--- /dev/null
@@ -0,0 +1,12 @@
+import { Plugin } from "../types/options";
+export interface Config {
+    input?: string | HTMLInputElement;
+    position?: "left";
+}
+declare global {
+    interface Window {
+        rangePlugin: (config?: Config) => void;
+    }
+}
+declare function rangePlugin(config?: Config): Plugin;
+export default rangePlugin;
diff --git a/admin/js/vendors/flatpickr/plugins/rangePlugin.js b/admin/js/vendors/flatpickr/plugins/rangePlugin.js
new file mode 100644 (file)
index 0000000..8413ca8
--- /dev/null
@@ -0,0 +1,169 @@
+(function (global, factory) {
+    typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
+    typeof define === 'function' && define.amd ? define(factory) :
+    (global = global || self, global.rangePlugin = factory());
+}(this, (function () { 'use strict';
+
+    /*! *****************************************************************************
+    Copyright (c) Microsoft Corporation.
+
+    Permission to use, copy, modify, and/or distribute this software for any
+    purpose with or without fee is hereby granted.
+
+    THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
+    REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+    AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
+    INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+    LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
+    OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+    PERFORMANCE OF THIS SOFTWARE.
+    ***************************************************************************** */
+
+    function __spreadArrays() {
+        for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;
+        for (var r = Array(s), k = 0, i = 0; i < il; i++)
+            for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)
+                r[k] = a[j];
+        return r;
+    }
+
+    function rangePlugin(config) {
+        if (config === void 0) { config = {}; }
+        return function (fp) {
+            var dateFormat = "", secondInput, _secondInputFocused, _prevDates;
+            var createSecondInput = function () {
+                if (config.input) {
+                    secondInput =
+                        config.input instanceof Element
+                            ? config.input
+                            : window.document.querySelector(config.input);
+                    if (!secondInput) {
+                        fp.config.errorHandler(new Error("Invalid input element specified"));
+                        return;
+                    }
+                    if (fp.config.wrap) {
+                        secondInput = secondInput.querySelector("[data-input]");
+                    }
+                }
+                else {
+                    secondInput = fp._input.cloneNode();
+                    secondInput.removeAttribute("id");
+                    secondInput._flatpickr = undefined;
+                }
+                if (secondInput.value) {
+                    var parsedDate = fp.parseDate(secondInput.value);
+                    if (parsedDate)
+                        fp.selectedDates.push(parsedDate);
+                }
+                secondInput.setAttribute("data-fp-omit", "");
+                fp._bind(secondInput, ["focus", "click"], function () {
+                    if (fp.selectedDates[1]) {
+                        fp.latestSelectedDateObj = fp.selectedDates[1];
+                        fp._setHoursFromDate(fp.selectedDates[1]);
+                        fp.jumpToDate(fp.selectedDates[1]);
+                    }
+                    _secondInputFocused = true;
+                    fp.isOpen = false;
+                    fp.open(undefined, config.position === "left" ? fp._input : secondInput);
+                });
+                fp._bind(fp._input, ["focus", "click"], function (e) {
+                    e.preventDefault();
+                    fp.isOpen = false;
+                    fp.open();
+                });
+                if (fp.config.allowInput)
+                    fp._bind(secondInput, "keydown", function (e) {
+                        if (e.key === "Enter") {
+                            fp.setDate([fp.selectedDates[0], secondInput.value], true, dateFormat);
+                            secondInput.click();
+                        }
+                    });
+                if (!config.input)
+                    fp._input.parentNode &&
+                        fp._input.parentNode.insertBefore(secondInput, fp._input.nextSibling);
+            };
+            var plugin = {
+                onParseConfig: function () {
+                    fp.config.mode = "range";
+                    dateFormat = fp.config.altInput
+                        ? fp.config.altFormat
+                        : fp.config.dateFormat;
+                },
+                onReady: function () {
+                    createSecondInput();
+                    fp.config.ignoredFocusElements.push(secondInput);
+                    if (fp.config.allowInput) {
+                        fp._input.removeAttribute("readonly");
+                        secondInput.removeAttribute("readonly");
+                    }
+                    else {
+                        secondInput.setAttribute("readonly", "readonly");
+                    }
+                    fp._bind(fp._input, "focus", function () {
+                        fp.latestSelectedDateObj = fp.selectedDates[0];
+                        fp._setHoursFromDate(fp.selectedDates[0]);
+                        _secondInputFocused = false;
+                        fp.jumpToDate(fp.selectedDates[0]);
+                    });
+                    if (fp.config.allowInput)
+                        fp._bind(fp._input, "keydown", function (e) {
+                            if (e.key === "Enter")
+                                fp.setDate([fp._input.value, fp.selectedDates[1]], true, dateFormat);
+                        });
+                    fp.setDate(fp.selectedDates, false);
+                    plugin.onValueUpdate(fp.selectedDates);
+                    fp.loadedPlugins.push("range");
+                },
+                onPreCalendarPosition: function () {
+                    if (_secondInputFocused) {
+                        fp._positionElement = secondInput;
+                        setTimeout(function () {
+                            fp._positionElement = fp._input;
+                        }, 0);
+                    }
+                },
+                onChange: function () {
+                    if (!fp.selectedDates.length) {
+                        setTimeout(function () {
+                            if (fp.selectedDates.length)
+                                return;
+                            secondInput.value = "";
+                            _prevDates = [];
+                        }, 10);
+                    }
+                    if (_secondInputFocused) {
+                        setTimeout(function () {
+                            secondInput.focus();
+                        }, 0);
+                    }
+                },
+                onDestroy: function () {
+                    if (!config.input)
+                        secondInput.parentNode &&
+                            secondInput.parentNode.removeChild(secondInput);
+                },
+                onValueUpdate: function (selDates) {
+                    var _a, _b, _c;
+                    if (!secondInput)
+                        return;
+                    _prevDates =
+                        !_prevDates || selDates.length >= _prevDates.length
+                            ? __spreadArrays(selDates) : _prevDates;
+                    if (_prevDates.length > selDates.length) {
+                        var newSelectedDate = selDates[0];
+                        var newDates = _secondInputFocused
+                            ? [_prevDates[0], newSelectedDate]
+                            : [newSelectedDate, _prevDates[1]];
+                        fp.setDate(newDates, false);
+                        _prevDates = __spreadArrays(newDates);
+                    }
+                    _a = fp.selectedDates.map(function (d) { return fp.formatDate(d, dateFormat); }), _b = _a[0], fp._input.value = _b === void 0 ? "" : _b, _c = _a[1], secondInput.value = _c === void 0 ? "" : _c;
+                },
+            };
+            return plugin;
+        };
+    }
+
+    return rangePlugin;
+
+})));
diff --git a/admin/js/vendors/flatpickr/plugins/scrollPlugin.d.ts b/admin/js/vendors/flatpickr/plugins/scrollPlugin.d.ts
new file mode 100644 (file)
index 0000000..a367428
--- /dev/null
@@ -0,0 +1,3 @@
+import { Plugin } from "../types/options";
+declare function scrollPlugin(): Plugin;
+export default scrollPlugin;
diff --git a/admin/js/vendors/flatpickr/plugins/scrollPlugin.js b/admin/js/vendors/flatpickr/plugins/scrollPlugin.js
new file mode 100644 (file)
index 0000000..0e50f95
--- /dev/null
@@ -0,0 +1,85 @@
+(function (global, factory) {
+  typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
+  typeof define === 'function' && define.amd ? define(factory) :
+  (global = global || self, global.scrollPlugin = factory());
+}(this, (function () { 'use strict';
+
+  function getEventTarget(event) {
+      try {
+          if (typeof event.composedPath === "function") {
+              var path = event.composedPath();
+              return path[0];
+          }
+          return event.target;
+      }
+      catch (error) {
+          return event.target;
+      }
+  }
+
+  if (typeof window.CustomEvent !== "function") {
+      function CustomEvent(typeArg, eventInitDict) {
+          eventInitDict = eventInitDict || {
+              bubbles: false,
+              cancelable: false,
+              detail: undefined,
+          };
+          var evt = document.createEvent("CustomEvent");
+          evt.initCustomEvent(typeArg, eventInitDict.bubbles, eventInitDict.cancelable, eventInitDict.detail);
+          return evt;
+      }
+      CustomEvent.prototype = window.Event.prototype;
+      window.CustomEvent = CustomEvent;
+  }
+  function delta(e) {
+      return Math.max(-1, Math.min(1, e.wheelDelta || -e.deltaY));
+  }
+  var scroll = function (e) {
+      e.preventDefault();
+      var ev = new CustomEvent("increment", {
+          bubbles: true,
+      });
+      ev.delta = delta(e);
+      getEventTarget(e).dispatchEvent(ev);
+  };
+  function scrollMonth(fp) {
+      return function (e) {
+          e.preventDefault();
+          var mDelta = delta(e);
+          fp.changeMonth(mDelta);
+      };
+  }
+  function scrollPlugin() {
+      return function (fp) {
+          var monthScroller = scrollMonth(fp);
+          return {
+              onReady: function () {
+                  if (fp.timeContainer) {
+                      fp.timeContainer.addEventListener("wheel", scroll);
+                  }
+                  fp.yearElements.forEach(function (yearElem) {
+                      return yearElem.addEventListener("wheel", scroll);
+                  });
+                  fp.monthElements.forEach(function (monthElem) {
+                      return monthElem.addEventListener("wheel", monthScroller);
+                  });
+                  fp.loadedPlugins.push("scroll");
+              },
+              onDestroy: function () {
+                  if (fp.timeContainer) {
+                      fp.timeContainer.removeEventListener("wheel", scroll);
+                  }
+                  fp.yearElements.forEach(function (yearElem) {
+                      return yearElem.removeEventListener("wheel", scroll);
+                  });
+                  fp.monthElements.forEach(function (monthElem) {
+                      return monthElem.removeEventListener("wheel", monthScroller);
+                  });
+              },
+          };
+      };
+  }
+
+  return scrollPlugin;
+
+})));
diff --git a/admin/js/vendors/flatpickr/plugins/weekSelect/weekSelect.d.ts b/admin/js/vendors/flatpickr/plugins/weekSelect/weekSelect.d.ts
new file mode 100644 (file)
index 0000000..88cc964
--- /dev/null
@@ -0,0 +1,7 @@
+import { Plugin } from "../../types/options";
+export declare type PlusWeeks = {
+    weekStartDay: Date;
+    weekEndDay: Date;
+};
+declare function weekSelectPlugin(): Plugin<PlusWeeks>;
+export default weekSelectPlugin;
diff --git a/admin/js/vendors/flatpickr/plugins/weekSelect/weekSelect.js b/admin/js/vendors/flatpickr/plugins/weekSelect/weekSelect.js
new file mode 100644 (file)
index 0000000..d72fd8a
--- /dev/null
@@ -0,0 +1,99 @@
+(function (global, factory) {
+  typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
+  typeof define === 'function' && define.amd ? define(factory) :
+  (global = global || self, global.weekSelect = factory());
+}(this, (function () { 'use strict';
+
+  function getEventTarget(event) {
+      try {
+          if (typeof event.composedPath === "function") {
+              var path = event.composedPath();
+              return path[0];
+          }
+          return event.target;
+      }
+      catch (error) {
+          return event.target;
+      }
+  }
+
+  function weekSelectPlugin() {
+      return function (fp) {
+          function onDayHover(event) {
+              var day = getEventTarget(event);
+              if (!day.classList.contains("flatpickr-day"))
+                  return;
+              var days = fp.days.childNodes;
+              var dayIndex = day.$i;
+              var dayIndSeven = dayIndex / 7;
+              var weekStartDay = days[7 * Math.floor(dayIndSeven)]
+                  .dateObj;
+              var weekEndDay = days[7 * Math.ceil(dayIndSeven + 0.01) - 1].dateObj;
+              for (var i = days.length; i--;) {
+                  var day_1 = days[i];
+                  var date = day_1.dateObj;
+                  if (date > weekEndDay || date < weekStartDay)
+                      day_1.classList.remove("inRange");
+                  else
+                      day_1.classList.add("inRange");
+              }
+          }
+          function highlightWeek() {
+              var selDate = fp.latestSelectedDateObj;
+              if (selDate !== undefined &&
+                  selDate.getMonth() === fp.currentMonth &&
+                  selDate.getFullYear() === fp.currentYear) {
+                  fp.weekStartDay = fp.days.childNodes[7 * Math.floor(fp.selectedDateElem.$i / 7)].dateObj;
+                  fp.weekEndDay = fp.days.childNodes[7 * Math.ceil(fp.selectedDateElem.$i / 7 + 0.01) - 1].dateObj;
+              }
+              var days = fp.days.childNodes;
+              for (var i = days.length; i--;) {
+                  var date = days[i].dateObj;
+                  if (date >= fp.weekStartDay && date <= fp.weekEndDay)
+                      days[i].classList.add("week", "selected");
+              }
+          }
+          function clearHover() {
+              var days = fp.days.childNodes;
+              for (var i = days.length; i--;)
+                  days[i].classList.remove("inRange");
+          }
+          function onReady() {
+              if (fp.daysContainer !== undefined)
+                  fp.daysContainer.addEventListener("mouseover", onDayHover);
+          }
+          function onDestroy() {
+              if (fp.daysContainer !== undefined)
+                  fp.daysContainer.removeEventListener("mouseover", onDayHover);
+          }
+          return {
+              onValueUpdate: highlightWeek,
+              onMonthChange: highlightWeek,
+              onYearChange: highlightWeek,
+              onOpen: highlightWeek,
+              onClose: clearHover,
+              onParseConfig: function () {
+                  fp.config.mode = "single";
+                  fp.config.enableTime = false;
+                  fp.config.dateFormat = fp.config.dateFormat
+                      ? fp.config.dateFormat
+                      : "\\W\\e\\e\\k #W, Y";
+                  fp.config.altFormat = fp.config.altFormat
+                      ? fp.config.altFormat
+                      : "\\W\\e\\e\\k #W, Y";
+              },
+              onReady: [
+                  onReady,
+                  highlightWeek,
+                  function () {
+                      fp.loadedPlugins.push("weekSelect");
+                  },
+              ],
+              onDestroy: onDestroy,
+          };
+      };
+  }
+
+  return weekSelectPlugin;
+
+})));
diff --git a/admin/js/vendors/flatpickr/themes/airbnb.css b/admin/js/vendors/flatpickr/themes/airbnb.css
new file mode 100644 (file)
index 0000000..ad55e5a
--- /dev/null
@@ -0,0 +1,880 @@
+.flatpickr-calendar {
+  background: transparent;
+  opacity: 0;
+  display: none;
+  text-align: center;
+  visibility: hidden;
+  padding: 0;
+  -webkit-animation: none;
+          animation: none;
+  direction: ltr;
+  border: 0;
+  font-size: 14px;
+  line-height: 24px;
+  border-radius: 5px;
+  position: absolute;
+  width: 307.875px;
+  -webkit-box-sizing: border-box;
+          box-sizing: border-box;
+  -ms-touch-action: manipulation;
+      touch-action: manipulation;
+  background: #fff;
+  -webkit-box-shadow: 1px 0 0 #eee, -1px 0 0 #eee, 0 1px 0 #eee, 0 -1px 0 #eee, 0 3px 13px rgba(0,0,0,0.08);
+          box-shadow: 1px 0 0 #eee, -1px 0 0 #eee, 0 1px 0 #eee, 0 -1px 0 #eee, 0 3px 13px rgba(0,0,0,0.08);
+}
+.flatpickr-calendar.open,
+.flatpickr-calendar.inline {
+  opacity: 1;
+  max-height: 640px;
+  visibility: visible;
+}
+.flatpickr-calendar.open {
+  display: inline-block;
+  z-index: 99999;
+}
+.flatpickr-calendar.animate.open {
+  -webkit-animation: fpFadeInDown 300ms cubic-bezier(0.23, 1, 0.32, 1);
+          animation: fpFadeInDown 300ms cubic-bezier(0.23, 1, 0.32, 1);
+}
+.flatpickr-calendar.inline {
+  display: block;
+  position: relative;
+  top: 2px;
+}
+.flatpickr-calendar.static {
+  position: absolute;
+  top: calc(100% + 2px);
+}
+.flatpickr-calendar.static.open {
+  z-index: 999;
+  display: block;
+}
+.flatpickr-calendar.multiMonth .flatpickr-days .dayContainer:nth-child(n+1) .flatpickr-day.inRange:nth-child(7n+7) {
+  -webkit-box-shadow: none !important;
+          box-shadow: none !important;
+}
+.flatpickr-calendar.multiMonth .flatpickr-days .dayContainer:nth-child(n+2) .flatpickr-day.inRange:nth-child(7n+1) {
+  -webkit-box-shadow: -2px 0 0 #e6e6e6, 5px 0 0 #e6e6e6;
+          box-shadow: -2px 0 0 #e6e6e6, 5px 0 0 #e6e6e6;
+}
+.flatpickr-calendar .hasWeeks .dayContainer,
+.flatpickr-calendar .hasTime .dayContainer {
+  border-bottom: 0;
+  border-bottom-right-radius: 0;
+  border-bottom-left-radius: 0;
+}
+.flatpickr-calendar .hasWeeks .dayContainer {
+  border-left: 0;
+}
+.flatpickr-calendar.hasTime .flatpickr-time {
+  height: 40px;
+  border-top: 1px solid #eee;
+}
+.flatpickr-calendar.noCalendar.hasTime .flatpickr-time {
+  height: auto;
+}
+.flatpickr-calendar:before,
+.flatpickr-calendar:after {
+  position: absolute;
+  display: block;
+  pointer-events: none;
+  border: solid transparent;
+  content: '';
+  height: 0;
+  width: 0;
+  left: 22px;
+}
+.flatpickr-calendar.rightMost:before,
+.flatpickr-calendar.arrowRight:before,
+.flatpickr-calendar.rightMost:after,
+.flatpickr-calendar.arrowRight:after {
+  left: auto;
+  right: 22px;
+}
+.flatpickr-calendar.arrowCenter:before,
+.flatpickr-calendar.arrowCenter:after {
+  left: 50%;
+  right: 50%;
+}
+.flatpickr-calendar:before {
+  border-width: 5px;
+  margin: 0 -5px;
+}
+.flatpickr-calendar:after {
+  border-width: 4px;
+  margin: 0 -4px;
+}
+.flatpickr-calendar.arrowTop:before,
+.flatpickr-calendar.arrowTop:after {
+  bottom: 100%;
+}
+.flatpickr-calendar.arrowTop:before {
+  border-bottom-color: #eee;
+}
+.flatpickr-calendar.arrowTop:after {
+  border-bottom-color: #fff;
+}
+.flatpickr-calendar.arrowBottom:before,
+.flatpickr-calendar.arrowBottom:after {
+  top: 100%;
+}
+.flatpickr-calendar.arrowBottom:before {
+  border-top-color: #eee;
+}
+.flatpickr-calendar.arrowBottom:after {
+  border-top-color: #fff;
+}
+.flatpickr-calendar:focus {
+  outline: 0;
+}
+.flatpickr-wrapper {
+  position: relative;
+  display: inline-block;
+}
+.flatpickr-months {
+  display: -webkit-box;
+  display: -webkit-flex;
+  display: -ms-flexbox;
+  display: flex;
+}
+.flatpickr-months .flatpickr-month {
+  background: transparent;
+  color: #3c3f40;
+  fill: #3c3f40;
+  height: 34px;
+  line-height: 1;
+  text-align: center;
+  position: relative;
+  -webkit-user-select: none;
+     -moz-user-select: none;
+      -ms-user-select: none;
+          user-select: none;
+  overflow: hidden;
+  -webkit-box-flex: 1;
+  -webkit-flex: 1;
+      -ms-flex: 1;
+          flex: 1;
+}
+.flatpickr-months .flatpickr-prev-month,
+.flatpickr-months .flatpickr-next-month {
+  text-decoration: none;
+  cursor: pointer;
+  position: absolute;
+  top: 0;
+  height: 34px;
+  padding: 10px;
+  z-index: 3;
+  color: #3c3f40;
+  fill: #3c3f40;
+}
+.flatpickr-months .flatpickr-prev-month.flatpickr-disabled,
+.flatpickr-months .flatpickr-next-month.flatpickr-disabled {
+  display: none;
+}
+.flatpickr-months .flatpickr-prev-month i,
+.flatpickr-months .flatpickr-next-month i {
+  position: relative;
+}
+.flatpickr-months .flatpickr-prev-month.flatpickr-prev-month,
+.flatpickr-months .flatpickr-next-month.flatpickr-prev-month {
+/*
+      /*rtl:begin:ignore*/
+/*
+      */
+  left: 0;
+/*
+      /*rtl:end:ignore*/
+/*
+      */
+}
+/*
+      /*rtl:begin:ignore*/
+/*
+      /*rtl:end:ignore*/
+.flatpickr-months .flatpickr-prev-month.flatpickr-next-month,
+.flatpickr-months .flatpickr-next-month.flatpickr-next-month {
+/*
+      /*rtl:begin:ignore*/
+/*
+      */
+  right: 0;
+/*
+      /*rtl:end:ignore*/
+/*
+      */
+}
+/*
+      /*rtl:begin:ignore*/
+/*
+      /*rtl:end:ignore*/
+.flatpickr-months .flatpickr-prev-month:hover,
+.flatpickr-months .flatpickr-next-month:hover {
+  color: #3a6fc3;
+}
+.flatpickr-months .flatpickr-prev-month:hover svg,
+.flatpickr-months .flatpickr-next-month:hover svg {
+  fill: #3a6fc3;;
+}
+.flatpickr-months .flatpickr-prev-month svg,
+.flatpickr-months .flatpickr-next-month svg {
+  width: 14px;
+  height: 14px;
+}
+.flatpickr-months .flatpickr-prev-month svg path,
+.flatpickr-months .flatpickr-next-month svg path {
+  -webkit-transition: fill 0.1s;
+  transition: fill 0.1s;
+  fill: inherit;
+}
+.numInputWrapper {
+  position: relative;
+  height: auto;
+}
+.numInputWrapper input,
+.numInputWrapper span {
+  display: inline-block;
+}
+.numInputWrapper input {
+  width: 100%;
+}
+.numInputWrapper input::-ms-clear {
+  display: none;
+}
+.numInputWrapper input::-webkit-outer-spin-button,
+.numInputWrapper input::-webkit-inner-spin-button {
+  margin: 0;
+  -webkit-appearance: none;
+}
+.numInputWrapper span {
+  position: absolute;
+  right: 0;
+  width: 14px;
+  padding: 0 4px 0 2px;
+  height: 50%;
+  line-height: 50%;
+  opacity: 0;
+  cursor: pointer;
+  border: 1px solid rgba(64,72,72,0.15);
+  -webkit-box-sizing: border-box;
+          box-sizing: border-box;
+}
+.numInputWrapper span:hover {
+  background: rgba(0,0,0,0.1);
+}
+.numInputWrapper span:active {
+  background: rgba(0,0,0,0.2);
+}
+.numInputWrapper span:after {
+  display: block;
+  content: "";
+  position: absolute;
+}
+.numInputWrapper span.arrowUp {
+  top: 0;
+  border-bottom: 0;
+}
+.numInputWrapper span.arrowUp:after {
+  border-left: 4px solid transparent;
+  border-right: 4px solid transparent;
+  border-bottom: 4px solid rgba(64,72,72,0.6);
+  top: 26%;
+}
+.numInputWrapper span.arrowDown {
+  top: 50%;
+}
+.numInputWrapper span.arrowDown:after {
+  border-left: 4px solid transparent;
+  border-right: 4px solid transparent;
+  border-top: 4px solid rgba(64,72,72,0.6);
+  top: 40%;
+}
+.numInputWrapper span svg {
+  width: inherit;
+  height: auto;
+}
+.numInputWrapper span svg path {
+  fill: rgba(60,63,64,0.5);
+}
+.numInputWrapper:hover {
+  background: rgba(0,0,0,0.05);
+}
+.numInputWrapper:hover span {
+  opacity: 1;
+}
+.flatpickr-current-month {
+  font-size: 135%;
+  line-height: inherit;
+  font-weight: 300;
+  color: inherit;
+  position: absolute;
+  width: 75%;
+  left: 12.5%;
+  padding: 7.48px 0 0 0;
+  line-height: 1;
+  height: 34px;
+  display: inline-block;
+  text-align: center;
+  -webkit-transform: translate3d(0px, 0px, 0px);
+          transform: translate3d(0px, 0px, 0px);
+}
+.flatpickr-current-month span.cur-month {
+  font-family: inherit;
+  font-weight: 700;
+  color: inherit;
+  display: inline-block;
+  margin-left: 0.5ch;
+  padding: 0;
+}
+.flatpickr-current-month span.cur-month:hover {
+  background: rgba(0,0,0,0.05);
+}
+.flatpickr-current-month .numInputWrapper {
+  top: -27px;
+  width: 6ch;
+  left: 53px;
+  display: inline-block;
+}
+.flatpickr-current-month .numInputWrapper span.arrowUp:after {
+  border-bottom-color: #3c3f40;
+}
+.flatpickr-current-month .numInputWrapper span.arrowDown:after {
+  border-top-color: #3c3f40;
+}
+.flatpickr-current-month input.cur-year {
+  background: transparent;
+  -webkit-box-sizing: border-box;
+          box-sizing: border-box;
+  color: inherit;
+  cursor: text;
+  padding: 0 0 0 0.5ch;
+  margin: 0;
+  display: inline-block;
+  font-size: inherit;
+  font-family: inherit;
+  font-weight: 300;
+  line-height: inherit;
+  height: 27px;
+  border: 1px solid #ccc;
+  border-radius: 0;
+  vertical-align: initial;
+  -webkit-appearance: textfield;
+  -moz-appearance: textfield;
+  appearance: textfield;
+}
+.flatpickr-current-month input.cur-year:focus {
+  outline: 0;
+}
+.flatpickr-current-month input.cur-year[disabled],
+.flatpickr-current-month input.cur-year[disabled]:hover {
+  font-size: 100%;
+  color: rgba(60,63,64,0.5);
+  background: transparent;
+  pointer-events: none;
+}
+.flatpickr-current-month .flatpickr-monthDropdown-months {
+  appearance: menulist;
+  background: transparent;
+  border: 1px solid #ccc;
+  border-radius: 0;
+  box-sizing: border-box;
+  color: inherit;
+  cursor: pointer;
+  font-size: inherit;
+  font-family: inherit;
+  font-weight: 300;
+  height: auto;
+  line-height: inherit;
+  margin: -1px 0 0 0;
+  outline: none;
+  padding: 0 0 0 0.5ch;
+  position: relative;
+  vertical-align: initial;
+  -webkit-box-sizing: border-box;
+  -webkit-appearance: menulist;
+  -moz-appearance: menulist;
+  width: auto;
+}
+.flatpickr-current-month .flatpickr-monthDropdown-months:focus,
+.flatpickr-current-month .flatpickr-monthDropdown-months:active {
+  outline: none;
+}
+.flatpickr-current-month .flatpickr-monthDropdown-months:hover {
+  background: rgba(0,0,0,0.05);
+}
+.flatpickr-current-month .flatpickr-monthDropdown-months .flatpickr-monthDropdown-month {
+  background-color: transparent;
+  outline: none;
+  padding: 0;
+}
+.flatpickr-weekdays {
+  background: transparent;
+  text-align: center;
+  overflow: hidden;
+  width: 100%;
+  display: -webkit-box;
+  display: -webkit-flex;
+  display: -ms-flexbox;
+  display: flex;
+  -webkit-box-align: center;
+  -webkit-align-items: center;
+      -ms-flex-align: center;
+          align-items: center;
+  height: 28px;
+}
+.flatpickr-weekdays .flatpickr-weekdaycontainer {
+  display: -webkit-box;
+  display: -webkit-flex;
+  display: -ms-flexbox;
+  display: flex;
+  -webkit-box-flex: 1;
+  -webkit-flex: 1;
+      -ms-flex: 1;
+          flex: 1;
+}
+span.flatpickr-weekday {
+  cursor: default;
+  font-size: 90%;
+  background: transparent;
+  color: rgba(0,0,0,0.54);
+  line-height: 1;
+  margin: 0;
+  text-align: center;
+  display: block;
+  -webkit-box-flex: 1;
+  -webkit-flex: 1;
+      -ms-flex: 1;
+          flex: 1;
+  font-weight: bolder;
+}
+.dayContainer,
+.flatpickr-weeks {
+  padding: 1px 0 0 0;
+}
+.flatpickr-days {
+  position: relative;
+  overflow: hidden;
+  display: -webkit-box;
+  display: -webkit-flex;
+  display: -ms-flexbox;
+  display: flex;
+  -webkit-box-align: start;
+  -webkit-align-items: flex-start;
+      -ms-flex-align: start;
+          align-items: flex-start;
+  width: 307.875px;
+}
+.flatpickr-days:focus {
+  outline: 0;
+}
+.dayContainer {
+  padding: 0;
+  outline: 0;
+  text-align: left;
+  width: 307.875px;
+  min-width: 307.875px;
+  max-width: 307.875px;
+  -webkit-box-sizing: border-box;
+          box-sizing: border-box;
+  display: inline-block;
+  display: -ms-flexbox;
+  display: -webkit-box;
+  display: -webkit-flex;
+  display: flex;
+  -webkit-flex-wrap: wrap;
+          flex-wrap: wrap;
+  -ms-flex-wrap: wrap;
+  -ms-flex-pack: justify;
+  -webkit-justify-content: space-around;
+          justify-content: space-around;
+  -webkit-transform: translate3d(0px, 0px, 0px);
+          transform: translate3d(0px, 0px, 0px);
+  opacity: 1;
+}
+.dayContainer + .dayContainer {
+  -webkit-box-shadow: -1px 0 0 #eee;
+          box-shadow: -1px 0 0 #eee;
+}
+.flatpickr-day {
+  background: none;
+  border: 1px solid transparent;
+  border-radius: 150px;
+  -webkit-box-sizing: border-box;
+          box-sizing: border-box;
+  color: #404848;
+  cursor: pointer;
+  font-weight: 400;
+  width: 14.2857143%;
+  -webkit-flex-basis: 14.2857143%;
+      -ms-flex-preferred-size: 14.2857143%;
+          flex-basis: 14.2857143%;
+  max-width: 39px;
+  height: 39px;
+  line-height: 39px;
+  margin: 0;
+  display: inline-block;
+  position: relative;
+  -webkit-box-pack: center;
+  -webkit-justify-content: center;
+      -ms-flex-pack: center;
+          justify-content: center;
+  text-align: center;
+}
+.flatpickr-day.inRange,
+.flatpickr-day.prevMonthDay.inRange,
+.flatpickr-day.nextMonthDay.inRange,
+.flatpickr-day.today.inRange,
+.flatpickr-day.prevMonthDay.today.inRange,
+.flatpickr-day.nextMonthDay.today.inRange,
+.flatpickr-day:hover,
+.flatpickr-day.prevMonthDay:hover,
+.flatpickr-day.nextMonthDay:hover,
+.flatpickr-day:focus,
+.flatpickr-day.prevMonthDay:focus,
+.flatpickr-day.nextMonthDay:focus {
+  cursor: pointer;
+  outline: 0;
+  background: #e9e9e9;
+  border-color: #e9e9e9;
+}
+.flatpickr-day.today {
+  border-color: #f64747;
+}
+.flatpickr-day.today:hover,
+.flatpickr-day.today:focus {
+  border-color: #f64747;
+  background: #f64747;
+  color: #fff;
+}
+.flatpickr-day.selected,
+.flatpickr-day.startRange,
+.flatpickr-day.endRange,
+.flatpickr-day.selected.inRange,
+.flatpickr-day.startRange.inRange,
+.flatpickr-day.endRange.inRange,
+.flatpickr-day.selected:focus,
+.flatpickr-day.startRange:focus,
+.flatpickr-day.endRange:focus,
+.flatpickr-day.selected:hover,
+.flatpickr-day.startRange:hover,
+.flatpickr-day.endRange:hover,
+.flatpickr-day.selected.prevMonthDay,
+.flatpickr-day.startRange.prevMonthDay,
+.flatpickr-day.endRange.prevMonthDay,
+.flatpickr-day.selected.nextMonthDay,
+.flatpickr-day.startRange.nextMonthDay,
+.flatpickr-day.endRange.nextMonthDay {
+  background: #4f99ff;
+  -webkit-box-shadow: none;
+          box-shadow: none;
+  color: #fff;
+  border-color: #4f99ff;
+}
+.flatpickr-day.selected.startRange,
+.flatpickr-day.startRange.startRange,
+.flatpickr-day.endRange.startRange {
+  border-radius: 50px 0 0 50px;
+}
+.flatpickr-day.selected.endRange,
+.flatpickr-day.startRange.endRange,
+.flatpickr-day.endRange.endRange {
+  border-radius: 0 50px 50px 0;
+}
+.flatpickr-day.selected.startRange + .endRange:not(:nth-child(7n+1)),
+.flatpickr-day.startRange.startRange + .endRange:not(:nth-child(7n+1)),
+.flatpickr-day.endRange.startRange + .endRange:not(:nth-child(7n+1)) {
+  -webkit-box-shadow: -10px 0 0 #4f99ff;
+          box-shadow: -10px 0 0 #4f99ff;
+}
+.flatpickr-day.selected.startRange.endRange,
+.flatpickr-day.startRange.startRange.endRange,
+.flatpickr-day.endRange.startRange.endRange {
+  border-radius: 50px;
+}
+.flatpickr-day.inRange {
+  border-radius: 0;
+  -webkit-box-shadow: -5px 0 0 #e9e9e9, 5px 0 0 #e9e9e9;
+          box-shadow: -5px 0 0 #e9e9e9, 5px 0 0 #e9e9e9;
+}
+.flatpickr-day.flatpickr-disabled,
+.flatpickr-day.flatpickr-disabled:hover,
+.flatpickr-day.prevMonthDay,
+.flatpickr-day.nextMonthDay,
+.flatpickr-day.notAllowed,
+.flatpickr-day.notAllowed.prevMonthDay,
+.flatpickr-day.notAllowed.nextMonthDay {
+  color: rgba(64,72,72,0.3);
+  background: transparent;
+  border-color: #e9e9e9;
+  cursor: default;
+}
+.flatpickr-day.flatpickr-disabled,
+.flatpickr-day.flatpickr-disabled:hover {
+  cursor: not-allowed;
+  color: rgba(64,72,72,0.1);
+}
+.flatpickr-day.week.selected {
+  border-radius: 0;
+  -webkit-box-shadow: -5px 0 0 #4f99ff, 5px 0 0 #4f99ff;
+          box-shadow: -5px 0 0 #4f99ff, 5px 0 0 #4f99ff;
+}
+.flatpickr-day.hidden {
+  visibility: hidden;
+}
+.rangeMode .flatpickr-day {
+  margin-top: 1px;
+}
+.flatpickr-weekwrapper {
+  float: left;
+}
+.flatpickr-weekwrapper .flatpickr-weeks {
+  padding: 0 12px;
+  -webkit-box-shadow: 1px 0 0 #eee;
+          box-shadow: 1px 0 0 #eee;
+}
+.flatpickr-weekwrapper .flatpickr-weekday {
+  float: none;
+  width: 100%;
+  line-height: 28px;
+}
+.flatpickr-weekwrapper span.flatpickr-day,
+.flatpickr-weekwrapper span.flatpickr-day:hover {
+  display: block;
+  width: 100%;
+  max-width: none;
+  color: rgba(64,72,72,0.3);
+  background: transparent;
+  cursor: default;
+  border: none;
+}
+.flatpickr-innerContainer {
+  display: block;
+  display: -webkit-box;
+  display: -webkit-flex;
+  display: -ms-flexbox;
+  display: flex;
+  -webkit-box-sizing: border-box;
+          box-sizing: border-box;
+  overflow: hidden;
+}
+.flatpickr-rContainer {
+  display: inline-block;
+  padding: 0;
+  -webkit-box-sizing: border-box;
+          box-sizing: border-box;
+}
+.flatpickr-time {
+  text-align: center;
+  outline: 0;
+  display: block;
+  height: 0;
+  line-height: 40px;
+  max-height: 40px;
+  -webkit-box-sizing: border-box;
+          box-sizing: border-box;
+  overflow: hidden;
+  display: -webkit-box;
+  display: -webkit-flex;
+  display: -ms-flexbox;
+  display: flex;
+}
+.flatpickr-time:after {
+  content: "";
+  display: table;
+  clear: both;
+}
+.flatpickr-time .numInputWrapper {
+  -webkit-box-flex: 1;
+  -webkit-flex: 1;
+      -ms-flex: 1;
+          flex: 1;
+  width: 40%;
+  height: 40px;
+  float: left;
+}
+.flatpickr-time .numInputWrapper span.arrowUp:after {
+  border-bottom-color: #404848;
+}
+.flatpickr-time .numInputWrapper span.arrowDown:after {
+  border-top-color: #404848;
+}
+.flatpickr-time.hasSeconds .numInputWrapper {
+  width: 26%;
+}
+.flatpickr-time.time24hr .numInputWrapper {
+  width: 49%;
+}
+.flatpickr-time input {
+  background: transparent;
+  -webkit-box-shadow: none;
+          box-shadow: none;
+  border: 0;
+  border-radius: 0;
+  text-align: center;
+  margin: 0;
+  padding: 0;
+  height: inherit;
+  line-height: inherit;
+  color: #404848;
+  font-size: 14px;
+  position: relative;
+  -webkit-box-sizing: border-box;
+          box-sizing: border-box;
+  -webkit-appearance: textfield;
+  -moz-appearance: textfield;
+  appearance: textfield;
+}
+.flatpickr-time input.flatpickr-hour {
+  font-weight: bold;
+}
+.flatpickr-time input.flatpickr-minute,
+.flatpickr-time input.flatpickr-second {
+  font-weight: 400;
+}
+.flatpickr-time input:focus {
+  outline: 0;
+  border: 0;
+}
+.flatpickr-time .flatpickr-time-separator,
+.flatpickr-time .flatpickr-am-pm {
+  height: inherit;
+  float: left;
+  line-height: inherit;
+  color: #404848;
+  font-weight: bold;
+  width: 2%;
+  -webkit-user-select: none;
+     -moz-user-select: none;
+      -ms-user-select: none;
+          user-select: none;
+  -webkit-align-self: center;
+      -ms-flex-item-align: center;
+          align-self: center;
+}
+.flatpickr-time .flatpickr-am-pm {
+  outline: 0;
+  width: 18%;
+  cursor: pointer;
+  text-align: center;
+  font-weight: 400;
+}
+.flatpickr-time input:hover,
+.flatpickr-time .flatpickr-am-pm:hover,
+.flatpickr-time input:focus,
+.flatpickr-time .flatpickr-am-pm:focus {
+  background: #f1f1f1;
+}
+.flatpickr-input[readonly] {
+  cursor: pointer;
+}
+@-webkit-keyframes fpFadeInDown {
+  from {
+    opacity: 0;
+    -webkit-transform: translate3d(0, -20px, 0);
+            transform: translate3d(0, -20px, 0);
+  }
+  to {
+    opacity: 1;
+    -webkit-transform: translate3d(0, 0, 0);
+            transform: translate3d(0, 0, 0);
+  }
+}
+@keyframes fpFadeInDown {
+  from {
+    opacity: 0;
+    -webkit-transform: translate3d(0, -20px, 0);
+            transform: translate3d(0, -20px, 0);
+  }
+  to {
+    opacity: 1;
+    -webkit-transform: translate3d(0, 0, 0);
+            transform: translate3d(0, 0, 0);
+  }
+}
+.flatpickr-calendar {
+  width: 310px;
+}
+.dayContainer {
+  padding: 0;
+  border-right: 0;
+}
+span.flatpickr-day,
+span.flatpickr-day.prevMonthDay,
+span.flatpickr-day.nextMonthDay {
+  border-radius: 0 !important;
+  border: 1px solid #e9e9e9;
+  max-width: none;
+  border-right-color: transparent;
+}
+span.flatpickr-day:nth-child(n+8),
+span.flatpickr-day.prevMonthDay:nth-child(n+8),
+span.flatpickr-day.nextMonthDay:nth-child(n+8) {
+  border-top-color: transparent;
+}
+span.flatpickr-day:nth-child(7n-6),
+span.flatpickr-day.prevMonthDay:nth-child(7n-6),
+span.flatpickr-day.nextMonthDay:nth-child(7n-6) {
+  border-left: 0;
+}
+span.flatpickr-day:nth-child(n+36),
+span.flatpickr-day.prevMonthDay:nth-child(n+36),
+span.flatpickr-day.nextMonthDay:nth-child(n+36) {
+  border-bottom: 0;
+}
+span.flatpickr-day:nth-child(-n+7),
+span.flatpickr-day.prevMonthDay:nth-child(-n+7),
+span.flatpickr-day.nextMonthDay:nth-child(-n+7) {
+  margin-top: 0;
+}
+span.flatpickr-day.today:not(.selected),
+span.flatpickr-day.prevMonthDay.today:not(.selected),
+span.flatpickr-day.nextMonthDay.today:not(.selected) {
+  border-color: #e9e9e9;
+  border-right-color: transparent;
+  border-top-color: transparent;
+  border-bottom-color: #f64747;
+}
+span.flatpickr-day.today:not(.selected):hover,
+span.flatpickr-day.prevMonthDay.today:not(.selected):hover,
+span.flatpickr-day.nextMonthDay.today:not(.selected):hover {
+  border: 1px solid #f64747;
+}
+span.flatpickr-day.startRange,
+span.flatpickr-day.prevMonthDay.startRange,
+span.flatpickr-day.nextMonthDay.startRange,
+span.flatpickr-day.endRange,
+span.flatpickr-day.prevMonthDay.endRange,
+span.flatpickr-day.nextMonthDay.endRange {
+  border-color: #4f99ff;
+}
+span.flatpickr-day.today,
+span.flatpickr-day.prevMonthDay.today,
+span.flatpickr-day.nextMonthDay.today,
+span.flatpickr-day.selected,
+span.flatpickr-day.prevMonthDay.selected,
+span.flatpickr-day.nextMonthDay.selected {
+  z-index: 2;
+}
+.rangeMode .flatpickr-day {
+  margin-top: -1px;
+}
+.flatpickr-weekwrapper .flatpickr-weeks {
+  -webkit-box-shadow: none;
+          box-shadow: none;
+}
+.flatpickr-weekwrapper span.flatpickr-day {
+  border: 0;
+  margin: -1px 0 0 -1px;
+}
+.hasWeeks .flatpickr-days {
+  border-right: 0;
+}
+
+       @media screen and (min-width:0\0) and (min-resolution: +72dpi) {
+               span.flatpickr-day {
+                       display: block;
+                       -webkit-box-flex: 1;
+                       -webkit-flex: 1 0 auto;
+                           -ms-flex: 1 0 auto;
+                               flex: 1 0 auto;
+               }
+       }
diff --git a/admin/js/vendors/flatpickr/types/globals.d.ts b/admin/js/vendors/flatpickr/types/globals.d.ts
new file mode 100644 (file)
index 0000000..a36e45b
--- /dev/null
@@ -0,0 +1,20 @@
+import { Options } from "./options";
+import { Instance, FlatpickrFn } from "./instance";
+declare global {
+    interface HTMLElement {
+        flatpickr: (config?: Options) => Instance;
+        _flatpickr?: Instance;
+    }
+    interface NodeList {
+        flatpickr: (config?: Options) => Instance | Instance[];
+    }
+    interface HTMLCollection {
+        flatpickr: (config?: Options) => Instance | Instance[];
+    }
+    interface Window {
+        flatpickr: FlatpickrFn;
+    }
+    interface Date {
+        fp_incr: (n: number) => Date;
+    }
+}
diff --git a/admin/js/vendors/flatpickr/types/instance.d.ts b/admin/js/vendors/flatpickr/types/instance.d.ts
new file mode 100644 (file)
index 0000000..e274274
--- /dev/null
@@ -0,0 +1,116 @@
+import { DateOption, Options, ParsedOptions } from "./options";
+import { Locale, CustomLocale, key as LocaleKey } from "./locale";
+import { RevFormat, Formats, TokenRegex } from "../utils/formatting";
+export interface Elements {
+    element: HTMLElement;
+    input: HTMLInputElement;
+    altInput?: HTMLInputElement;
+    _input: HTMLInputElement;
+    mobileInput?: HTMLInputElement;
+    mobileFormatStr?: string;
+    selectedDateElem?: DayElement;
+    todayDateElem?: DayElement;
+    _positionElement: HTMLElement;
+    weekdayContainer: HTMLDivElement;
+    calendarContainer: HTMLDivElement;
+    innerContainer?: HTMLDivElement;
+    rContainer?: HTMLDivElement;
+    daysContainer?: HTMLDivElement;
+    days: HTMLDivElement;
+    weekWrapper?: HTMLDivElement;
+    weekNumbers?: HTMLDivElement;
+    monthNav: HTMLDivElement;
+    monthsDropdownContainer: HTMLSelectElement;
+    yearElements: HTMLInputElement[];
+    monthElements: HTMLSpanElement[];
+    currentYearElement: HTMLInputElement;
+    currentMonthElement: HTMLSpanElement;
+    _hidePrevMonthArrow: boolean;
+    _hideNextMonthArrow: boolean;
+    prevMonthNav: HTMLElement;
+    nextMonthNav: HTMLElement;
+    timeContainer?: HTMLDivElement;
+    hourElement?: HTMLInputElement;
+    minuteElement?: HTMLInputElement;
+    secondElement?: HTMLInputElement;
+    amPM?: HTMLSpanElement;
+    pluginElements: Node[];
+}
+export interface Formatting {
+    revFormat: RevFormat;
+    formats: Formats;
+    tokenRegex: TokenRegex;
+}
+export declare type Instance = Elements & Formatting & {
+    minRangeDate?: Date;
+    maxRangeDate?: Date;
+    now: Date;
+    latestSelectedDateObj?: Date;
+    _selectedDateObj?: Date;
+    selectedDates: Date[];
+    _initialDate: Date;
+    config: ParsedOptions;
+    loadedPlugins: string[];
+    l10n: Locale;
+    currentYear: number;
+    currentMonth: number;
+    isOpen: boolean;
+    isMobile: boolean;
+    minDateHasTime: boolean;
+    maxDateHasTime: boolean;
+    changeMonth: (value: number, isOffset?: boolean, fromKeyboard?: boolean) => void;
+    changeYear: (year: number) => void;
+    clear: (emitChangeEvent?: boolean, toInitial?: boolean) => void;
+    close: () => void;
+    destroy: () => void;
+    isEnabled: (date: DateOption, timeless?: boolean) => boolean;
+    jumpToDate: (date?: DateOption, triggerChange?: boolean) => void;
+    open: (e?: FocusEvent | MouseEvent, positionElement?: HTMLElement) => void;
+    redraw: () => void;
+    set: (option: keyof Options | {
+        [k in keyof Options]?: Options[k];
+    }, value?: any) => void;
+    setDate: (date: DateOption | DateOption[], triggerChange?: boolean, format?: string) => void;
+    toggle: () => void;
+    pad: (num: string | number) => string;
+    parseDate: (date: Date | string | number, givenFormat?: string, timeless?: boolean) => Date | undefined;
+    formatDate: (dateObj: Date, frmt: string) => string;
+    _handlers: {
+        event: string;
+        element: Element;
+        handler: (e?: Event) => void;
+        options?: {
+            capture?: boolean;
+        };
+    }[];
+    _bind: <E extends Element>(element: E | E[], event: string | string[], handler: (e?: any) => void) => void;
+    _createElement: <E extends HTMLElement>(tag: keyof HTMLElementTagNameMap, className: string, content?: string) => E;
+    _setHoursFromDate: (date: Date) => void;
+    _debouncedChange: () => void;
+    __hideNextMonthArrow: boolean;
+    __hidePrevMonthArrow: boolean;
+    _positionCalendar: (customPositionElement?: HTMLElement) => void;
+    utils: {
+        getDaysInMonth: (month?: number, year?: number) => number;
+    };
+};
+export interface FlatpickrFn {
+    (selector: Node, config?: Options): Instance;
+    (selector: ArrayLike<Node>, config?: Options): Instance[];
+    (selector: string, config?: Options): Instance | Instance[];
+    defaultConfig: Partial<ParsedOptions>;
+    l10ns: {
+        [k in LocaleKey]?: CustomLocale;
+    } & {
+        default: Locale;
+    };
+    localize: (l10n: CustomLocale) => void;
+    setDefaults: (config: Options) => void;
+    parseDate: (date: DateOption, format?: string, timeless?: boolean) => Date | undefined;
+    formatDate: (date: Date, format: string) => string;
+    compareDates: (date1: Date, date2: Date, timeless?: boolean) => number;
+}
+export declare type DayElement = HTMLSpanElement & {
+    dateObj: Date;
+    $i: number;
+};
diff --git a/admin/js/vendors/flatpickr/types/locale.d.ts b/admin/js/vendors/flatpickr/types/locale.d.ts
new file mode 100644 (file)
index 0000000..86ad582
--- /dev/null
@@ -0,0 +1,46 @@
+export declare type Locale = {
+    weekdays: {
+        shorthand: [string, string, string, string, string, string, string];
+        longhand: [string, string, string, string, string, string, string];
+    };
+    months: {
+        shorthand: [string, string, string, string, string, string, string, string, string, string, string, string];
+        longhand: [string, string, string, string, string, string, string, string, string, string, string, string];
+    };
+    daysInMonth: [number, number, number, number, number, number, number, number, number, number, number, number];
+    firstDayOfWeek: number;
+    ordinal: (nth: number) => string;
+    rangeSeparator: string;
+    weekAbbreviation: string;
+    scrollTitle: string;
+    toggleTitle: string;
+    amPM: [string, string];
+    yearAriaLabel: string;
+    monthAriaLabel: string;
+    hourAriaLabel: string;
+    minuteAriaLabel: string;
+    time_24hr: boolean;
+};
+export declare type CustomLocale = {
+    ordinal?: Locale["ordinal"];
+    daysInMonth?: Locale["daysInMonth"];
+    firstDayOfWeek?: Locale["firstDayOfWeek"];
+    rangeSeparator?: Locale["rangeSeparator"];
+    weekAbbreviation?: Locale["weekAbbreviation"];
+    toggleTitle?: Locale["toggleTitle"];
+    scrollTitle?: Locale["scrollTitle"];
+    yearAriaLabel?: string;
+    hourAriaLabel?: string;
+    minuteAriaLabel?: string;
+    amPM?: Locale["amPM"];
+    time_24hr?: Locale["time_24hr"];
+    weekdays: {
+        shorthand: [string, string, string, string, string, string, string];
+        longhand: [string, string, string, string, string, string, string];
+    };
+    months: {
+        shorthand: [string, string, string, string, string, string, string, string, string, string, string, string];
+        longhand: [string, string, string, string, string, string, string, string, string, string, string, string];
+    };
+};
+export declare type key = "ar" | "at" | "az" | "be" | "bg" | "bn" | "bs" | "ca" | "cat" | "cs" | "cy" | "da" | "de" | "default" | "en" | "eo" | "es" | "et" | "fa" | "fi" | "fo" | "fr" | "gr" | "he" | "hi" | "hr" | "hu" | "id" | "is" | "it" | "ja" | "ka" | "ko" | "km" | "kz" | "lt" | "lv" | "mk" | "mn" | "ms" | "my" | "nl" | "no" | "pa" | "pl" | "pt" | "ro" | "ru" | "si" | "sk" | "sl" | "sq" | "sr" | "sv" | "th" | "tr" | "uk" | "vn" | "zh" | "uz" | "uz_latn" | "zh_tw";
diff --git a/admin/js/vendors/flatpickr/types/options.d.ts b/admin/js/vendors/flatpickr/types/options.d.ts
new file mode 100644 (file)
index 0000000..f62d10e
--- /dev/null
@@ -0,0 +1,148 @@
+import { Instance } from "./instance";
+import { CustomLocale, key as LocaleKey, Locale } from "./locale";
+export declare type DateOption = Date | string | number;
+export declare type DateRangeLimit<D = DateOption> = {
+    from: D;
+    to: D;
+};
+export declare type DateLimit<D = DateOption> = D | DateRangeLimit<D> | ((date: Date) => boolean);
+export declare type Hook = (dates: Date[], currentDateString: string, self: Instance, data?: any) => void;
+export declare type HookKey = "onChange" | "onClose" | "onDayCreate" | "onDestroy" | "onKeyDown" | "onMonthChange" | "onOpen" | "onParseConfig" | "onReady" | "onValueUpdate" | "onYearChange" | "onPreCalendarPosition";
+export declare const HOOKS: HookKey[];
+export declare type Plugin<E = {}> = (fp: Instance & E) => Options;
+export interface BaseOptions {
+    allowInput: boolean;
+    allowInvalidPreload: boolean;
+    altFormat: string;
+    altInput: boolean;
+    altInputClass: string;
+    animate: boolean;
+    appendTo: HTMLElement;
+    ariaDateFormat: string;
+    autoFillDefaultTime: boolean;
+    clickOpens: boolean;
+    closeOnSelect: boolean;
+    conjunction: string;
+    dateFormat: string;
+    defaultDate: DateOption | DateOption[];
+    defaultHour: number;
+    defaultMinute: number;
+    defaultSeconds: number;
+    disable: DateLimit<DateOption>[];
+    disableMobile: boolean;
+    enable: DateLimit<DateOption>[];
+    enableSeconds: boolean;
+    enableTime: boolean;
+    errorHandler: (e: Error) => void;
+    formatDate: (date: Date, format: string, locale: Locale) => string;
+    getWeek: (date: Date) => string | number;
+    hourIncrement: number;
+    ignoredFocusElements: HTMLElement[];
+    inline: boolean;
+    locale: LocaleKey | CustomLocale;
+    maxDate: DateOption;
+    maxTime: DateOption;
+    minDate: DateOption;
+    minTime: DateOption;
+    minuteIncrement: number;
+    mode: "single" | "multiple" | "range" | "time";
+    monthSelectorType: "dropdown" | "static";
+    nextArrow: string;
+    noCalendar: boolean;
+    now?: DateOption;
+    onChange: Hook | Hook[];
+    onClose: Hook | Hook[];
+    onDayCreate: Hook | Hook[];
+    onDestroy: Hook | Hook[];
+    onKeyDown: Hook | Hook[];
+    onMonthChange: Hook | Hook[];
+    onOpen: Hook | Hook[];
+    onParseConfig: Hook | Hook[];
+    onReady: Hook | Hook[];
+    onValueUpdate: Hook | Hook[];
+    onYearChange: Hook | Hook[];
+    onPreCalendarPosition: Hook | Hook[];
+    parseDate: (date: string, format: string) => Date;
+    plugins: Plugin[];
+    position: "auto" | "above" | "below";
+    positionElement: Element;
+    prevArrow: string;
+    shorthandCurrentMonth: boolean;
+    static: boolean;
+    showMonths?: number;
+    time_24hr: boolean;
+    weekNumbers: boolean;
+    wrap: boolean;
+}
+export declare type Options = Partial<BaseOptions>;
+export interface ParsedOptions {
+    _disable: DateLimit<Date>[];
+    _enable: DateLimit<Date>[];
+    _maxDate?: Date;
+    _maxTime?: Date;
+    _minDate?: Date;
+    _minTime?: Date;
+    allowInput: boolean;
+    allowInvalidPreload: boolean;
+    altFormat: string;
+    altInput: boolean;
+    altInputClass: string;
+    animate: boolean;
+    appendTo?: HTMLElement;
+    ariaDateFormat: string;
+    autoFillDefaultTime: boolean;
+    clickOpens: boolean;
+    closeOnSelect: boolean;
+    conjunction: string;
+    dateFormat: string;
+    defaultDate?: Date | Date[];
+    defaultHour: number;
+    defaultMinute: number;
+    defaultSeconds: number;
+    disable: DateLimit<Date>[];
+    disableMobile: boolean;
+    enable: DateLimit<Date>[];
+    enableSeconds: boolean;
+    enableTime: boolean;
+    errorHandler: (err: Error) => void;
+    formatDate?: Options["formatDate"];
+    getWeek: (date: Date) => string | number;
+    hourIncrement: number;
+    ignoredFocusElements: HTMLElement[];
+    inline: boolean;
+    locale: LocaleKey | CustomLocale;
+    maxDate?: Date;
+    maxTime?: Date;
+    minDate?: Date;
+    minTime?: Date;
+    minuteIncrement: number;
+    mode: BaseOptions["mode"];
+    monthSelectorType: string;
+    nextArrow: string;
+    noCalendar: boolean;
+    now: Date;
+    onChange: Hook[];
+    onClose: Hook[];
+    onDayCreate: Hook[];
+    onDestroy: Hook[];
+    onKeyDown: Hook[];
+    onMonthChange: Hook[];
+    onOpen: Hook[];
+    onParseConfig: Hook[];
+    onReady: Hook[];
+    onValueUpdate: Hook[];
+    onYearChange: Hook[];
+    onPreCalendarPosition: Hook[];
+    parseDate?: BaseOptions["parseDate"];
+    plugins: Plugin[];
+    position: BaseOptions["position"];
+    positionElement?: HTMLElement;
+    prevArrow: string;
+    shorthandCurrentMonth: boolean;
+    showMonths: number;
+    static: boolean;
+    time_24hr: boolean;
+    weekNumbers: boolean;
+    wrap: boolean;
+}
+export declare const defaults: ParsedOptions;
diff --git a/admin/js/vendors/flatpickr/typings.d.ts b/admin/js/vendors/flatpickr/typings.d.ts
new file mode 100644 (file)
index 0000000..2c9c27d
--- /dev/null
@@ -0,0 +1,40 @@
+import { FlatpickrFn } from "./types/instance";
+import { Instance as _Instance } from "./types/instance";
+import {
+  Options as _Options,
+  Hook as _Hook,
+  HookKey as _HookKey,
+  ParsedOptions as _ParsedOptions,
+  DateLimit as _DateLimit,
+  DateOption as _DateOption,
+  DateRangeLimit as _DateRangeLimit,
+  Plugin as _Plugin,
+} from "./types/options";
+
+import {
+  Locale as _Locale,
+  CustomLocale as _CustomLocale,
+  key as _LocaleKey,
+} from "./types/locale";
+
+declare var flatpickr: FlatpickrFn;
+
+declare namespace flatpickr {
+  export type Instance = _Instance;
+  export type CustomLocale = _CustomLocale;
+  export type Locale = _Locale;
+
+  export namespace Options {
+    export type Options = _Options;
+    export type Hook = _Hook;
+    export type HookKey = _HookKey;
+    export type ParsedOptions = _ParsedOptions;
+    export type DateLimit = _DateLimit;
+    export type DateOption = _DateOption;
+    export type DateRangeLimit = _DateRangeLimit;
+    export type Plugin = _Plugin;
+    export type LocaleKey = _LocaleKey;
+  }
+}
+
+export default flatpickr;
diff --git a/admin/js/vendors/flatpickr/utils/dates.d.ts b/admin/js/vendors/flatpickr/utils/dates.d.ts
new file mode 100644 (file)
index 0000000..fc30798
--- /dev/null
@@ -0,0 +1,18 @@
+import { Locale } from "../types/locale";
+import { ParsedOptions } from "../types/options";
+export interface FormatterArgs {
+    config?: ParsedOptions;
+    l10n?: Locale;
+    isMobile?: boolean;
+}
+export declare const createDateFormatter: ({ config, l10n, isMobile, }: FormatterArgs) => (dateObj: Date, frmt: string, overrideLocale?: Locale | undefined) => string;
+export declare const createDateParser: ({ config, l10n }: {
+    config?: ParsedOptions | undefined;
+    l10n?: Locale | undefined;
+}) => (date: Date | string | number, givenFormat?: string | undefined, timeless?: boolean | undefined, customLocale?: Locale | undefined) => Date | undefined;
+export declare function compareDates(date1: Date, date2: Date, timeless?: boolean): number;
+export declare function compareTimes(date1: Date, date2: Date): number;
+export declare const isBetween: (ts: number, ts1: number, ts2: number) => boolean;
+export declare const duration: {
+    DAY: number;
+};
diff --git a/admin/js/vendors/flatpickr/utils/dom.d.ts b/admin/js/vendors/flatpickr/utils/dom.d.ts
new file mode 100644 (file)
index 0000000..b15f309
--- /dev/null
@@ -0,0 +1,6 @@
+export declare function toggleClass(elem: HTMLElement, className: string, bool: boolean): void;
+export declare function createElement<T extends HTMLElement>(tag: keyof HTMLElementTagNameMap, className: string, content?: string): T;
+export declare function clearNode(node: HTMLElement): void;
+export declare function findParent(node: Element, condition: (n: Element) => boolean): Element | undefined;
+export declare function createNumberInput(inputClassName: string, opts?: Record<string, any>): HTMLDivElement;
+export declare function getEventTarget(event: Event): EventTarget | null;
diff --git a/admin/js/vendors/flatpickr/utils/formatting.d.ts b/admin/js/vendors/flatpickr/utils/formatting.d.ts
new file mode 100644 (file)
index 0000000..b430324
--- /dev/null
@@ -0,0 +1,13 @@
+import { Locale } from "../types/locale";
+import { ParsedOptions } from "../types/options";
+export declare type token = "D" | "F" | "G" | "H" | "J" | "K" | "M" | "S" | "U" | "W" | "Y" | "Z" | "d" | "h" | "i" | "j" | "l" | "m" | "n" | "s" | "u" | "w" | "y";
+export declare const monthToStr: (monthNumber: number, shorthand: boolean, locale: Locale) => string;
+export declare type RevFormatFn = (date: Date, data: string, locale: Locale) => Date | void | undefined;
+export declare type RevFormat = Record<string, RevFormatFn>;
+export declare const revFormat: RevFormat;
+export declare type TokenRegex = {
+    [k in token]: string;
+};
+export declare const tokenRegex: TokenRegex;
+export declare type Formats = Record<token, (date: Date, locale: Locale, options: ParsedOptions) => string | number>;
+export declare const formats: Formats;
diff --git a/admin/js/vendors/flatpickr/utils/index.d.ts b/admin/js/vendors/flatpickr/utils/index.d.ts
new file mode 100644 (file)
index 0000000..113069e
--- /dev/null
@@ -0,0 +1,8 @@
+export declare const pad: (number: string | number, length?: number) => string;
+export declare const int: (bool: boolean) => 1 | 0;
+export declare function debounce<F extends Function>(func: F, wait: number, immediate?: boolean): (this: Function) => void;
+export declare const arrayify: <T>(obj: T | T[]) => T[];
+export declare type IncrementEvent = MouseEvent & {
+    delta: number;
+    type: "increment";
+};
diff --git a/admin/js/vendors/flatpickr/utils/polyfills.d.ts b/admin/js/vendors/flatpickr/utils/polyfills.d.ts
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/admin/js/vendors/moment/locales.js b/admin/js/vendors/moment/locales.js
new file mode 100644 (file)
index 0000000..caabe6a
--- /dev/null
@@ -0,0 +1,12105 @@
+;(function (global, factory) {
+   typeof exports === 'object' && typeof module !== 'undefined'
+       && typeof require === 'function' ? factory(require('../moment')) :
+   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
+   factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+    //! moment.js locale configuration
+
+    moment.defineLocale('af', {
+        months: 'Januarie_Februarie_Maart_April_Mei_Junie_Julie_Augustus_September_Oktober_November_Desember'.split(
+            '_'
+        ),
+        monthsShort: 'Jan_Feb_Mrt_Apr_Mei_Jun_Jul_Aug_Sep_Okt_Nov_Des'.split('_'),
+        weekdays: 'Sondag_Maandag_Dinsdag_Woensdag_Donderdag_Vrydag_Saterdag'.split(
+            '_'
+        ),
+        weekdaysShort: 'Son_Maa_Din_Woe_Don_Vry_Sat'.split('_'),
+        weekdaysMin: 'So_Ma_Di_Wo_Do_Vr_Sa'.split('_'),
+        meridiemParse: /vm|nm/i,
+        isPM: function (input) {
+            return /^nm$/i.test(input);
+        },
+        meridiem: function (hours, minutes, isLower) {
+            if (hours < 12) {
+                return isLower ? 'vm' : 'VM';
+            } else {
+                return isLower ? 'nm' : 'NM';
+            }
+        },
+        longDateFormat: {
+            LT: 'HH:mm',
+            LTS: 'HH:mm:ss',
+            L: 'DD/MM/YYYY',
+            LL: 'D MMMM YYYY',
+            LLL: 'D MMMM YYYY HH:mm',
+            LLLL: 'dddd, D MMMM YYYY HH:mm',
+        },
+        calendar: {
+            sameDay: '[Vandag om] LT',
+            nextDay: '[Môre om] LT',
+            nextWeek: 'dddd [om] LT',
+            lastDay: '[Gister om] LT',
+            lastWeek: '[Laas] dddd [om] LT',
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: 'oor %s',
+            past: '%s gelede',
+            s: "'n paar sekondes",
+            ss: '%d sekondes',
+            m: "'n minuut",
+            mm: '%d minute',
+            h: "'n uur",
+            hh: '%d ure',
+            d: "'n dag",
+            dd: '%d dae',
+            M: "'n maand",
+            MM: '%d maande',
+            y: "'n jaar",
+            yy: '%d jaar',
+        },
+        dayOfMonthOrdinalParse: /\d{1,2}(ste|de)/,
+        ordinal: function (number) {
+            return (
+                number +
+                (number === 1 || number === 8 || number >= 20 ? 'ste' : 'de')
+            ); // Thanks to Joris Röling : https://github.com/jjupiter
+        },
+        week: {
+            dow: 1, // Maandag is die eerste dag van die week.
+            doy: 4, // Die week wat die 4de Januarie bevat is die eerste week van die jaar.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    var pluralForm = function (n) {
+            return n === 0
+                ? 0
+                : n === 1
+                ? 1
+                : n === 2
+                ? 2
+                : n % 100 >= 3 && n % 100 <= 10
+                ? 3
+                : n % 100 >= 11
+                ? 4
+                : 5;
+        },
+        plurals = {
+            s: [
+                'أقل من ثانية',
+                'ثانية واحدة',
+                ['ثانيتان', 'ثانيتين'],
+                '%d ثوان',
+                '%d ثانية',
+                '%d ثانية',
+            ],
+            m: [
+                'أقل من دقيقة',
+                'دقيقة واحدة',
+                ['دقيقتان', 'دقيقتين'],
+                '%d دقائق',
+                '%d دقيقة',
+                '%d دقيقة',
+            ],
+            h: [
+                'أقل من ساعة',
+                'ساعة واحدة',
+                ['ساعتان', 'ساعتين'],
+                '%d ساعات',
+                '%d ساعة',
+                '%d ساعة',
+            ],
+            d: [
+                'أقل من يوم',
+                'يوم واحد',
+                ['يومان', 'يومين'],
+                '%d أيام',
+                '%d يومًا',
+                '%d يوم',
+            ],
+            M: [
+                'أقل من شهر',
+                'شهر واحد',
+                ['شهران', 'شهرين'],
+                '%d أشهر',
+                '%d شهرا',
+                '%d شهر',
+            ],
+            y: [
+                'أقل من عام',
+                'عام واحد',
+                ['عامان', 'عامين'],
+                '%d أعوام',
+                '%d عامًا',
+                '%d عام',
+            ],
+        },
+        pluralize = function (u) {
+            return function (number, withoutSuffix, string, isFuture) {
+                var f = pluralForm(number),
+                    str = plurals[u][pluralForm(number)];
+                if (f === 2) {
+                    str = str[withoutSuffix ? 0 : 1];
+                }
+                return str.replace(/%d/i, number);
+            };
+        },
+        months = [
+            'جانفي',
+            'فيفري',
+            'مارس',
+            'أفريل',
+            'ماي',
+            'جوان',
+            'جويلية',
+            'أوت',
+            'سبتمبر',
+            'أكتوبر',
+            'نوفمبر',
+            'ديسمبر',
+        ];
+
+    moment.defineLocale('ar-dz', {
+        months: months,
+        monthsShort: months,
+        weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),
+        weekdaysShort: 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),
+        weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'),
+        weekdaysParseExact: true,
+        longDateFormat: {
+            LT: 'HH:mm',
+            LTS: 'HH:mm:ss',
+            L: 'D/\u200FM/\u200FYYYY',
+            LL: 'D MMMM YYYY',
+            LLL: 'D MMMM YYYY HH:mm',
+            LLLL: 'dddd D MMMM YYYY HH:mm',
+        },
+        meridiemParse: /ص|م/,
+        isPM: function (input) {
+            return 'م' === input;
+        },
+        meridiem: function (hour, minute, isLower) {
+            if (hour < 12) {
+                return 'ص';
+            } else {
+                return 'م';
+            }
+        },
+        calendar: {
+            sameDay: '[اليوم عند الساعة] LT',
+            nextDay: '[غدًا عند الساعة] LT',
+            nextWeek: 'dddd [عند الساعة] LT',
+            lastDay: '[أمس عند الساعة] LT',
+            lastWeek: 'dddd [عند الساعة] LT',
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: 'بعد %s',
+            past: 'منذ %s',
+            s: pluralize('s'),
+            ss: pluralize('s'),
+            m: pluralize('m'),
+            mm: pluralize('m'),
+            h: pluralize('h'),
+            hh: pluralize('h'),
+            d: pluralize('d'),
+            dd: pluralize('d'),
+            M: pluralize('M'),
+            MM: pluralize('M'),
+            y: pluralize('y'),
+            yy: pluralize('y'),
+        },
+        postformat: function (string) {
+            return string.replace(/,/g, '،');
+        },
+        week: {
+            dow: 0, // Sunday is the first day of the week.
+            doy: 4, // The week that contains Jan 4th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    moment.defineLocale('ar-kw', {
+        months: 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split(
+            '_'
+        ),
+        monthsShort: 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split(
+            '_'
+        ),
+        weekdays: 'الأحد_الإتنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),
+        weekdaysShort: 'احد_اتنين_ثلاثاء_اربعاء_خميس_جمعة_سبت'.split('_'),
+        weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'),
+        weekdaysParseExact: true,
+        longDateFormat: {
+            LT: 'HH:mm',
+            LTS: 'HH:mm:ss',
+            L: 'DD/MM/YYYY',
+            LL: 'D MMMM YYYY',
+            LLL: 'D MMMM YYYY HH:mm',
+            LLLL: 'dddd D MMMM YYYY HH:mm',
+        },
+        calendar: {
+            sameDay: '[اليوم على الساعة] LT',
+            nextDay: '[غدا على الساعة] LT',
+            nextWeek: 'dddd [على الساعة] LT',
+            lastDay: '[أمس على الساعة] LT',
+            lastWeek: 'dddd [على الساعة] LT',
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: 'في %s',
+            past: 'منذ %s',
+            s: 'ثوان',
+            ss: '%d ثانية',
+            m: 'دقيقة',
+            mm: '%d دقائق',
+            h: 'ساعة',
+            hh: '%d ساعات',
+            d: 'يوم',
+            dd: '%d أيام',
+            M: 'شهر',
+            MM: '%d أشهر',
+            y: 'سنة',
+            yy: '%d سنوات',
+        },
+        week: {
+            dow: 0, // Sunday is the first day of the week.
+            doy: 12, // The week that contains Jan 12th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    var symbolMap = {
+            '1': '1',
+            '2': '2',
+            '3': '3',
+            '4': '4',
+            '5': '5',
+            '6': '6',
+            '7': '7',
+            '8': '8',
+            '9': '9',
+            '0': '0',
+        },
+        pluralForm$1 = function (n) {
+            return n === 0
+                ? 0
+                : n === 1
+                ? 1
+                : n === 2
+                ? 2
+                : n % 100 >= 3 && n % 100 <= 10
+                ? 3
+                : n % 100 >= 11
+                ? 4
+                : 5;
+        },
+        plurals$1 = {
+            s: [
+                'أقل من ثانية',
+                'ثانية واحدة',
+                ['ثانيتان', 'ثانيتين'],
+                '%d ثوان',
+                '%d ثانية',
+                '%d ثانية',
+            ],
+            m: [
+                'أقل من دقيقة',
+                'دقيقة واحدة',
+                ['دقيقتان', 'دقيقتين'],
+                '%d دقائق',
+                '%d دقيقة',
+                '%d دقيقة',
+            ],
+            h: [
+                'أقل من ساعة',
+                'ساعة واحدة',
+                ['ساعتان', 'ساعتين'],
+                '%d ساعات',
+                '%d ساعة',
+                '%d ساعة',
+            ],
+            d: [
+                'أقل من يوم',
+                'يوم واحد',
+                ['يومان', 'يومين'],
+                '%d أيام',
+                '%d يومًا',
+                '%d يوم',
+            ],
+            M: [
+                'أقل من شهر',
+                'شهر واحد',
+                ['شهران', 'شهرين'],
+                '%d أشهر',
+                '%d شهرا',
+                '%d شهر',
+            ],
+            y: [
+                'أقل من عام',
+                'عام واحد',
+                ['عامان', 'عامين'],
+                '%d أعوام',
+                '%d عامًا',
+                '%d عام',
+            ],
+        },
+        pluralize$1 = function (u) {
+            return function (number, withoutSuffix, string, isFuture) {
+                var f = pluralForm$1(number),
+                    str = plurals$1[u][pluralForm$1(number)];
+                if (f === 2) {
+                    str = str[withoutSuffix ? 0 : 1];
+                }
+                return str.replace(/%d/i, number);
+            };
+        },
+        months$1 = [
+            'يناير',
+            'فبراير',
+            'مارس',
+            'أبريل',
+            'مايو',
+            'يونيو',
+            'يوليو',
+            'أغسطس',
+            'سبتمبر',
+            'أكتوبر',
+            'نوفمبر',
+            'ديسمبر',
+        ];
+
+    moment.defineLocale('ar-ly', {
+        months: months$1,
+        monthsShort: months$1,
+        weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),
+        weekdaysShort: 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),
+        weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'),
+        weekdaysParseExact: true,
+        longDateFormat: {
+            LT: 'HH:mm',
+            LTS: 'HH:mm:ss',
+            L: 'D/\u200FM/\u200FYYYY',
+            LL: 'D MMMM YYYY',
+            LLL: 'D MMMM YYYY HH:mm',
+            LLLL: 'dddd D MMMM YYYY HH:mm',
+        },
+        meridiemParse: /ص|م/,
+        isPM: function (input) {
+            return 'م' === input;
+        },
+        meridiem: function (hour, minute, isLower) {
+            if (hour < 12) {
+                return 'ص';
+            } else {
+                return 'م';
+            }
+        },
+        calendar: {
+            sameDay: '[اليوم عند الساعة] LT',
+            nextDay: '[غدًا عند الساعة] LT',
+            nextWeek: 'dddd [عند الساعة] LT',
+            lastDay: '[أمس عند الساعة] LT',
+            lastWeek: 'dddd [عند الساعة] LT',
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: 'بعد %s',
+            past: 'منذ %s',
+            s: pluralize$1('s'),
+            ss: pluralize$1('s'),
+            m: pluralize$1('m'),
+            mm: pluralize$1('m'),
+            h: pluralize$1('h'),
+            hh: pluralize$1('h'),
+            d: pluralize$1('d'),
+            dd: pluralize$1('d'),
+            M: pluralize$1('M'),
+            MM: pluralize$1('M'),
+            y: pluralize$1('y'),
+            yy: pluralize$1('y'),
+        },
+        preparse: function (string) {
+            return string.replace(/،/g, ',');
+        },
+        postformat: function (string) {
+            return string
+                .replace(/\d/g, function (match) {
+                    return symbolMap[match];
+                })
+                .replace(/,/g, '،');
+        },
+        week: {
+            dow: 6, // Saturday is the first day of the week.
+            doy: 12, // The week that contains Jan 12th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    moment.defineLocale('ar-ma', {
+        months: 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split(
+            '_'
+        ),
+        monthsShort: 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split(
+            '_'
+        ),
+        weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),
+        weekdaysShort: 'احد_اثنين_ثلاثاء_اربعاء_خميس_جمعة_سبت'.split('_'),
+        weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'),
+        weekdaysParseExact: true,
+        longDateFormat: {
+            LT: 'HH:mm',
+            LTS: 'HH:mm:ss',
+            L: 'DD/MM/YYYY',
+            LL: 'D MMMM YYYY',
+            LLL: 'D MMMM YYYY HH:mm',
+            LLLL: 'dddd D MMMM YYYY HH:mm',
+        },
+        calendar: {
+            sameDay: '[اليوم على الساعة] LT',
+            nextDay: '[غدا على الساعة] LT',
+            nextWeek: 'dddd [على الساعة] LT',
+            lastDay: '[أمس على الساعة] LT',
+            lastWeek: 'dddd [على الساعة] LT',
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: 'في %s',
+            past: 'منذ %s',
+            s: 'ثوان',
+            ss: '%d ثانية',
+            m: 'دقيقة',
+            mm: '%d دقائق',
+            h: 'ساعة',
+            hh: '%d ساعات',
+            d: 'يوم',
+            dd: '%d أيام',
+            M: 'شهر',
+            MM: '%d أشهر',
+            y: 'سنة',
+            yy: '%d سنوات',
+        },
+        week: {
+            dow: 6, // Saturday is the first day of the week.
+            doy: 12, // The week that contains Jan 12th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    var symbolMap$1 = {
+            '1': '١',
+            '2': '٢',
+            '3': '٣',
+            '4': '٤',
+            '5': '٥',
+            '6': '٦',
+            '7': '٧',
+            '8': '٨',
+            '9': '٩',
+            '0': '٠',
+        },
+        numberMap = {
+            '١': '1',
+            '٢': '2',
+            '٣': '3',
+            '٤': '4',
+            '٥': '5',
+            '٦': '6',
+            '٧': '7',
+            '٨': '8',
+            '٩': '9',
+            '٠': '0',
+        };
+
+    moment.defineLocale('ar-sa', {
+        months: 'يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split(
+            '_'
+        ),
+        monthsShort: 'يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split(
+            '_'
+        ),
+        weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),
+        weekdaysShort: 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),
+        weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'),
+        weekdaysParseExact: true,
+        longDateFormat: {
+            LT: 'HH:mm',
+            LTS: 'HH:mm:ss',
+            L: 'DD/MM/YYYY',
+            LL: 'D MMMM YYYY',
+            LLL: 'D MMMM YYYY HH:mm',
+            LLLL: 'dddd D MMMM YYYY HH:mm',
+        },
+        meridiemParse: /ص|م/,
+        isPM: function (input) {
+            return 'م' === input;
+        },
+        meridiem: function (hour, minute, isLower) {
+            if (hour < 12) {
+                return 'ص';
+            } else {
+                return 'م';
+            }
+        },
+        calendar: {
+            sameDay: '[اليوم على الساعة] LT',
+            nextDay: '[غدا على الساعة] LT',
+            nextWeek: 'dddd [على الساعة] LT',
+            lastDay: '[أمس على الساعة] LT',
+            lastWeek: 'dddd [على الساعة] LT',
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: 'في %s',
+            past: 'منذ %s',
+            s: 'ثوان',
+            ss: '%d ثانية',
+            m: 'دقيقة',
+            mm: '%d دقائق',
+            h: 'ساعة',
+            hh: '%d ساعات',
+            d: 'يوم',
+            dd: '%d أيام',
+            M: 'شهر',
+            MM: '%d أشهر',
+            y: 'سنة',
+            yy: '%d سنوات',
+        },
+        preparse: function (string) {
+            return string
+                .replace(/[١٢٣٤٥٦٧٨٩٠]/g, function (match) {
+                    return numberMap[match];
+                })
+                .replace(/،/g, ',');
+        },
+        postformat: function (string) {
+            return string
+                .replace(/\d/g, function (match) {
+                    return symbolMap$1[match];
+                })
+                .replace(/,/g, '،');
+        },
+        week: {
+            dow: 0, // Sunday is the first day of the week.
+            doy: 6, // The week that contains Jan 6th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    moment.defineLocale('ar-tn', {
+        months: 'جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split(
+            '_'
+        ),
+        monthsShort: 'جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split(
+            '_'
+        ),
+        weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),
+        weekdaysShort: 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),
+        weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'),
+        weekdaysParseExact: true,
+        longDateFormat: {
+            LT: 'HH:mm',
+            LTS: 'HH:mm:ss',
+            L: 'DD/MM/YYYY',
+            LL: 'D MMMM YYYY',
+            LLL: 'D MMMM YYYY HH:mm',
+            LLLL: 'dddd D MMMM YYYY HH:mm',
+        },
+        calendar: {
+            sameDay: '[اليوم على الساعة] LT',
+            nextDay: '[غدا على الساعة] LT',
+            nextWeek: 'dddd [على الساعة] LT',
+            lastDay: '[أمس على الساعة] LT',
+            lastWeek: 'dddd [على الساعة] LT',
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: 'في %s',
+            past: 'منذ %s',
+            s: 'ثوان',
+            ss: '%d ثانية',
+            m: 'دقيقة',
+            mm: '%d دقائق',
+            h: 'ساعة',
+            hh: '%d ساعات',
+            d: 'يوم',
+            dd: '%d أيام',
+            M: 'شهر',
+            MM: '%d أشهر',
+            y: 'سنة',
+            yy: '%d سنوات',
+        },
+        week: {
+            dow: 1, // Monday is the first day of the week.
+            doy: 4, // The week that contains Jan 4th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    var symbolMap$2 = {
+            '1': '١',
+            '2': '٢',
+            '3': '٣',
+            '4': '٤',
+            '5': '٥',
+            '6': '٦',
+            '7': '٧',
+            '8': '٨',
+            '9': '٩',
+            '0': '٠',
+        },
+        numberMap$1 = {
+            '١': '1',
+            '٢': '2',
+            '٣': '3',
+            '٤': '4',
+            '٥': '5',
+            '٦': '6',
+            '٧': '7',
+            '٨': '8',
+            '٩': '9',
+            '٠': '0',
+        },
+        pluralForm$2 = function (n) {
+            return n === 0
+                ? 0
+                : n === 1
+                ? 1
+                : n === 2
+                ? 2
+                : n % 100 >= 3 && n % 100 <= 10
+                ? 3
+                : n % 100 >= 11
+                ? 4
+                : 5;
+        },
+        plurals$2 = {
+            s: [
+                'أقل من ثانية',
+                'ثانية واحدة',
+                ['ثانيتان', 'ثانيتين'],
+                '%d ثوان',
+                '%d ثانية',
+                '%d ثانية',
+            ],
+            m: [
+                'أقل من دقيقة',
+                'دقيقة واحدة',
+                ['دقيقتان', 'دقيقتين'],
+                '%d دقائق',
+                '%d دقيقة',
+                '%d دقيقة',
+            ],
+            h: [
+                'أقل من ساعة',
+                'ساعة واحدة',
+                ['ساعتان', 'ساعتين'],
+                '%d ساعات',
+                '%d ساعة',
+                '%d ساعة',
+            ],
+            d: [
+                'أقل من يوم',
+                'يوم واحد',
+                ['يومان', 'يومين'],
+                '%d أيام',
+                '%d يومًا',
+                '%d يوم',
+            ],
+            M: [
+                'أقل من شهر',
+                'شهر واحد',
+                ['شهران', 'شهرين'],
+                '%d أشهر',
+                '%d شهرا',
+                '%d شهر',
+            ],
+            y: [
+                'أقل من عام',
+                'عام واحد',
+                ['عامان', 'عامين'],
+                '%d أعوام',
+                '%d عامًا',
+                '%d عام',
+            ],
+        },
+        pluralize$2 = function (u) {
+            return function (number, withoutSuffix, string, isFuture) {
+                var f = pluralForm$2(number),
+                    str = plurals$2[u][pluralForm$2(number)];
+                if (f === 2) {
+                    str = str[withoutSuffix ? 0 : 1];
+                }
+                return str.replace(/%d/i, number);
+            };
+        },
+        months$2 = [
+            'يناير',
+            'فبراير',
+            'مارس',
+            'أبريل',
+            'مايو',
+            'يونيو',
+            'يوليو',
+            'أغسطس',
+            'سبتمبر',
+            'أكتوبر',
+            'نوفمبر',
+            'ديسمبر',
+        ];
+
+    moment.defineLocale('ar', {
+        months: months$2,
+        monthsShort: months$2,
+        weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),
+        weekdaysShort: 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),
+        weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'),
+        weekdaysParseExact: true,
+        longDateFormat: {
+            LT: 'HH:mm',
+            LTS: 'HH:mm:ss',
+            L: 'D/\u200FM/\u200FYYYY',
+            LL: 'D MMMM YYYY',
+            LLL: 'D MMMM YYYY HH:mm',
+            LLLL: 'dddd D MMMM YYYY HH:mm',
+        },
+        meridiemParse: /ص|م/,
+        isPM: function (input) {
+            return 'م' === input;
+        },
+        meridiem: function (hour, minute, isLower) {
+            if (hour < 12) {
+                return 'ص';
+            } else {
+                return 'م';
+            }
+        },
+        calendar: {
+            sameDay: '[اليوم عند الساعة] LT',
+            nextDay: '[غدًا عند الساعة] LT',
+            nextWeek: 'dddd [عند الساعة] LT',
+            lastDay: '[أمس عند الساعة] LT',
+            lastWeek: 'dddd [عند الساعة] LT',
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: 'بعد %s',
+            past: 'منذ %s',
+            s: pluralize$2('s'),
+            ss: pluralize$2('s'),
+            m: pluralize$2('m'),
+            mm: pluralize$2('m'),
+            h: pluralize$2('h'),
+            hh: pluralize$2('h'),
+            d: pluralize$2('d'),
+            dd: pluralize$2('d'),
+            M: pluralize$2('M'),
+            MM: pluralize$2('M'),
+            y: pluralize$2('y'),
+            yy: pluralize$2('y'),
+        },
+        preparse: function (string) {
+            return string
+                .replace(/[١٢٣٤٥٦٧٨٩٠]/g, function (match) {
+                    return numberMap$1[match];
+                })
+                .replace(/،/g, ',');
+        },
+        postformat: function (string) {
+            return string
+                .replace(/\d/g, function (match) {
+                    return symbolMap$2[match];
+                })
+                .replace(/,/g, '،');
+        },
+        week: {
+            dow: 6, // Saturday is the first day of the week.
+            doy: 12, // The week that contains Jan 12th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    var suffixes = {
+        1: '-inci',
+        5: '-inci',
+        8: '-inci',
+        70: '-inci',
+        80: '-inci',
+        2: '-nci',
+        7: '-nci',
+        20: '-nci',
+        50: '-nci',
+        3: '-üncü',
+        4: '-üncü',
+        100: '-üncü',
+        6: '-ncı',
+        9: '-uncu',
+        10: '-uncu',
+        30: '-uncu',
+        60: '-ıncı',
+        90: '-ıncı',
+    };
+
+    moment.defineLocale('az', {
+        months: 'yanvar_fevral_mart_aprel_may_iyun_iyul_avqust_sentyabr_oktyabr_noyabr_dekabr'.split(
+            '_'
+        ),
+        monthsShort: 'yan_fev_mar_apr_may_iyn_iyl_avq_sen_okt_noy_dek'.split('_'),
+        weekdays: 'Bazar_Bazar ertəsi_Çərşənbə axşamı_Çərşənbə_Cümə axşamı_Cümə_Şənbə'.split(
+            '_'
+        ),
+        weekdaysShort: 'Baz_BzE_ÇAx_Çər_CAx_Cüm_Şən'.split('_'),
+        weekdaysMin: 'Bz_BE_ÇA_Çə_CA_Cü_Şə'.split('_'),
+        weekdaysParseExact: true,
+        longDateFormat: {
+            LT: 'HH:mm',
+            LTS: 'HH:mm:ss',
+            L: 'DD.MM.YYYY',
+            LL: 'D MMMM YYYY',
+            LLL: 'D MMMM YYYY HH:mm',
+            LLLL: 'dddd, D MMMM YYYY HH:mm',
+        },
+        calendar: {
+            sameDay: '[bugün saat] LT',
+            nextDay: '[sabah saat] LT',
+            nextWeek: '[gələn həftə] dddd [saat] LT',
+            lastDay: '[dünən] LT',
+            lastWeek: '[keçən həftə] dddd [saat] LT',
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: '%s sonra',
+            past: '%s əvvəl',
+            s: 'bir neçə saniyə',
+            ss: '%d saniyə',
+            m: 'bir dəqiqə',
+            mm: '%d dəqiqə',
+            h: 'bir saat',
+            hh: '%d saat',
+            d: 'bir gün',
+            dd: '%d gün',
+            M: 'bir ay',
+            MM: '%d ay',
+            y: 'bir il',
+            yy: '%d il',
+        },
+        meridiemParse: /gecə|səhər|gündüz|axşam/,
+        isPM: function (input) {
+            return /^(gündüz|axşam)$/.test(input);
+        },
+        meridiem: function (hour, minute, isLower) {
+            if (hour < 4) {
+                return 'gecə';
+            } else if (hour < 12) {
+                return 'səhər';
+            } else if (hour < 17) {
+                return 'gündüz';
+            } else {
+                return 'axşam';
+            }
+        },
+        dayOfMonthOrdinalParse: /\d{1,2}-(ıncı|inci|nci|üncü|ncı|uncu)/,
+        ordinal: function (number) {
+            if (number === 0) {
+                // special case for zero
+                return number + '-ıncı';
+            }
+            var a = number % 10,
+                b = (number % 100) - a,
+                c = number >= 100 ? 100 : null;
+            return number + (suffixes[a] || suffixes[b] || suffixes[c]);
+        },
+        week: {
+            dow: 1, // Monday is the first day of the week.
+            doy: 7, // The week that contains Jan 7th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    function plural(word, num) {
+        var forms = word.split('_');
+        return num % 10 === 1 && num % 100 !== 11
+            ? forms[0]
+            : num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20)
+            ? forms[1]
+            : forms[2];
+    }
+    function relativeTimeWithPlural(number, withoutSuffix, key) {
+        var format = {
+            ss: withoutSuffix ? 'секунда_секунды_секунд' : 'секунду_секунды_секунд',
+            mm: withoutSuffix ? 'хвіліна_хвіліны_хвілін' : 'хвіліну_хвіліны_хвілін',
+            hh: withoutSuffix ? 'гадзіна_гадзіны_гадзін' : 'гадзіну_гадзіны_гадзін',
+            dd: 'дзень_дні_дзён',
+            MM: 'месяц_месяцы_месяцаў',
+            yy: 'год_гады_гадоў',
+        };
+        if (key === 'm') {
+            return withoutSuffix ? 'хвіліна' : 'хвіліну';
+        } else if (key === 'h') {
+            return withoutSuffix ? 'гадзіна' : 'гадзіну';
+        } else {
+            return number + ' ' + plural(format[key], +number);
+        }
+    }
+
+    moment.defineLocale('be', {
+        months: {
+            format: 'студзеня_лютага_сакавіка_красавіка_траўня_чэрвеня_ліпеня_жніўня_верасня_кастрычніка_лістапада_снежня'.split(
+                '_'
+            ),
+            standalone: 'студзень_люты_сакавік_красавік_травень_чэрвень_ліпень_жнівень_верасень_кастрычнік_лістапад_снежань'.split(
+                '_'
+            ),
+        },
+        monthsShort: 'студ_лют_сак_крас_трав_чэрв_ліп_жнів_вер_каст_ліст_снеж'.split(
+            '_'
+        ),
+        weekdays: {
+            format: 'нядзелю_панядзелак_аўторак_сераду_чацвер_пятніцу_суботу'.split(
+                '_'
+            ),
+            standalone: 'нядзеля_панядзелак_аўторак_серада_чацвер_пятніца_субота'.split(
+                '_'
+            ),
+            isFormat: /\[ ?[Ууў] ?(?:мінулую|наступную)? ?\] ?dddd/,
+        },
+        weekdaysShort: 'нд_пн_ат_ср_чц_пт_сб'.split('_'),
+        weekdaysMin: 'нд_пн_ат_ср_чц_пт_сб'.split('_'),
+        longDateFormat: {
+            LT: 'HH:mm',
+            LTS: 'HH:mm:ss',
+            L: 'DD.MM.YYYY',
+            LL: 'D MMMM YYYY г.',
+            LLL: 'D MMMM YYYY г., HH:mm',
+            LLLL: 'dddd, D MMMM YYYY г., HH:mm',
+        },
+        calendar: {
+            sameDay: '[Сёння ў] LT',
+            nextDay: '[Заўтра ў] LT',
+            lastDay: '[Учора ў] LT',
+            nextWeek: function () {
+                return '[У] dddd [ў] LT';
+            },
+            lastWeek: function () {
+                switch (this.day()) {
+                    case 0:
+                    case 3:
+                    case 5:
+                    case 6:
+                        return '[У мінулую] dddd [ў] LT';
+                    case 1:
+                    case 2:
+                    case 4:
+                        return '[У мінулы] dddd [ў] LT';
+                }
+            },
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: 'праз %s',
+            past: '%s таму',
+            s: 'некалькі секунд',
+            m: relativeTimeWithPlural,
+            mm: relativeTimeWithPlural,
+            h: relativeTimeWithPlural,
+            hh: relativeTimeWithPlural,
+            d: 'дзень',
+            dd: relativeTimeWithPlural,
+            M: 'месяц',
+            MM: relativeTimeWithPlural,
+            y: 'год',
+            yy: relativeTimeWithPlural,
+        },
+        meridiemParse: /ночы|раніцы|дня|вечара/,
+        isPM: function (input) {
+            return /^(дня|вечара)$/.test(input);
+        },
+        meridiem: function (hour, minute, isLower) {
+            if (hour < 4) {
+                return 'ночы';
+            } else if (hour < 12) {
+                return 'раніцы';
+            } else if (hour < 17) {
+                return 'дня';
+            } else {
+                return 'вечара';
+            }
+        },
+        dayOfMonthOrdinalParse: /\d{1,2}-(і|ы|га)/,
+        ordinal: function (number, period) {
+            switch (period) {
+                case 'M':
+                case 'd':
+                case 'DDD':
+                case 'w':
+                case 'W':
+                    return (number % 10 === 2 || number % 10 === 3) &&
+                        number % 100 !== 12 &&
+                        number % 100 !== 13
+                        ? number + '-і'
+                        : number + '-ы';
+                case 'D':
+                    return number + '-га';
+                default:
+                    return number;
+            }
+        },
+        week: {
+            dow: 1, // Monday is the first day of the week.
+            doy: 7, // The week that contains Jan 7th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    moment.defineLocale('bg', {
+        months: 'януари_февруари_март_април_май_юни_юли_август_септември_октомври_ноември_декември'.split(
+            '_'
+        ),
+        monthsShort: 'яну_фев_мар_апр_май_юни_юли_авг_сеп_окт_ное_дек'.split('_'),
+        weekdays: 'неделя_понеделник_вторник_сряда_четвъртък_петък_събота'.split(
+            '_'
+        ),
+        weekdaysShort: 'нед_пон_вто_сря_чет_пет_съб'.split('_'),
+        weekdaysMin: 'нд_пн_вт_ср_чт_пт_сб'.split('_'),
+        longDateFormat: {
+            LT: 'H:mm',
+            LTS: 'H:mm:ss',
+            L: 'D.MM.YYYY',
+            LL: 'D MMMM YYYY',
+            LLL: 'D MMMM YYYY H:mm',
+            LLLL: 'dddd, D MMMM YYYY H:mm',
+        },
+        calendar: {
+            sameDay: '[Днес в] LT',
+            nextDay: '[Утре в] LT',
+            nextWeek: 'dddd [в] LT',
+            lastDay: '[Вчера в] LT',
+            lastWeek: function () {
+                switch (this.day()) {
+                    case 0:
+                    case 3:
+                    case 6:
+                        return '[Миналата] dddd [в] LT';
+                    case 1:
+                    case 2:
+                    case 4:
+                    case 5:
+                        return '[Миналия] dddd [в] LT';
+                }
+            },
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: 'след %s',
+            past: 'преди %s',
+            s: 'няколко секунди',
+            ss: '%d секунди',
+            m: 'минута',
+            mm: '%d минути',
+            h: 'час',
+            hh: '%d часа',
+            d: 'ден',
+            dd: '%d дена',
+            M: 'месец',
+            MM: '%d месеца',
+            y: 'година',
+            yy: '%d години',
+        },
+        dayOfMonthOrdinalParse: /\d{1,2}-(ев|ен|ти|ви|ри|ми)/,
+        ordinal: function (number) {
+            var lastDigit = number % 10,
+                last2Digits = number % 100;
+            if (number === 0) {
+                return number + '-ев';
+            } else if (last2Digits === 0) {
+                return number + '-ен';
+            } else if (last2Digits > 10 && last2Digits < 20) {
+                return number + '-ти';
+            } else if (lastDigit === 1) {
+                return number + '-ви';
+            } else if (lastDigit === 2) {
+                return number + '-ри';
+            } else if (lastDigit === 7 || lastDigit === 8) {
+                return number + '-ми';
+            } else {
+                return number + '-ти';
+            }
+        },
+        week: {
+            dow: 1, // Monday is the first day of the week.
+            doy: 7, // The week that contains Jan 7th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    moment.defineLocale('bm', {
+        months: 'Zanwuyekalo_Fewuruyekalo_Marisikalo_Awirilikalo_Mɛkalo_Zuwɛnkalo_Zuluyekalo_Utikalo_Sɛtanburukalo_ɔkutɔburukalo_Nowanburukalo_Desanburukalo'.split(
+            '_'
+        ),
+        monthsShort: 'Zan_Few_Mar_Awi_Mɛ_Zuw_Zul_Uti_Sɛt_ɔku_Now_Des'.split('_'),
+        weekdays: 'Kari_Ntɛnɛn_Tarata_Araba_Alamisa_Juma_Sibiri'.split('_'),
+        weekdaysShort: 'Kar_Ntɛ_Tar_Ara_Ala_Jum_Sib'.split('_'),
+        weekdaysMin: 'Ka_Nt_Ta_Ar_Al_Ju_Si'.split('_'),
+        longDateFormat: {
+            LT: 'HH:mm',
+            LTS: 'HH:mm:ss',
+            L: 'DD/MM/YYYY',
+            LL: 'MMMM [tile] D [san] YYYY',
+            LLL: 'MMMM [tile] D [san] YYYY [lɛrɛ] HH:mm',
+            LLLL: 'dddd MMMM [tile] D [san] YYYY [lɛrɛ] HH:mm',
+        },
+        calendar: {
+            sameDay: '[Bi lɛrɛ] LT',
+            nextDay: '[Sini lɛrɛ] LT',
+            nextWeek: 'dddd [don lɛrɛ] LT',
+            lastDay: '[Kunu lɛrɛ] LT',
+            lastWeek: 'dddd [tɛmɛnen lɛrɛ] LT',
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: '%s kɔnɔ',
+            past: 'a bɛ %s bɔ',
+            s: 'sanga dama dama',
+            ss: 'sekondi %d',
+            m: 'miniti kelen',
+            mm: 'miniti %d',
+            h: 'lɛrɛ kelen',
+            hh: 'lɛrɛ %d',
+            d: 'tile kelen',
+            dd: 'tile %d',
+            M: 'kalo kelen',
+            MM: 'kalo %d',
+            y: 'san kelen',
+            yy: 'san %d',
+        },
+        week: {
+            dow: 1, // Monday is the first day of the week.
+            doy: 4, // The week that contains Jan 4th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    var symbolMap$3 = {
+            '1': '১',
+            '2': '২',
+            '3': '৩',
+            '4': '৪',
+            '5': '৫',
+            '6': '৬',
+            '7': '৭',
+            '8': '৮',
+            '9': '৯',
+            '0': '০',
+        },
+        numberMap$2 = {
+            '১': '1',
+            '২': '2',
+            '৩': '3',
+            '৪': '4',
+            '৫': '5',
+            '৬': '6',
+            '৭': '7',
+            '৮': '8',
+            '৯': '9',
+            '০': '0',
+        };
+
+    moment.defineLocale('bn', {
+        months: 'জানুয়ারি_ফেব্রুয়ারি_মার্চ_এপ্রিল_মে_জুন_জুলাই_আগস্ট_সেপ্টেম্বর_অক্টোবর_নভেম্বর_ডিসেম্বর'.split(
+            '_'
+        ),
+        monthsShort: 'জানু_ফেব্রু_মার্চ_এপ্রিল_মে_জুন_জুলাই_আগস্ট_সেপ্ট_অক্টো_নভে_ডিসে'.split(
+            '_'
+        ),
+        weekdays: 'রবিবার_সোমবার_মঙ্গলবার_বুধবার_বৃহস্পতিবার_শুক্রবার_শনিবার'.split(
+            '_'
+        ),
+        weekdaysShort: 'রবি_সোম_মঙ্গল_বুধ_বৃহস্পতি_শুক্র_শনি'.split('_'),
+        weekdaysMin: 'রবি_সোম_মঙ্গল_বুধ_বৃহ_শুক্র_শনি'.split('_'),
+        longDateFormat: {
+            LT: 'A h:mm সময়',
+            LTS: 'A h:mm:ss সময়',
+            L: 'DD/MM/YYYY',
+            LL: 'D MMMM YYYY',
+            LLL: 'D MMMM YYYY, A h:mm সময়',
+            LLLL: 'dddd, D MMMM YYYY, A h:mm সময়',
+        },
+        calendar: {
+            sameDay: '[আজ] LT',
+            nextDay: '[আগামীকাল] LT',
+            nextWeek: 'dddd, LT',
+            lastDay: '[গতকাল] LT',
+            lastWeek: '[গত] dddd, LT',
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: '%s পরে',
+            past: '%s আগে',
+            s: 'কয়েক সেকেন্ড',
+            ss: '%d সেকেন্ড',
+            m: 'এক মিনিট',
+            mm: '%d মিনিট',
+            h: 'এক ঘন্টা',
+            hh: '%d ঘন্টা',
+            d: 'এক দিন',
+            dd: '%d দিন',
+            M: 'এক মাস',
+            MM: '%d মাস',
+            y: 'এক বছর',
+            yy: '%d বছর',
+        },
+        preparse: function (string) {
+            return string.replace(/[১২৩৪৫৬৭৮৯০]/g, function (match) {
+                return numberMap$2[match];
+            });
+        },
+        postformat: function (string) {
+            return string.replace(/\d/g, function (match) {
+                return symbolMap$3[match];
+            });
+        },
+        meridiemParse: /রাত|সকাল|দুপুর|বিকাল|রাত/,
+        meridiemHour: function (hour, meridiem) {
+            if (hour === 12) {
+                hour = 0;
+            }
+            if (
+                (meridiem === 'রাত' && hour >= 4) ||
+                (meridiem === 'দুপুর' && hour < 5) ||
+                meridiem === 'বিকাল'
+            ) {
+                return hour + 12;
+            } else {
+                return hour;
+            }
+        },
+        meridiem: function (hour, minute, isLower) {
+            if (hour < 4) {
+                return 'রাত';
+            } else if (hour < 10) {
+                return 'সকাল';
+            } else if (hour < 17) {
+                return 'দুপুর';
+            } else if (hour < 20) {
+                return 'বিকাল';
+            } else {
+                return 'রাত';
+            }
+        },
+        week: {
+            dow: 0, // Sunday is the first day of the week.
+            doy: 6, // The week that contains Jan 6th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    var symbolMap$4 = {
+            '1': '༡',
+            '2': '༢',
+            '3': '༣',
+            '4': '༤',
+            '5': '༥',
+            '6': '༦',
+            '7': '༧',
+            '8': '༨',
+            '9': '༩',
+            '0': '༠',
+        },
+        numberMap$3 = {
+            '༡': '1',
+            '༢': '2',
+            '༣': '3',
+            '༤': '4',
+            '༥': '5',
+            '༦': '6',
+            '༧': '7',
+            '༨': '8',
+            '༩': '9',
+            '༠': '0',
+        };
+
+    moment.defineLocale('bo', {
+        months: 'ཟླ་བ་དང་པོ_ཟླ་བ་གཉིས་པ_ཟླ་བ་གསུམ་པ_ཟླ་བ་བཞི་པ_ཟླ་བ་ལྔ་པ_ཟླ་བ་དྲུག་པ_ཟླ་བ་བདུན་པ_ཟླ་བ་བརྒྱད་པ_ཟླ་བ་དགུ་པ_ཟླ་བ་བཅུ་པ_ཟླ་བ་བཅུ་གཅིག་པ_ཟླ་བ་བཅུ་གཉིས་པ'.split(
+            '_'
+        ),
+        monthsShort: 'ཟླ་1_ཟླ་2_ཟླ་3_ཟླ་4_ཟླ་5_ཟླ་6_ཟླ་7_ཟླ་8_ཟླ་9_ཟླ་10_ཟླ་11_ཟླ་12'.split(
+            '_'
+        ),
+        monthsShortRegex: /^(ཟླ་\d{1,2})/,
+        monthsParseExact: true,
+        weekdays: 'གཟའ་ཉི་མ་_གཟའ་ཟླ་བ་_གཟའ་མིག་དམར་_གཟའ་ལྷག་པ་_གཟའ་ཕུར་བུ_གཟའ་པ་སངས་_གཟའ་སྤེན་པ་'.split(
+            '_'
+        ),
+        weekdaysShort: 'ཉི་མ་_ཟླ་བ་_མིག་དམར་_ལྷག་པ་_ཕུར་བུ_པ་སངས་_སྤེན་པ་'.split(
+            '_'
+        ),
+        weekdaysMin: 'ཉི_ཟླ_མིག_ལྷག_ཕུར_སངས_སྤེན'.split('_'),
+        longDateFormat: {
+            LT: 'A h:mm',
+            LTS: 'A h:mm:ss',
+            L: 'DD/MM/YYYY',
+            LL: 'D MMMM YYYY',
+            LLL: 'D MMMM YYYY, A h:mm',
+            LLLL: 'dddd, D MMMM YYYY, A h:mm',
+        },
+        calendar: {
+            sameDay: '[དི་རིང] LT',
+            nextDay: '[སང་ཉིན] LT',
+            nextWeek: '[བདུན་ཕྲག་རྗེས་མ], LT',
+            lastDay: '[ཁ་སང] LT',
+            lastWeek: '[བདུན་ཕྲག་མཐའ་མ] dddd, LT',
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: '%s ལ་',
+            past: '%s སྔན་ལ',
+            s: 'ལམ་སང',
+            ss: '%d སྐར་ཆ།',
+            m: 'སྐར་མ་གཅིག',
+            mm: '%d སྐར་མ',
+            h: 'ཆུ་ཚོད་གཅིག',
+            hh: '%d ཆུ་ཚོད',
+            d: 'ཉིན་གཅིག',
+            dd: '%d ཉིན་',
+            M: 'ཟླ་བ་གཅིག',
+            MM: '%d ཟླ་བ',
+            y: 'ལོ་གཅིག',
+            yy: '%d ལོ',
+        },
+        preparse: function (string) {
+            return string.replace(/[༡༢༣༤༥༦༧༨༩༠]/g, function (match) {
+                return numberMap$3[match];
+            });
+        },
+        postformat: function (string) {
+            return string.replace(/\d/g, function (match) {
+                return symbolMap$4[match];
+            });
+        },
+        meridiemParse: /མཚན་མོ|ཞོགས་ཀས|ཉིན་གུང|དགོང་དག|མཚན་མོ/,
+        meridiemHour: function (hour, meridiem) {
+            if (hour === 12) {
+                hour = 0;
+            }
+            if (
+                (meridiem === 'མཚན་མོ' && hour >= 4) ||
+                (meridiem === 'ཉིན་གུང' && hour < 5) ||
+                meridiem === 'དགོང་དག'
+            ) {
+                return hour + 12;
+            } else {
+                return hour;
+            }
+        },
+        meridiem: function (hour, minute, isLower) {
+            if (hour < 4) {
+                return 'མཚན་མོ';
+            } else if (hour < 10) {
+                return 'ཞོགས་ཀས';
+            } else if (hour < 17) {
+                return 'ཉིན་གུང';
+            } else if (hour < 20) {
+                return 'དགོང་དག';
+            } else {
+                return 'མཚན་མོ';
+            }
+        },
+        week: {
+            dow: 0, // Sunday is the first day of the week.
+            doy: 6, // The week that contains Jan 6th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    function relativeTimeWithMutation(number, withoutSuffix, key) {
+        var format = {
+            mm: 'munutenn',
+            MM: 'miz',
+            dd: 'devezh',
+        };
+        return number + ' ' + mutation(format[key], number);
+    }
+    function specialMutationForYears(number) {
+        switch (lastNumber(number)) {
+            case 1:
+            case 3:
+            case 4:
+            case 5:
+            case 9:
+                return number + ' bloaz';
+            default:
+                return number + ' vloaz';
+        }
+    }
+    function lastNumber(number) {
+        if (number > 9) {
+            return lastNumber(number % 10);
+        }
+        return number;
+    }
+    function mutation(text, number) {
+        if (number === 2) {
+            return softMutation(text);
+        }
+        return text;
+    }
+    function softMutation(text) {
+        var mutationTable = {
+            m: 'v',
+            b: 'v',
+            d: 'z',
+        };
+        if (mutationTable[text.charAt(0)] === undefined) {
+            return text;
+        }
+        return mutationTable[text.charAt(0)] + text.substring(1);
+    }
+
+    var monthsParse = [
+            /^gen/i,
+            /^c[ʼ\']hwe/i,
+            /^meu/i,
+            /^ebr/i,
+            /^mae/i,
+            /^(mez|eve)/i,
+            /^gou/i,
+            /^eos/i,
+            /^gwe/i,
+            /^her/i,
+            /^du/i,
+            /^ker/i,
+        ],
+        monthsRegex = /^(genver|c[ʼ\']hwevrer|meurzh|ebrel|mae|mezheven|gouere|eost|gwengolo|here|du|kerzu|gen|c[ʼ\']hwe|meu|ebr|mae|eve|gou|eos|gwe|her|du|ker)/i,
+        monthsStrictRegex = /^(genver|c[ʼ\']hwevrer|meurzh|ebrel|mae|mezheven|gouere|eost|gwengolo|here|du|kerzu)/i,
+        monthsShortStrictRegex = /^(gen|c[ʼ\']hwe|meu|ebr|mae|eve|gou|eos|gwe|her|du|ker)/i,
+        fullWeekdaysParse = [
+            /^sul/i,
+            /^lun/i,
+            /^meurzh/i,
+            /^merc[ʼ\']her/i,
+            /^yaou/i,
+            /^gwener/i,
+            /^sadorn/i,
+        ],
+        shortWeekdaysParse = [
+            /^Sul/i,
+            /^Lun/i,
+            /^Meu/i,
+            /^Mer/i,
+            /^Yao/i,
+            /^Gwe/i,
+            /^Sad/i,
+        ],
+        minWeekdaysParse = [
+            /^Su/i,
+            /^Lu/i,
+            /^Me([^r]|$)/i,
+            /^Mer/i,
+            /^Ya/i,
+            /^Gw/i,
+            /^Sa/i,
+        ];
+
+    moment.defineLocale('br', {
+        months: 'Genver_Cʼhwevrer_Meurzh_Ebrel_Mae_Mezheven_Gouere_Eost_Gwengolo_Here_Du_Kerzu'.split(
+            '_'
+        ),
+        monthsShort: 'Gen_Cʼhwe_Meu_Ebr_Mae_Eve_Gou_Eos_Gwe_Her_Du_Ker'.split('_'),
+        weekdays: 'Sul_Lun_Meurzh_Mercʼher_Yaou_Gwener_Sadorn'.split('_'),
+        weekdaysShort: 'Sul_Lun_Meu_Mer_Yao_Gwe_Sad'.split('_'),
+        weekdaysMin: 'Su_Lu_Me_Mer_Ya_Gw_Sa'.split('_'),
+        weekdaysParse: minWeekdaysParse,
+        fullWeekdaysParse: fullWeekdaysParse,
+        shortWeekdaysParse: shortWeekdaysParse,
+        minWeekdaysParse: minWeekdaysParse,
+
+        monthsRegex: monthsRegex,
+        monthsShortRegex: monthsRegex,
+        monthsStrictRegex: monthsStrictRegex,
+        monthsShortStrictRegex: monthsShortStrictRegex,
+        monthsParse: monthsParse,
+        longMonthsParse: monthsParse,
+        shortMonthsParse: monthsParse,
+
+        longDateFormat: {
+            LT: 'HH:mm',
+            LTS: 'HH:mm:ss',
+            L: 'DD/MM/YYYY',
+            LL: 'D [a viz] MMMM YYYY',
+            LLL: 'D [a viz] MMMM YYYY HH:mm',
+            LLLL: 'dddd, D [a viz] MMMM YYYY HH:mm',
+        },
+        calendar: {
+            sameDay: '[Hiziv da] LT',
+            nextDay: '[Warcʼhoazh da] LT',
+            nextWeek: 'dddd [da] LT',
+            lastDay: '[Decʼh da] LT',
+            lastWeek: 'dddd [paset da] LT',
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: 'a-benn %s',
+            past: '%s ʼzo',
+            s: 'un nebeud segondennoù',
+            ss: '%d eilenn',
+            m: 'ur vunutenn',
+            mm: relativeTimeWithMutation,
+            h: 'un eur',
+            hh: '%d eur',
+            d: 'un devezh',
+            dd: relativeTimeWithMutation,
+            M: 'ur miz',
+            MM: relativeTimeWithMutation,
+            y: 'ur bloaz',
+            yy: specialMutationForYears,
+        },
+        dayOfMonthOrdinalParse: /\d{1,2}(añ|vet)/,
+        ordinal: function (number) {
+            var output = number === 1 ? 'añ' : 'vet';
+            return number + output;
+        },
+        week: {
+            dow: 1, // Monday is the first day of the week.
+            doy: 4, // The week that contains Jan 4th is the first week of the year.
+        },
+        meridiemParse: /a.m.|g.m./, // goude merenn | a-raok merenn
+        isPM: function (token) {
+            return token === 'g.m.';
+        },
+        meridiem: function (hour, minute, isLower) {
+            return hour < 12 ? 'a.m.' : 'g.m.';
+        },
+    });
+
+    //! moment.js locale configuration
+
+    function translate(number, withoutSuffix, key) {
+        var result = number + ' ';
+        switch (key) {
+            case 'ss':
+                if (number === 1) {
+                    result += 'sekunda';
+                } else if (number === 2 || number === 3 || number === 4) {
+                    result += 'sekunde';
+                } else {
+                    result += 'sekundi';
+                }
+                return result;
+            case 'm':
+                return withoutSuffix ? 'jedna minuta' : 'jedne minute';
+            case 'mm':
+                if (number === 1) {
+                    result += 'minuta';
+                } else if (number === 2 || number === 3 || number === 4) {
+                    result += 'minute';
+                } else {
+                    result += 'minuta';
+                }
+                return result;
+            case 'h':
+                return withoutSuffix ? 'jedan sat' : 'jednog sata';
+            case 'hh':
+                if (number === 1) {
+                    result += 'sat';
+                } else if (number === 2 || number === 3 || number === 4) {
+                    result += 'sata';
+                } else {
+                    result += 'sati';
+                }
+                return result;
+            case 'dd':
+                if (number === 1) {
+                    result += 'dan';
+                } else {
+                    result += 'dana';
+                }
+                return result;
+            case 'MM':
+                if (number === 1) {
+                    result += 'mjesec';
+                } else if (number === 2 || number === 3 || number === 4) {
+                    result += 'mjeseca';
+                } else {
+                    result += 'mjeseci';
+                }
+                return result;
+            case 'yy':
+                if (number === 1) {
+                    result += 'godina';
+                } else if (number === 2 || number === 3 || number === 4) {
+                    result += 'godine';
+                } else {
+                    result += 'godina';
+                }
+                return result;
+        }
+    }
+
+    moment.defineLocale('bs', {
+        months: 'januar_februar_mart_april_maj_juni_juli_august_septembar_oktobar_novembar_decembar'.split(
+            '_'
+        ),
+        monthsShort: 'jan._feb._mar._apr._maj._jun._jul._aug._sep._okt._nov._dec.'.split(
+            '_'
+        ),
+        monthsParseExact: true,
+        weekdays: 'nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota'.split(
+            '_'
+        ),
+        weekdaysShort: 'ned._pon._uto._sri._čet._pet._sub.'.split('_'),
+        weekdaysMin: 'ne_po_ut_sr_če_pe_su'.split('_'),
+        weekdaysParseExact: true,
+        longDateFormat: {
+            LT: 'H:mm',
+            LTS: 'H:mm:ss',
+            L: 'DD.MM.YYYY',
+            LL: 'D. MMMM YYYY',
+            LLL: 'D. MMMM YYYY H:mm',
+            LLLL: 'dddd, D. MMMM YYYY H:mm',
+        },
+        calendar: {
+            sameDay: '[danas u] LT',
+            nextDay: '[sutra u] LT',
+            nextWeek: function () {
+                switch (this.day()) {
+                    case 0:
+                        return '[u] [nedjelju] [u] LT';
+                    case 3:
+                        return '[u] [srijedu] [u] LT';
+                    case 6:
+                        return '[u] [subotu] [u] LT';
+                    case 1:
+                    case 2:
+                    case 4:
+                    case 5:
+                        return '[u] dddd [u] LT';
+                }
+            },
+            lastDay: '[jučer u] LT',
+            lastWeek: function () {
+                switch (this.day()) {
+                    case 0:
+                    case 3:
+                        return '[prošlu] dddd [u] LT';
+                    case 6:
+                        return '[prošle] [subote] [u] LT';
+                    case 1:
+                    case 2:
+                    case 4:
+                    case 5:
+                        return '[prošli] dddd [u] LT';
+                }
+            },
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: 'za %s',
+            past: 'prije %s',
+            s: 'par sekundi',
+            ss: translate,
+            m: translate,
+            mm: translate,
+            h: translate,
+            hh: translate,
+            d: 'dan',
+            dd: translate,
+            M: 'mjesec',
+            MM: translate,
+            y: 'godinu',
+            yy: translate,
+        },
+        dayOfMonthOrdinalParse: /\d{1,2}\./,
+        ordinal: '%d.',
+        week: {
+            dow: 1, // Monday is the first day of the week.
+            doy: 7, // The week that contains Jan 7th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    moment.defineLocale('ca', {
+        months: {
+            standalone: 'gener_febrer_març_abril_maig_juny_juliol_agost_setembre_octubre_novembre_desembre'.split(
+                '_'
+            ),
+            format: "de gener_de febrer_de març_d'abril_de maig_de juny_de juliol_d'agost_de setembre_d'octubre_de novembre_de desembre".split(
+                '_'
+            ),
+            isFormat: /D[oD]?(\s)+MMMM/,
+        },
+        monthsShort: 'gen._febr._març_abr._maig_juny_jul._ag._set._oct._nov._des.'.split(
+            '_'
+        ),
+        monthsParseExact: true,
+        weekdays: 'diumenge_dilluns_dimarts_dimecres_dijous_divendres_dissabte'.split(
+            '_'
+        ),
+        weekdaysShort: 'dg._dl._dt._dc._dj._dv._ds.'.split('_'),
+        weekdaysMin: 'dg_dl_dt_dc_dj_dv_ds'.split('_'),
+        weekdaysParseExact: true,
+        longDateFormat: {
+            LT: 'H:mm',
+            LTS: 'H:mm:ss',
+            L: 'DD/MM/YYYY',
+            LL: 'D MMMM [de] YYYY',
+            ll: 'D MMM YYYY',
+            LLL: 'D MMMM [de] YYYY [a les] H:mm',
+            lll: 'D MMM YYYY, H:mm',
+            LLLL: 'dddd D MMMM [de] YYYY [a les] H:mm',
+            llll: 'ddd D MMM YYYY, H:mm',
+        },
+        calendar: {
+            sameDay: function () {
+                return '[avui a ' + (this.hours() !== 1 ? 'les' : 'la') + '] LT';
+            },
+            nextDay: function () {
+                return '[demà a ' + (this.hours() !== 1 ? 'les' : 'la') + '] LT';
+            },
+            nextWeek: function () {
+                return 'dddd [a ' + (this.hours() !== 1 ? 'les' : 'la') + '] LT';
+            },
+            lastDay: function () {
+                return '[ahir a ' + (this.hours() !== 1 ? 'les' : 'la') + '] LT';
+            },
+            lastWeek: function () {
+                return (
+                    '[el] dddd [passat a ' +
+                    (this.hours() !== 1 ? 'les' : 'la') +
+                    '] LT'
+                );
+            },
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: "d'aquí %s",
+            past: 'fa %s',
+            s: 'uns segons',
+            ss: '%d segons',
+            m: 'un minut',
+            mm: '%d minuts',
+            h: 'una hora',
+            hh: '%d hores',
+            d: 'un dia',
+            dd: '%d dies',
+            M: 'un mes',
+            MM: '%d mesos',
+            y: 'un any',
+            yy: '%d anys',
+        },
+        dayOfMonthOrdinalParse: /\d{1,2}(r|n|t|è|a)/,
+        ordinal: function (number, period) {
+            var output =
+                number === 1
+                    ? 'r'
+                    : number === 2
+                    ? 'n'
+                    : number === 3
+                    ? 'r'
+                    : number === 4
+                    ? 't'
+                    : 'è';
+            if (period === 'w' || period === 'W') {
+                output = 'a';
+            }
+            return number + output;
+        },
+        week: {
+            dow: 1, // Monday is the first day of the week.
+            doy: 4, // The week that contains Jan 4th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    var months$3 = 'leden_únor_březen_duben_květen_červen_červenec_srpen_září_říjen_listopad_prosinec'.split(
+            '_'
+        ),
+        monthsShort = 'led_úno_bře_dub_kvě_čvn_čvc_srp_zář_říj_lis_pro'.split('_'),
+        monthsParse$1 = [
+            /^led/i,
+            /^úno/i,
+            /^bře/i,
+            /^dub/i,
+            /^kvě/i,
+            /^(čvn|červen$|června)/i,
+            /^(čvc|červenec|července)/i,
+            /^srp/i,
+            /^zář/i,
+            /^říj/i,
+            /^lis/i,
+            /^pro/i,
+        ],
+        // NOTE: 'červen' is substring of 'červenec'; therefore 'červenec' must precede 'červen' in the regex to be fully matched.
+        // Otherwise parser matches '1. červenec' as '1. červen' + 'ec'.
+        monthsRegex$1 = /^(leden|únor|březen|duben|květen|červenec|července|červen|června|srpen|září|říjen|listopad|prosinec|led|úno|bře|dub|kvě|čvn|čvc|srp|zář|říj|lis|pro)/i;
+
+    function plural$1(n) {
+        return n > 1 && n < 5 && ~~(n / 10) !== 1;
+    }
+    function translate$1(number, withoutSuffix, key, isFuture) {
+        var result = number + ' ';
+        switch (key) {
+            case 's': // a few seconds / in a few seconds / a few seconds ago
+                return withoutSuffix || isFuture ? 'pár sekund' : 'pár sekundami';
+            case 'ss': // 9 seconds / in 9 seconds / 9 seconds ago
+                if (withoutSuffix || isFuture) {
+                    return result + (plural$1(number) ? 'sekundy' : 'sekund');
+                } else {
+                    return result + 'sekundami';
+                }
+            case 'm': // a minute / in a minute / a minute ago
+                return withoutSuffix ? 'minuta' : isFuture ? 'minutu' : 'minutou';
+            case 'mm': // 9 minutes / in 9 minutes / 9 minutes ago
+                if (withoutSuffix || isFuture) {
+                    return result + (plural$1(number) ? 'minuty' : 'minut');
+                } else {
+                    return result + 'minutami';
+                }
+            case 'h': // an hour / in an hour / an hour ago
+                return withoutSuffix ? 'hodina' : isFuture ? 'hodinu' : 'hodinou';
+            case 'hh': // 9 hours / in 9 hours / 9 hours ago
+                if (withoutSuffix || isFuture) {
+                    return result + (plural$1(number) ? 'hodiny' : 'hodin');
+                } else {
+                    return result + 'hodinami';
+                }
+            case 'd': // a day / in a day / a day ago
+                return withoutSuffix || isFuture ? 'den' : 'dnem';
+            case 'dd': // 9 days / in 9 days / 9 days ago
+                if (withoutSuffix || isFuture) {
+                    return result + (plural$1(number) ? 'dny' : 'dní');
+                } else {
+                    return result + 'dny';
+                }
+            case 'M': // a month / in a month / a month ago
+                return withoutSuffix || isFuture ? 'měsíc' : 'měsícem';
+            case 'MM': // 9 months / in 9 months / 9 months ago
+                if (withoutSuffix || isFuture) {
+                    return result + (plural$1(number) ? 'měsíce' : 'měsíců');
+                } else {
+                    return result + 'měsíci';
+                }
+            case 'y': // a year / in a year / a year ago
+                return withoutSuffix || isFuture ? 'rok' : 'rokem';
+            case 'yy': // 9 years / in 9 years / 9 years ago
+                if (withoutSuffix || isFuture) {
+                    return result + (plural$1(number) ? 'roky' : 'let');
+                } else {
+                    return result + 'lety';
+                }
+        }
+    }
+
+    moment.defineLocale('cs', {
+        months: months$3,
+        monthsShort: monthsShort,
+        monthsRegex: monthsRegex$1,
+        monthsShortRegex: monthsRegex$1,
+        // NOTE: 'červen' is substring of 'červenec'; therefore 'červenec' must precede 'červen' in the regex to be fully matched.
+        // Otherwise parser matches '1. červenec' as '1. červen' + 'ec'.
+        monthsStrictRegex: /^(leden|ledna|února|únor|březen|března|duben|dubna|květen|května|červenec|července|červen|června|srpen|srpna|září|říjen|října|listopadu|listopad|prosinec|prosince)/i,
+        monthsShortStrictRegex: /^(led|úno|bře|dub|kvě|čvn|čvc|srp|zář|říj|lis|pro)/i,
+        monthsParse: monthsParse$1,
+        longMonthsParse: monthsParse$1,
+        shortMonthsParse: monthsParse$1,
+        weekdays: 'neděle_pondělí_úterý_středa_čtvrtek_pátek_sobota'.split('_'),
+        weekdaysShort: 'ne_po_út_st_čt_pá_so'.split('_'),
+        weekdaysMin: 'ne_po_út_st_čt_pá_so'.split('_'),
+        longDateFormat: {
+            LT: 'H:mm',
+            LTS: 'H:mm:ss',
+            L: 'DD.MM.YYYY',
+            LL: 'D. MMMM YYYY',
+            LLL: 'D. MMMM YYYY H:mm',
+            LLLL: 'dddd D. MMMM YYYY H:mm',
+            l: 'D. M. YYYY',
+        },
+        calendar: {
+            sameDay: '[dnes v] LT',
+            nextDay: '[zítra v] LT',
+            nextWeek: function () {
+                switch (this.day()) {
+                    case 0:
+                        return '[v neděli v] LT';
+                    case 1:
+                    case 2:
+                        return '[v] dddd [v] LT';
+                    case 3:
+                        return '[ve středu v] LT';
+                    case 4:
+                        return '[ve čtvrtek v] LT';
+                    case 5:
+                        return '[v pátek v] LT';
+                    case 6:
+                        return '[v sobotu v] LT';
+                }
+            },
+            lastDay: '[včera v] LT',
+            lastWeek: function () {
+                switch (this.day()) {
+                    case 0:
+                        return '[minulou neděli v] LT';
+                    case 1:
+                    case 2:
+                        return '[minulé] dddd [v] LT';
+                    case 3:
+                        return '[minulou středu v] LT';
+                    case 4:
+                    case 5:
+                        return '[minulý] dddd [v] LT';
+                    case 6:
+                        return '[minulou sobotu v] LT';
+                }
+            },
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: 'za %s',
+            past: 'před %s',
+            s: translate$1,
+            ss: translate$1,
+            m: translate$1,
+            mm: translate$1,
+            h: translate$1,
+            hh: translate$1,
+            d: translate$1,
+            dd: translate$1,
+            M: translate$1,
+            MM: translate$1,
+            y: translate$1,
+            yy: translate$1,
+        },
+        dayOfMonthOrdinalParse: /\d{1,2}\./,
+        ordinal: '%d.',
+        week: {
+            dow: 1, // Monday is the first day of the week.
+            doy: 4, // The week that contains Jan 4th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    moment.defineLocale('cv', {
+        months: 'кӑрлач_нарӑс_пуш_ака_май_ҫӗртме_утӑ_ҫурла_авӑн_юпа_чӳк_раштав'.split(
+            '_'
+        ),
+        monthsShort: 'кӑр_нар_пуш_ака_май_ҫӗр_утӑ_ҫур_авн_юпа_чӳк_раш'.split('_'),
+        weekdays: 'вырсарникун_тунтикун_ытларикун_юнкун_кӗҫнерникун_эрнекун_шӑматкун'.split(
+            '_'
+        ),
+        weekdaysShort: 'выр_тун_ытл_юн_кӗҫ_эрн_шӑм'.split('_'),
+        weekdaysMin: 'вр_тн_ыт_юн_кҫ_эр_шм'.split('_'),
+        longDateFormat: {
+            LT: 'HH:mm',
+            LTS: 'HH:mm:ss',
+            L: 'DD-MM-YYYY',
+            LL: 'YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ]',
+            LLL: 'YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ], HH:mm',
+            LLLL: 'dddd, YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ], HH:mm',
+        },
+        calendar: {
+            sameDay: '[Паян] LT [сехетре]',
+            nextDay: '[Ыран] LT [сехетре]',
+            lastDay: '[Ӗнер] LT [сехетре]',
+            nextWeek: '[Ҫитес] dddd LT [сехетре]',
+            lastWeek: '[Иртнӗ] dddd LT [сехетре]',
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: function (output) {
+                var affix = /сехет$/i.exec(output)
+                    ? 'рен'
+                    : /ҫул$/i.exec(output)
+                    ? 'тан'
+                    : 'ран';
+                return output + affix;
+            },
+            past: '%s каялла',
+            s: 'пӗр-ик ҫеккунт',
+            ss: '%d ҫеккунт',
+            m: 'пӗр минут',
+            mm: '%d минут',
+            h: 'пӗр сехет',
+            hh: '%d сехет',
+            d: 'пӗр кун',
+            dd: '%d кун',
+            M: 'пӗр уйӑх',
+            MM: '%d уйӑх',
+            y: 'пӗр ҫул',
+            yy: '%d ҫул',
+        },
+        dayOfMonthOrdinalParse: /\d{1,2}-мӗш/,
+        ordinal: '%d-мӗш',
+        week: {
+            dow: 1, // Monday is the first day of the week.
+            doy: 7, // The week that contains Jan 7th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    moment.defineLocale('cy', {
+        months: 'Ionawr_Chwefror_Mawrth_Ebrill_Mai_Mehefin_Gorffennaf_Awst_Medi_Hydref_Tachwedd_Rhagfyr'.split(
+            '_'
+        ),
+        monthsShort: 'Ion_Chwe_Maw_Ebr_Mai_Meh_Gor_Aws_Med_Hyd_Tach_Rhag'.split(
+            '_'
+        ),
+        weekdays: 'Dydd Sul_Dydd Llun_Dydd Mawrth_Dydd Mercher_Dydd Iau_Dydd Gwener_Dydd Sadwrn'.split(
+            '_'
+        ),
+        weekdaysShort: 'Sul_Llun_Maw_Mer_Iau_Gwe_Sad'.split('_'),
+        weekdaysMin: 'Su_Ll_Ma_Me_Ia_Gw_Sa'.split('_'),
+        weekdaysParseExact: true,
+        // time formats are the same as en-gb
+        longDateFormat: {
+            LT: 'HH:mm',
+            LTS: 'HH:mm:ss',
+            L: 'DD/MM/YYYY',
+            LL: 'D MMMM YYYY',
+            LLL: 'D MMMM YYYY HH:mm',
+            LLLL: 'dddd, D MMMM YYYY HH:mm',
+        },
+        calendar: {
+            sameDay: '[Heddiw am] LT',
+            nextDay: '[Yfory am] LT',
+            nextWeek: 'dddd [am] LT',
+            lastDay: '[Ddoe am] LT',
+            lastWeek: 'dddd [diwethaf am] LT',
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: 'mewn %s',
+            past: '%s yn ôl',
+            s: 'ychydig eiliadau',
+            ss: '%d eiliad',
+            m: 'munud',
+            mm: '%d munud',
+            h: 'awr',
+            hh: '%d awr',
+            d: 'diwrnod',
+            dd: '%d diwrnod',
+            M: 'mis',
+            MM: '%d mis',
+            y: 'blwyddyn',
+            yy: '%d flynedd',
+        },
+        dayOfMonthOrdinalParse: /\d{1,2}(fed|ain|af|il|ydd|ed|eg)/,
+        // traditional ordinal numbers above 31 are not commonly used in colloquial Welsh
+        ordinal: function (number) {
+            var b = number,
+                output = '',
+                lookup = [
+                    '',
+                    'af',
+                    'il',
+                    'ydd',
+                    'ydd',
+                    'ed',
+                    'ed',
+                    'ed',
+                    'fed',
+                    'fed',
+                    'fed', // 1af to 10fed
+                    'eg',
+                    'fed',
+                    'eg',
+                    'eg',
+                    'fed',
+                    'eg',
+                    'eg',
+                    'fed',
+                    'eg',
+                    'fed', // 11eg to 20fed
+                ];
+            if (b > 20) {
+                if (b === 40 || b === 50 || b === 60 || b === 80 || b === 100) {
+                    output = 'fed'; // not 30ain, 70ain or 90ain
+                } else {
+                    output = 'ain';
+                }
+            } else if (b > 0) {
+                output = lookup[b];
+            }
+            return number + output;
+        },
+        week: {
+            dow: 1, // Monday is the first day of the week.
+            doy: 4, // The week that contains Jan 4th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    moment.defineLocale('da', {
+        months: 'januar_februar_marts_april_maj_juni_juli_august_september_oktober_november_december'.split(
+            '_'
+        ),
+        monthsShort: 'jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec'.split('_'),
+        weekdays: 'søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag'.split('_'),
+        weekdaysShort: 'søn_man_tir_ons_tor_fre_lør'.split('_'),
+        weekdaysMin: 'sø_ma_ti_on_to_fr_lø'.split('_'),
+        longDateFormat: {
+            LT: 'HH:mm',
+            LTS: 'HH:mm:ss',
+            L: 'DD.MM.YYYY',
+            LL: 'D. MMMM YYYY',
+            LLL: 'D. MMMM YYYY HH:mm',
+            LLLL: 'dddd [d.] D. MMMM YYYY [kl.] HH:mm',
+        },
+        calendar: {
+            sameDay: '[i dag kl.] LT',
+            nextDay: '[i morgen kl.] LT',
+            nextWeek: 'på dddd [kl.] LT',
+            lastDay: '[i går kl.] LT',
+            lastWeek: '[i] dddd[s kl.] LT',
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: 'om %s',
+            past: '%s siden',
+            s: 'få sekunder',
+            ss: '%d sekunder',
+            m: 'et minut',
+            mm: '%d minutter',
+            h: 'en time',
+            hh: '%d timer',
+            d: 'en dag',
+            dd: '%d dage',
+            M: 'en måned',
+            MM: '%d måneder',
+            y: 'et år',
+            yy: '%d år',
+        },
+        dayOfMonthOrdinalParse: /\d{1,2}\./,
+        ordinal: '%d.',
+        week: {
+            dow: 1, // Monday is the first day of the week.
+            doy: 4, // The week that contains Jan 4th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    function processRelativeTime(number, withoutSuffix, key, isFuture) {
+        var format = {
+            m: ['eine Minute', 'einer Minute'],
+            h: ['eine Stunde', 'einer Stunde'],
+            d: ['ein Tag', 'einem Tag'],
+            dd: [number + ' Tage', number + ' Tagen'],
+            w: ['eine Woche', 'einer Woche'],
+            M: ['ein Monat', 'einem Monat'],
+            MM: [number + ' Monate', number + ' Monaten'],
+            y: ['ein Jahr', 'einem Jahr'],
+            yy: [number + ' Jahre', number + ' Jahren'],
+        };
+        return withoutSuffix ? format[key][0] : format[key][1];
+    }
+
+    moment.defineLocale('de-at', {
+        months: 'Jänner_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split(
+            '_'
+        ),
+        monthsShort: 'Jän._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.'.split(
+            '_'
+        ),
+        monthsParseExact: true,
+        weekdays: 'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split(
+            '_'
+        ),
+        weekdaysShort: 'So._Mo._Di._Mi._Do._Fr._Sa.'.split('_'),
+        weekdaysMin: 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'),
+        weekdaysParseExact: true,
+        longDateFormat: {
+            LT: 'HH:mm',
+            LTS: 'HH:mm:ss',
+            L: 'DD.MM.YYYY',
+            LL: 'D. MMMM YYYY',
+            LLL: 'D. MMMM YYYY HH:mm',
+            LLLL: 'dddd, D. MMMM YYYY HH:mm',
+        },
+        calendar: {
+            sameDay: '[heute um] LT [Uhr]',
+            sameElse: 'L',
+            nextDay: '[morgen um] LT [Uhr]',
+            nextWeek: 'dddd [um] LT [Uhr]',
+            lastDay: '[gestern um] LT [Uhr]',
+            lastWeek: '[letzten] dddd [um] LT [Uhr]',
+        },
+        relativeTime: {
+            future: 'in %s',
+            past: 'vor %s',
+            s: 'ein paar Sekunden',
+            ss: '%d Sekunden',
+            m: processRelativeTime,
+            mm: '%d Minuten',
+            h: processRelativeTime,
+            hh: '%d Stunden',
+            d: processRelativeTime,
+            dd: processRelativeTime,
+            w: processRelativeTime,
+            ww: '%d Wochen',
+            M: processRelativeTime,
+            MM: processRelativeTime,
+            y: processRelativeTime,
+            yy: processRelativeTime,
+        },
+        dayOfMonthOrdinalParse: /\d{1,2}\./,
+        ordinal: '%d.',
+        week: {
+            dow: 1, // Monday is the first day of the week.
+            doy: 4, // The week that contains Jan 4th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    function processRelativeTime$1(number, withoutSuffix, key, isFuture) {
+        var format = {
+            m: ['eine Minute', 'einer Minute'],
+            h: ['eine Stunde', 'einer Stunde'],
+            d: ['ein Tag', 'einem Tag'],
+            dd: [number + ' Tage', number + ' Tagen'],
+            w: ['eine Woche', 'einer Woche'],
+            M: ['ein Monat', 'einem Monat'],
+            MM: [number + ' Monate', number + ' Monaten'],
+            y: ['ein Jahr', 'einem Jahr'],
+            yy: [number + ' Jahre', number + ' Jahren'],
+        };
+        return withoutSuffix ? format[key][0] : format[key][1];
+    }
+
+    moment.defineLocale('de-ch', {
+        months: 'Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split(
+            '_'
+        ),
+        monthsShort: 'Jan._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.'.split(
+            '_'
+        ),
+        monthsParseExact: true,
+        weekdays: 'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split(
+            '_'
+        ),
+        weekdaysShort: 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'),
+        weekdaysMin: 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'),
+        weekdaysParseExact: true,
+        longDateFormat: {
+            LT: 'HH:mm',
+            LTS: 'HH:mm:ss',
+            L: 'DD.MM.YYYY',
+            LL: 'D. MMMM YYYY',
+            LLL: 'D. MMMM YYYY HH:mm',
+            LLLL: 'dddd, D. MMMM YYYY HH:mm',
+        },
+        calendar: {
+            sameDay: '[heute um] LT [Uhr]',
+            sameElse: 'L',
+            nextDay: '[morgen um] LT [Uhr]',
+            nextWeek: 'dddd [um] LT [Uhr]',
+            lastDay: '[gestern um] LT [Uhr]',
+            lastWeek: '[letzten] dddd [um] LT [Uhr]',
+        },
+        relativeTime: {
+            future: 'in %s',
+            past: 'vor %s',
+            s: 'ein paar Sekunden',
+            ss: '%d Sekunden',
+            m: processRelativeTime$1,
+            mm: '%d Minuten',
+            h: processRelativeTime$1,
+            hh: '%d Stunden',
+            d: processRelativeTime$1,
+            dd: processRelativeTime$1,
+            w: processRelativeTime$1,
+            ww: '%d Wochen',
+            M: processRelativeTime$1,
+            MM: processRelativeTime$1,
+            y: processRelativeTime$1,
+            yy: processRelativeTime$1,
+        },
+        dayOfMonthOrdinalParse: /\d{1,2}\./,
+        ordinal: '%d.',
+        week: {
+            dow: 1, // Monday is the first day of the week.
+            doy: 4, // The week that contains Jan 4th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    function processRelativeTime$2(number, withoutSuffix, key, isFuture) {
+        var format = {
+            m: ['eine Minute', 'einer Minute'],
+            h: ['eine Stunde', 'einer Stunde'],
+            d: ['ein Tag', 'einem Tag'],
+            dd: [number + ' Tage', number + ' Tagen'],
+            w: ['eine Woche', 'einer Woche'],
+            M: ['ein Monat', 'einem Monat'],
+            MM: [number + ' Monate', number + ' Monaten'],
+            y: ['ein Jahr', 'einem Jahr'],
+            yy: [number + ' Jahre', number + ' Jahren'],
+        };
+        return withoutSuffix ? format[key][0] : format[key][1];
+    }
+
+    moment.defineLocale('de', {
+        months: 'Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split(
+            '_'
+        ),
+        monthsShort: 'Jan._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.'.split(
+            '_'
+        ),
+        monthsParseExact: true,
+        weekdays: 'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split(
+            '_'
+        ),
+        weekdaysShort: 'So._Mo._Di._Mi._Do._Fr._Sa.'.split('_'),
+        weekdaysMin: 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'),
+        weekdaysParseExact: true,
+        longDateFormat: {
+            LT: 'HH:mm',
+            LTS: 'HH:mm:ss',
+            L: 'DD.MM.YYYY',
+            LL: 'D. MMMM YYYY',
+            LLL: 'D. MMMM YYYY HH:mm',
+            LLLL: 'dddd, D. MMMM YYYY HH:mm',
+        },
+        calendar: {
+            sameDay: '[heute um] LT [Uhr]',
+            sameElse: 'L',
+            nextDay: '[morgen um] LT [Uhr]',
+            nextWeek: 'dddd [um] LT [Uhr]',
+            lastDay: '[gestern um] LT [Uhr]',
+            lastWeek: '[letzten] dddd [um] LT [Uhr]',
+        },
+        relativeTime: {
+            future: 'in %s',
+            past: 'vor %s',
+            s: 'ein paar Sekunden',
+            ss: '%d Sekunden',
+            m: processRelativeTime$2,
+            mm: '%d Minuten',
+            h: processRelativeTime$2,
+            hh: '%d Stunden',
+            d: processRelativeTime$2,
+            dd: processRelativeTime$2,
+            w: processRelativeTime$2,
+            ww: '%d Wochen',
+            M: processRelativeTime$2,
+            MM: processRelativeTime$2,
+            y: processRelativeTime$2,
+            yy: processRelativeTime$2,
+        },
+        dayOfMonthOrdinalParse: /\d{1,2}\./,
+        ordinal: '%d.',
+        week: {
+            dow: 1, // Monday is the first day of the week.
+            doy: 4, // The week that contains Jan 4th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    var months$4 = [
+            'ޖެނުއަރީ',
+            'ފެބްރުއަރީ',
+            'މާރިޗު',
+            'އޭޕްރީލު',
+            'މޭ',
+            'ޖޫން',
+            'ޖުލައި',
+            'އޯގަސްޓު',
+            'ސެޕްޓެމްބަރު',
+            'އޮކްޓޯބަރު',
+            'ނޮވެމްބަރު',
+            'ޑިސެމްބަރު',
+        ],
+        weekdays = [
+            'އާދިއްތަ',
+            'ހޯމަ',
+            'އަންގާރަ',
+            'ބުދަ',
+            'ބުރާސްފަތި',
+            'ހުކުރު',
+            'ހޮނިހިރު',
+        ];
+
+    moment.defineLocale('dv', {
+        months: months$4,
+        monthsShort: months$4,
+        weekdays: weekdays,
+        weekdaysShort: weekdays,
+        weekdaysMin: 'އާދި_ހޯމަ_އަން_ބުދަ_ބުރާ_ހުކު_ހޮނި'.split('_'),
+        longDateFormat: {
+            LT: 'HH:mm',
+            LTS: 'HH:mm:ss',
+            L: 'D/M/YYYY',
+            LL: 'D MMMM YYYY',
+            LLL: 'D MMMM YYYY HH:mm',
+            LLLL: 'dddd D MMMM YYYY HH:mm',
+        },
+        meridiemParse: /މކ|މފ/,
+        isPM: function (input) {
+            return 'މފ' === input;
+        },
+        meridiem: function (hour, minute, isLower) {
+            if (hour < 12) {
+                return 'މކ';
+            } else {
+                return 'މފ';
+            }
+        },
+        calendar: {
+            sameDay: '[މިއަދު] LT',
+            nextDay: '[މާދަމާ] LT',
+            nextWeek: 'dddd LT',
+            lastDay: '[އިއްޔެ] LT',
+            lastWeek: '[ފާއިތުވި] dddd LT',
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: 'ތެރޭގައި %s',
+            past: 'ކުރިން %s',
+            s: 'ސިކުންތުކޮޅެއް',
+            ss: 'd% ސިކުންތު',
+            m: 'މިނިޓެއް',
+            mm: 'މިނިޓު %d',
+            h: 'ގަޑިއިރެއް',
+            hh: 'ގަޑިއިރު %d',
+            d: 'ދުވަހެއް',
+            dd: 'ދުވަސް %d',
+            M: 'މަހެއް',
+            MM: 'މަސް %d',
+            y: 'އަހަރެއް',
+            yy: 'އަހަރު %d',
+        },
+        preparse: function (string) {
+            return string.replace(/،/g, ',');
+        },
+        postformat: function (string) {
+            return string.replace(/,/g, '،');
+        },
+        week: {
+            dow: 7, // Sunday is the first day of the week.
+            doy: 12, // The week that contains Jan 12th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    function isFunction(input) {
+        return (
+            (typeof Function !== 'undefined' && input instanceof Function) ||
+            Object.prototype.toString.call(input) === '[object Function]'
+        );
+    }
+
+    moment.defineLocale('el', {
+        monthsNominativeEl: 'Ιανουάριος_Φεβρουάριος_Μάρτιος_Απρίλιος_Μάιος_Ιούνιος_Ιούλιος_Αύγουστος_Σεπτέμβριος_Οκτώβριος_Νοέμβριος_Δεκέμβριος'.split(
+            '_'
+        ),
+        monthsGenitiveEl: 'Ιανουαρίου_Φεβρουαρίου_Μαρτίου_Απριλίου_Μαΐου_Ιουνίου_Ιουλίου_Αυγούστου_Σεπτεμβρίου_Οκτωβρίου_Νοεμβρίου_Δεκεμβρίου'.split(
+            '_'
+        ),
+        months: function (momentToFormat, format) {
+            if (!momentToFormat) {
+                return this._monthsNominativeEl;
+            } else if (
+                typeof format === 'string' &&
+                /D/.test(format.substring(0, format.indexOf('MMMM')))
+            ) {
+                // if there is a day number before 'MMMM'
+                return this._monthsGenitiveEl[momentToFormat.month()];
+            } else {
+                return this._monthsNominativeEl[momentToFormat.month()];
+            }
+        },
+        monthsShort: 'Ιαν_Φεβ_Μαρ_Απρ_Μαϊ_Ιουν_Ιουλ_Αυγ_Σεπ_Οκτ_Νοε_Δεκ'.split('_'),
+        weekdays: 'Κυριακή_Δευτέρα_Τρίτη_Τετάρτη_Πέμπτη_Παρασκευή_Σάββατο'.split(
+            '_'
+        ),
+        weekdaysShort: 'Κυρ_Δευ_Τρι_Τετ_Πεμ_Παρ_Σαβ'.split('_'),
+        weekdaysMin: 'Κυ_Δε_Τρ_Τε_Πε_Πα_Σα'.split('_'),
+        meridiem: function (hours, minutes, isLower) {
+            if (hours > 11) {
+                return isLower ? 'μμ' : 'ΜΜ';
+            } else {
+                return isLower ? 'πμ' : 'ΠΜ';
+            }
+        },
+        isPM: function (input) {
+            return (input + '').toLowerCase()[0] === 'μ';
+        },
+        meridiemParse: /[ΠΜ]\.?Μ?\.?/i,
+        longDateFormat: {
+            LT: 'h:mm A',
+            LTS: 'h:mm:ss A',
+            L: 'DD/MM/YYYY',
+            LL: 'D MMMM YYYY',
+            LLL: 'D MMMM YYYY h:mm A',
+            LLLL: 'dddd, D MMMM YYYY h:mm A',
+        },
+        calendarEl: {
+            sameDay: '[Σήμερα {}] LT',
+            nextDay: '[Αύριο {}] LT',
+            nextWeek: 'dddd [{}] LT',
+            lastDay: '[Χθες {}] LT',
+            lastWeek: function () {
+                switch (this.day()) {
+                    case 6:
+                        return '[το προηγούμενο] dddd [{}] LT';
+                    default:
+                        return '[την προηγούμενη] dddd [{}] LT';
+                }
+            },
+            sameElse: 'L',
+        },
+        calendar: function (key, mom) {
+            var output = this._calendarEl[key],
+                hours = mom && mom.hours();
+            if (isFunction(output)) {
+                output = output.apply(mom);
+            }
+            return output.replace('{}', hours % 12 === 1 ? 'στη' : 'στις');
+        },
+        relativeTime: {
+            future: 'σε %s',
+            past: '%s πριν',
+            s: 'λίγα δευτερόλεπτα',
+            ss: '%d δευτερόλεπτα',
+            m: 'ένα λεπτό',
+            mm: '%d λεπτά',
+            h: 'μία ώρα',
+            hh: '%d ώρες',
+            d: 'μία μέρα',
+            dd: '%d μέρες',
+            M: 'ένας μήνας',
+            MM: '%d μήνες',
+            y: 'ένας χρόνος',
+            yy: '%d χρόνια',
+        },
+        dayOfMonthOrdinalParse: /\d{1,2}η/,
+        ordinal: '%dη',
+        week: {
+            dow: 1, // Monday is the first day of the week.
+            doy: 4, // The week that contains Jan 4st is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    moment.defineLocale('en-au', {
+        months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split(
+            '_'
+        ),
+        monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),
+        weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split(
+            '_'
+        ),
+        weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),
+        weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),
+        longDateFormat: {
+            LT: 'h:mm A',
+            LTS: 'h:mm:ss A',
+            L: 'DD/MM/YYYY',
+            LL: 'D MMMM YYYY',
+            LLL: 'D MMMM YYYY h:mm A',
+            LLLL: 'dddd, D MMMM YYYY h:mm A',
+        },
+        calendar: {
+            sameDay: '[Today at] LT',
+            nextDay: '[Tomorrow at] LT',
+            nextWeek: 'dddd [at] LT',
+            lastDay: '[Yesterday at] LT',
+            lastWeek: '[Last] dddd [at] LT',
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: 'in %s',
+            past: '%s ago',
+            s: 'a few seconds',
+            ss: '%d seconds',
+            m: 'a minute',
+            mm: '%d minutes',
+            h: 'an hour',
+            hh: '%d hours',
+            d: 'a day',
+            dd: '%d days',
+            M: 'a month',
+            MM: '%d months',
+            y: 'a year',
+            yy: '%d years',
+        },
+        dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/,
+        ordinal: function (number) {
+            var b = number % 10,
+                output =
+                    ~~((number % 100) / 10) === 1
+                        ? 'th'
+                        : b === 1
+                        ? 'st'
+                        : b === 2
+                        ? 'nd'
+                        : b === 3
+                        ? 'rd'
+                        : 'th';
+            return number + output;
+        },
+        week: {
+            dow: 0, // Sunday is the first day of the week.
+            doy: 4, // The week that contains Jan 4th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    moment.defineLocale('en-ca', {
+        months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split(
+            '_'
+        ),
+        monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),
+        weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split(
+            '_'
+        ),
+        weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),
+        weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),
+        longDateFormat: {
+            LT: 'h:mm A',
+            LTS: 'h:mm:ss A',
+            L: 'YYYY-MM-DD',
+            LL: 'MMMM D, YYYY',
+            LLL: 'MMMM D, YYYY h:mm A',
+            LLLL: 'dddd, MMMM D, YYYY h:mm A',
+        },
+        calendar: {
+            sameDay: '[Today at] LT',
+            nextDay: '[Tomorrow at] LT',
+            nextWeek: 'dddd [at] LT',
+            lastDay: '[Yesterday at] LT',
+            lastWeek: '[Last] dddd [at] LT',
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: 'in %s',
+            past: '%s ago',
+            s: 'a few seconds',
+            ss: '%d seconds',
+            m: 'a minute',
+            mm: '%d minutes',
+            h: 'an hour',
+            hh: '%d hours',
+            d: 'a day',
+            dd: '%d days',
+            M: 'a month',
+            MM: '%d months',
+            y: 'a year',
+            yy: '%d years',
+        },
+        dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/,
+        ordinal: function (number) {
+            var b = number % 10,
+                output =
+                    ~~((number % 100) / 10) === 1
+                        ? 'th'
+                        : b === 1
+                        ? 'st'
+                        : b === 2
+                        ? 'nd'
+                        : b === 3
+                        ? 'rd'
+                        : 'th';
+            return number + output;
+        },
+    });
+
+    //! moment.js locale configuration
+
+    moment.defineLocale('en-gb', {
+        months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split(
+            '_'
+        ),
+        monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),
+        weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split(
+            '_'
+        ),
+        weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),
+        weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),
+        longDateFormat: {
+            LT: 'HH:mm',
+            LTS: 'HH:mm:ss',
+            L: 'DD/MM/YYYY',
+            LL: 'D MMMM YYYY',
+            LLL: 'D MMMM YYYY HH:mm',
+            LLLL: 'dddd, D MMMM YYYY HH:mm',
+        },
+        calendar: {
+            sameDay: '[Today at] LT',
+            nextDay: '[Tomorrow at] LT',
+            nextWeek: 'dddd [at] LT',
+            lastDay: '[Yesterday at] LT',
+            lastWeek: '[Last] dddd [at] LT',
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: 'in %s',
+            past: '%s ago',
+            s: 'a few seconds',
+            ss: '%d seconds',
+            m: 'a minute',
+            mm: '%d minutes',
+            h: 'an hour',
+            hh: '%d hours',
+            d: 'a day',
+            dd: '%d days',
+            M: 'a month',
+            MM: '%d months',
+            y: 'a year',
+            yy: '%d years',
+        },
+        dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/,
+        ordinal: function (number) {
+            var b = number % 10,
+                output =
+                    ~~((number % 100) / 10) === 1
+                        ? 'th'
+                        : b === 1
+                        ? 'st'
+                        : b === 2
+                        ? 'nd'
+                        : b === 3
+                        ? 'rd'
+                        : 'th';
+            return number + output;
+        },
+        week: {
+            dow: 1, // Monday is the first day of the week.
+            doy: 4, // The week that contains Jan 4th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    moment.defineLocale('en-ie', {
+        months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split(
+            '_'
+        ),
+        monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),
+        weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split(
+            '_'
+        ),
+        weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),
+        weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),
+        longDateFormat: {
+            LT: 'HH:mm',
+            LTS: 'HH:mm:ss',
+            L: 'DD/MM/YYYY',
+            LL: 'D MMMM YYYY',
+            LLL: 'D MMMM YYYY HH:mm',
+            LLLL: 'dddd D MMMM YYYY HH:mm',
+        },
+        calendar: {
+            sameDay: '[Today at] LT',
+            nextDay: '[Tomorrow at] LT',
+            nextWeek: 'dddd [at] LT',
+            lastDay: '[Yesterday at] LT',
+            lastWeek: '[Last] dddd [at] LT',
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: 'in %s',
+            past: '%s ago',
+            s: 'a few seconds',
+            ss: '%d seconds',
+            m: 'a minute',
+            mm: '%d minutes',
+            h: 'an hour',
+            hh: '%d hours',
+            d: 'a day',
+            dd: '%d days',
+            M: 'a month',
+            MM: '%d months',
+            y: 'a year',
+            yy: '%d years',
+        },
+        dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/,
+        ordinal: function (number) {
+            var b = number % 10,
+                output =
+                    ~~((number % 100) / 10) === 1
+                        ? 'th'
+                        : b === 1
+                        ? 'st'
+                        : b === 2
+                        ? 'nd'
+                        : b === 3
+                        ? 'rd'
+                        : 'th';
+            return number + output;
+        },
+        week: {
+            dow: 1, // Monday is the first day of the week.
+            doy: 4, // The week that contains Jan 4th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    moment.defineLocale('en-il', {
+        months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split(
+            '_'
+        ),
+        monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),
+        weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split(
+            '_'
+        ),
+        weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),
+        weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),
+        longDateFormat: {
+            LT: 'HH:mm',
+            LTS: 'HH:mm:ss',
+            L: 'DD/MM/YYYY',
+            LL: 'D MMMM YYYY',
+            LLL: 'D MMMM YYYY HH:mm',
+            LLLL: 'dddd, D MMMM YYYY HH:mm',
+        },
+        calendar: {
+            sameDay: '[Today at] LT',
+            nextDay: '[Tomorrow at] LT',
+            nextWeek: 'dddd [at] LT',
+            lastDay: '[Yesterday at] LT',
+            lastWeek: '[Last] dddd [at] LT',
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: 'in %s',
+            past: '%s ago',
+            s: 'a few seconds',
+            ss: '%d seconds',
+            m: 'a minute',
+            mm: '%d minutes',
+            h: 'an hour',
+            hh: '%d hours',
+            d: 'a day',
+            dd: '%d days',
+            M: 'a month',
+            MM: '%d months',
+            y: 'a year',
+            yy: '%d years',
+        },
+        dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/,
+        ordinal: function (number) {
+            var b = number % 10,
+                output =
+                    ~~((number % 100) / 10) === 1
+                        ? 'th'
+                        : b === 1
+                        ? 'st'
+                        : b === 2
+                        ? 'nd'
+                        : b === 3
+                        ? 'rd'
+                        : 'th';
+            return number + output;
+        },
+    });
+
+    //! moment.js locale configuration
+
+    moment.defineLocale('en-in', {
+        months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split(
+            '_'
+        ),
+        monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),
+        weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split(
+            '_'
+        ),
+        weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),
+        weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),
+        longDateFormat: {
+            LT: 'h:mm A',
+            LTS: 'h:mm:ss A',
+            L: 'DD/MM/YYYY',
+            LL: 'D MMMM YYYY',
+            LLL: 'D MMMM YYYY h:mm A',
+            LLLL: 'dddd, D MMMM YYYY h:mm A',
+        },
+        calendar: {
+            sameDay: '[Today at] LT',
+            nextDay: '[Tomorrow at] LT',
+            nextWeek: 'dddd [at] LT',
+            lastDay: '[Yesterday at] LT',
+            lastWeek: '[Last] dddd [at] LT',
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: 'in %s',
+            past: '%s ago',
+            s: 'a few seconds',
+            ss: '%d seconds',
+            m: 'a minute',
+            mm: '%d minutes',
+            h: 'an hour',
+            hh: '%d hours',
+            d: 'a day',
+            dd: '%d days',
+            M: 'a month',
+            MM: '%d months',
+            y: 'a year',
+            yy: '%d years',
+        },
+        dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/,
+        ordinal: function (number) {
+            var b = number % 10,
+                output =
+                    ~~((number % 100) / 10) === 1
+                        ? 'th'
+                        : b === 1
+                        ? 'st'
+                        : b === 2
+                        ? 'nd'
+                        : b === 3
+                        ? 'rd'
+                        : 'th';
+            return number + output;
+        },
+        week: {
+            dow: 0, // Sunday is the first day of the week.
+            doy: 6, // The week that contains Jan 1st is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    moment.defineLocale('en-nz', {
+        months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split(
+            '_'
+        ),
+        monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),
+        weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split(
+            '_'
+        ),
+        weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),
+        weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),
+        longDateFormat: {
+            LT: 'h:mm A',
+            LTS: 'h:mm:ss A',
+            L: 'DD/MM/YYYY',
+            LL: 'D MMMM YYYY',
+            LLL: 'D MMMM YYYY h:mm A',
+            LLLL: 'dddd, D MMMM YYYY h:mm A',
+        },
+        calendar: {
+            sameDay: '[Today at] LT',
+            nextDay: '[Tomorrow at] LT',
+            nextWeek: 'dddd [at] LT',
+            lastDay: '[Yesterday at] LT',
+            lastWeek: '[Last] dddd [at] LT',
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: 'in %s',
+            past: '%s ago',
+            s: 'a few seconds',
+            ss: '%d seconds',
+            m: 'a minute',
+            mm: '%d minutes',
+            h: 'an hour',
+            hh: '%d hours',
+            d: 'a day',
+            dd: '%d days',
+            M: 'a month',
+            MM: '%d months',
+            y: 'a year',
+            yy: '%d years',
+        },
+        dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/,
+        ordinal: function (number) {
+            var b = number % 10,
+                output =
+                    ~~((number % 100) / 10) === 1
+                        ? 'th'
+                        : b === 1
+                        ? 'st'
+                        : b === 2
+                        ? 'nd'
+                        : b === 3
+                        ? 'rd'
+                        : 'th';
+            return number + output;
+        },
+        week: {
+            dow: 1, // Monday is the first day of the week.
+            doy: 4, // The week that contains Jan 4th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    moment.defineLocale('en-sg', {
+        months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split(
+            '_'
+        ),
+        monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),
+        weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split(
+            '_'
+        ),
+        weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),
+        weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),
+        longDateFormat: {
+            LT: 'HH:mm',
+            LTS: 'HH:mm:ss',
+            L: 'DD/MM/YYYY',
+            LL: 'D MMMM YYYY',
+            LLL: 'D MMMM YYYY HH:mm',
+            LLLL: 'dddd, D MMMM YYYY HH:mm',
+        },
+        calendar: {
+            sameDay: '[Today at] LT',
+            nextDay: '[Tomorrow at] LT',
+            nextWeek: 'dddd [at] LT',
+            lastDay: '[Yesterday at] LT',
+            lastWeek: '[Last] dddd [at] LT',
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: 'in %s',
+            past: '%s ago',
+            s: 'a few seconds',
+            ss: '%d seconds',
+            m: 'a minute',
+            mm: '%d minutes',
+            h: 'an hour',
+            hh: '%d hours',
+            d: 'a day',
+            dd: '%d days',
+            M: 'a month',
+            MM: '%d months',
+            y: 'a year',
+            yy: '%d years',
+        },
+        dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/,
+        ordinal: function (number) {
+            var b = number % 10,
+                output =
+                    ~~((number % 100) / 10) === 1
+                        ? 'th'
+                        : b === 1
+                        ? 'st'
+                        : b === 2
+                        ? 'nd'
+                        : b === 3
+                        ? 'rd'
+                        : 'th';
+            return number + output;
+        },
+        week: {
+            dow: 1, // Monday is the first day of the week.
+            doy: 4, // The week that contains Jan 4th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    moment.defineLocale('eo', {
+        months: 'januaro_februaro_marto_aprilo_majo_junio_julio_aŭgusto_septembro_oktobro_novembro_decembro'.split(
+            '_'
+        ),
+        monthsShort: 'jan_feb_mart_apr_maj_jun_jul_aŭg_sept_okt_nov_dec'.split('_'),
+        weekdays: 'dimanĉo_lundo_mardo_merkredo_ĵaŭdo_vendredo_sabato'.split('_'),
+        weekdaysShort: 'dim_lun_mard_merk_ĵaŭ_ven_sab'.split('_'),
+        weekdaysMin: 'di_lu_ma_me_ĵa_ve_sa'.split('_'),
+        longDateFormat: {
+            LT: 'HH:mm',
+            LTS: 'HH:mm:ss',
+            L: 'YYYY-MM-DD',
+            LL: '[la] D[-an de] MMMM, YYYY',
+            LLL: '[la] D[-an de] MMMM, YYYY HH:mm',
+            LLLL: 'dddd[n], [la] D[-an de] MMMM, YYYY HH:mm',
+            llll: 'ddd, [la] D[-an de] MMM, YYYY HH:mm',
+        },
+        meridiemParse: /[ap]\.t\.m/i,
+        isPM: function (input) {
+            return input.charAt(0).toLowerCase() === 'p';
+        },
+        meridiem: function (hours, minutes, isLower) {
+            if (hours > 11) {
+                return isLower ? 'p.t.m.' : 'P.T.M.';
+            } else {
+                return isLower ? 'a.t.m.' : 'A.T.M.';
+            }
+        },
+        calendar: {
+            sameDay: '[Hodiaŭ je] LT',
+            nextDay: '[Morgaŭ je] LT',
+            nextWeek: 'dddd[n je] LT',
+            lastDay: '[Hieraŭ je] LT',
+            lastWeek: '[pasintan] dddd[n je] LT',
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: 'post %s',
+            past: 'antaŭ %s',
+            s: 'kelkaj sekundoj',
+            ss: '%d sekundoj',
+            m: 'unu minuto',
+            mm: '%d minutoj',
+            h: 'unu horo',
+            hh: '%d horoj',
+            d: 'unu tago', //ne 'diurno', ĉar estas uzita por proksimumo
+            dd: '%d tagoj',
+            M: 'unu monato',
+            MM: '%d monatoj',
+            y: 'unu jaro',
+            yy: '%d jaroj',
+        },
+        dayOfMonthOrdinalParse: /\d{1,2}a/,
+        ordinal: '%da',
+        week: {
+            dow: 1, // Monday is the first day of the week.
+            doy: 7, // The week that contains Jan 7th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    var monthsShortDot = 'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split(
+            '_'
+        ),
+        monthsShort$1 = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_'),
+        monthsParse$2 = [
+            /^ene/i,
+            /^feb/i,
+            /^mar/i,
+            /^abr/i,
+            /^may/i,
+            /^jun/i,
+            /^jul/i,
+            /^ago/i,
+            /^sep/i,
+            /^oct/i,
+            /^nov/i,
+            /^dic/i,
+        ],
+        monthsRegex$2 = /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i;
+
+    moment.defineLocale('es-do', {
+        months: 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split(
+            '_'
+        ),
+        monthsShort: function (m, format) {
+            if (!m) {
+                return monthsShortDot;
+            } else if (/-MMM-/.test(format)) {
+                return monthsShort$1[m.month()];
+            } else {
+                return monthsShortDot[m.month()];
+            }
+        },
+        monthsRegex: monthsRegex$2,
+        monthsShortRegex: monthsRegex$2,
+        monthsStrictRegex: /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,
+        monthsShortStrictRegex: /^(ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i,
+        monthsParse: monthsParse$2,
+        longMonthsParse: monthsParse$2,
+        shortMonthsParse: monthsParse$2,
+        weekdays: 'domingo_lunes_martes_miércoles_jueves_viernes_sábado'.split('_'),
+        weekdaysShort: 'dom._lun._mar._mié._jue._vie._sáb.'.split('_'),
+        weekdaysMin: 'do_lu_ma_mi_ju_vi_sá'.split('_'),
+        weekdaysParseExact: true,
+        longDateFormat: {
+            LT: 'h:mm A',
+            LTS: 'h:mm:ss A',
+            L: 'DD/MM/YYYY',
+            LL: 'D [de] MMMM [de] YYYY',
+            LLL: 'D [de] MMMM [de] YYYY h:mm A',
+            LLLL: 'dddd, D [de] MMMM [de] YYYY h:mm A',
+        },
+        calendar: {
+            sameDay: function () {
+                return '[hoy a la' + (this.hours() !== 1 ? 's' : '') + '] LT';
+            },
+            nextDay: function () {
+                return '[mañana a la' + (this.hours() !== 1 ? 's' : '') + '] LT';
+            },
+            nextWeek: function () {
+                return 'dddd [a la' + (this.hours() !== 1 ? 's' : '') + '] LT';
+            },
+            lastDay: function () {
+                return '[ayer a la' + (this.hours() !== 1 ? 's' : '') + '] LT';
+            },
+            lastWeek: function () {
+                return (
+                    '[el] dddd [pasado a la' +
+                    (this.hours() !== 1 ? 's' : '') +
+                    '] LT'
+                );
+            },
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: 'en %s',
+            past: 'hace %s',
+            s: 'unos segundos',
+            ss: '%d segundos',
+            m: 'un minuto',
+            mm: '%d minutos',
+            h: 'una hora',
+            hh: '%d horas',
+            d: 'un día',
+            dd: '%d días',
+            M: 'un mes',
+            MM: '%d meses',
+            y: 'un año',
+            yy: '%d años',
+        },
+        dayOfMonthOrdinalParse: /\d{1,2}º/,
+        ordinal: '%dº',
+        week: {
+            dow: 1, // Monday is the first day of the week.
+            doy: 4, // The week that contains Jan 4th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    var monthsShortDot$1 = 'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split(
+            '_'
+        ),
+        monthsShort$2 = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_'),
+        monthsParse$3 = [
+            /^ene/i,
+            /^feb/i,
+            /^mar/i,
+            /^abr/i,
+            /^may/i,
+            /^jun/i,
+            /^jul/i,
+            /^ago/i,
+            /^sep/i,
+            /^oct/i,
+            /^nov/i,
+            /^dic/i,
+        ],
+        monthsRegex$3 = /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i;
+
+    moment.defineLocale('es-us', {
+        months: 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split(
+            '_'
+        ),
+        monthsShort: function (m, format) {
+            if (!m) {
+                return monthsShortDot$1;
+            } else if (/-MMM-/.test(format)) {
+                return monthsShort$2[m.month()];
+            } else {
+                return monthsShortDot$1[m.month()];
+            }
+        },
+        monthsRegex: monthsRegex$3,
+        monthsShortRegex: monthsRegex$3,
+        monthsStrictRegex: /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,
+        monthsShortStrictRegex: /^(ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i,
+        monthsParse: monthsParse$3,
+        longMonthsParse: monthsParse$3,
+        shortMonthsParse: monthsParse$3,
+        weekdays: 'domingo_lunes_martes_miércoles_jueves_viernes_sábado'.split('_'),
+        weekdaysShort: 'dom._lun._mar._mié._jue._vie._sáb.'.split('_'),
+        weekdaysMin: 'do_lu_ma_mi_ju_vi_sá'.split('_'),
+        weekdaysParseExact: true,
+        longDateFormat: {
+            LT: 'h:mm A',
+            LTS: 'h:mm:ss A',
+            L: 'MM/DD/YYYY',
+            LL: 'D [de] MMMM [de] YYYY',
+            LLL: 'D [de] MMMM [de] YYYY h:mm A',
+            LLLL: 'dddd, D [de] MMMM [de] YYYY h:mm A',
+        },
+        calendar: {
+            sameDay: function () {
+                return '[hoy a la' + (this.hours() !== 1 ? 's' : '') + '] LT';
+            },
+            nextDay: function () {
+                return '[mañana a la' + (this.hours() !== 1 ? 's' : '') + '] LT';
+            },
+            nextWeek: function () {
+                return 'dddd [a la' + (this.hours() !== 1 ? 's' : '') + '] LT';
+            },
+            lastDay: function () {
+                return '[ayer a la' + (this.hours() !== 1 ? 's' : '') + '] LT';
+            },
+            lastWeek: function () {
+                return (
+                    '[el] dddd [pasado a la' +
+                    (this.hours() !== 1 ? 's' : '') +
+                    '] LT'
+                );
+            },
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: 'en %s',
+            past: 'hace %s',
+            s: 'unos segundos',
+            ss: '%d segundos',
+            m: 'un minuto',
+            mm: '%d minutos',
+            h: 'una hora',
+            hh: '%d horas',
+            d: 'un día',
+            dd: '%d días',
+            M: 'un mes',
+            MM: '%d meses',
+            y: 'un año',
+            yy: '%d años',
+        },
+        dayOfMonthOrdinalParse: /\d{1,2}º/,
+        ordinal: '%dº',
+        week: {
+            dow: 0, // Sunday is the first day of the week.
+            doy: 6, // The week that contains Jan 6th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    var monthsShortDot$2 = 'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split(
+            '_'
+        ),
+        monthsShort$3 = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_'),
+        monthsParse$4 = [
+            /^ene/i,
+            /^feb/i,
+            /^mar/i,
+            /^abr/i,
+            /^may/i,
+            /^jun/i,
+            /^jul/i,
+            /^ago/i,
+            /^sep/i,
+            /^oct/i,
+            /^nov/i,
+            /^dic/i,
+        ],
+        monthsRegex$4 = /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i;
+
+    moment.defineLocale('es', {
+        months: 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split(
+            '_'
+        ),
+        monthsShort: function (m, format) {
+            if (!m) {
+                return monthsShortDot$2;
+            } else if (/-MMM-/.test(format)) {
+                return monthsShort$3[m.month()];
+            } else {
+                return monthsShortDot$2[m.month()];
+            }
+        },
+        monthsRegex: monthsRegex$4,
+        monthsShortRegex: monthsRegex$4,
+        monthsStrictRegex: /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,
+        monthsShortStrictRegex: /^(ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i,
+        monthsParse: monthsParse$4,
+        longMonthsParse: monthsParse$4,
+        shortMonthsParse: monthsParse$4,
+        weekdays: 'domingo_lunes_martes_miércoles_jueves_viernes_sábado'.split('_'),
+        weekdaysShort: 'dom._lun._mar._mié._jue._vie._sáb.'.split('_'),
+        weekdaysMin: 'do_lu_ma_mi_ju_vi_sá'.split('_'),
+        weekdaysParseExact: true,
+        longDateFormat: {
+            LT: 'H:mm',
+            LTS: 'H:mm:ss',
+            L: 'DD/MM/YYYY',
+            LL: 'D [de] MMMM [de] YYYY',
+            LLL: 'D [de] MMMM [de] YYYY H:mm',
+            LLLL: 'dddd, D [de] MMMM [de] YYYY H:mm',
+        },
+        calendar: {
+            sameDay: function () {
+                return '[hoy a la' + (this.hours() !== 1 ? 's' : '') + '] LT';
+            },
+            nextDay: function () {
+                return '[mañana a la' + (this.hours() !== 1 ? 's' : '') + '] LT';
+            },
+            nextWeek: function () {
+                return 'dddd [a la' + (this.hours() !== 1 ? 's' : '') + '] LT';
+            },
+            lastDay: function () {
+                return '[ayer a la' + (this.hours() !== 1 ? 's' : '') + '] LT';
+            },
+            lastWeek: function () {
+                return (
+                    '[el] dddd [pasado a la' +
+                    (this.hours() !== 1 ? 's' : '') +
+                    '] LT'
+                );
+            },
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: 'en %s',
+            past: 'hace %s',
+            s: 'unos segundos',
+            ss: '%d segundos',
+            m: 'un minuto',
+            mm: '%d minutos',
+            h: 'una hora',
+            hh: '%d horas',
+            d: 'un día',
+            dd: '%d días',
+            M: 'un mes',
+            MM: '%d meses',
+            y: 'un año',
+            yy: '%d años',
+        },
+        dayOfMonthOrdinalParse: /\d{1,2}º/,
+        ordinal: '%dº',
+        week: {
+            dow: 1, // Monday is the first day of the week.
+            doy: 4, // The week that contains Jan 4th is the first week of the year.
+        },
+        invalidDate: 'Fecha inválida',
+    });
+
+    //! moment.js locale configuration
+
+    function processRelativeTime$3(number, withoutSuffix, key, isFuture) {
+        var format = {
+            s: ['mõne sekundi', 'mõni sekund', 'paar sekundit'],
+            ss: [number + 'sekundi', number + 'sekundit'],
+            m: ['ühe minuti', 'üks minut'],
+            mm: [number + ' minuti', number + ' minutit'],
+            h: ['ühe tunni', 'tund aega', 'üks tund'],
+            hh: [number + ' tunni', number + ' tundi'],
+            d: ['ühe päeva', 'üks päev'],
+            M: ['kuu aja', 'kuu aega', 'üks kuu'],
+            MM: [number + ' kuu', number + ' kuud'],
+            y: ['ühe aasta', 'aasta', 'üks aasta'],
+            yy: [number + ' aasta', number + ' aastat'],
+        };
+        if (withoutSuffix) {
+            return format[key][2] ? format[key][2] : format[key][1];
+        }
+        return isFuture ? format[key][0] : format[key][1];
+    }
+
+    moment.defineLocale('et', {
+        months: 'jaanuar_veebruar_märts_aprill_mai_juuni_juuli_august_september_oktoober_november_detsember'.split(
+            '_'
+        ),
+        monthsShort: 'jaan_veebr_märts_apr_mai_juuni_juuli_aug_sept_okt_nov_dets'.split(
+            '_'
+        ),
+        weekdays: 'pühapäev_esmaspäev_teisipäev_kolmapäev_neljapäev_reede_laupäev'.split(
+            '_'
+        ),
+        weekdaysShort: 'P_E_T_K_N_R_L'.split('_'),
+        weekdaysMin: 'P_E_T_K_N_R_L'.split('_'),
+        longDateFormat: {
+            LT: 'H:mm',
+            LTS: 'H:mm:ss',
+            L: 'DD.MM.YYYY',
+            LL: 'D. MMMM YYYY',
+            LLL: 'D. MMMM YYYY H:mm',
+            LLLL: 'dddd, D. MMMM YYYY H:mm',
+        },
+        calendar: {
+            sameDay: '[Täna,] LT',
+            nextDay: '[Homme,] LT',
+            nextWeek: '[Järgmine] dddd LT',
+            lastDay: '[Eile,] LT',
+            lastWeek: '[Eelmine] dddd LT',
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: '%s pärast',
+            past: '%s tagasi',
+            s: processRelativeTime$3,
+            ss: processRelativeTime$3,
+            m: processRelativeTime$3,
+            mm: processRelativeTime$3,
+            h: processRelativeTime$3,
+            hh: processRelativeTime$3,
+            d: processRelativeTime$3,
+            dd: '%d päeva',
+            M: processRelativeTime$3,
+            MM: processRelativeTime$3,
+            y: processRelativeTime$3,
+            yy: processRelativeTime$3,
+        },
+        dayOfMonthOrdinalParse: /\d{1,2}\./,
+        ordinal: '%d.',
+        week: {
+            dow: 1, // Monday is the first day of the week.
+            doy: 4, // The week that contains Jan 4th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    moment.defineLocale('eu', {
+        months: 'urtarrila_otsaila_martxoa_apirila_maiatza_ekaina_uztaila_abuztua_iraila_urria_azaroa_abendua'.split(
+            '_'
+        ),
+        monthsShort: 'urt._ots._mar._api._mai._eka._uzt._abu._ira._urr._aza._abe.'.split(
+            '_'
+        ),
+        monthsParseExact: true,
+        weekdays: 'igandea_astelehena_asteartea_asteazkena_osteguna_ostirala_larunbata'.split(
+            '_'
+        ),
+        weekdaysShort: 'ig._al._ar._az._og._ol._lr.'.split('_'),
+        weekdaysMin: 'ig_al_ar_az_og_ol_lr'.split('_'),
+        weekdaysParseExact: true,
+        longDateFormat: {
+            LT: 'HH:mm',
+            LTS: 'HH:mm:ss',
+            L: 'YYYY-MM-DD',
+            LL: 'YYYY[ko] MMMM[ren] D[a]',
+            LLL: 'YYYY[ko] MMMM[ren] D[a] HH:mm',
+            LLLL: 'dddd, YYYY[ko] MMMM[ren] D[a] HH:mm',
+            l: 'YYYY-M-D',
+            ll: 'YYYY[ko] MMM D[a]',
+            lll: 'YYYY[ko] MMM D[a] HH:mm',
+            llll: 'ddd, YYYY[ko] MMM D[a] HH:mm',
+        },
+        calendar: {
+            sameDay: '[gaur] LT[etan]',
+            nextDay: '[bihar] LT[etan]',
+            nextWeek: 'dddd LT[etan]',
+            lastDay: '[atzo] LT[etan]',
+            lastWeek: '[aurreko] dddd LT[etan]',
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: '%s barru',
+            past: 'duela %s',
+            s: 'segundo batzuk',
+            ss: '%d segundo',
+            m: 'minutu bat',
+            mm: '%d minutu',
+            h: 'ordu bat',
+            hh: '%d ordu',
+            d: 'egun bat',
+            dd: '%d egun',
+            M: 'hilabete bat',
+            MM: '%d hilabete',
+            y: 'urte bat',
+            yy: '%d urte',
+        },
+        dayOfMonthOrdinalParse: /\d{1,2}\./,
+        ordinal: '%d.',
+        week: {
+            dow: 1, // Monday is the first day of the week.
+            doy: 7, // The week that contains Jan 7th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    var symbolMap$5 = {
+            '1': '۱',
+            '2': '۲',
+            '3': '۳',
+            '4': '۴',
+            '5': '۵',
+            '6': '۶',
+            '7': '۷',
+            '8': '۸',
+            '9': '۹',
+            '0': '۰',
+        },
+        numberMap$4 = {
+            '۱': '1',
+            '۲': '2',
+            '۳': '3',
+            '۴': '4',
+            '۵': '5',
+            '۶': '6',
+            '۷': '7',
+            '۸': '8',
+            '۹': '9',
+            '۰': '0',
+        };
+
+    moment.defineLocale('fa', {
+        months: 'ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر'.split(
+            '_'
+        ),
+        monthsShort: 'ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر'.split(
+            '_'
+        ),
+        weekdays: 'یک\u200cشنبه_دوشنبه_سه\u200cشنبه_چهارشنبه_پنج\u200cشنبه_جمعه_شنبه'.split(
+            '_'
+        ),
+        weekdaysShort: 'یک\u200cشنبه_دوشنبه_سه\u200cشنبه_چهارشنبه_پنج\u200cشنبه_جمعه_شنبه'.split(
+            '_'
+        ),
+        weekdaysMin: 'ی_د_س_چ_پ_ج_ش'.split('_'),
+        weekdaysParseExact: true,
+        longDateFormat: {
+            LT: 'HH:mm',
+            LTS: 'HH:mm:ss',
+            L: 'DD/MM/YYYY',
+            LL: 'D MMMM YYYY',
+            LLL: 'D MMMM YYYY HH:mm',
+            LLLL: 'dddd, D MMMM YYYY HH:mm',
+        },
+        meridiemParse: /قبل از ظهر|بعد از ظهر/,
+        isPM: function (input) {
+            return /بعد از ظهر/.test(input);
+        },
+        meridiem: function (hour, minute, isLower) {
+            if (hour < 12) {
+                return 'قبل از ظهر';
+            } else {
+                return 'بعد از ظهر';
+            }
+        },
+        calendar: {
+            sameDay: '[امروز ساعت] LT',
+            nextDay: '[فردا ساعت] LT',
+            nextWeek: 'dddd [ساعت] LT',
+            lastDay: '[دیروز ساعت] LT',
+            lastWeek: 'dddd [پیش] [ساعت] LT',
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: 'در %s',
+            past: '%s پیش',
+            s: 'چند ثانیه',
+            ss: '%d ثانیه',
+            m: 'یک دقیقه',
+            mm: '%d دقیقه',
+            h: 'یک ساعت',
+            hh: '%d ساعت',
+            d: 'یک روز',
+            dd: '%d روز',
+            M: 'یک ماه',
+            MM: '%d ماه',
+            y: 'یک سال',
+            yy: '%d سال',
+        },
+        preparse: function (string) {
+            return string
+                .replace(/[۰-۹]/g, function (match) {
+                    return numberMap$4[match];
+                })
+                .replace(/،/g, ',');
+        },
+        postformat: function (string) {
+            return string
+                .replace(/\d/g, function (match) {
+                    return symbolMap$5[match];
+                })
+                .replace(/,/g, '،');
+        },
+        dayOfMonthOrdinalParse: /\d{1,2}م/,
+        ordinal: '%dم',
+        week: {
+            dow: 6, // Saturday is the first day of the week.
+            doy: 12, // The week that contains Jan 12th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    var numbersPast = 'nolla yksi kaksi kolme neljä viisi kuusi seitsemän kahdeksan yhdeksän'.split(
+            ' '
+        ),
+        numbersFuture = [
+            'nolla',
+            'yhden',
+            'kahden',
+            'kolmen',
+            'neljän',
+            'viiden',
+            'kuuden',
+            numbersPast[7],
+            numbersPast[8],
+            numbersPast[9],
+        ];
+    function translate$2(number, withoutSuffix, key, isFuture) {
+        var result = '';
+        switch (key) {
+            case 's':
+                return isFuture ? 'muutaman sekunnin' : 'muutama sekunti';
+            case 'ss':
+                result = isFuture ? 'sekunnin' : 'sekuntia';
+                break;
+            case 'm':
+                return isFuture ? 'minuutin' : 'minuutti';
+            case 'mm':
+                result = isFuture ? 'minuutin' : 'minuuttia';
+                break;
+            case 'h':
+                return isFuture ? 'tunnin' : 'tunti';
+            case 'hh':
+                result = isFuture ? 'tunnin' : 'tuntia';
+                break;
+            case 'd':
+                return isFuture ? 'päivän' : 'päivä';
+            case 'dd':
+                result = isFuture ? 'päivän' : 'päivää';
+                break;
+            case 'M':
+                return isFuture ? 'kuukauden' : 'kuukausi';
+            case 'MM':
+                result = isFuture ? 'kuukauden' : 'kuukautta';
+                break;
+            case 'y':
+                return isFuture ? 'vuoden' : 'vuosi';
+            case 'yy':
+                result = isFuture ? 'vuoden' : 'vuotta';
+                break;
+        }
+        result = verbalNumber(number, isFuture) + ' ' + result;
+        return result;
+    }
+    function verbalNumber(number, isFuture) {
+        return number < 10
+            ? isFuture
+                ? numbersFuture[number]
+                : numbersPast[number]
+            : number;
+    }
+
+    moment.defineLocale('fi', {
+        months: 'tammikuu_helmikuu_maaliskuu_huhtikuu_toukokuu_kesäkuu_heinäkuu_elokuu_syyskuu_lokakuu_marraskuu_joulukuu'.split(
+            '_'
+        ),
+        monthsShort: 'tammi_helmi_maalis_huhti_touko_kesä_heinä_elo_syys_loka_marras_joulu'.split(
+            '_'
+        ),
+        weekdays: 'sunnuntai_maanantai_tiistai_keskiviikko_torstai_perjantai_lauantai'.split(
+            '_'
+        ),
+        weekdaysShort: 'su_ma_ti_ke_to_pe_la'.split('_'),
+        weekdaysMin: 'su_ma_ti_ke_to_pe_la'.split('_'),
+        longDateFormat: {
+            LT: 'HH.mm',
+            LTS: 'HH.mm.ss',
+            L: 'DD.MM.YYYY',
+            LL: 'Do MMMM[ta] YYYY',
+            LLL: 'Do MMMM[ta] YYYY, [klo] HH.mm',
+            LLLL: 'dddd, Do MMMM[ta] YYYY, [klo] HH.mm',
+            l: 'D.M.YYYY',
+            ll: 'Do MMM YYYY',
+            lll: 'Do MMM YYYY, [klo] HH.mm',
+            llll: 'ddd, Do MMM YYYY, [klo] HH.mm',
+        },
+        calendar: {
+            sameDay: '[tänään] [klo] LT',
+            nextDay: '[huomenna] [klo] LT',
+            nextWeek: 'dddd [klo] LT',
+            lastDay: '[eilen] [klo] LT',
+            lastWeek: '[viime] dddd[na] [klo] LT',
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: '%s päästä',
+            past: '%s sitten',
+            s: translate$2,
+            ss: translate$2,
+            m: translate$2,
+            mm: translate$2,
+            h: translate$2,
+            hh: translate$2,
+            d: translate$2,
+            dd: translate$2,
+            M: translate$2,
+            MM: translate$2,
+            y: translate$2,
+            yy: translate$2,
+        },
+        dayOfMonthOrdinalParse: /\d{1,2}\./,
+        ordinal: '%d.',
+        week: {
+            dow: 1, // Monday is the first day of the week.
+            doy: 4, // The week that contains Jan 4th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    moment.defineLocale('fil', {
+        months: 'Enero_Pebrero_Marso_Abril_Mayo_Hunyo_Hulyo_Agosto_Setyembre_Oktubre_Nobyembre_Disyembre'.split(
+            '_'
+        ),
+        monthsShort: 'Ene_Peb_Mar_Abr_May_Hun_Hul_Ago_Set_Okt_Nob_Dis'.split('_'),
+        weekdays: 'Linggo_Lunes_Martes_Miyerkules_Huwebes_Biyernes_Sabado'.split(
+            '_'
+        ),
+        weekdaysShort: 'Lin_Lun_Mar_Miy_Huw_Biy_Sab'.split('_'),
+        weekdaysMin: 'Li_Lu_Ma_Mi_Hu_Bi_Sab'.split('_'),
+        longDateFormat: {
+            LT: 'HH:mm',
+            LTS: 'HH:mm:ss',
+            L: 'MM/D/YYYY',
+            LL: 'MMMM D, YYYY',
+            LLL: 'MMMM D, YYYY HH:mm',
+            LLLL: 'dddd, MMMM DD, YYYY HH:mm',
+        },
+        calendar: {
+            sameDay: 'LT [ngayong araw]',
+            nextDay: '[Bukas ng] LT',
+            nextWeek: 'LT [sa susunod na] dddd',
+            lastDay: 'LT [kahapon]',
+            lastWeek: 'LT [noong nakaraang] dddd',
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: 'sa loob ng %s',
+            past: '%s ang nakalipas',
+            s: 'ilang segundo',
+            ss: '%d segundo',
+            m: 'isang minuto',
+            mm: '%d minuto',
+            h: 'isang oras',
+            hh: '%d oras',
+            d: 'isang araw',
+            dd: '%d araw',
+            M: 'isang buwan',
+            MM: '%d buwan',
+            y: 'isang taon',
+            yy: '%d taon',
+        },
+        dayOfMonthOrdinalParse: /\d{1,2}/,
+        ordinal: function (number) {
+            return number;
+        },
+        week: {
+            dow: 1, // Monday is the first day of the week.
+            doy: 4, // The week that contains Jan 4th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    moment.defineLocale('fo', {
+        months: 'januar_februar_mars_apríl_mai_juni_juli_august_september_oktober_november_desember'.split(
+            '_'
+        ),
+        monthsShort: 'jan_feb_mar_apr_mai_jun_jul_aug_sep_okt_nov_des'.split('_'),
+        weekdays: 'sunnudagur_mánadagur_týsdagur_mikudagur_hósdagur_fríggjadagur_leygardagur'.split(
+            '_'
+        ),
+        weekdaysShort: 'sun_mán_týs_mik_hós_frí_ley'.split('_'),
+        weekdaysMin: 'su_má_tý_mi_hó_fr_le'.split('_'),
+        longDateFormat: {
+            LT: 'HH:mm',
+            LTS: 'HH:mm:ss',
+            L: 'DD/MM/YYYY',
+            LL: 'D MMMM YYYY',
+            LLL: 'D MMMM YYYY HH:mm',
+            LLLL: 'dddd D. MMMM, YYYY HH:mm',
+        },
+        calendar: {
+            sameDay: '[Í dag kl.] LT',
+            nextDay: '[Í morgin kl.] LT',
+            nextWeek: 'dddd [kl.] LT',
+            lastDay: '[Í gjár kl.] LT',
+            lastWeek: '[síðstu] dddd [kl] LT',
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: 'um %s',
+            past: '%s síðani',
+            s: 'fá sekund',
+            ss: '%d sekundir',
+            m: 'ein minuttur',
+            mm: '%d minuttir',
+            h: 'ein tími',
+            hh: '%d tímar',
+            d: 'ein dagur',
+            dd: '%d dagar',
+            M: 'ein mánaður',
+            MM: '%d mánaðir',
+            y: 'eitt ár',
+            yy: '%d ár',
+        },
+        dayOfMonthOrdinalParse: /\d{1,2}\./,
+        ordinal: '%d.',
+        week: {
+            dow: 1, // Monday is the first day of the week.
+            doy: 4, // The week that contains Jan 4th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    moment.defineLocale('fr-ca', {
+        months: 'janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre'.split(
+            '_'
+        ),
+        monthsShort: 'janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.'.split(
+            '_'
+        ),
+        monthsParseExact: true,
+        weekdays: 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'),
+        weekdaysShort: 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'),
+        weekdaysMin: 'di_lu_ma_me_je_ve_sa'.split('_'),
+        weekdaysParseExact: true,
+        longDateFormat: {
+            LT: 'HH:mm',
+            LTS: 'HH:mm:ss',
+            L: 'YYYY-MM-DD',
+            LL: 'D MMMM YYYY',
+            LLL: 'D MMMM YYYY HH:mm',
+            LLLL: 'dddd D MMMM YYYY HH:mm',
+        },
+        calendar: {
+            sameDay: '[Aujourd’hui à] LT',
+            nextDay: '[Demain à] LT',
+            nextWeek: 'dddd [à] LT',
+            lastDay: '[Hier à] LT',
+            lastWeek: 'dddd [dernier à] LT',
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: 'dans %s',
+            past: 'il y a %s',
+            s: 'quelques secondes',
+            ss: '%d secondes',
+            m: 'une minute',
+            mm: '%d minutes',
+            h: 'une heure',
+            hh: '%d heures',
+            d: 'un jour',
+            dd: '%d jours',
+            M: 'un mois',
+            MM: '%d mois',
+            y: 'un an',
+            yy: '%d ans',
+        },
+        dayOfMonthOrdinalParse: /\d{1,2}(er|e)/,
+        ordinal: function (number, period) {
+            switch (period) {
+                // Words with masculine grammatical gender: mois, trimestre, jour
+                default:
+                case 'M':
+                case 'Q':
+                case 'D':
+                case 'DDD':
+                case 'd':
+                    return number + (number === 1 ? 'er' : 'e');
+
+                // Words with feminine grammatical gender: semaine
+                case 'w':
+                case 'W':
+                    return number + (number === 1 ? 're' : 'e');
+            }
+        },
+    });
+
+    //! moment.js locale configuration
+
+    moment.defineLocale('fr-ch', {
+        months: 'janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre'.split(
+            '_'
+        ),
+        monthsShort: 'janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.'.split(
+            '_'
+        ),
+        monthsParseExact: true,
+        weekdays: 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'),
+        weekdaysShort: 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'),
+        weekdaysMin: 'di_lu_ma_me_je_ve_sa'.split('_'),
+        weekdaysParseExact: true,
+        longDateFormat: {
+            LT: 'HH:mm',
+            LTS: 'HH:mm:ss',
+            L: 'DD.MM.YYYY',
+            LL: 'D MMMM YYYY',
+            LLL: 'D MMMM YYYY HH:mm',
+            LLLL: 'dddd D MMMM YYYY HH:mm',
+        },
+        calendar: {
+            sameDay: '[Aujourd’hui à] LT',
+            nextDay: '[Demain à] LT',
+            nextWeek: 'dddd [à] LT',
+            lastDay: '[Hier à] LT',
+            lastWeek: 'dddd [dernier à] LT',
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: 'dans %s',
+            past: 'il y a %s',
+            s: 'quelques secondes',
+            ss: '%d secondes',
+            m: 'une minute',
+            mm: '%d minutes',
+            h: 'une heure',
+            hh: '%d heures',
+            d: 'un jour',
+            dd: '%d jours',
+            M: 'un mois',
+            MM: '%d mois',
+            y: 'un an',
+            yy: '%d ans',
+        },
+        dayOfMonthOrdinalParse: /\d{1,2}(er|e)/,
+        ordinal: function (number, period) {
+            switch (period) {
+                // Words with masculine grammatical gender: mois, trimestre, jour
+                default:
+                case 'M':
+                case 'Q':
+                case 'D':
+                case 'DDD':
+                case 'd':
+                    return number + (number === 1 ? 'er' : 'e');
+
+                // Words with feminine grammatical gender: semaine
+                case 'w':
+                case 'W':
+                    return number + (number === 1 ? 're' : 'e');
+            }
+        },
+        week: {
+            dow: 1, // Monday is the first day of the week.
+            doy: 4, // The week that contains Jan 4th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    var monthsStrictRegex$1 = /^(janvier|février|mars|avril|mai|juin|juillet|août|septembre|octobre|novembre|décembre)/i,
+        monthsShortStrictRegex$1 = /(janv\.?|févr\.?|mars|avr\.?|mai|juin|juil\.?|août|sept\.?|oct\.?|nov\.?|déc\.?)/i,
+        monthsRegex$5 = /(janv\.?|févr\.?|mars|avr\.?|mai|juin|juil\.?|août|sept\.?|oct\.?|nov\.?|déc\.?|janvier|février|mars|avril|mai|juin|juillet|août|septembre|octobre|novembre|décembre)/i,
+        monthsParse$5 = [
+            /^janv/i,
+            /^févr/i,
+            /^mars/i,
+            /^avr/i,
+            /^mai/i,
+            /^juin/i,
+            /^juil/i,
+            /^août/i,
+            /^sept/i,
+            /^oct/i,
+            /^nov/i,
+            /^déc/i,
+        ];
+
+    moment.defineLocale('fr', {
+        months: 'janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre'.split(
+            '_'
+        ),
+        monthsShort: 'janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.'.split(
+            '_'
+        ),
+        monthsRegex: monthsRegex$5,
+        monthsShortRegex: monthsRegex$5,
+        monthsStrictRegex: monthsStrictRegex$1,
+        monthsShortStrictRegex: monthsShortStrictRegex$1,
+        monthsParse: monthsParse$5,
+        longMonthsParse: monthsParse$5,
+        shortMonthsParse: monthsParse$5,
+        weekdays: 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'),
+        weekdaysShort: 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'),
+        weekdaysMin: 'di_lu_ma_me_je_ve_sa'.split('_'),
+        weekdaysParseExact: true,
+        longDateFormat: {
+            LT: 'HH:mm',
+            LTS: 'HH:mm:ss',
+            L: 'DD/MM/YYYY',
+            LL: 'D MMMM YYYY',
+            LLL: 'D MMMM YYYY HH:mm',
+            LLLL: 'dddd D MMMM YYYY HH:mm',
+        },
+        calendar: {
+            sameDay: '[Aujourd’hui à] LT',
+            nextDay: '[Demain à] LT',
+            nextWeek: 'dddd [à] LT',
+            lastDay: '[Hier à] LT',
+            lastWeek: 'dddd [dernier à] LT',
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: 'dans %s',
+            past: 'il y a %s',
+            s: 'quelques secondes',
+            ss: '%d secondes',
+            m: 'une minute',
+            mm: '%d minutes',
+            h: 'une heure',
+            hh: '%d heures',
+            d: 'un jour',
+            dd: '%d jours',
+            M: 'un mois',
+            MM: '%d mois',
+            y: 'un an',
+            yy: '%d ans',
+        },
+        dayOfMonthOrdinalParse: /\d{1,2}(er|)/,
+        ordinal: function (number, period) {
+            switch (period) {
+                // TODO: Return 'e' when day of month > 1. Move this case inside
+                // block for masculine words below.
+                // See https://github.com/moment/moment/issues/3375
+                case 'D':
+                    return number + (number === 1 ? 'er' : '');
+
+                // Words with masculine grammatical gender: mois, trimestre, jour
+                default:
+                case 'M':
+                case 'Q':
+                case 'DDD':
+                case 'd':
+                    return number + (number === 1 ? 'er' : 'e');
+
+                // Words with feminine grammatical gender: semaine
+                case 'w':
+                case 'W':
+                    return number + (number === 1 ? 're' : 'e');
+            }
+        },
+        week: {
+            dow: 1, // Monday is the first day of the week.
+            doy: 4, // The week that contains Jan 4th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    var monthsShortWithDots = 'jan._feb._mrt._apr._mai_jun._jul._aug._sep._okt._nov._des.'.split(
+            '_'
+        ),
+        monthsShortWithoutDots = 'jan_feb_mrt_apr_mai_jun_jul_aug_sep_okt_nov_des'.split(
+            '_'
+        );
+
+    moment.defineLocale('fy', {
+        months: 'jannewaris_febrewaris_maart_april_maaie_juny_july_augustus_septimber_oktober_novimber_desimber'.split(
+            '_'
+        ),
+        monthsShort: function (m, format) {
+            if (!m) {
+                return monthsShortWithDots;
+            } else if (/-MMM-/.test(format)) {
+                return monthsShortWithoutDots[m.month()];
+            } else {
+                return monthsShortWithDots[m.month()];
+            }
+        },
+        monthsParseExact: true,
+        weekdays: 'snein_moandei_tiisdei_woansdei_tongersdei_freed_sneon'.split(
+            '_'
+        ),
+        weekdaysShort: 'si._mo._ti._wo._to._fr._so.'.split('_'),
+        weekdaysMin: 'Si_Mo_Ti_Wo_To_Fr_So'.split('_'),
+        weekdaysParseExact: true,
+        longDateFormat: {
+            LT: 'HH:mm',
+            LTS: 'HH:mm:ss',
+            L: 'DD-MM-YYYY',
+            LL: 'D MMMM YYYY',
+            LLL: 'D MMMM YYYY HH:mm',
+            LLLL: 'dddd D MMMM YYYY HH:mm',
+        },
+        calendar: {
+            sameDay: '[hjoed om] LT',
+            nextDay: '[moarn om] LT',
+            nextWeek: 'dddd [om] LT',
+            lastDay: '[juster om] LT',
+            lastWeek: '[ôfrûne] dddd [om] LT',
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: 'oer %s',
+            past: '%s lyn',
+            s: 'in pear sekonden',
+            ss: '%d sekonden',
+            m: 'ien minút',
+            mm: '%d minuten',
+            h: 'ien oere',
+            hh: '%d oeren',
+            d: 'ien dei',
+            dd: '%d dagen',
+            M: 'ien moanne',
+            MM: '%d moannen',
+            y: 'ien jier',
+            yy: '%d jierren',
+        },
+        dayOfMonthOrdinalParse: /\d{1,2}(ste|de)/,
+        ordinal: function (number) {
+            return (
+                number +
+                (number === 1 || number === 8 || number >= 20 ? 'ste' : 'de')
+            );
+        },
+        week: {
+            dow: 1, // Monday is the first day of the week.
+            doy: 4, // The week that contains Jan 4th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    var months$5 = [
+            'Eanáir',
+            'Feabhra',
+            'Márta',
+            'Aibreán',
+            'Bealtaine',
+            'Meitheamh',
+            'Iúil',
+            'Lúnasa',
+            'Meán Fómhair',
+            'Deireadh Fómhair',
+            'Samhain',
+            'Nollaig',
+        ],
+        monthsShort$4 = [
+            'Ean',
+            'Feabh',
+            'Márt',
+            'Aib',
+            'Beal',
+            'Meith',
+            'Iúil',
+            'Lún',
+            'M.F.',
+            'D.F.',
+            'Samh',
+            'Noll',
+        ],
+        weekdays$1 = [
+            'Dé Domhnaigh',
+            'Dé Luain',
+            'Dé Máirt',
+            'Dé Céadaoin',
+            'Déardaoin',
+            'Dé hAoine',
+            'Dé Sathairn',
+        ],
+        weekdaysShort = ['Domh', 'Luan', 'Máirt', 'Céad', 'Déar', 'Aoine', 'Sath'],
+        weekdaysMin = ['Do', 'Lu', 'Má', 'Cé', 'Dé', 'A', 'Sa'];
+
+    moment.defineLocale('ga', {
+        months: months$5,
+        monthsShort: monthsShort$4,
+        monthsParseExact: true,
+        weekdays: weekdays$1,
+        weekdaysShort: weekdaysShort,
+        weekdaysMin: weekdaysMin,
+        longDateFormat: {
+            LT: 'HH:mm',
+            LTS: 'HH:mm:ss',
+            L: 'DD/MM/YYYY',
+            LL: 'D MMMM YYYY',
+            LLL: 'D MMMM YYYY HH:mm',
+            LLLL: 'dddd, D MMMM YYYY HH:mm',
+        },
+        calendar: {
+            sameDay: '[Inniu ag] LT',
+            nextDay: '[Amárach ag] LT',
+            nextWeek: 'dddd [ag] LT',
+            lastDay: '[Inné ag] LT',
+            lastWeek: 'dddd [seo caite] [ag] LT',
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: 'i %s',
+            past: '%s ó shin',
+            s: 'cúpla soicind',
+            ss: '%d soicind',
+            m: 'nóiméad',
+            mm: '%d nóiméad',
+            h: 'uair an chloig',
+            hh: '%d uair an chloig',
+            d: 'lá',
+            dd: '%d lá',
+            M: 'mí',
+            MM: '%d míonna',
+            y: 'bliain',
+            yy: '%d bliain',
+        },
+        dayOfMonthOrdinalParse: /\d{1,2}(d|na|mh)/,
+        ordinal: function (number) {
+            var output = number === 1 ? 'd' : number % 10 === 2 ? 'na' : 'mh';
+            return number + output;
+        },
+        week: {
+            dow: 1, // Monday is the first day of the week.
+            doy: 4, // The week that contains Jan 4th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    var months$6 = [
+            'Am Faoilleach',
+            'An Gearran',
+            'Am Màrt',
+            'An Giblean',
+            'An Cèitean',
+            'An t-Ògmhios',
+            'An t-Iuchar',
+            'An Lùnastal',
+            'An t-Sultain',
+            'An Dàmhair',
+            'An t-Samhain',
+            'An Dùbhlachd',
+        ],
+        monthsShort$5 = [
+            'Faoi',
+            'Gear',
+            'Màrt',
+            'Gibl',
+            'Cèit',
+            'Ògmh',
+            'Iuch',
+            'Lùn',
+            'Sult',
+            'Dàmh',
+            'Samh',
+            'Dùbh',
+        ],
+        weekdays$2 = [
+            'Didòmhnaich',
+            'Diluain',
+            'Dimàirt',
+            'Diciadain',
+            'Diardaoin',
+            'Dihaoine',
+            'Disathairne',
+        ],
+        weekdaysShort$1 = ['Did', 'Dil', 'Dim', 'Dic', 'Dia', 'Dih', 'Dis'],
+        weekdaysMin$1 = ['Dò', 'Lu', 'Mà', 'Ci', 'Ar', 'Ha', 'Sa'];
+
+    moment.defineLocale('gd', {
+        months: months$6,
+        monthsShort: monthsShort$5,
+        monthsParseExact: true,
+        weekdays: weekdays$2,
+        weekdaysShort: weekdaysShort$1,
+        weekdaysMin: weekdaysMin$1,
+        longDateFormat: {
+            LT: 'HH:mm',
+            LTS: 'HH:mm:ss',
+            L: 'DD/MM/YYYY',
+            LL: 'D MMMM YYYY',
+            LLL: 'D MMMM YYYY HH:mm',
+            LLLL: 'dddd, D MMMM YYYY HH:mm',
+        },
+        calendar: {
+            sameDay: '[An-diugh aig] LT',
+            nextDay: '[A-màireach aig] LT',
+            nextWeek: 'dddd [aig] LT',
+            lastDay: '[An-dè aig] LT',
+            lastWeek: 'dddd [seo chaidh] [aig] LT',
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: 'ann an %s',
+            past: 'bho chionn %s',
+            s: 'beagan diogan',
+            ss: '%d diogan',
+            m: 'mionaid',
+            mm: '%d mionaidean',
+            h: 'uair',
+            hh: '%d uairean',
+            d: 'latha',
+            dd: '%d latha',
+            M: 'mìos',
+            MM: '%d mìosan',
+            y: 'bliadhna',
+            yy: '%d bliadhna',
+        },
+        dayOfMonthOrdinalParse: /\d{1,2}(d|na|mh)/,
+        ordinal: function (number) {
+            var output = number === 1 ? 'd' : number % 10 === 2 ? 'na' : 'mh';
+            return number + output;
+        },
+        week: {
+            dow: 1, // Monday is the first day of the week.
+            doy: 4, // The week that contains Jan 4th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    moment.defineLocale('gl', {
+        months: 'xaneiro_febreiro_marzo_abril_maio_xuño_xullo_agosto_setembro_outubro_novembro_decembro'.split(
+            '_'
+        ),
+        monthsShort: 'xan._feb._mar._abr._mai._xuñ._xul._ago._set._out._nov._dec.'.split(
+            '_'
+        ),
+        monthsParseExact: true,
+        weekdays: 'domingo_luns_martes_mércores_xoves_venres_sábado'.split('_'),
+        weekdaysShort: 'dom._lun._mar._mér._xov._ven._sáb.'.split('_'),
+        weekdaysMin: 'do_lu_ma_mé_xo_ve_sá'.split('_'),
+        weekdaysParseExact: true,
+        longDateFormat: {
+            LT: 'H:mm',
+            LTS: 'H:mm:ss',
+            L: 'DD/MM/YYYY',
+            LL: 'D [de] MMMM [de] YYYY',
+            LLL: 'D [de] MMMM [de] YYYY H:mm',
+            LLLL: 'dddd, D [de] MMMM [de] YYYY H:mm',
+        },
+        calendar: {
+            sameDay: function () {
+                return '[hoxe ' + (this.hours() !== 1 ? 'ás' : 'á') + '] LT';
+            },
+            nextDay: function () {
+                return '[mañá ' + (this.hours() !== 1 ? 'ás' : 'á') + '] LT';
+            },
+            nextWeek: function () {
+                return 'dddd [' + (this.hours() !== 1 ? 'ás' : 'a') + '] LT';
+            },
+            lastDay: function () {
+                return '[onte ' + (this.hours() !== 1 ? 'á' : 'a') + '] LT';
+            },
+            lastWeek: function () {
+                return (
+                    '[o] dddd [pasado ' + (this.hours() !== 1 ? 'ás' : 'a') + '] LT'
+                );
+            },
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: function (str) {
+                if (str.indexOf('un') === 0) {
+                    return 'n' + str;
+                }
+                return 'en ' + str;
+            },
+            past: 'hai %s',
+            s: 'uns segundos',
+            ss: '%d segundos',
+            m: 'un minuto',
+            mm: '%d minutos',
+            h: 'unha hora',
+            hh: '%d horas',
+            d: 'un día',
+            dd: '%d días',
+            M: 'un mes',
+            MM: '%d meses',
+            y: 'un ano',
+            yy: '%d anos',
+        },
+        dayOfMonthOrdinalParse: /\d{1,2}º/,
+        ordinal: '%dº',
+        week: {
+            dow: 1, // Monday is the first day of the week.
+            doy: 4, // The week that contains Jan 4th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    function processRelativeTime$4(number, withoutSuffix, key, isFuture) {
+        var format = {
+            s: ['थोडया सॅकंडांनी', 'थोडे सॅकंड'],
+            ss: [number + ' सॅकंडांनी', number + ' सॅकंड'],
+            m: ['एका मिणटान', 'एक मिनूट'],
+            mm: [number + ' मिणटांनी', number + ' मिणटां'],
+            h: ['एका वरान', 'एक वर'],
+            hh: [number + ' वरांनी', number + ' वरां'],
+            d: ['एका दिसान', 'एक दीस'],
+            dd: [number + ' दिसांनी', number + ' दीस'],
+            M: ['एका म्हयन्यान', 'एक म्हयनो'],
+            MM: [number + ' म्हयन्यानी', number + ' म्हयने'],
+            y: ['एका वर्सान', 'एक वर्स'],
+            yy: [number + ' वर्सांनी', number + ' वर्सां'],
+        };
+        return isFuture ? format[key][0] : format[key][1];
+    }
+
+    moment.defineLocale('gom-deva', {
+        months: {
+            standalone: 'जानेवारी_फेब्रुवारी_मार्च_एप्रील_मे_जून_जुलय_ऑगस्ट_सप्टेंबर_ऑक्टोबर_नोव्हेंबर_डिसेंबर'.split(
+                '_'
+            ),
+            format: 'जानेवारीच्या_फेब्रुवारीच्या_मार्चाच्या_एप्रीलाच्या_मेयाच्या_जूनाच्या_जुलयाच्या_ऑगस्टाच्या_सप्टेंबराच्या_ऑक्टोबराच्या_नोव्हेंबराच्या_डिसेंबराच्या'.split(
+                '_'
+            ),
+            isFormat: /MMMM(\s)+D[oD]?/,
+        },
+        monthsShort: 'जाने._फेब्रु._मार्च_एप्री._मे_जून_जुल._ऑग._सप्टें._ऑक्टो._नोव्हें._डिसें.'.split(
+            '_'
+        ),
+        monthsParseExact: true,
+        weekdays: 'आयतार_सोमार_मंगळार_बुधवार_बिरेस्तार_सुक्रार_शेनवार'.split('_'),
+        weekdaysShort: 'आयत._सोम._मंगळ._बुध._ब्रेस्त._सुक्र._शेन.'.split('_'),
+        weekdaysMin: 'आ_सो_मं_बु_ब्रे_सु_शे'.split('_'),
+        weekdaysParseExact: true,
+        longDateFormat: {
+            LT: 'A h:mm [वाजतां]',
+            LTS: 'A h:mm:ss [वाजतां]',
+            L: 'DD-MM-YYYY',
+            LL: 'D MMMM YYYY',
+            LLL: 'D MMMM YYYY A h:mm [वाजतां]',
+            LLLL: 'dddd, MMMM Do, YYYY, A h:mm [वाजतां]',
+            llll: 'ddd, D MMM YYYY, A h:mm [वाजतां]',
+        },
+        calendar: {
+            sameDay: '[आयज] LT',
+            nextDay: '[फाल्यां] LT',
+            nextWeek: '[फुडलो] dddd[,] LT',
+            lastDay: '[काल] LT',
+            lastWeek: '[फाटलो] dddd[,] LT',
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: '%s',
+            past: '%s आदीं',
+            s: processRelativeTime$4,
+            ss: processRelativeTime$4,
+            m: processRelativeTime$4,
+            mm: processRelativeTime$4,
+            h: processRelativeTime$4,
+            hh: processRelativeTime$4,
+            d: processRelativeTime$4,
+            dd: processRelativeTime$4,
+            M: processRelativeTime$4,
+            MM: processRelativeTime$4,
+            y: processRelativeTime$4,
+            yy: processRelativeTime$4,
+        },
+        dayOfMonthOrdinalParse: /\d{1,2}(वेर)/,
+        ordinal: function (number, period) {
+            switch (period) {
+                // the ordinal 'वेर' only applies to day of the month
+                case 'D':
+                    return number + 'वेर';
+                default:
+                case 'M':
+                case 'Q':
+                case 'DDD':
+                case 'd':
+                case 'w':
+                case 'W':
+                    return number;
+            }
+        },
+        week: {
+            dow: 0, // Sunday is the first day of the week
+            doy: 3, // The week that contains Jan 4th is the first week of the year (7 + 0 - 4)
+        },
+        meridiemParse: /राती|सकाळीं|दनपारां|सांजे/,
+        meridiemHour: function (hour, meridiem) {
+            if (hour === 12) {
+                hour = 0;
+            }
+            if (meridiem === 'राती') {
+                return hour < 4 ? hour : hour + 12;
+            } else if (meridiem === 'सकाळीं') {
+                return hour;
+            } else if (meridiem === 'दनपारां') {
+                return hour > 12 ? hour : hour + 12;
+            } else if (meridiem === 'सांजे') {
+                return hour + 12;
+            }
+        },
+        meridiem: function (hour, minute, isLower) {
+            if (hour < 4) {
+                return 'राती';
+            } else if (hour < 12) {
+                return 'सकाळीं';
+            } else if (hour < 16) {
+                return 'दनपारां';
+            } else if (hour < 20) {
+                return 'सांजे';
+            } else {
+                return 'राती';
+            }
+        },
+    });
+
+    //! moment.js locale configuration
+
+    function processRelativeTime$5(number, withoutSuffix, key, isFuture) {
+        var format = {
+            s: ['thoddea sekondamni', 'thodde sekond'],
+            ss: [number + ' sekondamni', number + ' sekond'],
+            m: ['eka mintan', 'ek minut'],
+            mm: [number + ' mintamni', number + ' mintam'],
+            h: ['eka voran', 'ek vor'],
+            hh: [number + ' voramni', number + ' voram'],
+            d: ['eka disan', 'ek dis'],
+            dd: [number + ' disamni', number + ' dis'],
+            M: ['eka mhoinean', 'ek mhoino'],
+            MM: [number + ' mhoineamni', number + ' mhoine'],
+            y: ['eka vorsan', 'ek voros'],
+            yy: [number + ' vorsamni', number + ' vorsam'],
+        };
+        return isFuture ? format[key][0] : format[key][1];
+    }
+
+    moment.defineLocale('gom-latn', {
+        months: {
+            standalone: 'Janer_Febrer_Mars_Abril_Mai_Jun_Julai_Agost_Setembr_Otubr_Novembr_Dezembr'.split(
+                '_'
+            ),
+            format: 'Janerachea_Febrerachea_Marsachea_Abrilachea_Maiachea_Junachea_Julaiachea_Agostachea_Setembrachea_Otubrachea_Novembrachea_Dezembrachea'.split(
+                '_'
+            ),
+            isFormat: /MMMM(\s)+D[oD]?/,
+        },
+        monthsShort: 'Jan._Feb._Mars_Abr._Mai_Jun_Jul._Ago._Set._Otu._Nov._Dez.'.split(
+            '_'
+        ),
+        monthsParseExact: true,
+        weekdays: "Aitar_Somar_Mongllar_Budhvar_Birestar_Sukrar_Son'var".split('_'),
+        weekdaysShort: 'Ait._Som._Mon._Bud._Bre._Suk._Son.'.split('_'),
+        weekdaysMin: 'Ai_Sm_Mo_Bu_Br_Su_Sn'.split('_'),
+        weekdaysParseExact: true,
+        longDateFormat: {
+            LT: 'A h:mm [vazta]',
+            LTS: 'A h:mm:ss [vazta]',
+            L: 'DD-MM-YYYY',
+            LL: 'D MMMM YYYY',
+            LLL: 'D MMMM YYYY A h:mm [vazta]',
+            LLLL: 'dddd, MMMM Do, YYYY, A h:mm [vazta]',
+            llll: 'ddd, D MMM YYYY, A h:mm [vazta]',
+        },
+        calendar: {
+            sameDay: '[Aiz] LT',
+            nextDay: '[Faleam] LT',
+            nextWeek: '[Fuddlo] dddd[,] LT',
+            lastDay: '[Kal] LT',
+            lastWeek: '[Fattlo] dddd[,] LT',
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: '%s',
+            past: '%s adim',
+            s: processRelativeTime$5,
+            ss: processRelativeTime$5,
+            m: processRelativeTime$5,
+            mm: processRelativeTime$5,
+            h: processRelativeTime$5,
+            hh: processRelativeTime$5,
+            d: processRelativeTime$5,
+            dd: processRelativeTime$5,
+            M: processRelativeTime$5,
+            MM: processRelativeTime$5,
+            y: processRelativeTime$5,
+            yy: processRelativeTime$5,
+        },
+        dayOfMonthOrdinalParse: /\d{1,2}(er)/,
+        ordinal: function (number, period) {
+            switch (period) {
+                // the ordinal 'er' only applies to day of the month
+                case 'D':
+                    return number + 'er';
+                default:
+                case 'M':
+                case 'Q':
+                case 'DDD':
+                case 'd':
+                case 'w':
+                case 'W':
+                    return number;
+            }
+        },
+        week: {
+            dow: 0, // Sunday is the first day of the week
+            doy: 3, // The week that contains Jan 4th is the first week of the year (7 + 0 - 4)
+        },
+        meridiemParse: /rati|sokallim|donparam|sanje/,
+        meridiemHour: function (hour, meridiem) {
+            if (hour === 12) {
+                hour = 0;
+            }
+            if (meridiem === 'rati') {
+                return hour < 4 ? hour : hour + 12;
+            } else if (meridiem === 'sokallim') {
+                return hour;
+            } else if (meridiem === 'donparam') {
+                return hour > 12 ? hour : hour + 12;
+            } else if (meridiem === 'sanje') {
+                return hour + 12;
+            }
+        },
+        meridiem: function (hour, minute, isLower) {
+            if (hour < 4) {
+                return 'rati';
+            } else if (hour < 12) {
+                return 'sokallim';
+            } else if (hour < 16) {
+                return 'donparam';
+            } else if (hour < 20) {
+                return 'sanje';
+            } else {
+                return 'rati';
+            }
+        },
+    });
+
+    //! moment.js locale configuration
+
+    var symbolMap$6 = {
+            '1': '૧',
+            '2': '૨',
+            '3': '૩',
+            '4': '૪',
+            '5': '૫',
+            '6': '૬',
+            '7': '૭',
+            '8': '૮',
+            '9': '૯',
+            '0': '૦',
+        },
+        numberMap$5 = {
+            '૧': '1',
+            '૨': '2',
+            '૩': '3',
+            '૪': '4',
+            '૫': '5',
+            '૬': '6',
+            '૭': '7',
+            '૮': '8',
+            '૯': '9',
+            '૦': '0',
+        };
+
+    moment.defineLocale('gu', {
+        months: 'જાન્યુઆરી_ફેબ્રુઆરી_માર્ચ_એપ્રિલ_મે_જૂન_જુલાઈ_ઑગસ્ટ_સપ્ટેમ્બર_ઑક્ટ્બર_નવેમ્બર_ડિસેમ્બર'.split(
+            '_'
+        ),
+        monthsShort: 'જાન્યુ._ફેબ્રુ._માર્ચ_એપ્રિ._મે_જૂન_જુલા._ઑગ._સપ્ટે._ઑક્ટ્._નવે._ડિસે.'.split(
+            '_'
+        ),
+        monthsParseExact: true,
+        weekdays: 'રવિવાર_સોમવાર_મંગળવાર_બુધ્વાર_ગુરુવાર_શુક્રવાર_શનિવાર'.split(
+            '_'
+        ),
+        weekdaysShort: 'રવિ_સોમ_મંગળ_બુધ્_ગુરુ_શુક્ર_શનિ'.split('_'),
+        weekdaysMin: 'ર_સો_મં_બુ_ગુ_શુ_શ'.split('_'),
+        longDateFormat: {
+            LT: 'A h:mm વાગ્યે',
+            LTS: 'A h:mm:ss વાગ્યે',
+            L: 'DD/MM/YYYY',
+            LL: 'D MMMM YYYY',
+            LLL: 'D MMMM YYYY, A h:mm વાગ્યે',
+            LLLL: 'dddd, D MMMM YYYY, A h:mm વાગ્યે',
+        },
+        calendar: {
+            sameDay: '[આજ] LT',
+            nextDay: '[કાલે] LT',
+            nextWeek: 'dddd, LT',
+            lastDay: '[ગઇકાલે] LT',
+            lastWeek: '[પાછલા] dddd, LT',
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: '%s મા',
+            past: '%s પહેલા',
+            s: 'અમુક પળો',
+            ss: '%d સેકંડ',
+            m: 'એક મિનિટ',
+            mm: '%d મિનિટ',
+            h: 'એક કલાક',
+            hh: '%d કલાક',
+            d: 'એક દિવસ',
+            dd: '%d દિવસ',
+            M: 'એક મહિનો',
+            MM: '%d મહિનો',
+            y: 'એક વર્ષ',
+            yy: '%d વર્ષ',
+        },
+        preparse: function (string) {
+            return string.replace(/[૧૨૩૪૫૬૭૮૯૦]/g, function (match) {
+                return numberMap$5[match];
+            });
+        },
+        postformat: function (string) {
+            return string.replace(/\d/g, function (match) {
+                return symbolMap$6[match];
+            });
+        },
+        // Gujarati notation for meridiems are quite fuzzy in practice. While there exists
+        // a rigid notion of a 'Pahar' it is not used as rigidly in modern Gujarati.
+        meridiemParse: /રાત|બપોર|સવાર|સાંજ/,
+        meridiemHour: function (hour, meridiem) {
+            if (hour === 12) {
+                hour = 0;
+            }
+            if (meridiem === 'રાત') {
+                return hour < 4 ? hour : hour + 12;
+            } else if (meridiem === 'સવાર') {
+                return hour;
+            } else if (meridiem === 'બપોર') {
+                return hour >= 10 ? hour : hour + 12;
+            } else if (meridiem === 'સાંજ') {
+                return hour + 12;
+            }
+        },
+        meridiem: function (hour, minute, isLower) {
+            if (hour < 4) {
+                return 'રાત';
+            } else if (hour < 10) {
+                return 'સવાર';
+            } else if (hour < 17) {
+                return 'બપોર';
+            } else if (hour < 20) {
+                return 'સાંજ';
+            } else {
+                return 'રાત';
+            }
+        },
+        week: {
+            dow: 0, // Sunday is the first day of the week.
+            doy: 6, // The week that contains Jan 6th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    moment.defineLocale('he', {
+        months: 'ינואר_פברואר_מרץ_אפריל_מאי_יוני_יולי_אוגוסט_ספטמבר_אוקטובר_נובמבר_דצמבר'.split(
+            '_'
+        ),
+        monthsShort: 'ינו׳_פבר׳_מרץ_אפר׳_מאי_יוני_יולי_אוג׳_ספט׳_אוק׳_נוב׳_דצמ׳'.split(
+            '_'
+        ),
+        weekdays: 'ראשון_שני_שלישי_רביעי_חמישי_שישי_שבת'.split('_'),
+        weekdaysShort: 'א׳_ב׳_ג׳_ד׳_ה׳_ו׳_ש׳'.split('_'),
+        weekdaysMin: 'א_ב_ג_ד_ה_ו_ש'.split('_'),
+        longDateFormat: {
+            LT: 'HH:mm',
+            LTS: 'HH:mm:ss',
+            L: 'DD/MM/YYYY',
+            LL: 'D [ב]MMMM YYYY',
+            LLL: 'D [ב]MMMM YYYY HH:mm',
+            LLLL: 'dddd, D [ב]MMMM YYYY HH:mm',
+            l: 'D/M/YYYY',
+            ll: 'D MMM YYYY',
+            lll: 'D MMM YYYY HH:mm',
+            llll: 'ddd, D MMM YYYY HH:mm',
+        },
+        calendar: {
+            sameDay: '[היום ב־]LT',
+            nextDay: '[מחר ב־]LT',
+            nextWeek: 'dddd [בשעה] LT',
+            lastDay: '[אתמול ב־]LT',
+            lastWeek: '[ביום] dddd [האחרון בשעה] LT',
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: 'בעוד %s',
+            past: 'לפני %s',
+            s: 'מספר שניות',
+            ss: '%d שניות',
+            m: 'דקה',
+            mm: '%d דקות',
+            h: 'שעה',
+            hh: function (number) {
+                if (number === 2) {
+                    return 'שעתיים';
+                }
+                return number + ' שעות';
+            },
+            d: 'יום',
+            dd: function (number) {
+                if (number === 2) {
+                    return 'יומיים';
+                }
+                return number + ' ימים';
+            },
+            M: 'חודש',
+            MM: function (number) {
+                if (number === 2) {
+                    return 'חודשיים';
+                }
+                return number + ' חודשים';
+            },
+            y: 'שנה',
+            yy: function (number) {
+                if (number === 2) {
+                    return 'שנתיים';
+                } else if (number % 10 === 0 && number !== 10) {
+                    return number + ' שנה';
+                }
+                return number + ' שנים';
+            },
+        },
+        meridiemParse: /אחה"צ|לפנה"צ|אחרי הצהריים|לפני הצהריים|לפנות בוקר|בבוקר|בערב/i,
+        isPM: function (input) {
+            return /^(אחה"צ|אחרי הצהריים|בערב)$/.test(input);
+        },
+        meridiem: function (hour, minute, isLower) {
+            if (hour < 5) {
+                return 'לפנות בוקר';
+            } else if (hour < 10) {
+                return 'בבוקר';
+            } else if (hour < 12) {
+                return isLower ? 'לפנה"צ' : 'לפני הצהריים';
+            } else if (hour < 18) {
+                return isLower ? 'אחה"צ' : 'אחרי הצהריים';
+            } else {
+                return 'בערב';
+            }
+        },
+    });
+
+    //! moment.js locale configuration
+
+    var symbolMap$7 = {
+            '1': '१',
+            '2': '२',
+            '3': '३',
+            '4': '४',
+            '5': '५',
+            '6': '६',
+            '7': '७',
+            '8': '८',
+            '9': '९',
+            '0': '०',
+        },
+        numberMap$6 = {
+            '१': '1',
+            '२': '2',
+            '३': '3',
+            '४': '4',
+            '५': '5',
+            '६': '6',
+            '७': '7',
+            '८': '8',
+            '९': '9',
+            '०': '0',
+        };
+
+    moment.defineLocale('hi', {
+        months: 'जनवरी_फ़रवरी_मार्च_अप्रैल_मई_जून_जुलाई_अगस्त_सितम्बर_अक्टूबर_नवम्बर_दिसम्बर'.split(
+            '_'
+        ),
+        monthsShort: 'जन._फ़र._मार्च_अप्रै._मई_जून_जुल._अग._सित._अक्टू._नव._दिस.'.split(
+            '_'
+        ),
+        monthsParseExact: true,
+        weekdays: 'रविवार_सोमवार_मंगलवार_बुधवार_गुरूवार_शुक्रवार_शनिवार'.split('_'),
+        weekdaysShort: 'रवि_सोम_मंगल_बुध_गुरू_शुक्र_शनि'.split('_'),
+        weekdaysMin: 'र_सो_मं_बु_गु_शु_श'.split('_'),
+        longDateFormat: {
+            LT: 'A h:mm बजे',
+            LTS: 'A h:mm:ss बजे',
+            L: 'DD/MM/YYYY',
+            LL: 'D MMMM YYYY',
+            LLL: 'D MMMM YYYY, A h:mm बजे',
+            LLLL: 'dddd, D MMMM YYYY, A h:mm बजे',
+        },
+        calendar: {
+            sameDay: '[आज] LT',
+            nextDay: '[कल] LT',
+            nextWeek: 'dddd, LT',
+            lastDay: '[कल] LT',
+            lastWeek: '[पिछले] dddd, LT',
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: '%s में',
+            past: '%s पहले',
+            s: 'कुछ ही क्षण',
+            ss: '%d सेकंड',
+            m: 'एक मिनट',
+            mm: '%d मिनट',
+            h: 'एक घंटा',
+            hh: '%d घंटे',
+            d: 'एक दिन',
+            dd: '%d दिन',
+            M: 'एक महीने',
+            MM: '%d महीने',
+            y: 'एक वर्ष',
+            yy: '%d वर्ष',
+        },
+        preparse: function (string) {
+            return string.replace(/[१२३४५६७८९०]/g, function (match) {
+                return numberMap$6[match];
+            });
+        },
+        postformat: function (string) {
+            return string.replace(/\d/g, function (match) {
+                return symbolMap$7[match];
+            });
+        },
+        // Hindi notation for meridiems are quite fuzzy in practice. While there exists
+        // a rigid notion of a 'Pahar' it is not used as rigidly in modern Hindi.
+        meridiemParse: /रात|सुबह|दोपहर|शाम/,
+        meridiemHour: function (hour, meridiem) {
+            if (hour === 12) {
+                hour = 0;
+            }
+            if (meridiem === 'रात') {
+                return hour < 4 ? hour : hour + 12;
+            } else if (meridiem === 'सुबह') {
+                return hour;
+            } else if (meridiem === 'दोपहर') {
+                return hour >= 10 ? hour : hour + 12;
+            } else if (meridiem === 'शाम') {
+                return hour + 12;
+            }
+        },
+        meridiem: function (hour, minute, isLower) {
+            if (hour < 4) {
+                return 'रात';
+            } else if (hour < 10) {
+                return 'सुबह';
+            } else if (hour < 17) {
+                return 'दोपहर';
+            } else if (hour < 20) {
+                return 'शाम';
+            } else {
+                return 'रात';
+            }
+        },
+        week: {
+            dow: 0, // Sunday is the first day of the week.
+            doy: 6, // The week that contains Jan 6th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    function translate$3(number, withoutSuffix, key) {
+        var result = number + ' ';
+        switch (key) {
+            case 'ss':
+                if (number === 1) {
+                    result += 'sekunda';
+                } else if (number === 2 || number === 3 || number === 4) {
+                    result += 'sekunde';
+                } else {
+                    result += 'sekundi';
+                }
+                return result;
+            case 'm':
+                return withoutSuffix ? 'jedna minuta' : 'jedne minute';
+            case 'mm':
+                if (number === 1) {
+                    result += 'minuta';
+                } else if (number === 2 || number === 3 || number === 4) {
+                    result += 'minute';
+                } else {
+                    result += 'minuta';
+                }
+                return result;
+            case 'h':
+                return withoutSuffix ? 'jedan sat' : 'jednog sata';
+            case 'hh':
+                if (number === 1) {
+                    result += 'sat';
+                } else if (number === 2 || number === 3 || number === 4) {
+                    result += 'sata';
+                } else {
+                    result += 'sati';
+                }
+                return result;
+            case 'dd':
+                if (number === 1) {
+                    result += 'dan';
+                } else {
+                    result += 'dana';
+                }
+                return result;
+            case 'MM':
+                if (number === 1) {
+                    result += 'mjesec';
+                } else if (number === 2 || number === 3 || number === 4) {
+                    result += 'mjeseca';
+                } else {
+                    result += 'mjeseci';
+                }
+                return result;
+            case 'yy':
+                if (number === 1) {
+                    result += 'godina';
+                } else if (number === 2 || number === 3 || number === 4) {
+                    result += 'godine';
+                } else {
+                    result += 'godina';
+                }
+                return result;
+        }
+    }
+
+    moment.defineLocale('hr', {
+        months: {
+            format: 'siječnja_veljače_ožujka_travnja_svibnja_lipnja_srpnja_kolovoza_rujna_listopada_studenoga_prosinca'.split(
+                '_'
+            ),
+            standalone: 'siječanj_veljača_ožujak_travanj_svibanj_lipanj_srpanj_kolovoz_rujan_listopad_studeni_prosinac'.split(
+                '_'
+            ),
+        },
+        monthsShort: 'sij._velj._ožu._tra._svi._lip._srp._kol._ruj._lis._stu._pro.'.split(
+            '_'
+        ),
+        monthsParseExact: true,
+        weekdays: 'nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota'.split(
+            '_'
+        ),
+        weekdaysShort: 'ned._pon._uto._sri._čet._pet._sub.'.split('_'),
+        weekdaysMin: 'ne_po_ut_sr_če_pe_su'.split('_'),
+        weekdaysParseExact: true,
+        longDateFormat: {
+            LT: 'H:mm',
+            LTS: 'H:mm:ss',
+            L: 'DD.MM.YYYY',
+            LL: 'Do MMMM YYYY',
+            LLL: 'Do MMMM YYYY H:mm',
+            LLLL: 'dddd, Do MMMM YYYY H:mm',
+        },
+        calendar: {
+            sameDay: '[danas u] LT',
+            nextDay: '[sutra u] LT',
+            nextWeek: function () {
+                switch (this.day()) {
+                    case 0:
+                        return '[u] [nedjelju] [u] LT';
+                    case 3:
+                        return '[u] [srijedu] [u] LT';
+                    case 6:
+                        return '[u] [subotu] [u] LT';
+                    case 1:
+                    case 2:
+                    case 4:
+                    case 5:
+                        return '[u] dddd [u] LT';
+                }
+            },
+            lastDay: '[jučer u] LT',
+            lastWeek: function () {
+                switch (this.day()) {
+                    case 0:
+                        return '[prošlu] [nedjelju] [u] LT';
+                    case 3:
+                        return '[prošlu] [srijedu] [u] LT';
+                    case 6:
+                        return '[prošle] [subote] [u] LT';
+                    case 1:
+                    case 2:
+                    case 4:
+                    case 5:
+                        return '[prošli] dddd [u] LT';
+                }
+            },
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: 'za %s',
+            past: 'prije %s',
+            s: 'par sekundi',
+            ss: translate$3,
+            m: translate$3,
+            mm: translate$3,
+            h: translate$3,
+            hh: translate$3,
+            d: 'dan',
+            dd: translate$3,
+            M: 'mjesec',
+            MM: translate$3,
+            y: 'godinu',
+            yy: translate$3,
+        },
+        dayOfMonthOrdinalParse: /\d{1,2}\./,
+        ordinal: '%d.',
+        week: {
+            dow: 1, // Monday is the first day of the week.
+            doy: 7, // The week that contains Jan 7th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    var weekEndings = 'vasárnap hétfőn kedden szerdán csütörtökön pénteken szombaton'.split(
+        ' '
+    );
+    function translate$4(number, withoutSuffix, key, isFuture) {
+        var num = number;
+        switch (key) {
+            case 's':
+                return isFuture || withoutSuffix
+                    ? 'néhány másodperc'
+                    : 'néhány másodperce';
+            case 'ss':
+                return num + (isFuture || withoutSuffix)
+                    ? ' másodperc'
+                    : ' másodperce';
+            case 'm':
+                return 'egy' + (isFuture || withoutSuffix ? ' perc' : ' perce');
+            case 'mm':
+                return num + (isFuture || withoutSuffix ? ' perc' : ' perce');
+            case 'h':
+                return 'egy' + (isFuture || withoutSuffix ? ' óra' : ' órája');
+            case 'hh':
+                return num + (isFuture || withoutSuffix ? ' óra' : ' órája');
+            case 'd':
+                return 'egy' + (isFuture || withoutSuffix ? ' nap' : ' napja');
+            case 'dd':
+                return num + (isFuture || withoutSuffix ? ' nap' : ' napja');
+            case 'M':
+                return 'egy' + (isFuture || withoutSuffix ? ' hónap' : ' hónapja');
+            case 'MM':
+                return num + (isFuture || withoutSuffix ? ' hónap' : ' hónapja');
+            case 'y':
+                return 'egy' + (isFuture || withoutSuffix ? ' év' : ' éve');
+            case 'yy':
+                return num + (isFuture || withoutSuffix ? ' év' : ' éve');
+        }
+        return '';
+    }
+    function week(isFuture) {
+        return (
+            (isFuture ? '' : '[múlt] ') +
+            '[' +
+            weekEndings[this.day()] +
+            '] LT[-kor]'
+        );
+    }
+
+    moment.defineLocale('hu', {
+        months: 'január_február_március_április_május_június_július_augusztus_szeptember_október_november_december'.split(
+            '_'
+        ),
+        monthsShort: 'jan_feb_márc_ápr_máj_jún_júl_aug_szept_okt_nov_dec'.split(
+            '_'
+        ),
+        weekdays: 'vasárnap_hétfő_kedd_szerda_csütörtök_péntek_szombat'.split('_'),
+        weekdaysShort: 'vas_hét_kedd_sze_csüt_pén_szo'.split('_'),
+        weekdaysMin: 'v_h_k_sze_cs_p_szo'.split('_'),
+        longDateFormat: {
+            LT: 'H:mm',
+            LTS: 'H:mm:ss',
+            L: 'YYYY.MM.DD.',
+            LL: 'YYYY. MMMM D.',
+            LLL: 'YYYY. MMMM D. H:mm',
+            LLLL: 'YYYY. MMMM D., dddd H:mm',
+        },
+        meridiemParse: /de|du/i,
+        isPM: function (input) {
+            return input.charAt(1).toLowerCase() === 'u';
+        },
+        meridiem: function (hours, minutes, isLower) {
+            if (hours < 12) {
+                return isLower === true ? 'de' : 'DE';
+            } else {
+                return isLower === true ? 'du' : 'DU';
+            }
+        },
+        calendar: {
+            sameDay: '[ma] LT[-kor]',
+            nextDay: '[holnap] LT[-kor]',
+            nextWeek: function () {
+                return week.call(this, true);
+            },
+            lastDay: '[tegnap] LT[-kor]',
+            lastWeek: function () {
+                return week.call(this, false);
+            },
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: '%s múlva',
+            past: '%s',
+            s: translate$4,
+            ss: translate$4,
+            m: translate$4,
+            mm: translate$4,
+            h: translate$4,
+            hh: translate$4,
+            d: translate$4,
+            dd: translate$4,
+            M: translate$4,
+            MM: translate$4,
+            y: translate$4,
+            yy: translate$4,
+        },
+        dayOfMonthOrdinalParse: /\d{1,2}\./,
+        ordinal: '%d.',
+        week: {
+            dow: 1, // Monday is the first day of the week.
+            doy: 4, // The week that contains Jan 4th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    moment.defineLocale('hy-am', {
+        months: {
+            format: 'հունվարի_փետրվարի_մարտի_ապրիլի_մայիսի_հունիսի_հուլիսի_օգոստոսի_սեպտեմբերի_հոկտեմբերի_նոյեմբերի_դեկտեմբերի'.split(
+                '_'
+            ),
+            standalone: 'հունվար_փետրվար_մարտ_ապրիլ_մայիս_հունիս_հուլիս_օգոստոս_սեպտեմբեր_հոկտեմբեր_նոյեմբեր_դեկտեմբեր'.split(
+                '_'
+            ),
+        },
+        monthsShort: 'հնվ_փտր_մրտ_ապր_մյս_հնս_հլս_օգս_սպտ_հկտ_նմբ_դկտ'.split('_'),
+        weekdays: 'կիրակի_երկուշաբթի_երեքշաբթի_չորեքշաբթի_հինգշաբթի_ուրբաթ_շաբաթ'.split(
+            '_'
+        ),
+        weekdaysShort: 'կրկ_երկ_երք_չրք_հնգ_ուրբ_շբթ'.split('_'),
+        weekdaysMin: 'կրկ_երկ_երք_չրք_հնգ_ուրբ_շբթ'.split('_'),
+        longDateFormat: {
+            LT: 'HH:mm',
+            LTS: 'HH:mm:ss',
+            L: 'DD.MM.YYYY',
+            LL: 'D MMMM YYYY թ.',
+            LLL: 'D MMMM YYYY թ., HH:mm',
+            LLLL: 'dddd, D MMMM YYYY թ., HH:mm',
+        },
+        calendar: {
+            sameDay: '[այսօր] LT',
+            nextDay: '[վաղը] LT',
+            lastDay: '[երեկ] LT',
+            nextWeek: function () {
+                return 'dddd [օրը ժամը] LT';
+            },
+            lastWeek: function () {
+                return '[անցած] dddd [օրը ժամը] LT';
+            },
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: '%s հետո',
+            past: '%s առաջ',
+            s: 'մի քանի վայրկյան',
+            ss: '%d վայրկյան',
+            m: 'րոպե',
+            mm: '%d րոպե',
+            h: 'ժամ',
+            hh: '%d ժամ',
+            d: 'օր',
+            dd: '%d օր',
+            M: 'ամիս',
+            MM: '%d ամիս',
+            y: 'տարի',
+            yy: '%d տարի',
+        },
+        meridiemParse: /գիշերվա|առավոտվա|ցերեկվա|երեկոյան/,
+        isPM: function (input) {
+            return /^(ցերեկվա|երեկոյան)$/.test(input);
+        },
+        meridiem: function (hour) {
+            if (hour < 4) {
+                return 'գիշերվա';
+            } else if (hour < 12) {
+                return 'առավոտվա';
+            } else if (hour < 17) {
+                return 'ցերեկվա';
+            } else {
+                return 'երեկոյան';
+            }
+        },
+        dayOfMonthOrdinalParse: /\d{1,2}|\d{1,2}-(ին|րդ)/,
+        ordinal: function (number, period) {
+            switch (period) {
+                case 'DDD':
+                case 'w':
+                case 'W':
+                case 'DDDo':
+                    if (number === 1) {
+                        return number + '-ին';
+                    }
+                    return number + '-րդ';
+                default:
+                    return number;
+            }
+        },
+        week: {
+            dow: 1, // Monday is the first day of the week.
+            doy: 7, // The week that contains Jan 7th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    moment.defineLocale('id', {
+        months: 'Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_November_Desember'.split(
+            '_'
+        ),
+        monthsShort: 'Jan_Feb_Mar_Apr_Mei_Jun_Jul_Agt_Sep_Okt_Nov_Des'.split('_'),
+        weekdays: 'Minggu_Senin_Selasa_Rabu_Kamis_Jumat_Sabtu'.split('_'),
+        weekdaysShort: 'Min_Sen_Sel_Rab_Kam_Jum_Sab'.split('_'),
+        weekdaysMin: 'Mg_Sn_Sl_Rb_Km_Jm_Sb'.split('_'),
+        longDateFormat: {
+            LT: 'HH.mm',
+            LTS: 'HH.mm.ss',
+            L: 'DD/MM/YYYY',
+            LL: 'D MMMM YYYY',
+            LLL: 'D MMMM YYYY [pukul] HH.mm',
+            LLLL: 'dddd, D MMMM YYYY [pukul] HH.mm',
+        },
+        meridiemParse: /pagi|siang|sore|malam/,
+        meridiemHour: function (hour, meridiem) {
+            if (hour === 12) {
+                hour = 0;
+            }
+            if (meridiem === 'pagi') {
+                return hour;
+            } else if (meridiem === 'siang') {
+                return hour >= 11 ? hour : hour + 12;
+            } else if (meridiem === 'sore' || meridiem === 'malam') {
+                return hour + 12;
+            }
+        },
+        meridiem: function (hours, minutes, isLower) {
+            if (hours < 11) {
+                return 'pagi';
+            } else if (hours < 15) {
+                return 'siang';
+            } else if (hours < 19) {
+                return 'sore';
+            } else {
+                return 'malam';
+            }
+        },
+        calendar: {
+            sameDay: '[Hari ini pukul] LT',
+            nextDay: '[Besok pukul] LT',
+            nextWeek: 'dddd [pukul] LT',
+            lastDay: '[Kemarin pukul] LT',
+            lastWeek: 'dddd [lalu pukul] LT',
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: 'dalam %s',
+            past: '%s yang lalu',
+            s: 'beberapa detik',
+            ss: '%d detik',
+            m: 'semenit',
+            mm: '%d menit',
+            h: 'sejam',
+            hh: '%d jam',
+            d: 'sehari',
+            dd: '%d hari',
+            M: 'sebulan',
+            MM: '%d bulan',
+            y: 'setahun',
+            yy: '%d tahun',
+        },
+        week: {
+            dow: 0, // Sunday is the first day of the week.
+            doy: 6, // The week that contains Jan 6th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    function plural$2(n) {
+        if (n % 100 === 11) {
+            return true;
+        } else if (n % 10 === 1) {
+            return false;
+        }
+        return true;
+    }
+    function translate$5(number, withoutSuffix, key, isFuture) {
+        var result = number + ' ';
+        switch (key) {
+            case 's':
+                return withoutSuffix || isFuture
+                    ? 'nokkrar sekúndur'
+                    : 'nokkrum sekúndum';
+            case 'ss':
+                if (plural$2(number)) {
+                    return (
+                        result +
+                        (withoutSuffix || isFuture ? 'sekúndur' : 'sekúndum')
+                    );
+                }
+                return result + 'sekúnda';
+            case 'm':
+                return withoutSuffix ? 'mínúta' : 'mínútu';
+            case 'mm':
+                if (plural$2(number)) {
+                    return (
+                        result + (withoutSuffix || isFuture ? 'mínútur' : 'mínútum')
+                    );
+                } else if (withoutSuffix) {
+                    return result + 'mínúta';
+                }
+                return result + 'mínútu';
+            case 'hh':
+                if (plural$2(number)) {
+                    return (
+                        result +
+                        (withoutSuffix || isFuture
+                            ? 'klukkustundir'
+                            : 'klukkustundum')
+                    );
+                }
+                return result + 'klukkustund';
+            case 'd':
+                if (withoutSuffix) {
+                    return 'dagur';
+                }
+                return isFuture ? 'dag' : 'degi';
+            case 'dd':
+                if (plural$2(number)) {
+                    if (withoutSuffix) {
+                        return result + 'dagar';
+                    }
+                    return result + (isFuture ? 'daga' : 'dögum');
+                } else if (withoutSuffix) {
+                    return result + 'dagur';
+                }
+                return result + (isFuture ? 'dag' : 'degi');
+            case 'M':
+                if (withoutSuffix) {
+                    return 'mánuður';
+                }
+                return isFuture ? 'mánuð' : 'mánuði';
+            case 'MM':
+                if (plural$2(number)) {
+                    if (withoutSuffix) {
+                        return result + 'mánuðir';
+                    }
+                    return result + (isFuture ? 'mánuði' : 'mánuðum');
+                } else if (withoutSuffix) {
+                    return result + 'mánuður';
+                }
+                return result + (isFuture ? 'mánuð' : 'mánuði');
+            case 'y':
+                return withoutSuffix || isFuture ? 'ár' : 'ári';
+            case 'yy':
+                if (plural$2(number)) {
+                    return result + (withoutSuffix || isFuture ? 'ár' : 'árum');
+                }
+                return result + (withoutSuffix || isFuture ? 'ár' : 'ári');
+        }
+    }
+
+    moment.defineLocale('is', {
+        months: 'janúar_febrúar_mars_apríl_maí_júní_júlí_ágúst_september_október_nóvember_desember'.split(
+            '_'
+        ),
+        monthsShort: 'jan_feb_mar_apr_maí_jún_júl_ágú_sep_okt_nóv_des'.split('_'),
+        weekdays: 'sunnudagur_mánudagur_þriðjudagur_miðvikudagur_fimmtudagur_föstudagur_laugardagur'.split(
+            '_'
+        ),
+        weekdaysShort: 'sun_mán_þri_mið_fim_fös_lau'.split('_'),
+        weekdaysMin: 'Su_Má_Þr_Mi_Fi_Fö_La'.split('_'),
+        longDateFormat: {
+            LT: 'H:mm',
+            LTS: 'H:mm:ss',
+            L: 'DD.MM.YYYY',
+            LL: 'D. MMMM YYYY',
+            LLL: 'D. MMMM YYYY [kl.] H:mm',
+            LLLL: 'dddd, D. MMMM YYYY [kl.] H:mm',
+        },
+        calendar: {
+            sameDay: '[í dag kl.] LT',
+            nextDay: '[á morgun kl.] LT',
+            nextWeek: 'dddd [kl.] LT',
+            lastDay: '[í gær kl.] LT',
+            lastWeek: '[síðasta] dddd [kl.] LT',
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: 'eftir %s',
+            past: 'fyrir %s síðan',
+            s: translate$5,
+            ss: translate$5,
+            m: translate$5,
+            mm: translate$5,
+            h: 'klukkustund',
+            hh: translate$5,
+            d: translate$5,
+            dd: translate$5,
+            M: translate$5,
+            MM: translate$5,
+            y: translate$5,
+            yy: translate$5,
+        },
+        dayOfMonthOrdinalParse: /\d{1,2}\./,
+        ordinal: '%d.',
+        week: {
+            dow: 1, // Monday is the first day of the week.
+            doy: 4, // The week that contains Jan 4th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    moment.defineLocale('it-ch', {
+        months: 'gennaio_febbraio_marzo_aprile_maggio_giugno_luglio_agosto_settembre_ottobre_novembre_dicembre'.split(
+            '_'
+        ),
+        monthsShort: 'gen_feb_mar_apr_mag_giu_lug_ago_set_ott_nov_dic'.split('_'),
+        weekdays: 'domenica_lunedì_martedì_mercoledì_giovedì_venerdì_sabato'.split(
+            '_'
+        ),
+        weekdaysShort: 'dom_lun_mar_mer_gio_ven_sab'.split('_'),
+        weekdaysMin: 'do_lu_ma_me_gi_ve_sa'.split('_'),
+        longDateFormat: {
+            LT: 'HH:mm',
+            LTS: 'HH:mm:ss',
+            L: 'DD.MM.YYYY',
+            LL: 'D MMMM YYYY',
+            LLL: 'D MMMM YYYY HH:mm',
+            LLLL: 'dddd D MMMM YYYY HH:mm',
+        },
+        calendar: {
+            sameDay: '[Oggi alle] LT',
+            nextDay: '[Domani alle] LT',
+            nextWeek: 'dddd [alle] LT',
+            lastDay: '[Ieri alle] LT',
+            lastWeek: function () {
+                switch (this.day()) {
+                    case 0:
+                        return '[la scorsa] dddd [alle] LT';
+                    default:
+                        return '[lo scorso] dddd [alle] LT';
+                }
+            },
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: function (s) {
+                return (/^[0-9].+$/.test(s) ? 'tra' : 'in') + ' ' + s;
+            },
+            past: '%s fa',
+            s: 'alcuni secondi',
+            ss: '%d secondi',
+            m: 'un minuto',
+            mm: '%d minuti',
+            h: "un'ora",
+            hh: '%d ore',
+            d: 'un giorno',
+            dd: '%d giorni',
+            M: 'un mese',
+            MM: '%d mesi',
+            y: 'un anno',
+            yy: '%d anni',
+        },
+        dayOfMonthOrdinalParse: /\d{1,2}º/,
+        ordinal: '%dº',
+        week: {
+            dow: 1, // Monday is the first day of the week.
+            doy: 4, // The week that contains Jan 4th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    moment.defineLocale('it', {
+        months: 'gennaio_febbraio_marzo_aprile_maggio_giugno_luglio_agosto_settembre_ottobre_novembre_dicembre'.split(
+            '_'
+        ),
+        monthsShort: 'gen_feb_mar_apr_mag_giu_lug_ago_set_ott_nov_dic'.split('_'),
+        weekdays: 'domenica_lunedì_martedì_mercoledì_giovedì_venerdì_sabato'.split(
+            '_'
+        ),
+        weekdaysShort: 'dom_lun_mar_mer_gio_ven_sab'.split('_'),
+        weekdaysMin: 'do_lu_ma_me_gi_ve_sa'.split('_'),
+        longDateFormat: {
+            LT: 'HH:mm',
+            LTS: 'HH:mm:ss',
+            L: 'DD/MM/YYYY',
+            LL: 'D MMMM YYYY',
+            LLL: 'D MMMM YYYY HH:mm',
+            LLLL: 'dddd D MMMM YYYY HH:mm',
+        },
+        calendar: {
+            sameDay: function () {
+                return (
+                    '[Oggi a' +
+                    (this.hours() > 1 ? 'lle ' : this.hours() === 0 ? ' ' : "ll'") +
+                    ']LT'
+                );
+            },
+            nextDay: function () {
+                return (
+                    '[Domani a' +
+                    (this.hours() > 1 ? 'lle ' : this.hours() === 0 ? ' ' : "ll'") +
+                    ']LT'
+                );
+            },
+            nextWeek: function () {
+                return (
+                    'dddd [a' +
+                    (this.hours() > 1 ? 'lle ' : this.hours() === 0 ? ' ' : "ll'") +
+                    ']LT'
+                );
+            },
+            lastDay: function () {
+                return (
+                    '[Ieri a' +
+                    (this.hours() > 1 ? 'lle ' : this.hours() === 0 ? ' ' : "ll'") +
+                    ']LT'
+                );
+            },
+            lastWeek: function () {
+                switch (this.day()) {
+                    case 0:
+                        return (
+                            '[La scorsa] dddd [a' +
+                            (this.hours() > 1
+                                ? 'lle '
+                                : this.hours() === 0
+                                ? ' '
+                                : "ll'") +
+                            ']LT'
+                        );
+                    default:
+                        return (
+                            '[Lo scorso] dddd [a' +
+                            (this.hours() > 1
+                                ? 'lle '
+                                : this.hours() === 0
+                                ? ' '
+                                : "ll'") +
+                            ']LT'
+                        );
+                }
+            },
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: 'tra %s',
+            past: '%s fa',
+            s: 'alcuni secondi',
+            ss: '%d secondi',
+            m: 'un minuto',
+            mm: '%d minuti',
+            h: "un'ora",
+            hh: '%d ore',
+            d: 'un giorno',
+            dd: '%d giorni',
+            M: 'un mese',
+            MM: '%d mesi',
+            y: 'un anno',
+            yy: '%d anni',
+        },
+        dayOfMonthOrdinalParse: /\d{1,2}º/,
+        ordinal: '%dº',
+        week: {
+            dow: 1, // Monday is the first day of the week.
+            doy: 4, // The week that contains Jan 4th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    moment.defineLocale('ja', {
+        eras: [
+            {
+                since: '2019-05-01',
+                offset: 1,
+                name: '令和',
+                narrow: '㋿',
+                abbr: 'R',
+            },
+            {
+                since: '1989-01-08',
+                until: '2019-04-30',
+                offset: 1,
+                name: '平成',
+                narrow: '㍻',
+                abbr: 'H',
+            },
+            {
+                since: '1926-12-25',
+                until: '1989-01-07',
+                offset: 1,
+                name: '昭和',
+                narrow: '㍼',
+                abbr: 'S',
+            },
+            {
+                since: '1912-07-30',
+                until: '1926-12-24',
+                offset: 1,
+                name: '大正',
+                narrow: '㍽',
+                abbr: 'T',
+            },
+            {
+                since: '1873-01-01',
+                until: '1912-07-29',
+                offset: 6,
+                name: '明治',
+                narrow: '㍾',
+                abbr: 'M',
+            },
+            {
+                since: '0001-01-01',
+                until: '1873-12-31',
+                offset: 1,
+                name: '西暦',
+                narrow: 'AD',
+                abbr: 'AD',
+            },
+            {
+                since: '0000-12-31',
+                until: -Infinity,
+                offset: 1,
+                name: '紀元前',
+                narrow: 'BC',
+                abbr: 'BC',
+            },
+        ],
+        eraYearOrdinalRegex: /(元|\d+)年/,
+        eraYearOrdinalParse: function (input, match) {
+            return match[1] === '元' ? 1 : parseInt(match[1] || input, 10);
+        },
+        months: '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'),
+        monthsShort: '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split(
+            '_'
+        ),
+        weekdays: '日曜日_月曜日_火曜日_水曜日_木曜日_金曜日_土曜日'.split('_'),
+        weekdaysShort: '日_月_火_水_木_金_土'.split('_'),
+        weekdaysMin: '日_月_火_水_木_金_土'.split('_'),
+        longDateFormat: {
+            LT: 'HH:mm',
+            LTS: 'HH:mm:ss',
+            L: 'YYYY/MM/DD',
+            LL: 'YYYY年M月D日',
+            LLL: 'YYYY年M月D日 HH:mm',
+            LLLL: 'YYYY年M月D日 dddd HH:mm',
+            l: 'YYYY/MM/DD',
+            ll: 'YYYY年M月D日',
+            lll: 'YYYY年M月D日 HH:mm',
+            llll: 'YYYY年M月D日(ddd) HH:mm',
+        },
+        meridiemParse: /午前|午後/i,
+        isPM: function (input) {
+            return input === '午後';
+        },
+        meridiem: function (hour, minute, isLower) {
+            if (hour < 12) {
+                return '午前';
+            } else {
+                return '午後';
+            }
+        },
+        calendar: {
+            sameDay: '[今日] LT',
+            nextDay: '[明日] LT',
+            nextWeek: function (now) {
+                if (now.week() !== this.week()) {
+                    return '[来週]dddd LT';
+                } else {
+                    return 'dddd LT';
+                }
+            },
+            lastDay: '[昨日] LT',
+            lastWeek: function (now) {
+                if (this.week() !== now.week()) {
+                    return '[先週]dddd LT';
+                } else {
+                    return 'dddd LT';
+                }
+            },
+            sameElse: 'L',
+        },
+        dayOfMonthOrdinalParse: /\d{1,2}日/,
+        ordinal: function (number, period) {
+            switch (period) {
+                case 'y':
+                    return number === 1 ? '元年' : number + '年';
+                case 'd':
+                case 'D':
+                case 'DDD':
+                    return number + '日';
+                default:
+                    return number;
+            }
+        },
+        relativeTime: {
+            future: '%s後',
+            past: '%s前',
+            s: '数秒',
+            ss: '%d秒',
+            m: '1分',
+            mm: '%d分',
+            h: '1時間',
+            hh: '%d時間',
+            d: '1日',
+            dd: '%d日',
+            M: '1ヶ月',
+            MM: '%dヶ月',
+            y: '1年',
+            yy: '%d年',
+        },
+    });
+
+    //! moment.js locale configuration
+
+    moment.defineLocale('jv', {
+        months: 'Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_Nopember_Desember'.split(
+            '_'
+        ),
+        monthsShort: 'Jan_Feb_Mar_Apr_Mei_Jun_Jul_Ags_Sep_Okt_Nop_Des'.split('_'),
+        weekdays: 'Minggu_Senen_Seloso_Rebu_Kemis_Jemuwah_Septu'.split('_'),
+        weekdaysShort: 'Min_Sen_Sel_Reb_Kem_Jem_Sep'.split('_'),
+        weekdaysMin: 'Mg_Sn_Sl_Rb_Km_Jm_Sp'.split('_'),
+        longDateFormat: {
+            LT: 'HH.mm',
+            LTS: 'HH.mm.ss',
+            L: 'DD/MM/YYYY',
+            LL: 'D MMMM YYYY',
+            LLL: 'D MMMM YYYY [pukul] HH.mm',
+            LLLL: 'dddd, D MMMM YYYY [pukul] HH.mm',
+        },
+        meridiemParse: /enjing|siyang|sonten|ndalu/,
+        meridiemHour: function (hour, meridiem) {
+            if (hour === 12) {
+                hour = 0;
+            }
+            if (meridiem === 'enjing') {
+                return hour;
+            } else if (meridiem === 'siyang') {
+                return hour >= 11 ? hour : hour + 12;
+            } else if (meridiem === 'sonten' || meridiem === 'ndalu') {
+                return hour + 12;
+            }
+        },
+        meridiem: function (hours, minutes, isLower) {
+            if (hours < 11) {
+                return 'enjing';
+            } else if (hours < 15) {
+                return 'siyang';
+            } else if (hours < 19) {
+                return 'sonten';
+            } else {
+                return 'ndalu';
+            }
+        },
+        calendar: {
+            sameDay: '[Dinten puniko pukul] LT',
+            nextDay: '[Mbenjang pukul] LT',
+            nextWeek: 'dddd [pukul] LT',
+            lastDay: '[Kala wingi pukul] LT',
+            lastWeek: 'dddd [kepengker pukul] LT',
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: 'wonten ing %s',
+            past: '%s ingkang kepengker',
+            s: 'sawetawis detik',
+            ss: '%d detik',
+            m: 'setunggal menit',
+            mm: '%d menit',
+            h: 'setunggal jam',
+            hh: '%d jam',
+            d: 'sedinten',
+            dd: '%d dinten',
+            M: 'sewulan',
+            MM: '%d wulan',
+            y: 'setaun',
+            yy: '%d taun',
+        },
+        week: {
+            dow: 1, // Monday is the first day of the week.
+            doy: 7, // The week that contains Jan 7th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    moment.defineLocale('ka', {
+        months: 'იანვარი_თებერვალი_მარტი_აპრილი_მაისი_ივნისი_ივლისი_აგვისტო_სექტემბერი_ოქტომბერი_ნოემბერი_დეკემბერი'.split(
+            '_'
+        ),
+        monthsShort: 'იან_თებ_მარ_აპრ_მაი_ივნ_ივლ_აგვ_სექ_ოქტ_ნოე_დეკ'.split('_'),
+        weekdays: {
+            standalone: 'კვირა_ორშაბათი_სამშაბათი_ოთხშაბათი_ხუთშაბათი_პარასკევი_შაბათი'.split(
+                '_'
+            ),
+            format: 'კვირას_ორშაბათს_სამშაბათს_ოთხშაბათს_ხუთშაბათს_პარასკევს_შაბათს'.split(
+                '_'
+            ),
+            isFormat: /(წინა|შემდეგ)/,
+        },
+        weekdaysShort: 'კვი_ორშ_სამ_ოთხ_ხუთ_პარ_შაბ'.split('_'),
+        weekdaysMin: 'კვ_ორ_სა_ოთ_ხუ_პა_შა'.split('_'),
+        longDateFormat: {
+            LT: 'HH:mm',
+            LTS: 'HH:mm:ss',
+            L: 'DD/MM/YYYY',
+            LL: 'D MMMM YYYY',
+            LLL: 'D MMMM YYYY HH:mm',
+            LLLL: 'dddd, D MMMM YYYY HH:mm',
+        },
+        calendar: {
+            sameDay: '[დღეს] LT[-ზე]',
+            nextDay: '[ხვალ] LT[-ზე]',
+            lastDay: '[გუშინ] LT[-ზე]',
+            nextWeek: '[შემდეგ] dddd LT[-ზე]',
+            lastWeek: '[წინა] dddd LT-ზე',
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: function (s) {
+                return s.replace(/(წამ|წუთ|საათ|წელ|დღ|თვ)(ი|ე)/, function (
+                    $0,
+                    $1,
+                    $2
+                ) {
+                    return $2 === 'ი' ? $1 + 'ში' : $1 + $2 + 'ში';
+                });
+            },
+            past: function (s) {
+                if (/(წამი|წუთი|საათი|დღე|თვე)/.test(s)) {
+                    return s.replace(/(ი|ე)$/, 'ის წინ');
+                }
+                if (/წელი/.test(s)) {
+                    return s.replace(/წელი$/, 'წლის წინ');
+                }
+                return s;
+            },
+            s: 'რამდენიმე წამი',
+            ss: '%d წამი',
+            m: 'წუთი',
+            mm: '%d წუთი',
+            h: 'საათი',
+            hh: '%d საათი',
+            d: 'დღე',
+            dd: '%d დღე',
+            M: 'თვე',
+            MM: '%d თვე',
+            y: 'წელი',
+            yy: '%d წელი',
+        },
+        dayOfMonthOrdinalParse: /0|1-ლი|მე-\d{1,2}|\d{1,2}-ე/,
+        ordinal: function (number) {
+            if (number === 0) {
+                return number;
+            }
+            if (number === 1) {
+                return number + '-ლი';
+            }
+            if (
+                number < 20 ||
+                (number <= 100 && number % 20 === 0) ||
+                number % 100 === 0
+            ) {
+                return 'მე-' + number;
+            }
+            return number + '-ე';
+        },
+        week: {
+            dow: 1,
+            doy: 7,
+        },
+    });
+
+    //! moment.js locale configuration
+
+    var suffixes$1 = {
+        0: '-ші',
+        1: '-ші',
+        2: '-ші',
+        3: '-ші',
+        4: '-ші',
+        5: '-ші',
+        6: '-шы',
+        7: '-ші',
+        8: '-ші',
+        9: '-шы',
+        10: '-шы',
+        20: '-шы',
+        30: '-шы',
+        40: '-шы',
+        50: '-ші',
+        60: '-шы',
+        70: '-ші',
+        80: '-ші',
+        90: '-шы',
+        100: '-ші',
+    };
+
+    moment.defineLocale('kk', {
+        months: 'қаңтар_ақпан_наурыз_сәуір_мамыр_маусым_шілде_тамыз_қыркүйек_қазан_қараша_желтоқсан'.split(
+            '_'
+        ),
+        monthsShort: 'қаң_ақп_нау_сәу_мам_мау_шіл_там_қыр_қаз_қар_жел'.split('_'),
+        weekdays: 'жексенбі_дүйсенбі_сейсенбі_сәрсенбі_бейсенбі_жұма_сенбі'.split(
+            '_'
+        ),
+        weekdaysShort: 'жек_дүй_сей_сәр_бей_жұм_сен'.split('_'),
+        weekdaysMin: 'жк_дй_сй_ср_бй_жм_сн'.split('_'),
+        longDateFormat: {
+            LT: 'HH:mm',
+            LTS: 'HH:mm:ss',
+            L: 'DD.MM.YYYY',
+            LL: 'D MMMM YYYY',
+            LLL: 'D MMMM YYYY HH:mm',
+            LLLL: 'dddd, D MMMM YYYY HH:mm',
+        },
+        calendar: {
+            sameDay: '[Бүгін сағат] LT',
+            nextDay: '[Ертең сағат] LT',
+            nextWeek: 'dddd [сағат] LT',
+            lastDay: '[Кеше сағат] LT',
+            lastWeek: '[Өткен аптаның] dddd [сағат] LT',
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: '%s ішінде',
+            past: '%s бұрын',
+            s: 'бірнеше секунд',
+            ss: '%d секунд',
+            m: 'бір минут',
+            mm: '%d минут',
+            h: 'бір сағат',
+            hh: '%d сағат',
+            d: 'бір күн',
+            dd: '%d күн',
+            M: 'бір ай',
+            MM: '%d ай',
+            y: 'бір жыл',
+            yy: '%d жыл',
+        },
+        dayOfMonthOrdinalParse: /\d{1,2}-(ші|шы)/,
+        ordinal: function (number) {
+            var a = number % 10,
+                b = number >= 100 ? 100 : null;
+            return number + (suffixes$1[number] || suffixes$1[a] || suffixes$1[b]);
+        },
+        week: {
+            dow: 1, // Monday is the first day of the week.
+            doy: 7, // The week that contains Jan 7th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    var symbolMap$8 = {
+            '1': '១',
+            '2': '២',
+            '3': '៣',
+            '4': '៤',
+            '5': '៥',
+            '6': '៦',
+            '7': '៧',
+            '8': '៨',
+            '9': '៩',
+            '0': '០',
+        },
+        numberMap$7 = {
+            '១': '1',
+            '២': '2',
+            '៣': '3',
+            '៤': '4',
+            '៥': '5',
+            '៦': '6',
+            '៧': '7',
+            '៨': '8',
+            '៩': '9',
+            '០': '0',
+        };
+
+    moment.defineLocale('km', {
+        months: 'មករា_កុម្ភៈ_មីនា_មេសា_ឧសភា_មិថុនា_កក្កដា_សីហា_កញ្ញា_តុលា_វិច្ឆិកា_ធ្នូ'.split(
+            '_'
+        ),
+        monthsShort: 'មករា_កុម្ភៈ_មីនា_មេសា_ឧសភា_មិថុនា_កក្កដា_សីហា_កញ្ញា_តុលា_វិច្ឆិកា_ធ្នូ'.split(
+            '_'
+        ),
+        weekdays: 'អាទិត្យ_ច័ន្ទ_អង្គារ_ពុធ_ព្រហស្បតិ៍_សុក្រ_សៅរ៍'.split('_'),
+        weekdaysShort: 'អា_ច_អ_ព_ព្រ_សុ_ស'.split('_'),
+        weekdaysMin: 'អា_ច_អ_ព_ព្រ_សុ_ស'.split('_'),
+        weekdaysParseExact: true,
+        longDateFormat: {
+            LT: 'HH:mm',
+            LTS: 'HH:mm:ss',
+            L: 'DD/MM/YYYY',
+            LL: 'D MMMM YYYY',
+            LLL: 'D MMMM YYYY HH:mm',
+            LLLL: 'dddd, D MMMM YYYY HH:mm',
+        },
+        meridiemParse: /ព្រឹក|ល្ងាច/,
+        isPM: function (input) {
+            return input === 'ល្ងាច';
+        },
+        meridiem: function (hour, minute, isLower) {
+            if (hour < 12) {
+                return 'ព្រឹក';
+            } else {
+                return 'ល្ងាច';
+            }
+        },
+        calendar: {
+            sameDay: '[ថ្ងៃនេះ ម៉ោង] LT',
+            nextDay: '[ស្អែក ម៉ោង] LT',
+            nextWeek: 'dddd [ម៉ោង] LT',
+            lastDay: '[ម្សិលមិញ ម៉ោង] LT',
+            lastWeek: 'dddd [សប្តាហ៍មុន] [ម៉ោង] LT',
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: '%sទៀត',
+            past: '%sមុន',
+            s: 'ប៉ុន្មានវិនាទី',
+            ss: '%d វិនាទី',
+            m: 'មួយនាទី',
+            mm: '%d នាទី',
+            h: 'មួយម៉ោង',
+            hh: '%d ម៉ោង',
+            d: 'មួយថ្ងៃ',
+            dd: '%d ថ្ងៃ',
+            M: 'មួយខែ',
+            MM: '%d ខែ',
+            y: 'មួយឆ្នាំ',
+            yy: '%d ឆ្នាំ',
+        },
+        dayOfMonthOrdinalParse: /ទី\d{1,2}/,
+        ordinal: 'ទី%d',
+        preparse: function (string) {
+            return string.replace(/[១២៣៤៥៦៧៨៩០]/g, function (match) {
+                return numberMap$7[match];
+            });
+        },
+        postformat: function (string) {
+            return string.replace(/\d/g, function (match) {
+                return symbolMap$8[match];
+            });
+        },
+        week: {
+            dow: 1, // Monday is the first day of the week.
+            doy: 4, // The week that contains Jan 4th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    var symbolMap$9 = {
+            '1': '೧',
+            '2': '೨',
+            '3': '೩',
+            '4': '೪',
+            '5': '೫',
+            '6': '೬',
+            '7': '೭',
+            '8': '೮',
+            '9': '೯',
+            '0': '೦',
+        },
+        numberMap$8 = {
+            '೧': '1',
+            '೨': '2',
+            '೩': '3',
+            '೪': '4',
+            '೫': '5',
+            '೬': '6',
+            '೭': '7',
+            '೮': '8',
+            '೯': '9',
+            '೦': '0',
+        };
+
+    moment.defineLocale('kn', {
+        months: 'ಜನವರಿ_ಫೆಬ್ರವರಿ_ಮಾರ್ಚ್_ಏಪ್ರಿಲ್_ಮೇ_ಜೂನ್_ಜುಲೈ_ಆಗಸ್ಟ್_ಸೆಪ್ಟೆಂಬರ್_ಅಕ್ಟೋಬರ್_ನವೆಂಬರ್_ಡಿಸೆಂಬರ್'.split(
+            '_'
+        ),
+        monthsShort: 'ಜನ_ಫೆಬ್ರ_ಮಾರ್ಚ್_ಏಪ್ರಿಲ್_ಮೇ_ಜೂನ್_ಜುಲೈ_ಆಗಸ್ಟ್_ಸೆಪ್ಟೆಂ_ಅಕ್ಟೋ_ನವೆಂ_ಡಿಸೆಂ'.split(
+            '_'
+        ),
+        monthsParseExact: true,
+        weekdays: 'ಭಾನುವಾರ_ಸೋಮವಾರ_ಮಂಗಳವಾರ_ಬುಧವಾರ_ಗುರುವಾರ_ಶುಕ್ರವಾರ_ಶನಿವಾರ'.split(
+            '_'
+        ),
+        weekdaysShort: 'ಭಾನು_ಸೋಮ_ಮಂಗಳ_ಬುಧ_ಗುರು_ಶುಕ್ರ_ಶನಿ'.split('_'),
+        weekdaysMin: 'ಭಾ_ಸೋ_ಮಂ_ಬು_ಗು_ಶು_ಶ'.split('_'),
+        longDateFormat: {
+            LT: 'A h:mm',
+            LTS: 'A h:mm:ss',
+            L: 'DD/MM/YYYY',
+            LL: 'D MMMM YYYY',
+            LLL: 'D MMMM YYYY, A h:mm',
+            LLLL: 'dddd, D MMMM YYYY, A h:mm',
+        },
+        calendar: {
+            sameDay: '[ಇಂದು] LT',
+            nextDay: '[ನಾಳೆ] LT',
+            nextWeek: 'dddd, LT',
+            lastDay: '[ನಿನ್ನೆ] LT',
+            lastWeek: '[ಕೊನೆಯ] dddd, LT',
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: '%s ನಂತರ',
+            past: '%s ಹಿಂದೆ',
+            s: 'ಕೆಲವು ಕ್ಷಣಗಳು',
+            ss: '%d ಸೆಕೆಂಡುಗಳು',
+            m: 'ಒಂದು ನಿಮಿಷ',
+            mm: '%d ನಿಮಿಷ',
+            h: 'ಒಂದು ಗಂಟೆ',
+            hh: '%d ಗಂಟೆ',
+            d: 'ಒಂದು ದಿನ',
+            dd: '%d ದಿನ',
+            M: 'ಒಂದು ತಿಂಗಳು',
+            MM: '%d ತಿಂಗಳು',
+            y: 'ಒಂದು ವರ್ಷ',
+            yy: '%d ವರ್ಷ',
+        },
+        preparse: function (string) {
+            return string.replace(/[೧೨೩೪೫೬೭೮೯೦]/g, function (match) {
+                return numberMap$8[match];
+            });
+        },
+        postformat: function (string) {
+            return string.replace(/\d/g, function (match) {
+                return symbolMap$9[match];
+            });
+        },
+        meridiemParse: /ರಾತ್ರಿ|ಬೆಳಿಗ್ಗೆ|ಮಧ್ಯಾಹ್ನ|ಸಂಜೆ/,
+        meridiemHour: function (hour, meridiem) {
+            if (hour === 12) {
+                hour = 0;
+            }
+            if (meridiem === 'ರಾತ್ರಿ') {
+                return hour < 4 ? hour : hour + 12;
+            } else if (meridiem === 'ಬೆಳಿಗ್ಗೆ') {
+                return hour;
+            } else if (meridiem === 'ಮಧ್ಯಾಹ್ನ') {
+                return hour >= 10 ? hour : hour + 12;
+            } else if (meridiem === 'ಸಂಜೆ') {
+                return hour + 12;
+            }
+        },
+        meridiem: function (hour, minute, isLower) {
+            if (hour < 4) {
+                return 'ರಾತ್ರಿ';
+            } else if (hour < 10) {
+                return 'ಬೆಳಿಗ್ಗೆ';
+            } else if (hour < 17) {
+                return 'ಮಧ್ಯಾಹ್ನ';
+            } else if (hour < 20) {
+                return 'ಸಂಜೆ';
+            } else {
+                return 'ರಾತ್ರಿ';
+            }
+        },
+        dayOfMonthOrdinalParse: /\d{1,2}(ನೇ)/,
+        ordinal: function (number) {
+            return number + 'ನೇ';
+        },
+        week: {
+            dow: 0, // Sunday is the first day of the week.
+            doy: 6, // The week that contains Jan 6th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    moment.defineLocale('ko', {
+        months: '1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월'.split('_'),
+        monthsShort: '1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월'.split(
+            '_'
+        ),
+        weekdays: '일요일_월요일_화요일_수요일_목요일_금요일_토요일'.split('_'),
+        weekdaysShort: '일_월_화_수_목_금_토'.split('_'),
+        weekdaysMin: '일_월_화_수_목_금_토'.split('_'),
+        longDateFormat: {
+            LT: 'A h:mm',
+            LTS: 'A h:mm:ss',
+            L: 'YYYY.MM.DD.',
+            LL: 'YYYY년 MMMM D일',
+            LLL: 'YYYY년 MMMM D일 A h:mm',
+            LLLL: 'YYYY년 MMMM D일 dddd A h:mm',
+            l: 'YYYY.MM.DD.',
+            ll: 'YYYY년 MMMM D일',
+            lll: 'YYYY년 MMMM D일 A h:mm',
+            llll: 'YYYY년 MMMM D일 dddd A h:mm',
+        },
+        calendar: {
+            sameDay: '오늘 LT',
+            nextDay: '내일 LT',
+            nextWeek: 'dddd LT',
+            lastDay: '어제 LT',
+            lastWeek: '지난주 dddd LT',
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: '%s 후',
+            past: '%s 전',
+            s: '몇 초',
+            ss: '%d초',
+            m: '1분',
+            mm: '%d분',
+            h: '한 시간',
+            hh: '%d시간',
+            d: '하루',
+            dd: '%d일',
+            M: '한 달',
+            MM: '%d달',
+            y: '일 년',
+            yy: '%d년',
+        },
+        dayOfMonthOrdinalParse: /\d{1,2}(일|월|주)/,
+        ordinal: function (number, period) {
+            switch (period) {
+                case 'd':
+                case 'D':
+                case 'DDD':
+                    return number + '일';
+                case 'M':
+                    return number + '월';
+                case 'w':
+                case 'W':
+                    return number + '주';
+                default:
+                    return number;
+            }
+        },
+        meridiemParse: /오전|오후/,
+        isPM: function (token) {
+            return token === '오후';
+        },
+        meridiem: function (hour, minute, isUpper) {
+            return hour < 12 ? '오전' : '오후';
+        },
+    });
+
+    //! moment.js locale configuration
+
+    var symbolMap$a = {
+            '1': '١',
+            '2': '٢',
+            '3': '٣',
+            '4': '٤',
+            '5': '٥',
+            '6': '٦',
+            '7': '٧',
+            '8': '٨',
+            '9': '٩',
+            '0': '٠',
+        },
+        numberMap$9 = {
+            '١': '1',
+            '٢': '2',
+            '٣': '3',
+            '٤': '4',
+            '٥': '5',
+            '٦': '6',
+            '٧': '7',
+            '٨': '8',
+            '٩': '9',
+            '٠': '0',
+        },
+        months$7 = [
+            'کانونی دووەم',
+            'شوبات',
+            'ئازار',
+            'نیسان',
+            'ئایار',
+            'حوزەیران',
+            'تەمموز',
+            'ئاب',
+            'ئەیلوول',
+            'تشرینی یەكەم',
+            'تشرینی دووەم',
+            'كانونی یەکەم',
+        ];
+
+    moment.defineLocale('ku', {
+        months: months$7,
+        monthsShort: months$7,
+        weekdays: 'یه‌كشه‌ممه‌_دووشه‌ممه‌_سێشه‌ممه‌_چوارشه‌ممه‌_پێنجشه‌ممه‌_هه‌ینی_شه‌ممه‌'.split(
+            '_'
+        ),
+        weekdaysShort: 'یه‌كشه‌م_دووشه‌م_سێشه‌م_چوارشه‌م_پێنجشه‌م_هه‌ینی_شه‌ممه‌'.split(
+            '_'
+        ),
+        weekdaysMin: 'ی_د_س_چ_پ_ه_ش'.split('_'),
+        weekdaysParseExact: true,
+        longDateFormat: {
+            LT: 'HH:mm',
+            LTS: 'HH:mm:ss',
+            L: 'DD/MM/YYYY',
+            LL: 'D MMMM YYYY',
+            LLL: 'D MMMM YYYY HH:mm',
+            LLLL: 'dddd, D MMMM YYYY HH:mm',
+        },
+        meridiemParse: /ئێواره‌|به‌یانی/,
+        isPM: function (input) {
+            return /ئێواره‌/.test(input);
+        },
+        meridiem: function (hour, minute, isLower) {
+            if (hour < 12) {
+                return 'به‌یانی';
+            } else {
+                return 'ئێواره‌';
+            }
+        },
+        calendar: {
+            sameDay: '[ئه‌مرۆ كاتژمێر] LT',
+            nextDay: '[به‌یانی كاتژمێر] LT',
+            nextWeek: 'dddd [كاتژمێر] LT',
+            lastDay: '[دوێنێ كاتژمێر] LT',
+            lastWeek: 'dddd [كاتژمێر] LT',
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: 'له‌ %s',
+            past: '%s',
+            s: 'چه‌ند چركه‌یه‌ك',
+            ss: 'چركه‌ %d',
+            m: 'یه‌ك خوله‌ك',
+            mm: '%d خوله‌ك',
+            h: 'یه‌ك كاتژمێر',
+            hh: '%d كاتژمێر',
+            d: 'یه‌ك ڕۆژ',
+            dd: '%d ڕۆژ',
+            M: 'یه‌ك مانگ',
+            MM: '%d مانگ',
+            y: 'یه‌ك ساڵ',
+            yy: '%d ساڵ',
+        },
+        preparse: function (string) {
+            return string
+                .replace(/[١٢٣٤٥٦٧٨٩٠]/g, function (match) {
+                    return numberMap$9[match];
+                })
+                .replace(/،/g, ',');
+        },
+        postformat: function (string) {
+            return string
+                .replace(/\d/g, function (match) {
+                    return symbolMap$a[match];
+                })
+                .replace(/,/g, '،');
+        },
+        week: {
+            dow: 6, // Saturday is the first day of the week.
+            doy: 12, // The week that contains Jan 12th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    var suffixes$2 = {
+        0: '-чү',
+        1: '-чи',
+        2: '-чи',
+        3: '-чү',
+        4: '-чү',
+        5: '-чи',
+        6: '-чы',
+        7: '-чи',
+        8: '-чи',
+        9: '-чу',
+        10: '-чу',
+        20: '-чы',
+        30: '-чу',
+        40: '-чы',
+        50: '-чү',
+        60: '-чы',
+        70: '-чи',
+        80: '-чи',
+        90: '-чу',
+        100: '-чү',
+    };
+
+    moment.defineLocale('ky', {
+        months: 'январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь'.split(
+            '_'
+        ),
+        monthsShort: 'янв_фев_март_апр_май_июнь_июль_авг_сен_окт_ноя_дек'.split(
+            '_'
+        ),
+        weekdays: 'Жекшемби_Дүйшөмбү_Шейшемби_Шаршемби_Бейшемби_Жума_Ишемби'.split(
+            '_'
+        ),
+        weekdaysShort: 'Жек_Дүй_Шей_Шар_Бей_Жум_Ише'.split('_'),
+        weekdaysMin: 'Жк_Дй_Шй_Шр_Бй_Жм_Иш'.split('_'),
+        longDateFormat: {
+            LT: 'HH:mm',
+            LTS: 'HH:mm:ss',
+            L: 'DD.MM.YYYY',
+            LL: 'D MMMM YYYY',
+            LLL: 'D MMMM YYYY HH:mm',
+            LLLL: 'dddd, D MMMM YYYY HH:mm',
+        },
+        calendar: {
+            sameDay: '[Бүгүн саат] LT',
+            nextDay: '[Эртең саат] LT',
+            nextWeek: 'dddd [саат] LT',
+            lastDay: '[Кечээ саат] LT',
+            lastWeek: '[Өткөн аптанын] dddd [күнү] [саат] LT',
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: '%s ичинде',
+            past: '%s мурун',
+            s: 'бирнече секунд',
+            ss: '%d секунд',
+            m: 'бир мүнөт',
+            mm: '%d мүнөт',
+            h: 'бир саат',
+            hh: '%d саат',
+            d: 'бир күн',
+            dd: '%d күн',
+            M: 'бир ай',
+            MM: '%d ай',
+            y: 'бир жыл',
+            yy: '%d жыл',
+        },
+        dayOfMonthOrdinalParse: /\d{1,2}-(чи|чы|чү|чу)/,
+        ordinal: function (number) {
+            var a = number % 10,
+                b = number >= 100 ? 100 : null;
+            return number + (suffixes$2[number] || suffixes$2[a] || suffixes$2[b]);
+        },
+        week: {
+            dow: 1, // Monday is the first day of the week.
+            doy: 7, // The week that contains Jan 7th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    function processRelativeTime$6(number, withoutSuffix, key, isFuture) {
+        var format = {
+            m: ['eng Minutt', 'enger Minutt'],
+            h: ['eng Stonn', 'enger Stonn'],
+            d: ['een Dag', 'engem Dag'],
+            M: ['ee Mount', 'engem Mount'],
+            y: ['ee Joer', 'engem Joer'],
+        };
+        return withoutSuffix ? format[key][0] : format[key][1];
+    }
+    function processFutureTime(string) {
+        var number = string.substr(0, string.indexOf(' '));
+        if (eifelerRegelAppliesToNumber(number)) {
+            return 'a ' + string;
+        }
+        return 'an ' + string;
+    }
+    function processPastTime(string) {
+        var number = string.substr(0, string.indexOf(' '));
+        if (eifelerRegelAppliesToNumber(number)) {
+            return 'viru ' + string;
+        }
+        return 'virun ' + string;
+    }
+    /**
+     * Returns true if the word before the given number loses the '-n' ending.
+     * e.g. 'an 10 Deeg' but 'a 5 Deeg'
+     *
+     * @param number {integer}
+     * @returns {boolean}
+     */
+    function eifelerRegelAppliesToNumber(number) {
+        number = parseInt(number, 10);
+        if (isNaN(number)) {
+            return false;
+        }
+        if (number < 0) {
+            // Negative Number --> always true
+            return true;
+        } else if (number < 10) {
+            // Only 1 digit
+            if (4 <= number && number <= 7) {
+                return true;
+            }
+            return false;
+        } else if (number < 100) {
+            // 2 digits
+            var lastDigit = number % 10,
+                firstDigit = number / 10;
+            if (lastDigit === 0) {
+                return eifelerRegelAppliesToNumber(firstDigit);
+            }
+            return eifelerRegelAppliesToNumber(lastDigit);
+        } else if (number < 10000) {
+            // 3 or 4 digits --> recursively check first digit
+            while (number >= 10) {
+                number = number / 10;
+            }
+            return eifelerRegelAppliesToNumber(number);
+        } else {
+            // Anything larger than 4 digits: recursively check first n-3 digits
+            number = number / 1000;
+            return eifelerRegelAppliesToNumber(number);
+        }
+    }
+
+    moment.defineLocale('lb', {
+        months: 'Januar_Februar_Mäerz_Abrëll_Mee_Juni_Juli_August_September_Oktober_November_Dezember'.split(
+            '_'
+        ),
+        monthsShort: 'Jan._Febr._Mrz._Abr._Mee_Jun._Jul._Aug._Sept._Okt._Nov._Dez.'.split(
+            '_'
+        ),
+        monthsParseExact: true,
+        weekdays: 'Sonndeg_Méindeg_Dënschdeg_Mëttwoch_Donneschdeg_Freideg_Samschdeg'.split(
+            '_'
+        ),
+        weekdaysShort: 'So._Mé._Dë._Më._Do._Fr._Sa.'.split('_'),
+        weekdaysMin: 'So_Mé_Dë_Më_Do_Fr_Sa'.split('_'),
+        weekdaysParseExact: true,
+        longDateFormat: {
+            LT: 'H:mm [Auer]',
+            LTS: 'H:mm:ss [Auer]',
+            L: 'DD.MM.YYYY',
+            LL: 'D. MMMM YYYY',
+            LLL: 'D. MMMM YYYY H:mm [Auer]',
+            LLLL: 'dddd, D. MMMM YYYY H:mm [Auer]',
+        },
+        calendar: {
+            sameDay: '[Haut um] LT',
+            sameElse: 'L',
+            nextDay: '[Muer um] LT',
+            nextWeek: 'dddd [um] LT',
+            lastDay: '[Gëschter um] LT',
+            lastWeek: function () {
+                // Different date string for 'Dënschdeg' (Tuesday) and 'Donneschdeg' (Thursday) due to phonological rule
+                switch (this.day()) {
+                    case 2:
+                    case 4:
+                        return '[Leschten] dddd [um] LT';
+                    default:
+                        return '[Leschte] dddd [um] LT';
+                }
+            },
+        },
+        relativeTime: {
+            future: processFutureTime,
+            past: processPastTime,
+            s: 'e puer Sekonnen',
+            ss: '%d Sekonnen',
+            m: processRelativeTime$6,
+            mm: '%d Minutten',
+            h: processRelativeTime$6,
+            hh: '%d Stonnen',
+            d: processRelativeTime$6,
+            dd: '%d Deeg',
+            M: processRelativeTime$6,
+            MM: '%d Méint',
+            y: processRelativeTime$6,
+            yy: '%d Joer',
+        },
+        dayOfMonthOrdinalParse: /\d{1,2}\./,
+        ordinal: '%d.',
+        week: {
+            dow: 1, // Monday is the first day of the week.
+            doy: 4, // The week that contains Jan 4th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    moment.defineLocale('lo', {
+        months: 'ມັງກອນ_ກຸມພາ_ມີນາ_ເມສາ_ພຶດສະພາ_ມິຖຸນາ_ກໍລະກົດ_ສິງຫາ_ກັນຍາ_ຕຸລາ_ພະຈິກ_ທັນວາ'.split(
+            '_'
+        ),
+        monthsShort: 'ມັງກອນ_ກຸມພາ_ມີນາ_ເມສາ_ພຶດສະພາ_ມິຖຸນາ_ກໍລະກົດ_ສິງຫາ_ກັນຍາ_ຕຸລາ_ພະຈິກ_ທັນວາ'.split(
+            '_'
+        ),
+        weekdays: 'ອາທິດ_ຈັນ_ອັງຄານ_ພຸດ_ພະຫັດ_ສຸກ_ເສົາ'.split('_'),
+        weekdaysShort: 'ທິດ_ຈັນ_ອັງຄານ_ພຸດ_ພະຫັດ_ສຸກ_ເສົາ'.split('_'),
+        weekdaysMin: 'ທ_ຈ_ອຄ_ພ_ພຫ_ສກ_ສ'.split('_'),
+        weekdaysParseExact: true,
+        longDateFormat: {
+            LT: 'HH:mm',
+            LTS: 'HH:mm:ss',
+            L: 'DD/MM/YYYY',
+            LL: 'D MMMM YYYY',
+            LLL: 'D MMMM YYYY HH:mm',
+            LLLL: 'ວັນdddd D MMMM YYYY HH:mm',
+        },
+        meridiemParse: /ຕອນເຊົ້າ|ຕອນແລງ/,
+        isPM: function (input) {
+            return input === 'ຕອນແລງ';
+        },
+        meridiem: function (hour, minute, isLower) {
+            if (hour < 12) {
+                return 'ຕອນເຊົ້າ';
+            } else {
+                return 'ຕອນແລງ';
+            }
+        },
+        calendar: {
+            sameDay: '[ມື້ນີ້ເວລາ] LT',
+            nextDay: '[ມື້ອື່ນເວລາ] LT',
+            nextWeek: '[ວັນ]dddd[ໜ້າເວລາ] LT',
+            lastDay: '[ມື້ວານນີ້ເວລາ] LT',
+            lastWeek: '[ວັນ]dddd[ແລ້ວນີ້ເວລາ] LT',
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: 'ອີກ %s',
+            past: '%sຜ່ານມາ',
+            s: 'ບໍ່ເທົ່າໃດວິນາທີ',
+            ss: '%d ວິນາທີ',
+            m: '1 ນາທີ',
+            mm: '%d ນາທີ',
+            h: '1 ຊົ່ວໂມງ',
+            hh: '%d ຊົ່ວໂມງ',
+            d: '1 ມື້',
+            dd: '%d ມື້',
+            M: '1 ເດືອນ',
+            MM: '%d ເດືອນ',
+            y: '1 ປີ',
+            yy: '%d ປີ',
+        },
+        dayOfMonthOrdinalParse: /(ທີ່)\d{1,2}/,
+        ordinal: function (number) {
+            return 'ທີ່' + number;
+        },
+    });
+
+    //! moment.js locale configuration
+
+    var units = {
+        ss: 'sekundė_sekundžių_sekundes',
+        m: 'minutė_minutės_minutę',
+        mm: 'minutės_minučių_minutes',
+        h: 'valanda_valandos_valandą',
+        hh: 'valandos_valandų_valandas',
+        d: 'diena_dienos_dieną',
+        dd: 'dienos_dienų_dienas',
+        M: 'mėnuo_mėnesio_mėnesį',
+        MM: 'mėnesiai_mėnesių_mėnesius',
+        y: 'metai_metų_metus',
+        yy: 'metai_metų_metus',
+    };
+    function translateSeconds(number, withoutSuffix, key, isFuture) {
+        if (withoutSuffix) {
+            return 'kelios sekundės';
+        } else {
+            return isFuture ? 'kelių sekundžių' : 'kelias sekundes';
+        }
+    }
+    function translateSingular(number, withoutSuffix, key, isFuture) {
+        return withoutSuffix
+            ? forms(key)[0]
+            : isFuture
+            ? forms(key)[1]
+            : forms(key)[2];
+    }
+    function special(number) {
+        return number % 10 === 0 || (number > 10 && number < 20);
+    }
+    function forms(key) {
+        return units[key].split('_');
+    }
+    function translate$6(number, withoutSuffix, key, isFuture) {
+        var result = number + ' ';
+        if (number === 1) {
+            return (
+                result + translateSingular(number, withoutSuffix, key[0], isFuture)
+            );
+        } else if (withoutSuffix) {
+            return result + (special(number) ? forms(key)[1] : forms(key)[0]);
+        } else {
+            if (isFuture) {
+                return result + forms(key)[1];
+            } else {
+                return result + (special(number) ? forms(key)[1] : forms(key)[2]);
+            }
+        }
+    }
+    moment.defineLocale('lt', {
+        months: {
+            format: 'sausio_vasario_kovo_balandžio_gegužės_birželio_liepos_rugpjūčio_rugsėjo_spalio_lapkričio_gruodžio'.split(
+                '_'
+            ),
+            standalone: 'sausis_vasaris_kovas_balandis_gegužė_birželis_liepa_rugpjūtis_rugsėjis_spalis_lapkritis_gruodis'.split(
+                '_'
+            ),
+            isFormat: /D[oD]?(\[[^\[\]]*\]|\s)+MMMM?|MMMM?(\[[^\[\]]*\]|\s)+D[oD]?/,
+        },
+        monthsShort: 'sau_vas_kov_bal_geg_bir_lie_rgp_rgs_spa_lap_grd'.split('_'),
+        weekdays: {
+            format: 'sekmadienį_pirmadienį_antradienį_trečiadienį_ketvirtadienį_penktadienį_šeštadienį'.split(
+                '_'
+            ),
+            standalone: 'sekmadienis_pirmadienis_antradienis_trečiadienis_ketvirtadienis_penktadienis_šeštadienis'.split(
+                '_'
+            ),
+            isFormat: /dddd HH:mm/,
+        },
+        weekdaysShort: 'Sek_Pir_Ant_Tre_Ket_Pen_Šeš'.split('_'),
+        weekdaysMin: 'S_P_A_T_K_Pn_Š'.split('_'),
+        weekdaysParseExact: true,
+        longDateFormat: {
+            LT: 'HH:mm',
+            LTS: 'HH:mm:ss',
+            L: 'YYYY-MM-DD',
+            LL: 'YYYY [m.] MMMM D [d.]',
+            LLL: 'YYYY [m.] MMMM D [d.], HH:mm [val.]',
+            LLLL: 'YYYY [m.] MMMM D [d.], dddd, HH:mm [val.]',
+            l: 'YYYY-MM-DD',
+            ll: 'YYYY [m.] MMMM D [d.]',
+            lll: 'YYYY [m.] MMMM D [d.], HH:mm [val.]',
+            llll: 'YYYY [m.] MMMM D [d.], ddd, HH:mm [val.]',
+        },
+        calendar: {
+            sameDay: '[Šiandien] LT',
+            nextDay: '[Rytoj] LT',
+            nextWeek: 'dddd LT',
+            lastDay: '[Vakar] LT',
+            lastWeek: '[Praėjusį] dddd LT',
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: 'po %s',
+            past: 'prieš %s',
+            s: translateSeconds,
+            ss: translate$6,
+            m: translateSingular,
+            mm: translate$6,
+            h: translateSingular,
+            hh: translate$6,
+            d: translateSingular,
+            dd: translate$6,
+            M: translateSingular,
+            MM: translate$6,
+            y: translateSingular,
+            yy: translate$6,
+        },
+        dayOfMonthOrdinalParse: /\d{1,2}-oji/,
+        ordinal: function (number) {
+            return number + '-oji';
+        },
+        week: {
+            dow: 1, // Monday is the first day of the week.
+            doy: 4, // The week that contains Jan 4th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    var units$1 = {
+        ss: 'sekundes_sekundēm_sekunde_sekundes'.split('_'),
+        m: 'minūtes_minūtēm_minūte_minūtes'.split('_'),
+        mm: 'minūtes_minūtēm_minūte_minūtes'.split('_'),
+        h: 'stundas_stundām_stunda_stundas'.split('_'),
+        hh: 'stundas_stundām_stunda_stundas'.split('_'),
+        d: 'dienas_dienām_diena_dienas'.split('_'),
+        dd: 'dienas_dienām_diena_dienas'.split('_'),
+        M: 'mēneša_mēnešiem_mēnesis_mēneši'.split('_'),
+        MM: 'mēneša_mēnešiem_mēnesis_mēneši'.split('_'),
+        y: 'gada_gadiem_gads_gadi'.split('_'),
+        yy: 'gada_gadiem_gads_gadi'.split('_'),
+    };
+    /**
+     * @param withoutSuffix boolean true = a length of time; false = before/after a period of time.
+     */
+    function format(forms, number, withoutSuffix) {
+        if (withoutSuffix) {
+            // E.g. "21 minūte", "3 minūtes".
+            return number % 10 === 1 && number % 100 !== 11 ? forms[2] : forms[3];
+        } else {
+            // E.g. "21 minūtes" as in "pēc 21 minūtes".
+            // E.g. "3 minūtēm" as in "pēc 3 minūtēm".
+            return number % 10 === 1 && number % 100 !== 11 ? forms[0] : forms[1];
+        }
+    }
+    function relativeTimeWithPlural$1(number, withoutSuffix, key) {
+        return number + ' ' + format(units$1[key], number, withoutSuffix);
+    }
+    function relativeTimeWithSingular(number, withoutSuffix, key) {
+        return format(units$1[key], number, withoutSuffix);
+    }
+    function relativeSeconds(number, withoutSuffix) {
+        return withoutSuffix ? 'dažas sekundes' : 'dažām sekundēm';
+    }
+
+    moment.defineLocale('lv', {
+        months: 'janvāris_februāris_marts_aprīlis_maijs_jūnijs_jūlijs_augusts_septembris_oktobris_novembris_decembris'.split(
+            '_'
+        ),
+        monthsShort: 'jan_feb_mar_apr_mai_jūn_jūl_aug_sep_okt_nov_dec'.split('_'),
+        weekdays: 'svētdiena_pirmdiena_otrdiena_trešdiena_ceturtdiena_piektdiena_sestdiena'.split(
+            '_'
+        ),
+        weekdaysShort: 'Sv_P_O_T_C_Pk_S'.split('_'),
+        weekdaysMin: 'Sv_P_O_T_C_Pk_S'.split('_'),
+        weekdaysParseExact: true,
+        longDateFormat: {
+            LT: 'HH:mm',
+            LTS: 'HH:mm:ss',
+            L: 'DD.MM.YYYY.',
+            LL: 'YYYY. [gada] D. MMMM',
+            LLL: 'YYYY. [gada] D. MMMM, HH:mm',
+            LLLL: 'YYYY. [gada] D. MMMM, dddd, HH:mm',
+        },
+        calendar: {
+            sameDay: '[Šodien pulksten] LT',
+            nextDay: '[Rīt pulksten] LT',
+            nextWeek: 'dddd [pulksten] LT',
+            lastDay: '[Vakar pulksten] LT',
+            lastWeek: '[Pagājušā] dddd [pulksten] LT',
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: 'pēc %s',
+            past: 'pirms %s',
+            s: relativeSeconds,
+            ss: relativeTimeWithPlural$1,
+            m: relativeTimeWithSingular,
+            mm: relativeTimeWithPlural$1,
+            h: relativeTimeWithSingular,
+            hh: relativeTimeWithPlural$1,
+            d: relativeTimeWithSingular,
+            dd: relativeTimeWithPlural$1,
+            M: relativeTimeWithSingular,
+            MM: relativeTimeWithPlural$1,
+            y: relativeTimeWithSingular,
+            yy: relativeTimeWithPlural$1,
+        },
+        dayOfMonthOrdinalParse: /\d{1,2}\./,
+        ordinal: '%d.',
+        week: {
+            dow: 1, // Monday is the first day of the week.
+            doy: 4, // The week that contains Jan 4th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    var translator = {
+        words: {
+            //Different grammatical cases
+            ss: ['sekund', 'sekunda', 'sekundi'],
+            m: ['jedan minut', 'jednog minuta'],
+            mm: ['minut', 'minuta', 'minuta'],
+            h: ['jedan sat', 'jednog sata'],
+            hh: ['sat', 'sata', 'sati'],
+            dd: ['dan', 'dana', 'dana'],
+            MM: ['mjesec', 'mjeseca', 'mjeseci'],
+            yy: ['godina', 'godine', 'godina'],
+        },
+        correctGrammaticalCase: function (number, wordKey) {
+            return number === 1
+                ? wordKey[0]
+                : number >= 2 && number <= 4
+                ? wordKey[1]
+                : wordKey[2];
+        },
+        translate: function (number, withoutSuffix, key) {
+            var wordKey = translator.words[key];
+            if (key.length === 1) {
+                return withoutSuffix ? wordKey[0] : wordKey[1];
+            } else {
+                return (
+                    number +
+                    ' ' +
+                    translator.correctGrammaticalCase(number, wordKey)
+                );
+            }
+        },
+    };
+
+    moment.defineLocale('me', {
+        months: 'januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar'.split(
+            '_'
+        ),
+        monthsShort: 'jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.'.split(
+            '_'
+        ),
+        monthsParseExact: true,
+        weekdays: 'nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota'.split(
+            '_'
+        ),
+        weekdaysShort: 'ned._pon._uto._sri._čet._pet._sub.'.split('_'),
+        weekdaysMin: 'ne_po_ut_sr_če_pe_su'.split('_'),
+        weekdaysParseExact: true,
+        longDateFormat: {
+            LT: 'H:mm',
+            LTS: 'H:mm:ss',
+            L: 'DD.MM.YYYY',
+            LL: 'D. MMMM YYYY',
+            LLL: 'D. MMMM YYYY H:mm',
+            LLLL: 'dddd, D. MMMM YYYY H:mm',
+        },
+        calendar: {
+            sameDay: '[danas u] LT',
+            nextDay: '[sjutra u] LT',
+
+            nextWeek: function () {
+                switch (this.day()) {
+                    case 0:
+                        return '[u] [nedjelju] [u] LT';
+                    case 3:
+                        return '[u] [srijedu] [u] LT';
+                    case 6:
+                        return '[u] [subotu] [u] LT';
+                    case 1:
+                    case 2:
+                    case 4:
+                    case 5:
+                        return '[u] dddd [u] LT';
+                }
+            },
+            lastDay: '[juče u] LT',
+            lastWeek: function () {
+                var lastWeekDays = [
+                    '[prošle] [nedjelje] [u] LT',
+                    '[prošlog] [ponedjeljka] [u] LT',
+                    '[prošlog] [utorka] [u] LT',
+                    '[prošle] [srijede] [u] LT',
+                    '[prošlog] [četvrtka] [u] LT',
+                    '[prošlog] [petka] [u] LT',
+                    '[prošle] [subote] [u] LT',
+                ];
+                return lastWeekDays[this.day()];
+            },
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: 'za %s',
+            past: 'prije %s',
+            s: 'nekoliko sekundi',
+            ss: translator.translate,
+            m: translator.translate,
+            mm: translator.translate,
+            h: translator.translate,
+            hh: translator.translate,
+            d: 'dan',
+            dd: translator.translate,
+            M: 'mjesec',
+            MM: translator.translate,
+            y: 'godinu',
+            yy: translator.translate,
+        },
+        dayOfMonthOrdinalParse: /\d{1,2}\./,
+        ordinal: '%d.',
+        week: {
+            dow: 1, // Monday is the first day of the week.
+            doy: 7, // The week that contains Jan 7th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    moment.defineLocale('mi', {
+        months: 'Kohi-tāte_Hui-tanguru_Poutū-te-rangi_Paenga-whāwhā_Haratua_Pipiri_Hōngoingoi_Here-turi-kōkā_Mahuru_Whiringa-ā-nuku_Whiringa-ā-rangi_Hakihea'.split(
+            '_'
+        ),
+        monthsShort: 'Kohi_Hui_Pou_Pae_Hara_Pipi_Hōngoi_Here_Mahu_Whi-nu_Whi-ra_Haki'.split(
+            '_'
+        ),
+        monthsRegex: /(?:['a-z\u0101\u014D\u016B]+\-?){1,3}/i,
+        monthsStrictRegex: /(?:['a-z\u0101\u014D\u016B]+\-?){1,3}/i,
+        monthsShortRegex: /(?:['a-z\u0101\u014D\u016B]+\-?){1,3}/i,
+        monthsShortStrictRegex: /(?:['a-z\u0101\u014D\u016B]+\-?){1,2}/i,
+        weekdays: 'Rātapu_Mane_Tūrei_Wenerei_Tāite_Paraire_Hātarei'.split('_'),
+        weekdaysShort: 'Ta_Ma_Tū_We_Tāi_Pa_Hā'.split('_'),
+        weekdaysMin: 'Ta_Ma_Tū_We_Tāi_Pa_Hā'.split('_'),
+        longDateFormat: {
+            LT: 'HH:mm',
+            LTS: 'HH:mm:ss',
+            L: 'DD/MM/YYYY',
+            LL: 'D MMMM YYYY',
+            LLL: 'D MMMM YYYY [i] HH:mm',
+            LLLL: 'dddd, D MMMM YYYY [i] HH:mm',
+        },
+        calendar: {
+            sameDay: '[i teie mahana, i] LT',
+            nextDay: '[apopo i] LT',
+            nextWeek: 'dddd [i] LT',
+            lastDay: '[inanahi i] LT',
+            lastWeek: 'dddd [whakamutunga i] LT',
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: 'i roto i %s',
+            past: '%s i mua',
+            s: 'te hēkona ruarua',
+            ss: '%d hēkona',
+            m: 'he meneti',
+            mm: '%d meneti',
+            h: 'te haora',
+            hh: '%d haora',
+            d: 'he ra',
+            dd: '%d ra',
+            M: 'he marama',
+            MM: '%d marama',
+            y: 'he tau',
+            yy: '%d tau',
+        },
+        dayOfMonthOrdinalParse: /\d{1,2}º/,
+        ordinal: '%dº',
+        week: {
+            dow: 1, // Monday is the first day of the week.
+            doy: 4, // The week that contains Jan 4th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    moment.defineLocale('mk', {
+        months: 'јануари_февруари_март_април_мај_јуни_јули_август_септември_октомври_ноември_декември'.split(
+            '_'
+        ),
+        monthsShort: 'јан_фев_мар_апр_мај_јун_јул_авг_сеп_окт_ное_дек'.split('_'),
+        weekdays: 'недела_понеделник_вторник_среда_четврток_петок_сабота'.split(
+            '_'
+        ),
+        weekdaysShort: 'нед_пон_вто_сре_чет_пет_саб'.split('_'),
+        weekdaysMin: 'нe_пo_вт_ср_че_пе_сa'.split('_'),
+        longDateFormat: {
+            LT: 'H:mm',
+            LTS: 'H:mm:ss',
+            L: 'D.MM.YYYY',
+            LL: 'D MMMM YYYY',
+            LLL: 'D MMMM YYYY H:mm',
+            LLLL: 'dddd, D MMMM YYYY H:mm',
+        },
+        calendar: {
+            sameDay: '[Денес во] LT',
+            nextDay: '[Утре во] LT',
+            nextWeek: '[Во] dddd [во] LT',
+            lastDay: '[Вчера во] LT',
+            lastWeek: function () {
+                switch (this.day()) {
+                    case 0:
+                    case 3:
+                    case 6:
+                        return '[Изминатата] dddd [во] LT';
+                    case 1:
+                    case 2:
+                    case 4:
+                    case 5:
+                        return '[Изминатиот] dddd [во] LT';
+                }
+            },
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: 'за %s',
+            past: 'пред %s',
+            s: 'неколку секунди',
+            ss: '%d секунди',
+            m: 'една минута',
+            mm: '%d минути',
+            h: 'еден час',
+            hh: '%d часа',
+            d: 'еден ден',
+            dd: '%d дена',
+            M: 'еден месец',
+            MM: '%d месеци',
+            y: 'една година',
+            yy: '%d години',
+        },
+        dayOfMonthOrdinalParse: /\d{1,2}-(ев|ен|ти|ви|ри|ми)/,
+        ordinal: function (number) {
+            var lastDigit = number % 10,
+                last2Digits = number % 100;
+            if (number === 0) {
+                return number + '-ев';
+            } else if (last2Digits === 0) {
+                return number + '-ен';
+            } else if (last2Digits > 10 && last2Digits < 20) {
+                return number + '-ти';
+            } else if (lastDigit === 1) {
+                return number + '-ви';
+            } else if (lastDigit === 2) {
+                return number + '-ри';
+            } else if (lastDigit === 7 || lastDigit === 8) {
+                return number + '-ми';
+            } else {
+                return number + '-ти';
+            }
+        },
+        week: {
+            dow: 1, // Monday is the first day of the week.
+            doy: 7, // The week that contains Jan 7th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    moment.defineLocale('ml', {
+        months: 'ജനുവരി_ഫെബ്രുവരി_മാർച്ച്_ഏപ്രിൽ_മേയ്_ജൂൺ_ജൂലൈ_ഓഗസ്റ്റ്_സെപ്റ്റംബർ_ഒക്ടോബർ_നവംബർ_ഡിസംബർ'.split(
+            '_'
+        ),
+        monthsShort: 'ജനു._ഫെബ്രു._മാർ._ഏപ്രി._മേയ്_ജൂൺ_ജൂലൈ._ഓഗ._സെപ്റ്റ._ഒക്ടോ._നവം._ഡിസം.'.split(
+            '_'
+        ),
+        monthsParseExact: true,
+        weekdays: 'ഞായറാഴ്ച_തിങ്കളാഴ്ച_ചൊവ്വാഴ്ച_ബുധനാഴ്ച_വ്യാഴാഴ്ച_വെള്ളിയാഴ്ച_ശനിയാഴ്ച'.split(
+            '_'
+        ),
+        weekdaysShort: 'ഞായർ_തിങ്കൾ_ചൊവ്വ_ബുധൻ_വ്യാഴം_വെള്ളി_ശനി'.split('_'),
+        weekdaysMin: 'ഞാ_തി_ചൊ_ബു_വ്യാ_വെ_ശ'.split('_'),
+        longDateFormat: {
+            LT: 'A h:mm -നു',
+            LTS: 'A h:mm:ss -നു',
+            L: 'DD/MM/YYYY',
+            LL: 'D MMMM YYYY',
+            LLL: 'D MMMM YYYY, A h:mm -നു',
+            LLLL: 'dddd, D MMMM YYYY, A h:mm -നു',
+        },
+        calendar: {
+            sameDay: '[ഇന്ന്] LT',
+            nextDay: '[നാളെ] LT',
+            nextWeek: 'dddd, LT',
+            lastDay: '[ഇന്നലെ] LT',
+            lastWeek: '[കഴിഞ്ഞ] dddd, LT',
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: '%s കഴിഞ്ഞ്',
+            past: '%s മുൻപ്',
+            s: 'അൽപ നിമിഷങ്ങൾ',
+            ss: '%d സെക്കൻഡ്',
+            m: 'ഒരു മിനിറ്റ്',
+            mm: '%d മിനിറ്റ്',
+            h: 'ഒരു മണിക്കൂർ',
+            hh: '%d മണിക്കൂർ',
+            d: 'ഒരു ദിവസം',
+            dd: '%d ദിവസം',
+            M: 'ഒരു മാസം',
+            MM: '%d മാസം',
+            y: 'ഒരു വർഷം',
+            yy: '%d വർഷം',
+        },
+        meridiemParse: /രാത്രി|രാവിലെ|ഉച്ച കഴിഞ്ഞ്|വൈകുന്നേരം|രാത്രി/i,
+        meridiemHour: function (hour, meridiem) {
+            if (hour === 12) {
+                hour = 0;
+            }
+            if (
+                (meridiem === 'രാത്രി' && hour >= 4) ||
+                meridiem === 'ഉച്ച കഴിഞ്ഞ്' ||
+                meridiem === 'വൈകുന്നേരം'
+            ) {
+                return hour + 12;
+            } else {
+                return hour;
+            }
+        },
+        meridiem: function (hour, minute, isLower) {
+            if (hour < 4) {
+                return 'രാത്രി';
+            } else if (hour < 12) {
+                return 'രാവിലെ';
+            } else if (hour < 17) {
+                return 'ഉച്ച കഴിഞ്ഞ്';
+            } else if (hour < 20) {
+                return 'വൈകുന്നേരം';
+            } else {
+                return 'രാത്രി';
+            }
+        },
+    });
+
+    //! moment.js locale configuration
+
+    function translate$7(number, withoutSuffix, key, isFuture) {
+        switch (key) {
+            case 's':
+                return withoutSuffix ? 'хэдхэн секунд' : 'хэдхэн секундын';
+            case 'ss':
+                return number + (withoutSuffix ? ' секунд' : ' секундын');
+            case 'm':
+            case 'mm':
+                return number + (withoutSuffix ? ' минут' : ' минутын');
+            case 'h':
+            case 'hh':
+                return number + (withoutSuffix ? ' цаг' : ' цагийн');
+            case 'd':
+            case 'dd':
+                return number + (withoutSuffix ? ' өдөр' : ' өдрийн');
+            case 'M':
+            case 'MM':
+                return number + (withoutSuffix ? ' сар' : ' сарын');
+            case 'y':
+            case 'yy':
+                return number + (withoutSuffix ? ' жил' : ' жилийн');
+            default:
+                return number;
+        }
+    }
+
+    moment.defineLocale('mn', {
+        months: 'Нэгдүгээр сар_Хоёрдугаар сар_Гуравдугаар сар_Дөрөвдүгээр сар_Тавдугаар сар_Зургадугаар сар_Долдугаар сар_Наймдугаар сар_Есдүгээр сар_Аравдугаар сар_Арван нэгдүгээр сар_Арван хоёрдугаар сар'.split(
+            '_'
+        ),
+        monthsShort: '1 сар_2 сар_3 сар_4 сар_5 сар_6 сар_7 сар_8 сар_9 сар_10 сар_11 сар_12 сар'.split(
+            '_'
+        ),
+        monthsParseExact: true,
+        weekdays: 'Ням_Даваа_Мягмар_Лхагва_Пүрэв_Баасан_Бямба'.split('_'),
+        weekdaysShort: 'Ням_Дав_Мяг_Лха_Пүр_Баа_Бям'.split('_'),
+        weekdaysMin: 'Ня_Да_Мя_Лх_Пү_Ба_Бя'.split('_'),
+        weekdaysParseExact: true,
+        longDateFormat: {
+            LT: 'HH:mm',
+            LTS: 'HH:mm:ss',
+            L: 'YYYY-MM-DD',
+            LL: 'YYYY оны MMMMын D',
+            LLL: 'YYYY оны MMMMын D HH:mm',
+            LLLL: 'dddd, YYYY оны MMMMын D HH:mm',
+        },
+        meridiemParse: /ҮӨ|ҮХ/i,
+        isPM: function (input) {
+            return input === 'ҮХ';
+        },
+        meridiem: function (hour, minute, isLower) {
+            if (hour < 12) {
+                return 'ҮӨ';
+            } else {
+                return 'ҮХ';
+            }
+        },
+        calendar: {
+            sameDay: '[Өнөөдөр] LT',
+            nextDay: '[Маргааш] LT',
+            nextWeek: '[Ирэх] dddd LT',
+            lastDay: '[Өчигдөр] LT',
+            lastWeek: '[Өнгөрсөн] dddd LT',
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: '%s дараа',
+            past: '%s өмнө',
+            s: translate$7,
+            ss: translate$7,
+            m: translate$7,
+            mm: translate$7,
+            h: translate$7,
+            hh: translate$7,
+            d: translate$7,
+            dd: translate$7,
+            M: translate$7,
+            MM: translate$7,
+            y: translate$7,
+            yy: translate$7,
+        },
+        dayOfMonthOrdinalParse: /\d{1,2} өдөр/,
+        ordinal: function (number, period) {
+            switch (period) {
+                case 'd':
+                case 'D':
+                case 'DDD':
+                    return number + ' өдөр';
+                default:
+                    return number;
+            }
+        },
+    });
+
+    //! moment.js locale configuration
+
+    var symbolMap$b = {
+            '1': '१',
+            '2': '२',
+            '3': '३',
+            '4': '४',
+            '5': '५',
+            '6': '६',
+            '7': '७',
+            '8': '८',
+            '9': '९',
+            '0': '०',
+        },
+        numberMap$a = {
+            '१': '1',
+            '२': '2',
+            '३': '3',
+            '४': '4',
+            '५': '5',
+            '६': '6',
+            '७': '7',
+            '८': '8',
+            '९': '9',
+            '०': '0',
+        };
+
+    function relativeTimeMr(number, withoutSuffix, string, isFuture) {
+        var output = '';
+        if (withoutSuffix) {
+            switch (string) {
+                case 's':
+                    output = 'काही सेकंद';
+                    break;
+                case 'ss':
+                    output = '%d सेकंद';
+                    break;
+                case 'm':
+                    output = 'एक मिनिट';
+                    break;
+                case 'mm':
+                    output = '%d मिनिटे';
+                    break;
+                case 'h':
+                    output = 'एक तास';
+                    break;
+                case 'hh':
+                    output = '%d तास';
+                    break;
+                case 'd':
+                    output = 'एक दिवस';
+                    break;
+                case 'dd':
+                    output = '%d दिवस';
+                    break;
+                case 'M':
+                    output = 'एक महिना';
+                    break;
+                case 'MM':
+                    output = '%d महिने';
+                    break;
+                case 'y':
+                    output = 'एक वर्ष';
+                    break;
+                case 'yy':
+                    output = '%d वर्षे';
+                    break;
+            }
+        } else {
+            switch (string) {
+                case 's':
+                    output = 'काही सेकंदां';
+                    break;
+                case 'ss':
+                    output = '%d सेकंदां';
+                    break;
+                case 'm':
+                    output = 'एका मिनिटा';
+                    break;
+                case 'mm':
+                    output = '%d मिनिटां';
+                    break;
+                case 'h':
+                    output = 'एका तासा';
+                    break;
+                case 'hh':
+                    output = '%d तासां';
+                    break;
+                case 'd':
+                    output = 'एका दिवसा';
+                    break;
+                case 'dd':
+                    output = '%d दिवसां';
+                    break;
+                case 'M':
+                    output = 'एका महिन्या';
+                    break;
+                case 'MM':
+                    output = '%d महिन्यां';
+                    break;
+                case 'y':
+                    output = 'एका वर्षा';
+                    break;
+                case 'yy':
+                    output = '%d वर्षां';
+                    break;
+            }
+        }
+        return output.replace(/%d/i, number);
+    }
+
+    moment.defineLocale('mr', {
+        months: 'जानेवारी_फेब्रुवारी_मार्च_एप्रिल_मे_जून_जुलै_ऑगस्ट_सप्टेंबर_ऑक्टोबर_नोव्हेंबर_डिसेंबर'.split(
+            '_'
+        ),
+        monthsShort: 'जाने._फेब्रु._मार्च._एप्रि._मे._जून._जुलै._ऑग._सप्टें._ऑक्टो._नोव्हें._डिसें.'.split(
+            '_'
+        ),
+        monthsParseExact: true,
+        weekdays: 'रविवार_सोमवार_मंगळवार_बुधवार_गुरूवार_शुक्रवार_शनिवार'.split('_'),
+        weekdaysShort: 'रवि_सोम_मंगळ_बुध_गुरू_शुक्र_शनि'.split('_'),
+        weekdaysMin: 'र_सो_मं_बु_गु_शु_श'.split('_'),
+        longDateFormat: {
+            LT: 'A h:mm वाजता',
+            LTS: 'A h:mm:ss वाजता',
+            L: 'DD/MM/YYYY',
+            LL: 'D MMMM YYYY',
+            LLL: 'D MMMM YYYY, A h:mm वाजता',
+            LLLL: 'dddd, D MMMM YYYY, A h:mm वाजता',
+        },
+        calendar: {
+            sameDay: '[आज] LT',
+            nextDay: '[उद्या] LT',
+            nextWeek: 'dddd, LT',
+            lastDay: '[काल] LT',
+            lastWeek: '[मागील] dddd, LT',
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: '%sमध्ये',
+            past: '%sपूर्वी',
+            s: relativeTimeMr,
+            ss: relativeTimeMr,
+            m: relativeTimeMr,
+            mm: relativeTimeMr,
+            h: relativeTimeMr,
+            hh: relativeTimeMr,
+            d: relativeTimeMr,
+            dd: relativeTimeMr,
+            M: relativeTimeMr,
+            MM: relativeTimeMr,
+            y: relativeTimeMr,
+            yy: relativeTimeMr,
+        },
+        preparse: function (string) {
+            return string.replace(/[१२३४५६७८९०]/g, function (match) {
+                return numberMap$a[match];
+            });
+        },
+        postformat: function (string) {
+            return string.replace(/\d/g, function (match) {
+                return symbolMap$b[match];
+            });
+        },
+        meridiemParse: /पहाटे|सकाळी|दुपारी|सायंकाळी|रात्री/,
+        meridiemHour: function (hour, meridiem) {
+            if (hour === 12) {
+                hour = 0;
+            }
+            if (meridiem === 'पहाटे' || meridiem === 'सकाळी') {
+                return hour;
+            } else if (
+                meridiem === 'दुपारी' ||
+                meridiem === 'सायंकाळी' ||
+                meridiem === 'रात्री'
+            ) {
+                return hour >= 12 ? hour : hour + 12;
+            }
+        },
+        meridiem: function (hour, minute, isLower) {
+            if (hour >= 0 && hour < 6) {
+                return 'पहाटे';
+            } else if (hour < 12) {
+                return 'सकाळी';
+            } else if (hour < 17) {
+                return 'दुपारी';
+            } else if (hour < 20) {
+                return 'सायंकाळी';
+            } else {
+                return 'रात्री';
+            }
+        },
+        week: {
+            dow: 0, // Sunday is the first day of the week.
+            doy: 6, // The week that contains Jan 6th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    moment.defineLocale('ms-my', {
+        months: 'Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember'.split(
+            '_'
+        ),
+        monthsShort: 'Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis'.split('_'),
+        weekdays: 'Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu'.split('_'),
+        weekdaysShort: 'Ahd_Isn_Sel_Rab_Kha_Jum_Sab'.split('_'),
+        weekdaysMin: 'Ah_Is_Sl_Rb_Km_Jm_Sb'.split('_'),
+        longDateFormat: {
+            LT: 'HH.mm',
+            LTS: 'HH.mm.ss',
+            L: 'DD/MM/YYYY',
+            LL: 'D MMMM YYYY',
+            LLL: 'D MMMM YYYY [pukul] HH.mm',
+            LLLL: 'dddd, D MMMM YYYY [pukul] HH.mm',
+        },
+        meridiemParse: /pagi|tengahari|petang|malam/,
+        meridiemHour: function (hour, meridiem) {
+            if (hour === 12) {
+                hour = 0;
+            }
+            if (meridiem === 'pagi') {
+                return hour;
+            } else if (meridiem === 'tengahari') {
+                return hour >= 11 ? hour : hour + 12;
+            } else if (meridiem === 'petang' || meridiem === 'malam') {
+                return hour + 12;
+            }
+        },
+        meridiem: function (hours, minutes, isLower) {
+            if (hours < 11) {
+                return 'pagi';
+            } else if (hours < 15) {
+                return 'tengahari';
+            } else if (hours < 19) {
+                return 'petang';
+            } else {
+                return 'malam';
+            }
+        },
+        calendar: {
+            sameDay: '[Hari ini pukul] LT',
+            nextDay: '[Esok pukul] LT',
+            nextWeek: 'dddd [pukul] LT',
+            lastDay: '[Kelmarin pukul] LT',
+            lastWeek: 'dddd [lepas pukul] LT',
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: 'dalam %s',
+            past: '%s yang lepas',
+            s: 'beberapa saat',
+            ss: '%d saat',
+            m: 'seminit',
+            mm: '%d minit',
+            h: 'sejam',
+            hh: '%d jam',
+            d: 'sehari',
+            dd: '%d hari',
+            M: 'sebulan',
+            MM: '%d bulan',
+            y: 'setahun',
+            yy: '%d tahun',
+        },
+        week: {
+            dow: 1, // Monday is the first day of the week.
+            doy: 7, // The week that contains Jan 7th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    moment.defineLocale('ms', {
+        months: 'Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember'.split(
+            '_'
+        ),
+        monthsShort: 'Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis'.split('_'),
+        weekdays: 'Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu'.split('_'),
+        weekdaysShort: 'Ahd_Isn_Sel_Rab_Kha_Jum_Sab'.split('_'),
+        weekdaysMin: 'Ah_Is_Sl_Rb_Km_Jm_Sb'.split('_'),
+        longDateFormat: {
+            LT: 'HH.mm',
+            LTS: 'HH.mm.ss',
+            L: 'DD/MM/YYYY',
+            LL: 'D MMMM YYYY',
+            LLL: 'D MMMM YYYY [pukul] HH.mm',
+            LLLL: 'dddd, D MMMM YYYY [pukul] HH.mm',
+        },
+        meridiemParse: /pagi|tengahari|petang|malam/,
+        meridiemHour: function (hour, meridiem) {
+            if (hour === 12) {
+                hour = 0;
+            }
+            if (meridiem === 'pagi') {
+                return hour;
+            } else if (meridiem === 'tengahari') {
+                return hour >= 11 ? hour : hour + 12;
+            } else if (meridiem === 'petang' || meridiem === 'malam') {
+                return hour + 12;
+            }
+        },
+        meridiem: function (hours, minutes, isLower) {
+            if (hours < 11) {
+                return 'pagi';
+            } else if (hours < 15) {
+                return 'tengahari';
+            } else if (hours < 19) {
+                return 'petang';
+            } else {
+                return 'malam';
+            }
+        },
+        calendar: {
+            sameDay: '[Hari ini pukul] LT',
+            nextDay: '[Esok pukul] LT',
+            nextWeek: 'dddd [pukul] LT',
+            lastDay: '[Kelmarin pukul] LT',
+            lastWeek: 'dddd [lepas pukul] LT',
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: 'dalam %s',
+            past: '%s yang lepas',
+            s: 'beberapa saat',
+            ss: '%d saat',
+            m: 'seminit',
+            mm: '%d minit',
+            h: 'sejam',
+            hh: '%d jam',
+            d: 'sehari',
+            dd: '%d hari',
+            M: 'sebulan',
+            MM: '%d bulan',
+            y: 'setahun',
+            yy: '%d tahun',
+        },
+        week: {
+            dow: 1, // Monday is the first day of the week.
+            doy: 7, // The week that contains Jan 7th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    moment.defineLocale('mt', {
+        months: 'Jannar_Frar_Marzu_April_Mejju_Ġunju_Lulju_Awwissu_Settembru_Ottubru_Novembru_Diċembru'.split(
+            '_'
+        ),
+        monthsShort: 'Jan_Fra_Mar_Apr_Mej_Ġun_Lul_Aww_Set_Ott_Nov_Diċ'.split('_'),
+        weekdays: 'Il-Ħadd_It-Tnejn_It-Tlieta_L-Erbgħa_Il-Ħamis_Il-Ġimgħa_Is-Sibt'.split(
+            '_'
+        ),
+        weekdaysShort: 'Ħad_Tne_Tli_Erb_Ħam_Ġim_Sib'.split('_'),
+        weekdaysMin: 'Ħa_Tn_Tl_Er_Ħa_Ġi_Si'.split('_'),
+        longDateFormat: {
+            LT: 'HH:mm',
+            LTS: 'HH:mm:ss',
+            L: 'DD/MM/YYYY',
+            LL: 'D MMMM YYYY',
+            LLL: 'D MMMM YYYY HH:mm',
+            LLLL: 'dddd, D MMMM YYYY HH:mm',
+        },
+        calendar: {
+            sameDay: '[Illum fil-]LT',
+            nextDay: '[Għada fil-]LT',
+            nextWeek: 'dddd [fil-]LT',
+            lastDay: '[Il-bieraħ fil-]LT',
+            lastWeek: 'dddd [li għadda] [fil-]LT',
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: 'f’ %s',
+            past: '%s ilu',
+            s: 'ftit sekondi',
+            ss: '%d sekondi',
+            m: 'minuta',
+            mm: '%d minuti',
+            h: 'siegħa',
+            hh: '%d siegħat',
+            d: 'ġurnata',
+            dd: '%d ġranet',
+            M: 'xahar',
+            MM: '%d xhur',
+            y: 'sena',
+            yy: '%d sni',
+        },
+        dayOfMonthOrdinalParse: /\d{1,2}º/,
+        ordinal: '%dº',
+        week: {
+            dow: 1, // Monday is the first day of the week.
+            doy: 4, // The week that contains Jan 4th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    var symbolMap$c = {
+            '1': '၁',
+            '2': '၂',
+            '3': '၃',
+            '4': '၄',
+            '5': '၅',
+            '6': '၆',
+            '7': '၇',
+            '8': '၈',
+            '9': '၉',
+            '0': '၀',
+        },
+        numberMap$b = {
+            '၁': '1',
+            '၂': '2',
+            '၃': '3',
+            '၄': '4',
+            '၅': '5',
+            '၆': '6',
+            '၇': '7',
+            '၈': '8',
+            '၉': '9',
+            '၀': '0',
+        };
+
+    moment.defineLocale('my', {
+        months: 'ဇန်နဝါရီ_ဖေဖော်ဝါရီ_မတ်_ဧပြီ_မေ_ဇွန်_ဇူလိုင်_သြဂုတ်_စက်တင်ဘာ_အောက်တိုဘာ_နိုဝင်ဘာ_ဒီဇင်ဘာ'.split(
+            '_'
+        ),
+        monthsShort: 'ဇန်_ဖေ_မတ်_ပြီ_မေ_ဇွန်_လိုင်_သြ_စက်_အောက်_နို_ဒီ'.split('_'),
+        weekdays: 'တနင်္ဂနွေ_တနင်္လာ_အင်္ဂါ_ဗုဒ္ဓဟူး_ကြာသပတေး_သောကြာ_စနေ'.split(
+            '_'
+        ),
+        weekdaysShort: 'နွေ_လာ_ဂါ_ဟူး_ကြာ_သော_နေ'.split('_'),
+        weekdaysMin: 'နွေ_လာ_ဂါ_ဟူး_ကြာ_သော_နေ'.split('_'),
+
+        longDateFormat: {
+            LT: 'HH:mm',
+            LTS: 'HH:mm:ss',
+            L: 'DD/MM/YYYY',
+            LL: 'D MMMM YYYY',
+            LLL: 'D MMMM YYYY HH:mm',
+            LLLL: 'dddd D MMMM YYYY HH:mm',
+        },
+        calendar: {
+            sameDay: '[ယနေ.] LT [မှာ]',
+            nextDay: '[မနက်ဖြန်] LT [မှာ]',
+            nextWeek: 'dddd LT [မှာ]',
+            lastDay: '[မနေ.က] LT [မှာ]',
+            lastWeek: '[ပြီးခဲ့သော] dddd LT [မှာ]',
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: 'လာမည့် %s မှာ',
+            past: 'လွန်ခဲ့သော %s က',
+            s: 'စက္ကန်.အနည်းငယ်',
+            ss: '%d စက္ကန့်',
+            m: 'တစ်မိနစ်',
+            mm: '%d မိနစ်',
+            h: 'တစ်နာရီ',
+            hh: '%d နာရီ',
+            d: 'တစ်ရက်',
+            dd: '%d ရက်',
+            M: 'တစ်လ',
+            MM: '%d လ',
+            y: 'တစ်နှစ်',
+            yy: '%d နှစ်',
+        },
+        preparse: function (string) {
+            return string.replace(/[၁၂၃၄၅၆၇၈၉၀]/g, function (match) {
+                return numberMap$b[match];
+            });
+        },
+        postformat: function (string) {
+            return string.replace(/\d/g, function (match) {
+                return symbolMap$c[match];
+            });
+        },
+        week: {
+            dow: 1, // Monday is the first day of the week.
+            doy: 4, // The week that contains Jan 4th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    moment.defineLocale('nb', {
+        months: 'januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember'.split(
+            '_'
+        ),
+        monthsShort: 'jan._feb._mars_apr._mai_juni_juli_aug._sep._okt._nov._des.'.split(
+            '_'
+        ),
+        monthsParseExact: true,
+        weekdays: 'søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag'.split('_'),
+        weekdaysShort: 'sø._ma._ti._on._to._fr._lø.'.split('_'),
+        weekdaysMin: 'sø_ma_ti_on_to_fr_lø'.split('_'),
+        weekdaysParseExact: true,
+        longDateFormat: {
+            LT: 'HH:mm',
+            LTS: 'HH:mm:ss',
+            L: 'DD.MM.YYYY',
+            LL: 'D. MMMM YYYY',
+            LLL: 'D. MMMM YYYY [kl.] HH:mm',
+            LLLL: 'dddd D. MMMM YYYY [kl.] HH:mm',
+        },
+        calendar: {
+            sameDay: '[i dag kl.] LT',
+            nextDay: '[i morgen kl.] LT',
+            nextWeek: 'dddd [kl.] LT',
+            lastDay: '[i går kl.] LT',
+            lastWeek: '[forrige] dddd [kl.] LT',
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: 'om %s',
+            past: '%s siden',
+            s: 'noen sekunder',
+            ss: '%d sekunder',
+            m: 'ett minutt',
+            mm: '%d minutter',
+            h: 'en time',
+            hh: '%d timer',
+            d: 'en dag',
+            dd: '%d dager',
+            M: 'en måned',
+            MM: '%d måneder',
+            y: 'ett år',
+            yy: '%d år',
+        },
+        dayOfMonthOrdinalParse: /\d{1,2}\./,
+        ordinal: '%d.',
+        week: {
+            dow: 1, // Monday is the first day of the week.
+            doy: 4, // The week that contains Jan 4th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    var symbolMap$d = {
+            '1': '१',
+            '2': '२',
+            '3': '३',
+            '4': '४',
+            '5': '५',
+            '6': '६',
+            '7': '७',
+            '8': '८',
+            '9': '९',
+            '0': '०',
+        },
+        numberMap$c = {
+            '१': '1',
+            '२': '2',
+            '३': '3',
+            '४': '4',
+            '५': '5',
+            '६': '6',
+            '७': '7',
+            '८': '8',
+            '९': '9',
+            '०': '0',
+        };
+
+    moment.defineLocale('ne', {
+        months: 'जनवरी_फेब्रुवरी_मार्च_अप्रिल_मई_जुन_जुलाई_अगष्ट_सेप्टेम्बर_अक्टोबर_नोभेम्बर_डिसेम्बर'.split(
+            '_'
+        ),
+        monthsShort: 'जन._फेब्रु._मार्च_अप्रि._मई_जुन_जुलाई._अग._सेप्ट._अक्टो._नोभे._डिसे.'.split(
+            '_'
+        ),
+        monthsParseExact: true,
+        weekdays: 'आइतबार_सोमबार_मङ्गलबार_बुधबार_बिहिबार_शुक्रबार_शनिबार'.split(
+            '_'
+        ),
+        weekdaysShort: 'आइत._सोम._मङ्गल._बुध._बिहि._शुक्र._शनि.'.split('_'),
+        weekdaysMin: 'आ._सो._मं._बु._बि._शु._श.'.split('_'),
+        weekdaysParseExact: true,
+        longDateFormat: {
+            LT: 'Aको h:mm बजे',
+            LTS: 'Aको h:mm:ss बजे',
+            L: 'DD/MM/YYYY',
+            LL: 'D MMMM YYYY',
+            LLL: 'D MMMM YYYY, Aको h:mm बजे',
+            LLLL: 'dddd, D MMMM YYYY, Aको h:mm बजे',
+        },
+        preparse: function (string) {
+            return string.replace(/[१२३४५६७८९०]/g, function (match) {
+                return numberMap$c[match];
+            });
+        },
+        postformat: function (string) {
+            return string.replace(/\d/g, function (match) {
+                return symbolMap$d[match];
+            });
+        },
+        meridiemParse: /राति|बिहान|दिउँसो|साँझ/,
+        meridiemHour: function (hour, meridiem) {
+            if (hour === 12) {
+                hour = 0;
+            }
+            if (meridiem === 'राति') {
+                return hour < 4 ? hour : hour + 12;
+            } else if (meridiem === 'बिहान') {
+                return hour;
+            } else if (meridiem === 'दिउँसो') {
+                return hour >= 10 ? hour : hour + 12;
+            } else if (meridiem === 'साँझ') {
+                return hour + 12;
+            }
+        },
+        meridiem: function (hour, minute, isLower) {
+            if (hour < 3) {
+                return 'राति';
+            } else if (hour < 12) {
+                return 'बिहान';
+            } else if (hour < 16) {
+                return 'दिउँसो';
+            } else if (hour < 20) {
+                return 'साँझ';
+            } else {
+                return 'राति';
+            }
+        },
+        calendar: {
+            sameDay: '[आज] LT',
+            nextDay: '[भोलि] LT',
+            nextWeek: '[आउँदो] dddd[,] LT',
+            lastDay: '[हिजो] LT',
+            lastWeek: '[गएको] dddd[,] LT',
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: '%sमा',
+            past: '%s अगाडि',
+            s: 'केही क्षण',
+            ss: '%d सेकेण्ड',
+            m: 'एक मिनेट',
+            mm: '%d मिनेट',
+            h: 'एक घण्टा',
+            hh: '%d घण्टा',
+            d: 'एक दिन',
+            dd: '%d दिन',
+            M: 'एक महिना',
+            MM: '%d महिना',
+            y: 'एक बर्ष',
+            yy: '%d बर्ष',
+        },
+        week: {
+            dow: 0, // Sunday is the first day of the week.
+            doy: 6, // The week that contains Jan 6th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    var monthsShortWithDots$1 = 'jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.'.split(
+            '_'
+        ),
+        monthsShortWithoutDots$1 = 'jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec'.split(
+            '_'
+        ),
+        monthsParse$6 = [
+            /^jan/i,
+            /^feb/i,
+            /^maart|mrt.?$/i,
+            /^apr/i,
+            /^mei$/i,
+            /^jun[i.]?$/i,
+            /^jul[i.]?$/i,
+            /^aug/i,
+            /^sep/i,
+            /^okt/i,
+            /^nov/i,
+            /^dec/i,
+        ],
+        monthsRegex$6 = /^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december|jan\.?|feb\.?|mrt\.?|apr\.?|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i;
+
+    moment.defineLocale('nl-be', {
+        months: 'januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december'.split(
+            '_'
+        ),
+        monthsShort: function (m, format) {
+            if (!m) {
+                return monthsShortWithDots$1;
+            } else if (/-MMM-/.test(format)) {
+                return monthsShortWithoutDots$1[m.month()];
+            } else {
+                return monthsShortWithDots$1[m.month()];
+            }
+        },
+
+        monthsRegex: monthsRegex$6,
+        monthsShortRegex: monthsRegex$6,
+        monthsStrictRegex: /^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december)/i,
+        monthsShortStrictRegex: /^(jan\.?|feb\.?|mrt\.?|apr\.?|mei|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i,
+
+        monthsParse: monthsParse$6,
+        longMonthsParse: monthsParse$6,
+        shortMonthsParse: monthsParse$6,
+
+        weekdays: 'zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag'.split(
+            '_'
+        ),
+        weekdaysShort: 'zo._ma._di._wo._do._vr._za.'.split('_'),
+        weekdaysMin: 'zo_ma_di_wo_do_vr_za'.split('_'),
+        weekdaysParseExact: true,
+        longDateFormat: {
+            LT: 'HH:mm',
+            LTS: 'HH:mm:ss',
+            L: 'DD/MM/YYYY',
+            LL: 'D MMMM YYYY',
+            LLL: 'D MMMM YYYY HH:mm',
+            LLLL: 'dddd D MMMM YYYY HH:mm',
+        },
+        calendar: {
+            sameDay: '[vandaag om] LT',
+            nextDay: '[morgen om] LT',
+            nextWeek: 'dddd [om] LT',
+            lastDay: '[gisteren om] LT',
+            lastWeek: '[afgelopen] dddd [om] LT',
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: 'over %s',
+            past: '%s geleden',
+            s: 'een paar seconden',
+            ss: '%d seconden',
+            m: 'één minuut',
+            mm: '%d minuten',
+            h: 'één uur',
+            hh: '%d uur',
+            d: 'één dag',
+            dd: '%d dagen',
+            M: 'één maand',
+            MM: '%d maanden',
+            y: 'één jaar',
+            yy: '%d jaar',
+        },
+        dayOfMonthOrdinalParse: /\d{1,2}(ste|de)/,
+        ordinal: function (number) {
+            return (
+                number +
+                (number === 1 || number === 8 || number >= 20 ? 'ste' : 'de')
+            );
+        },
+        week: {
+            dow: 1, // Monday is the first day of the week.
+            doy: 4, // The week that contains Jan 4th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    var monthsShortWithDots$2 = 'jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.'.split(
+            '_'
+        ),
+        monthsShortWithoutDots$2 = 'jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec'.split(
+            '_'
+        ),
+        monthsParse$7 = [
+            /^jan/i,
+            /^feb/i,
+            /^maart|mrt.?$/i,
+            /^apr/i,
+            /^mei$/i,
+            /^jun[i.]?$/i,
+            /^jul[i.]?$/i,
+            /^aug/i,
+            /^sep/i,
+            /^okt/i,
+            /^nov/i,
+            /^dec/i,
+        ],
+        monthsRegex$7 = /^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december|jan\.?|feb\.?|mrt\.?|apr\.?|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i;
+
+    moment.defineLocale('nl', {
+        months: 'januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december'.split(
+            '_'
+        ),
+        monthsShort: function (m, format) {
+            if (!m) {
+                return monthsShortWithDots$2;
+            } else if (/-MMM-/.test(format)) {
+                return monthsShortWithoutDots$2[m.month()];
+            } else {
+                return monthsShortWithDots$2[m.month()];
+            }
+        },
+
+        monthsRegex: monthsRegex$7,
+        monthsShortRegex: monthsRegex$7,
+        monthsStrictRegex: /^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december)/i,
+        monthsShortStrictRegex: /^(jan\.?|feb\.?|mrt\.?|apr\.?|mei|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i,
+
+        monthsParse: monthsParse$7,
+        longMonthsParse: monthsParse$7,
+        shortMonthsParse: monthsParse$7,
+
+        weekdays: 'zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag'.split(
+            '_'
+        ),
+        weekdaysShort: 'zo._ma._di._wo._do._vr._za.'.split('_'),
+        weekdaysMin: 'zo_ma_di_wo_do_vr_za'.split('_'),
+        weekdaysParseExact: true,
+        longDateFormat: {
+            LT: 'HH:mm',
+            LTS: 'HH:mm:ss',
+            L: 'DD-MM-YYYY',
+            LL: 'D MMMM YYYY',
+            LLL: 'D MMMM YYYY HH:mm',
+            LLLL: 'dddd D MMMM YYYY HH:mm',
+        },
+        calendar: {
+            sameDay: '[vandaag om] LT',
+            nextDay: '[morgen om] LT',
+            nextWeek: 'dddd [om] LT',
+            lastDay: '[gisteren om] LT',
+            lastWeek: '[afgelopen] dddd [om] LT',
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: 'over %s',
+            past: '%s geleden',
+            s: 'een paar seconden',
+            ss: '%d seconden',
+            m: 'één minuut',
+            mm: '%d minuten',
+            h: 'één uur',
+            hh: '%d uur',
+            d: 'één dag',
+            dd: '%d dagen',
+            M: 'één maand',
+            MM: '%d maanden',
+            y: 'één jaar',
+            yy: '%d jaar',
+        },
+        dayOfMonthOrdinalParse: /\d{1,2}(ste|de)/,
+        ordinal: function (number) {
+            return (
+                number +
+                (number === 1 || number === 8 || number >= 20 ? 'ste' : 'de')
+            );
+        },
+        week: {
+            dow: 1, // Monday is the first day of the week.
+            doy: 4, // The week that contains Jan 4th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    moment.defineLocale('nn', {
+        months: 'januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember'.split(
+            '_'
+        ),
+        monthsShort: 'jan._feb._mars_apr._mai_juni_juli_aug._sep._okt._nov._des.'.split(
+            '_'
+        ),
+        monthsParseExact: true,
+        weekdays: 'sundag_måndag_tysdag_onsdag_torsdag_fredag_laurdag'.split('_'),
+        weekdaysShort: 'su._må._ty._on._to._fr._lau.'.split('_'),
+        weekdaysMin: 'su_må_ty_on_to_fr_la'.split('_'),
+        weekdaysParseExact: true,
+        longDateFormat: {
+            LT: 'HH:mm',
+            LTS: 'HH:mm:ss',
+            L: 'DD.MM.YYYY',
+            LL: 'D. MMMM YYYY',
+            LLL: 'D. MMMM YYYY [kl.] H:mm',
+            LLLL: 'dddd D. MMMM YYYY [kl.] HH:mm',
+        },
+        calendar: {
+            sameDay: '[I dag klokka] LT',
+            nextDay: '[I morgon klokka] LT',
+            nextWeek: 'dddd [klokka] LT',
+            lastDay: '[I går klokka] LT',
+            lastWeek: '[Føregåande] dddd [klokka] LT',
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: 'om %s',
+            past: '%s sidan',
+            s: 'nokre sekund',
+            ss: '%d sekund',
+            m: 'eit minutt',
+            mm: '%d minutt',
+            h: 'ein time',
+            hh: '%d timar',
+            d: 'ein dag',
+            dd: '%d dagar',
+            M: 'ein månad',
+            MM: '%d månader',
+            y: 'eit år',
+            yy: '%d år',
+        },
+        dayOfMonthOrdinalParse: /\d{1,2}\./,
+        ordinal: '%d.',
+        week: {
+            dow: 1, // Monday is the first day of the week.
+            doy: 4, // The week that contains Jan 4th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    moment.defineLocale('oc-lnc', {
+        months: {
+            standalone: 'genièr_febrièr_març_abril_mai_junh_julhet_agost_setembre_octòbre_novembre_decembre'.split(
+                '_'
+            ),
+            format: "de genièr_de febrièr_de març_d'abril_de mai_de junh_de julhet_d'agost_de setembre_d'octòbre_de novembre_de decembre".split(
+                '_'
+            ),
+            isFormat: /D[oD]?(\s)+MMMM/,
+        },
+        monthsShort: 'gen._febr._març_abr._mai_junh_julh._ago._set._oct._nov._dec.'.split(
+            '_'
+        ),
+        monthsParseExact: true,
+        weekdays: 'dimenge_diluns_dimars_dimècres_dijòus_divendres_dissabte'.split(
+            '_'
+        ),
+        weekdaysShort: 'dg._dl._dm._dc._dj._dv._ds.'.split('_'),
+        weekdaysMin: 'dg_dl_dm_dc_dj_dv_ds'.split('_'),
+        weekdaysParseExact: true,
+        longDateFormat: {
+            LT: 'H:mm',
+            LTS: 'H:mm:ss',
+            L: 'DD/MM/YYYY',
+            LL: 'D MMMM [de] YYYY',
+            ll: 'D MMM YYYY',
+            LLL: 'D MMMM [de] YYYY [a] H:mm',
+            lll: 'D MMM YYYY, H:mm',
+            LLLL: 'dddd D MMMM [de] YYYY [a] H:mm',
+            llll: 'ddd D MMM YYYY, H:mm',
+        },
+        calendar: {
+            sameDay: '[uèi a] LT',
+            nextDay: '[deman a] LT',
+            nextWeek: 'dddd [a] LT',
+            lastDay: '[ièr a] LT',
+            lastWeek: 'dddd [passat a] LT',
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: "d'aquí %s",
+            past: 'fa %s',
+            s: 'unas segondas',
+            ss: '%d segondas',
+            m: 'una minuta',
+            mm: '%d minutas',
+            h: 'una ora',
+            hh: '%d oras',
+            d: 'un jorn',
+            dd: '%d jorns',
+            M: 'un mes',
+            MM: '%d meses',
+            y: 'un an',
+            yy: '%d ans',
+        },
+        dayOfMonthOrdinalParse: /\d{1,2}(r|n|t|è|a)/,
+        ordinal: function (number, period) {
+            var output =
+                number === 1
+                    ? 'r'
+                    : number === 2
+                    ? 'n'
+                    : number === 3
+                    ? 'r'
+                    : number === 4
+                    ? 't'
+                    : 'è';
+            if (period === 'w' || period === 'W') {
+                output = 'a';
+            }
+            return number + output;
+        },
+        week: {
+            dow: 1, // Monday is the first day of the week.
+            doy: 4,
+        },
+    });
+
+    //! moment.js locale configuration
+
+    var symbolMap$e = {
+            '1': '੧',
+            '2': '੨',
+            '3': '੩',
+            '4': '੪',
+            '5': '੫',
+            '6': '੬',
+            '7': '੭',
+            '8': '੮',
+            '9': '੯',
+            '0': '੦',
+        },
+        numberMap$d = {
+            '੧': '1',
+            '੨': '2',
+            '੩': '3',
+            '੪': '4',
+            '੫': '5',
+            '੬': '6',
+            '੭': '7',
+            '੮': '8',
+            '੯': '9',
+            '੦': '0',
+        };
+
+    moment.defineLocale('pa-in', {
+        // There are months name as per Nanakshahi Calendar but they are not used as rigidly in modern Punjabi.
+        months: 'ਜਨਵਰੀ_ਫ਼ਰਵਰੀ_ਮਾਰਚ_ਅਪ੍ਰੈਲ_ਮਈ_ਜੂਨ_ਜੁਲਾਈ_ਅਗਸਤ_ਸਤੰਬਰ_ਅਕਤੂਬਰ_ਨਵੰਬਰ_ਦਸੰਬਰ'.split(
+            '_'
+        ),
+        monthsShort: 'ਜਨਵਰੀ_ਫ਼ਰਵਰੀ_ਮਾਰਚ_ਅਪ੍ਰੈਲ_ਮਈ_ਜੂਨ_ਜੁਲਾਈ_ਅਗਸਤ_ਸਤੰਬਰ_ਅਕਤੂਬਰ_ਨਵੰਬਰ_ਦਸੰਬਰ'.split(
+            '_'
+        ),
+        weekdays: 'ਐਤਵਾਰ_ਸੋਮਵਾਰ_ਮੰਗਲਵਾਰ_ਬੁਧਵਾਰ_ਵੀਰਵਾਰ_ਸ਼ੁੱਕਰਵਾਰ_ਸ਼ਨੀਚਰਵਾਰ'.split(
+            '_'
+        ),
+        weekdaysShort: 'ਐਤ_ਸੋਮ_ਮੰਗਲ_ਬੁਧ_ਵੀਰ_ਸ਼ੁਕਰ_ਸ਼ਨੀ'.split('_'),
+        weekdaysMin: 'ਐਤ_ਸੋਮ_ਮੰਗਲ_ਬੁਧ_ਵੀਰ_ਸ਼ੁਕਰ_ਸ਼ਨੀ'.split('_'),
+        longDateFormat: {
+            LT: 'A h:mm ਵਜੇ',
+            LTS: 'A h:mm:ss ਵਜੇ',
+            L: 'DD/MM/YYYY',
+            LL: 'D MMMM YYYY',
+            LLL: 'D MMMM YYYY, A h:mm ਵਜੇ',
+            LLLL: 'dddd, D MMMM YYYY, A h:mm ਵਜੇ',
+        },
+        calendar: {
+            sameDay: '[ਅਜ] LT',
+            nextDay: '[ਕਲ] LT',
+            nextWeek: '[ਅਗਲਾ] dddd, LT',
+            lastDay: '[ਕਲ] LT',
+            lastWeek: '[ਪਿਛਲੇ] dddd, LT',
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: '%s ਵਿੱਚ',
+            past: '%s ਪਿਛਲੇ',
+            s: 'ਕੁਝ ਸਕਿੰਟ',
+            ss: '%d ਸਕਿੰਟ',
+            m: 'ਇਕ ਮਿੰਟ',
+            mm: '%d ਮਿੰਟ',
+            h: 'ਇੱਕ ਘੰਟਾ',
+            hh: '%d ਘੰਟੇ',
+            d: 'ਇੱਕ ਦਿਨ',
+            dd: '%d ਦਿਨ',
+            M: 'ਇੱਕ ਮਹੀਨਾ',
+            MM: '%d ਮਹੀਨੇ',
+            y: 'ਇੱਕ ਸਾਲ',
+            yy: '%d ਸਾਲ',
+        },
+        preparse: function (string) {
+            return string.replace(/[੧੨੩੪੫੬੭੮੯੦]/g, function (match) {
+                return numberMap$d[match];
+            });
+        },
+        postformat: function (string) {
+            return string.replace(/\d/g, function (match) {
+                return symbolMap$e[match];
+            });
+        },
+        // Punjabi notation for meridiems are quite fuzzy in practice. While there exists
+        // a rigid notion of a 'Pahar' it is not used as rigidly in modern Punjabi.
+        meridiemParse: /ਰਾਤ|ਸਵੇਰ|ਦੁਪਹਿਰ|ਸ਼ਾਮ/,
+        meridiemHour: function (hour, meridiem) {
+            if (hour === 12) {
+                hour = 0;
+            }
+            if (meridiem === 'ਰਾਤ') {
+                return hour < 4 ? hour : hour + 12;
+            } else if (meridiem === 'ਸਵੇਰ') {
+                return hour;
+            } else if (meridiem === 'ਦੁਪਹਿਰ') {
+                return hour >= 10 ? hour : hour + 12;
+            } else if (meridiem === 'ਸ਼ਾਮ') {
+                return hour + 12;
+            }
+        },
+        meridiem: function (hour, minute, isLower) {
+            if (hour < 4) {
+                return 'ਰਾਤ';
+            } else if (hour < 10) {
+                return 'ਸਵੇਰ';
+            } else if (hour < 17) {
+                return 'ਦੁਪਹਿਰ';
+            } else if (hour < 20) {
+                return 'ਸ਼ਾਮ';
+            } else {
+                return 'ਰਾਤ';
+            }
+        },
+        week: {
+            dow: 0, // Sunday is the first day of the week.
+            doy: 6, // The week that contains Jan 6th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    var monthsNominative = 'styczeń_luty_marzec_kwiecień_maj_czerwiec_lipiec_sierpień_wrzesień_październik_listopad_grudzień'.split(
+            '_'
+        ),
+        monthsSubjective = 'stycznia_lutego_marca_kwietnia_maja_czerwca_lipca_sierpnia_września_października_listopada_grudnia'.split(
+            '_'
+        );
+    function plural$3(n) {
+        return n % 10 < 5 && n % 10 > 1 && ~~(n / 10) % 10 !== 1;
+    }
+    function translate$8(number, withoutSuffix, key) {
+        var result = number + ' ';
+        switch (key) {
+            case 'ss':
+                return result + (plural$3(number) ? 'sekundy' : 'sekund');
+            case 'm':
+                return withoutSuffix ? 'minuta' : 'minutę';
+            case 'mm':
+                return result + (plural$3(number) ? 'minuty' : 'minut');
+            case 'h':
+                return withoutSuffix ? 'godzina' : 'godzinę';
+            case 'hh':
+                return result + (plural$3(number) ? 'godziny' : 'godzin');
+            case 'MM':
+                return result + (plural$3(number) ? 'miesiące' : 'miesięcy');
+            case 'yy':
+                return result + (plural$3(number) ? 'lata' : 'lat');
+        }
+    }
+
+    moment.defineLocale('pl', {
+        months: function (momentToFormat, format) {
+            if (!momentToFormat) {
+                return monthsNominative;
+            } else if (format === '') {
+                // Hack: if format empty we know this is used to generate
+                // RegExp by moment. Give then back both valid forms of months
+                // in RegExp ready format.
+                return (
+                    '(' +
+                    monthsSubjective[momentToFormat.month()] +
+                    '|' +
+                    monthsNominative[momentToFormat.month()] +
+                    ')'
+                );
+            } else if (/D MMMM/.test(format)) {
+                return monthsSubjective[momentToFormat.month()];
+            } else {
+                return monthsNominative[momentToFormat.month()];
+            }
+        },
+        monthsShort: 'sty_lut_mar_kwi_maj_cze_lip_sie_wrz_paź_lis_gru'.split('_'),
+        weekdays: 'niedziela_poniedziałek_wtorek_środa_czwartek_piątek_sobota'.split(
+            '_'
+        ),
+        weekdaysShort: 'ndz_pon_wt_śr_czw_pt_sob'.split('_'),
+        weekdaysMin: 'Nd_Pn_Wt_Śr_Cz_Pt_So'.split('_'),
+        longDateFormat: {
+            LT: 'HH:mm',
+            LTS: 'HH:mm:ss',
+            L: 'DD.MM.YYYY',
+            LL: 'D MMMM YYYY',
+            LLL: 'D MMMM YYYY HH:mm',
+            LLLL: 'dddd, D MMMM YYYY HH:mm',
+        },
+        calendar: {
+            sameDay: '[Dziś o] LT',
+            nextDay: '[Jutro o] LT',
+            nextWeek: function () {
+                switch (this.day()) {
+                    case 0:
+                        return '[W niedzielę o] LT';
+
+                    case 2:
+                        return '[We wtorek o] LT';
+
+                    case 3:
+                        return '[W środę o] LT';
+
+                    case 6:
+                        return '[W sobotę o] LT';
+
+                    default:
+                        return '[W] dddd [o] LT';
+                }
+            },
+            lastDay: '[Wczoraj o] LT',
+            lastWeek: function () {
+                switch (this.day()) {
+                    case 0:
+                        return '[W zeszłą niedzielę o] LT';
+                    case 3:
+                        return '[W zeszłą środę o] LT';
+                    case 6:
+                        return '[W zeszłą sobotę o] LT';
+                    default:
+                        return '[W zeszły] dddd [o] LT';
+                }
+            },
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: 'za %s',
+            past: '%s temu',
+            s: 'kilka sekund',
+            ss: translate$8,
+            m: translate$8,
+            mm: translate$8,
+            h: translate$8,
+            hh: translate$8,
+            d: '1 dzień',
+            dd: '%d dni',
+            M: 'miesiąc',
+            MM: translate$8,
+            y: 'rok',
+            yy: translate$8,
+        },
+        dayOfMonthOrdinalParse: /\d{1,2}\./,
+        ordinal: '%d.',
+        week: {
+            dow: 1, // Monday is the first day of the week.
+            doy: 4, // The week that contains Jan 4th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    moment.defineLocale('pt-br', {
+        months: 'janeiro_fevereiro_março_abril_maio_junho_julho_agosto_setembro_outubro_novembro_dezembro'.split(
+            '_'
+        ),
+        monthsShort: 'jan_fev_mar_abr_mai_jun_jul_ago_set_out_nov_dez'.split('_'),
+        weekdays: 'domingo_segunda-feira_terça-feira_quarta-feira_quinta-feira_sexta-feira_sábado'.split(
+            '_'
+        ),
+        weekdaysShort: 'dom_seg_ter_qua_qui_sex_sáb'.split('_'),
+        weekdaysMin: 'do_2ª_3ª_4ª_5ª_6ª_sá'.split('_'),
+        weekdaysParseExact: true,
+        longDateFormat: {
+            LT: 'HH:mm',
+            LTS: 'HH:mm:ss',
+            L: 'DD/MM/YYYY',
+            LL: 'D [de] MMMM [de] YYYY',
+            LLL: 'D [de] MMMM [de] YYYY [às] HH:mm',
+            LLLL: 'dddd, D [de] MMMM [de] YYYY [às] HH:mm',
+        },
+        calendar: {
+            sameDay: '[Hoje às] LT',
+            nextDay: '[Amanhã às] LT',
+            nextWeek: 'dddd [às] LT',
+            lastDay: '[Ontem às] LT',
+            lastWeek: function () {
+                return this.day() === 0 || this.day() === 6
+                    ? '[Último] dddd [às] LT' // Saturday + Sunday
+                    : '[Última] dddd [às] LT'; // Monday - Friday
+            },
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: 'em %s',
+            past: 'há %s',
+            s: 'poucos segundos',
+            ss: '%d segundos',
+            m: 'um minuto',
+            mm: '%d minutos',
+            h: 'uma hora',
+            hh: '%d horas',
+            d: 'um dia',
+            dd: '%d dias',
+            M: 'um mês',
+            MM: '%d meses',
+            y: 'um ano',
+            yy: '%d anos',
+        },
+        dayOfMonthOrdinalParse: /\d{1,2}º/,
+        ordinal: '%dº',
+    });
+
+    //! moment.js locale configuration
+
+    moment.defineLocale('pt', {
+        months: 'janeiro_fevereiro_março_abril_maio_junho_julho_agosto_setembro_outubro_novembro_dezembro'.split(
+            '_'
+        ),
+        monthsShort: 'jan_fev_mar_abr_mai_jun_jul_ago_set_out_nov_dez'.split('_'),
+        weekdays: 'Domingo_Segunda-feira_Terça-feira_Quarta-feira_Quinta-feira_Sexta-feira_Sábado'.split(
+            '_'
+        ),
+        weekdaysShort: 'Dom_Seg_Ter_Qua_Qui_Sex_Sáb'.split('_'),
+        weekdaysMin: 'Do_2ª_3ª_4ª_5ª_6ª_Sá'.split('_'),
+        weekdaysParseExact: true,
+        longDateFormat: {
+            LT: 'HH:mm',
+            LTS: 'HH:mm:ss',
+            L: 'DD/MM/YYYY',
+            LL: 'D [de] MMMM [de] YYYY',
+            LLL: 'D [de] MMMM [de] YYYY HH:mm',
+            LLLL: 'dddd, D [de] MMMM [de] YYYY HH:mm',
+        },
+        calendar: {
+            sameDay: '[Hoje às] LT',
+            nextDay: '[Amanhã às] LT',
+            nextWeek: 'dddd [às] LT',
+            lastDay: '[Ontem às] LT',
+            lastWeek: function () {
+                return this.day() === 0 || this.day() === 6
+                    ? '[Último] dddd [às] LT' // Saturday + Sunday
+                    : '[Última] dddd [às] LT'; // Monday - Friday
+            },
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: 'em %s',
+            past: 'há %s',
+            s: 'segundos',
+            ss: '%d segundos',
+            m: 'um minuto',
+            mm: '%d minutos',
+            h: 'uma hora',
+            hh: '%d horas',
+            d: 'um dia',
+            dd: '%d dias',
+            M: 'um mês',
+            MM: '%d meses',
+            y: 'um ano',
+            yy: '%d anos',
+        },
+        dayOfMonthOrdinalParse: /\d{1,2}º/,
+        ordinal: '%dº',
+        week: {
+            dow: 1, // Monday is the first day of the week.
+            doy: 4, // The week that contains Jan 4th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    function relativeTimeWithPlural$2(number, withoutSuffix, key) {
+        var format = {
+                ss: 'secunde',
+                mm: 'minute',
+                hh: 'ore',
+                dd: 'zile',
+                MM: 'luni',
+                yy: 'ani',
+            },
+            separator = ' ';
+        if (number % 100 >= 20 || (number >= 100 && number % 100 === 0)) {
+            separator = ' de ';
+        }
+        return number + separator + format[key];
+    }
+
+    moment.defineLocale('ro', {
+        months: 'ianuarie_februarie_martie_aprilie_mai_iunie_iulie_august_septembrie_octombrie_noiembrie_decembrie'.split(
+            '_'
+        ),
+        monthsShort: 'ian._feb._mart._apr._mai_iun._iul._aug._sept._oct._nov._dec.'.split(
+            '_'
+        ),
+        monthsParseExact: true,
+        weekdays: 'duminică_luni_marți_miercuri_joi_vineri_sâmbătă'.split('_'),
+        weekdaysShort: 'Dum_Lun_Mar_Mie_Joi_Vin_Sâm'.split('_'),
+        weekdaysMin: 'Du_Lu_Ma_Mi_Jo_Vi_Sâ'.split('_'),
+        longDateFormat: {
+            LT: 'H:mm',
+            LTS: 'H:mm:ss',
+            L: 'DD.MM.YYYY',
+            LL: 'D MMMM YYYY',
+            LLL: 'D MMMM YYYY H:mm',
+            LLLL: 'dddd, D MMMM YYYY H:mm',
+        },
+        calendar: {
+            sameDay: '[azi la] LT',
+            nextDay: '[mâine la] LT',
+            nextWeek: 'dddd [la] LT',
+            lastDay: '[ieri la] LT',
+            lastWeek: '[fosta] dddd [la] LT',
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: 'peste %s',
+            past: '%s în urmă',
+            s: 'câteva secunde',
+            ss: relativeTimeWithPlural$2,
+            m: 'un minut',
+            mm: relativeTimeWithPlural$2,
+            h: 'o oră',
+            hh: relativeTimeWithPlural$2,
+            d: 'o zi',
+            dd: relativeTimeWithPlural$2,
+            M: 'o lună',
+            MM: relativeTimeWithPlural$2,
+            y: 'un an',
+            yy: relativeTimeWithPlural$2,
+        },
+        week: {
+            dow: 1, // Monday is the first day of the week.
+            doy: 7, // The week that contains Jan 7th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    function plural$4(word, num) {
+        var forms = word.split('_');
+        return num % 10 === 1 && num % 100 !== 11
+            ? forms[0]
+            : num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20)
+            ? forms[1]
+            : forms[2];
+    }
+    function relativeTimeWithPlural$3(number, withoutSuffix, key) {
+        var format = {
+            ss: withoutSuffix ? 'секунда_секунды_секунд' : 'секунду_секунды_секунд',
+            mm: withoutSuffix ? 'минута_минуты_минут' : 'минуту_минуты_минут',
+            hh: 'час_часа_часов',
+            dd: 'день_дня_дней',
+            MM: 'месяц_месяца_месяцев',
+            yy: 'год_года_лет',
+        };
+        if (key === 'm') {
+            return withoutSuffix ? 'минута' : 'минуту';
+        } else {
+            return number + ' ' + plural$4(format[key], +number);
+        }
+    }
+    var monthsParse$8 = [
+        /^янв/i,
+        /^фев/i,
+        /^мар/i,
+        /^апр/i,
+        /^ма[йя]/i,
+        /^июн/i,
+        /^июл/i,
+        /^авг/i,
+        /^сен/i,
+        /^окт/i,
+        /^ноя/i,
+        /^дек/i,
+    ];
+
+    // http://new.gramota.ru/spravka/rules/139-prop : § 103
+    // Сокращения месяцев: http://new.gramota.ru/spravka/buro/search-answer?s=242637
+    // CLDR data:          http://www.unicode.org/cldr/charts/28/summary/ru.html#1753
+    moment.defineLocale('ru', {
+        months: {
+            format: 'января_февраля_марта_апреля_мая_июня_июля_августа_сентября_октября_ноября_декабря'.split(
+                '_'
+            ),
+            standalone: 'январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь'.split(
+                '_'
+            ),
+        },
+        monthsShort: {
+            // по CLDR именно "июл." и "июн.", но какой смысл менять букву на точку?
+            format: 'янв._февр._мар._апр._мая_июня_июля_авг._сент._окт._нояб._дек.'.split(
+                '_'
+            ),
+            standalone: 'янв._февр._март_апр._май_июнь_июль_авг._сент._окт._нояб._дек.'.split(
+                '_'
+            ),
+        },
+        weekdays: {
+            standalone: 'воскресенье_понедельник_вторник_среда_четверг_пятница_суббота'.split(
+                '_'
+            ),
+            format: 'воскресенье_понедельник_вторник_среду_четверг_пятницу_субботу'.split(
+                '_'
+            ),
+            isFormat: /\[ ?[Вв] ?(?:прошлую|следующую|эту)? ?] ?dddd/,
+        },
+        weekdaysShort: 'вс_пн_вт_ср_чт_пт_сб'.split('_'),
+        weekdaysMin: 'вс_пн_вт_ср_чт_пт_сб'.split('_'),
+        monthsParse: monthsParse$8,
+        longMonthsParse: monthsParse$8,
+        shortMonthsParse: monthsParse$8,
+
+        // полные названия с падежами, по три буквы, для некоторых, по 4 буквы, сокращения с точкой и без точки
+        monthsRegex: /^(январ[ья]|янв\.?|феврал[ья]|февр?\.?|марта?|мар\.?|апрел[ья]|апр\.?|ма[йя]|июн[ья]|июн\.?|июл[ья]|июл\.?|августа?|авг\.?|сентябр[ья]|сент?\.?|октябр[ья]|окт\.?|ноябр[ья]|нояб?\.?|декабр[ья]|дек\.?)/i,
+
+        // копия предыдущего
+        monthsShortRegex: /^(январ[ья]|янв\.?|феврал[ья]|февр?\.?|марта?|мар\.?|апрел[ья]|апр\.?|ма[йя]|июн[ья]|июн\.?|июл[ья]|июл\.?|августа?|авг\.?|сентябр[ья]|сент?\.?|октябр[ья]|окт\.?|ноябр[ья]|нояб?\.?|декабр[ья]|дек\.?)/i,
+
+        // полные названия с падежами
+        monthsStrictRegex: /^(январ[яь]|феврал[яь]|марта?|апрел[яь]|ма[яй]|июн[яь]|июл[яь]|августа?|сентябр[яь]|октябр[яь]|ноябр[яь]|декабр[яь])/i,
+
+        // Выражение, которое соответствует только сокращённым формам
+        monthsShortStrictRegex: /^(янв\.|февр?\.|мар[т.]|апр\.|ма[яй]|июн[ья.]|июл[ья.]|авг\.|сент?\.|окт\.|нояб?\.|дек\.)/i,
+        longDateFormat: {
+            LT: 'H:mm',
+            LTS: 'H:mm:ss',
+            L: 'DD.MM.YYYY',
+            LL: 'D MMMM YYYY г.',
+            LLL: 'D MMMM YYYY г., H:mm',
+            LLLL: 'dddd, D MMMM YYYY г., H:mm',
+        },
+        calendar: {
+            sameDay: '[Сегодня, в] LT',
+            nextDay: '[Завтра, в] LT',
+            lastDay: '[Вчера, в] LT',
+            nextWeek: function (now) {
+                if (now.week() !== this.week()) {
+                    switch (this.day()) {
+                        case 0:
+                            return '[В следующее] dddd, [в] LT';
+                        case 1:
+                        case 2:
+                        case 4:
+                            return '[В следующий] dddd, [в] LT';
+                        case 3:
+                        case 5:
+                        case 6:
+                            return '[В следующую] dddd, [в] LT';
+                    }
+                } else {
+                    if (this.day() === 2) {
+                        return '[Во] dddd, [в] LT';
+                    } else {
+                        return '[В] dddd, [в] LT';
+                    }
+                }
+            },
+            lastWeek: function (now) {
+                if (now.week() !== this.week()) {
+                    switch (this.day()) {
+                        case 0:
+                            return '[В прошлое] dddd, [в] LT';
+                        case 1:
+                        case 2:
+                        case 4:
+                            return '[В прошлый] dddd, [в] LT';
+                        case 3:
+                        case 5:
+                        case 6:
+                            return '[В прошлую] dddd, [в] LT';
+                    }
+                } else {
+                    if (this.day() === 2) {
+                        return '[Во] dddd, [в] LT';
+                    } else {
+                        return '[В] dddd, [в] LT';
+                    }
+                }
+            },
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: 'через %s',
+            past: '%s назад',
+            s: 'несколько секунд',
+            ss: relativeTimeWithPlural$3,
+            m: relativeTimeWithPlural$3,
+            mm: relativeTimeWithPlural$3,
+            h: 'час',
+            hh: relativeTimeWithPlural$3,
+            d: 'день',
+            dd: relativeTimeWithPlural$3,
+            M: 'месяц',
+            MM: relativeTimeWithPlural$3,
+            y: 'год',
+            yy: relativeTimeWithPlural$3,
+        },
+        meridiemParse: /ночи|утра|дня|вечера/i,
+        isPM: function (input) {
+            return /^(дня|вечера)$/.test(input);
+        },
+        meridiem: function (hour, minute, isLower) {
+            if (hour < 4) {
+                return 'ночи';
+            } else if (hour < 12) {
+                return 'утра';
+            } else if (hour < 17) {
+                return 'дня';
+            } else {
+                return 'вечера';
+            }
+        },
+        dayOfMonthOrdinalParse: /\d{1,2}-(й|го|я)/,
+        ordinal: function (number, period) {
+            switch (period) {
+                case 'M':
+                case 'd':
+                case 'DDD':
+                    return number + '-й';
+                case 'D':
+                    return number + '-го';
+                case 'w':
+                case 'W':
+                    return number + '-я';
+                default:
+                    return number;
+            }
+        },
+        week: {
+            dow: 1, // Monday is the first day of the week.
+            doy: 4, // The week that contains Jan 4th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    var months$8 = [
+            'جنوري',
+            'فيبروري',
+            'مارچ',
+            'اپريل',
+            'مئي',
+            'جون',
+            'جولاءِ',
+            'آگسٽ',
+            'سيپٽمبر',
+            'آڪٽوبر',
+            'نومبر',
+            'ڊسمبر',
+        ],
+        days = ['آچر', 'سومر', 'اڱارو', 'اربع', 'خميس', 'جمع', 'ڇنڇر'];
+
+    moment.defineLocale('sd', {
+        months: months$8,
+        monthsShort: months$8,
+        weekdays: days,
+        weekdaysShort: days,
+        weekdaysMin: days,
+        longDateFormat: {
+            LT: 'HH:mm',
+            LTS: 'HH:mm:ss',
+            L: 'DD/MM/YYYY',
+            LL: 'D MMMM YYYY',
+            LLL: 'D MMMM YYYY HH:mm',
+            LLLL: 'dddd، D MMMM YYYY HH:mm',
+        },
+        meridiemParse: /صبح|شام/,
+        isPM: function (input) {
+            return 'شام' === input;
+        },
+        meridiem: function (hour, minute, isLower) {
+            if (hour < 12) {
+                return 'صبح';
+            }
+            return 'شام';
+        },
+        calendar: {
+            sameDay: '[اڄ] LT',
+            nextDay: '[سڀاڻي] LT',
+            nextWeek: 'dddd [اڳين هفتي تي] LT',
+            lastDay: '[ڪالهه] LT',
+            lastWeek: '[گزريل هفتي] dddd [تي] LT',
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: '%s پوء',
+            past: '%s اڳ',
+            s: 'چند سيڪنڊ',
+            ss: '%d سيڪنڊ',
+            m: 'هڪ منٽ',
+            mm: '%d منٽ',
+            h: 'هڪ ڪلاڪ',
+            hh: '%d ڪلاڪ',
+            d: 'هڪ ڏينهن',
+            dd: '%d ڏينهن',
+            M: 'هڪ مهينو',
+            MM: '%d مهينا',
+            y: 'هڪ سال',
+            yy: '%d سال',
+        },
+        preparse: function (string) {
+            return string.replace(/،/g, ',');
+        },
+        postformat: function (string) {
+            return string.replace(/,/g, '،');
+        },
+        week: {
+            dow: 1, // Monday is the first day of the week.
+            doy: 4, // The week that contains Jan 4th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    moment.defineLocale('se', {
+        months: 'ođđajagemánnu_guovvamánnu_njukčamánnu_cuoŋománnu_miessemánnu_geassemánnu_suoidnemánnu_borgemánnu_čakčamánnu_golggotmánnu_skábmamánnu_juovlamánnu'.split(
+            '_'
+        ),
+        monthsShort: 'ođđj_guov_njuk_cuo_mies_geas_suoi_borg_čakč_golg_skáb_juov'.split(
+            '_'
+        ),
+        weekdays: 'sotnabeaivi_vuossárga_maŋŋebárga_gaskavahkku_duorastat_bearjadat_lávvardat'.split(
+            '_'
+        ),
+        weekdaysShort: 'sotn_vuos_maŋ_gask_duor_bear_láv'.split('_'),
+        weekdaysMin: 's_v_m_g_d_b_L'.split('_'),
+        longDateFormat: {
+            LT: 'HH:mm',
+            LTS: 'HH:mm:ss',
+            L: 'DD.MM.YYYY',
+            LL: 'MMMM D. [b.] YYYY',
+            LLL: 'MMMM D. [b.] YYYY [ti.] HH:mm',
+            LLLL: 'dddd, MMMM D. [b.] YYYY [ti.] HH:mm',
+        },
+        calendar: {
+            sameDay: '[otne ti] LT',
+            nextDay: '[ihttin ti] LT',
+            nextWeek: 'dddd [ti] LT',
+            lastDay: '[ikte ti] LT',
+            lastWeek: '[ovddit] dddd [ti] LT',
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: '%s geažes',
+            past: 'maŋit %s',
+            s: 'moadde sekunddat',
+            ss: '%d sekunddat',
+            m: 'okta minuhta',
+            mm: '%d minuhtat',
+            h: 'okta diimmu',
+            hh: '%d diimmut',
+            d: 'okta beaivi',
+            dd: '%d beaivvit',
+            M: 'okta mánnu',
+            MM: '%d mánut',
+            y: 'okta jahki',
+            yy: '%d jagit',
+        },
+        dayOfMonthOrdinalParse: /\d{1,2}\./,
+        ordinal: '%d.',
+        week: {
+            dow: 1, // Monday is the first day of the week.
+            doy: 4, // The week that contains Jan 4th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    /*jshint -W100*/
+    moment.defineLocale('si', {
+        months: 'ජනවාරි_පෙබරවාරි_මාර්තු_අප්‍රේල්_මැයි_ජූනි_ජූලි_අගෝස්තු_සැප්තැම්බර්_ඔක්තෝබර්_නොවැම්බර්_දෙසැම්බර්'.split(
+            '_'
+        ),
+        monthsShort: 'ජන_පෙබ_මාර්_අප්_මැයි_ජූනි_ජූලි_අගෝ_සැප්_ඔක්_නොවැ_දෙසැ'.split(
+            '_'
+        ),
+        weekdays: 'ඉරිදා_සඳුදා_අඟහරුවාදා_බදාදා_බ්‍රහස්පතින්දා_සිකුරාදා_සෙනසුරාදා'.split(
+            '_'
+        ),
+        weekdaysShort: 'ඉරි_සඳු_අඟ_බදා_බ්‍රහ_සිකු_සෙන'.split('_'),
+        weekdaysMin: 'ඉ_ස_අ_බ_බ්‍ර_සි_සෙ'.split('_'),
+        weekdaysParseExact: true,
+        longDateFormat: {
+            LT: 'a h:mm',
+            LTS: 'a h:mm:ss',
+            L: 'YYYY/MM/DD',
+            LL: 'YYYY MMMM D',
+            LLL: 'YYYY MMMM D, a h:mm',
+            LLLL: 'YYYY MMMM D [වැනි] dddd, a h:mm:ss',
+        },
+        calendar: {
+            sameDay: '[අද] LT[ට]',
+            nextDay: '[හෙට] LT[ට]',
+            nextWeek: 'dddd LT[ට]',
+            lastDay: '[ඊයේ] LT[ට]',
+            lastWeek: '[පසුගිය] dddd LT[ට]',
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: '%sකින්',
+            past: '%sකට පෙර',
+            s: 'තත්පර කිහිපය',
+            ss: 'තත්පර %d',
+            m: 'මිනිත්තුව',
+            mm: 'මිනිත්තු %d',
+            h: 'පැය',
+            hh: 'පැය %d',
+            d: 'දිනය',
+            dd: 'දින %d',
+            M: 'මාසය',
+            MM: 'මාස %d',
+            y: 'වසර',
+            yy: 'වසර %d',
+        },
+        dayOfMonthOrdinalParse: /\d{1,2} වැනි/,
+        ordinal: function (number) {
+            return number + ' වැනි';
+        },
+        meridiemParse: /පෙර වරු|පස් වරු|පෙ.ව|ප.ව./,
+        isPM: function (input) {
+            return input === 'ප.ව.' || input === 'පස් වරු';
+        },
+        meridiem: function (hours, minutes, isLower) {
+            if (hours > 11) {
+                return isLower ? 'ප.ව.' : 'පස් වරු';
+            } else {
+                return isLower ? 'පෙ.ව.' : 'පෙර වරු';
+            }
+        },
+    });
+
+    //! moment.js locale configuration
+
+    var months$9 = 'január_február_marec_apríl_máj_jún_júl_august_september_október_november_december'.split(
+            '_'
+        ),
+        monthsShort$6 = 'jan_feb_mar_apr_máj_jún_júl_aug_sep_okt_nov_dec'.split('_');
+    function plural$5(n) {
+        return n > 1 && n < 5;
+    }
+    function translate$9(number, withoutSuffix, key, isFuture) {
+        var result = number + ' ';
+        switch (key) {
+            case 's': // a few seconds / in a few seconds / a few seconds ago
+                return withoutSuffix || isFuture ? 'pár sekúnd' : 'pár sekundami';
+            case 'ss': // 9 seconds / in 9 seconds / 9 seconds ago
+                if (withoutSuffix || isFuture) {
+                    return result + (plural$5(number) ? 'sekundy' : 'sekúnd');
+                } else {
+                    return result + 'sekundami';
+                }
+            case 'm': // a minute / in a minute / a minute ago
+                return withoutSuffix ? 'minúta' : isFuture ? 'minútu' : 'minútou';
+            case 'mm': // 9 minutes / in 9 minutes / 9 minutes ago
+                if (withoutSuffix || isFuture) {
+                    return result + (plural$5(number) ? 'minúty' : 'minút');
+                } else {
+                    return result + 'minútami';
+                }
+            case 'h': // an hour / in an hour / an hour ago
+                return withoutSuffix ? 'hodina' : isFuture ? 'hodinu' : 'hodinou';
+            case 'hh': // 9 hours / in 9 hours / 9 hours ago
+                if (withoutSuffix || isFuture) {
+                    return result + (plural$5(number) ? 'hodiny' : 'hodín');
+                } else {
+                    return result + 'hodinami';
+                }
+            case 'd': // a day / in a day / a day ago
+                return withoutSuffix || isFuture ? 'deň' : 'dňom';
+            case 'dd': // 9 days / in 9 days / 9 days ago
+                if (withoutSuffix || isFuture) {
+                    return result + (plural$5(number) ? 'dni' : 'dní');
+                } else {
+                    return result + 'dňami';
+                }
+            case 'M': // a month / in a month / a month ago
+                return withoutSuffix || isFuture ? 'mesiac' : 'mesiacom';
+            case 'MM': // 9 months / in 9 months / 9 months ago
+                if (withoutSuffix || isFuture) {
+                    return result + (plural$5(number) ? 'mesiace' : 'mesiacov');
+                } else {
+                    return result + 'mesiacmi';
+                }
+            case 'y': // a year / in a year / a year ago
+                return withoutSuffix || isFuture ? 'rok' : 'rokom';
+            case 'yy': // 9 years / in 9 years / 9 years ago
+                if (withoutSuffix || isFuture) {
+                    return result + (plural$5(number) ? 'roky' : 'rokov');
+                } else {
+                    return result + 'rokmi';
+                }
+        }
+    }
+
+    moment.defineLocale('sk', {
+        months: months$9,
+        monthsShort: monthsShort$6,
+        weekdays: 'nedeľa_pondelok_utorok_streda_štvrtok_piatok_sobota'.split('_'),
+        weekdaysShort: 'ne_po_ut_st_št_pi_so'.split('_'),
+        weekdaysMin: 'ne_po_ut_st_št_pi_so'.split('_'),
+        longDateFormat: {
+            LT: 'H:mm',
+            LTS: 'H:mm:ss',
+            L: 'DD.MM.YYYY',
+            LL: 'D. MMMM YYYY',
+            LLL: 'D. MMMM YYYY H:mm',
+            LLLL: 'dddd D. MMMM YYYY H:mm',
+        },
+        calendar: {
+            sameDay: '[dnes o] LT',
+            nextDay: '[zajtra o] LT',
+            nextWeek: function () {
+                switch (this.day()) {
+                    case 0:
+                        return '[v nedeľu o] LT';
+                    case 1:
+                    case 2:
+                        return '[v] dddd [o] LT';
+                    case 3:
+                        return '[v stredu o] LT';
+                    case 4:
+                        return '[vo štvrtok o] LT';
+                    case 5:
+                        return '[v piatok o] LT';
+                    case 6:
+                        return '[v sobotu o] LT';
+                }
+            },
+            lastDay: '[včera o] LT',
+            lastWeek: function () {
+                switch (this.day()) {
+                    case 0:
+                        return '[minulú nedeľu o] LT';
+                    case 1:
+                    case 2:
+                        return '[minulý] dddd [o] LT';
+                    case 3:
+                        return '[minulú stredu o] LT';
+                    case 4:
+                    case 5:
+                        return '[minulý] dddd [o] LT';
+                    case 6:
+                        return '[minulú sobotu o] LT';
+                }
+            },
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: 'za %s',
+            past: 'pred %s',
+            s: translate$9,
+            ss: translate$9,
+            m: translate$9,
+            mm: translate$9,
+            h: translate$9,
+            hh: translate$9,
+            d: translate$9,
+            dd: translate$9,
+            M: translate$9,
+            MM: translate$9,
+            y: translate$9,
+            yy: translate$9,
+        },
+        dayOfMonthOrdinalParse: /\d{1,2}\./,
+        ordinal: '%d.',
+        week: {
+            dow: 1, // Monday is the first day of the week.
+            doy: 4, // The week that contains Jan 4th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    function processRelativeTime$7(number, withoutSuffix, key, isFuture) {
+        var result = number + ' ';
+        switch (key) {
+            case 's':
+                return withoutSuffix || isFuture
+                    ? 'nekaj sekund'
+                    : 'nekaj sekundami';
+            case 'ss':
+                if (number === 1) {
+                    result += withoutSuffix ? 'sekundo' : 'sekundi';
+                } else if (number === 2) {
+                    result += withoutSuffix || isFuture ? 'sekundi' : 'sekundah';
+                } else if (number < 5) {
+                    result += withoutSuffix || isFuture ? 'sekunde' : 'sekundah';
+                } else {
+                    result += 'sekund';
+                }
+                return result;
+            case 'm':
+                return withoutSuffix ? 'ena minuta' : 'eno minuto';
+            case 'mm':
+                if (number === 1) {
+                    result += withoutSuffix ? 'minuta' : 'minuto';
+                } else if (number === 2) {
+                    result += withoutSuffix || isFuture ? 'minuti' : 'minutama';
+                } else if (number < 5) {
+                    result += withoutSuffix || isFuture ? 'minute' : 'minutami';
+                } else {
+                    result += withoutSuffix || isFuture ? 'minut' : 'minutami';
+                }
+                return result;
+            case 'h':
+                return withoutSuffix ? 'ena ura' : 'eno uro';
+            case 'hh':
+                if (number === 1) {
+                    result += withoutSuffix ? 'ura' : 'uro';
+                } else if (number === 2) {
+                    result += withoutSuffix || isFuture ? 'uri' : 'urama';
+                } else if (number < 5) {
+                    result += withoutSuffix || isFuture ? 'ure' : 'urami';
+                } else {
+                    result += withoutSuffix || isFuture ? 'ur' : 'urami';
+                }
+                return result;
+            case 'd':
+                return withoutSuffix || isFuture ? 'en dan' : 'enim dnem';
+            case 'dd':
+                if (number === 1) {
+                    result += withoutSuffix || isFuture ? 'dan' : 'dnem';
+                } else if (number === 2) {
+                    result += withoutSuffix || isFuture ? 'dni' : 'dnevoma';
+                } else {
+                    result += withoutSuffix || isFuture ? 'dni' : 'dnevi';
+                }
+                return result;
+            case 'M':
+                return withoutSuffix || isFuture ? 'en mesec' : 'enim mesecem';
+            case 'MM':
+                if (number === 1) {
+                    result += withoutSuffix || isFuture ? 'mesec' : 'mesecem';
+                } else if (number === 2) {
+                    result += withoutSuffix || isFuture ? 'meseca' : 'mesecema';
+                } else if (number < 5) {
+                    result += withoutSuffix || isFuture ? 'mesece' : 'meseci';
+                } else {
+                    result += withoutSuffix || isFuture ? 'mesecev' : 'meseci';
+                }
+                return result;
+            case 'y':
+                return withoutSuffix || isFuture ? 'eno leto' : 'enim letom';
+            case 'yy':
+                if (number === 1) {
+                    result += withoutSuffix || isFuture ? 'leto' : 'letom';
+                } else if (number === 2) {
+                    result += withoutSuffix || isFuture ? 'leti' : 'letoma';
+                } else if (number < 5) {
+                    result += withoutSuffix || isFuture ? 'leta' : 'leti';
+                } else {
+                    result += withoutSuffix || isFuture ? 'let' : 'leti';
+                }
+                return result;
+        }
+    }
+
+    moment.defineLocale('sl', {
+        months: 'januar_februar_marec_april_maj_junij_julij_avgust_september_oktober_november_december'.split(
+            '_'
+        ),
+        monthsShort: 'jan._feb._mar._apr._maj._jun._jul._avg._sep._okt._nov._dec.'.split(
+            '_'
+        ),
+        monthsParseExact: true,
+        weekdays: 'nedelja_ponedeljek_torek_sreda_četrtek_petek_sobota'.split('_'),
+        weekdaysShort: 'ned._pon._tor._sre._čet._pet._sob.'.split('_'),
+        weekdaysMin: 'ne_po_to_sr_če_pe_so'.split('_'),
+        weekdaysParseExact: true,
+        longDateFormat: {
+            LT: 'H:mm',
+            LTS: 'H:mm:ss',
+            L: 'DD. MM. YYYY',
+            LL: 'D. MMMM YYYY',
+            LLL: 'D. MMMM YYYY H:mm',
+            LLLL: 'dddd, D. MMMM YYYY H:mm',
+        },
+        calendar: {
+            sameDay: '[danes ob] LT',
+            nextDay: '[jutri ob] LT',
+
+            nextWeek: function () {
+                switch (this.day()) {
+                    case 0:
+                        return '[v] [nedeljo] [ob] LT';
+                    case 3:
+                        return '[v] [sredo] [ob] LT';
+                    case 6:
+                        return '[v] [soboto] [ob] LT';
+                    case 1:
+                    case 2:
+                    case 4:
+                    case 5:
+                        return '[v] dddd [ob] LT';
+                }
+            },
+            lastDay: '[včeraj ob] LT',
+            lastWeek: function () {
+                switch (this.day()) {
+                    case 0:
+                        return '[prejšnjo] [nedeljo] [ob] LT';
+                    case 3:
+                        return '[prejšnjo] [sredo] [ob] LT';
+                    case 6:
+                        return '[prejšnjo] [soboto] [ob] LT';
+                    case 1:
+                    case 2:
+                    case 4:
+                    case 5:
+                        return '[prejšnji] dddd [ob] LT';
+                }
+            },
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: 'čez %s',
+            past: 'pred %s',
+            s: processRelativeTime$7,
+            ss: processRelativeTime$7,
+            m: processRelativeTime$7,
+            mm: processRelativeTime$7,
+            h: processRelativeTime$7,
+            hh: processRelativeTime$7,
+            d: processRelativeTime$7,
+            dd: processRelativeTime$7,
+            M: processRelativeTime$7,
+            MM: processRelativeTime$7,
+            y: processRelativeTime$7,
+            yy: processRelativeTime$7,
+        },
+        dayOfMonthOrdinalParse: /\d{1,2}\./,
+        ordinal: '%d.',
+        week: {
+            dow: 1, // Monday is the first day of the week.
+            doy: 7, // The week that contains Jan 7th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    moment.defineLocale('sq', {
+        months: 'Janar_Shkurt_Mars_Prill_Maj_Qershor_Korrik_Gusht_Shtator_Tetor_Nëntor_Dhjetor'.split(
+            '_'
+        ),
+        monthsShort: 'Jan_Shk_Mar_Pri_Maj_Qer_Kor_Gus_Sht_Tet_Nën_Dhj'.split('_'),
+        weekdays: 'E Diel_E Hënë_E Martë_E Mërkurë_E Enjte_E Premte_E Shtunë'.split(
+            '_'
+        ),
+        weekdaysShort: 'Die_Hën_Mar_Mër_Enj_Pre_Sht'.split('_'),
+        weekdaysMin: 'D_H_Ma_Më_E_P_Sh'.split('_'),
+        weekdaysParseExact: true,
+        meridiemParse: /PD|MD/,
+        isPM: function (input) {
+            return input.charAt(0) === 'M';
+        },
+        meridiem: function (hours, minutes, isLower) {
+            return hours < 12 ? 'PD' : 'MD';
+        },
+        longDateFormat: {
+            LT: 'HH:mm',
+            LTS: 'HH:mm:ss',
+            L: 'DD/MM/YYYY',
+            LL: 'D MMMM YYYY',
+            LLL: 'D MMMM YYYY HH:mm',
+            LLLL: 'dddd, D MMMM YYYY HH:mm',
+        },
+        calendar: {
+            sameDay: '[Sot në] LT',
+            nextDay: '[Nesër në] LT',
+            nextWeek: 'dddd [në] LT',
+            lastDay: '[Dje në] LT',
+            lastWeek: 'dddd [e kaluar në] LT',
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: 'në %s',
+            past: '%s më parë',
+            s: 'disa sekonda',
+            ss: '%d sekonda',
+            m: 'një minutë',
+            mm: '%d minuta',
+            h: 'një orë',
+            hh: '%d orë',
+            d: 'një ditë',
+            dd: '%d ditë',
+            M: 'një muaj',
+            MM: '%d muaj',
+            y: 'një vit',
+            yy: '%d vite',
+        },
+        dayOfMonthOrdinalParse: /\d{1,2}\./,
+        ordinal: '%d.',
+        week: {
+            dow: 1, // Monday is the first day of the week.
+            doy: 4, // The week that contains Jan 4th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    var translator$1 = {
+        words: {
+            //Different grammatical cases
+            ss: ['секунда', 'секунде', 'секунди'],
+            m: ['један минут', 'једне минуте'],
+            mm: ['минут', 'минуте', 'минута'],
+            h: ['један сат', 'једног сата'],
+            hh: ['сат', 'сата', 'сати'],
+            dd: ['дан', 'дана', 'дана'],
+            MM: ['месец', 'месеца', 'месеци'],
+            yy: ['година', 'године', 'година'],
+        },
+        correctGrammaticalCase: function (number, wordKey) {
+            return number === 1
+                ? wordKey[0]
+                : number >= 2 && number <= 4
+                ? wordKey[1]
+                : wordKey[2];
+        },
+        translate: function (number, withoutSuffix, key) {
+            var wordKey = translator$1.words[key];
+            if (key.length === 1) {
+                return withoutSuffix ? wordKey[0] : wordKey[1];
+            } else {
+                return (
+                    number +
+                    ' ' +
+                    translator$1.correctGrammaticalCase(number, wordKey)
+                );
+            }
+        },
+    };
+
+    moment.defineLocale('sr-cyrl', {
+        months: 'јануар_фебруар_март_април_мај_јун_јул_август_септембар_октобар_новембар_децембар'.split(
+            '_'
+        ),
+        monthsShort: 'јан._феб._мар._апр._мај_јун_јул_авг._сеп._окт._нов._дец.'.split(
+            '_'
+        ),
+        monthsParseExact: true,
+        weekdays: 'недеља_понедељак_уторак_среда_четвртак_петак_субота'.split('_'),
+        weekdaysShort: 'нед._пон._уто._сре._чет._пет._суб.'.split('_'),
+        weekdaysMin: 'не_по_ут_ср_че_пе_су'.split('_'),
+        weekdaysParseExact: true,
+        longDateFormat: {
+            LT: 'H:mm',
+            LTS: 'H:mm:ss',
+            L: 'DD.MM.YYYY',
+            LL: 'D. MMMM YYYY',
+            LLL: 'D. MMMM YYYY H:mm',
+            LLLL: 'dddd, D. MMMM YYYY H:mm',
+        },
+        calendar: {
+            sameDay: '[данас у] LT',
+            nextDay: '[сутра у] LT',
+            nextWeek: function () {
+                switch (this.day()) {
+                    case 0:
+                        return '[у] [недељу] [у] LT';
+                    case 3:
+                        return '[у] [среду] [у] LT';
+                    case 6:
+                        return '[у] [суботу] [у] LT';
+                    case 1:
+                    case 2:
+                    case 4:
+                    case 5:
+                        return '[у] dddd [у] LT';
+                }
+            },
+            lastDay: '[јуче у] LT',
+            lastWeek: function () {
+                var lastWeekDays = [
+                    '[прошле] [недеље] [у] LT',
+                    '[прошлог] [понедељка] [у] LT',
+                    '[прошлог] [уторка] [у] LT',
+                    '[прошле] [среде] [у] LT',
+                    '[прошлог] [четвртка] [у] LT',
+                    '[прошлог] [петка] [у] LT',
+                    '[прошле] [суботе] [у] LT',
+                ];
+                return lastWeekDays[this.day()];
+            },
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: 'за %s',
+            past: 'пре %s',
+            s: 'неколико секунди',
+            ss: translator$1.translate,
+            m: translator$1.translate,
+            mm: translator$1.translate,
+            h: translator$1.translate,
+            hh: translator$1.translate,
+            d: 'дан',
+            dd: translator$1.translate,
+            M: 'месец',
+            MM: translator$1.translate,
+            y: 'годину',
+            yy: translator$1.translate,
+        },
+        dayOfMonthOrdinalParse: /\d{1,2}\./,
+        ordinal: '%d.',
+        week: {
+            dow: 1, // Monday is the first day of the week.
+            doy: 7, // The week that contains Jan 7th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    var translator$2 = {
+        words: {
+            //Different grammatical cases
+            ss: ['sekunda', 'sekunde', 'sekundi'],
+            m: ['jedan minut', 'jedne minute'],
+            mm: ['minut', 'minute', 'minuta'],
+            h: ['jedan sat', 'jednog sata'],
+            hh: ['sat', 'sata', 'sati'],
+            dd: ['dan', 'dana', 'dana'],
+            MM: ['mesec', 'meseca', 'meseci'],
+            yy: ['godina', 'godine', 'godina'],
+        },
+        correctGrammaticalCase: function (number, wordKey) {
+            return number === 1
+                ? wordKey[0]
+                : number >= 2 && number <= 4
+                ? wordKey[1]
+                : wordKey[2];
+        },
+        translate: function (number, withoutSuffix, key) {
+            var wordKey = translator$2.words[key];
+            if (key.length === 1) {
+                return withoutSuffix ? wordKey[0] : wordKey[1];
+            } else {
+                return (
+                    number +
+                    ' ' +
+                    translator$2.correctGrammaticalCase(number, wordKey)
+                );
+            }
+        },
+    };
+
+    moment.defineLocale('sr', {
+        months: 'januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar'.split(
+            '_'
+        ),
+        monthsShort: 'jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.'.split(
+            '_'
+        ),
+        monthsParseExact: true,
+        weekdays: 'nedelja_ponedeljak_utorak_sreda_četvrtak_petak_subota'.split(
+            '_'
+        ),
+        weekdaysShort: 'ned._pon._uto._sre._čet._pet._sub.'.split('_'),
+        weekdaysMin: 'ne_po_ut_sr_če_pe_su'.split('_'),
+        weekdaysParseExact: true,
+        longDateFormat: {
+            LT: 'H:mm',
+            LTS: 'H:mm:ss',
+            L: 'DD.MM.YYYY',
+            LL: 'D. MMMM YYYY',
+            LLL: 'D. MMMM YYYY H:mm',
+            LLLL: 'dddd, D. MMMM YYYY H:mm',
+        },
+        calendar: {
+            sameDay: '[danas u] LT',
+            nextDay: '[sutra u] LT',
+            nextWeek: function () {
+                switch (this.day()) {
+                    case 0:
+                        return '[u] [nedelju] [u] LT';
+                    case 3:
+                        return '[u] [sredu] [u] LT';
+                    case 6:
+                        return '[u] [subotu] [u] LT';
+                    case 1:
+                    case 2:
+                    case 4:
+                    case 5:
+                        return '[u] dddd [u] LT';
+                }
+            },
+            lastDay: '[juče u] LT',
+            lastWeek: function () {
+                var lastWeekDays = [
+                    '[prošle] [nedelje] [u] LT',
+                    '[prošlog] [ponedeljka] [u] LT',
+                    '[prošlog] [utorka] [u] LT',
+                    '[prošle] [srede] [u] LT',
+                    '[prošlog] [četvrtka] [u] LT',
+                    '[prošlog] [petka] [u] LT',
+                    '[prošle] [subote] [u] LT',
+                ];
+                return lastWeekDays[this.day()];
+            },
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: 'za %s',
+            past: 'pre %s',
+            s: 'nekoliko sekundi',
+            ss: translator$2.translate,
+            m: translator$2.translate,
+            mm: translator$2.translate,
+            h: translator$2.translate,
+            hh: translator$2.translate,
+            d: 'dan',
+            dd: translator$2.translate,
+            M: 'mesec',
+            MM: translator$2.translate,
+            y: 'godinu',
+            yy: translator$2.translate,
+        },
+        dayOfMonthOrdinalParse: /\d{1,2}\./,
+        ordinal: '%d.',
+        week: {
+            dow: 1, // Monday is the first day of the week.
+            doy: 7, // The week that contains Jan 7th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    moment.defineLocale('ss', {
+        months: "Bhimbidvwane_Indlovana_Indlov'lenkhulu_Mabasa_Inkhwekhweti_Inhlaba_Kholwane_Ingci_Inyoni_Imphala_Lweti_Ingongoni".split(
+            '_'
+        ),
+        monthsShort: 'Bhi_Ina_Inu_Mab_Ink_Inh_Kho_Igc_Iny_Imp_Lwe_Igo'.split('_'),
+        weekdays: 'Lisontfo_Umsombuluko_Lesibili_Lesitsatfu_Lesine_Lesihlanu_Umgcibelo'.split(
+            '_'
+        ),
+        weekdaysShort: 'Lis_Umb_Lsb_Les_Lsi_Lsh_Umg'.split('_'),
+        weekdaysMin: 'Li_Us_Lb_Lt_Ls_Lh_Ug'.split('_'),
+        weekdaysParseExact: true,
+        longDateFormat: {
+            LT: 'h:mm A',
+            LTS: 'h:mm:ss A',
+            L: 'DD/MM/YYYY',
+            LL: 'D MMMM YYYY',
+            LLL: 'D MMMM YYYY h:mm A',
+            LLLL: 'dddd, D MMMM YYYY h:mm A',
+        },
+        calendar: {
+            sameDay: '[Namuhla nga] LT',
+            nextDay: '[Kusasa nga] LT',
+            nextWeek: 'dddd [nga] LT',
+            lastDay: '[Itolo nga] LT',
+            lastWeek: 'dddd [leliphelile] [nga] LT',
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: 'nga %s',
+            past: 'wenteka nga %s',
+            s: 'emizuzwana lomcane',
+            ss: '%d mzuzwana',
+            m: 'umzuzu',
+            mm: '%d emizuzu',
+            h: 'lihora',
+            hh: '%d emahora',
+            d: 'lilanga',
+            dd: '%d emalanga',
+            M: 'inyanga',
+            MM: '%d tinyanga',
+            y: 'umnyaka',
+            yy: '%d iminyaka',
+        },
+        meridiemParse: /ekuseni|emini|entsambama|ebusuku/,
+        meridiem: function (hours, minutes, isLower) {
+            if (hours < 11) {
+                return 'ekuseni';
+            } else if (hours < 15) {
+                return 'emini';
+            } else if (hours < 19) {
+                return 'entsambama';
+            } else {
+                return 'ebusuku';
+            }
+        },
+        meridiemHour: function (hour, meridiem) {
+            if (hour === 12) {
+                hour = 0;
+            }
+            if (meridiem === 'ekuseni') {
+                return hour;
+            } else if (meridiem === 'emini') {
+                return hour >= 11 ? hour : hour + 12;
+            } else if (meridiem === 'entsambama' || meridiem === 'ebusuku') {
+                if (hour === 0) {
+                    return 0;
+                }
+                return hour + 12;
+            }
+        },
+        dayOfMonthOrdinalParse: /\d{1,2}/,
+        ordinal: '%d',
+        week: {
+            dow: 1, // Monday is the first day of the week.
+            doy: 4, // The week that contains Jan 4th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    moment.defineLocale('sv', {
+        months: 'januari_februari_mars_april_maj_juni_juli_augusti_september_oktober_november_december'.split(
+            '_'
+        ),
+        monthsShort: 'jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec'.split('_'),
+        weekdays: 'söndag_måndag_tisdag_onsdag_torsdag_fredag_lördag'.split('_'),
+        weekdaysShort: 'sön_mån_tis_ons_tor_fre_lör'.split('_'),
+        weekdaysMin: 'sö_må_ti_on_to_fr_lö'.split('_'),
+        longDateFormat: {
+            LT: 'HH:mm',
+            LTS: 'HH:mm:ss',
+            L: 'YYYY-MM-DD',
+            LL: 'D MMMM YYYY',
+            LLL: 'D MMMM YYYY [kl.] HH:mm',
+            LLLL: 'dddd D MMMM YYYY [kl.] HH:mm',
+            lll: 'D MMM YYYY HH:mm',
+            llll: 'ddd D MMM YYYY HH:mm',
+        },
+        calendar: {
+            sameDay: '[Idag] LT',
+            nextDay: '[Imorgon] LT',
+            lastDay: '[Igår] LT',
+            nextWeek: '[På] dddd LT',
+            lastWeek: '[I] dddd[s] LT',
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: 'om %s',
+            past: 'för %s sedan',
+            s: 'några sekunder',
+            ss: '%d sekunder',
+            m: 'en minut',
+            mm: '%d minuter',
+            h: 'en timme',
+            hh: '%d timmar',
+            d: 'en dag',
+            dd: '%d dagar',
+            M: 'en månad',
+            MM: '%d månader',
+            y: 'ett år',
+            yy: '%d år',
+        },
+        dayOfMonthOrdinalParse: /\d{1,2}(\:e|\:a)/,
+        ordinal: function (number) {
+            var b = number % 10,
+                output =
+                    ~~((number % 100) / 10) === 1
+                        ? ':e'
+                        : b === 1
+                        ? ':a'
+                        : b === 2
+                        ? ':a'
+                        : b === 3
+                        ? ':e'
+                        : ':e';
+            return number + output;
+        },
+        week: {
+            dow: 1, // Monday is the first day of the week.
+            doy: 4, // The week that contains Jan 4th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    moment.defineLocale('sw', {
+        months: 'Januari_Februari_Machi_Aprili_Mei_Juni_Julai_Agosti_Septemba_Oktoba_Novemba_Desemba'.split(
+            '_'
+        ),
+        monthsShort: 'Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ago_Sep_Okt_Nov_Des'.split('_'),
+        weekdays: 'Jumapili_Jumatatu_Jumanne_Jumatano_Alhamisi_Ijumaa_Jumamosi'.split(
+            '_'
+        ),
+        weekdaysShort: 'Jpl_Jtat_Jnne_Jtan_Alh_Ijm_Jmos'.split('_'),
+        weekdaysMin: 'J2_J3_J4_J5_Al_Ij_J1'.split('_'),
+        weekdaysParseExact: true,
+        longDateFormat: {
+            LT: 'hh:mm A',
+            LTS: 'HH:mm:ss',
+            L: 'DD.MM.YYYY',
+            LL: 'D MMMM YYYY',
+            LLL: 'D MMMM YYYY HH:mm',
+            LLLL: 'dddd, D MMMM YYYY HH:mm',
+        },
+        calendar: {
+            sameDay: '[leo saa] LT',
+            nextDay: '[kesho saa] LT',
+            nextWeek: '[wiki ijayo] dddd [saat] LT',
+            lastDay: '[jana] LT',
+            lastWeek: '[wiki iliyopita] dddd [saat] LT',
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: '%s baadaye',
+            past: 'tokea %s',
+            s: 'hivi punde',
+            ss: 'sekunde %d',
+            m: 'dakika moja',
+            mm: 'dakika %d',
+            h: 'saa limoja',
+            hh: 'masaa %d',
+            d: 'siku moja',
+            dd: 'siku %d',
+            M: 'mwezi mmoja',
+            MM: 'miezi %d',
+            y: 'mwaka mmoja',
+            yy: 'miaka %d',
+        },
+        week: {
+            dow: 1, // Monday is the first day of the week.
+            doy: 7, // The week that contains Jan 7th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    var symbolMap$f = {
+            '1': '௧',
+            '2': '௨',
+            '3': '௩',
+            '4': '௪',
+            '5': '௫',
+            '6': '௬',
+            '7': '௭',
+            '8': '௮',
+            '9': '௯',
+            '0': '௦',
+        },
+        numberMap$e = {
+            '௧': '1',
+            '௨': '2',
+            '௩': '3',
+            '௪': '4',
+            '௫': '5',
+            '௬': '6',
+            '௭': '7',
+            '௮': '8',
+            '௯': '9',
+            '௦': '0',
+        };
+
+    moment.defineLocale('ta', {
+        months: 'ஜனவரி_பிப்ரவரி_மார்ச்_ஏப்ரல்_மே_ஜூன்_ஜூலை_ஆகஸ்ட்_செப்டெம்பர்_அக்டோபர்_நவம்பர்_டிசம்பர்'.split(
+            '_'
+        ),
+        monthsShort: 'ஜனவரி_பிப்ரவரி_மார்ச்_ஏப்ரல்_மே_ஜூன்_ஜூலை_ஆகஸ்ட்_செப்டெம்பர்_அக்டோபர்_நவம்பர்_டிசம்பர்'.split(
+            '_'
+        ),
+        weekdays: 'ஞாயிற்றுக்கிழமை_திங்கட்கிழமை_செவ்வாய்கிழமை_புதன்கிழமை_வியாழக்கிழமை_வெள்ளிக்கிழமை_சனிக்கிழமை'.split(
+            '_'
+        ),
+        weekdaysShort: 'ஞாயிறு_திங்கள்_செவ்வாய்_புதன்_வியாழன்_வெள்ளி_சனி'.split(
+            '_'
+        ),
+        weekdaysMin: 'ஞா_தி_செ_பு_வி_வெ_ச'.split('_'),
+        longDateFormat: {
+            LT: 'HH:mm',
+            LTS: 'HH:mm:ss',
+            L: 'DD/MM/YYYY',
+            LL: 'D MMMM YYYY',
+            LLL: 'D MMMM YYYY, HH:mm',
+            LLLL: 'dddd, D MMMM YYYY, HH:mm',
+        },
+        calendar: {
+            sameDay: '[இன்று] LT',
+            nextDay: '[நாளை] LT',
+            nextWeek: 'dddd, LT',
+            lastDay: '[நேற்று] LT',
+            lastWeek: '[கடந்த வாரம்] dddd, LT',
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: '%s இல்',
+            past: '%s முன்',
+            s: 'ஒரு சில விநாடிகள்',
+            ss: '%d விநாடிகள்',
+            m: 'ஒரு நிமிடம்',
+            mm: '%d நிமிடங்கள்',
+            h: 'ஒரு மணி நேரம்',
+            hh: '%d மணி நேரம்',
+            d: 'ஒரு நாள்',
+            dd: '%d நாட்கள்',
+            M: 'ஒரு மாதம்',
+            MM: '%d மாதங்கள்',
+            y: 'ஒரு வருடம்',
+            yy: '%d ஆண்டுகள்',
+        },
+        dayOfMonthOrdinalParse: /\d{1,2}வது/,
+        ordinal: function (number) {
+            return number + 'வது';
+        },
+        preparse: function (string) {
+            return string.replace(/[௧௨௩௪௫௬௭௮௯௦]/g, function (match) {
+                return numberMap$e[match];
+            });
+        },
+        postformat: function (string) {
+            return string.replace(/\d/g, function (match) {
+                return symbolMap$f[match];
+            });
+        },
+        // refer http://ta.wikipedia.org/s/1er1
+        meridiemParse: /யாமம்|வைகறை|காலை|நண்பகல்|எற்பாடு|மாலை/,
+        meridiem: function (hour, minute, isLower) {
+            if (hour < 2) {
+                return ' யாமம்';
+            } else if (hour < 6) {
+                return ' வைகறை'; // வைகறை
+            } else if (hour < 10) {
+                return ' காலை'; // காலை
+            } else if (hour < 14) {
+                return ' நண்பகல்'; // நண்பகல்
+            } else if (hour < 18) {
+                return ' எற்பாடு'; // எற்பாடு
+            } else if (hour < 22) {
+                return ' மாலை'; // மாலை
+            } else {
+                return ' யாமம்';
+            }
+        },
+        meridiemHour: function (hour, meridiem) {
+            if (hour === 12) {
+                hour = 0;
+            }
+            if (meridiem === 'யாமம்') {
+                return hour < 2 ? hour : hour + 12;
+            } else if (meridiem === 'வைகறை' || meridiem === 'காலை') {
+                return hour;
+            } else if (meridiem === 'நண்பகல்') {
+                return hour >= 10 ? hour : hour + 12;
+            } else {
+                return hour + 12;
+            }
+        },
+        week: {
+            dow: 0, // Sunday is the first day of the week.
+            doy: 6, // The week that contains Jan 6th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    moment.defineLocale('te', {
+        months: 'జనవరి_ఫిబ్రవరి_మార్చి_ఏప్రిల్_మే_జూన్_జులై_ఆగస్టు_సెప్టెంబర్_అక్టోబర్_నవంబర్_డిసెంబర్'.split(
+            '_'
+        ),
+        monthsShort: 'జన._ఫిబ్ర._మార్చి_ఏప్రి._మే_జూన్_జులై_ఆగ._సెప్._అక్టో._నవ._డిసె.'.split(
+            '_'
+        ),
+        monthsParseExact: true,
+        weekdays: 'ఆదివారం_సోమవారం_మంగళవారం_బుధవారం_గురువారం_శుక్రవారం_శనివారం'.split(
+            '_'
+        ),
+        weekdaysShort: 'ఆది_సోమ_మంగళ_బుధ_గురు_శుక్ర_శని'.split('_'),
+        weekdaysMin: 'ఆ_సో_మం_బు_గు_శు_శ'.split('_'),
+        longDateFormat: {
+            LT: 'A h:mm',
+            LTS: 'A h:mm:ss',
+            L: 'DD/MM/YYYY',
+            LL: 'D MMMM YYYY',
+            LLL: 'D MMMM YYYY, A h:mm',
+            LLLL: 'dddd, D MMMM YYYY, A h:mm',
+        },
+        calendar: {
+            sameDay: '[నేడు] LT',
+            nextDay: '[రేపు] LT',
+            nextWeek: 'dddd, LT',
+            lastDay: '[నిన్న] LT',
+            lastWeek: '[గత] dddd, LT',
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: '%s లో',
+            past: '%s క్రితం',
+            s: 'కొన్ని క్షణాలు',
+            ss: '%d సెకన్లు',
+            m: 'ఒక నిమిషం',
+            mm: '%d నిమిషాలు',
+            h: 'ఒక గంట',
+            hh: '%d గంటలు',
+            d: 'ఒక రోజు',
+            dd: '%d రోజులు',
+            M: 'ఒక నెల',
+            MM: '%d నెలలు',
+            y: 'ఒక సంవత్సరం',
+            yy: '%d సంవత్సరాలు',
+        },
+        dayOfMonthOrdinalParse: /\d{1,2}వ/,
+        ordinal: '%dవ',
+        meridiemParse: /రాత్రి|ఉదయం|మధ్యాహ్నం|సాయంత్రం/,
+        meridiemHour: function (hour, meridiem) {
+            if (hour === 12) {
+                hour = 0;
+            }
+            if (meridiem === 'రాత్రి') {
+                return hour < 4 ? hour : hour + 12;
+            } else if (meridiem === 'ఉదయం') {
+                return hour;
+            } else if (meridiem === 'మధ్యాహ్నం') {
+                return hour >= 10 ? hour : hour + 12;
+            } else if (meridiem === 'సాయంత్రం') {
+                return hour + 12;
+            }
+        },
+        meridiem: function (hour, minute, isLower) {
+            if (hour < 4) {
+                return 'రాత్రి';
+            } else if (hour < 10) {
+                return 'ఉదయం';
+            } else if (hour < 17) {
+                return 'మధ్యాహ్నం';
+            } else if (hour < 20) {
+                return 'సాయంత్రం';
+            } else {
+                return 'రాత్రి';
+            }
+        },
+        week: {
+            dow: 0, // Sunday is the first day of the week.
+            doy: 6, // The week that contains Jan 6th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    moment.defineLocale('tet', {
+        months: 'Janeiru_Fevereiru_Marsu_Abril_Maiu_Juñu_Jullu_Agustu_Setembru_Outubru_Novembru_Dezembru'.split(
+            '_'
+        ),
+        monthsShort: 'Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez'.split('_'),
+        weekdays: 'Domingu_Segunda_Tersa_Kuarta_Kinta_Sesta_Sabadu'.split('_'),
+        weekdaysShort: 'Dom_Seg_Ters_Kua_Kint_Sest_Sab'.split('_'),
+        weekdaysMin: 'Do_Seg_Te_Ku_Ki_Ses_Sa'.split('_'),
+        longDateFormat: {
+            LT: 'HH:mm',
+            LTS: 'HH:mm:ss',
+            L: 'DD/MM/YYYY',
+            LL: 'D MMMM YYYY',
+            LLL: 'D MMMM YYYY HH:mm',
+            LLLL: 'dddd, D MMMM YYYY HH:mm',
+        },
+        calendar: {
+            sameDay: '[Ohin iha] LT',
+            nextDay: '[Aban iha] LT',
+            nextWeek: 'dddd [iha] LT',
+            lastDay: '[Horiseik iha] LT',
+            lastWeek: 'dddd [semana kotuk] [iha] LT',
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: 'iha %s',
+            past: '%s liuba',
+            s: 'segundu balun',
+            ss: 'segundu %d',
+            m: 'minutu ida',
+            mm: 'minutu %d',
+            h: 'oras ida',
+            hh: 'oras %d',
+            d: 'loron ida',
+            dd: 'loron %d',
+            M: 'fulan ida',
+            MM: 'fulan %d',
+            y: 'tinan ida',
+            yy: 'tinan %d',
+        },
+        dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/,
+        ordinal: function (number) {
+            var b = number % 10,
+                output =
+                    ~~((number % 100) / 10) === 1
+                        ? 'th'
+                        : b === 1
+                        ? 'st'
+                        : b === 2
+                        ? 'nd'
+                        : b === 3
+                        ? 'rd'
+                        : 'th';
+            return number + output;
+        },
+        week: {
+            dow: 1, // Monday is the first day of the week.
+            doy: 4, // The week that contains Jan 4th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    var suffixes$3 = {
+        0: '-ум',
+        1: '-ум',
+        2: '-юм',
+        3: '-юм',
+        4: '-ум',
+        5: '-ум',
+        6: '-ум',
+        7: '-ум',
+        8: '-ум',
+        9: '-ум',
+        10: '-ум',
+        12: '-ум',
+        13: '-ум',
+        20: '-ум',
+        30: '-юм',
+        40: '-ум',
+        50: '-ум',
+        60: '-ум',
+        70: '-ум',
+        80: '-ум',
+        90: '-ум',
+        100: '-ум',
+    };
+
+    moment.defineLocale('tg', {
+        months: 'январ_феврал_март_апрел_май_июн_июл_август_сентябр_октябр_ноябр_декабр'.split(
+            '_'
+        ),
+        monthsShort: 'янв_фев_мар_апр_май_июн_июл_авг_сен_окт_ноя_дек'.split('_'),
+        weekdays: 'якшанбе_душанбе_сешанбе_чоршанбе_панҷшанбе_ҷумъа_шанбе'.split(
+            '_'
+        ),
+        weekdaysShort: 'яшб_дшб_сшб_чшб_пшб_ҷум_шнб'.split('_'),
+        weekdaysMin: 'яш_дш_сш_чш_пш_ҷм_шб'.split('_'),
+        longDateFormat: {
+            LT: 'HH:mm',
+            LTS: 'HH:mm:ss',
+            L: 'DD/MM/YYYY',
+            LL: 'D MMMM YYYY',
+            LLL: 'D MMMM YYYY HH:mm',
+            LLLL: 'dddd, D MMMM YYYY HH:mm',
+        },
+        calendar: {
+            sameDay: '[Имрӯз соати] LT',
+            nextDay: '[Пагоҳ соати] LT',
+            lastDay: '[Дирӯз соати] LT',
+            nextWeek: 'dddd[и] [ҳафтаи оянда соати] LT',
+            lastWeek: 'dddd[и] [ҳафтаи гузашта соати] LT',
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: 'баъди %s',
+            past: '%s пеш',
+            s: 'якчанд сония',
+            m: 'як дақиқа',
+            mm: '%d дақиқа',
+            h: 'як соат',
+            hh: '%d соат',
+            d: 'як рӯз',
+            dd: '%d рӯз',
+            M: 'як моҳ',
+            MM: '%d моҳ',
+            y: 'як сол',
+            yy: '%d сол',
+        },
+        meridiemParse: /шаб|субҳ|рӯз|бегоҳ/,
+        meridiemHour: function (hour, meridiem) {
+            if (hour === 12) {
+                hour = 0;
+            }
+            if (meridiem === 'шаб') {
+                return hour < 4 ? hour : hour + 12;
+            } else if (meridiem === 'субҳ') {
+                return hour;
+            } else if (meridiem === 'рӯз') {
+                return hour >= 11 ? hour : hour + 12;
+            } else if (meridiem === 'бегоҳ') {
+                return hour + 12;
+            }
+        },
+        meridiem: function (hour, minute, isLower) {
+            if (hour < 4) {
+                return 'шаб';
+            } else if (hour < 11) {
+                return 'субҳ';
+            } else if (hour < 16) {
+                return 'рӯз';
+            } else if (hour < 19) {
+                return 'бегоҳ';
+            } else {
+                return 'шаб';
+            }
+        },
+        dayOfMonthOrdinalParse: /\d{1,2}-(ум|юм)/,
+        ordinal: function (number) {
+            var a = number % 10,
+                b = number >= 100 ? 100 : null;
+            return number + (suffixes$3[number] || suffixes$3[a] || suffixes$3[b]);
+        },
+        week: {
+            dow: 1, // Monday is the first day of the week.
+            doy: 7, // The week that contains Jan 1th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    moment.defineLocale('th', {
+        months: 'มกราคม_กุมภาพันธ์_มีนาคม_เมษายน_พฤษภาคม_มิถุนายน_กรกฎาคม_สิงหาคม_กันยายน_ตุลาคม_พฤศจิกายน_ธันวาคม'.split(
+            '_'
+        ),
+        monthsShort: 'ม.ค._ก.พ._มี.ค._เม.ย._พ.ค._มิ.ย._ก.ค._ส.ค._ก.ย._ต.ค._พ.ย._ธ.ค.'.split(
+            '_'
+        ),
+        monthsParseExact: true,
+        weekdays: 'อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัสบดี_ศุกร์_เสาร์'.split('_'),
+        weekdaysShort: 'อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัส_ศุกร์_เสาร์'.split('_'), // yes, three characters difference
+        weekdaysMin: 'อา._จ._อ._พ._พฤ._ศ._ส.'.split('_'),
+        weekdaysParseExact: true,
+        longDateFormat: {
+            LT: 'H:mm',
+            LTS: 'H:mm:ss',
+            L: 'DD/MM/YYYY',
+            LL: 'D MMMM YYYY',
+            LLL: 'D MMMM YYYY เวลา H:mm',
+            LLLL: 'วันddddที่ D MMMM YYYY เวลา H:mm',
+        },
+        meridiemParse: /ก่อนเที่ยง|หลังเที่ยง/,
+        isPM: function (input) {
+            return input === 'หลังเที่ยง';
+        },
+        meridiem: function (hour, minute, isLower) {
+            if (hour < 12) {
+                return 'ก่อนเที่ยง';
+            } else {
+                return 'หลังเที่ยง';
+            }
+        },
+        calendar: {
+            sameDay: '[วันนี้ เวลา] LT',
+            nextDay: '[พรุ่งนี้ เวลา] LT',
+            nextWeek: 'dddd[หน้า เวลา] LT',
+            lastDay: '[เมื่อวานนี้ เวลา] LT',
+            lastWeek: '[วัน]dddd[ที่แล้ว เวลา] LT',
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: 'อีก %s',
+            past: '%sที่แล้ว',
+            s: 'ไม่กี่วินาที',
+            ss: '%d วินาที',
+            m: '1 นาที',
+            mm: '%d นาที',
+            h: '1 ชั่วโมง',
+            hh: '%d ชั่วโมง',
+            d: '1 วัน',
+            dd: '%d วัน',
+            M: '1 เดือน',
+            MM: '%d เดือน',
+            y: '1 ปี',
+            yy: '%d ปี',
+        },
+    });
+
+    //! moment.js locale configuration
+
+    var suffixes$4 = {
+        1: "'inji",
+        5: "'inji",
+        8: "'inji",
+        70: "'inji",
+        80: "'inji",
+        2: "'nji",
+        7: "'nji",
+        20: "'nji",
+        50: "'nji",
+        3: "'ünji",
+        4: "'ünji",
+        100: "'ünji",
+        6: "'njy",
+        9: "'unjy",
+        10: "'unjy",
+        30: "'unjy",
+        60: "'ynjy",
+        90: "'ynjy",
+    };
+
+    moment.defineLocale('tk', {
+        months: 'Ýanwar_Fewral_Mart_Aprel_Maý_Iýun_Iýul_Awgust_Sentýabr_Oktýabr_Noýabr_Dekabr'.split(
+            '_'
+        ),
+        monthsShort: 'Ýan_Few_Mar_Apr_Maý_Iýn_Iýl_Awg_Sen_Okt_Noý_Dek'.split('_'),
+        weekdays: 'Ýekşenbe_Duşenbe_Sişenbe_Çarşenbe_Penşenbe_Anna_Şenbe'.split(
+            '_'
+        ),
+        weekdaysShort: 'Ýek_Duş_Siş_Çar_Pen_Ann_Şen'.split('_'),
+        weekdaysMin: 'Ýk_Dş_Sş_Çr_Pn_An_Şn'.split('_'),
+        longDateFormat: {
+            LT: 'HH:mm',
+            LTS: 'HH:mm:ss',
+            L: 'DD.MM.YYYY',
+            LL: 'D MMMM YYYY',
+            LLL: 'D MMMM YYYY HH:mm',
+            LLLL: 'dddd, D MMMM YYYY HH:mm',
+        },
+        calendar: {
+            sameDay: '[bugün sagat] LT',
+            nextDay: '[ertir sagat] LT',
+            nextWeek: '[indiki] dddd [sagat] LT',
+            lastDay: '[düýn] LT',
+            lastWeek: '[geçen] dddd [sagat] LT',
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: '%s soň',
+            past: '%s öň',
+            s: 'birnäçe sekunt',
+            m: 'bir minut',
+            mm: '%d minut',
+            h: 'bir sagat',
+            hh: '%d sagat',
+            d: 'bir gün',
+            dd: '%d gün',
+            M: 'bir aý',
+            MM: '%d aý',
+            y: 'bir ýyl',
+            yy: '%d ýyl',
+        },
+        ordinal: function (number, period) {
+            switch (period) {
+                case 'd':
+                case 'D':
+                case 'Do':
+                case 'DD':
+                    return number;
+                default:
+                    if (number === 0) {
+                        // special case for zero
+                        return number + "'unjy";
+                    }
+                    var a = number % 10,
+                        b = (number % 100) - a,
+                        c = number >= 100 ? 100 : null;
+                    return number + (suffixes$4[a] || suffixes$4[b] || suffixes$4[c]);
+            }
+        },
+        week: {
+            dow: 1, // Monday is the first day of the week.
+            doy: 7, // The week that contains Jan 7th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    moment.defineLocale('tl-ph', {
+        months: 'Enero_Pebrero_Marso_Abril_Mayo_Hunyo_Hulyo_Agosto_Setyembre_Oktubre_Nobyembre_Disyembre'.split(
+            '_'
+        ),
+        monthsShort: 'Ene_Peb_Mar_Abr_May_Hun_Hul_Ago_Set_Okt_Nob_Dis'.split('_'),
+        weekdays: 'Linggo_Lunes_Martes_Miyerkules_Huwebes_Biyernes_Sabado'.split(
+            '_'
+        ),
+        weekdaysShort: 'Lin_Lun_Mar_Miy_Huw_Biy_Sab'.split('_'),
+        weekdaysMin: 'Li_Lu_Ma_Mi_Hu_Bi_Sab'.split('_'),
+        longDateFormat: {
+            LT: 'HH:mm',
+            LTS: 'HH:mm:ss',
+            L: 'MM/D/YYYY',
+            LL: 'MMMM D, YYYY',
+            LLL: 'MMMM D, YYYY HH:mm',
+            LLLL: 'dddd, MMMM DD, YYYY HH:mm',
+        },
+        calendar: {
+            sameDay: 'LT [ngayong araw]',
+            nextDay: '[Bukas ng] LT',
+            nextWeek: 'LT [sa susunod na] dddd',
+            lastDay: 'LT [kahapon]',
+            lastWeek: 'LT [noong nakaraang] dddd',
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: 'sa loob ng %s',
+            past: '%s ang nakalipas',
+            s: 'ilang segundo',
+            ss: '%d segundo',
+            m: 'isang minuto',
+            mm: '%d minuto',
+            h: 'isang oras',
+            hh: '%d oras',
+            d: 'isang araw',
+            dd: '%d araw',
+            M: 'isang buwan',
+            MM: '%d buwan',
+            y: 'isang taon',
+            yy: '%d taon',
+        },
+        dayOfMonthOrdinalParse: /\d{1,2}/,
+        ordinal: function (number) {
+            return number;
+        },
+        week: {
+            dow: 1, // Monday is the first day of the week.
+            doy: 4, // The week that contains Jan 4th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    var numbersNouns = 'pagh_wa’_cha’_wej_loS_vagh_jav_Soch_chorgh_Hut'.split('_');
+
+    function translateFuture(output) {
+        var time = output;
+        time =
+            output.indexOf('jaj') !== -1
+                ? time.slice(0, -3) + 'leS'
+                : output.indexOf('jar') !== -1
+                ? time.slice(0, -3) + 'waQ'
+                : output.indexOf('DIS') !== -1
+                ? time.slice(0, -3) + 'nem'
+                : time + ' pIq';
+        return time;
+    }
+
+    function translatePast(output) {
+        var time = output;
+        time =
+            output.indexOf('jaj') !== -1
+                ? time.slice(0, -3) + 'Hu’'
+                : output.indexOf('jar') !== -1
+                ? time.slice(0, -3) + 'wen'
+                : output.indexOf('DIS') !== -1
+                ? time.slice(0, -3) + 'ben'
+                : time + ' ret';
+        return time;
+    }
+
+    function translate$a(number, withoutSuffix, string, isFuture) {
+        var numberNoun = numberAsNoun(number);
+        switch (string) {
+            case 'ss':
+                return numberNoun + ' lup';
+            case 'mm':
+                return numberNoun + ' tup';
+            case 'hh':
+                return numberNoun + ' rep';
+            case 'dd':
+                return numberNoun + ' jaj';
+            case 'MM':
+                return numberNoun + ' jar';
+            case 'yy':
+                return numberNoun + ' DIS';
+        }
+    }
+
+    function numberAsNoun(number) {
+        var hundred = Math.floor((number % 1000) / 100),
+            ten = Math.floor((number % 100) / 10),
+            one = number % 10,
+            word = '';
+        if (hundred > 0) {
+            word += numbersNouns[hundred] + 'vatlh';
+        }
+        if (ten > 0) {
+            word += (word !== '' ? ' ' : '') + numbersNouns[ten] + 'maH';
+        }
+        if (one > 0) {
+            word += (word !== '' ? ' ' : '') + numbersNouns[one];
+        }
+        return word === '' ? 'pagh' : word;
+    }
+
+    moment.defineLocale('tlh', {
+        months: 'tera’ jar wa’_tera’ jar cha’_tera’ jar wej_tera’ jar loS_tera’ jar vagh_tera’ jar jav_tera’ jar Soch_tera’ jar chorgh_tera’ jar Hut_tera’ jar wa’maH_tera’ jar wa’maH wa’_tera’ jar wa’maH cha’'.split(
+            '_'
+        ),
+        monthsShort: 'jar wa’_jar cha’_jar wej_jar loS_jar vagh_jar jav_jar Soch_jar chorgh_jar Hut_jar wa’maH_jar wa’maH wa’_jar wa’maH cha’'.split(
+            '_'
+        ),
+        monthsParseExact: true,
+        weekdays: 'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.split(
+            '_'
+        ),
+        weekdaysShort: 'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.split(
+            '_'
+        ),
+        weekdaysMin: 'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.split(
+            '_'
+        ),
+        longDateFormat: {
+            LT: 'HH:mm',
+            LTS: 'HH:mm:ss',
+            L: 'DD.MM.YYYY',
+            LL: 'D MMMM YYYY',
+            LLL: 'D MMMM YYYY HH:mm',
+            LLLL: 'dddd, D MMMM YYYY HH:mm',
+        },
+        calendar: {
+            sameDay: '[DaHjaj] LT',
+            nextDay: '[wa’leS] LT',
+            nextWeek: 'LLL',
+            lastDay: '[wa’Hu’] LT',
+            lastWeek: 'LLL',
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: translateFuture,
+            past: translatePast,
+            s: 'puS lup',
+            ss: translate$a,
+            m: 'wa’ tup',
+            mm: translate$a,
+            h: 'wa’ rep',
+            hh: translate$a,
+            d: 'wa’ jaj',
+            dd: translate$a,
+            M: 'wa’ jar',
+            MM: translate$a,
+            y: 'wa’ DIS',
+            yy: translate$a,
+        },
+        dayOfMonthOrdinalParse: /\d{1,2}\./,
+        ordinal: '%d.',
+        week: {
+            dow: 1, // Monday is the first day of the week.
+            doy: 4, // The week that contains Jan 4th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    var suffixes$5 = {
+        1: "'inci",
+        5: "'inci",
+        8: "'inci",
+        70: "'inci",
+        80: "'inci",
+        2: "'nci",
+        7: "'nci",
+        20: "'nci",
+        50: "'nci",
+        3: "'üncü",
+        4: "'üncü",
+        100: "'üncü",
+        6: "'ncı",
+        9: "'uncu",
+        10: "'uncu",
+        30: "'uncu",
+        60: "'ıncı",
+        90: "'ıncı",
+    };
+
+    moment.defineLocale('tr', {
+        months: 'Ocak_Şubat_Mart_Nisan_Mayıs_Haziran_Temmuz_Ağustos_Eylül_Ekim_Kasım_Aralık'.split(
+            '_'
+        ),
+        monthsShort: 'Oca_Şub_Mar_Nis_May_Haz_Tem_Ağu_Eyl_Eki_Kas_Ara'.split('_'),
+        weekdays: 'Pazar_Pazartesi_Salı_Çarşamba_Perşembe_Cuma_Cumartesi'.split(
+            '_'
+        ),
+        weekdaysShort: 'Paz_Pts_Sal_Çar_Per_Cum_Cts'.split('_'),
+        weekdaysMin: 'Pz_Pt_Sa_Ça_Pe_Cu_Ct'.split('_'),
+        meridiem: function (hours, minutes, isLower) {
+            if (hours < 12) {
+                return isLower ? 'öö' : 'ÖÖ';
+            } else {
+                return isLower ? 'ös' : 'ÖS';
+            }
+        },
+        meridiemParse: /öö|ÖÖ|ös|ÖS/,
+        isPM: function (input) {
+            return input === 'ös' || input === 'ÖS';
+        },
+        longDateFormat: {
+            LT: 'HH:mm',
+            LTS: 'HH:mm:ss',
+            L: 'DD.MM.YYYY',
+            LL: 'D MMMM YYYY',
+            LLL: 'D MMMM YYYY HH:mm',
+            LLLL: 'dddd, D MMMM YYYY HH:mm',
+        },
+        calendar: {
+            sameDay: '[bugün saat] LT',
+            nextDay: '[yarın saat] LT',
+            nextWeek: '[gelecek] dddd [saat] LT',
+            lastDay: '[dün] LT',
+            lastWeek: '[geçen] dddd [saat] LT',
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: '%s sonra',
+            past: '%s önce',
+            s: 'birkaç saniye',
+            ss: '%d saniye',
+            m: 'bir dakika',
+            mm: '%d dakika',
+            h: 'bir saat',
+            hh: '%d saat',
+            d: 'bir gün',
+            dd: '%d gün',
+            M: 'bir ay',
+            MM: '%d ay',
+            y: 'bir yıl',
+            yy: '%d yıl',
+        },
+        ordinal: function (number, period) {
+            switch (period) {
+                case 'd':
+                case 'D':
+                case 'Do':
+                case 'DD':
+                    return number;
+                default:
+                    if (number === 0) {
+                        // special case for zero
+                        return number + "'ıncı";
+                    }
+                    var a = number % 10,
+                        b = (number % 100) - a,
+                        c = number >= 100 ? 100 : null;
+                    return number + (suffixes$5[a] || suffixes$5[b] || suffixes$5[c]);
+            }
+        },
+        week: {
+            dow: 1, // Monday is the first day of the week.
+            doy: 7, // The week that contains Jan 7th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    // After the year there should be a slash and the amount of years since December 26, 1979 in Roman numerals.
+    // This is currently too difficult (maybe even impossible) to add.
+    moment.defineLocale('tzl', {
+        months: 'Januar_Fevraglh_Març_Avrïu_Mai_Gün_Julia_Guscht_Setemvar_Listopäts_Noemvar_Zecemvar'.split(
+            '_'
+        ),
+        monthsShort: 'Jan_Fev_Mar_Avr_Mai_Gün_Jul_Gus_Set_Lis_Noe_Zec'.split('_'),
+        weekdays: 'Súladi_Lúneçi_Maitzi_Márcuri_Xhúadi_Viénerçi_Sáturi'.split('_'),
+        weekdaysShort: 'Súl_Lún_Mai_Már_Xhú_Vié_Sát'.split('_'),
+        weekdaysMin: 'Sú_Lú_Ma_Má_Xh_Vi_Sá'.split('_'),
+        longDateFormat: {
+            LT: 'HH.mm',
+            LTS: 'HH.mm.ss',
+            L: 'DD.MM.YYYY',
+            LL: 'D. MMMM [dallas] YYYY',
+            LLL: 'D. MMMM [dallas] YYYY HH.mm',
+            LLLL: 'dddd, [li] D. MMMM [dallas] YYYY HH.mm',
+        },
+        meridiemParse: /d\'o|d\'a/i,
+        isPM: function (input) {
+            return "d'o" === input.toLowerCase();
+        },
+        meridiem: function (hours, minutes, isLower) {
+            if (hours > 11) {
+                return isLower ? "d'o" : "D'O";
+            } else {
+                return isLower ? "d'a" : "D'A";
+            }
+        },
+        calendar: {
+            sameDay: '[oxhi à] LT',
+            nextDay: '[demà à] LT',
+            nextWeek: 'dddd [à] LT',
+            lastDay: '[ieiri à] LT',
+            lastWeek: '[sür el] dddd [lasteu à] LT',
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: 'osprei %s',
+            past: 'ja%s',
+            s: processRelativeTime$8,
+            ss: processRelativeTime$8,
+            m: processRelativeTime$8,
+            mm: processRelativeTime$8,
+            h: processRelativeTime$8,
+            hh: processRelativeTime$8,
+            d: processRelativeTime$8,
+            dd: processRelativeTime$8,
+            M: processRelativeTime$8,
+            MM: processRelativeTime$8,
+            y: processRelativeTime$8,
+            yy: processRelativeTime$8,
+        },
+        dayOfMonthOrdinalParse: /\d{1,2}\./,
+        ordinal: '%d.',
+        week: {
+            dow: 1, // Monday is the first day of the week.
+            doy: 4, // The week that contains Jan 4th is the first week of the year.
+        },
+    });
+
+    function processRelativeTime$8(number, withoutSuffix, key, isFuture) {
+        var format = {
+            s: ['viensas secunds', "'iensas secunds"],
+            ss: [number + ' secunds', '' + number + ' secunds'],
+            m: ["'n míut", "'iens míut"],
+            mm: [number + ' míuts', '' + number + ' míuts'],
+            h: ["'n þora", "'iensa þora"],
+            hh: [number + ' þoras', '' + number + ' þoras'],
+            d: ["'n ziua", "'iensa ziua"],
+            dd: [number + ' ziuas', '' + number + ' ziuas'],
+            M: ["'n mes", "'iens mes"],
+            MM: [number + ' mesen', '' + number + ' mesen'],
+            y: ["'n ar", "'iens ar"],
+            yy: [number + ' ars', '' + number + ' ars'],
+        };
+        return isFuture
+            ? format[key][0]
+            : withoutSuffix
+            ? format[key][0]
+            : format[key][1];
+    }
+
+    //! moment.js locale configuration
+
+    moment.defineLocale('tzm-latn', {
+        months: 'innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_ɣwšt_šwtanbir_ktˤwbrˤ_nwwanbir_dwjnbir'.split(
+            '_'
+        ),
+        monthsShort: 'innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_ɣwšt_šwtanbir_ktˤwbrˤ_nwwanbir_dwjnbir'.split(
+            '_'
+        ),
+        weekdays: 'asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas'.split('_'),
+        weekdaysShort: 'asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas'.split('_'),
+        weekdaysMin: 'asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas'.split('_'),
+        longDateFormat: {
+            LT: 'HH:mm',
+            LTS: 'HH:mm:ss',
+            L: 'DD/MM/YYYY',
+            LL: 'D MMMM YYYY',
+            LLL: 'D MMMM YYYY HH:mm',
+            LLLL: 'dddd D MMMM YYYY HH:mm',
+        },
+        calendar: {
+            sameDay: '[asdkh g] LT',
+            nextDay: '[aska g] LT',
+            nextWeek: 'dddd [g] LT',
+            lastDay: '[assant g] LT',
+            lastWeek: 'dddd [g] LT',
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: 'dadkh s yan %s',
+            past: 'yan %s',
+            s: 'imik',
+            ss: '%d imik',
+            m: 'minuḍ',
+            mm: '%d minuḍ',
+            h: 'saɛa',
+            hh: '%d tassaɛin',
+            d: 'ass',
+            dd: '%d ossan',
+            M: 'ayowr',
+            MM: '%d iyyirn',
+            y: 'asgas',
+            yy: '%d isgasn',
+        },
+        week: {
+            dow: 6, // Saturday is the first day of the week.
+            doy: 12, // The week that contains Jan 12th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    moment.defineLocale('tzm', {
+        months: 'ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ'.split(
+            '_'
+        ),
+        monthsShort: 'ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ'.split(
+            '_'
+        ),
+        weekdays: 'ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ'.split('_'),
+        weekdaysShort: 'ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ'.split('_'),
+        weekdaysMin: 'ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ'.split('_'),
+        longDateFormat: {
+            LT: 'HH:mm',
+            LTS: 'HH:mm:ss',
+            L: 'DD/MM/YYYY',
+            LL: 'D MMMM YYYY',
+            LLL: 'D MMMM YYYY HH:mm',
+            LLLL: 'dddd D MMMM YYYY HH:mm',
+        },
+        calendar: {
+            sameDay: '[ⴰⵙⴷⵅ ⴴ] LT',
+            nextDay: '[ⴰⵙⴽⴰ ⴴ] LT',
+            nextWeek: 'dddd [ⴴ] LT',
+            lastDay: '[ⴰⵚⴰⵏⵜ ⴴ] LT',
+            lastWeek: 'dddd [ⴴ] LT',
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: 'ⴷⴰⴷⵅ ⵙ ⵢⴰⵏ %s',
+            past: 'ⵢⴰⵏ %s',
+            s: 'ⵉⵎⵉⴽ',
+            ss: '%d ⵉⵎⵉⴽ',
+            m: 'ⵎⵉⵏⵓⴺ',
+            mm: '%d ⵎⵉⵏⵓⴺ',
+            h: 'ⵙⴰⵄⴰ',
+            hh: '%d ⵜⴰⵙⵙⴰⵄⵉⵏ',
+            d: 'ⴰⵙⵙ',
+            dd: '%d oⵙⵙⴰⵏ',
+            M: 'ⴰⵢoⵓⵔ',
+            MM: '%d ⵉⵢⵢⵉⵔⵏ',
+            y: 'ⴰⵙⴳⴰⵙ',
+            yy: '%d ⵉⵙⴳⴰⵙⵏ',
+        },
+        week: {
+            dow: 6, // Saturday is the first day of the week.
+            doy: 12, // The week that contains Jan 12th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    moment.defineLocale('ug-cn', {
+        months: 'يانۋار_فېۋرال_مارت_ئاپرېل_ماي_ئىيۇن_ئىيۇل_ئاۋغۇست_سېنتەبىر_ئۆكتەبىر_نويابىر_دېكابىر'.split(
+            '_'
+        ),
+        monthsShort: 'يانۋار_فېۋرال_مارت_ئاپرېل_ماي_ئىيۇن_ئىيۇل_ئاۋغۇست_سېنتەبىر_ئۆكتەبىر_نويابىر_دېكابىر'.split(
+            '_'
+        ),
+        weekdays: 'يەكشەنبە_دۈشەنبە_سەيشەنبە_چارشەنبە_پەيشەنبە_جۈمە_شەنبە'.split(
+            '_'
+        ),
+        weekdaysShort: 'يە_دۈ_سە_چا_پە_جۈ_شە'.split('_'),
+        weekdaysMin: 'يە_دۈ_سە_چا_پە_جۈ_شە'.split('_'),
+        longDateFormat: {
+            LT: 'HH:mm',
+            LTS: 'HH:mm:ss',
+            L: 'YYYY-MM-DD',
+            LL: 'YYYY-يىلىM-ئاينىڭD-كۈنى',
+            LLL: 'YYYY-يىلىM-ئاينىڭD-كۈنى، HH:mm',
+            LLLL: 'dddd، YYYY-يىلىM-ئاينىڭD-كۈنى، HH:mm',
+        },
+        meridiemParse: /يېرىم كېچە|سەھەر|چۈشتىن بۇرۇن|چۈش|چۈشتىن كېيىن|كەچ/,
+        meridiemHour: function (hour, meridiem) {
+            if (hour === 12) {
+                hour = 0;
+            }
+            if (
+                meridiem === 'يېرىم كېچە' ||
+                meridiem === 'سەھەر' ||
+                meridiem === 'چۈشتىن بۇرۇن'
+            ) {
+                return hour;
+            } else if (meridiem === 'چۈشتىن كېيىن' || meridiem === 'كەچ') {
+                return hour + 12;
+            } else {
+                return hour >= 11 ? hour : hour + 12;
+            }
+        },
+        meridiem: function (hour, minute, isLower) {
+            var hm = hour * 100 + minute;
+            if (hm < 600) {
+                return 'يېرىم كېچە';
+            } else if (hm < 900) {
+                return 'سەھەر';
+            } else if (hm < 1130) {
+                return 'چۈشتىن بۇرۇن';
+            } else if (hm < 1230) {
+                return 'چۈش';
+            } else if (hm < 1800) {
+                return 'چۈشتىن كېيىن';
+            } else {
+                return 'كەچ';
+            }
+        },
+        calendar: {
+            sameDay: '[بۈگۈن سائەت] LT',
+            nextDay: '[ئەتە سائەت] LT',
+            nextWeek: '[كېلەركى] dddd [سائەت] LT',
+            lastDay: '[تۆنۈگۈن] LT',
+            lastWeek: '[ئالدىنقى] dddd [سائەت] LT',
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: '%s كېيىن',
+            past: '%s بۇرۇن',
+            s: 'نەچچە سېكونت',
+            ss: '%d سېكونت',
+            m: 'بىر مىنۇت',
+            mm: '%d مىنۇت',
+            h: 'بىر سائەت',
+            hh: '%d سائەت',
+            d: 'بىر كۈن',
+            dd: '%d كۈن',
+            M: 'بىر ئاي',
+            MM: '%d ئاي',
+            y: 'بىر يىل',
+            yy: '%d يىل',
+        },
+
+        dayOfMonthOrdinalParse: /\d{1,2}(-كۈنى|-ئاي|-ھەپتە)/,
+        ordinal: function (number, period) {
+            switch (period) {
+                case 'd':
+                case 'D':
+                case 'DDD':
+                    return number + '-كۈنى';
+                case 'w':
+                case 'W':
+                    return number + '-ھەپتە';
+                default:
+                    return number;
+            }
+        },
+        preparse: function (string) {
+            return string.replace(/،/g, ',');
+        },
+        postformat: function (string) {
+            return string.replace(/,/g, '،');
+        },
+        week: {
+            // GB/T 7408-1994《数据元和交换格式·信息交换·日期和时间表示法》与ISO 8601:1988等效
+            dow: 1, // Monday is the first day of the week.
+            doy: 7, // The week that contains Jan 1st is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    function plural$6(word, num) {
+        var forms = word.split('_');
+        return num % 10 === 1 && num % 100 !== 11
+            ? forms[0]
+            : num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20)
+            ? forms[1]
+            : forms[2];
+    }
+    function relativeTimeWithPlural$4(number, withoutSuffix, key) {
+        var format = {
+            ss: withoutSuffix ? 'секунда_секунди_секунд' : 'секунду_секунди_секунд',
+            mm: withoutSuffix ? 'хвилина_хвилини_хвилин' : 'хвилину_хвилини_хвилин',
+            hh: withoutSuffix ? 'година_години_годин' : 'годину_години_годин',
+            dd: 'день_дні_днів',
+            MM: 'місяць_місяці_місяців',
+            yy: 'рік_роки_років',
+        };
+        if (key === 'm') {
+            return withoutSuffix ? 'хвилина' : 'хвилину';
+        } else if (key === 'h') {
+            return withoutSuffix ? 'година' : 'годину';
+        } else {
+            return number + ' ' + plural$6(format[key], +number);
+        }
+    }
+    function weekdaysCaseReplace(m, format) {
+        var weekdays = {
+                nominative: 'неділя_понеділок_вівторок_середа_четвер_п’ятниця_субота'.split(
+                    '_'
+                ),
+                accusative: 'неділю_понеділок_вівторок_середу_четвер_п’ятницю_суботу'.split(
+                    '_'
+                ),
+                genitive: 'неділі_понеділка_вівторка_середи_четверга_п’ятниці_суботи'.split(
+                    '_'
+                ),
+            },
+            nounCase;
+
+        if (m === true) {
+            return weekdays['nominative']
+                .slice(1, 7)
+                .concat(weekdays['nominative'].slice(0, 1));
+        }
+        if (!m) {
+            return weekdays['nominative'];
+        }
+
+        nounCase = /(\[[ВвУу]\]) ?dddd/.test(format)
+            ? 'accusative'
+            : /\[?(?:минулої|наступної)? ?\] ?dddd/.test(format)
+            ? 'genitive'
+            : 'nominative';
+        return weekdays[nounCase][m.day()];
+    }
+    function processHoursFunction(str) {
+        return function () {
+            return str + 'о' + (this.hours() === 11 ? 'б' : '') + '] LT';
+        };
+    }
+
+    moment.defineLocale('uk', {
+        months: {
+            format: 'січня_лютого_березня_квітня_травня_червня_липня_серпня_вересня_жовтня_листопада_грудня'.split(
+                '_'
+            ),
+            standalone: 'січень_лютий_березень_квітень_травень_червень_липень_серпень_вересень_жовтень_листопад_грудень'.split(
+                '_'
+            ),
+        },
+        monthsShort: 'січ_лют_бер_квіт_трав_черв_лип_серп_вер_жовт_лист_груд'.split(
+            '_'
+        ),
+        weekdays: weekdaysCaseReplace,
+        weekdaysShort: 'нд_пн_вт_ср_чт_пт_сб'.split('_'),
+        weekdaysMin: 'нд_пн_вт_ср_чт_пт_сб'.split('_'),
+        longDateFormat: {
+            LT: 'HH:mm',
+            LTS: 'HH:mm:ss',
+            L: 'DD.MM.YYYY',
+            LL: 'D MMMM YYYY р.',
+            LLL: 'D MMMM YYYY р., HH:mm',
+            LLLL: 'dddd, D MMMM YYYY р., HH:mm',
+        },
+        calendar: {
+            sameDay: processHoursFunction('[Сьогодні '),
+            nextDay: processHoursFunction('[Завтра '),
+            lastDay: processHoursFunction('[Вчора '),
+            nextWeek: processHoursFunction('[У] dddd ['),
+            lastWeek: function () {
+                switch (this.day()) {
+                    case 0:
+                    case 3:
+                    case 5:
+                    case 6:
+                        return processHoursFunction('[Минулої] dddd [').call(this);
+                    case 1:
+                    case 2:
+                    case 4:
+                        return processHoursFunction('[Минулого] dddd [').call(this);
+                }
+            },
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: 'за %s',
+            past: '%s тому',
+            s: 'декілька секунд',
+            ss: relativeTimeWithPlural$4,
+            m: relativeTimeWithPlural$4,
+            mm: relativeTimeWithPlural$4,
+            h: 'годину',
+            hh: relativeTimeWithPlural$4,
+            d: 'день',
+            dd: relativeTimeWithPlural$4,
+            M: 'місяць',
+            MM: relativeTimeWithPlural$4,
+            y: 'рік',
+            yy: relativeTimeWithPlural$4,
+        },
+        // M. E.: those two are virtually unused but a user might want to implement them for his/her website for some reason
+        meridiemParse: /ночі|ранку|дня|вечора/,
+        isPM: function (input) {
+            return /^(дня|вечора)$/.test(input);
+        },
+        meridiem: function (hour, minute, isLower) {
+            if (hour < 4) {
+                return 'ночі';
+            } else if (hour < 12) {
+                return 'ранку';
+            } else if (hour < 17) {
+                return 'дня';
+            } else {
+                return 'вечора';
+            }
+        },
+        dayOfMonthOrdinalParse: /\d{1,2}-(й|го)/,
+        ordinal: function (number, period) {
+            switch (period) {
+                case 'M':
+                case 'd':
+                case 'DDD':
+                case 'w':
+                case 'W':
+                    return number + '-й';
+                case 'D':
+                    return number + '-го';
+                default:
+                    return number;
+            }
+        },
+        week: {
+            dow: 1, // Monday is the first day of the week.
+            doy: 7, // The week that contains Jan 7th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    var months$a = [
+            'جنوری',
+            'فروری',
+            'مارچ',
+            'اپریل',
+            'مئی',
+            'جون',
+            'جولائی',
+            'اگست',
+            'ستمبر',
+            'اکتوبر',
+            'نومبر',
+            'دسمبر',
+        ],
+        days$1 = ['اتوار', 'پیر', 'منگل', 'بدھ', 'جمعرات', 'جمعہ', 'ہفتہ'];
+
+    moment.defineLocale('ur', {
+        months: months$a,
+        monthsShort: months$a,
+        weekdays: days$1,
+        weekdaysShort: days$1,
+        weekdaysMin: days$1,
+        longDateFormat: {
+            LT: 'HH:mm',
+            LTS: 'HH:mm:ss',
+            L: 'DD/MM/YYYY',
+            LL: 'D MMMM YYYY',
+            LLL: 'D MMMM YYYY HH:mm',
+            LLLL: 'dddd، D MMMM YYYY HH:mm',
+        },
+        meridiemParse: /صبح|شام/,
+        isPM: function (input) {
+            return 'شام' === input;
+        },
+        meridiem: function (hour, minute, isLower) {
+            if (hour < 12) {
+                return 'صبح';
+            }
+            return 'شام';
+        },
+        calendar: {
+            sameDay: '[آج بوقت] LT',
+            nextDay: '[کل بوقت] LT',
+            nextWeek: 'dddd [بوقت] LT',
+            lastDay: '[گذشتہ روز بوقت] LT',
+            lastWeek: '[گذشتہ] dddd [بوقت] LT',
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: '%s بعد',
+            past: '%s قبل',
+            s: 'چند سیکنڈ',
+            ss: '%d سیکنڈ',
+            m: 'ایک منٹ',
+            mm: '%d منٹ',
+            h: 'ایک گھنٹہ',
+            hh: '%d گھنٹے',
+            d: 'ایک دن',
+            dd: '%d دن',
+            M: 'ایک ماہ',
+            MM: '%d ماہ',
+            y: 'ایک سال',
+            yy: '%d سال',
+        },
+        preparse: function (string) {
+            return string.replace(/،/g, ',');
+        },
+        postformat: function (string) {
+            return string.replace(/,/g, '،');
+        },
+        week: {
+            dow: 1, // Monday is the first day of the week.
+            doy: 4, // The week that contains Jan 4th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    moment.defineLocale('uz-latn', {
+        months: 'Yanvar_Fevral_Mart_Aprel_May_Iyun_Iyul_Avgust_Sentabr_Oktabr_Noyabr_Dekabr'.split(
+            '_'
+        ),
+        monthsShort: 'Yan_Fev_Mar_Apr_May_Iyun_Iyul_Avg_Sen_Okt_Noy_Dek'.split('_'),
+        weekdays: 'Yakshanba_Dushanba_Seshanba_Chorshanba_Payshanba_Juma_Shanba'.split(
+            '_'
+        ),
+        weekdaysShort: 'Yak_Dush_Sesh_Chor_Pay_Jum_Shan'.split('_'),
+        weekdaysMin: 'Ya_Du_Se_Cho_Pa_Ju_Sha'.split('_'),
+        longDateFormat: {
+            LT: 'HH:mm',
+            LTS: 'HH:mm:ss',
+            L: 'DD/MM/YYYY',
+            LL: 'D MMMM YYYY',
+            LLL: 'D MMMM YYYY HH:mm',
+            LLLL: 'D MMMM YYYY, dddd HH:mm',
+        },
+        calendar: {
+            sameDay: '[Bugun soat] LT [da]',
+            nextDay: '[Ertaga] LT [da]',
+            nextWeek: 'dddd [kuni soat] LT [da]',
+            lastDay: '[Kecha soat] LT [da]',
+            lastWeek: "[O'tgan] dddd [kuni soat] LT [da]",
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: 'Yaqin %s ichida',
+            past: 'Bir necha %s oldin',
+            s: 'soniya',
+            ss: '%d soniya',
+            m: 'bir daqiqa',
+            mm: '%d daqiqa',
+            h: 'bir soat',
+            hh: '%d soat',
+            d: 'bir kun',
+            dd: '%d kun',
+            M: 'bir oy',
+            MM: '%d oy',
+            y: 'bir yil',
+            yy: '%d yil',
+        },
+        week: {
+            dow: 1, // Monday is the first day of the week.
+            doy: 7, // The week that contains Jan 7th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    moment.defineLocale('uz', {
+        months: 'январ_феврал_март_апрел_май_июн_июл_август_сентябр_октябр_ноябр_декабр'.split(
+            '_'
+        ),
+        monthsShort: 'янв_фев_мар_апр_май_июн_июл_авг_сен_окт_ноя_дек'.split('_'),
+        weekdays: 'Якшанба_Душанба_Сешанба_Чоршанба_Пайшанба_Жума_Шанба'.split('_'),
+        weekdaysShort: 'Якш_Душ_Сеш_Чор_Пай_Жум_Шан'.split('_'),
+        weekdaysMin: 'Як_Ду_Се_Чо_Па_Жу_Ша'.split('_'),
+        longDateFormat: {
+            LT: 'HH:mm',
+            LTS: 'HH:mm:ss',
+            L: 'DD/MM/YYYY',
+            LL: 'D MMMM YYYY',
+            LLL: 'D MMMM YYYY HH:mm',
+            LLLL: 'D MMMM YYYY, dddd HH:mm',
+        },
+        calendar: {
+            sameDay: '[Бугун соат] LT [да]',
+            nextDay: '[Эртага] LT [да]',
+            nextWeek: 'dddd [куни соат] LT [да]',
+            lastDay: '[Кеча соат] LT [да]',
+            lastWeek: '[Утган] dddd [куни соат] LT [да]',
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: 'Якин %s ичида',
+            past: 'Бир неча %s олдин',
+            s: 'фурсат',
+            ss: '%d фурсат',
+            m: 'бир дакика',
+            mm: '%d дакика',
+            h: 'бир соат',
+            hh: '%d соат',
+            d: 'бир кун',
+            dd: '%d кун',
+            M: 'бир ой',
+            MM: '%d ой',
+            y: 'бир йил',
+            yy: '%d йил',
+        },
+        week: {
+            dow: 1, // Monday is the first day of the week.
+            doy: 7, // The week that contains Jan 4th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    moment.defineLocale('vi', {
+        months: 'tháng 1_tháng 2_tháng 3_tháng 4_tháng 5_tháng 6_tháng 7_tháng 8_tháng 9_tháng 10_tháng 11_tháng 12'.split(
+            '_'
+        ),
+        monthsShort: 'Thg 01_Thg 02_Thg 03_Thg 04_Thg 05_Thg 06_Thg 07_Thg 08_Thg 09_Thg 10_Thg 11_Thg 12'.split(
+            '_'
+        ),
+        monthsParseExact: true,
+        weekdays: 'chủ nhật_thứ hai_thứ ba_thứ tư_thứ năm_thứ sáu_thứ bảy'.split(
+            '_'
+        ),
+        weekdaysShort: 'CN_T2_T3_T4_T5_T6_T7'.split('_'),
+        weekdaysMin: 'CN_T2_T3_T4_T5_T6_T7'.split('_'),
+        weekdaysParseExact: true,
+        meridiemParse: /sa|ch/i,
+        isPM: function (input) {
+            return /^ch$/i.test(input);
+        },
+        meridiem: function (hours, minutes, isLower) {
+            if (hours < 12) {
+                return isLower ? 'sa' : 'SA';
+            } else {
+                return isLower ? 'ch' : 'CH';
+            }
+        },
+        longDateFormat: {
+            LT: 'HH:mm',
+            LTS: 'HH:mm:ss',
+            L: 'DD/MM/YYYY',
+            LL: 'D MMMM [năm] YYYY',
+            LLL: 'D MMMM [năm] YYYY HH:mm',
+            LLLL: 'dddd, D MMMM [năm] YYYY HH:mm',
+            l: 'DD/M/YYYY',
+            ll: 'D MMM YYYY',
+            lll: 'D MMM YYYY HH:mm',
+            llll: 'ddd, D MMM YYYY HH:mm',
+        },
+        calendar: {
+            sameDay: '[Hôm nay lúc] LT',
+            nextDay: '[Ngày mai lúc] LT',
+            nextWeek: 'dddd [tuần tới lúc] LT',
+            lastDay: '[Hôm qua lúc] LT',
+            lastWeek: 'dddd [tuần trước lúc] LT',
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: '%s tới',
+            past: '%s trước',
+            s: 'vài giây',
+            ss: '%d giây',
+            m: 'một phút',
+            mm: '%d phút',
+            h: 'một giờ',
+            hh: '%d giờ',
+            d: 'một ngày',
+            dd: '%d ngày',
+            M: 'một tháng',
+            MM: '%d tháng',
+            y: 'một năm',
+            yy: '%d năm',
+        },
+        dayOfMonthOrdinalParse: /\d{1,2}/,
+        ordinal: function (number) {
+            return number;
+        },
+        week: {
+            dow: 1, // Monday is the first day of the week.
+            doy: 4, // The week that contains Jan 4th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    moment.defineLocale('x-pseudo', {
+        months: 'J~áñúá~rý_F~ébrú~árý_~Márc~h_Áp~ríl_~Máý_~Júñé~_Júl~ý_Áú~gúst~_Sép~témb~ér_Ó~ctób~ér_Ñ~óvém~bér_~Décé~mbér'.split(
+            '_'
+        ),
+        monthsShort: 'J~áñ_~Féb_~Már_~Ápr_~Máý_~Júñ_~Júl_~Áúg_~Sép_~Óct_~Ñóv_~Déc'.split(
+            '_'
+        ),
+        monthsParseExact: true,
+        weekdays: 'S~úñdá~ý_Mó~ñdáý~_Túé~sdáý~_Wéd~ñésd~áý_T~húrs~dáý_~Fríd~áý_S~átúr~dáý'.split(
+            '_'
+        ),
+        weekdaysShort: 'S~úñ_~Móñ_~Túé_~Wéd_~Thú_~Frí_~Sát'.split('_'),
+        weekdaysMin: 'S~ú_Mó~_Tú_~Wé_T~h_Fr~_Sá'.split('_'),
+        weekdaysParseExact: true,
+        longDateFormat: {
+            LT: 'HH:mm',
+            L: 'DD/MM/YYYY',
+            LL: 'D MMMM YYYY',
+            LLL: 'D MMMM YYYY HH:mm',
+            LLLL: 'dddd, D MMMM YYYY HH:mm',
+        },
+        calendar: {
+            sameDay: '[T~ódá~ý át] LT',
+            nextDay: '[T~ómó~rró~w át] LT',
+            nextWeek: 'dddd [át] LT',
+            lastDay: '[Ý~ést~érdá~ý át] LT',
+            lastWeek: '[L~ást] dddd [át] LT',
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: 'í~ñ %s',
+            past: '%s á~gó',
+            s: 'á ~féw ~sécó~ñds',
+            ss: '%d s~écóñ~ds',
+            m: 'á ~míñ~úté',
+            mm: '%d m~íñú~tés',
+            h: 'á~ñ hó~úr',
+            hh: '%d h~óúrs',
+            d: 'á ~dáý',
+            dd: '%d d~áýs',
+            M: 'á ~móñ~th',
+            MM: '%d m~óñt~hs',
+            y: 'á ~ýéár',
+            yy: '%d ý~éárs',
+        },
+        dayOfMonthOrdinalParse: /\d{1,2}(th|st|nd|rd)/,
+        ordinal: function (number) {
+            var b = number % 10,
+                output =
+                    ~~((number % 100) / 10) === 1
+                        ? 'th'
+                        : b === 1
+                        ? 'st'
+                        : b === 2
+                        ? 'nd'
+                        : b === 3
+                        ? 'rd'
+                        : 'th';
+            return number + output;
+        },
+        week: {
+            dow: 1, // Monday is the first day of the week.
+            doy: 4, // The week that contains Jan 4th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    moment.defineLocale('yo', {
+        months: 'Sẹ́rẹ́_Èrèlè_Ẹrẹ̀nà_Ìgbé_Èbibi_Òkùdu_Agẹmo_Ògún_Owewe_Ọ̀wàrà_Bélú_Ọ̀pẹ̀̀'.split(
+            '_'
+        ),
+        monthsShort: 'Sẹ́r_Èrl_Ẹrn_Ìgb_Èbi_Òkù_Agẹ_Ògú_Owe_Ọ̀wà_Bél_Ọ̀pẹ̀̀'.split('_'),
+        weekdays: 'Àìkú_Ajé_Ìsẹ́gun_Ọjọ́rú_Ọjọ́bọ_Ẹtì_Àbámẹ́ta'.split('_'),
+        weekdaysShort: 'Àìk_Ajé_Ìsẹ́_Ọjr_Ọjb_Ẹtì_Àbá'.split('_'),
+        weekdaysMin: 'Àì_Aj_Ìs_Ọr_Ọb_Ẹt_Àb'.split('_'),
+        longDateFormat: {
+            LT: 'h:mm A',
+            LTS: 'h:mm:ss A',
+            L: 'DD/MM/YYYY',
+            LL: 'D MMMM YYYY',
+            LLL: 'D MMMM YYYY h:mm A',
+            LLLL: 'dddd, D MMMM YYYY h:mm A',
+        },
+        calendar: {
+            sameDay: '[Ònì ni] LT',
+            nextDay: '[Ọ̀la ni] LT',
+            nextWeek: "dddd [Ọsẹ̀ tón'bọ] [ni] LT",
+            lastDay: '[Àna ni] LT',
+            lastWeek: 'dddd [Ọsẹ̀ tólọ́] [ni] LT',
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: 'ní %s',
+            past: '%s kọjá',
+            s: 'ìsẹjú aayá die',
+            ss: 'aayá %d',
+            m: 'ìsẹjú kan',
+            mm: 'ìsẹjú %d',
+            h: 'wákati kan',
+            hh: 'wákati %d',
+            d: 'ọjọ́ kan',
+            dd: 'ọjọ́ %d',
+            M: 'osù kan',
+            MM: 'osù %d',
+            y: 'ọdún kan',
+            yy: 'ọdún %d',
+        },
+        dayOfMonthOrdinalParse: /ọjọ́\s\d{1,2}/,
+        ordinal: 'ọjọ́ %d',
+        week: {
+            dow: 1, // Monday is the first day of the week.
+            doy: 4, // The week that contains Jan 4th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    moment.defineLocale('zh-cn', {
+        months: '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split(
+            '_'
+        ),
+        monthsShort: '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split(
+            '_'
+        ),
+        weekdays: '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'),
+        weekdaysShort: '周日_周一_周二_周三_周四_周五_周六'.split('_'),
+        weekdaysMin: '日_一_二_三_四_五_六'.split('_'),
+        longDateFormat: {
+            LT: 'HH:mm',
+            LTS: 'HH:mm:ss',
+            L: 'YYYY/MM/DD',
+            LL: 'YYYY年M月D日',
+            LLL: 'YYYY年M月D日Ah点mm分',
+            LLLL: 'YYYY年M月D日ddddAh点mm分',
+            l: 'YYYY/M/D',
+            ll: 'YYYY年M月D日',
+            lll: 'YYYY年M月D日 HH:mm',
+            llll: 'YYYY年M月D日dddd HH:mm',
+        },
+        meridiemParse: /凌晨|早上|上午|中午|下午|晚上/,
+        meridiemHour: function (hour, meridiem) {
+            if (hour === 12) {
+                hour = 0;
+            }
+            if (meridiem === '凌晨' || meridiem === '早上' || meridiem === '上午') {
+                return hour;
+            } else if (meridiem === '下午' || meridiem === '晚上') {
+                return hour + 12;
+            } else {
+                // '中午'
+                return hour >= 11 ? hour : hour + 12;
+            }
+        },
+        meridiem: function (hour, minute, isLower) {
+            var hm = hour * 100 + minute;
+            if (hm < 600) {
+                return '凌晨';
+            } else if (hm < 900) {
+                return '早上';
+            } else if (hm < 1130) {
+                return '上午';
+            } else if (hm < 1230) {
+                return '中午';
+            } else if (hm < 1800) {
+                return '下午';
+            } else {
+                return '晚上';
+            }
+        },
+        calendar: {
+            sameDay: '[今天]LT',
+            nextDay: '[明天]LT',
+            nextWeek: function (now) {
+                if (now.week() !== this.week()) {
+                    return '[下]dddLT';
+                } else {
+                    return '[本]dddLT';
+                }
+            },
+            lastDay: '[昨天]LT',
+            lastWeek: function (now) {
+                if (this.week() !== now.week()) {
+                    return '[上]dddLT';
+                } else {
+                    return '[本]dddLT';
+                }
+            },
+            sameElse: 'L',
+        },
+        dayOfMonthOrdinalParse: /\d{1,2}(日|月|周)/,
+        ordinal: function (number, period) {
+            switch (period) {
+                case 'd':
+                case 'D':
+                case 'DDD':
+                    return number + '日';
+                case 'M':
+                    return number + '月';
+                case 'w':
+                case 'W':
+                    return number + '周';
+                default:
+                    return number;
+            }
+        },
+        relativeTime: {
+            future: '%s后',
+            past: '%s前',
+            s: '几秒',
+            ss: '%d 秒',
+            m: '1 分钟',
+            mm: '%d 分钟',
+            h: '1 小时',
+            hh: '%d 小时',
+            d: '1 天',
+            dd: '%d 天',
+            M: '1 个月',
+            MM: '%d 个月',
+            y: '1 年',
+            yy: '%d 年',
+        },
+        week: {
+            // GB/T 7408-1994《数据元和交换格式·信息交换·日期和时间表示法》与ISO 8601:1988等效
+            dow: 1, // Monday is the first day of the week.
+            doy: 4, // The week that contains Jan 4th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    moment.defineLocale('zh-hk', {
+        months: '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split(
+            '_'
+        ),
+        monthsShort: '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split(
+            '_'
+        ),
+        weekdays: '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'),
+        weekdaysShort: '週日_週一_週二_週三_週四_週五_週六'.split('_'),
+        weekdaysMin: '日_一_二_三_四_五_六'.split('_'),
+        longDateFormat: {
+            LT: 'HH:mm',
+            LTS: 'HH:mm:ss',
+            L: 'YYYY/MM/DD',
+            LL: 'YYYY年M月D日',
+            LLL: 'YYYY年M月D日 HH:mm',
+            LLLL: 'YYYY年M月D日dddd HH:mm',
+            l: 'YYYY/M/D',
+            ll: 'YYYY年M月D日',
+            lll: 'YYYY年M月D日 HH:mm',
+            llll: 'YYYY年M月D日dddd HH:mm',
+        },
+        meridiemParse: /凌晨|早上|上午|中午|下午|晚上/,
+        meridiemHour: function (hour, meridiem) {
+            if (hour === 12) {
+                hour = 0;
+            }
+            if (meridiem === '凌晨' || meridiem === '早上' || meridiem === '上午') {
+                return hour;
+            } else if (meridiem === '中午') {
+                return hour >= 11 ? hour : hour + 12;
+            } else if (meridiem === '下午' || meridiem === '晚上') {
+                return hour + 12;
+            }
+        },
+        meridiem: function (hour, minute, isLower) {
+            var hm = hour * 100 + minute;
+            if (hm < 600) {
+                return '凌晨';
+            } else if (hm < 900) {
+                return '早上';
+            } else if (hm < 1200) {
+                return '上午';
+            } else if (hm === 1200) {
+                return '中午';
+            } else if (hm < 1800) {
+                return '下午';
+            } else {
+                return '晚上';
+            }
+        },
+        calendar: {
+            sameDay: '[今天]LT',
+            nextDay: '[明天]LT',
+            nextWeek: '[下]ddddLT',
+            lastDay: '[昨天]LT',
+            lastWeek: '[上]ddddLT',
+            sameElse: 'L',
+        },
+        dayOfMonthOrdinalParse: /\d{1,2}(日|月|週)/,
+        ordinal: function (number, period) {
+            switch (period) {
+                case 'd':
+                case 'D':
+                case 'DDD':
+                    return number + '日';
+                case 'M':
+                    return number + '月';
+                case 'w':
+                case 'W':
+                    return number + '週';
+                default:
+                    return number;
+            }
+        },
+        relativeTime: {
+            future: '%s後',
+            past: '%s前',
+            s: '幾秒',
+            ss: '%d 秒',
+            m: '1 分鐘',
+            mm: '%d 分鐘',
+            h: '1 小時',
+            hh: '%d 小時',
+            d: '1 天',
+            dd: '%d 天',
+            M: '1 個月',
+            MM: '%d 個月',
+            y: '1 年',
+            yy: '%d 年',
+        },
+    });
+
+    //! moment.js locale configuration
+
+    moment.defineLocale('zh-mo', {
+        months: '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split(
+            '_'
+        ),
+        monthsShort: '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split(
+            '_'
+        ),
+        weekdays: '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'),
+        weekdaysShort: '週日_週一_週二_週三_週四_週五_週六'.split('_'),
+        weekdaysMin: '日_一_二_三_四_五_六'.split('_'),
+        longDateFormat: {
+            LT: 'HH:mm',
+            LTS: 'HH:mm:ss',
+            L: 'DD/MM/YYYY',
+            LL: 'YYYY年M月D日',
+            LLL: 'YYYY年M月D日 HH:mm',
+            LLLL: 'YYYY年M月D日dddd HH:mm',
+            l: 'D/M/YYYY',
+            ll: 'YYYY年M月D日',
+            lll: 'YYYY年M月D日 HH:mm',
+            llll: 'YYYY年M月D日dddd HH:mm',
+        },
+        meridiemParse: /凌晨|早上|上午|中午|下午|晚上/,
+        meridiemHour: function (hour, meridiem) {
+            if (hour === 12) {
+                hour = 0;
+            }
+            if (meridiem === '凌晨' || meridiem === '早上' || meridiem === '上午') {
+                return hour;
+            } else if (meridiem === '中午') {
+                return hour >= 11 ? hour : hour + 12;
+            } else if (meridiem === '下午' || meridiem === '晚上') {
+                return hour + 12;
+            }
+        },
+        meridiem: function (hour, minute, isLower) {
+            var hm = hour * 100 + minute;
+            if (hm < 600) {
+                return '凌晨';
+            } else if (hm < 900) {
+                return '早上';
+            } else if (hm < 1130) {
+                return '上午';
+            } else if (hm < 1230) {
+                return '中午';
+            } else if (hm < 1800) {
+                return '下午';
+            } else {
+                return '晚上';
+            }
+        },
+        calendar: {
+            sameDay: '[今天] LT',
+            nextDay: '[明天] LT',
+            nextWeek: '[下]dddd LT',
+            lastDay: '[昨天] LT',
+            lastWeek: '[上]dddd LT',
+            sameElse: 'L',
+        },
+        dayOfMonthOrdinalParse: /\d{1,2}(日|月|週)/,
+        ordinal: function (number, period) {
+            switch (period) {
+                case 'd':
+                case 'D':
+                case 'DDD':
+                    return number + '日';
+                case 'M':
+                    return number + '月';
+                case 'w':
+                case 'W':
+                    return number + '週';
+                default:
+                    return number;
+            }
+        },
+        relativeTime: {
+            future: '%s內',
+            past: '%s前',
+            s: '幾秒',
+            ss: '%d 秒',
+            m: '1 分鐘',
+            mm: '%d 分鐘',
+            h: '1 小時',
+            hh: '%d 小時',
+            d: '1 天',
+            dd: '%d 天',
+            M: '1 個月',
+            MM: '%d 個月',
+            y: '1 年',
+            yy: '%d 年',
+        },
+    });
+
+    //! moment.js locale configuration
+
+    moment.defineLocale('zh-tw', {
+        months: '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split(
+            '_'
+        ),
+        monthsShort: '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split(
+            '_'
+        ),
+        weekdays: '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'),
+        weekdaysShort: '週日_週一_週二_週三_週四_週五_週六'.split('_'),
+        weekdaysMin: '日_一_二_三_四_五_六'.split('_'),
+        longDateFormat: {
+            LT: 'HH:mm',
+            LTS: 'HH:mm:ss',
+            L: 'YYYY/MM/DD',
+            LL: 'YYYY年M月D日',
+            LLL: 'YYYY年M月D日 HH:mm',
+            LLLL: 'YYYY年M月D日dddd HH:mm',
+            l: 'YYYY/M/D',
+            ll: 'YYYY年M月D日',
+            lll: 'YYYY年M月D日 HH:mm',
+            llll: 'YYYY年M月D日dddd HH:mm',
+        },
+        meridiemParse: /凌晨|早上|上午|中午|下午|晚上/,
+        meridiemHour: function (hour, meridiem) {
+            if (hour === 12) {
+                hour = 0;
+            }
+            if (meridiem === '凌晨' || meridiem === '早上' || meridiem === '上午') {
+                return hour;
+            } else if (meridiem === '中午') {
+                return hour >= 11 ? hour : hour + 12;
+            } else if (meridiem === '下午' || meridiem === '晚上') {
+                return hour + 12;
+            }
+        },
+        meridiem: function (hour, minute, isLower) {
+            var hm = hour * 100 + minute;
+            if (hm < 600) {
+                return '凌晨';
+            } else if (hm < 900) {
+                return '早上';
+            } else if (hm < 1130) {
+                return '上午';
+            } else if (hm < 1230) {
+                return '中午';
+            } else if (hm < 1800) {
+                return '下午';
+            } else {
+                return '晚上';
+            }
+        },
+        calendar: {
+            sameDay: '[今天] LT',
+            nextDay: '[明天] LT',
+            nextWeek: '[下]dddd LT',
+            lastDay: '[昨天] LT',
+            lastWeek: '[上]dddd LT',
+            sameElse: 'L',
+        },
+        dayOfMonthOrdinalParse: /\d{1,2}(日|月|週)/,
+        ordinal: function (number, period) {
+            switch (period) {
+                case 'd':
+                case 'D':
+                case 'DDD':
+                    return number + '日';
+                case 'M':
+                    return number + '月';
+                case 'w':
+                case 'W':
+                    return number + '週';
+                default:
+                    return number;
+            }
+        },
+        relativeTime: {
+            future: '%s後',
+            past: '%s前',
+            s: '幾秒',
+            ss: '%d 秒',
+            m: '1 分鐘',
+            mm: '%d 分鐘',
+            h: '1 小時',
+            hh: '%d 小時',
+            d: '1 天',
+            dd: '%d 天',
+            M: '1 個月',
+            MM: '%d 個月',
+            y: '1 年',
+            yy: '%d 年',
+        },
+    });
+
+    moment.locale('en');
+
+    return moment;
+
+})));
diff --git a/admin/js/vendors/moment/locales.min.js b/admin/js/vendors/moment/locales.min.js
new file mode 100644 (file)
index 0000000..56da071
--- /dev/null
@@ -0,0 +1,2 @@
+!function(e,a){"object"==typeof exports&&"undefined"!=typeof module&&"function"==typeof require?a(require("../moment")):"function"==typeof define&&define.amd?define(["../moment"],a):a(e.moment)}(this,function(e){"use strict";e.defineLocale("af",{months:"Januarie_Februarie_Maart_April_Mei_Junie_Julie_Augustus_September_Oktober_November_Desember".split("_"),monthsShort:"Jan_Feb_Mrt_Apr_Mei_Jun_Jul_Aug_Sep_Okt_Nov_Des".split("_"),weekdays:"Sondag_Maandag_Dinsdag_Woensdag_Donderdag_Vrydag_Saterdag".split("_"),weekdaysShort:"Son_Maa_Din_Woe_Don_Vry_Sat".split("_"),weekdaysMin:"So_Ma_Di_Wo_Do_Vr_Sa".split("_"),meridiemParse:/vm|nm/i,isPM:function(e){return/^nm$/i.test(e)},meridiem:function(e,a,_){return e<12?_?"vm":"VM":_?"nm":"NM"},longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Vandag om] LT",nextDay:"[M\xf4re om] LT",nextWeek:"dddd [om] LT",lastDay:"[Gister om] LT",lastWeek:"[Laas] dddd [om] LT",sameElse:"L"},relativeTime:{future:"oor %s",past:"%s gelede",s:"'n paar sekondes",ss:"%d sekondes",m:"'n minuut",mm:"%d minute",h:"'n uur",hh:"%d ure",d:"'n dag",dd:"%d dae",M:"'n maand",MM:"%d maande",y:"'n jaar",yy:"%d jaar"},dayOfMonthOrdinalParse:/\d{1,2}(ste|de)/,ordinal:function(e){return e+(1===e||8===e||20<=e?"ste":"de")},week:{dow:1,doy:4}});function r(e){return 0===e?0:1===e?1:2===e?2:3<=e%100&&e%100<=10?3:11<=e%100?4:5}function a(n){return function(e,a,_,s){var d=r(e),t=i[n][r(e)];return 2===d&&(t=t[a?0:1]),t.replace(/%d/i,e)}}var i={s:["\u0623\u0642\u0644 \u0645\u0646 \u062b\u0627\u0646\u064a\u0629","\u062b\u0627\u0646\u064a\u0629 \u0648\u0627\u062d\u062f\u0629",["\u062b\u0627\u0646\u064a\u062a\u0627\u0646","\u062b\u0627\u0646\u064a\u062a\u064a\u0646"],"%d \u062b\u0648\u0627\u0646","%d \u062b\u0627\u0646\u064a\u0629","%d \u062b\u0627\u0646\u064a\u0629"],m:["\u0623\u0642\u0644 \u0645\u0646 \u062f\u0642\u064a\u0642\u0629","\u062f\u0642\u064a\u0642\u0629 \u0648\u0627\u062d\u062f\u0629",["\u062f\u0642\u064a\u0642\u062a\u0627\u0646","\u062f\u0642\u064a\u0642\u062a\u064a\u0646"],"%d \u062f\u0642\u0627\u0626\u0642","%d \u062f\u0642\u064a\u0642\u0629","%d \u062f\u0642\u064a\u0642\u0629"],h:["\u0623\u0642\u0644 \u0645\u0646 \u0633\u0627\u0639\u0629","\u0633\u0627\u0639\u0629 \u0648\u0627\u062d\u062f\u0629",["\u0633\u0627\u0639\u062a\u0627\u0646","\u0633\u0627\u0639\u062a\u064a\u0646"],"%d \u0633\u0627\u0639\u0627\u062a","%d \u0633\u0627\u0639\u0629","%d \u0633\u0627\u0639\u0629"],d:["\u0623\u0642\u0644 \u0645\u0646 \u064a\u0648\u0645","\u064a\u0648\u0645 \u0648\u0627\u062d\u062f",["\u064a\u0648\u0645\u0627\u0646","\u064a\u0648\u0645\u064a\u0646"],"%d \u0623\u064a\u0627\u0645","%d \u064a\u0648\u0645\u064b\u0627","%d \u064a\u0648\u0645"],M:["\u0623\u0642\u0644 \u0645\u0646 \u0634\u0647\u0631","\u0634\u0647\u0631 \u0648\u0627\u062d\u062f",["\u0634\u0647\u0631\u0627\u0646","\u0634\u0647\u0631\u064a\u0646"],"%d \u0623\u0634\u0647\u0631","%d \u0634\u0647\u0631\u0627","%d \u0634\u0647\u0631"],y:["\u0623\u0642\u0644 \u0645\u0646 \u0639\u0627\u0645","\u0639\u0627\u0645 \u0648\u0627\u062d\u062f",["\u0639\u0627\u0645\u0627\u0646","\u0639\u0627\u0645\u064a\u0646"],"%d \u0623\u0639\u0648\u0627\u0645","%d \u0639\u0627\u0645\u064b\u0627","%d \u0639\u0627\u0645"]},_=["\u062c\u0627\u0646\u0641\u064a","\u0641\u064a\u0641\u0631\u064a","\u0645\u0627\u0631\u0633","\u0623\u0641\u0631\u064a\u0644","\u0645\u0627\u064a","\u062c\u0648\u0627\u0646","\u062c\u0648\u064a\u0644\u064a\u0629","\u0623\u0648\u062a","\u0633\u0628\u062a\u0645\u0628\u0631","\u0623\u0643\u062a\u0648\u0628\u0631","\u0646\u0648\u0641\u0645\u0628\u0631","\u062f\u064a\u0633\u0645\u0628\u0631"];e.defineLocale("ar-dz",{months:_,monthsShort:_,weekdays:"\u0627\u0644\u0623\u062d\u062f_\u0627\u0644\u0625\u062b\u0646\u064a\u0646_\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621_\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621_\u0627\u0644\u062e\u0645\u064a\u0633_\u0627\u0644\u062c\u0645\u0639\u0629_\u0627\u0644\u0633\u0628\u062a".split("_"),weekdaysShort:"\u0623\u062d\u062f_\u0625\u062b\u0646\u064a\u0646_\u062b\u0644\u0627\u062b\u0627\u0621_\u0623\u0631\u0628\u0639\u0627\u0621_\u062e\u0645\u064a\u0633_\u062c\u0645\u0639\u0629_\u0633\u0628\u062a".split("_"),weekdaysMin:"\u062d_\u0646_\u062b_\u0631_\u062e_\u062c_\u0633".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"D/\u200fM/\u200fYYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},meridiemParse:/\u0635|\u0645/,isPM:function(e){return"\u0645"===e},meridiem:function(e,a,_){return e<12?"\u0635":"\u0645"},calendar:{sameDay:"[\u0627\u0644\u064a\u0648\u0645 \u0639\u0646\u062f \u0627\u0644\u0633\u0627\u0639\u0629] LT",nextDay:"[\u063a\u062f\u064b\u0627 \u0639\u0646\u062f \u0627\u0644\u0633\u0627\u0639\u0629] LT",nextWeek:"dddd [\u0639\u0646\u062f \u0627\u0644\u0633\u0627\u0639\u0629] LT",lastDay:"[\u0623\u0645\u0633 \u0639\u0646\u062f \u0627\u0644\u0633\u0627\u0639\u0629] LT",lastWeek:"dddd [\u0639\u0646\u062f \u0627\u0644\u0633\u0627\u0639\u0629] LT",sameElse:"L"},relativeTime:{future:"\u0628\u0639\u062f %s",past:"\u0645\u0646\u0630 %s",s:a("s"),ss:a("s"),m:a("m"),mm:a("m"),h:a("h"),hh:a("h"),d:a("d"),dd:a("d"),M:a("M"),MM:a("M"),y:a("y"),yy:a("y")},postformat:function(e){return e.replace(/,/g,"\u060c")},week:{dow:0,doy:4}}),e.defineLocale("ar-kw",{months:"\u064a\u0646\u0627\u064a\u0631_\u0641\u0628\u0631\u0627\u064a\u0631_\u0645\u0627\u0631\u0633_\u0623\u0628\u0631\u064a\u0644_\u0645\u0627\u064a_\u064a\u0648\u0646\u064a\u0648_\u064a\u0648\u0644\u064a\u0648\u0632_\u063a\u0634\u062a_\u0634\u062a\u0646\u0628\u0631_\u0623\u0643\u062a\u0648\u0628\u0631_\u0646\u0648\u0646\u0628\u0631_\u062f\u062c\u0646\u0628\u0631".split("_"),monthsShort:"\u064a\u0646\u0627\u064a\u0631_\u0641\u0628\u0631\u0627\u064a\u0631_\u0645\u0627\u0631\u0633_\u0623\u0628\u0631\u064a\u0644_\u0645\u0627\u064a_\u064a\u0648\u0646\u064a\u0648_\u064a\u0648\u0644\u064a\u0648\u0632_\u063a\u0634\u062a_\u0634\u062a\u0646\u0628\u0631_\u0623\u0643\u062a\u0648\u0628\u0631_\u0646\u0648\u0646\u0628\u0631_\u062f\u062c\u0646\u0628\u0631".split("_"),weekdays:"\u0627\u0644\u0623\u062d\u062f_\u0627\u0644\u0625\u062a\u0646\u064a\u0646_\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621_\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621_\u0627\u0644\u062e\u0645\u064a\u0633_\u0627\u0644\u062c\u0645\u0639\u0629_\u0627\u0644\u0633\u0628\u062a".split("_"),weekdaysShort:"\u0627\u062d\u062f_\u0627\u062a\u0646\u064a\u0646_\u062b\u0644\u0627\u062b\u0627\u0621_\u0627\u0631\u0628\u0639\u0627\u0621_\u062e\u0645\u064a\u0633_\u062c\u0645\u0639\u0629_\u0633\u0628\u062a".split("_"),weekdaysMin:"\u062d_\u0646_\u062b_\u0631_\u062e_\u062c_\u0633".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[\u0627\u0644\u064a\u0648\u0645 \u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",nextDay:"[\u063a\u062f\u0627 \u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",nextWeek:"dddd [\u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",lastDay:"[\u0623\u0645\u0633 \u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",lastWeek:"dddd [\u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",sameElse:"L"},relativeTime:{future:"\u0641\u064a %s",past:"\u0645\u0646\u0630 %s",s:"\u062b\u0648\u0627\u0646",ss:"%d \u062b\u0627\u0646\u064a\u0629",m:"\u062f\u0642\u064a\u0642\u0629",mm:"%d \u062f\u0642\u0627\u0626\u0642",h:"\u0633\u0627\u0639\u0629",hh:"%d \u0633\u0627\u0639\u0627\u062a",d:"\u064a\u0648\u0645",dd:"%d \u0623\u064a\u0627\u0645",M:"\u0634\u0647\u0631",MM:"%d \u0623\u0634\u0647\u0631",y:"\u0633\u0646\u0629",yy:"%d \u0633\u0646\u0648\u0627\u062a"},week:{dow:0,doy:12}});function m(e){return 0===e?0:1===e?1:2===e?2:3<=e%100&&e%100<=10?3:11<=e%100?4:5}function s(n){return function(e,a,_,s){var d=m(e),t=o[n][m(e)];return 2===d&&(t=t[a?0:1]),t.replace(/%d/i,e)}}var d={1:"1",2:"2",3:"3",4:"4",5:"5",6:"6",7:"7",8:"8",9:"9",0:"0"},o={s:["\u0623\u0642\u0644 \u0645\u0646 \u062b\u0627\u0646\u064a\u0629","\u062b\u0627\u0646\u064a\u0629 \u0648\u0627\u062d\u062f\u0629",["\u062b\u0627\u0646\u064a\u062a\u0627\u0646","\u062b\u0627\u0646\u064a\u062a\u064a\u0646"],"%d \u062b\u0648\u0627\u0646","%d \u062b\u0627\u0646\u064a\u0629","%d \u062b\u0627\u0646\u064a\u0629"],m:["\u0623\u0642\u0644 \u0645\u0646 \u062f\u0642\u064a\u0642\u0629","\u062f\u0642\u064a\u0642\u0629 \u0648\u0627\u062d\u062f\u0629",["\u062f\u0642\u064a\u0642\u062a\u0627\u0646","\u062f\u0642\u064a\u0642\u062a\u064a\u0646"],"%d \u062f\u0642\u0627\u0626\u0642","%d \u062f\u0642\u064a\u0642\u0629","%d \u062f\u0642\u064a\u0642\u0629"],h:["\u0623\u0642\u0644 \u0645\u0646 \u0633\u0627\u0639\u0629","\u0633\u0627\u0639\u0629 \u0648\u0627\u062d\u062f\u0629",["\u0633\u0627\u0639\u062a\u0627\u0646","\u0633\u0627\u0639\u062a\u064a\u0646"],"%d \u0633\u0627\u0639\u0627\u062a","%d \u0633\u0627\u0639\u0629","%d \u0633\u0627\u0639\u0629"],d:["\u0623\u0642\u0644 \u0645\u0646 \u064a\u0648\u0645","\u064a\u0648\u0645 \u0648\u0627\u062d\u062f",["\u064a\u0648\u0645\u0627\u0646","\u064a\u0648\u0645\u064a\u0646"],"%d \u0623\u064a\u0627\u0645","%d \u064a\u0648\u0645\u064b\u0627","%d \u064a\u0648\u0645"],M:["\u0623\u0642\u0644 \u0645\u0646 \u0634\u0647\u0631","\u0634\u0647\u0631 \u0648\u0627\u062d\u062f",["\u0634\u0647\u0631\u0627\u0646","\u0634\u0647\u0631\u064a\u0646"],"%d \u0623\u0634\u0647\u0631","%d \u0634\u0647\u0631\u0627","%d \u0634\u0647\u0631"],y:["\u0623\u0642\u0644 \u0645\u0646 \u0639\u0627\u0645","\u0639\u0627\u0645 \u0648\u0627\u062d\u062f",["\u0639\u0627\u0645\u0627\u0646","\u0639\u0627\u0645\u064a\u0646"],"%d \u0623\u0639\u0648\u0627\u0645","%d \u0639\u0627\u0645\u064b\u0627","%d \u0639\u0627\u0645"]},t=["\u064a\u0646\u0627\u064a\u0631","\u0641\u0628\u0631\u0627\u064a\u0631","\u0645\u0627\u0631\u0633","\u0623\u0628\u0631\u064a\u0644","\u0645\u0627\u064a\u0648","\u064a\u0648\u0646\u064a\u0648","\u064a\u0648\u0644\u064a\u0648","\u0623\u063a\u0633\u0637\u0633","\u0633\u0628\u062a\u0645\u0628\u0631","\u0623\u0643\u062a\u0648\u0628\u0631","\u0646\u0648\u0641\u0645\u0628\u0631","\u062f\u064a\u0633\u0645\u0628\u0631"];e.defineLocale("ar-ly",{months:t,monthsShort:t,weekdays:"\u0627\u0644\u0623\u062d\u062f_\u0627\u0644\u0625\u062b\u0646\u064a\u0646_\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621_\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621_\u0627\u0644\u062e\u0645\u064a\u0633_\u0627\u0644\u062c\u0645\u0639\u0629_\u0627\u0644\u0633\u0628\u062a".split("_"),weekdaysShort:"\u0623\u062d\u062f_\u0625\u062b\u0646\u064a\u0646_\u062b\u0644\u0627\u062b\u0627\u0621_\u0623\u0631\u0628\u0639\u0627\u0621_\u062e\u0645\u064a\u0633_\u062c\u0645\u0639\u0629_\u0633\u0628\u062a".split("_"),weekdaysMin:"\u062d_\u0646_\u062b_\u0631_\u062e_\u062c_\u0633".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"D/\u200fM/\u200fYYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},meridiemParse:/\u0635|\u0645/,isPM:function(e){return"\u0645"===e},meridiem:function(e,a,_){return e<12?"\u0635":"\u0645"},calendar:{sameDay:"[\u0627\u0644\u064a\u0648\u0645 \u0639\u0646\u062f \u0627\u0644\u0633\u0627\u0639\u0629] LT",nextDay:"[\u063a\u062f\u064b\u0627 \u0639\u0646\u062f \u0627\u0644\u0633\u0627\u0639\u0629] LT",nextWeek:"dddd [\u0639\u0646\u062f \u0627\u0644\u0633\u0627\u0639\u0629] LT",lastDay:"[\u0623\u0645\u0633 \u0639\u0646\u062f \u0627\u0644\u0633\u0627\u0639\u0629] LT",lastWeek:"dddd [\u0639\u0646\u062f \u0627\u0644\u0633\u0627\u0639\u0629] LT",sameElse:"L"},relativeTime:{future:"\u0628\u0639\u062f %s",past:"\u0645\u0646\u0630 %s",s:s("s"),ss:s("s"),m:s("m"),mm:s("m"),h:s("h"),hh:s("h"),d:s("d"),dd:s("d"),M:s("M"),MM:s("M"),y:s("y"),yy:s("y")},preparse:function(e){return e.replace(/\u060c/g,",")},postformat:function(e){return e.replace(/\d/g,function(e){return d[e]}).replace(/,/g,"\u060c")},week:{dow:6,doy:12}}),e.defineLocale("ar-ma",{months:"\u064a\u0646\u0627\u064a\u0631_\u0641\u0628\u0631\u0627\u064a\u0631_\u0645\u0627\u0631\u0633_\u0623\u0628\u0631\u064a\u0644_\u0645\u0627\u064a_\u064a\u0648\u0646\u064a\u0648_\u064a\u0648\u0644\u064a\u0648\u0632_\u063a\u0634\u062a_\u0634\u062a\u0646\u0628\u0631_\u0623\u0643\u062a\u0648\u0628\u0631_\u0646\u0648\u0646\u0628\u0631_\u062f\u062c\u0646\u0628\u0631".split("_"),monthsShort:"\u064a\u0646\u0627\u064a\u0631_\u0641\u0628\u0631\u0627\u064a\u0631_\u0645\u0627\u0631\u0633_\u0623\u0628\u0631\u064a\u0644_\u0645\u0627\u064a_\u064a\u0648\u0646\u064a\u0648_\u064a\u0648\u0644\u064a\u0648\u0632_\u063a\u0634\u062a_\u0634\u062a\u0646\u0628\u0631_\u0623\u0643\u062a\u0648\u0628\u0631_\u0646\u0648\u0646\u0628\u0631_\u062f\u062c\u0646\u0628\u0631".split("_"),weekdays:"\u0627\u0644\u0623\u062d\u062f_\u0627\u0644\u0625\u062b\u0646\u064a\u0646_\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621_\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621_\u0627\u0644\u062e\u0645\u064a\u0633_\u0627\u0644\u062c\u0645\u0639\u0629_\u0627\u0644\u0633\u0628\u062a".split("_"),weekdaysShort:"\u0627\u062d\u062f_\u0627\u062b\u0646\u064a\u0646_\u062b\u0644\u0627\u062b\u0627\u0621_\u0627\u0631\u0628\u0639\u0627\u0621_\u062e\u0645\u064a\u0633_\u062c\u0645\u0639\u0629_\u0633\u0628\u062a".split("_"),weekdaysMin:"\u062d_\u0646_\u062b_\u0631_\u062e_\u062c_\u0633".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[\u0627\u0644\u064a\u0648\u0645 \u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",nextDay:"[\u063a\u062f\u0627 \u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",nextWeek:"dddd [\u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",lastDay:"[\u0623\u0645\u0633 \u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",lastWeek:"dddd [\u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",sameElse:"L"},relativeTime:{future:"\u0641\u064a %s",past:"\u0645\u0646\u0630 %s",s:"\u062b\u0648\u0627\u0646",ss:"%d \u062b\u0627\u0646\u064a\u0629",m:"\u062f\u0642\u064a\u0642\u0629",mm:"%d \u062f\u0642\u0627\u0626\u0642",h:"\u0633\u0627\u0639\u0629",hh:"%d \u0633\u0627\u0639\u0627\u062a",d:"\u064a\u0648\u0645",dd:"%d \u0623\u064a\u0627\u0645",M:"\u0634\u0647\u0631",MM:"%d \u0623\u0634\u0647\u0631",y:"\u0633\u0646\u0629",yy:"%d \u0633\u0646\u0648\u0627\u062a"},week:{dow:6,doy:12}});var n={1:"\u0661",2:"\u0662",3:"\u0663",4:"\u0664",5:"\u0665",6:"\u0666",7:"\u0667",8:"\u0668",9:"\u0669",0:"\u0660"},u={"\u0661":"1","\u0662":"2","\u0663":"3","\u0664":"4","\u0665":"5","\u0666":"6","\u0667":"7","\u0668":"8","\u0669":"9","\u0660":"0"};e.defineLocale("ar-sa",{months:"\u064a\u0646\u0627\u064a\u0631_\u0641\u0628\u0631\u0627\u064a\u0631_\u0645\u0627\u0631\u0633_\u0623\u0628\u0631\u064a\u0644_\u0645\u0627\u064a\u0648_\u064a\u0648\u0646\u064a\u0648_\u064a\u0648\u0644\u064a\u0648_\u0623\u063a\u0633\u0637\u0633_\u0633\u0628\u062a\u0645\u0628\u0631_\u0623\u0643\u062a\u0648\u0628\u0631_\u0646\u0648\u0641\u0645\u0628\u0631_\u062f\u064a\u0633\u0645\u0628\u0631".split("_"),monthsShort:"\u064a\u0646\u0627\u064a\u0631_\u0641\u0628\u0631\u0627\u064a\u0631_\u0645\u0627\u0631\u0633_\u0623\u0628\u0631\u064a\u0644_\u0645\u0627\u064a\u0648_\u064a\u0648\u0646\u064a\u0648_\u064a\u0648\u0644\u064a\u0648_\u0623\u063a\u0633\u0637\u0633_\u0633\u0628\u062a\u0645\u0628\u0631_\u0623\u0643\u062a\u0648\u0628\u0631_\u0646\u0648\u0641\u0645\u0628\u0631_\u062f\u064a\u0633\u0645\u0628\u0631".split("_"),weekdays:"\u0627\u0644\u0623\u062d\u062f_\u0627\u0644\u0625\u062b\u0646\u064a\u0646_\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621_\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621_\u0627\u0644\u062e\u0645\u064a\u0633_\u0627\u0644\u062c\u0645\u0639\u0629_\u0627\u0644\u0633\u0628\u062a".split("_"),weekdaysShort:"\u0623\u062d\u062f_\u0625\u062b\u0646\u064a\u0646_\u062b\u0644\u0627\u062b\u0627\u0621_\u0623\u0631\u0628\u0639\u0627\u0621_\u062e\u0645\u064a\u0633_\u062c\u0645\u0639\u0629_\u0633\u0628\u062a".split("_"),weekdaysMin:"\u062d_\u0646_\u062b_\u0631_\u062e_\u062c_\u0633".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},meridiemParse:/\u0635|\u0645/,isPM:function(e){return"\u0645"===e},meridiem:function(e,a,_){return e<12?"\u0635":"\u0645"},calendar:{sameDay:"[\u0627\u0644\u064a\u0648\u0645 \u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",nextDay:"[\u063a\u062f\u0627 \u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",nextWeek:"dddd [\u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",lastDay:"[\u0623\u0645\u0633 \u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",lastWeek:"dddd [\u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",sameElse:"L"},relativeTime:{future:"\u0641\u064a %s",past:"\u0645\u0646\u0630 %s",s:"\u062b\u0648\u0627\u0646",ss:"%d \u062b\u0627\u0646\u064a\u0629",m:"\u062f\u0642\u064a\u0642\u0629",mm:"%d \u062f\u0642\u0627\u0626\u0642",h:"\u0633\u0627\u0639\u0629",hh:"%d \u0633\u0627\u0639\u0627\u062a",d:"\u064a\u0648\u0645",dd:"%d \u0623\u064a\u0627\u0645",M:"\u0634\u0647\u0631",MM:"%d \u0623\u0634\u0647\u0631",y:"\u0633\u0646\u0629",yy:"%d \u0633\u0646\u0648\u0627\u062a"},preparse:function(e){return e.replace(/[\u0661\u0662\u0663\u0664\u0665\u0666\u0667\u0668\u0669\u0660]/g,function(e){return u[e]}).replace(/\u060c/g,",")},postformat:function(e){return e.replace(/\d/g,function(e){return n[e]}).replace(/,/g,"\u060c")},week:{dow:0,doy:6}}),e.defineLocale("ar-tn",{months:"\u062c\u0627\u0646\u0641\u064a_\u0641\u064a\u0641\u0631\u064a_\u0645\u0627\u0631\u0633_\u0623\u0641\u0631\u064a\u0644_\u0645\u0627\u064a_\u062c\u0648\u0627\u0646_\u062c\u0648\u064a\u0644\u064a\u0629_\u0623\u0648\u062a_\u0633\u0628\u062a\u0645\u0628\u0631_\u0623\u0643\u062a\u0648\u0628\u0631_\u0646\u0648\u0641\u0645\u0628\u0631_\u062f\u064a\u0633\u0645\u0628\u0631".split("_"),monthsShort:"\u062c\u0627\u0646\u0641\u064a_\u0641\u064a\u0641\u0631\u064a_\u0645\u0627\u0631\u0633_\u0623\u0641\u0631\u064a\u0644_\u0645\u0627\u064a_\u062c\u0648\u0627\u0646_\u062c\u0648\u064a\u0644\u064a\u0629_\u0623\u0648\u062a_\u0633\u0628\u062a\u0645\u0628\u0631_\u0623\u0643\u062a\u0648\u0628\u0631_\u0646\u0648\u0641\u0645\u0628\u0631_\u062f\u064a\u0633\u0645\u0628\u0631".split("_"),weekdays:"\u0627\u0644\u0623\u062d\u062f_\u0627\u0644\u0625\u062b\u0646\u064a\u0646_\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621_\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621_\u0627\u0644\u062e\u0645\u064a\u0633_\u0627\u0644\u062c\u0645\u0639\u0629_\u0627\u0644\u0633\u0628\u062a".split("_"),weekdaysShort:"\u0623\u062d\u062f_\u0625\u062b\u0646\u064a\u0646_\u062b\u0644\u0627\u062b\u0627\u0621_\u0623\u0631\u0628\u0639\u0627\u0621_\u062e\u0645\u064a\u0633_\u062c\u0645\u0639\u0629_\u0633\u0628\u062a".split("_"),weekdaysMin:"\u062d_\u0646_\u062b_\u0631_\u062e_\u062c_\u0633".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[\u0627\u0644\u064a\u0648\u0645 \u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",nextDay:"[\u063a\u062f\u0627 \u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",nextWeek:"dddd [\u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",lastDay:"[\u0623\u0645\u0633 \u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",lastWeek:"dddd [\u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",sameElse:"L"},relativeTime:{future:"\u0641\u064a %s",past:"\u0645\u0646\u0630 %s",s:"\u062b\u0648\u0627\u0646",ss:"%d \u062b\u0627\u0646\u064a\u0629",m:"\u062f\u0642\u064a\u0642\u0629",mm:"%d \u062f\u0642\u0627\u0626\u0642",h:"\u0633\u0627\u0639\u0629",hh:"%d \u0633\u0627\u0639\u0627\u062a",d:"\u064a\u0648\u0645",dd:"%d \u0623\u064a\u0627\u0645",M:"\u0634\u0647\u0631",MM:"%d \u0623\u0634\u0647\u0631",y:"\u0633\u0646\u0629",yy:"%d \u0633\u0646\u0648\u0627\u062a"},week:{dow:1,doy:4}});function l(e){return 0===e?0:1===e?1:2===e?2:3<=e%100&&e%100<=10?3:11<=e%100?4:5}function M(n){return function(e,a,_,s){var d=l(e),t=h[n][l(e)];return 2===d&&(t=t[a?0:1]),t.replace(/%d/i,e)}}var L={1:"\u0661",2:"\u0662",3:"\u0663",4:"\u0664",5:"\u0665",6:"\u0666",7:"\u0667",8:"\u0668",9:"\u0669",0:"\u0660"},Y={"\u0661":"1","\u0662":"2","\u0663":"3","\u0664":"4","\u0665":"5","\u0666":"6","\u0667":"7","\u0668":"8","\u0669":"9","\u0660":"0"},h={s:["\u0623\u0642\u0644 \u0645\u0646 \u062b\u0627\u0646\u064a\u0629","\u062b\u0627\u0646\u064a\u0629 \u0648\u0627\u062d\u062f\u0629",["\u062b\u0627\u0646\u064a\u062a\u0627\u0646","\u062b\u0627\u0646\u064a\u062a\u064a\u0646"],"%d \u062b\u0648\u0627\u0646","%d \u062b\u0627\u0646\u064a\u0629","%d \u062b\u0627\u0646\u064a\u0629"],m:["\u0623\u0642\u0644 \u0645\u0646 \u062f\u0642\u064a\u0642\u0629","\u062f\u0642\u064a\u0642\u0629 \u0648\u0627\u062d\u062f\u0629",["\u062f\u0642\u064a\u0642\u062a\u0627\u0646","\u062f\u0642\u064a\u0642\u062a\u064a\u0646"],"%d \u062f\u0642\u0627\u0626\u0642","%d \u062f\u0642\u064a\u0642\u0629","%d \u062f\u0642\u064a\u0642\u0629"],h:["\u0623\u0642\u0644 \u0645\u0646 \u0633\u0627\u0639\u0629","\u0633\u0627\u0639\u0629 \u0648\u0627\u062d\u062f\u0629",["\u0633\u0627\u0639\u062a\u0627\u0646","\u0633\u0627\u0639\u062a\u064a\u0646"],"%d \u0633\u0627\u0639\u0627\u062a","%d \u0633\u0627\u0639\u0629","%d \u0633\u0627\u0639\u0629"],d:["\u0623\u0642\u0644 \u0645\u0646 \u064a\u0648\u0645","\u064a\u0648\u0645 \u0648\u0627\u062d\u062f",["\u064a\u0648\u0645\u0627\u0646","\u064a\u0648\u0645\u064a\u0646"],"%d \u0623\u064a\u0627\u0645","%d \u064a\u0648\u0645\u064b\u0627","%d \u064a\u0648\u0645"],M:["\u0623\u0642\u0644 \u0645\u0646 \u0634\u0647\u0631","\u0634\u0647\u0631 \u0648\u0627\u062d\u062f",["\u0634\u0647\u0631\u0627\u0646","\u0634\u0647\u0631\u064a\u0646"],"%d \u0623\u0634\u0647\u0631","%d \u0634\u0647\u0631\u0627","%d \u0634\u0647\u0631"],y:["\u0623\u0642\u0644 \u0645\u0646 \u0639\u0627\u0645","\u0639\u0627\u0645 \u0648\u0627\u062d\u062f",["\u0639\u0627\u0645\u0627\u0646","\u0639\u0627\u0645\u064a\u0646"],"%d \u0623\u0639\u0648\u0627\u0645","%d \u0639\u0627\u0645\u064b\u0627","%d \u0639\u0627\u0645"]},y=["\u064a\u0646\u0627\u064a\u0631","\u0641\u0628\u0631\u0627\u064a\u0631","\u0645\u0627\u0631\u0633","\u0623\u0628\u0631\u064a\u0644","\u0645\u0627\u064a\u0648","\u064a\u0648\u0646\u064a\u0648","\u064a\u0648\u0644\u064a\u0648","\u0623\u063a\u0633\u0637\u0633","\u0633\u0628\u062a\u0645\u0628\u0631","\u0623\u0643\u062a\u0648\u0628\u0631","\u0646\u0648\u0641\u0645\u0628\u0631","\u062f\u064a\u0633\u0645\u0628\u0631"];e.defineLocale("ar",{months:y,monthsShort:y,weekdays:"\u0627\u0644\u0623\u062d\u062f_\u0627\u0644\u0625\u062b\u0646\u064a\u0646_\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621_\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621_\u0627\u0644\u062e\u0645\u064a\u0633_\u0627\u0644\u062c\u0645\u0639\u0629_\u0627\u0644\u0633\u0628\u062a".split("_"),weekdaysShort:"\u0623\u062d\u062f_\u0625\u062b\u0646\u064a\u0646_\u062b\u0644\u0627\u062b\u0627\u0621_\u0623\u0631\u0628\u0639\u0627\u0621_\u062e\u0645\u064a\u0633_\u062c\u0645\u0639\u0629_\u0633\u0628\u062a".split("_"),weekdaysMin:"\u062d_\u0646_\u062b_\u0631_\u062e_\u062c_\u0633".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"D/\u200fM/\u200fYYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},meridiemParse:/\u0635|\u0645/,isPM:function(e){return"\u0645"===e},meridiem:function(e,a,_){return e<12?"\u0635":"\u0645"},calendar:{sameDay:"[\u0627\u0644\u064a\u0648\u0645 \u0639\u0646\u062f \u0627\u0644\u0633\u0627\u0639\u0629] LT",nextDay:"[\u063a\u062f\u064b\u0627 \u0639\u0646\u062f \u0627\u0644\u0633\u0627\u0639\u0629] LT",nextWeek:"dddd [\u0639\u0646\u062f \u0627\u0644\u0633\u0627\u0639\u0629] LT",lastDay:"[\u0623\u0645\u0633 \u0639\u0646\u062f \u0627\u0644\u0633\u0627\u0639\u0629] LT",lastWeek:"dddd [\u0639\u0646\u062f \u0627\u0644\u0633\u0627\u0639\u0629] LT",sameElse:"L"},relativeTime:{future:"\u0628\u0639\u062f %s",past:"\u0645\u0646\u0630 %s",s:M("s"),ss:M("s"),m:M("m"),mm:M("m"),h:M("h"),hh:M("h"),d:M("d"),dd:M("d"),M:M("M"),MM:M("M"),y:M("y"),yy:M("y")},preparse:function(e){return e.replace(/[\u0661\u0662\u0663\u0664\u0665\u0666\u0667\u0668\u0669\u0660]/g,function(e){return Y[e]}).replace(/\u060c/g,",")},postformat:function(e){return e.replace(/\d/g,function(e){return L[e]}).replace(/,/g,"\u060c")},week:{dow:6,doy:12}});var c={1:"-inci",5:"-inci",8:"-inci",70:"-inci",80:"-inci",2:"-nci",7:"-nci",20:"-nci",50:"-nci",3:"-\xfcnc\xfc",4:"-\xfcnc\xfc",100:"-\xfcnc\xfc",6:"-nc\u0131",9:"-uncu",10:"-uncu",30:"-uncu",60:"-\u0131nc\u0131",90:"-\u0131nc\u0131"};function k(e,a,_){var s,d;return"m"===_?a?"\u0445\u0432\u0456\u043b\u0456\u043d\u0430":"\u0445\u0432\u0456\u043b\u0456\u043d\u0443":"h"===_?a?"\u0433\u0430\u0434\u0437\u0456\u043d\u0430":"\u0433\u0430\u0434\u0437\u0456\u043d\u0443":e+" "+(s=+e,d={ss:a?"\u0441\u0435\u043a\u0443\u043d\u0434\u0430_\u0441\u0435\u043a\u0443\u043d\u0434\u044b_\u0441\u0435\u043a\u0443\u043d\u0434":"\u0441\u0435\u043a\u0443\u043d\u0434\u0443_\u0441\u0435\u043a\u0443\u043d\u0434\u044b_\u0441\u0435\u043a\u0443\u043d\u0434",mm:a?"\u0445\u0432\u0456\u043b\u0456\u043d\u0430_\u0445\u0432\u0456\u043b\u0456\u043d\u044b_\u0445\u0432\u0456\u043b\u0456\u043d":"\u0445\u0432\u0456\u043b\u0456\u043d\u0443_\u0445\u0432\u0456\u043b\u0456\u043d\u044b_\u0445\u0432\u0456\u043b\u0456\u043d",hh:a?"\u0433\u0430\u0434\u0437\u0456\u043d\u0430_\u0433\u0430\u0434\u0437\u0456\u043d\u044b_\u0433\u0430\u0434\u0437\u0456\u043d":"\u0433\u0430\u0434\u0437\u0456\u043d\u0443_\u0433\u0430\u0434\u0437\u0456\u043d\u044b_\u0433\u0430\u0434\u0437\u0456\u043d",dd:"\u0434\u0437\u0435\u043d\u044c_\u0434\u043d\u0456_\u0434\u0437\u0451\u043d",MM:"\u043c\u0435\u0441\u044f\u0446_\u043c\u0435\u0441\u044f\u0446\u044b_\u043c\u0435\u0441\u044f\u0446\u0430\u045e",yy:"\u0433\u043e\u0434_\u0433\u0430\u0434\u044b_\u0433\u0430\u0434\u043e\u045e"}[_].split("_"),s%10==1&&s%100!=11?d[0]:2<=s%10&&s%10<=4&&(s%100<10||20<=s%100)?d[1]:d[2])}e.defineLocale("az",{months:"yanvar_fevral_mart_aprel_may_iyun_iyul_avqust_sentyabr_oktyabr_noyabr_dekabr".split("_"),monthsShort:"yan_fev_mar_apr_may_iyn_iyl_avq_sen_okt_noy_dek".split("_"),weekdays:"Bazar_Bazar ert\u0259si_\xc7\u0259r\u015f\u0259nb\u0259 ax\u015fam\u0131_\xc7\u0259r\u015f\u0259nb\u0259_C\xfcm\u0259 ax\u015fam\u0131_C\xfcm\u0259_\u015e\u0259nb\u0259".split("_"),weekdaysShort:"Baz_BzE_\xc7Ax_\xc7\u0259r_CAx_C\xfcm_\u015e\u0259n".split("_"),weekdaysMin:"Bz_BE_\xc7A_\xc7\u0259_CA_C\xfc_\u015e\u0259".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[bug\xfcn saat] LT",nextDay:"[sabah saat] LT",nextWeek:"[g\u0259l\u0259n h\u0259ft\u0259] dddd [saat] LT",lastDay:"[d\xfcn\u0259n] LT",lastWeek:"[ke\xe7\u0259n h\u0259ft\u0259] dddd [saat] LT",sameElse:"L"},relativeTime:{future:"%s sonra",past:"%s \u0259vv\u0259l",s:"bir ne\xe7\u0259 saniy\u0259",ss:"%d saniy\u0259",m:"bir d\u0259qiq\u0259",mm:"%d d\u0259qiq\u0259",h:"bir saat",hh:"%d saat",d:"bir g\xfcn",dd:"%d g\xfcn",M:"bir ay",MM:"%d ay",y:"bir il",yy:"%d il"},meridiemParse:/gec\u0259|s\u0259h\u0259r|g\xfcnd\xfcz|ax\u015fam/,isPM:function(e){return/^(g\xfcnd\xfcz|ax\u015fam)$/.test(e)},meridiem:function(e,a,_){return e<4?"gec\u0259":e<12?"s\u0259h\u0259r":e<17?"g\xfcnd\xfcz":"ax\u015fam"},dayOfMonthOrdinalParse:/\d{1,2}-(\u0131nc\u0131|inci|nci|\xfcnc\xfc|nc\u0131|uncu)/,ordinal:function(e){if(0===e)return e+"-\u0131nc\u0131";var a=e%10;return e+(c[a]||c[e%100-a]||c[100<=e?100:null])},week:{dow:1,doy:7}}),e.defineLocale("be",{months:{format:"\u0441\u0442\u0443\u0434\u0437\u0435\u043d\u044f_\u043b\u044e\u0442\u0430\u0433\u0430_\u0441\u0430\u043a\u0430\u0432\u0456\u043a\u0430_\u043a\u0440\u0430\u0441\u0430\u0432\u0456\u043a\u0430_\u0442\u0440\u0430\u045e\u043d\u044f_\u0447\u044d\u0440\u0432\u0435\u043d\u044f_\u043b\u0456\u043f\u0435\u043d\u044f_\u0436\u043d\u0456\u045e\u043d\u044f_\u0432\u0435\u0440\u0430\u0441\u043d\u044f_\u043a\u0430\u0441\u0442\u0440\u044b\u0447\u043d\u0456\u043a\u0430_\u043b\u0456\u0441\u0442\u0430\u043f\u0430\u0434\u0430_\u0441\u043d\u0435\u0436\u043d\u044f".split("_"),standalone:"\u0441\u0442\u0443\u0434\u0437\u0435\u043d\u044c_\u043b\u044e\u0442\u044b_\u0441\u0430\u043a\u0430\u0432\u0456\u043a_\u043a\u0440\u0430\u0441\u0430\u0432\u0456\u043a_\u0442\u0440\u0430\u0432\u0435\u043d\u044c_\u0447\u044d\u0440\u0432\u0435\u043d\u044c_\u043b\u0456\u043f\u0435\u043d\u044c_\u0436\u043d\u0456\u0432\u0435\u043d\u044c_\u0432\u0435\u0440\u0430\u0441\u0435\u043d\u044c_\u043a\u0430\u0441\u0442\u0440\u044b\u0447\u043d\u0456\u043a_\u043b\u0456\u0441\u0442\u0430\u043f\u0430\u0434_\u0441\u043d\u0435\u0436\u0430\u043d\u044c".split("_")},monthsShort:"\u0441\u0442\u0443\u0434_\u043b\u044e\u0442_\u0441\u0430\u043a_\u043a\u0440\u0430\u0441_\u0442\u0440\u0430\u0432_\u0447\u044d\u0440\u0432_\u043b\u0456\u043f_\u0436\u043d\u0456\u0432_\u0432\u0435\u0440_\u043a\u0430\u0441\u0442_\u043b\u0456\u0441\u0442_\u0441\u043d\u0435\u0436".split("_"),weekdays:{format:"\u043d\u044f\u0434\u0437\u0435\u043b\u044e_\u043f\u0430\u043d\u044f\u0434\u0437\u0435\u043b\u0430\u043a_\u0430\u045e\u0442\u043e\u0440\u0430\u043a_\u0441\u0435\u0440\u0430\u0434\u0443_\u0447\u0430\u0446\u0432\u0435\u0440_\u043f\u044f\u0442\u043d\u0456\u0446\u0443_\u0441\u0443\u0431\u043e\u0442\u0443".split("_"),standalone:"\u043d\u044f\u0434\u0437\u0435\u043b\u044f_\u043f\u0430\u043d\u044f\u0434\u0437\u0435\u043b\u0430\u043a_\u0430\u045e\u0442\u043e\u0440\u0430\u043a_\u0441\u0435\u0440\u0430\u0434\u0430_\u0447\u0430\u0446\u0432\u0435\u0440_\u043f\u044f\u0442\u043d\u0456\u0446\u0430_\u0441\u0443\u0431\u043e\u0442\u0430".split("_"),isFormat:/\[ ?[\u0423\u0443\u045e] ?(?:\u043c\u0456\u043d\u0443\u043b\u0443\u044e|\u043d\u0430\u0441\u0442\u0443\u043f\u043d\u0443\u044e)? ?\] ?dddd/},weekdaysShort:"\u043d\u0434_\u043f\u043d_\u0430\u0442_\u0441\u0440_\u0447\u0446_\u043f\u0442_\u0441\u0431".split("_"),weekdaysMin:"\u043d\u0434_\u043f\u043d_\u0430\u0442_\u0441\u0440_\u0447\u0446_\u043f\u0442_\u0441\u0431".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY \u0433.",LLL:"D MMMM YYYY \u0433., HH:mm",LLLL:"dddd, D MMMM YYYY \u0433., HH:mm"},calendar:{sameDay:"[\u0421\u0451\u043d\u043d\u044f \u045e] LT",nextDay:"[\u0417\u0430\u045e\u0442\u0440\u0430 \u045e] LT",lastDay:"[\u0423\u0447\u043e\u0440\u0430 \u045e] LT",nextWeek:function(){return"[\u0423] dddd [\u045e] LT"},lastWeek:function(){switch(this.day()){case 0:case 3:case 5:case 6:return"[\u0423 \u043c\u0456\u043d\u0443\u043b\u0443\u044e] dddd [\u045e] LT";case 1:case 2:case 4:return"[\u0423 \u043c\u0456\u043d\u0443\u043b\u044b] dddd [\u045e] LT"}},sameElse:"L"},relativeTime:{future:"\u043f\u0440\u0430\u0437 %s",past:"%s \u0442\u0430\u043c\u0443",s:"\u043d\u0435\u043a\u0430\u043b\u044c\u043a\u0456 \u0441\u0435\u043a\u0443\u043d\u0434",m:k,mm:k,h:k,hh:k,d:"\u0434\u0437\u0435\u043d\u044c",dd:k,M:"\u043c\u0435\u0441\u044f\u0446",MM:k,y:"\u0433\u043e\u0434",yy:k},meridiemParse:/\u043d\u043e\u0447\u044b|\u0440\u0430\u043d\u0456\u0446\u044b|\u0434\u043d\u044f|\u0432\u0435\u0447\u0430\u0440\u0430/,isPM:function(e){return/^(\u0434\u043d\u044f|\u0432\u0435\u0447\u0430\u0440\u0430)$/.test(e)},meridiem:function(e,a,_){return e<4?"\u043d\u043e\u0447\u044b":e<12?"\u0440\u0430\u043d\u0456\u0446\u044b":e<17?"\u0434\u043d\u044f":"\u0432\u0435\u0447\u0430\u0440\u0430"},dayOfMonthOrdinalParse:/\d{1,2}-(\u0456|\u044b|\u0433\u0430)/,ordinal:function(e,a){switch(a){case"M":case"d":case"DDD":case"w":case"W":return e%10!=2&&e%10!=3||e%100==12||e%100==13?e+"-\u044b":e+"-\u0456";case"D":return e+"-\u0433\u0430";default:return e}},week:{dow:1,doy:7}}),e.defineLocale("bg",{months:"\u044f\u043d\u0443\u0430\u0440\u0438_\u0444\u0435\u0432\u0440\u0443\u0430\u0440\u0438_\u043c\u0430\u0440\u0442_\u0430\u043f\u0440\u0438\u043b_\u043c\u0430\u0439_\u044e\u043d\u0438_\u044e\u043b\u0438_\u0430\u0432\u0433\u0443\u0441\u0442_\u0441\u0435\u043f\u0442\u0435\u043c\u0432\u0440\u0438_\u043e\u043a\u0442\u043e\u043c\u0432\u0440\u0438_\u043d\u043e\u0435\u043c\u0432\u0440\u0438_\u0434\u0435\u043a\u0435\u043c\u0432\u0440\u0438".split("_"),monthsShort:"\u044f\u043d\u0443_\u0444\u0435\u0432_\u043c\u0430\u0440_\u0430\u043f\u0440_\u043c\u0430\u0439_\u044e\u043d\u0438_\u044e\u043b\u0438_\u0430\u0432\u0433_\u0441\u0435\u043f_\u043e\u043a\u0442_\u043d\u043e\u0435_\u0434\u0435\u043a".split("_"),weekdays:"\u043d\u0435\u0434\u0435\u043b\u044f_\u043f\u043e\u043d\u0435\u0434\u0435\u043b\u043d\u0438\u043a_\u0432\u0442\u043e\u0440\u043d\u0438\u043a_\u0441\u0440\u044f\u0434\u0430_\u0447\u0435\u0442\u0432\u044a\u0440\u0442\u044a\u043a_\u043f\u0435\u0442\u044a\u043a_\u0441\u044a\u0431\u043e\u0442\u0430".split("_"),weekdaysShort:"\u043d\u0435\u0434_\u043f\u043e\u043d_\u0432\u0442\u043e_\u0441\u0440\u044f_\u0447\u0435\u0442_\u043f\u0435\u0442_\u0441\u044a\u0431".split("_"),weekdaysMin:"\u043d\u0434_\u043f\u043d_\u0432\u0442_\u0441\u0440_\u0447\u0442_\u043f\u0442_\u0441\u0431".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"D.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY H:mm",LLLL:"dddd, D MMMM YYYY H:mm"},calendar:{sameDay:"[\u0414\u043d\u0435\u0441 \u0432] LT",nextDay:"[\u0423\u0442\u0440\u0435 \u0432] LT",nextWeek:"dddd [\u0432] LT",lastDay:"[\u0412\u0447\u0435\u0440\u0430 \u0432] LT",lastWeek:function(){switch(this.day()){case 0:case 3:case 6:return"[\u041c\u0438\u043d\u0430\u043b\u0430\u0442\u0430] dddd [\u0432] LT";case 1:case 2:case 4:case 5:return"[\u041c\u0438\u043d\u0430\u043b\u0438\u044f] dddd [\u0432] LT"}},sameElse:"L"},relativeTime:{future:"\u0441\u043b\u0435\u0434 %s",past:"\u043f\u0440\u0435\u0434\u0438 %s",s:"\u043d\u044f\u043a\u043e\u043b\u043a\u043e \u0441\u0435\u043a\u0443\u043d\u0434\u0438",ss:"%d \u0441\u0435\u043a\u0443\u043d\u0434\u0438",m:"\u043c\u0438\u043d\u0443\u0442\u0430",mm:"%d \u043c\u0438\u043d\u0443\u0442\u0438",h:"\u0447\u0430\u0441",hh:"%d \u0447\u0430\u0441\u0430",d:"\u0434\u0435\u043d",dd:"%d \u0434\u0435\u043d\u0430",M:"\u043c\u0435\u0441\u0435\u0446",MM:"%d \u043c\u0435\u0441\u0435\u0446\u0430",y:"\u0433\u043e\u0434\u0438\u043d\u0430",yy:"%d \u0433\u043e\u0434\u0438\u043d\u0438"},dayOfMonthOrdinalParse:/\d{1,2}-(\u0435\u0432|\u0435\u043d|\u0442\u0438|\u0432\u0438|\u0440\u0438|\u043c\u0438)/,ordinal:function(e){var a=e%10,_=e%100;return 0===e?e+"-\u0435\u0432":0==_?e+"-\u0435\u043d":10<_&&_<20?e+"-\u0442\u0438":1==a?e+"-\u0432\u0438":2==a?e+"-\u0440\u0438":7==a||8==a?e+"-\u043c\u0438":e+"-\u0442\u0438"},week:{dow:1,doy:7}}),e.defineLocale("bm",{months:"Zanwuyekalo_Fewuruyekalo_Marisikalo_Awirilikalo_M\u025bkalo_Zuw\u025bnkalo_Zuluyekalo_Utikalo_S\u025btanburukalo_\u0254kut\u0254burukalo_Nowanburukalo_Desanburukalo".split("_"),monthsShort:"Zan_Few_Mar_Awi_M\u025b_Zuw_Zul_Uti_S\u025bt_\u0254ku_Now_Des".split("_"),weekdays:"Kari_Nt\u025bn\u025bn_Tarata_Araba_Alamisa_Juma_Sibiri".split("_"),weekdaysShort:"Kar_Nt\u025b_Tar_Ara_Ala_Jum_Sib".split("_"),weekdaysMin:"Ka_Nt_Ta_Ar_Al_Ju_Si".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"MMMM [tile] D [san] YYYY",LLL:"MMMM [tile] D [san] YYYY [l\u025br\u025b] HH:mm",LLLL:"dddd MMMM [tile] D [san] YYYY [l\u025br\u025b] HH:mm"},calendar:{sameDay:"[Bi l\u025br\u025b] LT",nextDay:"[Sini l\u025br\u025b] LT",nextWeek:"dddd [don l\u025br\u025b] LT",lastDay:"[Kunu l\u025br\u025b] LT",lastWeek:"dddd [t\u025bm\u025bnen l\u025br\u025b] LT",sameElse:"L"},relativeTime:{future:"%s k\u0254n\u0254",past:"a b\u025b %s b\u0254",s:"sanga dama dama",ss:"sekondi %d",m:"miniti kelen",mm:"miniti %d",h:"l\u025br\u025b kelen",hh:"l\u025br\u025b %d",d:"tile kelen",dd:"tile %d",M:"kalo kelen",MM:"kalo %d",y:"san kelen",yy:"san %d"},week:{dow:1,doy:4}});var D={1:"\u09e7",2:"\u09e8",3:"\u09e9",4:"\u09ea",5:"\u09eb",6:"\u09ec",7:"\u09ed",8:"\u09ee",9:"\u09ef",0:"\u09e6"},p={"\u09e7":"1","\u09e8":"2","\u09e9":"3","\u09ea":"4","\u09eb":"5","\u09ec":"6","\u09ed":"7","\u09ee":"8","\u09ef":"9","\u09e6":"0"};e.defineLocale("bn",{months:"\u099c\u09be\u09a8\u09c1\u09df\u09be\u09b0\u09bf_\u09ab\u09c7\u09ac\u09cd\u09b0\u09c1\u09df\u09be\u09b0\u09bf_\u09ae\u09be\u09b0\u09cd\u099a_\u098f\u09aa\u09cd\u09b0\u09bf\u09b2_\u09ae\u09c7_\u099c\u09c1\u09a8_\u099c\u09c1\u09b2\u09be\u0987_\u0986\u0997\u09b8\u09cd\u099f_\u09b8\u09c7\u09aa\u09cd\u099f\u09c7\u09ae\u09cd\u09ac\u09b0_\u0985\u0995\u09cd\u099f\u09cb\u09ac\u09b0_\u09a8\u09ad\u09c7\u09ae\u09cd\u09ac\u09b0_\u09a1\u09bf\u09b8\u09c7\u09ae\u09cd\u09ac\u09b0".split("_"),monthsShort:"\u099c\u09be\u09a8\u09c1_\u09ab\u09c7\u09ac\u09cd\u09b0\u09c1_\u09ae\u09be\u09b0\u09cd\u099a_\u098f\u09aa\u09cd\u09b0\u09bf\u09b2_\u09ae\u09c7_\u099c\u09c1\u09a8_\u099c\u09c1\u09b2\u09be\u0987_\u0986\u0997\u09b8\u09cd\u099f_\u09b8\u09c7\u09aa\u09cd\u099f_\u0985\u0995\u09cd\u099f\u09cb_\u09a8\u09ad\u09c7_\u09a1\u09bf\u09b8\u09c7".split("_"),weekdays:"\u09b0\u09ac\u09bf\u09ac\u09be\u09b0_\u09b8\u09cb\u09ae\u09ac\u09be\u09b0_\u09ae\u0999\u09cd\u0997\u09b2\u09ac\u09be\u09b0_\u09ac\u09c1\u09a7\u09ac\u09be\u09b0_\u09ac\u09c3\u09b9\u09b8\u09cd\u09aa\u09a4\u09bf\u09ac\u09be\u09b0_\u09b6\u09c1\u0995\u09cd\u09b0\u09ac\u09be\u09b0_\u09b6\u09a8\u09bf\u09ac\u09be\u09b0".split("_"),weekdaysShort:"\u09b0\u09ac\u09bf_\u09b8\u09cb\u09ae_\u09ae\u0999\u09cd\u0997\u09b2_\u09ac\u09c1\u09a7_\u09ac\u09c3\u09b9\u09b8\u09cd\u09aa\u09a4\u09bf_\u09b6\u09c1\u0995\u09cd\u09b0_\u09b6\u09a8\u09bf".split("_"),weekdaysMin:"\u09b0\u09ac\u09bf_\u09b8\u09cb\u09ae_\u09ae\u0999\u09cd\u0997\u09b2_\u09ac\u09c1\u09a7_\u09ac\u09c3\u09b9_\u09b6\u09c1\u0995\u09cd\u09b0_\u09b6\u09a8\u09bf".split("_"),longDateFormat:{LT:"A h:mm \u09b8\u09ae\u09df",LTS:"A h:mm:ss \u09b8\u09ae\u09df",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm \u09b8\u09ae\u09df",LLLL:"dddd, D MMMM YYYY, A h:mm \u09b8\u09ae\u09df"},calendar:{sameDay:"[\u0986\u099c] LT",nextDay:"[\u0986\u0997\u09be\u09ae\u09c0\u0995\u09be\u09b2] LT",nextWeek:"dddd, LT",lastDay:"[\u0997\u09a4\u0995\u09be\u09b2] LT",lastWeek:"[\u0997\u09a4] dddd, LT",sameElse:"L"},relativeTime:{future:"%s \u09aa\u09b0\u09c7",past:"%s \u0986\u0997\u09c7",s:"\u0995\u09df\u09c7\u0995 \u09b8\u09c7\u0995\u09c7\u09a8\u09cd\u09a1",ss:"%d \u09b8\u09c7\u0995\u09c7\u09a8\u09cd\u09a1",m:"\u098f\u0995 \u09ae\u09bf\u09a8\u09bf\u099f",mm:"%d \u09ae\u09bf\u09a8\u09bf\u099f",h:"\u098f\u0995 \u0998\u09a8\u09cd\u099f\u09be",hh:"%d \u0998\u09a8\u09cd\u099f\u09be",d:"\u098f\u0995 \u09a6\u09bf\u09a8",dd:"%d \u09a6\u09bf\u09a8",M:"\u098f\u0995 \u09ae\u09be\u09b8",MM:"%d \u09ae\u09be\u09b8",y:"\u098f\u0995 \u09ac\u099b\u09b0",yy:"%d \u09ac\u099b\u09b0"},preparse:function(e){return e.replace(/[\u09e7\u09e8\u09e9\u09ea\u09eb\u09ec\u09ed\u09ee\u09ef\u09e6]/g,function(e){return p[e]})},postformat:function(e){return e.replace(/\d/g,function(e){return D[e]})},meridiemParse:/\u09b0\u09be\u09a4|\u09b8\u0995\u09be\u09b2|\u09a6\u09c1\u09aa\u09c1\u09b0|\u09ac\u09bf\u0995\u09be\u09b2|\u09b0\u09be\u09a4/,meridiemHour:function(e,a){return 12===e&&(e=0),"\u09b0\u09be\u09a4"===a&&4<=e||"\u09a6\u09c1\u09aa\u09c1\u09b0"===a&&e<5||"\u09ac\u09bf\u0995\u09be\u09b2"===a?e+12:e},meridiem:function(e,a,_){return e<4?"\u09b0\u09be\u09a4":e<10?"\u09b8\u0995\u09be\u09b2":e<17?"\u09a6\u09c1\u09aa\u09c1\u09b0":e<20?"\u09ac\u09bf\u0995\u09be\u09b2":"\u09b0\u09be\u09a4"},week:{dow:0,doy:6}});var T={1:"\u0f21",2:"\u0f22",3:"\u0f23",4:"\u0f24",5:"\u0f25",6:"\u0f26",7:"\u0f27",8:"\u0f28",9:"\u0f29",0:"\u0f20"},f={"\u0f21":"1","\u0f22":"2","\u0f23":"3","\u0f24":"4","\u0f25":"5","\u0f26":"6","\u0f27":"7","\u0f28":"8","\u0f29":"9","\u0f20":"0"};function g(e,a,_){var s;return e+" "+(s={mm:"munutenn",MM:"miz",dd:"devezh"}[_],2!==e?s:function(e){var a={m:"v",b:"v",d:"z"};return void 0!==a[e.charAt(0)]?a[e.charAt(0)]+e.substring(1):e}(s))}e.defineLocale("bo",{months:"\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f51\u0f44\u0f0b\u0f54\u0f7c_\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f42\u0f49\u0f72\u0f66\u0f0b\u0f54_\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f42\u0f66\u0f74\u0f58\u0f0b\u0f54_\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f56\u0f5e\u0f72\u0f0b\u0f54_\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f63\u0f94\u0f0b\u0f54_\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f51\u0fb2\u0f74\u0f42\u0f0b\u0f54_\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f56\u0f51\u0f74\u0f53\u0f0b\u0f54_\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f56\u0f62\u0f92\u0fb1\u0f51\u0f0b\u0f54_\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f51\u0f42\u0f74\u0f0b\u0f54_\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f56\u0f45\u0f74\u0f0b\u0f54_\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f56\u0f45\u0f74\u0f0b\u0f42\u0f45\u0f72\u0f42\u0f0b\u0f54_\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f56\u0f45\u0f74\u0f0b\u0f42\u0f49\u0f72\u0f66\u0f0b\u0f54".split("_"),monthsShort:"\u0f5f\u0fb3\u0f0b1_\u0f5f\u0fb3\u0f0b2_\u0f5f\u0fb3\u0f0b3_\u0f5f\u0fb3\u0f0b4_\u0f5f\u0fb3\u0f0b5_\u0f5f\u0fb3\u0f0b6_\u0f5f\u0fb3\u0f0b7_\u0f5f\u0fb3\u0f0b8_\u0f5f\u0fb3\u0f0b9_\u0f5f\u0fb3\u0f0b10_\u0f5f\u0fb3\u0f0b11_\u0f5f\u0fb3\u0f0b12".split("_"),monthsShortRegex:/^(\u0f5f\u0fb3\u0f0b\d{1,2})/,monthsParseExact:!0,weekdays:"\u0f42\u0f5f\u0f60\u0f0b\u0f49\u0f72\u0f0b\u0f58\u0f0b_\u0f42\u0f5f\u0f60\u0f0b\u0f5f\u0fb3\u0f0b\u0f56\u0f0b_\u0f42\u0f5f\u0f60\u0f0b\u0f58\u0f72\u0f42\u0f0b\u0f51\u0f58\u0f62\u0f0b_\u0f42\u0f5f\u0f60\u0f0b\u0f63\u0fb7\u0f42\u0f0b\u0f54\u0f0b_\u0f42\u0f5f\u0f60\u0f0b\u0f55\u0f74\u0f62\u0f0b\u0f56\u0f74_\u0f42\u0f5f\u0f60\u0f0b\u0f54\u0f0b\u0f66\u0f44\u0f66\u0f0b_\u0f42\u0f5f\u0f60\u0f0b\u0f66\u0fa4\u0f7a\u0f53\u0f0b\u0f54\u0f0b".split("_"),weekdaysShort:"\u0f49\u0f72\u0f0b\u0f58\u0f0b_\u0f5f\u0fb3\u0f0b\u0f56\u0f0b_\u0f58\u0f72\u0f42\u0f0b\u0f51\u0f58\u0f62\u0f0b_\u0f63\u0fb7\u0f42\u0f0b\u0f54\u0f0b_\u0f55\u0f74\u0f62\u0f0b\u0f56\u0f74_\u0f54\u0f0b\u0f66\u0f44\u0f66\u0f0b_\u0f66\u0fa4\u0f7a\u0f53\u0f0b\u0f54\u0f0b".split("_"),weekdaysMin:"\u0f49\u0f72_\u0f5f\u0fb3_\u0f58\u0f72\u0f42_\u0f63\u0fb7\u0f42_\u0f55\u0f74\u0f62_\u0f66\u0f44\u0f66_\u0f66\u0fa4\u0f7a\u0f53".split("_"),longDateFormat:{LT:"A h:mm",LTS:"A h:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm",LLLL:"dddd, D MMMM YYYY, A h:mm"},calendar:{sameDay:"[\u0f51\u0f72\u0f0b\u0f62\u0f72\u0f44] LT",nextDay:"[\u0f66\u0f44\u0f0b\u0f49\u0f72\u0f53] LT",nextWeek:"[\u0f56\u0f51\u0f74\u0f53\u0f0b\u0f55\u0fb2\u0f42\u0f0b\u0f62\u0f97\u0f7a\u0f66\u0f0b\u0f58], LT",lastDay:"[\u0f41\u0f0b\u0f66\u0f44] LT",lastWeek:"[\u0f56\u0f51\u0f74\u0f53\u0f0b\u0f55\u0fb2\u0f42\u0f0b\u0f58\u0f50\u0f60\u0f0b\u0f58] dddd, LT",sameElse:"L"},relativeTime:{future:"%s \u0f63\u0f0b",past:"%s \u0f66\u0f94\u0f53\u0f0b\u0f63",s:"\u0f63\u0f58\u0f0b\u0f66\u0f44",ss:"%d \u0f66\u0f90\u0f62\u0f0b\u0f46\u0f0d",m:"\u0f66\u0f90\u0f62\u0f0b\u0f58\u0f0b\u0f42\u0f45\u0f72\u0f42",mm:"%d \u0f66\u0f90\u0f62\u0f0b\u0f58",h:"\u0f46\u0f74\u0f0b\u0f5a\u0f7c\u0f51\u0f0b\u0f42\u0f45\u0f72\u0f42",hh:"%d \u0f46\u0f74\u0f0b\u0f5a\u0f7c\u0f51",d:"\u0f49\u0f72\u0f53\u0f0b\u0f42\u0f45\u0f72\u0f42",dd:"%d \u0f49\u0f72\u0f53\u0f0b",M:"\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f42\u0f45\u0f72\u0f42",MM:"%d \u0f5f\u0fb3\u0f0b\u0f56",y:"\u0f63\u0f7c\u0f0b\u0f42\u0f45\u0f72\u0f42",yy:"%d \u0f63\u0f7c"},preparse:function(e){return e.replace(/[\u0f21\u0f22\u0f23\u0f24\u0f25\u0f26\u0f27\u0f28\u0f29\u0f20]/g,function(e){return f[e]})},postformat:function(e){return e.replace(/\d/g,function(e){return T[e]})},meridiemParse:/\u0f58\u0f5a\u0f53\u0f0b\u0f58\u0f7c|\u0f5e\u0f7c\u0f42\u0f66\u0f0b\u0f40\u0f66|\u0f49\u0f72\u0f53\u0f0b\u0f42\u0f74\u0f44|\u0f51\u0f42\u0f7c\u0f44\u0f0b\u0f51\u0f42|\u0f58\u0f5a\u0f53\u0f0b\u0f58\u0f7c/,meridiemHour:function(e,a){return 12===e&&(e=0),"\u0f58\u0f5a\u0f53\u0f0b\u0f58\u0f7c"===a&&4<=e||"\u0f49\u0f72\u0f53\u0f0b\u0f42\u0f74\u0f44"===a&&e<5||"\u0f51\u0f42\u0f7c\u0f44\u0f0b\u0f51\u0f42"===a?e+12:e},meridiem:function(e,a,_){return e<4?"\u0f58\u0f5a\u0f53\u0f0b\u0f58\u0f7c":e<10?"\u0f5e\u0f7c\u0f42\u0f66\u0f0b\u0f40\u0f66":e<17?"\u0f49\u0f72\u0f53\u0f0b\u0f42\u0f74\u0f44":e<20?"\u0f51\u0f42\u0f7c\u0f44\u0f0b\u0f51\u0f42":"\u0f58\u0f5a\u0f53\u0f0b\u0f58\u0f7c"},week:{dow:0,doy:6}});var w=[/^gen/i,/^c[\u02bc\']hwe/i,/^meu/i,/^ebr/i,/^mae/i,/^(mez|eve)/i,/^gou/i,/^eos/i,/^gwe/i,/^her/i,/^du/i,/^ker/i],H=/^(genver|c[\u02bc\']hwevrer|meurzh|ebrel|mae|mezheven|gouere|eost|gwengolo|here|du|kerzu|gen|c[\u02bc\']hwe|meu|ebr|mae|eve|gou|eos|gwe|her|du|ker)/i,b=[/^Su/i,/^Lu/i,/^Me([^r]|$)/i,/^Mer/i,/^Ya/i,/^Gw/i,/^Sa/i];function v(e,a,_){var s=e+" ";switch(_){case"ss":return s+=1===e?"sekunda":2===e||3===e||4===e?"sekunde":"sekundi";case"m":return a?"jedna minuta":"jedne minute";case"mm":return s+=1!==e&&(2===e||3===e||4===e)?"minute":"minuta";case"h":return a?"jedan sat":"jednog sata";case"hh":return s+=1===e?"sat":2===e||3===e||4===e?"sata":"sati";case"dd":return s+=1===e?"dan":"dana";case"MM":return s+=1===e?"mjesec":2===e||3===e||4===e?"mjeseca":"mjeseci";case"yy":return s+=1!==e&&(2===e||3===e||4===e)?"godine":"godina"}}e.defineLocale("br",{months:"Genver_C\u02bchwevrer_Meurzh_Ebrel_Mae_Mezheven_Gouere_Eost_Gwengolo_Here_Du_Kerzu".split("_"),monthsShort:"Gen_C\u02bchwe_Meu_Ebr_Mae_Eve_Gou_Eos_Gwe_Her_Du_Ker".split("_"),weekdays:"Sul_Lun_Meurzh_Merc\u02bcher_Yaou_Gwener_Sadorn".split("_"),weekdaysShort:"Sul_Lun_Meu_Mer_Yao_Gwe_Sad".split("_"),weekdaysMin:"Su_Lu_Me_Mer_Ya_Gw_Sa".split("_"),weekdaysParse:b,fullWeekdaysParse:[/^sul/i,/^lun/i,/^meurzh/i,/^merc[\u02bc\']her/i,/^yaou/i,/^gwener/i,/^sadorn/i],shortWeekdaysParse:[/^Sul/i,/^Lun/i,/^Meu/i,/^Mer/i,/^Yao/i,/^Gwe/i,/^Sad/i],minWeekdaysParse:b,monthsRegex:H,monthsShortRegex:H,monthsStrictRegex:/^(genver|c[\u02bc\']hwevrer|meurzh|ebrel|mae|mezheven|gouere|eost|gwengolo|here|du|kerzu)/i,monthsShortStrictRegex:/^(gen|c[\u02bc\']hwe|meu|ebr|mae|eve|gou|eos|gwe|her|du|ker)/i,monthsParse:w,longMonthsParse:w,shortMonthsParse:w,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D [a viz] MMMM YYYY",LLL:"D [a viz] MMMM YYYY HH:mm",LLLL:"dddd, D [a viz] MMMM YYYY HH:mm"},calendar:{sameDay:"[Hiziv da] LT",nextDay:"[Warc\u02bchoazh da] LT",nextWeek:"dddd [da] LT",lastDay:"[Dec\u02bch da] LT",lastWeek:"dddd [paset da] LT",sameElse:"L"},relativeTime:{future:"a-benn %s",past:"%s \u02bczo",s:"un nebeud segondenno\xf9",ss:"%d eilenn",m:"ur vunutenn",mm:g,h:"un eur",hh:"%d eur",d:"un devezh",dd:g,M:"ur miz",MM:g,y:"ur bloaz",yy:function(e){switch(function e(a){if(9<a)return e(a%10);return a}(e)){case 1:case 3:case 4:case 5:case 9:return e+" bloaz";default:return e+" vloaz"}}},dayOfMonthOrdinalParse:/\d{1,2}(a\xf1|vet)/,ordinal:function(e){return e+(1===e?"a\xf1":"vet")},week:{dow:1,doy:4},meridiemParse:/a.m.|g.m./,isPM:function(e){return"g.m."===e},meridiem:function(e,a,_){return e<12?"a.m.":"g.m."}}),e.defineLocale("bs",{months:"januar_februar_mart_april_maj_juni_juli_august_septembar_oktobar_novembar_decembar".split("_"),monthsShort:"jan._feb._mar._apr._maj._jun._jul._aug._sep._okt._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"nedjelja_ponedjeljak_utorak_srijeda_\u010detvrtak_petak_subota".split("_"),weekdaysShort:"ned._pon._uto._sri._\u010det._pet._sub.".split("_"),weekdaysMin:"ne_po_ut_sr_\u010de_pe_su".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[danas u] LT",nextDay:"[sutra u] LT",nextWeek:function(){switch(this.day()){case 0:return"[u] [nedjelju] [u] LT";case 3:return"[u] [srijedu] [u] LT";case 6:return"[u] [subotu] [u] LT";case 1:case 2:case 4:case 5:return"[u] dddd [u] LT"}},lastDay:"[ju\u010der u] LT",lastWeek:function(){switch(this.day()){case 0:case 3:return"[pro\u0161lu] dddd [u] LT";case 6:return"[pro\u0161le] [subote] [u] LT";case 1:case 2:case 4:case 5:return"[pro\u0161li] dddd [u] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"prije %s",s:"par sekundi",ss:v,m:v,mm:v,h:v,hh:v,d:"dan",dd:v,M:"mjesec",MM:v,y:"godinu",yy:v},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}}),e.defineLocale("ca",{months:{standalone:"gener_febrer_mar\xe7_abril_maig_juny_juliol_agost_setembre_octubre_novembre_desembre".split("_"),format:"de gener_de febrer_de mar\xe7_d'abril_de maig_de juny_de juliol_d'agost_de setembre_d'octubre_de novembre_de desembre".split("_"),isFormat:/D[oD]?(\s)+MMMM/},monthsShort:"gen._febr._mar\xe7_abr._maig_juny_jul._ag._set._oct._nov._des.".split("_"),monthsParseExact:!0,weekdays:"diumenge_dilluns_dimarts_dimecres_dijous_divendres_dissabte".split("_"),weekdaysShort:"dg._dl._dt._dc._dj._dv._ds.".split("_"),weekdaysMin:"dg_dl_dt_dc_dj_dv_ds".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM [de] YYYY",ll:"D MMM YYYY",LLL:"D MMMM [de] YYYY [a les] H:mm",lll:"D MMM YYYY, H:mm",LLLL:"dddd D MMMM [de] YYYY [a les] H:mm",llll:"ddd D MMM YYYY, H:mm"},calendar:{sameDay:function(){return"[avui a "+(1!==this.hours()?"les":"la")+"] LT"},nextDay:function(){return"[dem\xe0 a "+(1!==this.hours()?"les":"la")+"] LT"},nextWeek:function(){return"dddd [a "+(1!==this.hours()?"les":"la")+"] LT"},lastDay:function(){return"[ahir a "+(1!==this.hours()?"les":"la")+"] LT"},lastWeek:function(){return"[el] dddd [passat a "+(1!==this.hours()?"les":"la")+"] LT"},sameElse:"L"},relativeTime:{future:"d'aqu\xed %s",past:"fa %s",s:"uns segons",ss:"%d segons",m:"un minut",mm:"%d minuts",h:"una hora",hh:"%d hores",d:"un dia",dd:"%d dies",M:"un mes",MM:"%d mesos",y:"un any",yy:"%d anys"},dayOfMonthOrdinalParse:/\d{1,2}(r|n|t|\xe8|a)/,ordinal:function(e,a){return e+("w"!==a&&"W"!==a?1===e?"r":2===e?"n":3===e?"r":4===e?"t":"\xe8":"a")},week:{dow:1,doy:4}});var S="leden_\xfanor_b\u0159ezen_duben_kv\u011bten_\u010derven_\u010dervenec_srpen_z\xe1\u0159\xed_\u0159\xedjen_listopad_prosinec".split("_"),j="led_\xfano_b\u0159e_dub_kv\u011b_\u010dvn_\u010dvc_srp_z\xe1\u0159_\u0159\xedj_lis_pro".split("_"),x=[/^led/i,/^\xfano/i,/^b\u0159e/i,/^dub/i,/^kv\u011b/i,/^(\u010dvn|\u010derven$|\u010dervna)/i,/^(\u010dvc|\u010dervenec|\u010dervence)/i,/^srp/i,/^z\xe1\u0159/i,/^\u0159\xedj/i,/^lis/i,/^pro/i],P=/^(leden|\xfanor|b\u0159ezen|duben|kv\u011bten|\u010dervenec|\u010dervence|\u010derven|\u010dervna|srpen|z\xe1\u0159\xed|\u0159\xedjen|listopad|prosinec|led|\xfano|b\u0159e|dub|kv\u011b|\u010dvn|\u010dvc|srp|z\xe1\u0159|\u0159\xedj|lis|pro)/i;function W(e){return 1<e&&e<5&&1!=~~(e/10)}function A(e,a,_,s){var d=e+" ";switch(_){case"s":return a||s?"p\xe1r sekund":"p\xe1r sekundami";case"ss":return a||s?d+(W(e)?"sekundy":"sekund"):d+"sekundami";case"m":return a?"minuta":s?"minutu":"minutou";case"mm":return a||s?d+(W(e)?"minuty":"minut"):d+"minutami";case"h":return a?"hodina":s?"hodinu":"hodinou";case"hh":return a||s?d+(W(e)?"hodiny":"hodin"):d+"hodinami";case"d":return a||s?"den":"dnem";case"dd":return a||s?d+(W(e)?"dny":"dn\xed"):d+"dny";case"M":return a||s?"m\u011bs\xedc":"m\u011bs\xedcem";case"MM":return a||s?d+(W(e)?"m\u011bs\xedce":"m\u011bs\xedc\u016f"):d+"m\u011bs\xedci";case"y":return a||s?"rok":"rokem";case"yy":return a||s?d+(W(e)?"roky":"let"):d+"lety"}}function O(e,a,_,s){var d={m:["eine Minute","einer Minute"],h:["eine Stunde","einer Stunde"],d:["ein Tag","einem Tag"],dd:[e+" Tage",e+" Tagen"],w:["eine Woche","einer Woche"],M:["ein Monat","einem Monat"],MM:[e+" Monate",e+" Monaten"],y:["ein Jahr","einem Jahr"],yy:[e+" Jahre",e+" Jahren"]};return a?d[_][0]:d[_][1]}function E(e,a,_,s){var d={m:["eine Minute","einer Minute"],h:["eine Stunde","einer Stunde"],d:["ein Tag","einem Tag"],dd:[e+" Tage",e+" Tagen"],w:["eine Woche","einer Woche"],M:["ein Monat","einem Monat"],MM:[e+" Monate",e+" Monaten"],y:["ein Jahr","einem Jahr"],yy:[e+" Jahre",e+" Jahren"]};return a?d[_][0]:d[_][1]}function F(e,a,_,s){var d={m:["eine Minute","einer Minute"],h:["eine Stunde","einer Stunde"],d:["ein Tag","einem Tag"],dd:[e+" Tage",e+" Tagen"],w:["eine Woche","einer Woche"],M:["ein Monat","einem Monat"],MM:[e+" Monate",e+" Monaten"],y:["ein Jahr","einem Jahr"],yy:[e+" Jahre",e+" Jahren"]};return a?d[_][0]:d[_][1]}e.defineLocale("cs",{months:S,monthsShort:j,monthsRegex:P,monthsShortRegex:P,monthsStrictRegex:/^(leden|ledna|\xfanora|\xfanor|b\u0159ezen|b\u0159ezna|duben|dubna|kv\u011bten|kv\u011btna|\u010dervenec|\u010dervence|\u010derven|\u010dervna|srpen|srpna|z\xe1\u0159\xed|\u0159\xedjen|\u0159\xedjna|listopadu|listopad|prosinec|prosince)/i,monthsShortStrictRegex:/^(led|\xfano|b\u0159e|dub|kv\u011b|\u010dvn|\u010dvc|srp|z\xe1\u0159|\u0159\xedj|lis|pro)/i,monthsParse:x,longMonthsParse:x,shortMonthsParse:x,weekdays:"ned\u011ble_pond\u011bl\xed_\xfater\xfd_st\u0159eda_\u010dtvrtek_p\xe1tek_sobota".split("_"),weekdaysShort:"ne_po_\xfat_st_\u010dt_p\xe1_so".split("_"),weekdaysMin:"ne_po_\xfat_st_\u010dt_p\xe1_so".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd D. MMMM YYYY H:mm",l:"D. M. YYYY"},calendar:{sameDay:"[dnes v] LT",nextDay:"[z\xedtra v] LT",nextWeek:function(){switch(this.day()){case 0:return"[v ned\u011bli v] LT";case 1:case 2:return"[v] dddd [v] LT";case 3:return"[ve st\u0159edu v] LT";case 4:return"[ve \u010dtvrtek v] LT";case 5:return"[v p\xe1tek v] LT";case 6:return"[v sobotu v] LT"}},lastDay:"[v\u010dera v] LT",lastWeek:function(){switch(this.day()){case 0:return"[minulou ned\u011bli v] LT";case 1:case 2:return"[minul\xe9] dddd [v] LT";case 3:return"[minulou st\u0159edu v] LT";case 4:case 5:return"[minul\xfd] dddd [v] LT";case 6:return"[minulou sobotu v] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"p\u0159ed %s",s:A,ss:A,m:A,mm:A,h:A,hh:A,d:A,dd:A,M:A,MM:A,y:A,yy:A},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}}),e.defineLocale("cv",{months:"\u043a\u04d1\u0440\u043b\u0430\u0447_\u043d\u0430\u0440\u04d1\u0441_\u043f\u0443\u0448_\u0430\u043a\u0430_\u043c\u0430\u0439_\u04ab\u04d7\u0440\u0442\u043c\u0435_\u0443\u0442\u04d1_\u04ab\u0443\u0440\u043b\u0430_\u0430\u0432\u04d1\u043d_\u044e\u043f\u0430_\u0447\u04f3\u043a_\u0440\u0430\u0448\u0442\u0430\u0432".split("_"),monthsShort:"\u043a\u04d1\u0440_\u043d\u0430\u0440_\u043f\u0443\u0448_\u0430\u043a\u0430_\u043c\u0430\u0439_\u04ab\u04d7\u0440_\u0443\u0442\u04d1_\u04ab\u0443\u0440_\u0430\u0432\u043d_\u044e\u043f\u0430_\u0447\u04f3\u043a_\u0440\u0430\u0448".split("_"),weekdays:"\u0432\u044b\u0440\u0441\u0430\u0440\u043d\u0438\u043a\u0443\u043d_\u0442\u0443\u043d\u0442\u0438\u043a\u0443\u043d_\u044b\u0442\u043b\u0430\u0440\u0438\u043a\u0443\u043d_\u044e\u043d\u043a\u0443\u043d_\u043a\u04d7\u04ab\u043d\u0435\u0440\u043d\u0438\u043a\u0443\u043d_\u044d\u0440\u043d\u0435\u043a\u0443\u043d_\u0448\u04d1\u043c\u0430\u0442\u043a\u0443\u043d".split("_"),weekdaysShort:"\u0432\u044b\u0440_\u0442\u0443\u043d_\u044b\u0442\u043b_\u044e\u043d_\u043a\u04d7\u04ab_\u044d\u0440\u043d_\u0448\u04d1\u043c".split("_"),weekdaysMin:"\u0432\u0440_\u0442\u043d_\u044b\u0442_\u044e\u043d_\u043a\u04ab_\u044d\u0440_\u0448\u043c".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD-MM-YYYY",LL:"YYYY [\u04ab\u0443\u043b\u0445\u0438] MMMM [\u0443\u0439\u04d1\u0445\u04d7\u043d] D[-\u043c\u04d7\u0448\u04d7]",LLL:"YYYY [\u04ab\u0443\u043b\u0445\u0438] MMMM [\u0443\u0439\u04d1\u0445\u04d7\u043d] D[-\u043c\u04d7\u0448\u04d7], HH:mm",LLLL:"dddd, YYYY [\u04ab\u0443\u043b\u0445\u0438] MMMM [\u0443\u0439\u04d1\u0445\u04d7\u043d] D[-\u043c\u04d7\u0448\u04d7], HH:mm"},calendar:{sameDay:"[\u041f\u0430\u044f\u043d] LT [\u0441\u0435\u0445\u0435\u0442\u0440\u0435]",nextDay:"[\u042b\u0440\u0430\u043d] LT [\u0441\u0435\u0445\u0435\u0442\u0440\u0435]",lastDay:"[\u04d6\u043d\u0435\u0440] LT [\u0441\u0435\u0445\u0435\u0442\u0440\u0435]",nextWeek:"[\u04aa\u0438\u0442\u0435\u0441] dddd LT [\u0441\u0435\u0445\u0435\u0442\u0440\u0435]",lastWeek:"[\u0418\u0440\u0442\u043d\u04d7] dddd LT [\u0441\u0435\u0445\u0435\u0442\u0440\u0435]",sameElse:"L"},relativeTime:{future:function(e){return e+(/\u0441\u0435\u0445\u0435\u0442$/i.exec(e)?"\u0440\u0435\u043d":/\u04ab\u0443\u043b$/i.exec(e)?"\u0442\u0430\u043d":"\u0440\u0430\u043d")},past:"%s \u043a\u0430\u044f\u043b\u043b\u0430",s:"\u043f\u04d7\u0440-\u0438\u043a \u04ab\u0435\u043a\u043a\u0443\u043d\u0442",ss:"%d \u04ab\u0435\u043a\u043a\u0443\u043d\u0442",m:"\u043f\u04d7\u0440 \u043c\u0438\u043d\u0443\u0442",mm:"%d \u043c\u0438\u043d\u0443\u0442",h:"\u043f\u04d7\u0440 \u0441\u0435\u0445\u0435\u0442",hh:"%d \u0441\u0435\u0445\u0435\u0442",d:"\u043f\u04d7\u0440 \u043a\u0443\u043d",dd:"%d \u043a\u0443\u043d",M:"\u043f\u04d7\u0440 \u0443\u0439\u04d1\u0445",MM:"%d \u0443\u0439\u04d1\u0445",y:"\u043f\u04d7\u0440 \u04ab\u0443\u043b",yy:"%d \u04ab\u0443\u043b"},dayOfMonthOrdinalParse:/\d{1,2}-\u043c\u04d7\u0448/,ordinal:"%d-\u043c\u04d7\u0448",week:{dow:1,doy:7}}),e.defineLocale("cy",{months:"Ionawr_Chwefror_Mawrth_Ebrill_Mai_Mehefin_Gorffennaf_Awst_Medi_Hydref_Tachwedd_Rhagfyr".split("_"),monthsShort:"Ion_Chwe_Maw_Ebr_Mai_Meh_Gor_Aws_Med_Hyd_Tach_Rhag".split("_"),weekdays:"Dydd Sul_Dydd Llun_Dydd Mawrth_Dydd Mercher_Dydd Iau_Dydd Gwener_Dydd Sadwrn".split("_"),weekdaysShort:"Sul_Llun_Maw_Mer_Iau_Gwe_Sad".split("_"),weekdaysMin:"Su_Ll_Ma_Me_Ia_Gw_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Heddiw am] LT",nextDay:"[Yfory am] LT",nextWeek:"dddd [am] LT",lastDay:"[Ddoe am] LT",lastWeek:"dddd [diwethaf am] LT",sameElse:"L"},relativeTime:{future:"mewn %s",past:"%s yn \xf4l",s:"ychydig eiliadau",ss:"%d eiliad",m:"munud",mm:"%d munud",h:"awr",hh:"%d awr",d:"diwrnod",dd:"%d diwrnod",M:"mis",MM:"%d mis",y:"blwyddyn",yy:"%d flynedd"},dayOfMonthOrdinalParse:/\d{1,2}(fed|ain|af|il|ydd|ed|eg)/,ordinal:function(e){var a="";return 20<e?a=40===e||50===e||60===e||80===e||100===e?"fed":"ain":0<e&&(a=["","af","il","ydd","ydd","ed","ed","ed","fed","fed","fed","eg","fed","eg","eg","fed","eg","eg","fed","eg","fed"][e]),e+a},week:{dow:1,doy:4}}),e.defineLocale("da",{months:"januar_februar_marts_april_maj_juni_juli_august_september_oktober_november_december".split("_"),monthsShort:"jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec".split("_"),weekdays:"s\xf8ndag_mandag_tirsdag_onsdag_torsdag_fredag_l\xf8rdag".split("_"),weekdaysShort:"s\xf8n_man_tir_ons_tor_fre_l\xf8r".split("_"),weekdaysMin:"s\xf8_ma_ti_on_to_fr_l\xf8".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY HH:mm",LLLL:"dddd [d.] D. MMMM YYYY [kl.] HH:mm"},calendar:{sameDay:"[i dag kl.] LT",nextDay:"[i morgen kl.] LT",nextWeek:"p\xe5 dddd [kl.] LT",lastDay:"[i g\xe5r kl.] LT",lastWeek:"[i] dddd[s kl.] LT",sameElse:"L"},relativeTime:{future:"om %s",past:"%s siden",s:"f\xe5 sekunder",ss:"%d sekunder",m:"et minut",mm:"%d minutter",h:"en time",hh:"%d timer",d:"en dag",dd:"%d dage",M:"en m\xe5ned",MM:"%d m\xe5neder",y:"et \xe5r",yy:"%d \xe5r"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}}),e.defineLocale("de-at",{months:"J\xe4nner_Februar_M\xe4rz_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember".split("_"),monthsShort:"J\xe4n._Feb._M\xe4rz_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.".split("_"),monthsParseExact:!0,weekdays:"Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag".split("_"),weekdaysShort:"So._Mo._Di._Mi._Do._Fr._Sa.".split("_"),weekdaysMin:"So_Mo_Di_Mi_Do_Fr_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY HH:mm",LLLL:"dddd, D. MMMM YYYY HH:mm"},calendar:{sameDay:"[heute um] LT [Uhr]",sameElse:"L",nextDay:"[morgen um] LT [Uhr]",nextWeek:"dddd [um] LT [Uhr]",lastDay:"[gestern um] LT [Uhr]",lastWeek:"[letzten] dddd [um] LT [Uhr]"},relativeTime:{future:"in %s",past:"vor %s",s:"ein paar Sekunden",ss:"%d Sekunden",m:O,mm:"%d Minuten",h:O,hh:"%d Stunden",d:O,dd:O,w:O,ww:"%d Wochen",M:O,MM:O,y:O,yy:O},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}}),e.defineLocale("de-ch",{months:"Januar_Februar_M\xe4rz_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember".split("_"),monthsShort:"Jan._Feb._M\xe4rz_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.".split("_"),monthsParseExact:!0,weekdays:"Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag".split("_"),weekdaysShort:"So_Mo_Di_Mi_Do_Fr_Sa".split("_"),weekdaysMin:"So_Mo_Di_Mi_Do_Fr_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY HH:mm",LLLL:"dddd, D. MMMM YYYY HH:mm"},calendar:{sameDay:"[heute um] LT [Uhr]",sameElse:"L",nextDay:"[morgen um] LT [Uhr]",nextWeek:"dddd [um] LT [Uhr]",lastDay:"[gestern um] LT [Uhr]",lastWeek:"[letzten] dddd [um] LT [Uhr]"},relativeTime:{future:"in %s",past:"vor %s",s:"ein paar Sekunden",ss:"%d Sekunden",m:E,mm:"%d Minuten",h:E,hh:"%d Stunden",d:E,dd:E,w:E,ww:"%d Wochen",M:E,MM:E,y:E,yy:E},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}}),e.defineLocale("de",{months:"Januar_Februar_M\xe4rz_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember".split("_"),monthsShort:"Jan._Feb._M\xe4rz_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.".split("_"),monthsParseExact:!0,weekdays:"Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag".split("_"),weekdaysShort:"So._Mo._Di._Mi._Do._Fr._Sa.".split("_"),weekdaysMin:"So_Mo_Di_Mi_Do_Fr_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY HH:mm",LLLL:"dddd, D. MMMM YYYY HH:mm"},calendar:{sameDay:"[heute um] LT [Uhr]",sameElse:"L",nextDay:"[morgen um] LT [Uhr]",nextWeek:"dddd [um] LT [Uhr]",lastDay:"[gestern um] LT [Uhr]",lastWeek:"[letzten] dddd [um] LT [Uhr]"},relativeTime:{future:"in %s",past:"vor %s",s:"ein paar Sekunden",ss:"%d Sekunden",m:F,mm:"%d Minuten",h:F,hh:"%d Stunden",d:F,dd:F,w:F,ww:"%d Wochen",M:F,MM:F,y:F,yy:F},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}});var z=["\u0796\u07ac\u0782\u07aa\u0787\u07a6\u0783\u07a9","\u078a\u07ac\u0784\u07b0\u0783\u07aa\u0787\u07a6\u0783\u07a9","\u0789\u07a7\u0783\u07a8\u0797\u07aa","\u0787\u07ad\u0795\u07b0\u0783\u07a9\u078d\u07aa","\u0789\u07ad","\u0796\u07ab\u0782\u07b0","\u0796\u07aa\u078d\u07a6\u0787\u07a8","\u0787\u07af\u078e\u07a6\u0790\u07b0\u0793\u07aa","\u0790\u07ac\u0795\u07b0\u0793\u07ac\u0789\u07b0\u0784\u07a6\u0783\u07aa","\u0787\u07ae\u0786\u07b0\u0793\u07af\u0784\u07a6\u0783\u07aa","\u0782\u07ae\u0788\u07ac\u0789\u07b0\u0784\u07a6\u0783\u07aa","\u0791\u07a8\u0790\u07ac\u0789\u07b0\u0784\u07a6\u0783\u07aa"],J=["\u0787\u07a7\u078b\u07a8\u0787\u07b0\u078c\u07a6","\u0780\u07af\u0789\u07a6","\u0787\u07a6\u0782\u07b0\u078e\u07a7\u0783\u07a6","\u0784\u07aa\u078b\u07a6","\u0784\u07aa\u0783\u07a7\u0790\u07b0\u078a\u07a6\u078c\u07a8","\u0780\u07aa\u0786\u07aa\u0783\u07aa","\u0780\u07ae\u0782\u07a8\u0780\u07a8\u0783\u07aa"];e.defineLocale("dv",{months:z,monthsShort:z,weekdays:J,weekdaysShort:J,weekdaysMin:"\u0787\u07a7\u078b\u07a8_\u0780\u07af\u0789\u07a6_\u0787\u07a6\u0782\u07b0_\u0784\u07aa\u078b\u07a6_\u0784\u07aa\u0783\u07a7_\u0780\u07aa\u0786\u07aa_\u0780\u07ae\u0782\u07a8".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"D/M/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},meridiemParse:/\u0789\u0786|\u0789\u078a/,isPM:function(e){return"\u0789\u078a"===e},meridiem:function(e,a,_){return e<12?"\u0789\u0786":"\u0789\u078a"},calendar:{sameDay:"[\u0789\u07a8\u0787\u07a6\u078b\u07aa] LT",nextDay:"[\u0789\u07a7\u078b\u07a6\u0789\u07a7] LT",nextWeek:"dddd LT",lastDay:"[\u0787\u07a8\u0787\u07b0\u0794\u07ac] LT",lastWeek:"[\u078a\u07a7\u0787\u07a8\u078c\u07aa\u0788\u07a8] dddd LT",sameElse:"L"},relativeTime:{future:"\u078c\u07ac\u0783\u07ad\u078e\u07a6\u0787\u07a8 %s",past:"\u0786\u07aa\u0783\u07a8\u0782\u07b0 %s",s:"\u0790\u07a8\u0786\u07aa\u0782\u07b0\u078c\u07aa\u0786\u07ae\u0785\u07ac\u0787\u07b0",ss:"d% \u0790\u07a8\u0786\u07aa\u0782\u07b0\u078c\u07aa",m:"\u0789\u07a8\u0782\u07a8\u0793\u07ac\u0787\u07b0",mm:"\u0789\u07a8\u0782\u07a8\u0793\u07aa %d",h:"\u078e\u07a6\u0791\u07a8\u0787\u07a8\u0783\u07ac\u0787\u07b0",hh:"\u078e\u07a6\u0791\u07a8\u0787\u07a8\u0783\u07aa %d",d:"\u078b\u07aa\u0788\u07a6\u0780\u07ac\u0787\u07b0",dd:"\u078b\u07aa\u0788\u07a6\u0790\u07b0 %d",M:"\u0789\u07a6\u0780\u07ac\u0787\u07b0",MM:"\u0789\u07a6\u0790\u07b0 %d",y:"\u0787\u07a6\u0780\u07a6\u0783\u07ac\u0787\u07b0",yy:"\u0787\u07a6\u0780\u07a6\u0783\u07aa %d"},preparse:function(e){return e.replace(/\u060c/g,",")},postformat:function(e){return e.replace(/,/g,"\u060c")},week:{dow:7,doy:12}}),e.defineLocale("el",{monthsNominativeEl:"\u0399\u03b1\u03bd\u03bf\u03c5\u03ac\u03c1\u03b9\u03bf\u03c2_\u03a6\u03b5\u03b2\u03c1\u03bf\u03c5\u03ac\u03c1\u03b9\u03bf\u03c2_\u039c\u03ac\u03c1\u03c4\u03b9\u03bf\u03c2_\u0391\u03c0\u03c1\u03af\u03bb\u03b9\u03bf\u03c2_\u039c\u03ac\u03b9\u03bf\u03c2_\u0399\u03bf\u03cd\u03bd\u03b9\u03bf\u03c2_\u0399\u03bf\u03cd\u03bb\u03b9\u03bf\u03c2_\u0391\u03cd\u03b3\u03bf\u03c5\u03c3\u03c4\u03bf\u03c2_\u03a3\u03b5\u03c0\u03c4\u03ad\u03bc\u03b2\u03c1\u03b9\u03bf\u03c2_\u039f\u03ba\u03c4\u03ce\u03b2\u03c1\u03b9\u03bf\u03c2_\u039d\u03bf\u03ad\u03bc\u03b2\u03c1\u03b9\u03bf\u03c2_\u0394\u03b5\u03ba\u03ad\u03bc\u03b2\u03c1\u03b9\u03bf\u03c2".split("_"),monthsGenitiveEl:"\u0399\u03b1\u03bd\u03bf\u03c5\u03b1\u03c1\u03af\u03bf\u03c5_\u03a6\u03b5\u03b2\u03c1\u03bf\u03c5\u03b1\u03c1\u03af\u03bf\u03c5_\u039c\u03b1\u03c1\u03c4\u03af\u03bf\u03c5_\u0391\u03c0\u03c1\u03b9\u03bb\u03af\u03bf\u03c5_\u039c\u03b1\u0390\u03bf\u03c5_\u0399\u03bf\u03c5\u03bd\u03af\u03bf\u03c5_\u0399\u03bf\u03c5\u03bb\u03af\u03bf\u03c5_\u0391\u03c5\u03b3\u03bf\u03cd\u03c3\u03c4\u03bf\u03c5_\u03a3\u03b5\u03c0\u03c4\u03b5\u03bc\u03b2\u03c1\u03af\u03bf\u03c5_\u039f\u03ba\u03c4\u03c9\u03b2\u03c1\u03af\u03bf\u03c5_\u039d\u03bf\u03b5\u03bc\u03b2\u03c1\u03af\u03bf\u03c5_\u0394\u03b5\u03ba\u03b5\u03bc\u03b2\u03c1\u03af\u03bf\u03c5".split("_"),months:function(e,a){return e?"string"==typeof a&&/D/.test(a.substring(0,a.indexOf("MMMM")))?this._monthsGenitiveEl[e.month()]:this._monthsNominativeEl[e.month()]:this._monthsNominativeEl},monthsShort:"\u0399\u03b1\u03bd_\u03a6\u03b5\u03b2_\u039c\u03b1\u03c1_\u0391\u03c0\u03c1_\u039c\u03b1\u03ca_\u0399\u03bf\u03c5\u03bd_\u0399\u03bf\u03c5\u03bb_\u0391\u03c5\u03b3_\u03a3\u03b5\u03c0_\u039f\u03ba\u03c4_\u039d\u03bf\u03b5_\u0394\u03b5\u03ba".split("_"),weekdays:"\u039a\u03c5\u03c1\u03b9\u03b1\u03ba\u03ae_\u0394\u03b5\u03c5\u03c4\u03ad\u03c1\u03b1_\u03a4\u03c1\u03af\u03c4\u03b7_\u03a4\u03b5\u03c4\u03ac\u03c1\u03c4\u03b7_\u03a0\u03ad\u03bc\u03c0\u03c4\u03b7_\u03a0\u03b1\u03c1\u03b1\u03c3\u03ba\u03b5\u03c5\u03ae_\u03a3\u03ac\u03b2\u03b2\u03b1\u03c4\u03bf".split("_"),weekdaysShort:"\u039a\u03c5\u03c1_\u0394\u03b5\u03c5_\u03a4\u03c1\u03b9_\u03a4\u03b5\u03c4_\u03a0\u03b5\u03bc_\u03a0\u03b1\u03c1_\u03a3\u03b1\u03b2".split("_"),weekdaysMin:"\u039a\u03c5_\u0394\u03b5_\u03a4\u03c1_\u03a4\u03b5_\u03a0\u03b5_\u03a0\u03b1_\u03a3\u03b1".split("_"),meridiem:function(e,a,_){return 11<e?_?"\u03bc\u03bc":"\u039c\u039c":_?"\u03c0\u03bc":"\u03a0\u039c"},isPM:function(e){return"\u03bc"===(e+"").toLowerCase()[0]},meridiemParse:/[\u03a0\u039c]\.?\u039c?\.?/i,longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendarEl:{sameDay:"[\u03a3\u03ae\u03bc\u03b5\u03c1\u03b1 {}] LT",nextDay:"[\u0391\u03cd\u03c1\u03b9\u03bf {}] LT",nextWeek:"dddd [{}] LT",lastDay:"[\u03a7\u03b8\u03b5\u03c2 {}] LT",lastWeek:function(){switch(this.day()){case 6:return"[\u03c4\u03bf \u03c0\u03c1\u03bf\u03b7\u03b3\u03bf\u03cd\u03bc\u03b5\u03bd\u03bf] dddd [{}] LT";default:return"[\u03c4\u03b7\u03bd \u03c0\u03c1\u03bf\u03b7\u03b3\u03bf\u03cd\u03bc\u03b5\u03bd\u03b7] dddd [{}] LT"}},sameElse:"L"},calendar:function(e,a){var _,s=this._calendarEl[e],d=a&&a.hours();return _=s,("undefined"!=typeof Function&&_ instanceof Function||"[object Function]"===Object.prototype.toString.call(_))&&(s=s.apply(a)),s.replace("{}",d%12==1?"\u03c3\u03c4\u03b7":"\u03c3\u03c4\u03b9\u03c2")},relativeTime:{future:"\u03c3\u03b5 %s",past:"%s \u03c0\u03c1\u03b9\u03bd",s:"\u03bb\u03af\u03b3\u03b1 \u03b4\u03b5\u03c5\u03c4\u03b5\u03c1\u03cc\u03bb\u03b5\u03c0\u03c4\u03b1",ss:"%d \u03b4\u03b5\u03c5\u03c4\u03b5\u03c1\u03cc\u03bb\u03b5\u03c0\u03c4\u03b1",m:"\u03ad\u03bd\u03b1 \u03bb\u03b5\u03c0\u03c4\u03cc",mm:"%d \u03bb\u03b5\u03c0\u03c4\u03ac",h:"\u03bc\u03af\u03b1 \u03ce\u03c1\u03b1",hh:"%d \u03ce\u03c1\u03b5\u03c2",d:"\u03bc\u03af\u03b1 \u03bc\u03ad\u03c1\u03b1",dd:"%d \u03bc\u03ad\u03c1\u03b5\u03c2",M:"\u03ad\u03bd\u03b1\u03c2 \u03bc\u03ae\u03bd\u03b1\u03c2",MM:"%d \u03bc\u03ae\u03bd\u03b5\u03c2",y:"\u03ad\u03bd\u03b1\u03c2 \u03c7\u03c1\u03cc\u03bd\u03bf\u03c2",yy:"%d \u03c7\u03c1\u03cc\u03bd\u03b9\u03b1"},dayOfMonthOrdinalParse:/\d{1,2}\u03b7/,ordinal:"%d\u03b7",week:{dow:1,doy:4}}),e.defineLocale("en-au",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(e){var a=e%10;return e+(1==~~(e%100/10)?"th":1==a?"st":2==a?"nd":3==a?"rd":"th")},week:{dow:0,doy:4}}),e.defineLocale("en-ca",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"YYYY-MM-DD",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(e){var a=e%10;return e+(1==~~(e%100/10)?"th":1==a?"st":2==a?"nd":3==a?"rd":"th")}}),e.defineLocale("en-gb",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(e){var a=e%10;return e+(1==~~(e%100/10)?"th":1==a?"st":2==a?"nd":3==a?"rd":"th")},week:{dow:1,doy:4}}),e.defineLocale("en-ie",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(e){var a=e%10;return e+(1==~~(e%100/10)?"th":1==a?"st":2==a?"nd":3==a?"rd":"th")},week:{dow:1,doy:4}}),e.defineLocale("en-il",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(e){var a=e%10;return e+(1==~~(e%100/10)?"th":1==a?"st":2==a?"nd":3==a?"rd":"th")}}),e.defineLocale("en-in",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(e){var a=e%10;return e+(1==~~(e%100/10)?"th":1==a?"st":2==a?"nd":3==a?"rd":"th")},week:{dow:0,doy:6}}),e.defineLocale("en-nz",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(e){var a=e%10;return e+(1==~~(e%100/10)?"th":1==a?"st":2==a?"nd":3==a?"rd":"th")},week:{dow:1,doy:4}}),e.defineLocale("en-sg",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(e){var a=e%10;return e+(1==~~(e%100/10)?"th":1==a?"st":2==a?"nd":3==a?"rd":"th")},week:{dow:1,doy:4}}),e.defineLocale("eo",{months:"januaro_februaro_marto_aprilo_majo_junio_julio_a\u016dgusto_septembro_oktobro_novembro_decembro".split("_"),monthsShort:"jan_feb_mart_apr_maj_jun_jul_a\u016dg_sept_okt_nov_dec".split("_"),weekdays:"diman\u0109o_lundo_mardo_merkredo_\u0135a\u016ddo_vendredo_sabato".split("_"),weekdaysShort:"dim_lun_mard_merk_\u0135a\u016d_ven_sab".split("_"),weekdaysMin:"di_lu_ma_me_\u0135a_ve_sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"[la] D[-an de] MMMM, YYYY",LLL:"[la] D[-an de] MMMM, YYYY HH:mm",LLLL:"dddd[n], [la] D[-an de] MMMM, YYYY HH:mm",llll:"ddd, [la] D[-an de] MMM, YYYY HH:mm"},meridiemParse:/[ap]\.t\.m/i,isPM:function(e){return"p"===e.charAt(0).toLowerCase()},meridiem:function(e,a,_){return 11<e?_?"p.t.m.":"P.T.M.":_?"a.t.m.":"A.T.M."},calendar:{sameDay:"[Hodia\u016d je] LT",nextDay:"[Morga\u016d je] LT",nextWeek:"dddd[n je] LT",lastDay:"[Hiera\u016d je] LT",lastWeek:"[pasintan] dddd[n je] LT",sameElse:"L"},relativeTime:{future:"post %s",past:"anta\u016d %s",s:"kelkaj sekundoj",ss:"%d sekundoj",m:"unu minuto",mm:"%d minutoj",h:"unu horo",hh:"%d horoj",d:"unu tago",dd:"%d tagoj",M:"unu monato",MM:"%d monatoj",y:"unu jaro",yy:"%d jaroj"},dayOfMonthOrdinalParse:/\d{1,2}a/,ordinal:"%da",week:{dow:1,doy:7}});var I="ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.".split("_"),N="ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic".split("_"),R=[/^ene/i,/^feb/i,/^mar/i,/^abr/i,/^may/i,/^jun/i,/^jul/i,/^ago/i,/^sep/i,/^oct/i,/^nov/i,/^dic/i],C=/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i;e.defineLocale("es-do",{months:"enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre".split("_"),monthsShort:function(e,a){return e?/-MMM-/.test(a)?N[e.month()]:I[e.month()]:I},monthsRegex:C,monthsShortRegex:C,monthsStrictRegex:/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,monthsShortStrictRegex:/^(ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i,monthsParse:R,longMonthsParse:R,shortMonthsParse:R,weekdays:"domingo_lunes_martes_mi\xe9rcoles_jueves_viernes_s\xe1bado".split("_"),weekdaysShort:"dom._lun._mar._mi\xe9._jue._vie._s\xe1b.".split("_"),weekdaysMin:"do_lu_ma_mi_ju_vi_s\xe1".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY h:mm A",LLLL:"dddd, D [de] MMMM [de] YYYY h:mm A"},calendar:{sameDay:function(){return"[hoy a la"+(1!==this.hours()?"s":"")+"] LT"},nextDay:function(){return"[ma\xf1ana a la"+(1!==this.hours()?"s":"")+"] LT"},nextWeek:function(){return"dddd [a la"+(1!==this.hours()?"s":"")+"] LT"},lastDay:function(){return"[ayer a la"+(1!==this.hours()?"s":"")+"] LT"},lastWeek:function(){return"[el] dddd [pasado a la"+(1!==this.hours()?"s":"")+"] LT"},sameElse:"L"},relativeTime:{future:"en %s",past:"hace %s",s:"unos segundos",ss:"%d segundos",m:"un minuto",mm:"%d minutos",h:"una hora",hh:"%d horas",d:"un d\xeda",dd:"%d d\xedas",M:"un mes",MM:"%d meses",y:"un a\xf1o",yy:"%d a\xf1os"},dayOfMonthOrdinalParse:/\d{1,2}\xba/,ordinal:"%d\xba",week:{dow:1,doy:4}});var K="ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.".split("_"),G="ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic".split("_"),B=[/^ene/i,/^feb/i,/^mar/i,/^abr/i,/^may/i,/^jun/i,/^jul/i,/^ago/i,/^sep/i,/^oct/i,/^nov/i,/^dic/i],q=/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i;e.defineLocale("es-us",{months:"enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre".split("_"),monthsShort:function(e,a){return e?/-MMM-/.test(a)?G[e.month()]:K[e.month()]:K},monthsRegex:q,monthsShortRegex:q,monthsStrictRegex:/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,monthsShortStrictRegex:/^(ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i,monthsParse:B,longMonthsParse:B,shortMonthsParse:B,weekdays:"domingo_lunes_martes_mi\xe9rcoles_jueves_viernes_s\xe1bado".split("_"),weekdaysShort:"dom._lun._mar._mi\xe9._jue._vie._s\xe1b.".split("_"),weekdaysMin:"do_lu_ma_mi_ju_vi_s\xe1".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"MM/DD/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY h:mm A",LLLL:"dddd, D [de] MMMM [de] YYYY h:mm A"},calendar:{sameDay:function(){return"[hoy a la"+(1!==this.hours()?"s":"")+"] LT"},nextDay:function(){return"[ma\xf1ana a la"+(1!==this.hours()?"s":"")+"] LT"},nextWeek:function(){return"dddd [a la"+(1!==this.hours()?"s":"")+"] LT"},lastDay:function(){return"[ayer a la"+(1!==this.hours()?"s":"")+"] LT"},lastWeek:function(){return"[el] dddd [pasado a la"+(1!==this.hours()?"s":"")+"] LT"},sameElse:"L"},relativeTime:{future:"en %s",past:"hace %s",s:"unos segundos",ss:"%d segundos",m:"un minuto",mm:"%d minutos",h:"una hora",hh:"%d horas",d:"un d\xeda",dd:"%d d\xedas",M:"un mes",MM:"%d meses",y:"un a\xf1o",yy:"%d a\xf1os"},dayOfMonthOrdinalParse:/\d{1,2}\xba/,ordinal:"%d\xba",week:{dow:0,doy:6}});var U="ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.".split("_"),$="ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic".split("_"),Q=[/^ene/i,/^feb/i,/^mar/i,/^abr/i,/^may/i,/^jun/i,/^jul/i,/^ago/i,/^sep/i,/^oct/i,/^nov/i,/^dic/i],V=/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i;function Z(e,a,_,s){var d={s:["m\xf5ne sekundi","m\xf5ni sekund","paar sekundit"],ss:[e+"sekundi",e+"sekundit"],m:["\xfche minuti","\xfcks minut"],mm:[e+" minuti",e+" minutit"],h:["\xfche tunni","tund aega","\xfcks tund"],hh:[e+" tunni",e+" tundi"],d:["\xfche p\xe4eva","\xfcks p\xe4ev"],M:["kuu aja","kuu aega","\xfcks kuu"],MM:[e+" kuu",e+" kuud"],y:["\xfche aasta","aasta","\xfcks aasta"],yy:[e+" aasta",e+" aastat"]};return a?d[_][2]?d[_][2]:d[_][1]:s?d[_][0]:d[_][1]}e.defineLocale("es",{months:"enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre".split("_"),monthsShort:function(e,a){return e?/-MMM-/.test(a)?$[e.month()]:U[e.month()]:U},monthsRegex:V,monthsShortRegex:V,monthsStrictRegex:/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,monthsShortStrictRegex:/^(ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i,monthsParse:Q,longMonthsParse:Q,shortMonthsParse:Q,weekdays:"domingo_lunes_martes_mi\xe9rcoles_jueves_viernes_s\xe1bado".split("_"),weekdaysShort:"dom._lun._mar._mi\xe9._jue._vie._s\xe1b.".split("_"),weekdaysMin:"do_lu_ma_mi_ju_vi_s\xe1".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY H:mm",LLLL:"dddd, D [de] MMMM [de] YYYY H:mm"},calendar:{sameDay:function(){return"[hoy a la"+(1!==this.hours()?"s":"")+"] LT"},nextDay:function(){return"[ma\xf1ana a la"+(1!==this.hours()?"s":"")+"] LT"},nextWeek:function(){return"dddd [a la"+(1!==this.hours()?"s":"")+"] LT"},lastDay:function(){return"[ayer a la"+(1!==this.hours()?"s":"")+"] LT"},lastWeek:function(){return"[el] dddd [pasado a la"+(1!==this.hours()?"s":"")+"] LT"},sameElse:"L"},relativeTime:{future:"en %s",past:"hace %s",s:"unos segundos",ss:"%d segundos",m:"un minuto",mm:"%d minutos",h:"una hora",hh:"%d horas",d:"un d\xeda",dd:"%d d\xedas",M:"un mes",MM:"%d meses",y:"un a\xf1o",yy:"%d a\xf1os"},dayOfMonthOrdinalParse:/\d{1,2}\xba/,ordinal:"%d\xba",week:{dow:1,doy:4},invalidDate:"Fecha inv\xe1lida"}),e.defineLocale("et",{months:"jaanuar_veebruar_m\xe4rts_aprill_mai_juuni_juuli_august_september_oktoober_november_detsember".split("_"),monthsShort:"jaan_veebr_m\xe4rts_apr_mai_juuni_juuli_aug_sept_okt_nov_dets".split("_"),weekdays:"p\xfchap\xe4ev_esmasp\xe4ev_teisip\xe4ev_kolmap\xe4ev_neljap\xe4ev_reede_laup\xe4ev".split("_"),weekdaysShort:"P_E_T_K_N_R_L".split("_"),weekdaysMin:"P_E_T_K_N_R_L".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[T\xe4na,] LT",nextDay:"[Homme,] LT",nextWeek:"[J\xe4rgmine] dddd LT",lastDay:"[Eile,] LT",lastWeek:"[Eelmine] dddd LT",sameElse:"L"},relativeTime:{future:"%s p\xe4rast",past:"%s tagasi",s:Z,ss:Z,m:Z,mm:Z,h:Z,hh:Z,d:Z,dd:"%d p\xe4eva",M:Z,MM:Z,y:Z,yy:Z},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}}),e.defineLocale("eu",{months:"urtarrila_otsaila_martxoa_apirila_maiatza_ekaina_uztaila_abuztua_iraila_urria_azaroa_abendua".split("_"),monthsShort:"urt._ots._mar._api._mai._eka._uzt._abu._ira._urr._aza._abe.".split("_"),monthsParseExact:!0,weekdays:"igandea_astelehena_asteartea_asteazkena_osteguna_ostirala_larunbata".split("_"),weekdaysShort:"ig._al._ar._az._og._ol._lr.".split("_"),weekdaysMin:"ig_al_ar_az_og_ol_lr".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"YYYY[ko] MMMM[ren] D[a]",LLL:"YYYY[ko] MMMM[ren] D[a] HH:mm",LLLL:"dddd, YYYY[ko] MMMM[ren] D[a] HH:mm",l:"YYYY-M-D",ll:"YYYY[ko] MMM D[a]",lll:"YYYY[ko] MMM D[a] HH:mm",llll:"ddd, YYYY[ko] MMM D[a] HH:mm"},calendar:{sameDay:"[gaur] LT[etan]",nextDay:"[bihar] LT[etan]",nextWeek:"dddd LT[etan]",lastDay:"[atzo] LT[etan]",lastWeek:"[aurreko] dddd LT[etan]",sameElse:"L"},relativeTime:{future:"%s barru",past:"duela %s",s:"segundo batzuk",ss:"%d segundo",m:"minutu bat",mm:"%d minutu",h:"ordu bat",hh:"%d ordu",d:"egun bat",dd:"%d egun",M:"hilabete bat",MM:"%d hilabete",y:"urte bat",yy:"%d urte"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}});var X={1:"\u06f1",2:"\u06f2",3:"\u06f3",4:"\u06f4",5:"\u06f5",6:"\u06f6",7:"\u06f7",8:"\u06f8",9:"\u06f9",0:"\u06f0"},ee={"\u06f1":"1","\u06f2":"2","\u06f3":"3","\u06f4":"4","\u06f5":"5","\u06f6":"6","\u06f7":"7","\u06f8":"8","\u06f9":"9","\u06f0":"0"};e.defineLocale("fa",{months:"\u0698\u0627\u0646\u0648\u06cc\u0647_\u0641\u0648\u0631\u06cc\u0647_\u0645\u0627\u0631\u0633_\u0622\u0648\u0631\u06cc\u0644_\u0645\u0647_\u0698\u0648\u0626\u0646_\u0698\u0648\u0626\u06cc\u0647_\u0627\u0648\u062a_\u0633\u067e\u062a\u0627\u0645\u0628\u0631_\u0627\u06a9\u062a\u0628\u0631_\u0646\u0648\u0627\u0645\u0628\u0631_\u062f\u0633\u0627\u0645\u0628\u0631".split("_"),monthsShort:"\u0698\u0627\u0646\u0648\u06cc\u0647_\u0641\u0648\u0631\u06cc\u0647_\u0645\u0627\u0631\u0633_\u0622\u0648\u0631\u06cc\u0644_\u0645\u0647_\u0698\u0648\u0626\u0646_\u0698\u0648\u0626\u06cc\u0647_\u0627\u0648\u062a_\u0633\u067e\u062a\u0627\u0645\u0628\u0631_\u0627\u06a9\u062a\u0628\u0631_\u0646\u0648\u0627\u0645\u0628\u0631_\u062f\u0633\u0627\u0645\u0628\u0631".split("_"),weekdays:"\u06cc\u06a9\u200c\u0634\u0646\u0628\u0647_\u062f\u0648\u0634\u0646\u0628\u0647_\u0633\u0647\u200c\u0634\u0646\u0628\u0647_\u0686\u0647\u0627\u0631\u0634\u0646\u0628\u0647_\u067e\u0646\u062c\u200c\u0634\u0646\u0628\u0647_\u062c\u0645\u0639\u0647_\u0634\u0646\u0628\u0647".split("_"),weekdaysShort:"\u06cc\u06a9\u200c\u0634\u0646\u0628\u0647_\u062f\u0648\u0634\u0646\u0628\u0647_\u0633\u0647\u200c\u0634\u0646\u0628\u0647_\u0686\u0647\u0627\u0631\u0634\u0646\u0628\u0647_\u067e\u0646\u062c\u200c\u0634\u0646\u0628\u0647_\u062c\u0645\u0639\u0647_\u0634\u0646\u0628\u0647".split("_"),weekdaysMin:"\u06cc_\u062f_\u0633_\u0686_\u067e_\u062c_\u0634".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},meridiemParse:/\u0642\u0628\u0644 \u0627\u0632 \u0638\u0647\u0631|\u0628\u0639\u062f \u0627\u0632 \u0638\u0647\u0631/,isPM:function(e){return/\u0628\u0639\u062f \u0627\u0632 \u0638\u0647\u0631/.test(e)},meridiem:function(e,a,_){return e<12?"\u0642\u0628\u0644 \u0627\u0632 \u0638\u0647\u0631":"\u0628\u0639\u062f \u0627\u0632 \u0638\u0647\u0631"},calendar:{sameDay:"[\u0627\u0645\u0631\u0648\u0632 \u0633\u0627\u0639\u062a] LT",nextDay:"[\u0641\u0631\u062f\u0627 \u0633\u0627\u0639\u062a] LT",nextWeek:"dddd [\u0633\u0627\u0639\u062a] LT",lastDay:"[\u062f\u06cc\u0631\u0648\u0632 \u0633\u0627\u0639\u062a] LT",lastWeek:"dddd [\u067e\u06cc\u0634] [\u0633\u0627\u0639\u062a] LT",sameElse:"L"},relativeTime:{future:"\u062f\u0631 %s",past:"%s \u067e\u06cc\u0634",s:"\u0686\u0646\u062f \u062b\u0627\u0646\u06cc\u0647",ss:"%d \u062b\u0627\u0646\u06cc\u0647",m:"\u06cc\u06a9 \u062f\u0642\u06cc\u0642\u0647",mm:"%d \u062f\u0642\u06cc\u0642\u0647",h:"\u06cc\u06a9 \u0633\u0627\u0639\u062a",hh:"%d \u0633\u0627\u0639\u062a",d:"\u06cc\u06a9 \u0631\u0648\u0632",dd:"%d \u0631\u0648\u0632",M:"\u06cc\u06a9 \u0645\u0627\u0647",MM:"%d \u0645\u0627\u0647",y:"\u06cc\u06a9 \u0633\u0627\u0644",yy:"%d \u0633\u0627\u0644"},preparse:function(e){return e.replace(/[\u06f0-\u06f9]/g,function(e){return ee[e]}).replace(/\u060c/g,",")},postformat:function(e){return e.replace(/\d/g,function(e){return X[e]}).replace(/,/g,"\u060c")},dayOfMonthOrdinalParse:/\d{1,2}\u0645/,ordinal:"%d\u0645",week:{dow:6,doy:12}});var ae="nolla yksi kaksi kolme nelj\xe4 viisi kuusi seitsem\xe4n kahdeksan yhdeks\xe4n".split(" "),_e=["nolla","yhden","kahden","kolmen","nelj\xe4n","viiden","kuuden",ae[7],ae[8],ae[9]];function se(e,a,_,s){var d,t,n="";switch(_){case"s":return s?"muutaman sekunnin":"muutama sekunti";case"ss":n=s?"sekunnin":"sekuntia";break;case"m":return s?"minuutin":"minuutti";case"mm":n=s?"minuutin":"minuuttia";break;case"h":return s?"tunnin":"tunti";case"hh":n=s?"tunnin":"tuntia";break;case"d":return s?"p\xe4iv\xe4n":"p\xe4iv\xe4";case"dd":n=s?"p\xe4iv\xe4n":"p\xe4iv\xe4\xe4";break;case"M":return s?"kuukauden":"kuukausi";case"MM":n=s?"kuukauden":"kuukautta";break;case"y":return s?"vuoden":"vuosi";case"yy":n=s?"vuoden":"vuotta";break}return t=s,n=((d=e)<10?t?_e[d]:ae[d]:d)+" "+n}e.defineLocale("fi",{months:"tammikuu_helmikuu_maaliskuu_huhtikuu_toukokuu_kes\xe4kuu_hein\xe4kuu_elokuu_syyskuu_lokakuu_marraskuu_joulukuu".split("_"),monthsShort:"tammi_helmi_maalis_huhti_touko_kes\xe4_hein\xe4_elo_syys_loka_marras_joulu".split("_"),weekdays:"sunnuntai_maanantai_tiistai_keskiviikko_torstai_perjantai_lauantai".split("_"),weekdaysShort:"su_ma_ti_ke_to_pe_la".split("_"),weekdaysMin:"su_ma_ti_ke_to_pe_la".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD.MM.YYYY",LL:"Do MMMM[ta] YYYY",LLL:"Do MMMM[ta] YYYY, [klo] HH.mm",LLLL:"dddd, Do MMMM[ta] YYYY, [klo] HH.mm",l:"D.M.YYYY",ll:"Do MMM YYYY",lll:"Do MMM YYYY, [klo] HH.mm",llll:"ddd, Do MMM YYYY, [klo] HH.mm"},calendar:{sameDay:"[t\xe4n\xe4\xe4n] [klo] LT",nextDay:"[huomenna] [klo] LT",nextWeek:"dddd [klo] LT",lastDay:"[eilen] [klo] LT",lastWeek:"[viime] dddd[na] [klo] LT",sameElse:"L"},relativeTime:{future:"%s p\xe4\xe4st\xe4",past:"%s sitten",s:se,ss:se,m:se,mm:se,h:se,hh:se,d:se,dd:se,M:se,MM:se,y:se,yy:se},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}}),e.defineLocale("fil",{months:"Enero_Pebrero_Marso_Abril_Mayo_Hunyo_Hulyo_Agosto_Setyembre_Oktubre_Nobyembre_Disyembre".split("_"),monthsShort:"Ene_Peb_Mar_Abr_May_Hun_Hul_Ago_Set_Okt_Nob_Dis".split("_"),weekdays:"Linggo_Lunes_Martes_Miyerkules_Huwebes_Biyernes_Sabado".split("_"),weekdaysShort:"Lin_Lun_Mar_Miy_Huw_Biy_Sab".split("_"),weekdaysMin:"Li_Lu_Ma_Mi_Hu_Bi_Sab".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"MM/D/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY HH:mm",LLLL:"dddd, MMMM DD, YYYY HH:mm"},calendar:{sameDay:"LT [ngayong araw]",nextDay:"[Bukas ng] LT",nextWeek:"LT [sa susunod na] dddd",lastDay:"LT [kahapon]",lastWeek:"LT [noong nakaraang] dddd",sameElse:"L"},relativeTime:{future:"sa loob ng %s",past:"%s ang nakalipas",s:"ilang segundo",ss:"%d segundo",m:"isang minuto",mm:"%d minuto",h:"isang oras",hh:"%d oras",d:"isang araw",dd:"%d araw",M:"isang buwan",MM:"%d buwan",y:"isang taon",yy:"%d taon"},dayOfMonthOrdinalParse:/\d{1,2}/,ordinal:function(e){return e},week:{dow:1,doy:4}}),e.defineLocale("fo",{months:"januar_februar_mars_apr\xedl_mai_juni_juli_august_september_oktober_november_desember".split("_"),monthsShort:"jan_feb_mar_apr_mai_jun_jul_aug_sep_okt_nov_des".split("_"),weekdays:"sunnudagur_m\xe1nadagur_t\xfdsdagur_mikudagur_h\xf3sdagur_fr\xedggjadagur_leygardagur".split("_"),weekdaysShort:"sun_m\xe1n_t\xfds_mik_h\xf3s_fr\xed_ley".split("_"),weekdaysMin:"su_m\xe1_t\xfd_mi_h\xf3_fr_le".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D. MMMM, YYYY HH:mm"},calendar:{sameDay:"[\xcd dag kl.] LT",nextDay:"[\xcd morgin kl.] LT",nextWeek:"dddd [kl.] LT",lastDay:"[\xcd gj\xe1r kl.] LT",lastWeek:"[s\xed\xf0stu] dddd [kl] LT",sameElse:"L"},relativeTime:{future:"um %s",past:"%s s\xed\xf0ani",s:"f\xe1 sekund",ss:"%d sekundir",m:"ein minuttur",mm:"%d minuttir",h:"ein t\xedmi",hh:"%d t\xedmar",d:"ein dagur",dd:"%d dagar",M:"ein m\xe1na\xf0ur",MM:"%d m\xe1na\xf0ir",y:"eitt \xe1r",yy:"%d \xe1r"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}}),e.defineLocale("fr-ca",{months:"janvier_f\xe9vrier_mars_avril_mai_juin_juillet_ao\xfbt_septembre_octobre_novembre_d\xe9cembre".split("_"),monthsShort:"janv._f\xe9vr._mars_avr._mai_juin_juil._ao\xfbt_sept._oct._nov._d\xe9c.".split("_"),monthsParseExact:!0,weekdays:"dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi".split("_"),weekdaysShort:"dim._lun._mar._mer._jeu._ven._sam.".split("_"),weekdaysMin:"di_lu_ma_me_je_ve_sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[Aujourd\u2019hui \xe0] LT",nextDay:"[Demain \xe0] LT",nextWeek:"dddd [\xe0] LT",lastDay:"[Hier \xe0] LT",lastWeek:"dddd [dernier \xe0] LT",sameElse:"L"},relativeTime:{future:"dans %s",past:"il y a %s",s:"quelques secondes",ss:"%d secondes",m:"une minute",mm:"%d minutes",h:"une heure",hh:"%d heures",d:"un jour",dd:"%d jours",M:"un mois",MM:"%d mois",y:"un an",yy:"%d ans"},dayOfMonthOrdinalParse:/\d{1,2}(er|e)/,ordinal:function(e,a){switch(a){default:case"M":case"Q":case"D":case"DDD":case"d":return e+(1===e?"er":"e");case"w":case"W":return e+(1===e?"re":"e")}}}),e.defineLocale("fr-ch",{months:"janvier_f\xe9vrier_mars_avril_mai_juin_juillet_ao\xfbt_septembre_octobre_novembre_d\xe9cembre".split("_"),monthsShort:"janv._f\xe9vr._mars_avr._mai_juin_juil._ao\xfbt_sept._oct._nov._d\xe9c.".split("_"),monthsParseExact:!0,weekdays:"dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi".split("_"),weekdaysShort:"dim._lun._mar._mer._jeu._ven._sam.".split("_"),weekdaysMin:"di_lu_ma_me_je_ve_sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[Aujourd\u2019hui \xe0] LT",nextDay:"[Demain \xe0] LT",nextWeek:"dddd [\xe0] LT",lastDay:"[Hier \xe0] LT",lastWeek:"dddd [dernier \xe0] LT",sameElse:"L"},relativeTime:{future:"dans %s",past:"il y a %s",s:"quelques secondes",ss:"%d secondes",m:"une minute",mm:"%d minutes",h:"une heure",hh:"%d heures",d:"un jour",dd:"%d jours",M:"un mois",MM:"%d mois",y:"un an",yy:"%d ans"},dayOfMonthOrdinalParse:/\d{1,2}(er|e)/,ordinal:function(e,a){switch(a){default:case"M":case"Q":case"D":case"DDD":case"d":return e+(1===e?"er":"e");case"w":case"W":return e+(1===e?"re":"e")}},week:{dow:1,doy:4}});var de=/(janv\.?|f\xe9vr\.?|mars|avr\.?|mai|juin|juil\.?|ao\xfbt|sept\.?|oct\.?|nov\.?|d\xe9c\.?|janvier|f\xe9vrier|mars|avril|mai|juin|juillet|ao\xfbt|septembre|octobre|novembre|d\xe9cembre)/i,te=[/^janv/i,/^f\xe9vr/i,/^mars/i,/^avr/i,/^mai/i,/^juin/i,/^juil/i,/^ao\xfbt/i,/^sept/i,/^oct/i,/^nov/i,/^d\xe9c/i];e.defineLocale("fr",{months:"janvier_f\xe9vrier_mars_avril_mai_juin_juillet_ao\xfbt_septembre_octobre_novembre_d\xe9cembre".split("_"),monthsShort:"janv._f\xe9vr._mars_avr._mai_juin_juil._ao\xfbt_sept._oct._nov._d\xe9c.".split("_"),monthsRegex:de,monthsShortRegex:de,monthsStrictRegex:/^(janvier|f\xe9vrier|mars|avril|mai|juin|juillet|ao\xfbt|septembre|octobre|novembre|d\xe9cembre)/i,monthsShortStrictRegex:/(janv\.?|f\xe9vr\.?|mars|avr\.?|mai|juin|juil\.?|ao\xfbt|sept\.?|oct\.?|nov\.?|d\xe9c\.?)/i,monthsParse:te,longMonthsParse:te,shortMonthsParse:te,weekdays:"dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi".split("_"),weekdaysShort:"dim._lun._mar._mer._jeu._ven._sam.".split("_"),weekdaysMin:"di_lu_ma_me_je_ve_sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[Aujourd\u2019hui \xe0] LT",nextDay:"[Demain \xe0] LT",nextWeek:"dddd [\xe0] LT",lastDay:"[Hier \xe0] LT",lastWeek:"dddd [dernier \xe0] LT",sameElse:"L"},relativeTime:{future:"dans %s",past:"il y a %s",s:"quelques secondes",ss:"%d secondes",m:"une minute",mm:"%d minutes",h:"une heure",hh:"%d heures",d:"un jour",dd:"%d jours",M:"un mois",MM:"%d mois",y:"un an",yy:"%d ans"},dayOfMonthOrdinalParse:/\d{1,2}(er|)/,ordinal:function(e,a){switch(a){case"D":return e+(1===e?"er":"");default:case"M":case"Q":case"DDD":case"d":return e+(1===e?"er":"e");case"w":case"W":return e+(1===e?"re":"e")}},week:{dow:1,doy:4}});var ne="jan._feb._mrt._apr._mai_jun._jul._aug._sep._okt._nov._des.".split("_"),re="jan_feb_mrt_apr_mai_jun_jul_aug_sep_okt_nov_des".split("_");e.defineLocale("fy",{months:"jannewaris_febrewaris_maart_april_maaie_juny_july_augustus_septimber_oktober_novimber_desimber".split("_"),monthsShort:function(e,a){return e?/-MMM-/.test(a)?re[e.month()]:ne[e.month()]:ne},monthsParseExact:!0,weekdays:"snein_moandei_tiisdei_woansdei_tongersdei_freed_sneon".split("_"),weekdaysShort:"si._mo._ti._wo._to._fr._so.".split("_"),weekdaysMin:"Si_Mo_Ti_Wo_To_Fr_So".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD-MM-YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[hjoed om] LT",nextDay:"[moarn om] LT",nextWeek:"dddd [om] LT",lastDay:"[juster om] LT",lastWeek:"[\xf4fr\xfbne] dddd [om] LT",sameElse:"L"},relativeTime:{future:"oer %s",past:"%s lyn",s:"in pear sekonden",ss:"%d sekonden",m:"ien min\xfat",mm:"%d minuten",h:"ien oere",hh:"%d oeren",d:"ien dei",dd:"%d dagen",M:"ien moanne",MM:"%d moannen",y:"ien jier",yy:"%d jierren"},dayOfMonthOrdinalParse:/\d{1,2}(ste|de)/,ordinal:function(e){return e+(1===e||8===e||20<=e?"ste":"de")},week:{dow:1,doy:4}});e.defineLocale("ga",{months:["Ean\xe1ir","Feabhra","M\xe1rta","Aibre\xe1n","Bealtaine","Meitheamh","I\xfail","L\xfanasa","Me\xe1n F\xf3mhair","Deireadh F\xf3mhair","Samhain","Nollaig"],monthsShort:["Ean","Feabh","M\xe1rt","Aib","Beal","Meith","I\xfail","L\xfan","M.F.","D.F.","Samh","Noll"],monthsParseExact:!0,weekdays:["D\xe9 Domhnaigh","D\xe9 Luain","D\xe9 M\xe1irt","D\xe9 C\xe9adaoin","D\xe9ardaoin","D\xe9 hAoine","D\xe9 Sathairn"],weekdaysShort:["Domh","Luan","M\xe1irt","C\xe9ad","D\xe9ar","Aoine","Sath"],weekdaysMin:["Do","Lu","M\xe1","C\xe9","D\xe9","A","Sa"],longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Inniu ag] LT",nextDay:"[Am\xe1rach ag] LT",nextWeek:"dddd [ag] LT",lastDay:"[Inn\xe9 ag] LT",lastWeek:"dddd [seo caite] [ag] LT",sameElse:"L"},relativeTime:{future:"i %s",past:"%s \xf3 shin",s:"c\xfapla soicind",ss:"%d soicind",m:"n\xf3im\xe9ad",mm:"%d n\xf3im\xe9ad",h:"uair an chloig",hh:"%d uair an chloig",d:"l\xe1",dd:"%d l\xe1",M:"m\xed",MM:"%d m\xedonna",y:"bliain",yy:"%d bliain"},dayOfMonthOrdinalParse:/\d{1,2}(d|na|mh)/,ordinal:function(e){return e+(1===e?"d":e%10==2?"na":"mh")},week:{dow:1,doy:4}});function ie(e,a,_,s){var d={s:["\u0925\u094b\u0921\u092f\u093e \u0938\u0945\u0915\u0902\u0921\u093e\u0902\u0928\u0940","\u0925\u094b\u0921\u0947 \u0938\u0945\u0915\u0902\u0921"],ss:[e+" \u0938\u0945\u0915\u0902\u0921\u093e\u0902\u0928\u0940",e+" \u0938\u0945\u0915\u0902\u0921"],m:["\u090f\u0915\u093e \u092e\u093f\u0923\u091f\u093e\u0928","\u090f\u0915 \u092e\u093f\u0928\u0942\u091f"],mm:[e+" \u092e\u093f\u0923\u091f\u093e\u0902\u0928\u0940",e+" \u092e\u093f\u0923\u091f\u093e\u0902"],h:["\u090f\u0915\u093e \u0935\u0930\u093e\u0928","\u090f\u0915 \u0935\u0930"],hh:[e+" \u0935\u0930\u093e\u0902\u0928\u0940",e+" \u0935\u0930\u093e\u0902"],d:["\u090f\u0915\u093e \u0926\u093f\u0938\u093e\u0928","\u090f\u0915 \u0926\u0940\u0938"],dd:[e+" \u0926\u093f\u0938\u093e\u0902\u0928\u0940",e+" \u0926\u0940\u0938"],M:["\u090f\u0915\u093e \u092e\u094d\u0939\u092f\u0928\u094d\u092f\u093e\u0928","\u090f\u0915 \u092e\u094d\u0939\u092f\u0928\u094b"],MM:[e+" \u092e\u094d\u0939\u092f\u0928\u094d\u092f\u093e\u0928\u0940",e+" \u092e\u094d\u0939\u092f\u0928\u0947"],y:["\u090f\u0915\u093e \u0935\u0930\u094d\u0938\u093e\u0928","\u090f\u0915 \u0935\u0930\u094d\u0938"],yy:[e+" \u0935\u0930\u094d\u0938\u093e\u0902\u0928\u0940",e+" \u0935\u0930\u094d\u0938\u093e\u0902"]};return s?d[_][0]:d[_][1]}function me(e,a,_,s){var d={s:["thoddea sekondamni","thodde sekond"],ss:[e+" sekondamni",e+" sekond"],m:["eka mintan","ek minut"],mm:[e+" mintamni",e+" mintam"],h:["eka voran","ek vor"],hh:[e+" voramni",e+" voram"],d:["eka disan","ek dis"],dd:[e+" disamni",e+" dis"],M:["eka mhoinean","ek mhoino"],MM:[e+" mhoineamni",e+" mhoine"],y:["eka vorsan","ek voros"],yy:[e+" vorsamni",e+" vorsam"]};return s?d[_][0]:d[_][1]}e.defineLocale("gd",{months:["Am Faoilleach","An Gearran","Am M\xe0rt","An Giblean","An C\xe8itean","An t-\xd2gmhios","An t-Iuchar","An L\xf9nastal","An t-Sultain","An D\xe0mhair","An t-Samhain","An D\xf9bhlachd"],monthsShort:["Faoi","Gear","M\xe0rt","Gibl","C\xe8it","\xd2gmh","Iuch","L\xf9n","Sult","D\xe0mh","Samh","D\xf9bh"],monthsParseExact:!0,weekdays:["Did\xf2mhnaich","Diluain","Dim\xe0irt","Diciadain","Diardaoin","Dihaoine","Disathairne"],weekdaysShort:["Did","Dil","Dim","Dic","Dia","Dih","Dis"],weekdaysMin:["D\xf2","Lu","M\xe0","Ci","Ar","Ha","Sa"],longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[An-diugh aig] LT",nextDay:"[A-m\xe0ireach aig] LT",nextWeek:"dddd [aig] LT",lastDay:"[An-d\xe8 aig] LT",lastWeek:"dddd [seo chaidh] [aig] LT",sameElse:"L"},relativeTime:{future:"ann an %s",past:"bho chionn %s",s:"beagan diogan",ss:"%d diogan",m:"mionaid",mm:"%d mionaidean",h:"uair",hh:"%d uairean",d:"latha",dd:"%d latha",M:"m\xecos",MM:"%d m\xecosan",y:"bliadhna",yy:"%d bliadhna"},dayOfMonthOrdinalParse:/\d{1,2}(d|na|mh)/,ordinal:function(e){return e+(1===e?"d":e%10==2?"na":"mh")},week:{dow:1,doy:4}}),e.defineLocale("gl",{months:"xaneiro_febreiro_marzo_abril_maio_xu\xf1o_xullo_agosto_setembro_outubro_novembro_decembro".split("_"),monthsShort:"xan._feb._mar._abr._mai._xu\xf1._xul._ago._set._out._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"domingo_luns_martes_m\xe9rcores_xoves_venres_s\xe1bado".split("_"),weekdaysShort:"dom._lun._mar._m\xe9r._xov._ven._s\xe1b.".split("_"),weekdaysMin:"do_lu_ma_m\xe9_xo_ve_s\xe1".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY H:mm",LLLL:"dddd, D [de] MMMM [de] YYYY H:mm"},calendar:{sameDay:function(){return"[hoxe "+(1!==this.hours()?"\xe1s":"\xe1")+"] LT"},nextDay:function(){return"[ma\xf1\xe1 "+(1!==this.hours()?"\xe1s":"\xe1")+"] LT"},nextWeek:function(){return"dddd ["+(1!==this.hours()?"\xe1s":"a")+"] LT"},lastDay:function(){return"[onte "+(1!==this.hours()?"\xe1":"a")+"] LT"},lastWeek:function(){return"[o] dddd [pasado "+(1!==this.hours()?"\xe1s":"a")+"] LT"},sameElse:"L"},relativeTime:{future:function(e){return 0===e.indexOf("un")?"n"+e:"en "+e},past:"hai %s",s:"uns segundos",ss:"%d segundos",m:"un minuto",mm:"%d minutos",h:"unha hora",hh:"%d horas",d:"un d\xeda",dd:"%d d\xedas",M:"un mes",MM:"%d meses",y:"un ano",yy:"%d anos"},dayOfMonthOrdinalParse:/\d{1,2}\xba/,ordinal:"%d\xba",week:{dow:1,doy:4}}),e.defineLocale("gom-deva",{months:{standalone:"\u091c\u093e\u0928\u0947\u0935\u093e\u0930\u0940_\u092b\u0947\u092c\u094d\u0930\u0941\u0935\u093e\u0930\u0940_\u092e\u093e\u0930\u094d\u091a_\u090f\u092a\u094d\u0930\u0940\u0932_\u092e\u0947_\u091c\u0942\u0928_\u091c\u0941\u0932\u092f_\u0911\u0917\u0938\u094d\u091f_\u0938\u092a\u094d\u091f\u0947\u0902\u092c\u0930_\u0911\u0915\u094d\u091f\u094b\u092c\u0930_\u0928\u094b\u0935\u094d\u0939\u0947\u0902\u092c\u0930_\u0921\u093f\u0938\u0947\u0902\u092c\u0930".split("_"),format:"\u091c\u093e\u0928\u0947\u0935\u093e\u0930\u0940\u091a\u094d\u092f\u093e_\u092b\u0947\u092c\u094d\u0930\u0941\u0935\u093e\u0930\u0940\u091a\u094d\u092f\u093e_\u092e\u093e\u0930\u094d\u091a\u093e\u091a\u094d\u092f\u093e_\u090f\u092a\u094d\u0930\u0940\u0932\u093e\u091a\u094d\u092f\u093e_\u092e\u0947\u092f\u093e\u091a\u094d\u092f\u093e_\u091c\u0942\u0928\u093e\u091a\u094d\u092f\u093e_\u091c\u0941\u0932\u092f\u093e\u091a\u094d\u092f\u093e_\u0911\u0917\u0938\u094d\u091f\u093e\u091a\u094d\u092f\u093e_\u0938\u092a\u094d\u091f\u0947\u0902\u092c\u0930\u093e\u091a\u094d\u092f\u093e_\u0911\u0915\u094d\u091f\u094b\u092c\u0930\u093e\u091a\u094d\u092f\u093e_\u0928\u094b\u0935\u094d\u0939\u0947\u0902\u092c\u0930\u093e\u091a\u094d\u092f\u093e_\u0921\u093f\u0938\u0947\u0902\u092c\u0930\u093e\u091a\u094d\u092f\u093e".split("_"),isFormat:/MMMM(\s)+D[oD]?/},monthsShort:"\u091c\u093e\u0928\u0947._\u092b\u0947\u092c\u094d\u0930\u0941._\u092e\u093e\u0930\u094d\u091a_\u090f\u092a\u094d\u0930\u0940._\u092e\u0947_\u091c\u0942\u0928_\u091c\u0941\u0932._\u0911\u0917._\u0938\u092a\u094d\u091f\u0947\u0902._\u0911\u0915\u094d\u091f\u094b._\u0928\u094b\u0935\u094d\u0939\u0947\u0902._\u0921\u093f\u0938\u0947\u0902.".split("_"),monthsParseExact:!0,weekdays:"\u0906\u092f\u0924\u093e\u0930_\u0938\u094b\u092e\u093e\u0930_\u092e\u0902\u0917\u0933\u093e\u0930_\u092c\u0941\u0927\u0935\u093e\u0930_\u092c\u093f\u0930\u0947\u0938\u094d\u0924\u093e\u0930_\u0938\u0941\u0915\u094d\u0930\u093e\u0930_\u0936\u0947\u0928\u0935\u093e\u0930".split("_"),weekdaysShort:"\u0906\u092f\u0924._\u0938\u094b\u092e._\u092e\u0902\u0917\u0933._\u092c\u0941\u0927._\u092c\u094d\u0930\u0947\u0938\u094d\u0924._\u0938\u0941\u0915\u094d\u0930._\u0936\u0947\u0928.".split("_"),weekdaysMin:"\u0906_\u0938\u094b_\u092e\u0902_\u092c\u0941_\u092c\u094d\u0930\u0947_\u0938\u0941_\u0936\u0947".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"A h:mm [\u0935\u093e\u091c\u0924\u093e\u0902]",LTS:"A h:mm:ss [\u0935\u093e\u091c\u0924\u093e\u0902]",L:"DD-MM-YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY A h:mm [\u0935\u093e\u091c\u0924\u093e\u0902]",LLLL:"dddd, MMMM Do, YYYY, A h:mm [\u0935\u093e\u091c\u0924\u093e\u0902]",llll:"ddd, D MMM YYYY, A h:mm [\u0935\u093e\u091c\u0924\u093e\u0902]"},calendar:{sameDay:"[\u0906\u092f\u091c] LT",nextDay:"[\u092b\u093e\u0932\u094d\u092f\u093e\u0902] LT",nextWeek:"[\u092b\u0941\u0921\u0932\u094b] dddd[,] LT",lastDay:"[\u0915\u093e\u0932] LT",lastWeek:"[\u092b\u093e\u091f\u0932\u094b] dddd[,] LT",sameElse:"L"},relativeTime:{future:"%s",past:"%s \u0906\u0926\u0940\u0902",s:ie,ss:ie,m:ie,mm:ie,h:ie,hh:ie,d:ie,dd:ie,M:ie,MM:ie,y:ie,yy:ie},dayOfMonthOrdinalParse:/\d{1,2}(\u0935\u0947\u0930)/,ordinal:function(e,a){switch(a){case"D":return e+"\u0935\u0947\u0930";default:case"M":case"Q":case"DDD":case"d":case"w":case"W":return e}},week:{dow:0,doy:3},meridiemParse:/\u0930\u093e\u0924\u0940|\u0938\u0915\u093e\u0933\u0940\u0902|\u0926\u0928\u092a\u093e\u0930\u093e\u0902|\u0938\u093e\u0902\u091c\u0947/,meridiemHour:function(e,a){return 12===e&&(e=0),"\u0930\u093e\u0924\u0940"===a?e<4?e:e+12:"\u0938\u0915\u093e\u0933\u0940\u0902"===a?e:"\u0926\u0928\u092a\u093e\u0930\u093e\u0902"===a?12<e?e:e+12:"\u0938\u093e\u0902\u091c\u0947"===a?e+12:void 0},meridiem:function(e,a,_){return e<4?"\u0930\u093e\u0924\u0940":e<12?"\u0938\u0915\u093e\u0933\u0940\u0902":e<16?"\u0926\u0928\u092a\u093e\u0930\u093e\u0902":e<20?"\u0938\u093e\u0902\u091c\u0947":"\u0930\u093e\u0924\u0940"}}),e.defineLocale("gom-latn",{months:{standalone:"Janer_Febrer_Mars_Abril_Mai_Jun_Julai_Agost_Setembr_Otubr_Novembr_Dezembr".split("_"),format:"Janerachea_Febrerachea_Marsachea_Abrilachea_Maiachea_Junachea_Julaiachea_Agostachea_Setembrachea_Otubrachea_Novembrachea_Dezembrachea".split("_"),isFormat:/MMMM(\s)+D[oD]?/},monthsShort:"Jan._Feb._Mars_Abr._Mai_Jun_Jul._Ago._Set._Otu._Nov._Dez.".split("_"),monthsParseExact:!0,weekdays:"Aitar_Somar_Mongllar_Budhvar_Birestar_Sukrar_Son'var".split("_"),weekdaysShort:"Ait._Som._Mon._Bud._Bre._Suk._Son.".split("_"),weekdaysMin:"Ai_Sm_Mo_Bu_Br_Su_Sn".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"A h:mm [vazta]",LTS:"A h:mm:ss [vazta]",L:"DD-MM-YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY A h:mm [vazta]",LLLL:"dddd, MMMM Do, YYYY, A h:mm [vazta]",llll:"ddd, D MMM YYYY, A h:mm [vazta]"},calendar:{sameDay:"[Aiz] LT",nextDay:"[Faleam] LT",nextWeek:"[Fuddlo] dddd[,] LT",lastDay:"[Kal] LT",lastWeek:"[Fattlo] dddd[,] LT",sameElse:"L"},relativeTime:{future:"%s",past:"%s adim",s:me,ss:me,m:me,mm:me,h:me,hh:me,d:me,dd:me,M:me,MM:me,y:me,yy:me},dayOfMonthOrdinalParse:/\d{1,2}(er)/,ordinal:function(e,a){switch(a){case"D":return e+"er";default:case"M":case"Q":case"DDD":case"d":case"w":case"W":return e}},week:{dow:0,doy:3},meridiemParse:/rati|sokallim|donparam|sanje/,meridiemHour:function(e,a){return 12===e&&(e=0),"rati"===a?e<4?e:e+12:"sokallim"===a?e:"donparam"===a?12<e?e:e+12:"sanje"===a?e+12:void 0},meridiem:function(e,a,_){return e<4?"rati":e<12?"sokallim":e<16?"donparam":e<20?"sanje":"rati"}});var oe={1:"\u0ae7",2:"\u0ae8",3:"\u0ae9",4:"\u0aea",5:"\u0aeb",6:"\u0aec",7:"\u0aed",8:"\u0aee",9:"\u0aef",0:"\u0ae6"},ue={"\u0ae7":"1","\u0ae8":"2","\u0ae9":"3","\u0aea":"4","\u0aeb":"5","\u0aec":"6","\u0aed":"7","\u0aee":"8","\u0aef":"9","\u0ae6":"0"};e.defineLocale("gu",{months:"\u0a9c\u0abe\u0aa8\u0acd\u0aaf\u0ac1\u0a86\u0ab0\u0ac0_\u0aab\u0ac7\u0aac\u0acd\u0ab0\u0ac1\u0a86\u0ab0\u0ac0_\u0aae\u0abe\u0ab0\u0acd\u0a9a_\u0a8f\u0aaa\u0acd\u0ab0\u0abf\u0ab2_\u0aae\u0ac7_\u0a9c\u0ac2\u0aa8_\u0a9c\u0ac1\u0ab2\u0abe\u0a88_\u0a91\u0a97\u0ab8\u0acd\u0a9f_\u0ab8\u0aaa\u0acd\u0a9f\u0ac7\u0aae\u0acd\u0aac\u0ab0_\u0a91\u0a95\u0acd\u0a9f\u0acd\u0aac\u0ab0_\u0aa8\u0ab5\u0ac7\u0aae\u0acd\u0aac\u0ab0_\u0aa1\u0abf\u0ab8\u0ac7\u0aae\u0acd\u0aac\u0ab0".split("_"),monthsShort:"\u0a9c\u0abe\u0aa8\u0acd\u0aaf\u0ac1._\u0aab\u0ac7\u0aac\u0acd\u0ab0\u0ac1._\u0aae\u0abe\u0ab0\u0acd\u0a9a_\u0a8f\u0aaa\u0acd\u0ab0\u0abf._\u0aae\u0ac7_\u0a9c\u0ac2\u0aa8_\u0a9c\u0ac1\u0ab2\u0abe._\u0a91\u0a97._\u0ab8\u0aaa\u0acd\u0a9f\u0ac7._\u0a91\u0a95\u0acd\u0a9f\u0acd._\u0aa8\u0ab5\u0ac7._\u0aa1\u0abf\u0ab8\u0ac7.".split("_"),monthsParseExact:!0,weekdays:"\u0ab0\u0ab5\u0abf\u0ab5\u0abe\u0ab0_\u0ab8\u0acb\u0aae\u0ab5\u0abe\u0ab0_\u0aae\u0a82\u0a97\u0ab3\u0ab5\u0abe\u0ab0_\u0aac\u0ac1\u0aa7\u0acd\u0ab5\u0abe\u0ab0_\u0a97\u0ac1\u0ab0\u0ac1\u0ab5\u0abe\u0ab0_\u0ab6\u0ac1\u0a95\u0acd\u0ab0\u0ab5\u0abe\u0ab0_\u0ab6\u0aa8\u0abf\u0ab5\u0abe\u0ab0".split("_"),weekdaysShort:"\u0ab0\u0ab5\u0abf_\u0ab8\u0acb\u0aae_\u0aae\u0a82\u0a97\u0ab3_\u0aac\u0ac1\u0aa7\u0acd_\u0a97\u0ac1\u0ab0\u0ac1_\u0ab6\u0ac1\u0a95\u0acd\u0ab0_\u0ab6\u0aa8\u0abf".split("_"),weekdaysMin:"\u0ab0_\u0ab8\u0acb_\u0aae\u0a82_\u0aac\u0ac1_\u0a97\u0ac1_\u0ab6\u0ac1_\u0ab6".split("_"),longDateFormat:{LT:"A h:mm \u0ab5\u0abe\u0a97\u0acd\u0aaf\u0ac7",LTS:"A h:mm:ss \u0ab5\u0abe\u0a97\u0acd\u0aaf\u0ac7",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm \u0ab5\u0abe\u0a97\u0acd\u0aaf\u0ac7",LLLL:"dddd, D MMMM YYYY, A h:mm \u0ab5\u0abe\u0a97\u0acd\u0aaf\u0ac7"},calendar:{sameDay:"[\u0a86\u0a9c] LT",nextDay:"[\u0a95\u0abe\u0ab2\u0ac7] LT",nextWeek:"dddd, LT",lastDay:"[\u0a97\u0a87\u0a95\u0abe\u0ab2\u0ac7] LT",lastWeek:"[\u0aaa\u0abe\u0a9b\u0ab2\u0abe] dddd, LT",sameElse:"L"},relativeTime:{future:"%s \u0aae\u0abe",past:"%s \u0aaa\u0ab9\u0ac7\u0ab2\u0abe",s:"\u0a85\u0aae\u0ac1\u0a95 \u0aaa\u0ab3\u0acb",ss:"%d \u0ab8\u0ac7\u0a95\u0a82\u0aa1",m:"\u0a8f\u0a95 \u0aae\u0abf\u0aa8\u0abf\u0a9f",mm:"%d \u0aae\u0abf\u0aa8\u0abf\u0a9f",h:"\u0a8f\u0a95 \u0a95\u0ab2\u0abe\u0a95",hh:"%d \u0a95\u0ab2\u0abe\u0a95",d:"\u0a8f\u0a95 \u0aa6\u0abf\u0ab5\u0ab8",dd:"%d \u0aa6\u0abf\u0ab5\u0ab8",M:"\u0a8f\u0a95 \u0aae\u0ab9\u0abf\u0aa8\u0acb",MM:"%d \u0aae\u0ab9\u0abf\u0aa8\u0acb",y:"\u0a8f\u0a95 \u0ab5\u0ab0\u0acd\u0ab7",yy:"%d \u0ab5\u0ab0\u0acd\u0ab7"},preparse:function(e){return e.replace(/[\u0ae7\u0ae8\u0ae9\u0aea\u0aeb\u0aec\u0aed\u0aee\u0aef\u0ae6]/g,function(e){return ue[e]})},postformat:function(e){return e.replace(/\d/g,function(e){return oe[e]})},meridiemParse:/\u0ab0\u0abe\u0aa4|\u0aac\u0aaa\u0acb\u0ab0|\u0ab8\u0ab5\u0abe\u0ab0|\u0ab8\u0abe\u0a82\u0a9c/,meridiemHour:function(e,a){return 12===e&&(e=0),"\u0ab0\u0abe\u0aa4"===a?e<4?e:e+12:"\u0ab8\u0ab5\u0abe\u0ab0"===a?e:"\u0aac\u0aaa\u0acb\u0ab0"===a?10<=e?e:e+12:"\u0ab8\u0abe\u0a82\u0a9c"===a?e+12:void 0},meridiem:function(e,a,_){return e<4?"\u0ab0\u0abe\u0aa4":e<10?"\u0ab8\u0ab5\u0abe\u0ab0":e<17?"\u0aac\u0aaa\u0acb\u0ab0":e<20?"\u0ab8\u0abe\u0a82\u0a9c":"\u0ab0\u0abe\u0aa4"},week:{dow:0,doy:6}}),e.defineLocale("he",{months:"\u05d9\u05e0\u05d5\u05d0\u05e8_\u05e4\u05d1\u05e8\u05d5\u05d0\u05e8_\u05de\u05e8\u05e5_\u05d0\u05e4\u05e8\u05d9\u05dc_\u05de\u05d0\u05d9_\u05d9\u05d5\u05e0\u05d9_\u05d9\u05d5\u05dc\u05d9_\u05d0\u05d5\u05d2\u05d5\u05e1\u05d8_\u05e1\u05e4\u05d8\u05de\u05d1\u05e8_\u05d0\u05d5\u05e7\u05d8\u05d5\u05d1\u05e8_\u05e0\u05d5\u05d1\u05de\u05d1\u05e8_\u05d3\u05e6\u05de\u05d1\u05e8".split("_"),monthsShort:"\u05d9\u05e0\u05d5\u05f3_\u05e4\u05d1\u05e8\u05f3_\u05de\u05e8\u05e5_\u05d0\u05e4\u05e8\u05f3_\u05de\u05d0\u05d9_\u05d9\u05d5\u05e0\u05d9_\u05d9\u05d5\u05dc\u05d9_\u05d0\u05d5\u05d2\u05f3_\u05e1\u05e4\u05d8\u05f3_\u05d0\u05d5\u05e7\u05f3_\u05e0\u05d5\u05d1\u05f3_\u05d3\u05e6\u05de\u05f3".split("_"),weekdays:"\u05e8\u05d0\u05e9\u05d5\u05df_\u05e9\u05e0\u05d9_\u05e9\u05dc\u05d9\u05e9\u05d9_\u05e8\u05d1\u05d9\u05e2\u05d9_\u05d7\u05de\u05d9\u05e9\u05d9_\u05e9\u05d9\u05e9\u05d9_\u05e9\u05d1\u05ea".split("_"),weekdaysShort:"\u05d0\u05f3_\u05d1\u05f3_\u05d2\u05f3_\u05d3\u05f3_\u05d4\u05f3_\u05d5\u05f3_\u05e9\u05f3".split("_"),weekdaysMin:"\u05d0_\u05d1_\u05d2_\u05d3_\u05d4_\u05d5_\u05e9".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D [\u05d1]MMMM YYYY",LLL:"D [\u05d1]MMMM YYYY HH:mm",LLLL:"dddd, D [\u05d1]MMMM YYYY HH:mm",l:"D/M/YYYY",ll:"D MMM YYYY",lll:"D MMM YYYY HH:mm",llll:"ddd, D MMM YYYY HH:mm"},calendar:{sameDay:"[\u05d4\u05d9\u05d5\u05dd \u05d1\u05be]LT",nextDay:"[\u05de\u05d7\u05e8 \u05d1\u05be]LT",nextWeek:"dddd [\u05d1\u05e9\u05e2\u05d4] LT",lastDay:"[\u05d0\u05ea\u05de\u05d5\u05dc \u05d1\u05be]LT",lastWeek:"[\u05d1\u05d9\u05d5\u05dd] dddd [\u05d4\u05d0\u05d7\u05e8\u05d5\u05df \u05d1\u05e9\u05e2\u05d4] LT",sameElse:"L"},relativeTime:{future:"\u05d1\u05e2\u05d5\u05d3 %s",past:"\u05dc\u05e4\u05e0\u05d9 %s",s:"\u05de\u05e1\u05e4\u05e8 \u05e9\u05e0\u05d9\u05d5\u05ea",ss:"%d \u05e9\u05e0\u05d9\u05d5\u05ea",m:"\u05d3\u05e7\u05d4",mm:"%d \u05d3\u05e7\u05d5\u05ea",h:"\u05e9\u05e2\u05d4",hh:function(e){return 2===e?"\u05e9\u05e2\u05ea\u05d9\u05d9\u05dd":e+" \u05e9\u05e2\u05d5\u05ea"},d:"\u05d9\u05d5\u05dd",dd:function(e){return 2===e?"\u05d9\u05d5\u05de\u05d9\u05d9\u05dd":e+" \u05d9\u05de\u05d9\u05dd"},M:"\u05d7\u05d5\u05d3\u05e9",MM:function(e){return 2===e?"\u05d7\u05d5\u05d3\u05e9\u05d9\u05d9\u05dd":e+" \u05d7\u05d5\u05d3\u05e9\u05d9\u05dd"},y:"\u05e9\u05e0\u05d4",yy:function(e){return 2===e?"\u05e9\u05e0\u05ea\u05d9\u05d9\u05dd":e%10==0&&10!==e?e+" \u05e9\u05e0\u05d4":e+" \u05e9\u05e0\u05d9\u05dd"}},meridiemParse:/\u05d0\u05d7\u05d4"\u05e6|\u05dc\u05e4\u05e0\u05d4"\u05e6|\u05d0\u05d7\u05e8\u05d9 \u05d4\u05e6\u05d4\u05e8\u05d9\u05d9\u05dd|\u05dc\u05e4\u05e0\u05d9 \u05d4\u05e6\u05d4\u05e8\u05d9\u05d9\u05dd|\u05dc\u05e4\u05e0\u05d5\u05ea \u05d1\u05d5\u05e7\u05e8|\u05d1\u05d1\u05d5\u05e7\u05e8|\u05d1\u05e2\u05e8\u05d1/i,isPM:function(e){return/^(\u05d0\u05d7\u05d4"\u05e6|\u05d0\u05d7\u05e8\u05d9 \u05d4\u05e6\u05d4\u05e8\u05d9\u05d9\u05dd|\u05d1\u05e2\u05e8\u05d1)$/.test(e)},meridiem:function(e,a,_){return e<5?"\u05dc\u05e4\u05e0\u05d5\u05ea \u05d1\u05d5\u05e7\u05e8":e<10?"\u05d1\u05d1\u05d5\u05e7\u05e8":e<12?_?'\u05dc\u05e4\u05e0\u05d4"\u05e6':"\u05dc\u05e4\u05e0\u05d9 \u05d4\u05e6\u05d4\u05e8\u05d9\u05d9\u05dd":e<18?_?'\u05d0\u05d7\u05d4"\u05e6':"\u05d0\u05d7\u05e8\u05d9 \u05d4\u05e6\u05d4\u05e8\u05d9\u05d9\u05dd":"\u05d1\u05e2\u05e8\u05d1"}});var le={1:"\u0967",2:"\u0968",3:"\u0969",4:"\u096a",5:"\u096b",6:"\u096c",7:"\u096d",8:"\u096e",9:"\u096f",0:"\u0966"},Me={"\u0967":"1","\u0968":"2","\u0969":"3","\u096a":"4","\u096b":"5","\u096c":"6","\u096d":"7","\u096e":"8","\u096f":"9","\u0966":"0"};function Le(e,a,_){var s=e+" ";switch(_){case"ss":return s+=1===e?"sekunda":2===e||3===e||4===e?"sekunde":"sekundi";case"m":return a?"jedna minuta":"jedne minute";case"mm":return s+=1!==e&&(2===e||3===e||4===e)?"minute":"minuta";case"h":return a?"jedan sat":"jednog sata";case"hh":return s+=1===e?"sat":2===e||3===e||4===e?"sata":"sati";case"dd":return s+=1===e?"dan":"dana";case"MM":return s+=1===e?"mjesec":2===e||3===e||4===e?"mjeseca":"mjeseci";case"yy":return s+=1!==e&&(2===e||3===e||4===e)?"godine":"godina"}}e.defineLocale("hi",{months:"\u091c\u0928\u0935\u0930\u0940_\u092b\u093c\u0930\u0935\u0930\u0940_\u092e\u093e\u0930\u094d\u091a_\u0905\u092a\u094d\u0930\u0948\u0932_\u092e\u0908_\u091c\u0942\u0928_\u091c\u0941\u0932\u093e\u0908_\u0905\u0917\u0938\u094d\u0924_\u0938\u093f\u0924\u092e\u094d\u092c\u0930_\u0905\u0915\u094d\u091f\u0942\u092c\u0930_\u0928\u0935\u092e\u094d\u092c\u0930_\u0926\u093f\u0938\u092e\u094d\u092c\u0930".split("_"),monthsShort:"\u091c\u0928._\u092b\u093c\u0930._\u092e\u093e\u0930\u094d\u091a_\u0905\u092a\u094d\u0930\u0948._\u092e\u0908_\u091c\u0942\u0928_\u091c\u0941\u0932._\u0905\u0917._\u0938\u093f\u0924._\u0905\u0915\u094d\u091f\u0942._\u0928\u0935._\u0926\u093f\u0938.".split("_"),monthsParseExact:!0,weekdays:"\u0930\u0935\u093f\u0935\u093e\u0930_\u0938\u094b\u092e\u0935\u093e\u0930_\u092e\u0902\u0917\u0932\u0935\u093e\u0930_\u092c\u0941\u0927\u0935\u093e\u0930_\u0917\u0941\u0930\u0942\u0935\u093e\u0930_\u0936\u0941\u0915\u094d\u0930\u0935\u093e\u0930_\u0936\u0928\u093f\u0935\u093e\u0930".split("_"),weekdaysShort:"\u0930\u0935\u093f_\u0938\u094b\u092e_\u092e\u0902\u0917\u0932_\u092c\u0941\u0927_\u0917\u0941\u0930\u0942_\u0936\u0941\u0915\u094d\u0930_\u0936\u0928\u093f".split("_"),weekdaysMin:"\u0930_\u0938\u094b_\u092e\u0902_\u092c\u0941_\u0917\u0941_\u0936\u0941_\u0936".split("_"),longDateFormat:{LT:"A h:mm \u092c\u091c\u0947",LTS:"A h:mm:ss \u092c\u091c\u0947",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm \u092c\u091c\u0947",LLLL:"dddd, D MMMM YYYY, A h:mm \u092c\u091c\u0947"},calendar:{sameDay:"[\u0906\u091c] LT",nextDay:"[\u0915\u0932] LT",nextWeek:"dddd, LT",lastDay:"[\u0915\u0932] LT",lastWeek:"[\u092a\u093f\u091b\u0932\u0947] dddd, LT",sameElse:"L"},relativeTime:{future:"%s \u092e\u0947\u0902",past:"%s \u092a\u0939\u0932\u0947",s:"\u0915\u0941\u091b \u0939\u0940 \u0915\u094d\u0937\u0923",ss:"%d \u0938\u0947\u0915\u0902\u0921",m:"\u090f\u0915 \u092e\u093f\u0928\u091f",mm:"%d \u092e\u093f\u0928\u091f",h:"\u090f\u0915 \u0918\u0902\u091f\u093e",hh:"%d \u0918\u0902\u091f\u0947",d:"\u090f\u0915 \u0926\u093f\u0928",dd:"%d \u0926\u093f\u0928",M:"\u090f\u0915 \u092e\u0939\u0940\u0928\u0947",MM:"%d \u092e\u0939\u0940\u0928\u0947",y:"\u090f\u0915 \u0935\u0930\u094d\u0937",yy:"%d \u0935\u0930\u094d\u0937"},preparse:function(e){return e.replace(/[\u0967\u0968\u0969\u096a\u096b\u096c\u096d\u096e\u096f\u0966]/g,function(e){return Me[e]})},postformat:function(e){return e.replace(/\d/g,function(e){return le[e]})},meridiemParse:/\u0930\u093e\u0924|\u0938\u0941\u092c\u0939|\u0926\u094b\u092a\u0939\u0930|\u0936\u093e\u092e/,meridiemHour:function(e,a){return 12===e&&(e=0),"\u0930\u093e\u0924"===a?e<4?e:e+12:"\u0938\u0941\u092c\u0939"===a?e:"\u0926\u094b\u092a\u0939\u0930"===a?10<=e?e:e+12:"\u0936\u093e\u092e"===a?e+12:void 0},meridiem:function(e,a,_){return e<4?"\u0930\u093e\u0924":e<10?"\u0938\u0941\u092c\u0939":e<17?"\u0926\u094b\u092a\u0939\u0930":e<20?"\u0936\u093e\u092e":"\u0930\u093e\u0924"},week:{dow:0,doy:6}}),e.defineLocale("hr",{months:{format:"sije\u010dnja_velja\u010de_o\u017eujka_travnja_svibnja_lipnja_srpnja_kolovoza_rujna_listopada_studenoga_prosinca".split("_"),standalone:"sije\u010danj_velja\u010da_o\u017eujak_travanj_svibanj_lipanj_srpanj_kolovoz_rujan_listopad_studeni_prosinac".split("_")},monthsShort:"sij._velj._o\u017eu._tra._svi._lip._srp._kol._ruj._lis._stu._pro.".split("_"),monthsParseExact:!0,weekdays:"nedjelja_ponedjeljak_utorak_srijeda_\u010detvrtak_petak_subota".split("_"),weekdaysShort:"ned._pon._uto._sri._\u010det._pet._sub.".split("_"),weekdaysMin:"ne_po_ut_sr_\u010de_pe_su".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"Do MMMM YYYY",LLL:"Do MMMM YYYY H:mm",LLLL:"dddd, Do MMMM YYYY H:mm"},calendar:{sameDay:"[danas u] LT",nextDay:"[sutra u] LT",nextWeek:function(){switch(this.day()){case 0:return"[u] [nedjelju] [u] LT";case 3:return"[u] [srijedu] [u] LT";case 6:return"[u] [subotu] [u] LT";case 1:case 2:case 4:case 5:return"[u] dddd [u] LT"}},lastDay:"[ju\u010der u] LT",lastWeek:function(){switch(this.day()){case 0:return"[pro\u0161lu] [nedjelju] [u] LT";case 3:return"[pro\u0161lu] [srijedu] [u] LT";case 6:return"[pro\u0161le] [subote] [u] LT";case 1:case 2:case 4:case 5:return"[pro\u0161li] dddd [u] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"prije %s",s:"par sekundi",ss:Le,m:Le,mm:Le,h:Le,hh:Le,d:"dan",dd:Le,M:"mjesec",MM:Le,y:"godinu",yy:Le},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}});var Ye="vas\xe1rnap h\xe9tf\u0151n kedden szerd\xe1n cs\xfct\xf6rt\xf6k\xf6n p\xe9nteken szombaton".split(" ");function he(e,a,_,s){var d=e;switch(_){case"s":return s||a?"n\xe9h\xe1ny m\xe1sodperc":"n\xe9h\xe1ny m\xe1sodperce";case"ss":return d+(s||a)?" m\xe1sodperc":" m\xe1sodperce";case"m":return"egy"+(s||a?" perc":" perce");case"mm":return d+(s||a?" perc":" perce");case"h":return"egy"+(s||a?" \xf3ra":" \xf3r\xe1ja");case"hh":return d+(s||a?" \xf3ra":" \xf3r\xe1ja");case"d":return"egy"+(s||a?" nap":" napja");case"dd":return d+(s||a?" nap":" napja");case"M":return"egy"+(s||a?" h\xf3nap":" h\xf3napja");case"MM":return d+(s||a?" h\xf3nap":" h\xf3napja");case"y":return"egy"+(s||a?" \xe9v":" \xe9ve");case"yy":return d+(s||a?" \xe9v":" \xe9ve")}return""}function ye(e){return(e?"":"[m\xfalt] ")+"["+Ye[this.day()]+"] LT[-kor]"}function ce(e){return e%100==11||e%10!=1}function ke(e,a,_,s){var d=e+" ";switch(_){case"s":return a||s?"nokkrar sek\xfandur":"nokkrum sek\xfandum";case"ss":return ce(e)?d+(a||s?"sek\xfandur":"sek\xfandum"):d+"sek\xfanda";case"m":return a?"m\xedn\xfata":"m\xedn\xfatu";case"mm":return ce(e)?d+(a||s?"m\xedn\xfatur":"m\xedn\xfatum"):a?d+"m\xedn\xfata":d+"m\xedn\xfatu";case"hh":return ce(e)?d+(a||s?"klukkustundir":"klukkustundum"):d+"klukkustund";case"d":return a?"dagur":s?"dag":"degi";case"dd":return ce(e)?a?d+"dagar":d+(s?"daga":"d\xf6gum"):a?d+"dagur":d+(s?"dag":"degi");case"M":return a?"m\xe1nu\xf0ur":s?"m\xe1nu\xf0":"m\xe1nu\xf0i";case"MM":return ce(e)?a?d+"m\xe1nu\xf0ir":d+(s?"m\xe1nu\xf0i":"m\xe1nu\xf0um"):a?d+"m\xe1nu\xf0ur":d+(s?"m\xe1nu\xf0":"m\xe1nu\xf0i");case"y":return a||s?"\xe1r":"\xe1ri";case"yy":return ce(e)?d+(a||s?"\xe1r":"\xe1rum"):d+(a||s?"\xe1r":"\xe1ri")}}e.defineLocale("hu",{months:"janu\xe1r_febru\xe1r_m\xe1rcius_\xe1prilis_m\xe1jus_j\xfanius_j\xfalius_augusztus_szeptember_okt\xf3ber_november_december".split("_"),monthsShort:"jan_feb_m\xe1rc_\xe1pr_m\xe1j_j\xfan_j\xfal_aug_szept_okt_nov_dec".split("_"),weekdays:"vas\xe1rnap_h\xe9tf\u0151_kedd_szerda_cs\xfct\xf6rt\xf6k_p\xe9ntek_szombat".split("_"),weekdaysShort:"vas_h\xe9t_kedd_sze_cs\xfct_p\xe9n_szo".split("_"),weekdaysMin:"v_h_k_sze_cs_p_szo".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"YYYY.MM.DD.",LL:"YYYY. MMMM D.",LLL:"YYYY. MMMM D. H:mm",LLLL:"YYYY. MMMM D., dddd H:mm"},meridiemParse:/de|du/i,isPM:function(e){return"u"===e.charAt(1).toLowerCase()},meridiem:function(e,a,_){return e<12?!0===_?"de":"DE":!0===_?"du":"DU"},calendar:{sameDay:"[ma] LT[-kor]",nextDay:"[holnap] LT[-kor]",nextWeek:function(){return ye.call(this,!0)},lastDay:"[tegnap] LT[-kor]",lastWeek:function(){return ye.call(this,!1)},sameElse:"L"},relativeTime:{future:"%s m\xfalva",past:"%s",s:he,ss:he,m:he,mm:he,h:he,hh:he,d:he,dd:he,M:he,MM:he,y:he,yy:he},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}}),e.defineLocale("hy-am",{months:{format:"\u0570\u0578\u0582\u0576\u057e\u0561\u0580\u056b_\u0583\u0565\u057f\u0580\u057e\u0561\u0580\u056b_\u0574\u0561\u0580\u057f\u056b_\u0561\u057a\u0580\u056b\u056c\u056b_\u0574\u0561\u0575\u056b\u057d\u056b_\u0570\u0578\u0582\u0576\u056b\u057d\u056b_\u0570\u0578\u0582\u056c\u056b\u057d\u056b_\u0585\u0563\u0578\u057d\u057f\u0578\u057d\u056b_\u057d\u0565\u057a\u057f\u0565\u0574\u0562\u0565\u0580\u056b_\u0570\u0578\u056f\u057f\u0565\u0574\u0562\u0565\u0580\u056b_\u0576\u0578\u0575\u0565\u0574\u0562\u0565\u0580\u056b_\u0564\u0565\u056f\u057f\u0565\u0574\u0562\u0565\u0580\u056b".split("_"),standalone:"\u0570\u0578\u0582\u0576\u057e\u0561\u0580_\u0583\u0565\u057f\u0580\u057e\u0561\u0580_\u0574\u0561\u0580\u057f_\u0561\u057a\u0580\u056b\u056c_\u0574\u0561\u0575\u056b\u057d_\u0570\u0578\u0582\u0576\u056b\u057d_\u0570\u0578\u0582\u056c\u056b\u057d_\u0585\u0563\u0578\u057d\u057f\u0578\u057d_\u057d\u0565\u057a\u057f\u0565\u0574\u0562\u0565\u0580_\u0570\u0578\u056f\u057f\u0565\u0574\u0562\u0565\u0580_\u0576\u0578\u0575\u0565\u0574\u0562\u0565\u0580_\u0564\u0565\u056f\u057f\u0565\u0574\u0562\u0565\u0580".split("_")},monthsShort:"\u0570\u0576\u057e_\u0583\u057f\u0580_\u0574\u0580\u057f_\u0561\u057a\u0580_\u0574\u0575\u057d_\u0570\u0576\u057d_\u0570\u056c\u057d_\u0585\u0563\u057d_\u057d\u057a\u057f_\u0570\u056f\u057f_\u0576\u0574\u0562_\u0564\u056f\u057f".split("_"),weekdays:"\u056f\u056b\u0580\u0561\u056f\u056b_\u0565\u0580\u056f\u0578\u0582\u0577\u0561\u0562\u0569\u056b_\u0565\u0580\u0565\u0584\u0577\u0561\u0562\u0569\u056b_\u0579\u0578\u0580\u0565\u0584\u0577\u0561\u0562\u0569\u056b_\u0570\u056b\u0576\u0563\u0577\u0561\u0562\u0569\u056b_\u0578\u0582\u0580\u0562\u0561\u0569_\u0577\u0561\u0562\u0561\u0569".split("_"),weekdaysShort:"\u056f\u0580\u056f_\u0565\u0580\u056f_\u0565\u0580\u0584_\u0579\u0580\u0584_\u0570\u0576\u0563_\u0578\u0582\u0580\u0562_\u0577\u0562\u0569".split("_"),weekdaysMin:"\u056f\u0580\u056f_\u0565\u0580\u056f_\u0565\u0580\u0584_\u0579\u0580\u0584_\u0570\u0576\u0563_\u0578\u0582\u0580\u0562_\u0577\u0562\u0569".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY \u0569.",LLL:"D MMMM YYYY \u0569., HH:mm",LLLL:"dddd, D MMMM YYYY \u0569., HH:mm"},calendar:{sameDay:"[\u0561\u0575\u057d\u0585\u0580] LT",nextDay:"[\u057e\u0561\u0572\u0568] LT",lastDay:"[\u0565\u0580\u0565\u056f] LT",nextWeek:function(){return"dddd [\u0585\u0580\u0568 \u056a\u0561\u0574\u0568] LT"},lastWeek:function(){return"[\u0561\u0576\u0581\u0561\u056e] dddd [\u0585\u0580\u0568 \u056a\u0561\u0574\u0568] LT"},sameElse:"L"},relativeTime:{future:"%s \u0570\u0565\u057f\u0578",past:"%s \u0561\u057c\u0561\u057b",s:"\u0574\u056b \u0584\u0561\u0576\u056b \u057e\u0561\u0575\u0580\u056f\u0575\u0561\u0576",ss:"%d \u057e\u0561\u0575\u0580\u056f\u0575\u0561\u0576",m:"\u0580\u0578\u057a\u0565",mm:"%d \u0580\u0578\u057a\u0565",h:"\u056a\u0561\u0574",hh:"%d \u056a\u0561\u0574",d:"\u0585\u0580",dd:"%d \u0585\u0580",M:"\u0561\u0574\u056b\u057d",MM:"%d \u0561\u0574\u056b\u057d",y:"\u057f\u0561\u0580\u056b",yy:"%d \u057f\u0561\u0580\u056b"},meridiemParse:/\u0563\u056b\u0577\u0565\u0580\u057e\u0561|\u0561\u057c\u0561\u057e\u0578\u057f\u057e\u0561|\u0581\u0565\u0580\u0565\u056f\u057e\u0561|\u0565\u0580\u0565\u056f\u0578\u0575\u0561\u0576/,isPM:function(e){return/^(\u0581\u0565\u0580\u0565\u056f\u057e\u0561|\u0565\u0580\u0565\u056f\u0578\u0575\u0561\u0576)$/.test(e)},meridiem:function(e){return e<4?"\u0563\u056b\u0577\u0565\u0580\u057e\u0561":e<12?"\u0561\u057c\u0561\u057e\u0578\u057f\u057e\u0561":e<17?"\u0581\u0565\u0580\u0565\u056f\u057e\u0561":"\u0565\u0580\u0565\u056f\u0578\u0575\u0561\u0576"},dayOfMonthOrdinalParse:/\d{1,2}|\d{1,2}-(\u056b\u0576|\u0580\u0564)/,ordinal:function(e,a){switch(a){case"DDD":case"w":case"W":case"DDDo":return 1===e?e+"-\u056b\u0576":e+"-\u0580\u0564";default:return e}},week:{dow:1,doy:7}}),e.defineLocale("id",{months:"Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_November_Desember".split("_"),monthsShort:"Jan_Feb_Mar_Apr_Mei_Jun_Jul_Agt_Sep_Okt_Nov_Des".split("_"),weekdays:"Minggu_Senin_Selasa_Rabu_Kamis_Jumat_Sabtu".split("_"),weekdaysShort:"Min_Sen_Sel_Rab_Kam_Jum_Sab".split("_"),weekdaysMin:"Mg_Sn_Sl_Rb_Km_Jm_Sb".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [pukul] HH.mm",LLLL:"dddd, D MMMM YYYY [pukul] HH.mm"},meridiemParse:/pagi|siang|sore|malam/,meridiemHour:function(e,a){return 12===e&&(e=0),"pagi"===a?e:"siang"===a?11<=e?e:e+12:"sore"===a||"malam"===a?e+12:void 0},meridiem:function(e,a,_){return e<11?"pagi":e<15?"siang":e<19?"sore":"malam"},calendar:{sameDay:"[Hari ini pukul] LT",nextDay:"[Besok pukul] LT",nextWeek:"dddd [pukul] LT",lastDay:"[Kemarin pukul] LT",lastWeek:"dddd [lalu pukul] LT",sameElse:"L"},relativeTime:{future:"dalam %s",past:"%s yang lalu",s:"beberapa detik",ss:"%d detik",m:"semenit",mm:"%d menit",h:"sejam",hh:"%d jam",d:"sehari",dd:"%d hari",M:"sebulan",MM:"%d bulan",y:"setahun",yy:"%d tahun"},week:{dow:0,doy:6}}),e.defineLocale("is",{months:"jan\xfaar_febr\xfaar_mars_apr\xedl_ma\xed_j\xfan\xed_j\xfal\xed_\xe1g\xfast_september_okt\xf3ber_n\xf3vember_desember".split("_"),monthsShort:"jan_feb_mar_apr_ma\xed_j\xfan_j\xfal_\xe1g\xfa_sep_okt_n\xf3v_des".split("_"),weekdays:"sunnudagur_m\xe1nudagur_\xferi\xf0judagur_mi\xf0vikudagur_fimmtudagur_f\xf6studagur_laugardagur".split("_"),weekdaysShort:"sun_m\xe1n_\xferi_mi\xf0_fim_f\xf6s_lau".split("_"),weekdaysMin:"Su_M\xe1_\xder_Mi_Fi_F\xf6_La".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY [kl.] H:mm",LLLL:"dddd, D. MMMM YYYY [kl.] H:mm"},calendar:{sameDay:"[\xed dag kl.] LT",nextDay:"[\xe1 morgun kl.] LT",nextWeek:"dddd [kl.] LT",lastDay:"[\xed g\xe6r kl.] LT",lastWeek:"[s\xed\xf0asta] dddd [kl.] LT",sameElse:"L"},relativeTime:{future:"eftir %s",past:"fyrir %s s\xed\xf0an",s:ke,ss:ke,m:ke,mm:ke,h:"klukkustund",hh:ke,d:ke,dd:ke,M:ke,MM:ke,y:ke,yy:ke},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}}),e.defineLocale("it-ch",{months:"gennaio_febbraio_marzo_aprile_maggio_giugno_luglio_agosto_settembre_ottobre_novembre_dicembre".split("_"),monthsShort:"gen_feb_mar_apr_mag_giu_lug_ago_set_ott_nov_dic".split("_"),weekdays:"domenica_luned\xec_marted\xec_mercoled\xec_gioved\xec_venerd\xec_sabato".split("_"),weekdaysShort:"dom_lun_mar_mer_gio_ven_sab".split("_"),weekdaysMin:"do_lu_ma_me_gi_ve_sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[Oggi alle] LT",nextDay:"[Domani alle] LT",nextWeek:"dddd [alle] LT",lastDay:"[Ieri alle] LT",lastWeek:function(){switch(this.day()){case 0:return"[la scorsa] dddd [alle] LT";default:return"[lo scorso] dddd [alle] LT"}},sameElse:"L"},relativeTime:{future:function(e){return(/^[0-9].+$/.test(e)?"tra":"in")+" "+e},past:"%s fa",s:"alcuni secondi",ss:"%d secondi",m:"un minuto",mm:"%d minuti",h:"un'ora",hh:"%d ore",d:"un giorno",dd:"%d giorni",M:"un mese",MM:"%d mesi",y:"un anno",yy:"%d anni"},dayOfMonthOrdinalParse:/\d{1,2}\xba/,ordinal:"%d\xba",week:{dow:1,doy:4}}),e.defineLocale("it",{months:"gennaio_febbraio_marzo_aprile_maggio_giugno_luglio_agosto_settembre_ottobre_novembre_dicembre".split("_"),monthsShort:"gen_feb_mar_apr_mag_giu_lug_ago_set_ott_nov_dic".split("_"),weekdays:"domenica_luned\xec_marted\xec_mercoled\xec_gioved\xec_venerd\xec_sabato".split("_"),weekdaysShort:"dom_lun_mar_mer_gio_ven_sab".split("_"),weekdaysMin:"do_lu_ma_me_gi_ve_sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:function(){return"[Oggi a"+(1<this.hours()?"lle ":0===this.hours()?" ":"ll'")+"]LT"},nextDay:function(){return"[Domani a"+(1<this.hours()?"lle ":0===this.hours()?" ":"ll'")+"]LT"},nextWeek:function(){return"dddd [a"+(1<this.hours()?"lle ":0===this.hours()?" ":"ll'")+"]LT"},lastDay:function(){return"[Ieri a"+(1<this.hours()?"lle ":0===this.hours()?" ":"ll'")+"]LT"},lastWeek:function(){switch(this.day()){case 0:return"[La scorsa] dddd [a"+(1<this.hours()?"lle ":0===this.hours()?" ":"ll'")+"]LT";default:return"[Lo scorso] dddd [a"+(1<this.hours()?"lle ":0===this.hours()?" ":"ll'")+"]LT"}},sameElse:"L"},relativeTime:{future:"tra %s",past:"%s fa",s:"alcuni secondi",ss:"%d secondi",m:"un minuto",mm:"%d minuti",h:"un'ora",hh:"%d ore",d:"un giorno",dd:"%d giorni",M:"un mese",MM:"%d mesi",y:"un anno",yy:"%d anni"},dayOfMonthOrdinalParse:/\d{1,2}\xba/,ordinal:"%d\xba",week:{dow:1,doy:4}}),e.defineLocale("ja",{eras:[{since:"2019-05-01",offset:1,name:"\u4ee4\u548c",narrow:"\u32ff",abbr:"R"},{since:"1989-01-08",until:"2019-04-30",offset:1,name:"\u5e73\u6210",narrow:"\u337b",abbr:"H"},{since:"1926-12-25",until:"1989-01-07",offset:1,name:"\u662d\u548c",narrow:"\u337c",abbr:"S"},{since:"1912-07-30",until:"1926-12-24",offset:1,name:"\u5927\u6b63",narrow:"\u337d",abbr:"T"},{since:"1873-01-01",until:"1912-07-29",offset:6,name:"\u660e\u6cbb",narrow:"\u337e",abbr:"M"},{since:"0001-01-01",until:"1873-12-31",offset:1,name:"\u897f\u66a6",narrow:"AD",abbr:"AD"},{since:"0000-12-31",until:-1/0,offset:1,name:"\u7d00\u5143\u524d",narrow:"BC",abbr:"BC"}],eraYearOrdinalRegex:/(\u5143|\d+)\u5e74/,eraYearOrdinalParse:function(e,a){return"\u5143"===a[1]?1:parseInt(a[1]||e,10)},months:"1\u6708_2\u6708_3\u6708_4\u6708_5\u6708_6\u6708_7\u6708_8\u6708_9\u6708_10\u6708_11\u6708_12\u6708".split("_"),monthsShort:"1\u6708_2\u6708_3\u6708_4\u6708_5\u6708_6\u6708_7\u6708_8\u6708_9\u6708_10\u6708_11\u6708_12\u6708".split("_"),weekdays:"\u65e5\u66dc\u65e5_\u6708\u66dc\u65e5_\u706b\u66dc\u65e5_\u6c34\u66dc\u65e5_\u6728\u66dc\u65e5_\u91d1\u66dc\u65e5_\u571f\u66dc\u65e5".split("_"),weekdaysShort:"\u65e5_\u6708_\u706b_\u6c34_\u6728_\u91d1_\u571f".split("_"),weekdaysMin:"\u65e5_\u6708_\u706b_\u6c34_\u6728_\u91d1_\u571f".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY/MM/DD",LL:"YYYY\u5e74M\u6708D\u65e5",LLL:"YYYY\u5e74M\u6708D\u65e5 HH:mm",LLLL:"YYYY\u5e74M\u6708D\u65e5 dddd HH:mm",l:"YYYY/MM/DD",ll:"YYYY\u5e74M\u6708D\u65e5",lll:"YYYY\u5e74M\u6708D\u65e5 HH:mm",llll:"YYYY\u5e74M\u6708D\u65e5(ddd) HH:mm"},meridiemParse:/\u5348\u524d|\u5348\u5f8c/i,isPM:function(e){return"\u5348\u5f8c"===e},meridiem:function(e,a,_){return e<12?"\u5348\u524d":"\u5348\u5f8c"},calendar:{sameDay:"[\u4eca\u65e5] LT",nextDay:"[\u660e\u65e5] LT",nextWeek:function(e){return e.week()!==this.week()?"[\u6765\u9031]dddd LT":"dddd LT"},lastDay:"[\u6628\u65e5] LT",lastWeek:function(e){return this.week()!==e.week()?"[\u5148\u9031]dddd LT":"dddd LT"},sameElse:"L"},dayOfMonthOrdinalParse:/\d{1,2}\u65e5/,ordinal:function(e,a){switch(a){case"y":return 1===e?"\u5143\u5e74":e+"\u5e74";case"d":case"D":case"DDD":return e+"\u65e5";default:return e}},relativeTime:{future:"%s\u5f8c",past:"%s\u524d",s:"\u6570\u79d2",ss:"%d\u79d2",m:"1\u5206",mm:"%d\u5206",h:"1\u6642\u9593",hh:"%d\u6642\u9593",d:"1\u65e5",dd:"%d\u65e5",M:"1\u30f6\u6708",MM:"%d\u30f6\u6708",y:"1\u5e74",yy:"%d\u5e74"}}),e.defineLocale("jv",{months:"Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_Nopember_Desember".split("_"),monthsShort:"Jan_Feb_Mar_Apr_Mei_Jun_Jul_Ags_Sep_Okt_Nop_Des".split("_"),weekdays:"Minggu_Senen_Seloso_Rebu_Kemis_Jemuwah_Septu".split("_"),weekdaysShort:"Min_Sen_Sel_Reb_Kem_Jem_Sep".split("_"),weekdaysMin:"Mg_Sn_Sl_Rb_Km_Jm_Sp".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [pukul] HH.mm",LLLL:"dddd, D MMMM YYYY [pukul] HH.mm"},meridiemParse:/enjing|siyang|sonten|ndalu/,meridiemHour:function(e,a){return 12===e&&(e=0),"enjing"===a?e:"siyang"===a?11<=e?e:e+12:"sonten"===a||"ndalu"===a?e+12:void 0},meridiem:function(e,a,_){return e<11?"enjing":e<15?"siyang":e<19?"sonten":"ndalu"},calendar:{sameDay:"[Dinten puniko pukul] LT",nextDay:"[Mbenjang pukul] LT",nextWeek:"dddd [pukul] LT",lastDay:"[Kala wingi pukul] LT",lastWeek:"dddd [kepengker pukul] LT",sameElse:"L"},relativeTime:{future:"wonten ing %s",past:"%s ingkang kepengker",s:"sawetawis detik",ss:"%d detik",m:"setunggal menit",mm:"%d menit",h:"setunggal jam",hh:"%d jam",d:"sedinten",dd:"%d dinten",M:"sewulan",MM:"%d wulan",y:"setaun",yy:"%d taun"},week:{dow:1,doy:7}}),e.defineLocale("ka",{months:"\u10d8\u10d0\u10dc\u10d5\u10d0\u10e0\u10d8_\u10d7\u10d4\u10d1\u10d4\u10e0\u10d5\u10d0\u10da\u10d8_\u10db\u10d0\u10e0\u10e2\u10d8_\u10d0\u10de\u10e0\u10d8\u10da\u10d8_\u10db\u10d0\u10d8\u10e1\u10d8_\u10d8\u10d5\u10dc\u10d8\u10e1\u10d8_\u10d8\u10d5\u10da\u10d8\u10e1\u10d8_\u10d0\u10d2\u10d5\u10d8\u10e1\u10e2\u10dd_\u10e1\u10d4\u10e5\u10e2\u10d4\u10db\u10d1\u10d4\u10e0\u10d8_\u10dd\u10e5\u10e2\u10dd\u10db\u10d1\u10d4\u10e0\u10d8_\u10dc\u10dd\u10d4\u10db\u10d1\u10d4\u10e0\u10d8_\u10d3\u10d4\u10d9\u10d4\u10db\u10d1\u10d4\u10e0\u10d8".split("_"),monthsShort:"\u10d8\u10d0\u10dc_\u10d7\u10d4\u10d1_\u10db\u10d0\u10e0_\u10d0\u10de\u10e0_\u10db\u10d0\u10d8_\u10d8\u10d5\u10dc_\u10d8\u10d5\u10da_\u10d0\u10d2\u10d5_\u10e1\u10d4\u10e5_\u10dd\u10e5\u10e2_\u10dc\u10dd\u10d4_\u10d3\u10d4\u10d9".split("_"),weekdays:{standalone:"\u10d9\u10d5\u10d8\u10e0\u10d0_\u10dd\u10e0\u10e8\u10d0\u10d1\u10d0\u10d7\u10d8_\u10e1\u10d0\u10db\u10e8\u10d0\u10d1\u10d0\u10d7\u10d8_\u10dd\u10d7\u10ee\u10e8\u10d0\u10d1\u10d0\u10d7\u10d8_\u10ee\u10e3\u10d7\u10e8\u10d0\u10d1\u10d0\u10d7\u10d8_\u10de\u10d0\u10e0\u10d0\u10e1\u10d9\u10d4\u10d5\u10d8_\u10e8\u10d0\u10d1\u10d0\u10d7\u10d8".split("_"),format:"\u10d9\u10d5\u10d8\u10e0\u10d0\u10e1_\u10dd\u10e0\u10e8\u10d0\u10d1\u10d0\u10d7\u10e1_\u10e1\u10d0\u10db\u10e8\u10d0\u10d1\u10d0\u10d7\u10e1_\u10dd\u10d7\u10ee\u10e8\u10d0\u10d1\u10d0\u10d7\u10e1_\u10ee\u10e3\u10d7\u10e8\u10d0\u10d1\u10d0\u10d7\u10e1_\u10de\u10d0\u10e0\u10d0\u10e1\u10d9\u10d4\u10d5\u10e1_\u10e8\u10d0\u10d1\u10d0\u10d7\u10e1".split("_"),isFormat:/(\u10ec\u10d8\u10dc\u10d0|\u10e8\u10d4\u10db\u10d3\u10d4\u10d2)/},weekdaysShort:"\u10d9\u10d5\u10d8_\u10dd\u10e0\u10e8_\u10e1\u10d0\u10db_\u10dd\u10d7\u10ee_\u10ee\u10e3\u10d7_\u10de\u10d0\u10e0_\u10e8\u10d0\u10d1".split("_"),weekdaysMin:"\u10d9\u10d5_\u10dd\u10e0_\u10e1\u10d0_\u10dd\u10d7_\u10ee\u10e3_\u10de\u10d0_\u10e8\u10d0".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[\u10d3\u10e6\u10d4\u10e1] LT[-\u10d6\u10d4]",nextDay:"[\u10ee\u10d5\u10d0\u10da] LT[-\u10d6\u10d4]",lastDay:"[\u10d2\u10e3\u10e8\u10d8\u10dc] LT[-\u10d6\u10d4]",nextWeek:"[\u10e8\u10d4\u10db\u10d3\u10d4\u10d2] dddd LT[-\u10d6\u10d4]",lastWeek:"[\u10ec\u10d8\u10dc\u10d0] dddd LT-\u10d6\u10d4",sameElse:"L"},relativeTime:{future:function(e){return e.replace(/(\u10ec\u10d0\u10db|\u10ec\u10e3\u10d7|\u10e1\u10d0\u10d0\u10d7|\u10ec\u10d4\u10da|\u10d3\u10e6|\u10d7\u10d5)(\u10d8|\u10d4)/,function(e,a,_){return"\u10d8"===_?a+"\u10e8\u10d8":a+_+"\u10e8\u10d8"})},past:function(e){return/(\u10ec\u10d0\u10db\u10d8|\u10ec\u10e3\u10d7\u10d8|\u10e1\u10d0\u10d0\u10d7\u10d8|\u10d3\u10e6\u10d4|\u10d7\u10d5\u10d4)/.test(e)?e.replace(/(\u10d8|\u10d4)$/,"\u10d8\u10e1 \u10ec\u10d8\u10dc"):/\u10ec\u10d4\u10da\u10d8/.test(e)?e.replace(/\u10ec\u10d4\u10da\u10d8$/,"\u10ec\u10da\u10d8\u10e1 \u10ec\u10d8\u10dc"):e},s:"\u10e0\u10d0\u10db\u10d3\u10d4\u10dc\u10d8\u10db\u10d4 \u10ec\u10d0\u10db\u10d8",ss:"%d \u10ec\u10d0\u10db\u10d8",m:"\u10ec\u10e3\u10d7\u10d8",mm:"%d \u10ec\u10e3\u10d7\u10d8",h:"\u10e1\u10d0\u10d0\u10d7\u10d8",hh:"%d \u10e1\u10d0\u10d0\u10d7\u10d8",d:"\u10d3\u10e6\u10d4",dd:"%d \u10d3\u10e6\u10d4",M:"\u10d7\u10d5\u10d4",MM:"%d \u10d7\u10d5\u10d4",y:"\u10ec\u10d4\u10da\u10d8",yy:"%d \u10ec\u10d4\u10da\u10d8"},dayOfMonthOrdinalParse:/0|1-\u10da\u10d8|\u10db\u10d4-\d{1,2}|\d{1,2}-\u10d4/,ordinal:function(e){return 0===e?e:1===e?e+"-\u10da\u10d8":e<20||e<=100&&e%20==0||e%100==0?"\u10db\u10d4-"+e:e+"-\u10d4"},week:{dow:1,doy:7}});var De={0:"-\u0448\u0456",1:"-\u0448\u0456",2:"-\u0448\u0456",3:"-\u0448\u0456",4:"-\u0448\u0456",5:"-\u0448\u0456",6:"-\u0448\u044b",7:"-\u0448\u0456",8:"-\u0448\u0456",9:"-\u0448\u044b",10:"-\u0448\u044b",20:"-\u0448\u044b",30:"-\u0448\u044b",40:"-\u0448\u044b",50:"-\u0448\u0456",60:"-\u0448\u044b",70:"-\u0448\u0456",80:"-\u0448\u0456",90:"-\u0448\u044b",100:"-\u0448\u0456"};e.defineLocale("kk",{months:"\u049b\u0430\u04a3\u0442\u0430\u0440_\u0430\u049b\u043f\u0430\u043d_\u043d\u0430\u0443\u0440\u044b\u0437_\u0441\u04d9\u0443\u0456\u0440_\u043c\u0430\u043c\u044b\u0440_\u043c\u0430\u0443\u0441\u044b\u043c_\u0448\u0456\u043b\u0434\u0435_\u0442\u0430\u043c\u044b\u0437_\u049b\u044b\u0440\u043a\u04af\u0439\u0435\u043a_\u049b\u0430\u0437\u0430\u043d_\u049b\u0430\u0440\u0430\u0448\u0430_\u0436\u0435\u043b\u0442\u043e\u049b\u0441\u0430\u043d".split("_"),monthsShort:"\u049b\u0430\u04a3_\u0430\u049b\u043f_\u043d\u0430\u0443_\u0441\u04d9\u0443_\u043c\u0430\u043c_\u043c\u0430\u0443_\u0448\u0456\u043b_\u0442\u0430\u043c_\u049b\u044b\u0440_\u049b\u0430\u0437_\u049b\u0430\u0440_\u0436\u0435\u043b".split("_"),weekdays:"\u0436\u0435\u043a\u0441\u0435\u043d\u0431\u0456_\u0434\u04af\u0439\u0441\u0435\u043d\u0431\u0456_\u0441\u0435\u0439\u0441\u0435\u043d\u0431\u0456_\u0441\u04d9\u0440\u0441\u0435\u043d\u0431\u0456_\u0431\u0435\u0439\u0441\u0435\u043d\u0431\u0456_\u0436\u04b1\u043c\u0430_\u0441\u0435\u043d\u0431\u0456".split("_"),weekdaysShort:"\u0436\u0435\u043a_\u0434\u04af\u0439_\u0441\u0435\u0439_\u0441\u04d9\u0440_\u0431\u0435\u0439_\u0436\u04b1\u043c_\u0441\u0435\u043d".split("_"),weekdaysMin:"\u0436\u043a_\u0434\u0439_\u0441\u0439_\u0441\u0440_\u0431\u0439_\u0436\u043c_\u0441\u043d".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[\u0411\u04af\u0433\u0456\u043d \u0441\u0430\u0493\u0430\u0442] LT",nextDay:"[\u0415\u0440\u0442\u0435\u04a3 \u0441\u0430\u0493\u0430\u0442] LT",nextWeek:"dddd [\u0441\u0430\u0493\u0430\u0442] LT",lastDay:"[\u041a\u0435\u0448\u0435 \u0441\u0430\u0493\u0430\u0442] LT",lastWeek:"[\u04e8\u0442\u043a\u0435\u043d \u0430\u043f\u0442\u0430\u043d\u044b\u04a3] dddd [\u0441\u0430\u0493\u0430\u0442] LT",sameElse:"L"},relativeTime:{future:"%s \u0456\u0448\u0456\u043d\u0434\u0435",past:"%s \u0431\u04b1\u0440\u044b\u043d",s:"\u0431\u0456\u0440\u043d\u0435\u0448\u0435 \u0441\u0435\u043a\u0443\u043d\u0434",ss:"%d \u0441\u0435\u043a\u0443\u043d\u0434",m:"\u0431\u0456\u0440 \u043c\u0438\u043d\u0443\u0442",mm:"%d \u043c\u0438\u043d\u0443\u0442",h:"\u0431\u0456\u0440 \u0441\u0430\u0493\u0430\u0442",hh:"%d \u0441\u0430\u0493\u0430\u0442",d:"\u0431\u0456\u0440 \u043a\u04af\u043d",dd:"%d \u043a\u04af\u043d",M:"\u0431\u0456\u0440 \u0430\u0439",MM:"%d \u0430\u0439",y:"\u0431\u0456\u0440 \u0436\u044b\u043b",yy:"%d \u0436\u044b\u043b"},dayOfMonthOrdinalParse:/\d{1,2}-(\u0448\u0456|\u0448\u044b)/,ordinal:function(e){return e+(De[e]||De[e%10]||De[100<=e?100:null])},week:{dow:1,doy:7}});var pe={1:"\u17e1",2:"\u17e2",3:"\u17e3",4:"\u17e4",5:"\u17e5",6:"\u17e6",7:"\u17e7",8:"\u17e8",9:"\u17e9",0:"\u17e0"},Te={"\u17e1":"1","\u17e2":"2","\u17e3":"3","\u17e4":"4","\u17e5":"5","\u17e6":"6","\u17e7":"7","\u17e8":"8","\u17e9":"9","\u17e0":"0"};e.defineLocale("km",{months:"\u1798\u1780\u179a\u17b6_\u1780\u17bb\u1798\u17d2\u1797\u17c8_\u1798\u17b8\u1793\u17b6_\u1798\u17c1\u179f\u17b6_\u17a7\u179f\u1797\u17b6_\u1798\u17b7\u1790\u17bb\u1793\u17b6_\u1780\u1780\u17d2\u1780\u178a\u17b6_\u179f\u17b8\u17a0\u17b6_\u1780\u1789\u17d2\u1789\u17b6_\u178f\u17bb\u179b\u17b6_\u179c\u17b7\u1785\u17d2\u1786\u17b7\u1780\u17b6_\u1792\u17d2\u1793\u17bc".split("_"),monthsShort:"\u1798\u1780\u179a\u17b6_\u1780\u17bb\u1798\u17d2\u1797\u17c8_\u1798\u17b8\u1793\u17b6_\u1798\u17c1\u179f\u17b6_\u17a7\u179f\u1797\u17b6_\u1798\u17b7\u1790\u17bb\u1793\u17b6_\u1780\u1780\u17d2\u1780\u178a\u17b6_\u179f\u17b8\u17a0\u17b6_\u1780\u1789\u17d2\u1789\u17b6_\u178f\u17bb\u179b\u17b6_\u179c\u17b7\u1785\u17d2\u1786\u17b7\u1780\u17b6_\u1792\u17d2\u1793\u17bc".split("_"),weekdays:"\u17a2\u17b6\u1791\u17b7\u178f\u17d2\u1799_\u1785\u17d0\u1793\u17d2\u1791_\u17a2\u1784\u17d2\u1782\u17b6\u179a_\u1796\u17bb\u1792_\u1796\u17d2\u179a\u17a0\u179f\u17d2\u1794\u178f\u17b7\u17cd_\u179f\u17bb\u1780\u17d2\u179a_\u179f\u17c5\u179a\u17cd".split("_"),weekdaysShort:"\u17a2\u17b6_\u1785_\u17a2_\u1796_\u1796\u17d2\u179a_\u179f\u17bb_\u179f".split("_"),weekdaysMin:"\u17a2\u17b6_\u1785_\u17a2_\u1796_\u1796\u17d2\u179a_\u179f\u17bb_\u179f".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},meridiemParse:/\u1796\u17d2\u179a\u17b9\u1780|\u179b\u17d2\u1784\u17b6\u1785/,isPM:function(e){return"\u179b\u17d2\u1784\u17b6\u1785"===e},meridiem:function(e,a,_){return e<12?"\u1796\u17d2\u179a\u17b9\u1780":"\u179b\u17d2\u1784\u17b6\u1785"},calendar:{sameDay:"[\u1790\u17d2\u1784\u17c3\u1793\u17c1\u17c7 \u1798\u17c9\u17c4\u1784] LT",nextDay:"[\u179f\u17d2\u17a2\u17c2\u1780 \u1798\u17c9\u17c4\u1784] LT",nextWeek:"dddd [\u1798\u17c9\u17c4\u1784] LT",lastDay:"[\u1798\u17d2\u179f\u17b7\u179b\u1798\u17b7\u1789 \u1798\u17c9\u17c4\u1784] LT",lastWeek:"dddd [\u179f\u1794\u17d2\u178f\u17b6\u17a0\u17cd\u1798\u17bb\u1793] [\u1798\u17c9\u17c4\u1784] LT",sameElse:"L"},relativeTime:{future:"%s\u1791\u17c0\u178f",past:"%s\u1798\u17bb\u1793",s:"\u1794\u17c9\u17bb\u1793\u17d2\u1798\u17b6\u1793\u179c\u17b7\u1793\u17b6\u1791\u17b8",ss:"%d \u179c\u17b7\u1793\u17b6\u1791\u17b8",m:"\u1798\u17bd\u1799\u1793\u17b6\u1791\u17b8",mm:"%d \u1793\u17b6\u1791\u17b8",h:"\u1798\u17bd\u1799\u1798\u17c9\u17c4\u1784",hh:"%d \u1798\u17c9\u17c4\u1784",d:"\u1798\u17bd\u1799\u1790\u17d2\u1784\u17c3",dd:"%d \u1790\u17d2\u1784\u17c3",M:"\u1798\u17bd\u1799\u1781\u17c2",MM:"%d \u1781\u17c2",y:"\u1798\u17bd\u1799\u1786\u17d2\u1793\u17b6\u17c6",yy:"%d \u1786\u17d2\u1793\u17b6\u17c6"},dayOfMonthOrdinalParse:/\u1791\u17b8\d{1,2}/,ordinal:"\u1791\u17b8%d",preparse:function(e){return e.replace(/[\u17e1\u17e2\u17e3\u17e4\u17e5\u17e6\u17e7\u17e8\u17e9\u17e0]/g,function(e){return Te[e]})},postformat:function(e){return e.replace(/\d/g,function(e){return pe[e]})},week:{dow:1,doy:4}});var fe={1:"\u0ce7",2:"\u0ce8",3:"\u0ce9",4:"\u0cea",5:"\u0ceb",6:"\u0cec",7:"\u0ced",8:"\u0cee",9:"\u0cef",0:"\u0ce6"},ge={"\u0ce7":"1","\u0ce8":"2","\u0ce9":"3","\u0cea":"4","\u0ceb":"5","\u0cec":"6","\u0ced":"7","\u0cee":"8","\u0cef":"9","\u0ce6":"0"};e.defineLocale("kn",{months:"\u0c9c\u0ca8\u0cb5\u0cb0\u0cbf_\u0cab\u0cc6\u0cac\u0ccd\u0cb0\u0cb5\u0cb0\u0cbf_\u0cae\u0cbe\u0cb0\u0ccd\u0c9a\u0ccd_\u0c8f\u0caa\u0ccd\u0cb0\u0cbf\u0cb2\u0ccd_\u0cae\u0cc6\u0cd5_\u0c9c\u0cc2\u0ca8\u0ccd_\u0c9c\u0cc1\u0cb2\u0cc6\u0cd6_\u0c86\u0c97\u0cb8\u0ccd\u0c9f\u0ccd_\u0cb8\u0cc6\u0caa\u0ccd\u0c9f\u0cc6\u0c82\u0cac\u0cb0\u0ccd_\u0c85\u0c95\u0ccd\u0c9f\u0cc6\u0cc2\u0cd5\u0cac\u0cb0\u0ccd_\u0ca8\u0cb5\u0cc6\u0c82\u0cac\u0cb0\u0ccd_\u0ca1\u0cbf\u0cb8\u0cc6\u0c82\u0cac\u0cb0\u0ccd".split("_"),monthsShort:"\u0c9c\u0ca8_\u0cab\u0cc6\u0cac\u0ccd\u0cb0_\u0cae\u0cbe\u0cb0\u0ccd\u0c9a\u0ccd_\u0c8f\u0caa\u0ccd\u0cb0\u0cbf\u0cb2\u0ccd_\u0cae\u0cc6\u0cd5_\u0c9c\u0cc2\u0ca8\u0ccd_\u0c9c\u0cc1\u0cb2\u0cc6\u0cd6_\u0c86\u0c97\u0cb8\u0ccd\u0c9f\u0ccd_\u0cb8\u0cc6\u0caa\u0ccd\u0c9f\u0cc6\u0c82_\u0c85\u0c95\u0ccd\u0c9f\u0cc6\u0cc2\u0cd5_\u0ca8\u0cb5\u0cc6\u0c82_\u0ca1\u0cbf\u0cb8\u0cc6\u0c82".split("_"),monthsParseExact:!0,weekdays:"\u0cad\u0cbe\u0ca8\u0cc1\u0cb5\u0cbe\u0cb0_\u0cb8\u0cc6\u0cc2\u0cd5\u0cae\u0cb5\u0cbe\u0cb0_\u0cae\u0c82\u0c97\u0cb3\u0cb5\u0cbe\u0cb0_\u0cac\u0cc1\u0ca7\u0cb5\u0cbe\u0cb0_\u0c97\u0cc1\u0cb0\u0cc1\u0cb5\u0cbe\u0cb0_\u0cb6\u0cc1\u0c95\u0ccd\u0cb0\u0cb5\u0cbe\u0cb0_\u0cb6\u0ca8\u0cbf\u0cb5\u0cbe\u0cb0".split("_"),weekdaysShort:"\u0cad\u0cbe\u0ca8\u0cc1_\u0cb8\u0cc6\u0cc2\u0cd5\u0cae_\u0cae\u0c82\u0c97\u0cb3_\u0cac\u0cc1\u0ca7_\u0c97\u0cc1\u0cb0\u0cc1_\u0cb6\u0cc1\u0c95\u0ccd\u0cb0_\u0cb6\u0ca8\u0cbf".split("_"),weekdaysMin:"\u0cad\u0cbe_\u0cb8\u0cc6\u0cc2\u0cd5_\u0cae\u0c82_\u0cac\u0cc1_\u0c97\u0cc1_\u0cb6\u0cc1_\u0cb6".split("_"),longDateFormat:{LT:"A h:mm",LTS:"A h:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm",LLLL:"dddd, D MMMM YYYY, A h:mm"},calendar:{sameDay:"[\u0c87\u0c82\u0ca6\u0cc1] LT",nextDay:"[\u0ca8\u0cbe\u0cb3\u0cc6] LT",nextWeek:"dddd, LT",lastDay:"[\u0ca8\u0cbf\u0ca8\u0ccd\u0ca8\u0cc6] LT",lastWeek:"[\u0c95\u0cc6\u0cc2\u0ca8\u0cc6\u0caf] dddd, LT",sameElse:"L"},relativeTime:{future:"%s \u0ca8\u0c82\u0ca4\u0cb0",past:"%s \u0cb9\u0cbf\u0c82\u0ca6\u0cc6",s:"\u0c95\u0cc6\u0cb2\u0cb5\u0cc1 \u0c95\u0ccd\u0cb7\u0ca3\u0c97\u0cb3\u0cc1",ss:"%d \u0cb8\u0cc6\u0c95\u0cc6\u0c82\u0ca1\u0cc1\u0c97\u0cb3\u0cc1",m:"\u0c92\u0c82\u0ca6\u0cc1 \u0ca8\u0cbf\u0cae\u0cbf\u0cb7",mm:"%d \u0ca8\u0cbf\u0cae\u0cbf\u0cb7",h:"\u0c92\u0c82\u0ca6\u0cc1 \u0c97\u0c82\u0c9f\u0cc6",hh:"%d \u0c97\u0c82\u0c9f\u0cc6",d:"\u0c92\u0c82\u0ca6\u0cc1 \u0ca6\u0cbf\u0ca8",dd:"%d \u0ca6\u0cbf\u0ca8",M:"\u0c92\u0c82\u0ca6\u0cc1 \u0ca4\u0cbf\u0c82\u0c97\u0cb3\u0cc1",MM:"%d \u0ca4\u0cbf\u0c82\u0c97\u0cb3\u0cc1",y:"\u0c92\u0c82\u0ca6\u0cc1 \u0cb5\u0cb0\u0ccd\u0cb7",yy:"%d \u0cb5\u0cb0\u0ccd\u0cb7"},preparse:function(e){return e.replace(/[\u0ce7\u0ce8\u0ce9\u0cea\u0ceb\u0cec\u0ced\u0cee\u0cef\u0ce6]/g,function(e){return ge[e]})},postformat:function(e){return e.replace(/\d/g,function(e){return fe[e]})},meridiemParse:/\u0cb0\u0cbe\u0ca4\u0ccd\u0cb0\u0cbf|\u0cac\u0cc6\u0cb3\u0cbf\u0c97\u0ccd\u0c97\u0cc6|\u0cae\u0ca7\u0ccd\u0caf\u0cbe\u0cb9\u0ccd\u0ca8|\u0cb8\u0c82\u0c9c\u0cc6/,meridiemHour:function(e,a){return 12===e&&(e=0),"\u0cb0\u0cbe\u0ca4\u0ccd\u0cb0\u0cbf"===a?e<4?e:e+12:"\u0cac\u0cc6\u0cb3\u0cbf\u0c97\u0ccd\u0c97\u0cc6"===a?e:"\u0cae\u0ca7\u0ccd\u0caf\u0cbe\u0cb9\u0ccd\u0ca8"===a?10<=e?e:e+12:"\u0cb8\u0c82\u0c9c\u0cc6"===a?e+12:void 0},meridiem:function(e,a,_){return e<4?"\u0cb0\u0cbe\u0ca4\u0ccd\u0cb0\u0cbf":e<10?"\u0cac\u0cc6\u0cb3\u0cbf\u0c97\u0ccd\u0c97\u0cc6":e<17?"\u0cae\u0ca7\u0ccd\u0caf\u0cbe\u0cb9\u0ccd\u0ca8":e<20?"\u0cb8\u0c82\u0c9c\u0cc6":"\u0cb0\u0cbe\u0ca4\u0ccd\u0cb0\u0cbf"},dayOfMonthOrdinalParse:/\d{1,2}(\u0ca8\u0cc6\u0cd5)/,ordinal:function(e){return e+"\u0ca8\u0cc6\u0cd5"},week:{dow:0,doy:6}}),e.defineLocale("ko",{months:"1\uc6d4_2\uc6d4_3\uc6d4_4\uc6d4_5\uc6d4_6\uc6d4_7\uc6d4_8\uc6d4_9\uc6d4_10\uc6d4_11\uc6d4_12\uc6d4".split("_"),monthsShort:"1\uc6d4_2\uc6d4_3\uc6d4_4\uc6d4_5\uc6d4_6\uc6d4_7\uc6d4_8\uc6d4_9\uc6d4_10\uc6d4_11\uc6d4_12\uc6d4".split("_"),weekdays:"\uc77c\uc694\uc77c_\uc6d4\uc694\uc77c_\ud654\uc694\uc77c_\uc218\uc694\uc77c_\ubaa9\uc694\uc77c_\uae08\uc694\uc77c_\ud1a0\uc694\uc77c".split("_"),weekdaysShort:"\uc77c_\uc6d4_\ud654_\uc218_\ubaa9_\uae08_\ud1a0".split("_"),weekdaysMin:"\uc77c_\uc6d4_\ud654_\uc218_\ubaa9_\uae08_\ud1a0".split("_"),longDateFormat:{LT:"A h:mm",LTS:"A h:mm:ss",L:"YYYY.MM.DD.",LL:"YYYY\ub144 MMMM D\uc77c",LLL:"YYYY\ub144 MMMM D\uc77c A h:mm",LLLL:"YYYY\ub144 MMMM D\uc77c dddd A h:mm",l:"YYYY.MM.DD.",ll:"YYYY\ub144 MMMM D\uc77c",lll:"YYYY\ub144 MMMM D\uc77c A h:mm",llll:"YYYY\ub144 MMMM D\uc77c dddd A h:mm"},calendar:{sameDay:"\uc624\ub298 LT",nextDay:"\ub0b4\uc77c LT",nextWeek:"dddd LT",lastDay:"\uc5b4\uc81c LT",lastWeek:"\uc9c0\ub09c\uc8fc dddd LT",sameElse:"L"},relativeTime:{future:"%s \ud6c4",past:"%s \uc804",s:"\uba87 \ucd08",ss:"%d\ucd08",m:"1\ubd84",mm:"%d\ubd84",h:"\ud55c \uc2dc\uac04",hh:"%d\uc2dc\uac04",d:"\ud558\ub8e8",dd:"%d\uc77c",M:"\ud55c \ub2ec",MM:"%d\ub2ec",y:"\uc77c \ub144",yy:"%d\ub144"},dayOfMonthOrdinalParse:/\d{1,2}(\uc77c|\uc6d4|\uc8fc)/,ordinal:function(e,a){switch(a){case"d":case"D":case"DDD":return e+"\uc77c";case"M":return e+"\uc6d4";case"w":case"W":return e+"\uc8fc";default:return e}},meridiemParse:/\uc624\uc804|\uc624\ud6c4/,isPM:function(e){return"\uc624\ud6c4"===e},meridiem:function(e,a,_){return e<12?"\uc624\uc804":"\uc624\ud6c4"}});var we={1:"\u0661",2:"\u0662",3:"\u0663",4:"\u0664",5:"\u0665",6:"\u0666",7:"\u0667",8:"\u0668",9:"\u0669",0:"\u0660"},He={"\u0661":"1","\u0662":"2","\u0663":"3","\u0664":"4","\u0665":"5","\u0666":"6","\u0667":"7","\u0668":"8","\u0669":"9","\u0660":"0"},be=["\u06a9\u0627\u0646\u0648\u0646\u06cc \u062f\u0648\u0648\u06d5\u0645","\u0634\u0648\u0628\u0627\u062a","\u0626\u0627\u0632\u0627\u0631","\u0646\u06cc\u0633\u0627\u0646","\u0626\u0627\u06cc\u0627\u0631","\u062d\u0648\u0632\u06d5\u06cc\u0631\u0627\u0646","\u062a\u06d5\u0645\u0645\u0648\u0632","\u0626\u0627\u0628","\u0626\u06d5\u06cc\u0644\u0648\u0648\u0644","\u062a\u0634\u0631\u06cc\u0646\u06cc \u06cc\u06d5\u0643\u06d5\u0645","\u062a\u0634\u0631\u06cc\u0646\u06cc \u062f\u0648\u0648\u06d5\u0645","\u0643\u0627\u0646\u0648\u0646\u06cc \u06cc\u06d5\u06a9\u06d5\u0645"];e.defineLocale("ku",{months:be,monthsShort:be,weekdays:"\u06cc\u0647\u200c\u0643\u0634\u0647\u200c\u0645\u0645\u0647\u200c_\u062f\u0648\u0648\u0634\u0647\u200c\u0645\u0645\u0647\u200c_\u0633\u06ce\u0634\u0647\u200c\u0645\u0645\u0647\u200c_\u0686\u0648\u0627\u0631\u0634\u0647\u200c\u0645\u0645\u0647\u200c_\u067e\u06ce\u0646\u062c\u0634\u0647\u200c\u0645\u0645\u0647\u200c_\u0647\u0647\u200c\u06cc\u0646\u06cc_\u0634\u0647\u200c\u0645\u0645\u0647\u200c".split("_"),weekdaysShort:"\u06cc\u0647\u200c\u0643\u0634\u0647\u200c\u0645_\u062f\u0648\u0648\u0634\u0647\u200c\u0645_\u0633\u06ce\u0634\u0647\u200c\u0645_\u0686\u0648\u0627\u0631\u0634\u0647\u200c\u0645_\u067e\u06ce\u0646\u062c\u0634\u0647\u200c\u0645_\u0647\u0647\u200c\u06cc\u0646\u06cc_\u0634\u0647\u200c\u0645\u0645\u0647\u200c".split("_"),weekdaysMin:"\u06cc_\u062f_\u0633_\u0686_\u067e_\u0647_\u0634".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},meridiemParse:/\u0626\u06ce\u0648\u0627\u0631\u0647\u200c|\u0628\u0647\u200c\u06cc\u0627\u0646\u06cc/,isPM:function(e){return/\u0626\u06ce\u0648\u0627\u0631\u0647\u200c/.test(e)},meridiem:function(e,a,_){return e<12?"\u0628\u0647\u200c\u06cc\u0627\u0646\u06cc":"\u0626\u06ce\u0648\u0627\u0631\u0647\u200c"},calendar:{sameDay:"[\u0626\u0647\u200c\u0645\u0631\u06c6 \u0643\u0627\u062a\u0698\u0645\u06ce\u0631] LT",nextDay:"[\u0628\u0647\u200c\u06cc\u0627\u0646\u06cc \u0643\u0627\u062a\u0698\u0645\u06ce\u0631] LT",nextWeek:"dddd [\u0643\u0627\u062a\u0698\u0645\u06ce\u0631] LT",lastDay:"[\u062f\u0648\u06ce\u0646\u06ce \u0643\u0627\u062a\u0698\u0645\u06ce\u0631] LT",lastWeek:"dddd [\u0643\u0627\u062a\u0698\u0645\u06ce\u0631] LT",sameElse:"L"},relativeTime:{future:"\u0644\u0647\u200c %s",past:"%s",s:"\u0686\u0647\u200c\u0646\u062f \u0686\u0631\u0643\u0647\u200c\u06cc\u0647\u200c\u0643",ss:"\u0686\u0631\u0643\u0647\u200c %d",m:"\u06cc\u0647\u200c\u0643 \u062e\u0648\u0644\u0647\u200c\u0643",mm:"%d \u062e\u0648\u0644\u0647\u200c\u0643",h:"\u06cc\u0647\u200c\u0643 \u0643\u0627\u062a\u0698\u0645\u06ce\u0631",hh:"%d \u0643\u0627\u062a\u0698\u0645\u06ce\u0631",d:"\u06cc\u0647\u200c\u0643 \u0695\u06c6\u0698",dd:"%d \u0695\u06c6\u0698",M:"\u06cc\u0647\u200c\u0643 \u0645\u0627\u0646\u06af",MM:"%d \u0645\u0627\u0646\u06af",y:"\u06cc\u0647\u200c\u0643 \u0633\u0627\u06b5",yy:"%d \u0633\u0627\u06b5"},preparse:function(e){return e.replace(/[\u0661\u0662\u0663\u0664\u0665\u0666\u0667\u0668\u0669\u0660]/g,function(e){return He[e]}).replace(/\u060c/g,",")},postformat:function(e){return e.replace(/\d/g,function(e){return we[e]}).replace(/,/g,"\u060c")},week:{dow:6,doy:12}});var ve={0:"-\u0447\u04af",1:"-\u0447\u0438",2:"-\u0447\u0438",3:"-\u0447\u04af",4:"-\u0447\u04af",5:"-\u0447\u0438",6:"-\u0447\u044b",7:"-\u0447\u0438",8:"-\u0447\u0438",9:"-\u0447\u0443",10:"-\u0447\u0443",20:"-\u0447\u044b",30:"-\u0447\u0443",40:"-\u0447\u044b",50:"-\u0447\u04af",60:"-\u0447\u044b",70:"-\u0447\u0438",80:"-\u0447\u0438",90:"-\u0447\u0443",100:"-\u0447\u04af"};function Se(e,a,_,s){var d={m:["eng Minutt","enger Minutt"],h:["eng Stonn","enger Stonn"],d:["een Dag","engem Dag"],M:["ee Mount","engem Mount"],y:["ee Joer","engem Joer"]};return a?d[_][0]:d[_][1]}function je(e){if(e=parseInt(e,10),isNaN(e))return!1;if(e<0)return!0;if(e<10)return 4<=e&&e<=7;if(e<100){var a=e%10;return 0==a?je(e/10):je(a)}if(e<1e4){for(;10<=e;)e/=10;return je(e)}return je(e/=1e3)}e.defineLocale("ky",{months:"\u044f\u043d\u0432\u0430\u0440\u044c_\u0444\u0435\u0432\u0440\u0430\u043b\u044c_\u043c\u0430\u0440\u0442_\u0430\u043f\u0440\u0435\u043b\u044c_\u043c\u0430\u0439_\u0438\u044e\u043d\u044c_\u0438\u044e\u043b\u044c_\u0430\u0432\u0433\u0443\u0441\u0442_\u0441\u0435\u043d\u0442\u044f\u0431\u0440\u044c_\u043e\u043a\u0442\u044f\u0431\u0440\u044c_\u043d\u043e\u044f\u0431\u0440\u044c_\u0434\u0435\u043a\u0430\u0431\u0440\u044c".split("_"),monthsShort:"\u044f\u043d\u0432_\u0444\u0435\u0432_\u043c\u0430\u0440\u0442_\u0430\u043f\u0440_\u043c\u0430\u0439_\u0438\u044e\u043d\u044c_\u0438\u044e\u043b\u044c_\u0430\u0432\u0433_\u0441\u0435\u043d_\u043e\u043a\u0442_\u043d\u043e\u044f_\u0434\u0435\u043a".split("_"),weekdays:"\u0416\u0435\u043a\u0448\u0435\u043c\u0431\u0438_\u0414\u04af\u0439\u0448\u04e9\u043c\u0431\u04af_\u0428\u0435\u0439\u0448\u0435\u043c\u0431\u0438_\u0428\u0430\u0440\u0448\u0435\u043c\u0431\u0438_\u0411\u0435\u0439\u0448\u0435\u043c\u0431\u0438_\u0416\u0443\u043c\u0430_\u0418\u0448\u0435\u043c\u0431\u0438".split("_"),weekdaysShort:"\u0416\u0435\u043a_\u0414\u04af\u0439_\u0428\u0435\u0439_\u0428\u0430\u0440_\u0411\u0435\u0439_\u0416\u0443\u043c_\u0418\u0448\u0435".split("_"),weekdaysMin:"\u0416\u043a_\u0414\u0439_\u0428\u0439_\u0428\u0440_\u0411\u0439_\u0416\u043c_\u0418\u0448".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[\u0411\u04af\u0433\u04af\u043d \u0441\u0430\u0430\u0442] LT",nextDay:"[\u042d\u0440\u0442\u0435\u04a3 \u0441\u0430\u0430\u0442] LT",nextWeek:"dddd [\u0441\u0430\u0430\u0442] LT",lastDay:"[\u041a\u0435\u0447\u044d\u044d \u0441\u0430\u0430\u0442] LT",lastWeek:"[\u04e8\u0442\u043a\u04e9\u043d \u0430\u043f\u0442\u0430\u043d\u044b\u043d] dddd [\u043a\u04af\u043d\u04af] [\u0441\u0430\u0430\u0442] LT",sameElse:"L"},relativeTime:{future:"%s \u0438\u0447\u0438\u043d\u0434\u0435",past:"%s \u043c\u0443\u0440\u0443\u043d",s:"\u0431\u0438\u0440\u043d\u0435\u0447\u0435 \u0441\u0435\u043a\u0443\u043d\u0434",ss:"%d \u0441\u0435\u043a\u0443\u043d\u0434",m:"\u0431\u0438\u0440 \u043c\u04af\u043d\u04e9\u0442",mm:"%d \u043c\u04af\u043d\u04e9\u0442",h:"\u0431\u0438\u0440 \u0441\u0430\u0430\u0442",hh:"%d \u0441\u0430\u0430\u0442",d:"\u0431\u0438\u0440 \u043a\u04af\u043d",dd:"%d \u043a\u04af\u043d",M:"\u0431\u0438\u0440 \u0430\u0439",MM:"%d \u0430\u0439",y:"\u0431\u0438\u0440 \u0436\u044b\u043b",yy:"%d \u0436\u044b\u043b"},dayOfMonthOrdinalParse:/\d{1,2}-(\u0447\u0438|\u0447\u044b|\u0447\u04af|\u0447\u0443)/,ordinal:function(e){return e+(ve[e]||ve[e%10]||ve[100<=e?100:null])},week:{dow:1,doy:7}}),e.defineLocale("lb",{months:"Januar_Februar_M\xe4erz_Abr\xebll_Mee_Juni_Juli_August_September_Oktober_November_Dezember".split("_"),monthsShort:"Jan._Febr._Mrz._Abr._Mee_Jun._Jul._Aug._Sept._Okt._Nov._Dez.".split("_"),monthsParseExact:!0,weekdays:"Sonndeg_M\xe9indeg_D\xebnschdeg_M\xebttwoch_Donneschdeg_Freideg_Samschdeg".split("_"),weekdaysShort:"So._M\xe9._D\xeb._M\xeb._Do._Fr._Sa.".split("_"),weekdaysMin:"So_M\xe9_D\xeb_M\xeb_Do_Fr_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm [Auer]",LTS:"H:mm:ss [Auer]",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm [Auer]",LLLL:"dddd, D. MMMM YYYY H:mm [Auer]"},calendar:{sameDay:"[Haut um] LT",sameElse:"L",nextDay:"[Muer um] LT",nextWeek:"dddd [um] LT",lastDay:"[G\xebschter um] LT",lastWeek:function(){switch(this.day()){case 2:case 4:return"[Leschten] dddd [um] LT";default:return"[Leschte] dddd [um] LT"}}},relativeTime:{future:function(e){return je(e.substr(0,e.indexOf(" ")))?"a "+e:"an "+e},past:function(e){return je(e.substr(0,e.indexOf(" ")))?"viru "+e:"virun "+e},s:"e puer Sekonnen",ss:"%d Sekonnen",m:Se,mm:"%d Minutten",h:Se,hh:"%d Stonnen",d:Se,dd:"%d Deeg",M:Se,MM:"%d M\xe9int",y:Se,yy:"%d Joer"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}}),e.defineLocale("lo",{months:"\u0ea1\u0eb1\u0e87\u0e81\u0ead\u0e99_\u0e81\u0eb8\u0ea1\u0e9e\u0eb2_\u0ea1\u0eb5\u0e99\u0eb2_\u0ec0\u0ea1\u0eaa\u0eb2_\u0e9e\u0eb6\u0e94\u0eaa\u0eb0\u0e9e\u0eb2_\u0ea1\u0eb4\u0e96\u0eb8\u0e99\u0eb2_\u0e81\u0ecd\u0ea5\u0eb0\u0e81\u0ebb\u0e94_\u0eaa\u0eb4\u0e87\u0eab\u0eb2_\u0e81\u0eb1\u0e99\u0e8d\u0eb2_\u0e95\u0eb8\u0ea5\u0eb2_\u0e9e\u0eb0\u0e88\u0eb4\u0e81_\u0e97\u0eb1\u0e99\u0ea7\u0eb2".split("_"),monthsShort:"\u0ea1\u0eb1\u0e87\u0e81\u0ead\u0e99_\u0e81\u0eb8\u0ea1\u0e9e\u0eb2_\u0ea1\u0eb5\u0e99\u0eb2_\u0ec0\u0ea1\u0eaa\u0eb2_\u0e9e\u0eb6\u0e94\u0eaa\u0eb0\u0e9e\u0eb2_\u0ea1\u0eb4\u0e96\u0eb8\u0e99\u0eb2_\u0e81\u0ecd\u0ea5\u0eb0\u0e81\u0ebb\u0e94_\u0eaa\u0eb4\u0e87\u0eab\u0eb2_\u0e81\u0eb1\u0e99\u0e8d\u0eb2_\u0e95\u0eb8\u0ea5\u0eb2_\u0e9e\u0eb0\u0e88\u0eb4\u0e81_\u0e97\u0eb1\u0e99\u0ea7\u0eb2".split("_"),weekdays:"\u0ead\u0eb2\u0e97\u0eb4\u0e94_\u0e88\u0eb1\u0e99_\u0ead\u0eb1\u0e87\u0e84\u0eb2\u0e99_\u0e9e\u0eb8\u0e94_\u0e9e\u0eb0\u0eab\u0eb1\u0e94_\u0eaa\u0eb8\u0e81_\u0ec0\u0eaa\u0ebb\u0eb2".split("_"),weekdaysShort:"\u0e97\u0eb4\u0e94_\u0e88\u0eb1\u0e99_\u0ead\u0eb1\u0e87\u0e84\u0eb2\u0e99_\u0e9e\u0eb8\u0e94_\u0e9e\u0eb0\u0eab\u0eb1\u0e94_\u0eaa\u0eb8\u0e81_\u0ec0\u0eaa\u0ebb\u0eb2".split("_"),weekdaysMin:"\u0e97_\u0e88_\u0ead\u0e84_\u0e9e_\u0e9e\u0eab_\u0eaa\u0e81_\u0eaa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"\u0ea7\u0eb1\u0e99dddd D MMMM YYYY HH:mm"},meridiemParse:/\u0e95\u0ead\u0e99\u0ec0\u0e8a\u0ebb\u0ec9\u0eb2|\u0e95\u0ead\u0e99\u0ec1\u0ea5\u0e87/,isPM:function(e){return"\u0e95\u0ead\u0e99\u0ec1\u0ea5\u0e87"===e},meridiem:function(e,a,_){return e<12?"\u0e95\u0ead\u0e99\u0ec0\u0e8a\u0ebb\u0ec9\u0eb2":"\u0e95\u0ead\u0e99\u0ec1\u0ea5\u0e87"},calendar:{sameDay:"[\u0ea1\u0eb7\u0ec9\u0e99\u0eb5\u0ec9\u0ec0\u0ea7\u0ea5\u0eb2] LT",nextDay:"[\u0ea1\u0eb7\u0ec9\u0ead\u0eb7\u0ec8\u0e99\u0ec0\u0ea7\u0ea5\u0eb2] LT",nextWeek:"[\u0ea7\u0eb1\u0e99]dddd[\u0edc\u0ec9\u0eb2\u0ec0\u0ea7\u0ea5\u0eb2] LT",lastDay:"[\u0ea1\u0eb7\u0ec9\u0ea7\u0eb2\u0e99\u0e99\u0eb5\u0ec9\u0ec0\u0ea7\u0ea5\u0eb2] LT",lastWeek:"[\u0ea7\u0eb1\u0e99]dddd[\u0ec1\u0ea5\u0ec9\u0ea7\u0e99\u0eb5\u0ec9\u0ec0\u0ea7\u0ea5\u0eb2] LT",sameElse:"L"},relativeTime:{future:"\u0ead\u0eb5\u0e81 %s",past:"%s\u0e9c\u0ec8\u0eb2\u0e99\u0ea1\u0eb2",s:"\u0e9a\u0ecd\u0ec8\u0ec0\u0e97\u0ebb\u0ec8\u0eb2\u0ec3\u0e94\u0ea7\u0eb4\u0e99\u0eb2\u0e97\u0eb5",ss:"%d \u0ea7\u0eb4\u0e99\u0eb2\u0e97\u0eb5",m:"1 \u0e99\u0eb2\u0e97\u0eb5",mm:"%d \u0e99\u0eb2\u0e97\u0eb5",h:"1 \u0e8a\u0ebb\u0ec8\u0ea7\u0ec2\u0ea1\u0e87",hh:"%d \u0e8a\u0ebb\u0ec8\u0ea7\u0ec2\u0ea1\u0e87",d:"1 \u0ea1\u0eb7\u0ec9",dd:"%d \u0ea1\u0eb7\u0ec9",M:"1 \u0ec0\u0e94\u0eb7\u0ead\u0e99",MM:"%d \u0ec0\u0e94\u0eb7\u0ead\u0e99",y:"1 \u0e9b\u0eb5",yy:"%d \u0e9b\u0eb5"},dayOfMonthOrdinalParse:/(\u0e97\u0eb5\u0ec8)\d{1,2}/,ordinal:function(e){return"\u0e97\u0eb5\u0ec8"+e}});var xe={ss:"sekund\u0117_sekund\u017ei\u0173_sekundes",m:"minut\u0117_minut\u0117s_minut\u0119",mm:"minut\u0117s_minu\u010di\u0173_minutes",h:"valanda_valandos_valand\u0105",hh:"valandos_valand\u0173_valandas",d:"diena_dienos_dien\u0105",dd:"dienos_dien\u0173_dienas",M:"m\u0117nuo_m\u0117nesio_m\u0117nes\u012f",MM:"m\u0117nesiai_m\u0117nesi\u0173_m\u0117nesius",y:"metai_met\u0173_metus",yy:"metai_met\u0173_metus"};function Pe(e,a,_,s){return a?Ae(_)[0]:s?Ae(_)[1]:Ae(_)[2]}function We(e){return e%10==0||10<e&&e<20}function Ae(e){return xe[e].split("_")}function Oe(e,a,_,s){var d=e+" ";return 1===e?d+Pe(0,a,_[0],s):a?d+(We(e)?Ae(_)[1]:Ae(_)[0]):s?d+Ae(_)[1]:d+(We(e)?Ae(_)[1]:Ae(_)[2])}e.defineLocale("lt",{months:{format:"sausio_vasario_kovo_baland\u017eio_gegu\u017e\u0117s_bir\u017eelio_liepos_rugpj\u016b\u010dio_rugs\u0117jo_spalio_lapkri\u010dio_gruod\u017eio".split("_"),standalone:"sausis_vasaris_kovas_balandis_gegu\u017e\u0117_bir\u017eelis_liepa_rugpj\u016btis_rugs\u0117jis_spalis_lapkritis_gruodis".split("_"),isFormat:/D[oD]?(\[[^\[\]]*\]|\s)+MMMM?|MMMM?(\[[^\[\]]*\]|\s)+D[oD]?/},monthsShort:"sau_vas_kov_bal_geg_bir_lie_rgp_rgs_spa_lap_grd".split("_"),weekdays:{format:"sekmadien\u012f_pirmadien\u012f_antradien\u012f_tre\u010diadien\u012f_ketvirtadien\u012f_penktadien\u012f_\u0161e\u0161tadien\u012f".split("_"),standalone:"sekmadienis_pirmadienis_antradienis_tre\u010diadienis_ketvirtadienis_penktadienis_\u0161e\u0161tadienis".split("_"),isFormat:/dddd HH:mm/},weekdaysShort:"Sek_Pir_Ant_Tre_Ket_Pen_\u0160e\u0161".split("_"),weekdaysMin:"S_P_A_T_K_Pn_\u0160".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"YYYY [m.] MMMM D [d.]",LLL:"YYYY [m.] MMMM D [d.], HH:mm [val.]",LLLL:"YYYY [m.] MMMM D [d.], dddd, HH:mm [val.]",l:"YYYY-MM-DD",ll:"YYYY [m.] MMMM D [d.]",lll:"YYYY [m.] MMMM D [d.], HH:mm [val.]",llll:"YYYY [m.] MMMM D [d.], ddd, HH:mm [val.]"},calendar:{sameDay:"[\u0160iandien] LT",nextDay:"[Rytoj] LT",nextWeek:"dddd LT",lastDay:"[Vakar] LT",lastWeek:"[Pra\u0117jus\u012f] dddd LT",sameElse:"L"},relativeTime:{future:"po %s",past:"prie\u0161 %s",s:function(e,a,_,s){return a?"kelios sekund\u0117s":s?"keli\u0173 sekund\u017ei\u0173":"kelias sekundes"},ss:Oe,m:Pe,mm:Oe,h:Pe,hh:Oe,d:Pe,dd:Oe,M:Pe,MM:Oe,y:Pe,yy:Oe},dayOfMonthOrdinalParse:/\d{1,2}-oji/,ordinal:function(e){return e+"-oji"},week:{dow:1,doy:4}});var Ee={ss:"sekundes_sekund\u0113m_sekunde_sekundes".split("_"),m:"min\u016btes_min\u016bt\u0113m_min\u016bte_min\u016btes".split("_"),mm:"min\u016btes_min\u016bt\u0113m_min\u016bte_min\u016btes".split("_"),h:"stundas_stund\u0101m_stunda_stundas".split("_"),hh:"stundas_stund\u0101m_stunda_stundas".split("_"),d:"dienas_dien\u0101m_diena_dienas".split("_"),dd:"dienas_dien\u0101m_diena_dienas".split("_"),M:"m\u0113ne\u0161a_m\u0113ne\u0161iem_m\u0113nesis_m\u0113ne\u0161i".split("_"),MM:"m\u0113ne\u0161a_m\u0113ne\u0161iem_m\u0113nesis_m\u0113ne\u0161i".split("_"),y:"gada_gadiem_gads_gadi".split("_"),yy:"gada_gadiem_gads_gadi".split("_")};function Fe(e,a,_){return _?a%10==1&&a%100!=11?e[2]:e[3]:a%10==1&&a%100!=11?e[0]:e[1]}function ze(e,a,_){return e+" "+Fe(Ee[_],e,a)}function Je(e,a,_){return Fe(Ee[_],e,a)}e.defineLocale("lv",{months:"janv\u0101ris_febru\u0101ris_marts_apr\u012blis_maijs_j\u016bnijs_j\u016blijs_augusts_septembris_oktobris_novembris_decembris".split("_"),monthsShort:"jan_feb_mar_apr_mai_j\u016bn_j\u016bl_aug_sep_okt_nov_dec".split("_"),weekdays:"sv\u0113tdiena_pirmdiena_otrdiena_tre\u0161diena_ceturtdiena_piektdiena_sestdiena".split("_"),weekdaysShort:"Sv_P_O_T_C_Pk_S".split("_"),weekdaysMin:"Sv_P_O_T_C_Pk_S".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY.",LL:"YYYY. [gada] D. MMMM",LLL:"YYYY. [gada] D. MMMM, HH:mm",LLLL:"YYYY. [gada] D. MMMM, dddd, HH:mm"},calendar:{sameDay:"[\u0160odien pulksten] LT",nextDay:"[R\u012bt pulksten] LT",nextWeek:"dddd [pulksten] LT",lastDay:"[Vakar pulksten] LT",lastWeek:"[Pag\u0101ju\u0161\u0101] dddd [pulksten] LT",sameElse:"L"},relativeTime:{future:"p\u0113c %s",past:"pirms %s",s:function(e,a){return a?"da\u017eas sekundes":"da\u017e\u0101m sekund\u0113m"},ss:ze,m:Je,mm:ze,h:Je,hh:ze,d:Je,dd:ze,M:Je,MM:ze,y:Je,yy:ze},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}});var Ie={words:{ss:["sekund","sekunda","sekundi"],m:["jedan minut","jednog minuta"],mm:["minut","minuta","minuta"],h:["jedan sat","jednog sata"],hh:["sat","sata","sati"],dd:["dan","dana","dana"],MM:["mjesec","mjeseca","mjeseci"],yy:["godina","godine","godina"]},correctGrammaticalCase:function(e,a){return 1===e?a[0]:2<=e&&e<=4?a[1]:a[2]},translate:function(e,a,_){var s=Ie.words[_];return 1===_.length?a?s[0]:s[1]:e+" "+Ie.correctGrammaticalCase(e,s)}};function Ne(e,a,_,s){switch(_){case"s":return a?"\u0445\u044d\u0434\u0445\u044d\u043d \u0441\u0435\u043a\u0443\u043d\u0434":"\u0445\u044d\u0434\u0445\u044d\u043d \u0441\u0435\u043a\u0443\u043d\u0434\u044b\u043d";case"ss":return e+(a?" \u0441\u0435\u043a\u0443\u043d\u0434":" \u0441\u0435\u043a\u0443\u043d\u0434\u044b\u043d");case"m":case"mm":return e+(a?" \u043c\u0438\u043d\u0443\u0442":" \u043c\u0438\u043d\u0443\u0442\u044b\u043d");case"h":case"hh":return e+(a?" \u0446\u0430\u0433":" \u0446\u0430\u0433\u0438\u0439\u043d");case"d":case"dd":return e+(a?" \u04e9\u0434\u04e9\u0440":" \u04e9\u0434\u0440\u0438\u0439\u043d");case"M":case"MM":return e+(a?" \u0441\u0430\u0440":" \u0441\u0430\u0440\u044b\u043d");case"y":case"yy":return e+(a?" \u0436\u0438\u043b":" \u0436\u0438\u043b\u0438\u0439\u043d");default:return e}}e.defineLocale("me",{months:"januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar".split("_"),monthsShort:"jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"nedjelja_ponedjeljak_utorak_srijeda_\u010detvrtak_petak_subota".split("_"),weekdaysShort:"ned._pon._uto._sri._\u010det._pet._sub.".split("_"),weekdaysMin:"ne_po_ut_sr_\u010de_pe_su".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[danas u] LT",nextDay:"[sjutra u] LT",nextWeek:function(){switch(this.day()){case 0:return"[u] [nedjelju] [u] LT";case 3:return"[u] [srijedu] [u] LT";case 6:return"[u] [subotu] [u] LT";case 1:case 2:case 4:case 5:return"[u] dddd [u] LT"}},lastDay:"[ju\u010de u] LT",lastWeek:function(){return["[pro\u0161le] [nedjelje] [u] LT","[pro\u0161log] [ponedjeljka] [u] LT","[pro\u0161log] [utorka] [u] LT","[pro\u0161le] [srijede] [u] LT","[pro\u0161log] [\u010detvrtka] [u] LT","[pro\u0161log] [petka] [u] LT","[pro\u0161le] [subote] [u] LT"][this.day()]},sameElse:"L"},relativeTime:{future:"za %s",past:"prije %s",s:"nekoliko sekundi",ss:Ie.translate,m:Ie.translate,mm:Ie.translate,h:Ie.translate,hh:Ie.translate,d:"dan",dd:Ie.translate,M:"mjesec",MM:Ie.translate,y:"godinu",yy:Ie.translate},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}}),e.defineLocale("mi",{months:"Kohi-t\u0101te_Hui-tanguru_Pout\u016b-te-rangi_Paenga-wh\u0101wh\u0101_Haratua_Pipiri_H\u014dngoingoi_Here-turi-k\u014dk\u0101_Mahuru_Whiringa-\u0101-nuku_Whiringa-\u0101-rangi_Hakihea".split("_"),monthsShort:"Kohi_Hui_Pou_Pae_Hara_Pipi_H\u014dngoi_Here_Mahu_Whi-nu_Whi-ra_Haki".split("_"),monthsRegex:/(?:['a-z\u0101\u014D\u016B]+\-?){1,3}/i,monthsStrictRegex:/(?:['a-z\u0101\u014D\u016B]+\-?){1,3}/i,monthsShortRegex:/(?:['a-z\u0101\u014D\u016B]+\-?){1,3}/i,monthsShortStrictRegex:/(?:['a-z\u0101\u014D\u016B]+\-?){1,2}/i,weekdays:"R\u0101tapu_Mane_T\u016brei_Wenerei_T\u0101ite_Paraire_H\u0101tarei".split("_"),weekdaysShort:"Ta_Ma_T\u016b_We_T\u0101i_Pa_H\u0101".split("_"),weekdaysMin:"Ta_Ma_T\u016b_We_T\u0101i_Pa_H\u0101".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [i] HH:mm",LLLL:"dddd, D MMMM YYYY [i] HH:mm"},calendar:{sameDay:"[i teie mahana, i] LT",nextDay:"[apopo i] LT",nextWeek:"dddd [i] LT",lastDay:"[inanahi i] LT",lastWeek:"dddd [whakamutunga i] LT",sameElse:"L"},relativeTime:{future:"i roto i %s",past:"%s i mua",s:"te h\u0113kona ruarua",ss:"%d h\u0113kona",m:"he meneti",mm:"%d meneti",h:"te haora",hh:"%d haora",d:"he ra",dd:"%d ra",M:"he marama",MM:"%d marama",y:"he tau",yy:"%d tau"},dayOfMonthOrdinalParse:/\d{1,2}\xba/,ordinal:"%d\xba",week:{dow:1,doy:4}}),e.defineLocale("mk",{months:"\u0458\u0430\u043d\u0443\u0430\u0440\u0438_\u0444\u0435\u0432\u0440\u0443\u0430\u0440\u0438_\u043c\u0430\u0440\u0442_\u0430\u043f\u0440\u0438\u043b_\u043c\u0430\u0458_\u0458\u0443\u043d\u0438_\u0458\u0443\u043b\u0438_\u0430\u0432\u0433\u0443\u0441\u0442_\u0441\u0435\u043f\u0442\u0435\u043c\u0432\u0440\u0438_\u043e\u043a\u0442\u043e\u043c\u0432\u0440\u0438_\u043d\u043e\u0435\u043c\u0432\u0440\u0438_\u0434\u0435\u043a\u0435\u043c\u0432\u0440\u0438".split("_"),monthsShort:"\u0458\u0430\u043d_\u0444\u0435\u0432_\u043c\u0430\u0440_\u0430\u043f\u0440_\u043c\u0430\u0458_\u0458\u0443\u043d_\u0458\u0443\u043b_\u0430\u0432\u0433_\u0441\u0435\u043f_\u043e\u043a\u0442_\u043d\u043e\u0435_\u0434\u0435\u043a".split("_"),weekdays:"\u043d\u0435\u0434\u0435\u043b\u0430_\u043f\u043e\u043d\u0435\u0434\u0435\u043b\u043d\u0438\u043a_\u0432\u0442\u043e\u0440\u043d\u0438\u043a_\u0441\u0440\u0435\u0434\u0430_\u0447\u0435\u0442\u0432\u0440\u0442\u043e\u043a_\u043f\u0435\u0442\u043e\u043a_\u0441\u0430\u0431\u043e\u0442\u0430".split("_"),weekdaysShort:"\u043d\u0435\u0434_\u043f\u043e\u043d_\u0432\u0442\u043e_\u0441\u0440\u0435_\u0447\u0435\u0442_\u043f\u0435\u0442_\u0441\u0430\u0431".split("_"),weekdaysMin:"\u043de_\u043fo_\u0432\u0442_\u0441\u0440_\u0447\u0435_\u043f\u0435_\u0441a".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"D.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY H:mm",LLLL:"dddd, D MMMM YYYY H:mm"},calendar:{sameDay:"[\u0414\u0435\u043d\u0435\u0441 \u0432\u043e] LT",nextDay:"[\u0423\u0442\u0440\u0435 \u0432\u043e] LT",nextWeek:"[\u0412\u043e] dddd [\u0432\u043e] LT",lastDay:"[\u0412\u0447\u0435\u0440\u0430 \u0432\u043e] LT",lastWeek:function(){switch(this.day()){case 0:case 3:case 6:return"[\u0418\u0437\u043c\u0438\u043d\u0430\u0442\u0430\u0442\u0430] dddd [\u0432\u043e] LT";case 1:case 2:case 4:case 5:return"[\u0418\u0437\u043c\u0438\u043d\u0430\u0442\u0438\u043e\u0442] dddd [\u0432\u043e] LT"}},sameElse:"L"},relativeTime:{future:"\u0437\u0430 %s",past:"\u043f\u0440\u0435\u0434 %s",s:"\u043d\u0435\u043a\u043e\u043b\u043a\u0443 \u0441\u0435\u043a\u0443\u043d\u0434\u0438",ss:"%d \u0441\u0435\u043a\u0443\u043d\u0434\u0438",m:"\u0435\u0434\u043d\u0430 \u043c\u0438\u043d\u0443\u0442\u0430",mm:"%d \u043c\u0438\u043d\u0443\u0442\u0438",h:"\u0435\u0434\u0435\u043d \u0447\u0430\u0441",hh:"%d \u0447\u0430\u0441\u0430",d:"\u0435\u0434\u0435\u043d \u0434\u0435\u043d",dd:"%d \u0434\u0435\u043d\u0430",M:"\u0435\u0434\u0435\u043d \u043c\u0435\u0441\u0435\u0446",MM:"%d \u043c\u0435\u0441\u0435\u0446\u0438",y:"\u0435\u0434\u043d\u0430 \u0433\u043e\u0434\u0438\u043d\u0430",yy:"%d \u0433\u043e\u0434\u0438\u043d\u0438"},dayOfMonthOrdinalParse:/\d{1,2}-(\u0435\u0432|\u0435\u043d|\u0442\u0438|\u0432\u0438|\u0440\u0438|\u043c\u0438)/,ordinal:function(e){var a=e%10,_=e%100;return 0===e?e+"-\u0435\u0432":0==_?e+"-\u0435\u043d":10<_&&_<20?e+"-\u0442\u0438":1==a?e+"-\u0432\u0438":2==a?e+"-\u0440\u0438":7==a||8==a?e+"-\u043c\u0438":e+"-\u0442\u0438"},week:{dow:1,doy:7}}),e.defineLocale("ml",{months:"\u0d1c\u0d28\u0d41\u0d35\u0d30\u0d3f_\u0d2b\u0d46\u0d2c\u0d4d\u0d30\u0d41\u0d35\u0d30\u0d3f_\u0d2e\u0d3e\u0d7c\u0d1a\u0d4d\u0d1a\u0d4d_\u0d0f\u0d2a\u0d4d\u0d30\u0d3f\u0d7d_\u0d2e\u0d47\u0d2f\u0d4d_\u0d1c\u0d42\u0d7a_\u0d1c\u0d42\u0d32\u0d48_\u0d13\u0d17\u0d38\u0d4d\u0d31\u0d4d\u0d31\u0d4d_\u0d38\u0d46\u0d2a\u0d4d\u0d31\u0d4d\u0d31\u0d02\u0d2c\u0d7c_\u0d12\u0d15\u0d4d\u0d1f\u0d4b\u0d2c\u0d7c_\u0d28\u0d35\u0d02\u0d2c\u0d7c_\u0d21\u0d3f\u0d38\u0d02\u0d2c\u0d7c".split("_"),monthsShort:"\u0d1c\u0d28\u0d41._\u0d2b\u0d46\u0d2c\u0d4d\u0d30\u0d41._\u0d2e\u0d3e\u0d7c._\u0d0f\u0d2a\u0d4d\u0d30\u0d3f._\u0d2e\u0d47\u0d2f\u0d4d_\u0d1c\u0d42\u0d7a_\u0d1c\u0d42\u0d32\u0d48._\u0d13\u0d17._\u0d38\u0d46\u0d2a\u0d4d\u0d31\u0d4d\u0d31._\u0d12\u0d15\u0d4d\u0d1f\u0d4b._\u0d28\u0d35\u0d02._\u0d21\u0d3f\u0d38\u0d02.".split("_"),monthsParseExact:!0,weekdays:"\u0d1e\u0d3e\u0d2f\u0d31\u0d3e\u0d34\u0d4d\u0d1a_\u0d24\u0d3f\u0d19\u0d4d\u0d15\u0d33\u0d3e\u0d34\u0d4d\u0d1a_\u0d1a\u0d4a\u0d35\u0d4d\u0d35\u0d3e\u0d34\u0d4d\u0d1a_\u0d2c\u0d41\u0d27\u0d28\u0d3e\u0d34\u0d4d\u0d1a_\u0d35\u0d4d\u0d2f\u0d3e\u0d34\u0d3e\u0d34\u0d4d\u0d1a_\u0d35\u0d46\u0d33\u0d4d\u0d33\u0d3f\u0d2f\u0d3e\u0d34\u0d4d\u0d1a_\u0d36\u0d28\u0d3f\u0d2f\u0d3e\u0d34\u0d4d\u0d1a".split("_"),weekdaysShort:"\u0d1e\u0d3e\u0d2f\u0d7c_\u0d24\u0d3f\u0d19\u0d4d\u0d15\u0d7e_\u0d1a\u0d4a\u0d35\u0d4d\u0d35_\u0d2c\u0d41\u0d27\u0d7b_\u0d35\u0d4d\u0d2f\u0d3e\u0d34\u0d02_\u0d35\u0d46\u0d33\u0d4d\u0d33\u0d3f_\u0d36\u0d28\u0d3f".split("_"),weekdaysMin:"\u0d1e\u0d3e_\u0d24\u0d3f_\u0d1a\u0d4a_\u0d2c\u0d41_\u0d35\u0d4d\u0d2f\u0d3e_\u0d35\u0d46_\u0d36".split("_"),longDateFormat:{LT:"A h:mm -\u0d28\u0d41",LTS:"A h:mm:ss -\u0d28\u0d41",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm -\u0d28\u0d41",LLLL:"dddd, D MMMM YYYY, A h:mm -\u0d28\u0d41"},calendar:{sameDay:"[\u0d07\u0d28\u0d4d\u0d28\u0d4d] LT",nextDay:"[\u0d28\u0d3e\u0d33\u0d46] LT",nextWeek:"dddd, LT",lastDay:"[\u0d07\u0d28\u0d4d\u0d28\u0d32\u0d46] LT",lastWeek:"[\u0d15\u0d34\u0d3f\u0d1e\u0d4d\u0d1e] dddd, LT",sameElse:"L"},relativeTime:{future:"%s \u0d15\u0d34\u0d3f\u0d1e\u0d4d\u0d1e\u0d4d",past:"%s \u0d2e\u0d41\u0d7b\u0d2a\u0d4d",s:"\u0d05\u0d7d\u0d2a \u0d28\u0d3f\u0d2e\u0d3f\u0d37\u0d19\u0d4d\u0d19\u0d7e",ss:"%d \u0d38\u0d46\u0d15\u0d4d\u0d15\u0d7b\u0d21\u0d4d",m:"\u0d12\u0d30\u0d41 \u0d2e\u0d3f\u0d28\u0d3f\u0d31\u0d4d\u0d31\u0d4d",mm:"%d \u0d2e\u0d3f\u0d28\u0d3f\u0d31\u0d4d\u0d31\u0d4d",h:"\u0d12\u0d30\u0d41 \u0d2e\u0d23\u0d3f\u0d15\u0d4d\u0d15\u0d42\u0d7c",hh:"%d \u0d2e\u0d23\u0d3f\u0d15\u0d4d\u0d15\u0d42\u0d7c",d:"\u0d12\u0d30\u0d41 \u0d26\u0d3f\u0d35\u0d38\u0d02",dd:"%d \u0d26\u0d3f\u0d35\u0d38\u0d02",M:"\u0d12\u0d30\u0d41 \u0d2e\u0d3e\u0d38\u0d02",MM:"%d \u0d2e\u0d3e\u0d38\u0d02",y:"\u0d12\u0d30\u0d41 \u0d35\u0d7c\u0d37\u0d02",yy:"%d \u0d35\u0d7c\u0d37\u0d02"},meridiemParse:/\u0d30\u0d3e\u0d24\u0d4d\u0d30\u0d3f|\u0d30\u0d3e\u0d35\u0d3f\u0d32\u0d46|\u0d09\u0d1a\u0d4d\u0d1a \u0d15\u0d34\u0d3f\u0d1e\u0d4d\u0d1e\u0d4d|\u0d35\u0d48\u0d15\u0d41\u0d28\u0d4d\u0d28\u0d47\u0d30\u0d02|\u0d30\u0d3e\u0d24\u0d4d\u0d30\u0d3f/i,meridiemHour:function(e,a){return 12===e&&(e=0),"\u0d30\u0d3e\u0d24\u0d4d\u0d30\u0d3f"===a&&4<=e||"\u0d09\u0d1a\u0d4d\u0d1a \u0d15\u0d34\u0d3f\u0d1e\u0d4d\u0d1e\u0d4d"===a||"\u0d35\u0d48\u0d15\u0d41\u0d28\u0d4d\u0d28\u0d47\u0d30\u0d02"===a?e+12:e},meridiem:function(e,a,_){return e<4?"\u0d30\u0d3e\u0d24\u0d4d\u0d30\u0d3f":e<12?"\u0d30\u0d3e\u0d35\u0d3f\u0d32\u0d46":e<17?"\u0d09\u0d1a\u0d4d\u0d1a \u0d15\u0d34\u0d3f\u0d1e\u0d4d\u0d1e\u0d4d":e<20?"\u0d35\u0d48\u0d15\u0d41\u0d28\u0d4d\u0d28\u0d47\u0d30\u0d02":"\u0d30\u0d3e\u0d24\u0d4d\u0d30\u0d3f"}}),e.defineLocale("mn",{months:"\u041d\u044d\u0433\u0434\u04af\u0433\u044d\u044d\u0440 \u0441\u0430\u0440_\u0425\u043e\u0451\u0440\u0434\u0443\u0433\u0430\u0430\u0440 \u0441\u0430\u0440_\u0413\u0443\u0440\u0430\u0432\u0434\u0443\u0433\u0430\u0430\u0440 \u0441\u0430\u0440_\u0414\u04e9\u0440\u04e9\u0432\u0434\u04af\u0433\u044d\u044d\u0440 \u0441\u0430\u0440_\u0422\u0430\u0432\u0434\u0443\u0433\u0430\u0430\u0440 \u0441\u0430\u0440_\u0417\u0443\u0440\u0433\u0430\u0434\u0443\u0433\u0430\u0430\u0440 \u0441\u0430\u0440_\u0414\u043e\u043b\u0434\u0443\u0433\u0430\u0430\u0440 \u0441\u0430\u0440_\u041d\u0430\u0439\u043c\u0434\u0443\u0433\u0430\u0430\u0440 \u0441\u0430\u0440_\u0415\u0441\u0434\u04af\u0433\u044d\u044d\u0440 \u0441\u0430\u0440_\u0410\u0440\u0430\u0432\u0434\u0443\u0433\u0430\u0430\u0440 \u0441\u0430\u0440_\u0410\u0440\u0432\u0430\u043d \u043d\u044d\u0433\u0434\u04af\u0433\u044d\u044d\u0440 \u0441\u0430\u0440_\u0410\u0440\u0432\u0430\u043d \u0445\u043e\u0451\u0440\u0434\u0443\u0433\u0430\u0430\u0440 \u0441\u0430\u0440".split("_"),monthsShort:"1 \u0441\u0430\u0440_2 \u0441\u0430\u0440_3 \u0441\u0430\u0440_4 \u0441\u0430\u0440_5 \u0441\u0430\u0440_6 \u0441\u0430\u0440_7 \u0441\u0430\u0440_8 \u0441\u0430\u0440_9 \u0441\u0430\u0440_10 \u0441\u0430\u0440_11 \u0441\u0430\u0440_12 \u0441\u0430\u0440".split("_"),monthsParseExact:!0,weekdays:"\u041d\u044f\u043c_\u0414\u0430\u0432\u0430\u0430_\u041c\u044f\u0433\u043c\u0430\u0440_\u041b\u0445\u0430\u0433\u0432\u0430_\u041f\u04af\u0440\u044d\u0432_\u0411\u0430\u0430\u0441\u0430\u043d_\u0411\u044f\u043c\u0431\u0430".split("_"),weekdaysShort:"\u041d\u044f\u043c_\u0414\u0430\u0432_\u041c\u044f\u0433_\u041b\u0445\u0430_\u041f\u04af\u0440_\u0411\u0430\u0430_\u0411\u044f\u043c".split("_"),weekdaysMin:"\u041d\u044f_\u0414\u0430_\u041c\u044f_\u041b\u0445_\u041f\u04af_\u0411\u0430_\u0411\u044f".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"YYYY \u043e\u043d\u044b MMMM\u044b\u043d D",LLL:"YYYY \u043e\u043d\u044b MMMM\u044b\u043d D HH:mm",LLLL:"dddd, YYYY \u043e\u043d\u044b MMMM\u044b\u043d D HH:mm"},meridiemParse:/\u04ae\u04e8|\u04ae\u0425/i,isPM:function(e){return"\u04ae\u0425"===e},meridiem:function(e,a,_){return e<12?"\u04ae\u04e8":"\u04ae\u0425"},calendar:{sameDay:"[\u04e8\u043d\u04e9\u04e9\u0434\u04e9\u0440] LT",nextDay:"[\u041c\u0430\u0440\u0433\u0430\u0430\u0448] LT",nextWeek:"[\u0418\u0440\u044d\u0445] dddd LT",lastDay:"[\u04e8\u0447\u0438\u0433\u0434\u04e9\u0440] LT",lastWeek:"[\u04e8\u043d\u0433\u04e9\u0440\u0441\u04e9\u043d] dddd LT",sameElse:"L"},relativeTime:{future:"%s \u0434\u0430\u0440\u0430\u0430",past:"%s \u04e9\u043c\u043d\u04e9",s:Ne,ss:Ne,m:Ne,mm:Ne,h:Ne,hh:Ne,d:Ne,dd:Ne,M:Ne,MM:Ne,y:Ne,yy:Ne},dayOfMonthOrdinalParse:/\d{1,2} \u04e9\u0434\u04e9\u0440/,ordinal:function(e,a){switch(a){case"d":case"D":case"DDD":return e+" \u04e9\u0434\u04e9\u0440";default:return e}}});var Re={1:"\u0967",2:"\u0968",3:"\u0969",4:"\u096a",5:"\u096b",6:"\u096c",7:"\u096d",8:"\u096e",9:"\u096f",0:"\u0966"},Ce={"\u0967":"1","\u0968":"2","\u0969":"3","\u096a":"4","\u096b":"5","\u096c":"6","\u096d":"7","\u096e":"8","\u096f":"9","\u0966":"0"};function Ke(e,a,_,s){var d="";if(a)switch(_){case"s":d="\u0915\u093e\u0939\u0940 \u0938\u0947\u0915\u0902\u0926";break;case"ss":d="%d \u0938\u0947\u0915\u0902\u0926";break;case"m":d="\u090f\u0915 \u092e\u093f\u0928\u093f\u091f";break;case"mm":d="%d \u092e\u093f\u0928\u093f\u091f\u0947";break;case"h":d="\u090f\u0915 \u0924\u093e\u0938";break;case"hh":d="%d \u0924\u093e\u0938";break;case"d":d="\u090f\u0915 \u0926\u093f\u0935\u0938";break;case"dd":d="%d \u0926\u093f\u0935\u0938";break;case"M":d="\u090f\u0915 \u092e\u0939\u093f\u0928\u093e";break;case"MM":d="%d \u092e\u0939\u093f\u0928\u0947";break;case"y":d="\u090f\u0915 \u0935\u0930\u094d\u0937";break;case"yy":d="%d \u0935\u0930\u094d\u0937\u0947";break}else switch(_){case"s":d="\u0915\u093e\u0939\u0940 \u0938\u0947\u0915\u0902\u0926\u093e\u0902";break;case"ss":d="%d \u0938\u0947\u0915\u0902\u0926\u093e\u0902";break;case"m":d="\u090f\u0915\u093e \u092e\u093f\u0928\u093f\u091f\u093e";break;case"mm":d="%d \u092e\u093f\u0928\u093f\u091f\u093e\u0902";break;case"h":d="\u090f\u0915\u093e \u0924\u093e\u0938\u093e";break;case"hh":d="%d \u0924\u093e\u0938\u093e\u0902";break;case"d":d="\u090f\u0915\u093e \u0926\u093f\u0935\u0938\u093e";break;case"dd":d="%d \u0926\u093f\u0935\u0938\u093e\u0902";break;case"M":d="\u090f\u0915\u093e \u092e\u0939\u093f\u0928\u094d\u092f\u093e";break;case"MM":d="%d \u092e\u0939\u093f\u0928\u094d\u092f\u093e\u0902";break;case"y":d="\u090f\u0915\u093e \u0935\u0930\u094d\u0937\u093e";break;case"yy":d="%d \u0935\u0930\u094d\u0937\u093e\u0902";break}return d.replace(/%d/i,e)}e.defineLocale("mr",{months:"\u091c\u093e\u0928\u0947\u0935\u093e\u0930\u0940_\u092b\u0947\u092c\u094d\u0930\u0941\u0935\u093e\u0930\u0940_\u092e\u093e\u0930\u094d\u091a_\u090f\u092a\u094d\u0930\u093f\u0932_\u092e\u0947_\u091c\u0942\u0928_\u091c\u0941\u0932\u0948_\u0911\u0917\u0938\u094d\u091f_\u0938\u092a\u094d\u091f\u0947\u0902\u092c\u0930_\u0911\u0915\u094d\u091f\u094b\u092c\u0930_\u0928\u094b\u0935\u094d\u0939\u0947\u0902\u092c\u0930_\u0921\u093f\u0938\u0947\u0902\u092c\u0930".split("_"),monthsShort:"\u091c\u093e\u0928\u0947._\u092b\u0947\u092c\u094d\u0930\u0941._\u092e\u093e\u0930\u094d\u091a._\u090f\u092a\u094d\u0930\u093f._\u092e\u0947._\u091c\u0942\u0928._\u091c\u0941\u0932\u0948._\u0911\u0917._\u0938\u092a\u094d\u091f\u0947\u0902._\u0911\u0915\u094d\u091f\u094b._\u0928\u094b\u0935\u094d\u0939\u0947\u0902._\u0921\u093f\u0938\u0947\u0902.".split("_"),monthsParseExact:!0,weekdays:"\u0930\u0935\u093f\u0935\u093e\u0930_\u0938\u094b\u092e\u0935\u093e\u0930_\u092e\u0902\u0917\u0933\u0935\u093e\u0930_\u092c\u0941\u0927\u0935\u093e\u0930_\u0917\u0941\u0930\u0942\u0935\u093e\u0930_\u0936\u0941\u0915\u094d\u0930\u0935\u093e\u0930_\u0936\u0928\u093f\u0935\u093e\u0930".split("_"),weekdaysShort:"\u0930\u0935\u093f_\u0938\u094b\u092e_\u092e\u0902\u0917\u0933_\u092c\u0941\u0927_\u0917\u0941\u0930\u0942_\u0936\u0941\u0915\u094d\u0930_\u0936\u0928\u093f".split("_"),weekdaysMin:"\u0930_\u0938\u094b_\u092e\u0902_\u092c\u0941_\u0917\u0941_\u0936\u0941_\u0936".split("_"),longDateFormat:{LT:"A h:mm \u0935\u093e\u091c\u0924\u093e",LTS:"A h:mm:ss \u0935\u093e\u091c\u0924\u093e",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm \u0935\u093e\u091c\u0924\u093e",LLLL:"dddd, D MMMM YYYY, A h:mm \u0935\u093e\u091c\u0924\u093e"},calendar:{sameDay:"[\u0906\u091c] LT",nextDay:"[\u0909\u0926\u094d\u092f\u093e] LT",nextWeek:"dddd, LT",lastDay:"[\u0915\u093e\u0932] LT",lastWeek:"[\u092e\u093e\u0917\u0940\u0932] dddd, LT",sameElse:"L"},relativeTime:{future:"%s\u092e\u0927\u094d\u092f\u0947",past:"%s\u092a\u0942\u0930\u094d\u0935\u0940",s:Ke,ss:Ke,m:Ke,mm:Ke,h:Ke,hh:Ke,d:Ke,dd:Ke,M:Ke,MM:Ke,y:Ke,yy:Ke},preparse:function(e){return e.replace(/[\u0967\u0968\u0969\u096a\u096b\u096c\u096d\u096e\u096f\u0966]/g,function(e){return Ce[e]})},postformat:function(e){return e.replace(/\d/g,function(e){return Re[e]})},meridiemParse:/\u092a\u0939\u093e\u091f\u0947|\u0938\u0915\u093e\u0933\u0940|\u0926\u0941\u092a\u093e\u0930\u0940|\u0938\u093e\u092f\u0902\u0915\u093e\u0933\u0940|\u0930\u093e\u0924\u094d\u0930\u0940/,meridiemHour:function(e,a){return 12===e&&(e=0),"\u092a\u0939\u093e\u091f\u0947"===a||"\u0938\u0915\u093e\u0933\u0940"===a?e:"\u0926\u0941\u092a\u093e\u0930\u0940"===a||"\u0938\u093e\u092f\u0902\u0915\u093e\u0933\u0940"===a||"\u0930\u093e\u0924\u094d\u0930\u0940"===a?12<=e?e:e+12:void 0},meridiem:function(e,a,_){return 0<=e&&e<6?"\u092a\u0939\u093e\u091f\u0947":e<12?"\u0938\u0915\u093e\u0933\u0940":e<17?"\u0926\u0941\u092a\u093e\u0930\u0940":e<20?"\u0938\u093e\u092f\u0902\u0915\u093e\u0933\u0940":"\u0930\u093e\u0924\u094d\u0930\u0940"},week:{dow:0,doy:6}}),e.defineLocale("ms-my",{months:"Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember".split("_"),monthsShort:"Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis".split("_"),weekdays:"Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu".split("_"),weekdaysShort:"Ahd_Isn_Sel_Rab_Kha_Jum_Sab".split("_"),weekdaysMin:"Ah_Is_Sl_Rb_Km_Jm_Sb".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [pukul] HH.mm",LLLL:"dddd, D MMMM YYYY [pukul] HH.mm"},meridiemParse:/pagi|tengahari|petang|malam/,meridiemHour:function(e,a){return 12===e&&(e=0),"pagi"===a?e:"tengahari"===a?11<=e?e:e+12:"petang"===a||"malam"===a?e+12:void 0},meridiem:function(e,a,_){return e<11?"pagi":e<15?"tengahari":e<19?"petang":"malam"},calendar:{sameDay:"[Hari ini pukul] LT",nextDay:"[Esok pukul] LT",nextWeek:"dddd [pukul] LT",lastDay:"[Kelmarin pukul] LT",lastWeek:"dddd [lepas pukul] LT",sameElse:"L"},relativeTime:{future:"dalam %s",past:"%s yang lepas",s:"beberapa saat",ss:"%d saat",m:"seminit",mm:"%d minit",h:"sejam",hh:"%d jam",d:"sehari",dd:"%d hari",M:"sebulan",MM:"%d bulan",y:"setahun",yy:"%d tahun"},week:{dow:1,doy:7}}),e.defineLocale("ms",{months:"Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember".split("_"),monthsShort:"Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis".split("_"),weekdays:"Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu".split("_"),weekdaysShort:"Ahd_Isn_Sel_Rab_Kha_Jum_Sab".split("_"),weekdaysMin:"Ah_Is_Sl_Rb_Km_Jm_Sb".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [pukul] HH.mm",LLLL:"dddd, D MMMM YYYY [pukul] HH.mm"},meridiemParse:/pagi|tengahari|petang|malam/,meridiemHour:function(e,a){return 12===e&&(e=0),"pagi"===a?e:"tengahari"===a?11<=e?e:e+12:"petang"===a||"malam"===a?e+12:void 0},meridiem:function(e,a,_){return e<11?"pagi":e<15?"tengahari":e<19?"petang":"malam"},calendar:{sameDay:"[Hari ini pukul] LT",nextDay:"[Esok pukul] LT",nextWeek:"dddd [pukul] LT",lastDay:"[Kelmarin pukul] LT",lastWeek:"dddd [lepas pukul] LT",sameElse:"L"},relativeTime:{future:"dalam %s",past:"%s yang lepas",s:"beberapa saat",ss:"%d saat",m:"seminit",mm:"%d minit",h:"sejam",hh:"%d jam",d:"sehari",dd:"%d hari",M:"sebulan",MM:"%d bulan",y:"setahun",yy:"%d tahun"},week:{dow:1,doy:7}}),e.defineLocale("mt",{months:"Jannar_Frar_Marzu_April_Mejju_\u0120unju_Lulju_Awwissu_Settembru_Ottubru_Novembru_Di\u010bembru".split("_"),monthsShort:"Jan_Fra_Mar_Apr_Mej_\u0120un_Lul_Aww_Set_Ott_Nov_Di\u010b".split("_"),weekdays:"Il-\u0126add_It-Tnejn_It-Tlieta_L-Erbg\u0127a_Il-\u0126amis_Il-\u0120img\u0127a_Is-Sibt".split("_"),weekdaysShort:"\u0126ad_Tne_Tli_Erb_\u0126am_\u0120im_Sib".split("_"),weekdaysMin:"\u0126a_Tn_Tl_Er_\u0126a_\u0120i_Si".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Illum fil-]LT",nextDay:"[G\u0127ada fil-]LT",nextWeek:"dddd [fil-]LT",lastDay:"[Il-biera\u0127 fil-]LT",lastWeek:"dddd [li g\u0127adda] [fil-]LT",sameElse:"L"},relativeTime:{future:"f\u2019 %s",past:"%s ilu",s:"ftit sekondi",ss:"%d sekondi",m:"minuta",mm:"%d minuti",h:"sieg\u0127a",hh:"%d sieg\u0127at",d:"\u0121urnata",dd:"%d \u0121ranet",M:"xahar",MM:"%d xhur",y:"sena",yy:"%d sni"},dayOfMonthOrdinalParse:/\d{1,2}\xba/,ordinal:"%d\xba",week:{dow:1,doy:4}});var Ge={1:"\u1041",2:"\u1042",3:"\u1043",4:"\u1044",5:"\u1045",6:"\u1046",7:"\u1047",8:"\u1048",9:"\u1049",0:"\u1040"},Be={"\u1041":"1","\u1042":"2","\u1043":"3","\u1044":"4","\u1045":"5","\u1046":"6","\u1047":"7","\u1048":"8","\u1049":"9","\u1040":"0"};e.defineLocale("my",{months:"\u1007\u1014\u103a\u1014\u101d\u102b\u101b\u102e_\u1016\u1031\u1016\u1031\u102c\u103a\u101d\u102b\u101b\u102e_\u1019\u1010\u103a_\u1027\u1015\u103c\u102e_\u1019\u1031_\u1007\u103d\u1014\u103a_\u1007\u1030\u101c\u102d\u102f\u1004\u103a_\u101e\u103c\u1002\u102f\u1010\u103a_\u1005\u1000\u103a\u1010\u1004\u103a\u1018\u102c_\u1021\u1031\u102c\u1000\u103a\u1010\u102d\u102f\u1018\u102c_\u1014\u102d\u102f\u101d\u1004\u103a\u1018\u102c_\u1012\u102e\u1007\u1004\u103a\u1018\u102c".split("_"),monthsShort:"\u1007\u1014\u103a_\u1016\u1031_\u1019\u1010\u103a_\u1015\u103c\u102e_\u1019\u1031_\u1007\u103d\u1014\u103a_\u101c\u102d\u102f\u1004\u103a_\u101e\u103c_\u1005\u1000\u103a_\u1021\u1031\u102c\u1000\u103a_\u1014\u102d\u102f_\u1012\u102e".split("_"),weekdays:"\u1010\u1014\u1004\u103a\u1039\u1002\u1014\u103d\u1031_\u1010\u1014\u1004\u103a\u1039\u101c\u102c_\u1021\u1004\u103a\u1039\u1002\u102b_\u1017\u102f\u1012\u1039\u1013\u101f\u1030\u1038_\u1000\u103c\u102c\u101e\u1015\u1010\u1031\u1038_\u101e\u1031\u102c\u1000\u103c\u102c_\u1005\u1014\u1031".split("_"),weekdaysShort:"\u1014\u103d\u1031_\u101c\u102c_\u1002\u102b_\u101f\u1030\u1038_\u1000\u103c\u102c_\u101e\u1031\u102c_\u1014\u1031".split("_"),weekdaysMin:"\u1014\u103d\u1031_\u101c\u102c_\u1002\u102b_\u101f\u1030\u1038_\u1000\u103c\u102c_\u101e\u1031\u102c_\u1014\u1031".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[\u101a\u1014\u1031.] LT [\u1019\u103e\u102c]",nextDay:"[\u1019\u1014\u1000\u103a\u1016\u103c\u1014\u103a] LT [\u1019\u103e\u102c]",nextWeek:"dddd LT [\u1019\u103e\u102c]",lastDay:"[\u1019\u1014\u1031.\u1000] LT [\u1019\u103e\u102c]",lastWeek:"[\u1015\u103c\u102e\u1038\u1001\u1032\u1037\u101e\u1031\u102c] dddd LT [\u1019\u103e\u102c]",sameElse:"L"},relativeTime:{future:"\u101c\u102c\u1019\u100a\u103a\u1037 %s \u1019\u103e\u102c",past:"\u101c\u103d\u1014\u103a\u1001\u1032\u1037\u101e\u1031\u102c %s \u1000",s:"\u1005\u1000\u1039\u1000\u1014\u103a.\u1021\u1014\u100a\u103a\u1038\u1004\u101a\u103a",ss:"%d \u1005\u1000\u1039\u1000\u1014\u1037\u103a",m:"\u1010\u1005\u103a\u1019\u102d\u1014\u1005\u103a",mm:"%d \u1019\u102d\u1014\u1005\u103a",h:"\u1010\u1005\u103a\u1014\u102c\u101b\u102e",hh:"%d \u1014\u102c\u101b\u102e",d:"\u1010\u1005\u103a\u101b\u1000\u103a",dd:"%d \u101b\u1000\u103a",M:"\u1010\u1005\u103a\u101c",MM:"%d \u101c",y:"\u1010\u1005\u103a\u1014\u103e\u1005\u103a",yy:"%d \u1014\u103e\u1005\u103a"},preparse:function(e){return e.replace(/[\u1041\u1042\u1043\u1044\u1045\u1046\u1047\u1048\u1049\u1040]/g,function(e){return Be[e]})},postformat:function(e){return e.replace(/\d/g,function(e){return Ge[e]})},week:{dow:1,doy:4}}),e.defineLocale("nb",{months:"januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember".split("_"),monthsShort:"jan._feb._mars_apr._mai_juni_juli_aug._sep._okt._nov._des.".split("_"),monthsParseExact:!0,weekdays:"s\xf8ndag_mandag_tirsdag_onsdag_torsdag_fredag_l\xf8rdag".split("_"),weekdaysShort:"s\xf8._ma._ti._on._to._fr._l\xf8.".split("_"),weekdaysMin:"s\xf8_ma_ti_on_to_fr_l\xf8".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY [kl.] HH:mm",LLLL:"dddd D. MMMM YYYY [kl.] HH:mm"},calendar:{sameDay:"[i dag kl.] LT",nextDay:"[i morgen kl.] LT",nextWeek:"dddd [kl.] LT",lastDay:"[i g\xe5r kl.] LT",lastWeek:"[forrige] dddd [kl.] LT",sameElse:"L"},relativeTime:{future:"om %s",past:"%s siden",s:"noen sekunder",ss:"%d sekunder",m:"ett minutt",mm:"%d minutter",h:"en time",hh:"%d timer",d:"en dag",dd:"%d dager",M:"en m\xe5ned",MM:"%d m\xe5neder",y:"ett \xe5r",yy:"%d \xe5r"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}});var qe={1:"\u0967",2:"\u0968",3:"\u0969",4:"\u096a",5:"\u096b",6:"\u096c",7:"\u096d",8:"\u096e",9:"\u096f",0:"\u0966"},Ue={"\u0967":"1","\u0968":"2","\u0969":"3","\u096a":"4","\u096b":"5","\u096c":"6","\u096d":"7","\u096e":"8","\u096f":"9","\u0966":"0"};e.defineLocale("ne",{months:"\u091c\u0928\u0935\u0930\u0940_\u092b\u0947\u092c\u094d\u0930\u0941\u0935\u0930\u0940_\u092e\u093e\u0930\u094d\u091a_\u0905\u092a\u094d\u0930\u093f\u0932_\u092e\u0908_\u091c\u0941\u0928_\u091c\u0941\u0932\u093e\u0908_\u0905\u0917\u0937\u094d\u091f_\u0938\u0947\u092a\u094d\u091f\u0947\u092e\u094d\u092c\u0930_\u0905\u0915\u094d\u091f\u094b\u092c\u0930_\u0928\u094b\u092d\u0947\u092e\u094d\u092c\u0930_\u0921\u093f\u0938\u0947\u092e\u094d\u092c\u0930".split("_"),monthsShort:"\u091c\u0928._\u092b\u0947\u092c\u094d\u0930\u0941._\u092e\u093e\u0930\u094d\u091a_\u0905\u092a\u094d\u0930\u093f._\u092e\u0908_\u091c\u0941\u0928_\u091c\u0941\u0932\u093e\u0908._\u0905\u0917._\u0938\u0947\u092a\u094d\u091f._\u0905\u0915\u094d\u091f\u094b._\u0928\u094b\u092d\u0947._\u0921\u093f\u0938\u0947.".split("_"),monthsParseExact:!0,weekdays:"\u0906\u0907\u0924\u092c\u093e\u0930_\u0938\u094b\u092e\u092c\u093e\u0930_\u092e\u0919\u094d\u0917\u0932\u092c\u093e\u0930_\u092c\u0941\u0927\u092c\u093e\u0930_\u092c\u093f\u0939\u093f\u092c\u093e\u0930_\u0936\u0941\u0915\u094d\u0930\u092c\u093e\u0930_\u0936\u0928\u093f\u092c\u093e\u0930".split("_"),weekdaysShort:"\u0906\u0907\u0924._\u0938\u094b\u092e._\u092e\u0919\u094d\u0917\u0932._\u092c\u0941\u0927._\u092c\u093f\u0939\u093f._\u0936\u0941\u0915\u094d\u0930._\u0936\u0928\u093f.".split("_"),weekdaysMin:"\u0906._\u0938\u094b._\u092e\u0902._\u092c\u0941._\u092c\u093f._\u0936\u0941._\u0936.".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"A\u0915\u094b h:mm \u092c\u091c\u0947",LTS:"A\u0915\u094b h:mm:ss \u092c\u091c\u0947",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A\u0915\u094b h:mm \u092c\u091c\u0947",LLLL:"dddd, D MMMM YYYY, A\u0915\u094b h:mm \u092c\u091c\u0947"},preparse:function(e){return e.replace(/[\u0967\u0968\u0969\u096a\u096b\u096c\u096d\u096e\u096f\u0966]/g,function(e){return Ue[e]})},postformat:function(e){return e.replace(/\d/g,function(e){return qe[e]})},meridiemParse:/\u0930\u093e\u0924\u093f|\u092c\u093f\u0939\u093e\u0928|\u0926\u093f\u0909\u0901\u0938\u094b|\u0938\u093e\u0901\u091d/,meridiemHour:function(e,a){return 12===e&&(e=0),"\u0930\u093e\u0924\u093f"===a?e<4?e:e+12:"\u092c\u093f\u0939\u093e\u0928"===a?e:"\u0926\u093f\u0909\u0901\u0938\u094b"===a?10<=e?e:e+12:"\u0938\u093e\u0901\u091d"===a?e+12:void 0},meridiem:function(e,a,_){return e<3?"\u0930\u093e\u0924\u093f":e<12?"\u092c\u093f\u0939\u093e\u0928":e<16?"\u0926\u093f\u0909\u0901\u0938\u094b":e<20?"\u0938\u093e\u0901\u091d":"\u0930\u093e\u0924\u093f"},calendar:{sameDay:"[\u0906\u091c] LT",nextDay:"[\u092d\u094b\u0932\u093f] LT",nextWeek:"[\u0906\u0909\u0901\u0926\u094b] dddd[,] LT",lastDay:"[\u0939\u093f\u091c\u094b] LT",lastWeek:"[\u0917\u090f\u0915\u094b] dddd[,] LT",sameElse:"L"},relativeTime:{future:"%s\u092e\u093e",past:"%s \u0905\u0917\u093e\u0921\u093f",s:"\u0915\u0947\u0939\u0940 \u0915\u094d\u0937\u0923",ss:"%d \u0938\u0947\u0915\u0947\u0923\u094d\u0921",m:"\u090f\u0915 \u092e\u093f\u0928\u0947\u091f",mm:"%d \u092e\u093f\u0928\u0947\u091f",h:"\u090f\u0915 \u0918\u0923\u094d\u091f\u093e",hh:"%d \u0918\u0923\u094d\u091f\u093e",d:"\u090f\u0915 \u0926\u093f\u0928",dd:"%d \u0926\u093f\u0928",M:"\u090f\u0915 \u092e\u0939\u093f\u0928\u093e",MM:"%d \u092e\u0939\u093f\u0928\u093e",y:"\u090f\u0915 \u092c\u0930\u094d\u0937",yy:"%d \u092c\u0930\u094d\u0937"},week:{dow:0,doy:6}});var $e="jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.".split("_"),Qe="jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec".split("_"),Ve=[/^jan/i,/^feb/i,/^maart|mrt.?$/i,/^apr/i,/^mei$/i,/^jun[i.]?$/i,/^jul[i.]?$/i,/^aug/i,/^sep/i,/^okt/i,/^nov/i,/^dec/i],Ze=/^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december|jan\.?|feb\.?|mrt\.?|apr\.?|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i;e.defineLocale("nl-be",{months:"januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december".split("_"),monthsShort:function(e,a){return e?/-MMM-/.test(a)?Qe[e.month()]:$e[e.month()]:$e},monthsRegex:Ze,monthsShortRegex:Ze,monthsStrictRegex:/^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december)/i,monthsShortStrictRegex:/^(jan\.?|feb\.?|mrt\.?|apr\.?|mei|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i,monthsParse:Ve,longMonthsParse:Ve,shortMonthsParse:Ve,weekdays:"zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag".split("_"),weekdaysShort:"zo._ma._di._wo._do._vr._za.".split("_"),weekdaysMin:"zo_ma_di_wo_do_vr_za".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[vandaag om] LT",nextDay:"[morgen om] LT",nextWeek:"dddd [om] LT",lastDay:"[gisteren om] LT",lastWeek:"[afgelopen] dddd [om] LT",sameElse:"L"},relativeTime:{future:"over %s",past:"%s geleden",s:"een paar seconden",ss:"%d seconden",m:"\xe9\xe9n minuut",mm:"%d minuten",h:"\xe9\xe9n uur",hh:"%d uur",d:"\xe9\xe9n dag",dd:"%d dagen",M:"\xe9\xe9n maand",MM:"%d maanden",y:"\xe9\xe9n jaar",yy:"%d jaar"},dayOfMonthOrdinalParse:/\d{1,2}(ste|de)/,ordinal:function(e){return e+(1===e||8===e||20<=e?"ste":"de")},week:{dow:1,doy:4}});var Xe="jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.".split("_"),ea="jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec".split("_"),aa=[/^jan/i,/^feb/i,/^maart|mrt.?$/i,/^apr/i,/^mei$/i,/^jun[i.]?$/i,/^jul[i.]?$/i,/^aug/i,/^sep/i,/^okt/i,/^nov/i,/^dec/i],_a=/^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december|jan\.?|feb\.?|mrt\.?|apr\.?|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i;e.defineLocale("nl",{months:"januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december".split("_"),monthsShort:function(e,a){return e?/-MMM-/.test(a)?ea[e.month()]:Xe[e.month()]:Xe},monthsRegex:_a,monthsShortRegex:_a,monthsStrictRegex:/^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december)/i,monthsShortStrictRegex:/^(jan\.?|feb\.?|mrt\.?|apr\.?|mei|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i,monthsParse:aa,longMonthsParse:aa,shortMonthsParse:aa,weekdays:"zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag".split("_"),weekdaysShort:"zo._ma._di._wo._do._vr._za.".split("_"),weekdaysMin:"zo_ma_di_wo_do_vr_za".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD-MM-YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[vandaag om] LT",nextDay:"[morgen om] LT",nextWeek:"dddd [om] LT",lastDay:"[gisteren om] LT",lastWeek:"[afgelopen] dddd [om] LT",sameElse:"L"},relativeTime:{future:"over %s",past:"%s geleden",s:"een paar seconden",ss:"%d seconden",m:"\xe9\xe9n minuut",mm:"%d minuten",h:"\xe9\xe9n uur",hh:"%d uur",d:"\xe9\xe9n dag",dd:"%d dagen",M:"\xe9\xe9n maand",MM:"%d maanden",y:"\xe9\xe9n jaar",yy:"%d jaar"},dayOfMonthOrdinalParse:/\d{1,2}(ste|de)/,ordinal:function(e){return e+(1===e||8===e||20<=e?"ste":"de")},week:{dow:1,doy:4}}),e.defineLocale("nn",{months:"januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember".split("_"),monthsShort:"jan._feb._mars_apr._mai_juni_juli_aug._sep._okt._nov._des.".split("_"),monthsParseExact:!0,weekdays:"sundag_m\xe5ndag_tysdag_onsdag_torsdag_fredag_laurdag".split("_"),weekdaysShort:"su._m\xe5._ty._on._to._fr._lau.".split("_"),weekdaysMin:"su_m\xe5_ty_on_to_fr_la".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY [kl.] H:mm",LLLL:"dddd D. MMMM YYYY [kl.] HH:mm"},calendar:{sameDay:"[I dag klokka] LT",nextDay:"[I morgon klokka] LT",nextWeek:"dddd [klokka] LT",lastDay:"[I g\xe5r klokka] LT",lastWeek:"[F\xf8reg\xe5ande] dddd [klokka] LT",sameElse:"L"},relativeTime:{future:"om %s",past:"%s sidan",s:"nokre sekund",ss:"%d sekund",m:"eit minutt",mm:"%d minutt",h:"ein time",hh:"%d timar",d:"ein dag",dd:"%d dagar",M:"ein m\xe5nad",MM:"%d m\xe5nader",y:"eit \xe5r",yy:"%d \xe5r"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}}),e.defineLocale("oc-lnc",{months:{standalone:"geni\xe8r_febri\xe8r_mar\xe7_abril_mai_junh_julhet_agost_setembre_oct\xf2bre_novembre_decembre".split("_"),format:"de geni\xe8r_de febri\xe8r_de mar\xe7_d'abril_de mai_de junh_de julhet_d'agost_de setembre_d'oct\xf2bre_de novembre_de decembre".split("_"),isFormat:/D[oD]?(\s)+MMMM/},monthsShort:"gen._febr._mar\xe7_abr._mai_junh_julh._ago._set._oct._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"dimenge_diluns_dimars_dim\xe8cres_dij\xf2us_divendres_dissabte".split("_"),weekdaysShort:"dg._dl._dm._dc._dj._dv._ds.".split("_"),weekdaysMin:"dg_dl_dm_dc_dj_dv_ds".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM [de] YYYY",ll:"D MMM YYYY",LLL:"D MMMM [de] YYYY [a] H:mm",lll:"D MMM YYYY, H:mm",LLLL:"dddd D MMMM [de] YYYY [a] H:mm",llll:"ddd D MMM YYYY, H:mm"},calendar:{sameDay:"[u\xe8i a] LT",nextDay:"[deman a] LT",nextWeek:"dddd [a] LT",lastDay:"[i\xe8r a] LT",lastWeek:"dddd [passat a] LT",sameElse:"L"},relativeTime:{future:"d'aqu\xed %s",past:"fa %s",s:"unas segondas",ss:"%d segondas",m:"una minuta",mm:"%d minutas",h:"una ora",hh:"%d oras",d:"un jorn",dd:"%d jorns",M:"un mes",MM:"%d meses",y:"un an",yy:"%d ans"},dayOfMonthOrdinalParse:/\d{1,2}(r|n|t|\xe8|a)/,ordinal:function(e,a){return e+("w"!==a&&"W"!==a?1===e?"r":2===e?"n":3===e?"r":4===e?"t":"\xe8":"a")},week:{dow:1,doy:4}});var sa={1:"\u0a67",2:"\u0a68",3:"\u0a69",4:"\u0a6a",5:"\u0a6b",6:"\u0a6c",7:"\u0a6d",8:"\u0a6e",9:"\u0a6f",0:"\u0a66"},da={"\u0a67":"1","\u0a68":"2","\u0a69":"3","\u0a6a":"4","\u0a6b":"5","\u0a6c":"6","\u0a6d":"7","\u0a6e":"8","\u0a6f":"9","\u0a66":"0"};e.defineLocale("pa-in",{months:"\u0a1c\u0a28\u0a35\u0a30\u0a40_\u0a2b\u0a3c\u0a30\u0a35\u0a30\u0a40_\u0a2e\u0a3e\u0a30\u0a1a_\u0a05\u0a2a\u0a4d\u0a30\u0a48\u0a32_\u0a2e\u0a08_\u0a1c\u0a42\u0a28_\u0a1c\u0a41\u0a32\u0a3e\u0a08_\u0a05\u0a17\u0a38\u0a24_\u0a38\u0a24\u0a70\u0a2c\u0a30_\u0a05\u0a15\u0a24\u0a42\u0a2c\u0a30_\u0a28\u0a35\u0a70\u0a2c\u0a30_\u0a26\u0a38\u0a70\u0a2c\u0a30".split("_"),monthsShort:"\u0a1c\u0a28\u0a35\u0a30\u0a40_\u0a2b\u0a3c\u0a30\u0a35\u0a30\u0a40_\u0a2e\u0a3e\u0a30\u0a1a_\u0a05\u0a2a\u0a4d\u0a30\u0a48\u0a32_\u0a2e\u0a08_\u0a1c\u0a42\u0a28_\u0a1c\u0a41\u0a32\u0a3e\u0a08_\u0a05\u0a17\u0a38\u0a24_\u0a38\u0a24\u0a70\u0a2c\u0a30_\u0a05\u0a15\u0a24\u0a42\u0a2c\u0a30_\u0a28\u0a35\u0a70\u0a2c\u0a30_\u0a26\u0a38\u0a70\u0a2c\u0a30".split("_"),weekdays:"\u0a10\u0a24\u0a35\u0a3e\u0a30_\u0a38\u0a4b\u0a2e\u0a35\u0a3e\u0a30_\u0a2e\u0a70\u0a17\u0a32\u0a35\u0a3e\u0a30_\u0a2c\u0a41\u0a27\u0a35\u0a3e\u0a30_\u0a35\u0a40\u0a30\u0a35\u0a3e\u0a30_\u0a38\u0a3c\u0a41\u0a71\u0a15\u0a30\u0a35\u0a3e\u0a30_\u0a38\u0a3c\u0a28\u0a40\u0a1a\u0a30\u0a35\u0a3e\u0a30".split("_"),weekdaysShort:"\u0a10\u0a24_\u0a38\u0a4b\u0a2e_\u0a2e\u0a70\u0a17\u0a32_\u0a2c\u0a41\u0a27_\u0a35\u0a40\u0a30_\u0a38\u0a3c\u0a41\u0a15\u0a30_\u0a38\u0a3c\u0a28\u0a40".split("_"),weekdaysMin:"\u0a10\u0a24_\u0a38\u0a4b\u0a2e_\u0a2e\u0a70\u0a17\u0a32_\u0a2c\u0a41\u0a27_\u0a35\u0a40\u0a30_\u0a38\u0a3c\u0a41\u0a15\u0a30_\u0a38\u0a3c\u0a28\u0a40".split("_"),longDateFormat:{LT:"A h:mm \u0a35\u0a1c\u0a47",LTS:"A h:mm:ss \u0a35\u0a1c\u0a47",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm \u0a35\u0a1c\u0a47",LLLL:"dddd, D MMMM YYYY, A h:mm \u0a35\u0a1c\u0a47"},calendar:{sameDay:"[\u0a05\u0a1c] LT",nextDay:"[\u0a15\u0a32] LT",nextWeek:"[\u0a05\u0a17\u0a32\u0a3e] dddd, LT",lastDay:"[\u0a15\u0a32] LT",lastWeek:"[\u0a2a\u0a3f\u0a1b\u0a32\u0a47] dddd, LT",sameElse:"L"},relativeTime:{future:"%s \u0a35\u0a3f\u0a71\u0a1a",past:"%s \u0a2a\u0a3f\u0a1b\u0a32\u0a47",s:"\u0a15\u0a41\u0a1d \u0a38\u0a15\u0a3f\u0a70\u0a1f",ss:"%d \u0a38\u0a15\u0a3f\u0a70\u0a1f",m:"\u0a07\u0a15 \u0a2e\u0a3f\u0a70\u0a1f",mm:"%d \u0a2e\u0a3f\u0a70\u0a1f",h:"\u0a07\u0a71\u0a15 \u0a18\u0a70\u0a1f\u0a3e",hh:"%d \u0a18\u0a70\u0a1f\u0a47",d:"\u0a07\u0a71\u0a15 \u0a26\u0a3f\u0a28",dd:"%d \u0a26\u0a3f\u0a28",M:"\u0a07\u0a71\u0a15 \u0a2e\u0a39\u0a40\u0a28\u0a3e",MM:"%d \u0a2e\u0a39\u0a40\u0a28\u0a47",y:"\u0a07\u0a71\u0a15 \u0a38\u0a3e\u0a32",yy:"%d \u0a38\u0a3e\u0a32"},preparse:function(e){return e.replace(/[\u0a67\u0a68\u0a69\u0a6a\u0a6b\u0a6c\u0a6d\u0a6e\u0a6f\u0a66]/g,function(e){return da[e]})},postformat:function(e){return e.replace(/\d/g,function(e){return sa[e]})},meridiemParse:/\u0a30\u0a3e\u0a24|\u0a38\u0a35\u0a47\u0a30|\u0a26\u0a41\u0a2a\u0a39\u0a3f\u0a30|\u0a38\u0a3c\u0a3e\u0a2e/,meridiemHour:function(e,a){return 12===e&&(e=0),"\u0a30\u0a3e\u0a24"===a?e<4?e:e+12:"\u0a38\u0a35\u0a47\u0a30"===a?e:"\u0a26\u0a41\u0a2a\u0a39\u0a3f\u0a30"===a?10<=e?e:e+12:"\u0a38\u0a3c\u0a3e\u0a2e"===a?e+12:void 0},meridiem:function(e,a,_){return e<4?"\u0a30\u0a3e\u0a24":e<10?"\u0a38\u0a35\u0a47\u0a30":e<17?"\u0a26\u0a41\u0a2a\u0a39\u0a3f\u0a30":e<20?"\u0a38\u0a3c\u0a3e\u0a2e":"\u0a30\u0a3e\u0a24"},week:{dow:0,doy:6}});var ta="stycze\u0144_luty_marzec_kwiecie\u0144_maj_czerwiec_lipiec_sierpie\u0144_wrzesie\u0144_pa\u017adziernik_listopad_grudzie\u0144".split("_"),na="stycznia_lutego_marca_kwietnia_maja_czerwca_lipca_sierpnia_wrze\u015bnia_pa\u017adziernika_listopada_grudnia".split("_");function ra(e){return e%10<5&&1<e%10&&~~(e/10)%10!=1}function ia(e,a,_){var s=e+" ";switch(_){case"ss":return s+(ra(e)?"sekundy":"sekund");case"m":return a?"minuta":"minut\u0119";case"mm":return s+(ra(e)?"minuty":"minut");case"h":return a?"godzina":"godzin\u0119";case"hh":return s+(ra(e)?"godziny":"godzin");case"MM":return s+(ra(e)?"miesi\u0105ce":"miesi\u0119cy");case"yy":return s+(ra(e)?"lata":"lat")}}function ma(e,a,_){return e+(20<=e%100||100<=e&&e%100==0?" de ":" ")+{ss:"secunde",mm:"minute",hh:"ore",dd:"zile",MM:"luni",yy:"ani"}[_]}function oa(e,a,_){var s,d;return"m"===_?a?"\u043c\u0438\u043d\u0443\u0442\u0430":"\u043c\u0438\u043d\u0443\u0442\u0443":e+" "+(s=+e,d={ss:a?"\u0441\u0435\u043a\u0443\u043d\u0434\u0430_\u0441\u0435\u043a\u0443\u043d\u0434\u044b_\u0441\u0435\u043a\u0443\u043d\u0434":"\u0441\u0435\u043a\u0443\u043d\u0434\u0443_\u0441\u0435\u043a\u0443\u043d\u0434\u044b_\u0441\u0435\u043a\u0443\u043d\u0434",mm:a?"\u043c\u0438\u043d\u0443\u0442\u0430_\u043c\u0438\u043d\u0443\u0442\u044b_\u043c\u0438\u043d\u0443\u0442":"\u043c\u0438\u043d\u0443\u0442\u0443_\u043c\u0438\u043d\u0443\u0442\u044b_\u043c\u0438\u043d\u0443\u0442",hh:"\u0447\u0430\u0441_\u0447\u0430\u0441\u0430_\u0447\u0430\u0441\u043e\u0432",dd:"\u0434\u0435\u043d\u044c_\u0434\u043d\u044f_\u0434\u043d\u0435\u0439",MM:"\u043c\u0435\u0441\u044f\u0446_\u043c\u0435\u0441\u044f\u0446\u0430_\u043c\u0435\u0441\u044f\u0446\u0435\u0432",yy:"\u0433\u043e\u0434_\u0433\u043e\u0434\u0430_\u043b\u0435\u0442"}[_].split("_"),s%10==1&&s%100!=11?d[0]:2<=s%10&&s%10<=4&&(s%100<10||20<=s%100)?d[1]:d[2])}e.defineLocale("pl",{months:function(e,a){return e?""===a?"("+na[e.month()]+"|"+ta[e.month()]+")":/D MMMM/.test(a)?na[e.month()]:ta[e.month()]:ta},monthsShort:"sty_lut_mar_kwi_maj_cze_lip_sie_wrz_pa\u017a_lis_gru".split("_"),weekdays:"niedziela_poniedzia\u0142ek_wtorek_\u015broda_czwartek_pi\u0105tek_sobota".split("_"),weekdaysShort:"ndz_pon_wt_\u015br_czw_pt_sob".split("_"),weekdaysMin:"Nd_Pn_Wt_\u015ar_Cz_Pt_So".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Dzi\u015b o] LT",nextDay:"[Jutro o] LT",nextWeek:function(){switch(this.day()){case 0:return"[W niedziel\u0119 o] LT";case 2:return"[We wtorek o] LT";case 3:return"[W \u015brod\u0119 o] LT";case 6:return"[W sobot\u0119 o] LT";default:return"[W] dddd [o] LT"}},lastDay:"[Wczoraj o] LT",lastWeek:function(){switch(this.day()){case 0:return"[W zesz\u0142\u0105 niedziel\u0119 o] LT";case 3:return"[W zesz\u0142\u0105 \u015brod\u0119 o] LT";case 6:return"[W zesz\u0142\u0105 sobot\u0119 o] LT";default:return"[W zesz\u0142y] dddd [o] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"%s temu",s:"kilka sekund",ss:ia,m:ia,mm:ia,h:ia,hh:ia,d:"1 dzie\u0144",dd:"%d dni",M:"miesi\u0105c",MM:ia,y:"rok",yy:ia},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}}),e.defineLocale("pt-br",{months:"janeiro_fevereiro_mar\xe7o_abril_maio_junho_julho_agosto_setembro_outubro_novembro_dezembro".split("_"),monthsShort:"jan_fev_mar_abr_mai_jun_jul_ago_set_out_nov_dez".split("_"),weekdays:"domingo_segunda-feira_ter\xe7a-feira_quarta-feira_quinta-feira_sexta-feira_s\xe1bado".split("_"),weekdaysShort:"dom_seg_ter_qua_qui_sex_s\xe1b".split("_"),weekdaysMin:"do_2\xaa_3\xaa_4\xaa_5\xaa_6\xaa_s\xe1".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY [\xe0s] HH:mm",LLLL:"dddd, D [de] MMMM [de] YYYY [\xe0s] HH:mm"},calendar:{sameDay:"[Hoje \xe0s] LT",nextDay:"[Amanh\xe3 \xe0s] LT",nextWeek:"dddd [\xe0s] LT",lastDay:"[Ontem \xe0s] LT",lastWeek:function(){return 0===this.day()||6===this.day()?"[\xdaltimo] dddd [\xe0s] LT":"[\xdaltima] dddd [\xe0s] LT"},sameElse:"L"},relativeTime:{future:"em %s",past:"h\xe1 %s",s:"poucos segundos",ss:"%d segundos",m:"um minuto",mm:"%d minutos",h:"uma hora",hh:"%d horas",d:"um dia",dd:"%d dias",M:"um m\xeas",MM:"%d meses",y:"um ano",yy:"%d anos"},dayOfMonthOrdinalParse:/\d{1,2}\xba/,ordinal:"%d\xba"}),e.defineLocale("pt",{months:"janeiro_fevereiro_mar\xe7o_abril_maio_junho_julho_agosto_setembro_outubro_novembro_dezembro".split("_"),monthsShort:"jan_fev_mar_abr_mai_jun_jul_ago_set_out_nov_dez".split("_"),weekdays:"Domingo_Segunda-feira_Ter\xe7a-feira_Quarta-feira_Quinta-feira_Sexta-feira_S\xe1bado".split("_"),weekdaysShort:"Dom_Seg_Ter_Qua_Qui_Sex_S\xe1b".split("_"),weekdaysMin:"Do_2\xaa_3\xaa_4\xaa_5\xaa_6\xaa_S\xe1".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY HH:mm",LLLL:"dddd, D [de] MMMM [de] YYYY HH:mm"},calendar:{sameDay:"[Hoje \xe0s] LT",nextDay:"[Amanh\xe3 \xe0s] LT",nextWeek:"dddd [\xe0s] LT",lastDay:"[Ontem \xe0s] LT",lastWeek:function(){return 0===this.day()||6===this.day()?"[\xdaltimo] dddd [\xe0s] LT":"[\xdaltima] dddd [\xe0s] LT"},sameElse:"L"},relativeTime:{future:"em %s",past:"h\xe1 %s",s:"segundos",ss:"%d segundos",m:"um minuto",mm:"%d minutos",h:"uma hora",hh:"%d horas",d:"um dia",dd:"%d dias",M:"um m\xeas",MM:"%d meses",y:"um ano",yy:"%d anos"},dayOfMonthOrdinalParse:/\d{1,2}\xba/,ordinal:"%d\xba",week:{dow:1,doy:4}}),e.defineLocale("ro",{months:"ianuarie_februarie_martie_aprilie_mai_iunie_iulie_august_septembrie_octombrie_noiembrie_decembrie".split("_"),monthsShort:"ian._feb._mart._apr._mai_iun._iul._aug._sept._oct._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"duminic\u0103_luni_mar\u021bi_miercuri_joi_vineri_s\xe2mb\u0103t\u0103".split("_"),weekdaysShort:"Dum_Lun_Mar_Mie_Joi_Vin_S\xe2m".split("_"),weekdaysMin:"Du_Lu_Ma_Mi_Jo_Vi_S\xe2".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY H:mm",LLLL:"dddd, D MMMM YYYY H:mm"},calendar:{sameDay:"[azi la] LT",nextDay:"[m\xe2ine la] LT",nextWeek:"dddd [la] LT",lastDay:"[ieri la] LT",lastWeek:"[fosta] dddd [la] LT",sameElse:"L"},relativeTime:{future:"peste %s",past:"%s \xeen urm\u0103",s:"c\xe2teva secunde",ss:ma,m:"un minut",mm:ma,h:"o or\u0103",hh:ma,d:"o zi",dd:ma,M:"o lun\u0103",MM:ma,y:"un an",yy:ma},week:{dow:1,doy:7}});var ua=[/^\u044f\u043d\u0432/i,/^\u0444\u0435\u0432/i,/^\u043c\u0430\u0440/i,/^\u0430\u043f\u0440/i,/^\u043c\u0430[\u0439\u044f]/i,/^\u0438\u044e\u043d/i,/^\u0438\u044e\u043b/i,/^\u0430\u0432\u0433/i,/^\u0441\u0435\u043d/i,/^\u043e\u043a\u0442/i,/^\u043d\u043e\u044f/i,/^\u0434\u0435\u043a/i];e.defineLocale("ru",{months:{format:"\u044f\u043d\u0432\u0430\u0440\u044f_\u0444\u0435\u0432\u0440\u0430\u043b\u044f_\u043c\u0430\u0440\u0442\u0430_\u0430\u043f\u0440\u0435\u043b\u044f_\u043c\u0430\u044f_\u0438\u044e\u043d\u044f_\u0438\u044e\u043b\u044f_\u0430\u0432\u0433\u0443\u0441\u0442\u0430_\u0441\u0435\u043d\u0442\u044f\u0431\u0440\u044f_\u043e\u043a\u0442\u044f\u0431\u0440\u044f_\u043d\u043e\u044f\u0431\u0440\u044f_\u0434\u0435\u043a\u0430\u0431\u0440\u044f".split("_"),standalone:"\u044f\u043d\u0432\u0430\u0440\u044c_\u0444\u0435\u0432\u0440\u0430\u043b\u044c_\u043c\u0430\u0440\u0442_\u0430\u043f\u0440\u0435\u043b\u044c_\u043c\u0430\u0439_\u0438\u044e\u043d\u044c_\u0438\u044e\u043b\u044c_\u0430\u0432\u0433\u0443\u0441\u0442_\u0441\u0435\u043d\u0442\u044f\u0431\u0440\u044c_\u043e\u043a\u0442\u044f\u0431\u0440\u044c_\u043d\u043e\u044f\u0431\u0440\u044c_\u0434\u0435\u043a\u0430\u0431\u0440\u044c".split("_")},monthsShort:{format:"\u044f\u043d\u0432._\u0444\u0435\u0432\u0440._\u043c\u0430\u0440._\u0430\u043f\u0440._\u043c\u0430\u044f_\u0438\u044e\u043d\u044f_\u0438\u044e\u043b\u044f_\u0430\u0432\u0433._\u0441\u0435\u043d\u0442._\u043e\u043a\u0442._\u043d\u043e\u044f\u0431._\u0434\u0435\u043a.".split("_"),standalone:"\u044f\u043d\u0432._\u0444\u0435\u0432\u0440._\u043c\u0430\u0440\u0442_\u0430\u043f\u0440._\u043c\u0430\u0439_\u0438\u044e\u043d\u044c_\u0438\u044e\u043b\u044c_\u0430\u0432\u0433._\u0441\u0435\u043d\u0442._\u043e\u043a\u0442._\u043d\u043e\u044f\u0431._\u0434\u0435\u043a.".split("_")},weekdays:{standalone:"\u0432\u043e\u0441\u043a\u0440\u0435\u0441\u0435\u043d\u044c\u0435_\u043f\u043e\u043d\u0435\u0434\u0435\u043b\u044c\u043d\u0438\u043a_\u0432\u0442\u043e\u0440\u043d\u0438\u043a_\u0441\u0440\u0435\u0434\u0430_\u0447\u0435\u0442\u0432\u0435\u0440\u0433_\u043f\u044f\u0442\u043d\u0438\u0446\u0430_\u0441\u0443\u0431\u0431\u043e\u0442\u0430".split("_"),format:"\u0432\u043e\u0441\u043a\u0440\u0435\u0441\u0435\u043d\u044c\u0435_\u043f\u043e\u043d\u0435\u0434\u0435\u043b\u044c\u043d\u0438\u043a_\u0432\u0442\u043e\u0440\u043d\u0438\u043a_\u0441\u0440\u0435\u0434\u0443_\u0447\u0435\u0442\u0432\u0435\u0440\u0433_\u043f\u044f\u0442\u043d\u0438\u0446\u0443_\u0441\u0443\u0431\u0431\u043e\u0442\u0443".split("_"),isFormat:/\[ ?[\u0412\u0432] ?(?:\u043f\u0440\u043e\u0448\u043b\u0443\u044e|\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0443\u044e|\u044d\u0442\u0443)? ?] ?dddd/},weekdaysShort:"\u0432\u0441_\u043f\u043d_\u0432\u0442_\u0441\u0440_\u0447\u0442_\u043f\u0442_\u0441\u0431".split("_"),weekdaysMin:"\u0432\u0441_\u043f\u043d_\u0432\u0442_\u0441\u0440_\u0447\u0442_\u043f\u0442_\u0441\u0431".split("_"),monthsParse:ua,longMonthsParse:ua,shortMonthsParse:ua,monthsRegex:/^(\u044f\u043d\u0432\u0430\u0440[\u044c\u044f]|\u044f\u043d\u0432\.?|\u0444\u0435\u0432\u0440\u0430\u043b[\u044c\u044f]|\u0444\u0435\u0432\u0440?\.?|\u043c\u0430\u0440\u0442\u0430?|\u043c\u0430\u0440\.?|\u0430\u043f\u0440\u0435\u043b[\u044c\u044f]|\u0430\u043f\u0440\.?|\u043c\u0430[\u0439\u044f]|\u0438\u044e\u043d[\u044c\u044f]|\u0438\u044e\u043d\.?|\u0438\u044e\u043b[\u044c\u044f]|\u0438\u044e\u043b\.?|\u0430\u0432\u0433\u0443\u0441\u0442\u0430?|\u0430\u0432\u0433\.?|\u0441\u0435\u043d\u0442\u044f\u0431\u0440[\u044c\u044f]|\u0441\u0435\u043d\u0442?\.?|\u043e\u043a\u0442\u044f\u0431\u0440[\u044c\u044f]|\u043e\u043a\u0442\.?|\u043d\u043e\u044f\u0431\u0440[\u044c\u044f]|\u043d\u043e\u044f\u0431?\.?|\u0434\u0435\u043a\u0430\u0431\u0440[\u044c\u044f]|\u0434\u0435\u043a\.?)/i,monthsShortRegex:/^(\u044f\u043d\u0432\u0430\u0440[\u044c\u044f]|\u044f\u043d\u0432\.?|\u0444\u0435\u0432\u0440\u0430\u043b[\u044c\u044f]|\u0444\u0435\u0432\u0440?\.?|\u043c\u0430\u0440\u0442\u0430?|\u043c\u0430\u0440\.?|\u0430\u043f\u0440\u0435\u043b[\u044c\u044f]|\u0430\u043f\u0440\.?|\u043c\u0430[\u0439\u044f]|\u0438\u044e\u043d[\u044c\u044f]|\u0438\u044e\u043d\.?|\u0438\u044e\u043b[\u044c\u044f]|\u0438\u044e\u043b\.?|\u0430\u0432\u0433\u0443\u0441\u0442\u0430?|\u0430\u0432\u0433\.?|\u0441\u0435\u043d\u0442\u044f\u0431\u0440[\u044c\u044f]|\u0441\u0435\u043d\u0442?\.?|\u043e\u043a\u0442\u044f\u0431\u0440[\u044c\u044f]|\u043e\u043a\u0442\.?|\u043d\u043e\u044f\u0431\u0440[\u044c\u044f]|\u043d\u043e\u044f\u0431?\.?|\u0434\u0435\u043a\u0430\u0431\u0440[\u044c\u044f]|\u0434\u0435\u043a\.?)/i,monthsStrictRegex:/^(\u044f\u043d\u0432\u0430\u0440[\u044f\u044c]|\u0444\u0435\u0432\u0440\u0430\u043b[\u044f\u044c]|\u043c\u0430\u0440\u0442\u0430?|\u0430\u043f\u0440\u0435\u043b[\u044f\u044c]|\u043c\u0430[\u044f\u0439]|\u0438\u044e\u043d[\u044f\u044c]|\u0438\u044e\u043b[\u044f\u044c]|\u0430\u0432\u0433\u0443\u0441\u0442\u0430?|\u0441\u0435\u043d\u0442\u044f\u0431\u0440[\u044f\u044c]|\u043e\u043a\u0442\u044f\u0431\u0440[\u044f\u044c]|\u043d\u043e\u044f\u0431\u0440[\u044f\u044c]|\u0434\u0435\u043a\u0430\u0431\u0440[\u044f\u044c])/i,monthsShortStrictRegex:/^(\u044f\u043d\u0432\.|\u0444\u0435\u0432\u0440?\.|\u043c\u0430\u0440[\u0442.]|\u0430\u043f\u0440\.|\u043c\u0430[\u044f\u0439]|\u0438\u044e\u043d[\u044c\u044f.]|\u0438\u044e\u043b[\u044c\u044f.]|\u0430\u0432\u0433\.|\u0441\u0435\u043d\u0442?\.|\u043e\u043a\u0442\.|\u043d\u043e\u044f\u0431?\.|\u0434\u0435\u043a\.)/i,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY \u0433.",LLL:"D MMMM YYYY \u0433., H:mm",LLLL:"dddd, D MMMM YYYY \u0433., H:mm"},calendar:{sameDay:"[\u0421\u0435\u0433\u043e\u0434\u043d\u044f, \u0432] LT",nextDay:"[\u0417\u0430\u0432\u0442\u0440\u0430, \u0432] LT",lastDay:"[\u0412\u0447\u0435\u0440\u0430, \u0432] LT",nextWeek:function(e){if(e.week()===this.week())return 2===this.day()?"[\u0412\u043e] dddd, [\u0432] LT":"[\u0412] dddd, [\u0432] LT";switch(this.day()){case 0:return"[\u0412 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435] dddd, [\u0432] LT";case 1:case 2:case 4:return"[\u0412 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439] dddd, [\u0432] LT";case 3:case 5:case 6:return"[\u0412 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0443\u044e] dddd, [\u0432] LT"}},lastWeek:function(e){if(e.week()===this.week())return 2===this.day()?"[\u0412\u043e] dddd, [\u0432] LT":"[\u0412] dddd, [\u0432] LT";switch(this.day()){case 0:return"[\u0412 \u043f\u0440\u043e\u0448\u043b\u043e\u0435] dddd, [\u0432] LT";case 1:case 2:case 4:return"[\u0412 \u043f\u0440\u043e\u0448\u043b\u044b\u0439] dddd, [\u0432] LT";case 3:case 5:case 6:return"[\u0412 \u043f\u0440\u043e\u0448\u043b\u0443\u044e] dddd, [\u0432] LT"}},sameElse:"L"},relativeTime:{future:"\u0447\u0435\u0440\u0435\u0437 %s",past:"%s \u043d\u0430\u0437\u0430\u0434",s:"\u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u0435\u043a\u0443\u043d\u0434",ss:oa,m:oa,mm:oa,h:"\u0447\u0430\u0441",hh:oa,d:"\u0434\u0435\u043d\u044c",dd:oa,M:"\u043c\u0435\u0441\u044f\u0446",MM:oa,y:"\u0433\u043e\u0434",yy:oa},meridiemParse:/\u043d\u043e\u0447\u0438|\u0443\u0442\u0440\u0430|\u0434\u043d\u044f|\u0432\u0435\u0447\u0435\u0440\u0430/i,isPM:function(e){return/^(\u0434\u043d\u044f|\u0432\u0435\u0447\u0435\u0440\u0430)$/.test(e)},meridiem:function(e,a,_){return e<4?"\u043d\u043e\u0447\u0438":e<12?"\u0443\u0442\u0440\u0430":e<17?"\u0434\u043d\u044f":"\u0432\u0435\u0447\u0435\u0440\u0430"},dayOfMonthOrdinalParse:/\d{1,2}-(\u0439|\u0433\u043e|\u044f)/,ordinal:function(e,a){switch(a){case"M":case"d":case"DDD":return e+"-\u0439";case"D":return e+"-\u0433\u043e";case"w":case"W":return e+"-\u044f";default:return e}},week:{dow:1,doy:4}});var la=["\u062c\u0646\u0648\u0631\u064a","\u0641\u064a\u0628\u0631\u0648\u0631\u064a","\u0645\u0627\u0631\u0686","\u0627\u067e\u0631\u064a\u0644","\u0645\u0626\u064a","\u062c\u0648\u0646","\u062c\u0648\u0644\u0627\u0621\u0650","\u0622\u06af\u0633\u067d","\u0633\u064a\u067e\u067d\u0645\u0628\u0631","\u0622\u06aa\u067d\u0648\u0628\u0631","\u0646\u0648\u0645\u0628\u0631","\u068a\u0633\u0645\u0628\u0631"],Ma=["\u0622\u0686\u0631","\u0633\u0648\u0645\u0631","\u0627\u06b1\u0627\u0631\u0648","\u0627\u0631\u0628\u0639","\u062e\u0645\u064a\u0633","\u062c\u0645\u0639","\u0687\u0646\u0687\u0631"];e.defineLocale("sd",{months:la,monthsShort:la,weekdays:Ma,weekdaysShort:Ma,weekdaysMin:Ma,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd\u060c D MMMM YYYY HH:mm"},meridiemParse:/\u0635\u0628\u062d|\u0634\u0627\u0645/,isPM:function(e){return"\u0634\u0627\u0645"===e},meridiem:function(e,a,_){return e<12?"\u0635\u0628\u062d":"\u0634\u0627\u0645"},calendar:{sameDay:"[\u0627\u0684] LT",nextDay:"[\u0633\u0680\u0627\u06bb\u064a] LT",nextWeek:"dddd [\u0627\u06b3\u064a\u0646 \u0647\u0641\u062a\u064a \u062a\u064a] LT",lastDay:"[\u06aa\u0627\u0644\u0647\u0647] LT",lastWeek:"[\u06af\u0632\u0631\u064a\u0644 \u0647\u0641\u062a\u064a] dddd [\u062a\u064a] LT",sameElse:"L"},relativeTime:{future:"%s \u067e\u0648\u0621",past:"%s \u0627\u06b3",s:"\u0686\u0646\u062f \u0633\u064a\u06aa\u0646\u068a",ss:"%d \u0633\u064a\u06aa\u0646\u068a",m:"\u0647\u06aa \u0645\u0646\u067d",mm:"%d \u0645\u0646\u067d",h:"\u0647\u06aa \u06aa\u0644\u0627\u06aa",hh:"%d \u06aa\u0644\u0627\u06aa",d:"\u0647\u06aa \u068f\u064a\u0646\u0647\u0646",dd:"%d \u068f\u064a\u0646\u0647\u0646",M:"\u0647\u06aa \u0645\u0647\u064a\u0646\u0648",MM:"%d \u0645\u0647\u064a\u0646\u0627",y:"\u0647\u06aa \u0633\u0627\u0644",yy:"%d \u0633\u0627\u0644"},preparse:function(e){return e.replace(/\u060c/g,",")},postformat:function(e){return e.replace(/,/g,"\u060c")},week:{dow:1,doy:4}}),e.defineLocale("se",{months:"o\u0111\u0111ajagem\xe1nnu_guovvam\xe1nnu_njuk\u010dam\xe1nnu_cuo\u014bom\xe1nnu_miessem\xe1nnu_geassem\xe1nnu_suoidnem\xe1nnu_borgem\xe1nnu_\u010dak\u010dam\xe1nnu_golggotm\xe1nnu_sk\xe1bmam\xe1nnu_juovlam\xe1nnu".split("_"),monthsShort:"o\u0111\u0111j_guov_njuk_cuo_mies_geas_suoi_borg_\u010dak\u010d_golg_sk\xe1b_juov".split("_"),weekdays:"sotnabeaivi_vuoss\xe1rga_ma\u014b\u014beb\xe1rga_gaskavahkku_duorastat_bearjadat_l\xe1vvardat".split("_"),weekdaysShort:"sotn_vuos_ma\u014b_gask_duor_bear_l\xe1v".split("_"),weekdaysMin:"s_v_m_g_d_b_L".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"MMMM D. [b.] YYYY",LLL:"MMMM D. [b.] YYYY [ti.] HH:mm",LLLL:"dddd, MMMM D. [b.] YYYY [ti.] HH:mm"},calendar:{sameDay:"[otne ti] LT",nextDay:"[ihttin ti] LT",nextWeek:"dddd [ti] LT",lastDay:"[ikte ti] LT",lastWeek:"[ovddit] dddd [ti] LT",sameElse:"L"},relativeTime:{future:"%s gea\u017ees",past:"ma\u014bit %s",s:"moadde sekunddat",ss:"%d sekunddat",m:"okta minuhta",mm:"%d minuhtat",h:"okta diimmu",hh:"%d diimmut",d:"okta beaivi",dd:"%d beaivvit",M:"okta m\xe1nnu",MM:"%d m\xe1nut",y:"okta jahki",yy:"%d jagit"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}}),e.defineLocale("si",{months:"\u0da2\u0db1\u0dc0\u0dcf\u0dbb\u0dd2_\u0db4\u0dd9\u0db6\u0dbb\u0dc0\u0dcf\u0dbb\u0dd2_\u0db8\u0dcf\u0dbb\u0dca\u0dad\u0dd4_\u0d85\u0db4\u0dca\u200d\u0dbb\u0dda\u0dbd\u0dca_\u0db8\u0dd0\u0dba\u0dd2_\u0da2\u0dd6\u0db1\u0dd2_\u0da2\u0dd6\u0dbd\u0dd2_\u0d85\u0d9c\u0ddd\u0dc3\u0dca\u0dad\u0dd4_\u0dc3\u0dd0\u0db4\u0dca\u0dad\u0dd0\u0db8\u0dca\u0db6\u0dbb\u0dca_\u0d94\u0d9a\u0dca\u0dad\u0ddd\u0db6\u0dbb\u0dca_\u0db1\u0ddc\u0dc0\u0dd0\u0db8\u0dca\u0db6\u0dbb\u0dca_\u0daf\u0dd9\u0dc3\u0dd0\u0db8\u0dca\u0db6\u0dbb\u0dca".split("_"),monthsShort:"\u0da2\u0db1_\u0db4\u0dd9\u0db6_\u0db8\u0dcf\u0dbb\u0dca_\u0d85\u0db4\u0dca_\u0db8\u0dd0\u0dba\u0dd2_\u0da2\u0dd6\u0db1\u0dd2_\u0da2\u0dd6\u0dbd\u0dd2_\u0d85\u0d9c\u0ddd_\u0dc3\u0dd0\u0db4\u0dca_\u0d94\u0d9a\u0dca_\u0db1\u0ddc\u0dc0\u0dd0_\u0daf\u0dd9\u0dc3\u0dd0".split("_"),weekdays:"\u0d89\u0dbb\u0dd2\u0daf\u0dcf_\u0dc3\u0db3\u0dd4\u0daf\u0dcf_\u0d85\u0d9f\u0dc4\u0dbb\u0dd4\u0dc0\u0dcf\u0daf\u0dcf_\u0db6\u0daf\u0dcf\u0daf\u0dcf_\u0db6\u0dca\u200d\u0dbb\u0dc4\u0dc3\u0dca\u0db4\u0dad\u0dd2\u0db1\u0dca\u0daf\u0dcf_\u0dc3\u0dd2\u0d9a\u0dd4\u0dbb\u0dcf\u0daf\u0dcf_\u0dc3\u0dd9\u0db1\u0dc3\u0dd4\u0dbb\u0dcf\u0daf\u0dcf".split("_"),weekdaysShort:"\u0d89\u0dbb\u0dd2_\u0dc3\u0db3\u0dd4_\u0d85\u0d9f_\u0db6\u0daf\u0dcf_\u0db6\u0dca\u200d\u0dbb\u0dc4_\u0dc3\u0dd2\u0d9a\u0dd4_\u0dc3\u0dd9\u0db1".split("_"),weekdaysMin:"\u0d89_\u0dc3_\u0d85_\u0db6_\u0db6\u0dca\u200d\u0dbb_\u0dc3\u0dd2_\u0dc3\u0dd9".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"a h:mm",LTS:"a h:mm:ss",L:"YYYY/MM/DD",LL:"YYYY MMMM D",LLL:"YYYY MMMM D, a h:mm",LLLL:"YYYY MMMM D [\u0dc0\u0dd0\u0db1\u0dd2] dddd, a h:mm:ss"},calendar:{sameDay:"[\u0d85\u0daf] LT[\u0da7]",nextDay:"[\u0dc4\u0dd9\u0da7] LT[\u0da7]",nextWeek:"dddd LT[\u0da7]",lastDay:"[\u0d8a\u0dba\u0dda] LT[\u0da7]",lastWeek:"[\u0db4\u0dc3\u0dd4\u0d9c\u0dd2\u0dba] dddd LT[\u0da7]",sameElse:"L"},relativeTime:{future:"%s\u0d9a\u0dd2\u0db1\u0dca",past:"%s\u0d9a\u0da7 \u0db4\u0dd9\u0dbb",s:"\u0dad\u0dad\u0dca\u0db4\u0dbb \u0d9a\u0dd2\u0dc4\u0dd2\u0db4\u0dba",ss:"\u0dad\u0dad\u0dca\u0db4\u0dbb %d",m:"\u0db8\u0dd2\u0db1\u0dd2\u0dad\u0dca\u0dad\u0dd4\u0dc0",mm:"\u0db8\u0dd2\u0db1\u0dd2\u0dad\u0dca\u0dad\u0dd4 %d",h:"\u0db4\u0dd0\u0dba",hh:"\u0db4\u0dd0\u0dba %d",d:"\u0daf\u0dd2\u0db1\u0dba",dd:"\u0daf\u0dd2\u0db1 %d",M:"\u0db8\u0dcf\u0dc3\u0dba",MM:"\u0db8\u0dcf\u0dc3 %d",y:"\u0dc0\u0dc3\u0dbb",yy:"\u0dc0\u0dc3\u0dbb %d"},dayOfMonthOrdinalParse:/\d{1,2} \u0dc0\u0dd0\u0db1\u0dd2/,ordinal:function(e){return e+" \u0dc0\u0dd0\u0db1\u0dd2"},meridiemParse:/\u0db4\u0dd9\u0dbb \u0dc0\u0dbb\u0dd4|\u0db4\u0dc3\u0dca \u0dc0\u0dbb\u0dd4|\u0db4\u0dd9.\u0dc0|\u0db4.\u0dc0./,isPM:function(e){return"\u0db4.\u0dc0."===e||"\u0db4\u0dc3\u0dca \u0dc0\u0dbb\u0dd4"===e},meridiem:function(e,a,_){return 11<e?_?"\u0db4.\u0dc0.":"\u0db4\u0dc3\u0dca \u0dc0\u0dbb\u0dd4":_?"\u0db4\u0dd9.\u0dc0.":"\u0db4\u0dd9\u0dbb \u0dc0\u0dbb\u0dd4"}});var La="janu\xe1r_febru\xe1r_marec_apr\xedl_m\xe1j_j\xfan_j\xfal_august_september_okt\xf3ber_november_december".split("_"),Ya="jan_feb_mar_apr_m\xe1j_j\xfan_j\xfal_aug_sep_okt_nov_dec".split("_");function ha(e){return 1<e&&e<5}function ya(e,a,_,s){var d=e+" ";switch(_){case"s":return a||s?"p\xe1r sek\xfand":"p\xe1r sekundami";case"ss":return a||s?d+(ha(e)?"sekundy":"sek\xfand"):d+"sekundami";case"m":return a?"min\xfata":s?"min\xfatu":"min\xfatou";case"mm":return a||s?d+(ha(e)?"min\xfaty":"min\xfat"):d+"min\xfatami";case"h":return a?"hodina":s?"hodinu":"hodinou";case"hh":return a||s?d+(ha(e)?"hodiny":"hod\xedn"):d+"hodinami";case"d":return a||s?"de\u0148":"d\u0148om";case"dd":return a||s?d+(ha(e)?"dni":"dn\xed"):d+"d\u0148ami";case"M":return a||s?"mesiac":"mesiacom";case"MM":return a||s?d+(ha(e)?"mesiace":"mesiacov"):d+"mesiacmi";case"y":return a||s?"rok":"rokom";case"yy":return a||s?d+(ha(e)?"roky":"rokov"):d+"rokmi"}}function ca(e,a,_,s){var d=e+" ";switch(_){case"s":return a||s?"nekaj sekund":"nekaj sekundami";case"ss":return d+=1===e?a?"sekundo":"sekundi":2===e?a||s?"sekundi":"sekundah":e<5?a||s?"sekunde":"sekundah":"sekund";case"m":return a?"ena minuta":"eno minuto";case"mm":return d+=1===e?a?"minuta":"minuto":2===e?a||s?"minuti":"minutama":e<5?a||s?"minute":"minutami":a||s?"minut":"minutami";case"h":return a?"ena ura":"eno uro";case"hh":return d+=1===e?a?"ura":"uro":2===e?a||s?"uri":"urama":e<5?a||s?"ure":"urami":a||s?"ur":"urami";case"d":return a||s?"en dan":"enim dnem";case"dd":return d+=1===e?a||s?"dan":"dnem":2===e?a||s?"dni":"dnevoma":a||s?"dni":"dnevi";case"M":return a||s?"en mesec":"enim mesecem";case"MM":return d+=1===e?a||s?"mesec":"mesecem":2===e?a||s?"meseca":"mesecema":e<5?a||s?"mesece":"meseci":a||s?"mesecev":"meseci";case"y":return a||s?"eno leto":"enim letom";case"yy":return d+=1===e?a||s?"leto":"letom":2===e?a||s?"leti":"letoma":e<5?a||s?"leta":"leti":a||s?"let":"leti"}}e.defineLocale("sk",{months:La,monthsShort:Ya,weekdays:"nede\u013ea_pondelok_utorok_streda_\u0161tvrtok_piatok_sobota".split("_"),weekdaysShort:"ne_po_ut_st_\u0161t_pi_so".split("_"),weekdaysMin:"ne_po_ut_st_\u0161t_pi_so".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd D. MMMM YYYY H:mm"},calendar:{sameDay:"[dnes o] LT",nextDay:"[zajtra o] LT",nextWeek:function(){switch(this.day()){case 0:return"[v nede\u013eu o] LT";case 1:case 2:return"[v] dddd [o] LT";case 3:return"[v stredu o] LT";case 4:return"[vo \u0161tvrtok o] LT";case 5:return"[v piatok o] LT";case 6:return"[v sobotu o] LT"}},lastDay:"[v\u010dera o] LT",lastWeek:function(){switch(this.day()){case 0:return"[minul\xfa nede\u013eu o] LT";case 1:case 2:return"[minul\xfd] dddd [o] LT";case 3:return"[minul\xfa stredu o] LT";case 4:case 5:return"[minul\xfd] dddd [o] LT";case 6:return"[minul\xfa sobotu o] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"pred %s",s:ya,ss:ya,m:ya,mm:ya,h:ya,hh:ya,d:ya,dd:ya,M:ya,MM:ya,y:ya,yy:ya},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}}),e.defineLocale("sl",{months:"januar_februar_marec_april_maj_junij_julij_avgust_september_oktober_november_december".split("_"),monthsShort:"jan._feb._mar._apr._maj._jun._jul._avg._sep._okt._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"nedelja_ponedeljek_torek_sreda_\u010detrtek_petek_sobota".split("_"),weekdaysShort:"ned._pon._tor._sre._\u010det._pet._sob.".split("_"),weekdaysMin:"ne_po_to_sr_\u010de_pe_so".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD. MM. YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[danes ob] LT",nextDay:"[jutri ob] LT",nextWeek:function(){switch(this.day()){case 0:return"[v] [nedeljo] [ob] LT";case 3:return"[v] [sredo] [ob] LT";case 6:return"[v] [soboto] [ob] LT";case 1:case 2:case 4:case 5:return"[v] dddd [ob] LT"}},lastDay:"[v\u010deraj ob] LT",lastWeek:function(){switch(this.day()){case 0:return"[prej\u0161njo] [nedeljo] [ob] LT";case 3:return"[prej\u0161njo] [sredo] [ob] LT";case 6:return"[prej\u0161njo] [soboto] [ob] LT";case 1:case 2:case 4:case 5:return"[prej\u0161nji] dddd [ob] LT"}},sameElse:"L"},relativeTime:{future:"\u010dez %s",past:"pred %s",s:ca,ss:ca,m:ca,mm:ca,h:ca,hh:ca,d:ca,dd:ca,M:ca,MM:ca,y:ca,yy:ca},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}}),e.defineLocale("sq",{months:"Janar_Shkurt_Mars_Prill_Maj_Qershor_Korrik_Gusht_Shtator_Tetor_N\xebntor_Dhjetor".split("_"),monthsShort:"Jan_Shk_Mar_Pri_Maj_Qer_Kor_Gus_Sht_Tet_N\xebn_Dhj".split("_"),weekdays:"E Diel_E H\xebn\xeb_E Mart\xeb_E M\xebrkur\xeb_E Enjte_E Premte_E Shtun\xeb".split("_"),weekdaysShort:"Die_H\xebn_Mar_M\xebr_Enj_Pre_Sht".split("_"),weekdaysMin:"D_H_Ma_M\xeb_E_P_Sh".split("_"),weekdaysParseExact:!0,meridiemParse:/PD|MD/,isPM:function(e){return"M"===e.charAt(0)},meridiem:function(e,a,_){return e<12?"PD":"MD"},longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Sot n\xeb] LT",nextDay:"[Nes\xebr n\xeb] LT",nextWeek:"dddd [n\xeb] LT",lastDay:"[Dje n\xeb] LT",lastWeek:"dddd [e kaluar n\xeb] LT",sameElse:"L"},relativeTime:{future:"n\xeb %s",past:"%s m\xeb par\xeb",s:"disa sekonda",ss:"%d sekonda",m:"nj\xeb minut\xeb",mm:"%d minuta",h:"nj\xeb or\xeb",hh:"%d or\xeb",d:"nj\xeb dit\xeb",dd:"%d dit\xeb",M:"nj\xeb muaj",MM:"%d muaj",y:"nj\xeb vit",yy:"%d vite"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}});var ka={words:{ss:["\u0441\u0435\u043a\u0443\u043d\u0434\u0430","\u0441\u0435\u043a\u0443\u043d\u0434\u0435","\u0441\u0435\u043a\u0443\u043d\u0434\u0438"],m:["\u0458\u0435\u0434\u0430\u043d \u043c\u0438\u043d\u0443\u0442","\u0458\u0435\u0434\u043d\u0435 \u043c\u0438\u043d\u0443\u0442\u0435"],mm:["\u043c\u0438\u043d\u0443\u0442","\u043c\u0438\u043d\u0443\u0442\u0435","\u043c\u0438\u043d\u0443\u0442\u0430"],h:["\u0458\u0435\u0434\u0430\u043d \u0441\u0430\u0442","\u0458\u0435\u0434\u043d\u043e\u0433 \u0441\u0430\u0442\u0430"],hh:["\u0441\u0430\u0442","\u0441\u0430\u0442\u0430","\u0441\u0430\u0442\u0438"],dd:["\u0434\u0430\u043d","\u0434\u0430\u043d\u0430","\u0434\u0430\u043d\u0430"],MM:["\u043c\u0435\u0441\u0435\u0446","\u043c\u0435\u0441\u0435\u0446\u0430","\u043c\u0435\u0441\u0435\u0446\u0438"],yy:["\u0433\u043e\u0434\u0438\u043d\u0430","\u0433\u043e\u0434\u0438\u043d\u0435","\u0433\u043e\u0434\u0438\u043d\u0430"]},correctGrammaticalCase:function(e,a){return 1===e?a[0]:2<=e&&e<=4?a[1]:a[2]},translate:function(e,a,_){var s=ka.words[_];return 1===_.length?a?s[0]:s[1]:e+" "+ka.correctGrammaticalCase(e,s)}};e.defineLocale("sr-cyrl",{months:"\u0458\u0430\u043d\u0443\u0430\u0440_\u0444\u0435\u0431\u0440\u0443\u0430\u0440_\u043c\u0430\u0440\u0442_\u0430\u043f\u0440\u0438\u043b_\u043c\u0430\u0458_\u0458\u0443\u043d_\u0458\u0443\u043b_\u0430\u0432\u0433\u0443\u0441\u0442_\u0441\u0435\u043f\u0442\u0435\u043c\u0431\u0430\u0440_\u043e\u043a\u0442\u043e\u0431\u0430\u0440_\u043d\u043e\u0432\u0435\u043c\u0431\u0430\u0440_\u0434\u0435\u0446\u0435\u043c\u0431\u0430\u0440".split("_"),monthsShort:"\u0458\u0430\u043d._\u0444\u0435\u0431._\u043c\u0430\u0440._\u0430\u043f\u0440._\u043c\u0430\u0458_\u0458\u0443\u043d_\u0458\u0443\u043b_\u0430\u0432\u0433._\u0441\u0435\u043f._\u043e\u043a\u0442._\u043d\u043e\u0432._\u0434\u0435\u0446.".split("_"),monthsParseExact:!0,weekdays:"\u043d\u0435\u0434\u0435\u0459\u0430_\u043f\u043e\u043d\u0435\u0434\u0435\u0459\u0430\u043a_\u0443\u0442\u043e\u0440\u0430\u043a_\u0441\u0440\u0435\u0434\u0430_\u0447\u0435\u0442\u0432\u0440\u0442\u0430\u043a_\u043f\u0435\u0442\u0430\u043a_\u0441\u0443\u0431\u043e\u0442\u0430".split("_"),weekdaysShort:"\u043d\u0435\u0434._\u043f\u043e\u043d._\u0443\u0442\u043e._\u0441\u0440\u0435._\u0447\u0435\u0442._\u043f\u0435\u0442._\u0441\u0443\u0431.".split("_"),weekdaysMin:"\u043d\u0435_\u043f\u043e_\u0443\u0442_\u0441\u0440_\u0447\u0435_\u043f\u0435_\u0441\u0443".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[\u0434\u0430\u043d\u0430\u0441 \u0443] LT",nextDay:"[\u0441\u0443\u0442\u0440\u0430 \u0443] LT",nextWeek:function(){switch(this.day()){case 0:return"[\u0443] [\u043d\u0435\u0434\u0435\u0459\u0443] [\u0443] LT";case 3:return"[\u0443] [\u0441\u0440\u0435\u0434\u0443] [\u0443] LT";case 6:return"[\u0443] [\u0441\u0443\u0431\u043e\u0442\u0443] [\u0443] LT";case 1:case 2:case 4:case 5:return"[\u0443] dddd [\u0443] LT"}},lastDay:"[\u0458\u0443\u0447\u0435 \u0443] LT",lastWeek:function(){return["[\u043f\u0440\u043e\u0448\u043b\u0435] [\u043d\u0435\u0434\u0435\u0459\u0435] [\u0443] LT","[\u043f\u0440\u043e\u0448\u043b\u043e\u0433] [\u043f\u043e\u043d\u0435\u0434\u0435\u0459\u043a\u0430] [\u0443] LT","[\u043f\u0440\u043e\u0448\u043b\u043e\u0433] [\u0443\u0442\u043e\u0440\u043a\u0430] [\u0443] LT","[\u043f\u0440\u043e\u0448\u043b\u0435] [\u0441\u0440\u0435\u0434\u0435] [\u0443] LT","[\u043f\u0440\u043e\u0448\u043b\u043e\u0433] [\u0447\u0435\u0442\u0432\u0440\u0442\u043a\u0430] [\u0443] LT","[\u043f\u0440\u043e\u0448\u043b\u043e\u0433] [\u043f\u0435\u0442\u043a\u0430] [\u0443] LT","[\u043f\u0440\u043e\u0448\u043b\u0435] [\u0441\u0443\u0431\u043e\u0442\u0435] [\u0443] LT"][this.day()]},sameElse:"L"},relativeTime:{future:"\u0437\u0430 %s",past:"\u043f\u0440\u0435 %s",s:"\u043d\u0435\u043a\u043e\u043b\u0438\u043a\u043e \u0441\u0435\u043a\u0443\u043d\u0434\u0438",ss:ka.translate,m:ka.translate,mm:ka.translate,h:ka.translate,hh:ka.translate,d:"\u0434\u0430\u043d",dd:ka.translate,M:"\u043c\u0435\u0441\u0435\u0446",MM:ka.translate,y:"\u0433\u043e\u0434\u0438\u043d\u0443",yy:ka.translate},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}});var Da={words:{ss:["sekunda","sekunde","sekundi"],m:["jedan minut","jedne minute"],mm:["minut","minute","minuta"],h:["jedan sat","jednog sata"],hh:["sat","sata","sati"],dd:["dan","dana","dana"],MM:["mesec","meseca","meseci"],yy:["godina","godine","godina"]},correctGrammaticalCase:function(e,a){return 1===e?a[0]:2<=e&&e<=4?a[1]:a[2]},translate:function(e,a,_){var s=Da.words[_];return 1===_.length?a?s[0]:s[1]:e+" "+Da.correctGrammaticalCase(e,s)}};e.defineLocale("sr",{months:"januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar".split("_"),monthsShort:"jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"nedelja_ponedeljak_utorak_sreda_\u010detvrtak_petak_subota".split("_"),weekdaysShort:"ned._pon._uto._sre._\u010det._pet._sub.".split("_"),weekdaysMin:"ne_po_ut_sr_\u010de_pe_su".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[danas u] LT",nextDay:"[sutra u] LT",nextWeek:function(){switch(this.day()){case 0:return"[u] [nedelju] [u] LT";case 3:return"[u] [sredu] [u] LT";case 6:return"[u] [subotu] [u] LT";case 1:case 2:case 4:case 5:return"[u] dddd [u] LT"}},lastDay:"[ju\u010de u] LT",lastWeek:function(){return["[pro\u0161le] [nedelje] [u] LT","[pro\u0161log] [ponedeljka] [u] LT","[pro\u0161log] [utorka] [u] LT","[pro\u0161le] [srede] [u] LT","[pro\u0161log] [\u010detvrtka] [u] LT","[pro\u0161log] [petka] [u] LT","[pro\u0161le] [subote] [u] LT"][this.day()]},sameElse:"L"},relativeTime:{future:"za %s",past:"pre %s",s:"nekoliko sekundi",ss:Da.translate,m:Da.translate,mm:Da.translate,h:Da.translate,hh:Da.translate,d:"dan",dd:Da.translate,M:"mesec",MM:Da.translate,y:"godinu",yy:Da.translate},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}}),e.defineLocale("ss",{months:"Bhimbidvwane_Indlovana_Indlov'lenkhulu_Mabasa_Inkhwekhweti_Inhlaba_Kholwane_Ingci_Inyoni_Imphala_Lweti_Ingongoni".split("_"),monthsShort:"Bhi_Ina_Inu_Mab_Ink_Inh_Kho_Igc_Iny_Imp_Lwe_Igo".split("_"),weekdays:"Lisontfo_Umsombuluko_Lesibili_Lesitsatfu_Lesine_Lesihlanu_Umgcibelo".split("_"),weekdaysShort:"Lis_Umb_Lsb_Les_Lsi_Lsh_Umg".split("_"),weekdaysMin:"Li_Us_Lb_Lt_Ls_Lh_Ug".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendar:{sameDay:"[Namuhla nga] LT",nextDay:"[Kusasa nga] LT",nextWeek:"dddd [nga] LT",lastDay:"[Itolo nga] LT",lastWeek:"dddd [leliphelile] [nga] LT",sameElse:"L"},relativeTime:{future:"nga %s",past:"wenteka nga %s",s:"emizuzwana lomcane",ss:"%d mzuzwana",m:"umzuzu",mm:"%d emizuzu",h:"lihora",hh:"%d emahora",d:"lilanga",dd:"%d emalanga",M:"inyanga",MM:"%d tinyanga",y:"umnyaka",yy:"%d iminyaka"},meridiemParse:/ekuseni|emini|entsambama|ebusuku/,meridiem:function(e,a,_){return e<11?"ekuseni":e<15?"emini":e<19?"entsambama":"ebusuku"},meridiemHour:function(e,a){return 12===e&&(e=0),"ekuseni"===a?e:"emini"===a?11<=e?e:e+12:"entsambama"===a||"ebusuku"===a?0===e?0:e+12:void 0},dayOfMonthOrdinalParse:/\d{1,2}/,ordinal:"%d",week:{dow:1,doy:4}}),e.defineLocale("sv",{months:"januari_februari_mars_april_maj_juni_juli_augusti_september_oktober_november_december".split("_"),monthsShort:"jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec".split("_"),weekdays:"s\xf6ndag_m\xe5ndag_tisdag_onsdag_torsdag_fredag_l\xf6rdag".split("_"),weekdaysShort:"s\xf6n_m\xe5n_tis_ons_tor_fre_l\xf6r".split("_"),weekdaysMin:"s\xf6_m\xe5_ti_on_to_fr_l\xf6".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [kl.] HH:mm",LLLL:"dddd D MMMM YYYY [kl.] HH:mm",lll:"D MMM YYYY HH:mm",llll:"ddd D MMM YYYY HH:mm"},calendar:{sameDay:"[Idag] LT",nextDay:"[Imorgon] LT",lastDay:"[Ig\xe5r] LT",nextWeek:"[P\xe5] dddd LT",lastWeek:"[I] dddd[s] LT",sameElse:"L"},relativeTime:{future:"om %s",past:"f\xf6r %s sedan",s:"n\xe5gra sekunder",ss:"%d sekunder",m:"en minut",mm:"%d minuter",h:"en timme",hh:"%d timmar",d:"en dag",dd:"%d dagar",M:"en m\xe5nad",MM:"%d m\xe5nader",y:"ett \xe5r",yy:"%d \xe5r"},dayOfMonthOrdinalParse:/\d{1,2}(\:e|\:a)/,ordinal:function(e){var a=e%10;return e+(1!=~~(e%100/10)&&(1==a||2==a)?":a":":e")},week:{dow:1,doy:4}}),e.defineLocale("sw",{months:"Januari_Februari_Machi_Aprili_Mei_Juni_Julai_Agosti_Septemba_Oktoba_Novemba_Desemba".split("_"),monthsShort:"Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ago_Sep_Okt_Nov_Des".split("_"),weekdays:"Jumapili_Jumatatu_Jumanne_Jumatano_Alhamisi_Ijumaa_Jumamosi".split("_"),weekdaysShort:"Jpl_Jtat_Jnne_Jtan_Alh_Ijm_Jmos".split("_"),weekdaysMin:"J2_J3_J4_J5_Al_Ij_J1".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"hh:mm A",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[leo saa] LT",nextDay:"[kesho saa] LT",nextWeek:"[wiki ijayo] dddd [saat] LT",lastDay:"[jana] LT",lastWeek:"[wiki iliyopita] dddd [saat] LT",sameElse:"L"},relativeTime:{future:"%s baadaye",past:"tokea %s",s:"hivi punde",ss:"sekunde %d",m:"dakika moja",mm:"dakika %d",h:"saa limoja",hh:"masaa %d",d:"siku moja",dd:"siku %d",M:"mwezi mmoja",MM:"miezi %d",y:"mwaka mmoja",yy:"miaka %d"},week:{dow:1,doy:7}});var pa={1:"\u0be7",2:"\u0be8",3:"\u0be9",4:"\u0bea",5:"\u0beb",6:"\u0bec",7:"\u0bed",8:"\u0bee",9:"\u0bef",0:"\u0be6"},Ta={"\u0be7":"1","\u0be8":"2","\u0be9":"3","\u0bea":"4","\u0beb":"5","\u0bec":"6","\u0bed":"7","\u0bee":"8","\u0bef":"9","\u0be6":"0"};e.defineLocale("ta",{months:"\u0b9c\u0ba9\u0bb5\u0bb0\u0bbf_\u0baa\u0bbf\u0baa\u0bcd\u0bb0\u0bb5\u0bb0\u0bbf_\u0bae\u0bbe\u0bb0\u0bcd\u0b9a\u0bcd_\u0b8f\u0baa\u0bcd\u0bb0\u0bb2\u0bcd_\u0bae\u0bc7_\u0b9c\u0bc2\u0ba9\u0bcd_\u0b9c\u0bc2\u0bb2\u0bc8_\u0b86\u0b95\u0bb8\u0bcd\u0b9f\u0bcd_\u0b9a\u0bc6\u0baa\u0bcd\u0b9f\u0bc6\u0bae\u0bcd\u0baa\u0bb0\u0bcd_\u0b85\u0b95\u0bcd\u0b9f\u0bc7\u0bbe\u0baa\u0bb0\u0bcd_\u0ba8\u0bb5\u0bae\u0bcd\u0baa\u0bb0\u0bcd_\u0b9f\u0bbf\u0b9a\u0bae\u0bcd\u0baa\u0bb0\u0bcd".split("_"),monthsShort:"\u0b9c\u0ba9\u0bb5\u0bb0\u0bbf_\u0baa\u0bbf\u0baa\u0bcd\u0bb0\u0bb5\u0bb0\u0bbf_\u0bae\u0bbe\u0bb0\u0bcd\u0b9a\u0bcd_\u0b8f\u0baa\u0bcd\u0bb0\u0bb2\u0bcd_\u0bae\u0bc7_\u0b9c\u0bc2\u0ba9\u0bcd_\u0b9c\u0bc2\u0bb2\u0bc8_\u0b86\u0b95\u0bb8\u0bcd\u0b9f\u0bcd_\u0b9a\u0bc6\u0baa\u0bcd\u0b9f\u0bc6\u0bae\u0bcd\u0baa\u0bb0\u0bcd_\u0b85\u0b95\u0bcd\u0b9f\u0bc7\u0bbe\u0baa\u0bb0\u0bcd_\u0ba8\u0bb5\u0bae\u0bcd\u0baa\u0bb0\u0bcd_\u0b9f\u0bbf\u0b9a\u0bae\u0bcd\u0baa\u0bb0\u0bcd".split("_"),weekdays:"\u0b9e\u0bbe\u0baf\u0bbf\u0bb1\u0bcd\u0bb1\u0bc1\u0b95\u0bcd\u0b95\u0bbf\u0bb4\u0bae\u0bc8_\u0ba4\u0bbf\u0b99\u0bcd\u0b95\u0b9f\u0bcd\u0b95\u0bbf\u0bb4\u0bae\u0bc8_\u0b9a\u0bc6\u0bb5\u0bcd\u0bb5\u0bbe\u0baf\u0bcd\u0b95\u0bbf\u0bb4\u0bae\u0bc8_\u0baa\u0bc1\u0ba4\u0ba9\u0bcd\u0b95\u0bbf\u0bb4\u0bae\u0bc8_\u0bb5\u0bbf\u0baf\u0bbe\u0bb4\u0b95\u0bcd\u0b95\u0bbf\u0bb4\u0bae\u0bc8_\u0bb5\u0bc6\u0bb3\u0bcd\u0bb3\u0bbf\u0b95\u0bcd\u0b95\u0bbf\u0bb4\u0bae\u0bc8_\u0b9a\u0ba9\u0bbf\u0b95\u0bcd\u0b95\u0bbf\u0bb4\u0bae\u0bc8".split("_"),weekdaysShort:"\u0b9e\u0bbe\u0baf\u0bbf\u0bb1\u0bc1_\u0ba4\u0bbf\u0b99\u0bcd\u0b95\u0bb3\u0bcd_\u0b9a\u0bc6\u0bb5\u0bcd\u0bb5\u0bbe\u0baf\u0bcd_\u0baa\u0bc1\u0ba4\u0ba9\u0bcd_\u0bb5\u0bbf\u0baf\u0bbe\u0bb4\u0ba9\u0bcd_\u0bb5\u0bc6\u0bb3\u0bcd\u0bb3\u0bbf_\u0b9a\u0ba9\u0bbf".split("_"),weekdaysMin:"\u0b9e\u0bbe_\u0ba4\u0bbf_\u0b9a\u0bc6_\u0baa\u0bc1_\u0bb5\u0bbf_\u0bb5\u0bc6_\u0b9a".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, HH:mm",LLLL:"dddd, D MMMM YYYY, HH:mm"},calendar:{sameDay:"[\u0b87\u0ba9\u0bcd\u0bb1\u0bc1] LT",nextDay:"[\u0ba8\u0bbe\u0bb3\u0bc8] LT",nextWeek:"dddd, LT",lastDay:"[\u0ba8\u0bc7\u0bb1\u0bcd\u0bb1\u0bc1] LT",lastWeek:"[\u0b95\u0b9f\u0ba8\u0bcd\u0ba4 \u0bb5\u0bbe\u0bb0\u0bae\u0bcd] dddd, LT",sameElse:"L"},relativeTime:{future:"%s \u0b87\u0bb2\u0bcd",past:"%s \u0bae\u0bc1\u0ba9\u0bcd",s:"\u0b92\u0bb0\u0bc1 \u0b9a\u0bbf\u0bb2 \u0bb5\u0bbf\u0ba8\u0bbe\u0b9f\u0bbf\u0b95\u0bb3\u0bcd",ss:"%d \u0bb5\u0bbf\u0ba8\u0bbe\u0b9f\u0bbf\u0b95\u0bb3\u0bcd",m:"\u0b92\u0bb0\u0bc1 \u0ba8\u0bbf\u0bae\u0bbf\u0b9f\u0bae\u0bcd",mm:"%d \u0ba8\u0bbf\u0bae\u0bbf\u0b9f\u0b99\u0bcd\u0b95\u0bb3\u0bcd",h:"\u0b92\u0bb0\u0bc1 \u0bae\u0ba3\u0bbf \u0ba8\u0bc7\u0bb0\u0bae\u0bcd",hh:"%d \u0bae\u0ba3\u0bbf \u0ba8\u0bc7\u0bb0\u0bae\u0bcd",d:"\u0b92\u0bb0\u0bc1 \u0ba8\u0bbe\u0bb3\u0bcd",dd:"%d \u0ba8\u0bbe\u0b9f\u0bcd\u0b95\u0bb3\u0bcd",M:"\u0b92\u0bb0\u0bc1 \u0bae\u0bbe\u0ba4\u0bae\u0bcd",MM:"%d \u0bae\u0bbe\u0ba4\u0b99\u0bcd\u0b95\u0bb3\u0bcd",y:"\u0b92\u0bb0\u0bc1 \u0bb5\u0bb0\u0bc1\u0b9f\u0bae\u0bcd",yy:"%d \u0b86\u0ba3\u0bcd\u0b9f\u0bc1\u0b95\u0bb3\u0bcd"},dayOfMonthOrdinalParse:/\d{1,2}\u0bb5\u0ba4\u0bc1/,ordinal:function(e){return e+"\u0bb5\u0ba4\u0bc1"},preparse:function(e){return e.replace(/[\u0be7\u0be8\u0be9\u0bea\u0beb\u0bec\u0bed\u0bee\u0bef\u0be6]/g,function(e){return Ta[e]})},postformat:function(e){return e.replace(/\d/g,function(e){return pa[e]})},meridiemParse:/\u0baf\u0bbe\u0bae\u0bae\u0bcd|\u0bb5\u0bc8\u0b95\u0bb1\u0bc8|\u0b95\u0bbe\u0bb2\u0bc8|\u0ba8\u0ba3\u0bcd\u0baa\u0b95\u0bb2\u0bcd|\u0b8e\u0bb1\u0bcd\u0baa\u0bbe\u0b9f\u0bc1|\u0bae\u0bbe\u0bb2\u0bc8/,meridiem:function(e,a,_){return e<2?" \u0baf\u0bbe\u0bae\u0bae\u0bcd":e<6?" \u0bb5\u0bc8\u0b95\u0bb1\u0bc8":e<10?" \u0b95\u0bbe\u0bb2\u0bc8":e<14?" \u0ba8\u0ba3\u0bcd\u0baa\u0b95\u0bb2\u0bcd":e<18?" \u0b8e\u0bb1\u0bcd\u0baa\u0bbe\u0b9f\u0bc1":e<22?" \u0bae\u0bbe\u0bb2\u0bc8":" \u0baf\u0bbe\u0bae\u0bae\u0bcd"},meridiemHour:function(e,a){return 12===e&&(e=0),"\u0baf\u0bbe\u0bae\u0bae\u0bcd"===a?e<2?e:e+12:"\u0bb5\u0bc8\u0b95\u0bb1\u0bc8"===a||"\u0b95\u0bbe\u0bb2\u0bc8"===a||"\u0ba8\u0ba3\u0bcd\u0baa\u0b95\u0bb2\u0bcd"===a&&10<=e?e:e+12},week:{dow:0,doy:6}}),e.defineLocale("te",{months:"\u0c1c\u0c28\u0c35\u0c30\u0c3f_\u0c2b\u0c3f\u0c2c\u0c4d\u0c30\u0c35\u0c30\u0c3f_\u0c2e\u0c3e\u0c30\u0c4d\u0c1a\u0c3f_\u0c0f\u0c2a\u0c4d\u0c30\u0c3f\u0c32\u0c4d_\u0c2e\u0c47_\u0c1c\u0c42\u0c28\u0c4d_\u0c1c\u0c41\u0c32\u0c48_\u0c06\u0c17\u0c38\u0c4d\u0c1f\u0c41_\u0c38\u0c46\u0c2a\u0c4d\u0c1f\u0c46\u0c02\u0c2c\u0c30\u0c4d_\u0c05\u0c15\u0c4d\u0c1f\u0c4b\u0c2c\u0c30\u0c4d_\u0c28\u0c35\u0c02\u0c2c\u0c30\u0c4d_\u0c21\u0c3f\u0c38\u0c46\u0c02\u0c2c\u0c30\u0c4d".split("_"),monthsShort:"\u0c1c\u0c28._\u0c2b\u0c3f\u0c2c\u0c4d\u0c30._\u0c2e\u0c3e\u0c30\u0c4d\u0c1a\u0c3f_\u0c0f\u0c2a\u0c4d\u0c30\u0c3f._\u0c2e\u0c47_\u0c1c\u0c42\u0c28\u0c4d_\u0c1c\u0c41\u0c32\u0c48_\u0c06\u0c17._\u0c38\u0c46\u0c2a\u0c4d._\u0c05\u0c15\u0c4d\u0c1f\u0c4b._\u0c28\u0c35._\u0c21\u0c3f\u0c38\u0c46.".split("_"),monthsParseExact:!0,weekdays:"\u0c06\u0c26\u0c3f\u0c35\u0c3e\u0c30\u0c02_\u0c38\u0c4b\u0c2e\u0c35\u0c3e\u0c30\u0c02_\u0c2e\u0c02\u0c17\u0c33\u0c35\u0c3e\u0c30\u0c02_\u0c2c\u0c41\u0c27\u0c35\u0c3e\u0c30\u0c02_\u0c17\u0c41\u0c30\u0c41\u0c35\u0c3e\u0c30\u0c02_\u0c36\u0c41\u0c15\u0c4d\u0c30\u0c35\u0c3e\u0c30\u0c02_\u0c36\u0c28\u0c3f\u0c35\u0c3e\u0c30\u0c02".split("_"),weekdaysShort:"\u0c06\u0c26\u0c3f_\u0c38\u0c4b\u0c2e_\u0c2e\u0c02\u0c17\u0c33_\u0c2c\u0c41\u0c27_\u0c17\u0c41\u0c30\u0c41_\u0c36\u0c41\u0c15\u0c4d\u0c30_\u0c36\u0c28\u0c3f".split("_"),weekdaysMin:"\u0c06_\u0c38\u0c4b_\u0c2e\u0c02_\u0c2c\u0c41_\u0c17\u0c41_\u0c36\u0c41_\u0c36".split("_"),longDateFormat:{LT:"A h:mm",LTS:"A h:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm",LLLL:"dddd, D MMMM YYYY, A h:mm"},calendar:{sameDay:"[\u0c28\u0c47\u0c21\u0c41] LT",nextDay:"[\u0c30\u0c47\u0c2a\u0c41] LT",nextWeek:"dddd, LT",lastDay:"[\u0c28\u0c3f\u0c28\u0c4d\u0c28] LT",lastWeek:"[\u0c17\u0c24] dddd, LT",sameElse:"L"},relativeTime:{future:"%s \u0c32\u0c4b",past:"%s \u0c15\u0c4d\u0c30\u0c3f\u0c24\u0c02",s:"\u0c15\u0c4a\u0c28\u0c4d\u0c28\u0c3f \u0c15\u0c4d\u0c37\u0c23\u0c3e\u0c32\u0c41",ss:"%d \u0c38\u0c46\u0c15\u0c28\u0c4d\u0c32\u0c41",m:"\u0c12\u0c15 \u0c28\u0c3f\u0c2e\u0c3f\u0c37\u0c02",mm:"%d \u0c28\u0c3f\u0c2e\u0c3f\u0c37\u0c3e\u0c32\u0c41",h:"\u0c12\u0c15 \u0c17\u0c02\u0c1f",hh:"%d \u0c17\u0c02\u0c1f\u0c32\u0c41",d:"\u0c12\u0c15 \u0c30\u0c4b\u0c1c\u0c41",dd:"%d \u0c30\u0c4b\u0c1c\u0c41\u0c32\u0c41",M:"\u0c12\u0c15 \u0c28\u0c46\u0c32",MM:"%d \u0c28\u0c46\u0c32\u0c32\u0c41",y:"\u0c12\u0c15 \u0c38\u0c02\u0c35\u0c24\u0c4d\u0c38\u0c30\u0c02",yy:"%d \u0c38\u0c02\u0c35\u0c24\u0c4d\u0c38\u0c30\u0c3e\u0c32\u0c41"},dayOfMonthOrdinalParse:/\d{1,2}\u0c35/,ordinal:"%d\u0c35",meridiemParse:/\u0c30\u0c3e\u0c24\u0c4d\u0c30\u0c3f|\u0c09\u0c26\u0c2f\u0c02|\u0c2e\u0c27\u0c4d\u0c2f\u0c3e\u0c39\u0c4d\u0c28\u0c02|\u0c38\u0c3e\u0c2f\u0c02\u0c24\u0c4d\u0c30\u0c02/,meridiemHour:function(e,a){return 12===e&&(e=0),"\u0c30\u0c3e\u0c24\u0c4d\u0c30\u0c3f"===a?e<4?e:e+12:"\u0c09\u0c26\u0c2f\u0c02"===a?e:"\u0c2e\u0c27\u0c4d\u0c2f\u0c3e\u0c39\u0c4d\u0c28\u0c02"===a?10<=e?e:e+12:"\u0c38\u0c3e\u0c2f\u0c02\u0c24\u0c4d\u0c30\u0c02"===a?e+12:void 0},meridiem:function(e,a,_){return e<4?"\u0c30\u0c3e\u0c24\u0c4d\u0c30\u0c3f":e<10?"\u0c09\u0c26\u0c2f\u0c02":e<17?"\u0c2e\u0c27\u0c4d\u0c2f\u0c3e\u0c39\u0c4d\u0c28\u0c02":e<20?"\u0c38\u0c3e\u0c2f\u0c02\u0c24\u0c4d\u0c30\u0c02":"\u0c30\u0c3e\u0c24\u0c4d\u0c30\u0c3f"},week:{dow:0,doy:6}}),e.defineLocale("tet",{months:"Janeiru_Fevereiru_Marsu_Abril_Maiu_Ju\xf1u_Jullu_Agustu_Setembru_Outubru_Novembru_Dezembru".split("_"),monthsShort:"Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez".split("_"),weekdays:"Domingu_Segunda_Tersa_Kuarta_Kinta_Sesta_Sabadu".split("_"),weekdaysShort:"Dom_Seg_Ters_Kua_Kint_Sest_Sab".split("_"),weekdaysMin:"Do_Seg_Te_Ku_Ki_Ses_Sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Ohin iha] LT",nextDay:"[Aban iha] LT",nextWeek:"dddd [iha] LT",lastDay:"[Horiseik iha] LT",lastWeek:"dddd [semana kotuk] [iha] LT",sameElse:"L"},relativeTime:{future:"iha %s",past:"%s liuba",s:"segundu balun",ss:"segundu %d",m:"minutu ida",mm:"minutu %d",h:"oras ida",hh:"oras %d",d:"loron ida",dd:"loron %d",M:"fulan ida",MM:"fulan %d",y:"tinan ida",yy:"tinan %d"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(e){var a=e%10;return e+(1==~~(e%100/10)?"th":1==a?"st":2==a?"nd":3==a?"rd":"th")},week:{dow:1,doy:4}});var fa={0:"-\u0443\u043c",1:"-\u0443\u043c",2:"-\u044e\u043c",3:"-\u044e\u043c",4:"-\u0443\u043c",5:"-\u0443\u043c",6:"-\u0443\u043c",7:"-\u0443\u043c",8:"-\u0443\u043c",9:"-\u0443\u043c",10:"-\u0443\u043c",12:"-\u0443\u043c",13:"-\u0443\u043c",20:"-\u0443\u043c",30:"-\u044e\u043c",40:"-\u0443\u043c",50:"-\u0443\u043c",60:"-\u0443\u043c",70:"-\u0443\u043c",80:"-\u0443\u043c",90:"-\u0443\u043c",100:"-\u0443\u043c"};e.defineLocale("tg",{months:"\u044f\u043d\u0432\u0430\u0440_\u0444\u0435\u0432\u0440\u0430\u043b_\u043c\u0430\u0440\u0442_\u0430\u043f\u0440\u0435\u043b_\u043c\u0430\u0439_\u0438\u044e\u043d_\u0438\u044e\u043b_\u0430\u0432\u0433\u0443\u0441\u0442_\u0441\u0435\u043d\u0442\u044f\u0431\u0440_\u043e\u043a\u0442\u044f\u0431\u0440_\u043d\u043e\u044f\u0431\u0440_\u0434\u0435\u043a\u0430\u0431\u0440".split("_"),monthsShort:"\u044f\u043d\u0432_\u0444\u0435\u0432_\u043c\u0430\u0440_\u0430\u043f\u0440_\u043c\u0430\u0439_\u0438\u044e\u043d_\u0438\u044e\u043b_\u0430\u0432\u0433_\u0441\u0435\u043d_\u043e\u043a\u0442_\u043d\u043e\u044f_\u0434\u0435\u043a".split("_"),weekdays:"\u044f\u043a\u0448\u0430\u043d\u0431\u0435_\u0434\u0443\u0448\u0430\u043d\u0431\u0435_\u0441\u0435\u0448\u0430\u043d\u0431\u0435_\u0447\u043e\u0440\u0448\u0430\u043d\u0431\u0435_\u043f\u0430\u043d\u04b7\u0448\u0430\u043d\u0431\u0435_\u04b7\u0443\u043c\u044a\u0430_\u0448\u0430\u043d\u0431\u0435".split("_"),weekdaysShort:"\u044f\u0448\u0431_\u0434\u0448\u0431_\u0441\u0448\u0431_\u0447\u0448\u0431_\u043f\u0448\u0431_\u04b7\u0443\u043c_\u0448\u043d\u0431".split("_"),weekdaysMin:"\u044f\u0448_\u0434\u0448_\u0441\u0448_\u0447\u0448_\u043f\u0448_\u04b7\u043c_\u0448\u0431".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[\u0418\u043c\u0440\u04ef\u0437 \u0441\u043e\u0430\u0442\u0438] LT",nextDay:"[\u041f\u0430\u0433\u043e\u04b3 \u0441\u043e\u0430\u0442\u0438] LT",lastDay:"[\u0414\u0438\u0440\u04ef\u0437 \u0441\u043e\u0430\u0442\u0438] LT",nextWeek:"dddd[\u0438] [\u04b3\u0430\u0444\u0442\u0430\u0438 \u043e\u044f\u043d\u0434\u0430 \u0441\u043e\u0430\u0442\u0438] LT",lastWeek:"dddd[\u0438] [\u04b3\u0430\u0444\u0442\u0430\u0438 \u0433\u0443\u0437\u0430\u0448\u0442\u0430 \u0441\u043e\u0430\u0442\u0438] LT",sameElse:"L"},relativeTime:{future:"\u0431\u0430\u044a\u0434\u0438 %s",past:"%s \u043f\u0435\u0448",s:"\u044f\u043a\u0447\u0430\u043d\u0434 \u0441\u043e\u043d\u0438\u044f",m:"\u044f\u043a \u0434\u0430\u049b\u0438\u049b\u0430",mm:"%d \u0434\u0430\u049b\u0438\u049b\u0430",h:"\u044f\u043a \u0441\u043e\u0430\u0442",hh:"%d \u0441\u043e\u0430\u0442",d:"\u044f\u043a \u0440\u04ef\u0437",dd:"%d \u0440\u04ef\u0437",M:"\u044f\u043a \u043c\u043e\u04b3",MM:"%d \u043c\u043e\u04b3",y:"\u044f\u043a \u0441\u043e\u043b",yy:"%d \u0441\u043e\u043b"},meridiemParse:/\u0448\u0430\u0431|\u0441\u0443\u0431\u04b3|\u0440\u04ef\u0437|\u0431\u0435\u0433\u043e\u04b3/,meridiemHour:function(e,a){return 12===e&&(e=0),"\u0448\u0430\u0431"===a?e<4?e:e+12:"\u0441\u0443\u0431\u04b3"===a?e:"\u0440\u04ef\u0437"===a?11<=e?e:e+12:"\u0431\u0435\u0433\u043e\u04b3"===a?e+12:void 0},meridiem:function(e,a,_){return e<4?"\u0448\u0430\u0431":e<11?"\u0441\u0443\u0431\u04b3":e<16?"\u0440\u04ef\u0437":e<19?"\u0431\u0435\u0433\u043e\u04b3":"\u0448\u0430\u0431"},dayOfMonthOrdinalParse:/\d{1,2}-(\u0443\u043c|\u044e\u043c)/,ordinal:function(e){return e+(fa[e]||fa[e%10]||fa[100<=e?100:null])},week:{dow:1,doy:7}}),e.defineLocale("th",{months:"\u0e21\u0e01\u0e23\u0e32\u0e04\u0e21_\u0e01\u0e38\u0e21\u0e20\u0e32\u0e1e\u0e31\u0e19\u0e18\u0e4c_\u0e21\u0e35\u0e19\u0e32\u0e04\u0e21_\u0e40\u0e21\u0e29\u0e32\u0e22\u0e19_\u0e1e\u0e24\u0e29\u0e20\u0e32\u0e04\u0e21_\u0e21\u0e34\u0e16\u0e38\u0e19\u0e32\u0e22\u0e19_\u0e01\u0e23\u0e01\u0e0e\u0e32\u0e04\u0e21_\u0e2a\u0e34\u0e07\u0e2b\u0e32\u0e04\u0e21_\u0e01\u0e31\u0e19\u0e22\u0e32\u0e22\u0e19_\u0e15\u0e38\u0e25\u0e32\u0e04\u0e21_\u0e1e\u0e24\u0e28\u0e08\u0e34\u0e01\u0e32\u0e22\u0e19_\u0e18\u0e31\u0e19\u0e27\u0e32\u0e04\u0e21".split("_"),monthsShort:"\u0e21.\u0e04._\u0e01.\u0e1e._\u0e21\u0e35.\u0e04._\u0e40\u0e21.\u0e22._\u0e1e.\u0e04._\u0e21\u0e34.\u0e22._\u0e01.\u0e04._\u0e2a.\u0e04._\u0e01.\u0e22._\u0e15.\u0e04._\u0e1e.\u0e22._\u0e18.\u0e04.".split("_"),monthsParseExact:!0,weekdays:"\u0e2d\u0e32\u0e17\u0e34\u0e15\u0e22\u0e4c_\u0e08\u0e31\u0e19\u0e17\u0e23\u0e4c_\u0e2d\u0e31\u0e07\u0e04\u0e32\u0e23_\u0e1e\u0e38\u0e18_\u0e1e\u0e24\u0e2b\u0e31\u0e2a\u0e1a\u0e14\u0e35_\u0e28\u0e38\u0e01\u0e23\u0e4c_\u0e40\u0e2a\u0e32\u0e23\u0e4c".split("_"),weekdaysShort:"\u0e2d\u0e32\u0e17\u0e34\u0e15\u0e22\u0e4c_\u0e08\u0e31\u0e19\u0e17\u0e23\u0e4c_\u0e2d\u0e31\u0e07\u0e04\u0e32\u0e23_\u0e1e\u0e38\u0e18_\u0e1e\u0e24\u0e2b\u0e31\u0e2a_\u0e28\u0e38\u0e01\u0e23\u0e4c_\u0e40\u0e2a\u0e32\u0e23\u0e4c".split("_"),weekdaysMin:"\u0e2d\u0e32._\u0e08._\u0e2d._\u0e1e._\u0e1e\u0e24._\u0e28._\u0e2a.".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY \u0e40\u0e27\u0e25\u0e32 H:mm",LLLL:"\u0e27\u0e31\u0e19dddd\u0e17\u0e35\u0e48 D MMMM YYYY \u0e40\u0e27\u0e25\u0e32 H:mm"},meridiemParse:/\u0e01\u0e48\u0e2d\u0e19\u0e40\u0e17\u0e35\u0e48\u0e22\u0e07|\u0e2b\u0e25\u0e31\u0e07\u0e40\u0e17\u0e35\u0e48\u0e22\u0e07/,isPM:function(e){return"\u0e2b\u0e25\u0e31\u0e07\u0e40\u0e17\u0e35\u0e48\u0e22\u0e07"===e},meridiem:function(e,a,_){return e<12?"\u0e01\u0e48\u0e2d\u0e19\u0e40\u0e17\u0e35\u0e48\u0e22\u0e07":"\u0e2b\u0e25\u0e31\u0e07\u0e40\u0e17\u0e35\u0e48\u0e22\u0e07"},calendar:{sameDay:"[\u0e27\u0e31\u0e19\u0e19\u0e35\u0e49 \u0e40\u0e27\u0e25\u0e32] LT",nextDay:"[\u0e1e\u0e23\u0e38\u0e48\u0e07\u0e19\u0e35\u0e49 \u0e40\u0e27\u0e25\u0e32] LT",nextWeek:"dddd[\u0e2b\u0e19\u0e49\u0e32 \u0e40\u0e27\u0e25\u0e32] LT",lastDay:"[\u0e40\u0e21\u0e37\u0e48\u0e2d\u0e27\u0e32\u0e19\u0e19\u0e35\u0e49 \u0e40\u0e27\u0e25\u0e32] LT",lastWeek:"[\u0e27\u0e31\u0e19]dddd[\u0e17\u0e35\u0e48\u0e41\u0e25\u0e49\u0e27 \u0e40\u0e27\u0e25\u0e32] LT",sameElse:"L"},relativeTime:{future:"\u0e2d\u0e35\u0e01 %s",past:"%s\u0e17\u0e35\u0e48\u0e41\u0e25\u0e49\u0e27",s:"\u0e44\u0e21\u0e48\u0e01\u0e35\u0e48\u0e27\u0e34\u0e19\u0e32\u0e17\u0e35",ss:"%d \u0e27\u0e34\u0e19\u0e32\u0e17\u0e35",m:"1 \u0e19\u0e32\u0e17\u0e35",mm:"%d \u0e19\u0e32\u0e17\u0e35",h:"1 \u0e0a\u0e31\u0e48\u0e27\u0e42\u0e21\u0e07",hh:"%d \u0e0a\u0e31\u0e48\u0e27\u0e42\u0e21\u0e07",d:"1 \u0e27\u0e31\u0e19",dd:"%d \u0e27\u0e31\u0e19",M:"1 \u0e40\u0e14\u0e37\u0e2d\u0e19",MM:"%d \u0e40\u0e14\u0e37\u0e2d\u0e19",y:"1 \u0e1b\u0e35",yy:"%d \u0e1b\u0e35"}});var ga={1:"'inji",5:"'inji",8:"'inji",70:"'inji",80:"'inji",2:"'nji",7:"'nji",20:"'nji",50:"'nji",3:"'\xfcnji",4:"'\xfcnji",100:"'\xfcnji",6:"'njy",9:"'unjy",10:"'unjy",30:"'unjy",60:"'ynjy",90:"'ynjy"};e.defineLocale("tk",{months:"\xddanwar_Fewral_Mart_Aprel_Ma\xfd_I\xfdun_I\xfdul_Awgust_Sent\xfdabr_Okt\xfdabr_No\xfdabr_Dekabr".split("_"),monthsShort:"\xddan_Few_Mar_Apr_Ma\xfd_I\xfdn_I\xfdl_Awg_Sen_Okt_No\xfd_Dek".split("_"),weekdays:"\xddek\u015fenbe_Du\u015fenbe_Si\u015fenbe_\xc7ar\u015fenbe_Pen\u015fenbe_Anna_\u015eenbe".split("_"),weekdaysShort:"\xddek_Du\u015f_Si\u015f_\xc7ar_Pen_Ann_\u015een".split("_"),weekdaysMin:"\xddk_D\u015f_S\u015f_\xc7r_Pn_An_\u015en".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[bug\xfcn sagat] LT",nextDay:"[ertir sagat] LT",nextWeek:"[indiki] dddd [sagat] LT",lastDay:"[d\xfc\xfdn] LT",lastWeek:"[ge\xe7en] dddd [sagat] LT",sameElse:"L"},relativeTime:{future:"%s so\u0148",past:"%s \xf6\u0148",s:"birn\xe4\xe7e sekunt",m:"bir minut",mm:"%d minut",h:"bir sagat",hh:"%d sagat",d:"bir g\xfcn",dd:"%d g\xfcn",M:"bir a\xfd",MM:"%d a\xfd",y:"bir \xfdyl",yy:"%d \xfdyl"},ordinal:function(e,a){switch(a){case"d":case"D":case"Do":case"DD":return e;default:if(0===e)return e+"'unjy";var _=e%10;return e+(ga[_]||ga[e%100-_]||ga[100<=e?100:null])}},week:{dow:1,doy:7}}),e.defineLocale("tl-ph",{months:"Enero_Pebrero_Marso_Abril_Mayo_Hunyo_Hulyo_Agosto_Setyembre_Oktubre_Nobyembre_Disyembre".split("_"),monthsShort:"Ene_Peb_Mar_Abr_May_Hun_Hul_Ago_Set_Okt_Nob_Dis".split("_"),weekdays:"Linggo_Lunes_Martes_Miyerkules_Huwebes_Biyernes_Sabado".split("_"),weekdaysShort:"Lin_Lun_Mar_Miy_Huw_Biy_Sab".split("_"),weekdaysMin:"Li_Lu_Ma_Mi_Hu_Bi_Sab".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"MM/D/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY HH:mm",LLLL:"dddd, MMMM DD, YYYY HH:mm"},calendar:{sameDay:"LT [ngayong araw]",nextDay:"[Bukas ng] LT",nextWeek:"LT [sa susunod na] dddd",lastDay:"LT [kahapon]",lastWeek:"LT [noong nakaraang] dddd",sameElse:"L"},relativeTime:{future:"sa loob ng %s",past:"%s ang nakalipas",s:"ilang segundo",ss:"%d segundo",m:"isang minuto",mm:"%d minuto",h:"isang oras",hh:"%d oras",d:"isang araw",dd:"%d araw",M:"isang buwan",MM:"%d buwan",y:"isang taon",yy:"%d taon"},dayOfMonthOrdinalParse:/\d{1,2}/,ordinal:function(e){return e},week:{dow:1,doy:4}});var wa="pagh_wa\u2019_cha\u2019_wej_loS_vagh_jav_Soch_chorgh_Hut".split("_");function Ha(e,a,_,s){var d=function(e){var a=Math.floor(e%1e3/100),_=Math.floor(e%100/10),s=e%10,d="";0<a&&(d+=wa[a]+"vatlh");0<_&&(d+=(""!==d?" ":"")+wa[_]+"maH");0<s&&(d+=(""!==d?" ":"")+wa[s]);return""===d?"pagh":d}(e);switch(_){case"ss":return d+" lup";case"mm":return d+" tup";case"hh":return d+" rep";case"dd":return d+" jaj";case"MM":return d+" jar";case"yy":return d+" DIS"}}e.defineLocale("tlh",{months:"tera\u2019 jar wa\u2019_tera\u2019 jar cha\u2019_tera\u2019 jar wej_tera\u2019 jar loS_tera\u2019 jar vagh_tera\u2019 jar jav_tera\u2019 jar Soch_tera\u2019 jar chorgh_tera\u2019 jar Hut_tera\u2019 jar wa\u2019maH_tera\u2019 jar wa\u2019maH wa\u2019_tera\u2019 jar wa\u2019maH cha\u2019".split("_"),monthsShort:"jar wa\u2019_jar cha\u2019_jar wej_jar loS_jar vagh_jar jav_jar Soch_jar chorgh_jar Hut_jar wa\u2019maH_jar wa\u2019maH wa\u2019_jar wa\u2019maH cha\u2019".split("_"),monthsParseExact:!0,weekdays:"lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj".split("_"),weekdaysShort:"lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj".split("_"),weekdaysMin:"lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[DaHjaj] LT",nextDay:"[wa\u2019leS] LT",nextWeek:"LLL",lastDay:"[wa\u2019Hu\u2019] LT",lastWeek:"LLL",sameElse:"L"},relativeTime:{future:function(e){var a=e;return a=-1!==e.indexOf("jaj")?a.slice(0,-3)+"leS":-1!==e.indexOf("jar")?a.slice(0,-3)+"waQ":-1!==e.indexOf("DIS")?a.slice(0,-3)+"nem":a+" pIq"},past:function(e){var a=e;return a=-1!==e.indexOf("jaj")?a.slice(0,-3)+"Hu\u2019":-1!==e.indexOf("jar")?a.slice(0,-3)+"wen":-1!==e.indexOf("DIS")?a.slice(0,-3)+"ben":a+" ret"},s:"puS lup",ss:Ha,m:"wa\u2019 tup",mm:Ha,h:"wa\u2019 rep",hh:Ha,d:"wa\u2019 jaj",dd:Ha,M:"wa\u2019 jar",MM:Ha,y:"wa\u2019 DIS",yy:Ha},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}});var ba={1:"'inci",5:"'inci",8:"'inci",70:"'inci",80:"'inci",2:"'nci",7:"'nci",20:"'nci",50:"'nci",3:"'\xfcnc\xfc",4:"'\xfcnc\xfc",100:"'\xfcnc\xfc",6:"'nc\u0131",9:"'uncu",10:"'uncu",30:"'uncu",60:"'\u0131nc\u0131",90:"'\u0131nc\u0131"};function va(e,a,_,s){var d={s:["viensas secunds","'iensas secunds"],ss:[e+" secunds",e+" secunds"],m:["'n m\xedut","'iens m\xedut"],mm:[e+" m\xeduts",e+" m\xeduts"],h:["'n \xfeora","'iensa \xfeora"],hh:[e+" \xfeoras",e+" \xfeoras"],d:["'n ziua","'iensa ziua"],dd:[e+" ziuas",e+" ziuas"],M:["'n mes","'iens mes"],MM:[e+" mesen",e+" mesen"],y:["'n ar","'iens ar"],yy:[e+" ars",e+" ars"]};return s||a?d[_][0]:d[_][1]}function Sa(e,a,_){var s,d;return"m"===_?a?"\u0445\u0432\u0438\u043b\u0438\u043d\u0430":"\u0445\u0432\u0438\u043b\u0438\u043d\u0443":"h"===_?a?"\u0433\u043e\u0434\u0438\u043d\u0430":"\u0433\u043e\u0434\u0438\u043d\u0443":e+" "+(s=+e,d={ss:a?"\u0441\u0435\u043a\u0443\u043d\u0434\u0430_\u0441\u0435\u043a\u0443\u043d\u0434\u0438_\u0441\u0435\u043a\u0443\u043d\u0434":"\u0441\u0435\u043a\u0443\u043d\u0434\u0443_\u0441\u0435\u043a\u0443\u043d\u0434\u0438_\u0441\u0435\u043a\u0443\u043d\u0434",mm:a?"\u0445\u0432\u0438\u043b\u0438\u043d\u0430_\u0445\u0432\u0438\u043b\u0438\u043d\u0438_\u0445\u0432\u0438\u043b\u0438\u043d":"\u0445\u0432\u0438\u043b\u0438\u043d\u0443_\u0445\u0432\u0438\u043b\u0438\u043d\u0438_\u0445\u0432\u0438\u043b\u0438\u043d",hh:a?"\u0433\u043e\u0434\u0438\u043d\u0430_\u0433\u043e\u0434\u0438\u043d\u0438_\u0433\u043e\u0434\u0438\u043d":"\u0433\u043e\u0434\u0438\u043d\u0443_\u0433\u043e\u0434\u0438\u043d\u0438_\u0433\u043e\u0434\u0438\u043d",dd:"\u0434\u0435\u043d\u044c_\u0434\u043d\u0456_\u0434\u043d\u0456\u0432",MM:"\u043c\u0456\u0441\u044f\u0446\u044c_\u043c\u0456\u0441\u044f\u0446\u0456_\u043c\u0456\u0441\u044f\u0446\u0456\u0432",yy:"\u0440\u0456\u043a_\u0440\u043e\u043a\u0438_\u0440\u043e\u043a\u0456\u0432"}[_].split("_"),s%10==1&&s%100!=11?d[0]:2<=s%10&&s%10<=4&&(s%100<10||20<=s%100)?d[1]:d[2])}function ja(e){return function(){return e+"\u043e"+(11===this.hours()?"\u0431":"")+"] LT"}}e.defineLocale("tr",{months:"Ocak_\u015eubat_Mart_Nisan_May\u0131s_Haziran_Temmuz_A\u011fustos_Eyl\xfcl_Ekim_Kas\u0131m_Aral\u0131k".split("_"),monthsShort:"Oca_\u015eub_Mar_Nis_May_Haz_Tem_A\u011fu_Eyl_Eki_Kas_Ara".split("_"),weekdays:"Pazar_Pazartesi_Sal\u0131_\xc7ar\u015famba_Per\u015fembe_Cuma_Cumartesi".split("_"),weekdaysShort:"Paz_Pts_Sal_\xc7ar_Per_Cum_Cts".split("_"),weekdaysMin:"Pz_Pt_Sa_\xc7a_Pe_Cu_Ct".split("_"),meridiem:function(e,a,_){return e<12?_?"\xf6\xf6":"\xd6\xd6":_?"\xf6s":"\xd6S"},meridiemParse:/\xf6\xf6|\xd6\xd6|\xf6s|\xd6S/,isPM:function(e){return"\xf6s"===e||"\xd6S"===e},longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[bug\xfcn saat] LT",nextDay:"[yar\u0131n saat] LT",nextWeek:"[gelecek] dddd [saat] LT",lastDay:"[d\xfcn] LT",lastWeek:"[ge\xe7en] dddd [saat] LT",sameElse:"L"},relativeTime:{future:"%s sonra",past:"%s \xf6nce",s:"birka\xe7 saniye",ss:"%d saniye",m:"bir dakika",mm:"%d dakika",h:"bir saat",hh:"%d saat",d:"bir g\xfcn",dd:"%d g\xfcn",M:"bir ay",MM:"%d ay",y:"bir y\u0131l",yy:"%d y\u0131l"},ordinal:function(e,a){switch(a){case"d":case"D":case"Do":case"DD":return e;default:if(0===e)return e+"'\u0131nc\u0131";var _=e%10;return e+(ba[_]||ba[e%100-_]||ba[100<=e?100:null])}},week:{dow:1,doy:7}}),e.defineLocale("tzl",{months:"Januar_Fevraglh_Mar\xe7_Avr\xefu_Mai_G\xfcn_Julia_Guscht_Setemvar_Listop\xe4ts_Noemvar_Zecemvar".split("_"),monthsShort:"Jan_Fev_Mar_Avr_Mai_G\xfcn_Jul_Gus_Set_Lis_Noe_Zec".split("_"),weekdays:"S\xfaladi_L\xfane\xe7i_Maitzi_M\xe1rcuri_Xh\xfaadi_Vi\xe9ner\xe7i_S\xe1turi".split("_"),weekdaysShort:"S\xfal_L\xfan_Mai_M\xe1r_Xh\xfa_Vi\xe9_S\xe1t".split("_"),weekdaysMin:"S\xfa_L\xfa_Ma_M\xe1_Xh_Vi_S\xe1".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD.MM.YYYY",LL:"D. MMMM [dallas] YYYY",LLL:"D. MMMM [dallas] YYYY HH.mm",LLLL:"dddd, [li] D. MMMM [dallas] YYYY HH.mm"},meridiemParse:/d\'o|d\'a/i,isPM:function(e){return"d'o"===e.toLowerCase()},meridiem:function(e,a,_){return 11<e?_?"d'o":"D'O":_?"d'a":"D'A"},calendar:{sameDay:"[oxhi \xe0] LT",nextDay:"[dem\xe0 \xe0] LT",nextWeek:"dddd [\xe0] LT",lastDay:"[ieiri \xe0] LT",lastWeek:"[s\xfcr el] dddd [lasteu \xe0] LT",sameElse:"L"},relativeTime:{future:"osprei %s",past:"ja%s",s:va,ss:va,m:va,mm:va,h:va,hh:va,d:va,dd:va,M:va,MM:va,y:va,yy:va},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}}),e.defineLocale("tzm-latn",{months:"innayr_br\u02e4ayr\u02e4_mar\u02e4s\u02e4_ibrir_mayyw_ywnyw_ywlywz_\u0263w\u0161t_\u0161wtanbir_kt\u02e4wbr\u02e4_nwwanbir_dwjnbir".split("_"),monthsShort:"innayr_br\u02e4ayr\u02e4_mar\u02e4s\u02e4_ibrir_mayyw_ywnyw_ywlywz_\u0263w\u0161t_\u0161wtanbir_kt\u02e4wbr\u02e4_nwwanbir_dwjnbir".split("_"),weekdays:"asamas_aynas_asinas_akras_akwas_asimwas_asi\u1e0dyas".split("_"),weekdaysShort:"asamas_aynas_asinas_akras_akwas_asimwas_asi\u1e0dyas".split("_"),weekdaysMin:"asamas_aynas_asinas_akras_akwas_asimwas_asi\u1e0dyas".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[asdkh g] LT",nextDay:"[aska g] LT",nextWeek:"dddd [g] LT",lastDay:"[assant g] LT",lastWeek:"dddd [g] LT",sameElse:"L"},relativeTime:{future:"dadkh s yan %s",past:"yan %s",s:"imik",ss:"%d imik",m:"minu\u1e0d",mm:"%d minu\u1e0d",h:"sa\u025ba",hh:"%d tassa\u025bin",d:"ass",dd:"%d ossan",M:"ayowr",MM:"%d iyyirn",y:"asgas",yy:"%d isgasn"},week:{dow:6,doy:12}}),e.defineLocale("tzm",{months:"\u2d49\u2d4f\u2d4f\u2d30\u2d62\u2d54_\u2d31\u2d55\u2d30\u2d62\u2d55_\u2d4e\u2d30\u2d55\u2d5a_\u2d49\u2d31\u2d54\u2d49\u2d54_\u2d4e\u2d30\u2d62\u2d62\u2d53_\u2d62\u2d53\u2d4f\u2d62\u2d53_\u2d62\u2d53\u2d4d\u2d62\u2d53\u2d63_\u2d56\u2d53\u2d5b\u2d5c_\u2d5b\u2d53\u2d5c\u2d30\u2d4f\u2d31\u2d49\u2d54_\u2d3d\u2d5f\u2d53\u2d31\u2d55_\u2d4f\u2d53\u2d61\u2d30\u2d4f\u2d31\u2d49\u2d54_\u2d37\u2d53\u2d4a\u2d4f\u2d31\u2d49\u2d54".split("_"),monthsShort:"\u2d49\u2d4f\u2d4f\u2d30\u2d62\u2d54_\u2d31\u2d55\u2d30\u2d62\u2d55_\u2d4e\u2d30\u2d55\u2d5a_\u2d49\u2d31\u2d54\u2d49\u2d54_\u2d4e\u2d30\u2d62\u2d62\u2d53_\u2d62\u2d53\u2d4f\u2d62\u2d53_\u2d62\u2d53\u2d4d\u2d62\u2d53\u2d63_\u2d56\u2d53\u2d5b\u2d5c_\u2d5b\u2d53\u2d5c\u2d30\u2d4f\u2d31\u2d49\u2d54_\u2d3d\u2d5f\u2d53\u2d31\u2d55_\u2d4f\u2d53\u2d61\u2d30\u2d4f\u2d31\u2d49\u2d54_\u2d37\u2d53\u2d4a\u2d4f\u2d31\u2d49\u2d54".split("_"),weekdays:"\u2d30\u2d59\u2d30\u2d4e\u2d30\u2d59_\u2d30\u2d62\u2d4f\u2d30\u2d59_\u2d30\u2d59\u2d49\u2d4f\u2d30\u2d59_\u2d30\u2d3d\u2d54\u2d30\u2d59_\u2d30\u2d3d\u2d61\u2d30\u2d59_\u2d30\u2d59\u2d49\u2d4e\u2d61\u2d30\u2d59_\u2d30\u2d59\u2d49\u2d39\u2d62\u2d30\u2d59".split("_"),weekdaysShort:"\u2d30\u2d59\u2d30\u2d4e\u2d30\u2d59_\u2d30\u2d62\u2d4f\u2d30\u2d59_\u2d30\u2d59\u2d49\u2d4f\u2d30\u2d59_\u2d30\u2d3d\u2d54\u2d30\u2d59_\u2d30\u2d3d\u2d61\u2d30\u2d59_\u2d30\u2d59\u2d49\u2d4e\u2d61\u2d30\u2d59_\u2d30\u2d59\u2d49\u2d39\u2d62\u2d30\u2d59".split("_"),weekdaysMin:"\u2d30\u2d59\u2d30\u2d4e\u2d30\u2d59_\u2d30\u2d62\u2d4f\u2d30\u2d59_\u2d30\u2d59\u2d49\u2d4f\u2d30\u2d59_\u2d30\u2d3d\u2d54\u2d30\u2d59_\u2d30\u2d3d\u2d61\u2d30\u2d59_\u2d30\u2d59\u2d49\u2d4e\u2d61\u2d30\u2d59_\u2d30\u2d59\u2d49\u2d39\u2d62\u2d30\u2d59".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[\u2d30\u2d59\u2d37\u2d45 \u2d34] LT",nextDay:"[\u2d30\u2d59\u2d3d\u2d30 \u2d34] LT",nextWeek:"dddd [\u2d34] LT",lastDay:"[\u2d30\u2d5a\u2d30\u2d4f\u2d5c \u2d34] LT",lastWeek:"dddd [\u2d34] LT",sameElse:"L"},relativeTime:{future:"\u2d37\u2d30\u2d37\u2d45 \u2d59 \u2d62\u2d30\u2d4f %s",past:"\u2d62\u2d30\u2d4f %s",s:"\u2d49\u2d4e\u2d49\u2d3d",ss:"%d \u2d49\u2d4e\u2d49\u2d3d",m:"\u2d4e\u2d49\u2d4f\u2d53\u2d3a",mm:"%d \u2d4e\u2d49\u2d4f\u2d53\u2d3a",h:"\u2d59\u2d30\u2d44\u2d30",hh:"%d \u2d5c\u2d30\u2d59\u2d59\u2d30\u2d44\u2d49\u2d4f",d:"\u2d30\u2d59\u2d59",dd:"%d o\u2d59\u2d59\u2d30\u2d4f",M:"\u2d30\u2d62o\u2d53\u2d54",MM:"%d \u2d49\u2d62\u2d62\u2d49\u2d54\u2d4f",y:"\u2d30\u2d59\u2d33\u2d30\u2d59",yy:"%d \u2d49\u2d59\u2d33\u2d30\u2d59\u2d4f"},week:{dow:6,doy:12}}),e.defineLocale("ug-cn",{months:"\u064a\u0627\u0646\u06cb\u0627\u0631_\u0641\u06d0\u06cb\u0631\u0627\u0644_\u0645\u0627\u0631\u062a_\u0626\u0627\u067e\u0631\u06d0\u0644_\u0645\u0627\u064a_\u0626\u0649\u064a\u06c7\u0646_\u0626\u0649\u064a\u06c7\u0644_\u0626\u0627\u06cb\u063a\u06c7\u0633\u062a_\u0633\u06d0\u0646\u062a\u06d5\u0628\u0649\u0631_\u0626\u06c6\u0643\u062a\u06d5\u0628\u0649\u0631_\u0646\u0648\u064a\u0627\u0628\u0649\u0631_\u062f\u06d0\u0643\u0627\u0628\u0649\u0631".split("_"),monthsShort:"\u064a\u0627\u0646\u06cb\u0627\u0631_\u0641\u06d0\u06cb\u0631\u0627\u0644_\u0645\u0627\u0631\u062a_\u0626\u0627\u067e\u0631\u06d0\u0644_\u0645\u0627\u064a_\u0626\u0649\u064a\u06c7\u0646_\u0626\u0649\u064a\u06c7\u0644_\u0626\u0627\u06cb\u063a\u06c7\u0633\u062a_\u0633\u06d0\u0646\u062a\u06d5\u0628\u0649\u0631_\u0626\u06c6\u0643\u062a\u06d5\u0628\u0649\u0631_\u0646\u0648\u064a\u0627\u0628\u0649\u0631_\u062f\u06d0\u0643\u0627\u0628\u0649\u0631".split("_"),weekdays:"\u064a\u06d5\u0643\u0634\u06d5\u0646\u0628\u06d5_\u062f\u06c8\u0634\u06d5\u0646\u0628\u06d5_\u0633\u06d5\u064a\u0634\u06d5\u0646\u0628\u06d5_\u0686\u0627\u0631\u0634\u06d5\u0646\u0628\u06d5_\u067e\u06d5\u064a\u0634\u06d5\u0646\u0628\u06d5_\u062c\u06c8\u0645\u06d5_\u0634\u06d5\u0646\u0628\u06d5".split("_"),weekdaysShort:"\u064a\u06d5_\u062f\u06c8_\u0633\u06d5_\u0686\u0627_\u067e\u06d5_\u062c\u06c8_\u0634\u06d5".split("_"),weekdaysMin:"\u064a\u06d5_\u062f\u06c8_\u0633\u06d5_\u0686\u0627_\u067e\u06d5_\u062c\u06c8_\u0634\u06d5".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"YYYY-\u064a\u0649\u0644\u0649M-\u0626\u0627\u064a\u0646\u0649\u06adD-\u0643\u06c8\u0646\u0649",LLL:"YYYY-\u064a\u0649\u0644\u0649M-\u0626\u0627\u064a\u0646\u0649\u06adD-\u0643\u06c8\u0646\u0649\u060c HH:mm",LLLL:"dddd\u060c YYYY-\u064a\u0649\u0644\u0649M-\u0626\u0627\u064a\u0646\u0649\u06adD-\u0643\u06c8\u0646\u0649\u060c HH:mm"},meridiemParse:/\u064a\u06d0\u0631\u0649\u0645 \u0643\u06d0\u0686\u06d5|\u0633\u06d5\u06be\u06d5\u0631|\u0686\u06c8\u0634\u062a\u0649\u0646 \u0628\u06c7\u0631\u06c7\u0646|\u0686\u06c8\u0634|\u0686\u06c8\u0634\u062a\u0649\u0646 \u0643\u06d0\u064a\u0649\u0646|\u0643\u06d5\u0686/,meridiemHour:function(e,a){return 12===e&&(e=0),"\u064a\u06d0\u0631\u0649\u0645 \u0643\u06d0\u0686\u06d5"===a||"\u0633\u06d5\u06be\u06d5\u0631"===a||"\u0686\u06c8\u0634\u062a\u0649\u0646 \u0628\u06c7\u0631\u06c7\u0646"===a||"\u0686\u06c8\u0634\u062a\u0649\u0646 \u0643\u06d0\u064a\u0649\u0646"!==a&&"\u0643\u06d5\u0686"!==a&&11<=e?e:e+12},meridiem:function(e,a,_){var s=100*e+a;return s<600?"\u064a\u06d0\u0631\u0649\u0645 \u0643\u06d0\u0686\u06d5":s<900?"\u0633\u06d5\u06be\u06d5\u0631":s<1130?"\u0686\u06c8\u0634\u062a\u0649\u0646 \u0628\u06c7\u0631\u06c7\u0646":s<1230?"\u0686\u06c8\u0634":s<1800?"\u0686\u06c8\u0634\u062a\u0649\u0646 \u0643\u06d0\u064a\u0649\u0646":"\u0643\u06d5\u0686"},calendar:{sameDay:"[\u0628\u06c8\u06af\u06c8\u0646 \u0633\u0627\u0626\u06d5\u062a] LT",nextDay:"[\u0626\u06d5\u062a\u06d5 \u0633\u0627\u0626\u06d5\u062a] LT",nextWeek:"[\u0643\u06d0\u0644\u06d5\u0631\u0643\u0649] dddd [\u0633\u0627\u0626\u06d5\u062a] LT",lastDay:"[\u062a\u06c6\u0646\u06c8\u06af\u06c8\u0646] LT",lastWeek:"[\u0626\u0627\u0644\u062f\u0649\u0646\u0642\u0649] dddd [\u0633\u0627\u0626\u06d5\u062a] LT",sameElse:"L"},relativeTime:{future:"%s \u0643\u06d0\u064a\u0649\u0646",past:"%s \u0628\u06c7\u0631\u06c7\u0646",s:"\u0646\u06d5\u0686\u0686\u06d5 \u0633\u06d0\u0643\u0648\u0646\u062a",ss:"%d \u0633\u06d0\u0643\u0648\u0646\u062a",m:"\u0628\u0649\u0631 \u0645\u0649\u0646\u06c7\u062a",mm:"%d \u0645\u0649\u0646\u06c7\u062a",h:"\u0628\u0649\u0631 \u0633\u0627\u0626\u06d5\u062a",hh:"%d \u0633\u0627\u0626\u06d5\u062a",d:"\u0628\u0649\u0631 \u0643\u06c8\u0646",dd:"%d \u0643\u06c8\u0646",M:"\u0628\u0649\u0631 \u0626\u0627\u064a",MM:"%d \u0626\u0627\u064a",y:"\u0628\u0649\u0631 \u064a\u0649\u0644",yy:"%d \u064a\u0649\u0644"},dayOfMonthOrdinalParse:/\d{1,2}(-\u0643\u06c8\u0646\u0649|-\u0626\u0627\u064a|-\u06be\u06d5\u067e\u062a\u06d5)/,ordinal:function(e,a){switch(a){case"d":case"D":case"DDD":return e+"-\u0643\u06c8\u0646\u0649";case"w":case"W":return e+"-\u06be\u06d5\u067e\u062a\u06d5";default:return e}},preparse:function(e){return e.replace(/\u060c/g,",")},postformat:function(e){return e.replace(/,/g,"\u060c")},week:{dow:1,doy:7}}),e.defineLocale("uk",{months:{format:"\u0441\u0456\u0447\u043d\u044f_\u043b\u044e\u0442\u043e\u0433\u043e_\u0431\u0435\u0440\u0435\u0437\u043d\u044f_\u043a\u0432\u0456\u0442\u043d\u044f_\u0442\u0440\u0430\u0432\u043d\u044f_\u0447\u0435\u0440\u0432\u043d\u044f_\u043b\u0438\u043f\u043d\u044f_\u0441\u0435\u0440\u043f\u043d\u044f_\u0432\u0435\u0440\u0435\u0441\u043d\u044f_\u0436\u043e\u0432\u0442\u043d\u044f_\u043b\u0438\u0441\u0442\u043e\u043f\u0430\u0434\u0430_\u0433\u0440\u0443\u0434\u043d\u044f".split("_"),standalone:"\u0441\u0456\u0447\u0435\u043d\u044c_\u043b\u044e\u0442\u0438\u0439_\u0431\u0435\u0440\u0435\u0437\u0435\u043d\u044c_\u043a\u0432\u0456\u0442\u0435\u043d\u044c_\u0442\u0440\u0430\u0432\u0435\u043d\u044c_\u0447\u0435\u0440\u0432\u0435\u043d\u044c_\u043b\u0438\u043f\u0435\u043d\u044c_\u0441\u0435\u0440\u043f\u0435\u043d\u044c_\u0432\u0435\u0440\u0435\u0441\u0435\u043d\u044c_\u0436\u043e\u0432\u0442\u0435\u043d\u044c_\u043b\u0438\u0441\u0442\u043e\u043f\u0430\u0434_\u0433\u0440\u0443\u0434\u0435\u043d\u044c".split("_")},monthsShort:"\u0441\u0456\u0447_\u043b\u044e\u0442_\u0431\u0435\u0440_\u043a\u0432\u0456\u0442_\u0442\u0440\u0430\u0432_\u0447\u0435\u0440\u0432_\u043b\u0438\u043f_\u0441\u0435\u0440\u043f_\u0432\u0435\u0440_\u0436\u043e\u0432\u0442_\u043b\u0438\u0441\u0442_\u0433\u0440\u0443\u0434".split("_"),weekdays:function(e,a){var _={nominative:"\u043d\u0435\u0434\u0456\u043b\u044f_\u043f\u043e\u043d\u0435\u0434\u0456\u043b\u043e\u043a_\u0432\u0456\u0432\u0442\u043e\u0440\u043e\u043a_\u0441\u0435\u0440\u0435\u0434\u0430_\u0447\u0435\u0442\u0432\u0435\u0440_\u043f\u2019\u044f\u0442\u043d\u0438\u0446\u044f_\u0441\u0443\u0431\u043e\u0442\u0430".split("_"),accusative:"\u043d\u0435\u0434\u0456\u043b\u044e_\u043f\u043e\u043d\u0435\u0434\u0456\u043b\u043e\u043a_\u0432\u0456\u0432\u0442\u043e\u0440\u043e\u043a_\u0441\u0435\u0440\u0435\u0434\u0443_\u0447\u0435\u0442\u0432\u0435\u0440_\u043f\u2019\u044f\u0442\u043d\u0438\u0446\u044e_\u0441\u0443\u0431\u043e\u0442\u0443".split("_"),genitive:"\u043d\u0435\u0434\u0456\u043b\u0456_\u043f\u043e\u043d\u0435\u0434\u0456\u043b\u043a\u0430_\u0432\u0456\u0432\u0442\u043e\u0440\u043a\u0430_\u0441\u0435\u0440\u0435\u0434\u0438_\u0447\u0435\u0442\u0432\u0435\u0440\u0433\u0430_\u043f\u2019\u044f\u0442\u043d\u0438\u0446\u0456_\u0441\u0443\u0431\u043e\u0442\u0438".split("_")};return!0===e?_.nominative.slice(1,7).concat(_.nominative.slice(0,1)):e?_[/(\[[\u0412\u0432\u0423\u0443]\]) ?dddd/.test(a)?"accusative":/\[?(?:\u043c\u0438\u043d\u0443\u043b\u043e\u0457|\u043d\u0430\u0441\u0442\u0443\u043f\u043d\u043e\u0457)? ?\] ?dddd/.test(a)?"genitive":"nominative"][e.day()]:_.nominative},weekdaysShort:"\u043d\u0434_\u043f\u043d_\u0432\u0442_\u0441\u0440_\u0447\u0442_\u043f\u0442_\u0441\u0431".split("_"),weekdaysMin:"\u043d\u0434_\u043f\u043d_\u0432\u0442_\u0441\u0440_\u0447\u0442_\u043f\u0442_\u0441\u0431".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY \u0440.",LLL:"D MMMM YYYY \u0440., HH:mm",LLLL:"dddd, D MMMM YYYY \u0440., HH:mm"},calendar:{sameDay:ja("[\u0421\u044c\u043e\u0433\u043e\u0434\u043d\u0456 "),nextDay:ja("[\u0417\u0430\u0432\u0442\u0440\u0430 "),lastDay:ja("[\u0412\u0447\u043e\u0440\u0430 "),nextWeek:ja("[\u0423] dddd ["),lastWeek:function(){switch(this.day()){case 0:case 3:case 5:case 6:return ja("[\u041c\u0438\u043d\u0443\u043b\u043e\u0457] dddd [").call(this);case 1:case 2:case 4:return ja("[\u041c\u0438\u043d\u0443\u043b\u043e\u0433\u043e] dddd [").call(this)}},sameElse:"L"},relativeTime:{future:"\u0437\u0430 %s",past:"%s \u0442\u043e\u043c\u0443",s:"\u0434\u0435\u043a\u0456\u043b\u044c\u043a\u0430 \u0441\u0435\u043a\u0443\u043d\u0434",ss:Sa,m:Sa,mm:Sa,h:"\u0433\u043e\u0434\u0438\u043d\u0443",hh:Sa,d:"\u0434\u0435\u043d\u044c",dd:Sa,M:"\u043c\u0456\u0441\u044f\u0446\u044c",MM:Sa,y:"\u0440\u0456\u043a",yy:Sa},meridiemParse:/\u043d\u043e\u0447\u0456|\u0440\u0430\u043d\u043a\u0443|\u0434\u043d\u044f|\u0432\u0435\u0447\u043e\u0440\u0430/,isPM:function(e){return/^(\u0434\u043d\u044f|\u0432\u0435\u0447\u043e\u0440\u0430)$/.test(e)},meridiem:function(e,a,_){return e<4?"\u043d\u043e\u0447\u0456":e<12?"\u0440\u0430\u043d\u043a\u0443":e<17?"\u0434\u043d\u044f":"\u0432\u0435\u0447\u043e\u0440\u0430"},dayOfMonthOrdinalParse:/\d{1,2}-(\u0439|\u0433\u043e)/,ordinal:function(e,a){switch(a){case"M":case"d":case"DDD":case"w":case"W":return e+"-\u0439";case"D":return e+"-\u0433\u043e";default:return e}},week:{dow:1,doy:7}});var xa=["\u062c\u0646\u0648\u0631\u06cc","\u0641\u0631\u0648\u0631\u06cc","\u0645\u0627\u0631\u0686","\u0627\u067e\u0631\u06cc\u0644","\u0645\u0626\u06cc","\u062c\u0648\u0646","\u062c\u0648\u0644\u0627\u0626\u06cc","\u0627\u06af\u0633\u062a","\u0633\u062a\u0645\u0628\u0631","\u0627\u06a9\u062a\u0648\u0628\u0631","\u0646\u0648\u0645\u0628\u0631","\u062f\u0633\u0645\u0628\u0631"],Pa=["\u0627\u062a\u0648\u0627\u0631","\u067e\u06cc\u0631","\u0645\u0646\u06af\u0644","\u0628\u062f\u06be","\u062c\u0645\u0639\u0631\u0627\u062a","\u062c\u0645\u0639\u06c1","\u06c1\u0641\u062a\u06c1"];return e.defineLocale("ur",{months:xa,monthsShort:xa,weekdays:Pa,weekdaysShort:Pa,weekdaysMin:Pa,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd\u060c D MMMM YYYY HH:mm"},meridiemParse:/\u0635\u0628\u062d|\u0634\u0627\u0645/,isPM:function(e){return"\u0634\u0627\u0645"===e},meridiem:function(e,a,_){return e<12?"\u0635\u0628\u062d":"\u0634\u0627\u0645"},calendar:{sameDay:"[\u0622\u062c \u0628\u0648\u0642\u062a] LT",nextDay:"[\u06a9\u0644 \u0628\u0648\u0642\u062a] LT",nextWeek:"dddd [\u0628\u0648\u0642\u062a] LT",lastDay:"[\u06af\u0630\u0634\u062a\u06c1 \u0631\u0648\u0632 \u0628\u0648\u0642\u062a] LT",lastWeek:"[\u06af\u0630\u0634\u062a\u06c1] dddd [\u0628\u0648\u0642\u062a] LT",sameElse:"L"},relativeTime:{future:"%s \u0628\u0639\u062f",past:"%s \u0642\u0628\u0644",s:"\u0686\u0646\u062f \u0633\u06cc\u06a9\u0646\u0688",ss:"%d \u0633\u06cc\u06a9\u0646\u0688",m:"\u0627\u06cc\u06a9 \u0645\u0646\u0679",mm:"%d \u0645\u0646\u0679",h:"\u0627\u06cc\u06a9 \u06af\u06be\u0646\u0679\u06c1",hh:"%d \u06af\u06be\u0646\u0679\u06d2",d:"\u0627\u06cc\u06a9 \u062f\u0646",dd:"%d \u062f\u0646",M:"\u0627\u06cc\u06a9 \u0645\u0627\u06c1",MM:"%d \u0645\u0627\u06c1",y:"\u0627\u06cc\u06a9 \u0633\u0627\u0644",yy:"%d \u0633\u0627\u0644"},preparse:function(e){return e.replace(/\u060c/g,",")},postformat:function(e){return e.replace(/,/g,"\u060c")},week:{dow:1,doy:4}}),e.defineLocale("uz-latn",{months:"Yanvar_Fevral_Mart_Aprel_May_Iyun_Iyul_Avgust_Sentabr_Oktabr_Noyabr_Dekabr".split("_"),monthsShort:"Yan_Fev_Mar_Apr_May_Iyun_Iyul_Avg_Sen_Okt_Noy_Dek".split("_"),weekdays:"Yakshanba_Dushanba_Seshanba_Chorshanba_Payshanba_Juma_Shanba".split("_"),weekdaysShort:"Yak_Dush_Sesh_Chor_Pay_Jum_Shan".split("_"),weekdaysMin:"Ya_Du_Se_Cho_Pa_Ju_Sha".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"D MMMM YYYY, dddd HH:mm"},calendar:{sameDay:"[Bugun soat] LT [da]",nextDay:"[Ertaga] LT [da]",nextWeek:"dddd [kuni soat] LT [da]",lastDay:"[Kecha soat] LT [da]",lastWeek:"[O'tgan] dddd [kuni soat] LT [da]",sameElse:"L"},relativeTime:{future:"Yaqin %s ichida",past:"Bir necha %s oldin",s:"soniya",ss:"%d soniya",m:"bir daqiqa",mm:"%d daqiqa",h:"bir soat",hh:"%d soat",d:"bir kun",dd:"%d kun",M:"bir oy",MM:"%d oy",y:"bir yil",yy:"%d yil"},week:{dow:1,doy:7}}),e.defineLocale("uz",{months:"\u044f\u043d\u0432\u0430\u0440_\u0444\u0435\u0432\u0440\u0430\u043b_\u043c\u0430\u0440\u0442_\u0430\u043f\u0440\u0435\u043b_\u043c\u0430\u0439_\u0438\u044e\u043d_\u0438\u044e\u043b_\u0430\u0432\u0433\u0443\u0441\u0442_\u0441\u0435\u043d\u0442\u044f\u0431\u0440_\u043e\u043a\u0442\u044f\u0431\u0440_\u043d\u043e\u044f\u0431\u0440_\u0434\u0435\u043a\u0430\u0431\u0440".split("_"),monthsShort:"\u044f\u043d\u0432_\u0444\u0435\u0432_\u043c\u0430\u0440_\u0430\u043f\u0440_\u043c\u0430\u0439_\u0438\u044e\u043d_\u0438\u044e\u043b_\u0430\u0432\u0433_\u0441\u0435\u043d_\u043e\u043a\u0442_\u043d\u043e\u044f_\u0434\u0435\u043a".split("_"),weekdays:"\u042f\u043a\u0448\u0430\u043d\u0431\u0430_\u0414\u0443\u0448\u0430\u043d\u0431\u0430_\u0421\u0435\u0448\u0430\u043d\u0431\u0430_\u0427\u043e\u0440\u0448\u0430\u043d\u0431\u0430_\u041f\u0430\u0439\u0448\u0430\u043d\u0431\u0430_\u0416\u0443\u043c\u0430_\u0428\u0430\u043d\u0431\u0430".split("_"),weekdaysShort:"\u042f\u043a\u0448_\u0414\u0443\u0448_\u0421\u0435\u0448_\u0427\u043e\u0440_\u041f\u0430\u0439_\u0416\u0443\u043c_\u0428\u0430\u043d".split("_"),weekdaysMin:"\u042f\u043a_\u0414\u0443_\u0421\u0435_\u0427\u043e_\u041f\u0430_\u0416\u0443_\u0428\u0430".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"D MMMM YYYY, dddd HH:mm"},calendar:{sameDay:"[\u0411\u0443\u0433\u0443\u043d \u0441\u043e\u0430\u0442] LT [\u0434\u0430]",nextDay:"[\u042d\u0440\u0442\u0430\u0433\u0430] LT [\u0434\u0430]",nextWeek:"dddd [\u043a\u0443\u043d\u0438 \u0441\u043e\u0430\u0442] LT [\u0434\u0430]",lastDay:"[\u041a\u0435\u0447\u0430 \u0441\u043e\u0430\u0442] LT [\u0434\u0430]",lastWeek:"[\u0423\u0442\u0433\u0430\u043d] dddd [\u043a\u0443\u043d\u0438 \u0441\u043e\u0430\u0442] LT [\u0434\u0430]",sameElse:"L"},relativeTime:{future:"\u042f\u043a\u0438\u043d %s \u0438\u0447\u0438\u0434\u0430",past:"\u0411\u0438\u0440 \u043d\u0435\u0447\u0430 %s \u043e\u043b\u0434\u0438\u043d",s:"\u0444\u0443\u0440\u0441\u0430\u0442",ss:"%d \u0444\u0443\u0440\u0441\u0430\u0442",m:"\u0431\u0438\u0440 \u0434\u0430\u043a\u0438\u043a\u0430",mm:"%d \u0434\u0430\u043a\u0438\u043a\u0430",h:"\u0431\u0438\u0440 \u0441\u043e\u0430\u0442",hh:"%d \u0441\u043e\u0430\u0442",d:"\u0431\u0438\u0440 \u043a\u0443\u043d",dd:"%d \u043a\u0443\u043d",M:"\u0431\u0438\u0440 \u043e\u0439",MM:"%d \u043e\u0439",y:"\u0431\u0438\u0440 \u0439\u0438\u043b",yy:"%d \u0439\u0438\u043b"},week:{dow:1,doy:7}}),e.defineLocale("vi",{months:"th\xe1ng 1_th\xe1ng 2_th\xe1ng 3_th\xe1ng 4_th\xe1ng 5_th\xe1ng 6_th\xe1ng 7_th\xe1ng 8_th\xe1ng 9_th\xe1ng 10_th\xe1ng 11_th\xe1ng 12".split("_"),monthsShort:"Thg 01_Thg 02_Thg 03_Thg 04_Thg 05_Thg 06_Thg 07_Thg 08_Thg 09_Thg 10_Thg 11_Thg 12".split("_"),monthsParseExact:!0,weekdays:"ch\u1ee7 nh\u1eadt_th\u1ee9 hai_th\u1ee9 ba_th\u1ee9 t\u01b0_th\u1ee9 n\u0103m_th\u1ee9 s\xe1u_th\u1ee9 b\u1ea3y".split("_"),weekdaysShort:"CN_T2_T3_T4_T5_T6_T7".split("_"),weekdaysMin:"CN_T2_T3_T4_T5_T6_T7".split("_"),weekdaysParseExact:!0,meridiemParse:/sa|ch/i,isPM:function(e){return/^ch$/i.test(e)},meridiem:function(e,a,_){return e<12?_?"sa":"SA":_?"ch":"CH"},longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM [n\u0103m] YYYY",LLL:"D MMMM [n\u0103m] YYYY HH:mm",LLLL:"dddd, D MMMM [n\u0103m] YYYY HH:mm",l:"DD/M/YYYY",ll:"D MMM YYYY",lll:"D MMM YYYY HH:mm",llll:"ddd, D MMM YYYY HH:mm"},calendar:{sameDay:"[H\xf4m nay l\xfac] LT",nextDay:"[Ng\xe0y mai l\xfac] LT",nextWeek:"dddd [tu\u1ea7n t\u1edbi l\xfac] LT",lastDay:"[H\xf4m qua l\xfac] LT",lastWeek:"dddd [tu\u1ea7n tr\u01b0\u1edbc l\xfac] LT",sameElse:"L"},relativeTime:{future:"%s t\u1edbi",past:"%s tr\u01b0\u1edbc",s:"v\xe0i gi\xe2y",ss:"%d gi\xe2y",m:"m\u1ed9t ph\xfat",mm:"%d ph\xfat",h:"m\u1ed9t gi\u1edd",hh:"%d gi\u1edd",d:"m\u1ed9t ng\xe0y",dd:"%d ng\xe0y",M:"m\u1ed9t th\xe1ng",MM:"%d th\xe1ng",y:"m\u1ed9t n\u0103m",yy:"%d n\u0103m"},dayOfMonthOrdinalParse:/\d{1,2}/,ordinal:function(e){return e},week:{dow:1,doy:4}}),e.defineLocale("x-pseudo",{months:"J~\xe1\xf1\xfa\xe1~r\xfd_F~\xe9br\xfa~\xe1r\xfd_~M\xe1rc~h_\xc1p~r\xedl_~M\xe1\xfd_~J\xfa\xf1\xe9~_J\xfal~\xfd_\xc1\xfa~g\xfast~_S\xe9p~t\xe9mb~\xe9r_\xd3~ct\xf3b~\xe9r_\xd1~\xf3v\xe9m~b\xe9r_~D\xe9c\xe9~mb\xe9r".split("_"),monthsShort:"J~\xe1\xf1_~F\xe9b_~M\xe1r_~\xc1pr_~M\xe1\xfd_~J\xfa\xf1_~J\xfal_~\xc1\xfag_~S\xe9p_~\xd3ct_~\xd1\xf3v_~D\xe9c".split("_"),monthsParseExact:!0,weekdays:"S~\xfa\xf1d\xe1~\xfd_M\xf3~\xf1d\xe1\xfd~_T\xfa\xe9~sd\xe1\xfd~_W\xe9d~\xf1\xe9sd~\xe1\xfd_T~h\xfars~d\xe1\xfd_~Fr\xedd~\xe1\xfd_S~\xe1t\xfar~d\xe1\xfd".split("_"),weekdaysShort:"S~\xfa\xf1_~M\xf3\xf1_~T\xfa\xe9_~W\xe9d_~Th\xfa_~Fr\xed_~S\xe1t".split("_"),weekdaysMin:"S~\xfa_M\xf3~_T\xfa_~W\xe9_T~h_Fr~_S\xe1".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[T~\xf3d\xe1~\xfd \xe1t] LT",nextDay:"[T~\xf3m\xf3~rr\xf3~w \xe1t] LT",nextWeek:"dddd [\xe1t] LT",lastDay:"[\xdd~\xe9st~\xe9rd\xe1~\xfd \xe1t] LT",lastWeek:"[L~\xe1st] dddd [\xe1t] LT",sameElse:"L"},relativeTime:{future:"\xed~\xf1 %s",past:"%s \xe1~g\xf3",s:"\xe1 ~f\xe9w ~s\xe9c\xf3~\xf1ds",ss:"%d s~\xe9c\xf3\xf1~ds",m:"\xe1 ~m\xed\xf1~\xfat\xe9",mm:"%d m~\xed\xf1\xfa~t\xe9s",h:"\xe1~\xf1 h\xf3~\xfar",hh:"%d h~\xf3\xfars",d:"\xe1 ~d\xe1\xfd",dd:"%d d~\xe1\xfds",M:"\xe1 ~m\xf3\xf1~th",MM:"%d m~\xf3\xf1t~hs",y:"\xe1 ~\xfd\xe9\xe1r",yy:"%d \xfd~\xe9\xe1rs"},dayOfMonthOrdinalParse:/\d{1,2}(th|st|nd|rd)/,ordinal:function(e){var a=e%10;return e+(1==~~(e%100/10)?"th":1==a?"st":2==a?"nd":3==a?"rd":"th")},week:{dow:1,doy:4}}),e.defineLocale("yo",{months:"S\u1eb9\u0301r\u1eb9\u0301_E\u0300re\u0300le\u0300_\u1eb8r\u1eb9\u0300na\u0300_I\u0300gbe\u0301_E\u0300bibi_O\u0300ku\u0300du_Ag\u1eb9mo_O\u0300gu\u0301n_Owewe_\u1ecc\u0300wa\u0300ra\u0300_Be\u0301lu\u0301_\u1ecc\u0300p\u1eb9\u0300\u0300".split("_"),monthsShort:"S\u1eb9\u0301r_E\u0300rl_\u1eb8rn_I\u0300gb_E\u0300bi_O\u0300ku\u0300_Ag\u1eb9_O\u0300gu\u0301_Owe_\u1ecc\u0300wa\u0300_Be\u0301l_\u1ecc\u0300p\u1eb9\u0300\u0300".split("_"),weekdays:"A\u0300i\u0300ku\u0301_Aje\u0301_I\u0300s\u1eb9\u0301gun_\u1eccj\u1ecd\u0301ru\u0301_\u1eccj\u1ecd\u0301b\u1ecd_\u1eb8ti\u0300_A\u0300ba\u0301m\u1eb9\u0301ta".split("_"),weekdaysShort:"A\u0300i\u0300k_Aje\u0301_I\u0300s\u1eb9\u0301_\u1eccjr_\u1eccjb_\u1eb8ti\u0300_A\u0300ba\u0301".split("_"),weekdaysMin:"A\u0300i\u0300_Aj_I\u0300s_\u1eccr_\u1eccb_\u1eb8t_A\u0300b".split("_"),longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendar:{sameDay:"[O\u0300ni\u0300 ni] LT",nextDay:"[\u1ecc\u0300la ni] LT",nextWeek:"dddd [\u1eccs\u1eb9\u0300 to\u0301n'b\u1ecd] [ni] LT",lastDay:"[A\u0300na ni] LT",lastWeek:"dddd [\u1eccs\u1eb9\u0300 to\u0301l\u1ecd\u0301] [ni] LT",sameElse:"L"},relativeTime:{future:"ni\u0301 %s",past:"%s k\u1ecdja\u0301",s:"i\u0300s\u1eb9ju\u0301 aaya\u0301 die",ss:"aaya\u0301 %d",m:"i\u0300s\u1eb9ju\u0301 kan",mm:"i\u0300s\u1eb9ju\u0301 %d",h:"wa\u0301kati kan",hh:"wa\u0301kati %d",d:"\u1ecdj\u1ecd\u0301 kan",dd:"\u1ecdj\u1ecd\u0301 %d",M:"osu\u0300 kan",MM:"osu\u0300 %d",y:"\u1ecddu\u0301n kan",yy:"\u1ecddu\u0301n %d"},dayOfMonthOrdinalParse:/\u1ecdj\u1ecd\u0301\s\d{1,2}/,ordinal:"\u1ecdj\u1ecd\u0301 %d",week:{dow:1,doy:4}}),e.defineLocale("zh-cn",{months:"\u4e00\u6708_\u4e8c\u6708_\u4e09\u6708_\u56db\u6708_\u4e94\u6708_\u516d\u6708_\u4e03\u6708_\u516b\u6708_\u4e5d\u6708_\u5341\u6708_\u5341\u4e00\u6708_\u5341\u4e8c\u6708".split("_"),monthsShort:"1\u6708_2\u6708_3\u6708_4\u6708_5\u6708_6\u6708_7\u6708_8\u6708_9\u6708_10\u6708_11\u6708_12\u6708".split("_"),weekdays:"\u661f\u671f\u65e5_\u661f\u671f\u4e00_\u661f\u671f\u4e8c_\u661f\u671f\u4e09_\u661f\u671f\u56db_\u661f\u671f\u4e94_\u661f\u671f\u516d".split("_"),weekdaysShort:"\u5468\u65e5_\u5468\u4e00_\u5468\u4e8c_\u5468\u4e09_\u5468\u56db_\u5468\u4e94_\u5468\u516d".split("_"),weekdaysMin:"\u65e5_\u4e00_\u4e8c_\u4e09_\u56db_\u4e94_\u516d".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY/MM/DD",LL:"YYYY\u5e74M\u6708D\u65e5",LLL:"YYYY\u5e74M\u6708D\u65e5Ah\u70b9mm\u5206",LLLL:"YYYY\u5e74M\u6708D\u65e5ddddAh\u70b9mm\u5206",l:"YYYY/M/D",ll:"YYYY\u5e74M\u6708D\u65e5",lll:"YYYY\u5e74M\u6708D\u65e5 HH:mm",llll:"YYYY\u5e74M\u6708D\u65e5dddd HH:mm"},meridiemParse:/\u51cc\u6668|\u65e9\u4e0a|\u4e0a\u5348|\u4e2d\u5348|\u4e0b\u5348|\u665a\u4e0a/,meridiemHour:function(e,a){return 12===e&&(e=0),"\u51cc\u6668"===a||"\u65e9\u4e0a"===a||"\u4e0a\u5348"===a||"\u4e0b\u5348"!==a&&"\u665a\u4e0a"!==a&&11<=e?e:e+12},meridiem:function(e,a,_){var s=100*e+a;return s<600?"\u51cc\u6668":s<900?"\u65e9\u4e0a":s<1130?"\u4e0a\u5348":s<1230?"\u4e2d\u5348":s<1800?"\u4e0b\u5348":"\u665a\u4e0a"},calendar:{sameDay:"[\u4eca\u5929]LT",nextDay:"[\u660e\u5929]LT",nextWeek:function(e){return e.week()!==this.week()?"[\u4e0b]dddLT":"[\u672c]dddLT"},lastDay:"[\u6628\u5929]LT",lastWeek:function(e){return this.week()!==e.week()?"[\u4e0a]dddLT":"[\u672c]dddLT"},sameElse:"L"},dayOfMonthOrdinalParse:/\d{1,2}(\u65e5|\u6708|\u5468)/,ordinal:function(e,a){switch(a){case"d":case"D":case"DDD":return e+"\u65e5";case"M":return e+"\u6708";case"w":case"W":return e+"\u5468";default:return e}},relativeTime:{future:"%s\u540e",past:"%s\u524d",s:"\u51e0\u79d2",ss:"%d \u79d2",m:"1 \u5206\u949f",mm:"%d \u5206\u949f",h:"1 \u5c0f\u65f6",hh:"%d \u5c0f\u65f6",d:"1 \u5929",dd:"%d \u5929",M:"1 \u4e2a\u6708",MM:"%d \u4e2a\u6708",y:"1 \u5e74",yy:"%d \u5e74"},week:{dow:1,doy:4}}),e.defineLocale("zh-hk",{months:"\u4e00\u6708_\u4e8c\u6708_\u4e09\u6708_\u56db\u6708_\u4e94\u6708_\u516d\u6708_\u4e03\u6708_\u516b\u6708_\u4e5d\u6708_\u5341\u6708_\u5341\u4e00\u6708_\u5341\u4e8c\u6708".split("_"),monthsShort:"1\u6708_2\u6708_3\u6708_4\u6708_5\u6708_6\u6708_7\u6708_8\u6708_9\u6708_10\u6708_11\u6708_12\u6708".split("_"),weekdays:"\u661f\u671f\u65e5_\u661f\u671f\u4e00_\u661f\u671f\u4e8c_\u661f\u671f\u4e09_\u661f\u671f\u56db_\u661f\u671f\u4e94_\u661f\u671f\u516d".split("_"),weekdaysShort:"\u9031\u65e5_\u9031\u4e00_\u9031\u4e8c_\u9031\u4e09_\u9031\u56db_\u9031\u4e94_\u9031\u516d".split("_"),weekdaysMin:"\u65e5_\u4e00_\u4e8c_\u4e09_\u56db_\u4e94_\u516d".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY/MM/DD",LL:"YYYY\u5e74M\u6708D\u65e5",LLL:"YYYY\u5e74M\u6708D\u65e5 HH:mm",LLLL:"YYYY\u5e74M\u6708D\u65e5dddd HH:mm",l:"YYYY/M/D",ll:"YYYY\u5e74M\u6708D\u65e5",lll:"YYYY\u5e74M\u6708D\u65e5 HH:mm",llll:"YYYY\u5e74M\u6708D\u65e5dddd HH:mm"},meridiemParse:/\u51cc\u6668|\u65e9\u4e0a|\u4e0a\u5348|\u4e2d\u5348|\u4e0b\u5348|\u665a\u4e0a/,meridiemHour:function(e,a){return 12===e&&(e=0),"\u51cc\u6668"===a||"\u65e9\u4e0a"===a||"\u4e0a\u5348"===a?e:"\u4e2d\u5348"===a?11<=e?e:e+12:"\u4e0b\u5348"===a||"\u665a\u4e0a"===a?e+12:void 0},meridiem:function(e,a,_){var s=100*e+a;return s<600?"\u51cc\u6668":s<900?"\u65e9\u4e0a":s<1200?"\u4e0a\u5348":1200===s?"\u4e2d\u5348":s<1800?"\u4e0b\u5348":"\u665a\u4e0a"},calendar:{sameDay:"[\u4eca\u5929]LT",nextDay:"[\u660e\u5929]LT",nextWeek:"[\u4e0b]ddddLT",lastDay:"[\u6628\u5929]LT",lastWeek:"[\u4e0a]ddddLT",sameElse:"L"},dayOfMonthOrdinalParse:/\d{1,2}(\u65e5|\u6708|\u9031)/,ordinal:function(e,a){switch(a){case"d":case"D":case"DDD":return e+"\u65e5";case"M":return e+"\u6708";case"w":case"W":return e+"\u9031";default:return e}},relativeTime:{future:"%s\u5f8c",past:"%s\u524d",s:"\u5e7e\u79d2",ss:"%d \u79d2",m:"1 \u5206\u9418",mm:"%d \u5206\u9418",h:"1 \u5c0f\u6642",hh:"%d \u5c0f\u6642",d:"1 \u5929",dd:"%d \u5929",M:"1 \u500b\u6708",MM:"%d \u500b\u6708",y:"1 \u5e74",yy:"%d \u5e74"}}),e.defineLocale("zh-mo",{months:"\u4e00\u6708_\u4e8c\u6708_\u4e09\u6708_\u56db\u6708_\u4e94\u6708_\u516d\u6708_\u4e03\u6708_\u516b\u6708_\u4e5d\u6708_\u5341\u6708_\u5341\u4e00\u6708_\u5341\u4e8c\u6708".split("_"),monthsShort:"1\u6708_2\u6708_3\u6708_4\u6708_5\u6708_6\u6708_7\u6708_8\u6708_9\u6708_10\u6708_11\u6708_12\u6708".split("_"),weekdays:"\u661f\u671f\u65e5_\u661f\u671f\u4e00_\u661f\u671f\u4e8c_\u661f\u671f\u4e09_\u661f\u671f\u56db_\u661f\u671f\u4e94_\u661f\u671f\u516d".split("_"),weekdaysShort:"\u9031\u65e5_\u9031\u4e00_\u9031\u4e8c_\u9031\u4e09_\u9031\u56db_\u9031\u4e94_\u9031\u516d".split("_"),weekdaysMin:"\u65e5_\u4e00_\u4e8c_\u4e09_\u56db_\u4e94_\u516d".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"YYYY\u5e74M\u6708D\u65e5",LLL:"YYYY\u5e74M\u6708D\u65e5 HH:mm",LLLL:"YYYY\u5e74M\u6708D\u65e5dddd HH:mm",l:"D/M/YYYY",ll:"YYYY\u5e74M\u6708D\u65e5",lll:"YYYY\u5e74M\u6708D\u65e5 HH:mm",llll:"YYYY\u5e74M\u6708D\u65e5dddd HH:mm"},meridiemParse:/\u51cc\u6668|\u65e9\u4e0a|\u4e0a\u5348|\u4e2d\u5348|\u4e0b\u5348|\u665a\u4e0a/,meridiemHour:function(e,a){return 12===e&&(e=0),"\u51cc\u6668"===a||"\u65e9\u4e0a"===a||"\u4e0a\u5348"===a?e:"\u4e2d\u5348"===a?11<=e?e:e+12:"\u4e0b\u5348"===a||"\u665a\u4e0a"===a?e+12:void 0},meridiem:function(e,a,_){var s=100*e+a;return s<600?"\u51cc\u6668":s<900?"\u65e9\u4e0a":s<1130?"\u4e0a\u5348":s<1230?"\u4e2d\u5348":s<1800?"\u4e0b\u5348":"\u665a\u4e0a"},calendar:{sameDay:"[\u4eca\u5929] LT",nextDay:"[\u660e\u5929] LT",nextWeek:"[\u4e0b]dddd LT",lastDay:"[\u6628\u5929] LT",lastWeek:"[\u4e0a]dddd LT",sameElse:"L"},dayOfMonthOrdinalParse:/\d{1,2}(\u65e5|\u6708|\u9031)/,ordinal:function(e,a){switch(a){case"d":case"D":case"DDD":return e+"\u65e5";case"M":return e+"\u6708";case"w":case"W":return e+"\u9031";default:return e}},relativeTime:{future:"%s\u5167",past:"%s\u524d",s:"\u5e7e\u79d2",ss:"%d \u79d2",m:"1 \u5206\u9418",mm:"%d \u5206\u9418",h:"1 \u5c0f\u6642",hh:"%d \u5c0f\u6642",d:"1 \u5929",dd:"%d \u5929",M:"1 \u500b\u6708",MM:"%d \u500b\u6708",y:"1 \u5e74",yy:"%d \u5e74"}}),e.defineLocale("zh-tw",{months:"\u4e00\u6708_\u4e8c\u6708_\u4e09\u6708_\u56db\u6708_\u4e94\u6708_\u516d\u6708_\u4e03\u6708_\u516b\u6708_\u4e5d\u6708_\u5341\u6708_\u5341\u4e00\u6708_\u5341\u4e8c\u6708".split("_"),monthsShort:"1\u6708_2\u6708_3\u6708_4\u6708_5\u6708_6\u6708_7\u6708_8\u6708_9\u6708_10\u6708_11\u6708_12\u6708".split("_"),weekdays:"\u661f\u671f\u65e5_\u661f\u671f\u4e00_\u661f\u671f\u4e8c_\u661f\u671f\u4e09_\u661f\u671f\u56db_\u661f\u671f\u4e94_\u661f\u671f\u516d".split("_"),weekdaysShort:"\u9031\u65e5_\u9031\u4e00_\u9031\u4e8c_\u9031\u4e09_\u9031\u56db_\u9031\u4e94_\u9031\u516d".split("_"),weekdaysMin:"\u65e5_\u4e00_\u4e8c_\u4e09_\u56db_\u4e94_\u516d".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY/MM/DD",LL:"YYYY\u5e74M\u6708D\u65e5",LLL:"YYYY\u5e74M\u6708D\u65e5 HH:mm",LLLL:"YYYY\u5e74M\u6708D\u65e5dddd HH:mm",l:"YYYY/M/D",ll:"YYYY\u5e74M\u6708D\u65e5",lll:"YYYY\u5e74M\u6708D\u65e5 HH:mm",llll:"YYYY\u5e74M\u6708D\u65e5dddd HH:mm"},meridiemParse:/\u51cc\u6668|\u65e9\u4e0a|\u4e0a\u5348|\u4e2d\u5348|\u4e0b\u5348|\u665a\u4e0a/,meridiemHour:function(e,a){return 12===e&&(e=0),"\u51cc\u6668"===a||"\u65e9\u4e0a"===a||"\u4e0a\u5348"===a?e:"\u4e2d\u5348"===a?11<=e?e:e+12:"\u4e0b\u5348"===a||"\u665a\u4e0a"===a?e+12:void 0},meridiem:function(e,a,_){var s=100*e+a;return s<600?"\u51cc\u6668":s<900?"\u65e9\u4e0a":s<1130?"\u4e0a\u5348":s<1230?"\u4e2d\u5348":s<1800?"\u4e0b\u5348":"\u665a\u4e0a"},calendar:{sameDay:"[\u4eca\u5929] LT",nextDay:"[\u660e\u5929] LT",nextWeek:"[\u4e0b]dddd LT",lastDay:"[\u6628\u5929] LT",lastWeek:"[\u4e0a]dddd LT",sameElse:"L"},dayOfMonthOrdinalParse:/\d{1,2}(\u65e5|\u6708|\u9031)/,ordinal:function(e,a){switch(a){case"d":case"D":case"DDD":return e+"\u65e5";case"M":return e+"\u6708";case"w":case"W":return e+"\u9031";default:return e}},relativeTime:{future:"%s\u5f8c",past:"%s\u524d",s:"\u5e7e\u79d2",ss:"%d \u79d2",m:"1 \u5206\u9418",mm:"%d \u5206\u9418",h:"1 \u5c0f\u6642",hh:"%d \u5c0f\u6642",d:"1 \u5929",dd:"%d \u5929",M:"1 \u500b\u6708",MM:"%d \u500b\u6708",y:"1 \u5e74",yy:"%d \u5e74"}}),e.locale("en"),e});
+//# sourceMappingURL=locales.min.js.map
\ No newline at end of file
diff --git a/admin/js/vendors/moment/locales.min.js.map b/admin/js/vendors/moment/locales.min.js.map
new file mode 100644 (file)
index 0000000..d5df049
--- /dev/null
@@ -0,0 +1 @@
+{"version":3,"file":"locales.min.js","sources":["locales.js"],"names":["global","factory","exports","module","require","define","amd","moment","this","defineLocale","months","split","monthsShort","weekdays","weekdaysShort","weekdaysMin","meridiemParse","isPM","input","test","meridiem","hours","minutes","isLower","longDateFormat","LT","LTS","L","LL","LLL","LLLL","calendar","sameDay","nextDay","nextWeek","lastDay","lastWeek","sameElse","relativeTime","future","past","s","ss","m","mm","h","hh","d","dd","M","MM","y","yy","dayOfMonthOrdinalParse","ordinal","number","week","dow","doy","pluralForm","n","pluralize","u","withoutSuffix","string","isFuture","f","str","plurals","replace","weekdaysParseExact","hour","minute","postformat","pluralForm$1","pluralize$1","plurals$1","symbolMap","1","2","3","4","5","6","7","8","9","0","months$1","preparse","match","symbolMap$1","numberMap","١","٢","٣","٤","٥","٦","٧","٨","٩","٠","pluralForm$2","pluralize$2","plurals$2","symbolMap$2","numberMap$1","months$2","suffixes","70","80","20","50","100","10","30","60","90","relativeTimeWithPlural","key","num","forms","a","format","standalone","isFormat","day","period","lastDigit","last2Digits","symbolMap$3","numberMap$2","১","২","৩","৪","৫","৬","৭","৮","৯","০","meridiemHour","symbolMap$4","numberMap$3","༡","༢","༣","༤","༥","༦","༧","༨","༩","༠","relativeTimeWithMutation","text","mutationTable","b","undefined","charAt","substring","softMutation","monthsShortRegex","monthsParseExact","monthsParse","monthsRegex","minWeekdaysParse","translate","result","weekdaysParse","fullWeekdaysParse","shortWeekdaysParse","monthsStrictRegex","monthsShortStrictRegex","longMonthsParse","shortMonthsParse","lastNumber","token","ll","lll","llll","months$3","monthsParse$1","monthsRegex$1","plural$1","translate$1","processRelativeTime","w","processRelativeTime$1","processRelativeTime$2","l","output","exec","ww","months$4","monthsNominativeEl","monthsGenitiveEl","momentToFormat","indexOf","_monthsGenitiveEl","month","_monthsNominativeEl","toLowerCase","calendarEl","mom","_calendarEl","Function","Object","prototype","toString","call","apply","monthsShortDot","monthsShort$1","monthsParse$2","monthsRegex$2","monthsShortDot$1","monthsShort$2","monthsParse$3","monthsRegex$3","monthsShortDot$2","monthsShort$3","monthsParse$4","monthsRegex$4","processRelativeTime$3","invalidDate","symbolMap$5","numberMap$4","۱","۲","۳","۴","۵","۶","۷","۸","۹","۰","numbersPast","numbersFuture","translate$2","monthsRegex$5","monthsParse$5","monthsShortWithDots","monthsShortWithoutDots","processRelativeTime$4","processRelativeTime$5","symbolMap$6","numberMap$5","૧","૨","૩","૪","૫","૬","૭","૮","૯","૦","symbolMap$7","numberMap$6","१","२","३","४","५","६","७","८","९","०","translate$3","weekEndings","translate$4","plural$2","translate$5","eras","since","offset","name","narrow","abbr","until","Infinity","eraYearOrdinalRegex","eraYearOrdinalParse","parseInt","now","$0","$1","$2","suffixes$1","40","symbolMap$8","numberMap$7","១","២","៣","៤","៥","៦","៧","៨","៩","០","symbolMap$9","numberMap$8","೧","೨","೩","೪","೫","೬","೭","೮","೯","೦","isUpper","symbolMap$a","numberMap$9","months$7","suffixes$2","processRelativeTime$6","eifelerRegelAppliesToNumber","isNaN","substr","units","translateSingular","special","translate$6","units$1","relativeTimeWithPlural$1","relativeTimeWithSingular","translator","words","correctGrammaticalCase","wordKey","length","translate$7","symbolMap$b","numberMap$a","relativeTimeMr","symbolMap$c","numberMap$b","၁","၂","၃","၄","၅","၆","၇","၈","၉","၀","symbolMap$d","numberMap$c","monthsShortWithDots$1","monthsShortWithoutDots$1","monthsParse$6","monthsRegex$6","monthsShortWithDots$2","monthsShortWithoutDots$2","monthsParse$7","monthsRegex$7","symbolMap$e","numberMap$d","੧","੨","੩","੪","੫","੬","੭","੮","੯","੦","monthsNominative","monthsSubjective","plural$3","translate$8","relativeTimeWithPlural$2","relativeTimeWithPlural$3","monthsParse$8","months$8","days","months$9","monthsShort$6","plural$5","translate$9","processRelativeTime$7","translator$1","translator$2","symbolMap$f","numberMap$e","௧","௨","௩","௪","௫","௬","௭","௮","௯","௦","suffixes$3","12","13","suffixes$4","numbersNouns","translate$a","numberNoun","hundred","Math","floor","ten","one","word","numberAsNoun","time","slice","suffixes$5","processRelativeTime$8","relativeTimeWithPlural$4","processHoursFunction","hm","nominative","accusative","genitive","concat","months$a","days$1","locale"],"mappings":"CAAE,SAAUA,EAAQC,GACE,iBAAZC,SAA0C,oBAAXC,QACZ,mBAAZC,QAAyBH,EAAQG,QAAQ,cACrC,mBAAXC,QAAyBA,OAAOC,IAAMD,OAAO,CAAC,aAAcJ,GACnEA,EAAQD,EAAOO,QAJjB,CAKCC,KAAM,SAAWD,gBAIfA,EAAOE,aAAa,KAAM,CACtBC,OAAQ,8FAA8FC,MAClG,KAEJC,YAAa,kDAAkDD,MAAM,KACrEE,SAAU,4DAA4DF,MAClE,KAEJG,cAAe,8BAA8BH,MAAM,KACnDI,YAAa,uBAAuBJ,MAAM,KAC1CK,cAAe,SACfC,KAAM,SAAUC,GACZ,MAAO,QAAQC,KAAKD,IAExBE,SAAU,SAAUC,EAAOC,EAASC,GAChC,OAAIF,EAAQ,GACDE,EAAU,KAAO,KAEjBA,EAAU,KAAO,MAGhCC,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,2BAEVC,SAAU,CACNC,QAAS,iBACTC,QAAS,kBACTC,SAAU,eACVC,QAAS,iBACTC,SAAU,sBACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,SACRC,KAAM,YACNC,EAAG,mBACHC,GAAI,cACJC,EAAG,YACHC,GAAI,YACJC,EAAG,SACHC,GAAI,SACJC,EAAG,SACHC,GAAI,SACJC,EAAG,WACHC,GAAI,YACJC,EAAG,UACHC,GAAI,WAERC,uBAAwB,kBACxBC,QAAS,SAAUC,GACf,OACIA,GACY,IAAXA,GAA2B,IAAXA,GAA0B,IAAVA,EAAe,MAAQ,OAGhEC,KAAM,CACFC,IAAK,EACLC,IAAK,KAMI,SAAbC,EAAuBC,GACnB,OAAa,IAANA,EACD,EACM,IAANA,EACA,EACM,IAANA,EACA,EACW,GAAXA,EAAI,KAAYA,EAAI,KAAO,GAC3B,EACW,IAAXA,EAAI,IACJ,EACA,EAoDE,SAAZC,EAAsBC,GAClB,OAAO,SAAUP,EAAQQ,EAAeC,EAAQC,GAC5C,IAAIC,EAAIP,EAAWJ,GACfY,EAAMC,EAAQN,GAAGH,EAAWJ,IAIhC,OAHU,IAANW,IACAC,EAAMA,EAAIJ,EAAgB,EAAI,IAE3BI,EAAIE,QAAQ,MAAOd,IAtEtC,IAaIa,EAAU,CACN3B,EAAG,CACC,iEACA,gEACA,CAAC,6CAAW,8CACZ,8BACA,oCACA,qCAEJE,EAAG,CACC,iEACA,gEACA,CAAC,6CAAW,8CACZ,oCACA,oCACA,qCAEJE,EAAG,CACC,2DACA,0DACA,CAAC,uCAAU,wCACX,oCACA,8BACA,+BAEJE,EAAG,CACC,qDACA,8CACA,CAAC,iCAAS,kCACV,8BACA,oCACA,yBAEJE,EAAG,CACC,qDACA,8CACA,CAAC,iCAAS,kCACV,8BACA,8BACA,yBAEJE,EAAG,CACC,qDACA,8CACA,CAAC,iCAAS,kCACV,oCACA,oCACA,0BAaRzC,EAAS,CACL,iCACA,iCACA,2BACA,iCACA,qBACA,2BACA,uCACA,qBACA,uCACA,uCACA,uCACA,wCAGRH,EAAOE,aAAa,QAAS,CACzBC,OAAQA,EACRE,YAAaF,EACbG,SAAU,uRAAsDF,MAAM,KACtEG,cAAe,mMAAwCH,MAAM,KAC7DI,YAAa,mDAAgBJ,MAAM,KACnC2D,oBAAoB,EACpB9C,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,uBACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,0BAEVd,cAAe,gBACfC,KAAM,SAAUC,GACZ,MAAO,WAAQA,GAEnBE,SAAU,SAAUmD,EAAMC,EAAQjD,GAC9B,OAAIgD,EAAO,GACA,SAEA,UAGfxC,SAAU,CACNC,QAAS,8FACTC,QAAS,wFACTC,SAAU,oEACVC,QAAS,kFACTC,SAAU,oEACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,wBACRC,KAAM,wBACNC,EAAGoB,EAAU,KACbnB,GAAImB,EAAU,KACdlB,EAAGkB,EAAU,KACbjB,GAAIiB,EAAU,KACdhB,EAAGgB,EAAU,KACbf,GAAIe,EAAU,KACdd,EAAGc,EAAU,KACbb,GAAIa,EAAU,KACdZ,EAAGY,EAAU,KACbX,GAAIW,EAAU,KACdV,EAAGU,EAAU,KACbT,GAAIS,EAAU,MAElBY,WAAY,SAAUT,GAClB,OAAOA,EAAOK,QAAQ,KAAM,WAEhCb,KAAM,CACFC,IAAK,EACLC,IAAK,KAMbnD,EAAOE,aAAa,QAAS,CACzBC,OAAQ,0WAAwEC,MAC5E,KAEJC,YAAa,0WAAwED,MACjF,KAEJE,SAAU,uRAAsDF,MAAM,KACtEG,cAAe,mMAAwCH,MAAM,KAC7DI,YAAa,mDAAgBJ,MAAM,KACnC2D,oBAAoB,EACpB9C,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,0BAEVC,SAAU,CACNC,QAAS,8FACTC,QAAS,kFACTC,SAAU,oEACVC,QAAS,kFACTC,SAAU,oEACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,kBACRC,KAAM,wBACNC,EAAG,2BACHC,GAAI,oCACJC,EAAG,iCACHC,GAAI,oCACJC,EAAG,2BACHC,GAAI,oCACJC,EAAG,qBACHC,GAAI,8BACJC,EAAG,qBACHC,GAAI,8BACJC,EAAG,qBACHC,GAAI,qCAERI,KAAM,CACFC,IAAK,EACLC,IAAK,MAkBM,SAAfgB,EAAyBd,GACrB,OAAa,IAANA,EACD,EACM,IAANA,EACA,EACM,IAANA,EACA,EACW,GAAXA,EAAI,KAAYA,EAAI,KAAO,GAC3B,EACW,IAAXA,EAAI,IACJ,EACA,EAoDI,SAAde,EAAwBb,GACpB,OAAO,SAAUP,EAAQQ,EAAeC,EAAQC,GAC5C,IAAIC,EAAIQ,EAAanB,GACjBY,EAAMS,EAAUd,GAAGY,EAAanB,IAIpC,OAHU,IAANW,IACAC,EAAMA,EAAIJ,EAAgB,EAAI,IAE3BI,EAAIE,QAAQ,MAAOd,IAlFtC,IAAIsB,EAAY,CACRC,EAAK,IACLC,EAAK,IACLC,EAAK,IACLC,EAAK,IACLC,EAAK,IACLC,EAAK,IACLC,EAAK,IACLC,EAAK,IACLC,EAAK,IACLC,EAAK,KAeTX,EAAY,CACRnC,EAAG,CACC,iEACA,gEACA,CAAC,6CAAW,8CACZ,8BACA,oCACA,qCAEJE,EAAG,CACC,iEACA,gEACA,CAAC,6CAAW,8CACZ,oCACA,oCACA,qCAEJE,EAAG,CACC,2DACA,0DACA,CAAC,uCAAU,wCACX,oCACA,8BACA,+BAEJE,EAAG,CACC,qDACA,8CACA,CAAC,iCAAS,kCACV,8BACA,oCACA,yBAEJE,EAAG,CACC,qDACA,8CACA,CAAC,iCAAS,kCACV,8BACA,8BACA,yBAEJE,EAAG,CACC,qDACA,8CACA,CAAC,iCAAS,kCACV,oCACA,oCACA,0BAaRqC,EAAW,CACP,iCACA,uCACA,2BACA,iCACA,2BACA,iCACA,iCACA,iCACA,uCACA,uCACA,uCACA,wCAGRjF,EAAOE,aAAa,QAAS,CACzBC,OAAQ8E,EACR5E,YAAa4E,EACb3E,SAAU,uRAAsDF,MAAM,KACtEG,cAAe,mMAAwCH,MAAM,KAC7DI,YAAa,mDAAgBJ,MAAM,KACnC2D,oBAAoB,EACpB9C,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,uBACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,0BAEVd,cAAe,gBACfC,KAAM,SAAUC,GACZ,MAAO,WAAQA,GAEnBE,SAAU,SAAUmD,EAAMC,EAAQjD,GAC9B,OAAIgD,EAAO,GACA,SAEA,UAGfxC,SAAU,CACNC,QAAS,8FACTC,QAAS,wFACTC,SAAU,oEACVC,QAAS,kFACTC,SAAU,oEACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,wBACRC,KAAM,wBACNC,EAAGkC,EAAY,KACfjC,GAAIiC,EAAY,KAChBhC,EAAGgC,EAAY,KACf/B,GAAI+B,EAAY,KAChB9B,EAAG8B,EAAY,KACf7B,GAAI6B,EAAY,KAChB5B,EAAG4B,EAAY,KACf3B,GAAI2B,EAAY,KAChB1B,EAAG0B,EAAY,KACfzB,GAAIyB,EAAY,KAChBxB,EAAGwB,EAAY,KACfvB,GAAIuB,EAAY,MAEpBc,SAAU,SAAUzB,GAChB,OAAOA,EAAOK,QAAQ,UAAM,MAEhCI,WAAY,SAAUT,GAClB,OAAOA,EACFK,QAAQ,MAAO,SAAUqB,GACtB,OAAOb,EAAUa,KAEpBrB,QAAQ,KAAM,WAEvBb,KAAM,CACFC,IAAK,EACLC,IAAK,MAMbnD,EAAOE,aAAa,QAAS,CACzBC,OAAQ,0WAAwEC,MAC5E,KAEJC,YAAa,0WAAwED,MACjF,KAEJE,SAAU,uRAAsDF,MAAM,KACtEG,cAAe,mMAAwCH,MAAM,KAC7DI,YAAa,mDAAgBJ,MAAM,KACnC2D,oBAAoB,EACpB9C,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,0BAEVC,SAAU,CACNC,QAAS,8FACTC,QAAS,kFACTC,SAAU,oEACVC,QAAS,kFACTC,SAAU,oEACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,kBACRC,KAAM,wBACNC,EAAG,2BACHC,GAAI,oCACJC,EAAG,iCACHC,GAAI,oCACJC,EAAG,2BACHC,GAAI,oCACJC,EAAG,qBACHC,GAAI,8BACJC,EAAG,qBACHC,GAAI,8BACJC,EAAG,qBACHC,GAAI,qCAERI,KAAM,CACFC,IAAK,EACLC,IAAK,MAMb,IAAIiC,EAAc,CACVb,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,UAETK,EAAY,CACRC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,KAGb/F,EAAOE,aAAa,QAAS,CACzBC,OAAQ,wYAA6EC,MACjF,KAEJC,YAAa,wYAA6ED,MACtF,KAEJE,SAAU,uRAAsDF,MAAM,KACtEG,cAAe,mMAAwCH,MAAM,KAC7DI,YAAa,mDAAgBJ,MAAM,KACnC2D,oBAAoB,EACpB9C,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,0BAEVd,cAAe,gBACfC,KAAM,SAAUC,GACZ,MAAO,WAAQA,GAEnBE,SAAU,SAAUmD,EAAMC,EAAQjD,GAC9B,OAAIgD,EAAO,GACA,SAEA,UAGfxC,SAAU,CACNC,QAAS,8FACTC,QAAS,kFACTC,SAAU,oEACVC,QAAS,kFACTC,SAAU,oEACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,kBACRC,KAAM,wBACNC,EAAG,2BACHC,GAAI,oCACJC,EAAG,iCACHC,GAAI,oCACJC,EAAG,2BACHC,GAAI,oCACJC,EAAG,qBACHC,GAAI,8BACJC,EAAG,qBACHC,GAAI,8BACJC,EAAG,qBACHC,GAAI,qCAERqC,SAAU,SAAUzB,GAChB,OAAOA,EACFK,QAAQ,kEAAiB,SAAUqB,GAChC,OAAOE,EAAUF,KAEpBrB,QAAQ,UAAM,MAEvBI,WAAY,SAAUT,GAClB,OAAOA,EACFK,QAAQ,MAAO,SAAUqB,GACtB,OAAOC,EAAYD,KAEtBrB,QAAQ,KAAM,WAEvBb,KAAM,CACFC,IAAK,EACLC,IAAK,KAMbnD,EAAOE,aAAa,QAAS,CACzBC,OAAQ,gXAAyEC,MAC7E,KAEJC,YAAa,gXAAyED,MAClF,KAEJE,SAAU,uRAAsDF,MAAM,KACtEG,cAAe,mMAAwCH,MAAM,KAC7DI,YAAa,mDAAgBJ,MAAM,KACnC2D,oBAAoB,EACpB9C,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,0BAEVC,SAAU,CACNC,QAAS,8FACTC,QAAS,kFACTC,SAAU,oEACVC,QAAS,kFACTC,SAAU,oEACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,kBACRC,KAAM,wBACNC,EAAG,2BACHC,GAAI,oCACJC,EAAG,iCACHC,GAAI,oCACJC,EAAG,2BACHC,GAAI,oCACJC,EAAG,qBACHC,GAAI,8BACJC,EAAG,qBACHC,GAAI,8BACJC,EAAG,qBACHC,GAAI,qCAERI,KAAM,CACFC,IAAK,EACLC,IAAK,KA8BM,SAAf6C,EAAyB3C,GACrB,OAAa,IAANA,EACD,EACM,IAANA,EACA,EACM,IAANA,EACA,EACW,GAAXA,EAAI,KAAYA,EAAI,KAAO,GAC3B,EACW,IAAXA,EAAI,IACJ,EACA,EAoDI,SAAd4C,EAAwB1C,GACpB,OAAO,SAAUP,EAAQQ,EAAeC,EAAQC,GAC5C,IAAIC,EAAIqC,EAAahD,GACjBY,EAAMsC,EAAU3C,GAAGyC,EAAahD,IAIpC,OAHU,IAANW,IACAC,EAAMA,EAAIJ,EAAgB,EAAI,IAE3BI,EAAIE,QAAQ,MAAOd,IA9FtC,IAAImD,EAAc,CACV5B,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,UAEToB,EAAc,CACVd,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,KAeTG,EAAY,CACRhE,EAAG,CACC,iEACA,gEACA,CAAC,6CAAW,8CACZ,8BACA,oCACA,qCAEJE,EAAG,CACC,iEACA,gEACA,CAAC,6CAAW,8CACZ,oCACA,oCACA,qCAEJE,EAAG,CACC,2DACA,0DACA,CAAC,uCAAU,wCACX,oCACA,8BACA,+BAEJE,EAAG,CACC,qDACA,8CACA,CAAC,iCAAS,kCACV,8BACA,oCACA,yBAEJE,EAAG,CACC,qDACA,8CACA,CAAC,iCAAS,kCACV,8BACA,8BACA,yBAEJE,EAAG,CACC,qDACA,8CACA,CAAC,iCAAS,kCACV,oCACA,oCACA,0BAaRyD,EAAW,CACP,iCACA,uCACA,2BACA,iCACA,2BACA,iCACA,iCACA,iCACA,uCACA,uCACA,uCACA,wCAGRrG,EAAOE,aAAa,KAAM,CACtBC,OAAQkG,EACRhG,YAAagG,EACb/F,SAAU,uRAAsDF,MAAM,KACtEG,cAAe,mMAAwCH,MAAM,KAC7DI,YAAa,mDAAgBJ,MAAM,KACnC2D,oBAAoB,EACpB9C,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,uBACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,0BAEVd,cAAe,gBACfC,KAAM,SAAUC,GACZ,MAAO,WAAQA,GAEnBE,SAAU,SAAUmD,EAAMC,EAAQjD,GAC9B,OAAIgD,EAAO,GACA,SAEA,UAGfxC,SAAU,CACNC,QAAS,8FACTC,QAAS,wFACTC,SAAU,oEACVC,QAAS,kFACTC,SAAU,oEACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,wBACRC,KAAM,wBACNC,EAAG+D,EAAY,KACf9D,GAAI8D,EAAY,KAChB7D,EAAG6D,EAAY,KACf5D,GAAI4D,EAAY,KAChB3D,EAAG2D,EAAY,KACf1D,GAAI0D,EAAY,KAChBzD,EAAGyD,EAAY,KACfxD,GAAIwD,EAAY,KAChBvD,EAAGuD,EAAY,KACftD,GAAIsD,EAAY,KAChBrD,EAAGqD,EAAY,KACfpD,GAAIoD,EAAY,MAEpBf,SAAU,SAAUzB,GAChB,OAAOA,EACFK,QAAQ,kEAAiB,SAAUqB,GAChC,OAAOiB,EAAYjB,KAEtBrB,QAAQ,UAAM,MAEvBI,WAAY,SAAUT,GAClB,OAAOA,EACFK,QAAQ,MAAO,SAAUqB,GACtB,OAAOgB,EAAYhB,KAEtBrB,QAAQ,KAAM,WAEvBb,KAAM,CACFC,IAAK,EACLC,IAAK,MAMb,IAAImD,EAAW,CACX/B,EAAG,QACHI,EAAG,QACHG,EAAG,QACHyB,GAAI,QACJC,GAAI,QACJhC,EAAG,OACHK,EAAG,OACH4B,GAAI,OACJC,GAAI,OACJjC,EAAG,cACHC,EAAG,cACHiC,IAAK,cACL/B,EAAG,YACHG,EAAG,QACH6B,GAAI,QACJC,GAAI,QACJC,GAAI,kBACJC,GAAI,mBAwFR,SAASC,EAAuBhE,EAAQQ,EAAeyD,GACnD,IATkBC,EACdC,EAgBJ,MAAY,MAARF,EACOzD,EAAgB,6CAAY,6CACpB,MAARyD,EACAzD,EAAgB,6CAAY,6CAE5BR,EAAS,KAtBFkE,GAsB6BlE,EArB3CmE,EAQS,CACThF,GAAIqB,EAAgB,6HAA2B,6HAC/CnB,GAAImB,EAAgB,6HAA2B,6HAC/CjB,GAAIiB,EAAgB,6HAA2B,6HAC/Cf,GAAI,6EACJE,GAAI,iHACJE,GAAI,8EAOgCoE,GArBvB7G,MAAM,KAChB8G,EAAM,IAAO,GAAKA,EAAM,KAAQ,GACjCC,EAAM,GACM,GAAZD,EAAM,IAAWA,EAAM,IAAM,IAAMA,EAAM,IAAM,IAAmB,IAAbA,EAAM,KAC3DC,EAAM,GACNA,EAAM,IAnFhBnH,EAAOE,aAAa,KAAM,CACtBC,OAAQ,+EAA+EC,MACnF,KAEJC,YAAa,kDAAkDD,MAAM,KACrEE,SAAU,2KAAqEF,MAC3E,KAEJG,cAAe,sDAA8BH,MAAM,KACnDI,YAAa,+CAAuBJ,MAAM,KAC1C2D,oBAAoB,EACpB9C,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,2BAEVC,SAAU,CACNC,QAAS,qBACTC,QAAS,kBACTC,SAAU,mDACVC,QAAS,qBACTC,SAAU,iDACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,WACRC,KAAM,qBACNC,EAAG,+BACHC,GAAI,iBACJC,EAAG,uBACHC,GAAI,sBACJC,EAAG,WACHC,GAAI,UACJC,EAAG,aACHC,GAAI,YACJC,EAAG,SACHC,GAAI,QACJC,EAAG,SACHC,GAAI,SAERpC,cAAe,oDACfC,KAAM,SAAUC,GACZ,MAAO,8BAAmBC,KAAKD,IAEnCE,SAAU,SAAUmD,EAAMC,EAAQjD,GAC9B,OAAIgD,EAAO,EACA,YACAA,EAAO,GACP,kBACAA,EAAO,GACP,eAEA,cAGflB,uBAAwB,6DACxBC,QAAS,SAAUC,GACf,GAAe,IAAXA,EAEA,OAAOA,EAAS,kBAEpB,IAAIoE,EAAIpE,EAAS,GAGjB,OAAOA,GAAUsD,EAASc,IAAMd,EAFvBtD,EAAS,IAAOoE,IAEsBd,EAD7B,KAAVtD,EAAgB,IAAM,QAGlCC,KAAM,CACFC,IAAK,EACLC,IAAK,KAgCbnD,EAAOE,aAAa,KAAM,CACtBC,OAAQ,CACJkH,OAAQ,oiBAAuGjH,MAC3G,KAEJkH,WAAY,whBAAqGlH,MAC7G,MAGRC,YAAa,sRAA0DD,MACnE,KAEJE,SAAU,CACN+G,OAAQ,+SAA0DjH,MAC9D,KAEJkH,WAAY,+SAA0DlH,MAClE,KAEJmH,SAAU,8IAEdhH,cAAe,6FAAuBH,MAAM,KAC5CI,YAAa,6FAAuBJ,MAAM,KAC1Ca,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,sBACJC,IAAK,6BACLC,KAAM,oCAEVC,SAAU,CACNC,QAAS,6CACTC,QAAS,mDACTE,QAAS,6CACTD,SAAU,WACN,MAAO,6BAEXE,SAAU,WACN,OAAQ5B,KAAKuH,OACT,KAAK,EACL,KAAK,EACL,KAAK,EACL,KAAK,EACD,MAAO,uEACX,KAAK,EACL,KAAK,EACL,KAAK,EACD,MAAO,mEAGnB1F,SAAU,KAEdC,aAAc,CACVC,OAAQ,8BACRC,KAAM,8BACNC,EAAG,wFACHE,EAAG4E,EACH3E,GAAI2E,EACJ1E,EAAG0E,EACHzE,GAAIyE,EACJxE,EAAG,iCACHC,GAAIuE,EACJtE,EAAG,iCACHC,GAAIqE,EACJpE,EAAG,qBACHC,GAAImE,GAERvG,cAAe,wHACfC,KAAM,SAAUC,GACZ,MAAO,8DAAiBC,KAAKD,IAEjCE,SAAU,SAAUmD,EAAMC,EAAQjD,GAC9B,OAAIgD,EAAO,EACA,2BACAA,EAAO,GACP,uCACAA,EAAO,GACP,qBAEA,wCAGflB,uBAAwB,uCACxBC,QAAS,SAAUC,EAAQyE,GACvB,OAAQA,GACJ,IAAK,IACL,IAAK,IACL,IAAK,MACL,IAAK,IACL,IAAK,IACD,OAAQzE,EAAS,IAAO,GAAKA,EAAS,IAAO,GACzCA,EAAS,KAAQ,IACjBA,EAAS,KAAQ,GAEfA,EAAS,UADTA,EAAS,UAEnB,IAAK,IACD,OAAOA,EAAS,gBACpB,QACI,OAAOA,IAGnBC,KAAM,CACFC,IAAK,EACLC,IAAK,KAMbnD,EAAOE,aAAa,KAAM,CACtBC,OAAQ,kbAAoFC,MACxF,KAEJC,YAAa,sOAAkDD,MAAM,KACrEE,SAAU,ySAAyDF,MAC/D,KAEJG,cAAe,uIAA8BH,MAAM,KACnDI,YAAa,6FAAuBJ,MAAM,KAC1Ca,eAAgB,CACZC,GAAI,OACJC,IAAK,UACLC,EAAG,YACHC,GAAI,cACJC,IAAK,mBACLC,KAAM,0BAEVC,SAAU,CACNC,QAAS,uCACTC,QAAS,uCACTC,SAAU,mBACVC,QAAS,6CACTC,SAAU,WACN,OAAQ5B,KAAKuH,OACT,KAAK,EACL,KAAK,EACL,KAAK,EACD,MAAO,sEACX,KAAK,EACL,KAAK,EACL,KAAK,EACL,KAAK,EACD,MAAO,kEAGnB1F,SAAU,KAEdC,aAAc,CACVC,OAAQ,8BACRC,KAAM,oCACNC,EAAG,wFACHC,GAAI,gDACJC,EAAG,uCACHC,GAAI,0CACJC,EAAG,qBACHC,GAAI,8BACJC,EAAG,qBACHC,GAAI,8BACJC,EAAG,iCACHC,GAAI,0CACJC,EAAG,uCACHC,GAAI,2CAERC,uBAAwB,0FACxBC,QAAS,SAAUC,GACf,IAAI0E,EAAY1E,EAAS,GACrB2E,EAAc3E,EAAS,IAC3B,OAAe,IAAXA,EACOA,EAAS,gBACO,GAAhB2E,EACA3E,EAAS,gBACK,GAAd2E,GAAoBA,EAAc,GAClC3E,EAAS,gBACK,GAAd0E,EACA1E,EAAS,gBACK,GAAd0E,EACA1E,EAAS,gBACK,GAAd0E,GAAiC,GAAdA,EACnB1E,EAAS,gBAETA,EAAS,iBAGxBC,KAAM,CACFC,IAAK,EACLC,IAAK,KAMbnD,EAAOE,aAAa,KAAM,CACtBC,OAAQ,uKAA8IC,MAClJ,KAEJC,YAAa,gEAAiDD,MAAM,KACpEE,SAAU,yDAA+CF,MAAM,KAC/DG,cAAe,mCAA8BH,MAAM,KACnDI,YAAa,uBAAuBJ,MAAM,KAC1Ca,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,2BACJC,IAAK,kDACLC,KAAM,wDAEVC,SAAU,CACNC,QAAS,yBACTC,QAAS,2BACTC,SAAU,+BACVC,QAAS,2BACTC,SAAU,6CACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,oBACRC,KAAM,uBACNC,EAAG,kBACHC,GAAI,aACJC,EAAG,eACHC,GAAI,YACJC,EAAG,uBACHC,GAAI,oBACJC,EAAG,aACHC,GAAI,UACJC,EAAG,aACHC,GAAI,UACJC,EAAG,YACHC,GAAI,UAERI,KAAM,CACFC,IAAK,EACLC,IAAK,KAMb,IAAIyE,EAAc,CACVrD,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,UAET6C,EAAc,CACVC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,KAGbvI,EAAOE,aAAa,KAAM,CACtBC,OAAQ,sdAA0FC,MAC9F,KAEJC,YAAa,4UAAmED,MAC5E,KAEJE,SAAU,2TAA4DF,MAClE,KAEJG,cAAe,6LAAuCH,MAAM,KAC5DI,YAAa,+JAAkCJ,MAAM,KACrDa,eAAgB,CACZC,GAAI,4BACJC,IAAK,+BACLC,EAAG,aACHC,GAAI,cACJC,IAAK,yCACLC,KAAM,gDAEVC,SAAU,CACNC,QAAS,oBACTC,QAAS,wDACTC,SAAU,WACVC,QAAS,sCACTC,SAAU,0BACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,wBACRC,KAAM,wBACNC,EAAG,sEACHC,GAAI,gDACJC,EAAG,8CACHC,GAAI,oCACJC,EAAG,8CACHC,GAAI,oCACJC,EAAG,kCACHC,GAAI,wBACJC,EAAG,kCACHC,GAAI,wBACJC,EAAG,kCACHC,GAAI,yBAERqC,SAAU,SAAUzB,GAChB,OAAOA,EAAOK,QAAQ,kEAAiB,SAAUqB,GAC7C,OAAO0C,EAAY1C,MAG3BjB,WAAY,SAAUT,GAClB,OAAOA,EAAOK,QAAQ,MAAO,SAAUqB,GACnC,OAAOyC,EAAYzC,MAG3B1E,cAAe,+HACf+H,aAAc,SAAUxE,EAAMnD,GAI1B,OAHa,KAATmD,IACAA,EAAO,GAGO,uBAAbnD,GAA8B,GAARmD,GACT,mCAAbnD,GAAwBmD,EAAO,GACnB,mCAAbnD,EAEOmD,EAAO,GAEPA,GAGfnD,SAAU,SAAUmD,EAAMC,EAAQjD,GAC9B,OAAIgD,EAAO,EACA,qBACAA,EAAO,GACP,2BACAA,EAAO,GACP,iCACAA,EAAO,GACP,iCAEA,sBAGff,KAAM,CACFC,IAAK,EACLC,IAAK,KAMb,IAAIsF,EAAc,CACVlE,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,UAET0D,EAAc,CACVC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,KAiGb,SAASC,EAAyBrG,EAAQQ,EAAeyD,GACrD,IAyBcqC,EApBd,OAAOtG,EAAS,KAoBFsG,EAzBD,CACTjH,GAAI,WACJM,GAAI,MACJF,GAAI,UAE8BwE,GAqBvB,IArB6BjE,EAwBrCsG,EAEX,SAAsBA,GAClB,IAAIC,EAAgB,CAChBnH,EAAG,IACHoH,EAAG,IACHhH,EAAG,KAEP,YAAsCiH,IAAlCF,EAAcD,EAAKI,OAAO,IAGvBH,EAAcD,EAAKI,OAAO,IAAMJ,EAAKK,UAAU,GAF3CL,EAXAM,CAAaN,IA1H5BtJ,EAAOE,aAAa,KAAM,CACtBC,OAAQ,wzBAAqJC,MACzJ,KAEJC,YAAa,qPAAiED,MAC1E,KAEJyJ,iBAAkB,+BAClBC,kBAAkB,EAClBxJ,SAAU,mbAAgFF,MACtF,KAEJG,cAAe,2QAAoDH,MAC/D,KAEJI,YAAa,iIAA6BJ,MAAM,KAChDa,eAAgB,CACZC,GAAI,SACJC,IAAK,YACLC,EAAG,aACHC,GAAI,cACJC,IAAK,sBACLC,KAAM,6BAEVC,SAAU,CACNC,QAAS,4CACTC,QAAS,4CACTC,SAAU,mGACVC,QAAS,gCACTC,SAAU,kGACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,kBACRC,KAAM,oCACNC,EAAG,iCACHC,GAAI,0CACJC,EAAG,+DACHC,GAAI,oCACJC,EAAG,qEACHC,GAAI,0CACJC,EAAG,mDACHC,GAAI,8BACJC,EAAG,yDACHC,GAAI,8BACJC,EAAG,6CACHC,GAAI,mBAERqC,SAAU,SAAUzB,GAChB,OAAOA,EAAOK,QAAQ,kEAAiB,SAAUqB,GAC7C,OAAOuD,EAAYvD,MAG3BjB,WAAY,SAAUT,GAClB,OAAOA,EAAOK,QAAQ,MAAO,SAAUqB,GACnC,OAAOsD,EAAYtD,MAG3B1E,cAAe,6MACf+H,aAAc,SAAUxE,EAAMnD,GAI1B,OAHa,KAATmD,IACAA,EAAO,GAGO,yCAAbnD,GAAiC,GAARmD,GACZ,+CAAbnD,GAA0BmD,EAAO,GACrB,+CAAbnD,EAEOmD,EAAO,GAEPA,GAGfnD,SAAU,SAAUmD,EAAMC,EAAQjD,GAC9B,OAAIgD,EAAO,EACA,uCACAA,EAAO,GACP,6CACAA,EAAO,GACP,6CACAA,EAAO,GACP,6CAEA,wCAGff,KAAM,CACFC,IAAK,EACLC,IAAK,KAkDb,IAAI4G,EAAc,CACV,QACA,mBACA,QACA,QACA,QACA,cACA,QACA,QACA,QACA,QACA,OACA,SAEJC,EAAc,uJAqBdC,EAAmB,CACf,OACA,OACA,eACA,QACA,OACA,OACA,QA4ER,SAASC,EAAUlH,EAAQQ,EAAeyD,GACtC,IAAIkD,EAASnH,EAAS,IACtB,OAAQiE,GACJ,IAAK,KAQD,OANIkD,GADW,IAAXnH,EACU,UACQ,IAAXA,GAA2B,IAAXA,GAA2B,IAAXA,EAC7B,UAEA,UAGlB,IAAK,IACD,OAAOQ,EAAgB,eAAiB,eAC5C,IAAK,KAQD,OANI2G,GADW,IAAXnH,IAEkB,IAAXA,GAA2B,IAAXA,GAA2B,IAAXA,GAC7B,SAFA,SAOlB,IAAK,IACD,OAAOQ,EAAgB,YAAc,cACzC,IAAK,KAQD,OANI2G,GADW,IAAXnH,EACU,MACQ,IAAXA,GAA2B,IAAXA,GAA2B,IAAXA,EAC7B,OAEA,OAGlB,IAAK,KAMD,OAJImH,GADW,IAAXnH,EACU,MAEA,OAGlB,IAAK,KAQD,OANImH,GADW,IAAXnH,EACU,SACQ,IAAXA,GAA2B,IAAXA,GAA2B,IAAXA,EAC7B,UAEA,UAGlB,IAAK,KAQD,OANImH,GADW,IAAXnH,IAEkB,IAAXA,GAA2B,IAAXA,GAA2B,IAAXA,GAC7B,SAFA,UA7H1BhD,EAAOE,aAAa,KAAM,CACtBC,OAAQ,qFAAgFC,MACpF,KAEJC,YAAa,wDAAmDD,MAAM,KACtEE,SAAU,kDAA6CF,MAAM,KAC7DG,cAAe,8BAA8BH,MAAM,KACnDI,YAAa,wBAAwBJ,MAAM,KAC3CgK,cAAeH,EACfI,kBArCoB,CAChB,QACA,QACA,WACA,sBACA,SACA,WACA,YA+BJC,mBA7BqB,CACjB,QACA,QACA,QACA,QACA,QACA,QACA,SAuBJL,iBAAkBA,EAElBD,YAAaA,EACbH,iBAAkBG,EAClBO,kBA7CoB,6FA8CpBC,uBA7CyB,gEA8CzBT,YAAaA,EACbU,gBAAiBV,EACjBW,iBAAkBX,EAElB9I,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,sBACJC,IAAK,4BACLC,KAAM,mCAEVC,SAAU,CACNC,QAAS,gBACTC,QAAS,0BACTC,SAAU,eACVC,QAAS,qBACTC,SAAU,qBACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,YACRC,KAAM,cACNC,EAAG,2BACHC,GAAI,YACJC,EAAG,cACHC,GAAIgH,EACJ/G,EAAG,SACHC,GAAI,SACJC,EAAG,YACHC,GAAI4G,EACJ3G,EAAG,SACHC,GAAI0G,EACJzG,EAAG,WACHC,GApIR,SAAiCG,GAC7B,OAWJ,SAAS2H,EAAW3H,GAChB,GAAa,EAATA,EACA,OAAO2H,EAAW3H,EAAS,IAE/B,OAAOA,EAfC2H,CAAW3H,IACf,KAAK,EACL,KAAK,EACL,KAAK,EACL,KAAK,EACL,KAAK,EACD,OAAOA,EAAS,SACpB,QACI,OAAOA,EAAS,YA6HxBF,uBAAwB,qBACxBC,QAAS,SAAUC,GAEf,OAAOA,GADiB,IAAXA,EAAe,QAAO,QAGvCC,KAAM,CACFC,IAAK,EACLC,IAAK,GAET1C,cAAe,YACfC,KAAM,SAAUkK,GACZ,MAAiB,SAAVA,GAEX/J,SAAU,SAAUmD,EAAMC,EAAQjD,GAC9B,OAAOgD,EAAO,GAAK,OAAS,UAoEpChE,EAAOE,aAAa,KAAM,CACtBC,OAAQ,qFAAqFC,MACzF,KAEJC,YAAa,8DAA8DD,MACvE,KAEJ0J,kBAAkB,EAClBxJ,SAAU,iEAA4DF,MAClE,KAEJG,cAAe,0CAAqCH,MAAM,KAC1DI,YAAa,4BAAuBJ,MAAM,KAC1C2D,oBAAoB,EACpB9C,eAAgB,CACZC,GAAI,OACJC,IAAK,UACLC,EAAG,aACHC,GAAI,eACJC,IAAK,oBACLC,KAAM,2BAEVC,SAAU,CACNC,QAAS,eACTC,QAAS,eACTC,SAAU,WACN,OAAQ1B,KAAKuH,OACT,KAAK,EACD,MAAO,wBACX,KAAK,EACD,MAAO,uBACX,KAAK,EACD,MAAO,sBACX,KAAK,EACL,KAAK,EACL,KAAK,EACL,KAAK,EACD,MAAO,oBAGnB5F,QAAS,oBACTC,SAAU,WACN,OAAQ5B,KAAKuH,OACT,KAAK,EACL,KAAK,EACD,MAAO,4BACX,KAAK,EACD,MAAO,gCACX,KAAK,EACL,KAAK,EACL,KAAK,EACL,KAAK,EACD,MAAO,8BAGnB1F,SAAU,KAEdC,aAAc,CACVC,OAAQ,QACRC,KAAM,WACNC,EAAG,cACHC,GAAI+H,EACJ9H,EAAG8H,EACH7H,GAAI6H,EACJ5H,EAAG4H,EACH3H,GAAI2H,EACJ1H,EAAG,MACHC,GAAIyH,EACJxH,EAAG,SACHC,GAAIuH,EACJtH,EAAG,SACHC,GAAIqH,GAERpH,uBAAwB,YACxBC,QAAS,MACTE,KAAM,CACFC,IAAK,EACLC,IAAK,KAMbnD,EAAOE,aAAa,KAAM,CACtBC,OAAQ,CACJmH,WAAY,uFAAoFlH,MAC5F,KAEJiH,OAAQ,wHAAqHjH,MACzH,KAEJmH,SAAU,mBAEdlH,YAAa,iEAA8DD,MACvE,KAEJ0J,kBAAkB,EAClBxJ,SAAU,8DAA8DF,MACpE,KAEJG,cAAe,8BAA8BH,MAAM,KACnDI,YAAa,uBAAuBJ,MAAM,KAC1C2D,oBAAoB,EACpB9C,eAAgB,CACZC,GAAI,OACJC,IAAK,UACLC,EAAG,aACHC,GAAI,mBACJwJ,GAAI,aACJvJ,IAAK,gCACLwJ,IAAK,mBACLvJ,KAAM,qCACNwJ,KAAM,wBAEVvJ,SAAU,CACNC,QAAS,WACL,MAAO,YAA+B,IAAjBxB,KAAKa,QAAgB,MAAQ,MAAQ,QAE9DY,QAAS,WACL,MAAO,eAA+B,IAAjBzB,KAAKa,QAAgB,MAAQ,MAAQ,QAE9Da,SAAU,WACN,MAAO,YAA+B,IAAjB1B,KAAKa,QAAgB,MAAQ,MAAQ,QAE9Dc,QAAS,WACL,MAAO,YAA+B,IAAjB3B,KAAKa,QAAgB,MAAQ,MAAQ,QAE9De,SAAU,WACN,MACI,wBACkB,IAAjB5B,KAAKa,QAAgB,MAAQ,MAC9B,QAGRgB,SAAU,KAEdC,aAAc,CACVC,OAAQ,eACRC,KAAM,QACNC,EAAG,aACHC,GAAI,YACJC,EAAG,WACHC,GAAI,YACJC,EAAG,WACHC,GAAI,WACJC,EAAG,SACHC,GAAI,UACJC,EAAG,SACHC,GAAI,WACJC,EAAG,SACHC,GAAI,WAERC,uBAAwB,wBACxBC,QAAS,SAAUC,EAAQyE,GAcvB,OAAOzE,GAHQ,MAAXyE,GAA6B,MAAXA,EATP,IAAXzE,EACM,IACW,IAAXA,EACA,IACW,IAAXA,EACA,IACW,IAAXA,EACA,IACA,OAEG,MAIjBC,KAAM,CACFC,IAAK,EACLC,IAAK,KAMb,IAAI6H,EAAW,8HAAoF5K,MAC3F,KAEJC,EAAc,yFAAkDD,MAAM,KACtE6K,EAAgB,CACZ,QACA,WACA,aACA,QACA,aACA,wCACA,2CACA,QACA,gBACA,gBACA,QACA,SAIJC,EAAgB,mPAEpB,SAASC,EAAS9H,GACd,OAAW,EAAJA,GAASA,EAAI,GAAoB,MAAZA,EAAI,IAEpC,SAAS+H,EAAYpI,EAAQQ,EAAeyD,EAAKvD,GAC7C,IAAIyG,EAASnH,EAAS,IACtB,OAAQiE,GACJ,IAAK,IACD,OAAOzD,GAAiBE,EAAW,gBAAe,mBACtD,IAAK,KACD,OAAIF,GAAiBE,EACVyG,GAAUgB,EAASnI,GAAU,UAAY,UAEzCmH,EAAS,YAExB,IAAK,IACD,OAAO3G,EAAgB,SAAWE,EAAW,SAAW,UAC5D,IAAK,KACD,OAAIF,GAAiBE,EACVyG,GAAUgB,EAASnI,GAAU,SAAW,SAExCmH,EAAS,WAExB,IAAK,IACD,OAAO3G,EAAgB,SAAWE,EAAW,SAAW,UAC5D,IAAK,KACD,OAAIF,GAAiBE,EACVyG,GAAUgB,EAASnI,GAAU,SAAW,SAExCmH,EAAS,WAExB,IAAK,IACD,OAAO3G,GAAiBE,EAAW,MAAQ,OAC/C,IAAK,KACD,OAAIF,GAAiBE,EACVyG,GAAUgB,EAASnI,GAAU,MAAQ,UAErCmH,EAAS,MAExB,IAAK,IACD,OAAO3G,GAAiBE,EAAW,gBAAU,kBACjD,IAAK,KACD,OAAIF,GAAiBE,EACVyG,GAAUgB,EAASnI,GAAU,iBAAW,uBAExCmH,EAAS,iBAExB,IAAK,IACD,OAAO3G,GAAiBE,EAAW,MAAQ,QAC/C,IAAK,KACD,OAAIF,GAAiBE,EACVyG,GAAUgB,EAASnI,GAAU,OAAS,OAEtCmH,EAAS,QAwShC,SAASkB,EAAoBrI,EAAQQ,EAAeyD,EAAKvD,GACrD,IAAI2D,EAAS,CACTjF,EAAG,CAAC,cAAe,gBACnBE,EAAG,CAAC,cAAe,gBACnBE,EAAG,CAAC,UAAW,aACfC,GAAI,CAACO,EAAS,QAASA,EAAS,UAChCsI,EAAG,CAAC,aAAc,eAClB5I,EAAG,CAAC,YAAa,eACjBC,GAAI,CAACK,EAAS,UAAWA,EAAS,YAClCJ,EAAG,CAAC,WAAY,cAChBC,GAAI,CAACG,EAAS,SAAUA,EAAS,YAErC,OAAOQ,EAAgB6D,EAAOJ,GAAK,GAAKI,EAAOJ,GAAK,GA6DxD,SAASsE,EAAsBvI,EAAQQ,EAAeyD,EAAKvD,GACvD,IAAI2D,EAAS,CACTjF,EAAG,CAAC,cAAe,gBACnBE,EAAG,CAAC,cAAe,gBACnBE,EAAG,CAAC,UAAW,aACfC,GAAI,CAACO,EAAS,QAASA,EAAS,UAChCsI,EAAG,CAAC,aAAc,eAClB5I,EAAG,CAAC,YAAa,eACjBC,GAAI,CAACK,EAAS,UAAWA,EAAS,YAClCJ,EAAG,CAAC,WAAY,cAChBC,GAAI,CAACG,EAAS,SAAUA,EAAS,YAErC,OAAOQ,EAAgB6D,EAAOJ,GAAK,GAAKI,EAAOJ,GAAK,GA6DxD,SAASuE,EAAsBxI,EAAQQ,EAAeyD,EAAKvD,GACvD,IAAI2D,EAAS,CACTjF,EAAG,CAAC,cAAe,gBACnBE,EAAG,CAAC,cAAe,gBACnBE,EAAG,CAAC,UAAW,aACfC,GAAI,CAACO,EAAS,QAASA,EAAS,UAChCsI,EAAG,CAAC,aAAc,eAClB5I,EAAG,CAAC,YAAa,eACjBC,GAAI,CAACK,EAAS,UAAWA,EAAS,YAClCJ,EAAG,CAAC,WAAY,cAChBC,GAAI,CAACG,EAAS,SAAUA,EAAS,YAErC,OAAOQ,EAAgB6D,EAAOJ,GAAK,GAAKI,EAAOJ,GAAK,GAjcxDjH,EAAOE,aAAa,KAAM,CACtBC,OAAQ6K,EACR3K,YAAaA,EACb2J,YAAakB,EACbrB,iBAAkBqB,EAGlBX,kBAAmB,gPACnBC,uBAAwB,6FACxBT,YAAakB,EACbR,gBAAiBQ,EACjBP,iBAAkBO,EAClB3K,SAAU,mFAAmDF,MAAM,KACnEG,cAAe,kCAAuBH,MAAM,KAC5CI,YAAa,kCAAuBJ,MAAM,KAC1Ca,eAAgB,CACZC,GAAI,OACJC,IAAK,UACLC,EAAG,aACHC,GAAI,eACJC,IAAK,oBACLC,KAAM,yBACNkK,EAAG,cAEPjK,SAAU,CACNC,QAAS,cACTC,QAAS,kBACTC,SAAU,WACN,OAAQ1B,KAAKuH,OACT,KAAK,EACD,MAAO,uBACX,KAAK,EACL,KAAK,EACD,MAAO,kBACX,KAAK,EACD,MAAO,wBACX,KAAK,EACD,MAAO,yBACX,KAAK,EACD,MAAO,oBACX,KAAK,EACD,MAAO,oBAGnB5F,QAAS,oBACTC,SAAU,WACN,OAAQ5B,KAAKuH,OACT,KAAK,EACD,MAAO,6BACX,KAAK,EACL,KAAK,EACD,MAAO,0BACX,KAAK,EACD,MAAO,6BACX,KAAK,EACL,KAAK,EACD,MAAO,0BACX,KAAK,EACD,MAAO,0BAGnB1F,SAAU,KAEdC,aAAc,CACVC,OAAQ,QACRC,KAAM,eACNC,EAAGkJ,EACHjJ,GAAIiJ,EACJhJ,EAAGgJ,EACH/I,GAAI+I,EACJ9I,EAAG8I,EACH7I,GAAI6I,EACJ5I,EAAG4I,EACH3I,GAAI2I,EACJ1I,EAAG0I,EACHzI,GAAIyI,EACJxI,EAAGwI,EACHvI,GAAIuI,GAERtI,uBAAwB,YACxBC,QAAS,MACTE,KAAM,CACFC,IAAK,EACLC,IAAK,KAMbnD,EAAOE,aAAa,KAAM,CACtBC,OAAQ,0TAAgEC,MACpE,KAEJC,YAAa,sOAAkDD,MAAM,KACrEE,SAAU,2WAAoEF,MAC1E,KAEJG,cAAe,iIAA6BH,MAAM,KAClDI,YAAa,6FAAuBJ,MAAM,KAC1Ca,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,iHACJC,IAAK,wHACLC,KAAM,+HAEVC,SAAU,CACNC,QAAS,6EACTC,QAAS,6EACTE,QAAS,6EACTD,SAAU,wFACVE,SAAU,wFACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,SAAU0J,GAMd,OAAOA,GALK,mCAAUC,KAAKD,GACrB,qBACA,uBAAQC,KAAKD,GACb,qBACA,uBAGVzJ,KAAM,0CACNC,EAAG,6EACHC,GAAI,gDACJC,EAAG,oDACHC,GAAI,oCACJC,EAAG,oDACHC,GAAI,oCACJC,EAAG,wCACHC,GAAI,wBACJC,EAAG,8CACHC,GAAI,8BACJC,EAAG,wCACHC,GAAI,yBAERC,uBAAwB,6BACxBC,QAAS,wBACTE,KAAM,CACFC,IAAK,EACLC,IAAK,KAMbnD,EAAOE,aAAa,KAAM,CACtBC,OAAQ,yFAAyFC,MAC7F,KAEJC,YAAa,qDAAqDD,MAC9D,KAEJE,SAAU,+EAA+EF,MACrF,KAEJG,cAAe,+BAA+BH,MAAM,KACpDI,YAAa,uBAAuBJ,MAAM,KAC1C2D,oBAAoB,EAEpB9C,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,2BAEVC,SAAU,CACNC,QAAS,iBACTC,QAAS,gBACTC,SAAU,eACVC,QAAS,eACTC,SAAU,wBACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,UACRC,KAAM,cACNC,EAAG,mBACHC,GAAI,YACJC,EAAG,QACHC,GAAI,WACJC,EAAG,MACHC,GAAI,SACJC,EAAG,UACHC,GAAI,aACJC,EAAG,MACHC,GAAI,SACJC,EAAG,WACHC,GAAI,cAERC,uBAAwB,mCAExBC,QAAS,SAAUC,GACf,IACI0I,EAAS,GAiCb,OATQ,GAzBA1I,EA2BA0I,EADM,KA1BN1I,GA0BkB,KA1BlBA,GA0B8B,KA1B9BA,GA0B0C,KA1B1CA,GA0BsD,MA1BtDA,EA2BS,MAEA,MAEF,EA/BPA,IAgCJ0I,EA9BS,CACL,GACA,KACA,KACA,MACA,MACA,KACA,KACA,KACA,MACA,MACA,MACA,KACA,MACA,KACA,KACA,MACA,KACA,KACA,MACA,KACA,OAvBA1I,IAkCDA,EAAS0I,GAEpBzI,KAAM,CACFC,IAAK,EACLC,IAAK,KAMbnD,EAAOE,aAAa,KAAM,CACtBC,OAAQ,sFAAsFC,MAC1F,KAEJC,YAAa,kDAAkDD,MAAM,KACrEE,SAAU,2DAAqDF,MAAM,KACrEG,cAAe,oCAA8BH,MAAM,KACnDI,YAAa,6BAAuBJ,MAAM,KAC1Ca,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,eACJC,IAAK,qBACLC,KAAM,sCAEVC,SAAU,CACNC,QAAS,iBACTC,QAAS,oBACTC,SAAU,sBACVC,QAAS,oBACTC,SAAU,qBACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,QACRC,KAAM,WACNC,EAAG,iBACHC,GAAI,cACJC,EAAG,WACHC,GAAI,cACJC,EAAG,UACHC,GAAI,WACJC,EAAG,SACHC,GAAI,UACJC,EAAG,cACHC,GAAI,gBACJC,EAAG,WACHC,GAAI,YAERC,uBAAwB,YACxBC,QAAS,MACTE,KAAM,CACFC,IAAK,EACLC,IAAK,KAqBbnD,EAAOE,aAAa,QAAS,CACzBC,OAAQ,2FAAqFC,MACzF,KAEJC,YAAa,mEAA6DD,MACtE,KAEJ0J,kBAAkB,EAClBxJ,SAAU,8DAA8DF,MACpE,KAEJG,cAAe,8BAA8BH,MAAM,KACnDI,YAAa,uBAAuBJ,MAAM,KAC1C2D,oBAAoB,EACpB9C,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,eACJC,IAAK,qBACLC,KAAM,4BAEVC,SAAU,CACNC,QAAS,sBACTK,SAAU,IACVJ,QAAS,uBACTC,SAAU,qBACVC,QAAS,wBACTC,SAAU,gCAEdE,aAAc,CACVC,OAAQ,QACRC,KAAM,SACNC,EAAG,oBACHC,GAAI,cACJC,EAAGiJ,EACHhJ,GAAI,aACJC,EAAG+I,EACH9I,GAAI,aACJC,EAAG6I,EACH5I,GAAI4I,EACJC,EAAGD,EACHO,GAAI,YACJlJ,EAAG2I,EACH1I,GAAI0I,EACJzI,EAAGyI,EACHxI,GAAIwI,GAERvI,uBAAwB,YACxBC,QAAS,MACTE,KAAM,CACFC,IAAK,EACLC,IAAK,KAqBbnD,EAAOE,aAAa,QAAS,CACzBC,OAAQ,wFAAqFC,MACzF,KAEJC,YAAa,gEAA6DD,MACtE,KAEJ0J,kBAAkB,EAClBxJ,SAAU,8DAA8DF,MACpE,KAEJG,cAAe,uBAAuBH,MAAM,KAC5CI,YAAa,uBAAuBJ,MAAM,KAC1C2D,oBAAoB,EACpB9C,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,eACJC,IAAK,qBACLC,KAAM,4BAEVC,SAAU,CACNC,QAAS,sBACTK,SAAU,IACVJ,QAAS,uBACTC,SAAU,qBACVC,QAAS,wBACTC,SAAU,gCAEdE,aAAc,CACVC,OAAQ,QACRC,KAAM,SACNC,EAAG,oBACHC,GAAI,cACJC,EAAGmJ,EACHlJ,GAAI,aACJC,EAAGiJ,EACHhJ,GAAI,aACJC,EAAG+I,EACH9I,GAAI8I,EACJD,EAAGC,EACHK,GAAI,YACJlJ,EAAG6I,EACH5I,GAAI4I,EACJ3I,EAAG2I,EACH1I,GAAI0I,GAERzI,uBAAwB,YACxBC,QAAS,MACTE,KAAM,CACFC,IAAK,EACLC,IAAK,KAqBbnD,EAAOE,aAAa,KAAM,CACtBC,OAAQ,wFAAqFC,MACzF,KAEJC,YAAa,gEAA6DD,MACtE,KAEJ0J,kBAAkB,EAClBxJ,SAAU,8DAA8DF,MACpE,KAEJG,cAAe,8BAA8BH,MAAM,KACnDI,YAAa,uBAAuBJ,MAAM,KAC1C2D,oBAAoB,EACpB9C,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,eACJC,IAAK,qBACLC,KAAM,4BAEVC,SAAU,CACNC,QAAS,sBACTK,SAAU,IACVJ,QAAS,uBACTC,SAAU,qBACVC,QAAS,wBACTC,SAAU,gCAEdE,aAAc,CACVC,OAAQ,QACRC,KAAM,SACNC,EAAG,oBACHC,GAAI,cACJC,EAAGoJ,EACHnJ,GAAI,aACJC,EAAGkJ,EACHjJ,GAAI,aACJC,EAAGgJ,EACH/I,GAAI+I,EACJF,EAAGE,EACHI,GAAI,YACJlJ,EAAG8I,EACH7I,GAAI6I,EACJ5I,EAAG4I,EACH3I,GAAI2I,GAER1I,uBAAwB,YACxBC,QAAS,MACTE,KAAM,CACFC,IAAK,EACLC,IAAK,KAMb,IAAI0I,EAAW,CACP,mDACA,+DACA,uCACA,mDACA,eACA,2BACA,uCACA,mDACA,2EACA,+DACA,+DACA,gEAEJvL,EAAW,CACP,mDACA,2BACA,mDACA,2BACA,+DACA,uCACA,oDAGRN,EAAOE,aAAa,KAAM,CACtBC,OAAQ0L,EACRxL,YAAawL,EACbvL,SAAUA,EACVC,cAAeD,EACfE,YAAa,iLAAqCJ,MAAM,KACxDa,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,WACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,0BAEVd,cAAe,4BACfC,KAAM,SAAUC,GACZ,MAAO,iBAASA,GAEpBE,SAAU,SAAUmD,EAAMC,EAAQjD,GAC9B,OAAIgD,EAAO,GACA,eAEA,gBAGfxC,SAAU,CACNC,QAAS,4CACTC,QAAS,4CACTC,SAAU,UACVC,QAAS,4CACTC,SAAU,6DACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,sDACRC,KAAM,0CACNC,EAAG,uFACHC,GAAI,sDACJC,EAAG,mDACHC,GAAI,0CACJC,EAAG,+DACHC,GAAI,sDACJC,EAAG,mDACHC,GAAI,0CACJC,EAAG,uCACHC,GAAI,8BACJC,EAAG,mDACHC,GAAI,2CAERqC,SAAU,SAAUzB,GAChB,OAAOA,EAAOK,QAAQ,UAAM,MAEhCI,WAAY,SAAUT,GAClB,OAAOA,EAAOK,QAAQ,KAAM,WAEhCb,KAAM,CACFC,IAAK,EACLC,IAAK,MAabnD,EAAOE,aAAa,KAAM,CACtB4L,mBAAoB,wnBAAqH1L,MACrI,KAEJ2L,iBAAkB,wnBAAqH3L,MACnI,KAEJD,OAAQ,SAAU6L,EAAgB3E,GAC9B,OAAK2E,EAGiB,iBAAX3E,GACP,IAAIzG,KAAKyG,EAAOsC,UAAU,EAAGtC,EAAO4E,QAAQ,UAGrChM,KAAKiM,kBAAkBF,EAAeG,SAEtClM,KAAKmM,oBAAoBJ,EAAeG,SARxClM,KAAKmM,qBAWpB/L,YAAa,kPAAoDD,MAAM,KACvEE,SAAU,ySAAyDF,MAC/D,KAEJG,cAAe,uIAA8BH,MAAM,KACnDI,YAAa,6FAAuBJ,MAAM,KAC1CS,SAAU,SAAUC,EAAOC,EAASC,GAChC,OAAY,GAARF,EACOE,EAAU,eAAO,eAEjBA,EAAU,eAAO,gBAGhCN,KAAM,SAAUC,GACZ,MAAyC,YAAjCA,EAAQ,IAAI0L,cAAc,IAEtC5L,cAAe,+BACfQ,eAAgB,CACZC,GAAI,SACJC,IAAK,YACLC,EAAG,aACHC,GAAI,cACJC,IAAK,qBACLC,KAAM,4BAEV+K,WAAY,CACR7K,QAAS,+CACTC,QAAS,yCACTC,SAAU,eACVC,QAAS,mCACTC,SAAU,WACN,OAAQ5B,KAAKuH,OACT,KAAK,EACD,MAAO,iGACX,QACI,MAAO,yGAGnB1F,SAAU,KAEdN,SAAU,SAAUyF,EAAKsF,GACrB,IApEY5L,EAoER+K,EAASzL,KAAKuM,YAAYvF,GAC1BnG,EAAQyL,GAAOA,EAAIzL,QAIvB,OAzEYH,EAsEG+K,GApEM,oBAAbe,UAA4B9L,aAAiB8L,UACX,sBAA1CC,OAAOC,UAAUC,SAASC,KAAKlM,MAoE3B+K,EAASA,EAAOoB,MAAMP,IAEnBb,EAAO5H,QAAQ,KAAMhD,EAAQ,IAAO,EAAI,qBAAQ,6BAE3DiB,aAAc,CACVC,OAAQ,kBACRC,KAAM,8BACNC,EAAG,oGACHC,GAAI,8EACJC,EAAG,oDACHC,GAAI,oCACJC,EAAG,wCACHC,GAAI,8BACJC,EAAG,8CACHC,GAAI,oCACJC,EAAG,0DACHC,GAAI,oCACJC,EAAG,gEACHC,GAAI,2CAERC,uBAAwB,gBACxBC,QAAS,WACTE,KAAM,CACFC,IAAK,EACLC,IAAK,KAMbnD,EAAOE,aAAa,QAAS,CACzBC,OAAQ,wFAAwFC,MAC5F,KAEJC,YAAa,kDAAkDD,MAAM,KACrEE,SAAU,2DAA2DF,MACjE,KAEJG,cAAe,8BAA8BH,MAAM,KACnDI,YAAa,uBAAuBJ,MAAM,KAC1Ca,eAAgB,CACZC,GAAI,SACJC,IAAK,YACLC,EAAG,aACHC,GAAI,cACJC,IAAK,qBACLC,KAAM,4BAEVC,SAAU,CACNC,QAAS,gBACTC,QAAS,mBACTC,SAAU,eACVC,QAAS,oBACTC,SAAU,sBACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,QACRC,KAAM,SACNC,EAAG,gBACHC,GAAI,aACJC,EAAG,WACHC,GAAI,aACJC,EAAG,UACHC,GAAI,WACJC,EAAG,QACHC,GAAI,UACJC,EAAG,UACHC,GAAI,YACJC,EAAG,SACHC,GAAI,YAERC,uBAAwB,uBACxBC,QAAS,SAAUC,GACf,IAAIwG,EAAIxG,EAAS,GAWjB,OAAOA,GAT6B,MAAxBA,EAAS,IAAO,IACd,KACM,GAANwG,EACA,KACM,GAANA,EACA,KACM,GAANA,EACA,KACA,OAGlBvG,KAAM,CACFC,IAAK,EACLC,IAAK,KAMbnD,EAAOE,aAAa,QAAS,CACzBC,OAAQ,wFAAwFC,MAC5F,KAEJC,YAAa,kDAAkDD,MAAM,KACrEE,SAAU,2DAA2DF,MACjE,KAEJG,cAAe,8BAA8BH,MAAM,KACnDI,YAAa,uBAAuBJ,MAAM,KAC1Ca,eAAgB,CACZC,GAAI,SACJC,IAAK,YACLC,EAAG,aACHC,GAAI,eACJC,IAAK,sBACLC,KAAM,6BAEVC,SAAU,CACNC,QAAS,gBACTC,QAAS,mBACTC,SAAU,eACVC,QAAS,oBACTC,SAAU,sBACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,QACRC,KAAM,SACNC,EAAG,gBACHC,GAAI,aACJC,EAAG,WACHC,GAAI,aACJC,EAAG,UACHC,GAAI,WACJC,EAAG,QACHC,GAAI,UACJC,EAAG,UACHC,GAAI,YACJC,EAAG,SACHC,GAAI,YAERC,uBAAwB,uBACxBC,QAAS,SAAUC,GACf,IAAIwG,EAAIxG,EAAS,GAWjB,OAAOA,GAT6B,MAAxBA,EAAS,IAAO,IACd,KACM,GAANwG,EACA,KACM,GAANA,EACA,KACM,GAANA,EACA,KACA,SAOtBxJ,EAAOE,aAAa,QAAS,CACzBC,OAAQ,wFAAwFC,MAC5F,KAEJC,YAAa,kDAAkDD,MAAM,KACrEE,SAAU,2DAA2DF,MACjE,KAEJG,cAAe,8BAA8BH,MAAM,KACnDI,YAAa,uBAAuBJ,MAAM,KAC1Ca,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,2BAEVC,SAAU,CACNC,QAAS,gBACTC,QAAS,mBACTC,SAAU,eACVC,QAAS,oBACTC,SAAU,sBACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,QACRC,KAAM,SACNC,EAAG,gBACHC,GAAI,aACJC,EAAG,WACHC,GAAI,aACJC,EAAG,UACHC,GAAI,WACJC,EAAG,QACHC,GAAI,UACJC,EAAG,UACHC,GAAI,YACJC,EAAG,SACHC,GAAI,YAERC,uBAAwB,uBACxBC,QAAS,SAAUC,GACf,IAAIwG,EAAIxG,EAAS,GAWjB,OAAOA,GAT6B,MAAxBA,EAAS,IAAO,IACd,KACM,GAANwG,EACA,KACM,GAANA,EACA,KACM,GAANA,EACA,KACA,OAGlBvG,KAAM,CACFC,IAAK,EACLC,IAAK,KAMbnD,EAAOE,aAAa,QAAS,CACzBC,OAAQ,wFAAwFC,MAC5F,KAEJC,YAAa,kDAAkDD,MAAM,KACrEE,SAAU,2DAA2DF,MACjE,KAEJG,cAAe,8BAA8BH,MAAM,KACnDI,YAAa,uBAAuBJ,MAAM,KAC1Ca,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,0BAEVC,SAAU,CACNC,QAAS,gBACTC,QAAS,mBACTC,SAAU,eACVC,QAAS,oBACTC,SAAU,sBACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,QACRC,KAAM,SACNC,EAAG,gBACHC,GAAI,aACJC,EAAG,WACHC,GAAI,aACJC,EAAG,UACHC,GAAI,WACJC,EAAG,QACHC,GAAI,UACJC,EAAG,UACHC,GAAI,YACJC,EAAG,SACHC,GAAI,YAERC,uBAAwB,uBACxBC,QAAS,SAAUC,GACf,IAAIwG,EAAIxG,EAAS,GAWjB,OAAOA,GAT6B,MAAxBA,EAAS,IAAO,IACd,KACM,GAANwG,EACA,KACM,GAANA,EACA,KACM,GAANA,EACA,KACA,OAGlBvG,KAAM,CACFC,IAAK,EACLC,IAAK,KAMbnD,EAAOE,aAAa,QAAS,CACzBC,OAAQ,wFAAwFC,MAC5F,KAEJC,YAAa,kDAAkDD,MAAM,KACrEE,SAAU,2DAA2DF,MACjE,KAEJG,cAAe,8BAA8BH,MAAM,KACnDI,YAAa,uBAAuBJ,MAAM,KAC1Ca,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,2BAEVC,SAAU,CACNC,QAAS,gBACTC,QAAS,mBACTC,SAAU,eACVC,QAAS,oBACTC,SAAU,sBACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,QACRC,KAAM,SACNC,EAAG,gBACHC,GAAI,aACJC,EAAG,WACHC,GAAI,aACJC,EAAG,UACHC,GAAI,WACJC,EAAG,QACHC,GAAI,UACJC,EAAG,UACHC,GAAI,YACJC,EAAG,SACHC,GAAI,YAERC,uBAAwB,uBACxBC,QAAS,SAAUC,GACf,IAAIwG,EAAIxG,EAAS,GAWjB,OAAOA,GAT6B,MAAxBA,EAAS,IAAO,IACd,KACM,GAANwG,EACA,KACM,GAANA,EACA,KACM,GAANA,EACA,KACA,SAOtBxJ,EAAOE,aAAa,QAAS,CACzBC,OAAQ,wFAAwFC,MAC5F,KAEJC,YAAa,kDAAkDD,MAAM,KACrEE,SAAU,2DAA2DF,MACjE,KAEJG,cAAe,8BAA8BH,MAAM,KACnDI,YAAa,uBAAuBJ,MAAM,KAC1Ca,eAAgB,CACZC,GAAI,SACJC,IAAK,YACLC,EAAG,aACHC,GAAI,cACJC,IAAK,qBACLC,KAAM,4BAEVC,SAAU,CACNC,QAAS,gBACTC,QAAS,mBACTC,SAAU,eACVC,QAAS,oBACTC,SAAU,sBACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,QACRC,KAAM,SACNC,EAAG,gBACHC,GAAI,aACJC,EAAG,WACHC,GAAI,aACJC,EAAG,UACHC,GAAI,WACJC,EAAG,QACHC,GAAI,UACJC,EAAG,UACHC,GAAI,YACJC,EAAG,SACHC,GAAI,YAERC,uBAAwB,uBACxBC,QAAS,SAAUC,GACf,IAAIwG,EAAIxG,EAAS,GAWjB,OAAOA,GAT6B,MAAxBA,EAAS,IAAO,IACd,KACM,GAANwG,EACA,KACM,GAANA,EACA,KACM,GAANA,EACA,KACA,OAGlBvG,KAAM,CACFC,IAAK,EACLC,IAAK,KAMbnD,EAAOE,aAAa,QAAS,CACzBC,OAAQ,wFAAwFC,MAC5F,KAEJC,YAAa,kDAAkDD,MAAM,KACrEE,SAAU,2DAA2DF,MACjE,KAEJG,cAAe,8BAA8BH,MAAM,KACnDI,YAAa,uBAAuBJ,MAAM,KAC1Ca,eAAgB,CACZC,GAAI,SACJC,IAAK,YACLC,EAAG,aACHC,GAAI,cACJC,IAAK,qBACLC,KAAM,4BAEVC,SAAU,CACNC,QAAS,gBACTC,QAAS,mBACTC,SAAU,eACVC,QAAS,oBACTC,SAAU,sBACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,QACRC,KAAM,SACNC,EAAG,gBACHC,GAAI,aACJC,EAAG,WACHC,GAAI,aACJC,EAAG,UACHC,GAAI,WACJC,EAAG,QACHC,GAAI,UACJC,EAAG,UACHC,GAAI,YACJC,EAAG,SACHC,GAAI,YAERC,uBAAwB,uBACxBC,QAAS,SAAUC,GACf,IAAIwG,EAAIxG,EAAS,GAWjB,OAAOA,GAT6B,MAAxBA,EAAS,IAAO,IACd,KACM,GAANwG,EACA,KACM,GAANA,EACA,KACM,GAANA,EACA,KACA,OAGlBvG,KAAM,CACFC,IAAK,EACLC,IAAK,KAMbnD,EAAOE,aAAa,QAAS,CACzBC,OAAQ,wFAAwFC,MAC5F,KAEJC,YAAa,kDAAkDD,MAAM,KACrEE,SAAU,2DAA2DF,MACjE,KAEJG,cAAe,8BAA8BH,MAAM,KACnDI,YAAa,uBAAuBJ,MAAM,KAC1Ca,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,2BAEVC,SAAU,CACNC,QAAS,gBACTC,QAAS,mBACTC,SAAU,eACVC,QAAS,oBACTC,SAAU,sBACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,QACRC,KAAM,SACNC,EAAG,gBACHC,GAAI,aACJC,EAAG,WACHC,GAAI,aACJC,EAAG,UACHC,GAAI,WACJC,EAAG,QACHC,GAAI,UACJC,EAAG,UACHC,GAAI,YACJC,EAAG,SACHC,GAAI,YAERC,uBAAwB,uBACxBC,QAAS,SAAUC,GACf,IAAIwG,EAAIxG,EAAS,GAWjB,OAAOA,GAT6B,MAAxBA,EAAS,IAAO,IACd,KACM,GAANwG,EACA,KACM,GAANA,EACA,KACM,GAANA,EACA,KACA,OAGlBvG,KAAM,CACFC,IAAK,EACLC,IAAK,KAMbnD,EAAOE,aAAa,KAAM,CACtBC,OAAQ,kGAA6FC,MACjG,KAEJC,YAAa,yDAAoDD,MAAM,KACvEE,SAAU,oEAAqDF,MAAM,KACrEG,cAAe,0CAAgCH,MAAM,KACrDI,YAAa,4BAAuBJ,MAAM,KAC1Ca,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,4BACJC,IAAK,kCACLC,KAAM,2CACNwJ,KAAM,uCAEVtK,cAAe,cACfC,KAAM,SAAUC,GACZ,MAAyC,MAAlCA,EAAM+I,OAAO,GAAG2C,eAE3BxL,SAAU,SAAUC,EAAOC,EAASC,GAChC,OAAY,GAARF,EACOE,EAAU,SAAW,SAErBA,EAAU,SAAW,UAGpCQ,SAAU,CACNC,QAAS,sBACTC,QAAS,sBACTC,SAAU,gBACVC,QAAS,sBACTC,SAAU,2BACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,UACRC,KAAM,gBACNC,EAAG,kBACHC,GAAI,cACJC,EAAG,aACHC,GAAI,aACJC,EAAG,WACHC,GAAI,WACJC,EAAG,WACHC,GAAI,WACJC,EAAG,aACHC,GAAI,aACJC,EAAG,WACHC,GAAI,YAERC,uBAAwB,WACxBC,QAAS,MACTE,KAAM,CACFC,IAAK,EACLC,IAAK,KAMb,IAAI4J,EAAiB,8DAA8D3M,MAC3E,KAEJ4M,EAAgB,kDAAkD5M,MAAM,KACxE6M,EAAgB,CACZ,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,SAEJC,EAAgB,mLAEpBlN,EAAOE,aAAa,QAAS,CACzBC,OAAQ,2FAA2FC,MAC/F,KAEJC,YAAa,SAAU+B,EAAGiF,GACtB,OAAKjF,EAEM,QAAQxB,KAAKyG,GACb2F,EAAc5K,EAAE+J,SAEhBY,EAAe3K,EAAE+J,SAJjBY,GAOf/C,YAAakD,EACbrD,iBAAkBqD,EAClB3C,kBAAmB,+FACnBC,uBAAwB,0FACxBT,YAAakD,EACbxC,gBAAiBwC,EACjBvC,iBAAkBuC,EAClB3M,SAAU,6DAAuDF,MAAM,KACvEG,cAAe,2CAAqCH,MAAM,KAC1DI,YAAa,0BAAuBJ,MAAM,KAC1C2D,oBAAoB,EACpB9C,eAAgB,CACZC,GAAI,SACJC,IAAK,YACLC,EAAG,aACHC,GAAI,wBACJC,IAAK,+BACLC,KAAM,sCAEVC,SAAU,CACNC,QAAS,WACL,MAAO,aAAgC,IAAjBxB,KAAKa,QAAgB,IAAM,IAAM,QAE3DY,QAAS,WACL,MAAO,mBAAmC,IAAjBzB,KAAKa,QAAgB,IAAM,IAAM,QAE9Da,SAAU,WACN,MAAO,cAAiC,IAAjB1B,KAAKa,QAAgB,IAAM,IAAM,QAE5Dc,QAAS,WACL,MAAO,cAAiC,IAAjB3B,KAAKa,QAAgB,IAAM,IAAM,QAE5De,SAAU,WACN,MACI,0BACkB,IAAjB5B,KAAKa,QAAgB,IAAM,IAC5B,QAGRgB,SAAU,KAEdC,aAAc,CACVC,OAAQ,QACRC,KAAM,UACNC,EAAG,gBACHC,GAAI,cACJC,EAAG,YACHC,GAAI,aACJC,EAAG,WACHC,GAAI,WACJC,EAAG,YACHC,GAAI,aACJC,EAAG,SACHC,GAAI,WACJC,EAAG,YACHC,GAAI,cAERC,uBAAwB,cACxBC,QAAS,SACTE,KAAM,CACFC,IAAK,EACLC,IAAK,KAMb,IAAIgK,EAAmB,8DAA8D/M,MAC7E,KAEJgN,EAAgB,kDAAkDhN,MAAM,KACxEiN,EAAgB,CACZ,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,SAEJC,EAAgB,mLAEpBtN,EAAOE,aAAa,QAAS,CACzBC,OAAQ,2FAA2FC,MAC/F,KAEJC,YAAa,SAAU+B,EAAGiF,GACtB,OAAKjF,EAEM,QAAQxB,KAAKyG,GACb+F,EAAchL,EAAE+J,SAEhBgB,EAAiB/K,EAAE+J,SAJnBgB,GAOfnD,YAAasD,EACbzD,iBAAkByD,EAClB/C,kBAAmB,+FACnBC,uBAAwB,0FACxBT,YAAasD,EACb5C,gBAAiB4C,EACjB3C,iBAAkB2C,EAClB/M,SAAU,6DAAuDF,MAAM,KACvEG,cAAe,2CAAqCH,MAAM,KAC1DI,YAAa,0BAAuBJ,MAAM,KAC1C2D,oBAAoB,EACpB9C,eAAgB,CACZC,GAAI,SACJC,IAAK,YACLC,EAAG,aACHC,GAAI,wBACJC,IAAK,+BACLC,KAAM,sCAEVC,SAAU,CACNC,QAAS,WACL,MAAO,aAAgC,IAAjBxB,KAAKa,QAAgB,IAAM,IAAM,QAE3DY,QAAS,WACL,MAAO,mBAAmC,IAAjBzB,KAAKa,QAAgB,IAAM,IAAM,QAE9Da,SAAU,WACN,MAAO,cAAiC,IAAjB1B,KAAKa,QAAgB,IAAM,IAAM,QAE5Dc,QAAS,WACL,MAAO,cAAiC,IAAjB3B,KAAKa,QAAgB,IAAM,IAAM,QAE5De,SAAU,WACN,MACI,0BACkB,IAAjB5B,KAAKa,QAAgB,IAAM,IAC5B,QAGRgB,SAAU,KAEdC,aAAc,CACVC,OAAQ,QACRC,KAAM,UACNC,EAAG,gBACHC,GAAI,cACJC,EAAG,YACHC,GAAI,aACJC,EAAG,WACHC,GAAI,WACJC,EAAG,YACHC,GAAI,aACJC,EAAG,SACHC,GAAI,WACJC,EAAG,YACHC,GAAI,cAERC,uBAAwB,cACxBC,QAAS,SACTE,KAAM,CACFC,IAAK,EACLC,IAAK,KAMb,IAAIoK,EAAmB,8DAA8DnN,MAC7E,KAEJoN,EAAgB,kDAAkDpN,MAAM,KACxEqN,EAAgB,CACZ,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,SAEJC,EAAgB,mLAmFpB,SAASC,EAAsB3K,EAAQQ,EAAeyD,EAAKvD,GACvD,IAAI2D,EAAS,CACTnF,EAAG,CAAC,kBAAgB,iBAAe,iBACnCC,GAAI,CAACa,EAAS,UAAWA,EAAS,YAClCZ,EAAG,CAAC,gBAAc,gBAClBC,GAAI,CAACW,EAAS,UAAWA,EAAS,YAClCV,EAAG,CAAC,eAAa,YAAa,eAC9BC,GAAI,CAACS,EAAS,SAAUA,EAAS,UACjCR,EAAG,CAAC,kBAAa,kBACjBE,EAAG,CAAC,UAAW,WAAY,cAC3BC,GAAI,CAACK,EAAS,OAAQA,EAAS,SAC/BJ,EAAG,CAAC,eAAa,QAAS,gBAC1BC,GAAI,CAACG,EAAS,SAAUA,EAAS,YAErC,OAAIQ,EACO6D,EAAOJ,GAAK,GAAKI,EAAOJ,GAAK,GAAKI,EAAOJ,GAAK,GAElDvD,EAAW2D,EAAOJ,GAAK,GAAKI,EAAOJ,GAAK,GAlGnDjH,EAAOE,aAAa,KAAM,CACtBC,OAAQ,2FAA2FC,MAC/F,KAEJC,YAAa,SAAU+B,EAAGiF,GACtB,OAAKjF,EAEM,QAAQxB,KAAKyG,GACbmG,EAAcpL,EAAE+J,SAEhBoB,EAAiBnL,EAAE+J,SAJnBoB,GAOfvD,YAAa0D,EACb7D,iBAAkB6D,EAClBnD,kBAAmB,+FACnBC,uBAAwB,0FACxBT,YAAa0D,EACbhD,gBAAiBgD,EACjB/C,iBAAkB+C,EAClBnN,SAAU,6DAAuDF,MAAM,KACvEG,cAAe,2CAAqCH,MAAM,KAC1DI,YAAa,0BAAuBJ,MAAM,KAC1C2D,oBAAoB,EACpB9C,eAAgB,CACZC,GAAI,OACJC,IAAK,UACLC,EAAG,aACHC,GAAI,wBACJC,IAAK,6BACLC,KAAM,oCAEVC,SAAU,CACNC,QAAS,WACL,MAAO,aAAgC,IAAjBxB,KAAKa,QAAgB,IAAM,IAAM,QAE3DY,QAAS,WACL,MAAO,mBAAmC,IAAjBzB,KAAKa,QAAgB,IAAM,IAAM,QAE9Da,SAAU,WACN,MAAO,cAAiC,IAAjB1B,KAAKa,QAAgB,IAAM,IAAM,QAE5Dc,QAAS,WACL,MAAO,cAAiC,IAAjB3B,KAAKa,QAAgB,IAAM,IAAM,QAE5De,SAAU,WACN,MACI,0BACkB,IAAjB5B,KAAKa,QAAgB,IAAM,IAC5B,QAGRgB,SAAU,KAEdC,aAAc,CACVC,OAAQ,QACRC,KAAM,UACNC,EAAG,gBACHC,GAAI,cACJC,EAAG,YACHC,GAAI,aACJC,EAAG,WACHC,GAAI,WACJC,EAAG,YACHC,GAAI,aACJC,EAAG,SACHC,GAAI,WACJC,EAAG,YACHC,GAAI,cAERC,uBAAwB,cACxBC,QAAS,SACTE,KAAM,CACFC,IAAK,EACLC,IAAK,GAETyK,YAAa,sBAyBjB5N,EAAOE,aAAa,KAAM,CACtBC,OAAQ,gGAA6FC,MACjG,KAEJC,YAAa,gEAA6DD,MACtE,KAEJE,SAAU,sFAAiEF,MACvE,KAEJG,cAAe,gBAAgBH,MAAM,KACrCI,YAAa,gBAAgBJ,MAAM,KACnCa,eAAgB,CACZC,GAAI,OACJC,IAAK,UACLC,EAAG,aACHC,GAAI,eACJC,IAAK,oBACLC,KAAM,2BAEVC,SAAU,CACNC,QAAS,gBACTC,QAAS,cACTC,SAAU,wBACVC,QAAS,aACTC,SAAU,oBACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,eACRC,KAAM,YACNC,EAAGyL,EACHxL,GAAIwL,EACJvL,EAAGuL,EACHtL,GAAIsL,EACJrL,EAAGqL,EACHpL,GAAIoL,EACJnL,EAAGmL,EACHlL,GAAI,cACJC,EAAGiL,EACHhL,GAAIgL,EACJ/K,EAAG+K,EACH9K,GAAI8K,GAER7K,uBAAwB,YACxBC,QAAS,MACTE,KAAM,CACFC,IAAK,EACLC,IAAK,KAMbnD,EAAOE,aAAa,KAAM,CACtBC,OAAQ,+FAA+FC,MACnG,KAEJC,YAAa,8DAA8DD,MACvE,KAEJ0J,kBAAkB,EAClBxJ,SAAU,sEAAsEF,MAC5E,KAEJG,cAAe,8BAA8BH,MAAM,KACnDI,YAAa,uBAAuBJ,MAAM,KAC1C2D,oBAAoB,EACpB9C,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,0BACJC,IAAK,gCACLC,KAAM,sCACNkK,EAAG,WACHZ,GAAI,oBACJC,IAAK,0BACLC,KAAM,gCAEVvJ,SAAU,CACNC,QAAS,kBACTC,QAAS,mBACTC,SAAU,gBACVC,QAAS,kBACTC,SAAU,0BACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,WACRC,KAAM,WACNC,EAAG,iBACHC,GAAI,aACJC,EAAG,aACHC,GAAI,YACJC,EAAG,WACHC,GAAI,UACJC,EAAG,WACHC,GAAI,UACJC,EAAG,eACHC,GAAI,cACJC,EAAG,WACHC,GAAI,WAERC,uBAAwB,YACxBC,QAAS,MACTE,KAAM,CACFC,IAAK,EACLC,IAAK,KAMb,IAAI0K,EAAc,CACVtJ,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,UAET8I,GAAc,CACVC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,KAGbxO,EAAOE,aAAa,KAAM,CACtBC,OAAQ,0WAAwEC,MAC5E,KAEJC,YAAa,0WAAwED,MACjF,KAEJE,SAAU,iRAAoEF,MAC1E,KAEJG,cAAe,iRAAoEH,MAC/E,KAEJI,YAAa,mDAAgBJ,MAAM,KACnC2D,oBAAoB,EACpB9C,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,2BAEVd,cAAe,wGACfC,KAAM,SAAUC,GACZ,MAAO,qDAAaC,KAAKD,IAE7BE,SAAU,SAAUmD,EAAMC,EAAQjD,GAC9B,OAAIgD,EAAO,GACA,qDAEA,sDAGfxC,SAAU,CACNC,QAAS,+DACTC,QAAS,yDACTC,SAAU,qCACVC,QAAS,+DACTC,SAAU,0DACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,kBACRC,KAAM,wBACNC,EAAG,oDACHC,GAAI,oCACJC,EAAG,8CACHC,GAAI,oCACJC,EAAG,wCACHC,GAAI,8BACJC,EAAG,kCACHC,GAAI,wBACJC,EAAG,kCACHC,GAAI,wBACJC,EAAG,kCACHC,GAAI,yBAERqC,SAAU,SAAUzB,GAChB,OAAOA,EACFK,QAAQ,mBAAU,SAAUqB,GACzB,OAAO2I,GAAY3I,KAEtBrB,QAAQ,UAAM,MAEvBI,WAAY,SAAUT,GAClB,OAAOA,EACFK,QAAQ,MAAO,SAAUqB,GACtB,OAAO0I,EAAY1I,KAEtBrB,QAAQ,KAAM,WAEvBhB,uBAAwB,gBACxBC,QAAS,WACTE,KAAM,CACFC,IAAK,EACLC,IAAK,MAMb,IAAIsL,GAAc,iFAAwErO,MAClF,KAEJsO,GAAgB,CACZ,QACA,QACA,SACA,SACA,YACA,SACA,SACAD,GAAY,GACZA,GAAY,GACZA,GAAY,IAEpB,SAASE,GAAY3L,EAAQQ,EAAeyD,EAAKvD,GAC7C,IAoCkBV,EAAQU,EApCtByG,EAAS,GACb,OAAQlD,GACJ,IAAK,IACD,OAAOvD,EAAW,oBAAsB,kBAC5C,IAAK,KACDyG,EAASzG,EAAW,WAAa,WACjC,MACJ,IAAK,IACD,OAAOA,EAAW,WAAa,WACnC,IAAK,KACDyG,EAASzG,EAAW,WAAa,YACjC,MACJ,IAAK,IACD,OAAOA,EAAW,SAAW,QACjC,IAAK,KACDyG,EAASzG,EAAW,SAAW,SAC/B,MACJ,IAAK,IACD,OAAOA,EAAW,eAAW,cACjC,IAAK,KACDyG,EAASzG,EAAW,eAAW,kBAC/B,MACJ,IAAK,IACD,OAAOA,EAAW,YAAc,WACpC,IAAK,KACDyG,EAASzG,EAAW,YAAc,YAClC,MACJ,IAAK,IACD,OAAOA,EAAW,SAAW,QACjC,IAAK,KACDyG,EAASzG,EAAW,SAAW,SAC/B,MAGR,OAE0BA,EAHIA,EAA9ByG,IAGkBnH,EAHIA,GAIN,GACVU,EACIgL,GAAc1L,GACdyL,GAAYzL,GAChBA,GARoC,IAAMmH,EAWpDnK,EAAOE,aAAa,KAAM,CACtBC,OAAQ,iHAA2GC,MAC/G,KAEJC,YAAa,6EAAuED,MAChF,KAEJE,SAAU,qEAAqEF,MAC3E,KAEJG,cAAe,uBAAuBH,MAAM,KAC5CI,YAAa,uBAAuBJ,MAAM,KAC1Ca,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,mBACJC,IAAK,gCACLC,KAAM,sCACNkK,EAAG,WACHZ,GAAI,cACJC,IAAK,2BACLC,KAAM,iCAEVvJ,SAAU,CACNC,QAAS,6BACTC,QAAS,sBACTC,SAAU,gBACVC,QAAS,mBACTC,SAAU,4BACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,qBACRC,KAAM,YACNC,EAAGyM,GACHxM,GAAIwM,GACJvM,EAAGuM,GACHtM,GAAIsM,GACJrM,EAAGqM,GACHpM,GAAIoM,GACJnM,EAAGmM,GACHlM,GAAIkM,GACJjM,EAAGiM,GACHhM,GAAIgM,GACJ/L,EAAG+L,GACH9L,GAAI8L,IAER7L,uBAAwB,YACxBC,QAAS,MACTE,KAAM,CACFC,IAAK,EACLC,IAAK,KAMbnD,EAAOE,aAAa,MAAO,CACvBC,OAAQ,0FAA0FC,MAC9F,KAEJC,YAAa,kDAAkDD,MAAM,KACrEE,SAAU,yDAAyDF,MAC/D,KAEJG,cAAe,8BAA8BH,MAAM,KACnDI,YAAa,wBAAwBJ,MAAM,KAC3Ca,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,YACHC,GAAI,eACJC,IAAK,qBACLC,KAAM,6BAEVC,SAAU,CACNC,QAAS,oBACTC,QAAS,gBACTC,SAAU,0BACVC,QAAS,eACTC,SAAU,4BACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,gBACRC,KAAM,mBACNC,EAAG,gBACHC,GAAI,aACJC,EAAG,eACHC,GAAI,YACJC,EAAG,aACHC,GAAI,UACJC,EAAG,aACHC,GAAI,UACJC,EAAG,cACHC,GAAI,WACJC,EAAG,aACHC,GAAI,WAERC,uBAAwB,UACxBC,QAAS,SAAUC,GACf,OAAOA,GAEXC,KAAM,CACFC,IAAK,EACLC,IAAK,KAMbnD,EAAOE,aAAa,KAAM,CACtBC,OAAQ,wFAAqFC,MACzF,KAEJC,YAAa,kDAAkDD,MAAM,KACrEE,SAAU,wFAA4EF,MAClF,KAEJG,cAAe,0CAA8BH,MAAM,KACnDI,YAAa,gCAAuBJ,MAAM,KAC1Ca,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,4BAEVC,SAAU,CACNC,QAAS,oBACTC,QAAS,uBACTC,SAAU,gBACVC,QAAS,wBACTC,SAAU,8BACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,QACRC,KAAM,kBACNC,EAAG,eACHC,GAAI,cACJC,EAAG,eACHC,GAAI,cACJC,EAAG,cACHC,GAAI,cACJC,EAAG,YACHC,GAAI,WACJC,EAAG,oBACHC,GAAI,mBACJC,EAAG,aACHC,GAAI,YAERC,uBAAwB,YACxBC,QAAS,MACTE,KAAM,CACFC,IAAK,EACLC,IAAK,KAMbnD,EAAOE,aAAa,QAAS,CACzBC,OAAQ,gGAAuFC,MAC3F,KAEJC,YAAa,0EAAiED,MAC1E,KAEJ0J,kBAAkB,EAClBxJ,SAAU,sDAAsDF,MAAM,KACtEG,cAAe,qCAAqCH,MAAM,KAC1DI,YAAa,uBAAuBJ,MAAM,KAC1C2D,oBAAoB,EACpB9C,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,0BAEVC,SAAU,CACNC,QAAS,6BACTC,QAAS,mBACTC,SAAU,iBACVC,QAAS,iBACTC,SAAU,yBACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,UACRC,KAAM,YACNC,EAAG,oBACHC,GAAI,cACJC,EAAG,aACHC,GAAI,aACJC,EAAG,YACHC,GAAI,YACJC,EAAG,UACHC,GAAI,WACJC,EAAG,UACHC,GAAI,UACJC,EAAG,QACHC,GAAI,UAERC,uBAAwB,gBACxBC,QAAS,SAAUC,EAAQyE,GACvB,OAAQA,GAEJ,QACA,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,MACL,IAAK,IACD,OAAOzE,GAAqB,IAAXA,EAAe,KAAO,KAG3C,IAAK,IACL,IAAK,IACD,OAAOA,GAAqB,IAAXA,EAAe,KAAO,SAOvDhD,EAAOE,aAAa,QAAS,CACzBC,OAAQ,gGAAuFC,MAC3F,KAEJC,YAAa,0EAAiED,MAC1E,KAEJ0J,kBAAkB,EAClBxJ,SAAU,sDAAsDF,MAAM,KACtEG,cAAe,qCAAqCH,MAAM,KAC1DI,YAAa,uBAAuBJ,MAAM,KAC1C2D,oBAAoB,EACpB9C,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,0BAEVC,SAAU,CACNC,QAAS,6BACTC,QAAS,mBACTC,SAAU,iBACVC,QAAS,iBACTC,SAAU,yBACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,UACRC,KAAM,YACNC,EAAG,oBACHC,GAAI,cACJC,EAAG,aACHC,GAAI,aACJC,EAAG,YACHC,GAAI,YACJC,EAAG,UACHC,GAAI,WACJC,EAAG,UACHC,GAAI,UACJC,EAAG,QACHC,GAAI,UAERC,uBAAwB,gBACxBC,QAAS,SAAUC,EAAQyE,GACvB,OAAQA,GAEJ,QACA,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,MACL,IAAK,IACD,OAAOzE,GAAqB,IAAXA,EAAe,KAAO,KAG3C,IAAK,IACL,IAAK,IACD,OAAOA,GAAqB,IAAXA,EAAe,KAAO,OAGnDC,KAAM,CACFC,IAAK,EACLC,IAAK,KAMb,IAEIyL,GAAgB,2LAChBC,GAAgB,CACZ,SACA,YACA,SACA,QACA,QACA,SACA,SACA,YACA,SACA,QACA,QACA,YAGR7O,EAAOE,aAAa,KAAM,CACtBC,OAAQ,gGAAuFC,MAC3F,KAEJC,YAAa,0EAAiED,MAC1E,KAEJ4J,YAAa4E,GACb/E,iBAAkB+E,GAClBrE,kBA3BsB,oGA4BtBC,uBA3B2B,6FA4B3BT,YAAa8E,GACbpE,gBAAiBoE,GACjBnE,iBAAkBmE,GAClBvO,SAAU,sDAAsDF,MAAM,KACtEG,cAAe,qCAAqCH,MAAM,KAC1DI,YAAa,uBAAuBJ,MAAM,KAC1C2D,oBAAoB,EACpB9C,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,0BAEVC,SAAU,CACNC,QAAS,6BACTC,QAAS,mBACTC,SAAU,iBACVC,QAAS,iBACTC,SAAU,yBACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,UACRC,KAAM,YACNC,EAAG,oBACHC,GAAI,cACJC,EAAG,aACHC,GAAI,aACJC,EAAG,YACHC,GAAI,YACJC,EAAG,UACHC,GAAI,WACJC,EAAG,UACHC,GAAI,UACJC,EAAG,QACHC,GAAI,UAERC,uBAAwB,eACxBC,QAAS,SAAUC,EAAQyE,GACvB,OAAQA,GAIJ,IAAK,IACD,OAAOzE,GAAqB,IAAXA,EAAe,KAAO,IAG3C,QACA,IAAK,IACL,IAAK,IACL,IAAK,MACL,IAAK,IACD,OAAOA,GAAqB,IAAXA,EAAe,KAAO,KAG3C,IAAK,IACL,IAAK,IACD,OAAOA,GAAqB,IAAXA,EAAe,KAAO,OAGnDC,KAAM,CACFC,IAAK,EACLC,IAAK,KAMb,IAAI2L,GAAsB,6DAA6D1O,MAC/E,KAEJ2O,GAAyB,kDAAkD3O,MACvE,KAGRJ,EAAOE,aAAa,KAAM,CACtBC,OAAQ,iGAAiGC,MACrG,KAEJC,YAAa,SAAU+B,EAAGiF,GACtB,OAAKjF,EAEM,QAAQxB,KAAKyG,GACb0H,GAAuB3M,EAAE+J,SAEzB2C,GAAoB1M,EAAE+J,SAJtB2C,IAOfhF,kBAAkB,EAClBxJ,SAAU,wDAAwDF,MAC9D,KAEJG,cAAe,8BAA8BH,MAAM,KACnDI,YAAa,uBAAuBJ,MAAM,KAC1C2D,oBAAoB,EACpB9C,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,0BAEVC,SAAU,CACNC,QAAS,gBACTC,QAAS,gBACTC,SAAU,eACVC,QAAS,iBACTC,SAAU,8BACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,SACRC,KAAM,SACNC,EAAG,mBACHC,GAAI,cACJC,EAAG,eACHC,GAAI,aACJC,EAAG,WACHC,GAAI,WACJC,EAAG,UACHC,GAAI,WACJC,EAAG,aACHC,GAAI,aACJC,EAAG,WACHC,GAAI,cAERC,uBAAwB,kBACxBC,QAAS,SAAUC,GACf,OACIA,GACY,IAAXA,GAA2B,IAAXA,GAA0B,IAAVA,EAAe,MAAQ,OAGhEC,KAAM,CACFC,IAAK,EACLC,IAAK,KA8CbnD,EAAOE,aAAa,KAAM,CACtBC,OAzCW,CACP,YACA,UACA,WACA,aACA,YACA,YACA,UACA,YACA,qBACA,sBACA,UACA,WA8BJE,YA5BgB,CACZ,MACA,QACA,UACA,MACA,OACA,QACA,UACA,SACA,OACA,OACA,OACA,QAiBJyJ,kBAAkB,EAClBxJ,SAhBa,CACT,kBACA,cACA,iBACA,oBACA,eACA,eACA,kBAUJC,cARgB,CAAC,OAAQ,OAAQ,WAAS,UAAQ,UAAQ,QAAS,QASnEC,YARc,CAAC,KAAM,KAAM,QAAM,QAAM,QAAM,IAAK,MASlDS,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,2BAEVC,SAAU,CACNC,QAAS,gBACTC,QAAS,qBACTC,SAAU,eACVC,QAAS,kBACTC,SAAU,2BACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,OACRC,KAAM,eACNC,EAAG,mBACHC,GAAI,aACJC,EAAG,gBACHC,GAAI,mBACJC,EAAG,iBACHC,GAAI,oBACJC,EAAG,QACHC,GAAI,WACJC,EAAG,QACHC,GAAI,eACJC,EAAG,SACHC,GAAI,aAERC,uBAAwB,mBACxBC,QAAS,SAAUC,GAEf,OAAOA,GADiB,IAAXA,EAAe,IAAMA,EAAS,IAAO,EAAI,KAAO,OAGjEC,KAAM,CACFC,IAAK,EACLC,IAAK,KAyKb,SAAS6L,GAAsBhM,EAAQQ,EAAeyD,EAAKvD,GACvD,IAAI2D,EAAS,CACTnF,EAAG,CAAC,wFAAmB,2DACvBC,GAAI,CAACa,EAAS,0DAAcA,EAAS,mCACrCZ,EAAG,CAAC,0DAAc,+CAClBC,GAAI,CAACW,EAAS,oDAAaA,EAAS,yCACpCV,EAAG,CAAC,8CAAY,6BAChBC,GAAI,CAACS,EAAS,wCAAWA,EAAS,6BAClCR,EAAG,CAAC,oDAAa,mCACjBC,GAAI,CAACO,EAAS,8CAAYA,EAAS,uBACnCN,EAAG,CAAC,4EAAiB,qDACrBC,GAAI,CAACK,EAAS,gEAAeA,EAAS,yCACtCJ,EAAG,CAAC,0DAAc,yCAClBC,GAAI,CAACG,EAAS,oDAAaA,EAAS,0CAExC,OAAOU,EAAW2D,EAAOJ,GAAK,GAAKI,EAAOJ,GAAK,GA0GnD,SAASgI,GAAsBjM,EAAQQ,EAAeyD,EAAKvD,GACvD,IAAI2D,EAAS,CACTnF,EAAG,CAAC,qBAAsB,iBAC1BC,GAAI,CAACa,EAAS,cAAeA,EAAS,WACtCZ,EAAG,CAAC,aAAc,YAClBC,GAAI,CAACW,EAAS,YAAaA,EAAS,WACpCV,EAAG,CAAC,YAAa,UACjBC,GAAI,CAACS,EAAS,WAAYA,EAAS,UACnCR,EAAG,CAAC,YAAa,UACjBC,GAAI,CAACO,EAAS,WAAYA,EAAS,QACnCN,EAAG,CAAC,eAAgB,aACpBC,GAAI,CAACK,EAAS,cAAeA,EAAS,WACtCJ,EAAG,CAAC,aAAc,YAClBC,GAAI,CAACG,EAAS,YAAaA,EAAS,YAExC,OAAOU,EAAW2D,EAAOJ,GAAK,GAAKI,EAAOJ,GAAK,GAnQnDjH,EAAOE,aAAa,KAAM,CACtBC,OAzCW,CACP,gBACA,aACA,aACA,aACA,gBACA,kBACA,cACA,iBACA,eACA,gBACA,eACA,mBA8BJE,YA5BgB,CACZ,OACA,OACA,UACA,OACA,UACA,UACA,OACA,SACA,OACA,UACA,OACA,WAiBJyJ,kBAAkB,EAClBxJ,SAhBa,CACT,iBACA,UACA,aACA,YACA,YACA,WACA,eAUJC,cARkB,CAAC,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,OAS7DC,YARgB,CAAC,QAAM,KAAM,QAAM,KAAM,KAAM,KAAM,MASrDS,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,2BAEVC,SAAU,CACNC,QAAS,oBACTC,QAAS,yBACTC,SAAU,gBACVC,QAAS,oBACTC,SAAU,6BACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,YACRC,KAAM,gBACNC,EAAG,gBACHC,GAAI,YACJC,EAAG,UACHC,GAAI,gBACJC,EAAG,OACHC,GAAI,aACJC,EAAG,QACHC,GAAI,WACJC,EAAG,UACHC,GAAI,eACJC,EAAG,WACHC,GAAI,eAERC,uBAAwB,mBACxBC,QAAS,SAAUC,GAEf,OAAOA,GADiB,IAAXA,EAAe,IAAMA,EAAS,IAAO,EAAI,KAAO,OAGjEC,KAAM,CACFC,IAAK,EACLC,IAAK,KAMbnD,EAAOE,aAAa,KAAM,CACtBC,OAAQ,4FAAyFC,MAC7F,KAEJC,YAAa,iEAA8DD,MACvE,KAEJ0J,kBAAkB,EAClBxJ,SAAU,yDAAmDF,MAAM,KACnEG,cAAe,2CAAqCH,MAAM,KAC1DI,YAAa,6BAAuBJ,MAAM,KAC1C2D,oBAAoB,EACpB9C,eAAgB,CACZC,GAAI,OACJC,IAAK,UACLC,EAAG,aACHC,GAAI,wBACJC,IAAK,6BACLC,KAAM,oCAEVC,SAAU,CACNC,QAAS,WACL,MAAO,UAA6B,IAAjBxB,KAAKa,QAAgB,QAAO,QAAO,QAE1DY,QAAS,WACL,MAAO,gBAA6B,IAAjBzB,KAAKa,QAAgB,QAAO,QAAO,QAE1Da,SAAU,WACN,MAAO,UAA6B,IAAjB1B,KAAKa,QAAgB,QAAO,KAAO,QAE1Dc,QAAS,WACL,MAAO,UAA6B,IAAjB3B,KAAKa,QAAgB,OAAM,KAAO,QAEzDe,SAAU,WACN,MACI,qBAAwC,IAAjB5B,KAAKa,QAAgB,QAAO,KAAO,QAGlEgB,SAAU,KAEdC,aAAc,CACVC,OAAQ,SAAU4B,GACd,OAA0B,IAAtBA,EAAIqI,QAAQ,MACL,IAAMrI,EAEV,MAAQA,GAEnB3B,KAAM,SACNC,EAAG,eACHC,GAAI,cACJC,EAAG,YACHC,GAAI,aACJC,EAAG,YACHC,GAAI,WACJC,EAAG,YACHC,GAAI,aACJC,EAAG,SACHC,GAAI,WACJC,EAAG,SACHC,GAAI,WAERC,uBAAwB,cACxBC,QAAS,SACTE,KAAM,CACFC,IAAK,EACLC,IAAK,KAwBbnD,EAAOE,aAAa,WAAY,CAC5BC,OAAQ,CACJmH,WAAY,0cAAwFlH,MAChG,KAEJiH,OAAQ,4yBAAmJjH,MACvJ,KAEJmH,SAAU,mBAEdlH,YAAa,qVAA4ED,MACrF,KAEJ0J,kBAAkB,EAClBxJ,SAAU,iRAAqDF,MAAM,KACrEG,cAAe,wLAA4CH,MAAM,KACjEI,YAAa,mGAAwBJ,MAAM,KAC3C2D,oBAAoB,EACpB9C,eAAgB,CACZC,GAAI,gDACJC,IAAK,mDACLC,EAAG,aACHC,GAAI,cACJC,IAAK,4DACLC,KAAM,qEACNwJ,KAAM,kEAEVvJ,SAAU,CACNC,QAAS,0BACTC,QAAS,kDACTC,SAAU,8CACVC,QAAS,0BACTC,SAAU,8CACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,KACRC,KAAM,8BACNC,EAAG8M,GACH7M,GAAI6M,GACJ5M,EAAG4M,GACH3M,GAAI2M,GACJ1M,EAAG0M,GACHzM,GAAIyM,GACJxM,EAAGwM,GACHvM,GAAIuM,GACJtM,EAAGsM,GACHrM,GAAIqM,GACJpM,EAAGoM,GACHnM,GAAImM,IAERlM,uBAAwB,8BACxBC,QAAS,SAAUC,EAAQyE,GACvB,OAAQA,GAEJ,IAAK,IACD,OAAOzE,EAAS,qBACpB,QACA,IAAK,IACL,IAAK,IACL,IAAK,MACL,IAAK,IACL,IAAK,IACL,IAAK,IACD,OAAOA,IAGnBC,KAAM,CACFC,IAAK,EACLC,IAAK,GAET1C,cAAe,0IACf+H,aAAc,SAAUxE,EAAMnD,GAI1B,OAHa,KAATmD,IACAA,EAAO,GAEM,6BAAbnD,EACOmD,EAAO,EAAIA,EAAOA,EAAO,GACZ,yCAAbnD,EACAmD,EACa,+CAAbnD,EACO,GAAPmD,EAAYA,EAAOA,EAAO,GACb,mCAAbnD,EACAmD,EAAO,QADX,GAIXnD,SAAU,SAAUmD,EAAMC,EAAQjD,GAC9B,OAAIgD,EAAO,EACA,2BACAA,EAAO,GACP,uCACAA,EAAO,GACP,6CACAA,EAAO,GACP,iCAEA,8BAyBnBhE,EAAOE,aAAa,WAAY,CAC5BC,OAAQ,CACJmH,WAAY,4EAA4ElH,MACpF,KAEJiH,OAAQ,wIAAwIjH,MAC5I,KAEJmH,SAAU,mBAEdlH,YAAa,4DAA4DD,MACrE,KAEJ0J,kBAAkB,EAClBxJ,SAAU,uDAAuDF,MAAM,KACvEG,cAAe,qCAAqCH,MAAM,KAC1DI,YAAa,uBAAuBJ,MAAM,KAC1C2D,oBAAoB,EACpB9C,eAAgB,CACZC,GAAI,iBACJC,IAAK,oBACLC,EAAG,aACHC,GAAI,cACJC,IAAK,6BACLC,KAAM,sCACNwJ,KAAM,mCAEVvJ,SAAU,CACNC,QAAS,WACTC,QAAS,cACTC,SAAU,sBACVC,QAAS,WACTC,SAAU,sBACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,KACRC,KAAM,UACNC,EAAG+M,GACH9M,GAAI8M,GACJ7M,EAAG6M,GACH5M,GAAI4M,GACJ3M,EAAG2M,GACH1M,GAAI0M,GACJzM,EAAGyM,GACHxM,GAAIwM,GACJvM,EAAGuM,GACHtM,GAAIsM,GACJrM,EAAGqM,GACHpM,GAAIoM,IAERnM,uBAAwB,cACxBC,QAAS,SAAUC,EAAQyE,GACvB,OAAQA,GAEJ,IAAK,IACD,OAAOzE,EAAS,KACpB,QACA,IAAK,IACL,IAAK,IACL,IAAK,MACL,IAAK,IACL,IAAK,IACL,IAAK,IACD,OAAOA,IAGnBC,KAAM,CACFC,IAAK,EACLC,IAAK,GAET1C,cAAe,+BACf+H,aAAc,SAAUxE,EAAMnD,GAI1B,OAHa,KAATmD,IACAA,EAAO,GAEM,SAAbnD,EACOmD,EAAO,EAAIA,EAAOA,EAAO,GACZ,aAAbnD,EACAmD,EACa,aAAbnD,EACO,GAAPmD,EAAYA,EAAOA,EAAO,GACb,UAAbnD,EACAmD,EAAO,QADX,GAIXnD,SAAU,SAAUmD,EAAMC,EAAQjD,GAC9B,OAAIgD,EAAO,EACA,OACAA,EAAO,GACP,WACAA,EAAO,GACP,WACAA,EAAO,GACP,QAEA,UAOnB,IAAIkL,GAAc,CACV3K,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,UAETmK,GAAc,CACVC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,KAGb7P,EAAOE,aAAa,KAAM,CACtBC,OAAQ,gdAAyFC,MAC7F,KAEJC,YAAa,mUAAyED,MAClF,KAEJ0J,kBAAkB,EAClBxJ,SAAU,mSAAwDF,MAC9D,KAEJG,cAAe,qKAAmCH,MAAM,KACxDI,YAAa,iFAAqBJ,MAAM,KACxCa,eAAgB,CACZC,GAAI,8CACJC,IAAK,iDACLC,EAAG,aACHC,GAAI,cACJC,IAAK,2DACLC,KAAM,kEAEVC,SAAU,CACNC,QAAS,oBACTC,QAAS,gCACTC,SAAU,WACVC,QAAS,4CACTC,SAAU,4CACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,kBACRC,KAAM,oCACNC,EAAG,8CACHC,GAAI,oCACJC,EAAG,8CACHC,GAAI,oCACJC,EAAG,wCACHC,GAAI,8BACJC,EAAG,wCACHC,GAAI,8BACJC,EAAG,8CACHC,GAAI,oCACJC,EAAG,wCACHC,GAAI,+BAERqC,SAAU,SAAUzB,GAChB,OAAOA,EAAOK,QAAQ,kEAAiB,SAAUqB,GAC7C,OAAOgK,GAAYhK,MAG3BjB,WAAY,SAAUT,GAClB,OAAOA,EAAOK,QAAQ,MAAO,SAAUqB,GACnC,OAAO+J,GAAY/J,MAK3B1E,cAAe,gGACf+H,aAAc,SAAUxE,EAAMnD,GAI1B,OAHa,KAATmD,IACAA,EAAO,GAEM,uBAAbnD,EACOmD,EAAO,EAAIA,EAAOA,EAAO,GACZ,6BAAbnD,EACAmD,EACa,6BAAbnD,EACQ,IAARmD,EAAaA,EAAOA,EAAO,GACd,6BAAbnD,EACAmD,EAAO,QADX,GAIXnD,SAAU,SAAUmD,EAAMC,EAAQjD,GAC9B,OAAIgD,EAAO,EACA,qBACAA,EAAO,GACP,2BACAA,EAAO,GACP,2BACAA,EAAO,GACP,2BAEA,sBAGff,KAAM,CACFC,IAAK,EACLC,IAAK,KAMbnD,EAAOE,aAAa,KAAM,CACtBC,OAAQ,sXAA0EC,MAC9E,KAEJC,YAAa,kSAA4DD,MACrE,KAEJE,SAAU,6LAAuCF,MAAM,KACvDG,cAAe,6FAAuBH,MAAM,KAC5CI,YAAa,mDAAgBJ,MAAM,KACnCa,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,sBACJC,IAAK,4BACLC,KAAM,kCACNkK,EAAG,WACHZ,GAAI,aACJC,IAAK,mBACLC,KAAM,yBAEVvJ,SAAU,CACNC,QAAS,4CACTC,QAAS,sCACTC,SAAU,qCACVC,QAAS,kDACTC,SAAU,qGACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,8BACRC,KAAM,8BACNC,EAAG,0DACHC,GAAI,oCACJC,EAAG,qBACHC,GAAI,8BACJC,EAAG,qBACHC,GAAI,SAAUS,GACV,OAAe,IAAXA,EACO,uCAEJA,EAAS,6BAEpBR,EAAG,qBACHC,GAAI,SAAUO,GACV,OAAe,IAAXA,EACO,uCAEJA,EAAS,6BAEpBN,EAAG,2BACHC,GAAI,SAAUK,GACV,OAAe,IAAXA,EACO,6CAEJA,EAAS,yCAEpBJ,EAAG,qBACHC,GAAI,SAAUG,GACV,OAAe,IAAXA,EACO,uCACAA,EAAS,IAAO,GAAgB,KAAXA,EACrBA,EAAS,sBAEbA,EAAS,8BAGxBvC,cAAe,qTACfC,KAAM,SAAUC,GACZ,MAAO,6HAA8BC,KAAKD,IAE9CE,SAAU,SAAUmD,EAAMC,EAAQjD,GAC9B,OAAIgD,EAAO,EACA,0DACAA,EAAO,GACP,iCACAA,EAAO,GACPhD,EAAU,kCAAW,sEACrBgD,EAAO,GACPhD,EAAU,4BAAU,sEAEpB,8BAOnB,IAAI8O,GAAc,CACVvL,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,UAET+K,GAAc,CACVC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,KA8Fb,SAASC,GAAY1N,EAAQQ,EAAeyD,GACxC,IAAIkD,EAASnH,EAAS,IACtB,OAAQiE,GACJ,IAAK,KAQD,OANIkD,GADW,IAAXnH,EACU,UACQ,IAAXA,GAA2B,IAAXA,GAA2B,IAAXA,EAC7B,UAEA,UAGlB,IAAK,IACD,OAAOQ,EAAgB,eAAiB,eAC5C,IAAK,KAQD,OANI2G,GADW,IAAXnH,IAEkB,IAAXA,GAA2B,IAAXA,GAA2B,IAAXA,GAC7B,SAFA,SAOlB,IAAK,IACD,OAAOQ,EAAgB,YAAc,cACzC,IAAK,KAQD,OANI2G,GADW,IAAXnH,EACU,MACQ,IAAXA,GAA2B,IAAXA,GAA2B,IAAXA,EAC7B,OAEA,OAGlB,IAAK,KAMD,OAJImH,GADW,IAAXnH,EACU,MAEA,OAGlB,IAAK,KAQD,OANImH,GADW,IAAXnH,EACU,SACQ,IAAXA,GAA2B,IAAXA,GAA2B,IAAXA,EAC7B,UAEA,UAGlB,IAAK,KAQD,OANImH,GADW,IAAXnH,IAEkB,IAAXA,GAA2B,IAAXA,GAA2B,IAAXA,GAC7B,SAFA,UA/I1BhD,EAAOE,aAAa,KAAM,CACtBC,OAAQ,8YAA8EC,MAClF,KAEJC,YAAa,2PAA6DD,MACtE,KAEJ0J,kBAAkB,EAClBxJ,SAAU,6RAAuDF,MAAM,KACvEG,cAAe,+JAAkCH,MAAM,KACvDI,YAAa,iFAAqBJ,MAAM,KACxCa,eAAgB,CACZC,GAAI,4BACJC,IAAK,+BACLC,EAAG,aACHC,GAAI,cACJC,IAAK,yCACLC,KAAM,gDAEVC,SAAU,CACNC,QAAS,oBACTC,QAAS,oBACTC,SAAU,WACVC,QAAS,oBACTC,SAAU,4CACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,wBACRC,KAAM,8BACNC,EAAG,2DACHC,GAAI,oCACJC,EAAG,wCACHC,GAAI,8BACJC,EAAG,wCACHC,GAAI,8BACJC,EAAG,kCACHC,GAAI,wBACJC,EAAG,8CACHC,GAAI,oCACJC,EAAG,wCACHC,GAAI,+BAERqC,SAAU,SAAUzB,GAChB,OAAOA,EAAOK,QAAQ,kEAAiB,SAAUqB,GAC7C,OAAO4K,GAAY5K,MAG3BjB,WAAY,SAAUT,GAClB,OAAOA,EAAOK,QAAQ,MAAO,SAAUqB,GACnC,OAAO2K,GAAY3K,MAK3B1E,cAAe,gGACf+H,aAAc,SAAUxE,EAAMnD,GAI1B,OAHa,KAATmD,IACAA,EAAO,GAEM,uBAAbnD,EACOmD,EAAO,EAAIA,EAAOA,EAAO,GACZ,6BAAbnD,EACAmD,EACa,mCAAbnD,EACQ,IAARmD,EAAaA,EAAOA,EAAO,GACd,uBAAbnD,EACAmD,EAAO,QADX,GAIXnD,SAAU,SAAUmD,EAAMC,EAAQjD,GAC9B,OAAIgD,EAAO,EACA,qBACAA,EAAO,GACP,2BACAA,EAAO,GACP,iCACAA,EAAO,GACP,qBAEA,sBAGff,KAAM,CACFC,IAAK,EACLC,IAAK,KAoEbnD,EAAOE,aAAa,KAAM,CACtBC,OAAQ,CACJkH,OAAQ,mHAAoGjH,MACxG,KAEJkH,WAAY,+GAAgGlH,MACxG,MAGRC,YAAa,oEAA+DD,MACxE,KAEJ0J,kBAAkB,EAClBxJ,SAAU,iEAA4DF,MAClE,KAEJG,cAAe,0CAAqCH,MAAM,KAC1DI,YAAa,4BAAuBJ,MAAM,KAC1C2D,oBAAoB,EACpB9C,eAAgB,CACZC,GAAI,OACJC,IAAK,UACLC,EAAG,aACHC,GAAI,eACJC,IAAK,oBACLC,KAAM,2BAEVC,SAAU,CACNC,QAAS,eACTC,QAAS,eACTC,SAAU,WACN,OAAQ1B,KAAKuH,OACT,KAAK,EACD,MAAO,wBACX,KAAK,EACD,MAAO,uBACX,KAAK,EACD,MAAO,sBACX,KAAK,EACL,KAAK,EACL,KAAK,EACL,KAAK,EACD,MAAO,oBAGnB5F,QAAS,oBACTC,SAAU,WACN,OAAQ5B,KAAKuH,OACT,KAAK,EACD,MAAO,kCACX,KAAK,EACD,MAAO,iCACX,KAAK,EACD,MAAO,gCACX,KAAK,EACL,KAAK,EACL,KAAK,EACL,KAAK,EACD,MAAO,8BAGnB1F,SAAU,KAEdC,aAAc,CACVC,OAAQ,QACRC,KAAM,WACNC,EAAG,cACHC,GAAIuO,GACJtO,EAAGsO,GACHrO,GAAIqO,GACJpO,EAAGoO,GACHnO,GAAImO,GACJlO,EAAG,MACHC,GAAIiO,GACJhO,EAAG,SACHC,GAAI+N,GACJ9N,EAAG,SACHC,GAAI6N,IAER5N,uBAAwB,YACxBC,QAAS,MACTE,KAAM,CACFC,IAAK,EACLC,IAAK,KAMb,IAAIwN,GAAc,6FAAgEvQ,MAC9E,KAEJ,SAASwQ,GAAY5N,EAAQQ,EAAeyD,EAAKvD,GAC7C,IAAIwD,EAAMlE,EACV,OAAQiE,GACJ,IAAK,IACD,OAAOvD,GAAYF,EACb,4BACA,6BACV,IAAK,KACD,OAAO0D,GAAOxD,GAAYF,GACpB,gBACA,iBACV,IAAK,IACD,MAAO,OAASE,GAAYF,EAAgB,QAAU,UAC1D,IAAK,KACD,OAAO0D,GAAOxD,GAAYF,EAAgB,QAAU,UACxD,IAAK,IACD,MAAO,OAASE,GAAYF,EAAgB,UAAS,gBACzD,IAAK,KACD,OAAO0D,GAAOxD,GAAYF,EAAgB,UAAS,gBACvD,IAAK,IACD,MAAO,OAASE,GAAYF,EAAgB,OAAS,UACzD,IAAK,KACD,OAAO0D,GAAOxD,GAAYF,EAAgB,OAAS,UACvD,IAAK,IACD,MAAO,OAASE,GAAYF,EAAgB,YAAW,eAC3D,IAAK,KACD,OAAO0D,GAAOxD,GAAYF,EAAgB,YAAW,eACzD,IAAK,IACD,MAAO,OAASE,GAAYF,EAAgB,SAAQ,WACxD,IAAK,KACD,OAAO0D,GAAOxD,GAAYF,EAAgB,SAAQ,WAE1D,MAAO,GAEX,SAASP,GAAKS,GACV,OACKA,EAAW,GAAK,cACjB,IACAiN,GAAY1Q,KAAKuH,OACjB,aAwOR,SAASqJ,GAASxN,GACd,OAAIA,EAAI,KAAQ,IAELA,EAAI,IAAO,EAK1B,SAASyN,GAAY9N,EAAQQ,EAAeyD,EAAKvD,GAC7C,IAAIyG,EAASnH,EAAS,IACtB,OAAQiE,GACJ,IAAK,IACD,OAAOzD,GAAiBE,EAClB,sBACA,sBACV,IAAK,KACD,OAAImN,GAAS7N,GAELmH,GACC3G,GAAiBE,EAAW,cAAa,eAG3CyG,EAAS,aACpB,IAAK,IACD,OAAO3G,EAAgB,eAAW,eACtC,IAAK,KACD,OAAIqN,GAAS7N,GAELmH,GAAU3G,GAAiBE,EAAW,gBAAY,iBAE/CF,EACA2G,EAAS,eAEbA,EAAS,eACpB,IAAK,KACD,OAAI0G,GAAS7N,GAELmH,GACC3G,GAAiBE,EACZ,gBACA,iBAGPyG,EAAS,cACpB,IAAK,IACD,OAAI3G,EACO,QAEJE,EAAW,MAAQ,OAC9B,IAAK,KACD,OAAImN,GAAS7N,GACLQ,EACO2G,EAAS,QAEbA,GAAUzG,EAAW,OAAS,YAC9BF,EACA2G,EAAS,QAEbA,GAAUzG,EAAW,MAAQ,QACxC,IAAK,IACD,OAAIF,EACO,gBAEJE,EAAW,cAAU,eAChC,IAAK,KACD,OAAImN,GAAS7N,GACLQ,EACO2G,EAAS,gBAEbA,GAAUzG,EAAW,eAAW,iBAChCF,EACA2G,EAAS,gBAEbA,GAAUzG,EAAW,cAAU,gBAC1C,IAAK,IACD,OAAOF,GAAiBE,EAAW,QAAO,SAC9C,IAAK,KACD,OAAImN,GAAS7N,GACFmH,GAAU3G,GAAiBE,EAAW,QAAO,WAEjDyG,GAAU3G,GAAiBE,EAAW,QAAO,WApThE1D,EAAOE,aAAa,KAAM,CACtBC,OAAQ,4HAAoGC,MACxG,KAEJC,YAAa,oEAAqDD,MAC9D,KAEJE,SAAU,6EAAsDF,MAAM,KACtEG,cAAe,yCAAgCH,MAAM,KACrDI,YAAa,qBAAqBJ,MAAM,KACxCa,eAAgB,CACZC,GAAI,OACJC,IAAK,UACLC,EAAG,cACHC,GAAI,gBACJC,IAAK,qBACLC,KAAM,4BAEVd,cAAe,SACfC,KAAM,SAAUC,GACZ,MAAyC,MAAlCA,EAAM+I,OAAO,GAAG2C,eAE3BxL,SAAU,SAAUC,EAAOC,EAASC,GAChC,OAAIF,EAAQ,IACW,IAAZE,EAAmB,KAAO,MAEd,IAAZA,EAAmB,KAAO,MAGzCQ,SAAU,CACNC,QAAS,gBACTC,QAAS,oBACTC,SAAU,WACN,OAAOsB,GAAK4J,KAAK5M,MAAM,IAE3B2B,QAAS,oBACTC,SAAU,WACN,OAAOoB,GAAK4J,KAAK5M,MAAM,IAE3B6B,SAAU,KAEdC,aAAc,CACVC,OAAQ,cACRC,KAAM,KACNC,EAAG0O,GACHzO,GAAIyO,GACJxO,EAAGwO,GACHvO,GAAIuO,GACJtO,EAAGsO,GACHrO,GAAIqO,GACJpO,EAAGoO,GACHnO,GAAImO,GACJlO,EAAGkO,GACHjO,GAAIiO,GACJhO,EAAGgO,GACH/N,GAAI+N,IAER9N,uBAAwB,YACxBC,QAAS,MACTE,KAAM,CACFC,IAAK,EACLC,IAAK,KAMbnD,EAAOE,aAAa,QAAS,CACzBC,OAAQ,CACJkH,OAAQ,kkBAA4GjH,MAChH,KAEJkH,WAAY,0fAAgGlH,MACxG,MAGRC,YAAa,sOAAkDD,MAAM,KACrEE,SAAU,mVAAgEF,MACtE,KAEJG,cAAe,6IAA+BH,MAAM,KACpDI,YAAa,6IAA+BJ,MAAM,KAClDa,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,sBACJC,IAAK,6BACLC,KAAM,oCAEVC,SAAU,CACNC,QAAS,sCACTC,QAAS,gCACTE,QAAS,gCACTD,SAAU,WACN,MAAO,yDAEXE,SAAU,WACN,MAAO,0FAEXC,SAAU,KAEdC,aAAc,CACVC,OAAQ,8BACRC,KAAM,8BACNC,EAAG,yFACHC,GAAI,sDACJC,EAAG,2BACHC,GAAI,8BACJC,EAAG,qBACHC,GAAI,wBACJC,EAAG,eACHC,GAAI,kBACJC,EAAG,2BACHC,GAAI,8BACJC,EAAG,2BACHC,GAAI,+BAERpC,cAAe,0LACfC,KAAM,SAAUC,GACZ,MAAO,kGAAuBC,KAAKD,IAEvCE,SAAU,SAAUmD,GAChB,OAAIA,EAAO,EACA,6CACAA,EAAO,GACP,mDACAA,EAAO,GACP,6CAEA,oDAGflB,uBAAwB,8CACxBC,QAAS,SAAUC,EAAQyE,GACvB,OAAQA,GACJ,IAAK,MACL,IAAK,IACL,IAAK,IACL,IAAK,OACD,OAAe,IAAXzE,EACOA,EAAS,gBAEbA,EAAS,gBACpB,QACI,OAAOA,IAGnBC,KAAM,CACFC,IAAK,EACLC,IAAK,KAMbnD,EAAOE,aAAa,KAAM,CACtBC,OAAQ,yFAAyFC,MAC7F,KAEJC,YAAa,kDAAkDD,MAAM,KACrEE,SAAU,6CAA6CF,MAAM,KAC7DG,cAAe,8BAA8BH,MAAM,KACnDI,YAAa,uBAAuBJ,MAAM,KAC1Ca,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,cACJC,IAAK,4BACLC,KAAM,mCAEVd,cAAe,wBACf+H,aAAc,SAAUxE,EAAMnD,GAI1B,OAHa,KAATmD,IACAA,EAAO,GAEM,SAAbnD,EACOmD,EACa,UAAbnD,EACQ,IAARmD,EAAaA,EAAOA,EAAO,GACd,SAAbnD,GAAoC,UAAbA,EACvBmD,EAAO,QADX,GAIXnD,SAAU,SAAUC,EAAOC,EAASC,GAChC,OAAIF,EAAQ,GACD,OACAA,EAAQ,GACR,QACAA,EAAQ,GACR,OAEA,SAGfU,SAAU,CACNC,QAAS,sBACTC,QAAS,mBACTC,SAAU,kBACVC,QAAS,qBACTC,SAAU,uBACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,WACRC,KAAM,eACNC,EAAG,iBACHC,GAAI,WACJC,EAAG,UACHC,GAAI,WACJC,EAAG,QACHC,GAAI,SACJC,EAAG,SACHC,GAAI,UACJC,EAAG,UACHC,GAAI,WACJC,EAAG,UACHC,GAAI,YAERI,KAAM,CACFC,IAAK,EACLC,IAAK,KA0FbnD,EAAOE,aAAa,KAAM,CACtBC,OAAQ,wHAAoFC,MACxF,KAEJC,YAAa,oEAAkDD,MAAM,KACrEE,SAAU,kGAAmFF,MACzF,KAEJG,cAAe,0CAA8BH,MAAM,KACnDI,YAAa,gCAAuBJ,MAAM,KAC1Ca,eAAgB,CACZC,GAAI,OACJC,IAAK,UACLC,EAAG,aACHC,GAAI,eACJC,IAAK,0BACLC,KAAM,iCAEVC,SAAU,CACNC,QAAS,oBACTC,QAAS,uBACTC,SAAU,gBACVC,QAAS,uBACTC,SAAU,gCACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,WACRC,KAAM,uBACNC,EAAG4O,GACH3O,GAAI2O,GACJ1O,EAAG0O,GACHzO,GAAIyO,GACJxO,EAAG,cACHC,GAAIuO,GACJtO,EAAGsO,GACHrO,GAAIqO,GACJpO,EAAGoO,GACHnO,GAAImO,GACJlO,EAAGkO,GACHjO,GAAIiO,IAERhO,uBAAwB,YACxBC,QAAS,MACTE,KAAM,CACFC,IAAK,EACLC,IAAK,KAMbnD,EAAOE,aAAa,QAAS,CACzBC,OAAQ,gGAAgGC,MACpG,KAEJC,YAAa,kDAAkDD,MAAM,KACrEE,SAAU,0EAA2DF,MACjE,KAEJG,cAAe,8BAA8BH,MAAM,KACnDI,YAAa,uBAAuBJ,MAAM,KAC1Ca,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,0BAEVC,SAAU,CACNC,QAAS,iBACTC,QAAS,mBACTC,SAAU,iBACVC,QAAS,iBACTC,SAAU,WACN,OAAQ5B,KAAKuH,OACT,KAAK,EACD,MAAO,6BACX,QACI,MAAO,+BAGnB1F,SAAU,KAEdC,aAAc,CACVC,OAAQ,SAAUE,GACd,OAAQ,YAAYtB,KAAKsB,GAAK,MAAQ,MAAQ,IAAMA,GAExDD,KAAM,QACNC,EAAG,iBACHC,GAAI,aACJC,EAAG,YACHC,GAAI,YACJC,EAAG,SACHC,GAAI,SACJC,EAAG,YACHC,GAAI,YACJC,EAAG,UACHC,GAAI,UACJC,EAAG,UACHC,GAAI,WAERC,uBAAwB,cACxBC,QAAS,SACTE,KAAM,CACFC,IAAK,EACLC,IAAK,KAMbnD,EAAOE,aAAa,KAAM,CACtBC,OAAQ,gGAAgGC,MACpG,KAEJC,YAAa,kDAAkDD,MAAM,KACrEE,SAAU,0EAA2DF,MACjE,KAEJG,cAAe,8BAA8BH,MAAM,KACnDI,YAAa,uBAAuBJ,MAAM,KAC1Ca,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,0BAEVC,SAAU,CACNC,QAAS,WACL,MACI,WACgB,EAAfxB,KAAKa,QAAc,OAA0B,IAAjBb,KAAKa,QAAgB,IAAM,OACxD,OAGRY,QAAS,WACL,MACI,aACgB,EAAfzB,KAAKa,QAAc,OAA0B,IAAjBb,KAAKa,QAAgB,IAAM,OACxD,OAGRa,SAAU,WACN,MACI,WACgB,EAAf1B,KAAKa,QAAc,OAA0B,IAAjBb,KAAKa,QAAgB,IAAM,OACxD,OAGRc,QAAS,WACL,MACI,WACgB,EAAf3B,KAAKa,QAAc,OAA0B,IAAjBb,KAAKa,QAAgB,IAAM,OACxD,OAGRe,SAAU,WACN,OAAQ5B,KAAKuH,OACT,KAAK,EACD,MACI,uBACgB,EAAfvH,KAAKa,QACA,OACiB,IAAjBb,KAAKa,QACL,IACA,OACN,MAER,QACI,MACI,uBACgB,EAAfb,KAAKa,QACA,OACiB,IAAjBb,KAAKa,QACL,IACA,OACN,QAIhBgB,SAAU,KAEdC,aAAc,CACVC,OAAQ,SACRC,KAAM,QACNC,EAAG,iBACHC,GAAI,aACJC,EAAG,YACHC,GAAI,YACJC,EAAG,SACHC,GAAI,SACJC,EAAG,YACHC,GAAI,YACJC,EAAG,UACHC,GAAI,UACJC,EAAG,UACHC,GAAI,WAERC,uBAAwB,cACxBC,QAAS,SACTE,KAAM,CACFC,IAAK,EACLC,IAAK,KAMbnD,EAAOE,aAAa,KAAM,CACtB6Q,KAAM,CACF,CACIC,MAAO,aACPC,OAAQ,EACRC,KAAM,eACNC,OAAQ,SACRC,KAAM,KAEV,CACIJ,MAAO,aACPK,MAAO,aACPJ,OAAQ,EACRC,KAAM,eACNC,OAAQ,SACRC,KAAM,KAEV,CACIJ,MAAO,aACPK,MAAO,aACPJ,OAAQ,EACRC,KAAM,eACNC,OAAQ,SACRC,KAAM,KAEV,CACIJ,MAAO,aACPK,MAAO,aACPJ,OAAQ,EACRC,KAAM,eACNC,OAAQ,SACRC,KAAM,KAEV,CACIJ,MAAO,aACPK,MAAO,aACPJ,OAAQ,EACRC,KAAM,eACNC,OAAQ,SACRC,KAAM,KAEV,CACIJ,MAAO,aACPK,MAAO,aACPJ,OAAQ,EACRC,KAAM,eACNC,OAAQ,KACRC,KAAM,MAEV,CACIJ,MAAO,aACPK,OAAQC,EAAAA,EACRL,OAAQ,EACRC,KAAM,qBACNC,OAAQ,KACRC,KAAM,OAGdG,oBAAqB,qBACrBC,oBAAqB,SAAU7Q,EAAOwE,GAClC,MAAoB,WAAbA,EAAM,GAAa,EAAIsM,SAAStM,EAAM,IAAMxE,EAAO,KAE9DR,OAAQ,qGAAyCC,MAAM,KACvDC,YAAa,qGAAyCD,MAClD,KAEJE,SAAU,uIAA8BF,MAAM,KAC9CG,cAAe,mDAAgBH,MAAM,KACrCI,YAAa,mDAAgBJ,MAAM,KACnCa,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,2BACJC,IAAK,iCACLC,KAAM,sCACNkK,EAAG,aACHZ,GAAI,2BACJC,IAAK,iCACLC,KAAM,uCAEVtK,cAAe,6BACfC,KAAM,SAAUC,GACZ,MAAiB,iBAAVA,GAEXE,SAAU,SAAUmD,EAAMC,EAAQjD,GAC9B,OAAIgD,EAAO,GACA,eAEA,gBAGfxC,SAAU,CACNC,QAAS,oBACTC,QAAS,oBACTC,SAAU,SAAU+P,GAChB,OAAIA,EAAIzO,SAAWhD,KAAKgD,OACb,wBAEA,WAGfrB,QAAS,oBACTC,SAAU,SAAU6P,GAChB,OAAIzR,KAAKgD,SAAWyO,EAAIzO,OACb,wBAEA,WAGfnB,SAAU,KAEdgB,uBAAwB,gBACxBC,QAAS,SAAUC,EAAQyE,GACvB,OAAQA,GACJ,IAAK,IACD,OAAkB,IAAXzE,EAAe,eAAOA,EAAS,SAC1C,IAAK,IACL,IAAK,IACL,IAAK,MACD,OAAOA,EAAS,SACpB,QACI,OAAOA,IAGnBjB,aAAc,CACVC,OAAQ,WACRC,KAAM,WACNC,EAAG,eACHC,GAAI,WACJC,EAAG,UACHC,GAAI,WACJC,EAAG,gBACHC,GAAI,iBACJC,EAAG,UACHC,GAAI,WACJC,EAAG,gBACHC,GAAI,iBACJC,EAAG,UACHC,GAAI,cAMZ7C,EAAOE,aAAa,KAAM,CACtBC,OAAQ,yFAAyFC,MAC7F,KAEJC,YAAa,kDAAkDD,MAAM,KACrEE,SAAU,+CAA+CF,MAAM,KAC/DG,cAAe,8BAA8BH,MAAM,KACnDI,YAAa,uBAAuBJ,MAAM,KAC1Ca,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,cACJC,IAAK,4BACLC,KAAM,mCAEVd,cAAe,6BACf+H,aAAc,SAAUxE,EAAMnD,GAI1B,OAHa,KAATmD,IACAA,EAAO,GAEM,WAAbnD,EACOmD,EACa,WAAbnD,EACQ,IAARmD,EAAaA,EAAOA,EAAO,GACd,WAAbnD,GAAsC,UAAbA,EACzBmD,EAAO,QADX,GAIXnD,SAAU,SAAUC,EAAOC,EAASC,GAChC,OAAIF,EAAQ,GACD,SACAA,EAAQ,GACR,SACAA,EAAQ,GACR,SAEA,SAGfU,SAAU,CACNC,QAAS,2BACTC,QAAS,sBACTC,SAAU,kBACVC,QAAS,wBACTC,SAAU,4BACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,gBACRC,KAAM,uBACNC,EAAG,kBACHC,GAAI,WACJC,EAAG,kBACHC,GAAI,WACJC,EAAG,gBACHC,GAAI,SACJC,EAAG,WACHC,GAAI,YACJC,EAAG,UACHC,GAAI,WACJC,EAAG,SACHC,GAAI,WAERI,KAAM,CACFC,IAAK,EACLC,IAAK,KAMbnD,EAAOE,aAAa,KAAM,CACtBC,OAAQ,whBAAqGC,MACzG,KAEJC,YAAa,sOAAkDD,MAAM,KACrEE,SAAU,CACNgH,WAAY,mVAAgElH,MACxE,KAEJiH,OAAQ,yVAAiEjH,MACrE,KAEJmH,SAAU,mEAEdhH,cAAe,uIAA8BH,MAAM,KACnDI,YAAa,6FAAuBJ,MAAM,KAC1Ca,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,2BAEVC,SAAU,CACNC,QAAS,+CACTC,QAAS,+CACTE,QAAS,qDACTD,SAAU,gEACVE,SAAU,kDACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,SAAUE,GACd,OAAOA,EAAE4B,QAAQ,+HAAiC,SAC9C6N,EACAC,EACAC,GAEA,MAAc,WAAPA,EAAaD,EAAK,eAAOA,EAAKC,EAAK,kBAGlD5P,KAAM,SAAUC,GACZ,MAAI,2HAA4BtB,KAAKsB,GAC1BA,EAAE4B,QAAQ,mBAAU,mCAE3B,2BAAOlD,KAAKsB,GACLA,EAAE4B,QAAQ,4BAAS,+CAEvB5B,GAEXA,EAAG,kFACHC,GAAI,8BACJC,EAAG,2BACHC,GAAI,8BACJC,EAAG,iCACHC,GAAI,oCACJC,EAAG,qBACHC,GAAI,wBACJC,EAAG,qBACHC,GAAI,wBACJC,EAAG,2BACHC,GAAI,+BAERC,uBAAwB,uDACxBC,QAAS,SAAUC,GACf,OAAe,IAAXA,EACOA,EAEI,IAAXA,EACOA,EAAS,gBAGhBA,EAAS,IACRA,GAAU,KAAOA,EAAS,IAAO,GAClCA,EAAS,KAAQ,EAEV,gBAAQA,EAEZA,EAAS,WAEpBC,KAAM,CACFC,IAAK,EACLC,IAAK,KAMb,IAAI2O,GAAa,CACb9M,EAAG,gBACHT,EAAG,gBACHC,EAAG,gBACHC,EAAG,gBACHC,EAAG,gBACHC,EAAG,gBACHC,EAAG,gBACHC,EAAG,gBACHC,EAAG,gBACHC,EAAG,gBACH6B,GAAI,gBACJH,GAAI,gBACJI,GAAI,gBACJkL,GAAI,gBACJrL,GAAI,gBACJI,GAAI,gBACJP,GAAI,gBACJC,GAAI,gBACJO,GAAI,gBACJJ,IAAK,iBAGT3G,EAAOE,aAAa,KAAM,CACtBC,OAAQ,wbAAqFC,MACzF,KAEJC,YAAa,sOAAkDD,MAAM,KACrEE,SAAU,+SAA0DF,MAChE,KAEJG,cAAe,uIAA8BH,MAAM,KACnDI,YAAa,6FAAuBJ,MAAM,KAC1Ca,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,2BAEVC,SAAU,CACNC,QAAS,qEACTC,QAAS,qEACTC,SAAU,2CACVC,QAAS,+DACTC,SAAU,uHACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,0CACRC,KAAM,oCACNC,EAAG,kFACHC,GAAI,0CACJC,EAAG,oDACHC,GAAI,oCACJC,EAAG,oDACHC,GAAI,oCACJC,EAAG,wCACHC,GAAI,wBACJC,EAAG,kCACHC,GAAI,kBACJC,EAAG,wCACHC,GAAI,yBAERC,uBAAwB,sCACxBC,QAAS,SAAUC,GAGf,OAAOA,GAAU8O,GAAW9O,IAAW8O,GAF/B9O,EAAS,KAEuC8O,GADtC,KAAV9O,EAAgB,IAAM,QAGlCC,KAAM,CACFC,IAAK,EACLC,IAAK,KAMb,IAAI6O,GAAc,CACVzN,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,UAETiN,GAAc,CACVC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,KAGb3S,EAAOE,aAAa,KAAM,CACtBC,OAAQ,gXAAyEC,MAC7E,KAEJC,YAAa,gXAAyED,MAClF,KAEJE,SAAU,yPAAiDF,MAAM,KACjEG,cAAe,2EAAoBH,MAAM,KACzCI,YAAa,2EAAoBJ,MAAM,KACvC2D,oBAAoB,EACpB9C,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,2BAEVd,cAAe,gEACfC,KAAM,SAAUC,GACZ,MAAiB,mCAAVA,GAEXE,SAAU,SAAUmD,EAAMC,EAAQjD,GAC9B,OAAIgD,EAAO,GACA,iCAEA,kCAGfxC,SAAU,CACNC,QAAS,2EACTC,QAAS,+DACTC,SAAU,qCACVC,QAAS,iFACTC,SAAU,oGACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,uBACRC,KAAM,uBACNC,EAAG,uFACHC,GAAI,0CACJC,EAAG,6CACHC,GAAI,8BACJC,EAAG,6CACHC,GAAI,8BACJC,EAAG,6CACHC,GAAI,8BACJC,EAAG,iCACHC,GAAI,kBACJC,EAAG,mDACHC,GAAI,qCAERC,uBAAwB,sBACxBC,QAAS,iBACTmC,SAAU,SAAUzB,GAChB,OAAOA,EAAOK,QAAQ,kEAAiB,SAAUqB,GAC7C,OAAO8M,GAAY9M,MAG3BjB,WAAY,SAAUT,GAClB,OAAOA,EAAOK,QAAQ,MAAO,SAAUqB,GACnC,OAAO6M,GAAY7M,MAG3BlC,KAAM,CACFC,IAAK,EACLC,IAAK,KAMb,IAAIyP,GAAc,CACVrO,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,UAET6N,GAAc,CACVC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,KAGbvT,EAAOE,aAAa,KAAM,CACtBC,OAAQ,weAA6FC,MACjG,KAEJC,YAAa,4XAA2ED,MACpF,KAEJ0J,kBAAkB,EAClBxJ,SAAU,+SAA0DF,MAChE,KAEJG,cAAe,iLAAqCH,MAAM,KAC1DI,YAAa,mGAAwBJ,MAAM,KAC3Ca,eAAgB,CACZC,GAAI,SACJC,IAAK,YACLC,EAAG,aACHC,GAAI,cACJC,IAAK,sBACLC,KAAM,6BAEVC,SAAU,CACNC,QAAS,gCACTC,QAAS,gCACTC,SAAU,WACVC,QAAS,4CACTC,SAAU,kDACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,8BACRC,KAAM,oCACNC,EAAG,4EACHC,GAAI,kEACJC,EAAG,0DACHC,GAAI,oCACJC,EAAG,oDACHC,GAAI,8BACJC,EAAG,8CACHC,GAAI,wBACJC,EAAG,gEACHC,GAAI,0CACJC,EAAG,oDACHC,GAAI,+BAERqC,SAAU,SAAUzB,GAChB,OAAOA,EAAOK,QAAQ,kEAAiB,SAAUqB,GAC7C,OAAO0N,GAAY1N,MAG3BjB,WAAY,SAAUT,GAClB,OAAOA,EAAOK,QAAQ,MAAO,SAAUqB,GACnC,OAAOyN,GAAYzN,MAG3B1E,cAAe,kKACf+H,aAAc,SAAUxE,EAAMnD,GAI1B,OAHa,KAATmD,IACAA,EAAO,GAEM,yCAAbnD,EACOmD,EAAO,EAAIA,EAAOA,EAAO,GACZ,qDAAbnD,EACAmD,EACa,qDAAbnD,EACQ,IAARmD,EAAaA,EAAOA,EAAO,GACd,6BAAbnD,EACAmD,EAAO,QADX,GAIXnD,SAAU,SAAUmD,EAAMC,EAAQjD,GAC9B,OAAIgD,EAAO,EACA,uCACAA,EAAO,GACP,mDACAA,EAAO,GACP,mDACAA,EAAO,GACP,2BAEA,wCAGflB,uBAAwB,8BACxBC,QAAS,SAAUC,GACf,OAAOA,EAAS,sBAEpBC,KAAM,CACFC,IAAK,EACLC,IAAK,KAMbnD,EAAOE,aAAa,KAAM,CACtBC,OAAQ,qGAAyCC,MAAM,KACvDC,YAAa,qGAAyCD,MAClD,KAEJE,SAAU,uIAA8BF,MAAM,KAC9CG,cAAe,mDAAgBH,MAAM,KACrCI,YAAa,mDAAgBJ,MAAM,KACnCa,eAAgB,CACZC,GAAI,SACJC,IAAK,YACLC,EAAG,cACHC,GAAI,0BACJC,IAAK,iCACLC,KAAM,sCACNkK,EAAG,cACHZ,GAAI,0BACJC,IAAK,iCACLC,KAAM,uCAEVvJ,SAAU,CACNC,QAAS,kBACTC,QAAS,kBACTC,SAAU,UACVC,QAAS,kBACTC,SAAU,6BACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,YACRC,KAAM,YACNC,EAAG,gBACHC,GAAI,WACJC,EAAG,UACHC,GAAI,WACJC,EAAG,sBACHC,GAAI,iBACJC,EAAG,eACHC,GAAI,WACJC,EAAG,gBACHC,GAAI,WACJC,EAAG,gBACHC,GAAI,YAERC,uBAAwB,gCACxBC,QAAS,SAAUC,EAAQyE,GACvB,OAAQA,GACJ,IAAK,IACL,IAAK,IACL,IAAK,MACD,OAAOzE,EAAS,SACpB,IAAK,IACD,OAAOA,EAAS,SACpB,IAAK,IACL,IAAK,IACD,OAAOA,EAAS,SACpB,QACI,OAAOA,IAGnBvC,cAAe,4BACfC,KAAM,SAAUkK,GACZ,MAAiB,iBAAVA,GAEX/J,SAAU,SAAUmD,EAAMC,EAAQuP,GAC9B,OAAOxP,EAAO,GAAK,eAAO,kBAMlC,IAAIyP,GAAc,CACVlP,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,UAET0O,GAAc,CACVpO,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,KAET4N,GAAW,CACP,sEACA,iCACA,iCACA,iCACA,iCACA,mDACA,uCACA,qBACA,6CACA,sEACA,sEACA,uEAGR3T,EAAOE,aAAa,KAAM,CACtBC,OAAQwT,GACRtT,YAAasT,GACbrT,SAAU,+YAA0EF,MAChF,KAEJG,cAAe,qTAA2DH,MACtE,KAEJI,YAAa,mDAAgBJ,MAAM,KACnC2D,oBAAoB,EACpB9C,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,2BAEVd,cAAe,wFACfC,KAAM,SAAUC,GACZ,MAAO,6CAAUC,KAAKD,IAE1BE,SAAU,SAAUmD,EAAMC,EAAQjD,GAC9B,OAAIgD,EAAO,GACA,6CAEA,8CAGfxC,SAAU,CACNC,QAAS,uFACTC,QAAS,6FACTC,SAAU,uDACVC,QAAS,iFACTC,SAAU,uDACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,wBACRC,KAAM,KACNC,EAAG,wFACHC,GAAI,oCACJC,EAAG,gEACHC,GAAI,0CACJC,EAAG,sEACHC,GAAI,gDACJC,EAAG,8CACHC,GAAI,wBACJC,EAAG,oDACHC,GAAI,8BACJC,EAAG,8CACHC,GAAI,yBAERqC,SAAU,SAAUzB,GAChB,OAAOA,EACFK,QAAQ,kEAAiB,SAAUqB,GAChC,OAAOuO,GAAYvO,KAEtBrB,QAAQ,UAAM,MAEvBI,WAAY,SAAUT,GAClB,OAAOA,EACFK,QAAQ,MAAO,SAAUqB,GACtB,OAAOsO,GAAYtO,KAEtBrB,QAAQ,KAAM,WAEvBb,KAAM,CACFC,IAAK,EACLC,IAAK,MAMb,IAAIyQ,GAAa,CACb5O,EAAG,gBACHT,EAAG,gBACHC,EAAG,gBACHC,EAAG,gBACHC,EAAG,gBACHC,EAAG,gBACHC,EAAG,gBACHC,EAAG,gBACHC,EAAG,gBACHC,EAAG,gBACH6B,GAAI,gBACJH,GAAI,gBACJI,GAAI,gBACJkL,GAAI,gBACJrL,GAAI,gBACJI,GAAI,gBACJP,GAAI,gBACJC,GAAI,gBACJO,GAAI,gBACJJ,IAAK,iBA6DT,SAASkN,GAAsB7Q,EAAQQ,EAAeyD,EAAKvD,GACvD,IAAI2D,EAAS,CACTjF,EAAG,CAAC,aAAc,gBAClBE,EAAG,CAAC,YAAa,eACjBE,EAAG,CAAC,UAAW,aACfE,EAAG,CAAC,WAAY,eAChBE,EAAG,CAAC,UAAW,eAEnB,OAAOY,EAAgB6D,EAAOJ,GAAK,GAAKI,EAAOJ,GAAK,GAuBxD,SAAS6M,GAA4B9Q,GAEjC,GADAA,EAASyO,SAASzO,EAAQ,IACtB+Q,MAAM/Q,GACN,OAAO,EAEX,GAAIA,EAAS,EAET,OAAO,EACJ,GAAIA,EAAS,GAEhB,OAAI,GAAKA,GAAUA,GAAU,EAI1B,GAAIA,EAAS,IAAK,CAErB,IAAI0E,EAAY1E,EAAS,GAEzB,OAAkB,GAAd0E,EACOoM,GAFM9Q,EAAS,IAInB8Q,GAA4BpM,GAChC,GAAI1E,EAAS,IAAO,CAEvB,KAAiB,IAAVA,GACHA,GAAkB,GAEtB,OAAO8Q,GAA4B9Q,GAInC,OAAO8Q,GADP9Q,GAAkB,KAvH1BhD,EAAOE,aAAa,KAAM,CACtBC,OAAQ,saAAkFC,MACtF,KAEJC,YAAa,wPAAqDD,MAC9D,KAEJE,SAAU,qTAA2DF,MACjE,KAEJG,cAAe,uIAA8BH,MAAM,KACnDI,YAAa,6FAAuBJ,MAAM,KAC1Ca,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,2BAEVC,SAAU,CACNC,QAAS,+DACTC,QAAS,+DACTC,SAAU,qCACVC,QAAS,+DACTC,SAAU,4IACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,0CACRC,KAAM,oCACNC,EAAG,kFACHC,GAAI,0CACJC,EAAG,oDACHC,GAAI,oCACJC,EAAG,8CACHC,GAAI,8BACJC,EAAG,wCACHC,GAAI,wBACJC,EAAG,kCACHC,GAAI,kBACJC,EAAG,wCACHC,GAAI,yBAERC,uBAAwB,gEACxBC,QAAS,SAAUC,GAGf,OAAOA,GAAU4Q,GAAW5Q,IAAW4Q,GAF/B5Q,EAAS,KAEuC4Q,GADtC,KAAV5Q,EAAgB,IAAM,QAGlCC,KAAM,CACFC,IAAK,EACLC,IAAK,KAwEbnD,EAAOE,aAAa,KAAM,CACtBC,OAAQ,6FAAuFC,MAC3F,KAEJC,YAAa,+DAA+DD,MACxE,KAEJ0J,kBAAkB,EAClBxJ,SAAU,4EAAmEF,MACzE,KAEJG,cAAe,uCAA8BH,MAAM,KACnDI,YAAa,gCAAuBJ,MAAM,KAC1C2D,oBAAoB,EACpB9C,eAAgB,CACZC,GAAI,cACJC,IAAK,iBACLC,EAAG,aACHC,GAAI,eACJC,IAAK,2BACLC,KAAM,kCAEVC,SAAU,CACNC,QAAS,eACTK,SAAU,IACVJ,QAAS,eACTC,SAAU,eACVC,QAAS,sBACTC,SAAU,WAEN,OAAQ5B,KAAKuH,OACT,KAAK,EACL,KAAK,EACD,MAAO,0BACX,QACI,MAAO,4BAIvBzF,aAAc,CACVC,OAhGR,SAA2ByB,GAEvB,OAAIqQ,GADSrQ,EAAOuQ,OAAO,EAAGvQ,EAAOwI,QAAQ,OAElC,KAAOxI,EAEX,MAAQA,GA4FXxB,KA1FR,SAAyBwB,GAErB,OAAIqQ,GADSrQ,EAAOuQ,OAAO,EAAGvQ,EAAOwI,QAAQ,OAElC,QAAUxI,EAEd,SAAWA,GAsFdvB,EAAG,kBACHC,GAAI,cACJC,EAAGyR,GACHxR,GAAI,cACJC,EAAGuR,GACHtR,GAAI,aACJC,EAAGqR,GACHpR,GAAI,UACJC,EAAGmR,GACHlR,GAAI,cACJC,EAAGiR,GACHhR,GAAI,WAERC,uBAAwB,YACxBC,QAAS,MACTE,KAAM,CACFC,IAAK,EACLC,IAAK,KAMbnD,EAAOE,aAAa,KAAM,CACtBC,OAAQ,wYAA6EC,MACjF,KAEJC,YAAa,wYAA6ED,MACtF,KAEJE,SAAU,uLAAsCF,MAAM,KACtDG,cAAe,2KAAoCH,MAAM,KACzDI,YAAa,qEAAmBJ,MAAM,KACtC2D,oBAAoB,EACpB9C,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,4CAEVd,cAAe,wFACfC,KAAM,SAAUC,GACZ,MAAiB,yCAAVA,GAEXE,SAAU,SAAUmD,EAAMC,EAAQjD,GAC9B,OAAIgD,EAAO,GACA,mDAEA,wCAGfxC,SAAU,CACNC,QAAS,oEACTC,QAAS,0EACTC,SAAU,0EACVC,QAAS,sFACTC,SAAU,kGACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,wBACRC,KAAM,yCACNC,EAAG,mGACHC,GAAI,0CACJC,EAAG,6BACHC,GAAI,8BACJC,EAAG,+CACHC,GAAI,gDACJC,EAAG,uBACHC,GAAI,wBACJC,EAAG,mCACHC,GAAI,oCACJC,EAAG,iBACHC,GAAI,mBAERC,uBAAwB,8BACxBC,QAAS,SAAUC,GACf,MAAO,qBAAQA,KAMvB,IAAIiR,GAAQ,CACR9R,GAAI,4CACJC,EAAG,uCACHC,GAAI,yCACJC,EAAG,gCACHC,GAAI,iCACJC,EAAG,0BACHC,GAAI,2BACJC,EAAG,2CACHC,GAAI,gDACJC,EAAG,wBACHC,GAAI,yBASR,SAASqR,GAAkBlR,EAAQQ,EAAeyD,EAAKvD,GACnD,OAAOF,EACD2D,GAAMF,GAAK,GACXvD,EACAyD,GAAMF,GAAK,GACXE,GAAMF,GAAK,GAErB,SAASkN,GAAQnR,GACb,OAAOA,EAAS,IAAO,GAAe,GAATA,GAAeA,EAAS,GAEzD,SAASmE,GAAMF,GACX,OAAOgN,GAAMhN,GAAK7G,MAAM,KAE5B,SAASgU,GAAYpR,EAAQQ,EAAeyD,EAAKvD,GAC7C,IAAIyG,EAASnH,EAAS,IACtB,OAAe,IAAXA,EAEImH,EAAS+J,GAAkBlR,EAAQQ,EAAeyD,EAAI,GAAIvD,GAEvDF,EACA2G,GAAUgK,GAAQnR,GAAUmE,GAAMF,GAAK,GAAKE,GAAMF,GAAK,IAE1DvD,EACOyG,EAAShD,GAAMF,GAAK,GAEpBkD,GAAUgK,GAAQnR,GAAUmE,GAAMF,GAAK,GAAKE,GAAMF,GAAK,IAI1EjH,EAAOE,aAAa,KAAM,CACtBC,OAAQ,CACJkH,OAAQ,iJAAoGjH,MACxG,KAEJkH,WAAY,2HAAkGlH,MAC1G,KAEJmH,SAAU,+DAEdlH,YAAa,kDAAkDD,MAAM,KACrEE,SAAU,CACN+G,OAAQ,sIAAoFjH,MACxF,KAEJkH,WAAY,0GAA2FlH,MACnG,KAEJmH,SAAU,cAEdhH,cAAe,wCAA8BH,MAAM,KACnDI,YAAa,sBAAiBJ,MAAM,KACpC2D,oBAAoB,EACpB9C,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,wBACJC,IAAK,sCACLC,KAAM,4CACNkK,EAAG,aACHZ,GAAI,wBACJC,IAAK,sCACLC,KAAM,4CAEVvJ,SAAU,CACNC,QAAS,qBACTC,QAAS,aACTC,SAAU,UACVC,QAAS,aACTC,SAAU,+BACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,QACRC,KAAM,gBACNC,EAlFR,SAA0Bc,EAAQQ,EAAeyD,EAAKvD,GAClD,OAAIF,EACO,uBAEAE,EAAW,iCAAoB,mBA+EtCvB,GAAIiS,GACJhS,EAAG8R,GACH7R,GAAI+R,GACJ9R,EAAG4R,GACH3R,GAAI6R,GACJ5R,EAAG0R,GACHzR,GAAI2R,GACJ1R,EAAGwR,GACHvR,GAAIyR,GACJxR,EAAGsR,GACHrR,GAAIuR,IAERtR,uBAAwB,cACxBC,QAAS,SAAUC,GACf,OAAOA,EAAS,QAEpBC,KAAM,CACFC,IAAK,EACLC,IAAK,KAMb,IAAIkR,GAAU,CACVlS,GAAI,0CAAqC/B,MAAM,KAC/CgC,EAAG,0DAAiChC,MAAM,KAC1CiC,GAAI,0DAAiCjC,MAAM,KAC3CkC,EAAG,sCAAiClC,MAAM,KAC1CmC,GAAI,sCAAiCnC,MAAM,KAC3CoC,EAAG,kCAA6BpC,MAAM,KACtCqC,GAAI,kCAA6BrC,MAAM,KACvCsC,EAAG,oEAAiCtC,MAAM,KAC1CuC,GAAI,oEAAiCvC,MAAM,KAC3CwC,EAAG,wBAAwBxC,MAAM,KACjCyC,GAAI,wBAAwBzC,MAAM,MAKtC,SAASiH,GAAOF,EAAOnE,EAAQQ,GAC3B,OAAIA,EAEOR,EAAS,IAAO,GAAKA,EAAS,KAAQ,GAAKmE,EAAM,GAAKA,EAAM,GAI5DnE,EAAS,IAAO,GAAKA,EAAS,KAAQ,GAAKmE,EAAM,GAAKA,EAAM,GAG3E,SAASmN,GAAyBtR,EAAQQ,EAAeyD,GACrD,OAAOjE,EAAS,IAAMqE,GAAOgN,GAAQpN,GAAMjE,EAAQQ,GAEvD,SAAS+Q,GAAyBvR,EAAQQ,EAAeyD,GACrD,OAAOI,GAAOgN,GAAQpN,GAAMjE,EAAQQ,GAMxCxD,EAAOE,aAAa,KAAM,CACtBC,OAAQ,gIAAuGC,MAC3G,KAEJC,YAAa,4DAAkDD,MAAM,KACrEE,SAAU,oFAA0EF,MAChF,KAEJG,cAAe,kBAAkBH,MAAM,KACvCI,YAAa,kBAAkBJ,MAAM,KACrC2D,oBAAoB,EACpB9C,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,cACHC,GAAI,uBACJC,IAAK,8BACLC,KAAM,qCAEVC,SAAU,CACNC,QAAS,4BACTC,QAAS,yBACTC,SAAU,qBACVC,QAAS,sBACTC,SAAU,+CACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,cACRC,KAAM,WACNC,EAlCR,SAAyBc,EAAQQ,GAC7B,OAAOA,EAAgB,sBAAmB,iCAkCtCrB,GAAImS,GACJlS,EAAGmS,GACHlS,GAAIiS,GACJhS,EAAGiS,GACHhS,GAAI+R,GACJ9R,EAAG+R,GACH9R,GAAI6R,GACJ5R,EAAG6R,GACH5R,GAAI2R,GACJ1R,EAAG2R,GACH1R,GAAIyR,IAERxR,uBAAwB,YACxBC,QAAS,MACTE,KAAM,CACFC,IAAK,EACLC,IAAK,KAMb,IAAIqR,GAAa,CACbC,MAAO,CAEHtS,GAAI,CAAC,SAAU,UAAW,WAC1BC,EAAG,CAAC,cAAe,iBACnBC,GAAI,CAAC,QAAS,SAAU,UACxBC,EAAG,CAAC,YAAa,eACjBC,GAAI,CAAC,MAAO,OAAQ,QACpBE,GAAI,CAAC,MAAO,OAAQ,QACpBE,GAAI,CAAC,SAAU,UAAW,WAC1BE,GAAI,CAAC,SAAU,SAAU,WAE7B6R,uBAAwB,SAAU1R,EAAQ2R,GACtC,OAAkB,IAAX3R,EACD2R,EAAQ,GACE,GAAV3R,GAAeA,GAAU,EACzB2R,EAAQ,GACRA,EAAQ,IAElBzK,UAAW,SAAUlH,EAAQQ,EAAeyD,GACxC,IAAI0N,EAAUH,GAAWC,MAAMxN,GAC/B,OAAmB,IAAfA,EAAI2N,OACGpR,EAAgBmR,EAAQ,GAAKA,EAAQ,GAGxC3R,EACA,IACAwR,GAAWE,uBAAuB1R,EAAQ2R,KA+S1D,SAASE,GAAY7R,EAAQQ,EAAeyD,EAAKvD,GAC7C,OAAQuD,GACJ,IAAK,IACD,OAAOzD,EAAgB,4EAAkB,wFAC7C,IAAK,KACD,OAAOR,GAAUQ,EAAgB,wCAAY,qDACjD,IAAK,IACL,IAAK,KACD,OAAOR,GAAUQ,EAAgB,kCAAW,+CAChD,IAAK,IACL,IAAK,KACD,OAAOR,GAAUQ,EAAgB,sBAAS,yCAC9C,IAAK,IACL,IAAK,KACD,OAAOR,GAAUQ,EAAgB,4BAAU,yCAC/C,IAAK,IACL,IAAK,KACD,OAAOR,GAAUQ,EAAgB,sBAAS,mCAC9C,IAAK,IACL,IAAK,KACD,OAAOR,GAAUQ,EAAgB,sBAAS,yCAC9C,QACI,OAAOR,GA/TnBhD,EAAOE,aAAa,KAAM,CACtBC,OAAQ,mFAAmFC,MACvF,KAEJC,YAAa,2DAA2DD,MACpE,KAEJ0J,kBAAkB,EAClBxJ,SAAU,iEAA4DF,MAClE,KAEJG,cAAe,0CAAqCH,MAAM,KAC1DI,YAAa,4BAAuBJ,MAAM,KAC1C2D,oBAAoB,EACpB9C,eAAgB,CACZC,GAAI,OACJC,IAAK,UACLC,EAAG,aACHC,GAAI,eACJC,IAAK,oBACLC,KAAM,2BAEVC,SAAU,CACNC,QAAS,eACTC,QAAS,gBAETC,SAAU,WACN,OAAQ1B,KAAKuH,OACT,KAAK,EACD,MAAO,wBACX,KAAK,EACD,MAAO,uBACX,KAAK,EACD,MAAO,sBACX,KAAK,EACL,KAAK,EACL,KAAK,EACL,KAAK,EACD,MAAO,oBAGnB5F,QAAS,mBACTC,SAAU,WAUN,MATmB,CACf,kCACA,sCACA,iCACA,iCACA,wCACA,gCACA,iCAEgB5B,KAAKuH,QAE7B1F,SAAU,KAEdC,aAAc,CACVC,OAAQ,QACRC,KAAM,WACNC,EAAG,mBACHC,GAAIqS,GAAWtK,UACf9H,EAAGoS,GAAWtK,UACd7H,GAAImS,GAAWtK,UACf5H,EAAGkS,GAAWtK,UACd3H,GAAIiS,GAAWtK,UACf1H,EAAG,MACHC,GAAI+R,GAAWtK,UACfxH,EAAG,SACHC,GAAI6R,GAAWtK,UACftH,EAAG,SACHC,GAAI2R,GAAWtK,WAEnBpH,uBAAwB,YACxBC,QAAS,MACTE,KAAM,CACFC,IAAK,EACLC,IAAK,KAMbnD,EAAOE,aAAa,KAAM,CACtBC,OAAQ,2LAA8IC,MAClJ,KAEJC,YAAa,sEAAiED,MAC1E,KAEJ4J,YAAa,yCACbO,kBAAmB,yCACnBV,iBAAkB,yCAClBW,uBAAwB,yCACxBlK,SAAU,sEAAkDF,MAAM,KAClEG,cAAe,uCAAwBH,MAAM,KAC7CI,YAAa,uCAAwBJ,MAAM,KAC3Ca,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,cACJC,IAAK,wBACLC,KAAM,+BAEVC,SAAU,CACNC,QAAS,wBACTC,QAAS,eACTC,SAAU,cACVC,QAAS,iBACTC,SAAU,2BACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,cACRC,KAAM,WACNC,EAAG,wBACHC,GAAI,iBACJC,EAAG,YACHC,GAAI,YACJC,EAAG,WACHC,GAAI,WACJC,EAAG,QACHC,GAAI,QACJC,EAAG,YACHC,GAAI,YACJC,EAAG,SACHC,GAAI,UAERC,uBAAwB,cACxBC,QAAS,SACTE,KAAM,CACFC,IAAK,EACLC,IAAK,KAMbnD,EAAOE,aAAa,KAAM,CACtBC,OAAQ,ocAAuFC,MAC3F,KAEJC,YAAa,sOAAkDD,MAAM,KACrEE,SAAU,mSAAwDF,MAC9D,KAEJG,cAAe,uIAA8BH,MAAM,KACnDI,YAAa,8EAAuBJ,MAAM,KAC1Ca,eAAgB,CACZC,GAAI,OACJC,IAAK,UACLC,EAAG,YACHC,GAAI,cACJC,IAAK,mBACLC,KAAM,0BAEVC,SAAU,CACNC,QAAS,mDACTC,QAAS,6CACTC,SAAU,wCACVC,QAAS,mDACTC,SAAU,WACN,OAAQ5B,KAAKuH,OACT,KAAK,EACL,KAAK,EACL,KAAK,EACD,MAAO,wFACX,KAAK,EACL,KAAK,EACL,KAAK,EACL,KAAK,EACD,MAAO,0FAGnB1F,SAAU,KAEdC,aAAc,CACVC,OAAQ,kBACRC,KAAM,8BACNC,EAAG,wFACHC,GAAI,gDACJC,EAAG,gEACHC,GAAI,0CACJC,EAAG,8CACHC,GAAI,8BACJC,EAAG,8CACHC,GAAI,8BACJC,EAAG,0DACHC,GAAI,0CACJC,EAAG,gEACHC,GAAI,2CAERC,uBAAwB,0FACxBC,QAAS,SAAUC,GACf,IAAI0E,EAAY1E,EAAS,GACrB2E,EAAc3E,EAAS,IAC3B,OAAe,IAAXA,EACOA,EAAS,gBACO,GAAhB2E,EACA3E,EAAS,gBACK,GAAd2E,GAAoBA,EAAc,GAClC3E,EAAS,gBACK,GAAd0E,EACA1E,EAAS,gBACK,GAAd0E,EACA1E,EAAS,gBACK,GAAd0E,GAAiC,GAAdA,EACnB1E,EAAS,gBAETA,EAAS,iBAGxBC,KAAM,CACFC,IAAK,EACLC,IAAK,KAMbnD,EAAOE,aAAa,KAAM,CACtBC,OAAQ,gdAAyFC,MAC7F,KAEJC,YAAa,8TAAyED,MAClF,KAEJ0J,kBAAkB,EAClBxJ,SAAU,mYAAwEF,MAC9E,KAEJG,cAAe,qNAA2CH,MAAM,KAChEI,YAAa,mGAAwBJ,MAAM,KAC3Ca,eAAgB,CACZC,GAAI,uBACJC,IAAK,0BACLC,EAAG,aACHC,GAAI,cACJC,IAAK,oCACLC,KAAM,2CAEVC,SAAU,CACNC,QAAS,sCACTC,QAAS,gCACTC,SAAU,WACVC,QAAS,4CACTC,SAAU,kDACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,gDACRC,KAAM,oCACNC,EAAG,4EACHC,GAAI,sDACJC,EAAG,sEACHC,GAAI,sDACJC,EAAG,sEACHC,GAAI,sDACJC,EAAG,oDACHC,GAAI,oCACJC,EAAG,8CACHC,GAAI,8BACJC,EAAG,8CACHC,GAAI,+BAERpC,cAAe,mPACf+H,aAAc,SAAUxE,EAAMnD,GAI1B,OAHa,KAATmD,IACAA,EAAO,GAGO,yCAAbnD,GAAiC,GAARmD,GACb,wEAAbnD,GACa,iEAAbA,EAEOmD,EAAO,GAEPA,GAGfnD,SAAU,SAAUmD,EAAMC,EAAQjD,GAC9B,OAAIgD,EAAO,EACA,uCACAA,EAAO,GACP,uCACAA,EAAO,GACP,sEACAA,EAAO,GACP,+DAEA,0CAiCnBhE,EAAOE,aAAa,KAAM,CACtBC,OAAQ,8+BAA+LC,MACnM,KAEJC,YAAa,iQAA6ED,MACtF,KAEJ0J,kBAAkB,EAClBxJ,SAAU,iOAA6CF,MAAM,KAC7DG,cAAe,uIAA8BH,MAAM,KACnDI,YAAa,6FAAuBJ,MAAM,KAC1C2D,oBAAoB,EACpB9C,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,6CACJC,IAAK,mDACLC,KAAM,0DAEVd,cAAe,6BACfC,KAAM,SAAUC,GACZ,MAAiB,iBAAVA,GAEXE,SAAU,SAAUmD,EAAMC,EAAQjD,GAC9B,OAAIgD,EAAO,GACA,eAEA,gBAGfxC,SAAU,CACNC,QAAS,kDACTC,QAAS,kDACTC,SAAU,qCACVC,QAAS,kDACTC,SAAU,6DACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,oCACRC,KAAM,8BACNC,EAAG2S,GACH1S,GAAI0S,GACJzS,EAAGyS,GACHxS,GAAIwS,GACJvS,EAAGuS,GACHtS,GAAIsS,GACJrS,EAAGqS,GACHpS,GAAIoS,GACJnS,EAAGmS,GACHlS,GAAIkS,GACJjS,EAAGiS,GACHhS,GAAIgS,IAER/R,uBAAwB,mCACxBC,QAAS,SAAUC,EAAQyE,GACvB,OAAQA,GACJ,IAAK,IACL,IAAK,IACL,IAAK,MACD,OAAOzE,EAAS,4BACpB,QACI,OAAOA,MAOvB,IAAI8R,GAAc,CACVvQ,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,UAET+P,GAAc,CACV/E,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,KAGb,SAASuE,GAAehS,EAAQQ,EAAeC,EAAQC,GACnD,IAAIgI,EAAS,GACb,GAAIlI,EACA,OAAQC,GACJ,IAAK,IACDiI,EAAS,0DACT,MACJ,IAAK,KACDA,EAAS,oCACT,MACJ,IAAK,IACDA,EAAS,8CACT,MACJ,IAAK,KACDA,EAAS,0CACT,MACJ,IAAK,IACDA,EAAS,kCACT,MACJ,IAAK,KACDA,EAAS,wBACT,MACJ,IAAK,IACDA,EAAS,wCACT,MACJ,IAAK,KACDA,EAAS,8BACT,MACJ,IAAK,IACDA,EAAS,8CACT,MACJ,IAAK,KACDA,EAAS,oCACT,MACJ,IAAK,IACDA,EAAS,wCACT,MACJ,IAAK,KACDA,EAAS,oCACT,WAGR,OAAQjI,GACJ,IAAK,IACDiI,EAAS,sEACT,MACJ,IAAK,KACDA,EAAS,gDACT,MACJ,IAAK,IACDA,EAAS,0DACT,MACJ,IAAK,KACDA,EAAS,gDACT,MACJ,IAAK,IACDA,EAAS,8CACT,MACJ,IAAK,KACDA,EAAS,oCACT,MACJ,IAAK,IACDA,EAAS,oDACT,MACJ,IAAK,KACDA,EAAS,0CACT,MACJ,IAAK,IACDA,EAAS,gEACT,MACJ,IAAK,KACDA,EAAS,sDACT,MACJ,IAAK,IACDA,EAAS,oDACT,MACJ,IAAK,KACDA,EAAS,0CACT,MAGZ,OAAOA,EAAO5H,QAAQ,MAAOd,GAGjChD,EAAOE,aAAa,KAAM,CACtBC,OAAQ,0cAAwFC,MAC5F,KAEJC,YAAa,8VAAgFD,MACzF,KAEJ0J,kBAAkB,EAClBxJ,SAAU,6RAAuDF,MAAM,KACvEG,cAAe,+JAAkCH,MAAM,KACvDI,YAAa,iFAAqBJ,MAAM,KACxCa,eAAgB,CACZC,GAAI,wCACJC,IAAK,2CACLC,EAAG,aACHC,GAAI,cACJC,IAAK,qDACLC,KAAM,4DAEVC,SAAU,CACNC,QAAS,oBACTC,QAAS,sCACTC,SAAU,WACVC,QAAS,0BACTC,SAAU,4CACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,mCACRC,KAAM,yCACNC,EAAG8S,GACH7S,GAAI6S,GACJ5S,EAAG4S,GACH3S,GAAI2S,GACJ1S,EAAG0S,GACHzS,GAAIyS,GACJxS,EAAGwS,GACHvS,GAAIuS,GACJtS,EAAGsS,GACHrS,GAAIqS,GACJpS,EAAGoS,GACHnS,GAAImS,IAER9P,SAAU,SAAUzB,GAChB,OAAOA,EAAOK,QAAQ,kEAAiB,SAAUqB,GAC7C,OAAO4P,GAAY5P,MAG3BjB,WAAY,SAAUT,GAClB,OAAOA,EAAOK,QAAQ,MAAO,SAAUqB,GACnC,OAAO2P,GAAY3P,MAG3B1E,cAAe,2LACf+H,aAAc,SAAUxE,EAAMnD,GAI1B,OAHa,KAATmD,IACAA,EAAO,GAEM,mCAAbnD,GAAqC,mCAAbA,EACjBmD,EAEM,yCAAbnD,GACa,qDAAbA,GACa,yCAAbA,EAEe,IAARmD,EAAaA,EAAOA,EAAO,QAL/B,GAQXnD,SAAU,SAAUmD,EAAMC,EAAQjD,GAC9B,OAAY,GAARgD,GAAaA,EAAO,EACb,iCACAA,EAAO,GACP,iCACAA,EAAO,GACP,uCACAA,EAAO,GACP,mDAEA,wCAGff,KAAM,CACFC,IAAK,EACLC,IAAK,KAMbnD,EAAOE,aAAa,QAAS,CACzBC,OAAQ,oFAAoFC,MACxF,KAEJC,YAAa,kDAAkDD,MAAM,KACrEE,SAAU,6CAA6CF,MAAM,KAC7DG,cAAe,8BAA8BH,MAAM,KACnDI,YAAa,uBAAuBJ,MAAM,KAC1Ca,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,cACJC,IAAK,4BACLC,KAAM,mCAEVd,cAAe,8BACf+H,aAAc,SAAUxE,EAAMnD,GAI1B,OAHa,KAATmD,IACAA,EAAO,GAEM,SAAbnD,EACOmD,EACa,cAAbnD,EACQ,IAARmD,EAAaA,EAAOA,EAAO,GACd,WAAbnD,GAAsC,UAAbA,EACzBmD,EAAO,QADX,GAIXnD,SAAU,SAAUC,EAAOC,EAASC,GAChC,OAAIF,EAAQ,GACD,OACAA,EAAQ,GACR,YACAA,EAAQ,GACR,SAEA,SAGfU,SAAU,CACNC,QAAS,sBACTC,QAAS,kBACTC,SAAU,kBACVC,QAAS,sBACTC,SAAU,wBACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,WACRC,KAAM,gBACNC,EAAG,gBACHC,GAAI,UACJC,EAAG,UACHC,GAAI,WACJC,EAAG,QACHC,GAAI,SACJC,EAAG,SACHC,GAAI,UACJC,EAAG,UACHC,GAAI,WACJC,EAAG,UACHC,GAAI,YAERI,KAAM,CACFC,IAAK,EACLC,IAAK,KAMbnD,EAAOE,aAAa,KAAM,CACtBC,OAAQ,oFAAoFC,MACxF,KAEJC,YAAa,kDAAkDD,MAAM,KACrEE,SAAU,6CAA6CF,MAAM,KAC7DG,cAAe,8BAA8BH,MAAM,KACnDI,YAAa,uBAAuBJ,MAAM,KAC1Ca,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,cACJC,IAAK,4BACLC,KAAM,mCAEVd,cAAe,8BACf+H,aAAc,SAAUxE,EAAMnD,GAI1B,OAHa,KAATmD,IACAA,EAAO,GAEM,SAAbnD,EACOmD,EACa,cAAbnD,EACQ,IAARmD,EAAaA,EAAOA,EAAO,GACd,WAAbnD,GAAsC,UAAbA,EACzBmD,EAAO,QADX,GAIXnD,SAAU,SAAUC,EAAOC,EAASC,GAChC,OAAIF,EAAQ,GACD,OACAA,EAAQ,GACR,YACAA,EAAQ,GACR,SAEA,SAGfU,SAAU,CACNC,QAAS,sBACTC,QAAS,kBACTC,SAAU,kBACVC,QAAS,sBACTC,SAAU,wBACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,WACRC,KAAM,gBACNC,EAAG,gBACHC,GAAI,UACJC,EAAG,UACHC,GAAI,WACJC,EAAG,QACHC,GAAI,SACJC,EAAG,SACHC,GAAI,UACJC,EAAG,UACHC,GAAI,WACJC,EAAG,UACHC,GAAI,YAERI,KAAM,CACFC,IAAK,EACLC,IAAK,KAMbnD,EAAOE,aAAa,KAAM,CACtBC,OAAQ,kGAAwFC,MAC5F,KAEJC,YAAa,4DAAkDD,MAAM,KACrEE,SAAU,0FAAiEF,MACvE,KAEJG,cAAe,6CAA8BH,MAAM,KACnDI,YAAa,sCAAuBJ,MAAM,KAC1Ca,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,2BAEVC,SAAU,CACNC,QAAS,iBACTC,QAAS,sBACTC,SAAU,gBACVC,QAAS,0BACTC,SAAU,iCACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,aACRC,KAAM,SACNC,EAAG,eACHC,GAAI,aACJC,EAAG,SACHC,GAAI,YACJC,EAAG,cACHC,GAAI,kBACJC,EAAG,eACHC,GAAI,iBACJC,EAAG,QACHC,GAAI,UACJC,EAAG,OACHC,GAAI,UAERC,uBAAwB,cACxBC,QAAS,SACTE,KAAM,CACFC,IAAK,EACLC,IAAK,KAMb,IAAI8R,GAAc,CACV1Q,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,UAETkQ,GAAc,CACVC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,KAGb5V,EAAOE,aAAa,KAAM,CACtBC,OAAQ,4dAA2FC,MAC/F,KAEJC,YAAa,4OAAmDD,MAAM,KACtEE,SAAU,mSAAwDF,MAC9D,KAEJG,cAAe,qHAA2BH,MAAM,KAChDI,YAAa,qHAA2BJ,MAAM,KAE9Ca,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,0BAEVC,SAAU,CACNC,QAAS,gDACTC,QAAS,6EACTC,SAAU,+BACVC,QAAS,sDACTC,SAAU,8FACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,6DACRC,KAAM,yEACNC,EAAG,wFACHC,GAAI,gDACJC,EAAG,mDACHC,GAAI,oCACJC,EAAG,6CACHC,GAAI,8BACJC,EAAG,uCACHC,GAAI,wBACJC,EAAG,2BACHC,GAAI,YACJC,EAAG,6CACHC,GAAI,+BAERqC,SAAU,SAAUzB,GAChB,OAAOA,EAAOK,QAAQ,kEAAiB,SAAUqB,GAC7C,OAAO+P,GAAY/P,MAG3BjB,WAAY,SAAUT,GAClB,OAAOA,EAAOK,QAAQ,MAAO,SAAUqB,GACnC,OAAO8P,GAAY9P,MAG3BlC,KAAM,CACFC,IAAK,EACLC,IAAK,KAMbnD,EAAOE,aAAa,KAAM,CACtBC,OAAQ,qFAAqFC,MACzF,KAEJC,YAAa,6DAA6DD,MACtE,KAEJ0J,kBAAkB,EAClBxJ,SAAU,2DAAqDF,MAAM,KACrEG,cAAe,oCAA8BH,MAAM,KACnDI,YAAa,6BAAuBJ,MAAM,KAC1C2D,oBAAoB,EACpB9C,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,eACJC,IAAK,2BACLC,KAAM,iCAEVC,SAAU,CACNC,QAAS,iBACTC,QAAS,oBACTC,SAAU,gBACVC,QAAS,oBACTC,SAAU,0BACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,QACRC,KAAM,WACNC,EAAG,gBACHC,GAAI,cACJC,EAAG,aACHC,GAAI,cACJC,EAAG,UACHC,GAAI,WACJC,EAAG,SACHC,GAAI,WACJC,EAAG,cACHC,GAAI,gBACJC,EAAG,YACHC,GAAI,YAERC,uBAAwB,YACxBC,QAAS,MACTE,KAAM,CACFC,IAAK,EACLC,IAAK,KAMb,IAAI0S,GAAc,CACVtR,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,UAET8Q,GAAc,CACV9F,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,KAGbzQ,EAAOE,aAAa,KAAM,CACtBC,OAAQ,ocAAuFC,MAC3F,KAEJC,YAAa,uTAAuED,MAChF,KAEJ0J,kBAAkB,EAClBxJ,SAAU,mSAAwDF,MAC9D,KAEJG,cAAe,4KAA0CH,MAAM,KAC/DI,YAAa,wFAA4BJ,MAAM,KAC/C2D,oBAAoB,EACpB9C,eAAgB,CACZC,GAAI,wCACJC,IAAK,2CACLC,EAAG,aACHC,GAAI,cACJC,IAAK,qDACLC,KAAM,4DAEV2D,SAAU,SAAUzB,GAChB,OAAOA,EAAOK,QAAQ,kEAAiB,SAAUqB,GAC7C,OAAO2Q,GAAY3Q,MAG3BjB,WAAY,SAAUT,GAClB,OAAOA,EAAOK,QAAQ,MAAO,SAAUqB,GACnC,OAAO0Q,GAAY1Q,MAG3B1E,cAAe,wHACf+H,aAAc,SAAUxE,EAAMnD,GAI1B,OAHa,KAATmD,IACAA,EAAO,GAEM,6BAAbnD,EACOmD,EAAO,EAAIA,EAAOA,EAAO,GACZ,mCAAbnD,EACAmD,EACa,yCAAbnD,EACQ,IAARmD,EAAaA,EAAOA,EAAO,GACd,6BAAbnD,EACAmD,EAAO,QADX,GAIXnD,SAAU,SAAUmD,EAAMC,EAAQjD,GAC9B,OAAIgD,EAAO,EACA,2BACAA,EAAO,GACP,iCACAA,EAAO,GACP,uCACAA,EAAO,GACP,2BAEA,4BAGfxC,SAAU,CACNC,QAAS,oBACTC,QAAS,gCACTC,SAAU,8CACVC,QAAS,gCACTC,SAAU,wCACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,iBACRC,KAAM,oCACNC,EAAG,oDACHC,GAAI,gDACJC,EAAG,8CACHC,GAAI,oCACJC,EAAG,8CACHC,GAAI,oCACJC,EAAG,kCACHC,GAAI,wBACJC,EAAG,8CACHC,GAAI,oCACJC,EAAG,wCACHC,GAAI,+BAERI,KAAM,CACFC,IAAK,EACLC,IAAK,KAMb,IAAI4S,GAAwB,6DAA6D3V,MACjF,KAEJ4V,GAA2B,kDAAkD5V,MACzE,KAEJ6V,GAAgB,CACZ,QACA,QACA,iBACA,QACA,SACA,cACA,cACA,QACA,QACA,QACA,QACA,SAEJC,GAAgB,qKAEpBlW,EAAOE,aAAa,QAAS,CACzBC,OAAQ,0FAA0FC,MAC9F,KAEJC,YAAa,SAAU+B,EAAGiF,GACtB,OAAKjF,EAEM,QAAQxB,KAAKyG,GACb2O,GAAyB5T,EAAE+J,SAE3B4J,GAAsB3T,EAAE+J,SAJxB4J,IAQf/L,YAAakM,GACbrM,iBAAkBqM,GAClB3L,kBAAmB,4FACnBC,uBAAwB,mFAExBT,YAAakM,GACbxL,gBAAiBwL,GACjBvL,iBAAkBuL,GAElB3V,SAAU,6DAA6DF,MACnE,KAEJG,cAAe,8BAA8BH,MAAM,KACnDI,YAAa,uBAAuBJ,MAAM,KAC1C2D,oBAAoB,EACpB9C,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,0BAEVC,SAAU,CACNC,QAAS,kBACTC,QAAS,iBACTC,SAAU,eACVC,QAAS,mBACTC,SAAU,2BACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,UACRC,KAAM,aACNC,EAAG,oBACHC,GAAI,cACJC,EAAG,mBACHC,GAAI,aACJC,EAAG,gBACHC,GAAI,SACJC,EAAG,gBACHC,GAAI,WACJC,EAAG,kBACHC,GAAI,aACJC,EAAG,iBACHC,GAAI,WAERC,uBAAwB,kBACxBC,QAAS,SAAUC,GACf,OACIA,GACY,IAAXA,GAA2B,IAAXA,GAA0B,IAAVA,EAAe,MAAQ,OAGhEC,KAAM,CACFC,IAAK,EACLC,IAAK,KAMb,IAAIgT,GAAwB,6DAA6D/V,MACjF,KAEJgW,GAA2B,kDAAkDhW,MACzE,KAEJiW,GAAgB,CACZ,QACA,QACA,iBACA,QACA,SACA,cACA,cACA,QACA,QACA,QACA,QACA,SAEJC,GAAgB,qKAEpBtW,EAAOE,aAAa,KAAM,CACtBC,OAAQ,0FAA0FC,MAC9F,KAEJC,YAAa,SAAU+B,EAAGiF,GACtB,OAAKjF,EAEM,QAAQxB,KAAKyG,GACb+O,GAAyBhU,EAAE+J,SAE3BgK,GAAsB/T,EAAE+J,SAJxBgK,IAQfnM,YAAasM,GACbzM,iBAAkByM,GAClB/L,kBAAmB,4FACnBC,uBAAwB,mFAExBT,YAAasM,GACb5L,gBAAiB4L,GACjB3L,iBAAkB2L,GAElB/V,SAAU,6DAA6DF,MACnE,KAEJG,cAAe,8BAA8BH,MAAM,KACnDI,YAAa,uBAAuBJ,MAAM,KAC1C2D,oBAAoB,EACpB9C,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,0BAEVC,SAAU,CACNC,QAAS,kBACTC,QAAS,iBACTC,SAAU,eACVC,QAAS,mBACTC,SAAU,2BACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,UACRC,KAAM,aACNC,EAAG,oBACHC,GAAI,cACJC,EAAG,mBACHC,GAAI,aACJC,EAAG,gBACHC,GAAI,SACJC,EAAG,gBACHC,GAAI,WACJC,EAAG,kBACHC,GAAI,aACJC,EAAG,iBACHC,GAAI,WAERC,uBAAwB,kBACxBC,QAAS,SAAUC,GACf,OACIA,GACY,IAAXA,GAA2B,IAAXA,GAA0B,IAAVA,EAAe,MAAQ,OAGhEC,KAAM,CACFC,IAAK,EACLC,IAAK,KAMbnD,EAAOE,aAAa,KAAM,CACtBC,OAAQ,qFAAqFC,MACzF,KAEJC,YAAa,6DAA6DD,MACtE,KAEJ0J,kBAAkB,EAClBxJ,SAAU,wDAAqDF,MAAM,KACrEG,cAAe,kCAA+BH,MAAM,KACpDI,YAAa,0BAAuBJ,MAAM,KAC1C2D,oBAAoB,EACpB9C,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,eACJC,IAAK,0BACLC,KAAM,iCAEVC,SAAU,CACNC,QAAS,oBACTC,QAAS,uBACTC,SAAU,mBACVC,QAAS,uBACTC,SAAU,sCACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,QACRC,KAAM,WACNC,EAAG,eACHC,GAAI,YACJC,EAAG,aACHC,GAAI,YACJC,EAAG,WACHC,GAAI,WACJC,EAAG,UACHC,GAAI,WACJC,EAAG,eACHC,GAAI,gBACJC,EAAG,YACHC,GAAI,YAERC,uBAAwB,YACxBC,QAAS,MACTE,KAAM,CACFC,IAAK,EACLC,IAAK,KAMbnD,EAAOE,aAAa,SAAU,CAC1BC,OAAQ,CACJmH,WAAY,iGAAqFlH,MAC7F,KAEJiH,OAAQ,kIAAsHjH,MAC1H,KAEJmH,SAAU,mBAEdlH,YAAa,kEAA+DD,MACxE,KAEJ0J,kBAAkB,EAClBxJ,SAAU,iEAA2DF,MACjE,KAEJG,cAAe,8BAA8BH,MAAM,KACnDI,YAAa,uBAAuBJ,MAAM,KAC1C2D,oBAAoB,EACpB9C,eAAgB,CACZC,GAAI,OACJC,IAAK,UACLC,EAAG,aACHC,GAAI,mBACJwJ,GAAI,aACJvJ,IAAK,4BACLwJ,IAAK,mBACLvJ,KAAM,iCACNwJ,KAAM,wBAEVvJ,SAAU,CACNC,QAAS,gBACTC,QAAS,eACTC,SAAU,cACVC,QAAS,gBACTC,SAAU,qBACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,eACRC,KAAM,QACNC,EAAG,gBACHC,GAAI,cACJC,EAAG,aACHC,GAAI,aACJC,EAAG,UACHC,GAAI,UACJC,EAAG,UACHC,GAAI,WACJC,EAAG,SACHC,GAAI,WACJC,EAAG,QACHC,GAAI,UAERC,uBAAwB,wBACxBC,QAAS,SAAUC,EAAQyE,GAcvB,OAAOzE,GAHQ,MAAXyE,GAA6B,MAAXA,EATP,IAAXzE,EACM,IACW,IAAXA,EACA,IACW,IAAXA,EACA,IACW,IAAXA,EACA,IACA,OAEG,MAIjBC,KAAM,CACFC,IAAK,EACLC,IAAK,KAMb,IAAIoT,GAAc,CACVhS,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,UAETwR,GAAc,CACVC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,KAGblX,EAAOE,aAAa,QAAS,CAEzBC,OAAQ,8VAAsEC,MAC1E,KAEJC,YAAa,8VAAsED,MAC/E,KAEJE,SAAU,ySAAyDF,MAC/D,KAEJG,cAAe,yJAAiCH,MAAM,KACtDI,YAAa,yJAAiCJ,MAAM,KACpDa,eAAgB,CACZC,GAAI,4BACJC,IAAK,+BACLC,EAAG,aACHC,GAAI,cACJC,IAAK,yCACLC,KAAM,gDAEVC,SAAU,CACNC,QAAS,oBACTC,QAAS,oBACTC,SAAU,sCACVC,QAAS,oBACTC,SAAU,4CACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,8BACRC,KAAM,oCACNC,EAAG,oDACHC,GAAI,oCACJC,EAAG,wCACHC,GAAI,8BACJC,EAAG,8CACHC,GAAI,8BACJC,EAAG,wCACHC,GAAI,wBACJC,EAAG,oDACHC,GAAI,oCACJC,EAAG,wCACHC,GAAI,yBAERqC,SAAU,SAAUzB,GAChB,OAAOA,EAAOK,QAAQ,kEAAiB,SAAUqB,GAC7C,OAAOqR,GAAYrR,MAG3BjB,WAAY,SAAUT,GAClB,OAAOA,EAAOK,QAAQ,MAAO,SAAUqB,GACnC,OAAOoR,GAAYpR,MAK3B1E,cAAe,4GACf+H,aAAc,SAAUxE,EAAMnD,GAI1B,OAHa,KAATmD,IACAA,EAAO,GAEM,uBAAbnD,EACOmD,EAAO,EAAIA,EAAOA,EAAO,GACZ,6BAAbnD,EACAmD,EACa,yCAAbnD,EACQ,IAARmD,EAAaA,EAAOA,EAAO,GACd,6BAAbnD,EACAmD,EAAO,QADX,GAIXnD,SAAU,SAAUmD,EAAMC,EAAQjD,GAC9B,OAAIgD,EAAO,EACA,qBACAA,EAAO,GACP,2BACAA,EAAO,GACP,uCACAA,EAAO,GACP,2BAEA,sBAGff,KAAM,CACFC,IAAK,EACLC,IAAK,KAMb,IAAIgU,GAAmB,iIAAmG/W,MAClH,KAEJgX,GAAmB,+GAAqGhX,MACpH,KAER,SAASiX,GAAShU,GACd,OAAOA,EAAI,GAAK,GAAc,EAATA,EAAI,OAAaA,EAAI,IAAM,IAAO,EAE3D,SAASiU,GAAYtU,EAAQQ,EAAeyD,GACxC,IAAIkD,EAASnH,EAAS,IACtB,OAAQiE,GACJ,IAAK,KACD,OAAOkD,GAAUkN,GAASrU,GAAU,UAAY,UACpD,IAAK,IACD,OAAOQ,EAAgB,SAAW,cACtC,IAAK,KACD,OAAO2G,GAAUkN,GAASrU,GAAU,SAAW,SACnD,IAAK,IACD,OAAOQ,EAAgB,UAAY,eACvC,IAAK,KACD,OAAO2G,GAAUkN,GAASrU,GAAU,UAAY,UACpD,IAAK,KACD,OAAOmH,GAAUkN,GAASrU,GAAU,gBAAa,iBACrD,IAAK,KACD,OAAOmH,GAAUkN,GAASrU,GAAU,OAAS,QAmNzD,SAASuU,GAAyBvU,EAAQQ,EAAeyD,GAarD,OAAOjE,GAHa,IAAhBA,EAAS,KAAwB,KAAVA,GAAiBA,EAAS,KAAQ,EAC7C,OAFA,KARH,CACLb,GAAI,UACJE,GAAI,SACJE,GAAI,MACJE,GAAI,OACJE,GAAI,OACJE,GAAI,OAMuBoE,GA8DvC,SAASuQ,GAAyBxU,EAAQQ,EAAeyD,GACrD,IAToBC,EAChBC,EAgBJ,MAAY,MAARF,EACOzD,EAAgB,uCAAW,uCAE3BR,EAAS,KApBAkE,GAoB6BlE,EAnB7CmE,EAQS,CACThF,GAAIqB,EAAgB,6HAA2B,6HAC/CnB,GAAImB,EAAgB,2GAAwB,2GAC5CjB,GAAI,6EACJE,GAAI,uEACJE,GAAI,iHACJE,GAAI,kEAKkCoE,GAnBzB7G,MAAM,KAChB8G,EAAM,IAAO,GAAKA,EAAM,KAAQ,GACjCC,EAAM,GACM,GAAZD,EAAM,IAAWA,EAAM,IAAM,IAAMA,EAAM,IAAM,IAAmB,IAAbA,EAAM,KAC3DC,EAAM,GACNA,EAAM,IAxRhBnH,EAAOE,aAAa,KAAM,CACtBC,OAAQ,SAAU6L,EAAgB3E,GAC9B,OAAK2E,EAEiB,KAAX3E,EAKH,IACA+P,GAAiBpL,EAAeG,SAChC,IACAgL,GAAiBnL,EAAeG,SAChC,IAEG,SAASvL,KAAKyG,GACd+P,GAAiBpL,EAAeG,SAEhCgL,GAAiBnL,EAAeG,SAfhCgL,IAkBf9W,YAAa,uDAAkDD,MAAM,KACrEE,SAAU,4EAA6DF,MACnE,KAEJG,cAAe,gCAA2BH,MAAM,KAChDI,YAAa,4BAAuBJ,MAAM,KAC1Ca,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,2BAEVC,SAAU,CACNC,QAAS,mBACTC,QAAS,eACTC,SAAU,WACN,OAAQ1B,KAAKuH,OACT,KAAK,EACD,MAAO,0BAEX,KAAK,EACD,MAAO,mBAEX,KAAK,EACD,MAAO,2BAEX,KAAK,EACD,MAAO,uBAEX,QACI,MAAO,oBAGnB5F,QAAS,iBACTC,SAAU,WACN,OAAQ5B,KAAKuH,OACT,KAAK,EACD,MAAO,2CACX,KAAK,EACD,MAAO,4CACX,KAAK,EACD,MAAO,wCACX,QACI,MAAO,gCAGnB1F,SAAU,KAEdC,aAAc,CACVC,OAAQ,QACRC,KAAM,UACNC,EAAG,eACHC,GAAImV,GACJlV,EAAGkV,GACHjV,GAAIiV,GACJhV,EAAGgV,GACH/U,GAAI+U,GACJ9U,EAAG,eACHC,GAAI,SACJC,EAAG,eACHC,GAAI2U,GACJ1U,EAAG,MACHC,GAAIyU,IAERxU,uBAAwB,YACxBC,QAAS,MACTE,KAAM,CACFC,IAAK,EACLC,IAAK,KAMbnD,EAAOE,aAAa,QAAS,CACzBC,OAAQ,8FAA2FC,MAC/F,KAEJC,YAAa,kDAAkDD,MAAM,KACrEE,SAAU,uFAAiFF,MACvF,KAEJG,cAAe,iCAA8BH,MAAM,KACnDI,YAAa,yCAAuBJ,MAAM,KAC1C2D,oBAAoB,EACpB9C,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,wBACJC,IAAK,sCACLC,KAAM,6CAEVC,SAAU,CACNC,QAAS,kBACTC,QAAS,uBACTC,SAAU,kBACVC,QAAS,mBACTC,SAAU,WACN,OAAsB,IAAf5B,KAAKuH,OAA8B,IAAfvH,KAAKuH,MAC1B,8BACA,+BAEV1F,SAAU,KAEdC,aAAc,CACVC,OAAQ,QACRC,KAAM,WACNC,EAAG,kBACHC,GAAI,cACJC,EAAG,YACHC,GAAI,aACJC,EAAG,WACHC,GAAI,WACJC,EAAG,SACHC,GAAI,UACJC,EAAG,YACHC,GAAI,WACJC,EAAG,SACHC,GAAI,WAERC,uBAAwB,cACxBC,QAAS,WAKb/C,EAAOE,aAAa,KAAM,CACtBC,OAAQ,8FAA2FC,MAC/F,KAEJC,YAAa,kDAAkDD,MAAM,KACrEE,SAAU,uFAAiFF,MACvF,KAEJG,cAAe,iCAA8BH,MAAM,KACnDI,YAAa,yCAAuBJ,MAAM,KAC1C2D,oBAAoB,EACpB9C,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,wBACJC,IAAK,8BACLC,KAAM,qCAEVC,SAAU,CACNC,QAAS,kBACTC,QAAS,uBACTC,SAAU,kBACVC,QAAS,mBACTC,SAAU,WACN,OAAsB,IAAf5B,KAAKuH,OAA8B,IAAfvH,KAAKuH,MAC1B,8BACA,+BAEV1F,SAAU,KAEdC,aAAc,CACVC,OAAQ,QACRC,KAAM,WACNC,EAAG,WACHC,GAAI,cACJC,EAAG,YACHC,GAAI,aACJC,EAAG,WACHC,GAAI,WACJC,EAAG,SACHC,GAAI,UACJC,EAAG,YACHC,GAAI,WACJC,EAAG,SACHC,GAAI,WAERC,uBAAwB,cACxBC,QAAS,SACTE,KAAM,CACFC,IAAK,EACLC,IAAK,KAsBbnD,EAAOE,aAAa,KAAM,CACtBC,OAAQ,oGAAoGC,MACxG,KAEJC,YAAa,+DAA+DD,MACxE,KAEJ0J,kBAAkB,EAClBxJ,SAAU,yEAAkDF,MAAM,KAClEG,cAAe,iCAA8BH,MAAM,KACnDI,YAAa,0BAAuBJ,MAAM,KAC1Ca,eAAgB,CACZC,GAAI,OACJC,IAAK,UACLC,EAAG,aACHC,GAAI,cACJC,IAAK,mBACLC,KAAM,0BAEVC,SAAU,CACNC,QAAS,cACTC,QAAS,mBACTC,SAAU,eACVC,QAAS,eACTC,SAAU,uBACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,WACRC,KAAM,qBACNC,EAAG,oBACHC,GAAIoV,GACJnV,EAAG,WACHC,GAAIkV,GACJjV,EAAG,aACHC,GAAIgV,GACJ/U,EAAG,OACHC,GAAI8U,GACJ7U,EAAG,cACHC,GAAI4U,GACJ3U,EAAG,QACHC,GAAI0U,IAERtU,KAAM,CACFC,IAAK,EACLC,IAAK,KA6Bb,IAAIsU,GAAgB,CAChB,uBACA,uBACA,uBACA,uBACA,+BACA,uBACA,uBACA,uBACA,uBACA,uBACA,uBACA,wBAMJzX,EAAOE,aAAa,KAAM,CACtBC,OAAQ,CACJkH,OAAQ,kbAAoFjH,MACxF,KAEJkH,WAAY,saAAkFlH,MAC1F,MAGRC,YAAa,CAETgH,OAAQ,6QAAgEjH,MACpE,KAEJkH,WAAY,kRAAgElH,MACxE,MAGRE,SAAU,CACNgH,WAAY,mVAAgElH,MACxE,KAEJiH,OAAQ,mVAAgEjH,MACpE,KAEJmH,SAAU,0JAEdhH,cAAe,6FAAuBH,MAAM,KAC5CI,YAAa,6FAAuBJ,MAAM,KAC1C2J,YAAa0N,GACbhN,gBAAiBgN,GACjB/M,iBAAkB+M,GAGlBzN,YAAa,+wBAGbH,iBAAkB,+wBAGlBU,kBAAmB,wgBAGnBC,uBAAwB,8TACxBvJ,eAAgB,CACZC,GAAI,OACJC,IAAK,UACLC,EAAG,aACHC,GAAI,sBACJC,IAAK,4BACLC,KAAM,mCAEVC,SAAU,CACNC,QAAS,0DACTC,QAAS,oDACTE,QAAS,8CACTD,SAAU,SAAU+P,GAChB,GAAIA,EAAIzO,SAAWhD,KAAKgD,OAcpB,OAAmB,IAAfhD,KAAKuH,MACE,mCAEA,6BAhBX,OAAQvH,KAAKuH,OACT,KAAK,EACD,MAAO,oFACX,KAAK,EACL,KAAK,EACL,KAAK,EACD,MAAO,oFACX,KAAK,EACL,KAAK,EACL,KAAK,EACD,MAAO,sFAUvB3F,SAAU,SAAU6P,GAChB,GAAIA,EAAIzO,SAAWhD,KAAKgD,OAcpB,OAAmB,IAAfhD,KAAKuH,MACE,mCAEA,6BAhBX,OAAQvH,KAAKuH,OACT,KAAK,EACD,MAAO,wEACX,KAAK,EACL,KAAK,EACL,KAAK,EACD,MAAO,wEACX,KAAK,EACL,KAAK,EACL,KAAK,EACD,MAAO,0EAUvB1F,SAAU,KAEdC,aAAc,CACVC,OAAQ,oCACRC,KAAM,oCACNC,EAAG,8FACHC,GAAIqV,GACJpV,EAAGoV,GACHnV,GAAImV,GACJlV,EAAG,qBACHC,GAAIiV,GACJhV,EAAG,2BACHC,GAAI+U,GACJ9U,EAAG,iCACHC,GAAI6U,GACJ5U,EAAG,qBACHC,GAAI2U,IAER/W,cAAe,6GACfC,KAAM,SAAUC,GACZ,MAAO,8DAAiBC,KAAKD,IAEjCE,SAAU,SAAUmD,EAAMC,EAAQjD,GAC9B,OAAIgD,EAAO,EACA,2BACAA,EAAO,GACP,2BACAA,EAAO,GACP,qBAEA,wCAGflB,uBAAwB,uCACxBC,QAAS,SAAUC,EAAQyE,GACvB,OAAQA,GACJ,IAAK,IACL,IAAK,IACL,IAAK,MACD,OAAOzE,EAAS,UACpB,IAAK,IACD,OAAOA,EAAS,gBACpB,IAAK,IACL,IAAK,IACD,OAAOA,EAAS,UACpB,QACI,OAAOA,IAGnBC,KAAM,CACFC,IAAK,EACLC,IAAK,KAMb,IAAIuU,GAAW,CACP,iCACA,6CACA,2BACA,iCACA,qBACA,qBACA,uCACA,2BACA,6CACA,uCACA,iCACA,kCAEJC,GAAO,CAAC,qBAAO,2BAAQ,iCAAS,2BAAQ,2BAAQ,qBAAO,4BAE3D3X,EAAOE,aAAa,KAAM,CACtBC,OAAQuX,GACRrX,YAAaqX,GACbpX,SAAUqX,GACVpX,cAAeoX,GACfnX,YAAamX,GACb1W,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,gCAEVd,cAAe,wCACfC,KAAM,SAAUC,GACZ,MAAO,uBAAUA,GAErBE,SAAU,SAAUmD,EAAMC,EAAQjD,GAC9B,OAAIgD,EAAO,GACA,qBAEJ,sBAEXxC,SAAU,CACNC,QAAS,oBACTC,QAAS,sCACTC,SAAU,2EACVC,QAAS,sCACTC,SAAU,mFACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,wBACRC,KAAM,kBACNC,EAAG,oDACHC,GAAI,oCACJC,EAAG,kCACHC,GAAI,wBACJC,EAAG,wCACHC,GAAI,8BACJC,EAAG,8CACHC,GAAI,oCACJC,EAAG,8CACHC,GAAI,oCACJC,EAAG,kCACHC,GAAI,yBAERqC,SAAU,SAAUzB,GAChB,OAAOA,EAAOK,QAAQ,UAAM,MAEhCI,WAAY,SAAUT,GAClB,OAAOA,EAAOK,QAAQ,KAAM,WAEhCb,KAAM,CACFC,IAAK,EACLC,IAAK,KAMbnD,EAAOE,aAAa,KAAM,CACtBC,OAAQ,wNAAmJC,MACvJ,KAEJC,YAAa,oFAA6DD,MACtE,KAEJE,SAAU,gGAA6EF,MACnF,KAEJG,cAAe,2CAAmCH,MAAM,KACxDI,YAAa,gBAAgBJ,MAAM,KACnCa,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,oBACJC,IAAK,gCACLC,KAAM,uCAEVC,SAAU,CACNC,QAAS,eACTC,QAAS,iBACTC,SAAU,eACVC,QAAS,eACTC,SAAU,wBACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,iBACRC,KAAM,gBACNC,EAAG,mBACHC,GAAI,eACJC,EAAG,eACHC,GAAI,cACJC,EAAG,cACHC,GAAI,aACJC,EAAG,cACHC,GAAI,cACJC,EAAG,gBACHC,GAAI,cACJC,EAAG,aACHC,GAAI,YAERC,uBAAwB,YACxBC,QAAS,MACTE,KAAM,CACFC,IAAK,EACLC,IAAK,KAObnD,EAAOE,aAAa,KAAM,CACtBC,OAAQ,sgBAAkGC,MACtG,KAEJC,YAAa,0QAAwDD,MACjE,KAEJE,SAAU,mVAAgEF,MACtE,KAEJG,cAAe,mJAAgCH,MAAM,KACrDI,YAAa,iFAAqBJ,MAAM,KACxC2D,oBAAoB,EACpB9C,eAAgB,CACZC,GAAI,SACJC,IAAK,YACLC,EAAG,aACHC,GAAI,cACJC,IAAK,sBACLC,KAAM,0DAEVC,SAAU,CACNC,QAAS,4BACTC,QAAS,kCACTC,SAAU,kBACVC,QAAS,kCACTC,SAAU,yDACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,6BACRC,KAAM,oCACNC,EAAG,sEACHC,GAAI,oCACJC,EAAG,yDACHC,GAAI,sDACJC,EAAG,qBACHC,GAAI,wBACJC,EAAG,2BACHC,GAAI,wBACJC,EAAG,2BACHC,GAAI,wBACJC,EAAG,qBACHC,GAAI,yBAERC,uBAAwB,mCACxBC,QAAS,SAAUC,GACf,OAAOA,EAAS,6BAEpBvC,cAAe,iHACfC,KAAM,SAAUC,GACZ,MAAiB,mBAAVA,GAA8B,0CAAVA,GAE/BE,SAAU,SAAUC,EAAOC,EAASC,GAChC,OAAY,GAARF,EACOE,EAAU,iBAAS,wCAEnBA,EAAU,uBAAU,2CAOvC,IAAI4W,GAAW,yGAAoFxX,MAC3F,KAEJyX,GAAgB,2DAAkDzX,MAAM,KAC5E,SAAS0X,GAASzU,GACd,OAAW,EAAJA,GAASA,EAAI,EAExB,SAAS0U,GAAY/U,EAAQQ,EAAeyD,EAAKvD,GAC7C,IAAIyG,EAASnH,EAAS,IACtB,OAAQiE,GACJ,IAAK,IACD,OAAOzD,GAAiBE,EAAW,mBAAe,mBACtD,IAAK,KACD,OAAIF,GAAiBE,EACVyG,GAAU2N,GAAS9U,GAAU,UAAY,aAEzCmH,EAAS,YAExB,IAAK,IACD,OAAO3G,EAAgB,YAAWE,EAAW,YAAW,aAC5D,IAAK,KACD,OAAIF,GAAiBE,EACVyG,GAAU2N,GAAS9U,GAAU,YAAW,YAExCmH,EAAS,cAExB,IAAK,IACD,OAAO3G,EAAgB,SAAWE,EAAW,SAAW,UAC5D,IAAK,KACD,OAAIF,GAAiBE,EACVyG,GAAU2N,GAAS9U,GAAU,SAAW,YAExCmH,EAAS,WAExB,IAAK,IACD,OAAO3G,GAAiBE,EAAW,WAAQ,YAC/C,IAAK,KACD,OAAIF,GAAiBE,EACVyG,GAAU2N,GAAS9U,GAAU,MAAQ,UAErCmH,EAAS,aAExB,IAAK,IACD,OAAO3G,GAAiBE,EAAW,SAAW,WAClD,IAAK,KACD,OAAIF,GAAiBE,EACVyG,GAAU2N,GAAS9U,GAAU,UAAY,YAEzCmH,EAAS,WAExB,IAAK,IACD,OAAO3G,GAAiBE,EAAW,MAAQ,QAC/C,IAAK,KACD,OAAIF,GAAiBE,EACVyG,GAAU2N,GAAS9U,GAAU,OAAS,SAEtCmH,EAAS,SAoFhC,SAAS6N,GAAsBhV,EAAQQ,EAAeyD,EAAKvD,GACvD,IAAIyG,EAASnH,EAAS,IACtB,OAAQiE,GACJ,IAAK,IACD,OAAOzD,GAAiBE,EAClB,eACA,kBACV,IAAK,KAUD,OARIyG,GADW,IAAXnH,EACUQ,EAAgB,UAAY,UACpB,IAAXR,EACGQ,GAAiBE,EAAW,UAAY,WAC3CV,EAAS,EACNQ,GAAiBE,EAAW,UAAY,WAExC,SAGlB,IAAK,IACD,OAAOF,EAAgB,aAAe,aAC1C,IAAK,KAUD,OARI2G,GADW,IAAXnH,EACUQ,EAAgB,SAAW,SACnB,IAAXR,EACGQ,GAAiBE,EAAW,SAAW,WAC1CV,EAAS,EACNQ,GAAiBE,EAAW,SAAW,WAEvCF,GAAiBE,EAAW,QAAU,WAGxD,IAAK,IACD,OAAOF,EAAgB,UAAY,UACvC,IAAK,KAUD,OARI2G,GADW,IAAXnH,EACUQ,EAAgB,MAAQ,MAChB,IAAXR,EACGQ,GAAiBE,EAAW,MAAQ,QACvCV,EAAS,EACNQ,GAAiBE,EAAW,MAAQ,QAEpCF,GAAiBE,EAAW,KAAO,QAGrD,IAAK,IACD,OAAOF,GAAiBE,EAAW,SAAW,YAClD,IAAK,KAQD,OANIyG,GADW,IAAXnH,EACUQ,GAAiBE,EAAW,MAAQ,OAC5B,IAAXV,EACGQ,GAAiBE,EAAW,MAAQ,UAEpCF,GAAiBE,EAAW,MAAQ,QAGtD,IAAK,IACD,OAAOF,GAAiBE,EAAW,WAAa,eACpD,IAAK,KAUD,OARIyG,GADW,IAAXnH,EACUQ,GAAiBE,EAAW,QAAU,UAC9B,IAAXV,EACGQ,GAAiBE,EAAW,SAAW,WAC1CV,EAAS,EACNQ,GAAiBE,EAAW,SAAW,SAEvCF,GAAiBE,EAAW,UAAY,SAG1D,IAAK,IACD,OAAOF,GAAiBE,EAAW,WAAa,aACpD,IAAK,KAUD,OARIyG,GADW,IAAXnH,EACUQ,GAAiBE,EAAW,OAAS,QAC7B,IAAXV,EACGQ,GAAiBE,EAAW,OAAS,SACxCV,EAAS,EACNQ,GAAiBE,EAAW,OAAS,OAErCF,GAAiBE,EAAW,MAAQ,QA7J9D1D,EAAOE,aAAa,KAAM,CACtBC,OAAQyX,GACRvX,YAAawX,GACbvX,SAAU,gEAAsDF,MAAM,KACtEG,cAAe,4BAAuBH,MAAM,KAC5CI,YAAa,4BAAuBJ,MAAM,KAC1Ca,eAAgB,CACZC,GAAI,OACJC,IAAK,UACLC,EAAG,aACHC,GAAI,eACJC,IAAK,oBACLC,KAAM,0BAEVC,SAAU,CACNC,QAAS,cACTC,QAAS,gBACTC,SAAU,WACN,OAAQ1B,KAAKuH,OACT,KAAK,EACD,MAAO,uBACX,KAAK,EACL,KAAK,EACD,MAAO,kBACX,KAAK,EACD,MAAO,kBACX,KAAK,EACD,MAAO,yBACX,KAAK,EACD,MAAO,kBACX,KAAK,EACD,MAAO,oBAGnB5F,QAAS,oBACTC,SAAU,WACN,OAAQ5B,KAAKuH,OACT,KAAK,EACD,MAAO,+BACX,KAAK,EACL,KAAK,EACD,MAAO,0BACX,KAAK,EACD,MAAO,0BACX,KAAK,EACL,KAAK,EACD,MAAO,0BACX,KAAK,EACD,MAAO,4BAGnB1F,SAAU,KAEdC,aAAc,CACVC,OAAQ,QACRC,KAAM,UACNC,EAAG6V,GACH5V,GAAI4V,GACJ3V,EAAG2V,GACH1V,GAAI0V,GACJzV,EAAGyV,GACHxV,GAAIwV,GACJvV,EAAGuV,GACHtV,GAAIsV,GACJrV,EAAGqV,GACHpV,GAAIoV,GACJnV,EAAGmV,GACHlV,GAAIkV,IAERjV,uBAAwB,YACxBC,QAAS,MACTE,KAAM,CACFC,IAAK,EACLC,IAAK,KA0FbnD,EAAOE,aAAa,KAAM,CACtBC,OAAQ,wFAAwFC,MAC5F,KAEJC,YAAa,8DAA8DD,MACvE,KAEJ0J,kBAAkB,EAClBxJ,SAAU,2DAAsDF,MAAM,KACtEG,cAAe,0CAAqCH,MAAM,KAC1DI,YAAa,4BAAuBJ,MAAM,KAC1C2D,oBAAoB,EACpB9C,eAAgB,CACZC,GAAI,OACJC,IAAK,UACLC,EAAG,eACHC,GAAI,eACJC,IAAK,oBACLC,KAAM,2BAEVC,SAAU,CACNC,QAAS,gBACTC,QAAS,gBAETC,SAAU,WACN,OAAQ1B,KAAKuH,OACT,KAAK,EACD,MAAO,wBACX,KAAK,EACD,MAAO,sBACX,KAAK,EACD,MAAO,uBACX,KAAK,EACL,KAAK,EACL,KAAK,EACL,KAAK,EACD,MAAO,qBAGnB5F,QAAS,sBACTC,SAAU,WACN,OAAQ5B,KAAKuH,OACT,KAAK,EACD,MAAO,oCACX,KAAK,EACD,MAAO,kCACX,KAAK,EACD,MAAO,mCACX,KAAK,EACL,KAAK,EACL,KAAK,EACL,KAAK,EACD,MAAO,iCAGnB1F,SAAU,KAEdC,aAAc,CACVC,OAAQ,cACRC,KAAM,UACNC,EAAG8V,GACH7V,GAAI6V,GACJ5V,EAAG4V,GACH3V,GAAI2V,GACJ1V,EAAG0V,GACHzV,GAAIyV,GACJxV,EAAGwV,GACHvV,GAAIuV,GACJtV,EAAGsV,GACHrV,GAAIqV,GACJpV,EAAGoV,GACHnV,GAAImV,IAERlV,uBAAwB,YACxBC,QAAS,MACTE,KAAM,CACFC,IAAK,EACLC,IAAK,KAMbnD,EAAOE,aAAa,KAAM,CACtBC,OAAQ,mFAAgFC,MACpF,KAEJC,YAAa,qDAAkDD,MAAM,KACrEE,SAAU,8EAA4DF,MAClE,KAEJG,cAAe,oCAA8BH,MAAM,KACnDI,YAAa,sBAAmBJ,MAAM,KACtC2D,oBAAoB,EACpBtD,cAAe,QACfC,KAAM,SAAUC,GACZ,MAA2B,MAApBA,EAAM+I,OAAO,IAExB7I,SAAU,SAAUC,EAAOC,EAASC,GAChC,OAAOF,EAAQ,GAAK,KAAO,MAE/BG,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,2BAEVC,SAAU,CACNC,QAAS,iBACTC,QAAS,sBACTC,SAAU,kBACVC,QAAS,iBACTC,SAAU,2BACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,WACRC,KAAM,mBACNC,EAAG,eACHC,GAAI,aACJC,EAAG,mBACHC,GAAI,YACJC,EAAG,gBACHC,GAAI,YACJC,EAAG,iBACHC,GAAI,aACJC,EAAG,cACHC,GAAI,UACJC,EAAG,aACHC,GAAI,WAERC,uBAAwB,YACxBC,QAAS,MACTE,KAAM,CACFC,IAAK,EACLC,IAAK,KAMb,IAAI8U,GAAe,CACfxD,MAAO,CAEHtS,GAAI,CAAC,6CAAW,6CAAW,8CAC3BC,EAAG,CAAC,gEAAe,uEACnBC,GAAI,CAAC,iCAAS,uCAAU,wCACxBC,EAAG,CAAC,oDAAa,iEACjBC,GAAI,CAAC,qBAAO,2BAAQ,4BACpBE,GAAI,CAAC,qBAAO,2BAAQ,4BACpBE,GAAI,CAAC,iCAAS,uCAAU,wCACxBE,GAAI,CAAC,uCAAU,uCAAU,yCAE7B6R,uBAAwB,SAAU1R,EAAQ2R,GACtC,OAAkB,IAAX3R,EACD2R,EAAQ,GACE,GAAV3R,GAAeA,GAAU,EACzB2R,EAAQ,GACRA,EAAQ,IAElBzK,UAAW,SAAUlH,EAAQQ,EAAeyD,GACxC,IAAI0N,EAAUsD,GAAaxD,MAAMxN,GACjC,OAAmB,IAAfA,EAAI2N,OACGpR,EAAgBmR,EAAQ,GAAKA,EAAQ,GAGxC3R,EACA,IACAiV,GAAavD,uBAAuB1R,EAAQ2R,KAM5D3U,EAAOE,aAAa,UAAW,CAC3BC,OAAQ,4aAAmFC,MACvF,KAEJC,YAAa,+OAA2DD,MACpE,KAEJ0J,kBAAkB,EAClBxJ,SAAU,uRAAsDF,MAAM,KACtEG,cAAe,8IAAqCH,MAAM,KAC1DI,YAAa,6FAAuBJ,MAAM,KAC1C2D,oBAAoB,EACpB9C,eAAgB,CACZC,GAAI,OACJC,IAAK,UACLC,EAAG,aACHC,GAAI,eACJC,IAAK,oBACLC,KAAM,2BAEVC,SAAU,CACNC,QAAS,6CACTC,QAAS,6CACTC,SAAU,WACN,OAAQ1B,KAAKuH,OACT,KAAK,EACD,MAAO,8DACX,KAAK,EACD,MAAO,wDACX,KAAK,EACD,MAAO,8DACX,KAAK,EACL,KAAK,EACL,KAAK,EACL,KAAK,EACD,MAAO,8BAGnB5F,QAAS,uCACTC,SAAU,WAUN,MATmB,CACf,4FACA,oHACA,kGACA,sFACA,8GACA,4FACA,6FAEgB5B,KAAKuH,QAE7B1F,SAAU,KAEdC,aAAc,CACVC,OAAQ,kBACRC,KAAM,wBACNC,EAAG,8FACHC,GAAI8V,GAAa/N,UACjB9H,EAAG6V,GAAa/N,UAChB7H,GAAI4V,GAAa/N,UACjB5H,EAAG2V,GAAa/N,UAChB3H,GAAI0V,GAAa/N,UACjB1H,EAAG,qBACHC,GAAIwV,GAAa/N,UACjBxH,EAAG,iCACHC,GAAIsV,GAAa/N,UACjBtH,EAAG,uCACHC,GAAIoV,GAAa/N,WAErBpH,uBAAwB,YACxBC,QAAS,MACTE,KAAM,CACFC,IAAK,EACLC,IAAK,KAMb,IAAI+U,GAAe,CACfzD,MAAO,CAEHtS,GAAI,CAAC,UAAW,UAAW,WAC3BC,EAAG,CAAC,cAAe,gBACnBC,GAAI,CAAC,QAAS,SAAU,UACxBC,EAAG,CAAC,YAAa,eACjBC,GAAI,CAAC,MAAO,OAAQ,QACpBE,GAAI,CAAC,MAAO,OAAQ,QACpBE,GAAI,CAAC,QAAS,SAAU,UACxBE,GAAI,CAAC,SAAU,SAAU,WAE7B6R,uBAAwB,SAAU1R,EAAQ2R,GACtC,OAAkB,IAAX3R,EACD2R,EAAQ,GACE,GAAV3R,GAAeA,GAAU,EACzB2R,EAAQ,GACRA,EAAQ,IAElBzK,UAAW,SAAUlH,EAAQQ,EAAeyD,GACxC,IAAI0N,EAAUuD,GAAazD,MAAMxN,GACjC,OAAmB,IAAfA,EAAI2N,OACGpR,EAAgBmR,EAAQ,GAAKA,EAAQ,GAGxC3R,EACA,IACAkV,GAAaxD,uBAAuB1R,EAAQ2R,KAM5D3U,EAAOE,aAAa,KAAM,CACtBC,OAAQ,mFAAmFC,MACvF,KAEJC,YAAa,2DAA2DD,MACpE,KAEJ0J,kBAAkB,EAClBxJ,SAAU,6DAAwDF,MAC9D,KAEJG,cAAe,0CAAqCH,MAAM,KAC1DI,YAAa,4BAAuBJ,MAAM,KAC1C2D,oBAAoB,EACpB9C,eAAgB,CACZC,GAAI,OACJC,IAAK,UACLC,EAAG,aACHC,GAAI,eACJC,IAAK,oBACLC,KAAM,2BAEVC,SAAU,CACNC,QAAS,eACTC,QAAS,eACTC,SAAU,WACN,OAAQ1B,KAAKuH,OACT,KAAK,EACD,MAAO,uBACX,KAAK,EACD,MAAO,qBACX,KAAK,EACD,MAAO,sBACX,KAAK,EACL,KAAK,EACL,KAAK,EACL,KAAK,EACD,MAAO,oBAGnB5F,QAAS,mBACTC,SAAU,WAUN,MATmB,CACf,iCACA,qCACA,iCACA,+BACA,wCACA,gCACA,iCAEgB5B,KAAKuH,QAE7B1F,SAAU,KAEdC,aAAc,CACVC,OAAQ,QACRC,KAAM,SACNC,EAAG,mBACHC,GAAI+V,GAAahO,UACjB9H,EAAG8V,GAAahO,UAChB7H,GAAI6V,GAAahO,UACjB5H,EAAG4V,GAAahO,UAChB3H,GAAI2V,GAAahO,UACjB1H,EAAG,MACHC,GAAIyV,GAAahO,UACjBxH,EAAG,QACHC,GAAIuV,GAAahO,UACjBtH,EAAG,SACHC,GAAIqV,GAAahO,WAErBpH,uBAAwB,YACxBC,QAAS,MACTE,KAAM,CACFC,IAAK,EACLC,IAAK,KAMbnD,EAAOE,aAAa,KAAM,CACtBC,OAAQ,mHAAmHC,MACvH,KAEJC,YAAa,kDAAkDD,MAAM,KACrEE,SAAU,sEAAsEF,MAC5E,KAEJG,cAAe,8BAA8BH,MAAM,KACnDI,YAAa,uBAAuBJ,MAAM,KAC1C2D,oBAAoB,EACpB9C,eAAgB,CACZC,GAAI,SACJC,IAAK,YACLC,EAAG,aACHC,GAAI,cACJC,IAAK,qBACLC,KAAM,4BAEVC,SAAU,CACNC,QAAS,mBACTC,QAAS,kBACTC,SAAU,gBACVC,QAAS,iBACTC,SAAU,8BACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,SACRC,KAAM,iBACNC,EAAG,qBACHC,GAAI,cACJC,EAAG,SACHC,GAAI,aACJC,EAAG,SACHC,GAAI,aACJC,EAAG,UACHC,GAAI,cACJC,EAAG,UACHC,GAAI,cACJC,EAAG,UACHC,GAAI,eAERpC,cAAe,mCACfI,SAAU,SAAUC,EAAOC,EAASC,GAChC,OAAIF,EAAQ,GACD,UACAA,EAAQ,GACR,QACAA,EAAQ,GACR,aAEA,WAGf0H,aAAc,SAAUxE,EAAMnD,GAI1B,OAHa,KAATmD,IACAA,EAAO,GAEM,YAAbnD,EACOmD,EACa,UAAbnD,EACQ,IAARmD,EAAaA,EAAOA,EAAO,GACd,eAAbnD,GAA0C,YAAbA,EACvB,IAATmD,EACO,EAEJA,EAAO,QAJX,GAOXlB,uBAAwB,UACxBC,QAAS,KACTE,KAAM,CACFC,IAAK,EACLC,IAAK,KAMbnD,EAAOE,aAAa,KAAM,CACtBC,OAAQ,wFAAwFC,MAC5F,KAEJC,YAAa,kDAAkDD,MAAM,KACrEE,SAAU,6DAAoDF,MAAM,KACpEG,cAAe,uCAA8BH,MAAM,KACnDI,YAAa,gCAAuBJ,MAAM,KAC1Ca,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,cACJC,IAAK,0BACLC,KAAM,+BACNuJ,IAAK,mBACLC,KAAM,wBAEVvJ,SAAU,CACNC,QAAS,YACTC,QAAS,eACTE,QAAS,eACTD,SAAU,kBACVE,SAAU,iBACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,QACRC,KAAM,kBACNC,EAAG,oBACHC,GAAI,cACJC,EAAG,WACHC,GAAI,aACJC,EAAG,WACHC,GAAI,YACJC,EAAG,SACHC,GAAI,WACJC,EAAG,cACHC,GAAI,gBACJC,EAAG,YACHC,GAAI,YAERC,uBAAwB,mBACxBC,QAAS,SAAUC,GACf,IAAIwG,EAAIxG,EAAS,GAWjB,OAAOA,GAT6B,MAAxBA,EAAS,IAAO,MAER,GAANwG,GAEM,GAANA,GADA,KAFA,OAUlBvG,KAAM,CACFC,IAAK,EACLC,IAAK,KAMbnD,EAAOE,aAAa,KAAM,CACtBC,OAAQ,sFAAsFC,MAC1F,KAEJC,YAAa,kDAAkDD,MAAM,KACrEE,SAAU,8DAA8DF,MACpE,KAEJG,cAAe,kCAAkCH,MAAM,KACvDI,YAAa,uBAAuBJ,MAAM,KAC1C2D,oBAAoB,EACpB9C,eAAgB,CACZC,GAAI,UACJC,IAAK,WACLC,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,2BAEVC,SAAU,CACNC,QAAS,eACTC,QAAS,iBACTC,SAAU,8BACVC,QAAS,YACTC,SAAU,kCACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,aACRC,KAAM,WACNC,EAAG,aACHC,GAAI,aACJC,EAAG,cACHC,GAAI,YACJC,EAAG,aACHC,GAAI,WACJC,EAAG,YACHC,GAAI,UACJC,EAAG,cACHC,GAAI,WACJC,EAAG,cACHC,GAAI,YAERI,KAAM,CACFC,IAAK,EACLC,IAAK,KAMb,IAAIgV,GAAc,CACV5T,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,UAEToT,GAAc,CACVC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,KAGb9Y,EAAOE,aAAa,KAAM,CACtBC,OAAQ,sdAA0FC,MAC9F,KAEJC,YAAa,sdAA0FD,MACnG,KAEJE,SAAU,ugBAA8FF,MACpG,KAEJG,cAAe,qQAAmDH,MAC9D,KAEJI,YAAa,uFAAsBJ,MAAM,KACzCa,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,cACJC,IAAK,qBACLC,KAAM,4BAEVC,SAAU,CACNC,QAAS,sCACTC,QAAS,gCACTC,SAAU,WACVC,QAAS,4CACTC,SAAU,2EACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,wBACRC,KAAM,8BACNC,EAAG,+FACHC,GAAI,4DACJC,EAAG,gEACHC,GAAI,kEACJC,EAAG,uEACHC,GAAI,uDACJC,EAAG,8CACHC,GAAI,gDACJC,EAAG,oDACHC,GAAI,sDACJC,EAAG,0DACHC,GAAI,uDAERC,uBAAwB,4BACxBC,QAAS,SAAUC,GACf,OAAOA,EAAS,sBAEpBkC,SAAU,SAAUzB,GAChB,OAAOA,EAAOK,QAAQ,kEAAiB,SAAUqB,GAC7C,OAAOiT,GAAYjT,MAG3BjB,WAAY,SAAUT,GAClB,OAAOA,EAAOK,QAAQ,MAAO,SAAUqB,GACnC,OAAOgT,GAAYhT,MAI3B1E,cAAe,wMACfI,SAAU,SAAUmD,EAAMC,EAAQjD,GAC9B,OAAIgD,EAAO,EACA,kCACAA,EAAO,EACP,kCACAA,EAAO,GACP,4BACAA,EAAO,GACP,8CACAA,EAAO,GACP,8CACAA,EAAO,GACP,4BAEA,mCAGfwE,aAAc,SAAUxE,EAAMnD,GAI1B,OAHa,KAATmD,IACAA,EAAO,GAEM,mCAAbnD,EACOmD,EAAO,EAAIA,EAAOA,EAAO,GACZ,mCAAbnD,GAAqC,6BAAbA,GAEX,+CAAbA,GACQ,IAARmD,EAFAA,EAIAA,EAAO,IAGtBf,KAAM,CACFC,IAAK,EACLC,IAAK,KAMbnD,EAAOE,aAAa,KAAM,CACtBC,OAAQ,0cAAwFC,MAC5F,KAEJC,YAAa,oSAAmED,MAC5E,KAEJ0J,kBAAkB,EAClBxJ,SAAU,uUAA8DF,MACpE,KAEJG,cAAe,+JAAkCH,MAAM,KACvDI,YAAa,iFAAqBJ,MAAM,KACxCa,eAAgB,CACZC,GAAI,SACJC,IAAK,YACLC,EAAG,aACHC,GAAI,cACJC,IAAK,sBACLC,KAAM,6BAEVC,SAAU,CACNC,QAAS,gCACTC,QAAS,gCACTC,SAAU,WACVC,QAAS,sCACTC,SAAU,0BACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,kBACRC,KAAM,0CACNC,EAAG,kFACHC,GAAI,gDACJC,EAAG,oDACHC,GAAI,sDACJC,EAAG,kCACHC,GAAI,oCACJC,EAAG,wCACHC,GAAI,0CACJC,EAAG,kCACHC,GAAI,oCACJC,EAAG,gEACHC,GAAI,mEAERC,uBAAwB,gBACxBC,QAAS,WACTtC,cAAe,wKACf+H,aAAc,SAAUxE,EAAMnD,GAI1B,OAHa,KAATmD,IACAA,EAAO,GAEM,yCAAbnD,EACOmD,EAAO,EAAIA,EAAOA,EAAO,GACZ,6BAAbnD,EACAmD,EACa,2DAAbnD,EACQ,IAARmD,EAAaA,EAAOA,EAAO,GACd,qDAAbnD,EACAmD,EAAO,QADX,GAIXnD,SAAU,SAAUmD,EAAMC,EAAQjD,GAC9B,OAAIgD,EAAO,EACA,uCACAA,EAAO,GACP,2BACAA,EAAO,GACP,yDACAA,EAAO,GACP,mDAEA,wCAGff,KAAM,CACFC,IAAK,EACLC,IAAK,KAMbnD,EAAOE,aAAa,MAAO,CACvBC,OAAQ,6FAA0FC,MAC9F,KAEJC,YAAa,kDAAkDD,MAAM,KACrEE,SAAU,kDAAkDF,MAAM,KAClEG,cAAe,iCAAiCH,MAAM,KACtDI,YAAa,yBAAyBJ,MAAM,KAC5Ca,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,2BAEVC,SAAU,CACNC,QAAS,gBACTC,QAAS,gBACTC,SAAU,gBACVC,QAAS,oBACTC,SAAU,+BACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,SACRC,KAAM,WACNC,EAAG,gBACHC,GAAI,aACJC,EAAG,aACHC,GAAI,YACJC,EAAG,WACHC,GAAI,UACJC,EAAG,YACHC,GAAI,WACJC,EAAG,YACHC,GAAI,WACJC,EAAG,YACHC,GAAI,YAERC,uBAAwB,uBACxBC,QAAS,SAAUC,GACf,IAAIwG,EAAIxG,EAAS,GAWjB,OAAOA,GAT6B,MAAxBA,EAAS,IAAO,IACd,KACM,GAANwG,EACA,KACM,GAANA,EACA,KACM,GAANA,EACA,KACA,OAGlBvG,KAAM,CACFC,IAAK,EACLC,IAAK,KAMb,IAAI4V,GAAa,CACb/T,EAAG,gBACHT,EAAG,gBACHC,EAAG,gBACHC,EAAG,gBACHC,EAAG,gBACHC,EAAG,gBACHC,EAAG,gBACHC,EAAG,gBACHC,EAAG,gBACHC,EAAG,gBACH6B,GAAI,gBACJoS,GAAI,gBACJC,GAAI,gBACJxS,GAAI,gBACJI,GAAI,gBACJkL,GAAI,gBACJrL,GAAI,gBACJI,GAAI,gBACJP,GAAI,gBACJC,GAAI,gBACJO,GAAI,gBACJJ,IAAK,iBAGT3G,EAAOE,aAAa,KAAM,CACtBC,OAAQ,gXAAyEC,MAC7E,KAEJC,YAAa,sOAAkDD,MAAM,KACrEE,SAAU,ySAAyDF,MAC/D,KAEJG,cAAe,uIAA8BH,MAAM,KACnDI,YAAa,6FAAuBJ,MAAM,KAC1Ca,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,2BAEVC,SAAU,CACNC,QAAS,qEACTC,QAAS,qEACTE,QAAS,qEACTD,SAAU,uHACVE,SAAU,mIACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,oCACRC,KAAM,wBACNC,EAAG,sEACHE,EAAG,oDACHC,GAAI,0CACJC,EAAG,wCACHC,GAAI,8BACJC,EAAG,kCACHC,GAAI,wBACJC,EAAG,kCACHC,GAAI,wBACJC,EAAG,kCACHC,GAAI,yBAERpC,cAAe,gGACf+H,aAAc,SAAUxE,EAAMnD,GAI1B,OAHa,KAATmD,IACAA,EAAO,GAEM,uBAAbnD,EACOmD,EAAO,EAAIA,EAAOA,EAAO,GACZ,6BAAbnD,EACAmD,EACa,uBAAbnD,EACQ,IAARmD,EAAaA,EAAOA,EAAO,GACd,mCAAbnD,EACAmD,EAAO,QADX,GAIXnD,SAAU,SAAUmD,EAAMC,EAAQjD,GAC9B,OAAIgD,EAAO,EACA,qBACAA,EAAO,GACP,2BACAA,EAAO,GACP,qBACAA,EAAO,GACP,iCAEA,sBAGflB,uBAAwB,sCACxBC,QAAS,SAAUC,GAGf,OAAOA,GAAU+V,GAAW/V,IAAW+V,GAF/B/V,EAAS,KAEuC+V,GADtC,KAAV/V,EAAgB,IAAM,QAGlCC,KAAM,CACFC,IAAK,EACLC,IAAK,KAMbnD,EAAOE,aAAa,KAAM,CACtBC,OAAQ,khBAAoGC,MACxG,KAEJC,YAAa,wMAAiED,MAC1E,KAEJ0J,kBAAkB,EAClBxJ,SAAU,yPAAiDF,MAAM,KACjEG,cAAe,uOAA8CH,MAAM,KACnEI,YAAa,sEAAyBJ,MAAM,KAC5C2D,oBAAoB,EACpB9C,eAAgB,CACZC,GAAI,OACJC,IAAK,UACLC,EAAG,aACHC,GAAI,cACJC,IAAK,4CACLC,KAAM,sFAEVd,cAAe,4HACfC,KAAM,SAAUC,GACZ,MAAiB,iEAAVA,GAEXE,SAAU,SAAUmD,EAAMC,EAAQjD,GAC9B,OAAIgD,EAAO,GACA,+DAEA,gEAGfxC,SAAU,CACNC,QAAS,qEACTC,QAAS,iFACTC,SAAU,6DACVC,QAAS,mGACTC,SAAU,mGACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,wBACRC,KAAM,+CACNC,EAAG,2EACHC,GAAI,0CACJC,EAAG,6BACHC,GAAI,8BACJC,EAAG,+CACHC,GAAI,gDACJC,EAAG,uBACHC,GAAI,wBACJC,EAAG,mCACHC,GAAI,oCACJC,EAAG,iBACHC,GAAI,qBAMZ,IAAIqW,GAAa,CACb3U,EAAG,QACHI,EAAG,QACHG,EAAG,QACHyB,GAAI,QACJC,GAAI,QACJhC,EAAG,OACHK,EAAG,OACH4B,GAAI,OACJC,GAAI,OACJjC,EAAG,WACHC,EAAG,WACHiC,IAAK,WACL/B,EAAG,OACHG,EAAG,QACH6B,GAAI,QACJC,GAAI,QACJC,GAAI,QACJC,GAAI,SAGR/G,EAAOE,aAAa,KAAM,CACtBC,OAAQ,oGAA+EC,MACnF,KAEJC,YAAa,iEAAkDD,MAAM,KACrEE,SAAU,4FAAwDF,MAC9D,KAEJG,cAAe,mDAA8BH,MAAM,KACnDI,YAAa,4CAAuBJ,MAAM,KAC1Ca,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,2BAEVC,SAAU,CACNC,QAAS,sBACTC,QAAS,mBACTC,SAAU,2BACVC,QAAS,kBACTC,SAAU,6BACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,cACRC,KAAM,gBACNC,EAAG,uBACHE,EAAG,YACHC,GAAI,WACJC,EAAG,YACHC,GAAI,WACJC,EAAG,aACHC,GAAI,YACJC,EAAG,YACHC,GAAI,WACJC,EAAG,aACHC,GAAI,aAERE,QAAS,SAAUC,EAAQyE,GACvB,OAAQA,GACJ,IAAK,IACL,IAAK,IACL,IAAK,KACL,IAAK,KACD,OAAOzE,EACX,QACI,GAAe,IAAXA,EAEA,OAAOA,EAAS,QAEpB,IAAIoE,EAAIpE,EAAS,GAGjB,OAAOA,GAAUkW,GAAW9R,IAAM8R,GAFzBlW,EAAS,IAAOoE,IAE0B8R,GADjC,KAAVlW,EAAgB,IAAM,SAI1CC,KAAM,CACFC,IAAK,EACLC,IAAK,KAMbnD,EAAOE,aAAa,QAAS,CACzBC,OAAQ,0FAA0FC,MAC9F,KAEJC,YAAa,kDAAkDD,MAAM,KACrEE,SAAU,yDAAyDF,MAC/D,KAEJG,cAAe,8BAA8BH,MAAM,KACnDI,YAAa,wBAAwBJ,MAAM,KAC3Ca,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,YACHC,GAAI,eACJC,IAAK,qBACLC,KAAM,6BAEVC,SAAU,CACNC,QAAS,oBACTC,QAAS,gBACTC,SAAU,0BACVC,QAAS,eACTC,SAAU,4BACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,gBACRC,KAAM,mBACNC,EAAG,gBACHC,GAAI,aACJC,EAAG,eACHC,GAAI,YACJC,EAAG,aACHC,GAAI,UACJC,EAAG,aACHC,GAAI,UACJC,EAAG,cACHC,GAAI,WACJC,EAAG,aACHC,GAAI,WAERC,uBAAwB,UACxBC,QAAS,SAAUC,GACf,OAAOA,GAEXC,KAAM,CACFC,IAAK,EACLC,IAAK,KAMb,IAAIgW,GAAe,2DAAiD/Y,MAAM,KA4B1E,SAASgZ,GAAYpW,EAAQQ,EAAeC,EAAQC,GAChD,IAAI2V,EAiBR,SAAsBrW,GAClB,IAAIsW,EAAUC,KAAKC,MAAOxW,EAAS,IAAQ,KACvCyW,EAAMF,KAAKC,MAAOxW,EAAS,IAAO,IAClC0W,EAAM1W,EAAS,GACf2W,EAAO,GACG,EAAVL,IACAK,GAAQR,GAAaG,GAAW,SAE1B,EAANG,IACAE,IAAkB,KAATA,EAAc,IAAM,IAAMR,GAAaM,GAAO,OAEjD,EAANC,IACAC,IAAkB,KAATA,EAAc,IAAM,IAAMR,GAAaO,IAEpD,MAAgB,KAATC,EAAc,OAASA,EA/BbC,CAAa5W,GAC9B,OAAQS,GACJ,IAAK,KACD,OAAO4V,EAAa,OACxB,IAAK,KACD,OAAOA,EAAa,OACxB,IAAK,KACD,OAAOA,EAAa,OACxB,IAAK,KACD,OAAOA,EAAa,OACxB,IAAK,KACD,OAAOA,EAAa,OACxB,IAAK,KACD,OAAOA,EAAa,QAqBhCrZ,EAAOE,aAAa,MAAO,CACvBC,OAAQ,iSAAkMC,MACtM,KAEJC,YAAa,6JAA0HD,MACnI,KAEJ0J,kBAAkB,EAClBxJ,SAAU,2DAA2DF,MACjE,KAEJG,cAAe,2DAA2DH,MACtE,KAEJI,YAAa,2DAA2DJ,MACpE,KAEJa,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,2BAEVC,SAAU,CACNC,QAAS,cACTC,QAAS,mBACTC,SAAU,MACVC,QAAS,wBACTC,SAAU,MACVC,SAAU,KAEdC,aAAc,CACVC,OA/FR,SAAyB0J,GACrB,IAAImO,EAAOnO,EASX,OARAmO,GAC+B,IAA3BnO,EAAOO,QAAQ,OACT4N,EAAKC,MAAM,GAAI,GAAK,OACO,IAA3BpO,EAAOO,QAAQ,OACf4N,EAAKC,MAAM,GAAI,GAAK,OACO,IAA3BpO,EAAOO,QAAQ,OACf4N,EAAKC,MAAM,GAAI,GAAK,MACpBD,EAAO,QAuFb5X,KAnFR,SAAuByJ,GACnB,IAAImO,EAAOnO,EASX,OARAmO,GAC+B,IAA3BnO,EAAOO,QAAQ,OACT4N,EAAKC,MAAM,GAAI,GAAK,YACO,IAA3BpO,EAAOO,QAAQ,OACf4N,EAAKC,MAAM,GAAI,GAAK,OACO,IAA3BpO,EAAOO,QAAQ,OACf4N,EAAKC,MAAM,GAAI,GAAK,MACpBD,EAAO,QA2Eb3X,EAAG,UACHC,GAAIiX,GACJhX,EAAG,eACHC,GAAI+W,GACJ9W,EAAG,eACHC,GAAI6W,GACJ5W,EAAG,eACHC,GAAI2W,GACJ1W,EAAG,eACHC,GAAIyW,GACJxW,EAAG,eACHC,GAAIuW,IAERtW,uBAAwB,YACxBC,QAAS,MACTE,KAAM,CACFC,IAAK,EACLC,IAAK,KAMb,IAAI4W,GAAa,CACbxV,EAAG,QACHI,EAAG,QACHG,EAAG,QACHyB,GAAI,QACJC,GAAI,QACJhC,EAAG,OACHK,EAAG,OACH4B,GAAI,OACJC,GAAI,OACJjC,EAAG,cACHC,EAAG,cACHiC,IAAK,cACL/B,EAAG,YACHG,EAAG,QACH6B,GAAI,QACJC,GAAI,QACJC,GAAI,kBACJC,GAAI,mBA+IR,SAASiT,GAAsBhX,EAAQQ,EAAeyD,EAAKvD,GACvD,IAAI2D,EAAS,CACTnF,EAAG,CAAC,kBAAmB,mBACvBC,GAAI,CAACa,EAAS,WAAiBA,EAAS,YACxCZ,EAAG,CAAC,aAAW,iBACfC,GAAI,CAACW,EAAS,YAAeA,EAAS,aACtCV,EAAG,CAAC,aAAW,kBACfC,GAAI,CAACS,EAAS,YAAeA,EAAS,aACtCR,EAAG,CAAC,UAAW,eACfC,GAAI,CAACO,EAAS,SAAeA,EAAS,UACtCN,EAAG,CAAC,SAAU,aACdC,GAAI,CAACK,EAAS,SAAeA,EAAS,UACtCJ,EAAG,CAAC,QAAS,YACbC,GAAI,CAACG,EAAS,OAAaA,EAAS,SAExC,OAAOU,GAEDF,EADA6D,EAAOJ,GAAK,GAGZI,EAAOJ,GAAK,GA4NtB,SAASgT,GAAyBjX,EAAQQ,EAAeyD,GACrD,IAToBC,EAChBC,EAgBJ,MAAY,MAARF,EACOzD,EAAgB,6CAAY,6CACpB,MAARyD,EACAzD,EAAgB,uCAAW,uCAE3BR,EAAS,KAtBAkE,GAsB6BlE,EArB7CmE,EAQS,CACThF,GAAIqB,EAAgB,6HAA2B,6HAC/CnB,GAAImB,EAAgB,6HAA2B,6HAC/CjB,GAAIiB,EAAgB,2GAAwB,2GAC5Cf,GAAI,uEACJE,GAAI,uHACJE,GAAI,8EAOkCoE,GArBzB7G,MAAM,KAChB8G,EAAM,IAAO,GAAKA,EAAM,KAAQ,GACjCC,EAAM,GACM,GAAZD,EAAM,IAAWA,EAAM,IAAM,IAAMA,EAAM,IAAM,IAAmB,IAAbA,EAAM,KAC3DC,EAAM,GACNA,EAAM,IAiDhB,SAAS+S,GAAqBtW,GAC1B,OAAO,WACH,OAAOA,EAAM,UAAwB,KAAjB3D,KAAKa,QAAiB,SAAM,IAAM,QA5a9Dd,EAAOE,aAAa,KAAM,CACtBC,OAAQ,yGAA6EC,MACjF,KAEJC,YAAa,4DAAkDD,MAAM,KACrEE,SAAU,0EAAwDF,MAC9D,KAEJG,cAAe,iCAA8BH,MAAM,KACnDI,YAAa,0BAAuBJ,MAAM,KAC1CS,SAAU,SAAUC,EAAOC,EAASC,GAChC,OAAIF,EAAQ,GACDE,EAAU,WAAO,WAEjBA,EAAU,QAAO,SAGhCP,cAAe,gCACfC,KAAM,SAAUC,GACZ,MAAiB,UAAVA,GAA4B,UAAVA,GAE7BM,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,2BAEVC,SAAU,CACNC,QAAS,qBACTC,QAAS,uBACTC,SAAU,2BACVC,QAAS,cACTC,SAAU,4BACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,WACRC,KAAM,aACNC,EAAG,mBACHC,GAAI,YACJC,EAAG,aACHC,GAAI,YACJC,EAAG,WACHC,GAAI,UACJC,EAAG,aACHC,GAAI,YACJC,EAAG,SACHC,GAAI,QACJC,EAAG,eACHC,GAAI,eAERE,QAAS,SAAUC,EAAQyE,GACvB,OAAQA,GACJ,IAAK,IACL,IAAK,IACL,IAAK,KACL,IAAK,KACD,OAAOzE,EACX,QACI,GAAe,IAAXA,EAEA,OAAOA,EAAS,kBAEpB,IAAIoE,EAAIpE,EAAS,GAGjB,OAAOA,GAAU+W,GAAW3S,IAAM2S,GAFzB/W,EAAS,IAAOoE,IAE0B2S,GADjC,KAAV/W,EAAgB,IAAM,SAI1CC,KAAM,CACFC,IAAK,EACLC,IAAK,KAQbnD,EAAOE,aAAa,MAAO,CACvBC,OAAQ,kGAAsFC,MAC1F,KAEJC,YAAa,qDAAkDD,MAAM,KACrEE,SAAU,8EAAsDF,MAAM,KACtEG,cAAe,gDAA8BH,MAAM,KACnDI,YAAa,mCAAuBJ,MAAM,KAC1Ca,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,wBACJC,IAAK,8BACLC,KAAM,0CAEVd,cAAe,aACfC,KAAM,SAAUC,GACZ,MAAO,QAAUA,EAAM0L,eAE3BxL,SAAU,SAAUC,EAAOC,EAASC,GAChC,OAAY,GAARF,EACOE,EAAU,MAAQ,MAElBA,EAAU,MAAQ,OAGjCQ,SAAU,CACNC,QAAS,iBACTC,QAAS,oBACTC,SAAU,iBACVC,QAAS,kBACTC,SAAU,oCACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,YACRC,KAAM,OACNC,EAAG8X,GACH7X,GAAI6X,GACJ5X,EAAG4X,GACH3X,GAAI2X,GACJ1X,EAAG0X,GACHzX,GAAIyX,GACJxX,EAAGwX,GACHvX,GAAIuX,GACJtX,EAAGsX,GACHrX,GAAIqX,GACJpX,EAAGoX,GACHnX,GAAImX,IAERlX,uBAAwB,YACxBC,QAAS,MACTE,KAAM,CACFC,IAAK,EACLC,IAAK,KA4BbnD,EAAOE,aAAa,WAAY,CAC5BC,OAAQ,qIAAwFC,MAC5F,KAEJC,YAAa,qIAAwFD,MACjG,KAEJE,SAAU,uDAAkDF,MAAM,KAClEG,cAAe,uDAAkDH,MAAM,KACvEI,YAAa,uDAAkDJ,MAAM,KACrEa,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,0BAEVC,SAAU,CACNC,QAAS,eACTC,QAAS,cACTC,SAAU,cACVC,QAAS,gBACTC,SAAU,cACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,iBACRC,KAAM,SACNC,EAAG,OACHC,GAAI,UACJC,EAAG,aACHC,GAAI,gBACJC,EAAG,YACHC,GAAI,mBACJC,EAAG,MACHC,GAAI,WACJC,EAAG,QACHC,GAAI,YACJC,EAAG,QACHC,GAAI,aAERI,KAAM,CACFC,IAAK,EACLC,IAAK,MAMbnD,EAAOE,aAAa,MAAO,CACvBC,OAAQ,saAAkFC,MACtF,KAEJC,YAAa,saAAkFD,MAC3F,KAEJE,SAAU,+PAAkDF,MAAM,KAClEG,cAAe,+PAAkDH,MAAM,KACvEI,YAAa,+PAAkDJ,MAAM,KACrEa,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,0BAEVC,SAAU,CACNC,QAAS,uCACTC,QAAS,uCACTC,SAAU,mBACVC,QAAS,6CACTC,SAAU,mBACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,wDACRC,KAAM,wBACNC,EAAG,2BACHC,GAAI,8BACJC,EAAG,iCACHC,GAAI,oCACJC,EAAG,2BACHC,GAAI,sDACJC,EAAG,qBACHC,GAAI,+BACJC,EAAG,4BACHC,GAAI,0CACJC,EAAG,iCACHC,GAAI,2CAERI,KAAM,CACFC,IAAK,EACLC,IAAK,MAMbnD,EAAOE,aAAa,QAAS,CACzBC,OAAQ,8bAAsFC,MAC1F,KAEJC,YAAa,8bAAsFD,MAC/F,KAEJE,SAAU,ySAAyDF,MAC/D,KAEJG,cAAe,6FAAuBH,MAAM,KAC5CI,YAAa,6FAAuBJ,MAAM,KAC1Ca,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,gGACJC,IAAK,4GACLC,KAAM,wHAEVd,cAAe,uQACf+H,aAAc,SAAUxE,EAAMnD,GAI1B,OAHa,KAATmD,IACAA,EAAO,GAGM,4DAAbnD,GACa,mCAAbA,GACa,wEAAbA,GAGoB,wEAAbA,GAA4C,uBAAbA,GAGvB,IAARmD,EAJAA,EAEAA,EAAO,IAKtBnD,SAAU,SAAUmD,EAAMC,EAAQjD,GAC9B,IAAImZ,EAAY,IAAPnW,EAAaC,EACtB,OAAIkW,EAAK,IACE,0DACAA,EAAK,IACL,iCACAA,EAAK,KACL,sEACAA,EAAK,KACL,qBACAA,EAAK,KACL,sEAEA,sBAGf3Y,SAAU,CACNC,QAAS,qEACTC,QAAS,+DACTC,SAAU,wFACVC,QAAS,kDACTC,SAAU,8FACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,oCACRC,KAAM,oCACNC,EAAG,sEACHC,GAAI,0CACJC,EAAG,oDACHC,GAAI,oCACJC,EAAG,oDACHC,GAAI,oCACJC,EAAG,wCACHC,GAAI,wBACJC,EAAG,wCACHC,GAAI,wBACJC,EAAG,wCACHC,GAAI,yBAGRC,uBAAwB,yFACxBC,QAAS,SAAUC,EAAQyE,GACvB,OAAQA,GACJ,IAAK,IACL,IAAK,IACL,IAAK,MACD,OAAOzE,EAAS,4BACpB,IAAK,IACL,IAAK,IACD,OAAOA,EAAS,kCACpB,QACI,OAAOA,IAGnBkC,SAAU,SAAUzB,GAChB,OAAOA,EAAOK,QAAQ,UAAM,MAEhCI,WAAY,SAAUT,GAClB,OAAOA,EAAOK,QAAQ,KAAM,WAEhCb,KAAM,CAEFC,IAAK,EACLC,IAAK,KAmEbnD,EAAOE,aAAa,KAAM,CACtBC,OAAQ,CACJkH,OAAQ,gdAAyFjH,MAC7F,KAEJkH,WAAY,ggBAAiGlH,MACzG,MAGRC,YAAa,gRAAyDD,MAClE,KAEJE,SAhDJ,SAA6B8B,EAAGiF,GAC5B,IAAI/G,EAAW,CACP8Z,WAAY,+SAA0Dha,MAClE,KAEJia,WAAY,+SAA0Dja,MAClE,KAEJka,SAAU,2TAA4Dla,MAClE,MAKZ,OAAU,IAANgC,EACO9B,EAAqB,WACvBwZ,MAAM,EAAG,GACTS,OAAOja,EAAqB,WAAEwZ,MAAM,EAAG,IAE3C1X,EASE9B,EALI,yCAAqBM,KAAKyG,GAC/B,aACA,sHAAsCzG,KAAKyG,GAC3C,WACA,cACoBjF,EAAEoF,OARjBlH,EAAqB,YA6BhCC,cAAe,6FAAuBH,MAAM,KAC5CI,YAAa,6FAAuBJ,MAAM,KAC1Ca,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,sBACJC,IAAK,6BACLC,KAAM,oCAEVC,SAAU,CACNC,QAASyY,GAAqB,sDAC9BxY,QAASwY,GAAqB,0CAC9BtY,QAASsY,GAAqB,oCAC9BvY,SAAUuY,GAAqB,mBAC/BrY,SAAU,WACN,OAAQ5B,KAAKuH,OACT,KAAK,EACL,KAAK,EACL,KAAK,EACL,KAAK,EACD,OAAO0S,GAAqB,uDAAoBrN,KAAK5M,MACzD,KAAK,EACL,KAAK,EACL,KAAK,EACD,OAAOia,GAAqB,6DAAqBrN,KAAK5M,QAGlE6B,SAAU,KAEdC,aAAc,CACVC,OAAQ,kBACRC,KAAM,8BACNC,EAAG,wFACHC,GAAI8X,GACJ7X,EAAG6X,GACH5X,GAAI4X,GACJ3X,EAAG,uCACHC,GAAI0X,GACJzX,EAAG,2BACHC,GAAIwX,GACJvX,EAAG,uCACHC,GAAIsX,GACJrX,EAAG,qBACHC,GAAIoX,IAGRxZ,cAAe,kHACfC,KAAM,SAAUC,GACZ,MAAO,8DAAiBC,KAAKD,IAEjCE,SAAU,SAAUmD,EAAMC,EAAQjD,GAC9B,OAAIgD,EAAO,EACA,2BACAA,EAAO,GACP,iCACAA,EAAO,GACP,qBAEA,wCAGflB,uBAAwB,gCACxBC,QAAS,SAAUC,EAAQyE,GACvB,OAAQA,GACJ,IAAK,IACL,IAAK,IACL,IAAK,MACL,IAAK,IACL,IAAK,IACD,OAAOzE,EAAS,UACpB,IAAK,IACD,OAAOA,EAAS,gBACpB,QACI,OAAOA,IAGnBC,KAAM,CACFC,IAAK,EACLC,IAAK,KAMb,IAAIqX,GAAW,CACP,iCACA,iCACA,2BACA,iCACA,qBACA,qBACA,uCACA,2BACA,iCACA,uCACA,iCACA,kCAEJC,GAAS,CAAC,iCAAS,qBAAO,2BAAQ,qBAAO,uCAAU,2BAAQ,4BA+uB/D,OA7uBAza,EAAOE,aAAa,KAAM,CACtBC,OAAQqa,GACRna,YAAama,GACbla,SAAUma,GACVla,cAAeka,GACfja,YAAaia,GACbxZ,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,gCAEVd,cAAe,wCACfC,KAAM,SAAUC,GACZ,MAAO,uBAAUA,GAErBE,SAAU,SAAUmD,EAAMC,EAAQjD,GAC9B,OAAIgD,EAAO,GACA,qBAEJ,sBAEXxC,SAAU,CACNC,QAAS,6CACTC,QAAS,6CACTC,SAAU,qCACVC,QAAS,kFACTC,SAAU,sEACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,wBACRC,KAAM,wBACNC,EAAG,oDACHC,GAAI,oCACJC,EAAG,wCACHC,GAAI,wBACJC,EAAG,oDACHC,GAAI,oCACJC,EAAG,kCACHC,GAAI,kBACJC,EAAG,wCACHC,GAAI,wBACJC,EAAG,wCACHC,GAAI,yBAERqC,SAAU,SAAUzB,GAChB,OAAOA,EAAOK,QAAQ,UAAM,MAEhCI,WAAY,SAAUT,GAClB,OAAOA,EAAOK,QAAQ,KAAM,WAEhCb,KAAM,CACFC,IAAK,EACLC,IAAK,KAMbnD,EAAOE,aAAa,UAAW,CAC3BC,OAAQ,6EAA6EC,MACjF,KAEJC,YAAa,oDAAoDD,MAAM,KACvEE,SAAU,+DAA+DF,MACrE,KAEJG,cAAe,kCAAkCH,MAAM,KACvDI,YAAa,yBAAyBJ,MAAM,KAC5Ca,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,2BAEVC,SAAU,CACNC,QAAS,uBACTC,QAAS,mBACTC,SAAU,2BACVC,QAAS,uBACTC,SAAU,oCACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,kBACRC,KAAM,qBACNC,EAAG,SACHC,GAAI,YACJC,EAAG,aACHC,GAAI,YACJC,EAAG,WACHC,GAAI,UACJC,EAAG,UACHC,GAAI,SACJC,EAAG,SACHC,GAAI,QACJC,EAAG,UACHC,GAAI,UAERI,KAAM,CACFC,IAAK,EACLC,IAAK,KAMbnD,EAAOE,aAAa,KAAM,CACtBC,OAAQ,gXAAyEC,MAC7E,KAEJC,YAAa,sOAAkDD,MAAM,KACrEE,SAAU,6RAAuDF,MAAM,KACvEG,cAAe,uIAA8BH,MAAM,KACnDI,YAAa,6FAAuBJ,MAAM,KAC1Ca,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,2BAEVC,SAAU,CACNC,QAAS,8EACTC,QAAS,2DACTC,SAAU,6EACVC,QAAS,wEACTC,SAAU,8GACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,6DACRC,KAAM,gFACNC,EAAG,uCACHC,GAAI,0CACJC,EAAG,0DACHC,GAAI,0CACJC,EAAG,8CACHC,GAAI,8BACJC,EAAG,wCACHC,GAAI,wBACJC,EAAG,kCACHC,GAAI,kBACJC,EAAG,wCACHC,GAAI,yBAERI,KAAM,CACFC,IAAK,EACLC,IAAK,KAMbnD,EAAOE,aAAa,KAAM,CACtBC,OAAQ,yIAAqGC,MACzG,KAEJC,YAAa,sFAAsFD,MAC/F,KAEJ0J,kBAAkB,EAClBxJ,SAAU,mHAAyDF,MAC/D,KAEJG,cAAe,uBAAuBH,MAAM,KAC5CI,YAAa,uBAAuBJ,MAAM,KAC1C2D,oBAAoB,EACpBtD,cAAe,SACfC,KAAM,SAAUC,GACZ,MAAO,QAAQC,KAAKD,IAExBE,SAAU,SAAUC,EAAOC,EAASC,GAChC,OAAIF,EAAQ,GACDE,EAAU,KAAO,KAEjBA,EAAU,KAAO,MAGhCC,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,yBACJC,IAAK,+BACLC,KAAM,qCACNkK,EAAG,YACHZ,GAAI,aACJC,IAAK,mBACLC,KAAM,yBAEVvJ,SAAU,CACNC,QAAS,yBACTC,QAAS,0BACTC,SAAU,sCACVC,QAAS,yBACTC,SAAU,6CACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,cACRC,KAAM,qBACNC,EAAG,iBACHC,GAAI,aACJC,EAAG,mBACHC,GAAI,aACJC,EAAG,oBACHC,GAAI,cACJC,EAAG,mBACHC,GAAI,aACJC,EAAG,oBACHC,GAAI,cACJC,EAAG,oBACHC,GAAI,eAERC,uBAAwB,UACxBC,QAAS,SAAUC,GACf,OAAOA,GAEXC,KAAM,CACFC,IAAK,EACLC,IAAK,KAMbnD,EAAOE,aAAa,WAAY,CAC5BC,OAAQ,sNAA6GC,MACjH,KAEJC,YAAa,iHAA8DD,MACvE,KAEJ0J,kBAAkB,EAClBxJ,SAAU,0JAAyEF,MAC/E,KAEJG,cAAe,mEAAqCH,MAAM,KAC1DI,YAAa,2CAA4BJ,MAAM,KAC/C2D,oBAAoB,EACpB9C,eAAgB,CACZC,GAAI,QACJE,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,2BAEVC,SAAU,CACNC,QAAS,8BACTC,QAAS,kCACTC,SAAU,kBACVC,QAAS,yCACTC,SAAU,6BACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,eACRC,KAAM,gBACNC,EAAG,kCACHC,GAAI,wBACJC,EAAG,4BACHC,GAAI,2BACJC,EAAG,wBACHC,GAAI,kBACJC,EAAG,kBACHC,GAAI,iBACJC,EAAG,qBACHC,GAAI,oBACJC,EAAG,sBACHC,GAAI,sBAERC,uBAAwB,uBACxBC,QAAS,SAAUC,GACf,IAAIwG,EAAIxG,EAAS,GAWjB,OAAOA,GAT6B,MAAxBA,EAAS,IAAO,IACd,KACM,GAANwG,EACA,KACM,GAANA,EACA,KACM,GAANA,EACA,KACA,OAGlBvG,KAAM,CACFC,IAAK,EACLC,IAAK,KAMbnD,EAAOE,aAAa,KAAM,CACtBC,OAAQ,gPAA0FC,MAC9F,KAEJC,YAAa,oKAAgED,MAAM,KACnFE,SAAU,gKAAuDF,MAAM,KACvEG,cAAe,kGAAsCH,MAAM,KAC3DI,YAAa,8DAA2BJ,MAAM,KAC9Ca,eAAgB,CACZC,GAAI,SACJC,IAAK,YACLC,EAAG,aACHC,GAAI,cACJC,IAAK,qBACLC,KAAM,4BAEVC,SAAU,CACNC,QAAS,0BACTC,QAAS,yBACTC,SAAU,uDACVC,QAAS,oBACTC,SAAU,2DACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,cACRC,KAAM,qBACNC,EAAG,wCACHC,GAAI,gBACJC,EAAG,6BACHC,GAAI,4BACJC,EAAG,mBACHC,GAAI,kBACJC,EAAG,0BACHC,GAAI,yBACJC,EAAG,gBACHC,GAAI,eACJC,EAAG,sBACHC,GAAI,sBAERC,uBAAwB,+BACxBC,QAAS,yBACTE,KAAM,CACFC,IAAK,EACLC,IAAK,KAMbnD,EAAOE,aAAa,QAAS,CACzBC,OAAQ,0KAAwCC,MAC5C,KAEJC,YAAa,qGAAyCD,MAClD,KAEJE,SAAU,uIAA8BF,MAAM,KAC9CG,cAAe,6FAAuBH,MAAM,KAC5CI,YAAa,mDAAgBJ,MAAM,KACnCa,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,2BACJC,IAAK,2CACLC,KAAM,+CACNkK,EAAG,WACHZ,GAAI,2BACJC,IAAK,iCACLC,KAAM,sCAEVtK,cAAe,gFACf+H,aAAc,SAAUxE,EAAMnD,GAI1B,OAHa,KAATmD,IACAA,EAAO,GAEM,iBAAbnD,GAAkC,iBAAbA,GAAkC,iBAAbA,GAEtB,iBAAbA,GAAkC,iBAAbA,GAIb,IAARmD,EALAA,EAEAA,EAAO,IAMtBnD,SAAU,SAAUmD,EAAMC,EAAQjD,GAC9B,IAAImZ,EAAY,IAAPnW,EAAaC,EACtB,OAAIkW,EAAK,IACE,eACAA,EAAK,IACL,eACAA,EAAK,KACL,eACAA,EAAK,KACL,eACAA,EAAK,KACL,eAEA,gBAGf3Y,SAAU,CACNC,QAAS,mBACTC,QAAS,mBACTC,SAAU,SAAU+P,GAChB,OAAIA,EAAIzO,SAAWhD,KAAKgD,OACb,gBAEA,iBAGfrB,QAAS,mBACTC,SAAU,SAAU6P,GAChB,OAAIzR,KAAKgD,SAAWyO,EAAIzO,OACb,gBAEA,iBAGfnB,SAAU,KAEdgB,uBAAwB,gCACxBC,QAAS,SAAUC,EAAQyE,GACvB,OAAQA,GACJ,IAAK,IACL,IAAK,IACL,IAAK,MACD,OAAOzE,EAAS,SACpB,IAAK,IACD,OAAOA,EAAS,SACpB,IAAK,IACL,IAAK,IACD,OAAOA,EAAS,SACpB,QACI,OAAOA,IAGnBjB,aAAc,CACVC,OAAQ,WACRC,KAAM,WACNC,EAAG,eACHC,GAAI,YACJC,EAAG,iBACHC,GAAI,kBACJC,EAAG,iBACHC,GAAI,kBACJC,EAAG,WACHC,GAAI,YACJC,EAAG,iBACHC,GAAI,kBACJC,EAAG,WACHC,GAAI,aAERI,KAAM,CAEFC,IAAK,EACLC,IAAK,KAMbnD,EAAOE,aAAa,QAAS,CACzBC,OAAQ,0KAAwCC,MAC5C,KAEJC,YAAa,qGAAyCD,MAClD,KAEJE,SAAU,uIAA8BF,MAAM,KAC9CG,cAAe,6FAAuBH,MAAM,KAC5CI,YAAa,mDAAgBJ,MAAM,KACnCa,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,2BACJC,IAAK,iCACLC,KAAM,qCACNkK,EAAG,WACHZ,GAAI,2BACJC,IAAK,iCACLC,KAAM,sCAEVtK,cAAe,gFACf+H,aAAc,SAAUxE,EAAMnD,GAI1B,OAHa,KAATmD,IACAA,EAAO,GAEM,iBAAbnD,GAAkC,iBAAbA,GAAkC,iBAAbA,EACnCmD,EACa,iBAAbnD,EACQ,IAARmD,EAAaA,EAAOA,EAAO,GACd,iBAAbnD,GAAkC,iBAAbA,EACrBmD,EAAO,QADX,GAIXnD,SAAU,SAAUmD,EAAMC,EAAQjD,GAC9B,IAAImZ,EAAY,IAAPnW,EAAaC,EACtB,OAAIkW,EAAK,IACE,eACAA,EAAK,IACL,eACAA,EAAK,KACL,eACO,OAAPA,EACA,eACAA,EAAK,KACL,eAEA,gBAGf3Y,SAAU,CACNC,QAAS,mBACTC,QAAS,mBACTC,SAAU,iBACVC,QAAS,mBACTC,SAAU,iBACVC,SAAU,KAEdgB,uBAAwB,gCACxBC,QAAS,SAAUC,EAAQyE,GACvB,OAAQA,GACJ,IAAK,IACL,IAAK,IACL,IAAK,MACD,OAAOzE,EAAS,SACpB,IAAK,IACD,OAAOA,EAAS,SACpB,IAAK,IACL,IAAK,IACD,OAAOA,EAAS,SACpB,QACI,OAAOA,IAGnBjB,aAAc,CACVC,OAAQ,WACRC,KAAM,WACNC,EAAG,eACHC,GAAI,YACJC,EAAG,iBACHC,GAAI,kBACJC,EAAG,iBACHC,GAAI,kBACJC,EAAG,WACHC,GAAI,YACJC,EAAG,iBACHC,GAAI,kBACJC,EAAG,WACHC,GAAI,eAMZ7C,EAAOE,aAAa,QAAS,CACzBC,OAAQ,0KAAwCC,MAC5C,KAEJC,YAAa,qGAAyCD,MAClD,KAEJE,SAAU,uIAA8BF,MAAM,KAC9CG,cAAe,6FAAuBH,MAAM,KAC5CI,YAAa,mDAAgBJ,MAAM,KACnCa,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,2BACJC,IAAK,iCACLC,KAAM,qCACNkK,EAAG,WACHZ,GAAI,2BACJC,IAAK,iCACLC,KAAM,sCAEVtK,cAAe,gFACf+H,aAAc,SAAUxE,EAAMnD,GAI1B,OAHa,KAATmD,IACAA,EAAO,GAEM,iBAAbnD,GAAkC,iBAAbA,GAAkC,iBAAbA,EACnCmD,EACa,iBAAbnD,EACQ,IAARmD,EAAaA,EAAOA,EAAO,GACd,iBAAbnD,GAAkC,iBAAbA,EACrBmD,EAAO,QADX,GAIXnD,SAAU,SAAUmD,EAAMC,EAAQjD,GAC9B,IAAImZ,EAAY,IAAPnW,EAAaC,EACtB,OAAIkW,EAAK,IACE,eACAA,EAAK,IACL,eACAA,EAAK,KACL,eACAA,EAAK,KACL,eACAA,EAAK,KACL,eAEA,gBAGf3Y,SAAU,CACNC,QAAS,oBACTC,QAAS,oBACTC,SAAU,kBACVC,QAAS,oBACTC,SAAU,kBACVC,SAAU,KAEdgB,uBAAwB,gCACxBC,QAAS,SAAUC,EAAQyE,GACvB,OAAQA,GACJ,IAAK,IACL,IAAK,IACL,IAAK,MACD,OAAOzE,EAAS,SACpB,IAAK,IACD,OAAOA,EAAS,SACpB,IAAK,IACL,IAAK,IACD,OAAOA,EAAS,SACpB,QACI,OAAOA,IAGnBjB,aAAc,CACVC,OAAQ,WACRC,KAAM,WACNC,EAAG,eACHC,GAAI,YACJC,EAAG,iBACHC,GAAI,kBACJC,EAAG,iBACHC,GAAI,kBACJC,EAAG,WACHC,GAAI,YACJC,EAAG,iBACHC,GAAI,kBACJC,EAAG,WACHC,GAAI,eAMZ7C,EAAOE,aAAa,QAAS,CACzBC,OAAQ,0KAAwCC,MAC5C,KAEJC,YAAa,qGAAyCD,MAClD,KAEJE,SAAU,uIAA8BF,MAAM,KAC9CG,cAAe,6FAAuBH,MAAM,KAC5CI,YAAa,mDAAgBJ,MAAM,KACnCa,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,2BACJC,IAAK,iCACLC,KAAM,qCACNkK,EAAG,WACHZ,GAAI,2BACJC,IAAK,iCACLC,KAAM,sCAEVtK,cAAe,gFACf+H,aAAc,SAAUxE,EAAMnD,GAI1B,OAHa,KAATmD,IACAA,EAAO,GAEM,iBAAbnD,GAAkC,iBAAbA,GAAkC,iBAAbA,EACnCmD,EACa,iBAAbnD,EACQ,IAARmD,EAAaA,EAAOA,EAAO,GACd,iBAAbnD,GAAkC,iBAAbA,EACrBmD,EAAO,QADX,GAIXnD,SAAU,SAAUmD,EAAMC,EAAQjD,GAC9B,IAAImZ,EAAY,IAAPnW,EAAaC,EACtB,OAAIkW,EAAK,IACE,eACAA,EAAK,IACL,eACAA,EAAK,KACL,eACAA,EAAK,KACL,eACAA,EAAK,KACL,eAEA,gBAGf3Y,SAAU,CACNC,QAAS,oBACTC,QAAS,oBACTC,SAAU,kBACVC,QAAS,oBACTC,SAAU,kBACVC,SAAU,KAEdgB,uBAAwB,gCACxBC,QAAS,SAAUC,EAAQyE,GACvB,OAAQA,GACJ,IAAK,IACL,IAAK,IACL,IAAK,MACD,OAAOzE,EAAS,SACpB,IAAK,IACD,OAAOA,EAAS,SACpB,IAAK,IACL,IAAK,IACD,OAAOA,EAAS,SACpB,QACI,OAAOA,IAGnBjB,aAAc,CACVC,OAAQ,WACRC,KAAM,WACNC,EAAG,eACHC,GAAI,YACJC,EAAG,iBACHC,GAAI,kBACJC,EAAG,iBACHC,GAAI,kBACJC,EAAG,WACHC,GAAI,YACJC,EAAG,iBACHC,GAAI,kBACJC,EAAG,WACHC,GAAI,eAIZ7C,EAAO0a,OAAO,MAEP1a"}
\ No newline at end of file
diff --git a/admin/js/vendors/moment/moment-with-locales.js b/admin/js/vendors/moment/moment-with-locales.js
new file mode 100644 (file)
index 0000000..94903ff
--- /dev/null
@@ -0,0 +1,17757 @@
+;(function (global, factory) {
+    typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
+    typeof define === 'function' && define.amd ? define(factory) :
+    global.moment = factory()
+}(this, (function () { 'use strict';
+
+    var hookCallback;
+
+    function hooks() {
+        return hookCallback.apply(null, arguments);
+    }
+
+    // This is done to register the method called with moment()
+    // without creating circular dependencies.
+    function setHookCallback(callback) {
+        hookCallback = callback;
+    }
+
+    function isArray(input) {
+        return (
+            input instanceof Array ||
+            Object.prototype.toString.call(input) === '[object Array]'
+        );
+    }
+
+    function isObject(input) {
+        // IE8 will treat undefined and null as object if it wasn't for
+        // input != null
+        return (
+            input != null &&
+            Object.prototype.toString.call(input) === '[object Object]'
+        );
+    }
+
+    function hasOwnProp(a, b) {
+        return Object.prototype.hasOwnProperty.call(a, b);
+    }
+
+    function isObjectEmpty(obj) {
+        if (Object.getOwnPropertyNames) {
+            return Object.getOwnPropertyNames(obj).length === 0;
+        } else {
+            var k;
+            for (k in obj) {
+                if (hasOwnProp(obj, k)) {
+                    return false;
+                }
+            }
+            return true;
+        }
+    }
+
+    function isUndefined(input) {
+        return input === void 0;
+    }
+
+    function isNumber(input) {
+        return (
+            typeof input === 'number' ||
+            Object.prototype.toString.call(input) === '[object Number]'
+        );
+    }
+
+    function isDate(input) {
+        return (
+            input instanceof Date ||
+            Object.prototype.toString.call(input) === '[object Date]'
+        );
+    }
+
+    function map(arr, fn) {
+        var res = [],
+            i;
+        for (i = 0; i < arr.length; ++i) {
+            res.push(fn(arr[i], i));
+        }
+        return res;
+    }
+
+    function extend(a, b) {
+        for (var i in b) {
+            if (hasOwnProp(b, i)) {
+                a[i] = b[i];
+            }
+        }
+
+        if (hasOwnProp(b, 'toString')) {
+            a.toString = b.toString;
+        }
+
+        if (hasOwnProp(b, 'valueOf')) {
+            a.valueOf = b.valueOf;
+        }
+
+        return a;
+    }
+
+    function createUTC(input, format, locale, strict) {
+        return createLocalOrUTC(input, format, locale, strict, true).utc();
+    }
+
+    function defaultParsingFlags() {
+        // We need to deep clone this object.
+        return {
+            empty: false,
+            unusedTokens: [],
+            unusedInput: [],
+            overflow: -2,
+            charsLeftOver: 0,
+            nullInput: false,
+            invalidEra: null,
+            invalidMonth: null,
+            invalidFormat: false,
+            userInvalidated: false,
+            iso: false,
+            parsedDateParts: [],
+            era: null,
+            meridiem: null,
+            rfc2822: false,
+            weekdayMismatch: false,
+        };
+    }
+
+    function getParsingFlags(m) {
+        if (m._pf == null) {
+            m._pf = defaultParsingFlags();
+        }
+        return m._pf;
+    }
+
+    var some;
+    if (Array.prototype.some) {
+        some = Array.prototype.some;
+    } else {
+        some = function (fun) {
+            var t = Object(this),
+                len = t.length >>> 0,
+                i;
+
+            for (i = 0; i < len; i++) {
+                if (i in t && fun.call(this, t[i], i, t)) {
+                    return true;
+                }
+            }
+
+            return false;
+        };
+    }
+
+    function isValid(m) {
+        if (m._isValid == null) {
+            var flags = getParsingFlags(m),
+                parsedParts = some.call(flags.parsedDateParts, function (i) {
+                    return i != null;
+                }),
+                isNowValid =
+                    !isNaN(m._d.getTime()) &&
+                    flags.overflow < 0 &&
+                    !flags.empty &&
+                    !flags.invalidEra &&
+                    !flags.invalidMonth &&
+                    !flags.invalidWeekday &&
+                    !flags.weekdayMismatch &&
+                    !flags.nullInput &&
+                    !flags.invalidFormat &&
+                    !flags.userInvalidated &&
+                    (!flags.meridiem || (flags.meridiem && parsedParts));
+
+            if (m._strict) {
+                isNowValid =
+                    isNowValid &&
+                    flags.charsLeftOver === 0 &&
+                    flags.unusedTokens.length === 0 &&
+                    flags.bigHour === undefined;
+            }
+
+            if (Object.isFrozen == null || !Object.isFrozen(m)) {
+                m._isValid = isNowValid;
+            } else {
+                return isNowValid;
+            }
+        }
+        return m._isValid;
+    }
+
+    function createInvalid(flags) {
+        var m = createUTC(NaN);
+        if (flags != null) {
+            extend(getParsingFlags(m), flags);
+        } else {
+            getParsingFlags(m).userInvalidated = true;
+        }
+
+        return m;
+    }
+
+    // Plugins that add properties should also add the key here (null value),
+    // so we can properly clone ourselves.
+    var momentProperties = (hooks.momentProperties = []),
+        updateInProgress = false;
+
+    function copyConfig(to, from) {
+        var i, prop, val;
+
+        if (!isUndefined(from._isAMomentObject)) {
+            to._isAMomentObject = from._isAMomentObject;
+        }
+        if (!isUndefined(from._i)) {
+            to._i = from._i;
+        }
+        if (!isUndefined(from._f)) {
+            to._f = from._f;
+        }
+        if (!isUndefined(from._l)) {
+            to._l = from._l;
+        }
+        if (!isUndefined(from._strict)) {
+            to._strict = from._strict;
+        }
+        if (!isUndefined(from._tzm)) {
+            to._tzm = from._tzm;
+        }
+        if (!isUndefined(from._isUTC)) {
+            to._isUTC = from._isUTC;
+        }
+        if (!isUndefined(from._offset)) {
+            to._offset = from._offset;
+        }
+        if (!isUndefined(from._pf)) {
+            to._pf = getParsingFlags(from);
+        }
+        if (!isUndefined(from._locale)) {
+            to._locale = from._locale;
+        }
+
+        if (momentProperties.length > 0) {
+            for (i = 0; i < momentProperties.length; i++) {
+                prop = momentProperties[i];
+                val = from[prop];
+                if (!isUndefined(val)) {
+                    to[prop] = val;
+                }
+            }
+        }
+
+        return to;
+    }
+
+    // Moment prototype object
+    function Moment(config) {
+        copyConfig(this, config);
+        this._d = new Date(config._d != null ? config._d.getTime() : NaN);
+        if (!this.isValid()) {
+            this._d = new Date(NaN);
+        }
+        // Prevent infinite loop in case updateOffset creates new moment
+        // objects.
+        if (updateInProgress === false) {
+            updateInProgress = true;
+            hooks.updateOffset(this);
+            updateInProgress = false;
+        }
+    }
+
+    function isMoment(obj) {
+        return (
+            obj instanceof Moment || (obj != null && obj._isAMomentObject != null)
+        );
+    }
+
+    function warn(msg) {
+        if (
+            hooks.suppressDeprecationWarnings === false &&
+            typeof console !== 'undefined' &&
+            console.warn
+        ) {
+            console.warn('Deprecation warning: ' + msg);
+        }
+    }
+
+    function deprecate(msg, fn) {
+        var firstTime = true;
+
+        return extend(function () {
+            if (hooks.deprecationHandler != null) {
+                hooks.deprecationHandler(null, msg);
+            }
+            if (firstTime) {
+                var args = [],
+                    arg,
+                    i,
+                    key;
+                for (i = 0; i < arguments.length; i++) {
+                    arg = '';
+                    if (typeof arguments[i] === 'object') {
+                        arg += '\n[' + i + '] ';
+                        for (key in arguments[0]) {
+                            if (hasOwnProp(arguments[0], key)) {
+                                arg += key + ': ' + arguments[0][key] + ', ';
+                            }
+                        }
+                        arg = arg.slice(0, -2); // Remove trailing comma and space
+                    } else {
+                        arg = arguments[i];
+                    }
+                    args.push(arg);
+                }
+                warn(
+                    msg +
+                        '\nArguments: ' +
+                        Array.prototype.slice.call(args).join('') +
+                        '\n' +
+                        new Error().stack
+                );
+                firstTime = false;
+            }
+            return fn.apply(this, arguments);
+        }, fn);
+    }
+
+    var deprecations = {};
+
+    function deprecateSimple(name, msg) {
+        if (hooks.deprecationHandler != null) {
+            hooks.deprecationHandler(name, msg);
+        }
+        if (!deprecations[name]) {
+            warn(msg);
+            deprecations[name] = true;
+        }
+    }
+
+    hooks.suppressDeprecationWarnings = false;
+    hooks.deprecationHandler = null;
+
+    function isFunction(input) {
+        return (
+            (typeof Function !== 'undefined' && input instanceof Function) ||
+            Object.prototype.toString.call(input) === '[object Function]'
+        );
+    }
+
+    function set(config) {
+        var prop, i;
+        for (i in config) {
+            if (hasOwnProp(config, i)) {
+                prop = config[i];
+                if (isFunction(prop)) {
+                    this[i] = prop;
+                } else {
+                    this['_' + i] = prop;
+                }
+            }
+        }
+        this._config = config;
+        // Lenient ordinal parsing accepts just a number in addition to
+        // number + (possibly) stuff coming from _dayOfMonthOrdinalParse.
+        // TODO: Remove "ordinalParse" fallback in next major release.
+        this._dayOfMonthOrdinalParseLenient = new RegExp(
+            (this._dayOfMonthOrdinalParse.source || this._ordinalParse.source) +
+                '|' +
+                /\d{1,2}/.source
+        );
+    }
+
+    function mergeConfigs(parentConfig, childConfig) {
+        var res = extend({}, parentConfig),
+            prop;
+        for (prop in childConfig) {
+            if (hasOwnProp(childConfig, prop)) {
+                if (isObject(parentConfig[prop]) && isObject(childConfig[prop])) {
+                    res[prop] = {};
+                    extend(res[prop], parentConfig[prop]);
+                    extend(res[prop], childConfig[prop]);
+                } else if (childConfig[prop] != null) {
+                    res[prop] = childConfig[prop];
+                } else {
+                    delete res[prop];
+                }
+            }
+        }
+        for (prop in parentConfig) {
+            if (
+                hasOwnProp(parentConfig, prop) &&
+                !hasOwnProp(childConfig, prop) &&
+                isObject(parentConfig[prop])
+            ) {
+                // make sure changes to properties don't modify parent config
+                res[prop] = extend({}, res[prop]);
+            }
+        }
+        return res;
+    }
+
+    function Locale(config) {
+        if (config != null) {
+            this.set(config);
+        }
+    }
+
+    var keys;
+
+    if (Object.keys) {
+        keys = Object.keys;
+    } else {
+        keys = function (obj) {
+            var i,
+                res = [];
+            for (i in obj) {
+                if (hasOwnProp(obj, i)) {
+                    res.push(i);
+                }
+            }
+            return res;
+        };
+    }
+
+    var defaultCalendar = {
+        sameDay: '[Today at] LT',
+        nextDay: '[Tomorrow at] LT',
+        nextWeek: 'dddd [at] LT',
+        lastDay: '[Yesterday at] LT',
+        lastWeek: '[Last] dddd [at] LT',
+        sameElse: 'L',
+    };
+
+    function calendar(key, mom, now) {
+        var output = this._calendar[key] || this._calendar['sameElse'];
+        return isFunction(output) ? output.call(mom, now) : output;
+    }
+
+    function zeroFill(number, targetLength, forceSign) {
+        var absNumber = '' + Math.abs(number),
+            zerosToFill = targetLength - absNumber.length,
+            sign = number >= 0;
+        return (
+            (sign ? (forceSign ? '+' : '') : '-') +
+            Math.pow(10, Math.max(0, zerosToFill)).toString().substr(1) +
+            absNumber
+        );
+    }
+
+    var formattingTokens = /(\[[^\[]*\])|(\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|N{1,5}|YYYYYY|YYYYY|YYYY|YY|y{2,4}|yo?|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,
+        localFormattingTokens = /(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g,
+        formatFunctions = {},
+        formatTokenFunctions = {};
+
+    // token:    'M'
+    // padded:   ['MM', 2]
+    // ordinal:  'Mo'
+    // callback: function () { this.month() + 1 }
+    function addFormatToken(token, padded, ordinal, callback) {
+        var func = callback;
+        if (typeof callback === 'string') {
+            func = function () {
+                return this[callback]();
+            };
+        }
+        if (token) {
+            formatTokenFunctions[token] = func;
+        }
+        if (padded) {
+            formatTokenFunctions[padded[0]] = function () {
+                return zeroFill(func.apply(this, arguments), padded[1], padded[2]);
+            };
+        }
+        if (ordinal) {
+            formatTokenFunctions[ordinal] = function () {
+                return this.localeData().ordinal(
+                    func.apply(this, arguments),
+                    token
+                );
+            };
+        }
+    }
+
+    function removeFormattingTokens(input) {
+        if (input.match(/\[[\s\S]/)) {
+            return input.replace(/^\[|\]$/g, '');
+        }
+        return input.replace(/\\/g, '');
+    }
+
+    function makeFormatFunction(format) {
+        var array = format.match(formattingTokens),
+            i,
+            length;
+
+        for (i = 0, length = array.length; i < length; i++) {
+            if (formatTokenFunctions[array[i]]) {
+                array[i] = formatTokenFunctions[array[i]];
+            } else {
+                array[i] = removeFormattingTokens(array[i]);
+            }
+        }
+
+        return function (mom) {
+            var output = '',
+                i;
+            for (i = 0; i < length; i++) {
+                output += isFunction(array[i])
+                    ? array[i].call(mom, format)
+                    : array[i];
+            }
+            return output;
+        };
+    }
+
+    // format date using native date object
+    function formatMoment(m, format) {
+        if (!m.isValid()) {
+            return m.localeData().invalidDate();
+        }
+
+        format = expandFormat(format, m.localeData());
+        formatFunctions[format] =
+            formatFunctions[format] || makeFormatFunction(format);
+
+        return formatFunctions[format](m);
+    }
+
+    function expandFormat(format, locale) {
+        var i = 5;
+
+        function replaceLongDateFormatTokens(input) {
+            return locale.longDateFormat(input) || input;
+        }
+
+        localFormattingTokens.lastIndex = 0;
+        while (i >= 0 && localFormattingTokens.test(format)) {
+            format = format.replace(
+                localFormattingTokens,
+                replaceLongDateFormatTokens
+            );
+            localFormattingTokens.lastIndex = 0;
+            i -= 1;
+        }
+
+        return format;
+    }
+
+    var defaultLongDateFormat = {
+        LTS: 'h:mm:ss A',
+        LT: 'h:mm A',
+        L: 'MM/DD/YYYY',
+        LL: 'MMMM D, YYYY',
+        LLL: 'MMMM D, YYYY h:mm A',
+        LLLL: 'dddd, MMMM D, YYYY h:mm A',
+    };
+
+    function longDateFormat(key) {
+        var format = this._longDateFormat[key],
+            formatUpper = this._longDateFormat[key.toUpperCase()];
+
+        if (format || !formatUpper) {
+            return format;
+        }
+
+        this._longDateFormat[key] = formatUpper
+            .match(formattingTokens)
+            .map(function (tok) {
+                if (
+                    tok === 'MMMM' ||
+                    tok === 'MM' ||
+                    tok === 'DD' ||
+                    tok === 'dddd'
+                ) {
+                    return tok.slice(1);
+                }
+                return tok;
+            })
+            .join('');
+
+        return this._longDateFormat[key];
+    }
+
+    var defaultInvalidDate = 'Invalid date';
+
+    function invalidDate() {
+        return this._invalidDate;
+    }
+
+    var defaultOrdinal = '%d',
+        defaultDayOfMonthOrdinalParse = /\d{1,2}/;
+
+    function ordinal(number) {
+        return this._ordinal.replace('%d', number);
+    }
+
+    var defaultRelativeTime = {
+        future: 'in %s',
+        past: '%s ago',
+        s: 'a few seconds',
+        ss: '%d seconds',
+        m: 'a minute',
+        mm: '%d minutes',
+        h: 'an hour',
+        hh: '%d hours',
+        d: 'a day',
+        dd: '%d days',
+        w: 'a week',
+        ww: '%d weeks',
+        M: 'a month',
+        MM: '%d months',
+        y: 'a year',
+        yy: '%d years',
+    };
+
+    function relativeTime(number, withoutSuffix, string, isFuture) {
+        var output = this._relativeTime[string];
+        return isFunction(output)
+            ? output(number, withoutSuffix, string, isFuture)
+            : output.replace(/%d/i, number);
+    }
+
+    function pastFuture(diff, output) {
+        var format = this._relativeTime[diff > 0 ? 'future' : 'past'];
+        return isFunction(format) ? format(output) : format.replace(/%s/i, output);
+    }
+
+    var aliases = {};
+
+    function addUnitAlias(unit, shorthand) {
+        var lowerCase = unit.toLowerCase();
+        aliases[lowerCase] = aliases[lowerCase + 's'] = aliases[shorthand] = unit;
+    }
+
+    function normalizeUnits(units) {
+        return typeof units === 'string'
+            ? aliases[units] || aliases[units.toLowerCase()]
+            : undefined;
+    }
+
+    function normalizeObjectUnits(inputObject) {
+        var normalizedInput = {},
+            normalizedProp,
+            prop;
+
+        for (prop in inputObject) {
+            if (hasOwnProp(inputObject, prop)) {
+                normalizedProp = normalizeUnits(prop);
+                if (normalizedProp) {
+                    normalizedInput[normalizedProp] = inputObject[prop];
+                }
+            }
+        }
+
+        return normalizedInput;
+    }
+
+    var priorities = {};
+
+    function addUnitPriority(unit, priority) {
+        priorities[unit] = priority;
+    }
+
+    function getPrioritizedUnits(unitsObj) {
+        var units = [],
+            u;
+        for (u in unitsObj) {
+            if (hasOwnProp(unitsObj, u)) {
+                units.push({ unit: u, priority: priorities[u] });
+            }
+        }
+        units.sort(function (a, b) {
+            return a.priority - b.priority;
+        });
+        return units;
+    }
+
+    function isLeapYear(year) {
+        return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;
+    }
+
+    function absFloor(number) {
+        if (number < 0) {
+            // -0 -> 0
+            return Math.ceil(number) || 0;
+        } else {
+            return Math.floor(number);
+        }
+    }
+
+    function toInt(argumentForCoercion) {
+        var coercedNumber = +argumentForCoercion,
+            value = 0;
+
+        if (coercedNumber !== 0 && isFinite(coercedNumber)) {
+            value = absFloor(coercedNumber);
+        }
+
+        return value;
+    }
+
+    function makeGetSet(unit, keepTime) {
+        return function (value) {
+            if (value != null) {
+                set$1(this, unit, value);
+                hooks.updateOffset(this, keepTime);
+                return this;
+            } else {
+                return get(this, unit);
+            }
+        };
+    }
+
+    function get(mom, unit) {
+        return mom.isValid()
+            ? mom._d['get' + (mom._isUTC ? 'UTC' : '') + unit]()
+            : NaN;
+    }
+
+    function set$1(mom, unit, value) {
+        if (mom.isValid() && !isNaN(value)) {
+            if (
+                unit === 'FullYear' &&
+                isLeapYear(mom.year()) &&
+                mom.month() === 1 &&
+                mom.date() === 29
+            ) {
+                value = toInt(value);
+                mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](
+                    value,
+                    mom.month(),
+                    daysInMonth(value, mom.month())
+                );
+            } else {
+                mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](value);
+            }
+        }
+    }
+
+    // MOMENTS
+
+    function stringGet(units) {
+        units = normalizeUnits(units);
+        if (isFunction(this[units])) {
+            return this[units]();
+        }
+        return this;
+    }
+
+    function stringSet(units, value) {
+        if (typeof units === 'object') {
+            units = normalizeObjectUnits(units);
+            var prioritized = getPrioritizedUnits(units),
+                i;
+            for (i = 0; i < prioritized.length; i++) {
+                this[prioritized[i].unit](units[prioritized[i].unit]);
+            }
+        } else {
+            units = normalizeUnits(units);
+            if (isFunction(this[units])) {
+                return this[units](value);
+            }
+        }
+        return this;
+    }
+
+    var match1 = /\d/, //       0 - 9
+        match2 = /\d\d/, //      00 - 99
+        match3 = /\d{3}/, //     000 - 999
+        match4 = /\d{4}/, //    0000 - 9999
+        match6 = /[+-]?\d{6}/, // -999999 - 999999
+        match1to2 = /\d\d?/, //       0 - 99
+        match3to4 = /\d\d\d\d?/, //     999 - 9999
+        match5to6 = /\d\d\d\d\d\d?/, //   99999 - 999999
+        match1to3 = /\d{1,3}/, //       0 - 999
+        match1to4 = /\d{1,4}/, //       0 - 9999
+        match1to6 = /[+-]?\d{1,6}/, // -999999 - 999999
+        matchUnsigned = /\d+/, //       0 - inf
+        matchSigned = /[+-]?\d+/, //    -inf - inf
+        matchOffset = /Z|[+-]\d\d:?\d\d/gi, // +00:00 -00:00 +0000 -0000 or Z
+        matchShortOffset = /Z|[+-]\d\d(?::?\d\d)?/gi, // +00 -00 +00:00 -00:00 +0000 -0000 or Z
+        matchTimestamp = /[+-]?\d+(\.\d{1,3})?/, // 123456789 123456789.123
+        // any word (or two) characters or numbers including two/three word month in arabic.
+        // includes scottish gaelic two word and hyphenated months
+        matchWord = /[0-9]{0,256}['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFF07\uFF10-\uFFEF]{1,256}|[\u0600-\u06FF\/]{1,256}(\s*?[\u0600-\u06FF]{1,256}){1,2}/i,
+        regexes;
+
+    regexes = {};
+
+    function addRegexToken(token, regex, strictRegex) {
+        regexes[token] = isFunction(regex)
+            ? regex
+            : function (isStrict, localeData) {
+                  return isStrict && strictRegex ? strictRegex : regex;
+              };
+    }
+
+    function getParseRegexForToken(token, config) {
+        if (!hasOwnProp(regexes, token)) {
+            return new RegExp(unescapeFormat(token));
+        }
+
+        return regexes[token](config._strict, config._locale);
+    }
+
+    // Code from http://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascript
+    function unescapeFormat(s) {
+        return regexEscape(
+            s
+                .replace('\\', '')
+                .replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g, function (
+                    matched,
+                    p1,
+                    p2,
+                    p3,
+                    p4
+                ) {
+                    return p1 || p2 || p3 || p4;
+                })
+        );
+    }
+
+    function regexEscape(s) {
+        return s.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&');
+    }
+
+    var tokens = {};
+
+    function addParseToken(token, callback) {
+        var i,
+            func = callback;
+        if (typeof token === 'string') {
+            token = [token];
+        }
+        if (isNumber(callback)) {
+            func = function (input, array) {
+                array[callback] = toInt(input);
+            };
+        }
+        for (i = 0; i < token.length; i++) {
+            tokens[token[i]] = func;
+        }
+    }
+
+    function addWeekParseToken(token, callback) {
+        addParseToken(token, function (input, array, config, token) {
+            config._w = config._w || {};
+            callback(input, config._w, config, token);
+        });
+    }
+
+    function addTimeToArrayFromToken(token, input, config) {
+        if (input != null && hasOwnProp(tokens, token)) {
+            tokens[token](input, config._a, config, token);
+        }
+    }
+
+    var YEAR = 0,
+        MONTH = 1,
+        DATE = 2,
+        HOUR = 3,
+        MINUTE = 4,
+        SECOND = 5,
+        MILLISECOND = 6,
+        WEEK = 7,
+        WEEKDAY = 8;
+
+    function mod(n, x) {
+        return ((n % x) + x) % x;
+    }
+
+    var indexOf;
+
+    if (Array.prototype.indexOf) {
+        indexOf = Array.prototype.indexOf;
+    } else {
+        indexOf = function (o) {
+            // I know
+            var i;
+            for (i = 0; i < this.length; ++i) {
+                if (this[i] === o) {
+                    return i;
+                }
+            }
+            return -1;
+        };
+    }
+
+    function daysInMonth(year, month) {
+        if (isNaN(year) || isNaN(month)) {
+            return NaN;
+        }
+        var modMonth = mod(month, 12);
+        year += (month - modMonth) / 12;
+        return modMonth === 1
+            ? isLeapYear(year)
+                ? 29
+                : 28
+            : 31 - ((modMonth % 7) % 2);
+    }
+
+    // FORMATTING
+
+    addFormatToken('M', ['MM', 2], 'Mo', function () {
+        return this.month() + 1;
+    });
+
+    addFormatToken('MMM', 0, 0, function (format) {
+        return this.localeData().monthsShort(this, format);
+    });
+
+    addFormatToken('MMMM', 0, 0, function (format) {
+        return this.localeData().months(this, format);
+    });
+
+    // ALIASES
+
+    addUnitAlias('month', 'M');
+
+    // PRIORITY
+
+    addUnitPriority('month', 8);
+
+    // PARSING
+
+    addRegexToken('M', match1to2);
+    addRegexToken('MM', match1to2, match2);
+    addRegexToken('MMM', function (isStrict, locale) {
+        return locale.monthsShortRegex(isStrict);
+    });
+    addRegexToken('MMMM', function (isStrict, locale) {
+        return locale.monthsRegex(isStrict);
+    });
+
+    addParseToken(['M', 'MM'], function (input, array) {
+        array[MONTH] = toInt(input) - 1;
+    });
+
+    addParseToken(['MMM', 'MMMM'], function (input, array, config, token) {
+        var month = config._locale.monthsParse(input, token, config._strict);
+        // if we didn't find a month name, mark the date as invalid.
+        if (month != null) {
+            array[MONTH] = month;
+        } else {
+            getParsingFlags(config).invalidMonth = input;
+        }
+    });
+
+    // LOCALES
+
+    var defaultLocaleMonths = 'January_February_March_April_May_June_July_August_September_October_November_December'.split(
+            '_'
+        ),
+        defaultLocaleMonthsShort = 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split(
+            '_'
+        ),
+        MONTHS_IN_FORMAT = /D[oD]?(\[[^\[\]]*\]|\s)+MMMM?/,
+        defaultMonthsShortRegex = matchWord,
+        defaultMonthsRegex = matchWord;
+
+    function localeMonths(m, format) {
+        if (!m) {
+            return isArray(this._months)
+                ? this._months
+                : this._months['standalone'];
+        }
+        return isArray(this._months)
+            ? this._months[m.month()]
+            : this._months[
+                  (this._months.isFormat || MONTHS_IN_FORMAT).test(format)
+                      ? 'format'
+                      : 'standalone'
+              ][m.month()];
+    }
+
+    function localeMonthsShort(m, format) {
+        if (!m) {
+            return isArray(this._monthsShort)
+                ? this._monthsShort
+                : this._monthsShort['standalone'];
+        }
+        return isArray(this._monthsShort)
+            ? this._monthsShort[m.month()]
+            : this._monthsShort[
+                  MONTHS_IN_FORMAT.test(format) ? 'format' : 'standalone'
+              ][m.month()];
+    }
+
+    function handleStrictParse(monthName, format, strict) {
+        var i,
+            ii,
+            mom,
+            llc = monthName.toLocaleLowerCase();
+        if (!this._monthsParse) {
+            // this is not used
+            this._monthsParse = [];
+            this._longMonthsParse = [];
+            this._shortMonthsParse = [];
+            for (i = 0; i < 12; ++i) {
+                mom = createUTC([2000, i]);
+                this._shortMonthsParse[i] = this.monthsShort(
+                    mom,
+                    ''
+                ).toLocaleLowerCase();
+                this._longMonthsParse[i] = this.months(mom, '').toLocaleLowerCase();
+            }
+        }
+
+        if (strict) {
+            if (format === 'MMM') {
+                ii = indexOf.call(this._shortMonthsParse, llc);
+                return ii !== -1 ? ii : null;
+            } else {
+                ii = indexOf.call(this._longMonthsParse, llc);
+                return ii !== -1 ? ii : null;
+            }
+        } else {
+            if (format === 'MMM') {
+                ii = indexOf.call(this._shortMonthsParse, llc);
+                if (ii !== -1) {
+                    return ii;
+                }
+                ii = indexOf.call(this._longMonthsParse, llc);
+                return ii !== -1 ? ii : null;
+            } else {
+                ii = indexOf.call(this._longMonthsParse, llc);
+                if (ii !== -1) {
+                    return ii;
+                }
+                ii = indexOf.call(this._shortMonthsParse, llc);
+                return ii !== -1 ? ii : null;
+            }
+        }
+    }
+
+    function localeMonthsParse(monthName, format, strict) {
+        var i, mom, regex;
+
+        if (this._monthsParseExact) {
+            return handleStrictParse.call(this, monthName, format, strict);
+        }
+
+        if (!this._monthsParse) {
+            this._monthsParse = [];
+            this._longMonthsParse = [];
+            this._shortMonthsParse = [];
+        }
+
+        // TODO: add sorting
+        // Sorting makes sure if one month (or abbr) is a prefix of another
+        // see sorting in computeMonthsParse
+        for (i = 0; i < 12; i++) {
+            // make the regex if we don't have it already
+            mom = createUTC([2000, i]);
+            if (strict && !this._longMonthsParse[i]) {
+                this._longMonthsParse[i] = new RegExp(
+                    '^' + this.months(mom, '').replace('.', '') + '$',
+                    'i'
+                );
+                this._shortMonthsParse[i] = new RegExp(
+                    '^' + this.monthsShort(mom, '').replace('.', '') + '$',
+                    'i'
+                );
+            }
+            if (!strict && !this._monthsParse[i]) {
+                regex =
+                    '^' + this.months(mom, '') + '|^' + this.monthsShort(mom, '');
+                this._monthsParse[i] = new RegExp(regex.replace('.', ''), 'i');
+            }
+            // test the regex
+            if (
+                strict &&
+                format === 'MMMM' &&
+                this._longMonthsParse[i].test(monthName)
+            ) {
+                return i;
+            } else if (
+                strict &&
+                format === 'MMM' &&
+                this._shortMonthsParse[i].test(monthName)
+            ) {
+                return i;
+            } else if (!strict && this._monthsParse[i].test(monthName)) {
+                return i;
+            }
+        }
+    }
+
+    // MOMENTS
+
+    function setMonth(mom, value) {
+        var dayOfMonth;
+
+        if (!mom.isValid()) {
+            // No op
+            return mom;
+        }
+
+        if (typeof value === 'string') {
+            if (/^\d+$/.test(value)) {
+                value = toInt(value);
+            } else {
+                value = mom.localeData().monthsParse(value);
+                // TODO: Another silent failure?
+                if (!isNumber(value)) {
+                    return mom;
+                }
+            }
+        }
+
+        dayOfMonth = Math.min(mom.date(), daysInMonth(mom.year(), value));
+        mom._d['set' + (mom._isUTC ? 'UTC' : '') + 'Month'](value, dayOfMonth);
+        return mom;
+    }
+
+    function getSetMonth(value) {
+        if (value != null) {
+            setMonth(this, value);
+            hooks.updateOffset(this, true);
+            return this;
+        } else {
+            return get(this, 'Month');
+        }
+    }
+
+    function getDaysInMonth() {
+        return daysInMonth(this.year(), this.month());
+    }
+
+    function monthsShortRegex(isStrict) {
+        if (this._monthsParseExact) {
+            if (!hasOwnProp(this, '_monthsRegex')) {
+                computeMonthsParse.call(this);
+            }
+            if (isStrict) {
+                return this._monthsShortStrictRegex;
+            } else {
+                return this._monthsShortRegex;
+            }
+        } else {
+            if (!hasOwnProp(this, '_monthsShortRegex')) {
+                this._monthsShortRegex = defaultMonthsShortRegex;
+            }
+            return this._monthsShortStrictRegex && isStrict
+                ? this._monthsShortStrictRegex
+                : this._monthsShortRegex;
+        }
+    }
+
+    function monthsRegex(isStrict) {
+        if (this._monthsParseExact) {
+            if (!hasOwnProp(this, '_monthsRegex')) {
+                computeMonthsParse.call(this);
+            }
+            if (isStrict) {
+                return this._monthsStrictRegex;
+            } else {
+                return this._monthsRegex;
+            }
+        } else {
+            if (!hasOwnProp(this, '_monthsRegex')) {
+                this._monthsRegex = defaultMonthsRegex;
+            }
+            return this._monthsStrictRegex && isStrict
+                ? this._monthsStrictRegex
+                : this._monthsRegex;
+        }
+    }
+
+    function computeMonthsParse() {
+        function cmpLenRev(a, b) {
+            return b.length - a.length;
+        }
+
+        var shortPieces = [],
+            longPieces = [],
+            mixedPieces = [],
+            i,
+            mom;
+        for (i = 0; i < 12; i++) {
+            // make the regex if we don't have it already
+            mom = createUTC([2000, i]);
+            shortPieces.push(this.monthsShort(mom, ''));
+            longPieces.push(this.months(mom, ''));
+            mixedPieces.push(this.months(mom, ''));
+            mixedPieces.push(this.monthsShort(mom, ''));
+        }
+        // Sorting makes sure if one month (or abbr) is a prefix of another it
+        // will match the longer piece.
+        shortPieces.sort(cmpLenRev);
+        longPieces.sort(cmpLenRev);
+        mixedPieces.sort(cmpLenRev);
+        for (i = 0; i < 12; i++) {
+            shortPieces[i] = regexEscape(shortPieces[i]);
+            longPieces[i] = regexEscape(longPieces[i]);
+        }
+        for (i = 0; i < 24; i++) {
+            mixedPieces[i] = regexEscape(mixedPieces[i]);
+        }
+
+        this._monthsRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');
+        this._monthsShortRegex = this._monthsRegex;
+        this._monthsStrictRegex = new RegExp(
+            '^(' + longPieces.join('|') + ')',
+            'i'
+        );
+        this._monthsShortStrictRegex = new RegExp(
+            '^(' + shortPieces.join('|') + ')',
+            'i'
+        );
+    }
+
+    // FORMATTING
+
+    addFormatToken('Y', 0, 0, function () {
+        var y = this.year();
+        return y <= 9999 ? zeroFill(y, 4) : '+' + y;
+    });
+
+    addFormatToken(0, ['YY', 2], 0, function () {
+        return this.year() % 100;
+    });
+
+    addFormatToken(0, ['YYYY', 4], 0, 'year');
+    addFormatToken(0, ['YYYYY', 5], 0, 'year');
+    addFormatToken(0, ['YYYYYY', 6, true], 0, 'year');
+
+    // ALIASES
+
+    addUnitAlias('year', 'y');
+
+    // PRIORITIES
+
+    addUnitPriority('year', 1);
+
+    // PARSING
+
+    addRegexToken('Y', matchSigned);
+    addRegexToken('YY', match1to2, match2);
+    addRegexToken('YYYY', match1to4, match4);
+    addRegexToken('YYYYY', match1to6, match6);
+    addRegexToken('YYYYYY', match1to6, match6);
+
+    addParseToken(['YYYYY', 'YYYYYY'], YEAR);
+    addParseToken('YYYY', function (input, array) {
+        array[YEAR] =
+            input.length === 2 ? hooks.parseTwoDigitYear(input) : toInt(input);
+    });
+    addParseToken('YY', function (input, array) {
+        array[YEAR] = hooks.parseTwoDigitYear(input);
+    });
+    addParseToken('Y', function (input, array) {
+        array[YEAR] = parseInt(input, 10);
+    });
+
+    // HELPERS
+
+    function daysInYear(year) {
+        return isLeapYear(year) ? 366 : 365;
+    }
+
+    // HOOKS
+
+    hooks.parseTwoDigitYear = function (input) {
+        return toInt(input) + (toInt(input) > 68 ? 1900 : 2000);
+    };
+
+    // MOMENTS
+
+    var getSetYear = makeGetSet('FullYear', true);
+
+    function getIsLeapYear() {
+        return isLeapYear(this.year());
+    }
+
+    function createDate(y, m, d, h, M, s, ms) {
+        // can't just apply() to create a date:
+        // https://stackoverflow.com/q/181348
+        var date;
+        // the date constructor remaps years 0-99 to 1900-1999
+        if (y < 100 && y >= 0) {
+            // preserve leap years using a full 400 year cycle, then reset
+            date = new Date(y + 400, m, d, h, M, s, ms);
+            if (isFinite(date.getFullYear())) {
+                date.setFullYear(y);
+            }
+        } else {
+            date = new Date(y, m, d, h, M, s, ms);
+        }
+
+        return date;
+    }
+
+    function createUTCDate(y) {
+        var date, args;
+        // the Date.UTC function remaps years 0-99 to 1900-1999
+        if (y < 100 && y >= 0) {
+            args = Array.prototype.slice.call(arguments);
+            // preserve leap years using a full 400 year cycle, then reset
+            args[0] = y + 400;
+            date = new Date(Date.UTC.apply(null, args));
+            if (isFinite(date.getUTCFullYear())) {
+                date.setUTCFullYear(y);
+            }
+        } else {
+            date = new Date(Date.UTC.apply(null, arguments));
+        }
+
+        return date;
+    }
+
+    // start-of-first-week - start-of-year
+    function firstWeekOffset(year, dow, doy) {
+        var // first-week day -- which january is always in the first week (4 for iso, 1 for other)
+            fwd = 7 + dow - doy,
+            // first-week day local weekday -- which local weekday is fwd
+            fwdlw = (7 + createUTCDate(year, 0, fwd).getUTCDay() - dow) % 7;
+
+        return -fwdlw + fwd - 1;
+    }
+
+    // https://en.wikipedia.org/wiki/ISO_week_date#Calculating_a_date_given_the_year.2C_week_number_and_weekday
+    function dayOfYearFromWeeks(year, week, weekday, dow, doy) {
+        var localWeekday = (7 + weekday - dow) % 7,
+            weekOffset = firstWeekOffset(year, dow, doy),
+            dayOfYear = 1 + 7 * (week - 1) + localWeekday + weekOffset,
+            resYear,
+            resDayOfYear;
+
+        if (dayOfYear <= 0) {
+            resYear = year - 1;
+            resDayOfYear = daysInYear(resYear) + dayOfYear;
+        } else if (dayOfYear > daysInYear(year)) {
+            resYear = year + 1;
+            resDayOfYear = dayOfYear - daysInYear(year);
+        } else {
+            resYear = year;
+            resDayOfYear = dayOfYear;
+        }
+
+        return {
+            year: resYear,
+            dayOfYear: resDayOfYear,
+        };
+    }
+
+    function weekOfYear(mom, dow, doy) {
+        var weekOffset = firstWeekOffset(mom.year(), dow, doy),
+            week = Math.floor((mom.dayOfYear() - weekOffset - 1) / 7) + 1,
+            resWeek,
+            resYear;
+
+        if (week < 1) {
+            resYear = mom.year() - 1;
+            resWeek = week + weeksInYear(resYear, dow, doy);
+        } else if (week > weeksInYear(mom.year(), dow, doy)) {
+            resWeek = week - weeksInYear(mom.year(), dow, doy);
+            resYear = mom.year() + 1;
+        } else {
+            resYear = mom.year();
+            resWeek = week;
+        }
+
+        return {
+            week: resWeek,
+            year: resYear,
+        };
+    }
+
+    function weeksInYear(year, dow, doy) {
+        var weekOffset = firstWeekOffset(year, dow, doy),
+            weekOffsetNext = firstWeekOffset(year + 1, dow, doy);
+        return (daysInYear(year) - weekOffset + weekOffsetNext) / 7;
+    }
+
+    // FORMATTING
+
+    addFormatToken('w', ['ww', 2], 'wo', 'week');
+    addFormatToken('W', ['WW', 2], 'Wo', 'isoWeek');
+
+    // ALIASES
+
+    addUnitAlias('week', 'w');
+    addUnitAlias('isoWeek', 'W');
+
+    // PRIORITIES
+
+    addUnitPriority('week', 5);
+    addUnitPriority('isoWeek', 5);
+
+    // PARSING
+
+    addRegexToken('w', match1to2);
+    addRegexToken('ww', match1to2, match2);
+    addRegexToken('W', match1to2);
+    addRegexToken('WW', match1to2, match2);
+
+    addWeekParseToken(['w', 'ww', 'W', 'WW'], function (
+        input,
+        week,
+        config,
+        token
+    ) {
+        week[token.substr(0, 1)] = toInt(input);
+    });
+
+    // HELPERS
+
+    // LOCALES
+
+    function localeWeek(mom) {
+        return weekOfYear(mom, this._week.dow, this._week.doy).week;
+    }
+
+    var defaultLocaleWeek = {
+        dow: 0, // Sunday is the first day of the week.
+        doy: 6, // The week that contains Jan 6th is the first week of the year.
+    };
+
+    function localeFirstDayOfWeek() {
+        return this._week.dow;
+    }
+
+    function localeFirstDayOfYear() {
+        return this._week.doy;
+    }
+
+    // MOMENTS
+
+    function getSetWeek(input) {
+        var week = this.localeData().week(this);
+        return input == null ? week : this.add((input - week) * 7, 'd');
+    }
+
+    function getSetISOWeek(input) {
+        var week = weekOfYear(this, 1, 4).week;
+        return input == null ? week : this.add((input - week) * 7, 'd');
+    }
+
+    // FORMATTING
+
+    addFormatToken('d', 0, 'do', 'day');
+
+    addFormatToken('dd', 0, 0, function (format) {
+        return this.localeData().weekdaysMin(this, format);
+    });
+
+    addFormatToken('ddd', 0, 0, function (format) {
+        return this.localeData().weekdaysShort(this, format);
+    });
+
+    addFormatToken('dddd', 0, 0, function (format) {
+        return this.localeData().weekdays(this, format);
+    });
+
+    addFormatToken('e', 0, 0, 'weekday');
+    addFormatToken('E', 0, 0, 'isoWeekday');
+
+    // ALIASES
+
+    addUnitAlias('day', 'd');
+    addUnitAlias('weekday', 'e');
+    addUnitAlias('isoWeekday', 'E');
+
+    // PRIORITY
+    addUnitPriority('day', 11);
+    addUnitPriority('weekday', 11);
+    addUnitPriority('isoWeekday', 11);
+
+    // PARSING
+
+    addRegexToken('d', match1to2);
+    addRegexToken('e', match1to2);
+    addRegexToken('E', match1to2);
+    addRegexToken('dd', function (isStrict, locale) {
+        return locale.weekdaysMinRegex(isStrict);
+    });
+    addRegexToken('ddd', function (isStrict, locale) {
+        return locale.weekdaysShortRegex(isStrict);
+    });
+    addRegexToken('dddd', function (isStrict, locale) {
+        return locale.weekdaysRegex(isStrict);
+    });
+
+    addWeekParseToken(['dd', 'ddd', 'dddd'], function (input, week, config, token) {
+        var weekday = config._locale.weekdaysParse(input, token, config._strict);
+        // if we didn't get a weekday name, mark the date as invalid
+        if (weekday != null) {
+            week.d = weekday;
+        } else {
+            getParsingFlags(config).invalidWeekday = input;
+        }
+    });
+
+    addWeekParseToken(['d', 'e', 'E'], function (input, week, config, token) {
+        week[token] = toInt(input);
+    });
+
+    // HELPERS
+
+    function parseWeekday(input, locale) {
+        if (typeof input !== 'string') {
+            return input;
+        }
+
+        if (!isNaN(input)) {
+            return parseInt(input, 10);
+        }
+
+        input = locale.weekdaysParse(input);
+        if (typeof input === 'number') {
+            return input;
+        }
+
+        return null;
+    }
+
+    function parseIsoWeekday(input, locale) {
+        if (typeof input === 'string') {
+            return locale.weekdaysParse(input) % 7 || 7;
+        }
+        return isNaN(input) ? null : input;
+    }
+
+    // LOCALES
+    function shiftWeekdays(ws, n) {
+        return ws.slice(n, 7).concat(ws.slice(0, n));
+    }
+
+    var defaultLocaleWeekdays = 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split(
+            '_'
+        ),
+        defaultLocaleWeekdaysShort = 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),
+        defaultLocaleWeekdaysMin = 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),
+        defaultWeekdaysRegex = matchWord,
+        defaultWeekdaysShortRegex = matchWord,
+        defaultWeekdaysMinRegex = matchWord;
+
+    function localeWeekdays(m, format) {
+        var weekdays = isArray(this._weekdays)
+            ? this._weekdays
+            : this._weekdays[
+                  m && m !== true && this._weekdays.isFormat.test(format)
+                      ? 'format'
+                      : 'standalone'
+              ];
+        return m === true
+            ? shiftWeekdays(weekdays, this._week.dow)
+            : m
+            ? weekdays[m.day()]
+            : weekdays;
+    }
+
+    function localeWeekdaysShort(m) {
+        return m === true
+            ? shiftWeekdays(this._weekdaysShort, this._week.dow)
+            : m
+            ? this._weekdaysShort[m.day()]
+            : this._weekdaysShort;
+    }
+
+    function localeWeekdaysMin(m) {
+        return m === true
+            ? shiftWeekdays(this._weekdaysMin, this._week.dow)
+            : m
+            ? this._weekdaysMin[m.day()]
+            : this._weekdaysMin;
+    }
+
+    function handleStrictParse$1(weekdayName, format, strict) {
+        var i,
+            ii,
+            mom,
+            llc = weekdayName.toLocaleLowerCase();
+        if (!this._weekdaysParse) {
+            this._weekdaysParse = [];
+            this._shortWeekdaysParse = [];
+            this._minWeekdaysParse = [];
+
+            for (i = 0; i < 7; ++i) {
+                mom = createUTC([2000, 1]).day(i);
+                this._minWeekdaysParse[i] = this.weekdaysMin(
+                    mom,
+                    ''
+                ).toLocaleLowerCase();
+                this._shortWeekdaysParse[i] = this.weekdaysShort(
+                    mom,
+                    ''
+                ).toLocaleLowerCase();
+                this._weekdaysParse[i] = this.weekdays(mom, '').toLocaleLowerCase();
+            }
+        }
+
+        if (strict) {
+            if (format === 'dddd') {
+                ii = indexOf.call(this._weekdaysParse, llc);
+                return ii !== -1 ? ii : null;
+            } else if (format === 'ddd') {
+                ii = indexOf.call(this._shortWeekdaysParse, llc);
+                return ii !== -1 ? ii : null;
+            } else {
+                ii = indexOf.call(this._minWeekdaysParse, llc);
+                return ii !== -1 ? ii : null;
+            }
+        } else {
+            if (format === 'dddd') {
+                ii = indexOf.call(this._weekdaysParse, llc);
+                if (ii !== -1) {
+                    return ii;
+                }
+                ii = indexOf.call(this._shortWeekdaysParse, llc);
+                if (ii !== -1) {
+                    return ii;
+                }
+                ii = indexOf.call(this._minWeekdaysParse, llc);
+                return ii !== -1 ? ii : null;
+            } else if (format === 'ddd') {
+                ii = indexOf.call(this._shortWeekdaysParse, llc);
+                if (ii !== -1) {
+                    return ii;
+                }
+                ii = indexOf.call(this._weekdaysParse, llc);
+                if (ii !== -1) {
+                    return ii;
+                }
+                ii = indexOf.call(this._minWeekdaysParse, llc);
+                return ii !== -1 ? ii : null;
+            } else {
+                ii = indexOf.call(this._minWeekdaysParse, llc);
+                if (ii !== -1) {
+                    return ii;
+                }
+                ii = indexOf.call(this._weekdaysParse, llc);
+                if (ii !== -1) {
+                    return ii;
+                }
+                ii = indexOf.call(this._shortWeekdaysParse, llc);
+                return ii !== -1 ? ii : null;
+            }
+        }
+    }
+
+    function localeWeekdaysParse(weekdayName, format, strict) {
+        var i, mom, regex;
+
+        if (this._weekdaysParseExact) {
+            return handleStrictParse$1.call(this, weekdayName, format, strict);
+        }
+
+        if (!this._weekdaysParse) {
+            this._weekdaysParse = [];
+            this._minWeekdaysParse = [];
+            this._shortWeekdaysParse = [];
+            this._fullWeekdaysParse = [];
+        }
+
+        for (i = 0; i < 7; i++) {
+            // make the regex if we don't have it already
+
+            mom = createUTC([2000, 1]).day(i);
+            if (strict && !this._fullWeekdaysParse[i]) {
+                this._fullWeekdaysParse[i] = new RegExp(
+                    '^' + this.weekdays(mom, '').replace('.', '\\.?') + '$',
+                    'i'
+                );
+                this._shortWeekdaysParse[i] = new RegExp(
+                    '^' + this.weekdaysShort(mom, '').replace('.', '\\.?') + '$',
+                    'i'
+                );
+                this._minWeekdaysParse[i] = new RegExp(
+                    '^' + this.weekdaysMin(mom, '').replace('.', '\\.?') + '$',
+                    'i'
+                );
+            }
+            if (!this._weekdaysParse[i]) {
+                regex =
+                    '^' +
+                    this.weekdays(mom, '') +
+                    '|^' +
+                    this.weekdaysShort(mom, '') +
+                    '|^' +
+                    this.weekdaysMin(mom, '');
+                this._weekdaysParse[i] = new RegExp(regex.replace('.', ''), 'i');
+            }
+            // test the regex
+            if (
+                strict &&
+                format === 'dddd' &&
+                this._fullWeekdaysParse[i].test(weekdayName)
+            ) {
+                return i;
+            } else if (
+                strict &&
+                format === 'ddd' &&
+                this._shortWeekdaysParse[i].test(weekdayName)
+            ) {
+                return i;
+            } else if (
+                strict &&
+                format === 'dd' &&
+                this._minWeekdaysParse[i].test(weekdayName)
+            ) {
+                return i;
+            } else if (!strict && this._weekdaysParse[i].test(weekdayName)) {
+                return i;
+            }
+        }
+    }
+
+    // MOMENTS
+
+    function getSetDayOfWeek(input) {
+        if (!this.isValid()) {
+            return input != null ? this : NaN;
+        }
+        var day = this._isUTC ? this._d.getUTCDay() : this._d.getDay();
+        if (input != null) {
+            input = parseWeekday(input, this.localeData());
+            return this.add(input - day, 'd');
+        } else {
+            return day;
+        }
+    }
+
+    function getSetLocaleDayOfWeek(input) {
+        if (!this.isValid()) {
+            return input != null ? this : NaN;
+        }
+        var weekday = (this.day() + 7 - this.localeData()._week.dow) % 7;
+        return input == null ? weekday : this.add(input - weekday, 'd');
+    }
+
+    function getSetISODayOfWeek(input) {
+        if (!this.isValid()) {
+            return input != null ? this : NaN;
+        }
+
+        // behaves the same as moment#day except
+        // as a getter, returns 7 instead of 0 (1-7 range instead of 0-6)
+        // as a setter, sunday should belong to the previous week.
+
+        if (input != null) {
+            var weekday = parseIsoWeekday(input, this.localeData());
+            return this.day(this.day() % 7 ? weekday : weekday - 7);
+        } else {
+            return this.day() || 7;
+        }
+    }
+
+    function weekdaysRegex(isStrict) {
+        if (this._weekdaysParseExact) {
+            if (!hasOwnProp(this, '_weekdaysRegex')) {
+                computeWeekdaysParse.call(this);
+            }
+            if (isStrict) {
+                return this._weekdaysStrictRegex;
+            } else {
+                return this._weekdaysRegex;
+            }
+        } else {
+            if (!hasOwnProp(this, '_weekdaysRegex')) {
+                this._weekdaysRegex = defaultWeekdaysRegex;
+            }
+            return this._weekdaysStrictRegex && isStrict
+                ? this._weekdaysStrictRegex
+                : this._weekdaysRegex;
+        }
+    }
+
+    function weekdaysShortRegex(isStrict) {
+        if (this._weekdaysParseExact) {
+            if (!hasOwnProp(this, '_weekdaysRegex')) {
+                computeWeekdaysParse.call(this);
+            }
+            if (isStrict) {
+                return this._weekdaysShortStrictRegex;
+            } else {
+                return this._weekdaysShortRegex;
+            }
+        } else {
+            if (!hasOwnProp(this, '_weekdaysShortRegex')) {
+                this._weekdaysShortRegex = defaultWeekdaysShortRegex;
+            }
+            return this._weekdaysShortStrictRegex && isStrict
+                ? this._weekdaysShortStrictRegex
+                : this._weekdaysShortRegex;
+        }
+    }
+
+    function weekdaysMinRegex(isStrict) {
+        if (this._weekdaysParseExact) {
+            if (!hasOwnProp(this, '_weekdaysRegex')) {
+                computeWeekdaysParse.call(this);
+            }
+            if (isStrict) {
+                return this._weekdaysMinStrictRegex;
+            } else {
+                return this._weekdaysMinRegex;
+            }
+        } else {
+            if (!hasOwnProp(this, '_weekdaysMinRegex')) {
+                this._weekdaysMinRegex = defaultWeekdaysMinRegex;
+            }
+            return this._weekdaysMinStrictRegex && isStrict
+                ? this._weekdaysMinStrictRegex
+                : this._weekdaysMinRegex;
+        }
+    }
+
+    function computeWeekdaysParse() {
+        function cmpLenRev(a, b) {
+            return b.length - a.length;
+        }
+
+        var minPieces = [],
+            shortPieces = [],
+            longPieces = [],
+            mixedPieces = [],
+            i,
+            mom,
+            minp,
+            shortp,
+            longp;
+        for (i = 0; i < 7; i++) {
+            // make the regex if we don't have it already
+            mom = createUTC([2000, 1]).day(i);
+            minp = regexEscape(this.weekdaysMin(mom, ''));
+            shortp = regexEscape(this.weekdaysShort(mom, ''));
+            longp = regexEscape(this.weekdays(mom, ''));
+            minPieces.push(minp);
+            shortPieces.push(shortp);
+            longPieces.push(longp);
+            mixedPieces.push(minp);
+            mixedPieces.push(shortp);
+            mixedPieces.push(longp);
+        }
+        // Sorting makes sure if one weekday (or abbr) is a prefix of another it
+        // will match the longer piece.
+        minPieces.sort(cmpLenRev);
+        shortPieces.sort(cmpLenRev);
+        longPieces.sort(cmpLenRev);
+        mixedPieces.sort(cmpLenRev);
+
+        this._weekdaysRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');
+        this._weekdaysShortRegex = this._weekdaysRegex;
+        this._weekdaysMinRegex = this._weekdaysRegex;
+
+        this._weekdaysStrictRegex = new RegExp(
+            '^(' + longPieces.join('|') + ')',
+            'i'
+        );
+        this._weekdaysShortStrictRegex = new RegExp(
+            '^(' + shortPieces.join('|') + ')',
+            'i'
+        );
+        this._weekdaysMinStrictRegex = new RegExp(
+            '^(' + minPieces.join('|') + ')',
+            'i'
+        );
+    }
+
+    // FORMATTING
+
+    function hFormat() {
+        return this.hours() % 12 || 12;
+    }
+
+    function kFormat() {
+        return this.hours() || 24;
+    }
+
+    addFormatToken('H', ['HH', 2], 0, 'hour');
+    addFormatToken('h', ['hh', 2], 0, hFormat);
+    addFormatToken('k', ['kk', 2], 0, kFormat);
+
+    addFormatToken('hmm', 0, 0, function () {
+        return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2);
+    });
+
+    addFormatToken('hmmss', 0, 0, function () {
+        return (
+            '' +
+            hFormat.apply(this) +
+            zeroFill(this.minutes(), 2) +
+            zeroFill(this.seconds(), 2)
+        );
+    });
+
+    addFormatToken('Hmm', 0, 0, function () {
+        return '' + this.hours() + zeroFill(this.minutes(), 2);
+    });
+
+    addFormatToken('Hmmss', 0, 0, function () {
+        return (
+            '' +
+            this.hours() +
+            zeroFill(this.minutes(), 2) +
+            zeroFill(this.seconds(), 2)
+        );
+    });
+
+    function meridiem(token, lowercase) {
+        addFormatToken(token, 0, 0, function () {
+            return this.localeData().meridiem(
+                this.hours(),
+                this.minutes(),
+                lowercase
+            );
+        });
+    }
+
+    meridiem('a', true);
+    meridiem('A', false);
+
+    // ALIASES
+
+    addUnitAlias('hour', 'h');
+
+    // PRIORITY
+    addUnitPriority('hour', 13);
+
+    // PARSING
+
+    function matchMeridiem(isStrict, locale) {
+        return locale._meridiemParse;
+    }
+
+    addRegexToken('a', matchMeridiem);
+    addRegexToken('A', matchMeridiem);
+    addRegexToken('H', match1to2);
+    addRegexToken('h', match1to2);
+    addRegexToken('k', match1to2);
+    addRegexToken('HH', match1to2, match2);
+    addRegexToken('hh', match1to2, match2);
+    addRegexToken('kk', match1to2, match2);
+
+    addRegexToken('hmm', match3to4);
+    addRegexToken('hmmss', match5to6);
+    addRegexToken('Hmm', match3to4);
+    addRegexToken('Hmmss', match5to6);
+
+    addParseToken(['H', 'HH'], HOUR);
+    addParseToken(['k', 'kk'], function (input, array, config) {
+        var kInput = toInt(input);
+        array[HOUR] = kInput === 24 ? 0 : kInput;
+    });
+    addParseToken(['a', 'A'], function (input, array, config) {
+        config._isPm = config._locale.isPM(input);
+        config._meridiem = input;
+    });
+    addParseToken(['h', 'hh'], function (input, array, config) {
+        array[HOUR] = toInt(input);
+        getParsingFlags(config).bigHour = true;
+    });
+    addParseToken('hmm', function (input, array, config) {
+        var pos = input.length - 2;
+        array[HOUR] = toInt(input.substr(0, pos));
+        array[MINUTE] = toInt(input.substr(pos));
+        getParsingFlags(config).bigHour = true;
+    });
+    addParseToken('hmmss', function (input, array, config) {
+        var pos1 = input.length - 4,
+            pos2 = input.length - 2;
+        array[HOUR] = toInt(input.substr(0, pos1));
+        array[MINUTE] = toInt(input.substr(pos1, 2));
+        array[SECOND] = toInt(input.substr(pos2));
+        getParsingFlags(config).bigHour = true;
+    });
+    addParseToken('Hmm', function (input, array, config) {
+        var pos = input.length - 2;
+        array[HOUR] = toInt(input.substr(0, pos));
+        array[MINUTE] = toInt(input.substr(pos));
+    });
+    addParseToken('Hmmss', function (input, array, config) {
+        var pos1 = input.length - 4,
+            pos2 = input.length - 2;
+        array[HOUR] = toInt(input.substr(0, pos1));
+        array[MINUTE] = toInt(input.substr(pos1, 2));
+        array[SECOND] = toInt(input.substr(pos2));
+    });
+
+    // LOCALES
+
+    function localeIsPM(input) {
+        // IE8 Quirks Mode & IE7 Standards Mode do not allow accessing strings like arrays
+        // Using charAt should be more compatible.
+        return (input + '').toLowerCase().charAt(0) === 'p';
+    }
+
+    var defaultLocaleMeridiemParse = /[ap]\.?m?\.?/i,
+        // Setting the hour should keep the time, because the user explicitly
+        // specified which hour they want. So trying to maintain the same hour (in
+        // a new timezone) makes sense. Adding/subtracting hours does not follow
+        // this rule.
+        getSetHour = makeGetSet('Hours', true);
+
+    function localeMeridiem(hours, minutes, isLower) {
+        if (hours > 11) {
+            return isLower ? 'pm' : 'PM';
+        } else {
+            return isLower ? 'am' : 'AM';
+        }
+    }
+
+    var baseConfig = {
+        calendar: defaultCalendar,
+        longDateFormat: defaultLongDateFormat,
+        invalidDate: defaultInvalidDate,
+        ordinal: defaultOrdinal,
+        dayOfMonthOrdinalParse: defaultDayOfMonthOrdinalParse,
+        relativeTime: defaultRelativeTime,
+
+        months: defaultLocaleMonths,
+        monthsShort: defaultLocaleMonthsShort,
+
+        week: defaultLocaleWeek,
+
+        weekdays: defaultLocaleWeekdays,
+        weekdaysMin: defaultLocaleWeekdaysMin,
+        weekdaysShort: defaultLocaleWeekdaysShort,
+
+        meridiemParse: defaultLocaleMeridiemParse,
+    };
+
+    // internal storage for locale config files
+    var locales = {},
+        localeFamilies = {},
+        globalLocale;
+
+    function commonPrefix(arr1, arr2) {
+        var i,
+            minl = Math.min(arr1.length, arr2.length);
+        for (i = 0; i < minl; i += 1) {
+            if (arr1[i] !== arr2[i]) {
+                return i;
+            }
+        }
+        return minl;
+    }
+
+    function normalizeLocale(key) {
+        return key ? key.toLowerCase().replace('_', '-') : key;
+    }
+
+    // pick the locale from the array
+    // try ['en-au', 'en-gb'] as 'en-au', 'en-gb', 'en', as in move through the list trying each
+    // substring from most specific to least, but move to the next array item if it's a more specific variant than the current root
+    function chooseLocale(names) {
+        var i = 0,
+            j,
+            next,
+            locale,
+            split;
+
+        while (i < names.length) {
+            split = normalizeLocale(names[i]).split('-');
+            j = split.length;
+            next = normalizeLocale(names[i + 1]);
+            next = next ? next.split('-') : null;
+            while (j > 0) {
+                locale = loadLocale(split.slice(0, j).join('-'));
+                if (locale) {
+                    return locale;
+                }
+                if (
+                    next &&
+                    next.length >= j &&
+                    commonPrefix(split, next) >= j - 1
+                ) {
+                    //the next array item is better than a shallower substring of this one
+                    break;
+                }
+                j--;
+            }
+            i++;
+        }
+        return globalLocale;
+    }
+
+    function loadLocale(name) {
+        var oldLocale = null,
+            aliasedRequire;
+        // TODO: Find a better way to register and load all the locales in Node
+        if (
+            locales[name] === undefined &&
+            typeof module !== 'undefined' &&
+            module &&
+            module.exports
+        ) {
+            try {
+                oldLocale = globalLocale._abbr;
+                aliasedRequire = require;
+                aliasedRequire('./locale/' + name);
+                getSetGlobalLocale(oldLocale);
+            } catch (e) {
+                // mark as not found to avoid repeating expensive file require call causing high CPU
+                // when trying to find en-US, en_US, en-us for every format call
+                locales[name] = null; // null means not found
+            }
+        }
+        return locales[name];
+    }
+
+    // This function will load locale and then set the global locale.  If
+    // no arguments are passed in, it will simply return the current global
+    // locale key.
+    function getSetGlobalLocale(key, values) {
+        var data;
+        if (key) {
+            if (isUndefined(values)) {
+                data = getLocale(key);
+            } else {
+                data = defineLocale(key, values);
+            }
+
+            if (data) {
+                // moment.duration._locale = moment._locale = data;
+                globalLocale = data;
+            } else {
+                if (typeof console !== 'undefined' && console.warn) {
+                    //warn user if arguments are passed but the locale could not be set
+                    console.warn(
+                        'Locale ' + key + ' not found. Did you forget to load it?'
+                    );
+                }
+            }
+        }
+
+        return globalLocale._abbr;
+    }
+
+    function defineLocale(name, config) {
+        if (config !== null) {
+            var locale,
+                parentConfig = baseConfig;
+            config.abbr = name;
+            if (locales[name] != null) {
+                deprecateSimple(
+                    'defineLocaleOverride',
+                    'use moment.updateLocale(localeName, config) to change ' +
+                        'an existing locale. moment.defineLocale(localeName, ' +
+                        'config) should only be used for creating a new locale ' +
+                        'See http://momentjs.com/guides/#/warnings/define-locale/ for more info.'
+                );
+                parentConfig = locales[name]._config;
+            } else if (config.parentLocale != null) {
+                if (locales[config.parentLocale] != null) {
+                    parentConfig = locales[config.parentLocale]._config;
+                } else {
+                    locale = loadLocale(config.parentLocale);
+                    if (locale != null) {
+                        parentConfig = locale._config;
+                    } else {
+                        if (!localeFamilies[config.parentLocale]) {
+                            localeFamilies[config.parentLocale] = [];
+                        }
+                        localeFamilies[config.parentLocale].push({
+                            name: name,
+                            config: config,
+                        });
+                        return null;
+                    }
+                }
+            }
+            locales[name] = new Locale(mergeConfigs(parentConfig, config));
+
+            if (localeFamilies[name]) {
+                localeFamilies[name].forEach(function (x) {
+                    defineLocale(x.name, x.config);
+                });
+            }
+
+            // backwards compat for now: also set the locale
+            // make sure we set the locale AFTER all child locales have been
+            // created, so we won't end up with the child locale set.
+            getSetGlobalLocale(name);
+
+            return locales[name];
+        } else {
+            // useful for testing
+            delete locales[name];
+            return null;
+        }
+    }
+
+    function updateLocale(name, config) {
+        if (config != null) {
+            var locale,
+                tmpLocale,
+                parentConfig = baseConfig;
+
+            if (locales[name] != null && locales[name].parentLocale != null) {
+                // Update existing child locale in-place to avoid memory-leaks
+                locales[name].set(mergeConfigs(locales[name]._config, config));
+            } else {
+                // MERGE
+                tmpLocale = loadLocale(name);
+                if (tmpLocale != null) {
+                    parentConfig = tmpLocale._config;
+                }
+                config = mergeConfigs(parentConfig, config);
+                if (tmpLocale == null) {
+                    // updateLocale is called for creating a new locale
+                    // Set abbr so it will have a name (getters return
+                    // undefined otherwise).
+                    config.abbr = name;
+                }
+                locale = new Locale(config);
+                locale.parentLocale = locales[name];
+                locales[name] = locale;
+            }
+
+            // backwards compat for now: also set the locale
+            getSetGlobalLocale(name);
+        } else {
+            // pass null for config to unupdate, useful for tests
+            if (locales[name] != null) {
+                if (locales[name].parentLocale != null) {
+                    locales[name] = locales[name].parentLocale;
+                    if (name === getSetGlobalLocale()) {
+                        getSetGlobalLocale(name);
+                    }
+                } else if (locales[name] != null) {
+                    delete locales[name];
+                }
+            }
+        }
+        return locales[name];
+    }
+
+    // returns locale data
+    function getLocale(key) {
+        var locale;
+
+        if (key && key._locale && key._locale._abbr) {
+            key = key._locale._abbr;
+        }
+
+        if (!key) {
+            return globalLocale;
+        }
+
+        if (!isArray(key)) {
+            //short-circuit everything else
+            locale = loadLocale(key);
+            if (locale) {
+                return locale;
+            }
+            key = [key];
+        }
+
+        return chooseLocale(key);
+    }
+
+    function listLocales() {
+        return keys(locales);
+    }
+
+    function checkOverflow(m) {
+        var overflow,
+            a = m._a;
+
+        if (a && getParsingFlags(m).overflow === -2) {
+            overflow =
+                a[MONTH] < 0 || a[MONTH] > 11
+                    ? MONTH
+                    : a[DATE] < 1 || a[DATE] > daysInMonth(a[YEAR], a[MONTH])
+                    ? DATE
+                    : a[HOUR] < 0 ||
+                      a[HOUR] > 24 ||
+                      (a[HOUR] === 24 &&
+                          (a[MINUTE] !== 0 ||
+                              a[SECOND] !== 0 ||
+                              a[MILLISECOND] !== 0))
+                    ? HOUR
+                    : a[MINUTE] < 0 || a[MINUTE] > 59
+                    ? MINUTE
+                    : a[SECOND] < 0 || a[SECOND] > 59
+                    ? SECOND
+                    : a[MILLISECOND] < 0 || a[MILLISECOND] > 999
+                    ? MILLISECOND
+                    : -1;
+
+            if (
+                getParsingFlags(m)._overflowDayOfYear &&
+                (overflow < YEAR || overflow > DATE)
+            ) {
+                overflow = DATE;
+            }
+            if (getParsingFlags(m)._overflowWeeks && overflow === -1) {
+                overflow = WEEK;
+            }
+            if (getParsingFlags(m)._overflowWeekday && overflow === -1) {
+                overflow = WEEKDAY;
+            }
+
+            getParsingFlags(m).overflow = overflow;
+        }
+
+        return m;
+    }
+
+    // iso 8601 regex
+    // 0000-00-00 0000-W00 or 0000-W00-0 + T + 00 or 00:00 or 00:00:00 or 00:00:00.000 + +00:00 or +0000 or +00)
+    var extendedIsoRegex = /^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([+-]\d\d(?::?\d\d)?|\s*Z)?)?$/,
+        basicIsoRegex = /^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d|))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([+-]\d\d(?::?\d\d)?|\s*Z)?)?$/,
+        tzRegex = /Z|[+-]\d\d(?::?\d\d)?/,
+        isoDates = [
+            ['YYYYYY-MM-DD', /[+-]\d{6}-\d\d-\d\d/],
+            ['YYYY-MM-DD', /\d{4}-\d\d-\d\d/],
+            ['GGGG-[W]WW-E', /\d{4}-W\d\d-\d/],
+            ['GGGG-[W]WW', /\d{4}-W\d\d/, false],
+            ['YYYY-DDD', /\d{4}-\d{3}/],
+            ['YYYY-MM', /\d{4}-\d\d/, false],
+            ['YYYYYYMMDD', /[+-]\d{10}/],
+            ['YYYYMMDD', /\d{8}/],
+            ['GGGG[W]WWE', /\d{4}W\d{3}/],
+            ['GGGG[W]WW', /\d{4}W\d{2}/, false],
+            ['YYYYDDD', /\d{7}/],
+            ['YYYYMM', /\d{6}/, false],
+            ['YYYY', /\d{4}/, false],
+        ],
+        // iso time formats and regexes
+        isoTimes = [
+            ['HH:mm:ss.SSSS', /\d\d:\d\d:\d\d\.\d+/],
+            ['HH:mm:ss,SSSS', /\d\d:\d\d:\d\d,\d+/],
+            ['HH:mm:ss', /\d\d:\d\d:\d\d/],
+            ['HH:mm', /\d\d:\d\d/],
+            ['HHmmss.SSSS', /\d\d\d\d\d\d\.\d+/],
+            ['HHmmss,SSSS', /\d\d\d\d\d\d,\d+/],
+            ['HHmmss', /\d\d\d\d\d\d/],
+            ['HHmm', /\d\d\d\d/],
+            ['HH', /\d\d/],
+        ],
+        aspNetJsonRegex = /^\/?Date\((-?\d+)/i,
+        // RFC 2822 regex: For details see https://tools.ietf.org/html/rfc2822#section-3.3
+        rfc2822 = /^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\s)?(\d{1,2})\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s(\d{2,4})\s(\d\d):(\d\d)(?::(\d\d))?\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\d{4}))$/,
+        obsOffsets = {
+            UT: 0,
+            GMT: 0,
+            EDT: -4 * 60,
+            EST: -5 * 60,
+            CDT: -5 * 60,
+            CST: -6 * 60,
+            MDT: -6 * 60,
+            MST: -7 * 60,
+            PDT: -7 * 60,
+            PST: -8 * 60,
+        };
+
+    // date from iso format
+    function configFromISO(config) {
+        var i,
+            l,
+            string = config._i,
+            match = extendedIsoRegex.exec(string) || basicIsoRegex.exec(string),
+            allowTime,
+            dateFormat,
+            timeFormat,
+            tzFormat;
+
+        if (match) {
+            getParsingFlags(config).iso = true;
+
+            for (i = 0, l = isoDates.length; i < l; i++) {
+                if (isoDates[i][1].exec(match[1])) {
+                    dateFormat = isoDates[i][0];
+                    allowTime = isoDates[i][2] !== false;
+                    break;
+                }
+            }
+            if (dateFormat == null) {
+                config._isValid = false;
+                return;
+            }
+            if (match[3]) {
+                for (i = 0, l = isoTimes.length; i < l; i++) {
+                    if (isoTimes[i][1].exec(match[3])) {
+                        // match[2] should be 'T' or space
+                        timeFormat = (match[2] || ' ') + isoTimes[i][0];
+                        break;
+                    }
+                }
+                if (timeFormat == null) {
+                    config._isValid = false;
+                    return;
+                }
+            }
+            if (!allowTime && timeFormat != null) {
+                config._isValid = false;
+                return;
+            }
+            if (match[4]) {
+                if (tzRegex.exec(match[4])) {
+                    tzFormat = 'Z';
+                } else {
+                    config._isValid = false;
+                    return;
+                }
+            }
+            config._f = dateFormat + (timeFormat || '') + (tzFormat || '');
+            configFromStringAndFormat(config);
+        } else {
+            config._isValid = false;
+        }
+    }
+
+    function extractFromRFC2822Strings(
+        yearStr,
+        monthStr,
+        dayStr,
+        hourStr,
+        minuteStr,
+        secondStr
+    ) {
+        var result = [
+            untruncateYear(yearStr),
+            defaultLocaleMonthsShort.indexOf(monthStr),
+            parseInt(dayStr, 10),
+            parseInt(hourStr, 10),
+            parseInt(minuteStr, 10),
+        ];
+
+        if (secondStr) {
+            result.push(parseInt(secondStr, 10));
+        }
+
+        return result;
+    }
+
+    function untruncateYear(yearStr) {
+        var year = parseInt(yearStr, 10);
+        if (year <= 49) {
+            return 2000 + year;
+        } else if (year <= 999) {
+            return 1900 + year;
+        }
+        return year;
+    }
+
+    function preprocessRFC2822(s) {
+        // Remove comments and folding whitespace and replace multiple-spaces with a single space
+        return s
+            .replace(/\([^)]*\)|[\n\t]/g, ' ')
+            .replace(/(\s\s+)/g, ' ')
+            .replace(/^\s\s*/, '')
+            .replace(/\s\s*$/, '');
+    }
+
+    function checkWeekday(weekdayStr, parsedInput, config) {
+        if (weekdayStr) {
+            // TODO: Replace the vanilla JS Date object with an independent day-of-week check.
+            var weekdayProvided = defaultLocaleWeekdaysShort.indexOf(weekdayStr),
+                weekdayActual = new Date(
+                    parsedInput[0],
+                    parsedInput[1],
+                    parsedInput[2]
+                ).getDay();
+            if (weekdayProvided !== weekdayActual) {
+                getParsingFlags(config).weekdayMismatch = true;
+                config._isValid = false;
+                return false;
+            }
+        }
+        return true;
+    }
+
+    function calculateOffset(obsOffset, militaryOffset, numOffset) {
+        if (obsOffset) {
+            return obsOffsets[obsOffset];
+        } else if (militaryOffset) {
+            // the only allowed military tz is Z
+            return 0;
+        } else {
+            var hm = parseInt(numOffset, 10),
+                m = hm % 100,
+                h = (hm - m) / 100;
+            return h * 60 + m;
+        }
+    }
+
+    // date and time from ref 2822 format
+    function configFromRFC2822(config) {
+        var match = rfc2822.exec(preprocessRFC2822(config._i)),
+            parsedArray;
+        if (match) {
+            parsedArray = extractFromRFC2822Strings(
+                match[4],
+                match[3],
+                match[2],
+                match[5],
+                match[6],
+                match[7]
+            );
+            if (!checkWeekday(match[1], parsedArray, config)) {
+                return;
+            }
+
+            config._a = parsedArray;
+            config._tzm = calculateOffset(match[8], match[9], match[10]);
+
+            config._d = createUTCDate.apply(null, config._a);
+            config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);
+
+            getParsingFlags(config).rfc2822 = true;
+        } else {
+            config._isValid = false;
+        }
+    }
+
+    // date from 1) ASP.NET, 2) ISO, 3) RFC 2822 formats, or 4) optional fallback if parsing isn't strict
+    function configFromString(config) {
+        var matched = aspNetJsonRegex.exec(config._i);
+        if (matched !== null) {
+            config._d = new Date(+matched[1]);
+            return;
+        }
+
+        configFromISO(config);
+        if (config._isValid === false) {
+            delete config._isValid;
+        } else {
+            return;
+        }
+
+        configFromRFC2822(config);
+        if (config._isValid === false) {
+            delete config._isValid;
+        } else {
+            return;
+        }
+
+        if (config._strict) {
+            config._isValid = false;
+        } else {
+            // Final attempt, use Input Fallback
+            hooks.createFromInputFallback(config);
+        }
+    }
+
+    hooks.createFromInputFallback = deprecate(
+        'value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), ' +
+            'which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are ' +
+            'discouraged and will be removed in an upcoming major release. Please refer to ' +
+            'http://momentjs.com/guides/#/warnings/js-date/ for more info.',
+        function (config) {
+            config._d = new Date(config._i + (config._useUTC ? ' UTC' : ''));
+        }
+    );
+
+    // Pick the first defined of two or three arguments.
+    function defaults(a, b, c) {
+        if (a != null) {
+            return a;
+        }
+        if (b != null) {
+            return b;
+        }
+        return c;
+    }
+
+    function currentDateArray(config) {
+        // hooks is actually the exported moment object
+        var nowValue = new Date(hooks.now());
+        if (config._useUTC) {
+            return [
+                nowValue.getUTCFullYear(),
+                nowValue.getUTCMonth(),
+                nowValue.getUTCDate(),
+            ];
+        }
+        return [nowValue.getFullYear(), nowValue.getMonth(), nowValue.getDate()];
+    }
+
+    // convert an array to a date.
+    // the array should mirror the parameters below
+    // note: all values past the year are optional and will default to the lowest possible value.
+    // [year, month, day , hour, minute, second, millisecond]
+    function configFromArray(config) {
+        var i,
+            date,
+            input = [],
+            currentDate,
+            expectedWeekday,
+            yearToUse;
+
+        if (config._d) {
+            return;
+        }
+
+        currentDate = currentDateArray(config);
+
+        //compute day of the year from weeks and weekdays
+        if (config._w && config._a[DATE] == null && config._a[MONTH] == null) {
+            dayOfYearFromWeekInfo(config);
+        }
+
+        //if the day of the year is set, figure out what it is
+        if (config._dayOfYear != null) {
+            yearToUse = defaults(config._a[YEAR], currentDate[YEAR]);
+
+            if (
+                config._dayOfYear > daysInYear(yearToUse) ||
+                config._dayOfYear === 0
+            ) {
+                getParsingFlags(config)._overflowDayOfYear = true;
+            }
+
+            date = createUTCDate(yearToUse, 0, config._dayOfYear);
+            config._a[MONTH] = date.getUTCMonth();
+            config._a[DATE] = date.getUTCDate();
+        }
+
+        // Default to current date.
+        // * if no year, month, day of month are given, default to today
+        // * if day of month is given, default month and year
+        // * if month is given, default only year
+        // * if year is given, don't default anything
+        for (i = 0; i < 3 && config._a[i] == null; ++i) {
+            config._a[i] = input[i] = currentDate[i];
+        }
+
+        // Zero out whatever was not defaulted, including time
+        for (; i < 7; i++) {
+            config._a[i] = input[i] =
+                config._a[i] == null ? (i === 2 ? 1 : 0) : config._a[i];
+        }
+
+        // Check for 24:00:00.000
+        if (
+            config._a[HOUR] === 24 &&
+            config._a[MINUTE] === 0 &&
+            config._a[SECOND] === 0 &&
+            config._a[MILLISECOND] === 0
+        ) {
+            config._nextDay = true;
+            config._a[HOUR] = 0;
+        }
+
+        config._d = (config._useUTC ? createUTCDate : createDate).apply(
+            null,
+            input
+        );
+        expectedWeekday = config._useUTC
+            ? config._d.getUTCDay()
+            : config._d.getDay();
+
+        // Apply timezone offset from input. The actual utcOffset can be changed
+        // with parseZone.
+        if (config._tzm != null) {
+            config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);
+        }
+
+        if (config._nextDay) {
+            config._a[HOUR] = 24;
+        }
+
+        // check for mismatching day of week
+        if (
+            config._w &&
+            typeof config._w.d !== 'undefined' &&
+            config._w.d !== expectedWeekday
+        ) {
+            getParsingFlags(config).weekdayMismatch = true;
+        }
+    }
+
+    function dayOfYearFromWeekInfo(config) {
+        var w, weekYear, week, weekday, dow, doy, temp, weekdayOverflow, curWeek;
+
+        w = config._w;
+        if (w.GG != null || w.W != null || w.E != null) {
+            dow = 1;
+            doy = 4;
+
+            // TODO: We need to take the current isoWeekYear, but that depends on
+            // how we interpret now (local, utc, fixed offset). So create
+            // a now version of current config (take local/utc/offset flags, and
+            // create now).
+            weekYear = defaults(
+                w.GG,
+                config._a[YEAR],
+                weekOfYear(createLocal(), 1, 4).year
+            );
+            week = defaults(w.W, 1);
+            weekday = defaults(w.E, 1);
+            if (weekday < 1 || weekday > 7) {
+                weekdayOverflow = true;
+            }
+        } else {
+            dow = config._locale._week.dow;
+            doy = config._locale._week.doy;
+
+            curWeek = weekOfYear(createLocal(), dow, doy);
+
+            weekYear = defaults(w.gg, config._a[YEAR], curWeek.year);
+
+            // Default to current week.
+            week = defaults(w.w, curWeek.week);
+
+            if (w.d != null) {
+                // weekday -- low day numbers are considered next week
+                weekday = w.d;
+                if (weekday < 0 || weekday > 6) {
+                    weekdayOverflow = true;
+                }
+            } else if (w.e != null) {
+                // local weekday -- counting starts from beginning of week
+                weekday = w.e + dow;
+                if (w.e < 0 || w.e > 6) {
+                    weekdayOverflow = true;
+                }
+            } else {
+                // default to beginning of week
+                weekday = dow;
+            }
+        }
+        if (week < 1 || week > weeksInYear(weekYear, dow, doy)) {
+            getParsingFlags(config)._overflowWeeks = true;
+        } else if (weekdayOverflow != null) {
+            getParsingFlags(config)._overflowWeekday = true;
+        } else {
+            temp = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy);
+            config._a[YEAR] = temp.year;
+            config._dayOfYear = temp.dayOfYear;
+        }
+    }
+
+    // constant that refers to the ISO standard
+    hooks.ISO_8601 = function () {};
+
+    // constant that refers to the RFC 2822 form
+    hooks.RFC_2822 = function () {};
+
+    // date from string and format string
+    function configFromStringAndFormat(config) {
+        // TODO: Move this to another part of the creation flow to prevent circular deps
+        if (config._f === hooks.ISO_8601) {
+            configFromISO(config);
+            return;
+        }
+        if (config._f === hooks.RFC_2822) {
+            configFromRFC2822(config);
+            return;
+        }
+        config._a = [];
+        getParsingFlags(config).empty = true;
+
+        // This array is used to make a Date, either with `new Date` or `Date.UTC`
+        var string = '' + config._i,
+            i,
+            parsedInput,
+            tokens,
+            token,
+            skipped,
+            stringLength = string.length,
+            totalParsedInputLength = 0,
+            era;
+
+        tokens =
+            expandFormat(config._f, config._locale).match(formattingTokens) || [];
+
+        for (i = 0; i < tokens.length; i++) {
+            token = tokens[i];
+            parsedInput = (string.match(getParseRegexForToken(token, config)) ||
+                [])[0];
+            if (parsedInput) {
+                skipped = string.substr(0, string.indexOf(parsedInput));
+                if (skipped.length > 0) {
+                    getParsingFlags(config).unusedInput.push(skipped);
+                }
+                string = string.slice(
+                    string.indexOf(parsedInput) + parsedInput.length
+                );
+                totalParsedInputLength += parsedInput.length;
+            }
+            // don't parse if it's not a known token
+            if (formatTokenFunctions[token]) {
+                if (parsedInput) {
+                    getParsingFlags(config).empty = false;
+                } else {
+                    getParsingFlags(config).unusedTokens.push(token);
+                }
+                addTimeToArrayFromToken(token, parsedInput, config);
+            } else if (config._strict && !parsedInput) {
+                getParsingFlags(config).unusedTokens.push(token);
+            }
+        }
+
+        // add remaining unparsed input length to the string
+        getParsingFlags(config).charsLeftOver =
+            stringLength - totalParsedInputLength;
+        if (string.length > 0) {
+            getParsingFlags(config).unusedInput.push(string);
+        }
+
+        // clear _12h flag if hour is <= 12
+        if (
+            config._a[HOUR] <= 12 &&
+            getParsingFlags(config).bigHour === true &&
+            config._a[HOUR] > 0
+        ) {
+            getParsingFlags(config).bigHour = undefined;
+        }
+
+        getParsingFlags(config).parsedDateParts = config._a.slice(0);
+        getParsingFlags(config).meridiem = config._meridiem;
+        // handle meridiem
+        config._a[HOUR] = meridiemFixWrap(
+            config._locale,
+            config._a[HOUR],
+            config._meridiem
+        );
+
+        // handle era
+        era = getParsingFlags(config).era;
+        if (era !== null) {
+            config._a[YEAR] = config._locale.erasConvertYear(era, config._a[YEAR]);
+        }
+
+        configFromArray(config);
+        checkOverflow(config);
+    }
+
+    function meridiemFixWrap(locale, hour, meridiem) {
+        var isPm;
+
+        if (meridiem == null) {
+            // nothing to do
+            return hour;
+        }
+        if (locale.meridiemHour != null) {
+            return locale.meridiemHour(hour, meridiem);
+        } else if (locale.isPM != null) {
+            // Fallback
+            isPm = locale.isPM(meridiem);
+            if (isPm && hour < 12) {
+                hour += 12;
+            }
+            if (!isPm && hour === 12) {
+                hour = 0;
+            }
+            return hour;
+        } else {
+            // this is not supposed to happen
+            return hour;
+        }
+    }
+
+    // date from string and array of format strings
+    function configFromStringAndArray(config) {
+        var tempConfig,
+            bestMoment,
+            scoreToBeat,
+            i,
+            currentScore,
+            validFormatFound,
+            bestFormatIsValid = false;
+
+        if (config._f.length === 0) {
+            getParsingFlags(config).invalidFormat = true;
+            config._d = new Date(NaN);
+            return;
+        }
+
+        for (i = 0; i < config._f.length; i++) {
+            currentScore = 0;
+            validFormatFound = false;
+            tempConfig = copyConfig({}, config);
+            if (config._useUTC != null) {
+                tempConfig._useUTC = config._useUTC;
+            }
+            tempConfig._f = config._f[i];
+            configFromStringAndFormat(tempConfig);
+
+            if (isValid(tempConfig)) {
+                validFormatFound = true;
+            }
+
+            // if there is any input that was not parsed add a penalty for that format
+            currentScore += getParsingFlags(tempConfig).charsLeftOver;
+
+            //or tokens
+            currentScore += getParsingFlags(tempConfig).unusedTokens.length * 10;
+
+            getParsingFlags(tempConfig).score = currentScore;
+
+            if (!bestFormatIsValid) {
+                if (
+                    scoreToBeat == null ||
+                    currentScore < scoreToBeat ||
+                    validFormatFound
+                ) {
+                    scoreToBeat = currentScore;
+                    bestMoment = tempConfig;
+                    if (validFormatFound) {
+                        bestFormatIsValid = true;
+                    }
+                }
+            } else {
+                if (currentScore < scoreToBeat) {
+                    scoreToBeat = currentScore;
+                    bestMoment = tempConfig;
+                }
+            }
+        }
+
+        extend(config, bestMoment || tempConfig);
+    }
+
+    function configFromObject(config) {
+        if (config._d) {
+            return;
+        }
+
+        var i = normalizeObjectUnits(config._i),
+            dayOrDate = i.day === undefined ? i.date : i.day;
+        config._a = map(
+            [i.year, i.month, dayOrDate, i.hour, i.minute, i.second, i.millisecond],
+            function (obj) {
+                return obj && parseInt(obj, 10);
+            }
+        );
+
+        configFromArray(config);
+    }
+
+    function createFromConfig(config) {
+        var res = new Moment(checkOverflow(prepareConfig(config)));
+        if (res._nextDay) {
+            // Adding is smart enough around DST
+            res.add(1, 'd');
+            res._nextDay = undefined;
+        }
+
+        return res;
+    }
+
+    function prepareConfig(config) {
+        var input = config._i,
+            format = config._f;
+
+        config._locale = config._locale || getLocale(config._l);
+
+        if (input === null || (format === undefined && input === '')) {
+            return createInvalid({ nullInput: true });
+        }
+
+        if (typeof input === 'string') {
+            config._i = input = config._locale.preparse(input);
+        }
+
+        if (isMoment(input)) {
+            return new Moment(checkOverflow(input));
+        } else if (isDate(input)) {
+            config._d = input;
+        } else if (isArray(format)) {
+            configFromStringAndArray(config);
+        } else if (format) {
+            configFromStringAndFormat(config);
+        } else {
+            configFromInput(config);
+        }
+
+        if (!isValid(config)) {
+            config._d = null;
+        }
+
+        return config;
+    }
+
+    function configFromInput(config) {
+        var input = config._i;
+        if (isUndefined(input)) {
+            config._d = new Date(hooks.now());
+        } else if (isDate(input)) {
+            config._d = new Date(input.valueOf());
+        } else if (typeof input === 'string') {
+            configFromString(config);
+        } else if (isArray(input)) {
+            config._a = map(input.slice(0), function (obj) {
+                return parseInt(obj, 10);
+            });
+            configFromArray(config);
+        } else if (isObject(input)) {
+            configFromObject(config);
+        } else if (isNumber(input)) {
+            // from milliseconds
+            config._d = new Date(input);
+        } else {
+            hooks.createFromInputFallback(config);
+        }
+    }
+
+    function createLocalOrUTC(input, format, locale, strict, isUTC) {
+        var c = {};
+
+        if (format === true || format === false) {
+            strict = format;
+            format = undefined;
+        }
+
+        if (locale === true || locale === false) {
+            strict = locale;
+            locale = undefined;
+        }
+
+        if (
+            (isObject(input) && isObjectEmpty(input)) ||
+            (isArray(input) && input.length === 0)
+        ) {
+            input = undefined;
+        }
+        // object construction must be done this way.
+        // https://github.com/moment/moment/issues/1423
+        c._isAMomentObject = true;
+        c._useUTC = c._isUTC = isUTC;
+        c._l = locale;
+        c._i = input;
+        c._f = format;
+        c._strict = strict;
+
+        return createFromConfig(c);
+    }
+
+    function createLocal(input, format, locale, strict) {
+        return createLocalOrUTC(input, format, locale, strict, false);
+    }
+
+    var prototypeMin = deprecate(
+            'moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/',
+            function () {
+                var other = createLocal.apply(null, arguments);
+                if (this.isValid() && other.isValid()) {
+                    return other < this ? this : other;
+                } else {
+                    return createInvalid();
+                }
+            }
+        ),
+        prototypeMax = deprecate(
+            'moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/',
+            function () {
+                var other = createLocal.apply(null, arguments);
+                if (this.isValid() && other.isValid()) {
+                    return other > this ? this : other;
+                } else {
+                    return createInvalid();
+                }
+            }
+        );
+
+    // Pick a moment m from moments so that m[fn](other) is true for all
+    // other. This relies on the function fn to be transitive.
+    //
+    // moments should either be an array of moment objects or an array, whose
+    // first element is an array of moment objects.
+    function pickBy(fn, moments) {
+        var res, i;
+        if (moments.length === 1 && isArray(moments[0])) {
+            moments = moments[0];
+        }
+        if (!moments.length) {
+            return createLocal();
+        }
+        res = moments[0];
+        for (i = 1; i < moments.length; ++i) {
+            if (!moments[i].isValid() || moments[i][fn](res)) {
+                res = moments[i];
+            }
+        }
+        return res;
+    }
+
+    // TODO: Use [].sort instead?
+    function min() {
+        var args = [].slice.call(arguments, 0);
+
+        return pickBy('isBefore', args);
+    }
+
+    function max() {
+        var args = [].slice.call(arguments, 0);
+
+        return pickBy('isAfter', args);
+    }
+
+    var now = function () {
+        return Date.now ? Date.now() : +new Date();
+    };
+
+    var ordering = [
+        'year',
+        'quarter',
+        'month',
+        'week',
+        'day',
+        'hour',
+        'minute',
+        'second',
+        'millisecond',
+    ];
+
+    function isDurationValid(m) {
+        var key,
+            unitHasDecimal = false,
+            i;
+        for (key in m) {
+            if (
+                hasOwnProp(m, key) &&
+                !(
+                    indexOf.call(ordering, key) !== -1 &&
+                    (m[key] == null || !isNaN(m[key]))
+                )
+            ) {
+                return false;
+            }
+        }
+
+        for (i = 0; i < ordering.length; ++i) {
+            if (m[ordering[i]]) {
+                if (unitHasDecimal) {
+                    return false; // only allow non-integers for smallest unit
+                }
+                if (parseFloat(m[ordering[i]]) !== toInt(m[ordering[i]])) {
+                    unitHasDecimal = true;
+                }
+            }
+        }
+
+        return true;
+    }
+
+    function isValid$1() {
+        return this._isValid;
+    }
+
+    function createInvalid$1() {
+        return createDuration(NaN);
+    }
+
+    function Duration(duration) {
+        var normalizedInput = normalizeObjectUnits(duration),
+            years = normalizedInput.year || 0,
+            quarters = normalizedInput.quarter || 0,
+            months = normalizedInput.month || 0,
+            weeks = normalizedInput.week || normalizedInput.isoWeek || 0,
+            days = normalizedInput.day || 0,
+            hours = normalizedInput.hour || 0,
+            minutes = normalizedInput.minute || 0,
+            seconds = normalizedInput.second || 0,
+            milliseconds = normalizedInput.millisecond || 0;
+
+        this._isValid = isDurationValid(normalizedInput);
+
+        // representation for dateAddRemove
+        this._milliseconds =
+            +milliseconds +
+            seconds * 1e3 + // 1000
+            minutes * 6e4 + // 1000 * 60
+            hours * 1000 * 60 * 60; //using 1000 * 60 * 60 instead of 36e5 to avoid floating point rounding errors https://github.com/moment/moment/issues/2978
+        // Because of dateAddRemove treats 24 hours as different from a
+        // day when working around DST, we need to store them separately
+        this._days = +days + weeks * 7;
+        // It is impossible to translate months into days without knowing
+        // which months you are are talking about, so we have to store
+        // it separately.
+        this._months = +months + quarters * 3 + years * 12;
+
+        this._data = {};
+
+        this._locale = getLocale();
+
+        this._bubble();
+    }
+
+    function isDuration(obj) {
+        return obj instanceof Duration;
+    }
+
+    function absRound(number) {
+        if (number < 0) {
+            return Math.round(-1 * number) * -1;
+        } else {
+            return Math.round(number);
+        }
+    }
+
+    // compare two arrays, return the number of differences
+    function compareArrays(array1, array2, dontConvert) {
+        var len = Math.min(array1.length, array2.length),
+            lengthDiff = Math.abs(array1.length - array2.length),
+            diffs = 0,
+            i;
+        for (i = 0; i < len; i++) {
+            if (
+                (dontConvert && array1[i] !== array2[i]) ||
+                (!dontConvert && toInt(array1[i]) !== toInt(array2[i]))
+            ) {
+                diffs++;
+            }
+        }
+        return diffs + lengthDiff;
+    }
+
+    // FORMATTING
+
+    function offset(token, separator) {
+        addFormatToken(token, 0, 0, function () {
+            var offset = this.utcOffset(),
+                sign = '+';
+            if (offset < 0) {
+                offset = -offset;
+                sign = '-';
+            }
+            return (
+                sign +
+                zeroFill(~~(offset / 60), 2) +
+                separator +
+                zeroFill(~~offset % 60, 2)
+            );
+        });
+    }
+
+    offset('Z', ':');
+    offset('ZZ', '');
+
+    // PARSING
+
+    addRegexToken('Z', matchShortOffset);
+    addRegexToken('ZZ', matchShortOffset);
+    addParseToken(['Z', 'ZZ'], function (input, array, config) {
+        config._useUTC = true;
+        config._tzm = offsetFromString(matchShortOffset, input);
+    });
+
+    // HELPERS
+
+    // timezone chunker
+    // '+10:00' > ['10',  '00']
+    // '-1530'  > ['-15', '30']
+    var chunkOffset = /([\+\-]|\d\d)/gi;
+
+    function offsetFromString(matcher, string) {
+        var matches = (string || '').match(matcher),
+            chunk,
+            parts,
+            minutes;
+
+        if (matches === null) {
+            return null;
+        }
+
+        chunk = matches[matches.length - 1] || [];
+        parts = (chunk + '').match(chunkOffset) || ['-', 0, 0];
+        minutes = +(parts[1] * 60) + toInt(parts[2]);
+
+        return minutes === 0 ? 0 : parts[0] === '+' ? minutes : -minutes;
+    }
+
+    // Return a moment from input, that is local/utc/zone equivalent to model.
+    function cloneWithOffset(input, model) {
+        var res, diff;
+        if (model._isUTC) {
+            res = model.clone();
+            diff =
+                (isMoment(input) || isDate(input)
+                    ? input.valueOf()
+                    : createLocal(input).valueOf()) - res.valueOf();
+            // Use low-level api, because this fn is low-level api.
+            res._d.setTime(res._d.valueOf() + diff);
+            hooks.updateOffset(res, false);
+            return res;
+        } else {
+            return createLocal(input).local();
+        }
+    }
+
+    function getDateOffset(m) {
+        // On Firefox.24 Date#getTimezoneOffset returns a floating point.
+        // https://github.com/moment/moment/pull/1871
+        return -Math.round(m._d.getTimezoneOffset());
+    }
+
+    // HOOKS
+
+    // This function will be called whenever a moment is mutated.
+    // It is intended to keep the offset in sync with the timezone.
+    hooks.updateOffset = function () {};
+
+    // MOMENTS
+
+    // keepLocalTime = true means only change the timezone, without
+    // affecting the local hour. So 5:31:26 +0300 --[utcOffset(2, true)]-->
+    // 5:31:26 +0200 It is possible that 5:31:26 doesn't exist with offset
+    // +0200, so we adjust the time as needed, to be valid.
+    //
+    // Keeping the time actually adds/subtracts (one hour)
+    // from the actual represented time. That is why we call updateOffset
+    // a second time. In case it wants us to change the offset again
+    // _changeInProgress == true case, then we have to adjust, because
+    // there is no such time in the given timezone.
+    function getSetOffset(input, keepLocalTime, keepMinutes) {
+        var offset = this._offset || 0,
+            localAdjust;
+        if (!this.isValid()) {
+            return input != null ? this : NaN;
+        }
+        if (input != null) {
+            if (typeof input === 'string') {
+                input = offsetFromString(matchShortOffset, input);
+                if (input === null) {
+                    return this;
+                }
+            } else if (Math.abs(input) < 16 && !keepMinutes) {
+                input = input * 60;
+            }
+            if (!this._isUTC && keepLocalTime) {
+                localAdjust = getDateOffset(this);
+            }
+            this._offset = input;
+            this._isUTC = true;
+            if (localAdjust != null) {
+                this.add(localAdjust, 'm');
+            }
+            if (offset !== input) {
+                if (!keepLocalTime || this._changeInProgress) {
+                    addSubtract(
+                        this,
+                        createDuration(input - offset, 'm'),
+                        1,
+                        false
+                    );
+                } else if (!this._changeInProgress) {
+                    this._changeInProgress = true;
+                    hooks.updateOffset(this, true);
+                    this._changeInProgress = null;
+                }
+            }
+            return this;
+        } else {
+            return this._isUTC ? offset : getDateOffset(this);
+        }
+    }
+
+    function getSetZone(input, keepLocalTime) {
+        if (input != null) {
+            if (typeof input !== 'string') {
+                input = -input;
+            }
+
+            this.utcOffset(input, keepLocalTime);
+
+            return this;
+        } else {
+            return -this.utcOffset();
+        }
+    }
+
+    function setOffsetToUTC(keepLocalTime) {
+        return this.utcOffset(0, keepLocalTime);
+    }
+
+    function setOffsetToLocal(keepLocalTime) {
+        if (this._isUTC) {
+            this.utcOffset(0, keepLocalTime);
+            this._isUTC = false;
+
+            if (keepLocalTime) {
+                this.subtract(getDateOffset(this), 'm');
+            }
+        }
+        return this;
+    }
+
+    function setOffsetToParsedOffset() {
+        if (this._tzm != null) {
+            this.utcOffset(this._tzm, false, true);
+        } else if (typeof this._i === 'string') {
+            var tZone = offsetFromString(matchOffset, this._i);
+            if (tZone != null) {
+                this.utcOffset(tZone);
+            } else {
+                this.utcOffset(0, true);
+            }
+        }
+        return this;
+    }
+
+    function hasAlignedHourOffset(input) {
+        if (!this.isValid()) {
+            return false;
+        }
+        input = input ? createLocal(input).utcOffset() : 0;
+
+        return (this.utcOffset() - input) % 60 === 0;
+    }
+
+    function isDaylightSavingTime() {
+        return (
+            this.utcOffset() > this.clone().month(0).utcOffset() ||
+            this.utcOffset() > this.clone().month(5).utcOffset()
+        );
+    }
+
+    function isDaylightSavingTimeShifted() {
+        if (!isUndefined(this._isDSTShifted)) {
+            return this._isDSTShifted;
+        }
+
+        var c = {},
+            other;
+
+        copyConfig(c, this);
+        c = prepareConfig(c);
+
+        if (c._a) {
+            other = c._isUTC ? createUTC(c._a) : createLocal(c._a);
+            this._isDSTShifted =
+                this.isValid() && compareArrays(c._a, other.toArray()) > 0;
+        } else {
+            this._isDSTShifted = false;
+        }
+
+        return this._isDSTShifted;
+    }
+
+    function isLocal() {
+        return this.isValid() ? !this._isUTC : false;
+    }
+
+    function isUtcOffset() {
+        return this.isValid() ? this._isUTC : false;
+    }
+
+    function isUtc() {
+        return this.isValid() ? this._isUTC && this._offset === 0 : false;
+    }
+
+    // ASP.NET json date format regex
+    var aspNetRegex = /^(-|\+)?(?:(\d*)[. ])?(\d+):(\d+)(?::(\d+)(\.\d*)?)?$/,
+        // from http://docs.closure-library.googlecode.com/git/closure_goog_date_date.js.source.html
+        // somewhat more in line with 4.4.3.2 2004 spec, but allows decimal anywhere
+        // and further modified to allow for strings containing both week and day
+        isoRegex = /^(-|\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;
+
+    function createDuration(input, key) {
+        var duration = input,
+            // matching against regexp is expensive, do it on demand
+            match = null,
+            sign,
+            ret,
+            diffRes;
+
+        if (isDuration(input)) {
+            duration = {
+                ms: input._milliseconds,
+                d: input._days,
+                M: input._months,
+            };
+        } else if (isNumber(input) || !isNaN(+input)) {
+            duration = {};
+            if (key) {
+                duration[key] = +input;
+            } else {
+                duration.milliseconds = +input;
+            }
+        } else if ((match = aspNetRegex.exec(input))) {
+            sign = match[1] === '-' ? -1 : 1;
+            duration = {
+                y: 0,
+                d: toInt(match[DATE]) * sign,
+                h: toInt(match[HOUR]) * sign,
+                m: toInt(match[MINUTE]) * sign,
+                s: toInt(match[SECOND]) * sign,
+                ms: toInt(absRound(match[MILLISECOND] * 1000)) * sign, // the millisecond decimal point is included in the match
+            };
+        } else if ((match = isoRegex.exec(input))) {
+            sign = match[1] === '-' ? -1 : 1;
+            duration = {
+                y: parseIso(match[2], sign),
+                M: parseIso(match[3], sign),
+                w: parseIso(match[4], sign),
+                d: parseIso(match[5], sign),
+                h: parseIso(match[6], sign),
+                m: parseIso(match[7], sign),
+                s: parseIso(match[8], sign),
+            };
+        } else if (duration == null) {
+            // checks for null or undefined
+            duration = {};
+        } else if (
+            typeof duration === 'object' &&
+            ('from' in duration || 'to' in duration)
+        ) {
+            diffRes = momentsDifference(
+                createLocal(duration.from),
+                createLocal(duration.to)
+            );
+
+            duration = {};
+            duration.ms = diffRes.milliseconds;
+            duration.M = diffRes.months;
+        }
+
+        ret = new Duration(duration);
+
+        if (isDuration(input) && hasOwnProp(input, '_locale')) {
+            ret._locale = input._locale;
+        }
+
+        if (isDuration(input) && hasOwnProp(input, '_isValid')) {
+            ret._isValid = input._isValid;
+        }
+
+        return ret;
+    }
+
+    createDuration.fn = Duration.prototype;
+    createDuration.invalid = createInvalid$1;
+
+    function parseIso(inp, sign) {
+        // We'd normally use ~~inp for this, but unfortunately it also
+        // converts floats to ints.
+        // inp may be undefined, so careful calling replace on it.
+        var res = inp && parseFloat(inp.replace(',', '.'));
+        // apply sign while we're at it
+        return (isNaN(res) ? 0 : res) * sign;
+    }
+
+    function positiveMomentsDifference(base, other) {
+        var res = {};
+
+        res.months =
+            other.month() - base.month() + (other.year() - base.year()) * 12;
+        if (base.clone().add(res.months, 'M').isAfter(other)) {
+            --res.months;
+        }
+
+        res.milliseconds = +other - +base.clone().add(res.months, 'M');
+
+        return res;
+    }
+
+    function momentsDifference(base, other) {
+        var res;
+        if (!(base.isValid() && other.isValid())) {
+            return { milliseconds: 0, months: 0 };
+        }
+
+        other = cloneWithOffset(other, base);
+        if (base.isBefore(other)) {
+            res = positiveMomentsDifference(base, other);
+        } else {
+            res = positiveMomentsDifference(other, base);
+            res.milliseconds = -res.milliseconds;
+            res.months = -res.months;
+        }
+
+        return res;
+    }
+
+    // TODO: remove 'name' arg after deprecation is removed
+    function createAdder(direction, name) {
+        return function (val, period) {
+            var dur, tmp;
+            //invert the arguments, but complain about it
+            if (period !== null && !isNaN(+period)) {
+                deprecateSimple(
+                    name,
+                    'moment().' +
+                        name +
+                        '(period, number) is deprecated. Please use moment().' +
+                        name +
+                        '(number, period). ' +
+                        'See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info.'
+                );
+                tmp = val;
+                val = period;
+                period = tmp;
+            }
+
+            dur = createDuration(val, period);
+            addSubtract(this, dur, direction);
+            return this;
+        };
+    }
+
+    function addSubtract(mom, duration, isAdding, updateOffset) {
+        var milliseconds = duration._milliseconds,
+            days = absRound(duration._days),
+            months = absRound(duration._months);
+
+        if (!mom.isValid()) {
+            // No op
+            return;
+        }
+
+        updateOffset = updateOffset == null ? true : updateOffset;
+
+        if (months) {
+            setMonth(mom, get(mom, 'Month') + months * isAdding);
+        }
+        if (days) {
+            set$1(mom, 'Date', get(mom, 'Date') + days * isAdding);
+        }
+        if (milliseconds) {
+            mom._d.setTime(mom._d.valueOf() + milliseconds * isAdding);
+        }
+        if (updateOffset) {
+            hooks.updateOffset(mom, days || months);
+        }
+    }
+
+    var add = createAdder(1, 'add'),
+        subtract = createAdder(-1, 'subtract');
+
+    function isString(input) {
+        return typeof input === 'string' || input instanceof String;
+    }
+
+    // type MomentInput = Moment | Date | string | number | (number | string)[] | MomentInputObject | void; // null | undefined
+    function isMomentInput(input) {
+        return (
+            isMoment(input) ||
+            isDate(input) ||
+            isString(input) ||
+            isNumber(input) ||
+            isNumberOrStringArray(input) ||
+            isMomentInputObject(input) ||
+            input === null ||
+            input === undefined
+        );
+    }
+
+    function isMomentInputObject(input) {
+        var objectTest = isObject(input) && !isObjectEmpty(input),
+            propertyTest = false,
+            properties = [
+                'years',
+                'year',
+                'y',
+                'months',
+                'month',
+                'M',
+                'days',
+                'day',
+                'd',
+                'dates',
+                'date',
+                'D',
+                'hours',
+                'hour',
+                'h',
+                'minutes',
+                'minute',
+                'm',
+                'seconds',
+                'second',
+                's',
+                'milliseconds',
+                'millisecond',
+                'ms',
+            ],
+            i,
+            property;
+
+        for (i = 0; i < properties.length; i += 1) {
+            property = properties[i];
+            propertyTest = propertyTest || hasOwnProp(input, property);
+        }
+
+        return objectTest && propertyTest;
+    }
+
+    function isNumberOrStringArray(input) {
+        var arrayTest = isArray(input),
+            dataTypeTest = false;
+        if (arrayTest) {
+            dataTypeTest =
+                input.filter(function (item) {
+                    return !isNumber(item) && isString(input);
+                }).length === 0;
+        }
+        return arrayTest && dataTypeTest;
+    }
+
+    function isCalendarSpec(input) {
+        var objectTest = isObject(input) && !isObjectEmpty(input),
+            propertyTest = false,
+            properties = [
+                'sameDay',
+                'nextDay',
+                'lastDay',
+                'nextWeek',
+                'lastWeek',
+                'sameElse',
+            ],
+            i,
+            property;
+
+        for (i = 0; i < properties.length; i += 1) {
+            property = properties[i];
+            propertyTest = propertyTest || hasOwnProp(input, property);
+        }
+
+        return objectTest && propertyTest;
+    }
+
+    function getCalendarFormat(myMoment, now) {
+        var diff = myMoment.diff(now, 'days', true);
+        return diff < -6
+            ? 'sameElse'
+            : diff < -1
+            ? 'lastWeek'
+            : diff < 0
+            ? 'lastDay'
+            : diff < 1
+            ? 'sameDay'
+            : diff < 2
+            ? 'nextDay'
+            : diff < 7
+            ? 'nextWeek'
+            : 'sameElse';
+    }
+
+    function calendar$1(time, formats) {
+        // Support for single parameter, formats only overload to the calendar function
+        if (arguments.length === 1) {
+            if (isMomentInput(arguments[0])) {
+                time = arguments[0];
+                formats = undefined;
+            } else if (isCalendarSpec(arguments[0])) {
+                formats = arguments[0];
+                time = undefined;
+            }
+        }
+        // We want to compare the start of today, vs this.
+        // Getting start-of-today depends on whether we're local/utc/offset or not.
+        var now = time || createLocal(),
+            sod = cloneWithOffset(now, this).startOf('day'),
+            format = hooks.calendarFormat(this, sod) || 'sameElse',
+            output =
+                formats &&
+                (isFunction(formats[format])
+                    ? formats[format].call(this, now)
+                    : formats[format]);
+
+        return this.format(
+            output || this.localeData().calendar(format, this, createLocal(now))
+        );
+    }
+
+    function clone() {
+        return new Moment(this);
+    }
+
+    function isAfter(input, units) {
+        var localInput = isMoment(input) ? input : createLocal(input);
+        if (!(this.isValid() && localInput.isValid())) {
+            return false;
+        }
+        units = normalizeUnits(units) || 'millisecond';
+        if (units === 'millisecond') {
+            return this.valueOf() > localInput.valueOf();
+        } else {
+            return localInput.valueOf() < this.clone().startOf(units).valueOf();
+        }
+    }
+
+    function isBefore(input, units) {
+        var localInput = isMoment(input) ? input : createLocal(input);
+        if (!(this.isValid() && localInput.isValid())) {
+            return false;
+        }
+        units = normalizeUnits(units) || 'millisecond';
+        if (units === 'millisecond') {
+            return this.valueOf() < localInput.valueOf();
+        } else {
+            return this.clone().endOf(units).valueOf() < localInput.valueOf();
+        }
+    }
+
+    function isBetween(from, to, units, inclusivity) {
+        var localFrom = isMoment(from) ? from : createLocal(from),
+            localTo = isMoment(to) ? to : createLocal(to);
+        if (!(this.isValid() && localFrom.isValid() && localTo.isValid())) {
+            return false;
+        }
+        inclusivity = inclusivity || '()';
+        return (
+            (inclusivity[0] === '('
+                ? this.isAfter(localFrom, units)
+                : !this.isBefore(localFrom, units)) &&
+            (inclusivity[1] === ')'
+                ? this.isBefore(localTo, units)
+                : !this.isAfter(localTo, units))
+        );
+    }
+
+    function isSame(input, units) {
+        var localInput = isMoment(input) ? input : createLocal(input),
+            inputMs;
+        if (!(this.isValid() && localInput.isValid())) {
+            return false;
+        }
+        units = normalizeUnits(units) || 'millisecond';
+        if (units === 'millisecond') {
+            return this.valueOf() === localInput.valueOf();
+        } else {
+            inputMs = localInput.valueOf();
+            return (
+                this.clone().startOf(units).valueOf() <= inputMs &&
+                inputMs <= this.clone().endOf(units).valueOf()
+            );
+        }
+    }
+
+    function isSameOrAfter(input, units) {
+        return this.isSame(input, units) || this.isAfter(input, units);
+    }
+
+    function isSameOrBefore(input, units) {
+        return this.isSame(input, units) || this.isBefore(input, units);
+    }
+
+    function diff(input, units, asFloat) {
+        var that, zoneDelta, output;
+
+        if (!this.isValid()) {
+            return NaN;
+        }
+
+        that = cloneWithOffset(input, this);
+
+        if (!that.isValid()) {
+            return NaN;
+        }
+
+        zoneDelta = (that.utcOffset() - this.utcOffset()) * 6e4;
+
+        units = normalizeUnits(units);
+
+        switch (units) {
+            case 'year':
+                output = monthDiff(this, that) / 12;
+                break;
+            case 'month':
+                output = monthDiff(this, that);
+                break;
+            case 'quarter':
+                output = monthDiff(this, that) / 3;
+                break;
+            case 'second':
+                output = (this - that) / 1e3;
+                break; // 1000
+            case 'minute':
+                output = (this - that) / 6e4;
+                break; // 1000 * 60
+            case 'hour':
+                output = (this - that) / 36e5;
+                break; // 1000 * 60 * 60
+            case 'day':
+                output = (this - that - zoneDelta) / 864e5;
+                break; // 1000 * 60 * 60 * 24, negate dst
+            case 'week':
+                output = (this - that - zoneDelta) / 6048e5;
+                break; // 1000 * 60 * 60 * 24 * 7, negate dst
+            default:
+                output = this - that;
+        }
+
+        return asFloat ? output : absFloor(output);
+    }
+
+    function monthDiff(a, b) {
+        if (a.date() < b.date()) {
+            // end-of-month calculations work correct when the start month has more
+            // days than the end month.
+            return -monthDiff(b, a);
+        }
+        // difference in months
+        var wholeMonthDiff = (b.year() - a.year()) * 12 + (b.month() - a.month()),
+            // b is in (anchor - 1 month, anchor + 1 month)
+            anchor = a.clone().add(wholeMonthDiff, 'months'),
+            anchor2,
+            adjust;
+
+        if (b - anchor < 0) {
+            anchor2 = a.clone().add(wholeMonthDiff - 1, 'months');
+            // linear across the month
+            adjust = (b - anchor) / (anchor - anchor2);
+        } else {
+            anchor2 = a.clone().add(wholeMonthDiff + 1, 'months');
+            // linear across the month
+            adjust = (b - anchor) / (anchor2 - anchor);
+        }
+
+        //check for negative zero, return zero if negative zero
+        return -(wholeMonthDiff + adjust) || 0;
+    }
+
+    hooks.defaultFormat = 'YYYY-MM-DDTHH:mm:ssZ';
+    hooks.defaultFormatUtc = 'YYYY-MM-DDTHH:mm:ss[Z]';
+
+    function toString() {
+        return this.clone().locale('en').format('ddd MMM DD YYYY HH:mm:ss [GMT]ZZ');
+    }
+
+    function toISOString(keepOffset) {
+        if (!this.isValid()) {
+            return null;
+        }
+        var utc = keepOffset !== true,
+            m = utc ? this.clone().utc() : this;
+        if (m.year() < 0 || m.year() > 9999) {
+            return formatMoment(
+                m,
+                utc
+                    ? 'YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]'
+                    : 'YYYYYY-MM-DD[T]HH:mm:ss.SSSZ'
+            );
+        }
+        if (isFunction(Date.prototype.toISOString)) {
+            // native implementation is ~50x faster, use it when we can
+            if (utc) {
+                return this.toDate().toISOString();
+            } else {
+                return new Date(this.valueOf() + this.utcOffset() * 60 * 1000)
+                    .toISOString()
+                    .replace('Z', formatMoment(m, 'Z'));
+            }
+        }
+        return formatMoment(
+            m,
+            utc ? 'YYYY-MM-DD[T]HH:mm:ss.SSS[Z]' : 'YYYY-MM-DD[T]HH:mm:ss.SSSZ'
+        );
+    }
+
+    /**
+     * Return a human readable representation of a moment that can
+     * also be evaluated to get a new moment which is the same
+     *
+     * @link https://nodejs.org/dist/latest/docs/api/util.html#util_custom_inspect_function_on_objects
+     */
+    function inspect() {
+        if (!this.isValid()) {
+            return 'moment.invalid(/* ' + this._i + ' */)';
+        }
+        var func = 'moment',
+            zone = '',
+            prefix,
+            year,
+            datetime,
+            suffix;
+        if (!this.isLocal()) {
+            func = this.utcOffset() === 0 ? 'moment.utc' : 'moment.parseZone';
+            zone = 'Z';
+        }
+        prefix = '[' + func + '("]';
+        year = 0 <= this.year() && this.year() <= 9999 ? 'YYYY' : 'YYYYYY';
+        datetime = '-MM-DD[T]HH:mm:ss.SSS';
+        suffix = zone + '[")]';
+
+        return this.format(prefix + year + datetime + suffix);
+    }
+
+    function format(inputString) {
+        if (!inputString) {
+            inputString = this.isUtc()
+                ? hooks.defaultFormatUtc
+                : hooks.defaultFormat;
+        }
+        var output = formatMoment(this, inputString);
+        return this.localeData().postformat(output);
+    }
+
+    function from(time, withoutSuffix) {
+        if (
+            this.isValid() &&
+            ((isMoment(time) && time.isValid()) || createLocal(time).isValid())
+        ) {
+            return createDuration({ to: this, from: time })
+                .locale(this.locale())
+                .humanize(!withoutSuffix);
+        } else {
+            return this.localeData().invalidDate();
+        }
+    }
+
+    function fromNow(withoutSuffix) {
+        return this.from(createLocal(), withoutSuffix);
+    }
+
+    function to(time, withoutSuffix) {
+        if (
+            this.isValid() &&
+            ((isMoment(time) && time.isValid()) || createLocal(time).isValid())
+        ) {
+            return createDuration({ from: this, to: time })
+                .locale(this.locale())
+                .humanize(!withoutSuffix);
+        } else {
+            return this.localeData().invalidDate();
+        }
+    }
+
+    function toNow(withoutSuffix) {
+        return this.to(createLocal(), withoutSuffix);
+    }
+
+    // If passed a locale key, it will set the locale for this
+    // instance.  Otherwise, it will return the locale configuration
+    // variables for this instance.
+    function locale(key) {
+        var newLocaleData;
+
+        if (key === undefined) {
+            return this._locale._abbr;
+        } else {
+            newLocaleData = getLocale(key);
+            if (newLocaleData != null) {
+                this._locale = newLocaleData;
+            }
+            return this;
+        }
+    }
+
+    var lang = deprecate(
+        'moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.',
+        function (key) {
+            if (key === undefined) {
+                return this.localeData();
+            } else {
+                return this.locale(key);
+            }
+        }
+    );
+
+    function localeData() {
+        return this._locale;
+    }
+
+    var MS_PER_SECOND = 1000,
+        MS_PER_MINUTE = 60 * MS_PER_SECOND,
+        MS_PER_HOUR = 60 * MS_PER_MINUTE,
+        MS_PER_400_YEARS = (365 * 400 + 97) * 24 * MS_PER_HOUR;
+
+    // actual modulo - handles negative numbers (for dates before 1970):
+    function mod$1(dividend, divisor) {
+        return ((dividend % divisor) + divisor) % divisor;
+    }
+
+    function localStartOfDate(y, m, d) {
+        // the date constructor remaps years 0-99 to 1900-1999
+        if (y < 100 && y >= 0) {
+            // preserve leap years using a full 400 year cycle, then reset
+            return new Date(y + 400, m, d) - MS_PER_400_YEARS;
+        } else {
+            return new Date(y, m, d).valueOf();
+        }
+    }
+
+    function utcStartOfDate(y, m, d) {
+        // Date.UTC remaps years 0-99 to 1900-1999
+        if (y < 100 && y >= 0) {
+            // preserve leap years using a full 400 year cycle, then reset
+            return Date.UTC(y + 400, m, d) - MS_PER_400_YEARS;
+        } else {
+            return Date.UTC(y, m, d);
+        }
+    }
+
+    function startOf(units) {
+        var time, startOfDate;
+        units = normalizeUnits(units);
+        if (units === undefined || units === 'millisecond' || !this.isValid()) {
+            return this;
+        }
+
+        startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate;
+
+        switch (units) {
+            case 'year':
+                time = startOfDate(this.year(), 0, 1);
+                break;
+            case 'quarter':
+                time = startOfDate(
+                    this.year(),
+                    this.month() - (this.month() % 3),
+                    1
+                );
+                break;
+            case 'month':
+                time = startOfDate(this.year(), this.month(), 1);
+                break;
+            case 'week':
+                time = startOfDate(
+                    this.year(),
+                    this.month(),
+                    this.date() - this.weekday()
+                );
+                break;
+            case 'isoWeek':
+                time = startOfDate(
+                    this.year(),
+                    this.month(),
+                    this.date() - (this.isoWeekday() - 1)
+                );
+                break;
+            case 'day':
+            case 'date':
+                time = startOfDate(this.year(), this.month(), this.date());
+                break;
+            case 'hour':
+                time = this._d.valueOf();
+                time -= mod$1(
+                    time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE),
+                    MS_PER_HOUR
+                );
+                break;
+            case 'minute':
+                time = this._d.valueOf();
+                time -= mod$1(time, MS_PER_MINUTE);
+                break;
+            case 'second':
+                time = this._d.valueOf();
+                time -= mod$1(time, MS_PER_SECOND);
+                break;
+        }
+
+        this._d.setTime(time);
+        hooks.updateOffset(this, true);
+        return this;
+    }
+
+    function endOf(units) {
+        var time, startOfDate;
+        units = normalizeUnits(units);
+        if (units === undefined || units === 'millisecond' || !this.isValid()) {
+            return this;
+        }
+
+        startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate;
+
+        switch (units) {
+            case 'year':
+                time = startOfDate(this.year() + 1, 0, 1) - 1;
+                break;
+            case 'quarter':
+                time =
+                    startOfDate(
+                        this.year(),
+                        this.month() - (this.month() % 3) + 3,
+                        1
+                    ) - 1;
+                break;
+            case 'month':
+                time = startOfDate(this.year(), this.month() + 1, 1) - 1;
+                break;
+            case 'week':
+                time =
+                    startOfDate(
+                        this.year(),
+                        this.month(),
+                        this.date() - this.weekday() + 7
+                    ) - 1;
+                break;
+            case 'isoWeek':
+                time =
+                    startOfDate(
+                        this.year(),
+                        this.month(),
+                        this.date() - (this.isoWeekday() - 1) + 7
+                    ) - 1;
+                break;
+            case 'day':
+            case 'date':
+                time = startOfDate(this.year(), this.month(), this.date() + 1) - 1;
+                break;
+            case 'hour':
+                time = this._d.valueOf();
+                time +=
+                    MS_PER_HOUR -
+                    mod$1(
+                        time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE),
+                        MS_PER_HOUR
+                    ) -
+                    1;
+                break;
+            case 'minute':
+                time = this._d.valueOf();
+                time += MS_PER_MINUTE - mod$1(time, MS_PER_MINUTE) - 1;
+                break;
+            case 'second':
+                time = this._d.valueOf();
+                time += MS_PER_SECOND - mod$1(time, MS_PER_SECOND) - 1;
+                break;
+        }
+
+        this._d.setTime(time);
+        hooks.updateOffset(this, true);
+        return this;
+    }
+
+    function valueOf() {
+        return this._d.valueOf() - (this._offset || 0) * 60000;
+    }
+
+    function unix() {
+        return Math.floor(this.valueOf() / 1000);
+    }
+
+    function toDate() {
+        return new Date(this.valueOf());
+    }
+
+    function toArray() {
+        var m = this;
+        return [
+            m.year(),
+            m.month(),
+            m.date(),
+            m.hour(),
+            m.minute(),
+            m.second(),
+            m.millisecond(),
+        ];
+    }
+
+    function toObject() {
+        var m = this;
+        return {
+            years: m.year(),
+            months: m.month(),
+            date: m.date(),
+            hours: m.hours(),
+            minutes: m.minutes(),
+            seconds: m.seconds(),
+            milliseconds: m.milliseconds(),
+        };
+    }
+
+    function toJSON() {
+        // new Date(NaN).toJSON() === null
+        return this.isValid() ? this.toISOString() : null;
+    }
+
+    function isValid$2() {
+        return isValid(this);
+    }
+
+    function parsingFlags() {
+        return extend({}, getParsingFlags(this));
+    }
+
+    function invalidAt() {
+        return getParsingFlags(this).overflow;
+    }
+
+    function creationData() {
+        return {
+            input: this._i,
+            format: this._f,
+            locale: this._locale,
+            isUTC: this._isUTC,
+            strict: this._strict,
+        };
+    }
+
+    addFormatToken('N', 0, 0, 'eraAbbr');
+    addFormatToken('NN', 0, 0, 'eraAbbr');
+    addFormatToken('NNN', 0, 0, 'eraAbbr');
+    addFormatToken('NNNN', 0, 0, 'eraName');
+    addFormatToken('NNNNN', 0, 0, 'eraNarrow');
+
+    addFormatToken('y', ['y', 1], 'yo', 'eraYear');
+    addFormatToken('y', ['yy', 2], 0, 'eraYear');
+    addFormatToken('y', ['yyy', 3], 0, 'eraYear');
+    addFormatToken('y', ['yyyy', 4], 0, 'eraYear');
+
+    addRegexToken('N', matchEraAbbr);
+    addRegexToken('NN', matchEraAbbr);
+    addRegexToken('NNN', matchEraAbbr);
+    addRegexToken('NNNN', matchEraName);
+    addRegexToken('NNNNN', matchEraNarrow);
+
+    addParseToken(['N', 'NN', 'NNN', 'NNNN', 'NNNNN'], function (
+        input,
+        array,
+        config,
+        token
+    ) {
+        var era = config._locale.erasParse(input, token, config._strict);
+        if (era) {
+            getParsingFlags(config).era = era;
+        } else {
+            getParsingFlags(config).invalidEra = input;
+        }
+    });
+
+    addRegexToken('y', matchUnsigned);
+    addRegexToken('yy', matchUnsigned);
+    addRegexToken('yyy', matchUnsigned);
+    addRegexToken('yyyy', matchUnsigned);
+    addRegexToken('yo', matchEraYearOrdinal);
+
+    addParseToken(['y', 'yy', 'yyy', 'yyyy'], YEAR);
+    addParseToken(['yo'], function (input, array, config, token) {
+        var match;
+        if (config._locale._eraYearOrdinalRegex) {
+            match = input.match(config._locale._eraYearOrdinalRegex);
+        }
+
+        if (config._locale.eraYearOrdinalParse) {
+            array[YEAR] = config._locale.eraYearOrdinalParse(input, match);
+        } else {
+            array[YEAR] = parseInt(input, 10);
+        }
+    });
+
+    function localeEras(m, format) {
+        var i,
+            l,
+            date,
+            eras = this._eras || getLocale('en')._eras;
+        for (i = 0, l = eras.length; i < l; ++i) {
+            switch (typeof eras[i].since) {
+                case 'string':
+                    // truncate time
+                    date = hooks(eras[i].since).startOf('day');
+                    eras[i].since = date.valueOf();
+                    break;
+            }
+
+            switch (typeof eras[i].until) {
+                case 'undefined':
+                    eras[i].until = +Infinity;
+                    break;
+                case 'string':
+                    // truncate time
+                    date = hooks(eras[i].until).startOf('day').valueOf();
+                    eras[i].until = date.valueOf();
+                    break;
+            }
+        }
+        return eras;
+    }
+
+    function localeErasParse(eraName, format, strict) {
+        var i,
+            l,
+            eras = this.eras(),
+            name,
+            abbr,
+            narrow;
+        eraName = eraName.toUpperCase();
+
+        for (i = 0, l = eras.length; i < l; ++i) {
+            name = eras[i].name.toUpperCase();
+            abbr = eras[i].abbr.toUpperCase();
+            narrow = eras[i].narrow.toUpperCase();
+
+            if (strict) {
+                switch (format) {
+                    case 'N':
+                    case 'NN':
+                    case 'NNN':
+                        if (abbr === eraName) {
+                            return eras[i];
+                        }
+                        break;
+
+                    case 'NNNN':
+                        if (name === eraName) {
+                            return eras[i];
+                        }
+                        break;
+
+                    case 'NNNNN':
+                        if (narrow === eraName) {
+                            return eras[i];
+                        }
+                        break;
+                }
+            } else if ([name, abbr, narrow].indexOf(eraName) >= 0) {
+                return eras[i];
+            }
+        }
+    }
+
+    function localeErasConvertYear(era, year) {
+        var dir = era.since <= era.until ? +1 : -1;
+        if (year === undefined) {
+            return hooks(era.since).year();
+        } else {
+            return hooks(era.since).year() + (year - era.offset) * dir;
+        }
+    }
+
+    function getEraName() {
+        var i,
+            l,
+            val,
+            eras = this.localeData().eras();
+        for (i = 0, l = eras.length; i < l; ++i) {
+            // truncate time
+            val = this.clone().startOf('day').valueOf();
+
+            if (eras[i].since <= val && val <= eras[i].until) {
+                return eras[i].name;
+            }
+            if (eras[i].until <= val && val <= eras[i].since) {
+                return eras[i].name;
+            }
+        }
+
+        return '';
+    }
+
+    function getEraNarrow() {
+        var i,
+            l,
+            val,
+            eras = this.localeData().eras();
+        for (i = 0, l = eras.length; i < l; ++i) {
+            // truncate time
+            val = this.clone().startOf('day').valueOf();
+
+            if (eras[i].since <= val && val <= eras[i].until) {
+                return eras[i].narrow;
+            }
+            if (eras[i].until <= val && val <= eras[i].since) {
+                return eras[i].narrow;
+            }
+        }
+
+        return '';
+    }
+
+    function getEraAbbr() {
+        var i,
+            l,
+            val,
+            eras = this.localeData().eras();
+        for (i = 0, l = eras.length; i < l; ++i) {
+            // truncate time
+            val = this.clone().startOf('day').valueOf();
+
+            if (eras[i].since <= val && val <= eras[i].until) {
+                return eras[i].abbr;
+            }
+            if (eras[i].until <= val && val <= eras[i].since) {
+                return eras[i].abbr;
+            }
+        }
+
+        return '';
+    }
+
+    function getEraYear() {
+        var i,
+            l,
+            dir,
+            val,
+            eras = this.localeData().eras();
+        for (i = 0, l = eras.length; i < l; ++i) {
+            dir = eras[i].since <= eras[i].until ? +1 : -1;
+
+            // truncate time
+            val = this.clone().startOf('day').valueOf();
+
+            if (
+                (eras[i].since <= val && val <= eras[i].until) ||
+                (eras[i].until <= val && val <= eras[i].since)
+            ) {
+                return (
+                    (this.year() - hooks(eras[i].since).year()) * dir +
+                    eras[i].offset
+                );
+            }
+        }
+
+        return this.year();
+    }
+
+    function erasNameRegex(isStrict) {
+        if (!hasOwnProp(this, '_erasNameRegex')) {
+            computeErasParse.call(this);
+        }
+        return isStrict ? this._erasNameRegex : this._erasRegex;
+    }
+
+    function erasAbbrRegex(isStrict) {
+        if (!hasOwnProp(this, '_erasAbbrRegex')) {
+            computeErasParse.call(this);
+        }
+        return isStrict ? this._erasAbbrRegex : this._erasRegex;
+    }
+
+    function erasNarrowRegex(isStrict) {
+        if (!hasOwnProp(this, '_erasNarrowRegex')) {
+            computeErasParse.call(this);
+        }
+        return isStrict ? this._erasNarrowRegex : this._erasRegex;
+    }
+
+    function matchEraAbbr(isStrict, locale) {
+        return locale.erasAbbrRegex(isStrict);
+    }
+
+    function matchEraName(isStrict, locale) {
+        return locale.erasNameRegex(isStrict);
+    }
+
+    function matchEraNarrow(isStrict, locale) {
+        return locale.erasNarrowRegex(isStrict);
+    }
+
+    function matchEraYearOrdinal(isStrict, locale) {
+        return locale._eraYearOrdinalRegex || matchUnsigned;
+    }
+
+    function computeErasParse() {
+        var abbrPieces = [],
+            namePieces = [],
+            narrowPieces = [],
+            mixedPieces = [],
+            i,
+            l,
+            eras = this.eras();
+
+        for (i = 0, l = eras.length; i < l; ++i) {
+            namePieces.push(regexEscape(eras[i].name));
+            abbrPieces.push(regexEscape(eras[i].abbr));
+            narrowPieces.push(regexEscape(eras[i].narrow));
+
+            mixedPieces.push(regexEscape(eras[i].name));
+            mixedPieces.push(regexEscape(eras[i].abbr));
+            mixedPieces.push(regexEscape(eras[i].narrow));
+        }
+
+        this._erasRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');
+        this._erasNameRegex = new RegExp('^(' + namePieces.join('|') + ')', 'i');
+        this._erasAbbrRegex = new RegExp('^(' + abbrPieces.join('|') + ')', 'i');
+        this._erasNarrowRegex = new RegExp(
+            '^(' + narrowPieces.join('|') + ')',
+            'i'
+        );
+    }
+
+    // FORMATTING
+
+    addFormatToken(0, ['gg', 2], 0, function () {
+        return this.weekYear() % 100;
+    });
+
+    addFormatToken(0, ['GG', 2], 0, function () {
+        return this.isoWeekYear() % 100;
+    });
+
+    function addWeekYearFormatToken(token, getter) {
+        addFormatToken(0, [token, token.length], 0, getter);
+    }
+
+    addWeekYearFormatToken('gggg', 'weekYear');
+    addWeekYearFormatToken('ggggg', 'weekYear');
+    addWeekYearFormatToken('GGGG', 'isoWeekYear');
+    addWeekYearFormatToken('GGGGG', 'isoWeekYear');
+
+    // ALIASES
+
+    addUnitAlias('weekYear', 'gg');
+    addUnitAlias('isoWeekYear', 'GG');
+
+    // PRIORITY
+
+    addUnitPriority('weekYear', 1);
+    addUnitPriority('isoWeekYear', 1);
+
+    // PARSING
+
+    addRegexToken('G', matchSigned);
+    addRegexToken('g', matchSigned);
+    addRegexToken('GG', match1to2, match2);
+    addRegexToken('gg', match1to2, match2);
+    addRegexToken('GGGG', match1to4, match4);
+    addRegexToken('gggg', match1to4, match4);
+    addRegexToken('GGGGG', match1to6, match6);
+    addRegexToken('ggggg', match1to6, match6);
+
+    addWeekParseToken(['gggg', 'ggggg', 'GGGG', 'GGGGG'], function (
+        input,
+        week,
+        config,
+        token
+    ) {
+        week[token.substr(0, 2)] = toInt(input);
+    });
+
+    addWeekParseToken(['gg', 'GG'], function (input, week, config, token) {
+        week[token] = hooks.parseTwoDigitYear(input);
+    });
+
+    // MOMENTS
+
+    function getSetWeekYear(input) {
+        return getSetWeekYearHelper.call(
+            this,
+            input,
+            this.week(),
+            this.weekday(),
+            this.localeData()._week.dow,
+            this.localeData()._week.doy
+        );
+    }
+
+    function getSetISOWeekYear(input) {
+        return getSetWeekYearHelper.call(
+            this,
+            input,
+            this.isoWeek(),
+            this.isoWeekday(),
+            1,
+            4
+        );
+    }
+
+    function getISOWeeksInYear() {
+        return weeksInYear(this.year(), 1, 4);
+    }
+
+    function getISOWeeksInISOWeekYear() {
+        return weeksInYear(this.isoWeekYear(), 1, 4);
+    }
+
+    function getWeeksInYear() {
+        var weekInfo = this.localeData()._week;
+        return weeksInYear(this.year(), weekInfo.dow, weekInfo.doy);
+    }
+
+    function getWeeksInWeekYear() {
+        var weekInfo = this.localeData()._week;
+        return weeksInYear(this.weekYear(), weekInfo.dow, weekInfo.doy);
+    }
+
+    function getSetWeekYearHelper(input, week, weekday, dow, doy) {
+        var weeksTarget;
+        if (input == null) {
+            return weekOfYear(this, dow, doy).year;
+        } else {
+            weeksTarget = weeksInYear(input, dow, doy);
+            if (week > weeksTarget) {
+                week = weeksTarget;
+            }
+            return setWeekAll.call(this, input, week, weekday, dow, doy);
+        }
+    }
+
+    function setWeekAll(weekYear, week, weekday, dow, doy) {
+        var dayOfYearData = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy),
+            date = createUTCDate(dayOfYearData.year, 0, dayOfYearData.dayOfYear);
+
+        this.year(date.getUTCFullYear());
+        this.month(date.getUTCMonth());
+        this.date(date.getUTCDate());
+        return this;
+    }
+
+    // FORMATTING
+
+    addFormatToken('Q', 0, 'Qo', 'quarter');
+
+    // ALIASES
+
+    addUnitAlias('quarter', 'Q');
+
+    // PRIORITY
+
+    addUnitPriority('quarter', 7);
+
+    // PARSING
+
+    addRegexToken('Q', match1);
+    addParseToken('Q', function (input, array) {
+        array[MONTH] = (toInt(input) - 1) * 3;
+    });
+
+    // MOMENTS
+
+    function getSetQuarter(input) {
+        return input == null
+            ? Math.ceil((this.month() + 1) / 3)
+            : this.month((input - 1) * 3 + (this.month() % 3));
+    }
+
+    // FORMATTING
+
+    addFormatToken('D', ['DD', 2], 'Do', 'date');
+
+    // ALIASES
+
+    addUnitAlias('date', 'D');
+
+    // PRIORITY
+    addUnitPriority('date', 9);
+
+    // PARSING
+
+    addRegexToken('D', match1to2);
+    addRegexToken('DD', match1to2, match2);
+    addRegexToken('Do', function (isStrict, locale) {
+        // TODO: Remove "ordinalParse" fallback in next major release.
+        return isStrict
+            ? locale._dayOfMonthOrdinalParse || locale._ordinalParse
+            : locale._dayOfMonthOrdinalParseLenient;
+    });
+
+    addParseToken(['D', 'DD'], DATE);
+    addParseToken('Do', function (input, array) {
+        array[DATE] = toInt(input.match(match1to2)[0]);
+    });
+
+    // MOMENTS
+
+    var getSetDayOfMonth = makeGetSet('Date', true);
+
+    // FORMATTING
+
+    addFormatToken('DDD', ['DDDD', 3], 'DDDo', 'dayOfYear');
+
+    // ALIASES
+
+    addUnitAlias('dayOfYear', 'DDD');
+
+    // PRIORITY
+    addUnitPriority('dayOfYear', 4);
+
+    // PARSING
+
+    addRegexToken('DDD', match1to3);
+    addRegexToken('DDDD', match3);
+    addParseToken(['DDD', 'DDDD'], function (input, array, config) {
+        config._dayOfYear = toInt(input);
+    });
+
+    // HELPERS
+
+    // MOMENTS
+
+    function getSetDayOfYear(input) {
+        var dayOfYear =
+            Math.round(
+                (this.clone().startOf('day') - this.clone().startOf('year')) / 864e5
+            ) + 1;
+        return input == null ? dayOfYear : this.add(input - dayOfYear, 'd');
+    }
+
+    // FORMATTING
+
+    addFormatToken('m', ['mm', 2], 0, 'minute');
+
+    // ALIASES
+
+    addUnitAlias('minute', 'm');
+
+    // PRIORITY
+
+    addUnitPriority('minute', 14);
+
+    // PARSING
+
+    addRegexToken('m', match1to2);
+    addRegexToken('mm', match1to2, match2);
+    addParseToken(['m', 'mm'], MINUTE);
+
+    // MOMENTS
+
+    var getSetMinute = makeGetSet('Minutes', false);
+
+    // FORMATTING
+
+    addFormatToken('s', ['ss', 2], 0, 'second');
+
+    // ALIASES
+
+    addUnitAlias('second', 's');
+
+    // PRIORITY
+
+    addUnitPriority('second', 15);
+
+    // PARSING
+
+    addRegexToken('s', match1to2);
+    addRegexToken('ss', match1to2, match2);
+    addParseToken(['s', 'ss'], SECOND);
+
+    // MOMENTS
+
+    var getSetSecond = makeGetSet('Seconds', false);
+
+    // FORMATTING
+
+    addFormatToken('S', 0, 0, function () {
+        return ~~(this.millisecond() / 100);
+    });
+
+    addFormatToken(0, ['SS', 2], 0, function () {
+        return ~~(this.millisecond() / 10);
+    });
+
+    addFormatToken(0, ['SSS', 3], 0, 'millisecond');
+    addFormatToken(0, ['SSSS', 4], 0, function () {
+        return this.millisecond() * 10;
+    });
+    addFormatToken(0, ['SSSSS', 5], 0, function () {
+        return this.millisecond() * 100;
+    });
+    addFormatToken(0, ['SSSSSS', 6], 0, function () {
+        return this.millisecond() * 1000;
+    });
+    addFormatToken(0, ['SSSSSSS', 7], 0, function () {
+        return this.millisecond() * 10000;
+    });
+    addFormatToken(0, ['SSSSSSSS', 8], 0, function () {
+        return this.millisecond() * 100000;
+    });
+    addFormatToken(0, ['SSSSSSSSS', 9], 0, function () {
+        return this.millisecond() * 1000000;
+    });
+
+    // ALIASES
+
+    addUnitAlias('millisecond', 'ms');
+
+    // PRIORITY
+
+    addUnitPriority('millisecond', 16);
+
+    // PARSING
+
+    addRegexToken('S', match1to3, match1);
+    addRegexToken('SS', match1to3, match2);
+    addRegexToken('SSS', match1to3, match3);
+
+    var token, getSetMillisecond;
+    for (token = 'SSSS'; token.length <= 9; token += 'S') {
+        addRegexToken(token, matchUnsigned);
+    }
+
+    function parseMs(input, array) {
+        array[MILLISECOND] = toInt(('0.' + input) * 1000);
+    }
+
+    for (token = 'S'; token.length <= 9; token += 'S') {
+        addParseToken(token, parseMs);
+    }
+
+    getSetMillisecond = makeGetSet('Milliseconds', false);
+
+    // FORMATTING
+
+    addFormatToken('z', 0, 0, 'zoneAbbr');
+    addFormatToken('zz', 0, 0, 'zoneName');
+
+    // MOMENTS
+
+    function getZoneAbbr() {
+        return this._isUTC ? 'UTC' : '';
+    }
+
+    function getZoneName() {
+        return this._isUTC ? 'Coordinated Universal Time' : '';
+    }
+
+    var proto = Moment.prototype;
+
+    proto.add = add;
+    proto.calendar = calendar$1;
+    proto.clone = clone;
+    proto.diff = diff;
+    proto.endOf = endOf;
+    proto.format = format;
+    proto.from = from;
+    proto.fromNow = fromNow;
+    proto.to = to;
+    proto.toNow = toNow;
+    proto.get = stringGet;
+    proto.invalidAt = invalidAt;
+    proto.isAfter = isAfter;
+    proto.isBefore = isBefore;
+    proto.isBetween = isBetween;
+    proto.isSame = isSame;
+    proto.isSameOrAfter = isSameOrAfter;
+    proto.isSameOrBefore = isSameOrBefore;
+    proto.isValid = isValid$2;
+    proto.lang = lang;
+    proto.locale = locale;
+    proto.localeData = localeData;
+    proto.max = prototypeMax;
+    proto.min = prototypeMin;
+    proto.parsingFlags = parsingFlags;
+    proto.set = stringSet;
+    proto.startOf = startOf;
+    proto.subtract = subtract;
+    proto.toArray = toArray;
+    proto.toObject = toObject;
+    proto.toDate = toDate;
+    proto.toISOString = toISOString;
+    proto.inspect = inspect;
+    if (typeof Symbol !== 'undefined' && Symbol.for != null) {
+        proto[Symbol.for('nodejs.util.inspect.custom')] = function () {
+            return 'Moment<' + this.format() + '>';
+        };
+    }
+    proto.toJSON = toJSON;
+    proto.toString = toString;
+    proto.unix = unix;
+    proto.valueOf = valueOf;
+    proto.creationData = creationData;
+    proto.eraName = getEraName;
+    proto.eraNarrow = getEraNarrow;
+    proto.eraAbbr = getEraAbbr;
+    proto.eraYear = getEraYear;
+    proto.year = getSetYear;
+    proto.isLeapYear = getIsLeapYear;
+    proto.weekYear = getSetWeekYear;
+    proto.isoWeekYear = getSetISOWeekYear;
+    proto.quarter = proto.quarters = getSetQuarter;
+    proto.month = getSetMonth;
+    proto.daysInMonth = getDaysInMonth;
+    proto.week = proto.weeks = getSetWeek;
+    proto.isoWeek = proto.isoWeeks = getSetISOWeek;
+    proto.weeksInYear = getWeeksInYear;
+    proto.weeksInWeekYear = getWeeksInWeekYear;
+    proto.isoWeeksInYear = getISOWeeksInYear;
+    proto.isoWeeksInISOWeekYear = getISOWeeksInISOWeekYear;
+    proto.date = getSetDayOfMonth;
+    proto.day = proto.days = getSetDayOfWeek;
+    proto.weekday = getSetLocaleDayOfWeek;
+    proto.isoWeekday = getSetISODayOfWeek;
+    proto.dayOfYear = getSetDayOfYear;
+    proto.hour = proto.hours = getSetHour;
+    proto.minute = proto.minutes = getSetMinute;
+    proto.second = proto.seconds = getSetSecond;
+    proto.millisecond = proto.milliseconds = getSetMillisecond;
+    proto.utcOffset = getSetOffset;
+    proto.utc = setOffsetToUTC;
+    proto.local = setOffsetToLocal;
+    proto.parseZone = setOffsetToParsedOffset;
+    proto.hasAlignedHourOffset = hasAlignedHourOffset;
+    proto.isDST = isDaylightSavingTime;
+    proto.isLocal = isLocal;
+    proto.isUtcOffset = isUtcOffset;
+    proto.isUtc = isUtc;
+    proto.isUTC = isUtc;
+    proto.zoneAbbr = getZoneAbbr;
+    proto.zoneName = getZoneName;
+    proto.dates = deprecate(
+        'dates accessor is deprecated. Use date instead.',
+        getSetDayOfMonth
+    );
+    proto.months = deprecate(
+        'months accessor is deprecated. Use month instead',
+        getSetMonth
+    );
+    proto.years = deprecate(
+        'years accessor is deprecated. Use year instead',
+        getSetYear
+    );
+    proto.zone = deprecate(
+        'moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/',
+        getSetZone
+    );
+    proto.isDSTShifted = deprecate(
+        'isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information',
+        isDaylightSavingTimeShifted
+    );
+
+    function createUnix(input) {
+        return createLocal(input * 1000);
+    }
+
+    function createInZone() {
+        return createLocal.apply(null, arguments).parseZone();
+    }
+
+    function preParsePostFormat(string) {
+        return string;
+    }
+
+    var proto$1 = Locale.prototype;
+
+    proto$1.calendar = calendar;
+    proto$1.longDateFormat = longDateFormat;
+    proto$1.invalidDate = invalidDate;
+    proto$1.ordinal = ordinal;
+    proto$1.preparse = preParsePostFormat;
+    proto$1.postformat = preParsePostFormat;
+    proto$1.relativeTime = relativeTime;
+    proto$1.pastFuture = pastFuture;
+    proto$1.set = set;
+    proto$1.eras = localeEras;
+    proto$1.erasParse = localeErasParse;
+    proto$1.erasConvertYear = localeErasConvertYear;
+    proto$1.erasAbbrRegex = erasAbbrRegex;
+    proto$1.erasNameRegex = erasNameRegex;
+    proto$1.erasNarrowRegex = erasNarrowRegex;
+
+    proto$1.months = localeMonths;
+    proto$1.monthsShort = localeMonthsShort;
+    proto$1.monthsParse = localeMonthsParse;
+    proto$1.monthsRegex = monthsRegex;
+    proto$1.monthsShortRegex = monthsShortRegex;
+    proto$1.week = localeWeek;
+    proto$1.firstDayOfYear = localeFirstDayOfYear;
+    proto$1.firstDayOfWeek = localeFirstDayOfWeek;
+
+    proto$1.weekdays = localeWeekdays;
+    proto$1.weekdaysMin = localeWeekdaysMin;
+    proto$1.weekdaysShort = localeWeekdaysShort;
+    proto$1.weekdaysParse = localeWeekdaysParse;
+
+    proto$1.weekdaysRegex = weekdaysRegex;
+    proto$1.weekdaysShortRegex = weekdaysShortRegex;
+    proto$1.weekdaysMinRegex = weekdaysMinRegex;
+
+    proto$1.isPM = localeIsPM;
+    proto$1.meridiem = localeMeridiem;
+
+    function get$1(format, index, field, setter) {
+        var locale = getLocale(),
+            utc = createUTC().set(setter, index);
+        return locale[field](utc, format);
+    }
+
+    function listMonthsImpl(format, index, field) {
+        if (isNumber(format)) {
+            index = format;
+            format = undefined;
+        }
+
+        format = format || '';
+
+        if (index != null) {
+            return get$1(format, index, field, 'month');
+        }
+
+        var i,
+            out = [];
+        for (i = 0; i < 12; i++) {
+            out[i] = get$1(format, i, field, 'month');
+        }
+        return out;
+    }
+
+    // ()
+    // (5)
+    // (fmt, 5)
+    // (fmt)
+    // (true)
+    // (true, 5)
+    // (true, fmt, 5)
+    // (true, fmt)
+    function listWeekdaysImpl(localeSorted, format, index, field) {
+        if (typeof localeSorted === 'boolean') {
+            if (isNumber(format)) {
+                index = format;
+                format = undefined;
+            }
+
+            format = format || '';
+        } else {
+            format = localeSorted;
+            index = format;
+            localeSorted = false;
+
+            if (isNumber(format)) {
+                index = format;
+                format = undefined;
+            }
+
+            format = format || '';
+        }
+
+        var locale = getLocale(),
+            shift = localeSorted ? locale._week.dow : 0,
+            i,
+            out = [];
+
+        if (index != null) {
+            return get$1(format, (index + shift) % 7, field, 'day');
+        }
+
+        for (i = 0; i < 7; i++) {
+            out[i] = get$1(format, (i + shift) % 7, field, 'day');
+        }
+        return out;
+    }
+
+    function listMonths(format, index) {
+        return listMonthsImpl(format, index, 'months');
+    }
+
+    function listMonthsShort(format, index) {
+        return listMonthsImpl(format, index, 'monthsShort');
+    }
+
+    function listWeekdays(localeSorted, format, index) {
+        return listWeekdaysImpl(localeSorted, format, index, 'weekdays');
+    }
+
+    function listWeekdaysShort(localeSorted, format, index) {
+        return listWeekdaysImpl(localeSorted, format, index, 'weekdaysShort');
+    }
+
+    function listWeekdaysMin(localeSorted, format, index) {
+        return listWeekdaysImpl(localeSorted, format, index, 'weekdaysMin');
+    }
+
+    getSetGlobalLocale('en', {
+        eras: [
+            {
+                since: '0001-01-01',
+                until: +Infinity,
+                offset: 1,
+                name: 'Anno Domini',
+                narrow: 'AD',
+                abbr: 'AD',
+            },
+            {
+                since: '0000-12-31',
+                until: -Infinity,
+                offset: 1,
+                name: 'Before Christ',
+                narrow: 'BC',
+                abbr: 'BC',
+            },
+        ],
+        dayOfMonthOrdinalParse: /\d{1,2}(th|st|nd|rd)/,
+        ordinal: function (number) {
+            var b = number % 10,
+                output =
+                    toInt((number % 100) / 10) === 1
+                        ? 'th'
+                        : b === 1
+                        ? 'st'
+                        : b === 2
+                        ? 'nd'
+                        : b === 3
+                        ? 'rd'
+                        : 'th';
+            return number + output;
+        },
+    });
+
+    // Side effect imports
+
+    hooks.lang = deprecate(
+        'moment.lang is deprecated. Use moment.locale instead.',
+        getSetGlobalLocale
+    );
+    hooks.langData = deprecate(
+        'moment.langData is deprecated. Use moment.localeData instead.',
+        getLocale
+    );
+
+    var mathAbs = Math.abs;
+
+    function abs() {
+        var data = this._data;
+
+        this._milliseconds = mathAbs(this._milliseconds);
+        this._days = mathAbs(this._days);
+        this._months = mathAbs(this._months);
+
+        data.milliseconds = mathAbs(data.milliseconds);
+        data.seconds = mathAbs(data.seconds);
+        data.minutes = mathAbs(data.minutes);
+        data.hours = mathAbs(data.hours);
+        data.months = mathAbs(data.months);
+        data.years = mathAbs(data.years);
+
+        return this;
+    }
+
+    function addSubtract$1(duration, input, value, direction) {
+        var other = createDuration(input, value);
+
+        duration._milliseconds += direction * other._milliseconds;
+        duration._days += direction * other._days;
+        duration._months += direction * other._months;
+
+        return duration._bubble();
+    }
+
+    // supports only 2.0-style add(1, 's') or add(duration)
+    function add$1(input, value) {
+        return addSubtract$1(this, input, value, 1);
+    }
+
+    // supports only 2.0-style subtract(1, 's') or subtract(duration)
+    function subtract$1(input, value) {
+        return addSubtract$1(this, input, value, -1);
+    }
+
+    function absCeil(number) {
+        if (number < 0) {
+            return Math.floor(number);
+        } else {
+            return Math.ceil(number);
+        }
+    }
+
+    function bubble() {
+        var milliseconds = this._milliseconds,
+            days = this._days,
+            months = this._months,
+            data = this._data,
+            seconds,
+            minutes,
+            hours,
+            years,
+            monthsFromDays;
+
+        // if we have a mix of positive and negative values, bubble down first
+        // check: https://github.com/moment/moment/issues/2166
+        if (
+            !(
+                (milliseconds >= 0 && days >= 0 && months >= 0) ||
+                (milliseconds <= 0 && days <= 0 && months <= 0)
+            )
+        ) {
+            milliseconds += absCeil(monthsToDays(months) + days) * 864e5;
+            days = 0;
+            months = 0;
+        }
+
+        // The following code bubbles up values, see the tests for
+        // examples of what that means.
+        data.milliseconds = milliseconds % 1000;
+
+        seconds = absFloor(milliseconds / 1000);
+        data.seconds = seconds % 60;
+
+        minutes = absFloor(seconds / 60);
+        data.minutes = minutes % 60;
+
+        hours = absFloor(minutes / 60);
+        data.hours = hours % 24;
+
+        days += absFloor(hours / 24);
+
+        // convert days to months
+        monthsFromDays = absFloor(daysToMonths(days));
+        months += monthsFromDays;
+        days -= absCeil(monthsToDays(monthsFromDays));
+
+        // 12 months -> 1 year
+        years = absFloor(months / 12);
+        months %= 12;
+
+        data.days = days;
+        data.months = months;
+        data.years = years;
+
+        return this;
+    }
+
+    function daysToMonths(days) {
+        // 400 years have 146097 days (taking into account leap year rules)
+        // 400 years have 12 months === 4800
+        return (days * 4800) / 146097;
+    }
+
+    function monthsToDays(months) {
+        // the reverse of daysToMonths
+        return (months * 146097) / 4800;
+    }
+
+    function as(units) {
+        if (!this.isValid()) {
+            return NaN;
+        }
+        var days,
+            months,
+            milliseconds = this._milliseconds;
+
+        units = normalizeUnits(units);
+
+        if (units === 'month' || units === 'quarter' || units === 'year') {
+            days = this._days + milliseconds / 864e5;
+            months = this._months + daysToMonths(days);
+            switch (units) {
+                case 'month':
+                    return months;
+                case 'quarter':
+                    return months / 3;
+                case 'year':
+                    return months / 12;
+            }
+        } else {
+            // handle milliseconds separately because of floating point math errors (issue #1867)
+            days = this._days + Math.round(monthsToDays(this._months));
+            switch (units) {
+                case 'week':
+                    return days / 7 + milliseconds / 6048e5;
+                case 'day':
+                    return days + milliseconds / 864e5;
+                case 'hour':
+                    return days * 24 + milliseconds / 36e5;
+                case 'minute':
+                    return days * 1440 + milliseconds / 6e4;
+                case 'second':
+                    return days * 86400 + milliseconds / 1000;
+                // Math.floor prevents floating point math errors here
+                case 'millisecond':
+                    return Math.floor(days * 864e5) + milliseconds;
+                default:
+                    throw new Error('Unknown unit ' + units);
+            }
+        }
+    }
+
+    // TODO: Use this.as('ms')?
+    function valueOf$1() {
+        if (!this.isValid()) {
+            return NaN;
+        }
+        return (
+            this._milliseconds +
+            this._days * 864e5 +
+            (this._months % 12) * 2592e6 +
+            toInt(this._months / 12) * 31536e6
+        );
+    }
+
+    function makeAs(alias) {
+        return function () {
+            return this.as(alias);
+        };
+    }
+
+    var asMilliseconds = makeAs('ms'),
+        asSeconds = makeAs('s'),
+        asMinutes = makeAs('m'),
+        asHours = makeAs('h'),
+        asDays = makeAs('d'),
+        asWeeks = makeAs('w'),
+        asMonths = makeAs('M'),
+        asQuarters = makeAs('Q'),
+        asYears = makeAs('y');
+
+    function clone$1() {
+        return createDuration(this);
+    }
+
+    function get$2(units) {
+        units = normalizeUnits(units);
+        return this.isValid() ? this[units + 's']() : NaN;
+    }
+
+    function makeGetter(name) {
+        return function () {
+            return this.isValid() ? this._data[name] : NaN;
+        };
+    }
+
+    var milliseconds = makeGetter('milliseconds'),
+        seconds = makeGetter('seconds'),
+        minutes = makeGetter('minutes'),
+        hours = makeGetter('hours'),
+        days = makeGetter('days'),
+        months = makeGetter('months'),
+        years = makeGetter('years');
+
+    function weeks() {
+        return absFloor(this.days() / 7);
+    }
+
+    var round = Math.round,
+        thresholds = {
+            ss: 44, // a few seconds to seconds
+            s: 45, // seconds to minute
+            m: 45, // minutes to hour
+            h: 22, // hours to day
+            d: 26, // days to month/week
+            w: null, // weeks to month
+            M: 11, // months to year
+        };
+
+    // helper function for moment.fn.from, moment.fn.fromNow, and moment.duration.fn.humanize
+    function substituteTimeAgo(string, number, withoutSuffix, isFuture, locale) {
+        return locale.relativeTime(number || 1, !!withoutSuffix, string, isFuture);
+    }
+
+    function relativeTime$1(posNegDuration, withoutSuffix, thresholds, locale) {
+        var duration = createDuration(posNegDuration).abs(),
+            seconds = round(duration.as('s')),
+            minutes = round(duration.as('m')),
+            hours = round(duration.as('h')),
+            days = round(duration.as('d')),
+            months = round(duration.as('M')),
+            weeks = round(duration.as('w')),
+            years = round(duration.as('y')),
+            a =
+                (seconds <= thresholds.ss && ['s', seconds]) ||
+                (seconds < thresholds.s && ['ss', seconds]) ||
+                (minutes <= 1 && ['m']) ||
+                (minutes < thresholds.m && ['mm', minutes]) ||
+                (hours <= 1 && ['h']) ||
+                (hours < thresholds.h && ['hh', hours]) ||
+                (days <= 1 && ['d']) ||
+                (days < thresholds.d && ['dd', days]);
+
+        if (thresholds.w != null) {
+            a =
+                a ||
+                (weeks <= 1 && ['w']) ||
+                (weeks < thresholds.w && ['ww', weeks]);
+        }
+        a = a ||
+            (months <= 1 && ['M']) ||
+            (months < thresholds.M && ['MM', months]) ||
+            (years <= 1 && ['y']) || ['yy', years];
+
+        a[2] = withoutSuffix;
+        a[3] = +posNegDuration > 0;
+        a[4] = locale;
+        return substituteTimeAgo.apply(null, a);
+    }
+
+    // This function allows you to set the rounding function for relative time strings
+    function getSetRelativeTimeRounding(roundingFunction) {
+        if (roundingFunction === undefined) {
+            return round;
+        }
+        if (typeof roundingFunction === 'function') {
+            round = roundingFunction;
+            return true;
+        }
+        return false;
+    }
+
+    // This function allows you to set a threshold for relative time strings
+    function getSetRelativeTimeThreshold(threshold, limit) {
+        if (thresholds[threshold] === undefined) {
+            return false;
+        }
+        if (limit === undefined) {
+            return thresholds[threshold];
+        }
+        thresholds[threshold] = limit;
+        if (threshold === 's') {
+            thresholds.ss = limit - 1;
+        }
+        return true;
+    }
+
+    function humanize(argWithSuffix, argThresholds) {
+        if (!this.isValid()) {
+            return this.localeData().invalidDate();
+        }
+
+        var withSuffix = false,
+            th = thresholds,
+            locale,
+            output;
+
+        if (typeof argWithSuffix === 'object') {
+            argThresholds = argWithSuffix;
+            argWithSuffix = false;
+        }
+        if (typeof argWithSuffix === 'boolean') {
+            withSuffix = argWithSuffix;
+        }
+        if (typeof argThresholds === 'object') {
+            th = Object.assign({}, thresholds, argThresholds);
+            if (argThresholds.s != null && argThresholds.ss == null) {
+                th.ss = argThresholds.s - 1;
+            }
+        }
+
+        locale = this.localeData();
+        output = relativeTime$1(this, !withSuffix, th, locale);
+
+        if (withSuffix) {
+            output = locale.pastFuture(+this, output);
+        }
+
+        return locale.postformat(output);
+    }
+
+    var abs$1 = Math.abs;
+
+    function sign(x) {
+        return (x > 0) - (x < 0) || +x;
+    }
+
+    function toISOString$1() {
+        // for ISO strings we do not use the normal bubbling rules:
+        //  * milliseconds bubble up until they become hours
+        //  * days do not bubble at all
+        //  * months bubble up until they become years
+        // This is because there is no context-free conversion between hours and days
+        // (think of clock changes)
+        // and also not between days and months (28-31 days per month)
+        if (!this.isValid()) {
+            return this.localeData().invalidDate();
+        }
+
+        var seconds = abs$1(this._milliseconds) / 1000,
+            days = abs$1(this._days),
+            months = abs$1(this._months),
+            minutes,
+            hours,
+            years,
+            s,
+            total = this.asSeconds(),
+            totalSign,
+            ymSign,
+            daysSign,
+            hmsSign;
+
+        if (!total) {
+            // this is the same as C#'s (Noda) and python (isodate)...
+            // but not other JS (goog.date)
+            return 'P0D';
+        }
+
+        // 3600 seconds -> 60 minutes -> 1 hour
+        minutes = absFloor(seconds / 60);
+        hours = absFloor(minutes / 60);
+        seconds %= 60;
+        minutes %= 60;
+
+        // 12 months -> 1 year
+        years = absFloor(months / 12);
+        months %= 12;
+
+        // inspired by https://github.com/dordille/moment-isoduration/blob/master/moment.isoduration.js
+        s = seconds ? seconds.toFixed(3).replace(/\.?0+$/, '') : '';
+
+        totalSign = total < 0 ? '-' : '';
+        ymSign = sign(this._months) !== sign(total) ? '-' : '';
+        daysSign = sign(this._days) !== sign(total) ? '-' : '';
+        hmsSign = sign(this._milliseconds) !== sign(total) ? '-' : '';
+
+        return (
+            totalSign +
+            'P' +
+            (years ? ymSign + years + 'Y' : '') +
+            (months ? ymSign + months + 'M' : '') +
+            (days ? daysSign + days + 'D' : '') +
+            (hours || minutes || seconds ? 'T' : '') +
+            (hours ? hmsSign + hours + 'H' : '') +
+            (minutes ? hmsSign + minutes + 'M' : '') +
+            (seconds ? hmsSign + s + 'S' : '')
+        );
+    }
+
+    var proto$2 = Duration.prototype;
+
+    proto$2.isValid = isValid$1;
+    proto$2.abs = abs;
+    proto$2.add = add$1;
+    proto$2.subtract = subtract$1;
+    proto$2.as = as;
+    proto$2.asMilliseconds = asMilliseconds;
+    proto$2.asSeconds = asSeconds;
+    proto$2.asMinutes = asMinutes;
+    proto$2.asHours = asHours;
+    proto$2.asDays = asDays;
+    proto$2.asWeeks = asWeeks;
+    proto$2.asMonths = asMonths;
+    proto$2.asQuarters = asQuarters;
+    proto$2.asYears = asYears;
+    proto$2.valueOf = valueOf$1;
+    proto$2._bubble = bubble;
+    proto$2.clone = clone$1;
+    proto$2.get = get$2;
+    proto$2.milliseconds = milliseconds;
+    proto$2.seconds = seconds;
+    proto$2.minutes = minutes;
+    proto$2.hours = hours;
+    proto$2.days = days;
+    proto$2.weeks = weeks;
+    proto$2.months = months;
+    proto$2.years = years;
+    proto$2.humanize = humanize;
+    proto$2.toISOString = toISOString$1;
+    proto$2.toString = toISOString$1;
+    proto$2.toJSON = toISOString$1;
+    proto$2.locale = locale;
+    proto$2.localeData = localeData;
+
+    proto$2.toIsoString = deprecate(
+        'toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)',
+        toISOString$1
+    );
+    proto$2.lang = lang;
+
+    // FORMATTING
+
+    addFormatToken('X', 0, 0, 'unix');
+    addFormatToken('x', 0, 0, 'valueOf');
+
+    // PARSING
+
+    addRegexToken('x', matchSigned);
+    addRegexToken('X', matchTimestamp);
+    addParseToken('X', function (input, array, config) {
+        config._d = new Date(parseFloat(input) * 1000);
+    });
+    addParseToken('x', function (input, array, config) {
+        config._d = new Date(toInt(input));
+    });
+
+    //! moment.js
+
+    hooks.version = '2.28.0';
+
+    setHookCallback(createLocal);
+
+    hooks.fn = proto;
+    hooks.min = min;
+    hooks.max = max;
+    hooks.now = now;
+    hooks.utc = createUTC;
+    hooks.unix = createUnix;
+    hooks.months = listMonths;
+    hooks.isDate = isDate;
+    hooks.locale = getSetGlobalLocale;
+    hooks.invalid = createInvalid;
+    hooks.duration = createDuration;
+    hooks.isMoment = isMoment;
+    hooks.weekdays = listWeekdays;
+    hooks.parseZone = createInZone;
+    hooks.localeData = getLocale;
+    hooks.isDuration = isDuration;
+    hooks.monthsShort = listMonthsShort;
+    hooks.weekdaysMin = listWeekdaysMin;
+    hooks.defineLocale = defineLocale;
+    hooks.updateLocale = updateLocale;
+    hooks.locales = listLocales;
+    hooks.weekdaysShort = listWeekdaysShort;
+    hooks.normalizeUnits = normalizeUnits;
+    hooks.relativeTimeRounding = getSetRelativeTimeRounding;
+    hooks.relativeTimeThreshold = getSetRelativeTimeThreshold;
+    hooks.calendarFormat = getCalendarFormat;
+    hooks.prototype = proto;
+
+    // currently HTML5 input type only supports 24-hour formats
+    hooks.HTML5_FMT = {
+        DATETIME_LOCAL: 'YYYY-MM-DDTHH:mm', // <input type="datetime-local" />
+        DATETIME_LOCAL_SECONDS: 'YYYY-MM-DDTHH:mm:ss', // <input type="datetime-local" step="1" />
+        DATETIME_LOCAL_MS: 'YYYY-MM-DDTHH:mm:ss.SSS', // <input type="datetime-local" step="0.001" />
+        DATE: 'YYYY-MM-DD', // <input type="date" />
+        TIME: 'HH:mm', // <input type="time" />
+        TIME_SECONDS: 'HH:mm:ss', // <input type="time" step="1" />
+        TIME_MS: 'HH:mm:ss.SSS', // <input type="time" step="0.001" />
+        WEEK: 'GGGG-[W]WW', // <input type="week" />
+        MONTH: 'YYYY-MM', // <input type="month" />
+    };
+
+    //! moment.js locale configuration
+
+    hooks.defineLocale('af', {
+        months: 'Januarie_Februarie_Maart_April_Mei_Junie_Julie_Augustus_September_Oktober_November_Desember'.split(
+            '_'
+        ),
+        monthsShort: 'Jan_Feb_Mrt_Apr_Mei_Jun_Jul_Aug_Sep_Okt_Nov_Des'.split('_'),
+        weekdays: 'Sondag_Maandag_Dinsdag_Woensdag_Donderdag_Vrydag_Saterdag'.split(
+            '_'
+        ),
+        weekdaysShort: 'Son_Maa_Din_Woe_Don_Vry_Sat'.split('_'),
+        weekdaysMin: 'So_Ma_Di_Wo_Do_Vr_Sa'.split('_'),
+        meridiemParse: /vm|nm/i,
+        isPM: function (input) {
+            return /^nm$/i.test(input);
+        },
+        meridiem: function (hours, minutes, isLower) {
+            if (hours < 12) {
+                return isLower ? 'vm' : 'VM';
+            } else {
+                return isLower ? 'nm' : 'NM';
+            }
+        },
+        longDateFormat: {
+            LT: 'HH:mm',
+            LTS: 'HH:mm:ss',
+            L: 'DD/MM/YYYY',
+            LL: 'D MMMM YYYY',
+            LLL: 'D MMMM YYYY HH:mm',
+            LLLL: 'dddd, D MMMM YYYY HH:mm',
+        },
+        calendar: {
+            sameDay: '[Vandag om] LT',
+            nextDay: '[Môre om] LT',
+            nextWeek: 'dddd [om] LT',
+            lastDay: '[Gister om] LT',
+            lastWeek: '[Laas] dddd [om] LT',
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: 'oor %s',
+            past: '%s gelede',
+            s: "'n paar sekondes",
+            ss: '%d sekondes',
+            m: "'n minuut",
+            mm: '%d minute',
+            h: "'n uur",
+            hh: '%d ure',
+            d: "'n dag",
+            dd: '%d dae',
+            M: "'n maand",
+            MM: '%d maande',
+            y: "'n jaar",
+            yy: '%d jaar',
+        },
+        dayOfMonthOrdinalParse: /\d{1,2}(ste|de)/,
+        ordinal: function (number) {
+            return (
+                number +
+                (number === 1 || number === 8 || number >= 20 ? 'ste' : 'de')
+            ); // Thanks to Joris Röling : https://github.com/jjupiter
+        },
+        week: {
+            dow: 1, // Maandag is die eerste dag van die week.
+            doy: 4, // Die week wat die 4de Januarie bevat is die eerste week van die jaar.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    var pluralForm = function (n) {
+            return n === 0
+                ? 0
+                : n === 1
+                ? 1
+                : n === 2
+                ? 2
+                : n % 100 >= 3 && n % 100 <= 10
+                ? 3
+                : n % 100 >= 11
+                ? 4
+                : 5;
+        },
+        plurals = {
+            s: [
+                'أقل من ثانية',
+                'ثانية واحدة',
+                ['ثانيتان', 'ثانيتين'],
+                '%d ثوان',
+                '%d ثانية',
+                '%d ثانية',
+            ],
+            m: [
+                'أقل من دقيقة',
+                'دقيقة واحدة',
+                ['دقيقتان', 'دقيقتين'],
+                '%d دقائق',
+                '%d دقيقة',
+                '%d دقيقة',
+            ],
+            h: [
+                'أقل من ساعة',
+                'ساعة واحدة',
+                ['ساعتان', 'ساعتين'],
+                '%d ساعات',
+                '%d ساعة',
+                '%d ساعة',
+            ],
+            d: [
+                'أقل من يوم',
+                'يوم واحد',
+                ['يومان', 'يومين'],
+                '%d أيام',
+                '%d يومًا',
+                '%d يوم',
+            ],
+            M: [
+                'أقل من شهر',
+                'شهر واحد',
+                ['شهران', 'شهرين'],
+                '%d أشهر',
+                '%d شهرا',
+                '%d شهر',
+            ],
+            y: [
+                'أقل من عام',
+                'عام واحد',
+                ['عامان', 'عامين'],
+                '%d أعوام',
+                '%d عامًا',
+                '%d عام',
+            ],
+        },
+        pluralize = function (u) {
+            return function (number, withoutSuffix, string, isFuture) {
+                var f = pluralForm(number),
+                    str = plurals[u][pluralForm(number)];
+                if (f === 2) {
+                    str = str[withoutSuffix ? 0 : 1];
+                }
+                return str.replace(/%d/i, number);
+            };
+        },
+        months$1 = [
+            'جانفي',
+            'فيفري',
+            'مارس',
+            'أفريل',
+            'ماي',
+            'جوان',
+            'جويلية',
+            'أوت',
+            'سبتمبر',
+            'أكتوبر',
+            'نوفمبر',
+            'ديسمبر',
+        ];
+
+    hooks.defineLocale('ar-dz', {
+        months: months$1,
+        monthsShort: months$1,
+        weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),
+        weekdaysShort: 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),
+        weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'),
+        weekdaysParseExact: true,
+        longDateFormat: {
+            LT: 'HH:mm',
+            LTS: 'HH:mm:ss',
+            L: 'D/\u200FM/\u200FYYYY',
+            LL: 'D MMMM YYYY',
+            LLL: 'D MMMM YYYY HH:mm',
+            LLLL: 'dddd D MMMM YYYY HH:mm',
+        },
+        meridiemParse: /ص|م/,
+        isPM: function (input) {
+            return 'م' === input;
+        },
+        meridiem: function (hour, minute, isLower) {
+            if (hour < 12) {
+                return 'ص';
+            } else {
+                return 'م';
+            }
+        },
+        calendar: {
+            sameDay: '[اليوم عند الساعة] LT',
+            nextDay: '[غدًا عند الساعة] LT',
+            nextWeek: 'dddd [عند الساعة] LT',
+            lastDay: '[أمس عند الساعة] LT',
+            lastWeek: 'dddd [عند الساعة] LT',
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: 'بعد %s',
+            past: 'منذ %s',
+            s: pluralize('s'),
+            ss: pluralize('s'),
+            m: pluralize('m'),
+            mm: pluralize('m'),
+            h: pluralize('h'),
+            hh: pluralize('h'),
+            d: pluralize('d'),
+            dd: pluralize('d'),
+            M: pluralize('M'),
+            MM: pluralize('M'),
+            y: pluralize('y'),
+            yy: pluralize('y'),
+        },
+        postformat: function (string) {
+            return string.replace(/,/g, '،');
+        },
+        week: {
+            dow: 0, // Sunday is the first day of the week.
+            doy: 4, // The week that contains Jan 4th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    hooks.defineLocale('ar-kw', {
+        months: 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split(
+            '_'
+        ),
+        monthsShort: 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split(
+            '_'
+        ),
+        weekdays: 'الأحد_الإتنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),
+        weekdaysShort: 'احد_اتنين_ثلاثاء_اربعاء_خميس_جمعة_سبت'.split('_'),
+        weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'),
+        weekdaysParseExact: true,
+        longDateFormat: {
+            LT: 'HH:mm',
+            LTS: 'HH:mm:ss',
+            L: 'DD/MM/YYYY',
+            LL: 'D MMMM YYYY',
+            LLL: 'D MMMM YYYY HH:mm',
+            LLLL: 'dddd D MMMM YYYY HH:mm',
+        },
+        calendar: {
+            sameDay: '[اليوم على الساعة] LT',
+            nextDay: '[غدا على الساعة] LT',
+            nextWeek: 'dddd [على الساعة] LT',
+            lastDay: '[أمس على الساعة] LT',
+            lastWeek: 'dddd [على الساعة] LT',
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: 'في %s',
+            past: 'منذ %s',
+            s: 'ثوان',
+            ss: '%d ثانية',
+            m: 'دقيقة',
+            mm: '%d دقائق',
+            h: 'ساعة',
+            hh: '%d ساعات',
+            d: 'يوم',
+            dd: '%d أيام',
+            M: 'شهر',
+            MM: '%d أشهر',
+            y: 'سنة',
+            yy: '%d سنوات',
+        },
+        week: {
+            dow: 0, // Sunday is the first day of the week.
+            doy: 12, // The week that contains Jan 12th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    var symbolMap = {
+            '1': '1',
+            '2': '2',
+            '3': '3',
+            '4': '4',
+            '5': '5',
+            '6': '6',
+            '7': '7',
+            '8': '8',
+            '9': '9',
+            '0': '0',
+        },
+        pluralForm$1 = function (n) {
+            return n === 0
+                ? 0
+                : n === 1
+                ? 1
+                : n === 2
+                ? 2
+                : n % 100 >= 3 && n % 100 <= 10
+                ? 3
+                : n % 100 >= 11
+                ? 4
+                : 5;
+        },
+        plurals$1 = {
+            s: [
+                'أقل من ثانية',
+                'ثانية واحدة',
+                ['ثانيتان', 'ثانيتين'],
+                '%d ثوان',
+                '%d ثانية',
+                '%d ثانية',
+            ],
+            m: [
+                'أقل من دقيقة',
+                'دقيقة واحدة',
+                ['دقيقتان', 'دقيقتين'],
+                '%d دقائق',
+                '%d دقيقة',
+                '%d دقيقة',
+            ],
+            h: [
+                'أقل من ساعة',
+                'ساعة واحدة',
+                ['ساعتان', 'ساعتين'],
+                '%d ساعات',
+                '%d ساعة',
+                '%d ساعة',
+            ],
+            d: [
+                'أقل من يوم',
+                'يوم واحد',
+                ['يومان', 'يومين'],
+                '%d أيام',
+                '%d يومًا',
+                '%d يوم',
+            ],
+            M: [
+                'أقل من شهر',
+                'شهر واحد',
+                ['شهران', 'شهرين'],
+                '%d أشهر',
+                '%d شهرا',
+                '%d شهر',
+            ],
+            y: [
+                'أقل من عام',
+                'عام واحد',
+                ['عامان', 'عامين'],
+                '%d أعوام',
+                '%d عامًا',
+                '%d عام',
+            ],
+        },
+        pluralize$1 = function (u) {
+            return function (number, withoutSuffix, string, isFuture) {
+                var f = pluralForm$1(number),
+                    str = plurals$1[u][pluralForm$1(number)];
+                if (f === 2) {
+                    str = str[withoutSuffix ? 0 : 1];
+                }
+                return str.replace(/%d/i, number);
+            };
+        },
+        months$2 = [
+            'يناير',
+            'فبراير',
+            'مارس',
+            'أبريل',
+            'مايو',
+            'يونيو',
+            'يوليو',
+            'أغسطس',
+            'سبتمبر',
+            'أكتوبر',
+            'نوفمبر',
+            'ديسمبر',
+        ];
+
+    hooks.defineLocale('ar-ly', {
+        months: months$2,
+        monthsShort: months$2,
+        weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),
+        weekdaysShort: 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),
+        weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'),
+        weekdaysParseExact: true,
+        longDateFormat: {
+            LT: 'HH:mm',
+            LTS: 'HH:mm:ss',
+            L: 'D/\u200FM/\u200FYYYY',
+            LL: 'D MMMM YYYY',
+            LLL: 'D MMMM YYYY HH:mm',
+            LLLL: 'dddd D MMMM YYYY HH:mm',
+        },
+        meridiemParse: /ص|م/,
+        isPM: function (input) {
+            return 'م' === input;
+        },
+        meridiem: function (hour, minute, isLower) {
+            if (hour < 12) {
+                return 'ص';
+            } else {
+                return 'م';
+            }
+        },
+        calendar: {
+            sameDay: '[اليوم عند الساعة] LT',
+            nextDay: '[غدًا عند الساعة] LT',
+            nextWeek: 'dddd [عند الساعة] LT',
+            lastDay: '[أمس عند الساعة] LT',
+            lastWeek: 'dddd [عند الساعة] LT',
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: 'بعد %s',
+            past: 'منذ %s',
+            s: pluralize$1('s'),
+            ss: pluralize$1('s'),
+            m: pluralize$1('m'),
+            mm: pluralize$1('m'),
+            h: pluralize$1('h'),
+            hh: pluralize$1('h'),
+            d: pluralize$1('d'),
+            dd: pluralize$1('d'),
+            M: pluralize$1('M'),
+            MM: pluralize$1('M'),
+            y: pluralize$1('y'),
+            yy: pluralize$1('y'),
+        },
+        preparse: function (string) {
+            return string.replace(/،/g, ',');
+        },
+        postformat: function (string) {
+            return string
+                .replace(/\d/g, function (match) {
+                    return symbolMap[match];
+                })
+                .replace(/,/g, '،');
+        },
+        week: {
+            dow: 6, // Saturday is the first day of the week.
+            doy: 12, // The week that contains Jan 12th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    hooks.defineLocale('ar-ma', {
+        months: 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split(
+            '_'
+        ),
+        monthsShort: 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split(
+            '_'
+        ),
+        weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),
+        weekdaysShort: 'احد_اثنين_ثلاثاء_اربعاء_خميس_جمعة_سبت'.split('_'),
+        weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'),
+        weekdaysParseExact: true,
+        longDateFormat: {
+            LT: 'HH:mm',
+            LTS: 'HH:mm:ss',
+            L: 'DD/MM/YYYY',
+            LL: 'D MMMM YYYY',
+            LLL: 'D MMMM YYYY HH:mm',
+            LLLL: 'dddd D MMMM YYYY HH:mm',
+        },
+        calendar: {
+            sameDay: '[اليوم على الساعة] LT',
+            nextDay: '[غدا على الساعة] LT',
+            nextWeek: 'dddd [على الساعة] LT',
+            lastDay: '[أمس على الساعة] LT',
+            lastWeek: 'dddd [على الساعة] LT',
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: 'في %s',
+            past: 'منذ %s',
+            s: 'ثوان',
+            ss: '%d ثانية',
+            m: 'دقيقة',
+            mm: '%d دقائق',
+            h: 'ساعة',
+            hh: '%d ساعات',
+            d: 'يوم',
+            dd: '%d أيام',
+            M: 'شهر',
+            MM: '%d أشهر',
+            y: 'سنة',
+            yy: '%d سنوات',
+        },
+        week: {
+            dow: 6, // Saturday is the first day of the week.
+            doy: 12, // The week that contains Jan 12th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    var symbolMap$1 = {
+            '1': '١',
+            '2': '٢',
+            '3': '٣',
+            '4': '٤',
+            '5': '٥',
+            '6': '٦',
+            '7': '٧',
+            '8': '٨',
+            '9': '٩',
+            '0': '٠',
+        },
+        numberMap = {
+            '١': '1',
+            '٢': '2',
+            '٣': '3',
+            '٤': '4',
+            '٥': '5',
+            '٦': '6',
+            '٧': '7',
+            '٨': '8',
+            '٩': '9',
+            '٠': '0',
+        };
+
+    hooks.defineLocale('ar-sa', {
+        months: 'يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split(
+            '_'
+        ),
+        monthsShort: 'يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split(
+            '_'
+        ),
+        weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),
+        weekdaysShort: 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),
+        weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'),
+        weekdaysParseExact: true,
+        longDateFormat: {
+            LT: 'HH:mm',
+            LTS: 'HH:mm:ss',
+            L: 'DD/MM/YYYY',
+            LL: 'D MMMM YYYY',
+            LLL: 'D MMMM YYYY HH:mm',
+            LLLL: 'dddd D MMMM YYYY HH:mm',
+        },
+        meridiemParse: /ص|م/,
+        isPM: function (input) {
+            return 'م' === input;
+        },
+        meridiem: function (hour, minute, isLower) {
+            if (hour < 12) {
+                return 'ص';
+            } else {
+                return 'م';
+            }
+        },
+        calendar: {
+            sameDay: '[اليوم على الساعة] LT',
+            nextDay: '[غدا على الساعة] LT',
+            nextWeek: 'dddd [على الساعة] LT',
+            lastDay: '[أمس على الساعة] LT',
+            lastWeek: 'dddd [على الساعة] LT',
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: 'في %s',
+            past: 'منذ %s',
+            s: 'ثوان',
+            ss: '%d ثانية',
+            m: 'دقيقة',
+            mm: '%d دقائق',
+            h: 'ساعة',
+            hh: '%d ساعات',
+            d: 'يوم',
+            dd: '%d أيام',
+            M: 'شهر',
+            MM: '%d أشهر',
+            y: 'سنة',
+            yy: '%d سنوات',
+        },
+        preparse: function (string) {
+            return string
+                .replace(/[١٢٣٤٥٦٧٨٩٠]/g, function (match) {
+                    return numberMap[match];
+                })
+                .replace(/،/g, ',');
+        },
+        postformat: function (string) {
+            return string
+                .replace(/\d/g, function (match) {
+                    return symbolMap$1[match];
+                })
+                .replace(/,/g, '،');
+        },
+        week: {
+            dow: 0, // Sunday is the first day of the week.
+            doy: 6, // The week that contains Jan 6th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    hooks.defineLocale('ar-tn', {
+        months: 'جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split(
+            '_'
+        ),
+        monthsShort: 'جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split(
+            '_'
+        ),
+        weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),
+        weekdaysShort: 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),
+        weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'),
+        weekdaysParseExact: true,
+        longDateFormat: {
+            LT: 'HH:mm',
+            LTS: 'HH:mm:ss',
+            L: 'DD/MM/YYYY',
+            LL: 'D MMMM YYYY',
+            LLL: 'D MMMM YYYY HH:mm',
+            LLLL: 'dddd D MMMM YYYY HH:mm',
+        },
+        calendar: {
+            sameDay: '[اليوم على الساعة] LT',
+            nextDay: '[غدا على الساعة] LT',
+            nextWeek: 'dddd [على الساعة] LT',
+            lastDay: '[أمس على الساعة] LT',
+            lastWeek: 'dddd [على الساعة] LT',
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: 'في %s',
+            past: 'منذ %s',
+            s: 'ثوان',
+            ss: '%d ثانية',
+            m: 'دقيقة',
+            mm: '%d دقائق',
+            h: 'ساعة',
+            hh: '%d ساعات',
+            d: 'يوم',
+            dd: '%d أيام',
+            M: 'شهر',
+            MM: '%d أشهر',
+            y: 'سنة',
+            yy: '%d سنوات',
+        },
+        week: {
+            dow: 1, // Monday is the first day of the week.
+            doy: 4, // The week that contains Jan 4th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    var symbolMap$2 = {
+            '1': '١',
+            '2': '٢',
+            '3': '٣',
+            '4': '٤',
+            '5': '٥',
+            '6': '٦',
+            '7': '٧',
+            '8': '٨',
+            '9': '٩',
+            '0': '٠',
+        },
+        numberMap$1 = {
+            '١': '1',
+            '٢': '2',
+            '٣': '3',
+            '٤': '4',
+            '٥': '5',
+            '٦': '6',
+            '٧': '7',
+            '٨': '8',
+            '٩': '9',
+            '٠': '0',
+        },
+        pluralForm$2 = function (n) {
+            return n === 0
+                ? 0
+                : n === 1
+                ? 1
+                : n === 2
+                ? 2
+                : n % 100 >= 3 && n % 100 <= 10
+                ? 3
+                : n % 100 >= 11
+                ? 4
+                : 5;
+        },
+        plurals$2 = {
+            s: [
+                'أقل من ثانية',
+                'ثانية واحدة',
+                ['ثانيتان', 'ثانيتين'],
+                '%d ثوان',
+                '%d ثانية',
+                '%d ثانية',
+            ],
+            m: [
+                'أقل من دقيقة',
+                'دقيقة واحدة',
+                ['دقيقتان', 'دقيقتين'],
+                '%d دقائق',
+                '%d دقيقة',
+                '%d دقيقة',
+            ],
+            h: [
+                'أقل من ساعة',
+                'ساعة واحدة',
+                ['ساعتان', 'ساعتين'],
+                '%d ساعات',
+                '%d ساعة',
+                '%d ساعة',
+            ],
+            d: [
+                'أقل من يوم',
+                'يوم واحد',
+                ['يومان', 'يومين'],
+                '%d أيام',
+                '%d يومًا',
+                '%d يوم',
+            ],
+            M: [
+                'أقل من شهر',
+                'شهر واحد',
+                ['شهران', 'شهرين'],
+                '%d أشهر',
+                '%d شهرا',
+                '%d شهر',
+            ],
+            y: [
+                'أقل من عام',
+                'عام واحد',
+                ['عامان', 'عامين'],
+                '%d أعوام',
+                '%d عامًا',
+                '%d عام',
+            ],
+        },
+        pluralize$2 = function (u) {
+            return function (number, withoutSuffix, string, isFuture) {
+                var f = pluralForm$2(number),
+                    str = plurals$2[u][pluralForm$2(number)];
+                if (f === 2) {
+                    str = str[withoutSuffix ? 0 : 1];
+                }
+                return str.replace(/%d/i, number);
+            };
+        },
+        months$3 = [
+            'يناير',
+            'فبراير',
+            'مارس',
+            'أبريل',
+            'مايو',
+            'يونيو',
+            'يوليو',
+            'أغسطس',
+            'سبتمبر',
+            'أكتوبر',
+            'نوفمبر',
+            'ديسمبر',
+        ];
+
+    hooks.defineLocale('ar', {
+        months: months$3,
+        monthsShort: months$3,
+        weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),
+        weekdaysShort: 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),
+        weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'),
+        weekdaysParseExact: true,
+        longDateFormat: {
+            LT: 'HH:mm',
+            LTS: 'HH:mm:ss',
+            L: 'D/\u200FM/\u200FYYYY',
+            LL: 'D MMMM YYYY',
+            LLL: 'D MMMM YYYY HH:mm',
+            LLLL: 'dddd D MMMM YYYY HH:mm',
+        },
+        meridiemParse: /ص|م/,
+        isPM: function (input) {
+            return 'م' === input;
+        },
+        meridiem: function (hour, minute, isLower) {
+            if (hour < 12) {
+                return 'ص';
+            } else {
+                return 'م';
+            }
+        },
+        calendar: {
+            sameDay: '[اليوم عند الساعة] LT',
+            nextDay: '[غدًا عند الساعة] LT',
+            nextWeek: 'dddd [عند الساعة] LT',
+            lastDay: '[أمس عند الساعة] LT',
+            lastWeek: 'dddd [عند الساعة] LT',
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: 'بعد %s',
+            past: 'منذ %s',
+            s: pluralize$2('s'),
+            ss: pluralize$2('s'),
+            m: pluralize$2('m'),
+            mm: pluralize$2('m'),
+            h: pluralize$2('h'),
+            hh: pluralize$2('h'),
+            d: pluralize$2('d'),
+            dd: pluralize$2('d'),
+            M: pluralize$2('M'),
+            MM: pluralize$2('M'),
+            y: pluralize$2('y'),
+            yy: pluralize$2('y'),
+        },
+        preparse: function (string) {
+            return string
+                .replace(/[١٢٣٤٥٦٧٨٩٠]/g, function (match) {
+                    return numberMap$1[match];
+                })
+                .replace(/،/g, ',');
+        },
+        postformat: function (string) {
+            return string
+                .replace(/\d/g, function (match) {
+                    return symbolMap$2[match];
+                })
+                .replace(/,/g, '،');
+        },
+        week: {
+            dow: 6, // Saturday is the first day of the week.
+            doy: 12, // The week that contains Jan 12th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    var suffixes = {
+        1: '-inci',
+        5: '-inci',
+        8: '-inci',
+        70: '-inci',
+        80: '-inci',
+        2: '-nci',
+        7: '-nci',
+        20: '-nci',
+        50: '-nci',
+        3: '-üncü',
+        4: '-üncü',
+        100: '-üncü',
+        6: '-ncı',
+        9: '-uncu',
+        10: '-uncu',
+        30: '-uncu',
+        60: '-ıncı',
+        90: '-ıncı',
+    };
+
+    hooks.defineLocale('az', {
+        months: 'yanvar_fevral_mart_aprel_may_iyun_iyul_avqust_sentyabr_oktyabr_noyabr_dekabr'.split(
+            '_'
+        ),
+        monthsShort: 'yan_fev_mar_apr_may_iyn_iyl_avq_sen_okt_noy_dek'.split('_'),
+        weekdays: 'Bazar_Bazar ertəsi_Çərşənbə axşamı_Çərşənbə_Cümə axşamı_Cümə_Şənbə'.split(
+            '_'
+        ),
+        weekdaysShort: 'Baz_BzE_ÇAx_Çər_CAx_Cüm_Şən'.split('_'),
+        weekdaysMin: 'Bz_BE_ÇA_Çə_CA_Cü_Şə'.split('_'),
+        weekdaysParseExact: true,
+        longDateFormat: {
+            LT: 'HH:mm',
+            LTS: 'HH:mm:ss',
+            L: 'DD.MM.YYYY',
+            LL: 'D MMMM YYYY',
+            LLL: 'D MMMM YYYY HH:mm',
+            LLLL: 'dddd, D MMMM YYYY HH:mm',
+        },
+        calendar: {
+            sameDay: '[bugün saat] LT',
+            nextDay: '[sabah saat] LT',
+            nextWeek: '[gələn həftə] dddd [saat] LT',
+            lastDay: '[dünən] LT',
+            lastWeek: '[keçən həftə] dddd [saat] LT',
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: '%s sonra',
+            past: '%s əvvəl',
+            s: 'bir neçə saniyə',
+            ss: '%d saniyə',
+            m: 'bir dəqiqə',
+            mm: '%d dəqiqə',
+            h: 'bir saat',
+            hh: '%d saat',
+            d: 'bir gün',
+            dd: '%d gün',
+            M: 'bir ay',
+            MM: '%d ay',
+            y: 'bir il',
+            yy: '%d il',
+        },
+        meridiemParse: /gecə|səhər|gündüz|axşam/,
+        isPM: function (input) {
+            return /^(gündüz|axşam)$/.test(input);
+        },
+        meridiem: function (hour, minute, isLower) {
+            if (hour < 4) {
+                return 'gecə';
+            } else if (hour < 12) {
+                return 'səhər';
+            } else if (hour < 17) {
+                return 'gündüz';
+            } else {
+                return 'axşam';
+            }
+        },
+        dayOfMonthOrdinalParse: /\d{1,2}-(ıncı|inci|nci|üncü|ncı|uncu)/,
+        ordinal: function (number) {
+            if (number === 0) {
+                // special case for zero
+                return number + '-ıncı';
+            }
+            var a = number % 10,
+                b = (number % 100) - a,
+                c = number >= 100 ? 100 : null;
+            return number + (suffixes[a] || suffixes[b] || suffixes[c]);
+        },
+        week: {
+            dow: 1, // Monday is the first day of the week.
+            doy: 7, // The week that contains Jan 7th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    function plural(word, num) {
+        var forms = word.split('_');
+        return num % 10 === 1 && num % 100 !== 11
+            ? forms[0]
+            : num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20)
+            ? forms[1]
+            : forms[2];
+    }
+    function relativeTimeWithPlural(number, withoutSuffix, key) {
+        var format = {
+            ss: withoutSuffix ? 'секунда_секунды_секунд' : 'секунду_секунды_секунд',
+            mm: withoutSuffix ? 'хвіліна_хвіліны_хвілін' : 'хвіліну_хвіліны_хвілін',
+            hh: withoutSuffix ? 'гадзіна_гадзіны_гадзін' : 'гадзіну_гадзіны_гадзін',
+            dd: 'дзень_дні_дзён',
+            MM: 'месяц_месяцы_месяцаў',
+            yy: 'год_гады_гадоў',
+        };
+        if (key === 'm') {
+            return withoutSuffix ? 'хвіліна' : 'хвіліну';
+        } else if (key === 'h') {
+            return withoutSuffix ? 'гадзіна' : 'гадзіну';
+        } else {
+            return number + ' ' + plural(format[key], +number);
+        }
+    }
+
+    hooks.defineLocale('be', {
+        months: {
+            format: 'студзеня_лютага_сакавіка_красавіка_траўня_чэрвеня_ліпеня_жніўня_верасня_кастрычніка_лістапада_снежня'.split(
+                '_'
+            ),
+            standalone: 'студзень_люты_сакавік_красавік_травень_чэрвень_ліпень_жнівень_верасень_кастрычнік_лістапад_снежань'.split(
+                '_'
+            ),
+        },
+        monthsShort: 'студ_лют_сак_крас_трав_чэрв_ліп_жнів_вер_каст_ліст_снеж'.split(
+            '_'
+        ),
+        weekdays: {
+            format: 'нядзелю_панядзелак_аўторак_сераду_чацвер_пятніцу_суботу'.split(
+                '_'
+            ),
+            standalone: 'нядзеля_панядзелак_аўторак_серада_чацвер_пятніца_субота'.split(
+                '_'
+            ),
+            isFormat: /\[ ?[Ууў] ?(?:мінулую|наступную)? ?\] ?dddd/,
+        },
+        weekdaysShort: 'нд_пн_ат_ср_чц_пт_сб'.split('_'),
+        weekdaysMin: 'нд_пн_ат_ср_чц_пт_сб'.split('_'),
+        longDateFormat: {
+            LT: 'HH:mm',
+            LTS: 'HH:mm:ss',
+            L: 'DD.MM.YYYY',
+            LL: 'D MMMM YYYY г.',
+            LLL: 'D MMMM YYYY г., HH:mm',
+            LLLL: 'dddd, D MMMM YYYY г., HH:mm',
+        },
+        calendar: {
+            sameDay: '[Сёння ў] LT',
+            nextDay: '[Заўтра ў] LT',
+            lastDay: '[Учора ў] LT',
+            nextWeek: function () {
+                return '[У] dddd [ў] LT';
+            },
+            lastWeek: function () {
+                switch (this.day()) {
+                    case 0:
+                    case 3:
+                    case 5:
+                    case 6:
+                        return '[У мінулую] dddd [ў] LT';
+                    case 1:
+                    case 2:
+                    case 4:
+                        return '[У мінулы] dddd [ў] LT';
+                }
+            },
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: 'праз %s',
+            past: '%s таму',
+            s: 'некалькі секунд',
+            m: relativeTimeWithPlural,
+            mm: relativeTimeWithPlural,
+            h: relativeTimeWithPlural,
+            hh: relativeTimeWithPlural,
+            d: 'дзень',
+            dd: relativeTimeWithPlural,
+            M: 'месяц',
+            MM: relativeTimeWithPlural,
+            y: 'год',
+            yy: relativeTimeWithPlural,
+        },
+        meridiemParse: /ночы|раніцы|дня|вечара/,
+        isPM: function (input) {
+            return /^(дня|вечара)$/.test(input);
+        },
+        meridiem: function (hour, minute, isLower) {
+            if (hour < 4) {
+                return 'ночы';
+            } else if (hour < 12) {
+                return 'раніцы';
+            } else if (hour < 17) {
+                return 'дня';
+            } else {
+                return 'вечара';
+            }
+        },
+        dayOfMonthOrdinalParse: /\d{1,2}-(і|ы|га)/,
+        ordinal: function (number, period) {
+            switch (period) {
+                case 'M':
+                case 'd':
+                case 'DDD':
+                case 'w':
+                case 'W':
+                    return (number % 10 === 2 || number % 10 === 3) &&
+                        number % 100 !== 12 &&
+                        number % 100 !== 13
+                        ? number + '-і'
+                        : number + '-ы';
+                case 'D':
+                    return number + '-га';
+                default:
+                    return number;
+            }
+        },
+        week: {
+            dow: 1, // Monday is the first day of the week.
+            doy: 7, // The week that contains Jan 7th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    hooks.defineLocale('bg', {
+        months: 'януари_февруари_март_април_май_юни_юли_август_септември_октомври_ноември_декември'.split(
+            '_'
+        ),
+        monthsShort: 'яну_фев_мар_апр_май_юни_юли_авг_сеп_окт_ное_дек'.split('_'),
+        weekdays: 'неделя_понеделник_вторник_сряда_четвъртък_петък_събота'.split(
+            '_'
+        ),
+        weekdaysShort: 'нед_пон_вто_сря_чет_пет_съб'.split('_'),
+        weekdaysMin: 'нд_пн_вт_ср_чт_пт_сб'.split('_'),
+        longDateFormat: {
+            LT: 'H:mm',
+            LTS: 'H:mm:ss',
+            L: 'D.MM.YYYY',
+            LL: 'D MMMM YYYY',
+            LLL: 'D MMMM YYYY H:mm',
+            LLLL: 'dddd, D MMMM YYYY H:mm',
+        },
+        calendar: {
+            sameDay: '[Днес в] LT',
+            nextDay: '[Утре в] LT',
+            nextWeek: 'dddd [в] LT',
+            lastDay: '[Вчера в] LT',
+            lastWeek: function () {
+                switch (this.day()) {
+                    case 0:
+                    case 3:
+                    case 6:
+                        return '[Миналата] dddd [в] LT';
+                    case 1:
+                    case 2:
+                    case 4:
+                    case 5:
+                        return '[Миналия] dddd [в] LT';
+                }
+            },
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: 'след %s',
+            past: 'преди %s',
+            s: 'няколко секунди',
+            ss: '%d секунди',
+            m: 'минута',
+            mm: '%d минути',
+            h: 'час',
+            hh: '%d часа',
+            d: 'ден',
+            dd: '%d дена',
+            M: 'месец',
+            MM: '%d месеца',
+            y: 'година',
+            yy: '%d години',
+        },
+        dayOfMonthOrdinalParse: /\d{1,2}-(ев|ен|ти|ви|ри|ми)/,
+        ordinal: function (number) {
+            var lastDigit = number % 10,
+                last2Digits = number % 100;
+            if (number === 0) {
+                return number + '-ев';
+            } else if (last2Digits === 0) {
+                return number + '-ен';
+            } else if (last2Digits > 10 && last2Digits < 20) {
+                return number + '-ти';
+            } else if (lastDigit === 1) {
+                return number + '-ви';
+            } else if (lastDigit === 2) {
+                return number + '-ри';
+            } else if (lastDigit === 7 || lastDigit === 8) {
+                return number + '-ми';
+            } else {
+                return number + '-ти';
+            }
+        },
+        week: {
+            dow: 1, // Monday is the first day of the week.
+            doy: 7, // The week that contains Jan 7th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    hooks.defineLocale('bm', {
+        months: 'Zanwuyekalo_Fewuruyekalo_Marisikalo_Awirilikalo_Mɛkalo_Zuwɛnkalo_Zuluyekalo_Utikalo_Sɛtanburukalo_ɔkutɔburukalo_Nowanburukalo_Desanburukalo'.split(
+            '_'
+        ),
+        monthsShort: 'Zan_Few_Mar_Awi_Mɛ_Zuw_Zul_Uti_Sɛt_ɔku_Now_Des'.split('_'),
+        weekdays: 'Kari_Ntɛnɛn_Tarata_Araba_Alamisa_Juma_Sibiri'.split('_'),
+        weekdaysShort: 'Kar_Ntɛ_Tar_Ara_Ala_Jum_Sib'.split('_'),
+        weekdaysMin: 'Ka_Nt_Ta_Ar_Al_Ju_Si'.split('_'),
+        longDateFormat: {
+            LT: 'HH:mm',
+            LTS: 'HH:mm:ss',
+            L: 'DD/MM/YYYY',
+            LL: 'MMMM [tile] D [san] YYYY',
+            LLL: 'MMMM [tile] D [san] YYYY [lɛrɛ] HH:mm',
+            LLLL: 'dddd MMMM [tile] D [san] YYYY [lɛrɛ] HH:mm',
+        },
+        calendar: {
+            sameDay: '[Bi lɛrɛ] LT',
+            nextDay: '[Sini lɛrɛ] LT',
+            nextWeek: 'dddd [don lɛrɛ] LT',
+            lastDay: '[Kunu lɛrɛ] LT',
+            lastWeek: 'dddd [tɛmɛnen lɛrɛ] LT',
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: '%s kɔnɔ',
+            past: 'a bɛ %s bɔ',
+            s: 'sanga dama dama',
+            ss: 'sekondi %d',
+            m: 'miniti kelen',
+            mm: 'miniti %d',
+            h: 'lɛrɛ kelen',
+            hh: 'lɛrɛ %d',
+            d: 'tile kelen',
+            dd: 'tile %d',
+            M: 'kalo kelen',
+            MM: 'kalo %d',
+            y: 'san kelen',
+            yy: 'san %d',
+        },
+        week: {
+            dow: 1, // Monday is the first day of the week.
+            doy: 4, // The week that contains Jan 4th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    var symbolMap$3 = {
+            '1': '১',
+            '2': '২',
+            '3': '৩',
+            '4': '৪',
+            '5': '৫',
+            '6': '৬',
+            '7': '৭',
+            '8': '৮',
+            '9': '৯',
+            '0': '০',
+        },
+        numberMap$2 = {
+            '১': '1',
+            '২': '2',
+            '৩': '3',
+            '৪': '4',
+            '৫': '5',
+            '৬': '6',
+            '৭': '7',
+            '৮': '8',
+            '৯': '9',
+            '০': '0',
+        };
+
+    hooks.defineLocale('bn', {
+        months: 'জানুয়ারি_ফেব্রুয়ারি_মার্চ_এপ্রিল_মে_জুন_জুলাই_আগস্ট_সেপ্টেম্বর_অক্টোবর_নভেম্বর_ডিসেম্বর'.split(
+            '_'
+        ),
+        monthsShort: 'জানু_ফেব্রু_মার্চ_এপ্রিল_মে_জুন_জুলাই_আগস্ট_সেপ্ট_অক্টো_নভে_ডিসে'.split(
+            '_'
+        ),
+        weekdays: 'রবিবার_সোমবার_মঙ্গলবার_বুধবার_বৃহস্পতিবার_শুক্রবার_শনিবার'.split(
+            '_'
+        ),
+        weekdaysShort: 'রবি_সোম_মঙ্গল_বুধ_বৃহস্পতি_শুক্র_শনি'.split('_'),
+        weekdaysMin: 'রবি_সোম_মঙ্গল_বুধ_বৃহ_শুক্র_শনি'.split('_'),
+        longDateFormat: {
+            LT: 'A h:mm সময়',
+            LTS: 'A h:mm:ss সময়',
+            L: 'DD/MM/YYYY',
+            LL: 'D MMMM YYYY',
+            LLL: 'D MMMM YYYY, A h:mm সময়',
+            LLLL: 'dddd, D MMMM YYYY, A h:mm সময়',
+        },
+        calendar: {
+            sameDay: '[আজ] LT',
+            nextDay: '[আগামীকাল] LT',
+            nextWeek: 'dddd, LT',
+            lastDay: '[গতকাল] LT',
+            lastWeek: '[গত] dddd, LT',
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: '%s পরে',
+            past: '%s আগে',
+            s: 'কয়েক সেকেন্ড',
+            ss: '%d সেকেন্ড',
+            m: 'এক মিনিট',
+            mm: '%d মিনিট',
+            h: 'এক ঘন্টা',
+            hh: '%d ঘন্টা',
+            d: 'এক দিন',
+            dd: '%d দিন',
+            M: 'এক মাস',
+            MM: '%d মাস',
+            y: 'এক বছর',
+            yy: '%d বছর',
+        },
+        preparse: function (string) {
+            return string.replace(/[১২৩৪৫৬৭৮৯০]/g, function (match) {
+                return numberMap$2[match];
+            });
+        },
+        postformat: function (string) {
+            return string.replace(/\d/g, function (match) {
+                return symbolMap$3[match];
+            });
+        },
+        meridiemParse: /রাত|সকাল|দুপুর|বিকাল|রাত/,
+        meridiemHour: function (hour, meridiem) {
+            if (hour === 12) {
+                hour = 0;
+            }
+            if (
+                (meridiem === 'রাত' && hour >= 4) ||
+                (meridiem === 'দুপুর' && hour < 5) ||
+                meridiem === 'বিকাল'
+            ) {
+                return hour + 12;
+            } else {
+                return hour;
+            }
+        },
+        meridiem: function (hour, minute, isLower) {
+            if (hour < 4) {
+                return 'রাত';
+            } else if (hour < 10) {
+                return 'সকাল';
+            } else if (hour < 17) {
+                return 'দুপুর';
+            } else if (hour < 20) {
+                return 'বিকাল';
+            } else {
+                return 'রাত';
+            }
+        },
+        week: {
+            dow: 0, // Sunday is the first day of the week.
+            doy: 6, // The week that contains Jan 6th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    var symbolMap$4 = {
+            '1': '༡',
+            '2': '༢',
+            '3': '༣',
+            '4': '༤',
+            '5': '༥',
+            '6': '༦',
+            '7': '༧',
+            '8': '༨',
+            '9': '༩',
+            '0': '༠',
+        },
+        numberMap$3 = {
+            '༡': '1',
+            '༢': '2',
+            '༣': '3',
+            '༤': '4',
+            '༥': '5',
+            '༦': '6',
+            '༧': '7',
+            '༨': '8',
+            '༩': '9',
+            '༠': '0',
+        };
+
+    hooks.defineLocale('bo', {
+        months: 'ཟླ་བ་དང་པོ_ཟླ་བ་གཉིས་པ_ཟླ་བ་གསུམ་པ_ཟླ་བ་བཞི་པ_ཟླ་བ་ལྔ་པ_ཟླ་བ་དྲུག་པ_ཟླ་བ་བདུན་པ_ཟླ་བ་བརྒྱད་པ_ཟླ་བ་དགུ་པ_ཟླ་བ་བཅུ་པ_ཟླ་བ་བཅུ་གཅིག་པ_ཟླ་བ་བཅུ་གཉིས་པ'.split(
+            '_'
+        ),
+        monthsShort: 'ཟླ་1_ཟླ་2_ཟླ་3_ཟླ་4_ཟླ་5_ཟླ་6_ཟླ་7_ཟླ་8_ཟླ་9_ཟླ་10_ཟླ་11_ཟླ་12'.split(
+            '_'
+        ),
+        monthsShortRegex: /^(ཟླ་\d{1,2})/,
+        monthsParseExact: true,
+        weekdays: 'གཟའ་ཉི་མ་_གཟའ་ཟླ་བ་_གཟའ་མིག་དམར་_གཟའ་ལྷག་པ་_གཟའ་ཕུར་བུ_གཟའ་པ་སངས་_གཟའ་སྤེན་པ་'.split(
+            '_'
+        ),
+        weekdaysShort: 'ཉི་མ་_ཟླ་བ་_མིག་དམར་_ལྷག་པ་_ཕུར་བུ_པ་སངས་_སྤེན་པ་'.split(
+            '_'
+        ),
+        weekdaysMin: 'ཉི_ཟླ_མིག_ལྷག_ཕུར_སངས_སྤེན'.split('_'),
+        longDateFormat: {
+            LT: 'A h:mm',
+            LTS: 'A h:mm:ss',
+            L: 'DD/MM/YYYY',
+            LL: 'D MMMM YYYY',
+            LLL: 'D MMMM YYYY, A h:mm',
+            LLLL: 'dddd, D MMMM YYYY, A h:mm',
+        },
+        calendar: {
+            sameDay: '[དི་རིང] LT',
+            nextDay: '[སང་ཉིན] LT',
+            nextWeek: '[བདུན་ཕྲག་རྗེས་མ], LT',
+            lastDay: '[ཁ་སང] LT',
+            lastWeek: '[བདུན་ཕྲག་མཐའ་མ] dddd, LT',
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: '%s ལ་',
+            past: '%s སྔན་ལ',
+            s: 'ལམ་སང',
+            ss: '%d སྐར་ཆ།',
+            m: 'སྐར་མ་གཅིག',
+            mm: '%d སྐར་མ',
+            h: 'ཆུ་ཚོད་གཅིག',
+            hh: '%d ཆུ་ཚོད',
+            d: 'ཉིན་གཅིག',
+            dd: '%d ཉིན་',
+            M: 'ཟླ་བ་གཅིག',
+            MM: '%d ཟླ་བ',
+            y: 'ལོ་གཅིག',
+            yy: '%d ལོ',
+        },
+        preparse: function (string) {
+            return string.replace(/[༡༢༣༤༥༦༧༨༩༠]/g, function (match) {
+                return numberMap$3[match];
+            });
+        },
+        postformat: function (string) {
+            return string.replace(/\d/g, function (match) {
+                return symbolMap$4[match];
+            });
+        },
+        meridiemParse: /མཚན་མོ|ཞོགས་ཀས|ཉིན་གུང|དགོང་དག|མཚན་མོ/,
+        meridiemHour: function (hour, meridiem) {
+            if (hour === 12) {
+                hour = 0;
+            }
+            if (
+                (meridiem === 'མཚན་མོ' && hour >= 4) ||
+                (meridiem === 'ཉིན་གུང' && hour < 5) ||
+                meridiem === 'དགོང་དག'
+            ) {
+                return hour + 12;
+            } else {
+                return hour;
+            }
+        },
+        meridiem: function (hour, minute, isLower) {
+            if (hour < 4) {
+                return 'མཚན་མོ';
+            } else if (hour < 10) {
+                return 'ཞོགས་ཀས';
+            } else if (hour < 17) {
+                return 'ཉིན་གུང';
+            } else if (hour < 20) {
+                return 'དགོང་དག';
+            } else {
+                return 'མཚན་མོ';
+            }
+        },
+        week: {
+            dow: 0, // Sunday is the first day of the week.
+            doy: 6, // The week that contains Jan 6th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    function relativeTimeWithMutation(number, withoutSuffix, key) {
+        var format = {
+            mm: 'munutenn',
+            MM: 'miz',
+            dd: 'devezh',
+        };
+        return number + ' ' + mutation(format[key], number);
+    }
+    function specialMutationForYears(number) {
+        switch (lastNumber(number)) {
+            case 1:
+            case 3:
+            case 4:
+            case 5:
+            case 9:
+                return number + ' bloaz';
+            default:
+                return number + ' vloaz';
+        }
+    }
+    function lastNumber(number) {
+        if (number > 9) {
+            return lastNumber(number % 10);
+        }
+        return number;
+    }
+    function mutation(text, number) {
+        if (number === 2) {
+            return softMutation(text);
+        }
+        return text;
+    }
+    function softMutation(text) {
+        var mutationTable = {
+            m: 'v',
+            b: 'v',
+            d: 'z',
+        };
+        if (mutationTable[text.charAt(0)] === undefined) {
+            return text;
+        }
+        return mutationTable[text.charAt(0)] + text.substring(1);
+    }
+
+    var monthsParse = [
+            /^gen/i,
+            /^c[ʼ\']hwe/i,
+            /^meu/i,
+            /^ebr/i,
+            /^mae/i,
+            /^(mez|eve)/i,
+            /^gou/i,
+            /^eos/i,
+            /^gwe/i,
+            /^her/i,
+            /^du/i,
+            /^ker/i,
+        ],
+        monthsRegex$1 = /^(genver|c[ʼ\']hwevrer|meurzh|ebrel|mae|mezheven|gouere|eost|gwengolo|here|du|kerzu|gen|c[ʼ\']hwe|meu|ebr|mae|eve|gou|eos|gwe|her|du|ker)/i,
+        monthsStrictRegex = /^(genver|c[ʼ\']hwevrer|meurzh|ebrel|mae|mezheven|gouere|eost|gwengolo|here|du|kerzu)/i,
+        monthsShortStrictRegex = /^(gen|c[ʼ\']hwe|meu|ebr|mae|eve|gou|eos|gwe|her|du|ker)/i,
+        fullWeekdaysParse = [
+            /^sul/i,
+            /^lun/i,
+            /^meurzh/i,
+            /^merc[ʼ\']her/i,
+            /^yaou/i,
+            /^gwener/i,
+            /^sadorn/i,
+        ],
+        shortWeekdaysParse = [
+            /^Sul/i,
+            /^Lun/i,
+            /^Meu/i,
+            /^Mer/i,
+            /^Yao/i,
+            /^Gwe/i,
+            /^Sad/i,
+        ],
+        minWeekdaysParse = [
+            /^Su/i,
+            /^Lu/i,
+            /^Me([^r]|$)/i,
+            /^Mer/i,
+            /^Ya/i,
+            /^Gw/i,
+            /^Sa/i,
+        ];
+
+    hooks.defineLocale('br', {
+        months: 'Genver_Cʼhwevrer_Meurzh_Ebrel_Mae_Mezheven_Gouere_Eost_Gwengolo_Here_Du_Kerzu'.split(
+            '_'
+        ),
+        monthsShort: 'Gen_Cʼhwe_Meu_Ebr_Mae_Eve_Gou_Eos_Gwe_Her_Du_Ker'.split('_'),
+        weekdays: 'Sul_Lun_Meurzh_Mercʼher_Yaou_Gwener_Sadorn'.split('_'),
+        weekdaysShort: 'Sul_Lun_Meu_Mer_Yao_Gwe_Sad'.split('_'),
+        weekdaysMin: 'Su_Lu_Me_Mer_Ya_Gw_Sa'.split('_'),
+        weekdaysParse: minWeekdaysParse,
+        fullWeekdaysParse: fullWeekdaysParse,
+        shortWeekdaysParse: shortWeekdaysParse,
+        minWeekdaysParse: minWeekdaysParse,
+
+        monthsRegex: monthsRegex$1,
+        monthsShortRegex: monthsRegex$1,
+        monthsStrictRegex: monthsStrictRegex,
+        monthsShortStrictRegex: monthsShortStrictRegex,
+        monthsParse: monthsParse,
+        longMonthsParse: monthsParse,
+        shortMonthsParse: monthsParse,
+
+        longDateFormat: {
+            LT: 'HH:mm',
+            LTS: 'HH:mm:ss',
+            L: 'DD/MM/YYYY',
+            LL: 'D [a viz] MMMM YYYY',
+            LLL: 'D [a viz] MMMM YYYY HH:mm',
+            LLLL: 'dddd, D [a viz] MMMM YYYY HH:mm',
+        },
+        calendar: {
+            sameDay: '[Hiziv da] LT',
+            nextDay: '[Warcʼhoazh da] LT',
+            nextWeek: 'dddd [da] LT',
+            lastDay: '[Decʼh da] LT',
+            lastWeek: 'dddd [paset da] LT',
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: 'a-benn %s',
+            past: '%s ʼzo',
+            s: 'un nebeud segondennoù',
+            ss: '%d eilenn',
+            m: 'ur vunutenn',
+            mm: relativeTimeWithMutation,
+            h: 'un eur',
+            hh: '%d eur',
+            d: 'un devezh',
+            dd: relativeTimeWithMutation,
+            M: 'ur miz',
+            MM: relativeTimeWithMutation,
+            y: 'ur bloaz',
+            yy: specialMutationForYears,
+        },
+        dayOfMonthOrdinalParse: /\d{1,2}(añ|vet)/,
+        ordinal: function (number) {
+            var output = number === 1 ? 'añ' : 'vet';
+            return number + output;
+        },
+        week: {
+            dow: 1, // Monday is the first day of the week.
+            doy: 4, // The week that contains Jan 4th is the first week of the year.
+        },
+        meridiemParse: /a.m.|g.m./, // goude merenn | a-raok merenn
+        isPM: function (token) {
+            return token === 'g.m.';
+        },
+        meridiem: function (hour, minute, isLower) {
+            return hour < 12 ? 'a.m.' : 'g.m.';
+        },
+    });
+
+    //! moment.js locale configuration
+
+    function translate(number, withoutSuffix, key) {
+        var result = number + ' ';
+        switch (key) {
+            case 'ss':
+                if (number === 1) {
+                    result += 'sekunda';
+                } else if (number === 2 || number === 3 || number === 4) {
+                    result += 'sekunde';
+                } else {
+                    result += 'sekundi';
+                }
+                return result;
+            case 'm':
+                return withoutSuffix ? 'jedna minuta' : 'jedne minute';
+            case 'mm':
+                if (number === 1) {
+                    result += 'minuta';
+                } else if (number === 2 || number === 3 || number === 4) {
+                    result += 'minute';
+                } else {
+                    result += 'minuta';
+                }
+                return result;
+            case 'h':
+                return withoutSuffix ? 'jedan sat' : 'jednog sata';
+            case 'hh':
+                if (number === 1) {
+                    result += 'sat';
+                } else if (number === 2 || number === 3 || number === 4) {
+                    result += 'sata';
+                } else {
+                    result += 'sati';
+                }
+                return result;
+            case 'dd':
+                if (number === 1) {
+                    result += 'dan';
+                } else {
+                    result += 'dana';
+                }
+                return result;
+            case 'MM':
+                if (number === 1) {
+                    result += 'mjesec';
+                } else if (number === 2 || number === 3 || number === 4) {
+                    result += 'mjeseca';
+                } else {
+                    result += 'mjeseci';
+                }
+                return result;
+            case 'yy':
+                if (number === 1) {
+                    result += 'godina';
+                } else if (number === 2 || number === 3 || number === 4) {
+                    result += 'godine';
+                } else {
+                    result += 'godina';
+                }
+                return result;
+        }
+    }
+
+    hooks.defineLocale('bs', {
+        months: 'januar_februar_mart_april_maj_juni_juli_august_septembar_oktobar_novembar_decembar'.split(
+            '_'
+        ),
+        monthsShort: 'jan._feb._mar._apr._maj._jun._jul._aug._sep._okt._nov._dec.'.split(
+            '_'
+        ),
+        monthsParseExact: true,
+        weekdays: 'nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota'.split(
+            '_'
+        ),
+        weekdaysShort: 'ned._pon._uto._sri._čet._pet._sub.'.split('_'),
+        weekdaysMin: 'ne_po_ut_sr_če_pe_su'.split('_'),
+        weekdaysParseExact: true,
+        longDateFormat: {
+            LT: 'H:mm',
+            LTS: 'H:mm:ss',
+            L: 'DD.MM.YYYY',
+            LL: 'D. MMMM YYYY',
+            LLL: 'D. MMMM YYYY H:mm',
+            LLLL: 'dddd, D. MMMM YYYY H:mm',
+        },
+        calendar: {
+            sameDay: '[danas u] LT',
+            nextDay: '[sutra u] LT',
+            nextWeek: function () {
+                switch (this.day()) {
+                    case 0:
+                        return '[u] [nedjelju] [u] LT';
+                    case 3:
+                        return '[u] [srijedu] [u] LT';
+                    case 6:
+                        return '[u] [subotu] [u] LT';
+                    case 1:
+                    case 2:
+                    case 4:
+                    case 5:
+                        return '[u] dddd [u] LT';
+                }
+            },
+            lastDay: '[jučer u] LT',
+            lastWeek: function () {
+                switch (this.day()) {
+                    case 0:
+                    case 3:
+                        return '[prošlu] dddd [u] LT';
+                    case 6:
+                        return '[prošle] [subote] [u] LT';
+                    case 1:
+                    case 2:
+                    case 4:
+                    case 5:
+                        return '[prošli] dddd [u] LT';
+                }
+            },
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: 'za %s',
+            past: 'prije %s',
+            s: 'par sekundi',
+            ss: translate,
+            m: translate,
+            mm: translate,
+            h: translate,
+            hh: translate,
+            d: 'dan',
+            dd: translate,
+            M: 'mjesec',
+            MM: translate,
+            y: 'godinu',
+            yy: translate,
+        },
+        dayOfMonthOrdinalParse: /\d{1,2}\./,
+        ordinal: '%d.',
+        week: {
+            dow: 1, // Monday is the first day of the week.
+            doy: 7, // The week that contains Jan 7th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    hooks.defineLocale('ca', {
+        months: {
+            standalone: 'gener_febrer_març_abril_maig_juny_juliol_agost_setembre_octubre_novembre_desembre'.split(
+                '_'
+            ),
+            format: "de gener_de febrer_de març_d'abril_de maig_de juny_de juliol_d'agost_de setembre_d'octubre_de novembre_de desembre".split(
+                '_'
+            ),
+            isFormat: /D[oD]?(\s)+MMMM/,
+        },
+        monthsShort: 'gen._febr._març_abr._maig_juny_jul._ag._set._oct._nov._des.'.split(
+            '_'
+        ),
+        monthsParseExact: true,
+        weekdays: 'diumenge_dilluns_dimarts_dimecres_dijous_divendres_dissabte'.split(
+            '_'
+        ),
+        weekdaysShort: 'dg._dl._dt._dc._dj._dv._ds.'.split('_'),
+        weekdaysMin: 'dg_dl_dt_dc_dj_dv_ds'.split('_'),
+        weekdaysParseExact: true,
+        longDateFormat: {
+            LT: 'H:mm',
+            LTS: 'H:mm:ss',
+            L: 'DD/MM/YYYY',
+            LL: 'D MMMM [de] YYYY',
+            ll: 'D MMM YYYY',
+            LLL: 'D MMMM [de] YYYY [a les] H:mm',
+            lll: 'D MMM YYYY, H:mm',
+            LLLL: 'dddd D MMMM [de] YYYY [a les] H:mm',
+            llll: 'ddd D MMM YYYY, H:mm',
+        },
+        calendar: {
+            sameDay: function () {
+                return '[avui a ' + (this.hours() !== 1 ? 'les' : 'la') + '] LT';
+            },
+            nextDay: function () {
+                return '[demà a ' + (this.hours() !== 1 ? 'les' : 'la') + '] LT';
+            },
+            nextWeek: function () {
+                return 'dddd [a ' + (this.hours() !== 1 ? 'les' : 'la') + '] LT';
+            },
+            lastDay: function () {
+                return '[ahir a ' + (this.hours() !== 1 ? 'les' : 'la') + '] LT';
+            },
+            lastWeek: function () {
+                return (
+                    '[el] dddd [passat a ' +
+                    (this.hours() !== 1 ? 'les' : 'la') +
+                    '] LT'
+                );
+            },
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: "d'aquí %s",
+            past: 'fa %s',
+            s: 'uns segons',
+            ss: '%d segons',
+            m: 'un minut',
+            mm: '%d minuts',
+            h: 'una hora',
+            hh: '%d hores',
+            d: 'un dia',
+            dd: '%d dies',
+            M: 'un mes',
+            MM: '%d mesos',
+            y: 'un any',
+            yy: '%d anys',
+        },
+        dayOfMonthOrdinalParse: /\d{1,2}(r|n|t|è|a)/,
+        ordinal: function (number, period) {
+            var output =
+                number === 1
+                    ? 'r'
+                    : number === 2
+                    ? 'n'
+                    : number === 3
+                    ? 'r'
+                    : number === 4
+                    ? 't'
+                    : 'è';
+            if (period === 'w' || period === 'W') {
+                output = 'a';
+            }
+            return number + output;
+        },
+        week: {
+            dow: 1, // Monday is the first day of the week.
+            doy: 4, // The week that contains Jan 4th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    var months$4 = 'leden_únor_březen_duben_květen_červen_červenec_srpen_září_říjen_listopad_prosinec'.split(
+            '_'
+        ),
+        monthsShort = 'led_úno_bře_dub_kvě_čvn_čvc_srp_zář_říj_lis_pro'.split('_'),
+        monthsParse$1 = [
+            /^led/i,
+            /^úno/i,
+            /^bře/i,
+            /^dub/i,
+            /^kvě/i,
+            /^(čvn|červen$|června)/i,
+            /^(čvc|červenec|července)/i,
+            /^srp/i,
+            /^zář/i,
+            /^říj/i,
+            /^lis/i,
+            /^pro/i,
+        ],
+        // NOTE: 'červen' is substring of 'červenec'; therefore 'červenec' must precede 'červen' in the regex to be fully matched.
+        // Otherwise parser matches '1. červenec' as '1. červen' + 'ec'.
+        monthsRegex$2 = /^(leden|únor|březen|duben|květen|červenec|července|červen|června|srpen|září|říjen|listopad|prosinec|led|úno|bře|dub|kvě|čvn|čvc|srp|zář|říj|lis|pro)/i;
+
+    function plural$1(n) {
+        return n > 1 && n < 5 && ~~(n / 10) !== 1;
+    }
+    function translate$1(number, withoutSuffix, key, isFuture) {
+        var result = number + ' ';
+        switch (key) {
+            case 's': // a few seconds / in a few seconds / a few seconds ago
+                return withoutSuffix || isFuture ? 'pár sekund' : 'pár sekundami';
+            case 'ss': // 9 seconds / in 9 seconds / 9 seconds ago
+                if (withoutSuffix || isFuture) {
+                    return result + (plural$1(number) ? 'sekundy' : 'sekund');
+                } else {
+                    return result + 'sekundami';
+                }
+            case 'm': // a minute / in a minute / a minute ago
+                return withoutSuffix ? 'minuta' : isFuture ? 'minutu' : 'minutou';
+            case 'mm': // 9 minutes / in 9 minutes / 9 minutes ago
+                if (withoutSuffix || isFuture) {
+                    return result + (plural$1(number) ? 'minuty' : 'minut');
+                } else {
+                    return result + 'minutami';
+                }
+            case 'h': // an hour / in an hour / an hour ago
+                return withoutSuffix ? 'hodina' : isFuture ? 'hodinu' : 'hodinou';
+            case 'hh': // 9 hours / in 9 hours / 9 hours ago
+                if (withoutSuffix || isFuture) {
+                    return result + (plural$1(number) ? 'hodiny' : 'hodin');
+                } else {
+                    return result + 'hodinami';
+                }
+            case 'd': // a day / in a day / a day ago
+                return withoutSuffix || isFuture ? 'den' : 'dnem';
+            case 'dd': // 9 days / in 9 days / 9 days ago
+                if (withoutSuffix || isFuture) {
+                    return result + (plural$1(number) ? 'dny' : 'dní');
+                } else {
+                    return result + 'dny';
+                }
+            case 'M': // a month / in a month / a month ago
+                return withoutSuffix || isFuture ? 'měsíc' : 'měsícem';
+            case 'MM': // 9 months / in 9 months / 9 months ago
+                if (withoutSuffix || isFuture) {
+                    return result + (plural$1(number) ? 'měsíce' : 'měsíců');
+                } else {
+                    return result + 'měsíci';
+                }
+            case 'y': // a year / in a year / a year ago
+                return withoutSuffix || isFuture ? 'rok' : 'rokem';
+            case 'yy': // 9 years / in 9 years / 9 years ago
+                if (withoutSuffix || isFuture) {
+                    return result + (plural$1(number) ? 'roky' : 'let');
+                } else {
+                    return result + 'lety';
+                }
+        }
+    }
+
+    hooks.defineLocale('cs', {
+        months: months$4,
+        monthsShort: monthsShort,
+        monthsRegex: monthsRegex$2,
+        monthsShortRegex: monthsRegex$2,
+        // NOTE: 'červen' is substring of 'červenec'; therefore 'červenec' must precede 'červen' in the regex to be fully matched.
+        // Otherwise parser matches '1. červenec' as '1. červen' + 'ec'.
+        monthsStrictRegex: /^(leden|ledna|února|únor|březen|března|duben|dubna|květen|května|červenec|července|červen|června|srpen|srpna|září|říjen|října|listopadu|listopad|prosinec|prosince)/i,
+        monthsShortStrictRegex: /^(led|úno|bře|dub|kvě|čvn|čvc|srp|zář|říj|lis|pro)/i,
+        monthsParse: monthsParse$1,
+        longMonthsParse: monthsParse$1,
+        shortMonthsParse: monthsParse$1,
+        weekdays: 'neděle_pondělí_úterý_středa_čtvrtek_pátek_sobota'.split('_'),
+        weekdaysShort: 'ne_po_út_st_čt_pá_so'.split('_'),
+        weekdaysMin: 'ne_po_út_st_čt_pá_so'.split('_'),
+        longDateFormat: {
+            LT: 'H:mm',
+            LTS: 'H:mm:ss',
+            L: 'DD.MM.YYYY',
+            LL: 'D. MMMM YYYY',
+            LLL: 'D. MMMM YYYY H:mm',
+            LLLL: 'dddd D. MMMM YYYY H:mm',
+            l: 'D. M. YYYY',
+        },
+        calendar: {
+            sameDay: '[dnes v] LT',
+            nextDay: '[zítra v] LT',
+            nextWeek: function () {
+                switch (this.day()) {
+                    case 0:
+                        return '[v neděli v] LT';
+                    case 1:
+                    case 2:
+                        return '[v] dddd [v] LT';
+                    case 3:
+                        return '[ve středu v] LT';
+                    case 4:
+                        return '[ve čtvrtek v] LT';
+                    case 5:
+                        return '[v pátek v] LT';
+                    case 6:
+                        return '[v sobotu v] LT';
+                }
+            },
+            lastDay: '[včera v] LT',
+            lastWeek: function () {
+                switch (this.day()) {
+                    case 0:
+                        return '[minulou neděli v] LT';
+                    case 1:
+                    case 2:
+                        return '[minulé] dddd [v] LT';
+                    case 3:
+                        return '[minulou středu v] LT';
+                    case 4:
+                    case 5:
+                        return '[minulý] dddd [v] LT';
+                    case 6:
+                        return '[minulou sobotu v] LT';
+                }
+            },
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: 'za %s',
+            past: 'před %s',
+            s: translate$1,
+            ss: translate$1,
+            m: translate$1,
+            mm: translate$1,
+            h: translate$1,
+            hh: translate$1,
+            d: translate$1,
+            dd: translate$1,
+            M: translate$1,
+            MM: translate$1,
+            y: translate$1,
+            yy: translate$1,
+        },
+        dayOfMonthOrdinalParse: /\d{1,2}\./,
+        ordinal: '%d.',
+        week: {
+            dow: 1, // Monday is the first day of the week.
+            doy: 4, // The week that contains Jan 4th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    hooks.defineLocale('cv', {
+        months: 'кӑрлач_нарӑс_пуш_ака_май_ҫӗртме_утӑ_ҫурла_авӑн_юпа_чӳк_раштав'.split(
+            '_'
+        ),
+        monthsShort: 'кӑр_нар_пуш_ака_май_ҫӗр_утӑ_ҫур_авн_юпа_чӳк_раш'.split('_'),
+        weekdays: 'вырсарникун_тунтикун_ытларикун_юнкун_кӗҫнерникун_эрнекун_шӑматкун'.split(
+            '_'
+        ),
+        weekdaysShort: 'выр_тун_ытл_юн_кӗҫ_эрн_шӑм'.split('_'),
+        weekdaysMin: 'вр_тн_ыт_юн_кҫ_эр_шм'.split('_'),
+        longDateFormat: {
+            LT: 'HH:mm',
+            LTS: 'HH:mm:ss',
+            L: 'DD-MM-YYYY',
+            LL: 'YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ]',
+            LLL: 'YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ], HH:mm',
+            LLLL: 'dddd, YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ], HH:mm',
+        },
+        calendar: {
+            sameDay: '[Паян] LT [сехетре]',
+            nextDay: '[Ыран] LT [сехетре]',
+            lastDay: '[Ӗнер] LT [сехетре]',
+            nextWeek: '[Ҫитес] dddd LT [сехетре]',
+            lastWeek: '[Иртнӗ] dddd LT [сехетре]',
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: function (output) {
+                var affix = /сехет$/i.exec(output)
+                    ? 'рен'
+                    : /ҫул$/i.exec(output)
+                    ? 'тан'
+                    : 'ран';
+                return output + affix;
+            },
+            past: '%s каялла',
+            s: 'пӗр-ик ҫеккунт',
+            ss: '%d ҫеккунт',
+            m: 'пӗр минут',
+            mm: '%d минут',
+            h: 'пӗр сехет',
+            hh: '%d сехет',
+            d: 'пӗр кун',
+            dd: '%d кун',
+            M: 'пӗр уйӑх',
+            MM: '%d уйӑх',
+            y: 'пӗр ҫул',
+            yy: '%d ҫул',
+        },
+        dayOfMonthOrdinalParse: /\d{1,2}-мӗш/,
+        ordinal: '%d-мӗш',
+        week: {
+            dow: 1, // Monday is the first day of the week.
+            doy: 7, // The week that contains Jan 7th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    hooks.defineLocale('cy', {
+        months: 'Ionawr_Chwefror_Mawrth_Ebrill_Mai_Mehefin_Gorffennaf_Awst_Medi_Hydref_Tachwedd_Rhagfyr'.split(
+            '_'
+        ),
+        monthsShort: 'Ion_Chwe_Maw_Ebr_Mai_Meh_Gor_Aws_Med_Hyd_Tach_Rhag'.split(
+            '_'
+        ),
+        weekdays: 'Dydd Sul_Dydd Llun_Dydd Mawrth_Dydd Mercher_Dydd Iau_Dydd Gwener_Dydd Sadwrn'.split(
+            '_'
+        ),
+        weekdaysShort: 'Sul_Llun_Maw_Mer_Iau_Gwe_Sad'.split('_'),
+        weekdaysMin: 'Su_Ll_Ma_Me_Ia_Gw_Sa'.split('_'),
+        weekdaysParseExact: true,
+        // time formats are the same as en-gb
+        longDateFormat: {
+            LT: 'HH:mm',
+            LTS: 'HH:mm:ss',
+            L: 'DD/MM/YYYY',
+            LL: 'D MMMM YYYY',
+            LLL: 'D MMMM YYYY HH:mm',
+            LLLL: 'dddd, D MMMM YYYY HH:mm',
+        },
+        calendar: {
+            sameDay: '[Heddiw am] LT',
+            nextDay: '[Yfory am] LT',
+            nextWeek: 'dddd [am] LT',
+            lastDay: '[Ddoe am] LT',
+            lastWeek: 'dddd [diwethaf am] LT',
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: 'mewn %s',
+            past: '%s yn ôl',
+            s: 'ychydig eiliadau',
+            ss: '%d eiliad',
+            m: 'munud',
+            mm: '%d munud',
+            h: 'awr',
+            hh: '%d awr',
+            d: 'diwrnod',
+            dd: '%d diwrnod',
+            M: 'mis',
+            MM: '%d mis',
+            y: 'blwyddyn',
+            yy: '%d flynedd',
+        },
+        dayOfMonthOrdinalParse: /\d{1,2}(fed|ain|af|il|ydd|ed|eg)/,
+        // traditional ordinal numbers above 31 are not commonly used in colloquial Welsh
+        ordinal: function (number) {
+            var b = number,
+                output = '',
+                lookup = [
+                    '',
+                    'af',
+                    'il',
+                    'ydd',
+                    'ydd',
+                    'ed',
+                    'ed',
+                    'ed',
+                    'fed',
+                    'fed',
+                    'fed', // 1af to 10fed
+                    'eg',
+                    'fed',
+                    'eg',
+                    'eg',
+                    'fed',
+                    'eg',
+                    'eg',
+                    'fed',
+                    'eg',
+                    'fed', // 11eg to 20fed
+                ];
+            if (b > 20) {
+                if (b === 40 || b === 50 || b === 60 || b === 80 || b === 100) {
+                    output = 'fed'; // not 30ain, 70ain or 90ain
+                } else {
+                    output = 'ain';
+                }
+            } else if (b > 0) {
+                output = lookup[b];
+            }
+            return number + output;
+        },
+        week: {
+            dow: 1, // Monday is the first day of the week.
+            doy: 4, // The week that contains Jan 4th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    hooks.defineLocale('da', {
+        months: 'januar_februar_marts_april_maj_juni_juli_august_september_oktober_november_december'.split(
+            '_'
+        ),
+        monthsShort: 'jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec'.split('_'),
+        weekdays: 'søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag'.split('_'),
+        weekdaysShort: 'søn_man_tir_ons_tor_fre_lør'.split('_'),
+        weekdaysMin: 'sø_ma_ti_on_to_fr_lø'.split('_'),
+        longDateFormat: {
+            LT: 'HH:mm',
+            LTS: 'HH:mm:ss',
+            L: 'DD.MM.YYYY',
+            LL: 'D. MMMM YYYY',
+            LLL: 'D. MMMM YYYY HH:mm',
+            LLLL: 'dddd [d.] D. MMMM YYYY [kl.] HH:mm',
+        },
+        calendar: {
+            sameDay: '[i dag kl.] LT',
+            nextDay: '[i morgen kl.] LT',
+            nextWeek: 'på dddd [kl.] LT',
+            lastDay: '[i går kl.] LT',
+            lastWeek: '[i] dddd[s kl.] LT',
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: 'om %s',
+            past: '%s siden',
+            s: 'få sekunder',
+            ss: '%d sekunder',
+            m: 'et minut',
+            mm: '%d minutter',
+            h: 'en time',
+            hh: '%d timer',
+            d: 'en dag',
+            dd: '%d dage',
+            M: 'en måned',
+            MM: '%d måneder',
+            y: 'et år',
+            yy: '%d år',
+        },
+        dayOfMonthOrdinalParse: /\d{1,2}\./,
+        ordinal: '%d.',
+        week: {
+            dow: 1, // Monday is the first day of the week.
+            doy: 4, // The week that contains Jan 4th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    function processRelativeTime(number, withoutSuffix, key, isFuture) {
+        var format = {
+            m: ['eine Minute', 'einer Minute'],
+            h: ['eine Stunde', 'einer Stunde'],
+            d: ['ein Tag', 'einem Tag'],
+            dd: [number + ' Tage', number + ' Tagen'],
+            w: ['eine Woche', 'einer Woche'],
+            M: ['ein Monat', 'einem Monat'],
+            MM: [number + ' Monate', number + ' Monaten'],
+            y: ['ein Jahr', 'einem Jahr'],
+            yy: [number + ' Jahre', number + ' Jahren'],
+        };
+        return withoutSuffix ? format[key][0] : format[key][1];
+    }
+
+    hooks.defineLocale('de-at', {
+        months: 'Jänner_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split(
+            '_'
+        ),
+        monthsShort: 'Jän._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.'.split(
+            '_'
+        ),
+        monthsParseExact: true,
+        weekdays: 'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split(
+            '_'
+        ),
+        weekdaysShort: 'So._Mo._Di._Mi._Do._Fr._Sa.'.split('_'),
+        weekdaysMin: 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'),
+        weekdaysParseExact: true,
+        longDateFormat: {
+            LT: 'HH:mm',
+            LTS: 'HH:mm:ss',
+            L: 'DD.MM.YYYY',
+            LL: 'D. MMMM YYYY',
+            LLL: 'D. MMMM YYYY HH:mm',
+            LLLL: 'dddd, D. MMMM YYYY HH:mm',
+        },
+        calendar: {
+            sameDay: '[heute um] LT [Uhr]',
+            sameElse: 'L',
+            nextDay: '[morgen um] LT [Uhr]',
+            nextWeek: 'dddd [um] LT [Uhr]',
+            lastDay: '[gestern um] LT [Uhr]',
+            lastWeek: '[letzten] dddd [um] LT [Uhr]',
+        },
+        relativeTime: {
+            future: 'in %s',
+            past: 'vor %s',
+            s: 'ein paar Sekunden',
+            ss: '%d Sekunden',
+            m: processRelativeTime,
+            mm: '%d Minuten',
+            h: processRelativeTime,
+            hh: '%d Stunden',
+            d: processRelativeTime,
+            dd: processRelativeTime,
+            w: processRelativeTime,
+            ww: '%d Wochen',
+            M: processRelativeTime,
+            MM: processRelativeTime,
+            y: processRelativeTime,
+            yy: processRelativeTime,
+        },
+        dayOfMonthOrdinalParse: /\d{1,2}\./,
+        ordinal: '%d.',
+        week: {
+            dow: 1, // Monday is the first day of the week.
+            doy: 4, // The week that contains Jan 4th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    function processRelativeTime$1(number, withoutSuffix, key, isFuture) {
+        var format = {
+            m: ['eine Minute', 'einer Minute'],
+            h: ['eine Stunde', 'einer Stunde'],
+            d: ['ein Tag', 'einem Tag'],
+            dd: [number + ' Tage', number + ' Tagen'],
+            w: ['eine Woche', 'einer Woche'],
+            M: ['ein Monat', 'einem Monat'],
+            MM: [number + ' Monate', number + ' Monaten'],
+            y: ['ein Jahr', 'einem Jahr'],
+            yy: [number + ' Jahre', number + ' Jahren'],
+        };
+        return withoutSuffix ? format[key][0] : format[key][1];
+    }
+
+    hooks.defineLocale('de-ch', {
+        months: 'Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split(
+            '_'
+        ),
+        monthsShort: 'Jan._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.'.split(
+            '_'
+        ),
+        monthsParseExact: true,
+        weekdays: 'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split(
+            '_'
+        ),
+        weekdaysShort: 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'),
+        weekdaysMin: 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'),
+        weekdaysParseExact: true,
+        longDateFormat: {
+            LT: 'HH:mm',
+            LTS: 'HH:mm:ss',
+            L: 'DD.MM.YYYY',
+            LL: 'D. MMMM YYYY',
+            LLL: 'D. MMMM YYYY HH:mm',
+            LLLL: 'dddd, D. MMMM YYYY HH:mm',
+        },
+        calendar: {
+            sameDay: '[heute um] LT [Uhr]',
+            sameElse: 'L',
+            nextDay: '[morgen um] LT [Uhr]',
+            nextWeek: 'dddd [um] LT [Uhr]',
+            lastDay: '[gestern um] LT [Uhr]',
+            lastWeek: '[letzten] dddd [um] LT [Uhr]',
+        },
+        relativeTime: {
+            future: 'in %s',
+            past: 'vor %s',
+            s: 'ein paar Sekunden',
+            ss: '%d Sekunden',
+            m: processRelativeTime$1,
+            mm: '%d Minuten',
+            h: processRelativeTime$1,
+            hh: '%d Stunden',
+            d: processRelativeTime$1,
+            dd: processRelativeTime$1,
+            w: processRelativeTime$1,
+            ww: '%d Wochen',
+            M: processRelativeTime$1,
+            MM: processRelativeTime$1,
+            y: processRelativeTime$1,
+            yy: processRelativeTime$1,
+        },
+        dayOfMonthOrdinalParse: /\d{1,2}\./,
+        ordinal: '%d.',
+        week: {
+            dow: 1, // Monday is the first day of the week.
+            doy: 4, // The week that contains Jan 4th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    function processRelativeTime$2(number, withoutSuffix, key, isFuture) {
+        var format = {
+            m: ['eine Minute', 'einer Minute'],
+            h: ['eine Stunde', 'einer Stunde'],
+            d: ['ein Tag', 'einem Tag'],
+            dd: [number + ' Tage', number + ' Tagen'],
+            w: ['eine Woche', 'einer Woche'],
+            M: ['ein Monat', 'einem Monat'],
+            MM: [number + ' Monate', number + ' Monaten'],
+            y: ['ein Jahr', 'einem Jahr'],
+            yy: [number + ' Jahre', number + ' Jahren'],
+        };
+        return withoutSuffix ? format[key][0] : format[key][1];
+    }
+
+    hooks.defineLocale('de', {
+        months: 'Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split(
+            '_'
+        ),
+        monthsShort: 'Jan._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.'.split(
+            '_'
+        ),
+        monthsParseExact: true,
+        weekdays: 'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split(
+            '_'
+        ),
+        weekdaysShort: 'So._Mo._Di._Mi._Do._Fr._Sa.'.split('_'),
+        weekdaysMin: 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'),
+        weekdaysParseExact: true,
+        longDateFormat: {
+            LT: 'HH:mm',
+            LTS: 'HH:mm:ss',
+            L: 'DD.MM.YYYY',
+            LL: 'D. MMMM YYYY',
+            LLL: 'D. MMMM YYYY HH:mm',
+            LLLL: 'dddd, D. MMMM YYYY HH:mm',
+        },
+        calendar: {
+            sameDay: '[heute um] LT [Uhr]',
+            sameElse: 'L',
+            nextDay: '[morgen um] LT [Uhr]',
+            nextWeek: 'dddd [um] LT [Uhr]',
+            lastDay: '[gestern um] LT [Uhr]',
+            lastWeek: '[letzten] dddd [um] LT [Uhr]',
+        },
+        relativeTime: {
+            future: 'in %s',
+            past: 'vor %s',
+            s: 'ein paar Sekunden',
+            ss: '%d Sekunden',
+            m: processRelativeTime$2,
+            mm: '%d Minuten',
+            h: processRelativeTime$2,
+            hh: '%d Stunden',
+            d: processRelativeTime$2,
+            dd: processRelativeTime$2,
+            w: processRelativeTime$2,
+            ww: '%d Wochen',
+            M: processRelativeTime$2,
+            MM: processRelativeTime$2,
+            y: processRelativeTime$2,
+            yy: processRelativeTime$2,
+        },
+        dayOfMonthOrdinalParse: /\d{1,2}\./,
+        ordinal: '%d.',
+        week: {
+            dow: 1, // Monday is the first day of the week.
+            doy: 4, // The week that contains Jan 4th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    var months$5 = [
+            'ޖެނުއަރީ',
+            'ފެބްރުއަރީ',
+            'މާރިޗު',
+            'އޭޕްރީލު',
+            'މޭ',
+            'ޖޫން',
+            'ޖުލައި',
+            'އޯގަސްޓު',
+            'ސެޕްޓެމްބަރު',
+            'އޮކްޓޯބަރު',
+            'ނޮވެމްބަރު',
+            'ޑިސެމްބަރު',
+        ],
+        weekdays = [
+            'އާދިއްތަ',
+            'ހޯމަ',
+            'އަންގާރަ',
+            'ބުދަ',
+            'ބުރާސްފަތި',
+            'ހުކުރު',
+            'ހޮނިހިރު',
+        ];
+
+    hooks.defineLocale('dv', {
+        months: months$5,
+        monthsShort: months$5,
+        weekdays: weekdays,
+        weekdaysShort: weekdays,
+        weekdaysMin: 'އާދި_ހޯމަ_އަން_ބުދަ_ބުރާ_ހުކު_ހޮނި'.split('_'),
+        longDateFormat: {
+            LT: 'HH:mm',
+            LTS: 'HH:mm:ss',
+            L: 'D/M/YYYY',
+            LL: 'D MMMM YYYY',
+            LLL: 'D MMMM YYYY HH:mm',
+            LLLL: 'dddd D MMMM YYYY HH:mm',
+        },
+        meridiemParse: /މކ|މފ/,
+        isPM: function (input) {
+            return 'މފ' === input;
+        },
+        meridiem: function (hour, minute, isLower) {
+            if (hour < 12) {
+                return 'މކ';
+            } else {
+                return 'މފ';
+            }
+        },
+        calendar: {
+            sameDay: '[މިއަދު] LT',
+            nextDay: '[މާދަމާ] LT',
+            nextWeek: 'dddd LT',
+            lastDay: '[އިއްޔެ] LT',
+            lastWeek: '[ފާއިތުވި] dddd LT',
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: 'ތެރޭގައި %s',
+            past: 'ކުރިން %s',
+            s: 'ސިކުންތުކޮޅެއް',
+            ss: 'd% ސިކުންތު',
+            m: 'މިނިޓެއް',
+            mm: 'މިނިޓު %d',
+            h: 'ގަޑިއިރެއް',
+            hh: 'ގަޑިއިރު %d',
+            d: 'ދުވަހެއް',
+            dd: 'ދުވަސް %d',
+            M: 'މަހެއް',
+            MM: 'މަސް %d',
+            y: 'އަހަރެއް',
+            yy: 'އަހަރު %d',
+        },
+        preparse: function (string) {
+            return string.replace(/،/g, ',');
+        },
+        postformat: function (string) {
+            return string.replace(/,/g, '،');
+        },
+        week: {
+            dow: 7, // Sunday is the first day of the week.
+            doy: 12, // The week that contains Jan 12th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    function isFunction$1(input) {
+        return (
+            (typeof Function !== 'undefined' && input instanceof Function) ||
+            Object.prototype.toString.call(input) === '[object Function]'
+        );
+    }
+
+    hooks.defineLocale('el', {
+        monthsNominativeEl: 'Ιανουάριος_Φεβρουάριος_Μάρτιος_Απρίλιος_Μάιος_Ιούνιος_Ιούλιος_Αύγουστος_Σεπτέμβριος_Οκτώβριος_Νοέμβριος_Δεκέμβριος'.split(
+            '_'
+        ),
+        monthsGenitiveEl: 'Ιανουαρίου_Φεβρουαρίου_Μαρτίου_Απριλίου_Μαΐου_Ιουνίου_Ιουλίου_Αυγούστου_Σεπτεμβρίου_Οκτωβρίου_Νοεμβρίου_Δεκεμβρίου'.split(
+            '_'
+        ),
+        months: function (momentToFormat, format) {
+            if (!momentToFormat) {
+                return this._monthsNominativeEl;
+            } else if (
+                typeof format === 'string' &&
+                /D/.test(format.substring(0, format.indexOf('MMMM')))
+            ) {
+                // if there is a day number before 'MMMM'
+                return this._monthsGenitiveEl[momentToFormat.month()];
+            } else {
+                return this._monthsNominativeEl[momentToFormat.month()];
+            }
+        },
+        monthsShort: 'Ιαν_Φεβ_Μαρ_Απρ_Μαϊ_Ιουν_Ιουλ_Αυγ_Σεπ_Οκτ_Νοε_Δεκ'.split('_'),
+        weekdays: 'Κυριακή_Δευτέρα_Τρίτη_Τετάρτη_Πέμπτη_Παρασκευή_Σάββατο'.split(
+            '_'
+        ),
+        weekdaysShort: 'Κυρ_Δευ_Τρι_Τετ_Πεμ_Παρ_Σαβ'.split('_'),
+        weekdaysMin: 'Κυ_Δε_Τρ_Τε_Πε_Πα_Σα'.split('_'),
+        meridiem: function (hours, minutes, isLower) {
+            if (hours > 11) {
+                return isLower ? 'μμ' : 'ΜΜ';
+            } else {
+                return isLower ? 'πμ' : 'ΠΜ';
+            }
+        },
+        isPM: function (input) {
+            return (input + '').toLowerCase()[0] === 'μ';
+        },
+        meridiemParse: /[ΠΜ]\.?Μ?\.?/i,
+        longDateFormat: {
+            LT: 'h:mm A',
+            LTS: 'h:mm:ss A',
+            L: 'DD/MM/YYYY',
+            LL: 'D MMMM YYYY',
+            LLL: 'D MMMM YYYY h:mm A',
+            LLLL: 'dddd, D MMMM YYYY h:mm A',
+        },
+        calendarEl: {
+            sameDay: '[Σήμερα {}] LT',
+            nextDay: '[Αύριο {}] LT',
+            nextWeek: 'dddd [{}] LT',
+            lastDay: '[Χθες {}] LT',
+            lastWeek: function () {
+                switch (this.day()) {
+                    case 6:
+                        return '[το προηγούμενο] dddd [{}] LT';
+                    default:
+                        return '[την προηγούμενη] dddd [{}] LT';
+                }
+            },
+            sameElse: 'L',
+        },
+        calendar: function (key, mom) {
+            var output = this._calendarEl[key],
+                hours = mom && mom.hours();
+            if (isFunction$1(output)) {
+                output = output.apply(mom);
+            }
+            return output.replace('{}', hours % 12 === 1 ? 'στη' : 'στις');
+        },
+        relativeTime: {
+            future: 'σε %s',
+            past: '%s πριν',
+            s: 'λίγα δευτερόλεπτα',
+            ss: '%d δευτερόλεπτα',
+            m: 'ένα λεπτό',
+            mm: '%d λεπτά',
+            h: 'μία ώρα',
+            hh: '%d ώρες',
+            d: 'μία μέρα',
+            dd: '%d μέρες',
+            M: 'ένας μήνας',
+            MM: '%d μήνες',
+            y: 'ένας χρόνος',
+            yy: '%d χρόνια',
+        },
+        dayOfMonthOrdinalParse: /\d{1,2}η/,
+        ordinal: '%dη',
+        week: {
+            dow: 1, // Monday is the first day of the week.
+            doy: 4, // The week that contains Jan 4st is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    hooks.defineLocale('en-au', {
+        months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split(
+            '_'
+        ),
+        monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),
+        weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split(
+            '_'
+        ),
+        weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),
+        weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),
+        longDateFormat: {
+            LT: 'h:mm A',
+            LTS: 'h:mm:ss A',
+            L: 'DD/MM/YYYY',
+            LL: 'D MMMM YYYY',
+            LLL: 'D MMMM YYYY h:mm A',
+            LLLL: 'dddd, D MMMM YYYY h:mm A',
+        },
+        calendar: {
+            sameDay: '[Today at] LT',
+            nextDay: '[Tomorrow at] LT',
+            nextWeek: 'dddd [at] LT',
+            lastDay: '[Yesterday at] LT',
+            lastWeek: '[Last] dddd [at] LT',
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: 'in %s',
+            past: '%s ago',
+            s: 'a few seconds',
+            ss: '%d seconds',
+            m: 'a minute',
+            mm: '%d minutes',
+            h: 'an hour',
+            hh: '%d hours',
+            d: 'a day',
+            dd: '%d days',
+            M: 'a month',
+            MM: '%d months',
+            y: 'a year',
+            yy: '%d years',
+        },
+        dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/,
+        ordinal: function (number) {
+            var b = number % 10,
+                output =
+                    ~~((number % 100) / 10) === 1
+                        ? 'th'
+                        : b === 1
+                        ? 'st'
+                        : b === 2
+                        ? 'nd'
+                        : b === 3
+                        ? 'rd'
+                        : 'th';
+            return number + output;
+        },
+        week: {
+            dow: 0, // Sunday is the first day of the week.
+            doy: 4, // The week that contains Jan 4th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    hooks.defineLocale('en-ca', {
+        months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split(
+            '_'
+        ),
+        monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),
+        weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split(
+            '_'
+        ),
+        weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),
+        weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),
+        longDateFormat: {
+            LT: 'h:mm A',
+            LTS: 'h:mm:ss A',
+            L: 'YYYY-MM-DD',
+            LL: 'MMMM D, YYYY',
+            LLL: 'MMMM D, YYYY h:mm A',
+            LLLL: 'dddd, MMMM D, YYYY h:mm A',
+        },
+        calendar: {
+            sameDay: '[Today at] LT',
+            nextDay: '[Tomorrow at] LT',
+            nextWeek: 'dddd [at] LT',
+            lastDay: '[Yesterday at] LT',
+            lastWeek: '[Last] dddd [at] LT',
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: 'in %s',
+            past: '%s ago',
+            s: 'a few seconds',
+            ss: '%d seconds',
+            m: 'a minute',
+            mm: '%d minutes',
+            h: 'an hour',
+            hh: '%d hours',
+            d: 'a day',
+            dd: '%d days',
+            M: 'a month',
+            MM: '%d months',
+            y: 'a year',
+            yy: '%d years',
+        },
+        dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/,
+        ordinal: function (number) {
+            var b = number % 10,
+                output =
+                    ~~((number % 100) / 10) === 1
+                        ? 'th'
+                        : b === 1
+                        ? 'st'
+                        : b === 2
+                        ? 'nd'
+                        : b === 3
+                        ? 'rd'
+                        : 'th';
+            return number + output;
+        },
+    });
+
+    //! moment.js locale configuration
+
+    hooks.defineLocale('en-gb', {
+        months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split(
+            '_'
+        ),
+        monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),
+        weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split(
+            '_'
+        ),
+        weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),
+        weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),
+        longDateFormat: {
+            LT: 'HH:mm',
+            LTS: 'HH:mm:ss',
+            L: 'DD/MM/YYYY',
+            LL: 'D MMMM YYYY',
+            LLL: 'D MMMM YYYY HH:mm',
+            LLLL: 'dddd, D MMMM YYYY HH:mm',
+        },
+        calendar: {
+            sameDay: '[Today at] LT',
+            nextDay: '[Tomorrow at] LT',
+            nextWeek: 'dddd [at] LT',
+            lastDay: '[Yesterday at] LT',
+            lastWeek: '[Last] dddd [at] LT',
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: 'in %s',
+            past: '%s ago',
+            s: 'a few seconds',
+            ss: '%d seconds',
+            m: 'a minute',
+            mm: '%d minutes',
+            h: 'an hour',
+            hh: '%d hours',
+            d: 'a day',
+            dd: '%d days',
+            M: 'a month',
+            MM: '%d months',
+            y: 'a year',
+            yy: '%d years',
+        },
+        dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/,
+        ordinal: function (number) {
+            var b = number % 10,
+                output =
+                    ~~((number % 100) / 10) === 1
+                        ? 'th'
+                        : b === 1
+                        ? 'st'
+                        : b === 2
+                        ? 'nd'
+                        : b === 3
+                        ? 'rd'
+                        : 'th';
+            return number + output;
+        },
+        week: {
+            dow: 1, // Monday is the first day of the week.
+            doy: 4, // The week that contains Jan 4th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    hooks.defineLocale('en-ie', {
+        months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split(
+            '_'
+        ),
+        monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),
+        weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split(
+            '_'
+        ),
+        weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),
+        weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),
+        longDateFormat: {
+            LT: 'HH:mm',
+            LTS: 'HH:mm:ss',
+            L: 'DD/MM/YYYY',
+            LL: 'D MMMM YYYY',
+            LLL: 'D MMMM YYYY HH:mm',
+            LLLL: 'dddd D MMMM YYYY HH:mm',
+        },
+        calendar: {
+            sameDay: '[Today at] LT',
+            nextDay: '[Tomorrow at] LT',
+            nextWeek: 'dddd [at] LT',
+            lastDay: '[Yesterday at] LT',
+            lastWeek: '[Last] dddd [at] LT',
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: 'in %s',
+            past: '%s ago',
+            s: 'a few seconds',
+            ss: '%d seconds',
+            m: 'a minute',
+            mm: '%d minutes',
+            h: 'an hour',
+            hh: '%d hours',
+            d: 'a day',
+            dd: '%d days',
+            M: 'a month',
+            MM: '%d months',
+            y: 'a year',
+            yy: '%d years',
+        },
+        dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/,
+        ordinal: function (number) {
+            var b = number % 10,
+                output =
+                    ~~((number % 100) / 10) === 1
+                        ? 'th'
+                        : b === 1
+                        ? 'st'
+                        : b === 2
+                        ? 'nd'
+                        : b === 3
+                        ? 'rd'
+                        : 'th';
+            return number + output;
+        },
+        week: {
+            dow: 1, // Monday is the first day of the week.
+            doy: 4, // The week that contains Jan 4th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    hooks.defineLocale('en-il', {
+        months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split(
+            '_'
+        ),
+        monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),
+        weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split(
+            '_'
+        ),
+        weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),
+        weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),
+        longDateFormat: {
+            LT: 'HH:mm',
+            LTS: 'HH:mm:ss',
+            L: 'DD/MM/YYYY',
+            LL: 'D MMMM YYYY',
+            LLL: 'D MMMM YYYY HH:mm',
+            LLLL: 'dddd, D MMMM YYYY HH:mm',
+        },
+        calendar: {
+            sameDay: '[Today at] LT',
+            nextDay: '[Tomorrow at] LT',
+            nextWeek: 'dddd [at] LT',
+            lastDay: '[Yesterday at] LT',
+            lastWeek: '[Last] dddd [at] LT',
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: 'in %s',
+            past: '%s ago',
+            s: 'a few seconds',
+            ss: '%d seconds',
+            m: 'a minute',
+            mm: '%d minutes',
+            h: 'an hour',
+            hh: '%d hours',
+            d: 'a day',
+            dd: '%d days',
+            M: 'a month',
+            MM: '%d months',
+            y: 'a year',
+            yy: '%d years',
+        },
+        dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/,
+        ordinal: function (number) {
+            var b = number % 10,
+                output =
+                    ~~((number % 100) / 10) === 1
+                        ? 'th'
+                        : b === 1
+                        ? 'st'
+                        : b === 2
+                        ? 'nd'
+                        : b === 3
+                        ? 'rd'
+                        : 'th';
+            return number + output;
+        },
+    });
+
+    //! moment.js locale configuration
+
+    hooks.defineLocale('en-in', {
+        months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split(
+            '_'
+        ),
+        monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),
+        weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split(
+            '_'
+        ),
+        weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),
+        weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),
+        longDateFormat: {
+            LT: 'h:mm A',
+            LTS: 'h:mm:ss A',
+            L: 'DD/MM/YYYY',
+            LL: 'D MMMM YYYY',
+            LLL: 'D MMMM YYYY h:mm A',
+            LLLL: 'dddd, D MMMM YYYY h:mm A',
+        },
+        calendar: {
+            sameDay: '[Today at] LT',
+            nextDay: '[Tomorrow at] LT',
+            nextWeek: 'dddd [at] LT',
+            lastDay: '[Yesterday at] LT',
+            lastWeek: '[Last] dddd [at] LT',
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: 'in %s',
+            past: '%s ago',
+            s: 'a few seconds',
+            ss: '%d seconds',
+            m: 'a minute',
+            mm: '%d minutes',
+            h: 'an hour',
+            hh: '%d hours',
+            d: 'a day',
+            dd: '%d days',
+            M: 'a month',
+            MM: '%d months',
+            y: 'a year',
+            yy: '%d years',
+        },
+        dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/,
+        ordinal: function (number) {
+            var b = number % 10,
+                output =
+                    ~~((number % 100) / 10) === 1
+                        ? 'th'
+                        : b === 1
+                        ? 'st'
+                        : b === 2
+                        ? 'nd'
+                        : b === 3
+                        ? 'rd'
+                        : 'th';
+            return number + output;
+        },
+        week: {
+            dow: 0, // Sunday is the first day of the week.
+            doy: 6, // The week that contains Jan 1st is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    hooks.defineLocale('en-nz', {
+        months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split(
+            '_'
+        ),
+        monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),
+        weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split(
+            '_'
+        ),
+        weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),
+        weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),
+        longDateFormat: {
+            LT: 'h:mm A',
+            LTS: 'h:mm:ss A',
+            L: 'DD/MM/YYYY',
+            LL: 'D MMMM YYYY',
+            LLL: 'D MMMM YYYY h:mm A',
+            LLLL: 'dddd, D MMMM YYYY h:mm A',
+        },
+        calendar: {
+            sameDay: '[Today at] LT',
+            nextDay: '[Tomorrow at] LT',
+            nextWeek: 'dddd [at] LT',
+            lastDay: '[Yesterday at] LT',
+            lastWeek: '[Last] dddd [at] LT',
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: 'in %s',
+            past: '%s ago',
+            s: 'a few seconds',
+            ss: '%d seconds',
+            m: 'a minute',
+            mm: '%d minutes',
+            h: 'an hour',
+            hh: '%d hours',
+            d: 'a day',
+            dd: '%d days',
+            M: 'a month',
+            MM: '%d months',
+            y: 'a year',
+            yy: '%d years',
+        },
+        dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/,
+        ordinal: function (number) {
+            var b = number % 10,
+                output =
+                    ~~((number % 100) / 10) === 1
+                        ? 'th'
+                        : b === 1
+                        ? 'st'
+                        : b === 2
+                        ? 'nd'
+                        : b === 3
+                        ? 'rd'
+                        : 'th';
+            return number + output;
+        },
+        week: {
+            dow: 1, // Monday is the first day of the week.
+            doy: 4, // The week that contains Jan 4th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    hooks.defineLocale('en-sg', {
+        months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split(
+            '_'
+        ),
+        monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),
+        weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split(
+            '_'
+        ),
+        weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),
+        weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),
+        longDateFormat: {
+            LT: 'HH:mm',
+            LTS: 'HH:mm:ss',
+            L: 'DD/MM/YYYY',
+            LL: 'D MMMM YYYY',
+            LLL: 'D MMMM YYYY HH:mm',
+            LLLL: 'dddd, D MMMM YYYY HH:mm',
+        },
+        calendar: {
+            sameDay: '[Today at] LT',
+            nextDay: '[Tomorrow at] LT',
+            nextWeek: 'dddd [at] LT',
+            lastDay: '[Yesterday at] LT',
+            lastWeek: '[Last] dddd [at] LT',
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: 'in %s',
+            past: '%s ago',
+            s: 'a few seconds',
+            ss: '%d seconds',
+            m: 'a minute',
+            mm: '%d minutes',
+            h: 'an hour',
+            hh: '%d hours',
+            d: 'a day',
+            dd: '%d days',
+            M: 'a month',
+            MM: '%d months',
+            y: 'a year',
+            yy: '%d years',
+        },
+        dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/,
+        ordinal: function (number) {
+            var b = number % 10,
+                output =
+                    ~~((number % 100) / 10) === 1
+                        ? 'th'
+                        : b === 1
+                        ? 'st'
+                        : b === 2
+                        ? 'nd'
+                        : b === 3
+                        ? 'rd'
+                        : 'th';
+            return number + output;
+        },
+        week: {
+            dow: 1, // Monday is the first day of the week.
+            doy: 4, // The week that contains Jan 4th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    hooks.defineLocale('eo', {
+        months: 'januaro_februaro_marto_aprilo_majo_junio_julio_aŭgusto_septembro_oktobro_novembro_decembro'.split(
+            '_'
+        ),
+        monthsShort: 'jan_feb_mart_apr_maj_jun_jul_aŭg_sept_okt_nov_dec'.split('_'),
+        weekdays: 'dimanĉo_lundo_mardo_merkredo_ĵaŭdo_vendredo_sabato'.split('_'),
+        weekdaysShort: 'dim_lun_mard_merk_ĵaŭ_ven_sab'.split('_'),
+        weekdaysMin: 'di_lu_ma_me_ĵa_ve_sa'.split('_'),
+        longDateFormat: {
+            LT: 'HH:mm',
+            LTS: 'HH:mm:ss',
+            L: 'YYYY-MM-DD',
+            LL: '[la] D[-an de] MMMM, YYYY',
+            LLL: '[la] D[-an de] MMMM, YYYY HH:mm',
+            LLLL: 'dddd[n], [la] D[-an de] MMMM, YYYY HH:mm',
+            llll: 'ddd, [la] D[-an de] MMM, YYYY HH:mm',
+        },
+        meridiemParse: /[ap]\.t\.m/i,
+        isPM: function (input) {
+            return input.charAt(0).toLowerCase() === 'p';
+        },
+        meridiem: function (hours, minutes, isLower) {
+            if (hours > 11) {
+                return isLower ? 'p.t.m.' : 'P.T.M.';
+            } else {
+                return isLower ? 'a.t.m.' : 'A.T.M.';
+            }
+        },
+        calendar: {
+            sameDay: '[Hodiaŭ je] LT',
+            nextDay: '[Morgaŭ je] LT',
+            nextWeek: 'dddd[n je] LT',
+            lastDay: '[Hieraŭ je] LT',
+            lastWeek: '[pasintan] dddd[n je] LT',
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: 'post %s',
+            past: 'antaŭ %s',
+            s: 'kelkaj sekundoj',
+            ss: '%d sekundoj',
+            m: 'unu minuto',
+            mm: '%d minutoj',
+            h: 'unu horo',
+            hh: '%d horoj',
+            d: 'unu tago', //ne 'diurno', ĉar estas uzita por proksimumo
+            dd: '%d tagoj',
+            M: 'unu monato',
+            MM: '%d monatoj',
+            y: 'unu jaro',
+            yy: '%d jaroj',
+        },
+        dayOfMonthOrdinalParse: /\d{1,2}a/,
+        ordinal: '%da',
+        week: {
+            dow: 1, // Monday is the first day of the week.
+            doy: 7, // The week that contains Jan 7th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    var monthsShortDot = 'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split(
+            '_'
+        ),
+        monthsShort$1 = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_'),
+        monthsParse$2 = [
+            /^ene/i,
+            /^feb/i,
+            /^mar/i,
+            /^abr/i,
+            /^may/i,
+            /^jun/i,
+            /^jul/i,
+            /^ago/i,
+            /^sep/i,
+            /^oct/i,
+            /^nov/i,
+            /^dic/i,
+        ],
+        monthsRegex$3 = /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i;
+
+    hooks.defineLocale('es-do', {
+        months: 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split(
+            '_'
+        ),
+        monthsShort: function (m, format) {
+            if (!m) {
+                return monthsShortDot;
+            } else if (/-MMM-/.test(format)) {
+                return monthsShort$1[m.month()];
+            } else {
+                return monthsShortDot[m.month()];
+            }
+        },
+        monthsRegex: monthsRegex$3,
+        monthsShortRegex: monthsRegex$3,
+        monthsStrictRegex: /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,
+        monthsShortStrictRegex: /^(ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i,
+        monthsParse: monthsParse$2,
+        longMonthsParse: monthsParse$2,
+        shortMonthsParse: monthsParse$2,
+        weekdays: 'domingo_lunes_martes_miércoles_jueves_viernes_sábado'.split('_'),
+        weekdaysShort: 'dom._lun._mar._mié._jue._vie._sáb.'.split('_'),
+        weekdaysMin: 'do_lu_ma_mi_ju_vi_sá'.split('_'),
+        weekdaysParseExact: true,
+        longDateFormat: {
+            LT: 'h:mm A',
+            LTS: 'h:mm:ss A',
+            L: 'DD/MM/YYYY',
+            LL: 'D [de] MMMM [de] YYYY',
+            LLL: 'D [de] MMMM [de] YYYY h:mm A',
+            LLLL: 'dddd, D [de] MMMM [de] YYYY h:mm A',
+        },
+        calendar: {
+            sameDay: function () {
+                return '[hoy a la' + (this.hours() !== 1 ? 's' : '') + '] LT';
+            },
+            nextDay: function () {
+                return '[mañana a la' + (this.hours() !== 1 ? 's' : '') + '] LT';
+            },
+            nextWeek: function () {
+                return 'dddd [a la' + (this.hours() !== 1 ? 's' : '') + '] LT';
+            },
+            lastDay: function () {
+                return '[ayer a la' + (this.hours() !== 1 ? 's' : '') + '] LT';
+            },
+            lastWeek: function () {
+                return (
+                    '[el] dddd [pasado a la' +
+                    (this.hours() !== 1 ? 's' : '') +
+                    '] LT'
+                );
+            },
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: 'en %s',
+            past: 'hace %s',
+            s: 'unos segundos',
+            ss: '%d segundos',
+            m: 'un minuto',
+            mm: '%d minutos',
+            h: 'una hora',
+            hh: '%d horas',
+            d: 'un día',
+            dd: '%d días',
+            M: 'un mes',
+            MM: '%d meses',
+            y: 'un año',
+            yy: '%d años',
+        },
+        dayOfMonthOrdinalParse: /\d{1,2}º/,
+        ordinal: '%dº',
+        week: {
+            dow: 1, // Monday is the first day of the week.
+            doy: 4, // The week that contains Jan 4th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    var monthsShortDot$1 = 'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split(
+            '_'
+        ),
+        monthsShort$2 = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_'),
+        monthsParse$3 = [
+            /^ene/i,
+            /^feb/i,
+            /^mar/i,
+            /^abr/i,
+            /^may/i,
+            /^jun/i,
+            /^jul/i,
+            /^ago/i,
+            /^sep/i,
+            /^oct/i,
+            /^nov/i,
+            /^dic/i,
+        ],
+        monthsRegex$4 = /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i;
+
+    hooks.defineLocale('es-us', {
+        months: 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split(
+            '_'
+        ),
+        monthsShort: function (m, format) {
+            if (!m) {
+                return monthsShortDot$1;
+            } else if (/-MMM-/.test(format)) {
+                return monthsShort$2[m.month()];
+            } else {
+                return monthsShortDot$1[m.month()];
+            }
+        },
+        monthsRegex: monthsRegex$4,
+        monthsShortRegex: monthsRegex$4,
+        monthsStrictRegex: /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,
+        monthsShortStrictRegex: /^(ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i,
+        monthsParse: monthsParse$3,
+        longMonthsParse: monthsParse$3,
+        shortMonthsParse: monthsParse$3,
+        weekdays: 'domingo_lunes_martes_miércoles_jueves_viernes_sábado'.split('_'),
+        weekdaysShort: 'dom._lun._mar._mié._jue._vie._sáb.'.split('_'),
+        weekdaysMin: 'do_lu_ma_mi_ju_vi_sá'.split('_'),
+        weekdaysParseExact: true,
+        longDateFormat: {
+            LT: 'h:mm A',
+            LTS: 'h:mm:ss A',
+            L: 'MM/DD/YYYY',
+            LL: 'D [de] MMMM [de] YYYY',
+            LLL: 'D [de] MMMM [de] YYYY h:mm A',
+            LLLL: 'dddd, D [de] MMMM [de] YYYY h:mm A',
+        },
+        calendar: {
+            sameDay: function () {
+                return '[hoy a la' + (this.hours() !== 1 ? 's' : '') + '] LT';
+            },
+            nextDay: function () {
+                return '[mañana a la' + (this.hours() !== 1 ? 's' : '') + '] LT';
+            },
+            nextWeek: function () {
+                return 'dddd [a la' + (this.hours() !== 1 ? 's' : '') + '] LT';
+            },
+            lastDay: function () {
+                return '[ayer a la' + (this.hours() !== 1 ? 's' : '') + '] LT';
+            },
+            lastWeek: function () {
+                return (
+                    '[el] dddd [pasado a la' +
+                    (this.hours() !== 1 ? 's' : '') +
+                    '] LT'
+                );
+            },
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: 'en %s',
+            past: 'hace %s',
+            s: 'unos segundos',
+            ss: '%d segundos',
+            m: 'un minuto',
+            mm: '%d minutos',
+            h: 'una hora',
+            hh: '%d horas',
+            d: 'un día',
+            dd: '%d días',
+            M: 'un mes',
+            MM: '%d meses',
+            y: 'un año',
+            yy: '%d años',
+        },
+        dayOfMonthOrdinalParse: /\d{1,2}º/,
+        ordinal: '%dº',
+        week: {
+            dow: 0, // Sunday is the first day of the week.
+            doy: 6, // The week that contains Jan 6th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    var monthsShortDot$2 = 'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split(
+            '_'
+        ),
+        monthsShort$3 = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_'),
+        monthsParse$4 = [
+            /^ene/i,
+            /^feb/i,
+            /^mar/i,
+            /^abr/i,
+            /^may/i,
+            /^jun/i,
+            /^jul/i,
+            /^ago/i,
+            /^sep/i,
+            /^oct/i,
+            /^nov/i,
+            /^dic/i,
+        ],
+        monthsRegex$5 = /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i;
+
+    hooks.defineLocale('es', {
+        months: 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split(
+            '_'
+        ),
+        monthsShort: function (m, format) {
+            if (!m) {
+                return monthsShortDot$2;
+            } else if (/-MMM-/.test(format)) {
+                return monthsShort$3[m.month()];
+            } else {
+                return monthsShortDot$2[m.month()];
+            }
+        },
+        monthsRegex: monthsRegex$5,
+        monthsShortRegex: monthsRegex$5,
+        monthsStrictRegex: /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,
+        monthsShortStrictRegex: /^(ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i,
+        monthsParse: monthsParse$4,
+        longMonthsParse: monthsParse$4,
+        shortMonthsParse: monthsParse$4,
+        weekdays: 'domingo_lunes_martes_miércoles_jueves_viernes_sábado'.split('_'),
+        weekdaysShort: 'dom._lun._mar._mié._jue._vie._sáb.'.split('_'),
+        weekdaysMin: 'do_lu_ma_mi_ju_vi_sá'.split('_'),
+        weekdaysParseExact: true,
+        longDateFormat: {
+            LT: 'H:mm',
+            LTS: 'H:mm:ss',
+            L: 'DD/MM/YYYY',
+            LL: 'D [de] MMMM [de] YYYY',
+            LLL: 'D [de] MMMM [de] YYYY H:mm',
+            LLLL: 'dddd, D [de] MMMM [de] YYYY H:mm',
+        },
+        calendar: {
+            sameDay: function () {
+                return '[hoy a la' + (this.hours() !== 1 ? 's' : '') + '] LT';
+            },
+            nextDay: function () {
+                return '[mañana a la' + (this.hours() !== 1 ? 's' : '') + '] LT';
+            },
+            nextWeek: function () {
+                return 'dddd [a la' + (this.hours() !== 1 ? 's' : '') + '] LT';
+            },
+            lastDay: function () {
+                return '[ayer a la' + (this.hours() !== 1 ? 's' : '') + '] LT';
+            },
+            lastWeek: function () {
+                return (
+                    '[el] dddd [pasado a la' +
+                    (this.hours() !== 1 ? 's' : '') +
+                    '] LT'
+                );
+            },
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: 'en %s',
+            past: 'hace %s',
+            s: 'unos segundos',
+            ss: '%d segundos',
+            m: 'un minuto',
+            mm: '%d minutos',
+            h: 'una hora',
+            hh: '%d horas',
+            d: 'un día',
+            dd: '%d días',
+            M: 'un mes',
+            MM: '%d meses',
+            y: 'un año',
+            yy: '%d años',
+        },
+        dayOfMonthOrdinalParse: /\d{1,2}º/,
+        ordinal: '%dº',
+        week: {
+            dow: 1, // Monday is the first day of the week.
+            doy: 4, // The week that contains Jan 4th is the first week of the year.
+        },
+        invalidDate: 'Fecha inválida',
+    });
+
+    //! moment.js locale configuration
+
+    function processRelativeTime$3(number, withoutSuffix, key, isFuture) {
+        var format = {
+            s: ['mõne sekundi', 'mõni sekund', 'paar sekundit'],
+            ss: [number + 'sekundi', number + 'sekundit'],
+            m: ['ühe minuti', 'üks minut'],
+            mm: [number + ' minuti', number + ' minutit'],
+            h: ['ühe tunni', 'tund aega', 'üks tund'],
+            hh: [number + ' tunni', number + ' tundi'],
+            d: ['ühe päeva', 'üks päev'],
+            M: ['kuu aja', 'kuu aega', 'üks kuu'],
+            MM: [number + ' kuu', number + ' kuud'],
+            y: ['ühe aasta', 'aasta', 'üks aasta'],
+            yy: [number + ' aasta', number + ' aastat'],
+        };
+        if (withoutSuffix) {
+            return format[key][2] ? format[key][2] : format[key][1];
+        }
+        return isFuture ? format[key][0] : format[key][1];
+    }
+
+    hooks.defineLocale('et', {
+        months: 'jaanuar_veebruar_märts_aprill_mai_juuni_juuli_august_september_oktoober_november_detsember'.split(
+            '_'
+        ),
+        monthsShort: 'jaan_veebr_märts_apr_mai_juuni_juuli_aug_sept_okt_nov_dets'.split(
+            '_'
+        ),
+        weekdays: 'pühapäev_esmaspäev_teisipäev_kolmapäev_neljapäev_reede_laupäev'.split(
+            '_'
+        ),
+        weekdaysShort: 'P_E_T_K_N_R_L'.split('_'),
+        weekdaysMin: 'P_E_T_K_N_R_L'.split('_'),
+        longDateFormat: {
+            LT: 'H:mm',
+            LTS: 'H:mm:ss',
+            L: 'DD.MM.YYYY',
+            LL: 'D. MMMM YYYY',
+            LLL: 'D. MMMM YYYY H:mm',
+            LLLL: 'dddd, D. MMMM YYYY H:mm',
+        },
+        calendar: {
+            sameDay: '[Täna,] LT',
+            nextDay: '[Homme,] LT',
+            nextWeek: '[Järgmine] dddd LT',
+            lastDay: '[Eile,] LT',
+            lastWeek: '[Eelmine] dddd LT',
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: '%s pärast',
+            past: '%s tagasi',
+            s: processRelativeTime$3,
+            ss: processRelativeTime$3,
+            m: processRelativeTime$3,
+            mm: processRelativeTime$3,
+            h: processRelativeTime$3,
+            hh: processRelativeTime$3,
+            d: processRelativeTime$3,
+            dd: '%d päeva',
+            M: processRelativeTime$3,
+            MM: processRelativeTime$3,
+            y: processRelativeTime$3,
+            yy: processRelativeTime$3,
+        },
+        dayOfMonthOrdinalParse: /\d{1,2}\./,
+        ordinal: '%d.',
+        week: {
+            dow: 1, // Monday is the first day of the week.
+            doy: 4, // The week that contains Jan 4th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    hooks.defineLocale('eu', {
+        months: 'urtarrila_otsaila_martxoa_apirila_maiatza_ekaina_uztaila_abuztua_iraila_urria_azaroa_abendua'.split(
+            '_'
+        ),
+        monthsShort: 'urt._ots._mar._api._mai._eka._uzt._abu._ira._urr._aza._abe.'.split(
+            '_'
+        ),
+        monthsParseExact: true,
+        weekdays: 'igandea_astelehena_asteartea_asteazkena_osteguna_ostirala_larunbata'.split(
+            '_'
+        ),
+        weekdaysShort: 'ig._al._ar._az._og._ol._lr.'.split('_'),
+        weekdaysMin: 'ig_al_ar_az_og_ol_lr'.split('_'),
+        weekdaysParseExact: true,
+        longDateFormat: {
+            LT: 'HH:mm',
+            LTS: 'HH:mm:ss',
+            L: 'YYYY-MM-DD',
+            LL: 'YYYY[ko] MMMM[ren] D[a]',
+            LLL: 'YYYY[ko] MMMM[ren] D[a] HH:mm',
+            LLLL: 'dddd, YYYY[ko] MMMM[ren] D[a] HH:mm',
+            l: 'YYYY-M-D',
+            ll: 'YYYY[ko] MMM D[a]',
+            lll: 'YYYY[ko] MMM D[a] HH:mm',
+            llll: 'ddd, YYYY[ko] MMM D[a] HH:mm',
+        },
+        calendar: {
+            sameDay: '[gaur] LT[etan]',
+            nextDay: '[bihar] LT[etan]',
+            nextWeek: 'dddd LT[etan]',
+            lastDay: '[atzo] LT[etan]',
+            lastWeek: '[aurreko] dddd LT[etan]',
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: '%s barru',
+            past: 'duela %s',
+            s: 'segundo batzuk',
+            ss: '%d segundo',
+            m: 'minutu bat',
+            mm: '%d minutu',
+            h: 'ordu bat',
+            hh: '%d ordu',
+            d: 'egun bat',
+            dd: '%d egun',
+            M: 'hilabete bat',
+            MM: '%d hilabete',
+            y: 'urte bat',
+            yy: '%d urte',
+        },
+        dayOfMonthOrdinalParse: /\d{1,2}\./,
+        ordinal: '%d.',
+        week: {
+            dow: 1, // Monday is the first day of the week.
+            doy: 7, // The week that contains Jan 7th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    var symbolMap$5 = {
+            '1': '۱',
+            '2': '۲',
+            '3': '۳',
+            '4': '۴',
+            '5': '۵',
+            '6': '۶',
+            '7': '۷',
+            '8': '۸',
+            '9': '۹',
+            '0': '۰',
+        },
+        numberMap$4 = {
+            '۱': '1',
+            '۲': '2',
+            '۳': '3',
+            '۴': '4',
+            '۵': '5',
+            '۶': '6',
+            '۷': '7',
+            '۸': '8',
+            '۹': '9',
+            '۰': '0',
+        };
+
+    hooks.defineLocale('fa', {
+        months: 'ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر'.split(
+            '_'
+        ),
+        monthsShort: 'ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر'.split(
+            '_'
+        ),
+        weekdays: 'یک\u200cشنبه_دوشنبه_سه\u200cشنبه_چهارشنبه_پنج\u200cشنبه_جمعه_شنبه'.split(
+            '_'
+        ),
+        weekdaysShort: 'یک\u200cشنبه_دوشنبه_سه\u200cشنبه_چهارشنبه_پنج\u200cشنبه_جمعه_شنبه'.split(
+            '_'
+        ),
+        weekdaysMin: 'ی_د_س_چ_پ_ج_ش'.split('_'),
+        weekdaysParseExact: true,
+        longDateFormat: {
+            LT: 'HH:mm',
+            LTS: 'HH:mm:ss',
+            L: 'DD/MM/YYYY',
+            LL: 'D MMMM YYYY',
+            LLL: 'D MMMM YYYY HH:mm',
+            LLLL: 'dddd, D MMMM YYYY HH:mm',
+        },
+        meridiemParse: /قبل از ظهر|بعد از ظهر/,
+        isPM: function (input) {
+            return /بعد از ظهر/.test(input);
+        },
+        meridiem: function (hour, minute, isLower) {
+            if (hour < 12) {
+                return 'قبل از ظهر';
+            } else {
+                return 'بعد از ظهر';
+            }
+        },
+        calendar: {
+            sameDay: '[امروز ساعت] LT',
+            nextDay: '[فردا ساعت] LT',
+            nextWeek: 'dddd [ساعت] LT',
+            lastDay: '[دیروز ساعت] LT',
+            lastWeek: 'dddd [پیش] [ساعت] LT',
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: 'در %s',
+            past: '%s پیش',
+            s: 'چند ثانیه',
+            ss: '%d ثانیه',
+            m: 'یک دقیقه',
+            mm: '%d دقیقه',
+            h: 'یک ساعت',
+            hh: '%d ساعت',
+            d: 'یک روز',
+            dd: '%d روز',
+            M: 'یک ماه',
+            MM: '%d ماه',
+            y: 'یک سال',
+            yy: '%d سال',
+        },
+        preparse: function (string) {
+            return string
+                .replace(/[۰-۹]/g, function (match) {
+                    return numberMap$4[match];
+                })
+                .replace(/،/g, ',');
+        },
+        postformat: function (string) {
+            return string
+                .replace(/\d/g, function (match) {
+                    return symbolMap$5[match];
+                })
+                .replace(/,/g, '،');
+        },
+        dayOfMonthOrdinalParse: /\d{1,2}م/,
+        ordinal: '%dم',
+        week: {
+            dow: 6, // Saturday is the first day of the week.
+            doy: 12, // The week that contains Jan 12th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    var numbersPast = 'nolla yksi kaksi kolme neljä viisi kuusi seitsemän kahdeksan yhdeksän'.split(
+            ' '
+        ),
+        numbersFuture = [
+            'nolla',
+            'yhden',
+            'kahden',
+            'kolmen',
+            'neljän',
+            'viiden',
+            'kuuden',
+            numbersPast[7],
+            numbersPast[8],
+            numbersPast[9],
+        ];
+    function translate$2(number, withoutSuffix, key, isFuture) {
+        var result = '';
+        switch (key) {
+            case 's':
+                return isFuture ? 'muutaman sekunnin' : 'muutama sekunti';
+            case 'ss':
+                result = isFuture ? 'sekunnin' : 'sekuntia';
+                break;
+            case 'm':
+                return isFuture ? 'minuutin' : 'minuutti';
+            case 'mm':
+                result = isFuture ? 'minuutin' : 'minuuttia';
+                break;
+            case 'h':
+                return isFuture ? 'tunnin' : 'tunti';
+            case 'hh':
+                result = isFuture ? 'tunnin' : 'tuntia';
+                break;
+            case 'd':
+                return isFuture ? 'päivän' : 'päivä';
+            case 'dd':
+                result = isFuture ? 'päivän' : 'päivää';
+                break;
+            case 'M':
+                return isFuture ? 'kuukauden' : 'kuukausi';
+            case 'MM':
+                result = isFuture ? 'kuukauden' : 'kuukautta';
+                break;
+            case 'y':
+                return isFuture ? 'vuoden' : 'vuosi';
+            case 'yy':
+                result = isFuture ? 'vuoden' : 'vuotta';
+                break;
+        }
+        result = verbalNumber(number, isFuture) + ' ' + result;
+        return result;
+    }
+    function verbalNumber(number, isFuture) {
+        return number < 10
+            ? isFuture
+                ? numbersFuture[number]
+                : numbersPast[number]
+            : number;
+    }
+
+    hooks.defineLocale('fi', {
+        months: 'tammikuu_helmikuu_maaliskuu_huhtikuu_toukokuu_kesäkuu_heinäkuu_elokuu_syyskuu_lokakuu_marraskuu_joulukuu'.split(
+            '_'
+        ),
+        monthsShort: 'tammi_helmi_maalis_huhti_touko_kesä_heinä_elo_syys_loka_marras_joulu'.split(
+            '_'
+        ),
+        weekdays: 'sunnuntai_maanantai_tiistai_keskiviikko_torstai_perjantai_lauantai'.split(
+            '_'
+        ),
+        weekdaysShort: 'su_ma_ti_ke_to_pe_la'.split('_'),
+        weekdaysMin: 'su_ma_ti_ke_to_pe_la'.split('_'),
+        longDateFormat: {
+            LT: 'HH.mm',
+            LTS: 'HH.mm.ss',
+            L: 'DD.MM.YYYY',
+            LL: 'Do MMMM[ta] YYYY',
+            LLL: 'Do MMMM[ta] YYYY, [klo] HH.mm',
+            LLLL: 'dddd, Do MMMM[ta] YYYY, [klo] HH.mm',
+            l: 'D.M.YYYY',
+            ll: 'Do MMM YYYY',
+            lll: 'Do MMM YYYY, [klo] HH.mm',
+            llll: 'ddd, Do MMM YYYY, [klo] HH.mm',
+        },
+        calendar: {
+            sameDay: '[tänään] [klo] LT',
+            nextDay: '[huomenna] [klo] LT',
+            nextWeek: 'dddd [klo] LT',
+            lastDay: '[eilen] [klo] LT',
+            lastWeek: '[viime] dddd[na] [klo] LT',
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: '%s päästä',
+            past: '%s sitten',
+            s: translate$2,
+            ss: translate$2,
+            m: translate$2,
+            mm: translate$2,
+            h: translate$2,
+            hh: translate$2,
+            d: translate$2,
+            dd: translate$2,
+            M: translate$2,
+            MM: translate$2,
+            y: translate$2,
+            yy: translate$2,
+        },
+        dayOfMonthOrdinalParse: /\d{1,2}\./,
+        ordinal: '%d.',
+        week: {
+            dow: 1, // Monday is the first day of the week.
+            doy: 4, // The week that contains Jan 4th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    hooks.defineLocale('fil', {
+        months: 'Enero_Pebrero_Marso_Abril_Mayo_Hunyo_Hulyo_Agosto_Setyembre_Oktubre_Nobyembre_Disyembre'.split(
+            '_'
+        ),
+        monthsShort: 'Ene_Peb_Mar_Abr_May_Hun_Hul_Ago_Set_Okt_Nob_Dis'.split('_'),
+        weekdays: 'Linggo_Lunes_Martes_Miyerkules_Huwebes_Biyernes_Sabado'.split(
+            '_'
+        ),
+        weekdaysShort: 'Lin_Lun_Mar_Miy_Huw_Biy_Sab'.split('_'),
+        weekdaysMin: 'Li_Lu_Ma_Mi_Hu_Bi_Sab'.split('_'),
+        longDateFormat: {
+            LT: 'HH:mm',
+            LTS: 'HH:mm:ss',
+            L: 'MM/D/YYYY',
+            LL: 'MMMM D, YYYY',
+            LLL: 'MMMM D, YYYY HH:mm',
+            LLLL: 'dddd, MMMM DD, YYYY HH:mm',
+        },
+        calendar: {
+            sameDay: 'LT [ngayong araw]',
+            nextDay: '[Bukas ng] LT',
+            nextWeek: 'LT [sa susunod na] dddd',
+            lastDay: 'LT [kahapon]',
+            lastWeek: 'LT [noong nakaraang] dddd',
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: 'sa loob ng %s',
+            past: '%s ang nakalipas',
+            s: 'ilang segundo',
+            ss: '%d segundo',
+            m: 'isang minuto',
+            mm: '%d minuto',
+            h: 'isang oras',
+            hh: '%d oras',
+            d: 'isang araw',
+            dd: '%d araw',
+            M: 'isang buwan',
+            MM: '%d buwan',
+            y: 'isang taon',
+            yy: '%d taon',
+        },
+        dayOfMonthOrdinalParse: /\d{1,2}/,
+        ordinal: function (number) {
+            return number;
+        },
+        week: {
+            dow: 1, // Monday is the first day of the week.
+            doy: 4, // The week that contains Jan 4th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    hooks.defineLocale('fo', {
+        months: 'januar_februar_mars_apríl_mai_juni_juli_august_september_oktober_november_desember'.split(
+            '_'
+        ),
+        monthsShort: 'jan_feb_mar_apr_mai_jun_jul_aug_sep_okt_nov_des'.split('_'),
+        weekdays: 'sunnudagur_mánadagur_týsdagur_mikudagur_hósdagur_fríggjadagur_leygardagur'.split(
+            '_'
+        ),
+        weekdaysShort: 'sun_mán_týs_mik_hós_frí_ley'.split('_'),
+        weekdaysMin: 'su_má_tý_mi_hó_fr_le'.split('_'),
+        longDateFormat: {
+            LT: 'HH:mm',
+            LTS: 'HH:mm:ss',
+            L: 'DD/MM/YYYY',
+            LL: 'D MMMM YYYY',
+            LLL: 'D MMMM YYYY HH:mm',
+            LLLL: 'dddd D. MMMM, YYYY HH:mm',
+        },
+        calendar: {
+            sameDay: '[Í dag kl.] LT',
+            nextDay: '[Í morgin kl.] LT',
+            nextWeek: 'dddd [kl.] LT',
+            lastDay: '[Í gjár kl.] LT',
+            lastWeek: '[síðstu] dddd [kl] LT',
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: 'um %s',
+            past: '%s síðani',
+            s: 'fá sekund',
+            ss: '%d sekundir',
+            m: 'ein minuttur',
+            mm: '%d minuttir',
+            h: 'ein tími',
+            hh: '%d tímar',
+            d: 'ein dagur',
+            dd: '%d dagar',
+            M: 'ein mánaður',
+            MM: '%d mánaðir',
+            y: 'eitt ár',
+            yy: '%d ár',
+        },
+        dayOfMonthOrdinalParse: /\d{1,2}\./,
+        ordinal: '%d.',
+        week: {
+            dow: 1, // Monday is the first day of the week.
+            doy: 4, // The week that contains Jan 4th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    hooks.defineLocale('fr-ca', {
+        months: 'janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre'.split(
+            '_'
+        ),
+        monthsShort: 'janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.'.split(
+            '_'
+        ),
+        monthsParseExact: true,
+        weekdays: 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'),
+        weekdaysShort: 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'),
+        weekdaysMin: 'di_lu_ma_me_je_ve_sa'.split('_'),
+        weekdaysParseExact: true,
+        longDateFormat: {
+            LT: 'HH:mm',
+            LTS: 'HH:mm:ss',
+            L: 'YYYY-MM-DD',
+            LL: 'D MMMM YYYY',
+            LLL: 'D MMMM YYYY HH:mm',
+            LLLL: 'dddd D MMMM YYYY HH:mm',
+        },
+        calendar: {
+            sameDay: '[Aujourd’hui à] LT',
+            nextDay: '[Demain à] LT',
+            nextWeek: 'dddd [à] LT',
+            lastDay: '[Hier à] LT',
+            lastWeek: 'dddd [dernier à] LT',
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: 'dans %s',
+            past: 'il y a %s',
+            s: 'quelques secondes',
+            ss: '%d secondes',
+            m: 'une minute',
+            mm: '%d minutes',
+            h: 'une heure',
+            hh: '%d heures',
+            d: 'un jour',
+            dd: '%d jours',
+            M: 'un mois',
+            MM: '%d mois',
+            y: 'un an',
+            yy: '%d ans',
+        },
+        dayOfMonthOrdinalParse: /\d{1,2}(er|e)/,
+        ordinal: function (number, period) {
+            switch (period) {
+                // Words with masculine grammatical gender: mois, trimestre, jour
+                default:
+                case 'M':
+                case 'Q':
+                case 'D':
+                case 'DDD':
+                case 'd':
+                    return number + (number === 1 ? 'er' : 'e');
+
+                // Words with feminine grammatical gender: semaine
+                case 'w':
+                case 'W':
+                    return number + (number === 1 ? 're' : 'e');
+            }
+        },
+    });
+
+    //! moment.js locale configuration
+
+    hooks.defineLocale('fr-ch', {
+        months: 'janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre'.split(
+            '_'
+        ),
+        monthsShort: 'janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.'.split(
+            '_'
+        ),
+        monthsParseExact: true,
+        weekdays: 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'),
+        weekdaysShort: 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'),
+        weekdaysMin: 'di_lu_ma_me_je_ve_sa'.split('_'),
+        weekdaysParseExact: true,
+        longDateFormat: {
+            LT: 'HH:mm',
+            LTS: 'HH:mm:ss',
+            L: 'DD.MM.YYYY',
+            LL: 'D MMMM YYYY',
+            LLL: 'D MMMM YYYY HH:mm',
+            LLLL: 'dddd D MMMM YYYY HH:mm',
+        },
+        calendar: {
+            sameDay: '[Aujourd’hui à] LT',
+            nextDay: '[Demain à] LT',
+            nextWeek: 'dddd [à] LT',
+            lastDay: '[Hier à] LT',
+            lastWeek: 'dddd [dernier à] LT',
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: 'dans %s',
+            past: 'il y a %s',
+            s: 'quelques secondes',
+            ss: '%d secondes',
+            m: 'une minute',
+            mm: '%d minutes',
+            h: 'une heure',
+            hh: '%d heures',
+            d: 'un jour',
+            dd: '%d jours',
+            M: 'un mois',
+            MM: '%d mois',
+            y: 'un an',
+            yy: '%d ans',
+        },
+        dayOfMonthOrdinalParse: /\d{1,2}(er|e)/,
+        ordinal: function (number, period) {
+            switch (period) {
+                // Words with masculine grammatical gender: mois, trimestre, jour
+                default:
+                case 'M':
+                case 'Q':
+                case 'D':
+                case 'DDD':
+                case 'd':
+                    return number + (number === 1 ? 'er' : 'e');
+
+                // Words with feminine grammatical gender: semaine
+                case 'w':
+                case 'W':
+                    return number + (number === 1 ? 're' : 'e');
+            }
+        },
+        week: {
+            dow: 1, // Monday is the first day of the week.
+            doy: 4, // The week that contains Jan 4th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    var monthsStrictRegex$1 = /^(janvier|février|mars|avril|mai|juin|juillet|août|septembre|octobre|novembre|décembre)/i,
+        monthsShortStrictRegex$1 = /(janv\.?|févr\.?|mars|avr\.?|mai|juin|juil\.?|août|sept\.?|oct\.?|nov\.?|déc\.?)/i,
+        monthsRegex$6 = /(janv\.?|févr\.?|mars|avr\.?|mai|juin|juil\.?|août|sept\.?|oct\.?|nov\.?|déc\.?|janvier|février|mars|avril|mai|juin|juillet|août|septembre|octobre|novembre|décembre)/i,
+        monthsParse$5 = [
+            /^janv/i,
+            /^févr/i,
+            /^mars/i,
+            /^avr/i,
+            /^mai/i,
+            /^juin/i,
+            /^juil/i,
+            /^août/i,
+            /^sept/i,
+            /^oct/i,
+            /^nov/i,
+            /^déc/i,
+        ];
+
+    hooks.defineLocale('fr', {
+        months: 'janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre'.split(
+            '_'
+        ),
+        monthsShort: 'janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.'.split(
+            '_'
+        ),
+        monthsRegex: monthsRegex$6,
+        monthsShortRegex: monthsRegex$6,
+        monthsStrictRegex: monthsStrictRegex$1,
+        monthsShortStrictRegex: monthsShortStrictRegex$1,
+        monthsParse: monthsParse$5,
+        longMonthsParse: monthsParse$5,
+        shortMonthsParse: monthsParse$5,
+        weekdays: 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'),
+        weekdaysShort: 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'),
+        weekdaysMin: 'di_lu_ma_me_je_ve_sa'.split('_'),
+        weekdaysParseExact: true,
+        longDateFormat: {
+            LT: 'HH:mm',
+            LTS: 'HH:mm:ss',
+            L: 'DD/MM/YYYY',
+            LL: 'D MMMM YYYY',
+            LLL: 'D MMMM YYYY HH:mm',
+            LLLL: 'dddd D MMMM YYYY HH:mm',
+        },
+        calendar: {
+            sameDay: '[Aujourd’hui à] LT',
+            nextDay: '[Demain à] LT',
+            nextWeek: 'dddd [à] LT',
+            lastDay: '[Hier à] LT',
+            lastWeek: 'dddd [dernier à] LT',
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: 'dans %s',
+            past: 'il y a %s',
+            s: 'quelques secondes',
+            ss: '%d secondes',
+            m: 'une minute',
+            mm: '%d minutes',
+            h: 'une heure',
+            hh: '%d heures',
+            d: 'un jour',
+            dd: '%d jours',
+            M: 'un mois',
+            MM: '%d mois',
+            y: 'un an',
+            yy: '%d ans',
+        },
+        dayOfMonthOrdinalParse: /\d{1,2}(er|)/,
+        ordinal: function (number, period) {
+            switch (period) {
+                // TODO: Return 'e' when day of month > 1. Move this case inside
+                // block for masculine words below.
+                // See https://github.com/moment/moment/issues/3375
+                case 'D':
+                    return number + (number === 1 ? 'er' : '');
+
+                // Words with masculine grammatical gender: mois, trimestre, jour
+                default:
+                case 'M':
+                case 'Q':
+                case 'DDD':
+                case 'd':
+                    return number + (number === 1 ? 'er' : 'e');
+
+                // Words with feminine grammatical gender: semaine
+                case 'w':
+                case 'W':
+                    return number + (number === 1 ? 're' : 'e');
+            }
+        },
+        week: {
+            dow: 1, // Monday is the first day of the week.
+            doy: 4, // The week that contains Jan 4th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    var monthsShortWithDots = 'jan._feb._mrt._apr._mai_jun._jul._aug._sep._okt._nov._des.'.split(
+            '_'
+        ),
+        monthsShortWithoutDots = 'jan_feb_mrt_apr_mai_jun_jul_aug_sep_okt_nov_des'.split(
+            '_'
+        );
+
+    hooks.defineLocale('fy', {
+        months: 'jannewaris_febrewaris_maart_april_maaie_juny_july_augustus_septimber_oktober_novimber_desimber'.split(
+            '_'
+        ),
+        monthsShort: function (m, format) {
+            if (!m) {
+                return monthsShortWithDots;
+            } else if (/-MMM-/.test(format)) {
+                return monthsShortWithoutDots[m.month()];
+            } else {
+                return monthsShortWithDots[m.month()];
+            }
+        },
+        monthsParseExact: true,
+        weekdays: 'snein_moandei_tiisdei_woansdei_tongersdei_freed_sneon'.split(
+            '_'
+        ),
+        weekdaysShort: 'si._mo._ti._wo._to._fr._so.'.split('_'),
+        weekdaysMin: 'Si_Mo_Ti_Wo_To_Fr_So'.split('_'),
+        weekdaysParseExact: true,
+        longDateFormat: {
+            LT: 'HH:mm',
+            LTS: 'HH:mm:ss',
+            L: 'DD-MM-YYYY',
+            LL: 'D MMMM YYYY',
+            LLL: 'D MMMM YYYY HH:mm',
+            LLLL: 'dddd D MMMM YYYY HH:mm',
+        },
+        calendar: {
+            sameDay: '[hjoed om] LT',
+            nextDay: '[moarn om] LT',
+            nextWeek: 'dddd [om] LT',
+            lastDay: '[juster om] LT',
+            lastWeek: '[ôfrûne] dddd [om] LT',
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: 'oer %s',
+            past: '%s lyn',
+            s: 'in pear sekonden',
+            ss: '%d sekonden',
+            m: 'ien minút',
+            mm: '%d minuten',
+            h: 'ien oere',
+            hh: '%d oeren',
+            d: 'ien dei',
+            dd: '%d dagen',
+            M: 'ien moanne',
+            MM: '%d moannen',
+            y: 'ien jier',
+            yy: '%d jierren',
+        },
+        dayOfMonthOrdinalParse: /\d{1,2}(ste|de)/,
+        ordinal: function (number) {
+            return (
+                number +
+                (number === 1 || number === 8 || number >= 20 ? 'ste' : 'de')
+            );
+        },
+        week: {
+            dow: 1, // Monday is the first day of the week.
+            doy: 4, // The week that contains Jan 4th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    var months$6 = [
+            'Eanáir',
+            'Feabhra',
+            'Márta',
+            'Aibreán',
+            'Bealtaine',
+            'Meitheamh',
+            'Iúil',
+            'Lúnasa',
+            'Meán Fómhair',
+            'Deireadh Fómhair',
+            'Samhain',
+            'Nollaig',
+        ],
+        monthsShort$4 = [
+            'Ean',
+            'Feabh',
+            'Márt',
+            'Aib',
+            'Beal',
+            'Meith',
+            'Iúil',
+            'Lún',
+            'M.F.',
+            'D.F.',
+            'Samh',
+            'Noll',
+        ],
+        weekdays$1 = [
+            'Dé Domhnaigh',
+            'Dé Luain',
+            'Dé Máirt',
+            'Dé Céadaoin',
+            'Déardaoin',
+            'Dé hAoine',
+            'Dé Sathairn',
+        ],
+        weekdaysShort = ['Domh', 'Luan', 'Máirt', 'Céad', 'Déar', 'Aoine', 'Sath'],
+        weekdaysMin = ['Do', 'Lu', 'Má', 'Cé', 'Dé', 'A', 'Sa'];
+
+    hooks.defineLocale('ga', {
+        months: months$6,
+        monthsShort: monthsShort$4,
+        monthsParseExact: true,
+        weekdays: weekdays$1,
+        weekdaysShort: weekdaysShort,
+        weekdaysMin: weekdaysMin,
+        longDateFormat: {
+            LT: 'HH:mm',
+            LTS: 'HH:mm:ss',
+            L: 'DD/MM/YYYY',
+            LL: 'D MMMM YYYY',
+            LLL: 'D MMMM YYYY HH:mm',
+            LLLL: 'dddd, D MMMM YYYY HH:mm',
+        },
+        calendar: {
+            sameDay: '[Inniu ag] LT',
+            nextDay: '[Amárach ag] LT',
+            nextWeek: 'dddd [ag] LT',
+            lastDay: '[Inné ag] LT',
+            lastWeek: 'dddd [seo caite] [ag] LT',
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: 'i %s',
+            past: '%s ó shin',
+            s: 'cúpla soicind',
+            ss: '%d soicind',
+            m: 'nóiméad',
+            mm: '%d nóiméad',
+            h: 'uair an chloig',
+            hh: '%d uair an chloig',
+            d: 'lá',
+            dd: '%d lá',
+            M: 'mí',
+            MM: '%d míonna',
+            y: 'bliain',
+            yy: '%d bliain',
+        },
+        dayOfMonthOrdinalParse: /\d{1,2}(d|na|mh)/,
+        ordinal: function (number) {
+            var output = number === 1 ? 'd' : number % 10 === 2 ? 'na' : 'mh';
+            return number + output;
+        },
+        week: {
+            dow: 1, // Monday is the first day of the week.
+            doy: 4, // The week that contains Jan 4th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    var months$7 = [
+            'Am Faoilleach',
+            'An Gearran',
+            'Am Màrt',
+            'An Giblean',
+            'An Cèitean',
+            'An t-Ògmhios',
+            'An t-Iuchar',
+            'An Lùnastal',
+            'An t-Sultain',
+            'An Dàmhair',
+            'An t-Samhain',
+            'An Dùbhlachd',
+        ],
+        monthsShort$5 = [
+            'Faoi',
+            'Gear',
+            'Màrt',
+            'Gibl',
+            'Cèit',
+            'Ògmh',
+            'Iuch',
+            'Lùn',
+            'Sult',
+            'Dàmh',
+            'Samh',
+            'Dùbh',
+        ],
+        weekdays$2 = [
+            'Didòmhnaich',
+            'Diluain',
+            'Dimàirt',
+            'Diciadain',
+            'Diardaoin',
+            'Dihaoine',
+            'Disathairne',
+        ],
+        weekdaysShort$1 = ['Did', 'Dil', 'Dim', 'Dic', 'Dia', 'Dih', 'Dis'],
+        weekdaysMin$1 = ['Dò', 'Lu', 'Mà', 'Ci', 'Ar', 'Ha', 'Sa'];
+
+    hooks.defineLocale('gd', {
+        months: months$7,
+        monthsShort: monthsShort$5,
+        monthsParseExact: true,
+        weekdays: weekdays$2,
+        weekdaysShort: weekdaysShort$1,
+        weekdaysMin: weekdaysMin$1,
+        longDateFormat: {
+            LT: 'HH:mm',
+            LTS: 'HH:mm:ss',
+            L: 'DD/MM/YYYY',
+            LL: 'D MMMM YYYY',
+            LLL: 'D MMMM YYYY HH:mm',
+            LLLL: 'dddd, D MMMM YYYY HH:mm',
+        },
+        calendar: {
+            sameDay: '[An-diugh aig] LT',
+            nextDay: '[A-màireach aig] LT',
+            nextWeek: 'dddd [aig] LT',
+            lastDay: '[An-dè aig] LT',
+            lastWeek: 'dddd [seo chaidh] [aig] LT',
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: 'ann an %s',
+            past: 'bho chionn %s',
+            s: 'beagan diogan',
+            ss: '%d diogan',
+            m: 'mionaid',
+            mm: '%d mionaidean',
+            h: 'uair',
+            hh: '%d uairean',
+            d: 'latha',
+            dd: '%d latha',
+            M: 'mìos',
+            MM: '%d mìosan',
+            y: 'bliadhna',
+            yy: '%d bliadhna',
+        },
+        dayOfMonthOrdinalParse: /\d{1,2}(d|na|mh)/,
+        ordinal: function (number) {
+            var output = number === 1 ? 'd' : number % 10 === 2 ? 'na' : 'mh';
+            return number + output;
+        },
+        week: {
+            dow: 1, // Monday is the first day of the week.
+            doy: 4, // The week that contains Jan 4th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    hooks.defineLocale('gl', {
+        months: 'xaneiro_febreiro_marzo_abril_maio_xuño_xullo_agosto_setembro_outubro_novembro_decembro'.split(
+            '_'
+        ),
+        monthsShort: 'xan._feb._mar._abr._mai._xuñ._xul._ago._set._out._nov._dec.'.split(
+            '_'
+        ),
+        monthsParseExact: true,
+        weekdays: 'domingo_luns_martes_mércores_xoves_venres_sábado'.split('_'),
+        weekdaysShort: 'dom._lun._mar._mér._xov._ven._sáb.'.split('_'),
+        weekdaysMin: 'do_lu_ma_mé_xo_ve_sá'.split('_'),
+        weekdaysParseExact: true,
+        longDateFormat: {
+            LT: 'H:mm',
+            LTS: 'H:mm:ss',
+            L: 'DD/MM/YYYY',
+            LL: 'D [de] MMMM [de] YYYY',
+            LLL: 'D [de] MMMM [de] YYYY H:mm',
+            LLLL: 'dddd, D [de] MMMM [de] YYYY H:mm',
+        },
+        calendar: {
+            sameDay: function () {
+                return '[hoxe ' + (this.hours() !== 1 ? 'ás' : 'á') + '] LT';
+            },
+            nextDay: function () {
+                return '[mañá ' + (this.hours() !== 1 ? 'ás' : 'á') + '] LT';
+            },
+            nextWeek: function () {
+                return 'dddd [' + (this.hours() !== 1 ? 'ás' : 'a') + '] LT';
+            },
+            lastDay: function () {
+                return '[onte ' + (this.hours() !== 1 ? 'á' : 'a') + '] LT';
+            },
+            lastWeek: function () {
+                return (
+                    '[o] dddd [pasado ' + (this.hours() !== 1 ? 'ás' : 'a') + '] LT'
+                );
+            },
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: function (str) {
+                if (str.indexOf('un') === 0) {
+                    return 'n' + str;
+                }
+                return 'en ' + str;
+            },
+            past: 'hai %s',
+            s: 'uns segundos',
+            ss: '%d segundos',
+            m: 'un minuto',
+            mm: '%d minutos',
+            h: 'unha hora',
+            hh: '%d horas',
+            d: 'un día',
+            dd: '%d días',
+            M: 'un mes',
+            MM: '%d meses',
+            y: 'un ano',
+            yy: '%d anos',
+        },
+        dayOfMonthOrdinalParse: /\d{1,2}º/,
+        ordinal: '%dº',
+        week: {
+            dow: 1, // Monday is the first day of the week.
+            doy: 4, // The week that contains Jan 4th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    function processRelativeTime$4(number, withoutSuffix, key, isFuture) {
+        var format = {
+            s: ['थोडया सॅकंडांनी', 'थोडे सॅकंड'],
+            ss: [number + ' सॅकंडांनी', number + ' सॅकंड'],
+            m: ['एका मिणटान', 'एक मिनूट'],
+            mm: [number + ' मिणटांनी', number + ' मिणटां'],
+            h: ['एका वरान', 'एक वर'],
+            hh: [number + ' वरांनी', number + ' वरां'],
+            d: ['एका दिसान', 'एक दीस'],
+            dd: [number + ' दिसांनी', number + ' दीस'],
+            M: ['एका म्हयन्यान', 'एक म्हयनो'],
+            MM: [number + ' म्हयन्यानी', number + ' म्हयने'],
+            y: ['एका वर्सान', 'एक वर्स'],
+            yy: [number + ' वर्सांनी', number + ' वर्सां'],
+        };
+        return isFuture ? format[key][0] : format[key][1];
+    }
+
+    hooks.defineLocale('gom-deva', {
+        months: {
+            standalone: 'जानेवारी_फेब्रुवारी_मार्च_एप्रील_मे_जून_जुलय_ऑगस्ट_सप्टेंबर_ऑक्टोबर_नोव्हेंबर_डिसेंबर'.split(
+                '_'
+            ),
+            format: 'जानेवारीच्या_फेब्रुवारीच्या_मार्चाच्या_एप्रीलाच्या_मेयाच्या_जूनाच्या_जुलयाच्या_ऑगस्टाच्या_सप्टेंबराच्या_ऑक्टोबराच्या_नोव्हेंबराच्या_डिसेंबराच्या'.split(
+                '_'
+            ),
+            isFormat: /MMMM(\s)+D[oD]?/,
+        },
+        monthsShort: 'जाने._फेब्रु._मार्च_एप्री._मे_जून_जुल._ऑग._सप्टें._ऑक्टो._नोव्हें._डिसें.'.split(
+            '_'
+        ),
+        monthsParseExact: true,
+        weekdays: 'आयतार_सोमार_मंगळार_बुधवार_बिरेस्तार_सुक्रार_शेनवार'.split('_'),
+        weekdaysShort: 'आयत._सोम._मंगळ._बुध._ब्रेस्त._सुक्र._शेन.'.split('_'),
+        weekdaysMin: 'आ_सो_मं_बु_ब्रे_सु_शे'.split('_'),
+        weekdaysParseExact: true,
+        longDateFormat: {
+            LT: 'A h:mm [वाजतां]',
+            LTS: 'A h:mm:ss [वाजतां]',
+            L: 'DD-MM-YYYY',
+            LL: 'D MMMM YYYY',
+            LLL: 'D MMMM YYYY A h:mm [वाजतां]',
+            LLLL: 'dddd, MMMM Do, YYYY, A h:mm [वाजतां]',
+            llll: 'ddd, D MMM YYYY, A h:mm [वाजतां]',
+        },
+        calendar: {
+            sameDay: '[आयज] LT',
+            nextDay: '[फाल्यां] LT',
+            nextWeek: '[फुडलो] dddd[,] LT',
+            lastDay: '[काल] LT',
+            lastWeek: '[फाटलो] dddd[,] LT',
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: '%s',
+            past: '%s आदीं',
+            s: processRelativeTime$4,
+            ss: processRelativeTime$4,
+            m: processRelativeTime$4,
+            mm: processRelativeTime$4,
+            h: processRelativeTime$4,
+            hh: processRelativeTime$4,
+            d: processRelativeTime$4,
+            dd: processRelativeTime$4,
+            M: processRelativeTime$4,
+            MM: processRelativeTime$4,
+            y: processRelativeTime$4,
+            yy: processRelativeTime$4,
+        },
+        dayOfMonthOrdinalParse: /\d{1,2}(वेर)/,
+        ordinal: function (number, period) {
+            switch (period) {
+                // the ordinal 'वेर' only applies to day of the month
+                case 'D':
+                    return number + 'वेर';
+                default:
+                case 'M':
+                case 'Q':
+                case 'DDD':
+                case 'd':
+                case 'w':
+                case 'W':
+                    return number;
+            }
+        },
+        week: {
+            dow: 0, // Sunday is the first day of the week
+            doy: 3, // The week that contains Jan 4th is the first week of the year (7 + 0 - 4)
+        },
+        meridiemParse: /राती|सकाळीं|दनपारां|सांजे/,
+        meridiemHour: function (hour, meridiem) {
+            if (hour === 12) {
+                hour = 0;
+            }
+            if (meridiem === 'राती') {
+                return hour < 4 ? hour : hour + 12;
+            } else if (meridiem === 'सकाळीं') {
+                return hour;
+            } else if (meridiem === 'दनपारां') {
+                return hour > 12 ? hour : hour + 12;
+            } else if (meridiem === 'सांजे') {
+                return hour + 12;
+            }
+        },
+        meridiem: function (hour, minute, isLower) {
+            if (hour < 4) {
+                return 'राती';
+            } else if (hour < 12) {
+                return 'सकाळीं';
+            } else if (hour < 16) {
+                return 'दनपारां';
+            } else if (hour < 20) {
+                return 'सांजे';
+            } else {
+                return 'राती';
+            }
+        },
+    });
+
+    //! moment.js locale configuration
+
+    function processRelativeTime$5(number, withoutSuffix, key, isFuture) {
+        var format = {
+            s: ['thoddea sekondamni', 'thodde sekond'],
+            ss: [number + ' sekondamni', number + ' sekond'],
+            m: ['eka mintan', 'ek minut'],
+            mm: [number + ' mintamni', number + ' mintam'],
+            h: ['eka voran', 'ek vor'],
+            hh: [number + ' voramni', number + ' voram'],
+            d: ['eka disan', 'ek dis'],
+            dd: [number + ' disamni', number + ' dis'],
+            M: ['eka mhoinean', 'ek mhoino'],
+            MM: [number + ' mhoineamni', number + ' mhoine'],
+            y: ['eka vorsan', 'ek voros'],
+            yy: [number + ' vorsamni', number + ' vorsam'],
+        };
+        return isFuture ? format[key][0] : format[key][1];
+    }
+
+    hooks.defineLocale('gom-latn', {
+        months: {
+            standalone: 'Janer_Febrer_Mars_Abril_Mai_Jun_Julai_Agost_Setembr_Otubr_Novembr_Dezembr'.split(
+                '_'
+            ),
+            format: 'Janerachea_Febrerachea_Marsachea_Abrilachea_Maiachea_Junachea_Julaiachea_Agostachea_Setembrachea_Otubrachea_Novembrachea_Dezembrachea'.split(
+                '_'
+            ),
+            isFormat: /MMMM(\s)+D[oD]?/,
+        },
+        monthsShort: 'Jan._Feb._Mars_Abr._Mai_Jun_Jul._Ago._Set._Otu._Nov._Dez.'.split(
+            '_'
+        ),
+        monthsParseExact: true,
+        weekdays: "Aitar_Somar_Mongllar_Budhvar_Birestar_Sukrar_Son'var".split('_'),
+        weekdaysShort: 'Ait._Som._Mon._Bud._Bre._Suk._Son.'.split('_'),
+        weekdaysMin: 'Ai_Sm_Mo_Bu_Br_Su_Sn'.split('_'),
+        weekdaysParseExact: true,
+        longDateFormat: {
+            LT: 'A h:mm [vazta]',
+            LTS: 'A h:mm:ss [vazta]',
+            L: 'DD-MM-YYYY',
+            LL: 'D MMMM YYYY',
+            LLL: 'D MMMM YYYY A h:mm [vazta]',
+            LLLL: 'dddd, MMMM Do, YYYY, A h:mm [vazta]',
+            llll: 'ddd, D MMM YYYY, A h:mm [vazta]',
+        },
+        calendar: {
+            sameDay: '[Aiz] LT',
+            nextDay: '[Faleam] LT',
+            nextWeek: '[Fuddlo] dddd[,] LT',
+            lastDay: '[Kal] LT',
+            lastWeek: '[Fattlo] dddd[,] LT',
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: '%s',
+            past: '%s adim',
+            s: processRelativeTime$5,
+            ss: processRelativeTime$5,
+            m: processRelativeTime$5,
+            mm: processRelativeTime$5,
+            h: processRelativeTime$5,
+            hh: processRelativeTime$5,
+            d: processRelativeTime$5,
+            dd: processRelativeTime$5,
+            M: processRelativeTime$5,
+            MM: processRelativeTime$5,
+            y: processRelativeTime$5,
+            yy: processRelativeTime$5,
+        },
+        dayOfMonthOrdinalParse: /\d{1,2}(er)/,
+        ordinal: function (number, period) {
+            switch (period) {
+                // the ordinal 'er' only applies to day of the month
+                case 'D':
+                    return number + 'er';
+                default:
+                case 'M':
+                case 'Q':
+                case 'DDD':
+                case 'd':
+                case 'w':
+                case 'W':
+                    return number;
+            }
+        },
+        week: {
+            dow: 0, // Sunday is the first day of the week
+            doy: 3, // The week that contains Jan 4th is the first week of the year (7 + 0 - 4)
+        },
+        meridiemParse: /rati|sokallim|donparam|sanje/,
+        meridiemHour: function (hour, meridiem) {
+            if (hour === 12) {
+                hour = 0;
+            }
+            if (meridiem === 'rati') {
+                return hour < 4 ? hour : hour + 12;
+            } else if (meridiem === 'sokallim') {
+                return hour;
+            } else if (meridiem === 'donparam') {
+                return hour > 12 ? hour : hour + 12;
+            } else if (meridiem === 'sanje') {
+                return hour + 12;
+            }
+        },
+        meridiem: function (hour, minute, isLower) {
+            if (hour < 4) {
+                return 'rati';
+            } else if (hour < 12) {
+                return 'sokallim';
+            } else if (hour < 16) {
+                return 'donparam';
+            } else if (hour < 20) {
+                return 'sanje';
+            } else {
+                return 'rati';
+            }
+        },
+    });
+
+    //! moment.js locale configuration
+
+    var symbolMap$6 = {
+            '1': '૧',
+            '2': '૨',
+            '3': '૩',
+            '4': '૪',
+            '5': '૫',
+            '6': '૬',
+            '7': '૭',
+            '8': '૮',
+            '9': '૯',
+            '0': '૦',
+        },
+        numberMap$5 = {
+            '૧': '1',
+            '૨': '2',
+            '૩': '3',
+            '૪': '4',
+            '૫': '5',
+            '૬': '6',
+            '૭': '7',
+            '૮': '8',
+            '૯': '9',
+            '૦': '0',
+        };
+
+    hooks.defineLocale('gu', {
+        months: 'જાન્યુઆરી_ફેબ્રુઆરી_માર્ચ_એપ્રિલ_મે_જૂન_જુલાઈ_ઑગસ્ટ_સપ્ટેમ્બર_ઑક્ટ્બર_નવેમ્બર_ડિસેમ્બર'.split(
+            '_'
+        ),
+        monthsShort: 'જાન્યુ._ફેબ્રુ._માર્ચ_એપ્રિ._મે_જૂન_જુલા._ઑગ._સપ્ટે._ઑક્ટ્._નવે._ડિસે.'.split(
+            '_'
+        ),
+        monthsParseExact: true,
+        weekdays: 'રવિવાર_સોમવાર_મંગળવાર_બુધ્વાર_ગુરુવાર_શુક્રવાર_શનિવાર'.split(
+            '_'
+        ),
+        weekdaysShort: 'રવિ_સોમ_મંગળ_બુધ્_ગુરુ_શુક્ર_શનિ'.split('_'),
+        weekdaysMin: 'ર_સો_મં_બુ_ગુ_શુ_શ'.split('_'),
+        longDateFormat: {
+            LT: 'A h:mm વાગ્યે',
+            LTS: 'A h:mm:ss વાગ્યે',
+            L: 'DD/MM/YYYY',
+            LL: 'D MMMM YYYY',
+            LLL: 'D MMMM YYYY, A h:mm વાગ્યે',
+            LLLL: 'dddd, D MMMM YYYY, A h:mm વાગ્યે',
+        },
+        calendar: {
+            sameDay: '[આજ] LT',
+            nextDay: '[કાલે] LT',
+            nextWeek: 'dddd, LT',
+            lastDay: '[ગઇકાલે] LT',
+            lastWeek: '[પાછલા] dddd, LT',
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: '%s મા',
+            past: '%s પહેલા',
+            s: 'અમુક પળો',
+            ss: '%d સેકંડ',
+            m: 'એક મિનિટ',
+            mm: '%d મિનિટ',
+            h: 'એક કલાક',
+            hh: '%d કલાક',
+            d: 'એક દિવસ',
+            dd: '%d દિવસ',
+            M: 'એક મહિનો',
+            MM: '%d મહિનો',
+            y: 'એક વર્ષ',
+            yy: '%d વર્ષ',
+        },
+        preparse: function (string) {
+            return string.replace(/[૧૨૩૪૫૬૭૮૯૦]/g, function (match) {
+                return numberMap$5[match];
+            });
+        },
+        postformat: function (string) {
+            return string.replace(/\d/g, function (match) {
+                return symbolMap$6[match];
+            });
+        },
+        // Gujarati notation for meridiems are quite fuzzy in practice. While there exists
+        // a rigid notion of a 'Pahar' it is not used as rigidly in modern Gujarati.
+        meridiemParse: /રાત|બપોર|સવાર|સાંજ/,
+        meridiemHour: function (hour, meridiem) {
+            if (hour === 12) {
+                hour = 0;
+            }
+            if (meridiem === 'રાત') {
+                return hour < 4 ? hour : hour + 12;
+            } else if (meridiem === 'સવાર') {
+                return hour;
+            } else if (meridiem === 'બપોર') {
+                return hour >= 10 ? hour : hour + 12;
+            } else if (meridiem === 'સાંજ') {
+                return hour + 12;
+            }
+        },
+        meridiem: function (hour, minute, isLower) {
+            if (hour < 4) {
+                return 'રાત';
+            } else if (hour < 10) {
+                return 'સવાર';
+            } else if (hour < 17) {
+                return 'બપોર';
+            } else if (hour < 20) {
+                return 'સાંજ';
+            } else {
+                return 'રાત';
+            }
+        },
+        week: {
+            dow: 0, // Sunday is the first day of the week.
+            doy: 6, // The week that contains Jan 6th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    hooks.defineLocale('he', {
+        months: 'ינואר_פברואר_מרץ_אפריל_מאי_יוני_יולי_אוגוסט_ספטמבר_אוקטובר_נובמבר_דצמבר'.split(
+            '_'
+        ),
+        monthsShort: 'ינו׳_פבר׳_מרץ_אפר׳_מאי_יוני_יולי_אוג׳_ספט׳_אוק׳_נוב׳_דצמ׳'.split(
+            '_'
+        ),
+        weekdays: 'ראשון_שני_שלישי_רביעי_חמישי_שישי_שבת'.split('_'),
+        weekdaysShort: 'א׳_ב׳_ג׳_ד׳_ה׳_ו׳_ש׳'.split('_'),
+        weekdaysMin: 'א_ב_ג_ד_ה_ו_ש'.split('_'),
+        longDateFormat: {
+            LT: 'HH:mm',
+            LTS: 'HH:mm:ss',
+            L: 'DD/MM/YYYY',
+            LL: 'D [ב]MMMM YYYY',
+            LLL: 'D [ב]MMMM YYYY HH:mm',
+            LLLL: 'dddd, D [ב]MMMM YYYY HH:mm',
+            l: 'D/M/YYYY',
+            ll: 'D MMM YYYY',
+            lll: 'D MMM YYYY HH:mm',
+            llll: 'ddd, D MMM YYYY HH:mm',
+        },
+        calendar: {
+            sameDay: '[היום ב־]LT',
+            nextDay: '[מחר ב־]LT',
+            nextWeek: 'dddd [בשעה] LT',
+            lastDay: '[אתמול ב־]LT',
+            lastWeek: '[ביום] dddd [האחרון בשעה] LT',
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: 'בעוד %s',
+            past: 'לפני %s',
+            s: 'מספר שניות',
+            ss: '%d שניות',
+            m: 'דקה',
+            mm: '%d דקות',
+            h: 'שעה',
+            hh: function (number) {
+                if (number === 2) {
+                    return 'שעתיים';
+                }
+                return number + ' שעות';
+            },
+            d: 'יום',
+            dd: function (number) {
+                if (number === 2) {
+                    return 'יומיים';
+                }
+                return number + ' ימים';
+            },
+            M: 'חודש',
+            MM: function (number) {
+                if (number === 2) {
+                    return 'חודשיים';
+                }
+                return number + ' חודשים';
+            },
+            y: 'שנה',
+            yy: function (number) {
+                if (number === 2) {
+                    return 'שנתיים';
+                } else if (number % 10 === 0 && number !== 10) {
+                    return number + ' שנה';
+                }
+                return number + ' שנים';
+            },
+        },
+        meridiemParse: /אחה"צ|לפנה"צ|אחרי הצהריים|לפני הצהריים|לפנות בוקר|בבוקר|בערב/i,
+        isPM: function (input) {
+            return /^(אחה"צ|אחרי הצהריים|בערב)$/.test(input);
+        },
+        meridiem: function (hour, minute, isLower) {
+            if (hour < 5) {
+                return 'לפנות בוקר';
+            } else if (hour < 10) {
+                return 'בבוקר';
+            } else if (hour < 12) {
+                return isLower ? 'לפנה"צ' : 'לפני הצהריים';
+            } else if (hour < 18) {
+                return isLower ? 'אחה"צ' : 'אחרי הצהריים';
+            } else {
+                return 'בערב';
+            }
+        },
+    });
+
+    //! moment.js locale configuration
+
+    var symbolMap$7 = {
+            '1': '१',
+            '2': '२',
+            '3': '३',
+            '4': '४',
+            '5': '५',
+            '6': '६',
+            '7': '७',
+            '8': '८',
+            '9': '९',
+            '0': '०',
+        },
+        numberMap$6 = {
+            '१': '1',
+            '२': '2',
+            '३': '3',
+            '४': '4',
+            '५': '5',
+            '६': '6',
+            '७': '7',
+            '८': '8',
+            '९': '9',
+            '०': '0',
+        };
+
+    hooks.defineLocale('hi', {
+        months: 'जनवरी_फ़रवरी_मार्च_अप्रैल_मई_जून_जुलाई_अगस्त_सितम्बर_अक्टूबर_नवम्बर_दिसम्बर'.split(
+            '_'
+        ),
+        monthsShort: 'जन._फ़र._मार्च_अप्रै._मई_जून_जुल._अग._सित._अक्टू._नव._दिस.'.split(
+            '_'
+        ),
+        monthsParseExact: true,
+        weekdays: 'रविवार_सोमवार_मंगलवार_बुधवार_गुरूवार_शुक्रवार_शनिवार'.split('_'),
+        weekdaysShort: 'रवि_सोम_मंगल_बुध_गुरू_शुक्र_शनि'.split('_'),
+        weekdaysMin: 'र_सो_मं_बु_गु_शु_श'.split('_'),
+        longDateFormat: {
+            LT: 'A h:mm बजे',
+            LTS: 'A h:mm:ss बजे',
+            L: 'DD/MM/YYYY',
+            LL: 'D MMMM YYYY',
+            LLL: 'D MMMM YYYY, A h:mm बजे',
+            LLLL: 'dddd, D MMMM YYYY, A h:mm बजे',
+        },
+        calendar: {
+            sameDay: '[आज] LT',
+            nextDay: '[कल] LT',
+            nextWeek: 'dddd, LT',
+            lastDay: '[कल] LT',
+            lastWeek: '[पिछले] dddd, LT',
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: '%s में',
+            past: '%s पहले',
+            s: 'कुछ ही क्षण',
+            ss: '%d सेकंड',
+            m: 'एक मिनट',
+            mm: '%d मिनट',
+            h: 'एक घंटा',
+            hh: '%d घंटे',
+            d: 'एक दिन',
+            dd: '%d दिन',
+            M: 'एक महीने',
+            MM: '%d महीने',
+            y: 'एक वर्ष',
+            yy: '%d वर्ष',
+        },
+        preparse: function (string) {
+            return string.replace(/[१२३४५६७८९०]/g, function (match) {
+                return numberMap$6[match];
+            });
+        },
+        postformat: function (string) {
+            return string.replace(/\d/g, function (match) {
+                return symbolMap$7[match];
+            });
+        },
+        // Hindi notation for meridiems are quite fuzzy in practice. While there exists
+        // a rigid notion of a 'Pahar' it is not used as rigidly in modern Hindi.
+        meridiemParse: /रात|सुबह|दोपहर|शाम/,
+        meridiemHour: function (hour, meridiem) {
+            if (hour === 12) {
+                hour = 0;
+            }
+            if (meridiem === 'रात') {
+                return hour < 4 ? hour : hour + 12;
+            } else if (meridiem === 'सुबह') {
+                return hour;
+            } else if (meridiem === 'दोपहर') {
+                return hour >= 10 ? hour : hour + 12;
+            } else if (meridiem === 'शाम') {
+                return hour + 12;
+            }
+        },
+        meridiem: function (hour, minute, isLower) {
+            if (hour < 4) {
+                return 'रात';
+            } else if (hour < 10) {
+                return 'सुबह';
+            } else if (hour < 17) {
+                return 'दोपहर';
+            } else if (hour < 20) {
+                return 'शाम';
+            } else {
+                return 'रात';
+            }
+        },
+        week: {
+            dow: 0, // Sunday is the first day of the week.
+            doy: 6, // The week that contains Jan 6th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    function translate$3(number, withoutSuffix, key) {
+        var result = number + ' ';
+        switch (key) {
+            case 'ss':
+                if (number === 1) {
+                    result += 'sekunda';
+                } else if (number === 2 || number === 3 || number === 4) {
+                    result += 'sekunde';
+                } else {
+                    result += 'sekundi';
+                }
+                return result;
+            case 'm':
+                return withoutSuffix ? 'jedna minuta' : 'jedne minute';
+            case 'mm':
+                if (number === 1) {
+                    result += 'minuta';
+                } else if (number === 2 || number === 3 || number === 4) {
+                    result += 'minute';
+                } else {
+                    result += 'minuta';
+                }
+                return result;
+            case 'h':
+                return withoutSuffix ? 'jedan sat' : 'jednog sata';
+            case 'hh':
+                if (number === 1) {
+                    result += 'sat';
+                } else if (number === 2 || number === 3 || number === 4) {
+                    result += 'sata';
+                } else {
+                    result += 'sati';
+                }
+                return result;
+            case 'dd':
+                if (number === 1) {
+                    result += 'dan';
+                } else {
+                    result += 'dana';
+                }
+                return result;
+            case 'MM':
+                if (number === 1) {
+                    result += 'mjesec';
+                } else if (number === 2 || number === 3 || number === 4) {
+                    result += 'mjeseca';
+                } else {
+                    result += 'mjeseci';
+                }
+                return result;
+            case 'yy':
+                if (number === 1) {
+                    result += 'godina';
+                } else if (number === 2 || number === 3 || number === 4) {
+                    result += 'godine';
+                } else {
+                    result += 'godina';
+                }
+                return result;
+        }
+    }
+
+    hooks.defineLocale('hr', {
+        months: {
+            format: 'siječnja_veljače_ožujka_travnja_svibnja_lipnja_srpnja_kolovoza_rujna_listopada_studenoga_prosinca'.split(
+                '_'
+            ),
+            standalone: 'siječanj_veljača_ožujak_travanj_svibanj_lipanj_srpanj_kolovoz_rujan_listopad_studeni_prosinac'.split(
+                '_'
+            ),
+        },
+        monthsShort: 'sij._velj._ožu._tra._svi._lip._srp._kol._ruj._lis._stu._pro.'.split(
+            '_'
+        ),
+        monthsParseExact: true,
+        weekdays: 'nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota'.split(
+            '_'
+        ),
+        weekdaysShort: 'ned._pon._uto._sri._čet._pet._sub.'.split('_'),
+        weekdaysMin: 'ne_po_ut_sr_če_pe_su'.split('_'),
+        weekdaysParseExact: true,
+        longDateFormat: {
+            LT: 'H:mm',
+            LTS: 'H:mm:ss',
+            L: 'DD.MM.YYYY',
+            LL: 'Do MMMM YYYY',
+            LLL: 'Do MMMM YYYY H:mm',
+            LLLL: 'dddd, Do MMMM YYYY H:mm',
+        },
+        calendar: {
+            sameDay: '[danas u] LT',
+            nextDay: '[sutra u] LT',
+            nextWeek: function () {
+                switch (this.day()) {
+                    case 0:
+                        return '[u] [nedjelju] [u] LT';
+                    case 3:
+                        return '[u] [srijedu] [u] LT';
+                    case 6:
+                        return '[u] [subotu] [u] LT';
+                    case 1:
+                    case 2:
+                    case 4:
+                    case 5:
+                        return '[u] dddd [u] LT';
+                }
+            },
+            lastDay: '[jučer u] LT',
+            lastWeek: function () {
+                switch (this.day()) {
+                    case 0:
+                        return '[prošlu] [nedjelju] [u] LT';
+                    case 3:
+                        return '[prošlu] [srijedu] [u] LT';
+                    case 6:
+                        return '[prošle] [subote] [u] LT';
+                    case 1:
+                    case 2:
+                    case 4:
+                    case 5:
+                        return '[prošli] dddd [u] LT';
+                }
+            },
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: 'za %s',
+            past: 'prije %s',
+            s: 'par sekundi',
+            ss: translate$3,
+            m: translate$3,
+            mm: translate$3,
+            h: translate$3,
+            hh: translate$3,
+            d: 'dan',
+            dd: translate$3,
+            M: 'mjesec',
+            MM: translate$3,
+            y: 'godinu',
+            yy: translate$3,
+        },
+        dayOfMonthOrdinalParse: /\d{1,2}\./,
+        ordinal: '%d.',
+        week: {
+            dow: 1, // Monday is the first day of the week.
+            doy: 7, // The week that contains Jan 7th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    var weekEndings = 'vasárnap hétfőn kedden szerdán csütörtökön pénteken szombaton'.split(
+        ' '
+    );
+    function translate$4(number, withoutSuffix, key, isFuture) {
+        var num = number;
+        switch (key) {
+            case 's':
+                return isFuture || withoutSuffix
+                    ? 'néhány másodperc'
+                    : 'néhány másodperce';
+            case 'ss':
+                return num + (isFuture || withoutSuffix)
+                    ? ' másodperc'
+                    : ' másodperce';
+            case 'm':
+                return 'egy' + (isFuture || withoutSuffix ? ' perc' : ' perce');
+            case 'mm':
+                return num + (isFuture || withoutSuffix ? ' perc' : ' perce');
+            case 'h':
+                return 'egy' + (isFuture || withoutSuffix ? ' óra' : ' órája');
+            case 'hh':
+                return num + (isFuture || withoutSuffix ? ' óra' : ' órája');
+            case 'd':
+                return 'egy' + (isFuture || withoutSuffix ? ' nap' : ' napja');
+            case 'dd':
+                return num + (isFuture || withoutSuffix ? ' nap' : ' napja');
+            case 'M':
+                return 'egy' + (isFuture || withoutSuffix ? ' hónap' : ' hónapja');
+            case 'MM':
+                return num + (isFuture || withoutSuffix ? ' hónap' : ' hónapja');
+            case 'y':
+                return 'egy' + (isFuture || withoutSuffix ? ' év' : ' éve');
+            case 'yy':
+                return num + (isFuture || withoutSuffix ? ' év' : ' éve');
+        }
+        return '';
+    }
+    function week(isFuture) {
+        return (
+            (isFuture ? '' : '[múlt] ') +
+            '[' +
+            weekEndings[this.day()] +
+            '] LT[-kor]'
+        );
+    }
+
+    hooks.defineLocale('hu', {
+        months: 'január_február_március_április_május_június_július_augusztus_szeptember_október_november_december'.split(
+            '_'
+        ),
+        monthsShort: 'jan_feb_márc_ápr_máj_jún_júl_aug_szept_okt_nov_dec'.split(
+            '_'
+        ),
+        weekdays: 'vasárnap_hétfő_kedd_szerda_csütörtök_péntek_szombat'.split('_'),
+        weekdaysShort: 'vas_hét_kedd_sze_csüt_pén_szo'.split('_'),
+        weekdaysMin: 'v_h_k_sze_cs_p_szo'.split('_'),
+        longDateFormat: {
+            LT: 'H:mm',
+            LTS: 'H:mm:ss',
+            L: 'YYYY.MM.DD.',
+            LL: 'YYYY. MMMM D.',
+            LLL: 'YYYY. MMMM D. H:mm',
+            LLLL: 'YYYY. MMMM D., dddd H:mm',
+        },
+        meridiemParse: /de|du/i,
+        isPM: function (input) {
+            return input.charAt(1).toLowerCase() === 'u';
+        },
+        meridiem: function (hours, minutes, isLower) {
+            if (hours < 12) {
+                return isLower === true ? 'de' : 'DE';
+            } else {
+                return isLower === true ? 'du' : 'DU';
+            }
+        },
+        calendar: {
+            sameDay: '[ma] LT[-kor]',
+            nextDay: '[holnap] LT[-kor]',
+            nextWeek: function () {
+                return week.call(this, true);
+            },
+            lastDay: '[tegnap] LT[-kor]',
+            lastWeek: function () {
+                return week.call(this, false);
+            },
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: '%s múlva',
+            past: '%s',
+            s: translate$4,
+            ss: translate$4,
+            m: translate$4,
+            mm: translate$4,
+            h: translate$4,
+            hh: translate$4,
+            d: translate$4,
+            dd: translate$4,
+            M: translate$4,
+            MM: translate$4,
+            y: translate$4,
+            yy: translate$4,
+        },
+        dayOfMonthOrdinalParse: /\d{1,2}\./,
+        ordinal: '%d.',
+        week: {
+            dow: 1, // Monday is the first day of the week.
+            doy: 4, // The week that contains Jan 4th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    hooks.defineLocale('hy-am', {
+        months: {
+            format: 'հունվարի_փետրվարի_մարտի_ապրիլի_մայիսի_հունիսի_հուլիսի_օգոստոսի_սեպտեմբերի_հոկտեմբերի_նոյեմբերի_դեկտեմբերի'.split(
+                '_'
+            ),
+            standalone: 'հունվար_փետրվար_մարտ_ապրիլ_մայիս_հունիս_հուլիս_օգոստոս_սեպտեմբեր_հոկտեմբեր_նոյեմբեր_դեկտեմբեր'.split(
+                '_'
+            ),
+        },
+        monthsShort: 'հնվ_փտր_մրտ_ապր_մյս_հնս_հլս_օգս_սպտ_հկտ_նմբ_դկտ'.split('_'),
+        weekdays: 'կիրակի_երկուշաբթի_երեքշաբթի_չորեքշաբթի_հինգշաբթի_ուրբաթ_շաբաթ'.split(
+            '_'
+        ),
+        weekdaysShort: 'կրկ_երկ_երք_չրք_հնգ_ուրբ_շբթ'.split('_'),
+        weekdaysMin: 'կրկ_երկ_երք_չրք_հնգ_ուրբ_շբթ'.split('_'),
+        longDateFormat: {
+            LT: 'HH:mm',
+            LTS: 'HH:mm:ss',
+            L: 'DD.MM.YYYY',
+            LL: 'D MMMM YYYY թ.',
+            LLL: 'D MMMM YYYY թ., HH:mm',
+            LLLL: 'dddd, D MMMM YYYY թ., HH:mm',
+        },
+        calendar: {
+            sameDay: '[այսօր] LT',
+            nextDay: '[վաղը] LT',
+            lastDay: '[երեկ] LT',
+            nextWeek: function () {
+                return 'dddd [օրը ժամը] LT';
+            },
+            lastWeek: function () {
+                return '[անցած] dddd [օրը ժամը] LT';
+            },
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: '%s հետո',
+            past: '%s առաջ',
+            s: 'մի քանի վայրկյան',
+            ss: '%d վայրկյան',
+            m: 'րոպե',
+            mm: '%d րոպե',
+            h: 'ժամ',
+            hh: '%d ժամ',
+            d: 'օր',
+            dd: '%d օր',
+            M: 'ամիս',
+            MM: '%d ամիս',
+            y: 'տարի',
+            yy: '%d տարի',
+        },
+        meridiemParse: /գիշերվա|առավոտվա|ցերեկվա|երեկոյան/,
+        isPM: function (input) {
+            return /^(ցերեկվա|երեկոյան)$/.test(input);
+        },
+        meridiem: function (hour) {
+            if (hour < 4) {
+                return 'գիշերվա';
+            } else if (hour < 12) {
+                return 'առավոտվա';
+            } else if (hour < 17) {
+                return 'ցերեկվա';
+            } else {
+                return 'երեկոյան';
+            }
+        },
+        dayOfMonthOrdinalParse: /\d{1,2}|\d{1,2}-(ին|րդ)/,
+        ordinal: function (number, period) {
+            switch (period) {
+                case 'DDD':
+                case 'w':
+                case 'W':
+                case 'DDDo':
+                    if (number === 1) {
+                        return number + '-ին';
+                    }
+                    return number + '-րդ';
+                default:
+                    return number;
+            }
+        },
+        week: {
+            dow: 1, // Monday is the first day of the week.
+            doy: 7, // The week that contains Jan 7th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    hooks.defineLocale('id', {
+        months: 'Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_November_Desember'.split(
+            '_'
+        ),
+        monthsShort: 'Jan_Feb_Mar_Apr_Mei_Jun_Jul_Agt_Sep_Okt_Nov_Des'.split('_'),
+        weekdays: 'Minggu_Senin_Selasa_Rabu_Kamis_Jumat_Sabtu'.split('_'),
+        weekdaysShort: 'Min_Sen_Sel_Rab_Kam_Jum_Sab'.split('_'),
+        weekdaysMin: 'Mg_Sn_Sl_Rb_Km_Jm_Sb'.split('_'),
+        longDateFormat: {
+            LT: 'HH.mm',
+            LTS: 'HH.mm.ss',
+            L: 'DD/MM/YYYY',
+            LL: 'D MMMM YYYY',
+            LLL: 'D MMMM YYYY [pukul] HH.mm',
+            LLLL: 'dddd, D MMMM YYYY [pukul] HH.mm',
+        },
+        meridiemParse: /pagi|siang|sore|malam/,
+        meridiemHour: function (hour, meridiem) {
+            if (hour === 12) {
+                hour = 0;
+            }
+            if (meridiem === 'pagi') {
+                return hour;
+            } else if (meridiem === 'siang') {
+                return hour >= 11 ? hour : hour + 12;
+            } else if (meridiem === 'sore' || meridiem === 'malam') {
+                return hour + 12;
+            }
+        },
+        meridiem: function (hours, minutes, isLower) {
+            if (hours < 11) {
+                return 'pagi';
+            } else if (hours < 15) {
+                return 'siang';
+            } else if (hours < 19) {
+                return 'sore';
+            } else {
+                return 'malam';
+            }
+        },
+        calendar: {
+            sameDay: '[Hari ini pukul] LT',
+            nextDay: '[Besok pukul] LT',
+            nextWeek: 'dddd [pukul] LT',
+            lastDay: '[Kemarin pukul] LT',
+            lastWeek: 'dddd [lalu pukul] LT',
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: 'dalam %s',
+            past: '%s yang lalu',
+            s: 'beberapa detik',
+            ss: '%d detik',
+            m: 'semenit',
+            mm: '%d menit',
+            h: 'sejam',
+            hh: '%d jam',
+            d: 'sehari',
+            dd: '%d hari',
+            M: 'sebulan',
+            MM: '%d bulan',
+            y: 'setahun',
+            yy: '%d tahun',
+        },
+        week: {
+            dow: 0, // Sunday is the first day of the week.
+            doy: 6, // The week that contains Jan 6th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    function plural$2(n) {
+        if (n % 100 === 11) {
+            return true;
+        } else if (n % 10 === 1) {
+            return false;
+        }
+        return true;
+    }
+    function translate$5(number, withoutSuffix, key, isFuture) {
+        var result = number + ' ';
+        switch (key) {
+            case 's':
+                return withoutSuffix || isFuture
+                    ? 'nokkrar sekúndur'
+                    : 'nokkrum sekúndum';
+            case 'ss':
+                if (plural$2(number)) {
+                    return (
+                        result +
+                        (withoutSuffix || isFuture ? 'sekúndur' : 'sekúndum')
+                    );
+                }
+                return result + 'sekúnda';
+            case 'm':
+                return withoutSuffix ? 'mínúta' : 'mínútu';
+            case 'mm':
+                if (plural$2(number)) {
+                    return (
+                        result + (withoutSuffix || isFuture ? 'mínútur' : 'mínútum')
+                    );
+                } else if (withoutSuffix) {
+                    return result + 'mínúta';
+                }
+                return result + 'mínútu';
+            case 'hh':
+                if (plural$2(number)) {
+                    return (
+                        result +
+                        (withoutSuffix || isFuture
+                            ? 'klukkustundir'
+                            : 'klukkustundum')
+                    );
+                }
+                return result + 'klukkustund';
+            case 'd':
+                if (withoutSuffix) {
+                    return 'dagur';
+                }
+                return isFuture ? 'dag' : 'degi';
+            case 'dd':
+                if (plural$2(number)) {
+                    if (withoutSuffix) {
+                        return result + 'dagar';
+                    }
+                    return result + (isFuture ? 'daga' : 'dögum');
+                } else if (withoutSuffix) {
+                    return result + 'dagur';
+                }
+                return result + (isFuture ? 'dag' : 'degi');
+            case 'M':
+                if (withoutSuffix) {
+                    return 'mánuður';
+                }
+                return isFuture ? 'mánuð' : 'mánuði';
+            case 'MM':
+                if (plural$2(number)) {
+                    if (withoutSuffix) {
+                        return result + 'mánuðir';
+                    }
+                    return result + (isFuture ? 'mánuði' : 'mánuðum');
+                } else if (withoutSuffix) {
+                    return result + 'mánuður';
+                }
+                return result + (isFuture ? 'mánuð' : 'mánuði');
+            case 'y':
+                return withoutSuffix || isFuture ? 'ár' : 'ári';
+            case 'yy':
+                if (plural$2(number)) {
+                    return result + (withoutSuffix || isFuture ? 'ár' : 'árum');
+                }
+                return result + (withoutSuffix || isFuture ? 'ár' : 'ári');
+        }
+    }
+
+    hooks.defineLocale('is', {
+        months: 'janúar_febrúar_mars_apríl_maí_júní_júlí_ágúst_september_október_nóvember_desember'.split(
+            '_'
+        ),
+        monthsShort: 'jan_feb_mar_apr_maí_jún_júl_ágú_sep_okt_nóv_des'.split('_'),
+        weekdays: 'sunnudagur_mánudagur_þriðjudagur_miðvikudagur_fimmtudagur_föstudagur_laugardagur'.split(
+            '_'
+        ),
+        weekdaysShort: 'sun_mán_þri_mið_fim_fös_lau'.split('_'),
+        weekdaysMin: 'Su_Má_Þr_Mi_Fi_Fö_La'.split('_'),
+        longDateFormat: {
+            LT: 'H:mm',
+            LTS: 'H:mm:ss',
+            L: 'DD.MM.YYYY',
+            LL: 'D. MMMM YYYY',
+            LLL: 'D. MMMM YYYY [kl.] H:mm',
+            LLLL: 'dddd, D. MMMM YYYY [kl.] H:mm',
+        },
+        calendar: {
+            sameDay: '[í dag kl.] LT',
+            nextDay: '[á morgun kl.] LT',
+            nextWeek: 'dddd [kl.] LT',
+            lastDay: '[í gær kl.] LT',
+            lastWeek: '[síðasta] dddd [kl.] LT',
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: 'eftir %s',
+            past: 'fyrir %s síðan',
+            s: translate$5,
+            ss: translate$5,
+            m: translate$5,
+            mm: translate$5,
+            h: 'klukkustund',
+            hh: translate$5,
+            d: translate$5,
+            dd: translate$5,
+            M: translate$5,
+            MM: translate$5,
+            y: translate$5,
+            yy: translate$5,
+        },
+        dayOfMonthOrdinalParse: /\d{1,2}\./,
+        ordinal: '%d.',
+        week: {
+            dow: 1, // Monday is the first day of the week.
+            doy: 4, // The week that contains Jan 4th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    hooks.defineLocale('it-ch', {
+        months: 'gennaio_febbraio_marzo_aprile_maggio_giugno_luglio_agosto_settembre_ottobre_novembre_dicembre'.split(
+            '_'
+        ),
+        monthsShort: 'gen_feb_mar_apr_mag_giu_lug_ago_set_ott_nov_dic'.split('_'),
+        weekdays: 'domenica_lunedì_martedì_mercoledì_giovedì_venerdì_sabato'.split(
+            '_'
+        ),
+        weekdaysShort: 'dom_lun_mar_mer_gio_ven_sab'.split('_'),
+        weekdaysMin: 'do_lu_ma_me_gi_ve_sa'.split('_'),
+        longDateFormat: {
+            LT: 'HH:mm',
+            LTS: 'HH:mm:ss',
+            L: 'DD.MM.YYYY',
+            LL: 'D MMMM YYYY',
+            LLL: 'D MMMM YYYY HH:mm',
+            LLLL: 'dddd D MMMM YYYY HH:mm',
+        },
+        calendar: {
+            sameDay: '[Oggi alle] LT',
+            nextDay: '[Domani alle] LT',
+            nextWeek: 'dddd [alle] LT',
+            lastDay: '[Ieri alle] LT',
+            lastWeek: function () {
+                switch (this.day()) {
+                    case 0:
+                        return '[la scorsa] dddd [alle] LT';
+                    default:
+                        return '[lo scorso] dddd [alle] LT';
+                }
+            },
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: function (s) {
+                return (/^[0-9].+$/.test(s) ? 'tra' : 'in') + ' ' + s;
+            },
+            past: '%s fa',
+            s: 'alcuni secondi',
+            ss: '%d secondi',
+            m: 'un minuto',
+            mm: '%d minuti',
+            h: "un'ora",
+            hh: '%d ore',
+            d: 'un giorno',
+            dd: '%d giorni',
+            M: 'un mese',
+            MM: '%d mesi',
+            y: 'un anno',
+            yy: '%d anni',
+        },
+        dayOfMonthOrdinalParse: /\d{1,2}º/,
+        ordinal: '%dº',
+        week: {
+            dow: 1, // Monday is the first day of the week.
+            doy: 4, // The week that contains Jan 4th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    hooks.defineLocale('it', {
+        months: 'gennaio_febbraio_marzo_aprile_maggio_giugno_luglio_agosto_settembre_ottobre_novembre_dicembre'.split(
+            '_'
+        ),
+        monthsShort: 'gen_feb_mar_apr_mag_giu_lug_ago_set_ott_nov_dic'.split('_'),
+        weekdays: 'domenica_lunedì_martedì_mercoledì_giovedì_venerdì_sabato'.split(
+            '_'
+        ),
+        weekdaysShort: 'dom_lun_mar_mer_gio_ven_sab'.split('_'),
+        weekdaysMin: 'do_lu_ma_me_gi_ve_sa'.split('_'),
+        longDateFormat: {
+            LT: 'HH:mm',
+            LTS: 'HH:mm:ss',
+            L: 'DD/MM/YYYY',
+            LL: 'D MMMM YYYY',
+            LLL: 'D MMMM YYYY HH:mm',
+            LLLL: 'dddd D MMMM YYYY HH:mm',
+        },
+        calendar: {
+            sameDay: function () {
+                return (
+                    '[Oggi a' +
+                    (this.hours() > 1 ? 'lle ' : this.hours() === 0 ? ' ' : "ll'") +
+                    ']LT'
+                );
+            },
+            nextDay: function () {
+                return (
+                    '[Domani a' +
+                    (this.hours() > 1 ? 'lle ' : this.hours() === 0 ? ' ' : "ll'") +
+                    ']LT'
+                );
+            },
+            nextWeek: function () {
+                return (
+                    'dddd [a' +
+                    (this.hours() > 1 ? 'lle ' : this.hours() === 0 ? ' ' : "ll'") +
+                    ']LT'
+                );
+            },
+            lastDay: function () {
+                return (
+                    '[Ieri a' +
+                    (this.hours() > 1 ? 'lle ' : this.hours() === 0 ? ' ' : "ll'") +
+                    ']LT'
+                );
+            },
+            lastWeek: function () {
+                switch (this.day()) {
+                    case 0:
+                        return (
+                            '[La scorsa] dddd [a' +
+                            (this.hours() > 1
+                                ? 'lle '
+                                : this.hours() === 0
+                                ? ' '
+                                : "ll'") +
+                            ']LT'
+                        );
+                    default:
+                        return (
+                            '[Lo scorso] dddd [a' +
+                            (this.hours() > 1
+                                ? 'lle '
+                                : this.hours() === 0
+                                ? ' '
+                                : "ll'") +
+                            ']LT'
+                        );
+                }
+            },
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: 'tra %s',
+            past: '%s fa',
+            s: 'alcuni secondi',
+            ss: '%d secondi',
+            m: 'un minuto',
+            mm: '%d minuti',
+            h: "un'ora",
+            hh: '%d ore',
+            d: 'un giorno',
+            dd: '%d giorni',
+            M: 'un mese',
+            MM: '%d mesi',
+            y: 'un anno',
+            yy: '%d anni',
+        },
+        dayOfMonthOrdinalParse: /\d{1,2}º/,
+        ordinal: '%dº',
+        week: {
+            dow: 1, // Monday is the first day of the week.
+            doy: 4, // The week that contains Jan 4th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    hooks.defineLocale('ja', {
+        eras: [
+            {
+                since: '2019-05-01',
+                offset: 1,
+                name: '令和',
+                narrow: '㋿',
+                abbr: 'R',
+            },
+            {
+                since: '1989-01-08',
+                until: '2019-04-30',
+                offset: 1,
+                name: '平成',
+                narrow: '㍻',
+                abbr: 'H',
+            },
+            {
+                since: '1926-12-25',
+                until: '1989-01-07',
+                offset: 1,
+                name: '昭和',
+                narrow: '㍼',
+                abbr: 'S',
+            },
+            {
+                since: '1912-07-30',
+                until: '1926-12-24',
+                offset: 1,
+                name: '大正',
+                narrow: '㍽',
+                abbr: 'T',
+            },
+            {
+                since: '1873-01-01',
+                until: '1912-07-29',
+                offset: 6,
+                name: '明治',
+                narrow: '㍾',
+                abbr: 'M',
+            },
+            {
+                since: '0001-01-01',
+                until: '1873-12-31',
+                offset: 1,
+                name: '西暦',
+                narrow: 'AD',
+                abbr: 'AD',
+            },
+            {
+                since: '0000-12-31',
+                until: -Infinity,
+                offset: 1,
+                name: '紀元前',
+                narrow: 'BC',
+                abbr: 'BC',
+            },
+        ],
+        eraYearOrdinalRegex: /(元|\d+)年/,
+        eraYearOrdinalParse: function (input, match) {
+            return match[1] === '元' ? 1 : parseInt(match[1] || input, 10);
+        },
+        months: '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'),
+        monthsShort: '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split(
+            '_'
+        ),
+        weekdays: '日曜日_月曜日_火曜日_水曜日_木曜日_金曜日_土曜日'.split('_'),
+        weekdaysShort: '日_月_火_水_木_金_土'.split('_'),
+        weekdaysMin: '日_月_火_水_木_金_土'.split('_'),
+        longDateFormat: {
+            LT: 'HH:mm',
+            LTS: 'HH:mm:ss',
+            L: 'YYYY/MM/DD',
+            LL: 'YYYY年M月D日',
+            LLL: 'YYYY年M月D日 HH:mm',
+            LLLL: 'YYYY年M月D日 dddd HH:mm',
+            l: 'YYYY/MM/DD',
+            ll: 'YYYY年M月D日',
+            lll: 'YYYY年M月D日 HH:mm',
+            llll: 'YYYY年M月D日(ddd) HH:mm',
+        },
+        meridiemParse: /午前|午後/i,
+        isPM: function (input) {
+            return input === '午後';
+        },
+        meridiem: function (hour, minute, isLower) {
+            if (hour < 12) {
+                return '午前';
+            } else {
+                return '午後';
+            }
+        },
+        calendar: {
+            sameDay: '[今日] LT',
+            nextDay: '[明日] LT',
+            nextWeek: function (now) {
+                if (now.week() !== this.week()) {
+                    return '[来週]dddd LT';
+                } else {
+                    return 'dddd LT';
+                }
+            },
+            lastDay: '[昨日] LT',
+            lastWeek: function (now) {
+                if (this.week() !== now.week()) {
+                    return '[先週]dddd LT';
+                } else {
+                    return 'dddd LT';
+                }
+            },
+            sameElse: 'L',
+        },
+        dayOfMonthOrdinalParse: /\d{1,2}日/,
+        ordinal: function (number, period) {
+            switch (period) {
+                case 'y':
+                    return number === 1 ? '元年' : number + '年';
+                case 'd':
+                case 'D':
+                case 'DDD':
+                    return number + '日';
+                default:
+                    return number;
+            }
+        },
+        relativeTime: {
+            future: '%s後',
+            past: '%s前',
+            s: '数秒',
+            ss: '%d秒',
+            m: '1分',
+            mm: '%d分',
+            h: '1時間',
+            hh: '%d時間',
+            d: '1日',
+            dd: '%d日',
+            M: '1ヶ月',
+            MM: '%dヶ月',
+            y: '1年',
+            yy: '%d年',
+        },
+    });
+
+    //! moment.js locale configuration
+
+    hooks.defineLocale('jv', {
+        months: 'Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_Nopember_Desember'.split(
+            '_'
+        ),
+        monthsShort: 'Jan_Feb_Mar_Apr_Mei_Jun_Jul_Ags_Sep_Okt_Nop_Des'.split('_'),
+        weekdays: 'Minggu_Senen_Seloso_Rebu_Kemis_Jemuwah_Septu'.split('_'),
+        weekdaysShort: 'Min_Sen_Sel_Reb_Kem_Jem_Sep'.split('_'),
+        weekdaysMin: 'Mg_Sn_Sl_Rb_Km_Jm_Sp'.split('_'),
+        longDateFormat: {
+            LT: 'HH.mm',
+            LTS: 'HH.mm.ss',
+            L: 'DD/MM/YYYY',
+            LL: 'D MMMM YYYY',
+            LLL: 'D MMMM YYYY [pukul] HH.mm',
+            LLLL: 'dddd, D MMMM YYYY [pukul] HH.mm',
+        },
+        meridiemParse: /enjing|siyang|sonten|ndalu/,
+        meridiemHour: function (hour, meridiem) {
+            if (hour === 12) {
+                hour = 0;
+            }
+            if (meridiem === 'enjing') {
+                return hour;
+            } else if (meridiem === 'siyang') {
+                return hour >= 11 ? hour : hour + 12;
+            } else if (meridiem === 'sonten' || meridiem === 'ndalu') {
+                return hour + 12;
+            }
+        },
+        meridiem: function (hours, minutes, isLower) {
+            if (hours < 11) {
+                return 'enjing';
+            } else if (hours < 15) {
+                return 'siyang';
+            } else if (hours < 19) {
+                return 'sonten';
+            } else {
+                return 'ndalu';
+            }
+        },
+        calendar: {
+            sameDay: '[Dinten puniko pukul] LT',
+            nextDay: '[Mbenjang pukul] LT',
+            nextWeek: 'dddd [pukul] LT',
+            lastDay: '[Kala wingi pukul] LT',
+            lastWeek: 'dddd [kepengker pukul] LT',
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: 'wonten ing %s',
+            past: '%s ingkang kepengker',
+            s: 'sawetawis detik',
+            ss: '%d detik',
+            m: 'setunggal menit',
+            mm: '%d menit',
+            h: 'setunggal jam',
+            hh: '%d jam',
+            d: 'sedinten',
+            dd: '%d dinten',
+            M: 'sewulan',
+            MM: '%d wulan',
+            y: 'setaun',
+            yy: '%d taun',
+        },
+        week: {
+            dow: 1, // Monday is the first day of the week.
+            doy: 7, // The week that contains Jan 7th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    hooks.defineLocale('ka', {
+        months: 'იანვარი_თებერვალი_მარტი_აპრილი_მაისი_ივნისი_ივლისი_აგვისტო_სექტემბერი_ოქტომბერი_ნოემბერი_დეკემბერი'.split(
+            '_'
+        ),
+        monthsShort: 'იან_თებ_მარ_აპრ_მაი_ივნ_ივლ_აგვ_სექ_ოქტ_ნოე_დეკ'.split('_'),
+        weekdays: {
+            standalone: 'კვირა_ორშაბათი_სამშაბათი_ოთხშაბათი_ხუთშაბათი_პარასკევი_შაბათი'.split(
+                '_'
+            ),
+            format: 'კვირას_ორშაბათს_სამშაბათს_ოთხშაბათს_ხუთშაბათს_პარასკევს_შაბათს'.split(
+                '_'
+            ),
+            isFormat: /(წინა|შემდეგ)/,
+        },
+        weekdaysShort: 'კვი_ორშ_სამ_ოთხ_ხუთ_პარ_შაბ'.split('_'),
+        weekdaysMin: 'კვ_ორ_სა_ოთ_ხუ_პა_შა'.split('_'),
+        longDateFormat: {
+            LT: 'HH:mm',
+            LTS: 'HH:mm:ss',
+            L: 'DD/MM/YYYY',
+            LL: 'D MMMM YYYY',
+            LLL: 'D MMMM YYYY HH:mm',
+            LLLL: 'dddd, D MMMM YYYY HH:mm',
+        },
+        calendar: {
+            sameDay: '[დღეს] LT[-ზე]',
+            nextDay: '[ხვალ] LT[-ზე]',
+            lastDay: '[გუშინ] LT[-ზე]',
+            nextWeek: '[შემდეგ] dddd LT[-ზე]',
+            lastWeek: '[წინა] dddd LT-ზე',
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: function (s) {
+                return s.replace(/(წამ|წუთ|საათ|წელ|დღ|თვ)(ი|ე)/, function (
+                    $0,
+                    $1,
+                    $2
+                ) {
+                    return $2 === 'ი' ? $1 + 'ში' : $1 + $2 + 'ში';
+                });
+            },
+            past: function (s) {
+                if (/(წამი|წუთი|საათი|დღე|თვე)/.test(s)) {
+                    return s.replace(/(ი|ე)$/, 'ის წინ');
+                }
+                if (/წელი/.test(s)) {
+                    return s.replace(/წელი$/, 'წლის წინ');
+                }
+                return s;
+            },
+            s: 'რამდენიმე წამი',
+            ss: '%d წამი',
+            m: 'წუთი',
+            mm: '%d წუთი',
+            h: 'საათი',
+            hh: '%d საათი',
+            d: 'დღე',
+            dd: '%d დღე',
+            M: 'თვე',
+            MM: '%d თვე',
+            y: 'წელი',
+            yy: '%d წელი',
+        },
+        dayOfMonthOrdinalParse: /0|1-ლი|მე-\d{1,2}|\d{1,2}-ე/,
+        ordinal: function (number) {
+            if (number === 0) {
+                return number;
+            }
+            if (number === 1) {
+                return number + '-ლი';
+            }
+            if (
+                number < 20 ||
+                (number <= 100 && number % 20 === 0) ||
+                number % 100 === 0
+            ) {
+                return 'მე-' + number;
+            }
+            return number + '-ე';
+        },
+        week: {
+            dow: 1,
+            doy: 7,
+        },
+    });
+
+    //! moment.js locale configuration
+
+    var suffixes$1 = {
+        0: '-ші',
+        1: '-ші',
+        2: '-ші',
+        3: '-ші',
+        4: '-ші',
+        5: '-ші',
+        6: '-шы',
+        7: '-ші',
+        8: '-ші',
+        9: '-шы',
+        10: '-шы',
+        20: '-шы',
+        30: '-шы',
+        40: '-шы',
+        50: '-ші',
+        60: '-шы',
+        70: '-ші',
+        80: '-ші',
+        90: '-шы',
+        100: '-ші',
+    };
+
+    hooks.defineLocale('kk', {
+        months: 'қаңтар_ақпан_наурыз_сәуір_мамыр_маусым_шілде_тамыз_қыркүйек_қазан_қараша_желтоқсан'.split(
+            '_'
+        ),
+        monthsShort: 'қаң_ақп_нау_сәу_мам_мау_шіл_там_қыр_қаз_қар_жел'.split('_'),
+        weekdays: 'жексенбі_дүйсенбі_сейсенбі_сәрсенбі_бейсенбі_жұма_сенбі'.split(
+            '_'
+        ),
+        weekdaysShort: 'жек_дүй_сей_сәр_бей_жұм_сен'.split('_'),
+        weekdaysMin: 'жк_дй_сй_ср_бй_жм_сн'.split('_'),
+        longDateFormat: {
+            LT: 'HH:mm',
+            LTS: 'HH:mm:ss',
+            L: 'DD.MM.YYYY',
+            LL: 'D MMMM YYYY',
+            LLL: 'D MMMM YYYY HH:mm',
+            LLLL: 'dddd, D MMMM YYYY HH:mm',
+        },
+        calendar: {
+            sameDay: '[Бүгін сағат] LT',
+            nextDay: '[Ертең сағат] LT',
+            nextWeek: 'dddd [сағат] LT',
+            lastDay: '[Кеше сағат] LT',
+            lastWeek: '[Өткен аптаның] dddd [сағат] LT',
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: '%s ішінде',
+            past: '%s бұрын',
+            s: 'бірнеше секунд',
+            ss: '%d секунд',
+            m: 'бір минут',
+            mm: '%d минут',
+            h: 'бір сағат',
+            hh: '%d сағат',
+            d: 'бір күн',
+            dd: '%d күн',
+            M: 'бір ай',
+            MM: '%d ай',
+            y: 'бір жыл',
+            yy: '%d жыл',
+        },
+        dayOfMonthOrdinalParse: /\d{1,2}-(ші|шы)/,
+        ordinal: function (number) {
+            var a = number % 10,
+                b = number >= 100 ? 100 : null;
+            return number + (suffixes$1[number] || suffixes$1[a] || suffixes$1[b]);
+        },
+        week: {
+            dow: 1, // Monday is the first day of the week.
+            doy: 7, // The week that contains Jan 7th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    var symbolMap$8 = {
+            '1': '១',
+            '2': '២',
+            '3': '៣',
+            '4': '៤',
+            '5': '៥',
+            '6': '៦',
+            '7': '៧',
+            '8': '៨',
+            '9': '៩',
+            '0': '០',
+        },
+        numberMap$7 = {
+            '១': '1',
+            '២': '2',
+            '៣': '3',
+            '៤': '4',
+            '៥': '5',
+            '៦': '6',
+            '៧': '7',
+            '៨': '8',
+            '៩': '9',
+            '០': '0',
+        };
+
+    hooks.defineLocale('km', {
+        months: 'មករា_កុម្ភៈ_មីនា_មេសា_ឧសភា_មិថុនា_កក្កដា_សីហា_កញ្ញា_តុលា_វិច្ឆិកា_ធ្នូ'.split(
+            '_'
+        ),
+        monthsShort: 'មករា_កុម្ភៈ_មីនា_មេសា_ឧសភា_មិថុនា_កក្កដា_សីហា_កញ្ញា_តុលា_វិច្ឆិកា_ធ្នូ'.split(
+            '_'
+        ),
+        weekdays: 'អាទិត្យ_ច័ន្ទ_អង្គារ_ពុធ_ព្រហស្បតិ៍_សុក្រ_សៅរ៍'.split('_'),
+        weekdaysShort: 'អា_ច_អ_ព_ព្រ_សុ_ស'.split('_'),
+        weekdaysMin: 'អា_ច_អ_ព_ព្រ_សុ_ស'.split('_'),
+        weekdaysParseExact: true,
+        longDateFormat: {
+            LT: 'HH:mm',
+            LTS: 'HH:mm:ss',
+            L: 'DD/MM/YYYY',
+            LL: 'D MMMM YYYY',
+            LLL: 'D MMMM YYYY HH:mm',
+            LLLL: 'dddd, D MMMM YYYY HH:mm',
+        },
+        meridiemParse: /ព្រឹក|ល្ងាច/,
+        isPM: function (input) {
+            return input === 'ល្ងាច';
+        },
+        meridiem: function (hour, minute, isLower) {
+            if (hour < 12) {
+                return 'ព្រឹក';
+            } else {
+                return 'ល្ងាច';
+            }
+        },
+        calendar: {
+            sameDay: '[ថ្ងៃនេះ ម៉ោង] LT',
+            nextDay: '[ស្អែក ម៉ោង] LT',
+            nextWeek: 'dddd [ម៉ោង] LT',
+            lastDay: '[ម្សិលមិញ ម៉ោង] LT',
+            lastWeek: 'dddd [សប្តាហ៍មុន] [ម៉ោង] LT',
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: '%sទៀត',
+            past: '%sមុន',
+            s: 'ប៉ុន្មានវិនាទី',
+            ss: '%d វិនាទី',
+            m: 'មួយនាទី',
+            mm: '%d នាទី',
+            h: 'មួយម៉ោង',
+            hh: '%d ម៉ោង',
+            d: 'មួយថ្ងៃ',
+            dd: '%d ថ្ងៃ',
+            M: 'មួយខែ',
+            MM: '%d ខែ',
+            y: 'មួយឆ្នាំ',
+            yy: '%d ឆ្នាំ',
+        },
+        dayOfMonthOrdinalParse: /ទី\d{1,2}/,
+        ordinal: 'ទី%d',
+        preparse: function (string) {
+            return string.replace(/[១២៣៤៥៦៧៨៩០]/g, function (match) {
+                return numberMap$7[match];
+            });
+        },
+        postformat: function (string) {
+            return string.replace(/\d/g, function (match) {
+                return symbolMap$8[match];
+            });
+        },
+        week: {
+            dow: 1, // Monday is the first day of the week.
+            doy: 4, // The week that contains Jan 4th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    var symbolMap$9 = {
+            '1': '೧',
+            '2': '೨',
+            '3': '೩',
+            '4': '೪',
+            '5': '೫',
+            '6': '೬',
+            '7': '೭',
+            '8': '೮',
+            '9': '೯',
+            '0': '೦',
+        },
+        numberMap$8 = {
+            '೧': '1',
+            '೨': '2',
+            '೩': '3',
+            '೪': '4',
+            '೫': '5',
+            '೬': '6',
+            '೭': '7',
+            '೮': '8',
+            '೯': '9',
+            '೦': '0',
+        };
+
+    hooks.defineLocale('kn', {
+        months: 'ಜನವರಿ_ಫೆಬ್ರವರಿ_ಮಾರ್ಚ್_ಏಪ್ರಿಲ್_ಮೇ_ಜೂನ್_ಜುಲೈ_ಆಗಸ್ಟ್_ಸೆಪ್ಟೆಂಬರ್_ಅಕ್ಟೋಬರ್_ನವೆಂಬರ್_ಡಿಸೆಂಬರ್'.split(
+            '_'
+        ),
+        monthsShort: 'ಜನ_ಫೆಬ್ರ_ಮಾರ್ಚ್_ಏಪ್ರಿಲ್_ಮೇ_ಜೂನ್_ಜುಲೈ_ಆಗಸ್ಟ್_ಸೆಪ್ಟೆಂ_ಅಕ್ಟೋ_ನವೆಂ_ಡಿಸೆಂ'.split(
+            '_'
+        ),
+        monthsParseExact: true,
+        weekdays: 'ಭಾನುವಾರ_ಸೋಮವಾರ_ಮಂಗಳವಾರ_ಬುಧವಾರ_ಗುರುವಾರ_ಶುಕ್ರವಾರ_ಶನಿವಾರ'.split(
+            '_'
+        ),
+        weekdaysShort: 'ಭಾನು_ಸೋಮ_ಮಂಗಳ_ಬುಧ_ಗುರು_ಶುಕ್ರ_ಶನಿ'.split('_'),
+        weekdaysMin: 'ಭಾ_ಸೋ_ಮಂ_ಬು_ಗು_ಶು_ಶ'.split('_'),
+        longDateFormat: {
+            LT: 'A h:mm',
+            LTS: 'A h:mm:ss',
+            L: 'DD/MM/YYYY',
+            LL: 'D MMMM YYYY',
+            LLL: 'D MMMM YYYY, A h:mm',
+            LLLL: 'dddd, D MMMM YYYY, A h:mm',
+        },
+        calendar: {
+            sameDay: '[ಇಂದು] LT',
+            nextDay: '[ನಾಳೆ] LT',
+            nextWeek: 'dddd, LT',
+            lastDay: '[ನಿನ್ನೆ] LT',
+            lastWeek: '[ಕೊನೆಯ] dddd, LT',
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: '%s ನಂತರ',
+            past: '%s ಹಿಂದೆ',
+            s: 'ಕೆಲವು ಕ್ಷಣಗಳು',
+            ss: '%d ಸೆಕೆಂಡುಗಳು',
+            m: 'ಒಂದು ನಿಮಿಷ',
+            mm: '%d ನಿಮಿಷ',
+            h: 'ಒಂದು ಗಂಟೆ',
+            hh: '%d ಗಂಟೆ',
+            d: 'ಒಂದು ದಿನ',
+            dd: '%d ದಿನ',
+            M: 'ಒಂದು ತಿಂಗಳು',
+            MM: '%d ತಿಂಗಳು',
+            y: 'ಒಂದು ವರ್ಷ',
+            yy: '%d ವರ್ಷ',
+        },
+        preparse: function (string) {
+            return string.replace(/[೧೨೩೪೫೬೭೮೯೦]/g, function (match) {
+                return numberMap$8[match];
+            });
+        },
+        postformat: function (string) {
+            return string.replace(/\d/g, function (match) {
+                return symbolMap$9[match];
+            });
+        },
+        meridiemParse: /ರಾತ್ರಿ|ಬೆಳಿಗ್ಗೆ|ಮಧ್ಯಾಹ್ನ|ಸಂಜೆ/,
+        meridiemHour: function (hour, meridiem) {
+            if (hour === 12) {
+                hour = 0;
+            }
+            if (meridiem === 'ರಾತ್ರಿ') {
+                return hour < 4 ? hour : hour + 12;
+            } else if (meridiem === 'ಬೆಳಿಗ್ಗೆ') {
+                return hour;
+            } else if (meridiem === 'ಮಧ್ಯಾಹ್ನ') {
+                return hour >= 10 ? hour : hour + 12;
+            } else if (meridiem === 'ಸಂಜೆ') {
+                return hour + 12;
+            }
+        },
+        meridiem: function (hour, minute, isLower) {
+            if (hour < 4) {
+                return 'ರಾತ್ರಿ';
+            } else if (hour < 10) {
+                return 'ಬೆಳಿಗ್ಗೆ';
+            } else if (hour < 17) {
+                return 'ಮಧ್ಯಾಹ್ನ';
+            } else if (hour < 20) {
+                return 'ಸಂಜೆ';
+            } else {
+                return 'ರಾತ್ರಿ';
+            }
+        },
+        dayOfMonthOrdinalParse: /\d{1,2}(ನೇ)/,
+        ordinal: function (number) {
+            return number + 'ನೇ';
+        },
+        week: {
+            dow: 0, // Sunday is the first day of the week.
+            doy: 6, // The week that contains Jan 6th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    hooks.defineLocale('ko', {
+        months: '1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월'.split('_'),
+        monthsShort: '1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월'.split(
+            '_'
+        ),
+        weekdays: '일요일_월요일_화요일_수요일_목요일_금요일_토요일'.split('_'),
+        weekdaysShort: '일_월_화_수_목_금_토'.split('_'),
+        weekdaysMin: '일_월_화_수_목_금_토'.split('_'),
+        longDateFormat: {
+            LT: 'A h:mm',
+            LTS: 'A h:mm:ss',
+            L: 'YYYY.MM.DD.',
+            LL: 'YYYY년 MMMM D일',
+            LLL: 'YYYY년 MMMM D일 A h:mm',
+            LLLL: 'YYYY년 MMMM D일 dddd A h:mm',
+            l: 'YYYY.MM.DD.',
+            ll: 'YYYY년 MMMM D일',
+            lll: 'YYYY년 MMMM D일 A h:mm',
+            llll: 'YYYY년 MMMM D일 dddd A h:mm',
+        },
+        calendar: {
+            sameDay: '오늘 LT',
+            nextDay: '내일 LT',
+            nextWeek: 'dddd LT',
+            lastDay: '어제 LT',
+            lastWeek: '지난주 dddd LT',
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: '%s 후',
+            past: '%s 전',
+            s: '몇 초',
+            ss: '%d초',
+            m: '1분',
+            mm: '%d분',
+            h: '한 시간',
+            hh: '%d시간',
+            d: '하루',
+            dd: '%d일',
+            M: '한 달',
+            MM: '%d달',
+            y: '일 년',
+            yy: '%d년',
+        },
+        dayOfMonthOrdinalParse: /\d{1,2}(일|월|주)/,
+        ordinal: function (number, period) {
+            switch (period) {
+                case 'd':
+                case 'D':
+                case 'DDD':
+                    return number + '일';
+                case 'M':
+                    return number + '월';
+                case 'w':
+                case 'W':
+                    return number + '주';
+                default:
+                    return number;
+            }
+        },
+        meridiemParse: /오전|오후/,
+        isPM: function (token) {
+            return token === '오후';
+        },
+        meridiem: function (hour, minute, isUpper) {
+            return hour < 12 ? '오전' : '오후';
+        },
+    });
+
+    //! moment.js locale configuration
+
+    var symbolMap$a = {
+            '1': '١',
+            '2': '٢',
+            '3': '٣',
+            '4': '٤',
+            '5': '٥',
+            '6': '٦',
+            '7': '٧',
+            '8': '٨',
+            '9': '٩',
+            '0': '٠',
+        },
+        numberMap$9 = {
+            '١': '1',
+            '٢': '2',
+            '٣': '3',
+            '٤': '4',
+            '٥': '5',
+            '٦': '6',
+            '٧': '7',
+            '٨': '8',
+            '٩': '9',
+            '٠': '0',
+        },
+        months$8 = [
+            'کانونی دووەم',
+            'شوبات',
+            'ئازار',
+            'نیسان',
+            'ئایار',
+            'حوزەیران',
+            'تەمموز',
+            'ئاب',
+            'ئەیلوول',
+            'تشرینی یەكەم',
+            'تشرینی دووەم',
+            'كانونی یەکەم',
+        ];
+
+    hooks.defineLocale('ku', {
+        months: months$8,
+        monthsShort: months$8,
+        weekdays: 'یه‌كشه‌ممه‌_دووشه‌ممه‌_سێشه‌ممه‌_چوارشه‌ممه‌_پێنجشه‌ممه‌_هه‌ینی_شه‌ممه‌'.split(
+            '_'
+        ),
+        weekdaysShort: 'یه‌كشه‌م_دووشه‌م_سێشه‌م_چوارشه‌م_پێنجشه‌م_هه‌ینی_شه‌ممه‌'.split(
+            '_'
+        ),
+        weekdaysMin: 'ی_د_س_چ_پ_ه_ش'.split('_'),
+        weekdaysParseExact: true,
+        longDateFormat: {
+            LT: 'HH:mm',
+            LTS: 'HH:mm:ss',
+            L: 'DD/MM/YYYY',
+            LL: 'D MMMM YYYY',
+            LLL: 'D MMMM YYYY HH:mm',
+            LLLL: 'dddd, D MMMM YYYY HH:mm',
+        },
+        meridiemParse: /ئێواره‌|به‌یانی/,
+        isPM: function (input) {
+            return /ئێواره‌/.test(input);
+        },
+        meridiem: function (hour, minute, isLower) {
+            if (hour < 12) {
+                return 'به‌یانی';
+            } else {
+                return 'ئێواره‌';
+            }
+        },
+        calendar: {
+            sameDay: '[ئه‌مرۆ كاتژمێر] LT',
+            nextDay: '[به‌یانی كاتژمێر] LT',
+            nextWeek: 'dddd [كاتژمێر] LT',
+            lastDay: '[دوێنێ كاتژمێر] LT',
+            lastWeek: 'dddd [كاتژمێر] LT',
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: 'له‌ %s',
+            past: '%s',
+            s: 'چه‌ند چركه‌یه‌ك',
+            ss: 'چركه‌ %d',
+            m: 'یه‌ك خوله‌ك',
+            mm: '%d خوله‌ك',
+            h: 'یه‌ك كاتژمێر',
+            hh: '%d كاتژمێر',
+            d: 'یه‌ك ڕۆژ',
+            dd: '%d ڕۆژ',
+            M: 'یه‌ك مانگ',
+            MM: '%d مانگ',
+            y: 'یه‌ك ساڵ',
+            yy: '%d ساڵ',
+        },
+        preparse: function (string) {
+            return string
+                .replace(/[١٢٣٤٥٦٧٨٩٠]/g, function (match) {
+                    return numberMap$9[match];
+                })
+                .replace(/،/g, ',');
+        },
+        postformat: function (string) {
+            return string
+                .replace(/\d/g, function (match) {
+                    return symbolMap$a[match];
+                })
+                .replace(/,/g, '،');
+        },
+        week: {
+            dow: 6, // Saturday is the first day of the week.
+            doy: 12, // The week that contains Jan 12th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    var suffixes$2 = {
+        0: '-чү',
+        1: '-чи',
+        2: '-чи',
+        3: '-чү',
+        4: '-чү',
+        5: '-чи',
+        6: '-чы',
+        7: '-чи',
+        8: '-чи',
+        9: '-чу',
+        10: '-чу',
+        20: '-чы',
+        30: '-чу',
+        40: '-чы',
+        50: '-чү',
+        60: '-чы',
+        70: '-чи',
+        80: '-чи',
+        90: '-чу',
+        100: '-чү',
+    };
+
+    hooks.defineLocale('ky', {
+        months: 'январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь'.split(
+            '_'
+        ),
+        monthsShort: 'янв_фев_март_апр_май_июнь_июль_авг_сен_окт_ноя_дек'.split(
+            '_'
+        ),
+        weekdays: 'Жекшемби_Дүйшөмбү_Шейшемби_Шаршемби_Бейшемби_Жума_Ишемби'.split(
+            '_'
+        ),
+        weekdaysShort: 'Жек_Дүй_Шей_Шар_Бей_Жум_Ише'.split('_'),
+        weekdaysMin: 'Жк_Дй_Шй_Шр_Бй_Жм_Иш'.split('_'),
+        longDateFormat: {
+            LT: 'HH:mm',
+            LTS: 'HH:mm:ss',
+            L: 'DD.MM.YYYY',
+            LL: 'D MMMM YYYY',
+            LLL: 'D MMMM YYYY HH:mm',
+            LLLL: 'dddd, D MMMM YYYY HH:mm',
+        },
+        calendar: {
+            sameDay: '[Бүгүн саат] LT',
+            nextDay: '[Эртең саат] LT',
+            nextWeek: 'dddd [саат] LT',
+            lastDay: '[Кечээ саат] LT',
+            lastWeek: '[Өткөн аптанын] dddd [күнү] [саат] LT',
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: '%s ичинде',
+            past: '%s мурун',
+            s: 'бирнече секунд',
+            ss: '%d секунд',
+            m: 'бир мүнөт',
+            mm: '%d мүнөт',
+            h: 'бир саат',
+            hh: '%d саат',
+            d: 'бир күн',
+            dd: '%d күн',
+            M: 'бир ай',
+            MM: '%d ай',
+            y: 'бир жыл',
+            yy: '%d жыл',
+        },
+        dayOfMonthOrdinalParse: /\d{1,2}-(чи|чы|чү|чу)/,
+        ordinal: function (number) {
+            var a = number % 10,
+                b = number >= 100 ? 100 : null;
+            return number + (suffixes$2[number] || suffixes$2[a] || suffixes$2[b]);
+        },
+        week: {
+            dow: 1, // Monday is the first day of the week.
+            doy: 7, // The week that contains Jan 7th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    function processRelativeTime$6(number, withoutSuffix, key, isFuture) {
+        var format = {
+            m: ['eng Minutt', 'enger Minutt'],
+            h: ['eng Stonn', 'enger Stonn'],
+            d: ['een Dag', 'engem Dag'],
+            M: ['ee Mount', 'engem Mount'],
+            y: ['ee Joer', 'engem Joer'],
+        };
+        return withoutSuffix ? format[key][0] : format[key][1];
+    }
+    function processFutureTime(string) {
+        var number = string.substr(0, string.indexOf(' '));
+        if (eifelerRegelAppliesToNumber(number)) {
+            return 'a ' + string;
+        }
+        return 'an ' + string;
+    }
+    function processPastTime(string) {
+        var number = string.substr(0, string.indexOf(' '));
+        if (eifelerRegelAppliesToNumber(number)) {
+            return 'viru ' + string;
+        }
+        return 'virun ' + string;
+    }
+    /**
+     * Returns true if the word before the given number loses the '-n' ending.
+     * e.g. 'an 10 Deeg' but 'a 5 Deeg'
+     *
+     * @param number {integer}
+     * @returns {boolean}
+     */
+    function eifelerRegelAppliesToNumber(number) {
+        number = parseInt(number, 10);
+        if (isNaN(number)) {
+            return false;
+        }
+        if (number < 0) {
+            // Negative Number --> always true
+            return true;
+        } else if (number < 10) {
+            // Only 1 digit
+            if (4 <= number && number <= 7) {
+                return true;
+            }
+            return false;
+        } else if (number < 100) {
+            // 2 digits
+            var lastDigit = number % 10,
+                firstDigit = number / 10;
+            if (lastDigit === 0) {
+                return eifelerRegelAppliesToNumber(firstDigit);
+            }
+            return eifelerRegelAppliesToNumber(lastDigit);
+        } else if (number < 10000) {
+            // 3 or 4 digits --> recursively check first digit
+            while (number >= 10) {
+                number = number / 10;
+            }
+            return eifelerRegelAppliesToNumber(number);
+        } else {
+            // Anything larger than 4 digits: recursively check first n-3 digits
+            number = number / 1000;
+            return eifelerRegelAppliesToNumber(number);
+        }
+    }
+
+    hooks.defineLocale('lb', {
+        months: 'Januar_Februar_Mäerz_Abrëll_Mee_Juni_Juli_August_September_Oktober_November_Dezember'.split(
+            '_'
+        ),
+        monthsShort: 'Jan._Febr._Mrz._Abr._Mee_Jun._Jul._Aug._Sept._Okt._Nov._Dez.'.split(
+            '_'
+        ),
+        monthsParseExact: true,
+        weekdays: 'Sonndeg_Méindeg_Dënschdeg_Mëttwoch_Donneschdeg_Freideg_Samschdeg'.split(
+            '_'
+        ),
+        weekdaysShort: 'So._Mé._Dë._Më._Do._Fr._Sa.'.split('_'),
+        weekdaysMin: 'So_Mé_Dë_Më_Do_Fr_Sa'.split('_'),
+        weekdaysParseExact: true,
+        longDateFormat: {
+            LT: 'H:mm [Auer]',
+            LTS: 'H:mm:ss [Auer]',
+            L: 'DD.MM.YYYY',
+            LL: 'D. MMMM YYYY',
+            LLL: 'D. MMMM YYYY H:mm [Auer]',
+            LLLL: 'dddd, D. MMMM YYYY H:mm [Auer]',
+        },
+        calendar: {
+            sameDay: '[Haut um] LT',
+            sameElse: 'L',
+            nextDay: '[Muer um] LT',
+            nextWeek: 'dddd [um] LT',
+            lastDay: '[Gëschter um] LT',
+            lastWeek: function () {
+                // Different date string for 'Dënschdeg' (Tuesday) and 'Donneschdeg' (Thursday) due to phonological rule
+                switch (this.day()) {
+                    case 2:
+                    case 4:
+                        return '[Leschten] dddd [um] LT';
+                    default:
+                        return '[Leschte] dddd [um] LT';
+                }
+            },
+        },
+        relativeTime: {
+            future: processFutureTime,
+            past: processPastTime,
+            s: 'e puer Sekonnen',
+            ss: '%d Sekonnen',
+            m: processRelativeTime$6,
+            mm: '%d Minutten',
+            h: processRelativeTime$6,
+            hh: '%d Stonnen',
+            d: processRelativeTime$6,
+            dd: '%d Deeg',
+            M: processRelativeTime$6,
+            MM: '%d Méint',
+            y: processRelativeTime$6,
+            yy: '%d Joer',
+        },
+        dayOfMonthOrdinalParse: /\d{1,2}\./,
+        ordinal: '%d.',
+        week: {
+            dow: 1, // Monday is the first day of the week.
+            doy: 4, // The week that contains Jan 4th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    hooks.defineLocale('lo', {
+        months: 'ມັງກອນ_ກຸມພາ_ມີນາ_ເມສາ_ພຶດສະພາ_ມິຖຸນາ_ກໍລະກົດ_ສິງຫາ_ກັນຍາ_ຕຸລາ_ພະຈິກ_ທັນວາ'.split(
+            '_'
+        ),
+        monthsShort: 'ມັງກອນ_ກຸມພາ_ມີນາ_ເມສາ_ພຶດສະພາ_ມິຖຸນາ_ກໍລະກົດ_ສິງຫາ_ກັນຍາ_ຕຸລາ_ພະຈິກ_ທັນວາ'.split(
+            '_'
+        ),
+        weekdays: 'ອາທິດ_ຈັນ_ອັງຄານ_ພຸດ_ພະຫັດ_ສຸກ_ເສົາ'.split('_'),
+        weekdaysShort: 'ທິດ_ຈັນ_ອັງຄານ_ພຸດ_ພະຫັດ_ສຸກ_ເສົາ'.split('_'),
+        weekdaysMin: 'ທ_ຈ_ອຄ_ພ_ພຫ_ສກ_ສ'.split('_'),
+        weekdaysParseExact: true,
+        longDateFormat: {
+            LT: 'HH:mm',
+            LTS: 'HH:mm:ss',
+            L: 'DD/MM/YYYY',
+            LL: 'D MMMM YYYY',
+            LLL: 'D MMMM YYYY HH:mm',
+            LLLL: 'ວັນdddd D MMMM YYYY HH:mm',
+        },
+        meridiemParse: /ຕອນເຊົ້າ|ຕອນແລງ/,
+        isPM: function (input) {
+            return input === 'ຕອນແລງ';
+        },
+        meridiem: function (hour, minute, isLower) {
+            if (hour < 12) {
+                return 'ຕອນເຊົ້າ';
+            } else {
+                return 'ຕອນແລງ';
+            }
+        },
+        calendar: {
+            sameDay: '[ມື້ນີ້ເວລາ] LT',
+            nextDay: '[ມື້ອື່ນເວລາ] LT',
+            nextWeek: '[ວັນ]dddd[ໜ້າເວລາ] LT',
+            lastDay: '[ມື້ວານນີ້ເວລາ] LT',
+            lastWeek: '[ວັນ]dddd[ແລ້ວນີ້ເວລາ] LT',
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: 'ອີກ %s',
+            past: '%sຜ່ານມາ',
+            s: 'ບໍ່ເທົ່າໃດວິນາທີ',
+            ss: '%d ວິນາທີ',
+            m: '1 ນາທີ',
+            mm: '%d ນາທີ',
+            h: '1 ຊົ່ວໂມງ',
+            hh: '%d ຊົ່ວໂມງ',
+            d: '1 ມື້',
+            dd: '%d ມື້',
+            M: '1 ເດືອນ',
+            MM: '%d ເດືອນ',
+            y: '1 ປີ',
+            yy: '%d ປີ',
+        },
+        dayOfMonthOrdinalParse: /(ທີ່)\d{1,2}/,
+        ordinal: function (number) {
+            return 'ທີ່' + number;
+        },
+    });
+
+    //! moment.js locale configuration
+
+    var units = {
+        ss: 'sekundė_sekundžių_sekundes',
+        m: 'minutė_minutės_minutę',
+        mm: 'minutės_minučių_minutes',
+        h: 'valanda_valandos_valandą',
+        hh: 'valandos_valandų_valandas',
+        d: 'diena_dienos_dieną',
+        dd: 'dienos_dienų_dienas',
+        M: 'mėnuo_mėnesio_mėnesį',
+        MM: 'mėnesiai_mėnesių_mėnesius',
+        y: 'metai_metų_metus',
+        yy: 'metai_metų_metus',
+    };
+    function translateSeconds(number, withoutSuffix, key, isFuture) {
+        if (withoutSuffix) {
+            return 'kelios sekundės';
+        } else {
+            return isFuture ? 'kelių sekundžių' : 'kelias sekundes';
+        }
+    }
+    function translateSingular(number, withoutSuffix, key, isFuture) {
+        return withoutSuffix
+            ? forms(key)[0]
+            : isFuture
+            ? forms(key)[1]
+            : forms(key)[2];
+    }
+    function special(number) {
+        return number % 10 === 0 || (number > 10 && number < 20);
+    }
+    function forms(key) {
+        return units[key].split('_');
+    }
+    function translate$6(number, withoutSuffix, key, isFuture) {
+        var result = number + ' ';
+        if (number === 1) {
+            return (
+                result + translateSingular(number, withoutSuffix, key[0], isFuture)
+            );
+        } else if (withoutSuffix) {
+            return result + (special(number) ? forms(key)[1] : forms(key)[0]);
+        } else {
+            if (isFuture) {
+                return result + forms(key)[1];
+            } else {
+                return result + (special(number) ? forms(key)[1] : forms(key)[2]);
+            }
+        }
+    }
+    hooks.defineLocale('lt', {
+        months: {
+            format: 'sausio_vasario_kovo_balandžio_gegužės_birželio_liepos_rugpjūčio_rugsėjo_spalio_lapkričio_gruodžio'.split(
+                '_'
+            ),
+            standalone: 'sausis_vasaris_kovas_balandis_gegužė_birželis_liepa_rugpjūtis_rugsėjis_spalis_lapkritis_gruodis'.split(
+                '_'
+            ),
+            isFormat: /D[oD]?(\[[^\[\]]*\]|\s)+MMMM?|MMMM?(\[[^\[\]]*\]|\s)+D[oD]?/,
+        },
+        monthsShort: 'sau_vas_kov_bal_geg_bir_lie_rgp_rgs_spa_lap_grd'.split('_'),
+        weekdays: {
+            format: 'sekmadienį_pirmadienį_antradienį_trečiadienį_ketvirtadienį_penktadienį_šeštadienį'.split(
+                '_'
+            ),
+            standalone: 'sekmadienis_pirmadienis_antradienis_trečiadienis_ketvirtadienis_penktadienis_šeštadienis'.split(
+                '_'
+            ),
+            isFormat: /dddd HH:mm/,
+        },
+        weekdaysShort: 'Sek_Pir_Ant_Tre_Ket_Pen_Šeš'.split('_'),
+        weekdaysMin: 'S_P_A_T_K_Pn_Š'.split('_'),
+        weekdaysParseExact: true,
+        longDateFormat: {
+            LT: 'HH:mm',
+            LTS: 'HH:mm:ss',
+            L: 'YYYY-MM-DD',
+            LL: 'YYYY [m.] MMMM D [d.]',
+            LLL: 'YYYY [m.] MMMM D [d.], HH:mm [val.]',
+            LLLL: 'YYYY [m.] MMMM D [d.], dddd, HH:mm [val.]',
+            l: 'YYYY-MM-DD',
+            ll: 'YYYY [m.] MMMM D [d.]',
+            lll: 'YYYY [m.] MMMM D [d.], HH:mm [val.]',
+            llll: 'YYYY [m.] MMMM D [d.], ddd, HH:mm [val.]',
+        },
+        calendar: {
+            sameDay: '[Šiandien] LT',
+            nextDay: '[Rytoj] LT',
+            nextWeek: 'dddd LT',
+            lastDay: '[Vakar] LT',
+            lastWeek: '[Praėjusį] dddd LT',
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: 'po %s',
+            past: 'prieš %s',
+            s: translateSeconds,
+            ss: translate$6,
+            m: translateSingular,
+            mm: translate$6,
+            h: translateSingular,
+            hh: translate$6,
+            d: translateSingular,
+            dd: translate$6,
+            M: translateSingular,
+            MM: translate$6,
+            y: translateSingular,
+            yy: translate$6,
+        },
+        dayOfMonthOrdinalParse: /\d{1,2}-oji/,
+        ordinal: function (number) {
+            return number + '-oji';
+        },
+        week: {
+            dow: 1, // Monday is the first day of the week.
+            doy: 4, // The week that contains Jan 4th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    var units$1 = {
+        ss: 'sekundes_sekundēm_sekunde_sekundes'.split('_'),
+        m: 'minūtes_minūtēm_minūte_minūtes'.split('_'),
+        mm: 'minūtes_minūtēm_minūte_minūtes'.split('_'),
+        h: 'stundas_stundām_stunda_stundas'.split('_'),
+        hh: 'stundas_stundām_stunda_stundas'.split('_'),
+        d: 'dienas_dienām_diena_dienas'.split('_'),
+        dd: 'dienas_dienām_diena_dienas'.split('_'),
+        M: 'mēneša_mēnešiem_mēnesis_mēneši'.split('_'),
+        MM: 'mēneša_mēnešiem_mēnesis_mēneši'.split('_'),
+        y: 'gada_gadiem_gads_gadi'.split('_'),
+        yy: 'gada_gadiem_gads_gadi'.split('_'),
+    };
+    /**
+     * @param withoutSuffix boolean true = a length of time; false = before/after a period of time.
+     */
+    function format$1(forms, number, withoutSuffix) {
+        if (withoutSuffix) {
+            // E.g. "21 minūte", "3 minūtes".
+            return number % 10 === 1 && number % 100 !== 11 ? forms[2] : forms[3];
+        } else {
+            // E.g. "21 minūtes" as in "pēc 21 minūtes".
+            // E.g. "3 minūtēm" as in "pēc 3 minūtēm".
+            return number % 10 === 1 && number % 100 !== 11 ? forms[0] : forms[1];
+        }
+    }
+    function relativeTimeWithPlural$1(number, withoutSuffix, key) {
+        return number + ' ' + format$1(units$1[key], number, withoutSuffix);
+    }
+    function relativeTimeWithSingular(number, withoutSuffix, key) {
+        return format$1(units$1[key], number, withoutSuffix);
+    }
+    function relativeSeconds(number, withoutSuffix) {
+        return withoutSuffix ? 'dažas sekundes' : 'dažām sekundēm';
+    }
+
+    hooks.defineLocale('lv', {
+        months: 'janvāris_februāris_marts_aprīlis_maijs_jūnijs_jūlijs_augusts_septembris_oktobris_novembris_decembris'.split(
+            '_'
+        ),
+        monthsShort: 'jan_feb_mar_apr_mai_jūn_jūl_aug_sep_okt_nov_dec'.split('_'),
+        weekdays: 'svētdiena_pirmdiena_otrdiena_trešdiena_ceturtdiena_piektdiena_sestdiena'.split(
+            '_'
+        ),
+        weekdaysShort: 'Sv_P_O_T_C_Pk_S'.split('_'),
+        weekdaysMin: 'Sv_P_O_T_C_Pk_S'.split('_'),
+        weekdaysParseExact: true,
+        longDateFormat: {
+            LT: 'HH:mm',
+            LTS: 'HH:mm:ss',
+            L: 'DD.MM.YYYY.',
+            LL: 'YYYY. [gada] D. MMMM',
+            LLL: 'YYYY. [gada] D. MMMM, HH:mm',
+            LLLL: 'YYYY. [gada] D. MMMM, dddd, HH:mm',
+        },
+        calendar: {
+            sameDay: '[Šodien pulksten] LT',
+            nextDay: '[Rīt pulksten] LT',
+            nextWeek: 'dddd [pulksten] LT',
+            lastDay: '[Vakar pulksten] LT',
+            lastWeek: '[Pagājušā] dddd [pulksten] LT',
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: 'pēc %s',
+            past: 'pirms %s',
+            s: relativeSeconds,
+            ss: relativeTimeWithPlural$1,
+            m: relativeTimeWithSingular,
+            mm: relativeTimeWithPlural$1,
+            h: relativeTimeWithSingular,
+            hh: relativeTimeWithPlural$1,
+            d: relativeTimeWithSingular,
+            dd: relativeTimeWithPlural$1,
+            M: relativeTimeWithSingular,
+            MM: relativeTimeWithPlural$1,
+            y: relativeTimeWithSingular,
+            yy: relativeTimeWithPlural$1,
+        },
+        dayOfMonthOrdinalParse: /\d{1,2}\./,
+        ordinal: '%d.',
+        week: {
+            dow: 1, // Monday is the first day of the week.
+            doy: 4, // The week that contains Jan 4th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    var translator = {
+        words: {
+            //Different grammatical cases
+            ss: ['sekund', 'sekunda', 'sekundi'],
+            m: ['jedan minut', 'jednog minuta'],
+            mm: ['minut', 'minuta', 'minuta'],
+            h: ['jedan sat', 'jednog sata'],
+            hh: ['sat', 'sata', 'sati'],
+            dd: ['dan', 'dana', 'dana'],
+            MM: ['mjesec', 'mjeseca', 'mjeseci'],
+            yy: ['godina', 'godine', 'godina'],
+        },
+        correctGrammaticalCase: function (number, wordKey) {
+            return number === 1
+                ? wordKey[0]
+                : number >= 2 && number <= 4
+                ? wordKey[1]
+                : wordKey[2];
+        },
+        translate: function (number, withoutSuffix, key) {
+            var wordKey = translator.words[key];
+            if (key.length === 1) {
+                return withoutSuffix ? wordKey[0] : wordKey[1];
+            } else {
+                return (
+                    number +
+                    ' ' +
+                    translator.correctGrammaticalCase(number, wordKey)
+                );
+            }
+        },
+    };
+
+    hooks.defineLocale('me', {
+        months: 'januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar'.split(
+            '_'
+        ),
+        monthsShort: 'jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.'.split(
+            '_'
+        ),
+        monthsParseExact: true,
+        weekdays: 'nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota'.split(
+            '_'
+        ),
+        weekdaysShort: 'ned._pon._uto._sri._čet._pet._sub.'.split('_'),
+        weekdaysMin: 'ne_po_ut_sr_če_pe_su'.split('_'),
+        weekdaysParseExact: true,
+        longDateFormat: {
+            LT: 'H:mm',
+            LTS: 'H:mm:ss',
+            L: 'DD.MM.YYYY',
+            LL: 'D. MMMM YYYY',
+            LLL: 'D. MMMM YYYY H:mm',
+            LLLL: 'dddd, D. MMMM YYYY H:mm',
+        },
+        calendar: {
+            sameDay: '[danas u] LT',
+            nextDay: '[sjutra u] LT',
+
+            nextWeek: function () {
+                switch (this.day()) {
+                    case 0:
+                        return '[u] [nedjelju] [u] LT';
+                    case 3:
+                        return '[u] [srijedu] [u] LT';
+                    case 6:
+                        return '[u] [subotu] [u] LT';
+                    case 1:
+                    case 2:
+                    case 4:
+                    case 5:
+                        return '[u] dddd [u] LT';
+                }
+            },
+            lastDay: '[juče u] LT',
+            lastWeek: function () {
+                var lastWeekDays = [
+                    '[prošle] [nedjelje] [u] LT',
+                    '[prošlog] [ponedjeljka] [u] LT',
+                    '[prošlog] [utorka] [u] LT',
+                    '[prošle] [srijede] [u] LT',
+                    '[prošlog] [četvrtka] [u] LT',
+                    '[prošlog] [petka] [u] LT',
+                    '[prošle] [subote] [u] LT',
+                ];
+                return lastWeekDays[this.day()];
+            },
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: 'za %s',
+            past: 'prije %s',
+            s: 'nekoliko sekundi',
+            ss: translator.translate,
+            m: translator.translate,
+            mm: translator.translate,
+            h: translator.translate,
+            hh: translator.translate,
+            d: 'dan',
+            dd: translator.translate,
+            M: 'mjesec',
+            MM: translator.translate,
+            y: 'godinu',
+            yy: translator.translate,
+        },
+        dayOfMonthOrdinalParse: /\d{1,2}\./,
+        ordinal: '%d.',
+        week: {
+            dow: 1, // Monday is the first day of the week.
+            doy: 7, // The week that contains Jan 7th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    hooks.defineLocale('mi', {
+        months: 'Kohi-tāte_Hui-tanguru_Poutū-te-rangi_Paenga-whāwhā_Haratua_Pipiri_Hōngoingoi_Here-turi-kōkā_Mahuru_Whiringa-ā-nuku_Whiringa-ā-rangi_Hakihea'.split(
+            '_'
+        ),
+        monthsShort: 'Kohi_Hui_Pou_Pae_Hara_Pipi_Hōngoi_Here_Mahu_Whi-nu_Whi-ra_Haki'.split(
+            '_'
+        ),
+        monthsRegex: /(?:['a-z\u0101\u014D\u016B]+\-?){1,3}/i,
+        monthsStrictRegex: /(?:['a-z\u0101\u014D\u016B]+\-?){1,3}/i,
+        monthsShortRegex: /(?:['a-z\u0101\u014D\u016B]+\-?){1,3}/i,
+        monthsShortStrictRegex: /(?:['a-z\u0101\u014D\u016B]+\-?){1,2}/i,
+        weekdays: 'Rātapu_Mane_Tūrei_Wenerei_Tāite_Paraire_Hātarei'.split('_'),
+        weekdaysShort: 'Ta_Ma_Tū_We_Tāi_Pa_Hā'.split('_'),
+        weekdaysMin: 'Ta_Ma_Tū_We_Tāi_Pa_Hā'.split('_'),
+        longDateFormat: {
+            LT: 'HH:mm',
+            LTS: 'HH:mm:ss',
+            L: 'DD/MM/YYYY',
+            LL: 'D MMMM YYYY',
+            LLL: 'D MMMM YYYY [i] HH:mm',
+            LLLL: 'dddd, D MMMM YYYY [i] HH:mm',
+        },
+        calendar: {
+            sameDay: '[i teie mahana, i] LT',
+            nextDay: '[apopo i] LT',
+            nextWeek: 'dddd [i] LT',
+            lastDay: '[inanahi i] LT',
+            lastWeek: 'dddd [whakamutunga i] LT',
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: 'i roto i %s',
+            past: '%s i mua',
+            s: 'te hēkona ruarua',
+            ss: '%d hēkona',
+            m: 'he meneti',
+            mm: '%d meneti',
+            h: 'te haora',
+            hh: '%d haora',
+            d: 'he ra',
+            dd: '%d ra',
+            M: 'he marama',
+            MM: '%d marama',
+            y: 'he tau',
+            yy: '%d tau',
+        },
+        dayOfMonthOrdinalParse: /\d{1,2}º/,
+        ordinal: '%dº',
+        week: {
+            dow: 1, // Monday is the first day of the week.
+            doy: 4, // The week that contains Jan 4th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    hooks.defineLocale('mk', {
+        months: 'јануари_февруари_март_април_мај_јуни_јули_август_септември_октомври_ноември_декември'.split(
+            '_'
+        ),
+        monthsShort: 'јан_фев_мар_апр_мај_јун_јул_авг_сеп_окт_ное_дек'.split('_'),
+        weekdays: 'недела_понеделник_вторник_среда_четврток_петок_сабота'.split(
+            '_'
+        ),
+        weekdaysShort: 'нед_пон_вто_сре_чет_пет_саб'.split('_'),
+        weekdaysMin: 'нe_пo_вт_ср_че_пе_сa'.split('_'),
+        longDateFormat: {
+            LT: 'H:mm',
+            LTS: 'H:mm:ss',
+            L: 'D.MM.YYYY',
+            LL: 'D MMMM YYYY',
+            LLL: 'D MMMM YYYY H:mm',
+            LLLL: 'dddd, D MMMM YYYY H:mm',
+        },
+        calendar: {
+            sameDay: '[Денес во] LT',
+            nextDay: '[Утре во] LT',
+            nextWeek: '[Во] dddd [во] LT',
+            lastDay: '[Вчера во] LT',
+            lastWeek: function () {
+                switch (this.day()) {
+                    case 0:
+                    case 3:
+                    case 6:
+                        return '[Изминатата] dddd [во] LT';
+                    case 1:
+                    case 2:
+                    case 4:
+                    case 5:
+                        return '[Изминатиот] dddd [во] LT';
+                }
+            },
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: 'за %s',
+            past: 'пред %s',
+            s: 'неколку секунди',
+            ss: '%d секунди',
+            m: 'една минута',
+            mm: '%d минути',
+            h: 'еден час',
+            hh: '%d часа',
+            d: 'еден ден',
+            dd: '%d дена',
+            M: 'еден месец',
+            MM: '%d месеци',
+            y: 'една година',
+            yy: '%d години',
+        },
+        dayOfMonthOrdinalParse: /\d{1,2}-(ев|ен|ти|ви|ри|ми)/,
+        ordinal: function (number) {
+            var lastDigit = number % 10,
+                last2Digits = number % 100;
+            if (number === 0) {
+                return number + '-ев';
+            } else if (last2Digits === 0) {
+                return number + '-ен';
+            } else if (last2Digits > 10 && last2Digits < 20) {
+                return number + '-ти';
+            } else if (lastDigit === 1) {
+                return number + '-ви';
+            } else if (lastDigit === 2) {
+                return number + '-ри';
+            } else if (lastDigit === 7 || lastDigit === 8) {
+                return number + '-ми';
+            } else {
+                return number + '-ти';
+            }
+        },
+        week: {
+            dow: 1, // Monday is the first day of the week.
+            doy: 7, // The week that contains Jan 7th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    hooks.defineLocale('ml', {
+        months: 'ജനുവരി_ഫെബ്രുവരി_മാർച്ച്_ഏപ്രിൽ_മേയ്_ജൂൺ_ജൂലൈ_ഓഗസ്റ്റ്_സെപ്റ്റംബർ_ഒക്ടോബർ_നവംബർ_ഡിസംബർ'.split(
+            '_'
+        ),
+        monthsShort: 'ജനു._ഫെബ്രു._മാർ._ഏപ്രി._മേയ്_ജൂൺ_ജൂലൈ._ഓഗ._സെപ്റ്റ._ഒക്ടോ._നവം._ഡിസം.'.split(
+            '_'
+        ),
+        monthsParseExact: true,
+        weekdays: 'ഞായറാഴ്ച_തിങ്കളാഴ്ച_ചൊവ്വാഴ്ച_ബുധനാഴ്ച_വ്യാഴാഴ്ച_വെള്ളിയാഴ്ച_ശനിയാഴ്ച'.split(
+            '_'
+        ),
+        weekdaysShort: 'ഞായർ_തിങ്കൾ_ചൊവ്വ_ബുധൻ_വ്യാഴം_വെള്ളി_ശനി'.split('_'),
+        weekdaysMin: 'ഞാ_തി_ചൊ_ബു_വ്യാ_വെ_ശ'.split('_'),
+        longDateFormat: {
+            LT: 'A h:mm -നു',
+            LTS: 'A h:mm:ss -നു',
+            L: 'DD/MM/YYYY',
+            LL: 'D MMMM YYYY',
+            LLL: 'D MMMM YYYY, A h:mm -നു',
+            LLLL: 'dddd, D MMMM YYYY, A h:mm -നു',
+        },
+        calendar: {
+            sameDay: '[ഇന്ന്] LT',
+            nextDay: '[നാളെ] LT',
+            nextWeek: 'dddd, LT',
+            lastDay: '[ഇന്നലെ] LT',
+            lastWeek: '[കഴിഞ്ഞ] dddd, LT',
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: '%s കഴിഞ്ഞ്',
+            past: '%s മുൻപ്',
+            s: 'അൽപ നിമിഷങ്ങൾ',
+            ss: '%d സെക്കൻഡ്',
+            m: 'ഒരു മിനിറ്റ്',
+            mm: '%d മിനിറ്റ്',
+            h: 'ഒരു മണിക്കൂർ',
+            hh: '%d മണിക്കൂർ',
+            d: 'ഒരു ദിവസം',
+            dd: '%d ദിവസം',
+            M: 'ഒരു മാസം',
+            MM: '%d മാസം',
+            y: 'ഒരു വർഷം',
+            yy: '%d വർഷം',
+        },
+        meridiemParse: /രാത്രി|രാവിലെ|ഉച്ച കഴിഞ്ഞ്|വൈകുന്നേരം|രാത്രി/i,
+        meridiemHour: function (hour, meridiem) {
+            if (hour === 12) {
+                hour = 0;
+            }
+            if (
+                (meridiem === 'രാത്രി' && hour >= 4) ||
+                meridiem === 'ഉച്ച കഴിഞ്ഞ്' ||
+                meridiem === 'വൈകുന്നേരം'
+            ) {
+                return hour + 12;
+            } else {
+                return hour;
+            }
+        },
+        meridiem: function (hour, minute, isLower) {
+            if (hour < 4) {
+                return 'രാത്രി';
+            } else if (hour < 12) {
+                return 'രാവിലെ';
+            } else if (hour < 17) {
+                return 'ഉച്ച കഴിഞ്ഞ്';
+            } else if (hour < 20) {
+                return 'വൈകുന്നേരം';
+            } else {
+                return 'രാത്രി';
+            }
+        },
+    });
+
+    //! moment.js locale configuration
+
+    function translate$7(number, withoutSuffix, key, isFuture) {
+        switch (key) {
+            case 's':
+                return withoutSuffix ? 'хэдхэн секунд' : 'хэдхэн секундын';
+            case 'ss':
+                return number + (withoutSuffix ? ' секунд' : ' секундын');
+            case 'm':
+            case 'mm':
+                return number + (withoutSuffix ? ' минут' : ' минутын');
+            case 'h':
+            case 'hh':
+                return number + (withoutSuffix ? ' цаг' : ' цагийн');
+            case 'd':
+            case 'dd':
+                return number + (withoutSuffix ? ' өдөр' : ' өдрийн');
+            case 'M':
+            case 'MM':
+                return number + (withoutSuffix ? ' сар' : ' сарын');
+            case 'y':
+            case 'yy':
+                return number + (withoutSuffix ? ' жил' : ' жилийн');
+            default:
+                return number;
+        }
+    }
+
+    hooks.defineLocale('mn', {
+        months: 'Нэгдүгээр сар_Хоёрдугаар сар_Гуравдугаар сар_Дөрөвдүгээр сар_Тавдугаар сар_Зургадугаар сар_Долдугаар сар_Наймдугаар сар_Есдүгээр сар_Аравдугаар сар_Арван нэгдүгээр сар_Арван хоёрдугаар сар'.split(
+            '_'
+        ),
+        monthsShort: '1 сар_2 сар_3 сар_4 сар_5 сар_6 сар_7 сар_8 сар_9 сар_10 сар_11 сар_12 сар'.split(
+            '_'
+        ),
+        monthsParseExact: true,
+        weekdays: 'Ням_Даваа_Мягмар_Лхагва_Пүрэв_Баасан_Бямба'.split('_'),
+        weekdaysShort: 'Ням_Дав_Мяг_Лха_Пүр_Баа_Бям'.split('_'),
+        weekdaysMin: 'Ня_Да_Мя_Лх_Пү_Ба_Бя'.split('_'),
+        weekdaysParseExact: true,
+        longDateFormat: {
+            LT: 'HH:mm',
+            LTS: 'HH:mm:ss',
+            L: 'YYYY-MM-DD',
+            LL: 'YYYY оны MMMMын D',
+            LLL: 'YYYY оны MMMMын D HH:mm',
+            LLLL: 'dddd, YYYY оны MMMMын D HH:mm',
+        },
+        meridiemParse: /ҮӨ|ҮХ/i,
+        isPM: function (input) {
+            return input === 'ҮХ';
+        },
+        meridiem: function (hour, minute, isLower) {
+            if (hour < 12) {
+                return 'ҮӨ';
+            } else {
+                return 'ҮХ';
+            }
+        },
+        calendar: {
+            sameDay: '[Өнөөдөр] LT',
+            nextDay: '[Маргааш] LT',
+            nextWeek: '[Ирэх] dddd LT',
+            lastDay: '[Өчигдөр] LT',
+            lastWeek: '[Өнгөрсөн] dddd LT',
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: '%s дараа',
+            past: '%s өмнө',
+            s: translate$7,
+            ss: translate$7,
+            m: translate$7,
+            mm: translate$7,
+            h: translate$7,
+            hh: translate$7,
+            d: translate$7,
+            dd: translate$7,
+            M: translate$7,
+            MM: translate$7,
+            y: translate$7,
+            yy: translate$7,
+        },
+        dayOfMonthOrdinalParse: /\d{1,2} өдөр/,
+        ordinal: function (number, period) {
+            switch (period) {
+                case 'd':
+                case 'D':
+                case 'DDD':
+                    return number + ' өдөр';
+                default:
+                    return number;
+            }
+        },
+    });
+
+    //! moment.js locale configuration
+
+    var symbolMap$b = {
+            '1': '१',
+            '2': '२',
+            '3': '३',
+            '4': '४',
+            '5': '५',
+            '6': '६',
+            '7': '७',
+            '8': '८',
+            '9': '९',
+            '0': '०',
+        },
+        numberMap$a = {
+            '१': '1',
+            '२': '2',
+            '३': '3',
+            '४': '4',
+            '५': '5',
+            '६': '6',
+            '७': '7',
+            '८': '8',
+            '९': '9',
+            '०': '0',
+        };
+
+    function relativeTimeMr(number, withoutSuffix, string, isFuture) {
+        var output = '';
+        if (withoutSuffix) {
+            switch (string) {
+                case 's':
+                    output = 'काही सेकंद';
+                    break;
+                case 'ss':
+                    output = '%d सेकंद';
+                    break;
+                case 'm':
+                    output = 'एक मिनिट';
+                    break;
+                case 'mm':
+                    output = '%d मिनिटे';
+                    break;
+                case 'h':
+                    output = 'एक तास';
+                    break;
+                case 'hh':
+                    output = '%d तास';
+                    break;
+                case 'd':
+                    output = 'एक दिवस';
+                    break;
+                case 'dd':
+                    output = '%d दिवस';
+                    break;
+                case 'M':
+                    output = 'एक महिना';
+                    break;
+                case 'MM':
+                    output = '%d महिने';
+                    break;
+                case 'y':
+                    output = 'एक वर्ष';
+                    break;
+                case 'yy':
+                    output = '%d वर्षे';
+                    break;
+            }
+        } else {
+            switch (string) {
+                case 's':
+                    output = 'काही सेकंदां';
+                    break;
+                case 'ss':
+                    output = '%d सेकंदां';
+                    break;
+                case 'm':
+                    output = 'एका मिनिटा';
+                    break;
+                case 'mm':
+                    output = '%d मिनिटां';
+                    break;
+                case 'h':
+                    output = 'एका तासा';
+                    break;
+                case 'hh':
+                    output = '%d तासां';
+                    break;
+                case 'd':
+                    output = 'एका दिवसा';
+                    break;
+                case 'dd':
+                    output = '%d दिवसां';
+                    break;
+                case 'M':
+                    output = 'एका महिन्या';
+                    break;
+                case 'MM':
+                    output = '%d महिन्यां';
+                    break;
+                case 'y':
+                    output = 'एका वर्षा';
+                    break;
+                case 'yy':
+                    output = '%d वर्षां';
+                    break;
+            }
+        }
+        return output.replace(/%d/i, number);
+    }
+
+    hooks.defineLocale('mr', {
+        months: 'जानेवारी_फेब्रुवारी_मार्च_एप्रिल_मे_जून_जुलै_ऑगस्ट_सप्टेंबर_ऑक्टोबर_नोव्हेंबर_डिसेंबर'.split(
+            '_'
+        ),
+        monthsShort: 'जाने._फेब्रु._मार्च._एप्रि._मे._जून._जुलै._ऑग._सप्टें._ऑक्टो._नोव्हें._डिसें.'.split(
+            '_'
+        ),
+        monthsParseExact: true,
+        weekdays: 'रविवार_सोमवार_मंगळवार_बुधवार_गुरूवार_शुक्रवार_शनिवार'.split('_'),
+        weekdaysShort: 'रवि_सोम_मंगळ_बुध_गुरू_शुक्र_शनि'.split('_'),
+        weekdaysMin: 'र_सो_मं_बु_गु_शु_श'.split('_'),
+        longDateFormat: {
+            LT: 'A h:mm वाजता',
+            LTS: 'A h:mm:ss वाजता',
+            L: 'DD/MM/YYYY',
+            LL: 'D MMMM YYYY',
+            LLL: 'D MMMM YYYY, A h:mm वाजता',
+            LLLL: 'dddd, D MMMM YYYY, A h:mm वाजता',
+        },
+        calendar: {
+            sameDay: '[आज] LT',
+            nextDay: '[उद्या] LT',
+            nextWeek: 'dddd, LT',
+            lastDay: '[काल] LT',
+            lastWeek: '[मागील] dddd, LT',
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: '%sमध्ये',
+            past: '%sपूर्वी',
+            s: relativeTimeMr,
+            ss: relativeTimeMr,
+            m: relativeTimeMr,
+            mm: relativeTimeMr,
+            h: relativeTimeMr,
+            hh: relativeTimeMr,
+            d: relativeTimeMr,
+            dd: relativeTimeMr,
+            M: relativeTimeMr,
+            MM: relativeTimeMr,
+            y: relativeTimeMr,
+            yy: relativeTimeMr,
+        },
+        preparse: function (string) {
+            return string.replace(/[१२३४५६७८९०]/g, function (match) {
+                return numberMap$a[match];
+            });
+        },
+        postformat: function (string) {
+            return string.replace(/\d/g, function (match) {
+                return symbolMap$b[match];
+            });
+        },
+        meridiemParse: /पहाटे|सकाळी|दुपारी|सायंकाळी|रात्री/,
+        meridiemHour: function (hour, meridiem) {
+            if (hour === 12) {
+                hour = 0;
+            }
+            if (meridiem === 'पहाटे' || meridiem === 'सकाळी') {
+                return hour;
+            } else if (
+                meridiem === 'दुपारी' ||
+                meridiem === 'सायंकाळी' ||
+                meridiem === 'रात्री'
+            ) {
+                return hour >= 12 ? hour : hour + 12;
+            }
+        },
+        meridiem: function (hour, minute, isLower) {
+            if (hour >= 0 && hour < 6) {
+                return 'पहाटे';
+            } else if (hour < 12) {
+                return 'सकाळी';
+            } else if (hour < 17) {
+                return 'दुपारी';
+            } else if (hour < 20) {
+                return 'सायंकाळी';
+            } else {
+                return 'रात्री';
+            }
+        },
+        week: {
+            dow: 0, // Sunday is the first day of the week.
+            doy: 6, // The week that contains Jan 6th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    hooks.defineLocale('ms-my', {
+        months: 'Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember'.split(
+            '_'
+        ),
+        monthsShort: 'Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis'.split('_'),
+        weekdays: 'Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu'.split('_'),
+        weekdaysShort: 'Ahd_Isn_Sel_Rab_Kha_Jum_Sab'.split('_'),
+        weekdaysMin: 'Ah_Is_Sl_Rb_Km_Jm_Sb'.split('_'),
+        longDateFormat: {
+            LT: 'HH.mm',
+            LTS: 'HH.mm.ss',
+            L: 'DD/MM/YYYY',
+            LL: 'D MMMM YYYY',
+            LLL: 'D MMMM YYYY [pukul] HH.mm',
+            LLLL: 'dddd, D MMMM YYYY [pukul] HH.mm',
+        },
+        meridiemParse: /pagi|tengahari|petang|malam/,
+        meridiemHour: function (hour, meridiem) {
+            if (hour === 12) {
+                hour = 0;
+            }
+            if (meridiem === 'pagi') {
+                return hour;
+            } else if (meridiem === 'tengahari') {
+                return hour >= 11 ? hour : hour + 12;
+            } else if (meridiem === 'petang' || meridiem === 'malam') {
+                return hour + 12;
+            }
+        },
+        meridiem: function (hours, minutes, isLower) {
+            if (hours < 11) {
+                return 'pagi';
+            } else if (hours < 15) {
+                return 'tengahari';
+            } else if (hours < 19) {
+                return 'petang';
+            } else {
+                return 'malam';
+            }
+        },
+        calendar: {
+            sameDay: '[Hari ini pukul] LT',
+            nextDay: '[Esok pukul] LT',
+            nextWeek: 'dddd [pukul] LT',
+            lastDay: '[Kelmarin pukul] LT',
+            lastWeek: 'dddd [lepas pukul] LT',
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: 'dalam %s',
+            past: '%s yang lepas',
+            s: 'beberapa saat',
+            ss: '%d saat',
+            m: 'seminit',
+            mm: '%d minit',
+            h: 'sejam',
+            hh: '%d jam',
+            d: 'sehari',
+            dd: '%d hari',
+            M: 'sebulan',
+            MM: '%d bulan',
+            y: 'setahun',
+            yy: '%d tahun',
+        },
+        week: {
+            dow: 1, // Monday is the first day of the week.
+            doy: 7, // The week that contains Jan 7th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    hooks.defineLocale('ms', {
+        months: 'Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember'.split(
+            '_'
+        ),
+        monthsShort: 'Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis'.split('_'),
+        weekdays: 'Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu'.split('_'),
+        weekdaysShort: 'Ahd_Isn_Sel_Rab_Kha_Jum_Sab'.split('_'),
+        weekdaysMin: 'Ah_Is_Sl_Rb_Km_Jm_Sb'.split('_'),
+        longDateFormat: {
+            LT: 'HH.mm',
+            LTS: 'HH.mm.ss',
+            L: 'DD/MM/YYYY',
+            LL: 'D MMMM YYYY',
+            LLL: 'D MMMM YYYY [pukul] HH.mm',
+            LLLL: 'dddd, D MMMM YYYY [pukul] HH.mm',
+        },
+        meridiemParse: /pagi|tengahari|petang|malam/,
+        meridiemHour: function (hour, meridiem) {
+            if (hour === 12) {
+                hour = 0;
+            }
+            if (meridiem === 'pagi') {
+                return hour;
+            } else if (meridiem === 'tengahari') {
+                return hour >= 11 ? hour : hour + 12;
+            } else if (meridiem === 'petang' || meridiem === 'malam') {
+                return hour + 12;
+            }
+        },
+        meridiem: function (hours, minutes, isLower) {
+            if (hours < 11) {
+                return 'pagi';
+            } else if (hours < 15) {
+                return 'tengahari';
+            } else if (hours < 19) {
+                return 'petang';
+            } else {
+                return 'malam';
+            }
+        },
+        calendar: {
+            sameDay: '[Hari ini pukul] LT',
+            nextDay: '[Esok pukul] LT',
+            nextWeek: 'dddd [pukul] LT',
+            lastDay: '[Kelmarin pukul] LT',
+            lastWeek: 'dddd [lepas pukul] LT',
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: 'dalam %s',
+            past: '%s yang lepas',
+            s: 'beberapa saat',
+            ss: '%d saat',
+            m: 'seminit',
+            mm: '%d minit',
+            h: 'sejam',
+            hh: '%d jam',
+            d: 'sehari',
+            dd: '%d hari',
+            M: 'sebulan',
+            MM: '%d bulan',
+            y: 'setahun',
+            yy: '%d tahun',
+        },
+        week: {
+            dow: 1, // Monday is the first day of the week.
+            doy: 7, // The week that contains Jan 7th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    hooks.defineLocale('mt', {
+        months: 'Jannar_Frar_Marzu_April_Mejju_Ġunju_Lulju_Awwissu_Settembru_Ottubru_Novembru_Diċembru'.split(
+            '_'
+        ),
+        monthsShort: 'Jan_Fra_Mar_Apr_Mej_Ġun_Lul_Aww_Set_Ott_Nov_Diċ'.split('_'),
+        weekdays: 'Il-Ħadd_It-Tnejn_It-Tlieta_L-Erbgħa_Il-Ħamis_Il-Ġimgħa_Is-Sibt'.split(
+            '_'
+        ),
+        weekdaysShort: 'Ħad_Tne_Tli_Erb_Ħam_Ġim_Sib'.split('_'),
+        weekdaysMin: 'Ħa_Tn_Tl_Er_Ħa_Ġi_Si'.split('_'),
+        longDateFormat: {
+            LT: 'HH:mm',
+            LTS: 'HH:mm:ss',
+            L: 'DD/MM/YYYY',
+            LL: 'D MMMM YYYY',
+            LLL: 'D MMMM YYYY HH:mm',
+            LLLL: 'dddd, D MMMM YYYY HH:mm',
+        },
+        calendar: {
+            sameDay: '[Illum fil-]LT',
+            nextDay: '[Għada fil-]LT',
+            nextWeek: 'dddd [fil-]LT',
+            lastDay: '[Il-bieraħ fil-]LT',
+            lastWeek: 'dddd [li għadda] [fil-]LT',
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: 'f’ %s',
+            past: '%s ilu',
+            s: 'ftit sekondi',
+            ss: '%d sekondi',
+            m: 'minuta',
+            mm: '%d minuti',
+            h: 'siegħa',
+            hh: '%d siegħat',
+            d: 'ġurnata',
+            dd: '%d ġranet',
+            M: 'xahar',
+            MM: '%d xhur',
+            y: 'sena',
+            yy: '%d sni',
+        },
+        dayOfMonthOrdinalParse: /\d{1,2}º/,
+        ordinal: '%dº',
+        week: {
+            dow: 1, // Monday is the first day of the week.
+            doy: 4, // The week that contains Jan 4th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    var symbolMap$c = {
+            '1': '၁',
+            '2': '၂',
+            '3': '၃',
+            '4': '၄',
+            '5': '၅',
+            '6': '၆',
+            '7': '၇',
+            '8': '၈',
+            '9': '၉',
+            '0': '၀',
+        },
+        numberMap$b = {
+            '၁': '1',
+            '၂': '2',
+            '၃': '3',
+            '၄': '4',
+            '၅': '5',
+            '၆': '6',
+            '၇': '7',
+            '၈': '8',
+            '၉': '9',
+            '၀': '0',
+        };
+
+    hooks.defineLocale('my', {
+        months: 'ဇန်နဝါရီ_ဖေဖော်ဝါရီ_မတ်_ဧပြီ_မေ_ဇွန်_ဇူလိုင်_သြဂုတ်_စက်တင်ဘာ_အောက်တိုဘာ_နိုဝင်ဘာ_ဒီဇင်ဘာ'.split(
+            '_'
+        ),
+        monthsShort: 'ဇန်_ဖေ_မတ်_ပြီ_မေ_ဇွန်_လိုင်_သြ_စက်_အောက်_နို_ဒီ'.split('_'),
+        weekdays: 'တနင်္ဂနွေ_တနင်္လာ_အင်္ဂါ_ဗုဒ္ဓဟူး_ကြာသပတေး_သောကြာ_စနေ'.split(
+            '_'
+        ),
+        weekdaysShort: 'နွေ_လာ_ဂါ_ဟူး_ကြာ_သော_နေ'.split('_'),
+        weekdaysMin: 'နွေ_လာ_ဂါ_ဟူး_ကြာ_သော_နေ'.split('_'),
+
+        longDateFormat: {
+            LT: 'HH:mm',
+            LTS: 'HH:mm:ss',
+            L: 'DD/MM/YYYY',
+            LL: 'D MMMM YYYY',
+            LLL: 'D MMMM YYYY HH:mm',
+            LLLL: 'dddd D MMMM YYYY HH:mm',
+        },
+        calendar: {
+            sameDay: '[ယနေ.] LT [မှာ]',
+            nextDay: '[မနက်ဖြန်] LT [မှာ]',
+            nextWeek: 'dddd LT [မှာ]',
+            lastDay: '[မနေ.က] LT [မှာ]',
+            lastWeek: '[ပြီးခဲ့သော] dddd LT [မှာ]',
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: 'လာမည့် %s မှာ',
+            past: 'လွန်ခဲ့သော %s က',
+            s: 'စက္ကန်.အနည်းငယ်',
+            ss: '%d စက္ကန့်',
+            m: 'တစ်မိနစ်',
+            mm: '%d မိနစ်',
+            h: 'တစ်နာရီ',
+            hh: '%d နာရီ',
+            d: 'တစ်ရက်',
+            dd: '%d ရက်',
+            M: 'တစ်လ',
+            MM: '%d လ',
+            y: 'တစ်နှစ်',
+            yy: '%d နှစ်',
+        },
+        preparse: function (string) {
+            return string.replace(/[၁၂၃၄၅၆၇၈၉၀]/g, function (match) {
+                return numberMap$b[match];
+            });
+        },
+        postformat: function (string) {
+            return string.replace(/\d/g, function (match) {
+                return symbolMap$c[match];
+            });
+        },
+        week: {
+            dow: 1, // Monday is the first day of the week.
+            doy: 4, // The week that contains Jan 4th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    hooks.defineLocale('nb', {
+        months: 'januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember'.split(
+            '_'
+        ),
+        monthsShort: 'jan._feb._mars_apr._mai_juni_juli_aug._sep._okt._nov._des.'.split(
+            '_'
+        ),
+        monthsParseExact: true,
+        weekdays: 'søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag'.split('_'),
+        weekdaysShort: 'sø._ma._ti._on._to._fr._lø.'.split('_'),
+        weekdaysMin: 'sø_ma_ti_on_to_fr_lø'.split('_'),
+        weekdaysParseExact: true,
+        longDateFormat: {
+            LT: 'HH:mm',
+            LTS: 'HH:mm:ss',
+            L: 'DD.MM.YYYY',
+            LL: 'D. MMMM YYYY',
+            LLL: 'D. MMMM YYYY [kl.] HH:mm',
+            LLLL: 'dddd D. MMMM YYYY [kl.] HH:mm',
+        },
+        calendar: {
+            sameDay: '[i dag kl.] LT',
+            nextDay: '[i morgen kl.] LT',
+            nextWeek: 'dddd [kl.] LT',
+            lastDay: '[i går kl.] LT',
+            lastWeek: '[forrige] dddd [kl.] LT',
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: 'om %s',
+            past: '%s siden',
+            s: 'noen sekunder',
+            ss: '%d sekunder',
+            m: 'ett minutt',
+            mm: '%d minutter',
+            h: 'en time',
+            hh: '%d timer',
+            d: 'en dag',
+            dd: '%d dager',
+            M: 'en måned',
+            MM: '%d måneder',
+            y: 'ett år',
+            yy: '%d år',
+        },
+        dayOfMonthOrdinalParse: /\d{1,2}\./,
+        ordinal: '%d.',
+        week: {
+            dow: 1, // Monday is the first day of the week.
+            doy: 4, // The week that contains Jan 4th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    var symbolMap$d = {
+            '1': '१',
+            '2': '२',
+            '3': '३',
+            '4': '४',
+            '5': '५',
+            '6': '६',
+            '7': '७',
+            '8': '८',
+            '9': '९',
+            '0': '०',
+        },
+        numberMap$c = {
+            '१': '1',
+            '२': '2',
+            '३': '3',
+            '४': '4',
+            '५': '5',
+            '६': '6',
+            '७': '7',
+            '८': '8',
+            '९': '9',
+            '०': '0',
+        };
+
+    hooks.defineLocale('ne', {
+        months: 'जनवरी_फेब्रुवरी_मार्च_अप्रिल_मई_जुन_जुलाई_अगष्ट_सेप्टेम्बर_अक्टोबर_नोभेम्बर_डिसेम्बर'.split(
+            '_'
+        ),
+        monthsShort: 'जन._फेब्रु._मार्च_अप्रि._मई_जुन_जुलाई._अग._सेप्ट._अक्टो._नोभे._डिसे.'.split(
+            '_'
+        ),
+        monthsParseExact: true,
+        weekdays: 'आइतबार_सोमबार_मङ्गलबार_बुधबार_बिहिबार_शुक्रबार_शनिबार'.split(
+            '_'
+        ),
+        weekdaysShort: 'आइत._सोम._मङ्गल._बुध._बिहि._शुक्र._शनि.'.split('_'),
+        weekdaysMin: 'आ._सो._मं._बु._बि._शु._श.'.split('_'),
+        weekdaysParseExact: true,
+        longDateFormat: {
+            LT: 'Aको h:mm बजे',
+            LTS: 'Aको h:mm:ss बजे',
+            L: 'DD/MM/YYYY',
+            LL: 'D MMMM YYYY',
+            LLL: 'D MMMM YYYY, Aको h:mm बजे',
+            LLLL: 'dddd, D MMMM YYYY, Aको h:mm बजे',
+        },
+        preparse: function (string) {
+            return string.replace(/[१२३४५६७८९०]/g, function (match) {
+                return numberMap$c[match];
+            });
+        },
+        postformat: function (string) {
+            return string.replace(/\d/g, function (match) {
+                return symbolMap$d[match];
+            });
+        },
+        meridiemParse: /राति|बिहान|दिउँसो|साँझ/,
+        meridiemHour: function (hour, meridiem) {
+            if (hour === 12) {
+                hour = 0;
+            }
+            if (meridiem === 'राति') {
+                return hour < 4 ? hour : hour + 12;
+            } else if (meridiem === 'बिहान') {
+                return hour;
+            } else if (meridiem === 'दिउँसो') {
+                return hour >= 10 ? hour : hour + 12;
+            } else if (meridiem === 'साँझ') {
+                return hour + 12;
+            }
+        },
+        meridiem: function (hour, minute, isLower) {
+            if (hour < 3) {
+                return 'राति';
+            } else if (hour < 12) {
+                return 'बिहान';
+            } else if (hour < 16) {
+                return 'दिउँसो';
+            } else if (hour < 20) {
+                return 'साँझ';
+            } else {
+                return 'राति';
+            }
+        },
+        calendar: {
+            sameDay: '[आज] LT',
+            nextDay: '[भोलि] LT',
+            nextWeek: '[आउँदो] dddd[,] LT',
+            lastDay: '[हिजो] LT',
+            lastWeek: '[गएको] dddd[,] LT',
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: '%sमा',
+            past: '%s अगाडि',
+            s: 'केही क्षण',
+            ss: '%d सेकेण्ड',
+            m: 'एक मिनेट',
+            mm: '%d मिनेट',
+            h: 'एक घण्टा',
+            hh: '%d घण्टा',
+            d: 'एक दिन',
+            dd: '%d दिन',
+            M: 'एक महिना',
+            MM: '%d महिना',
+            y: 'एक बर्ष',
+            yy: '%d बर्ष',
+        },
+        week: {
+            dow: 0, // Sunday is the first day of the week.
+            doy: 6, // The week that contains Jan 6th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    var monthsShortWithDots$1 = 'jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.'.split(
+            '_'
+        ),
+        monthsShortWithoutDots$1 = 'jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec'.split(
+            '_'
+        ),
+        monthsParse$6 = [
+            /^jan/i,
+            /^feb/i,
+            /^maart|mrt.?$/i,
+            /^apr/i,
+            /^mei$/i,
+            /^jun[i.]?$/i,
+            /^jul[i.]?$/i,
+            /^aug/i,
+            /^sep/i,
+            /^okt/i,
+            /^nov/i,
+            /^dec/i,
+        ],
+        monthsRegex$7 = /^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december|jan\.?|feb\.?|mrt\.?|apr\.?|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i;
+
+    hooks.defineLocale('nl-be', {
+        months: 'januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december'.split(
+            '_'
+        ),
+        monthsShort: function (m, format) {
+            if (!m) {
+                return monthsShortWithDots$1;
+            } else if (/-MMM-/.test(format)) {
+                return monthsShortWithoutDots$1[m.month()];
+            } else {
+                return monthsShortWithDots$1[m.month()];
+            }
+        },
+
+        monthsRegex: monthsRegex$7,
+        monthsShortRegex: monthsRegex$7,
+        monthsStrictRegex: /^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december)/i,
+        monthsShortStrictRegex: /^(jan\.?|feb\.?|mrt\.?|apr\.?|mei|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i,
+
+        monthsParse: monthsParse$6,
+        longMonthsParse: monthsParse$6,
+        shortMonthsParse: monthsParse$6,
+
+        weekdays: 'zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag'.split(
+            '_'
+        ),
+        weekdaysShort: 'zo._ma._di._wo._do._vr._za.'.split('_'),
+        weekdaysMin: 'zo_ma_di_wo_do_vr_za'.split('_'),
+        weekdaysParseExact: true,
+        longDateFormat: {
+            LT: 'HH:mm',
+            LTS: 'HH:mm:ss',
+            L: 'DD/MM/YYYY',
+            LL: 'D MMMM YYYY',
+            LLL: 'D MMMM YYYY HH:mm',
+            LLLL: 'dddd D MMMM YYYY HH:mm',
+        },
+        calendar: {
+            sameDay: '[vandaag om] LT',
+            nextDay: '[morgen om] LT',
+            nextWeek: 'dddd [om] LT',
+            lastDay: '[gisteren om] LT',
+            lastWeek: '[afgelopen] dddd [om] LT',
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: 'over %s',
+            past: '%s geleden',
+            s: 'een paar seconden',
+            ss: '%d seconden',
+            m: 'één minuut',
+            mm: '%d minuten',
+            h: 'één uur',
+            hh: '%d uur',
+            d: 'één dag',
+            dd: '%d dagen',
+            M: 'één maand',
+            MM: '%d maanden',
+            y: 'één jaar',
+            yy: '%d jaar',
+        },
+        dayOfMonthOrdinalParse: /\d{1,2}(ste|de)/,
+        ordinal: function (number) {
+            return (
+                number +
+                (number === 1 || number === 8 || number >= 20 ? 'ste' : 'de')
+            );
+        },
+        week: {
+            dow: 1, // Monday is the first day of the week.
+            doy: 4, // The week that contains Jan 4th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    var monthsShortWithDots$2 = 'jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.'.split(
+            '_'
+        ),
+        monthsShortWithoutDots$2 = 'jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec'.split(
+            '_'
+        ),
+        monthsParse$7 = [
+            /^jan/i,
+            /^feb/i,
+            /^maart|mrt.?$/i,
+            /^apr/i,
+            /^mei$/i,
+            /^jun[i.]?$/i,
+            /^jul[i.]?$/i,
+            /^aug/i,
+            /^sep/i,
+            /^okt/i,
+            /^nov/i,
+            /^dec/i,
+        ],
+        monthsRegex$8 = /^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december|jan\.?|feb\.?|mrt\.?|apr\.?|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i;
+
+    hooks.defineLocale('nl', {
+        months: 'januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december'.split(
+            '_'
+        ),
+        monthsShort: function (m, format) {
+            if (!m) {
+                return monthsShortWithDots$2;
+            } else if (/-MMM-/.test(format)) {
+                return monthsShortWithoutDots$2[m.month()];
+            } else {
+                return monthsShortWithDots$2[m.month()];
+            }
+        },
+
+        monthsRegex: monthsRegex$8,
+        monthsShortRegex: monthsRegex$8,
+        monthsStrictRegex: /^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december)/i,
+        monthsShortStrictRegex: /^(jan\.?|feb\.?|mrt\.?|apr\.?|mei|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i,
+
+        monthsParse: monthsParse$7,
+        longMonthsParse: monthsParse$7,
+        shortMonthsParse: monthsParse$7,
+
+        weekdays: 'zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag'.split(
+            '_'
+        ),
+        weekdaysShort: 'zo._ma._di._wo._do._vr._za.'.split('_'),
+        weekdaysMin: 'zo_ma_di_wo_do_vr_za'.split('_'),
+        weekdaysParseExact: true,
+        longDateFormat: {
+            LT: 'HH:mm',
+            LTS: 'HH:mm:ss',
+            L: 'DD-MM-YYYY',
+            LL: 'D MMMM YYYY',
+            LLL: 'D MMMM YYYY HH:mm',
+            LLLL: 'dddd D MMMM YYYY HH:mm',
+        },
+        calendar: {
+            sameDay: '[vandaag om] LT',
+            nextDay: '[morgen om] LT',
+            nextWeek: 'dddd [om] LT',
+            lastDay: '[gisteren om] LT',
+            lastWeek: '[afgelopen] dddd [om] LT',
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: 'over %s',
+            past: '%s geleden',
+            s: 'een paar seconden',
+            ss: '%d seconden',
+            m: 'één minuut',
+            mm: '%d minuten',
+            h: 'één uur',
+            hh: '%d uur',
+            d: 'één dag',
+            dd: '%d dagen',
+            M: 'één maand',
+            MM: '%d maanden',
+            y: 'één jaar',
+            yy: '%d jaar',
+        },
+        dayOfMonthOrdinalParse: /\d{1,2}(ste|de)/,
+        ordinal: function (number) {
+            return (
+                number +
+                (number === 1 || number === 8 || number >= 20 ? 'ste' : 'de')
+            );
+        },
+        week: {
+            dow: 1, // Monday is the first day of the week.
+            doy: 4, // The week that contains Jan 4th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    hooks.defineLocale('nn', {
+        months: 'januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember'.split(
+            '_'
+        ),
+        monthsShort: 'jan._feb._mars_apr._mai_juni_juli_aug._sep._okt._nov._des.'.split(
+            '_'
+        ),
+        monthsParseExact: true,
+        weekdays: 'sundag_måndag_tysdag_onsdag_torsdag_fredag_laurdag'.split('_'),
+        weekdaysShort: 'su._må._ty._on._to._fr._lau.'.split('_'),
+        weekdaysMin: 'su_må_ty_on_to_fr_la'.split('_'),
+        weekdaysParseExact: true,
+        longDateFormat: {
+            LT: 'HH:mm',
+            LTS: 'HH:mm:ss',
+            L: 'DD.MM.YYYY',
+            LL: 'D. MMMM YYYY',
+            LLL: 'D. MMMM YYYY [kl.] H:mm',
+            LLLL: 'dddd D. MMMM YYYY [kl.] HH:mm',
+        },
+        calendar: {
+            sameDay: '[I dag klokka] LT',
+            nextDay: '[I morgon klokka] LT',
+            nextWeek: 'dddd [klokka] LT',
+            lastDay: '[I går klokka] LT',
+            lastWeek: '[Føregåande] dddd [klokka] LT',
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: 'om %s',
+            past: '%s sidan',
+            s: 'nokre sekund',
+            ss: '%d sekund',
+            m: 'eit minutt',
+            mm: '%d minutt',
+            h: 'ein time',
+            hh: '%d timar',
+            d: 'ein dag',
+            dd: '%d dagar',
+            M: 'ein månad',
+            MM: '%d månader',
+            y: 'eit år',
+            yy: '%d år',
+        },
+        dayOfMonthOrdinalParse: /\d{1,2}\./,
+        ordinal: '%d.',
+        week: {
+            dow: 1, // Monday is the first day of the week.
+            doy: 4, // The week that contains Jan 4th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    hooks.defineLocale('oc-lnc', {
+        months: {
+            standalone: 'genièr_febrièr_març_abril_mai_junh_julhet_agost_setembre_octòbre_novembre_decembre'.split(
+                '_'
+            ),
+            format: "de genièr_de febrièr_de març_d'abril_de mai_de junh_de julhet_d'agost_de setembre_d'octòbre_de novembre_de decembre".split(
+                '_'
+            ),
+            isFormat: /D[oD]?(\s)+MMMM/,
+        },
+        monthsShort: 'gen._febr._març_abr._mai_junh_julh._ago._set._oct._nov._dec.'.split(
+            '_'
+        ),
+        monthsParseExact: true,
+        weekdays: 'dimenge_diluns_dimars_dimècres_dijòus_divendres_dissabte'.split(
+            '_'
+        ),
+        weekdaysShort: 'dg._dl._dm._dc._dj._dv._ds.'.split('_'),
+        weekdaysMin: 'dg_dl_dm_dc_dj_dv_ds'.split('_'),
+        weekdaysParseExact: true,
+        longDateFormat: {
+            LT: 'H:mm',
+            LTS: 'H:mm:ss',
+            L: 'DD/MM/YYYY',
+            LL: 'D MMMM [de] YYYY',
+            ll: 'D MMM YYYY',
+            LLL: 'D MMMM [de] YYYY [a] H:mm',
+            lll: 'D MMM YYYY, H:mm',
+            LLLL: 'dddd D MMMM [de] YYYY [a] H:mm',
+            llll: 'ddd D MMM YYYY, H:mm',
+        },
+        calendar: {
+            sameDay: '[uèi a] LT',
+            nextDay: '[deman a] LT',
+            nextWeek: 'dddd [a] LT',
+            lastDay: '[ièr a] LT',
+            lastWeek: 'dddd [passat a] LT',
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: "d'aquí %s",
+            past: 'fa %s',
+            s: 'unas segondas',
+            ss: '%d segondas',
+            m: 'una minuta',
+            mm: '%d minutas',
+            h: 'una ora',
+            hh: '%d oras',
+            d: 'un jorn',
+            dd: '%d jorns',
+            M: 'un mes',
+            MM: '%d meses',
+            y: 'un an',
+            yy: '%d ans',
+        },
+        dayOfMonthOrdinalParse: /\d{1,2}(r|n|t|è|a)/,
+        ordinal: function (number, period) {
+            var output =
+                number === 1
+                    ? 'r'
+                    : number === 2
+                    ? 'n'
+                    : number === 3
+                    ? 'r'
+                    : number === 4
+                    ? 't'
+                    : 'è';
+            if (period === 'w' || period === 'W') {
+                output = 'a';
+            }
+            return number + output;
+        },
+        week: {
+            dow: 1, // Monday is the first day of the week.
+            doy: 4,
+        },
+    });
+
+    //! moment.js locale configuration
+
+    var symbolMap$e = {
+            '1': '੧',
+            '2': '੨',
+            '3': '੩',
+            '4': '੪',
+            '5': '੫',
+            '6': '੬',
+            '7': '੭',
+            '8': '੮',
+            '9': '੯',
+            '0': '੦',
+        },
+        numberMap$d = {
+            '੧': '1',
+            '੨': '2',
+            '੩': '3',
+            '੪': '4',
+            '੫': '5',
+            '੬': '6',
+            '੭': '7',
+            '੮': '8',
+            '੯': '9',
+            '੦': '0',
+        };
+
+    hooks.defineLocale('pa-in', {
+        // There are months name as per Nanakshahi Calendar but they are not used as rigidly in modern Punjabi.
+        months: 'ਜਨਵਰੀ_ਫ਼ਰਵਰੀ_ਮਾਰਚ_ਅਪ੍ਰੈਲ_ਮਈ_ਜੂਨ_ਜੁਲਾਈ_ਅਗਸਤ_ਸਤੰਬਰ_ਅਕਤੂਬਰ_ਨਵੰਬਰ_ਦਸੰਬਰ'.split(
+            '_'
+        ),
+        monthsShort: 'ਜਨਵਰੀ_ਫ਼ਰਵਰੀ_ਮਾਰਚ_ਅਪ੍ਰੈਲ_ਮਈ_ਜੂਨ_ਜੁਲਾਈ_ਅਗਸਤ_ਸਤੰਬਰ_ਅਕਤੂਬਰ_ਨਵੰਬਰ_ਦਸੰਬਰ'.split(
+            '_'
+        ),
+        weekdays: 'ਐਤਵਾਰ_ਸੋਮਵਾਰ_ਮੰਗਲਵਾਰ_ਬੁਧਵਾਰ_ਵੀਰਵਾਰ_ਸ਼ੁੱਕਰਵਾਰ_ਸ਼ਨੀਚਰਵਾਰ'.split(
+            '_'
+        ),
+        weekdaysShort: 'ਐਤ_ਸੋਮ_ਮੰਗਲ_ਬੁਧ_ਵੀਰ_ਸ਼ੁਕਰ_ਸ਼ਨੀ'.split('_'),
+        weekdaysMin: 'ਐਤ_ਸੋਮ_ਮੰਗਲ_ਬੁਧ_ਵੀਰ_ਸ਼ੁਕਰ_ਸ਼ਨੀ'.split('_'),
+        longDateFormat: {
+            LT: 'A h:mm ਵਜੇ',
+            LTS: 'A h:mm:ss ਵਜੇ',
+            L: 'DD/MM/YYYY',
+            LL: 'D MMMM YYYY',
+            LLL: 'D MMMM YYYY, A h:mm ਵਜੇ',
+            LLLL: 'dddd, D MMMM YYYY, A h:mm ਵਜੇ',
+        },
+        calendar: {
+            sameDay: '[ਅਜ] LT',
+            nextDay: '[ਕਲ] LT',
+            nextWeek: '[ਅਗਲਾ] dddd, LT',
+            lastDay: '[ਕਲ] LT',
+            lastWeek: '[ਪਿਛਲੇ] dddd, LT',
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: '%s ਵਿੱਚ',
+            past: '%s ਪਿਛਲੇ',
+            s: 'ਕੁਝ ਸਕਿੰਟ',
+            ss: '%d ਸਕਿੰਟ',
+            m: 'ਇਕ ਮਿੰਟ',
+            mm: '%d ਮਿੰਟ',
+            h: 'ਇੱਕ ਘੰਟਾ',
+            hh: '%d ਘੰਟੇ',
+            d: 'ਇੱਕ ਦਿਨ',
+            dd: '%d ਦਿਨ',
+            M: 'ਇੱਕ ਮਹੀਨਾ',
+            MM: '%d ਮਹੀਨੇ',
+            y: 'ਇੱਕ ਸਾਲ',
+            yy: '%d ਸਾਲ',
+        },
+        preparse: function (string) {
+            return string.replace(/[੧੨੩੪੫੬੭੮੯੦]/g, function (match) {
+                return numberMap$d[match];
+            });
+        },
+        postformat: function (string) {
+            return string.replace(/\d/g, function (match) {
+                return symbolMap$e[match];
+            });
+        },
+        // Punjabi notation for meridiems are quite fuzzy in practice. While there exists
+        // a rigid notion of a 'Pahar' it is not used as rigidly in modern Punjabi.
+        meridiemParse: /ਰਾਤ|ਸਵੇਰ|ਦੁਪਹਿਰ|ਸ਼ਾਮ/,
+        meridiemHour: function (hour, meridiem) {
+            if (hour === 12) {
+                hour = 0;
+            }
+            if (meridiem === 'ਰਾਤ') {
+                return hour < 4 ? hour : hour + 12;
+            } else if (meridiem === 'ਸਵੇਰ') {
+                return hour;
+            } else if (meridiem === 'ਦੁਪਹਿਰ') {
+                return hour >= 10 ? hour : hour + 12;
+            } else if (meridiem === 'ਸ਼ਾਮ') {
+                return hour + 12;
+            }
+        },
+        meridiem: function (hour, minute, isLower) {
+            if (hour < 4) {
+                return 'ਰਾਤ';
+            } else if (hour < 10) {
+                return 'ਸਵੇਰ';
+            } else if (hour < 17) {
+                return 'ਦੁਪਹਿਰ';
+            } else if (hour < 20) {
+                return 'ਸ਼ਾਮ';
+            } else {
+                return 'ਰਾਤ';
+            }
+        },
+        week: {
+            dow: 0, // Sunday is the first day of the week.
+            doy: 6, // The week that contains Jan 6th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    var monthsNominative = 'styczeń_luty_marzec_kwiecień_maj_czerwiec_lipiec_sierpień_wrzesień_październik_listopad_grudzień'.split(
+            '_'
+        ),
+        monthsSubjective = 'stycznia_lutego_marca_kwietnia_maja_czerwca_lipca_sierpnia_września_października_listopada_grudnia'.split(
+            '_'
+        );
+    function plural$3(n) {
+        return n % 10 < 5 && n % 10 > 1 && ~~(n / 10) % 10 !== 1;
+    }
+    function translate$8(number, withoutSuffix, key) {
+        var result = number + ' ';
+        switch (key) {
+            case 'ss':
+                return result + (plural$3(number) ? 'sekundy' : 'sekund');
+            case 'm':
+                return withoutSuffix ? 'minuta' : 'minutę';
+            case 'mm':
+                return result + (plural$3(number) ? 'minuty' : 'minut');
+            case 'h':
+                return withoutSuffix ? 'godzina' : 'godzinę';
+            case 'hh':
+                return result + (plural$3(number) ? 'godziny' : 'godzin');
+            case 'MM':
+                return result + (plural$3(number) ? 'miesiące' : 'miesięcy');
+            case 'yy':
+                return result + (plural$3(number) ? 'lata' : 'lat');
+        }
+    }
+
+    hooks.defineLocale('pl', {
+        months: function (momentToFormat, format) {
+            if (!momentToFormat) {
+                return monthsNominative;
+            } else if (format === '') {
+                // Hack: if format empty we know this is used to generate
+                // RegExp by moment. Give then back both valid forms of months
+                // in RegExp ready format.
+                return (
+                    '(' +
+                    monthsSubjective[momentToFormat.month()] +
+                    '|' +
+                    monthsNominative[momentToFormat.month()] +
+                    ')'
+                );
+            } else if (/D MMMM/.test(format)) {
+                return monthsSubjective[momentToFormat.month()];
+            } else {
+                return monthsNominative[momentToFormat.month()];
+            }
+        },
+        monthsShort: 'sty_lut_mar_kwi_maj_cze_lip_sie_wrz_paź_lis_gru'.split('_'),
+        weekdays: 'niedziela_poniedziałek_wtorek_środa_czwartek_piątek_sobota'.split(
+            '_'
+        ),
+        weekdaysShort: 'ndz_pon_wt_śr_czw_pt_sob'.split('_'),
+        weekdaysMin: 'Nd_Pn_Wt_Śr_Cz_Pt_So'.split('_'),
+        longDateFormat: {
+            LT: 'HH:mm',
+            LTS: 'HH:mm:ss',
+            L: 'DD.MM.YYYY',
+            LL: 'D MMMM YYYY',
+            LLL: 'D MMMM YYYY HH:mm',
+            LLLL: 'dddd, D MMMM YYYY HH:mm',
+        },
+        calendar: {
+            sameDay: '[Dziś o] LT',
+            nextDay: '[Jutro o] LT',
+            nextWeek: function () {
+                switch (this.day()) {
+                    case 0:
+                        return '[W niedzielę o] LT';
+
+                    case 2:
+                        return '[We wtorek o] LT';
+
+                    case 3:
+                        return '[W środę o] LT';
+
+                    case 6:
+                        return '[W sobotę o] LT';
+
+                    default:
+                        return '[W] dddd [o] LT';
+                }
+            },
+            lastDay: '[Wczoraj o] LT',
+            lastWeek: function () {
+                switch (this.day()) {
+                    case 0:
+                        return '[W zeszłą niedzielę o] LT';
+                    case 3:
+                        return '[W zeszłą środę o] LT';
+                    case 6:
+                        return '[W zeszłą sobotę o] LT';
+                    default:
+                        return '[W zeszły] dddd [o] LT';
+                }
+            },
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: 'za %s',
+            past: '%s temu',
+            s: 'kilka sekund',
+            ss: translate$8,
+            m: translate$8,
+            mm: translate$8,
+            h: translate$8,
+            hh: translate$8,
+            d: '1 dzień',
+            dd: '%d dni',
+            M: 'miesiąc',
+            MM: translate$8,
+            y: 'rok',
+            yy: translate$8,
+        },
+        dayOfMonthOrdinalParse: /\d{1,2}\./,
+        ordinal: '%d.',
+        week: {
+            dow: 1, // Monday is the first day of the week.
+            doy: 4, // The week that contains Jan 4th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    hooks.defineLocale('pt-br', {
+        months: 'janeiro_fevereiro_março_abril_maio_junho_julho_agosto_setembro_outubro_novembro_dezembro'.split(
+            '_'
+        ),
+        monthsShort: 'jan_fev_mar_abr_mai_jun_jul_ago_set_out_nov_dez'.split('_'),
+        weekdays: 'domingo_segunda-feira_terça-feira_quarta-feira_quinta-feira_sexta-feira_sábado'.split(
+            '_'
+        ),
+        weekdaysShort: 'dom_seg_ter_qua_qui_sex_sáb'.split('_'),
+        weekdaysMin: 'do_2ª_3ª_4ª_5ª_6ª_sá'.split('_'),
+        weekdaysParseExact: true,
+        longDateFormat: {
+            LT: 'HH:mm',
+            LTS: 'HH:mm:ss',
+            L: 'DD/MM/YYYY',
+            LL: 'D [de] MMMM [de] YYYY',
+            LLL: 'D [de] MMMM [de] YYYY [às] HH:mm',
+            LLLL: 'dddd, D [de] MMMM [de] YYYY [às] HH:mm',
+        },
+        calendar: {
+            sameDay: '[Hoje às] LT',
+            nextDay: '[Amanhã às] LT',
+            nextWeek: 'dddd [às] LT',
+            lastDay: '[Ontem às] LT',
+            lastWeek: function () {
+                return this.day() === 0 || this.day() === 6
+                    ? '[Último] dddd [às] LT' // Saturday + Sunday
+                    : '[Última] dddd [às] LT'; // Monday - Friday
+            },
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: 'em %s',
+            past: 'há %s',
+            s: 'poucos segundos',
+            ss: '%d segundos',
+            m: 'um minuto',
+            mm: '%d minutos',
+            h: 'uma hora',
+            hh: '%d horas',
+            d: 'um dia',
+            dd: '%d dias',
+            M: 'um mês',
+            MM: '%d meses',
+            y: 'um ano',
+            yy: '%d anos',
+        },
+        dayOfMonthOrdinalParse: /\d{1,2}º/,
+        ordinal: '%dº',
+    });
+
+    //! moment.js locale configuration
+
+    hooks.defineLocale('pt', {
+        months: 'janeiro_fevereiro_março_abril_maio_junho_julho_agosto_setembro_outubro_novembro_dezembro'.split(
+            '_'
+        ),
+        monthsShort: 'jan_fev_mar_abr_mai_jun_jul_ago_set_out_nov_dez'.split('_'),
+        weekdays: 'Domingo_Segunda-feira_Terça-feira_Quarta-feira_Quinta-feira_Sexta-feira_Sábado'.split(
+            '_'
+        ),
+        weekdaysShort: 'Dom_Seg_Ter_Qua_Qui_Sex_Sáb'.split('_'),
+        weekdaysMin: 'Do_2ª_3ª_4ª_5ª_6ª_Sá'.split('_'),
+        weekdaysParseExact: true,
+        longDateFormat: {
+            LT: 'HH:mm',
+            LTS: 'HH:mm:ss',
+            L: 'DD/MM/YYYY',
+            LL: 'D [de] MMMM [de] YYYY',
+            LLL: 'D [de] MMMM [de] YYYY HH:mm',
+            LLLL: 'dddd, D [de] MMMM [de] YYYY HH:mm',
+        },
+        calendar: {
+            sameDay: '[Hoje às] LT',
+            nextDay: '[Amanhã às] LT',
+            nextWeek: 'dddd [às] LT',
+            lastDay: '[Ontem às] LT',
+            lastWeek: function () {
+                return this.day() === 0 || this.day() === 6
+                    ? '[Último] dddd [às] LT' // Saturday + Sunday
+                    : '[Última] dddd [às] LT'; // Monday - Friday
+            },
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: 'em %s',
+            past: 'há %s',
+            s: 'segundos',
+            ss: '%d segundos',
+            m: 'um minuto',
+            mm: '%d minutos',
+            h: 'uma hora',
+            hh: '%d horas',
+            d: 'um dia',
+            dd: '%d dias',
+            M: 'um mês',
+            MM: '%d meses',
+            y: 'um ano',
+            yy: '%d anos',
+        },
+        dayOfMonthOrdinalParse: /\d{1,2}º/,
+        ordinal: '%dº',
+        week: {
+            dow: 1, // Monday is the first day of the week.
+            doy: 4, // The week that contains Jan 4th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    function relativeTimeWithPlural$2(number, withoutSuffix, key) {
+        var format = {
+                ss: 'secunde',
+                mm: 'minute',
+                hh: 'ore',
+                dd: 'zile',
+                MM: 'luni',
+                yy: 'ani',
+            },
+            separator = ' ';
+        if (number % 100 >= 20 || (number >= 100 && number % 100 === 0)) {
+            separator = ' de ';
+        }
+        return number + separator + format[key];
+    }
+
+    hooks.defineLocale('ro', {
+        months: 'ianuarie_februarie_martie_aprilie_mai_iunie_iulie_august_septembrie_octombrie_noiembrie_decembrie'.split(
+            '_'
+        ),
+        monthsShort: 'ian._feb._mart._apr._mai_iun._iul._aug._sept._oct._nov._dec.'.split(
+            '_'
+        ),
+        monthsParseExact: true,
+        weekdays: 'duminică_luni_marți_miercuri_joi_vineri_sâmbătă'.split('_'),
+        weekdaysShort: 'Dum_Lun_Mar_Mie_Joi_Vin_Sâm'.split('_'),
+        weekdaysMin: 'Du_Lu_Ma_Mi_Jo_Vi_Sâ'.split('_'),
+        longDateFormat: {
+            LT: 'H:mm',
+            LTS: 'H:mm:ss',
+            L: 'DD.MM.YYYY',
+            LL: 'D MMMM YYYY',
+            LLL: 'D MMMM YYYY H:mm',
+            LLLL: 'dddd, D MMMM YYYY H:mm',
+        },
+        calendar: {
+            sameDay: '[azi la] LT',
+            nextDay: '[mâine la] LT',
+            nextWeek: 'dddd [la] LT',
+            lastDay: '[ieri la] LT',
+            lastWeek: '[fosta] dddd [la] LT',
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: 'peste %s',
+            past: '%s în urmă',
+            s: 'câteva secunde',
+            ss: relativeTimeWithPlural$2,
+            m: 'un minut',
+            mm: relativeTimeWithPlural$2,
+            h: 'o oră',
+            hh: relativeTimeWithPlural$2,
+            d: 'o zi',
+            dd: relativeTimeWithPlural$2,
+            M: 'o lună',
+            MM: relativeTimeWithPlural$2,
+            y: 'un an',
+            yy: relativeTimeWithPlural$2,
+        },
+        week: {
+            dow: 1, // Monday is the first day of the week.
+            doy: 7, // The week that contains Jan 7th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    function plural$4(word, num) {
+        var forms = word.split('_');
+        return num % 10 === 1 && num % 100 !== 11
+            ? forms[0]
+            : num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20)
+            ? forms[1]
+            : forms[2];
+    }
+    function relativeTimeWithPlural$3(number, withoutSuffix, key) {
+        var format = {
+            ss: withoutSuffix ? 'секунда_секунды_секунд' : 'секунду_секунды_секунд',
+            mm: withoutSuffix ? 'минута_минуты_минут' : 'минуту_минуты_минут',
+            hh: 'час_часа_часов',
+            dd: 'день_дня_дней',
+            MM: 'месяц_месяца_месяцев',
+            yy: 'год_года_лет',
+        };
+        if (key === 'm') {
+            return withoutSuffix ? 'минута' : 'минуту';
+        } else {
+            return number + ' ' + plural$4(format[key], +number);
+        }
+    }
+    var monthsParse$8 = [
+        /^янв/i,
+        /^фев/i,
+        /^мар/i,
+        /^апр/i,
+        /^ма[йя]/i,
+        /^июн/i,
+        /^июл/i,
+        /^авг/i,
+        /^сен/i,
+        /^окт/i,
+        /^ноя/i,
+        /^дек/i,
+    ];
+
+    // http://new.gramota.ru/spravka/rules/139-prop : § 103
+    // Сокращения месяцев: http://new.gramota.ru/spravka/buro/search-answer?s=242637
+    // CLDR data:          http://www.unicode.org/cldr/charts/28/summary/ru.html#1753
+    hooks.defineLocale('ru', {
+        months: {
+            format: 'января_февраля_марта_апреля_мая_июня_июля_августа_сентября_октября_ноября_декабря'.split(
+                '_'
+            ),
+            standalone: 'январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь'.split(
+                '_'
+            ),
+        },
+        monthsShort: {
+            // по CLDR именно "июл." и "июн.", но какой смысл менять букву на точку?
+            format: 'янв._февр._мар._апр._мая_июня_июля_авг._сент._окт._нояб._дек.'.split(
+                '_'
+            ),
+            standalone: 'янв._февр._март_апр._май_июнь_июль_авг._сент._окт._нояб._дек.'.split(
+                '_'
+            ),
+        },
+        weekdays: {
+            standalone: 'воскресенье_понедельник_вторник_среда_четверг_пятница_суббота'.split(
+                '_'
+            ),
+            format: 'воскресенье_понедельник_вторник_среду_четверг_пятницу_субботу'.split(
+                '_'
+            ),
+            isFormat: /\[ ?[Вв] ?(?:прошлую|следующую|эту)? ?] ?dddd/,
+        },
+        weekdaysShort: 'вс_пн_вт_ср_чт_пт_сб'.split('_'),
+        weekdaysMin: 'вс_пн_вт_ср_чт_пт_сб'.split('_'),
+        monthsParse: monthsParse$8,
+        longMonthsParse: monthsParse$8,
+        shortMonthsParse: monthsParse$8,
+
+        // полные названия с падежами, по три буквы, для некоторых, по 4 буквы, сокращения с точкой и без точки
+        monthsRegex: /^(январ[ья]|янв\.?|феврал[ья]|февр?\.?|марта?|мар\.?|апрел[ья]|апр\.?|ма[йя]|июн[ья]|июн\.?|июл[ья]|июл\.?|августа?|авг\.?|сентябр[ья]|сент?\.?|октябр[ья]|окт\.?|ноябр[ья]|нояб?\.?|декабр[ья]|дек\.?)/i,
+
+        // копия предыдущего
+        monthsShortRegex: /^(январ[ья]|янв\.?|феврал[ья]|февр?\.?|марта?|мар\.?|апрел[ья]|апр\.?|ма[йя]|июн[ья]|июн\.?|июл[ья]|июл\.?|августа?|авг\.?|сентябр[ья]|сент?\.?|октябр[ья]|окт\.?|ноябр[ья]|нояб?\.?|декабр[ья]|дек\.?)/i,
+
+        // полные названия с падежами
+        monthsStrictRegex: /^(январ[яь]|феврал[яь]|марта?|апрел[яь]|ма[яй]|июн[яь]|июл[яь]|августа?|сентябр[яь]|октябр[яь]|ноябр[яь]|декабр[яь])/i,
+
+        // Выражение, которое соответствует только сокращённым формам
+        monthsShortStrictRegex: /^(янв\.|февр?\.|мар[т.]|апр\.|ма[яй]|июн[ья.]|июл[ья.]|авг\.|сент?\.|окт\.|нояб?\.|дек\.)/i,
+        longDateFormat: {
+            LT: 'H:mm',
+            LTS: 'H:mm:ss',
+            L: 'DD.MM.YYYY',
+            LL: 'D MMMM YYYY г.',
+            LLL: 'D MMMM YYYY г., H:mm',
+            LLLL: 'dddd, D MMMM YYYY г., H:mm',
+        },
+        calendar: {
+            sameDay: '[Сегодня, в] LT',
+            nextDay: '[Завтра, в] LT',
+            lastDay: '[Вчера, в] LT',
+            nextWeek: function (now) {
+                if (now.week() !== this.week()) {
+                    switch (this.day()) {
+                        case 0:
+                            return '[В следующее] dddd, [в] LT';
+                        case 1:
+                        case 2:
+                        case 4:
+                            return '[В следующий] dddd, [в] LT';
+                        case 3:
+                        case 5:
+                        case 6:
+                            return '[В следующую] dddd, [в] LT';
+                    }
+                } else {
+                    if (this.day() === 2) {
+                        return '[Во] dddd, [в] LT';
+                    } else {
+                        return '[В] dddd, [в] LT';
+                    }
+                }
+            },
+            lastWeek: function (now) {
+                if (now.week() !== this.week()) {
+                    switch (this.day()) {
+                        case 0:
+                            return '[В прошлое] dddd, [в] LT';
+                        case 1:
+                        case 2:
+                        case 4:
+                            return '[В прошлый] dddd, [в] LT';
+                        case 3:
+                        case 5:
+                        case 6:
+                            return '[В прошлую] dddd, [в] LT';
+                    }
+                } else {
+                    if (this.day() === 2) {
+                        return '[Во] dddd, [в] LT';
+                    } else {
+                        return '[В] dddd, [в] LT';
+                    }
+                }
+            },
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: 'через %s',
+            past: '%s назад',
+            s: 'несколько секунд',
+            ss: relativeTimeWithPlural$3,
+            m: relativeTimeWithPlural$3,
+            mm: relativeTimeWithPlural$3,
+            h: 'час',
+            hh: relativeTimeWithPlural$3,
+            d: 'день',
+            dd: relativeTimeWithPlural$3,
+            M: 'месяц',
+            MM: relativeTimeWithPlural$3,
+            y: 'год',
+            yy: relativeTimeWithPlural$3,
+        },
+        meridiemParse: /ночи|утра|дня|вечера/i,
+        isPM: function (input) {
+            return /^(дня|вечера)$/.test(input);
+        },
+        meridiem: function (hour, minute, isLower) {
+            if (hour < 4) {
+                return 'ночи';
+            } else if (hour < 12) {
+                return 'утра';
+            } else if (hour < 17) {
+                return 'дня';
+            } else {
+                return 'вечера';
+            }
+        },
+        dayOfMonthOrdinalParse: /\d{1,2}-(й|го|я)/,
+        ordinal: function (number, period) {
+            switch (period) {
+                case 'M':
+                case 'd':
+                case 'DDD':
+                    return number + '-й';
+                case 'D':
+                    return number + '-го';
+                case 'w':
+                case 'W':
+                    return number + '-я';
+                default:
+                    return number;
+            }
+        },
+        week: {
+            dow: 1, // Monday is the first day of the week.
+            doy: 4, // The week that contains Jan 4th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    var months$9 = [
+            'جنوري',
+            'فيبروري',
+            'مارچ',
+            'اپريل',
+            'مئي',
+            'جون',
+            'جولاءِ',
+            'آگسٽ',
+            'سيپٽمبر',
+            'آڪٽوبر',
+            'نومبر',
+            'ڊسمبر',
+        ],
+        days$1 = ['آچر', 'سومر', 'اڱارو', 'اربع', 'خميس', 'جمع', 'ڇنڇر'];
+
+    hooks.defineLocale('sd', {
+        months: months$9,
+        monthsShort: months$9,
+        weekdays: days$1,
+        weekdaysShort: days$1,
+        weekdaysMin: days$1,
+        longDateFormat: {
+            LT: 'HH:mm',
+            LTS: 'HH:mm:ss',
+            L: 'DD/MM/YYYY',
+            LL: 'D MMMM YYYY',
+            LLL: 'D MMMM YYYY HH:mm',
+            LLLL: 'dddd، D MMMM YYYY HH:mm',
+        },
+        meridiemParse: /صبح|شام/,
+        isPM: function (input) {
+            return 'شام' === input;
+        },
+        meridiem: function (hour, minute, isLower) {
+            if (hour < 12) {
+                return 'صبح';
+            }
+            return 'شام';
+        },
+        calendar: {
+            sameDay: '[اڄ] LT',
+            nextDay: '[سڀاڻي] LT',
+            nextWeek: 'dddd [اڳين هفتي تي] LT',
+            lastDay: '[ڪالهه] LT',
+            lastWeek: '[گزريل هفتي] dddd [تي] LT',
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: '%s پوء',
+            past: '%s اڳ',
+            s: 'چند سيڪنڊ',
+            ss: '%d سيڪنڊ',
+            m: 'هڪ منٽ',
+            mm: '%d منٽ',
+            h: 'هڪ ڪلاڪ',
+            hh: '%d ڪلاڪ',
+            d: 'هڪ ڏينهن',
+            dd: '%d ڏينهن',
+            M: 'هڪ مهينو',
+            MM: '%d مهينا',
+            y: 'هڪ سال',
+            yy: '%d سال',
+        },
+        preparse: function (string) {
+            return string.replace(/،/g, ',');
+        },
+        postformat: function (string) {
+            return string.replace(/,/g, '،');
+        },
+        week: {
+            dow: 1, // Monday is the first day of the week.
+            doy: 4, // The week that contains Jan 4th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    hooks.defineLocale('se', {
+        months: 'ođđajagemánnu_guovvamánnu_njukčamánnu_cuoŋománnu_miessemánnu_geassemánnu_suoidnemánnu_borgemánnu_čakčamánnu_golggotmánnu_skábmamánnu_juovlamánnu'.split(
+            '_'
+        ),
+        monthsShort: 'ođđj_guov_njuk_cuo_mies_geas_suoi_borg_čakč_golg_skáb_juov'.split(
+            '_'
+        ),
+        weekdays: 'sotnabeaivi_vuossárga_maŋŋebárga_gaskavahkku_duorastat_bearjadat_lávvardat'.split(
+            '_'
+        ),
+        weekdaysShort: 'sotn_vuos_maŋ_gask_duor_bear_láv'.split('_'),
+        weekdaysMin: 's_v_m_g_d_b_L'.split('_'),
+        longDateFormat: {
+            LT: 'HH:mm',
+            LTS: 'HH:mm:ss',
+            L: 'DD.MM.YYYY',
+            LL: 'MMMM D. [b.] YYYY',
+            LLL: 'MMMM D. [b.] YYYY [ti.] HH:mm',
+            LLLL: 'dddd, MMMM D. [b.] YYYY [ti.] HH:mm',
+        },
+        calendar: {
+            sameDay: '[otne ti] LT',
+            nextDay: '[ihttin ti] LT',
+            nextWeek: 'dddd [ti] LT',
+            lastDay: '[ikte ti] LT',
+            lastWeek: '[ovddit] dddd [ti] LT',
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: '%s geažes',
+            past: 'maŋit %s',
+            s: 'moadde sekunddat',
+            ss: '%d sekunddat',
+            m: 'okta minuhta',
+            mm: '%d minuhtat',
+            h: 'okta diimmu',
+            hh: '%d diimmut',
+            d: 'okta beaivi',
+            dd: '%d beaivvit',
+            M: 'okta mánnu',
+            MM: '%d mánut',
+            y: 'okta jahki',
+            yy: '%d jagit',
+        },
+        dayOfMonthOrdinalParse: /\d{1,2}\./,
+        ordinal: '%d.',
+        week: {
+            dow: 1, // Monday is the first day of the week.
+            doy: 4, // The week that contains Jan 4th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    /*jshint -W100*/
+    hooks.defineLocale('si', {
+        months: 'ජනවාරි_පෙබරවාරි_මාර්තු_අප්‍රේල්_මැයි_ජූනි_ජූලි_අගෝස්තු_සැප්තැම්බර්_ඔක්තෝබර්_නොවැම්බර්_දෙසැම්බර්'.split(
+            '_'
+        ),
+        monthsShort: 'ජන_පෙබ_මාර්_අප්_මැයි_ජූනි_ජූලි_අගෝ_සැප්_ඔක්_නොවැ_දෙසැ'.split(
+            '_'
+        ),
+        weekdays: 'ඉරිදා_සඳුදා_අඟහරුවාදා_බදාදා_බ්‍රහස්පතින්දා_සිකුරාදා_සෙනසුරාදා'.split(
+            '_'
+        ),
+        weekdaysShort: 'ඉරි_සඳු_අඟ_බදා_බ්‍රහ_සිකු_සෙන'.split('_'),
+        weekdaysMin: 'ඉ_ස_අ_බ_බ්‍ර_සි_සෙ'.split('_'),
+        weekdaysParseExact: true,
+        longDateFormat: {
+            LT: 'a h:mm',
+            LTS: 'a h:mm:ss',
+            L: 'YYYY/MM/DD',
+            LL: 'YYYY MMMM D',
+            LLL: 'YYYY MMMM D, a h:mm',
+            LLLL: 'YYYY MMMM D [වැනි] dddd, a h:mm:ss',
+        },
+        calendar: {
+            sameDay: '[අද] LT[ට]',
+            nextDay: '[හෙට] LT[ට]',
+            nextWeek: 'dddd LT[ට]',
+            lastDay: '[ඊයේ] LT[ට]',
+            lastWeek: '[පසුගිය] dddd LT[ට]',
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: '%sකින්',
+            past: '%sකට පෙර',
+            s: 'තත්පර කිහිපය',
+            ss: 'තත්පර %d',
+            m: 'මිනිත්තුව',
+            mm: 'මිනිත්තු %d',
+            h: 'පැය',
+            hh: 'පැය %d',
+            d: 'දිනය',
+            dd: 'දින %d',
+            M: 'මාසය',
+            MM: 'මාස %d',
+            y: 'වසර',
+            yy: 'වසර %d',
+        },
+        dayOfMonthOrdinalParse: /\d{1,2} වැනි/,
+        ordinal: function (number) {
+            return number + ' වැනි';
+        },
+        meridiemParse: /පෙර වරු|පස් වරු|පෙ.ව|ප.ව./,
+        isPM: function (input) {
+            return input === 'ප.ව.' || input === 'පස් වරු';
+        },
+        meridiem: function (hours, minutes, isLower) {
+            if (hours > 11) {
+                return isLower ? 'ප.ව.' : 'පස් වරු';
+            } else {
+                return isLower ? 'පෙ.ව.' : 'පෙර වරු';
+            }
+        },
+    });
+
+    //! moment.js locale configuration
+
+    var months$a = 'január_február_marec_apríl_máj_jún_júl_august_september_október_november_december'.split(
+            '_'
+        ),
+        monthsShort$6 = 'jan_feb_mar_apr_máj_jún_júl_aug_sep_okt_nov_dec'.split('_');
+    function plural$5(n) {
+        return n > 1 && n < 5;
+    }
+    function translate$9(number, withoutSuffix, key, isFuture) {
+        var result = number + ' ';
+        switch (key) {
+            case 's': // a few seconds / in a few seconds / a few seconds ago
+                return withoutSuffix || isFuture ? 'pár sekúnd' : 'pár sekundami';
+            case 'ss': // 9 seconds / in 9 seconds / 9 seconds ago
+                if (withoutSuffix || isFuture) {
+                    return result + (plural$5(number) ? 'sekundy' : 'sekúnd');
+                } else {
+                    return result + 'sekundami';
+                }
+            case 'm': // a minute / in a minute / a minute ago
+                return withoutSuffix ? 'minúta' : isFuture ? 'minútu' : 'minútou';
+            case 'mm': // 9 minutes / in 9 minutes / 9 minutes ago
+                if (withoutSuffix || isFuture) {
+                    return result + (plural$5(number) ? 'minúty' : 'minút');
+                } else {
+                    return result + 'minútami';
+                }
+            case 'h': // an hour / in an hour / an hour ago
+                return withoutSuffix ? 'hodina' : isFuture ? 'hodinu' : 'hodinou';
+            case 'hh': // 9 hours / in 9 hours / 9 hours ago
+                if (withoutSuffix || isFuture) {
+                    return result + (plural$5(number) ? 'hodiny' : 'hodín');
+                } else {
+                    return result + 'hodinami';
+                }
+            case 'd': // a day / in a day / a day ago
+                return withoutSuffix || isFuture ? 'deň' : 'dňom';
+            case 'dd': // 9 days / in 9 days / 9 days ago
+                if (withoutSuffix || isFuture) {
+                    return result + (plural$5(number) ? 'dni' : 'dní');
+                } else {
+                    return result + 'dňami';
+                }
+            case 'M': // a month / in a month / a month ago
+                return withoutSuffix || isFuture ? 'mesiac' : 'mesiacom';
+            case 'MM': // 9 months / in 9 months / 9 months ago
+                if (withoutSuffix || isFuture) {
+                    return result + (plural$5(number) ? 'mesiace' : 'mesiacov');
+                } else {
+                    return result + 'mesiacmi';
+                }
+            case 'y': // a year / in a year / a year ago
+                return withoutSuffix || isFuture ? 'rok' : 'rokom';
+            case 'yy': // 9 years / in 9 years / 9 years ago
+                if (withoutSuffix || isFuture) {
+                    return result + (plural$5(number) ? 'roky' : 'rokov');
+                } else {
+                    return result + 'rokmi';
+                }
+        }
+    }
+
+    hooks.defineLocale('sk', {
+        months: months$a,
+        monthsShort: monthsShort$6,
+        weekdays: 'nedeľa_pondelok_utorok_streda_štvrtok_piatok_sobota'.split('_'),
+        weekdaysShort: 'ne_po_ut_st_št_pi_so'.split('_'),
+        weekdaysMin: 'ne_po_ut_st_št_pi_so'.split('_'),
+        longDateFormat: {
+            LT: 'H:mm',
+            LTS: 'H:mm:ss',
+            L: 'DD.MM.YYYY',
+            LL: 'D. MMMM YYYY',
+            LLL: 'D. MMMM YYYY H:mm',
+            LLLL: 'dddd D. MMMM YYYY H:mm',
+        },
+        calendar: {
+            sameDay: '[dnes o] LT',
+            nextDay: '[zajtra o] LT',
+            nextWeek: function () {
+                switch (this.day()) {
+                    case 0:
+                        return '[v nedeľu o] LT';
+                    case 1:
+                    case 2:
+                        return '[v] dddd [o] LT';
+                    case 3:
+                        return '[v stredu o] LT';
+                    case 4:
+                        return '[vo štvrtok o] LT';
+                    case 5:
+                        return '[v piatok o] LT';
+                    case 6:
+                        return '[v sobotu o] LT';
+                }
+            },
+            lastDay: '[včera o] LT',
+            lastWeek: function () {
+                switch (this.day()) {
+                    case 0:
+                        return '[minulú nedeľu o] LT';
+                    case 1:
+                    case 2:
+                        return '[minulý] dddd [o] LT';
+                    case 3:
+                        return '[minulú stredu o] LT';
+                    case 4:
+                    case 5:
+                        return '[minulý] dddd [o] LT';
+                    case 6:
+                        return '[minulú sobotu o] LT';
+                }
+            },
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: 'za %s',
+            past: 'pred %s',
+            s: translate$9,
+            ss: translate$9,
+            m: translate$9,
+            mm: translate$9,
+            h: translate$9,
+            hh: translate$9,
+            d: translate$9,
+            dd: translate$9,
+            M: translate$9,
+            MM: translate$9,
+            y: translate$9,
+            yy: translate$9,
+        },
+        dayOfMonthOrdinalParse: /\d{1,2}\./,
+        ordinal: '%d.',
+        week: {
+            dow: 1, // Monday is the first day of the week.
+            doy: 4, // The week that contains Jan 4th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    function processRelativeTime$7(number, withoutSuffix, key, isFuture) {
+        var result = number + ' ';
+        switch (key) {
+            case 's':
+                return withoutSuffix || isFuture
+                    ? 'nekaj sekund'
+                    : 'nekaj sekundami';
+            case 'ss':
+                if (number === 1) {
+                    result += withoutSuffix ? 'sekundo' : 'sekundi';
+                } else if (number === 2) {
+                    result += withoutSuffix || isFuture ? 'sekundi' : 'sekundah';
+                } else if (number < 5) {
+                    result += withoutSuffix || isFuture ? 'sekunde' : 'sekundah';
+                } else {
+                    result += 'sekund';
+                }
+                return result;
+            case 'm':
+                return withoutSuffix ? 'ena minuta' : 'eno minuto';
+            case 'mm':
+                if (number === 1) {
+                    result += withoutSuffix ? 'minuta' : 'minuto';
+                } else if (number === 2) {
+                    result += withoutSuffix || isFuture ? 'minuti' : 'minutama';
+                } else if (number < 5) {
+                    result += withoutSuffix || isFuture ? 'minute' : 'minutami';
+                } else {
+                    result += withoutSuffix || isFuture ? 'minut' : 'minutami';
+                }
+                return result;
+            case 'h':
+                return withoutSuffix ? 'ena ura' : 'eno uro';
+            case 'hh':
+                if (number === 1) {
+                    result += withoutSuffix ? 'ura' : 'uro';
+                } else if (number === 2) {
+                    result += withoutSuffix || isFuture ? 'uri' : 'urama';
+                } else if (number < 5) {
+                    result += withoutSuffix || isFuture ? 'ure' : 'urami';
+                } else {
+                    result += withoutSuffix || isFuture ? 'ur' : 'urami';
+                }
+                return result;
+            case 'd':
+                return withoutSuffix || isFuture ? 'en dan' : 'enim dnem';
+            case 'dd':
+                if (number === 1) {
+                    result += withoutSuffix || isFuture ? 'dan' : 'dnem';
+                } else if (number === 2) {
+                    result += withoutSuffix || isFuture ? 'dni' : 'dnevoma';
+                } else {
+                    result += withoutSuffix || isFuture ? 'dni' : 'dnevi';
+                }
+                return result;
+            case 'M':
+                return withoutSuffix || isFuture ? 'en mesec' : 'enim mesecem';
+            case 'MM':
+                if (number === 1) {
+                    result += withoutSuffix || isFuture ? 'mesec' : 'mesecem';
+                } else if (number === 2) {
+                    result += withoutSuffix || isFuture ? 'meseca' : 'mesecema';
+                } else if (number < 5) {
+                    result += withoutSuffix || isFuture ? 'mesece' : 'meseci';
+                } else {
+                    result += withoutSuffix || isFuture ? 'mesecev' : 'meseci';
+                }
+                return result;
+            case 'y':
+                return withoutSuffix || isFuture ? 'eno leto' : 'enim letom';
+            case 'yy':
+                if (number === 1) {
+                    result += withoutSuffix || isFuture ? 'leto' : 'letom';
+                } else if (number === 2) {
+                    result += withoutSuffix || isFuture ? 'leti' : 'letoma';
+                } else if (number < 5) {
+                    result += withoutSuffix || isFuture ? 'leta' : 'leti';
+                } else {
+                    result += withoutSuffix || isFuture ? 'let' : 'leti';
+                }
+                return result;
+        }
+    }
+
+    hooks.defineLocale('sl', {
+        months: 'januar_februar_marec_april_maj_junij_julij_avgust_september_oktober_november_december'.split(
+            '_'
+        ),
+        monthsShort: 'jan._feb._mar._apr._maj._jun._jul._avg._sep._okt._nov._dec.'.split(
+            '_'
+        ),
+        monthsParseExact: true,
+        weekdays: 'nedelja_ponedeljek_torek_sreda_četrtek_petek_sobota'.split('_'),
+        weekdaysShort: 'ned._pon._tor._sre._čet._pet._sob.'.split('_'),
+        weekdaysMin: 'ne_po_to_sr_če_pe_so'.split('_'),
+        weekdaysParseExact: true,
+        longDateFormat: {
+            LT: 'H:mm',
+            LTS: 'H:mm:ss',
+            L: 'DD. MM. YYYY',
+            LL: 'D. MMMM YYYY',
+            LLL: 'D. MMMM YYYY H:mm',
+            LLLL: 'dddd, D. MMMM YYYY H:mm',
+        },
+        calendar: {
+            sameDay: '[danes ob] LT',
+            nextDay: '[jutri ob] LT',
+
+            nextWeek: function () {
+                switch (this.day()) {
+                    case 0:
+                        return '[v] [nedeljo] [ob] LT';
+                    case 3:
+                        return '[v] [sredo] [ob] LT';
+                    case 6:
+                        return '[v] [soboto] [ob] LT';
+                    case 1:
+                    case 2:
+                    case 4:
+                    case 5:
+                        return '[v] dddd [ob] LT';
+                }
+            },
+            lastDay: '[včeraj ob] LT',
+            lastWeek: function () {
+                switch (this.day()) {
+                    case 0:
+                        return '[prejšnjo] [nedeljo] [ob] LT';
+                    case 3:
+                        return '[prejšnjo] [sredo] [ob] LT';
+                    case 6:
+                        return '[prejšnjo] [soboto] [ob] LT';
+                    case 1:
+                    case 2:
+                    case 4:
+                    case 5:
+                        return '[prejšnji] dddd [ob] LT';
+                }
+            },
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: 'čez %s',
+            past: 'pred %s',
+            s: processRelativeTime$7,
+            ss: processRelativeTime$7,
+            m: processRelativeTime$7,
+            mm: processRelativeTime$7,
+            h: processRelativeTime$7,
+            hh: processRelativeTime$7,
+            d: processRelativeTime$7,
+            dd: processRelativeTime$7,
+            M: processRelativeTime$7,
+            MM: processRelativeTime$7,
+            y: processRelativeTime$7,
+            yy: processRelativeTime$7,
+        },
+        dayOfMonthOrdinalParse: /\d{1,2}\./,
+        ordinal: '%d.',
+        week: {
+            dow: 1, // Monday is the first day of the week.
+            doy: 7, // The week that contains Jan 7th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    hooks.defineLocale('sq', {
+        months: 'Janar_Shkurt_Mars_Prill_Maj_Qershor_Korrik_Gusht_Shtator_Tetor_Nëntor_Dhjetor'.split(
+            '_'
+        ),
+        monthsShort: 'Jan_Shk_Mar_Pri_Maj_Qer_Kor_Gus_Sht_Tet_Nën_Dhj'.split('_'),
+        weekdays: 'E Diel_E Hënë_E Martë_E Mërkurë_E Enjte_E Premte_E Shtunë'.split(
+            '_'
+        ),
+        weekdaysShort: 'Die_Hën_Mar_Mër_Enj_Pre_Sht'.split('_'),
+        weekdaysMin: 'D_H_Ma_Më_E_P_Sh'.split('_'),
+        weekdaysParseExact: true,
+        meridiemParse: /PD|MD/,
+        isPM: function (input) {
+            return input.charAt(0) === 'M';
+        },
+        meridiem: function (hours, minutes, isLower) {
+            return hours < 12 ? 'PD' : 'MD';
+        },
+        longDateFormat: {
+            LT: 'HH:mm',
+            LTS: 'HH:mm:ss',
+            L: 'DD/MM/YYYY',
+            LL: 'D MMMM YYYY',
+            LLL: 'D MMMM YYYY HH:mm',
+            LLLL: 'dddd, D MMMM YYYY HH:mm',
+        },
+        calendar: {
+            sameDay: '[Sot në] LT',
+            nextDay: '[Nesër në] LT',
+            nextWeek: 'dddd [në] LT',
+            lastDay: '[Dje në] LT',
+            lastWeek: 'dddd [e kaluar në] LT',
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: 'në %s',
+            past: '%s më parë',
+            s: 'disa sekonda',
+            ss: '%d sekonda',
+            m: 'një minutë',
+            mm: '%d minuta',
+            h: 'një orë',
+            hh: '%d orë',
+            d: 'një ditë',
+            dd: '%d ditë',
+            M: 'një muaj',
+            MM: '%d muaj',
+            y: 'një vit',
+            yy: '%d vite',
+        },
+        dayOfMonthOrdinalParse: /\d{1,2}\./,
+        ordinal: '%d.',
+        week: {
+            dow: 1, // Monday is the first day of the week.
+            doy: 4, // The week that contains Jan 4th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    var translator$1 = {
+        words: {
+            //Different grammatical cases
+            ss: ['секунда', 'секунде', 'секунди'],
+            m: ['један минут', 'једне минуте'],
+            mm: ['минут', 'минуте', 'минута'],
+            h: ['један сат', 'једног сата'],
+            hh: ['сат', 'сата', 'сати'],
+            dd: ['дан', 'дана', 'дана'],
+            MM: ['месец', 'месеца', 'месеци'],
+            yy: ['година', 'године', 'година'],
+        },
+        correctGrammaticalCase: function (number, wordKey) {
+            return number === 1
+                ? wordKey[0]
+                : number >= 2 && number <= 4
+                ? wordKey[1]
+                : wordKey[2];
+        },
+        translate: function (number, withoutSuffix, key) {
+            var wordKey = translator$1.words[key];
+            if (key.length === 1) {
+                return withoutSuffix ? wordKey[0] : wordKey[1];
+            } else {
+                return (
+                    number +
+                    ' ' +
+                    translator$1.correctGrammaticalCase(number, wordKey)
+                );
+            }
+        },
+    };
+
+    hooks.defineLocale('sr-cyrl', {
+        months: 'јануар_фебруар_март_април_мај_јун_јул_август_септембар_октобар_новембар_децембар'.split(
+            '_'
+        ),
+        monthsShort: 'јан._феб._мар._апр._мај_јун_јул_авг._сеп._окт._нов._дец.'.split(
+            '_'
+        ),
+        monthsParseExact: true,
+        weekdays: 'недеља_понедељак_уторак_среда_четвртак_петак_субота'.split('_'),
+        weekdaysShort: 'нед._пон._уто._сре._чет._пет._суб.'.split('_'),
+        weekdaysMin: 'не_по_ут_ср_че_пе_су'.split('_'),
+        weekdaysParseExact: true,
+        longDateFormat: {
+            LT: 'H:mm',
+            LTS: 'H:mm:ss',
+            L: 'DD.MM.YYYY',
+            LL: 'D. MMMM YYYY',
+            LLL: 'D. MMMM YYYY H:mm',
+            LLLL: 'dddd, D. MMMM YYYY H:mm',
+        },
+        calendar: {
+            sameDay: '[данас у] LT',
+            nextDay: '[сутра у] LT',
+            nextWeek: function () {
+                switch (this.day()) {
+                    case 0:
+                        return '[у] [недељу] [у] LT';
+                    case 3:
+                        return '[у] [среду] [у] LT';
+                    case 6:
+                        return '[у] [суботу] [у] LT';
+                    case 1:
+                    case 2:
+                    case 4:
+                    case 5:
+                        return '[у] dddd [у] LT';
+                }
+            },
+            lastDay: '[јуче у] LT',
+            lastWeek: function () {
+                var lastWeekDays = [
+                    '[прошле] [недеље] [у] LT',
+                    '[прошлог] [понедељка] [у] LT',
+                    '[прошлог] [уторка] [у] LT',
+                    '[прошле] [среде] [у] LT',
+                    '[прошлог] [четвртка] [у] LT',
+                    '[прошлог] [петка] [у] LT',
+                    '[прошле] [суботе] [у] LT',
+                ];
+                return lastWeekDays[this.day()];
+            },
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: 'за %s',
+            past: 'пре %s',
+            s: 'неколико секунди',
+            ss: translator$1.translate,
+            m: translator$1.translate,
+            mm: translator$1.translate,
+            h: translator$1.translate,
+            hh: translator$1.translate,
+            d: 'дан',
+            dd: translator$1.translate,
+            M: 'месец',
+            MM: translator$1.translate,
+            y: 'годину',
+            yy: translator$1.translate,
+        },
+        dayOfMonthOrdinalParse: /\d{1,2}\./,
+        ordinal: '%d.',
+        week: {
+            dow: 1, // Monday is the first day of the week.
+            doy: 7, // The week that contains Jan 7th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    var translator$2 = {
+        words: {
+            //Different grammatical cases
+            ss: ['sekunda', 'sekunde', 'sekundi'],
+            m: ['jedan minut', 'jedne minute'],
+            mm: ['minut', 'minute', 'minuta'],
+            h: ['jedan sat', 'jednog sata'],
+            hh: ['sat', 'sata', 'sati'],
+            dd: ['dan', 'dana', 'dana'],
+            MM: ['mesec', 'meseca', 'meseci'],
+            yy: ['godina', 'godine', 'godina'],
+        },
+        correctGrammaticalCase: function (number, wordKey) {
+            return number === 1
+                ? wordKey[0]
+                : number >= 2 && number <= 4
+                ? wordKey[1]
+                : wordKey[2];
+        },
+        translate: function (number, withoutSuffix, key) {
+            var wordKey = translator$2.words[key];
+            if (key.length === 1) {
+                return withoutSuffix ? wordKey[0] : wordKey[1];
+            } else {
+                return (
+                    number +
+                    ' ' +
+                    translator$2.correctGrammaticalCase(number, wordKey)
+                );
+            }
+        },
+    };
+
+    hooks.defineLocale('sr', {
+        months: 'januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar'.split(
+            '_'
+        ),
+        monthsShort: 'jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.'.split(
+            '_'
+        ),
+        monthsParseExact: true,
+        weekdays: 'nedelja_ponedeljak_utorak_sreda_četvrtak_petak_subota'.split(
+            '_'
+        ),
+        weekdaysShort: 'ned._pon._uto._sre._čet._pet._sub.'.split('_'),
+        weekdaysMin: 'ne_po_ut_sr_če_pe_su'.split('_'),
+        weekdaysParseExact: true,
+        longDateFormat: {
+            LT: 'H:mm',
+            LTS: 'H:mm:ss',
+            L: 'DD.MM.YYYY',
+            LL: 'D. MMMM YYYY',
+            LLL: 'D. MMMM YYYY H:mm',
+            LLLL: 'dddd, D. MMMM YYYY H:mm',
+        },
+        calendar: {
+            sameDay: '[danas u] LT',
+            nextDay: '[sutra u] LT',
+            nextWeek: function () {
+                switch (this.day()) {
+                    case 0:
+                        return '[u] [nedelju] [u] LT';
+                    case 3:
+                        return '[u] [sredu] [u] LT';
+                    case 6:
+                        return '[u] [subotu] [u] LT';
+                    case 1:
+                    case 2:
+                    case 4:
+                    case 5:
+                        return '[u] dddd [u] LT';
+                }
+            },
+            lastDay: '[juče u] LT',
+            lastWeek: function () {
+                var lastWeekDays = [
+                    '[prošle] [nedelje] [u] LT',
+                    '[prošlog] [ponedeljka] [u] LT',
+                    '[prošlog] [utorka] [u] LT',
+                    '[prošle] [srede] [u] LT',
+                    '[prošlog] [četvrtka] [u] LT',
+                    '[prošlog] [petka] [u] LT',
+                    '[prošle] [subote] [u] LT',
+                ];
+                return lastWeekDays[this.day()];
+            },
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: 'za %s',
+            past: 'pre %s',
+            s: 'nekoliko sekundi',
+            ss: translator$2.translate,
+            m: translator$2.translate,
+            mm: translator$2.translate,
+            h: translator$2.translate,
+            hh: translator$2.translate,
+            d: 'dan',
+            dd: translator$2.translate,
+            M: 'mesec',
+            MM: translator$2.translate,
+            y: 'godinu',
+            yy: translator$2.translate,
+        },
+        dayOfMonthOrdinalParse: /\d{1,2}\./,
+        ordinal: '%d.',
+        week: {
+            dow: 1, // Monday is the first day of the week.
+            doy: 7, // The week that contains Jan 7th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    hooks.defineLocale('ss', {
+        months: "Bhimbidvwane_Indlovana_Indlov'lenkhulu_Mabasa_Inkhwekhweti_Inhlaba_Kholwane_Ingci_Inyoni_Imphala_Lweti_Ingongoni".split(
+            '_'
+        ),
+        monthsShort: 'Bhi_Ina_Inu_Mab_Ink_Inh_Kho_Igc_Iny_Imp_Lwe_Igo'.split('_'),
+        weekdays: 'Lisontfo_Umsombuluko_Lesibili_Lesitsatfu_Lesine_Lesihlanu_Umgcibelo'.split(
+            '_'
+        ),
+        weekdaysShort: 'Lis_Umb_Lsb_Les_Lsi_Lsh_Umg'.split('_'),
+        weekdaysMin: 'Li_Us_Lb_Lt_Ls_Lh_Ug'.split('_'),
+        weekdaysParseExact: true,
+        longDateFormat: {
+            LT: 'h:mm A',
+            LTS: 'h:mm:ss A',
+            L: 'DD/MM/YYYY',
+            LL: 'D MMMM YYYY',
+            LLL: 'D MMMM YYYY h:mm A',
+            LLLL: 'dddd, D MMMM YYYY h:mm A',
+        },
+        calendar: {
+            sameDay: '[Namuhla nga] LT',
+            nextDay: '[Kusasa nga] LT',
+            nextWeek: 'dddd [nga] LT',
+            lastDay: '[Itolo nga] LT',
+            lastWeek: 'dddd [leliphelile] [nga] LT',
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: 'nga %s',
+            past: 'wenteka nga %s',
+            s: 'emizuzwana lomcane',
+            ss: '%d mzuzwana',
+            m: 'umzuzu',
+            mm: '%d emizuzu',
+            h: 'lihora',
+            hh: '%d emahora',
+            d: 'lilanga',
+            dd: '%d emalanga',
+            M: 'inyanga',
+            MM: '%d tinyanga',
+            y: 'umnyaka',
+            yy: '%d iminyaka',
+        },
+        meridiemParse: /ekuseni|emini|entsambama|ebusuku/,
+        meridiem: function (hours, minutes, isLower) {
+            if (hours < 11) {
+                return 'ekuseni';
+            } else if (hours < 15) {
+                return 'emini';
+            } else if (hours < 19) {
+                return 'entsambama';
+            } else {
+                return 'ebusuku';
+            }
+        },
+        meridiemHour: function (hour, meridiem) {
+            if (hour === 12) {
+                hour = 0;
+            }
+            if (meridiem === 'ekuseni') {
+                return hour;
+            } else if (meridiem === 'emini') {
+                return hour >= 11 ? hour : hour + 12;
+            } else if (meridiem === 'entsambama' || meridiem === 'ebusuku') {
+                if (hour === 0) {
+                    return 0;
+                }
+                return hour + 12;
+            }
+        },
+        dayOfMonthOrdinalParse: /\d{1,2}/,
+        ordinal: '%d',
+        week: {
+            dow: 1, // Monday is the first day of the week.
+            doy: 4, // The week that contains Jan 4th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    hooks.defineLocale('sv', {
+        months: 'januari_februari_mars_april_maj_juni_juli_augusti_september_oktober_november_december'.split(
+            '_'
+        ),
+        monthsShort: 'jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec'.split('_'),
+        weekdays: 'söndag_måndag_tisdag_onsdag_torsdag_fredag_lördag'.split('_'),
+        weekdaysShort: 'sön_mån_tis_ons_tor_fre_lör'.split('_'),
+        weekdaysMin: 'sö_må_ti_on_to_fr_lö'.split('_'),
+        longDateFormat: {
+            LT: 'HH:mm',
+            LTS: 'HH:mm:ss',
+            L: 'YYYY-MM-DD',
+            LL: 'D MMMM YYYY',
+            LLL: 'D MMMM YYYY [kl.] HH:mm',
+            LLLL: 'dddd D MMMM YYYY [kl.] HH:mm',
+            lll: 'D MMM YYYY HH:mm',
+            llll: 'ddd D MMM YYYY HH:mm',
+        },
+        calendar: {
+            sameDay: '[Idag] LT',
+            nextDay: '[Imorgon] LT',
+            lastDay: '[Igår] LT',
+            nextWeek: '[På] dddd LT',
+            lastWeek: '[I] dddd[s] LT',
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: 'om %s',
+            past: 'för %s sedan',
+            s: 'några sekunder',
+            ss: '%d sekunder',
+            m: 'en minut',
+            mm: '%d minuter',
+            h: 'en timme',
+            hh: '%d timmar',
+            d: 'en dag',
+            dd: '%d dagar',
+            M: 'en månad',
+            MM: '%d månader',
+            y: 'ett år',
+            yy: '%d år',
+        },
+        dayOfMonthOrdinalParse: /\d{1,2}(\:e|\:a)/,
+        ordinal: function (number) {
+            var b = number % 10,
+                output =
+                    ~~((number % 100) / 10) === 1
+                        ? ':e'
+                        : b === 1
+                        ? ':a'
+                        : b === 2
+                        ? ':a'
+                        : b === 3
+                        ? ':e'
+                        : ':e';
+            return number + output;
+        },
+        week: {
+            dow: 1, // Monday is the first day of the week.
+            doy: 4, // The week that contains Jan 4th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    hooks.defineLocale('sw', {
+        months: 'Januari_Februari_Machi_Aprili_Mei_Juni_Julai_Agosti_Septemba_Oktoba_Novemba_Desemba'.split(
+            '_'
+        ),
+        monthsShort: 'Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ago_Sep_Okt_Nov_Des'.split('_'),
+        weekdays: 'Jumapili_Jumatatu_Jumanne_Jumatano_Alhamisi_Ijumaa_Jumamosi'.split(
+            '_'
+        ),
+        weekdaysShort: 'Jpl_Jtat_Jnne_Jtan_Alh_Ijm_Jmos'.split('_'),
+        weekdaysMin: 'J2_J3_J4_J5_Al_Ij_J1'.split('_'),
+        weekdaysParseExact: true,
+        longDateFormat: {
+            LT: 'hh:mm A',
+            LTS: 'HH:mm:ss',
+            L: 'DD.MM.YYYY',
+            LL: 'D MMMM YYYY',
+            LLL: 'D MMMM YYYY HH:mm',
+            LLLL: 'dddd, D MMMM YYYY HH:mm',
+        },
+        calendar: {
+            sameDay: '[leo saa] LT',
+            nextDay: '[kesho saa] LT',
+            nextWeek: '[wiki ijayo] dddd [saat] LT',
+            lastDay: '[jana] LT',
+            lastWeek: '[wiki iliyopita] dddd [saat] LT',
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: '%s baadaye',
+            past: 'tokea %s',
+            s: 'hivi punde',
+            ss: 'sekunde %d',
+            m: 'dakika moja',
+            mm: 'dakika %d',
+            h: 'saa limoja',
+            hh: 'masaa %d',
+            d: 'siku moja',
+            dd: 'siku %d',
+            M: 'mwezi mmoja',
+            MM: 'miezi %d',
+            y: 'mwaka mmoja',
+            yy: 'miaka %d',
+        },
+        week: {
+            dow: 1, // Monday is the first day of the week.
+            doy: 7, // The week that contains Jan 7th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    var symbolMap$f = {
+            '1': '௧',
+            '2': '௨',
+            '3': '௩',
+            '4': '௪',
+            '5': '௫',
+            '6': '௬',
+            '7': '௭',
+            '8': '௮',
+            '9': '௯',
+            '0': '௦',
+        },
+        numberMap$e = {
+            '௧': '1',
+            '௨': '2',
+            '௩': '3',
+            '௪': '4',
+            '௫': '5',
+            '௬': '6',
+            '௭': '7',
+            '௮': '8',
+            '௯': '9',
+            '௦': '0',
+        };
+
+    hooks.defineLocale('ta', {
+        months: 'ஜனவரி_பிப்ரவரி_மார்ச்_ஏப்ரல்_மே_ஜூன்_ஜூலை_ஆகஸ்ட்_செப்டெம்பர்_அக்டோபர்_நவம்பர்_டிசம்பர்'.split(
+            '_'
+        ),
+        monthsShort: 'ஜனவரி_பிப்ரவரி_மார்ச்_ஏப்ரல்_மே_ஜூன்_ஜூலை_ஆகஸ்ட்_செப்டெம்பர்_அக்டோபர்_நவம்பர்_டிசம்பர்'.split(
+            '_'
+        ),
+        weekdays: 'ஞாயிற்றுக்கிழமை_திங்கட்கிழமை_செவ்வாய்கிழமை_புதன்கிழமை_வியாழக்கிழமை_வெள்ளிக்கிழமை_சனிக்கிழமை'.split(
+            '_'
+        ),
+        weekdaysShort: 'ஞாயிறு_திங்கள்_செவ்வாய்_புதன்_வியாழன்_வெள்ளி_சனி'.split(
+            '_'
+        ),
+        weekdaysMin: 'ஞா_தி_செ_பு_வி_வெ_ச'.split('_'),
+        longDateFormat: {
+            LT: 'HH:mm',
+            LTS: 'HH:mm:ss',
+            L: 'DD/MM/YYYY',
+            LL: 'D MMMM YYYY',
+            LLL: 'D MMMM YYYY, HH:mm',
+            LLLL: 'dddd, D MMMM YYYY, HH:mm',
+        },
+        calendar: {
+            sameDay: '[இன்று] LT',
+            nextDay: '[நாளை] LT',
+            nextWeek: 'dddd, LT',
+            lastDay: '[நேற்று] LT',
+            lastWeek: '[கடந்த வாரம்] dddd, LT',
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: '%s இல்',
+            past: '%s முன்',
+            s: 'ஒரு சில விநாடிகள்',
+            ss: '%d விநாடிகள்',
+            m: 'ஒரு நிமிடம்',
+            mm: '%d நிமிடங்கள்',
+            h: 'ஒரு மணி நேரம்',
+            hh: '%d மணி நேரம்',
+            d: 'ஒரு நாள்',
+            dd: '%d நாட்கள்',
+            M: 'ஒரு மாதம்',
+            MM: '%d மாதங்கள்',
+            y: 'ஒரு வருடம்',
+            yy: '%d ஆண்டுகள்',
+        },
+        dayOfMonthOrdinalParse: /\d{1,2}வது/,
+        ordinal: function (number) {
+            return number + 'வது';
+        },
+        preparse: function (string) {
+            return string.replace(/[௧௨௩௪௫௬௭௮௯௦]/g, function (match) {
+                return numberMap$e[match];
+            });
+        },
+        postformat: function (string) {
+            return string.replace(/\d/g, function (match) {
+                return symbolMap$f[match];
+            });
+        },
+        // refer http://ta.wikipedia.org/s/1er1
+        meridiemParse: /யாமம்|வைகறை|காலை|நண்பகல்|எற்பாடு|மாலை/,
+        meridiem: function (hour, minute, isLower) {
+            if (hour < 2) {
+                return ' யாமம்';
+            } else if (hour < 6) {
+                return ' வைகறை'; // வைகறை
+            } else if (hour < 10) {
+                return ' காலை'; // காலை
+            } else if (hour < 14) {
+                return ' நண்பகல்'; // நண்பகல்
+            } else if (hour < 18) {
+                return ' எற்பாடு'; // எற்பாடு
+            } else if (hour < 22) {
+                return ' மாலை'; // மாலை
+            } else {
+                return ' யாமம்';
+            }
+        },
+        meridiemHour: function (hour, meridiem) {
+            if (hour === 12) {
+                hour = 0;
+            }
+            if (meridiem === 'யாமம்') {
+                return hour < 2 ? hour : hour + 12;
+            } else if (meridiem === 'வைகறை' || meridiem === 'காலை') {
+                return hour;
+            } else if (meridiem === 'நண்பகல்') {
+                return hour >= 10 ? hour : hour + 12;
+            } else {
+                return hour + 12;
+            }
+        },
+        week: {
+            dow: 0, // Sunday is the first day of the week.
+            doy: 6, // The week that contains Jan 6th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    hooks.defineLocale('te', {
+        months: 'జనవరి_ఫిబ్రవరి_మార్చి_ఏప్రిల్_మే_జూన్_జులై_ఆగస్టు_సెప్టెంబర్_అక్టోబర్_నవంబర్_డిసెంబర్'.split(
+            '_'
+        ),
+        monthsShort: 'జన._ఫిబ్ర._మార్చి_ఏప్రి._మే_జూన్_జులై_ఆగ._సెప్._అక్టో._నవ._డిసె.'.split(
+            '_'
+        ),
+        monthsParseExact: true,
+        weekdays: 'ఆదివారం_సోమవారం_మంగళవారం_బుధవారం_గురువారం_శుక్రవారం_శనివారం'.split(
+            '_'
+        ),
+        weekdaysShort: 'ఆది_సోమ_మంగళ_బుధ_గురు_శుక్ర_శని'.split('_'),
+        weekdaysMin: 'ఆ_సో_మం_బు_గు_శు_శ'.split('_'),
+        longDateFormat: {
+            LT: 'A h:mm',
+            LTS: 'A h:mm:ss',
+            L: 'DD/MM/YYYY',
+            LL: 'D MMMM YYYY',
+            LLL: 'D MMMM YYYY, A h:mm',
+            LLLL: 'dddd, D MMMM YYYY, A h:mm',
+        },
+        calendar: {
+            sameDay: '[నేడు] LT',
+            nextDay: '[రేపు] LT',
+            nextWeek: 'dddd, LT',
+            lastDay: '[నిన్న] LT',
+            lastWeek: '[గత] dddd, LT',
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: '%s లో',
+            past: '%s క్రితం',
+            s: 'కొన్ని క్షణాలు',
+            ss: '%d సెకన్లు',
+            m: 'ఒక నిమిషం',
+            mm: '%d నిమిషాలు',
+            h: 'ఒక గంట',
+            hh: '%d గంటలు',
+            d: 'ఒక రోజు',
+            dd: '%d రోజులు',
+            M: 'ఒక నెల',
+            MM: '%d నెలలు',
+            y: 'ఒక సంవత్సరం',
+            yy: '%d సంవత్సరాలు',
+        },
+        dayOfMonthOrdinalParse: /\d{1,2}వ/,
+        ordinal: '%dవ',
+        meridiemParse: /రాత్రి|ఉదయం|మధ్యాహ్నం|సాయంత్రం/,
+        meridiemHour: function (hour, meridiem) {
+            if (hour === 12) {
+                hour = 0;
+            }
+            if (meridiem === 'రాత్రి') {
+                return hour < 4 ? hour : hour + 12;
+            } else if (meridiem === 'ఉదయం') {
+                return hour;
+            } else if (meridiem === 'మధ్యాహ్నం') {
+                return hour >= 10 ? hour : hour + 12;
+            } else if (meridiem === 'సాయంత్రం') {
+                return hour + 12;
+            }
+        },
+        meridiem: function (hour, minute, isLower) {
+            if (hour < 4) {
+                return 'రాత్రి';
+            } else if (hour < 10) {
+                return 'ఉదయం';
+            } else if (hour < 17) {
+                return 'మధ్యాహ్నం';
+            } else if (hour < 20) {
+                return 'సాయంత్రం';
+            } else {
+                return 'రాత్రి';
+            }
+        },
+        week: {
+            dow: 0, // Sunday is the first day of the week.
+            doy: 6, // The week that contains Jan 6th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    hooks.defineLocale('tet', {
+        months: 'Janeiru_Fevereiru_Marsu_Abril_Maiu_Juñu_Jullu_Agustu_Setembru_Outubru_Novembru_Dezembru'.split(
+            '_'
+        ),
+        monthsShort: 'Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez'.split('_'),
+        weekdays: 'Domingu_Segunda_Tersa_Kuarta_Kinta_Sesta_Sabadu'.split('_'),
+        weekdaysShort: 'Dom_Seg_Ters_Kua_Kint_Sest_Sab'.split('_'),
+        weekdaysMin: 'Do_Seg_Te_Ku_Ki_Ses_Sa'.split('_'),
+        longDateFormat: {
+            LT: 'HH:mm',
+            LTS: 'HH:mm:ss',
+            L: 'DD/MM/YYYY',
+            LL: 'D MMMM YYYY',
+            LLL: 'D MMMM YYYY HH:mm',
+            LLLL: 'dddd, D MMMM YYYY HH:mm',
+        },
+        calendar: {
+            sameDay: '[Ohin iha] LT',
+            nextDay: '[Aban iha] LT',
+            nextWeek: 'dddd [iha] LT',
+            lastDay: '[Horiseik iha] LT',
+            lastWeek: 'dddd [semana kotuk] [iha] LT',
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: 'iha %s',
+            past: '%s liuba',
+            s: 'segundu balun',
+            ss: 'segundu %d',
+            m: 'minutu ida',
+            mm: 'minutu %d',
+            h: 'oras ida',
+            hh: 'oras %d',
+            d: 'loron ida',
+            dd: 'loron %d',
+            M: 'fulan ida',
+            MM: 'fulan %d',
+            y: 'tinan ida',
+            yy: 'tinan %d',
+        },
+        dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/,
+        ordinal: function (number) {
+            var b = number % 10,
+                output =
+                    ~~((number % 100) / 10) === 1
+                        ? 'th'
+                        : b === 1
+                        ? 'st'
+                        : b === 2
+                        ? 'nd'
+                        : b === 3
+                        ? 'rd'
+                        : 'th';
+            return number + output;
+        },
+        week: {
+            dow: 1, // Monday is the first day of the week.
+            doy: 4, // The week that contains Jan 4th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    var suffixes$3 = {
+        0: '-ум',
+        1: '-ум',
+        2: '-юм',
+        3: '-юм',
+        4: '-ум',
+        5: '-ум',
+        6: '-ум',
+        7: '-ум',
+        8: '-ум',
+        9: '-ум',
+        10: '-ум',
+        12: '-ум',
+        13: '-ум',
+        20: '-ум',
+        30: '-юм',
+        40: '-ум',
+        50: '-ум',
+        60: '-ум',
+        70: '-ум',
+        80: '-ум',
+        90: '-ум',
+        100: '-ум',
+    };
+
+    hooks.defineLocale('tg', {
+        months: 'январ_феврал_март_апрел_май_июн_июл_август_сентябр_октябр_ноябр_декабр'.split(
+            '_'
+        ),
+        monthsShort: 'янв_фев_мар_апр_май_июн_июл_авг_сен_окт_ноя_дек'.split('_'),
+        weekdays: 'якшанбе_душанбе_сешанбе_чоршанбе_панҷшанбе_ҷумъа_шанбе'.split(
+            '_'
+        ),
+        weekdaysShort: 'яшб_дшб_сшб_чшб_пшб_ҷум_шнб'.split('_'),
+        weekdaysMin: 'яш_дш_сш_чш_пш_ҷм_шб'.split('_'),
+        longDateFormat: {
+            LT: 'HH:mm',
+            LTS: 'HH:mm:ss',
+            L: 'DD/MM/YYYY',
+            LL: 'D MMMM YYYY',
+            LLL: 'D MMMM YYYY HH:mm',
+            LLLL: 'dddd, D MMMM YYYY HH:mm',
+        },
+        calendar: {
+            sameDay: '[Имрӯз соати] LT',
+            nextDay: '[Пагоҳ соати] LT',
+            lastDay: '[Дирӯз соати] LT',
+            nextWeek: 'dddd[и] [ҳафтаи оянда соати] LT',
+            lastWeek: 'dddd[и] [ҳафтаи гузашта соати] LT',
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: 'баъди %s',
+            past: '%s пеш',
+            s: 'якчанд сония',
+            m: 'як дақиқа',
+            mm: '%d дақиқа',
+            h: 'як соат',
+            hh: '%d соат',
+            d: 'як рӯз',
+            dd: '%d рӯз',
+            M: 'як моҳ',
+            MM: '%d моҳ',
+            y: 'як сол',
+            yy: '%d сол',
+        },
+        meridiemParse: /шаб|субҳ|рӯз|бегоҳ/,
+        meridiemHour: function (hour, meridiem) {
+            if (hour === 12) {
+                hour = 0;
+            }
+            if (meridiem === 'шаб') {
+                return hour < 4 ? hour : hour + 12;
+            } else if (meridiem === 'субҳ') {
+                return hour;
+            } else if (meridiem === 'рӯз') {
+                return hour >= 11 ? hour : hour + 12;
+            } else if (meridiem === 'бегоҳ') {
+                return hour + 12;
+            }
+        },
+        meridiem: function (hour, minute, isLower) {
+            if (hour < 4) {
+                return 'шаб';
+            } else if (hour < 11) {
+                return 'субҳ';
+            } else if (hour < 16) {
+                return 'рӯз';
+            } else if (hour < 19) {
+                return 'бегоҳ';
+            } else {
+                return 'шаб';
+            }
+        },
+        dayOfMonthOrdinalParse: /\d{1,2}-(ум|юм)/,
+        ordinal: function (number) {
+            var a = number % 10,
+                b = number >= 100 ? 100 : null;
+            return number + (suffixes$3[number] || suffixes$3[a] || suffixes$3[b]);
+        },
+        week: {
+            dow: 1, // Monday is the first day of the week.
+            doy: 7, // The week that contains Jan 1th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    hooks.defineLocale('th', {
+        months: 'มกราคม_กุมภาพันธ์_มีนาคม_เมษายน_พฤษภาคม_มิถุนายน_กรกฎาคม_สิงหาคม_กันยายน_ตุลาคม_พฤศจิกายน_ธันวาคม'.split(
+            '_'
+        ),
+        monthsShort: 'ม.ค._ก.พ._มี.ค._เม.ย._พ.ค._มิ.ย._ก.ค._ส.ค._ก.ย._ต.ค._พ.ย._ธ.ค.'.split(
+            '_'
+        ),
+        monthsParseExact: true,
+        weekdays: 'อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัสบดี_ศุกร์_เสาร์'.split('_'),
+        weekdaysShort: 'อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัส_ศุกร์_เสาร์'.split('_'), // yes, three characters difference
+        weekdaysMin: 'อา._จ._อ._พ._พฤ._ศ._ส.'.split('_'),
+        weekdaysParseExact: true,
+        longDateFormat: {
+            LT: 'H:mm',
+            LTS: 'H:mm:ss',
+            L: 'DD/MM/YYYY',
+            LL: 'D MMMM YYYY',
+            LLL: 'D MMMM YYYY เวลา H:mm',
+            LLLL: 'วันddddที่ D MMMM YYYY เวลา H:mm',
+        },
+        meridiemParse: /ก่อนเที่ยง|หลังเที่ยง/,
+        isPM: function (input) {
+            return input === 'หลังเที่ยง';
+        },
+        meridiem: function (hour, minute, isLower) {
+            if (hour < 12) {
+                return 'ก่อนเที่ยง';
+            } else {
+                return 'หลังเที่ยง';
+            }
+        },
+        calendar: {
+            sameDay: '[วันนี้ เวลา] LT',
+            nextDay: '[พรุ่งนี้ เวลา] LT',
+            nextWeek: 'dddd[หน้า เวลา] LT',
+            lastDay: '[เมื่อวานนี้ เวลา] LT',
+            lastWeek: '[วัน]dddd[ที่แล้ว เวลา] LT',
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: 'อีก %s',
+            past: '%sที่แล้ว',
+            s: 'ไม่กี่วินาที',
+            ss: '%d วินาที',
+            m: '1 นาที',
+            mm: '%d นาที',
+            h: '1 ชั่วโมง',
+            hh: '%d ชั่วโมง',
+            d: '1 วัน',
+            dd: '%d วัน',
+            M: '1 เดือน',
+            MM: '%d เดือน',
+            y: '1 ปี',
+            yy: '%d ปี',
+        },
+    });
+
+    //! moment.js locale configuration
+
+    var suffixes$4 = {
+        1: "'inji",
+        5: "'inji",
+        8: "'inji",
+        70: "'inji",
+        80: "'inji",
+        2: "'nji",
+        7: "'nji",
+        20: "'nji",
+        50: "'nji",
+        3: "'ünji",
+        4: "'ünji",
+        100: "'ünji",
+        6: "'njy",
+        9: "'unjy",
+        10: "'unjy",
+        30: "'unjy",
+        60: "'ynjy",
+        90: "'ynjy",
+    };
+
+    hooks.defineLocale('tk', {
+        months: 'Ýanwar_Fewral_Mart_Aprel_Maý_Iýun_Iýul_Awgust_Sentýabr_Oktýabr_Noýabr_Dekabr'.split(
+            '_'
+        ),
+        monthsShort: 'Ýan_Few_Mar_Apr_Maý_Iýn_Iýl_Awg_Sen_Okt_Noý_Dek'.split('_'),
+        weekdays: 'Ýekşenbe_Duşenbe_Sişenbe_Çarşenbe_Penşenbe_Anna_Şenbe'.split(
+            '_'
+        ),
+        weekdaysShort: 'Ýek_Duş_Siş_Çar_Pen_Ann_Şen'.split('_'),
+        weekdaysMin: 'Ýk_Dş_Sş_Çr_Pn_An_Şn'.split('_'),
+        longDateFormat: {
+            LT: 'HH:mm',
+            LTS: 'HH:mm:ss',
+            L: 'DD.MM.YYYY',
+            LL: 'D MMMM YYYY',
+            LLL: 'D MMMM YYYY HH:mm',
+            LLLL: 'dddd, D MMMM YYYY HH:mm',
+        },
+        calendar: {
+            sameDay: '[bugün sagat] LT',
+            nextDay: '[ertir sagat] LT',
+            nextWeek: '[indiki] dddd [sagat] LT',
+            lastDay: '[düýn] LT',
+            lastWeek: '[geçen] dddd [sagat] LT',
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: '%s soň',
+            past: '%s öň',
+            s: 'birnäçe sekunt',
+            m: 'bir minut',
+            mm: '%d minut',
+            h: 'bir sagat',
+            hh: '%d sagat',
+            d: 'bir gün',
+            dd: '%d gün',
+            M: 'bir aý',
+            MM: '%d aý',
+            y: 'bir ýyl',
+            yy: '%d ýyl',
+        },
+        ordinal: function (number, period) {
+            switch (period) {
+                case 'd':
+                case 'D':
+                case 'Do':
+                case 'DD':
+                    return number;
+                default:
+                    if (number === 0) {
+                        // special case for zero
+                        return number + "'unjy";
+                    }
+                    var a = number % 10,
+                        b = (number % 100) - a,
+                        c = number >= 100 ? 100 : null;
+                    return number + (suffixes$4[a] || suffixes$4[b] || suffixes$4[c]);
+            }
+        },
+        week: {
+            dow: 1, // Monday is the first day of the week.
+            doy: 7, // The week that contains Jan 7th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    hooks.defineLocale('tl-ph', {
+        months: 'Enero_Pebrero_Marso_Abril_Mayo_Hunyo_Hulyo_Agosto_Setyembre_Oktubre_Nobyembre_Disyembre'.split(
+            '_'
+        ),
+        monthsShort: 'Ene_Peb_Mar_Abr_May_Hun_Hul_Ago_Set_Okt_Nob_Dis'.split('_'),
+        weekdays: 'Linggo_Lunes_Martes_Miyerkules_Huwebes_Biyernes_Sabado'.split(
+            '_'
+        ),
+        weekdaysShort: 'Lin_Lun_Mar_Miy_Huw_Biy_Sab'.split('_'),
+        weekdaysMin: 'Li_Lu_Ma_Mi_Hu_Bi_Sab'.split('_'),
+        longDateFormat: {
+            LT: 'HH:mm',
+            LTS: 'HH:mm:ss',
+            L: 'MM/D/YYYY',
+            LL: 'MMMM D, YYYY',
+            LLL: 'MMMM D, YYYY HH:mm',
+            LLLL: 'dddd, MMMM DD, YYYY HH:mm',
+        },
+        calendar: {
+            sameDay: 'LT [ngayong araw]',
+            nextDay: '[Bukas ng] LT',
+            nextWeek: 'LT [sa susunod na] dddd',
+            lastDay: 'LT [kahapon]',
+            lastWeek: 'LT [noong nakaraang] dddd',
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: 'sa loob ng %s',
+            past: '%s ang nakalipas',
+            s: 'ilang segundo',
+            ss: '%d segundo',
+            m: 'isang minuto',
+            mm: '%d minuto',
+            h: 'isang oras',
+            hh: '%d oras',
+            d: 'isang araw',
+            dd: '%d araw',
+            M: 'isang buwan',
+            MM: '%d buwan',
+            y: 'isang taon',
+            yy: '%d taon',
+        },
+        dayOfMonthOrdinalParse: /\d{1,2}/,
+        ordinal: function (number) {
+            return number;
+        },
+        week: {
+            dow: 1, // Monday is the first day of the week.
+            doy: 4, // The week that contains Jan 4th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    var numbersNouns = 'pagh_wa’_cha’_wej_loS_vagh_jav_Soch_chorgh_Hut'.split('_');
+
+    function translateFuture(output) {
+        var time = output;
+        time =
+            output.indexOf('jaj') !== -1
+                ? time.slice(0, -3) + 'leS'
+                : output.indexOf('jar') !== -1
+                ? time.slice(0, -3) + 'waQ'
+                : output.indexOf('DIS') !== -1
+                ? time.slice(0, -3) + 'nem'
+                : time + ' pIq';
+        return time;
+    }
+
+    function translatePast(output) {
+        var time = output;
+        time =
+            output.indexOf('jaj') !== -1
+                ? time.slice(0, -3) + 'Hu’'
+                : output.indexOf('jar') !== -1
+                ? time.slice(0, -3) + 'wen'
+                : output.indexOf('DIS') !== -1
+                ? time.slice(0, -3) + 'ben'
+                : time + ' ret';
+        return time;
+    }
+
+    function translate$a(number, withoutSuffix, string, isFuture) {
+        var numberNoun = numberAsNoun(number);
+        switch (string) {
+            case 'ss':
+                return numberNoun + ' lup';
+            case 'mm':
+                return numberNoun + ' tup';
+            case 'hh':
+                return numberNoun + ' rep';
+            case 'dd':
+                return numberNoun + ' jaj';
+            case 'MM':
+                return numberNoun + ' jar';
+            case 'yy':
+                return numberNoun + ' DIS';
+        }
+    }
+
+    function numberAsNoun(number) {
+        var hundred = Math.floor((number % 1000) / 100),
+            ten = Math.floor((number % 100) / 10),
+            one = number % 10,
+            word = '';
+        if (hundred > 0) {
+            word += numbersNouns[hundred] + 'vatlh';
+        }
+        if (ten > 0) {
+            word += (word !== '' ? ' ' : '') + numbersNouns[ten] + 'maH';
+        }
+        if (one > 0) {
+            word += (word !== '' ? ' ' : '') + numbersNouns[one];
+        }
+        return word === '' ? 'pagh' : word;
+    }
+
+    hooks.defineLocale('tlh', {
+        months: 'tera’ jar wa’_tera’ jar cha’_tera’ jar wej_tera’ jar loS_tera’ jar vagh_tera’ jar jav_tera’ jar Soch_tera’ jar chorgh_tera’ jar Hut_tera’ jar wa’maH_tera’ jar wa’maH wa’_tera’ jar wa’maH cha’'.split(
+            '_'
+        ),
+        monthsShort: 'jar wa’_jar cha’_jar wej_jar loS_jar vagh_jar jav_jar Soch_jar chorgh_jar Hut_jar wa’maH_jar wa’maH wa’_jar wa’maH cha’'.split(
+            '_'
+        ),
+        monthsParseExact: true,
+        weekdays: 'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.split(
+            '_'
+        ),
+        weekdaysShort: 'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.split(
+            '_'
+        ),
+        weekdaysMin: 'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.split(
+            '_'
+        ),
+        longDateFormat: {
+            LT: 'HH:mm',
+            LTS: 'HH:mm:ss',
+            L: 'DD.MM.YYYY',
+            LL: 'D MMMM YYYY',
+            LLL: 'D MMMM YYYY HH:mm',
+            LLLL: 'dddd, D MMMM YYYY HH:mm',
+        },
+        calendar: {
+            sameDay: '[DaHjaj] LT',
+            nextDay: '[wa’leS] LT',
+            nextWeek: 'LLL',
+            lastDay: '[wa’Hu’] LT',
+            lastWeek: 'LLL',
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: translateFuture,
+            past: translatePast,
+            s: 'puS lup',
+            ss: translate$a,
+            m: 'wa’ tup',
+            mm: translate$a,
+            h: 'wa’ rep',
+            hh: translate$a,
+            d: 'wa’ jaj',
+            dd: translate$a,
+            M: 'wa’ jar',
+            MM: translate$a,
+            y: 'wa’ DIS',
+            yy: translate$a,
+        },
+        dayOfMonthOrdinalParse: /\d{1,2}\./,
+        ordinal: '%d.',
+        week: {
+            dow: 1, // Monday is the first day of the week.
+            doy: 4, // The week that contains Jan 4th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    var suffixes$5 = {
+        1: "'inci",
+        5: "'inci",
+        8: "'inci",
+        70: "'inci",
+        80: "'inci",
+        2: "'nci",
+        7: "'nci",
+        20: "'nci",
+        50: "'nci",
+        3: "'üncü",
+        4: "'üncü",
+        100: "'üncü",
+        6: "'ncı",
+        9: "'uncu",
+        10: "'uncu",
+        30: "'uncu",
+        60: "'ıncı",
+        90: "'ıncı",
+    };
+
+    hooks.defineLocale('tr', {
+        months: 'Ocak_Şubat_Mart_Nisan_Mayıs_Haziran_Temmuz_Ağustos_Eylül_Ekim_Kasım_Aralık'.split(
+            '_'
+        ),
+        monthsShort: 'Oca_Şub_Mar_Nis_May_Haz_Tem_Ağu_Eyl_Eki_Kas_Ara'.split('_'),
+        weekdays: 'Pazar_Pazartesi_Salı_Çarşamba_Perşembe_Cuma_Cumartesi'.split(
+            '_'
+        ),
+        weekdaysShort: 'Paz_Pts_Sal_Çar_Per_Cum_Cts'.split('_'),
+        weekdaysMin: 'Pz_Pt_Sa_Ça_Pe_Cu_Ct'.split('_'),
+        meridiem: function (hours, minutes, isLower) {
+            if (hours < 12) {
+                return isLower ? 'öö' : 'ÖÖ';
+            } else {
+                return isLower ? 'ös' : 'ÖS';
+            }
+        },
+        meridiemParse: /öö|ÖÖ|ös|ÖS/,
+        isPM: function (input) {
+            return input === 'ös' || input === 'ÖS';
+        },
+        longDateFormat: {
+            LT: 'HH:mm',
+            LTS: 'HH:mm:ss',
+            L: 'DD.MM.YYYY',
+            LL: 'D MMMM YYYY',
+            LLL: 'D MMMM YYYY HH:mm',
+            LLLL: 'dddd, D MMMM YYYY HH:mm',
+        },
+        calendar: {
+            sameDay: '[bugün saat] LT',
+            nextDay: '[yarın saat] LT',
+            nextWeek: '[gelecek] dddd [saat] LT',
+            lastDay: '[dün] LT',
+            lastWeek: '[geçen] dddd [saat] LT',
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: '%s sonra',
+            past: '%s önce',
+            s: 'birkaç saniye',
+            ss: '%d saniye',
+            m: 'bir dakika',
+            mm: '%d dakika',
+            h: 'bir saat',
+            hh: '%d saat',
+            d: 'bir gün',
+            dd: '%d gün',
+            M: 'bir ay',
+            MM: '%d ay',
+            y: 'bir yıl',
+            yy: '%d yıl',
+        },
+        ordinal: function (number, period) {
+            switch (period) {
+                case 'd':
+                case 'D':
+                case 'Do':
+                case 'DD':
+                    return number;
+                default:
+                    if (number === 0) {
+                        // special case for zero
+                        return number + "'ıncı";
+                    }
+                    var a = number % 10,
+                        b = (number % 100) - a,
+                        c = number >= 100 ? 100 : null;
+                    return number + (suffixes$5[a] || suffixes$5[b] || suffixes$5[c]);
+            }
+        },
+        week: {
+            dow: 1, // Monday is the first day of the week.
+            doy: 7, // The week that contains Jan 7th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    // After the year there should be a slash and the amount of years since December 26, 1979 in Roman numerals.
+    // This is currently too difficult (maybe even impossible) to add.
+    hooks.defineLocale('tzl', {
+        months: 'Januar_Fevraglh_Març_Avrïu_Mai_Gün_Julia_Guscht_Setemvar_Listopäts_Noemvar_Zecemvar'.split(
+            '_'
+        ),
+        monthsShort: 'Jan_Fev_Mar_Avr_Mai_Gün_Jul_Gus_Set_Lis_Noe_Zec'.split('_'),
+        weekdays: 'Súladi_Lúneçi_Maitzi_Márcuri_Xhúadi_Viénerçi_Sáturi'.split('_'),
+        weekdaysShort: 'Súl_Lún_Mai_Már_Xhú_Vié_Sát'.split('_'),
+        weekdaysMin: 'Sú_Lú_Ma_Má_Xh_Vi_Sá'.split('_'),
+        longDateFormat: {
+            LT: 'HH.mm',
+            LTS: 'HH.mm.ss',
+            L: 'DD.MM.YYYY',
+            LL: 'D. MMMM [dallas] YYYY',
+            LLL: 'D. MMMM [dallas] YYYY HH.mm',
+            LLLL: 'dddd, [li] D. MMMM [dallas] YYYY HH.mm',
+        },
+        meridiemParse: /d\'o|d\'a/i,
+        isPM: function (input) {
+            return "d'o" === input.toLowerCase();
+        },
+        meridiem: function (hours, minutes, isLower) {
+            if (hours > 11) {
+                return isLower ? "d'o" : "D'O";
+            } else {
+                return isLower ? "d'a" : "D'A";
+            }
+        },
+        calendar: {
+            sameDay: '[oxhi à] LT',
+            nextDay: '[demà à] LT',
+            nextWeek: 'dddd [à] LT',
+            lastDay: '[ieiri à] LT',
+            lastWeek: '[sür el] dddd [lasteu à] LT',
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: 'osprei %s',
+            past: 'ja%s',
+            s: processRelativeTime$8,
+            ss: processRelativeTime$8,
+            m: processRelativeTime$8,
+            mm: processRelativeTime$8,
+            h: processRelativeTime$8,
+            hh: processRelativeTime$8,
+            d: processRelativeTime$8,
+            dd: processRelativeTime$8,
+            M: processRelativeTime$8,
+            MM: processRelativeTime$8,
+            y: processRelativeTime$8,
+            yy: processRelativeTime$8,
+        },
+        dayOfMonthOrdinalParse: /\d{1,2}\./,
+        ordinal: '%d.',
+        week: {
+            dow: 1, // Monday is the first day of the week.
+            doy: 4, // The week that contains Jan 4th is the first week of the year.
+        },
+    });
+
+    function processRelativeTime$8(number, withoutSuffix, key, isFuture) {
+        var format = {
+            s: ['viensas secunds', "'iensas secunds"],
+            ss: [number + ' secunds', '' + number + ' secunds'],
+            m: ["'n míut", "'iens míut"],
+            mm: [number + ' míuts', '' + number + ' míuts'],
+            h: ["'n þora", "'iensa þora"],
+            hh: [number + ' þoras', '' + number + ' þoras'],
+            d: ["'n ziua", "'iensa ziua"],
+            dd: [number + ' ziuas', '' + number + ' ziuas'],
+            M: ["'n mes", "'iens mes"],
+            MM: [number + ' mesen', '' + number + ' mesen'],
+            y: ["'n ar", "'iens ar"],
+            yy: [number + ' ars', '' + number + ' ars'],
+        };
+        return isFuture
+            ? format[key][0]
+            : withoutSuffix
+            ? format[key][0]
+            : format[key][1];
+    }
+
+    //! moment.js locale configuration
+
+    hooks.defineLocale('tzm-latn', {
+        months: 'innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_ɣwšt_šwtanbir_ktˤwbrˤ_nwwanbir_dwjnbir'.split(
+            '_'
+        ),
+        monthsShort: 'innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_ɣwšt_šwtanbir_ktˤwbrˤ_nwwanbir_dwjnbir'.split(
+            '_'
+        ),
+        weekdays: 'asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas'.split('_'),
+        weekdaysShort: 'asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas'.split('_'),
+        weekdaysMin: 'asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas'.split('_'),
+        longDateFormat: {
+            LT: 'HH:mm',
+            LTS: 'HH:mm:ss',
+            L: 'DD/MM/YYYY',
+            LL: 'D MMMM YYYY',
+            LLL: 'D MMMM YYYY HH:mm',
+            LLLL: 'dddd D MMMM YYYY HH:mm',
+        },
+        calendar: {
+            sameDay: '[asdkh g] LT',
+            nextDay: '[aska g] LT',
+            nextWeek: 'dddd [g] LT',
+            lastDay: '[assant g] LT',
+            lastWeek: 'dddd [g] LT',
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: 'dadkh s yan %s',
+            past: 'yan %s',
+            s: 'imik',
+            ss: '%d imik',
+            m: 'minuḍ',
+            mm: '%d minuḍ',
+            h: 'saɛa',
+            hh: '%d tassaɛin',
+            d: 'ass',
+            dd: '%d ossan',
+            M: 'ayowr',
+            MM: '%d iyyirn',
+            y: 'asgas',
+            yy: '%d isgasn',
+        },
+        week: {
+            dow: 6, // Saturday is the first day of the week.
+            doy: 12, // The week that contains Jan 12th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    hooks.defineLocale('tzm', {
+        months: 'ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ'.split(
+            '_'
+        ),
+        monthsShort: 'ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ'.split(
+            '_'
+        ),
+        weekdays: 'ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ'.split('_'),
+        weekdaysShort: 'ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ'.split('_'),
+        weekdaysMin: 'ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ'.split('_'),
+        longDateFormat: {
+            LT: 'HH:mm',
+            LTS: 'HH:mm:ss',
+            L: 'DD/MM/YYYY',
+            LL: 'D MMMM YYYY',
+            LLL: 'D MMMM YYYY HH:mm',
+            LLLL: 'dddd D MMMM YYYY HH:mm',
+        },
+        calendar: {
+            sameDay: '[ⴰⵙⴷⵅ ⴴ] LT',
+            nextDay: '[ⴰⵙⴽⴰ ⴴ] LT',
+            nextWeek: 'dddd [ⴴ] LT',
+            lastDay: '[ⴰⵚⴰⵏⵜ ⴴ] LT',
+            lastWeek: 'dddd [ⴴ] LT',
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: 'ⴷⴰⴷⵅ ⵙ ⵢⴰⵏ %s',
+            past: 'ⵢⴰⵏ %s',
+            s: 'ⵉⵎⵉⴽ',
+            ss: '%d ⵉⵎⵉⴽ',
+            m: 'ⵎⵉⵏⵓⴺ',
+            mm: '%d ⵎⵉⵏⵓⴺ',
+            h: 'ⵙⴰⵄⴰ',
+            hh: '%d ⵜⴰⵙⵙⴰⵄⵉⵏ',
+            d: 'ⴰⵙⵙ',
+            dd: '%d oⵙⵙⴰⵏ',
+            M: 'ⴰⵢoⵓⵔ',
+            MM: '%d ⵉⵢⵢⵉⵔⵏ',
+            y: 'ⴰⵙⴳⴰⵙ',
+            yy: '%d ⵉⵙⴳⴰⵙⵏ',
+        },
+        week: {
+            dow: 6, // Saturday is the first day of the week.
+            doy: 12, // The week that contains Jan 12th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    hooks.defineLocale('ug-cn', {
+        months: 'يانۋار_فېۋرال_مارت_ئاپرېل_ماي_ئىيۇن_ئىيۇل_ئاۋغۇست_سېنتەبىر_ئۆكتەبىر_نويابىر_دېكابىر'.split(
+            '_'
+        ),
+        monthsShort: 'يانۋار_فېۋرال_مارت_ئاپرېل_ماي_ئىيۇن_ئىيۇل_ئاۋغۇست_سېنتەبىر_ئۆكتەبىر_نويابىر_دېكابىر'.split(
+            '_'
+        ),
+        weekdays: 'يەكشەنبە_دۈشەنبە_سەيشەنبە_چارشەنبە_پەيشەنبە_جۈمە_شەنبە'.split(
+            '_'
+        ),
+        weekdaysShort: 'يە_دۈ_سە_چا_پە_جۈ_شە'.split('_'),
+        weekdaysMin: 'يە_دۈ_سە_چا_پە_جۈ_شە'.split('_'),
+        longDateFormat: {
+            LT: 'HH:mm',
+            LTS: 'HH:mm:ss',
+            L: 'YYYY-MM-DD',
+            LL: 'YYYY-يىلىM-ئاينىڭD-كۈنى',
+            LLL: 'YYYY-يىلىM-ئاينىڭD-كۈنى، HH:mm',
+            LLLL: 'dddd، YYYY-يىلىM-ئاينىڭD-كۈنى، HH:mm',
+        },
+        meridiemParse: /يېرىم كېچە|سەھەر|چۈشتىن بۇرۇن|چۈش|چۈشتىن كېيىن|كەچ/,
+        meridiemHour: function (hour, meridiem) {
+            if (hour === 12) {
+                hour = 0;
+            }
+            if (
+                meridiem === 'يېرىم كېچە' ||
+                meridiem === 'سەھەر' ||
+                meridiem === 'چۈشتىن بۇرۇن'
+            ) {
+                return hour;
+            } else if (meridiem === 'چۈشتىن كېيىن' || meridiem === 'كەچ') {
+                return hour + 12;
+            } else {
+                return hour >= 11 ? hour : hour + 12;
+            }
+        },
+        meridiem: function (hour, minute, isLower) {
+            var hm = hour * 100 + minute;
+            if (hm < 600) {
+                return 'يېرىم كېچە';
+            } else if (hm < 900) {
+                return 'سەھەر';
+            } else if (hm < 1130) {
+                return 'چۈشتىن بۇرۇن';
+            } else if (hm < 1230) {
+                return 'چۈش';
+            } else if (hm < 1800) {
+                return 'چۈشتىن كېيىن';
+            } else {
+                return 'كەچ';
+            }
+        },
+        calendar: {
+            sameDay: '[بۈگۈن سائەت] LT',
+            nextDay: '[ئەتە سائەت] LT',
+            nextWeek: '[كېلەركى] dddd [سائەت] LT',
+            lastDay: '[تۆنۈگۈن] LT',
+            lastWeek: '[ئالدىنقى] dddd [سائەت] LT',
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: '%s كېيىن',
+            past: '%s بۇرۇن',
+            s: 'نەچچە سېكونت',
+            ss: '%d سېكونت',
+            m: 'بىر مىنۇت',
+            mm: '%d مىنۇت',
+            h: 'بىر سائەت',
+            hh: '%d سائەت',
+            d: 'بىر كۈن',
+            dd: '%d كۈن',
+            M: 'بىر ئاي',
+            MM: '%d ئاي',
+            y: 'بىر يىل',
+            yy: '%d يىل',
+        },
+
+        dayOfMonthOrdinalParse: /\d{1,2}(-كۈنى|-ئاي|-ھەپتە)/,
+        ordinal: function (number, period) {
+            switch (period) {
+                case 'd':
+                case 'D':
+                case 'DDD':
+                    return number + '-كۈنى';
+                case 'w':
+                case 'W':
+                    return number + '-ھەپتە';
+                default:
+                    return number;
+            }
+        },
+        preparse: function (string) {
+            return string.replace(/،/g, ',');
+        },
+        postformat: function (string) {
+            return string.replace(/,/g, '،');
+        },
+        week: {
+            // GB/T 7408-1994《数据元和交换格式·信息交换·日期和时间表示法》与ISO 8601:1988等效
+            dow: 1, // Monday is the first day of the week.
+            doy: 7, // The week that contains Jan 1st is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    function plural$6(word, num) {
+        var forms = word.split('_');
+        return num % 10 === 1 && num % 100 !== 11
+            ? forms[0]
+            : num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20)
+            ? forms[1]
+            : forms[2];
+    }
+    function relativeTimeWithPlural$4(number, withoutSuffix, key) {
+        var format = {
+            ss: withoutSuffix ? 'секунда_секунди_секунд' : 'секунду_секунди_секунд',
+            mm: withoutSuffix ? 'хвилина_хвилини_хвилин' : 'хвилину_хвилини_хвилин',
+            hh: withoutSuffix ? 'година_години_годин' : 'годину_години_годин',
+            dd: 'день_дні_днів',
+            MM: 'місяць_місяці_місяців',
+            yy: 'рік_роки_років',
+        };
+        if (key === 'm') {
+            return withoutSuffix ? 'хвилина' : 'хвилину';
+        } else if (key === 'h') {
+            return withoutSuffix ? 'година' : 'годину';
+        } else {
+            return number + ' ' + plural$6(format[key], +number);
+        }
+    }
+    function weekdaysCaseReplace(m, format) {
+        var weekdays = {
+                nominative: 'неділя_понеділок_вівторок_середа_четвер_п’ятниця_субота'.split(
+                    '_'
+                ),
+                accusative: 'неділю_понеділок_вівторок_середу_четвер_п’ятницю_суботу'.split(
+                    '_'
+                ),
+                genitive: 'неділі_понеділка_вівторка_середи_четверга_п’ятниці_суботи'.split(
+                    '_'
+                ),
+            },
+            nounCase;
+
+        if (m === true) {
+            return weekdays['nominative']
+                .slice(1, 7)
+                .concat(weekdays['nominative'].slice(0, 1));
+        }
+        if (!m) {
+            return weekdays['nominative'];
+        }
+
+        nounCase = /(\[[ВвУу]\]) ?dddd/.test(format)
+            ? 'accusative'
+            : /\[?(?:минулої|наступної)? ?\] ?dddd/.test(format)
+            ? 'genitive'
+            : 'nominative';
+        return weekdays[nounCase][m.day()];
+    }
+    function processHoursFunction(str) {
+        return function () {
+            return str + 'о' + (this.hours() === 11 ? 'б' : '') + '] LT';
+        };
+    }
+
+    hooks.defineLocale('uk', {
+        months: {
+            format: 'січня_лютого_березня_квітня_травня_червня_липня_серпня_вересня_жовтня_листопада_грудня'.split(
+                '_'
+            ),
+            standalone: 'січень_лютий_березень_квітень_травень_червень_липень_серпень_вересень_жовтень_листопад_грудень'.split(
+                '_'
+            ),
+        },
+        monthsShort: 'січ_лют_бер_квіт_трав_черв_лип_серп_вер_жовт_лист_груд'.split(
+            '_'
+        ),
+        weekdays: weekdaysCaseReplace,
+        weekdaysShort: 'нд_пн_вт_ср_чт_пт_сб'.split('_'),
+        weekdaysMin: 'нд_пн_вт_ср_чт_пт_сб'.split('_'),
+        longDateFormat: {
+            LT: 'HH:mm',
+            LTS: 'HH:mm:ss',
+            L: 'DD.MM.YYYY',
+            LL: 'D MMMM YYYY р.',
+            LLL: 'D MMMM YYYY р., HH:mm',
+            LLLL: 'dddd, D MMMM YYYY р., HH:mm',
+        },
+        calendar: {
+            sameDay: processHoursFunction('[Сьогодні '),
+            nextDay: processHoursFunction('[Завтра '),
+            lastDay: processHoursFunction('[Вчора '),
+            nextWeek: processHoursFunction('[У] dddd ['),
+            lastWeek: function () {
+                switch (this.day()) {
+                    case 0:
+                    case 3:
+                    case 5:
+                    case 6:
+                        return processHoursFunction('[Минулої] dddd [').call(this);
+                    case 1:
+                    case 2:
+                    case 4:
+                        return processHoursFunction('[Минулого] dddd [').call(this);
+                }
+            },
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: 'за %s',
+            past: '%s тому',
+            s: 'декілька секунд',
+            ss: relativeTimeWithPlural$4,
+            m: relativeTimeWithPlural$4,
+            mm: relativeTimeWithPlural$4,
+            h: 'годину',
+            hh: relativeTimeWithPlural$4,
+            d: 'день',
+            dd: relativeTimeWithPlural$4,
+            M: 'місяць',
+            MM: relativeTimeWithPlural$4,
+            y: 'рік',
+            yy: relativeTimeWithPlural$4,
+        },
+        // M. E.: those two are virtually unused but a user might want to implement them for his/her website for some reason
+        meridiemParse: /ночі|ранку|дня|вечора/,
+        isPM: function (input) {
+            return /^(дня|вечора)$/.test(input);
+        },
+        meridiem: function (hour, minute, isLower) {
+            if (hour < 4) {
+                return 'ночі';
+            } else if (hour < 12) {
+                return 'ранку';
+            } else if (hour < 17) {
+                return 'дня';
+            } else {
+                return 'вечора';
+            }
+        },
+        dayOfMonthOrdinalParse: /\d{1,2}-(й|го)/,
+        ordinal: function (number, period) {
+            switch (period) {
+                case 'M':
+                case 'd':
+                case 'DDD':
+                case 'w':
+                case 'W':
+                    return number + '-й';
+                case 'D':
+                    return number + '-го';
+                default:
+                    return number;
+            }
+        },
+        week: {
+            dow: 1, // Monday is the first day of the week.
+            doy: 7, // The week that contains Jan 7th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    var months$b = [
+            'جنوری',
+            'فروری',
+            'مارچ',
+            'اپریل',
+            'مئی',
+            'جون',
+            'جولائی',
+            'اگست',
+            'ستمبر',
+            'اکتوبر',
+            'نومبر',
+            'دسمبر',
+        ],
+        days$2 = ['اتوار', 'پیر', 'منگل', 'بدھ', 'جمعرات', 'جمعہ', 'ہفتہ'];
+
+    hooks.defineLocale('ur', {
+        months: months$b,
+        monthsShort: months$b,
+        weekdays: days$2,
+        weekdaysShort: days$2,
+        weekdaysMin: days$2,
+        longDateFormat: {
+            LT: 'HH:mm',
+            LTS: 'HH:mm:ss',
+            L: 'DD/MM/YYYY',
+            LL: 'D MMMM YYYY',
+            LLL: 'D MMMM YYYY HH:mm',
+            LLLL: 'dddd، D MMMM YYYY HH:mm',
+        },
+        meridiemParse: /صبح|شام/,
+        isPM: function (input) {
+            return 'شام' === input;
+        },
+        meridiem: function (hour, minute, isLower) {
+            if (hour < 12) {
+                return 'صبح';
+            }
+            return 'شام';
+        },
+        calendar: {
+            sameDay: '[آج بوقت] LT',
+            nextDay: '[کل بوقت] LT',
+            nextWeek: 'dddd [بوقت] LT',
+            lastDay: '[گذشتہ روز بوقت] LT',
+            lastWeek: '[گذشتہ] dddd [بوقت] LT',
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: '%s بعد',
+            past: '%s قبل',
+            s: 'چند سیکنڈ',
+            ss: '%d سیکنڈ',
+            m: 'ایک منٹ',
+            mm: '%d منٹ',
+            h: 'ایک گھنٹہ',
+            hh: '%d گھنٹے',
+            d: 'ایک دن',
+            dd: '%d دن',
+            M: 'ایک ماہ',
+            MM: '%d ماہ',
+            y: 'ایک سال',
+            yy: '%d سال',
+        },
+        preparse: function (string) {
+            return string.replace(/،/g, ',');
+        },
+        postformat: function (string) {
+            return string.replace(/,/g, '،');
+        },
+        week: {
+            dow: 1, // Monday is the first day of the week.
+            doy: 4, // The week that contains Jan 4th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    hooks.defineLocale('uz-latn', {
+        months: 'Yanvar_Fevral_Mart_Aprel_May_Iyun_Iyul_Avgust_Sentabr_Oktabr_Noyabr_Dekabr'.split(
+            '_'
+        ),
+        monthsShort: 'Yan_Fev_Mar_Apr_May_Iyun_Iyul_Avg_Sen_Okt_Noy_Dek'.split('_'),
+        weekdays: 'Yakshanba_Dushanba_Seshanba_Chorshanba_Payshanba_Juma_Shanba'.split(
+            '_'
+        ),
+        weekdaysShort: 'Yak_Dush_Sesh_Chor_Pay_Jum_Shan'.split('_'),
+        weekdaysMin: 'Ya_Du_Se_Cho_Pa_Ju_Sha'.split('_'),
+        longDateFormat: {
+            LT: 'HH:mm',
+            LTS: 'HH:mm:ss',
+            L: 'DD/MM/YYYY',
+            LL: 'D MMMM YYYY',
+            LLL: 'D MMMM YYYY HH:mm',
+            LLLL: 'D MMMM YYYY, dddd HH:mm',
+        },
+        calendar: {
+            sameDay: '[Bugun soat] LT [da]',
+            nextDay: '[Ertaga] LT [da]',
+            nextWeek: 'dddd [kuni soat] LT [da]',
+            lastDay: '[Kecha soat] LT [da]',
+            lastWeek: "[O'tgan] dddd [kuni soat] LT [da]",
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: 'Yaqin %s ichida',
+            past: 'Bir necha %s oldin',
+            s: 'soniya',
+            ss: '%d soniya',
+            m: 'bir daqiqa',
+            mm: '%d daqiqa',
+            h: 'bir soat',
+            hh: '%d soat',
+            d: 'bir kun',
+            dd: '%d kun',
+            M: 'bir oy',
+            MM: '%d oy',
+            y: 'bir yil',
+            yy: '%d yil',
+        },
+        week: {
+            dow: 1, // Monday is the first day of the week.
+            doy: 7, // The week that contains Jan 7th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    hooks.defineLocale('uz', {
+        months: 'январ_феврал_март_апрел_май_июн_июл_август_сентябр_октябр_ноябр_декабр'.split(
+            '_'
+        ),
+        monthsShort: 'янв_фев_мар_апр_май_июн_июл_авг_сен_окт_ноя_дек'.split('_'),
+        weekdays: 'Якшанба_Душанба_Сешанба_Чоршанба_Пайшанба_Жума_Шанба'.split('_'),
+        weekdaysShort: 'Якш_Душ_Сеш_Чор_Пай_Жум_Шан'.split('_'),
+        weekdaysMin: 'Як_Ду_Се_Чо_Па_Жу_Ша'.split('_'),
+        longDateFormat: {
+            LT: 'HH:mm',
+            LTS: 'HH:mm:ss',
+            L: 'DD/MM/YYYY',
+            LL: 'D MMMM YYYY',
+            LLL: 'D MMMM YYYY HH:mm',
+            LLLL: 'D MMMM YYYY, dddd HH:mm',
+        },
+        calendar: {
+            sameDay: '[Бугун соат] LT [да]',
+            nextDay: '[Эртага] LT [да]',
+            nextWeek: 'dddd [куни соат] LT [да]',
+            lastDay: '[Кеча соат] LT [да]',
+            lastWeek: '[Утган] dddd [куни соат] LT [да]',
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: 'Якин %s ичида',
+            past: 'Бир неча %s олдин',
+            s: 'фурсат',
+            ss: '%d фурсат',
+            m: 'бир дакика',
+            mm: '%d дакика',
+            h: 'бир соат',
+            hh: '%d соат',
+            d: 'бир кун',
+            dd: '%d кун',
+            M: 'бир ой',
+            MM: '%d ой',
+            y: 'бир йил',
+            yy: '%d йил',
+        },
+        week: {
+            dow: 1, // Monday is the first day of the week.
+            doy: 7, // The week that contains Jan 4th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    hooks.defineLocale('vi', {
+        months: 'tháng 1_tháng 2_tháng 3_tháng 4_tháng 5_tháng 6_tháng 7_tháng 8_tháng 9_tháng 10_tháng 11_tháng 12'.split(
+            '_'
+        ),
+        monthsShort: 'Thg 01_Thg 02_Thg 03_Thg 04_Thg 05_Thg 06_Thg 07_Thg 08_Thg 09_Thg 10_Thg 11_Thg 12'.split(
+            '_'
+        ),
+        monthsParseExact: true,
+        weekdays: 'chủ nhật_thứ hai_thứ ba_thứ tư_thứ năm_thứ sáu_thứ bảy'.split(
+            '_'
+        ),
+        weekdaysShort: 'CN_T2_T3_T4_T5_T6_T7'.split('_'),
+        weekdaysMin: 'CN_T2_T3_T4_T5_T6_T7'.split('_'),
+        weekdaysParseExact: true,
+        meridiemParse: /sa|ch/i,
+        isPM: function (input) {
+            return /^ch$/i.test(input);
+        },
+        meridiem: function (hours, minutes, isLower) {
+            if (hours < 12) {
+                return isLower ? 'sa' : 'SA';
+            } else {
+                return isLower ? 'ch' : 'CH';
+            }
+        },
+        longDateFormat: {
+            LT: 'HH:mm',
+            LTS: 'HH:mm:ss',
+            L: 'DD/MM/YYYY',
+            LL: 'D MMMM [năm] YYYY',
+            LLL: 'D MMMM [năm] YYYY HH:mm',
+            LLLL: 'dddd, D MMMM [năm] YYYY HH:mm',
+            l: 'DD/M/YYYY',
+            ll: 'D MMM YYYY',
+            lll: 'D MMM YYYY HH:mm',
+            llll: 'ddd, D MMM YYYY HH:mm',
+        },
+        calendar: {
+            sameDay: '[Hôm nay lúc] LT',
+            nextDay: '[Ngày mai lúc] LT',
+            nextWeek: 'dddd [tuần tới lúc] LT',
+            lastDay: '[Hôm qua lúc] LT',
+            lastWeek: 'dddd [tuần trước lúc] LT',
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: '%s tới',
+            past: '%s trước',
+            s: 'vài giây',
+            ss: '%d giây',
+            m: 'một phút',
+            mm: '%d phút',
+            h: 'một giờ',
+            hh: '%d giờ',
+            d: 'một ngày',
+            dd: '%d ngày',
+            M: 'một tháng',
+            MM: '%d tháng',
+            y: 'một năm',
+            yy: '%d năm',
+        },
+        dayOfMonthOrdinalParse: /\d{1,2}/,
+        ordinal: function (number) {
+            return number;
+        },
+        week: {
+            dow: 1, // Monday is the first day of the week.
+            doy: 4, // The week that contains Jan 4th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    hooks.defineLocale('x-pseudo', {
+        months: 'J~áñúá~rý_F~ébrú~árý_~Márc~h_Áp~ríl_~Máý_~Júñé~_Júl~ý_Áú~gúst~_Sép~témb~ér_Ó~ctób~ér_Ñ~óvém~bér_~Décé~mbér'.split(
+            '_'
+        ),
+        monthsShort: 'J~áñ_~Féb_~Már_~Ápr_~Máý_~Júñ_~Júl_~Áúg_~Sép_~Óct_~Ñóv_~Déc'.split(
+            '_'
+        ),
+        monthsParseExact: true,
+        weekdays: 'S~úñdá~ý_Mó~ñdáý~_Túé~sdáý~_Wéd~ñésd~áý_T~húrs~dáý_~Fríd~áý_S~átúr~dáý'.split(
+            '_'
+        ),
+        weekdaysShort: 'S~úñ_~Móñ_~Túé_~Wéd_~Thú_~Frí_~Sát'.split('_'),
+        weekdaysMin: 'S~ú_Mó~_Tú_~Wé_T~h_Fr~_Sá'.split('_'),
+        weekdaysParseExact: true,
+        longDateFormat: {
+            LT: 'HH:mm',
+            L: 'DD/MM/YYYY',
+            LL: 'D MMMM YYYY',
+            LLL: 'D MMMM YYYY HH:mm',
+            LLLL: 'dddd, D MMMM YYYY HH:mm',
+        },
+        calendar: {
+            sameDay: '[T~ódá~ý át] LT',
+            nextDay: '[T~ómó~rró~w át] LT',
+            nextWeek: 'dddd [át] LT',
+            lastDay: '[Ý~ést~érdá~ý át] LT',
+            lastWeek: '[L~ást] dddd [át] LT',
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: 'í~ñ %s',
+            past: '%s á~gó',
+            s: 'á ~féw ~sécó~ñds',
+            ss: '%d s~écóñ~ds',
+            m: 'á ~míñ~úté',
+            mm: '%d m~íñú~tés',
+            h: 'á~ñ hó~úr',
+            hh: '%d h~óúrs',
+            d: 'á ~dáý',
+            dd: '%d d~áýs',
+            M: 'á ~móñ~th',
+            MM: '%d m~óñt~hs',
+            y: 'á ~ýéár',
+            yy: '%d ý~éárs',
+        },
+        dayOfMonthOrdinalParse: /\d{1,2}(th|st|nd|rd)/,
+        ordinal: function (number) {
+            var b = number % 10,
+                output =
+                    ~~((number % 100) / 10) === 1
+                        ? 'th'
+                        : b === 1
+                        ? 'st'
+                        : b === 2
+                        ? 'nd'
+                        : b === 3
+                        ? 'rd'
+                        : 'th';
+            return number + output;
+        },
+        week: {
+            dow: 1, // Monday is the first day of the week.
+            doy: 4, // The week that contains Jan 4th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    hooks.defineLocale('yo', {
+        months: 'Sẹ́rẹ́_Èrèlè_Ẹrẹ̀nà_Ìgbé_Èbibi_Òkùdu_Agẹmo_Ògún_Owewe_Ọ̀wàrà_Bélú_Ọ̀pẹ̀̀'.split(
+            '_'
+        ),
+        monthsShort: 'Sẹ́r_Èrl_Ẹrn_Ìgb_Èbi_Òkù_Agẹ_Ògú_Owe_Ọ̀wà_Bél_Ọ̀pẹ̀̀'.split('_'),
+        weekdays: 'Àìkú_Ajé_Ìsẹ́gun_Ọjọ́rú_Ọjọ́bọ_Ẹtì_Àbámẹ́ta'.split('_'),
+        weekdaysShort: 'Àìk_Ajé_Ìsẹ́_Ọjr_Ọjb_Ẹtì_Àbá'.split('_'),
+        weekdaysMin: 'Àì_Aj_Ìs_Ọr_Ọb_Ẹt_Àb'.split('_'),
+        longDateFormat: {
+            LT: 'h:mm A',
+            LTS: 'h:mm:ss A',
+            L: 'DD/MM/YYYY',
+            LL: 'D MMMM YYYY',
+            LLL: 'D MMMM YYYY h:mm A',
+            LLLL: 'dddd, D MMMM YYYY h:mm A',
+        },
+        calendar: {
+            sameDay: '[Ònì ni] LT',
+            nextDay: '[Ọ̀la ni] LT',
+            nextWeek: "dddd [Ọsẹ̀ tón'bọ] [ni] LT",
+            lastDay: '[Àna ni] LT',
+            lastWeek: 'dddd [Ọsẹ̀ tólọ́] [ni] LT',
+            sameElse: 'L',
+        },
+        relativeTime: {
+            future: 'ní %s',
+            past: '%s kọjá',
+            s: 'ìsẹjú aayá die',
+            ss: 'aayá %d',
+            m: 'ìsẹjú kan',
+            mm: 'ìsẹjú %d',
+            h: 'wákati kan',
+            hh: 'wákati %d',
+            d: 'ọjọ́ kan',
+            dd: 'ọjọ́ %d',
+            M: 'osù kan',
+            MM: 'osù %d',
+            y: 'ọdún kan',
+            yy: 'ọdún %d',
+        },
+        dayOfMonthOrdinalParse: /ọjọ́\s\d{1,2}/,
+        ordinal: 'ọjọ́ %d',
+        week: {
+            dow: 1, // Monday is the first day of the week.
+            doy: 4, // The week that contains Jan 4th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    hooks.defineLocale('zh-cn', {
+        months: '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split(
+            '_'
+        ),
+        monthsShort: '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split(
+            '_'
+        ),
+        weekdays: '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'),
+        weekdaysShort: '周日_周一_周二_周三_周四_周五_周六'.split('_'),
+        weekdaysMin: '日_一_二_三_四_五_六'.split('_'),
+        longDateFormat: {
+            LT: 'HH:mm',
+            LTS: 'HH:mm:ss',
+            L: 'YYYY/MM/DD',
+            LL: 'YYYY年M月D日',
+            LLL: 'YYYY年M月D日Ah点mm分',
+            LLLL: 'YYYY年M月D日ddddAh点mm分',
+            l: 'YYYY/M/D',
+            ll: 'YYYY年M月D日',
+            lll: 'YYYY年M月D日 HH:mm',
+            llll: 'YYYY年M月D日dddd HH:mm',
+        },
+        meridiemParse: /凌晨|早上|上午|中午|下午|晚上/,
+        meridiemHour: function (hour, meridiem) {
+            if (hour === 12) {
+                hour = 0;
+            }
+            if (meridiem === '凌晨' || meridiem === '早上' || meridiem === '上午') {
+                return hour;
+            } else if (meridiem === '下午' || meridiem === '晚上') {
+                return hour + 12;
+            } else {
+                // '中午'
+                return hour >= 11 ? hour : hour + 12;
+            }
+        },
+        meridiem: function (hour, minute, isLower) {
+            var hm = hour * 100 + minute;
+            if (hm < 600) {
+                return '凌晨';
+            } else if (hm < 900) {
+                return '早上';
+            } else if (hm < 1130) {
+                return '上午';
+            } else if (hm < 1230) {
+                return '中午';
+            } else if (hm < 1800) {
+                return '下午';
+            } else {
+                return '晚上';
+            }
+        },
+        calendar: {
+            sameDay: '[今天]LT',
+            nextDay: '[明天]LT',
+            nextWeek: function (now) {
+                if (now.week() !== this.week()) {
+                    return '[下]dddLT';
+                } else {
+                    return '[本]dddLT';
+                }
+            },
+            lastDay: '[昨天]LT',
+            lastWeek: function (now) {
+                if (this.week() !== now.week()) {
+                    return '[上]dddLT';
+                } else {
+                    return '[本]dddLT';
+                }
+            },
+            sameElse: 'L',
+        },
+        dayOfMonthOrdinalParse: /\d{1,2}(日|月|周)/,
+        ordinal: function (number, period) {
+            switch (period) {
+                case 'd':
+                case 'D':
+                case 'DDD':
+                    return number + '日';
+                case 'M':
+                    return number + '月';
+                case 'w':
+                case 'W':
+                    return number + '周';
+                default:
+                    return number;
+            }
+        },
+        relativeTime: {
+            future: '%s后',
+            past: '%s前',
+            s: '几秒',
+            ss: '%d 秒',
+            m: '1 分钟',
+            mm: '%d 分钟',
+            h: '1 小时',
+            hh: '%d 小时',
+            d: '1 天',
+            dd: '%d 天',
+            M: '1 个月',
+            MM: '%d 个月',
+            y: '1 年',
+            yy: '%d 年',
+        },
+        week: {
+            // GB/T 7408-1994《数据元和交换格式·信息交换·日期和时间表示法》与ISO 8601:1988等效
+            dow: 1, // Monday is the first day of the week.
+            doy: 4, // The week that contains Jan 4th is the first week of the year.
+        },
+    });
+
+    //! moment.js locale configuration
+
+    hooks.defineLocale('zh-hk', {
+        months: '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split(
+            '_'
+        ),
+        monthsShort: '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split(
+            '_'
+        ),
+        weekdays: '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'),
+        weekdaysShort: '週日_週一_週二_週三_週四_週五_週六'.split('_'),
+        weekdaysMin: '日_一_二_三_四_五_六'.split('_'),
+        longDateFormat: {
+            LT: 'HH:mm',
+            LTS: 'HH:mm:ss',
+            L: 'YYYY/MM/DD',
+            LL: 'YYYY年M月D日',
+            LLL: 'YYYY年M月D日 HH:mm',
+            LLLL: 'YYYY年M月D日dddd HH:mm',
+            l: 'YYYY/M/D',
+            ll: 'YYYY年M月D日',
+            lll: 'YYYY年M月D日 HH:mm',
+            llll: 'YYYY年M月D日dddd HH:mm',
+        },
+        meridiemParse: /凌晨|早上|上午|中午|下午|晚上/,
+        meridiemHour: function (hour, meridiem) {
+            if (hour === 12) {
+                hour = 0;
+            }
+            if (meridiem === '凌晨' || meridiem === '早上' || meridiem === '上午') {
+                return hour;
+            } else if (meridiem === '中午') {
+                return hour >= 11 ? hour : hour + 12;
+            } else if (meridiem === '下午' || meridiem === '晚上') {
+                return hour + 12;
+            }
+        },
+        meridiem: function (hour, minute, isLower) {
+            var hm = hour * 100 + minute;
+            if (hm < 600) {
+                return '凌晨';
+            } else if (hm < 900) {
+                return '早上';
+            } else if (hm < 1200) {
+                return '上午';
+            } else if (hm === 1200) {
+                return '中午';
+            } else if (hm < 1800) {
+                return '下午';
+            } else {
+                return '晚上';
+            }
+        },
+        calendar: {
+            sameDay: '[今天]LT',
+            nextDay: '[明天]LT',
+            nextWeek: '[下]ddddLT',
+            lastDay: '[昨天]LT',
+            lastWeek: '[上]ddddLT',
+            sameElse: 'L',
+        },
+        dayOfMonthOrdinalParse: /\d{1,2}(日|月|週)/,
+        ordinal: function (number, period) {
+            switch (period) {
+                case 'd':
+                case 'D':
+                case 'DDD':
+                    return number + '日';
+                case 'M':
+                    return number + '月';
+                case 'w':
+                case 'W':
+                    return number + '週';
+                default:
+                    return number;
+            }
+        },
+        relativeTime: {
+            future: '%s後',
+            past: '%s前',
+            s: '幾秒',
+            ss: '%d 秒',
+            m: '1 分鐘',
+            mm: '%d 分鐘',
+            h: '1 小時',
+            hh: '%d 小時',
+            d: '1 天',
+            dd: '%d 天',
+            M: '1 個月',
+            MM: '%d 個月',
+            y: '1 年',
+            yy: '%d 年',
+        },
+    });
+
+    //! moment.js locale configuration
+
+    hooks.defineLocale('zh-mo', {
+        months: '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split(
+            '_'
+        ),
+        monthsShort: '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split(
+            '_'
+        ),
+        weekdays: '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'),
+        weekdaysShort: '週日_週一_週二_週三_週四_週五_週六'.split('_'),
+        weekdaysMin: '日_一_二_三_四_五_六'.split('_'),
+        longDateFormat: {
+            LT: 'HH:mm',
+            LTS: 'HH:mm:ss',
+            L: 'DD/MM/YYYY',
+            LL: 'YYYY年M月D日',
+            LLL: 'YYYY年M月D日 HH:mm',
+            LLLL: 'YYYY年M月D日dddd HH:mm',
+            l: 'D/M/YYYY',
+            ll: 'YYYY年M月D日',
+            lll: 'YYYY年M月D日 HH:mm',
+            llll: 'YYYY年M月D日dddd HH:mm',
+        },
+        meridiemParse: /凌晨|早上|上午|中午|下午|晚上/,
+        meridiemHour: function (hour, meridiem) {
+            if (hour === 12) {
+                hour = 0;
+            }
+            if (meridiem === '凌晨' || meridiem === '早上' || meridiem === '上午') {
+                return hour;
+            } else if (meridiem === '中午') {
+                return hour >= 11 ? hour : hour + 12;
+            } else if (meridiem === '下午' || meridiem === '晚上') {
+                return hour + 12;
+            }
+        },
+        meridiem: function (hour, minute, isLower) {
+            var hm = hour * 100 + minute;
+            if (hm < 600) {
+                return '凌晨';
+            } else if (hm < 900) {
+                return '早上';
+            } else if (hm < 1130) {
+                return '上午';
+            } else if (hm < 1230) {
+                return '中午';
+            } else if (hm < 1800) {
+                return '下午';
+            } else {
+                return '晚上';
+            }
+        },
+        calendar: {
+            sameDay: '[今天] LT',
+            nextDay: '[明天] LT',
+            nextWeek: '[下]dddd LT',
+            lastDay: '[昨天] LT',
+            lastWeek: '[上]dddd LT',
+            sameElse: 'L',
+        },
+        dayOfMonthOrdinalParse: /\d{1,2}(日|月|週)/,
+        ordinal: function (number, period) {
+            switch (period) {
+                case 'd':
+                case 'D':
+                case 'DDD':
+                    return number + '日';
+                case 'M':
+                    return number + '月';
+                case 'w':
+                case 'W':
+                    return number + '週';
+                default:
+                    return number;
+            }
+        },
+        relativeTime: {
+            future: '%s內',
+            past: '%s前',
+            s: '幾秒',
+            ss: '%d 秒',
+            m: '1 分鐘',
+            mm: '%d 分鐘',
+            h: '1 小時',
+            hh: '%d 小時',
+            d: '1 天',
+            dd: '%d 天',
+            M: '1 個月',
+            MM: '%d 個月',
+            y: '1 年',
+            yy: '%d 年',
+        },
+    });
+
+    //! moment.js locale configuration
+
+    hooks.defineLocale('zh-tw', {
+        months: '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split(
+            '_'
+        ),
+        monthsShort: '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split(
+            '_'
+        ),
+        weekdays: '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'),
+        weekdaysShort: '週日_週一_週二_週三_週四_週五_週六'.split('_'),
+        weekdaysMin: '日_一_二_三_四_五_六'.split('_'),
+        longDateFormat: {
+            LT: 'HH:mm',
+            LTS: 'HH:mm:ss',
+            L: 'YYYY/MM/DD',
+            LL: 'YYYY年M月D日',
+            LLL: 'YYYY年M月D日 HH:mm',
+            LLLL: 'YYYY年M月D日dddd HH:mm',
+            l: 'YYYY/M/D',
+            ll: 'YYYY年M月D日',
+            lll: 'YYYY年M月D日 HH:mm',
+            llll: 'YYYY年M月D日dddd HH:mm',
+        },
+        meridiemParse: /凌晨|早上|上午|中午|下午|晚上/,
+        meridiemHour: function (hour, meridiem) {
+            if (hour === 12) {
+                hour = 0;
+            }
+            if (meridiem === '凌晨' || meridiem === '早上' || meridiem === '上午') {
+                return hour;
+            } else if (meridiem === '中午') {
+                return hour >= 11 ? hour : hour + 12;
+            } else if (meridiem === '下午' || meridiem === '晚上') {
+                return hour + 12;
+            }
+        },
+        meridiem: function (hour, minute, isLower) {
+            var hm = hour * 100 + minute;
+            if (hm < 600) {
+                return '凌晨';
+            } else if (hm < 900) {
+                return '早上';
+            } else if (hm < 1130) {
+                return '上午';
+            } else if (hm < 1230) {
+                return '中午';
+            } else if (hm < 1800) {
+                return '下午';
+            } else {
+                return '晚上';
+            }
+        },
+        calendar: {
+            sameDay: '[今天] LT',
+            nextDay: '[明天] LT',
+            nextWeek: '[下]dddd LT',
+            lastDay: '[昨天] LT',
+            lastWeek: '[上]dddd LT',
+            sameElse: 'L',
+        },
+        dayOfMonthOrdinalParse: /\d{1,2}(日|月|週)/,
+        ordinal: function (number, period) {
+            switch (period) {
+                case 'd':
+                case 'D':
+                case 'DDD':
+                    return number + '日';
+                case 'M':
+                    return number + '月';
+                case 'w':
+                case 'W':
+                    return number + '週';
+                default:
+                    return number;
+            }
+        },
+        relativeTime: {
+            future: '%s後',
+            past: '%s前',
+            s: '幾秒',
+            ss: '%d 秒',
+            m: '1 分鐘',
+            mm: '%d 分鐘',
+            h: '1 小時',
+            hh: '%d 小時',
+            d: '1 天',
+            dd: '%d 天',
+            M: '1 個月',
+            MM: '%d 個月',
+            y: '1 年',
+            yy: '%d 年',
+        },
+    });
+
+    hooks.locale('en');
+
+    return hooks;
+
+})));
diff --git a/admin/js/vendors/moment/moment-with-locales.min.js b/admin/js/vendors/moment/moment-with-locales.min.js
new file mode 100644 (file)
index 0000000..f1f8aba
--- /dev/null
@@ -0,0 +1,2 @@
+!function(e,a){"object"==typeof exports&&"undefined"!=typeof module?module.exports=a():"function"==typeof define&&define.amd?define(a):e.moment=a()}(this,function(){"use strict";var e,n;function M(){return e.apply(null,arguments)}function _(e){return e instanceof Array||"[object Array]"===Object.prototype.toString.call(e)}function i(e){return null!=e&&"[object Object]"===Object.prototype.toString.call(e)}function h(e,a){return Object.prototype.hasOwnProperty.call(e,a)}function o(e){if(Object.getOwnPropertyNames)return 0===Object.getOwnPropertyNames(e).length;for(var a in e)if(h(e,a))return;return 1}function r(e){return void 0===e}function m(e){return"number"==typeof e||"[object Number]"===Object.prototype.toString.call(e)}function d(e){return e instanceof Date||"[object Date]"===Object.prototype.toString.call(e)}function u(e,a){for(var t=[],s=0;s<e.length;++s)t.push(a(e[s],s));return t}function l(e,a){for(var t in a)h(a,t)&&(e[t]=a[t]);return h(a,"toString")&&(e.toString=a.toString),h(a,"valueOf")&&(e.valueOf=a.valueOf),e}function c(e,a,t,s){return Ha(e,a,t,s,!0).utc()}function L(e){return null==e._pf&&(e._pf={empty:!1,unusedTokens:[],unusedInput:[],overflow:-2,charsLeftOver:0,nullInput:!1,invalidEra:null,invalidMonth:null,invalidFormat:!1,userInvalidated:!1,iso:!1,parsedDateParts:[],era:null,meridiem:null,rfc2822:!1,weekdayMismatch:!1}),e._pf}function Y(e){if(null==e._isValid){var a=L(e),t=n.call(a.parsedDateParts,function(e){return null!=e}),s=!isNaN(e._d.getTime())&&a.overflow<0&&!a.empty&&!a.invalidEra&&!a.invalidMonth&&!a.invalidWeekday&&!a.weekdayMismatch&&!a.nullInput&&!a.invalidFormat&&!a.userInvalidated&&(!a.meridiem||a.meridiem&&t);if(e._strict&&(s=s&&0===a.charsLeftOver&&0===a.unusedTokens.length&&void 0===a.bigHour),null!=Object.isFrozen&&Object.isFrozen(e))return s;e._isValid=s}return e._isValid}function y(e){var a=c(NaN);return null!=e?l(L(a),e):L(a).userInvalidated=!0,a}n=Array.prototype.some?Array.prototype.some:function(e){for(var a=Object(this),t=a.length>>>0,s=0;s<t;s++)if(s in a&&e.call(this,a[s],s,a))return!0;return!1};var f=M.momentProperties=[],a=!1;function p(e,a){var t,s,n;if(r(a._isAMomentObject)||(e._isAMomentObject=a._isAMomentObject),r(a._i)||(e._i=a._i),r(a._f)||(e._f=a._f),r(a._l)||(e._l=a._l),r(a._strict)||(e._strict=a._strict),r(a._tzm)||(e._tzm=a._tzm),r(a._isUTC)||(e._isUTC=a._isUTC),r(a._offset)||(e._offset=a._offset),r(a._pf)||(e._pf=L(a)),r(a._locale)||(e._locale=a._locale),0<f.length)for(t=0;t<f.length;t++)r(n=a[s=f[t]])||(e[s]=n);return e}function k(e){p(this,e),this._d=new Date(null!=e._d?e._d.getTime():NaN),this.isValid()||(this._d=new Date(NaN)),!1===a&&(a=!0,M.updateOffset(this),a=!1)}function D(e){return e instanceof k||null!=e&&null!=e._isAMomentObject}function T(e){!1===M.suppressDeprecationWarnings&&"undefined"!=typeof console&&console.warn&&console.warn("Deprecation warning: "+e)}function t(n,r){var d=!0;return l(function(){if(null!=M.deprecationHandler&&M.deprecationHandler(null,n),d){for(var e,a,t=[],s=0;s<arguments.length;s++){if(e="","object"==typeof arguments[s]){for(a in e+="\n["+s+"] ",arguments[0])h(arguments[0],a)&&(e+=a+": "+arguments[0][a]+", ");e=e.slice(0,-2)}else e=arguments[s];t.push(e)}T(n+"\nArguments: "+Array.prototype.slice.call(t).join("")+"\n"+(new Error).stack),d=!1}return r.apply(this,arguments)},r)}var s,g={};function w(e,a){null!=M.deprecationHandler&&M.deprecationHandler(e,a),g[e]||(T(a),g[e]=!0)}function v(e){return"undefined"!=typeof Function&&e instanceof Function||"[object Function]"===Object.prototype.toString.call(e)}function b(e,a){var t,s=l({},e);for(t in a)h(a,t)&&(i(e[t])&&i(a[t])?(s[t]={},l(s[t],e[t]),l(s[t],a[t])):null!=a[t]?s[t]=a[t]:delete s[t]);for(t in e)h(e,t)&&!h(a,t)&&i(e[t])&&(s[t]=l({},s[t]));return s}function H(e){null!=e&&this.set(e)}M.suppressDeprecationWarnings=!1,M.deprecationHandler=null,s=Object.keys?Object.keys:function(e){var a,t=[];for(a in e)h(e,a)&&t.push(a);return t};function S(e,a,t){var s=""+Math.abs(e),n=a-s.length;return(0<=e?t?"+":"":"-")+Math.pow(10,Math.max(0,n)).toString().substr(1)+s}var j=/(\[[^\[]*\])|(\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|N{1,5}|YYYYYY|YYYYY|YYYY|YY|y{2,4}|yo?|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,x=/(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g,O={},P={};function W(e,a,t,s){var n="string"==typeof s?function(){return this[s]()}:s;e&&(P[e]=n),a&&(P[a[0]]=function(){return S(n.apply(this,arguments),a[1],a[2])}),t&&(P[t]=function(){return this.localeData().ordinal(n.apply(this,arguments),e)})}function A(e,a){return e.isValid()?(a=E(a,e.localeData()),O[a]=O[a]||function(s){for(var e,n=s.match(j),a=0,r=n.length;a<r;a++)P[n[a]]?n[a]=P[n[a]]:n[a]=(e=n[a]).match(/\[[\s\S]/)?e.replace(/^\[|\]$/g,""):e.replace(/\\/g,"");return function(e){for(var a="",t=0;t<r;t++)a+=v(n[t])?n[t].call(e,s):n[t];return a}}(a),O[a](e)):e.localeData().invalidDate()}function E(e,a){var t=5;function s(e){return a.longDateFormat(e)||e}for(x.lastIndex=0;0<=t&&x.test(e);)e=e.replace(x,s),x.lastIndex=0,--t;return e}var F={};function z(e,a){var t=e.toLowerCase();F[t]=F[t+"s"]=F[a]=e}function N(e){return"string"==typeof e?F[e]||F[e.toLowerCase()]:void 0}function J(e){var a,t,s={};for(t in e)h(e,t)&&(a=N(t))&&(s[a]=e[t]);return s}var R={};function C(e,a){R[e]=a}function I(e){return e%4==0&&e%100!=0||e%400==0}function U(e){return e<0?Math.ceil(e)||0:Math.floor(e)}function G(e){var a=+e,t=0;return 0!=a&&isFinite(a)&&(t=U(a)),t}function V(a,t){return function(e){return null!=e?(K(this,a,e),M.updateOffset(this,t),this):B(this,a)}}function B(e,a){return e.isValid()?e._d["get"+(e._isUTC?"UTC":"")+a]():NaN}function K(e,a,t){e.isValid()&&!isNaN(t)&&("FullYear"===a&&I(e.year())&&1===e.month()&&29===e.date()?(t=G(t),e._d["set"+(e._isUTC?"UTC":"")+a](t,e.month(),He(t,e.month()))):e._d["set"+(e._isUTC?"UTC":"")+a](t))}var q,Z=/\d/,$=/\d\d/,Q=/\d{3}/,X=/\d{4}/,ee=/[+-]?\d{6}/,ae=/\d\d?/,te=/\d\d\d\d?/,se=/\d\d\d\d\d\d?/,ne=/\d{1,3}/,re=/\d{1,4}/,de=/[+-]?\d{1,6}/,_e=/\d+/,ie=/[+-]?\d+/,oe=/Z|[+-]\d\d:?\d\d/gi,me=/Z|[+-]\d\d(?::?\d\d)?/gi,ue=/[0-9]{0,256}['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFF07\uFF10-\uFFEF]{1,256}|[\u0600-\u06FF\/]{1,256}(\s*?[\u0600-\u06FF]{1,256}){1,2}/i;function le(e,t,s){q[e]=v(t)?t:function(e,a){return e&&s?s:t}}function Me(e,a){return h(q,e)?q[e](a._strict,a._locale):new RegExp(he(e.replace("\\","").replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g,function(e,a,t,s,n){return a||t||s||n})))}function he(e){return e.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")}q={};var ce={};function Le(e,t){var a,s=t;for("string"==typeof e&&(e=[e]),m(t)&&(s=function(e,a){a[t]=G(e)}),a=0;a<e.length;a++)ce[e[a]]=s}function Ye(e,n){Le(e,function(e,a,t,s){t._w=t._w||{},n(e,t._w,t,s)})}var ye,fe=0,pe=1,ke=2,De=3,Te=4,ge=5,we=6,ve=7,be=8;function He(e,a){if(isNaN(e)||isNaN(a))return NaN;var t,s=(a%(t=12)+t)%t;return e+=(a-s)/12,1==s?I(e)?29:28:31-s%7%2}ye=Array.prototype.indexOf?Array.prototype.indexOf:function(e){for(var a=0;a<this.length;++a)if(this[a]===e)return a;return-1},W("M",["MM",2],"Mo",function(){return this.month()+1}),W("MMM",0,0,function(e){return this.localeData().monthsShort(this,e)}),W("MMMM",0,0,function(e){return this.localeData().months(this,e)}),z("month","M"),C("month",8),le("M",ae),le("MM",ae,$),le("MMM",function(e,a){return a.monthsShortRegex(e)}),le("MMMM",function(e,a){return a.monthsRegex(e)}),Le(["M","MM"],function(e,a){a[pe]=G(e)-1}),Le(["MMM","MMMM"],function(e,a,t,s){var n=t._locale.monthsParse(e,s,t._strict);null!=n?a[pe]=n:L(t).invalidMonth=e});var Se="January_February_March_April_May_June_July_August_September_October_November_December".split("_"),je="Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),xe=/D[oD]?(\[[^\[\]]*\]|\s)+MMMM?/,Oe=ue,Pe=ue;function We(e,a){var t;if(!e.isValid())return e;if("string"==typeof a)if(/^\d+$/.test(a))a=G(a);else if(!m(a=e.localeData().monthsParse(a)))return e;return t=Math.min(e.date(),He(e.year(),a)),e._d["set"+(e._isUTC?"UTC":"")+"Month"](a,t),e}function Ae(e){return null!=e?(We(this,e),M.updateOffset(this,!0),this):B(this,"Month")}function Ee(){function e(e,a){return a.length-e.length}for(var a,t=[],s=[],n=[],r=0;r<12;r++)a=c([2e3,r]),t.push(this.monthsShort(a,"")),s.push(this.months(a,"")),n.push(this.months(a,"")),n.push(this.monthsShort(a,""));for(t.sort(e),s.sort(e),n.sort(e),r=0;r<12;r++)t[r]=he(t[r]),s[r]=he(s[r]);for(r=0;r<24;r++)n[r]=he(n[r]);this._monthsRegex=new RegExp("^("+n.join("|")+")","i"),this._monthsShortRegex=this._monthsRegex,this._monthsStrictRegex=new RegExp("^("+s.join("|")+")","i"),this._monthsShortStrictRegex=new RegExp("^("+t.join("|")+")","i")}function Fe(e){return I(e)?366:365}W("Y",0,0,function(){var e=this.year();return e<=9999?S(e,4):"+"+e}),W(0,["YY",2],0,function(){return this.year()%100}),W(0,["YYYY",4],0,"year"),W(0,["YYYYY",5],0,"year"),W(0,["YYYYYY",6,!0],0,"year"),z("year","y"),C("year",1),le("Y",ie),le("YY",ae,$),le("YYYY",re,X),le("YYYYY",de,ee),le("YYYYYY",de,ee),Le(["YYYYY","YYYYYY"],fe),Le("YYYY",function(e,a){a[fe]=2===e.length?M.parseTwoDigitYear(e):G(e)}),Le("YY",function(e,a){a[fe]=M.parseTwoDigitYear(e)}),Le("Y",function(e,a){a[fe]=parseInt(e,10)}),M.parseTwoDigitYear=function(e){return G(e)+(68<G(e)?1900:2e3)};var ze=V("FullYear",!0);function Ne(e){var a,t;return e<100&&0<=e?((t=Array.prototype.slice.call(arguments))[0]=e+400,a=new Date(Date.UTC.apply(null,t)),isFinite(a.getUTCFullYear())&&a.setUTCFullYear(e)):a=new Date(Date.UTC.apply(null,arguments)),a}function Je(e,a,t){var s=7+a-t;return s-(7+Ne(e,0,s).getUTCDay()-a)%7-1}function Re(e,a,t,s,n){var r,d=1+7*(a-1)+(7+t-s)%7+Je(e,s,n),_=d<=0?Fe(r=e-1)+d:d>Fe(e)?(r=e+1,d-Fe(e)):(r=e,d);return{year:r,dayOfYear:_}}function Ce(e,a,t){var s,n,r=Je(e.year(),a,t),d=Math.floor((e.dayOfYear()-r-1)/7)+1;return d<1?s=d+Ie(n=e.year()-1,a,t):d>Ie(e.year(),a,t)?(s=d-Ie(e.year(),a,t),n=e.year()+1):(n=e.year(),s=d),{week:s,year:n}}function Ie(e,a,t){var s=Je(e,a,t),n=Je(e+1,a,t);return(Fe(e)-s+n)/7}W("w",["ww",2],"wo","week"),W("W",["WW",2],"Wo","isoWeek"),z("week","w"),z("isoWeek","W"),C("week",5),C("isoWeek",5),le("w",ae),le("ww",ae,$),le("W",ae),le("WW",ae,$),Ye(["w","ww","W","WW"],function(e,a,t,s){a[s.substr(0,1)]=G(e)});function Ue(e,a){return e.slice(a,7).concat(e.slice(0,a))}W("d",0,"do","day"),W("dd",0,0,function(e){return this.localeData().weekdaysMin(this,e)}),W("ddd",0,0,function(e){return this.localeData().weekdaysShort(this,e)}),W("dddd",0,0,function(e){return this.localeData().weekdays(this,e)}),W("e",0,0,"weekday"),W("E",0,0,"isoWeekday"),z("day","d"),z("weekday","e"),z("isoWeekday","E"),C("day",11),C("weekday",11),C("isoWeekday",11),le("d",ae),le("e",ae),le("E",ae),le("dd",function(e,a){return a.weekdaysMinRegex(e)}),le("ddd",function(e,a){return a.weekdaysShortRegex(e)}),le("dddd",function(e,a){return a.weekdaysRegex(e)}),Ye(["dd","ddd","dddd"],function(e,a,t,s){var n=t._locale.weekdaysParse(e,s,t._strict);null!=n?a.d=n:L(t).invalidWeekday=e}),Ye(["d","e","E"],function(e,a,t,s){a[s]=G(e)});var Ge="Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),Ve="Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),Be="Su_Mo_Tu_We_Th_Fr_Sa".split("_"),Ke=ue,qe=ue,Ze=ue;function $e(){function e(e,a){return a.length-e.length}for(var a,t,s,n,r=[],d=[],_=[],i=[],o=0;o<7;o++)a=c([2e3,1]).day(o),t=he(this.weekdaysMin(a,"")),s=he(this.weekdaysShort(a,"")),n=he(this.weekdays(a,"")),r.push(t),d.push(s),_.push(n),i.push(t),i.push(s),i.push(n);r.sort(e),d.sort(e),_.sort(e),i.sort(e),this._weekdaysRegex=new RegExp("^("+i.join("|")+")","i"),this._weekdaysShortRegex=this._weekdaysRegex,this._weekdaysMinRegex=this._weekdaysRegex,this._weekdaysStrictRegex=new RegExp("^("+_.join("|")+")","i"),this._weekdaysShortStrictRegex=new RegExp("^("+d.join("|")+")","i"),this._weekdaysMinStrictRegex=new RegExp("^("+r.join("|")+")","i")}function Qe(){return this.hours()%12||12}function Xe(e,a){W(e,0,0,function(){return this.localeData().meridiem(this.hours(),this.minutes(),a)})}function ea(e,a){return a._meridiemParse}W("H",["HH",2],0,"hour"),W("h",["hh",2],0,Qe),W("k",["kk",2],0,function(){return this.hours()||24}),W("hmm",0,0,function(){return""+Qe.apply(this)+S(this.minutes(),2)}),W("hmmss",0,0,function(){return""+Qe.apply(this)+S(this.minutes(),2)+S(this.seconds(),2)}),W("Hmm",0,0,function(){return""+this.hours()+S(this.minutes(),2)}),W("Hmmss",0,0,function(){return""+this.hours()+S(this.minutes(),2)+S(this.seconds(),2)}),Xe("a",!0),Xe("A",!1),z("hour","h"),C("hour",13),le("a",ea),le("A",ea),le("H",ae),le("h",ae),le("k",ae),le("HH",ae,$),le("hh",ae,$),le("kk",ae,$),le("hmm",te),le("hmmss",se),le("Hmm",te),le("Hmmss",se),Le(["H","HH"],De),Le(["k","kk"],function(e,a,t){var s=G(e);a[De]=24===s?0:s}),Le(["a","A"],function(e,a,t){t._isPm=t._locale.isPM(e),t._meridiem=e}),Le(["h","hh"],function(e,a,t){a[De]=G(e),L(t).bigHour=!0}),Le("hmm",function(e,a,t){var s=e.length-2;a[De]=G(e.substr(0,s)),a[Te]=G(e.substr(s)),L(t).bigHour=!0}),Le("hmmss",function(e,a,t){var s=e.length-4,n=e.length-2;a[De]=G(e.substr(0,s)),a[Te]=G(e.substr(s,2)),a[ge]=G(e.substr(n)),L(t).bigHour=!0}),Le("Hmm",function(e,a,t){var s=e.length-2;a[De]=G(e.substr(0,s)),a[Te]=G(e.substr(s))}),Le("Hmmss",function(e,a,t){var s=e.length-4,n=e.length-2;a[De]=G(e.substr(0,s)),a[Te]=G(e.substr(s,2)),a[ge]=G(e.substr(n))});var aa=V("Hours",!0);var ta,sa={calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},longDateFormat:{LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"},invalidDate:"Invalid date",ordinal:"%d",dayOfMonthOrdinalParse:/\d{1,2}/,relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",w:"a week",ww:"%d weeks",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},months:Se,monthsShort:je,week:{dow:0,doy:6},weekdays:Ge,weekdaysMin:Be,weekdaysShort:Ve,meridiemParse:/[ap]\.?m?\.?/i},na={},ra={};function da(e){return e?e.toLowerCase().replace("_","-"):e}function _a(e){for(var a,t,s,n,r=0;r<e.length;){for(a=(n=da(e[r]).split("-")).length,t=(t=da(e[r+1]))?t.split("-"):null;0<a;){if(s=ia(n.slice(0,a).join("-")))return s;if(t&&t.length>=a&&function(e,a){for(var t=Math.min(e.length,a.length),s=0;s<t;s+=1)if(e[s]!==a[s])return s;return t}(n,t)>=a-1)break;a--}r++}return ta}function ia(a){var e;if(void 0===na[a]&&"undefined"!=typeof module&&module&&module.exports)try{e=ta._abbr,require("./locale/"+a),oa(e)}catch(e){na[a]=null}return na[a]}function oa(e,a){var t;return e&&((t=r(a)?ua(e):ma(e,a))?ta=t:"undefined"!=typeof console&&console.warn&&console.warn("Locale "+e+" not found. Did you forget to load it?")),ta._abbr}function ma(e,a){if(null===a)return delete na[e],null;var t,s=sa;if(a.abbr=e,null!=na[e])w("defineLocaleOverride","use moment.updateLocale(localeName, config) to change an existing locale. moment.defineLocale(localeName, config) should only be used for creating a new locale See http://momentjs.com/guides/#/warnings/define-locale/ for more info."),s=na[e]._config;else if(null!=a.parentLocale)if(null!=na[a.parentLocale])s=na[a.parentLocale]._config;else{if(null==(t=ia(a.parentLocale)))return ra[a.parentLocale]||(ra[a.parentLocale]=[]),ra[a.parentLocale].push({name:e,config:a}),null;s=t._config}return na[e]=new H(b(s,a)),ra[e]&&ra[e].forEach(function(e){ma(e.name,e.config)}),oa(e),na[e]}function ua(e){var a;if(e&&e._locale&&e._locale._abbr&&(e=e._locale._abbr),!e)return ta;if(!_(e)){if(a=ia(e))return a;e=[e]}return _a(e)}function la(e){var a,t=e._a;return t&&-2===L(e).overflow&&(a=t[pe]<0||11<t[pe]?pe:t[ke]<1||t[ke]>He(t[fe],t[pe])?ke:t[De]<0||24<t[De]||24===t[De]&&(0!==t[Te]||0!==t[ge]||0!==t[we])?De:t[Te]<0||59<t[Te]?Te:t[ge]<0||59<t[ge]?ge:t[we]<0||999<t[we]?we:-1,L(e)._overflowDayOfYear&&(a<fe||ke<a)&&(a=ke),L(e)._overflowWeeks&&-1===a&&(a=ve),L(e)._overflowWeekday&&-1===a&&(a=be),L(e).overflow=a),e}var Ma=/^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([+-]\d\d(?::?\d\d)?|\s*Z)?)?$/,ha=/^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d|))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([+-]\d\d(?::?\d\d)?|\s*Z)?)?$/,ca=/Z|[+-]\d\d(?::?\d\d)?/,La=[["YYYYYY-MM-DD",/[+-]\d{6}-\d\d-\d\d/],["YYYY-MM-DD",/\d{4}-\d\d-\d\d/],["GGGG-[W]WW-E",/\d{4}-W\d\d-\d/],["GGGG-[W]WW",/\d{4}-W\d\d/,!1],["YYYY-DDD",/\d{4}-\d{3}/],["YYYY-MM",/\d{4}-\d\d/,!1],["YYYYYYMMDD",/[+-]\d{10}/],["YYYYMMDD",/\d{8}/],["GGGG[W]WWE",/\d{4}W\d{3}/],["GGGG[W]WW",/\d{4}W\d{2}/,!1],["YYYYDDD",/\d{7}/],["YYYYMM",/\d{6}/,!1],["YYYY",/\d{4}/,!1]],Ya=[["HH:mm:ss.SSSS",/\d\d:\d\d:\d\d\.\d+/],["HH:mm:ss,SSSS",/\d\d:\d\d:\d\d,\d+/],["HH:mm:ss",/\d\d:\d\d:\d\d/],["HH:mm",/\d\d:\d\d/],["HHmmss.SSSS",/\d\d\d\d\d\d\.\d+/],["HHmmss,SSSS",/\d\d\d\d\d\d,\d+/],["HHmmss",/\d\d\d\d\d\d/],["HHmm",/\d\d\d\d/],["HH",/\d\d/]],ya=/^\/?Date\((-?\d+)/i,fa=/^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\s)?(\d{1,2})\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s(\d{2,4})\s(\d\d):(\d\d)(?::(\d\d))?\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\d{4}))$/,pa={UT:0,GMT:0,EDT:-240,EST:-300,CDT:-300,CST:-360,MDT:-360,MST:-420,PDT:-420,PST:-480};function ka(e){var a,t,s,n,r,d,_=e._i,i=Ma.exec(_)||ha.exec(_);if(i){for(L(e).iso=!0,a=0,t=La.length;a<t;a++)if(La[a][1].exec(i[1])){n=La[a][0],s=!1!==La[a][2];break}if(null==n)return void(e._isValid=!1);if(i[3]){for(a=0,t=Ya.length;a<t;a++)if(Ya[a][1].exec(i[3])){r=(i[2]||" ")+Ya[a][0];break}if(null==r)return void(e._isValid=!1)}if(!s&&null!=r)return void(e._isValid=!1);if(i[4]){if(!ca.exec(i[4]))return void(e._isValid=!1);d="Z"}e._f=n+(r||"")+(d||""),va(e)}else e._isValid=!1}function Da(e,a,t,s,n,r){var d=[function(e){var a=parseInt(e,10);{if(a<=49)return 2e3+a;if(a<=999)return 1900+a}return a}(e),je.indexOf(a),parseInt(t,10),parseInt(s,10),parseInt(n,10)];return r&&d.push(parseInt(r,10)),d}function Ta(e){var a,t,s,n,r=fa.exec(e._i.replace(/\([^)]*\)|[\n\t]/g," ").replace(/(\s\s+)/g," ").replace(/^\s\s*/,"").replace(/\s\s*$/,""));if(r){if(a=Da(r[4],r[3],r[2],r[5],r[6],r[7]),t=r[1],s=a,n=e,t&&Ve.indexOf(t)!==new Date(s[0],s[1],s[2]).getDay()&&(L(n).weekdayMismatch=!0,!void(n._isValid=!1)))return;e._a=a,e._tzm=function(e,a,t){if(e)return pa[e];if(a)return 0;var s=parseInt(t,10),n=s%100;return 60*((s-n)/100)+n}(r[8],r[9],r[10]),e._d=Ne.apply(null,e._a),e._d.setUTCMinutes(e._d.getUTCMinutes()-e._tzm),L(e).rfc2822=!0}else e._isValid=!1}function ga(e,a,t){return null!=e?e:null!=a?a:t}function wa(e){var a,t,s,n,r,d,_,i=[];if(!e._d){for(d=e,_=new Date(M.now()),s=d._useUTC?[_.getUTCFullYear(),_.getUTCMonth(),_.getUTCDate()]:[_.getFullYear(),_.getMonth(),_.getDate()],e._w&&null==e._a[ke]&&null==e._a[pe]&&function(e){var a,t,s,n,r,d,_,i,o;null!=(a=e._w).GG||null!=a.W||null!=a.E?(r=1,d=4,t=ga(a.GG,e._a[fe],Ce(Sa(),1,4).year),s=ga(a.W,1),((n=ga(a.E,1))<1||7<n)&&(i=!0)):(r=e._locale._week.dow,d=e._locale._week.doy,o=Ce(Sa(),r,d),t=ga(a.gg,e._a[fe],o.year),s=ga(a.w,o.week),null!=a.d?((n=a.d)<0||6<n)&&(i=!0):null!=a.e?(n=a.e+r,(a.e<0||6<a.e)&&(i=!0)):n=r);s<1||s>Ie(t,r,d)?L(e)._overflowWeeks=!0:null!=i?L(e)._overflowWeekday=!0:(_=Re(t,s,n,r,d),e._a[fe]=_.year,e._dayOfYear=_.dayOfYear)}(e),null!=e._dayOfYear&&(r=ga(e._a[fe],s[fe]),(e._dayOfYear>Fe(r)||0===e._dayOfYear)&&(L(e)._overflowDayOfYear=!0),t=Ne(r,0,e._dayOfYear),e._a[pe]=t.getUTCMonth(),e._a[ke]=t.getUTCDate()),a=0;a<3&&null==e._a[a];++a)e._a[a]=i[a]=s[a];for(;a<7;a++)e._a[a]=i[a]=null==e._a[a]?2===a?1:0:e._a[a];24===e._a[De]&&0===e._a[Te]&&0===e._a[ge]&&0===e._a[we]&&(e._nextDay=!0,e._a[De]=0),e._d=(e._useUTC?Ne:function(e,a,t,s,n,r,d){var _;return e<100&&0<=e?(_=new Date(e+400,a,t,s,n,r,d),isFinite(_.getFullYear())&&_.setFullYear(e)):_=new Date(e,a,t,s,n,r,d),_}).apply(null,i),n=e._useUTC?e._d.getUTCDay():e._d.getDay(),null!=e._tzm&&e._d.setUTCMinutes(e._d.getUTCMinutes()-e._tzm),e._nextDay&&(e._a[De]=24),e._w&&void 0!==e._w.d&&e._w.d!==n&&(L(e).weekdayMismatch=!0)}}function va(e){if(e._f!==M.ISO_8601)if(e._f!==M.RFC_2822){e._a=[],L(e).empty=!0;for(var a,t,s,n,r,d,_,i=""+e._i,o=i.length,m=0,u=E(e._f,e._locale).match(j)||[],l=0;l<u.length;l++)t=u[l],(a=(i.match(Me(t,e))||[])[0])&&(0<(s=i.substr(0,i.indexOf(a))).length&&L(e).unusedInput.push(s),i=i.slice(i.indexOf(a)+a.length),m+=a.length),P[t]?(a?L(e).empty=!1:L(e).unusedTokens.push(t),r=t,_=e,null!=(d=a)&&h(ce,r)&&ce[r](d,_._a,_,r)):e._strict&&!a&&L(e).unusedTokens.push(t);L(e).charsLeftOver=o-m,0<i.length&&L(e).unusedInput.push(i),e._a[De]<=12&&!0===L(e).bigHour&&0<e._a[De]&&(L(e).bigHour=void 0),L(e).parsedDateParts=e._a.slice(0),L(e).meridiem=e._meridiem,e._a[De]=function(e,a,t){var s;if(null==t)return a;return null!=e.meridiemHour?e.meridiemHour(a,t):(null!=e.isPM&&((s=e.isPM(t))&&a<12&&(a+=12),s||12!==a||(a=0)),a)}(e._locale,e._a[De],e._meridiem),null!==(n=L(e).era)&&(e._a[fe]=e._locale.erasConvertYear(n,e._a[fe])),wa(e),la(e)}else Ta(e);else ka(e)}function ba(e){var a,t,s=e._i,n=e._f;return e._locale=e._locale||ua(e._l),null===s||void 0===n&&""===s?y({nullInput:!0}):("string"==typeof s&&(e._i=s=e._locale.preparse(s)),D(s)?new k(la(s)):(d(s)?e._d=s:_(n)?function(e){var a,t,s,n,r,d,_=!1;if(0===e._f.length)return L(e).invalidFormat=!0,e._d=new Date(NaN);for(n=0;n<e._f.length;n++)r=0,d=!1,a=p({},e),null!=e._useUTC&&(a._useUTC=e._useUTC),a._f=e._f[n],va(a),Y(a)&&(d=!0),r+=L(a).charsLeftOver,r+=10*L(a).unusedTokens.length,L(a).score=r,_?r<s&&(s=r,t=a):(null==s||r<s||d)&&(s=r,t=a,d&&(_=!0));l(e,t||a)}(e):n?va(e):r(t=(a=e)._i)?a._d=new Date(M.now()):d(t)?a._d=new Date(t.valueOf()):"string"==typeof t?function(e){var a=ya.exec(e._i);null===a?(ka(e),!1===e._isValid&&(delete e._isValid,Ta(e),!1===e._isValid&&(delete e._isValid,e._strict?e._isValid=!1:M.createFromInputFallback(e)))):e._d=new Date(+a[1])}(a):_(t)?(a._a=u(t.slice(0),function(e){return parseInt(e,10)}),wa(a)):i(t)?function(e){var a,t;e._d||(t=void 0===(a=J(e._i)).day?a.date:a.day,e._a=u([a.year,a.month,t,a.hour,a.minute,a.second,a.millisecond],function(e){return e&&parseInt(e,10)}),wa(e))}(a):m(t)?a._d=new Date(t):M.createFromInputFallback(a),Y(e)||(e._d=null),e))}function Ha(e,a,t,s,n){var r,d={};return!0!==a&&!1!==a||(s=a,a=void 0),!0!==t&&!1!==t||(s=t,t=void 0),(i(e)&&o(e)||_(e)&&0===e.length)&&(e=void 0),d._isAMomentObject=!0,d._useUTC=d._isUTC=n,d._l=t,d._i=e,d._f=a,d._strict=s,(r=new k(la(ba(d))))._nextDay&&(r.add(1,"d"),r._nextDay=void 0),r}function Sa(e,a,t,s){return Ha(e,a,t,s,!1)}M.createFromInputFallback=t("value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are discouraged and will be removed in an upcoming major release. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.",function(e){e._d=new Date(e._i+(e._useUTC?" UTC":""))}),M.ISO_8601=function(){},M.RFC_2822=function(){};var ja=t("moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/",function(){var e=Sa.apply(null,arguments);return this.isValid()&&e.isValid()?e<this?this:e:y()}),xa=t("moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/",function(){var e=Sa.apply(null,arguments);return this.isValid()&&e.isValid()?this<e?this:e:y()});function Oa(e,a){var t,s;if(1===a.length&&_(a[0])&&(a=a[0]),!a.length)return Sa();for(t=a[0],s=1;s<a.length;++s)a[s].isValid()&&!a[s][e](t)||(t=a[s]);return t}var Pa=["year","quarter","month","week","day","hour","minute","second","millisecond"];function Wa(e){var a=J(e),t=a.year||0,s=a.quarter||0,n=a.month||0,r=a.week||a.isoWeek||0,d=a.day||0,_=a.hour||0,i=a.minute||0,o=a.second||0,m=a.millisecond||0;this._isValid=function(e){var a,t,s=!1;for(a in e)if(h(e,a)&&(-1===ye.call(Pa,a)||null!=e[a]&&isNaN(e[a])))return!1;for(t=0;t<Pa.length;++t)if(e[Pa[t]]){if(s)return!1;parseFloat(e[Pa[t]])!==G(e[Pa[t]])&&(s=!0)}return!0}(a),this._milliseconds=+m+1e3*o+6e4*i+1e3*_*60*60,this._days=+d+7*r,this._months=+n+3*s+12*t,this._data={},this._locale=ua(),this._bubble()}function Aa(e){return e instanceof Wa}function Ea(e){return e<0?-1*Math.round(-1*e):Math.round(e)}function Fa(e,t){W(e,0,0,function(){var e=this.utcOffset(),a="+";return e<0&&(e=-e,a="-"),a+S(~~(e/60),2)+t+S(~~e%60,2)})}Fa("Z",":"),Fa("ZZ",""),le("Z",me),le("ZZ",me),Le(["Z","ZZ"],function(e,a,t){t._useUTC=!0,t._tzm=Na(me,e)});var za=/([\+\-]|\d\d)/gi;function Na(e,a){var t,s,n=(a||"").match(e);return null===n?null:0===(s=60*(t=((n[n.length-1]||[])+"").match(za)||["-",0,0])[1]+G(t[2]))?0:"+"===t[0]?s:-s}function Ja(e,a){var t,s;return a._isUTC?(t=a.clone(),s=(D(e)||d(e)?e.valueOf():Sa(e).valueOf())-t.valueOf(),t._d.setTime(t._d.valueOf()+s),M.updateOffset(t,!1),t):Sa(e).local()}function Ra(e){return-Math.round(e._d.getTimezoneOffset())}function Ca(){return!!this.isValid()&&(this._isUTC&&0===this._offset)}M.updateOffset=function(){};var Ia=/^(-|\+)?(?:(\d*)[. ])?(\d+):(\d+)(?::(\d+)(\.\d*)?)?$/,Ua=/^(-|\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;function Ga(e,a){var t,s,n,r=e,d=null;return Aa(e)?r={ms:e._milliseconds,d:e._days,M:e._months}:m(e)||!isNaN(+e)?(r={},a?r[a]=+e:r.milliseconds=+e):(d=Ia.exec(e))?(t="-"===d[1]?-1:1,r={y:0,d:G(d[ke])*t,h:G(d[De])*t,m:G(d[Te])*t,s:G(d[ge])*t,ms:G(Ea(1e3*d[we]))*t}):(d=Ua.exec(e))?(t="-"===d[1]?-1:1,r={y:Va(d[2],t),M:Va(d[3],t),w:Va(d[4],t),d:Va(d[5],t),h:Va(d[6],t),m:Va(d[7],t),s:Va(d[8],t)}):null==r?r={}:"object"==typeof r&&("from"in r||"to"in r)&&(n=function(e,a){var t;if(!e.isValid()||!a.isValid())return{milliseconds:0,months:0};a=Ja(a,e),e.isBefore(a)?t=Ba(e,a):((t=Ba(a,e)).milliseconds=-t.milliseconds,t.months=-t.months);return t}(Sa(r.from),Sa(r.to)),(r={}).ms=n.milliseconds,r.M=n.months),s=new Wa(r),Aa(e)&&h(e,"_locale")&&(s._locale=e._locale),Aa(e)&&h(e,"_isValid")&&(s._isValid=e._isValid),s}function Va(e,a){var t=e&&parseFloat(e.replace(",","."));return(isNaN(t)?0:t)*a}function Ba(e,a){var t={};return t.months=a.month()-e.month()+12*(a.year()-e.year()),e.clone().add(t.months,"M").isAfter(a)&&--t.months,t.milliseconds=a-e.clone().add(t.months,"M"),t}function Ka(s,n){return function(e,a){var t;return null===a||isNaN(+a)||(w(n,"moment()."+n+"(period, number) is deprecated. Please use moment()."+n+"(number, period). See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info."),t=e,e=a,a=t),qa(this,Ga(e,a),s),this}}function qa(e,a,t,s){var n=a._milliseconds,r=Ea(a._days),d=Ea(a._months);e.isValid()&&(s=null==s||s,d&&We(e,B(e,"Month")+d*t),r&&K(e,"Date",B(e,"Date")+r*t),n&&e._d.setTime(e._d.valueOf()+n*t),s&&M.updateOffset(e,r||d))}Ga.fn=Wa.prototype,Ga.invalid=function(){return Ga(NaN)};var Za=Ka(1,"add"),$a=Ka(-1,"subtract");function Qa(e){return"string"==typeof e||e instanceof String}function Xa(e){return D(e)||d(e)||Qa(e)||m(e)||function(a){var e=_(a),t=!1;e&&(t=0===a.filter(function(e){return!m(e)&&Qa(a)}).length);return e&&t}(e)||function(e){var a,t,s=i(e)&&!o(e),n=!1,r=["years","year","y","months","month","M","days","day","d","dates","date","D","hours","hour","h","minutes","minute","m","seconds","second","s","milliseconds","millisecond","ms"];for(a=0;a<r.length;a+=1)t=r[a],n=n||h(e,t);return s&&n}(e)||null==e}function et(e,a){if(e.date()<a.date())return-et(a,e);var t=12*(a.year()-e.year())+(a.month()-e.month()),s=e.clone().add(t,"months"),n=a-s<0?(a-s)/(s-e.clone().add(t-1,"months")):(a-s)/(e.clone().add(1+t,"months")-s);return-(t+n)||0}function at(e){var a;return void 0===e?this._locale._abbr:(null!=(a=ua(e))&&(this._locale=a),this)}M.defaultFormat="YYYY-MM-DDTHH:mm:ssZ",M.defaultFormatUtc="YYYY-MM-DDTHH:mm:ss[Z]";var tt=t("moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.",function(e){return void 0===e?this.localeData():this.locale(e)});function st(){return this._locale}var nt=126227808e5;function rt(e,a){return(e%a+a)%a}function dt(e,a,t){return e<100&&0<=e?new Date(e+400,a,t)-nt:new Date(e,a,t).valueOf()}function _t(e,a,t){return e<100&&0<=e?Date.UTC(e+400,a,t)-nt:Date.UTC(e,a,t)}function it(e,a){return a.erasAbbrRegex(e)}function ot(){for(var e=[],a=[],t=[],s=[],n=this.eras(),r=0,d=n.length;r<d;++r)a.push(he(n[r].name)),e.push(he(n[r].abbr)),t.push(he(n[r].narrow)),s.push(he(n[r].name)),s.push(he(n[r].abbr)),s.push(he(n[r].narrow));this._erasRegex=new RegExp("^("+s.join("|")+")","i"),this._erasNameRegex=new RegExp("^("+a.join("|")+")","i"),this._erasAbbrRegex=new RegExp("^("+e.join("|")+")","i"),this._erasNarrowRegex=new RegExp("^("+t.join("|")+")","i")}function mt(e,a){W(0,[e,e.length],0,a)}function ut(e,a,t,s,n){var r;return null==e?Ce(this,s,n).year:((r=Ie(e,s,n))<a&&(a=r),function(e,a,t,s,n){var r=Re(e,a,t,s,n),d=Ne(r.year,0,r.dayOfYear);return this.year(d.getUTCFullYear()),this.month(d.getUTCMonth()),this.date(d.getUTCDate()),this}.call(this,e,a,t,s,n))}W("N",0,0,"eraAbbr"),W("NN",0,0,"eraAbbr"),W("NNN",0,0,"eraAbbr"),W("NNNN",0,0,"eraName"),W("NNNNN",0,0,"eraNarrow"),W("y",["y",1],"yo","eraYear"),W("y",["yy",2],0,"eraYear"),W("y",["yyy",3],0,"eraYear"),W("y",["yyyy",4],0,"eraYear"),le("N",it),le("NN",it),le("NNN",it),le("NNNN",function(e,a){return a.erasNameRegex(e)}),le("NNNNN",function(e,a){return a.erasNarrowRegex(e)}),Le(["N","NN","NNN","NNNN","NNNNN"],function(e,a,t,s){var n=t._locale.erasParse(e,s,t._strict);n?L(t).era=n:L(t).invalidEra=e}),le("y",_e),le("yy",_e),le("yyy",_e),le("yyyy",_e),le("yo",function(e,a){return a._eraYearOrdinalRegex||_e}),Le(["y","yy","yyy","yyyy"],fe),Le(["yo"],function(e,a,t,s){var n;t._locale._eraYearOrdinalRegex&&(n=e.match(t._locale._eraYearOrdinalRegex)),t._locale.eraYearOrdinalParse?a[fe]=t._locale.eraYearOrdinalParse(e,n):a[fe]=parseInt(e,10)}),W(0,["gg",2],0,function(){return this.weekYear()%100}),W(0,["GG",2],0,function(){return this.isoWeekYear()%100}),mt("gggg","weekYear"),mt("ggggg","weekYear"),mt("GGGG","isoWeekYear"),mt("GGGGG","isoWeekYear"),z("weekYear","gg"),z("isoWeekYear","GG"),C("weekYear",1),C("isoWeekYear",1),le("G",ie),le("g",ie),le("GG",ae,$),le("gg",ae,$),le("GGGG",re,X),le("gggg",re,X),le("GGGGG",de,ee),le("ggggg",de,ee),Ye(["gggg","ggggg","GGGG","GGGGG"],function(e,a,t,s){a[s.substr(0,2)]=G(e)}),Ye(["gg","GG"],function(e,a,t,s){a[s]=M.parseTwoDigitYear(e)}),W("Q",0,"Qo","quarter"),z("quarter","Q"),C("quarter",7),le("Q",Z),Le("Q",function(e,a){a[pe]=3*(G(e)-1)}),W("D",["DD",2],"Do","date"),z("date","D"),C("date",9),le("D",ae),le("DD",ae,$),le("Do",function(e,a){return e?a._dayOfMonthOrdinalParse||a._ordinalParse:a._dayOfMonthOrdinalParseLenient}),Le(["D","DD"],ke),Le("Do",function(e,a){a[ke]=G(e.match(ae)[0])});var lt=V("Date",!0);W("DDD",["DDDD",3],"DDDo","dayOfYear"),z("dayOfYear","DDD"),C("dayOfYear",4),le("DDD",ne),le("DDDD",Q),Le(["DDD","DDDD"],function(e,a,t){t._dayOfYear=G(e)}),W("m",["mm",2],0,"minute"),z("minute","m"),C("minute",14),le("m",ae),le("mm",ae,$),Le(["m","mm"],Te);var Mt=V("Minutes",!1);W("s",["ss",2],0,"second"),z("second","s"),C("second",15),le("s",ae),le("ss",ae,$),Le(["s","ss"],ge);var ht,ct,Lt=V("Seconds",!1);for(W("S",0,0,function(){return~~(this.millisecond()/100)}),W(0,["SS",2],0,function(){return~~(this.millisecond()/10)}),W(0,["SSS",3],0,"millisecond"),W(0,["SSSS",4],0,function(){return 10*this.millisecond()}),W(0,["SSSSS",5],0,function(){return 100*this.millisecond()}),W(0,["SSSSSS",6],0,function(){return 1e3*this.millisecond()}),W(0,["SSSSSSS",7],0,function(){return 1e4*this.millisecond()}),W(0,["SSSSSSSS",8],0,function(){return 1e5*this.millisecond()}),W(0,["SSSSSSSSS",9],0,function(){return 1e6*this.millisecond()}),z("millisecond","ms"),C("millisecond",16),le("S",ne,Z),le("SS",ne,$),le("SSS",ne,Q),ht="SSSS";ht.length<=9;ht+="S")le(ht,_e);function Yt(e,a){a[we]=G(1e3*("0."+e))}for(ht="S";ht.length<=9;ht+="S")Le(ht,Yt);ct=V("Milliseconds",!1),W("z",0,0,"zoneAbbr"),W("zz",0,0,"zoneName");var yt=k.prototype;function ft(e){return e}yt.add=Za,yt.calendar=function(e,a){1===arguments.length&&(Xa(arguments[0])?(e=arguments[0],a=void 0):function(e){for(var a=i(e)&&!o(e),t=!1,s=["sameDay","nextDay","lastDay","nextWeek","lastWeek","sameElse"],n=0;n<s.length;n+=1)t=t||h(e,s[n]);return a&&t}(arguments[0])&&(a=arguments[0],e=void 0));var t=e||Sa(),s=Ja(t,this).startOf("day"),n=M.calendarFormat(this,s)||"sameElse",r=a&&(v(a[n])?a[n].call(this,t):a[n]);return this.format(r||this.localeData().calendar(n,this,Sa(t)))},yt.clone=function(){return new k(this)},yt.diff=function(e,a,t){var s,n,r;if(!this.isValid())return NaN;if(!(s=Ja(e,this)).isValid())return NaN;switch(n=6e4*(s.utcOffset()-this.utcOffset()),a=N(a)){case"year":r=et(this,s)/12;break;case"month":r=et(this,s);break;case"quarter":r=et(this,s)/3;break;case"second":r=(this-s)/1e3;break;case"minute":r=(this-s)/6e4;break;case"hour":r=(this-s)/36e5;break;case"day":r=(this-s-n)/864e5;break;case"week":r=(this-s-n)/6048e5;break;default:r=this-s}return t?r:U(r)},yt.endOf=function(e){var a,t;if(void 0===(e=N(e))||"millisecond"===e||!this.isValid())return this;switch(t=this._isUTC?_t:dt,e){case"year":a=t(this.year()+1,0,1)-1;break;case"quarter":a=t(this.year(),this.month()-this.month()%3+3,1)-1;break;case"month":a=t(this.year(),this.month()+1,1)-1;break;case"week":a=t(this.year(),this.month(),this.date()-this.weekday()+7)-1;break;case"isoWeek":a=t(this.year(),this.month(),this.date()-(this.isoWeekday()-1)+7)-1;break;case"day":case"date":a=t(this.year(),this.month(),this.date()+1)-1;break;case"hour":a=this._d.valueOf(),a+=36e5-rt(a+(this._isUTC?0:6e4*this.utcOffset()),36e5)-1;break;case"minute":a=this._d.valueOf(),a+=6e4-rt(a,6e4)-1;break;case"second":a=this._d.valueOf(),a+=1e3-rt(a,1e3)-1;break}return this._d.setTime(a),M.updateOffset(this,!0),this},yt.format=function(e){e=e||(this.isUtc()?M.defaultFormatUtc:M.defaultFormat);var a=A(this,e);return this.localeData().postformat(a)},yt.from=function(e,a){return this.isValid()&&(D(e)&&e.isValid()||Sa(e).isValid())?Ga({to:this,from:e}).locale(this.locale()).humanize(!a):this.localeData().invalidDate()},yt.fromNow=function(e){return this.from(Sa(),e)},yt.to=function(e,a){return this.isValid()&&(D(e)&&e.isValid()||Sa(e).isValid())?Ga({from:this,to:e}).locale(this.locale()).humanize(!a):this.localeData().invalidDate()},yt.toNow=function(e){return this.to(Sa(),e)},yt.get=function(e){return v(this[e=N(e)])?this[e]():this},yt.invalidAt=function(){return L(this).overflow},yt.isAfter=function(e,a){var t=D(e)?e:Sa(e);return!(!this.isValid()||!t.isValid())&&("millisecond"===(a=N(a)||"millisecond")?this.valueOf()>t.valueOf():t.valueOf()<this.clone().startOf(a).valueOf())},yt.isBefore=function(e,a){var t=D(e)?e:Sa(e);return!(!this.isValid()||!t.isValid())&&("millisecond"===(a=N(a)||"millisecond")?this.valueOf()<t.valueOf():this.clone().endOf(a).valueOf()<t.valueOf())},yt.isBetween=function(e,a,t,s){var n=D(e)?e:Sa(e),r=D(a)?a:Sa(a);return!!(this.isValid()&&n.isValid()&&r.isValid())&&(("("===(s=s||"()")[0]?this.isAfter(n,t):!this.isBefore(n,t))&&(")"===s[1]?this.isBefore(r,t):!this.isAfter(r,t)))},yt.isSame=function(e,a){var t,s=D(e)?e:Sa(e);return!(!this.isValid()||!s.isValid())&&("millisecond"===(a=N(a)||"millisecond")?this.valueOf()===s.valueOf():(t=s.valueOf(),this.clone().startOf(a).valueOf()<=t&&t<=this.clone().endOf(a).valueOf()))},yt.isSameOrAfter=function(e,a){return this.isSame(e,a)||this.isAfter(e,a)},yt.isSameOrBefore=function(e,a){return this.isSame(e,a)||this.isBefore(e,a)},yt.isValid=function(){return Y(this)},yt.lang=tt,yt.locale=at,yt.localeData=st,yt.max=xa,yt.min=ja,yt.parsingFlags=function(){return l({},L(this))},yt.set=function(e,a){if("object"==typeof e)for(var t=function(e){var a,t=[];for(a in e)h(e,a)&&t.push({unit:a,priority:R[a]});return t.sort(function(e,a){return e.priority-a.priority}),t}(e=J(e)),s=0;s<t.length;s++)this[t[s].unit](e[t[s].unit]);else if(v(this[e=N(e)]))return this[e](a);return this},yt.startOf=function(e){var a,t;if(void 0===(e=N(e))||"millisecond"===e||!this.isValid())return this;switch(t=this._isUTC?_t:dt,e){case"year":a=t(this.year(),0,1);break;case"quarter":a=t(this.year(),this.month()-this.month()%3,1);break;case"month":a=t(this.year(),this.month(),1);break;case"week":a=t(this.year(),this.month(),this.date()-this.weekday());break;case"isoWeek":a=t(this.year(),this.month(),this.date()-(this.isoWeekday()-1));break;case"day":case"date":a=t(this.year(),this.month(),this.date());break;case"hour":a=this._d.valueOf(),a-=rt(a+(this._isUTC?0:6e4*this.utcOffset()),36e5);break;case"minute":a=this._d.valueOf(),a-=rt(a,6e4);break;case"second":a=this._d.valueOf(),a-=rt(a,1e3);break}return this._d.setTime(a),M.updateOffset(this,!0),this},yt.subtract=$a,yt.toArray=function(){var e=this;return[e.year(),e.month(),e.date(),e.hour(),e.minute(),e.second(),e.millisecond()]},yt.toObject=function(){var e=this;return{years:e.year(),months:e.month(),date:e.date(),hours:e.hours(),minutes:e.minutes(),seconds:e.seconds(),milliseconds:e.milliseconds()}},yt.toDate=function(){return new Date(this.valueOf())},yt.toISOString=function(e){if(!this.isValid())return null;var a=!0!==e,t=a?this.clone().utc():this;return t.year()<0||9999<t.year()?A(t,a?"YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]":"YYYYYY-MM-DD[T]HH:mm:ss.SSSZ"):v(Date.prototype.toISOString)?a?this.toDate().toISOString():new Date(this.valueOf()+60*this.utcOffset()*1e3).toISOString().replace("Z",A(t,"Z")):A(t,a?"YYYY-MM-DD[T]HH:mm:ss.SSS[Z]":"YYYY-MM-DD[T]HH:mm:ss.SSSZ")},yt.inspect=function(){if(!this.isValid())return"moment.invalid(/* "+this._i+" */)";var e,a,t,s="moment",n="";return this.isLocal()||(s=0===this.utcOffset()?"moment.utc":"moment.parseZone",n="Z"),e="["+s+'("]',a=0<=this.year()&&this.year()<=9999?"YYYY":"YYYYYY",t=n+'[")]',this.format(e+a+"-MM-DD[T]HH:mm:ss.SSS"+t)},"undefined"!=typeof Symbol&&null!=Symbol.for&&(yt[Symbol.for("nodejs.util.inspect.custom")]=function(){return"Moment<"+this.format()+">"}),yt.toJSON=function(){return this.isValid()?this.toISOString():null},yt.toString=function(){return this.clone().locale("en").format("ddd MMM DD YYYY HH:mm:ss [GMT]ZZ")},yt.unix=function(){return Math.floor(this.valueOf()/1e3)},yt.valueOf=function(){return this._d.valueOf()-6e4*(this._offset||0)},yt.creationData=function(){return{input:this._i,format:this._f,locale:this._locale,isUTC:this._isUTC,strict:this._strict}},yt.eraName=function(){for(var e,a=this.localeData().eras(),t=0,s=a.length;t<s;++t){if(e=this.clone().startOf("day").valueOf(),a[t].since<=e&&e<=a[t].until)return a[t].name;if(a[t].until<=e&&e<=a[t].since)return a[t].name}return""},yt.eraNarrow=function(){for(var e,a=this.localeData().eras(),t=0,s=a.length;t<s;++t){if(e=this.clone().startOf("day").valueOf(),a[t].since<=e&&e<=a[t].until)return a[t].narrow;if(a[t].until<=e&&e<=a[t].since)return a[t].narrow}return""},yt.eraAbbr=function(){for(var e,a=this.localeData().eras(),t=0,s=a.length;t<s;++t){if(e=this.clone().startOf("day").valueOf(),a[t].since<=e&&e<=a[t].until)return a[t].abbr;if(a[t].until<=e&&e<=a[t].since)return a[t].abbr}return""},yt.eraYear=function(){for(var e,a,t=this.localeData().eras(),s=0,n=t.length;s<n;++s)if(e=t[s].since<=t[s].until?1:-1,a=this.clone().startOf("day").valueOf(),t[s].since<=a&&a<=t[s].until||t[s].until<=a&&a<=t[s].since)return(this.year()-M(t[s].since).year())*e+t[s].offset;return this.year()},yt.year=ze,yt.isLeapYear=function(){return I(this.year())},yt.weekYear=function(e){return ut.call(this,e,this.week(),this.weekday(),this.localeData()._week.dow,this.localeData()._week.doy)},yt.isoWeekYear=function(e){return ut.call(this,e,this.isoWeek(),this.isoWeekday(),1,4)},yt.quarter=yt.quarters=function(e){return null==e?Math.ceil((this.month()+1)/3):this.month(3*(e-1)+this.month()%3)},yt.month=Ae,yt.daysInMonth=function(){return He(this.year(),this.month())},yt.week=yt.weeks=function(e){var a=this.localeData().week(this);return null==e?a:this.add(7*(e-a),"d")},yt.isoWeek=yt.isoWeeks=function(e){var a=Ce(this,1,4).week;return null==e?a:this.add(7*(e-a),"d")},yt.weeksInYear=function(){var e=this.localeData()._week;return Ie(this.year(),e.dow,e.doy)},yt.weeksInWeekYear=function(){var e=this.localeData()._week;return Ie(this.weekYear(),e.dow,e.doy)},yt.isoWeeksInYear=function(){return Ie(this.year(),1,4)},yt.isoWeeksInISOWeekYear=function(){return Ie(this.isoWeekYear(),1,4)},yt.date=lt,yt.day=yt.days=function(e){if(!this.isValid())return null!=e?this:NaN;var a,t,s=this._isUTC?this._d.getUTCDay():this._d.getDay();return null!=e?(a=e,t=this.localeData(),e="string"!=typeof a?a:isNaN(a)?"number"==typeof(a=t.weekdaysParse(a))?a:null:parseInt(a,10),this.add(e-s,"d")):s},yt.weekday=function(e){if(!this.isValid())return null!=e?this:NaN;var a=(this.day()+7-this.localeData()._week.dow)%7;return null==e?a:this.add(e-a,"d")},yt.isoWeekday=function(e){if(!this.isValid())return null!=e?this:NaN;if(null==e)return this.day()||7;var a,t,s=(a=e,t=this.localeData(),"string"==typeof a?t.weekdaysParse(a)%7||7:isNaN(a)?null:a);return this.day(this.day()%7?s:s-7)},yt.dayOfYear=function(e){var a=Math.round((this.clone().startOf("day")-this.clone().startOf("year"))/864e5)+1;return null==e?a:this.add(e-a,"d")},yt.hour=yt.hours=aa,yt.minute=yt.minutes=Mt,yt.second=yt.seconds=Lt,yt.millisecond=yt.milliseconds=ct,yt.utcOffset=function(e,a,t){var s,n=this._offset||0;if(!this.isValid())return null!=e?this:NaN;if(null==e)return this._isUTC?n:Ra(this);if("string"==typeof e){if(null===(e=Na(me,e)))return this}else Math.abs(e)<16&&!t&&(e*=60);return!this._isUTC&&a&&(s=Ra(this)),this._offset=e,this._isUTC=!0,null!=s&&this.add(s,"m"),n!==e&&(!a||this._changeInProgress?qa(this,Ga(e-n,"m"),1,!1):this._changeInProgress||(this._changeInProgress=!0,M.updateOffset(this,!0),this._changeInProgress=null)),this},yt.utc=function(e){return this.utcOffset(0,e)},yt.local=function(e){return this._isUTC&&(this.utcOffset(0,e),this._isUTC=!1,e&&this.subtract(Ra(this),"m")),this},yt.parseZone=function(){var e;return null!=this._tzm?this.utcOffset(this._tzm,!1,!0):"string"==typeof this._i&&(null!=(e=Na(oe,this._i))?this.utcOffset(e):this.utcOffset(0,!0)),this},yt.hasAlignedHourOffset=function(e){return!!this.isValid()&&(e=e?Sa(e).utcOffset():0,(this.utcOffset()-e)%60==0)},yt.isDST=function(){return this.utcOffset()>this.clone().month(0).utcOffset()||this.utcOffset()>this.clone().month(5).utcOffset()},yt.isLocal=function(){return!!this.isValid()&&!this._isUTC},yt.isUtcOffset=function(){return!!this.isValid()&&this._isUTC},yt.isUtc=Ca,yt.isUTC=Ca,yt.zoneAbbr=function(){return this._isUTC?"UTC":""},yt.zoneName=function(){return this._isUTC?"Coordinated Universal Time":""},yt.dates=t("dates accessor is deprecated. Use date instead.",lt),yt.months=t("months accessor is deprecated. Use month instead",Ae),yt.years=t("years accessor is deprecated. Use year instead",ze),yt.zone=t("moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/",function(e,a){return null!=e?("string"!=typeof e&&(e=-e),this.utcOffset(e,a),this):-this.utcOffset()}),yt.isDSTShifted=t("isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information",function(){if(!r(this._isDSTShifted))return this._isDSTShifted;var e,a={};return p(a,this),(a=ba(a))._a?(e=(a._isUTC?c:Sa)(a._a),this._isDSTShifted=this.isValid()&&0<function(e,a,t){for(var s=Math.min(e.length,a.length),n=Math.abs(e.length-a.length),r=0,d=0;d<s;d++)(t&&e[d]!==a[d]||!t&&G(e[d])!==G(a[d]))&&r++;return r+n}(a._a,e.toArray())):this._isDSTShifted=!1,this._isDSTShifted});var pt=H.prototype;function kt(e,a,t,s){var n=ua(),r=c().set(s,a);return n[t](r,e)}function Dt(e,a,t){if(m(e)&&(a=e,e=void 0),e=e||"",null!=a)return kt(e,a,t,"month");for(var s=[],n=0;n<12;n++)s[n]=kt(e,n,t,"month");return s}function Tt(e,a,t,s){a=("boolean"==typeof e?m(a)&&(t=a,a=void 0):(a=e,e=!1,m(t=a)&&(t=a,a=void 0)),a||"");var n,r=ua(),d=e?r._week.dow:0,_=[];if(null!=t)return kt(a,(t+d)%7,s,"day");for(n=0;n<7;n++)_[n]=kt(a,(n+d)%7,s,"day");return _}pt.calendar=function(e,a,t){var s=this._calendar[e]||this._calendar.sameElse;return v(s)?s.call(a,t):s},pt.longDateFormat=function(e){var a=this._longDateFormat[e],t=this._longDateFormat[e.toUpperCase()];return a||!t?a:(this._longDateFormat[e]=t.match(j).map(function(e){return"MMMM"===e||"MM"===e||"DD"===e||"dddd"===e?e.slice(1):e}).join(""),this._longDateFormat[e])},pt.invalidDate=function(){return this._invalidDate},pt.ordinal=function(e){return this._ordinal.replace("%d",e)},pt.preparse=ft,pt.postformat=ft,pt.relativeTime=function(e,a,t,s){var n=this._relativeTime[t];return v(n)?n(e,a,t,s):n.replace(/%d/i,e)},pt.pastFuture=function(e,a){var t=this._relativeTime[0<e?"future":"past"];return v(t)?t(a):t.replace(/%s/i,a)},pt.set=function(e){var a,t;for(t in e)h(e,t)&&(v(a=e[t])?this[t]=a:this["_"+t]=a);this._config=e,this._dayOfMonthOrdinalParseLenient=new RegExp((this._dayOfMonthOrdinalParse.source||this._ordinalParse.source)+"|"+/\d{1,2}/.source)},pt.eras=function(e,a){for(var t,s=this._eras||ua("en")._eras,n=0,r=s.length;n<r;++n){switch(typeof s[n].since){case"string":t=M(s[n].since).startOf("day"),s[n].since=t.valueOf();break}switch(typeof s[n].until){case"undefined":s[n].until=1/0;break;case"string":t=M(s[n].until).startOf("day").valueOf(),s[n].until=t.valueOf();break}}return s},pt.erasParse=function(e,a,t){var s,n,r,d,_,i=this.eras();for(e=e.toUpperCase(),s=0,n=i.length;s<n;++s)if(r=i[s].name.toUpperCase(),d=i[s].abbr.toUpperCase(),_=i[s].narrow.toUpperCase(),t)switch(a){case"N":case"NN":case"NNN":if(d===e)return i[s];break;case"NNNN":if(r===e)return i[s];break;case"NNNNN":if(_===e)return i[s];break}else if(0<=[r,d,_].indexOf(e))return i[s]},pt.erasConvertYear=function(e,a){var t=e.since<=e.until?1:-1;return void 0===a?M(e.since).year():M(e.since).year()+(a-e.offset)*t},pt.erasAbbrRegex=function(e){return h(this,"_erasAbbrRegex")||ot.call(this),e?this._erasAbbrRegex:this._erasRegex},pt.erasNameRegex=function(e){return h(this,"_erasNameRegex")||ot.call(this),e?this._erasNameRegex:this._erasRegex},pt.erasNarrowRegex=function(e){return h(this,"_erasNarrowRegex")||ot.call(this),e?this._erasNarrowRegex:this._erasRegex},pt.months=function(e,a){return e?_(this._months)?this._months[e.month()]:this._months[(this._months.isFormat||xe).test(a)?"format":"standalone"][e.month()]:_(this._months)?this._months:this._months.standalone},pt.monthsShort=function(e,a){return e?_(this._monthsShort)?this._monthsShort[e.month()]:this._monthsShort[xe.test(a)?"format":"standalone"][e.month()]:_(this._monthsShort)?this._monthsShort:this._monthsShort.standalone},pt.monthsParse=function(e,a,t){var s,n,r;if(this._monthsParseExact)return function(e,a,t){var s,n,r,d=e.toLocaleLowerCase();if(!this._monthsParse)for(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[],s=0;s<12;++s)r=c([2e3,s]),this._shortMonthsParse[s]=this.monthsShort(r,"").toLocaleLowerCase(),this._longMonthsParse[s]=this.months(r,"").toLocaleLowerCase();return t?"MMM"===a?-1!==(n=ye.call(this._shortMonthsParse,d))?n:null:-1!==(n=ye.call(this._longMonthsParse,d))?n:null:"MMM"===a?-1!==(n=ye.call(this._shortMonthsParse,d))||-1!==(n=ye.call(this._longMonthsParse,d))?n:null:-1!==(n=ye.call(this._longMonthsParse,d))||-1!==(n=ye.call(this._shortMonthsParse,d))?n:null}.call(this,e,a,t);for(this._monthsParse||(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[]),s=0;s<12;s++){if(n=c([2e3,s]),t&&!this._longMonthsParse[s]&&(this._longMonthsParse[s]=new RegExp("^"+this.months(n,"").replace(".","")+"$","i"),this._shortMonthsParse[s]=new RegExp("^"+this.monthsShort(n,"").replace(".","")+"$","i")),t||this._monthsParse[s]||(r="^"+this.months(n,"")+"|^"+this.monthsShort(n,""),this._monthsParse[s]=new RegExp(r.replace(".",""),"i")),t&&"MMMM"===a&&this._longMonthsParse[s].test(e))return s;if(t&&"MMM"===a&&this._shortMonthsParse[s].test(e))return s;if(!t&&this._monthsParse[s].test(e))return s}},pt.monthsRegex=function(e){return this._monthsParseExact?(h(this,"_monthsRegex")||Ee.call(this),e?this._monthsStrictRegex:this._monthsRegex):(h(this,"_monthsRegex")||(this._monthsRegex=Pe),this._monthsStrictRegex&&e?this._monthsStrictRegex:this._monthsRegex)},pt.monthsShortRegex=function(e){return this._monthsParseExact?(h(this,"_monthsRegex")||Ee.call(this),e?this._monthsShortStrictRegex:this._monthsShortRegex):(h(this,"_monthsShortRegex")||(this._monthsShortRegex=Oe),this._monthsShortStrictRegex&&e?this._monthsShortStrictRegex:this._monthsShortRegex)},pt.week=function(e){return Ce(e,this._week.dow,this._week.doy).week},pt.firstDayOfYear=function(){return this._week.doy},pt.firstDayOfWeek=function(){return this._week.dow},pt.weekdays=function(e,a){var t=_(this._weekdays)?this._weekdays:this._weekdays[e&&!0!==e&&this._weekdays.isFormat.test(a)?"format":"standalone"];return!0===e?Ue(t,this._week.dow):e?t[e.day()]:t},pt.weekdaysMin=function(e){return!0===e?Ue(this._weekdaysMin,this._week.dow):e?this._weekdaysMin[e.day()]:this._weekdaysMin},pt.weekdaysShort=function(e){return!0===e?Ue(this._weekdaysShort,this._week.dow):e?this._weekdaysShort[e.day()]:this._weekdaysShort},pt.weekdaysParse=function(e,a,t){var s,n,r;if(this._weekdaysParseExact)return function(e,a,t){var s,n,r,d=e.toLocaleLowerCase();if(!this._weekdaysParse)for(this._weekdaysParse=[],this._shortWeekdaysParse=[],this._minWeekdaysParse=[],s=0;s<7;++s)r=c([2e3,1]).day(s),this._minWeekdaysParse[s]=this.weekdaysMin(r,"").toLocaleLowerCase(),this._shortWeekdaysParse[s]=this.weekdaysShort(r,"").toLocaleLowerCase(),this._weekdaysParse[s]=this.weekdays(r,"").toLocaleLowerCase();return t?"dddd"===a?-1!==(n=ye.call(this._weekdaysParse,d))?n:null:"ddd"===a?-1!==(n=ye.call(this._shortWeekdaysParse,d))?n:null:-1!==(n=ye.call(this._minWeekdaysParse,d))?n:null:"dddd"===a?-1!==(n=ye.call(this._weekdaysParse,d))||-1!==(n=ye.call(this._shortWeekdaysParse,d))||-1!==(n=ye.call(this._minWeekdaysParse,d))?n:null:"ddd"===a?-1!==(n=ye.call(this._shortWeekdaysParse,d))||-1!==(n=ye.call(this._weekdaysParse,d))||-1!==(n=ye.call(this._minWeekdaysParse,d))?n:null:-1!==(n=ye.call(this._minWeekdaysParse,d))||-1!==(n=ye.call(this._weekdaysParse,d))||-1!==(n=ye.call(this._shortWeekdaysParse,d))?n:null}.call(this,e,a,t);for(this._weekdaysParse||(this._weekdaysParse=[],this._minWeekdaysParse=[],this._shortWeekdaysParse=[],this._fullWeekdaysParse=[]),s=0;s<7;s++){if(n=c([2e3,1]).day(s),t&&!this._fullWeekdaysParse[s]&&(this._fullWeekdaysParse[s]=new RegExp("^"+this.weekdays(n,"").replace(".","\\.?")+"$","i"),this._shortWeekdaysParse[s]=new RegExp("^"+this.weekdaysShort(n,"").replace(".","\\.?")+"$","i"),this._minWeekdaysParse[s]=new RegExp("^"+this.weekdaysMin(n,"").replace(".","\\.?")+"$","i")),this._weekdaysParse[s]||(r="^"+this.weekdays(n,"")+"|^"+this.weekdaysShort(n,"")+"|^"+this.weekdaysMin(n,""),this._weekdaysParse[s]=new RegExp(r.replace(".",""),"i")),t&&"dddd"===a&&this._fullWeekdaysParse[s].test(e))return s;if(t&&"ddd"===a&&this._shortWeekdaysParse[s].test(e))return s;if(t&&"dd"===a&&this._minWeekdaysParse[s].test(e))return s;if(!t&&this._weekdaysParse[s].test(e))return s}},pt.weekdaysRegex=function(e){return this._weekdaysParseExact?(h(this,"_weekdaysRegex")||$e.call(this),e?this._weekdaysStrictRegex:this._weekdaysRegex):(h(this,"_weekdaysRegex")||(this._weekdaysRegex=Ke),this._weekdaysStrictRegex&&e?this._weekdaysStrictRegex:this._weekdaysRegex)},pt.weekdaysShortRegex=function(e){return this._weekdaysParseExact?(h(this,"_weekdaysRegex")||$e.call(this),e?this._weekdaysShortStrictRegex:this._weekdaysShortRegex):(h(this,"_weekdaysShortRegex")||(this._weekdaysShortRegex=qe),this._weekdaysShortStrictRegex&&e?this._weekdaysShortStrictRegex:this._weekdaysShortRegex)},pt.weekdaysMinRegex=function(e){return this._weekdaysParseExact?(h(this,"_weekdaysRegex")||$e.call(this),e?this._weekdaysMinStrictRegex:this._weekdaysMinRegex):(h(this,"_weekdaysMinRegex")||(this._weekdaysMinRegex=Ze),this._weekdaysMinStrictRegex&&e?this._weekdaysMinStrictRegex:this._weekdaysMinRegex)},pt.isPM=function(e){return"p"===(e+"").toLowerCase().charAt(0)},pt.meridiem=function(e,a,t){return 11<e?t?"pm":"PM":t?"am":"AM"},oa("en",{eras:[{since:"0001-01-01",until:1/0,offset:1,name:"Anno Domini",narrow:"AD",abbr:"AD"},{since:"0000-12-31",until:-1/0,offset:1,name:"Before Christ",narrow:"BC",abbr:"BC"}],dayOfMonthOrdinalParse:/\d{1,2}(th|st|nd|rd)/,ordinal:function(e){var a=e%10;return e+(1===G(e%100/10)?"th":1==a?"st":2==a?"nd":3==a?"rd":"th")}}),M.lang=t("moment.lang is deprecated. Use moment.locale instead.",oa),M.langData=t("moment.langData is deprecated. Use moment.localeData instead.",ua);var gt=Math.abs;function wt(e,a,t,s){var n=Ga(a,t);return e._milliseconds+=s*n._milliseconds,e._days+=s*n._days,e._months+=s*n._months,e._bubble()}function vt(e){return e<0?Math.floor(e):Math.ceil(e)}function bt(e){return 4800*e/146097}function Ht(e){return 146097*e/4800}function St(e){return function(){return this.as(e)}}var jt=St("ms"),xt=St("s"),Ot=St("m"),Pt=St("h"),Wt=St("d"),At=St("w"),Et=St("M"),Ft=St("Q"),zt=St("y");function Nt(e){return function(){return this.isValid()?this._data[e]:NaN}}var Jt=Nt("milliseconds"),Rt=Nt("seconds"),Ct=Nt("minutes"),It=Nt("hours"),Ut=Nt("days"),Gt=Nt("months"),Vt=Nt("years");var Bt=Math.round,Kt={ss:44,s:45,m:45,h:22,d:26,w:null,M:11};function qt(e,a,t,s){var n=Ga(e).abs(),r=Bt(n.as("s")),d=Bt(n.as("m")),_=Bt(n.as("h")),i=Bt(n.as("d")),o=Bt(n.as("M")),m=Bt(n.as("w")),u=Bt(n.as("y")),l=(r<=t.ss?["s",r]:r<t.s&&["ss",r])||d<=1&&["m"]||d<t.m&&["mm",d]||_<=1&&["h"]||_<t.h&&["hh",_]||i<=1&&["d"]||i<t.d&&["dd",i];return null!=t.w&&(l=l||m<=1&&["w"]||m<t.w&&["ww",m]),(l=l||o<=1&&["M"]||o<t.M&&["MM",o]||u<=1&&["y"]||["yy",u])[2]=a,l[3]=0<+e,l[4]=s,function(e,a,t,s,n){return n.relativeTime(a||1,!!t,e,s)}.apply(null,l)}var Zt=Math.abs;function $t(e){return(0<e)-(e<0)||+e}function Qt(){if(!this.isValid())return this.localeData().invalidDate();var e,a,t,s,n,r,d,_,i=Zt(this._milliseconds)/1e3,o=Zt(this._days),m=Zt(this._months),u=this.asSeconds();return u?(e=U(i/60),a=U(e/60),i%=60,e%=60,t=U(m/12),m%=12,s=i?i.toFixed(3).replace(/\.?0+$/,""):"",n=u<0?"-":"",r=$t(this._months)!==$t(u)?"-":"",d=$t(this._days)!==$t(u)?"-":"",_=$t(this._milliseconds)!==$t(u)?"-":"",n+"P"+(t?r+t+"Y":"")+(m?r+m+"M":"")+(o?d+o+"D":"")+(a||e||i?"T":"")+(a?_+a+"H":"")+(e?_+e+"M":"")+(i?_+s+"S":"")):"P0D"}var Xt=Wa.prototype;Xt.isValid=function(){return this._isValid},Xt.abs=function(){var e=this._data;return this._milliseconds=gt(this._milliseconds),this._days=gt(this._days),this._months=gt(this._months),e.milliseconds=gt(e.milliseconds),e.seconds=gt(e.seconds),e.minutes=gt(e.minutes),e.hours=gt(e.hours),e.months=gt(e.months),e.years=gt(e.years),this},Xt.add=function(e,a){return wt(this,e,a,1)},Xt.subtract=function(e,a){return wt(this,e,a,-1)},Xt.as=function(e){if(!this.isValid())return NaN;var a,t,s=this._milliseconds;if("month"===(e=N(e))||"quarter"===e||"year"===e)switch(a=this._days+s/864e5,t=this._months+bt(a),e){case"month":return t;case"quarter":return t/3;case"year":return t/12}else switch(a=this._days+Math.round(Ht(this._months)),e){case"week":return a/7+s/6048e5;case"day":return a+s/864e5;case"hour":return 24*a+s/36e5;case"minute":return 1440*a+s/6e4;case"second":return 86400*a+s/1e3;case"millisecond":return Math.floor(864e5*a)+s;default:throw new Error("Unknown unit "+e)}},Xt.asMilliseconds=jt,Xt.asSeconds=xt,Xt.asMinutes=Ot,Xt.asHours=Pt,Xt.asDays=Wt,Xt.asWeeks=At,Xt.asMonths=Et,Xt.asQuarters=Ft,Xt.asYears=zt,Xt.valueOf=function(){return this.isValid()?this._milliseconds+864e5*this._days+this._months%12*2592e6+31536e6*G(this._months/12):NaN},Xt._bubble=function(){var e,a,t,s,n,r=this._milliseconds,d=this._days,_=this._months,i=this._data;return 0<=r&&0<=d&&0<=_||r<=0&&d<=0&&_<=0||(r+=864e5*vt(Ht(_)+d),_=d=0),i.milliseconds=r%1e3,e=U(r/1e3),i.seconds=e%60,a=U(e/60),i.minutes=a%60,t=U(a/60),i.hours=t%24,d+=U(t/24),_+=n=U(bt(d)),d-=vt(Ht(n)),s=U(_/12),_%=12,i.days=d,i.months=_,i.years=s,this},Xt.clone=function(){return Ga(this)},Xt.get=function(e){return e=N(e),this.isValid()?this[e+"s"]():NaN},Xt.milliseconds=Jt,Xt.seconds=Rt,Xt.minutes=Ct,Xt.hours=It,Xt.days=Ut,Xt.weeks=function(){return U(this.days()/7)},Xt.months=Gt,Xt.years=Vt,Xt.humanize=function(e,a){if(!this.isValid())return this.localeData().invalidDate();var t,s,n=!1,r=Kt;return"object"==typeof e&&(a=e,e=!1),"boolean"==typeof e&&(n=e),"object"==typeof a&&(r=Object.assign({},Kt,a),null!=a.s&&null==a.ss&&(r.ss=a.s-1)),t=this.localeData(),s=qt(this,!n,r,t),n&&(s=t.pastFuture(+this,s)),t.postformat(s)},Xt.toISOString=Qt,Xt.toString=Qt,Xt.toJSON=Qt,Xt.locale=at,Xt.localeData=st,Xt.toIsoString=t("toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)",Qt),Xt.lang=tt,W("X",0,0,"unix"),W("x",0,0,"valueOf"),le("x",ie),le("X",/[+-]?\d+(\.\d{1,3})?/),Le("X",function(e,a,t){t._d=new Date(1e3*parseFloat(e))}),Le("x",function(e,a,t){t._d=new Date(G(e))}),M.version="2.28.0",e=Sa,M.fn=yt,M.min=function(){return Oa("isBefore",[].slice.call(arguments,0))},M.max=function(){return Oa("isAfter",[].slice.call(arguments,0))},M.now=function(){return Date.now?Date.now():+new Date},M.utc=c,M.unix=function(e){return Sa(1e3*e)},M.months=function(e,a){return Dt(e,a,"months")},M.isDate=d,M.locale=oa,M.invalid=y,M.duration=Ga,M.isMoment=D,M.weekdays=function(e,a,t){return Tt(e,a,t,"weekdays")},M.parseZone=function(){return Sa.apply(null,arguments).parseZone()},M.localeData=ua,M.isDuration=Aa,M.monthsShort=function(e,a){return Dt(e,a,"monthsShort")},M.weekdaysMin=function(e,a,t){return Tt(e,a,t,"weekdaysMin")},M.defineLocale=ma,M.updateLocale=function(e,a){var t,s,n;return null!=a?(n=sa,null!=na[e]&&null!=na[e].parentLocale?na[e].set(b(na[e]._config,a)):(null!=(s=ia(e))&&(n=s._config),a=b(n,a),null==s&&(a.abbr=e),(t=new H(a)).parentLocale=na[e],na[e]=t),oa(e)):null!=na[e]&&(null!=na[e].parentLocale?(na[e]=na[e].parentLocale,e===oa()&&oa(e)):null!=na[e]&&delete na[e]),na[e]},M.locales=function(){return s(na)},M.weekdaysShort=function(e,a,t){return Tt(e,a,t,"weekdaysShort")},M.normalizeUnits=N,M.relativeTimeRounding=function(e){return void 0===e?Bt:"function"==typeof e&&(Bt=e,!0)},M.relativeTimeThreshold=function(e,a){return void 0!==Kt[e]&&(void 0===a?Kt[e]:(Kt[e]=a,"s"===e&&(Kt.ss=a-1),!0))},M.calendarFormat=function(e,a){var t=e.diff(a,"days",!0);return t<-6?"sameElse":t<-1?"lastWeek":t<0?"lastDay":t<1?"sameDay":t<2?"nextDay":t<7?"nextWeek":"sameElse"},M.prototype=yt,M.HTML5_FMT={DATETIME_LOCAL:"YYYY-MM-DDTHH:mm",DATETIME_LOCAL_SECONDS:"YYYY-MM-DDTHH:mm:ss",DATETIME_LOCAL_MS:"YYYY-MM-DDTHH:mm:ss.SSS",DATE:"YYYY-MM-DD",TIME:"HH:mm",TIME_SECONDS:"HH:mm:ss",TIME_MS:"HH:mm:ss.SSS",WEEK:"GGGG-[W]WW",MONTH:"YYYY-MM"},M.defineLocale("af",{months:"Januarie_Februarie_Maart_April_Mei_Junie_Julie_Augustus_September_Oktober_November_Desember".split("_"),monthsShort:"Jan_Feb_Mrt_Apr_Mei_Jun_Jul_Aug_Sep_Okt_Nov_Des".split("_"),weekdays:"Sondag_Maandag_Dinsdag_Woensdag_Donderdag_Vrydag_Saterdag".split("_"),weekdaysShort:"Son_Maa_Din_Woe_Don_Vry_Sat".split("_"),weekdaysMin:"So_Ma_Di_Wo_Do_Vr_Sa".split("_"),meridiemParse:/vm|nm/i,isPM:function(e){return/^nm$/i.test(e)},meridiem:function(e,a,t){return e<12?t?"vm":"VM":t?"nm":"NM"},longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Vandag om] LT",nextDay:"[M\xf4re om] LT",nextWeek:"dddd [om] LT",lastDay:"[Gister om] LT",lastWeek:"[Laas] dddd [om] LT",sameElse:"L"},relativeTime:{future:"oor %s",past:"%s gelede",s:"'n paar sekondes",ss:"%d sekondes",m:"'n minuut",mm:"%d minute",h:"'n uur",hh:"%d ure",d:"'n dag",dd:"%d dae",M:"'n maand",MM:"%d maande",y:"'n jaar",yy:"%d jaar"},dayOfMonthOrdinalParse:/\d{1,2}(ste|de)/,ordinal:function(e){return e+(1===e||8===e||20<=e?"ste":"de")},week:{dow:1,doy:4}});function es(e){return 0===e?0:1===e?1:2===e?2:3<=e%100&&e%100<=10?3:11<=e%100?4:5}function as(d){return function(e,a,t,s){var n=es(e),r=ts[d][es(e)];return 2===n&&(r=r[a?0:1]),r.replace(/%d/i,e)}}var ts={s:["\u0623\u0642\u0644 \u0645\u0646 \u062b\u0627\u0646\u064a\u0629","\u062b\u0627\u0646\u064a\u0629 \u0648\u0627\u062d\u062f\u0629",["\u062b\u0627\u0646\u064a\u062a\u0627\u0646","\u062b\u0627\u0646\u064a\u062a\u064a\u0646"],"%d \u062b\u0648\u0627\u0646","%d \u062b\u0627\u0646\u064a\u0629","%d \u062b\u0627\u0646\u064a\u0629"],m:["\u0623\u0642\u0644 \u0645\u0646 \u062f\u0642\u064a\u0642\u0629","\u062f\u0642\u064a\u0642\u0629 \u0648\u0627\u062d\u062f\u0629",["\u062f\u0642\u064a\u0642\u062a\u0627\u0646","\u062f\u0642\u064a\u0642\u062a\u064a\u0646"],"%d \u062f\u0642\u0627\u0626\u0642","%d \u062f\u0642\u064a\u0642\u0629","%d \u062f\u0642\u064a\u0642\u0629"],h:["\u0623\u0642\u0644 \u0645\u0646 \u0633\u0627\u0639\u0629","\u0633\u0627\u0639\u0629 \u0648\u0627\u062d\u062f\u0629",["\u0633\u0627\u0639\u062a\u0627\u0646","\u0633\u0627\u0639\u062a\u064a\u0646"],"%d \u0633\u0627\u0639\u0627\u062a","%d \u0633\u0627\u0639\u0629","%d \u0633\u0627\u0639\u0629"],d:["\u0623\u0642\u0644 \u0645\u0646 \u064a\u0648\u0645","\u064a\u0648\u0645 \u0648\u0627\u062d\u062f",["\u064a\u0648\u0645\u0627\u0646","\u064a\u0648\u0645\u064a\u0646"],"%d \u0623\u064a\u0627\u0645","%d \u064a\u0648\u0645\u064b\u0627","%d \u064a\u0648\u0645"],M:["\u0623\u0642\u0644 \u0645\u0646 \u0634\u0647\u0631","\u0634\u0647\u0631 \u0648\u0627\u062d\u062f",["\u0634\u0647\u0631\u0627\u0646","\u0634\u0647\u0631\u064a\u0646"],"%d \u0623\u0634\u0647\u0631","%d \u0634\u0647\u0631\u0627","%d \u0634\u0647\u0631"],y:["\u0623\u0642\u0644 \u0645\u0646 \u0639\u0627\u0645","\u0639\u0627\u0645 \u0648\u0627\u062d\u062f",["\u0639\u0627\u0645\u0627\u0646","\u0639\u0627\u0645\u064a\u0646"],"%d \u0623\u0639\u0648\u0627\u0645","%d \u0639\u0627\u0645\u064b\u0627","%d \u0639\u0627\u0645"]},ss=["\u062c\u0627\u0646\u0641\u064a","\u0641\u064a\u0641\u0631\u064a","\u0645\u0627\u0631\u0633","\u0623\u0641\u0631\u064a\u0644","\u0645\u0627\u064a","\u062c\u0648\u0627\u0646","\u062c\u0648\u064a\u0644\u064a\u0629","\u0623\u0648\u062a","\u0633\u0628\u062a\u0645\u0628\u0631","\u0623\u0643\u062a\u0648\u0628\u0631","\u0646\u0648\u0641\u0645\u0628\u0631","\u062f\u064a\u0633\u0645\u0628\u0631"];M.defineLocale("ar-dz",{months:ss,monthsShort:ss,weekdays:"\u0627\u0644\u0623\u062d\u062f_\u0627\u0644\u0625\u062b\u0646\u064a\u0646_\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621_\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621_\u0627\u0644\u062e\u0645\u064a\u0633_\u0627\u0644\u062c\u0645\u0639\u0629_\u0627\u0644\u0633\u0628\u062a".split("_"),weekdaysShort:"\u0623\u062d\u062f_\u0625\u062b\u0646\u064a\u0646_\u062b\u0644\u0627\u062b\u0627\u0621_\u0623\u0631\u0628\u0639\u0627\u0621_\u062e\u0645\u064a\u0633_\u062c\u0645\u0639\u0629_\u0633\u0628\u062a".split("_"),weekdaysMin:"\u062d_\u0646_\u062b_\u0631_\u062e_\u062c_\u0633".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"D/\u200fM/\u200fYYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},meridiemParse:/\u0635|\u0645/,isPM:function(e){return"\u0645"===e},meridiem:function(e,a,t){return e<12?"\u0635":"\u0645"},calendar:{sameDay:"[\u0627\u0644\u064a\u0648\u0645 \u0639\u0646\u062f \u0627\u0644\u0633\u0627\u0639\u0629] LT",nextDay:"[\u063a\u062f\u064b\u0627 \u0639\u0646\u062f \u0627\u0644\u0633\u0627\u0639\u0629] LT",nextWeek:"dddd [\u0639\u0646\u062f \u0627\u0644\u0633\u0627\u0639\u0629] LT",lastDay:"[\u0623\u0645\u0633 \u0639\u0646\u062f \u0627\u0644\u0633\u0627\u0639\u0629] LT",lastWeek:"dddd [\u0639\u0646\u062f \u0627\u0644\u0633\u0627\u0639\u0629] LT",sameElse:"L"},relativeTime:{future:"\u0628\u0639\u062f %s",past:"\u0645\u0646\u0630 %s",s:as("s"),ss:as("s"),m:as("m"),mm:as("m"),h:as("h"),hh:as("h"),d:as("d"),dd:as("d"),M:as("M"),MM:as("M"),y:as("y"),yy:as("y")},postformat:function(e){return e.replace(/,/g,"\u060c")},week:{dow:0,doy:4}}),M.defineLocale("ar-kw",{months:"\u064a\u0646\u0627\u064a\u0631_\u0641\u0628\u0631\u0627\u064a\u0631_\u0645\u0627\u0631\u0633_\u0623\u0628\u0631\u064a\u0644_\u0645\u0627\u064a_\u064a\u0648\u0646\u064a\u0648_\u064a\u0648\u0644\u064a\u0648\u0632_\u063a\u0634\u062a_\u0634\u062a\u0646\u0628\u0631_\u0623\u0643\u062a\u0648\u0628\u0631_\u0646\u0648\u0646\u0628\u0631_\u062f\u062c\u0646\u0628\u0631".split("_"),monthsShort:"\u064a\u0646\u0627\u064a\u0631_\u0641\u0628\u0631\u0627\u064a\u0631_\u0645\u0627\u0631\u0633_\u0623\u0628\u0631\u064a\u0644_\u0645\u0627\u064a_\u064a\u0648\u0646\u064a\u0648_\u064a\u0648\u0644\u064a\u0648\u0632_\u063a\u0634\u062a_\u0634\u062a\u0646\u0628\u0631_\u0623\u0643\u062a\u0648\u0628\u0631_\u0646\u0648\u0646\u0628\u0631_\u062f\u062c\u0646\u0628\u0631".split("_"),weekdays:"\u0627\u0644\u0623\u062d\u062f_\u0627\u0644\u0625\u062a\u0646\u064a\u0646_\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621_\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621_\u0627\u0644\u062e\u0645\u064a\u0633_\u0627\u0644\u062c\u0645\u0639\u0629_\u0627\u0644\u0633\u0628\u062a".split("_"),weekdaysShort:"\u0627\u062d\u062f_\u0627\u062a\u0646\u064a\u0646_\u062b\u0644\u0627\u062b\u0627\u0621_\u0627\u0631\u0628\u0639\u0627\u0621_\u062e\u0645\u064a\u0633_\u062c\u0645\u0639\u0629_\u0633\u0628\u062a".split("_"),weekdaysMin:"\u062d_\u0646_\u062b_\u0631_\u062e_\u062c_\u0633".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[\u0627\u0644\u064a\u0648\u0645 \u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",nextDay:"[\u063a\u062f\u0627 \u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",nextWeek:"dddd [\u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",lastDay:"[\u0623\u0645\u0633 \u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",lastWeek:"dddd [\u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",sameElse:"L"},relativeTime:{future:"\u0641\u064a %s",past:"\u0645\u0646\u0630 %s",s:"\u062b\u0648\u0627\u0646",ss:"%d \u062b\u0627\u0646\u064a\u0629",m:"\u062f\u0642\u064a\u0642\u0629",mm:"%d \u062f\u0642\u0627\u0626\u0642",h:"\u0633\u0627\u0639\u0629",hh:"%d \u0633\u0627\u0639\u0627\u062a",d:"\u064a\u0648\u0645",dd:"%d \u0623\u064a\u0627\u0645",M:"\u0634\u0647\u0631",MM:"%d \u0623\u0634\u0647\u0631",y:"\u0633\u0646\u0629",yy:"%d \u0633\u0646\u0648\u0627\u062a"},week:{dow:0,doy:12}});function ns(e){return 0===e?0:1===e?1:2===e?2:3<=e%100&&e%100<=10?3:11<=e%100?4:5}function rs(d){return function(e,a,t,s){var n=ns(e),r=_s[d][ns(e)];return 2===n&&(r=r[a?0:1]),r.replace(/%d/i,e)}}var ds={1:"1",2:"2",3:"3",4:"4",5:"5",6:"6",7:"7",8:"8",9:"9",0:"0"},_s={s:["\u0623\u0642\u0644 \u0645\u0646 \u062b\u0627\u0646\u064a\u0629","\u062b\u0627\u0646\u064a\u0629 \u0648\u0627\u062d\u062f\u0629",["\u062b\u0627\u0646\u064a\u062a\u0627\u0646","\u062b\u0627\u0646\u064a\u062a\u064a\u0646"],"%d \u062b\u0648\u0627\u0646","%d \u062b\u0627\u0646\u064a\u0629","%d \u062b\u0627\u0646\u064a\u0629"],m:["\u0623\u0642\u0644 \u0645\u0646 \u062f\u0642\u064a\u0642\u0629","\u062f\u0642\u064a\u0642\u0629 \u0648\u0627\u062d\u062f\u0629",["\u062f\u0642\u064a\u0642\u062a\u0627\u0646","\u062f\u0642\u064a\u0642\u062a\u064a\u0646"],"%d \u062f\u0642\u0627\u0626\u0642","%d \u062f\u0642\u064a\u0642\u0629","%d \u062f\u0642\u064a\u0642\u0629"],h:["\u0623\u0642\u0644 \u0645\u0646 \u0633\u0627\u0639\u0629","\u0633\u0627\u0639\u0629 \u0648\u0627\u062d\u062f\u0629",["\u0633\u0627\u0639\u062a\u0627\u0646","\u0633\u0627\u0639\u062a\u064a\u0646"],"%d \u0633\u0627\u0639\u0627\u062a","%d \u0633\u0627\u0639\u0629","%d \u0633\u0627\u0639\u0629"],d:["\u0623\u0642\u0644 \u0645\u0646 \u064a\u0648\u0645","\u064a\u0648\u0645 \u0648\u0627\u062d\u062f",["\u064a\u0648\u0645\u0627\u0646","\u064a\u0648\u0645\u064a\u0646"],"%d \u0623\u064a\u0627\u0645","%d \u064a\u0648\u0645\u064b\u0627","%d \u064a\u0648\u0645"],M:["\u0623\u0642\u0644 \u0645\u0646 \u0634\u0647\u0631","\u0634\u0647\u0631 \u0648\u0627\u062d\u062f",["\u0634\u0647\u0631\u0627\u0646","\u0634\u0647\u0631\u064a\u0646"],"%d \u0623\u0634\u0647\u0631","%d \u0634\u0647\u0631\u0627","%d \u0634\u0647\u0631"],y:["\u0623\u0642\u0644 \u0645\u0646 \u0639\u0627\u0645","\u0639\u0627\u0645 \u0648\u0627\u062d\u062f",["\u0639\u0627\u0645\u0627\u0646","\u0639\u0627\u0645\u064a\u0646"],"%d \u0623\u0639\u0648\u0627\u0645","%d \u0639\u0627\u0645\u064b\u0627","%d \u0639\u0627\u0645"]},is=["\u064a\u0646\u0627\u064a\u0631","\u0641\u0628\u0631\u0627\u064a\u0631","\u0645\u0627\u0631\u0633","\u0623\u0628\u0631\u064a\u0644","\u0645\u0627\u064a\u0648","\u064a\u0648\u0646\u064a\u0648","\u064a\u0648\u0644\u064a\u0648","\u0623\u063a\u0633\u0637\u0633","\u0633\u0628\u062a\u0645\u0628\u0631","\u0623\u0643\u062a\u0648\u0628\u0631","\u0646\u0648\u0641\u0645\u0628\u0631","\u062f\u064a\u0633\u0645\u0628\u0631"];M.defineLocale("ar-ly",{months:is,monthsShort:is,weekdays:"\u0627\u0644\u0623\u062d\u062f_\u0627\u0644\u0625\u062b\u0646\u064a\u0646_\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621_\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621_\u0627\u0644\u062e\u0645\u064a\u0633_\u0627\u0644\u062c\u0645\u0639\u0629_\u0627\u0644\u0633\u0628\u062a".split("_"),weekdaysShort:"\u0623\u062d\u062f_\u0625\u062b\u0646\u064a\u0646_\u062b\u0644\u0627\u062b\u0627\u0621_\u0623\u0631\u0628\u0639\u0627\u0621_\u062e\u0645\u064a\u0633_\u062c\u0645\u0639\u0629_\u0633\u0628\u062a".split("_"),weekdaysMin:"\u062d_\u0646_\u062b_\u0631_\u062e_\u062c_\u0633".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"D/\u200fM/\u200fYYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},meridiemParse:/\u0635|\u0645/,isPM:function(e){return"\u0645"===e},meridiem:function(e,a,t){return e<12?"\u0635":"\u0645"},calendar:{sameDay:"[\u0627\u0644\u064a\u0648\u0645 \u0639\u0646\u062f \u0627\u0644\u0633\u0627\u0639\u0629] LT",nextDay:"[\u063a\u062f\u064b\u0627 \u0639\u0646\u062f \u0627\u0644\u0633\u0627\u0639\u0629] LT",nextWeek:"dddd [\u0639\u0646\u062f \u0627\u0644\u0633\u0627\u0639\u0629] LT",lastDay:"[\u0623\u0645\u0633 \u0639\u0646\u062f \u0627\u0644\u0633\u0627\u0639\u0629] LT",lastWeek:"dddd [\u0639\u0646\u062f \u0627\u0644\u0633\u0627\u0639\u0629] LT",sameElse:"L"},relativeTime:{future:"\u0628\u0639\u062f %s",past:"\u0645\u0646\u0630 %s",s:rs("s"),ss:rs("s"),m:rs("m"),mm:rs("m"),h:rs("h"),hh:rs("h"),d:rs("d"),dd:rs("d"),M:rs("M"),MM:rs("M"),y:rs("y"),yy:rs("y")},preparse:function(e){return e.replace(/\u060c/g,",")},postformat:function(e){return e.replace(/\d/g,function(e){return ds[e]}).replace(/,/g,"\u060c")},week:{dow:6,doy:12}}),M.defineLocale("ar-ma",{months:"\u064a\u0646\u0627\u064a\u0631_\u0641\u0628\u0631\u0627\u064a\u0631_\u0645\u0627\u0631\u0633_\u0623\u0628\u0631\u064a\u0644_\u0645\u0627\u064a_\u064a\u0648\u0646\u064a\u0648_\u064a\u0648\u0644\u064a\u0648\u0632_\u063a\u0634\u062a_\u0634\u062a\u0646\u0628\u0631_\u0623\u0643\u062a\u0648\u0628\u0631_\u0646\u0648\u0646\u0628\u0631_\u062f\u062c\u0646\u0628\u0631".split("_"),monthsShort:"\u064a\u0646\u0627\u064a\u0631_\u0641\u0628\u0631\u0627\u064a\u0631_\u0645\u0627\u0631\u0633_\u0623\u0628\u0631\u064a\u0644_\u0645\u0627\u064a_\u064a\u0648\u0646\u064a\u0648_\u064a\u0648\u0644\u064a\u0648\u0632_\u063a\u0634\u062a_\u0634\u062a\u0646\u0628\u0631_\u0623\u0643\u062a\u0648\u0628\u0631_\u0646\u0648\u0646\u0628\u0631_\u062f\u062c\u0646\u0628\u0631".split("_"),weekdays:"\u0627\u0644\u0623\u062d\u062f_\u0627\u0644\u0625\u062b\u0646\u064a\u0646_\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621_\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621_\u0627\u0644\u062e\u0645\u064a\u0633_\u0627\u0644\u062c\u0645\u0639\u0629_\u0627\u0644\u0633\u0628\u062a".split("_"),weekdaysShort:"\u0627\u062d\u062f_\u0627\u062b\u0646\u064a\u0646_\u062b\u0644\u0627\u062b\u0627\u0621_\u0627\u0631\u0628\u0639\u0627\u0621_\u062e\u0645\u064a\u0633_\u062c\u0645\u0639\u0629_\u0633\u0628\u062a".split("_"),weekdaysMin:"\u062d_\u0646_\u062b_\u0631_\u062e_\u062c_\u0633".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[\u0627\u0644\u064a\u0648\u0645 \u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",nextDay:"[\u063a\u062f\u0627 \u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",nextWeek:"dddd [\u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",lastDay:"[\u0623\u0645\u0633 \u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",lastWeek:"dddd [\u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",sameElse:"L"},relativeTime:{future:"\u0641\u064a %s",past:"\u0645\u0646\u0630 %s",s:"\u062b\u0648\u0627\u0646",ss:"%d \u062b\u0627\u0646\u064a\u0629",m:"\u062f\u0642\u064a\u0642\u0629",mm:"%d \u062f\u0642\u0627\u0626\u0642",h:"\u0633\u0627\u0639\u0629",hh:"%d \u0633\u0627\u0639\u0627\u062a",d:"\u064a\u0648\u0645",dd:"%d \u0623\u064a\u0627\u0645",M:"\u0634\u0647\u0631",MM:"%d \u0623\u0634\u0647\u0631",y:"\u0633\u0646\u0629",yy:"%d \u0633\u0646\u0648\u0627\u062a"},week:{dow:6,doy:12}});var os={1:"\u0661",2:"\u0662",3:"\u0663",4:"\u0664",5:"\u0665",6:"\u0666",7:"\u0667",8:"\u0668",9:"\u0669",0:"\u0660"},ms={"\u0661":"1","\u0662":"2","\u0663":"3","\u0664":"4","\u0665":"5","\u0666":"6","\u0667":"7","\u0668":"8","\u0669":"9","\u0660":"0"};M.defineLocale("ar-sa",{months:"\u064a\u0646\u0627\u064a\u0631_\u0641\u0628\u0631\u0627\u064a\u0631_\u0645\u0627\u0631\u0633_\u0623\u0628\u0631\u064a\u0644_\u0645\u0627\u064a\u0648_\u064a\u0648\u0646\u064a\u0648_\u064a\u0648\u0644\u064a\u0648_\u0623\u063a\u0633\u0637\u0633_\u0633\u0628\u062a\u0645\u0628\u0631_\u0623\u0643\u062a\u0648\u0628\u0631_\u0646\u0648\u0641\u0645\u0628\u0631_\u062f\u064a\u0633\u0645\u0628\u0631".split("_"),monthsShort:"\u064a\u0646\u0627\u064a\u0631_\u0641\u0628\u0631\u0627\u064a\u0631_\u0645\u0627\u0631\u0633_\u0623\u0628\u0631\u064a\u0644_\u0645\u0627\u064a\u0648_\u064a\u0648\u0646\u064a\u0648_\u064a\u0648\u0644\u064a\u0648_\u0623\u063a\u0633\u0637\u0633_\u0633\u0628\u062a\u0645\u0628\u0631_\u0623\u0643\u062a\u0648\u0628\u0631_\u0646\u0648\u0641\u0645\u0628\u0631_\u062f\u064a\u0633\u0645\u0628\u0631".split("_"),weekdays:"\u0627\u0644\u0623\u062d\u062f_\u0627\u0644\u0625\u062b\u0646\u064a\u0646_\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621_\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621_\u0627\u0644\u062e\u0645\u064a\u0633_\u0627\u0644\u062c\u0645\u0639\u0629_\u0627\u0644\u0633\u0628\u062a".split("_"),weekdaysShort:"\u0623\u062d\u062f_\u0625\u062b\u0646\u064a\u0646_\u062b\u0644\u0627\u062b\u0627\u0621_\u0623\u0631\u0628\u0639\u0627\u0621_\u062e\u0645\u064a\u0633_\u062c\u0645\u0639\u0629_\u0633\u0628\u062a".split("_"),weekdaysMin:"\u062d_\u0646_\u062b_\u0631_\u062e_\u062c_\u0633".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},meridiemParse:/\u0635|\u0645/,isPM:function(e){return"\u0645"===e},meridiem:function(e,a,t){return e<12?"\u0635":"\u0645"},calendar:{sameDay:"[\u0627\u0644\u064a\u0648\u0645 \u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",nextDay:"[\u063a\u062f\u0627 \u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",nextWeek:"dddd [\u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",lastDay:"[\u0623\u0645\u0633 \u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",lastWeek:"dddd [\u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",sameElse:"L"},relativeTime:{future:"\u0641\u064a %s",past:"\u0645\u0646\u0630 %s",s:"\u062b\u0648\u0627\u0646",ss:"%d \u062b\u0627\u0646\u064a\u0629",m:"\u062f\u0642\u064a\u0642\u0629",mm:"%d \u062f\u0642\u0627\u0626\u0642",h:"\u0633\u0627\u0639\u0629",hh:"%d \u0633\u0627\u0639\u0627\u062a",d:"\u064a\u0648\u0645",dd:"%d \u0623\u064a\u0627\u0645",M:"\u0634\u0647\u0631",MM:"%d \u0623\u0634\u0647\u0631",y:"\u0633\u0646\u0629",yy:"%d \u0633\u0646\u0648\u0627\u062a"},preparse:function(e){return e.replace(/[\u0661\u0662\u0663\u0664\u0665\u0666\u0667\u0668\u0669\u0660]/g,function(e){return ms[e]}).replace(/\u060c/g,",")},postformat:function(e){return e.replace(/\d/g,function(e){return os[e]}).replace(/,/g,"\u060c")},week:{dow:0,doy:6}}),M.defineLocale("ar-tn",{months:"\u062c\u0627\u0646\u0641\u064a_\u0641\u064a\u0641\u0631\u064a_\u0645\u0627\u0631\u0633_\u0623\u0641\u0631\u064a\u0644_\u0645\u0627\u064a_\u062c\u0648\u0627\u0646_\u062c\u0648\u064a\u0644\u064a\u0629_\u0623\u0648\u062a_\u0633\u0628\u062a\u0645\u0628\u0631_\u0623\u0643\u062a\u0648\u0628\u0631_\u0646\u0648\u0641\u0645\u0628\u0631_\u062f\u064a\u0633\u0645\u0628\u0631".split("_"),monthsShort:"\u062c\u0627\u0646\u0641\u064a_\u0641\u064a\u0641\u0631\u064a_\u0645\u0627\u0631\u0633_\u0623\u0641\u0631\u064a\u0644_\u0645\u0627\u064a_\u062c\u0648\u0627\u0646_\u062c\u0648\u064a\u0644\u064a\u0629_\u0623\u0648\u062a_\u0633\u0628\u062a\u0645\u0628\u0631_\u0623\u0643\u062a\u0648\u0628\u0631_\u0646\u0648\u0641\u0645\u0628\u0631_\u062f\u064a\u0633\u0645\u0628\u0631".split("_"),weekdays:"\u0627\u0644\u0623\u062d\u062f_\u0627\u0644\u0625\u062b\u0646\u064a\u0646_\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621_\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621_\u0627\u0644\u062e\u0645\u064a\u0633_\u0627\u0644\u062c\u0645\u0639\u0629_\u0627\u0644\u0633\u0628\u062a".split("_"),weekdaysShort:"\u0623\u062d\u062f_\u0625\u062b\u0646\u064a\u0646_\u062b\u0644\u0627\u062b\u0627\u0621_\u0623\u0631\u0628\u0639\u0627\u0621_\u062e\u0645\u064a\u0633_\u062c\u0645\u0639\u0629_\u0633\u0628\u062a".split("_"),weekdaysMin:"\u062d_\u0646_\u062b_\u0631_\u062e_\u062c_\u0633".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[\u0627\u0644\u064a\u0648\u0645 \u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",nextDay:"[\u063a\u062f\u0627 \u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",nextWeek:"dddd [\u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",lastDay:"[\u0623\u0645\u0633 \u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",lastWeek:"dddd [\u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",sameElse:"L"},relativeTime:{future:"\u0641\u064a %s",past:"\u0645\u0646\u0630 %s",s:"\u062b\u0648\u0627\u0646",ss:"%d \u062b\u0627\u0646\u064a\u0629",m:"\u062f\u0642\u064a\u0642\u0629",mm:"%d \u062f\u0642\u0627\u0626\u0642",h:"\u0633\u0627\u0639\u0629",hh:"%d \u0633\u0627\u0639\u0627\u062a",d:"\u064a\u0648\u0645",dd:"%d \u0623\u064a\u0627\u0645",M:"\u0634\u0647\u0631",MM:"%d \u0623\u0634\u0647\u0631",y:"\u0633\u0646\u0629",yy:"%d \u0633\u0646\u0648\u0627\u062a"},week:{dow:1,doy:4}});function us(e){return 0===e?0:1===e?1:2===e?2:3<=e%100&&e%100<=10?3:11<=e%100?4:5}function ls(d){return function(e,a,t,s){var n=us(e),r=cs[d][us(e)];return 2===n&&(r=r[a?0:1]),r.replace(/%d/i,e)}}var Ms={1:"\u0661",2:"\u0662",3:"\u0663",4:"\u0664",5:"\u0665",6:"\u0666",7:"\u0667",8:"\u0668",9:"\u0669",0:"\u0660"},hs={"\u0661":"1","\u0662":"2","\u0663":"3","\u0664":"4","\u0665":"5","\u0666":"6","\u0667":"7","\u0668":"8","\u0669":"9","\u0660":"0"},cs={s:["\u0623\u0642\u0644 \u0645\u0646 \u062b\u0627\u0646\u064a\u0629","\u062b\u0627\u0646\u064a\u0629 \u0648\u0627\u062d\u062f\u0629",["\u062b\u0627\u0646\u064a\u062a\u0627\u0646","\u062b\u0627\u0646\u064a\u062a\u064a\u0646"],"%d \u062b\u0648\u0627\u0646","%d \u062b\u0627\u0646\u064a\u0629","%d \u062b\u0627\u0646\u064a\u0629"],m:["\u0623\u0642\u0644 \u0645\u0646 \u062f\u0642\u064a\u0642\u0629","\u062f\u0642\u064a\u0642\u0629 \u0648\u0627\u062d\u062f\u0629",["\u062f\u0642\u064a\u0642\u062a\u0627\u0646","\u062f\u0642\u064a\u0642\u062a\u064a\u0646"],"%d \u062f\u0642\u0627\u0626\u0642","%d \u062f\u0642\u064a\u0642\u0629","%d \u062f\u0642\u064a\u0642\u0629"],h:["\u0623\u0642\u0644 \u0645\u0646 \u0633\u0627\u0639\u0629","\u0633\u0627\u0639\u0629 \u0648\u0627\u062d\u062f\u0629",["\u0633\u0627\u0639\u062a\u0627\u0646","\u0633\u0627\u0639\u062a\u064a\u0646"],"%d \u0633\u0627\u0639\u0627\u062a","%d \u0633\u0627\u0639\u0629","%d \u0633\u0627\u0639\u0629"],d:["\u0623\u0642\u0644 \u0645\u0646 \u064a\u0648\u0645","\u064a\u0648\u0645 \u0648\u0627\u062d\u062f",["\u064a\u0648\u0645\u0627\u0646","\u064a\u0648\u0645\u064a\u0646"],"%d \u0623\u064a\u0627\u0645","%d \u064a\u0648\u0645\u064b\u0627","%d \u064a\u0648\u0645"],M:["\u0623\u0642\u0644 \u0645\u0646 \u0634\u0647\u0631","\u0634\u0647\u0631 \u0648\u0627\u062d\u062f",["\u0634\u0647\u0631\u0627\u0646","\u0634\u0647\u0631\u064a\u0646"],"%d \u0623\u0634\u0647\u0631","%d \u0634\u0647\u0631\u0627","%d \u0634\u0647\u0631"],y:["\u0623\u0642\u0644 \u0645\u0646 \u0639\u0627\u0645","\u0639\u0627\u0645 \u0648\u0627\u062d\u062f",["\u0639\u0627\u0645\u0627\u0646","\u0639\u0627\u0645\u064a\u0646"],"%d \u0623\u0639\u0648\u0627\u0645","%d \u0639\u0627\u0645\u064b\u0627","%d \u0639\u0627\u0645"]},Ls=["\u064a\u0646\u0627\u064a\u0631","\u0641\u0628\u0631\u0627\u064a\u0631","\u0645\u0627\u0631\u0633","\u0623\u0628\u0631\u064a\u0644","\u0645\u0627\u064a\u0648","\u064a\u0648\u0646\u064a\u0648","\u064a\u0648\u0644\u064a\u0648","\u0623\u063a\u0633\u0637\u0633","\u0633\u0628\u062a\u0645\u0628\u0631","\u0623\u0643\u062a\u0648\u0628\u0631","\u0646\u0648\u0641\u0645\u0628\u0631","\u062f\u064a\u0633\u0645\u0628\u0631"];M.defineLocale("ar",{months:Ls,monthsShort:Ls,weekdays:"\u0627\u0644\u0623\u062d\u062f_\u0627\u0644\u0625\u062b\u0646\u064a\u0646_\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621_\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621_\u0627\u0644\u062e\u0645\u064a\u0633_\u0627\u0644\u062c\u0645\u0639\u0629_\u0627\u0644\u0633\u0628\u062a".split("_"),weekdaysShort:"\u0623\u062d\u062f_\u0625\u062b\u0646\u064a\u0646_\u062b\u0644\u0627\u062b\u0627\u0621_\u0623\u0631\u0628\u0639\u0627\u0621_\u062e\u0645\u064a\u0633_\u062c\u0645\u0639\u0629_\u0633\u0628\u062a".split("_"),weekdaysMin:"\u062d_\u0646_\u062b_\u0631_\u062e_\u062c_\u0633".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"D/\u200fM/\u200fYYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},meridiemParse:/\u0635|\u0645/,isPM:function(e){return"\u0645"===e},meridiem:function(e,a,t){return e<12?"\u0635":"\u0645"},calendar:{sameDay:"[\u0627\u0644\u064a\u0648\u0645 \u0639\u0646\u062f \u0627\u0644\u0633\u0627\u0639\u0629] LT",nextDay:"[\u063a\u062f\u064b\u0627 \u0639\u0646\u062f \u0627\u0644\u0633\u0627\u0639\u0629] LT",nextWeek:"dddd [\u0639\u0646\u062f \u0627\u0644\u0633\u0627\u0639\u0629] LT",lastDay:"[\u0623\u0645\u0633 \u0639\u0646\u062f \u0627\u0644\u0633\u0627\u0639\u0629] LT",lastWeek:"dddd [\u0639\u0646\u062f \u0627\u0644\u0633\u0627\u0639\u0629] LT",sameElse:"L"},relativeTime:{future:"\u0628\u0639\u062f %s",past:"\u0645\u0646\u0630 %s",s:ls("s"),ss:ls("s"),m:ls("m"),mm:ls("m"),h:ls("h"),hh:ls("h"),d:ls("d"),dd:ls("d"),M:ls("M"),MM:ls("M"),y:ls("y"),yy:ls("y")},preparse:function(e){return e.replace(/[\u0661\u0662\u0663\u0664\u0665\u0666\u0667\u0668\u0669\u0660]/g,function(e){return hs[e]}).replace(/\u060c/g,",")},postformat:function(e){return e.replace(/\d/g,function(e){return Ms[e]}).replace(/,/g,"\u060c")},week:{dow:6,doy:12}});var Ys={1:"-inci",5:"-inci",8:"-inci",70:"-inci",80:"-inci",2:"-nci",7:"-nci",20:"-nci",50:"-nci",3:"-\xfcnc\xfc",4:"-\xfcnc\xfc",100:"-\xfcnc\xfc",6:"-nc\u0131",9:"-uncu",10:"-uncu",30:"-uncu",60:"-\u0131nc\u0131",90:"-\u0131nc\u0131"};function ys(e,a,t){var s,n;return"m"===t?a?"\u0445\u0432\u0456\u043b\u0456\u043d\u0430":"\u0445\u0432\u0456\u043b\u0456\u043d\u0443":"h"===t?a?"\u0433\u0430\u0434\u0437\u0456\u043d\u0430":"\u0433\u0430\u0434\u0437\u0456\u043d\u0443":e+" "+(s=+e,n={ss:a?"\u0441\u0435\u043a\u0443\u043d\u0434\u0430_\u0441\u0435\u043a\u0443\u043d\u0434\u044b_\u0441\u0435\u043a\u0443\u043d\u0434":"\u0441\u0435\u043a\u0443\u043d\u0434\u0443_\u0441\u0435\u043a\u0443\u043d\u0434\u044b_\u0441\u0435\u043a\u0443\u043d\u0434",mm:a?"\u0445\u0432\u0456\u043b\u0456\u043d\u0430_\u0445\u0432\u0456\u043b\u0456\u043d\u044b_\u0445\u0432\u0456\u043b\u0456\u043d":"\u0445\u0432\u0456\u043b\u0456\u043d\u0443_\u0445\u0432\u0456\u043b\u0456\u043d\u044b_\u0445\u0432\u0456\u043b\u0456\u043d",hh:a?"\u0433\u0430\u0434\u0437\u0456\u043d\u0430_\u0433\u0430\u0434\u0437\u0456\u043d\u044b_\u0433\u0430\u0434\u0437\u0456\u043d":"\u0433\u0430\u0434\u0437\u0456\u043d\u0443_\u0433\u0430\u0434\u0437\u0456\u043d\u044b_\u0433\u0430\u0434\u0437\u0456\u043d",dd:"\u0434\u0437\u0435\u043d\u044c_\u0434\u043d\u0456_\u0434\u0437\u0451\u043d",MM:"\u043c\u0435\u0441\u044f\u0446_\u043c\u0435\u0441\u044f\u0446\u044b_\u043c\u0435\u0441\u044f\u0446\u0430\u045e",yy:"\u0433\u043e\u0434_\u0433\u0430\u0434\u044b_\u0433\u0430\u0434\u043e\u045e"}[t].split("_"),s%10==1&&s%100!=11?n[0]:2<=s%10&&s%10<=4&&(s%100<10||20<=s%100)?n[1]:n[2])}M.defineLocale("az",{months:"yanvar_fevral_mart_aprel_may_iyun_iyul_avqust_sentyabr_oktyabr_noyabr_dekabr".split("_"),monthsShort:"yan_fev_mar_apr_may_iyn_iyl_avq_sen_okt_noy_dek".split("_"),weekdays:"Bazar_Bazar ert\u0259si_\xc7\u0259r\u015f\u0259nb\u0259 ax\u015fam\u0131_\xc7\u0259r\u015f\u0259nb\u0259_C\xfcm\u0259 ax\u015fam\u0131_C\xfcm\u0259_\u015e\u0259nb\u0259".split("_"),weekdaysShort:"Baz_BzE_\xc7Ax_\xc7\u0259r_CAx_C\xfcm_\u015e\u0259n".split("_"),weekdaysMin:"Bz_BE_\xc7A_\xc7\u0259_CA_C\xfc_\u015e\u0259".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[bug\xfcn saat] LT",nextDay:"[sabah saat] LT",nextWeek:"[g\u0259l\u0259n h\u0259ft\u0259] dddd [saat] LT",lastDay:"[d\xfcn\u0259n] LT",lastWeek:"[ke\xe7\u0259n h\u0259ft\u0259] dddd [saat] LT",sameElse:"L"},relativeTime:{future:"%s sonra",past:"%s \u0259vv\u0259l",s:"bir ne\xe7\u0259 saniy\u0259",ss:"%d saniy\u0259",m:"bir d\u0259qiq\u0259",mm:"%d d\u0259qiq\u0259",h:"bir saat",hh:"%d saat",d:"bir g\xfcn",dd:"%d g\xfcn",M:"bir ay",MM:"%d ay",y:"bir il",yy:"%d il"},meridiemParse:/gec\u0259|s\u0259h\u0259r|g\xfcnd\xfcz|ax\u015fam/,isPM:function(e){return/^(g\xfcnd\xfcz|ax\u015fam)$/.test(e)},meridiem:function(e,a,t){return e<4?"gec\u0259":e<12?"s\u0259h\u0259r":e<17?"g\xfcnd\xfcz":"ax\u015fam"},dayOfMonthOrdinalParse:/\d{1,2}-(\u0131nc\u0131|inci|nci|\xfcnc\xfc|nc\u0131|uncu)/,ordinal:function(e){if(0===e)return e+"-\u0131nc\u0131";var a=e%10;return e+(Ys[a]||Ys[e%100-a]||Ys[100<=e?100:null])},week:{dow:1,doy:7}}),M.defineLocale("be",{months:{format:"\u0441\u0442\u0443\u0434\u0437\u0435\u043d\u044f_\u043b\u044e\u0442\u0430\u0433\u0430_\u0441\u0430\u043a\u0430\u0432\u0456\u043a\u0430_\u043a\u0440\u0430\u0441\u0430\u0432\u0456\u043a\u0430_\u0442\u0440\u0430\u045e\u043d\u044f_\u0447\u044d\u0440\u0432\u0435\u043d\u044f_\u043b\u0456\u043f\u0435\u043d\u044f_\u0436\u043d\u0456\u045e\u043d\u044f_\u0432\u0435\u0440\u0430\u0441\u043d\u044f_\u043a\u0430\u0441\u0442\u0440\u044b\u0447\u043d\u0456\u043a\u0430_\u043b\u0456\u0441\u0442\u0430\u043f\u0430\u0434\u0430_\u0441\u043d\u0435\u0436\u043d\u044f".split("_"),standalone:"\u0441\u0442\u0443\u0434\u0437\u0435\u043d\u044c_\u043b\u044e\u0442\u044b_\u0441\u0430\u043a\u0430\u0432\u0456\u043a_\u043a\u0440\u0430\u0441\u0430\u0432\u0456\u043a_\u0442\u0440\u0430\u0432\u0435\u043d\u044c_\u0447\u044d\u0440\u0432\u0435\u043d\u044c_\u043b\u0456\u043f\u0435\u043d\u044c_\u0436\u043d\u0456\u0432\u0435\u043d\u044c_\u0432\u0435\u0440\u0430\u0441\u0435\u043d\u044c_\u043a\u0430\u0441\u0442\u0440\u044b\u0447\u043d\u0456\u043a_\u043b\u0456\u0441\u0442\u0430\u043f\u0430\u0434_\u0441\u043d\u0435\u0436\u0430\u043d\u044c".split("_")},monthsShort:"\u0441\u0442\u0443\u0434_\u043b\u044e\u0442_\u0441\u0430\u043a_\u043a\u0440\u0430\u0441_\u0442\u0440\u0430\u0432_\u0447\u044d\u0440\u0432_\u043b\u0456\u043f_\u0436\u043d\u0456\u0432_\u0432\u0435\u0440_\u043a\u0430\u0441\u0442_\u043b\u0456\u0441\u0442_\u0441\u043d\u0435\u0436".split("_"),weekdays:{format:"\u043d\u044f\u0434\u0437\u0435\u043b\u044e_\u043f\u0430\u043d\u044f\u0434\u0437\u0435\u043b\u0430\u043a_\u0430\u045e\u0442\u043e\u0440\u0430\u043a_\u0441\u0435\u0440\u0430\u0434\u0443_\u0447\u0430\u0446\u0432\u0435\u0440_\u043f\u044f\u0442\u043d\u0456\u0446\u0443_\u0441\u0443\u0431\u043e\u0442\u0443".split("_"),standalone:"\u043d\u044f\u0434\u0437\u0435\u043b\u044f_\u043f\u0430\u043d\u044f\u0434\u0437\u0435\u043b\u0430\u043a_\u0430\u045e\u0442\u043e\u0440\u0430\u043a_\u0441\u0435\u0440\u0430\u0434\u0430_\u0447\u0430\u0446\u0432\u0435\u0440_\u043f\u044f\u0442\u043d\u0456\u0446\u0430_\u0441\u0443\u0431\u043e\u0442\u0430".split("_"),isFormat:/\[ ?[\u0423\u0443\u045e] ?(?:\u043c\u0456\u043d\u0443\u043b\u0443\u044e|\u043d\u0430\u0441\u0442\u0443\u043f\u043d\u0443\u044e)? ?\] ?dddd/},weekdaysShort:"\u043d\u0434_\u043f\u043d_\u0430\u0442_\u0441\u0440_\u0447\u0446_\u043f\u0442_\u0441\u0431".split("_"),weekdaysMin:"\u043d\u0434_\u043f\u043d_\u0430\u0442_\u0441\u0440_\u0447\u0446_\u043f\u0442_\u0441\u0431".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY \u0433.",LLL:"D MMMM YYYY \u0433., HH:mm",LLLL:"dddd, D MMMM YYYY \u0433., HH:mm"},calendar:{sameDay:"[\u0421\u0451\u043d\u043d\u044f \u045e] LT",nextDay:"[\u0417\u0430\u045e\u0442\u0440\u0430 \u045e] LT",lastDay:"[\u0423\u0447\u043e\u0440\u0430 \u045e] LT",nextWeek:function(){return"[\u0423] dddd [\u045e] LT"},lastWeek:function(){switch(this.day()){case 0:case 3:case 5:case 6:return"[\u0423 \u043c\u0456\u043d\u0443\u043b\u0443\u044e] dddd [\u045e] LT";case 1:case 2:case 4:return"[\u0423 \u043c\u0456\u043d\u0443\u043b\u044b] dddd [\u045e] LT"}},sameElse:"L"},relativeTime:{future:"\u043f\u0440\u0430\u0437 %s",past:"%s \u0442\u0430\u043c\u0443",s:"\u043d\u0435\u043a\u0430\u043b\u044c\u043a\u0456 \u0441\u0435\u043a\u0443\u043d\u0434",m:ys,mm:ys,h:ys,hh:ys,d:"\u0434\u0437\u0435\u043d\u044c",dd:ys,M:"\u043c\u0435\u0441\u044f\u0446",MM:ys,y:"\u0433\u043e\u0434",yy:ys},meridiemParse:/\u043d\u043e\u0447\u044b|\u0440\u0430\u043d\u0456\u0446\u044b|\u0434\u043d\u044f|\u0432\u0435\u0447\u0430\u0440\u0430/,isPM:function(e){return/^(\u0434\u043d\u044f|\u0432\u0435\u0447\u0430\u0440\u0430)$/.test(e)},meridiem:function(e,a,t){return e<4?"\u043d\u043e\u0447\u044b":e<12?"\u0440\u0430\u043d\u0456\u0446\u044b":e<17?"\u0434\u043d\u044f":"\u0432\u0435\u0447\u0430\u0440\u0430"},dayOfMonthOrdinalParse:/\d{1,2}-(\u0456|\u044b|\u0433\u0430)/,ordinal:function(e,a){switch(a){case"M":case"d":case"DDD":case"w":case"W":return e%10!=2&&e%10!=3||e%100==12||e%100==13?e+"-\u044b":e+"-\u0456";case"D":return e+"-\u0433\u0430";default:return e}},week:{dow:1,doy:7}}),M.defineLocale("bg",{months:"\u044f\u043d\u0443\u0430\u0440\u0438_\u0444\u0435\u0432\u0440\u0443\u0430\u0440\u0438_\u043c\u0430\u0440\u0442_\u0430\u043f\u0440\u0438\u043b_\u043c\u0430\u0439_\u044e\u043d\u0438_\u044e\u043b\u0438_\u0430\u0432\u0433\u0443\u0441\u0442_\u0441\u0435\u043f\u0442\u0435\u043c\u0432\u0440\u0438_\u043e\u043a\u0442\u043e\u043c\u0432\u0440\u0438_\u043d\u043e\u0435\u043c\u0432\u0440\u0438_\u0434\u0435\u043a\u0435\u043c\u0432\u0440\u0438".split("_"),monthsShort:"\u044f\u043d\u0443_\u0444\u0435\u0432_\u043c\u0430\u0440_\u0430\u043f\u0440_\u043c\u0430\u0439_\u044e\u043d\u0438_\u044e\u043b\u0438_\u0430\u0432\u0433_\u0441\u0435\u043f_\u043e\u043a\u0442_\u043d\u043e\u0435_\u0434\u0435\u043a".split("_"),weekdays:"\u043d\u0435\u0434\u0435\u043b\u044f_\u043f\u043e\u043d\u0435\u0434\u0435\u043b\u043d\u0438\u043a_\u0432\u0442\u043e\u0440\u043d\u0438\u043a_\u0441\u0440\u044f\u0434\u0430_\u0447\u0435\u0442\u0432\u044a\u0440\u0442\u044a\u043a_\u043f\u0435\u0442\u044a\u043a_\u0441\u044a\u0431\u043e\u0442\u0430".split("_"),weekdaysShort:"\u043d\u0435\u0434_\u043f\u043e\u043d_\u0432\u0442\u043e_\u0441\u0440\u044f_\u0447\u0435\u0442_\u043f\u0435\u0442_\u0441\u044a\u0431".split("_"),weekdaysMin:"\u043d\u0434_\u043f\u043d_\u0432\u0442_\u0441\u0440_\u0447\u0442_\u043f\u0442_\u0441\u0431".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"D.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY H:mm",LLLL:"dddd, D MMMM YYYY H:mm"},calendar:{sameDay:"[\u0414\u043d\u0435\u0441 \u0432] LT",nextDay:"[\u0423\u0442\u0440\u0435 \u0432] LT",nextWeek:"dddd [\u0432] LT",lastDay:"[\u0412\u0447\u0435\u0440\u0430 \u0432] LT",lastWeek:function(){switch(this.day()){case 0:case 3:case 6:return"[\u041c\u0438\u043d\u0430\u043b\u0430\u0442\u0430] dddd [\u0432] LT";case 1:case 2:case 4:case 5:return"[\u041c\u0438\u043d\u0430\u043b\u0438\u044f] dddd [\u0432] LT"}},sameElse:"L"},relativeTime:{future:"\u0441\u043b\u0435\u0434 %s",past:"\u043f\u0440\u0435\u0434\u0438 %s",s:"\u043d\u044f\u043a\u043e\u043b\u043a\u043e \u0441\u0435\u043a\u0443\u043d\u0434\u0438",ss:"%d \u0441\u0435\u043a\u0443\u043d\u0434\u0438",m:"\u043c\u0438\u043d\u0443\u0442\u0430",mm:"%d \u043c\u0438\u043d\u0443\u0442\u0438",h:"\u0447\u0430\u0441",hh:"%d \u0447\u0430\u0441\u0430",d:"\u0434\u0435\u043d",dd:"%d \u0434\u0435\u043d\u0430",M:"\u043c\u0435\u0441\u0435\u0446",MM:"%d \u043c\u0435\u0441\u0435\u0446\u0430",y:"\u0433\u043e\u0434\u0438\u043d\u0430",yy:"%d \u0433\u043e\u0434\u0438\u043d\u0438"},dayOfMonthOrdinalParse:/\d{1,2}-(\u0435\u0432|\u0435\u043d|\u0442\u0438|\u0432\u0438|\u0440\u0438|\u043c\u0438)/,ordinal:function(e){var a=e%10,t=e%100;return 0===e?e+"-\u0435\u0432":0==t?e+"-\u0435\u043d":10<t&&t<20?e+"-\u0442\u0438":1==a?e+"-\u0432\u0438":2==a?e+"-\u0440\u0438":7==a||8==a?e+"-\u043c\u0438":e+"-\u0442\u0438"},week:{dow:1,doy:7}}),M.defineLocale("bm",{months:"Zanwuyekalo_Fewuruyekalo_Marisikalo_Awirilikalo_M\u025bkalo_Zuw\u025bnkalo_Zuluyekalo_Utikalo_S\u025btanburukalo_\u0254kut\u0254burukalo_Nowanburukalo_Desanburukalo".split("_"),monthsShort:"Zan_Few_Mar_Awi_M\u025b_Zuw_Zul_Uti_S\u025bt_\u0254ku_Now_Des".split("_"),weekdays:"Kari_Nt\u025bn\u025bn_Tarata_Araba_Alamisa_Juma_Sibiri".split("_"),weekdaysShort:"Kar_Nt\u025b_Tar_Ara_Ala_Jum_Sib".split("_"),weekdaysMin:"Ka_Nt_Ta_Ar_Al_Ju_Si".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"MMMM [tile] D [san] YYYY",LLL:"MMMM [tile] D [san] YYYY [l\u025br\u025b] HH:mm",LLLL:"dddd MMMM [tile] D [san] YYYY [l\u025br\u025b] HH:mm"},calendar:{sameDay:"[Bi l\u025br\u025b] LT",nextDay:"[Sini l\u025br\u025b] LT",nextWeek:"dddd [don l\u025br\u025b] LT",lastDay:"[Kunu l\u025br\u025b] LT",lastWeek:"dddd [t\u025bm\u025bnen l\u025br\u025b] LT",sameElse:"L"},relativeTime:{future:"%s k\u0254n\u0254",past:"a b\u025b %s b\u0254",s:"sanga dama dama",ss:"sekondi %d",m:"miniti kelen",mm:"miniti %d",h:"l\u025br\u025b kelen",hh:"l\u025br\u025b %d",d:"tile kelen",dd:"tile %d",M:"kalo kelen",MM:"kalo %d",y:"san kelen",yy:"san %d"},week:{dow:1,doy:4}});var fs={1:"\u09e7",2:"\u09e8",3:"\u09e9",4:"\u09ea",5:"\u09eb",6:"\u09ec",7:"\u09ed",8:"\u09ee",9:"\u09ef",0:"\u09e6"},ps={"\u09e7":"1","\u09e8":"2","\u09e9":"3","\u09ea":"4","\u09eb":"5","\u09ec":"6","\u09ed":"7","\u09ee":"8","\u09ef":"9","\u09e6":"0"};M.defineLocale("bn",{months:"\u099c\u09be\u09a8\u09c1\u09df\u09be\u09b0\u09bf_\u09ab\u09c7\u09ac\u09cd\u09b0\u09c1\u09df\u09be\u09b0\u09bf_\u09ae\u09be\u09b0\u09cd\u099a_\u098f\u09aa\u09cd\u09b0\u09bf\u09b2_\u09ae\u09c7_\u099c\u09c1\u09a8_\u099c\u09c1\u09b2\u09be\u0987_\u0986\u0997\u09b8\u09cd\u099f_\u09b8\u09c7\u09aa\u09cd\u099f\u09c7\u09ae\u09cd\u09ac\u09b0_\u0985\u0995\u09cd\u099f\u09cb\u09ac\u09b0_\u09a8\u09ad\u09c7\u09ae\u09cd\u09ac\u09b0_\u09a1\u09bf\u09b8\u09c7\u09ae\u09cd\u09ac\u09b0".split("_"),monthsShort:"\u099c\u09be\u09a8\u09c1_\u09ab\u09c7\u09ac\u09cd\u09b0\u09c1_\u09ae\u09be\u09b0\u09cd\u099a_\u098f\u09aa\u09cd\u09b0\u09bf\u09b2_\u09ae\u09c7_\u099c\u09c1\u09a8_\u099c\u09c1\u09b2\u09be\u0987_\u0986\u0997\u09b8\u09cd\u099f_\u09b8\u09c7\u09aa\u09cd\u099f_\u0985\u0995\u09cd\u099f\u09cb_\u09a8\u09ad\u09c7_\u09a1\u09bf\u09b8\u09c7".split("_"),weekdays:"\u09b0\u09ac\u09bf\u09ac\u09be\u09b0_\u09b8\u09cb\u09ae\u09ac\u09be\u09b0_\u09ae\u0999\u09cd\u0997\u09b2\u09ac\u09be\u09b0_\u09ac\u09c1\u09a7\u09ac\u09be\u09b0_\u09ac\u09c3\u09b9\u09b8\u09cd\u09aa\u09a4\u09bf\u09ac\u09be\u09b0_\u09b6\u09c1\u0995\u09cd\u09b0\u09ac\u09be\u09b0_\u09b6\u09a8\u09bf\u09ac\u09be\u09b0".split("_"),weekdaysShort:"\u09b0\u09ac\u09bf_\u09b8\u09cb\u09ae_\u09ae\u0999\u09cd\u0997\u09b2_\u09ac\u09c1\u09a7_\u09ac\u09c3\u09b9\u09b8\u09cd\u09aa\u09a4\u09bf_\u09b6\u09c1\u0995\u09cd\u09b0_\u09b6\u09a8\u09bf".split("_"),weekdaysMin:"\u09b0\u09ac\u09bf_\u09b8\u09cb\u09ae_\u09ae\u0999\u09cd\u0997\u09b2_\u09ac\u09c1\u09a7_\u09ac\u09c3\u09b9_\u09b6\u09c1\u0995\u09cd\u09b0_\u09b6\u09a8\u09bf".split("_"),longDateFormat:{LT:"A h:mm \u09b8\u09ae\u09df",LTS:"A h:mm:ss \u09b8\u09ae\u09df",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm \u09b8\u09ae\u09df",LLLL:"dddd, D MMMM YYYY, A h:mm \u09b8\u09ae\u09df"},calendar:{sameDay:"[\u0986\u099c] LT",nextDay:"[\u0986\u0997\u09be\u09ae\u09c0\u0995\u09be\u09b2] LT",nextWeek:"dddd, LT",lastDay:"[\u0997\u09a4\u0995\u09be\u09b2] LT",lastWeek:"[\u0997\u09a4] dddd, LT",sameElse:"L"},relativeTime:{future:"%s \u09aa\u09b0\u09c7",past:"%s \u0986\u0997\u09c7",s:"\u0995\u09df\u09c7\u0995 \u09b8\u09c7\u0995\u09c7\u09a8\u09cd\u09a1",ss:"%d \u09b8\u09c7\u0995\u09c7\u09a8\u09cd\u09a1",m:"\u098f\u0995 \u09ae\u09bf\u09a8\u09bf\u099f",mm:"%d \u09ae\u09bf\u09a8\u09bf\u099f",h:"\u098f\u0995 \u0998\u09a8\u09cd\u099f\u09be",hh:"%d \u0998\u09a8\u09cd\u099f\u09be",d:"\u098f\u0995 \u09a6\u09bf\u09a8",dd:"%d \u09a6\u09bf\u09a8",M:"\u098f\u0995 \u09ae\u09be\u09b8",MM:"%d \u09ae\u09be\u09b8",y:"\u098f\u0995 \u09ac\u099b\u09b0",yy:"%d \u09ac\u099b\u09b0"},preparse:function(e){return e.replace(/[\u09e7\u09e8\u09e9\u09ea\u09eb\u09ec\u09ed\u09ee\u09ef\u09e6]/g,function(e){return ps[e]})},postformat:function(e){return e.replace(/\d/g,function(e){return fs[e]})},meridiemParse:/\u09b0\u09be\u09a4|\u09b8\u0995\u09be\u09b2|\u09a6\u09c1\u09aa\u09c1\u09b0|\u09ac\u09bf\u0995\u09be\u09b2|\u09b0\u09be\u09a4/,meridiemHour:function(e,a){return 12===e&&(e=0),"\u09b0\u09be\u09a4"===a&&4<=e||"\u09a6\u09c1\u09aa\u09c1\u09b0"===a&&e<5||"\u09ac\u09bf\u0995\u09be\u09b2"===a?e+12:e},meridiem:function(e,a,t){return e<4?"\u09b0\u09be\u09a4":e<10?"\u09b8\u0995\u09be\u09b2":e<17?"\u09a6\u09c1\u09aa\u09c1\u09b0":e<20?"\u09ac\u09bf\u0995\u09be\u09b2":"\u09b0\u09be\u09a4"},week:{dow:0,doy:6}});var ks={1:"\u0f21",2:"\u0f22",3:"\u0f23",4:"\u0f24",5:"\u0f25",6:"\u0f26",7:"\u0f27",8:"\u0f28",9:"\u0f29",0:"\u0f20"},Ds={"\u0f21":"1","\u0f22":"2","\u0f23":"3","\u0f24":"4","\u0f25":"5","\u0f26":"6","\u0f27":"7","\u0f28":"8","\u0f29":"9","\u0f20":"0"};function Ts(e,a,t){var s;return e+" "+(s={mm:"munutenn",MM:"miz",dd:"devezh"}[t],2!==e?s:function(e){var a={m:"v",b:"v",d:"z"};return void 0!==a[e.charAt(0)]?a[e.charAt(0)]+e.substring(1):e}(s))}M.defineLocale("bo",{months:"\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f51\u0f44\u0f0b\u0f54\u0f7c_\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f42\u0f49\u0f72\u0f66\u0f0b\u0f54_\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f42\u0f66\u0f74\u0f58\u0f0b\u0f54_\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f56\u0f5e\u0f72\u0f0b\u0f54_\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f63\u0f94\u0f0b\u0f54_\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f51\u0fb2\u0f74\u0f42\u0f0b\u0f54_\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f56\u0f51\u0f74\u0f53\u0f0b\u0f54_\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f56\u0f62\u0f92\u0fb1\u0f51\u0f0b\u0f54_\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f51\u0f42\u0f74\u0f0b\u0f54_\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f56\u0f45\u0f74\u0f0b\u0f54_\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f56\u0f45\u0f74\u0f0b\u0f42\u0f45\u0f72\u0f42\u0f0b\u0f54_\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f56\u0f45\u0f74\u0f0b\u0f42\u0f49\u0f72\u0f66\u0f0b\u0f54".split("_"),monthsShort:"\u0f5f\u0fb3\u0f0b1_\u0f5f\u0fb3\u0f0b2_\u0f5f\u0fb3\u0f0b3_\u0f5f\u0fb3\u0f0b4_\u0f5f\u0fb3\u0f0b5_\u0f5f\u0fb3\u0f0b6_\u0f5f\u0fb3\u0f0b7_\u0f5f\u0fb3\u0f0b8_\u0f5f\u0fb3\u0f0b9_\u0f5f\u0fb3\u0f0b10_\u0f5f\u0fb3\u0f0b11_\u0f5f\u0fb3\u0f0b12".split("_"),monthsShortRegex:/^(\u0f5f\u0fb3\u0f0b\d{1,2})/,monthsParseExact:!0,weekdays:"\u0f42\u0f5f\u0f60\u0f0b\u0f49\u0f72\u0f0b\u0f58\u0f0b_\u0f42\u0f5f\u0f60\u0f0b\u0f5f\u0fb3\u0f0b\u0f56\u0f0b_\u0f42\u0f5f\u0f60\u0f0b\u0f58\u0f72\u0f42\u0f0b\u0f51\u0f58\u0f62\u0f0b_\u0f42\u0f5f\u0f60\u0f0b\u0f63\u0fb7\u0f42\u0f0b\u0f54\u0f0b_\u0f42\u0f5f\u0f60\u0f0b\u0f55\u0f74\u0f62\u0f0b\u0f56\u0f74_\u0f42\u0f5f\u0f60\u0f0b\u0f54\u0f0b\u0f66\u0f44\u0f66\u0f0b_\u0f42\u0f5f\u0f60\u0f0b\u0f66\u0fa4\u0f7a\u0f53\u0f0b\u0f54\u0f0b".split("_"),weekdaysShort:"\u0f49\u0f72\u0f0b\u0f58\u0f0b_\u0f5f\u0fb3\u0f0b\u0f56\u0f0b_\u0f58\u0f72\u0f42\u0f0b\u0f51\u0f58\u0f62\u0f0b_\u0f63\u0fb7\u0f42\u0f0b\u0f54\u0f0b_\u0f55\u0f74\u0f62\u0f0b\u0f56\u0f74_\u0f54\u0f0b\u0f66\u0f44\u0f66\u0f0b_\u0f66\u0fa4\u0f7a\u0f53\u0f0b\u0f54\u0f0b".split("_"),weekdaysMin:"\u0f49\u0f72_\u0f5f\u0fb3_\u0f58\u0f72\u0f42_\u0f63\u0fb7\u0f42_\u0f55\u0f74\u0f62_\u0f66\u0f44\u0f66_\u0f66\u0fa4\u0f7a\u0f53".split("_"),longDateFormat:{LT:"A h:mm",LTS:"A h:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm",LLLL:"dddd, D MMMM YYYY, A h:mm"},calendar:{sameDay:"[\u0f51\u0f72\u0f0b\u0f62\u0f72\u0f44] LT",nextDay:"[\u0f66\u0f44\u0f0b\u0f49\u0f72\u0f53] LT",nextWeek:"[\u0f56\u0f51\u0f74\u0f53\u0f0b\u0f55\u0fb2\u0f42\u0f0b\u0f62\u0f97\u0f7a\u0f66\u0f0b\u0f58], LT",lastDay:"[\u0f41\u0f0b\u0f66\u0f44] LT",lastWeek:"[\u0f56\u0f51\u0f74\u0f53\u0f0b\u0f55\u0fb2\u0f42\u0f0b\u0f58\u0f50\u0f60\u0f0b\u0f58] dddd, LT",sameElse:"L"},relativeTime:{future:"%s \u0f63\u0f0b",past:"%s \u0f66\u0f94\u0f53\u0f0b\u0f63",s:"\u0f63\u0f58\u0f0b\u0f66\u0f44",ss:"%d \u0f66\u0f90\u0f62\u0f0b\u0f46\u0f0d",m:"\u0f66\u0f90\u0f62\u0f0b\u0f58\u0f0b\u0f42\u0f45\u0f72\u0f42",mm:"%d \u0f66\u0f90\u0f62\u0f0b\u0f58",h:"\u0f46\u0f74\u0f0b\u0f5a\u0f7c\u0f51\u0f0b\u0f42\u0f45\u0f72\u0f42",hh:"%d \u0f46\u0f74\u0f0b\u0f5a\u0f7c\u0f51",d:"\u0f49\u0f72\u0f53\u0f0b\u0f42\u0f45\u0f72\u0f42",dd:"%d \u0f49\u0f72\u0f53\u0f0b",M:"\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f42\u0f45\u0f72\u0f42",MM:"%d \u0f5f\u0fb3\u0f0b\u0f56",y:"\u0f63\u0f7c\u0f0b\u0f42\u0f45\u0f72\u0f42",yy:"%d \u0f63\u0f7c"},preparse:function(e){return e.replace(/[\u0f21\u0f22\u0f23\u0f24\u0f25\u0f26\u0f27\u0f28\u0f29\u0f20]/g,function(e){return Ds[e]})},postformat:function(e){return e.replace(/\d/g,function(e){return ks[e]})},meridiemParse:/\u0f58\u0f5a\u0f53\u0f0b\u0f58\u0f7c|\u0f5e\u0f7c\u0f42\u0f66\u0f0b\u0f40\u0f66|\u0f49\u0f72\u0f53\u0f0b\u0f42\u0f74\u0f44|\u0f51\u0f42\u0f7c\u0f44\u0f0b\u0f51\u0f42|\u0f58\u0f5a\u0f53\u0f0b\u0f58\u0f7c/,meridiemHour:function(e,a){return 12===e&&(e=0),"\u0f58\u0f5a\u0f53\u0f0b\u0f58\u0f7c"===a&&4<=e||"\u0f49\u0f72\u0f53\u0f0b\u0f42\u0f74\u0f44"===a&&e<5||"\u0f51\u0f42\u0f7c\u0f44\u0f0b\u0f51\u0f42"===a?e+12:e},meridiem:function(e,a,t){return e<4?"\u0f58\u0f5a\u0f53\u0f0b\u0f58\u0f7c":e<10?"\u0f5e\u0f7c\u0f42\u0f66\u0f0b\u0f40\u0f66":e<17?"\u0f49\u0f72\u0f53\u0f0b\u0f42\u0f74\u0f44":e<20?"\u0f51\u0f42\u0f7c\u0f44\u0f0b\u0f51\u0f42":"\u0f58\u0f5a\u0f53\u0f0b\u0f58\u0f7c"},week:{dow:0,doy:6}});var gs=[/^gen/i,/^c[\u02bc\']hwe/i,/^meu/i,/^ebr/i,/^mae/i,/^(mez|eve)/i,/^gou/i,/^eos/i,/^gwe/i,/^her/i,/^du/i,/^ker/i],ws=/^(genver|c[\u02bc\']hwevrer|meurzh|ebrel|mae|mezheven|gouere|eost|gwengolo|here|du|kerzu|gen|c[\u02bc\']hwe|meu|ebr|mae|eve|gou|eos|gwe|her|du|ker)/i,vs=[/^Su/i,/^Lu/i,/^Me([^r]|$)/i,/^Mer/i,/^Ya/i,/^Gw/i,/^Sa/i];function bs(e,a,t){var s=e+" ";switch(t){case"ss":return s+=1===e?"sekunda":2===e||3===e||4===e?"sekunde":"sekundi";case"m":return a?"jedna minuta":"jedne minute";case"mm":return s+=1!==e&&(2===e||3===e||4===e)?"minute":"minuta";case"h":return a?"jedan sat":"jednog sata";case"hh":return s+=1===e?"sat":2===e||3===e||4===e?"sata":"sati";case"dd":return s+=1===e?"dan":"dana";case"MM":return s+=1===e?"mjesec":2===e||3===e||4===e?"mjeseca":"mjeseci";case"yy":return s+=1!==e&&(2===e||3===e||4===e)?"godine":"godina"}}M.defineLocale("br",{months:"Genver_C\u02bchwevrer_Meurzh_Ebrel_Mae_Mezheven_Gouere_Eost_Gwengolo_Here_Du_Kerzu".split("_"),monthsShort:"Gen_C\u02bchwe_Meu_Ebr_Mae_Eve_Gou_Eos_Gwe_Her_Du_Ker".split("_"),weekdays:"Sul_Lun_Meurzh_Merc\u02bcher_Yaou_Gwener_Sadorn".split("_"),weekdaysShort:"Sul_Lun_Meu_Mer_Yao_Gwe_Sad".split("_"),weekdaysMin:"Su_Lu_Me_Mer_Ya_Gw_Sa".split("_"),weekdaysParse:vs,fullWeekdaysParse:[/^sul/i,/^lun/i,/^meurzh/i,/^merc[\u02bc\']her/i,/^yaou/i,/^gwener/i,/^sadorn/i],shortWeekdaysParse:[/^Sul/i,/^Lun/i,/^Meu/i,/^Mer/i,/^Yao/i,/^Gwe/i,/^Sad/i],minWeekdaysParse:vs,monthsRegex:ws,monthsShortRegex:ws,monthsStrictRegex:/^(genver|c[\u02bc\']hwevrer|meurzh|ebrel|mae|mezheven|gouere|eost|gwengolo|here|du|kerzu)/i,monthsShortStrictRegex:/^(gen|c[\u02bc\']hwe|meu|ebr|mae|eve|gou|eos|gwe|her|du|ker)/i,monthsParse:gs,longMonthsParse:gs,shortMonthsParse:gs,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D [a viz] MMMM YYYY",LLL:"D [a viz] MMMM YYYY HH:mm",LLLL:"dddd, D [a viz] MMMM YYYY HH:mm"},calendar:{sameDay:"[Hiziv da] LT",nextDay:"[Warc\u02bchoazh da] LT",nextWeek:"dddd [da] LT",lastDay:"[Dec\u02bch da] LT",lastWeek:"dddd [paset da] LT",sameElse:"L"},relativeTime:{future:"a-benn %s",past:"%s \u02bczo",s:"un nebeud segondenno\xf9",ss:"%d eilenn",m:"ur vunutenn",mm:Ts,h:"un eur",hh:"%d eur",d:"un devezh",dd:Ts,M:"ur miz",MM:Ts,y:"ur bloaz",yy:function(e){switch(function e(a){if(9<a)return e(a%10);return a}(e)){case 1:case 3:case 4:case 5:case 9:return e+" bloaz";default:return e+" vloaz"}}},dayOfMonthOrdinalParse:/\d{1,2}(a\xf1|vet)/,ordinal:function(e){return e+(1===e?"a\xf1":"vet")},week:{dow:1,doy:4},meridiemParse:/a.m.|g.m./,isPM:function(e){return"g.m."===e},meridiem:function(e,a,t){return e<12?"a.m.":"g.m."}}),M.defineLocale("bs",{months:"januar_februar_mart_april_maj_juni_juli_august_septembar_oktobar_novembar_decembar".split("_"),monthsShort:"jan._feb._mar._apr._maj._jun._jul._aug._sep._okt._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"nedjelja_ponedjeljak_utorak_srijeda_\u010detvrtak_petak_subota".split("_"),weekdaysShort:"ned._pon._uto._sri._\u010det._pet._sub.".split("_"),weekdaysMin:"ne_po_ut_sr_\u010de_pe_su".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[danas u] LT",nextDay:"[sutra u] LT",nextWeek:function(){switch(this.day()){case 0:return"[u] [nedjelju] [u] LT";case 3:return"[u] [srijedu] [u] LT";case 6:return"[u] [subotu] [u] LT";case 1:case 2:case 4:case 5:return"[u] dddd [u] LT"}},lastDay:"[ju\u010der u] LT",lastWeek:function(){switch(this.day()){case 0:case 3:return"[pro\u0161lu] dddd [u] LT";case 6:return"[pro\u0161le] [subote] [u] LT";case 1:case 2:case 4:case 5:return"[pro\u0161li] dddd [u] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"prije %s",s:"par sekundi",ss:bs,m:bs,mm:bs,h:bs,hh:bs,d:"dan",dd:bs,M:"mjesec",MM:bs,y:"godinu",yy:bs},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}}),M.defineLocale("ca",{months:{standalone:"gener_febrer_mar\xe7_abril_maig_juny_juliol_agost_setembre_octubre_novembre_desembre".split("_"),format:"de gener_de febrer_de mar\xe7_d'abril_de maig_de juny_de juliol_d'agost_de setembre_d'octubre_de novembre_de desembre".split("_"),isFormat:/D[oD]?(\s)+MMMM/},monthsShort:"gen._febr._mar\xe7_abr._maig_juny_jul._ag._set._oct._nov._des.".split("_"),monthsParseExact:!0,weekdays:"diumenge_dilluns_dimarts_dimecres_dijous_divendres_dissabte".split("_"),weekdaysShort:"dg._dl._dt._dc._dj._dv._ds.".split("_"),weekdaysMin:"dg_dl_dt_dc_dj_dv_ds".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM [de] YYYY",ll:"D MMM YYYY",LLL:"D MMMM [de] YYYY [a les] H:mm",lll:"D MMM YYYY, H:mm",LLLL:"dddd D MMMM [de] YYYY [a les] H:mm",llll:"ddd D MMM YYYY, H:mm"},calendar:{sameDay:function(){return"[avui a "+(1!==this.hours()?"les":"la")+"] LT"},nextDay:function(){return"[dem\xe0 a "+(1!==this.hours()?"les":"la")+"] LT"},nextWeek:function(){return"dddd [a "+(1!==this.hours()?"les":"la")+"] LT"},lastDay:function(){return"[ahir a "+(1!==this.hours()?"les":"la")+"] LT"},lastWeek:function(){return"[el] dddd [passat a "+(1!==this.hours()?"les":"la")+"] LT"},sameElse:"L"},relativeTime:{future:"d'aqu\xed %s",past:"fa %s",s:"uns segons",ss:"%d segons",m:"un minut",mm:"%d minuts",h:"una hora",hh:"%d hores",d:"un dia",dd:"%d dies",M:"un mes",MM:"%d mesos",y:"un any",yy:"%d anys"},dayOfMonthOrdinalParse:/\d{1,2}(r|n|t|\xe8|a)/,ordinal:function(e,a){return e+("w"!==a&&"W"!==a?1===e?"r":2===e?"n":3===e?"r":4===e?"t":"\xe8":"a")},week:{dow:1,doy:4}});var Hs="leden_\xfanor_b\u0159ezen_duben_kv\u011bten_\u010derven_\u010dervenec_srpen_z\xe1\u0159\xed_\u0159\xedjen_listopad_prosinec".split("_"),Ss="led_\xfano_b\u0159e_dub_kv\u011b_\u010dvn_\u010dvc_srp_z\xe1\u0159_\u0159\xedj_lis_pro".split("_"),js=[/^led/i,/^\xfano/i,/^b\u0159e/i,/^dub/i,/^kv\u011b/i,/^(\u010dvn|\u010derven$|\u010dervna)/i,/^(\u010dvc|\u010dervenec|\u010dervence)/i,/^srp/i,/^z\xe1\u0159/i,/^\u0159\xedj/i,/^lis/i,/^pro/i],xs=/^(leden|\xfanor|b\u0159ezen|duben|kv\u011bten|\u010dervenec|\u010dervence|\u010derven|\u010dervna|srpen|z\xe1\u0159\xed|\u0159\xedjen|listopad|prosinec|led|\xfano|b\u0159e|dub|kv\u011b|\u010dvn|\u010dvc|srp|z\xe1\u0159|\u0159\xedj|lis|pro)/i;function Os(e){return 1<e&&e<5&&1!=~~(e/10)}function Ps(e,a,t,s){var n=e+" ";switch(t){case"s":return a||s?"p\xe1r sekund":"p\xe1r sekundami";case"ss":return a||s?n+(Os(e)?"sekundy":"sekund"):n+"sekundami";case"m":return a?"minuta":s?"minutu":"minutou";case"mm":return a||s?n+(Os(e)?"minuty":"minut"):n+"minutami";case"h":return a?"hodina":s?"hodinu":"hodinou";case"hh":return a||s?n+(Os(e)?"hodiny":"hodin"):n+"hodinami";case"d":return a||s?"den":"dnem";case"dd":return a||s?n+(Os(e)?"dny":"dn\xed"):n+"dny";case"M":return a||s?"m\u011bs\xedc":"m\u011bs\xedcem";case"MM":return a||s?n+(Os(e)?"m\u011bs\xedce":"m\u011bs\xedc\u016f"):n+"m\u011bs\xedci";case"y":return a||s?"rok":"rokem";case"yy":return a||s?n+(Os(e)?"roky":"let"):n+"lety"}}function Ws(e,a,t,s){var n={m:["eine Minute","einer Minute"],h:["eine Stunde","einer Stunde"],d:["ein Tag","einem Tag"],dd:[e+" Tage",e+" Tagen"],w:["eine Woche","einer Woche"],M:["ein Monat","einem Monat"],MM:[e+" Monate",e+" Monaten"],y:["ein Jahr","einem Jahr"],yy:[e+" Jahre",e+" Jahren"]};return a?n[t][0]:n[t][1]}function As(e,a,t,s){var n={m:["eine Minute","einer Minute"],h:["eine Stunde","einer Stunde"],d:["ein Tag","einem Tag"],dd:[e+" Tage",e+" Tagen"],w:["eine Woche","einer Woche"],M:["ein Monat","einem Monat"],MM:[e+" Monate",e+" Monaten"],y:["ein Jahr","einem Jahr"],yy:[e+" Jahre",e+" Jahren"]};return a?n[t][0]:n[t][1]}function Es(e,a,t,s){var n={m:["eine Minute","einer Minute"],h:["eine Stunde","einer Stunde"],d:["ein Tag","einem Tag"],dd:[e+" Tage",e+" Tagen"],w:["eine Woche","einer Woche"],M:["ein Monat","einem Monat"],MM:[e+" Monate",e+" Monaten"],y:["ein Jahr","einem Jahr"],yy:[e+" Jahre",e+" Jahren"]};return a?n[t][0]:n[t][1]}M.defineLocale("cs",{months:Hs,monthsShort:Ss,monthsRegex:xs,monthsShortRegex:xs,monthsStrictRegex:/^(leden|ledna|\xfanora|\xfanor|b\u0159ezen|b\u0159ezna|duben|dubna|kv\u011bten|kv\u011btna|\u010dervenec|\u010dervence|\u010derven|\u010dervna|srpen|srpna|z\xe1\u0159\xed|\u0159\xedjen|\u0159\xedjna|listopadu|listopad|prosinec|prosince)/i,monthsShortStrictRegex:/^(led|\xfano|b\u0159e|dub|kv\u011b|\u010dvn|\u010dvc|srp|z\xe1\u0159|\u0159\xedj|lis|pro)/i,monthsParse:js,longMonthsParse:js,shortMonthsParse:js,weekdays:"ned\u011ble_pond\u011bl\xed_\xfater\xfd_st\u0159eda_\u010dtvrtek_p\xe1tek_sobota".split("_"),weekdaysShort:"ne_po_\xfat_st_\u010dt_p\xe1_so".split("_"),weekdaysMin:"ne_po_\xfat_st_\u010dt_p\xe1_so".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd D. MMMM YYYY H:mm",l:"D. M. YYYY"},calendar:{sameDay:"[dnes v] LT",nextDay:"[z\xedtra v] LT",nextWeek:function(){switch(this.day()){case 0:return"[v ned\u011bli v] LT";case 1:case 2:return"[v] dddd [v] LT";case 3:return"[ve st\u0159edu v] LT";case 4:return"[ve \u010dtvrtek v] LT";case 5:return"[v p\xe1tek v] LT";case 6:return"[v sobotu v] LT"}},lastDay:"[v\u010dera v] LT",lastWeek:function(){switch(this.day()){case 0:return"[minulou ned\u011bli v] LT";case 1:case 2:return"[minul\xe9] dddd [v] LT";case 3:return"[minulou st\u0159edu v] LT";case 4:case 5:return"[minul\xfd] dddd [v] LT";case 6:return"[minulou sobotu v] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"p\u0159ed %s",s:Ps,ss:Ps,m:Ps,mm:Ps,h:Ps,hh:Ps,d:Ps,dd:Ps,M:Ps,MM:Ps,y:Ps,yy:Ps},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}}),M.defineLocale("cv",{months:"\u043a\u04d1\u0440\u043b\u0430\u0447_\u043d\u0430\u0440\u04d1\u0441_\u043f\u0443\u0448_\u0430\u043a\u0430_\u043c\u0430\u0439_\u04ab\u04d7\u0440\u0442\u043c\u0435_\u0443\u0442\u04d1_\u04ab\u0443\u0440\u043b\u0430_\u0430\u0432\u04d1\u043d_\u044e\u043f\u0430_\u0447\u04f3\u043a_\u0440\u0430\u0448\u0442\u0430\u0432".split("_"),monthsShort:"\u043a\u04d1\u0440_\u043d\u0430\u0440_\u043f\u0443\u0448_\u0430\u043a\u0430_\u043c\u0430\u0439_\u04ab\u04d7\u0440_\u0443\u0442\u04d1_\u04ab\u0443\u0440_\u0430\u0432\u043d_\u044e\u043f\u0430_\u0447\u04f3\u043a_\u0440\u0430\u0448".split("_"),weekdays:"\u0432\u044b\u0440\u0441\u0430\u0440\u043d\u0438\u043a\u0443\u043d_\u0442\u0443\u043d\u0442\u0438\u043a\u0443\u043d_\u044b\u0442\u043b\u0430\u0440\u0438\u043a\u0443\u043d_\u044e\u043d\u043a\u0443\u043d_\u043a\u04d7\u04ab\u043d\u0435\u0440\u043d\u0438\u043a\u0443\u043d_\u044d\u0440\u043d\u0435\u043a\u0443\u043d_\u0448\u04d1\u043c\u0430\u0442\u043a\u0443\u043d".split("_"),weekdaysShort:"\u0432\u044b\u0440_\u0442\u0443\u043d_\u044b\u0442\u043b_\u044e\u043d_\u043a\u04d7\u04ab_\u044d\u0440\u043d_\u0448\u04d1\u043c".split("_"),weekdaysMin:"\u0432\u0440_\u0442\u043d_\u044b\u0442_\u044e\u043d_\u043a\u04ab_\u044d\u0440_\u0448\u043c".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD-MM-YYYY",LL:"YYYY [\u04ab\u0443\u043b\u0445\u0438] MMMM [\u0443\u0439\u04d1\u0445\u04d7\u043d] D[-\u043c\u04d7\u0448\u04d7]",LLL:"YYYY [\u04ab\u0443\u043b\u0445\u0438] MMMM [\u0443\u0439\u04d1\u0445\u04d7\u043d] D[-\u043c\u04d7\u0448\u04d7], HH:mm",LLLL:"dddd, YYYY [\u04ab\u0443\u043b\u0445\u0438] MMMM [\u0443\u0439\u04d1\u0445\u04d7\u043d] D[-\u043c\u04d7\u0448\u04d7], HH:mm"},calendar:{sameDay:"[\u041f\u0430\u044f\u043d] LT [\u0441\u0435\u0445\u0435\u0442\u0440\u0435]",nextDay:"[\u042b\u0440\u0430\u043d] LT [\u0441\u0435\u0445\u0435\u0442\u0440\u0435]",lastDay:"[\u04d6\u043d\u0435\u0440] LT [\u0441\u0435\u0445\u0435\u0442\u0440\u0435]",nextWeek:"[\u04aa\u0438\u0442\u0435\u0441] dddd LT [\u0441\u0435\u0445\u0435\u0442\u0440\u0435]",lastWeek:"[\u0418\u0440\u0442\u043d\u04d7] dddd LT [\u0441\u0435\u0445\u0435\u0442\u0440\u0435]",sameElse:"L"},relativeTime:{future:function(e){return e+(/\u0441\u0435\u0445\u0435\u0442$/i.exec(e)?"\u0440\u0435\u043d":/\u04ab\u0443\u043b$/i.exec(e)?"\u0442\u0430\u043d":"\u0440\u0430\u043d")},past:"%s \u043a\u0430\u044f\u043b\u043b\u0430",s:"\u043f\u04d7\u0440-\u0438\u043a \u04ab\u0435\u043a\u043a\u0443\u043d\u0442",ss:"%d \u04ab\u0435\u043a\u043a\u0443\u043d\u0442",m:"\u043f\u04d7\u0440 \u043c\u0438\u043d\u0443\u0442",mm:"%d \u043c\u0438\u043d\u0443\u0442",h:"\u043f\u04d7\u0440 \u0441\u0435\u0445\u0435\u0442",hh:"%d \u0441\u0435\u0445\u0435\u0442",d:"\u043f\u04d7\u0440 \u043a\u0443\u043d",dd:"%d \u043a\u0443\u043d",M:"\u043f\u04d7\u0440 \u0443\u0439\u04d1\u0445",MM:"%d \u0443\u0439\u04d1\u0445",y:"\u043f\u04d7\u0440 \u04ab\u0443\u043b",yy:"%d \u04ab\u0443\u043b"},dayOfMonthOrdinalParse:/\d{1,2}-\u043c\u04d7\u0448/,ordinal:"%d-\u043c\u04d7\u0448",week:{dow:1,doy:7}}),M.defineLocale("cy",{months:"Ionawr_Chwefror_Mawrth_Ebrill_Mai_Mehefin_Gorffennaf_Awst_Medi_Hydref_Tachwedd_Rhagfyr".split("_"),monthsShort:"Ion_Chwe_Maw_Ebr_Mai_Meh_Gor_Aws_Med_Hyd_Tach_Rhag".split("_"),weekdays:"Dydd Sul_Dydd Llun_Dydd Mawrth_Dydd Mercher_Dydd Iau_Dydd Gwener_Dydd Sadwrn".split("_"),weekdaysShort:"Sul_Llun_Maw_Mer_Iau_Gwe_Sad".split("_"),weekdaysMin:"Su_Ll_Ma_Me_Ia_Gw_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Heddiw am] LT",nextDay:"[Yfory am] LT",nextWeek:"dddd [am] LT",lastDay:"[Ddoe am] LT",lastWeek:"dddd [diwethaf am] LT",sameElse:"L"},relativeTime:{future:"mewn %s",past:"%s yn \xf4l",s:"ychydig eiliadau",ss:"%d eiliad",m:"munud",mm:"%d munud",h:"awr",hh:"%d awr",d:"diwrnod",dd:"%d diwrnod",M:"mis",MM:"%d mis",y:"blwyddyn",yy:"%d flynedd"},dayOfMonthOrdinalParse:/\d{1,2}(fed|ain|af|il|ydd|ed|eg)/,ordinal:function(e){var a="";return 20<e?a=40===e||50===e||60===e||80===e||100===e?"fed":"ain":0<e&&(a=["","af","il","ydd","ydd","ed","ed","ed","fed","fed","fed","eg","fed","eg","eg","fed","eg","eg","fed","eg","fed"][e]),e+a},week:{dow:1,doy:4}}),M.defineLocale("da",{months:"januar_februar_marts_april_maj_juni_juli_august_september_oktober_november_december".split("_"),monthsShort:"jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec".split("_"),weekdays:"s\xf8ndag_mandag_tirsdag_onsdag_torsdag_fredag_l\xf8rdag".split("_"),weekdaysShort:"s\xf8n_man_tir_ons_tor_fre_l\xf8r".split("_"),weekdaysMin:"s\xf8_ma_ti_on_to_fr_l\xf8".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY HH:mm",LLLL:"dddd [d.] D. MMMM YYYY [kl.] HH:mm"},calendar:{sameDay:"[i dag kl.] LT",nextDay:"[i morgen kl.] LT",nextWeek:"p\xe5 dddd [kl.] LT",lastDay:"[i g\xe5r kl.] LT",lastWeek:"[i] dddd[s kl.] LT",sameElse:"L"},relativeTime:{future:"om %s",past:"%s siden",s:"f\xe5 sekunder",ss:"%d sekunder",m:"et minut",mm:"%d minutter",h:"en time",hh:"%d timer",d:"en dag",dd:"%d dage",M:"en m\xe5ned",MM:"%d m\xe5neder",y:"et \xe5r",yy:"%d \xe5r"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}}),M.defineLocale("de-at",{months:"J\xe4nner_Februar_M\xe4rz_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember".split("_"),monthsShort:"J\xe4n._Feb._M\xe4rz_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.".split("_"),monthsParseExact:!0,weekdays:"Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag".split("_"),weekdaysShort:"So._Mo._Di._Mi._Do._Fr._Sa.".split("_"),weekdaysMin:"So_Mo_Di_Mi_Do_Fr_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY HH:mm",LLLL:"dddd, D. MMMM YYYY HH:mm"},calendar:{sameDay:"[heute um] LT [Uhr]",sameElse:"L",nextDay:"[morgen um] LT [Uhr]",nextWeek:"dddd [um] LT [Uhr]",lastDay:"[gestern um] LT [Uhr]",lastWeek:"[letzten] dddd [um] LT [Uhr]"},relativeTime:{future:"in %s",past:"vor %s",s:"ein paar Sekunden",ss:"%d Sekunden",m:Ws,mm:"%d Minuten",h:Ws,hh:"%d Stunden",d:Ws,dd:Ws,w:Ws,ww:"%d Wochen",M:Ws,MM:Ws,y:Ws,yy:Ws},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}}),M.defineLocale("de-ch",{months:"Januar_Februar_M\xe4rz_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember".split("_"),monthsShort:"Jan._Feb._M\xe4rz_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.".split("_"),monthsParseExact:!0,weekdays:"Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag".split("_"),weekdaysShort:"So_Mo_Di_Mi_Do_Fr_Sa".split("_"),weekdaysMin:"So_Mo_Di_Mi_Do_Fr_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY HH:mm",LLLL:"dddd, D. MMMM YYYY HH:mm"},calendar:{sameDay:"[heute um] LT [Uhr]",sameElse:"L",nextDay:"[morgen um] LT [Uhr]",nextWeek:"dddd [um] LT [Uhr]",lastDay:"[gestern um] LT [Uhr]",lastWeek:"[letzten] dddd [um] LT [Uhr]"},relativeTime:{future:"in %s",past:"vor %s",s:"ein paar Sekunden",ss:"%d Sekunden",m:As,mm:"%d Minuten",h:As,hh:"%d Stunden",d:As,dd:As,w:As,ww:"%d Wochen",M:As,MM:As,y:As,yy:As},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}}),M.defineLocale("de",{months:"Januar_Februar_M\xe4rz_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember".split("_"),monthsShort:"Jan._Feb._M\xe4rz_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.".split("_"),monthsParseExact:!0,weekdays:"Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag".split("_"),weekdaysShort:"So._Mo._Di._Mi._Do._Fr._Sa.".split("_"),weekdaysMin:"So_Mo_Di_Mi_Do_Fr_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY HH:mm",LLLL:"dddd, D. MMMM YYYY HH:mm"},calendar:{sameDay:"[heute um] LT [Uhr]",sameElse:"L",nextDay:"[morgen um] LT [Uhr]",nextWeek:"dddd [um] LT [Uhr]",lastDay:"[gestern um] LT [Uhr]",lastWeek:"[letzten] dddd [um] LT [Uhr]"},relativeTime:{future:"in %s",past:"vor %s",s:"ein paar Sekunden",ss:"%d Sekunden",m:Es,mm:"%d Minuten",h:Es,hh:"%d Stunden",d:Es,dd:Es,w:Es,ww:"%d Wochen",M:Es,MM:Es,y:Es,yy:Es},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}});var Fs=["\u0796\u07ac\u0782\u07aa\u0787\u07a6\u0783\u07a9","\u078a\u07ac\u0784\u07b0\u0783\u07aa\u0787\u07a6\u0783\u07a9","\u0789\u07a7\u0783\u07a8\u0797\u07aa","\u0787\u07ad\u0795\u07b0\u0783\u07a9\u078d\u07aa","\u0789\u07ad","\u0796\u07ab\u0782\u07b0","\u0796\u07aa\u078d\u07a6\u0787\u07a8","\u0787\u07af\u078e\u07a6\u0790\u07b0\u0793\u07aa","\u0790\u07ac\u0795\u07b0\u0793\u07ac\u0789\u07b0\u0784\u07a6\u0783\u07aa","\u0787\u07ae\u0786\u07b0\u0793\u07af\u0784\u07a6\u0783\u07aa","\u0782\u07ae\u0788\u07ac\u0789\u07b0\u0784\u07a6\u0783\u07aa","\u0791\u07a8\u0790\u07ac\u0789\u07b0\u0784\u07a6\u0783\u07aa"],zs=["\u0787\u07a7\u078b\u07a8\u0787\u07b0\u078c\u07a6","\u0780\u07af\u0789\u07a6","\u0787\u07a6\u0782\u07b0\u078e\u07a7\u0783\u07a6","\u0784\u07aa\u078b\u07a6","\u0784\u07aa\u0783\u07a7\u0790\u07b0\u078a\u07a6\u078c\u07a8","\u0780\u07aa\u0786\u07aa\u0783\u07aa","\u0780\u07ae\u0782\u07a8\u0780\u07a8\u0783\u07aa"];M.defineLocale("dv",{months:Fs,monthsShort:Fs,weekdays:zs,weekdaysShort:zs,weekdaysMin:"\u0787\u07a7\u078b\u07a8_\u0780\u07af\u0789\u07a6_\u0787\u07a6\u0782\u07b0_\u0784\u07aa\u078b\u07a6_\u0784\u07aa\u0783\u07a7_\u0780\u07aa\u0786\u07aa_\u0780\u07ae\u0782\u07a8".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"D/M/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},meridiemParse:/\u0789\u0786|\u0789\u078a/,isPM:function(e){return"\u0789\u078a"===e},meridiem:function(e,a,t){return e<12?"\u0789\u0786":"\u0789\u078a"},calendar:{sameDay:"[\u0789\u07a8\u0787\u07a6\u078b\u07aa] LT",nextDay:"[\u0789\u07a7\u078b\u07a6\u0789\u07a7] LT",nextWeek:"dddd LT",lastDay:"[\u0787\u07a8\u0787\u07b0\u0794\u07ac] LT",lastWeek:"[\u078a\u07a7\u0787\u07a8\u078c\u07aa\u0788\u07a8] dddd LT",sameElse:"L"},relativeTime:{future:"\u078c\u07ac\u0783\u07ad\u078e\u07a6\u0787\u07a8 %s",past:"\u0786\u07aa\u0783\u07a8\u0782\u07b0 %s",s:"\u0790\u07a8\u0786\u07aa\u0782\u07b0\u078c\u07aa\u0786\u07ae\u0785\u07ac\u0787\u07b0",ss:"d% \u0790\u07a8\u0786\u07aa\u0782\u07b0\u078c\u07aa",m:"\u0789\u07a8\u0782\u07a8\u0793\u07ac\u0787\u07b0",mm:"\u0789\u07a8\u0782\u07a8\u0793\u07aa %d",h:"\u078e\u07a6\u0791\u07a8\u0787\u07a8\u0783\u07ac\u0787\u07b0",hh:"\u078e\u07a6\u0791\u07a8\u0787\u07a8\u0783\u07aa %d",d:"\u078b\u07aa\u0788\u07a6\u0780\u07ac\u0787\u07b0",dd:"\u078b\u07aa\u0788\u07a6\u0790\u07b0 %d",M:"\u0789\u07a6\u0780\u07ac\u0787\u07b0",MM:"\u0789\u07a6\u0790\u07b0 %d",y:"\u0787\u07a6\u0780\u07a6\u0783\u07ac\u0787\u07b0",yy:"\u0787\u07a6\u0780\u07a6\u0783\u07aa %d"},preparse:function(e){return e.replace(/\u060c/g,",")},postformat:function(e){return e.replace(/,/g,"\u060c")},week:{dow:7,doy:12}}),M.defineLocale("el",{monthsNominativeEl:"\u0399\u03b1\u03bd\u03bf\u03c5\u03ac\u03c1\u03b9\u03bf\u03c2_\u03a6\u03b5\u03b2\u03c1\u03bf\u03c5\u03ac\u03c1\u03b9\u03bf\u03c2_\u039c\u03ac\u03c1\u03c4\u03b9\u03bf\u03c2_\u0391\u03c0\u03c1\u03af\u03bb\u03b9\u03bf\u03c2_\u039c\u03ac\u03b9\u03bf\u03c2_\u0399\u03bf\u03cd\u03bd\u03b9\u03bf\u03c2_\u0399\u03bf\u03cd\u03bb\u03b9\u03bf\u03c2_\u0391\u03cd\u03b3\u03bf\u03c5\u03c3\u03c4\u03bf\u03c2_\u03a3\u03b5\u03c0\u03c4\u03ad\u03bc\u03b2\u03c1\u03b9\u03bf\u03c2_\u039f\u03ba\u03c4\u03ce\u03b2\u03c1\u03b9\u03bf\u03c2_\u039d\u03bf\u03ad\u03bc\u03b2\u03c1\u03b9\u03bf\u03c2_\u0394\u03b5\u03ba\u03ad\u03bc\u03b2\u03c1\u03b9\u03bf\u03c2".split("_"),monthsGenitiveEl:"\u0399\u03b1\u03bd\u03bf\u03c5\u03b1\u03c1\u03af\u03bf\u03c5_\u03a6\u03b5\u03b2\u03c1\u03bf\u03c5\u03b1\u03c1\u03af\u03bf\u03c5_\u039c\u03b1\u03c1\u03c4\u03af\u03bf\u03c5_\u0391\u03c0\u03c1\u03b9\u03bb\u03af\u03bf\u03c5_\u039c\u03b1\u0390\u03bf\u03c5_\u0399\u03bf\u03c5\u03bd\u03af\u03bf\u03c5_\u0399\u03bf\u03c5\u03bb\u03af\u03bf\u03c5_\u0391\u03c5\u03b3\u03bf\u03cd\u03c3\u03c4\u03bf\u03c5_\u03a3\u03b5\u03c0\u03c4\u03b5\u03bc\u03b2\u03c1\u03af\u03bf\u03c5_\u039f\u03ba\u03c4\u03c9\u03b2\u03c1\u03af\u03bf\u03c5_\u039d\u03bf\u03b5\u03bc\u03b2\u03c1\u03af\u03bf\u03c5_\u0394\u03b5\u03ba\u03b5\u03bc\u03b2\u03c1\u03af\u03bf\u03c5".split("_"),months:function(e,a){return e?"string"==typeof a&&/D/.test(a.substring(0,a.indexOf("MMMM")))?this._monthsGenitiveEl[e.month()]:this._monthsNominativeEl[e.month()]:this._monthsNominativeEl},monthsShort:"\u0399\u03b1\u03bd_\u03a6\u03b5\u03b2_\u039c\u03b1\u03c1_\u0391\u03c0\u03c1_\u039c\u03b1\u03ca_\u0399\u03bf\u03c5\u03bd_\u0399\u03bf\u03c5\u03bb_\u0391\u03c5\u03b3_\u03a3\u03b5\u03c0_\u039f\u03ba\u03c4_\u039d\u03bf\u03b5_\u0394\u03b5\u03ba".split("_"),weekdays:"\u039a\u03c5\u03c1\u03b9\u03b1\u03ba\u03ae_\u0394\u03b5\u03c5\u03c4\u03ad\u03c1\u03b1_\u03a4\u03c1\u03af\u03c4\u03b7_\u03a4\u03b5\u03c4\u03ac\u03c1\u03c4\u03b7_\u03a0\u03ad\u03bc\u03c0\u03c4\u03b7_\u03a0\u03b1\u03c1\u03b1\u03c3\u03ba\u03b5\u03c5\u03ae_\u03a3\u03ac\u03b2\u03b2\u03b1\u03c4\u03bf".split("_"),weekdaysShort:"\u039a\u03c5\u03c1_\u0394\u03b5\u03c5_\u03a4\u03c1\u03b9_\u03a4\u03b5\u03c4_\u03a0\u03b5\u03bc_\u03a0\u03b1\u03c1_\u03a3\u03b1\u03b2".split("_"),weekdaysMin:"\u039a\u03c5_\u0394\u03b5_\u03a4\u03c1_\u03a4\u03b5_\u03a0\u03b5_\u03a0\u03b1_\u03a3\u03b1".split("_"),meridiem:function(e,a,t){return 11<e?t?"\u03bc\u03bc":"\u039c\u039c":t?"\u03c0\u03bc":"\u03a0\u039c"},isPM:function(e){return"\u03bc"===(e+"").toLowerCase()[0]},meridiemParse:/[\u03a0\u039c]\.?\u039c?\.?/i,longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendarEl:{sameDay:"[\u03a3\u03ae\u03bc\u03b5\u03c1\u03b1 {}] LT",nextDay:"[\u0391\u03cd\u03c1\u03b9\u03bf {}] LT",nextWeek:"dddd [{}] LT",lastDay:"[\u03a7\u03b8\u03b5\u03c2 {}] LT",lastWeek:function(){switch(this.day()){case 6:return"[\u03c4\u03bf \u03c0\u03c1\u03bf\u03b7\u03b3\u03bf\u03cd\u03bc\u03b5\u03bd\u03bf] dddd [{}] LT";default:return"[\u03c4\u03b7\u03bd \u03c0\u03c1\u03bf\u03b7\u03b3\u03bf\u03cd\u03bc\u03b5\u03bd\u03b7] dddd [{}] LT"}},sameElse:"L"},calendar:function(e,a){var t,s=this._calendarEl[e],n=a&&a.hours();return t=s,("undefined"!=typeof Function&&t instanceof Function||"[object Function]"===Object.prototype.toString.call(t))&&(s=s.apply(a)),s.replace("{}",n%12==1?"\u03c3\u03c4\u03b7":"\u03c3\u03c4\u03b9\u03c2")},relativeTime:{future:"\u03c3\u03b5 %s",past:"%s \u03c0\u03c1\u03b9\u03bd",s:"\u03bb\u03af\u03b3\u03b1 \u03b4\u03b5\u03c5\u03c4\u03b5\u03c1\u03cc\u03bb\u03b5\u03c0\u03c4\u03b1",ss:"%d \u03b4\u03b5\u03c5\u03c4\u03b5\u03c1\u03cc\u03bb\u03b5\u03c0\u03c4\u03b1",m:"\u03ad\u03bd\u03b1 \u03bb\u03b5\u03c0\u03c4\u03cc",mm:"%d \u03bb\u03b5\u03c0\u03c4\u03ac",h:"\u03bc\u03af\u03b1 \u03ce\u03c1\u03b1",hh:"%d \u03ce\u03c1\u03b5\u03c2",d:"\u03bc\u03af\u03b1 \u03bc\u03ad\u03c1\u03b1",dd:"%d \u03bc\u03ad\u03c1\u03b5\u03c2",M:"\u03ad\u03bd\u03b1\u03c2 \u03bc\u03ae\u03bd\u03b1\u03c2",MM:"%d \u03bc\u03ae\u03bd\u03b5\u03c2",y:"\u03ad\u03bd\u03b1\u03c2 \u03c7\u03c1\u03cc\u03bd\u03bf\u03c2",yy:"%d \u03c7\u03c1\u03cc\u03bd\u03b9\u03b1"},dayOfMonthOrdinalParse:/\d{1,2}\u03b7/,ordinal:"%d\u03b7",week:{dow:1,doy:4}}),M.defineLocale("en-au",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(e){var a=e%10;return e+(1==~~(e%100/10)?"th":1==a?"st":2==a?"nd":3==a?"rd":"th")},week:{dow:0,doy:4}}),M.defineLocale("en-ca",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"YYYY-MM-DD",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(e){var a=e%10;return e+(1==~~(e%100/10)?"th":1==a?"st":2==a?"nd":3==a?"rd":"th")}}),M.defineLocale("en-gb",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(e){var a=e%10;return e+(1==~~(e%100/10)?"th":1==a?"st":2==a?"nd":3==a?"rd":"th")},week:{dow:1,doy:4}}),M.defineLocale("en-ie",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(e){var a=e%10;return e+(1==~~(e%100/10)?"th":1==a?"st":2==a?"nd":3==a?"rd":"th")},week:{dow:1,doy:4}}),M.defineLocale("en-il",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(e){var a=e%10;return e+(1==~~(e%100/10)?"th":1==a?"st":2==a?"nd":3==a?"rd":"th")}}),M.defineLocale("en-in",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(e){var a=e%10;return e+(1==~~(e%100/10)?"th":1==a?"st":2==a?"nd":3==a?"rd":"th")},week:{dow:0,doy:6}}),M.defineLocale("en-nz",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(e){var a=e%10;return e+(1==~~(e%100/10)?"th":1==a?"st":2==a?"nd":3==a?"rd":"th")},week:{dow:1,doy:4}}),M.defineLocale("en-sg",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(e){var a=e%10;return e+(1==~~(e%100/10)?"th":1==a?"st":2==a?"nd":3==a?"rd":"th")},week:{dow:1,doy:4}}),M.defineLocale("eo",{months:"januaro_februaro_marto_aprilo_majo_junio_julio_a\u016dgusto_septembro_oktobro_novembro_decembro".split("_"),monthsShort:"jan_feb_mart_apr_maj_jun_jul_a\u016dg_sept_okt_nov_dec".split("_"),weekdays:"diman\u0109o_lundo_mardo_merkredo_\u0135a\u016ddo_vendredo_sabato".split("_"),weekdaysShort:"dim_lun_mard_merk_\u0135a\u016d_ven_sab".split("_"),weekdaysMin:"di_lu_ma_me_\u0135a_ve_sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"[la] D[-an de] MMMM, YYYY",LLL:"[la] D[-an de] MMMM, YYYY HH:mm",LLLL:"dddd[n], [la] D[-an de] MMMM, YYYY HH:mm",llll:"ddd, [la] D[-an de] MMM, YYYY HH:mm"},meridiemParse:/[ap]\.t\.m/i,isPM:function(e){return"p"===e.charAt(0).toLowerCase()},meridiem:function(e,a,t){return 11<e?t?"p.t.m.":"P.T.M.":t?"a.t.m.":"A.T.M."},calendar:{sameDay:"[Hodia\u016d je] LT",nextDay:"[Morga\u016d je] LT",nextWeek:"dddd[n je] LT",lastDay:"[Hiera\u016d je] LT",lastWeek:"[pasintan] dddd[n je] LT",sameElse:"L"},relativeTime:{future:"post %s",past:"anta\u016d %s",s:"kelkaj sekundoj",ss:"%d sekundoj",m:"unu minuto",mm:"%d minutoj",h:"unu horo",hh:"%d horoj",d:"unu tago",dd:"%d tagoj",M:"unu monato",MM:"%d monatoj",y:"unu jaro",yy:"%d jaroj"},dayOfMonthOrdinalParse:/\d{1,2}a/,ordinal:"%da",week:{dow:1,doy:7}});var Ns="ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.".split("_"),Js="ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic".split("_"),Rs=[/^ene/i,/^feb/i,/^mar/i,/^abr/i,/^may/i,/^jun/i,/^jul/i,/^ago/i,/^sep/i,/^oct/i,/^nov/i,/^dic/i],Cs=/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i;M.defineLocale("es-do",{months:"enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre".split("_"),monthsShort:function(e,a){return e?/-MMM-/.test(a)?Js[e.month()]:Ns[e.month()]:Ns},monthsRegex:Cs,monthsShortRegex:Cs,monthsStrictRegex:/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,monthsShortStrictRegex:/^(ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i,monthsParse:Rs,longMonthsParse:Rs,shortMonthsParse:Rs,weekdays:"domingo_lunes_martes_mi\xe9rcoles_jueves_viernes_s\xe1bado".split("_"),weekdaysShort:"dom._lun._mar._mi\xe9._jue._vie._s\xe1b.".split("_"),weekdaysMin:"do_lu_ma_mi_ju_vi_s\xe1".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY h:mm A",LLLL:"dddd, D [de] MMMM [de] YYYY h:mm A"},calendar:{sameDay:function(){return"[hoy a la"+(1!==this.hours()?"s":"")+"] LT"},nextDay:function(){return"[ma\xf1ana a la"+(1!==this.hours()?"s":"")+"] LT"},nextWeek:function(){return"dddd [a la"+(1!==this.hours()?"s":"")+"] LT"},lastDay:function(){return"[ayer a la"+(1!==this.hours()?"s":"")+"] LT"},lastWeek:function(){return"[el] dddd [pasado a la"+(1!==this.hours()?"s":"")+"] LT"},sameElse:"L"},relativeTime:{future:"en %s",past:"hace %s",s:"unos segundos",ss:"%d segundos",m:"un minuto",mm:"%d minutos",h:"una hora",hh:"%d horas",d:"un d\xeda",dd:"%d d\xedas",M:"un mes",MM:"%d meses",y:"un a\xf1o",yy:"%d a\xf1os"},dayOfMonthOrdinalParse:/\d{1,2}\xba/,ordinal:"%d\xba",week:{dow:1,doy:4}});var Is="ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.".split("_"),Us="ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic".split("_"),Gs=[/^ene/i,/^feb/i,/^mar/i,/^abr/i,/^may/i,/^jun/i,/^jul/i,/^ago/i,/^sep/i,/^oct/i,/^nov/i,/^dic/i],Vs=/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i;M.defineLocale("es-us",{months:"enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre".split("_"),monthsShort:function(e,a){return e?/-MMM-/.test(a)?Us[e.month()]:Is[e.month()]:Is},monthsRegex:Vs,monthsShortRegex:Vs,monthsStrictRegex:/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,monthsShortStrictRegex:/^(ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i,monthsParse:Gs,longMonthsParse:Gs,shortMonthsParse:Gs,weekdays:"domingo_lunes_martes_mi\xe9rcoles_jueves_viernes_s\xe1bado".split("_"),weekdaysShort:"dom._lun._mar._mi\xe9._jue._vie._s\xe1b.".split("_"),weekdaysMin:"do_lu_ma_mi_ju_vi_s\xe1".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"MM/DD/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY h:mm A",LLLL:"dddd, D [de] MMMM [de] YYYY h:mm A"},calendar:{sameDay:function(){return"[hoy a la"+(1!==this.hours()?"s":"")+"] LT"},nextDay:function(){return"[ma\xf1ana a la"+(1!==this.hours()?"s":"")+"] LT"},nextWeek:function(){return"dddd [a la"+(1!==this.hours()?"s":"")+"] LT"},lastDay:function(){return"[ayer a la"+(1!==this.hours()?"s":"")+"] LT"},lastWeek:function(){return"[el] dddd [pasado a la"+(1!==this.hours()?"s":"")+"] LT"},sameElse:"L"},relativeTime:{future:"en %s",past:"hace %s",s:"unos segundos",ss:"%d segundos",m:"un minuto",mm:"%d minutos",h:"una hora",hh:"%d horas",d:"un d\xeda",dd:"%d d\xedas",M:"un mes",MM:"%d meses",y:"un a\xf1o",yy:"%d a\xf1os"},dayOfMonthOrdinalParse:/\d{1,2}\xba/,ordinal:"%d\xba",week:{dow:0,doy:6}});var Bs="ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.".split("_"),Ks="ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic".split("_"),qs=[/^ene/i,/^feb/i,/^mar/i,/^abr/i,/^may/i,/^jun/i,/^jul/i,/^ago/i,/^sep/i,/^oct/i,/^nov/i,/^dic/i],Zs=/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i;function $s(e,a,t,s){var n={s:["m\xf5ne sekundi","m\xf5ni sekund","paar sekundit"],ss:[e+"sekundi",e+"sekundit"],m:["\xfche minuti","\xfcks minut"],mm:[e+" minuti",e+" minutit"],h:["\xfche tunni","tund aega","\xfcks tund"],hh:[e+" tunni",e+" tundi"],d:["\xfche p\xe4eva","\xfcks p\xe4ev"],M:["kuu aja","kuu aega","\xfcks kuu"],MM:[e+" kuu",e+" kuud"],y:["\xfche aasta","aasta","\xfcks aasta"],yy:[e+" aasta",e+" aastat"]};return a?n[t][2]?n[t][2]:n[t][1]:s?n[t][0]:n[t][1]}M.defineLocale("es",{months:"enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre".split("_"),monthsShort:function(e,a){return e?/-MMM-/.test(a)?Ks[e.month()]:Bs[e.month()]:Bs},monthsRegex:Zs,monthsShortRegex:Zs,monthsStrictRegex:/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,monthsShortStrictRegex:/^(ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i,monthsParse:qs,longMonthsParse:qs,shortMonthsParse:qs,weekdays:"domingo_lunes_martes_mi\xe9rcoles_jueves_viernes_s\xe1bado".split("_"),weekdaysShort:"dom._lun._mar._mi\xe9._jue._vie._s\xe1b.".split("_"),weekdaysMin:"do_lu_ma_mi_ju_vi_s\xe1".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY H:mm",LLLL:"dddd, D [de] MMMM [de] YYYY H:mm"},calendar:{sameDay:function(){return"[hoy a la"+(1!==this.hours()?"s":"")+"] LT"},nextDay:function(){return"[ma\xf1ana a la"+(1!==this.hours()?"s":"")+"] LT"},nextWeek:function(){return"dddd [a la"+(1!==this.hours()?"s":"")+"] LT"},lastDay:function(){return"[ayer a la"+(1!==this.hours()?"s":"")+"] LT"},lastWeek:function(){return"[el] dddd [pasado a la"+(1!==this.hours()?"s":"")+"] LT"},sameElse:"L"},relativeTime:{future:"en %s",past:"hace %s",s:"unos segundos",ss:"%d segundos",m:"un minuto",mm:"%d minutos",h:"una hora",hh:"%d horas",d:"un d\xeda",dd:"%d d\xedas",M:"un mes",MM:"%d meses",y:"un a\xf1o",yy:"%d a\xf1os"},dayOfMonthOrdinalParse:/\d{1,2}\xba/,ordinal:"%d\xba",week:{dow:1,doy:4},invalidDate:"Fecha inv\xe1lida"}),M.defineLocale("et",{months:"jaanuar_veebruar_m\xe4rts_aprill_mai_juuni_juuli_august_september_oktoober_november_detsember".split("_"),monthsShort:"jaan_veebr_m\xe4rts_apr_mai_juuni_juuli_aug_sept_okt_nov_dets".split("_"),weekdays:"p\xfchap\xe4ev_esmasp\xe4ev_teisip\xe4ev_kolmap\xe4ev_neljap\xe4ev_reede_laup\xe4ev".split("_"),weekdaysShort:"P_E_T_K_N_R_L".split("_"),weekdaysMin:"P_E_T_K_N_R_L".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[T\xe4na,] LT",nextDay:"[Homme,] LT",nextWeek:"[J\xe4rgmine] dddd LT",lastDay:"[Eile,] LT",lastWeek:"[Eelmine] dddd LT",sameElse:"L"},relativeTime:{future:"%s p\xe4rast",past:"%s tagasi",s:$s,ss:$s,m:$s,mm:$s,h:$s,hh:$s,d:$s,dd:"%d p\xe4eva",M:$s,MM:$s,y:$s,yy:$s},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}}),M.defineLocale("eu",{months:"urtarrila_otsaila_martxoa_apirila_maiatza_ekaina_uztaila_abuztua_iraila_urria_azaroa_abendua".split("_"),monthsShort:"urt._ots._mar._api._mai._eka._uzt._abu._ira._urr._aza._abe.".split("_"),monthsParseExact:!0,weekdays:"igandea_astelehena_asteartea_asteazkena_osteguna_ostirala_larunbata".split("_"),weekdaysShort:"ig._al._ar._az._og._ol._lr.".split("_"),weekdaysMin:"ig_al_ar_az_og_ol_lr".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"YYYY[ko] MMMM[ren] D[a]",LLL:"YYYY[ko] MMMM[ren] D[a] HH:mm",LLLL:"dddd, YYYY[ko] MMMM[ren] D[a] HH:mm",l:"YYYY-M-D",ll:"YYYY[ko] MMM D[a]",lll:"YYYY[ko] MMM D[a] HH:mm",llll:"ddd, YYYY[ko] MMM D[a] HH:mm"},calendar:{sameDay:"[gaur] LT[etan]",nextDay:"[bihar] LT[etan]",nextWeek:"dddd LT[etan]",lastDay:"[atzo] LT[etan]",lastWeek:"[aurreko] dddd LT[etan]",sameElse:"L"},relativeTime:{future:"%s barru",past:"duela %s",s:"segundo batzuk",ss:"%d segundo",m:"minutu bat",mm:"%d minutu",h:"ordu bat",hh:"%d ordu",d:"egun bat",dd:"%d egun",M:"hilabete bat",MM:"%d hilabete",y:"urte bat",yy:"%d urte"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}});var Qs={1:"\u06f1",2:"\u06f2",3:"\u06f3",4:"\u06f4",5:"\u06f5",6:"\u06f6",7:"\u06f7",8:"\u06f8",9:"\u06f9",0:"\u06f0"},Xs={"\u06f1":"1","\u06f2":"2","\u06f3":"3","\u06f4":"4","\u06f5":"5","\u06f6":"6","\u06f7":"7","\u06f8":"8","\u06f9":"9","\u06f0":"0"};M.defineLocale("fa",{months:"\u0698\u0627\u0646\u0648\u06cc\u0647_\u0641\u0648\u0631\u06cc\u0647_\u0645\u0627\u0631\u0633_\u0622\u0648\u0631\u06cc\u0644_\u0645\u0647_\u0698\u0648\u0626\u0646_\u0698\u0648\u0626\u06cc\u0647_\u0627\u0648\u062a_\u0633\u067e\u062a\u0627\u0645\u0628\u0631_\u0627\u06a9\u062a\u0628\u0631_\u0646\u0648\u0627\u0645\u0628\u0631_\u062f\u0633\u0627\u0645\u0628\u0631".split("_"),monthsShort:"\u0698\u0627\u0646\u0648\u06cc\u0647_\u0641\u0648\u0631\u06cc\u0647_\u0645\u0627\u0631\u0633_\u0622\u0648\u0631\u06cc\u0644_\u0645\u0647_\u0698\u0648\u0626\u0646_\u0698\u0648\u0626\u06cc\u0647_\u0627\u0648\u062a_\u0633\u067e\u062a\u0627\u0645\u0628\u0631_\u0627\u06a9\u062a\u0628\u0631_\u0646\u0648\u0627\u0645\u0628\u0631_\u062f\u0633\u0627\u0645\u0628\u0631".split("_"),weekdays:"\u06cc\u06a9\u200c\u0634\u0646\u0628\u0647_\u062f\u0648\u0634\u0646\u0628\u0647_\u0633\u0647\u200c\u0634\u0646\u0628\u0647_\u0686\u0647\u0627\u0631\u0634\u0646\u0628\u0647_\u067e\u0646\u062c\u200c\u0634\u0646\u0628\u0647_\u062c\u0645\u0639\u0647_\u0634\u0646\u0628\u0647".split("_"),weekdaysShort:"\u06cc\u06a9\u200c\u0634\u0646\u0628\u0647_\u062f\u0648\u0634\u0646\u0628\u0647_\u0633\u0647\u200c\u0634\u0646\u0628\u0647_\u0686\u0647\u0627\u0631\u0634\u0646\u0628\u0647_\u067e\u0646\u062c\u200c\u0634\u0646\u0628\u0647_\u062c\u0645\u0639\u0647_\u0634\u0646\u0628\u0647".split("_"),weekdaysMin:"\u06cc_\u062f_\u0633_\u0686_\u067e_\u062c_\u0634".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},meridiemParse:/\u0642\u0628\u0644 \u0627\u0632 \u0638\u0647\u0631|\u0628\u0639\u062f \u0627\u0632 \u0638\u0647\u0631/,isPM:function(e){return/\u0628\u0639\u062f \u0627\u0632 \u0638\u0647\u0631/.test(e)},meridiem:function(e,a,t){return e<12?"\u0642\u0628\u0644 \u0627\u0632 \u0638\u0647\u0631":"\u0628\u0639\u062f \u0627\u0632 \u0638\u0647\u0631"},calendar:{sameDay:"[\u0627\u0645\u0631\u0648\u0632 \u0633\u0627\u0639\u062a] LT",nextDay:"[\u0641\u0631\u062f\u0627 \u0633\u0627\u0639\u062a] LT",nextWeek:"dddd [\u0633\u0627\u0639\u062a] LT",lastDay:"[\u062f\u06cc\u0631\u0648\u0632 \u0633\u0627\u0639\u062a] LT",lastWeek:"dddd [\u067e\u06cc\u0634] [\u0633\u0627\u0639\u062a] LT",sameElse:"L"},relativeTime:{future:"\u062f\u0631 %s",past:"%s \u067e\u06cc\u0634",s:"\u0686\u0646\u062f \u062b\u0627\u0646\u06cc\u0647",ss:"%d \u062b\u0627\u0646\u06cc\u0647",m:"\u06cc\u06a9 \u062f\u0642\u06cc\u0642\u0647",mm:"%d \u062f\u0642\u06cc\u0642\u0647",h:"\u06cc\u06a9 \u0633\u0627\u0639\u062a",hh:"%d \u0633\u0627\u0639\u062a",d:"\u06cc\u06a9 \u0631\u0648\u0632",dd:"%d \u0631\u0648\u0632",M:"\u06cc\u06a9 \u0645\u0627\u0647",MM:"%d \u0645\u0627\u0647",y:"\u06cc\u06a9 \u0633\u0627\u0644",yy:"%d \u0633\u0627\u0644"},preparse:function(e){return e.replace(/[\u06f0-\u06f9]/g,function(e){return Xs[e]}).replace(/\u060c/g,",")},postformat:function(e){return e.replace(/\d/g,function(e){return Qs[e]}).replace(/,/g,"\u060c")},dayOfMonthOrdinalParse:/\d{1,2}\u0645/,ordinal:"%d\u0645",week:{dow:6,doy:12}});var en="nolla yksi kaksi kolme nelj\xe4 viisi kuusi seitsem\xe4n kahdeksan yhdeks\xe4n".split(" "),an=["nolla","yhden","kahden","kolmen","nelj\xe4n","viiden","kuuden",en[7],en[8],en[9]];function tn(e,a,t,s){var n,r,d="";switch(t){case"s":return s?"muutaman sekunnin":"muutama sekunti";case"ss":d=s?"sekunnin":"sekuntia";break;case"m":return s?"minuutin":"minuutti";case"mm":d=s?"minuutin":"minuuttia";break;case"h":return s?"tunnin":"tunti";case"hh":d=s?"tunnin":"tuntia";break;case"d":return s?"p\xe4iv\xe4n":"p\xe4iv\xe4";case"dd":d=s?"p\xe4iv\xe4n":"p\xe4iv\xe4\xe4";break;case"M":return s?"kuukauden":"kuukausi";case"MM":d=s?"kuukauden":"kuukautta";break;case"y":return s?"vuoden":"vuosi";case"yy":d=s?"vuoden":"vuotta";break}return r=s,d=((n=e)<10?r?an[n]:en[n]:n)+" "+d}M.defineLocale("fi",{months:"tammikuu_helmikuu_maaliskuu_huhtikuu_toukokuu_kes\xe4kuu_hein\xe4kuu_elokuu_syyskuu_lokakuu_marraskuu_joulukuu".split("_"),monthsShort:"tammi_helmi_maalis_huhti_touko_kes\xe4_hein\xe4_elo_syys_loka_marras_joulu".split("_"),weekdays:"sunnuntai_maanantai_tiistai_keskiviikko_torstai_perjantai_lauantai".split("_"),weekdaysShort:"su_ma_ti_ke_to_pe_la".split("_"),weekdaysMin:"su_ma_ti_ke_to_pe_la".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD.MM.YYYY",LL:"Do MMMM[ta] YYYY",LLL:"Do MMMM[ta] YYYY, [klo] HH.mm",LLLL:"dddd, Do MMMM[ta] YYYY, [klo] HH.mm",l:"D.M.YYYY",ll:"Do MMM YYYY",lll:"Do MMM YYYY, [klo] HH.mm",llll:"ddd, Do MMM YYYY, [klo] HH.mm"},calendar:{sameDay:"[t\xe4n\xe4\xe4n] [klo] LT",nextDay:"[huomenna] [klo] LT",nextWeek:"dddd [klo] LT",lastDay:"[eilen] [klo] LT",lastWeek:"[viime] dddd[na] [klo] LT",sameElse:"L"},relativeTime:{future:"%s p\xe4\xe4st\xe4",past:"%s sitten",s:tn,ss:tn,m:tn,mm:tn,h:tn,hh:tn,d:tn,dd:tn,M:tn,MM:tn,y:tn,yy:tn},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}}),M.defineLocale("fil",{months:"Enero_Pebrero_Marso_Abril_Mayo_Hunyo_Hulyo_Agosto_Setyembre_Oktubre_Nobyembre_Disyembre".split("_"),monthsShort:"Ene_Peb_Mar_Abr_May_Hun_Hul_Ago_Set_Okt_Nob_Dis".split("_"),weekdays:"Linggo_Lunes_Martes_Miyerkules_Huwebes_Biyernes_Sabado".split("_"),weekdaysShort:"Lin_Lun_Mar_Miy_Huw_Biy_Sab".split("_"),weekdaysMin:"Li_Lu_Ma_Mi_Hu_Bi_Sab".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"MM/D/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY HH:mm",LLLL:"dddd, MMMM DD, YYYY HH:mm"},calendar:{sameDay:"LT [ngayong araw]",nextDay:"[Bukas ng] LT",nextWeek:"LT [sa susunod na] dddd",lastDay:"LT [kahapon]",lastWeek:"LT [noong nakaraang] dddd",sameElse:"L"},relativeTime:{future:"sa loob ng %s",past:"%s ang nakalipas",s:"ilang segundo",ss:"%d segundo",m:"isang minuto",mm:"%d minuto",h:"isang oras",hh:"%d oras",d:"isang araw",dd:"%d araw",M:"isang buwan",MM:"%d buwan",y:"isang taon",yy:"%d taon"},dayOfMonthOrdinalParse:/\d{1,2}/,ordinal:function(e){return e},week:{dow:1,doy:4}}),M.defineLocale("fo",{months:"januar_februar_mars_apr\xedl_mai_juni_juli_august_september_oktober_november_desember".split("_"),monthsShort:"jan_feb_mar_apr_mai_jun_jul_aug_sep_okt_nov_des".split("_"),weekdays:"sunnudagur_m\xe1nadagur_t\xfdsdagur_mikudagur_h\xf3sdagur_fr\xedggjadagur_leygardagur".split("_"),weekdaysShort:"sun_m\xe1n_t\xfds_mik_h\xf3s_fr\xed_ley".split("_"),weekdaysMin:"su_m\xe1_t\xfd_mi_h\xf3_fr_le".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D. MMMM, YYYY HH:mm"},calendar:{sameDay:"[\xcd dag kl.] LT",nextDay:"[\xcd morgin kl.] LT",nextWeek:"dddd [kl.] LT",lastDay:"[\xcd gj\xe1r kl.] LT",lastWeek:"[s\xed\xf0stu] dddd [kl] LT",sameElse:"L"},relativeTime:{future:"um %s",past:"%s s\xed\xf0ani",s:"f\xe1 sekund",ss:"%d sekundir",m:"ein minuttur",mm:"%d minuttir",h:"ein t\xedmi",hh:"%d t\xedmar",d:"ein dagur",dd:"%d dagar",M:"ein m\xe1na\xf0ur",MM:"%d m\xe1na\xf0ir",y:"eitt \xe1r",yy:"%d \xe1r"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}}),M.defineLocale("fr-ca",{months:"janvier_f\xe9vrier_mars_avril_mai_juin_juillet_ao\xfbt_septembre_octobre_novembre_d\xe9cembre".split("_"),monthsShort:"janv._f\xe9vr._mars_avr._mai_juin_juil._ao\xfbt_sept._oct._nov._d\xe9c.".split("_"),monthsParseExact:!0,weekdays:"dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi".split("_"),weekdaysShort:"dim._lun._mar._mer._jeu._ven._sam.".split("_"),weekdaysMin:"di_lu_ma_me_je_ve_sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[Aujourd\u2019hui \xe0] LT",nextDay:"[Demain \xe0] LT",nextWeek:"dddd [\xe0] LT",lastDay:"[Hier \xe0] LT",lastWeek:"dddd [dernier \xe0] LT",sameElse:"L"},relativeTime:{future:"dans %s",past:"il y a %s",s:"quelques secondes",ss:"%d secondes",m:"une minute",mm:"%d minutes",h:"une heure",hh:"%d heures",d:"un jour",dd:"%d jours",M:"un mois",MM:"%d mois",y:"un an",yy:"%d ans"},dayOfMonthOrdinalParse:/\d{1,2}(er|e)/,ordinal:function(e,a){switch(a){default:case"M":case"Q":case"D":case"DDD":case"d":return e+(1===e?"er":"e");case"w":case"W":return e+(1===e?"re":"e")}}}),M.defineLocale("fr-ch",{months:"janvier_f\xe9vrier_mars_avril_mai_juin_juillet_ao\xfbt_septembre_octobre_novembre_d\xe9cembre".split("_"),monthsShort:"janv._f\xe9vr._mars_avr._mai_juin_juil._ao\xfbt_sept._oct._nov._d\xe9c.".split("_"),monthsParseExact:!0,weekdays:"dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi".split("_"),weekdaysShort:"dim._lun._mar._mer._jeu._ven._sam.".split("_"),weekdaysMin:"di_lu_ma_me_je_ve_sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[Aujourd\u2019hui \xe0] LT",nextDay:"[Demain \xe0] LT",nextWeek:"dddd [\xe0] LT",lastDay:"[Hier \xe0] LT",lastWeek:"dddd [dernier \xe0] LT",sameElse:"L"},relativeTime:{future:"dans %s",past:"il y a %s",s:"quelques secondes",ss:"%d secondes",m:"une minute",mm:"%d minutes",h:"une heure",hh:"%d heures",d:"un jour",dd:"%d jours",M:"un mois",MM:"%d mois",y:"un an",yy:"%d ans"},dayOfMonthOrdinalParse:/\d{1,2}(er|e)/,ordinal:function(e,a){switch(a){default:case"M":case"Q":case"D":case"DDD":case"d":return e+(1===e?"er":"e");case"w":case"W":return e+(1===e?"re":"e")}},week:{dow:1,doy:4}});var sn=/(janv\.?|f\xe9vr\.?|mars|avr\.?|mai|juin|juil\.?|ao\xfbt|sept\.?|oct\.?|nov\.?|d\xe9c\.?|janvier|f\xe9vrier|mars|avril|mai|juin|juillet|ao\xfbt|septembre|octobre|novembre|d\xe9cembre)/i,nn=[/^janv/i,/^f\xe9vr/i,/^mars/i,/^avr/i,/^mai/i,/^juin/i,/^juil/i,/^ao\xfbt/i,/^sept/i,/^oct/i,/^nov/i,/^d\xe9c/i];M.defineLocale("fr",{months:"janvier_f\xe9vrier_mars_avril_mai_juin_juillet_ao\xfbt_septembre_octobre_novembre_d\xe9cembre".split("_"),monthsShort:"janv._f\xe9vr._mars_avr._mai_juin_juil._ao\xfbt_sept._oct._nov._d\xe9c.".split("_"),monthsRegex:sn,monthsShortRegex:sn,monthsStrictRegex:/^(janvier|f\xe9vrier|mars|avril|mai|juin|juillet|ao\xfbt|septembre|octobre|novembre|d\xe9cembre)/i,monthsShortStrictRegex:/(janv\.?|f\xe9vr\.?|mars|avr\.?|mai|juin|juil\.?|ao\xfbt|sept\.?|oct\.?|nov\.?|d\xe9c\.?)/i,monthsParse:nn,longMonthsParse:nn,shortMonthsParse:nn,weekdays:"dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi".split("_"),weekdaysShort:"dim._lun._mar._mer._jeu._ven._sam.".split("_"),weekdaysMin:"di_lu_ma_me_je_ve_sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[Aujourd\u2019hui \xe0] LT",nextDay:"[Demain \xe0] LT",nextWeek:"dddd [\xe0] LT",lastDay:"[Hier \xe0] LT",lastWeek:"dddd [dernier \xe0] LT",sameElse:"L"},relativeTime:{future:"dans %s",past:"il y a %s",s:"quelques secondes",ss:"%d secondes",m:"une minute",mm:"%d minutes",h:"une heure",hh:"%d heures",d:"un jour",dd:"%d jours",M:"un mois",MM:"%d mois",y:"un an",yy:"%d ans"},dayOfMonthOrdinalParse:/\d{1,2}(er|)/,ordinal:function(e,a){switch(a){case"D":return e+(1===e?"er":"");default:case"M":case"Q":case"DDD":case"d":return e+(1===e?"er":"e");case"w":case"W":return e+(1===e?"re":"e")}},week:{dow:1,doy:4}});var rn="jan._feb._mrt._apr._mai_jun._jul._aug._sep._okt._nov._des.".split("_"),dn="jan_feb_mrt_apr_mai_jun_jul_aug_sep_okt_nov_des".split("_");M.defineLocale("fy",{months:"jannewaris_febrewaris_maart_april_maaie_juny_july_augustus_septimber_oktober_novimber_desimber".split("_"),monthsShort:function(e,a){return e?/-MMM-/.test(a)?dn[e.month()]:rn[e.month()]:rn},monthsParseExact:!0,weekdays:"snein_moandei_tiisdei_woansdei_tongersdei_freed_sneon".split("_"),weekdaysShort:"si._mo._ti._wo._to._fr._so.".split("_"),weekdaysMin:"Si_Mo_Ti_Wo_To_Fr_So".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD-MM-YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[hjoed om] LT",nextDay:"[moarn om] LT",nextWeek:"dddd [om] LT",lastDay:"[juster om] LT",lastWeek:"[\xf4fr\xfbne] dddd [om] LT",sameElse:"L"},relativeTime:{future:"oer %s",past:"%s lyn",s:"in pear sekonden",ss:"%d sekonden",m:"ien min\xfat",mm:"%d minuten",h:"ien oere",hh:"%d oeren",d:"ien dei",dd:"%d dagen",M:"ien moanne",MM:"%d moannen",y:"ien jier",yy:"%d jierren"},dayOfMonthOrdinalParse:/\d{1,2}(ste|de)/,ordinal:function(e){return e+(1===e||8===e||20<=e?"ste":"de")},week:{dow:1,doy:4}});M.defineLocale("ga",{months:["Ean\xe1ir","Feabhra","M\xe1rta","Aibre\xe1n","Bealtaine","Meitheamh","I\xfail","L\xfanasa","Me\xe1n F\xf3mhair","Deireadh F\xf3mhair","Samhain","Nollaig"],monthsShort:["Ean","Feabh","M\xe1rt","Aib","Beal","Meith","I\xfail","L\xfan","M.F.","D.F.","Samh","Noll"],monthsParseExact:!0,weekdays:["D\xe9 Domhnaigh","D\xe9 Luain","D\xe9 M\xe1irt","D\xe9 C\xe9adaoin","D\xe9ardaoin","D\xe9 hAoine","D\xe9 Sathairn"],weekdaysShort:["Domh","Luan","M\xe1irt","C\xe9ad","D\xe9ar","Aoine","Sath"],weekdaysMin:["Do","Lu","M\xe1","C\xe9","D\xe9","A","Sa"],longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Inniu ag] LT",nextDay:"[Am\xe1rach ag] LT",nextWeek:"dddd [ag] LT",lastDay:"[Inn\xe9 ag] LT",lastWeek:"dddd [seo caite] [ag] LT",sameElse:"L"},relativeTime:{future:"i %s",past:"%s \xf3 shin",s:"c\xfapla soicind",ss:"%d soicind",m:"n\xf3im\xe9ad",mm:"%d n\xf3im\xe9ad",h:"uair an chloig",hh:"%d uair an chloig",d:"l\xe1",dd:"%d l\xe1",M:"m\xed",MM:"%d m\xedonna",y:"bliain",yy:"%d bliain"},dayOfMonthOrdinalParse:/\d{1,2}(d|na|mh)/,ordinal:function(e){return e+(1===e?"d":e%10==2?"na":"mh")},week:{dow:1,doy:4}});function _n(e,a,t,s){var n={s:["\u0925\u094b\u0921\u092f\u093e \u0938\u0945\u0915\u0902\u0921\u093e\u0902\u0928\u0940","\u0925\u094b\u0921\u0947 \u0938\u0945\u0915\u0902\u0921"],ss:[e+" \u0938\u0945\u0915\u0902\u0921\u093e\u0902\u0928\u0940",e+" \u0938\u0945\u0915\u0902\u0921"],m:["\u090f\u0915\u093e \u092e\u093f\u0923\u091f\u093e\u0928","\u090f\u0915 \u092e\u093f\u0928\u0942\u091f"],mm:[e+" \u092e\u093f\u0923\u091f\u093e\u0902\u0928\u0940",e+" \u092e\u093f\u0923\u091f\u093e\u0902"],h:["\u090f\u0915\u093e \u0935\u0930\u093e\u0928","\u090f\u0915 \u0935\u0930"],hh:[e+" \u0935\u0930\u093e\u0902\u0928\u0940",e+" \u0935\u0930\u093e\u0902"],d:["\u090f\u0915\u093e \u0926\u093f\u0938\u093e\u0928","\u090f\u0915 \u0926\u0940\u0938"],dd:[e+" \u0926\u093f\u0938\u093e\u0902\u0928\u0940",e+" \u0926\u0940\u0938"],M:["\u090f\u0915\u093e \u092e\u094d\u0939\u092f\u0928\u094d\u092f\u093e\u0928","\u090f\u0915 \u092e\u094d\u0939\u092f\u0928\u094b"],MM:[e+" \u092e\u094d\u0939\u092f\u0928\u094d\u092f\u093e\u0928\u0940",e+" \u092e\u094d\u0939\u092f\u0928\u0947"],y:["\u090f\u0915\u093e \u0935\u0930\u094d\u0938\u093e\u0928","\u090f\u0915 \u0935\u0930\u094d\u0938"],yy:[e+" \u0935\u0930\u094d\u0938\u093e\u0902\u0928\u0940",e+" \u0935\u0930\u094d\u0938\u093e\u0902"]};return s?n[t][0]:n[t][1]}function on(e,a,t,s){var n={s:["thoddea sekondamni","thodde sekond"],ss:[e+" sekondamni",e+" sekond"],m:["eka mintan","ek minut"],mm:[e+" mintamni",e+" mintam"],h:["eka voran","ek vor"],hh:[e+" voramni",e+" voram"],d:["eka disan","ek dis"],dd:[e+" disamni",e+" dis"],M:["eka mhoinean","ek mhoino"],MM:[e+" mhoineamni",e+" mhoine"],y:["eka vorsan","ek voros"],yy:[e+" vorsamni",e+" vorsam"]};return s?n[t][0]:n[t][1]}M.defineLocale("gd",{months:["Am Faoilleach","An Gearran","Am M\xe0rt","An Giblean","An C\xe8itean","An t-\xd2gmhios","An t-Iuchar","An L\xf9nastal","An t-Sultain","An D\xe0mhair","An t-Samhain","An D\xf9bhlachd"],monthsShort:["Faoi","Gear","M\xe0rt","Gibl","C\xe8it","\xd2gmh","Iuch","L\xf9n","Sult","D\xe0mh","Samh","D\xf9bh"],monthsParseExact:!0,weekdays:["Did\xf2mhnaich","Diluain","Dim\xe0irt","Diciadain","Diardaoin","Dihaoine","Disathairne"],weekdaysShort:["Did","Dil","Dim","Dic","Dia","Dih","Dis"],weekdaysMin:["D\xf2","Lu","M\xe0","Ci","Ar","Ha","Sa"],longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[An-diugh aig] LT",nextDay:"[A-m\xe0ireach aig] LT",nextWeek:"dddd [aig] LT",lastDay:"[An-d\xe8 aig] LT",lastWeek:"dddd [seo chaidh] [aig] LT",sameElse:"L"},relativeTime:{future:"ann an %s",past:"bho chionn %s",s:"beagan diogan",ss:"%d diogan",m:"mionaid",mm:"%d mionaidean",h:"uair",hh:"%d uairean",d:"latha",dd:"%d latha",M:"m\xecos",MM:"%d m\xecosan",y:"bliadhna",yy:"%d bliadhna"},dayOfMonthOrdinalParse:/\d{1,2}(d|na|mh)/,ordinal:function(e){return e+(1===e?"d":e%10==2?"na":"mh")},week:{dow:1,doy:4}}),M.defineLocale("gl",{months:"xaneiro_febreiro_marzo_abril_maio_xu\xf1o_xullo_agosto_setembro_outubro_novembro_decembro".split("_"),monthsShort:"xan._feb._mar._abr._mai._xu\xf1._xul._ago._set._out._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"domingo_luns_martes_m\xe9rcores_xoves_venres_s\xe1bado".split("_"),weekdaysShort:"dom._lun._mar._m\xe9r._xov._ven._s\xe1b.".split("_"),weekdaysMin:"do_lu_ma_m\xe9_xo_ve_s\xe1".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY H:mm",LLLL:"dddd, D [de] MMMM [de] YYYY H:mm"},calendar:{sameDay:function(){return"[hoxe "+(1!==this.hours()?"\xe1s":"\xe1")+"] LT"},nextDay:function(){return"[ma\xf1\xe1 "+(1!==this.hours()?"\xe1s":"\xe1")+"] LT"},nextWeek:function(){return"dddd ["+(1!==this.hours()?"\xe1s":"a")+"] LT"},lastDay:function(){return"[onte "+(1!==this.hours()?"\xe1":"a")+"] LT"},lastWeek:function(){return"[o] dddd [pasado "+(1!==this.hours()?"\xe1s":"a")+"] LT"},sameElse:"L"},relativeTime:{future:function(e){return 0===e.indexOf("un")?"n"+e:"en "+e},past:"hai %s",s:"uns segundos",ss:"%d segundos",m:"un minuto",mm:"%d minutos",h:"unha hora",hh:"%d horas",d:"un d\xeda",dd:"%d d\xedas",M:"un mes",MM:"%d meses",y:"un ano",yy:"%d anos"},dayOfMonthOrdinalParse:/\d{1,2}\xba/,ordinal:"%d\xba",week:{dow:1,doy:4}}),M.defineLocale("gom-deva",{months:{standalone:"\u091c\u093e\u0928\u0947\u0935\u093e\u0930\u0940_\u092b\u0947\u092c\u094d\u0930\u0941\u0935\u093e\u0930\u0940_\u092e\u093e\u0930\u094d\u091a_\u090f\u092a\u094d\u0930\u0940\u0932_\u092e\u0947_\u091c\u0942\u0928_\u091c\u0941\u0932\u092f_\u0911\u0917\u0938\u094d\u091f_\u0938\u092a\u094d\u091f\u0947\u0902\u092c\u0930_\u0911\u0915\u094d\u091f\u094b\u092c\u0930_\u0928\u094b\u0935\u094d\u0939\u0947\u0902\u092c\u0930_\u0921\u093f\u0938\u0947\u0902\u092c\u0930".split("_"),format:"\u091c\u093e\u0928\u0947\u0935\u093e\u0930\u0940\u091a\u094d\u092f\u093e_\u092b\u0947\u092c\u094d\u0930\u0941\u0935\u093e\u0930\u0940\u091a\u094d\u092f\u093e_\u092e\u093e\u0930\u094d\u091a\u093e\u091a\u094d\u092f\u093e_\u090f\u092a\u094d\u0930\u0940\u0932\u093e\u091a\u094d\u092f\u093e_\u092e\u0947\u092f\u093e\u091a\u094d\u092f\u093e_\u091c\u0942\u0928\u093e\u091a\u094d\u092f\u093e_\u091c\u0941\u0932\u092f\u093e\u091a\u094d\u092f\u093e_\u0911\u0917\u0938\u094d\u091f\u093e\u091a\u094d\u092f\u093e_\u0938\u092a\u094d\u091f\u0947\u0902\u092c\u0930\u093e\u091a\u094d\u092f\u093e_\u0911\u0915\u094d\u091f\u094b\u092c\u0930\u093e\u091a\u094d\u092f\u093e_\u0928\u094b\u0935\u094d\u0939\u0947\u0902\u092c\u0930\u093e\u091a\u094d\u092f\u093e_\u0921\u093f\u0938\u0947\u0902\u092c\u0930\u093e\u091a\u094d\u092f\u093e".split("_"),isFormat:/MMMM(\s)+D[oD]?/},monthsShort:"\u091c\u093e\u0928\u0947._\u092b\u0947\u092c\u094d\u0930\u0941._\u092e\u093e\u0930\u094d\u091a_\u090f\u092a\u094d\u0930\u0940._\u092e\u0947_\u091c\u0942\u0928_\u091c\u0941\u0932._\u0911\u0917._\u0938\u092a\u094d\u091f\u0947\u0902._\u0911\u0915\u094d\u091f\u094b._\u0928\u094b\u0935\u094d\u0939\u0947\u0902._\u0921\u093f\u0938\u0947\u0902.".split("_"),monthsParseExact:!0,weekdays:"\u0906\u092f\u0924\u093e\u0930_\u0938\u094b\u092e\u093e\u0930_\u092e\u0902\u0917\u0933\u093e\u0930_\u092c\u0941\u0927\u0935\u093e\u0930_\u092c\u093f\u0930\u0947\u0938\u094d\u0924\u093e\u0930_\u0938\u0941\u0915\u094d\u0930\u093e\u0930_\u0936\u0947\u0928\u0935\u093e\u0930".split("_"),weekdaysShort:"\u0906\u092f\u0924._\u0938\u094b\u092e._\u092e\u0902\u0917\u0933._\u092c\u0941\u0927._\u092c\u094d\u0930\u0947\u0938\u094d\u0924._\u0938\u0941\u0915\u094d\u0930._\u0936\u0947\u0928.".split("_"),weekdaysMin:"\u0906_\u0938\u094b_\u092e\u0902_\u092c\u0941_\u092c\u094d\u0930\u0947_\u0938\u0941_\u0936\u0947".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"A h:mm [\u0935\u093e\u091c\u0924\u093e\u0902]",LTS:"A h:mm:ss [\u0935\u093e\u091c\u0924\u093e\u0902]",L:"DD-MM-YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY A h:mm [\u0935\u093e\u091c\u0924\u093e\u0902]",LLLL:"dddd, MMMM Do, YYYY, A h:mm [\u0935\u093e\u091c\u0924\u093e\u0902]",llll:"ddd, D MMM YYYY, A h:mm [\u0935\u093e\u091c\u0924\u093e\u0902]"},calendar:{sameDay:"[\u0906\u092f\u091c] LT",nextDay:"[\u092b\u093e\u0932\u094d\u092f\u093e\u0902] LT",nextWeek:"[\u092b\u0941\u0921\u0932\u094b] dddd[,] LT",lastDay:"[\u0915\u093e\u0932] LT",lastWeek:"[\u092b\u093e\u091f\u0932\u094b] dddd[,] LT",sameElse:"L"},relativeTime:{future:"%s",past:"%s \u0906\u0926\u0940\u0902",s:_n,ss:_n,m:_n,mm:_n,h:_n,hh:_n,d:_n,dd:_n,M:_n,MM:_n,y:_n,yy:_n},dayOfMonthOrdinalParse:/\d{1,2}(\u0935\u0947\u0930)/,ordinal:function(e,a){switch(a){case"D":return e+"\u0935\u0947\u0930";default:case"M":case"Q":case"DDD":case"d":case"w":case"W":return e}},week:{dow:0,doy:3},meridiemParse:/\u0930\u093e\u0924\u0940|\u0938\u0915\u093e\u0933\u0940\u0902|\u0926\u0928\u092a\u093e\u0930\u093e\u0902|\u0938\u093e\u0902\u091c\u0947/,meridiemHour:function(e,a){return 12===e&&(e=0),"\u0930\u093e\u0924\u0940"===a?e<4?e:e+12:"\u0938\u0915\u093e\u0933\u0940\u0902"===a?e:"\u0926\u0928\u092a\u093e\u0930\u093e\u0902"===a?12<e?e:e+12:"\u0938\u093e\u0902\u091c\u0947"===a?e+12:void 0},meridiem:function(e,a,t){return e<4?"\u0930\u093e\u0924\u0940":e<12?"\u0938\u0915\u093e\u0933\u0940\u0902":e<16?"\u0926\u0928\u092a\u093e\u0930\u093e\u0902":e<20?"\u0938\u093e\u0902\u091c\u0947":"\u0930\u093e\u0924\u0940"}}),M.defineLocale("gom-latn",{months:{standalone:"Janer_Febrer_Mars_Abril_Mai_Jun_Julai_Agost_Setembr_Otubr_Novembr_Dezembr".split("_"),format:"Janerachea_Febrerachea_Marsachea_Abrilachea_Maiachea_Junachea_Julaiachea_Agostachea_Setembrachea_Otubrachea_Novembrachea_Dezembrachea".split("_"),isFormat:/MMMM(\s)+D[oD]?/},monthsShort:"Jan._Feb._Mars_Abr._Mai_Jun_Jul._Ago._Set._Otu._Nov._Dez.".split("_"),monthsParseExact:!0,weekdays:"Aitar_Somar_Mongllar_Budhvar_Birestar_Sukrar_Son'var".split("_"),weekdaysShort:"Ait._Som._Mon._Bud._Bre._Suk._Son.".split("_"),weekdaysMin:"Ai_Sm_Mo_Bu_Br_Su_Sn".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"A h:mm [vazta]",LTS:"A h:mm:ss [vazta]",L:"DD-MM-YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY A h:mm [vazta]",LLLL:"dddd, MMMM Do, YYYY, A h:mm [vazta]",llll:"ddd, D MMM YYYY, A h:mm [vazta]"},calendar:{sameDay:"[Aiz] LT",nextDay:"[Faleam] LT",nextWeek:"[Fuddlo] dddd[,] LT",lastDay:"[Kal] LT",lastWeek:"[Fattlo] dddd[,] LT",sameElse:"L"},relativeTime:{future:"%s",past:"%s adim",s:on,ss:on,m:on,mm:on,h:on,hh:on,d:on,dd:on,M:on,MM:on,y:on,yy:on},dayOfMonthOrdinalParse:/\d{1,2}(er)/,ordinal:function(e,a){switch(a){case"D":return e+"er";default:case"M":case"Q":case"DDD":case"d":case"w":case"W":return e}},week:{dow:0,doy:3},meridiemParse:/rati|sokallim|donparam|sanje/,meridiemHour:function(e,a){return 12===e&&(e=0),"rati"===a?e<4?e:e+12:"sokallim"===a?e:"donparam"===a?12<e?e:e+12:"sanje"===a?e+12:void 0},meridiem:function(e,a,t){return e<4?"rati":e<12?"sokallim":e<16?"donparam":e<20?"sanje":"rati"}});var mn={1:"\u0ae7",2:"\u0ae8",3:"\u0ae9",4:"\u0aea",5:"\u0aeb",6:"\u0aec",7:"\u0aed",8:"\u0aee",9:"\u0aef",0:"\u0ae6"},un={"\u0ae7":"1","\u0ae8":"2","\u0ae9":"3","\u0aea":"4","\u0aeb":"5","\u0aec":"6","\u0aed":"7","\u0aee":"8","\u0aef":"9","\u0ae6":"0"};M.defineLocale("gu",{months:"\u0a9c\u0abe\u0aa8\u0acd\u0aaf\u0ac1\u0a86\u0ab0\u0ac0_\u0aab\u0ac7\u0aac\u0acd\u0ab0\u0ac1\u0a86\u0ab0\u0ac0_\u0aae\u0abe\u0ab0\u0acd\u0a9a_\u0a8f\u0aaa\u0acd\u0ab0\u0abf\u0ab2_\u0aae\u0ac7_\u0a9c\u0ac2\u0aa8_\u0a9c\u0ac1\u0ab2\u0abe\u0a88_\u0a91\u0a97\u0ab8\u0acd\u0a9f_\u0ab8\u0aaa\u0acd\u0a9f\u0ac7\u0aae\u0acd\u0aac\u0ab0_\u0a91\u0a95\u0acd\u0a9f\u0acd\u0aac\u0ab0_\u0aa8\u0ab5\u0ac7\u0aae\u0acd\u0aac\u0ab0_\u0aa1\u0abf\u0ab8\u0ac7\u0aae\u0acd\u0aac\u0ab0".split("_"),monthsShort:"\u0a9c\u0abe\u0aa8\u0acd\u0aaf\u0ac1._\u0aab\u0ac7\u0aac\u0acd\u0ab0\u0ac1._\u0aae\u0abe\u0ab0\u0acd\u0a9a_\u0a8f\u0aaa\u0acd\u0ab0\u0abf._\u0aae\u0ac7_\u0a9c\u0ac2\u0aa8_\u0a9c\u0ac1\u0ab2\u0abe._\u0a91\u0a97._\u0ab8\u0aaa\u0acd\u0a9f\u0ac7._\u0a91\u0a95\u0acd\u0a9f\u0acd._\u0aa8\u0ab5\u0ac7._\u0aa1\u0abf\u0ab8\u0ac7.".split("_"),monthsParseExact:!0,weekdays:"\u0ab0\u0ab5\u0abf\u0ab5\u0abe\u0ab0_\u0ab8\u0acb\u0aae\u0ab5\u0abe\u0ab0_\u0aae\u0a82\u0a97\u0ab3\u0ab5\u0abe\u0ab0_\u0aac\u0ac1\u0aa7\u0acd\u0ab5\u0abe\u0ab0_\u0a97\u0ac1\u0ab0\u0ac1\u0ab5\u0abe\u0ab0_\u0ab6\u0ac1\u0a95\u0acd\u0ab0\u0ab5\u0abe\u0ab0_\u0ab6\u0aa8\u0abf\u0ab5\u0abe\u0ab0".split("_"),weekdaysShort:"\u0ab0\u0ab5\u0abf_\u0ab8\u0acb\u0aae_\u0aae\u0a82\u0a97\u0ab3_\u0aac\u0ac1\u0aa7\u0acd_\u0a97\u0ac1\u0ab0\u0ac1_\u0ab6\u0ac1\u0a95\u0acd\u0ab0_\u0ab6\u0aa8\u0abf".split("_"),weekdaysMin:"\u0ab0_\u0ab8\u0acb_\u0aae\u0a82_\u0aac\u0ac1_\u0a97\u0ac1_\u0ab6\u0ac1_\u0ab6".split("_"),longDateFormat:{LT:"A h:mm \u0ab5\u0abe\u0a97\u0acd\u0aaf\u0ac7",LTS:"A h:mm:ss \u0ab5\u0abe\u0a97\u0acd\u0aaf\u0ac7",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm \u0ab5\u0abe\u0a97\u0acd\u0aaf\u0ac7",LLLL:"dddd, D MMMM YYYY, A h:mm \u0ab5\u0abe\u0a97\u0acd\u0aaf\u0ac7"},calendar:{sameDay:"[\u0a86\u0a9c] LT",nextDay:"[\u0a95\u0abe\u0ab2\u0ac7] LT",nextWeek:"dddd, LT",lastDay:"[\u0a97\u0a87\u0a95\u0abe\u0ab2\u0ac7] LT",lastWeek:"[\u0aaa\u0abe\u0a9b\u0ab2\u0abe] dddd, LT",sameElse:"L"},relativeTime:{future:"%s \u0aae\u0abe",past:"%s \u0aaa\u0ab9\u0ac7\u0ab2\u0abe",s:"\u0a85\u0aae\u0ac1\u0a95 \u0aaa\u0ab3\u0acb",ss:"%d \u0ab8\u0ac7\u0a95\u0a82\u0aa1",m:"\u0a8f\u0a95 \u0aae\u0abf\u0aa8\u0abf\u0a9f",mm:"%d \u0aae\u0abf\u0aa8\u0abf\u0a9f",h:"\u0a8f\u0a95 \u0a95\u0ab2\u0abe\u0a95",hh:"%d \u0a95\u0ab2\u0abe\u0a95",d:"\u0a8f\u0a95 \u0aa6\u0abf\u0ab5\u0ab8",dd:"%d \u0aa6\u0abf\u0ab5\u0ab8",M:"\u0a8f\u0a95 \u0aae\u0ab9\u0abf\u0aa8\u0acb",MM:"%d \u0aae\u0ab9\u0abf\u0aa8\u0acb",y:"\u0a8f\u0a95 \u0ab5\u0ab0\u0acd\u0ab7",yy:"%d \u0ab5\u0ab0\u0acd\u0ab7"},preparse:function(e){return e.replace(/[\u0ae7\u0ae8\u0ae9\u0aea\u0aeb\u0aec\u0aed\u0aee\u0aef\u0ae6]/g,function(e){return un[e]})},postformat:function(e){return e.replace(/\d/g,function(e){return mn[e]})},meridiemParse:/\u0ab0\u0abe\u0aa4|\u0aac\u0aaa\u0acb\u0ab0|\u0ab8\u0ab5\u0abe\u0ab0|\u0ab8\u0abe\u0a82\u0a9c/,meridiemHour:function(e,a){return 12===e&&(e=0),"\u0ab0\u0abe\u0aa4"===a?e<4?e:e+12:"\u0ab8\u0ab5\u0abe\u0ab0"===a?e:"\u0aac\u0aaa\u0acb\u0ab0"===a?10<=e?e:e+12:"\u0ab8\u0abe\u0a82\u0a9c"===a?e+12:void 0},meridiem:function(e,a,t){return e<4?"\u0ab0\u0abe\u0aa4":e<10?"\u0ab8\u0ab5\u0abe\u0ab0":e<17?"\u0aac\u0aaa\u0acb\u0ab0":e<20?"\u0ab8\u0abe\u0a82\u0a9c":"\u0ab0\u0abe\u0aa4"},week:{dow:0,doy:6}}),M.defineLocale("he",{months:"\u05d9\u05e0\u05d5\u05d0\u05e8_\u05e4\u05d1\u05e8\u05d5\u05d0\u05e8_\u05de\u05e8\u05e5_\u05d0\u05e4\u05e8\u05d9\u05dc_\u05de\u05d0\u05d9_\u05d9\u05d5\u05e0\u05d9_\u05d9\u05d5\u05dc\u05d9_\u05d0\u05d5\u05d2\u05d5\u05e1\u05d8_\u05e1\u05e4\u05d8\u05de\u05d1\u05e8_\u05d0\u05d5\u05e7\u05d8\u05d5\u05d1\u05e8_\u05e0\u05d5\u05d1\u05de\u05d1\u05e8_\u05d3\u05e6\u05de\u05d1\u05e8".split("_"),monthsShort:"\u05d9\u05e0\u05d5\u05f3_\u05e4\u05d1\u05e8\u05f3_\u05de\u05e8\u05e5_\u05d0\u05e4\u05e8\u05f3_\u05de\u05d0\u05d9_\u05d9\u05d5\u05e0\u05d9_\u05d9\u05d5\u05dc\u05d9_\u05d0\u05d5\u05d2\u05f3_\u05e1\u05e4\u05d8\u05f3_\u05d0\u05d5\u05e7\u05f3_\u05e0\u05d5\u05d1\u05f3_\u05d3\u05e6\u05de\u05f3".split("_"),weekdays:"\u05e8\u05d0\u05e9\u05d5\u05df_\u05e9\u05e0\u05d9_\u05e9\u05dc\u05d9\u05e9\u05d9_\u05e8\u05d1\u05d9\u05e2\u05d9_\u05d7\u05de\u05d9\u05e9\u05d9_\u05e9\u05d9\u05e9\u05d9_\u05e9\u05d1\u05ea".split("_"),weekdaysShort:"\u05d0\u05f3_\u05d1\u05f3_\u05d2\u05f3_\u05d3\u05f3_\u05d4\u05f3_\u05d5\u05f3_\u05e9\u05f3".split("_"),weekdaysMin:"\u05d0_\u05d1_\u05d2_\u05d3_\u05d4_\u05d5_\u05e9".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D [\u05d1]MMMM YYYY",LLL:"D [\u05d1]MMMM YYYY HH:mm",LLLL:"dddd, D [\u05d1]MMMM YYYY HH:mm",l:"D/M/YYYY",ll:"D MMM YYYY",lll:"D MMM YYYY HH:mm",llll:"ddd, D MMM YYYY HH:mm"},calendar:{sameDay:"[\u05d4\u05d9\u05d5\u05dd \u05d1\u05be]LT",nextDay:"[\u05de\u05d7\u05e8 \u05d1\u05be]LT",nextWeek:"dddd [\u05d1\u05e9\u05e2\u05d4] LT",lastDay:"[\u05d0\u05ea\u05de\u05d5\u05dc \u05d1\u05be]LT",lastWeek:"[\u05d1\u05d9\u05d5\u05dd] dddd [\u05d4\u05d0\u05d7\u05e8\u05d5\u05df \u05d1\u05e9\u05e2\u05d4] LT",sameElse:"L"},relativeTime:{future:"\u05d1\u05e2\u05d5\u05d3 %s",past:"\u05dc\u05e4\u05e0\u05d9 %s",s:"\u05de\u05e1\u05e4\u05e8 \u05e9\u05e0\u05d9\u05d5\u05ea",ss:"%d \u05e9\u05e0\u05d9\u05d5\u05ea",m:"\u05d3\u05e7\u05d4",mm:"%d \u05d3\u05e7\u05d5\u05ea",h:"\u05e9\u05e2\u05d4",hh:function(e){return 2===e?"\u05e9\u05e2\u05ea\u05d9\u05d9\u05dd":e+" \u05e9\u05e2\u05d5\u05ea"},d:"\u05d9\u05d5\u05dd",dd:function(e){return 2===e?"\u05d9\u05d5\u05de\u05d9\u05d9\u05dd":e+" \u05d9\u05de\u05d9\u05dd"},M:"\u05d7\u05d5\u05d3\u05e9",MM:function(e){return 2===e?"\u05d7\u05d5\u05d3\u05e9\u05d9\u05d9\u05dd":e+" \u05d7\u05d5\u05d3\u05e9\u05d9\u05dd"},y:"\u05e9\u05e0\u05d4",yy:function(e){return 2===e?"\u05e9\u05e0\u05ea\u05d9\u05d9\u05dd":e%10==0&&10!==e?e+" \u05e9\u05e0\u05d4":e+" \u05e9\u05e0\u05d9\u05dd"}},meridiemParse:/\u05d0\u05d7\u05d4"\u05e6|\u05dc\u05e4\u05e0\u05d4"\u05e6|\u05d0\u05d7\u05e8\u05d9 \u05d4\u05e6\u05d4\u05e8\u05d9\u05d9\u05dd|\u05dc\u05e4\u05e0\u05d9 \u05d4\u05e6\u05d4\u05e8\u05d9\u05d9\u05dd|\u05dc\u05e4\u05e0\u05d5\u05ea \u05d1\u05d5\u05e7\u05e8|\u05d1\u05d1\u05d5\u05e7\u05e8|\u05d1\u05e2\u05e8\u05d1/i,isPM:function(e){return/^(\u05d0\u05d7\u05d4"\u05e6|\u05d0\u05d7\u05e8\u05d9 \u05d4\u05e6\u05d4\u05e8\u05d9\u05d9\u05dd|\u05d1\u05e2\u05e8\u05d1)$/.test(e)},meridiem:function(e,a,t){return e<5?"\u05dc\u05e4\u05e0\u05d5\u05ea \u05d1\u05d5\u05e7\u05e8":e<10?"\u05d1\u05d1\u05d5\u05e7\u05e8":e<12?t?'\u05dc\u05e4\u05e0\u05d4"\u05e6':"\u05dc\u05e4\u05e0\u05d9 \u05d4\u05e6\u05d4\u05e8\u05d9\u05d9\u05dd":e<18?t?'\u05d0\u05d7\u05d4"\u05e6':"\u05d0\u05d7\u05e8\u05d9 \u05d4\u05e6\u05d4\u05e8\u05d9\u05d9\u05dd":"\u05d1\u05e2\u05e8\u05d1"}});var ln={1:"\u0967",2:"\u0968",3:"\u0969",4:"\u096a",5:"\u096b",6:"\u096c",7:"\u096d",8:"\u096e",9:"\u096f",0:"\u0966"},Mn={"\u0967":"1","\u0968":"2","\u0969":"3","\u096a":"4","\u096b":"5","\u096c":"6","\u096d":"7","\u096e":"8","\u096f":"9","\u0966":"0"};function hn(e,a,t){var s=e+" ";switch(t){case"ss":return s+=1===e?"sekunda":2===e||3===e||4===e?"sekunde":"sekundi";case"m":return a?"jedna minuta":"jedne minute";case"mm":return s+=1!==e&&(2===e||3===e||4===e)?"minute":"minuta";case"h":return a?"jedan sat":"jednog sata";case"hh":return s+=1===e?"sat":2===e||3===e||4===e?"sata":"sati";case"dd":return s+=1===e?"dan":"dana";case"MM":return s+=1===e?"mjesec":2===e||3===e||4===e?"mjeseca":"mjeseci";case"yy":return s+=1!==e&&(2===e||3===e||4===e)?"godine":"godina"}}M.defineLocale("hi",{months:"\u091c\u0928\u0935\u0930\u0940_\u092b\u093c\u0930\u0935\u0930\u0940_\u092e\u093e\u0930\u094d\u091a_\u0905\u092a\u094d\u0930\u0948\u0932_\u092e\u0908_\u091c\u0942\u0928_\u091c\u0941\u0932\u093e\u0908_\u0905\u0917\u0938\u094d\u0924_\u0938\u093f\u0924\u092e\u094d\u092c\u0930_\u0905\u0915\u094d\u091f\u0942\u092c\u0930_\u0928\u0935\u092e\u094d\u092c\u0930_\u0926\u093f\u0938\u092e\u094d\u092c\u0930".split("_"),monthsShort:"\u091c\u0928._\u092b\u093c\u0930._\u092e\u093e\u0930\u094d\u091a_\u0905\u092a\u094d\u0930\u0948._\u092e\u0908_\u091c\u0942\u0928_\u091c\u0941\u0932._\u0905\u0917._\u0938\u093f\u0924._\u0905\u0915\u094d\u091f\u0942._\u0928\u0935._\u0926\u093f\u0938.".split("_"),monthsParseExact:!0,weekdays:"\u0930\u0935\u093f\u0935\u093e\u0930_\u0938\u094b\u092e\u0935\u093e\u0930_\u092e\u0902\u0917\u0932\u0935\u093e\u0930_\u092c\u0941\u0927\u0935\u093e\u0930_\u0917\u0941\u0930\u0942\u0935\u093e\u0930_\u0936\u0941\u0915\u094d\u0930\u0935\u093e\u0930_\u0936\u0928\u093f\u0935\u093e\u0930".split("_"),weekdaysShort:"\u0930\u0935\u093f_\u0938\u094b\u092e_\u092e\u0902\u0917\u0932_\u092c\u0941\u0927_\u0917\u0941\u0930\u0942_\u0936\u0941\u0915\u094d\u0930_\u0936\u0928\u093f".split("_"),weekdaysMin:"\u0930_\u0938\u094b_\u092e\u0902_\u092c\u0941_\u0917\u0941_\u0936\u0941_\u0936".split("_"),longDateFormat:{LT:"A h:mm \u092c\u091c\u0947",LTS:"A h:mm:ss \u092c\u091c\u0947",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm \u092c\u091c\u0947",LLLL:"dddd, D MMMM YYYY, A h:mm \u092c\u091c\u0947"},calendar:{sameDay:"[\u0906\u091c] LT",nextDay:"[\u0915\u0932] LT",nextWeek:"dddd, LT",lastDay:"[\u0915\u0932] LT",lastWeek:"[\u092a\u093f\u091b\u0932\u0947] dddd, LT",sameElse:"L"},relativeTime:{future:"%s \u092e\u0947\u0902",past:"%s \u092a\u0939\u0932\u0947",s:"\u0915\u0941\u091b \u0939\u0940 \u0915\u094d\u0937\u0923",ss:"%d \u0938\u0947\u0915\u0902\u0921",m:"\u090f\u0915 \u092e\u093f\u0928\u091f",mm:"%d \u092e\u093f\u0928\u091f",h:"\u090f\u0915 \u0918\u0902\u091f\u093e",hh:"%d \u0918\u0902\u091f\u0947",d:"\u090f\u0915 \u0926\u093f\u0928",dd:"%d \u0926\u093f\u0928",M:"\u090f\u0915 \u092e\u0939\u0940\u0928\u0947",MM:"%d \u092e\u0939\u0940\u0928\u0947",y:"\u090f\u0915 \u0935\u0930\u094d\u0937",yy:"%d \u0935\u0930\u094d\u0937"},preparse:function(e){return e.replace(/[\u0967\u0968\u0969\u096a\u096b\u096c\u096d\u096e\u096f\u0966]/g,function(e){return Mn[e]})},postformat:function(e){return e.replace(/\d/g,function(e){return ln[e]})},meridiemParse:/\u0930\u093e\u0924|\u0938\u0941\u092c\u0939|\u0926\u094b\u092a\u0939\u0930|\u0936\u093e\u092e/,meridiemHour:function(e,a){return 12===e&&(e=0),"\u0930\u093e\u0924"===a?e<4?e:e+12:"\u0938\u0941\u092c\u0939"===a?e:"\u0926\u094b\u092a\u0939\u0930"===a?10<=e?e:e+12:"\u0936\u093e\u092e"===a?e+12:void 0},meridiem:function(e,a,t){return e<4?"\u0930\u093e\u0924":e<10?"\u0938\u0941\u092c\u0939":e<17?"\u0926\u094b\u092a\u0939\u0930":e<20?"\u0936\u093e\u092e":"\u0930\u093e\u0924"},week:{dow:0,doy:6}}),M.defineLocale("hr",{months:{format:"sije\u010dnja_velja\u010de_o\u017eujka_travnja_svibnja_lipnja_srpnja_kolovoza_rujna_listopada_studenoga_prosinca".split("_"),standalone:"sije\u010danj_velja\u010da_o\u017eujak_travanj_svibanj_lipanj_srpanj_kolovoz_rujan_listopad_studeni_prosinac".split("_")},monthsShort:"sij._velj._o\u017eu._tra._svi._lip._srp._kol._ruj._lis._stu._pro.".split("_"),monthsParseExact:!0,weekdays:"nedjelja_ponedjeljak_utorak_srijeda_\u010detvrtak_petak_subota".split("_"),weekdaysShort:"ned._pon._uto._sri._\u010det._pet._sub.".split("_"),weekdaysMin:"ne_po_ut_sr_\u010de_pe_su".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"Do MMMM YYYY",LLL:"Do MMMM YYYY H:mm",LLLL:"dddd, Do MMMM YYYY H:mm"},calendar:{sameDay:"[danas u] LT",nextDay:"[sutra u] LT",nextWeek:function(){switch(this.day()){case 0:return"[u] [nedjelju] [u] LT";case 3:return"[u] [srijedu] [u] LT";case 6:return"[u] [subotu] [u] LT";case 1:case 2:case 4:case 5:return"[u] dddd [u] LT"}},lastDay:"[ju\u010der u] LT",lastWeek:function(){switch(this.day()){case 0:return"[pro\u0161lu] [nedjelju] [u] LT";case 3:return"[pro\u0161lu] [srijedu] [u] LT";case 6:return"[pro\u0161le] [subote] [u] LT";case 1:case 2:case 4:case 5:return"[pro\u0161li] dddd [u] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"prije %s",s:"par sekundi",ss:hn,m:hn,mm:hn,h:hn,hh:hn,d:"dan",dd:hn,M:"mjesec",MM:hn,y:"godinu",yy:hn},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}});var cn="vas\xe1rnap h\xe9tf\u0151n kedden szerd\xe1n cs\xfct\xf6rt\xf6k\xf6n p\xe9nteken szombaton".split(" ");function Ln(e,a,t,s){var n=e;switch(t){case"s":return s||a?"n\xe9h\xe1ny m\xe1sodperc":"n\xe9h\xe1ny m\xe1sodperce";case"ss":return n+(s||a)?" m\xe1sodperc":" m\xe1sodperce";case"m":return"egy"+(s||a?" perc":" perce");case"mm":return n+(s||a?" perc":" perce");case"h":return"egy"+(s||a?" \xf3ra":" \xf3r\xe1ja");case"hh":return n+(s||a?" \xf3ra":" \xf3r\xe1ja");case"d":return"egy"+(s||a?" nap":" napja");case"dd":return n+(s||a?" nap":" napja");case"M":return"egy"+(s||a?" h\xf3nap":" h\xf3napja");case"MM":return n+(s||a?" h\xf3nap":" h\xf3napja");case"y":return"egy"+(s||a?" \xe9v":" \xe9ve");case"yy":return n+(s||a?" \xe9v":" \xe9ve")}return""}function Yn(e){return(e?"":"[m\xfalt] ")+"["+cn[this.day()]+"] LT[-kor]"}function yn(e){return e%100==11||e%10!=1}function fn(e,a,t,s){var n=e+" ";switch(t){case"s":return a||s?"nokkrar sek\xfandur":"nokkrum sek\xfandum";case"ss":return yn(e)?n+(a||s?"sek\xfandur":"sek\xfandum"):n+"sek\xfanda";case"m":return a?"m\xedn\xfata":"m\xedn\xfatu";case"mm":return yn(e)?n+(a||s?"m\xedn\xfatur":"m\xedn\xfatum"):a?n+"m\xedn\xfata":n+"m\xedn\xfatu";case"hh":return yn(e)?n+(a||s?"klukkustundir":"klukkustundum"):n+"klukkustund";case"d":return a?"dagur":s?"dag":"degi";case"dd":return yn(e)?a?n+"dagar":n+(s?"daga":"d\xf6gum"):a?n+"dagur":n+(s?"dag":"degi");case"M":return a?"m\xe1nu\xf0ur":s?"m\xe1nu\xf0":"m\xe1nu\xf0i";case"MM":return yn(e)?a?n+"m\xe1nu\xf0ir":n+(s?"m\xe1nu\xf0i":"m\xe1nu\xf0um"):a?n+"m\xe1nu\xf0ur":n+(s?"m\xe1nu\xf0":"m\xe1nu\xf0i");case"y":return a||s?"\xe1r":"\xe1ri";case"yy":return yn(e)?n+(a||s?"\xe1r":"\xe1rum"):n+(a||s?"\xe1r":"\xe1ri")}}M.defineLocale("hu",{months:"janu\xe1r_febru\xe1r_m\xe1rcius_\xe1prilis_m\xe1jus_j\xfanius_j\xfalius_augusztus_szeptember_okt\xf3ber_november_december".split("_"),monthsShort:"jan_feb_m\xe1rc_\xe1pr_m\xe1j_j\xfan_j\xfal_aug_szept_okt_nov_dec".split("_"),weekdays:"vas\xe1rnap_h\xe9tf\u0151_kedd_szerda_cs\xfct\xf6rt\xf6k_p\xe9ntek_szombat".split("_"),weekdaysShort:"vas_h\xe9t_kedd_sze_cs\xfct_p\xe9n_szo".split("_"),weekdaysMin:"v_h_k_sze_cs_p_szo".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"YYYY.MM.DD.",LL:"YYYY. MMMM D.",LLL:"YYYY. MMMM D. H:mm",LLLL:"YYYY. MMMM D., dddd H:mm"},meridiemParse:/de|du/i,isPM:function(e){return"u"===e.charAt(1).toLowerCase()},meridiem:function(e,a,t){return e<12?!0===t?"de":"DE":!0===t?"du":"DU"},calendar:{sameDay:"[ma] LT[-kor]",nextDay:"[holnap] LT[-kor]",nextWeek:function(){return Yn.call(this,!0)},lastDay:"[tegnap] LT[-kor]",lastWeek:function(){return Yn.call(this,!1)},sameElse:"L"},relativeTime:{future:"%s m\xfalva",past:"%s",s:Ln,ss:Ln,m:Ln,mm:Ln,h:Ln,hh:Ln,d:Ln,dd:Ln,M:Ln,MM:Ln,y:Ln,yy:Ln},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}}),M.defineLocale("hy-am",{months:{format:"\u0570\u0578\u0582\u0576\u057e\u0561\u0580\u056b_\u0583\u0565\u057f\u0580\u057e\u0561\u0580\u056b_\u0574\u0561\u0580\u057f\u056b_\u0561\u057a\u0580\u056b\u056c\u056b_\u0574\u0561\u0575\u056b\u057d\u056b_\u0570\u0578\u0582\u0576\u056b\u057d\u056b_\u0570\u0578\u0582\u056c\u056b\u057d\u056b_\u0585\u0563\u0578\u057d\u057f\u0578\u057d\u056b_\u057d\u0565\u057a\u057f\u0565\u0574\u0562\u0565\u0580\u056b_\u0570\u0578\u056f\u057f\u0565\u0574\u0562\u0565\u0580\u056b_\u0576\u0578\u0575\u0565\u0574\u0562\u0565\u0580\u056b_\u0564\u0565\u056f\u057f\u0565\u0574\u0562\u0565\u0580\u056b".split("_"),standalone:"\u0570\u0578\u0582\u0576\u057e\u0561\u0580_\u0583\u0565\u057f\u0580\u057e\u0561\u0580_\u0574\u0561\u0580\u057f_\u0561\u057a\u0580\u056b\u056c_\u0574\u0561\u0575\u056b\u057d_\u0570\u0578\u0582\u0576\u056b\u057d_\u0570\u0578\u0582\u056c\u056b\u057d_\u0585\u0563\u0578\u057d\u057f\u0578\u057d_\u057d\u0565\u057a\u057f\u0565\u0574\u0562\u0565\u0580_\u0570\u0578\u056f\u057f\u0565\u0574\u0562\u0565\u0580_\u0576\u0578\u0575\u0565\u0574\u0562\u0565\u0580_\u0564\u0565\u056f\u057f\u0565\u0574\u0562\u0565\u0580".split("_")},monthsShort:"\u0570\u0576\u057e_\u0583\u057f\u0580_\u0574\u0580\u057f_\u0561\u057a\u0580_\u0574\u0575\u057d_\u0570\u0576\u057d_\u0570\u056c\u057d_\u0585\u0563\u057d_\u057d\u057a\u057f_\u0570\u056f\u057f_\u0576\u0574\u0562_\u0564\u056f\u057f".split("_"),weekdays:"\u056f\u056b\u0580\u0561\u056f\u056b_\u0565\u0580\u056f\u0578\u0582\u0577\u0561\u0562\u0569\u056b_\u0565\u0580\u0565\u0584\u0577\u0561\u0562\u0569\u056b_\u0579\u0578\u0580\u0565\u0584\u0577\u0561\u0562\u0569\u056b_\u0570\u056b\u0576\u0563\u0577\u0561\u0562\u0569\u056b_\u0578\u0582\u0580\u0562\u0561\u0569_\u0577\u0561\u0562\u0561\u0569".split("_"),weekdaysShort:"\u056f\u0580\u056f_\u0565\u0580\u056f_\u0565\u0580\u0584_\u0579\u0580\u0584_\u0570\u0576\u0563_\u0578\u0582\u0580\u0562_\u0577\u0562\u0569".split("_"),weekdaysMin:"\u056f\u0580\u056f_\u0565\u0580\u056f_\u0565\u0580\u0584_\u0579\u0580\u0584_\u0570\u0576\u0563_\u0578\u0582\u0580\u0562_\u0577\u0562\u0569".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY \u0569.",LLL:"D MMMM YYYY \u0569., HH:mm",LLLL:"dddd, D MMMM YYYY \u0569., HH:mm"},calendar:{sameDay:"[\u0561\u0575\u057d\u0585\u0580] LT",nextDay:"[\u057e\u0561\u0572\u0568] LT",lastDay:"[\u0565\u0580\u0565\u056f] LT",nextWeek:function(){return"dddd [\u0585\u0580\u0568 \u056a\u0561\u0574\u0568] LT"},lastWeek:function(){return"[\u0561\u0576\u0581\u0561\u056e] dddd [\u0585\u0580\u0568 \u056a\u0561\u0574\u0568] LT"},sameElse:"L"},relativeTime:{future:"%s \u0570\u0565\u057f\u0578",past:"%s \u0561\u057c\u0561\u057b",s:"\u0574\u056b \u0584\u0561\u0576\u056b \u057e\u0561\u0575\u0580\u056f\u0575\u0561\u0576",ss:"%d \u057e\u0561\u0575\u0580\u056f\u0575\u0561\u0576",m:"\u0580\u0578\u057a\u0565",mm:"%d \u0580\u0578\u057a\u0565",h:"\u056a\u0561\u0574",hh:"%d \u056a\u0561\u0574",d:"\u0585\u0580",dd:"%d \u0585\u0580",M:"\u0561\u0574\u056b\u057d",MM:"%d \u0561\u0574\u056b\u057d",y:"\u057f\u0561\u0580\u056b",yy:"%d \u057f\u0561\u0580\u056b"},meridiemParse:/\u0563\u056b\u0577\u0565\u0580\u057e\u0561|\u0561\u057c\u0561\u057e\u0578\u057f\u057e\u0561|\u0581\u0565\u0580\u0565\u056f\u057e\u0561|\u0565\u0580\u0565\u056f\u0578\u0575\u0561\u0576/,isPM:function(e){return/^(\u0581\u0565\u0580\u0565\u056f\u057e\u0561|\u0565\u0580\u0565\u056f\u0578\u0575\u0561\u0576)$/.test(e)},meridiem:function(e){return e<4?"\u0563\u056b\u0577\u0565\u0580\u057e\u0561":e<12?"\u0561\u057c\u0561\u057e\u0578\u057f\u057e\u0561":e<17?"\u0581\u0565\u0580\u0565\u056f\u057e\u0561":"\u0565\u0580\u0565\u056f\u0578\u0575\u0561\u0576"},dayOfMonthOrdinalParse:/\d{1,2}|\d{1,2}-(\u056b\u0576|\u0580\u0564)/,ordinal:function(e,a){switch(a){case"DDD":case"w":case"W":case"DDDo":return 1===e?e+"-\u056b\u0576":e+"-\u0580\u0564";default:return e}},week:{dow:1,doy:7}}),M.defineLocale("id",{months:"Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_November_Desember".split("_"),monthsShort:"Jan_Feb_Mar_Apr_Mei_Jun_Jul_Agt_Sep_Okt_Nov_Des".split("_"),weekdays:"Minggu_Senin_Selasa_Rabu_Kamis_Jumat_Sabtu".split("_"),weekdaysShort:"Min_Sen_Sel_Rab_Kam_Jum_Sab".split("_"),weekdaysMin:"Mg_Sn_Sl_Rb_Km_Jm_Sb".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [pukul] HH.mm",LLLL:"dddd, D MMMM YYYY [pukul] HH.mm"},meridiemParse:/pagi|siang|sore|malam/,meridiemHour:function(e,a){return 12===e&&(e=0),"pagi"===a?e:"siang"===a?11<=e?e:e+12:"sore"===a||"malam"===a?e+12:void 0},meridiem:function(e,a,t){return e<11?"pagi":e<15?"siang":e<19?"sore":"malam"},calendar:{sameDay:"[Hari ini pukul] LT",nextDay:"[Besok pukul] LT",nextWeek:"dddd [pukul] LT",lastDay:"[Kemarin pukul] LT",lastWeek:"dddd [lalu pukul] LT",sameElse:"L"},relativeTime:{future:"dalam %s",past:"%s yang lalu",s:"beberapa detik",ss:"%d detik",m:"semenit",mm:"%d menit",h:"sejam",hh:"%d jam",d:"sehari",dd:"%d hari",M:"sebulan",MM:"%d bulan",y:"setahun",yy:"%d tahun"},week:{dow:0,doy:6}}),M.defineLocale("is",{months:"jan\xfaar_febr\xfaar_mars_apr\xedl_ma\xed_j\xfan\xed_j\xfal\xed_\xe1g\xfast_september_okt\xf3ber_n\xf3vember_desember".split("_"),monthsShort:"jan_feb_mar_apr_ma\xed_j\xfan_j\xfal_\xe1g\xfa_sep_okt_n\xf3v_des".split("_"),weekdays:"sunnudagur_m\xe1nudagur_\xferi\xf0judagur_mi\xf0vikudagur_fimmtudagur_f\xf6studagur_laugardagur".split("_"),weekdaysShort:"sun_m\xe1n_\xferi_mi\xf0_fim_f\xf6s_lau".split("_"),weekdaysMin:"Su_M\xe1_\xder_Mi_Fi_F\xf6_La".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY [kl.] H:mm",LLLL:"dddd, D. MMMM YYYY [kl.] H:mm"},calendar:{sameDay:"[\xed dag kl.] LT",nextDay:"[\xe1 morgun kl.] LT",nextWeek:"dddd [kl.] LT",lastDay:"[\xed g\xe6r kl.] LT",lastWeek:"[s\xed\xf0asta] dddd [kl.] LT",sameElse:"L"},relativeTime:{future:"eftir %s",past:"fyrir %s s\xed\xf0an",s:fn,ss:fn,m:fn,mm:fn,h:"klukkustund",hh:fn,d:fn,dd:fn,M:fn,MM:fn,y:fn,yy:fn},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}}),M.defineLocale("it-ch",{months:"gennaio_febbraio_marzo_aprile_maggio_giugno_luglio_agosto_settembre_ottobre_novembre_dicembre".split("_"),monthsShort:"gen_feb_mar_apr_mag_giu_lug_ago_set_ott_nov_dic".split("_"),weekdays:"domenica_luned\xec_marted\xec_mercoled\xec_gioved\xec_venerd\xec_sabato".split("_"),weekdaysShort:"dom_lun_mar_mer_gio_ven_sab".split("_"),weekdaysMin:"do_lu_ma_me_gi_ve_sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[Oggi alle] LT",nextDay:"[Domani alle] LT",nextWeek:"dddd [alle] LT",lastDay:"[Ieri alle] LT",lastWeek:function(){switch(this.day()){case 0:return"[la scorsa] dddd [alle] LT";default:return"[lo scorso] dddd [alle] LT"}},sameElse:"L"},relativeTime:{future:function(e){return(/^[0-9].+$/.test(e)?"tra":"in")+" "+e},past:"%s fa",s:"alcuni secondi",ss:"%d secondi",m:"un minuto",mm:"%d minuti",h:"un'ora",hh:"%d ore",d:"un giorno",dd:"%d giorni",M:"un mese",MM:"%d mesi",y:"un anno",yy:"%d anni"},dayOfMonthOrdinalParse:/\d{1,2}\xba/,ordinal:"%d\xba",week:{dow:1,doy:4}}),M.defineLocale("it",{months:"gennaio_febbraio_marzo_aprile_maggio_giugno_luglio_agosto_settembre_ottobre_novembre_dicembre".split("_"),monthsShort:"gen_feb_mar_apr_mag_giu_lug_ago_set_ott_nov_dic".split("_"),weekdays:"domenica_luned\xec_marted\xec_mercoled\xec_gioved\xec_venerd\xec_sabato".split("_"),weekdaysShort:"dom_lun_mar_mer_gio_ven_sab".split("_"),weekdaysMin:"do_lu_ma_me_gi_ve_sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:function(){return"[Oggi a"+(1<this.hours()?"lle ":0===this.hours()?" ":"ll'")+"]LT"},nextDay:function(){return"[Domani a"+(1<this.hours()?"lle ":0===this.hours()?" ":"ll'")+"]LT"},nextWeek:function(){return"dddd [a"+(1<this.hours()?"lle ":0===this.hours()?" ":"ll'")+"]LT"},lastDay:function(){return"[Ieri a"+(1<this.hours()?"lle ":0===this.hours()?" ":"ll'")+"]LT"},lastWeek:function(){switch(this.day()){case 0:return"[La scorsa] dddd [a"+(1<this.hours()?"lle ":0===this.hours()?" ":"ll'")+"]LT";default:return"[Lo scorso] dddd [a"+(1<this.hours()?"lle ":0===this.hours()?" ":"ll'")+"]LT"}},sameElse:"L"},relativeTime:{future:"tra %s",past:"%s fa",s:"alcuni secondi",ss:"%d secondi",m:"un minuto",mm:"%d minuti",h:"un'ora",hh:"%d ore",d:"un giorno",dd:"%d giorni",M:"un mese",MM:"%d mesi",y:"un anno",yy:"%d anni"},dayOfMonthOrdinalParse:/\d{1,2}\xba/,ordinal:"%d\xba",week:{dow:1,doy:4}}),M.defineLocale("ja",{eras:[{since:"2019-05-01",offset:1,name:"\u4ee4\u548c",narrow:"\u32ff",abbr:"R"},{since:"1989-01-08",until:"2019-04-30",offset:1,name:"\u5e73\u6210",narrow:"\u337b",abbr:"H"},{since:"1926-12-25",until:"1989-01-07",offset:1,name:"\u662d\u548c",narrow:"\u337c",abbr:"S"},{since:"1912-07-30",until:"1926-12-24",offset:1,name:"\u5927\u6b63",narrow:"\u337d",abbr:"T"},{since:"1873-01-01",until:"1912-07-29",offset:6,name:"\u660e\u6cbb",narrow:"\u337e",abbr:"M"},{since:"0001-01-01",until:"1873-12-31",offset:1,name:"\u897f\u66a6",narrow:"AD",abbr:"AD"},{since:"0000-12-31",until:-1/0,offset:1,name:"\u7d00\u5143\u524d",narrow:"BC",abbr:"BC"}],eraYearOrdinalRegex:/(\u5143|\d+)\u5e74/,eraYearOrdinalParse:function(e,a){return"\u5143"===a[1]?1:parseInt(a[1]||e,10)},months:"1\u6708_2\u6708_3\u6708_4\u6708_5\u6708_6\u6708_7\u6708_8\u6708_9\u6708_10\u6708_11\u6708_12\u6708".split("_"),monthsShort:"1\u6708_2\u6708_3\u6708_4\u6708_5\u6708_6\u6708_7\u6708_8\u6708_9\u6708_10\u6708_11\u6708_12\u6708".split("_"),weekdays:"\u65e5\u66dc\u65e5_\u6708\u66dc\u65e5_\u706b\u66dc\u65e5_\u6c34\u66dc\u65e5_\u6728\u66dc\u65e5_\u91d1\u66dc\u65e5_\u571f\u66dc\u65e5".split("_"),weekdaysShort:"\u65e5_\u6708_\u706b_\u6c34_\u6728_\u91d1_\u571f".split("_"),weekdaysMin:"\u65e5_\u6708_\u706b_\u6c34_\u6728_\u91d1_\u571f".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY/MM/DD",LL:"YYYY\u5e74M\u6708D\u65e5",LLL:"YYYY\u5e74M\u6708D\u65e5 HH:mm",LLLL:"YYYY\u5e74M\u6708D\u65e5 dddd HH:mm",l:"YYYY/MM/DD",ll:"YYYY\u5e74M\u6708D\u65e5",lll:"YYYY\u5e74M\u6708D\u65e5 HH:mm",llll:"YYYY\u5e74M\u6708D\u65e5(ddd) HH:mm"},meridiemParse:/\u5348\u524d|\u5348\u5f8c/i,isPM:function(e){return"\u5348\u5f8c"===e},meridiem:function(e,a,t){return e<12?"\u5348\u524d":"\u5348\u5f8c"},calendar:{sameDay:"[\u4eca\u65e5] LT",nextDay:"[\u660e\u65e5] LT",nextWeek:function(e){return e.week()!==this.week()?"[\u6765\u9031]dddd LT":"dddd LT"},lastDay:"[\u6628\u65e5] LT",lastWeek:function(e){return this.week()!==e.week()?"[\u5148\u9031]dddd LT":"dddd LT"},sameElse:"L"},dayOfMonthOrdinalParse:/\d{1,2}\u65e5/,ordinal:function(e,a){switch(a){case"y":return 1===e?"\u5143\u5e74":e+"\u5e74";case"d":case"D":case"DDD":return e+"\u65e5";default:return e}},relativeTime:{future:"%s\u5f8c",past:"%s\u524d",s:"\u6570\u79d2",ss:"%d\u79d2",m:"1\u5206",mm:"%d\u5206",h:"1\u6642\u9593",hh:"%d\u6642\u9593",d:"1\u65e5",dd:"%d\u65e5",M:"1\u30f6\u6708",MM:"%d\u30f6\u6708",y:"1\u5e74",yy:"%d\u5e74"}}),M.defineLocale("jv",{months:"Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_Nopember_Desember".split("_"),monthsShort:"Jan_Feb_Mar_Apr_Mei_Jun_Jul_Ags_Sep_Okt_Nop_Des".split("_"),weekdays:"Minggu_Senen_Seloso_Rebu_Kemis_Jemuwah_Septu".split("_"),weekdaysShort:"Min_Sen_Sel_Reb_Kem_Jem_Sep".split("_"),weekdaysMin:"Mg_Sn_Sl_Rb_Km_Jm_Sp".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [pukul] HH.mm",LLLL:"dddd, D MMMM YYYY [pukul] HH.mm"},meridiemParse:/enjing|siyang|sonten|ndalu/,meridiemHour:function(e,a){return 12===e&&(e=0),"enjing"===a?e:"siyang"===a?11<=e?e:e+12:"sonten"===a||"ndalu"===a?e+12:void 0},meridiem:function(e,a,t){return e<11?"enjing":e<15?"siyang":e<19?"sonten":"ndalu"},calendar:{sameDay:"[Dinten puniko pukul] LT",nextDay:"[Mbenjang pukul] LT",nextWeek:"dddd [pukul] LT",lastDay:"[Kala wingi pukul] LT",lastWeek:"dddd [kepengker pukul] LT",sameElse:"L"},relativeTime:{future:"wonten ing %s",past:"%s ingkang kepengker",s:"sawetawis detik",ss:"%d detik",m:"setunggal menit",mm:"%d menit",h:"setunggal jam",hh:"%d jam",d:"sedinten",dd:"%d dinten",M:"sewulan",MM:"%d wulan",y:"setaun",yy:"%d taun"},week:{dow:1,doy:7}}),M.defineLocale("ka",{months:"\u10d8\u10d0\u10dc\u10d5\u10d0\u10e0\u10d8_\u10d7\u10d4\u10d1\u10d4\u10e0\u10d5\u10d0\u10da\u10d8_\u10db\u10d0\u10e0\u10e2\u10d8_\u10d0\u10de\u10e0\u10d8\u10da\u10d8_\u10db\u10d0\u10d8\u10e1\u10d8_\u10d8\u10d5\u10dc\u10d8\u10e1\u10d8_\u10d8\u10d5\u10da\u10d8\u10e1\u10d8_\u10d0\u10d2\u10d5\u10d8\u10e1\u10e2\u10dd_\u10e1\u10d4\u10e5\u10e2\u10d4\u10db\u10d1\u10d4\u10e0\u10d8_\u10dd\u10e5\u10e2\u10dd\u10db\u10d1\u10d4\u10e0\u10d8_\u10dc\u10dd\u10d4\u10db\u10d1\u10d4\u10e0\u10d8_\u10d3\u10d4\u10d9\u10d4\u10db\u10d1\u10d4\u10e0\u10d8".split("_"),monthsShort:"\u10d8\u10d0\u10dc_\u10d7\u10d4\u10d1_\u10db\u10d0\u10e0_\u10d0\u10de\u10e0_\u10db\u10d0\u10d8_\u10d8\u10d5\u10dc_\u10d8\u10d5\u10da_\u10d0\u10d2\u10d5_\u10e1\u10d4\u10e5_\u10dd\u10e5\u10e2_\u10dc\u10dd\u10d4_\u10d3\u10d4\u10d9".split("_"),weekdays:{standalone:"\u10d9\u10d5\u10d8\u10e0\u10d0_\u10dd\u10e0\u10e8\u10d0\u10d1\u10d0\u10d7\u10d8_\u10e1\u10d0\u10db\u10e8\u10d0\u10d1\u10d0\u10d7\u10d8_\u10dd\u10d7\u10ee\u10e8\u10d0\u10d1\u10d0\u10d7\u10d8_\u10ee\u10e3\u10d7\u10e8\u10d0\u10d1\u10d0\u10d7\u10d8_\u10de\u10d0\u10e0\u10d0\u10e1\u10d9\u10d4\u10d5\u10d8_\u10e8\u10d0\u10d1\u10d0\u10d7\u10d8".split("_"),format:"\u10d9\u10d5\u10d8\u10e0\u10d0\u10e1_\u10dd\u10e0\u10e8\u10d0\u10d1\u10d0\u10d7\u10e1_\u10e1\u10d0\u10db\u10e8\u10d0\u10d1\u10d0\u10d7\u10e1_\u10dd\u10d7\u10ee\u10e8\u10d0\u10d1\u10d0\u10d7\u10e1_\u10ee\u10e3\u10d7\u10e8\u10d0\u10d1\u10d0\u10d7\u10e1_\u10de\u10d0\u10e0\u10d0\u10e1\u10d9\u10d4\u10d5\u10e1_\u10e8\u10d0\u10d1\u10d0\u10d7\u10e1".split("_"),isFormat:/(\u10ec\u10d8\u10dc\u10d0|\u10e8\u10d4\u10db\u10d3\u10d4\u10d2)/},weekdaysShort:"\u10d9\u10d5\u10d8_\u10dd\u10e0\u10e8_\u10e1\u10d0\u10db_\u10dd\u10d7\u10ee_\u10ee\u10e3\u10d7_\u10de\u10d0\u10e0_\u10e8\u10d0\u10d1".split("_"),weekdaysMin:"\u10d9\u10d5_\u10dd\u10e0_\u10e1\u10d0_\u10dd\u10d7_\u10ee\u10e3_\u10de\u10d0_\u10e8\u10d0".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[\u10d3\u10e6\u10d4\u10e1] LT[-\u10d6\u10d4]",nextDay:"[\u10ee\u10d5\u10d0\u10da] LT[-\u10d6\u10d4]",lastDay:"[\u10d2\u10e3\u10e8\u10d8\u10dc] LT[-\u10d6\u10d4]",nextWeek:"[\u10e8\u10d4\u10db\u10d3\u10d4\u10d2] dddd LT[-\u10d6\u10d4]",lastWeek:"[\u10ec\u10d8\u10dc\u10d0] dddd LT-\u10d6\u10d4",sameElse:"L"},relativeTime:{future:function(e){return e.replace(/(\u10ec\u10d0\u10db|\u10ec\u10e3\u10d7|\u10e1\u10d0\u10d0\u10d7|\u10ec\u10d4\u10da|\u10d3\u10e6|\u10d7\u10d5)(\u10d8|\u10d4)/,function(e,a,t){return"\u10d8"===t?a+"\u10e8\u10d8":a+t+"\u10e8\u10d8"})},past:function(e){return/(\u10ec\u10d0\u10db\u10d8|\u10ec\u10e3\u10d7\u10d8|\u10e1\u10d0\u10d0\u10d7\u10d8|\u10d3\u10e6\u10d4|\u10d7\u10d5\u10d4)/.test(e)?e.replace(/(\u10d8|\u10d4)$/,"\u10d8\u10e1 \u10ec\u10d8\u10dc"):/\u10ec\u10d4\u10da\u10d8/.test(e)?e.replace(/\u10ec\u10d4\u10da\u10d8$/,"\u10ec\u10da\u10d8\u10e1 \u10ec\u10d8\u10dc"):e},s:"\u10e0\u10d0\u10db\u10d3\u10d4\u10dc\u10d8\u10db\u10d4 \u10ec\u10d0\u10db\u10d8",ss:"%d \u10ec\u10d0\u10db\u10d8",m:"\u10ec\u10e3\u10d7\u10d8",mm:"%d \u10ec\u10e3\u10d7\u10d8",h:"\u10e1\u10d0\u10d0\u10d7\u10d8",hh:"%d \u10e1\u10d0\u10d0\u10d7\u10d8",d:"\u10d3\u10e6\u10d4",dd:"%d \u10d3\u10e6\u10d4",M:"\u10d7\u10d5\u10d4",MM:"%d \u10d7\u10d5\u10d4",y:"\u10ec\u10d4\u10da\u10d8",yy:"%d \u10ec\u10d4\u10da\u10d8"},dayOfMonthOrdinalParse:/0|1-\u10da\u10d8|\u10db\u10d4-\d{1,2}|\d{1,2}-\u10d4/,ordinal:function(e){return 0===e?e:1===e?e+"-\u10da\u10d8":e<20||e<=100&&e%20==0||e%100==0?"\u10db\u10d4-"+e:e+"-\u10d4"},week:{dow:1,doy:7}});var pn={0:"-\u0448\u0456",1:"-\u0448\u0456",2:"-\u0448\u0456",3:"-\u0448\u0456",4:"-\u0448\u0456",5:"-\u0448\u0456",6:"-\u0448\u044b",7:"-\u0448\u0456",8:"-\u0448\u0456",9:"-\u0448\u044b",10:"-\u0448\u044b",20:"-\u0448\u044b",30:"-\u0448\u044b",40:"-\u0448\u044b",50:"-\u0448\u0456",60:"-\u0448\u044b",70:"-\u0448\u0456",80:"-\u0448\u0456",90:"-\u0448\u044b",100:"-\u0448\u0456"};M.defineLocale("kk",{months:"\u049b\u0430\u04a3\u0442\u0430\u0440_\u0430\u049b\u043f\u0430\u043d_\u043d\u0430\u0443\u0440\u044b\u0437_\u0441\u04d9\u0443\u0456\u0440_\u043c\u0430\u043c\u044b\u0440_\u043c\u0430\u0443\u0441\u044b\u043c_\u0448\u0456\u043b\u0434\u0435_\u0442\u0430\u043c\u044b\u0437_\u049b\u044b\u0440\u043a\u04af\u0439\u0435\u043a_\u049b\u0430\u0437\u0430\u043d_\u049b\u0430\u0440\u0430\u0448\u0430_\u0436\u0435\u043b\u0442\u043e\u049b\u0441\u0430\u043d".split("_"),monthsShort:"\u049b\u0430\u04a3_\u0430\u049b\u043f_\u043d\u0430\u0443_\u0441\u04d9\u0443_\u043c\u0430\u043c_\u043c\u0430\u0443_\u0448\u0456\u043b_\u0442\u0430\u043c_\u049b\u044b\u0440_\u049b\u0430\u0437_\u049b\u0430\u0440_\u0436\u0435\u043b".split("_"),weekdays:"\u0436\u0435\u043a\u0441\u0435\u043d\u0431\u0456_\u0434\u04af\u0439\u0441\u0435\u043d\u0431\u0456_\u0441\u0435\u0439\u0441\u0435\u043d\u0431\u0456_\u0441\u04d9\u0440\u0441\u0435\u043d\u0431\u0456_\u0431\u0435\u0439\u0441\u0435\u043d\u0431\u0456_\u0436\u04b1\u043c\u0430_\u0441\u0435\u043d\u0431\u0456".split("_"),weekdaysShort:"\u0436\u0435\u043a_\u0434\u04af\u0439_\u0441\u0435\u0439_\u0441\u04d9\u0440_\u0431\u0435\u0439_\u0436\u04b1\u043c_\u0441\u0435\u043d".split("_"),weekdaysMin:"\u0436\u043a_\u0434\u0439_\u0441\u0439_\u0441\u0440_\u0431\u0439_\u0436\u043c_\u0441\u043d".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[\u0411\u04af\u0433\u0456\u043d \u0441\u0430\u0493\u0430\u0442] LT",nextDay:"[\u0415\u0440\u0442\u0435\u04a3 \u0441\u0430\u0493\u0430\u0442] LT",nextWeek:"dddd [\u0441\u0430\u0493\u0430\u0442] LT",lastDay:"[\u041a\u0435\u0448\u0435 \u0441\u0430\u0493\u0430\u0442] LT",lastWeek:"[\u04e8\u0442\u043a\u0435\u043d \u0430\u043f\u0442\u0430\u043d\u044b\u04a3] dddd [\u0441\u0430\u0493\u0430\u0442] LT",sameElse:"L"},relativeTime:{future:"%s \u0456\u0448\u0456\u043d\u0434\u0435",past:"%s \u0431\u04b1\u0440\u044b\u043d",s:"\u0431\u0456\u0440\u043d\u0435\u0448\u0435 \u0441\u0435\u043a\u0443\u043d\u0434",ss:"%d \u0441\u0435\u043a\u0443\u043d\u0434",m:"\u0431\u0456\u0440 \u043c\u0438\u043d\u0443\u0442",mm:"%d \u043c\u0438\u043d\u0443\u0442",h:"\u0431\u0456\u0440 \u0441\u0430\u0493\u0430\u0442",hh:"%d \u0441\u0430\u0493\u0430\u0442",d:"\u0431\u0456\u0440 \u043a\u04af\u043d",dd:"%d \u043a\u04af\u043d",M:"\u0431\u0456\u0440 \u0430\u0439",MM:"%d \u0430\u0439",y:"\u0431\u0456\u0440 \u0436\u044b\u043b",yy:"%d \u0436\u044b\u043b"},dayOfMonthOrdinalParse:/\d{1,2}-(\u0448\u0456|\u0448\u044b)/,ordinal:function(e){return e+(pn[e]||pn[e%10]||pn[100<=e?100:null])},week:{dow:1,doy:7}});var kn={1:"\u17e1",2:"\u17e2",3:"\u17e3",4:"\u17e4",5:"\u17e5",6:"\u17e6",7:"\u17e7",8:"\u17e8",9:"\u17e9",0:"\u17e0"},Dn={"\u17e1":"1","\u17e2":"2","\u17e3":"3","\u17e4":"4","\u17e5":"5","\u17e6":"6","\u17e7":"7","\u17e8":"8","\u17e9":"9","\u17e0":"0"};M.defineLocale("km",{months:"\u1798\u1780\u179a\u17b6_\u1780\u17bb\u1798\u17d2\u1797\u17c8_\u1798\u17b8\u1793\u17b6_\u1798\u17c1\u179f\u17b6_\u17a7\u179f\u1797\u17b6_\u1798\u17b7\u1790\u17bb\u1793\u17b6_\u1780\u1780\u17d2\u1780\u178a\u17b6_\u179f\u17b8\u17a0\u17b6_\u1780\u1789\u17d2\u1789\u17b6_\u178f\u17bb\u179b\u17b6_\u179c\u17b7\u1785\u17d2\u1786\u17b7\u1780\u17b6_\u1792\u17d2\u1793\u17bc".split("_"),monthsShort:"\u1798\u1780\u179a\u17b6_\u1780\u17bb\u1798\u17d2\u1797\u17c8_\u1798\u17b8\u1793\u17b6_\u1798\u17c1\u179f\u17b6_\u17a7\u179f\u1797\u17b6_\u1798\u17b7\u1790\u17bb\u1793\u17b6_\u1780\u1780\u17d2\u1780\u178a\u17b6_\u179f\u17b8\u17a0\u17b6_\u1780\u1789\u17d2\u1789\u17b6_\u178f\u17bb\u179b\u17b6_\u179c\u17b7\u1785\u17d2\u1786\u17b7\u1780\u17b6_\u1792\u17d2\u1793\u17bc".split("_"),weekdays:"\u17a2\u17b6\u1791\u17b7\u178f\u17d2\u1799_\u1785\u17d0\u1793\u17d2\u1791_\u17a2\u1784\u17d2\u1782\u17b6\u179a_\u1796\u17bb\u1792_\u1796\u17d2\u179a\u17a0\u179f\u17d2\u1794\u178f\u17b7\u17cd_\u179f\u17bb\u1780\u17d2\u179a_\u179f\u17c5\u179a\u17cd".split("_"),weekdaysShort:"\u17a2\u17b6_\u1785_\u17a2_\u1796_\u1796\u17d2\u179a_\u179f\u17bb_\u179f".split("_"),weekdaysMin:"\u17a2\u17b6_\u1785_\u17a2_\u1796_\u1796\u17d2\u179a_\u179f\u17bb_\u179f".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},meridiemParse:/\u1796\u17d2\u179a\u17b9\u1780|\u179b\u17d2\u1784\u17b6\u1785/,isPM:function(e){return"\u179b\u17d2\u1784\u17b6\u1785"===e},meridiem:function(e,a,t){return e<12?"\u1796\u17d2\u179a\u17b9\u1780":"\u179b\u17d2\u1784\u17b6\u1785"},calendar:{sameDay:"[\u1790\u17d2\u1784\u17c3\u1793\u17c1\u17c7 \u1798\u17c9\u17c4\u1784] LT",nextDay:"[\u179f\u17d2\u17a2\u17c2\u1780 \u1798\u17c9\u17c4\u1784] LT",nextWeek:"dddd [\u1798\u17c9\u17c4\u1784] LT",lastDay:"[\u1798\u17d2\u179f\u17b7\u179b\u1798\u17b7\u1789 \u1798\u17c9\u17c4\u1784] LT",lastWeek:"dddd [\u179f\u1794\u17d2\u178f\u17b6\u17a0\u17cd\u1798\u17bb\u1793] [\u1798\u17c9\u17c4\u1784] LT",sameElse:"L"},relativeTime:{future:"%s\u1791\u17c0\u178f",past:"%s\u1798\u17bb\u1793",s:"\u1794\u17c9\u17bb\u1793\u17d2\u1798\u17b6\u1793\u179c\u17b7\u1793\u17b6\u1791\u17b8",ss:"%d \u179c\u17b7\u1793\u17b6\u1791\u17b8",m:"\u1798\u17bd\u1799\u1793\u17b6\u1791\u17b8",mm:"%d \u1793\u17b6\u1791\u17b8",h:"\u1798\u17bd\u1799\u1798\u17c9\u17c4\u1784",hh:"%d \u1798\u17c9\u17c4\u1784",d:"\u1798\u17bd\u1799\u1790\u17d2\u1784\u17c3",dd:"%d \u1790\u17d2\u1784\u17c3",M:"\u1798\u17bd\u1799\u1781\u17c2",MM:"%d \u1781\u17c2",y:"\u1798\u17bd\u1799\u1786\u17d2\u1793\u17b6\u17c6",yy:"%d \u1786\u17d2\u1793\u17b6\u17c6"},dayOfMonthOrdinalParse:/\u1791\u17b8\d{1,2}/,ordinal:"\u1791\u17b8%d",preparse:function(e){return e.replace(/[\u17e1\u17e2\u17e3\u17e4\u17e5\u17e6\u17e7\u17e8\u17e9\u17e0]/g,function(e){return Dn[e]})},postformat:function(e){return e.replace(/\d/g,function(e){return kn[e]})},week:{dow:1,doy:4}});var Tn={1:"\u0ce7",2:"\u0ce8",3:"\u0ce9",4:"\u0cea",5:"\u0ceb",6:"\u0cec",7:"\u0ced",8:"\u0cee",9:"\u0cef",0:"\u0ce6"},gn={"\u0ce7":"1","\u0ce8":"2","\u0ce9":"3","\u0cea":"4","\u0ceb":"5","\u0cec":"6","\u0ced":"7","\u0cee":"8","\u0cef":"9","\u0ce6":"0"};M.defineLocale("kn",{months:"\u0c9c\u0ca8\u0cb5\u0cb0\u0cbf_\u0cab\u0cc6\u0cac\u0ccd\u0cb0\u0cb5\u0cb0\u0cbf_\u0cae\u0cbe\u0cb0\u0ccd\u0c9a\u0ccd_\u0c8f\u0caa\u0ccd\u0cb0\u0cbf\u0cb2\u0ccd_\u0cae\u0cc6\u0cd5_\u0c9c\u0cc2\u0ca8\u0ccd_\u0c9c\u0cc1\u0cb2\u0cc6\u0cd6_\u0c86\u0c97\u0cb8\u0ccd\u0c9f\u0ccd_\u0cb8\u0cc6\u0caa\u0ccd\u0c9f\u0cc6\u0c82\u0cac\u0cb0\u0ccd_\u0c85\u0c95\u0ccd\u0c9f\u0cc6\u0cc2\u0cd5\u0cac\u0cb0\u0ccd_\u0ca8\u0cb5\u0cc6\u0c82\u0cac\u0cb0\u0ccd_\u0ca1\u0cbf\u0cb8\u0cc6\u0c82\u0cac\u0cb0\u0ccd".split("_"),monthsShort:"\u0c9c\u0ca8_\u0cab\u0cc6\u0cac\u0ccd\u0cb0_\u0cae\u0cbe\u0cb0\u0ccd\u0c9a\u0ccd_\u0c8f\u0caa\u0ccd\u0cb0\u0cbf\u0cb2\u0ccd_\u0cae\u0cc6\u0cd5_\u0c9c\u0cc2\u0ca8\u0ccd_\u0c9c\u0cc1\u0cb2\u0cc6\u0cd6_\u0c86\u0c97\u0cb8\u0ccd\u0c9f\u0ccd_\u0cb8\u0cc6\u0caa\u0ccd\u0c9f\u0cc6\u0c82_\u0c85\u0c95\u0ccd\u0c9f\u0cc6\u0cc2\u0cd5_\u0ca8\u0cb5\u0cc6\u0c82_\u0ca1\u0cbf\u0cb8\u0cc6\u0c82".split("_"),monthsParseExact:!0,weekdays:"\u0cad\u0cbe\u0ca8\u0cc1\u0cb5\u0cbe\u0cb0_\u0cb8\u0cc6\u0cc2\u0cd5\u0cae\u0cb5\u0cbe\u0cb0_\u0cae\u0c82\u0c97\u0cb3\u0cb5\u0cbe\u0cb0_\u0cac\u0cc1\u0ca7\u0cb5\u0cbe\u0cb0_\u0c97\u0cc1\u0cb0\u0cc1\u0cb5\u0cbe\u0cb0_\u0cb6\u0cc1\u0c95\u0ccd\u0cb0\u0cb5\u0cbe\u0cb0_\u0cb6\u0ca8\u0cbf\u0cb5\u0cbe\u0cb0".split("_"),weekdaysShort:"\u0cad\u0cbe\u0ca8\u0cc1_\u0cb8\u0cc6\u0cc2\u0cd5\u0cae_\u0cae\u0c82\u0c97\u0cb3_\u0cac\u0cc1\u0ca7_\u0c97\u0cc1\u0cb0\u0cc1_\u0cb6\u0cc1\u0c95\u0ccd\u0cb0_\u0cb6\u0ca8\u0cbf".split("_"),weekdaysMin:"\u0cad\u0cbe_\u0cb8\u0cc6\u0cc2\u0cd5_\u0cae\u0c82_\u0cac\u0cc1_\u0c97\u0cc1_\u0cb6\u0cc1_\u0cb6".split("_"),longDateFormat:{LT:"A h:mm",LTS:"A h:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm",LLLL:"dddd, D MMMM YYYY, A h:mm"},calendar:{sameDay:"[\u0c87\u0c82\u0ca6\u0cc1] LT",nextDay:"[\u0ca8\u0cbe\u0cb3\u0cc6] LT",nextWeek:"dddd, LT",lastDay:"[\u0ca8\u0cbf\u0ca8\u0ccd\u0ca8\u0cc6] LT",lastWeek:"[\u0c95\u0cc6\u0cc2\u0ca8\u0cc6\u0caf] dddd, LT",sameElse:"L"},relativeTime:{future:"%s \u0ca8\u0c82\u0ca4\u0cb0",past:"%s \u0cb9\u0cbf\u0c82\u0ca6\u0cc6",s:"\u0c95\u0cc6\u0cb2\u0cb5\u0cc1 \u0c95\u0ccd\u0cb7\u0ca3\u0c97\u0cb3\u0cc1",ss:"%d \u0cb8\u0cc6\u0c95\u0cc6\u0c82\u0ca1\u0cc1\u0c97\u0cb3\u0cc1",m:"\u0c92\u0c82\u0ca6\u0cc1 \u0ca8\u0cbf\u0cae\u0cbf\u0cb7",mm:"%d \u0ca8\u0cbf\u0cae\u0cbf\u0cb7",h:"\u0c92\u0c82\u0ca6\u0cc1 \u0c97\u0c82\u0c9f\u0cc6",hh:"%d \u0c97\u0c82\u0c9f\u0cc6",d:"\u0c92\u0c82\u0ca6\u0cc1 \u0ca6\u0cbf\u0ca8",dd:"%d \u0ca6\u0cbf\u0ca8",M:"\u0c92\u0c82\u0ca6\u0cc1 \u0ca4\u0cbf\u0c82\u0c97\u0cb3\u0cc1",MM:"%d \u0ca4\u0cbf\u0c82\u0c97\u0cb3\u0cc1",y:"\u0c92\u0c82\u0ca6\u0cc1 \u0cb5\u0cb0\u0ccd\u0cb7",yy:"%d \u0cb5\u0cb0\u0ccd\u0cb7"},preparse:function(e){return e.replace(/[\u0ce7\u0ce8\u0ce9\u0cea\u0ceb\u0cec\u0ced\u0cee\u0cef\u0ce6]/g,function(e){return gn[e]})},postformat:function(e){return e.replace(/\d/g,function(e){return Tn[e]})},meridiemParse:/\u0cb0\u0cbe\u0ca4\u0ccd\u0cb0\u0cbf|\u0cac\u0cc6\u0cb3\u0cbf\u0c97\u0ccd\u0c97\u0cc6|\u0cae\u0ca7\u0ccd\u0caf\u0cbe\u0cb9\u0ccd\u0ca8|\u0cb8\u0c82\u0c9c\u0cc6/,meridiemHour:function(e,a){return 12===e&&(e=0),"\u0cb0\u0cbe\u0ca4\u0ccd\u0cb0\u0cbf"===a?e<4?e:e+12:"\u0cac\u0cc6\u0cb3\u0cbf\u0c97\u0ccd\u0c97\u0cc6"===a?e:"\u0cae\u0ca7\u0ccd\u0caf\u0cbe\u0cb9\u0ccd\u0ca8"===a?10<=e?e:e+12:"\u0cb8\u0c82\u0c9c\u0cc6"===a?e+12:void 0},meridiem:function(e,a,t){return e<4?"\u0cb0\u0cbe\u0ca4\u0ccd\u0cb0\u0cbf":e<10?"\u0cac\u0cc6\u0cb3\u0cbf\u0c97\u0ccd\u0c97\u0cc6":e<17?"\u0cae\u0ca7\u0ccd\u0caf\u0cbe\u0cb9\u0ccd\u0ca8":e<20?"\u0cb8\u0c82\u0c9c\u0cc6":"\u0cb0\u0cbe\u0ca4\u0ccd\u0cb0\u0cbf"},dayOfMonthOrdinalParse:/\d{1,2}(\u0ca8\u0cc6\u0cd5)/,ordinal:function(e){return e+"\u0ca8\u0cc6\u0cd5"},week:{dow:0,doy:6}}),M.defineLocale("ko",{months:"1\uc6d4_2\uc6d4_3\uc6d4_4\uc6d4_5\uc6d4_6\uc6d4_7\uc6d4_8\uc6d4_9\uc6d4_10\uc6d4_11\uc6d4_12\uc6d4".split("_"),monthsShort:"1\uc6d4_2\uc6d4_3\uc6d4_4\uc6d4_5\uc6d4_6\uc6d4_7\uc6d4_8\uc6d4_9\uc6d4_10\uc6d4_11\uc6d4_12\uc6d4".split("_"),weekdays:"\uc77c\uc694\uc77c_\uc6d4\uc694\uc77c_\ud654\uc694\uc77c_\uc218\uc694\uc77c_\ubaa9\uc694\uc77c_\uae08\uc694\uc77c_\ud1a0\uc694\uc77c".split("_"),weekdaysShort:"\uc77c_\uc6d4_\ud654_\uc218_\ubaa9_\uae08_\ud1a0".split("_"),weekdaysMin:"\uc77c_\uc6d4_\ud654_\uc218_\ubaa9_\uae08_\ud1a0".split("_"),longDateFormat:{LT:"A h:mm",LTS:"A h:mm:ss",L:"YYYY.MM.DD.",LL:"YYYY\ub144 MMMM D\uc77c",LLL:"YYYY\ub144 MMMM D\uc77c A h:mm",LLLL:"YYYY\ub144 MMMM D\uc77c dddd A h:mm",l:"YYYY.MM.DD.",ll:"YYYY\ub144 MMMM D\uc77c",lll:"YYYY\ub144 MMMM D\uc77c A h:mm",llll:"YYYY\ub144 MMMM D\uc77c dddd A h:mm"},calendar:{sameDay:"\uc624\ub298 LT",nextDay:"\ub0b4\uc77c LT",nextWeek:"dddd LT",lastDay:"\uc5b4\uc81c LT",lastWeek:"\uc9c0\ub09c\uc8fc dddd LT",sameElse:"L"},relativeTime:{future:"%s \ud6c4",past:"%s \uc804",s:"\uba87 \ucd08",ss:"%d\ucd08",m:"1\ubd84",mm:"%d\ubd84",h:"\ud55c \uc2dc\uac04",hh:"%d\uc2dc\uac04",d:"\ud558\ub8e8",dd:"%d\uc77c",M:"\ud55c \ub2ec",MM:"%d\ub2ec",y:"\uc77c \ub144",yy:"%d\ub144"},dayOfMonthOrdinalParse:/\d{1,2}(\uc77c|\uc6d4|\uc8fc)/,ordinal:function(e,a){switch(a){case"d":case"D":case"DDD":return e+"\uc77c";case"M":return e+"\uc6d4";case"w":case"W":return e+"\uc8fc";default:return e}},meridiemParse:/\uc624\uc804|\uc624\ud6c4/,isPM:function(e){return"\uc624\ud6c4"===e},meridiem:function(e,a,t){return e<12?"\uc624\uc804":"\uc624\ud6c4"}});var wn={1:"\u0661",2:"\u0662",3:"\u0663",4:"\u0664",5:"\u0665",6:"\u0666",7:"\u0667",8:"\u0668",9:"\u0669",0:"\u0660"},vn={"\u0661":"1","\u0662":"2","\u0663":"3","\u0664":"4","\u0665":"5","\u0666":"6","\u0667":"7","\u0668":"8","\u0669":"9","\u0660":"0"},bn=["\u06a9\u0627\u0646\u0648\u0646\u06cc \u062f\u0648\u0648\u06d5\u0645","\u0634\u0648\u0628\u0627\u062a","\u0626\u0627\u0632\u0627\u0631","\u0646\u06cc\u0633\u0627\u0646","\u0626\u0627\u06cc\u0627\u0631","\u062d\u0648\u0632\u06d5\u06cc\u0631\u0627\u0646","\u062a\u06d5\u0645\u0645\u0648\u0632","\u0626\u0627\u0628","\u0626\u06d5\u06cc\u0644\u0648\u0648\u0644","\u062a\u0634\u0631\u06cc\u0646\u06cc \u06cc\u06d5\u0643\u06d5\u0645","\u062a\u0634\u0631\u06cc\u0646\u06cc \u062f\u0648\u0648\u06d5\u0645","\u0643\u0627\u0646\u0648\u0646\u06cc \u06cc\u06d5\u06a9\u06d5\u0645"];M.defineLocale("ku",{months:bn,monthsShort:bn,weekdays:"\u06cc\u0647\u200c\u0643\u0634\u0647\u200c\u0645\u0645\u0647\u200c_\u062f\u0648\u0648\u0634\u0647\u200c\u0645\u0645\u0647\u200c_\u0633\u06ce\u0634\u0647\u200c\u0645\u0645\u0647\u200c_\u0686\u0648\u0627\u0631\u0634\u0647\u200c\u0645\u0645\u0647\u200c_\u067e\u06ce\u0646\u062c\u0634\u0647\u200c\u0645\u0645\u0647\u200c_\u0647\u0647\u200c\u06cc\u0646\u06cc_\u0634\u0647\u200c\u0645\u0645\u0647\u200c".split("_"),weekdaysShort:"\u06cc\u0647\u200c\u0643\u0634\u0647\u200c\u0645_\u062f\u0648\u0648\u0634\u0647\u200c\u0645_\u0633\u06ce\u0634\u0647\u200c\u0645_\u0686\u0648\u0627\u0631\u0634\u0647\u200c\u0645_\u067e\u06ce\u0646\u062c\u0634\u0647\u200c\u0645_\u0647\u0647\u200c\u06cc\u0646\u06cc_\u0634\u0647\u200c\u0645\u0645\u0647\u200c".split("_"),weekdaysMin:"\u06cc_\u062f_\u0633_\u0686_\u067e_\u0647_\u0634".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},meridiemParse:/\u0626\u06ce\u0648\u0627\u0631\u0647\u200c|\u0628\u0647\u200c\u06cc\u0627\u0646\u06cc/,isPM:function(e){return/\u0626\u06ce\u0648\u0627\u0631\u0647\u200c/.test(e)},meridiem:function(e,a,t){return e<12?"\u0628\u0647\u200c\u06cc\u0627\u0646\u06cc":"\u0626\u06ce\u0648\u0627\u0631\u0647\u200c"},calendar:{sameDay:"[\u0626\u0647\u200c\u0645\u0631\u06c6 \u0643\u0627\u062a\u0698\u0645\u06ce\u0631] LT",nextDay:"[\u0628\u0647\u200c\u06cc\u0627\u0646\u06cc \u0643\u0627\u062a\u0698\u0645\u06ce\u0631] LT",nextWeek:"dddd [\u0643\u0627\u062a\u0698\u0645\u06ce\u0631] LT",lastDay:"[\u062f\u0648\u06ce\u0646\u06ce \u0643\u0627\u062a\u0698\u0645\u06ce\u0631] LT",lastWeek:"dddd [\u0643\u0627\u062a\u0698\u0645\u06ce\u0631] LT",sameElse:"L"},relativeTime:{future:"\u0644\u0647\u200c %s",past:"%s",s:"\u0686\u0647\u200c\u0646\u062f \u0686\u0631\u0643\u0647\u200c\u06cc\u0647\u200c\u0643",ss:"\u0686\u0631\u0643\u0647\u200c %d",m:"\u06cc\u0647\u200c\u0643 \u062e\u0648\u0644\u0647\u200c\u0643",mm:"%d \u062e\u0648\u0644\u0647\u200c\u0643",h:"\u06cc\u0647\u200c\u0643 \u0643\u0627\u062a\u0698\u0645\u06ce\u0631",hh:"%d \u0643\u0627\u062a\u0698\u0645\u06ce\u0631",d:"\u06cc\u0647\u200c\u0643 \u0695\u06c6\u0698",dd:"%d \u0695\u06c6\u0698",M:"\u06cc\u0647\u200c\u0643 \u0645\u0627\u0646\u06af",MM:"%d \u0645\u0627\u0646\u06af",y:"\u06cc\u0647\u200c\u0643 \u0633\u0627\u06b5",yy:"%d \u0633\u0627\u06b5"},preparse:function(e){return e.replace(/[\u0661\u0662\u0663\u0664\u0665\u0666\u0667\u0668\u0669\u0660]/g,function(e){return vn[e]}).replace(/\u060c/g,",")},postformat:function(e){return e.replace(/\d/g,function(e){return wn[e]}).replace(/,/g,"\u060c")},week:{dow:6,doy:12}});var Hn={0:"-\u0447\u04af",1:"-\u0447\u0438",2:"-\u0447\u0438",3:"-\u0447\u04af",4:"-\u0447\u04af",5:"-\u0447\u0438",6:"-\u0447\u044b",7:"-\u0447\u0438",8:"-\u0447\u0438",9:"-\u0447\u0443",10:"-\u0447\u0443",20:"-\u0447\u044b",30:"-\u0447\u0443",40:"-\u0447\u044b",50:"-\u0447\u04af",60:"-\u0447\u044b",70:"-\u0447\u0438",80:"-\u0447\u0438",90:"-\u0447\u0443",100:"-\u0447\u04af"};function Sn(e,a,t,s){var n={m:["eng Minutt","enger Minutt"],h:["eng Stonn","enger Stonn"],d:["een Dag","engem Dag"],M:["ee Mount","engem Mount"],y:["ee Joer","engem Joer"]};return a?n[t][0]:n[t][1]}function jn(e){if(e=parseInt(e,10),isNaN(e))return!1;if(e<0)return!0;if(e<10)return 4<=e&&e<=7;if(e<100){var a=e%10;return 0==a?jn(e/10):jn(a)}if(e<1e4){for(;10<=e;)e/=10;return jn(e)}return jn(e/=1e3)}M.defineLocale("ky",{months:"\u044f\u043d\u0432\u0430\u0440\u044c_\u0444\u0435\u0432\u0440\u0430\u043b\u044c_\u043c\u0430\u0440\u0442_\u0430\u043f\u0440\u0435\u043b\u044c_\u043c\u0430\u0439_\u0438\u044e\u043d\u044c_\u0438\u044e\u043b\u044c_\u0430\u0432\u0433\u0443\u0441\u0442_\u0441\u0435\u043d\u0442\u044f\u0431\u0440\u044c_\u043e\u043a\u0442\u044f\u0431\u0440\u044c_\u043d\u043e\u044f\u0431\u0440\u044c_\u0434\u0435\u043a\u0430\u0431\u0440\u044c".split("_"),monthsShort:"\u044f\u043d\u0432_\u0444\u0435\u0432_\u043c\u0430\u0440\u0442_\u0430\u043f\u0440_\u043c\u0430\u0439_\u0438\u044e\u043d\u044c_\u0438\u044e\u043b\u044c_\u0430\u0432\u0433_\u0441\u0435\u043d_\u043e\u043a\u0442_\u043d\u043e\u044f_\u0434\u0435\u043a".split("_"),weekdays:"\u0416\u0435\u043a\u0448\u0435\u043c\u0431\u0438_\u0414\u04af\u0439\u0448\u04e9\u043c\u0431\u04af_\u0428\u0435\u0439\u0448\u0435\u043c\u0431\u0438_\u0428\u0430\u0440\u0448\u0435\u043c\u0431\u0438_\u0411\u0435\u0439\u0448\u0435\u043c\u0431\u0438_\u0416\u0443\u043c\u0430_\u0418\u0448\u0435\u043c\u0431\u0438".split("_"),weekdaysShort:"\u0416\u0435\u043a_\u0414\u04af\u0439_\u0428\u0435\u0439_\u0428\u0430\u0440_\u0411\u0435\u0439_\u0416\u0443\u043c_\u0418\u0448\u0435".split("_"),weekdaysMin:"\u0416\u043a_\u0414\u0439_\u0428\u0439_\u0428\u0440_\u0411\u0439_\u0416\u043c_\u0418\u0448".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[\u0411\u04af\u0433\u04af\u043d \u0441\u0430\u0430\u0442] LT",nextDay:"[\u042d\u0440\u0442\u0435\u04a3 \u0441\u0430\u0430\u0442] LT",nextWeek:"dddd [\u0441\u0430\u0430\u0442] LT",lastDay:"[\u041a\u0435\u0447\u044d\u044d \u0441\u0430\u0430\u0442] LT",lastWeek:"[\u04e8\u0442\u043a\u04e9\u043d \u0430\u043f\u0442\u0430\u043d\u044b\u043d] dddd [\u043a\u04af\u043d\u04af] [\u0441\u0430\u0430\u0442] LT",sameElse:"L"},relativeTime:{future:"%s \u0438\u0447\u0438\u043d\u0434\u0435",past:"%s \u043c\u0443\u0440\u0443\u043d",s:"\u0431\u0438\u0440\u043d\u0435\u0447\u0435 \u0441\u0435\u043a\u0443\u043d\u0434",ss:"%d \u0441\u0435\u043a\u0443\u043d\u0434",m:"\u0431\u0438\u0440 \u043c\u04af\u043d\u04e9\u0442",mm:"%d \u043c\u04af\u043d\u04e9\u0442",h:"\u0431\u0438\u0440 \u0441\u0430\u0430\u0442",hh:"%d \u0441\u0430\u0430\u0442",d:"\u0431\u0438\u0440 \u043a\u04af\u043d",dd:"%d \u043a\u04af\u043d",M:"\u0431\u0438\u0440 \u0430\u0439",MM:"%d \u0430\u0439",y:"\u0431\u0438\u0440 \u0436\u044b\u043b",yy:"%d \u0436\u044b\u043b"},dayOfMonthOrdinalParse:/\d{1,2}-(\u0447\u0438|\u0447\u044b|\u0447\u04af|\u0447\u0443)/,ordinal:function(e){return e+(Hn[e]||Hn[e%10]||Hn[100<=e?100:null])},week:{dow:1,doy:7}}),M.defineLocale("lb",{months:"Januar_Februar_M\xe4erz_Abr\xebll_Mee_Juni_Juli_August_September_Oktober_November_Dezember".split("_"),monthsShort:"Jan._Febr._Mrz._Abr._Mee_Jun._Jul._Aug._Sept._Okt._Nov._Dez.".split("_"),monthsParseExact:!0,weekdays:"Sonndeg_M\xe9indeg_D\xebnschdeg_M\xebttwoch_Donneschdeg_Freideg_Samschdeg".split("_"),weekdaysShort:"So._M\xe9._D\xeb._M\xeb._Do._Fr._Sa.".split("_"),weekdaysMin:"So_M\xe9_D\xeb_M\xeb_Do_Fr_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm [Auer]",LTS:"H:mm:ss [Auer]",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm [Auer]",LLLL:"dddd, D. MMMM YYYY H:mm [Auer]"},calendar:{sameDay:"[Haut um] LT",sameElse:"L",nextDay:"[Muer um] LT",nextWeek:"dddd [um] LT",lastDay:"[G\xebschter um] LT",lastWeek:function(){switch(this.day()){case 2:case 4:return"[Leschten] dddd [um] LT";default:return"[Leschte] dddd [um] LT"}}},relativeTime:{future:function(e){return jn(e.substr(0,e.indexOf(" ")))?"a "+e:"an "+e},past:function(e){return jn(e.substr(0,e.indexOf(" ")))?"viru "+e:"virun "+e},s:"e puer Sekonnen",ss:"%d Sekonnen",m:Sn,mm:"%d Minutten",h:Sn,hh:"%d Stonnen",d:Sn,dd:"%d Deeg",M:Sn,MM:"%d M\xe9int",y:Sn,yy:"%d Joer"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}}),M.defineLocale("lo",{months:"\u0ea1\u0eb1\u0e87\u0e81\u0ead\u0e99_\u0e81\u0eb8\u0ea1\u0e9e\u0eb2_\u0ea1\u0eb5\u0e99\u0eb2_\u0ec0\u0ea1\u0eaa\u0eb2_\u0e9e\u0eb6\u0e94\u0eaa\u0eb0\u0e9e\u0eb2_\u0ea1\u0eb4\u0e96\u0eb8\u0e99\u0eb2_\u0e81\u0ecd\u0ea5\u0eb0\u0e81\u0ebb\u0e94_\u0eaa\u0eb4\u0e87\u0eab\u0eb2_\u0e81\u0eb1\u0e99\u0e8d\u0eb2_\u0e95\u0eb8\u0ea5\u0eb2_\u0e9e\u0eb0\u0e88\u0eb4\u0e81_\u0e97\u0eb1\u0e99\u0ea7\u0eb2".split("_"),monthsShort:"\u0ea1\u0eb1\u0e87\u0e81\u0ead\u0e99_\u0e81\u0eb8\u0ea1\u0e9e\u0eb2_\u0ea1\u0eb5\u0e99\u0eb2_\u0ec0\u0ea1\u0eaa\u0eb2_\u0e9e\u0eb6\u0e94\u0eaa\u0eb0\u0e9e\u0eb2_\u0ea1\u0eb4\u0e96\u0eb8\u0e99\u0eb2_\u0e81\u0ecd\u0ea5\u0eb0\u0e81\u0ebb\u0e94_\u0eaa\u0eb4\u0e87\u0eab\u0eb2_\u0e81\u0eb1\u0e99\u0e8d\u0eb2_\u0e95\u0eb8\u0ea5\u0eb2_\u0e9e\u0eb0\u0e88\u0eb4\u0e81_\u0e97\u0eb1\u0e99\u0ea7\u0eb2".split("_"),weekdays:"\u0ead\u0eb2\u0e97\u0eb4\u0e94_\u0e88\u0eb1\u0e99_\u0ead\u0eb1\u0e87\u0e84\u0eb2\u0e99_\u0e9e\u0eb8\u0e94_\u0e9e\u0eb0\u0eab\u0eb1\u0e94_\u0eaa\u0eb8\u0e81_\u0ec0\u0eaa\u0ebb\u0eb2".split("_"),weekdaysShort:"\u0e97\u0eb4\u0e94_\u0e88\u0eb1\u0e99_\u0ead\u0eb1\u0e87\u0e84\u0eb2\u0e99_\u0e9e\u0eb8\u0e94_\u0e9e\u0eb0\u0eab\u0eb1\u0e94_\u0eaa\u0eb8\u0e81_\u0ec0\u0eaa\u0ebb\u0eb2".split("_"),weekdaysMin:"\u0e97_\u0e88_\u0ead\u0e84_\u0e9e_\u0e9e\u0eab_\u0eaa\u0e81_\u0eaa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"\u0ea7\u0eb1\u0e99dddd D MMMM YYYY HH:mm"},meridiemParse:/\u0e95\u0ead\u0e99\u0ec0\u0e8a\u0ebb\u0ec9\u0eb2|\u0e95\u0ead\u0e99\u0ec1\u0ea5\u0e87/,isPM:function(e){return"\u0e95\u0ead\u0e99\u0ec1\u0ea5\u0e87"===e},meridiem:function(e,a,t){return e<12?"\u0e95\u0ead\u0e99\u0ec0\u0e8a\u0ebb\u0ec9\u0eb2":"\u0e95\u0ead\u0e99\u0ec1\u0ea5\u0e87"},calendar:{sameDay:"[\u0ea1\u0eb7\u0ec9\u0e99\u0eb5\u0ec9\u0ec0\u0ea7\u0ea5\u0eb2] LT",nextDay:"[\u0ea1\u0eb7\u0ec9\u0ead\u0eb7\u0ec8\u0e99\u0ec0\u0ea7\u0ea5\u0eb2] LT",nextWeek:"[\u0ea7\u0eb1\u0e99]dddd[\u0edc\u0ec9\u0eb2\u0ec0\u0ea7\u0ea5\u0eb2] LT",lastDay:"[\u0ea1\u0eb7\u0ec9\u0ea7\u0eb2\u0e99\u0e99\u0eb5\u0ec9\u0ec0\u0ea7\u0ea5\u0eb2] LT",lastWeek:"[\u0ea7\u0eb1\u0e99]dddd[\u0ec1\u0ea5\u0ec9\u0ea7\u0e99\u0eb5\u0ec9\u0ec0\u0ea7\u0ea5\u0eb2] LT",sameElse:"L"},relativeTime:{future:"\u0ead\u0eb5\u0e81 %s",past:"%s\u0e9c\u0ec8\u0eb2\u0e99\u0ea1\u0eb2",s:"\u0e9a\u0ecd\u0ec8\u0ec0\u0e97\u0ebb\u0ec8\u0eb2\u0ec3\u0e94\u0ea7\u0eb4\u0e99\u0eb2\u0e97\u0eb5",ss:"%d \u0ea7\u0eb4\u0e99\u0eb2\u0e97\u0eb5",m:"1 \u0e99\u0eb2\u0e97\u0eb5",mm:"%d \u0e99\u0eb2\u0e97\u0eb5",h:"1 \u0e8a\u0ebb\u0ec8\u0ea7\u0ec2\u0ea1\u0e87",hh:"%d \u0e8a\u0ebb\u0ec8\u0ea7\u0ec2\u0ea1\u0e87",d:"1 \u0ea1\u0eb7\u0ec9",dd:"%d \u0ea1\u0eb7\u0ec9",M:"1 \u0ec0\u0e94\u0eb7\u0ead\u0e99",MM:"%d \u0ec0\u0e94\u0eb7\u0ead\u0e99",y:"1 \u0e9b\u0eb5",yy:"%d \u0e9b\u0eb5"},dayOfMonthOrdinalParse:/(\u0e97\u0eb5\u0ec8)\d{1,2}/,ordinal:function(e){return"\u0e97\u0eb5\u0ec8"+e}});var xn={ss:"sekund\u0117_sekund\u017ei\u0173_sekundes",m:"minut\u0117_minut\u0117s_minut\u0119",mm:"minut\u0117s_minu\u010di\u0173_minutes",h:"valanda_valandos_valand\u0105",hh:"valandos_valand\u0173_valandas",d:"diena_dienos_dien\u0105",dd:"dienos_dien\u0173_dienas",M:"m\u0117nuo_m\u0117nesio_m\u0117nes\u012f",MM:"m\u0117nesiai_m\u0117nesi\u0173_m\u0117nesius",y:"metai_met\u0173_metus",yy:"metai_met\u0173_metus"};function On(e,a,t,s){return a?Wn(t)[0]:s?Wn(t)[1]:Wn(t)[2]}function Pn(e){return e%10==0||10<e&&e<20}function Wn(e){return xn[e].split("_")}function An(e,a,t,s){var n=e+" ";return 1===e?n+On(0,a,t[0],s):a?n+(Pn(e)?Wn(t)[1]:Wn(t)[0]):s?n+Wn(t)[1]:n+(Pn(e)?Wn(t)[1]:Wn(t)[2])}M.defineLocale("lt",{months:{format:"sausio_vasario_kovo_baland\u017eio_gegu\u017e\u0117s_bir\u017eelio_liepos_rugpj\u016b\u010dio_rugs\u0117jo_spalio_lapkri\u010dio_gruod\u017eio".split("_"),standalone:"sausis_vasaris_kovas_balandis_gegu\u017e\u0117_bir\u017eelis_liepa_rugpj\u016btis_rugs\u0117jis_spalis_lapkritis_gruodis".split("_"),isFormat:/D[oD]?(\[[^\[\]]*\]|\s)+MMMM?|MMMM?(\[[^\[\]]*\]|\s)+D[oD]?/},monthsShort:"sau_vas_kov_bal_geg_bir_lie_rgp_rgs_spa_lap_grd".split("_"),weekdays:{format:"sekmadien\u012f_pirmadien\u012f_antradien\u012f_tre\u010diadien\u012f_ketvirtadien\u012f_penktadien\u012f_\u0161e\u0161tadien\u012f".split("_"),standalone:"sekmadienis_pirmadienis_antradienis_tre\u010diadienis_ketvirtadienis_penktadienis_\u0161e\u0161tadienis".split("_"),isFormat:/dddd HH:mm/},weekdaysShort:"Sek_Pir_Ant_Tre_Ket_Pen_\u0160e\u0161".split("_"),weekdaysMin:"S_P_A_T_K_Pn_\u0160".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"YYYY [m.] MMMM D [d.]",LLL:"YYYY [m.] MMMM D [d.], HH:mm [val.]",LLLL:"YYYY [m.] MMMM D [d.], dddd, HH:mm [val.]",l:"YYYY-MM-DD",ll:"YYYY [m.] MMMM D [d.]",lll:"YYYY [m.] MMMM D [d.], HH:mm [val.]",llll:"YYYY [m.] MMMM D [d.], ddd, HH:mm [val.]"},calendar:{sameDay:"[\u0160iandien] LT",nextDay:"[Rytoj] LT",nextWeek:"dddd LT",lastDay:"[Vakar] LT",lastWeek:"[Pra\u0117jus\u012f] dddd LT",sameElse:"L"},relativeTime:{future:"po %s",past:"prie\u0161 %s",s:function(e,a,t,s){return a?"kelios sekund\u0117s":s?"keli\u0173 sekund\u017ei\u0173":"kelias sekundes"},ss:An,m:On,mm:An,h:On,hh:An,d:On,dd:An,M:On,MM:An,y:On,yy:An},dayOfMonthOrdinalParse:/\d{1,2}-oji/,ordinal:function(e){return e+"-oji"},week:{dow:1,doy:4}});var En={ss:"sekundes_sekund\u0113m_sekunde_sekundes".split("_"),m:"min\u016btes_min\u016bt\u0113m_min\u016bte_min\u016btes".split("_"),mm:"min\u016btes_min\u016bt\u0113m_min\u016bte_min\u016btes".split("_"),h:"stundas_stund\u0101m_stunda_stundas".split("_"),hh:"stundas_stund\u0101m_stunda_stundas".split("_"),d:"dienas_dien\u0101m_diena_dienas".split("_"),dd:"dienas_dien\u0101m_diena_dienas".split("_"),M:"m\u0113ne\u0161a_m\u0113ne\u0161iem_m\u0113nesis_m\u0113ne\u0161i".split("_"),MM:"m\u0113ne\u0161a_m\u0113ne\u0161iem_m\u0113nesis_m\u0113ne\u0161i".split("_"),y:"gada_gadiem_gads_gadi".split("_"),yy:"gada_gadiem_gads_gadi".split("_")};function Fn(e,a,t){return t?a%10==1&&a%100!=11?e[2]:e[3]:a%10==1&&a%100!=11?e[0]:e[1]}function zn(e,a,t){return e+" "+Fn(En[t],e,a)}function Nn(e,a,t){return Fn(En[t],e,a)}M.defineLocale("lv",{months:"janv\u0101ris_febru\u0101ris_marts_apr\u012blis_maijs_j\u016bnijs_j\u016blijs_augusts_septembris_oktobris_novembris_decembris".split("_"),monthsShort:"jan_feb_mar_apr_mai_j\u016bn_j\u016bl_aug_sep_okt_nov_dec".split("_"),weekdays:"sv\u0113tdiena_pirmdiena_otrdiena_tre\u0161diena_ceturtdiena_piektdiena_sestdiena".split("_"),weekdaysShort:"Sv_P_O_T_C_Pk_S".split("_"),weekdaysMin:"Sv_P_O_T_C_Pk_S".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY.",LL:"YYYY. [gada] D. MMMM",LLL:"YYYY. [gada] D. MMMM, HH:mm",LLLL:"YYYY. [gada] D. MMMM, dddd, HH:mm"},calendar:{sameDay:"[\u0160odien pulksten] LT",nextDay:"[R\u012bt pulksten] LT",nextWeek:"dddd [pulksten] LT",lastDay:"[Vakar pulksten] LT",lastWeek:"[Pag\u0101ju\u0161\u0101] dddd [pulksten] LT",sameElse:"L"},relativeTime:{future:"p\u0113c %s",past:"pirms %s",s:function(e,a){return a?"da\u017eas sekundes":"da\u017e\u0101m sekund\u0113m"},ss:zn,m:Nn,mm:zn,h:Nn,hh:zn,d:Nn,dd:zn,M:Nn,MM:zn,y:Nn,yy:zn},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}});var Jn={words:{ss:["sekund","sekunda","sekundi"],m:["jedan minut","jednog minuta"],mm:["minut","minuta","minuta"],h:["jedan sat","jednog sata"],hh:["sat","sata","sati"],dd:["dan","dana","dana"],MM:["mjesec","mjeseca","mjeseci"],yy:["godina","godine","godina"]},correctGrammaticalCase:function(e,a){return 1===e?a[0]:2<=e&&e<=4?a[1]:a[2]},translate:function(e,a,t){var s=Jn.words[t];return 1===t.length?a?s[0]:s[1]:e+" "+Jn.correctGrammaticalCase(e,s)}};function Rn(e,a,t,s){switch(t){case"s":return a?"\u0445\u044d\u0434\u0445\u044d\u043d \u0441\u0435\u043a\u0443\u043d\u0434":"\u0445\u044d\u0434\u0445\u044d\u043d \u0441\u0435\u043a\u0443\u043d\u0434\u044b\u043d";case"ss":return e+(a?" \u0441\u0435\u043a\u0443\u043d\u0434":" \u0441\u0435\u043a\u0443\u043d\u0434\u044b\u043d");case"m":case"mm":return e+(a?" \u043c\u0438\u043d\u0443\u0442":" \u043c\u0438\u043d\u0443\u0442\u044b\u043d");case"h":case"hh":return e+(a?" \u0446\u0430\u0433":" \u0446\u0430\u0433\u0438\u0439\u043d");case"d":case"dd":return e+(a?" \u04e9\u0434\u04e9\u0440":" \u04e9\u0434\u0440\u0438\u0439\u043d");case"M":case"MM":return e+(a?" \u0441\u0430\u0440":" \u0441\u0430\u0440\u044b\u043d");case"y":case"yy":return e+(a?" \u0436\u0438\u043b":" \u0436\u0438\u043b\u0438\u0439\u043d");default:return e}}M.defineLocale("me",{months:"januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar".split("_"),monthsShort:"jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"nedjelja_ponedjeljak_utorak_srijeda_\u010detvrtak_petak_subota".split("_"),weekdaysShort:"ned._pon._uto._sri._\u010det._pet._sub.".split("_"),weekdaysMin:"ne_po_ut_sr_\u010de_pe_su".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[danas u] LT",nextDay:"[sjutra u] LT",nextWeek:function(){switch(this.day()){case 0:return"[u] [nedjelju] [u] LT";case 3:return"[u] [srijedu] [u] LT";case 6:return"[u] [subotu] [u] LT";case 1:case 2:case 4:case 5:return"[u] dddd [u] LT"}},lastDay:"[ju\u010de u] LT",lastWeek:function(){return["[pro\u0161le] [nedjelje] [u] LT","[pro\u0161log] [ponedjeljka] [u] LT","[pro\u0161log] [utorka] [u] LT","[pro\u0161le] [srijede] [u] LT","[pro\u0161log] [\u010detvrtka] [u] LT","[pro\u0161log] [petka] [u] LT","[pro\u0161le] [subote] [u] LT"][this.day()]},sameElse:"L"},relativeTime:{future:"za %s",past:"prije %s",s:"nekoliko sekundi",ss:Jn.translate,m:Jn.translate,mm:Jn.translate,h:Jn.translate,hh:Jn.translate,d:"dan",dd:Jn.translate,M:"mjesec",MM:Jn.translate,y:"godinu",yy:Jn.translate},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}}),M.defineLocale("mi",{months:"Kohi-t\u0101te_Hui-tanguru_Pout\u016b-te-rangi_Paenga-wh\u0101wh\u0101_Haratua_Pipiri_H\u014dngoingoi_Here-turi-k\u014dk\u0101_Mahuru_Whiringa-\u0101-nuku_Whiringa-\u0101-rangi_Hakihea".split("_"),monthsShort:"Kohi_Hui_Pou_Pae_Hara_Pipi_H\u014dngoi_Here_Mahu_Whi-nu_Whi-ra_Haki".split("_"),monthsRegex:/(?:['a-z\u0101\u014D\u016B]+\-?){1,3}/i,monthsStrictRegex:/(?:['a-z\u0101\u014D\u016B]+\-?){1,3}/i,monthsShortRegex:/(?:['a-z\u0101\u014D\u016B]+\-?){1,3}/i,monthsShortStrictRegex:/(?:['a-z\u0101\u014D\u016B]+\-?){1,2}/i,weekdays:"R\u0101tapu_Mane_T\u016brei_Wenerei_T\u0101ite_Paraire_H\u0101tarei".split("_"),weekdaysShort:"Ta_Ma_T\u016b_We_T\u0101i_Pa_H\u0101".split("_"),weekdaysMin:"Ta_Ma_T\u016b_We_T\u0101i_Pa_H\u0101".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [i] HH:mm",LLLL:"dddd, D MMMM YYYY [i] HH:mm"},calendar:{sameDay:"[i teie mahana, i] LT",nextDay:"[apopo i] LT",nextWeek:"dddd [i] LT",lastDay:"[inanahi i] LT",lastWeek:"dddd [whakamutunga i] LT",sameElse:"L"},relativeTime:{future:"i roto i %s",past:"%s i mua",s:"te h\u0113kona ruarua",ss:"%d h\u0113kona",m:"he meneti",mm:"%d meneti",h:"te haora",hh:"%d haora",d:"he ra",dd:"%d ra",M:"he marama",MM:"%d marama",y:"he tau",yy:"%d tau"},dayOfMonthOrdinalParse:/\d{1,2}\xba/,ordinal:"%d\xba",week:{dow:1,doy:4}}),M.defineLocale("mk",{months:"\u0458\u0430\u043d\u0443\u0430\u0440\u0438_\u0444\u0435\u0432\u0440\u0443\u0430\u0440\u0438_\u043c\u0430\u0440\u0442_\u0430\u043f\u0440\u0438\u043b_\u043c\u0430\u0458_\u0458\u0443\u043d\u0438_\u0458\u0443\u043b\u0438_\u0430\u0432\u0433\u0443\u0441\u0442_\u0441\u0435\u043f\u0442\u0435\u043c\u0432\u0440\u0438_\u043e\u043a\u0442\u043e\u043c\u0432\u0440\u0438_\u043d\u043e\u0435\u043c\u0432\u0440\u0438_\u0434\u0435\u043a\u0435\u043c\u0432\u0440\u0438".split("_"),monthsShort:"\u0458\u0430\u043d_\u0444\u0435\u0432_\u043c\u0430\u0440_\u0430\u043f\u0440_\u043c\u0430\u0458_\u0458\u0443\u043d_\u0458\u0443\u043b_\u0430\u0432\u0433_\u0441\u0435\u043f_\u043e\u043a\u0442_\u043d\u043e\u0435_\u0434\u0435\u043a".split("_"),weekdays:"\u043d\u0435\u0434\u0435\u043b\u0430_\u043f\u043e\u043d\u0435\u0434\u0435\u043b\u043d\u0438\u043a_\u0432\u0442\u043e\u0440\u043d\u0438\u043a_\u0441\u0440\u0435\u0434\u0430_\u0447\u0435\u0442\u0432\u0440\u0442\u043e\u043a_\u043f\u0435\u0442\u043e\u043a_\u0441\u0430\u0431\u043e\u0442\u0430".split("_"),weekdaysShort:"\u043d\u0435\u0434_\u043f\u043e\u043d_\u0432\u0442\u043e_\u0441\u0440\u0435_\u0447\u0435\u0442_\u043f\u0435\u0442_\u0441\u0430\u0431".split("_"),weekdaysMin:"\u043de_\u043fo_\u0432\u0442_\u0441\u0440_\u0447\u0435_\u043f\u0435_\u0441a".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"D.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY H:mm",LLLL:"dddd, D MMMM YYYY H:mm"},calendar:{sameDay:"[\u0414\u0435\u043d\u0435\u0441 \u0432\u043e] LT",nextDay:"[\u0423\u0442\u0440\u0435 \u0432\u043e] LT",nextWeek:"[\u0412\u043e] dddd [\u0432\u043e] LT",lastDay:"[\u0412\u0447\u0435\u0440\u0430 \u0432\u043e] LT",lastWeek:function(){switch(this.day()){case 0:case 3:case 6:return"[\u0418\u0437\u043c\u0438\u043d\u0430\u0442\u0430\u0442\u0430] dddd [\u0432\u043e] LT";case 1:case 2:case 4:case 5:return"[\u0418\u0437\u043c\u0438\u043d\u0430\u0442\u0438\u043e\u0442] dddd [\u0432\u043e] LT"}},sameElse:"L"},relativeTime:{future:"\u0437\u0430 %s",past:"\u043f\u0440\u0435\u0434 %s",s:"\u043d\u0435\u043a\u043e\u043b\u043a\u0443 \u0441\u0435\u043a\u0443\u043d\u0434\u0438",ss:"%d \u0441\u0435\u043a\u0443\u043d\u0434\u0438",m:"\u0435\u0434\u043d\u0430 \u043c\u0438\u043d\u0443\u0442\u0430",mm:"%d \u043c\u0438\u043d\u0443\u0442\u0438",h:"\u0435\u0434\u0435\u043d \u0447\u0430\u0441",hh:"%d \u0447\u0430\u0441\u0430",d:"\u0435\u0434\u0435\u043d \u0434\u0435\u043d",dd:"%d \u0434\u0435\u043d\u0430",M:"\u0435\u0434\u0435\u043d \u043c\u0435\u0441\u0435\u0446",MM:"%d \u043c\u0435\u0441\u0435\u0446\u0438",y:"\u0435\u0434\u043d\u0430 \u0433\u043e\u0434\u0438\u043d\u0430",yy:"%d \u0433\u043e\u0434\u0438\u043d\u0438"},dayOfMonthOrdinalParse:/\d{1,2}-(\u0435\u0432|\u0435\u043d|\u0442\u0438|\u0432\u0438|\u0440\u0438|\u043c\u0438)/,ordinal:function(e){var a=e%10,t=e%100;return 0===e?e+"-\u0435\u0432":0==t?e+"-\u0435\u043d":10<t&&t<20?e+"-\u0442\u0438":1==a?e+"-\u0432\u0438":2==a?e+"-\u0440\u0438":7==a||8==a?e+"-\u043c\u0438":e+"-\u0442\u0438"},week:{dow:1,doy:7}}),M.defineLocale("ml",{months:"\u0d1c\u0d28\u0d41\u0d35\u0d30\u0d3f_\u0d2b\u0d46\u0d2c\u0d4d\u0d30\u0d41\u0d35\u0d30\u0d3f_\u0d2e\u0d3e\u0d7c\u0d1a\u0d4d\u0d1a\u0d4d_\u0d0f\u0d2a\u0d4d\u0d30\u0d3f\u0d7d_\u0d2e\u0d47\u0d2f\u0d4d_\u0d1c\u0d42\u0d7a_\u0d1c\u0d42\u0d32\u0d48_\u0d13\u0d17\u0d38\u0d4d\u0d31\u0d4d\u0d31\u0d4d_\u0d38\u0d46\u0d2a\u0d4d\u0d31\u0d4d\u0d31\u0d02\u0d2c\u0d7c_\u0d12\u0d15\u0d4d\u0d1f\u0d4b\u0d2c\u0d7c_\u0d28\u0d35\u0d02\u0d2c\u0d7c_\u0d21\u0d3f\u0d38\u0d02\u0d2c\u0d7c".split("_"),monthsShort:"\u0d1c\u0d28\u0d41._\u0d2b\u0d46\u0d2c\u0d4d\u0d30\u0d41._\u0d2e\u0d3e\u0d7c._\u0d0f\u0d2a\u0d4d\u0d30\u0d3f._\u0d2e\u0d47\u0d2f\u0d4d_\u0d1c\u0d42\u0d7a_\u0d1c\u0d42\u0d32\u0d48._\u0d13\u0d17._\u0d38\u0d46\u0d2a\u0d4d\u0d31\u0d4d\u0d31._\u0d12\u0d15\u0d4d\u0d1f\u0d4b._\u0d28\u0d35\u0d02._\u0d21\u0d3f\u0d38\u0d02.".split("_"),monthsParseExact:!0,weekdays:"\u0d1e\u0d3e\u0d2f\u0d31\u0d3e\u0d34\u0d4d\u0d1a_\u0d24\u0d3f\u0d19\u0d4d\u0d15\u0d33\u0d3e\u0d34\u0d4d\u0d1a_\u0d1a\u0d4a\u0d35\u0d4d\u0d35\u0d3e\u0d34\u0d4d\u0d1a_\u0d2c\u0d41\u0d27\u0d28\u0d3e\u0d34\u0d4d\u0d1a_\u0d35\u0d4d\u0d2f\u0d3e\u0d34\u0d3e\u0d34\u0d4d\u0d1a_\u0d35\u0d46\u0d33\u0d4d\u0d33\u0d3f\u0d2f\u0d3e\u0d34\u0d4d\u0d1a_\u0d36\u0d28\u0d3f\u0d2f\u0d3e\u0d34\u0d4d\u0d1a".split("_"),weekdaysShort:"\u0d1e\u0d3e\u0d2f\u0d7c_\u0d24\u0d3f\u0d19\u0d4d\u0d15\u0d7e_\u0d1a\u0d4a\u0d35\u0d4d\u0d35_\u0d2c\u0d41\u0d27\u0d7b_\u0d35\u0d4d\u0d2f\u0d3e\u0d34\u0d02_\u0d35\u0d46\u0d33\u0d4d\u0d33\u0d3f_\u0d36\u0d28\u0d3f".split("_"),weekdaysMin:"\u0d1e\u0d3e_\u0d24\u0d3f_\u0d1a\u0d4a_\u0d2c\u0d41_\u0d35\u0d4d\u0d2f\u0d3e_\u0d35\u0d46_\u0d36".split("_"),longDateFormat:{LT:"A h:mm -\u0d28\u0d41",LTS:"A h:mm:ss -\u0d28\u0d41",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm -\u0d28\u0d41",LLLL:"dddd, D MMMM YYYY, A h:mm -\u0d28\u0d41"},calendar:{sameDay:"[\u0d07\u0d28\u0d4d\u0d28\u0d4d] LT",nextDay:"[\u0d28\u0d3e\u0d33\u0d46] LT",nextWeek:"dddd, LT",lastDay:"[\u0d07\u0d28\u0d4d\u0d28\u0d32\u0d46] LT",lastWeek:"[\u0d15\u0d34\u0d3f\u0d1e\u0d4d\u0d1e] dddd, LT",sameElse:"L"},relativeTime:{future:"%s \u0d15\u0d34\u0d3f\u0d1e\u0d4d\u0d1e\u0d4d",past:"%s \u0d2e\u0d41\u0d7b\u0d2a\u0d4d",s:"\u0d05\u0d7d\u0d2a \u0d28\u0d3f\u0d2e\u0d3f\u0d37\u0d19\u0d4d\u0d19\u0d7e",ss:"%d \u0d38\u0d46\u0d15\u0d4d\u0d15\u0d7b\u0d21\u0d4d",m:"\u0d12\u0d30\u0d41 \u0d2e\u0d3f\u0d28\u0d3f\u0d31\u0d4d\u0d31\u0d4d",mm:"%d \u0d2e\u0d3f\u0d28\u0d3f\u0d31\u0d4d\u0d31\u0d4d",h:"\u0d12\u0d30\u0d41 \u0d2e\u0d23\u0d3f\u0d15\u0d4d\u0d15\u0d42\u0d7c",hh:"%d \u0d2e\u0d23\u0d3f\u0d15\u0d4d\u0d15\u0d42\u0d7c",d:"\u0d12\u0d30\u0d41 \u0d26\u0d3f\u0d35\u0d38\u0d02",dd:"%d \u0d26\u0d3f\u0d35\u0d38\u0d02",M:"\u0d12\u0d30\u0d41 \u0d2e\u0d3e\u0d38\u0d02",MM:"%d \u0d2e\u0d3e\u0d38\u0d02",y:"\u0d12\u0d30\u0d41 \u0d35\u0d7c\u0d37\u0d02",yy:"%d \u0d35\u0d7c\u0d37\u0d02"},meridiemParse:/\u0d30\u0d3e\u0d24\u0d4d\u0d30\u0d3f|\u0d30\u0d3e\u0d35\u0d3f\u0d32\u0d46|\u0d09\u0d1a\u0d4d\u0d1a \u0d15\u0d34\u0d3f\u0d1e\u0d4d\u0d1e\u0d4d|\u0d35\u0d48\u0d15\u0d41\u0d28\u0d4d\u0d28\u0d47\u0d30\u0d02|\u0d30\u0d3e\u0d24\u0d4d\u0d30\u0d3f/i,meridiemHour:function(e,a){return 12===e&&(e=0),"\u0d30\u0d3e\u0d24\u0d4d\u0d30\u0d3f"===a&&4<=e||"\u0d09\u0d1a\u0d4d\u0d1a \u0d15\u0d34\u0d3f\u0d1e\u0d4d\u0d1e\u0d4d"===a||"\u0d35\u0d48\u0d15\u0d41\u0d28\u0d4d\u0d28\u0d47\u0d30\u0d02"===a?e+12:e},meridiem:function(e,a,t){return e<4?"\u0d30\u0d3e\u0d24\u0d4d\u0d30\u0d3f":e<12?"\u0d30\u0d3e\u0d35\u0d3f\u0d32\u0d46":e<17?"\u0d09\u0d1a\u0d4d\u0d1a \u0d15\u0d34\u0d3f\u0d1e\u0d4d\u0d1e\u0d4d":e<20?"\u0d35\u0d48\u0d15\u0d41\u0d28\u0d4d\u0d28\u0d47\u0d30\u0d02":"\u0d30\u0d3e\u0d24\u0d4d\u0d30\u0d3f"}}),M.defineLocale("mn",{months:"\u041d\u044d\u0433\u0434\u04af\u0433\u044d\u044d\u0440 \u0441\u0430\u0440_\u0425\u043e\u0451\u0440\u0434\u0443\u0433\u0430\u0430\u0440 \u0441\u0430\u0440_\u0413\u0443\u0440\u0430\u0432\u0434\u0443\u0433\u0430\u0430\u0440 \u0441\u0430\u0440_\u0414\u04e9\u0440\u04e9\u0432\u0434\u04af\u0433\u044d\u044d\u0440 \u0441\u0430\u0440_\u0422\u0430\u0432\u0434\u0443\u0433\u0430\u0430\u0440 \u0441\u0430\u0440_\u0417\u0443\u0440\u0433\u0430\u0434\u0443\u0433\u0430\u0430\u0440 \u0441\u0430\u0440_\u0414\u043e\u043b\u0434\u0443\u0433\u0430\u0430\u0440 \u0441\u0430\u0440_\u041d\u0430\u0439\u043c\u0434\u0443\u0433\u0430\u0430\u0440 \u0441\u0430\u0440_\u0415\u0441\u0434\u04af\u0433\u044d\u044d\u0440 \u0441\u0430\u0440_\u0410\u0440\u0430\u0432\u0434\u0443\u0433\u0430\u0430\u0440 \u0441\u0430\u0440_\u0410\u0440\u0432\u0430\u043d \u043d\u044d\u0433\u0434\u04af\u0433\u044d\u044d\u0440 \u0441\u0430\u0440_\u0410\u0440\u0432\u0430\u043d \u0445\u043e\u0451\u0440\u0434\u0443\u0433\u0430\u0430\u0440 \u0441\u0430\u0440".split("_"),monthsShort:"1 \u0441\u0430\u0440_2 \u0441\u0430\u0440_3 \u0441\u0430\u0440_4 \u0441\u0430\u0440_5 \u0441\u0430\u0440_6 \u0441\u0430\u0440_7 \u0441\u0430\u0440_8 \u0441\u0430\u0440_9 \u0441\u0430\u0440_10 \u0441\u0430\u0440_11 \u0441\u0430\u0440_12 \u0441\u0430\u0440".split("_"),monthsParseExact:!0,weekdays:"\u041d\u044f\u043c_\u0414\u0430\u0432\u0430\u0430_\u041c\u044f\u0433\u043c\u0430\u0440_\u041b\u0445\u0430\u0433\u0432\u0430_\u041f\u04af\u0440\u044d\u0432_\u0411\u0430\u0430\u0441\u0430\u043d_\u0411\u044f\u043c\u0431\u0430".split("_"),weekdaysShort:"\u041d\u044f\u043c_\u0414\u0430\u0432_\u041c\u044f\u0433_\u041b\u0445\u0430_\u041f\u04af\u0440_\u0411\u0430\u0430_\u0411\u044f\u043c".split("_"),weekdaysMin:"\u041d\u044f_\u0414\u0430_\u041c\u044f_\u041b\u0445_\u041f\u04af_\u0411\u0430_\u0411\u044f".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"YYYY \u043e\u043d\u044b MMMM\u044b\u043d D",LLL:"YYYY \u043e\u043d\u044b MMMM\u044b\u043d D HH:mm",LLLL:"dddd, YYYY \u043e\u043d\u044b MMMM\u044b\u043d D HH:mm"},meridiemParse:/\u04ae\u04e8|\u04ae\u0425/i,isPM:function(e){return"\u04ae\u0425"===e},meridiem:function(e,a,t){return e<12?"\u04ae\u04e8":"\u04ae\u0425"},calendar:{sameDay:"[\u04e8\u043d\u04e9\u04e9\u0434\u04e9\u0440] LT",nextDay:"[\u041c\u0430\u0440\u0433\u0430\u0430\u0448] LT",nextWeek:"[\u0418\u0440\u044d\u0445] dddd LT",lastDay:"[\u04e8\u0447\u0438\u0433\u0434\u04e9\u0440] LT",lastWeek:"[\u04e8\u043d\u0433\u04e9\u0440\u0441\u04e9\u043d] dddd LT",sameElse:"L"},relativeTime:{future:"%s \u0434\u0430\u0440\u0430\u0430",past:"%s \u04e9\u043c\u043d\u04e9",s:Rn,ss:Rn,m:Rn,mm:Rn,h:Rn,hh:Rn,d:Rn,dd:Rn,M:Rn,MM:Rn,y:Rn,yy:Rn},dayOfMonthOrdinalParse:/\d{1,2} \u04e9\u0434\u04e9\u0440/,ordinal:function(e,a){switch(a){case"d":case"D":case"DDD":return e+" \u04e9\u0434\u04e9\u0440";default:return e}}});var Cn={1:"\u0967",2:"\u0968",3:"\u0969",4:"\u096a",5:"\u096b",6:"\u096c",7:"\u096d",8:"\u096e",9:"\u096f",0:"\u0966"},In={"\u0967":"1","\u0968":"2","\u0969":"3","\u096a":"4","\u096b":"5","\u096c":"6","\u096d":"7","\u096e":"8","\u096f":"9","\u0966":"0"};function Un(e,a,t,s){var n="";if(a)switch(t){case"s":n="\u0915\u093e\u0939\u0940 \u0938\u0947\u0915\u0902\u0926";break;case"ss":n="%d \u0938\u0947\u0915\u0902\u0926";break;case"m":n="\u090f\u0915 \u092e\u093f\u0928\u093f\u091f";break;case"mm":n="%d \u092e\u093f\u0928\u093f\u091f\u0947";break;case"h":n="\u090f\u0915 \u0924\u093e\u0938";break;case"hh":n="%d \u0924\u093e\u0938";break;case"d":n="\u090f\u0915 \u0926\u093f\u0935\u0938";break;case"dd":n="%d \u0926\u093f\u0935\u0938";break;case"M":n="\u090f\u0915 \u092e\u0939\u093f\u0928\u093e";break;case"MM":n="%d \u092e\u0939\u093f\u0928\u0947";break;case"y":n="\u090f\u0915 \u0935\u0930\u094d\u0937";break;case"yy":n="%d \u0935\u0930\u094d\u0937\u0947";break}else switch(t){case"s":n="\u0915\u093e\u0939\u0940 \u0938\u0947\u0915\u0902\u0926\u093e\u0902";break;case"ss":n="%d \u0938\u0947\u0915\u0902\u0926\u093e\u0902";break;case"m":n="\u090f\u0915\u093e \u092e\u093f\u0928\u093f\u091f\u093e";break;case"mm":n="%d \u092e\u093f\u0928\u093f\u091f\u093e\u0902";break;case"h":n="\u090f\u0915\u093e \u0924\u093e\u0938\u093e";break;case"hh":n="%d \u0924\u093e\u0938\u093e\u0902";break;case"d":n="\u090f\u0915\u093e \u0926\u093f\u0935\u0938\u093e";break;case"dd":n="%d \u0926\u093f\u0935\u0938\u093e\u0902";break;case"M":n="\u090f\u0915\u093e \u092e\u0939\u093f\u0928\u094d\u092f\u093e";break;case"MM":n="%d \u092e\u0939\u093f\u0928\u094d\u092f\u093e\u0902";break;case"y":n="\u090f\u0915\u093e \u0935\u0930\u094d\u0937\u093e";break;case"yy":n="%d \u0935\u0930\u094d\u0937\u093e\u0902";break}return n.replace(/%d/i,e)}M.defineLocale("mr",{months:"\u091c\u093e\u0928\u0947\u0935\u093e\u0930\u0940_\u092b\u0947\u092c\u094d\u0930\u0941\u0935\u093e\u0930\u0940_\u092e\u093e\u0930\u094d\u091a_\u090f\u092a\u094d\u0930\u093f\u0932_\u092e\u0947_\u091c\u0942\u0928_\u091c\u0941\u0932\u0948_\u0911\u0917\u0938\u094d\u091f_\u0938\u092a\u094d\u091f\u0947\u0902\u092c\u0930_\u0911\u0915\u094d\u091f\u094b\u092c\u0930_\u0928\u094b\u0935\u094d\u0939\u0947\u0902\u092c\u0930_\u0921\u093f\u0938\u0947\u0902\u092c\u0930".split("_"),monthsShort:"\u091c\u093e\u0928\u0947._\u092b\u0947\u092c\u094d\u0930\u0941._\u092e\u093e\u0930\u094d\u091a._\u090f\u092a\u094d\u0930\u093f._\u092e\u0947._\u091c\u0942\u0928._\u091c\u0941\u0932\u0948._\u0911\u0917._\u0938\u092a\u094d\u091f\u0947\u0902._\u0911\u0915\u094d\u091f\u094b._\u0928\u094b\u0935\u094d\u0939\u0947\u0902._\u0921\u093f\u0938\u0947\u0902.".split("_"),monthsParseExact:!0,weekdays:"\u0930\u0935\u093f\u0935\u093e\u0930_\u0938\u094b\u092e\u0935\u093e\u0930_\u092e\u0902\u0917\u0933\u0935\u093e\u0930_\u092c\u0941\u0927\u0935\u093e\u0930_\u0917\u0941\u0930\u0942\u0935\u093e\u0930_\u0936\u0941\u0915\u094d\u0930\u0935\u093e\u0930_\u0936\u0928\u093f\u0935\u093e\u0930".split("_"),weekdaysShort:"\u0930\u0935\u093f_\u0938\u094b\u092e_\u092e\u0902\u0917\u0933_\u092c\u0941\u0927_\u0917\u0941\u0930\u0942_\u0936\u0941\u0915\u094d\u0930_\u0936\u0928\u093f".split("_"),weekdaysMin:"\u0930_\u0938\u094b_\u092e\u0902_\u092c\u0941_\u0917\u0941_\u0936\u0941_\u0936".split("_"),longDateFormat:{LT:"A h:mm \u0935\u093e\u091c\u0924\u093e",LTS:"A h:mm:ss \u0935\u093e\u091c\u0924\u093e",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm \u0935\u093e\u091c\u0924\u093e",LLLL:"dddd, D MMMM YYYY, A h:mm \u0935\u093e\u091c\u0924\u093e"},calendar:{sameDay:"[\u0906\u091c] LT",nextDay:"[\u0909\u0926\u094d\u092f\u093e] LT",nextWeek:"dddd, LT",lastDay:"[\u0915\u093e\u0932] LT",lastWeek:"[\u092e\u093e\u0917\u0940\u0932] dddd, LT",sameElse:"L"},relativeTime:{future:"%s\u092e\u0927\u094d\u092f\u0947",past:"%s\u092a\u0942\u0930\u094d\u0935\u0940",s:Un,ss:Un,m:Un,mm:Un,h:Un,hh:Un,d:Un,dd:Un,M:Un,MM:Un,y:Un,yy:Un},preparse:function(e){return e.replace(/[\u0967\u0968\u0969\u096a\u096b\u096c\u096d\u096e\u096f\u0966]/g,function(e){return In[e]})},postformat:function(e){return e.replace(/\d/g,function(e){return Cn[e]})},meridiemParse:/\u092a\u0939\u093e\u091f\u0947|\u0938\u0915\u093e\u0933\u0940|\u0926\u0941\u092a\u093e\u0930\u0940|\u0938\u093e\u092f\u0902\u0915\u093e\u0933\u0940|\u0930\u093e\u0924\u094d\u0930\u0940/,meridiemHour:function(e,a){return 12===e&&(e=0),"\u092a\u0939\u093e\u091f\u0947"===a||"\u0938\u0915\u093e\u0933\u0940"===a?e:"\u0926\u0941\u092a\u093e\u0930\u0940"===a||"\u0938\u093e\u092f\u0902\u0915\u093e\u0933\u0940"===a||"\u0930\u093e\u0924\u094d\u0930\u0940"===a?12<=e?e:e+12:void 0},meridiem:function(e,a,t){return 0<=e&&e<6?"\u092a\u0939\u093e\u091f\u0947":e<12?"\u0938\u0915\u093e\u0933\u0940":e<17?"\u0926\u0941\u092a\u093e\u0930\u0940":e<20?"\u0938\u093e\u092f\u0902\u0915\u093e\u0933\u0940":"\u0930\u093e\u0924\u094d\u0930\u0940"},week:{dow:0,doy:6}}),M.defineLocale("ms-my",{months:"Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember".split("_"),monthsShort:"Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis".split("_"),weekdays:"Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu".split("_"),weekdaysShort:"Ahd_Isn_Sel_Rab_Kha_Jum_Sab".split("_"),weekdaysMin:"Ah_Is_Sl_Rb_Km_Jm_Sb".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [pukul] HH.mm",LLLL:"dddd, D MMMM YYYY [pukul] HH.mm"},meridiemParse:/pagi|tengahari|petang|malam/,meridiemHour:function(e,a){return 12===e&&(e=0),"pagi"===a?e:"tengahari"===a?11<=e?e:e+12:"petang"===a||"malam"===a?e+12:void 0},meridiem:function(e,a,t){return e<11?"pagi":e<15?"tengahari":e<19?"petang":"malam"},calendar:{sameDay:"[Hari ini pukul] LT",nextDay:"[Esok pukul] LT",nextWeek:"dddd [pukul] LT",lastDay:"[Kelmarin pukul] LT",lastWeek:"dddd [lepas pukul] LT",sameElse:"L"},relativeTime:{future:"dalam %s",past:"%s yang lepas",s:"beberapa saat",ss:"%d saat",m:"seminit",mm:"%d minit",h:"sejam",hh:"%d jam",d:"sehari",dd:"%d hari",M:"sebulan",MM:"%d bulan",y:"setahun",yy:"%d tahun"},week:{dow:1,doy:7}}),M.defineLocale("ms",{months:"Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember".split("_"),monthsShort:"Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis".split("_"),weekdays:"Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu".split("_"),weekdaysShort:"Ahd_Isn_Sel_Rab_Kha_Jum_Sab".split("_"),weekdaysMin:"Ah_Is_Sl_Rb_Km_Jm_Sb".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [pukul] HH.mm",LLLL:"dddd, D MMMM YYYY [pukul] HH.mm"},meridiemParse:/pagi|tengahari|petang|malam/,meridiemHour:function(e,a){return 12===e&&(e=0),"pagi"===a?e:"tengahari"===a?11<=e?e:e+12:"petang"===a||"malam"===a?e+12:void 0},meridiem:function(e,a,t){return e<11?"pagi":e<15?"tengahari":e<19?"petang":"malam"},calendar:{sameDay:"[Hari ini pukul] LT",nextDay:"[Esok pukul] LT",nextWeek:"dddd [pukul] LT",lastDay:"[Kelmarin pukul] LT",lastWeek:"dddd [lepas pukul] LT",sameElse:"L"},relativeTime:{future:"dalam %s",past:"%s yang lepas",s:"beberapa saat",ss:"%d saat",m:"seminit",mm:"%d minit",h:"sejam",hh:"%d jam",d:"sehari",dd:"%d hari",M:"sebulan",MM:"%d bulan",y:"setahun",yy:"%d tahun"},week:{dow:1,doy:7}}),M.defineLocale("mt",{months:"Jannar_Frar_Marzu_April_Mejju_\u0120unju_Lulju_Awwissu_Settembru_Ottubru_Novembru_Di\u010bembru".split("_"),monthsShort:"Jan_Fra_Mar_Apr_Mej_\u0120un_Lul_Aww_Set_Ott_Nov_Di\u010b".split("_"),weekdays:"Il-\u0126add_It-Tnejn_It-Tlieta_L-Erbg\u0127a_Il-\u0126amis_Il-\u0120img\u0127a_Is-Sibt".split("_"),weekdaysShort:"\u0126ad_Tne_Tli_Erb_\u0126am_\u0120im_Sib".split("_"),weekdaysMin:"\u0126a_Tn_Tl_Er_\u0126a_\u0120i_Si".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Illum fil-]LT",nextDay:"[G\u0127ada fil-]LT",nextWeek:"dddd [fil-]LT",lastDay:"[Il-biera\u0127 fil-]LT",lastWeek:"dddd [li g\u0127adda] [fil-]LT",sameElse:"L"},relativeTime:{future:"f\u2019 %s",past:"%s ilu",s:"ftit sekondi",ss:"%d sekondi",m:"minuta",mm:"%d minuti",h:"sieg\u0127a",hh:"%d sieg\u0127at",d:"\u0121urnata",dd:"%d \u0121ranet",M:"xahar",MM:"%d xhur",y:"sena",yy:"%d sni"},dayOfMonthOrdinalParse:/\d{1,2}\xba/,ordinal:"%d\xba",week:{dow:1,doy:4}});var Gn={1:"\u1041",2:"\u1042",3:"\u1043",4:"\u1044",5:"\u1045",6:"\u1046",7:"\u1047",8:"\u1048",9:"\u1049",0:"\u1040"},Vn={"\u1041":"1","\u1042":"2","\u1043":"3","\u1044":"4","\u1045":"5","\u1046":"6","\u1047":"7","\u1048":"8","\u1049":"9","\u1040":"0"};M.defineLocale("my",{months:"\u1007\u1014\u103a\u1014\u101d\u102b\u101b\u102e_\u1016\u1031\u1016\u1031\u102c\u103a\u101d\u102b\u101b\u102e_\u1019\u1010\u103a_\u1027\u1015\u103c\u102e_\u1019\u1031_\u1007\u103d\u1014\u103a_\u1007\u1030\u101c\u102d\u102f\u1004\u103a_\u101e\u103c\u1002\u102f\u1010\u103a_\u1005\u1000\u103a\u1010\u1004\u103a\u1018\u102c_\u1021\u1031\u102c\u1000\u103a\u1010\u102d\u102f\u1018\u102c_\u1014\u102d\u102f\u101d\u1004\u103a\u1018\u102c_\u1012\u102e\u1007\u1004\u103a\u1018\u102c".split("_"),monthsShort:"\u1007\u1014\u103a_\u1016\u1031_\u1019\u1010\u103a_\u1015\u103c\u102e_\u1019\u1031_\u1007\u103d\u1014\u103a_\u101c\u102d\u102f\u1004\u103a_\u101e\u103c_\u1005\u1000\u103a_\u1021\u1031\u102c\u1000\u103a_\u1014\u102d\u102f_\u1012\u102e".split("_"),weekdays:"\u1010\u1014\u1004\u103a\u1039\u1002\u1014\u103d\u1031_\u1010\u1014\u1004\u103a\u1039\u101c\u102c_\u1021\u1004\u103a\u1039\u1002\u102b_\u1017\u102f\u1012\u1039\u1013\u101f\u1030\u1038_\u1000\u103c\u102c\u101e\u1015\u1010\u1031\u1038_\u101e\u1031\u102c\u1000\u103c\u102c_\u1005\u1014\u1031".split("_"),weekdaysShort:"\u1014\u103d\u1031_\u101c\u102c_\u1002\u102b_\u101f\u1030\u1038_\u1000\u103c\u102c_\u101e\u1031\u102c_\u1014\u1031".split("_"),weekdaysMin:"\u1014\u103d\u1031_\u101c\u102c_\u1002\u102b_\u101f\u1030\u1038_\u1000\u103c\u102c_\u101e\u1031\u102c_\u1014\u1031".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[\u101a\u1014\u1031.] LT [\u1019\u103e\u102c]",nextDay:"[\u1019\u1014\u1000\u103a\u1016\u103c\u1014\u103a] LT [\u1019\u103e\u102c]",nextWeek:"dddd LT [\u1019\u103e\u102c]",lastDay:"[\u1019\u1014\u1031.\u1000] LT [\u1019\u103e\u102c]",lastWeek:"[\u1015\u103c\u102e\u1038\u1001\u1032\u1037\u101e\u1031\u102c] dddd LT [\u1019\u103e\u102c]",sameElse:"L"},relativeTime:{future:"\u101c\u102c\u1019\u100a\u103a\u1037 %s \u1019\u103e\u102c",past:"\u101c\u103d\u1014\u103a\u1001\u1032\u1037\u101e\u1031\u102c %s \u1000",s:"\u1005\u1000\u1039\u1000\u1014\u103a.\u1021\u1014\u100a\u103a\u1038\u1004\u101a\u103a",ss:"%d \u1005\u1000\u1039\u1000\u1014\u1037\u103a",m:"\u1010\u1005\u103a\u1019\u102d\u1014\u1005\u103a",mm:"%d \u1019\u102d\u1014\u1005\u103a",h:"\u1010\u1005\u103a\u1014\u102c\u101b\u102e",hh:"%d \u1014\u102c\u101b\u102e",d:"\u1010\u1005\u103a\u101b\u1000\u103a",dd:"%d \u101b\u1000\u103a",M:"\u1010\u1005\u103a\u101c",MM:"%d \u101c",y:"\u1010\u1005\u103a\u1014\u103e\u1005\u103a",yy:"%d \u1014\u103e\u1005\u103a"},preparse:function(e){return e.replace(/[\u1041\u1042\u1043\u1044\u1045\u1046\u1047\u1048\u1049\u1040]/g,function(e){return Vn[e]})},postformat:function(e){return e.replace(/\d/g,function(e){return Gn[e]})},week:{dow:1,doy:4}}),M.defineLocale("nb",{months:"januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember".split("_"),monthsShort:"jan._feb._mars_apr._mai_juni_juli_aug._sep._okt._nov._des.".split("_"),monthsParseExact:!0,weekdays:"s\xf8ndag_mandag_tirsdag_onsdag_torsdag_fredag_l\xf8rdag".split("_"),weekdaysShort:"s\xf8._ma._ti._on._to._fr._l\xf8.".split("_"),weekdaysMin:"s\xf8_ma_ti_on_to_fr_l\xf8".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY [kl.] HH:mm",LLLL:"dddd D. MMMM YYYY [kl.] HH:mm"},calendar:{sameDay:"[i dag kl.] LT",nextDay:"[i morgen kl.] LT",nextWeek:"dddd [kl.] LT",lastDay:"[i g\xe5r kl.] LT",lastWeek:"[forrige] dddd [kl.] LT",sameElse:"L"},relativeTime:{future:"om %s",past:"%s siden",s:"noen sekunder",ss:"%d sekunder",m:"ett minutt",mm:"%d minutter",h:"en time",hh:"%d timer",d:"en dag",dd:"%d dager",M:"en m\xe5ned",MM:"%d m\xe5neder",y:"ett \xe5r",yy:"%d \xe5r"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}});var Bn={1:"\u0967",2:"\u0968",3:"\u0969",4:"\u096a",5:"\u096b",6:"\u096c",7:"\u096d",8:"\u096e",9:"\u096f",0:"\u0966"},Kn={"\u0967":"1","\u0968":"2","\u0969":"3","\u096a":"4","\u096b":"5","\u096c":"6","\u096d":"7","\u096e":"8","\u096f":"9","\u0966":"0"};M.defineLocale("ne",{months:"\u091c\u0928\u0935\u0930\u0940_\u092b\u0947\u092c\u094d\u0930\u0941\u0935\u0930\u0940_\u092e\u093e\u0930\u094d\u091a_\u0905\u092a\u094d\u0930\u093f\u0932_\u092e\u0908_\u091c\u0941\u0928_\u091c\u0941\u0932\u093e\u0908_\u0905\u0917\u0937\u094d\u091f_\u0938\u0947\u092a\u094d\u091f\u0947\u092e\u094d\u092c\u0930_\u0905\u0915\u094d\u091f\u094b\u092c\u0930_\u0928\u094b\u092d\u0947\u092e\u094d\u092c\u0930_\u0921\u093f\u0938\u0947\u092e\u094d\u092c\u0930".split("_"),monthsShort:"\u091c\u0928._\u092b\u0947\u092c\u094d\u0930\u0941._\u092e\u093e\u0930\u094d\u091a_\u0905\u092a\u094d\u0930\u093f._\u092e\u0908_\u091c\u0941\u0928_\u091c\u0941\u0932\u093e\u0908._\u0905\u0917._\u0938\u0947\u092a\u094d\u091f._\u0905\u0915\u094d\u091f\u094b._\u0928\u094b\u092d\u0947._\u0921\u093f\u0938\u0947.".split("_"),monthsParseExact:!0,weekdays:"\u0906\u0907\u0924\u092c\u093e\u0930_\u0938\u094b\u092e\u092c\u093e\u0930_\u092e\u0919\u094d\u0917\u0932\u092c\u093e\u0930_\u092c\u0941\u0927\u092c\u093e\u0930_\u092c\u093f\u0939\u093f\u092c\u093e\u0930_\u0936\u0941\u0915\u094d\u0930\u092c\u093e\u0930_\u0936\u0928\u093f\u092c\u093e\u0930".split("_"),weekdaysShort:"\u0906\u0907\u0924._\u0938\u094b\u092e._\u092e\u0919\u094d\u0917\u0932._\u092c\u0941\u0927._\u092c\u093f\u0939\u093f._\u0936\u0941\u0915\u094d\u0930._\u0936\u0928\u093f.".split("_"),weekdaysMin:"\u0906._\u0938\u094b._\u092e\u0902._\u092c\u0941._\u092c\u093f._\u0936\u0941._\u0936.".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"A\u0915\u094b h:mm \u092c\u091c\u0947",LTS:"A\u0915\u094b h:mm:ss \u092c\u091c\u0947",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A\u0915\u094b h:mm \u092c\u091c\u0947",LLLL:"dddd, D MMMM YYYY, A\u0915\u094b h:mm \u092c\u091c\u0947"},preparse:function(e){return e.replace(/[\u0967\u0968\u0969\u096a\u096b\u096c\u096d\u096e\u096f\u0966]/g,function(e){return Kn[e]})},postformat:function(e){return e.replace(/\d/g,function(e){return Bn[e]})},meridiemParse:/\u0930\u093e\u0924\u093f|\u092c\u093f\u0939\u093e\u0928|\u0926\u093f\u0909\u0901\u0938\u094b|\u0938\u093e\u0901\u091d/,meridiemHour:function(e,a){return 12===e&&(e=0),"\u0930\u093e\u0924\u093f"===a?e<4?e:e+12:"\u092c\u093f\u0939\u093e\u0928"===a?e:"\u0926\u093f\u0909\u0901\u0938\u094b"===a?10<=e?e:e+12:"\u0938\u093e\u0901\u091d"===a?e+12:void 0},meridiem:function(e,a,t){return e<3?"\u0930\u093e\u0924\u093f":e<12?"\u092c\u093f\u0939\u093e\u0928":e<16?"\u0926\u093f\u0909\u0901\u0938\u094b":e<20?"\u0938\u093e\u0901\u091d":"\u0930\u093e\u0924\u093f"},calendar:{sameDay:"[\u0906\u091c] LT",nextDay:"[\u092d\u094b\u0932\u093f] LT",nextWeek:"[\u0906\u0909\u0901\u0926\u094b] dddd[,] LT",lastDay:"[\u0939\u093f\u091c\u094b] LT",lastWeek:"[\u0917\u090f\u0915\u094b] dddd[,] LT",sameElse:"L"},relativeTime:{future:"%s\u092e\u093e",past:"%s \u0905\u0917\u093e\u0921\u093f",s:"\u0915\u0947\u0939\u0940 \u0915\u094d\u0937\u0923",ss:"%d \u0938\u0947\u0915\u0947\u0923\u094d\u0921",m:"\u090f\u0915 \u092e\u093f\u0928\u0947\u091f",mm:"%d \u092e\u093f\u0928\u0947\u091f",h:"\u090f\u0915 \u0918\u0923\u094d\u091f\u093e",hh:"%d \u0918\u0923\u094d\u091f\u093e",d:"\u090f\u0915 \u0926\u093f\u0928",dd:"%d \u0926\u093f\u0928",M:"\u090f\u0915 \u092e\u0939\u093f\u0928\u093e",MM:"%d \u092e\u0939\u093f\u0928\u093e",y:"\u090f\u0915 \u092c\u0930\u094d\u0937",yy:"%d \u092c\u0930\u094d\u0937"},week:{dow:0,doy:6}});var qn="jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.".split("_"),Zn="jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec".split("_"),$n=[/^jan/i,/^feb/i,/^maart|mrt.?$/i,/^apr/i,/^mei$/i,/^jun[i.]?$/i,/^jul[i.]?$/i,/^aug/i,/^sep/i,/^okt/i,/^nov/i,/^dec/i],Qn=/^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december|jan\.?|feb\.?|mrt\.?|apr\.?|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i;M.defineLocale("nl-be",{months:"januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december".split("_"),monthsShort:function(e,a){return e?/-MMM-/.test(a)?Zn[e.month()]:qn[e.month()]:qn},monthsRegex:Qn,monthsShortRegex:Qn,monthsStrictRegex:/^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december)/i,monthsShortStrictRegex:/^(jan\.?|feb\.?|mrt\.?|apr\.?|mei|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i,monthsParse:$n,longMonthsParse:$n,shortMonthsParse:$n,weekdays:"zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag".split("_"),weekdaysShort:"zo._ma._di._wo._do._vr._za.".split("_"),weekdaysMin:"zo_ma_di_wo_do_vr_za".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[vandaag om] LT",nextDay:"[morgen om] LT",nextWeek:"dddd [om] LT",lastDay:"[gisteren om] LT",lastWeek:"[afgelopen] dddd [om] LT",sameElse:"L"},relativeTime:{future:"over %s",past:"%s geleden",s:"een paar seconden",ss:"%d seconden",m:"\xe9\xe9n minuut",mm:"%d minuten",h:"\xe9\xe9n uur",hh:"%d uur",d:"\xe9\xe9n dag",dd:"%d dagen",M:"\xe9\xe9n maand",MM:"%d maanden",y:"\xe9\xe9n jaar",yy:"%d jaar"},dayOfMonthOrdinalParse:/\d{1,2}(ste|de)/,ordinal:function(e){return e+(1===e||8===e||20<=e?"ste":"de")},week:{dow:1,doy:4}});var Xn="jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.".split("_"),er="jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec".split("_"),ar=[/^jan/i,/^feb/i,/^maart|mrt.?$/i,/^apr/i,/^mei$/i,/^jun[i.]?$/i,/^jul[i.]?$/i,/^aug/i,/^sep/i,/^okt/i,/^nov/i,/^dec/i],tr=/^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december|jan\.?|feb\.?|mrt\.?|apr\.?|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i;M.defineLocale("nl",{months:"januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december".split("_"),monthsShort:function(e,a){return e?/-MMM-/.test(a)?er[e.month()]:Xn[e.month()]:Xn},monthsRegex:tr,monthsShortRegex:tr,monthsStrictRegex:/^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december)/i,monthsShortStrictRegex:/^(jan\.?|feb\.?|mrt\.?|apr\.?|mei|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i,monthsParse:ar,longMonthsParse:ar,shortMonthsParse:ar,weekdays:"zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag".split("_"),weekdaysShort:"zo._ma._di._wo._do._vr._za.".split("_"),weekdaysMin:"zo_ma_di_wo_do_vr_za".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD-MM-YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[vandaag om] LT",nextDay:"[morgen om] LT",nextWeek:"dddd [om] LT",lastDay:"[gisteren om] LT",lastWeek:"[afgelopen] dddd [om] LT",sameElse:"L"},relativeTime:{future:"over %s",past:"%s geleden",s:"een paar seconden",ss:"%d seconden",m:"\xe9\xe9n minuut",mm:"%d minuten",h:"\xe9\xe9n uur",hh:"%d uur",d:"\xe9\xe9n dag",dd:"%d dagen",M:"\xe9\xe9n maand",MM:"%d maanden",y:"\xe9\xe9n jaar",yy:"%d jaar"},dayOfMonthOrdinalParse:/\d{1,2}(ste|de)/,ordinal:function(e){return e+(1===e||8===e||20<=e?"ste":"de")},week:{dow:1,doy:4}}),M.defineLocale("nn",{months:"januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember".split("_"),monthsShort:"jan._feb._mars_apr._mai_juni_juli_aug._sep._okt._nov._des.".split("_"),monthsParseExact:!0,weekdays:"sundag_m\xe5ndag_tysdag_onsdag_torsdag_fredag_laurdag".split("_"),weekdaysShort:"su._m\xe5._ty._on._to._fr._lau.".split("_"),weekdaysMin:"su_m\xe5_ty_on_to_fr_la".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY [kl.] H:mm",LLLL:"dddd D. MMMM YYYY [kl.] HH:mm"},calendar:{sameDay:"[I dag klokka] LT",nextDay:"[I morgon klokka] LT",nextWeek:"dddd [klokka] LT",lastDay:"[I g\xe5r klokka] LT",lastWeek:"[F\xf8reg\xe5ande] dddd [klokka] LT",sameElse:"L"},relativeTime:{future:"om %s",past:"%s sidan",s:"nokre sekund",ss:"%d sekund",m:"eit minutt",mm:"%d minutt",h:"ein time",hh:"%d timar",d:"ein dag",dd:"%d dagar",M:"ein m\xe5nad",MM:"%d m\xe5nader",y:"eit \xe5r",yy:"%d \xe5r"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}}),M.defineLocale("oc-lnc",{months:{standalone:"geni\xe8r_febri\xe8r_mar\xe7_abril_mai_junh_julhet_agost_setembre_oct\xf2bre_novembre_decembre".split("_"),format:"de geni\xe8r_de febri\xe8r_de mar\xe7_d'abril_de mai_de junh_de julhet_d'agost_de setembre_d'oct\xf2bre_de novembre_de decembre".split("_"),isFormat:/D[oD]?(\s)+MMMM/},monthsShort:"gen._febr._mar\xe7_abr._mai_junh_julh._ago._set._oct._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"dimenge_diluns_dimars_dim\xe8cres_dij\xf2us_divendres_dissabte".split("_"),weekdaysShort:"dg._dl._dm._dc._dj._dv._ds.".split("_"),weekdaysMin:"dg_dl_dm_dc_dj_dv_ds".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM [de] YYYY",ll:"D MMM YYYY",LLL:"D MMMM [de] YYYY [a] H:mm",lll:"D MMM YYYY, H:mm",LLLL:"dddd D MMMM [de] YYYY [a] H:mm",llll:"ddd D MMM YYYY, H:mm"},calendar:{sameDay:"[u\xe8i a] LT",nextDay:"[deman a] LT",nextWeek:"dddd [a] LT",lastDay:"[i\xe8r a] LT",lastWeek:"dddd [passat a] LT",sameElse:"L"},relativeTime:{future:"d'aqu\xed %s",past:"fa %s",s:"unas segondas",ss:"%d segondas",m:"una minuta",mm:"%d minutas",h:"una ora",hh:"%d oras",d:"un jorn",dd:"%d jorns",M:"un mes",MM:"%d meses",y:"un an",yy:"%d ans"},dayOfMonthOrdinalParse:/\d{1,2}(r|n|t|\xe8|a)/,ordinal:function(e,a){return e+("w"!==a&&"W"!==a?1===e?"r":2===e?"n":3===e?"r":4===e?"t":"\xe8":"a")},week:{dow:1,doy:4}});var sr={1:"\u0a67",2:"\u0a68",3:"\u0a69",4:"\u0a6a",5:"\u0a6b",6:"\u0a6c",7:"\u0a6d",8:"\u0a6e",9:"\u0a6f",0:"\u0a66"},nr={"\u0a67":"1","\u0a68":"2","\u0a69":"3","\u0a6a":"4","\u0a6b":"5","\u0a6c":"6","\u0a6d":"7","\u0a6e":"8","\u0a6f":"9","\u0a66":"0"};M.defineLocale("pa-in",{months:"\u0a1c\u0a28\u0a35\u0a30\u0a40_\u0a2b\u0a3c\u0a30\u0a35\u0a30\u0a40_\u0a2e\u0a3e\u0a30\u0a1a_\u0a05\u0a2a\u0a4d\u0a30\u0a48\u0a32_\u0a2e\u0a08_\u0a1c\u0a42\u0a28_\u0a1c\u0a41\u0a32\u0a3e\u0a08_\u0a05\u0a17\u0a38\u0a24_\u0a38\u0a24\u0a70\u0a2c\u0a30_\u0a05\u0a15\u0a24\u0a42\u0a2c\u0a30_\u0a28\u0a35\u0a70\u0a2c\u0a30_\u0a26\u0a38\u0a70\u0a2c\u0a30".split("_"),monthsShort:"\u0a1c\u0a28\u0a35\u0a30\u0a40_\u0a2b\u0a3c\u0a30\u0a35\u0a30\u0a40_\u0a2e\u0a3e\u0a30\u0a1a_\u0a05\u0a2a\u0a4d\u0a30\u0a48\u0a32_\u0a2e\u0a08_\u0a1c\u0a42\u0a28_\u0a1c\u0a41\u0a32\u0a3e\u0a08_\u0a05\u0a17\u0a38\u0a24_\u0a38\u0a24\u0a70\u0a2c\u0a30_\u0a05\u0a15\u0a24\u0a42\u0a2c\u0a30_\u0a28\u0a35\u0a70\u0a2c\u0a30_\u0a26\u0a38\u0a70\u0a2c\u0a30".split("_"),weekdays:"\u0a10\u0a24\u0a35\u0a3e\u0a30_\u0a38\u0a4b\u0a2e\u0a35\u0a3e\u0a30_\u0a2e\u0a70\u0a17\u0a32\u0a35\u0a3e\u0a30_\u0a2c\u0a41\u0a27\u0a35\u0a3e\u0a30_\u0a35\u0a40\u0a30\u0a35\u0a3e\u0a30_\u0a38\u0a3c\u0a41\u0a71\u0a15\u0a30\u0a35\u0a3e\u0a30_\u0a38\u0a3c\u0a28\u0a40\u0a1a\u0a30\u0a35\u0a3e\u0a30".split("_"),weekdaysShort:"\u0a10\u0a24_\u0a38\u0a4b\u0a2e_\u0a2e\u0a70\u0a17\u0a32_\u0a2c\u0a41\u0a27_\u0a35\u0a40\u0a30_\u0a38\u0a3c\u0a41\u0a15\u0a30_\u0a38\u0a3c\u0a28\u0a40".split("_"),weekdaysMin:"\u0a10\u0a24_\u0a38\u0a4b\u0a2e_\u0a2e\u0a70\u0a17\u0a32_\u0a2c\u0a41\u0a27_\u0a35\u0a40\u0a30_\u0a38\u0a3c\u0a41\u0a15\u0a30_\u0a38\u0a3c\u0a28\u0a40".split("_"),longDateFormat:{LT:"A h:mm \u0a35\u0a1c\u0a47",LTS:"A h:mm:ss \u0a35\u0a1c\u0a47",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm \u0a35\u0a1c\u0a47",LLLL:"dddd, D MMMM YYYY, A h:mm \u0a35\u0a1c\u0a47"},calendar:{sameDay:"[\u0a05\u0a1c] LT",nextDay:"[\u0a15\u0a32] LT",nextWeek:"[\u0a05\u0a17\u0a32\u0a3e] dddd, LT",lastDay:"[\u0a15\u0a32] LT",lastWeek:"[\u0a2a\u0a3f\u0a1b\u0a32\u0a47] dddd, LT",sameElse:"L"},relativeTime:{future:"%s \u0a35\u0a3f\u0a71\u0a1a",past:"%s \u0a2a\u0a3f\u0a1b\u0a32\u0a47",s:"\u0a15\u0a41\u0a1d \u0a38\u0a15\u0a3f\u0a70\u0a1f",ss:"%d \u0a38\u0a15\u0a3f\u0a70\u0a1f",m:"\u0a07\u0a15 \u0a2e\u0a3f\u0a70\u0a1f",mm:"%d \u0a2e\u0a3f\u0a70\u0a1f",h:"\u0a07\u0a71\u0a15 \u0a18\u0a70\u0a1f\u0a3e",hh:"%d \u0a18\u0a70\u0a1f\u0a47",d:"\u0a07\u0a71\u0a15 \u0a26\u0a3f\u0a28",dd:"%d \u0a26\u0a3f\u0a28",M:"\u0a07\u0a71\u0a15 \u0a2e\u0a39\u0a40\u0a28\u0a3e",MM:"%d \u0a2e\u0a39\u0a40\u0a28\u0a47",y:"\u0a07\u0a71\u0a15 \u0a38\u0a3e\u0a32",yy:"%d \u0a38\u0a3e\u0a32"},preparse:function(e){return e.replace(/[\u0a67\u0a68\u0a69\u0a6a\u0a6b\u0a6c\u0a6d\u0a6e\u0a6f\u0a66]/g,function(e){return nr[e]})},postformat:function(e){return e.replace(/\d/g,function(e){return sr[e]})},meridiemParse:/\u0a30\u0a3e\u0a24|\u0a38\u0a35\u0a47\u0a30|\u0a26\u0a41\u0a2a\u0a39\u0a3f\u0a30|\u0a38\u0a3c\u0a3e\u0a2e/,meridiemHour:function(e,a){return 12===e&&(e=0),"\u0a30\u0a3e\u0a24"===a?e<4?e:e+12:"\u0a38\u0a35\u0a47\u0a30"===a?e:"\u0a26\u0a41\u0a2a\u0a39\u0a3f\u0a30"===a?10<=e?e:e+12:"\u0a38\u0a3c\u0a3e\u0a2e"===a?e+12:void 0},meridiem:function(e,a,t){return e<4?"\u0a30\u0a3e\u0a24":e<10?"\u0a38\u0a35\u0a47\u0a30":e<17?"\u0a26\u0a41\u0a2a\u0a39\u0a3f\u0a30":e<20?"\u0a38\u0a3c\u0a3e\u0a2e":"\u0a30\u0a3e\u0a24"},week:{dow:0,doy:6}});var rr="stycze\u0144_luty_marzec_kwiecie\u0144_maj_czerwiec_lipiec_sierpie\u0144_wrzesie\u0144_pa\u017adziernik_listopad_grudzie\u0144".split("_"),dr="stycznia_lutego_marca_kwietnia_maja_czerwca_lipca_sierpnia_wrze\u015bnia_pa\u017adziernika_listopada_grudnia".split("_");function _r(e){return e%10<5&&1<e%10&&~~(e/10)%10!=1}function ir(e,a,t){var s=e+" ";switch(t){case"ss":return s+(_r(e)?"sekundy":"sekund");case"m":return a?"minuta":"minut\u0119";case"mm":return s+(_r(e)?"minuty":"minut");case"h":return a?"godzina":"godzin\u0119";case"hh":return s+(_r(e)?"godziny":"godzin");case"MM":return s+(_r(e)?"miesi\u0105ce":"miesi\u0119cy");case"yy":return s+(_r(e)?"lata":"lat")}}function or(e,a,t){return e+(20<=e%100||100<=e&&e%100==0?" de ":" ")+{ss:"secunde",mm:"minute",hh:"ore",dd:"zile",MM:"luni",yy:"ani"}[t]}function mr(e,a,t){var s,n;return"m"===t?a?"\u043c\u0438\u043d\u0443\u0442\u0430":"\u043c\u0438\u043d\u0443\u0442\u0443":e+" "+(s=+e,n={ss:a?"\u0441\u0435\u043a\u0443\u043d\u0434\u0430_\u0441\u0435\u043a\u0443\u043d\u0434\u044b_\u0441\u0435\u043a\u0443\u043d\u0434":"\u0441\u0435\u043a\u0443\u043d\u0434\u0443_\u0441\u0435\u043a\u0443\u043d\u0434\u044b_\u0441\u0435\u043a\u0443\u043d\u0434",mm:a?"\u043c\u0438\u043d\u0443\u0442\u0430_\u043c\u0438\u043d\u0443\u0442\u044b_\u043c\u0438\u043d\u0443\u0442":"\u043c\u0438\u043d\u0443\u0442\u0443_\u043c\u0438\u043d\u0443\u0442\u044b_\u043c\u0438\u043d\u0443\u0442",hh:"\u0447\u0430\u0441_\u0447\u0430\u0441\u0430_\u0447\u0430\u0441\u043e\u0432",dd:"\u0434\u0435\u043d\u044c_\u0434\u043d\u044f_\u0434\u043d\u0435\u0439",MM:"\u043c\u0435\u0441\u044f\u0446_\u043c\u0435\u0441\u044f\u0446\u0430_\u043c\u0435\u0441\u044f\u0446\u0435\u0432",yy:"\u0433\u043e\u0434_\u0433\u043e\u0434\u0430_\u043b\u0435\u0442"}[t].split("_"),s%10==1&&s%100!=11?n[0]:2<=s%10&&s%10<=4&&(s%100<10||20<=s%100)?n[1]:n[2])}M.defineLocale("pl",{months:function(e,a){return e?""===a?"("+dr[e.month()]+"|"+rr[e.month()]+")":/D MMMM/.test(a)?dr[e.month()]:rr[e.month()]:rr},monthsShort:"sty_lut_mar_kwi_maj_cze_lip_sie_wrz_pa\u017a_lis_gru".split("_"),weekdays:"niedziela_poniedzia\u0142ek_wtorek_\u015broda_czwartek_pi\u0105tek_sobota".split("_"),weekdaysShort:"ndz_pon_wt_\u015br_czw_pt_sob".split("_"),weekdaysMin:"Nd_Pn_Wt_\u015ar_Cz_Pt_So".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Dzi\u015b o] LT",nextDay:"[Jutro o] LT",nextWeek:function(){switch(this.day()){case 0:return"[W niedziel\u0119 o] LT";case 2:return"[We wtorek o] LT";case 3:return"[W \u015brod\u0119 o] LT";case 6:return"[W sobot\u0119 o] LT";default:return"[W] dddd [o] LT"}},lastDay:"[Wczoraj o] LT",lastWeek:function(){switch(this.day()){case 0:return"[W zesz\u0142\u0105 niedziel\u0119 o] LT";case 3:return"[W zesz\u0142\u0105 \u015brod\u0119 o] LT";case 6:return"[W zesz\u0142\u0105 sobot\u0119 o] LT";default:return"[W zesz\u0142y] dddd [o] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"%s temu",s:"kilka sekund",ss:ir,m:ir,mm:ir,h:ir,hh:ir,d:"1 dzie\u0144",dd:"%d dni",M:"miesi\u0105c",MM:ir,y:"rok",yy:ir},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}}),M.defineLocale("pt-br",{months:"janeiro_fevereiro_mar\xe7o_abril_maio_junho_julho_agosto_setembro_outubro_novembro_dezembro".split("_"),monthsShort:"jan_fev_mar_abr_mai_jun_jul_ago_set_out_nov_dez".split("_"),weekdays:"domingo_segunda-feira_ter\xe7a-feira_quarta-feira_quinta-feira_sexta-feira_s\xe1bado".split("_"),weekdaysShort:"dom_seg_ter_qua_qui_sex_s\xe1b".split("_"),weekdaysMin:"do_2\xaa_3\xaa_4\xaa_5\xaa_6\xaa_s\xe1".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY [\xe0s] HH:mm",LLLL:"dddd, D [de] MMMM [de] YYYY [\xe0s] HH:mm"},calendar:{sameDay:"[Hoje \xe0s] LT",nextDay:"[Amanh\xe3 \xe0s] LT",nextWeek:"dddd [\xe0s] LT",lastDay:"[Ontem \xe0s] LT",lastWeek:function(){return 0===this.day()||6===this.day()?"[\xdaltimo] dddd [\xe0s] LT":"[\xdaltima] dddd [\xe0s] LT"},sameElse:"L"},relativeTime:{future:"em %s",past:"h\xe1 %s",s:"poucos segundos",ss:"%d segundos",m:"um minuto",mm:"%d minutos",h:"uma hora",hh:"%d horas",d:"um dia",dd:"%d dias",M:"um m\xeas",MM:"%d meses",y:"um ano",yy:"%d anos"},dayOfMonthOrdinalParse:/\d{1,2}\xba/,ordinal:"%d\xba"}),M.defineLocale("pt",{months:"janeiro_fevereiro_mar\xe7o_abril_maio_junho_julho_agosto_setembro_outubro_novembro_dezembro".split("_"),monthsShort:"jan_fev_mar_abr_mai_jun_jul_ago_set_out_nov_dez".split("_"),weekdays:"Domingo_Segunda-feira_Ter\xe7a-feira_Quarta-feira_Quinta-feira_Sexta-feira_S\xe1bado".split("_"),weekdaysShort:"Dom_Seg_Ter_Qua_Qui_Sex_S\xe1b".split("_"),weekdaysMin:"Do_2\xaa_3\xaa_4\xaa_5\xaa_6\xaa_S\xe1".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY HH:mm",LLLL:"dddd, D [de] MMMM [de] YYYY HH:mm"},calendar:{sameDay:"[Hoje \xe0s] LT",nextDay:"[Amanh\xe3 \xe0s] LT",nextWeek:"dddd [\xe0s] LT",lastDay:"[Ontem \xe0s] LT",lastWeek:function(){return 0===this.day()||6===this.day()?"[\xdaltimo] dddd [\xe0s] LT":"[\xdaltima] dddd [\xe0s] LT"},sameElse:"L"},relativeTime:{future:"em %s",past:"h\xe1 %s",s:"segundos",ss:"%d segundos",m:"um minuto",mm:"%d minutos",h:"uma hora",hh:"%d horas",d:"um dia",dd:"%d dias",M:"um m\xeas",MM:"%d meses",y:"um ano",yy:"%d anos"},dayOfMonthOrdinalParse:/\d{1,2}\xba/,ordinal:"%d\xba",week:{dow:1,doy:4}}),M.defineLocale("ro",{months:"ianuarie_februarie_martie_aprilie_mai_iunie_iulie_august_septembrie_octombrie_noiembrie_decembrie".split("_"),monthsShort:"ian._feb._mart._apr._mai_iun._iul._aug._sept._oct._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"duminic\u0103_luni_mar\u021bi_miercuri_joi_vineri_s\xe2mb\u0103t\u0103".split("_"),weekdaysShort:"Dum_Lun_Mar_Mie_Joi_Vin_S\xe2m".split("_"),weekdaysMin:"Du_Lu_Ma_Mi_Jo_Vi_S\xe2".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY H:mm",LLLL:"dddd, D MMMM YYYY H:mm"},calendar:{sameDay:"[azi la] LT",nextDay:"[m\xe2ine la] LT",nextWeek:"dddd [la] LT",lastDay:"[ieri la] LT",lastWeek:"[fosta] dddd [la] LT",sameElse:"L"},relativeTime:{future:"peste %s",past:"%s \xeen urm\u0103",s:"c\xe2teva secunde",ss:or,m:"un minut",mm:or,h:"o or\u0103",hh:or,d:"o zi",dd:or,M:"o lun\u0103",MM:or,y:"un an",yy:or},week:{dow:1,doy:7}});var ur=[/^\u044f\u043d\u0432/i,/^\u0444\u0435\u0432/i,/^\u043c\u0430\u0440/i,/^\u0430\u043f\u0440/i,/^\u043c\u0430[\u0439\u044f]/i,/^\u0438\u044e\u043d/i,/^\u0438\u044e\u043b/i,/^\u0430\u0432\u0433/i,/^\u0441\u0435\u043d/i,/^\u043e\u043a\u0442/i,/^\u043d\u043e\u044f/i,/^\u0434\u0435\u043a/i];M.defineLocale("ru",{months:{format:"\u044f\u043d\u0432\u0430\u0440\u044f_\u0444\u0435\u0432\u0440\u0430\u043b\u044f_\u043c\u0430\u0440\u0442\u0430_\u0430\u043f\u0440\u0435\u043b\u044f_\u043c\u0430\u044f_\u0438\u044e\u043d\u044f_\u0438\u044e\u043b\u044f_\u0430\u0432\u0433\u0443\u0441\u0442\u0430_\u0441\u0435\u043d\u0442\u044f\u0431\u0440\u044f_\u043e\u043a\u0442\u044f\u0431\u0440\u044f_\u043d\u043e\u044f\u0431\u0440\u044f_\u0434\u0435\u043a\u0430\u0431\u0440\u044f".split("_"),standalone:"\u044f\u043d\u0432\u0430\u0440\u044c_\u0444\u0435\u0432\u0440\u0430\u043b\u044c_\u043c\u0430\u0440\u0442_\u0430\u043f\u0440\u0435\u043b\u044c_\u043c\u0430\u0439_\u0438\u044e\u043d\u044c_\u0438\u044e\u043b\u044c_\u0430\u0432\u0433\u0443\u0441\u0442_\u0441\u0435\u043d\u0442\u044f\u0431\u0440\u044c_\u043e\u043a\u0442\u044f\u0431\u0440\u044c_\u043d\u043e\u044f\u0431\u0440\u044c_\u0434\u0435\u043a\u0430\u0431\u0440\u044c".split("_")},monthsShort:{format:"\u044f\u043d\u0432._\u0444\u0435\u0432\u0440._\u043c\u0430\u0440._\u0430\u043f\u0440._\u043c\u0430\u044f_\u0438\u044e\u043d\u044f_\u0438\u044e\u043b\u044f_\u0430\u0432\u0433._\u0441\u0435\u043d\u0442._\u043e\u043a\u0442._\u043d\u043e\u044f\u0431._\u0434\u0435\u043a.".split("_"),standalone:"\u044f\u043d\u0432._\u0444\u0435\u0432\u0440._\u043c\u0430\u0440\u0442_\u0430\u043f\u0440._\u043c\u0430\u0439_\u0438\u044e\u043d\u044c_\u0438\u044e\u043b\u044c_\u0430\u0432\u0433._\u0441\u0435\u043d\u0442._\u043e\u043a\u0442._\u043d\u043e\u044f\u0431._\u0434\u0435\u043a.".split("_")},weekdays:{standalone:"\u0432\u043e\u0441\u043a\u0440\u0435\u0441\u0435\u043d\u044c\u0435_\u043f\u043e\u043d\u0435\u0434\u0435\u043b\u044c\u043d\u0438\u043a_\u0432\u0442\u043e\u0440\u043d\u0438\u043a_\u0441\u0440\u0435\u0434\u0430_\u0447\u0435\u0442\u0432\u0435\u0440\u0433_\u043f\u044f\u0442\u043d\u0438\u0446\u0430_\u0441\u0443\u0431\u0431\u043e\u0442\u0430".split("_"),format:"\u0432\u043e\u0441\u043a\u0440\u0435\u0441\u0435\u043d\u044c\u0435_\u043f\u043e\u043d\u0435\u0434\u0435\u043b\u044c\u043d\u0438\u043a_\u0432\u0442\u043e\u0440\u043d\u0438\u043a_\u0441\u0440\u0435\u0434\u0443_\u0447\u0435\u0442\u0432\u0435\u0440\u0433_\u043f\u044f\u0442\u043d\u0438\u0446\u0443_\u0441\u0443\u0431\u0431\u043e\u0442\u0443".split("_"),isFormat:/\[ ?[\u0412\u0432] ?(?:\u043f\u0440\u043e\u0448\u043b\u0443\u044e|\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0443\u044e|\u044d\u0442\u0443)? ?] ?dddd/},weekdaysShort:"\u0432\u0441_\u043f\u043d_\u0432\u0442_\u0441\u0440_\u0447\u0442_\u043f\u0442_\u0441\u0431".split("_"),weekdaysMin:"\u0432\u0441_\u043f\u043d_\u0432\u0442_\u0441\u0440_\u0447\u0442_\u043f\u0442_\u0441\u0431".split("_"),monthsParse:ur,longMonthsParse:ur,shortMonthsParse:ur,monthsRegex:/^(\u044f\u043d\u0432\u0430\u0440[\u044c\u044f]|\u044f\u043d\u0432\.?|\u0444\u0435\u0432\u0440\u0430\u043b[\u044c\u044f]|\u0444\u0435\u0432\u0440?\.?|\u043c\u0430\u0440\u0442\u0430?|\u043c\u0430\u0440\.?|\u0430\u043f\u0440\u0435\u043b[\u044c\u044f]|\u0430\u043f\u0440\.?|\u043c\u0430[\u0439\u044f]|\u0438\u044e\u043d[\u044c\u044f]|\u0438\u044e\u043d\.?|\u0438\u044e\u043b[\u044c\u044f]|\u0438\u044e\u043b\.?|\u0430\u0432\u0433\u0443\u0441\u0442\u0430?|\u0430\u0432\u0433\.?|\u0441\u0435\u043d\u0442\u044f\u0431\u0440[\u044c\u044f]|\u0441\u0435\u043d\u0442?\.?|\u043e\u043a\u0442\u044f\u0431\u0440[\u044c\u044f]|\u043e\u043a\u0442\.?|\u043d\u043e\u044f\u0431\u0440[\u044c\u044f]|\u043d\u043e\u044f\u0431?\.?|\u0434\u0435\u043a\u0430\u0431\u0440[\u044c\u044f]|\u0434\u0435\u043a\.?)/i,monthsShortRegex:/^(\u044f\u043d\u0432\u0430\u0440[\u044c\u044f]|\u044f\u043d\u0432\.?|\u0444\u0435\u0432\u0440\u0430\u043b[\u044c\u044f]|\u0444\u0435\u0432\u0440?\.?|\u043c\u0430\u0440\u0442\u0430?|\u043c\u0430\u0440\.?|\u0430\u043f\u0440\u0435\u043b[\u044c\u044f]|\u0430\u043f\u0440\.?|\u043c\u0430[\u0439\u044f]|\u0438\u044e\u043d[\u044c\u044f]|\u0438\u044e\u043d\.?|\u0438\u044e\u043b[\u044c\u044f]|\u0438\u044e\u043b\.?|\u0430\u0432\u0433\u0443\u0441\u0442\u0430?|\u0430\u0432\u0433\.?|\u0441\u0435\u043d\u0442\u044f\u0431\u0440[\u044c\u044f]|\u0441\u0435\u043d\u0442?\.?|\u043e\u043a\u0442\u044f\u0431\u0440[\u044c\u044f]|\u043e\u043a\u0442\.?|\u043d\u043e\u044f\u0431\u0440[\u044c\u044f]|\u043d\u043e\u044f\u0431?\.?|\u0434\u0435\u043a\u0430\u0431\u0440[\u044c\u044f]|\u0434\u0435\u043a\.?)/i,monthsStrictRegex:/^(\u044f\u043d\u0432\u0430\u0440[\u044f\u044c]|\u0444\u0435\u0432\u0440\u0430\u043b[\u044f\u044c]|\u043c\u0430\u0440\u0442\u0430?|\u0430\u043f\u0440\u0435\u043b[\u044f\u044c]|\u043c\u0430[\u044f\u0439]|\u0438\u044e\u043d[\u044f\u044c]|\u0438\u044e\u043b[\u044f\u044c]|\u0430\u0432\u0433\u0443\u0441\u0442\u0430?|\u0441\u0435\u043d\u0442\u044f\u0431\u0440[\u044f\u044c]|\u043e\u043a\u0442\u044f\u0431\u0440[\u044f\u044c]|\u043d\u043e\u044f\u0431\u0440[\u044f\u044c]|\u0434\u0435\u043a\u0430\u0431\u0440[\u044f\u044c])/i,monthsShortStrictRegex:/^(\u044f\u043d\u0432\.|\u0444\u0435\u0432\u0440?\.|\u043c\u0430\u0440[\u0442.]|\u0430\u043f\u0440\.|\u043c\u0430[\u044f\u0439]|\u0438\u044e\u043d[\u044c\u044f.]|\u0438\u044e\u043b[\u044c\u044f.]|\u0430\u0432\u0433\.|\u0441\u0435\u043d\u0442?\.|\u043e\u043a\u0442\.|\u043d\u043e\u044f\u0431?\.|\u0434\u0435\u043a\.)/i,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY \u0433.",LLL:"D MMMM YYYY \u0433., H:mm",LLLL:"dddd, D MMMM YYYY \u0433., H:mm"},calendar:{sameDay:"[\u0421\u0435\u0433\u043e\u0434\u043d\u044f, \u0432] LT",nextDay:"[\u0417\u0430\u0432\u0442\u0440\u0430, \u0432] LT",lastDay:"[\u0412\u0447\u0435\u0440\u0430, \u0432] LT",nextWeek:function(e){if(e.week()===this.week())return 2===this.day()?"[\u0412\u043e] dddd, [\u0432] LT":"[\u0412] dddd, [\u0432] LT";switch(this.day()){case 0:return"[\u0412 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435] dddd, [\u0432] LT";case 1:case 2:case 4:return"[\u0412 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439] dddd, [\u0432] LT";case 3:case 5:case 6:return"[\u0412 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0443\u044e] dddd, [\u0432] LT"}},lastWeek:function(e){if(e.week()===this.week())return 2===this.day()?"[\u0412\u043e] dddd, [\u0432] LT":"[\u0412] dddd, [\u0432] LT";switch(this.day()){case 0:return"[\u0412 \u043f\u0440\u043e\u0448\u043b\u043e\u0435] dddd, [\u0432] LT";case 1:case 2:case 4:return"[\u0412 \u043f\u0440\u043e\u0448\u043b\u044b\u0439] dddd, [\u0432] LT";case 3:case 5:case 6:return"[\u0412 \u043f\u0440\u043e\u0448\u043b\u0443\u044e] dddd, [\u0432] LT"}},sameElse:"L"},relativeTime:{future:"\u0447\u0435\u0440\u0435\u0437 %s",past:"%s \u043d\u0430\u0437\u0430\u0434",s:"\u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u0435\u043a\u0443\u043d\u0434",ss:mr,m:mr,mm:mr,h:"\u0447\u0430\u0441",hh:mr,d:"\u0434\u0435\u043d\u044c",dd:mr,M:"\u043c\u0435\u0441\u044f\u0446",MM:mr,y:"\u0433\u043e\u0434",yy:mr},meridiemParse:/\u043d\u043e\u0447\u0438|\u0443\u0442\u0440\u0430|\u0434\u043d\u044f|\u0432\u0435\u0447\u0435\u0440\u0430/i,isPM:function(e){return/^(\u0434\u043d\u044f|\u0432\u0435\u0447\u0435\u0440\u0430)$/.test(e)},meridiem:function(e,a,t){return e<4?"\u043d\u043e\u0447\u0438":e<12?"\u0443\u0442\u0440\u0430":e<17?"\u0434\u043d\u044f":"\u0432\u0435\u0447\u0435\u0440\u0430"},dayOfMonthOrdinalParse:/\d{1,2}-(\u0439|\u0433\u043e|\u044f)/,ordinal:function(e,a){switch(a){case"M":case"d":case"DDD":return e+"-\u0439";case"D":return e+"-\u0433\u043e";case"w":case"W":return e+"-\u044f";default:return e}},week:{dow:1,doy:4}});var lr=["\u062c\u0646\u0648\u0631\u064a","\u0641\u064a\u0628\u0631\u0648\u0631\u064a","\u0645\u0627\u0631\u0686","\u0627\u067e\u0631\u064a\u0644","\u0645\u0626\u064a","\u062c\u0648\u0646","\u062c\u0648\u0644\u0627\u0621\u0650","\u0622\u06af\u0633\u067d","\u0633\u064a\u067e\u067d\u0645\u0628\u0631","\u0622\u06aa\u067d\u0648\u0628\u0631","\u0646\u0648\u0645\u0628\u0631","\u068a\u0633\u0645\u0628\u0631"],Mr=["\u0622\u0686\u0631","\u0633\u0648\u0645\u0631","\u0627\u06b1\u0627\u0631\u0648","\u0627\u0631\u0628\u0639","\u062e\u0645\u064a\u0633","\u062c\u0645\u0639","\u0687\u0646\u0687\u0631"];M.defineLocale("sd",{months:lr,monthsShort:lr,weekdays:Mr,weekdaysShort:Mr,weekdaysMin:Mr,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd\u060c D MMMM YYYY HH:mm"},meridiemParse:/\u0635\u0628\u062d|\u0634\u0627\u0645/,isPM:function(e){return"\u0634\u0627\u0645"===e},meridiem:function(e,a,t){return e<12?"\u0635\u0628\u062d":"\u0634\u0627\u0645"},calendar:{sameDay:"[\u0627\u0684] LT",nextDay:"[\u0633\u0680\u0627\u06bb\u064a] LT",nextWeek:"dddd [\u0627\u06b3\u064a\u0646 \u0647\u0641\u062a\u064a \u062a\u064a] LT",lastDay:"[\u06aa\u0627\u0644\u0647\u0647] LT",lastWeek:"[\u06af\u0632\u0631\u064a\u0644 \u0647\u0641\u062a\u064a] dddd [\u062a\u064a] LT",sameElse:"L"},relativeTime:{future:"%s \u067e\u0648\u0621",past:"%s \u0627\u06b3",s:"\u0686\u0646\u062f \u0633\u064a\u06aa\u0646\u068a",ss:"%d \u0633\u064a\u06aa\u0646\u068a",m:"\u0647\u06aa \u0645\u0646\u067d",mm:"%d \u0645\u0646\u067d",h:"\u0647\u06aa \u06aa\u0644\u0627\u06aa",hh:"%d \u06aa\u0644\u0627\u06aa",d:"\u0647\u06aa \u068f\u064a\u0646\u0647\u0646",dd:"%d \u068f\u064a\u0646\u0647\u0646",M:"\u0647\u06aa \u0645\u0647\u064a\u0646\u0648",MM:"%d \u0645\u0647\u064a\u0646\u0627",y:"\u0647\u06aa \u0633\u0627\u0644",yy:"%d \u0633\u0627\u0644"},preparse:function(e){return e.replace(/\u060c/g,",")},postformat:function(e){return e.replace(/,/g,"\u060c")},week:{dow:1,doy:4}}),M.defineLocale("se",{months:"o\u0111\u0111ajagem\xe1nnu_guovvam\xe1nnu_njuk\u010dam\xe1nnu_cuo\u014bom\xe1nnu_miessem\xe1nnu_geassem\xe1nnu_suoidnem\xe1nnu_borgem\xe1nnu_\u010dak\u010dam\xe1nnu_golggotm\xe1nnu_sk\xe1bmam\xe1nnu_juovlam\xe1nnu".split("_"),monthsShort:"o\u0111\u0111j_guov_njuk_cuo_mies_geas_suoi_borg_\u010dak\u010d_golg_sk\xe1b_juov".split("_"),weekdays:"sotnabeaivi_vuoss\xe1rga_ma\u014b\u014beb\xe1rga_gaskavahkku_duorastat_bearjadat_l\xe1vvardat".split("_"),weekdaysShort:"sotn_vuos_ma\u014b_gask_duor_bear_l\xe1v".split("_"),weekdaysMin:"s_v_m_g_d_b_L".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"MMMM D. [b.] YYYY",LLL:"MMMM D. [b.] YYYY [ti.] HH:mm",LLLL:"dddd, MMMM D. [b.] YYYY [ti.] HH:mm"},calendar:{sameDay:"[otne ti] LT",nextDay:"[ihttin ti] LT",nextWeek:"dddd [ti] LT",lastDay:"[ikte ti] LT",lastWeek:"[ovddit] dddd [ti] LT",sameElse:"L"},relativeTime:{future:"%s gea\u017ees",past:"ma\u014bit %s",s:"moadde sekunddat",ss:"%d sekunddat",m:"okta minuhta",mm:"%d minuhtat",h:"okta diimmu",hh:"%d diimmut",d:"okta beaivi",dd:"%d beaivvit",M:"okta m\xe1nnu",MM:"%d m\xe1nut",y:"okta jahki",yy:"%d jagit"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}}),M.defineLocale("si",{months:"\u0da2\u0db1\u0dc0\u0dcf\u0dbb\u0dd2_\u0db4\u0dd9\u0db6\u0dbb\u0dc0\u0dcf\u0dbb\u0dd2_\u0db8\u0dcf\u0dbb\u0dca\u0dad\u0dd4_\u0d85\u0db4\u0dca\u200d\u0dbb\u0dda\u0dbd\u0dca_\u0db8\u0dd0\u0dba\u0dd2_\u0da2\u0dd6\u0db1\u0dd2_\u0da2\u0dd6\u0dbd\u0dd2_\u0d85\u0d9c\u0ddd\u0dc3\u0dca\u0dad\u0dd4_\u0dc3\u0dd0\u0db4\u0dca\u0dad\u0dd0\u0db8\u0dca\u0db6\u0dbb\u0dca_\u0d94\u0d9a\u0dca\u0dad\u0ddd\u0db6\u0dbb\u0dca_\u0db1\u0ddc\u0dc0\u0dd0\u0db8\u0dca\u0db6\u0dbb\u0dca_\u0daf\u0dd9\u0dc3\u0dd0\u0db8\u0dca\u0db6\u0dbb\u0dca".split("_"),monthsShort:"\u0da2\u0db1_\u0db4\u0dd9\u0db6_\u0db8\u0dcf\u0dbb\u0dca_\u0d85\u0db4\u0dca_\u0db8\u0dd0\u0dba\u0dd2_\u0da2\u0dd6\u0db1\u0dd2_\u0da2\u0dd6\u0dbd\u0dd2_\u0d85\u0d9c\u0ddd_\u0dc3\u0dd0\u0db4\u0dca_\u0d94\u0d9a\u0dca_\u0db1\u0ddc\u0dc0\u0dd0_\u0daf\u0dd9\u0dc3\u0dd0".split("_"),weekdays:"\u0d89\u0dbb\u0dd2\u0daf\u0dcf_\u0dc3\u0db3\u0dd4\u0daf\u0dcf_\u0d85\u0d9f\u0dc4\u0dbb\u0dd4\u0dc0\u0dcf\u0daf\u0dcf_\u0db6\u0daf\u0dcf\u0daf\u0dcf_\u0db6\u0dca\u200d\u0dbb\u0dc4\u0dc3\u0dca\u0db4\u0dad\u0dd2\u0db1\u0dca\u0daf\u0dcf_\u0dc3\u0dd2\u0d9a\u0dd4\u0dbb\u0dcf\u0daf\u0dcf_\u0dc3\u0dd9\u0db1\u0dc3\u0dd4\u0dbb\u0dcf\u0daf\u0dcf".split("_"),weekdaysShort:"\u0d89\u0dbb\u0dd2_\u0dc3\u0db3\u0dd4_\u0d85\u0d9f_\u0db6\u0daf\u0dcf_\u0db6\u0dca\u200d\u0dbb\u0dc4_\u0dc3\u0dd2\u0d9a\u0dd4_\u0dc3\u0dd9\u0db1".split("_"),weekdaysMin:"\u0d89_\u0dc3_\u0d85_\u0db6_\u0db6\u0dca\u200d\u0dbb_\u0dc3\u0dd2_\u0dc3\u0dd9".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"a h:mm",LTS:"a h:mm:ss",L:"YYYY/MM/DD",LL:"YYYY MMMM D",LLL:"YYYY MMMM D, a h:mm",LLLL:"YYYY MMMM D [\u0dc0\u0dd0\u0db1\u0dd2] dddd, a h:mm:ss"},calendar:{sameDay:"[\u0d85\u0daf] LT[\u0da7]",nextDay:"[\u0dc4\u0dd9\u0da7] LT[\u0da7]",nextWeek:"dddd LT[\u0da7]",lastDay:"[\u0d8a\u0dba\u0dda] LT[\u0da7]",lastWeek:"[\u0db4\u0dc3\u0dd4\u0d9c\u0dd2\u0dba] dddd LT[\u0da7]",sameElse:"L"},relativeTime:{future:"%s\u0d9a\u0dd2\u0db1\u0dca",past:"%s\u0d9a\u0da7 \u0db4\u0dd9\u0dbb",s:"\u0dad\u0dad\u0dca\u0db4\u0dbb \u0d9a\u0dd2\u0dc4\u0dd2\u0db4\u0dba",ss:"\u0dad\u0dad\u0dca\u0db4\u0dbb %d",m:"\u0db8\u0dd2\u0db1\u0dd2\u0dad\u0dca\u0dad\u0dd4\u0dc0",mm:"\u0db8\u0dd2\u0db1\u0dd2\u0dad\u0dca\u0dad\u0dd4 %d",h:"\u0db4\u0dd0\u0dba",hh:"\u0db4\u0dd0\u0dba %d",d:"\u0daf\u0dd2\u0db1\u0dba",dd:"\u0daf\u0dd2\u0db1 %d",M:"\u0db8\u0dcf\u0dc3\u0dba",MM:"\u0db8\u0dcf\u0dc3 %d",y:"\u0dc0\u0dc3\u0dbb",yy:"\u0dc0\u0dc3\u0dbb %d"},dayOfMonthOrdinalParse:/\d{1,2} \u0dc0\u0dd0\u0db1\u0dd2/,ordinal:function(e){return e+" \u0dc0\u0dd0\u0db1\u0dd2"},meridiemParse:/\u0db4\u0dd9\u0dbb \u0dc0\u0dbb\u0dd4|\u0db4\u0dc3\u0dca \u0dc0\u0dbb\u0dd4|\u0db4\u0dd9.\u0dc0|\u0db4.\u0dc0./,isPM:function(e){return"\u0db4.\u0dc0."===e||"\u0db4\u0dc3\u0dca \u0dc0\u0dbb\u0dd4"===e},meridiem:function(e,a,t){return 11<e?t?"\u0db4.\u0dc0.":"\u0db4\u0dc3\u0dca \u0dc0\u0dbb\u0dd4":t?"\u0db4\u0dd9.\u0dc0.":"\u0db4\u0dd9\u0dbb \u0dc0\u0dbb\u0dd4"}});var hr="janu\xe1r_febru\xe1r_marec_apr\xedl_m\xe1j_j\xfan_j\xfal_august_september_okt\xf3ber_november_december".split("_"),cr="jan_feb_mar_apr_m\xe1j_j\xfan_j\xfal_aug_sep_okt_nov_dec".split("_");function Lr(e){return 1<e&&e<5}function Yr(e,a,t,s){var n=e+" ";switch(t){case"s":return a||s?"p\xe1r sek\xfand":"p\xe1r sekundami";case"ss":return a||s?n+(Lr(e)?"sekundy":"sek\xfand"):n+"sekundami";case"m":return a?"min\xfata":s?"min\xfatu":"min\xfatou";case"mm":return a||s?n+(Lr(e)?"min\xfaty":"min\xfat"):n+"min\xfatami";case"h":return a?"hodina":s?"hodinu":"hodinou";case"hh":return a||s?n+(Lr(e)?"hodiny":"hod\xedn"):n+"hodinami";case"d":return a||s?"de\u0148":"d\u0148om";case"dd":return a||s?n+(Lr(e)?"dni":"dn\xed"):n+"d\u0148ami";case"M":return a||s?"mesiac":"mesiacom";case"MM":return a||s?n+(Lr(e)?"mesiace":"mesiacov"):n+"mesiacmi";case"y":return a||s?"rok":"rokom";case"yy":return a||s?n+(Lr(e)?"roky":"rokov"):n+"rokmi"}}function yr(e,a,t,s){var n=e+" ";switch(t){case"s":return a||s?"nekaj sekund":"nekaj sekundami";case"ss":return n+=1===e?a?"sekundo":"sekundi":2===e?a||s?"sekundi":"sekundah":e<5?a||s?"sekunde":"sekundah":"sekund";case"m":return a?"ena minuta":"eno minuto";case"mm":return n+=1===e?a?"minuta":"minuto":2===e?a||s?"minuti":"minutama":e<5?a||s?"minute":"minutami":a||s?"minut":"minutami";case"h":return a?"ena ura":"eno uro";case"hh":return n+=1===e?a?"ura":"uro":2===e?a||s?"uri":"urama":e<5?a||s?"ure":"urami":a||s?"ur":"urami";case"d":return a||s?"en dan":"enim dnem";case"dd":return n+=1===e?a||s?"dan":"dnem":2===e?a||s?"dni":"dnevoma":a||s?"dni":"dnevi";case"M":return a||s?"en mesec":"enim mesecem";case"MM":return n+=1===e?a||s?"mesec":"mesecem":2===e?a||s?"meseca":"mesecema":e<5?a||s?"mesece":"meseci":a||s?"mesecev":"meseci";case"y":return a||s?"eno leto":"enim letom";case"yy":return n+=1===e?a||s?"leto":"letom":2===e?a||s?"leti":"letoma":e<5?a||s?"leta":"leti":a||s?"let":"leti"}}M.defineLocale("sk",{months:hr,monthsShort:cr,weekdays:"nede\u013ea_pondelok_utorok_streda_\u0161tvrtok_piatok_sobota".split("_"),weekdaysShort:"ne_po_ut_st_\u0161t_pi_so".split("_"),weekdaysMin:"ne_po_ut_st_\u0161t_pi_so".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd D. MMMM YYYY H:mm"},calendar:{sameDay:"[dnes o] LT",nextDay:"[zajtra o] LT",nextWeek:function(){switch(this.day()){case 0:return"[v nede\u013eu o] LT";case 1:case 2:return"[v] dddd [o] LT";case 3:return"[v stredu o] LT";case 4:return"[vo \u0161tvrtok o] LT";case 5:return"[v piatok o] LT";case 6:return"[v sobotu o] LT"}},lastDay:"[v\u010dera o] LT",lastWeek:function(){switch(this.day()){case 0:return"[minul\xfa nede\u013eu o] LT";case 1:case 2:return"[minul\xfd] dddd [o] LT";case 3:return"[minul\xfa stredu o] LT";case 4:case 5:return"[minul\xfd] dddd [o] LT";case 6:return"[minul\xfa sobotu o] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"pred %s",s:Yr,ss:Yr,m:Yr,mm:Yr,h:Yr,hh:Yr,d:Yr,dd:Yr,M:Yr,MM:Yr,y:Yr,yy:Yr},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}}),M.defineLocale("sl",{months:"januar_februar_marec_april_maj_junij_julij_avgust_september_oktober_november_december".split("_"),monthsShort:"jan._feb._mar._apr._maj._jun._jul._avg._sep._okt._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"nedelja_ponedeljek_torek_sreda_\u010detrtek_petek_sobota".split("_"),weekdaysShort:"ned._pon._tor._sre._\u010det._pet._sob.".split("_"),weekdaysMin:"ne_po_to_sr_\u010de_pe_so".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD. MM. YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[danes ob] LT",nextDay:"[jutri ob] LT",nextWeek:function(){switch(this.day()){case 0:return"[v] [nedeljo] [ob] LT";case 3:return"[v] [sredo] [ob] LT";case 6:return"[v] [soboto] [ob] LT";case 1:case 2:case 4:case 5:return"[v] dddd [ob] LT"}},lastDay:"[v\u010deraj ob] LT",lastWeek:function(){switch(this.day()){case 0:return"[prej\u0161njo] [nedeljo] [ob] LT";case 3:return"[prej\u0161njo] [sredo] [ob] LT";case 6:return"[prej\u0161njo] [soboto] [ob] LT";case 1:case 2:case 4:case 5:return"[prej\u0161nji] dddd [ob] LT"}},sameElse:"L"},relativeTime:{future:"\u010dez %s",past:"pred %s",s:yr,ss:yr,m:yr,mm:yr,h:yr,hh:yr,d:yr,dd:yr,M:yr,MM:yr,y:yr,yy:yr},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}}),M.defineLocale("sq",{months:"Janar_Shkurt_Mars_Prill_Maj_Qershor_Korrik_Gusht_Shtator_Tetor_N\xebntor_Dhjetor".split("_"),monthsShort:"Jan_Shk_Mar_Pri_Maj_Qer_Kor_Gus_Sht_Tet_N\xebn_Dhj".split("_"),weekdays:"E Diel_E H\xebn\xeb_E Mart\xeb_E M\xebrkur\xeb_E Enjte_E Premte_E Shtun\xeb".split("_"),weekdaysShort:"Die_H\xebn_Mar_M\xebr_Enj_Pre_Sht".split("_"),weekdaysMin:"D_H_Ma_M\xeb_E_P_Sh".split("_"),weekdaysParseExact:!0,meridiemParse:/PD|MD/,isPM:function(e){return"M"===e.charAt(0)},meridiem:function(e,a,t){return e<12?"PD":"MD"},longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Sot n\xeb] LT",nextDay:"[Nes\xebr n\xeb] LT",nextWeek:"dddd [n\xeb] LT",lastDay:"[Dje n\xeb] LT",lastWeek:"dddd [e kaluar n\xeb] LT",sameElse:"L"},relativeTime:{future:"n\xeb %s",past:"%s m\xeb par\xeb",s:"disa sekonda",ss:"%d sekonda",m:"nj\xeb minut\xeb",mm:"%d minuta",h:"nj\xeb or\xeb",hh:"%d or\xeb",d:"nj\xeb dit\xeb",dd:"%d dit\xeb",M:"nj\xeb muaj",MM:"%d muaj",y:"nj\xeb vit",yy:"%d vite"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}});var fr={words:{ss:["\u0441\u0435\u043a\u0443\u043d\u0434\u0430","\u0441\u0435\u043a\u0443\u043d\u0434\u0435","\u0441\u0435\u043a\u0443\u043d\u0434\u0438"],m:["\u0458\u0435\u0434\u0430\u043d \u043c\u0438\u043d\u0443\u0442","\u0458\u0435\u0434\u043d\u0435 \u043c\u0438\u043d\u0443\u0442\u0435"],mm:["\u043c\u0438\u043d\u0443\u0442","\u043c\u0438\u043d\u0443\u0442\u0435","\u043c\u0438\u043d\u0443\u0442\u0430"],h:["\u0458\u0435\u0434\u0430\u043d \u0441\u0430\u0442","\u0458\u0435\u0434\u043d\u043e\u0433 \u0441\u0430\u0442\u0430"],hh:["\u0441\u0430\u0442","\u0441\u0430\u0442\u0430","\u0441\u0430\u0442\u0438"],dd:["\u0434\u0430\u043d","\u0434\u0430\u043d\u0430","\u0434\u0430\u043d\u0430"],MM:["\u043c\u0435\u0441\u0435\u0446","\u043c\u0435\u0441\u0435\u0446\u0430","\u043c\u0435\u0441\u0435\u0446\u0438"],yy:["\u0433\u043e\u0434\u0438\u043d\u0430","\u0433\u043e\u0434\u0438\u043d\u0435","\u0433\u043e\u0434\u0438\u043d\u0430"]},correctGrammaticalCase:function(e,a){return 1===e?a[0]:2<=e&&e<=4?a[1]:a[2]},translate:function(e,a,t){var s=fr.words[t];return 1===t.length?a?s[0]:s[1]:e+" "+fr.correctGrammaticalCase(e,s)}};M.defineLocale("sr-cyrl",{months:"\u0458\u0430\u043d\u0443\u0430\u0440_\u0444\u0435\u0431\u0440\u0443\u0430\u0440_\u043c\u0430\u0440\u0442_\u0430\u043f\u0440\u0438\u043b_\u043c\u0430\u0458_\u0458\u0443\u043d_\u0458\u0443\u043b_\u0430\u0432\u0433\u0443\u0441\u0442_\u0441\u0435\u043f\u0442\u0435\u043c\u0431\u0430\u0440_\u043e\u043a\u0442\u043e\u0431\u0430\u0440_\u043d\u043e\u0432\u0435\u043c\u0431\u0430\u0440_\u0434\u0435\u0446\u0435\u043c\u0431\u0430\u0440".split("_"),monthsShort:"\u0458\u0430\u043d._\u0444\u0435\u0431._\u043c\u0430\u0440._\u0430\u043f\u0440._\u043c\u0430\u0458_\u0458\u0443\u043d_\u0458\u0443\u043b_\u0430\u0432\u0433._\u0441\u0435\u043f._\u043e\u043a\u0442._\u043d\u043e\u0432._\u0434\u0435\u0446.".split("_"),monthsParseExact:!0,weekdays:"\u043d\u0435\u0434\u0435\u0459\u0430_\u043f\u043e\u043d\u0435\u0434\u0435\u0459\u0430\u043a_\u0443\u0442\u043e\u0440\u0430\u043a_\u0441\u0440\u0435\u0434\u0430_\u0447\u0435\u0442\u0432\u0440\u0442\u0430\u043a_\u043f\u0435\u0442\u0430\u043a_\u0441\u0443\u0431\u043e\u0442\u0430".split("_"),weekdaysShort:"\u043d\u0435\u0434._\u043f\u043e\u043d._\u0443\u0442\u043e._\u0441\u0440\u0435._\u0447\u0435\u0442._\u043f\u0435\u0442._\u0441\u0443\u0431.".split("_"),weekdaysMin:"\u043d\u0435_\u043f\u043e_\u0443\u0442_\u0441\u0440_\u0447\u0435_\u043f\u0435_\u0441\u0443".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[\u0434\u0430\u043d\u0430\u0441 \u0443] LT",nextDay:"[\u0441\u0443\u0442\u0440\u0430 \u0443] LT",nextWeek:function(){switch(this.day()){case 0:return"[\u0443] [\u043d\u0435\u0434\u0435\u0459\u0443] [\u0443] LT";case 3:return"[\u0443] [\u0441\u0440\u0435\u0434\u0443] [\u0443] LT";case 6:return"[\u0443] [\u0441\u0443\u0431\u043e\u0442\u0443] [\u0443] LT";case 1:case 2:case 4:case 5:return"[\u0443] dddd [\u0443] LT"}},lastDay:"[\u0458\u0443\u0447\u0435 \u0443] LT",lastWeek:function(){return["[\u043f\u0440\u043e\u0448\u043b\u0435] [\u043d\u0435\u0434\u0435\u0459\u0435] [\u0443] LT","[\u043f\u0440\u043e\u0448\u043b\u043e\u0433] [\u043f\u043e\u043d\u0435\u0434\u0435\u0459\u043a\u0430] [\u0443] LT","[\u043f\u0440\u043e\u0448\u043b\u043e\u0433] [\u0443\u0442\u043e\u0440\u043a\u0430] [\u0443] LT","[\u043f\u0440\u043e\u0448\u043b\u0435] [\u0441\u0440\u0435\u0434\u0435] [\u0443] LT","[\u043f\u0440\u043e\u0448\u043b\u043e\u0433] [\u0447\u0435\u0442\u0432\u0440\u0442\u043a\u0430] [\u0443] LT","[\u043f\u0440\u043e\u0448\u043b\u043e\u0433] [\u043f\u0435\u0442\u043a\u0430] [\u0443] LT","[\u043f\u0440\u043e\u0448\u043b\u0435] [\u0441\u0443\u0431\u043e\u0442\u0435] [\u0443] LT"][this.day()]},sameElse:"L"},relativeTime:{future:"\u0437\u0430 %s",past:"\u043f\u0440\u0435 %s",s:"\u043d\u0435\u043a\u043e\u043b\u0438\u043a\u043e \u0441\u0435\u043a\u0443\u043d\u0434\u0438",ss:fr.translate,m:fr.translate,mm:fr.translate,h:fr.translate,hh:fr.translate,d:"\u0434\u0430\u043d",dd:fr.translate,M:"\u043c\u0435\u0441\u0435\u0446",MM:fr.translate,y:"\u0433\u043e\u0434\u0438\u043d\u0443",yy:fr.translate},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}});var pr={words:{ss:["sekunda","sekunde","sekundi"],m:["jedan minut","jedne minute"],mm:["minut","minute","minuta"],h:["jedan sat","jednog sata"],hh:["sat","sata","sati"],dd:["dan","dana","dana"],MM:["mesec","meseca","meseci"],yy:["godina","godine","godina"]},correctGrammaticalCase:function(e,a){return 1===e?a[0]:2<=e&&e<=4?a[1]:a[2]},translate:function(e,a,t){var s=pr.words[t];return 1===t.length?a?s[0]:s[1]:e+" "+pr.correctGrammaticalCase(e,s)}};M.defineLocale("sr",{months:"januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar".split("_"),monthsShort:"jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"nedelja_ponedeljak_utorak_sreda_\u010detvrtak_petak_subota".split("_"),weekdaysShort:"ned._pon._uto._sre._\u010det._pet._sub.".split("_"),weekdaysMin:"ne_po_ut_sr_\u010de_pe_su".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[danas u] LT",nextDay:"[sutra u] LT",nextWeek:function(){switch(this.day()){case 0:return"[u] [nedelju] [u] LT";case 3:return"[u] [sredu] [u] LT";case 6:return"[u] [subotu] [u] LT";case 1:case 2:case 4:case 5:return"[u] dddd [u] LT"}},lastDay:"[ju\u010de u] LT",lastWeek:function(){return["[pro\u0161le] [nedelje] [u] LT","[pro\u0161log] [ponedeljka] [u] LT","[pro\u0161log] [utorka] [u] LT","[pro\u0161le] [srede] [u] LT","[pro\u0161log] [\u010detvrtka] [u] LT","[pro\u0161log] [petka] [u] LT","[pro\u0161le] [subote] [u] LT"][this.day()]},sameElse:"L"},relativeTime:{future:"za %s",past:"pre %s",s:"nekoliko sekundi",ss:pr.translate,m:pr.translate,mm:pr.translate,h:pr.translate,hh:pr.translate,d:"dan",dd:pr.translate,M:"mesec",MM:pr.translate,y:"godinu",yy:pr.translate},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}}),M.defineLocale("ss",{months:"Bhimbidvwane_Indlovana_Indlov'lenkhulu_Mabasa_Inkhwekhweti_Inhlaba_Kholwane_Ingci_Inyoni_Imphala_Lweti_Ingongoni".split("_"),monthsShort:"Bhi_Ina_Inu_Mab_Ink_Inh_Kho_Igc_Iny_Imp_Lwe_Igo".split("_"),weekdays:"Lisontfo_Umsombuluko_Lesibili_Lesitsatfu_Lesine_Lesihlanu_Umgcibelo".split("_"),weekdaysShort:"Lis_Umb_Lsb_Les_Lsi_Lsh_Umg".split("_"),weekdaysMin:"Li_Us_Lb_Lt_Ls_Lh_Ug".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendar:{sameDay:"[Namuhla nga] LT",nextDay:"[Kusasa nga] LT",nextWeek:"dddd [nga] LT",lastDay:"[Itolo nga] LT",lastWeek:"dddd [leliphelile] [nga] LT",sameElse:"L"},relativeTime:{future:"nga %s",past:"wenteka nga %s",s:"emizuzwana lomcane",ss:"%d mzuzwana",m:"umzuzu",mm:"%d emizuzu",h:"lihora",hh:"%d emahora",d:"lilanga",dd:"%d emalanga",M:"inyanga",MM:"%d tinyanga",y:"umnyaka",yy:"%d iminyaka"},meridiemParse:/ekuseni|emini|entsambama|ebusuku/,meridiem:function(e,a,t){return e<11?"ekuseni":e<15?"emini":e<19?"entsambama":"ebusuku"},meridiemHour:function(e,a){return 12===e&&(e=0),"ekuseni"===a?e:"emini"===a?11<=e?e:e+12:"entsambama"===a||"ebusuku"===a?0===e?0:e+12:void 0},dayOfMonthOrdinalParse:/\d{1,2}/,ordinal:"%d",week:{dow:1,doy:4}}),M.defineLocale("sv",{months:"januari_februari_mars_april_maj_juni_juli_augusti_september_oktober_november_december".split("_"),monthsShort:"jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec".split("_"),weekdays:"s\xf6ndag_m\xe5ndag_tisdag_onsdag_torsdag_fredag_l\xf6rdag".split("_"),weekdaysShort:"s\xf6n_m\xe5n_tis_ons_tor_fre_l\xf6r".split("_"),weekdaysMin:"s\xf6_m\xe5_ti_on_to_fr_l\xf6".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [kl.] HH:mm",LLLL:"dddd D MMMM YYYY [kl.] HH:mm",lll:"D MMM YYYY HH:mm",llll:"ddd D MMM YYYY HH:mm"},calendar:{sameDay:"[Idag] LT",nextDay:"[Imorgon] LT",lastDay:"[Ig\xe5r] LT",nextWeek:"[P\xe5] dddd LT",lastWeek:"[I] dddd[s] LT",sameElse:"L"},relativeTime:{future:"om %s",past:"f\xf6r %s sedan",s:"n\xe5gra sekunder",ss:"%d sekunder",m:"en minut",mm:"%d minuter",h:"en timme",hh:"%d timmar",d:"en dag",dd:"%d dagar",M:"en m\xe5nad",MM:"%d m\xe5nader",y:"ett \xe5r",yy:"%d \xe5r"},dayOfMonthOrdinalParse:/\d{1,2}(\:e|\:a)/,ordinal:function(e){var a=e%10;return e+(1!=~~(e%100/10)&&(1==a||2==a)?":a":":e")},week:{dow:1,doy:4}}),M.defineLocale("sw",{months:"Januari_Februari_Machi_Aprili_Mei_Juni_Julai_Agosti_Septemba_Oktoba_Novemba_Desemba".split("_"),monthsShort:"Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ago_Sep_Okt_Nov_Des".split("_"),weekdays:"Jumapili_Jumatatu_Jumanne_Jumatano_Alhamisi_Ijumaa_Jumamosi".split("_"),weekdaysShort:"Jpl_Jtat_Jnne_Jtan_Alh_Ijm_Jmos".split("_"),weekdaysMin:"J2_J3_J4_J5_Al_Ij_J1".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"hh:mm A",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[leo saa] LT",nextDay:"[kesho saa] LT",nextWeek:"[wiki ijayo] dddd [saat] LT",lastDay:"[jana] LT",lastWeek:"[wiki iliyopita] dddd [saat] LT",sameElse:"L"},relativeTime:{future:"%s baadaye",past:"tokea %s",s:"hivi punde",ss:"sekunde %d",m:"dakika moja",mm:"dakika %d",h:"saa limoja",hh:"masaa %d",d:"siku moja",dd:"siku %d",M:"mwezi mmoja",MM:"miezi %d",y:"mwaka mmoja",yy:"miaka %d"},week:{dow:1,doy:7}});var kr={1:"\u0be7",2:"\u0be8",3:"\u0be9",4:"\u0bea",5:"\u0beb",6:"\u0bec",7:"\u0bed",8:"\u0bee",9:"\u0bef",0:"\u0be6"},Dr={"\u0be7":"1","\u0be8":"2","\u0be9":"3","\u0bea":"4","\u0beb":"5","\u0bec":"6","\u0bed":"7","\u0bee":"8","\u0bef":"9","\u0be6":"0"};M.defineLocale("ta",{months:"\u0b9c\u0ba9\u0bb5\u0bb0\u0bbf_\u0baa\u0bbf\u0baa\u0bcd\u0bb0\u0bb5\u0bb0\u0bbf_\u0bae\u0bbe\u0bb0\u0bcd\u0b9a\u0bcd_\u0b8f\u0baa\u0bcd\u0bb0\u0bb2\u0bcd_\u0bae\u0bc7_\u0b9c\u0bc2\u0ba9\u0bcd_\u0b9c\u0bc2\u0bb2\u0bc8_\u0b86\u0b95\u0bb8\u0bcd\u0b9f\u0bcd_\u0b9a\u0bc6\u0baa\u0bcd\u0b9f\u0bc6\u0bae\u0bcd\u0baa\u0bb0\u0bcd_\u0b85\u0b95\u0bcd\u0b9f\u0bc7\u0bbe\u0baa\u0bb0\u0bcd_\u0ba8\u0bb5\u0bae\u0bcd\u0baa\u0bb0\u0bcd_\u0b9f\u0bbf\u0b9a\u0bae\u0bcd\u0baa\u0bb0\u0bcd".split("_"),monthsShort:"\u0b9c\u0ba9\u0bb5\u0bb0\u0bbf_\u0baa\u0bbf\u0baa\u0bcd\u0bb0\u0bb5\u0bb0\u0bbf_\u0bae\u0bbe\u0bb0\u0bcd\u0b9a\u0bcd_\u0b8f\u0baa\u0bcd\u0bb0\u0bb2\u0bcd_\u0bae\u0bc7_\u0b9c\u0bc2\u0ba9\u0bcd_\u0b9c\u0bc2\u0bb2\u0bc8_\u0b86\u0b95\u0bb8\u0bcd\u0b9f\u0bcd_\u0b9a\u0bc6\u0baa\u0bcd\u0b9f\u0bc6\u0bae\u0bcd\u0baa\u0bb0\u0bcd_\u0b85\u0b95\u0bcd\u0b9f\u0bc7\u0bbe\u0baa\u0bb0\u0bcd_\u0ba8\u0bb5\u0bae\u0bcd\u0baa\u0bb0\u0bcd_\u0b9f\u0bbf\u0b9a\u0bae\u0bcd\u0baa\u0bb0\u0bcd".split("_"),weekdays:"\u0b9e\u0bbe\u0baf\u0bbf\u0bb1\u0bcd\u0bb1\u0bc1\u0b95\u0bcd\u0b95\u0bbf\u0bb4\u0bae\u0bc8_\u0ba4\u0bbf\u0b99\u0bcd\u0b95\u0b9f\u0bcd\u0b95\u0bbf\u0bb4\u0bae\u0bc8_\u0b9a\u0bc6\u0bb5\u0bcd\u0bb5\u0bbe\u0baf\u0bcd\u0b95\u0bbf\u0bb4\u0bae\u0bc8_\u0baa\u0bc1\u0ba4\u0ba9\u0bcd\u0b95\u0bbf\u0bb4\u0bae\u0bc8_\u0bb5\u0bbf\u0baf\u0bbe\u0bb4\u0b95\u0bcd\u0b95\u0bbf\u0bb4\u0bae\u0bc8_\u0bb5\u0bc6\u0bb3\u0bcd\u0bb3\u0bbf\u0b95\u0bcd\u0b95\u0bbf\u0bb4\u0bae\u0bc8_\u0b9a\u0ba9\u0bbf\u0b95\u0bcd\u0b95\u0bbf\u0bb4\u0bae\u0bc8".split("_"),weekdaysShort:"\u0b9e\u0bbe\u0baf\u0bbf\u0bb1\u0bc1_\u0ba4\u0bbf\u0b99\u0bcd\u0b95\u0bb3\u0bcd_\u0b9a\u0bc6\u0bb5\u0bcd\u0bb5\u0bbe\u0baf\u0bcd_\u0baa\u0bc1\u0ba4\u0ba9\u0bcd_\u0bb5\u0bbf\u0baf\u0bbe\u0bb4\u0ba9\u0bcd_\u0bb5\u0bc6\u0bb3\u0bcd\u0bb3\u0bbf_\u0b9a\u0ba9\u0bbf".split("_"),weekdaysMin:"\u0b9e\u0bbe_\u0ba4\u0bbf_\u0b9a\u0bc6_\u0baa\u0bc1_\u0bb5\u0bbf_\u0bb5\u0bc6_\u0b9a".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, HH:mm",LLLL:"dddd, D MMMM YYYY, HH:mm"},calendar:{sameDay:"[\u0b87\u0ba9\u0bcd\u0bb1\u0bc1] LT",nextDay:"[\u0ba8\u0bbe\u0bb3\u0bc8] LT",nextWeek:"dddd, LT",lastDay:"[\u0ba8\u0bc7\u0bb1\u0bcd\u0bb1\u0bc1] LT",lastWeek:"[\u0b95\u0b9f\u0ba8\u0bcd\u0ba4 \u0bb5\u0bbe\u0bb0\u0bae\u0bcd] dddd, LT",sameElse:"L"},relativeTime:{future:"%s \u0b87\u0bb2\u0bcd",past:"%s \u0bae\u0bc1\u0ba9\u0bcd",s:"\u0b92\u0bb0\u0bc1 \u0b9a\u0bbf\u0bb2 \u0bb5\u0bbf\u0ba8\u0bbe\u0b9f\u0bbf\u0b95\u0bb3\u0bcd",ss:"%d \u0bb5\u0bbf\u0ba8\u0bbe\u0b9f\u0bbf\u0b95\u0bb3\u0bcd",m:"\u0b92\u0bb0\u0bc1 \u0ba8\u0bbf\u0bae\u0bbf\u0b9f\u0bae\u0bcd",mm:"%d \u0ba8\u0bbf\u0bae\u0bbf\u0b9f\u0b99\u0bcd\u0b95\u0bb3\u0bcd",h:"\u0b92\u0bb0\u0bc1 \u0bae\u0ba3\u0bbf \u0ba8\u0bc7\u0bb0\u0bae\u0bcd",hh:"%d \u0bae\u0ba3\u0bbf \u0ba8\u0bc7\u0bb0\u0bae\u0bcd",d:"\u0b92\u0bb0\u0bc1 \u0ba8\u0bbe\u0bb3\u0bcd",dd:"%d \u0ba8\u0bbe\u0b9f\u0bcd\u0b95\u0bb3\u0bcd",M:"\u0b92\u0bb0\u0bc1 \u0bae\u0bbe\u0ba4\u0bae\u0bcd",MM:"%d \u0bae\u0bbe\u0ba4\u0b99\u0bcd\u0b95\u0bb3\u0bcd",y:"\u0b92\u0bb0\u0bc1 \u0bb5\u0bb0\u0bc1\u0b9f\u0bae\u0bcd",yy:"%d \u0b86\u0ba3\u0bcd\u0b9f\u0bc1\u0b95\u0bb3\u0bcd"},dayOfMonthOrdinalParse:/\d{1,2}\u0bb5\u0ba4\u0bc1/,ordinal:function(e){return e+"\u0bb5\u0ba4\u0bc1"},preparse:function(e){return e.replace(/[\u0be7\u0be8\u0be9\u0bea\u0beb\u0bec\u0bed\u0bee\u0bef\u0be6]/g,function(e){return Dr[e]})},postformat:function(e){return e.replace(/\d/g,function(e){return kr[e]})},meridiemParse:/\u0baf\u0bbe\u0bae\u0bae\u0bcd|\u0bb5\u0bc8\u0b95\u0bb1\u0bc8|\u0b95\u0bbe\u0bb2\u0bc8|\u0ba8\u0ba3\u0bcd\u0baa\u0b95\u0bb2\u0bcd|\u0b8e\u0bb1\u0bcd\u0baa\u0bbe\u0b9f\u0bc1|\u0bae\u0bbe\u0bb2\u0bc8/,meridiem:function(e,a,t){return e<2?" \u0baf\u0bbe\u0bae\u0bae\u0bcd":e<6?" \u0bb5\u0bc8\u0b95\u0bb1\u0bc8":e<10?" \u0b95\u0bbe\u0bb2\u0bc8":e<14?" \u0ba8\u0ba3\u0bcd\u0baa\u0b95\u0bb2\u0bcd":e<18?" \u0b8e\u0bb1\u0bcd\u0baa\u0bbe\u0b9f\u0bc1":e<22?" \u0bae\u0bbe\u0bb2\u0bc8":" \u0baf\u0bbe\u0bae\u0bae\u0bcd"},meridiemHour:function(e,a){return 12===e&&(e=0),"\u0baf\u0bbe\u0bae\u0bae\u0bcd"===a?e<2?e:e+12:"\u0bb5\u0bc8\u0b95\u0bb1\u0bc8"===a||"\u0b95\u0bbe\u0bb2\u0bc8"===a||"\u0ba8\u0ba3\u0bcd\u0baa\u0b95\u0bb2\u0bcd"===a&&10<=e?e:e+12},week:{dow:0,doy:6}}),M.defineLocale("te",{months:"\u0c1c\u0c28\u0c35\u0c30\u0c3f_\u0c2b\u0c3f\u0c2c\u0c4d\u0c30\u0c35\u0c30\u0c3f_\u0c2e\u0c3e\u0c30\u0c4d\u0c1a\u0c3f_\u0c0f\u0c2a\u0c4d\u0c30\u0c3f\u0c32\u0c4d_\u0c2e\u0c47_\u0c1c\u0c42\u0c28\u0c4d_\u0c1c\u0c41\u0c32\u0c48_\u0c06\u0c17\u0c38\u0c4d\u0c1f\u0c41_\u0c38\u0c46\u0c2a\u0c4d\u0c1f\u0c46\u0c02\u0c2c\u0c30\u0c4d_\u0c05\u0c15\u0c4d\u0c1f\u0c4b\u0c2c\u0c30\u0c4d_\u0c28\u0c35\u0c02\u0c2c\u0c30\u0c4d_\u0c21\u0c3f\u0c38\u0c46\u0c02\u0c2c\u0c30\u0c4d".split("_"),monthsShort:"\u0c1c\u0c28._\u0c2b\u0c3f\u0c2c\u0c4d\u0c30._\u0c2e\u0c3e\u0c30\u0c4d\u0c1a\u0c3f_\u0c0f\u0c2a\u0c4d\u0c30\u0c3f._\u0c2e\u0c47_\u0c1c\u0c42\u0c28\u0c4d_\u0c1c\u0c41\u0c32\u0c48_\u0c06\u0c17._\u0c38\u0c46\u0c2a\u0c4d._\u0c05\u0c15\u0c4d\u0c1f\u0c4b._\u0c28\u0c35._\u0c21\u0c3f\u0c38\u0c46.".split("_"),monthsParseExact:!0,weekdays:"\u0c06\u0c26\u0c3f\u0c35\u0c3e\u0c30\u0c02_\u0c38\u0c4b\u0c2e\u0c35\u0c3e\u0c30\u0c02_\u0c2e\u0c02\u0c17\u0c33\u0c35\u0c3e\u0c30\u0c02_\u0c2c\u0c41\u0c27\u0c35\u0c3e\u0c30\u0c02_\u0c17\u0c41\u0c30\u0c41\u0c35\u0c3e\u0c30\u0c02_\u0c36\u0c41\u0c15\u0c4d\u0c30\u0c35\u0c3e\u0c30\u0c02_\u0c36\u0c28\u0c3f\u0c35\u0c3e\u0c30\u0c02".split("_"),weekdaysShort:"\u0c06\u0c26\u0c3f_\u0c38\u0c4b\u0c2e_\u0c2e\u0c02\u0c17\u0c33_\u0c2c\u0c41\u0c27_\u0c17\u0c41\u0c30\u0c41_\u0c36\u0c41\u0c15\u0c4d\u0c30_\u0c36\u0c28\u0c3f".split("_"),weekdaysMin:"\u0c06_\u0c38\u0c4b_\u0c2e\u0c02_\u0c2c\u0c41_\u0c17\u0c41_\u0c36\u0c41_\u0c36".split("_"),longDateFormat:{LT:"A h:mm",LTS:"A h:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm",LLLL:"dddd, D MMMM YYYY, A h:mm"},calendar:{sameDay:"[\u0c28\u0c47\u0c21\u0c41] LT",nextDay:"[\u0c30\u0c47\u0c2a\u0c41] LT",nextWeek:"dddd, LT",lastDay:"[\u0c28\u0c3f\u0c28\u0c4d\u0c28] LT",lastWeek:"[\u0c17\u0c24] dddd, LT",sameElse:"L"},relativeTime:{future:"%s \u0c32\u0c4b",past:"%s \u0c15\u0c4d\u0c30\u0c3f\u0c24\u0c02",s:"\u0c15\u0c4a\u0c28\u0c4d\u0c28\u0c3f \u0c15\u0c4d\u0c37\u0c23\u0c3e\u0c32\u0c41",ss:"%d \u0c38\u0c46\u0c15\u0c28\u0c4d\u0c32\u0c41",m:"\u0c12\u0c15 \u0c28\u0c3f\u0c2e\u0c3f\u0c37\u0c02",mm:"%d \u0c28\u0c3f\u0c2e\u0c3f\u0c37\u0c3e\u0c32\u0c41",h:"\u0c12\u0c15 \u0c17\u0c02\u0c1f",hh:"%d \u0c17\u0c02\u0c1f\u0c32\u0c41",d:"\u0c12\u0c15 \u0c30\u0c4b\u0c1c\u0c41",dd:"%d \u0c30\u0c4b\u0c1c\u0c41\u0c32\u0c41",M:"\u0c12\u0c15 \u0c28\u0c46\u0c32",MM:"%d \u0c28\u0c46\u0c32\u0c32\u0c41",y:"\u0c12\u0c15 \u0c38\u0c02\u0c35\u0c24\u0c4d\u0c38\u0c30\u0c02",yy:"%d \u0c38\u0c02\u0c35\u0c24\u0c4d\u0c38\u0c30\u0c3e\u0c32\u0c41"},dayOfMonthOrdinalParse:/\d{1,2}\u0c35/,ordinal:"%d\u0c35",meridiemParse:/\u0c30\u0c3e\u0c24\u0c4d\u0c30\u0c3f|\u0c09\u0c26\u0c2f\u0c02|\u0c2e\u0c27\u0c4d\u0c2f\u0c3e\u0c39\u0c4d\u0c28\u0c02|\u0c38\u0c3e\u0c2f\u0c02\u0c24\u0c4d\u0c30\u0c02/,meridiemHour:function(e,a){return 12===e&&(e=0),"\u0c30\u0c3e\u0c24\u0c4d\u0c30\u0c3f"===a?e<4?e:e+12:"\u0c09\u0c26\u0c2f\u0c02"===a?e:"\u0c2e\u0c27\u0c4d\u0c2f\u0c3e\u0c39\u0c4d\u0c28\u0c02"===a?10<=e?e:e+12:"\u0c38\u0c3e\u0c2f\u0c02\u0c24\u0c4d\u0c30\u0c02"===a?e+12:void 0},meridiem:function(e,a,t){return e<4?"\u0c30\u0c3e\u0c24\u0c4d\u0c30\u0c3f":e<10?"\u0c09\u0c26\u0c2f\u0c02":e<17?"\u0c2e\u0c27\u0c4d\u0c2f\u0c3e\u0c39\u0c4d\u0c28\u0c02":e<20?"\u0c38\u0c3e\u0c2f\u0c02\u0c24\u0c4d\u0c30\u0c02":"\u0c30\u0c3e\u0c24\u0c4d\u0c30\u0c3f"},week:{dow:0,doy:6}}),M.defineLocale("tet",{months:"Janeiru_Fevereiru_Marsu_Abril_Maiu_Ju\xf1u_Jullu_Agustu_Setembru_Outubru_Novembru_Dezembru".split("_"),monthsShort:"Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez".split("_"),weekdays:"Domingu_Segunda_Tersa_Kuarta_Kinta_Sesta_Sabadu".split("_"),weekdaysShort:"Dom_Seg_Ters_Kua_Kint_Sest_Sab".split("_"),weekdaysMin:"Do_Seg_Te_Ku_Ki_Ses_Sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Ohin iha] LT",nextDay:"[Aban iha] LT",nextWeek:"dddd [iha] LT",lastDay:"[Horiseik iha] LT",lastWeek:"dddd [semana kotuk] [iha] LT",sameElse:"L"},relativeTime:{future:"iha %s",past:"%s liuba",s:"segundu balun",ss:"segundu %d",m:"minutu ida",mm:"minutu %d",h:"oras ida",hh:"oras %d",d:"loron ida",dd:"loron %d",M:"fulan ida",MM:"fulan %d",y:"tinan ida",yy:"tinan %d"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(e){var a=e%10;return e+(1==~~(e%100/10)?"th":1==a?"st":2==a?"nd":3==a?"rd":"th")},week:{dow:1,doy:4}});var Tr={0:"-\u0443\u043c",1:"-\u0443\u043c",2:"-\u044e\u043c",3:"-\u044e\u043c",4:"-\u0443\u043c",5:"-\u0443\u043c",6:"-\u0443\u043c",7:"-\u0443\u043c",8:"-\u0443\u043c",9:"-\u0443\u043c",10:"-\u0443\u043c",12:"-\u0443\u043c",13:"-\u0443\u043c",20:"-\u0443\u043c",30:"-\u044e\u043c",40:"-\u0443\u043c",50:"-\u0443\u043c",60:"-\u0443\u043c",70:"-\u0443\u043c",80:"-\u0443\u043c",90:"-\u0443\u043c",100:"-\u0443\u043c"};M.defineLocale("tg",{months:"\u044f\u043d\u0432\u0430\u0440_\u0444\u0435\u0432\u0440\u0430\u043b_\u043c\u0430\u0440\u0442_\u0430\u043f\u0440\u0435\u043b_\u043c\u0430\u0439_\u0438\u044e\u043d_\u0438\u044e\u043b_\u0430\u0432\u0433\u0443\u0441\u0442_\u0441\u0435\u043d\u0442\u044f\u0431\u0440_\u043e\u043a\u0442\u044f\u0431\u0440_\u043d\u043e\u044f\u0431\u0440_\u0434\u0435\u043a\u0430\u0431\u0440".split("_"),monthsShort:"\u044f\u043d\u0432_\u0444\u0435\u0432_\u043c\u0430\u0440_\u0430\u043f\u0440_\u043c\u0430\u0439_\u0438\u044e\u043d_\u0438\u044e\u043b_\u0430\u0432\u0433_\u0441\u0435\u043d_\u043e\u043a\u0442_\u043d\u043e\u044f_\u0434\u0435\u043a".split("_"),weekdays:"\u044f\u043a\u0448\u0430\u043d\u0431\u0435_\u0434\u0443\u0448\u0430\u043d\u0431\u0435_\u0441\u0435\u0448\u0430\u043d\u0431\u0435_\u0447\u043e\u0440\u0448\u0430\u043d\u0431\u0435_\u043f\u0430\u043d\u04b7\u0448\u0430\u043d\u0431\u0435_\u04b7\u0443\u043c\u044a\u0430_\u0448\u0430\u043d\u0431\u0435".split("_"),weekdaysShort:"\u044f\u0448\u0431_\u0434\u0448\u0431_\u0441\u0448\u0431_\u0447\u0448\u0431_\u043f\u0448\u0431_\u04b7\u0443\u043c_\u0448\u043d\u0431".split("_"),weekdaysMin:"\u044f\u0448_\u0434\u0448_\u0441\u0448_\u0447\u0448_\u043f\u0448_\u04b7\u043c_\u0448\u0431".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[\u0418\u043c\u0440\u04ef\u0437 \u0441\u043e\u0430\u0442\u0438] LT",nextDay:"[\u041f\u0430\u0433\u043e\u04b3 \u0441\u043e\u0430\u0442\u0438] LT",lastDay:"[\u0414\u0438\u0440\u04ef\u0437 \u0441\u043e\u0430\u0442\u0438] LT",nextWeek:"dddd[\u0438] [\u04b3\u0430\u0444\u0442\u0430\u0438 \u043e\u044f\u043d\u0434\u0430 \u0441\u043e\u0430\u0442\u0438] LT",lastWeek:"dddd[\u0438] [\u04b3\u0430\u0444\u0442\u0430\u0438 \u0433\u0443\u0437\u0430\u0448\u0442\u0430 \u0441\u043e\u0430\u0442\u0438] LT",sameElse:"L"},relativeTime:{future:"\u0431\u0430\u044a\u0434\u0438 %s",past:"%s \u043f\u0435\u0448",s:"\u044f\u043a\u0447\u0430\u043d\u0434 \u0441\u043e\u043d\u0438\u044f",m:"\u044f\u043a \u0434\u0430\u049b\u0438\u049b\u0430",mm:"%d \u0434\u0430\u049b\u0438\u049b\u0430",h:"\u044f\u043a \u0441\u043e\u0430\u0442",hh:"%d \u0441\u043e\u0430\u0442",d:"\u044f\u043a \u0440\u04ef\u0437",dd:"%d \u0440\u04ef\u0437",M:"\u044f\u043a \u043c\u043e\u04b3",MM:"%d \u043c\u043e\u04b3",y:"\u044f\u043a \u0441\u043e\u043b",yy:"%d \u0441\u043e\u043b"},meridiemParse:/\u0448\u0430\u0431|\u0441\u0443\u0431\u04b3|\u0440\u04ef\u0437|\u0431\u0435\u0433\u043e\u04b3/,meridiemHour:function(e,a){return 12===e&&(e=0),"\u0448\u0430\u0431"===a?e<4?e:e+12:"\u0441\u0443\u0431\u04b3"===a?e:"\u0440\u04ef\u0437"===a?11<=e?e:e+12:"\u0431\u0435\u0433\u043e\u04b3"===a?e+12:void 0},meridiem:function(e,a,t){return e<4?"\u0448\u0430\u0431":e<11?"\u0441\u0443\u0431\u04b3":e<16?"\u0440\u04ef\u0437":e<19?"\u0431\u0435\u0433\u043e\u04b3":"\u0448\u0430\u0431"},dayOfMonthOrdinalParse:/\d{1,2}-(\u0443\u043c|\u044e\u043c)/,ordinal:function(e){return e+(Tr[e]||Tr[e%10]||Tr[100<=e?100:null])},week:{dow:1,doy:7}}),M.defineLocale("th",{months:"\u0e21\u0e01\u0e23\u0e32\u0e04\u0e21_\u0e01\u0e38\u0e21\u0e20\u0e32\u0e1e\u0e31\u0e19\u0e18\u0e4c_\u0e21\u0e35\u0e19\u0e32\u0e04\u0e21_\u0e40\u0e21\u0e29\u0e32\u0e22\u0e19_\u0e1e\u0e24\u0e29\u0e20\u0e32\u0e04\u0e21_\u0e21\u0e34\u0e16\u0e38\u0e19\u0e32\u0e22\u0e19_\u0e01\u0e23\u0e01\u0e0e\u0e32\u0e04\u0e21_\u0e2a\u0e34\u0e07\u0e2b\u0e32\u0e04\u0e21_\u0e01\u0e31\u0e19\u0e22\u0e32\u0e22\u0e19_\u0e15\u0e38\u0e25\u0e32\u0e04\u0e21_\u0e1e\u0e24\u0e28\u0e08\u0e34\u0e01\u0e32\u0e22\u0e19_\u0e18\u0e31\u0e19\u0e27\u0e32\u0e04\u0e21".split("_"),monthsShort:"\u0e21.\u0e04._\u0e01.\u0e1e._\u0e21\u0e35.\u0e04._\u0e40\u0e21.\u0e22._\u0e1e.\u0e04._\u0e21\u0e34.\u0e22._\u0e01.\u0e04._\u0e2a.\u0e04._\u0e01.\u0e22._\u0e15.\u0e04._\u0e1e.\u0e22._\u0e18.\u0e04.".split("_"),monthsParseExact:!0,weekdays:"\u0e2d\u0e32\u0e17\u0e34\u0e15\u0e22\u0e4c_\u0e08\u0e31\u0e19\u0e17\u0e23\u0e4c_\u0e2d\u0e31\u0e07\u0e04\u0e32\u0e23_\u0e1e\u0e38\u0e18_\u0e1e\u0e24\u0e2b\u0e31\u0e2a\u0e1a\u0e14\u0e35_\u0e28\u0e38\u0e01\u0e23\u0e4c_\u0e40\u0e2a\u0e32\u0e23\u0e4c".split("_"),weekdaysShort:"\u0e2d\u0e32\u0e17\u0e34\u0e15\u0e22\u0e4c_\u0e08\u0e31\u0e19\u0e17\u0e23\u0e4c_\u0e2d\u0e31\u0e07\u0e04\u0e32\u0e23_\u0e1e\u0e38\u0e18_\u0e1e\u0e24\u0e2b\u0e31\u0e2a_\u0e28\u0e38\u0e01\u0e23\u0e4c_\u0e40\u0e2a\u0e32\u0e23\u0e4c".split("_"),weekdaysMin:"\u0e2d\u0e32._\u0e08._\u0e2d._\u0e1e._\u0e1e\u0e24._\u0e28._\u0e2a.".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY \u0e40\u0e27\u0e25\u0e32 H:mm",LLLL:"\u0e27\u0e31\u0e19dddd\u0e17\u0e35\u0e48 D MMMM YYYY \u0e40\u0e27\u0e25\u0e32 H:mm"},meridiemParse:/\u0e01\u0e48\u0e2d\u0e19\u0e40\u0e17\u0e35\u0e48\u0e22\u0e07|\u0e2b\u0e25\u0e31\u0e07\u0e40\u0e17\u0e35\u0e48\u0e22\u0e07/,isPM:function(e){return"\u0e2b\u0e25\u0e31\u0e07\u0e40\u0e17\u0e35\u0e48\u0e22\u0e07"===e},meridiem:function(e,a,t){return e<12?"\u0e01\u0e48\u0e2d\u0e19\u0e40\u0e17\u0e35\u0e48\u0e22\u0e07":"\u0e2b\u0e25\u0e31\u0e07\u0e40\u0e17\u0e35\u0e48\u0e22\u0e07"},calendar:{sameDay:"[\u0e27\u0e31\u0e19\u0e19\u0e35\u0e49 \u0e40\u0e27\u0e25\u0e32] LT",nextDay:"[\u0e1e\u0e23\u0e38\u0e48\u0e07\u0e19\u0e35\u0e49 \u0e40\u0e27\u0e25\u0e32] LT",nextWeek:"dddd[\u0e2b\u0e19\u0e49\u0e32 \u0e40\u0e27\u0e25\u0e32] LT",lastDay:"[\u0e40\u0e21\u0e37\u0e48\u0e2d\u0e27\u0e32\u0e19\u0e19\u0e35\u0e49 \u0e40\u0e27\u0e25\u0e32] LT",lastWeek:"[\u0e27\u0e31\u0e19]dddd[\u0e17\u0e35\u0e48\u0e41\u0e25\u0e49\u0e27 \u0e40\u0e27\u0e25\u0e32] LT",sameElse:"L"},relativeTime:{future:"\u0e2d\u0e35\u0e01 %s",past:"%s\u0e17\u0e35\u0e48\u0e41\u0e25\u0e49\u0e27",s:"\u0e44\u0e21\u0e48\u0e01\u0e35\u0e48\u0e27\u0e34\u0e19\u0e32\u0e17\u0e35",ss:"%d \u0e27\u0e34\u0e19\u0e32\u0e17\u0e35",m:"1 \u0e19\u0e32\u0e17\u0e35",mm:"%d \u0e19\u0e32\u0e17\u0e35",h:"1 \u0e0a\u0e31\u0e48\u0e27\u0e42\u0e21\u0e07",hh:"%d \u0e0a\u0e31\u0e48\u0e27\u0e42\u0e21\u0e07",d:"1 \u0e27\u0e31\u0e19",dd:"%d \u0e27\u0e31\u0e19",M:"1 \u0e40\u0e14\u0e37\u0e2d\u0e19",MM:"%d \u0e40\u0e14\u0e37\u0e2d\u0e19",y:"1 \u0e1b\u0e35",yy:"%d \u0e1b\u0e35"}});var gr={1:"'inji",5:"'inji",8:"'inji",70:"'inji",80:"'inji",2:"'nji",7:"'nji",20:"'nji",50:"'nji",3:"'\xfcnji",4:"'\xfcnji",100:"'\xfcnji",6:"'njy",9:"'unjy",10:"'unjy",30:"'unjy",60:"'ynjy",90:"'ynjy"};M.defineLocale("tk",{months:"\xddanwar_Fewral_Mart_Aprel_Ma\xfd_I\xfdun_I\xfdul_Awgust_Sent\xfdabr_Okt\xfdabr_No\xfdabr_Dekabr".split("_"),monthsShort:"\xddan_Few_Mar_Apr_Ma\xfd_I\xfdn_I\xfdl_Awg_Sen_Okt_No\xfd_Dek".split("_"),weekdays:"\xddek\u015fenbe_Du\u015fenbe_Si\u015fenbe_\xc7ar\u015fenbe_Pen\u015fenbe_Anna_\u015eenbe".split("_"),weekdaysShort:"\xddek_Du\u015f_Si\u015f_\xc7ar_Pen_Ann_\u015een".split("_"),weekdaysMin:"\xddk_D\u015f_S\u015f_\xc7r_Pn_An_\u015en".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[bug\xfcn sagat] LT",nextDay:"[ertir sagat] LT",nextWeek:"[indiki] dddd [sagat] LT",lastDay:"[d\xfc\xfdn] LT",lastWeek:"[ge\xe7en] dddd [sagat] LT",sameElse:"L"},relativeTime:{future:"%s so\u0148",past:"%s \xf6\u0148",s:"birn\xe4\xe7e sekunt",m:"bir minut",mm:"%d minut",h:"bir sagat",hh:"%d sagat",d:"bir g\xfcn",dd:"%d g\xfcn",M:"bir a\xfd",MM:"%d a\xfd",y:"bir \xfdyl",yy:"%d \xfdyl"},ordinal:function(e,a){switch(a){case"d":case"D":case"Do":case"DD":return e;default:if(0===e)return e+"'unjy";var t=e%10;return e+(gr[t]||gr[e%100-t]||gr[100<=e?100:null])}},week:{dow:1,doy:7}}),M.defineLocale("tl-ph",{months:"Enero_Pebrero_Marso_Abril_Mayo_Hunyo_Hulyo_Agosto_Setyembre_Oktubre_Nobyembre_Disyembre".split("_"),monthsShort:"Ene_Peb_Mar_Abr_May_Hun_Hul_Ago_Set_Okt_Nob_Dis".split("_"),weekdays:"Linggo_Lunes_Martes_Miyerkules_Huwebes_Biyernes_Sabado".split("_"),weekdaysShort:"Lin_Lun_Mar_Miy_Huw_Biy_Sab".split("_"),weekdaysMin:"Li_Lu_Ma_Mi_Hu_Bi_Sab".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"MM/D/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY HH:mm",LLLL:"dddd, MMMM DD, YYYY HH:mm"},calendar:{sameDay:"LT [ngayong araw]",nextDay:"[Bukas ng] LT",nextWeek:"LT [sa susunod na] dddd",lastDay:"LT [kahapon]",lastWeek:"LT [noong nakaraang] dddd",sameElse:"L"},relativeTime:{future:"sa loob ng %s",past:"%s ang nakalipas",s:"ilang segundo",ss:"%d segundo",m:"isang minuto",mm:"%d minuto",h:"isang oras",hh:"%d oras",d:"isang araw",dd:"%d araw",M:"isang buwan",MM:"%d buwan",y:"isang taon",yy:"%d taon"},dayOfMonthOrdinalParse:/\d{1,2}/,ordinal:function(e){return e},week:{dow:1,doy:4}});var wr="pagh_wa\u2019_cha\u2019_wej_loS_vagh_jav_Soch_chorgh_Hut".split("_");function vr(e,a,t,s){var n=function(e){var a=Math.floor(e%1e3/100),t=Math.floor(e%100/10),s=e%10,n="";0<a&&(n+=wr[a]+"vatlh");0<t&&(n+=(""!==n?" ":"")+wr[t]+"maH");0<s&&(n+=(""!==n?" ":"")+wr[s]);return""===n?"pagh":n}(e);switch(t){case"ss":return n+" lup";case"mm":return n+" tup";case"hh":return n+" rep";case"dd":return n+" jaj";case"MM":return n+" jar";case"yy":return n+" DIS"}}M.defineLocale("tlh",{months:"tera\u2019 jar wa\u2019_tera\u2019 jar cha\u2019_tera\u2019 jar wej_tera\u2019 jar loS_tera\u2019 jar vagh_tera\u2019 jar jav_tera\u2019 jar Soch_tera\u2019 jar chorgh_tera\u2019 jar Hut_tera\u2019 jar wa\u2019maH_tera\u2019 jar wa\u2019maH wa\u2019_tera\u2019 jar wa\u2019maH cha\u2019".split("_"),monthsShort:"jar wa\u2019_jar cha\u2019_jar wej_jar loS_jar vagh_jar jav_jar Soch_jar chorgh_jar Hut_jar wa\u2019maH_jar wa\u2019maH wa\u2019_jar wa\u2019maH cha\u2019".split("_"),monthsParseExact:!0,weekdays:"lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj".split("_"),weekdaysShort:"lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj".split("_"),weekdaysMin:"lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[DaHjaj] LT",nextDay:"[wa\u2019leS] LT",nextWeek:"LLL",lastDay:"[wa\u2019Hu\u2019] LT",lastWeek:"LLL",sameElse:"L"},relativeTime:{future:function(e){var a=e;return a=-1!==e.indexOf("jaj")?a.slice(0,-3)+"leS":-1!==e.indexOf("jar")?a.slice(0,-3)+"waQ":-1!==e.indexOf("DIS")?a.slice(0,-3)+"nem":a+" pIq"},past:function(e){var a=e;return a=-1!==e.indexOf("jaj")?a.slice(0,-3)+"Hu\u2019":-1!==e.indexOf("jar")?a.slice(0,-3)+"wen":-1!==e.indexOf("DIS")?a.slice(0,-3)+"ben":a+" ret"},s:"puS lup",ss:vr,m:"wa\u2019 tup",mm:vr,h:"wa\u2019 rep",hh:vr,d:"wa\u2019 jaj",dd:vr,M:"wa\u2019 jar",MM:vr,y:"wa\u2019 DIS",yy:vr},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}});var br={1:"'inci",5:"'inci",8:"'inci",70:"'inci",80:"'inci",2:"'nci",7:"'nci",20:"'nci",50:"'nci",3:"'\xfcnc\xfc",4:"'\xfcnc\xfc",100:"'\xfcnc\xfc",6:"'nc\u0131",9:"'uncu",10:"'uncu",30:"'uncu",60:"'\u0131nc\u0131",90:"'\u0131nc\u0131"};function Hr(e,a,t,s){var n={s:["viensas secunds","'iensas secunds"],ss:[e+" secunds",e+" secunds"],m:["'n m\xedut","'iens m\xedut"],mm:[e+" m\xeduts",e+" m\xeduts"],h:["'n \xfeora","'iensa \xfeora"],hh:[e+" \xfeoras",e+" \xfeoras"],d:["'n ziua","'iensa ziua"],dd:[e+" ziuas",e+" ziuas"],M:["'n mes","'iens mes"],MM:[e+" mesen",e+" mesen"],y:["'n ar","'iens ar"],yy:[e+" ars",e+" ars"]};return s||a?n[t][0]:n[t][1]}function Sr(e,a,t){var s,n;return"m"===t?a?"\u0445\u0432\u0438\u043b\u0438\u043d\u0430":"\u0445\u0432\u0438\u043b\u0438\u043d\u0443":"h"===t?a?"\u0433\u043e\u0434\u0438\u043d\u0430":"\u0433\u043e\u0434\u0438\u043d\u0443":e+" "+(s=+e,n={ss:a?"\u0441\u0435\u043a\u0443\u043d\u0434\u0430_\u0441\u0435\u043a\u0443\u043d\u0434\u0438_\u0441\u0435\u043a\u0443\u043d\u0434":"\u0441\u0435\u043a\u0443\u043d\u0434\u0443_\u0441\u0435\u043a\u0443\u043d\u0434\u0438_\u0441\u0435\u043a\u0443\u043d\u0434",mm:a?"\u0445\u0432\u0438\u043b\u0438\u043d\u0430_\u0445\u0432\u0438\u043b\u0438\u043d\u0438_\u0445\u0432\u0438\u043b\u0438\u043d":"\u0445\u0432\u0438\u043b\u0438\u043d\u0443_\u0445\u0432\u0438\u043b\u0438\u043d\u0438_\u0445\u0432\u0438\u043b\u0438\u043d",hh:a?"\u0433\u043e\u0434\u0438\u043d\u0430_\u0433\u043e\u0434\u0438\u043d\u0438_\u0433\u043e\u0434\u0438\u043d":"\u0433\u043e\u0434\u0438\u043d\u0443_\u0433\u043e\u0434\u0438\u043d\u0438_\u0433\u043e\u0434\u0438\u043d",dd:"\u0434\u0435\u043d\u044c_\u0434\u043d\u0456_\u0434\u043d\u0456\u0432",MM:"\u043c\u0456\u0441\u044f\u0446\u044c_\u043c\u0456\u0441\u044f\u0446\u0456_\u043c\u0456\u0441\u044f\u0446\u0456\u0432",yy:"\u0440\u0456\u043a_\u0440\u043e\u043a\u0438_\u0440\u043e\u043a\u0456\u0432"}[t].split("_"),s%10==1&&s%100!=11?n[0]:2<=s%10&&s%10<=4&&(s%100<10||20<=s%100)?n[1]:n[2])}function jr(e){return function(){return e+"\u043e"+(11===this.hours()?"\u0431":"")+"] LT"}}M.defineLocale("tr",{months:"Ocak_\u015eubat_Mart_Nisan_May\u0131s_Haziran_Temmuz_A\u011fustos_Eyl\xfcl_Ekim_Kas\u0131m_Aral\u0131k".split("_"),monthsShort:"Oca_\u015eub_Mar_Nis_May_Haz_Tem_A\u011fu_Eyl_Eki_Kas_Ara".split("_"),weekdays:"Pazar_Pazartesi_Sal\u0131_\xc7ar\u015famba_Per\u015fembe_Cuma_Cumartesi".split("_"),weekdaysShort:"Paz_Pts_Sal_\xc7ar_Per_Cum_Cts".split("_"),weekdaysMin:"Pz_Pt_Sa_\xc7a_Pe_Cu_Ct".split("_"),meridiem:function(e,a,t){return e<12?t?"\xf6\xf6":"\xd6\xd6":t?"\xf6s":"\xd6S"},meridiemParse:/\xf6\xf6|\xd6\xd6|\xf6s|\xd6S/,isPM:function(e){return"\xf6s"===e||"\xd6S"===e},longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[bug\xfcn saat] LT",nextDay:"[yar\u0131n saat] LT",nextWeek:"[gelecek] dddd [saat] LT",lastDay:"[d\xfcn] LT",lastWeek:"[ge\xe7en] dddd [saat] LT",sameElse:"L"},relativeTime:{future:"%s sonra",past:"%s \xf6nce",s:"birka\xe7 saniye",ss:"%d saniye",m:"bir dakika",mm:"%d dakika",h:"bir saat",hh:"%d saat",d:"bir g\xfcn",dd:"%d g\xfcn",M:"bir ay",MM:"%d ay",y:"bir y\u0131l",yy:"%d y\u0131l"},ordinal:function(e,a){switch(a){case"d":case"D":case"Do":case"DD":return e;default:if(0===e)return e+"'\u0131nc\u0131";var t=e%10;return e+(br[t]||br[e%100-t]||br[100<=e?100:null])}},week:{dow:1,doy:7}}),M.defineLocale("tzl",{months:"Januar_Fevraglh_Mar\xe7_Avr\xefu_Mai_G\xfcn_Julia_Guscht_Setemvar_Listop\xe4ts_Noemvar_Zecemvar".split("_"),monthsShort:"Jan_Fev_Mar_Avr_Mai_G\xfcn_Jul_Gus_Set_Lis_Noe_Zec".split("_"),weekdays:"S\xfaladi_L\xfane\xe7i_Maitzi_M\xe1rcuri_Xh\xfaadi_Vi\xe9ner\xe7i_S\xe1turi".split("_"),weekdaysShort:"S\xfal_L\xfan_Mai_M\xe1r_Xh\xfa_Vi\xe9_S\xe1t".split("_"),weekdaysMin:"S\xfa_L\xfa_Ma_M\xe1_Xh_Vi_S\xe1".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD.MM.YYYY",LL:"D. MMMM [dallas] YYYY",LLL:"D. MMMM [dallas] YYYY HH.mm",LLLL:"dddd, [li] D. MMMM [dallas] YYYY HH.mm"},meridiemParse:/d\'o|d\'a/i,isPM:function(e){return"d'o"===e.toLowerCase()},meridiem:function(e,a,t){return 11<e?t?"d'o":"D'O":t?"d'a":"D'A"},calendar:{sameDay:"[oxhi \xe0] LT",nextDay:"[dem\xe0 \xe0] LT",nextWeek:"dddd [\xe0] LT",lastDay:"[ieiri \xe0] LT",lastWeek:"[s\xfcr el] dddd [lasteu \xe0] LT",sameElse:"L"},relativeTime:{future:"osprei %s",past:"ja%s",s:Hr,ss:Hr,m:Hr,mm:Hr,h:Hr,hh:Hr,d:Hr,dd:Hr,M:Hr,MM:Hr,y:Hr,yy:Hr},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}}),M.defineLocale("tzm-latn",{months:"innayr_br\u02e4ayr\u02e4_mar\u02e4s\u02e4_ibrir_mayyw_ywnyw_ywlywz_\u0263w\u0161t_\u0161wtanbir_kt\u02e4wbr\u02e4_nwwanbir_dwjnbir".split("_"),monthsShort:"innayr_br\u02e4ayr\u02e4_mar\u02e4s\u02e4_ibrir_mayyw_ywnyw_ywlywz_\u0263w\u0161t_\u0161wtanbir_kt\u02e4wbr\u02e4_nwwanbir_dwjnbir".split("_"),weekdays:"asamas_aynas_asinas_akras_akwas_asimwas_asi\u1e0dyas".split("_"),weekdaysShort:"asamas_aynas_asinas_akras_akwas_asimwas_asi\u1e0dyas".split("_"),weekdaysMin:"asamas_aynas_asinas_akras_akwas_asimwas_asi\u1e0dyas".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[asdkh g] LT",nextDay:"[aska g] LT",nextWeek:"dddd [g] LT",lastDay:"[assant g] LT",lastWeek:"dddd [g] LT",sameElse:"L"},relativeTime:{future:"dadkh s yan %s",past:"yan %s",s:"imik",ss:"%d imik",m:"minu\u1e0d",mm:"%d minu\u1e0d",h:"sa\u025ba",hh:"%d tassa\u025bin",d:"ass",dd:"%d ossan",M:"ayowr",MM:"%d iyyirn",y:"asgas",yy:"%d isgasn"},week:{dow:6,doy:12}}),M.defineLocale("tzm",{months:"\u2d49\u2d4f\u2d4f\u2d30\u2d62\u2d54_\u2d31\u2d55\u2d30\u2d62\u2d55_\u2d4e\u2d30\u2d55\u2d5a_\u2d49\u2d31\u2d54\u2d49\u2d54_\u2d4e\u2d30\u2d62\u2d62\u2d53_\u2d62\u2d53\u2d4f\u2d62\u2d53_\u2d62\u2d53\u2d4d\u2d62\u2d53\u2d63_\u2d56\u2d53\u2d5b\u2d5c_\u2d5b\u2d53\u2d5c\u2d30\u2d4f\u2d31\u2d49\u2d54_\u2d3d\u2d5f\u2d53\u2d31\u2d55_\u2d4f\u2d53\u2d61\u2d30\u2d4f\u2d31\u2d49\u2d54_\u2d37\u2d53\u2d4a\u2d4f\u2d31\u2d49\u2d54".split("_"),monthsShort:"\u2d49\u2d4f\u2d4f\u2d30\u2d62\u2d54_\u2d31\u2d55\u2d30\u2d62\u2d55_\u2d4e\u2d30\u2d55\u2d5a_\u2d49\u2d31\u2d54\u2d49\u2d54_\u2d4e\u2d30\u2d62\u2d62\u2d53_\u2d62\u2d53\u2d4f\u2d62\u2d53_\u2d62\u2d53\u2d4d\u2d62\u2d53\u2d63_\u2d56\u2d53\u2d5b\u2d5c_\u2d5b\u2d53\u2d5c\u2d30\u2d4f\u2d31\u2d49\u2d54_\u2d3d\u2d5f\u2d53\u2d31\u2d55_\u2d4f\u2d53\u2d61\u2d30\u2d4f\u2d31\u2d49\u2d54_\u2d37\u2d53\u2d4a\u2d4f\u2d31\u2d49\u2d54".split("_"),weekdays:"\u2d30\u2d59\u2d30\u2d4e\u2d30\u2d59_\u2d30\u2d62\u2d4f\u2d30\u2d59_\u2d30\u2d59\u2d49\u2d4f\u2d30\u2d59_\u2d30\u2d3d\u2d54\u2d30\u2d59_\u2d30\u2d3d\u2d61\u2d30\u2d59_\u2d30\u2d59\u2d49\u2d4e\u2d61\u2d30\u2d59_\u2d30\u2d59\u2d49\u2d39\u2d62\u2d30\u2d59".split("_"),weekdaysShort:"\u2d30\u2d59\u2d30\u2d4e\u2d30\u2d59_\u2d30\u2d62\u2d4f\u2d30\u2d59_\u2d30\u2d59\u2d49\u2d4f\u2d30\u2d59_\u2d30\u2d3d\u2d54\u2d30\u2d59_\u2d30\u2d3d\u2d61\u2d30\u2d59_\u2d30\u2d59\u2d49\u2d4e\u2d61\u2d30\u2d59_\u2d30\u2d59\u2d49\u2d39\u2d62\u2d30\u2d59".split("_"),weekdaysMin:"\u2d30\u2d59\u2d30\u2d4e\u2d30\u2d59_\u2d30\u2d62\u2d4f\u2d30\u2d59_\u2d30\u2d59\u2d49\u2d4f\u2d30\u2d59_\u2d30\u2d3d\u2d54\u2d30\u2d59_\u2d30\u2d3d\u2d61\u2d30\u2d59_\u2d30\u2d59\u2d49\u2d4e\u2d61\u2d30\u2d59_\u2d30\u2d59\u2d49\u2d39\u2d62\u2d30\u2d59".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[\u2d30\u2d59\u2d37\u2d45 \u2d34] LT",nextDay:"[\u2d30\u2d59\u2d3d\u2d30 \u2d34] LT",nextWeek:"dddd [\u2d34] LT",lastDay:"[\u2d30\u2d5a\u2d30\u2d4f\u2d5c \u2d34] LT",lastWeek:"dddd [\u2d34] LT",sameElse:"L"},relativeTime:{future:"\u2d37\u2d30\u2d37\u2d45 \u2d59 \u2d62\u2d30\u2d4f %s",past:"\u2d62\u2d30\u2d4f %s",s:"\u2d49\u2d4e\u2d49\u2d3d",ss:"%d \u2d49\u2d4e\u2d49\u2d3d",m:"\u2d4e\u2d49\u2d4f\u2d53\u2d3a",mm:"%d \u2d4e\u2d49\u2d4f\u2d53\u2d3a",h:"\u2d59\u2d30\u2d44\u2d30",hh:"%d \u2d5c\u2d30\u2d59\u2d59\u2d30\u2d44\u2d49\u2d4f",d:"\u2d30\u2d59\u2d59",dd:"%d o\u2d59\u2d59\u2d30\u2d4f",M:"\u2d30\u2d62o\u2d53\u2d54",MM:"%d \u2d49\u2d62\u2d62\u2d49\u2d54\u2d4f",y:"\u2d30\u2d59\u2d33\u2d30\u2d59",yy:"%d \u2d49\u2d59\u2d33\u2d30\u2d59\u2d4f"},week:{dow:6,doy:12}}),M.defineLocale("ug-cn",{months:"\u064a\u0627\u0646\u06cb\u0627\u0631_\u0641\u06d0\u06cb\u0631\u0627\u0644_\u0645\u0627\u0631\u062a_\u0626\u0627\u067e\u0631\u06d0\u0644_\u0645\u0627\u064a_\u0626\u0649\u064a\u06c7\u0646_\u0626\u0649\u064a\u06c7\u0644_\u0626\u0627\u06cb\u063a\u06c7\u0633\u062a_\u0633\u06d0\u0646\u062a\u06d5\u0628\u0649\u0631_\u0626\u06c6\u0643\u062a\u06d5\u0628\u0649\u0631_\u0646\u0648\u064a\u0627\u0628\u0649\u0631_\u062f\u06d0\u0643\u0627\u0628\u0649\u0631".split("_"),monthsShort:"\u064a\u0627\u0646\u06cb\u0627\u0631_\u0641\u06d0\u06cb\u0631\u0627\u0644_\u0645\u0627\u0631\u062a_\u0626\u0627\u067e\u0631\u06d0\u0644_\u0645\u0627\u064a_\u0626\u0649\u064a\u06c7\u0646_\u0626\u0649\u064a\u06c7\u0644_\u0626\u0627\u06cb\u063a\u06c7\u0633\u062a_\u0633\u06d0\u0646\u062a\u06d5\u0628\u0649\u0631_\u0626\u06c6\u0643\u062a\u06d5\u0628\u0649\u0631_\u0646\u0648\u064a\u0627\u0628\u0649\u0631_\u062f\u06d0\u0643\u0627\u0628\u0649\u0631".split("_"),weekdays:"\u064a\u06d5\u0643\u0634\u06d5\u0646\u0628\u06d5_\u062f\u06c8\u0634\u06d5\u0646\u0628\u06d5_\u0633\u06d5\u064a\u0634\u06d5\u0646\u0628\u06d5_\u0686\u0627\u0631\u0634\u06d5\u0646\u0628\u06d5_\u067e\u06d5\u064a\u0634\u06d5\u0646\u0628\u06d5_\u062c\u06c8\u0645\u06d5_\u0634\u06d5\u0646\u0628\u06d5".split("_"),weekdaysShort:"\u064a\u06d5_\u062f\u06c8_\u0633\u06d5_\u0686\u0627_\u067e\u06d5_\u062c\u06c8_\u0634\u06d5".split("_"),weekdaysMin:"\u064a\u06d5_\u062f\u06c8_\u0633\u06d5_\u0686\u0627_\u067e\u06d5_\u062c\u06c8_\u0634\u06d5".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"YYYY-\u064a\u0649\u0644\u0649M-\u0626\u0627\u064a\u0646\u0649\u06adD-\u0643\u06c8\u0646\u0649",LLL:"YYYY-\u064a\u0649\u0644\u0649M-\u0626\u0627\u064a\u0646\u0649\u06adD-\u0643\u06c8\u0646\u0649\u060c HH:mm",LLLL:"dddd\u060c YYYY-\u064a\u0649\u0644\u0649M-\u0626\u0627\u064a\u0646\u0649\u06adD-\u0643\u06c8\u0646\u0649\u060c HH:mm"},meridiemParse:/\u064a\u06d0\u0631\u0649\u0645 \u0643\u06d0\u0686\u06d5|\u0633\u06d5\u06be\u06d5\u0631|\u0686\u06c8\u0634\u062a\u0649\u0646 \u0628\u06c7\u0631\u06c7\u0646|\u0686\u06c8\u0634|\u0686\u06c8\u0634\u062a\u0649\u0646 \u0643\u06d0\u064a\u0649\u0646|\u0643\u06d5\u0686/,meridiemHour:function(e,a){return 12===e&&(e=0),"\u064a\u06d0\u0631\u0649\u0645 \u0643\u06d0\u0686\u06d5"===a||"\u0633\u06d5\u06be\u06d5\u0631"===a||"\u0686\u06c8\u0634\u062a\u0649\u0646 \u0628\u06c7\u0631\u06c7\u0646"===a||"\u0686\u06c8\u0634\u062a\u0649\u0646 \u0643\u06d0\u064a\u0649\u0646"!==a&&"\u0643\u06d5\u0686"!==a&&11<=e?e:e+12},meridiem:function(e,a,t){var s=100*e+a;return s<600?"\u064a\u06d0\u0631\u0649\u0645 \u0643\u06d0\u0686\u06d5":s<900?"\u0633\u06d5\u06be\u06d5\u0631":s<1130?"\u0686\u06c8\u0634\u062a\u0649\u0646 \u0628\u06c7\u0631\u06c7\u0646":s<1230?"\u0686\u06c8\u0634":s<1800?"\u0686\u06c8\u0634\u062a\u0649\u0646 \u0643\u06d0\u064a\u0649\u0646":"\u0643\u06d5\u0686"},calendar:{sameDay:"[\u0628\u06c8\u06af\u06c8\u0646 \u0633\u0627\u0626\u06d5\u062a] LT",nextDay:"[\u0626\u06d5\u062a\u06d5 \u0633\u0627\u0626\u06d5\u062a] LT",nextWeek:"[\u0643\u06d0\u0644\u06d5\u0631\u0643\u0649] dddd [\u0633\u0627\u0626\u06d5\u062a] LT",lastDay:"[\u062a\u06c6\u0646\u06c8\u06af\u06c8\u0646] LT",lastWeek:"[\u0626\u0627\u0644\u062f\u0649\u0646\u0642\u0649] dddd [\u0633\u0627\u0626\u06d5\u062a] LT",sameElse:"L"},relativeTime:{future:"%s \u0643\u06d0\u064a\u0649\u0646",past:"%s \u0628\u06c7\u0631\u06c7\u0646",s:"\u0646\u06d5\u0686\u0686\u06d5 \u0633\u06d0\u0643\u0648\u0646\u062a",ss:"%d \u0633\u06d0\u0643\u0648\u0646\u062a",m:"\u0628\u0649\u0631 \u0645\u0649\u0646\u06c7\u062a",mm:"%d \u0645\u0649\u0646\u06c7\u062a",h:"\u0628\u0649\u0631 \u0633\u0627\u0626\u06d5\u062a",hh:"%d \u0633\u0627\u0626\u06d5\u062a",d:"\u0628\u0649\u0631 \u0643\u06c8\u0646",dd:"%d \u0643\u06c8\u0646",M:"\u0628\u0649\u0631 \u0626\u0627\u064a",MM:"%d \u0626\u0627\u064a",y:"\u0628\u0649\u0631 \u064a\u0649\u0644",yy:"%d \u064a\u0649\u0644"},dayOfMonthOrdinalParse:/\d{1,2}(-\u0643\u06c8\u0646\u0649|-\u0626\u0627\u064a|-\u06be\u06d5\u067e\u062a\u06d5)/,ordinal:function(e,a){switch(a){case"d":case"D":case"DDD":return e+"-\u0643\u06c8\u0646\u0649";case"w":case"W":return e+"-\u06be\u06d5\u067e\u062a\u06d5";default:return e}},preparse:function(e){return e.replace(/\u060c/g,",")},postformat:function(e){return e.replace(/,/g,"\u060c")},week:{dow:1,doy:7}}),M.defineLocale("uk",{months:{format:"\u0441\u0456\u0447\u043d\u044f_\u043b\u044e\u0442\u043e\u0433\u043e_\u0431\u0435\u0440\u0435\u0437\u043d\u044f_\u043a\u0432\u0456\u0442\u043d\u044f_\u0442\u0440\u0430\u0432\u043d\u044f_\u0447\u0435\u0440\u0432\u043d\u044f_\u043b\u0438\u043f\u043d\u044f_\u0441\u0435\u0440\u043f\u043d\u044f_\u0432\u0435\u0440\u0435\u0441\u043d\u044f_\u0436\u043e\u0432\u0442\u043d\u044f_\u043b\u0438\u0441\u0442\u043e\u043f\u0430\u0434\u0430_\u0433\u0440\u0443\u0434\u043d\u044f".split("_"),standalone:"\u0441\u0456\u0447\u0435\u043d\u044c_\u043b\u044e\u0442\u0438\u0439_\u0431\u0435\u0440\u0435\u0437\u0435\u043d\u044c_\u043a\u0432\u0456\u0442\u0435\u043d\u044c_\u0442\u0440\u0430\u0432\u0435\u043d\u044c_\u0447\u0435\u0440\u0432\u0435\u043d\u044c_\u043b\u0438\u043f\u0435\u043d\u044c_\u0441\u0435\u0440\u043f\u0435\u043d\u044c_\u0432\u0435\u0440\u0435\u0441\u0435\u043d\u044c_\u0436\u043e\u0432\u0442\u0435\u043d\u044c_\u043b\u0438\u0441\u0442\u043e\u043f\u0430\u0434_\u0433\u0440\u0443\u0434\u0435\u043d\u044c".split("_")},monthsShort:"\u0441\u0456\u0447_\u043b\u044e\u0442_\u0431\u0435\u0440_\u043a\u0432\u0456\u0442_\u0442\u0440\u0430\u0432_\u0447\u0435\u0440\u0432_\u043b\u0438\u043f_\u0441\u0435\u0440\u043f_\u0432\u0435\u0440_\u0436\u043e\u0432\u0442_\u043b\u0438\u0441\u0442_\u0433\u0440\u0443\u0434".split("_"),weekdays:function(e,a){var t={nominative:"\u043d\u0435\u0434\u0456\u043b\u044f_\u043f\u043e\u043d\u0435\u0434\u0456\u043b\u043e\u043a_\u0432\u0456\u0432\u0442\u043e\u0440\u043e\u043a_\u0441\u0435\u0440\u0435\u0434\u0430_\u0447\u0435\u0442\u0432\u0435\u0440_\u043f\u2019\u044f\u0442\u043d\u0438\u0446\u044f_\u0441\u0443\u0431\u043e\u0442\u0430".split("_"),accusative:"\u043d\u0435\u0434\u0456\u043b\u044e_\u043f\u043e\u043d\u0435\u0434\u0456\u043b\u043e\u043a_\u0432\u0456\u0432\u0442\u043e\u0440\u043e\u043a_\u0441\u0435\u0440\u0435\u0434\u0443_\u0447\u0435\u0442\u0432\u0435\u0440_\u043f\u2019\u044f\u0442\u043d\u0438\u0446\u044e_\u0441\u0443\u0431\u043e\u0442\u0443".split("_"),genitive:"\u043d\u0435\u0434\u0456\u043b\u0456_\u043f\u043e\u043d\u0435\u0434\u0456\u043b\u043a\u0430_\u0432\u0456\u0432\u0442\u043e\u0440\u043a\u0430_\u0441\u0435\u0440\u0435\u0434\u0438_\u0447\u0435\u0442\u0432\u0435\u0440\u0433\u0430_\u043f\u2019\u044f\u0442\u043d\u0438\u0446\u0456_\u0441\u0443\u0431\u043e\u0442\u0438".split("_")};return!0===e?t.nominative.slice(1,7).concat(t.nominative.slice(0,1)):e?t[/(\[[\u0412\u0432\u0423\u0443]\]) ?dddd/.test(a)?"accusative":/\[?(?:\u043c\u0438\u043d\u0443\u043b\u043e\u0457|\u043d\u0430\u0441\u0442\u0443\u043f\u043d\u043e\u0457)? ?\] ?dddd/.test(a)?"genitive":"nominative"][e.day()]:t.nominative},weekdaysShort:"\u043d\u0434_\u043f\u043d_\u0432\u0442_\u0441\u0440_\u0447\u0442_\u043f\u0442_\u0441\u0431".split("_"),weekdaysMin:"\u043d\u0434_\u043f\u043d_\u0432\u0442_\u0441\u0440_\u0447\u0442_\u043f\u0442_\u0441\u0431".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY \u0440.",LLL:"D MMMM YYYY \u0440., HH:mm",LLLL:"dddd, D MMMM YYYY \u0440., HH:mm"},calendar:{sameDay:jr("[\u0421\u044c\u043e\u0433\u043e\u0434\u043d\u0456 "),nextDay:jr("[\u0417\u0430\u0432\u0442\u0440\u0430 "),lastDay:jr("[\u0412\u0447\u043e\u0440\u0430 "),nextWeek:jr("[\u0423] dddd ["),lastWeek:function(){switch(this.day()){case 0:case 3:case 5:case 6:return jr("[\u041c\u0438\u043d\u0443\u043b\u043e\u0457] dddd [").call(this);case 1:case 2:case 4:return jr("[\u041c\u0438\u043d\u0443\u043b\u043e\u0433\u043e] dddd [").call(this)}},sameElse:"L"},relativeTime:{future:"\u0437\u0430 %s",past:"%s \u0442\u043e\u043c\u0443",s:"\u0434\u0435\u043a\u0456\u043b\u044c\u043a\u0430 \u0441\u0435\u043a\u0443\u043d\u0434",ss:Sr,m:Sr,mm:Sr,h:"\u0433\u043e\u0434\u0438\u043d\u0443",hh:Sr,d:"\u0434\u0435\u043d\u044c",dd:Sr,M:"\u043c\u0456\u0441\u044f\u0446\u044c",MM:Sr,y:"\u0440\u0456\u043a",yy:Sr},meridiemParse:/\u043d\u043e\u0447\u0456|\u0440\u0430\u043d\u043a\u0443|\u0434\u043d\u044f|\u0432\u0435\u0447\u043e\u0440\u0430/,isPM:function(e){return/^(\u0434\u043d\u044f|\u0432\u0435\u0447\u043e\u0440\u0430)$/.test(e)},meridiem:function(e,a,t){return e<4?"\u043d\u043e\u0447\u0456":e<12?"\u0440\u0430\u043d\u043a\u0443":e<17?"\u0434\u043d\u044f":"\u0432\u0435\u0447\u043e\u0440\u0430"},dayOfMonthOrdinalParse:/\d{1,2}-(\u0439|\u0433\u043e)/,ordinal:function(e,a){switch(a){case"M":case"d":case"DDD":case"w":case"W":return e+"-\u0439";case"D":return e+"-\u0433\u043e";default:return e}},week:{dow:1,doy:7}});var xr=["\u062c\u0646\u0648\u0631\u06cc","\u0641\u0631\u0648\u0631\u06cc","\u0645\u0627\u0631\u0686","\u0627\u067e\u0631\u06cc\u0644","\u0645\u0626\u06cc","\u062c\u0648\u0646","\u062c\u0648\u0644\u0627\u0626\u06cc","\u0627\u06af\u0633\u062a","\u0633\u062a\u0645\u0628\u0631","\u0627\u06a9\u062a\u0648\u0628\u0631","\u0646\u0648\u0645\u0628\u0631","\u062f\u0633\u0645\u0628\u0631"],Or=["\u0627\u062a\u0648\u0627\u0631","\u067e\u06cc\u0631","\u0645\u0646\u06af\u0644","\u0628\u062f\u06be","\u062c\u0645\u0639\u0631\u0627\u062a","\u062c\u0645\u0639\u06c1","\u06c1\u0641\u062a\u06c1"];return M.defineLocale("ur",{months:xr,monthsShort:xr,weekdays:Or,weekdaysShort:Or,weekdaysMin:Or,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd\u060c D MMMM YYYY HH:mm"},meridiemParse:/\u0635\u0628\u062d|\u0634\u0627\u0645/,isPM:function(e){return"\u0634\u0627\u0645"===e},meridiem:function(e,a,t){return e<12?"\u0635\u0628\u062d":"\u0634\u0627\u0645"},calendar:{sameDay:"[\u0622\u062c \u0628\u0648\u0642\u062a] LT",nextDay:"[\u06a9\u0644 \u0628\u0648\u0642\u062a] LT",nextWeek:"dddd [\u0628\u0648\u0642\u062a] LT",lastDay:"[\u06af\u0630\u0634\u062a\u06c1 \u0631\u0648\u0632 \u0628\u0648\u0642\u062a] LT",lastWeek:"[\u06af\u0630\u0634\u062a\u06c1] dddd [\u0628\u0648\u0642\u062a] LT",sameElse:"L"},relativeTime:{future:"%s \u0628\u0639\u062f",past:"%s \u0642\u0628\u0644",s:"\u0686\u0646\u062f \u0633\u06cc\u06a9\u0646\u0688",ss:"%d \u0633\u06cc\u06a9\u0646\u0688",m:"\u0627\u06cc\u06a9 \u0645\u0646\u0679",mm:"%d \u0645\u0646\u0679",h:"\u0627\u06cc\u06a9 \u06af\u06be\u0646\u0679\u06c1",hh:"%d \u06af\u06be\u0646\u0679\u06d2",d:"\u0627\u06cc\u06a9 \u062f\u0646",dd:"%d \u062f\u0646",M:"\u0627\u06cc\u06a9 \u0645\u0627\u06c1",MM:"%d \u0645\u0627\u06c1",y:"\u0627\u06cc\u06a9 \u0633\u0627\u0644",yy:"%d \u0633\u0627\u0644"},preparse:function(e){return e.replace(/\u060c/g,",")},postformat:function(e){return e.replace(/,/g,"\u060c")},week:{dow:1,doy:4}}),M.defineLocale("uz-latn",{months:"Yanvar_Fevral_Mart_Aprel_May_Iyun_Iyul_Avgust_Sentabr_Oktabr_Noyabr_Dekabr".split("_"),monthsShort:"Yan_Fev_Mar_Apr_May_Iyun_Iyul_Avg_Sen_Okt_Noy_Dek".split("_"),weekdays:"Yakshanba_Dushanba_Seshanba_Chorshanba_Payshanba_Juma_Shanba".split("_"),weekdaysShort:"Yak_Dush_Sesh_Chor_Pay_Jum_Shan".split("_"),weekdaysMin:"Ya_Du_Se_Cho_Pa_Ju_Sha".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"D MMMM YYYY, dddd HH:mm"},calendar:{sameDay:"[Bugun soat] LT [da]",nextDay:"[Ertaga] LT [da]",nextWeek:"dddd [kuni soat] LT [da]",lastDay:"[Kecha soat] LT [da]",lastWeek:"[O'tgan] dddd [kuni soat] LT [da]",sameElse:"L"},relativeTime:{future:"Yaqin %s ichida",past:"Bir necha %s oldin",s:"soniya",ss:"%d soniya",m:"bir daqiqa",mm:"%d daqiqa",h:"bir soat",hh:"%d soat",d:"bir kun",dd:"%d kun",M:"bir oy",MM:"%d oy",y:"bir yil",yy:"%d yil"},week:{dow:1,doy:7}}),M.defineLocale("uz",{months:"\u044f\u043d\u0432\u0430\u0440_\u0444\u0435\u0432\u0440\u0430\u043b_\u043c\u0430\u0440\u0442_\u0430\u043f\u0440\u0435\u043b_\u043c\u0430\u0439_\u0438\u044e\u043d_\u0438\u044e\u043b_\u0430\u0432\u0433\u0443\u0441\u0442_\u0441\u0435\u043d\u0442\u044f\u0431\u0440_\u043e\u043a\u0442\u044f\u0431\u0440_\u043d\u043e\u044f\u0431\u0440_\u0434\u0435\u043a\u0430\u0431\u0440".split("_"),monthsShort:"\u044f\u043d\u0432_\u0444\u0435\u0432_\u043c\u0430\u0440_\u0430\u043f\u0440_\u043c\u0430\u0439_\u0438\u044e\u043d_\u0438\u044e\u043b_\u0430\u0432\u0433_\u0441\u0435\u043d_\u043e\u043a\u0442_\u043d\u043e\u044f_\u0434\u0435\u043a".split("_"),weekdays:"\u042f\u043a\u0448\u0430\u043d\u0431\u0430_\u0414\u0443\u0448\u0430\u043d\u0431\u0430_\u0421\u0435\u0448\u0430\u043d\u0431\u0430_\u0427\u043e\u0440\u0448\u0430\u043d\u0431\u0430_\u041f\u0430\u0439\u0448\u0430\u043d\u0431\u0430_\u0416\u0443\u043c\u0430_\u0428\u0430\u043d\u0431\u0430".split("_"),weekdaysShort:"\u042f\u043a\u0448_\u0414\u0443\u0448_\u0421\u0435\u0448_\u0427\u043e\u0440_\u041f\u0430\u0439_\u0416\u0443\u043c_\u0428\u0430\u043d".split("_"),weekdaysMin:"\u042f\u043a_\u0414\u0443_\u0421\u0435_\u0427\u043e_\u041f\u0430_\u0416\u0443_\u0428\u0430".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"D MMMM YYYY, dddd HH:mm"},calendar:{sameDay:"[\u0411\u0443\u0433\u0443\u043d \u0441\u043e\u0430\u0442] LT [\u0434\u0430]",nextDay:"[\u042d\u0440\u0442\u0430\u0433\u0430] LT [\u0434\u0430]",nextWeek:"dddd [\u043a\u0443\u043d\u0438 \u0441\u043e\u0430\u0442] LT [\u0434\u0430]",lastDay:"[\u041a\u0435\u0447\u0430 \u0441\u043e\u0430\u0442] LT [\u0434\u0430]",lastWeek:"[\u0423\u0442\u0433\u0430\u043d] dddd [\u043a\u0443\u043d\u0438 \u0441\u043e\u0430\u0442] LT [\u0434\u0430]",sameElse:"L"},relativeTime:{future:"\u042f\u043a\u0438\u043d %s \u0438\u0447\u0438\u0434\u0430",past:"\u0411\u0438\u0440 \u043d\u0435\u0447\u0430 %s \u043e\u043b\u0434\u0438\u043d",s:"\u0444\u0443\u0440\u0441\u0430\u0442",ss:"%d \u0444\u0443\u0440\u0441\u0430\u0442",m:"\u0431\u0438\u0440 \u0434\u0430\u043a\u0438\u043a\u0430",mm:"%d \u0434\u0430\u043a\u0438\u043a\u0430",h:"\u0431\u0438\u0440 \u0441\u043e\u0430\u0442",hh:"%d \u0441\u043e\u0430\u0442",d:"\u0431\u0438\u0440 \u043a\u0443\u043d",dd:"%d \u043a\u0443\u043d",M:"\u0431\u0438\u0440 \u043e\u0439",MM:"%d \u043e\u0439",y:"\u0431\u0438\u0440 \u0439\u0438\u043b",yy:"%d \u0439\u0438\u043b"},week:{dow:1,doy:7}}),M.defineLocale("vi",{months:"th\xe1ng 1_th\xe1ng 2_th\xe1ng 3_th\xe1ng 4_th\xe1ng 5_th\xe1ng 6_th\xe1ng 7_th\xe1ng 8_th\xe1ng 9_th\xe1ng 10_th\xe1ng 11_th\xe1ng 12".split("_"),monthsShort:"Thg 01_Thg 02_Thg 03_Thg 04_Thg 05_Thg 06_Thg 07_Thg 08_Thg 09_Thg 10_Thg 11_Thg 12".split("_"),monthsParseExact:!0,weekdays:"ch\u1ee7 nh\u1eadt_th\u1ee9 hai_th\u1ee9 ba_th\u1ee9 t\u01b0_th\u1ee9 n\u0103m_th\u1ee9 s\xe1u_th\u1ee9 b\u1ea3y".split("_"),weekdaysShort:"CN_T2_T3_T4_T5_T6_T7".split("_"),weekdaysMin:"CN_T2_T3_T4_T5_T6_T7".split("_"),weekdaysParseExact:!0,meridiemParse:/sa|ch/i,isPM:function(e){return/^ch$/i.test(e)},meridiem:function(e,a,t){return e<12?t?"sa":"SA":t?"ch":"CH"},longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM [n\u0103m] YYYY",LLL:"D MMMM [n\u0103m] YYYY HH:mm",LLLL:"dddd, D MMMM [n\u0103m] YYYY HH:mm",l:"DD/M/YYYY",ll:"D MMM YYYY",lll:"D MMM YYYY HH:mm",llll:"ddd, D MMM YYYY HH:mm"},calendar:{sameDay:"[H\xf4m nay l\xfac] LT",nextDay:"[Ng\xe0y mai l\xfac] LT",nextWeek:"dddd [tu\u1ea7n t\u1edbi l\xfac] LT",lastDay:"[H\xf4m qua l\xfac] LT",lastWeek:"dddd [tu\u1ea7n tr\u01b0\u1edbc l\xfac] LT",sameElse:"L"},relativeTime:{future:"%s t\u1edbi",past:"%s tr\u01b0\u1edbc",s:"v\xe0i gi\xe2y",ss:"%d gi\xe2y",m:"m\u1ed9t ph\xfat",mm:"%d ph\xfat",h:"m\u1ed9t gi\u1edd",hh:"%d gi\u1edd",d:"m\u1ed9t ng\xe0y",dd:"%d ng\xe0y",M:"m\u1ed9t th\xe1ng",MM:"%d th\xe1ng",y:"m\u1ed9t n\u0103m",yy:"%d n\u0103m"},dayOfMonthOrdinalParse:/\d{1,2}/,ordinal:function(e){return e},week:{dow:1,doy:4}}),M.defineLocale("x-pseudo",{months:"J~\xe1\xf1\xfa\xe1~r\xfd_F~\xe9br\xfa~\xe1r\xfd_~M\xe1rc~h_\xc1p~r\xedl_~M\xe1\xfd_~J\xfa\xf1\xe9~_J\xfal~\xfd_\xc1\xfa~g\xfast~_S\xe9p~t\xe9mb~\xe9r_\xd3~ct\xf3b~\xe9r_\xd1~\xf3v\xe9m~b\xe9r_~D\xe9c\xe9~mb\xe9r".split("_"),monthsShort:"J~\xe1\xf1_~F\xe9b_~M\xe1r_~\xc1pr_~M\xe1\xfd_~J\xfa\xf1_~J\xfal_~\xc1\xfag_~S\xe9p_~\xd3ct_~\xd1\xf3v_~D\xe9c".split("_"),monthsParseExact:!0,weekdays:"S~\xfa\xf1d\xe1~\xfd_M\xf3~\xf1d\xe1\xfd~_T\xfa\xe9~sd\xe1\xfd~_W\xe9d~\xf1\xe9sd~\xe1\xfd_T~h\xfars~d\xe1\xfd_~Fr\xedd~\xe1\xfd_S~\xe1t\xfar~d\xe1\xfd".split("_"),weekdaysShort:"S~\xfa\xf1_~M\xf3\xf1_~T\xfa\xe9_~W\xe9d_~Th\xfa_~Fr\xed_~S\xe1t".split("_"),weekdaysMin:"S~\xfa_M\xf3~_T\xfa_~W\xe9_T~h_Fr~_S\xe1".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[T~\xf3d\xe1~\xfd \xe1t] LT",nextDay:"[T~\xf3m\xf3~rr\xf3~w \xe1t] LT",nextWeek:"dddd [\xe1t] LT",lastDay:"[\xdd~\xe9st~\xe9rd\xe1~\xfd \xe1t] LT",lastWeek:"[L~\xe1st] dddd [\xe1t] LT",sameElse:"L"},relativeTime:{future:"\xed~\xf1 %s",past:"%s \xe1~g\xf3",s:"\xe1 ~f\xe9w ~s\xe9c\xf3~\xf1ds",ss:"%d s~\xe9c\xf3\xf1~ds",m:"\xe1 ~m\xed\xf1~\xfat\xe9",mm:"%d m~\xed\xf1\xfa~t\xe9s",h:"\xe1~\xf1 h\xf3~\xfar",hh:"%d h~\xf3\xfars",d:"\xe1 ~d\xe1\xfd",dd:"%d d~\xe1\xfds",M:"\xe1 ~m\xf3\xf1~th",MM:"%d m~\xf3\xf1t~hs",y:"\xe1 ~\xfd\xe9\xe1r",yy:"%d \xfd~\xe9\xe1rs"},dayOfMonthOrdinalParse:/\d{1,2}(th|st|nd|rd)/,ordinal:function(e){var a=e%10;return e+(1==~~(e%100/10)?"th":1==a?"st":2==a?"nd":3==a?"rd":"th")},week:{dow:1,doy:4}}),M.defineLocale("yo",{months:"S\u1eb9\u0301r\u1eb9\u0301_E\u0300re\u0300le\u0300_\u1eb8r\u1eb9\u0300na\u0300_I\u0300gbe\u0301_E\u0300bibi_O\u0300ku\u0300du_Ag\u1eb9mo_O\u0300gu\u0301n_Owewe_\u1ecc\u0300wa\u0300ra\u0300_Be\u0301lu\u0301_\u1ecc\u0300p\u1eb9\u0300\u0300".split("_"),monthsShort:"S\u1eb9\u0301r_E\u0300rl_\u1eb8rn_I\u0300gb_E\u0300bi_O\u0300ku\u0300_Ag\u1eb9_O\u0300gu\u0301_Owe_\u1ecc\u0300wa\u0300_Be\u0301l_\u1ecc\u0300p\u1eb9\u0300\u0300".split("_"),weekdays:"A\u0300i\u0300ku\u0301_Aje\u0301_I\u0300s\u1eb9\u0301gun_\u1eccj\u1ecd\u0301ru\u0301_\u1eccj\u1ecd\u0301b\u1ecd_\u1eb8ti\u0300_A\u0300ba\u0301m\u1eb9\u0301ta".split("_"),weekdaysShort:"A\u0300i\u0300k_Aje\u0301_I\u0300s\u1eb9\u0301_\u1eccjr_\u1eccjb_\u1eb8ti\u0300_A\u0300ba\u0301".split("_"),weekdaysMin:"A\u0300i\u0300_Aj_I\u0300s_\u1eccr_\u1eccb_\u1eb8t_A\u0300b".split("_"),longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendar:{sameDay:"[O\u0300ni\u0300 ni] LT",nextDay:"[\u1ecc\u0300la ni] LT",nextWeek:"dddd [\u1eccs\u1eb9\u0300 to\u0301n'b\u1ecd] [ni] LT",lastDay:"[A\u0300na ni] LT",lastWeek:"dddd [\u1eccs\u1eb9\u0300 to\u0301l\u1ecd\u0301] [ni] LT",sameElse:"L"},relativeTime:{future:"ni\u0301 %s",past:"%s k\u1ecdja\u0301",s:"i\u0300s\u1eb9ju\u0301 aaya\u0301 die",ss:"aaya\u0301 %d",m:"i\u0300s\u1eb9ju\u0301 kan",mm:"i\u0300s\u1eb9ju\u0301 %d",h:"wa\u0301kati kan",hh:"wa\u0301kati %d",d:"\u1ecdj\u1ecd\u0301 kan",dd:"\u1ecdj\u1ecd\u0301 %d",M:"osu\u0300 kan",MM:"osu\u0300 %d",y:"\u1ecddu\u0301n kan",yy:"\u1ecddu\u0301n %d"},dayOfMonthOrdinalParse:/\u1ecdj\u1ecd\u0301\s\d{1,2}/,ordinal:"\u1ecdj\u1ecd\u0301 %d",week:{dow:1,doy:4}}),M.defineLocale("zh-cn",{months:"\u4e00\u6708_\u4e8c\u6708_\u4e09\u6708_\u56db\u6708_\u4e94\u6708_\u516d\u6708_\u4e03\u6708_\u516b\u6708_\u4e5d\u6708_\u5341\u6708_\u5341\u4e00\u6708_\u5341\u4e8c\u6708".split("_"),monthsShort:"1\u6708_2\u6708_3\u6708_4\u6708_5\u6708_6\u6708_7\u6708_8\u6708_9\u6708_10\u6708_11\u6708_12\u6708".split("_"),weekdays:"\u661f\u671f\u65e5_\u661f\u671f\u4e00_\u661f\u671f\u4e8c_\u661f\u671f\u4e09_\u661f\u671f\u56db_\u661f\u671f\u4e94_\u661f\u671f\u516d".split("_"),weekdaysShort:"\u5468\u65e5_\u5468\u4e00_\u5468\u4e8c_\u5468\u4e09_\u5468\u56db_\u5468\u4e94_\u5468\u516d".split("_"),weekdaysMin:"\u65e5_\u4e00_\u4e8c_\u4e09_\u56db_\u4e94_\u516d".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY/MM/DD",LL:"YYYY\u5e74M\u6708D\u65e5",LLL:"YYYY\u5e74M\u6708D\u65e5Ah\u70b9mm\u5206",LLLL:"YYYY\u5e74M\u6708D\u65e5ddddAh\u70b9mm\u5206",l:"YYYY/M/D",ll:"YYYY\u5e74M\u6708D\u65e5",lll:"YYYY\u5e74M\u6708D\u65e5 HH:mm",llll:"YYYY\u5e74M\u6708D\u65e5dddd HH:mm"},meridiemParse:/\u51cc\u6668|\u65e9\u4e0a|\u4e0a\u5348|\u4e2d\u5348|\u4e0b\u5348|\u665a\u4e0a/,meridiemHour:function(e,a){return 12===e&&(e=0),"\u51cc\u6668"===a||"\u65e9\u4e0a"===a||"\u4e0a\u5348"===a||"\u4e0b\u5348"!==a&&"\u665a\u4e0a"!==a&&11<=e?e:e+12},meridiem:function(e,a,t){var s=100*e+a;return s<600?"\u51cc\u6668":s<900?"\u65e9\u4e0a":s<1130?"\u4e0a\u5348":s<1230?"\u4e2d\u5348":s<1800?"\u4e0b\u5348":"\u665a\u4e0a"},calendar:{sameDay:"[\u4eca\u5929]LT",nextDay:"[\u660e\u5929]LT",nextWeek:function(e){return e.week()!==this.week()?"[\u4e0b]dddLT":"[\u672c]dddLT"},lastDay:"[\u6628\u5929]LT",lastWeek:function(e){return this.week()!==e.week()?"[\u4e0a]dddLT":"[\u672c]dddLT"},sameElse:"L"},dayOfMonthOrdinalParse:/\d{1,2}(\u65e5|\u6708|\u5468)/,ordinal:function(e,a){switch(a){case"d":case"D":case"DDD":return e+"\u65e5";case"M":return e+"\u6708";case"w":case"W":return e+"\u5468";default:return e}},relativeTime:{future:"%s\u540e",past:"%s\u524d",s:"\u51e0\u79d2",ss:"%d \u79d2",m:"1 \u5206\u949f",mm:"%d \u5206\u949f",h:"1 \u5c0f\u65f6",hh:"%d \u5c0f\u65f6",d:"1 \u5929",dd:"%d \u5929",M:"1 \u4e2a\u6708",MM:"%d \u4e2a\u6708",y:"1 \u5e74",yy:"%d \u5e74"},week:{dow:1,doy:4}}),M.defineLocale("zh-hk",{months:"\u4e00\u6708_\u4e8c\u6708_\u4e09\u6708_\u56db\u6708_\u4e94\u6708_\u516d\u6708_\u4e03\u6708_\u516b\u6708_\u4e5d\u6708_\u5341\u6708_\u5341\u4e00\u6708_\u5341\u4e8c\u6708".split("_"),monthsShort:"1\u6708_2\u6708_3\u6708_4\u6708_5\u6708_6\u6708_7\u6708_8\u6708_9\u6708_10\u6708_11\u6708_12\u6708".split("_"),weekdays:"\u661f\u671f\u65e5_\u661f\u671f\u4e00_\u661f\u671f\u4e8c_\u661f\u671f\u4e09_\u661f\u671f\u56db_\u661f\u671f\u4e94_\u661f\u671f\u516d".split("_"),weekdaysShort:"\u9031\u65e5_\u9031\u4e00_\u9031\u4e8c_\u9031\u4e09_\u9031\u56db_\u9031\u4e94_\u9031\u516d".split("_"),weekdaysMin:"\u65e5_\u4e00_\u4e8c_\u4e09_\u56db_\u4e94_\u516d".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY/MM/DD",LL:"YYYY\u5e74M\u6708D\u65e5",LLL:"YYYY\u5e74M\u6708D\u65e5 HH:mm",LLLL:"YYYY\u5e74M\u6708D\u65e5dddd HH:mm",l:"YYYY/M/D",ll:"YYYY\u5e74M\u6708D\u65e5",lll:"YYYY\u5e74M\u6708D\u65e5 HH:mm",llll:"YYYY\u5e74M\u6708D\u65e5dddd HH:mm"},meridiemParse:/\u51cc\u6668|\u65e9\u4e0a|\u4e0a\u5348|\u4e2d\u5348|\u4e0b\u5348|\u665a\u4e0a/,meridiemHour:function(e,a){return 12===e&&(e=0),"\u51cc\u6668"===a||"\u65e9\u4e0a"===a||"\u4e0a\u5348"===a?e:"\u4e2d\u5348"===a?11<=e?e:e+12:"\u4e0b\u5348"===a||"\u665a\u4e0a"===a?e+12:void 0},meridiem:function(e,a,t){var s=100*e+a;return s<600?"\u51cc\u6668":s<900?"\u65e9\u4e0a":s<1200?"\u4e0a\u5348":1200===s?"\u4e2d\u5348":s<1800?"\u4e0b\u5348":"\u665a\u4e0a"},calendar:{sameDay:"[\u4eca\u5929]LT",nextDay:"[\u660e\u5929]LT",nextWeek:"[\u4e0b]ddddLT",lastDay:"[\u6628\u5929]LT",lastWeek:"[\u4e0a]ddddLT",sameElse:"L"},dayOfMonthOrdinalParse:/\d{1,2}(\u65e5|\u6708|\u9031)/,ordinal:function(e,a){switch(a){case"d":case"D":case"DDD":return e+"\u65e5";case"M":return e+"\u6708";case"w":case"W":return e+"\u9031";default:return e}},relativeTime:{future:"%s\u5f8c",past:"%s\u524d",s:"\u5e7e\u79d2",ss:"%d \u79d2",m:"1 \u5206\u9418",mm:"%d \u5206\u9418",h:"1 \u5c0f\u6642",hh:"%d \u5c0f\u6642",d:"1 \u5929",dd:"%d \u5929",M:"1 \u500b\u6708",MM:"%d \u500b\u6708",y:"1 \u5e74",yy:"%d \u5e74"}}),M.defineLocale("zh-mo",{months:"\u4e00\u6708_\u4e8c\u6708_\u4e09\u6708_\u56db\u6708_\u4e94\u6708_\u516d\u6708_\u4e03\u6708_\u516b\u6708_\u4e5d\u6708_\u5341\u6708_\u5341\u4e00\u6708_\u5341\u4e8c\u6708".split("_"),monthsShort:"1\u6708_2\u6708_3\u6708_4\u6708_5\u6708_6\u6708_7\u6708_8\u6708_9\u6708_10\u6708_11\u6708_12\u6708".split("_"),weekdays:"\u661f\u671f\u65e5_\u661f\u671f\u4e00_\u661f\u671f\u4e8c_\u661f\u671f\u4e09_\u661f\u671f\u56db_\u661f\u671f\u4e94_\u661f\u671f\u516d".split("_"),weekdaysShort:"\u9031\u65e5_\u9031\u4e00_\u9031\u4e8c_\u9031\u4e09_\u9031\u56db_\u9031\u4e94_\u9031\u516d".split("_"),weekdaysMin:"\u65e5_\u4e00_\u4e8c_\u4e09_\u56db_\u4e94_\u516d".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"YYYY\u5e74M\u6708D\u65e5",LLL:"YYYY\u5e74M\u6708D\u65e5 HH:mm",LLLL:"YYYY\u5e74M\u6708D\u65e5dddd HH:mm",l:"D/M/YYYY",ll:"YYYY\u5e74M\u6708D\u65e5",lll:"YYYY\u5e74M\u6708D\u65e5 HH:mm",llll:"YYYY\u5e74M\u6708D\u65e5dddd HH:mm"},meridiemParse:/\u51cc\u6668|\u65e9\u4e0a|\u4e0a\u5348|\u4e2d\u5348|\u4e0b\u5348|\u665a\u4e0a/,meridiemHour:function(e,a){return 12===e&&(e=0),"\u51cc\u6668"===a||"\u65e9\u4e0a"===a||"\u4e0a\u5348"===a?e:"\u4e2d\u5348"===a?11<=e?e:e+12:"\u4e0b\u5348"===a||"\u665a\u4e0a"===a?e+12:void 0},meridiem:function(e,a,t){var s=100*e+a;return s<600?"\u51cc\u6668":s<900?"\u65e9\u4e0a":s<1130?"\u4e0a\u5348":s<1230?"\u4e2d\u5348":s<1800?"\u4e0b\u5348":"\u665a\u4e0a"},calendar:{sameDay:"[\u4eca\u5929] LT",nextDay:"[\u660e\u5929] LT",nextWeek:"[\u4e0b]dddd LT",lastDay:"[\u6628\u5929] LT",lastWeek:"[\u4e0a]dddd LT",sameElse:"L"},dayOfMonthOrdinalParse:/\d{1,2}(\u65e5|\u6708|\u9031)/,ordinal:function(e,a){switch(a){case"d":case"D":case"DDD":return e+"\u65e5";case"M":return e+"\u6708";case"w":case"W":return e+"\u9031";default:return e}},relativeTime:{future:"%s\u5167",past:"%s\u524d",s:"\u5e7e\u79d2",ss:"%d \u79d2",m:"1 \u5206\u9418",mm:"%d \u5206\u9418",h:"1 \u5c0f\u6642",hh:"%d \u5c0f\u6642",d:"1 \u5929",dd:"%d \u5929",M:"1 \u500b\u6708",MM:"%d \u500b\u6708",y:"1 \u5e74",yy:"%d \u5e74"}}),M.defineLocale("zh-tw",{months:"\u4e00\u6708_\u4e8c\u6708_\u4e09\u6708_\u56db\u6708_\u4e94\u6708_\u516d\u6708_\u4e03\u6708_\u516b\u6708_\u4e5d\u6708_\u5341\u6708_\u5341\u4e00\u6708_\u5341\u4e8c\u6708".split("_"),monthsShort:"1\u6708_2\u6708_3\u6708_4\u6708_5\u6708_6\u6708_7\u6708_8\u6708_9\u6708_10\u6708_11\u6708_12\u6708".split("_"),weekdays:"\u661f\u671f\u65e5_\u661f\u671f\u4e00_\u661f\u671f\u4e8c_\u661f\u671f\u4e09_\u661f\u671f\u56db_\u661f\u671f\u4e94_\u661f\u671f\u516d".split("_"),weekdaysShort:"\u9031\u65e5_\u9031\u4e00_\u9031\u4e8c_\u9031\u4e09_\u9031\u56db_\u9031\u4e94_\u9031\u516d".split("_"),weekdaysMin:"\u65e5_\u4e00_\u4e8c_\u4e09_\u56db_\u4e94_\u516d".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY/MM/DD",LL:"YYYY\u5e74M\u6708D\u65e5",LLL:"YYYY\u5e74M\u6708D\u65e5 HH:mm",LLLL:"YYYY\u5e74M\u6708D\u65e5dddd HH:mm",l:"YYYY/M/D",ll:"YYYY\u5e74M\u6708D\u65e5",lll:"YYYY\u5e74M\u6708D\u65e5 HH:mm",llll:"YYYY\u5e74M\u6708D\u65e5dddd HH:mm"},meridiemParse:/\u51cc\u6668|\u65e9\u4e0a|\u4e0a\u5348|\u4e2d\u5348|\u4e0b\u5348|\u665a\u4e0a/,meridiemHour:function(e,a){return 12===e&&(e=0),"\u51cc\u6668"===a||"\u65e9\u4e0a"===a||"\u4e0a\u5348"===a?e:"\u4e2d\u5348"===a?11<=e?e:e+12:"\u4e0b\u5348"===a||"\u665a\u4e0a"===a?e+12:void 0},meridiem:function(e,a,t){var s=100*e+a;return s<600?"\u51cc\u6668":s<900?"\u65e9\u4e0a":s<1130?"\u4e0a\u5348":s<1230?"\u4e2d\u5348":s<1800?"\u4e0b\u5348":"\u665a\u4e0a"},calendar:{sameDay:"[\u4eca\u5929] LT",nextDay:"[\u660e\u5929] LT",nextWeek:"[\u4e0b]dddd LT",lastDay:"[\u6628\u5929] LT",lastWeek:"[\u4e0a]dddd LT",sameElse:"L"},dayOfMonthOrdinalParse:/\d{1,2}(\u65e5|\u6708|\u9031)/,ordinal:function(e,a){switch(a){case"d":case"D":case"DDD":return e+"\u65e5";case"M":return e+"\u6708";case"w":case"W":return e+"\u9031";default:return e}},relativeTime:{future:"%s\u5f8c",past:"%s\u524d",s:"\u5e7e\u79d2",ss:"%d \u79d2",m:"1 \u5206\u9418",mm:"%d \u5206\u9418",h:"1 \u5c0f\u6642",hh:"%d \u5c0f\u6642",d:"1 \u5929",dd:"%d \u5929",M:"1 \u500b\u6708",MM:"%d \u500b\u6708",y:"1 \u5e74",yy:"%d \u5e74"}}),M.locale("en"),M});
+//# sourceMappingURL=moment-with-locales.min.js.map
\ No newline at end of file
diff --git a/admin/js/vendors/moment/moment-with-locales.min.js.map b/admin/js/vendors/moment/moment-with-locales.min.js.map
new file mode 100644 (file)
index 0000000..e925b7f
--- /dev/null
@@ -0,0 +1 @@
+{"version":3,"file":"moment-with-locales.min.js","sources":["moment-with-locales.js"],"names":["global","factory","exports","module","define","amd","moment","this","hookCallback","some","hooks","apply","arguments","isArray","input","Array","Object","prototype","toString","call","isObject","hasOwnProp","a","b","hasOwnProperty","isObjectEmpty","obj","getOwnPropertyNames","length","k","isUndefined","isNumber","isDate","Date","map","arr","fn","res","i","push","extend","valueOf","createUTC","format","locale","strict","createLocalOrUTC","utc","getParsingFlags","m","_pf","empty","unusedTokens","unusedInput","overflow","charsLeftOver","nullInput","invalidEra","invalidMonth","invalidFormat","userInvalidated","iso","parsedDateParts","era","meridiem","rfc2822","weekdayMismatch","isValid","_isValid","flags","parsedParts","isNowValid","isNaN","_d","getTime","invalidWeekday","_strict","undefined","bigHour","isFrozen","createInvalid","NaN","fun","t","len","momentProperties","updateInProgress","copyConfig","to","from","prop","val","_isAMomentObject","_i","_f","_l","_tzm","_isUTC","_offset","_locale","Moment","config","updateOffset","isMoment","warn","msg","suppressDeprecationWarnings","console","deprecate","firstTime","deprecationHandler","arg","key","args","slice","join","Error","stack","keys","deprecations","deprecateSimple","name","isFunction","Function","mergeConfigs","parentConfig","childConfig","Locale","set","zeroFill","number","targetLength","forceSign","absNumber","Math","abs","zerosToFill","pow","max","substr","formattingTokens","localFormattingTokens","formatFunctions","formatTokenFunctions","addFormatToken","token","padded","ordinal","callback","func","localeData","formatMoment","expandFormat","array","match","replace","mom","output","makeFormatFunction","invalidDate","replaceLongDateFormatTokens","longDateFormat","lastIndex","test","aliases","addUnitAlias","unit","shorthand","lowerCase","toLowerCase","normalizeUnits","units","normalizeObjectUnits","inputObject","normalizedProp","normalizedInput","priorities","addUnitPriority","priority","isLeapYear","year","absFloor","ceil","floor","toInt","argumentForCoercion","coercedNumber","value","isFinite","makeGetSet","keepTime","set$1","get","month","date","daysInMonth","regexes","match1","match2","match3","match4","match6","match1to2","match3to4","match5to6","match1to3","match1to4","match1to6","matchUnsigned","matchSigned","matchOffset","matchShortOffset","matchWord","addRegexToken","regex","strictRegex","isStrict","getParseRegexForToken","RegExp","regexEscape","matched","p1","p2","p3","p4","s","tokens","addParseToken","addWeekParseToken","_w","indexOf","YEAR","MONTH","DATE","HOUR","MINUTE","SECOND","MILLISECOND","WEEK","WEEKDAY","x","modMonth","o","monthsShort","months","monthsShortRegex","monthsRegex","monthsParse","defaultLocaleMonths","split","defaultLocaleMonthsShort","MONTHS_IN_FORMAT","defaultMonthsShortRegex","defaultMonthsRegex","setMonth","dayOfMonth","min","getSetMonth","computeMonthsParse","cmpLenRev","shortPieces","longPieces","mixedPieces","sort","_monthsRegex","_monthsShortRegex","_monthsStrictRegex","_monthsShortStrictRegex","daysInYear","y","parseTwoDigitYear","parseInt","getSetYear","createUTCDate","UTC","getUTCFullYear","setUTCFullYear","firstWeekOffset","dow","doy","fwd","getUTCDay","dayOfYearFromWeeks","week","weekday","resYear","dayOfYear","resDayOfYear","weekOfYear","resWeek","weekOffset","weeksInYear","weekOffsetNext","shiftWeekdays","ws","n","concat","weekdaysMin","weekdaysShort","weekdays","weekdaysMinRegex","weekdaysShortRegex","weekdaysRegex","weekdaysParse","d","defaultLocaleWeekdays","defaultLocaleWeekdaysShort","defaultLocaleWeekdaysMin","defaultWeekdaysRegex","defaultWeekdaysShortRegex","defaultWeekdaysMinRegex","computeWeekdaysParse","minp","shortp","longp","minPieces","day","_weekdaysRegex","_weekdaysShortRegex","_weekdaysMinRegex","_weekdaysStrictRegex","_weekdaysShortStrictRegex","_weekdaysMinStrictRegex","hFormat","hours","lowercase","minutes","matchMeridiem","_meridiemParse","seconds","kInput","_isPm","isPM","_meridiem","pos","pos1","pos2","getSetHour","globalLocale","baseConfig","calendar","sameDay","nextDay","nextWeek","lastDay","lastWeek","sameElse","LTS","LT","L","LL","LLL","LLLL","dayOfMonthOrdinalParse","relativeTime","future","past","ss","mm","h","hh","dd","w","ww","M","MM","yy","meridiemParse","locales","localeFamilies","normalizeLocale","chooseLocale","names","j","next","loadLocale","arr1","arr2","minl","commonPrefix","oldLocale","_abbr","require","getSetGlobalLocale","e","values","data","getLocale","defineLocale","abbr","_config","parentLocale","forEach","checkOverflow","_a","_overflowDayOfYear","_overflowWeeks","_overflowWeekday","extendedIsoRegex","basicIsoRegex","tzRegex","isoDates","isoTimes","aspNetJsonRegex","obsOffsets","UT","GMT","EDT","EST","CDT","CST","MDT","MST","PDT","PST","configFromISO","l","allowTime","dateFormat","timeFormat","tzFormat","string","exec","configFromStringAndFormat","extractFromRFC2822Strings","yearStr","monthStr","dayStr","hourStr","minuteStr","secondStr","result","untruncateYear","configFromRFC2822","parsedArray","weekdayStr","parsedInput","getDay","obsOffset","militaryOffset","numOffset","hm","calculateOffset","setUTCMinutes","getUTCMinutes","defaults","c","configFromArray","currentDate","expectedWeekday","yearToUse","nowValue","now","_useUTC","getUTCMonth","getUTCDate","getFullYear","getMonth","getDate","weekYear","temp","weekdayOverflow","curWeek","GG","W","E","createLocal","_week","gg","_dayOfYear","dayOfYearFromWeekInfo","_nextDay","ms","setFullYear","ISO_8601","RFC_2822","skipped","stringLength","totalParsedInputLength","hour","isPm","meridiemHour","meridiemFixWrap","erasConvertYear","prepareConfig","preparse","tempConfig","bestMoment","scoreToBeat","currentScore","validFormatFound","bestFormatIsValid","score","configFromStringAndArray","createFromInputFallback","configFromString","dayOrDate","minute","second","millisecond","configFromObject","isUTC","add","prototypeMin","other","prototypeMax","pickBy","moments","ordering","Duration","duration","years","quarters","quarter","weeks","isoWeek","days","milliseconds","unitHasDecimal","parseFloat","isDurationValid","_milliseconds","_days","_months","_data","_bubble","isDuration","absRound","round","offset","separator","utcOffset","sign","offsetFromString","chunkOffset","matcher","parts","matches","cloneWithOffset","model","diff","clone","setTime","local","getDateOffset","getTimezoneOffset","isUtc","aspNetRegex","isoRegex","createDuration","ret","diffRes","parseIso","base","isBefore","positiveMomentsDifference","momentsDifference","inp","isAfter","createAdder","direction","period","tmp","addSubtract","isAdding","invalid","subtract","isString","String","isMomentInput","arrayTest","dataTypeTest","filter","item","isNumberOrStringArray","property","objectTest","propertyTest","properties","isMomentInputObject","monthDiff","wholeMonthDiff","anchor","adjust","newLocaleData","defaultFormat","defaultFormatUtc","lang","MS_PER_400_YEARS","mod$1","dividend","divisor","localStartOfDate","utcStartOfDate","matchEraAbbr","erasAbbrRegex","computeErasParse","abbrPieces","namePieces","narrowPieces","eras","narrow","_erasRegex","_erasNameRegex","_erasAbbrRegex","_erasNarrowRegex","addWeekYearFormatToken","getter","getSetWeekYearHelper","weeksTarget","dayOfYearData","erasNameRegex","erasNarrowRegex","erasParse","_eraYearOrdinalRegex","eraYearOrdinalParse","isoWeekYear","_dayOfMonthOrdinalParse","_ordinalParse","_dayOfMonthOrdinalParseLenient","getSetDayOfMonth","getSetMinute","getSetMillisecond","getSetSecond","parseMs","proto","preParsePostFormat","time","formats","isCalendarSpec","sod","startOf","calendarFormat","asFloat","that","zoneDelta","endOf","startOfDate","isoWeekday","inputString","postformat","withoutSuffix","humanize","fromNow","toNow","invalidAt","localInput","isBetween","inclusivity","localFrom","localTo","isSame","inputMs","isSameOrAfter","isSameOrBefore","parsingFlags","prioritized","unitsObj","u","getPrioritizedUnits","toArray","toObject","toDate","toISOString","keepOffset","inspect","prefix","suffix","zone","isLocal","Symbol","for","toJSON","unix","creationData","eraName","since","until","eraNarrow","eraAbbr","eraYear","dir","isoWeeks","weekInfo","weeksInWeekYear","isoWeeksInYear","isoWeeksInISOWeekYear","keepLocalTime","keepMinutes","localAdjust","_changeInProgress","parseZone","tZone","hasAlignedHourOffset","isDST","isUtcOffset","zoneAbbr","zoneName","dates","isDSTShifted","_isDSTShifted","array1","array2","dontConvert","lengthDiff","diffs","compareArrays","proto$1","get$1","index","field","setter","listMonthsImpl","out","listWeekdaysImpl","localeSorted","shift","_calendar","_longDateFormat","formatUpper","toUpperCase","tok","_invalidDate","_ordinal","isFuture","_relativeTime","pastFuture","source","_eras","Infinity","isFormat","_monthsShort","monthName","_monthsParseExact","ii","llc","toLocaleLowerCase","_monthsParse","_longMonthsParse","_shortMonthsParse","firstDayOfYear","firstDayOfWeek","_weekdays","_weekdaysMin","_weekdaysShort","weekdayName","_weekdaysParseExact","_weekdaysParse","_shortWeekdaysParse","_minWeekdaysParse","_fullWeekdaysParse","charAt","isLower","langData","mathAbs","addSubtract$1","absCeil","daysToMonths","monthsToDays","makeAs","alias","as","asMilliseconds","asSeconds","asMinutes","asHours","asDays","asWeeks","asMonths","asQuarters","asYears","makeGetter","thresholds","relativeTime$1","posNegDuration","abs$1","toISOString$1","totalSign","ymSign","daysSign","hmsSign","total","toFixed","proto$2","monthsFromDays","argWithSuffix","argThresholds","withSuffix","th","assign","toIsoString","version","updateLocale","tmpLocale","relativeTimeRounding","roundingFunction","relativeTimeThreshold","threshold","limit","myMoment","HTML5_FMT","DATETIME_LOCAL","DATETIME_LOCAL_SECONDS","DATETIME_LOCAL_MS","TIME","TIME_SECONDS","TIME_MS","pluralForm","pluralize","f","str","plurals","months$1","weekdaysParseExact","pluralForm$1","pluralize$1","plurals$1","symbolMap","1","2","3","4","5","6","7","8","9","0","months$2","symbolMap$1","numberMap","١","٢","٣","٤","٥","٦","٧","٨","٩","٠","pluralForm$2","pluralize$2","plurals$2","symbolMap$2","numberMap$1","months$3","suffixes","70","80","20","50","100","10","30","60","90","relativeTimeWithPlural","num","forms","standalone","lastDigit","last2Digits","symbolMap$3","numberMap$2","১","২","৩","৪","৫","৬","৭","৮","৯","০","symbolMap$4","numberMap$3","༡","༢","༣","༤","༥","༦","༧","༨","༩","༠","relativeTimeWithMutation","text","mutationTable","substring","softMutation","monthsParseExact","monthsRegex$1","minWeekdaysParse","translate","fullWeekdaysParse","shortWeekdaysParse","monthsStrictRegex","monthsShortStrictRegex","longMonthsParse","shortMonthsParse","lastNumber","ll","lll","llll","months$4","monthsParse$1","monthsRegex$2","plural$1","translate$1","processRelativeTime","processRelativeTime$1","processRelativeTime$2","months$5","monthsNominativeEl","monthsGenitiveEl","momentToFormat","_monthsGenitiveEl","_monthsNominativeEl","calendarEl","_calendarEl","monthsShortDot","monthsShort$1","monthsParse$2","monthsRegex$3","monthsShortDot$1","monthsShort$2","monthsParse$3","monthsRegex$4","monthsShortDot$2","monthsShort$3","monthsParse$4","monthsRegex$5","processRelativeTime$3","symbolMap$5","numberMap$4","۱","۲","۳","۴","۵","۶","۷","۸","۹","۰","numbersPast","numbersFuture","translate$2","monthsRegex$6","monthsParse$5","monthsShortWithDots","monthsShortWithoutDots","processRelativeTime$4","processRelativeTime$5","symbolMap$6","numberMap$5","૧","૨","૩","૪","૫","૬","૭","૮","૯","૦","symbolMap$7","numberMap$6","१","२","३","४","५","६","७","८","९","०","translate$3","weekEndings","translate$4","plural$2","translate$5","eraYearOrdinalRegex","$0","$1","$2","suffixes$1","40","symbolMap$8","numberMap$7","១","២","៣","៤","៥","៦","៧","៨","៩","០","symbolMap$9","numberMap$8","೧","೨","೩","೪","೫","೬","೭","೮","೯","೦","isUpper","symbolMap$a","numberMap$9","months$8","suffixes$2","processRelativeTime$6","eifelerRegelAppliesToNumber","translateSingular","special","translate$6","units$1","format$1","relativeTimeWithPlural$1","relativeTimeWithSingular","translator","words","correctGrammaticalCase","wordKey","translate$7","symbolMap$b","numberMap$a","relativeTimeMr","symbolMap$c","numberMap$b","၁","၂","၃","၄","၅","၆","၇","၈","၉","၀","symbolMap$d","numberMap$c","monthsShortWithDots$1","monthsShortWithoutDots$1","monthsParse$6","monthsRegex$7","monthsShortWithDots$2","monthsShortWithoutDots$2","monthsParse$7","monthsRegex$8","symbolMap$e","numberMap$d","੧","੨","੩","੪","੫","੬","੭","੮","੯","੦","monthsNominative","monthsSubjective","plural$3","translate$8","relativeTimeWithPlural$2","relativeTimeWithPlural$3","monthsParse$8","months$9","days$1","months$a","monthsShort$6","plural$5","translate$9","processRelativeTime$7","translator$1","translator$2","symbolMap$f","numberMap$e","௧","௨","௩","௪","௫","௬","௭","௮","௯","௦","suffixes$3","12","13","suffixes$4","numbersNouns","translate$a","numberNoun","hundred","ten","one","word","numberAsNoun","suffixes$5","processRelativeTime$8","relativeTimeWithPlural$4","processHoursFunction","nominative","accusative","genitive","months$b","days$2"],"mappings":"CAAE,SAAUA,EAAQC,GACG,iBAAZC,SAA0C,oBAAXC,OAAyBA,OAAOD,QAAUD,IAC9D,mBAAXG,QAAyBA,OAAOC,IAAMD,OAAOH,GACpDD,EAAOM,OAASL,IAHnB,CAICM,KAAM,wBAEJ,IAAIC,EA4HAC,EA1HJ,SAASC,IACL,OAAOF,EAAaG,MAAM,KAAMC,WASpC,SAASC,EAAQC,GACb,OACIA,aAAiBC,OACyB,mBAA1CC,OAAOC,UAAUC,SAASC,KAAKL,GAIvC,SAASM,EAASN,GAGd,OACa,MAATA,GAC0C,oBAA1CE,OAAOC,UAAUC,SAASC,KAAKL,GAIvC,SAASO,EAAWC,EAAGC,GACnB,OAAOP,OAAOC,UAAUO,eAAeL,KAAKG,EAAGC,GAGnD,SAASE,EAAcC,GACnB,GAAIV,OAAOW,oBACP,OAAkD,IAA3CX,OAAOW,oBAAoBD,GAAKE,OAGvC,IADA,IAAIC,KACMH,EACN,GAAIL,EAAWK,EAAKG,GAChB,OAGR,OAAO,EAIf,SAASC,EAAYhB,GACjB,YAAiB,IAAVA,EAGX,SAASiB,EAASjB,GACd,MACqB,iBAAVA,GACmC,oBAA1CE,OAAOC,UAAUC,SAASC,KAAKL,GAIvC,SAASkB,EAAOlB,GACZ,OACIA,aAAiBmB,MACyB,kBAA1CjB,OAAOC,UAAUC,SAASC,KAAKL,GAIvC,SAASoB,EAAIC,EAAKC,GAGd,IAFA,IAAIC,EAAM,GAELC,EAAI,EAAGA,EAAIH,EAAIP,SAAUU,EAC1BD,EAAIE,KAAKH,EAAGD,EAAIG,GAAIA,IAExB,OAAOD,EAGX,SAASG,EAAOlB,EAAGC,GACf,IAAK,IAAIe,KAAKf,EACNF,EAAWE,EAAGe,KACdhB,EAAEgB,GAAKf,EAAEe,IAYjB,OARIjB,EAAWE,EAAG,cACdD,EAAEJ,SAAWK,EAAEL,UAGfG,EAAWE,EAAG,aACdD,EAAEmB,QAAUlB,EAAEkB,SAGXnB,EAGX,SAASoB,EAAU5B,EAAO6B,EAAQC,EAAQC,GACtC,OAAOC,GAAiBhC,EAAO6B,EAAQC,EAAQC,GAAQ,GAAME,MAyBjE,SAASC,EAAgBC,GAIrB,OAHa,MAATA,EAAEC,MACFD,EAAEC,IAtBC,CACHC,OAAO,EACPC,aAAc,GACdC,YAAa,GACbC,UAAW,EACXC,cAAe,EACfC,WAAW,EACXC,WAAY,KACZC,aAAc,KACdC,eAAe,EACfC,iBAAiB,EACjBC,KAAK,EACLC,gBAAiB,GACjBC,IAAK,KACLC,SAAU,KACVC,SAAS,EACTC,iBAAiB,IAQdjB,EAAEC,IAsBb,SAASiB,EAAQlB,GACb,GAAkB,MAAdA,EAAEmB,SAAkB,CACpB,IAAIC,EAAQrB,EAAgBC,GACxBqB,EAAc7D,EAAKU,KAAKkD,EAAMP,gBAAiB,SAAUxB,GACrD,OAAY,MAALA,IAEXiC,GACKC,MAAMvB,EAAEwB,GAAGC,YACZL,EAAMf,SAAW,IAChBe,EAAMlB,QACNkB,EAAMZ,aACNY,EAAMX,eACNW,EAAMM,iBACNN,EAAMH,kBACNG,EAAMb,YACNa,EAAMV,gBACNU,EAAMT,mBACLS,EAAML,UAAaK,EAAML,UAAYM,GAU/C,GARIrB,EAAE2B,UACFL,EACIA,GACwB,IAAxBF,EAAMd,eACwB,IAA9Bc,EAAMjB,aAAaxB,aACDiD,IAAlBR,EAAMS,SAGS,MAAnB9D,OAAO+D,UAAqB/D,OAAO+D,SAAS9B,GAG5C,OAAOsB,EAFPtB,EAAEmB,SAAWG,EAKrB,OAAOtB,EAAEmB,SAGb,SAASY,EAAcX,GACnB,IAAIpB,EAAIP,EAAUuC,KAOlB,OANa,MAATZ,EACA7B,EAAOQ,EAAgBC,GAAIoB,GAE3BrB,EAAgBC,GAAGW,iBAAkB,EAGlCX,EA7DPxC,EADAM,MAAME,UAAUR,KACTM,MAAME,UAAUR,KAEhB,SAAUyE,GAKb,IAJA,IAAIC,EAAInE,OAAOT,MACX6E,EAAMD,EAAEvD,SAAW,EAGlBU,EAAI,EAAGA,EAAI8C,EAAK9C,IACjB,GAAIA,KAAK6C,GAAKD,EAAI/D,KAAKZ,KAAM4E,EAAE7C,GAAIA,EAAG6C,GAClC,OAAO,EAIf,OAAO,GAqDf,IAAIE,EAAoB3E,EAAM2E,iBAAmB,GAC7CC,GAAmB,EAEvB,SAASC,EAAWC,EAAIC,GACpB,IAAInD,EAAGoD,EAAMC,EAiCb,GA/BK7D,EAAY2D,EAAKG,oBAClBJ,EAAGI,iBAAmBH,EAAKG,kBAE1B9D,EAAY2D,EAAKI,MAClBL,EAAGK,GAAKJ,EAAKI,IAEZ/D,EAAY2D,EAAKK,MAClBN,EAAGM,GAAKL,EAAKK,IAEZhE,EAAY2D,EAAKM,MAClBP,EAAGO,GAAKN,EAAKM,IAEZjE,EAAY2D,EAAKb,WAClBY,EAAGZ,QAAUa,EAAKb,SAEjB9C,EAAY2D,EAAKO,QAClBR,EAAGQ,KAAOP,EAAKO,MAEdlE,EAAY2D,EAAKQ,UAClBT,EAAGS,OAASR,EAAKQ,QAEhBnE,EAAY2D,EAAKS,WAClBV,EAAGU,QAAUT,EAAKS,SAEjBpE,EAAY2D,EAAKvC,OAClBsC,EAAGtC,IAAMF,EAAgByC,IAExB3D,EAAY2D,EAAKU,WAClBX,EAAGW,QAAUV,EAAKU,SAGQ,EAA1Bd,EAAiBzD,OACjB,IAAKU,EAAI,EAAGA,EAAI+C,EAAiBzD,OAAQU,IAGhCR,EADL6D,EAAMF,EADNC,EAAOL,EAAiB/C,OAGpBkD,EAAGE,GAAQC,GAKvB,OAAOH,EAIX,SAASY,EAAOC,GACZd,EAAWhF,KAAM8F,GACjB9F,KAAKkE,GAAK,IAAIxC,KAAkB,MAAboE,EAAO5B,GAAa4B,EAAO5B,GAAGC,UAAYO,KACxD1E,KAAK4D,YACN5D,KAAKkE,GAAK,IAAIxC,KAAKgD,OAIE,IAArBK,IACAA,GAAmB,EACnB5E,EAAM4F,aAAa/F,MACnB+E,GAAmB,GAI3B,SAASiB,EAAS7E,GACd,OACIA,aAAe0E,GAAkB,MAAP1E,GAAuC,MAAxBA,EAAIkE,iBAIrD,SAASY,EAAKC,IAEgC,IAAtC/F,EAAMgG,6BACa,oBAAZC,SACPA,QAAQH,MAERG,QAAQH,KAAK,wBAA0BC,GAI/C,SAASG,EAAUH,EAAKrE,GACpB,IAAIyE,GAAY,EAEhB,OAAOrE,EAAO,WAIV,GAHgC,MAA5B9B,EAAMoG,oBACNpG,EAAMoG,mBAAmB,KAAML,GAE/BI,EAAW,CAKX,IAJA,IACIE,EAEAC,EAHAC,EAAO,GAIN3E,EAAI,EAAGA,EAAI1B,UAAUgB,OAAQU,IAAK,CAEnC,GADAyE,EAAM,GACsB,iBAAjBnG,UAAU0B,GAAiB,CAElC,IAAK0E,KADLD,GAAO,MAAQzE,EAAI,KACP1B,UAAU,GACdS,EAAWT,UAAU,GAAIoG,KACzBD,GAAOC,EAAM,KAAOpG,UAAU,GAAGoG,GAAO,MAGhDD,EAAMA,EAAIG,MAAM,GAAI,QAEpBH,EAAMnG,UAAU0B,GAEpB2E,EAAK1E,KAAKwE,GAEdP,EACIC,EACI,gBACA1F,MAAME,UAAUiG,MAAM/F,KAAK8F,GAAME,KAAK,IACtC,MACA,IAAIC,OAAQC,OAEpBR,GAAY,EAEhB,OAAOzE,EAAGzB,MAAMJ,KAAMK,YACvBwB,GAGP,IAgFIkF,EAhFAC,EAAe,GAEnB,SAASC,EAAgBC,EAAMhB,GACK,MAA5B/F,EAAMoG,oBACNpG,EAAMoG,mBAAmBW,EAAMhB,GAE9Bc,EAAaE,KACdjB,EAAKC,GACLc,EAAaE,IAAQ,GAO7B,SAASC,EAAW5G,GAChB,MACyB,oBAAb6G,UAA4B7G,aAAiB6G,UACX,sBAA1C3G,OAAOC,UAAUC,SAASC,KAAKL,GA2BvC,SAAS8G,EAAaC,EAAcC,GAChC,IACIpC,EADArD,EAAMG,EAAO,GAAIqF,GAErB,IAAKnC,KAAQoC,EACLzG,EAAWyG,EAAapC,KACpBtE,EAASyG,EAAanC,KAAUtE,EAAS0G,EAAYpC,KACrDrD,EAAIqD,GAAQ,GACZlD,EAAOH,EAAIqD,GAAOmC,EAAanC,IAC/BlD,EAAOH,EAAIqD,GAAOoC,EAAYpC,KACF,MAArBoC,EAAYpC,GACnBrD,EAAIqD,GAAQoC,EAAYpC,UAEjBrD,EAAIqD,IAIvB,IAAKA,KAAQmC,EAELxG,EAAWwG,EAAcnC,KACxBrE,EAAWyG,EAAapC,IACzBtE,EAASyG,EAAanC,MAGtBrD,EAAIqD,GAAQlD,EAAO,GAAIH,EAAIqD,KAGnC,OAAOrD,EAGX,SAAS0F,EAAO1B,GACE,MAAVA,GACA9F,KAAKyH,IAAI3B,GAhEjB3F,EAAMgG,6BAA8B,EACpChG,EAAMoG,mBAAqB,KAsEvBQ,EADAtG,OAAOsG,KACAtG,OAAOsG,KAEP,SAAU5F,GACb,IAAIY,EACAD,EAAM,GACV,IAAKC,KAAKZ,EACFL,EAAWK,EAAKY,IAChBD,EAAIE,KAAKD,GAGjB,OAAOD,GAkBf,SAAS4F,EAASC,EAAQC,EAAcC,GACpC,IAAIC,EAAY,GAAKC,KAAKC,IAAIL,GAC1BM,EAAcL,EAAeE,EAAUzG,OAE3C,OADqB,GAAVsG,EAEEE,EAAY,IAAM,GAAM,KACjCE,KAAKG,IAAI,GAAIH,KAAKI,IAAI,EAAGF,IAActH,WAAWyH,OAAO,GACzDN,EAIR,IAAIO,EAAmB,yMACnBC,EAAwB,6CACxBC,EAAkB,GAClBC,EAAuB,GAM3B,SAASC,EAAeC,EAAOC,EAAQC,EAASC,GAC5C,IAAIC,EACoB,iBAAbD,EACA,WACH,OAAO7I,KAAK6I,MAHTA,EAMPH,IACAF,EAAqBE,GAASI,GAE9BH,IACAH,EAAqBG,EAAO,IAAM,WAC9B,OAAOjB,EAASoB,EAAK1I,MAAMJ,KAAMK,WAAYsI,EAAO,GAAIA,EAAO,MAGnEC,IACAJ,EAAqBI,GAAW,WAC5B,OAAO5I,KAAK+I,aAAaH,QACrBE,EAAK1I,MAAMJ,KAAMK,WACjBqI,KAuChB,SAASM,EAAatG,EAAGN,GACrB,OAAKM,EAAEkB,WAIPxB,EAAS6G,EAAa7G,EAAQM,EAAEqG,cAChCR,EAAgBnG,GACZmG,EAAgBnG,IAjCxB,SAA4BA,GAKxB,IAJA,IAR4B7B,EAQxB2I,EAAQ9G,EAAO+G,MAAMd,GAIpBtG,EAAI,EAAGV,EAAS6H,EAAM7H,OAAQU,EAAIV,EAAQU,IACvCyG,EAAqBU,EAAMnH,IAC3BmH,EAAMnH,GAAKyG,EAAqBU,EAAMnH,IAEtCmH,EAAMnH,IAhBcxB,EAgBc2I,EAAMnH,IAftCoH,MAAM,YACL5I,EAAM6I,QAAQ,WAAY,IAE9B7I,EAAM6I,QAAQ,MAAO,IAgB5B,OAAO,SAAUC,GAGb,IAFA,IAAIC,EAAS,GAERvH,EAAI,EAAGA,EAAIV,EAAQU,IACpBuH,GAAUnC,EAAW+B,EAAMnH,IACrBmH,EAAMnH,GAAGnB,KAAKyI,EAAKjH,GACnB8G,EAAMnH,GAEhB,OAAOuH,GAYoBC,CAAmBnH,GAE3CmG,EAAgBnG,GAAQM,IAPpBA,EAAEqG,aAAaS,cAU9B,SAASP,EAAa7G,EAAQC,GAC1B,IAAIN,EAAI,EAER,SAAS0H,EAA4BlJ,GACjC,OAAO8B,EAAOqH,eAAenJ,IAAUA,EAI3C,IADA+H,EAAsBqB,UAAY,EACtB,GAAL5H,GAAUuG,EAAsBsB,KAAKxH,IACxCA,EAASA,EAAOgH,QACZd,EACAmB,GAEJnB,EAAsBqB,UAAY,IAClC5H,EAGJ,OAAOK,EAkFX,IAAIyH,EAAU,GAEd,SAASC,EAAaC,EAAMC,GACxB,IAAIC,EAAYF,EAAKG,cACrBL,EAAQI,GAAaJ,EAAQI,EAAY,KAAOJ,EAAQG,GAAaD,EAGzE,SAASI,EAAeC,GACpB,MAAwB,iBAAVA,EACRP,EAAQO,IAAUP,EAAQO,EAAMF,oBAChC5F,EAGV,SAAS+F,EAAqBC,GAC1B,IACIC,EACApF,EAFAqF,EAAkB,GAItB,IAAKrF,KAAQmF,EACLxJ,EAAWwJ,EAAanF,KACxBoF,EAAiBJ,EAAehF,MAE5BqF,EAAgBD,GAAkBD,EAAYnF,IAK1D,OAAOqF,EAGX,IAAIC,EAAa,GAEjB,SAASC,EAAgBX,EAAMY,GAC3BF,EAAWV,GAAQY,EAiBvB,SAASC,EAAWC,GAChB,OAAQA,EAAO,GAAM,GAAKA,EAAO,KAAQ,GAAMA,EAAO,KAAQ,EAGlE,SAASC,EAASnD,GACd,OAAIA,EAAS,EAEFI,KAAKgD,KAAKpD,IAAW,EAErBI,KAAKiD,MAAMrD,GAI1B,SAASsD,EAAMC,GACX,IAAIC,GAAiBD,EACjBE,EAAQ,EAMZ,OAJsB,GAAlBD,GAAuBE,SAASF,KAChCC,EAAQN,EAASK,IAGdC,EAGX,SAASE,EAAWvB,EAAMwB,GACtB,OAAO,SAAUH,GACb,OAAa,MAATA,GACAI,EAAMxL,KAAM+J,EAAMqB,GAClBjL,EAAM4F,aAAa/F,KAAMuL,GAClBvL,MAEAyL,EAAIzL,KAAM+J,IAK7B,SAAS0B,EAAIpC,EAAKU,GACd,OAAOV,EAAIzF,UACLyF,EAAInF,GAAG,OAASmF,EAAI3D,OAAS,MAAQ,IAAMqE,KAC3CrF,IAGV,SAAS8G,EAAMnC,EAAKU,EAAMqB,GAClB/B,EAAIzF,YAAcK,MAAMmH,KAEX,aAATrB,GACAa,EAAWvB,EAAIwB,SACC,IAAhBxB,EAAIqC,SACW,KAAfrC,EAAIsC,QAEJP,EAAQH,EAAMG,GACd/B,EAAInF,GAAG,OAASmF,EAAI3D,OAAS,MAAQ,IAAMqE,GACvCqB,EACA/B,EAAIqC,QACJE,GAAYR,EAAO/B,EAAIqC,WAG3BrC,EAAInF,GAAG,OAASmF,EAAI3D,OAAS,MAAQ,IAAMqE,GAAMqB,IAgC7D,IAmBIS,EAnBAC,EAAS,KACTC,EAAS,OACTC,EAAS,QACTC,EAAS,QACTC,GAAS,aACTC,GAAY,QACZC,GAAY,YACZC,GAAY,gBACZC,GAAY,UACZC,GAAY,UACZC,GAAY,eACZC,GAAgB,MAChBC,GAAc,WACdC,GAAc,qBACdC,GAAmB,0BAInBC,GAAY,wJAKhB,SAASC,GAAcpE,EAAOqE,EAAOC,GACjCnB,EAAQnD,GAASvB,EAAW4F,GACtBA,EACA,SAAUE,EAAUlE,GAChB,OAAOkE,GAAYD,EAAcA,EAAcD,GAI7D,SAASG,GAAsBxE,EAAO5C,GAClC,OAAKhF,EAAW+K,EAASnD,GAIlBmD,EAAQnD,GAAO5C,EAAOzB,QAASyB,EAAOF,SAHlC,IAAIuH,OAQRC,GAR8B1E,EAU5BU,QAAQ,KAAM,IACdA,QAAQ,sCAAuC,SAC5CiE,EACAC,EACAC,EACAC,EACAC,GAEA,OAAOH,GAAMC,GAAMC,GAAMC,MAKzC,SAASL,GAAYM,GACjB,OAAOA,EAAEtE,QAAQ,yBAA0B,QApC/CyC,EAAU,GAuCV,IAAI8B,GAAS,GAEb,SAASC,GAAclF,EAAOG,GAC1B,IAAI9G,EACA+G,EAAOD,EASX,IARqB,iBAAVH,IACPA,EAAQ,CAACA,IAETlH,EAASqH,KACTC,EAAO,SAAUvI,EAAO2I,GACpBA,EAAML,GAAYoC,EAAM1K,KAG3BwB,EAAI,EAAGA,EAAI2G,EAAMrH,OAAQU,IAC1B4L,GAAOjF,EAAM3G,IAAM+G,EAI3B,SAAS+E,GAAkBnF,EAAOG,GAC9B+E,GAAclF,EAAO,SAAUnI,EAAO2I,EAAOpD,EAAQ4C,GACjD5C,EAAOgI,GAAKhI,EAAOgI,IAAM,GACzBjF,EAAStI,EAAOuF,EAAOgI,GAAIhI,EAAQ4C,KAU3C,IAcIqF,GAdAC,GAAO,EACPC,GAAQ,EACRC,GAAO,EACPC,GAAO,EACPC,GAAS,EACTC,GAAS,EACTC,GAAc,EACdC,GAAO,EACPC,GAAU,EAuBd,SAAS5C,GAAYf,EAAMa,GACvB,GAAIzH,MAAM4G,IAAS5G,MAAMyH,GACrB,OAAOhH,IAEX,IAzBY+J,EAyBRC,GAAehD,GAzBP+C,EAyBc,IAxBRA,GAAKA,EA0BvB,OADA5D,IAASa,EAAQgD,GAAY,GACT,GAAbA,EACD9D,EAAWC,GACP,GACA,GACJ,GAAO6D,EAAW,EAAK,EAxB7BX,GADAvN,MAAME,UAAUqN,QACNvN,MAAME,UAAUqN,QAEhB,SAAUY,GAGhB,IADA,IACK5M,EAAI,EAAGA,EAAI/B,KAAKqB,SAAUU,EAC3B,GAAI/B,KAAK+B,KAAO4M,EACZ,OAAO5M,EAGf,OAAQ,GAmBhB0G,EAAe,IAAK,CAAC,KAAM,GAAI,KAAM,WACjC,OAAOzI,KAAK0L,QAAU,IAG1BjD,EAAe,MAAO,EAAG,EAAG,SAAUrG,GAClC,OAAOpC,KAAK+I,aAAa6F,YAAY5O,KAAMoC,KAG/CqG,EAAe,OAAQ,EAAG,EAAG,SAAUrG,GACnC,OAAOpC,KAAK+I,aAAa8F,OAAO7O,KAAMoC,KAK1C0H,EAAa,QAAS,KAItBY,EAAgB,QAAS,GAIzBoC,GAAc,IAAKX,IACnBW,GAAc,KAAMX,GAAWJ,GAC/Be,GAAc,MAAO,SAAUG,EAAU5K,GACrC,OAAOA,EAAOyM,iBAAiB7B,KAEnCH,GAAc,OAAQ,SAAUG,EAAU5K,GACtC,OAAOA,EAAO0M,YAAY9B,KAG9BW,GAAc,CAAC,IAAK,MAAO,SAAUrN,EAAO2I,GACxCA,EAAM+E,IAAShD,EAAM1K,GAAS,IAGlCqN,GAAc,CAAC,MAAO,QAAS,SAAUrN,EAAO2I,EAAOpD,EAAQ4C,GAC3D,IAAIgD,EAAQ5F,EAAOF,QAAQoJ,YAAYzO,EAAOmI,EAAO5C,EAAOzB,SAE/C,MAATqH,EACAxC,EAAM+E,IAASvC,EAEfjJ,EAAgBqD,GAAQ3C,aAAe5C,IAM/C,IAAI0O,GAAsB,wFAAwFC,MAC1G,KAEJC,GAA2B,kDAAkDD,MACzE,KAEJE,GAAmB,gCACnBC,GAA0BxC,GAC1ByC,GAAqBzC,GAoIzB,SAAS0C,GAASlG,EAAK+B,GACnB,IAAIoE,EAEJ,IAAKnG,EAAIzF,UAEL,OAAOyF,EAGX,GAAqB,iBAAV+B,EACP,GAAI,QAAQxB,KAAKwB,GACbA,EAAQH,EAAMG,QAId,IAAK5J,EAFL4J,EAAQ/B,EAAIN,aAAaiG,YAAY5D,IAGjC,OAAO/B,EAOnB,OAFAmG,EAAazH,KAAK0H,IAAIpG,EAAIsC,OAAQC,GAAYvC,EAAIwB,OAAQO,IAC1D/B,EAAInF,GAAG,OAASmF,EAAI3D,OAAS,MAAQ,IAAM,SAAS0F,EAAOoE,GACpDnG,EAGX,SAASqG,GAAYtE,GACjB,OAAa,MAATA,GACAmE,GAASvP,KAAMoL,GACfjL,EAAM4F,aAAa/F,MAAM,GAClBA,MAEAyL,EAAIzL,KAAM,SAgDzB,SAAS2P,KACL,SAASC,EAAU7O,EAAGC,GAClB,OAAOA,EAAEK,OAASN,EAAEM,OAQxB,IALA,IAIIgI,EAJAwG,EAAc,GACdC,EAAa,GACbC,EAAc,GAGbhO,EAAI,EAAGA,EAAI,GAAIA,IAEhBsH,EAAMlH,EAAU,CAAC,IAAMJ,IACvB8N,EAAY7N,KAAKhC,KAAK4O,YAAYvF,EAAK,KACvCyG,EAAW9N,KAAKhC,KAAK6O,OAAOxF,EAAK,KACjC0G,EAAY/N,KAAKhC,KAAK6O,OAAOxF,EAAK,KAClC0G,EAAY/N,KAAKhC,KAAK4O,YAAYvF,EAAK,KAO3C,IAHAwG,EAAYG,KAAKJ,GACjBE,EAAWE,KAAKJ,GAChBG,EAAYC,KAAKJ,GACZ7N,EAAI,EAAGA,EAAI,GAAIA,IAChB8N,EAAY9N,GAAKqL,GAAYyC,EAAY9N,IACzC+N,EAAW/N,GAAKqL,GAAY0C,EAAW/N,IAE3C,IAAKA,EAAI,EAAGA,EAAI,GAAIA,IAChBgO,EAAYhO,GAAKqL,GAAY2C,EAAYhO,IAG7C/B,KAAKiQ,aAAe,IAAI9C,OAAO,KAAO4C,EAAYnJ,KAAK,KAAO,IAAK,KACnE5G,KAAKkQ,kBAAoBlQ,KAAKiQ,aAC9BjQ,KAAKmQ,mBAAqB,IAAIhD,OAC1B,KAAO2C,EAAWlJ,KAAK,KAAO,IAC9B,KAEJ5G,KAAKoQ,wBAA0B,IAAIjD,OAC/B,KAAO0C,EAAYjJ,KAAK,KAAO,IAC/B,KAiDR,SAASyJ,GAAWxF,GAChB,OAAOD,EAAWC,GAAQ,IAAM,IA5CpCpC,EAAe,IAAK,EAAG,EAAG,WACtB,IAAI6H,EAAItQ,KAAK6K,OACb,OAAOyF,GAAK,KAAO5I,EAAS4I,EAAG,GAAK,IAAMA,IAG9C7H,EAAe,EAAG,CAAC,KAAM,GAAI,EAAG,WAC5B,OAAOzI,KAAK6K,OAAS,MAGzBpC,EAAe,EAAG,CAAC,OAAQ,GAAI,EAAG,QAClCA,EAAe,EAAG,CAAC,QAAS,GAAI,EAAG,QACnCA,EAAe,EAAG,CAAC,SAAU,GAAG,GAAO,EAAG,QAI1CqB,EAAa,OAAQ,KAIrBY,EAAgB,OAAQ,GAIxBoC,GAAc,IAAKJ,IACnBI,GAAc,KAAMX,GAAWJ,GAC/Be,GAAc,OAAQP,GAAWN,GACjCa,GAAc,QAASN,GAAWN,IAClCY,GAAc,SAAUN,GAAWN,IAEnC0B,GAAc,CAAC,QAAS,UAAWI,IACnCJ,GAAc,OAAQ,SAAUrN,EAAO2I,GACnCA,EAAM8E,IACe,IAAjBzN,EAAMc,OAAelB,EAAMoQ,kBAAkBhQ,GAAS0K,EAAM1K,KAEpEqN,GAAc,KAAM,SAAUrN,EAAO2I,GACjCA,EAAM8E,IAAQ7N,EAAMoQ,kBAAkBhQ,KAE1CqN,GAAc,IAAK,SAAUrN,EAAO2I,GAChCA,EAAM8E,IAAQwC,SAASjQ,EAAO,MAWlCJ,EAAMoQ,kBAAoB,SAAUhQ,GAChC,OAAO0K,EAAM1K,IAAyB,GAAf0K,EAAM1K,GAAc,KAAO,MAKtD,IAAIkQ,GAAanF,EAAW,YAAY,GAwBxC,SAASoF,GAAcJ,GACnB,IAAI3E,EAAMjF,EAcV,OAZI4J,EAAI,KAAY,GAALA,IACX5J,EAAOlG,MAAME,UAAUiG,MAAM/F,KAAKP,YAE7B,GAAKiQ,EAAI,IACd3E,EAAO,IAAIjK,KAAKA,KAAKiP,IAAIvQ,MAAM,KAAMsG,IACjC2E,SAASM,EAAKiF,mBACdjF,EAAKkF,eAAeP,IAGxB3E,EAAO,IAAIjK,KAAKA,KAAKiP,IAAIvQ,MAAM,KAAMC,YAGlCsL,EAIX,SAASmF,GAAgBjG,EAAMkG,EAAKC,GAChC,IACIC,EAAM,EAAIF,EAAMC,EAIpB,OAAgBC,GAFH,EAAIP,GAAc7F,EAAM,EAAGoG,GAAKC,YAAcH,GAAO,EAE5C,EAI1B,SAASI,GAAmBtG,EAAMuG,EAAMC,EAASN,EAAKC,GAClD,IAGIM,EADAC,EAAY,EAAI,GAAKH,EAAO,IAFZ,EAAIC,EAAUN,GAAO,EACxBD,GAAgBjG,EAAMkG,EAAKC,GAOxCQ,EAFAD,GAAa,EAEElB,GADfiB,EAAUzG,EAAO,GACoB0G,EAC9BA,EAAYlB,GAAWxF,IAC9ByG,EAAUzG,EAAO,EACF0G,EAAYlB,GAAWxF,KAEtCyG,EAAUzG,EACK0G,GAGnB,MAAO,CACH1G,KAAMyG,EACNC,UAAWC,GAInB,SAASC,GAAWpI,EAAK0H,EAAKC,GAC1B,IAEIU,EACAJ,EAHAK,EAAab,GAAgBzH,EAAIwB,OAAQkG,EAAKC,GAC9CI,EAAOrJ,KAAKiD,OAAO3B,EAAIkI,YAAcI,EAAa,GAAK,GAAK,EAehE,OAXIP,EAAO,EAEPM,EAAUN,EAAOQ,GADjBN,EAAUjI,EAAIwB,OAAS,EACekG,EAAKC,GACpCI,EAAOQ,GAAYvI,EAAIwB,OAAQkG,EAAKC,IAC3CU,EAAUN,EAAOQ,GAAYvI,EAAIwB,OAAQkG,EAAKC,GAC9CM,EAAUjI,EAAIwB,OAAS,IAEvByG,EAAUjI,EAAIwB,OACd6G,EAAUN,GAGP,CACHA,KAAMM,EACN7G,KAAMyG,GAId,SAASM,GAAY/G,EAAMkG,EAAKC,GAC5B,IAAIW,EAAab,GAAgBjG,EAAMkG,EAAKC,GACxCa,EAAiBf,GAAgBjG,EAAO,EAAGkG,EAAKC,GACpD,OAAQX,GAAWxF,GAAQ8G,EAAaE,GAAkB,EAK9DpJ,EAAe,IAAK,CAAC,KAAM,GAAI,KAAM,QACrCA,EAAe,IAAK,CAAC,KAAM,GAAI,KAAM,WAIrCqB,EAAa,OAAQ,KACrBA,EAAa,UAAW,KAIxBY,EAAgB,OAAQ,GACxBA,EAAgB,UAAW,GAI3BoC,GAAc,IAAKX,IACnBW,GAAc,KAAMX,GAAWJ,GAC/Be,GAAc,IAAKX,IACnBW,GAAc,KAAMX,GAAWJ,GAE/B8B,GAAkB,CAAC,IAAK,KAAM,IAAK,MAAO,SACtCtN,EACA6Q,EACAtL,EACA4C,GAEA0I,EAAK1I,EAAMN,OAAO,EAAG,IAAM6C,EAAM1K,KA0HrC,SAASuR,GAAcC,EAAIC,GACvB,OAAOD,EAAGpL,MAAMqL,EAAG,GAAGC,OAAOF,EAAGpL,MAAM,EAAGqL,IArF7CvJ,EAAe,IAAK,EAAG,KAAM,OAE7BA,EAAe,KAAM,EAAG,EAAG,SAAUrG,GACjC,OAAOpC,KAAK+I,aAAamJ,YAAYlS,KAAMoC,KAG/CqG,EAAe,MAAO,EAAG,EAAG,SAAUrG,GAClC,OAAOpC,KAAK+I,aAAaoJ,cAAcnS,KAAMoC,KAGjDqG,EAAe,OAAQ,EAAG,EAAG,SAAUrG,GACnC,OAAOpC,KAAK+I,aAAaqJ,SAASpS,KAAMoC,KAG5CqG,EAAe,IAAK,EAAG,EAAG,WAC1BA,EAAe,IAAK,EAAG,EAAG,cAI1BqB,EAAa,MAAO,KACpBA,EAAa,UAAW,KACxBA,EAAa,aAAc,KAG3BY,EAAgB,MAAO,IACvBA,EAAgB,UAAW,IAC3BA,EAAgB,aAAc,IAI9BoC,GAAc,IAAKX,IACnBW,GAAc,IAAKX,IACnBW,GAAc,IAAKX,IACnBW,GAAc,KAAM,SAAUG,EAAU5K,GACpC,OAAOA,EAAOgQ,iBAAiBpF,KAEnCH,GAAc,MAAO,SAAUG,EAAU5K,GACrC,OAAOA,EAAOiQ,mBAAmBrF,KAErCH,GAAc,OAAQ,SAAUG,EAAU5K,GACtC,OAAOA,EAAOkQ,cAActF,KAGhCY,GAAkB,CAAC,KAAM,MAAO,QAAS,SAAUtN,EAAO6Q,EAAMtL,EAAQ4C,GACpE,IAAI2I,EAAUvL,EAAOF,QAAQ4M,cAAcjS,EAAOmI,EAAO5C,EAAOzB,SAEjD,MAAXgN,EACAD,EAAKqB,EAAIpB,EAET5O,EAAgBqD,GAAQ1B,eAAiB7D,IAIjDsN,GAAkB,CAAC,IAAK,IAAK,KAAM,SAAUtN,EAAO6Q,EAAMtL,EAAQ4C,GAC9D0I,EAAK1I,GAASuC,EAAM1K,KAkCxB,IAAImS,GAAwB,2DAA2DxD,MAC/E,KAEJyD,GAA6B,8BAA8BzD,MAAM,KACjE0D,GAA2B,uBAAuB1D,MAAM,KACxD2D,GAAuBhG,GACvBiG,GAA4BjG,GAC5BkG,GAA0BlG,GAiR9B,SAASmG,KACL,SAASpD,EAAU7O,EAAGC,GAClB,OAAOA,EAAEK,OAASN,EAAEM,OAYxB,IATA,IAKIgI,EACA4J,EACAC,EACAC,EARAC,EAAY,GACZvD,EAAc,GACdC,EAAa,GACbC,EAAc,GAMbhO,EAAI,EAAGA,EAAI,EAAGA,IAEfsH,EAAMlH,EAAU,CAAC,IAAM,IAAIkR,IAAItR,GAC/BkR,EAAO7F,GAAYpN,KAAKkS,YAAY7I,EAAK,KACzC6J,EAAS9F,GAAYpN,KAAKmS,cAAc9I,EAAK,KAC7C8J,EAAQ/F,GAAYpN,KAAKoS,SAAS/I,EAAK,KACvC+J,EAAUpR,KAAKiR,GACfpD,EAAY7N,KAAKkR,GACjBpD,EAAW9N,KAAKmR,GAChBpD,EAAY/N,KAAKiR,GACjBlD,EAAY/N,KAAKkR,GACjBnD,EAAY/N,KAAKmR,GAIrBC,EAAUpD,KAAKJ,GACfC,EAAYG,KAAKJ,GACjBE,EAAWE,KAAKJ,GAChBG,EAAYC,KAAKJ,GAEjB5P,KAAKsT,eAAiB,IAAInG,OAAO,KAAO4C,EAAYnJ,KAAK,KAAO,IAAK,KACrE5G,KAAKuT,oBAAsBvT,KAAKsT,eAChCtT,KAAKwT,kBAAoBxT,KAAKsT,eAE9BtT,KAAKyT,qBAAuB,IAAItG,OAC5B,KAAO2C,EAAWlJ,KAAK,KAAO,IAC9B,KAEJ5G,KAAK0T,0BAA4B,IAAIvG,OACjC,KAAO0C,EAAYjJ,KAAK,KAAO,IAC/B,KAEJ5G,KAAK2T,wBAA0B,IAAIxG,OAC/B,KAAOiG,EAAUxM,KAAK,KAAO,IAC7B,KAMR,SAASgN,KACL,OAAO5T,KAAK6T,QAAU,IAAM,GAqChC,SAASpQ,GAASiF,EAAOoL,GACrBrL,EAAeC,EAAO,EAAG,EAAG,WACxB,OAAO1I,KAAK+I,aAAatF,SACrBzD,KAAK6T,QACL7T,KAAK+T,UACLD,KAiBZ,SAASE,GAAc/G,EAAU5K,GAC7B,OAAOA,EAAO4R,eArDlBxL,EAAe,IAAK,CAAC,KAAM,GAAI,EAAG,QAClCA,EAAe,IAAK,CAAC,KAAM,GAAI,EAAGmL,IAClCnL,EAAe,IAAK,CAAC,KAAM,GAAI,EAN/B,WACI,OAAOzI,KAAK6T,SAAW,KAO3BpL,EAAe,MAAO,EAAG,EAAG,WACxB,MAAO,GAAKmL,GAAQxT,MAAMJ,MAAQ0H,EAAS1H,KAAK+T,UAAW,KAG/DtL,EAAe,QAAS,EAAG,EAAG,WAC1B,MACI,GACAmL,GAAQxT,MAAMJ,MACd0H,EAAS1H,KAAK+T,UAAW,GACzBrM,EAAS1H,KAAKkU,UAAW,KAIjCzL,EAAe,MAAO,EAAG,EAAG,WACxB,MAAO,GAAKzI,KAAK6T,QAAUnM,EAAS1H,KAAK+T,UAAW,KAGxDtL,EAAe,QAAS,EAAG,EAAG,WAC1B,MACI,GACAzI,KAAK6T,QACLnM,EAAS1H,KAAK+T,UAAW,GACzBrM,EAAS1H,KAAKkU,UAAW,KAcjCzQ,GAAS,KAAK,GACdA,GAAS,KAAK,GAIdqG,EAAa,OAAQ,KAGrBY,EAAgB,OAAQ,IAQxBoC,GAAc,IAAKkH,IACnBlH,GAAc,IAAKkH,IACnBlH,GAAc,IAAKX,IACnBW,GAAc,IAAKX,IACnBW,GAAc,IAAKX,IACnBW,GAAc,KAAMX,GAAWJ,GAC/Be,GAAc,KAAMX,GAAWJ,GAC/Be,GAAc,KAAMX,GAAWJ,GAE/Be,GAAc,MAAOV,IACrBU,GAAc,QAAST,IACvBS,GAAc,MAAOV,IACrBU,GAAc,QAAST,IAEvBuB,GAAc,CAAC,IAAK,MAAOO,IAC3BP,GAAc,CAAC,IAAK,MAAO,SAAUrN,EAAO2I,EAAOpD,GAC/C,IAAIqO,EAASlJ,EAAM1K,GACnB2I,EAAMiF,IAAmB,KAAXgG,EAAgB,EAAIA,IAEtCvG,GAAc,CAAC,IAAK,KAAM,SAAUrN,EAAO2I,EAAOpD,GAC9CA,EAAOsO,MAAQtO,EAAOF,QAAQyO,KAAK9T,GACnCuF,EAAOwO,UAAY/T,IAEvBqN,GAAc,CAAC,IAAK,MAAO,SAAUrN,EAAO2I,EAAOpD,GAC/CoD,EAAMiF,IAAQlD,EAAM1K,GACpBkC,EAAgBqD,GAAQvB,SAAU,IAEtCqJ,GAAc,MAAO,SAAUrN,EAAO2I,EAAOpD,GACzC,IAAIyO,EAAMhU,EAAMc,OAAS,EACzB6H,EAAMiF,IAAQlD,EAAM1K,EAAM6H,OAAO,EAAGmM,IACpCrL,EAAMkF,IAAUnD,EAAM1K,EAAM6H,OAAOmM,IACnC9R,EAAgBqD,GAAQvB,SAAU,IAEtCqJ,GAAc,QAAS,SAAUrN,EAAO2I,EAAOpD,GAC3C,IAAI0O,EAAOjU,EAAMc,OAAS,EACtBoT,EAAOlU,EAAMc,OAAS,EAC1B6H,EAAMiF,IAAQlD,EAAM1K,EAAM6H,OAAO,EAAGoM,IACpCtL,EAAMkF,IAAUnD,EAAM1K,EAAM6H,OAAOoM,EAAM,IACzCtL,EAAMmF,IAAUpD,EAAM1K,EAAM6H,OAAOqM,IACnChS,EAAgBqD,GAAQvB,SAAU,IAEtCqJ,GAAc,MAAO,SAAUrN,EAAO2I,EAAOpD,GACzC,IAAIyO,EAAMhU,EAAMc,OAAS,EACzB6H,EAAMiF,IAAQlD,EAAM1K,EAAM6H,OAAO,EAAGmM,IACpCrL,EAAMkF,IAAUnD,EAAM1K,EAAM6H,OAAOmM,MAEvC3G,GAAc,QAAS,SAAUrN,EAAO2I,EAAOpD,GAC3C,IAAI0O,EAAOjU,EAAMc,OAAS,EACtBoT,EAAOlU,EAAMc,OAAS,EAC1B6H,EAAMiF,IAAQlD,EAAM1K,EAAM6H,OAAO,EAAGoM,IACpCtL,EAAMkF,IAAUnD,EAAM1K,EAAM6H,OAAOoM,EAAM,IACzCtL,EAAMmF,IAAUpD,EAAM1K,EAAM6H,OAAOqM,MAWvC,IAKIC,GAAapJ,EAAW,SAAS,GAUrC,IAuBIqJ,GAvBAC,GAAa,CACbC,SA7iDkB,CAClBC,QAAS,gBACTC,QAAS,mBACTC,SAAU,eACVC,QAAS,oBACTC,SAAU,sBACVC,SAAU,KAwiDVzL,eAl7CwB,CACxB0L,IAAK,YACLC,GAAI,SACJC,EAAG,aACHC,GAAI,eACJC,IAAK,sBACLC,KAAM,6BA66CNjM,YAh5CqB,eAi5CrBZ,QA34CiB,KA44CjB8M,uBA34CgC,UA44ChCC,aAt4CsB,CACtBC,OAAQ,QACRC,KAAM,SACNnI,EAAG,gBACHoI,GAAI,aACJpT,EAAG,WACHqT,GAAI,aACJC,EAAG,UACHC,GAAI,WACJxD,EAAG,QACHyD,GAAI,UACJC,EAAG,SACHC,GAAI,WACJC,EAAG,UACHC,GAAI,YACJhG,EAAG,SACHiG,GAAI,YAw3CJ1H,OAAQI,GACRL,YAAaO,GAEbiC,KAzlBoB,CACpBL,IAAK,EACLC,IAAK,GAylBLoB,SAAUM,GACVR,YAAaU,GACbT,cAAeQ,GAEf6D,cAhC6B,iBAoC7BC,GAAU,GACVC,GAAiB,GAcrB,SAASC,GAAgBlQ,GACrB,OAAOA,EAAMA,EAAIyD,cAAcd,QAAQ,IAAK,KAAO3C,EAMvD,SAASmQ,GAAaC,GAOlB,IANA,IACIC,EACAC,EACA1U,EACA6M,EAJAnN,EAAI,EAMDA,EAAI8U,EAAMxV,QAAQ,CAKrB,IAHAyV,GADA5H,EAAQyH,GAAgBE,EAAM9U,IAAImN,MAAM,MAC9B7N,OAEV0V,GADAA,EAAOJ,GAAgBE,EAAM9U,EAAI,KACnBgV,EAAK7H,MAAM,KAAO,KACrB,EAAJ4H,GAAO,CAEV,GADAzU,EAAS2U,GAAW9H,EAAMvI,MAAM,EAAGmQ,GAAGlQ,KAAK,MAEvC,OAAOvE,EAEX,GACI0U,GACAA,EAAK1V,QAAUyV,GArC/B,SAAsBG,EAAMC,GAGxB,IAFA,IACIC,EAAOpP,KAAK0H,IAAIwH,EAAK5V,OAAQ6V,EAAK7V,QACjCU,EAAI,EAAGA,EAAIoV,EAAMpV,GAAK,EACvB,GAAIkV,EAAKlV,KAAOmV,EAAKnV,GACjB,OAAOA,EAGf,OAAOoV,EA8BKC,CAAalI,EAAO6H,IAASD,EAAI,EAGjC,MAEJA,IAEJ/U,IAEJ,OAAO4S,GAGX,SAASqC,GAAW9P,GAChB,IAAImQ,EAGJ,QACsB/S,IAAlBmS,GAAQvP,IACU,oBAAXtH,QACPA,QACAA,OAAOD,QAEP,IACI0X,EAAY1C,GAAa2C,MACRC,QACF,YAAcrQ,GAC7BsQ,GAAmBH,GACrB,MAAOI,GAGLhB,GAAQvP,GAAQ,KAGxB,OAAOuP,GAAQvP,GAMnB,SAASsQ,GAAmB/Q,EAAKiR,GAC7B,IAAIC,EAqBJ,OApBIlR,KAEIkR,EADApW,EAAYmW,GACLE,GAAUnR,GAEVoR,GAAapR,EAAKiR,IAKzB/C,GAAegD,EAEQ,oBAAZvR,SAA2BA,QAAQH,MAE1CG,QAAQH,KACJ,UAAYQ,EAAM,2CAM3BkO,GAAa2C,MAGxB,SAASO,GAAa3Q,EAAMpB,GACxB,GAAe,OAAXA,EAiDA,cADO2Q,GAAQvP,GACR,KAhDP,IAAI7E,EACAiF,EAAesN,GAEnB,GADA9O,EAAOgS,KAAO5Q,EACO,MAAjBuP,GAAQvP,GACRD,EACI,uBACA,2OAKJK,EAAemP,GAAQvP,GAAM6Q,aAC1B,GAA2B,MAAvBjS,EAAOkS,aACd,GAAoC,MAAhCvB,GAAQ3Q,EAAOkS,cACf1Q,EAAemP,GAAQ3Q,EAAOkS,cAAcD,YACzC,CAEH,GAAc,OADd1V,EAAS2U,GAAWlR,EAAOkS,eAWvB,OAPKtB,GAAe5Q,EAAOkS,gBACvBtB,GAAe5Q,EAAOkS,cAAgB,IAE1CtB,GAAe5Q,EAAOkS,cAAchW,KAAK,CACrCkF,KAAMA,EACNpB,OAAQA,IAEL,KATPwB,EAAejF,EAAO0V,QA0BlC,OAbAtB,GAAQvP,GAAQ,IAAIM,EAAOH,EAAaC,EAAcxB,IAElD4Q,GAAexP,IACfwP,GAAexP,GAAM+Q,QAAQ,SAAUxJ,GACnCoJ,GAAapJ,EAAEvH,KAAMuH,EAAE3I,UAO/B0R,GAAmBtQ,GAEZuP,GAAQvP,GAsDvB,SAAS0Q,GAAUnR,GACf,IAAIpE,EAMJ,GAJIoE,GAAOA,EAAIb,SAAWa,EAAIb,QAAQ0R,QAClC7Q,EAAMA,EAAIb,QAAQ0R,QAGjB7Q,EACD,OAAOkO,GAGX,IAAKrU,EAAQmG,GAAM,CAGf,GADApE,EAAS2U,GAAWvQ,GAEhB,OAAOpE,EAEXoE,EAAM,CAACA,GAGX,OAAOmQ,GAAanQ,GAOxB,SAASyR,GAAcxV,GACnB,IAAIK,EACAhC,EAAI2B,EAAEyV,GAuCV,OArCIpX,IAAsC,IAAjC0B,EAAgBC,GAAGK,WACxBA,EACIhC,EAAEkN,IAAS,GAAgB,GAAXlN,EAAEkN,IACZA,GACAlN,EAAEmN,IAAQ,GAAKnN,EAAEmN,IAAQtC,GAAY7K,EAAEiN,IAAOjN,EAAEkN,KAChDC,GACAnN,EAAEoN,IAAQ,GACA,GAAVpN,EAAEoN,KACW,KAAZpN,EAAEoN,MACgB,IAAdpN,EAAEqN,KACe,IAAdrN,EAAEsN,KACiB,IAAnBtN,EAAEuN,KACVH,GACApN,EAAEqN,IAAU,GAAiB,GAAZrN,EAAEqN,IACnBA,GACArN,EAAEsN,IAAU,GAAiB,GAAZtN,EAAEsN,IACnBA,GACAtN,EAAEuN,IAAe,GAAsB,IAAjBvN,EAAEuN,IACxBA,IACC,EAGP7L,EAAgBC,GAAG0V,qBAClBrV,EAAWiL,IAAmBE,GAAXnL,KAEpBA,EAAWmL,IAEXzL,EAAgBC,GAAG2V,iBAAgC,IAAdtV,IACrCA,EAAWwL,IAEX9L,EAAgBC,GAAG4V,mBAAkC,IAAdvV,IACvCA,EAAWyL,IAGf/L,EAAgBC,GAAGK,SAAWA,GAG3BL,EAKX,IAAI6V,GAAmB,iJACnBC,GAAgB,6IAChBC,GAAU,wBACVC,GAAW,CACP,CAAC,eAAgB,uBACjB,CAAC,aAAc,mBACf,CAAC,eAAgB,kBACjB,CAAC,aAAc,eAAe,GAC9B,CAAC,WAAY,eACb,CAAC,UAAW,cAAc,GAC1B,CAAC,aAAc,cACf,CAAC,WAAY,SACb,CAAC,aAAc,eACf,CAAC,YAAa,eAAe,GAC7B,CAAC,UAAW,SACZ,CAAC,SAAU,SAAS,GACpB,CAAC,OAAQ,SAAS,IAGtBC,GAAW,CACP,CAAC,gBAAiB,uBAClB,CAAC,gBAAiB,sBAClB,CAAC,WAAY,kBACb,CAAC,QAAS,aACV,CAAC,cAAe,qBAChB,CAAC,cAAe,oBAChB,CAAC,SAAU,gBACX,CAAC,OAAQ,YACT,CAAC,KAAM,SAEXC,GAAkB,qBAElBlV,GAAU,0LACVmV,GAAa,CACTC,GAAI,EACJC,IAAK,EACLC,KAAK,IACLC,KAAK,IACLC,KAAK,IACLC,KAAK,IACLC,KAAK,IACLC,KAAK,IACLC,KAAK,IACLC,KAAK,KAIb,SAASC,GAAc1T,GACnB,IAAI/D,EACA0X,EAGAC,EACAC,EACAC,EACAC,EALAC,EAAShU,EAAOR,GAChB6D,EAAQoP,GAAiBwB,KAAKD,IAAWtB,GAAcuB,KAAKD,GAMhE,GAAI3Q,EAAO,CAGP,IAFA1G,EAAgBqD,GAAQxC,KAAM,EAEzBvB,EAAI,EAAG0X,EAAIf,GAASrX,OAAQU,EAAI0X,EAAG1X,IACpC,GAAI2W,GAAS3W,GAAG,GAAGgY,KAAK5Q,EAAM,IAAK,CAC/BwQ,EAAajB,GAAS3W,GAAG,GACzB2X,GAA+B,IAAnBhB,GAAS3W,GAAG,GACxB,MAGR,GAAkB,MAAd4X,EAEA,YADA7T,EAAOjC,UAAW,GAGtB,GAAIsF,EAAM,GAAI,CACV,IAAKpH,EAAI,EAAG0X,EAAId,GAAStX,OAAQU,EAAI0X,EAAG1X,IACpC,GAAI4W,GAAS5W,GAAG,GAAGgY,KAAK5Q,EAAM,IAAK,CAE/ByQ,GAAczQ,EAAM,IAAM,KAAOwP,GAAS5W,GAAG,GAC7C,MAGR,GAAkB,MAAd6X,EAEA,YADA9T,EAAOjC,UAAW,GAI1B,IAAK6V,GAA2B,MAAdE,EAEd,YADA9T,EAAOjC,UAAW,GAGtB,GAAIsF,EAAM,GAAI,CACV,IAAIsP,GAAQsB,KAAK5Q,EAAM,IAInB,YADArD,EAAOjC,UAAW,GAFlBgW,EAAW,IAMnB/T,EAAOP,GAAKoU,GAAcC,GAAc,KAAOC,GAAY,IAC3DG,GAA0BlU,QAE1BA,EAAOjC,UAAW,EAI1B,SAASoW,GACLC,EACAC,EACAC,EACAC,EACAC,EACAC,GAEA,IAAIC,EAAS,CAejB,SAAwBN,GACpB,IAAIrP,EAAO2F,SAAS0J,EAAS,IAC7B,CAAA,GAAIrP,GAAQ,GACR,OAAO,IAAOA,EACX,GAAIA,GAAQ,IACf,OAAO,KAAOA,EAElB,OAAOA,EArBH4P,CAAeP,GACf/K,GAAyBpB,QAAQoM,GACjC3J,SAAS4J,EAAQ,IACjB5J,SAAS6J,EAAS,IAClB7J,SAAS8J,EAAW,KAOxB,OAJIC,GACAC,EAAOxY,KAAKwO,SAAS+J,EAAW,KAG7BC,EAuDX,SAASE,GAAkB5U,GACvB,IACI6U,EAnCcC,EAAYC,EAAa/U,EAkCvCqD,EAAQzF,GAAQqW,KAAuBjU,EAAOR,GAxC7C8D,QAAQ,oBAAqB,KAC7BA,QAAQ,WAAY,KACpBA,QAAQ,SAAU,IAClBA,QAAQ,SAAU,KAuCvB,GAAID,EAAO,CASP,GARAwR,EAAcV,GACV9Q,EAAM,GACNA,EAAM,GACNA,EAAM,GACNA,EAAM,GACNA,EAAM,GACNA,EAAM,IA3CIyR,EA6CIzR,EAAM,GA7CE0R,EA6CEF,EA7CW7U,EA6CEA,EA5CzC8U,GAEsBjI,GAA2B5E,QAAQ6M,KACrC,IAAIlZ,KAChBmZ,EAAY,GACZA,EAAY,GACZA,EAAY,IACdC,WAEFrY,EAAgBqD,GAAQnC,iBAAkB,QAC1CmC,EAAOjC,UAAW,IAmClB,OAGJiC,EAAOqS,GAAKwC,EACZ7U,EAAOL,KAhCf,SAAyBsV,EAAWC,EAAgBC,GAChD,GAAIF,EACA,OAAOlC,GAAWkC,GACf,GAAIC,EAEP,OAAO,EAEP,IAAIE,EAAK1K,SAASyK,EAAW,IACzBvY,EAAIwY,EAAK,IAEb,OAAW,KADFA,EAAKxY,GAAK,KACHA,EAsBFyY,CAAgBhS,EAAM,GAAIA,EAAM,GAAIA,EAAM,KAExDrD,EAAO5B,GAAKwM,GAActQ,MAAM,KAAM0F,EAAOqS,IAC7CrS,EAAO5B,GAAGkX,cAActV,EAAO5B,GAAGmX,gBAAkBvV,EAAOL,MAE3DhD,EAAgBqD,GAAQpC,SAAU,OAElCoC,EAAOjC,UAAW,EA6C1B,SAASyX,GAASva,EAAGC,EAAGua,GACpB,OAAS,MAALxa,EACOA,EAEF,MAALC,EACOA,EAEJua,EAoBX,SAASC,GAAgB1V,GACrB,IAAI/D,EACA4J,EAEA8P,EACAC,EACAC,EAvBkB7V,EAElB8V,EAkBArb,EAAQ,GAKZ,IAAIuF,EAAO5B,GAAX,CAgCA,IAzDsB4B,EA6BSA,EA3B3B8V,EAAW,IAAIla,KAAKvB,EAAM0b,OA2B9BJ,EA1BI3V,EAAOgW,QACA,CACHF,EAAShL,iBACTgL,EAASG,cACTH,EAASI,cAGV,CAACJ,EAASK,cAAeL,EAASM,WAAYN,EAASO,WAsB1DrW,EAAOgI,IAAyB,MAAnBhI,EAAOqS,GAAGjK,KAAqC,MAApBpI,EAAOqS,GAAGlK,KA0E1D,SAA+BnI,GAC3B,IAAIqQ,EAAGiG,EAAUhL,EAAMC,EAASN,EAAKC,EAAKqL,EAAMC,EAAiBC,EAGrD,OADZpG,EAAIrQ,EAAOgI,IACL0O,IAAqB,MAAPrG,EAAEsG,GAAoB,MAAPtG,EAAEuG,GACjC3L,EAAM,EACNC,EAAM,EAMNoL,EAAWd,GACPnF,EAAEqG,GACF1W,EAAOqS,GAAGnK,IACVyD,GAAWkL,KAAe,EAAG,GAAG9R,MAEpCuG,EAAOkK,GAASnF,EAAEsG,EAAG,KACrBpL,EAAUiK,GAASnF,EAAEuG,EAAG,IACV,GAAe,EAAVrL,KACfiL,GAAkB,KAGtBvL,EAAMjL,EAAOF,QAAQgX,MAAM7L,IAC3BC,EAAMlL,EAAOF,QAAQgX,MAAM5L,IAE3BuL,EAAU9K,GAAWkL,KAAe5L,EAAKC,GAEzCoL,EAAWd,GAASnF,EAAE0G,GAAI/W,EAAOqS,GAAGnK,IAAOuO,EAAQ1R,MAGnDuG,EAAOkK,GAASnF,EAAEA,EAAGoG,EAAQnL,MAElB,MAAP+E,EAAE1D,IAEFpB,EAAU8E,EAAE1D,GACE,GAAe,EAAVpB,KACfiL,GAAkB,GAER,MAAPnG,EAAEsB,GAETpG,EAAU8E,EAAEsB,EAAI1G,GACZoF,EAAEsB,EAAI,GAAW,EAANtB,EAAEsB,KACb6E,GAAkB,IAItBjL,EAAUN,GAGdK,EAAO,GAAKA,EAAOQ,GAAYwK,EAAUrL,EAAKC,GAC9CvO,EAAgBqD,GAAQuS,gBAAiB,EACf,MAAnBiE,EACP7Z,EAAgBqD,GAAQwS,kBAAmB,GAE3C+D,EAAOlL,GAAmBiL,EAAUhL,EAAMC,EAASN,EAAKC,GACxDlL,EAAOqS,GAAGnK,IAAQqO,EAAKxR,KACvB/E,EAAOgX,WAAaT,EAAK9K,WAlIzBwL,CAAsBjX,GAID,MAArBA,EAAOgX,aACPnB,EAAYL,GAASxV,EAAOqS,GAAGnK,IAAOyN,EAAYzN,MAG9ClI,EAAOgX,WAAazM,GAAWsL,IACT,IAAtB7V,EAAOgX,cAEPra,EAAgBqD,GAAQsS,oBAAqB,GAGjDzM,EAAO+E,GAAciL,EAAW,EAAG7V,EAAOgX,YAC1ChX,EAAOqS,GAAGlK,IAAStC,EAAKoQ,cACxBjW,EAAOqS,GAAGjK,IAAQvC,EAAKqQ,cAQtBja,EAAI,EAAGA,EAAI,GAAqB,MAAhB+D,EAAOqS,GAAGpW,KAAcA,EACzC+D,EAAOqS,GAAGpW,GAAKxB,EAAMwB,GAAK0Z,EAAY1Z,GAI1C,KAAOA,EAAI,EAAGA,IACV+D,EAAOqS,GAAGpW,GAAKxB,EAAMwB,GACD,MAAhB+D,EAAOqS,GAAGpW,GAAoB,IAANA,EAAU,EAAI,EAAK+D,EAAOqS,GAAGpW,GAKrC,KAApB+D,EAAOqS,GAAGhK,KACY,IAAtBrI,EAAOqS,GAAG/J,KACY,IAAtBtI,EAAOqS,GAAG9J,KACiB,IAA3BvI,EAAOqS,GAAG7J,MAEVxI,EAAOkX,UAAW,EAClBlX,EAAOqS,GAAGhK,IAAQ,GAGtBrI,EAAO5B,IAAM4B,EAAOgW,QAAUpL,GAp1ClC,SAAoBJ,EAAG5N,EAAG+P,EAAGuD,EAAGK,EAAG3I,EAAGuP,GAGlC,IAAItR,EAYJ,OAVI2E,EAAI,KAAY,GAALA,GAEX3E,EAAO,IAAIjK,KAAK4O,EAAI,IAAK5N,EAAG+P,EAAGuD,EAAGK,EAAG3I,EAAGuP,GACpC5R,SAASM,EAAKsQ,gBACdtQ,EAAKuR,YAAY5M,IAGrB3E,EAAO,IAAIjK,KAAK4O,EAAG5N,EAAG+P,EAAGuD,EAAGK,EAAG3I,EAAGuP,GAG/BtR,IAq0CmDvL,MACtD,KACAG,GAEJmb,EAAkB5V,EAAOgW,QACnBhW,EAAO5B,GAAGgN,YACVpL,EAAO5B,GAAG4W,SAIG,MAAfhV,EAAOL,MACPK,EAAO5B,GAAGkX,cAActV,EAAO5B,GAAGmX,gBAAkBvV,EAAOL,MAG3DK,EAAOkX,WACPlX,EAAOqS,GAAGhK,IAAQ,IAKlBrI,EAAOgI,SACgB,IAAhBhI,EAAOgI,GAAG2E,GACjB3M,EAAOgI,GAAG2E,IAAMiJ,IAEhBjZ,EAAgBqD,GAAQnC,iBAAkB,IAwElD,SAASqW,GAA0BlU,GAE/B,GAAIA,EAAOP,KAAOpF,EAAMgd,SAIxB,GAAIrX,EAAOP,KAAOpF,EAAMid,SAAxB,CAIAtX,EAAOqS,GAAK,GACZ1V,EAAgBqD,GAAQlD,OAAQ,EAgBhC,IAbA,IAEIiY,EAEAnS,EACA2U,EAGA7Z,EAl3DyBkF,EAAOnI,EAAOuF,EA02DvCgU,EAAS,GAAKhU,EAAOR,GAMrBgY,EAAexD,EAAOzY,OACtBkc,EAAyB,EAG7B5P,EACI1E,EAAanD,EAAOP,GAAIO,EAAOF,SAASuD,MAAMd,IAAqB,GAElEtG,EAAI,EAAGA,EAAI4L,EAAOtM,OAAQU,IAC3B2G,EAAQiF,EAAO5L,IACf8Y,GAAef,EAAO3Q,MAAM+D,GAAsBxE,EAAO5C,KACrD,IAAI,MAGiB,GADrBuX,EAAUvD,EAAO1R,OAAO,EAAG0R,EAAO/L,QAAQ8M,KAC9BxZ,QACRoB,EAAgBqD,GAAQhD,YAAYd,KAAKqb,GAE7CvD,EAASA,EAAOnT,MACZmT,EAAO/L,QAAQ8M,GAAeA,EAAYxZ,QAE9Ckc,GAA0B1C,EAAYxZ,QAGtCmH,EAAqBE,IACjBmS,EACApY,EAAgBqD,GAAQlD,OAAQ,EAEhCH,EAAgBqD,GAAQjD,aAAab,KAAK0G,GA14DzBA,EA44DGA,EA54DW5C,EA44DSA,EA34DvC,OADuBvF,EA44DGsa,IA34DlB/Z,EAAW6M,GAAQjF,IACpCiF,GAAOjF,GAAOnI,EAAOuF,EAAOqS,GAAIrS,EAAQ4C,IA24D7B5C,EAAOzB,UAAYwW,GAC1BpY,EAAgBqD,GAAQjD,aAAab,KAAK0G,GAKlDjG,EAAgBqD,GAAQ9C,cACpBsa,EAAeC,EACC,EAAhBzD,EAAOzY,QACPoB,EAAgBqD,GAAQhD,YAAYd,KAAK8X,GAKzChU,EAAOqS,GAAGhK,KAAS,KACiB,IAApC1L,EAAgBqD,GAAQvB,SACN,EAAlBuB,EAAOqS,GAAGhK,MAEV1L,EAAgBqD,GAAQvB,aAAUD,GAGtC7B,EAAgBqD,GAAQvC,gBAAkBuC,EAAOqS,GAAGxR,MAAM,GAC1DlE,EAAgBqD,GAAQrC,SAAWqC,EAAOwO,UAE1CxO,EAAOqS,GAAGhK,IAgBd,SAAyB9L,EAAQmb,EAAM/Z,GACnC,IAAIga,EAEJ,GAAgB,MAAZha,EAEA,OAAO+Z,EAEX,OAA2B,MAAvBnb,EAAOqb,aACArb,EAAOqb,aAAaF,EAAM/Z,IACX,MAAfpB,EAAOgS,QAEdoJ,EAAOpb,EAAOgS,KAAK5Q,KACP+Z,EAAO,KACfA,GAAQ,IAEPC,GAAiB,KAATD,IACTA,EAAO,IAEJA,GAlCOG,CACd7X,EAAOF,QACPE,EAAOqS,GAAGhK,IACVrI,EAAOwO,WAKC,QADZ9Q,EAAMf,EAAgBqD,GAAQtC,OAE1BsC,EAAOqS,GAAGnK,IAAQlI,EAAOF,QAAQgY,gBAAgBpa,EAAKsC,EAAOqS,GAAGnK,MAGpEwN,GAAgB1V,GAChBoS,GAAcpS,QA/EV4U,GAAkB5U,QAJlB0T,GAAc1T,GAwMtB,SAAS+X,GAAc/X,GACnB,IAgCqBA,EACjBvF,EAjCAA,EAAQuF,EAAOR,GACflD,EAAS0D,EAAOP,GAIpB,OAFAO,EAAOF,QAAUE,EAAOF,SAAWgS,GAAU9R,EAAON,IAEtC,OAAVjF,QAA8B+D,IAAXlC,GAAkC,KAAV7B,EACpCkE,EAAc,CAAExB,WAAW,KAGjB,iBAAV1C,IACPuF,EAAOR,GAAK/E,EAAQuF,EAAOF,QAAQkY,SAASvd,IAG5CyF,EAASzF,GACF,IAAIsF,EAAOqS,GAAc3X,KACzBkB,EAAOlB,GACduF,EAAO5B,GAAK3D,EACLD,EAAQ8B,GA1GvB,SAAkC0D,GAC9B,IAAIiY,EACAC,EACAC,EACAlc,EACAmc,EACAC,EACAC,GAAoB,EAExB,GAAyB,IAArBtY,EAAOP,GAAGlE,OAGV,OAFAoB,EAAgBqD,GAAQ1C,eAAgB,EACxC0C,EAAO5B,GAAK,IAAIxC,KAAKgD,KAIzB,IAAK3C,EAAI,EAAGA,EAAI+D,EAAOP,GAAGlE,OAAQU,IAC9Bmc,EAAe,EACfC,GAAmB,EACnBJ,EAAa/Y,EAAW,GAAIc,GACN,MAAlBA,EAAOgW,UACPiC,EAAWjC,QAAUhW,EAAOgW,SAEhCiC,EAAWxY,GAAKO,EAAOP,GAAGxD,GAC1BiY,GAA0B+D,GAEtBna,EAAQma,KACRI,GAAmB,GAIvBD,GAAgBzb,EAAgBsb,GAAY/a,cAG5Ckb,GAAkE,GAAlDzb,EAAgBsb,GAAYlb,aAAaxB,OAEzDoB,EAAgBsb,GAAYM,MAAQH,EAE/BE,EAaGF,EAAeD,IACfA,EAAcC,EACdF,EAAaD,IAbE,MAAfE,GACAC,EAAeD,GACfE,KAEAF,EAAcC,EACdF,EAAaD,EACTI,IACAC,GAAoB,IAWpCnc,EAAO6D,EAAQkY,GAAcD,GAkDzBO,CAAyBxY,GAClB1D,EACP4X,GAA0BlU,GAc1BvE,EADAhB,GADiBuF,EAVDA,GAWDR,IAEfQ,EAAO5B,GAAK,IAAIxC,KAAKvB,EAAM0b,OACpBpa,EAAOlB,GACduF,EAAO5B,GAAK,IAAIxC,KAAKnB,EAAM2B,WACH,iBAAV3B,EAldtB,SAA0BuF,GACtB,IAAIuH,EAAUuL,GAAgBmB,KAAKjU,EAAOR,IAC1B,OAAZ+H,GAKJmM,GAAc1T,IACU,IAApBA,EAAOjC,kBACAiC,EAAOjC,SAKlB6W,GAAkB5U,IACM,IAApBA,EAAOjC,kBACAiC,EAAOjC,SAKdiC,EAAOzB,QACPyB,EAAOjC,UAAW,EAGlB1D,EAAMoe,wBAAwBzY,MAtB9BA,EAAO5B,GAAK,IAAIxC,MAAM2L,EAAQ,IAgd9BmR,CAAiB1Y,GACVxF,EAAQC,IACfuF,EAAOqS,GAAKxW,EAAIpB,EAAMoG,MAAM,GAAI,SAAUxF,GACtC,OAAOqP,SAASrP,EAAK,MAEzBqa,GAAgB1V,IACTjF,EAASN,GA1ExB,SAA0BuF,GACtB,IAII/D,EACA0c,EALA3Y,EAAO5B,KAKPua,OAAsBna,KADtBvC,EAAIsI,EAAqBvE,EAAOR,KAClB+N,IAAoBtR,EAAE4J,KAAO5J,EAAEsR,IACjDvN,EAAOqS,GAAKxW,EACR,CAACI,EAAE8I,KAAM9I,EAAE2J,MAAO+S,EAAW1c,EAAEyb,KAAMzb,EAAE2c,OAAQ3c,EAAE4c,OAAQ5c,EAAE6c,aAC3D,SAAUzd,GACN,OAAOA,GAAOqP,SAASrP,EAAK,MAIpCqa,GAAgB1V,IA6DZ+Y,CAAiB/Y,GACVtE,EAASjB,GAEhBuF,EAAO5B,GAAK,IAAIxC,KAAKnB,GAErBJ,EAAMoe,wBAAwBzY,GA1B7BlC,EAAQkC,KACTA,EAAO5B,GAAK,MAGT4B,IA0BX,SAASvD,GAAiBhC,EAAO6B,EAAQC,EAAQC,EAAQwc,GACrD,IAnEIhd,EAmEAyZ,EAAI,GA2BR,OAzBe,IAAXnZ,IAA8B,IAAXA,IACnBE,EAASF,EACTA,OAASkC,IAGE,IAAXjC,IAA8B,IAAXA,IACnBC,EAASD,EACTA,OAASiC,IAIRzD,EAASN,IAAUW,EAAcX,IACjCD,EAAQC,IAA2B,IAAjBA,EAAMc,UAEzBd,OAAQ+D,GAIZiX,EAAElW,kBAAmB,EACrBkW,EAAEO,QAAUP,EAAE7V,OAASoZ,EACvBvD,EAAE/V,GAAKnD,EACPkZ,EAAEjW,GAAK/E,EACPgb,EAAEhW,GAAKnD,EACPmZ,EAAElX,QAAU/B,GA5FRR,EAAM,IAAI+D,EAAOqS,GAAc2F,GA8FXtC,MA7FhByB,WAEJlb,EAAIid,IAAI,EAAG,KACXjd,EAAIkb,cAAW1Y,GAGZxC,EA0FX,SAAS6a,GAAYpc,EAAO6B,EAAQC,EAAQC,GACxC,OAAOC,GAAiBhC,EAAO6B,EAAQC,EAAQC,GAAQ,GAte3DnC,EAAMoe,wBAA0BlY,EAC5B,iVAIA,SAAUP,GACNA,EAAO5B,GAAK,IAAIxC,KAAKoE,EAAOR,IAAMQ,EAAOgW,QAAU,OAAS,OAuLpE3b,EAAMgd,SAAW,aAGjBhd,EAAMid,SAAW,aAySjB,IAAI4B,GAAe3Y,EACX,qGACA,WACI,IAAI4Y,EAAQtC,GAAYvc,MAAM,KAAMC,WACpC,OAAIL,KAAK4D,WAAaqb,EAAMrb,UACjBqb,EAAQjf,KAAOA,KAAOif,EAEtBxa,MAInBya,GAAe7Y,EACX,qGACA,WACI,IAAI4Y,EAAQtC,GAAYvc,MAAM,KAAMC,WACpC,OAAIL,KAAK4D,WAAaqb,EAAMrb,UACT5D,KAARif,EAAejf,KAAOif,EAEtBxa,MAUvB,SAAS0a,GAAOtd,EAAIud,GAChB,IAAItd,EAAKC,EAIT,GAHuB,IAAnBqd,EAAQ/d,QAAgBf,EAAQ8e,EAAQ,MACxCA,EAAUA,EAAQ,KAEjBA,EAAQ/d,OACT,OAAOsb,KAGX,IADA7a,EAAMsd,EAAQ,GACTrd,EAAI,EAAGA,EAAIqd,EAAQ/d,SAAUU,EACzBqd,EAAQrd,GAAG6B,YAAawb,EAAQrd,GAAGF,GAAIC,KACxCA,EAAMsd,EAAQrd,IAGtB,OAAOD,EAgBX,IAIIud,GAAW,CACX,OACA,UACA,QACA,OACA,MACA,OACA,SACA,SACA,eAyCJ,SAASC,GAASC,GACd,IAAI/U,EAAkBH,EAAqBkV,GACvCC,EAAQhV,EAAgBK,MAAQ,EAChC4U,EAAWjV,EAAgBkV,SAAW,EACtC7Q,EAASrE,EAAgBkB,OAAS,EAClCiU,EAAQnV,EAAgB4G,MAAQ5G,EAAgBoV,SAAW,EAC3DC,EAAOrV,EAAgB6I,KAAO,EAC9BQ,EAAQrJ,EAAgBgT,MAAQ,EAChCzJ,EAAUvJ,EAAgBkU,QAAU,EACpCxK,EAAU1J,EAAgBmU,QAAU,EACpCmB,EAAetV,EAAgBoU,aAAe,EAElD5e,KAAK6D,SAlDT,SAAyBnB,GACrB,IAAI+D,EAEA1E,EADAge,GAAiB,EAErB,IAAKtZ,KAAO/D,EACR,GACI5B,EAAW4B,EAAG+D,MAEuB,IAAjCsH,GAAQnN,KAAKye,GAAU5Y,IACZ,MAAV/D,EAAE+D,IAAiBxC,MAAMvB,EAAE+D,KAGhC,OAAO,EAIf,IAAK1E,EAAI,EAAGA,EAAIsd,GAAShe,SAAUU,EAC/B,GAAIW,EAAE2c,GAAStd,IAAK,CAChB,GAAIge,EACA,OAAO,EAEPC,WAAWtd,EAAE2c,GAAStd,OAASkJ,EAAMvI,EAAE2c,GAAStd,OAChDge,GAAiB,GAK7B,OAAO,EAuBSE,CAAgBzV,GAGhCxK,KAAKkgB,eACAJ,EACS,IAAV5L,EACU,IAAVH,EACQ,IAARF,EAAe,GAAK,GAGxB7T,KAAKmgB,OAASN,EAAe,EAARF,EAIrB3f,KAAKogB,SAAWvR,EAAoB,EAAX4Q,EAAuB,GAARD,EAExCxf,KAAKqgB,MAAQ,GAEbrgB,KAAK4F,QAAUgS,KAEf5X,KAAKsgB,UAGT,SAASC,GAAWpf,GAChB,OAAOA,aAAeme,GAG1B,SAASkB,GAAS7Y,GACd,OAAIA,EAAS,GACyB,EAA3BI,KAAK0Y,OAAO,EAAI9Y,GAEhBI,KAAK0Y,MAAM9Y,GAuB1B,SAAS+Y,GAAOhY,EAAOiY,GACnBlY,EAAeC,EAAO,EAAG,EAAG,WACxB,IAAIgY,EAAS1gB,KAAK4gB,YACdC,EAAO,IAKX,OAJIH,EAAS,IACTA,GAAUA,EACVG,EAAO,KAGPA,EACAnZ,KAAYgZ,EAAS,IAAK,GAC1BC,EACAjZ,IAAWgZ,EAAS,GAAI,KAKpCA,GAAO,IAAK,KACZA,GAAO,KAAM,IAIb5T,GAAc,IAAKF,IACnBE,GAAc,KAAMF,IACpBgB,GAAc,CAAC,IAAK,MAAO,SAAUrN,EAAO2I,EAAOpD,GAC/CA,EAAOgW,SAAU,EACjBhW,EAAOL,KAAOqb,GAAiBlU,GAAkBrM,KAQrD,IAAIwgB,GAAc,kBAElB,SAASD,GAAiBE,EAASlH,GAC/B,IAEImH,EACAlN,EAHAmN,GAAWpH,GAAU,IAAI3Q,MAAM6X,GAKnC,OAAgB,OAAZE,EACO,KAOQ,KAFnBnN,EAAuB,IADvBkN,IADQC,EAAQA,EAAQ7f,OAAS,IAAM,IACtB,IAAI8H,MAAM4X,KAAgB,CAAC,IAAK,EAAG,IAClC,GAAW9V,EAAMgW,EAAM,KAElB,EAAiB,MAAbA,EAAM,GAAalN,GAAWA,EAI7D,SAASoN,GAAgB5gB,EAAO6gB,GAC5B,IAAItf,EAAKuf,EACT,OAAID,EAAM1b,QACN5D,EAAMsf,EAAME,QACZD,GACKrb,EAASzF,IAAUkB,EAAOlB,GACrBA,EAAM2B,UACNya,GAAYpc,GAAO2B,WAAaJ,EAAII,UAE9CJ,EAAIoC,GAAGqd,QAAQzf,EAAIoC,GAAGhC,UAAYmf,GAClClhB,EAAM4F,aAAajE,GAAK,GACjBA,GAEA6a,GAAYpc,GAAOihB,QAIlC,SAASC,GAAc/e,GAGnB,OAAQqF,KAAK0Y,MAAM/d,EAAEwB,GAAGwd,qBA0J5B,SAASC,KACL,QAAO3hB,KAAK4D,YAAY5D,KAAK0F,QAA2B,IAAjB1F,KAAK2F,SApJhDxF,EAAM4F,aAAe,aAwJrB,IAAI6b,GAAc,wDAIdC,GAAW,sKAEf,SAASC,GAAevhB,EAAOkG,GAC3B,IAGIoa,EACAkB,EACAC,EALAzC,EAAWhf,EAEX4I,EAAQ,KAkEZ,OA7DIoX,GAAWhgB,GACXgf,EAAW,CACPtC,GAAI1c,EAAM2f,cACVzN,EAAGlS,EAAM4f,MACT9J,EAAG9V,EAAM6f,SAEN5e,EAASjB,KAAW0D,OAAO1D,IAClCgf,EAAW,GACP9Y,EACA8Y,EAAS9Y,IAAQlG,EAEjBgf,EAASO,cAAgBvf,IAErB4I,EAAQyY,GAAY7H,KAAKxZ,KACjCsgB,EAAoB,MAAb1X,EAAM,IAAc,EAAI,EAC/BoW,EAAW,CACPjP,EAAG,EACHmC,EAAGxH,EAAM9B,EAAM+E,KAAS2S,EACxB7K,EAAG/K,EAAM9B,EAAMgF,KAAS0S,EACxBne,EAAGuI,EAAM9B,EAAMiF,KAAWyS,EAC1BnT,EAAGzC,EAAM9B,EAAMkF,KAAWwS,EAC1B5D,GAAIhS,EAAMuV,GAA8B,IAArBrX,EAAMmF,MAAwBuS,KAE7C1X,EAAQ0Y,GAAS9H,KAAKxZ,KAC9BsgB,EAAoB,MAAb1X,EAAM,IAAc,EAAI,EAC/BoW,EAAW,CACPjP,EAAG2R,GAAS9Y,EAAM,GAAI0X,GACtBxK,EAAG4L,GAAS9Y,EAAM,GAAI0X,GACtB1K,EAAG8L,GAAS9Y,EAAM,GAAI0X,GACtBpO,EAAGwP,GAAS9Y,EAAM,GAAI0X,GACtB7K,EAAGiM,GAAS9Y,EAAM,GAAI0X,GACtBne,EAAGuf,GAAS9Y,EAAM,GAAI0X,GACtBnT,EAAGuU,GAAS9Y,EAAM,GAAI0X,KAEP,MAAZtB,EAEPA,EAAW,GAES,iBAAbA,IACN,SAAUA,GAAY,OAAQA,KAE/ByC,EAiDR,SAA2BE,EAAMjD,GAC7B,IAAInd,EACJ,IAAMogB,EAAKte,YAAaqb,EAAMrb,UAC1B,MAAO,CAAEkc,aAAc,EAAGjR,OAAQ,GAGtCoQ,EAAQkC,GAAgBlC,EAAOiD,GAC3BA,EAAKC,SAASlD,GACdnd,EAAMsgB,GAA0BF,EAAMjD,KAEtCnd,EAAMsgB,GAA0BnD,EAAOiD,IACnCpC,cAAgBhe,EAAIge,aACxBhe,EAAI+M,QAAU/M,EAAI+M,QAGtB,OAAO/M,EAhEOugB,CACN1F,GAAY4C,EAASra,MACrByX,GAAY4C,EAASta,MAGzBsa,EAAW,IACFtC,GAAK+E,EAAQlC,aACtBP,EAASlJ,EAAI2L,EAAQnT,QAGzBkT,EAAM,IAAIzC,GAASC,GAEfgB,GAAWhgB,IAAUO,EAAWP,EAAO,aACvCwhB,EAAInc,QAAUrF,EAAMqF,SAGpB2a,GAAWhgB,IAAUO,EAAWP,EAAO,cACvCwhB,EAAIle,SAAWtD,EAAMsD,UAGlBke,EAMX,SAASE,GAASK,EAAKzB,GAInB,IAAI/e,EAAMwgB,GAAOtC,WAAWsC,EAAIlZ,QAAQ,IAAK,MAE7C,OAAQnF,MAAMnC,GAAO,EAAIA,GAAO+e,EAGpC,SAASuB,GAA0BF,EAAMjD,GACrC,IAAInd,EAAM,GAUV,OARAA,EAAI+M,OACAoQ,EAAMvT,QAAUwW,EAAKxW,QAAyC,IAA9BuT,EAAMpU,OAASqX,EAAKrX,QACpDqX,EAAKZ,QAAQvC,IAAIjd,EAAI+M,OAAQ,KAAK0T,QAAQtD,MACxCnd,EAAI+M,OAGV/M,EAAIge,aAAgBb,EAASiD,EAAKZ,QAAQvC,IAAIjd,EAAI+M,OAAQ,KAEnD/M,EAsBX,SAAS0gB,GAAYC,EAAWvb,GAC5B,OAAO,SAAU9B,EAAKsd,GAClB,IAASC,EAmBT,OAjBe,OAAXD,GAAoBze,OAAOye,KAC3Bzb,EACIC,EACA,YACIA,EACA,uDACAA,EACA,kGAGRyb,EAAMvd,EACNA,EAAMsd,EACNA,EAASC,GAIbC,GAAY5iB,KADN8hB,GAAe1c,EAAKsd,GACHD,GAChBziB,MAIf,SAAS4iB,GAAYvZ,EAAKkW,EAAUsD,EAAU9c,GAC1C,IAAI+Z,EAAeP,EAASW,cACxBL,EAAOW,GAASjB,EAASY,OACzBtR,EAAS2R,GAASjB,EAASa,SAE1B/W,EAAIzF,YAKTmC,EAA+B,MAAhBA,GAA8BA,EAEzC8I,GACAU,GAASlG,EAAKoC,EAAIpC,EAAK,SAAWwF,EAASgU,GAE3ChD,GACArU,EAAMnC,EAAK,OAAQoC,EAAIpC,EAAK,QAAUwW,EAAOgD,GAE7C/C,GACAzW,EAAInF,GAAGqd,QAAQlY,EAAInF,GAAGhC,UAAY4d,EAAe+C,GAEjD9c,GACA5F,EAAM4F,aAAasD,EAAKwW,GAAQhR,IA5FxCiT,GAAejgB,GAAKyd,GAAS5e,UAC7BohB,GAAegB,QA9Xf,WACI,OAAOhB,GAAepd,MA4d1B,IAAIqa,GAAMyD,GAAY,EAAG,OACrBO,GAAWP,IAAa,EAAG,YAE/B,SAASQ,GAASziB,GACd,MAAwB,iBAAVA,GAAsBA,aAAiB0iB,OAIzD,SAASC,GAAc3iB,GACnB,OACIyF,EAASzF,IACTkB,EAAOlB,IACPyiB,GAASziB,IACTiB,EAASjB,IAgDjB,SAA+BA,GAC3B,IAAI4iB,EAAY7iB,EAAQC,GACpB6iB,GAAe,EACfD,IACAC,EAGkB,IAFd7iB,EAAM8iB,OAAO,SAAUC,GACnB,OAAQ9hB,EAAS8hB,IAASN,GAASziB,KACpCc,QAEX,OAAO8hB,GAAaC,EAxDhBG,CAAsBhjB,IAO9B,SAA6BA,GACzB,IA4BIwB,EACAyhB,EA7BAC,EAAa5iB,EAASN,KAAWW,EAAcX,GAC/CmjB,GAAe,EACfC,EAAa,CACT,QACA,OACA,IACA,SACA,QACA,IACA,OACA,MACA,IACA,QACA,OACA,IACA,QACA,OACA,IACA,UACA,SACA,IACA,UACA,SACA,IACA,eACA,cACA,MAKR,IAAK5hB,EAAI,EAAGA,EAAI4hB,EAAWtiB,OAAQU,GAAK,EACpCyhB,EAAWG,EAAW5hB,GACtB2hB,EAAeA,GAAgB5iB,EAAWP,EAAOijB,GAGrD,OAAOC,GAAcC,EA3CjBE,CAAoBrjB,IANjB,MAOHA,EAqPR,SAASsjB,GAAU9iB,EAAGC,GAClB,GAAID,EAAE4K,OAAS3K,EAAE2K,OAGb,OAAQkY,GAAU7iB,EAAGD,GAGzB,IAAI+iB,EAAyC,IAAvB9iB,EAAE6J,OAAS9J,EAAE8J,SAAgB7J,EAAE0K,QAAU3K,EAAE2K,SAE7DqY,EAAShjB,EAAEugB,QAAQvC,IAAI+E,EAAgB,UAOvCE,EAHAhjB,EAAI+iB,EAAS,GAGH/iB,EAAI+iB,IAAWA,EAFfhjB,EAAEugB,QAAQvC,IAAI+E,EAAiB,EAAG,YAMlC9iB,EAAI+iB,IAFJhjB,EAAEugB,QAAQvC,IAAqB,EAAjB+E,EAAoB,UAETC,GAIvC,QAASD,EAAiBE,IAAW,EAmHzC,SAAS3hB,GAAOoE,GACZ,IAAIwd,EAEJ,YAAY3f,IAARmC,EACOzG,KAAK4F,QAAQ0R,OAGC,OADrB2M,EAAgBrM,GAAUnR,MAEtBzG,KAAK4F,QAAUqe,GAEZjkB,MA1HfG,EAAM+jB,cAAgB,uBACtB/jB,EAAMgkB,iBAAmB,yBA6HzB,IAAIC,GAAO/d,EACP,kJACA,SAAUI,GACN,YAAYnC,IAARmC,EACOzG,KAAK+I,aAEL/I,KAAKqC,OAAOoE,KAK/B,SAASsC,KACL,OAAO/I,KAAK4F,QAGhB,IAGIye,GAAmB,YAGvB,SAASC,GAAMC,EAAUC,GACrB,OAASD,EAAWC,EAAWA,GAAWA,EAG9C,SAASC,GAAiBnU,EAAG5N,EAAG+P,GAE5B,OAAInC,EAAI,KAAY,GAALA,EAEJ,IAAI5O,KAAK4O,EAAI,IAAK5N,EAAG+P,GAAK4R,GAE1B,IAAI3iB,KAAK4O,EAAG5N,EAAG+P,GAAGvQ,UAIjC,SAASwiB,GAAepU,EAAG5N,EAAG+P,GAE1B,OAAInC,EAAI,KAAY,GAALA,EAEJ5O,KAAKiP,IAAIL,EAAI,IAAK5N,EAAG+P,GAAK4R,GAE1B3iB,KAAKiP,IAAIL,EAAG5N,EAAG+P,GAsb9B,SAASkS,GAAa1X,EAAU5K,GAC5B,OAAOA,EAAOuiB,cAAc3X,GAehC,SAAS4X,KASL,IARA,IAAIC,EAAa,GACbC,EAAa,GACbC,EAAe,GACfjV,EAAc,GAGdkV,EAAOjlB,KAAKilB,OAEXljB,EAAI,EAAG0X,EAAIwL,EAAK5jB,OAAQU,EAAI0X,IAAK1X,EAClCgjB,EAAW/iB,KAAKoL,GAAY6X,EAAKljB,GAAGmF,OACpC4d,EAAW9iB,KAAKoL,GAAY6X,EAAKljB,GAAG+V,OACpCkN,EAAahjB,KAAKoL,GAAY6X,EAAKljB,GAAGmjB,SAEtCnV,EAAY/N,KAAKoL,GAAY6X,EAAKljB,GAAGmF,OACrC6I,EAAY/N,KAAKoL,GAAY6X,EAAKljB,GAAG+V,OACrC/H,EAAY/N,KAAKoL,GAAY6X,EAAKljB,GAAGmjB,SAGzCllB,KAAKmlB,WAAa,IAAIhY,OAAO,KAAO4C,EAAYnJ,KAAK,KAAO,IAAK,KACjE5G,KAAKolB,eAAiB,IAAIjY,OAAO,KAAO4X,EAAWne,KAAK,KAAO,IAAK,KACpE5G,KAAKqlB,eAAiB,IAAIlY,OAAO,KAAO2X,EAAWle,KAAK,KAAO,IAAK,KACpE5G,KAAKslB,iBAAmB,IAAInY,OACxB,KAAO6X,EAAape,KAAK,KAAO,IAChC,KAcR,SAAS2e,GAAuB7c,EAAO8c,GACnC/c,EAAe,EAAG,CAACC,EAAOA,EAAMrH,QAAS,EAAGmkB,GAoFhD,SAASC,GAAqBllB,EAAO6Q,EAAMC,EAASN,EAAKC,GACrD,IAAI0U,EACJ,OAAa,MAATnlB,EACOkR,GAAWzR,KAAM+Q,EAAKC,GAAKnG,OAElC6a,EAAc9T,GAAYrR,EAAOwQ,EAAKC,IAClCI,IACAA,EAAOsU,GAMnB,SAAoBtJ,EAAUhL,EAAMC,EAASN,EAAKC,GAC9C,IAAI2U,EAAgBxU,GAAmBiL,EAAUhL,EAAMC,EAASN,EAAKC,GACjErF,EAAO+E,GAAciV,EAAc9a,KAAM,EAAG8a,EAAcpU,WAK9D,OAHAvR,KAAK6K,KAAKc,EAAKiF,kBACf5Q,KAAK0L,MAAMC,EAAKoQ,eAChB/b,KAAK2L,KAAKA,EAAKqQ,cACRhc,MAXeY,KAAKZ,KAAMO,EAAO6Q,EAAMC,EAASN,EAAKC,IAjYhEvI,EAAe,IAAK,EAAG,EAAG,WAC1BA,EAAe,KAAM,EAAG,EAAG,WAC3BA,EAAe,MAAO,EAAG,EAAG,WAC5BA,EAAe,OAAQ,EAAG,EAAG,WAC7BA,EAAe,QAAS,EAAG,EAAG,aAE9BA,EAAe,IAAK,CAAC,IAAK,GAAI,KAAM,WACpCA,EAAe,IAAK,CAAC,KAAM,GAAI,EAAG,WAClCA,EAAe,IAAK,CAAC,MAAO,GAAI,EAAG,WACnCA,EAAe,IAAK,CAAC,OAAQ,GAAI,EAAG,WAEpCqE,GAAc,IAAK6X,IACnB7X,GAAc,KAAM6X,IACpB7X,GAAc,MAAO6X,IACrB7X,GAAc,OAmOd,SAAsBG,EAAU5K,GAC5B,OAAOA,EAAOujB,cAAc3Y,KAnOhCH,GAAc,QAsOd,SAAwBG,EAAU5K,GAC9B,OAAOA,EAAOwjB,gBAAgB5Y,KArOlCW,GAAc,CAAC,IAAK,KAAM,MAAO,OAAQ,SAAU,SAC/CrN,EACA2I,EACApD,EACA4C,GAEA,IAAIlF,EAAMsC,EAAOF,QAAQkgB,UAAUvlB,EAAOmI,EAAO5C,EAAOzB,SACpDb,EACAf,EAAgBqD,GAAQtC,IAAMA,EAE9Bf,EAAgBqD,GAAQ5C,WAAa3C,IAI7CuM,GAAc,IAAKL,IACnBK,GAAc,KAAML,IACpBK,GAAc,MAAOL,IACrBK,GAAc,OAAQL,IACtBK,GAAc,KAsNd,SAA6BG,EAAU5K,GACnC,OAAOA,EAAO0jB,sBAAwBtZ,KArN1CmB,GAAc,CAAC,IAAK,KAAM,MAAO,QAASI,IAC1CJ,GAAc,CAAC,MAAO,SAAUrN,EAAO2I,EAAOpD,EAAQ4C,GAClD,IAAIS,EACArD,EAAOF,QAAQmgB,uBACf5c,EAAQ5I,EAAM4I,MAAMrD,EAAOF,QAAQmgB,uBAGnCjgB,EAAOF,QAAQogB,oBACf9c,EAAM8E,IAAQlI,EAAOF,QAAQogB,oBAAoBzlB,EAAO4I,GAExDD,EAAM8E,IAAQwC,SAASjQ,EAAO,MA4OtCkI,EAAe,EAAG,CAAC,KAAM,GAAI,EAAG,WAC5B,OAAOzI,KAAKoc,WAAa,MAG7B3T,EAAe,EAAG,CAAC,KAAM,GAAI,EAAG,WAC5B,OAAOzI,KAAKimB,cAAgB,MAOhCV,GAAuB,OAAQ,YAC/BA,GAAuB,QAAS,YAChCA,GAAuB,OAAQ,eAC/BA,GAAuB,QAAS,eAIhCzb,EAAa,WAAY,MACzBA,EAAa,cAAe,MAI5BY,EAAgB,WAAY,GAC5BA,EAAgB,cAAe,GAI/BoC,GAAc,IAAKJ,IACnBI,GAAc,IAAKJ,IACnBI,GAAc,KAAMX,GAAWJ,GAC/Be,GAAc,KAAMX,GAAWJ,GAC/Be,GAAc,OAAQP,GAAWN,GACjCa,GAAc,OAAQP,GAAWN,GACjCa,GAAc,QAASN,GAAWN,IAClCY,GAAc,QAASN,GAAWN,IAElC2B,GAAkB,CAAC,OAAQ,QAAS,OAAQ,SAAU,SAClDtN,EACA6Q,EACAtL,EACA4C,GAEA0I,EAAK1I,EAAMN,OAAO,EAAG,IAAM6C,EAAM1K,KAGrCsN,GAAkB,CAAC,KAAM,MAAO,SAAUtN,EAAO6Q,EAAMtL,EAAQ4C,GAC3D0I,EAAK1I,GAASvI,EAAMoQ,kBAAkBhQ,KAsE1CkI,EAAe,IAAK,EAAG,KAAM,WAI7BqB,EAAa,UAAW,KAIxBY,EAAgB,UAAW,GAI3BoC,GAAc,IAAKhB,GACnB8B,GAAc,IAAK,SAAUrN,EAAO2I,GAChCA,EAAM+E,IAA8B,GAApBhD,EAAM1K,GAAS,KAanCkI,EAAe,IAAK,CAAC,KAAM,GAAI,KAAM,QAIrCqB,EAAa,OAAQ,KAGrBY,EAAgB,OAAQ,GAIxBoC,GAAc,IAAKX,IACnBW,GAAc,KAAMX,GAAWJ,GAC/Be,GAAc,KAAM,SAAUG,EAAU5K,GAEpC,OAAO4K,EACD5K,EAAO6jB,yBAA2B7jB,EAAO8jB,cACzC9jB,EAAO+jB,iCAGjBxY,GAAc,CAAC,IAAK,MAAOM,IAC3BN,GAAc,KAAM,SAAUrN,EAAO2I,GACjCA,EAAMgF,IAAQjD,EAAM1K,EAAM4I,MAAMgD,IAAW,MAK/C,IAAIka,GAAmB/a,EAAW,QAAQ,GAI1C7C,EAAe,MAAO,CAAC,OAAQ,GAAI,OAAQ,aAI3CqB,EAAa,YAAa,OAG1BY,EAAgB,YAAa,GAI7BoC,GAAc,MAAOR,IACrBQ,GAAc,OAAQd,GACtB4B,GAAc,CAAC,MAAO,QAAS,SAAUrN,EAAO2I,EAAOpD,GACnDA,EAAOgX,WAAa7R,EAAM1K,KAiB9BkI,EAAe,IAAK,CAAC,KAAM,GAAI,EAAG,UAIlCqB,EAAa,SAAU,KAIvBY,EAAgB,SAAU,IAI1BoC,GAAc,IAAKX,IACnBW,GAAc,KAAMX,GAAWJ,GAC/B6B,GAAc,CAAC,IAAK,MAAOQ,IAI3B,IAAIkY,GAAehb,EAAW,WAAW,GAIzC7C,EAAe,IAAK,CAAC,KAAM,GAAI,EAAG,UAIlCqB,EAAa,SAAU,KAIvBY,EAAgB,SAAU,IAI1BoC,GAAc,IAAKX,IACnBW,GAAc,KAAMX,GAAWJ,GAC/B6B,GAAc,CAAC,IAAK,MAAOS,IAI3B,IA8CI3F,GAAO6d,GA9CPC,GAAelb,EAAW,WAAW,GA+CzC,IA3CA7C,EAAe,IAAK,EAAG,EAAG,WACtB,SAAUzI,KAAK4e,cAAgB,OAGnCnW,EAAe,EAAG,CAAC,KAAM,GAAI,EAAG,WAC5B,SAAUzI,KAAK4e,cAAgB,MAGnCnW,EAAe,EAAG,CAAC,MAAO,GAAI,EAAG,eACjCA,EAAe,EAAG,CAAC,OAAQ,GAAI,EAAG,WAC9B,OAA4B,GAArBzI,KAAK4e,gBAEhBnW,EAAe,EAAG,CAAC,QAAS,GAAI,EAAG,WAC/B,OAA4B,IAArBzI,KAAK4e,gBAEhBnW,EAAe,EAAG,CAAC,SAAU,GAAI,EAAG,WAChC,OAA4B,IAArBzI,KAAK4e,gBAEhBnW,EAAe,EAAG,CAAC,UAAW,GAAI,EAAG,WACjC,OAA4B,IAArBzI,KAAK4e,gBAEhBnW,EAAe,EAAG,CAAC,WAAY,GAAI,EAAG,WAClC,OAA4B,IAArBzI,KAAK4e,gBAEhBnW,EAAe,EAAG,CAAC,YAAa,GAAI,EAAG,WACnC,OAA4B,IAArBzI,KAAK4e,gBAKhB9U,EAAa,cAAe,MAI5BY,EAAgB,cAAe,IAI/BoC,GAAc,IAAKR,GAAWR,GAC9BgB,GAAc,KAAMR,GAAWP,GAC/Be,GAAc,MAAOR,GAAWN,GAG3BtD,GAAQ,OAAQA,GAAMrH,QAAU,EAAGqH,IAAS,IAC7CoE,GAAcpE,GAAO+D,IAGzB,SAASga,GAAQlmB,EAAO2I,GACpBA,EAAMoF,IAAerD,EAAuB,KAAhB,KAAO1K,IAGvC,IAAKmI,GAAQ,IAAKA,GAAMrH,QAAU,EAAGqH,IAAS,IAC1CkF,GAAclF,GAAO+d,IAGzBF,GAAoBjb,EAAW,gBAAgB,GAI/C7C,EAAe,IAAK,EAAG,EAAG,YAC1BA,EAAe,KAAM,EAAG,EAAG,YAY3B,IAAIie,GAAQ7gB,EAAOnF,UAgHnB,SAASimB,GAAmB7M,GACxB,OAAOA,EA/GX4M,GAAM3H,IAAMA,GACZ2H,GAAM7R,SAjoCN,SAAoB+R,EAAMC,GAEG,IAArBxmB,UAAUgB,SACN6hB,GAAc7iB,UAAU,KACxBumB,EAAOvmB,UAAU,GACjBwmB,OAAUviB,GA5CtB,SAAwB/D,GAcpB,IAbA,IAAIkjB,EAAa5iB,EAASN,KAAWW,EAAcX,GAC/CmjB,GAAe,EACfC,EAAa,CACT,UACA,UACA,UACA,WACA,WACA,YAKH5hB,EAAI,EAAGA,EAAI4hB,EAAWtiB,OAAQU,GAAK,EAEpC2hB,EAAeA,GAAgB5iB,EAAWP,EAD/BojB,EAAW5hB,IAI1B,OAAO0hB,GAAcC,EA0BNoD,CAAezmB,UAAU,MAChCwmB,EAAUxmB,UAAU,GACpBumB,OAAOtiB,IAKf,IAAIuX,EAAM+K,GAAQjK,KACdoK,EAAM5F,GAAgBtF,EAAK7b,MAAMgnB,QAAQ,OACzC5kB,EAASjC,EAAM8mB,eAAejnB,KAAM+mB,IAAQ,WAC5Czd,EACIud,IACC1f,EAAW0f,EAAQzkB,IACdykB,EAAQzkB,GAAQxB,KAAKZ,KAAM6b,GAC3BgL,EAAQzkB,IAEtB,OAAOpC,KAAKoC,OACRkH,GAAUtJ,KAAK+I,aAAa8L,SAASzS,EAAQpC,KAAM2c,GAAYd,MA2mCvE6K,GAAMpF,MAvmCN,WACI,OAAO,IAAIzb,EAAO7F,OAumCtB0mB,GAAMrF,KA/hCN,SAAc9gB,EAAO6J,EAAO8c,GACxB,IAAIC,EAAMC,EAAW9d,EAErB,IAAKtJ,KAAK4D,UACN,OAAOc,IAKX,KAFAyiB,EAAOhG,GAAgB5gB,EAAOP,OAEpB4D,UACN,OAAOc,IAOX,OAJA0iB,EAAoD,KAAvCD,EAAKvG,YAAc5gB,KAAK4gB,aAErCxW,EAAQD,EAAeC,IAGnB,IAAK,OACDd,EAASua,GAAU7jB,KAAMmnB,GAAQ,GACjC,MACJ,IAAK,QACD7d,EAASua,GAAU7jB,KAAMmnB,GACzB,MACJ,IAAK,UACD7d,EAASua,GAAU7jB,KAAMmnB,GAAQ,EACjC,MACJ,IAAK,SACD7d,GAAUtJ,KAAOmnB,GAAQ,IACzB,MACJ,IAAK,SACD7d,GAAUtJ,KAAOmnB,GAAQ,IACzB,MACJ,IAAK,OACD7d,GAAUtJ,KAAOmnB,GAAQ,KACzB,MACJ,IAAK,MACD7d,GAAUtJ,KAAOmnB,EAAOC,GAAa,MACrC,MACJ,IAAK,OACD9d,GAAUtJ,KAAOmnB,EAAOC,GAAa,OACrC,MACJ,QACI9d,EAAStJ,KAAOmnB,EAGxB,OAAOD,EAAU5d,EAASwB,EAASxB,IAk/BvCod,GAAMW,MA1uBN,SAAejd,GACX,IAAIwc,EAAMU,EAEV,QAAchjB,KADd8F,EAAQD,EAAeC,KACc,gBAAVA,IAA4BpK,KAAK4D,UACxD,OAAO5D,KAKX,OAFAsnB,EAActnB,KAAK0F,OAASgf,GAAiBD,GAErCra,GACJ,IAAK,OACDwc,EAAOU,EAAYtnB,KAAK6K,OAAS,EAAG,EAAG,GAAK,EAC5C,MACJ,IAAK,UACD+b,EACIU,EACItnB,KAAK6K,OACL7K,KAAK0L,QAAW1L,KAAK0L,QAAU,EAAK,EACpC,GACA,EACR,MACJ,IAAK,QACDkb,EAAOU,EAAYtnB,KAAK6K,OAAQ7K,KAAK0L,QAAU,EAAG,GAAK,EACvD,MACJ,IAAK,OACDkb,EACIU,EACItnB,KAAK6K,OACL7K,KAAK0L,QACL1L,KAAK2L,OAAS3L,KAAKqR,UAAY,GAC/B,EACR,MACJ,IAAK,UACDuV,EACIU,EACItnB,KAAK6K,OACL7K,KAAK0L,QACL1L,KAAK2L,QAAU3L,KAAKunB,aAAe,GAAK,GACxC,EACR,MACJ,IAAK,MACL,IAAK,OACDX,EAAOU,EAAYtnB,KAAK6K,OAAQ7K,KAAK0L,QAAS1L,KAAK2L,OAAS,GAAK,EACjE,MACJ,IAAK,OACDib,EAAO5mB,KAAKkE,GAAGhC,UACf0kB,GAzIM,KA2IFtC,GACIsC,GAAQ5mB,KAAK0F,OAAS,EA7ItB,IA6I0B1F,KAAK4gB,aA5IjC,MA+IF,EACJ,MACJ,IAAK,SACDgG,EAAO5mB,KAAKkE,GAAGhC,UACf0kB,GApJQ,IAoJgBtC,GAAMsC,EApJtB,KAoJ6C,EACrD,MACJ,IAAK,SACDA,EAAO5mB,KAAKkE,GAAGhC,UACf0kB,GAzJQ,IAyJgBtC,GAAMsC,EAzJtB,KAyJ6C,EACrD,MAKR,OAFA5mB,KAAKkE,GAAGqd,QAAQqF,GAChBzmB,EAAM4F,aAAa/F,MAAM,GAClBA,MAyqBX0mB,GAAMtkB,OAp5BN,SAAgBolB,GAERA,EADCA,IACaxnB,KAAK2hB,QACbxhB,EAAMgkB,iBACNhkB,EAAM+jB,eAEhB,IAAI5a,EAASN,EAAahJ,KAAMwnB,GAChC,OAAOxnB,KAAK+I,aAAa0e,WAAWne,IA84BxCod,GAAMxhB,KA34BN,SAAc0hB,EAAMc,GAChB,OACI1nB,KAAK4D,YACHoC,EAAS4gB,IAASA,EAAKhjB,WAAc+Y,GAAYiK,GAAMhjB,WAElDke,GAAe,CAAE7c,GAAIjF,KAAMkF,KAAM0hB,IACnCvkB,OAAOrC,KAAKqC,UACZslB,UAAUD,GAER1nB,KAAK+I,aAAaS,eAm4BjCkd,GAAMkB,QA/3BN,SAAiBF,GACb,OAAO1nB,KAAKkF,KAAKyX,KAAe+K,IA+3BpChB,GAAMzhB,GA53BN,SAAY2hB,EAAMc,GACd,OACI1nB,KAAK4D,YACHoC,EAAS4gB,IAASA,EAAKhjB,WAAc+Y,GAAYiK,GAAMhjB,WAElDke,GAAe,CAAE5c,KAAMlF,KAAMiF,GAAI2hB,IACnCvkB,OAAOrC,KAAKqC,UACZslB,UAAUD,GAER1nB,KAAK+I,aAAaS,eAo3BjCkd,GAAMmB,MAh3BN,SAAeH,GACX,OAAO1nB,KAAKiF,GAAG0X,KAAe+K,IAg3BlChB,GAAMjb,IAnjIN,SAAmBrB,GAEf,OAAIjD,EAAWnH,KADfoK,EAAQD,EAAeC,KAEZpK,KAAKoK,KAETpK,MA+iIX0mB,GAAMoB,UAznBN,WACI,OAAOrlB,EAAgBzC,MAAM+C,UAynBjC2jB,GAAMnE,QA7mCN,SAAiBhiB,EAAO6J,GACpB,IAAI2d,EAAa/hB,EAASzF,GAASA,EAAQoc,GAAYpc,GACvD,SAAMP,KAAK4D,YAAamkB,EAAWnkB,aAIrB,iBADdwG,EAAQD,EAAeC,IAAU,eAEtBpK,KAAKkC,UAAY6lB,EAAW7lB,UAE5B6lB,EAAW7lB,UAAYlC,KAAKshB,QAAQ0F,QAAQ5c,GAAOlI,YAqmClEwkB,GAAMvE,SAjmCN,SAAkB5hB,EAAO6J,GACrB,IAAI2d,EAAa/hB,EAASzF,GAASA,EAAQoc,GAAYpc,GACvD,SAAMP,KAAK4D,YAAamkB,EAAWnkB,aAIrB,iBADdwG,EAAQD,EAAeC,IAAU,eAEtBpK,KAAKkC,UAAY6lB,EAAW7lB,UAE5BlC,KAAKshB,QAAQ+F,MAAMjd,GAAOlI,UAAY6lB,EAAW7lB,YAylChEwkB,GAAMsB,UArlCN,SAAmB9iB,EAAMD,EAAImF,EAAO6d,GAChC,IAAIC,EAAYliB,EAASd,GAAQA,EAAOyX,GAAYzX,GAChDijB,EAAUniB,EAASf,GAAMA,EAAK0X,GAAY1X,GAC9C,SAAMjF,KAAK4D,WAAaskB,EAAUtkB,WAAaukB,EAAQvkB,cAK/B,OAFxBqkB,EAAcA,GAAe,MAEZ,GACPjoB,KAAKuiB,QAAQ2F,EAAW9d,IACvBpK,KAAKmiB,SAAS+F,EAAW9d,MACZ,MAAnB6d,EAAY,GACPjoB,KAAKmiB,SAASgG,EAAS/d,IACtBpK,KAAKuiB,QAAQ4F,EAAS/d,MAykCrCsc,GAAM0B,OArkCN,SAAgB7nB,EAAO6J,GACnB,IACIie,EADAN,EAAa/hB,EAASzF,GAASA,EAAQoc,GAAYpc,GAEvD,SAAMP,KAAK4D,YAAamkB,EAAWnkB,aAIrB,iBADdwG,EAAQD,EAAeC,IAAU,eAEtBpK,KAAKkC,YAAc6lB,EAAW7lB,WAErCmmB,EAAUN,EAAW7lB,UAEjBlC,KAAKshB,QAAQ0F,QAAQ5c,GAAOlI,WAAammB,GACzCA,GAAWroB,KAAKshB,QAAQ+F,MAAMjd,GAAOlI,aAyjCjDwkB,GAAM4B,cApjCN,SAAuB/nB,EAAO6J,GAC1B,OAAOpK,KAAKooB,OAAO7nB,EAAO6J,IAAUpK,KAAKuiB,QAAQhiB,EAAO6J,IAojC5Dsc,GAAM6B,eAjjCN,SAAwBhoB,EAAO6J,GAC3B,OAAOpK,KAAKooB,OAAO7nB,EAAO6J,IAAUpK,KAAKmiB,SAAS5hB,EAAO6J,IAijC7Dsc,GAAM9iB,QAxoBN,WACI,OAAOA,EAAQ5D,OAwoBnB0mB,GAAMtC,KAAOA,GACbsC,GAAMrkB,OAASA,GACfqkB,GAAM3d,WAAaA,GACnB2d,GAAMve,IAAM+W,GACZwH,GAAMjX,IAAMuP,GACZ0H,GAAM8B,aA1oBN,WACI,OAAOvmB,EAAO,GAAIQ,EAAgBzC,QA0oBtC0mB,GAAMjf,IA1jIN,SAAmB2C,EAAOgB,GACtB,GAAqB,iBAAVhB,EAIP,IAFA,IAAIqe,EAzFZ,SAA6BC,GACzB,IACIC,EADAve,EAAQ,GAEZ,IAAKue,KAAKD,EACF5nB,EAAW4nB,EAAUC,IACrBve,EAAMpI,KAAK,CAAE+H,KAAM4e,EAAGhe,SAAUF,EAAWke,KAMnD,OAHAve,EAAM4F,KAAK,SAAUjP,EAAGC,GACpB,OAAOD,EAAE4J,SAAW3J,EAAE2J,WAEnBP,EA8Eewe,CADlBxe,EAAQC,EAAqBD,IAGxBrI,EAAI,EAAGA,EAAI0mB,EAAYpnB,OAAQU,IAChC/B,KAAKyoB,EAAY1mB,GAAGgI,MAAMK,EAAMqe,EAAY1mB,GAAGgI,YAInD,GAAI5C,EAAWnH,KADfoK,EAAQD,EAAeC,KAEnB,OAAOpK,KAAKoK,GAAOgB,GAG3B,OAAOpL,MA6iIX0mB,GAAMM,QA/zBN,SAAiB5c,GACb,IAAIwc,EAAMU,EAEV,QAAchjB,KADd8F,EAAQD,EAAeC,KACc,gBAAVA,IAA4BpK,KAAK4D,UACxD,OAAO5D,KAKX,OAFAsnB,EAActnB,KAAK0F,OAASgf,GAAiBD,GAErCra,GACJ,IAAK,OACDwc,EAAOU,EAAYtnB,KAAK6K,OAAQ,EAAG,GACnC,MACJ,IAAK,UACD+b,EAAOU,EACHtnB,KAAK6K,OACL7K,KAAK0L,QAAW1L,KAAK0L,QAAU,EAC/B,GAEJ,MACJ,IAAK,QACDkb,EAAOU,EAAYtnB,KAAK6K,OAAQ7K,KAAK0L,QAAS,GAC9C,MACJ,IAAK,OACDkb,EAAOU,EACHtnB,KAAK6K,OACL7K,KAAK0L,QACL1L,KAAK2L,OAAS3L,KAAKqR,WAEvB,MACJ,IAAK,UACDuV,EAAOU,EACHtnB,KAAK6K,OACL7K,KAAK0L,QACL1L,KAAK2L,QAAU3L,KAAKunB,aAAe,IAEvC,MACJ,IAAK,MACL,IAAK,OACDX,EAAOU,EAAYtnB,KAAK6K,OAAQ7K,KAAK0L,QAAS1L,KAAK2L,QACnD,MACJ,IAAK,OACDib,EAAO5mB,KAAKkE,GAAGhC,UACf0kB,GAAQtC,GACJsC,GAAQ5mB,KAAK0F,OAAS,EAzElB,IAyEsB1F,KAAK4gB,aAxE7B,MA2EN,MACJ,IAAK,SACDgG,EAAO5mB,KAAKkE,GAAGhC,UACf0kB,GAAQtC,GAAMsC,EA/EN,KAgFR,MACJ,IAAK,SACDA,EAAO5mB,KAAKkE,GAAGhC,UACf0kB,GAAQtC,GAAMsC,EApFN,KAqFR,MAKR,OAFA5mB,KAAKkE,GAAGqd,QAAQqF,GAChBzmB,EAAM4F,aAAa/F,MAAM,GAClBA,MAowBX0mB,GAAM3D,SAAWA,GACjB2D,GAAMmC,QAjrBN,WACI,IAAInmB,EAAI1C,KACR,MAAO,CACH0C,EAAEmI,OACFnI,EAAEgJ,QACFhJ,EAAEiJ,OACFjJ,EAAE8a,OACF9a,EAAEgc,SACFhc,EAAEic,SACFjc,EAAEkc,gBAyqBV8H,GAAMoC,SArqBN,WACI,IAAIpmB,EAAI1C,KACR,MAAO,CACHwf,MAAO9c,EAAEmI,OACTgE,OAAQnM,EAAEgJ,QACVC,KAAMjJ,EAAEiJ,OACRkI,MAAOnR,EAAEmR,QACTE,QAASrR,EAAEqR,UACXG,QAASxR,EAAEwR,UACX4L,aAAcpd,EAAEod,iBA6pBxB4G,GAAMqC,OAvrBN,WACI,OAAO,IAAIrnB,KAAK1B,KAAKkC,YAurBzBwkB,GAAMsC,YAx+BN,SAAqBC,GACjB,IAAKjpB,KAAK4D,UACN,OAAO,KAEX,IAAIpB,GAAqB,IAAfymB,EACNvmB,EAAIF,EAAMxC,KAAKshB,QAAQ9e,MAAQxC,KACnC,OAAI0C,EAAEmI,OAAS,GAAgB,KAAXnI,EAAEmI,OACX7B,EACHtG,EACAF,EACM,iCACA,gCAGV2E,EAAWzF,KAAKhB,UAAUsoB,aAEtBxmB,EACOxC,KAAK+oB,SAASC,cAEd,IAAItnB,KAAK1B,KAAKkC,UAA+B,GAAnBlC,KAAK4gB,YAAmB,KACpDoI,cACA5f,QAAQ,IAAKJ,EAAatG,EAAG,MAGnCsG,EACHtG,EACAF,EAAM,+BAAiC,+BA+8B/CkkB,GAAMwC,QAr8BN,WACI,IAAKlpB,KAAK4D,UACN,MAAO,qBAAuB5D,KAAKsF,GAAK,OAE5C,IAEI6jB,EACAte,EAEAue,EALAtgB,EAAO,SACPugB,EAAO,GAcX,OATKrpB,KAAKspB,YACNxgB,EAA4B,IAArB9I,KAAK4gB,YAAoB,aAAe,mBAC/CyI,EAAO,KAEXF,EAAS,IAAMrgB,EAAO,MACtB+B,EAAO,GAAK7K,KAAK6K,QAAU7K,KAAK6K,QAAU,KAAO,OAAS,SAE1Due,EAASC,EAAO,OAETrpB,KAAKoC,OAAO+mB,EAASte,EAHjB,wBAGmCue,IAm7B5B,oBAAXG,QAAwC,MAAdA,OAAOC,MACxC9C,GAAM6C,OAAOC,IAAI,+BAAiC,WAC9C,MAAO,UAAYxpB,KAAKoC,SAAW,MAG3CskB,GAAM+C,OAjqBN,WAEI,OAAOzpB,KAAK4D,UAAY5D,KAAKgpB,cAAgB,MAgqBjDtC,GAAM/lB,SAp/BN,WACI,OAAOX,KAAKshB,QAAQjf,OAAO,MAAMD,OAAO,qCAo/B5CskB,GAAMgD,KArsBN,WACI,OAAO3hB,KAAKiD,MAAMhL,KAAKkC,UAAY,MAqsBvCwkB,GAAMxkB,QA1sBN,WACI,OAAOlC,KAAKkE,GAAGhC,UAAkC,KAArBlC,KAAK2F,SAAW,IA0sBhD+gB,GAAMiD,aAppBN,WACI,MAAO,CACHppB,MAAOP,KAAKsF,GACZlD,OAAQpC,KAAKuF,GACblD,OAAQrC,KAAK4F,QACbkZ,MAAO9e,KAAK0F,OACZpD,OAAQtC,KAAKqE,UA+oBrBqiB,GAAMkD,QAzgBN,WAKI,IAJA,IAEIxkB,EACA6f,EAAOjlB,KAAK+I,aAAakc,OACxBljB,EAAI,EAAG0X,EAAIwL,EAAK5jB,OAAQU,EAAI0X,IAAK1X,EAAG,CAIrC,GAFAqD,EAAMpF,KAAKshB,QAAQ0F,QAAQ,OAAO9kB,UAE9B+iB,EAAKljB,GAAG8nB,OAASzkB,GAAOA,GAAO6f,EAAKljB,GAAG+nB,MACvC,OAAO7E,EAAKljB,GAAGmF,KAEnB,GAAI+d,EAAKljB,GAAG+nB,OAAS1kB,GAAOA,GAAO6f,EAAKljB,GAAG8nB,MACvC,OAAO5E,EAAKljB,GAAGmF,KAIvB,MAAO,IAyfXwf,GAAMqD,UAtfN,WAKI,IAJA,IAEI3kB,EACA6f,EAAOjlB,KAAK+I,aAAakc,OACxBljB,EAAI,EAAG0X,EAAIwL,EAAK5jB,OAAQU,EAAI0X,IAAK1X,EAAG,CAIrC,GAFAqD,EAAMpF,KAAKshB,QAAQ0F,QAAQ,OAAO9kB,UAE9B+iB,EAAKljB,GAAG8nB,OAASzkB,GAAOA,GAAO6f,EAAKljB,GAAG+nB,MACvC,OAAO7E,EAAKljB,GAAGmjB,OAEnB,GAAID,EAAKljB,GAAG+nB,OAAS1kB,GAAOA,GAAO6f,EAAKljB,GAAG8nB,MACvC,OAAO5E,EAAKljB,GAAGmjB,OAIvB,MAAO,IAseXwB,GAAMsD,QAneN,WAKI,IAJA,IAEI5kB,EACA6f,EAAOjlB,KAAK+I,aAAakc,OACxBljB,EAAI,EAAG0X,EAAIwL,EAAK5jB,OAAQU,EAAI0X,IAAK1X,EAAG,CAIrC,GAFAqD,EAAMpF,KAAKshB,QAAQ0F,QAAQ,OAAO9kB,UAE9B+iB,EAAKljB,GAAG8nB,OAASzkB,GAAOA,GAAO6f,EAAKljB,GAAG+nB,MACvC,OAAO7E,EAAKljB,GAAG+V,KAEnB,GAAImN,EAAKljB,GAAG+nB,OAAS1kB,GAAOA,GAAO6f,EAAKljB,GAAG8nB,MACvC,OAAO5E,EAAKljB,GAAG+V,KAIvB,MAAO,IAmdX4O,GAAMuD,QAhdN,WAMI,IALA,IAEIC,EACA9kB,EACA6f,EAAOjlB,KAAK+I,aAAakc,OACxBljB,EAAI,EAAG0X,EAAIwL,EAAK5jB,OAAQU,EAAI0X,IAAK1X,EAMlC,GALAmoB,EAAMjF,EAAKljB,GAAG8nB,OAAS5E,EAAKljB,GAAG+nB,MAAQ,GAAM,EAG7C1kB,EAAMpF,KAAKshB,QAAQ0F,QAAQ,OAAO9kB,UAG7B+iB,EAAKljB,GAAG8nB,OAASzkB,GAAOA,GAAO6f,EAAKljB,GAAG+nB,OACvC7E,EAAKljB,GAAG+nB,OAAS1kB,GAAOA,GAAO6f,EAAKljB,GAAG8nB,MAExC,OACK7pB,KAAK6K,OAAS1K,EAAM8kB,EAAKljB,GAAG8nB,OAAOhf,QAAUqf,EAC9CjF,EAAKljB,GAAG2e,OAKpB,OAAO1gB,KAAK6K,QA0bhB6b,GAAM7b,KAAO4F,GACbiW,GAAM9b,WAvkHN,WACI,OAAOA,EAAW5K,KAAK6K,SAukH3B6b,GAAMtK,SAjUN,SAAwB7b,GACpB,OAAOklB,GAAqB7kB,KACxBZ,KACAO,EACAP,KAAKoR,OACLpR,KAAKqR,UACLrR,KAAK+I,aAAa6T,MAAM7L,IACxB/Q,KAAK+I,aAAa6T,MAAM5L,MA2ThC0V,GAAMT,YAvTN,SAA2B1lB,GACvB,OAAOklB,GAAqB7kB,KACxBZ,KACAO,EACAP,KAAK4f,UACL5f,KAAKunB,aACL,EACA,IAiTRb,GAAMhH,QAAUgH,GAAMjH,SA/OtB,SAAuBlf,GACnB,OAAgB,MAATA,EACDwH,KAAKgD,MAAM/K,KAAK0L,QAAU,GAAK,GAC/B1L,KAAK0L,MAAoB,GAAbnL,EAAQ,GAAUP,KAAK0L,QAAU,IA6OvDgb,GAAMhb,MAAQgE,GACdgX,GAAM9a,YA9tHN,WACI,OAAOA,GAAY5L,KAAK6K,OAAQ7K,KAAK0L,UA8tHzCgb,GAAMtV,KAAOsV,GAAM/G,MA/6GnB,SAAoBpf,GAChB,IAAI6Q,EAAOpR,KAAK+I,aAAaqI,KAAKpR,MAClC,OAAgB,MAATO,EAAgB6Q,EAAOpR,KAAK+e,IAAqB,GAAhBxe,EAAQ6Q,GAAW,MA86G/DsV,GAAM9G,QAAU8G,GAAMyD,SA36GtB,SAAuB5pB,GACnB,IAAI6Q,EAAOK,GAAWzR,KAAM,EAAG,GAAGoR,KAClC,OAAgB,MAAT7Q,EAAgB6Q,EAAOpR,KAAK+e,IAAqB,GAAhBxe,EAAQ6Q,GAAW,MA06G/DsV,GAAM9U,YA1SN,WACI,IAAIwY,EAAWpqB,KAAK+I,aAAa6T,MACjC,OAAOhL,GAAY5R,KAAK6K,OAAQuf,EAASrZ,IAAKqZ,EAASpZ,MAyS3D0V,GAAM2D,gBAtSN,WACI,IAAID,EAAWpqB,KAAK+I,aAAa6T,MACjC,OAAOhL,GAAY5R,KAAKoc,WAAYgO,EAASrZ,IAAKqZ,EAASpZ,MAqS/D0V,GAAM4D,eApTN,WACI,OAAO1Y,GAAY5R,KAAK6K,OAAQ,EAAG,IAoTvC6b,GAAM6D,sBAjTN,WACI,OAAO3Y,GAAY5R,KAAKimB,cAAe,EAAG,IAiT9CS,GAAM/a,KAAO0a,GACbK,GAAMrT,IAAMqT,GAAM7G,KA5pGlB,SAAyBtf,GACrB,IAAKP,KAAK4D,UACN,OAAgB,MAATrD,EAAgBP,KAAO0E,IAElC,IAvNkBnE,EAAO8B,EAuNrBgR,EAAMrT,KAAK0F,OAAS1F,KAAKkE,GAAGgN,YAAclR,KAAKkE,GAAG4W,SACtD,OAAa,MAATva,GAxNcA,EAyNOA,EAzNA8B,EAyNOrC,KAAK+I,aAAjCxI,EAxNiB,iBAAVA,EACAA,EAGN0D,MAAM1D,GAKU,iBADrBA,EAAQ8B,EAAOmQ,cAAcjS,IAElBA,EAGJ,KARIiQ,SAASjQ,EAAO,IAoNhBP,KAAK+e,IAAIxe,EAAQ8S,EAAK,MAEtBA,GAopGfqT,GAAMrV,QAhpGN,SAA+B9Q,GAC3B,IAAKP,KAAK4D,UACN,OAAgB,MAATrD,EAAgBP,KAAO0E,IAElC,IAAI2M,GAAWrR,KAAKqT,MAAQ,EAAIrT,KAAK+I,aAAa6T,MAAM7L,KAAO,EAC/D,OAAgB,MAATxQ,EAAgB8Q,EAAUrR,KAAK+e,IAAIxe,EAAQ8Q,EAAS,MA4oG/DqV,GAAMa,WAzoGN,SAA4BhnB,GACxB,IAAKP,KAAK4D,UACN,OAAgB,MAATrD,EAAgBP,KAAO0E,IAOlC,GAAa,MAATnE,EAIA,OAAOP,KAAKqT,OAAS,EAHrB,IAjOiB9S,EAAO8B,EAiOpBgP,GAjOa9Q,EAiOaA,EAjON8B,EAiOarC,KAAK+I,aAhOzB,iBAAVxI,EACA8B,EAAOmQ,cAAcjS,GAAS,GAAK,EAEvC0D,MAAM1D,GAAS,KAAOA,GA8NzB,OAAOP,KAAKqT,IAAIrT,KAAKqT,MAAQ,EAAIhC,EAAUA,EAAU,IA+nG7DqV,GAAMnV,UAhMN,SAAyBhR,GACrB,IAAIgR,EACAxJ,KAAK0Y,OACAzgB,KAAKshB,QAAQ0F,QAAQ,OAAShnB,KAAKshB,QAAQ0F,QAAQ,SAAW,OAC/D,EACR,OAAgB,MAATzmB,EAAgBgR,EAAYvR,KAAK+e,IAAIxe,EAAQgR,EAAW,MA4LnEmV,GAAMlJ,KAAOkJ,GAAM7S,MAAQa,GAC3BgS,GAAMhI,OAASgI,GAAM3S,QAAUuS,GAC/BI,GAAM/H,OAAS+H,GAAMxS,QAAUsS,GAC/BE,GAAM9H,YAAc8H,GAAM5G,aAAeyG,GACzCG,GAAM9F,UA7mDN,SAAsBrgB,EAAOiqB,EAAeC,GACxC,IACIC,EADAhK,EAAS1gB,KAAK2F,SAAW,EAE7B,IAAK3F,KAAK4D,UACN,OAAgB,MAATrD,EAAgBP,KAAO0E,IAElC,GAAa,MAATnE,EAiCA,OAAOP,KAAK0F,OAASgb,EAASe,GAAczhB,MAhC5C,GAAqB,iBAAVO,GAEP,GAAc,QADdA,EAAQugB,GAAiBlU,GAAkBrM,IAEvC,OAAOP,UAEJ+H,KAAKC,IAAIzH,GAAS,KAAOkqB,IAChClqB,GAAgB,IAwBpB,OAtBKP,KAAK0F,QAAU8kB,IAChBE,EAAcjJ,GAAczhB,OAEhCA,KAAK2F,QAAUpF,EACfP,KAAK0F,QAAS,EACK,MAAfglB,GACA1qB,KAAK+e,IAAI2L,EAAa,KAEtBhK,IAAWngB,KACNiqB,GAAiBxqB,KAAK2qB,kBACvB/H,GACI5iB,KACA8hB,GAAevhB,EAAQmgB,EAAQ,KAC/B,GACA,GAEI1gB,KAAK2qB,oBACb3qB,KAAK2qB,mBAAoB,EACzBxqB,EAAM4F,aAAa/F,MAAM,GACzBA,KAAK2qB,kBAAoB,OAG1B3qB,MAykDf0mB,GAAMlkB,IArjDN,SAAwBgoB,GACpB,OAAOxqB,KAAK4gB,UAAU,EAAG4J,IAqjD7B9D,GAAMlF,MAljDN,SAA0BgJ,GAStB,OARIxqB,KAAK0F,SACL1F,KAAK4gB,UAAU,EAAG4J,GAClBxqB,KAAK0F,QAAS,EAEV8kB,GACAxqB,KAAK+iB,SAAStB,GAAczhB,MAAO,MAGpCA,MA0iDX0mB,GAAMkE,UAviDN,WACI,IAGQC,EAOR,OAViB,MAAb7qB,KAAKyF,KACLzF,KAAK4gB,UAAU5gB,KAAKyF,MAAM,GAAO,GACP,iBAAZzF,KAAKsF,KAEN,OADTulB,EAAQ/J,GAAiBnU,GAAa3M,KAAKsF,KAE3CtF,KAAK4gB,UAAUiK,GAEf7qB,KAAK4gB,UAAU,GAAG,IAGnB5gB,MA6hDX0mB,GAAMoE,qBA1hDN,SAA8BvqB,GAC1B,QAAKP,KAAK4D,YAGVrD,EAAQA,EAAQoc,GAAYpc,GAAOqgB,YAAc,GAEzC5gB,KAAK4gB,YAAcrgB,GAAS,IAAO,IAqhD/CmmB,GAAMqE,MAlhDN,WACI,OACI/qB,KAAK4gB,YAAc5gB,KAAKshB,QAAQ5V,MAAM,GAAGkV,aACzC5gB,KAAK4gB,YAAc5gB,KAAKshB,QAAQ5V,MAAM,GAAGkV,aAghDjD8F,GAAM4C,QAt/CN,WACI,QAAOtpB,KAAK4D,YAAa5D,KAAK0F,QAs/ClCghB,GAAMsE,YAn/CN,WACI,QAAOhrB,KAAK4D,WAAY5D,KAAK0F,QAm/CjCghB,GAAM/E,MAAQA,GACd+E,GAAM5H,MAAQ6C,GACd+E,GAAMuE,SAzFN,WACI,OAAOjrB,KAAK0F,OAAS,MAAQ,IAyFjCghB,GAAMwE,SAtFN,WACI,OAAOlrB,KAAK0F,OAAS,6BAA+B,IAsFxDghB,GAAMyE,MAAQ9kB,EACV,kDACAggB,IAEJK,GAAM7X,OAASxI,EACX,mDACAqJ,IAEJgX,GAAMlH,MAAQnZ,EACV,iDACAoK,IAEJiW,GAAM2C,KAAOhjB,EACT,2GA3lDJ,SAAoB9F,EAAOiqB,GACvB,OAAa,MAATjqB,GACqB,iBAAVA,IACPA,GAASA,GAGbP,KAAK4gB,UAAUrgB,EAAOiqB,GAEfxqB,OAECA,KAAK4gB,cAolDrB8F,GAAM0E,aAAe/kB,EACjB,0GAniDJ,WACI,IAAK9E,EAAYvB,KAAKqrB,eAClB,OAAOrrB,KAAKqrB,cAGhB,IACIpM,EADA1D,EAAI,GAcR,OAXAvW,EAAWuW,EAAGvb,OACdub,EAAIsC,GAActC,IAEZpD,IACF8G,GAAQ1D,EAAE7V,OAASvD,EAAkBwa,IAARpB,EAAEpD,IAC/BnY,KAAKqrB,cACDrrB,KAAK4D,WAAoD,EAtOrE,SAAuB0nB,EAAQC,EAAQC,GAKnC,IAJA,IAAI3mB,EAAMkD,KAAK0H,IAAI6b,EAAOjqB,OAAQkqB,EAAOlqB,QACrCoqB,EAAa1jB,KAAKC,IAAIsjB,EAAOjqB,OAASkqB,EAAOlqB,QAC7CqqB,EAAQ,EAEP3pB,EAAI,EAAGA,EAAI8C,EAAK9C,KAEZypB,GAAeF,EAAOvpB,KAAOwpB,EAAOxpB,KACnCypB,GAAevgB,EAAMqgB,EAAOvpB,MAAQkJ,EAAMsgB,EAAOxpB,MAEnD2pB,IAGR,OAAOA,EAAQD,EAyNWE,CAAcpQ,EAAEpD,GAAI8G,EAAM4J,YAEhD7oB,KAAKqrB,eAAgB,EAGlBrrB,KAAKqrB,gBAgiDhB,IAAIO,GAAUpkB,EAAO9G,UAuCrB,SAASmrB,GAAMzpB,EAAQ0pB,EAAOC,EAAOC,GACjC,IAAI3pB,EAASuV,KACTpV,EAAML,IAAYsF,IAAIukB,EAAQF,GAClC,OAAOzpB,EAAO0pB,GAAOvpB,EAAKJ,GAG9B,SAAS6pB,GAAe7pB,EAAQ0pB,EAAOC,GAQnC,GAPIvqB,EAASY,KACT0pB,EAAQ1pB,EACRA,OAASkC,GAGblC,EAASA,GAAU,GAEN,MAAT0pB,EACA,OAAOD,GAAMzpB,EAAQ0pB,EAAOC,EAAO,SAKvC,IAFA,IACIG,EAAM,GACLnqB,EAAI,EAAGA,EAAI,GAAIA,IAChBmqB,EAAInqB,GAAK8pB,GAAMzpB,EAAQL,EAAGgqB,EAAO,SAErC,OAAOG,EAWX,SAASC,GAAiBC,EAAchqB,EAAQ0pB,EAAOC,GAO/C3pB,GANwB,kBAAjBgqB,EACH5qB,EAASY,KACT0pB,EAAQ1pB,EACRA,OAASkC,IAKblC,EAASgqB,EAETA,GAAe,EAEX5qB,EAHJsqB,EAAQ1pB,KAIJ0pB,EAAQ1pB,EACRA,OAASkC,IARJlC,GAAU,IAcvB,IAEIL,EAFAM,EAASuV,KACTyU,EAAQD,EAAe/pB,EAAOua,MAAM7L,IAAM,EAE1Cmb,EAAM,GAEV,GAAa,MAATJ,EACA,OAAOD,GAAMzpB,GAAS0pB,EAAQO,GAAS,EAAGN,EAAO,OAGrD,IAAKhqB,EAAI,EAAGA,EAAI,EAAGA,IACfmqB,EAAInqB,GAAK8pB,GAAMzpB,GAASL,EAAIsqB,GAAS,EAAGN,EAAO,OAEnD,OAAOG,EAxGXN,GAAQ/W,SAj9IR,SAAkBpO,EAAK4C,EAAKwS,GACxB,IAAIvS,EAAStJ,KAAKssB,UAAU7lB,IAAQzG,KAAKssB,UAAoB,SAC7D,OAAOnlB,EAAWmC,GAAUA,EAAO1I,KAAKyI,EAAKwS,GAAOvS,GAg9IxDsiB,GAAQliB,eAt1IR,SAAwBjD,GACpB,IAAIrE,EAASpC,KAAKusB,gBAAgB9lB,GAC9B+lB,EAAcxsB,KAAKusB,gBAAgB9lB,EAAIgmB,eAE3C,OAAIrqB,IAAWoqB,EACJpqB,GAGXpC,KAAKusB,gBAAgB9lB,GAAO+lB,EACvBrjB,MAAMd,GACN1G,IAAI,SAAU+qB,GACX,MACY,SAARA,GACQ,OAARA,GACQ,OAARA,GACQ,SAARA,EAEOA,EAAI/lB,MAAM,GAEd+lB,IAEV9lB,KAAK,IAEH5G,KAAKusB,gBAAgB9lB,KAg0IhCmlB,GAAQpiB,YA3zIR,WACI,OAAOxJ,KAAK2sB,cA2zIhBf,GAAQhjB,QArzIR,SAAiBjB,GACb,OAAO3H,KAAK4sB,SAASxjB,QAAQ,KAAMzB,IAqzIvCikB,GAAQ9N,SAAW6I,GACnBiF,GAAQnE,WAAad,GACrBiF,GAAQjW,aAjyIR,SAAsBhO,EAAQ+f,EAAe5N,EAAQ+S,GACjD,IAAIvjB,EAAStJ,KAAK8sB,cAAchT,GAChC,OAAO3S,EAAWmC,GACZA,EAAO3B,EAAQ+f,EAAe5N,EAAQ+S,GACtCvjB,EAAOF,QAAQ,MAAOzB,IA8xIhCikB,GAAQmB,WA3xIR,SAAoB1L,EAAM/X,GACtB,IAAIlH,EAASpC,KAAK8sB,cAAqB,EAAPzL,EAAW,SAAW,QACtD,OAAOla,EAAW/E,GAAUA,EAAOkH,GAAUlH,EAAOgH,QAAQ,MAAOE,IA0xIvEsiB,GAAQnkB,IA7iJR,SAAa3B,GACT,IAAIX,EAAMpD,EACV,IAAKA,KAAK+D,EACFhF,EAAWgF,EAAQ/D,KAEfoF,EADJhC,EAAOW,EAAO/D,IAEV/B,KAAK+B,GAAKoD,EAEVnF,KAAK,IAAM+B,GAAKoD,GAI5BnF,KAAK+X,QAAUjS,EAIf9F,KAAKomB,+BAAiC,IAAIjZ,QACrCnN,KAAKkmB,wBAAwB8G,QAAUhtB,KAAKmmB,cAAc6G,QACvD,IACA,UAAUA,SA2hJtBpB,GAAQ3G,KA1qBR,SAAoBviB,EAAGN,GAKnB,IAJA,IAEIuJ,EACAsZ,EAAOjlB,KAAKitB,OAASrV,GAAU,MAAMqV,MACpClrB,EAAI,EAAG0X,EAAIwL,EAAK5jB,OAAQU,EAAI0X,IAAK1X,EAAG,CACrC,cAAekjB,EAAKljB,GAAG8nB,OACnB,IAAK,SAEDle,EAAOxL,EAAM8kB,EAAKljB,GAAG8nB,OAAO7C,QAAQ,OACpC/B,EAAKljB,GAAG8nB,MAAQle,EAAKzJ,UACrB,MAGR,cAAe+iB,EAAKljB,GAAG+nB,OACnB,IAAK,YACD7E,EAAKljB,GAAG+nB,MAASoD,EAAAA,EACjB,MACJ,IAAK,SAEDvhB,EAAOxL,EAAM8kB,EAAKljB,GAAG+nB,OAAO9C,QAAQ,OAAO9kB,UAC3C+iB,EAAKljB,GAAG+nB,MAAQne,EAAKzJ,UACrB,OAGZ,OAAO+iB,GAkpBX2G,GAAQ9F,UA/oBR,SAAyB8D,EAASxnB,EAAQE,GACtC,IAAIP,EACA0X,EAEAvS,EACA4Q,EACAoN,EAHAD,EAAOjlB,KAAKilB,OAMhB,IAFA2E,EAAUA,EAAQ6C,cAEb1qB,EAAI,EAAG0X,EAAIwL,EAAK5jB,OAAQU,EAAI0X,IAAK1X,EAKlC,GAJAmF,EAAO+d,EAAKljB,GAAGmF,KAAKulB,cACpB3U,EAAOmN,EAAKljB,GAAG+V,KAAK2U,cACpBvH,EAASD,EAAKljB,GAAGmjB,OAAOuH,cAEpBnqB,EACA,OAAQF,GACJ,IAAK,IACL,IAAK,KACL,IAAK,MACD,GAAI0V,IAAS8R,EACT,OAAO3E,EAAKljB,GAEhB,MAEJ,IAAK,OACD,GAAImF,IAAS0iB,EACT,OAAO3E,EAAKljB,GAEhB,MAEJ,IAAK,QACD,GAAImjB,IAAW0E,EACX,OAAO3E,EAAKljB,GAEhB,WAEL,GAA6C,GAAzC,CAACmF,EAAM4Q,EAAMoN,GAAQnX,QAAQ6b,GACpC,OAAO3E,EAAKljB,IA2mBxB6pB,GAAQhO,gBAtmBR,SAA+Bpa,EAAKqH,GAChC,IAAIqf,EAAM1mB,EAAIqmB,OAASrmB,EAAIsmB,MAAQ,GAAM,EACzC,YAAaxlB,IAATuG,EACO1K,EAAMqD,EAAIqmB,OAAOhf,OAEjB1K,EAAMqD,EAAIqmB,OAAOhf,QAAUA,EAAOrH,EAAIkd,QAAUwJ,GAkmB/D0B,GAAQhH,cAjgBR,SAAuB3X,GAInB,OAHKnM,EAAWd,KAAM,mBAClB6kB,GAAiBjkB,KAAKZ,MAEnBiN,EAAWjN,KAAKqlB,eAAiBrlB,KAAKmlB,YA8fjDyG,GAAQhG,cAzgBR,SAAuB3Y,GAInB,OAHKnM,EAAWd,KAAM,mBAClB6kB,GAAiBjkB,KAAKZ,MAEnBiN,EAAWjN,KAAKolB,eAAiBplB,KAAKmlB,YAsgBjDyG,GAAQ/F,gBA5fR,SAAyB5Y,GAIrB,OAHKnM,EAAWd,KAAM,qBAClB6kB,GAAiBjkB,KAAKZ,MAEnBiN,EAAWjN,KAAKslB,iBAAmBtlB,KAAKmlB,YA0fnDyG,GAAQ/c,OAl9HR,SAAsBnM,EAAGN,GACrB,OAAKM,EAKEpC,EAAQN,KAAKogB,SACdpgB,KAAKogB,QAAQ1d,EAAEgJ,SACf1L,KAAKogB,SACApgB,KAAKogB,QAAQ+M,UAAY/d,IAAkBxF,KAAKxH,GAC3C,SACA,cACRM,EAAEgJ,SAVCpL,EAAQN,KAAKogB,SACdpgB,KAAKogB,QACLpgB,KAAKogB,QAAoB,YA+8HvCwL,GAAQhd,YAp8HR,SAA2BlM,EAAGN,GAC1B,OAAKM,EAKEpC,EAAQN,KAAKotB,cACdptB,KAAKotB,aAAa1qB,EAAEgJ,SACpB1L,KAAKotB,aACDhe,GAAiBxF,KAAKxH,GAAU,SAAW,cAC7CM,EAAEgJ,SARCpL,EAAQN,KAAKotB,cACdptB,KAAKotB,aACLptB,KAAKotB,aAAyB,YAi8H5CxB,GAAQ5c,YAz4HR,SAA2Bqe,EAAWjrB,EAAQE,GAC1C,IAAIP,EAAGsH,EAAK0D,EAEZ,GAAI/M,KAAKstB,kBACL,OAnDR,SAA2BD,EAAWjrB,EAAQE,GAC1C,IAAIP,EACAwrB,EACAlkB,EACAmkB,EAAMH,EAAUI,oBACpB,IAAKztB,KAAK0tB,aAKN,IAHA1tB,KAAK0tB,aAAe,GACpB1tB,KAAK2tB,iBAAmB,GACxB3tB,KAAK4tB,kBAAoB,GACpB7rB,EAAI,EAAGA,EAAI,KAAMA,EAClBsH,EAAMlH,EAAU,CAAC,IAAMJ,IACvB/B,KAAK4tB,kBAAkB7rB,GAAK/B,KAAK4O,YAC7BvF,EACA,IACFokB,oBACFztB,KAAK2tB,iBAAiB5rB,GAAK/B,KAAK6O,OAAOxF,EAAK,IAAIokB,oBAIxD,OAAInrB,EACe,QAAXF,GAEe,KADfmrB,EAAKxf,GAAQnN,KAAKZ,KAAK4tB,kBAAmBJ,IACvBD,EAAK,MAGT,KADfA,EAAKxf,GAAQnN,KAAKZ,KAAK2tB,iBAAkBH,IACtBD,EAAK,KAGb,QAAXnrB,GAEY,KADZmrB,EAAKxf,GAAQnN,KAAKZ,KAAK4tB,kBAAmBJ,MAK3B,KADfD,EAAKxf,GAAQnN,KAAKZ,KAAK2tB,iBAAkBH,IAF9BD,EAGa,MAGZ,KADZA,EAAKxf,GAAQnN,KAAKZ,KAAK2tB,iBAAkBH,MAK1B,KADfD,EAAKxf,GAAQnN,KAAKZ,KAAK4tB,kBAAmBJ,IAF/BD,EAGa,MASH3sB,KAAKZ,KAAMqtB,EAAWjrB,EAAQE,GAY3D,IATKtC,KAAK0tB,eACN1tB,KAAK0tB,aAAe,GACpB1tB,KAAK2tB,iBAAmB,GACxB3tB,KAAK4tB,kBAAoB,IAMxB7rB,EAAI,EAAGA,EAAI,GAAIA,IAAK,CAmBrB,GAjBAsH,EAAMlH,EAAU,CAAC,IAAMJ,IACnBO,IAAWtC,KAAK2tB,iBAAiB5rB,KACjC/B,KAAK2tB,iBAAiB5rB,GAAK,IAAIoL,OAC3B,IAAMnN,KAAK6O,OAAOxF,EAAK,IAAID,QAAQ,IAAK,IAAM,IAC9C,KAEJpJ,KAAK4tB,kBAAkB7rB,GAAK,IAAIoL,OAC5B,IAAMnN,KAAK4O,YAAYvF,EAAK,IAAID,QAAQ,IAAK,IAAM,IACnD,MAGH9G,GAAWtC,KAAK0tB,aAAa3rB,KAC9BgL,EACI,IAAM/M,KAAK6O,OAAOxF,EAAK,IAAM,KAAOrJ,KAAK4O,YAAYvF,EAAK,IAC9DrJ,KAAK0tB,aAAa3rB,GAAK,IAAIoL,OAAOJ,EAAM3D,QAAQ,IAAK,IAAK,MAI1D9G,GACW,SAAXF,GACApC,KAAK2tB,iBAAiB5rB,GAAG6H,KAAKyjB,GAE9B,OAAOtrB,EACJ,GACHO,GACW,QAAXF,GACApC,KAAK4tB,kBAAkB7rB,GAAG6H,KAAKyjB,GAE/B,OAAOtrB,EACJ,IAAKO,GAAUtC,KAAK0tB,aAAa3rB,GAAG6H,KAAKyjB,GAC5C,OAAOtrB,IA01HnB6pB,GAAQ7c,YAxxHR,SAAqB9B,GACjB,OAAIjN,KAAKstB,mBACAxsB,EAAWd,KAAM,iBAClB2P,GAAmB/O,KAAKZ,MAExBiN,EACOjN,KAAKmQ,mBAELnQ,KAAKiQ,eAGXnP,EAAWd,KAAM,kBAClBA,KAAKiQ,aAAeX,IAEjBtP,KAAKmQ,oBAAsBlD,EAC5BjN,KAAKmQ,mBACLnQ,KAAKiQ,eAywHnB2b,GAAQ9c,iBA7yHR,SAA0B7B,GACtB,OAAIjN,KAAKstB,mBACAxsB,EAAWd,KAAM,iBAClB2P,GAAmB/O,KAAKZ,MAExBiN,EACOjN,KAAKoQ,wBAELpQ,KAAKkQ,oBAGXpP,EAAWd,KAAM,uBAClBA,KAAKkQ,kBAAoBb,IAEtBrP,KAAKoQ,yBAA2BnD,EACjCjN,KAAKoQ,wBACLpQ,KAAKkQ,oBA8xHnB0b,GAAQxa,KArhHR,SAAoB/H,GAChB,OAAOoI,GAAWpI,EAAKrJ,KAAK4c,MAAM7L,IAAK/Q,KAAK4c,MAAM5L,KAAKI,MAqhH3Dwa,GAAQiC,eAzgHR,WACI,OAAO7tB,KAAK4c,MAAM5L,KAygHtB4a,GAAQkC,eA9gHR,WACI,OAAO9tB,KAAK4c,MAAM7L,KA+gHtB6a,GAAQxZ,SAz5GR,SAAwB1P,EAAGN,GACvB,IAAIgQ,EAAW9R,EAAQN,KAAK+tB,WACtB/tB,KAAK+tB,UACL/tB,KAAK+tB,UACDrrB,IAAW,IAANA,GAAc1C,KAAK+tB,UAAUZ,SAASvjB,KAAKxH,GAC1C,SACA,cAEhB,OAAa,IAANM,EACDoP,GAAcM,EAAUpS,KAAK4c,MAAM7L,KACnCrO,EACA0P,EAAS1P,EAAE2Q,OACXjB,GA84GVwZ,GAAQ1Z,YAn4GR,SAA2BxP,GACvB,OAAa,IAANA,EACDoP,GAAc9R,KAAKguB,aAAchuB,KAAK4c,MAAM7L,KAC5CrO,EACA1C,KAAKguB,aAAatrB,EAAE2Q,OACpBrT,KAAKguB,cA+3GfpC,GAAQzZ,cA54GR,SAA6BzP,GACzB,OAAa,IAANA,EACDoP,GAAc9R,KAAKiuB,eAAgBjuB,KAAK4c,MAAM7L,KAC9CrO,EACA1C,KAAKiuB,eAAevrB,EAAE2Q,OACtBrT,KAAKiuB,gBAw4GfrC,GAAQpZ,cApzGR,SAA6B0b,EAAa9rB,EAAQE,GAC9C,IAAIP,EAAGsH,EAAK0D,EAEZ,GAAI/M,KAAKmuB,oBACL,OA7ER,SAA6BD,EAAa9rB,EAAQE,GAC9C,IAAIP,EACAwrB,EACAlkB,EACAmkB,EAAMU,EAAYT,oBACtB,IAAKztB,KAAKouB,eAKN,IAJApuB,KAAKouB,eAAiB,GACtBpuB,KAAKquB,oBAAsB,GAC3BruB,KAAKsuB,kBAAoB,GAEpBvsB,EAAI,EAAGA,EAAI,IAAKA,EACjBsH,EAAMlH,EAAU,CAAC,IAAM,IAAIkR,IAAItR,GAC/B/B,KAAKsuB,kBAAkBvsB,GAAK/B,KAAKkS,YAC7B7I,EACA,IACFokB,oBACFztB,KAAKquB,oBAAoBtsB,GAAK/B,KAAKmS,cAC/B9I,EACA,IACFokB,oBACFztB,KAAKouB,eAAersB,GAAK/B,KAAKoS,SAAS/I,EAAK,IAAIokB,oBAIxD,OAAInrB,EACe,SAAXF,GAEe,KADfmrB,EAAKxf,GAAQnN,KAAKZ,KAAKouB,eAAgBZ,IACpBD,EAAK,KACN,QAAXnrB,GAEQ,KADfmrB,EAAKxf,GAAQnN,KAAKZ,KAAKquB,oBAAqBb,IACzBD,EAAK,MAGT,KADfA,EAAKxf,GAAQnN,KAAKZ,KAAKsuB,kBAAmBd,IACvBD,EAAK,KAGb,SAAXnrB,GAEY,KADZmrB,EAAKxf,GAAQnN,KAAKZ,KAAKouB,eAAgBZ,MAK3B,KADZD,EAAKxf,GAAQnN,KAAKZ,KAAKquB,oBAAqBb,MAK7B,KADfD,EAAKxf,GAAQnN,KAAKZ,KAAKsuB,kBAAmBd,IAN/BD,EAOa,KACN,QAAXnrB,GAEK,KADZmrB,EAAKxf,GAAQnN,KAAKZ,KAAKquB,oBAAqBb,MAKhC,KADZD,EAAKxf,GAAQnN,KAAKZ,KAAKouB,eAAgBZ,MAKxB,KADfD,EAAKxf,GAAQnN,KAAKZ,KAAKsuB,kBAAmBd,IAN/BD,EAOa,MAGZ,KADZA,EAAKxf,GAAQnN,KAAKZ,KAAKsuB,kBAAmBd,MAK9B,KADZD,EAAKxf,GAAQnN,KAAKZ,KAAKouB,eAAgBZ,MAKxB,KADfD,EAAKxf,GAAQnN,KAAKZ,KAAKquB,oBAAqBb,IANjCD,EAOa,MASD3sB,KAAKZ,KAAMkuB,EAAa9rB,EAAQE,GAU/D,IAPKtC,KAAKouB,iBACNpuB,KAAKouB,eAAiB,GACtBpuB,KAAKsuB,kBAAoB,GACzBtuB,KAAKquB,oBAAsB,GAC3BruB,KAAKuuB,mBAAqB,IAGzBxsB,EAAI,EAAGA,EAAI,EAAGA,IAAK,CA6BpB,GA1BAsH,EAAMlH,EAAU,CAAC,IAAM,IAAIkR,IAAItR,GAC3BO,IAAWtC,KAAKuuB,mBAAmBxsB,KACnC/B,KAAKuuB,mBAAmBxsB,GAAK,IAAIoL,OAC7B,IAAMnN,KAAKoS,SAAS/I,EAAK,IAAID,QAAQ,IAAK,QAAU,IACpD,KAEJpJ,KAAKquB,oBAAoBtsB,GAAK,IAAIoL,OAC9B,IAAMnN,KAAKmS,cAAc9I,EAAK,IAAID,QAAQ,IAAK,QAAU,IACzD,KAEJpJ,KAAKsuB,kBAAkBvsB,GAAK,IAAIoL,OAC5B,IAAMnN,KAAKkS,YAAY7I,EAAK,IAAID,QAAQ,IAAK,QAAU,IACvD,MAGHpJ,KAAKouB,eAAersB,KACrBgL,EACI,IACA/M,KAAKoS,SAAS/I,EAAK,IACnB,KACArJ,KAAKmS,cAAc9I,EAAK,IACxB,KACArJ,KAAKkS,YAAY7I,EAAK,IAC1BrJ,KAAKouB,eAAersB,GAAK,IAAIoL,OAAOJ,EAAM3D,QAAQ,IAAK,IAAK,MAI5D9G,GACW,SAAXF,GACApC,KAAKuuB,mBAAmBxsB,GAAG6H,KAAKskB,GAEhC,OAAOnsB,EACJ,GACHO,GACW,QAAXF,GACApC,KAAKquB,oBAAoBtsB,GAAG6H,KAAKskB,GAEjC,OAAOnsB,EACJ,GACHO,GACW,OAAXF,GACApC,KAAKsuB,kBAAkBvsB,GAAG6H,KAAKskB,GAE/B,OAAOnsB,EACJ,IAAKO,GAAUtC,KAAKouB,eAAersB,GAAG6H,KAAKskB,GAC9C,OAAOnsB,IAwvGnB6pB,GAAQrZ,cA3sGR,SAAuBtF,GACnB,OAAIjN,KAAKmuB,qBACArtB,EAAWd,KAAM,mBAClBgT,GAAqBpS,KAAKZ,MAE1BiN,EACOjN,KAAKyT,qBAELzT,KAAKsT,iBAGXxS,EAAWd,KAAM,oBAClBA,KAAKsT,eAAiBT,IAEnB7S,KAAKyT,sBAAwBxG,EAC9BjN,KAAKyT,qBACLzT,KAAKsT,iBA4rGnBsY,GAAQtZ,mBAxrGR,SAA4BrF,GACxB,OAAIjN,KAAKmuB,qBACArtB,EAAWd,KAAM,mBAClBgT,GAAqBpS,KAAKZ,MAE1BiN,EACOjN,KAAK0T,0BAEL1T,KAAKuT,sBAGXzS,EAAWd,KAAM,yBAClBA,KAAKuT,oBAAsBT,IAExB9S,KAAK0T,2BAA6BzG,EACnCjN,KAAK0T,0BACL1T,KAAKuT,sBAyqGnBqY,GAAQvZ,iBArqGR,SAA0BpF,GACtB,OAAIjN,KAAKmuB,qBACArtB,EAAWd,KAAM,mBAClBgT,GAAqBpS,KAAKZ,MAE1BiN,EACOjN,KAAK2T,wBAEL3T,KAAKwT,oBAGX1S,EAAWd,KAAM,uBAClBA,KAAKwT,kBAAoBT,IAEtB/S,KAAK2T,yBAA2B1G,EACjCjN,KAAK2T,wBACL3T,KAAKwT,oBAupGnBoY,GAAQvX,KAr+FR,SAAoB9T,GAGhB,MAAgD,OAAxCA,EAAQ,IAAI2J,cAAcskB,OAAO,IAm+F7C5C,GAAQnoB,SAz9FR,SAAwBoQ,EAAOE,EAAS0a,GACpC,OAAY,GAAR5a,EACO4a,EAAU,KAAO,KAEjBA,EAAU,KAAO,MAijGhCjX,GAAmB,KAAM,CACrByN,KAAM,CACF,CACI4E,MAAO,aACPC,MAAQoD,EAAAA,EACRxM,OAAQ,EACRxZ,KAAM,cACNge,OAAQ,KACRpN,KAAM,MAEV,CACI+R,MAAO,aACPC,OAAQoD,EAAAA,EACRxM,OAAQ,EACRxZ,KAAM,gBACNge,OAAQ,KACRpN,KAAM,OAGdpC,uBAAwB,uBACxB9M,QAAS,SAAUjB,GACf,IAAI3G,EAAI2G,EAAS,GAWjB,OAAOA,GATgC,IAA/BsD,EAAOtD,EAAS,IAAO,IACjB,KACM,GAAN3G,EACA,KACM,GAANA,EACA,KACM,GAANA,EACA,KACA,SAOtBb,EAAMikB,KAAO/d,EACT,wDACAmR,IAEJrX,EAAMuuB,SAAWroB,EACb,gEACAuR,IAGJ,IAAI+W,GAAU5mB,KAAKC,IAmBnB,SAAS4mB,GAAcrP,EAAUhf,EAAO6K,EAAOqX,GAC3C,IAAIxD,EAAQ6C,GAAevhB,EAAO6K,GAMlC,OAJAmU,EAASW,eAAiBuC,EAAYxD,EAAMiB,cAC5CX,EAASY,OAASsC,EAAYxD,EAAMkB,MACpCZ,EAASa,SAAWqC,EAAYxD,EAAMmB,QAE/Bb,EAASe,UAapB,SAASuO,GAAQlnB,GACb,OAAIA,EAAS,EACFI,KAAKiD,MAAMrD,GAEXI,KAAKgD,KAAKpD,GA2DzB,SAASmnB,GAAajP,GAGlB,OAAe,KAAPA,EAAe,OAG3B,SAASkP,GAAalgB,GAElB,OAAiB,OAATA,EAAmB,KA4D/B,SAASmgB,GAAOC,GACZ,OAAO,WACH,OAAOjvB,KAAKkvB,GAAGD,IAIvB,IAAIE,GAAiBH,GAAO,MACxBI,GAAYJ,GAAO,KACnBK,GAAYL,GAAO,KACnBM,GAAUN,GAAO,KACjBO,GAASP,GAAO,KAChBQ,GAAUR,GAAO,KACjBS,GAAWT,GAAO,KAClBU,GAAaV,GAAO,KACpBW,GAAUX,GAAO,KAWrB,SAASY,GAAW1oB,GAChB,OAAO,WACH,OAAOlH,KAAK4D,UAAY5D,KAAKqgB,MAAMnZ,GAAQxC,KAInD,IAAIob,GAAe8P,GAAW,gBAC1B1b,GAAU0b,GAAW,WACrB7b,GAAU6b,GAAW,WACrB/b,GAAQ+b,GAAW,SACnB/P,GAAO+P,GAAW,QAClB/gB,GAAS+gB,GAAW,UACpBpQ,GAAQoQ,GAAW,SAMvB,IAAInP,GAAQ1Y,KAAK0Y,MACboP,GAAa,CACT/Z,GAAI,GACJpI,EAAG,GACHhL,EAAG,GACHsT,EAAG,GACHvD,EAAG,GACH0D,EAAG,KACHE,EAAG,IAQX,SAASyZ,GAAeC,EAAgBrI,EAAemI,EAAYxtB,GAC/D,IAAIkd,EAAWuC,GAAeiO,GAAgB/nB,MAC1CkM,EAAUuM,GAAMlB,EAAS2P,GAAG,MAC5Bnb,EAAU0M,GAAMlB,EAAS2P,GAAG,MAC5Brb,EAAQ4M,GAAMlB,EAAS2P,GAAG,MAC1BrP,EAAOY,GAAMlB,EAAS2P,GAAG,MACzBrgB,EAAS4R,GAAMlB,EAAS2P,GAAG,MAC3BvP,EAAQc,GAAMlB,EAAS2P,GAAG,MAC1B1P,EAAQiB,GAAMlB,EAAS2P,GAAG,MAC1BnuB,GACKmT,GAAW2b,EAAW/Z,GAAM,CAAC,IAAK5B,GAClCA,EAAU2b,EAAWniB,GAAK,CAAC,KAAMwG,KACjCH,GAAW,GAAK,CAAC,MACjBA,EAAU8b,EAAWntB,GAAK,CAAC,KAAMqR,IACjCF,GAAS,GAAK,CAAC,MACfA,EAAQgc,EAAW7Z,GAAK,CAAC,KAAMnC,IAC/BgM,GAAQ,GAAK,CAAC,MACdA,EAAOgQ,EAAWpd,GAAK,CAAC,KAAMoN,GAgBvC,OAdoB,MAAhBgQ,EAAW1Z,IACXpV,EACIA,GACC4e,GAAS,GAAK,CAAC,MACfA,EAAQkQ,EAAW1Z,GAAK,CAAC,KAAMwJ,KAExC5e,EAAIA,GACC8N,GAAU,GAAK,CAAC,MAChBA,EAASghB,EAAWxZ,GAAK,CAAC,KAAMxH,IAChC2Q,GAAS,GAAK,CAAC,MAAS,CAAC,KAAMA,IAElC,GAAKkI,EACP3mB,EAAE,GAAuB,GAAjBgvB,EACRhvB,EAAE,GAAKsB,EApCX,SAA2ByX,EAAQnS,EAAQ+f,EAAemF,EAAUxqB,GAChE,OAAOA,EAAOsT,aAAahO,GAAU,IAAK+f,EAAe5N,EAAQ+S,IAoCxCzsB,MAAM,KAAMW,GAgEzC,IAAIivB,GAAQjoB,KAAKC,IAEjB,SAAS6Y,GAAKpS,GACV,OAAY,EAAJA,IAAUA,EAAI,KAAOA,EAGjC,SAASwhB,KAQL,IAAKjwB,KAAK4D,UACN,OAAO5D,KAAK+I,aAAaS,cAG7B,IAGIuK,EACAF,EACA2L,EACA9R,EAEAwiB,EACAC,EACAC,EACAC,EAXAnc,EAAU8b,GAAMhwB,KAAKkgB,eAAiB,IACtCL,EAAOmQ,GAAMhwB,KAAKmgB,OAClBtR,EAASmhB,GAAMhwB,KAAKogB,SAKpBkQ,EAAQtwB,KAAKovB,YAMjB,OAAKkB,GAOLvc,EAAUjJ,EAASoJ,EAAU,IAC7BL,EAAQ/I,EAASiJ,EAAU,IAC3BG,GAAW,GACXH,GAAW,GAGXyL,EAAQ1U,EAAS+D,EAAS,IAC1BA,GAAU,GAGVnB,EAAIwG,EAAUA,EAAQqc,QAAQ,GAAGnnB,QAAQ,SAAU,IAAM,GAEzD8mB,EAAYI,EAAQ,EAAI,IAAM,GAC9BH,EAAStP,GAAK7gB,KAAKogB,WAAaS,GAAKyP,GAAS,IAAM,GACpDF,EAAWvP,GAAK7gB,KAAKmgB,SAAWU,GAAKyP,GAAS,IAAM,GACpDD,EAAUxP,GAAK7gB,KAAKkgB,iBAAmBW,GAAKyP,GAAS,IAAM,GAGvDJ,EACA,KACC1Q,EAAQ2Q,EAAS3Q,EAAQ,IAAM,KAC/B3Q,EAASshB,EAASthB,EAAS,IAAM,KACjCgR,EAAOuQ,EAAWvQ,EAAO,IAAM,KAC/BhM,GAASE,GAAWG,EAAU,IAAM,KACpCL,EAAQwc,EAAUxc,EAAQ,IAAM,KAChCE,EAAUsc,EAAUtc,EAAU,IAAM,KACpCG,EAAUmc,EAAU3iB,EAAI,IAAM,KA9BxB,MAkCf,IAAI8iB,GAAUlR,GAAS5e,UAEvB8vB,GAAQ5sB,QA/3ER,WACI,OAAO5D,KAAK6D,UA+3EhB2sB,GAAQxoB,IA3YR,WACI,IAAI2P,EAAO3X,KAAKqgB,MAahB,OAXArgB,KAAKkgB,cAAgByO,GAAQ3uB,KAAKkgB,eAClClgB,KAAKmgB,MAAQwO,GAAQ3uB,KAAKmgB,OAC1BngB,KAAKogB,QAAUuO,GAAQ3uB,KAAKogB,SAE5BzI,EAAKmI,aAAe6O,GAAQhX,EAAKmI,cACjCnI,EAAKzD,QAAUya,GAAQhX,EAAKzD,SAC5ByD,EAAK5D,QAAU4a,GAAQhX,EAAK5D,SAC5B4D,EAAK9D,MAAQ8a,GAAQhX,EAAK9D,OAC1B8D,EAAK9I,OAAS8f,GAAQhX,EAAK9I,QAC3B8I,EAAK6H,MAAQmP,GAAQhX,EAAK6H,OAEnBxf,MA8XXwwB,GAAQzR,IAhXR,SAAexe,EAAO6K,GAClB,OAAOwjB,GAAc5uB,KAAMO,EAAO6K,EAAO,IAgX7ColB,GAAQzN,SA5WR,SAAoBxiB,EAAO6K,GACvB,OAAOwjB,GAAc5uB,KAAMO,EAAO6K,GAAQ,IA4W9ColB,GAAQtB,GA/RR,SAAY9kB,GACR,IAAKpK,KAAK4D,UACN,OAAOc,IAEX,IAAImb,EACAhR,EACAiR,EAAe9f,KAAKkgB,cAIxB,GAAc,WAFd9V,EAAQD,EAAeC,KAEY,YAAVA,GAAiC,SAAVA,EAG5C,OAFAyV,EAAO7f,KAAKmgB,MAAQL,EAAe,MACnCjR,EAAS7O,KAAKogB,QAAU0O,GAAajP,GAC7BzV,GACJ,IAAK,QACD,OAAOyE,EACX,IAAK,UACD,OAAOA,EAAS,EACpB,IAAK,OACD,OAAOA,EAAS,QAKxB,OADAgR,EAAO7f,KAAKmgB,MAAQpY,KAAK0Y,MAAMsO,GAAa/uB,KAAKogB,UACzChW,GACJ,IAAK,OACD,OAAOyV,EAAO,EAAIC,EAAe,OACrC,IAAK,MACD,OAAOD,EAAOC,EAAe,MACjC,IAAK,OACD,OAAc,GAAPD,EAAYC,EAAe,KACtC,IAAK,SACD,OAAc,KAAPD,EAAcC,EAAe,IACxC,IAAK,SACD,OAAc,MAAPD,EAAeC,EAAe,IAEzC,IAAK,cACD,OAAO/X,KAAKiD,MAAa,MAAP6U,GAAgBC,EACtC,QACI,MAAM,IAAIjZ,MAAM,gBAAkBuD,KAyPlDomB,GAAQrB,eAAiBA,GACzBqB,GAAQpB,UAAYA,GACpBoB,GAAQnB,UAAYA,GACpBmB,GAAQlB,QAAUA,GAClBkB,GAAQjB,OAASA,GACjBiB,GAAQhB,QAAUA,GAClBgB,GAAQf,SAAWA,GACnBe,GAAQd,WAAaA,GACrBc,GAAQb,QAAUA,GAClBa,GAAQtuB,QA5PR,WACI,OAAKlC,KAAK4D,UAIN5D,KAAKkgB,cACQ,MAAblgB,KAAKmgB,MACJngB,KAAKogB,QAAU,GAAM,OACK,QAA3BnV,EAAMjL,KAAKogB,QAAU,IANd1b,KA2Pf8rB,GAAQlQ,QA5WR,WACI,IAIIpM,EACAH,EACAF,EACA2L,EACAiR,EARA3Q,EAAe9f,KAAKkgB,cACpBL,EAAO7f,KAAKmgB,MACZtR,EAAS7O,KAAKogB,QACdzI,EAAO3X,KAAKqgB,MAgDhB,OArCyB,GAAhBP,GAA6B,GAARD,GAAuB,GAAVhR,GAClCiR,GAAgB,GAAKD,GAAQ,GAAKhR,GAAU,IAGjDiR,GAAuD,MAAvC+O,GAAQE,GAAalgB,GAAUgR,GAE/ChR,EADAgR,EAAO,GAMXlI,EAAKmI,aAAeA,EAAe,IAEnC5L,EAAUpJ,EAASgV,EAAe,KAClCnI,EAAKzD,QAAUA,EAAU,GAEzBH,EAAUjJ,EAASoJ,EAAU,IAC7ByD,EAAK5D,QAAUA,EAAU,GAEzBF,EAAQ/I,EAASiJ,EAAU,IAC3B4D,EAAK9D,MAAQA,EAAQ,GAErBgM,GAAQ/U,EAAS+I,EAAQ,IAIzBhF,GADA4hB,EAAiB3lB,EAASgkB,GAAajP,IAEvCA,GAAQgP,GAAQE,GAAa0B,IAG7BjR,EAAQ1U,EAAS+D,EAAS,IAC1BA,GAAU,GAEV8I,EAAKkI,KAAOA,EACZlI,EAAK9I,OAASA,EACd8I,EAAK6H,MAAQA,EAENxf,MAyTXwwB,GAAQlP,MAlOR,WACI,OAAOQ,GAAe9hB,OAkO1BwwB,GAAQ/kB,IA/NR,SAAerB,GAEX,OADAA,EAAQD,EAAeC,GAChBpK,KAAK4D,UAAY5D,KAAKoK,EAAQ,OAAS1F,KA8NlD8rB,GAAQ1Q,aAAeA,GACvB0Q,GAAQtc,QAAUA,GAClBsc,GAAQzc,QAAUA,GAClByc,GAAQ3c,MAAQA,GAChB2c,GAAQ3Q,KAAOA,GACf2Q,GAAQ7Q,MAlNR,WACI,OAAO7U,EAAS9K,KAAK6f,OAAS,IAkNlC2Q,GAAQ3hB,OAASA,GACjB2hB,GAAQhR,MAAQA,GAChBgR,GAAQ7I,SAlIR,SAAkB+I,EAAeC,GAC7B,IAAK3wB,KAAK4D,UACN,OAAO5D,KAAK+I,aAAaS,cAG7B,IAEInH,EACAiH,EAHAsnB,GAAa,EACbC,EAAKhB,GAyBT,MArB6B,iBAAlBa,IACPC,EAAgBD,EAChBA,GAAgB,GAES,kBAAlBA,IACPE,EAAaF,GAEY,iBAAlBC,IACPE,EAAKpwB,OAAOqwB,OAAO,GAAIjB,GAAYc,GACZ,MAAnBA,EAAcjjB,GAAiC,MAApBijB,EAAc7a,KACzC+a,EAAG/a,GAAK6a,EAAcjjB,EAAI,IAIlCrL,EAASrC,KAAK+I,aACdO,EAASwmB,GAAe9vB,MAAO4wB,EAAYC,EAAIxuB,GAE3CuuB,IACAtnB,EAASjH,EAAO0qB,YAAY/sB,KAAMsJ,IAG/BjH,EAAOolB,WAAWne,IAoG7BknB,GAAQxH,YAAciH,GACtBO,GAAQ7vB,SAAWsvB,GACnBO,GAAQ/G,OAASwG,GACjBO,GAAQnuB,OAASA,GACjBmuB,GAAQznB,WAAaA,GAErBynB,GAAQO,YAAc1qB,EAClB,sFACA4pB,IAEJO,GAAQpM,KAAOA,GAIf3b,EAAe,IAAK,EAAG,EAAG,QAC1BA,EAAe,IAAK,EAAG,EAAG,WAI1BqE,GAAc,IAAKJ,IACnBI,GAAc,IA9tJO,wBA+tJrBc,GAAc,IAAK,SAAUrN,EAAO2I,EAAOpD,GACvCA,EAAO5B,GAAK,IAAIxC,KAAyB,IAApBse,WAAWzf,MAEpCqN,GAAc,IAAK,SAAUrN,EAAO2I,EAAOpD,GACvCA,EAAO5B,GAAK,IAAIxC,KAAKuJ,EAAM1K,MAK/BJ,EAAM6wB,QAAU,SA/9KZ/wB,EAi+KY0c,GAEhBxc,EAAM0B,GAAK6kB,GACXvmB,EAAMsP,IAv/EN,WAGI,OAAO0P,GAAO,WAFH,GAAGxY,MAAM/F,KAAKP,UAAW,KAu/ExCF,EAAMgI,IAl/EN,WAGI,OAAOgX,GAAO,UAFH,GAAGxY,MAAM/F,KAAKP,UAAW,KAk/ExCF,EAAM0b,IA7+EI,WACN,OAAOna,KAAKma,IAAMna,KAAKma,OAAS,IAAIna,MA6+ExCvB,EAAMqC,IAAML,EACZhC,EAAMupB,KA1oBN,SAAoBnpB,GAChB,OAAOoc,GAAoB,IAARpc,IA0oBvBJ,EAAM0O,OAlhBN,SAAoBzM,EAAQ0pB,GACxB,OAAOG,GAAe7pB,EAAQ0pB,EAAO,WAkhBzC3rB,EAAMsB,OAASA,EACftB,EAAMkC,OAASmV,GACfrX,EAAM2iB,QAAUre,EAChBtE,EAAMof,SAAWuC,GACjB3hB,EAAM6F,SAAWA,EACjB7F,EAAMiS,SAhhBN,SAAsBga,EAAchqB,EAAQ0pB,GACxC,OAAOK,GAAiBC,EAAchqB,EAAQ0pB,EAAO,aAghBzD3rB,EAAMyqB,UA9oBN,WACI,OAAOjO,GAAYvc,MAAM,KAAMC,WAAWuqB,aA8oB9CzqB,EAAM4I,WAAa6O,GACnBzX,EAAMogB,WAAaA,GACnBpgB,EAAMyO,YAxhBN,SAAyBxM,EAAQ0pB,GAC7B,OAAOG,GAAe7pB,EAAQ0pB,EAAO,gBAwhBzC3rB,EAAM+R,YA7gBN,SAAyBka,EAAchqB,EAAQ0pB,GAC3C,OAAOK,GAAiBC,EAAchqB,EAAQ0pB,EAAO,gBA6gBzD3rB,EAAM0X,aAAeA,GACrB1X,EAAM8wB,aAn4GN,SAAsB/pB,EAAMpB,GACxB,IACQzD,EACA6uB,EACA5pB,EAsCR,OAzCc,MAAVxB,GAGIwB,EAAesN,GAEE,MAAjB6B,GAAQvP,IAA+C,MAA9BuP,GAAQvP,GAAM8Q,aAEvCvB,GAAQvP,GAAMO,IAAIJ,EAAaoP,GAAQvP,GAAM6Q,QAASjS,KAIrC,OADjBorB,EAAYla,GAAW9P,MAEnBI,EAAe4pB,EAAUnZ,SAE7BjS,EAASuB,EAAaC,EAAcxB,GACnB,MAAborB,IAIAprB,EAAOgS,KAAO5Q,IAElB7E,EAAS,IAAImF,EAAO1B,IACbkS,aAAevB,GAAQvP,GAC9BuP,GAAQvP,GAAQ7E,GAIpBmV,GAAmBtQ,IAGE,MAAjBuP,GAAQvP,KAC0B,MAA9BuP,GAAQvP,GAAM8Q,cACdvB,GAAQvP,GAAQuP,GAAQvP,GAAM8Q,aAC1B9Q,IAASsQ,MACTA,GAAmBtQ,IAEC,MAAjBuP,GAAQvP,WACRuP,GAAQvP,IAIpBuP,GAAQvP,IA01GnB/G,EAAMsW,QA/zGN,WACI,OAAO1P,EAAK0P,KA+zGhBtW,EAAMgS,cArhBN,SAA2Bia,EAAchqB,EAAQ0pB,GAC7C,OAAOK,GAAiBC,EAAchqB,EAAQ0pB,EAAO,kBAqhBzD3rB,EAAMgK,eAAiBA,EACvBhK,EAAMgxB,qBAtNN,SAAoCC,GAChC,YAAyB9sB,IAArB8sB,EACO3Q,GAEqB,mBAArB2Q,IACP3Q,GAAQ2Q,GACD,IAiNfjxB,EAAMkxB,sBA3MN,SAAqCC,EAAWC,GAC5C,YAA8BjtB,IAA1BurB,GAAWyB,UAGDhtB,IAAVitB,EACO1B,GAAWyB,IAEtBzB,GAAWyB,GAAaC,EACN,MAAdD,IACAzB,GAAW/Z,GAAKyb,EAAQ,IAErB,KAiMXpxB,EAAM8mB,eAr5DN,SAA2BuK,EAAU3V,GACjC,IAAIwF,EAAOmQ,EAASnQ,KAAKxF,EAAK,QAAQ,GACtC,OAAOwF,GAAQ,EACT,WACAA,GAAQ,EACR,WACAA,EAAO,EACP,UACAA,EAAO,EACP,UACAA,EAAO,EACP,UACAA,EAAO,EACP,WACA,YAw4DVlhB,EAAMO,UAAYgmB,GAGlBvmB,EAAMsxB,UAAY,CACdC,eAAgB,mBAChBC,uBAAwB,sBACxBC,kBAAmB,0BACnB1jB,KAAM,aACN2jB,KAAM,QACNC,aAAc,WACdC,QAAS,eACTxjB,KAAM,aACNN,MAAO,WAKX9N,EAAM0X,aAAa,KAAM,CACrBhJ,OAAQ,8FAA8FK,MAClG,KAEJN,YAAa,kDAAkDM,MAAM,KACrEkD,SAAU,4DAA4DlD,MAClE,KAEJiD,cAAe,8BAA8BjD,MAAM,KACnDgD,YAAa,uBAAuBhD,MAAM,KAC1CsH,cAAe,SACfnC,KAAM,SAAU9T,GACZ,MAAO,QAAQqJ,KAAKrJ,IAExBkD,SAAU,SAAUoQ,EAAOE,EAAS0a,GAChC,OAAI5a,EAAQ,GACD4a,EAAU,KAAO,KAEjBA,EAAU,KAAO,MAGhC/kB,eAAgB,CACZ2L,GAAI,QACJD,IAAK,WACLE,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,2BAEVZ,SAAU,CACNC,QAAS,iBACTC,QAAS,kBACTC,SAAU,eACVC,QAAS,iBACTC,SAAU,sBACVC,SAAU,KAEdQ,aAAc,CACVC,OAAQ,SACRC,KAAM,YACNnI,EAAG,mBACHoI,GAAI,cACJpT,EAAG,YACHqT,GAAI,YACJC,EAAG,SACHC,GAAI,SACJxD,EAAG,SACHyD,GAAI,SACJG,EAAG,WACHC,GAAI,YACJhG,EAAG,UACHiG,GAAI,WAERb,uBAAwB,kBACxB9M,QAAS,SAAUjB,GACf,OACIA,GACY,IAAXA,GAA2B,IAAXA,GAA0B,IAAVA,EAAe,MAAQ,OAGhEyJ,KAAM,CACFL,IAAK,EACLC,IAAK,KAMI,SAAbghB,GAAuBhgB,GACnB,OAAa,IAANA,EACD,EACM,IAANA,EACA,EACM,IAANA,EACA,EACW,GAAXA,EAAI,KAAYA,EAAI,KAAO,GAC3B,EACW,IAAXA,EAAI,IACJ,EACA,EAoDE,SAAZigB,GAAsBtJ,GAClB,OAAO,SAAUhhB,EAAQ+f,EAAe5N,EAAQ+S,GAC5C,IAAIqF,EAAIF,GAAWrqB,GACfwqB,EAAMC,GAAQzJ,GAAGqJ,GAAWrqB,IAIhC,OAHU,IAANuqB,IACAC,EAAMA,EAAIzK,EAAgB,EAAI,IAE3ByK,EAAI/oB,QAAQ,MAAOzB,IAtEtC,IAaIyqB,GAAU,CACN1kB,EAAG,CACC,iEACA,gEACA,CAAC,6CAAW,8CACZ,8BACA,oCACA,qCAEJhL,EAAG,CACC,iEACA,gEACA,CAAC,6CAAW,8CACZ,oCACA,oCACA,qCAEJsT,EAAG,CACC,2DACA,0DACA,CAAC,uCAAU,wCACX,oCACA,8BACA,+BAEJvD,EAAG,CACC,qDACA,8CACA,CAAC,iCAAS,kCACV,8BACA,oCACA,yBAEJ4D,EAAG,CACC,qDACA,8CACA,CAAC,iCAAS,kCACV,8BACA,8BACA,yBAEJ/F,EAAG,CACC,qDACA,8CACA,CAAC,iCAAS,kCACV,oCACA,oCACA,0BAaR+hB,GAAW,CACP,iCACA,iCACA,2BACA,iCACA,qBACA,2BACA,uCACA,qBACA,uCACA,uCACA,uCACA,wCAGRlyB,EAAM0X,aAAa,QAAS,CACxBhJ,OAAQwjB,GACRzjB,YAAayjB,GACbjgB,SAAU,uRAAsDlD,MAAM,KACtEiD,cAAe,mMAAwCjD,MAAM,KAC7DgD,YAAa,mDAAgBhD,MAAM,KACnCojB,oBAAoB,EACpB5oB,eAAgB,CACZ2L,GAAI,QACJD,IAAK,WACLE,EAAG,uBACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,0BAEVe,cAAe,gBACfnC,KAAM,SAAU9T,GACZ,MAAO,WAAQA,GAEnBkD,SAAU,SAAU+Z,EAAMkB,EAAQ+P,GAC9B,OAAIjR,EAAO,GACA,SAEA,UAGf3I,SAAU,CACNC,QAAS,8FACTC,QAAS,wFACTC,SAAU,oEACVC,QAAS,kFACTC,SAAU,oEACVC,SAAU,KAEdQ,aAAc,CACVC,OAAQ,wBACRC,KAAM,wBACNnI,EAAGukB,GAAU,KACbnc,GAAImc,GAAU,KACdvvB,EAAGuvB,GAAU,KACblc,GAAIkc,GAAU,KACdjc,EAAGic,GAAU,KACbhc,GAAIgc,GAAU,KACdxf,EAAGwf,GAAU,KACb/b,GAAI+b,GAAU,KACd5b,EAAG4b,GAAU,KACb3b,GAAI2b,GAAU,KACd3hB,EAAG2hB,GAAU,KACb1b,GAAI0b,GAAU,MAElBxK,WAAY,SAAU3N,GAClB,OAAOA,EAAO1Q,QAAQ,KAAM,WAEhCgI,KAAM,CACFL,IAAK,EACLC,IAAK,KAMb7Q,EAAM0X,aAAa,QAAS,CACxBhJ,OAAQ,0WAAwEK,MAC5E,KAEJN,YAAa,0WAAwEM,MACjF,KAEJkD,SAAU,uRAAsDlD,MAAM,KACtEiD,cAAe,mMAAwCjD,MAAM,KAC7DgD,YAAa,mDAAgBhD,MAAM,KACnCojB,oBAAoB,EACpB5oB,eAAgB,CACZ2L,GAAI,QACJD,IAAK,WACLE,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,0BAEVZ,SAAU,CACNC,QAAS,8FACTC,QAAS,kFACTC,SAAU,oEACVC,QAAS,kFACTC,SAAU,oEACVC,SAAU,KAEdQ,aAAc,CACVC,OAAQ,kBACRC,KAAM,wBACNnI,EAAG,2BACHoI,GAAI,oCACJpT,EAAG,iCACHqT,GAAI,oCACJC,EAAG,2BACHC,GAAI,oCACJxD,EAAG,qBACHyD,GAAI,8BACJG,EAAG,qBACHC,GAAI,8BACJhG,EAAG,qBACHiG,GAAI,qCAERnF,KAAM,CACFL,IAAK,EACLC,IAAK,MAkBM,SAAfuhB,GAAyBvgB,GACrB,OAAa,IAANA,EACD,EACM,IAANA,EACA,EACM,IAANA,EACA,EACW,GAAXA,EAAI,KAAYA,EAAI,KAAO,GAC3B,EACW,IAAXA,EAAI,IACJ,EACA,EAoDI,SAAdwgB,GAAwB7J,GACpB,OAAO,SAAUhhB,EAAQ+f,EAAe5N,EAAQ+S,GAC5C,IAAIqF,EAAIK,GAAa5qB,GACjBwqB,EAAMM,GAAU9J,GAAG4J,GAAa5qB,IAIpC,OAHU,IAANuqB,IACAC,EAAMA,EAAIzK,EAAgB,EAAI,IAE3ByK,EAAI/oB,QAAQ,MAAOzB,IAlFtC,IAAI+qB,GAAY,CACRC,EAAK,IACLC,EAAK,IACLC,EAAK,IACLC,EAAK,IACLC,EAAK,IACLC,EAAK,IACLC,EAAK,IACLC,EAAK,IACLC,EAAK,IACLC,EAAK,KAeTX,GAAY,CACR/kB,EAAG,CACC,iEACA,gEACA,CAAC,6CAAW,8CACZ,8BACA,oCACA,qCAEJhL,EAAG,CACC,iEACA,gEACA,CAAC,6CAAW,8CACZ,oCACA,oCACA,qCAEJsT,EAAG,CACC,2DACA,0DACA,CAAC,uCAAU,wCACX,oCACA,8BACA,+BAEJvD,EAAG,CACC,qDACA,8CACA,CAAC,iCAAS,kCACV,8BACA,oCACA,yBAEJ4D,EAAG,CACC,qDACA,8CACA,CAAC,iCAAS,kCACV,8BACA,8BACA,yBAEJ/F,EAAG,CACC,qDACA,8CACA,CAAC,iCAAS,kCACV,oCACA,oCACA,0BAaR+iB,GAAW,CACP,iCACA,uCACA,2BACA,iCACA,2BACA,iCACA,iCACA,iCACA,uCACA,uCACA,uCACA,wCAGRlzB,EAAM0X,aAAa,QAAS,CACxBhJ,OAAQwkB,GACRzkB,YAAaykB,GACbjhB,SAAU,uRAAsDlD,MAAM,KACtEiD,cAAe,mMAAwCjD,MAAM,KAC7DgD,YAAa,mDAAgBhD,MAAM,KACnCojB,oBAAoB,EACpB5oB,eAAgB,CACZ2L,GAAI,QACJD,IAAK,WACLE,EAAG,uBACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,0BAEVe,cAAe,gBACfnC,KAAM,SAAU9T,GACZ,MAAO,WAAQA,GAEnBkD,SAAU,SAAU+Z,EAAMkB,EAAQ+P,GAC9B,OAAIjR,EAAO,GACA,SAEA,UAGf3I,SAAU,CACNC,QAAS,8FACTC,QAAS,wFACTC,SAAU,oEACVC,QAAS,kFACTC,SAAU,oEACVC,SAAU,KAEdQ,aAAc,CACVC,OAAQ,wBACRC,KAAM,wBACNnI,EAAG8kB,GAAY,KACf1c,GAAI0c,GAAY,KAChB9vB,EAAG8vB,GAAY,KACfzc,GAAIyc,GAAY,KAChBxc,EAAGwc,GAAY,KACfvc,GAAIuc,GAAY,KAChB/f,EAAG+f,GAAY,KACftc,GAAIsc,GAAY,KAChBnc,EAAGmc,GAAY,KACflc,GAAIkc,GAAY,KAChBliB,EAAGkiB,GAAY,KACfjc,GAAIic,GAAY,MAEpB1U,SAAU,SAAUhE,GAChB,OAAOA,EAAO1Q,QAAQ,UAAM,MAEhCqe,WAAY,SAAU3N,GAClB,OAAOA,EACF1Q,QAAQ,MAAO,SAAUD,GACtB,OAAOupB,GAAUvpB,KAEpBC,QAAQ,KAAM,WAEvBgI,KAAM,CACFL,IAAK,EACLC,IAAK,MAMb7Q,EAAM0X,aAAa,QAAS,CACxBhJ,OAAQ,0WAAwEK,MAC5E,KAEJN,YAAa,0WAAwEM,MACjF,KAEJkD,SAAU,uRAAsDlD,MAAM,KACtEiD,cAAe,mMAAwCjD,MAAM,KAC7DgD,YAAa,mDAAgBhD,MAAM,KACnCojB,oBAAoB,EACpB5oB,eAAgB,CACZ2L,GAAI,QACJD,IAAK,WACLE,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,0BAEVZ,SAAU,CACNC,QAAS,8FACTC,QAAS,kFACTC,SAAU,oEACVC,QAAS,kFACTC,SAAU,oEACVC,SAAU,KAEdQ,aAAc,CACVC,OAAQ,kBACRC,KAAM,wBACNnI,EAAG,2BACHoI,GAAI,oCACJpT,EAAG,iCACHqT,GAAI,oCACJC,EAAG,2BACHC,GAAI,oCACJxD,EAAG,qBACHyD,GAAI,8BACJG,EAAG,qBACHC,GAAI,8BACJhG,EAAG,qBACHiG,GAAI,qCAERnF,KAAM,CACFL,IAAK,EACLC,IAAK,MAMb,IAAIsiB,GAAc,CACVX,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,UAETG,GAAY,CACRC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,KAGb9zB,EAAM0X,aAAa,QAAS,CACxBhJ,OAAQ,wYAA6EK,MACjF,KAEJN,YAAa,wYAA6EM,MACtF,KAEJkD,SAAU,uRAAsDlD,MAAM,KACtEiD,cAAe,mMAAwCjD,MAAM,KAC7DgD,YAAa,mDAAgBhD,MAAM,KACnCojB,oBAAoB,EACpB5oB,eAAgB,CACZ2L,GAAI,QACJD,IAAK,WACLE,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,0BAEVe,cAAe,gBACfnC,KAAM,SAAU9T,GACZ,MAAO,WAAQA,GAEnBkD,SAAU,SAAU+Z,EAAMkB,EAAQ+P,GAC9B,OAAIjR,EAAO,GACA,SAEA,UAGf3I,SAAU,CACNC,QAAS,8FACTC,QAAS,kFACTC,SAAU,oEACVC,QAAS,kFACTC,SAAU,oEACVC,SAAU,KAEdQ,aAAc,CACVC,OAAQ,kBACRC,KAAM,wBACNnI,EAAG,2BACHoI,GAAI,oCACJpT,EAAG,iCACHqT,GAAI,oCACJC,EAAG,2BACHC,GAAI,oCACJxD,EAAG,qBACHyD,GAAI,8BACJG,EAAG,qBACHC,GAAI,8BACJhG,EAAG,qBACHiG,GAAI,qCAERuH,SAAU,SAAUhE,GAChB,OAAOA,EACF1Q,QAAQ,kEAAiB,SAAUD,GAChC,OAAOoqB,GAAUpqB,KAEpBC,QAAQ,UAAM,MAEvBqe,WAAY,SAAU3N,GAClB,OAAOA,EACF1Q,QAAQ,MAAO,SAAUD,GACtB,OAAOmqB,GAAYnqB,KAEtBC,QAAQ,KAAM,WAEvBgI,KAAM,CACFL,IAAK,EACLC,IAAK,KAMb7Q,EAAM0X,aAAa,QAAS,CACxBhJ,OAAQ,gXAAyEK,MAC7E,KAEJN,YAAa,gXAAyEM,MAClF,KAEJkD,SAAU,uRAAsDlD,MAAM,KACtEiD,cAAe,mMAAwCjD,MAAM,KAC7DgD,YAAa,mDAAgBhD,MAAM,KACnCojB,oBAAoB,EACpB5oB,eAAgB,CACZ2L,GAAI,QACJD,IAAK,WACLE,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,0BAEVZ,SAAU,CACNC,QAAS,8FACTC,QAAS,kFACTC,SAAU,oEACVC,QAAS,kFACTC,SAAU,oEACVC,SAAU,KAEdQ,aAAc,CACVC,OAAQ,kBACRC,KAAM,wBACNnI,EAAG,2BACHoI,GAAI,oCACJpT,EAAG,iCACHqT,GAAI,oCACJC,EAAG,2BACHC,GAAI,oCACJxD,EAAG,qBACHyD,GAAI,8BACJG,EAAG,qBACHC,GAAI,8BACJhG,EAAG,qBACHiG,GAAI,qCAERnF,KAAM,CACFL,IAAK,EACLC,IAAK,KA8BM,SAAfkjB,GAAyBliB,GACrB,OAAa,IAANA,EACD,EACM,IAANA,EACA,EACM,IAANA,EACA,EACW,GAAXA,EAAI,KAAYA,EAAI,KAAO,GAC3B,EACW,IAAXA,EAAI,IACJ,EACA,EAoDI,SAAdmiB,GAAwBxL,GACpB,OAAO,SAAUhhB,EAAQ+f,EAAe5N,EAAQ+S,GAC5C,IAAIqF,EAAIgC,GAAavsB,GACjBwqB,EAAMiC,GAAUzL,GAAGuL,GAAavsB,IAIpC,OAHU,IAANuqB,IACAC,EAAMA,EAAIzK,EAAgB,EAAI,IAE3ByK,EAAI/oB,QAAQ,MAAOzB,IA9FtC,IAAI0sB,GAAc,CACV1B,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,UAETkB,GAAc,CACVd,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,KAeTG,GAAY,CACR1mB,EAAG,CACC,iEACA,gEACA,CAAC,6CAAW,8CACZ,8BACA,oCACA,qCAEJhL,EAAG,CACC,iEACA,gEACA,CAAC,6CAAW,8CACZ,oCACA,oCACA,qCAEJsT,EAAG,CACC,2DACA,0DACA,CAAC,uCAAU,wCACX,oCACA,8BACA,+BAEJvD,EAAG,CACC,qDACA,8CACA,CAAC,iCAAS,kCACV,8BACA,oCACA,yBAEJ4D,EAAG,CACC,qDACA,8CACA,CAAC,iCAAS,kCACV,8BACA,8BACA,yBAEJ/F,EAAG,CACC,qDACA,8CACA,CAAC,iCAAS,kCACV,oCACA,oCACA,0BAaRikB,GAAW,CACP,iCACA,uCACA,2BACA,iCACA,2BACA,iCACA,iCACA,iCACA,uCACA,uCACA,uCACA,wCAGRp0B,EAAM0X,aAAa,KAAM,CACrBhJ,OAAQ0lB,GACR3lB,YAAa2lB,GACbniB,SAAU,uRAAsDlD,MAAM,KACtEiD,cAAe,mMAAwCjD,MAAM,KAC7DgD,YAAa,mDAAgBhD,MAAM,KACnCojB,oBAAoB,EACpB5oB,eAAgB,CACZ2L,GAAI,QACJD,IAAK,WACLE,EAAG,uBACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,0BAEVe,cAAe,gBACfnC,KAAM,SAAU9T,GACZ,MAAO,WAAQA,GAEnBkD,SAAU,SAAU+Z,EAAMkB,EAAQ+P,GAC9B,OAAIjR,EAAO,GACA,SAEA,UAGf3I,SAAU,CACNC,QAAS,8FACTC,QAAS,wFACTC,SAAU,oEACVC,QAAS,kFACTC,SAAU,oEACVC,SAAU,KAEdQ,aAAc,CACVC,OAAQ,wBACRC,KAAM,wBACNnI,EAAGymB,GAAY,KACfre,GAAIqe,GAAY,KAChBzxB,EAAGyxB,GAAY,KACfpe,GAAIoe,GAAY,KAChBne,EAAGme,GAAY,KACfle,GAAIke,GAAY,KAChB1hB,EAAG0hB,GAAY,KACfje,GAAIie,GAAY,KAChB9d,EAAG8d,GAAY,KACf7d,GAAI6d,GAAY,KAChB7jB,EAAG6jB,GAAY,KACf5d,GAAI4d,GAAY,MAEpBrW,SAAU,SAAUhE,GAChB,OAAOA,EACF1Q,QAAQ,kEAAiB,SAAUD,GAChC,OAAOmrB,GAAYnrB,KAEtBC,QAAQ,UAAM,MAEvBqe,WAAY,SAAU3N,GAClB,OAAOA,EACF1Q,QAAQ,MAAO,SAAUD,GACtB,OAAOkrB,GAAYlrB,KAEtBC,QAAQ,KAAM,WAEvBgI,KAAM,CACFL,IAAK,EACLC,IAAK,MAMb,IAAIwjB,GAAW,CACX7B,EAAG,QACHI,EAAG,QACHG,EAAG,QACHuB,GAAI,QACJC,GAAI,QACJ9B,EAAG,OACHK,EAAG,OACH0B,GAAI,OACJC,GAAI,OACJ/B,EAAG,cACHC,EAAG,cACH+B,IAAK,cACL7B,EAAG,YACHG,EAAG,QACH2B,GAAI,QACJC,GAAI,QACJC,GAAI,kBACJC,GAAI,mBAwFR,SAASC,GAAuBvtB,EAAQ+f,EAAejhB,GACnD,IATkB0uB,EACdC,EAgBJ,MAAY,MAAR3uB,EACOihB,EAAgB,6CAAY,6CACpB,MAARjhB,EACAihB,EAAgB,6CAAY,6CAE5B/f,EAAS,KAtBFwtB,GAsB6BxtB,EArB3CytB,EAQS,CACTtf,GAAI4R,EAAgB,6HAA2B,6HAC/C3R,GAAI2R,EAAgB,6HAA2B,6HAC/CzR,GAAIyR,EAAgB,6HAA2B,6HAC/CxR,GAAI,6EACJI,GAAI,iHACJC,GAAI,8EAOgC9P,GArBvByI,MAAM,KAChBimB,EAAM,IAAO,GAAKA,EAAM,KAAQ,GACjCC,EAAM,GACM,GAAZD,EAAM,IAAWA,EAAM,IAAM,IAAMA,EAAM,IAAM,IAAmB,IAAbA,EAAM,KAC3DC,EAAM,GACNA,EAAM,IAnFhBj1B,EAAM0X,aAAa,KAAM,CACrBhJ,OAAQ,+EAA+EK,MACnF,KAEJN,YAAa,kDAAkDM,MAAM,KACrEkD,SAAU,2KAAqElD,MAC3E,KAEJiD,cAAe,sDAA8BjD,MAAM,KACnDgD,YAAa,+CAAuBhD,MAAM,KAC1CojB,oBAAoB,EACpB5oB,eAAgB,CACZ2L,GAAI,QACJD,IAAK,WACLE,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,2BAEVZ,SAAU,CACNC,QAAS,qBACTC,QAAS,kBACTC,SAAU,mDACVC,QAAS,qBACTC,SAAU,iDACVC,SAAU,KAEdQ,aAAc,CACVC,OAAQ,WACRC,KAAM,qBACNnI,EAAG,+BACHoI,GAAI,iBACJpT,EAAG,uBACHqT,GAAI,sBACJC,EAAG,WACHC,GAAI,UACJxD,EAAG,aACHyD,GAAI,YACJG,EAAG,SACHC,GAAI,QACJhG,EAAG,SACHiG,GAAI,SAERC,cAAe,oDACfnC,KAAM,SAAU9T,GACZ,MAAO,8BAAmBqJ,KAAKrJ,IAEnCkD,SAAU,SAAU+Z,EAAMkB,EAAQ+P,GAC9B,OAAIjR,EAAO,EACA,YACAA,EAAO,GACP,kBACAA,EAAO,GACP,eAEA,cAGf9H,uBAAwB,6DACxB9M,QAAS,SAAUjB,GACf,GAAe,IAAXA,EAEA,OAAOA,EAAS,kBAEpB,IAAI5G,EAAI4G,EAAS,GAGjB,OAAOA,GAAU6sB,GAASzzB,IAAMyzB,GAFvB7sB,EAAS,IAAO5G,IAEsByzB,GAD7B,KAAV7sB,EAAgB,IAAM,QAGlCyJ,KAAM,CACFL,IAAK,EACLC,IAAK,KAgCb7Q,EAAM0X,aAAa,KAAM,CACrBhJ,OAAQ,CACJzM,OAAQ,oiBAAuG8M,MAC3G,KAEJmmB,WAAY,whBAAqGnmB,MAC7G,MAGRN,YAAa,sRAA0DM,MACnE,KAEJkD,SAAU,CACNhQ,OAAQ,+SAA0D8M,MAC9D,KAEJmmB,WAAY,+SAA0DnmB,MAClE,KAEJie,SAAU,8IAEdhb,cAAe,6FAAuBjD,MAAM,KAC5CgD,YAAa,6FAAuBhD,MAAM,KAC1CxF,eAAgB,CACZ2L,GAAI,QACJD,IAAK,WACLE,EAAG,aACHC,GAAI,sBACJC,IAAK,6BACLC,KAAM,oCAEVZ,SAAU,CACNC,QAAS,6CACTC,QAAS,mDACTE,QAAS,6CACTD,SAAU,WACN,MAAO,6BAEXE,SAAU,WACN,OAAQlV,KAAKqT,OACT,KAAK,EACL,KAAK,EACL,KAAK,EACL,KAAK,EACD,MAAO,uEACX,KAAK,EACL,KAAK,EACL,KAAK,EACD,MAAO,mEAGnB8B,SAAU,KAEdQ,aAAc,CACVC,OAAQ,8BACRC,KAAM,8BACNnI,EAAG,wFACHhL,EAAGwyB,GACHnf,GAAImf,GACJlf,EAAGkf,GACHjf,GAAIif,GACJziB,EAAG,iCACHyD,GAAIgf,GACJ7e,EAAG,iCACHC,GAAI4e,GACJ5kB,EAAG,qBACHiG,GAAI2e,IAER1e,cAAe,wHACfnC,KAAM,SAAU9T,GACZ,MAAO,8DAAiBqJ,KAAKrJ,IAEjCkD,SAAU,SAAU+Z,EAAMkB,EAAQ+P,GAC9B,OAAIjR,EAAO,EACA,2BACAA,EAAO,GACP,uCACAA,EAAO,GACP,qBAEA,wCAGf9H,uBAAwB,uCACxB9M,QAAS,SAAUjB,EAAQ+a,GACvB,OAAQA,GACJ,IAAK,IACL,IAAK,IACL,IAAK,MACL,IAAK,IACL,IAAK,IACD,OAAQ/a,EAAS,IAAO,GAAKA,EAAS,IAAO,GACzCA,EAAS,KAAQ,IACjBA,EAAS,KAAQ,GAEfA,EAAS,UADTA,EAAS,UAEnB,IAAK,IACD,OAAOA,EAAS,gBACpB,QACI,OAAOA,IAGnByJ,KAAM,CACFL,IAAK,EACLC,IAAK,KAMb7Q,EAAM0X,aAAa,KAAM,CACrBhJ,OAAQ,kbAAoFK,MACxF,KAEJN,YAAa,sOAAkDM,MAAM,KACrEkD,SAAU,ySAAyDlD,MAC/D,KAEJiD,cAAe,uIAA8BjD,MAAM,KACnDgD,YAAa,6FAAuBhD,MAAM,KAC1CxF,eAAgB,CACZ2L,GAAI,OACJD,IAAK,UACLE,EAAG,YACHC,GAAI,cACJC,IAAK,mBACLC,KAAM,0BAEVZ,SAAU,CACNC,QAAS,uCACTC,QAAS,uCACTC,SAAU,mBACVC,QAAS,6CACTC,SAAU,WACN,OAAQlV,KAAKqT,OACT,KAAK,EACL,KAAK,EACL,KAAK,EACD,MAAO,sEACX,KAAK,EACL,KAAK,EACL,KAAK,EACL,KAAK,EACD,MAAO,kEAGnB8B,SAAU,KAEdQ,aAAc,CACVC,OAAQ,8BACRC,KAAM,oCACNnI,EAAG,wFACHoI,GAAI,gDACJpT,EAAG,uCACHqT,GAAI,0CACJC,EAAG,qBACHC,GAAI,8BACJxD,EAAG,qBACHyD,GAAI,8BACJG,EAAG,iCACHC,GAAI,0CACJhG,EAAG,uCACHiG,GAAI,2CAERb,uBAAwB,0FACxB9M,QAAS,SAAUjB,GACf,IAAI2tB,EAAY3tB,EAAS,GACrB4tB,EAAc5tB,EAAS,IAC3B,OAAe,IAAXA,EACOA,EAAS,gBACO,GAAhB4tB,EACA5tB,EAAS,gBACK,GAAd4tB,GAAoBA,EAAc,GAClC5tB,EAAS,gBACK,GAAd2tB,EACA3tB,EAAS,gBACK,GAAd2tB,EACA3tB,EAAS,gBACK,GAAd2tB,GAAiC,GAAdA,EACnB3tB,EAAS,gBAETA,EAAS,iBAGxByJ,KAAM,CACFL,IAAK,EACLC,IAAK,KAMb7Q,EAAM0X,aAAa,KAAM,CACrBhJ,OAAQ,uKAA8IK,MAClJ,KAEJN,YAAa,gEAAiDM,MAAM,KACpEkD,SAAU,yDAA+ClD,MAAM,KAC/DiD,cAAe,mCAA8BjD,MAAM,KACnDgD,YAAa,uBAAuBhD,MAAM,KAC1CxF,eAAgB,CACZ2L,GAAI,QACJD,IAAK,WACLE,EAAG,aACHC,GAAI,2BACJC,IAAK,kDACLC,KAAM,wDAEVZ,SAAU,CACNC,QAAS,yBACTC,QAAS,2BACTC,SAAU,+BACVC,QAAS,2BACTC,SAAU,6CACVC,SAAU,KAEdQ,aAAc,CACVC,OAAQ,oBACRC,KAAM,uBACNnI,EAAG,kBACHoI,GAAI,aACJpT,EAAG,eACHqT,GAAI,YACJC,EAAG,uBACHC,GAAI,oBACJxD,EAAG,aACHyD,GAAI,UACJG,EAAG,aACHC,GAAI,UACJhG,EAAG,YACHiG,GAAI,UAERnF,KAAM,CACFL,IAAK,EACLC,IAAK,KAMb,IAAIwkB,GAAc,CACV7C,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,UAETqC,GAAc,CACVC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,KAGbh2B,EAAM0X,aAAa,KAAM,CACrBhJ,OAAQ,sdAA0FK,MAC9F,KAEJN,YAAa,4UAAmEM,MAC5E,KAEJkD,SAAU,2TAA4DlD,MAClE,KAEJiD,cAAe,6LAAuCjD,MAAM,KAC5DgD,YAAa,+JAAkChD,MAAM,KACrDxF,eAAgB,CACZ2L,GAAI,4BACJD,IAAK,+BACLE,EAAG,aACHC,GAAI,cACJC,IAAK,yCACLC,KAAM,gDAEVZ,SAAU,CACNC,QAAS,oBACTC,QAAS,wDACTC,SAAU,WACVC,QAAS,sCACTC,SAAU,0BACVC,SAAU,KAEdQ,aAAc,CACVC,OAAQ,wBACRC,KAAM,wBACNnI,EAAG,sEACHoI,GAAI,gDACJpT,EAAG,8CACHqT,GAAI,oCACJC,EAAG,8CACHC,GAAI,oCACJxD,EAAG,kCACHyD,GAAI,wBACJG,EAAG,kCACHC,GAAI,wBACJhG,EAAG,kCACHiG,GAAI,yBAERuH,SAAU,SAAUhE,GAChB,OAAOA,EAAO1Q,QAAQ,kEAAiB,SAAUD,GAC7C,OAAOssB,GAAYtsB,MAG3Bse,WAAY,SAAU3N,GAClB,OAAOA,EAAO1Q,QAAQ,MAAO,SAAUD,GACnC,OAAOqsB,GAAYrsB,MAG3BqN,cAAe,+HACfkH,aAAc,SAAUF,EAAM/Z,GAI1B,OAHa,KAAT+Z,IACAA,EAAO,GAGO,uBAAb/Z,GAA8B,GAAR+Z,GACT,mCAAb/Z,GAAwB+Z,EAAO,GACnB,mCAAb/Z,EAEO+Z,EAAO,GAEPA,GAGf/Z,SAAU,SAAU+Z,EAAMkB,EAAQ+P,GAC9B,OAAIjR,EAAO,EACA,qBACAA,EAAO,GACP,2BACAA,EAAO,GACP,iCACAA,EAAO,GACP,iCAEA,sBAGfpM,KAAM,CACFL,IAAK,EACLC,IAAK,KAMb,IAAIolB,GAAc,CACVzD,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,UAETiD,GAAc,CACVC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,KAiGb,SAASC,GAAyBrvB,EAAQ+f,EAAejhB,GACrD,IAyBcwwB,EApBd,OAAOtvB,EAAS,KAoBFsvB,EAzBD,CACTlhB,GAAI,WACJO,GAAI,MACJJ,GAAI,UAE8BzP,GAqBvB,IArB6BkB,EAwBrCsvB,EAEX,SAAsBA,GAClB,IAAIC,EAAgB,CAChBx0B,EAAG,IACH1B,EAAG,IACHyR,EAAG,KAEP,YAAsCnO,IAAlC4yB,EAAcD,EAAKzI,OAAO,IAGvB0I,EAAcD,EAAKzI,OAAO,IAAMyI,EAAKE,UAAU,GAF3CF,EAXAG,CAAaH,IA1H5B92B,EAAM0X,aAAa,KAAM,CACrBhJ,OAAQ,wzBAAqJK,MACzJ,KAEJN,YAAa,qPAAiEM,MAC1E,KAEJJ,iBAAkB,+BAClBuoB,kBAAkB,EAClBjlB,SAAU,mbAAgFlD,MACtF,KAEJiD,cAAe,2QAAoDjD,MAC/D,KAEJgD,YAAa,iIAA6BhD,MAAM,KAChDxF,eAAgB,CACZ2L,GAAI,SACJD,IAAK,YACLE,EAAG,aACHC,GAAI,cACJC,IAAK,sBACLC,KAAM,6BAEVZ,SAAU,CACNC,QAAS,4CACTC,QAAS,4CACTC,SAAU,mGACVC,QAAS,gCACTC,SAAU,kGACVC,SAAU,KAEdQ,aAAc,CACVC,OAAQ,kBACRC,KAAM,oCACNnI,EAAG,iCACHoI,GAAI,0CACJpT,EAAG,+DACHqT,GAAI,oCACJC,EAAG,qEACHC,GAAI,0CACJxD,EAAG,mDACHyD,GAAI,8BACJG,EAAG,yDACHC,GAAI,8BACJhG,EAAG,6CACHiG,GAAI,mBAERuH,SAAU,SAAUhE,GAChB,OAAOA,EAAO1Q,QAAQ,kEAAiB,SAAUD,GAC7C,OAAOktB,GAAYltB,MAG3Bse,WAAY,SAAU3N,GAClB,OAAOA,EAAO1Q,QAAQ,MAAO,SAAUD,GACnC,OAAOitB,GAAYjtB,MAG3BqN,cAAe,6MACfkH,aAAc,SAAUF,EAAM/Z,GAI1B,OAHa,KAAT+Z,IACAA,EAAO,GAGO,yCAAb/Z,GAAiC,GAAR+Z,GACZ,+CAAb/Z,GAA0B+Z,EAAO,GACrB,+CAAb/Z,EAEO+Z,EAAO,GAEPA,GAGf/Z,SAAU,SAAU+Z,EAAMkB,EAAQ+P,GAC9B,OAAIjR,EAAO,EACA,uCACAA,EAAO,GACP,6CACAA,EAAO,GACP,6CACAA,EAAO,GACP,6CAEA,wCAGfpM,KAAM,CACFL,IAAK,EACLC,IAAK,KAkDb,IAAIhC,GAAc,CACV,QACA,mBACA,QACA,QACA,QACA,cACA,QACA,QACA,QACA,QACA,OACA,SAEJsoB,GAAgB,uJAqBhBC,GAAmB,CACf,OACA,OACA,eACA,QACA,OACA,OACA,QA4ER,SAASC,GAAU7vB,EAAQ+f,EAAejhB,GACtC,IAAI+T,EAAS7S,EAAS,IACtB,OAAQlB,GACJ,IAAK,KAQD,OANI+T,GADW,IAAX7S,EACU,UACQ,IAAXA,GAA2B,IAAXA,GAA2B,IAAXA,EAC7B,UAEA,UAGlB,IAAK,IACD,OAAO+f,EAAgB,eAAiB,eAC5C,IAAK,KAQD,OANIlN,GADW,IAAX7S,IAEkB,IAAXA,GAA2B,IAAXA,GAA2B,IAAXA,GAC7B,SAFA,SAOlB,IAAK,IACD,OAAO+f,EAAgB,YAAc,cACzC,IAAK,KAQD,OANIlN,GADW,IAAX7S,EACU,MACQ,IAAXA,GAA2B,IAAXA,GAA2B,IAAXA,EAC7B,OAEA,OAGlB,IAAK,KAMD,OAJI6S,GADW,IAAX7S,EACU,MAEA,OAGlB,IAAK,KAQD,OANI6S,GADW,IAAX7S,EACU,SACQ,IAAXA,GAA2B,IAAXA,GAA2B,IAAXA,EAC7B,UAEA,UAGlB,IAAK,KAQD,OANI6S,GADW,IAAX7S,IAEkB,IAAXA,GAA2B,IAAXA,GAA2B,IAAXA,GAC7B,SAFA,UA7H1BxH,EAAM0X,aAAa,KAAM,CACrBhJ,OAAQ,qFAAgFK,MACpF,KAEJN,YAAa,wDAAmDM,MAAM,KACtEkD,SAAU,kDAA6ClD,MAAM,KAC7DiD,cAAe,8BAA8BjD,MAAM,KACnDgD,YAAa,wBAAwBhD,MAAM,KAC3CsD,cAAe+kB,GACfE,kBArCoB,CAChB,QACA,QACA,WACA,sBACA,SACA,WACA,YA+BJC,mBA7BqB,CACjB,QACA,QACA,QACA,QACA,QACA,QACA,SAuBJH,iBAAkBA,GAElBxoB,YAAauoB,GACbxoB,iBAAkBwoB,GAClBK,kBA7CoB,6FA8CpBC,uBA7CyB,gEA8CzB5oB,YAAaA,GACb6oB,gBAAiB7oB,GACjB8oB,iBAAkB9oB,GAElBtF,eAAgB,CACZ2L,GAAI,QACJD,IAAK,WACLE,EAAG,aACHC,GAAI,sBACJC,IAAK,4BACLC,KAAM,mCAEVZ,SAAU,CACNC,QAAS,gBACTC,QAAS,0BACTC,SAAU,eACVC,QAAS,qBACTC,SAAU,qBACVC,SAAU,KAEdQ,aAAc,CACVC,OAAQ,YACRC,KAAM,cACNnI,EAAG,2BACHoI,GAAI,YACJpT,EAAG,cACHqT,GAAIihB,GACJhhB,EAAG,SACHC,GAAI,SACJxD,EAAG,YACHyD,GAAI8gB,GACJ3gB,EAAG,SACHC,GAAI0gB,GACJ1mB,EAAG,WACHiG,GApIR,SAAiC5O,GAC7B,OAWJ,SAASowB,EAAWpwB,GAChB,GAAa,EAATA,EACA,OAAOowB,EAAWpwB,EAAS,IAE/B,OAAOA,EAfCowB,CAAWpwB,IACf,KAAK,EACL,KAAK,EACL,KAAK,EACL,KAAK,EACL,KAAK,EACD,OAAOA,EAAS,SACpB,QACI,OAAOA,EAAS,YA6HxB+N,uBAAwB,qBACxB9M,QAAS,SAAUjB,GAEf,OAAOA,GADiB,IAAXA,EAAe,QAAO,QAGvCyJ,KAAM,CACFL,IAAK,EACLC,IAAK,GAETwF,cAAe,YACfnC,KAAM,SAAU3L,GACZ,MAAiB,SAAVA,GAEXjF,SAAU,SAAU+Z,EAAMkB,EAAQ+P,GAC9B,OAAOjR,EAAO,GAAK,OAAS,UAoEpCrd,EAAM0X,aAAa,KAAM,CACrBhJ,OAAQ,qFAAqFK,MACzF,KAEJN,YAAa,8DAA8DM,MACvE,KAEJmoB,kBAAkB,EAClBjlB,SAAU,iEAA4DlD,MAClE,KAEJiD,cAAe,0CAAqCjD,MAAM,KAC1DgD,YAAa,4BAAuBhD,MAAM,KAC1CojB,oBAAoB,EACpB5oB,eAAgB,CACZ2L,GAAI,OACJD,IAAK,UACLE,EAAG,aACHC,GAAI,eACJC,IAAK,oBACLC,KAAM,2BAEVZ,SAAU,CACNC,QAAS,eACTC,QAAS,eACTC,SAAU,WACN,OAAQhV,KAAKqT,OACT,KAAK,EACD,MAAO,wBACX,KAAK,EACD,MAAO,uBACX,KAAK,EACD,MAAO,sBACX,KAAK,EACL,KAAK,EACL,KAAK,EACL,KAAK,EACD,MAAO,oBAGnB4B,QAAS,oBACTC,SAAU,WACN,OAAQlV,KAAKqT,OACT,KAAK,EACL,KAAK,EACD,MAAO,4BACX,KAAK,EACD,MAAO,gCACX,KAAK,EACL,KAAK,EACL,KAAK,EACL,KAAK,EACD,MAAO,8BAGnB8B,SAAU,KAEdQ,aAAc,CACVC,OAAQ,QACRC,KAAM,WACNnI,EAAG,cACHoI,GAAI0hB,GACJ90B,EAAG80B,GACHzhB,GAAIyhB,GACJxhB,EAAGwhB,GACHvhB,GAAIuhB,GACJ/kB,EAAG,MACHyD,GAAIshB,GACJnhB,EAAG,SACHC,GAAIkhB,GACJlnB,EAAG,SACHiG,GAAIihB,IAER9hB,uBAAwB,YACxB9M,QAAS,MACTwI,KAAM,CACFL,IAAK,EACLC,IAAK,KAMb7Q,EAAM0X,aAAa,KAAM,CACrBhJ,OAAQ,CACJwmB,WAAY,uFAAoFnmB,MAC5F,KAEJ9M,OAAQ,wHAAqH8M,MACzH,KAEJie,SAAU,mBAEdve,YAAa,iEAA8DM,MACvE,KAEJmoB,kBAAkB,EAClBjlB,SAAU,8DAA8DlD,MACpE,KAEJiD,cAAe,8BAA8BjD,MAAM,KACnDgD,YAAa,uBAAuBhD,MAAM,KAC1CojB,oBAAoB,EACpB5oB,eAAgB,CACZ2L,GAAI,OACJD,IAAK,UACLE,EAAG,aACHC,GAAI,mBACJyiB,GAAI,aACJxiB,IAAK,gCACLyiB,IAAK,mBACLxiB,KAAM,qCACNyiB,KAAM,wBAEVrjB,SAAU,CACNC,QAAS,WACL,MAAO,YAA+B,IAAjB9U,KAAK6T,QAAgB,MAAQ,MAAQ,QAE9DkB,QAAS,WACL,MAAO,eAA+B,IAAjB/U,KAAK6T,QAAgB,MAAQ,MAAQ,QAE9DmB,SAAU,WACN,MAAO,YAA+B,IAAjBhV,KAAK6T,QAAgB,MAAQ,MAAQ,QAE9DoB,QAAS,WACL,MAAO,YAA+B,IAAjBjV,KAAK6T,QAAgB,MAAQ,MAAQ,QAE9DqB,SAAU,WACN,MACI,wBACkB,IAAjBlV,KAAK6T,QAAgB,MAAQ,MAC9B,QAGRsB,SAAU,KAEdQ,aAAc,CACVC,OAAQ,eACRC,KAAM,QACNnI,EAAG,aACHoI,GAAI,YACJpT,EAAG,WACHqT,GAAI,YACJC,EAAG,WACHC,GAAI,WACJxD,EAAG,SACHyD,GAAI,UACJG,EAAG,SACHC,GAAI,WACJhG,EAAG,SACHiG,GAAI,WAERb,uBAAwB,wBACxB9M,QAAS,SAAUjB,EAAQ+a,GAcvB,OAAO/a,GAHQ,MAAX+a,GAA6B,MAAXA,EATP,IAAX/a,EACM,IACW,IAAXA,EACA,IACW,IAAXA,EACA,IACW,IAAXA,EACA,IACA,OAEG,MAIjByJ,KAAM,CACFL,IAAK,EACLC,IAAK,KAMb,IAAImnB,GAAW,8HAAoFjpB,MAC3F,KAEJN,GAAc,yFAAkDM,MAAM,KACtEkpB,GAAgB,CACZ,QACA,WACA,aACA,QACA,aACA,wCACA,2CACA,QACA,gBACA,gBACA,QACA,SAIJC,GAAgB,mPAEpB,SAASC,GAAStmB,GACd,OAAW,EAAJA,GAASA,EAAI,GAAoB,MAAZA,EAAI,IAEpC,SAASumB,GAAY5wB,EAAQ+f,EAAejhB,EAAKomB,GAC7C,IAAIrS,EAAS7S,EAAS,IACtB,OAAQlB,GACJ,IAAK,IACD,OAAOihB,GAAiBmF,EAAW,gBAAe,mBACtD,IAAK,KACD,OAAInF,GAAiBmF,EACVrS,GAAU8d,GAAS3wB,GAAU,UAAY,UAEzC6S,EAAS,YAExB,IAAK,IACD,OAAOkN,EAAgB,SAAWmF,EAAW,SAAW,UAC5D,IAAK,KACD,OAAInF,GAAiBmF,EACVrS,GAAU8d,GAAS3wB,GAAU,SAAW,SAExC6S,EAAS,WAExB,IAAK,IACD,OAAOkN,EAAgB,SAAWmF,EAAW,SAAW,UAC5D,IAAK,KACD,OAAInF,GAAiBmF,EACVrS,GAAU8d,GAAS3wB,GAAU,SAAW,SAExC6S,EAAS,WAExB,IAAK,IACD,OAAOkN,GAAiBmF,EAAW,MAAQ,OAC/C,IAAK,KACD,OAAInF,GAAiBmF,EACVrS,GAAU8d,GAAS3wB,GAAU,MAAQ,UAErC6S,EAAS,MAExB,IAAK,IACD,OAAOkN,GAAiBmF,EAAW,gBAAU,kBACjD,IAAK,KACD,OAAInF,GAAiBmF,EACVrS,GAAU8d,GAAS3wB,GAAU,iBAAW,uBAExC6S,EAAS,iBAExB,IAAK,IACD,OAAOkN,GAAiBmF,EAAW,MAAQ,QAC/C,IAAK,KACD,OAAInF,GAAiBmF,EACVrS,GAAU8d,GAAS3wB,GAAU,OAAS,OAEtC6S,EAAS,QAwShC,SAASge,GAAoB7wB,EAAQ+f,EAAejhB,EAAKomB,GACrD,IAAIzqB,EAAS,CACTM,EAAG,CAAC,cAAe,gBACnBsT,EAAG,CAAC,cAAe,gBACnBvD,EAAG,CAAC,UAAW,aACfyD,GAAI,CAACvO,EAAS,QAASA,EAAS,UAChCwO,EAAG,CAAC,aAAc,eAClBE,EAAG,CAAC,YAAa,eACjBC,GAAI,CAAC3O,EAAS,UAAWA,EAAS,YAClC2I,EAAG,CAAC,WAAY,cAChBiG,GAAI,CAAC5O,EAAS,SAAUA,EAAS,YAErC,OAAO+f,EAAgBtlB,EAAOqE,GAAK,GAAKrE,EAAOqE,GAAK,GA6DxD,SAASgyB,GAAsB9wB,EAAQ+f,EAAejhB,EAAKomB,GACvD,IAAIzqB,EAAS,CACTM,EAAG,CAAC,cAAe,gBACnBsT,EAAG,CAAC,cAAe,gBACnBvD,EAAG,CAAC,UAAW,aACfyD,GAAI,CAACvO,EAAS,QAASA,EAAS,UAChCwO,EAAG,CAAC,aAAc,eAClBE,EAAG,CAAC,YAAa,eACjBC,GAAI,CAAC3O,EAAS,UAAWA,EAAS,YAClC2I,EAAG,CAAC,WAAY,cAChBiG,GAAI,CAAC5O,EAAS,SAAUA,EAAS,YAErC,OAAO+f,EAAgBtlB,EAAOqE,GAAK,GAAKrE,EAAOqE,GAAK,GA6DxD,SAASiyB,GAAsB/wB,EAAQ+f,EAAejhB,EAAKomB,GACvD,IAAIzqB,EAAS,CACTM,EAAG,CAAC,cAAe,gBACnBsT,EAAG,CAAC,cAAe,gBACnBvD,EAAG,CAAC,UAAW,aACfyD,GAAI,CAACvO,EAAS,QAASA,EAAS,UAChCwO,EAAG,CAAC,aAAc,eAClBE,EAAG,CAAC,YAAa,eACjBC,GAAI,CAAC3O,EAAS,UAAWA,EAAS,YAClC2I,EAAG,CAAC,WAAY,cAChBiG,GAAI,CAAC5O,EAAS,SAAUA,EAAS,YAErC,OAAO+f,EAAgBtlB,EAAOqE,GAAK,GAAKrE,EAAOqE,GAAK,GAjcxDtG,EAAM0X,aAAa,KAAM,CACrBhJ,OAAQspB,GACRvpB,YAAaA,GACbG,YAAaspB,GACbvpB,iBAAkBupB,GAGlBV,kBAAmB,gPACnBC,uBAAwB,6FACxB5oB,YAAaopB,GACbP,gBAAiBO,GACjBN,iBAAkBM,GAClBhmB,SAAU,mFAAmDlD,MAAM,KACnEiD,cAAe,kCAAuBjD,MAAM,KAC5CgD,YAAa,kCAAuBhD,MAAM,KAC1CxF,eAAgB,CACZ2L,GAAI,OACJD,IAAK,UACLE,EAAG,aACHC,GAAI,eACJC,IAAK,oBACLC,KAAM,yBACNgE,EAAG,cAEP5E,SAAU,CACNC,QAAS,cACTC,QAAS,kBACTC,SAAU,WACN,OAAQhV,KAAKqT,OACT,KAAK,EACD,MAAO,uBACX,KAAK,EACL,KAAK,EACD,MAAO,kBACX,KAAK,EACD,MAAO,wBACX,KAAK,EACD,MAAO,yBACX,KAAK,EACD,MAAO,oBACX,KAAK,EACD,MAAO,oBAGnB4B,QAAS,oBACTC,SAAU,WACN,OAAQlV,KAAKqT,OACT,KAAK,EACD,MAAO,6BACX,KAAK,EACL,KAAK,EACD,MAAO,0BACX,KAAK,EACD,MAAO,6BACX,KAAK,EACL,KAAK,EACD,MAAO,0BACX,KAAK,EACD,MAAO,0BAGnB8B,SAAU,KAEdQ,aAAc,CACVC,OAAQ,QACRC,KAAM,eACNnI,EAAG6qB,GACHziB,GAAIyiB,GACJ71B,EAAG61B,GACHxiB,GAAIwiB,GACJviB,EAAGuiB,GACHtiB,GAAIsiB,GACJ9lB,EAAG8lB,GACHriB,GAAIqiB,GACJliB,EAAGkiB,GACHjiB,GAAIiiB,GACJjoB,EAAGioB,GACHhiB,GAAIgiB,IAER7iB,uBAAwB,YACxB9M,QAAS,MACTwI,KAAM,CACFL,IAAK,EACLC,IAAK,KAMb7Q,EAAM0X,aAAa,KAAM,CACrBhJ,OAAQ,0TAAgEK,MACpE,KAEJN,YAAa,sOAAkDM,MAAM,KACrEkD,SAAU,2WAAoElD,MAC1E,KAEJiD,cAAe,iIAA6BjD,MAAM,KAClDgD,YAAa,6FAAuBhD,MAAM,KAC1CxF,eAAgB,CACZ2L,GAAI,QACJD,IAAK,WACLE,EAAG,aACHC,GAAI,iHACJC,IAAK,wHACLC,KAAM,+HAEVZ,SAAU,CACNC,QAAS,6EACTC,QAAS,6EACTE,QAAS,6EACTD,SAAU,wFACVE,SAAU,wFACVC,SAAU,KAEdQ,aAAc,CACVC,OAAQ,SAAUtM,GAMd,OAAOA,GALK,mCAAUyQ,KAAKzQ,GACrB,qBACA,uBAAQyQ,KAAKzQ,GACb,qBACA,uBAGVuM,KAAM,0CACNnI,EAAG,6EACHoI,GAAI,gDACJpT,EAAG,oDACHqT,GAAI,oCACJC,EAAG,oDACHC,GAAI,oCACJxD,EAAG,wCACHyD,GAAI,wBACJG,EAAG,8CACHC,GAAI,8BACJhG,EAAG,wCACHiG,GAAI,yBAERb,uBAAwB,6BACxB9M,QAAS,wBACTwI,KAAM,CACFL,IAAK,EACLC,IAAK,KAMb7Q,EAAM0X,aAAa,KAAM,CACrBhJ,OAAQ,yFAAyFK,MAC7F,KAEJN,YAAa,qDAAqDM,MAC9D,KAEJkD,SAAU,+EAA+ElD,MACrF,KAEJiD,cAAe,+BAA+BjD,MAAM,KACpDgD,YAAa,uBAAuBhD,MAAM,KAC1CojB,oBAAoB,EAEpB5oB,eAAgB,CACZ2L,GAAI,QACJD,IAAK,WACLE,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,2BAEVZ,SAAU,CACNC,QAAS,iBACTC,QAAS,gBACTC,SAAU,eACVC,QAAS,eACTC,SAAU,wBACVC,SAAU,KAEdQ,aAAc,CACVC,OAAQ,UACRC,KAAM,cACNnI,EAAG,mBACHoI,GAAI,YACJpT,EAAG,QACHqT,GAAI,WACJC,EAAG,MACHC,GAAI,SACJxD,EAAG,UACHyD,GAAI,aACJG,EAAG,MACHC,GAAI,SACJhG,EAAG,WACHiG,GAAI,cAERb,uBAAwB,mCAExB9M,QAAS,SAAUjB,GACf,IACI2B,EAAS,GAiCb,OATQ,GAzBA3B,EA2BA2B,EADM,KA1BN3B,GA0BkB,KA1BlBA,GA0B8B,KA1B9BA,GA0B0C,KA1B1CA,GA0BsD,MA1BtDA,EA2BS,MAEA,MAEF,EA/BPA,IAgCJ2B,EA9BS,CACL,GACA,KACA,KACA,MACA,MACA,KACA,KACA,KACA,MACA,MACA,MACA,KACA,MACA,KACA,KACA,MACA,KACA,KACA,MACA,KACA,OAvBA3B,IAkCDA,EAAS2B,GAEpB8H,KAAM,CACFL,IAAK,EACLC,IAAK,KAMb7Q,EAAM0X,aAAa,KAAM,CACrBhJ,OAAQ,sFAAsFK,MAC1F,KAEJN,YAAa,kDAAkDM,MAAM,KACrEkD,SAAU,2DAAqDlD,MAAM,KACrEiD,cAAe,oCAA8BjD,MAAM,KACnDgD,YAAa,6BAAuBhD,MAAM,KAC1CxF,eAAgB,CACZ2L,GAAI,QACJD,IAAK,WACLE,EAAG,aACHC,GAAI,eACJC,IAAK,qBACLC,KAAM,sCAEVZ,SAAU,CACNC,QAAS,iBACTC,QAAS,oBACTC,SAAU,sBACVC,QAAS,oBACTC,SAAU,qBACVC,SAAU,KAEdQ,aAAc,CACVC,OAAQ,QACRC,KAAM,WACNnI,EAAG,iBACHoI,GAAI,cACJpT,EAAG,WACHqT,GAAI,cACJC,EAAG,UACHC,GAAI,WACJxD,EAAG,SACHyD,GAAI,UACJG,EAAG,cACHC,GAAI,gBACJhG,EAAG,WACHiG,GAAI,YAERb,uBAAwB,YACxB9M,QAAS,MACTwI,KAAM,CACFL,IAAK,EACLC,IAAK,KAqBb7Q,EAAM0X,aAAa,QAAS,CACxBhJ,OAAQ,2FAAqFK,MACzF,KAEJN,YAAa,mEAA6DM,MACtE,KAEJmoB,kBAAkB,EAClBjlB,SAAU,8DAA8DlD,MACpE,KAEJiD,cAAe,8BAA8BjD,MAAM,KACnDgD,YAAa,uBAAuBhD,MAAM,KAC1CojB,oBAAoB,EACpB5oB,eAAgB,CACZ2L,GAAI,QACJD,IAAK,WACLE,EAAG,aACHC,GAAI,eACJC,IAAK,qBACLC,KAAM,4BAEVZ,SAAU,CACNC,QAAS,sBACTK,SAAU,IACVJ,QAAS,uBACTC,SAAU,qBACVC,QAAS,wBACTC,SAAU,gCAEdS,aAAc,CACVC,OAAQ,QACRC,KAAM,SACNnI,EAAG,oBACHoI,GAAI,cACJpT,EAAG81B,GACHziB,GAAI,aACJC,EAAGwiB,GACHviB,GAAI,aACJxD,EAAG+lB,GACHtiB,GAAIsiB,GACJriB,EAAGqiB,GACHpiB,GAAI,YACJC,EAAGmiB,GACHliB,GAAIkiB,GACJloB,EAAGkoB,GACHjiB,GAAIiiB,IAER9iB,uBAAwB,YACxB9M,QAAS,MACTwI,KAAM,CACFL,IAAK,EACLC,IAAK,KAqBb7Q,EAAM0X,aAAa,QAAS,CACxBhJ,OAAQ,wFAAqFK,MACzF,KAEJN,YAAa,gEAA6DM,MACtE,KAEJmoB,kBAAkB,EAClBjlB,SAAU,8DAA8DlD,MACpE,KAEJiD,cAAe,uBAAuBjD,MAAM,KAC5CgD,YAAa,uBAAuBhD,MAAM,KAC1CojB,oBAAoB,EACpB5oB,eAAgB,CACZ2L,GAAI,QACJD,IAAK,WACLE,EAAG,aACHC,GAAI,eACJC,IAAK,qBACLC,KAAM,4BAEVZ,SAAU,CACNC,QAAS,sBACTK,SAAU,IACVJ,QAAS,uBACTC,SAAU,qBACVC,QAAS,wBACTC,SAAU,gCAEdS,aAAc,CACVC,OAAQ,QACRC,KAAM,SACNnI,EAAG,oBACHoI,GAAI,cACJpT,EAAG+1B,GACH1iB,GAAI,aACJC,EAAGyiB,GACHxiB,GAAI,aACJxD,EAAGgmB,GACHviB,GAAIuiB,GACJtiB,EAAGsiB,GACHriB,GAAI,YACJC,EAAGoiB,GACHniB,GAAImiB,GACJnoB,EAAGmoB,GACHliB,GAAIkiB,IAER/iB,uBAAwB,YACxB9M,QAAS,MACTwI,KAAM,CACFL,IAAK,EACLC,IAAK,KAqBb7Q,EAAM0X,aAAa,KAAM,CACrBhJ,OAAQ,wFAAqFK,MACzF,KAEJN,YAAa,gEAA6DM,MACtE,KAEJmoB,kBAAkB,EAClBjlB,SAAU,8DAA8DlD,MACpE,KAEJiD,cAAe,8BAA8BjD,MAAM,KACnDgD,YAAa,uBAAuBhD,MAAM,KAC1CojB,oBAAoB,EACpB5oB,eAAgB,CACZ2L,GAAI,QACJD,IAAK,WACLE,EAAG,aACHC,GAAI,eACJC,IAAK,qBACLC,KAAM,4BAEVZ,SAAU,CACNC,QAAS,sBACTK,SAAU,IACVJ,QAAS,uBACTC,SAAU,qBACVC,QAAS,wBACTC,SAAU,gCAEdS,aAAc,CACVC,OAAQ,QACRC,KAAM,SACNnI,EAAG,oBACHoI,GAAI,cACJpT,EAAGg2B,GACH3iB,GAAI,aACJC,EAAG0iB,GACHziB,GAAI,aACJxD,EAAGimB,GACHxiB,GAAIwiB,GACJviB,EAAGuiB,GACHtiB,GAAI,YACJC,EAAGqiB,GACHpiB,GAAIoiB,GACJpoB,EAAGooB,GACHniB,GAAImiB,IAERhjB,uBAAwB,YACxB9M,QAAS,MACTwI,KAAM,CACFL,IAAK,EACLC,IAAK,KAMb,IAAI2nB,GAAW,CACP,mDACA,+DACA,uCACA,mDACA,eACA,2BACA,uCACA,mDACA,2EACA,+DACA,+DACA,gEAEJvmB,GAAW,CACP,mDACA,2BACA,mDACA,2BACA,+DACA,uCACA,oDAGRjS,EAAM0X,aAAa,KAAM,CACrBhJ,OAAQ8pB,GACR/pB,YAAa+pB,GACbvmB,SAAUA,GACVD,cAAeC,GACfF,YAAa,iLAAqChD,MAAM,KACxDxF,eAAgB,CACZ2L,GAAI,QACJD,IAAK,WACLE,EAAG,WACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,0BAEVe,cAAe,4BACfnC,KAAM,SAAU9T,GACZ,MAAO,iBAASA,GAEpBkD,SAAU,SAAU+Z,EAAMkB,EAAQ+P,GAC9B,OAAIjR,EAAO,GACA,eAEA,gBAGf3I,SAAU,CACNC,QAAS,4CACTC,QAAS,4CACTC,SAAU,UACVC,QAAS,4CACTC,SAAU,6DACVC,SAAU,KAEdQ,aAAc,CACVC,OAAQ,sDACRC,KAAM,0CACNnI,EAAG,uFACHoI,GAAI,sDACJpT,EAAG,mDACHqT,GAAI,0CACJC,EAAG,+DACHC,GAAI,sDACJxD,EAAG,mDACHyD,GAAI,0CACJG,EAAG,uCACHC,GAAI,8BACJhG,EAAG,mDACHiG,GAAI,2CAERuH,SAAU,SAAUhE,GAChB,OAAOA,EAAO1Q,QAAQ,UAAM,MAEhCqe,WAAY,SAAU3N,GAClB,OAAOA,EAAO1Q,QAAQ,KAAM,WAEhCgI,KAAM,CACFL,IAAK,EACLC,IAAK,MAab7Q,EAAM0X,aAAa,KAAM,CACrB+gB,mBAAoB,wnBAAqH1pB,MACrI,KAEJ2pB,iBAAkB,wnBAAqH3pB,MACnI,KAEJL,OAAQ,SAAUiqB,EAAgB12B,GAC9B,OAAK02B,EAGiB,iBAAX12B,GACP,IAAIwH,KAAKxH,EAAO+0B,UAAU,EAAG/0B,EAAO2L,QAAQ,UAGrC/N,KAAK+4B,kBAAkBD,EAAeptB,SAEtC1L,KAAKg5B,oBAAoBF,EAAeptB,SARxC1L,KAAKg5B,qBAWpBpqB,YAAa,kPAAoDM,MAAM,KACvEkD,SAAU,ySAAyDlD,MAC/D,KAEJiD,cAAe,uIAA8BjD,MAAM,KACnDgD,YAAa,6FAAuBhD,MAAM,KAC1CzL,SAAU,SAAUoQ,EAAOE,EAAS0a,GAChC,OAAY,GAAR5a,EACO4a,EAAU,eAAO,eAEjBA,EAAU,eAAO,gBAGhCpa,KAAM,SAAU9T,GACZ,MAAyC,YAAjCA,EAAQ,IAAI2J,cAAc,IAEtCsM,cAAe,+BACf9M,eAAgB,CACZ2L,GAAI,SACJD,IAAK,YACLE,EAAG,aACHC,GAAI,cACJC,IAAK,qBACLC,KAAM,4BAEVwjB,WAAY,CACRnkB,QAAS,+CACTC,QAAS,yCACTC,SAAU,eACVC,QAAS,mCACTC,SAAU,WACN,OAAQlV,KAAKqT,OACT,KAAK,EACD,MAAO,iGACX,QACI,MAAO,yGAGnB8B,SAAU,KAEdN,SAAU,SAAUpO,EAAK4C,GACrB,IApEc9I,EAoEV+I,EAAStJ,KAAKk5B,YAAYzyB,GAC1BoN,EAAQxK,GAAOA,EAAIwK,QAIvB,OAzEctT,EAsEG+I,GApEI,oBAAblC,UAA4B7G,aAAiB6G,UACX,sBAA1C3G,OAAOC,UAAUC,SAASC,KAAKL,MAoE3B+I,EAASA,EAAOlJ,MAAMiJ,IAEnBC,EAAOF,QAAQ,KAAMyK,EAAQ,IAAO,EAAI,qBAAQ,6BAE3D8B,aAAc,CACVC,OAAQ,kBACRC,KAAM,8BACNnI,EAAG,oGACHoI,GAAI,8EACJpT,EAAG,oDACHqT,GAAI,oCACJC,EAAG,wCACHC,GAAI,8BACJxD,EAAG,8CACHyD,GAAI,oCACJG,EAAG,0DACHC,GAAI,oCACJhG,EAAG,gEACHiG,GAAI,2CAERb,uBAAwB,gBACxB9M,QAAS,WACTwI,KAAM,CACFL,IAAK,EACLC,IAAK,KAMb7Q,EAAM0X,aAAa,QAAS,CACxBhJ,OAAQ,wFAAwFK,MAC5F,KAEJN,YAAa,kDAAkDM,MAAM,KACrEkD,SAAU,2DAA2DlD,MACjE,KAEJiD,cAAe,8BAA8BjD,MAAM,KACnDgD,YAAa,uBAAuBhD,MAAM,KAC1CxF,eAAgB,CACZ2L,GAAI,SACJD,IAAK,YACLE,EAAG,aACHC,GAAI,cACJC,IAAK,qBACLC,KAAM,4BAEVZ,SAAU,CACNC,QAAS,gBACTC,QAAS,mBACTC,SAAU,eACVC,QAAS,oBACTC,SAAU,sBACVC,SAAU,KAEdQ,aAAc,CACVC,OAAQ,QACRC,KAAM,SACNnI,EAAG,gBACHoI,GAAI,aACJpT,EAAG,WACHqT,GAAI,aACJC,EAAG,UACHC,GAAI,WACJxD,EAAG,QACHyD,GAAI,UACJG,EAAG,UACHC,GAAI,YACJhG,EAAG,SACHiG,GAAI,YAERb,uBAAwB,uBACxB9M,QAAS,SAAUjB,GACf,IAAI3G,EAAI2G,EAAS,GAWjB,OAAOA,GAT6B,MAAxBA,EAAS,IAAO,IACd,KACM,GAAN3G,EACA,KACM,GAANA,EACA,KACM,GAANA,EACA,KACA,OAGlBoQ,KAAM,CACFL,IAAK,EACLC,IAAK,KAMb7Q,EAAM0X,aAAa,QAAS,CACxBhJ,OAAQ,wFAAwFK,MAC5F,KAEJN,YAAa,kDAAkDM,MAAM,KACrEkD,SAAU,2DAA2DlD,MACjE,KAEJiD,cAAe,8BAA8BjD,MAAM,KACnDgD,YAAa,uBAAuBhD,MAAM,KAC1CxF,eAAgB,CACZ2L,GAAI,SACJD,IAAK,YACLE,EAAG,aACHC,GAAI,eACJC,IAAK,sBACLC,KAAM,6BAEVZ,SAAU,CACNC,QAAS,gBACTC,QAAS,mBACTC,SAAU,eACVC,QAAS,oBACTC,SAAU,sBACVC,SAAU,KAEdQ,aAAc,CACVC,OAAQ,QACRC,KAAM,SACNnI,EAAG,gBACHoI,GAAI,aACJpT,EAAG,WACHqT,GAAI,aACJC,EAAG,UACHC,GAAI,WACJxD,EAAG,QACHyD,GAAI,UACJG,EAAG,UACHC,GAAI,YACJhG,EAAG,SACHiG,GAAI,YAERb,uBAAwB,uBACxB9M,QAAS,SAAUjB,GACf,IAAI3G,EAAI2G,EAAS,GAWjB,OAAOA,GAT6B,MAAxBA,EAAS,IAAO,IACd,KACM,GAAN3G,EACA,KACM,GAANA,EACA,KACM,GAANA,EACA,KACA,SAOtBb,EAAM0X,aAAa,QAAS,CACxBhJ,OAAQ,wFAAwFK,MAC5F,KAEJN,YAAa,kDAAkDM,MAAM,KACrEkD,SAAU,2DAA2DlD,MACjE,KAEJiD,cAAe,8BAA8BjD,MAAM,KACnDgD,YAAa,uBAAuBhD,MAAM,KAC1CxF,eAAgB,CACZ2L,GAAI,QACJD,IAAK,WACLE,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,2BAEVZ,SAAU,CACNC,QAAS,gBACTC,QAAS,mBACTC,SAAU,eACVC,QAAS,oBACTC,SAAU,sBACVC,SAAU,KAEdQ,aAAc,CACVC,OAAQ,QACRC,KAAM,SACNnI,EAAG,gBACHoI,GAAI,aACJpT,EAAG,WACHqT,GAAI,aACJC,EAAG,UACHC,GAAI,WACJxD,EAAG,QACHyD,GAAI,UACJG,EAAG,UACHC,GAAI,YACJhG,EAAG,SACHiG,GAAI,YAERb,uBAAwB,uBACxB9M,QAAS,SAAUjB,GACf,IAAI3G,EAAI2G,EAAS,GAWjB,OAAOA,GAT6B,MAAxBA,EAAS,IAAO,IACd,KACM,GAAN3G,EACA,KACM,GAANA,EACA,KACM,GAANA,EACA,KACA,OAGlBoQ,KAAM,CACFL,IAAK,EACLC,IAAK,KAMb7Q,EAAM0X,aAAa,QAAS,CACxBhJ,OAAQ,wFAAwFK,MAC5F,KAEJN,YAAa,kDAAkDM,MAAM,KACrEkD,SAAU,2DAA2DlD,MACjE,KAEJiD,cAAe,8BAA8BjD,MAAM,KACnDgD,YAAa,uBAAuBhD,MAAM,KAC1CxF,eAAgB,CACZ2L,GAAI,QACJD,IAAK,WACLE,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,0BAEVZ,SAAU,CACNC,QAAS,gBACTC,QAAS,mBACTC,SAAU,eACVC,QAAS,oBACTC,SAAU,sBACVC,SAAU,KAEdQ,aAAc,CACVC,OAAQ,QACRC,KAAM,SACNnI,EAAG,gBACHoI,GAAI,aACJpT,EAAG,WACHqT,GAAI,aACJC,EAAG,UACHC,GAAI,WACJxD,EAAG,QACHyD,GAAI,UACJG,EAAG,UACHC,GAAI,YACJhG,EAAG,SACHiG,GAAI,YAERb,uBAAwB,uBACxB9M,QAAS,SAAUjB,GACf,IAAI3G,EAAI2G,EAAS,GAWjB,OAAOA,GAT6B,MAAxBA,EAAS,IAAO,IACd,KACM,GAAN3G,EACA,KACM,GAANA,EACA,KACM,GAANA,EACA,KACA,OAGlBoQ,KAAM,CACFL,IAAK,EACLC,IAAK,KAMb7Q,EAAM0X,aAAa,QAAS,CACxBhJ,OAAQ,wFAAwFK,MAC5F,KAEJN,YAAa,kDAAkDM,MAAM,KACrEkD,SAAU,2DAA2DlD,MACjE,KAEJiD,cAAe,8BAA8BjD,MAAM,KACnDgD,YAAa,uBAAuBhD,MAAM,KAC1CxF,eAAgB,CACZ2L,GAAI,QACJD,IAAK,WACLE,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,2BAEVZ,SAAU,CACNC,QAAS,gBACTC,QAAS,mBACTC,SAAU,eACVC,QAAS,oBACTC,SAAU,sBACVC,SAAU,KAEdQ,aAAc,CACVC,OAAQ,QACRC,KAAM,SACNnI,EAAG,gBACHoI,GAAI,aACJpT,EAAG,WACHqT,GAAI,aACJC,EAAG,UACHC,GAAI,WACJxD,EAAG,QACHyD,GAAI,UACJG,EAAG,UACHC,GAAI,YACJhG,EAAG,SACHiG,GAAI,YAERb,uBAAwB,uBACxB9M,QAAS,SAAUjB,GACf,IAAI3G,EAAI2G,EAAS,GAWjB,OAAOA,GAT6B,MAAxBA,EAAS,IAAO,IACd,KACM,GAAN3G,EACA,KACM,GAANA,EACA,KACM,GAANA,EACA,KACA,SAOtBb,EAAM0X,aAAa,QAAS,CACxBhJ,OAAQ,wFAAwFK,MAC5F,KAEJN,YAAa,kDAAkDM,MAAM,KACrEkD,SAAU,2DAA2DlD,MACjE,KAEJiD,cAAe,8BAA8BjD,MAAM,KACnDgD,YAAa,uBAAuBhD,MAAM,KAC1CxF,eAAgB,CACZ2L,GAAI,SACJD,IAAK,YACLE,EAAG,aACHC,GAAI,cACJC,IAAK,qBACLC,KAAM,4BAEVZ,SAAU,CACNC,QAAS,gBACTC,QAAS,mBACTC,SAAU,eACVC,QAAS,oBACTC,SAAU,sBACVC,SAAU,KAEdQ,aAAc,CACVC,OAAQ,QACRC,KAAM,SACNnI,EAAG,gBACHoI,GAAI,aACJpT,EAAG,WACHqT,GAAI,aACJC,EAAG,UACHC,GAAI,WACJxD,EAAG,QACHyD,GAAI,UACJG,EAAG,UACHC,GAAI,YACJhG,EAAG,SACHiG,GAAI,YAERb,uBAAwB,uBACxB9M,QAAS,SAAUjB,GACf,IAAI3G,EAAI2G,EAAS,GAWjB,OAAOA,GAT6B,MAAxBA,EAAS,IAAO,IACd,KACM,GAAN3G,EACA,KACM,GAANA,EACA,KACM,GAANA,EACA,KACA,OAGlBoQ,KAAM,CACFL,IAAK,EACLC,IAAK,KAMb7Q,EAAM0X,aAAa,QAAS,CACxBhJ,OAAQ,wFAAwFK,MAC5F,KAEJN,YAAa,kDAAkDM,MAAM,KACrEkD,SAAU,2DAA2DlD,MACjE,KAEJiD,cAAe,8BAA8BjD,MAAM,KACnDgD,YAAa,uBAAuBhD,MAAM,KAC1CxF,eAAgB,CACZ2L,GAAI,SACJD,IAAK,YACLE,EAAG,aACHC,GAAI,cACJC,IAAK,qBACLC,KAAM,4BAEVZ,SAAU,CACNC,QAAS,gBACTC,QAAS,mBACTC,SAAU,eACVC,QAAS,oBACTC,SAAU,sBACVC,SAAU,KAEdQ,aAAc,CACVC,OAAQ,QACRC,KAAM,SACNnI,EAAG,gBACHoI,GAAI,aACJpT,EAAG,WACHqT,GAAI,aACJC,EAAG,UACHC,GAAI,WACJxD,EAAG,QACHyD,GAAI,UACJG,EAAG,UACHC,GAAI,YACJhG,EAAG,SACHiG,GAAI,YAERb,uBAAwB,uBACxB9M,QAAS,SAAUjB,GACf,IAAI3G,EAAI2G,EAAS,GAWjB,OAAOA,GAT6B,MAAxBA,EAAS,IAAO,IACd,KACM,GAAN3G,EACA,KACM,GAANA,EACA,KACM,GAANA,EACA,KACA,OAGlBoQ,KAAM,CACFL,IAAK,EACLC,IAAK,KAMb7Q,EAAM0X,aAAa,QAAS,CACxBhJ,OAAQ,wFAAwFK,MAC5F,KAEJN,YAAa,kDAAkDM,MAAM,KACrEkD,SAAU,2DAA2DlD,MACjE,KAEJiD,cAAe,8BAA8BjD,MAAM,KACnDgD,YAAa,uBAAuBhD,MAAM,KAC1CxF,eAAgB,CACZ2L,GAAI,QACJD,IAAK,WACLE,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,2BAEVZ,SAAU,CACNC,QAAS,gBACTC,QAAS,mBACTC,SAAU,eACVC,QAAS,oBACTC,SAAU,sBACVC,SAAU,KAEdQ,aAAc,CACVC,OAAQ,QACRC,KAAM,SACNnI,EAAG,gBACHoI,GAAI,aACJpT,EAAG,WACHqT,GAAI,aACJC,EAAG,UACHC,GAAI,WACJxD,EAAG,QACHyD,GAAI,UACJG,EAAG,UACHC,GAAI,YACJhG,EAAG,SACHiG,GAAI,YAERb,uBAAwB,uBACxB9M,QAAS,SAAUjB,GACf,IAAI3G,EAAI2G,EAAS,GAWjB,OAAOA,GAT6B,MAAxBA,EAAS,IAAO,IACd,KACM,GAAN3G,EACA,KACM,GAANA,EACA,KACM,GAANA,EACA,KACA,OAGlBoQ,KAAM,CACFL,IAAK,EACLC,IAAK,KAMb7Q,EAAM0X,aAAa,KAAM,CACrBhJ,OAAQ,kGAA6FK,MACjG,KAEJN,YAAa,yDAAoDM,MAAM,KACvEkD,SAAU,oEAAqDlD,MAAM,KACrEiD,cAAe,0CAAgCjD,MAAM,KACrDgD,YAAa,4BAAuBhD,MAAM,KAC1CxF,eAAgB,CACZ2L,GAAI,QACJD,IAAK,WACLE,EAAG,aACHC,GAAI,4BACJC,IAAK,kCACLC,KAAM,2CACNyiB,KAAM,uCAEV1hB,cAAe,cACfnC,KAAM,SAAU9T,GACZ,MAAyC,MAAlCA,EAAMiuB,OAAO,GAAGtkB,eAE3BzG,SAAU,SAAUoQ,EAAOE,EAAS0a,GAChC,OAAY,GAAR5a,EACO4a,EAAU,SAAW,SAErBA,EAAU,SAAW,UAGpC5Z,SAAU,CACNC,QAAS,sBACTC,QAAS,sBACTC,SAAU,gBACVC,QAAS,sBACTC,SAAU,2BACVC,SAAU,KAEdQ,aAAc,CACVC,OAAQ,UACRC,KAAM,gBACNnI,EAAG,kBACHoI,GAAI,cACJpT,EAAG,aACHqT,GAAI,aACJC,EAAG,WACHC,GAAI,WACJxD,EAAG,WACHyD,GAAI,WACJG,EAAG,aACHC,GAAI,aACJhG,EAAG,WACHiG,GAAI,YAERb,uBAAwB,WACxB9M,QAAS,MACTwI,KAAM,CACFL,IAAK,EACLC,IAAK,KAMb,IAAImoB,GAAiB,8DAA8DjqB,MAC3E,KAEJkqB,GAAgB,kDAAkDlqB,MAAM,KACxEmqB,GAAgB,CACZ,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,SAEJC,GAAgB,mLAEpBn5B,EAAM0X,aAAa,QAAS,CACxBhJ,OAAQ,2FAA2FK,MAC/F,KAEJN,YAAa,SAAUlM,EAAGN,GACtB,OAAKM,EAEM,QAAQkH,KAAKxH,GACbg3B,GAAc12B,EAAEgJ,SAEhBytB,GAAez2B,EAAEgJ,SAJjBytB,IAOfpqB,YAAauqB,GACbxqB,iBAAkBwqB,GAClB3B,kBAAmB,+FACnBC,uBAAwB,0FACxB5oB,YAAaqqB,GACbxB,gBAAiBwB,GACjBvB,iBAAkBuB,GAClBjnB,SAAU,6DAAuDlD,MAAM,KACvEiD,cAAe,2CAAqCjD,MAAM,KAC1DgD,YAAa,0BAAuBhD,MAAM,KAC1CojB,oBAAoB,EACpB5oB,eAAgB,CACZ2L,GAAI,SACJD,IAAK,YACLE,EAAG,aACHC,GAAI,wBACJC,IAAK,+BACLC,KAAM,sCAEVZ,SAAU,CACNC,QAAS,WACL,MAAO,aAAgC,IAAjB9U,KAAK6T,QAAgB,IAAM,IAAM,QAE3DkB,QAAS,WACL,MAAO,mBAAmC,IAAjB/U,KAAK6T,QAAgB,IAAM,IAAM,QAE9DmB,SAAU,WACN,MAAO,cAAiC,IAAjBhV,KAAK6T,QAAgB,IAAM,IAAM,QAE5DoB,QAAS,WACL,MAAO,cAAiC,IAAjBjV,KAAK6T,QAAgB,IAAM,IAAM,QAE5DqB,SAAU,WACN,MACI,0BACkB,IAAjBlV,KAAK6T,QAAgB,IAAM,IAC5B,QAGRsB,SAAU,KAEdQ,aAAc,CACVC,OAAQ,QACRC,KAAM,UACNnI,EAAG,gBACHoI,GAAI,cACJpT,EAAG,YACHqT,GAAI,aACJC,EAAG,WACHC,GAAI,WACJxD,EAAG,YACHyD,GAAI,aACJG,EAAG,SACHC,GAAI,WACJhG,EAAG,YACHiG,GAAI,cAERb,uBAAwB,cACxB9M,QAAS,SACTwI,KAAM,CACFL,IAAK,EACLC,IAAK,KAMb,IAAIuoB,GAAmB,8DAA8DrqB,MAC7E,KAEJsqB,GAAgB,kDAAkDtqB,MAAM,KACxEuqB,GAAgB,CACZ,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,SAEJC,GAAgB,mLAEpBv5B,EAAM0X,aAAa,QAAS,CACxBhJ,OAAQ,2FAA2FK,MAC/F,KAEJN,YAAa,SAAUlM,EAAGN,GACtB,OAAKM,EAEM,QAAQkH,KAAKxH,GACbo3B,GAAc92B,EAAEgJ,SAEhB6tB,GAAiB72B,EAAEgJ,SAJnB6tB,IAOfxqB,YAAa2qB,GACb5qB,iBAAkB4qB,GAClB/B,kBAAmB,+FACnBC,uBAAwB,0FACxB5oB,YAAayqB,GACb5B,gBAAiB4B,GACjB3B,iBAAkB2B,GAClBrnB,SAAU,6DAAuDlD,MAAM,KACvEiD,cAAe,2CAAqCjD,MAAM,KAC1DgD,YAAa,0BAAuBhD,MAAM,KAC1CojB,oBAAoB,EACpB5oB,eAAgB,CACZ2L,GAAI,SACJD,IAAK,YACLE,EAAG,aACHC,GAAI,wBACJC,IAAK,+BACLC,KAAM,sCAEVZ,SAAU,CACNC,QAAS,WACL,MAAO,aAAgC,IAAjB9U,KAAK6T,QAAgB,IAAM,IAAM,QAE3DkB,QAAS,WACL,MAAO,mBAAmC,IAAjB/U,KAAK6T,QAAgB,IAAM,IAAM,QAE9DmB,SAAU,WACN,MAAO,cAAiC,IAAjBhV,KAAK6T,QAAgB,IAAM,IAAM,QAE5DoB,QAAS,WACL,MAAO,cAAiC,IAAjBjV,KAAK6T,QAAgB,IAAM,IAAM,QAE5DqB,SAAU,WACN,MACI,0BACkB,IAAjBlV,KAAK6T,QAAgB,IAAM,IAC5B,QAGRsB,SAAU,KAEdQ,aAAc,CACVC,OAAQ,QACRC,KAAM,UACNnI,EAAG,gBACHoI,GAAI,cACJpT,EAAG,YACHqT,GAAI,aACJC,EAAG,WACHC,GAAI,WACJxD,EAAG,YACHyD,GAAI,aACJG,EAAG,SACHC,GAAI,WACJhG,EAAG,YACHiG,GAAI,cAERb,uBAAwB,cACxB9M,QAAS,SACTwI,KAAM,CACFL,IAAK,EACLC,IAAK,KAMb,IAAI2oB,GAAmB,8DAA8DzqB,MAC7E,KAEJ0qB,GAAgB,kDAAkD1qB,MAAM,KACxE2qB,GAAgB,CACZ,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,SAEJC,GAAgB,mLAmFpB,SAASC,GAAsBpyB,EAAQ+f,EAAejhB,EAAKomB,GACvD,IAAIzqB,EAAS,CACTsL,EAAG,CAAC,kBAAgB,iBAAe,iBACnCoI,GAAI,CAACnO,EAAS,UAAWA,EAAS,YAClCjF,EAAG,CAAC,gBAAc,gBAClBqT,GAAI,CAACpO,EAAS,UAAWA,EAAS,YAClCqO,EAAG,CAAC,eAAa,YAAa,eAC9BC,GAAI,CAACtO,EAAS,SAAUA,EAAS,UACjC8K,EAAG,CAAC,kBAAa,kBACjB4D,EAAG,CAAC,UAAW,WAAY,cAC3BC,GAAI,CAAC3O,EAAS,OAAQA,EAAS,SAC/B2I,EAAG,CAAC,eAAa,QAAS,gBAC1BiG,GAAI,CAAC5O,EAAS,SAAUA,EAAS,YAErC,OAAI+f,EACOtlB,EAAOqE,GAAK,GAAKrE,EAAOqE,GAAK,GAAKrE,EAAOqE,GAAK,GAElDomB,EAAWzqB,EAAOqE,GAAK,GAAKrE,EAAOqE,GAAK,GAlGnDtG,EAAM0X,aAAa,KAAM,CACrBhJ,OAAQ,2FAA2FK,MAC/F,KAEJN,YAAa,SAAUlM,EAAGN,GACtB,OAAKM,EAEM,QAAQkH,KAAKxH,GACbw3B,GAAcl3B,EAAEgJ,SAEhBiuB,GAAiBj3B,EAAEgJ,SAJnBiuB,IAOf5qB,YAAa+qB,GACbhrB,iBAAkBgrB,GAClBnC,kBAAmB,+FACnBC,uBAAwB,0FACxB5oB,YAAa6qB,GACbhC,gBAAiBgC,GACjB/B,iBAAkB+B,GAClBznB,SAAU,6DAAuDlD,MAAM,KACvEiD,cAAe,2CAAqCjD,MAAM,KAC1DgD,YAAa,0BAAuBhD,MAAM,KAC1CojB,oBAAoB,EACpB5oB,eAAgB,CACZ2L,GAAI,OACJD,IAAK,UACLE,EAAG,aACHC,GAAI,wBACJC,IAAK,6BACLC,KAAM,oCAEVZ,SAAU,CACNC,QAAS,WACL,MAAO,aAAgC,IAAjB9U,KAAK6T,QAAgB,IAAM,IAAM,QAE3DkB,QAAS,WACL,MAAO,mBAAmC,IAAjB/U,KAAK6T,QAAgB,IAAM,IAAM,QAE9DmB,SAAU,WACN,MAAO,cAAiC,IAAjBhV,KAAK6T,QAAgB,IAAM,IAAM,QAE5DoB,QAAS,WACL,MAAO,cAAiC,IAAjBjV,KAAK6T,QAAgB,IAAM,IAAM,QAE5DqB,SAAU,WACN,MACI,0BACkB,IAAjBlV,KAAK6T,QAAgB,IAAM,IAC5B,QAGRsB,SAAU,KAEdQ,aAAc,CACVC,OAAQ,QACRC,KAAM,UACNnI,EAAG,gBACHoI,GAAI,cACJpT,EAAG,YACHqT,GAAI,aACJC,EAAG,WACHC,GAAI,WACJxD,EAAG,YACHyD,GAAI,aACJG,EAAG,SACHC,GAAI,WACJhG,EAAG,YACHiG,GAAI,cAERb,uBAAwB,cACxB9M,QAAS,SACTwI,KAAM,CACFL,IAAK,EACLC,IAAK,GAETxH,YAAa,sBAyBjBrJ,EAAM0X,aAAa,KAAM,CACrBhJ,OAAQ,gGAA6FK,MACjG,KAEJN,YAAa,gEAA6DM,MACtE,KAEJkD,SAAU,sFAAiElD,MACvE,KAEJiD,cAAe,gBAAgBjD,MAAM,KACrCgD,YAAa,gBAAgBhD,MAAM,KACnCxF,eAAgB,CACZ2L,GAAI,OACJD,IAAK,UACLE,EAAG,aACHC,GAAI,eACJC,IAAK,oBACLC,KAAM,2BAEVZ,SAAU,CACNC,QAAS,gBACTC,QAAS,cACTC,SAAU,wBACVC,QAAS,aACTC,SAAU,oBACVC,SAAU,KAEdQ,aAAc,CACVC,OAAQ,eACRC,KAAM,YACNnI,EAAGqsB,GACHjkB,GAAIikB,GACJr3B,EAAGq3B,GACHhkB,GAAIgkB,GACJ/jB,EAAG+jB,GACH9jB,GAAI8jB,GACJtnB,EAAGsnB,GACH7jB,GAAI,cACJG,EAAG0jB,GACHzjB,GAAIyjB,GACJzpB,EAAGypB,GACHxjB,GAAIwjB,IAERrkB,uBAAwB,YACxB9M,QAAS,MACTwI,KAAM,CACFL,IAAK,EACLC,IAAK,KAMb7Q,EAAM0X,aAAa,KAAM,CACrBhJ,OAAQ,+FAA+FK,MACnG,KAEJN,YAAa,8DAA8DM,MACvE,KAEJmoB,kBAAkB,EAClBjlB,SAAU,sEAAsElD,MAC5E,KAEJiD,cAAe,8BAA8BjD,MAAM,KACnDgD,YAAa,uBAAuBhD,MAAM,KAC1CojB,oBAAoB,EACpB5oB,eAAgB,CACZ2L,GAAI,QACJD,IAAK,WACLE,EAAG,aACHC,GAAI,0BACJC,IAAK,gCACLC,KAAM,sCACNgE,EAAG,WACHue,GAAI,oBACJC,IAAK,0BACLC,KAAM,gCAEVrjB,SAAU,CACNC,QAAS,kBACTC,QAAS,mBACTC,SAAU,gBACVC,QAAS,kBACTC,SAAU,0BACVC,SAAU,KAEdQ,aAAc,CACVC,OAAQ,WACRC,KAAM,WACNnI,EAAG,iBACHoI,GAAI,aACJpT,EAAG,aACHqT,GAAI,YACJC,EAAG,WACHC,GAAI,UACJxD,EAAG,WACHyD,GAAI,UACJG,EAAG,eACHC,GAAI,cACJhG,EAAG,WACHiG,GAAI,WAERb,uBAAwB,YACxB9M,QAAS,MACTwI,KAAM,CACFL,IAAK,EACLC,IAAK,KAMb,IAAIgpB,GAAc,CACVrH,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,UAET6G,GAAc,CACVC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,KAGbx6B,EAAM0X,aAAa,KAAM,CACrBhJ,OAAQ,0WAAwEK,MAC5E,KAEJN,YAAa,0WAAwEM,MACjF,KAEJkD,SAAU,iRAAoElD,MAC1E,KAEJiD,cAAe,iRAAoEjD,MAC/E,KAEJgD,YAAa,mDAAgBhD,MAAM,KACnCojB,oBAAoB,EACpB5oB,eAAgB,CACZ2L,GAAI,QACJD,IAAK,WACLE,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,2BAEVe,cAAe,wGACfnC,KAAM,SAAU9T,GACZ,MAAO,qDAAaqJ,KAAKrJ,IAE7BkD,SAAU,SAAU+Z,EAAMkB,EAAQ+P,GAC9B,OAAIjR,EAAO,GACA,qDAEA,sDAGf3I,SAAU,CACNC,QAAS,+DACTC,QAAS,yDACTC,SAAU,qCACVC,QAAS,+DACTC,SAAU,0DACVC,SAAU,KAEdQ,aAAc,CACVC,OAAQ,kBACRC,KAAM,wBACNnI,EAAG,oDACHoI,GAAI,oCACJpT,EAAG,8CACHqT,GAAI,oCACJC,EAAG,wCACHC,GAAI,8BACJxD,EAAG,kCACHyD,GAAI,wBACJG,EAAG,kCACHC,GAAI,wBACJhG,EAAG,kCACHiG,GAAI,yBAERuH,SAAU,SAAUhE,GAChB,OAAOA,EACF1Q,QAAQ,mBAAU,SAAUD,GACzB,OAAO8wB,GAAY9wB,KAEtBC,QAAQ,UAAM,MAEvBqe,WAAY,SAAU3N,GAClB,OAAOA,EACF1Q,QAAQ,MAAO,SAAUD,GACtB,OAAO6wB,GAAY7wB,KAEtBC,QAAQ,KAAM,WAEvBsM,uBAAwB,gBACxB9M,QAAS,WACTwI,KAAM,CACFL,IAAK,EACLC,IAAK,MAMb,IAAI4pB,GAAc,iFAAwE1rB,MAClF,KAEJ2rB,GAAgB,CACZ,QACA,QACA,SACA,SACA,YACA,SACA,SACAD,GAAY,GACZA,GAAY,GACZA,GAAY,IAEpB,SAASE,GAAYnzB,EAAQ+f,EAAejhB,EAAKomB,GAC7C,IAoCkBllB,EAAQklB,EApCtBrS,EAAS,GACb,OAAQ/T,GACJ,IAAK,IACD,OAAOomB,EAAW,oBAAsB,kBAC5C,IAAK,KACDrS,EAASqS,EAAW,WAAa,WACjC,MACJ,IAAK,IACD,OAAOA,EAAW,WAAa,WACnC,IAAK,KACDrS,EAASqS,EAAW,WAAa,YACjC,MACJ,IAAK,IACD,OAAOA,EAAW,SAAW,QACjC,IAAK,KACDrS,EAASqS,EAAW,SAAW,SAC/B,MACJ,IAAK,IACD,OAAOA,EAAW,eAAW,cACjC,IAAK,KACDrS,EAASqS,EAAW,eAAW,kBAC/B,MACJ,IAAK,IACD,OAAOA,EAAW,YAAc,WACpC,IAAK,KACDrS,EAASqS,EAAW,YAAc,YAClC,MACJ,IAAK,IACD,OAAOA,EAAW,SAAW,QACjC,IAAK,KACDrS,EAASqS,EAAW,SAAW,SAC/B,MAGR,OAE0BA,EAHIA,EAA9BrS,IAGkB7S,EAHIA,GAIN,GACVklB,EACIgO,GAAclzB,GACdizB,GAAYjzB,GAChBA,GARoC,IAAM6S,EAWpDra,EAAM0X,aAAa,KAAM,CACrBhJ,OAAQ,iHAA2GK,MAC/G,KAEJN,YAAa,6EAAuEM,MAChF,KAEJkD,SAAU,qEAAqElD,MAC3E,KAEJiD,cAAe,uBAAuBjD,MAAM,KAC5CgD,YAAa,uBAAuBhD,MAAM,KAC1CxF,eAAgB,CACZ2L,GAAI,QACJD,IAAK,WACLE,EAAG,aACHC,GAAI,mBACJC,IAAK,gCACLC,KAAM,sCACNgE,EAAG,WACHue,GAAI,cACJC,IAAK,2BACLC,KAAM,iCAEVrjB,SAAU,CACNC,QAAS,6BACTC,QAAS,sBACTC,SAAU,gBACVC,QAAS,mBACTC,SAAU,4BACVC,SAAU,KAEdQ,aAAc,CACVC,OAAQ,qBACRC,KAAM,YACNnI,EAAGotB,GACHhlB,GAAIglB,GACJp4B,EAAGo4B,GACH/kB,GAAI+kB,GACJ9kB,EAAG8kB,GACH7kB,GAAI6kB,GACJroB,EAAGqoB,GACH5kB,GAAI4kB,GACJzkB,EAAGykB,GACHxkB,GAAIwkB,GACJxqB,EAAGwqB,GACHvkB,GAAIukB,IAERplB,uBAAwB,YACxB9M,QAAS,MACTwI,KAAM,CACFL,IAAK,EACLC,IAAK,KAMb7Q,EAAM0X,aAAa,MAAO,CACtBhJ,OAAQ,0FAA0FK,MAC9F,KAEJN,YAAa,kDAAkDM,MAAM,KACrEkD,SAAU,yDAAyDlD,MAC/D,KAEJiD,cAAe,8BAA8BjD,MAAM,KACnDgD,YAAa,wBAAwBhD,MAAM,KAC3CxF,eAAgB,CACZ2L,GAAI,QACJD,IAAK,WACLE,EAAG,YACHC,GAAI,eACJC,IAAK,qBACLC,KAAM,6BAEVZ,SAAU,CACNC,QAAS,oBACTC,QAAS,gBACTC,SAAU,0BACVC,QAAS,eACTC,SAAU,4BACVC,SAAU,KAEdQ,aAAc,CACVC,OAAQ,gBACRC,KAAM,mBACNnI,EAAG,gBACHoI,GAAI,aACJpT,EAAG,eACHqT,GAAI,YACJC,EAAG,aACHC,GAAI,UACJxD,EAAG,aACHyD,GAAI,UACJG,EAAG,cACHC,GAAI,WACJhG,EAAG,aACHiG,GAAI,WAERb,uBAAwB,UACxB9M,QAAS,SAAUjB,GACf,OAAOA,GAEXyJ,KAAM,CACFL,IAAK,EACLC,IAAK,KAMb7Q,EAAM0X,aAAa,KAAM,CACrBhJ,OAAQ,wFAAqFK,MACzF,KAEJN,YAAa,kDAAkDM,MAAM,KACrEkD,SAAU,wFAA4ElD,MAClF,KAEJiD,cAAe,0CAA8BjD,MAAM,KACnDgD,YAAa,gCAAuBhD,MAAM,KAC1CxF,eAAgB,CACZ2L,GAAI,QACJD,IAAK,WACLE,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,4BAEVZ,SAAU,CACNC,QAAS,oBACTC,QAAS,uBACTC,SAAU,gBACVC,QAAS,wBACTC,SAAU,8BACVC,SAAU,KAEdQ,aAAc,CACVC,OAAQ,QACRC,KAAM,kBACNnI,EAAG,eACHoI,GAAI,cACJpT,EAAG,eACHqT,GAAI,cACJC,EAAG,cACHC,GAAI,cACJxD,EAAG,YACHyD,GAAI,WACJG,EAAG,oBACHC,GAAI,mBACJhG,EAAG,aACHiG,GAAI,YAERb,uBAAwB,YACxB9M,QAAS,MACTwI,KAAM,CACFL,IAAK,EACLC,IAAK,KAMb7Q,EAAM0X,aAAa,QAAS,CACxBhJ,OAAQ,gGAAuFK,MAC3F,KAEJN,YAAa,0EAAiEM,MAC1E,KAEJmoB,kBAAkB,EAClBjlB,SAAU,sDAAsDlD,MAAM,KACtEiD,cAAe,qCAAqCjD,MAAM,KAC1DgD,YAAa,uBAAuBhD,MAAM,KAC1CojB,oBAAoB,EACpB5oB,eAAgB,CACZ2L,GAAI,QACJD,IAAK,WACLE,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,0BAEVZ,SAAU,CACNC,QAAS,6BACTC,QAAS,mBACTC,SAAU,iBACVC,QAAS,iBACTC,SAAU,yBACVC,SAAU,KAEdQ,aAAc,CACVC,OAAQ,UACRC,KAAM,YACNnI,EAAG,oBACHoI,GAAI,cACJpT,EAAG,aACHqT,GAAI,aACJC,EAAG,YACHC,GAAI,YACJxD,EAAG,UACHyD,GAAI,WACJG,EAAG,UACHC,GAAI,UACJhG,EAAG,QACHiG,GAAI,UAERb,uBAAwB,gBACxB9M,QAAS,SAAUjB,EAAQ+a,GACvB,OAAQA,GAEJ,QACA,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,MACL,IAAK,IACD,OAAO/a,GAAqB,IAAXA,EAAe,KAAO,KAG3C,IAAK,IACL,IAAK,IACD,OAAOA,GAAqB,IAAXA,EAAe,KAAO,SAOvDxH,EAAM0X,aAAa,QAAS,CACxBhJ,OAAQ,gGAAuFK,MAC3F,KAEJN,YAAa,0EAAiEM,MAC1E,KAEJmoB,kBAAkB,EAClBjlB,SAAU,sDAAsDlD,MAAM,KACtEiD,cAAe,qCAAqCjD,MAAM,KAC1DgD,YAAa,uBAAuBhD,MAAM,KAC1CojB,oBAAoB,EACpB5oB,eAAgB,CACZ2L,GAAI,QACJD,IAAK,WACLE,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,0BAEVZ,SAAU,CACNC,QAAS,6BACTC,QAAS,mBACTC,SAAU,iBACVC,QAAS,iBACTC,SAAU,yBACVC,SAAU,KAEdQ,aAAc,CACVC,OAAQ,UACRC,KAAM,YACNnI,EAAG,oBACHoI,GAAI,cACJpT,EAAG,aACHqT,GAAI,aACJC,EAAG,YACHC,GAAI,YACJxD,EAAG,UACHyD,GAAI,WACJG,EAAG,UACHC,GAAI,UACJhG,EAAG,QACHiG,GAAI,UAERb,uBAAwB,gBACxB9M,QAAS,SAAUjB,EAAQ+a,GACvB,OAAQA,GAEJ,QACA,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,MACL,IAAK,IACD,OAAO/a,GAAqB,IAAXA,EAAe,KAAO,KAG3C,IAAK,IACL,IAAK,IACD,OAAOA,GAAqB,IAAXA,EAAe,KAAO,OAGnDyJ,KAAM,CACFL,IAAK,EACLC,IAAK,KAMb,IAEI+pB,GAAgB,2LAChBC,GAAgB,CACZ,SACA,YACA,SACA,QACA,QACA,SACA,SACA,YACA,SACA,QACA,QACA,YAGR76B,EAAM0X,aAAa,KAAM,CACrBhJ,OAAQ,gGAAuFK,MAC3F,KAEJN,YAAa,0EAAiEM,MAC1E,KAEJH,YAAagsB,GACbjsB,iBAAkBisB,GAClBpD,kBA3BsB,oGA4BtBC,uBA3B2B,6FA4B3B5oB,YAAagsB,GACbnD,gBAAiBmD,GACjBlD,iBAAkBkD,GAClB5oB,SAAU,sDAAsDlD,MAAM,KACtEiD,cAAe,qCAAqCjD,MAAM,KAC1DgD,YAAa,uBAAuBhD,MAAM,KAC1CojB,oBAAoB,EACpB5oB,eAAgB,CACZ2L,GAAI,QACJD,IAAK,WACLE,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,0BAEVZ,SAAU,CACNC,QAAS,6BACTC,QAAS,mBACTC,SAAU,iBACVC,QAAS,iBACTC,SAAU,yBACVC,SAAU,KAEdQ,aAAc,CACVC,OAAQ,UACRC,KAAM,YACNnI,EAAG,oBACHoI,GAAI,cACJpT,EAAG,aACHqT,GAAI,aACJC,EAAG,YACHC,GAAI,YACJxD,EAAG,UACHyD,GAAI,WACJG,EAAG,UACHC,GAAI,UACJhG,EAAG,QACHiG,GAAI,UAERb,uBAAwB,eACxB9M,QAAS,SAAUjB,EAAQ+a,GACvB,OAAQA,GAIJ,IAAK,IACD,OAAO/a,GAAqB,IAAXA,EAAe,KAAO,IAG3C,QACA,IAAK,IACL,IAAK,IACL,IAAK,MACL,IAAK,IACD,OAAOA,GAAqB,IAAXA,EAAe,KAAO,KAG3C,IAAK,IACL,IAAK,IACD,OAAOA,GAAqB,IAAXA,EAAe,KAAO,OAGnDyJ,KAAM,CACFL,IAAK,EACLC,IAAK,KAMb,IAAIiqB,GAAsB,6DAA6D/rB,MAC/E,KAEJgsB,GAAyB,kDAAkDhsB,MACvE,KAGR/O,EAAM0X,aAAa,KAAM,CACrBhJ,OAAQ,iGAAiGK,MACrG,KAEJN,YAAa,SAAUlM,EAAGN,GACtB,OAAKM,EAEM,QAAQkH,KAAKxH,GACb84B,GAAuBx4B,EAAEgJ,SAEzBuvB,GAAoBv4B,EAAEgJ,SAJtBuvB,IAOf5D,kBAAkB,EAClBjlB,SAAU,wDAAwDlD,MAC9D,KAEJiD,cAAe,8BAA8BjD,MAAM,KACnDgD,YAAa,uBAAuBhD,MAAM,KAC1CojB,oBAAoB,EACpB5oB,eAAgB,CACZ2L,GAAI,QACJD,IAAK,WACLE,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,0BAEVZ,SAAU,CACNC,QAAS,gBACTC,QAAS,gBACTC,SAAU,eACVC,QAAS,iBACTC,SAAU,8BACVC,SAAU,KAEdQ,aAAc,CACVC,OAAQ,SACRC,KAAM,SACNnI,EAAG,mBACHoI,GAAI,cACJpT,EAAG,eACHqT,GAAI,aACJC,EAAG,WACHC,GAAI,WACJxD,EAAG,UACHyD,GAAI,WACJG,EAAG,aACHC,GAAI,aACJhG,EAAG,WACHiG,GAAI,cAERb,uBAAwB,kBACxB9M,QAAS,SAAUjB,GACf,OACIA,GACY,IAAXA,GAA2B,IAAXA,GAA0B,IAAVA,EAAe,MAAQ,OAGhEyJ,KAAM,CACFL,IAAK,EACLC,IAAK,KA8Cb7Q,EAAM0X,aAAa,KAAM,CACrBhJ,OAzCW,CACP,YACA,UACA,WACA,aACA,YACA,YACA,UACA,YACA,qBACA,sBACA,UACA,WA8BJD,YA5BgB,CACZ,MACA,QACA,UACA,MACA,OACA,QACA,UACA,SACA,OACA,OACA,OACA,QAiBJyoB,kBAAkB,EAClBjlB,SAhBa,CACT,kBACA,cACA,iBACA,oBACA,eACA,eACA,kBAUJD,cARgB,CAAC,OAAQ,OAAQ,WAAS,UAAQ,UAAQ,QAAS,QASnED,YARc,CAAC,KAAM,KAAM,QAAM,QAAM,QAAM,IAAK,MASlDxI,eAAgB,CACZ2L,GAAI,QACJD,IAAK,WACLE,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,2BAEVZ,SAAU,CACNC,QAAS,gBACTC,QAAS,qBACTC,SAAU,eACVC,QAAS,kBACTC,SAAU,2BACVC,SAAU,KAEdQ,aAAc,CACVC,OAAQ,OACRC,KAAM,eACNnI,EAAG,mBACHoI,GAAI,aACJpT,EAAG,gBACHqT,GAAI,mBACJC,EAAG,iBACHC,GAAI,oBACJxD,EAAG,QACHyD,GAAI,WACJG,EAAG,QACHC,GAAI,eACJhG,EAAG,SACHiG,GAAI,aAERb,uBAAwB,mBACxB9M,QAAS,SAAUjB,GAEf,OAAOA,GADiB,IAAXA,EAAe,IAAMA,EAAS,IAAO,EAAI,KAAO,OAGjEyJ,KAAM,CACFL,IAAK,EACLC,IAAK,KAyKb,SAASmqB,GAAsBxzB,EAAQ+f,EAAejhB,EAAKomB,GACvD,IAAIzqB,EAAS,CACTsL,EAAG,CAAC,wFAAmB,2DACvBoI,GAAI,CAACnO,EAAS,0DAAcA,EAAS,mCACrCjF,EAAG,CAAC,0DAAc,+CAClBqT,GAAI,CAACpO,EAAS,oDAAaA,EAAS,yCACpCqO,EAAG,CAAC,8CAAY,6BAChBC,GAAI,CAACtO,EAAS,wCAAWA,EAAS,6BAClC8K,EAAG,CAAC,oDAAa,mCACjByD,GAAI,CAACvO,EAAS,8CAAYA,EAAS,uBACnC0O,EAAG,CAAC,4EAAiB,qDACrBC,GAAI,CAAC3O,EAAS,gEAAeA,EAAS,yCACtC2I,EAAG,CAAC,0DAAc,yCAClBiG,GAAI,CAAC5O,EAAS,oDAAaA,EAAS,0CAExC,OAAOklB,EAAWzqB,EAAOqE,GAAK,GAAKrE,EAAOqE,GAAK,GA0GnD,SAAS20B,GAAsBzzB,EAAQ+f,EAAejhB,EAAKomB,GACvD,IAAIzqB,EAAS,CACTsL,EAAG,CAAC,qBAAsB,iBAC1BoI,GAAI,CAACnO,EAAS,cAAeA,EAAS,WACtCjF,EAAG,CAAC,aAAc,YAClBqT,GAAI,CAACpO,EAAS,YAAaA,EAAS,WACpCqO,EAAG,CAAC,YAAa,UACjBC,GAAI,CAACtO,EAAS,WAAYA,EAAS,UACnC8K,EAAG,CAAC,YAAa,UACjByD,GAAI,CAACvO,EAAS,WAAYA,EAAS,QACnC0O,EAAG,CAAC,eAAgB,aACpBC,GAAI,CAAC3O,EAAS,cAAeA,EAAS,WACtC2I,EAAG,CAAC,aAAc,YAClBiG,GAAI,CAAC5O,EAAS,YAAaA,EAAS,YAExC,OAAOklB,EAAWzqB,EAAOqE,GAAK,GAAKrE,EAAOqE,GAAK,GAnQnDtG,EAAM0X,aAAa,KAAM,CACrBhJ,OAzCW,CACP,gBACA,aACA,aACA,aACA,gBACA,kBACA,cACA,iBACA,eACA,gBACA,eACA,mBA8BJD,YA5BgB,CACZ,OACA,OACA,UACA,OACA,UACA,UACA,OACA,SACA,OACA,UACA,OACA,WAiBJyoB,kBAAkB,EAClBjlB,SAhBa,CACT,iBACA,UACA,aACA,YACA,YACA,WACA,eAUJD,cARkB,CAAC,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,OAS7DD,YARgB,CAAC,QAAM,KAAM,QAAM,KAAM,KAAM,KAAM,MASrDxI,eAAgB,CACZ2L,GAAI,QACJD,IAAK,WACLE,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,2BAEVZ,SAAU,CACNC,QAAS,oBACTC,QAAS,yBACTC,SAAU,gBACVC,QAAS,oBACTC,SAAU,6BACVC,SAAU,KAEdQ,aAAc,CACVC,OAAQ,YACRC,KAAM,gBACNnI,EAAG,gBACHoI,GAAI,YACJpT,EAAG,UACHqT,GAAI,gBACJC,EAAG,OACHC,GAAI,aACJxD,EAAG,QACHyD,GAAI,WACJG,EAAG,UACHC,GAAI,eACJhG,EAAG,WACHiG,GAAI,eAERb,uBAAwB,mBACxB9M,QAAS,SAAUjB,GAEf,OAAOA,GADiB,IAAXA,EAAe,IAAMA,EAAS,IAAO,EAAI,KAAO,OAGjEyJ,KAAM,CACFL,IAAK,EACLC,IAAK,KAMb7Q,EAAM0X,aAAa,KAAM,CACrBhJ,OAAQ,4FAAyFK,MAC7F,KAEJN,YAAa,iEAA8DM,MACvE,KAEJmoB,kBAAkB,EAClBjlB,SAAU,yDAAmDlD,MAAM,KACnEiD,cAAe,2CAAqCjD,MAAM,KAC1DgD,YAAa,6BAAuBhD,MAAM,KAC1CojB,oBAAoB,EACpB5oB,eAAgB,CACZ2L,GAAI,OACJD,IAAK,UACLE,EAAG,aACHC,GAAI,wBACJC,IAAK,6BACLC,KAAM,oCAEVZ,SAAU,CACNC,QAAS,WACL,MAAO,UAA6B,IAAjB9U,KAAK6T,QAAgB,QAAO,QAAO,QAE1DkB,QAAS,WACL,MAAO,gBAA6B,IAAjB/U,KAAK6T,QAAgB,QAAO,QAAO,QAE1DmB,SAAU,WACN,MAAO,UAA6B,IAAjBhV,KAAK6T,QAAgB,QAAO,KAAO,QAE1DoB,QAAS,WACL,MAAO,UAA6B,IAAjBjV,KAAK6T,QAAgB,OAAM,KAAO,QAEzDqB,SAAU,WACN,MACI,qBAAwC,IAAjBlV,KAAK6T,QAAgB,QAAO,KAAO,QAGlEsB,SAAU,KAEdQ,aAAc,CACVC,OAAQ,SAAUuc,GACd,OAA0B,IAAtBA,EAAIpkB,QAAQ,MACL,IAAMokB,EAEV,MAAQA,GAEnBtc,KAAM,SACNnI,EAAG,eACHoI,GAAI,cACJpT,EAAG,YACHqT,GAAI,aACJC,EAAG,YACHC,GAAI,WACJxD,EAAG,YACHyD,GAAI,aACJG,EAAG,SACHC,GAAI,WACJhG,EAAG,SACHiG,GAAI,WAERb,uBAAwB,cACxB9M,QAAS,SACTwI,KAAM,CACFL,IAAK,EACLC,IAAK,KAwBb7Q,EAAM0X,aAAa,WAAY,CAC3BhJ,OAAQ,CACJwmB,WAAY,0cAAwFnmB,MAChG,KAEJ9M,OAAQ,4yBAAmJ8M,MACvJ,KAEJie,SAAU,mBAEdve,YAAa,qVAA4EM,MACrF,KAEJmoB,kBAAkB,EAClBjlB,SAAU,iRAAqDlD,MAAM,KACrEiD,cAAe,wLAA4CjD,MAAM,KACjEgD,YAAa,mGAAwBhD,MAAM,KAC3CojB,oBAAoB,EACpB5oB,eAAgB,CACZ2L,GAAI,gDACJD,IAAK,mDACLE,EAAG,aACHC,GAAI,cACJC,IAAK,4DACLC,KAAM,qEACNyiB,KAAM,kEAEVrjB,SAAU,CACNC,QAAS,0BACTC,QAAS,kDACTC,SAAU,8CACVC,QAAS,0BACTC,SAAU,8CACVC,SAAU,KAEdQ,aAAc,CACVC,OAAQ,KACRC,KAAM,8BACNnI,EAAGytB,GACHrlB,GAAIqlB,GACJz4B,EAAGy4B,GACHplB,GAAIolB,GACJnlB,EAAGmlB,GACHllB,GAAIklB,GACJ1oB,EAAG0oB,GACHjlB,GAAIilB,GACJ9kB,EAAG8kB,GACH7kB,GAAI6kB,GACJ7qB,EAAG6qB,GACH5kB,GAAI4kB,IAERzlB,uBAAwB,8BACxB9M,QAAS,SAAUjB,EAAQ+a,GACvB,OAAQA,GAEJ,IAAK,IACD,OAAO/a,EAAS,qBACpB,QACA,IAAK,IACL,IAAK,IACL,IAAK,MACL,IAAK,IACL,IAAK,IACL,IAAK,IACD,OAAOA,IAGnByJ,KAAM,CACFL,IAAK,EACLC,IAAK,GAETwF,cAAe,0IACfkH,aAAc,SAAUF,EAAM/Z,GAI1B,OAHa,KAAT+Z,IACAA,EAAO,GAEM,6BAAb/Z,EACO+Z,EAAO,EAAIA,EAAOA,EAAO,GACZ,yCAAb/Z,EACA+Z,EACa,+CAAb/Z,EACO,GAAP+Z,EAAYA,EAAOA,EAAO,GACb,mCAAb/Z,EACA+Z,EAAO,QADX,GAIX/Z,SAAU,SAAU+Z,EAAMkB,EAAQ+P,GAC9B,OAAIjR,EAAO,EACA,2BACAA,EAAO,GACP,uCACAA,EAAO,GACP,6CACAA,EAAO,GACP,iCAEA,8BAyBnBrd,EAAM0X,aAAa,WAAY,CAC3BhJ,OAAQ,CACJwmB,WAAY,4EAA4EnmB,MACpF,KAEJ9M,OAAQ,wIAAwI8M,MAC5I,KAEJie,SAAU,mBAEdve,YAAa,4DAA4DM,MACrE,KAEJmoB,kBAAkB,EAClBjlB,SAAU,uDAAuDlD,MAAM,KACvEiD,cAAe,qCAAqCjD,MAAM,KAC1DgD,YAAa,uBAAuBhD,MAAM,KAC1CojB,oBAAoB,EACpB5oB,eAAgB,CACZ2L,GAAI,iBACJD,IAAK,oBACLE,EAAG,aACHC,GAAI,cACJC,IAAK,6BACLC,KAAM,sCACNyiB,KAAM,mCAEVrjB,SAAU,CACNC,QAAS,WACTC,QAAS,cACTC,SAAU,sBACVC,QAAS,WACTC,SAAU,sBACVC,SAAU,KAEdQ,aAAc,CACVC,OAAQ,KACRC,KAAM,UACNnI,EAAG0tB,GACHtlB,GAAIslB,GACJ14B,EAAG04B,GACHrlB,GAAIqlB,GACJplB,EAAGolB,GACHnlB,GAAImlB,GACJ3oB,EAAG2oB,GACHllB,GAAIklB,GACJ/kB,EAAG+kB,GACH9kB,GAAI8kB,GACJ9qB,EAAG8qB,GACH7kB,GAAI6kB,IAER1lB,uBAAwB,cACxB9M,QAAS,SAAUjB,EAAQ+a,GACvB,OAAQA,GAEJ,IAAK,IACD,OAAO/a,EAAS,KACpB,QACA,IAAK,IACL,IAAK,IACL,IAAK,MACL,IAAK,IACL,IAAK,IACL,IAAK,IACD,OAAOA,IAGnByJ,KAAM,CACFL,IAAK,EACLC,IAAK,GAETwF,cAAe,+BACfkH,aAAc,SAAUF,EAAM/Z,GAI1B,OAHa,KAAT+Z,IACAA,EAAO,GAEM,SAAb/Z,EACO+Z,EAAO,EAAIA,EAAOA,EAAO,GACZ,aAAb/Z,EACA+Z,EACa,aAAb/Z,EACO,GAAP+Z,EAAYA,EAAOA,EAAO,GACb,UAAb/Z,EACA+Z,EAAO,QADX,GAIX/Z,SAAU,SAAU+Z,EAAMkB,EAAQ+P,GAC9B,OAAIjR,EAAO,EACA,OACAA,EAAO,GACP,WACAA,EAAO,GACP,WACAA,EAAO,GACP,QAEA,UAOnB,IAAI6d,GAAc,CACV1I,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,UAETkI,GAAc,CACVC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,KAGb77B,EAAM0X,aAAa,KAAM,CACrBhJ,OAAQ,gdAAyFK,MAC7F,KAEJN,YAAa,mUAAyEM,MAClF,KAEJmoB,kBAAkB,EAClBjlB,SAAU,mSAAwDlD,MAC9D,KAEJiD,cAAe,qKAAmCjD,MAAM,KACxDgD,YAAa,iFAAqBhD,MAAM,KACxCxF,eAAgB,CACZ2L,GAAI,8CACJD,IAAK,iDACLE,EAAG,aACHC,GAAI,cACJC,IAAK,2DACLC,KAAM,kEAEVZ,SAAU,CACNC,QAAS,oBACTC,QAAS,gCACTC,SAAU,WACVC,QAAS,4CACTC,SAAU,4CACVC,SAAU,KAEdQ,aAAc,CACVC,OAAQ,kBACRC,KAAM,oCACNnI,EAAG,8CACHoI,GAAI,oCACJpT,EAAG,8CACHqT,GAAI,oCACJC,EAAG,wCACHC,GAAI,8BACJxD,EAAG,wCACHyD,GAAI,8BACJG,EAAG,8CACHC,GAAI,oCACJhG,EAAG,wCACHiG,GAAI,+BAERuH,SAAU,SAAUhE,GAChB,OAAOA,EAAO1Q,QAAQ,kEAAiB,SAAUD,GAC7C,OAAOmyB,GAAYnyB,MAG3Bse,WAAY,SAAU3N,GAClB,OAAOA,EAAO1Q,QAAQ,MAAO,SAAUD,GACnC,OAAOkyB,GAAYlyB,MAK3BqN,cAAe,gGACfkH,aAAc,SAAUF,EAAM/Z,GAI1B,OAHa,KAAT+Z,IACAA,EAAO,GAEM,uBAAb/Z,EACO+Z,EAAO,EAAIA,EAAOA,EAAO,GACZ,6BAAb/Z,EACA+Z,EACa,6BAAb/Z,EACQ,IAAR+Z,EAAaA,EAAOA,EAAO,GACd,6BAAb/Z,EACA+Z,EAAO,QADX,GAIX/Z,SAAU,SAAU+Z,EAAMkB,EAAQ+P,GAC9B,OAAIjR,EAAO,EACA,qBACAA,EAAO,GACP,2BACAA,EAAO,GACP,2BACAA,EAAO,GACP,2BAEA,sBAGfpM,KAAM,CACFL,IAAK,EACLC,IAAK,KAMb7Q,EAAM0X,aAAa,KAAM,CACrBhJ,OAAQ,sXAA0EK,MAC9E,KAEJN,YAAa,kSAA4DM,MACrE,KAEJkD,SAAU,6LAAuClD,MAAM,KACvDiD,cAAe,6FAAuBjD,MAAM,KAC5CgD,YAAa,mDAAgBhD,MAAM,KACnCxF,eAAgB,CACZ2L,GAAI,QACJD,IAAK,WACLE,EAAG,aACHC,GAAI,sBACJC,IAAK,4BACLC,KAAM,kCACNgE,EAAG,WACHue,GAAI,aACJC,IAAK,mBACLC,KAAM,yBAEVrjB,SAAU,CACNC,QAAS,4CACTC,QAAS,sCACTC,SAAU,qCACVC,QAAS,kDACTC,SAAU,qGACVC,SAAU,KAEdQ,aAAc,CACVC,OAAQ,8BACRC,KAAM,8BACNnI,EAAG,0DACHoI,GAAI,oCACJpT,EAAG,qBACHqT,GAAI,8BACJC,EAAG,qBACHC,GAAI,SAAUtO,GACV,OAAe,IAAXA,EACO,uCAEJA,EAAS,6BAEpB8K,EAAG,qBACHyD,GAAI,SAAUvO,GACV,OAAe,IAAXA,EACO,uCAEJA,EAAS,6BAEpB0O,EAAG,2BACHC,GAAI,SAAU3O,GACV,OAAe,IAAXA,EACO,6CAEJA,EAAS,yCAEpB2I,EAAG,qBACHiG,GAAI,SAAU5O,GACV,OAAe,IAAXA,EACO,uCACAA,EAAS,IAAO,GAAgB,KAAXA,EACrBA,EAAS,sBAEbA,EAAS,8BAGxB6O,cAAe,qTACfnC,KAAM,SAAU9T,GACZ,MAAO,6HAA8BqJ,KAAKrJ,IAE9CkD,SAAU,SAAU+Z,EAAMkB,EAAQ+P,GAC9B,OAAIjR,EAAO,EACA,0DACAA,EAAO,GACP,iCACAA,EAAO,GACPiR,EAAU,kCAAW,sEACrBjR,EAAO,GACPiR,EAAU,4BAAU,sEAEpB,8BAOnB,IAAIwN,GAAc,CACVtJ,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,UAET8I,GAAc,CACVC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,KA8Fb,SAASC,GAAYl1B,EAAQ+f,EAAejhB,GACxC,IAAI+T,EAAS7S,EAAS,IACtB,OAAQlB,GACJ,IAAK,KAQD,OANI+T,GADW,IAAX7S,EACU,UACQ,IAAXA,GAA2B,IAAXA,GAA2B,IAAXA,EAC7B,UAEA,UAGlB,IAAK,IACD,OAAO+f,EAAgB,eAAiB,eAC5C,IAAK,KAQD,OANIlN,GADW,IAAX7S,IAEkB,IAAXA,GAA2B,IAAXA,GAA2B,IAAXA,GAC7B,SAFA,SAOlB,IAAK,IACD,OAAO+f,EAAgB,YAAc,cACzC,IAAK,KAQD,OANIlN,GADW,IAAX7S,EACU,MACQ,IAAXA,GAA2B,IAAXA,GAA2B,IAAXA,EAC7B,OAEA,OAGlB,IAAK,KAMD,OAJI6S,GADW,IAAX7S,EACU,MAEA,OAGlB,IAAK,KAQD,OANI6S,GADW,IAAX7S,EACU,SACQ,IAAXA,GAA2B,IAAXA,GAA2B,IAAXA,EAC7B,UAEA,UAGlB,IAAK,KAQD,OANI6S,GADW,IAAX7S,IAEkB,IAAXA,GAA2B,IAAXA,GAA2B,IAAXA,GAC7B,SAFA,UA/I1BxH,EAAM0X,aAAa,KAAM,CACrBhJ,OAAQ,8YAA8EK,MAClF,KAEJN,YAAa,2PAA6DM,MACtE,KAEJmoB,kBAAkB,EAClBjlB,SAAU,6RAAuDlD,MAAM,KACvEiD,cAAe,+JAAkCjD,MAAM,KACvDgD,YAAa,iFAAqBhD,MAAM,KACxCxF,eAAgB,CACZ2L,GAAI,4BACJD,IAAK,+BACLE,EAAG,aACHC,GAAI,cACJC,IAAK,yCACLC,KAAM,gDAEVZ,SAAU,CACNC,QAAS,oBACTC,QAAS,oBACTC,SAAU,WACVC,QAAS,oBACTC,SAAU,4CACVC,SAAU,KAEdQ,aAAc,CACVC,OAAQ,wBACRC,KAAM,8BACNnI,EAAG,2DACHoI,GAAI,oCACJpT,EAAG,wCACHqT,GAAI,8BACJC,EAAG,wCACHC,GAAI,8BACJxD,EAAG,kCACHyD,GAAI,wBACJG,EAAG,8CACHC,GAAI,oCACJhG,EAAG,wCACHiG,GAAI,+BAERuH,SAAU,SAAUhE,GAChB,OAAOA,EAAO1Q,QAAQ,kEAAiB,SAAUD,GAC7C,OAAO+yB,GAAY/yB,MAG3Bse,WAAY,SAAU3N,GAClB,OAAOA,EAAO1Q,QAAQ,MAAO,SAAUD,GACnC,OAAO8yB,GAAY9yB,MAK3BqN,cAAe,gGACfkH,aAAc,SAAUF,EAAM/Z,GAI1B,OAHa,KAAT+Z,IACAA,EAAO,GAEM,uBAAb/Z,EACO+Z,EAAO,EAAIA,EAAOA,EAAO,GACZ,6BAAb/Z,EACA+Z,EACa,mCAAb/Z,EACQ,IAAR+Z,EAAaA,EAAOA,EAAO,GACd,uBAAb/Z,EACA+Z,EAAO,QADX,GAIX/Z,SAAU,SAAU+Z,EAAMkB,EAAQ+P,GAC9B,OAAIjR,EAAO,EACA,qBACAA,EAAO,GACP,2BACAA,EAAO,GACP,iCACAA,EAAO,GACP,qBAEA,sBAGfpM,KAAM,CACFL,IAAK,EACLC,IAAK,KAoEb7Q,EAAM0X,aAAa,KAAM,CACrBhJ,OAAQ,CACJzM,OAAQ,mHAAoG8M,MACxG,KAEJmmB,WAAY,+GAAgGnmB,MACxG,MAGRN,YAAa,oEAA+DM,MACxE,KAEJmoB,kBAAkB,EAClBjlB,SAAU,iEAA4DlD,MAClE,KAEJiD,cAAe,0CAAqCjD,MAAM,KAC1DgD,YAAa,4BAAuBhD,MAAM,KAC1CojB,oBAAoB,EACpB5oB,eAAgB,CACZ2L,GAAI,OACJD,IAAK,UACLE,EAAG,aACHC,GAAI,eACJC,IAAK,oBACLC,KAAM,2BAEVZ,SAAU,CACNC,QAAS,eACTC,QAAS,eACTC,SAAU,WACN,OAAQhV,KAAKqT,OACT,KAAK,EACD,MAAO,wBACX,KAAK,EACD,MAAO,uBACX,KAAK,EACD,MAAO,sBACX,KAAK,EACL,KAAK,EACL,KAAK,EACL,KAAK,EACD,MAAO,oBAGnB4B,QAAS,oBACTC,SAAU,WACN,OAAQlV,KAAKqT,OACT,KAAK,EACD,MAAO,kCACX,KAAK,EACD,MAAO,iCACX,KAAK,EACD,MAAO,gCACX,KAAK,EACL,KAAK,EACL,KAAK,EACL,KAAK,EACD,MAAO,8BAGnB8B,SAAU,KAEdQ,aAAc,CACVC,OAAQ,QACRC,KAAM,WACNnI,EAAG,cACHoI,GAAI+mB,GACJn6B,EAAGm6B,GACH9mB,GAAI8mB,GACJ7mB,EAAG6mB,GACH5mB,GAAI4mB,GACJpqB,EAAG,MACHyD,GAAI2mB,GACJxmB,EAAG,SACHC,GAAIumB,GACJvsB,EAAG,SACHiG,GAAIsmB,IAERnnB,uBAAwB,YACxB9M,QAAS,MACTwI,KAAM,CACFL,IAAK,EACLC,IAAK,KAMb,IAAI8rB,GAAc,6FAAgE5tB,MAC9E,KAEJ,SAAS6tB,GAAYp1B,EAAQ+f,EAAejhB,EAAKomB,GAC7C,IAAIsI,EAAMxtB,EACV,OAAQlB,GACJ,IAAK,IACD,OAAOomB,GAAYnF,EACb,4BACA,6BACV,IAAK,KACD,OAAOyN,GAAOtI,GAAYnF,GACpB,gBACA,iBACV,IAAK,IACD,MAAO,OAASmF,GAAYnF,EAAgB,QAAU,UAC1D,IAAK,KACD,OAAOyN,GAAOtI,GAAYnF,EAAgB,QAAU,UACxD,IAAK,IACD,MAAO,OAASmF,GAAYnF,EAAgB,UAAS,gBACzD,IAAK,KACD,OAAOyN,GAAOtI,GAAYnF,EAAgB,UAAS,gBACvD,IAAK,IACD,MAAO,OAASmF,GAAYnF,EAAgB,OAAS,UACzD,IAAK,KACD,OAAOyN,GAAOtI,GAAYnF,EAAgB,OAAS,UACvD,IAAK,IACD,MAAO,OAASmF,GAAYnF,EAAgB,YAAW,eAC3D,IAAK,KACD,OAAOyN,GAAOtI,GAAYnF,EAAgB,YAAW,eACzD,IAAK,IACD,MAAO,OAASmF,GAAYnF,EAAgB,SAAQ,WACxD,IAAK,KACD,OAAOyN,GAAOtI,GAAYnF,EAAgB,SAAQ,WAE1D,MAAO,GAEX,SAAStW,GAAKyb,GACV,OACKA,EAAW,GAAK,cACjB,IACAiQ,GAAY98B,KAAKqT,OACjB,aAwOR,SAAS2pB,GAAShrB,GACd,OAAIA,EAAI,KAAQ,IAELA,EAAI,IAAO,EAK1B,SAASirB,GAAYt1B,EAAQ+f,EAAejhB,EAAKomB,GAC7C,IAAIrS,EAAS7S,EAAS,IACtB,OAAQlB,GACJ,IAAK,IACD,OAAOihB,GAAiBmF,EAClB,sBACA,sBACV,IAAK,KACD,OAAImQ,GAASr1B,GAEL6S,GACCkN,GAAiBmF,EAAW,cAAa,eAG3CrS,EAAS,aACpB,IAAK,IACD,OAAOkN,EAAgB,eAAW,eACtC,IAAK,KACD,OAAIsV,GAASr1B,GAEL6S,GAAUkN,GAAiBmF,EAAW,gBAAY,iBAE/CnF,EACAlN,EAAS,eAEbA,EAAS,eACpB,IAAK,KACD,OAAIwiB,GAASr1B,GAEL6S,GACCkN,GAAiBmF,EACZ,gBACA,iBAGPrS,EAAS,cACpB,IAAK,IACD,OAAIkN,EACO,QAEJmF,EAAW,MAAQ,OAC9B,IAAK,KACD,OAAImQ,GAASr1B,GACL+f,EACOlN,EAAS,QAEbA,GAAUqS,EAAW,OAAS,YAC9BnF,EACAlN,EAAS,QAEbA,GAAUqS,EAAW,MAAQ,QACxC,IAAK,IACD,OAAInF,EACO,gBAEJmF,EAAW,cAAU,eAChC,IAAK,KACD,OAAImQ,GAASr1B,GACL+f,EACOlN,EAAS,gBAEbA,GAAUqS,EAAW,eAAW,iBAChCnF,EACAlN,EAAS,gBAEbA,GAAUqS,EAAW,cAAU,gBAC1C,IAAK,IACD,OAAOnF,GAAiBmF,EAAW,QAAO,SAC9C,IAAK,KACD,OAAImQ,GAASr1B,GACF6S,GAAUkN,GAAiBmF,EAAW,QAAO,WAEjDrS,GAAUkN,GAAiBmF,EAAW,QAAO,WApThE1sB,EAAM0X,aAAa,KAAM,CACrBhJ,OAAQ,4HAAoGK,MACxG,KAEJN,YAAa,oEAAqDM,MAC9D,KAEJkD,SAAU,6EAAsDlD,MAAM,KACtEiD,cAAe,yCAAgCjD,MAAM,KACrDgD,YAAa,qBAAqBhD,MAAM,KACxCxF,eAAgB,CACZ2L,GAAI,OACJD,IAAK,UACLE,EAAG,cACHC,GAAI,gBACJC,IAAK,qBACLC,KAAM,4BAEVe,cAAe,SACfnC,KAAM,SAAU9T,GACZ,MAAyC,MAAlCA,EAAMiuB,OAAO,GAAGtkB,eAE3BzG,SAAU,SAAUoQ,EAAOE,EAAS0a,GAChC,OAAI5a,EAAQ,IACW,IAAZ4a,EAAmB,KAAO,MAEd,IAAZA,EAAmB,KAAO,MAGzC5Z,SAAU,CACNC,QAAS,gBACTC,QAAS,oBACTC,SAAU,WACN,OAAO5D,GAAKxQ,KAAKZ,MAAM,IAE3BiV,QAAS,oBACTC,SAAU,WACN,OAAO9D,GAAKxQ,KAAKZ,MAAM,IAE3BmV,SAAU,KAEdQ,aAAc,CACVC,OAAQ,cACRC,KAAM,KACNnI,EAAGqvB,GACHjnB,GAAIinB,GACJr6B,EAAGq6B,GACHhnB,GAAIgnB,GACJ/mB,EAAG+mB,GACH9mB,GAAI8mB,GACJtqB,EAAGsqB,GACH7mB,GAAI6mB,GACJ1mB,EAAG0mB,GACHzmB,GAAIymB,GACJzsB,EAAGysB,GACHxmB,GAAIwmB,IAERrnB,uBAAwB,YACxB9M,QAAS,MACTwI,KAAM,CACFL,IAAK,EACLC,IAAK,KAMb7Q,EAAM0X,aAAa,QAAS,CACxBhJ,OAAQ,CACJzM,OAAQ,kkBAA4G8M,MAChH,KAEJmmB,WAAY,0fAAgGnmB,MACxG,MAGRN,YAAa,sOAAkDM,MAAM,KACrEkD,SAAU,mVAAgElD,MACtE,KAEJiD,cAAe,6IAA+BjD,MAAM,KACpDgD,YAAa,6IAA+BhD,MAAM,KAClDxF,eAAgB,CACZ2L,GAAI,QACJD,IAAK,WACLE,EAAG,aACHC,GAAI,sBACJC,IAAK,6BACLC,KAAM,oCAEVZ,SAAU,CACNC,QAAS,sCACTC,QAAS,gCACTE,QAAS,gCACTD,SAAU,WACN,MAAO,yDAEXE,SAAU,WACN,MAAO,0FAEXC,SAAU,KAEdQ,aAAc,CACVC,OAAQ,8BACRC,KAAM,8BACNnI,EAAG,yFACHoI,GAAI,sDACJpT,EAAG,2BACHqT,GAAI,8BACJC,EAAG,qBACHC,GAAI,wBACJxD,EAAG,eACHyD,GAAI,kBACJG,EAAG,2BACHC,GAAI,8BACJhG,EAAG,2BACHiG,GAAI,+BAERC,cAAe,0LACfnC,KAAM,SAAU9T,GACZ,MAAO,kGAAuBqJ,KAAKrJ,IAEvCkD,SAAU,SAAU+Z,GAChB,OAAIA,EAAO,EACA,6CACAA,EAAO,GACP,mDACAA,EAAO,GACP,6CAEA,oDAGf9H,uBAAwB,8CACxB9M,QAAS,SAAUjB,EAAQ+a,GACvB,OAAQA,GACJ,IAAK,MACL,IAAK,IACL,IAAK,IACL,IAAK,OACD,OAAe,IAAX/a,EACOA,EAAS,gBAEbA,EAAS,gBACpB,QACI,OAAOA,IAGnByJ,KAAM,CACFL,IAAK,EACLC,IAAK,KAMb7Q,EAAM0X,aAAa,KAAM,CACrBhJ,OAAQ,yFAAyFK,MAC7F,KAEJN,YAAa,kDAAkDM,MAAM,KACrEkD,SAAU,6CAA6ClD,MAAM,KAC7DiD,cAAe,8BAA8BjD,MAAM,KACnDgD,YAAa,uBAAuBhD,MAAM,KAC1CxF,eAAgB,CACZ2L,GAAI,QACJD,IAAK,WACLE,EAAG,aACHC,GAAI,cACJC,IAAK,4BACLC,KAAM,mCAEVe,cAAe,wBACfkH,aAAc,SAAUF,EAAM/Z,GAI1B,OAHa,KAAT+Z,IACAA,EAAO,GAEM,SAAb/Z,EACO+Z,EACa,UAAb/Z,EACQ,IAAR+Z,EAAaA,EAAOA,EAAO,GACd,SAAb/Z,GAAoC,UAAbA,EACvB+Z,EAAO,QADX,GAIX/Z,SAAU,SAAUoQ,EAAOE,EAAS0a,GAChC,OAAI5a,EAAQ,GACD,OACAA,EAAQ,GACR,QACAA,EAAQ,GACR,OAEA,SAGfgB,SAAU,CACNC,QAAS,sBACTC,QAAS,mBACTC,SAAU,kBACVC,QAAS,qBACTC,SAAU,uBACVC,SAAU,KAEdQ,aAAc,CACVC,OAAQ,WACRC,KAAM,eACNnI,EAAG,iBACHoI,GAAI,WACJpT,EAAG,UACHqT,GAAI,WACJC,EAAG,QACHC,GAAI,SACJxD,EAAG,SACHyD,GAAI,UACJG,EAAG,UACHC,GAAI,WACJhG,EAAG,UACHiG,GAAI,YAERnF,KAAM,CACFL,IAAK,EACLC,IAAK,KA0Fb7Q,EAAM0X,aAAa,KAAM,CACrBhJ,OAAQ,wHAAoFK,MACxF,KAEJN,YAAa,oEAAkDM,MAAM,KACrEkD,SAAU,kGAAmFlD,MACzF,KAEJiD,cAAe,0CAA8BjD,MAAM,KACnDgD,YAAa,gCAAuBhD,MAAM,KAC1CxF,eAAgB,CACZ2L,GAAI,OACJD,IAAK,UACLE,EAAG,aACHC,GAAI,eACJC,IAAK,0BACLC,KAAM,iCAEVZ,SAAU,CACNC,QAAS,oBACTC,QAAS,uBACTC,SAAU,gBACVC,QAAS,uBACTC,SAAU,gCACVC,SAAU,KAEdQ,aAAc,CACVC,OAAQ,WACRC,KAAM,uBACNnI,EAAGuvB,GACHnnB,GAAImnB,GACJv6B,EAAGu6B,GACHlnB,GAAIknB,GACJjnB,EAAG,cACHC,GAAIgnB,GACJxqB,EAAGwqB,GACH/mB,GAAI+mB,GACJ5mB,EAAG4mB,GACH3mB,GAAI2mB,GACJ3sB,EAAG2sB,GACH1mB,GAAI0mB,IAERvnB,uBAAwB,YACxB9M,QAAS,MACTwI,KAAM,CACFL,IAAK,EACLC,IAAK,KAMb7Q,EAAM0X,aAAa,QAAS,CACxBhJ,OAAQ,gGAAgGK,MACpG,KAEJN,YAAa,kDAAkDM,MAAM,KACrEkD,SAAU,0EAA2DlD,MACjE,KAEJiD,cAAe,8BAA8BjD,MAAM,KACnDgD,YAAa,uBAAuBhD,MAAM,KAC1CxF,eAAgB,CACZ2L,GAAI,QACJD,IAAK,WACLE,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,0BAEVZ,SAAU,CACNC,QAAS,iBACTC,QAAS,mBACTC,SAAU,iBACVC,QAAS,iBACTC,SAAU,WACN,OAAQlV,KAAKqT,OACT,KAAK,EACD,MAAO,6BACX,QACI,MAAO,+BAGnB8B,SAAU,KAEdQ,aAAc,CACVC,OAAQ,SAAUlI,GACd,OAAQ,YAAY9D,KAAK8D,GAAK,MAAQ,MAAQ,IAAMA,GAExDmI,KAAM,QACNnI,EAAG,iBACHoI,GAAI,aACJpT,EAAG,YACHqT,GAAI,YACJC,EAAG,SACHC,GAAI,SACJxD,EAAG,YACHyD,GAAI,YACJG,EAAG,UACHC,GAAI,UACJhG,EAAG,UACHiG,GAAI,WAERb,uBAAwB,cACxB9M,QAAS,SACTwI,KAAM,CACFL,IAAK,EACLC,IAAK,KAMb7Q,EAAM0X,aAAa,KAAM,CACrBhJ,OAAQ,gGAAgGK,MACpG,KAEJN,YAAa,kDAAkDM,MAAM,KACrEkD,SAAU,0EAA2DlD,MACjE,KAEJiD,cAAe,8BAA8BjD,MAAM,KACnDgD,YAAa,uBAAuBhD,MAAM,KAC1CxF,eAAgB,CACZ2L,GAAI,QACJD,IAAK,WACLE,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,0BAEVZ,SAAU,CACNC,QAAS,WACL,MACI,WACgB,EAAf9U,KAAK6T,QAAc,OAA0B,IAAjB7T,KAAK6T,QAAgB,IAAM,OACxD,OAGRkB,QAAS,WACL,MACI,aACgB,EAAf/U,KAAK6T,QAAc,OAA0B,IAAjB7T,KAAK6T,QAAgB,IAAM,OACxD,OAGRmB,SAAU,WACN,MACI,WACgB,EAAfhV,KAAK6T,QAAc,OAA0B,IAAjB7T,KAAK6T,QAAgB,IAAM,OACxD,OAGRoB,QAAS,WACL,MACI,WACgB,EAAfjV,KAAK6T,QAAc,OAA0B,IAAjB7T,KAAK6T,QAAgB,IAAM,OACxD,OAGRqB,SAAU,WACN,OAAQlV,KAAKqT,OACT,KAAK,EACD,MACI,uBACgB,EAAfrT,KAAK6T,QACA,OACiB,IAAjB7T,KAAK6T,QACL,IACA,OACN,MAER,QACI,MACI,uBACgB,EAAf7T,KAAK6T,QACA,OACiB,IAAjB7T,KAAK6T,QACL,IACA,OACN,QAIhBsB,SAAU,KAEdQ,aAAc,CACVC,OAAQ,SACRC,KAAM,QACNnI,EAAG,iBACHoI,GAAI,aACJpT,EAAG,YACHqT,GAAI,YACJC,EAAG,SACHC,GAAI,SACJxD,EAAG,YACHyD,GAAI,YACJG,EAAG,UACHC,GAAI,UACJhG,EAAG,UACHiG,GAAI,WAERb,uBAAwB,cACxB9M,QAAS,SACTwI,KAAM,CACFL,IAAK,EACLC,IAAK,KAMb7Q,EAAM0X,aAAa,KAAM,CACrBoN,KAAM,CACF,CACI4E,MAAO,aACPnJ,OAAQ,EACRxZ,KAAM,eACNge,OAAQ,SACRpN,KAAM,KAEV,CACI+R,MAAO,aACPC,MAAO,aACPpJ,OAAQ,EACRxZ,KAAM,eACNge,OAAQ,SACRpN,KAAM,KAEV,CACI+R,MAAO,aACPC,MAAO,aACPpJ,OAAQ,EACRxZ,KAAM,eACNge,OAAQ,SACRpN,KAAM,KAEV,CACI+R,MAAO,aACPC,MAAO,aACPpJ,OAAQ,EACRxZ,KAAM,eACNge,OAAQ,SACRpN,KAAM,KAEV,CACI+R,MAAO,aACPC,MAAO,aACPpJ,OAAQ,EACRxZ,KAAM,eACNge,OAAQ,SACRpN,KAAM,KAEV,CACI+R,MAAO,aACPC,MAAO,aACPpJ,OAAQ,EACRxZ,KAAM,eACNge,OAAQ,KACRpN,KAAM,MAEV,CACI+R,MAAO,aACPC,OAAQoD,EAAAA,EACRxM,OAAQ,EACRxZ,KAAM,qBACNge,OAAQ,KACRpN,KAAM,OAGdolB,oBAAqB,qBACrBlX,oBAAqB,SAAUzlB,EAAO4I,GAClC,MAAoB,WAAbA,EAAM,GAAa,EAAIqH,SAASrH,EAAM,IAAM5I,EAAO,KAE9DsO,OAAQ,qGAAyCK,MAAM,KACvDN,YAAa,qGAAyCM,MAClD,KAEJkD,SAAU,uIAA8BlD,MAAM,KAC9CiD,cAAe,mDAAgBjD,MAAM,KACrCgD,YAAa,mDAAgBhD,MAAM,KACnCxF,eAAgB,CACZ2L,GAAI,QACJD,IAAK,WACLE,EAAG,aACHC,GAAI,2BACJC,IAAK,iCACLC,KAAM,sCACNgE,EAAG,aACHue,GAAI,2BACJC,IAAK,iCACLC,KAAM,uCAEV1hB,cAAe,6BACfnC,KAAM,SAAU9T,GACZ,MAAiB,iBAAVA,GAEXkD,SAAU,SAAU+Z,EAAMkB,EAAQ+P,GAC9B,OAAIjR,EAAO,GACA,eAEA,gBAGf3I,SAAU,CACNC,QAAS,oBACTC,QAAS,oBACTC,SAAU,SAAU6G,GAChB,OAAIA,EAAIzK,SAAWpR,KAAKoR,OACb,wBAEA,WAGf6D,QAAS,oBACTC,SAAU,SAAU2G,GAChB,OAAI7b,KAAKoR,SAAWyK,EAAIzK,OACb,wBAEA,WAGf+D,SAAU,KAEdO,uBAAwB,gBACxB9M,QAAS,SAAUjB,EAAQ+a,GACvB,OAAQA,GACJ,IAAK,IACD,OAAkB,IAAX/a,EAAe,eAAOA,EAAS,SAC1C,IAAK,IACL,IAAK,IACL,IAAK,MACD,OAAOA,EAAS,SACpB,QACI,OAAOA,IAGnBgO,aAAc,CACVC,OAAQ,WACRC,KAAM,WACNnI,EAAG,eACHoI,GAAI,WACJpT,EAAG,UACHqT,GAAI,WACJC,EAAG,gBACHC,GAAI,iBACJxD,EAAG,UACHyD,GAAI,WACJG,EAAG,gBACHC,GAAI,iBACJhG,EAAG,UACHiG,GAAI,cAMZpW,EAAM0X,aAAa,KAAM,CACrBhJ,OAAQ,yFAAyFK,MAC7F,KAEJN,YAAa,kDAAkDM,MAAM,KACrEkD,SAAU,+CAA+ClD,MAAM,KAC/DiD,cAAe,8BAA8BjD,MAAM,KACnDgD,YAAa,uBAAuBhD,MAAM,KAC1CxF,eAAgB,CACZ2L,GAAI,QACJD,IAAK,WACLE,EAAG,aACHC,GAAI,cACJC,IAAK,4BACLC,KAAM,mCAEVe,cAAe,6BACfkH,aAAc,SAAUF,EAAM/Z,GAI1B,OAHa,KAAT+Z,IACAA,EAAO,GAEM,WAAb/Z,EACO+Z,EACa,WAAb/Z,EACQ,IAAR+Z,EAAaA,EAAOA,EAAO,GACd,WAAb/Z,GAAsC,UAAbA,EACzB+Z,EAAO,QADX,GAIX/Z,SAAU,SAAUoQ,EAAOE,EAAS0a,GAChC,OAAI5a,EAAQ,GACD,SACAA,EAAQ,GACR,SACAA,EAAQ,GACR,SAEA,SAGfgB,SAAU,CACNC,QAAS,2BACTC,QAAS,sBACTC,SAAU,kBACVC,QAAS,wBACTC,SAAU,4BACVC,SAAU,KAEdQ,aAAc,CACVC,OAAQ,gBACRC,KAAM,uBACNnI,EAAG,kBACHoI,GAAI,WACJpT,EAAG,kBACHqT,GAAI,WACJC,EAAG,gBACHC,GAAI,SACJxD,EAAG,WACHyD,GAAI,YACJG,EAAG,UACHC,GAAI,WACJhG,EAAG,SACHiG,GAAI,WAERnF,KAAM,CACFL,IAAK,EACLC,IAAK,KAMb7Q,EAAM0X,aAAa,KAAM,CACrBhJ,OAAQ,whBAAqGK,MACzG,KAEJN,YAAa,sOAAkDM,MAAM,KACrEkD,SAAU,CACNijB,WAAY,mVAAgEnmB,MACxE,KAEJ9M,OAAQ,yVAAiE8M,MACrE,KAEJie,SAAU,mEAEdhb,cAAe,uIAA8BjD,MAAM,KACnDgD,YAAa,6FAAuBhD,MAAM,KAC1CxF,eAAgB,CACZ2L,GAAI,QACJD,IAAK,WACLE,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,2BAEVZ,SAAU,CACNC,QAAS,+CACTC,QAAS,+CACTE,QAAS,qDACTD,SAAU,gEACVE,SAAU,kDACVC,SAAU,KAEdQ,aAAc,CACVC,OAAQ,SAAUlI,GACd,OAAOA,EAAEtE,QAAQ,+HAAiC,SAC9C+zB,EACAC,EACAC,GAEA,MAAc,WAAPA,EAAaD,EAAK,eAAOA,EAAKC,EAAK,kBAGlDxnB,KAAM,SAAUnI,GACZ,MAAI,2HAA4B9D,KAAK8D,GAC1BA,EAAEtE,QAAQ,mBAAU,mCAE3B,2BAAOQ,KAAK8D,GACLA,EAAEtE,QAAQ,4BAAS,+CAEvBsE,GAEXA,EAAG,kFACHoI,GAAI,8BACJpT,EAAG,2BACHqT,GAAI,8BACJC,EAAG,iCACHC,GAAI,oCACJxD,EAAG,qBACHyD,GAAI,wBACJG,EAAG,qBACHC,GAAI,wBACJhG,EAAG,2BACHiG,GAAI,+BAERb,uBAAwB,uDACxB9M,QAAS,SAAUjB,GACf,OAAe,IAAXA,EACOA,EAEI,IAAXA,EACOA,EAAS,gBAGhBA,EAAS,IACRA,GAAU,KAAOA,EAAS,IAAO,GAClCA,EAAS,KAAQ,EAEV,gBAAQA,EAEZA,EAAS,WAEpByJ,KAAM,CACFL,IAAK,EACLC,IAAK,KAMb,IAAIssB,GAAa,CACblK,EAAG,gBACHT,EAAG,gBACHC,EAAG,gBACHC,EAAG,gBACHC,EAAG,gBACHC,EAAG,gBACHC,EAAG,gBACHC,EAAG,gBACHC,EAAG,gBACHC,EAAG,gBACH2B,GAAI,gBACJH,GAAI,gBACJI,GAAI,gBACJwI,GAAI,gBACJ3I,GAAI,gBACJI,GAAI,gBACJP,GAAI,gBACJC,GAAI,gBACJO,GAAI,gBACJJ,IAAK,iBAGT10B,EAAM0X,aAAa,KAAM,CACrBhJ,OAAQ,wbAAqFK,MACzF,KAEJN,YAAa,sOAAkDM,MAAM,KACrEkD,SAAU,+SAA0DlD,MAChE,KAEJiD,cAAe,uIAA8BjD,MAAM,KACnDgD,YAAa,6FAAuBhD,MAAM,KAC1CxF,eAAgB,CACZ2L,GAAI,QACJD,IAAK,WACLE,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,2BAEVZ,SAAU,CACNC,QAAS,qEACTC,QAAS,qEACTC,SAAU,2CACVC,QAAS,+DACTC,SAAU,uHACVC,SAAU,KAEdQ,aAAc,CACVC,OAAQ,0CACRC,KAAM,oCACNnI,EAAG,kFACHoI,GAAI,0CACJpT,EAAG,oDACHqT,GAAI,oCACJC,EAAG,oDACHC,GAAI,oCACJxD,EAAG,wCACHyD,GAAI,wBACJG,EAAG,kCACHC,GAAI,kBACJhG,EAAG,wCACHiG,GAAI,yBAERb,uBAAwB,sCACxB9M,QAAS,SAAUjB,GAGf,OAAOA,GAAU21B,GAAW31B,IAAW21B,GAF/B31B,EAAS,KAEuC21B,GADtC,KAAV31B,EAAgB,IAAM,QAGlCyJ,KAAM,CACFL,IAAK,EACLC,IAAK,KAMb,IAAIwsB,GAAc,CACV7K,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,UAETqK,GAAc,CACVC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,KAGbh+B,EAAM0X,aAAa,KAAM,CACrBhJ,OAAQ,gXAAyEK,MAC7E,KAEJN,YAAa,gXAAyEM,MAClF,KAEJkD,SAAU,yPAAiDlD,MAAM,KACjEiD,cAAe,2EAAoBjD,MAAM,KACzCgD,YAAa,2EAAoBhD,MAAM,KACvCojB,oBAAoB,EACpB5oB,eAAgB,CACZ2L,GAAI,QACJD,IAAK,WACLE,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,2BAEVe,cAAe,gEACfnC,KAAM,SAAU9T,GACZ,MAAiB,mCAAVA,GAEXkD,SAAU,SAAU+Z,EAAMkB,EAAQ+P,GAC9B,OAAIjR,EAAO,GACA,iCAEA,kCAGf3I,SAAU,CACNC,QAAS,2EACTC,QAAS,+DACTC,SAAU,qCACVC,QAAS,iFACTC,SAAU,oGACVC,SAAU,KAEdQ,aAAc,CACVC,OAAQ,uBACRC,KAAM,uBACNnI,EAAG,uFACHoI,GAAI,0CACJpT,EAAG,6CACHqT,GAAI,8BACJC,EAAG,6CACHC,GAAI,8BACJxD,EAAG,6CACHyD,GAAI,8BACJG,EAAG,iCACHC,GAAI,kBACJhG,EAAG,mDACHiG,GAAI,qCAERb,uBAAwB,sBACxB9M,QAAS,iBACTkV,SAAU,SAAUhE,GAChB,OAAOA,EAAO1Q,QAAQ,kEAAiB,SAAUD,GAC7C,OAAOs0B,GAAYt0B,MAG3Bse,WAAY,SAAU3N,GAClB,OAAOA,EAAO1Q,QAAQ,MAAO,SAAUD,GACnC,OAAOq0B,GAAYr0B,MAG3BiI,KAAM,CACFL,IAAK,EACLC,IAAK,KAMb,IAAIotB,GAAc,CACVzL,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,UAETiL,GAAc,CACVC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,KAGb5+B,EAAM0X,aAAa,KAAM,CACrBhJ,OAAQ,weAA6FK,MACjG,KAEJN,YAAa,4XAA2EM,MACpF,KAEJmoB,kBAAkB,EAClBjlB,SAAU,+SAA0DlD,MAChE,KAEJiD,cAAe,iLAAqCjD,MAAM,KAC1DgD,YAAa,mGAAwBhD,MAAM,KAC3CxF,eAAgB,CACZ2L,GAAI,SACJD,IAAK,YACLE,EAAG,aACHC,GAAI,cACJC,IAAK,sBACLC,KAAM,6BAEVZ,SAAU,CACNC,QAAS,gCACTC,QAAS,gCACTC,SAAU,WACVC,QAAS,4CACTC,SAAU,kDACVC,SAAU,KAEdQ,aAAc,CACVC,OAAQ,8BACRC,KAAM,oCACNnI,EAAG,4EACHoI,GAAI,kEACJpT,EAAG,0DACHqT,GAAI,oCACJC,EAAG,oDACHC,GAAI,8BACJxD,EAAG,8CACHyD,GAAI,wBACJG,EAAG,gEACHC,GAAI,0CACJhG,EAAG,oDACHiG,GAAI,+BAERuH,SAAU,SAAUhE,GAChB,OAAOA,EAAO1Q,QAAQ,kEAAiB,SAAUD,GAC7C,OAAOk1B,GAAYl1B,MAG3Bse,WAAY,SAAU3N,GAClB,OAAOA,EAAO1Q,QAAQ,MAAO,SAAUD,GACnC,OAAOi1B,GAAYj1B,MAG3BqN,cAAe,kKACfkH,aAAc,SAAUF,EAAM/Z,GAI1B,OAHa,KAAT+Z,IACAA,EAAO,GAEM,yCAAb/Z,EACO+Z,EAAO,EAAIA,EAAOA,EAAO,GACZ,qDAAb/Z,EACA+Z,EACa,qDAAb/Z,EACQ,IAAR+Z,EAAaA,EAAOA,EAAO,GACd,6BAAb/Z,EACA+Z,EAAO,QADX,GAIX/Z,SAAU,SAAU+Z,EAAMkB,EAAQ+P,GAC9B,OAAIjR,EAAO,EACA,uCACAA,EAAO,GACP,mDACAA,EAAO,GACP,mDACAA,EAAO,GACP,2BAEA,wCAGf9H,uBAAwB,8BACxB9M,QAAS,SAAUjB,GACf,OAAOA,EAAS,sBAEpByJ,KAAM,CACFL,IAAK,EACLC,IAAK,KAMb7Q,EAAM0X,aAAa,KAAM,CACrBhJ,OAAQ,qGAAyCK,MAAM,KACvDN,YAAa,qGAAyCM,MAClD,KAEJkD,SAAU,uIAA8BlD,MAAM,KAC9CiD,cAAe,mDAAgBjD,MAAM,KACrCgD,YAAa,mDAAgBhD,MAAM,KACnCxF,eAAgB,CACZ2L,GAAI,SACJD,IAAK,YACLE,EAAG,cACHC,GAAI,0BACJC,IAAK,iCACLC,KAAM,sCACNgE,EAAG,cACHue,GAAI,0BACJC,IAAK,iCACLC,KAAM,uCAEVrjB,SAAU,CACNC,QAAS,kBACTC,QAAS,kBACTC,SAAU,UACVC,QAAS,kBACTC,SAAU,6BACVC,SAAU,KAEdQ,aAAc,CACVC,OAAQ,YACRC,KAAM,YACNnI,EAAG,gBACHoI,GAAI,WACJpT,EAAG,UACHqT,GAAI,WACJC,EAAG,sBACHC,GAAI,iBACJxD,EAAG,eACHyD,GAAI,WACJG,EAAG,gBACHC,GAAI,WACJhG,EAAG,gBACHiG,GAAI,YAERb,uBAAwB,gCACxB9M,QAAS,SAAUjB,EAAQ+a,GACvB,OAAQA,GACJ,IAAK,IACL,IAAK,IACL,IAAK,MACD,OAAO/a,EAAS,SACpB,IAAK,IACD,OAAOA,EAAS,SACpB,IAAK,IACL,IAAK,IACD,OAAOA,EAAS,SACpB,QACI,OAAOA,IAGnB6O,cAAe,4BACfnC,KAAM,SAAU3L,GACZ,MAAiB,iBAAVA,GAEXjF,SAAU,SAAU+Z,EAAMkB,EAAQsgB,GAC9B,OAAOxhB,EAAO,GAAK,eAAO,kBAMlC,IAAIyhB,GAAc,CACVtM,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,UAET8L,GAAc,CACV1L,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,KAETkL,GAAW,CACP,sEACA,iCACA,iCACA,iCACA,iCACA,mDACA,uCACA,qBACA,6CACA,sEACA,sEACA,uEAGRh/B,EAAM0X,aAAa,KAAM,CACrBhJ,OAAQswB,GACRvwB,YAAauwB,GACb/sB,SAAU,+YAA0ElD,MAChF,KAEJiD,cAAe,qTAA2DjD,MACtE,KAEJgD,YAAa,mDAAgBhD,MAAM,KACnCojB,oBAAoB,EACpB5oB,eAAgB,CACZ2L,GAAI,QACJD,IAAK,WACLE,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,2BAEVe,cAAe,wFACfnC,KAAM,SAAU9T,GACZ,MAAO,6CAAUqJ,KAAKrJ,IAE1BkD,SAAU,SAAU+Z,EAAMkB,EAAQ+P,GAC9B,OAAIjR,EAAO,GACA,6CAEA,8CAGf3I,SAAU,CACNC,QAAS,uFACTC,QAAS,6FACTC,SAAU,uDACVC,QAAS,iFACTC,SAAU,uDACVC,SAAU,KAEdQ,aAAc,CACVC,OAAQ,wBACRC,KAAM,KACNnI,EAAG,wFACHoI,GAAI,oCACJpT,EAAG,gEACHqT,GAAI,0CACJC,EAAG,sEACHC,GAAI,gDACJxD,EAAG,8CACHyD,GAAI,wBACJG,EAAG,oDACHC,GAAI,8BACJhG,EAAG,8CACHiG,GAAI,yBAERuH,SAAU,SAAUhE,GAChB,OAAOA,EACF1Q,QAAQ,kEAAiB,SAAUD,GAChC,OAAO+1B,GAAY/1B,KAEtBC,QAAQ,UAAM,MAEvBqe,WAAY,SAAU3N,GAClB,OAAOA,EACF1Q,QAAQ,MAAO,SAAUD,GACtB,OAAO81B,GAAY91B,KAEtBC,QAAQ,KAAM,WAEvBgI,KAAM,CACFL,IAAK,EACLC,IAAK,MAMb,IAAIouB,GAAa,CACbhM,EAAG,gBACHT,EAAG,gBACHC,EAAG,gBACHC,EAAG,gBACHC,EAAG,gBACHC,EAAG,gBACHC,EAAG,gBACHC,EAAG,gBACHC,EAAG,gBACHC,EAAG,gBACH2B,GAAI,gBACJH,GAAI,gBACJI,GAAI,gBACJwI,GAAI,gBACJ3I,GAAI,gBACJI,GAAI,gBACJP,GAAI,gBACJC,GAAI,gBACJO,GAAI,gBACJJ,IAAK,iBA6DT,SAASwK,GAAsB13B,EAAQ+f,EAAejhB,EAAKomB,GACvD,IAAIzqB,EAAS,CACTM,EAAG,CAAC,aAAc,gBAClBsT,EAAG,CAAC,YAAa,eACjBvD,EAAG,CAAC,UAAW,aACf4D,EAAG,CAAC,WAAY,eAChB/F,EAAG,CAAC,UAAW,eAEnB,OAAOoX,EAAgBtlB,EAAOqE,GAAK,GAAKrE,EAAOqE,GAAK,GAuBxD,SAAS64B,GAA4B33B,GAEjC,GADAA,EAAS6I,SAAS7I,EAAQ,IACtB1D,MAAM0D,GACN,OAAO,EAEX,GAAIA,EAAS,EAET,OAAO,EACJ,GAAIA,EAAS,GAEhB,OAAI,GAAKA,GAAUA,GAAU,EAI1B,GAAIA,EAAS,IAAK,CAErB,IAAI2tB,EAAY3tB,EAAS,GAEzB,OAAkB,GAAd2tB,EACOgK,GAFM33B,EAAS,IAInB23B,GAA4BhK,GAChC,GAAI3tB,EAAS,IAAO,CAEvB,KAAiB,IAAVA,GACHA,GAAkB,GAEtB,OAAO23B,GAA4B33B,GAInC,OAAO23B,GADP33B,GAAkB,KAvH1BxH,EAAM0X,aAAa,KAAM,CACrBhJ,OAAQ,saAAkFK,MACtF,KAEJN,YAAa,wPAAqDM,MAC9D,KAEJkD,SAAU,qTAA2DlD,MACjE,KAEJiD,cAAe,uIAA8BjD,MAAM,KACnDgD,YAAa,6FAAuBhD,MAAM,KAC1CxF,eAAgB,CACZ2L,GAAI,QACJD,IAAK,WACLE,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,2BAEVZ,SAAU,CACNC,QAAS,+DACTC,QAAS,+DACTC,SAAU,qCACVC,QAAS,+DACTC,SAAU,4IACVC,SAAU,KAEdQ,aAAc,CACVC,OAAQ,0CACRC,KAAM,oCACNnI,EAAG,kFACHoI,GAAI,0CACJpT,EAAG,oDACHqT,GAAI,oCACJC,EAAG,8CACHC,GAAI,8BACJxD,EAAG,wCACHyD,GAAI,wBACJG,EAAG,kCACHC,GAAI,kBACJhG,EAAG,wCACHiG,GAAI,yBAERb,uBAAwB,gEACxB9M,QAAS,SAAUjB,GAGf,OAAOA,GAAUy3B,GAAWz3B,IAAWy3B,GAF/Bz3B,EAAS,KAEuCy3B,GADtC,KAAVz3B,EAAgB,IAAM,QAGlCyJ,KAAM,CACFL,IAAK,EACLC,IAAK,KAwEb7Q,EAAM0X,aAAa,KAAM,CACrBhJ,OAAQ,6FAAuFK,MAC3F,KAEJN,YAAa,+DAA+DM,MACxE,KAEJmoB,kBAAkB,EAClBjlB,SAAU,4EAAmElD,MACzE,KAEJiD,cAAe,uCAA8BjD,MAAM,KACnDgD,YAAa,gCAAuBhD,MAAM,KAC1CojB,oBAAoB,EACpB5oB,eAAgB,CACZ2L,GAAI,cACJD,IAAK,iBACLE,EAAG,aACHC,GAAI,eACJC,IAAK,2BACLC,KAAM,kCAEVZ,SAAU,CACNC,QAAS,eACTK,SAAU,IACVJ,QAAS,eACTC,SAAU,eACVC,QAAS,sBACTC,SAAU,WAEN,OAAQlV,KAAKqT,OACT,KAAK,EACL,KAAK,EACD,MAAO,0BACX,QACI,MAAO,4BAIvBsC,aAAc,CACVC,OAhGR,SAA2BkE,GAEvB,OAAIwlB,GADSxlB,EAAO1R,OAAO,EAAG0R,EAAO/L,QAAQ,OAElC,KAAO+L,EAEX,MAAQA,GA4FXjE,KA1FR,SAAyBiE,GAErB,OAAIwlB,GADSxlB,EAAO1R,OAAO,EAAG0R,EAAO/L,QAAQ,OAElC,QAAU+L,EAEd,SAAWA,GAsFdpM,EAAG,kBACHoI,GAAI,cACJpT,EAAG28B,GACHtpB,GAAI,cACJC,EAAGqpB,GACHppB,GAAI,aACJxD,EAAG4sB,GACHnpB,GAAI,UACJG,EAAGgpB,GACH/oB,GAAI,cACJhG,EAAG+uB,GACH9oB,GAAI,WAERb,uBAAwB,YACxB9M,QAAS,MACTwI,KAAM,CACFL,IAAK,EACLC,IAAK,KAMb7Q,EAAM0X,aAAa,KAAM,CACrBhJ,OAAQ,wYAA6EK,MACjF,KAEJN,YAAa,wYAA6EM,MACtF,KAEJkD,SAAU,uLAAsClD,MAAM,KACtDiD,cAAe,2KAAoCjD,MAAM,KACzDgD,YAAa,qEAAmBhD,MAAM,KACtCojB,oBAAoB,EACpB5oB,eAAgB,CACZ2L,GAAI,QACJD,IAAK,WACLE,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,4CAEVe,cAAe,wFACfnC,KAAM,SAAU9T,GACZ,MAAiB,yCAAVA,GAEXkD,SAAU,SAAU+Z,EAAMkB,EAAQ+P,GAC9B,OAAIjR,EAAO,GACA,mDAEA,wCAGf3I,SAAU,CACNC,QAAS,oEACTC,QAAS,0EACTC,SAAU,0EACVC,QAAS,sFACTC,SAAU,kGACVC,SAAU,KAEdQ,aAAc,CACVC,OAAQ,wBACRC,KAAM,yCACNnI,EAAG,mGACHoI,GAAI,0CACJpT,EAAG,6BACHqT,GAAI,8BACJC,EAAG,+CACHC,GAAI,gDACJxD,EAAG,uBACHyD,GAAI,wBACJG,EAAG,mCACHC,GAAI,oCACJhG,EAAG,iBACHiG,GAAI,mBAERb,uBAAwB,8BACxB9M,QAAS,SAAUjB,GACf,MAAO,qBAAQA,KAMvB,IAAIyC,GAAQ,CACR0L,GAAI,4CACJpT,EAAG,uCACHqT,GAAI,yCACJC,EAAG,gCACHC,GAAI,iCACJxD,EAAG,0BACHyD,GAAI,2BACJG,EAAG,2CACHC,GAAI,gDACJhG,EAAG,wBACHiG,GAAI,yBASR,SAASgpB,GAAkB53B,EAAQ+f,EAAejhB,EAAKomB,GACnD,OAAOnF,EACD0N,GAAM3uB,GAAK,GACXomB,EACAuI,GAAM3uB,GAAK,GACX2uB,GAAM3uB,GAAK,GAErB,SAAS+4B,GAAQ73B,GACb,OAAOA,EAAS,IAAO,GAAe,GAATA,GAAeA,EAAS,GAEzD,SAASytB,GAAM3uB,GACX,OAAO2D,GAAM3D,GAAKyI,MAAM,KAE5B,SAASuwB,GAAY93B,EAAQ+f,EAAejhB,EAAKomB,GAC7C,IAAIrS,EAAS7S,EAAS,IACtB,OAAe,IAAXA,EAEI6S,EAAS+kB,GAAkB53B,EAAQ+f,EAAejhB,EAAI,GAAIomB,GAEvDnF,EACAlN,GAAUglB,GAAQ73B,GAAUytB,GAAM3uB,GAAK,GAAK2uB,GAAM3uB,GAAK,IAE1DomB,EACOrS,EAAS4a,GAAM3uB,GAAK,GAEpB+T,GAAUglB,GAAQ73B,GAAUytB,GAAM3uB,GAAK,GAAK2uB,GAAM3uB,GAAK,IAI1EtG,EAAM0X,aAAa,KAAM,CACrBhJ,OAAQ,CACJzM,OAAQ,iJAAoG8M,MACxG,KAEJmmB,WAAY,2HAAkGnmB,MAC1G,KAEJie,SAAU,+DAEdve,YAAa,kDAAkDM,MAAM,KACrEkD,SAAU,CACNhQ,OAAQ,sIAAoF8M,MACxF,KAEJmmB,WAAY,0GAA2FnmB,MACnG,KAEJie,SAAU,cAEdhb,cAAe,wCAA8BjD,MAAM,KACnDgD,YAAa,sBAAiBhD,MAAM,KACpCojB,oBAAoB,EACpB5oB,eAAgB,CACZ2L,GAAI,QACJD,IAAK,WACLE,EAAG,aACHC,GAAI,wBACJC,IAAK,sCACLC,KAAM,4CACNgE,EAAG,aACHue,GAAI,wBACJC,IAAK,sCACLC,KAAM,4CAEVrjB,SAAU,CACNC,QAAS,qBACTC,QAAS,aACTC,SAAU,UACVC,QAAS,aACTC,SAAU,+BACVC,SAAU,KAEdQ,aAAc,CACVC,OAAQ,QACRC,KAAM,gBACNnI,EAlFR,SAA0B/F,EAAQ+f,EAAejhB,EAAKomB,GAClD,OAAInF,EACO,uBAEAmF,EAAW,iCAAoB,mBA+EtC/W,GAAI2pB,GACJ/8B,EAAG68B,GACHxpB,GAAI0pB,GACJzpB,EAAGupB,GACHtpB,GAAIwpB,GACJhtB,EAAG8sB,GACHrpB,GAAIupB,GACJppB,EAAGkpB,GACHjpB,GAAImpB,GACJnvB,EAAGivB,GACHhpB,GAAIkpB,IAER/pB,uBAAwB,cACxB9M,QAAS,SAAUjB,GACf,OAAOA,EAAS,QAEpByJ,KAAM,CACFL,IAAK,EACLC,IAAK,KAMb,IAAI0uB,GAAU,CACV5pB,GAAI,0CAAqC5G,MAAM,KAC/CxM,EAAG,0DAAiCwM,MAAM,KAC1C6G,GAAI,0DAAiC7G,MAAM,KAC3C8G,EAAG,sCAAiC9G,MAAM,KAC1C+G,GAAI,sCAAiC/G,MAAM,KAC3CuD,EAAG,kCAA6BvD,MAAM,KACtCgH,GAAI,kCAA6BhH,MAAM,KACvCmH,EAAG,oEAAiCnH,MAAM,KAC1CoH,GAAI,oEAAiCpH,MAAM,KAC3CoB,EAAG,wBAAwBpB,MAAM,KACjCqH,GAAI,wBAAwBrH,MAAM,MAKtC,SAASywB,GAASvK,EAAOztB,EAAQ+f,GAC7B,OAAIA,EAEO/f,EAAS,IAAO,GAAKA,EAAS,KAAQ,GAAKytB,EAAM,GAAKA,EAAM,GAI5DztB,EAAS,IAAO,GAAKA,EAAS,KAAQ,GAAKytB,EAAM,GAAKA,EAAM,GAG3E,SAASwK,GAAyBj4B,EAAQ+f,EAAejhB,GACrD,OAAOkB,EAAS,IAAMg4B,GAASD,GAAQj5B,GAAMkB,EAAQ+f,GAEzD,SAASmY,GAAyBl4B,EAAQ+f,EAAejhB,GACrD,OAAOk5B,GAASD,GAAQj5B,GAAMkB,EAAQ+f,GAM1CvnB,EAAM0X,aAAa,KAAM,CACrBhJ,OAAQ,gIAAuGK,MAC3G,KAEJN,YAAa,4DAAkDM,MAAM,KACrEkD,SAAU,oFAA0ElD,MAChF,KAEJiD,cAAe,kBAAkBjD,MAAM,KACvCgD,YAAa,kBAAkBhD,MAAM,KACrCojB,oBAAoB,EACpB5oB,eAAgB,CACZ2L,GAAI,QACJD,IAAK,WACLE,EAAG,cACHC,GAAI,uBACJC,IAAK,8BACLC,KAAM,qCAEVZ,SAAU,CACNC,QAAS,4BACTC,QAAS,yBACTC,SAAU,qBACVC,QAAS,sBACTC,SAAU,+CACVC,SAAU,KAEdQ,aAAc,CACVC,OAAQ,cACRC,KAAM,WACNnI,EAlCR,SAAyB/F,EAAQ+f,GAC7B,OAAOA,EAAgB,sBAAmB,iCAkCtC5R,GAAI8pB,GACJl9B,EAAGm9B,GACH9pB,GAAI6pB,GACJ5pB,EAAG6pB,GACH5pB,GAAI2pB,GACJntB,EAAGotB,GACH3pB,GAAI0pB,GACJvpB,EAAGwpB,GACHvpB,GAAIspB,GACJtvB,EAAGuvB,GACHtpB,GAAIqpB,IAERlqB,uBAAwB,YACxB9M,QAAS,MACTwI,KAAM,CACFL,IAAK,EACLC,IAAK,KAMb,IAAI8uB,GAAa,CACbC,MAAO,CAEHjqB,GAAI,CAAC,SAAU,UAAW,WAC1BpT,EAAG,CAAC,cAAe,iBACnBqT,GAAI,CAAC,QAAS,SAAU,UACxBC,EAAG,CAAC,YAAa,eACjBC,GAAI,CAAC,MAAO,OAAQ,QACpBC,GAAI,CAAC,MAAO,OAAQ,QACpBI,GAAI,CAAC,SAAU,UAAW,WAC1BC,GAAI,CAAC,SAAU,SAAU,WAE7BypB,uBAAwB,SAAUr4B,EAAQs4B,GACtC,OAAkB,IAAXt4B,EACDs4B,EAAQ,GACE,GAAVt4B,GAAeA,GAAU,EACzBs4B,EAAQ,GACRA,EAAQ,IAElBzI,UAAW,SAAU7vB,EAAQ+f,EAAejhB,GACxC,IAAIw5B,EAAUH,GAAWC,MAAMt5B,GAC/B,OAAmB,IAAfA,EAAIpF,OACGqmB,EAAgBuY,EAAQ,GAAKA,EAAQ,GAGxCt4B,EACA,IACAm4B,GAAWE,uBAAuBr4B,EAAQs4B,KA+S1D,SAASC,GAAYv4B,EAAQ+f,EAAejhB,EAAKomB,GAC7C,OAAQpmB,GACJ,IAAK,IACD,OAAOihB,EAAgB,4EAAkB,wFAC7C,IAAK,KACD,OAAO/f,GAAU+f,EAAgB,wCAAY,qDACjD,IAAK,IACL,IAAK,KACD,OAAO/f,GAAU+f,EAAgB,kCAAW,+CAChD,IAAK,IACL,IAAK,KACD,OAAO/f,GAAU+f,EAAgB,sBAAS,yCAC9C,IAAK,IACL,IAAK,KACD,OAAO/f,GAAU+f,EAAgB,4BAAU,yCAC/C,IAAK,IACL,IAAK,KACD,OAAO/f,GAAU+f,EAAgB,sBAAS,mCAC9C,IAAK,IACL,IAAK,KACD,OAAO/f,GAAU+f,EAAgB,sBAAS,yCAC9C,QACI,OAAO/f,GA/TnBxH,EAAM0X,aAAa,KAAM,CACrBhJ,OAAQ,mFAAmFK,MACvF,KAEJN,YAAa,2DAA2DM,MACpE,KAEJmoB,kBAAkB,EAClBjlB,SAAU,iEAA4DlD,MAClE,KAEJiD,cAAe,0CAAqCjD,MAAM,KAC1DgD,YAAa,4BAAuBhD,MAAM,KAC1CojB,oBAAoB,EACpB5oB,eAAgB,CACZ2L,GAAI,OACJD,IAAK,UACLE,EAAG,aACHC,GAAI,eACJC,IAAK,oBACLC,KAAM,2BAEVZ,SAAU,CACNC,QAAS,eACTC,QAAS,gBAETC,SAAU,WACN,OAAQhV,KAAKqT,OACT,KAAK,EACD,MAAO,wBACX,KAAK,EACD,MAAO,uBACX,KAAK,EACD,MAAO,sBACX,KAAK,EACL,KAAK,EACL,KAAK,EACL,KAAK,EACD,MAAO,oBAGnB4B,QAAS,mBACTC,SAAU,WAUN,MATmB,CACf,kCACA,sCACA,iCACA,iCACA,wCACA,gCACA,iCAEgBlV,KAAKqT,QAE7B8B,SAAU,KAEdQ,aAAc,CACVC,OAAQ,QACRC,KAAM,WACNnI,EAAG,mBACHoI,GAAIgqB,GAAWtI,UACf90B,EAAGo9B,GAAWtI,UACdzhB,GAAI+pB,GAAWtI,UACfxhB,EAAG8pB,GAAWtI,UACdvhB,GAAI6pB,GAAWtI,UACf/kB,EAAG,MACHyD,GAAI4pB,GAAWtI,UACfnhB,EAAG,SACHC,GAAIwpB,GAAWtI,UACflnB,EAAG,SACHiG,GAAIupB,GAAWtI,WAEnB9hB,uBAAwB,YACxB9M,QAAS,MACTwI,KAAM,CACFL,IAAK,EACLC,IAAK,KAMb7Q,EAAM0X,aAAa,KAAM,CACrBhJ,OAAQ,2LAA8IK,MAClJ,KAEJN,YAAa,sEAAiEM,MAC1E,KAEJH,YAAa,yCACb4oB,kBAAmB,yCACnB7oB,iBAAkB,yCAClB8oB,uBAAwB,yCACxBxlB,SAAU,sEAAkDlD,MAAM,KAClEiD,cAAe,uCAAwBjD,MAAM,KAC7CgD,YAAa,uCAAwBhD,MAAM,KAC3CxF,eAAgB,CACZ2L,GAAI,QACJD,IAAK,WACLE,EAAG,aACHC,GAAI,cACJC,IAAK,wBACLC,KAAM,+BAEVZ,SAAU,CACNC,QAAS,wBACTC,QAAS,eACTC,SAAU,cACVC,QAAS,iBACTC,SAAU,2BACVC,SAAU,KAEdQ,aAAc,CACVC,OAAQ,cACRC,KAAM,WACNnI,EAAG,wBACHoI,GAAI,iBACJpT,EAAG,YACHqT,GAAI,YACJC,EAAG,WACHC,GAAI,WACJxD,EAAG,QACHyD,GAAI,QACJG,EAAG,YACHC,GAAI,YACJhG,EAAG,SACHiG,GAAI,UAERb,uBAAwB,cACxB9M,QAAS,SACTwI,KAAM,CACFL,IAAK,EACLC,IAAK,KAMb7Q,EAAM0X,aAAa,KAAM,CACrBhJ,OAAQ,ocAAuFK,MAC3F,KAEJN,YAAa,sOAAkDM,MAAM,KACrEkD,SAAU,mSAAwDlD,MAC9D,KAEJiD,cAAe,uIAA8BjD,MAAM,KACnDgD,YAAa,8EAAuBhD,MAAM,KAC1CxF,eAAgB,CACZ2L,GAAI,OACJD,IAAK,UACLE,EAAG,YACHC,GAAI,cACJC,IAAK,mBACLC,KAAM,0BAEVZ,SAAU,CACNC,QAAS,mDACTC,QAAS,6CACTC,SAAU,wCACVC,QAAS,mDACTC,SAAU,WACN,OAAQlV,KAAKqT,OACT,KAAK,EACL,KAAK,EACL,KAAK,EACD,MAAO,wFACX,KAAK,EACL,KAAK,EACL,KAAK,EACL,KAAK,EACD,MAAO,0FAGnB8B,SAAU,KAEdQ,aAAc,CACVC,OAAQ,kBACRC,KAAM,8BACNnI,EAAG,wFACHoI,GAAI,gDACJpT,EAAG,gEACHqT,GAAI,0CACJC,EAAG,8CACHC,GAAI,8BACJxD,EAAG,8CACHyD,GAAI,8BACJG,EAAG,0DACHC,GAAI,0CACJhG,EAAG,gEACHiG,GAAI,2CAERb,uBAAwB,0FACxB9M,QAAS,SAAUjB,GACf,IAAI2tB,EAAY3tB,EAAS,GACrB4tB,EAAc5tB,EAAS,IAC3B,OAAe,IAAXA,EACOA,EAAS,gBACO,GAAhB4tB,EACA5tB,EAAS,gBACK,GAAd4tB,GAAoBA,EAAc,GAClC5tB,EAAS,gBACK,GAAd2tB,EACA3tB,EAAS,gBACK,GAAd2tB,EACA3tB,EAAS,gBACK,GAAd2tB,GAAiC,GAAdA,EACnB3tB,EAAS,gBAETA,EAAS,iBAGxByJ,KAAM,CACFL,IAAK,EACLC,IAAK,KAMb7Q,EAAM0X,aAAa,KAAM,CACrBhJ,OAAQ,gdAAyFK,MAC7F,KAEJN,YAAa,8TAAyEM,MAClF,KAEJmoB,kBAAkB,EAClBjlB,SAAU,mYAAwElD,MAC9E,KAEJiD,cAAe,qNAA2CjD,MAAM,KAChEgD,YAAa,mGAAwBhD,MAAM,KAC3CxF,eAAgB,CACZ2L,GAAI,uBACJD,IAAK,0BACLE,EAAG,aACHC,GAAI,cACJC,IAAK,oCACLC,KAAM,2CAEVZ,SAAU,CACNC,QAAS,sCACTC,QAAS,gCACTC,SAAU,WACVC,QAAS,4CACTC,SAAU,kDACVC,SAAU,KAEdQ,aAAc,CACVC,OAAQ,gDACRC,KAAM,oCACNnI,EAAG,4EACHoI,GAAI,sDACJpT,EAAG,sEACHqT,GAAI,sDACJC,EAAG,sEACHC,GAAI,sDACJxD,EAAG,oDACHyD,GAAI,oCACJG,EAAG,8CACHC,GAAI,8BACJhG,EAAG,8CACHiG,GAAI,+BAERC,cAAe,mPACfkH,aAAc,SAAUF,EAAM/Z,GAI1B,OAHa,KAAT+Z,IACAA,EAAO,GAGO,yCAAb/Z,GAAiC,GAAR+Z,GACb,wEAAb/Z,GACa,iEAAbA,EAEO+Z,EAAO,GAEPA,GAGf/Z,SAAU,SAAU+Z,EAAMkB,EAAQ+P,GAC9B,OAAIjR,EAAO,EACA,uCACAA,EAAO,GACP,uCACAA,EAAO,GACP,sEACAA,EAAO,GACP,+DAEA,0CAiCnBrd,EAAM0X,aAAa,KAAM,CACrBhJ,OAAQ,8+BAA+LK,MACnM,KAEJN,YAAa,iQAA6EM,MACtF,KAEJmoB,kBAAkB,EAClBjlB,SAAU,iOAA6ClD,MAAM,KAC7DiD,cAAe,uIAA8BjD,MAAM,KACnDgD,YAAa,6FAAuBhD,MAAM,KAC1CojB,oBAAoB,EACpB5oB,eAAgB,CACZ2L,GAAI,QACJD,IAAK,WACLE,EAAG,aACHC,GAAI,6CACJC,IAAK,mDACLC,KAAM,0DAEVe,cAAe,6BACfnC,KAAM,SAAU9T,GACZ,MAAiB,iBAAVA,GAEXkD,SAAU,SAAU+Z,EAAMkB,EAAQ+P,GAC9B,OAAIjR,EAAO,GACA,eAEA,gBAGf3I,SAAU,CACNC,QAAS,kDACTC,QAAS,kDACTC,SAAU,qCACVC,QAAS,kDACTC,SAAU,6DACVC,SAAU,KAEdQ,aAAc,CACVC,OAAQ,oCACRC,KAAM,8BACNnI,EAAGwyB,GACHpqB,GAAIoqB,GACJx9B,EAAGw9B,GACHnqB,GAAImqB,GACJlqB,EAAGkqB,GACHjqB,GAAIiqB,GACJztB,EAAGytB,GACHhqB,GAAIgqB,GACJ7pB,EAAG6pB,GACH5pB,GAAI4pB,GACJ5vB,EAAG4vB,GACH3pB,GAAI2pB,IAERxqB,uBAAwB,mCACxB9M,QAAS,SAAUjB,EAAQ+a,GACvB,OAAQA,GACJ,IAAK,IACL,IAAK,IACL,IAAK,MACD,OAAO/a,EAAS,4BACpB,QACI,OAAOA,MAOvB,IAAIw4B,GAAc,CACVxN,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,UAETgN,GAAc,CACVjE,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,KAGb,SAASyD,GAAe14B,EAAQ+f,EAAe5N,EAAQ+S,GACnD,IAAIvjB,EAAS,GACb,GAAIoe,EACA,OAAQ5N,GACJ,IAAK,IACDxQ,EAAS,0DACT,MACJ,IAAK,KACDA,EAAS,oCACT,MACJ,IAAK,IACDA,EAAS,8CACT,MACJ,IAAK,KACDA,EAAS,0CACT,MACJ,IAAK,IACDA,EAAS,kCACT,MACJ,IAAK,KACDA,EAAS,wBACT,MACJ,IAAK,IACDA,EAAS,wCACT,MACJ,IAAK,KACDA,EAAS,8BACT,MACJ,IAAK,IACDA,EAAS,8CACT,MACJ,IAAK,KACDA,EAAS,oCACT,MACJ,IAAK,IACDA,EAAS,wCACT,MACJ,IAAK,KACDA,EAAS,oCACT,WAGR,OAAQwQ,GACJ,IAAK,IACDxQ,EAAS,sEACT,MACJ,IAAK,KACDA,EAAS,gDACT,MACJ,IAAK,IACDA,EAAS,0DACT,MACJ,IAAK,KACDA,EAAS,gDACT,MACJ,IAAK,IACDA,EAAS,8CACT,MACJ,IAAK,KACDA,EAAS,oCACT,MACJ,IAAK,IACDA,EAAS,oDACT,MACJ,IAAK,KACDA,EAAS,0CACT,MACJ,IAAK,IACDA,EAAS,gEACT,MACJ,IAAK,KACDA,EAAS,sDACT,MACJ,IAAK,IACDA,EAAS,oDACT,MACJ,IAAK,KACDA,EAAS,0CACT,MAGZ,OAAOA,EAAOF,QAAQ,MAAOzB,GAGjCxH,EAAM0X,aAAa,KAAM,CACrBhJ,OAAQ,0cAAwFK,MAC5F,KAEJN,YAAa,8VAAgFM,MACzF,KAEJmoB,kBAAkB,EAClBjlB,SAAU,6RAAuDlD,MAAM,KACvEiD,cAAe,+JAAkCjD,MAAM,KACvDgD,YAAa,iFAAqBhD,MAAM,KACxCxF,eAAgB,CACZ2L,GAAI,wCACJD,IAAK,2CACLE,EAAG,aACHC,GAAI,cACJC,IAAK,qDACLC,KAAM,4DAEVZ,SAAU,CACNC,QAAS,oBACTC,QAAS,sCACTC,SAAU,WACVC,QAAS,0BACTC,SAAU,4CACVC,SAAU,KAEdQ,aAAc,CACVC,OAAQ,mCACRC,KAAM,yCACNnI,EAAG2yB,GACHvqB,GAAIuqB,GACJ39B,EAAG29B,GACHtqB,GAAIsqB,GACJrqB,EAAGqqB,GACHpqB,GAAIoqB,GACJ5tB,EAAG4tB,GACHnqB,GAAImqB,GACJhqB,EAAGgqB,GACH/pB,GAAI+pB,GACJ/vB,EAAG+vB,GACH9pB,GAAI8pB,IAERviB,SAAU,SAAUhE,GAChB,OAAOA,EAAO1Q,QAAQ,kEAAiB,SAAUD,GAC7C,OAAOi3B,GAAYj3B,MAG3Bse,WAAY,SAAU3N,GAClB,OAAOA,EAAO1Q,QAAQ,MAAO,SAAUD,GACnC,OAAOg3B,GAAYh3B,MAG3BqN,cAAe,2LACfkH,aAAc,SAAUF,EAAM/Z,GAI1B,OAHa,KAAT+Z,IACAA,EAAO,GAEM,mCAAb/Z,GAAqC,mCAAbA,EACjB+Z,EAEM,yCAAb/Z,GACa,qDAAbA,GACa,yCAAbA,EAEe,IAAR+Z,EAAaA,EAAOA,EAAO,QAL/B,GAQX/Z,SAAU,SAAU+Z,EAAMkB,EAAQ+P,GAC9B,OAAY,GAARjR,GAAaA,EAAO,EACb,iCACAA,EAAO,GACP,iCACAA,EAAO,GACP,uCACAA,EAAO,GACP,mDAEA,wCAGfpM,KAAM,CACFL,IAAK,EACLC,IAAK,KAMb7Q,EAAM0X,aAAa,QAAS,CACxBhJ,OAAQ,oFAAoFK,MACxF,KAEJN,YAAa,kDAAkDM,MAAM,KACrEkD,SAAU,6CAA6ClD,MAAM,KAC7DiD,cAAe,8BAA8BjD,MAAM,KACnDgD,YAAa,uBAAuBhD,MAAM,KAC1CxF,eAAgB,CACZ2L,GAAI,QACJD,IAAK,WACLE,EAAG,aACHC,GAAI,cACJC,IAAK,4BACLC,KAAM,mCAEVe,cAAe,8BACfkH,aAAc,SAAUF,EAAM/Z,GAI1B,OAHa,KAAT+Z,IACAA,EAAO,GAEM,SAAb/Z,EACO+Z,EACa,cAAb/Z,EACQ,IAAR+Z,EAAaA,EAAOA,EAAO,GACd,WAAb/Z,GAAsC,UAAbA,EACzB+Z,EAAO,QADX,GAIX/Z,SAAU,SAAUoQ,EAAOE,EAAS0a,GAChC,OAAI5a,EAAQ,GACD,OACAA,EAAQ,GACR,YACAA,EAAQ,GACR,SAEA,SAGfgB,SAAU,CACNC,QAAS,sBACTC,QAAS,kBACTC,SAAU,kBACVC,QAAS,sBACTC,SAAU,wBACVC,SAAU,KAEdQ,aAAc,CACVC,OAAQ,WACRC,KAAM,gBACNnI,EAAG,gBACHoI,GAAI,UACJpT,EAAG,UACHqT,GAAI,WACJC,EAAG,QACHC,GAAI,SACJxD,EAAG,SACHyD,GAAI,UACJG,EAAG,UACHC,GAAI,WACJhG,EAAG,UACHiG,GAAI,YAERnF,KAAM,CACFL,IAAK,EACLC,IAAK,KAMb7Q,EAAM0X,aAAa,KAAM,CACrBhJ,OAAQ,oFAAoFK,MACxF,KAEJN,YAAa,kDAAkDM,MAAM,KACrEkD,SAAU,6CAA6ClD,MAAM,KAC7DiD,cAAe,8BAA8BjD,MAAM,KACnDgD,YAAa,uBAAuBhD,MAAM,KAC1CxF,eAAgB,CACZ2L,GAAI,QACJD,IAAK,WACLE,EAAG,aACHC,GAAI,cACJC,IAAK,4BACLC,KAAM,mCAEVe,cAAe,8BACfkH,aAAc,SAAUF,EAAM/Z,GAI1B,OAHa,KAAT+Z,IACAA,EAAO,GAEM,SAAb/Z,EACO+Z,EACa,cAAb/Z,EACQ,IAAR+Z,EAAaA,EAAOA,EAAO,GACd,WAAb/Z,GAAsC,UAAbA,EACzB+Z,EAAO,QADX,GAIX/Z,SAAU,SAAUoQ,EAAOE,EAAS0a,GAChC,OAAI5a,EAAQ,GACD,OACAA,EAAQ,GACR,YACAA,EAAQ,GACR,SAEA,SAGfgB,SAAU,CACNC,QAAS,sBACTC,QAAS,kBACTC,SAAU,kBACVC,QAAS,sBACTC,SAAU,wBACVC,SAAU,KAEdQ,aAAc,CACVC,OAAQ,WACRC,KAAM,gBACNnI,EAAG,gBACHoI,GAAI,UACJpT,EAAG,UACHqT,GAAI,WACJC,EAAG,QACHC,GAAI,SACJxD,EAAG,SACHyD,GAAI,UACJG,EAAG,UACHC,GAAI,WACJhG,EAAG,UACHiG,GAAI,YAERnF,KAAM,CACFL,IAAK,EACLC,IAAK,KAMb7Q,EAAM0X,aAAa,KAAM,CACrBhJ,OAAQ,kGAAwFK,MAC5F,KAEJN,YAAa,4DAAkDM,MAAM,KACrEkD,SAAU,0FAAiElD,MACvE,KAEJiD,cAAe,6CAA8BjD,MAAM,KACnDgD,YAAa,sCAAuBhD,MAAM,KAC1CxF,eAAgB,CACZ2L,GAAI,QACJD,IAAK,WACLE,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,2BAEVZ,SAAU,CACNC,QAAS,iBACTC,QAAS,sBACTC,SAAU,gBACVC,QAAS,0BACTC,SAAU,iCACVC,SAAU,KAEdQ,aAAc,CACVC,OAAQ,aACRC,KAAM,SACNnI,EAAG,eACHoI,GAAI,aACJpT,EAAG,SACHqT,GAAI,YACJC,EAAG,cACHC,GAAI,kBACJxD,EAAG,eACHyD,GAAI,iBACJG,EAAG,QACHC,GAAI,UACJhG,EAAG,OACHiG,GAAI,UAERb,uBAAwB,cACxB9M,QAAS,SACTwI,KAAM,CACFL,IAAK,EACLC,IAAK,KAMb,IAAIsvB,GAAc,CACV3N,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,UAETmN,GAAc,CACVC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,KAGb9gC,EAAM0X,aAAa,KAAM,CACrBhJ,OAAQ,4dAA2FK,MAC/F,KAEJN,YAAa,4OAAmDM,MAAM,KACtEkD,SAAU,mSAAwDlD,MAC9D,KAEJiD,cAAe,qHAA2BjD,MAAM,KAChDgD,YAAa,qHAA2BhD,MAAM,KAE9CxF,eAAgB,CACZ2L,GAAI,QACJD,IAAK,WACLE,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,0BAEVZ,SAAU,CACNC,QAAS,gDACTC,QAAS,6EACTC,SAAU,+BACVC,QAAS,sDACTC,SAAU,8FACVC,SAAU,KAEdQ,aAAc,CACVC,OAAQ,6DACRC,KAAM,yEACNnI,EAAG,wFACHoI,GAAI,gDACJpT,EAAG,mDACHqT,GAAI,oCACJC,EAAG,6CACHC,GAAI,8BACJxD,EAAG,uCACHyD,GAAI,wBACJG,EAAG,2BACHC,GAAI,YACJhG,EAAG,6CACHiG,GAAI,+BAERuH,SAAU,SAAUhE,GAChB,OAAOA,EAAO1Q,QAAQ,kEAAiB,SAAUD,GAC7C,OAAOo3B,GAAYp3B,MAG3Bse,WAAY,SAAU3N,GAClB,OAAOA,EAAO1Q,QAAQ,MAAO,SAAUD,GACnC,OAAOm3B,GAAYn3B,MAG3BiI,KAAM,CACFL,IAAK,EACLC,IAAK,KAMb7Q,EAAM0X,aAAa,KAAM,CACrBhJ,OAAQ,qFAAqFK,MACzF,KAEJN,YAAa,6DAA6DM,MACtE,KAEJmoB,kBAAkB,EAClBjlB,SAAU,2DAAqDlD,MAAM,KACrEiD,cAAe,oCAA8BjD,MAAM,KACnDgD,YAAa,6BAAuBhD,MAAM,KAC1CojB,oBAAoB,EACpB5oB,eAAgB,CACZ2L,GAAI,QACJD,IAAK,WACLE,EAAG,aACHC,GAAI,eACJC,IAAK,2BACLC,KAAM,iCAEVZ,SAAU,CACNC,QAAS,iBACTC,QAAS,oBACTC,SAAU,gBACVC,QAAS,oBACTC,SAAU,0BACVC,SAAU,KAEdQ,aAAc,CACVC,OAAQ,QACRC,KAAM,WACNnI,EAAG,gBACHoI,GAAI,cACJpT,EAAG,aACHqT,GAAI,cACJC,EAAG,UACHC,GAAI,WACJxD,EAAG,SACHyD,GAAI,WACJG,EAAG,cACHC,GAAI,gBACJhG,EAAG,YACHiG,GAAI,YAERb,uBAAwB,YACxB9M,QAAS,MACTwI,KAAM,CACFL,IAAK,EACLC,IAAK,KAMb,IAAIkwB,GAAc,CACVvO,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,UAET+N,GAAc,CACVhF,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,KAGbz8B,EAAM0X,aAAa,KAAM,CACrBhJ,OAAQ,ocAAuFK,MAC3F,KAEJN,YAAa,uTAAuEM,MAChF,KAEJmoB,kBAAkB,EAClBjlB,SAAU,mSAAwDlD,MAC9D,KAEJiD,cAAe,4KAA0CjD,MAAM,KAC/DgD,YAAa,wFAA4BhD,MAAM,KAC/CojB,oBAAoB,EACpB5oB,eAAgB,CACZ2L,GAAI,wCACJD,IAAK,2CACLE,EAAG,aACHC,GAAI,cACJC,IAAK,qDACLC,KAAM,4DAEVqI,SAAU,SAAUhE,GAChB,OAAOA,EAAO1Q,QAAQ,kEAAiB,SAAUD,GAC7C,OAAOg4B,GAAYh4B,MAG3Bse,WAAY,SAAU3N,GAClB,OAAOA,EAAO1Q,QAAQ,MAAO,SAAUD,GACnC,OAAO+3B,GAAY/3B,MAG3BqN,cAAe,wHACfkH,aAAc,SAAUF,EAAM/Z,GAI1B,OAHa,KAAT+Z,IACAA,EAAO,GAEM,6BAAb/Z,EACO+Z,EAAO,EAAIA,EAAOA,EAAO,GACZ,mCAAb/Z,EACA+Z,EACa,yCAAb/Z,EACQ,IAAR+Z,EAAaA,EAAOA,EAAO,GACd,6BAAb/Z,EACA+Z,EAAO,QADX,GAIX/Z,SAAU,SAAU+Z,EAAMkB,EAAQ+P,GAC9B,OAAIjR,EAAO,EACA,2BACAA,EAAO,GACP,iCACAA,EAAO,GACP,uCACAA,EAAO,GACP,2BAEA,4BAGf3I,SAAU,CACNC,QAAS,oBACTC,QAAS,gCACTC,SAAU,8CACVC,QAAS,gCACTC,SAAU,wCACVC,SAAU,KAEdQ,aAAc,CACVC,OAAQ,iBACRC,KAAM,oCACNnI,EAAG,oDACHoI,GAAI,gDACJpT,EAAG,8CACHqT,GAAI,oCACJC,EAAG,8CACHC,GAAI,oCACJxD,EAAG,kCACHyD,GAAI,wBACJG,EAAG,8CACHC,GAAI,oCACJhG,EAAG,wCACHiG,GAAI,+BAERnF,KAAM,CACFL,IAAK,EACLC,IAAK,KAMb,IAAIowB,GAAwB,6DAA6DlyB,MACjF,KAEJmyB,GAA2B,kDAAkDnyB,MACzE,KAEJoyB,GAAgB,CACZ,QACA,QACA,iBACA,QACA,SACA,cACA,cACA,QACA,QACA,QACA,QACA,SAEJC,GAAgB,qKAEpBphC,EAAM0X,aAAa,QAAS,CACxBhJ,OAAQ,0FAA0FK,MAC9F,KAEJN,YAAa,SAAUlM,EAAGN,GACtB,OAAKM,EAEM,QAAQkH,KAAKxH,GACbi/B,GAAyB3+B,EAAEgJ,SAE3B01B,GAAsB1+B,EAAEgJ,SAJxB01B,IAQfryB,YAAawyB,GACbzyB,iBAAkByyB,GAClB5J,kBAAmB,4FACnBC,uBAAwB,mFAExB5oB,YAAasyB,GACbzJ,gBAAiByJ,GACjBxJ,iBAAkBwJ,GAElBlvB,SAAU,6DAA6DlD,MACnE,KAEJiD,cAAe,8BAA8BjD,MAAM,KACnDgD,YAAa,uBAAuBhD,MAAM,KAC1CojB,oBAAoB,EACpB5oB,eAAgB,CACZ2L,GAAI,QACJD,IAAK,WACLE,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,0BAEVZ,SAAU,CACNC,QAAS,kBACTC,QAAS,iBACTC,SAAU,eACVC,QAAS,mBACTC,SAAU,2BACVC,SAAU,KAEdQ,aAAc,CACVC,OAAQ,UACRC,KAAM,aACNnI,EAAG,oBACHoI,GAAI,cACJpT,EAAG,mBACHqT,GAAI,aACJC,EAAG,gBACHC,GAAI,SACJxD,EAAG,gBACHyD,GAAI,WACJG,EAAG,kBACHC,GAAI,aACJhG,EAAG,iBACHiG,GAAI,WAERb,uBAAwB,kBACxB9M,QAAS,SAAUjB,GACf,OACIA,GACY,IAAXA,GAA2B,IAAXA,GAA0B,IAAVA,EAAe,MAAQ,OAGhEyJ,KAAM,CACFL,IAAK,EACLC,IAAK,KAMb,IAAIwwB,GAAwB,6DAA6DtyB,MACjF,KAEJuyB,GAA2B,kDAAkDvyB,MACzE,KAEJwyB,GAAgB,CACZ,QACA,QACA,iBACA,QACA,SACA,cACA,cACA,QACA,QACA,QACA,QACA,SAEJC,GAAgB,qKAEpBxhC,EAAM0X,aAAa,KAAM,CACrBhJ,OAAQ,0FAA0FK,MAC9F,KAEJN,YAAa,SAAUlM,EAAGN,GACtB,OAAKM,EAEM,QAAQkH,KAAKxH,GACbq/B,GAAyB/+B,EAAEgJ,SAE3B81B,GAAsB9+B,EAAEgJ,SAJxB81B,IAQfzyB,YAAa4yB,GACb7yB,iBAAkB6yB,GAClBhK,kBAAmB,4FACnBC,uBAAwB,mFAExB5oB,YAAa0yB,GACb7J,gBAAiB6J,GACjB5J,iBAAkB4J,GAElBtvB,SAAU,6DAA6DlD,MACnE,KAEJiD,cAAe,8BAA8BjD,MAAM,KACnDgD,YAAa,uBAAuBhD,MAAM,KAC1CojB,oBAAoB,EACpB5oB,eAAgB,CACZ2L,GAAI,QACJD,IAAK,WACLE,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,0BAEVZ,SAAU,CACNC,QAAS,kBACTC,QAAS,iBACTC,SAAU,eACVC,QAAS,mBACTC,SAAU,2BACVC,SAAU,KAEdQ,aAAc,CACVC,OAAQ,UACRC,KAAM,aACNnI,EAAG,oBACHoI,GAAI,cACJpT,EAAG,mBACHqT,GAAI,aACJC,EAAG,gBACHC,GAAI,SACJxD,EAAG,gBACHyD,GAAI,WACJG,EAAG,kBACHC,GAAI,aACJhG,EAAG,iBACHiG,GAAI,WAERb,uBAAwB,kBACxB9M,QAAS,SAAUjB,GACf,OACIA,GACY,IAAXA,GAA2B,IAAXA,GAA0B,IAAVA,EAAe,MAAQ,OAGhEyJ,KAAM,CACFL,IAAK,EACLC,IAAK,KAMb7Q,EAAM0X,aAAa,KAAM,CACrBhJ,OAAQ,qFAAqFK,MACzF,KAEJN,YAAa,6DAA6DM,MACtE,KAEJmoB,kBAAkB,EAClBjlB,SAAU,wDAAqDlD,MAAM,KACrEiD,cAAe,kCAA+BjD,MAAM,KACpDgD,YAAa,0BAAuBhD,MAAM,KAC1CojB,oBAAoB,EACpB5oB,eAAgB,CACZ2L,GAAI,QACJD,IAAK,WACLE,EAAG,aACHC,GAAI,eACJC,IAAK,0BACLC,KAAM,iCAEVZ,SAAU,CACNC,QAAS,oBACTC,QAAS,uBACTC,SAAU,mBACVC,QAAS,uBACTC,SAAU,sCACVC,SAAU,KAEdQ,aAAc,CACVC,OAAQ,QACRC,KAAM,WACNnI,EAAG,eACHoI,GAAI,YACJpT,EAAG,aACHqT,GAAI,YACJC,EAAG,WACHC,GAAI,WACJxD,EAAG,UACHyD,GAAI,WACJG,EAAG,eACHC,GAAI,gBACJhG,EAAG,YACHiG,GAAI,YAERb,uBAAwB,YACxB9M,QAAS,MACTwI,KAAM,CACFL,IAAK,EACLC,IAAK,KAMb7Q,EAAM0X,aAAa,SAAU,CACzBhJ,OAAQ,CACJwmB,WAAY,iGAAqFnmB,MAC7F,KAEJ9M,OAAQ,kIAAsH8M,MAC1H,KAEJie,SAAU,mBAEdve,YAAa,kEAA+DM,MACxE,KAEJmoB,kBAAkB,EAClBjlB,SAAU,iEAA2DlD,MACjE,KAEJiD,cAAe,8BAA8BjD,MAAM,KACnDgD,YAAa,uBAAuBhD,MAAM,KAC1CojB,oBAAoB,EACpB5oB,eAAgB,CACZ2L,GAAI,OACJD,IAAK,UACLE,EAAG,aACHC,GAAI,mBACJyiB,GAAI,aACJxiB,IAAK,4BACLyiB,IAAK,mBACLxiB,KAAM,iCACNyiB,KAAM,wBAEVrjB,SAAU,CACNC,QAAS,gBACTC,QAAS,eACTC,SAAU,cACVC,QAAS,gBACTC,SAAU,qBACVC,SAAU,KAEdQ,aAAc,CACVC,OAAQ,eACRC,KAAM,QACNnI,EAAG,gBACHoI,GAAI,cACJpT,EAAG,aACHqT,GAAI,aACJC,EAAG,UACHC,GAAI,UACJxD,EAAG,UACHyD,GAAI,WACJG,EAAG,SACHC,GAAI,WACJhG,EAAG,QACHiG,GAAI,UAERb,uBAAwB,wBACxB9M,QAAS,SAAUjB,EAAQ+a,GAcvB,OAAO/a,GAHQ,MAAX+a,GAA6B,MAAXA,EATP,IAAX/a,EACM,IACW,IAAXA,EACA,IACW,IAAXA,EACA,IACW,IAAXA,EACA,IACA,OAEG,MAIjByJ,KAAM,CACFL,IAAK,EACLC,IAAK,KAMb,IAAI4wB,GAAc,CACVjP,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,UAETyO,GAAc,CACVC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,KAGbpiC,EAAM0X,aAAa,QAAS,CAExBhJ,OAAQ,8VAAsEK,MAC1E,KAEJN,YAAa,8VAAsEM,MAC/E,KAEJkD,SAAU,ySAAyDlD,MAC/D,KAEJiD,cAAe,yJAAiCjD,MAAM,KACtDgD,YAAa,yJAAiChD,MAAM,KACpDxF,eAAgB,CACZ2L,GAAI,4BACJD,IAAK,+BACLE,EAAG,aACHC,GAAI,cACJC,IAAK,yCACLC,KAAM,gDAEVZ,SAAU,CACNC,QAAS,oBACTC,QAAS,oBACTC,SAAU,sCACVC,QAAS,oBACTC,SAAU,4CACVC,SAAU,KAEdQ,aAAc,CACVC,OAAQ,8BACRC,KAAM,oCACNnI,EAAG,oDACHoI,GAAI,oCACJpT,EAAG,wCACHqT,GAAI,8BACJC,EAAG,8CACHC,GAAI,8BACJxD,EAAG,wCACHyD,GAAI,wBACJG,EAAG,oDACHC,GAAI,oCACJhG,EAAG,wCACHiG,GAAI,yBAERuH,SAAU,SAAUhE,GAChB,OAAOA,EAAO1Q,QAAQ,kEAAiB,SAAUD,GAC7C,OAAO04B,GAAY14B,MAG3Bse,WAAY,SAAU3N,GAClB,OAAOA,EAAO1Q,QAAQ,MAAO,SAAUD,GACnC,OAAOy4B,GAAYz4B,MAK3BqN,cAAe,4GACfkH,aAAc,SAAUF,EAAM/Z,GAI1B,OAHa,KAAT+Z,IACAA,EAAO,GAEM,uBAAb/Z,EACO+Z,EAAO,EAAIA,EAAOA,EAAO,GACZ,6BAAb/Z,EACA+Z,EACa,yCAAb/Z,EACQ,IAAR+Z,EAAaA,EAAOA,EAAO,GACd,6BAAb/Z,EACA+Z,EAAO,QADX,GAIX/Z,SAAU,SAAU+Z,EAAMkB,EAAQ+P,GAC9B,OAAIjR,EAAO,EACA,qBACAA,EAAO,GACP,2BACAA,EAAO,GACP,uCACAA,EAAO,GACP,2BAEA,sBAGfpM,KAAM,CACFL,IAAK,EACLC,IAAK,KAMb,IAAIwxB,GAAmB,iIAAmGtzB,MAClH,KAEJuzB,GAAmB,+GAAqGvzB,MACpH,KAER,SAASwzB,GAAS1wB,GACd,OAAOA,EAAI,GAAK,GAAc,EAATA,EAAI,OAAaA,EAAI,IAAM,IAAO,EAE3D,SAAS2wB,GAAYh7B,EAAQ+f,EAAejhB,GACxC,IAAI+T,EAAS7S,EAAS,IACtB,OAAQlB,GACJ,IAAK,KACD,OAAO+T,GAAUkoB,GAAS/6B,GAAU,UAAY,UACpD,IAAK,IACD,OAAO+f,EAAgB,SAAW,cACtC,IAAK,KACD,OAAOlN,GAAUkoB,GAAS/6B,GAAU,SAAW,SACnD,IAAK,IACD,OAAO+f,EAAgB,UAAY,eACvC,IAAK,KACD,OAAOlN,GAAUkoB,GAAS/6B,GAAU,UAAY,UACpD,IAAK,KACD,OAAO6S,GAAUkoB,GAAS/6B,GAAU,gBAAa,iBACrD,IAAK,KACD,OAAO6S,GAAUkoB,GAAS/6B,GAAU,OAAS,QAmNzD,SAASi7B,GAAyBj7B,EAAQ+f,EAAejhB,GAarD,OAAOkB,GAHa,IAAhBA,EAAS,KAAwB,KAAVA,GAAiBA,EAAS,KAAQ,EAC7C,OAFA,KARH,CACLmO,GAAI,UACJC,GAAI,SACJE,GAAI,MACJC,GAAI,OACJI,GAAI,OACJC,GAAI,OAMuB9P,GA8DvC,SAASo8B,GAAyBl7B,EAAQ+f,EAAejhB,GACrD,IAToB0uB,EAChBC,EAgBJ,MAAY,MAAR3uB,EACOihB,EAAgB,uCAAW,uCAE3B/f,EAAS,KApBAwtB,GAoB6BxtB,EAnB7CytB,EAQS,CACTtf,GAAI4R,EAAgB,6HAA2B,6HAC/C3R,GAAI2R,EAAgB,2GAAwB,2GAC5CzR,GAAI,6EACJC,GAAI,uEACJI,GAAI,iHACJC,GAAI,kEAKkC9P,GAnBzByI,MAAM,KAChBimB,EAAM,IAAO,GAAKA,EAAM,KAAQ,GACjCC,EAAM,GACM,GAAZD,EAAM,IAAWA,EAAM,IAAM,IAAMA,EAAM,IAAM,IAAmB,IAAbA,EAAM,KAC3DC,EAAM,GACNA,EAAM,IAxRhBj1B,EAAM0X,aAAa,KAAM,CACrBhJ,OAAQ,SAAUiqB,EAAgB12B,GAC9B,OAAK02B,EAEiB,KAAX12B,EAKH,IACAqgC,GAAiB3J,EAAeptB,SAChC,IACA82B,GAAiB1J,EAAeptB,SAChC,IAEG,SAAS9B,KAAKxH,GACdqgC,GAAiB3J,EAAeptB,SAEhC82B,GAAiB1J,EAAeptB,SAfhC82B,IAkBf5zB,YAAa,uDAAkDM,MAAM,KACrEkD,SAAU,4EAA6DlD,MACnE,KAEJiD,cAAe,gCAA2BjD,MAAM,KAChDgD,YAAa,4BAAuBhD,MAAM,KAC1CxF,eAAgB,CACZ2L,GAAI,QACJD,IAAK,WACLE,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,2BAEVZ,SAAU,CACNC,QAAS,mBACTC,QAAS,eACTC,SAAU,WACN,OAAQhV,KAAKqT,OACT,KAAK,EACD,MAAO,0BAEX,KAAK,EACD,MAAO,mBAEX,KAAK,EACD,MAAO,2BAEX,KAAK,EACD,MAAO,uBAEX,QACI,MAAO,oBAGnB4B,QAAS,iBACTC,SAAU,WACN,OAAQlV,KAAKqT,OACT,KAAK,EACD,MAAO,2CACX,KAAK,EACD,MAAO,4CACX,KAAK,EACD,MAAO,wCACX,QACI,MAAO,gCAGnB8B,SAAU,KAEdQ,aAAc,CACVC,OAAQ,QACRC,KAAM,UACNnI,EAAG,eACHoI,GAAI6sB,GACJjgC,EAAGigC,GACH5sB,GAAI4sB,GACJ3sB,EAAG2sB,GACH1sB,GAAI0sB,GACJlwB,EAAG,eACHyD,GAAI,SACJG,EAAG,eACHC,GAAIqsB,GACJryB,EAAG,MACHiG,GAAIosB,IAERjtB,uBAAwB,YACxB9M,QAAS,MACTwI,KAAM,CACFL,IAAK,EACLC,IAAK,KAMb7Q,EAAM0X,aAAa,QAAS,CACxBhJ,OAAQ,8FAA2FK,MAC/F,KAEJN,YAAa,kDAAkDM,MAAM,KACrEkD,SAAU,uFAAiFlD,MACvF,KAEJiD,cAAe,iCAA8BjD,MAAM,KACnDgD,YAAa,yCAAuBhD,MAAM,KAC1CojB,oBAAoB,EACpB5oB,eAAgB,CACZ2L,GAAI,QACJD,IAAK,WACLE,EAAG,aACHC,GAAI,wBACJC,IAAK,sCACLC,KAAM,6CAEVZ,SAAU,CACNC,QAAS,kBACTC,QAAS,uBACTC,SAAU,kBACVC,QAAS,mBACTC,SAAU,WACN,OAAsB,IAAflV,KAAKqT,OAA8B,IAAfrT,KAAKqT,MAC1B,8BACA,+BAEV8B,SAAU,KAEdQ,aAAc,CACVC,OAAQ,QACRC,KAAM,WACNnI,EAAG,kBACHoI,GAAI,cACJpT,EAAG,YACHqT,GAAI,aACJC,EAAG,WACHC,GAAI,WACJxD,EAAG,SACHyD,GAAI,UACJG,EAAG,YACHC,GAAI,WACJhG,EAAG,SACHiG,GAAI,WAERb,uBAAwB,cACxB9M,QAAS,WAKbzI,EAAM0X,aAAa,KAAM,CACrBhJ,OAAQ,8FAA2FK,MAC/F,KAEJN,YAAa,kDAAkDM,MAAM,KACrEkD,SAAU,uFAAiFlD,MACvF,KAEJiD,cAAe,iCAA8BjD,MAAM,KACnDgD,YAAa,yCAAuBhD,MAAM,KAC1CojB,oBAAoB,EACpB5oB,eAAgB,CACZ2L,GAAI,QACJD,IAAK,WACLE,EAAG,aACHC,GAAI,wBACJC,IAAK,8BACLC,KAAM,qCAEVZ,SAAU,CACNC,QAAS,kBACTC,QAAS,uBACTC,SAAU,kBACVC,QAAS,mBACTC,SAAU,WACN,OAAsB,IAAflV,KAAKqT,OAA8B,IAAfrT,KAAKqT,MAC1B,8BACA,+BAEV8B,SAAU,KAEdQ,aAAc,CACVC,OAAQ,QACRC,KAAM,WACNnI,EAAG,WACHoI,GAAI,cACJpT,EAAG,YACHqT,GAAI,aACJC,EAAG,WACHC,GAAI,WACJxD,EAAG,SACHyD,GAAI,UACJG,EAAG,YACHC,GAAI,WACJhG,EAAG,SACHiG,GAAI,WAERb,uBAAwB,cACxB9M,QAAS,SACTwI,KAAM,CACFL,IAAK,EACLC,IAAK,KAsBb7Q,EAAM0X,aAAa,KAAM,CACrBhJ,OAAQ,oGAAoGK,MACxG,KAEJN,YAAa,+DAA+DM,MACxE,KAEJmoB,kBAAkB,EAClBjlB,SAAU,yEAAkDlD,MAAM,KAClEiD,cAAe,iCAA8BjD,MAAM,KACnDgD,YAAa,0BAAuBhD,MAAM,KAC1CxF,eAAgB,CACZ2L,GAAI,OACJD,IAAK,UACLE,EAAG,aACHC,GAAI,cACJC,IAAK,mBACLC,KAAM,0BAEVZ,SAAU,CACNC,QAAS,cACTC,QAAS,mBACTC,SAAU,eACVC,QAAS,eACTC,SAAU,uBACVC,SAAU,KAEdQ,aAAc,CACVC,OAAQ,WACRC,KAAM,qBACNnI,EAAG,oBACHoI,GAAI8sB,GACJlgC,EAAG,WACHqT,GAAI6sB,GACJ5sB,EAAG,aACHC,GAAI2sB,GACJnwB,EAAG,OACHyD,GAAI0sB,GACJvsB,EAAG,cACHC,GAAIssB,GACJtyB,EAAG,QACHiG,GAAIqsB,IAERxxB,KAAM,CACFL,IAAK,EACLC,IAAK,KA6Bb,IAAI8xB,GAAgB,CAChB,uBACA,uBACA,uBACA,uBACA,+BACA,uBACA,uBACA,uBACA,uBACA,uBACA,uBACA,wBAMJ3iC,EAAM0X,aAAa,KAAM,CACrBhJ,OAAQ,CACJzM,OAAQ,kbAAoF8M,MACxF,KAEJmmB,WAAY,saAAkFnmB,MAC1F,MAGRN,YAAa,CAETxM,OAAQ,6QAAgE8M,MACpE,KAEJmmB,WAAY,kRAAgEnmB,MACxE,MAGRkD,SAAU,CACNijB,WAAY,mVAAgEnmB,MACxE,KAEJ9M,OAAQ,mVAAgE8M,MACpE,KAEJie,SAAU,0JAEdhb,cAAe,6FAAuBjD,MAAM,KAC5CgD,YAAa,6FAAuBhD,MAAM,KAC1CF,YAAa8zB,GACbjL,gBAAiBiL,GACjBhL,iBAAkBgL,GAGlB/zB,YAAa,+wBAGbD,iBAAkB,+wBAGlB6oB,kBAAmB,wgBAGnBC,uBAAwB,8TACxBluB,eAAgB,CACZ2L,GAAI,OACJD,IAAK,UACLE,EAAG,aACHC,GAAI,sBACJC,IAAK,4BACLC,KAAM,mCAEVZ,SAAU,CACNC,QAAS,0DACTC,QAAS,oDACTE,QAAS,8CACTD,SAAU,SAAU6G,GAChB,GAAIA,EAAIzK,SAAWpR,KAAKoR,OAcpB,OAAmB,IAAfpR,KAAKqT,MACE,mCAEA,6BAhBX,OAAQrT,KAAKqT,OACT,KAAK,EACD,MAAO,oFACX,KAAK,EACL,KAAK,EACL,KAAK,EACD,MAAO,oFACX,KAAK,EACL,KAAK,EACL,KAAK,EACD,MAAO,sFAUvB6B,SAAU,SAAU2G,GAChB,GAAIA,EAAIzK,SAAWpR,KAAKoR,OAcpB,OAAmB,IAAfpR,KAAKqT,MACE,mCAEA,6BAhBX,OAAQrT,KAAKqT,OACT,KAAK,EACD,MAAO,wEACX,KAAK,EACL,KAAK,EACL,KAAK,EACD,MAAO,wEACX,KAAK,EACL,KAAK,EACL,KAAK,EACD,MAAO,0EAUvB8B,SAAU,KAEdQ,aAAc,CACVC,OAAQ,oCACRC,KAAM,oCACNnI,EAAG,8FACHoI,GAAI+sB,GACJngC,EAAGmgC,GACH9sB,GAAI8sB,GACJ7sB,EAAG,qBACHC,GAAI4sB,GACJpwB,EAAG,2BACHyD,GAAI2sB,GACJxsB,EAAG,iCACHC,GAAIusB,GACJvyB,EAAG,qBACHiG,GAAIssB,IAERrsB,cAAe,6GACfnC,KAAM,SAAU9T,GACZ,MAAO,8DAAiBqJ,KAAKrJ,IAEjCkD,SAAU,SAAU+Z,EAAMkB,EAAQ+P,GAC9B,OAAIjR,EAAO,EACA,2BACAA,EAAO,GACP,2BACAA,EAAO,GACP,qBAEA,wCAGf9H,uBAAwB,uCACxB9M,QAAS,SAAUjB,EAAQ+a,GACvB,OAAQA,GACJ,IAAK,IACL,IAAK,IACL,IAAK,MACD,OAAO/a,EAAS,UACpB,IAAK,IACD,OAAOA,EAAS,gBACpB,IAAK,IACL,IAAK,IACD,OAAOA,EAAS,UACpB,QACI,OAAOA,IAGnByJ,KAAM,CACFL,IAAK,EACLC,IAAK,KAMb,IAAI+xB,GAAW,CACP,iCACA,6CACA,2BACA,iCACA,qBACA,qBACA,uCACA,2BACA,6CACA,uCACA,iCACA,kCAEJC,GAAS,CAAC,qBAAO,2BAAQ,iCAAS,2BAAQ,2BAAQ,qBAAO,4BAE7D7iC,EAAM0X,aAAa,KAAM,CACrBhJ,OAAQk0B,GACRn0B,YAAam0B,GACb3wB,SAAU4wB,GACV7wB,cAAe6wB,GACf9wB,YAAa8wB,GACbt5B,eAAgB,CACZ2L,GAAI,QACJD,IAAK,WACLE,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,gCAEVe,cAAe,wCACfnC,KAAM,SAAU9T,GACZ,MAAO,uBAAUA,GAErBkD,SAAU,SAAU+Z,EAAMkB,EAAQ+P,GAC9B,OAAIjR,EAAO,GACA,qBAEJ,sBAEX3I,SAAU,CACNC,QAAS,oBACTC,QAAS,sCACTC,SAAU,2EACVC,QAAS,sCACTC,SAAU,mFACVC,SAAU,KAEdQ,aAAc,CACVC,OAAQ,wBACRC,KAAM,kBACNnI,EAAG,oDACHoI,GAAI,oCACJpT,EAAG,kCACHqT,GAAI,wBACJC,EAAG,wCACHC,GAAI,8BACJxD,EAAG,8CACHyD,GAAI,oCACJG,EAAG,8CACHC,GAAI,oCACJhG,EAAG,kCACHiG,GAAI,yBAERuH,SAAU,SAAUhE,GAChB,OAAOA,EAAO1Q,QAAQ,UAAM,MAEhCqe,WAAY,SAAU3N,GAClB,OAAOA,EAAO1Q,QAAQ,KAAM,WAEhCgI,KAAM,CACFL,IAAK,EACLC,IAAK,KAMb7Q,EAAM0X,aAAa,KAAM,CACrBhJ,OAAQ,wNAAmJK,MACvJ,KAEJN,YAAa,oFAA6DM,MACtE,KAEJkD,SAAU,gGAA6ElD,MACnF,KAEJiD,cAAe,2CAAmCjD,MAAM,KACxDgD,YAAa,gBAAgBhD,MAAM,KACnCxF,eAAgB,CACZ2L,GAAI,QACJD,IAAK,WACLE,EAAG,aACHC,GAAI,oBACJC,IAAK,gCACLC,KAAM,uCAEVZ,SAAU,CACNC,QAAS,eACTC,QAAS,iBACTC,SAAU,eACVC,QAAS,eACTC,SAAU,wBACVC,SAAU,KAEdQ,aAAc,CACVC,OAAQ,iBACRC,KAAM,gBACNnI,EAAG,mBACHoI,GAAI,eACJpT,EAAG,eACHqT,GAAI,cACJC,EAAG,cACHC,GAAI,aACJxD,EAAG,cACHyD,GAAI,cACJG,EAAG,gBACHC,GAAI,cACJhG,EAAG,aACHiG,GAAI,YAERb,uBAAwB,YACxB9M,QAAS,MACTwI,KAAM,CACFL,IAAK,EACLC,IAAK,KAOb7Q,EAAM0X,aAAa,KAAM,CACrBhJ,OAAQ,sgBAAkGK,MACtG,KAEJN,YAAa,0QAAwDM,MACjE,KAEJkD,SAAU,mVAAgElD,MACtE,KAEJiD,cAAe,mJAAgCjD,MAAM,KACrDgD,YAAa,iFAAqBhD,MAAM,KACxCojB,oBAAoB,EACpB5oB,eAAgB,CACZ2L,GAAI,SACJD,IAAK,YACLE,EAAG,aACHC,GAAI,cACJC,IAAK,sBACLC,KAAM,0DAEVZ,SAAU,CACNC,QAAS,4BACTC,QAAS,kCACTC,SAAU,kBACVC,QAAS,kCACTC,SAAU,yDACVC,SAAU,KAEdQ,aAAc,CACVC,OAAQ,6BACRC,KAAM,oCACNnI,EAAG,sEACHoI,GAAI,oCACJpT,EAAG,yDACHqT,GAAI,sDACJC,EAAG,qBACHC,GAAI,wBACJxD,EAAG,2BACHyD,GAAI,wBACJG,EAAG,2BACHC,GAAI,wBACJhG,EAAG,qBACHiG,GAAI,yBAERb,uBAAwB,mCACxB9M,QAAS,SAAUjB,GACf,OAAOA,EAAS,6BAEpB6O,cAAe,iHACfnC,KAAM,SAAU9T,GACZ,MAAiB,mBAAVA,GAA8B,0CAAVA,GAE/BkD,SAAU,SAAUoQ,EAAOE,EAAS0a,GAChC,OAAY,GAAR5a,EACO4a,EAAU,iBAAS,wCAEnBA,EAAU,uBAAU,2CAOvC,IAAIwU,GAAW,yGAAoF/zB,MAC3F,KAEJg0B,GAAgB,2DAAkDh0B,MAAM,KAC5E,SAASi0B,GAASnxB,GACd,OAAW,EAAJA,GAASA,EAAI,EAExB,SAASoxB,GAAYz7B,EAAQ+f,EAAejhB,EAAKomB,GAC7C,IAAIrS,EAAS7S,EAAS,IACtB,OAAQlB,GACJ,IAAK,IACD,OAAOihB,GAAiBmF,EAAW,mBAAe,mBACtD,IAAK,KACD,OAAInF,GAAiBmF,EACVrS,GAAU2oB,GAASx7B,GAAU,UAAY,aAEzC6S,EAAS,YAExB,IAAK,IACD,OAAOkN,EAAgB,YAAWmF,EAAW,YAAW,aAC5D,IAAK,KACD,OAAInF,GAAiBmF,EACVrS,GAAU2oB,GAASx7B,GAAU,YAAW,YAExC6S,EAAS,cAExB,IAAK,IACD,OAAOkN,EAAgB,SAAWmF,EAAW,SAAW,UAC5D,IAAK,KACD,OAAInF,GAAiBmF,EACVrS,GAAU2oB,GAASx7B,GAAU,SAAW,YAExC6S,EAAS,WAExB,IAAK,IACD,OAAOkN,GAAiBmF,EAAW,WAAQ,YAC/C,IAAK,KACD,OAAInF,GAAiBmF,EACVrS,GAAU2oB,GAASx7B,GAAU,MAAQ,UAErC6S,EAAS,aAExB,IAAK,IACD,OAAOkN,GAAiBmF,EAAW,SAAW,WAClD,IAAK,KACD,OAAInF,GAAiBmF,EACVrS,GAAU2oB,GAASx7B,GAAU,UAAY,YAEzC6S,EAAS,WAExB,IAAK,IACD,OAAOkN,GAAiBmF,EAAW,MAAQ,QAC/C,IAAK,KACD,OAAInF,GAAiBmF,EACVrS,GAAU2oB,GAASx7B,GAAU,OAAS,SAEtC6S,EAAS,SAoFhC,SAAS6oB,GAAsB17B,EAAQ+f,EAAejhB,EAAKomB,GACvD,IAAIrS,EAAS7S,EAAS,IACtB,OAAQlB,GACJ,IAAK,IACD,OAAOihB,GAAiBmF,EAClB,eACA,kBACV,IAAK,KAUD,OARIrS,GADW,IAAX7S,EACU+f,EAAgB,UAAY,UACpB,IAAX/f,EACG+f,GAAiBmF,EAAW,UAAY,WAC3CllB,EAAS,EACN+f,GAAiBmF,EAAW,UAAY,WAExC,SAGlB,IAAK,IACD,OAAOnF,EAAgB,aAAe,aAC1C,IAAK,KAUD,OARIlN,GADW,IAAX7S,EACU+f,EAAgB,SAAW,SACnB,IAAX/f,EACG+f,GAAiBmF,EAAW,SAAW,WAC1CllB,EAAS,EACN+f,GAAiBmF,EAAW,SAAW,WAEvCnF,GAAiBmF,EAAW,QAAU,WAGxD,IAAK,IACD,OAAOnF,EAAgB,UAAY,UACvC,IAAK,KAUD,OARIlN,GADW,IAAX7S,EACU+f,EAAgB,MAAQ,MAChB,IAAX/f,EACG+f,GAAiBmF,EAAW,MAAQ,QACvCllB,EAAS,EACN+f,GAAiBmF,EAAW,MAAQ,QAEpCnF,GAAiBmF,EAAW,KAAO,QAGrD,IAAK,IACD,OAAOnF,GAAiBmF,EAAW,SAAW,YAClD,IAAK,KAQD,OANIrS,GADW,IAAX7S,EACU+f,GAAiBmF,EAAW,MAAQ,OAC5B,IAAXllB,EACG+f,GAAiBmF,EAAW,MAAQ,UAEpCnF,GAAiBmF,EAAW,MAAQ,QAGtD,IAAK,IACD,OAAOnF,GAAiBmF,EAAW,WAAa,eACpD,IAAK,KAUD,OARIrS,GADW,IAAX7S,EACU+f,GAAiBmF,EAAW,QAAU,UAC9B,IAAXllB,EACG+f,GAAiBmF,EAAW,SAAW,WAC1CllB,EAAS,EACN+f,GAAiBmF,EAAW,SAAW,SAEvCnF,GAAiBmF,EAAW,UAAY,SAG1D,IAAK,IACD,OAAOnF,GAAiBmF,EAAW,WAAa,aACpD,IAAK,KAUD,OARIrS,GADW,IAAX7S,EACU+f,GAAiBmF,EAAW,OAAS,QAC7B,IAAXllB,EACG+f,GAAiBmF,EAAW,OAAS,SACxCllB,EAAS,EACN+f,GAAiBmF,EAAW,OAAS,OAErCnF,GAAiBmF,EAAW,MAAQ,QA7J9D1sB,EAAM0X,aAAa,KAAM,CACrBhJ,OAAQo0B,GACRr0B,YAAas0B,GACb9wB,SAAU,gEAAsDlD,MAAM,KACtEiD,cAAe,4BAAuBjD,MAAM,KAC5CgD,YAAa,4BAAuBhD,MAAM,KAC1CxF,eAAgB,CACZ2L,GAAI,OACJD,IAAK,UACLE,EAAG,aACHC,GAAI,eACJC,IAAK,oBACLC,KAAM,0BAEVZ,SAAU,CACNC,QAAS,cACTC,QAAS,gBACTC,SAAU,WACN,OAAQhV,KAAKqT,OACT,KAAK,EACD,MAAO,uBACX,KAAK,EACL,KAAK,EACD,MAAO,kBACX,KAAK,EACD,MAAO,kBACX,KAAK,EACD,MAAO,yBACX,KAAK,EACD,MAAO,kBACX,KAAK,EACD,MAAO,oBAGnB4B,QAAS,oBACTC,SAAU,WACN,OAAQlV,KAAKqT,OACT,KAAK,EACD,MAAO,+BACX,KAAK,EACL,KAAK,EACD,MAAO,0BACX,KAAK,EACD,MAAO,0BACX,KAAK,EACL,KAAK,EACD,MAAO,0BACX,KAAK,EACD,MAAO,4BAGnB8B,SAAU,KAEdQ,aAAc,CACVC,OAAQ,QACRC,KAAM,UACNnI,EAAG01B,GACHttB,GAAIstB,GACJ1gC,EAAG0gC,GACHrtB,GAAIqtB,GACJptB,EAAGotB,GACHntB,GAAImtB,GACJ3wB,EAAG2wB,GACHltB,GAAIktB,GACJ/sB,EAAG+sB,GACH9sB,GAAI8sB,GACJ9yB,EAAG8yB,GACH7sB,GAAI6sB,IAER1tB,uBAAwB,YACxB9M,QAAS,MACTwI,KAAM,CACFL,IAAK,EACLC,IAAK,KA0Fb7Q,EAAM0X,aAAa,KAAM,CACrBhJ,OAAQ,wFAAwFK,MAC5F,KAEJN,YAAa,8DAA8DM,MACvE,KAEJmoB,kBAAkB,EAClBjlB,SAAU,2DAAsDlD,MAAM,KACtEiD,cAAe,0CAAqCjD,MAAM,KAC1DgD,YAAa,4BAAuBhD,MAAM,KAC1CojB,oBAAoB,EACpB5oB,eAAgB,CACZ2L,GAAI,OACJD,IAAK,UACLE,EAAG,eACHC,GAAI,eACJC,IAAK,oBACLC,KAAM,2BAEVZ,SAAU,CACNC,QAAS,gBACTC,QAAS,gBAETC,SAAU,WACN,OAAQhV,KAAKqT,OACT,KAAK,EACD,MAAO,wBACX,KAAK,EACD,MAAO,sBACX,KAAK,EACD,MAAO,uBACX,KAAK,EACL,KAAK,EACL,KAAK,EACL,KAAK,EACD,MAAO,qBAGnB4B,QAAS,sBACTC,SAAU,WACN,OAAQlV,KAAKqT,OACT,KAAK,EACD,MAAO,oCACX,KAAK,EACD,MAAO,kCACX,KAAK,EACD,MAAO,mCACX,KAAK,EACL,KAAK,EACL,KAAK,EACL,KAAK,EACD,MAAO,iCAGnB8B,SAAU,KAEdQ,aAAc,CACVC,OAAQ,cACRC,KAAM,UACNnI,EAAG21B,GACHvtB,GAAIutB,GACJ3gC,EAAG2gC,GACHttB,GAAIstB,GACJrtB,EAAGqtB,GACHptB,GAAIotB,GACJ5wB,EAAG4wB,GACHntB,GAAImtB,GACJhtB,EAAGgtB,GACH/sB,GAAI+sB,GACJ/yB,EAAG+yB,GACH9sB,GAAI8sB,IAER3tB,uBAAwB,YACxB9M,QAAS,MACTwI,KAAM,CACFL,IAAK,EACLC,IAAK,KAMb7Q,EAAM0X,aAAa,KAAM,CACrBhJ,OAAQ,mFAAgFK,MACpF,KAEJN,YAAa,qDAAkDM,MAAM,KACrEkD,SAAU,8EAA4DlD,MAClE,KAEJiD,cAAe,oCAA8BjD,MAAM,KACnDgD,YAAa,sBAAmBhD,MAAM,KACtCojB,oBAAoB,EACpB9b,cAAe,QACfnC,KAAM,SAAU9T,GACZ,MAA2B,MAApBA,EAAMiuB,OAAO,IAExB/qB,SAAU,SAAUoQ,EAAOE,EAAS0a,GAChC,OAAO5a,EAAQ,GAAK,KAAO,MAE/BnK,eAAgB,CACZ2L,GAAI,QACJD,IAAK,WACLE,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,2BAEVZ,SAAU,CACNC,QAAS,iBACTC,QAAS,sBACTC,SAAU,kBACVC,QAAS,iBACTC,SAAU,2BACVC,SAAU,KAEdQ,aAAc,CACVC,OAAQ,WACRC,KAAM,mBACNnI,EAAG,eACHoI,GAAI,aACJpT,EAAG,mBACHqT,GAAI,YACJC,EAAG,gBACHC,GAAI,YACJxD,EAAG,iBACHyD,GAAI,aACJG,EAAG,cACHC,GAAI,UACJhG,EAAG,aACHiG,GAAI,WAERb,uBAAwB,YACxB9M,QAAS,MACTwI,KAAM,CACFL,IAAK,EACLC,IAAK,KAMb,IAAIsyB,GAAe,CACfvD,MAAO,CAEHjqB,GAAI,CAAC,6CAAW,6CAAW,8CAC3BpT,EAAG,CAAC,gEAAe,uEACnBqT,GAAI,CAAC,iCAAS,uCAAU,wCACxBC,EAAG,CAAC,oDAAa,iEACjBC,GAAI,CAAC,qBAAO,2BAAQ,4BACpBC,GAAI,CAAC,qBAAO,2BAAQ,4BACpBI,GAAI,CAAC,iCAAS,uCAAU,wCACxBC,GAAI,CAAC,uCAAU,uCAAU,yCAE7BypB,uBAAwB,SAAUr4B,EAAQs4B,GACtC,OAAkB,IAAXt4B,EACDs4B,EAAQ,GACE,GAAVt4B,GAAeA,GAAU,EACzBs4B,EAAQ,GACRA,EAAQ,IAElBzI,UAAW,SAAU7vB,EAAQ+f,EAAejhB,GACxC,IAAIw5B,EAAUqD,GAAavD,MAAMt5B,GACjC,OAAmB,IAAfA,EAAIpF,OACGqmB,EAAgBuY,EAAQ,GAAKA,EAAQ,GAGxCt4B,EACA,IACA27B,GAAatD,uBAAuBr4B,EAAQs4B,KAM5D9/B,EAAM0X,aAAa,UAAW,CAC1BhJ,OAAQ,4aAAmFK,MACvF,KAEJN,YAAa,+OAA2DM,MACpE,KAEJmoB,kBAAkB,EAClBjlB,SAAU,uRAAsDlD,MAAM,KACtEiD,cAAe,8IAAqCjD,MAAM,KAC1DgD,YAAa,6FAAuBhD,MAAM,KAC1CojB,oBAAoB,EACpB5oB,eAAgB,CACZ2L,GAAI,OACJD,IAAK,UACLE,EAAG,aACHC,GAAI,eACJC,IAAK,oBACLC,KAAM,2BAEVZ,SAAU,CACNC,QAAS,6CACTC,QAAS,6CACTC,SAAU,WACN,OAAQhV,KAAKqT,OACT,KAAK,EACD,MAAO,8DACX,KAAK,EACD,MAAO,wDACX,KAAK,EACD,MAAO,8DACX,KAAK,EACL,KAAK,EACL,KAAK,EACL,KAAK,EACD,MAAO,8BAGnB4B,QAAS,uCACTC,SAAU,WAUN,MATmB,CACf,4FACA,oHACA,kGACA,sFACA,8GACA,4FACA,6FAEgBlV,KAAKqT,QAE7B8B,SAAU,KAEdQ,aAAc,CACVC,OAAQ,kBACRC,KAAM,wBACNnI,EAAG,8FACHoI,GAAIwtB,GAAa9L,UACjB90B,EAAG4gC,GAAa9L,UAChBzhB,GAAIutB,GAAa9L,UACjBxhB,EAAGstB,GAAa9L,UAChBvhB,GAAIqtB,GAAa9L,UACjB/kB,EAAG,qBACHyD,GAAIotB,GAAa9L,UACjBnhB,EAAG,iCACHC,GAAIgtB,GAAa9L,UACjBlnB,EAAG,uCACHiG,GAAI+sB,GAAa9L,WAErB9hB,uBAAwB,YACxB9M,QAAS,MACTwI,KAAM,CACFL,IAAK,EACLC,IAAK,KAMb,IAAIuyB,GAAe,CACfxD,MAAO,CAEHjqB,GAAI,CAAC,UAAW,UAAW,WAC3BpT,EAAG,CAAC,cAAe,gBACnBqT,GAAI,CAAC,QAAS,SAAU,UACxBC,EAAG,CAAC,YAAa,eACjBC,GAAI,CAAC,MAAO,OAAQ,QACpBC,GAAI,CAAC,MAAO,OAAQ,QACpBI,GAAI,CAAC,QAAS,SAAU,UACxBC,GAAI,CAAC,SAAU,SAAU,WAE7BypB,uBAAwB,SAAUr4B,EAAQs4B,GACtC,OAAkB,IAAXt4B,EACDs4B,EAAQ,GACE,GAAVt4B,GAAeA,GAAU,EACzBs4B,EAAQ,GACRA,EAAQ,IAElBzI,UAAW,SAAU7vB,EAAQ+f,EAAejhB,GACxC,IAAIw5B,EAAUsD,GAAaxD,MAAMt5B,GACjC,OAAmB,IAAfA,EAAIpF,OACGqmB,EAAgBuY,EAAQ,GAAKA,EAAQ,GAGxCt4B,EACA,IACA47B,GAAavD,uBAAuBr4B,EAAQs4B,KAM5D9/B,EAAM0X,aAAa,KAAM,CACrBhJ,OAAQ,mFAAmFK,MACvF,KAEJN,YAAa,2DAA2DM,MACpE,KAEJmoB,kBAAkB,EAClBjlB,SAAU,6DAAwDlD,MAC9D,KAEJiD,cAAe,0CAAqCjD,MAAM,KAC1DgD,YAAa,4BAAuBhD,MAAM,KAC1CojB,oBAAoB,EACpB5oB,eAAgB,CACZ2L,GAAI,OACJD,IAAK,UACLE,EAAG,aACHC,GAAI,eACJC,IAAK,oBACLC,KAAM,2BAEVZ,SAAU,CACNC,QAAS,eACTC,QAAS,eACTC,SAAU,WACN,OAAQhV,KAAKqT,OACT,KAAK,EACD,MAAO,uBACX,KAAK,EACD,MAAO,qBACX,KAAK,EACD,MAAO,sBACX,KAAK,EACL,KAAK,EACL,KAAK,EACL,KAAK,EACD,MAAO,oBAGnB4B,QAAS,mBACTC,SAAU,WAUN,MATmB,CACf,iCACA,qCACA,iCACA,+BACA,wCACA,gCACA,iCAEgBlV,KAAKqT,QAE7B8B,SAAU,KAEdQ,aAAc,CACVC,OAAQ,QACRC,KAAM,SACNnI,EAAG,mBACHoI,GAAIytB,GAAa/L,UACjB90B,EAAG6gC,GAAa/L,UAChBzhB,GAAIwtB,GAAa/L,UACjBxhB,EAAGutB,GAAa/L,UAChBvhB,GAAIstB,GAAa/L,UACjB/kB,EAAG,MACHyD,GAAIqtB,GAAa/L,UACjBnhB,EAAG,QACHC,GAAIitB,GAAa/L,UACjBlnB,EAAG,SACHiG,GAAIgtB,GAAa/L,WAErB9hB,uBAAwB,YACxB9M,QAAS,MACTwI,KAAM,CACFL,IAAK,EACLC,IAAK,KAMb7Q,EAAM0X,aAAa,KAAM,CACrBhJ,OAAQ,mHAAmHK,MACvH,KAEJN,YAAa,kDAAkDM,MAAM,KACrEkD,SAAU,sEAAsElD,MAC5E,KAEJiD,cAAe,8BAA8BjD,MAAM,KACnDgD,YAAa,uBAAuBhD,MAAM,KAC1CojB,oBAAoB,EACpB5oB,eAAgB,CACZ2L,GAAI,SACJD,IAAK,YACLE,EAAG,aACHC,GAAI,cACJC,IAAK,qBACLC,KAAM,4BAEVZ,SAAU,CACNC,QAAS,mBACTC,QAAS,kBACTC,SAAU,gBACVC,QAAS,iBACTC,SAAU,8BACVC,SAAU,KAEdQ,aAAc,CACVC,OAAQ,SACRC,KAAM,iBACNnI,EAAG,qBACHoI,GAAI,cACJpT,EAAG,SACHqT,GAAI,aACJC,EAAG,SACHC,GAAI,aACJxD,EAAG,UACHyD,GAAI,cACJG,EAAG,UACHC,GAAI,cACJhG,EAAG,UACHiG,GAAI,eAERC,cAAe,mCACf/S,SAAU,SAAUoQ,EAAOE,EAAS0a,GAChC,OAAI5a,EAAQ,GACD,UACAA,EAAQ,GACR,QACAA,EAAQ,GACR,aAEA,WAGf6J,aAAc,SAAUF,EAAM/Z,GAI1B,OAHa,KAAT+Z,IACAA,EAAO,GAEM,YAAb/Z,EACO+Z,EACa,UAAb/Z,EACQ,IAAR+Z,EAAaA,EAAOA,EAAO,GACd,eAAb/Z,GAA0C,YAAbA,EACvB,IAAT+Z,EACO,EAEJA,EAAO,QAJX,GAOX9H,uBAAwB,UACxB9M,QAAS,KACTwI,KAAM,CACFL,IAAK,EACLC,IAAK,KAMb7Q,EAAM0X,aAAa,KAAM,CACrBhJ,OAAQ,wFAAwFK,MAC5F,KAEJN,YAAa,kDAAkDM,MAAM,KACrEkD,SAAU,6DAAoDlD,MAAM,KACpEiD,cAAe,uCAA8BjD,MAAM,KACnDgD,YAAa,gCAAuBhD,MAAM,KAC1CxF,eAAgB,CACZ2L,GAAI,QACJD,IAAK,WACLE,EAAG,aACHC,GAAI,cACJC,IAAK,0BACLC,KAAM,+BACNwiB,IAAK,mBACLC,KAAM,wBAEVrjB,SAAU,CACNC,QAAS,YACTC,QAAS,eACTE,QAAS,eACTD,SAAU,kBACVE,SAAU,iBACVC,SAAU,KAEdQ,aAAc,CACVC,OAAQ,QACRC,KAAM,kBACNnI,EAAG,oBACHoI,GAAI,cACJpT,EAAG,WACHqT,GAAI,aACJC,EAAG,WACHC,GAAI,YACJxD,EAAG,SACHyD,GAAI,WACJG,EAAG,cACHC,GAAI,gBACJhG,EAAG,YACHiG,GAAI,YAERb,uBAAwB,mBACxB9M,QAAS,SAAUjB,GACf,IAAI3G,EAAI2G,EAAS,GAWjB,OAAOA,GAT6B,MAAxBA,EAAS,IAAO,MAER,GAAN3G,GAEM,GAANA,GADA,KAFA,OAUlBoQ,KAAM,CACFL,IAAK,EACLC,IAAK,KAMb7Q,EAAM0X,aAAa,KAAM,CACrBhJ,OAAQ,sFAAsFK,MAC1F,KAEJN,YAAa,kDAAkDM,MAAM,KACrEkD,SAAU,8DAA8DlD,MACpE,KAEJiD,cAAe,kCAAkCjD,MAAM,KACvDgD,YAAa,uBAAuBhD,MAAM,KAC1CojB,oBAAoB,EACpB5oB,eAAgB,CACZ2L,GAAI,UACJD,IAAK,WACLE,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,2BAEVZ,SAAU,CACNC,QAAS,eACTC,QAAS,iBACTC,SAAU,8BACVC,QAAS,YACTC,SAAU,kCACVC,SAAU,KAEdQ,aAAc,CACVC,OAAQ,aACRC,KAAM,WACNnI,EAAG,aACHoI,GAAI,aACJpT,EAAG,cACHqT,GAAI,YACJC,EAAG,aACHC,GAAI,WACJxD,EAAG,YACHyD,GAAI,UACJG,EAAG,cACHC,GAAI,WACJhG,EAAG,cACHiG,GAAI,YAERnF,KAAM,CACFL,IAAK,EACLC,IAAK,KAMb,IAAIwyB,GAAc,CACV7Q,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,SACLC,EAAK,UAETqQ,GAAc,CACVC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,KAGbhkC,EAAM0X,aAAa,KAAM,CACrBhJ,OAAQ,sdAA0FK,MAC9F,KAEJN,YAAa,sdAA0FM,MACnG,KAEJkD,SAAU,ugBAA8FlD,MACpG,KAEJiD,cAAe,qQAAmDjD,MAC9D,KAEJgD,YAAa,uFAAsBhD,MAAM,KACzCxF,eAAgB,CACZ2L,GAAI,QACJD,IAAK,WACLE,EAAG,aACHC,GAAI,cACJC,IAAK,qBACLC,KAAM,4BAEVZ,SAAU,CACNC,QAAS,sCACTC,QAAS,gCACTC,SAAU,WACVC,QAAS,4CACTC,SAAU,2EACVC,SAAU,KAEdQ,aAAc,CACVC,OAAQ,wBACRC,KAAM,8BACNnI,EAAG,+FACHoI,GAAI,4DACJpT,EAAG,gEACHqT,GAAI,kEACJC,EAAG,uEACHC,GAAI,uDACJxD,EAAG,8CACHyD,GAAI,gDACJG,EAAG,oDACHC,GAAI,sDACJhG,EAAG,0DACHiG,GAAI,uDAERb,uBAAwB,4BACxB9M,QAAS,SAAUjB,GACf,OAAOA,EAAS,sBAEpBmW,SAAU,SAAUhE,GAChB,OAAOA,EAAO1Q,QAAQ,kEAAiB,SAAUD,GAC7C,OAAOs6B,GAAYt6B,MAG3Bse,WAAY,SAAU3N,GAClB,OAAOA,EAAO1Q,QAAQ,MAAO,SAAUD,GACnC,OAAOq6B,GAAYr6B,MAI3BqN,cAAe,wMACf/S,SAAU,SAAU+Z,EAAMkB,EAAQ+P,GAC9B,OAAIjR,EAAO,EACA,kCACAA,EAAO,EACP,kCACAA,EAAO,GACP,4BACAA,EAAO,GACP,8CACAA,EAAO,GACP,8CACAA,EAAO,GACP,4BAEA,mCAGfE,aAAc,SAAUF,EAAM/Z,GAI1B,OAHa,KAAT+Z,IACAA,EAAO,GAEM,mCAAb/Z,EACO+Z,EAAO,EAAIA,EAAOA,EAAO,GACZ,mCAAb/Z,GAAqC,6BAAbA,GAEX,+CAAbA,GACQ,IAAR+Z,EAFAA,EAIAA,EAAO,IAGtBpM,KAAM,CACFL,IAAK,EACLC,IAAK,KAMb7Q,EAAM0X,aAAa,KAAM,CACrBhJ,OAAQ,0cAAwFK,MAC5F,KAEJN,YAAa,oSAAmEM,MAC5E,KAEJmoB,kBAAkB,EAClBjlB,SAAU,uUAA8DlD,MACpE,KAEJiD,cAAe,+JAAkCjD,MAAM,KACvDgD,YAAa,iFAAqBhD,MAAM,KACxCxF,eAAgB,CACZ2L,GAAI,SACJD,IAAK,YACLE,EAAG,aACHC,GAAI,cACJC,IAAK,sBACLC,KAAM,6BAEVZ,SAAU,CACNC,QAAS,gCACTC,QAAS,gCACTC,SAAU,WACVC,QAAS,sCACTC,SAAU,0BACVC,SAAU,KAEdQ,aAAc,CACVC,OAAQ,kBACRC,KAAM,0CACNnI,EAAG,kFACHoI,GAAI,gDACJpT,EAAG,oDACHqT,GAAI,sDACJC,EAAG,kCACHC,GAAI,oCACJxD,EAAG,wCACHyD,GAAI,0CACJG,EAAG,kCACHC,GAAI,oCACJhG,EAAG,gEACHiG,GAAI,mEAERb,uBAAwB,gBACxB9M,QAAS,WACT4N,cAAe,wKACfkH,aAAc,SAAUF,EAAM/Z,GAI1B,OAHa,KAAT+Z,IACAA,EAAO,GAEM,yCAAb/Z,EACO+Z,EAAO,EAAIA,EAAOA,EAAO,GACZ,6BAAb/Z,EACA+Z,EACa,2DAAb/Z,EACQ,IAAR+Z,EAAaA,EAAOA,EAAO,GACd,qDAAb/Z,EACA+Z,EAAO,QADX,GAIX/Z,SAAU,SAAU+Z,EAAMkB,EAAQ+P,GAC9B,OAAIjR,EAAO,EACA,uCACAA,EAAO,GACP,2BACAA,EAAO,GACP,yDACAA,EAAO,GACP,mDAEA,wCAGfpM,KAAM,CACFL,IAAK,EACLC,IAAK,KAMb7Q,EAAM0X,aAAa,MAAO,CACtBhJ,OAAQ,6FAA0FK,MAC9F,KAEJN,YAAa,kDAAkDM,MAAM,KACrEkD,SAAU,kDAAkDlD,MAAM,KAClEiD,cAAe,iCAAiCjD,MAAM,KACtDgD,YAAa,yBAAyBhD,MAAM,KAC5CxF,eAAgB,CACZ2L,GAAI,QACJD,IAAK,WACLE,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,2BAEVZ,SAAU,CACNC,QAAS,gBACTC,QAAS,gBACTC,SAAU,gBACVC,QAAS,oBACTC,SAAU,+BACVC,SAAU,KAEdQ,aAAc,CACVC,OAAQ,SACRC,KAAM,WACNnI,EAAG,gBACHoI,GAAI,aACJpT,EAAG,aACHqT,GAAI,YACJC,EAAG,WACHC,GAAI,UACJxD,EAAG,YACHyD,GAAI,WACJG,EAAG,YACHC,GAAI,WACJhG,EAAG,YACHiG,GAAI,YAERb,uBAAwB,uBACxB9M,QAAS,SAAUjB,GACf,IAAI3G,EAAI2G,EAAS,GAWjB,OAAOA,GAT6B,MAAxBA,EAAS,IAAO,IACd,KACM,GAAN3G,EACA,KACM,GAANA,EACA,KACM,GAANA,EACA,KACA,OAGlBoQ,KAAM,CACFL,IAAK,EACLC,IAAK,KAMb,IAAIozB,GAAa,CACbhR,EAAG,gBACHT,EAAG,gBACHC,EAAG,gBACHC,EAAG,gBACHC,EAAG,gBACHC,EAAG,gBACHC,EAAG,gBACHC,EAAG,gBACHC,EAAG,gBACHC,EAAG,gBACH2B,GAAI,gBACJuP,GAAI,gBACJC,GAAI,gBACJ3P,GAAI,gBACJI,GAAI,gBACJwI,GAAI,gBACJ3I,GAAI,gBACJI,GAAI,gBACJP,GAAI,gBACJC,GAAI,gBACJO,GAAI,gBACJJ,IAAK,iBAGT10B,EAAM0X,aAAa,KAAM,CACrBhJ,OAAQ,gXAAyEK,MAC7E,KAEJN,YAAa,sOAAkDM,MAAM,KACrEkD,SAAU,ySAAyDlD,MAC/D,KAEJiD,cAAe,uIAA8BjD,MAAM,KACnDgD,YAAa,6FAAuBhD,MAAM,KAC1CxF,eAAgB,CACZ2L,GAAI,QACJD,IAAK,WACLE,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,2BAEVZ,SAAU,CACNC,QAAS,qEACTC,QAAS,qEACTE,QAAS,qEACTD,SAAU,uHACVE,SAAU,mIACVC,SAAU,KAEdQ,aAAc,CACVC,OAAQ,oCACRC,KAAM,wBACNnI,EAAG,sEACHhL,EAAG,oDACHqT,GAAI,0CACJC,EAAG,wCACHC,GAAI,8BACJxD,EAAG,kCACHyD,GAAI,wBACJG,EAAG,kCACHC,GAAI,wBACJhG,EAAG,kCACHiG,GAAI,yBAERC,cAAe,gGACfkH,aAAc,SAAUF,EAAM/Z,GAI1B,OAHa,KAAT+Z,IACAA,EAAO,GAEM,uBAAb/Z,EACO+Z,EAAO,EAAIA,EAAOA,EAAO,GACZ,6BAAb/Z,EACA+Z,EACa,uBAAb/Z,EACQ,IAAR+Z,EAAaA,EAAOA,EAAO,GACd,mCAAb/Z,EACA+Z,EAAO,QADX,GAIX/Z,SAAU,SAAU+Z,EAAMkB,EAAQ+P,GAC9B,OAAIjR,EAAO,EACA,qBACAA,EAAO,GACP,2BACAA,EAAO,GACP,qBACAA,EAAO,GACP,iCAEA,sBAGf9H,uBAAwB,sCACxB9M,QAAS,SAAUjB,GAGf,OAAOA,GAAUy8B,GAAWz8B,IAAWy8B,GAF/Bz8B,EAAS,KAEuCy8B,GADtC,KAAVz8B,EAAgB,IAAM,QAGlCyJ,KAAM,CACFL,IAAK,EACLC,IAAK,KAMb7Q,EAAM0X,aAAa,KAAM,CACrBhJ,OAAQ,khBAAoGK,MACxG,KAEJN,YAAa,wMAAiEM,MAC1E,KAEJmoB,kBAAkB,EAClBjlB,SAAU,yPAAiDlD,MAAM,KACjEiD,cAAe,uOAA8CjD,MAAM,KACnEgD,YAAa,sEAAyBhD,MAAM,KAC5CojB,oBAAoB,EACpB5oB,eAAgB,CACZ2L,GAAI,OACJD,IAAK,UACLE,EAAG,aACHC,GAAI,cACJC,IAAK,4CACLC,KAAM,sFAEVe,cAAe,4HACfnC,KAAM,SAAU9T,GACZ,MAAiB,iEAAVA,GAEXkD,SAAU,SAAU+Z,EAAMkB,EAAQ+P,GAC9B,OAAIjR,EAAO,GACA,+DAEA,gEAGf3I,SAAU,CACNC,QAAS,qEACTC,QAAS,iFACTC,SAAU,6DACVC,QAAS,mGACTC,SAAU,mGACVC,SAAU,KAEdQ,aAAc,CACVC,OAAQ,wBACRC,KAAM,+CACNnI,EAAG,2EACHoI,GAAI,0CACJpT,EAAG,6BACHqT,GAAI,8BACJC,EAAG,+CACHC,GAAI,gDACJxD,EAAG,uBACHyD,GAAI,wBACJG,EAAG,mCACHC,GAAI,oCACJhG,EAAG,iBACHiG,GAAI,qBAMZ,IAAIguB,GAAa,CACb5R,EAAG,QACHI,EAAG,QACHG,EAAG,QACHuB,GAAI,QACJC,GAAI,QACJ9B,EAAG,OACHK,EAAG,OACH0B,GAAI,OACJC,GAAI,OACJ/B,EAAG,WACHC,EAAG,WACH+B,IAAK,WACL7B,EAAG,OACHG,EAAG,QACH2B,GAAI,QACJC,GAAI,QACJC,GAAI,QACJC,GAAI,SAGR90B,EAAM0X,aAAa,KAAM,CACrBhJ,OAAQ,oGAA+EK,MACnF,KAEJN,YAAa,iEAAkDM,MAAM,KACrEkD,SAAU,4FAAwDlD,MAC9D,KAEJiD,cAAe,mDAA8BjD,MAAM,KACnDgD,YAAa,4CAAuBhD,MAAM,KAC1CxF,eAAgB,CACZ2L,GAAI,QACJD,IAAK,WACLE,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,2BAEVZ,SAAU,CACNC,QAAS,sBACTC,QAAS,mBACTC,SAAU,2BACVC,QAAS,kBACTC,SAAU,6BACVC,SAAU,KAEdQ,aAAc,CACVC,OAAQ,cACRC,KAAM,gBACNnI,EAAG,uBACHhL,EAAG,YACHqT,GAAI,WACJC,EAAG,YACHC,GAAI,WACJxD,EAAG,aACHyD,GAAI,YACJG,EAAG,YACHC,GAAI,WACJhG,EAAG,aACHiG,GAAI,aAER3N,QAAS,SAAUjB,EAAQ+a,GACvB,OAAQA,GACJ,IAAK,IACL,IAAK,IACL,IAAK,KACL,IAAK,KACD,OAAO/a,EACX,QACI,GAAe,IAAXA,EAEA,OAAOA,EAAS,QAEpB,IAAI5G,EAAI4G,EAAS,GAGjB,OAAOA,GAAU48B,GAAWxjC,IAAMwjC,GAFzB58B,EAAS,IAAO5G,IAE0BwjC,GADjC,KAAV58B,EAAgB,IAAM,SAI1CyJ,KAAM,CACFL,IAAK,EACLC,IAAK,KAMb7Q,EAAM0X,aAAa,QAAS,CACxBhJ,OAAQ,0FAA0FK,MAC9F,KAEJN,YAAa,kDAAkDM,MAAM,KACrEkD,SAAU,yDAAyDlD,MAC/D,KAEJiD,cAAe,8BAA8BjD,MAAM,KACnDgD,YAAa,wBAAwBhD,MAAM,KAC3CxF,eAAgB,CACZ2L,GAAI,QACJD,IAAK,WACLE,EAAG,YACHC,GAAI,eACJC,IAAK,qBACLC,KAAM,6BAEVZ,SAAU,CACNC,QAAS,oBACTC,QAAS,gBACTC,SAAU,0BACVC,QAAS,eACTC,SAAU,4BACVC,SAAU,KAEdQ,aAAc,CACVC,OAAQ,gBACRC,KAAM,mBACNnI,EAAG,gBACHoI,GAAI,aACJpT,EAAG,eACHqT,GAAI,YACJC,EAAG,aACHC,GAAI,UACJxD,EAAG,aACHyD,GAAI,UACJG,EAAG,cACHC,GAAI,WACJhG,EAAG,aACHiG,GAAI,WAERb,uBAAwB,UACxB9M,QAAS,SAAUjB,GACf,OAAOA,GAEXyJ,KAAM,CACFL,IAAK,EACLC,IAAK,KAMb,IAAIwzB,GAAe,2DAAiDt1B,MAAM,KA4B1E,SAASu1B,GAAY98B,EAAQ+f,EAAe5N,EAAQ+S,GAChD,IAAI6X,EAiBR,SAAsB/8B,GAClB,IAAIg9B,EAAU58B,KAAKiD,MAAOrD,EAAS,IAAQ,KACvCi9B,EAAM78B,KAAKiD,MAAOrD,EAAS,IAAO,IAClCk9B,EAAMl9B,EAAS,GACfm9B,EAAO,GACG,EAAVH,IACAG,GAAQN,GAAaG,GAAW,SAE1B,EAANC,IACAE,IAAkB,KAATA,EAAc,IAAM,IAAMN,GAAaI,GAAO,OAEjD,EAANC,IACAC,IAAkB,KAATA,EAAc,IAAM,IAAMN,GAAaK,IAEpD,MAAgB,KAATC,EAAc,OAASA,EA/BbC,CAAap9B,GAC9B,OAAQmS,GACJ,IAAK,KACD,OAAO4qB,EAAa,OACxB,IAAK,KACD,OAAOA,EAAa,OACxB,IAAK,KACD,OAAOA,EAAa,OACxB,IAAK,KACD,OAAOA,EAAa,OACxB,IAAK,KACD,OAAOA,EAAa,OACxB,IAAK,KACD,OAAOA,EAAa,QAqBhCvkC,EAAM0X,aAAa,MAAO,CACtBhJ,OAAQ,iSAAkMK,MACtM,KAEJN,YAAa,6JAA0HM,MACnI,KAEJmoB,kBAAkB,EAClBjlB,SAAU,2DAA2DlD,MACjE,KAEJiD,cAAe,2DAA2DjD,MACtE,KAEJgD,YAAa,2DAA2DhD,MACpE,KAEJxF,eAAgB,CACZ2L,GAAI,QACJD,IAAK,WACLE,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,2BAEVZ,SAAU,CACNC,QAAS,cACTC,QAAS,mBACTC,SAAU,MACVC,QAAS,wBACTC,SAAU,MACVC,SAAU,KAEdQ,aAAc,CACVC,OA/FR,SAAyBtM,GACrB,IAAIsd,EAAOtd,EASX,OARAsd,GAC+B,IAA3Btd,EAAOyE,QAAQ,OACT6Y,EAAKjgB,MAAM,GAAI,GAAK,OACO,IAA3B2C,EAAOyE,QAAQ,OACf6Y,EAAKjgB,MAAM,GAAI,GAAK,OACO,IAA3B2C,EAAOyE,QAAQ,OACf6Y,EAAKjgB,MAAM,GAAI,GAAK,MACpBigB,EAAO,QAuFb/Q,KAnFR,SAAuBvM,GACnB,IAAIsd,EAAOtd,EASX,OARAsd,GAC+B,IAA3Btd,EAAOyE,QAAQ,OACT6Y,EAAKjgB,MAAM,GAAI,GAAK,YACO,IAA3B2C,EAAOyE,QAAQ,OACf6Y,EAAKjgB,MAAM,GAAI,GAAK,OACO,IAA3B2C,EAAOyE,QAAQ,OACf6Y,EAAKjgB,MAAM,GAAI,GAAK,MACpBigB,EAAO,QA2EblZ,EAAG,UACHoI,GAAI2uB,GACJ/hC,EAAG,eACHqT,GAAI0uB,GACJzuB,EAAG,eACHC,GAAIwuB,GACJhyB,EAAG,eACHyD,GAAIuuB,GACJpuB,EAAG,eACHC,GAAImuB,GACJn0B,EAAG,eACHiG,GAAIkuB,IAER/uB,uBAAwB,YACxB9M,QAAS,MACTwI,KAAM,CACFL,IAAK,EACLC,IAAK,KAMb,IAAIg0B,GAAa,CACbrS,EAAG,QACHI,EAAG,QACHG,EAAG,QACHuB,GAAI,QACJC,GAAI,QACJ9B,EAAG,OACHK,EAAG,OACH0B,GAAI,OACJC,GAAI,OACJ/B,EAAG,cACHC,EAAG,cACH+B,IAAK,cACL7B,EAAG,YACHG,EAAG,QACH2B,GAAI,QACJC,GAAI,QACJC,GAAI,kBACJC,GAAI,mBA+IR,SAASgQ,GAAsBt9B,EAAQ+f,EAAejhB,EAAKomB,GACvD,IAAIzqB,EAAS,CACTsL,EAAG,CAAC,kBAAmB,mBACvBoI,GAAI,CAACnO,EAAS,WAAiBA,EAAS,YACxCjF,EAAG,CAAC,aAAW,iBACfqT,GAAI,CAACpO,EAAS,YAAeA,EAAS,aACtCqO,EAAG,CAAC,aAAW,kBACfC,GAAI,CAACtO,EAAS,YAAeA,EAAS,aACtC8K,EAAG,CAAC,UAAW,eACfyD,GAAI,CAACvO,EAAS,SAAeA,EAAS,UACtC0O,EAAG,CAAC,SAAU,aACdC,GAAI,CAAC3O,EAAS,SAAeA,EAAS,UACtC2I,EAAG,CAAC,QAAS,YACbiG,GAAI,CAAC5O,EAAS,OAAaA,EAAS,SAExC,OAAOklB,GAEDnF,EADAtlB,EAAOqE,GAAK,GAGZrE,EAAOqE,GAAK,GA4NtB,SAASy+B,GAAyBv9B,EAAQ+f,EAAejhB,GACrD,IAToB0uB,EAChBC,EAgBJ,MAAY,MAAR3uB,EACOihB,EAAgB,6CAAY,6CACpB,MAARjhB,EACAihB,EAAgB,uCAAW,uCAE3B/f,EAAS,KAtBAwtB,GAsB6BxtB,EArB7CytB,EAQS,CACTtf,GAAI4R,EAAgB,6HAA2B,6HAC/C3R,GAAI2R,EAAgB,6HAA2B,6HAC/CzR,GAAIyR,EAAgB,2GAAwB,2GAC5CxR,GAAI,uEACJI,GAAI,uHACJC,GAAI,8EAOkC9P,GArBzByI,MAAM,KAChBimB,EAAM,IAAO,GAAKA,EAAM,KAAQ,GACjCC,EAAM,GACM,GAAZD,EAAM,IAAWA,EAAM,IAAM,IAAMA,EAAM,IAAM,IAAmB,IAAbA,EAAM,KAC3DC,EAAM,GACNA,EAAM,IAiDhB,SAAS+P,GAAqBhT,GAC1B,OAAO,WACH,OAAOA,EAAM,UAAwB,KAAjBnyB,KAAK6T,QAAiB,SAAM,IAAM,QA5a9D1T,EAAM0X,aAAa,KAAM,CACrBhJ,OAAQ,yGAA6EK,MACjF,KAEJN,YAAa,4DAAkDM,MAAM,KACrEkD,SAAU,0EAAwDlD,MAC9D,KAEJiD,cAAe,iCAA8BjD,MAAM,KACnDgD,YAAa,0BAAuBhD,MAAM,KAC1CzL,SAAU,SAAUoQ,EAAOE,EAAS0a,GAChC,OAAI5a,EAAQ,GACD4a,EAAU,WAAO,WAEjBA,EAAU,QAAO,SAGhCjY,cAAe,gCACfnC,KAAM,SAAU9T,GACZ,MAAiB,UAAVA,GAA4B,UAAVA,GAE7BmJ,eAAgB,CACZ2L,GAAI,QACJD,IAAK,WACLE,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,2BAEVZ,SAAU,CACNC,QAAS,qBACTC,QAAS,uBACTC,SAAU,2BACVC,QAAS,cACTC,SAAU,4BACVC,SAAU,KAEdQ,aAAc,CACVC,OAAQ,WACRC,KAAM,aACNnI,EAAG,mBACHoI,GAAI,YACJpT,EAAG,aACHqT,GAAI,YACJC,EAAG,WACHC,GAAI,UACJxD,EAAG,aACHyD,GAAI,YACJG,EAAG,SACHC,GAAI,QACJhG,EAAG,eACHiG,GAAI,eAER3N,QAAS,SAAUjB,EAAQ+a,GACvB,OAAQA,GACJ,IAAK,IACL,IAAK,IACL,IAAK,KACL,IAAK,KACD,OAAO/a,EACX,QACI,GAAe,IAAXA,EAEA,OAAOA,EAAS,kBAEpB,IAAI5G,EAAI4G,EAAS,GAGjB,OAAOA,GAAUq9B,GAAWjkC,IAAMikC,GAFzBr9B,EAAS,IAAO5G,IAE0BikC,GADjC,KAAVr9B,EAAgB,IAAM,SAI1CyJ,KAAM,CACFL,IAAK,EACLC,IAAK,KAQb7Q,EAAM0X,aAAa,MAAO,CACtBhJ,OAAQ,kGAAsFK,MAC1F,KAEJN,YAAa,qDAAkDM,MAAM,KACrEkD,SAAU,8EAAsDlD,MAAM,KACtEiD,cAAe,gDAA8BjD,MAAM,KACnDgD,YAAa,mCAAuBhD,MAAM,KAC1CxF,eAAgB,CACZ2L,GAAI,QACJD,IAAK,WACLE,EAAG,aACHC,GAAI,wBACJC,IAAK,8BACLC,KAAM,0CAEVe,cAAe,aACfnC,KAAM,SAAU9T,GACZ,MAAO,QAAUA,EAAM2J,eAE3BzG,SAAU,SAAUoQ,EAAOE,EAAS0a,GAChC,OAAY,GAAR5a,EACO4a,EAAU,MAAQ,MAElBA,EAAU,MAAQ,OAGjC5Z,SAAU,CACNC,QAAS,iBACTC,QAAS,oBACTC,SAAU,iBACVC,QAAS,kBACTC,SAAU,oCACVC,SAAU,KAEdQ,aAAc,CACVC,OAAQ,YACRC,KAAM,OACNnI,EAAGu3B,GACHnvB,GAAImvB,GACJviC,EAAGuiC,GACHlvB,GAAIkvB,GACJjvB,EAAGivB,GACHhvB,GAAIgvB,GACJxyB,EAAGwyB,GACH/uB,GAAI+uB,GACJ5uB,EAAG4uB,GACH3uB,GAAI2uB,GACJ30B,EAAG20B,GACH1uB,GAAI0uB,IAERvvB,uBAAwB,YACxB9M,QAAS,MACTwI,KAAM,CACFL,IAAK,EACLC,IAAK,KA4Bb7Q,EAAM0X,aAAa,WAAY,CAC3BhJ,OAAQ,qIAAwFK,MAC5F,KAEJN,YAAa,qIAAwFM,MACjG,KAEJkD,SAAU,uDAAkDlD,MAAM,KAClEiD,cAAe,uDAAkDjD,MAAM,KACvEgD,YAAa,uDAAkDhD,MAAM,KACrExF,eAAgB,CACZ2L,GAAI,QACJD,IAAK,WACLE,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,0BAEVZ,SAAU,CACNC,QAAS,eACTC,QAAS,cACTC,SAAU,cACVC,QAAS,gBACTC,SAAU,cACVC,SAAU,KAEdQ,aAAc,CACVC,OAAQ,iBACRC,KAAM,SACNnI,EAAG,OACHoI,GAAI,UACJpT,EAAG,aACHqT,GAAI,gBACJC,EAAG,YACHC,GAAI,mBACJxD,EAAG,MACHyD,GAAI,WACJG,EAAG,QACHC,GAAI,YACJhG,EAAG,QACHiG,GAAI,aAERnF,KAAM,CACFL,IAAK,EACLC,IAAK,MAMb7Q,EAAM0X,aAAa,MAAO,CACtBhJ,OAAQ,saAAkFK,MACtF,KAEJN,YAAa,saAAkFM,MAC3F,KAEJkD,SAAU,+PAAkDlD,MAAM,KAClEiD,cAAe,+PAAkDjD,MAAM,KACvEgD,YAAa,+PAAkDhD,MAAM,KACrExF,eAAgB,CACZ2L,GAAI,QACJD,IAAK,WACLE,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,0BAEVZ,SAAU,CACNC,QAAS,uCACTC,QAAS,uCACTC,SAAU,mBACVC,QAAS,6CACTC,SAAU,mBACVC,SAAU,KAEdQ,aAAc,CACVC,OAAQ,wDACRC,KAAM,wBACNnI,EAAG,2BACHoI,GAAI,8BACJpT,EAAG,iCACHqT,GAAI,oCACJC,EAAG,2BACHC,GAAI,sDACJxD,EAAG,qBACHyD,GAAI,+BACJG,EAAG,4BACHC,GAAI,0CACJhG,EAAG,iCACHiG,GAAI,2CAERnF,KAAM,CACFL,IAAK,EACLC,IAAK,MAMb7Q,EAAM0X,aAAa,QAAS,CACxBhJ,OAAQ,8bAAsFK,MAC1F,KAEJN,YAAa,8bAAsFM,MAC/F,KAEJkD,SAAU,ySAAyDlD,MAC/D,KAEJiD,cAAe,6FAAuBjD,MAAM,KAC5CgD,YAAa,6FAAuBhD,MAAM,KAC1CxF,eAAgB,CACZ2L,GAAI,QACJD,IAAK,WACLE,EAAG,aACHC,GAAI,gGACJC,IAAK,4GACLC,KAAM,wHAEVe,cAAe,uQACfkH,aAAc,SAAUF,EAAM/Z,GAI1B,OAHa,KAAT+Z,IACAA,EAAO,GAGM,4DAAb/Z,GACa,mCAAbA,GACa,wEAAbA,GAGoB,wEAAbA,GAA4C,uBAAbA,GAGvB,IAAR+Z,EAJAA,EAEAA,EAAO,IAKtB/Z,SAAU,SAAU+Z,EAAMkB,EAAQ+P,GAC9B,IAAIvT,EAAY,IAAPsC,EAAakB,EACtB,OAAIxD,EAAK,IACE,0DACAA,EAAK,IACL,iCACAA,EAAK,KACL,sEACAA,EAAK,KACL,qBACAA,EAAK,KACL,sEAEA,sBAGfrG,SAAU,CACNC,QAAS,qEACTC,QAAS,+DACTC,SAAU,wFACVC,QAAS,kDACTC,SAAU,8FACVC,SAAU,KAEdQ,aAAc,CACVC,OAAQ,oCACRC,KAAM,oCACNnI,EAAG,sEACHoI,GAAI,0CACJpT,EAAG,oDACHqT,GAAI,oCACJC,EAAG,oDACHC,GAAI,oCACJxD,EAAG,wCACHyD,GAAI,wBACJG,EAAG,wCACHC,GAAI,wBACJhG,EAAG,wCACHiG,GAAI,yBAGRb,uBAAwB,yFACxB9M,QAAS,SAAUjB,EAAQ+a,GACvB,OAAQA,GACJ,IAAK,IACL,IAAK,IACL,IAAK,MACD,OAAO/a,EAAS,4BACpB,IAAK,IACL,IAAK,IACD,OAAOA,EAAS,kCACpB,QACI,OAAOA,IAGnBmW,SAAU,SAAUhE,GAChB,OAAOA,EAAO1Q,QAAQ,UAAM,MAEhCqe,WAAY,SAAU3N,GAClB,OAAOA,EAAO1Q,QAAQ,KAAM,WAEhCgI,KAAM,CAEFL,IAAK,EACLC,IAAK,KAmEb7Q,EAAM0X,aAAa,KAAM,CACrBhJ,OAAQ,CACJzM,OAAQ,gdAAyF8M,MAC7F,KAEJmmB,WAAY,ggBAAiGnmB,MACzG,MAGRN,YAAa,gRAAyDM,MAClE,KAEJkD,SAhDJ,SAA6B1P,EAAGN,GAC5B,IAAIgQ,EAAW,CACPgzB,WAAY,+SAA0Dl2B,MAClE,KAEJm2B,WAAY,+SAA0Dn2B,MAClE,KAEJo2B,SAAU,2TAA4Dp2B,MAClE,MAKZ,OAAU,IAANxM,EACO0P,EAAqB,WACvBzL,MAAM,EAAG,GACTsL,OAAOG,EAAqB,WAAEzL,MAAM,EAAG,IAE3CjE,EASE0P,EALI,yCAAqBxI,KAAKxH,GAC/B,aACA,sHAAsCwH,KAAKxH,GAC3C,WACA,cACoBM,EAAE2Q,OARjBjB,EAAqB,YA6BhCD,cAAe,6FAAuBjD,MAAM,KAC5CgD,YAAa,6FAAuBhD,MAAM,KAC1CxF,eAAgB,CACZ2L,GAAI,QACJD,IAAK,WACLE,EAAG,aACHC,GAAI,sBACJC,IAAK,6BACLC,KAAM,oCAEVZ,SAAU,CACNC,QAASqwB,GAAqB,sDAC9BpwB,QAASowB,GAAqB,0CAC9BlwB,QAASkwB,GAAqB,oCAC9BnwB,SAAUmwB,GAAqB,mBAC/BjwB,SAAU,WACN,OAAQlV,KAAKqT,OACT,KAAK,EACL,KAAK,EACL,KAAK,EACL,KAAK,EACD,OAAO8xB,GAAqB,uDAAoBvkC,KAAKZ,MACzD,KAAK,EACL,KAAK,EACL,KAAK,EACD,OAAOmlC,GAAqB,6DAAqBvkC,KAAKZ,QAGlEmV,SAAU,KAEdQ,aAAc,CACVC,OAAQ,kBACRC,KAAM,8BACNnI,EAAG,wFACHoI,GAAIovB,GACJxiC,EAAGwiC,GACHnvB,GAAImvB,GACJlvB,EAAG,uCACHC,GAAIivB,GACJzyB,EAAG,2BACHyD,GAAIgvB,GACJ7uB,EAAG,uCACHC,GAAI4uB,GACJ50B,EAAG,qBACHiG,GAAI2uB,IAGR1uB,cAAe,kHACfnC,KAAM,SAAU9T,GACZ,MAAO,8DAAiBqJ,KAAKrJ,IAEjCkD,SAAU,SAAU+Z,EAAMkB,EAAQ+P,GAC9B,OAAIjR,EAAO,EACA,2BACAA,EAAO,GACP,iCACAA,EAAO,GACP,qBAEA,wCAGf9H,uBAAwB,gCACxB9M,QAAS,SAAUjB,EAAQ+a,GACvB,OAAQA,GACJ,IAAK,IACL,IAAK,IACL,IAAK,MACL,IAAK,IACL,IAAK,IACD,OAAO/a,EAAS,UACpB,IAAK,IACD,OAAOA,EAAS,gBACpB,QACI,OAAOA,IAGnByJ,KAAM,CACFL,IAAK,EACLC,IAAK,KAMb,IAAIu0B,GAAW,CACP,iCACA,iCACA,2BACA,iCACA,qBACA,qBACA,uCACA,2BACA,iCACA,uCACA,iCACA,kCAEJC,GAAS,CAAC,iCAAS,qBAAO,2BAAQ,qBAAO,uCAAU,2BAAQ,4BA+uB/D,OA7uBArlC,EAAM0X,aAAa,KAAM,CACrBhJ,OAAQ02B,GACR32B,YAAa22B,GACbnzB,SAAUozB,GACVrzB,cAAeqzB,GACftzB,YAAaszB,GACb97B,eAAgB,CACZ2L,GAAI,QACJD,IAAK,WACLE,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,gCAEVe,cAAe,wCACfnC,KAAM,SAAU9T,GACZ,MAAO,uBAAUA,GAErBkD,SAAU,SAAU+Z,EAAMkB,EAAQ+P,GAC9B,OAAIjR,EAAO,GACA,qBAEJ,sBAEX3I,SAAU,CACNC,QAAS,6CACTC,QAAS,6CACTC,SAAU,qCACVC,QAAS,kFACTC,SAAU,sEACVC,SAAU,KAEdQ,aAAc,CACVC,OAAQ,wBACRC,KAAM,wBACNnI,EAAG,oDACHoI,GAAI,oCACJpT,EAAG,wCACHqT,GAAI,wBACJC,EAAG,oDACHC,GAAI,oCACJxD,EAAG,kCACHyD,GAAI,kBACJG,EAAG,wCACHC,GAAI,wBACJhG,EAAG,wCACHiG,GAAI,yBAERuH,SAAU,SAAUhE,GAChB,OAAOA,EAAO1Q,QAAQ,UAAM,MAEhCqe,WAAY,SAAU3N,GAClB,OAAOA,EAAO1Q,QAAQ,KAAM,WAEhCgI,KAAM,CACFL,IAAK,EACLC,IAAK,KAMb7Q,EAAM0X,aAAa,UAAW,CAC1BhJ,OAAQ,6EAA6EK,MACjF,KAEJN,YAAa,oDAAoDM,MAAM,KACvEkD,SAAU,+DAA+DlD,MACrE,KAEJiD,cAAe,kCAAkCjD,MAAM,KACvDgD,YAAa,yBAAyBhD,MAAM,KAC5CxF,eAAgB,CACZ2L,GAAI,QACJD,IAAK,WACLE,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,2BAEVZ,SAAU,CACNC,QAAS,uBACTC,QAAS,mBACTC,SAAU,2BACVC,QAAS,uBACTC,SAAU,oCACVC,SAAU,KAEdQ,aAAc,CACVC,OAAQ,kBACRC,KAAM,qBACNnI,EAAG,SACHoI,GAAI,YACJpT,EAAG,aACHqT,GAAI,YACJC,EAAG,WACHC,GAAI,UACJxD,EAAG,UACHyD,GAAI,SACJG,EAAG,SACHC,GAAI,QACJhG,EAAG,UACHiG,GAAI,UAERnF,KAAM,CACFL,IAAK,EACLC,IAAK,KAMb7Q,EAAM0X,aAAa,KAAM,CACrBhJ,OAAQ,gXAAyEK,MAC7E,KAEJN,YAAa,sOAAkDM,MAAM,KACrEkD,SAAU,6RAAuDlD,MAAM,KACvEiD,cAAe,uIAA8BjD,MAAM,KACnDgD,YAAa,6FAAuBhD,MAAM,KAC1CxF,eAAgB,CACZ2L,GAAI,QACJD,IAAK,WACLE,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,2BAEVZ,SAAU,CACNC,QAAS,8EACTC,QAAS,2DACTC,SAAU,6EACVC,QAAS,wEACTC,SAAU,8GACVC,SAAU,KAEdQ,aAAc,CACVC,OAAQ,6DACRC,KAAM,gFACNnI,EAAG,uCACHoI,GAAI,0CACJpT,EAAG,0DACHqT,GAAI,0CACJC,EAAG,8CACHC,GAAI,8BACJxD,EAAG,wCACHyD,GAAI,wBACJG,EAAG,kCACHC,GAAI,kBACJhG,EAAG,wCACHiG,GAAI,yBAERnF,KAAM,CACFL,IAAK,EACLC,IAAK,KAMb7Q,EAAM0X,aAAa,KAAM,CACrBhJ,OAAQ,yIAAqGK,MACzG,KAEJN,YAAa,sFAAsFM,MAC/F,KAEJmoB,kBAAkB,EAClBjlB,SAAU,mHAAyDlD,MAC/D,KAEJiD,cAAe,uBAAuBjD,MAAM,KAC5CgD,YAAa,uBAAuBhD,MAAM,KAC1CojB,oBAAoB,EACpB9b,cAAe,SACfnC,KAAM,SAAU9T,GACZ,MAAO,QAAQqJ,KAAKrJ,IAExBkD,SAAU,SAAUoQ,EAAOE,EAAS0a,GAChC,OAAI5a,EAAQ,GACD4a,EAAU,KAAO,KAEjBA,EAAU,KAAO,MAGhC/kB,eAAgB,CACZ2L,GAAI,QACJD,IAAK,WACLE,EAAG,aACHC,GAAI,yBACJC,IAAK,+BACLC,KAAM,qCACNgE,EAAG,YACHue,GAAI,aACJC,IAAK,mBACLC,KAAM,yBAEVrjB,SAAU,CACNC,QAAS,yBACTC,QAAS,0BACTC,SAAU,sCACVC,QAAS,yBACTC,SAAU,6CACVC,SAAU,KAEdQ,aAAc,CACVC,OAAQ,cACRC,KAAM,qBACNnI,EAAG,iBACHoI,GAAI,aACJpT,EAAG,mBACHqT,GAAI,aACJC,EAAG,oBACHC,GAAI,cACJxD,EAAG,mBACHyD,GAAI,aACJG,EAAG,oBACHC,GAAI,cACJhG,EAAG,oBACHiG,GAAI,eAERb,uBAAwB,UACxB9M,QAAS,SAAUjB,GACf,OAAOA,GAEXyJ,KAAM,CACFL,IAAK,EACLC,IAAK,KAMb7Q,EAAM0X,aAAa,WAAY,CAC3BhJ,OAAQ,sNAA6GK,MACjH,KAEJN,YAAa,iHAA8DM,MACvE,KAEJmoB,kBAAkB,EAClBjlB,SAAU,0JAAyElD,MAC/E,KAEJiD,cAAe,mEAAqCjD,MAAM,KAC1DgD,YAAa,2CAA4BhD,MAAM,KAC/CojB,oBAAoB,EACpB5oB,eAAgB,CACZ2L,GAAI,QACJC,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,2BAEVZ,SAAU,CACNC,QAAS,8BACTC,QAAS,kCACTC,SAAU,kBACVC,QAAS,yCACTC,SAAU,6BACVC,SAAU,KAEdQ,aAAc,CACVC,OAAQ,eACRC,KAAM,gBACNnI,EAAG,kCACHoI,GAAI,wBACJpT,EAAG,4BACHqT,GAAI,2BACJC,EAAG,wBACHC,GAAI,kBACJxD,EAAG,kBACHyD,GAAI,iBACJG,EAAG,qBACHC,GAAI,oBACJhG,EAAG,sBACHiG,GAAI,sBAERb,uBAAwB,uBACxB9M,QAAS,SAAUjB,GACf,IAAI3G,EAAI2G,EAAS,GAWjB,OAAOA,GAT6B,MAAxBA,EAAS,IAAO,IACd,KACM,GAAN3G,EACA,KACM,GAANA,EACA,KACM,GAANA,EACA,KACA,OAGlBoQ,KAAM,CACFL,IAAK,EACLC,IAAK,KAMb7Q,EAAM0X,aAAa,KAAM,CACrBhJ,OAAQ,gPAA0FK,MAC9F,KAEJN,YAAa,oKAAgEM,MAAM,KACnFkD,SAAU,gKAAuDlD,MAAM,KACvEiD,cAAe,kGAAsCjD,MAAM,KAC3DgD,YAAa,8DAA2BhD,MAAM,KAC9CxF,eAAgB,CACZ2L,GAAI,SACJD,IAAK,YACLE,EAAG,aACHC,GAAI,cACJC,IAAK,qBACLC,KAAM,4BAEVZ,SAAU,CACNC,QAAS,0BACTC,QAAS,yBACTC,SAAU,uDACVC,QAAS,oBACTC,SAAU,2DACVC,SAAU,KAEdQ,aAAc,CACVC,OAAQ,cACRC,KAAM,qBACNnI,EAAG,wCACHoI,GAAI,gBACJpT,EAAG,6BACHqT,GAAI,4BACJC,EAAG,mBACHC,GAAI,kBACJxD,EAAG,0BACHyD,GAAI,yBACJG,EAAG,gBACHC,GAAI,eACJhG,EAAG,sBACHiG,GAAI,sBAERb,uBAAwB,+BACxB9M,QAAS,yBACTwI,KAAM,CACFL,IAAK,EACLC,IAAK,KAMb7Q,EAAM0X,aAAa,QAAS,CACxBhJ,OAAQ,0KAAwCK,MAC5C,KAEJN,YAAa,qGAAyCM,MAClD,KAEJkD,SAAU,uIAA8BlD,MAAM,KAC9CiD,cAAe,6FAAuBjD,MAAM,KAC5CgD,YAAa,mDAAgBhD,MAAM,KACnCxF,eAAgB,CACZ2L,GAAI,QACJD,IAAK,WACLE,EAAG,aACHC,GAAI,2BACJC,IAAK,2CACLC,KAAM,+CACNgE,EAAG,WACHue,GAAI,2BACJC,IAAK,iCACLC,KAAM,sCAEV1hB,cAAe,gFACfkH,aAAc,SAAUF,EAAM/Z,GAI1B,OAHa,KAAT+Z,IACAA,EAAO,GAEM,iBAAb/Z,GAAkC,iBAAbA,GAAkC,iBAAbA,GAEtB,iBAAbA,GAAkC,iBAAbA,GAIb,IAAR+Z,EALAA,EAEAA,EAAO,IAMtB/Z,SAAU,SAAU+Z,EAAMkB,EAAQ+P,GAC9B,IAAIvT,EAAY,IAAPsC,EAAakB,EACtB,OAAIxD,EAAK,IACE,eACAA,EAAK,IACL,eACAA,EAAK,KACL,eACAA,EAAK,KACL,eACAA,EAAK,KACL,eAEA,gBAGfrG,SAAU,CACNC,QAAS,mBACTC,QAAS,mBACTC,SAAU,SAAU6G,GAChB,OAAIA,EAAIzK,SAAWpR,KAAKoR,OACb,gBAEA,iBAGf6D,QAAS,mBACTC,SAAU,SAAU2G,GAChB,OAAI7b,KAAKoR,SAAWyK,EAAIzK,OACb,gBAEA,iBAGf+D,SAAU,KAEdO,uBAAwB,gCACxB9M,QAAS,SAAUjB,EAAQ+a,GACvB,OAAQA,GACJ,IAAK,IACL,IAAK,IACL,IAAK,MACD,OAAO/a,EAAS,SACpB,IAAK,IACD,OAAOA,EAAS,SACpB,IAAK,IACL,IAAK,IACD,OAAOA,EAAS,SACpB,QACI,OAAOA,IAGnBgO,aAAc,CACVC,OAAQ,WACRC,KAAM,WACNnI,EAAG,eACHoI,GAAI,YACJpT,EAAG,iBACHqT,GAAI,kBACJC,EAAG,iBACHC,GAAI,kBACJxD,EAAG,WACHyD,GAAI,YACJG,EAAG,iBACHC,GAAI,kBACJhG,EAAG,WACHiG,GAAI,aAERnF,KAAM,CAEFL,IAAK,EACLC,IAAK,KAMb7Q,EAAM0X,aAAa,QAAS,CACxBhJ,OAAQ,0KAAwCK,MAC5C,KAEJN,YAAa,qGAAyCM,MAClD,KAEJkD,SAAU,uIAA8BlD,MAAM,KAC9CiD,cAAe,6FAAuBjD,MAAM,KAC5CgD,YAAa,mDAAgBhD,MAAM,KACnCxF,eAAgB,CACZ2L,GAAI,QACJD,IAAK,WACLE,EAAG,aACHC,GAAI,2BACJC,IAAK,iCACLC,KAAM,qCACNgE,EAAG,WACHue,GAAI,2BACJC,IAAK,iCACLC,KAAM,sCAEV1hB,cAAe,gFACfkH,aAAc,SAAUF,EAAM/Z,GAI1B,OAHa,KAAT+Z,IACAA,EAAO,GAEM,iBAAb/Z,GAAkC,iBAAbA,GAAkC,iBAAbA,EACnC+Z,EACa,iBAAb/Z,EACQ,IAAR+Z,EAAaA,EAAOA,EAAO,GACd,iBAAb/Z,GAAkC,iBAAbA,EACrB+Z,EAAO,QADX,GAIX/Z,SAAU,SAAU+Z,EAAMkB,EAAQ+P,GAC9B,IAAIvT,EAAY,IAAPsC,EAAakB,EACtB,OAAIxD,EAAK,IACE,eACAA,EAAK,IACL,eACAA,EAAK,KACL,eACO,OAAPA,EACA,eACAA,EAAK,KACL,eAEA,gBAGfrG,SAAU,CACNC,QAAS,mBACTC,QAAS,mBACTC,SAAU,iBACVC,QAAS,mBACTC,SAAU,iBACVC,SAAU,KAEdO,uBAAwB,gCACxB9M,QAAS,SAAUjB,EAAQ+a,GACvB,OAAQA,GACJ,IAAK,IACL,IAAK,IACL,IAAK,MACD,OAAO/a,EAAS,SACpB,IAAK,IACD,OAAOA,EAAS,SACpB,IAAK,IACL,IAAK,IACD,OAAOA,EAAS,SACpB,QACI,OAAOA,IAGnBgO,aAAc,CACVC,OAAQ,WACRC,KAAM,WACNnI,EAAG,eACHoI,GAAI,YACJpT,EAAG,iBACHqT,GAAI,kBACJC,EAAG,iBACHC,GAAI,kBACJxD,EAAG,WACHyD,GAAI,YACJG,EAAG,iBACHC,GAAI,kBACJhG,EAAG,WACHiG,GAAI,eAMZpW,EAAM0X,aAAa,QAAS,CACxBhJ,OAAQ,0KAAwCK,MAC5C,KAEJN,YAAa,qGAAyCM,MAClD,KAEJkD,SAAU,uIAA8BlD,MAAM,KAC9CiD,cAAe,6FAAuBjD,MAAM,KAC5CgD,YAAa,mDAAgBhD,MAAM,KACnCxF,eAAgB,CACZ2L,GAAI,QACJD,IAAK,WACLE,EAAG,aACHC,GAAI,2BACJC,IAAK,iCACLC,KAAM,qCACNgE,EAAG,WACHue,GAAI,2BACJC,IAAK,iCACLC,KAAM,sCAEV1hB,cAAe,gFACfkH,aAAc,SAAUF,EAAM/Z,GAI1B,OAHa,KAAT+Z,IACAA,EAAO,GAEM,iBAAb/Z,GAAkC,iBAAbA,GAAkC,iBAAbA,EACnC+Z,EACa,iBAAb/Z,EACQ,IAAR+Z,EAAaA,EAAOA,EAAO,GACd,iBAAb/Z,GAAkC,iBAAbA,EACrB+Z,EAAO,QADX,GAIX/Z,SAAU,SAAU+Z,EAAMkB,EAAQ+P,GAC9B,IAAIvT,EAAY,IAAPsC,EAAakB,EACtB,OAAIxD,EAAK,IACE,eACAA,EAAK,IACL,eACAA,EAAK,KACL,eACAA,EAAK,KACL,eACAA,EAAK,KACL,eAEA,gBAGfrG,SAAU,CACNC,QAAS,oBACTC,QAAS,oBACTC,SAAU,kBACVC,QAAS,oBACTC,SAAU,kBACVC,SAAU,KAEdO,uBAAwB,gCACxB9M,QAAS,SAAUjB,EAAQ+a,GACvB,OAAQA,GACJ,IAAK,IACL,IAAK,IACL,IAAK,MACD,OAAO/a,EAAS,SACpB,IAAK,IACD,OAAOA,EAAS,SACpB,IAAK,IACL,IAAK,IACD,OAAOA,EAAS,SACpB,QACI,OAAOA,IAGnBgO,aAAc,CACVC,OAAQ,WACRC,KAAM,WACNnI,EAAG,eACHoI,GAAI,YACJpT,EAAG,iBACHqT,GAAI,kBACJC,EAAG,iBACHC,GAAI,kBACJxD,EAAG,WACHyD,GAAI,YACJG,EAAG,iBACHC,GAAI,kBACJhG,EAAG,WACHiG,GAAI,eAMZpW,EAAM0X,aAAa,QAAS,CACxBhJ,OAAQ,0KAAwCK,MAC5C,KAEJN,YAAa,qGAAyCM,MAClD,KAEJkD,SAAU,uIAA8BlD,MAAM,KAC9CiD,cAAe,6FAAuBjD,MAAM,KAC5CgD,YAAa,mDAAgBhD,MAAM,KACnCxF,eAAgB,CACZ2L,GAAI,QACJD,IAAK,WACLE,EAAG,aACHC,GAAI,2BACJC,IAAK,iCACLC,KAAM,qCACNgE,EAAG,WACHue,GAAI,2BACJC,IAAK,iCACLC,KAAM,sCAEV1hB,cAAe,gFACfkH,aAAc,SAAUF,EAAM/Z,GAI1B,OAHa,KAAT+Z,IACAA,EAAO,GAEM,iBAAb/Z,GAAkC,iBAAbA,GAAkC,iBAAbA,EACnC+Z,EACa,iBAAb/Z,EACQ,IAAR+Z,EAAaA,EAAOA,EAAO,GACd,iBAAb/Z,GAAkC,iBAAbA,EACrB+Z,EAAO,QADX,GAIX/Z,SAAU,SAAU+Z,EAAMkB,EAAQ+P,GAC9B,IAAIvT,EAAY,IAAPsC,EAAakB,EACtB,OAAIxD,EAAK,IACE,eACAA,EAAK,IACL,eACAA,EAAK,KACL,eACAA,EAAK,KACL,eACAA,EAAK,KACL,eAEA,gBAGfrG,SAAU,CACNC,QAAS,oBACTC,QAAS,oBACTC,SAAU,kBACVC,QAAS,oBACTC,SAAU,kBACVC,SAAU,KAEdO,uBAAwB,gCACxB9M,QAAS,SAAUjB,EAAQ+a,GACvB,OAAQA,GACJ,IAAK,IACL,IAAK,IACL,IAAK,MACD,OAAO/a,EAAS,SACpB,IAAK,IACD,OAAOA,EAAS,SACpB,IAAK,IACL,IAAK,IACD,OAAOA,EAAS,SACpB,QACI,OAAOA,IAGnBgO,aAAc,CACVC,OAAQ,WACRC,KAAM,WACNnI,EAAG,eACHoI,GAAI,YACJpT,EAAG,iBACHqT,GAAI,kBACJC,EAAG,iBACHC,GAAI,kBACJxD,EAAG,WACHyD,GAAI,YACJG,EAAG,iBACHC,GAAI,kBACJhG,EAAG,WACHiG,GAAI,eAIZpW,EAAMkC,OAAO,MAENlC"}
\ No newline at end of file
diff --git a/admin/js/vendors/moment/moment.js b/admin/js/vendors/moment/moment.js
new file mode 100644 (file)
index 0000000..c4cb7d3
--- /dev/null
@@ -0,0 +1,5668 @@
+//! moment.js
+//! version : 2.27.0
+//! authors : Tim Wood, Iskren Chernev, Moment.js contributors
+//! license : MIT
+//! momentjs.com
+
+;(function (global, factory) {
+    typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
+    typeof define === 'function' && define.amd ? define(factory) :
+    global.moment = factory()
+}(this, (function () { 'use strict';
+
+    var hookCallback;
+
+    function hooks() {
+        return hookCallback.apply(null, arguments);
+    }
+
+    // This is done to register the method called with moment()
+    // without creating circular dependencies.
+    function setHookCallback(callback) {
+        hookCallback = callback;
+    }
+
+    function isArray(input) {
+        return (
+            input instanceof Array ||
+            Object.prototype.toString.call(input) === '[object Array]'
+        );
+    }
+
+    function isObject(input) {
+        // IE8 will treat undefined and null as object if it wasn't for
+        // input != null
+        return (
+            input != null &&
+            Object.prototype.toString.call(input) === '[object Object]'
+        );
+    }
+
+    function hasOwnProp(a, b) {
+        return Object.prototype.hasOwnProperty.call(a, b);
+    }
+
+    function isObjectEmpty(obj) {
+        if (Object.getOwnPropertyNames) {
+            return Object.getOwnPropertyNames(obj).length === 0;
+        } else {
+            var k;
+            for (k in obj) {
+                if (hasOwnProp(obj, k)) {
+                    return false;
+                }
+            }
+            return true;
+        }
+    }
+
+    function isUndefined(input) {
+        return input === void 0;
+    }
+
+    function isNumber(input) {
+        return (
+            typeof input === 'number' ||
+            Object.prototype.toString.call(input) === '[object Number]'
+        );
+    }
+
+    function isDate(input) {
+        return (
+            input instanceof Date ||
+            Object.prototype.toString.call(input) === '[object Date]'
+        );
+    }
+
+    function map(arr, fn) {
+        var res = [],
+            i;
+        for (i = 0; i < arr.length; ++i) {
+            res.push(fn(arr[i], i));
+        }
+        return res;
+    }
+
+    function extend(a, b) {
+        for (var i in b) {
+            if (hasOwnProp(b, i)) {
+                a[i] = b[i];
+            }
+        }
+
+        if (hasOwnProp(b, 'toString')) {
+            a.toString = b.toString;
+        }
+
+        if (hasOwnProp(b, 'valueOf')) {
+            a.valueOf = b.valueOf;
+        }
+
+        return a;
+    }
+
+    function createUTC(input, format, locale, strict) {
+        return createLocalOrUTC(input, format, locale, strict, true).utc();
+    }
+
+    function defaultParsingFlags() {
+        // We need to deep clone this object.
+        return {
+            empty: false,
+            unusedTokens: [],
+            unusedInput: [],
+            overflow: -2,
+            charsLeftOver: 0,
+            nullInput: false,
+            invalidEra: null,
+            invalidMonth: null,
+            invalidFormat: false,
+            userInvalidated: false,
+            iso: false,
+            parsedDateParts: [],
+            era: null,
+            meridiem: null,
+            rfc2822: false,
+            weekdayMismatch: false,
+        };
+    }
+
+    function getParsingFlags(m) {
+        if (m._pf == null) {
+            m._pf = defaultParsingFlags();
+        }
+        return m._pf;
+    }
+
+    var some;
+    if (Array.prototype.some) {
+        some = Array.prototype.some;
+    } else {
+        some = function (fun) {
+            var t = Object(this),
+                len = t.length >>> 0,
+                i;
+
+            for (i = 0; i < len; i++) {
+                if (i in t && fun.call(this, t[i], i, t)) {
+                    return true;
+                }
+            }
+
+            return false;
+        };
+    }
+
+    function isValid(m) {
+        if (m._isValid == null) {
+            var flags = getParsingFlags(m),
+                parsedParts = some.call(flags.parsedDateParts, function (i) {
+                    return i != null;
+                }),
+                isNowValid =
+                    !isNaN(m._d.getTime()) &&
+                    flags.overflow < 0 &&
+                    !flags.empty &&
+                    !flags.invalidEra &&
+                    !flags.invalidMonth &&
+                    !flags.invalidWeekday &&
+                    !flags.weekdayMismatch &&
+                    !flags.nullInput &&
+                    !flags.invalidFormat &&
+                    !flags.userInvalidated &&
+                    (!flags.meridiem || (flags.meridiem && parsedParts));
+
+            if (m._strict) {
+                isNowValid =
+                    isNowValid &&
+                    flags.charsLeftOver === 0 &&
+                    flags.unusedTokens.length === 0 &&
+                    flags.bigHour === undefined;
+            }
+
+            if (Object.isFrozen == null || !Object.isFrozen(m)) {
+                m._isValid = isNowValid;
+            } else {
+                return isNowValid;
+            }
+        }
+        return m._isValid;
+    }
+
+    function createInvalid(flags) {
+        var m = createUTC(NaN);
+        if (flags != null) {
+            extend(getParsingFlags(m), flags);
+        } else {
+            getParsingFlags(m).userInvalidated = true;
+        }
+
+        return m;
+    }
+
+    // Plugins that add properties should also add the key here (null value),
+    // so we can properly clone ourselves.
+    var momentProperties = (hooks.momentProperties = []),
+        updateInProgress = false;
+
+    function copyConfig(to, from) {
+        var i, prop, val;
+
+        if (!isUndefined(from._isAMomentObject)) {
+            to._isAMomentObject = from._isAMomentObject;
+        }
+        if (!isUndefined(from._i)) {
+            to._i = from._i;
+        }
+        if (!isUndefined(from._f)) {
+            to._f = from._f;
+        }
+        if (!isUndefined(from._l)) {
+            to._l = from._l;
+        }
+        if (!isUndefined(from._strict)) {
+            to._strict = from._strict;
+        }
+        if (!isUndefined(from._tzm)) {
+            to._tzm = from._tzm;
+        }
+        if (!isUndefined(from._isUTC)) {
+            to._isUTC = from._isUTC;
+        }
+        if (!isUndefined(from._offset)) {
+            to._offset = from._offset;
+        }
+        if (!isUndefined(from._pf)) {
+            to._pf = getParsingFlags(from);
+        }
+        if (!isUndefined(from._locale)) {
+            to._locale = from._locale;
+        }
+
+        if (momentProperties.length > 0) {
+            for (i = 0; i < momentProperties.length; i++) {
+                prop = momentProperties[i];
+                val = from[prop];
+                if (!isUndefined(val)) {
+                    to[prop] = val;
+                }
+            }
+        }
+
+        return to;
+    }
+
+    // Moment prototype object
+    function Moment(config) {
+        copyConfig(this, config);
+        this._d = new Date(config._d != null ? config._d.getTime() : NaN);
+        if (!this.isValid()) {
+            this._d = new Date(NaN);
+        }
+        // Prevent infinite loop in case updateOffset creates new moment
+        // objects.
+        if (updateInProgress === false) {
+            updateInProgress = true;
+            hooks.updateOffset(this);
+            updateInProgress = false;
+        }
+    }
+
+    function isMoment(obj) {
+        return (
+            obj instanceof Moment || (obj != null && obj._isAMomentObject != null)
+        );
+    }
+
+    function warn(msg) {
+        if (
+            hooks.suppressDeprecationWarnings === false &&
+            typeof console !== 'undefined' &&
+            console.warn
+        ) {
+            console.warn('Deprecation warning: ' + msg);
+        }
+    }
+
+    function deprecate(msg, fn) {
+        var firstTime = true;
+
+        return extend(function () {
+            if (hooks.deprecationHandler != null) {
+                hooks.deprecationHandler(null, msg);
+            }
+            if (firstTime) {
+                var args = [],
+                    arg,
+                    i,
+                    key;
+                for (i = 0; i < arguments.length; i++) {
+                    arg = '';
+                    if (typeof arguments[i] === 'object') {
+                        arg += '\n[' + i + '] ';
+                        for (key in arguments[0]) {
+                            if (hasOwnProp(arguments[0], key)) {
+                                arg += key + ': ' + arguments[0][key] + ', ';
+                            }
+                        }
+                        arg = arg.slice(0, -2); // Remove trailing comma and space
+                    } else {
+                        arg = arguments[i];
+                    }
+                    args.push(arg);
+                }
+                warn(
+                    msg +
+                        '\nArguments: ' +
+                        Array.prototype.slice.call(args).join('') +
+                        '\n' +
+                        new Error().stack
+                );
+                firstTime = false;
+            }
+            return fn.apply(this, arguments);
+        }, fn);
+    }
+
+    var deprecations = {};
+
+    function deprecateSimple(name, msg) {
+        if (hooks.deprecationHandler != null) {
+            hooks.deprecationHandler(name, msg);
+        }
+        if (!deprecations[name]) {
+            warn(msg);
+            deprecations[name] = true;
+        }
+    }
+
+    hooks.suppressDeprecationWarnings = false;
+    hooks.deprecationHandler = null;
+
+    function isFunction(input) {
+        return (
+            (typeof Function !== 'undefined' && input instanceof Function) ||
+            Object.prototype.toString.call(input) === '[object Function]'
+        );
+    }
+
+    function set(config) {
+        var prop, i;
+        for (i in config) {
+            if (hasOwnProp(config, i)) {
+                prop = config[i];
+                if (isFunction(prop)) {
+                    this[i] = prop;
+                } else {
+                    this['_' + i] = prop;
+                }
+            }
+        }
+        this._config = config;
+        // Lenient ordinal parsing accepts just a number in addition to
+        // number + (possibly) stuff coming from _dayOfMonthOrdinalParse.
+        // TODO: Remove "ordinalParse" fallback in next major release.
+        this._dayOfMonthOrdinalParseLenient = new RegExp(
+            (this._dayOfMonthOrdinalParse.source || this._ordinalParse.source) +
+                '|' +
+                /\d{1,2}/.source
+        );
+    }
+
+    function mergeConfigs(parentConfig, childConfig) {
+        var res = extend({}, parentConfig),
+            prop;
+        for (prop in childConfig) {
+            if (hasOwnProp(childConfig, prop)) {
+                if (isObject(parentConfig[prop]) && isObject(childConfig[prop])) {
+                    res[prop] = {};
+                    extend(res[prop], parentConfig[prop]);
+                    extend(res[prop], childConfig[prop]);
+                } else if (childConfig[prop] != null) {
+                    res[prop] = childConfig[prop];
+                } else {
+                    delete res[prop];
+                }
+            }
+        }
+        for (prop in parentConfig) {
+            if (
+                hasOwnProp(parentConfig, prop) &&
+                !hasOwnProp(childConfig, prop) &&
+                isObject(parentConfig[prop])
+            ) {
+                // make sure changes to properties don't modify parent config
+                res[prop] = extend({}, res[prop]);
+            }
+        }
+        return res;
+    }
+
+    function Locale(config) {
+        if (config != null) {
+            this.set(config);
+        }
+    }
+
+    var keys;
+
+    if (Object.keys) {
+        keys = Object.keys;
+    } else {
+        keys = function (obj) {
+            var i,
+                res = [];
+            for (i in obj) {
+                if (hasOwnProp(obj, i)) {
+                    res.push(i);
+                }
+            }
+            return res;
+        };
+    }
+
+    var defaultCalendar = {
+        sameDay: '[Today at] LT',
+        nextDay: '[Tomorrow at] LT',
+        nextWeek: 'dddd [at] LT',
+        lastDay: '[Yesterday at] LT',
+        lastWeek: '[Last] dddd [at] LT',
+        sameElse: 'L',
+    };
+
+    function calendar(key, mom, now) {
+        var output = this._calendar[key] || this._calendar['sameElse'];
+        return isFunction(output) ? output.call(mom, now) : output;
+    }
+
+    function zeroFill(number, targetLength, forceSign) {
+        var absNumber = '' + Math.abs(number),
+            zerosToFill = targetLength - absNumber.length,
+            sign = number >= 0;
+        return (
+            (sign ? (forceSign ? '+' : '') : '-') +
+            Math.pow(10, Math.max(0, zerosToFill)).toString().substr(1) +
+            absNumber
+        );
+    }
+
+    var formattingTokens = /(\[[^\[]*\])|(\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|N{1,5}|YYYYYY|YYYYY|YYYY|YY|y{2,4}|yo?|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,
+        localFormattingTokens = /(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g,
+        formatFunctions = {},
+        formatTokenFunctions = {};
+
+    // token:    'M'
+    // padded:   ['MM', 2]
+    // ordinal:  'Mo'
+    // callback: function () { this.month() + 1 }
+    function addFormatToken(token, padded, ordinal, callback) {
+        var func = callback;
+        if (typeof callback === 'string') {
+            func = function () {
+                return this[callback]();
+            };
+        }
+        if (token) {
+            formatTokenFunctions[token] = func;
+        }
+        if (padded) {
+            formatTokenFunctions[padded[0]] = function () {
+                return zeroFill(func.apply(this, arguments), padded[1], padded[2]);
+            };
+        }
+        if (ordinal) {
+            formatTokenFunctions[ordinal] = function () {
+                return this.localeData().ordinal(
+                    func.apply(this, arguments),
+                    token
+                );
+            };
+        }
+    }
+
+    function removeFormattingTokens(input) {
+        if (input.match(/\[[\s\S]/)) {
+            return input.replace(/^\[|\]$/g, '');
+        }
+        return input.replace(/\\/g, '');
+    }
+
+    function makeFormatFunction(format) {
+        var array = format.match(formattingTokens),
+            i,
+            length;
+
+        for (i = 0, length = array.length; i < length; i++) {
+            if (formatTokenFunctions[array[i]]) {
+                array[i] = formatTokenFunctions[array[i]];
+            } else {
+                array[i] = removeFormattingTokens(array[i]);
+            }
+        }
+
+        return function (mom) {
+            var output = '',
+                i;
+            for (i = 0; i < length; i++) {
+                output += isFunction(array[i])
+                    ? array[i].call(mom, format)
+                    : array[i];
+            }
+            return output;
+        };
+    }
+
+    // format date using native date object
+    function formatMoment(m, format) {
+        if (!m.isValid()) {
+            return m.localeData().invalidDate();
+        }
+
+        format = expandFormat(format, m.localeData());
+        formatFunctions[format] =
+            formatFunctions[format] || makeFormatFunction(format);
+
+        return formatFunctions[format](m);
+    }
+
+    function expandFormat(format, locale) {
+        var i = 5;
+
+        function replaceLongDateFormatTokens(input) {
+            return locale.longDateFormat(input) || input;
+        }
+
+        localFormattingTokens.lastIndex = 0;
+        while (i >= 0 && localFormattingTokens.test(format)) {
+            format = format.replace(
+                localFormattingTokens,
+                replaceLongDateFormatTokens
+            );
+            localFormattingTokens.lastIndex = 0;
+            i -= 1;
+        }
+
+        return format;
+    }
+
+    var defaultLongDateFormat = {
+        LTS: 'h:mm:ss A',
+        LT: 'h:mm A',
+        L: 'MM/DD/YYYY',
+        LL: 'MMMM D, YYYY',
+        LLL: 'MMMM D, YYYY h:mm A',
+        LLLL: 'dddd, MMMM D, YYYY h:mm A',
+    };
+
+    function longDateFormat(key) {
+        var format = this._longDateFormat[key],
+            formatUpper = this._longDateFormat[key.toUpperCase()];
+
+        if (format || !formatUpper) {
+            return format;
+        }
+
+        this._longDateFormat[key] = formatUpper
+            .match(formattingTokens)
+            .map(function (tok) {
+                if (
+                    tok === 'MMMM' ||
+                    tok === 'MM' ||
+                    tok === 'DD' ||
+                    tok === 'dddd'
+                ) {
+                    return tok.slice(1);
+                }
+                return tok;
+            })
+            .join('');
+
+        return this._longDateFormat[key];
+    }
+
+    var defaultInvalidDate = 'Invalid date';
+
+    function invalidDate() {
+        return this._invalidDate;
+    }
+
+    var defaultOrdinal = '%d',
+        defaultDayOfMonthOrdinalParse = /\d{1,2}/;
+
+    function ordinal(number) {
+        return this._ordinal.replace('%d', number);
+    }
+
+    var defaultRelativeTime = {
+        future: 'in %s',
+        past: '%s ago',
+        s: 'a few seconds',
+        ss: '%d seconds',
+        m: 'a minute',
+        mm: '%d minutes',
+        h: 'an hour',
+        hh: '%d hours',
+        d: 'a day',
+        dd: '%d days',
+        w: 'a week',
+        ww: '%d weeks',
+        M: 'a month',
+        MM: '%d months',
+        y: 'a year',
+        yy: '%d years',
+    };
+
+    function relativeTime(number, withoutSuffix, string, isFuture) {
+        var output = this._relativeTime[string];
+        return isFunction(output)
+            ? output(number, withoutSuffix, string, isFuture)
+            : output.replace(/%d/i, number);
+    }
+
+    function pastFuture(diff, output) {
+        var format = this._relativeTime[diff > 0 ? 'future' : 'past'];
+        return isFunction(format) ? format(output) : format.replace(/%s/i, output);
+    }
+
+    var aliases = {};
+
+    function addUnitAlias(unit, shorthand) {
+        var lowerCase = unit.toLowerCase();
+        aliases[lowerCase] = aliases[lowerCase + 's'] = aliases[shorthand] = unit;
+    }
+
+    function normalizeUnits(units) {
+        return typeof units === 'string'
+            ? aliases[units] || aliases[units.toLowerCase()]
+            : undefined;
+    }
+
+    function normalizeObjectUnits(inputObject) {
+        var normalizedInput = {},
+            normalizedProp,
+            prop;
+
+        for (prop in inputObject) {
+            if (hasOwnProp(inputObject, prop)) {
+                normalizedProp = normalizeUnits(prop);
+                if (normalizedProp) {
+                    normalizedInput[normalizedProp] = inputObject[prop];
+                }
+            }
+        }
+
+        return normalizedInput;
+    }
+
+    var priorities = {};
+
+    function addUnitPriority(unit, priority) {
+        priorities[unit] = priority;
+    }
+
+    function getPrioritizedUnits(unitsObj) {
+        var units = [],
+            u;
+        for (u in unitsObj) {
+            if (hasOwnProp(unitsObj, u)) {
+                units.push({ unit: u, priority: priorities[u] });
+            }
+        }
+        units.sort(function (a, b) {
+            return a.priority - b.priority;
+        });
+        return units;
+    }
+
+    function isLeapYear(year) {
+        return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;
+    }
+
+    function absFloor(number) {
+        if (number < 0) {
+            // -0 -> 0
+            return Math.ceil(number) || 0;
+        } else {
+            return Math.floor(number);
+        }
+    }
+
+    function toInt(argumentForCoercion) {
+        var coercedNumber = +argumentForCoercion,
+            value = 0;
+
+        if (coercedNumber !== 0 && isFinite(coercedNumber)) {
+            value = absFloor(coercedNumber);
+        }
+
+        return value;
+    }
+
+    function makeGetSet(unit, keepTime) {
+        return function (value) {
+            if (value != null) {
+                set$1(this, unit, value);
+                hooks.updateOffset(this, keepTime);
+                return this;
+            } else {
+                return get(this, unit);
+            }
+        };
+    }
+
+    function get(mom, unit) {
+        return mom.isValid()
+            ? mom._d['get' + (mom._isUTC ? 'UTC' : '') + unit]()
+            : NaN;
+    }
+
+    function set$1(mom, unit, value) {
+        if (mom.isValid() && !isNaN(value)) {
+            if (
+                unit === 'FullYear' &&
+                isLeapYear(mom.year()) &&
+                mom.month() === 1 &&
+                mom.date() === 29
+            ) {
+                value = toInt(value);
+                mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](
+                    value,
+                    mom.month(),
+                    daysInMonth(value, mom.month())
+                );
+            } else {
+                mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](value);
+            }
+        }
+    }
+
+    // MOMENTS
+
+    function stringGet(units) {
+        units = normalizeUnits(units);
+        if (isFunction(this[units])) {
+            return this[units]();
+        }
+        return this;
+    }
+
+    function stringSet(units, value) {
+        if (typeof units === 'object') {
+            units = normalizeObjectUnits(units);
+            var prioritized = getPrioritizedUnits(units),
+                i;
+            for (i = 0; i < prioritized.length; i++) {
+                this[prioritized[i].unit](units[prioritized[i].unit]);
+            }
+        } else {
+            units = normalizeUnits(units);
+            if (isFunction(this[units])) {
+                return this[units](value);
+            }
+        }
+        return this;
+    }
+
+    var match1 = /\d/, //       0 - 9
+        match2 = /\d\d/, //      00 - 99
+        match3 = /\d{3}/, //     000 - 999
+        match4 = /\d{4}/, //    0000 - 9999
+        match6 = /[+-]?\d{6}/, // -999999 - 999999
+        match1to2 = /\d\d?/, //       0 - 99
+        match3to4 = /\d\d\d\d?/, //     999 - 9999
+        match5to6 = /\d\d\d\d\d\d?/, //   99999 - 999999
+        match1to3 = /\d{1,3}/, //       0 - 999
+        match1to4 = /\d{1,4}/, //       0 - 9999
+        match1to6 = /[+-]?\d{1,6}/, // -999999 - 999999
+        matchUnsigned = /\d+/, //       0 - inf
+        matchSigned = /[+-]?\d+/, //    -inf - inf
+        matchOffset = /Z|[+-]\d\d:?\d\d/gi, // +00:00 -00:00 +0000 -0000 or Z
+        matchShortOffset = /Z|[+-]\d\d(?::?\d\d)?/gi, // +00 -00 +00:00 -00:00 +0000 -0000 or Z
+        matchTimestamp = /[+-]?\d+(\.\d{1,3})?/, // 123456789 123456789.123
+        // any word (or two) characters or numbers including two/three word month in arabic.
+        // includes scottish gaelic two word and hyphenated months
+        matchWord = /[0-9]{0,256}['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFF07\uFF10-\uFFEF]{1,256}|[\u0600-\u06FF\/]{1,256}(\s*?[\u0600-\u06FF]{1,256}){1,2}/i,
+        regexes;
+
+    regexes = {};
+
+    function addRegexToken(token, regex, strictRegex) {
+        regexes[token] = isFunction(regex)
+            ? regex
+            : function (isStrict, localeData) {
+                  return isStrict && strictRegex ? strictRegex : regex;
+              };
+    }
+
+    function getParseRegexForToken(token, config) {
+        if (!hasOwnProp(regexes, token)) {
+            return new RegExp(unescapeFormat(token));
+        }
+
+        return regexes[token](config._strict, config._locale);
+    }
+
+    // Code from http://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascript
+    function unescapeFormat(s) {
+        return regexEscape(
+            s
+                .replace('\\', '')
+                .replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g, function (
+                    matched,
+                    p1,
+                    p2,
+                    p3,
+                    p4
+                ) {
+                    return p1 || p2 || p3 || p4;
+                })
+        );
+    }
+
+    function regexEscape(s) {
+        return s.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&');
+    }
+
+    var tokens = {};
+
+    function addParseToken(token, callback) {
+        var i,
+            func = callback;
+        if (typeof token === 'string') {
+            token = [token];
+        }
+        if (isNumber(callback)) {
+            func = function (input, array) {
+                array[callback] = toInt(input);
+            };
+        }
+        for (i = 0; i < token.length; i++) {
+            tokens[token[i]] = func;
+        }
+    }
+
+    function addWeekParseToken(token, callback) {
+        addParseToken(token, function (input, array, config, token) {
+            config._w = config._w || {};
+            callback(input, config._w, config, token);
+        });
+    }
+
+    function addTimeToArrayFromToken(token, input, config) {
+        if (input != null && hasOwnProp(tokens, token)) {
+            tokens[token](input, config._a, config, token);
+        }
+    }
+
+    var YEAR = 0,
+        MONTH = 1,
+        DATE = 2,
+        HOUR = 3,
+        MINUTE = 4,
+        SECOND = 5,
+        MILLISECOND = 6,
+        WEEK = 7,
+        WEEKDAY = 8;
+
+    function mod(n, x) {
+        return ((n % x) + x) % x;
+    }
+
+    var indexOf;
+
+    if (Array.prototype.indexOf) {
+        indexOf = Array.prototype.indexOf;
+    } else {
+        indexOf = function (o) {
+            // I know
+            var i;
+            for (i = 0; i < this.length; ++i) {
+                if (this[i] === o) {
+                    return i;
+                }
+            }
+            return -1;
+        };
+    }
+
+    function daysInMonth(year, month) {
+        if (isNaN(year) || isNaN(month)) {
+            return NaN;
+        }
+        var modMonth = mod(month, 12);
+        year += (month - modMonth) / 12;
+        return modMonth === 1
+            ? isLeapYear(year)
+                ? 29
+                : 28
+            : 31 - ((modMonth % 7) % 2);
+    }
+
+    // FORMATTING
+
+    addFormatToken('M', ['MM', 2], 'Mo', function () {
+        return this.month() + 1;
+    });
+
+    addFormatToken('MMM', 0, 0, function (format) {
+        return this.localeData().monthsShort(this, format);
+    });
+
+    addFormatToken('MMMM', 0, 0, function (format) {
+        return this.localeData().months(this, format);
+    });
+
+    // ALIASES
+
+    addUnitAlias('month', 'M');
+
+    // PRIORITY
+
+    addUnitPriority('month', 8);
+
+    // PARSING
+
+    addRegexToken('M', match1to2);
+    addRegexToken('MM', match1to2, match2);
+    addRegexToken('MMM', function (isStrict, locale) {
+        return locale.monthsShortRegex(isStrict);
+    });
+    addRegexToken('MMMM', function (isStrict, locale) {
+        return locale.monthsRegex(isStrict);
+    });
+
+    addParseToken(['M', 'MM'], function (input, array) {
+        array[MONTH] = toInt(input) - 1;
+    });
+
+    addParseToken(['MMM', 'MMMM'], function (input, array, config, token) {
+        var month = config._locale.monthsParse(input, token, config._strict);
+        // if we didn't find a month name, mark the date as invalid.
+        if (month != null) {
+            array[MONTH] = month;
+        } else {
+            getParsingFlags(config).invalidMonth = input;
+        }
+    });
+
+    // LOCALES
+
+    var defaultLocaleMonths = 'January_February_March_April_May_June_July_August_September_October_November_December'.split(
+            '_'
+        ),
+        defaultLocaleMonthsShort = 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split(
+            '_'
+        ),
+        MONTHS_IN_FORMAT = /D[oD]?(\[[^\[\]]*\]|\s)+MMMM?/,
+        defaultMonthsShortRegex = matchWord,
+        defaultMonthsRegex = matchWord;
+
+    function localeMonths(m, format) {
+        if (!m) {
+            return isArray(this._months)
+                ? this._months
+                : this._months['standalone'];
+        }
+        return isArray(this._months)
+            ? this._months[m.month()]
+            : this._months[
+                  (this._months.isFormat || MONTHS_IN_FORMAT).test(format)
+                      ? 'format'
+                      : 'standalone'
+              ][m.month()];
+    }
+
+    function localeMonthsShort(m, format) {
+        if (!m) {
+            return isArray(this._monthsShort)
+                ? this._monthsShort
+                : this._monthsShort['standalone'];
+        }
+        return isArray(this._monthsShort)
+            ? this._monthsShort[m.month()]
+            : this._monthsShort[
+                  MONTHS_IN_FORMAT.test(format) ? 'format' : 'standalone'
+              ][m.month()];
+    }
+
+    function handleStrictParse(monthName, format, strict) {
+        var i,
+            ii,
+            mom,
+            llc = monthName.toLocaleLowerCase();
+        if (!this._monthsParse) {
+            // this is not used
+            this._monthsParse = [];
+            this._longMonthsParse = [];
+            this._shortMonthsParse = [];
+            for (i = 0; i < 12; ++i) {
+                mom = createUTC([2000, i]);
+                this._shortMonthsParse[i] = this.monthsShort(
+                    mom,
+                    ''
+                ).toLocaleLowerCase();
+                this._longMonthsParse[i] = this.months(mom, '').toLocaleLowerCase();
+            }
+        }
+
+        if (strict) {
+            if (format === 'MMM') {
+                ii = indexOf.call(this._shortMonthsParse, llc);
+                return ii !== -1 ? ii : null;
+            } else {
+                ii = indexOf.call(this._longMonthsParse, llc);
+                return ii !== -1 ? ii : null;
+            }
+        } else {
+            if (format === 'MMM') {
+                ii = indexOf.call(this._shortMonthsParse, llc);
+                if (ii !== -1) {
+                    return ii;
+                }
+                ii = indexOf.call(this._longMonthsParse, llc);
+                return ii !== -1 ? ii : null;
+            } else {
+                ii = indexOf.call(this._longMonthsParse, llc);
+                if (ii !== -1) {
+                    return ii;
+                }
+                ii = indexOf.call(this._shortMonthsParse, llc);
+                return ii !== -1 ? ii : null;
+            }
+        }
+    }
+
+    function localeMonthsParse(monthName, format, strict) {
+        var i, mom, regex;
+
+        if (this._monthsParseExact) {
+            return handleStrictParse.call(this, monthName, format, strict);
+        }
+
+        if (!this._monthsParse) {
+            this._monthsParse = [];
+            this._longMonthsParse = [];
+            this._shortMonthsParse = [];
+        }
+
+        // TODO: add sorting
+        // Sorting makes sure if one month (or abbr) is a prefix of another
+        // see sorting in computeMonthsParse
+        for (i = 0; i < 12; i++) {
+            // make the regex if we don't have it already
+            mom = createUTC([2000, i]);
+            if (strict && !this._longMonthsParse[i]) {
+                this._longMonthsParse[i] = new RegExp(
+                    '^' + this.months(mom, '').replace('.', '') + '$',
+                    'i'
+                );
+                this._shortMonthsParse[i] = new RegExp(
+                    '^' + this.monthsShort(mom, '').replace('.', '') + '$',
+                    'i'
+                );
+            }
+            if (!strict && !this._monthsParse[i]) {
+                regex =
+                    '^' + this.months(mom, '') + '|^' + this.monthsShort(mom, '');
+                this._monthsParse[i] = new RegExp(regex.replace('.', ''), 'i');
+            }
+            // test the regex
+            if (
+                strict &&
+                format === 'MMMM' &&
+                this._longMonthsParse[i].test(monthName)
+            ) {
+                return i;
+            } else if (
+                strict &&
+                format === 'MMM' &&
+                this._shortMonthsParse[i].test(monthName)
+            ) {
+                return i;
+            } else if (!strict && this._monthsParse[i].test(monthName)) {
+                return i;
+            }
+        }
+    }
+
+    // MOMENTS
+
+    function setMonth(mom, value) {
+        var dayOfMonth;
+
+        if (!mom.isValid()) {
+            // No op
+            return mom;
+        }
+
+        if (typeof value === 'string') {
+            if (/^\d+$/.test(value)) {
+                value = toInt(value);
+            } else {
+                value = mom.localeData().monthsParse(value);
+                // TODO: Another silent failure?
+                if (!isNumber(value)) {
+                    return mom;
+                }
+            }
+        }
+
+        dayOfMonth = Math.min(mom.date(), daysInMonth(mom.year(), value));
+        mom._d['set' + (mom._isUTC ? 'UTC' : '') + 'Month'](value, dayOfMonth);
+        return mom;
+    }
+
+    function getSetMonth(value) {
+        if (value != null) {
+            setMonth(this, value);
+            hooks.updateOffset(this, true);
+            return this;
+        } else {
+            return get(this, 'Month');
+        }
+    }
+
+    function getDaysInMonth() {
+        return daysInMonth(this.year(), this.month());
+    }
+
+    function monthsShortRegex(isStrict) {
+        if (this._monthsParseExact) {
+            if (!hasOwnProp(this, '_monthsRegex')) {
+                computeMonthsParse.call(this);
+            }
+            if (isStrict) {
+                return this._monthsShortStrictRegex;
+            } else {
+                return this._monthsShortRegex;
+            }
+        } else {
+            if (!hasOwnProp(this, '_monthsShortRegex')) {
+                this._monthsShortRegex = defaultMonthsShortRegex;
+            }
+            return this._monthsShortStrictRegex && isStrict
+                ? this._monthsShortStrictRegex
+                : this._monthsShortRegex;
+        }
+    }
+
+    function monthsRegex(isStrict) {
+        if (this._monthsParseExact) {
+            if (!hasOwnProp(this, '_monthsRegex')) {
+                computeMonthsParse.call(this);
+            }
+            if (isStrict) {
+                return this._monthsStrictRegex;
+            } else {
+                return this._monthsRegex;
+            }
+        } else {
+            if (!hasOwnProp(this, '_monthsRegex')) {
+                this._monthsRegex = defaultMonthsRegex;
+            }
+            return this._monthsStrictRegex && isStrict
+                ? this._monthsStrictRegex
+                : this._monthsRegex;
+        }
+    }
+
+    function computeMonthsParse() {
+        function cmpLenRev(a, b) {
+            return b.length - a.length;
+        }
+
+        var shortPieces = [],
+            longPieces = [],
+            mixedPieces = [],
+            i,
+            mom;
+        for (i = 0; i < 12; i++) {
+            // make the regex if we don't have it already
+            mom = createUTC([2000, i]);
+            shortPieces.push(this.monthsShort(mom, ''));
+            longPieces.push(this.months(mom, ''));
+            mixedPieces.push(this.months(mom, ''));
+            mixedPieces.push(this.monthsShort(mom, ''));
+        }
+        // Sorting makes sure if one month (or abbr) is a prefix of another it
+        // will match the longer piece.
+        shortPieces.sort(cmpLenRev);
+        longPieces.sort(cmpLenRev);
+        mixedPieces.sort(cmpLenRev);
+        for (i = 0; i < 12; i++) {
+            shortPieces[i] = regexEscape(shortPieces[i]);
+            longPieces[i] = regexEscape(longPieces[i]);
+        }
+        for (i = 0; i < 24; i++) {
+            mixedPieces[i] = regexEscape(mixedPieces[i]);
+        }
+
+        this._monthsRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');
+        this._monthsShortRegex = this._monthsRegex;
+        this._monthsStrictRegex = new RegExp(
+            '^(' + longPieces.join('|') + ')',
+            'i'
+        );
+        this._monthsShortStrictRegex = new RegExp(
+            '^(' + shortPieces.join('|') + ')',
+            'i'
+        );
+    }
+
+    // FORMATTING
+
+    addFormatToken('Y', 0, 0, function () {
+        var y = this.year();
+        return y <= 9999 ? zeroFill(y, 4) : '+' + y;
+    });
+
+    addFormatToken(0, ['YY', 2], 0, function () {
+        return this.year() % 100;
+    });
+
+    addFormatToken(0, ['YYYY', 4], 0, 'year');
+    addFormatToken(0, ['YYYYY', 5], 0, 'year');
+    addFormatToken(0, ['YYYYYY', 6, true], 0, 'year');
+
+    // ALIASES
+
+    addUnitAlias('year', 'y');
+
+    // PRIORITIES
+
+    addUnitPriority('year', 1);
+
+    // PARSING
+
+    addRegexToken('Y', matchSigned);
+    addRegexToken('YY', match1to2, match2);
+    addRegexToken('YYYY', match1to4, match4);
+    addRegexToken('YYYYY', match1to6, match6);
+    addRegexToken('YYYYYY', match1to6, match6);
+
+    addParseToken(['YYYYY', 'YYYYYY'], YEAR);
+    addParseToken('YYYY', function (input, array) {
+        array[YEAR] =
+            input.length === 2 ? hooks.parseTwoDigitYear(input) : toInt(input);
+    });
+    addParseToken('YY', function (input, array) {
+        array[YEAR] = hooks.parseTwoDigitYear(input);
+    });
+    addParseToken('Y', function (input, array) {
+        array[YEAR] = parseInt(input, 10);
+    });
+
+    // HELPERS
+
+    function daysInYear(year) {
+        return isLeapYear(year) ? 366 : 365;
+    }
+
+    // HOOKS
+
+    hooks.parseTwoDigitYear = function (input) {
+        return toInt(input) + (toInt(input) > 68 ? 1900 : 2000);
+    };
+
+    // MOMENTS
+
+    var getSetYear = makeGetSet('FullYear', true);
+
+    function getIsLeapYear() {
+        return isLeapYear(this.year());
+    }
+
+    function createDate(y, m, d, h, M, s, ms) {
+        // can't just apply() to create a date:
+        // https://stackoverflow.com/q/181348
+        var date;
+        // the date constructor remaps years 0-99 to 1900-1999
+        if (y < 100 && y >= 0) {
+            // preserve leap years using a full 400 year cycle, then reset
+            date = new Date(y + 400, m, d, h, M, s, ms);
+            if (isFinite(date.getFullYear())) {
+                date.setFullYear(y);
+            }
+        } else {
+            date = new Date(y, m, d, h, M, s, ms);
+        }
+
+        return date;
+    }
+
+    function createUTCDate(y) {
+        var date, args;
+        // the Date.UTC function remaps years 0-99 to 1900-1999
+        if (y < 100 && y >= 0) {
+            args = Array.prototype.slice.call(arguments);
+            // preserve leap years using a full 400 year cycle, then reset
+            args[0] = y + 400;
+            date = new Date(Date.UTC.apply(null, args));
+            if (isFinite(date.getUTCFullYear())) {
+                date.setUTCFullYear(y);
+            }
+        } else {
+            date = new Date(Date.UTC.apply(null, arguments));
+        }
+
+        return date;
+    }
+
+    // start-of-first-week - start-of-year
+    function firstWeekOffset(year, dow, doy) {
+        var // first-week day -- which january is always in the first week (4 for iso, 1 for other)
+            fwd = 7 + dow - doy,
+            // first-week day local weekday -- which local weekday is fwd
+            fwdlw = (7 + createUTCDate(year, 0, fwd).getUTCDay() - dow) % 7;
+
+        return -fwdlw + fwd - 1;
+    }
+
+    // https://en.wikipedia.org/wiki/ISO_week_date#Calculating_a_date_given_the_year.2C_week_number_and_weekday
+    function dayOfYearFromWeeks(year, week, weekday, dow, doy) {
+        var localWeekday = (7 + weekday - dow) % 7,
+            weekOffset = firstWeekOffset(year, dow, doy),
+            dayOfYear = 1 + 7 * (week - 1) + localWeekday + weekOffset,
+            resYear,
+            resDayOfYear;
+
+        if (dayOfYear <= 0) {
+            resYear = year - 1;
+            resDayOfYear = daysInYear(resYear) + dayOfYear;
+        } else if (dayOfYear > daysInYear(year)) {
+            resYear = year + 1;
+            resDayOfYear = dayOfYear - daysInYear(year);
+        } else {
+            resYear = year;
+            resDayOfYear = dayOfYear;
+        }
+
+        return {
+            year: resYear,
+            dayOfYear: resDayOfYear,
+        };
+    }
+
+    function weekOfYear(mom, dow, doy) {
+        var weekOffset = firstWeekOffset(mom.year(), dow, doy),
+            week = Math.floor((mom.dayOfYear() - weekOffset - 1) / 7) + 1,
+            resWeek,
+            resYear;
+
+        if (week < 1) {
+            resYear = mom.year() - 1;
+            resWeek = week + weeksInYear(resYear, dow, doy);
+        } else if (week > weeksInYear(mom.year(), dow, doy)) {
+            resWeek = week - weeksInYear(mom.year(), dow, doy);
+            resYear = mom.year() + 1;
+        } else {
+            resYear = mom.year();
+            resWeek = week;
+        }
+
+        return {
+            week: resWeek,
+            year: resYear,
+        };
+    }
+
+    function weeksInYear(year, dow, doy) {
+        var weekOffset = firstWeekOffset(year, dow, doy),
+            weekOffsetNext = firstWeekOffset(year + 1, dow, doy);
+        return (daysInYear(year) - weekOffset + weekOffsetNext) / 7;
+    }
+
+    // FORMATTING
+
+    addFormatToken('w', ['ww', 2], 'wo', 'week');
+    addFormatToken('W', ['WW', 2], 'Wo', 'isoWeek');
+
+    // ALIASES
+
+    addUnitAlias('week', 'w');
+    addUnitAlias('isoWeek', 'W');
+
+    // PRIORITIES
+
+    addUnitPriority('week', 5);
+    addUnitPriority('isoWeek', 5);
+
+    // PARSING
+
+    addRegexToken('w', match1to2);
+    addRegexToken('ww', match1to2, match2);
+    addRegexToken('W', match1to2);
+    addRegexToken('WW', match1to2, match2);
+
+    addWeekParseToken(['w', 'ww', 'W', 'WW'], function (
+        input,
+        week,
+        config,
+        token
+    ) {
+        week[token.substr(0, 1)] = toInt(input);
+    });
+
+    // HELPERS
+
+    // LOCALES
+
+    function localeWeek(mom) {
+        return weekOfYear(mom, this._week.dow, this._week.doy).week;
+    }
+
+    var defaultLocaleWeek = {
+        dow: 0, // Sunday is the first day of the week.
+        doy: 6, // The week that contains Jan 6th is the first week of the year.
+    };
+
+    function localeFirstDayOfWeek() {
+        return this._week.dow;
+    }
+
+    function localeFirstDayOfYear() {
+        return this._week.doy;
+    }
+
+    // MOMENTS
+
+    function getSetWeek(input) {
+        var week = this.localeData().week(this);
+        return input == null ? week : this.add((input - week) * 7, 'd');
+    }
+
+    function getSetISOWeek(input) {
+        var week = weekOfYear(this, 1, 4).week;
+        return input == null ? week : this.add((input - week) * 7, 'd');
+    }
+
+    // FORMATTING
+
+    addFormatToken('d', 0, 'do', 'day');
+
+    addFormatToken('dd', 0, 0, function (format) {
+        return this.localeData().weekdaysMin(this, format);
+    });
+
+    addFormatToken('ddd', 0, 0, function (format) {
+        return this.localeData().weekdaysShort(this, format);
+    });
+
+    addFormatToken('dddd', 0, 0, function (format) {
+        return this.localeData().weekdays(this, format);
+    });
+
+    addFormatToken('e', 0, 0, 'weekday');
+    addFormatToken('E', 0, 0, 'isoWeekday');
+
+    // ALIASES
+
+    addUnitAlias('day', 'd');
+    addUnitAlias('weekday', 'e');
+    addUnitAlias('isoWeekday', 'E');
+
+    // PRIORITY
+    addUnitPriority('day', 11);
+    addUnitPriority('weekday', 11);
+    addUnitPriority('isoWeekday', 11);
+
+    // PARSING
+
+    addRegexToken('d', match1to2);
+    addRegexToken('e', match1to2);
+    addRegexToken('E', match1to2);
+    addRegexToken('dd', function (isStrict, locale) {
+        return locale.weekdaysMinRegex(isStrict);
+    });
+    addRegexToken('ddd', function (isStrict, locale) {
+        return locale.weekdaysShortRegex(isStrict);
+    });
+    addRegexToken('dddd', function (isStrict, locale) {
+        return locale.weekdaysRegex(isStrict);
+    });
+
+    addWeekParseToken(['dd', 'ddd', 'dddd'], function (input, week, config, token) {
+        var weekday = config._locale.weekdaysParse(input, token, config._strict);
+        // if we didn't get a weekday name, mark the date as invalid
+        if (weekday != null) {
+            week.d = weekday;
+        } else {
+            getParsingFlags(config).invalidWeekday = input;
+        }
+    });
+
+    addWeekParseToken(['d', 'e', 'E'], function (input, week, config, token) {
+        week[token] = toInt(input);
+    });
+
+    // HELPERS
+
+    function parseWeekday(input, locale) {
+        if (typeof input !== 'string') {
+            return input;
+        }
+
+        if (!isNaN(input)) {
+            return parseInt(input, 10);
+        }
+
+        input = locale.weekdaysParse(input);
+        if (typeof input === 'number') {
+            return input;
+        }
+
+        return null;
+    }
+
+    function parseIsoWeekday(input, locale) {
+        if (typeof input === 'string') {
+            return locale.weekdaysParse(input) % 7 || 7;
+        }
+        return isNaN(input) ? null : input;
+    }
+
+    // LOCALES
+    function shiftWeekdays(ws, n) {
+        return ws.slice(n, 7).concat(ws.slice(0, n));
+    }
+
+    var defaultLocaleWeekdays = 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split(
+            '_'
+        ),
+        defaultLocaleWeekdaysShort = 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),
+        defaultLocaleWeekdaysMin = 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),
+        defaultWeekdaysRegex = matchWord,
+        defaultWeekdaysShortRegex = matchWord,
+        defaultWeekdaysMinRegex = matchWord;
+
+    function localeWeekdays(m, format) {
+        var weekdays = isArray(this._weekdays)
+            ? this._weekdays
+            : this._weekdays[
+                  m && m !== true && this._weekdays.isFormat.test(format)
+                      ? 'format'
+                      : 'standalone'
+              ];
+        return m === true
+            ? shiftWeekdays(weekdays, this._week.dow)
+            : m
+            ? weekdays[m.day()]
+            : weekdays;
+    }
+
+    function localeWeekdaysShort(m) {
+        return m === true
+            ? shiftWeekdays(this._weekdaysShort, this._week.dow)
+            : m
+            ? this._weekdaysShort[m.day()]
+            : this._weekdaysShort;
+    }
+
+    function localeWeekdaysMin(m) {
+        return m === true
+            ? shiftWeekdays(this._weekdaysMin, this._week.dow)
+            : m
+            ? this._weekdaysMin[m.day()]
+            : this._weekdaysMin;
+    }
+
+    function handleStrictParse$1(weekdayName, format, strict) {
+        var i,
+            ii,
+            mom,
+            llc = weekdayName.toLocaleLowerCase();
+        if (!this._weekdaysParse) {
+            this._weekdaysParse = [];
+            this._shortWeekdaysParse = [];
+            this._minWeekdaysParse = [];
+
+            for (i = 0; i < 7; ++i) {
+                mom = createUTC([2000, 1]).day(i);
+                this._minWeekdaysParse[i] = this.weekdaysMin(
+                    mom,
+                    ''
+                ).toLocaleLowerCase();
+                this._shortWeekdaysParse[i] = this.weekdaysShort(
+                    mom,
+                    ''
+                ).toLocaleLowerCase();
+                this._weekdaysParse[i] = this.weekdays(mom, '').toLocaleLowerCase();
+            }
+        }
+
+        if (strict) {
+            if (format === 'dddd') {
+                ii = indexOf.call(this._weekdaysParse, llc);
+                return ii !== -1 ? ii : null;
+            } else if (format === 'ddd') {
+                ii = indexOf.call(this._shortWeekdaysParse, llc);
+                return ii !== -1 ? ii : null;
+            } else {
+                ii = indexOf.call(this._minWeekdaysParse, llc);
+                return ii !== -1 ? ii : null;
+            }
+        } else {
+            if (format === 'dddd') {
+                ii = indexOf.call(this._weekdaysParse, llc);
+                if (ii !== -1) {
+                    return ii;
+                }
+                ii = indexOf.call(this._shortWeekdaysParse, llc);
+                if (ii !== -1) {
+                    return ii;
+                }
+                ii = indexOf.call(this._minWeekdaysParse, llc);
+                return ii !== -1 ? ii : null;
+            } else if (format === 'ddd') {
+                ii = indexOf.call(this._shortWeekdaysParse, llc);
+                if (ii !== -1) {
+                    return ii;
+                }
+                ii = indexOf.call(this._weekdaysParse, llc);
+                if (ii !== -1) {
+                    return ii;
+                }
+                ii = indexOf.call(this._minWeekdaysParse, llc);
+                return ii !== -1 ? ii : null;
+            } else {
+                ii = indexOf.call(this._minWeekdaysParse, llc);
+                if (ii !== -1) {
+                    return ii;
+                }
+                ii = indexOf.call(this._weekdaysParse, llc);
+                if (ii !== -1) {
+                    return ii;
+                }
+                ii = indexOf.call(this._shortWeekdaysParse, llc);
+                return ii !== -1 ? ii : null;
+            }
+        }
+    }
+
+    function localeWeekdaysParse(weekdayName, format, strict) {
+        var i, mom, regex;
+
+        if (this._weekdaysParseExact) {
+            return handleStrictParse$1.call(this, weekdayName, format, strict);
+        }
+
+        if (!this._weekdaysParse) {
+            this._weekdaysParse = [];
+            this._minWeekdaysParse = [];
+            this._shortWeekdaysParse = [];
+            this._fullWeekdaysParse = [];
+        }
+
+        for (i = 0; i < 7; i++) {
+            // make the regex if we don't have it already
+
+            mom = createUTC([2000, 1]).day(i);
+            if (strict && !this._fullWeekdaysParse[i]) {
+                this._fullWeekdaysParse[i] = new RegExp(
+                    '^' + this.weekdays(mom, '').replace('.', '\\.?') + '$',
+                    'i'
+                );
+                this._shortWeekdaysParse[i] = new RegExp(
+                    '^' + this.weekdaysShort(mom, '').replace('.', '\\.?') + '$',
+                    'i'
+                );
+                this._minWeekdaysParse[i] = new RegExp(
+                    '^' + this.weekdaysMin(mom, '').replace('.', '\\.?') + '$',
+                    'i'
+                );
+            }
+            if (!this._weekdaysParse[i]) {
+                regex =
+                    '^' +
+                    this.weekdays(mom, '') +
+                    '|^' +
+                    this.weekdaysShort(mom, '') +
+                    '|^' +
+                    this.weekdaysMin(mom, '');
+                this._weekdaysParse[i] = new RegExp(regex.replace('.', ''), 'i');
+            }
+            // test the regex
+            if (
+                strict &&
+                format === 'dddd' &&
+                this._fullWeekdaysParse[i].test(weekdayName)
+            ) {
+                return i;
+            } else if (
+                strict &&
+                format === 'ddd' &&
+                this._shortWeekdaysParse[i].test(weekdayName)
+            ) {
+                return i;
+            } else if (
+                strict &&
+                format === 'dd' &&
+                this._minWeekdaysParse[i].test(weekdayName)
+            ) {
+                return i;
+            } else if (!strict && this._weekdaysParse[i].test(weekdayName)) {
+                return i;
+            }
+        }
+    }
+
+    // MOMENTS
+
+    function getSetDayOfWeek(input) {
+        if (!this.isValid()) {
+            return input != null ? this : NaN;
+        }
+        var day = this._isUTC ? this._d.getUTCDay() : this._d.getDay();
+        if (input != null) {
+            input = parseWeekday(input, this.localeData());
+            return this.add(input - day, 'd');
+        } else {
+            return day;
+        }
+    }
+
+    function getSetLocaleDayOfWeek(input) {
+        if (!this.isValid()) {
+            return input != null ? this : NaN;
+        }
+        var weekday = (this.day() + 7 - this.localeData()._week.dow) % 7;
+        return input == null ? weekday : this.add(input - weekday, 'd');
+    }
+
+    function getSetISODayOfWeek(input) {
+        if (!this.isValid()) {
+            return input != null ? this : NaN;
+        }
+
+        // behaves the same as moment#day except
+        // as a getter, returns 7 instead of 0 (1-7 range instead of 0-6)
+        // as a setter, sunday should belong to the previous week.
+
+        if (input != null) {
+            var weekday = parseIsoWeekday(input, this.localeData());
+            return this.day(this.day() % 7 ? weekday : weekday - 7);
+        } else {
+            return this.day() || 7;
+        }
+    }
+
+    function weekdaysRegex(isStrict) {
+        if (this._weekdaysParseExact) {
+            if (!hasOwnProp(this, '_weekdaysRegex')) {
+                computeWeekdaysParse.call(this);
+            }
+            if (isStrict) {
+                return this._weekdaysStrictRegex;
+            } else {
+                return this._weekdaysRegex;
+            }
+        } else {
+            if (!hasOwnProp(this, '_weekdaysRegex')) {
+                this._weekdaysRegex = defaultWeekdaysRegex;
+            }
+            return this._weekdaysStrictRegex && isStrict
+                ? this._weekdaysStrictRegex
+                : this._weekdaysRegex;
+        }
+    }
+
+    function weekdaysShortRegex(isStrict) {
+        if (this._weekdaysParseExact) {
+            if (!hasOwnProp(this, '_weekdaysRegex')) {
+                computeWeekdaysParse.call(this);
+            }
+            if (isStrict) {
+                return this._weekdaysShortStrictRegex;
+            } else {
+                return this._weekdaysShortRegex;
+            }
+        } else {
+            if (!hasOwnProp(this, '_weekdaysShortRegex')) {
+                this._weekdaysShortRegex = defaultWeekdaysShortRegex;
+            }
+            return this._weekdaysShortStrictRegex && isStrict
+                ? this._weekdaysShortStrictRegex
+                : this._weekdaysShortRegex;
+        }
+    }
+
+    function weekdaysMinRegex(isStrict) {
+        if (this._weekdaysParseExact) {
+            if (!hasOwnProp(this, '_weekdaysRegex')) {
+                computeWeekdaysParse.call(this);
+            }
+            if (isStrict) {
+                return this._weekdaysMinStrictRegex;
+            } else {
+                return this._weekdaysMinRegex;
+            }
+        } else {
+            if (!hasOwnProp(this, '_weekdaysMinRegex')) {
+                this._weekdaysMinRegex = defaultWeekdaysMinRegex;
+            }
+            return this._weekdaysMinStrictRegex && isStrict
+                ? this._weekdaysMinStrictRegex
+                : this._weekdaysMinRegex;
+        }
+    }
+
+    function computeWeekdaysParse() {
+        function cmpLenRev(a, b) {
+            return b.length - a.length;
+        }
+
+        var minPieces = [],
+            shortPieces = [],
+            longPieces = [],
+            mixedPieces = [],
+            i,
+            mom,
+            minp,
+            shortp,
+            longp;
+        for (i = 0; i < 7; i++) {
+            // make the regex if we don't have it already
+            mom = createUTC([2000, 1]).day(i);
+            minp = regexEscape(this.weekdaysMin(mom, ''));
+            shortp = regexEscape(this.weekdaysShort(mom, ''));
+            longp = regexEscape(this.weekdays(mom, ''));
+            minPieces.push(minp);
+            shortPieces.push(shortp);
+            longPieces.push(longp);
+            mixedPieces.push(minp);
+            mixedPieces.push(shortp);
+            mixedPieces.push(longp);
+        }
+        // Sorting makes sure if one weekday (or abbr) is a prefix of another it
+        // will match the longer piece.
+        minPieces.sort(cmpLenRev);
+        shortPieces.sort(cmpLenRev);
+        longPieces.sort(cmpLenRev);
+        mixedPieces.sort(cmpLenRev);
+
+        this._weekdaysRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');
+        this._weekdaysShortRegex = this._weekdaysRegex;
+        this._weekdaysMinRegex = this._weekdaysRegex;
+
+        this._weekdaysStrictRegex = new RegExp(
+            '^(' + longPieces.join('|') + ')',
+            'i'
+        );
+        this._weekdaysShortStrictRegex = new RegExp(
+            '^(' + shortPieces.join('|') + ')',
+            'i'
+        );
+        this._weekdaysMinStrictRegex = new RegExp(
+            '^(' + minPieces.join('|') + ')',
+            'i'
+        );
+    }
+
+    // FORMATTING
+
+    function hFormat() {
+        return this.hours() % 12 || 12;
+    }
+
+    function kFormat() {
+        return this.hours() || 24;
+    }
+
+    addFormatToken('H', ['HH', 2], 0, 'hour');
+    addFormatToken('h', ['hh', 2], 0, hFormat);
+    addFormatToken('k', ['kk', 2], 0, kFormat);
+
+    addFormatToken('hmm', 0, 0, function () {
+        return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2);
+    });
+
+    addFormatToken('hmmss', 0, 0, function () {
+        return (
+            '' +
+            hFormat.apply(this) +
+            zeroFill(this.minutes(), 2) +
+            zeroFill(this.seconds(), 2)
+        );
+    });
+
+    addFormatToken('Hmm', 0, 0, function () {
+        return '' + this.hours() + zeroFill(this.minutes(), 2);
+    });
+
+    addFormatToken('Hmmss', 0, 0, function () {
+        return (
+            '' +
+            this.hours() +
+            zeroFill(this.minutes(), 2) +
+            zeroFill(this.seconds(), 2)
+        );
+    });
+
+    function meridiem(token, lowercase) {
+        addFormatToken(token, 0, 0, function () {
+            return this.localeData().meridiem(
+                this.hours(),
+                this.minutes(),
+                lowercase
+            );
+        });
+    }
+
+    meridiem('a', true);
+    meridiem('A', false);
+
+    // ALIASES
+
+    addUnitAlias('hour', 'h');
+
+    // PRIORITY
+    addUnitPriority('hour', 13);
+
+    // PARSING
+
+    function matchMeridiem(isStrict, locale) {
+        return locale._meridiemParse;
+    }
+
+    addRegexToken('a', matchMeridiem);
+    addRegexToken('A', matchMeridiem);
+    addRegexToken('H', match1to2);
+    addRegexToken('h', match1to2);
+    addRegexToken('k', match1to2);
+    addRegexToken('HH', match1to2, match2);
+    addRegexToken('hh', match1to2, match2);
+    addRegexToken('kk', match1to2, match2);
+
+    addRegexToken('hmm', match3to4);
+    addRegexToken('hmmss', match5to6);
+    addRegexToken('Hmm', match3to4);
+    addRegexToken('Hmmss', match5to6);
+
+    addParseToken(['H', 'HH'], HOUR);
+    addParseToken(['k', 'kk'], function (input, array, config) {
+        var kInput = toInt(input);
+        array[HOUR] = kInput === 24 ? 0 : kInput;
+    });
+    addParseToken(['a', 'A'], function (input, array, config) {
+        config._isPm = config._locale.isPM(input);
+        config._meridiem = input;
+    });
+    addParseToken(['h', 'hh'], function (input, array, config) {
+        array[HOUR] = toInt(input);
+        getParsingFlags(config).bigHour = true;
+    });
+    addParseToken('hmm', function (input, array, config) {
+        var pos = input.length - 2;
+        array[HOUR] = toInt(input.substr(0, pos));
+        array[MINUTE] = toInt(input.substr(pos));
+        getParsingFlags(config).bigHour = true;
+    });
+    addParseToken('hmmss', function (input, array, config) {
+        var pos1 = input.length - 4,
+            pos2 = input.length - 2;
+        array[HOUR] = toInt(input.substr(0, pos1));
+        array[MINUTE] = toInt(input.substr(pos1, 2));
+        array[SECOND] = toInt(input.substr(pos2));
+        getParsingFlags(config).bigHour = true;
+    });
+    addParseToken('Hmm', function (input, array, config) {
+        var pos = input.length - 2;
+        array[HOUR] = toInt(input.substr(0, pos));
+        array[MINUTE] = toInt(input.substr(pos));
+    });
+    addParseToken('Hmmss', function (input, array, config) {
+        var pos1 = input.length - 4,
+            pos2 = input.length - 2;
+        array[HOUR] = toInt(input.substr(0, pos1));
+        array[MINUTE] = toInt(input.substr(pos1, 2));
+        array[SECOND] = toInt(input.substr(pos2));
+    });
+
+    // LOCALES
+
+    function localeIsPM(input) {
+        // IE8 Quirks Mode & IE7 Standards Mode do not allow accessing strings like arrays
+        // Using charAt should be more compatible.
+        return (input + '').toLowerCase().charAt(0) === 'p';
+    }
+
+    var defaultLocaleMeridiemParse = /[ap]\.?m?\.?/i,
+        // Setting the hour should keep the time, because the user explicitly
+        // specified which hour they want. So trying to maintain the same hour (in
+        // a new timezone) makes sense. Adding/subtracting hours does not follow
+        // this rule.
+        getSetHour = makeGetSet('Hours', true);
+
+    function localeMeridiem(hours, minutes, isLower) {
+        if (hours > 11) {
+            return isLower ? 'pm' : 'PM';
+        } else {
+            return isLower ? 'am' : 'AM';
+        }
+    }
+
+    var baseConfig = {
+        calendar: defaultCalendar,
+        longDateFormat: defaultLongDateFormat,
+        invalidDate: defaultInvalidDate,
+        ordinal: defaultOrdinal,
+        dayOfMonthOrdinalParse: defaultDayOfMonthOrdinalParse,
+        relativeTime: defaultRelativeTime,
+
+        months: defaultLocaleMonths,
+        monthsShort: defaultLocaleMonthsShort,
+
+        week: defaultLocaleWeek,
+
+        weekdays: defaultLocaleWeekdays,
+        weekdaysMin: defaultLocaleWeekdaysMin,
+        weekdaysShort: defaultLocaleWeekdaysShort,
+
+        meridiemParse: defaultLocaleMeridiemParse,
+    };
+
+    // internal storage for locale config files
+    var locales = {},
+        localeFamilies = {},
+        globalLocale;
+
+    function commonPrefix(arr1, arr2) {
+        var i,
+            minl = Math.min(arr1.length, arr2.length);
+        for (i = 0; i < minl; i += 1) {
+            if (arr1[i] !== arr2[i]) {
+                return i;
+            }
+        }
+        return minl;
+    }
+
+    function normalizeLocale(key) {
+        return key ? key.toLowerCase().replace('_', '-') : key;
+    }
+
+    // pick the locale from the array
+    // try ['en-au', 'en-gb'] as 'en-au', 'en-gb', 'en', as in move through the list trying each
+    // substring from most specific to least, but move to the next array item if it's a more specific variant than the current root
+    function chooseLocale(names) {
+        var i = 0,
+            j,
+            next,
+            locale,
+            split;
+
+        while (i < names.length) {
+            split = normalizeLocale(names[i]).split('-');
+            j = split.length;
+            next = normalizeLocale(names[i + 1]);
+            next = next ? next.split('-') : null;
+            while (j > 0) {
+                locale = loadLocale(split.slice(0, j).join('-'));
+                if (locale) {
+                    return locale;
+                }
+                if (
+                    next &&
+                    next.length >= j &&
+                    commonPrefix(split, next) >= j - 1
+                ) {
+                    //the next array item is better than a shallower substring of this one
+                    break;
+                }
+                j--;
+            }
+            i++;
+        }
+        return globalLocale;
+    }
+
+    function loadLocale(name) {
+        var oldLocale = null,
+            aliasedRequire;
+        // TODO: Find a better way to register and load all the locales in Node
+        if (
+            locales[name] === undefined &&
+            typeof module !== 'undefined' &&
+            module &&
+            module.exports
+        ) {
+            try {
+                oldLocale = globalLocale._abbr;
+                aliasedRequire = require;
+                aliasedRequire('./locale/' + name);
+                getSetGlobalLocale(oldLocale);
+            } catch (e) {
+                // mark as not found to avoid repeating expensive file require call causing high CPU
+                // when trying to find en-US, en_US, en-us for every format call
+                locales[name] = null; // null means not found
+            }
+        }
+        return locales[name];
+    }
+
+    // This function will load locale and then set the global locale.  If
+    // no arguments are passed in, it will simply return the current global
+    // locale key.
+    function getSetGlobalLocale(key, values) {
+        var data;
+        if (key) {
+            if (isUndefined(values)) {
+                data = getLocale(key);
+            } else {
+                data = defineLocale(key, values);
+            }
+
+            if (data) {
+                // moment.duration._locale = moment._locale = data;
+                globalLocale = data;
+            } else {
+                if (typeof console !== 'undefined' && console.warn) {
+                    //warn user if arguments are passed but the locale could not be set
+                    console.warn(
+                        'Locale ' + key + ' not found. Did you forget to load it?'
+                    );
+                }
+            }
+        }
+
+        return globalLocale._abbr;
+    }
+
+    function defineLocale(name, config) {
+        if (config !== null) {
+            var locale,
+                parentConfig = baseConfig;
+            config.abbr = name;
+            if (locales[name] != null) {
+                deprecateSimple(
+                    'defineLocaleOverride',
+                    'use moment.updateLocale(localeName, config) to change ' +
+                        'an existing locale. moment.defineLocale(localeName, ' +
+                        'config) should only be used for creating a new locale ' +
+                        'See http://momentjs.com/guides/#/warnings/define-locale/ for more info.'
+                );
+                parentConfig = locales[name]._config;
+            } else if (config.parentLocale != null) {
+                if (locales[config.parentLocale] != null) {
+                    parentConfig = locales[config.parentLocale]._config;
+                } else {
+                    locale = loadLocale(config.parentLocale);
+                    if (locale != null) {
+                        parentConfig = locale._config;
+                    } else {
+                        if (!localeFamilies[config.parentLocale]) {
+                            localeFamilies[config.parentLocale] = [];
+                        }
+                        localeFamilies[config.parentLocale].push({
+                            name: name,
+                            config: config,
+                        });
+                        return null;
+                    }
+                }
+            }
+            locales[name] = new Locale(mergeConfigs(parentConfig, config));
+
+            if (localeFamilies[name]) {
+                localeFamilies[name].forEach(function (x) {
+                    defineLocale(x.name, x.config);
+                });
+            }
+
+            // backwards compat for now: also set the locale
+            // make sure we set the locale AFTER all child locales have been
+            // created, so we won't end up with the child locale set.
+            getSetGlobalLocale(name);
+
+            return locales[name];
+        } else {
+            // useful for testing
+            delete locales[name];
+            return null;
+        }
+    }
+
+    function updateLocale(name, config) {
+        if (config != null) {
+            var locale,
+                tmpLocale,
+                parentConfig = baseConfig;
+
+            if (locales[name] != null && locales[name].parentLocale != null) {
+                // Update existing child locale in-place to avoid memory-leaks
+                locales[name].set(mergeConfigs(locales[name]._config, config));
+            } else {
+                // MERGE
+                tmpLocale = loadLocale(name);
+                if (tmpLocale != null) {
+                    parentConfig = tmpLocale._config;
+                }
+                config = mergeConfigs(parentConfig, config);
+                if (tmpLocale == null) {
+                    // updateLocale is called for creating a new locale
+                    // Set abbr so it will have a name (getters return
+                    // undefined otherwise).
+                    config.abbr = name;
+                }
+                locale = new Locale(config);
+                locale.parentLocale = locales[name];
+                locales[name] = locale;
+            }
+
+            // backwards compat for now: also set the locale
+            getSetGlobalLocale(name);
+        } else {
+            // pass null for config to unupdate, useful for tests
+            if (locales[name] != null) {
+                if (locales[name].parentLocale != null) {
+                    locales[name] = locales[name].parentLocale;
+                    if (name === getSetGlobalLocale()) {
+                        getSetGlobalLocale(name);
+                    }
+                } else if (locales[name] != null) {
+                    delete locales[name];
+                }
+            }
+        }
+        return locales[name];
+    }
+
+    // returns locale data
+    function getLocale(key) {
+        var locale;
+
+        if (key && key._locale && key._locale._abbr) {
+            key = key._locale._abbr;
+        }
+
+        if (!key) {
+            return globalLocale;
+        }
+
+        if (!isArray(key)) {
+            //short-circuit everything else
+            locale = loadLocale(key);
+            if (locale) {
+                return locale;
+            }
+            key = [key];
+        }
+
+        return chooseLocale(key);
+    }
+
+    function listLocales() {
+        return keys(locales);
+    }
+
+    function checkOverflow(m) {
+        var overflow,
+            a = m._a;
+
+        if (a && getParsingFlags(m).overflow === -2) {
+            overflow =
+                a[MONTH] < 0 || a[MONTH] > 11
+                    ? MONTH
+                    : a[DATE] < 1 || a[DATE] > daysInMonth(a[YEAR], a[MONTH])
+                    ? DATE
+                    : a[HOUR] < 0 ||
+                      a[HOUR] > 24 ||
+                      (a[HOUR] === 24 &&
+                          (a[MINUTE] !== 0 ||
+                              a[SECOND] !== 0 ||
+                              a[MILLISECOND] !== 0))
+                    ? HOUR
+                    : a[MINUTE] < 0 || a[MINUTE] > 59
+                    ? MINUTE
+                    : a[SECOND] < 0 || a[SECOND] > 59
+                    ? SECOND
+                    : a[MILLISECOND] < 0 || a[MILLISECOND] > 999
+                    ? MILLISECOND
+                    : -1;
+
+            if (
+                getParsingFlags(m)._overflowDayOfYear &&
+                (overflow < YEAR || overflow > DATE)
+            ) {
+                overflow = DATE;
+            }
+            if (getParsingFlags(m)._overflowWeeks && overflow === -1) {
+                overflow = WEEK;
+            }
+            if (getParsingFlags(m)._overflowWeekday && overflow === -1) {
+                overflow = WEEKDAY;
+            }
+
+            getParsingFlags(m).overflow = overflow;
+        }
+
+        return m;
+    }
+
+    // iso 8601 regex
+    // 0000-00-00 0000-W00 or 0000-W00-0 + T + 00 or 00:00 or 00:00:00 or 00:00:00.000 + +00:00 or +0000 or +00)
+    var extendedIsoRegex = /^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([+-]\d\d(?::?\d\d)?|\s*Z)?)?$/,
+        basicIsoRegex = /^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d|))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([+-]\d\d(?::?\d\d)?|\s*Z)?)?$/,
+        tzRegex = /Z|[+-]\d\d(?::?\d\d)?/,
+        isoDates = [
+            ['YYYYYY-MM-DD', /[+-]\d{6}-\d\d-\d\d/],
+            ['YYYY-MM-DD', /\d{4}-\d\d-\d\d/],
+            ['GGGG-[W]WW-E', /\d{4}-W\d\d-\d/],
+            ['GGGG-[W]WW', /\d{4}-W\d\d/, false],
+            ['YYYY-DDD', /\d{4}-\d{3}/],
+            ['YYYY-MM', /\d{4}-\d\d/, false],
+            ['YYYYYYMMDD', /[+-]\d{10}/],
+            ['YYYYMMDD', /\d{8}/],
+            ['GGGG[W]WWE', /\d{4}W\d{3}/],
+            ['GGGG[W]WW', /\d{4}W\d{2}/, false],
+            ['YYYYDDD', /\d{7}/],
+            ['YYYYMM', /\d{6}/, false],
+            ['YYYY', /\d{4}/, false],
+        ],
+        // iso time formats and regexes
+        isoTimes = [
+            ['HH:mm:ss.SSSS', /\d\d:\d\d:\d\d\.\d+/],
+            ['HH:mm:ss,SSSS', /\d\d:\d\d:\d\d,\d+/],
+            ['HH:mm:ss', /\d\d:\d\d:\d\d/],
+            ['HH:mm', /\d\d:\d\d/],
+            ['HHmmss.SSSS', /\d\d\d\d\d\d\.\d+/],
+            ['HHmmss,SSSS', /\d\d\d\d\d\d,\d+/],
+            ['HHmmss', /\d\d\d\d\d\d/],
+            ['HHmm', /\d\d\d\d/],
+            ['HH', /\d\d/],
+        ],
+        aspNetJsonRegex = /^\/?Date\((-?\d+)/i,
+        // RFC 2822 regex: For details see https://tools.ietf.org/html/rfc2822#section-3.3
+        rfc2822 = /^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\s)?(\d{1,2})\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s(\d{2,4})\s(\d\d):(\d\d)(?::(\d\d))?\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\d{4}))$/,
+        obsOffsets = {
+            UT: 0,
+            GMT: 0,
+            EDT: -4 * 60,
+            EST: -5 * 60,
+            CDT: -5 * 60,
+            CST: -6 * 60,
+            MDT: -6 * 60,
+            MST: -7 * 60,
+            PDT: -7 * 60,
+            PST: -8 * 60,
+        };
+
+    // date from iso format
+    function configFromISO(config) {
+        var i,
+            l,
+            string = config._i,
+            match = extendedIsoRegex.exec(string) || basicIsoRegex.exec(string),
+            allowTime,
+            dateFormat,
+            timeFormat,
+            tzFormat;
+
+        if (match) {
+            getParsingFlags(config).iso = true;
+
+            for (i = 0, l = isoDates.length; i < l; i++) {
+                if (isoDates[i][1].exec(match[1])) {
+                    dateFormat = isoDates[i][0];
+                    allowTime = isoDates[i][2] !== false;
+                    break;
+                }
+            }
+            if (dateFormat == null) {
+                config._isValid = false;
+                return;
+            }
+            if (match[3]) {
+                for (i = 0, l = isoTimes.length; i < l; i++) {
+                    if (isoTimes[i][1].exec(match[3])) {
+                        // match[2] should be 'T' or space
+                        timeFormat = (match[2] || ' ') + isoTimes[i][0];
+                        break;
+                    }
+                }
+                if (timeFormat == null) {
+                    config._isValid = false;
+                    return;
+                }
+            }
+            if (!allowTime && timeFormat != null) {
+                config._isValid = false;
+                return;
+            }
+            if (match[4]) {
+                if (tzRegex.exec(match[4])) {
+                    tzFormat = 'Z';
+                } else {
+                    config._isValid = false;
+                    return;
+                }
+            }
+            config._f = dateFormat + (timeFormat || '') + (tzFormat || '');
+            configFromStringAndFormat(config);
+        } else {
+            config._isValid = false;
+        }
+    }
+
+    function extractFromRFC2822Strings(
+        yearStr,
+        monthStr,
+        dayStr,
+        hourStr,
+        minuteStr,
+        secondStr
+    ) {
+        var result = [
+            untruncateYear(yearStr),
+            defaultLocaleMonthsShort.indexOf(monthStr),
+            parseInt(dayStr, 10),
+            parseInt(hourStr, 10),
+            parseInt(minuteStr, 10),
+        ];
+
+        if (secondStr) {
+            result.push(parseInt(secondStr, 10));
+        }
+
+        return result;
+    }
+
+    function untruncateYear(yearStr) {
+        var year = parseInt(yearStr, 10);
+        if (year <= 49) {
+            return 2000 + year;
+        } else if (year <= 999) {
+            return 1900 + year;
+        }
+        return year;
+    }
+
+    function preprocessRFC2822(s) {
+        // Remove comments and folding whitespace and replace multiple-spaces with a single space
+        return s
+            .replace(/\([^)]*\)|[\n\t]/g, ' ')
+            .replace(/(\s\s+)/g, ' ')
+            .replace(/^\s\s*/, '')
+            .replace(/\s\s*$/, '');
+    }
+
+    function checkWeekday(weekdayStr, parsedInput, config) {
+        if (weekdayStr) {
+            // TODO: Replace the vanilla JS Date object with an independent day-of-week check.
+            var weekdayProvided = defaultLocaleWeekdaysShort.indexOf(weekdayStr),
+                weekdayActual = new Date(
+                    parsedInput[0],
+                    parsedInput[1],
+                    parsedInput[2]
+                ).getDay();
+            if (weekdayProvided !== weekdayActual) {
+                getParsingFlags(config).weekdayMismatch = true;
+                config._isValid = false;
+                return false;
+            }
+        }
+        return true;
+    }
+
+    function calculateOffset(obsOffset, militaryOffset, numOffset) {
+        if (obsOffset) {
+            return obsOffsets[obsOffset];
+        } else if (militaryOffset) {
+            // the only allowed military tz is Z
+            return 0;
+        } else {
+            var hm = parseInt(numOffset, 10),
+                m = hm % 100,
+                h = (hm - m) / 100;
+            return h * 60 + m;
+        }
+    }
+
+    // date and time from ref 2822 format
+    function configFromRFC2822(config) {
+        var match = rfc2822.exec(preprocessRFC2822(config._i)),
+            parsedArray;
+        if (match) {
+            parsedArray = extractFromRFC2822Strings(
+                match[4],
+                match[3],
+                match[2],
+                match[5],
+                match[6],
+                match[7]
+            );
+            if (!checkWeekday(match[1], parsedArray, config)) {
+                return;
+            }
+
+            config._a = parsedArray;
+            config._tzm = calculateOffset(match[8], match[9], match[10]);
+
+            config._d = createUTCDate.apply(null, config._a);
+            config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);
+
+            getParsingFlags(config).rfc2822 = true;
+        } else {
+            config._isValid = false;
+        }
+    }
+
+    // date from 1) ASP.NET, 2) ISO, 3) RFC 2822 formats, or 4) optional fallback if parsing isn't strict
+    function configFromString(config) {
+        var matched = aspNetJsonRegex.exec(config._i);
+        if (matched !== null) {
+            config._d = new Date(+matched[1]);
+            return;
+        }
+
+        configFromISO(config);
+        if (config._isValid === false) {
+            delete config._isValid;
+        } else {
+            return;
+        }
+
+        configFromRFC2822(config);
+        if (config._isValid === false) {
+            delete config._isValid;
+        } else {
+            return;
+        }
+
+        if (config._strict) {
+            config._isValid = false;
+        } else {
+            // Final attempt, use Input Fallback
+            hooks.createFromInputFallback(config);
+        }
+    }
+
+    hooks.createFromInputFallback = deprecate(
+        'value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), ' +
+            'which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are ' +
+            'discouraged and will be removed in an upcoming major release. Please refer to ' +
+            'http://momentjs.com/guides/#/warnings/js-date/ for more info.',
+        function (config) {
+            config._d = new Date(config._i + (config._useUTC ? ' UTC' : ''));
+        }
+    );
+
+    // Pick the first defined of two or three arguments.
+    function defaults(a, b, c) {
+        if (a != null) {
+            return a;
+        }
+        if (b != null) {
+            return b;
+        }
+        return c;
+    }
+
+    function currentDateArray(config) {
+        // hooks is actually the exported moment object
+        var nowValue = new Date(hooks.now());
+        if (config._useUTC) {
+            return [
+                nowValue.getUTCFullYear(),
+                nowValue.getUTCMonth(),
+                nowValue.getUTCDate(),
+            ];
+        }
+        return [nowValue.getFullYear(), nowValue.getMonth(), nowValue.getDate()];
+    }
+
+    // convert an array to a date.
+    // the array should mirror the parameters below
+    // note: all values past the year are optional and will default to the lowest possible value.
+    // [year, month, day , hour, minute, second, millisecond]
+    function configFromArray(config) {
+        var i,
+            date,
+            input = [],
+            currentDate,
+            expectedWeekday,
+            yearToUse;
+
+        if (config._d) {
+            return;
+        }
+
+        currentDate = currentDateArray(config);
+
+        //compute day of the year from weeks and weekdays
+        if (config._w && config._a[DATE] == null && config._a[MONTH] == null) {
+            dayOfYearFromWeekInfo(config);
+        }
+
+        //if the day of the year is set, figure out what it is
+        if (config._dayOfYear != null) {
+            yearToUse = defaults(config._a[YEAR], currentDate[YEAR]);
+
+            if (
+                config._dayOfYear > daysInYear(yearToUse) ||
+                config._dayOfYear === 0
+            ) {
+                getParsingFlags(config)._overflowDayOfYear = true;
+            }
+
+            date = createUTCDate(yearToUse, 0, config._dayOfYear);
+            config._a[MONTH] = date.getUTCMonth();
+            config._a[DATE] = date.getUTCDate();
+        }
+
+        // Default to current date.
+        // * if no year, month, day of month are given, default to today
+        // * if day of month is given, default month and year
+        // * if month is given, default only year
+        // * if year is given, don't default anything
+        for (i = 0; i < 3 && config._a[i] == null; ++i) {
+            config._a[i] = input[i] = currentDate[i];
+        }
+
+        // Zero out whatever was not defaulted, including time
+        for (; i < 7; i++) {
+            config._a[i] = input[i] =
+                config._a[i] == null ? (i === 2 ? 1 : 0) : config._a[i];
+        }
+
+        // Check for 24:00:00.000
+        if (
+            config._a[HOUR] === 24 &&
+            config._a[MINUTE] === 0 &&
+            config._a[SECOND] === 0 &&
+            config._a[MILLISECOND] === 0
+        ) {
+            config._nextDay = true;
+            config._a[HOUR] = 0;
+        }
+
+        config._d = (config._useUTC ? createUTCDate : createDate).apply(
+            null,
+            input
+        );
+        expectedWeekday = config._useUTC
+            ? config._d.getUTCDay()
+            : config._d.getDay();
+
+        // Apply timezone offset from input. The actual utcOffset can be changed
+        // with parseZone.
+        if (config._tzm != null) {
+            config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);
+        }
+
+        if (config._nextDay) {
+            config._a[HOUR] = 24;
+        }
+
+        // check for mismatching day of week
+        if (
+            config._w &&
+            typeof config._w.d !== 'undefined' &&
+            config._w.d !== expectedWeekday
+        ) {
+            getParsingFlags(config).weekdayMismatch = true;
+        }
+    }
+
+    function dayOfYearFromWeekInfo(config) {
+        var w, weekYear, week, weekday, dow, doy, temp, weekdayOverflow, curWeek;
+
+        w = config._w;
+        if (w.GG != null || w.W != null || w.E != null) {
+            dow = 1;
+            doy = 4;
+
+            // TODO: We need to take the current isoWeekYear, but that depends on
+            // how we interpret now (local, utc, fixed offset). So create
+            // a now version of current config (take local/utc/offset flags, and
+            // create now).
+            weekYear = defaults(
+                w.GG,
+                config._a[YEAR],
+                weekOfYear(createLocal(), 1, 4).year
+            );
+            week = defaults(w.W, 1);
+            weekday = defaults(w.E, 1);
+            if (weekday < 1 || weekday > 7) {
+                weekdayOverflow = true;
+            }
+        } else {
+            dow = config._locale._week.dow;
+            doy = config._locale._week.doy;
+
+            curWeek = weekOfYear(createLocal(), dow, doy);
+
+            weekYear = defaults(w.gg, config._a[YEAR], curWeek.year);
+
+            // Default to current week.
+            week = defaults(w.w, curWeek.week);
+
+            if (w.d != null) {
+                // weekday -- low day numbers are considered next week
+                weekday = w.d;
+                if (weekday < 0 || weekday > 6) {
+                    weekdayOverflow = true;
+                }
+            } else if (w.e != null) {
+                // local weekday -- counting starts from beginning of week
+                weekday = w.e + dow;
+                if (w.e < 0 || w.e > 6) {
+                    weekdayOverflow = true;
+                }
+            } else {
+                // default to beginning of week
+                weekday = dow;
+            }
+        }
+        if (week < 1 || week > weeksInYear(weekYear, dow, doy)) {
+            getParsingFlags(config)._overflowWeeks = true;
+        } else if (weekdayOverflow != null) {
+            getParsingFlags(config)._overflowWeekday = true;
+        } else {
+            temp = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy);
+            config._a[YEAR] = temp.year;
+            config._dayOfYear = temp.dayOfYear;
+        }
+    }
+
+    // constant that refers to the ISO standard
+    hooks.ISO_8601 = function () {};
+
+    // constant that refers to the RFC 2822 form
+    hooks.RFC_2822 = function () {};
+
+    // date from string and format string
+    function configFromStringAndFormat(config) {
+        // TODO: Move this to another part of the creation flow to prevent circular deps
+        if (config._f === hooks.ISO_8601) {
+            configFromISO(config);
+            return;
+        }
+        if (config._f === hooks.RFC_2822) {
+            configFromRFC2822(config);
+            return;
+        }
+        config._a = [];
+        getParsingFlags(config).empty = true;
+
+        // This array is used to make a Date, either with `new Date` or `Date.UTC`
+        var string = '' + config._i,
+            i,
+            parsedInput,
+            tokens,
+            token,
+            skipped,
+            stringLength = string.length,
+            totalParsedInputLength = 0,
+            era;
+
+        tokens =
+            expandFormat(config._f, config._locale).match(formattingTokens) || [];
+
+        for (i = 0; i < tokens.length; i++) {
+            token = tokens[i];
+            parsedInput = (string.match(getParseRegexForToken(token, config)) ||
+                [])[0];
+            if (parsedInput) {
+                skipped = string.substr(0, string.indexOf(parsedInput));
+                if (skipped.length > 0) {
+                    getParsingFlags(config).unusedInput.push(skipped);
+                }
+                string = string.slice(
+                    string.indexOf(parsedInput) + parsedInput.length
+                );
+                totalParsedInputLength += parsedInput.length;
+            }
+            // don't parse if it's not a known token
+            if (formatTokenFunctions[token]) {
+                if (parsedInput) {
+                    getParsingFlags(config).empty = false;
+                } else {
+                    getParsingFlags(config).unusedTokens.push(token);
+                }
+                addTimeToArrayFromToken(token, parsedInput, config);
+            } else if (config._strict && !parsedInput) {
+                getParsingFlags(config).unusedTokens.push(token);
+            }
+        }
+
+        // add remaining unparsed input length to the string
+        getParsingFlags(config).charsLeftOver =
+            stringLength - totalParsedInputLength;
+        if (string.length > 0) {
+            getParsingFlags(config).unusedInput.push(string);
+        }
+
+        // clear _12h flag if hour is <= 12
+        if (
+            config._a[HOUR] <= 12 &&
+            getParsingFlags(config).bigHour === true &&
+            config._a[HOUR] > 0
+        ) {
+            getParsingFlags(config).bigHour = undefined;
+        }
+
+        getParsingFlags(config).parsedDateParts = config._a.slice(0);
+        getParsingFlags(config).meridiem = config._meridiem;
+        // handle meridiem
+        config._a[HOUR] = meridiemFixWrap(
+            config._locale,
+            config._a[HOUR],
+            config._meridiem
+        );
+
+        // handle era
+        era = getParsingFlags(config).era;
+        if (era !== null) {
+            config._a[YEAR] = config._locale.erasConvertYear(era, config._a[YEAR]);
+        }
+
+        configFromArray(config);
+        checkOverflow(config);
+    }
+
+    function meridiemFixWrap(locale, hour, meridiem) {
+        var isPm;
+
+        if (meridiem == null) {
+            // nothing to do
+            return hour;
+        }
+        if (locale.meridiemHour != null) {
+            return locale.meridiemHour(hour, meridiem);
+        } else if (locale.isPM != null) {
+            // Fallback
+            isPm = locale.isPM(meridiem);
+            if (isPm && hour < 12) {
+                hour += 12;
+            }
+            if (!isPm && hour === 12) {
+                hour = 0;
+            }
+            return hour;
+        } else {
+            // this is not supposed to happen
+            return hour;
+        }
+    }
+
+    // date from string and array of format strings
+    function configFromStringAndArray(config) {
+        var tempConfig,
+            bestMoment,
+            scoreToBeat,
+            i,
+            currentScore,
+            validFormatFound,
+            bestFormatIsValid = false;
+
+        if (config._f.length === 0) {
+            getParsingFlags(config).invalidFormat = true;
+            config._d = new Date(NaN);
+            return;
+        }
+
+        for (i = 0; i < config._f.length; i++) {
+            currentScore = 0;
+            validFormatFound = false;
+            tempConfig = copyConfig({}, config);
+            if (config._useUTC != null) {
+                tempConfig._useUTC = config._useUTC;
+            }
+            tempConfig._f = config._f[i];
+            configFromStringAndFormat(tempConfig);
+
+            if (isValid(tempConfig)) {
+                validFormatFound = true;
+            }
+
+            // if there is any input that was not parsed add a penalty for that format
+            currentScore += getParsingFlags(tempConfig).charsLeftOver;
+
+            //or tokens
+            currentScore += getParsingFlags(tempConfig).unusedTokens.length * 10;
+
+            getParsingFlags(tempConfig).score = currentScore;
+
+            if (!bestFormatIsValid) {
+                if (
+                    scoreToBeat == null ||
+                    currentScore < scoreToBeat ||
+                    validFormatFound
+                ) {
+                    scoreToBeat = currentScore;
+                    bestMoment = tempConfig;
+                    if (validFormatFound) {
+                        bestFormatIsValid = true;
+                    }
+                }
+            } else {
+                if (currentScore < scoreToBeat) {
+                    scoreToBeat = currentScore;
+                    bestMoment = tempConfig;
+                }
+            }
+        }
+
+        extend(config, bestMoment || tempConfig);
+    }
+
+    function configFromObject(config) {
+        if (config._d) {
+            return;
+        }
+
+        var i = normalizeObjectUnits(config._i),
+            dayOrDate = i.day === undefined ? i.date : i.day;
+        config._a = map(
+            [i.year, i.month, dayOrDate, i.hour, i.minute, i.second, i.millisecond],
+            function (obj) {
+                return obj && parseInt(obj, 10);
+            }
+        );
+
+        configFromArray(config);
+    }
+
+    function createFromConfig(config) {
+        var res = new Moment(checkOverflow(prepareConfig(config)));
+        if (res._nextDay) {
+            // Adding is smart enough around DST
+            res.add(1, 'd');
+            res._nextDay = undefined;
+        }
+
+        return res;
+    }
+
+    function prepareConfig(config) {
+        var input = config._i,
+            format = config._f;
+
+        config._locale = config._locale || getLocale(config._l);
+
+        if (input === null || (format === undefined && input === '')) {
+            return createInvalid({ nullInput: true });
+        }
+
+        if (typeof input === 'string') {
+            config._i = input = config._locale.preparse(input);
+        }
+
+        if (isMoment(input)) {
+            return new Moment(checkOverflow(input));
+        } else if (isDate(input)) {
+            config._d = input;
+        } else if (isArray(format)) {
+            configFromStringAndArray(config);
+        } else if (format) {
+            configFromStringAndFormat(config);
+        } else {
+            configFromInput(config);
+        }
+
+        if (!isValid(config)) {
+            config._d = null;
+        }
+
+        return config;
+    }
+
+    function configFromInput(config) {
+        var input = config._i;
+        if (isUndefined(input)) {
+            config._d = new Date(hooks.now());
+        } else if (isDate(input)) {
+            config._d = new Date(input.valueOf());
+        } else if (typeof input === 'string') {
+            configFromString(config);
+        } else if (isArray(input)) {
+            config._a = map(input.slice(0), function (obj) {
+                return parseInt(obj, 10);
+            });
+            configFromArray(config);
+        } else if (isObject(input)) {
+            configFromObject(config);
+        } else if (isNumber(input)) {
+            // from milliseconds
+            config._d = new Date(input);
+        } else {
+            hooks.createFromInputFallback(config);
+        }
+    }
+
+    function createLocalOrUTC(input, format, locale, strict, isUTC) {
+        var c = {};
+
+        if (format === true || format === false) {
+            strict = format;
+            format = undefined;
+        }
+
+        if (locale === true || locale === false) {
+            strict = locale;
+            locale = undefined;
+        }
+
+        if (
+            (isObject(input) && isObjectEmpty(input)) ||
+            (isArray(input) && input.length === 0)
+        ) {
+            input = undefined;
+        }
+        // object construction must be done this way.
+        // https://github.com/moment/moment/issues/1423
+        c._isAMomentObject = true;
+        c._useUTC = c._isUTC = isUTC;
+        c._l = locale;
+        c._i = input;
+        c._f = format;
+        c._strict = strict;
+
+        return createFromConfig(c);
+    }
+
+    function createLocal(input, format, locale, strict) {
+        return createLocalOrUTC(input, format, locale, strict, false);
+    }
+
+    var prototypeMin = deprecate(
+            'moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/',
+            function () {
+                var other = createLocal.apply(null, arguments);
+                if (this.isValid() && other.isValid()) {
+                    return other < this ? this : other;
+                } else {
+                    return createInvalid();
+                }
+            }
+        ),
+        prototypeMax = deprecate(
+            'moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/',
+            function () {
+                var other = createLocal.apply(null, arguments);
+                if (this.isValid() && other.isValid()) {
+                    return other > this ? this : other;
+                } else {
+                    return createInvalid();
+                }
+            }
+        );
+
+    // Pick a moment m from moments so that m[fn](other) is true for all
+    // other. This relies on the function fn to be transitive.
+    //
+    // moments should either be an array of moment objects or an array, whose
+    // first element is an array of moment objects.
+    function pickBy(fn, moments) {
+        var res, i;
+        if (moments.length === 1 && isArray(moments[0])) {
+            moments = moments[0];
+        }
+        if (!moments.length) {
+            return createLocal();
+        }
+        res = moments[0];
+        for (i = 1; i < moments.length; ++i) {
+            if (!moments[i].isValid() || moments[i][fn](res)) {
+                res = moments[i];
+            }
+        }
+        return res;
+    }
+
+    // TODO: Use [].sort instead?
+    function min() {
+        var args = [].slice.call(arguments, 0);
+
+        return pickBy('isBefore', args);
+    }
+
+    function max() {
+        var args = [].slice.call(arguments, 0);
+
+        return pickBy('isAfter', args);
+    }
+
+    var now = function () {
+        return Date.now ? Date.now() : +new Date();
+    };
+
+    var ordering = [
+        'year',
+        'quarter',
+        'month',
+        'week',
+        'day',
+        'hour',
+        'minute',
+        'second',
+        'millisecond',
+    ];
+
+    function isDurationValid(m) {
+        var key,
+            unitHasDecimal = false,
+            i;
+        for (key in m) {
+            if (
+                hasOwnProp(m, key) &&
+                !(
+                    indexOf.call(ordering, key) !== -1 &&
+                    (m[key] == null || !isNaN(m[key]))
+                )
+            ) {
+                return false;
+            }
+        }
+
+        for (i = 0; i < ordering.length; ++i) {
+            if (m[ordering[i]]) {
+                if (unitHasDecimal) {
+                    return false; // only allow non-integers for smallest unit
+                }
+                if (parseFloat(m[ordering[i]]) !== toInt(m[ordering[i]])) {
+                    unitHasDecimal = true;
+                }
+            }
+        }
+
+        return true;
+    }
+
+    function isValid$1() {
+        return this._isValid;
+    }
+
+    function createInvalid$1() {
+        return createDuration(NaN);
+    }
+
+    function Duration(duration) {
+        var normalizedInput = normalizeObjectUnits(duration),
+            years = normalizedInput.year || 0,
+            quarters = normalizedInput.quarter || 0,
+            months = normalizedInput.month || 0,
+            weeks = normalizedInput.week || normalizedInput.isoWeek || 0,
+            days = normalizedInput.day || 0,
+            hours = normalizedInput.hour || 0,
+            minutes = normalizedInput.minute || 0,
+            seconds = normalizedInput.second || 0,
+            milliseconds = normalizedInput.millisecond || 0;
+
+        this._isValid = isDurationValid(normalizedInput);
+
+        // representation for dateAddRemove
+        this._milliseconds =
+            +milliseconds +
+            seconds * 1e3 + // 1000
+            minutes * 6e4 + // 1000 * 60
+            hours * 1000 * 60 * 60; //using 1000 * 60 * 60 instead of 36e5 to avoid floating point rounding errors https://github.com/moment/moment/issues/2978
+        // Because of dateAddRemove treats 24 hours as different from a
+        // day when working around DST, we need to store them separately
+        this._days = +days + weeks * 7;
+        // It is impossible to translate months into days without knowing
+        // which months you are are talking about, so we have to store
+        // it separately.
+        this._months = +months + quarters * 3 + years * 12;
+
+        this._data = {};
+
+        this._locale = getLocale();
+
+        this._bubble();
+    }
+
+    function isDuration(obj) {
+        return obj instanceof Duration;
+    }
+
+    function absRound(number) {
+        if (number < 0) {
+            return Math.round(-1 * number) * -1;
+        } else {
+            return Math.round(number);
+        }
+    }
+
+    // compare two arrays, return the number of differences
+    function compareArrays(array1, array2, dontConvert) {
+        var len = Math.min(array1.length, array2.length),
+            lengthDiff = Math.abs(array1.length - array2.length),
+            diffs = 0,
+            i;
+        for (i = 0; i < len; i++) {
+            if (
+                (dontConvert && array1[i] !== array2[i]) ||
+                (!dontConvert && toInt(array1[i]) !== toInt(array2[i]))
+            ) {
+                diffs++;
+            }
+        }
+        return diffs + lengthDiff;
+    }
+
+    // FORMATTING
+
+    function offset(token, separator) {
+        addFormatToken(token, 0, 0, function () {
+            var offset = this.utcOffset(),
+                sign = '+';
+            if (offset < 0) {
+                offset = -offset;
+                sign = '-';
+            }
+            return (
+                sign +
+                zeroFill(~~(offset / 60), 2) +
+                separator +
+                zeroFill(~~offset % 60, 2)
+            );
+        });
+    }
+
+    offset('Z', ':');
+    offset('ZZ', '');
+
+    // PARSING
+
+    addRegexToken('Z', matchShortOffset);
+    addRegexToken('ZZ', matchShortOffset);
+    addParseToken(['Z', 'ZZ'], function (input, array, config) {
+        config._useUTC = true;
+        config._tzm = offsetFromString(matchShortOffset, input);
+    });
+
+    // HELPERS
+
+    // timezone chunker
+    // '+10:00' > ['10',  '00']
+    // '-1530'  > ['-15', '30']
+    var chunkOffset = /([\+\-]|\d\d)/gi;
+
+    function offsetFromString(matcher, string) {
+        var matches = (string || '').match(matcher),
+            chunk,
+            parts,
+            minutes;
+
+        if (matches === null) {
+            return null;
+        }
+
+        chunk = matches[matches.length - 1] || [];
+        parts = (chunk + '').match(chunkOffset) || ['-', 0, 0];
+        minutes = +(parts[1] * 60) + toInt(parts[2]);
+
+        return minutes === 0 ? 0 : parts[0] === '+' ? minutes : -minutes;
+    }
+
+    // Return a moment from input, that is local/utc/zone equivalent to model.
+    function cloneWithOffset(input, model) {
+        var res, diff;
+        if (model._isUTC) {
+            res = model.clone();
+            diff =
+                (isMoment(input) || isDate(input)
+                    ? input.valueOf()
+                    : createLocal(input).valueOf()) - res.valueOf();
+            // Use low-level api, because this fn is low-level api.
+            res._d.setTime(res._d.valueOf() + diff);
+            hooks.updateOffset(res, false);
+            return res;
+        } else {
+            return createLocal(input).local();
+        }
+    }
+
+    function getDateOffset(m) {
+        // On Firefox.24 Date#getTimezoneOffset returns a floating point.
+        // https://github.com/moment/moment/pull/1871
+        return -Math.round(m._d.getTimezoneOffset());
+    }
+
+    // HOOKS
+
+    // This function will be called whenever a moment is mutated.
+    // It is intended to keep the offset in sync with the timezone.
+    hooks.updateOffset = function () {};
+
+    // MOMENTS
+
+    // keepLocalTime = true means only change the timezone, without
+    // affecting the local hour. So 5:31:26 +0300 --[utcOffset(2, true)]-->
+    // 5:31:26 +0200 It is possible that 5:31:26 doesn't exist with offset
+    // +0200, so we adjust the time as needed, to be valid.
+    //
+    // Keeping the time actually adds/subtracts (one hour)
+    // from the actual represented time. That is why we call updateOffset
+    // a second time. In case it wants us to change the offset again
+    // _changeInProgress == true case, then we have to adjust, because
+    // there is no such time in the given timezone.
+    function getSetOffset(input, keepLocalTime, keepMinutes) {
+        var offset = this._offset || 0,
+            localAdjust;
+        if (!this.isValid()) {
+            return input != null ? this : NaN;
+        }
+        if (input != null) {
+            if (typeof input === 'string') {
+                input = offsetFromString(matchShortOffset, input);
+                if (input === null) {
+                    return this;
+                }
+            } else if (Math.abs(input) < 16 && !keepMinutes) {
+                input = input * 60;
+            }
+            if (!this._isUTC && keepLocalTime) {
+                localAdjust = getDateOffset(this);
+            }
+            this._offset = input;
+            this._isUTC = true;
+            if (localAdjust != null) {
+                this.add(localAdjust, 'm');
+            }
+            if (offset !== input) {
+                if (!keepLocalTime || this._changeInProgress) {
+                    addSubtract(
+                        this,
+                        createDuration(input - offset, 'm'),
+                        1,
+                        false
+                    );
+                } else if (!this._changeInProgress) {
+                    this._changeInProgress = true;
+                    hooks.updateOffset(this, true);
+                    this._changeInProgress = null;
+                }
+            }
+            return this;
+        } else {
+            return this._isUTC ? offset : getDateOffset(this);
+        }
+    }
+
+    function getSetZone(input, keepLocalTime) {
+        if (input != null) {
+            if (typeof input !== 'string') {
+                input = -input;
+            }
+
+            this.utcOffset(input, keepLocalTime);
+
+            return this;
+        } else {
+            return -this.utcOffset();
+        }
+    }
+
+    function setOffsetToUTC(keepLocalTime) {
+        return this.utcOffset(0, keepLocalTime);
+    }
+
+    function setOffsetToLocal(keepLocalTime) {
+        if (this._isUTC) {
+            this.utcOffset(0, keepLocalTime);
+            this._isUTC = false;
+
+            if (keepLocalTime) {
+                this.subtract(getDateOffset(this), 'm');
+            }
+        }
+        return this;
+    }
+
+    function setOffsetToParsedOffset() {
+        if (this._tzm != null) {
+            this.utcOffset(this._tzm, false, true);
+        } else if (typeof this._i === 'string') {
+            var tZone = offsetFromString(matchOffset, this._i);
+            if (tZone != null) {
+                this.utcOffset(tZone);
+            } else {
+                this.utcOffset(0, true);
+            }
+        }
+        return this;
+    }
+
+    function hasAlignedHourOffset(input) {
+        if (!this.isValid()) {
+            return false;
+        }
+        input = input ? createLocal(input).utcOffset() : 0;
+
+        return (this.utcOffset() - input) % 60 === 0;
+    }
+
+    function isDaylightSavingTime() {
+        return (
+            this.utcOffset() > this.clone().month(0).utcOffset() ||
+            this.utcOffset() > this.clone().month(5).utcOffset()
+        );
+    }
+
+    function isDaylightSavingTimeShifted() {
+        if (!isUndefined(this._isDSTShifted)) {
+            return this._isDSTShifted;
+        }
+
+        var c = {},
+            other;
+
+        copyConfig(c, this);
+        c = prepareConfig(c);
+
+        if (c._a) {
+            other = c._isUTC ? createUTC(c._a) : createLocal(c._a);
+            this._isDSTShifted =
+                this.isValid() && compareArrays(c._a, other.toArray()) > 0;
+        } else {
+            this._isDSTShifted = false;
+        }
+
+        return this._isDSTShifted;
+    }
+
+    function isLocal() {
+        return this.isValid() ? !this._isUTC : false;
+    }
+
+    function isUtcOffset() {
+        return this.isValid() ? this._isUTC : false;
+    }
+
+    function isUtc() {
+        return this.isValid() ? this._isUTC && this._offset === 0 : false;
+    }
+
+    // ASP.NET json date format regex
+    var aspNetRegex = /^(-|\+)?(?:(\d*)[. ])?(\d+):(\d+)(?::(\d+)(\.\d*)?)?$/,
+        // from http://docs.closure-library.googlecode.com/git/closure_goog_date_date.js.source.html
+        // somewhat more in line with 4.4.3.2 2004 spec, but allows decimal anywhere
+        // and further modified to allow for strings containing both week and day
+        isoRegex = /^(-|\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;
+
+    function createDuration(input, key) {
+        var duration = input,
+            // matching against regexp is expensive, do it on demand
+            match = null,
+            sign,
+            ret,
+            diffRes;
+
+        if (isDuration(input)) {
+            duration = {
+                ms: input._milliseconds,
+                d: input._days,
+                M: input._months,
+            };
+        } else if (isNumber(input) || !isNaN(+input)) {
+            duration = {};
+            if (key) {
+                duration[key] = +input;
+            } else {
+                duration.milliseconds = +input;
+            }
+        } else if ((match = aspNetRegex.exec(input))) {
+            sign = match[1] === '-' ? -1 : 1;
+            duration = {
+                y: 0,
+                d: toInt(match[DATE]) * sign,
+                h: toInt(match[HOUR]) * sign,
+                m: toInt(match[MINUTE]) * sign,
+                s: toInt(match[SECOND]) * sign,
+                ms: toInt(absRound(match[MILLISECOND] * 1000)) * sign, // the millisecond decimal point is included in the match
+            };
+        } else if ((match = isoRegex.exec(input))) {
+            sign = match[1] === '-' ? -1 : 1;
+            duration = {
+                y: parseIso(match[2], sign),
+                M: parseIso(match[3], sign),
+                w: parseIso(match[4], sign),
+                d: parseIso(match[5], sign),
+                h: parseIso(match[6], sign),
+                m: parseIso(match[7], sign),
+                s: parseIso(match[8], sign),
+            };
+        } else if (duration == null) {
+            // checks for null or undefined
+            duration = {};
+        } else if (
+            typeof duration === 'object' &&
+            ('from' in duration || 'to' in duration)
+        ) {
+            diffRes = momentsDifference(
+                createLocal(duration.from),
+                createLocal(duration.to)
+            );
+
+            duration = {};
+            duration.ms = diffRes.milliseconds;
+            duration.M = diffRes.months;
+        }
+
+        ret = new Duration(duration);
+
+        if (isDuration(input) && hasOwnProp(input, '_locale')) {
+            ret._locale = input._locale;
+        }
+
+        if (isDuration(input) && hasOwnProp(input, '_isValid')) {
+            ret._isValid = input._isValid;
+        }
+
+        return ret;
+    }
+
+    createDuration.fn = Duration.prototype;
+    createDuration.invalid = createInvalid$1;
+
+    function parseIso(inp, sign) {
+        // We'd normally use ~~inp for this, but unfortunately it also
+        // converts floats to ints.
+        // inp may be undefined, so careful calling replace on it.
+        var res = inp && parseFloat(inp.replace(',', '.'));
+        // apply sign while we're at it
+        return (isNaN(res) ? 0 : res) * sign;
+    }
+
+    function positiveMomentsDifference(base, other) {
+        var res = {};
+
+        res.months =
+            other.month() - base.month() + (other.year() - base.year()) * 12;
+        if (base.clone().add(res.months, 'M').isAfter(other)) {
+            --res.months;
+        }
+
+        res.milliseconds = +other - +base.clone().add(res.months, 'M');
+
+        return res;
+    }
+
+    function momentsDifference(base, other) {
+        var res;
+        if (!(base.isValid() && other.isValid())) {
+            return { milliseconds: 0, months: 0 };
+        }
+
+        other = cloneWithOffset(other, base);
+        if (base.isBefore(other)) {
+            res = positiveMomentsDifference(base, other);
+        } else {
+            res = positiveMomentsDifference(other, base);
+            res.milliseconds = -res.milliseconds;
+            res.months = -res.months;
+        }
+
+        return res;
+    }
+
+    // TODO: remove 'name' arg after deprecation is removed
+    function createAdder(direction, name) {
+        return function (val, period) {
+            var dur, tmp;
+            //invert the arguments, but complain about it
+            if (period !== null && !isNaN(+period)) {
+                deprecateSimple(
+                    name,
+                    'moment().' +
+                        name +
+                        '(period, number) is deprecated. Please use moment().' +
+                        name +
+                        '(number, period). ' +
+                        'See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info.'
+                );
+                tmp = val;
+                val = period;
+                period = tmp;
+            }
+
+            dur = createDuration(val, period);
+            addSubtract(this, dur, direction);
+            return this;
+        };
+    }
+
+    function addSubtract(mom, duration, isAdding, updateOffset) {
+        var milliseconds = duration._milliseconds,
+            days = absRound(duration._days),
+            months = absRound(duration._months);
+
+        if (!mom.isValid()) {
+            // No op
+            return;
+        }
+
+        updateOffset = updateOffset == null ? true : updateOffset;
+
+        if (months) {
+            setMonth(mom, get(mom, 'Month') + months * isAdding);
+        }
+        if (days) {
+            set$1(mom, 'Date', get(mom, 'Date') + days * isAdding);
+        }
+        if (milliseconds) {
+            mom._d.setTime(mom._d.valueOf() + milliseconds * isAdding);
+        }
+        if (updateOffset) {
+            hooks.updateOffset(mom, days || months);
+        }
+    }
+
+    var add = createAdder(1, 'add'),
+        subtract = createAdder(-1, 'subtract');
+
+    function isString(input) {
+        return typeof input === 'string' || input instanceof String;
+    }
+
+    // type MomentInput = Moment | Date | string | number | (number | string)[] | MomentInputObject | void; // null | undefined
+    function isMomentInput(input) {
+        return (
+            isMoment(input) ||
+            isDate(input) ||
+            isString(input) ||
+            isNumber(input) ||
+            isNumberOrStringArray(input) ||
+            isMomentInputObject(input) ||
+            input === null ||
+            input === undefined
+        );
+    }
+
+    function isMomentInputObject(input) {
+        var objectTest = isObject(input) && !isObjectEmpty(input),
+            propertyTest = false,
+            properties = [
+                'years',
+                'year',
+                'y',
+                'months',
+                'month',
+                'M',
+                'days',
+                'day',
+                'd',
+                'dates',
+                'date',
+                'D',
+                'hours',
+                'hour',
+                'h',
+                'minutes',
+                'minute',
+                'm',
+                'seconds',
+                'second',
+                's',
+                'milliseconds',
+                'millisecond',
+                'ms',
+            ],
+            i,
+            property;
+
+        for (i = 0; i < properties.length; i += 1) {
+            property = properties[i];
+            propertyTest = propertyTest || hasOwnProp(input, property);
+        }
+
+        return objectTest && propertyTest;
+    }
+
+    function isNumberOrStringArray(input) {
+        var arrayTest = isArray(input),
+            dataTypeTest = false;
+        if (arrayTest) {
+            dataTypeTest =
+                input.filter(function (item) {
+                    return !isNumber(item) && isString(input);
+                }).length === 0;
+        }
+        return arrayTest && dataTypeTest;
+    }
+
+    function isCalendarSpec(input) {
+        var objectTest = isObject(input) && !isObjectEmpty(input),
+            propertyTest = false,
+            properties = [
+                'sameDay',
+                'nextDay',
+                'lastDay',
+                'nextWeek',
+                'lastWeek',
+                'sameElse',
+            ],
+            i,
+            property;
+
+        for (i = 0; i < properties.length; i += 1) {
+            property = properties[i];
+            propertyTest = propertyTest || hasOwnProp(input, property);
+        }
+
+        return objectTest && propertyTest;
+    }
+
+    function getCalendarFormat(myMoment, now) {
+        var diff = myMoment.diff(now, 'days', true);
+        return diff < -6
+            ? 'sameElse'
+            : diff < -1
+            ? 'lastWeek'
+            : diff < 0
+            ? 'lastDay'
+            : diff < 1
+            ? 'sameDay'
+            : diff < 2
+            ? 'nextDay'
+            : diff < 7
+            ? 'nextWeek'
+            : 'sameElse';
+    }
+
+    function calendar$1(time, formats) {
+        // Support for single parameter, formats only overload to the calendar function
+        if (arguments.length === 1) {
+            if (isMomentInput(arguments[0])) {
+                time = arguments[0];
+                formats = undefined;
+            } else if (isCalendarSpec(arguments[0])) {
+                formats = arguments[0];
+                time = undefined;
+            }
+        }
+        // We want to compare the start of today, vs this.
+        // Getting start-of-today depends on whether we're local/utc/offset or not.
+        var now = time || createLocal(),
+            sod = cloneWithOffset(now, this).startOf('day'),
+            format = hooks.calendarFormat(this, sod) || 'sameElse',
+            output =
+                formats &&
+                (isFunction(formats[format])
+                    ? formats[format].call(this, now)
+                    : formats[format]);
+
+        return this.format(
+            output || this.localeData().calendar(format, this, createLocal(now))
+        );
+    }
+
+    function clone() {
+        return new Moment(this);
+    }
+
+    function isAfter(input, units) {
+        var localInput = isMoment(input) ? input : createLocal(input);
+        if (!(this.isValid() && localInput.isValid())) {
+            return false;
+        }
+        units = normalizeUnits(units) || 'millisecond';
+        if (units === 'millisecond') {
+            return this.valueOf() > localInput.valueOf();
+        } else {
+            return localInput.valueOf() < this.clone().startOf(units).valueOf();
+        }
+    }
+
+    function isBefore(input, units) {
+        var localInput = isMoment(input) ? input : createLocal(input);
+        if (!(this.isValid() && localInput.isValid())) {
+            return false;
+        }
+        units = normalizeUnits(units) || 'millisecond';
+        if (units === 'millisecond') {
+            return this.valueOf() < localInput.valueOf();
+        } else {
+            return this.clone().endOf(units).valueOf() < localInput.valueOf();
+        }
+    }
+
+    function isBetween(from, to, units, inclusivity) {
+        var localFrom = isMoment(from) ? from : createLocal(from),
+            localTo = isMoment(to) ? to : createLocal(to);
+        if (!(this.isValid() && localFrom.isValid() && localTo.isValid())) {
+            return false;
+        }
+        inclusivity = inclusivity || '()';
+        return (
+            (inclusivity[0] === '('
+                ? this.isAfter(localFrom, units)
+                : !this.isBefore(localFrom, units)) &&
+            (inclusivity[1] === ')'
+                ? this.isBefore(localTo, units)
+                : !this.isAfter(localTo, units))
+        );
+    }
+
+    function isSame(input, units) {
+        var localInput = isMoment(input) ? input : createLocal(input),
+            inputMs;
+        if (!(this.isValid() && localInput.isValid())) {
+            return false;
+        }
+        units = normalizeUnits(units) || 'millisecond';
+        if (units === 'millisecond') {
+            return this.valueOf() === localInput.valueOf();
+        } else {
+            inputMs = localInput.valueOf();
+            return (
+                this.clone().startOf(units).valueOf() <= inputMs &&
+                inputMs <= this.clone().endOf(units).valueOf()
+            );
+        }
+    }
+
+    function isSameOrAfter(input, units) {
+        return this.isSame(input, units) || this.isAfter(input, units);
+    }
+
+    function isSameOrBefore(input, units) {
+        return this.isSame(input, units) || this.isBefore(input, units);
+    }
+
+    function diff(input, units, asFloat) {
+        var that, zoneDelta, output;
+
+        if (!this.isValid()) {
+            return NaN;
+        }
+
+        that = cloneWithOffset(input, this);
+
+        if (!that.isValid()) {
+            return NaN;
+        }
+
+        zoneDelta = (that.utcOffset() - this.utcOffset()) * 6e4;
+
+        units = normalizeUnits(units);
+
+        switch (units) {
+            case 'year':
+                output = monthDiff(this, that) / 12;
+                break;
+            case 'month':
+                output = monthDiff(this, that);
+                break;
+            case 'quarter':
+                output = monthDiff(this, that) / 3;
+                break;
+            case 'second':
+                output = (this - that) / 1e3;
+                break; // 1000
+            case 'minute':
+                output = (this - that) / 6e4;
+                break; // 1000 * 60
+            case 'hour':
+                output = (this - that) / 36e5;
+                break; // 1000 * 60 * 60
+            case 'day':
+                output = (this - that - zoneDelta) / 864e5;
+                break; // 1000 * 60 * 60 * 24, negate dst
+            case 'week':
+                output = (this - that - zoneDelta) / 6048e5;
+                break; // 1000 * 60 * 60 * 24 * 7, negate dst
+            default:
+                output = this - that;
+        }
+
+        return asFloat ? output : absFloor(output);
+    }
+
+    function monthDiff(a, b) {
+        if (a.date() < b.date()) {
+            // end-of-month calculations work correct when the start month has more
+            // days than the end month.
+            return -monthDiff(b, a);
+        }
+        // difference in months
+        var wholeMonthDiff = (b.year() - a.year()) * 12 + (b.month() - a.month()),
+            // b is in (anchor - 1 month, anchor + 1 month)
+            anchor = a.clone().add(wholeMonthDiff, 'months'),
+            anchor2,
+            adjust;
+
+        if (b - anchor < 0) {
+            anchor2 = a.clone().add(wholeMonthDiff - 1, 'months');
+            // linear across the month
+            adjust = (b - anchor) / (anchor - anchor2);
+        } else {
+            anchor2 = a.clone().add(wholeMonthDiff + 1, 'months');
+            // linear across the month
+            adjust = (b - anchor) / (anchor2 - anchor);
+        }
+
+        //check for negative zero, return zero if negative zero
+        return -(wholeMonthDiff + adjust) || 0;
+    }
+
+    hooks.defaultFormat = 'YYYY-MM-DDTHH:mm:ssZ';
+    hooks.defaultFormatUtc = 'YYYY-MM-DDTHH:mm:ss[Z]';
+
+    function toString() {
+        return this.clone().locale('en').format('ddd MMM DD YYYY HH:mm:ss [GMT]ZZ');
+    }
+
+    function toISOString(keepOffset) {
+        if (!this.isValid()) {
+            return null;
+        }
+        var utc = keepOffset !== true,
+            m = utc ? this.clone().utc() : this;
+        if (m.year() < 0 || m.year() > 9999) {
+            return formatMoment(
+                m,
+                utc
+                    ? 'YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]'
+                    : 'YYYYYY-MM-DD[T]HH:mm:ss.SSSZ'
+            );
+        }
+        if (isFunction(Date.prototype.toISOString)) {
+            // native implementation is ~50x faster, use it when we can
+            if (utc) {
+                return this.toDate().toISOString();
+            } else {
+                return new Date(this.valueOf() + this.utcOffset() * 60 * 1000)
+                    .toISOString()
+                    .replace('Z', formatMoment(m, 'Z'));
+            }
+        }
+        return formatMoment(
+            m,
+            utc ? 'YYYY-MM-DD[T]HH:mm:ss.SSS[Z]' : 'YYYY-MM-DD[T]HH:mm:ss.SSSZ'
+        );
+    }
+
+    /**
+     * Return a human readable representation of a moment that can
+     * also be evaluated to get a new moment which is the same
+     *
+     * @link https://nodejs.org/dist/latest/docs/api/util.html#util_custom_inspect_function_on_objects
+     */
+    function inspect() {
+        if (!this.isValid()) {
+            return 'moment.invalid(/* ' + this._i + ' */)';
+        }
+        var func = 'moment',
+            zone = '',
+            prefix,
+            year,
+            datetime,
+            suffix;
+        if (!this.isLocal()) {
+            func = this.utcOffset() === 0 ? 'moment.utc' : 'moment.parseZone';
+            zone = 'Z';
+        }
+        prefix = '[' + func + '("]';
+        year = 0 <= this.year() && this.year() <= 9999 ? 'YYYY' : 'YYYYYY';
+        datetime = '-MM-DD[T]HH:mm:ss.SSS';
+        suffix = zone + '[")]';
+
+        return this.format(prefix + year + datetime + suffix);
+    }
+
+    function format(inputString) {
+        if (!inputString) {
+            inputString = this.isUtc()
+                ? hooks.defaultFormatUtc
+                : hooks.defaultFormat;
+        }
+        var output = formatMoment(this, inputString);
+        return this.localeData().postformat(output);
+    }
+
+    function from(time, withoutSuffix) {
+        if (
+            this.isValid() &&
+            ((isMoment(time) && time.isValid()) || createLocal(time).isValid())
+        ) {
+            return createDuration({ to: this, from: time })
+                .locale(this.locale())
+                .humanize(!withoutSuffix);
+        } else {
+            return this.localeData().invalidDate();
+        }
+    }
+
+    function fromNow(withoutSuffix) {
+        return this.from(createLocal(), withoutSuffix);
+    }
+
+    function to(time, withoutSuffix) {
+        if (
+            this.isValid() &&
+            ((isMoment(time) && time.isValid()) || createLocal(time).isValid())
+        ) {
+            return createDuration({ from: this, to: time })
+                .locale(this.locale())
+                .humanize(!withoutSuffix);
+        } else {
+            return this.localeData().invalidDate();
+        }
+    }
+
+    function toNow(withoutSuffix) {
+        return this.to(createLocal(), withoutSuffix);
+    }
+
+    // If passed a locale key, it will set the locale for this
+    // instance.  Otherwise, it will return the locale configuration
+    // variables for this instance.
+    function locale(key) {
+        var newLocaleData;
+
+        if (key === undefined) {
+            return this._locale._abbr;
+        } else {
+            newLocaleData = getLocale(key);
+            if (newLocaleData != null) {
+                this._locale = newLocaleData;
+            }
+            return this;
+        }
+    }
+
+    var lang = deprecate(
+        'moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.',
+        function (key) {
+            if (key === undefined) {
+                return this.localeData();
+            } else {
+                return this.locale(key);
+            }
+        }
+    );
+
+    function localeData() {
+        return this._locale;
+    }
+
+    var MS_PER_SECOND = 1000,
+        MS_PER_MINUTE = 60 * MS_PER_SECOND,
+        MS_PER_HOUR = 60 * MS_PER_MINUTE,
+        MS_PER_400_YEARS = (365 * 400 + 97) * 24 * MS_PER_HOUR;
+
+    // actual modulo - handles negative numbers (for dates before 1970):
+    function mod$1(dividend, divisor) {
+        return ((dividend % divisor) + divisor) % divisor;
+    }
+
+    function localStartOfDate(y, m, d) {
+        // the date constructor remaps years 0-99 to 1900-1999
+        if (y < 100 && y >= 0) {
+            // preserve leap years using a full 400 year cycle, then reset
+            return new Date(y + 400, m, d) - MS_PER_400_YEARS;
+        } else {
+            return new Date(y, m, d).valueOf();
+        }
+    }
+
+    function utcStartOfDate(y, m, d) {
+        // Date.UTC remaps years 0-99 to 1900-1999
+        if (y < 100 && y >= 0) {
+            // preserve leap years using a full 400 year cycle, then reset
+            return Date.UTC(y + 400, m, d) - MS_PER_400_YEARS;
+        } else {
+            return Date.UTC(y, m, d);
+        }
+    }
+
+    function startOf(units) {
+        var time, startOfDate;
+        units = normalizeUnits(units);
+        if (units === undefined || units === 'millisecond' || !this.isValid()) {
+            return this;
+        }
+
+        startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate;
+
+        switch (units) {
+            case 'year':
+                time = startOfDate(this.year(), 0, 1);
+                break;
+            case 'quarter':
+                time = startOfDate(
+                    this.year(),
+                    this.month() - (this.month() % 3),
+                    1
+                );
+                break;
+            case 'month':
+                time = startOfDate(this.year(), this.month(), 1);
+                break;
+            case 'week':
+                time = startOfDate(
+                    this.year(),
+                    this.month(),
+                    this.date() - this.weekday()
+                );
+                break;
+            case 'isoWeek':
+                time = startOfDate(
+                    this.year(),
+                    this.month(),
+                    this.date() - (this.isoWeekday() - 1)
+                );
+                break;
+            case 'day':
+            case 'date':
+                time = startOfDate(this.year(), this.month(), this.date());
+                break;
+            case 'hour':
+                time = this._d.valueOf();
+                time -= mod$1(
+                    time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE),
+                    MS_PER_HOUR
+                );
+                break;
+            case 'minute':
+                time = this._d.valueOf();
+                time -= mod$1(time, MS_PER_MINUTE);
+                break;
+            case 'second':
+                time = this._d.valueOf();
+                time -= mod$1(time, MS_PER_SECOND);
+                break;
+        }
+
+        this._d.setTime(time);
+        hooks.updateOffset(this, true);
+        return this;
+    }
+
+    function endOf(units) {
+        var time, startOfDate;
+        units = normalizeUnits(units);
+        if (units === undefined || units === 'millisecond' || !this.isValid()) {
+            return this;
+        }
+
+        startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate;
+
+        switch (units) {
+            case 'year':
+                time = startOfDate(this.year() + 1, 0, 1) - 1;
+                break;
+            case 'quarter':
+                time =
+                    startOfDate(
+                        this.year(),
+                        this.month() - (this.month() % 3) + 3,
+                        1
+                    ) - 1;
+                break;
+            case 'month':
+                time = startOfDate(this.year(), this.month() + 1, 1) - 1;
+                break;
+            case 'week':
+                time =
+                    startOfDate(
+                        this.year(),
+                        this.month(),
+                        this.date() - this.weekday() + 7
+                    ) - 1;
+                break;
+            case 'isoWeek':
+                time =
+                    startOfDate(
+                        this.year(),
+                        this.month(),
+                        this.date() - (this.isoWeekday() - 1) + 7
+                    ) - 1;
+                break;
+            case 'day':
+            case 'date':
+                time = startOfDate(this.year(), this.month(), this.date() + 1) - 1;
+                break;
+            case 'hour':
+                time = this._d.valueOf();
+                time +=
+                    MS_PER_HOUR -
+                    mod$1(
+                        time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE),
+                        MS_PER_HOUR
+                    ) -
+                    1;
+                break;
+            case 'minute':
+                time = this._d.valueOf();
+                time += MS_PER_MINUTE - mod$1(time, MS_PER_MINUTE) - 1;
+                break;
+            case 'second':
+                time = this._d.valueOf();
+                time += MS_PER_SECOND - mod$1(time, MS_PER_SECOND) - 1;
+                break;
+        }
+
+        this._d.setTime(time);
+        hooks.updateOffset(this, true);
+        return this;
+    }
+
+    function valueOf() {
+        return this._d.valueOf() - (this._offset || 0) * 60000;
+    }
+
+    function unix() {
+        return Math.floor(this.valueOf() / 1000);
+    }
+
+    function toDate() {
+        return new Date(this.valueOf());
+    }
+
+    function toArray() {
+        var m = this;
+        return [
+            m.year(),
+            m.month(),
+            m.date(),
+            m.hour(),
+            m.minute(),
+            m.second(),
+            m.millisecond(),
+        ];
+    }
+
+    function toObject() {
+        var m = this;
+        return {
+            years: m.year(),
+            months: m.month(),
+            date: m.date(),
+            hours: m.hours(),
+            minutes: m.minutes(),
+            seconds: m.seconds(),
+            milliseconds: m.milliseconds(),
+        };
+    }
+
+    function toJSON() {
+        // new Date(NaN).toJSON() === null
+        return this.isValid() ? this.toISOString() : null;
+    }
+
+    function isValid$2() {
+        return isValid(this);
+    }
+
+    function parsingFlags() {
+        return extend({}, getParsingFlags(this));
+    }
+
+    function invalidAt() {
+        return getParsingFlags(this).overflow;
+    }
+
+    function creationData() {
+        return {
+            input: this._i,
+            format: this._f,
+            locale: this._locale,
+            isUTC: this._isUTC,
+            strict: this._strict,
+        };
+    }
+
+    addFormatToken('N', 0, 0, 'eraAbbr');
+    addFormatToken('NN', 0, 0, 'eraAbbr');
+    addFormatToken('NNN', 0, 0, 'eraAbbr');
+    addFormatToken('NNNN', 0, 0, 'eraName');
+    addFormatToken('NNNNN', 0, 0, 'eraNarrow');
+
+    addFormatToken('y', ['y', 1], 'yo', 'eraYear');
+    addFormatToken('y', ['yy', 2], 0, 'eraYear');
+    addFormatToken('y', ['yyy', 3], 0, 'eraYear');
+    addFormatToken('y', ['yyyy', 4], 0, 'eraYear');
+
+    addRegexToken('N', matchEraAbbr);
+    addRegexToken('NN', matchEraAbbr);
+    addRegexToken('NNN', matchEraAbbr);
+    addRegexToken('NNNN', matchEraName);
+    addRegexToken('NNNNN', matchEraNarrow);
+
+    addParseToken(['N', 'NN', 'NNN', 'NNNN', 'NNNNN'], function (
+        input,
+        array,
+        config,
+        token
+    ) {
+        var era = config._locale.erasParse(input, token, config._strict);
+        if (era) {
+            getParsingFlags(config).era = era;
+        } else {
+            getParsingFlags(config).invalidEra = input;
+        }
+    });
+
+    addRegexToken('y', matchUnsigned);
+    addRegexToken('yy', matchUnsigned);
+    addRegexToken('yyy', matchUnsigned);
+    addRegexToken('yyyy', matchUnsigned);
+    addRegexToken('yo', matchEraYearOrdinal);
+
+    addParseToken(['y', 'yy', 'yyy', 'yyyy'], YEAR);
+    addParseToken(['yo'], function (input, array, config, token) {
+        var match;
+        if (config._locale._eraYearOrdinalRegex) {
+            match = input.match(config._locale._eraYearOrdinalRegex);
+        }
+
+        if (config._locale.eraYearOrdinalParse) {
+            array[YEAR] = config._locale.eraYearOrdinalParse(input, match);
+        } else {
+            array[YEAR] = parseInt(input, 10);
+        }
+    });
+
+    function localeEras(m, format) {
+        var i,
+            l,
+            date,
+            eras = this._eras || getLocale('en')._eras;
+        for (i = 0, l = eras.length; i < l; ++i) {
+            switch (typeof eras[i].since) {
+                case 'string':
+                    // truncate time
+                    date = hooks(eras[i].since).startOf('day');
+                    eras[i].since = date.valueOf();
+                    break;
+            }
+
+            switch (typeof eras[i].until) {
+                case 'undefined':
+                    eras[i].until = +Infinity;
+                    break;
+                case 'string':
+                    // truncate time
+                    date = hooks(eras[i].until).startOf('day').valueOf();
+                    eras[i].until = date.valueOf();
+                    break;
+            }
+        }
+        return eras;
+    }
+
+    function localeErasParse(eraName, format, strict) {
+        var i,
+            l,
+            eras = this.eras(),
+            name,
+            abbr,
+            narrow;
+        eraName = eraName.toUpperCase();
+
+        for (i = 0, l = eras.length; i < l; ++i) {
+            name = eras[i].name.toUpperCase();
+            abbr = eras[i].abbr.toUpperCase();
+            narrow = eras[i].narrow.toUpperCase();
+
+            if (strict) {
+                switch (format) {
+                    case 'N':
+                    case 'NN':
+                    case 'NNN':
+                        if (abbr === eraName) {
+                            return eras[i];
+                        }
+                        break;
+
+                    case 'NNNN':
+                        if (name === eraName) {
+                            return eras[i];
+                        }
+                        break;
+
+                    case 'NNNNN':
+                        if (narrow === eraName) {
+                            return eras[i];
+                        }
+                        break;
+                }
+            } else if ([name, abbr, narrow].indexOf(eraName) >= 0) {
+                return eras[i];
+            }
+        }
+    }
+
+    function localeErasConvertYear(era, year) {
+        var dir = era.since <= era.until ? +1 : -1;
+        if (year === undefined) {
+            return hooks(era.since).year();
+        } else {
+            return hooks(era.since).year() + (year - era.offset) * dir;
+        }
+    }
+
+    function getEraName() {
+        var i,
+            l,
+            val,
+            eras = this.localeData().eras();
+        for (i = 0, l = eras.length; i < l; ++i) {
+            // truncate time
+            val = this.startOf('day').valueOf();
+
+            if (eras[i].since <= val && val <= eras[i].until) {
+                return eras[i].name;
+            }
+            if (eras[i].until <= val && val <= eras[i].since) {
+                return eras[i].name;
+            }
+        }
+
+        return '';
+    }
+
+    function getEraNarrow() {
+        var i,
+            l,
+            val,
+            eras = this.localeData().eras();
+        for (i = 0, l = eras.length; i < l; ++i) {
+            // truncate time
+            val = this.startOf('day').valueOf();
+
+            if (eras[i].since <= val && val <= eras[i].until) {
+                return eras[i].narrow;
+            }
+            if (eras[i].until <= val && val <= eras[i].since) {
+                return eras[i].narrow;
+            }
+        }
+
+        return '';
+    }
+
+    function getEraAbbr() {
+        var i,
+            l,
+            val,
+            eras = this.localeData().eras();
+        for (i = 0, l = eras.length; i < l; ++i) {
+            // truncate time
+            val = this.startOf('day').valueOf();
+
+            if (eras[i].since <= val && val <= eras[i].until) {
+                return eras[i].abbr;
+            }
+            if (eras[i].until <= val && val <= eras[i].since) {
+                return eras[i].abbr;
+            }
+        }
+
+        return '';
+    }
+
+    function getEraYear() {
+        var i,
+            l,
+            dir,
+            val,
+            eras = this.localeData().eras();
+        for (i = 0, l = eras.length; i < l; ++i) {
+            dir = eras[i].since <= eras[i].until ? +1 : -1;
+
+            // truncate time
+            val = this.startOf('day').valueOf();
+
+            if (
+                (eras[i].since <= val && val <= eras[i].until) ||
+                (eras[i].until <= val && val <= eras[i].since)
+            ) {
+                return (
+                    (this.year() - hooks(eras[i].since).year()) * dir +
+                    eras[i].offset
+                );
+            }
+        }
+
+        return this.year();
+    }
+
+    function erasNameRegex(isStrict) {
+        if (!hasOwnProp(this, '_erasNameRegex')) {
+            computeErasParse.call(this);
+        }
+        return isStrict ? this._erasNameRegex : this._erasRegex;
+    }
+
+    function erasAbbrRegex(isStrict) {
+        if (!hasOwnProp(this, '_erasAbbrRegex')) {
+            computeErasParse.call(this);
+        }
+        return isStrict ? this._erasAbbrRegex : this._erasRegex;
+    }
+
+    function erasNarrowRegex(isStrict) {
+        if (!hasOwnProp(this, '_erasNarrowRegex')) {
+            computeErasParse.call(this);
+        }
+        return isStrict ? this._erasNarrowRegex : this._erasRegex;
+    }
+
+    function matchEraAbbr(isStrict, locale) {
+        return locale.erasAbbrRegex(isStrict);
+    }
+
+    function matchEraName(isStrict, locale) {
+        return locale.erasNameRegex(isStrict);
+    }
+
+    function matchEraNarrow(isStrict, locale) {
+        return locale.erasNarrowRegex(isStrict);
+    }
+
+    function matchEraYearOrdinal(isStrict, locale) {
+        return locale._eraYearOrdinalRegex || matchUnsigned;
+    }
+
+    function computeErasParse() {
+        var abbrPieces = [],
+            namePieces = [],
+            narrowPieces = [],
+            mixedPieces = [],
+            i,
+            l,
+            eras = this.eras();
+
+        for (i = 0, l = eras.length; i < l; ++i) {
+            namePieces.push(regexEscape(eras[i].name));
+            abbrPieces.push(regexEscape(eras[i].abbr));
+            narrowPieces.push(regexEscape(eras[i].narrow));
+
+            mixedPieces.push(regexEscape(eras[i].name));
+            mixedPieces.push(regexEscape(eras[i].abbr));
+            mixedPieces.push(regexEscape(eras[i].narrow));
+        }
+
+        this._erasRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');
+        this._erasNameRegex = new RegExp('^(' + namePieces.join('|') + ')', 'i');
+        this._erasAbbrRegex = new RegExp('^(' + abbrPieces.join('|') + ')', 'i');
+        this._erasNarrowRegex = new RegExp(
+            '^(' + narrowPieces.join('|') + ')',
+            'i'
+        );
+    }
+
+    // FORMATTING
+
+    addFormatToken(0, ['gg', 2], 0, function () {
+        return this.weekYear() % 100;
+    });
+
+    addFormatToken(0, ['GG', 2], 0, function () {
+        return this.isoWeekYear() % 100;
+    });
+
+    function addWeekYearFormatToken(token, getter) {
+        addFormatToken(0, [token, token.length], 0, getter);
+    }
+
+    addWeekYearFormatToken('gggg', 'weekYear');
+    addWeekYearFormatToken('ggggg', 'weekYear');
+    addWeekYearFormatToken('GGGG', 'isoWeekYear');
+    addWeekYearFormatToken('GGGGG', 'isoWeekYear');
+
+    // ALIASES
+
+    addUnitAlias('weekYear', 'gg');
+    addUnitAlias('isoWeekYear', 'GG');
+
+    // PRIORITY
+
+    addUnitPriority('weekYear', 1);
+    addUnitPriority('isoWeekYear', 1);
+
+    // PARSING
+
+    addRegexToken('G', matchSigned);
+    addRegexToken('g', matchSigned);
+    addRegexToken('GG', match1to2, match2);
+    addRegexToken('gg', match1to2, match2);
+    addRegexToken('GGGG', match1to4, match4);
+    addRegexToken('gggg', match1to4, match4);
+    addRegexToken('GGGGG', match1to6, match6);
+    addRegexToken('ggggg', match1to6, match6);
+
+    addWeekParseToken(['gggg', 'ggggg', 'GGGG', 'GGGGG'], function (
+        input,
+        week,
+        config,
+        token
+    ) {
+        week[token.substr(0, 2)] = toInt(input);
+    });
+
+    addWeekParseToken(['gg', 'GG'], function (input, week, config, token) {
+        week[token] = hooks.parseTwoDigitYear(input);
+    });
+
+    // MOMENTS
+
+    function getSetWeekYear(input) {
+        return getSetWeekYearHelper.call(
+            this,
+            input,
+            this.week(),
+            this.weekday(),
+            this.localeData()._week.dow,
+            this.localeData()._week.doy
+        );
+    }
+
+    function getSetISOWeekYear(input) {
+        return getSetWeekYearHelper.call(
+            this,
+            input,
+            this.isoWeek(),
+            this.isoWeekday(),
+            1,
+            4
+        );
+    }
+
+    function getISOWeeksInYear() {
+        return weeksInYear(this.year(), 1, 4);
+    }
+
+    function getISOWeeksInISOWeekYear() {
+        return weeksInYear(this.isoWeekYear(), 1, 4);
+    }
+
+    function getWeeksInYear() {
+        var weekInfo = this.localeData()._week;
+        return weeksInYear(this.year(), weekInfo.dow, weekInfo.doy);
+    }
+
+    function getWeeksInWeekYear() {
+        var weekInfo = this.localeData()._week;
+        return weeksInYear(this.weekYear(), weekInfo.dow, weekInfo.doy);
+    }
+
+    function getSetWeekYearHelper(input, week, weekday, dow, doy) {
+        var weeksTarget;
+        if (input == null) {
+            return weekOfYear(this, dow, doy).year;
+        } else {
+            weeksTarget = weeksInYear(input, dow, doy);
+            if (week > weeksTarget) {
+                week = weeksTarget;
+            }
+            return setWeekAll.call(this, input, week, weekday, dow, doy);
+        }
+    }
+
+    function setWeekAll(weekYear, week, weekday, dow, doy) {
+        var dayOfYearData = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy),
+            date = createUTCDate(dayOfYearData.year, 0, dayOfYearData.dayOfYear);
+
+        this.year(date.getUTCFullYear());
+        this.month(date.getUTCMonth());
+        this.date(date.getUTCDate());
+        return this;
+    }
+
+    // FORMATTING
+
+    addFormatToken('Q', 0, 'Qo', 'quarter');
+
+    // ALIASES
+
+    addUnitAlias('quarter', 'Q');
+
+    // PRIORITY
+
+    addUnitPriority('quarter', 7);
+
+    // PARSING
+
+    addRegexToken('Q', match1);
+    addParseToken('Q', function (input, array) {
+        array[MONTH] = (toInt(input) - 1) * 3;
+    });
+
+    // MOMENTS
+
+    function getSetQuarter(input) {
+        return input == null
+            ? Math.ceil((this.month() + 1) / 3)
+            : this.month((input - 1) * 3 + (this.month() % 3));
+    }
+
+    // FORMATTING
+
+    addFormatToken('D', ['DD', 2], 'Do', 'date');
+
+    // ALIASES
+
+    addUnitAlias('date', 'D');
+
+    // PRIORITY
+    addUnitPriority('date', 9);
+
+    // PARSING
+
+    addRegexToken('D', match1to2);
+    addRegexToken('DD', match1to2, match2);
+    addRegexToken('Do', function (isStrict, locale) {
+        // TODO: Remove "ordinalParse" fallback in next major release.
+        return isStrict
+            ? locale._dayOfMonthOrdinalParse || locale._ordinalParse
+            : locale._dayOfMonthOrdinalParseLenient;
+    });
+
+    addParseToken(['D', 'DD'], DATE);
+    addParseToken('Do', function (input, array) {
+        array[DATE] = toInt(input.match(match1to2)[0]);
+    });
+
+    // MOMENTS
+
+    var getSetDayOfMonth = makeGetSet('Date', true);
+
+    // FORMATTING
+
+    addFormatToken('DDD', ['DDDD', 3], 'DDDo', 'dayOfYear');
+
+    // ALIASES
+
+    addUnitAlias('dayOfYear', 'DDD');
+
+    // PRIORITY
+    addUnitPriority('dayOfYear', 4);
+
+    // PARSING
+
+    addRegexToken('DDD', match1to3);
+    addRegexToken('DDDD', match3);
+    addParseToken(['DDD', 'DDDD'], function (input, array, config) {
+        config._dayOfYear = toInt(input);
+    });
+
+    // HELPERS
+
+    // MOMENTS
+
+    function getSetDayOfYear(input) {
+        var dayOfYear =
+            Math.round(
+                (this.clone().startOf('day') - this.clone().startOf('year')) / 864e5
+            ) + 1;
+        return input == null ? dayOfYear : this.add(input - dayOfYear, 'd');
+    }
+
+    // FORMATTING
+
+    addFormatToken('m', ['mm', 2], 0, 'minute');
+
+    // ALIASES
+
+    addUnitAlias('minute', 'm');
+
+    // PRIORITY
+
+    addUnitPriority('minute', 14);
+
+    // PARSING
+
+    addRegexToken('m', match1to2);
+    addRegexToken('mm', match1to2, match2);
+    addParseToken(['m', 'mm'], MINUTE);
+
+    // MOMENTS
+
+    var getSetMinute = makeGetSet('Minutes', false);
+
+    // FORMATTING
+
+    addFormatToken('s', ['ss', 2], 0, 'second');
+
+    // ALIASES
+
+    addUnitAlias('second', 's');
+
+    // PRIORITY
+
+    addUnitPriority('second', 15);
+
+    // PARSING
+
+    addRegexToken('s', match1to2);
+    addRegexToken('ss', match1to2, match2);
+    addParseToken(['s', 'ss'], SECOND);
+
+    // MOMENTS
+
+    var getSetSecond = makeGetSet('Seconds', false);
+
+    // FORMATTING
+
+    addFormatToken('S', 0, 0, function () {
+        return ~~(this.millisecond() / 100);
+    });
+
+    addFormatToken(0, ['SS', 2], 0, function () {
+        return ~~(this.millisecond() / 10);
+    });
+
+    addFormatToken(0, ['SSS', 3], 0, 'millisecond');
+    addFormatToken(0, ['SSSS', 4], 0, function () {
+        return this.millisecond() * 10;
+    });
+    addFormatToken(0, ['SSSSS', 5], 0, function () {
+        return this.millisecond() * 100;
+    });
+    addFormatToken(0, ['SSSSSS', 6], 0, function () {
+        return this.millisecond() * 1000;
+    });
+    addFormatToken(0, ['SSSSSSS', 7], 0, function () {
+        return this.millisecond() * 10000;
+    });
+    addFormatToken(0, ['SSSSSSSS', 8], 0, function () {
+        return this.millisecond() * 100000;
+    });
+    addFormatToken(0, ['SSSSSSSSS', 9], 0, function () {
+        return this.millisecond() * 1000000;
+    });
+
+    // ALIASES
+
+    addUnitAlias('millisecond', 'ms');
+
+    // PRIORITY
+
+    addUnitPriority('millisecond', 16);
+
+    // PARSING
+
+    addRegexToken('S', match1to3, match1);
+    addRegexToken('SS', match1to3, match2);
+    addRegexToken('SSS', match1to3, match3);
+
+    var token, getSetMillisecond;
+    for (token = 'SSSS'; token.length <= 9; token += 'S') {
+        addRegexToken(token, matchUnsigned);
+    }
+
+    function parseMs(input, array) {
+        array[MILLISECOND] = toInt(('0.' + input) * 1000);
+    }
+
+    for (token = 'S'; token.length <= 9; token += 'S') {
+        addParseToken(token, parseMs);
+    }
+
+    getSetMillisecond = makeGetSet('Milliseconds', false);
+
+    // FORMATTING
+
+    addFormatToken('z', 0, 0, 'zoneAbbr');
+    addFormatToken('zz', 0, 0, 'zoneName');
+
+    // MOMENTS
+
+    function getZoneAbbr() {
+        return this._isUTC ? 'UTC' : '';
+    }
+
+    function getZoneName() {
+        return this._isUTC ? 'Coordinated Universal Time' : '';
+    }
+
+    var proto = Moment.prototype;
+
+    proto.add = add;
+    proto.calendar = calendar$1;
+    proto.clone = clone;
+    proto.diff = diff;
+    proto.endOf = endOf;
+    proto.format = format;
+    proto.from = from;
+    proto.fromNow = fromNow;
+    proto.to = to;
+    proto.toNow = toNow;
+    proto.get = stringGet;
+    proto.invalidAt = invalidAt;
+    proto.isAfter = isAfter;
+    proto.isBefore = isBefore;
+    proto.isBetween = isBetween;
+    proto.isSame = isSame;
+    proto.isSameOrAfter = isSameOrAfter;
+    proto.isSameOrBefore = isSameOrBefore;
+    proto.isValid = isValid$2;
+    proto.lang = lang;
+    proto.locale = locale;
+    proto.localeData = localeData;
+    proto.max = prototypeMax;
+    proto.min = prototypeMin;
+    proto.parsingFlags = parsingFlags;
+    proto.set = stringSet;
+    proto.startOf = startOf;
+    proto.subtract = subtract;
+    proto.toArray = toArray;
+    proto.toObject = toObject;
+    proto.toDate = toDate;
+    proto.toISOString = toISOString;
+    proto.inspect = inspect;
+    if (typeof Symbol !== 'undefined' && Symbol.for != null) {
+        proto[Symbol.for('nodejs.util.inspect.custom')] = function () {
+            return 'Moment<' + this.format() + '>';
+        };
+    }
+    proto.toJSON = toJSON;
+    proto.toString = toString;
+    proto.unix = unix;
+    proto.valueOf = valueOf;
+    proto.creationData = creationData;
+    proto.eraName = getEraName;
+    proto.eraNarrow = getEraNarrow;
+    proto.eraAbbr = getEraAbbr;
+    proto.eraYear = getEraYear;
+    proto.year = getSetYear;
+    proto.isLeapYear = getIsLeapYear;
+    proto.weekYear = getSetWeekYear;
+    proto.isoWeekYear = getSetISOWeekYear;
+    proto.quarter = proto.quarters = getSetQuarter;
+    proto.month = getSetMonth;
+    proto.daysInMonth = getDaysInMonth;
+    proto.week = proto.weeks = getSetWeek;
+    proto.isoWeek = proto.isoWeeks = getSetISOWeek;
+    proto.weeksInYear = getWeeksInYear;
+    proto.weeksInWeekYear = getWeeksInWeekYear;
+    proto.isoWeeksInYear = getISOWeeksInYear;
+    proto.isoWeeksInISOWeekYear = getISOWeeksInISOWeekYear;
+    proto.date = getSetDayOfMonth;
+    proto.day = proto.days = getSetDayOfWeek;
+    proto.weekday = getSetLocaleDayOfWeek;
+    proto.isoWeekday = getSetISODayOfWeek;
+    proto.dayOfYear = getSetDayOfYear;
+    proto.hour = proto.hours = getSetHour;
+    proto.minute = proto.minutes = getSetMinute;
+    proto.second = proto.seconds = getSetSecond;
+    proto.millisecond = proto.milliseconds = getSetMillisecond;
+    proto.utcOffset = getSetOffset;
+    proto.utc = setOffsetToUTC;
+    proto.local = setOffsetToLocal;
+    proto.parseZone = setOffsetToParsedOffset;
+    proto.hasAlignedHourOffset = hasAlignedHourOffset;
+    proto.isDST = isDaylightSavingTime;
+    proto.isLocal = isLocal;
+    proto.isUtcOffset = isUtcOffset;
+    proto.isUtc = isUtc;
+    proto.isUTC = isUtc;
+    proto.zoneAbbr = getZoneAbbr;
+    proto.zoneName = getZoneName;
+    proto.dates = deprecate(
+        'dates accessor is deprecated. Use date instead.',
+        getSetDayOfMonth
+    );
+    proto.months = deprecate(
+        'months accessor is deprecated. Use month instead',
+        getSetMonth
+    );
+    proto.years = deprecate(
+        'years accessor is deprecated. Use year instead',
+        getSetYear
+    );
+    proto.zone = deprecate(
+        'moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/',
+        getSetZone
+    );
+    proto.isDSTShifted = deprecate(
+        'isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information',
+        isDaylightSavingTimeShifted
+    );
+
+    function createUnix(input) {
+        return createLocal(input * 1000);
+    }
+
+    function createInZone() {
+        return createLocal.apply(null, arguments).parseZone();
+    }
+
+    function preParsePostFormat(string) {
+        return string;
+    }
+
+    var proto$1 = Locale.prototype;
+
+    proto$1.calendar = calendar;
+    proto$1.longDateFormat = longDateFormat;
+    proto$1.invalidDate = invalidDate;
+    proto$1.ordinal = ordinal;
+    proto$1.preparse = preParsePostFormat;
+    proto$1.postformat = preParsePostFormat;
+    proto$1.relativeTime = relativeTime;
+    proto$1.pastFuture = pastFuture;
+    proto$1.set = set;
+    proto$1.eras = localeEras;
+    proto$1.erasParse = localeErasParse;
+    proto$1.erasConvertYear = localeErasConvertYear;
+    proto$1.erasAbbrRegex = erasAbbrRegex;
+    proto$1.erasNameRegex = erasNameRegex;
+    proto$1.erasNarrowRegex = erasNarrowRegex;
+
+    proto$1.months = localeMonths;
+    proto$1.monthsShort = localeMonthsShort;
+    proto$1.monthsParse = localeMonthsParse;
+    proto$1.monthsRegex = monthsRegex;
+    proto$1.monthsShortRegex = monthsShortRegex;
+    proto$1.week = localeWeek;
+    proto$1.firstDayOfYear = localeFirstDayOfYear;
+    proto$1.firstDayOfWeek = localeFirstDayOfWeek;
+
+    proto$1.weekdays = localeWeekdays;
+    proto$1.weekdaysMin = localeWeekdaysMin;
+    proto$1.weekdaysShort = localeWeekdaysShort;
+    proto$1.weekdaysParse = localeWeekdaysParse;
+
+    proto$1.weekdaysRegex = weekdaysRegex;
+    proto$1.weekdaysShortRegex = weekdaysShortRegex;
+    proto$1.weekdaysMinRegex = weekdaysMinRegex;
+
+    proto$1.isPM = localeIsPM;
+    proto$1.meridiem = localeMeridiem;
+
+    function get$1(format, index, field, setter) {
+        var locale = getLocale(),
+            utc = createUTC().set(setter, index);
+        return locale[field](utc, format);
+    }
+
+    function listMonthsImpl(format, index, field) {
+        if (isNumber(format)) {
+            index = format;
+            format = undefined;
+        }
+
+        format = format || '';
+
+        if (index != null) {
+            return get$1(format, index, field, 'month');
+        }
+
+        var i,
+            out = [];
+        for (i = 0; i < 12; i++) {
+            out[i] = get$1(format, i, field, 'month');
+        }
+        return out;
+    }
+
+    // ()
+    // (5)
+    // (fmt, 5)
+    // (fmt)
+    // (true)
+    // (true, 5)
+    // (true, fmt, 5)
+    // (true, fmt)
+    function listWeekdaysImpl(localeSorted, format, index, field) {
+        if (typeof localeSorted === 'boolean') {
+            if (isNumber(format)) {
+                index = format;
+                format = undefined;
+            }
+
+            format = format || '';
+        } else {
+            format = localeSorted;
+            index = format;
+            localeSorted = false;
+
+            if (isNumber(format)) {
+                index = format;
+                format = undefined;
+            }
+
+            format = format || '';
+        }
+
+        var locale = getLocale(),
+            shift = localeSorted ? locale._week.dow : 0,
+            i,
+            out = [];
+
+        if (index != null) {
+            return get$1(format, (index + shift) % 7, field, 'day');
+        }
+
+        for (i = 0; i < 7; i++) {
+            out[i] = get$1(format, (i + shift) % 7, field, 'day');
+        }
+        return out;
+    }
+
+    function listMonths(format, index) {
+        return listMonthsImpl(format, index, 'months');
+    }
+
+    function listMonthsShort(format, index) {
+        return listMonthsImpl(format, index, 'monthsShort');
+    }
+
+    function listWeekdays(localeSorted, format, index) {
+        return listWeekdaysImpl(localeSorted, format, index, 'weekdays');
+    }
+
+    function listWeekdaysShort(localeSorted, format, index) {
+        return listWeekdaysImpl(localeSorted, format, index, 'weekdaysShort');
+    }
+
+    function listWeekdaysMin(localeSorted, format, index) {
+        return listWeekdaysImpl(localeSorted, format, index, 'weekdaysMin');
+    }
+
+    getSetGlobalLocale('en', {
+        eras: [
+            {
+                since: '0001-01-01',
+                until: +Infinity,
+                offset: 1,
+                name: 'Anno Domini',
+                narrow: 'AD',
+                abbr: 'AD',
+            },
+            {
+                since: '0000-12-31',
+                until: -Infinity,
+                offset: 1,
+                name: 'Before Christ',
+                narrow: 'BC',
+                abbr: 'BC',
+            },
+        ],
+        dayOfMonthOrdinalParse: /\d{1,2}(th|st|nd|rd)/,
+        ordinal: function (number) {
+            var b = number % 10,
+                output =
+                    toInt((number % 100) / 10) === 1
+                        ? 'th'
+                        : b === 1
+                        ? 'st'
+                        : b === 2
+                        ? 'nd'
+                        : b === 3
+                        ? 'rd'
+                        : 'th';
+            return number + output;
+        },
+    });
+
+    // Side effect imports
+
+    hooks.lang = deprecate(
+        'moment.lang is deprecated. Use moment.locale instead.',
+        getSetGlobalLocale
+    );
+    hooks.langData = deprecate(
+        'moment.langData is deprecated. Use moment.localeData instead.',
+        getLocale
+    );
+
+    var mathAbs = Math.abs;
+
+    function abs() {
+        var data = this._data;
+
+        this._milliseconds = mathAbs(this._milliseconds);
+        this._days = mathAbs(this._days);
+        this._months = mathAbs(this._months);
+
+        data.milliseconds = mathAbs(data.milliseconds);
+        data.seconds = mathAbs(data.seconds);
+        data.minutes = mathAbs(data.minutes);
+        data.hours = mathAbs(data.hours);
+        data.months = mathAbs(data.months);
+        data.years = mathAbs(data.years);
+
+        return this;
+    }
+
+    function addSubtract$1(duration, input, value, direction) {
+        var other = createDuration(input, value);
+
+        duration._milliseconds += direction * other._milliseconds;
+        duration._days += direction * other._days;
+        duration._months += direction * other._months;
+
+        return duration._bubble();
+    }
+
+    // supports only 2.0-style add(1, 's') or add(duration)
+    function add$1(input, value) {
+        return addSubtract$1(this, input, value, 1);
+    }
+
+    // supports only 2.0-style subtract(1, 's') or subtract(duration)
+    function subtract$1(input, value) {
+        return addSubtract$1(this, input, value, -1);
+    }
+
+    function absCeil(number) {
+        if (number < 0) {
+            return Math.floor(number);
+        } else {
+            return Math.ceil(number);
+        }
+    }
+
+    function bubble() {
+        var milliseconds = this._milliseconds,
+            days = this._days,
+            months = this._months,
+            data = this._data,
+            seconds,
+            minutes,
+            hours,
+            years,
+            monthsFromDays;
+
+        // if we have a mix of positive and negative values, bubble down first
+        // check: https://github.com/moment/moment/issues/2166
+        if (
+            !(
+                (milliseconds >= 0 && days >= 0 && months >= 0) ||
+                (milliseconds <= 0 && days <= 0 && months <= 0)
+            )
+        ) {
+            milliseconds += absCeil(monthsToDays(months) + days) * 864e5;
+            days = 0;
+            months = 0;
+        }
+
+        // The following code bubbles up values, see the tests for
+        // examples of what that means.
+        data.milliseconds = milliseconds % 1000;
+
+        seconds = absFloor(milliseconds / 1000);
+        data.seconds = seconds % 60;
+
+        minutes = absFloor(seconds / 60);
+        data.minutes = minutes % 60;
+
+        hours = absFloor(minutes / 60);
+        data.hours = hours % 24;
+
+        days += absFloor(hours / 24);
+
+        // convert days to months
+        monthsFromDays = absFloor(daysToMonths(days));
+        months += monthsFromDays;
+        days -= absCeil(monthsToDays(monthsFromDays));
+
+        // 12 months -> 1 year
+        years = absFloor(months / 12);
+        months %= 12;
+
+        data.days = days;
+        data.months = months;
+        data.years = years;
+
+        return this;
+    }
+
+    function daysToMonths(days) {
+        // 400 years have 146097 days (taking into account leap year rules)
+        // 400 years have 12 months === 4800
+        return (days * 4800) / 146097;
+    }
+
+    function monthsToDays(months) {
+        // the reverse of daysToMonths
+        return (months * 146097) / 4800;
+    }
+
+    function as(units) {
+        if (!this.isValid()) {
+            return NaN;
+        }
+        var days,
+            months,
+            milliseconds = this._milliseconds;
+
+        units = normalizeUnits(units);
+
+        if (units === 'month' || units === 'quarter' || units === 'year') {
+            days = this._days + milliseconds / 864e5;
+            months = this._months + daysToMonths(days);
+            switch (units) {
+                case 'month':
+                    return months;
+                case 'quarter':
+                    return months / 3;
+                case 'year':
+                    return months / 12;
+            }
+        } else {
+            // handle milliseconds separately because of floating point math errors (issue #1867)
+            days = this._days + Math.round(monthsToDays(this._months));
+            switch (units) {
+                case 'week':
+                    return days / 7 + milliseconds / 6048e5;
+                case 'day':
+                    return days + milliseconds / 864e5;
+                case 'hour':
+                    return days * 24 + milliseconds / 36e5;
+                case 'minute':
+                    return days * 1440 + milliseconds / 6e4;
+                case 'second':
+                    return days * 86400 + milliseconds / 1000;
+                // Math.floor prevents floating point math errors here
+                case 'millisecond':
+                    return Math.floor(days * 864e5) + milliseconds;
+                default:
+                    throw new Error('Unknown unit ' + units);
+            }
+        }
+    }
+
+    // TODO: Use this.as('ms')?
+    function valueOf$1() {
+        if (!this.isValid()) {
+            return NaN;
+        }
+        return (
+            this._milliseconds +
+            this._days * 864e5 +
+            (this._months % 12) * 2592e6 +
+            toInt(this._months / 12) * 31536e6
+        );
+    }
+
+    function makeAs(alias) {
+        return function () {
+            return this.as(alias);
+        };
+    }
+
+    var asMilliseconds = makeAs('ms'),
+        asSeconds = makeAs('s'),
+        asMinutes = makeAs('m'),
+        asHours = makeAs('h'),
+        asDays = makeAs('d'),
+        asWeeks = makeAs('w'),
+        asMonths = makeAs('M'),
+        asQuarters = makeAs('Q'),
+        asYears = makeAs('y');
+
+    function clone$1() {
+        return createDuration(this);
+    }
+
+    function get$2(units) {
+        units = normalizeUnits(units);
+        return this.isValid() ? this[units + 's']() : NaN;
+    }
+
+    function makeGetter(name) {
+        return function () {
+            return this.isValid() ? this._data[name] : NaN;
+        };
+    }
+
+    var milliseconds = makeGetter('milliseconds'),
+        seconds = makeGetter('seconds'),
+        minutes = makeGetter('minutes'),
+        hours = makeGetter('hours'),
+        days = makeGetter('days'),
+        months = makeGetter('months'),
+        years = makeGetter('years');
+
+    function weeks() {
+        return absFloor(this.days() / 7);
+    }
+
+    var round = Math.round,
+        thresholds = {
+            ss: 44, // a few seconds to seconds
+            s: 45, // seconds to minute
+            m: 45, // minutes to hour
+            h: 22, // hours to day
+            d: 26, // days to month/week
+            w: null, // weeks to month
+            M: 11, // months to year
+        };
+
+    // helper function for moment.fn.from, moment.fn.fromNow, and moment.duration.fn.humanize
+    function substituteTimeAgo(string, number, withoutSuffix, isFuture, locale) {
+        return locale.relativeTime(number || 1, !!withoutSuffix, string, isFuture);
+    }
+
+    function relativeTime$1(posNegDuration, withoutSuffix, thresholds, locale) {
+        var duration = createDuration(posNegDuration).abs(),
+            seconds = round(duration.as('s')),
+            minutes = round(duration.as('m')),
+            hours = round(duration.as('h')),
+            days = round(duration.as('d')),
+            months = round(duration.as('M')),
+            weeks = round(duration.as('w')),
+            years = round(duration.as('y')),
+            a =
+                (seconds <= thresholds.ss && ['s', seconds]) ||
+                (seconds < thresholds.s && ['ss', seconds]) ||
+                (minutes <= 1 && ['m']) ||
+                (minutes < thresholds.m && ['mm', minutes]) ||
+                (hours <= 1 && ['h']) ||
+                (hours < thresholds.h && ['hh', hours]) ||
+                (days <= 1 && ['d']) ||
+                (days < thresholds.d && ['dd', days]);
+
+        if (thresholds.w != null) {
+            a =
+                a ||
+                (weeks <= 1 && ['w']) ||
+                (weeks < thresholds.w && ['ww', weeks]);
+        }
+        a = a ||
+            (months <= 1 && ['M']) ||
+            (months < thresholds.M && ['MM', months]) ||
+            (years <= 1 && ['y']) || ['yy', years];
+
+        a[2] = withoutSuffix;
+        a[3] = +posNegDuration > 0;
+        a[4] = locale;
+        return substituteTimeAgo.apply(null, a);
+    }
+
+    // This function allows you to set the rounding function for relative time strings
+    function getSetRelativeTimeRounding(roundingFunction) {
+        if (roundingFunction === undefined) {
+            return round;
+        }
+        if (typeof roundingFunction === 'function') {
+            round = roundingFunction;
+            return true;
+        }
+        return false;
+    }
+
+    // This function allows you to set a threshold for relative time strings
+    function getSetRelativeTimeThreshold(threshold, limit) {
+        if (thresholds[threshold] === undefined) {
+            return false;
+        }
+        if (limit === undefined) {
+            return thresholds[threshold];
+        }
+        thresholds[threshold] = limit;
+        if (threshold === 's') {
+            thresholds.ss = limit - 1;
+        }
+        return true;
+    }
+
+    function humanize(argWithSuffix, argThresholds) {
+        if (!this.isValid()) {
+            return this.localeData().invalidDate();
+        }
+
+        var withSuffix = false,
+            th = thresholds,
+            locale,
+            output;
+
+        if (typeof argWithSuffix === 'object') {
+            argThresholds = argWithSuffix;
+            argWithSuffix = false;
+        }
+        if (typeof argWithSuffix === 'boolean') {
+            withSuffix = argWithSuffix;
+        }
+        if (typeof argThresholds === 'object') {
+            th = Object.assign({}, thresholds, argThresholds);
+            if (argThresholds.s != null && argThresholds.ss == null) {
+                th.ss = argThresholds.s - 1;
+            }
+        }
+
+        locale = this.localeData();
+        output = relativeTime$1(this, !withSuffix, th, locale);
+
+        if (withSuffix) {
+            output = locale.pastFuture(+this, output);
+        }
+
+        return locale.postformat(output);
+    }
+
+    var abs$1 = Math.abs;
+
+    function sign(x) {
+        return (x > 0) - (x < 0) || +x;
+    }
+
+    function toISOString$1() {
+        // for ISO strings we do not use the normal bubbling rules:
+        //  * milliseconds bubble up until they become hours
+        //  * days do not bubble at all
+        //  * months bubble up until they become years
+        // This is because there is no context-free conversion between hours and days
+        // (think of clock changes)
+        // and also not between days and months (28-31 days per month)
+        if (!this.isValid()) {
+            return this.localeData().invalidDate();
+        }
+
+        var seconds = abs$1(this._milliseconds) / 1000,
+            days = abs$1(this._days),
+            months = abs$1(this._months),
+            minutes,
+            hours,
+            years,
+            s,
+            total = this.asSeconds(),
+            totalSign,
+            ymSign,
+            daysSign,
+            hmsSign;
+
+        if (!total) {
+            // this is the same as C#'s (Noda) and python (isodate)...
+            // but not other JS (goog.date)
+            return 'P0D';
+        }
+
+        // 3600 seconds -> 60 minutes -> 1 hour
+        minutes = absFloor(seconds / 60);
+        hours = absFloor(minutes / 60);
+        seconds %= 60;
+        minutes %= 60;
+
+        // 12 months -> 1 year
+        years = absFloor(months / 12);
+        months %= 12;
+
+        // inspired by https://github.com/dordille/moment-isoduration/blob/master/moment.isoduration.js
+        s = seconds ? seconds.toFixed(3).replace(/\.?0+$/, '') : '';
+
+        totalSign = total < 0 ? '-' : '';
+        ymSign = sign(this._months) !== sign(total) ? '-' : '';
+        daysSign = sign(this._days) !== sign(total) ? '-' : '';
+        hmsSign = sign(this._milliseconds) !== sign(total) ? '-' : '';
+
+        return (
+            totalSign +
+            'P' +
+            (years ? ymSign + years + 'Y' : '') +
+            (months ? ymSign + months + 'M' : '') +
+            (days ? daysSign + days + 'D' : '') +
+            (hours || minutes || seconds ? 'T' : '') +
+            (hours ? hmsSign + hours + 'H' : '') +
+            (minutes ? hmsSign + minutes + 'M' : '') +
+            (seconds ? hmsSign + s + 'S' : '')
+        );
+    }
+
+    var proto$2 = Duration.prototype;
+
+    proto$2.isValid = isValid$1;
+    proto$2.abs = abs;
+    proto$2.add = add$1;
+    proto$2.subtract = subtract$1;
+    proto$2.as = as;
+    proto$2.asMilliseconds = asMilliseconds;
+    proto$2.asSeconds = asSeconds;
+    proto$2.asMinutes = asMinutes;
+    proto$2.asHours = asHours;
+    proto$2.asDays = asDays;
+    proto$2.asWeeks = asWeeks;
+    proto$2.asMonths = asMonths;
+    proto$2.asQuarters = asQuarters;
+    proto$2.asYears = asYears;
+    proto$2.valueOf = valueOf$1;
+    proto$2._bubble = bubble;
+    proto$2.clone = clone$1;
+    proto$2.get = get$2;
+    proto$2.milliseconds = milliseconds;
+    proto$2.seconds = seconds;
+    proto$2.minutes = minutes;
+    proto$2.hours = hours;
+    proto$2.days = days;
+    proto$2.weeks = weeks;
+    proto$2.months = months;
+    proto$2.years = years;
+    proto$2.humanize = humanize;
+    proto$2.toISOString = toISOString$1;
+    proto$2.toString = toISOString$1;
+    proto$2.toJSON = toISOString$1;
+    proto$2.locale = locale;
+    proto$2.localeData = localeData;
+
+    proto$2.toIsoString = deprecate(
+        'toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)',
+        toISOString$1
+    );
+    proto$2.lang = lang;
+
+    // FORMATTING
+
+    addFormatToken('X', 0, 0, 'unix');
+    addFormatToken('x', 0, 0, 'valueOf');
+
+    // PARSING
+
+    addRegexToken('x', matchSigned);
+    addRegexToken('X', matchTimestamp);
+    addParseToken('X', function (input, array, config) {
+        config._d = new Date(parseFloat(input) * 1000);
+    });
+    addParseToken('x', function (input, array, config) {
+        config._d = new Date(toInt(input));
+    });
+
+    //! moment.js
+
+    hooks.version = '2.27.0';
+
+    setHookCallback(createLocal);
+
+    hooks.fn = proto;
+    hooks.min = min;
+    hooks.max = max;
+    hooks.now = now;
+    hooks.utc = createUTC;
+    hooks.unix = createUnix;
+    hooks.months = listMonths;
+    hooks.isDate = isDate;
+    hooks.locale = getSetGlobalLocale;
+    hooks.invalid = createInvalid;
+    hooks.duration = createDuration;
+    hooks.isMoment = isMoment;
+    hooks.weekdays = listWeekdays;
+    hooks.parseZone = createInZone;
+    hooks.localeData = getLocale;
+    hooks.isDuration = isDuration;
+    hooks.monthsShort = listMonthsShort;
+    hooks.weekdaysMin = listWeekdaysMin;
+    hooks.defineLocale = defineLocale;
+    hooks.updateLocale = updateLocale;
+    hooks.locales = listLocales;
+    hooks.weekdaysShort = listWeekdaysShort;
+    hooks.normalizeUnits = normalizeUnits;
+    hooks.relativeTimeRounding = getSetRelativeTimeRounding;
+    hooks.relativeTimeThreshold = getSetRelativeTimeThreshold;
+    hooks.calendarFormat = getCalendarFormat;
+    hooks.prototype = proto;
+
+    // currently HTML5 input type only supports 24-hour formats
+    hooks.HTML5_FMT = {
+        DATETIME_LOCAL: 'YYYY-MM-DDTHH:mm', // <input type="datetime-local" />
+        DATETIME_LOCAL_SECONDS: 'YYYY-MM-DDTHH:mm:ss', // <input type="datetime-local" step="1" />
+        DATETIME_LOCAL_MS: 'YYYY-MM-DDTHH:mm:ss.SSS', // <input type="datetime-local" step="0.001" />
+        DATE: 'YYYY-MM-DD', // <input type="date" />
+        TIME: 'HH:mm', // <input type="time" />
+        TIME_SECONDS: 'HH:mm:ss', // <input type="time" step="1" />
+        TIME_MS: 'HH:mm:ss.SSS', // <input type="time" step="0.001" />
+        WEEK: 'GGGG-[W]WW', // <input type="week" />
+        MONTH: 'YYYY-MM', // <input type="month" />
+    };
+
+    return hooks;
+
+})));
diff --git a/admin/js/vendors/moment/moment.min.js b/admin/js/vendors/moment/moment.min.js
new file mode 100644 (file)
index 0000000..36f8628
--- /dev/null
@@ -0,0 +1,2 @@
+!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):e.moment=t()}(this,function(){"use strict";var e,i;function f(){return e.apply(null,arguments)}function o(e){return e instanceof Array||"[object Array]"===Object.prototype.toString.call(e)}function u(e){return null!=e&&"[object Object]"===Object.prototype.toString.call(e)}function m(e,t){return Object.prototype.hasOwnProperty.call(e,t)}function l(e){if(Object.getOwnPropertyNames)return 0===Object.getOwnPropertyNames(e).length;for(var t in e)if(m(e,t))return;return 1}function r(e){return void 0===e}function h(e){return"number"==typeof e||"[object Number]"===Object.prototype.toString.call(e)}function a(e){return e instanceof Date||"[object Date]"===Object.prototype.toString.call(e)}function d(e,t){for(var n=[],s=0;s<e.length;++s)n.push(t(e[s],s));return n}function c(e,t){for(var n in t)m(t,n)&&(e[n]=t[n]);return m(t,"toString")&&(e.toString=t.toString),m(t,"valueOf")&&(e.valueOf=t.valueOf),e}function _(e,t,n,s){return xt(e,t,n,s,!0).utc()}function y(e){return null==e._pf&&(e._pf={empty:!1,unusedTokens:[],unusedInput:[],overflow:-2,charsLeftOver:0,nullInput:!1,invalidEra:null,invalidMonth:null,invalidFormat:!1,userInvalidated:!1,iso:!1,parsedDateParts:[],era:null,meridiem:null,rfc2822:!1,weekdayMismatch:!1}),e._pf}function g(e){if(null==e._isValid){var t=y(e),n=i.call(t.parsedDateParts,function(e){return null!=e}),s=!isNaN(e._d.getTime())&&t.overflow<0&&!t.empty&&!t.invalidEra&&!t.invalidMonth&&!t.invalidWeekday&&!t.weekdayMismatch&&!t.nullInput&&!t.invalidFormat&&!t.userInvalidated&&(!t.meridiem||t.meridiem&&n);if(e._strict&&(s=s&&0===t.charsLeftOver&&0===t.unusedTokens.length&&void 0===t.bigHour),null!=Object.isFrozen&&Object.isFrozen(e))return s;e._isValid=s}return e._isValid}function w(e){var t=_(NaN);return null!=e?c(y(t),e):y(t).userInvalidated=!0,t}i=Array.prototype.some?Array.prototype.some:function(e){for(var t=Object(this),n=t.length>>>0,s=0;s<n;s++)if(s in t&&e.call(this,t[s],s,t))return!0;return!1};var p=f.momentProperties=[],t=!1;function v(e,t){var n,s,i;if(r(t._isAMomentObject)||(e._isAMomentObject=t._isAMomentObject),r(t._i)||(e._i=t._i),r(t._f)||(e._f=t._f),r(t._l)||(e._l=t._l),r(t._strict)||(e._strict=t._strict),r(t._tzm)||(e._tzm=t._tzm),r(t._isUTC)||(e._isUTC=t._isUTC),r(t._offset)||(e._offset=t._offset),r(t._pf)||(e._pf=y(t)),r(t._locale)||(e._locale=t._locale),0<p.length)for(n=0;n<p.length;n++)r(i=t[s=p[n]])||(e[s]=i);return e}function k(e){v(this,e),this._d=new Date(null!=e._d?e._d.getTime():NaN),this.isValid()||(this._d=new Date(NaN)),!1===t&&(t=!0,f.updateOffset(this),t=!1)}function M(e){return e instanceof k||null!=e&&null!=e._isAMomentObject}function D(e){!1===f.suppressDeprecationWarnings&&"undefined"!=typeof console&&console.warn&&console.warn("Deprecation warning: "+e)}function n(i,r){var a=!0;return c(function(){if(null!=f.deprecationHandler&&f.deprecationHandler(null,i),a){for(var e,t,n=[],s=0;s<arguments.length;s++){if(e="","object"==typeof arguments[s]){for(t in e+="\n["+s+"] ",arguments[0])m(arguments[0],t)&&(e+=t+": "+arguments[0][t]+", ");e=e.slice(0,-2)}else e=arguments[s];n.push(e)}D(i+"\nArguments: "+Array.prototype.slice.call(n).join("")+"\n"+(new Error).stack),a=!1}return r.apply(this,arguments)},r)}var s,S={};function Y(e,t){null!=f.deprecationHandler&&f.deprecationHandler(e,t),S[e]||(D(t),S[e]=!0)}function O(e){return"undefined"!=typeof Function&&e instanceof Function||"[object Function]"===Object.prototype.toString.call(e)}function b(e,t){var n,s=c({},e);for(n in t)m(t,n)&&(u(e[n])&&u(t[n])?(s[n]={},c(s[n],e[n]),c(s[n],t[n])):null!=t[n]?s[n]=t[n]:delete s[n]);for(n in e)m(e,n)&&!m(t,n)&&u(e[n])&&(s[n]=c({},s[n]));return s}function x(e){null!=e&&this.set(e)}f.suppressDeprecationWarnings=!1,f.deprecationHandler=null,s=Object.keys?Object.keys:function(e){var t,n=[];for(t in e)m(e,t)&&n.push(t);return n};function T(e,t,n){var s=""+Math.abs(e),i=t-s.length;return(0<=e?n?"+":"":"-")+Math.pow(10,Math.max(0,i)).toString().substr(1)+s}var N=/(\[[^\[]*\])|(\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|N{1,5}|YYYYYY|YYYYY|YYYY|YY|y{2,4}|yo?|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,P=/(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g,R={},W={};function C(e,t,n,s){var i="string"==typeof s?function(){return this[s]()}:s;e&&(W[e]=i),t&&(W[t[0]]=function(){return T(i.apply(this,arguments),t[1],t[2])}),n&&(W[n]=function(){return this.localeData().ordinal(i.apply(this,arguments),e)})}function U(e,t){return e.isValid()?(t=H(t,e.localeData()),R[t]=R[t]||function(s){for(var e,i=s.match(N),t=0,r=i.length;t<r;t++)W[i[t]]?i[t]=W[i[t]]:i[t]=(e=i[t]).match(/\[[\s\S]/)?e.replace(/^\[|\]$/g,""):e.replace(/\\/g,"");return function(e){for(var t="",n=0;n<r;n++)t+=O(i[n])?i[n].call(e,s):i[n];return t}}(t),R[t](e)):e.localeData().invalidDate()}function H(e,t){var n=5;function s(e){return t.longDateFormat(e)||e}for(P.lastIndex=0;0<=n&&P.test(e);)e=e.replace(P,s),P.lastIndex=0,--n;return e}var F={};function L(e,t){var n=e.toLowerCase();F[n]=F[n+"s"]=F[t]=e}function V(e){return"string"==typeof e?F[e]||F[e.toLowerCase()]:void 0}function G(e){var t,n,s={};for(n in e)m(e,n)&&(t=V(n))&&(s[t]=e[n]);return s}var E={};function A(e,t){E[e]=t}function j(e){return e%4==0&&e%100!=0||e%400==0}function I(e){return e<0?Math.ceil(e)||0:Math.floor(e)}function Z(e){var t=+e,n=0;return 0!=t&&isFinite(t)&&(n=I(t)),n}function z(t,n){return function(e){return null!=e?(q(this,t,e),f.updateOffset(this,n),this):$(this,t)}}function $(e,t){return e.isValid()?e._d["get"+(e._isUTC?"UTC":"")+t]():NaN}function q(e,t,n){e.isValid()&&!isNaN(n)&&("FullYear"===t&&j(e.year())&&1===e.month()&&29===e.date()?(n=Z(n),e._d["set"+(e._isUTC?"UTC":"")+t](n,e.month(),xe(n,e.month()))):e._d["set"+(e._isUTC?"UTC":"")+t](n))}var B,J=/\d/,Q=/\d\d/,X=/\d{3}/,K=/\d{4}/,ee=/[+-]?\d{6}/,te=/\d\d?/,ne=/\d\d\d\d?/,se=/\d\d\d\d\d\d?/,ie=/\d{1,3}/,re=/\d{1,4}/,ae=/[+-]?\d{1,6}/,oe=/\d+/,ue=/[+-]?\d+/,le=/Z|[+-]\d\d:?\d\d/gi,he=/Z|[+-]\d\d(?::?\d\d)?/gi,de=/[0-9]{0,256}['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFF07\uFF10-\uFFEF]{1,256}|[\u0600-\u06FF\/]{1,256}(\s*?[\u0600-\u06FF]{1,256}){1,2}/i;function ce(e,n,s){B[e]=O(n)?n:function(e,t){return e&&s?s:n}}function fe(e,t){return m(B,e)?B[e](t._strict,t._locale):new RegExp(me(e.replace("\\","").replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g,function(e,t,n,s,i){return t||n||s||i})))}function me(e){return e.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")}B={};var _e={};function ye(e,n){var t,s=n;for("string"==typeof e&&(e=[e]),h(n)&&(s=function(e,t){t[n]=Z(e)}),t=0;t<e.length;t++)_e[e[t]]=s}function ge(e,i){ye(e,function(e,t,n,s){n._w=n._w||{},i(e,n._w,n,s)})}var we,pe=0,ve=1,ke=2,Me=3,De=4,Se=5,Ye=6,Oe=7,be=8;function xe(e,t){if(isNaN(e)||isNaN(t))return NaN;var n,s=(t%(n=12)+n)%n;return e+=(t-s)/12,1==s?j(e)?29:28:31-s%7%2}we=Array.prototype.indexOf?Array.prototype.indexOf:function(e){for(var t=0;t<this.length;++t)if(this[t]===e)return t;return-1},C("M",["MM",2],"Mo",function(){return this.month()+1}),C("MMM",0,0,function(e){return this.localeData().monthsShort(this,e)}),C("MMMM",0,0,function(e){return this.localeData().months(this,e)}),L("month","M"),A("month",8),ce("M",te),ce("MM",te,Q),ce("MMM",function(e,t){return t.monthsShortRegex(e)}),ce("MMMM",function(e,t){return t.monthsRegex(e)}),ye(["M","MM"],function(e,t){t[ve]=Z(e)-1}),ye(["MMM","MMMM"],function(e,t,n,s){var i=n._locale.monthsParse(e,s,n._strict);null!=i?t[ve]=i:y(n).invalidMonth=e});var Te="January_February_March_April_May_June_July_August_September_October_November_December".split("_"),Ne="Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),Pe=/D[oD]?(\[[^\[\]]*\]|\s)+MMMM?/,Re=de,We=de;function Ce(e,t){var n;if(!e.isValid())return e;if("string"==typeof t)if(/^\d+$/.test(t))t=Z(t);else if(!h(t=e.localeData().monthsParse(t)))return e;return n=Math.min(e.date(),xe(e.year(),t)),e._d["set"+(e._isUTC?"UTC":"")+"Month"](t,n),e}function Ue(e){return null!=e?(Ce(this,e),f.updateOffset(this,!0),this):$(this,"Month")}function He(){function e(e,t){return t.length-e.length}for(var t,n=[],s=[],i=[],r=0;r<12;r++)t=_([2e3,r]),n.push(this.monthsShort(t,"")),s.push(this.months(t,"")),i.push(this.months(t,"")),i.push(this.monthsShort(t,""));for(n.sort(e),s.sort(e),i.sort(e),r=0;r<12;r++)n[r]=me(n[r]),s[r]=me(s[r]);for(r=0;r<24;r++)i[r]=me(i[r]);this._monthsRegex=new RegExp("^("+i.join("|")+")","i"),this._monthsShortRegex=this._monthsRegex,this._monthsStrictRegex=new RegExp("^("+s.join("|")+")","i"),this._monthsShortStrictRegex=new RegExp("^("+n.join("|")+")","i")}function Fe(e){return j(e)?366:365}C("Y",0,0,function(){var e=this.year();return e<=9999?T(e,4):"+"+e}),C(0,["YY",2],0,function(){return this.year()%100}),C(0,["YYYY",4],0,"year"),C(0,["YYYYY",5],0,"year"),C(0,["YYYYYY",6,!0],0,"year"),L("year","y"),A("year",1),ce("Y",ue),ce("YY",te,Q),ce("YYYY",re,K),ce("YYYYY",ae,ee),ce("YYYYYY",ae,ee),ye(["YYYYY","YYYYYY"],pe),ye("YYYY",function(e,t){t[pe]=2===e.length?f.parseTwoDigitYear(e):Z(e)}),ye("YY",function(e,t){t[pe]=f.parseTwoDigitYear(e)}),ye("Y",function(e,t){t[pe]=parseInt(e,10)}),f.parseTwoDigitYear=function(e){return Z(e)+(68<Z(e)?1900:2e3)};var Le=z("FullYear",!0);function Ve(e){var t,n;return e<100&&0<=e?((n=Array.prototype.slice.call(arguments))[0]=e+400,t=new Date(Date.UTC.apply(null,n)),isFinite(t.getUTCFullYear())&&t.setUTCFullYear(e)):t=new Date(Date.UTC.apply(null,arguments)),t}function Ge(e,t,n){var s=7+t-n;return s-(7+Ve(e,0,s).getUTCDay()-t)%7-1}function Ee(e,t,n,s,i){var r,a=1+7*(t-1)+(7+n-s)%7+Ge(e,s,i),o=a<=0?Fe(r=e-1)+a:a>Fe(e)?(r=e+1,a-Fe(e)):(r=e,a);return{year:r,dayOfYear:o}}function Ae(e,t,n){var s,i,r=Ge(e.year(),t,n),a=Math.floor((e.dayOfYear()-r-1)/7)+1;return a<1?s=a+je(i=e.year()-1,t,n):a>je(e.year(),t,n)?(s=a-je(e.year(),t,n),i=e.year()+1):(i=e.year(),s=a),{week:s,year:i}}function je(e,t,n){var s=Ge(e,t,n),i=Ge(e+1,t,n);return(Fe(e)-s+i)/7}C("w",["ww",2],"wo","week"),C("W",["WW",2],"Wo","isoWeek"),L("week","w"),L("isoWeek","W"),A("week",5),A("isoWeek",5),ce("w",te),ce("ww",te,Q),ce("W",te),ce("WW",te,Q),ge(["w","ww","W","WW"],function(e,t,n,s){t[s.substr(0,1)]=Z(e)});function Ie(e,t){return e.slice(t,7).concat(e.slice(0,t))}C("d",0,"do","day"),C("dd",0,0,function(e){return this.localeData().weekdaysMin(this,e)}),C("ddd",0,0,function(e){return this.localeData().weekdaysShort(this,e)}),C("dddd",0,0,function(e){return this.localeData().weekdays(this,e)}),C("e",0,0,"weekday"),C("E",0,0,"isoWeekday"),L("day","d"),L("weekday","e"),L("isoWeekday","E"),A("day",11),A("weekday",11),A("isoWeekday",11),ce("d",te),ce("e",te),ce("E",te),ce("dd",function(e,t){return t.weekdaysMinRegex(e)}),ce("ddd",function(e,t){return t.weekdaysShortRegex(e)}),ce("dddd",function(e,t){return t.weekdaysRegex(e)}),ge(["dd","ddd","dddd"],function(e,t,n,s){var i=n._locale.weekdaysParse(e,s,n._strict);null!=i?t.d=i:y(n).invalidWeekday=e}),ge(["d","e","E"],function(e,t,n,s){t[s]=Z(e)});var Ze="Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),ze="Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),$e="Su_Mo_Tu_We_Th_Fr_Sa".split("_"),qe=de,Be=de,Je=de;function Qe(){function e(e,t){return t.length-e.length}for(var t,n,s,i,r=[],a=[],o=[],u=[],l=0;l<7;l++)t=_([2e3,1]).day(l),n=me(this.weekdaysMin(t,"")),s=me(this.weekdaysShort(t,"")),i=me(this.weekdays(t,"")),r.push(n),a.push(s),o.push(i),u.push(n),u.push(s),u.push(i);r.sort(e),a.sort(e),o.sort(e),u.sort(e),this._weekdaysRegex=new RegExp("^("+u.join("|")+")","i"),this._weekdaysShortRegex=this._weekdaysRegex,this._weekdaysMinRegex=this._weekdaysRegex,this._weekdaysStrictRegex=new RegExp("^("+o.join("|")+")","i"),this._weekdaysShortStrictRegex=new RegExp("^("+a.join("|")+")","i"),this._weekdaysMinStrictRegex=new RegExp("^("+r.join("|")+")","i")}function Xe(){return this.hours()%12||12}function Ke(e,t){C(e,0,0,function(){return this.localeData().meridiem(this.hours(),this.minutes(),t)})}function et(e,t){return t._meridiemParse}C("H",["HH",2],0,"hour"),C("h",["hh",2],0,Xe),C("k",["kk",2],0,function(){return this.hours()||24}),C("hmm",0,0,function(){return""+Xe.apply(this)+T(this.minutes(),2)}),C("hmmss",0,0,function(){return""+Xe.apply(this)+T(this.minutes(),2)+T(this.seconds(),2)}),C("Hmm",0,0,function(){return""+this.hours()+T(this.minutes(),2)}),C("Hmmss",0,0,function(){return""+this.hours()+T(this.minutes(),2)+T(this.seconds(),2)}),Ke("a",!0),Ke("A",!1),L("hour","h"),A("hour",13),ce("a",et),ce("A",et),ce("H",te),ce("h",te),ce("k",te),ce("HH",te,Q),ce("hh",te,Q),ce("kk",te,Q),ce("hmm",ne),ce("hmmss",se),ce("Hmm",ne),ce("Hmmss",se),ye(["H","HH"],Me),ye(["k","kk"],function(e,t,n){var s=Z(e);t[Me]=24===s?0:s}),ye(["a","A"],function(e,t,n){n._isPm=n._locale.isPM(e),n._meridiem=e}),ye(["h","hh"],function(e,t,n){t[Me]=Z(e),y(n).bigHour=!0}),ye("hmm",function(e,t,n){var s=e.length-2;t[Me]=Z(e.substr(0,s)),t[De]=Z(e.substr(s)),y(n).bigHour=!0}),ye("hmmss",function(e,t,n){var s=e.length-4,i=e.length-2;t[Me]=Z(e.substr(0,s)),t[De]=Z(e.substr(s,2)),t[Se]=Z(e.substr(i)),y(n).bigHour=!0}),ye("Hmm",function(e,t,n){var s=e.length-2;t[Me]=Z(e.substr(0,s)),t[De]=Z(e.substr(s))}),ye("Hmmss",function(e,t,n){var s=e.length-4,i=e.length-2;t[Me]=Z(e.substr(0,s)),t[De]=Z(e.substr(s,2)),t[Se]=Z(e.substr(i))});var tt=z("Hours",!0);var nt,st={calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},longDateFormat:{LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"},invalidDate:"Invalid date",ordinal:"%d",dayOfMonthOrdinalParse:/\d{1,2}/,relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",w:"a week",ww:"%d weeks",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},months:Te,monthsShort:Ne,week:{dow:0,doy:6},weekdays:Ze,weekdaysMin:$e,weekdaysShort:ze,meridiemParse:/[ap]\.?m?\.?/i},it={},rt={};function at(e){return e?e.toLowerCase().replace("_","-"):e}function ot(e){for(var t,n,s,i,r=0;r<e.length;){for(t=(i=at(e[r]).split("-")).length,n=(n=at(e[r+1]))?n.split("-"):null;0<t;){if(s=ut(i.slice(0,t).join("-")))return s;if(n&&n.length>=t&&function(e,t){for(var n=Math.min(e.length,t.length),s=0;s<n;s+=1)if(e[s]!==t[s])return s;return n}(i,n)>=t-1)break;t--}r++}return nt}function ut(t){var e;if(void 0===it[t]&&"undefined"!=typeof module&&module&&module.exports)try{e=nt._abbr,require("./locale/"+t),lt(e)}catch(e){it[t]=null}return it[t]}function lt(e,t){var n;return e&&((n=r(t)?dt(e):ht(e,t))?nt=n:"undefined"!=typeof console&&console.warn&&console.warn("Locale "+e+" not found. Did you forget to load it?")),nt._abbr}function ht(e,t){if(null===t)return delete it[e],null;var n,s=st;if(t.abbr=e,null!=it[e])Y("defineLocaleOverride","use moment.updateLocale(localeName, config) to change an existing locale. moment.defineLocale(localeName, config) should only be used for creating a new locale See http://momentjs.com/guides/#/warnings/define-locale/ for more info."),s=it[e]._config;else if(null!=t.parentLocale)if(null!=it[t.parentLocale])s=it[t.parentLocale]._config;else{if(null==(n=ut(t.parentLocale)))return rt[t.parentLocale]||(rt[t.parentLocale]=[]),rt[t.parentLocale].push({name:e,config:t}),null;s=n._config}return it[e]=new x(b(s,t)),rt[e]&&rt[e].forEach(function(e){ht(e.name,e.config)}),lt(e),it[e]}function dt(e){var t;if(e&&e._locale&&e._locale._abbr&&(e=e._locale._abbr),!e)return nt;if(!o(e)){if(t=ut(e))return t;e=[e]}return ot(e)}function ct(e){var t,n=e._a;return n&&-2===y(e).overflow&&(t=n[ve]<0||11<n[ve]?ve:n[ke]<1||n[ke]>xe(n[pe],n[ve])?ke:n[Me]<0||24<n[Me]||24===n[Me]&&(0!==n[De]||0!==n[Se]||0!==n[Ye])?Me:n[De]<0||59<n[De]?De:n[Se]<0||59<n[Se]?Se:n[Ye]<0||999<n[Ye]?Ye:-1,y(e)._overflowDayOfYear&&(t<pe||ke<t)&&(t=ke),y(e)._overflowWeeks&&-1===t&&(t=Oe),y(e)._overflowWeekday&&-1===t&&(t=be),y(e).overflow=t),e}var ft=/^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([+-]\d\d(?::?\d\d)?|\s*Z)?)?$/,mt=/^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d|))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([+-]\d\d(?::?\d\d)?|\s*Z)?)?$/,_t=/Z|[+-]\d\d(?::?\d\d)?/,yt=[["YYYYYY-MM-DD",/[+-]\d{6}-\d\d-\d\d/],["YYYY-MM-DD",/\d{4}-\d\d-\d\d/],["GGGG-[W]WW-E",/\d{4}-W\d\d-\d/],["GGGG-[W]WW",/\d{4}-W\d\d/,!1],["YYYY-DDD",/\d{4}-\d{3}/],["YYYY-MM",/\d{4}-\d\d/,!1],["YYYYYYMMDD",/[+-]\d{10}/],["YYYYMMDD",/\d{8}/],["GGGG[W]WWE",/\d{4}W\d{3}/],["GGGG[W]WW",/\d{4}W\d{2}/,!1],["YYYYDDD",/\d{7}/],["YYYYMM",/\d{6}/,!1],["YYYY",/\d{4}/,!1]],gt=[["HH:mm:ss.SSSS",/\d\d:\d\d:\d\d\.\d+/],["HH:mm:ss,SSSS",/\d\d:\d\d:\d\d,\d+/],["HH:mm:ss",/\d\d:\d\d:\d\d/],["HH:mm",/\d\d:\d\d/],["HHmmss.SSSS",/\d\d\d\d\d\d\.\d+/],["HHmmss,SSSS",/\d\d\d\d\d\d,\d+/],["HHmmss",/\d\d\d\d\d\d/],["HHmm",/\d\d\d\d/],["HH",/\d\d/]],wt=/^\/?Date\((-?\d+)/i,pt=/^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\s)?(\d{1,2})\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s(\d{2,4})\s(\d\d):(\d\d)(?::(\d\d))?\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\d{4}))$/,vt={UT:0,GMT:0,EDT:-240,EST:-300,CDT:-300,CST:-360,MDT:-360,MST:-420,PDT:-420,PST:-480};function kt(e){var t,n,s,i,r,a,o=e._i,u=ft.exec(o)||mt.exec(o);if(u){for(y(e).iso=!0,t=0,n=yt.length;t<n;t++)if(yt[t][1].exec(u[1])){i=yt[t][0],s=!1!==yt[t][2];break}if(null==i)return void(e._isValid=!1);if(u[3]){for(t=0,n=gt.length;t<n;t++)if(gt[t][1].exec(u[3])){r=(u[2]||" ")+gt[t][0];break}if(null==r)return void(e._isValid=!1)}if(!s&&null!=r)return void(e._isValid=!1);if(u[4]){if(!_t.exec(u[4]))return void(e._isValid=!1);a="Z"}e._f=i+(r||"")+(a||""),Ot(e)}else e._isValid=!1}function Mt(e,t,n,s,i,r){var a=[function(e){var t=parseInt(e,10);{if(t<=49)return 2e3+t;if(t<=999)return 1900+t}return t}(e),Ne.indexOf(t),parseInt(n,10),parseInt(s,10),parseInt(i,10)];return r&&a.push(parseInt(r,10)),a}function Dt(e){var t,n,s,i,r=pt.exec(e._i.replace(/\([^)]*\)|[\n\t]/g," ").replace(/(\s\s+)/g," ").replace(/^\s\s*/,"").replace(/\s\s*$/,""));if(r){if(t=Mt(r[4],r[3],r[2],r[5],r[6],r[7]),n=r[1],s=t,i=e,n&&ze.indexOf(n)!==new Date(s[0],s[1],s[2]).getDay()&&(y(i).weekdayMismatch=!0,!void(i._isValid=!1)))return;e._a=t,e._tzm=function(e,t,n){if(e)return vt[e];if(t)return 0;var s=parseInt(n,10),i=s%100;return 60*((s-i)/100)+i}(r[8],r[9],r[10]),e._d=Ve.apply(null,e._a),e._d.setUTCMinutes(e._d.getUTCMinutes()-e._tzm),y(e).rfc2822=!0}else e._isValid=!1}function St(e,t,n){return null!=e?e:null!=t?t:n}function Yt(e){var t,n,s,i,r,a,o,u=[];if(!e._d){for(a=e,o=new Date(f.now()),s=a._useUTC?[o.getUTCFullYear(),o.getUTCMonth(),o.getUTCDate()]:[o.getFullYear(),o.getMonth(),o.getDate()],e._w&&null==e._a[ke]&&null==e._a[ve]&&function(e){var t,n,s,i,r,a,o,u,l;null!=(t=e._w).GG||null!=t.W||null!=t.E?(r=1,a=4,n=St(t.GG,e._a[pe],Ae(Tt(),1,4).year),s=St(t.W,1),((i=St(t.E,1))<1||7<i)&&(u=!0)):(r=e._locale._week.dow,a=e._locale._week.doy,l=Ae(Tt(),r,a),n=St(t.gg,e._a[pe],l.year),s=St(t.w,l.week),null!=t.d?((i=t.d)<0||6<i)&&(u=!0):null!=t.e?(i=t.e+r,(t.e<0||6<t.e)&&(u=!0)):i=r);s<1||s>je(n,r,a)?y(e)._overflowWeeks=!0:null!=u?y(e)._overflowWeekday=!0:(o=Ee(n,s,i,r,a),e._a[pe]=o.year,e._dayOfYear=o.dayOfYear)}(e),null!=e._dayOfYear&&(r=St(e._a[pe],s[pe]),(e._dayOfYear>Fe(r)||0===e._dayOfYear)&&(y(e)._overflowDayOfYear=!0),n=Ve(r,0,e._dayOfYear),e._a[ve]=n.getUTCMonth(),e._a[ke]=n.getUTCDate()),t=0;t<3&&null==e._a[t];++t)e._a[t]=u[t]=s[t];for(;t<7;t++)e._a[t]=u[t]=null==e._a[t]?2===t?1:0:e._a[t];24===e._a[Me]&&0===e._a[De]&&0===e._a[Se]&&0===e._a[Ye]&&(e._nextDay=!0,e._a[Me]=0),e._d=(e._useUTC?Ve:function(e,t,n,s,i,r,a){var o;return e<100&&0<=e?(o=new Date(e+400,t,n,s,i,r,a),isFinite(o.getFullYear())&&o.setFullYear(e)):o=new Date(e,t,n,s,i,r,a),o}).apply(null,u),i=e._useUTC?e._d.getUTCDay():e._d.getDay(),null!=e._tzm&&e._d.setUTCMinutes(e._d.getUTCMinutes()-e._tzm),e._nextDay&&(e._a[Me]=24),e._w&&void 0!==e._w.d&&e._w.d!==i&&(y(e).weekdayMismatch=!0)}}function Ot(e){if(e._f!==f.ISO_8601)if(e._f!==f.RFC_2822){e._a=[],y(e).empty=!0;for(var t,n,s,i,r,a,o,u=""+e._i,l=u.length,h=0,d=H(e._f,e._locale).match(N)||[],c=0;c<d.length;c++)n=d[c],(t=(u.match(fe(n,e))||[])[0])&&(0<(s=u.substr(0,u.indexOf(t))).length&&y(e).unusedInput.push(s),u=u.slice(u.indexOf(t)+t.length),h+=t.length),W[n]?(t?y(e).empty=!1:y(e).unusedTokens.push(n),r=n,o=e,null!=(a=t)&&m(_e,r)&&_e[r](a,o._a,o,r)):e._strict&&!t&&y(e).unusedTokens.push(n);y(e).charsLeftOver=l-h,0<u.length&&y(e).unusedInput.push(u),e._a[Me]<=12&&!0===y(e).bigHour&&0<e._a[Me]&&(y(e).bigHour=void 0),y(e).parsedDateParts=e._a.slice(0),y(e).meridiem=e._meridiem,e._a[Me]=function(e,t,n){var s;if(null==n)return t;return null!=e.meridiemHour?e.meridiemHour(t,n):(null!=e.isPM&&((s=e.isPM(n))&&t<12&&(t+=12),s||12!==t||(t=0)),t)}(e._locale,e._a[Me],e._meridiem),null!==(i=y(e).era)&&(e._a[pe]=e._locale.erasConvertYear(i,e._a[pe])),Yt(e),ct(e)}else Dt(e);else kt(e)}function bt(e){var t,n,s=e._i,i=e._f;return e._locale=e._locale||dt(e._l),null===s||void 0===i&&""===s?w({nullInput:!0}):("string"==typeof s&&(e._i=s=e._locale.preparse(s)),M(s)?new k(ct(s)):(a(s)?e._d=s:o(i)?function(e){var t,n,s,i,r,a,o=!1;if(0===e._f.length)return y(e).invalidFormat=!0,e._d=new Date(NaN);for(i=0;i<e._f.length;i++)r=0,a=!1,t=v({},e),null!=e._useUTC&&(t._useUTC=e._useUTC),t._f=e._f[i],Ot(t),g(t)&&(a=!0),r+=y(t).charsLeftOver,r+=10*y(t).unusedTokens.length,y(t).score=r,o?r<s&&(s=r,n=t):(null==s||r<s||a)&&(s=r,n=t,a&&(o=!0));c(e,n||t)}(e):i?Ot(e):r(n=(t=e)._i)?t._d=new Date(f.now()):a(n)?t._d=new Date(n.valueOf()):"string"==typeof n?function(e){var t=wt.exec(e._i);null===t?(kt(e),!1===e._isValid&&(delete e._isValid,Dt(e),!1===e._isValid&&(delete e._isValid,e._strict?e._isValid=!1:f.createFromInputFallback(e)))):e._d=new Date(+t[1])}(t):o(n)?(t._a=d(n.slice(0),function(e){return parseInt(e,10)}),Yt(t)):u(n)?function(e){var t,n;e._d||(n=void 0===(t=G(e._i)).day?t.date:t.day,e._a=d([t.year,t.month,n,t.hour,t.minute,t.second,t.millisecond],function(e){return e&&parseInt(e,10)}),Yt(e))}(t):h(n)?t._d=new Date(n):f.createFromInputFallback(t),g(e)||(e._d=null),e))}function xt(e,t,n,s,i){var r,a={};return!0!==t&&!1!==t||(s=t,t=void 0),!0!==n&&!1!==n||(s=n,n=void 0),(u(e)&&l(e)||o(e)&&0===e.length)&&(e=void 0),a._isAMomentObject=!0,a._useUTC=a._isUTC=i,a._l=n,a._i=e,a._f=t,a._strict=s,(r=new k(ct(bt(a))))._nextDay&&(r.add(1,"d"),r._nextDay=void 0),r}function Tt(e,t,n,s){return xt(e,t,n,s,!1)}f.createFromInputFallback=n("value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are discouraged and will be removed in an upcoming major release. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.",function(e){e._d=new Date(e._i+(e._useUTC?" UTC":""))}),f.ISO_8601=function(){},f.RFC_2822=function(){};var Nt=n("moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/",function(){var e=Tt.apply(null,arguments);return this.isValid()&&e.isValid()?e<this?this:e:w()}),Pt=n("moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/",function(){var e=Tt.apply(null,arguments);return this.isValid()&&e.isValid()?this<e?this:e:w()});function Rt(e,t){var n,s;if(1===t.length&&o(t[0])&&(t=t[0]),!t.length)return Tt();for(n=t[0],s=1;s<t.length;++s)t[s].isValid()&&!t[s][e](n)||(n=t[s]);return n}var Wt=["year","quarter","month","week","day","hour","minute","second","millisecond"];function Ct(e){var t=G(e),n=t.year||0,s=t.quarter||0,i=t.month||0,r=t.week||t.isoWeek||0,a=t.day||0,o=t.hour||0,u=t.minute||0,l=t.second||0,h=t.millisecond||0;this._isValid=function(e){var t,n,s=!1;for(t in e)if(m(e,t)&&(-1===we.call(Wt,t)||null!=e[t]&&isNaN(e[t])))return!1;for(n=0;n<Wt.length;++n)if(e[Wt[n]]){if(s)return!1;parseFloat(e[Wt[n]])!==Z(e[Wt[n]])&&(s=!0)}return!0}(t),this._milliseconds=+h+1e3*l+6e4*u+1e3*o*60*60,this._days=+a+7*r,this._months=+i+3*s+12*n,this._data={},this._locale=dt(),this._bubble()}function Ut(e){return e instanceof Ct}function Ht(e){return e<0?-1*Math.round(-1*e):Math.round(e)}function Ft(e,n){C(e,0,0,function(){var e=this.utcOffset(),t="+";return e<0&&(e=-e,t="-"),t+T(~~(e/60),2)+n+T(~~e%60,2)})}Ft("Z",":"),Ft("ZZ",""),ce("Z",he),ce("ZZ",he),ye(["Z","ZZ"],function(e,t,n){n._useUTC=!0,n._tzm=Vt(he,e)});var Lt=/([\+\-]|\d\d)/gi;function Vt(e,t){var n,s,i=(t||"").match(e);return null===i?null:0===(s=60*(n=((i[i.length-1]||[])+"").match(Lt)||["-",0,0])[1]+Z(n[2]))?0:"+"===n[0]?s:-s}function Gt(e,t){var n,s;return t._isUTC?(n=t.clone(),s=(M(e)||a(e)?e.valueOf():Tt(e).valueOf())-n.valueOf(),n._d.setTime(n._d.valueOf()+s),f.updateOffset(n,!1),n):Tt(e).local()}function Et(e){return-Math.round(e._d.getTimezoneOffset())}function At(){return!!this.isValid()&&(this._isUTC&&0===this._offset)}f.updateOffset=function(){};var jt=/^(-|\+)?(?:(\d*)[. ])?(\d+):(\d+)(?::(\d+)(\.\d*)?)?$/,It=/^(-|\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;function Zt(e,t){var n,s,i,r=e,a=null;return Ut(e)?r={ms:e._milliseconds,d:e._days,M:e._months}:h(e)||!isNaN(+e)?(r={},t?r[t]=+e:r.milliseconds=+e):(a=jt.exec(e))?(n="-"===a[1]?-1:1,r={y:0,d:Z(a[ke])*n,h:Z(a[Me])*n,m:Z(a[De])*n,s:Z(a[Se])*n,ms:Z(Ht(1e3*a[Ye]))*n}):(a=It.exec(e))?(n="-"===a[1]?-1:1,r={y:zt(a[2],n),M:zt(a[3],n),w:zt(a[4],n),d:zt(a[5],n),h:zt(a[6],n),m:zt(a[7],n),s:zt(a[8],n)}):null==r?r={}:"object"==typeof r&&("from"in r||"to"in r)&&(i=function(e,t){var n;if(!e.isValid()||!t.isValid())return{milliseconds:0,months:0};t=Gt(t,e),e.isBefore(t)?n=$t(e,t):((n=$t(t,e)).milliseconds=-n.milliseconds,n.months=-n.months);return n}(Tt(r.from),Tt(r.to)),(r={}).ms=i.milliseconds,r.M=i.months),s=new Ct(r),Ut(e)&&m(e,"_locale")&&(s._locale=e._locale),Ut(e)&&m(e,"_isValid")&&(s._isValid=e._isValid),s}function zt(e,t){var n=e&&parseFloat(e.replace(",","."));return(isNaN(n)?0:n)*t}function $t(e,t){var n={};return n.months=t.month()-e.month()+12*(t.year()-e.year()),e.clone().add(n.months,"M").isAfter(t)&&--n.months,n.milliseconds=t-e.clone().add(n.months,"M"),n}function qt(s,i){return function(e,t){var n;return null===t||isNaN(+t)||(Y(i,"moment()."+i+"(period, number) is deprecated. Please use moment()."+i+"(number, period). See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info."),n=e,e=t,t=n),Bt(this,Zt(e,t),s),this}}function Bt(e,t,n,s){var i=t._milliseconds,r=Ht(t._days),a=Ht(t._months);e.isValid()&&(s=null==s||s,a&&Ce(e,$(e,"Month")+a*n),r&&q(e,"Date",$(e,"Date")+r*n),i&&e._d.setTime(e._d.valueOf()+i*n),s&&f.updateOffset(e,r||a))}Zt.fn=Ct.prototype,Zt.invalid=function(){return Zt(NaN)};var Jt=qt(1,"add"),Qt=qt(-1,"subtract");function Xt(e){return"string"==typeof e||e instanceof String}function Kt(e){return M(e)||a(e)||Xt(e)||h(e)||function(t){var e=o(t),n=!1;e&&(n=0===t.filter(function(e){return!h(e)&&Xt(t)}).length);return e&&n}(e)||function(e){var t,n,s=u(e)&&!l(e),i=!1,r=["years","year","y","months","month","M","days","day","d","dates","date","D","hours","hour","h","minutes","minute","m","seconds","second","s","milliseconds","millisecond","ms"];for(t=0;t<r.length;t+=1)n=r[t],i=i||m(e,n);return s&&i}(e)||null==e}function en(e,t){if(e.date()<t.date())return-en(t,e);var n=12*(t.year()-e.year())+(t.month()-e.month()),s=e.clone().add(n,"months"),i=t-s<0?(t-s)/(s-e.clone().add(n-1,"months")):(t-s)/(e.clone().add(1+n,"months")-s);return-(n+i)||0}function tn(e){var t;return void 0===e?this._locale._abbr:(null!=(t=dt(e))&&(this._locale=t),this)}f.defaultFormat="YYYY-MM-DDTHH:mm:ssZ",f.defaultFormatUtc="YYYY-MM-DDTHH:mm:ss[Z]";var nn=n("moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.",function(e){return void 0===e?this.localeData():this.locale(e)});function sn(){return this._locale}var rn=126227808e5;function an(e,t){return(e%t+t)%t}function on(e,t,n){return e<100&&0<=e?new Date(e+400,t,n)-rn:new Date(e,t,n).valueOf()}function un(e,t,n){return e<100&&0<=e?Date.UTC(e+400,t,n)-rn:Date.UTC(e,t,n)}function ln(e,t){return t.erasAbbrRegex(e)}function hn(){for(var e=[],t=[],n=[],s=[],i=this.eras(),r=0,a=i.length;r<a;++r)t.push(me(i[r].name)),e.push(me(i[r].abbr)),n.push(me(i[r].narrow)),s.push(me(i[r].name)),s.push(me(i[r].abbr)),s.push(me(i[r].narrow));this._erasRegex=new RegExp("^("+s.join("|")+")","i"),this._erasNameRegex=new RegExp("^("+t.join("|")+")","i"),this._erasAbbrRegex=new RegExp("^("+e.join("|")+")","i"),this._erasNarrowRegex=new RegExp("^("+n.join("|")+")","i")}function dn(e,t){C(0,[e,e.length],0,t)}function cn(e,t,n,s,i){var r;return null==e?Ae(this,s,i).year:((r=je(e,s,i))<t&&(t=r),function(e,t,n,s,i){var r=Ee(e,t,n,s,i),a=Ve(r.year,0,r.dayOfYear);return this.year(a.getUTCFullYear()),this.month(a.getUTCMonth()),this.date(a.getUTCDate()),this}.call(this,e,t,n,s,i))}C("N",0,0,"eraAbbr"),C("NN",0,0,"eraAbbr"),C("NNN",0,0,"eraAbbr"),C("NNNN",0,0,"eraName"),C("NNNNN",0,0,"eraNarrow"),C("y",["y",1],"yo","eraYear"),C("y",["yy",2],0,"eraYear"),C("y",["yyy",3],0,"eraYear"),C("y",["yyyy",4],0,"eraYear"),ce("N",ln),ce("NN",ln),ce("NNN",ln),ce("NNNN",function(e,t){return t.erasNameRegex(e)}),ce("NNNNN",function(e,t){return t.erasNarrowRegex(e)}),ye(["N","NN","NNN","NNNN","NNNNN"],function(e,t,n,s){var i=n._locale.erasParse(e,s,n._strict);i?y(n).era=i:y(n).invalidEra=e}),ce("y",oe),ce("yy",oe),ce("yyy",oe),ce("yyyy",oe),ce("yo",function(e,t){return t._eraYearOrdinalRegex||oe}),ye(["y","yy","yyy","yyyy"],pe),ye(["yo"],function(e,t,n,s){var i;n._locale._eraYearOrdinalRegex&&(i=e.match(n._locale._eraYearOrdinalRegex)),n._locale.eraYearOrdinalParse?t[pe]=n._locale.eraYearOrdinalParse(e,i):t[pe]=parseInt(e,10)}),C(0,["gg",2],0,function(){return this.weekYear()%100}),C(0,["GG",2],0,function(){return this.isoWeekYear()%100}),dn("gggg","weekYear"),dn("ggggg","weekYear"),dn("GGGG","isoWeekYear"),dn("GGGGG","isoWeekYear"),L("weekYear","gg"),L("isoWeekYear","GG"),A("weekYear",1),A("isoWeekYear",1),ce("G",ue),ce("g",ue),ce("GG",te,Q),ce("gg",te,Q),ce("GGGG",re,K),ce("gggg",re,K),ce("GGGGG",ae,ee),ce("ggggg",ae,ee),ge(["gggg","ggggg","GGGG","GGGGG"],function(e,t,n,s){t[s.substr(0,2)]=Z(e)}),ge(["gg","GG"],function(e,t,n,s){t[s]=f.parseTwoDigitYear(e)}),C("Q",0,"Qo","quarter"),L("quarter","Q"),A("quarter",7),ce("Q",J),ye("Q",function(e,t){t[ve]=3*(Z(e)-1)}),C("D",["DD",2],"Do","date"),L("date","D"),A("date",9),ce("D",te),ce("DD",te,Q),ce("Do",function(e,t){return e?t._dayOfMonthOrdinalParse||t._ordinalParse:t._dayOfMonthOrdinalParseLenient}),ye(["D","DD"],ke),ye("Do",function(e,t){t[ke]=Z(e.match(te)[0])});var fn=z("Date",!0);C("DDD",["DDDD",3],"DDDo","dayOfYear"),L("dayOfYear","DDD"),A("dayOfYear",4),ce("DDD",ie),ce("DDDD",X),ye(["DDD","DDDD"],function(e,t,n){n._dayOfYear=Z(e)}),C("m",["mm",2],0,"minute"),L("minute","m"),A("minute",14),ce("m",te),ce("mm",te,Q),ye(["m","mm"],De);var mn=z("Minutes",!1);C("s",["ss",2],0,"second"),L("second","s"),A("second",15),ce("s",te),ce("ss",te,Q),ye(["s","ss"],Se);var _n,yn,gn=z("Seconds",!1);for(C("S",0,0,function(){return~~(this.millisecond()/100)}),C(0,["SS",2],0,function(){return~~(this.millisecond()/10)}),C(0,["SSS",3],0,"millisecond"),C(0,["SSSS",4],0,function(){return 10*this.millisecond()}),C(0,["SSSSS",5],0,function(){return 100*this.millisecond()}),C(0,["SSSSSS",6],0,function(){return 1e3*this.millisecond()}),C(0,["SSSSSSS",7],0,function(){return 1e4*this.millisecond()}),C(0,["SSSSSSSS",8],0,function(){return 1e5*this.millisecond()}),C(0,["SSSSSSSSS",9],0,function(){return 1e6*this.millisecond()}),L("millisecond","ms"),A("millisecond",16),ce("S",ie,J),ce("SS",ie,Q),ce("SSS",ie,X),_n="SSSS";_n.length<=9;_n+="S")ce(_n,oe);function wn(e,t){t[Ye]=Z(1e3*("0."+e))}for(_n="S";_n.length<=9;_n+="S")ye(_n,wn);yn=z("Milliseconds",!1),C("z",0,0,"zoneAbbr"),C("zz",0,0,"zoneName");var pn=k.prototype;function vn(e){return e}pn.add=Jt,pn.calendar=function(e,t){1===arguments.length&&(Kt(arguments[0])?(e=arguments[0],t=void 0):function(e){for(var t=u(e)&&!l(e),n=!1,s=["sameDay","nextDay","lastDay","nextWeek","lastWeek","sameElse"],i=0;i<s.length;i+=1)n=n||m(e,s[i]);return t&&n}(arguments[0])&&(t=arguments[0],e=void 0));var n=e||Tt(),s=Gt(n,this).startOf("day"),i=f.calendarFormat(this,s)||"sameElse",r=t&&(O(t[i])?t[i].call(this,n):t[i]);return this.format(r||this.localeData().calendar(i,this,Tt(n)))},pn.clone=function(){return new k(this)},pn.diff=function(e,t,n){var s,i,r;if(!this.isValid())return NaN;if(!(s=Gt(e,this)).isValid())return NaN;switch(i=6e4*(s.utcOffset()-this.utcOffset()),t=V(t)){case"year":r=en(this,s)/12;break;case"month":r=en(this,s);break;case"quarter":r=en(this,s)/3;break;case"second":r=(this-s)/1e3;break;case"minute":r=(this-s)/6e4;break;case"hour":r=(this-s)/36e5;break;case"day":r=(this-s-i)/864e5;break;case"week":r=(this-s-i)/6048e5;break;default:r=this-s}return n?r:I(r)},pn.endOf=function(e){var t,n;if(void 0===(e=V(e))||"millisecond"===e||!this.isValid())return this;switch(n=this._isUTC?un:on,e){case"year":t=n(this.year()+1,0,1)-1;break;case"quarter":t=n(this.year(),this.month()-this.month()%3+3,1)-1;break;case"month":t=n(this.year(),this.month()+1,1)-1;break;case"week":t=n(this.year(),this.month(),this.date()-this.weekday()+7)-1;break;case"isoWeek":t=n(this.year(),this.month(),this.date()-(this.isoWeekday()-1)+7)-1;break;case"day":case"date":t=n(this.year(),this.month(),this.date()+1)-1;break;case"hour":t=this._d.valueOf(),t+=36e5-an(t+(this._isUTC?0:6e4*this.utcOffset()),36e5)-1;break;case"minute":t=this._d.valueOf(),t+=6e4-an(t,6e4)-1;break;case"second":t=this._d.valueOf(),t+=1e3-an(t,1e3)-1;break}return this._d.setTime(t),f.updateOffset(this,!0),this},pn.format=function(e){e=e||(this.isUtc()?f.defaultFormatUtc:f.defaultFormat);var t=U(this,e);return this.localeData().postformat(t)},pn.from=function(e,t){return this.isValid()&&(M(e)&&e.isValid()||Tt(e).isValid())?Zt({to:this,from:e}).locale(this.locale()).humanize(!t):this.localeData().invalidDate()},pn.fromNow=function(e){return this.from(Tt(),e)},pn.to=function(e,t){return this.isValid()&&(M(e)&&e.isValid()||Tt(e).isValid())?Zt({from:this,to:e}).locale(this.locale()).humanize(!t):this.localeData().invalidDate()},pn.toNow=function(e){return this.to(Tt(),e)},pn.get=function(e){return O(this[e=V(e)])?this[e]():this},pn.invalidAt=function(){return y(this).overflow},pn.isAfter=function(e,t){var n=M(e)?e:Tt(e);return!(!this.isValid()||!n.isValid())&&("millisecond"===(t=V(t)||"millisecond")?this.valueOf()>n.valueOf():n.valueOf()<this.clone().startOf(t).valueOf())},pn.isBefore=function(e,t){var n=M(e)?e:Tt(e);return!(!this.isValid()||!n.isValid())&&("millisecond"===(t=V(t)||"millisecond")?this.valueOf()<n.valueOf():this.clone().endOf(t).valueOf()<n.valueOf())},pn.isBetween=function(e,t,n,s){var i=M(e)?e:Tt(e),r=M(t)?t:Tt(t);return!!(this.isValid()&&i.isValid()&&r.isValid())&&(("("===(s=s||"()")[0]?this.isAfter(i,n):!this.isBefore(i,n))&&(")"===s[1]?this.isBefore(r,n):!this.isAfter(r,n)))},pn.isSame=function(e,t){var n,s=M(e)?e:Tt(e);return!(!this.isValid()||!s.isValid())&&("millisecond"===(t=V(t)||"millisecond")?this.valueOf()===s.valueOf():(n=s.valueOf(),this.clone().startOf(t).valueOf()<=n&&n<=this.clone().endOf(t).valueOf()))},pn.isSameOrAfter=function(e,t){return this.isSame(e,t)||this.isAfter(e,t)},pn.isSameOrBefore=function(e,t){return this.isSame(e,t)||this.isBefore(e,t)},pn.isValid=function(){return g(this)},pn.lang=nn,pn.locale=tn,pn.localeData=sn,pn.max=Pt,pn.min=Nt,pn.parsingFlags=function(){return c({},y(this))},pn.set=function(e,t){if("object"==typeof e)for(var n=function(e){var t,n=[];for(t in e)m(e,t)&&n.push({unit:t,priority:E[t]});return n.sort(function(e,t){return e.priority-t.priority}),n}(e=G(e)),s=0;s<n.length;s++)this[n[s].unit](e[n[s].unit]);else if(O(this[e=V(e)]))return this[e](t);return this},pn.startOf=function(e){var t,n;if(void 0===(e=V(e))||"millisecond"===e||!this.isValid())return this;switch(n=this._isUTC?un:on,e){case"year":t=n(this.year(),0,1);break;case"quarter":t=n(this.year(),this.month()-this.month()%3,1);break;case"month":t=n(this.year(),this.month(),1);break;case"week":t=n(this.year(),this.month(),this.date()-this.weekday());break;case"isoWeek":t=n(this.year(),this.month(),this.date()-(this.isoWeekday()-1));break;case"day":case"date":t=n(this.year(),this.month(),this.date());break;case"hour":t=this._d.valueOf(),t-=an(t+(this._isUTC?0:6e4*this.utcOffset()),36e5);break;case"minute":t=this._d.valueOf(),t-=an(t,6e4);break;case"second":t=this._d.valueOf(),t-=an(t,1e3);break}return this._d.setTime(t),f.updateOffset(this,!0),this},pn.subtract=Qt,pn.toArray=function(){var e=this;return[e.year(),e.month(),e.date(),e.hour(),e.minute(),e.second(),e.millisecond()]},pn.toObject=function(){var e=this;return{years:e.year(),months:e.month(),date:e.date(),hours:e.hours(),minutes:e.minutes(),seconds:e.seconds(),milliseconds:e.milliseconds()}},pn.toDate=function(){return new Date(this.valueOf())},pn.toISOString=function(e){if(!this.isValid())return null;var t=!0!==e,n=t?this.clone().utc():this;return n.year()<0||9999<n.year()?U(n,t?"YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]":"YYYYYY-MM-DD[T]HH:mm:ss.SSSZ"):O(Date.prototype.toISOString)?t?this.toDate().toISOString():new Date(this.valueOf()+60*this.utcOffset()*1e3).toISOString().replace("Z",U(n,"Z")):U(n,t?"YYYY-MM-DD[T]HH:mm:ss.SSS[Z]":"YYYY-MM-DD[T]HH:mm:ss.SSSZ")},pn.inspect=function(){if(!this.isValid())return"moment.invalid(/* "+this._i+" */)";var e,t,n,s="moment",i="";return this.isLocal()||(s=0===this.utcOffset()?"moment.utc":"moment.parseZone",i="Z"),e="["+s+'("]',t=0<=this.year()&&this.year()<=9999?"YYYY":"YYYYYY",n=i+'[")]',this.format(e+t+"-MM-DD[T]HH:mm:ss.SSS"+n)},"undefined"!=typeof Symbol&&null!=Symbol.for&&(pn[Symbol.for("nodejs.util.inspect.custom")]=function(){return"Moment<"+this.format()+">"}),pn.toJSON=function(){return this.isValid()?this.toISOString():null},pn.toString=function(){return this.clone().locale("en").format("ddd MMM DD YYYY HH:mm:ss [GMT]ZZ")},pn.unix=function(){return Math.floor(this.valueOf()/1e3)},pn.valueOf=function(){return this._d.valueOf()-6e4*(this._offset||0)},pn.creationData=function(){return{input:this._i,format:this._f,locale:this._locale,isUTC:this._isUTC,strict:this._strict}},pn.eraName=function(){for(var e,t=this.localeData().eras(),n=0,s=t.length;n<s;++n){if(e=this.clone().startOf("day").valueOf(),t[n].since<=e&&e<=t[n].until)return t[n].name;if(t[n].until<=e&&e<=t[n].since)return t[n].name}return""},pn.eraNarrow=function(){for(var e,t=this.localeData().eras(),n=0,s=t.length;n<s;++n){if(e=this.clone().startOf("day").valueOf(),t[n].since<=e&&e<=t[n].until)return t[n].narrow;if(t[n].until<=e&&e<=t[n].since)return t[n].narrow}return""},pn.eraAbbr=function(){for(var e,t=this.localeData().eras(),n=0,s=t.length;n<s;++n){if(e=this.clone().startOf("day").valueOf(),t[n].since<=e&&e<=t[n].until)return t[n].abbr;if(t[n].until<=e&&e<=t[n].since)return t[n].abbr}return""},pn.eraYear=function(){for(var e,t,n=this.localeData().eras(),s=0,i=n.length;s<i;++s)if(e=n[s].since<=n[s].until?1:-1,t=this.clone().startOf("day").valueOf(),n[s].since<=t&&t<=n[s].until||n[s].until<=t&&t<=n[s].since)return(this.year()-f(n[s].since).year())*e+n[s].offset;return this.year()},pn.year=Le,pn.isLeapYear=function(){return j(this.year())},pn.weekYear=function(e){return cn.call(this,e,this.week(),this.weekday(),this.localeData()._week.dow,this.localeData()._week.doy)},pn.isoWeekYear=function(e){return cn.call(this,e,this.isoWeek(),this.isoWeekday(),1,4)},pn.quarter=pn.quarters=function(e){return null==e?Math.ceil((this.month()+1)/3):this.month(3*(e-1)+this.month()%3)},pn.month=Ue,pn.daysInMonth=function(){return xe(this.year(),this.month())},pn.week=pn.weeks=function(e){var t=this.localeData().week(this);return null==e?t:this.add(7*(e-t),"d")},pn.isoWeek=pn.isoWeeks=function(e){var t=Ae(this,1,4).week;return null==e?t:this.add(7*(e-t),"d")},pn.weeksInYear=function(){var e=this.localeData()._week;return je(this.year(),e.dow,e.doy)},pn.weeksInWeekYear=function(){var e=this.localeData()._week;return je(this.weekYear(),e.dow,e.doy)},pn.isoWeeksInYear=function(){return je(this.year(),1,4)},pn.isoWeeksInISOWeekYear=function(){return je(this.isoWeekYear(),1,4)},pn.date=fn,pn.day=pn.days=function(e){if(!this.isValid())return null!=e?this:NaN;var t,n,s=this._isUTC?this._d.getUTCDay():this._d.getDay();return null!=e?(t=e,n=this.localeData(),e="string"!=typeof t?t:isNaN(t)?"number"==typeof(t=n.weekdaysParse(t))?t:null:parseInt(t,10),this.add(e-s,"d")):s},pn.weekday=function(e){if(!this.isValid())return null!=e?this:NaN;var t=(this.day()+7-this.localeData()._week.dow)%7;return null==e?t:this.add(e-t,"d")},pn.isoWeekday=function(e){if(!this.isValid())return null!=e?this:NaN;if(null==e)return this.day()||7;var t,n,s=(t=e,n=this.localeData(),"string"==typeof t?n.weekdaysParse(t)%7||7:isNaN(t)?null:t);return this.day(this.day()%7?s:s-7)},pn.dayOfYear=function(e){var t=Math.round((this.clone().startOf("day")-this.clone().startOf("year"))/864e5)+1;return null==e?t:this.add(e-t,"d")},pn.hour=pn.hours=tt,pn.minute=pn.minutes=mn,pn.second=pn.seconds=gn,pn.millisecond=pn.milliseconds=yn,pn.utcOffset=function(e,t,n){var s,i=this._offset||0;if(!this.isValid())return null!=e?this:NaN;if(null==e)return this._isUTC?i:Et(this);if("string"==typeof e){if(null===(e=Vt(he,e)))return this}else Math.abs(e)<16&&!n&&(e*=60);return!this._isUTC&&t&&(s=Et(this)),this._offset=e,this._isUTC=!0,null!=s&&this.add(s,"m"),i!==e&&(!t||this._changeInProgress?Bt(this,Zt(e-i,"m"),1,!1):this._changeInProgress||(this._changeInProgress=!0,f.updateOffset(this,!0),this._changeInProgress=null)),this},pn.utc=function(e){return this.utcOffset(0,e)},pn.local=function(e){return this._isUTC&&(this.utcOffset(0,e),this._isUTC=!1,e&&this.subtract(Et(this),"m")),this},pn.parseZone=function(){var e;return null!=this._tzm?this.utcOffset(this._tzm,!1,!0):"string"==typeof this._i&&(null!=(e=Vt(le,this._i))?this.utcOffset(e):this.utcOffset(0,!0)),this},pn.hasAlignedHourOffset=function(e){return!!this.isValid()&&(e=e?Tt(e).utcOffset():0,(this.utcOffset()-e)%60==0)},pn.isDST=function(){return this.utcOffset()>this.clone().month(0).utcOffset()||this.utcOffset()>this.clone().month(5).utcOffset()},pn.isLocal=function(){return!!this.isValid()&&!this._isUTC},pn.isUtcOffset=function(){return!!this.isValid()&&this._isUTC},pn.isUtc=At,pn.isUTC=At,pn.zoneAbbr=function(){return this._isUTC?"UTC":""},pn.zoneName=function(){return this._isUTC?"Coordinated Universal Time":""},pn.dates=n("dates accessor is deprecated. Use date instead.",fn),pn.months=n("months accessor is deprecated. Use month instead",Ue),pn.years=n("years accessor is deprecated. Use year instead",Le),pn.zone=n("moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/",function(e,t){return null!=e?("string"!=typeof e&&(e=-e),this.utcOffset(e,t),this):-this.utcOffset()}),pn.isDSTShifted=n("isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information",function(){if(!r(this._isDSTShifted))return this._isDSTShifted;var e,t={};return v(t,this),(t=bt(t))._a?(e=(t._isUTC?_:Tt)(t._a),this._isDSTShifted=this.isValid()&&0<function(e,t,n){for(var s=Math.min(e.length,t.length),i=Math.abs(e.length-t.length),r=0,a=0;a<s;a++)(n&&e[a]!==t[a]||!n&&Z(e[a])!==Z(t[a]))&&r++;return r+i}(t._a,e.toArray())):this._isDSTShifted=!1,this._isDSTShifted});var kn=x.prototype;function Mn(e,t,n,s){var i=dt(),r=_().set(s,t);return i[n](r,e)}function Dn(e,t,n){if(h(e)&&(t=e,e=void 0),e=e||"",null!=t)return Mn(e,t,n,"month");for(var s=[],i=0;i<12;i++)s[i]=Mn(e,i,n,"month");return s}function Sn(e,t,n,s){t=("boolean"==typeof e?h(t)&&(n=t,t=void 0):(t=e,e=!1,h(n=t)&&(n=t,t=void 0)),t||"");var i,r=dt(),a=e?r._week.dow:0,o=[];if(null!=n)return Mn(t,(n+a)%7,s,"day");for(i=0;i<7;i++)o[i]=Mn(t,(i+a)%7,s,"day");return o}kn.calendar=function(e,t,n){var s=this._calendar[e]||this._calendar.sameElse;return O(s)?s.call(t,n):s},kn.longDateFormat=function(e){var t=this._longDateFormat[e],n=this._longDateFormat[e.toUpperCase()];return t||!n?t:(this._longDateFormat[e]=n.match(N).map(function(e){return"MMMM"===e||"MM"===e||"DD"===e||"dddd"===e?e.slice(1):e}).join(""),this._longDateFormat[e])},kn.invalidDate=function(){return this._invalidDate},kn.ordinal=function(e){return this._ordinal.replace("%d",e)},kn.preparse=vn,kn.postformat=vn,kn.relativeTime=function(e,t,n,s){var i=this._relativeTime[n];return O(i)?i(e,t,n,s):i.replace(/%d/i,e)},kn.pastFuture=function(e,t){var n=this._relativeTime[0<e?"future":"past"];return O(n)?n(t):n.replace(/%s/i,t)},kn.set=function(e){var t,n;for(n in e)m(e,n)&&(O(t=e[n])?this[n]=t:this["_"+n]=t);this._config=e,this._dayOfMonthOrdinalParseLenient=new RegExp((this._dayOfMonthOrdinalParse.source||this._ordinalParse.source)+"|"+/\d{1,2}/.source)},kn.eras=function(e,t){for(var n,s=this._eras||dt("en")._eras,i=0,r=s.length;i<r;++i){switch(typeof s[i].since){case"string":n=f(s[i].since).startOf("day"),s[i].since=n.valueOf();break}switch(typeof s[i].until){case"undefined":s[i].until=1/0;break;case"string":n=f(s[i].until).startOf("day").valueOf(),s[i].until=n.valueOf();break}}return s},kn.erasParse=function(e,t,n){var s,i,r,a,o,u=this.eras();for(e=e.toUpperCase(),s=0,i=u.length;s<i;++s)if(r=u[s].name.toUpperCase(),a=u[s].abbr.toUpperCase(),o=u[s].narrow.toUpperCase(),n)switch(t){case"N":case"NN":case"NNN":if(a===e)return u[s];break;case"NNNN":if(r===e)return u[s];break;case"NNNNN":if(o===e)return u[s];break}else if(0<=[r,a,o].indexOf(e))return u[s]},kn.erasConvertYear=function(e,t){var n=e.since<=e.until?1:-1;return void 0===t?f(e.since).year():f(e.since).year()+(t-e.offset)*n},kn.erasAbbrRegex=function(e){return m(this,"_erasAbbrRegex")||hn.call(this),e?this._erasAbbrRegex:this._erasRegex},kn.erasNameRegex=function(e){return m(this,"_erasNameRegex")||hn.call(this),e?this._erasNameRegex:this._erasRegex},kn.erasNarrowRegex=function(e){return m(this,"_erasNarrowRegex")||hn.call(this),e?this._erasNarrowRegex:this._erasRegex},kn.months=function(e,t){return e?o(this._months)?this._months[e.month()]:this._months[(this._months.isFormat||Pe).test(t)?"format":"standalone"][e.month()]:o(this._months)?this._months:this._months.standalone},kn.monthsShort=function(e,t){return e?o(this._monthsShort)?this._monthsShort[e.month()]:this._monthsShort[Pe.test(t)?"format":"standalone"][e.month()]:o(this._monthsShort)?this._monthsShort:this._monthsShort.standalone},kn.monthsParse=function(e,t,n){var s,i,r;if(this._monthsParseExact)return function(e,t,n){var s,i,r,a=e.toLocaleLowerCase();if(!this._monthsParse)for(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[],s=0;s<12;++s)r=_([2e3,s]),this._shortMonthsParse[s]=this.monthsShort(r,"").toLocaleLowerCase(),this._longMonthsParse[s]=this.months(r,"").toLocaleLowerCase();return n?"MMM"===t?-1!==(i=we.call(this._shortMonthsParse,a))?i:null:-1!==(i=we.call(this._longMonthsParse,a))?i:null:"MMM"===t?-1!==(i=we.call(this._shortMonthsParse,a))||-1!==(i=we.call(this._longMonthsParse,a))?i:null:-1!==(i=we.call(this._longMonthsParse,a))||-1!==(i=we.call(this._shortMonthsParse,a))?i:null}.call(this,e,t,n);for(this._monthsParse||(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[]),s=0;s<12;s++){if(i=_([2e3,s]),n&&!this._longMonthsParse[s]&&(this._longMonthsParse[s]=new RegExp("^"+this.months(i,"").replace(".","")+"$","i"),this._shortMonthsParse[s]=new RegExp("^"+this.monthsShort(i,"").replace(".","")+"$","i")),n||this._monthsParse[s]||(r="^"+this.months(i,"")+"|^"+this.monthsShort(i,""),this._monthsParse[s]=new RegExp(r.replace(".",""),"i")),n&&"MMMM"===t&&this._longMonthsParse[s].test(e))return s;if(n&&"MMM"===t&&this._shortMonthsParse[s].test(e))return s;if(!n&&this._monthsParse[s].test(e))return s}},kn.monthsRegex=function(e){return this._monthsParseExact?(m(this,"_monthsRegex")||He.call(this),e?this._monthsStrictRegex:this._monthsRegex):(m(this,"_monthsRegex")||(this._monthsRegex=We),this._monthsStrictRegex&&e?this._monthsStrictRegex:this._monthsRegex)},kn.monthsShortRegex=function(e){return this._monthsParseExact?(m(this,"_monthsRegex")||He.call(this),e?this._monthsShortStrictRegex:this._monthsShortRegex):(m(this,"_monthsShortRegex")||(this._monthsShortRegex=Re),this._monthsShortStrictRegex&&e?this._monthsShortStrictRegex:this._monthsShortRegex)},kn.week=function(e){return Ae(e,this._week.dow,this._week.doy).week},kn.firstDayOfYear=function(){return this._week.doy},kn.firstDayOfWeek=function(){return this._week.dow},kn.weekdays=function(e,t){var n=o(this._weekdays)?this._weekdays:this._weekdays[e&&!0!==e&&this._weekdays.isFormat.test(t)?"format":"standalone"];return!0===e?Ie(n,this._week.dow):e?n[e.day()]:n},kn.weekdaysMin=function(e){return!0===e?Ie(this._weekdaysMin,this._week.dow):e?this._weekdaysMin[e.day()]:this._weekdaysMin},kn.weekdaysShort=function(e){return!0===e?Ie(this._weekdaysShort,this._week.dow):e?this._weekdaysShort[e.day()]:this._weekdaysShort},kn.weekdaysParse=function(e,t,n){var s,i,r;if(this._weekdaysParseExact)return function(e,t,n){var s,i,r,a=e.toLocaleLowerCase();if(!this._weekdaysParse)for(this._weekdaysParse=[],this._shortWeekdaysParse=[],this._minWeekdaysParse=[],s=0;s<7;++s)r=_([2e3,1]).day(s),this._minWeekdaysParse[s]=this.weekdaysMin(r,"").toLocaleLowerCase(),this._shortWeekdaysParse[s]=this.weekdaysShort(r,"").toLocaleLowerCase(),this._weekdaysParse[s]=this.weekdays(r,"").toLocaleLowerCase();return n?"dddd"===t?-1!==(i=we.call(this._weekdaysParse,a))?i:null:"ddd"===t?-1!==(i=we.call(this._shortWeekdaysParse,a))?i:null:-1!==(i=we.call(this._minWeekdaysParse,a))?i:null:"dddd"===t?-1!==(i=we.call(this._weekdaysParse,a))||-1!==(i=we.call(this._shortWeekdaysParse,a))||-1!==(i=we.call(this._minWeekdaysParse,a))?i:null:"ddd"===t?-1!==(i=we.call(this._shortWeekdaysParse,a))||-1!==(i=we.call(this._weekdaysParse,a))||-1!==(i=we.call(this._minWeekdaysParse,a))?i:null:-1!==(i=we.call(this._minWeekdaysParse,a))||-1!==(i=we.call(this._weekdaysParse,a))||-1!==(i=we.call(this._shortWeekdaysParse,a))?i:null}.call(this,e,t,n);for(this._weekdaysParse||(this._weekdaysParse=[],this._minWeekdaysParse=[],this._shortWeekdaysParse=[],this._fullWeekdaysParse=[]),s=0;s<7;s++){if(i=_([2e3,1]).day(s),n&&!this._fullWeekdaysParse[s]&&(this._fullWeekdaysParse[s]=new RegExp("^"+this.weekdays(i,"").replace(".","\\.?")+"$","i"),this._shortWeekdaysParse[s]=new RegExp("^"+this.weekdaysShort(i,"").replace(".","\\.?")+"$","i"),this._minWeekdaysParse[s]=new RegExp("^"+this.weekdaysMin(i,"").replace(".","\\.?")+"$","i")),this._weekdaysParse[s]||(r="^"+this.weekdays(i,"")+"|^"+this.weekdaysShort(i,"")+"|^"+this.weekdaysMin(i,""),this._weekdaysParse[s]=new RegExp(r.replace(".",""),"i")),n&&"dddd"===t&&this._fullWeekdaysParse[s].test(e))return s;if(n&&"ddd"===t&&this._shortWeekdaysParse[s].test(e))return s;if(n&&"dd"===t&&this._minWeekdaysParse[s].test(e))return s;if(!n&&this._weekdaysParse[s].test(e))return s}},kn.weekdaysRegex=function(e){return this._weekdaysParseExact?(m(this,"_weekdaysRegex")||Qe.call(this),e?this._weekdaysStrictRegex:this._weekdaysRegex):(m(this,"_weekdaysRegex")||(this._weekdaysRegex=qe),this._weekdaysStrictRegex&&e?this._weekdaysStrictRegex:this._weekdaysRegex)},kn.weekdaysShortRegex=function(e){return this._weekdaysParseExact?(m(this,"_weekdaysRegex")||Qe.call(this),e?this._weekdaysShortStrictRegex:this._weekdaysShortRegex):(m(this,"_weekdaysShortRegex")||(this._weekdaysShortRegex=Be),this._weekdaysShortStrictRegex&&e?this._weekdaysShortStrictRegex:this._weekdaysShortRegex)},kn.weekdaysMinRegex=function(e){return this._weekdaysParseExact?(m(this,"_weekdaysRegex")||Qe.call(this),e?this._weekdaysMinStrictRegex:this._weekdaysMinRegex):(m(this,"_weekdaysMinRegex")||(this._weekdaysMinRegex=Je),this._weekdaysMinStrictRegex&&e?this._weekdaysMinStrictRegex:this._weekdaysMinRegex)},kn.isPM=function(e){return"p"===(e+"").toLowerCase().charAt(0)},kn.meridiem=function(e,t,n){return 11<e?n?"pm":"PM":n?"am":"AM"},lt("en",{eras:[{since:"0001-01-01",until:1/0,offset:1,name:"Anno Domini",narrow:"AD",abbr:"AD"},{since:"0000-12-31",until:-1/0,offset:1,name:"Before Christ",narrow:"BC",abbr:"BC"}],dayOfMonthOrdinalParse:/\d{1,2}(th|st|nd|rd)/,ordinal:function(e){var t=e%10;return e+(1===Z(e%100/10)?"th":1==t?"st":2==t?"nd":3==t?"rd":"th")}}),f.lang=n("moment.lang is deprecated. Use moment.locale instead.",lt),f.langData=n("moment.langData is deprecated. Use moment.localeData instead.",dt);var Yn=Math.abs;function On(e,t,n,s){var i=Zt(t,n);return e._milliseconds+=s*i._milliseconds,e._days+=s*i._days,e._months+=s*i._months,e._bubble()}function bn(e){return e<0?Math.floor(e):Math.ceil(e)}function xn(e){return 4800*e/146097}function Tn(e){return 146097*e/4800}function Nn(e){return function(){return this.as(e)}}var Pn=Nn("ms"),Rn=Nn("s"),Wn=Nn("m"),Cn=Nn("h"),Un=Nn("d"),Hn=Nn("w"),Fn=Nn("M"),Ln=Nn("Q"),Vn=Nn("y");function Gn(e){return function(){return this.isValid()?this._data[e]:NaN}}var En=Gn("milliseconds"),An=Gn("seconds"),jn=Gn("minutes"),In=Gn("hours"),Zn=Gn("days"),zn=Gn("months"),$n=Gn("years");var qn=Math.round,Bn={ss:44,s:45,m:45,h:22,d:26,w:null,M:11};function Jn(e,t,n,s){var i=Zt(e).abs(),r=qn(i.as("s")),a=qn(i.as("m")),o=qn(i.as("h")),u=qn(i.as("d")),l=qn(i.as("M")),h=qn(i.as("w")),d=qn(i.as("y")),c=(r<=n.ss?["s",r]:r<n.s&&["ss",r])||a<=1&&["m"]||a<n.m&&["mm",a]||o<=1&&["h"]||o<n.h&&["hh",o]||u<=1&&["d"]||u<n.d&&["dd",u];return null!=n.w&&(c=c||h<=1&&["w"]||h<n.w&&["ww",h]),(c=c||l<=1&&["M"]||l<n.M&&["MM",l]||d<=1&&["y"]||["yy",d])[2]=t,c[3]=0<+e,c[4]=s,function(e,t,n,s,i){return i.relativeTime(t||1,!!n,e,s)}.apply(null,c)}var Qn=Math.abs;function Xn(e){return(0<e)-(e<0)||+e}function Kn(){if(!this.isValid())return this.localeData().invalidDate();var e,t,n,s,i,r,a,o,u=Qn(this._milliseconds)/1e3,l=Qn(this._days),h=Qn(this._months),d=this.asSeconds();return d?(e=I(u/60),t=I(e/60),u%=60,e%=60,n=I(h/12),h%=12,s=u?u.toFixed(3).replace(/\.?0+$/,""):"",i=d<0?"-":"",r=Xn(this._months)!==Xn(d)?"-":"",a=Xn(this._days)!==Xn(d)?"-":"",o=Xn(this._milliseconds)!==Xn(d)?"-":"",i+"P"+(n?r+n+"Y":"")+(h?r+h+"M":"")+(l?a+l+"D":"")+(t||e||u?"T":"")+(t?o+t+"H":"")+(e?o+e+"M":"")+(u?o+s+"S":"")):"P0D"}var es=Ct.prototype;return es.isValid=function(){return this._isValid},es.abs=function(){var e=this._data;return this._milliseconds=Yn(this._milliseconds),this._days=Yn(this._days),this._months=Yn(this._months),e.milliseconds=Yn(e.milliseconds),e.seconds=Yn(e.seconds),e.minutes=Yn(e.minutes),e.hours=Yn(e.hours),e.months=Yn(e.months),e.years=Yn(e.years),this},es.add=function(e,t){return On(this,e,t,1)},es.subtract=function(e,t){return On(this,e,t,-1)},es.as=function(e){if(!this.isValid())return NaN;var t,n,s=this._milliseconds;if("month"===(e=V(e))||"quarter"===e||"year"===e)switch(t=this._days+s/864e5,n=this._months+xn(t),e){case"month":return n;case"quarter":return n/3;case"year":return n/12}else switch(t=this._days+Math.round(Tn(this._months)),e){case"week":return t/7+s/6048e5;case"day":return t+s/864e5;case"hour":return 24*t+s/36e5;case"minute":return 1440*t+s/6e4;case"second":return 86400*t+s/1e3;case"millisecond":return Math.floor(864e5*t)+s;default:throw new Error("Unknown unit "+e)}},es.asMilliseconds=Pn,es.asSeconds=Rn,es.asMinutes=Wn,es.asHours=Cn,es.asDays=Un,es.asWeeks=Hn,es.asMonths=Fn,es.asQuarters=Ln,es.asYears=Vn,es.valueOf=function(){return this.isValid()?this._milliseconds+864e5*this._days+this._months%12*2592e6+31536e6*Z(this._months/12):NaN},es._bubble=function(){var e,t,n,s,i,r=this._milliseconds,a=this._days,o=this._months,u=this._data;return 0<=r&&0<=a&&0<=o||r<=0&&a<=0&&o<=0||(r+=864e5*bn(Tn(o)+a),o=a=0),u.milliseconds=r%1e3,e=I(r/1e3),u.seconds=e%60,t=I(e/60),u.minutes=t%60,n=I(t/60),u.hours=n%24,a+=I(n/24),o+=i=I(xn(a)),a-=bn(Tn(i)),s=I(o/12),o%=12,u.days=a,u.months=o,u.years=s,this},es.clone=function(){return Zt(this)},es.get=function(e){return e=V(e),this.isValid()?this[e+"s"]():NaN},es.milliseconds=En,es.seconds=An,es.minutes=jn,es.hours=In,es.days=Zn,es.weeks=function(){return I(this.days()/7)},es.months=zn,es.years=$n,es.humanize=function(e,t){if(!this.isValid())return this.localeData().invalidDate();var n,s,i=!1,r=Bn;return"object"==typeof e&&(t=e,e=!1),"boolean"==typeof e&&(i=e),"object"==typeof t&&(r=Object.assign({},Bn,t),null!=t.s&&null==t.ss&&(r.ss=t.s-1)),n=this.localeData(),s=Jn(this,!i,r,n),i&&(s=n.pastFuture(+this,s)),n.postformat(s)},es.toISOString=Kn,es.toString=Kn,es.toJSON=Kn,es.locale=tn,es.localeData=sn,es.toIsoString=n("toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)",Kn),es.lang=nn,C("X",0,0,"unix"),C("x",0,0,"valueOf"),ce("x",ue),ce("X",/[+-]?\d+(\.\d{1,3})?/),ye("X",function(e,t,n){n._d=new Date(1e3*parseFloat(e))}),ye("x",function(e,t,n){n._d=new Date(Z(e))}),f.version="2.28.0",e=Tt,f.fn=pn,f.min=function(){return Rt("isBefore",[].slice.call(arguments,0))},f.max=function(){return Rt("isAfter",[].slice.call(arguments,0))},f.now=function(){return Date.now?Date.now():+new Date},f.utc=_,f.unix=function(e){return Tt(1e3*e)},f.months=function(e,t){return Dn(e,t,"months")},f.isDate=a,f.locale=lt,f.invalid=w,f.duration=Zt,f.isMoment=M,f.weekdays=function(e,t,n){return Sn(e,t,n,"weekdays")},f.parseZone=function(){return Tt.apply(null,arguments).parseZone()},f.localeData=dt,f.isDuration=Ut,f.monthsShort=function(e,t){return Dn(e,t,"monthsShort")},f.weekdaysMin=function(e,t,n){return Sn(e,t,n,"weekdaysMin")},f.defineLocale=ht,f.updateLocale=function(e,t){var n,s,i;return null!=t?(i=st,null!=it[e]&&null!=it[e].parentLocale?it[e].set(b(it[e]._config,t)):(null!=(s=ut(e))&&(i=s._config),t=b(i,t),null==s&&(t.abbr=e),(n=new x(t)).parentLocale=it[e],it[e]=n),lt(e)):null!=it[e]&&(null!=it[e].parentLocale?(it[e]=it[e].parentLocale,e===lt()&&lt(e)):null!=it[e]&&delete it[e]),it[e]},f.locales=function(){return s(it)},f.weekdaysShort=function(e,t,n){return Sn(e,t,n,"weekdaysShort")},f.normalizeUnits=V,f.relativeTimeRounding=function(e){return void 0===e?qn:"function"==typeof e&&(qn=e,!0)},f.relativeTimeThreshold=function(e,t){return void 0!==Bn[e]&&(void 0===t?Bn[e]:(Bn[e]=t,"s"===e&&(Bn.ss=t-1),!0))},f.calendarFormat=function(e,t){var n=e.diff(t,"days",!0);return n<-6?"sameElse":n<-1?"lastWeek":n<0?"lastDay":n<1?"sameDay":n<2?"nextDay":n<7?"nextWeek":"sameElse"},f.prototype=pn,f.HTML5_FMT={DATETIME_LOCAL:"YYYY-MM-DDTHH:mm",DATETIME_LOCAL_SECONDS:"YYYY-MM-DDTHH:mm:ss",DATETIME_LOCAL_MS:"YYYY-MM-DDTHH:mm:ss.SSS",DATE:"YYYY-MM-DD",TIME:"HH:mm",TIME_SECONDS:"HH:mm:ss",TIME_MS:"HH:mm:ss.SSS",WEEK:"GGGG-[W]WW",MONTH:"YYYY-MM"},f});
+//# sourceMappingURL=moment.min.js.map
\ No newline at end of file
diff --git a/admin/js/vendors/moment/moment.min.js.map b/admin/js/vendors/moment/moment.min.js.map
new file mode 100644 (file)
index 0000000..df7aa30
--- /dev/null
@@ -0,0 +1 @@
+{"version":3,"file":"moment.min.js","sources":["../moment.js"],"names":["global","factory","exports","module","define","amd","moment","this","hookCallback","some","hooks","apply","arguments","isArray","input","Array","Object","prototype","toString","call","isObject","hasOwnProp","a","b","hasOwnProperty","isObjectEmpty","obj","getOwnPropertyNames","length","k","isUndefined","isNumber","isDate","Date","map","arr","fn","res","i","push","extend","valueOf","createUTC","format","locale","strict","createLocalOrUTC","utc","getParsingFlags","m","_pf","empty","unusedTokens","unusedInput","overflow","charsLeftOver","nullInput","invalidEra","invalidMonth","invalidFormat","userInvalidated","iso","parsedDateParts","era","meridiem","rfc2822","weekdayMismatch","isValid","_isValid","flags","parsedParts","isNowValid","isNaN","_d","getTime","invalidWeekday","_strict","undefined","bigHour","isFrozen","createInvalid","NaN","fun","t","len","momentProperties","updateInProgress","copyConfig","to","from","prop","val","_isAMomentObject","_i","_f","_l","_tzm","_isUTC","_offset","_locale","Moment","config","updateOffset","isMoment","warn","msg","suppressDeprecationWarnings","console","deprecate","firstTime","deprecationHandler","arg","key","args","slice","join","Error","stack","keys","deprecations","deprecateSimple","name","isFunction","Function","mergeConfigs","parentConfig","childConfig","Locale","set","zeroFill","number","targetLength","forceSign","absNumber","Math","abs","zerosToFill","pow","max","substr","formattingTokens","localFormattingTokens","formatFunctions","formatTokenFunctions","addFormatToken","token","padded","ordinal","callback","func","localeData","formatMoment","expandFormat","array","match","replace","mom","output","makeFormatFunction","invalidDate","replaceLongDateFormatTokens","longDateFormat","lastIndex","test","aliases","addUnitAlias","unit","shorthand","lowerCase","toLowerCase","normalizeUnits","units","normalizeObjectUnits","inputObject","normalizedProp","normalizedInput","priorities","addUnitPriority","priority","isLeapYear","year","absFloor","ceil","floor","toInt","argumentForCoercion","coercedNumber","value","isFinite","makeGetSet","keepTime","set$1","get","month","date","daysInMonth","regexes","match1","match2","match3","match4","match6","match1to2","match3to4","match5to6","match1to3","match1to4","match1to6","matchUnsigned","matchSigned","matchOffset","matchShortOffset","matchWord","addRegexToken","regex","strictRegex","isStrict","getParseRegexForToken","RegExp","regexEscape","matched","p1","p2","p3","p4","s","tokens","addParseToken","addWeekParseToken","_w","indexOf","YEAR","MONTH","DATE","HOUR","MINUTE","SECOND","MILLISECOND","WEEK","WEEKDAY","x","modMonth","o","monthsShort","months","monthsShortRegex","monthsRegex","monthsParse","defaultLocaleMonths","split","defaultLocaleMonthsShort","MONTHS_IN_FORMAT","defaultMonthsShortRegex","defaultMonthsRegex","setMonth","dayOfMonth","min","getSetMonth","computeMonthsParse","cmpLenRev","shortPieces","longPieces","mixedPieces","sort","_monthsRegex","_monthsShortRegex","_monthsStrictRegex","_monthsShortStrictRegex","daysInYear","y","parseTwoDigitYear","parseInt","getSetYear","createUTCDate","UTC","getUTCFullYear","setUTCFullYear","firstWeekOffset","dow","doy","fwd","getUTCDay","dayOfYearFromWeeks","week","weekday","resYear","dayOfYear","resDayOfYear","weekOfYear","resWeek","weekOffset","weeksInYear","weekOffsetNext","shiftWeekdays","ws","n","concat","weekdaysMin","weekdaysShort","weekdays","weekdaysMinRegex","weekdaysShortRegex","weekdaysRegex","weekdaysParse","d","defaultLocaleWeekdays","defaultLocaleWeekdaysShort","defaultLocaleWeekdaysMin","defaultWeekdaysRegex","defaultWeekdaysShortRegex","defaultWeekdaysMinRegex","computeWeekdaysParse","minp","shortp","longp","minPieces","day","_weekdaysRegex","_weekdaysShortRegex","_weekdaysMinRegex","_weekdaysStrictRegex","_weekdaysShortStrictRegex","_weekdaysMinStrictRegex","hFormat","hours","lowercase","minutes","matchMeridiem","_meridiemParse","seconds","kInput","_isPm","isPM","_meridiem","pos","pos1","pos2","getSetHour","globalLocale","baseConfig","calendar","sameDay","nextDay","nextWeek","lastDay","lastWeek","sameElse","LTS","LT","L","LL","LLL","LLLL","dayOfMonthOrdinalParse","relativeTime","future","past","ss","mm","h","hh","dd","w","ww","M","MM","yy","meridiemParse","locales","localeFamilies","normalizeLocale","chooseLocale","names","j","next","loadLocale","arr1","arr2","minl","commonPrefix","oldLocale","_abbr","require","getSetGlobalLocale","e","values","data","getLocale","defineLocale","abbr","_config","parentLocale","forEach","checkOverflow","_a","_overflowDayOfYear","_overflowWeeks","_overflowWeekday","extendedIsoRegex","basicIsoRegex","tzRegex","isoDates","isoTimes","aspNetJsonRegex","obsOffsets","UT","GMT","EDT","EST","CDT","CST","MDT","MST","PDT","PST","configFromISO","l","allowTime","dateFormat","timeFormat","tzFormat","string","exec","configFromStringAndFormat","extractFromRFC2822Strings","yearStr","monthStr","dayStr","hourStr","minuteStr","secondStr","result","untruncateYear","configFromRFC2822","parsedArray","weekdayStr","parsedInput","getDay","obsOffset","militaryOffset","numOffset","hm","calculateOffset","setUTCMinutes","getUTCMinutes","defaults","c","configFromArray","currentDate","expectedWeekday","yearToUse","nowValue","now","_useUTC","getUTCMonth","getUTCDate","getFullYear","getMonth","getDate","weekYear","temp","weekdayOverflow","curWeek","GG","W","E","createLocal","_week","gg","_dayOfYear","dayOfYearFromWeekInfo","_nextDay","ms","setFullYear","ISO_8601","RFC_2822","skipped","stringLength","totalParsedInputLength","hour","isPm","meridiemHour","meridiemFixWrap","erasConvertYear","prepareConfig","preparse","tempConfig","bestMoment","scoreToBeat","currentScore","validFormatFound","bestFormatIsValid","score","configFromStringAndArray","createFromInputFallback","configFromString","dayOrDate","minute","second","millisecond","configFromObject","isUTC","add","prototypeMin","other","prototypeMax","pickBy","moments","ordering","Duration","duration","years","quarters","quarter","weeks","isoWeek","days","milliseconds","unitHasDecimal","parseFloat","isDurationValid","_milliseconds","_days","_months","_data","_bubble","isDuration","absRound","round","offset","separator","utcOffset","sign","offsetFromString","chunkOffset","matcher","parts","matches","cloneWithOffset","model","diff","clone","setTime","local","getDateOffset","getTimezoneOffset","isUtc","aspNetRegex","isoRegex","createDuration","ret","diffRes","parseIso","base","isBefore","positiveMomentsDifference","momentsDifference","inp","isAfter","createAdder","direction","period","tmp","addSubtract","isAdding","invalid","subtract","isString","String","isMomentInput","arrayTest","dataTypeTest","filter","item","isNumberOrStringArray","property","objectTest","propertyTest","properties","isMomentInputObject","monthDiff","wholeMonthDiff","anchor","adjust","newLocaleData","defaultFormat","defaultFormatUtc","lang","MS_PER_400_YEARS","mod$1","dividend","divisor","localStartOfDate","utcStartOfDate","matchEraAbbr","erasAbbrRegex","computeErasParse","abbrPieces","namePieces","narrowPieces","eras","narrow","_erasRegex","_erasNameRegex","_erasAbbrRegex","_erasNarrowRegex","addWeekYearFormatToken","getter","getSetWeekYearHelper","weeksTarget","dayOfYearData","erasNameRegex","erasNarrowRegex","erasParse","_eraYearOrdinalRegex","eraYearOrdinalParse","isoWeekYear","_dayOfMonthOrdinalParse","_ordinalParse","_dayOfMonthOrdinalParseLenient","getSetDayOfMonth","getSetMinute","getSetMillisecond","getSetSecond","parseMs","proto","preParsePostFormat","time","formats","isCalendarSpec","sod","startOf","calendarFormat","asFloat","that","zoneDelta","endOf","startOfDate","isoWeekday","inputString","postformat","withoutSuffix","humanize","fromNow","toNow","invalidAt","localInput","isBetween","inclusivity","localFrom","localTo","isSame","inputMs","isSameOrAfter","isSameOrBefore","parsingFlags","prioritized","unitsObj","u","getPrioritizedUnits","toArray","toObject","toDate","toISOString","keepOffset","inspect","prefix","suffix","zone","isLocal","Symbol","for","toJSON","unix","creationData","eraName","since","until","eraNarrow","eraAbbr","eraYear","dir","isoWeeks","weekInfo","weeksInWeekYear","isoWeeksInYear","isoWeeksInISOWeekYear","keepLocalTime","keepMinutes","localAdjust","_changeInProgress","parseZone","tZone","hasAlignedHourOffset","isDST","isUtcOffset","zoneAbbr","zoneName","dates","isDSTShifted","_isDSTShifted","array1","array2","dontConvert","lengthDiff","diffs","compareArrays","proto$1","get$1","index","field","setter","listMonthsImpl","out","listWeekdaysImpl","localeSorted","shift","_calendar","_longDateFormat","formatUpper","toUpperCase","tok","_invalidDate","_ordinal","isFuture","_relativeTime","pastFuture","source","_eras","Infinity","isFormat","_monthsShort","monthName","_monthsParseExact","ii","llc","toLocaleLowerCase","_monthsParse","_longMonthsParse","_shortMonthsParse","firstDayOfYear","firstDayOfWeek","_weekdays","_weekdaysMin","_weekdaysShort","weekdayName","_weekdaysParseExact","_weekdaysParse","_shortWeekdaysParse","_minWeekdaysParse","_fullWeekdaysParse","charAt","isLower","langData","mathAbs","addSubtract$1","absCeil","daysToMonths","monthsToDays","makeAs","alias","as","asMilliseconds","asSeconds","asMinutes","asHours","asDays","asWeeks","asMonths","asQuarters","asYears","makeGetter","thresholds","relativeTime$1","posNegDuration","abs$1","toISOString$1","totalSign","ymSign","daysSign","hmsSign","total","toFixed","proto$2","monthsFromDays","argWithSuffix","argThresholds","withSuffix","th","assign","toIsoString","version","updateLocale","tmpLocale","relativeTimeRounding","roundingFunction","relativeTimeThreshold","threshold","limit","myMoment","HTML5_FMT","DATETIME_LOCAL","DATETIME_LOCAL_SECONDS","DATETIME_LOCAL_MS","TIME","TIME_SECONDS","TIME_MS"],"mappings":"CAME,SAAUA,EAAQC,GACG,iBAAZC,SAA0C,oBAAXC,OAAyBA,OAAOD,QAAUD,IAC9D,mBAAXG,QAAyBA,OAAOC,IAAMD,OAAOH,GACpDD,EAAOM,OAASL,IAHnB,CAICM,KAAM,wBAEJ,IAAIC,EA4HAC,EA1HJ,SAASC,IACL,OAAOF,EAAaG,MAAM,KAAMC,WASpC,SAASC,EAAQC,GACb,OACIA,aAAiBC,OACyB,mBAA1CC,OAAOC,UAAUC,SAASC,KAAKL,GAIvC,SAASM,EAASN,GAGd,OACa,MAATA,GAC0C,oBAA1CE,OAAOC,UAAUC,SAASC,KAAKL,GAIvC,SAASO,EAAWC,EAAGC,GACnB,OAAOP,OAAOC,UAAUO,eAAeL,KAAKG,EAAGC,GAGnD,SAASE,EAAcC,GACnB,GAAIV,OAAOW,oBACP,OAAkD,IAA3CX,OAAOW,oBAAoBD,GAAKE,OAGvC,IADA,IAAIC,KACMH,EACN,GAAIL,EAAWK,EAAKG,GAChB,OAGR,OAAO,EAIf,SAASC,EAAYhB,GACjB,YAAiB,IAAVA,EAGX,SAASiB,EAASjB,GACd,MACqB,iBAAVA,GACmC,oBAA1CE,OAAOC,UAAUC,SAASC,KAAKL,GAIvC,SAASkB,EAAOlB,GACZ,OACIA,aAAiBmB,MACyB,kBAA1CjB,OAAOC,UAAUC,SAASC,KAAKL,GAIvC,SAASoB,EAAIC,EAAKC,GAGd,IAFA,IAAIC,EAAM,GAELC,EAAI,EAAGA,EAAIH,EAAIP,SAAUU,EAC1BD,EAAIE,KAAKH,EAAGD,EAAIG,GAAIA,IAExB,OAAOD,EAGX,SAASG,EAAOlB,EAAGC,GACf,IAAK,IAAIe,KAAKf,EACNF,EAAWE,EAAGe,KACdhB,EAAEgB,GAAKf,EAAEe,IAYjB,OARIjB,EAAWE,EAAG,cACdD,EAAEJ,SAAWK,EAAEL,UAGfG,EAAWE,EAAG,aACdD,EAAEmB,QAAUlB,EAAEkB,SAGXnB,EAGX,SAASoB,EAAU5B,EAAO6B,EAAQC,EAAQC,GACtC,OAAOC,GAAiBhC,EAAO6B,EAAQC,EAAQC,GAAQ,GAAME,MAyBjE,SAASC,EAAgBC,GAIrB,OAHa,MAATA,EAAEC,MACFD,EAAEC,IAtBC,CACHC,OAAO,EACPC,aAAc,GACdC,YAAa,GACbC,UAAW,EACXC,cAAe,EACfC,WAAW,EACXC,WAAY,KACZC,aAAc,KACdC,eAAe,EACfC,iBAAiB,EACjBC,KAAK,EACLC,gBAAiB,GACjBC,IAAK,KACLC,SAAU,KACVC,SAAS,EACTC,iBAAiB,IAQdjB,EAAEC,IAsBb,SAASiB,EAAQlB,GACb,GAAkB,MAAdA,EAAEmB,SAAkB,CACpB,IAAIC,EAAQrB,EAAgBC,GACxBqB,EAAc7D,EAAKU,KAAKkD,EAAMP,gBAAiB,SAAUxB,GACrD,OAAY,MAALA,IAEXiC,GACKC,MAAMvB,EAAEwB,GAAGC,YACZL,EAAMf,SAAW,IAChBe,EAAMlB,QACNkB,EAAMZ,aACNY,EAAMX,eACNW,EAAMM,iBACNN,EAAMH,kBACNG,EAAMb,YACNa,EAAMV,gBACNU,EAAMT,mBACLS,EAAML,UAAaK,EAAML,UAAYM,GAU/C,GARIrB,EAAE2B,UACFL,EACIA,GACwB,IAAxBF,EAAMd,eACwB,IAA9Bc,EAAMjB,aAAaxB,aACDiD,IAAlBR,EAAMS,SAGS,MAAnB9D,OAAO+D,UAAqB/D,OAAO+D,SAAS9B,GAG5C,OAAOsB,EAFPtB,EAAEmB,SAAWG,EAKrB,OAAOtB,EAAEmB,SAGb,SAASY,EAAcX,GACnB,IAAIpB,EAAIP,EAAUuC,KAOlB,OANa,MAATZ,EACA7B,EAAOQ,EAAgBC,GAAIoB,GAE3BrB,EAAgBC,GAAGW,iBAAkB,EAGlCX,EA7DPxC,EADAM,MAAME,UAAUR,KACTM,MAAME,UAAUR,KAEhB,SAAUyE,GAKb,IAJA,IAAIC,EAAInE,OAAOT,MACX6E,EAAMD,EAAEvD,SAAW,EAGlBU,EAAI,EAAGA,EAAI8C,EAAK9C,IACjB,GAAIA,KAAK6C,GAAKD,EAAI/D,KAAKZ,KAAM4E,EAAE7C,GAAIA,EAAG6C,GAClC,OAAO,EAIf,OAAO,GAqDf,IAAIE,EAAoB3E,EAAM2E,iBAAmB,GAC7CC,GAAmB,EAEvB,SAASC,EAAWC,EAAIC,GACpB,IAAInD,EAAGoD,EAAMC,EAiCb,GA/BK7D,EAAY2D,EAAKG,oBAClBJ,EAAGI,iBAAmBH,EAAKG,kBAE1B9D,EAAY2D,EAAKI,MAClBL,EAAGK,GAAKJ,EAAKI,IAEZ/D,EAAY2D,EAAKK,MAClBN,EAAGM,GAAKL,EAAKK,IAEZhE,EAAY2D,EAAKM,MAClBP,EAAGO,GAAKN,EAAKM,IAEZjE,EAAY2D,EAAKb,WAClBY,EAAGZ,QAAUa,EAAKb,SAEjB9C,EAAY2D,EAAKO,QAClBR,EAAGQ,KAAOP,EAAKO,MAEdlE,EAAY2D,EAAKQ,UAClBT,EAAGS,OAASR,EAAKQ,QAEhBnE,EAAY2D,EAAKS,WAClBV,EAAGU,QAAUT,EAAKS,SAEjBpE,EAAY2D,EAAKvC,OAClBsC,EAAGtC,IAAMF,EAAgByC,IAExB3D,EAAY2D,EAAKU,WAClBX,EAAGW,QAAUV,EAAKU,SAGQ,EAA1Bd,EAAiBzD,OACjB,IAAKU,EAAI,EAAGA,EAAI+C,EAAiBzD,OAAQU,IAGhCR,EADL6D,EAAMF,EADNC,EAAOL,EAAiB/C,OAGpBkD,EAAGE,GAAQC,GAKvB,OAAOH,EAIX,SAASY,EAAOC,GACZd,EAAWhF,KAAM8F,GACjB9F,KAAKkE,GAAK,IAAIxC,KAAkB,MAAboE,EAAO5B,GAAa4B,EAAO5B,GAAGC,UAAYO,KACxD1E,KAAK4D,YACN5D,KAAKkE,GAAK,IAAIxC,KAAKgD,OAIE,IAArBK,IACAA,GAAmB,EACnB5E,EAAM4F,aAAa/F,MACnB+E,GAAmB,GAI3B,SAASiB,EAAS7E,GACd,OACIA,aAAe0E,GAAkB,MAAP1E,GAAuC,MAAxBA,EAAIkE,iBAIrD,SAASY,EAAKC,IAEgC,IAAtC/F,EAAMgG,6BACa,oBAAZC,SACPA,QAAQH,MAERG,QAAQH,KAAK,wBAA0BC,GAI/C,SAASG,EAAUH,EAAKrE,GACpB,IAAIyE,GAAY,EAEhB,OAAOrE,EAAO,WAIV,GAHgC,MAA5B9B,EAAMoG,oBACNpG,EAAMoG,mBAAmB,KAAML,GAE/BI,EAAW,CAKX,IAJA,IACIE,EAEAC,EAHAC,EAAO,GAIN3E,EAAI,EAAGA,EAAI1B,UAAUgB,OAAQU,IAAK,CAEnC,GADAyE,EAAM,GACsB,iBAAjBnG,UAAU0B,GAAiB,CAElC,IAAK0E,KADLD,GAAO,MAAQzE,EAAI,KACP1B,UAAU,GACdS,EAAWT,UAAU,GAAIoG,KACzBD,GAAOC,EAAM,KAAOpG,UAAU,GAAGoG,GAAO,MAGhDD,EAAMA,EAAIG,MAAM,GAAI,QAEpBH,EAAMnG,UAAU0B,GAEpB2E,EAAK1E,KAAKwE,GAEdP,EACIC,EACI,gBACA1F,MAAME,UAAUiG,MAAM/F,KAAK8F,GAAME,KAAK,IACtC,MACA,IAAIC,OAAQC,OAEpBR,GAAY,EAEhB,OAAOzE,EAAGzB,MAAMJ,KAAMK,YACvBwB,GAGP,IAgFIkF,EAhFAC,EAAe,GAEnB,SAASC,EAAgBC,EAAMhB,GACK,MAA5B/F,EAAMoG,oBACNpG,EAAMoG,mBAAmBW,EAAMhB,GAE9Bc,EAAaE,KACdjB,EAAKC,GACLc,EAAaE,IAAQ,GAO7B,SAASC,EAAW5G,GAChB,MACyB,oBAAb6G,UAA4B7G,aAAiB6G,UACX,sBAA1C3G,OAAOC,UAAUC,SAASC,KAAKL,GA2BvC,SAAS8G,EAAaC,EAAcC,GAChC,IACIpC,EADArD,EAAMG,EAAO,GAAIqF,GAErB,IAAKnC,KAAQoC,EACLzG,EAAWyG,EAAapC,KACpBtE,EAASyG,EAAanC,KAAUtE,EAAS0G,EAAYpC,KACrDrD,EAAIqD,GAAQ,GACZlD,EAAOH,EAAIqD,GAAOmC,EAAanC,IAC/BlD,EAAOH,EAAIqD,GAAOoC,EAAYpC,KACF,MAArBoC,EAAYpC,GACnBrD,EAAIqD,GAAQoC,EAAYpC,UAEjBrD,EAAIqD,IAIvB,IAAKA,KAAQmC,EAELxG,EAAWwG,EAAcnC,KACxBrE,EAAWyG,EAAapC,IACzBtE,EAASyG,EAAanC,MAGtBrD,EAAIqD,GAAQlD,EAAO,GAAIH,EAAIqD,KAGnC,OAAOrD,EAGX,SAAS0F,EAAO1B,GACE,MAAVA,GACA9F,KAAKyH,IAAI3B,GAhEjB3F,EAAMgG,6BAA8B,EACpChG,EAAMoG,mBAAqB,KAsEvBQ,EADAtG,OAAOsG,KACAtG,OAAOsG,KAEP,SAAU5F,GACb,IAAIY,EACAD,EAAM,GACV,IAAKC,KAAKZ,EACFL,EAAWK,EAAKY,IAChBD,EAAIE,KAAKD,GAGjB,OAAOD,GAkBf,SAAS4F,EAASC,EAAQC,EAAcC,GACpC,IAAIC,EAAY,GAAKC,KAAKC,IAAIL,GAC1BM,EAAcL,EAAeE,EAAUzG,OAE3C,OADqB,GAAVsG,EAEEE,EAAY,IAAM,GAAM,KACjCE,KAAKG,IAAI,GAAIH,KAAKI,IAAI,EAAGF,IAActH,WAAWyH,OAAO,GACzDN,EAIR,IAAIO,EAAmB,yMACnBC,EAAwB,6CACxBC,EAAkB,GAClBC,EAAuB,GAM3B,SAASC,EAAeC,EAAOC,EAAQC,EAASC,GAC5C,IAAIC,EACoB,iBAAbD,EACA,WACH,OAAO7I,KAAK6I,MAHTA,EAMPH,IACAF,EAAqBE,GAASI,GAE9BH,IACAH,EAAqBG,EAAO,IAAM,WAC9B,OAAOjB,EAASoB,EAAK1I,MAAMJ,KAAMK,WAAYsI,EAAO,GAAIA,EAAO,MAGnEC,IACAJ,EAAqBI,GAAW,WAC5B,OAAO5I,KAAK+I,aAAaH,QACrBE,EAAK1I,MAAMJ,KAAMK,WACjBqI,KAuChB,SAASM,EAAatG,EAAGN,GACrB,OAAKM,EAAEkB,WAIPxB,EAAS6G,EAAa7G,EAAQM,EAAEqG,cAChCR,EAAgBnG,GACZmG,EAAgBnG,IAjCxB,SAA4BA,GAKxB,IAJA,IAR4B7B,EAQxB2I,EAAQ9G,EAAO+G,MAAMd,GAIpBtG,EAAI,EAAGV,EAAS6H,EAAM7H,OAAQU,EAAIV,EAAQU,IACvCyG,EAAqBU,EAAMnH,IAC3BmH,EAAMnH,GAAKyG,EAAqBU,EAAMnH,IAEtCmH,EAAMnH,IAhBcxB,EAgBc2I,EAAMnH,IAftCoH,MAAM,YACL5I,EAAM6I,QAAQ,WAAY,IAE9B7I,EAAM6I,QAAQ,MAAO,IAgB5B,OAAO,SAAUC,GAGb,IAFA,IAAIC,EAAS,GAERvH,EAAI,EAAGA,EAAIV,EAAQU,IACpBuH,GAAUnC,EAAW+B,EAAMnH,IACrBmH,EAAMnH,GAAGnB,KAAKyI,EAAKjH,GACnB8G,EAAMnH,GAEhB,OAAOuH,GAYoBC,CAAmBnH,GAE3CmG,EAAgBnG,GAAQM,IAPpBA,EAAEqG,aAAaS,cAU9B,SAASP,EAAa7G,EAAQC,GAC1B,IAAIN,EAAI,EAER,SAAS0H,EAA4BlJ,GACjC,OAAO8B,EAAOqH,eAAenJ,IAAUA,EAI3C,IADA+H,EAAsBqB,UAAY,EACtB,GAAL5H,GAAUuG,EAAsBsB,KAAKxH,IACxCA,EAASA,EAAOgH,QACZd,EACAmB,GAEJnB,EAAsBqB,UAAY,IAClC5H,EAGJ,OAAOK,EAkFX,IAAIyH,EAAU,GAEd,SAASC,EAAaC,EAAMC,GACxB,IAAIC,EAAYF,EAAKG,cACrBL,EAAQI,GAAaJ,EAAQI,EAAY,KAAOJ,EAAQG,GAAaD,EAGzE,SAASI,EAAeC,GACpB,MAAwB,iBAAVA,EACRP,EAAQO,IAAUP,EAAQO,EAAMF,oBAChC5F,EAGV,SAAS+F,EAAqBC,GAC1B,IACIC,EACApF,EAFAqF,EAAkB,GAItB,IAAKrF,KAAQmF,EACLxJ,EAAWwJ,EAAanF,KACxBoF,EAAiBJ,EAAehF,MAE5BqF,EAAgBD,GAAkBD,EAAYnF,IAK1D,OAAOqF,EAGX,IAAIC,EAAa,GAEjB,SAASC,EAAgBX,EAAMY,GAC3BF,EAAWV,GAAQY,EAiBvB,SAASC,EAAWC,GAChB,OAAQA,EAAO,GAAM,GAAKA,EAAO,KAAQ,GAAMA,EAAO,KAAQ,EAGlE,SAASC,EAASnD,GACd,OAAIA,EAAS,EAEFI,KAAKgD,KAAKpD,IAAW,EAErBI,KAAKiD,MAAMrD,GAI1B,SAASsD,EAAMC,GACX,IAAIC,GAAiBD,EACjBE,EAAQ,EAMZ,OAJsB,GAAlBD,GAAuBE,SAASF,KAChCC,EAAQN,EAASK,IAGdC,EAGX,SAASE,EAAWvB,EAAMwB,GACtB,OAAO,SAAUH,GACb,OAAa,MAATA,GACAI,EAAMxL,KAAM+J,EAAMqB,GAClBjL,EAAM4F,aAAa/F,KAAMuL,GAClBvL,MAEAyL,EAAIzL,KAAM+J,IAK7B,SAAS0B,EAAIpC,EAAKU,GACd,OAAOV,EAAIzF,UACLyF,EAAInF,GAAG,OAASmF,EAAI3D,OAAS,MAAQ,IAAMqE,KAC3CrF,IAGV,SAAS8G,EAAMnC,EAAKU,EAAMqB,GAClB/B,EAAIzF,YAAcK,MAAMmH,KAEX,aAATrB,GACAa,EAAWvB,EAAIwB,SACC,IAAhBxB,EAAIqC,SACW,KAAfrC,EAAIsC,QAEJP,EAAQH,EAAMG,GACd/B,EAAInF,GAAG,OAASmF,EAAI3D,OAAS,MAAQ,IAAMqE,GACvCqB,EACA/B,EAAIqC,QACJE,GAAYR,EAAO/B,EAAIqC,WAG3BrC,EAAInF,GAAG,OAASmF,EAAI3D,OAAS,MAAQ,IAAMqE,GAAMqB,IAgC7D,IAmBIS,EAnBAC,EAAS,KACTC,EAAS,OACTC,EAAS,QACTC,EAAS,QACTC,GAAS,aACTC,GAAY,QACZC,GAAY,YACZC,GAAY,gBACZC,GAAY,UACZC,GAAY,UACZC,GAAY,eACZC,GAAgB,MAChBC,GAAc,WACdC,GAAc,qBACdC,GAAmB,0BAInBC,GAAY,wJAKhB,SAASC,GAAcpE,EAAOqE,EAAOC,GACjCnB,EAAQnD,GAASvB,EAAW4F,GACtBA,EACA,SAAUE,EAAUlE,GAChB,OAAOkE,GAAYD,EAAcA,EAAcD,GAI7D,SAASG,GAAsBxE,EAAO5C,GAClC,OAAKhF,EAAW+K,EAASnD,GAIlBmD,EAAQnD,GAAO5C,EAAOzB,QAASyB,EAAOF,SAHlC,IAAIuH,OAQRC,GAR8B1E,EAU5BU,QAAQ,KAAM,IACdA,QAAQ,sCAAuC,SAC5CiE,EACAC,EACAC,EACAC,EACAC,GAEA,OAAOH,GAAMC,GAAMC,GAAMC,MAKzC,SAASL,GAAYM,GACjB,OAAOA,EAAEtE,QAAQ,yBAA0B,QApC/CyC,EAAU,GAuCV,IAAI8B,GAAS,GAEb,SAASC,GAAclF,EAAOG,GAC1B,IAAI9G,EACA+G,EAAOD,EASX,IARqB,iBAAVH,IACPA,EAAQ,CAACA,IAETlH,EAASqH,KACTC,EAAO,SAAUvI,EAAO2I,GACpBA,EAAML,GAAYoC,EAAM1K,KAG3BwB,EAAI,EAAGA,EAAI2G,EAAMrH,OAAQU,IAC1B4L,GAAOjF,EAAM3G,IAAM+G,EAI3B,SAAS+E,GAAkBnF,EAAOG,GAC9B+E,GAAclF,EAAO,SAAUnI,EAAO2I,EAAOpD,EAAQ4C,GACjD5C,EAAOgI,GAAKhI,EAAOgI,IAAM,GACzBjF,EAAStI,EAAOuF,EAAOgI,GAAIhI,EAAQ4C,KAU3C,IAcIqF,GAdAC,GAAO,EACPC,GAAQ,EACRC,GAAO,EACPC,GAAO,EACPC,GAAS,EACTC,GAAS,EACTC,GAAc,EACdC,GAAO,EACPC,GAAU,EAuBd,SAAS5C,GAAYf,EAAMa,GACvB,GAAIzH,MAAM4G,IAAS5G,MAAMyH,GACrB,OAAOhH,IAEX,IAzBY+J,EAyBRC,GAAehD,GAzBP+C,EAyBc,IAxBRA,GAAKA,EA0BvB,OADA5D,IAASa,EAAQgD,GAAY,GACT,GAAbA,EACD9D,EAAWC,GACP,GACA,GACJ,GAAO6D,EAAW,EAAK,EAxB7BX,GADAvN,MAAME,UAAUqN,QACNvN,MAAME,UAAUqN,QAEhB,SAAUY,GAGhB,IADA,IACK5M,EAAI,EAAGA,EAAI/B,KAAKqB,SAAUU,EAC3B,GAAI/B,KAAK+B,KAAO4M,EACZ,OAAO5M,EAGf,OAAQ,GAmBhB0G,EAAe,IAAK,CAAC,KAAM,GAAI,KAAM,WACjC,OAAOzI,KAAK0L,QAAU,IAG1BjD,EAAe,MAAO,EAAG,EAAG,SAAUrG,GAClC,OAAOpC,KAAK+I,aAAa6F,YAAY5O,KAAMoC,KAG/CqG,EAAe,OAAQ,EAAG,EAAG,SAAUrG,GACnC,OAAOpC,KAAK+I,aAAa8F,OAAO7O,KAAMoC,KAK1C0H,EAAa,QAAS,KAItBY,EAAgB,QAAS,GAIzBoC,GAAc,IAAKX,IACnBW,GAAc,KAAMX,GAAWJ,GAC/Be,GAAc,MAAO,SAAUG,EAAU5K,GACrC,OAAOA,EAAOyM,iBAAiB7B,KAEnCH,GAAc,OAAQ,SAAUG,EAAU5K,GACtC,OAAOA,EAAO0M,YAAY9B,KAG9BW,GAAc,CAAC,IAAK,MAAO,SAAUrN,EAAO2I,GACxCA,EAAM+E,IAAShD,EAAM1K,GAAS,IAGlCqN,GAAc,CAAC,MAAO,QAAS,SAAUrN,EAAO2I,EAAOpD,EAAQ4C,GAC3D,IAAIgD,EAAQ5F,EAAOF,QAAQoJ,YAAYzO,EAAOmI,EAAO5C,EAAOzB,SAE/C,MAATqH,EACAxC,EAAM+E,IAASvC,EAEfjJ,EAAgBqD,GAAQ3C,aAAe5C,IAM/C,IAAI0O,GAAsB,wFAAwFC,MAC1G,KAEJC,GAA2B,kDAAkDD,MACzE,KAEJE,GAAmB,gCACnBC,GAA0BxC,GAC1ByC,GAAqBzC,GAoIzB,SAAS0C,GAASlG,EAAK+B,GACnB,IAAIoE,EAEJ,IAAKnG,EAAIzF,UAEL,OAAOyF,EAGX,GAAqB,iBAAV+B,EACP,GAAI,QAAQxB,KAAKwB,GACbA,EAAQH,EAAMG,QAId,IAAK5J,EAFL4J,EAAQ/B,EAAIN,aAAaiG,YAAY5D,IAGjC,OAAO/B,EAOnB,OAFAmG,EAAazH,KAAK0H,IAAIpG,EAAIsC,OAAQC,GAAYvC,EAAIwB,OAAQO,IAC1D/B,EAAInF,GAAG,OAASmF,EAAI3D,OAAS,MAAQ,IAAM,SAAS0F,EAAOoE,GACpDnG,EAGX,SAASqG,GAAYtE,GACjB,OAAa,MAATA,GACAmE,GAASvP,KAAMoL,GACfjL,EAAM4F,aAAa/F,MAAM,GAClBA,MAEAyL,EAAIzL,KAAM,SAgDzB,SAAS2P,KACL,SAASC,EAAU7O,EAAGC,GAClB,OAAOA,EAAEK,OAASN,EAAEM,OAQxB,IALA,IAIIgI,EAJAwG,EAAc,GACdC,EAAa,GACbC,EAAc,GAGbhO,EAAI,EAAGA,EAAI,GAAIA,IAEhBsH,EAAMlH,EAAU,CAAC,IAAMJ,IACvB8N,EAAY7N,KAAKhC,KAAK4O,YAAYvF,EAAK,KACvCyG,EAAW9N,KAAKhC,KAAK6O,OAAOxF,EAAK,KACjC0G,EAAY/N,KAAKhC,KAAK6O,OAAOxF,EAAK,KAClC0G,EAAY/N,KAAKhC,KAAK4O,YAAYvF,EAAK,KAO3C,IAHAwG,EAAYG,KAAKJ,GACjBE,EAAWE,KAAKJ,GAChBG,EAAYC,KAAKJ,GACZ7N,EAAI,EAAGA,EAAI,GAAIA,IAChB8N,EAAY9N,GAAKqL,GAAYyC,EAAY9N,IACzC+N,EAAW/N,GAAKqL,GAAY0C,EAAW/N,IAE3C,IAAKA,EAAI,EAAGA,EAAI,GAAIA,IAChBgO,EAAYhO,GAAKqL,GAAY2C,EAAYhO,IAG7C/B,KAAKiQ,aAAe,IAAI9C,OAAO,KAAO4C,EAAYnJ,KAAK,KAAO,IAAK,KACnE5G,KAAKkQ,kBAAoBlQ,KAAKiQ,aAC9BjQ,KAAKmQ,mBAAqB,IAAIhD,OAC1B,KAAO2C,EAAWlJ,KAAK,KAAO,IAC9B,KAEJ5G,KAAKoQ,wBAA0B,IAAIjD,OAC/B,KAAO0C,EAAYjJ,KAAK,KAAO,IAC/B,KAiDR,SAASyJ,GAAWxF,GAChB,OAAOD,EAAWC,GAAQ,IAAM,IA5CpCpC,EAAe,IAAK,EAAG,EAAG,WACtB,IAAI6H,EAAItQ,KAAK6K,OACb,OAAOyF,GAAK,KAAO5I,EAAS4I,EAAG,GAAK,IAAMA,IAG9C7H,EAAe,EAAG,CAAC,KAAM,GAAI,EAAG,WAC5B,OAAOzI,KAAK6K,OAAS,MAGzBpC,EAAe,EAAG,CAAC,OAAQ,GAAI,EAAG,QAClCA,EAAe,EAAG,CAAC,QAAS,GAAI,EAAG,QACnCA,EAAe,EAAG,CAAC,SAAU,GAAG,GAAO,EAAG,QAI1CqB,EAAa,OAAQ,KAIrBY,EAAgB,OAAQ,GAIxBoC,GAAc,IAAKJ,IACnBI,GAAc,KAAMX,GAAWJ,GAC/Be,GAAc,OAAQP,GAAWN,GACjCa,GAAc,QAASN,GAAWN,IAClCY,GAAc,SAAUN,GAAWN,IAEnC0B,GAAc,CAAC,QAAS,UAAWI,IACnCJ,GAAc,OAAQ,SAAUrN,EAAO2I,GACnCA,EAAM8E,IACe,IAAjBzN,EAAMc,OAAelB,EAAMoQ,kBAAkBhQ,GAAS0K,EAAM1K,KAEpEqN,GAAc,KAAM,SAAUrN,EAAO2I,GACjCA,EAAM8E,IAAQ7N,EAAMoQ,kBAAkBhQ,KAE1CqN,GAAc,IAAK,SAAUrN,EAAO2I,GAChCA,EAAM8E,IAAQwC,SAASjQ,EAAO,MAWlCJ,EAAMoQ,kBAAoB,SAAUhQ,GAChC,OAAO0K,EAAM1K,IAAyB,GAAf0K,EAAM1K,GAAc,KAAO,MAKtD,IAAIkQ,GAAanF,EAAW,YAAY,GAwBxC,SAASoF,GAAcJ,GACnB,IAAI3E,EAAMjF,EAcV,OAZI4J,EAAI,KAAY,GAALA,IACX5J,EAAOlG,MAAME,UAAUiG,MAAM/F,KAAKP,YAE7B,GAAKiQ,EAAI,IACd3E,EAAO,IAAIjK,KAAKA,KAAKiP,IAAIvQ,MAAM,KAAMsG,IACjC2E,SAASM,EAAKiF,mBACdjF,EAAKkF,eAAeP,IAGxB3E,EAAO,IAAIjK,KAAKA,KAAKiP,IAAIvQ,MAAM,KAAMC,YAGlCsL,EAIX,SAASmF,GAAgBjG,EAAMkG,EAAKC,GAChC,IACIC,EAAM,EAAIF,EAAMC,EAIpB,OAAgBC,GAFH,EAAIP,GAAc7F,EAAM,EAAGoG,GAAKC,YAAcH,GAAO,EAE5C,EAI1B,SAASI,GAAmBtG,EAAMuG,EAAMC,EAASN,EAAKC,GAClD,IAGIM,EADAC,EAAY,EAAI,GAAKH,EAAO,IAFZ,EAAIC,EAAUN,GAAO,EACxBD,GAAgBjG,EAAMkG,EAAKC,GAOxCQ,EAFAD,GAAa,EAEElB,GADfiB,EAAUzG,EAAO,GACoB0G,EAC9BA,EAAYlB,GAAWxF,IAC9ByG,EAAUzG,EAAO,EACF0G,EAAYlB,GAAWxF,KAEtCyG,EAAUzG,EACK0G,GAGnB,MAAO,CACH1G,KAAMyG,EACNC,UAAWC,GAInB,SAASC,GAAWpI,EAAK0H,EAAKC,GAC1B,IAEIU,EACAJ,EAHAK,EAAab,GAAgBzH,EAAIwB,OAAQkG,EAAKC,GAC9CI,EAAOrJ,KAAKiD,OAAO3B,EAAIkI,YAAcI,EAAa,GAAK,GAAK,EAehE,OAXIP,EAAO,EAEPM,EAAUN,EAAOQ,GADjBN,EAAUjI,EAAIwB,OAAS,EACekG,EAAKC,GACpCI,EAAOQ,GAAYvI,EAAIwB,OAAQkG,EAAKC,IAC3CU,EAAUN,EAAOQ,GAAYvI,EAAIwB,OAAQkG,EAAKC,GAC9CM,EAAUjI,EAAIwB,OAAS,IAEvByG,EAAUjI,EAAIwB,OACd6G,EAAUN,GAGP,CACHA,KAAMM,EACN7G,KAAMyG,GAId,SAASM,GAAY/G,EAAMkG,EAAKC,GAC5B,IAAIW,EAAab,GAAgBjG,EAAMkG,EAAKC,GACxCa,EAAiBf,GAAgBjG,EAAO,EAAGkG,EAAKC,GACpD,OAAQX,GAAWxF,GAAQ8G,EAAaE,GAAkB,EAK9DpJ,EAAe,IAAK,CAAC,KAAM,GAAI,KAAM,QACrCA,EAAe,IAAK,CAAC,KAAM,GAAI,KAAM,WAIrCqB,EAAa,OAAQ,KACrBA,EAAa,UAAW,KAIxBY,EAAgB,OAAQ,GACxBA,EAAgB,UAAW,GAI3BoC,GAAc,IAAKX,IACnBW,GAAc,KAAMX,GAAWJ,GAC/Be,GAAc,IAAKX,IACnBW,GAAc,KAAMX,GAAWJ,GAE/B8B,GAAkB,CAAC,IAAK,KAAM,IAAK,MAAO,SACtCtN,EACA6Q,EACAtL,EACA4C,GAEA0I,EAAK1I,EAAMN,OAAO,EAAG,IAAM6C,EAAM1K,KA0HrC,SAASuR,GAAcC,EAAIC,GACvB,OAAOD,EAAGpL,MAAMqL,EAAG,GAAGC,OAAOF,EAAGpL,MAAM,EAAGqL,IArF7CvJ,EAAe,IAAK,EAAG,KAAM,OAE7BA,EAAe,KAAM,EAAG,EAAG,SAAUrG,GACjC,OAAOpC,KAAK+I,aAAamJ,YAAYlS,KAAMoC,KAG/CqG,EAAe,MAAO,EAAG,EAAG,SAAUrG,GAClC,OAAOpC,KAAK+I,aAAaoJ,cAAcnS,KAAMoC,KAGjDqG,EAAe,OAAQ,EAAG,EAAG,SAAUrG,GACnC,OAAOpC,KAAK+I,aAAaqJ,SAASpS,KAAMoC,KAG5CqG,EAAe,IAAK,EAAG,EAAG,WAC1BA,EAAe,IAAK,EAAG,EAAG,cAI1BqB,EAAa,MAAO,KACpBA,EAAa,UAAW,KACxBA,EAAa,aAAc,KAG3BY,EAAgB,MAAO,IACvBA,EAAgB,UAAW,IAC3BA,EAAgB,aAAc,IAI9BoC,GAAc,IAAKX,IACnBW,GAAc,IAAKX,IACnBW,GAAc,IAAKX,IACnBW,GAAc,KAAM,SAAUG,EAAU5K,GACpC,OAAOA,EAAOgQ,iBAAiBpF,KAEnCH,GAAc,MAAO,SAAUG,EAAU5K,GACrC,OAAOA,EAAOiQ,mBAAmBrF,KAErCH,GAAc,OAAQ,SAAUG,EAAU5K,GACtC,OAAOA,EAAOkQ,cAActF,KAGhCY,GAAkB,CAAC,KAAM,MAAO,QAAS,SAAUtN,EAAO6Q,EAAMtL,EAAQ4C,GACpE,IAAI2I,EAAUvL,EAAOF,QAAQ4M,cAAcjS,EAAOmI,EAAO5C,EAAOzB,SAEjD,MAAXgN,EACAD,EAAKqB,EAAIpB,EAET5O,EAAgBqD,GAAQ1B,eAAiB7D,IAIjDsN,GAAkB,CAAC,IAAK,IAAK,KAAM,SAAUtN,EAAO6Q,EAAMtL,EAAQ4C,GAC9D0I,EAAK1I,GAASuC,EAAM1K,KAkCxB,IAAImS,GAAwB,2DAA2DxD,MAC/E,KAEJyD,GAA6B,8BAA8BzD,MAAM,KACjE0D,GAA2B,uBAAuB1D,MAAM,KACxD2D,GAAuBhG,GACvBiG,GAA4BjG,GAC5BkG,GAA0BlG,GAiR9B,SAASmG,KACL,SAASpD,EAAU7O,EAAGC,GAClB,OAAOA,EAAEK,OAASN,EAAEM,OAYxB,IATA,IAKIgI,EACA4J,EACAC,EACAC,EARAC,EAAY,GACZvD,EAAc,GACdC,EAAa,GACbC,EAAc,GAMbhO,EAAI,EAAGA,EAAI,EAAGA,IAEfsH,EAAMlH,EAAU,CAAC,IAAM,IAAIkR,IAAItR,GAC/BkR,EAAO7F,GAAYpN,KAAKkS,YAAY7I,EAAK,KACzC6J,EAAS9F,GAAYpN,KAAKmS,cAAc9I,EAAK,KAC7C8J,EAAQ/F,GAAYpN,KAAKoS,SAAS/I,EAAK,KACvC+J,EAAUpR,KAAKiR,GACfpD,EAAY7N,KAAKkR,GACjBpD,EAAW9N,KAAKmR,GAChBpD,EAAY/N,KAAKiR,GACjBlD,EAAY/N,KAAKkR,GACjBnD,EAAY/N,KAAKmR,GAIrBC,EAAUpD,KAAKJ,GACfC,EAAYG,KAAKJ,GACjBE,EAAWE,KAAKJ,GAChBG,EAAYC,KAAKJ,GAEjB5P,KAAKsT,eAAiB,IAAInG,OAAO,KAAO4C,EAAYnJ,KAAK,KAAO,IAAK,KACrE5G,KAAKuT,oBAAsBvT,KAAKsT,eAChCtT,KAAKwT,kBAAoBxT,KAAKsT,eAE9BtT,KAAKyT,qBAAuB,IAAItG,OAC5B,KAAO2C,EAAWlJ,KAAK,KAAO,IAC9B,KAEJ5G,KAAK0T,0BAA4B,IAAIvG,OACjC,KAAO0C,EAAYjJ,KAAK,KAAO,IAC/B,KAEJ5G,KAAK2T,wBAA0B,IAAIxG,OAC/B,KAAOiG,EAAUxM,KAAK,KAAO,IAC7B,KAMR,SAASgN,KACL,OAAO5T,KAAK6T,QAAU,IAAM,GAqChC,SAASpQ,GAASiF,EAAOoL,GACrBrL,EAAeC,EAAO,EAAG,EAAG,WACxB,OAAO1I,KAAK+I,aAAatF,SACrBzD,KAAK6T,QACL7T,KAAK+T,UACLD,KAiBZ,SAASE,GAAc/G,EAAU5K,GAC7B,OAAOA,EAAO4R,eArDlBxL,EAAe,IAAK,CAAC,KAAM,GAAI,EAAG,QAClCA,EAAe,IAAK,CAAC,KAAM,GAAI,EAAGmL,IAClCnL,EAAe,IAAK,CAAC,KAAM,GAAI,EAN/B,WACI,OAAOzI,KAAK6T,SAAW,KAO3BpL,EAAe,MAAO,EAAG,EAAG,WACxB,MAAO,GAAKmL,GAAQxT,MAAMJ,MAAQ0H,EAAS1H,KAAK+T,UAAW,KAG/DtL,EAAe,QAAS,EAAG,EAAG,WAC1B,MACI,GACAmL,GAAQxT,MAAMJ,MACd0H,EAAS1H,KAAK+T,UAAW,GACzBrM,EAAS1H,KAAKkU,UAAW,KAIjCzL,EAAe,MAAO,EAAG,EAAG,WACxB,MAAO,GAAKzI,KAAK6T,QAAUnM,EAAS1H,KAAK+T,UAAW,KAGxDtL,EAAe,QAAS,EAAG,EAAG,WAC1B,MACI,GACAzI,KAAK6T,QACLnM,EAAS1H,KAAK+T,UAAW,GACzBrM,EAAS1H,KAAKkU,UAAW,KAcjCzQ,GAAS,KAAK,GACdA,GAAS,KAAK,GAIdqG,EAAa,OAAQ,KAGrBY,EAAgB,OAAQ,IAQxBoC,GAAc,IAAKkH,IACnBlH,GAAc,IAAKkH,IACnBlH,GAAc,IAAKX,IACnBW,GAAc,IAAKX,IACnBW,GAAc,IAAKX,IACnBW,GAAc,KAAMX,GAAWJ,GAC/Be,GAAc,KAAMX,GAAWJ,GAC/Be,GAAc,KAAMX,GAAWJ,GAE/Be,GAAc,MAAOV,IACrBU,GAAc,QAAST,IACvBS,GAAc,MAAOV,IACrBU,GAAc,QAAST,IAEvBuB,GAAc,CAAC,IAAK,MAAOO,IAC3BP,GAAc,CAAC,IAAK,MAAO,SAAUrN,EAAO2I,EAAOpD,GAC/C,IAAIqO,EAASlJ,EAAM1K,GACnB2I,EAAMiF,IAAmB,KAAXgG,EAAgB,EAAIA,IAEtCvG,GAAc,CAAC,IAAK,KAAM,SAAUrN,EAAO2I,EAAOpD,GAC9CA,EAAOsO,MAAQtO,EAAOF,QAAQyO,KAAK9T,GACnCuF,EAAOwO,UAAY/T,IAEvBqN,GAAc,CAAC,IAAK,MAAO,SAAUrN,EAAO2I,EAAOpD,GAC/CoD,EAAMiF,IAAQlD,EAAM1K,GACpBkC,EAAgBqD,GAAQvB,SAAU,IAEtCqJ,GAAc,MAAO,SAAUrN,EAAO2I,EAAOpD,GACzC,IAAIyO,EAAMhU,EAAMc,OAAS,EACzB6H,EAAMiF,IAAQlD,EAAM1K,EAAM6H,OAAO,EAAGmM,IACpCrL,EAAMkF,IAAUnD,EAAM1K,EAAM6H,OAAOmM,IACnC9R,EAAgBqD,GAAQvB,SAAU,IAEtCqJ,GAAc,QAAS,SAAUrN,EAAO2I,EAAOpD,GAC3C,IAAI0O,EAAOjU,EAAMc,OAAS,EACtBoT,EAAOlU,EAAMc,OAAS,EAC1B6H,EAAMiF,IAAQlD,EAAM1K,EAAM6H,OAAO,EAAGoM,IACpCtL,EAAMkF,IAAUnD,EAAM1K,EAAM6H,OAAOoM,EAAM,IACzCtL,EAAMmF,IAAUpD,EAAM1K,EAAM6H,OAAOqM,IACnChS,EAAgBqD,GAAQvB,SAAU,IAEtCqJ,GAAc,MAAO,SAAUrN,EAAO2I,EAAOpD,GACzC,IAAIyO,EAAMhU,EAAMc,OAAS,EACzB6H,EAAMiF,IAAQlD,EAAM1K,EAAM6H,OAAO,EAAGmM,IACpCrL,EAAMkF,IAAUnD,EAAM1K,EAAM6H,OAAOmM,MAEvC3G,GAAc,QAAS,SAAUrN,EAAO2I,EAAOpD,GAC3C,IAAI0O,EAAOjU,EAAMc,OAAS,EACtBoT,EAAOlU,EAAMc,OAAS,EAC1B6H,EAAMiF,IAAQlD,EAAM1K,EAAM6H,OAAO,EAAGoM,IACpCtL,EAAMkF,IAAUnD,EAAM1K,EAAM6H,OAAOoM,EAAM,IACzCtL,EAAMmF,IAAUpD,EAAM1K,EAAM6H,OAAOqM,MAWvC,IAKIC,GAAapJ,EAAW,SAAS,GAUrC,IAuBIqJ,GAvBAC,GAAa,CACbC,SA7iDkB,CAClBC,QAAS,gBACTC,QAAS,mBACTC,SAAU,eACVC,QAAS,oBACTC,SAAU,sBACVC,SAAU,KAwiDVzL,eAl7CwB,CACxB0L,IAAK,YACLC,GAAI,SACJC,EAAG,aACHC,GAAI,eACJC,IAAK,sBACLC,KAAM,6BA66CNjM,YAh5CqB,eAi5CrBZ,QA34CiB,KA44CjB8M,uBA34CgC,UA44ChCC,aAt4CsB,CACtBC,OAAQ,QACRC,KAAM,SACNnI,EAAG,gBACHoI,GAAI,aACJpT,EAAG,WACHqT,GAAI,aACJC,EAAG,UACHC,GAAI,WACJxD,EAAG,QACHyD,GAAI,UACJC,EAAG,SACHC,GAAI,WACJC,EAAG,UACHC,GAAI,YACJhG,EAAG,SACHiG,GAAI,YAw3CJ1H,OAAQI,GACRL,YAAaO,GAEbiC,KAzlBoB,CACpBL,IAAK,EACLC,IAAK,GAylBLoB,SAAUM,GACVR,YAAaU,GACbT,cAAeQ,GAEf6D,cAhC6B,iBAoC7BC,GAAU,GACVC,GAAiB,GAcrB,SAASC,GAAgBlQ,GACrB,OAAOA,EAAMA,EAAIyD,cAAcd,QAAQ,IAAK,KAAO3C,EAMvD,SAASmQ,GAAaC,GAOlB,IANA,IACIC,EACAC,EACA1U,EACA6M,EAJAnN,EAAI,EAMDA,EAAI8U,EAAMxV,QAAQ,CAKrB,IAHAyV,GADA5H,EAAQyH,GAAgBE,EAAM9U,IAAImN,MAAM,MAC9B7N,OAEV0V,GADAA,EAAOJ,GAAgBE,EAAM9U,EAAI,KACnBgV,EAAK7H,MAAM,KAAO,KACrB,EAAJ4H,GAAO,CAEV,GADAzU,EAAS2U,GAAW9H,EAAMvI,MAAM,EAAGmQ,GAAGlQ,KAAK,MAEvC,OAAOvE,EAEX,GACI0U,GACAA,EAAK1V,QAAUyV,GArC/B,SAAsBG,EAAMC,GAGxB,IAFA,IACIC,EAAOpP,KAAK0H,IAAIwH,EAAK5V,OAAQ6V,EAAK7V,QACjCU,EAAI,EAAGA,EAAIoV,EAAMpV,GAAK,EACvB,GAAIkV,EAAKlV,KAAOmV,EAAKnV,GACjB,OAAOA,EAGf,OAAOoV,EA8BKC,CAAalI,EAAO6H,IAASD,EAAI,EAGjC,MAEJA,IAEJ/U,IAEJ,OAAO4S,GAGX,SAASqC,GAAW9P,GAChB,IAAImQ,EAGJ,QACsB/S,IAAlBmS,GAAQvP,IACU,oBAAXtH,QACPA,QACAA,OAAOD,QAEP,IACI0X,EAAY1C,GAAa2C,MACRC,QACF,YAAcrQ,GAC7BsQ,GAAmBH,GACrB,MAAOI,GAGLhB,GAAQvP,GAAQ,KAGxB,OAAOuP,GAAQvP,GAMnB,SAASsQ,GAAmB/Q,EAAKiR,GAC7B,IAAIC,EAqBJ,OApBIlR,KAEIkR,EADApW,EAAYmW,GACLE,GAAUnR,GAEVoR,GAAapR,EAAKiR,IAKzB/C,GAAegD,EAEQ,oBAAZvR,SAA2BA,QAAQH,MAE1CG,QAAQH,KACJ,UAAYQ,EAAM,2CAM3BkO,GAAa2C,MAGxB,SAASO,GAAa3Q,EAAMpB,GACxB,GAAe,OAAXA,EAiDA,cADO2Q,GAAQvP,GACR,KAhDP,IAAI7E,EACAiF,EAAesN,GAEnB,GADA9O,EAAOgS,KAAO5Q,EACO,MAAjBuP,GAAQvP,GACRD,EACI,uBACA,2OAKJK,EAAemP,GAAQvP,GAAM6Q,aAC1B,GAA2B,MAAvBjS,EAAOkS,aACd,GAAoC,MAAhCvB,GAAQ3Q,EAAOkS,cACf1Q,EAAemP,GAAQ3Q,EAAOkS,cAAcD,YACzC,CAEH,GAAc,OADd1V,EAAS2U,GAAWlR,EAAOkS,eAWvB,OAPKtB,GAAe5Q,EAAOkS,gBACvBtB,GAAe5Q,EAAOkS,cAAgB,IAE1CtB,GAAe5Q,EAAOkS,cAAchW,KAAK,CACrCkF,KAAMA,EACNpB,OAAQA,IAEL,KATPwB,EAAejF,EAAO0V,QA0BlC,OAbAtB,GAAQvP,GAAQ,IAAIM,EAAOH,EAAaC,EAAcxB,IAElD4Q,GAAexP,IACfwP,GAAexP,GAAM+Q,QAAQ,SAAUxJ,GACnCoJ,GAAapJ,EAAEvH,KAAMuH,EAAE3I,UAO/B0R,GAAmBtQ,GAEZuP,GAAQvP,GAsDvB,SAAS0Q,GAAUnR,GACf,IAAIpE,EAMJ,GAJIoE,GAAOA,EAAIb,SAAWa,EAAIb,QAAQ0R,QAClC7Q,EAAMA,EAAIb,QAAQ0R,QAGjB7Q,EACD,OAAOkO,GAGX,IAAKrU,EAAQmG,GAAM,CAGf,GADApE,EAAS2U,GAAWvQ,GAEhB,OAAOpE,EAEXoE,EAAM,CAACA,GAGX,OAAOmQ,GAAanQ,GAOxB,SAASyR,GAAcxV,GACnB,IAAIK,EACAhC,EAAI2B,EAAEyV,GAuCV,OArCIpX,IAAsC,IAAjC0B,EAAgBC,GAAGK,WACxBA,EACIhC,EAAEkN,IAAS,GAAgB,GAAXlN,EAAEkN,IACZA,GACAlN,EAAEmN,IAAQ,GAAKnN,EAAEmN,IAAQtC,GAAY7K,EAAEiN,IAAOjN,EAAEkN,KAChDC,GACAnN,EAAEoN,IAAQ,GACA,GAAVpN,EAAEoN,KACW,KAAZpN,EAAEoN,MACgB,IAAdpN,EAAEqN,KACe,IAAdrN,EAAEsN,KACiB,IAAnBtN,EAAEuN,KACVH,GACApN,EAAEqN,IAAU,GAAiB,GAAZrN,EAAEqN,IACnBA,GACArN,EAAEsN,IAAU,GAAiB,GAAZtN,EAAEsN,IACnBA,GACAtN,EAAEuN,IAAe,GAAsB,IAAjBvN,EAAEuN,IACxBA,IACC,EAGP7L,EAAgBC,GAAG0V,qBAClBrV,EAAWiL,IAAmBE,GAAXnL,KAEpBA,EAAWmL,IAEXzL,EAAgBC,GAAG2V,iBAAgC,IAAdtV,IACrCA,EAAWwL,IAEX9L,EAAgBC,GAAG4V,mBAAkC,IAAdvV,IACvCA,EAAWyL,IAGf/L,EAAgBC,GAAGK,SAAWA,GAG3BL,EAKX,IAAI6V,GAAmB,iJACnBC,GAAgB,6IAChBC,GAAU,wBACVC,GAAW,CACP,CAAC,eAAgB,uBACjB,CAAC,aAAc,mBACf,CAAC,eAAgB,kBACjB,CAAC,aAAc,eAAe,GAC9B,CAAC,WAAY,eACb,CAAC,UAAW,cAAc,GAC1B,CAAC,aAAc,cACf,CAAC,WAAY,SACb,CAAC,aAAc,eACf,CAAC,YAAa,eAAe,GAC7B,CAAC,UAAW,SACZ,CAAC,SAAU,SAAS,GACpB,CAAC,OAAQ,SAAS,IAGtBC,GAAW,CACP,CAAC,gBAAiB,uBAClB,CAAC,gBAAiB,sBAClB,CAAC,WAAY,kBACb,CAAC,QAAS,aACV,CAAC,cAAe,qBAChB,CAAC,cAAe,oBAChB,CAAC,SAAU,gBACX,CAAC,OAAQ,YACT,CAAC,KAAM,SAEXC,GAAkB,qBAElBlV,GAAU,0LACVmV,GAAa,CACTC,GAAI,EACJC,IAAK,EACLC,KAAK,IACLC,KAAK,IACLC,KAAK,IACLC,KAAK,IACLC,KAAK,IACLC,KAAK,IACLC,KAAK,IACLC,KAAK,KAIb,SAASC,GAAc1T,GACnB,IAAI/D,EACA0X,EAGAC,EACAC,EACAC,EACAC,EALAC,EAAShU,EAAOR,GAChB6D,EAAQoP,GAAiBwB,KAAKD,IAAWtB,GAAcuB,KAAKD,GAMhE,GAAI3Q,EAAO,CAGP,IAFA1G,EAAgBqD,GAAQxC,KAAM,EAEzBvB,EAAI,EAAG0X,EAAIf,GAASrX,OAAQU,EAAI0X,EAAG1X,IACpC,GAAI2W,GAAS3W,GAAG,GAAGgY,KAAK5Q,EAAM,IAAK,CAC/BwQ,EAAajB,GAAS3W,GAAG,GACzB2X,GAA+B,IAAnBhB,GAAS3W,GAAG,GACxB,MAGR,GAAkB,MAAd4X,EAEA,YADA7T,EAAOjC,UAAW,GAGtB,GAAIsF,EAAM,GAAI,CACV,IAAKpH,EAAI,EAAG0X,EAAId,GAAStX,OAAQU,EAAI0X,EAAG1X,IACpC,GAAI4W,GAAS5W,GAAG,GAAGgY,KAAK5Q,EAAM,IAAK,CAE/ByQ,GAAczQ,EAAM,IAAM,KAAOwP,GAAS5W,GAAG,GAC7C,MAGR,GAAkB,MAAd6X,EAEA,YADA9T,EAAOjC,UAAW,GAI1B,IAAK6V,GAA2B,MAAdE,EAEd,YADA9T,EAAOjC,UAAW,GAGtB,GAAIsF,EAAM,GAAI,CACV,IAAIsP,GAAQsB,KAAK5Q,EAAM,IAInB,YADArD,EAAOjC,UAAW,GAFlBgW,EAAW,IAMnB/T,EAAOP,GAAKoU,GAAcC,GAAc,KAAOC,GAAY,IAC3DG,GAA0BlU,QAE1BA,EAAOjC,UAAW,EAI1B,SAASoW,GACLC,EACAC,EACAC,EACAC,EACAC,EACAC,GAEA,IAAIC,EAAS,CAejB,SAAwBN,GACpB,IAAIrP,EAAO2F,SAAS0J,EAAS,IAC7B,CAAA,GAAIrP,GAAQ,GACR,OAAO,IAAOA,EACX,GAAIA,GAAQ,IACf,OAAO,KAAOA,EAElB,OAAOA,EArBH4P,CAAeP,GACf/K,GAAyBpB,QAAQoM,GACjC3J,SAAS4J,EAAQ,IACjB5J,SAAS6J,EAAS,IAClB7J,SAAS8J,EAAW,KAOxB,OAJIC,GACAC,EAAOxY,KAAKwO,SAAS+J,EAAW,KAG7BC,EAuDX,SAASE,GAAkB5U,GACvB,IACI6U,EAnCcC,EAAYC,EAAa/U,EAkCvCqD,EAAQzF,GAAQqW,KAAuBjU,EAAOR,GAxC7C8D,QAAQ,oBAAqB,KAC7BA,QAAQ,WAAY,KACpBA,QAAQ,SAAU,IAClBA,QAAQ,SAAU,KAuCvB,GAAID,EAAO,CASP,GARAwR,EAAcV,GACV9Q,EAAM,GACNA,EAAM,GACNA,EAAM,GACNA,EAAM,GACNA,EAAM,GACNA,EAAM,IA3CIyR,EA6CIzR,EAAM,GA7CE0R,EA6CEF,EA7CW7U,EA6CEA,EA5CzC8U,GAEsBjI,GAA2B5E,QAAQ6M,KACrC,IAAIlZ,KAChBmZ,EAAY,GACZA,EAAY,GACZA,EAAY,IACdC,WAEFrY,EAAgBqD,GAAQnC,iBAAkB,QAC1CmC,EAAOjC,UAAW,IAmClB,OAGJiC,EAAOqS,GAAKwC,EACZ7U,EAAOL,KAhCf,SAAyBsV,EAAWC,EAAgBC,GAChD,GAAIF,EACA,OAAOlC,GAAWkC,GACf,GAAIC,EAEP,OAAO,EAEP,IAAIE,EAAK1K,SAASyK,EAAW,IACzBvY,EAAIwY,EAAK,IAEb,OAAW,KADFA,EAAKxY,GAAK,KACHA,EAsBFyY,CAAgBhS,EAAM,GAAIA,EAAM,GAAIA,EAAM,KAExDrD,EAAO5B,GAAKwM,GAActQ,MAAM,KAAM0F,EAAOqS,IAC7CrS,EAAO5B,GAAGkX,cAActV,EAAO5B,GAAGmX,gBAAkBvV,EAAOL,MAE3DhD,EAAgBqD,GAAQpC,SAAU,OAElCoC,EAAOjC,UAAW,EA6C1B,SAASyX,GAASva,EAAGC,EAAGua,GACpB,OAAS,MAALxa,EACOA,EAEF,MAALC,EACOA,EAEJua,EAoBX,SAASC,GAAgB1V,GACrB,IAAI/D,EACA4J,EAEA8P,EACAC,EACAC,EAvBkB7V,EAElB8V,EAkBArb,EAAQ,GAKZ,IAAIuF,EAAO5B,GAAX,CAgCA,IAzDsB4B,EA6BSA,EA3B3B8V,EAAW,IAAIla,KAAKvB,EAAM0b,OA2B9BJ,EA1BI3V,EAAOgW,QACA,CACHF,EAAShL,iBACTgL,EAASG,cACTH,EAASI,cAGV,CAACJ,EAASK,cAAeL,EAASM,WAAYN,EAASO,WAsB1DrW,EAAOgI,IAAyB,MAAnBhI,EAAOqS,GAAGjK,KAAqC,MAApBpI,EAAOqS,GAAGlK,KA0E1D,SAA+BnI,GAC3B,IAAIqQ,EAAGiG,EAAUhL,EAAMC,EAASN,EAAKC,EAAKqL,EAAMC,EAAiBC,EAGrD,OADZpG,EAAIrQ,EAAOgI,IACL0O,IAAqB,MAAPrG,EAAEsG,GAAoB,MAAPtG,EAAEuG,GACjC3L,EAAM,EACNC,EAAM,EAMNoL,EAAWd,GACPnF,EAAEqG,GACF1W,EAAOqS,GAAGnK,IACVyD,GAAWkL,KAAe,EAAG,GAAG9R,MAEpCuG,EAAOkK,GAASnF,EAAEsG,EAAG,KACrBpL,EAAUiK,GAASnF,EAAEuG,EAAG,IACV,GAAe,EAAVrL,KACfiL,GAAkB,KAGtBvL,EAAMjL,EAAOF,QAAQgX,MAAM7L,IAC3BC,EAAMlL,EAAOF,QAAQgX,MAAM5L,IAE3BuL,EAAU9K,GAAWkL,KAAe5L,EAAKC,GAEzCoL,EAAWd,GAASnF,EAAE0G,GAAI/W,EAAOqS,GAAGnK,IAAOuO,EAAQ1R,MAGnDuG,EAAOkK,GAASnF,EAAEA,EAAGoG,EAAQnL,MAElB,MAAP+E,EAAE1D,IAEFpB,EAAU8E,EAAE1D,GACE,GAAe,EAAVpB,KACfiL,GAAkB,GAER,MAAPnG,EAAEsB,GAETpG,EAAU8E,EAAEsB,EAAI1G,GACZoF,EAAEsB,EAAI,GAAW,EAANtB,EAAEsB,KACb6E,GAAkB,IAItBjL,EAAUN,GAGdK,EAAO,GAAKA,EAAOQ,GAAYwK,EAAUrL,EAAKC,GAC9CvO,EAAgBqD,GAAQuS,gBAAiB,EACf,MAAnBiE,EACP7Z,EAAgBqD,GAAQwS,kBAAmB,GAE3C+D,EAAOlL,GAAmBiL,EAAUhL,EAAMC,EAASN,EAAKC,GACxDlL,EAAOqS,GAAGnK,IAAQqO,EAAKxR,KACvB/E,EAAOgX,WAAaT,EAAK9K,WAlIzBwL,CAAsBjX,GAID,MAArBA,EAAOgX,aACPnB,EAAYL,GAASxV,EAAOqS,GAAGnK,IAAOyN,EAAYzN,MAG9ClI,EAAOgX,WAAazM,GAAWsL,IACT,IAAtB7V,EAAOgX,cAEPra,EAAgBqD,GAAQsS,oBAAqB,GAGjDzM,EAAO+E,GAAciL,EAAW,EAAG7V,EAAOgX,YAC1ChX,EAAOqS,GAAGlK,IAAStC,EAAKoQ,cACxBjW,EAAOqS,GAAGjK,IAAQvC,EAAKqQ,cAQtBja,EAAI,EAAGA,EAAI,GAAqB,MAAhB+D,EAAOqS,GAAGpW,KAAcA,EACzC+D,EAAOqS,GAAGpW,GAAKxB,EAAMwB,GAAK0Z,EAAY1Z,GAI1C,KAAOA,EAAI,EAAGA,IACV+D,EAAOqS,GAAGpW,GAAKxB,EAAMwB,GACD,MAAhB+D,EAAOqS,GAAGpW,GAAoB,IAANA,EAAU,EAAI,EAAK+D,EAAOqS,GAAGpW,GAKrC,KAApB+D,EAAOqS,GAAGhK,KACY,IAAtBrI,EAAOqS,GAAG/J,KACY,IAAtBtI,EAAOqS,GAAG9J,KACiB,IAA3BvI,EAAOqS,GAAG7J,MAEVxI,EAAOkX,UAAW,EAClBlX,EAAOqS,GAAGhK,IAAQ,GAGtBrI,EAAO5B,IAAM4B,EAAOgW,QAAUpL,GAp1ClC,SAAoBJ,EAAG5N,EAAG+P,EAAGuD,EAAGK,EAAG3I,EAAGuP,GAGlC,IAAItR,EAYJ,OAVI2E,EAAI,KAAY,GAALA,GAEX3E,EAAO,IAAIjK,KAAK4O,EAAI,IAAK5N,EAAG+P,EAAGuD,EAAGK,EAAG3I,EAAGuP,GACpC5R,SAASM,EAAKsQ,gBACdtQ,EAAKuR,YAAY5M,IAGrB3E,EAAO,IAAIjK,KAAK4O,EAAG5N,EAAG+P,EAAGuD,EAAGK,EAAG3I,EAAGuP,GAG/BtR,IAq0CmDvL,MACtD,KACAG,GAEJmb,EAAkB5V,EAAOgW,QACnBhW,EAAO5B,GAAGgN,YACVpL,EAAO5B,GAAG4W,SAIG,MAAfhV,EAAOL,MACPK,EAAO5B,GAAGkX,cAActV,EAAO5B,GAAGmX,gBAAkBvV,EAAOL,MAG3DK,EAAOkX,WACPlX,EAAOqS,GAAGhK,IAAQ,IAKlBrI,EAAOgI,SACgB,IAAhBhI,EAAOgI,GAAG2E,GACjB3M,EAAOgI,GAAG2E,IAAMiJ,IAEhBjZ,EAAgBqD,GAAQnC,iBAAkB,IAwElD,SAASqW,GAA0BlU,GAE/B,GAAIA,EAAOP,KAAOpF,EAAMgd,SAIxB,GAAIrX,EAAOP,KAAOpF,EAAMid,SAAxB,CAIAtX,EAAOqS,GAAK,GACZ1V,EAAgBqD,GAAQlD,OAAQ,EAgBhC,IAbA,IAEIiY,EAEAnS,EACA2U,EAGA7Z,EAl3DyBkF,EAAOnI,EAAOuF,EA02DvCgU,EAAS,GAAKhU,EAAOR,GAMrBgY,EAAexD,EAAOzY,OACtBkc,EAAyB,EAG7B5P,EACI1E,EAAanD,EAAOP,GAAIO,EAAOF,SAASuD,MAAMd,IAAqB,GAElEtG,EAAI,EAAGA,EAAI4L,EAAOtM,OAAQU,IAC3B2G,EAAQiF,EAAO5L,IACf8Y,GAAef,EAAO3Q,MAAM+D,GAAsBxE,EAAO5C,KACrD,IAAI,MAGiB,GADrBuX,EAAUvD,EAAO1R,OAAO,EAAG0R,EAAO/L,QAAQ8M,KAC9BxZ,QACRoB,EAAgBqD,GAAQhD,YAAYd,KAAKqb,GAE7CvD,EAASA,EAAOnT,MACZmT,EAAO/L,QAAQ8M,GAAeA,EAAYxZ,QAE9Ckc,GAA0B1C,EAAYxZ,QAGtCmH,EAAqBE,IACjBmS,EACApY,EAAgBqD,GAAQlD,OAAQ,EAEhCH,EAAgBqD,GAAQjD,aAAab,KAAK0G,GA14DzBA,EA44DGA,EA54DW5C,EA44DSA,EA34DvC,OADuBvF,EA44DGsa,IA34DlB/Z,EAAW6M,GAAQjF,IACpCiF,GAAOjF,GAAOnI,EAAOuF,EAAOqS,GAAIrS,EAAQ4C,IA24D7B5C,EAAOzB,UAAYwW,GAC1BpY,EAAgBqD,GAAQjD,aAAab,KAAK0G,GAKlDjG,EAAgBqD,GAAQ9C,cACpBsa,EAAeC,EACC,EAAhBzD,EAAOzY,QACPoB,EAAgBqD,GAAQhD,YAAYd,KAAK8X,GAKzChU,EAAOqS,GAAGhK,KAAS,KACiB,IAApC1L,EAAgBqD,GAAQvB,SACN,EAAlBuB,EAAOqS,GAAGhK,MAEV1L,EAAgBqD,GAAQvB,aAAUD,GAGtC7B,EAAgBqD,GAAQvC,gBAAkBuC,EAAOqS,GAAGxR,MAAM,GAC1DlE,EAAgBqD,GAAQrC,SAAWqC,EAAOwO,UAE1CxO,EAAOqS,GAAGhK,IAgBd,SAAyB9L,EAAQmb,EAAM/Z,GACnC,IAAIga,EAEJ,GAAgB,MAAZha,EAEA,OAAO+Z,EAEX,OAA2B,MAAvBnb,EAAOqb,aACArb,EAAOqb,aAAaF,EAAM/Z,IACX,MAAfpB,EAAOgS,QAEdoJ,EAAOpb,EAAOgS,KAAK5Q,KACP+Z,EAAO,KACfA,GAAQ,IAEPC,GAAiB,KAATD,IACTA,EAAO,IAEJA,GAlCOG,CACd7X,EAAOF,QACPE,EAAOqS,GAAGhK,IACVrI,EAAOwO,WAKC,QADZ9Q,EAAMf,EAAgBqD,GAAQtC,OAE1BsC,EAAOqS,GAAGnK,IAAQlI,EAAOF,QAAQgY,gBAAgBpa,EAAKsC,EAAOqS,GAAGnK,MAGpEwN,GAAgB1V,GAChBoS,GAAcpS,QA/EV4U,GAAkB5U,QAJlB0T,GAAc1T,GAwMtB,SAAS+X,GAAc/X,GACnB,IAgCqBA,EACjBvF,EAjCAA,EAAQuF,EAAOR,GACflD,EAAS0D,EAAOP,GAIpB,OAFAO,EAAOF,QAAUE,EAAOF,SAAWgS,GAAU9R,EAAON,IAEtC,OAAVjF,QAA8B+D,IAAXlC,GAAkC,KAAV7B,EACpCkE,EAAc,CAAExB,WAAW,KAGjB,iBAAV1C,IACPuF,EAAOR,GAAK/E,EAAQuF,EAAOF,QAAQkY,SAASvd,IAG5CyF,EAASzF,GACF,IAAIsF,EAAOqS,GAAc3X,KACzBkB,EAAOlB,GACduF,EAAO5B,GAAK3D,EACLD,EAAQ8B,GA1GvB,SAAkC0D,GAC9B,IAAIiY,EACAC,EACAC,EACAlc,EACAmc,EACAC,EACAC,GAAoB,EAExB,GAAyB,IAArBtY,EAAOP,GAAGlE,OAGV,OAFAoB,EAAgBqD,GAAQ1C,eAAgB,EACxC0C,EAAO5B,GAAK,IAAIxC,KAAKgD,KAIzB,IAAK3C,EAAI,EAAGA,EAAI+D,EAAOP,GAAGlE,OAAQU,IAC9Bmc,EAAe,EACfC,GAAmB,EACnBJ,EAAa/Y,EAAW,GAAIc,GACN,MAAlBA,EAAOgW,UACPiC,EAAWjC,QAAUhW,EAAOgW,SAEhCiC,EAAWxY,GAAKO,EAAOP,GAAGxD,GAC1BiY,GAA0B+D,GAEtBna,EAAQma,KACRI,GAAmB,GAIvBD,GAAgBzb,EAAgBsb,GAAY/a,cAG5Ckb,GAAkE,GAAlDzb,EAAgBsb,GAAYlb,aAAaxB,OAEzDoB,EAAgBsb,GAAYM,MAAQH,EAE/BE,EAaGF,EAAeD,IACfA,EAAcC,EACdF,EAAaD,IAbE,MAAfE,GACAC,EAAeD,GACfE,KAEAF,EAAcC,EACdF,EAAaD,EACTI,IACAC,GAAoB,IAWpCnc,EAAO6D,EAAQkY,GAAcD,GAkDzBO,CAAyBxY,GAClB1D,EACP4X,GAA0BlU,GAc1BvE,EADAhB,GADiBuF,EAVDA,GAWDR,IAEfQ,EAAO5B,GAAK,IAAIxC,KAAKvB,EAAM0b,OACpBpa,EAAOlB,GACduF,EAAO5B,GAAK,IAAIxC,KAAKnB,EAAM2B,WACH,iBAAV3B,EAldtB,SAA0BuF,GACtB,IAAIuH,EAAUuL,GAAgBmB,KAAKjU,EAAOR,IAC1B,OAAZ+H,GAKJmM,GAAc1T,IACU,IAApBA,EAAOjC,kBACAiC,EAAOjC,SAKlB6W,GAAkB5U,IACM,IAApBA,EAAOjC,kBACAiC,EAAOjC,SAKdiC,EAAOzB,QACPyB,EAAOjC,UAAW,EAGlB1D,EAAMoe,wBAAwBzY,MAtB9BA,EAAO5B,GAAK,IAAIxC,MAAM2L,EAAQ,IAgd9BmR,CAAiB1Y,GACVxF,EAAQC,IACfuF,EAAOqS,GAAKxW,EAAIpB,EAAMoG,MAAM,GAAI,SAAUxF,GACtC,OAAOqP,SAASrP,EAAK,MAEzBqa,GAAgB1V,IACTjF,EAASN,GA1ExB,SAA0BuF,GACtB,IAII/D,EACA0c,EALA3Y,EAAO5B,KAKPua,OAAsBna,KADtBvC,EAAIsI,EAAqBvE,EAAOR,KAClB+N,IAAoBtR,EAAE4J,KAAO5J,EAAEsR,IACjDvN,EAAOqS,GAAKxW,EACR,CAACI,EAAE8I,KAAM9I,EAAE2J,MAAO+S,EAAW1c,EAAEyb,KAAMzb,EAAE2c,OAAQ3c,EAAE4c,OAAQ5c,EAAE6c,aAC3D,SAAUzd,GACN,OAAOA,GAAOqP,SAASrP,EAAK,MAIpCqa,GAAgB1V,IA6DZ+Y,CAAiB/Y,GACVtE,EAASjB,GAEhBuF,EAAO5B,GAAK,IAAIxC,KAAKnB,GAErBJ,EAAMoe,wBAAwBzY,GA1B7BlC,EAAQkC,KACTA,EAAO5B,GAAK,MAGT4B,IA0BX,SAASvD,GAAiBhC,EAAO6B,EAAQC,EAAQC,EAAQwc,GACrD,IAnEIhd,EAmEAyZ,EAAI,GA2BR,OAzBe,IAAXnZ,IAA8B,IAAXA,IACnBE,EAASF,EACTA,OAASkC,IAGE,IAAXjC,IAA8B,IAAXA,IACnBC,EAASD,EACTA,OAASiC,IAIRzD,EAASN,IAAUW,EAAcX,IACjCD,EAAQC,IAA2B,IAAjBA,EAAMc,UAEzBd,OAAQ+D,GAIZiX,EAAElW,kBAAmB,EACrBkW,EAAEO,QAAUP,EAAE7V,OAASoZ,EACvBvD,EAAE/V,GAAKnD,EACPkZ,EAAEjW,GAAK/E,EACPgb,EAAEhW,GAAKnD,EACPmZ,EAAElX,QAAU/B,GA5FRR,EAAM,IAAI+D,EAAOqS,GAAc2F,GA8FXtC,MA7FhByB,WAEJlb,EAAIid,IAAI,EAAG,KACXjd,EAAIkb,cAAW1Y,GAGZxC,EA0FX,SAAS6a,GAAYpc,EAAO6B,EAAQC,EAAQC,GACxC,OAAOC,GAAiBhC,EAAO6B,EAAQC,EAAQC,GAAQ,GAte3DnC,EAAMoe,wBAA0BlY,EAC5B,iVAIA,SAAUP,GACNA,EAAO5B,GAAK,IAAIxC,KAAKoE,EAAOR,IAAMQ,EAAOgW,QAAU,OAAS,OAuLpE3b,EAAMgd,SAAW,aAGjBhd,EAAMid,SAAW,aAySjB,IAAI4B,GAAe3Y,EACX,qGACA,WACI,IAAI4Y,EAAQtC,GAAYvc,MAAM,KAAMC,WACpC,OAAIL,KAAK4D,WAAaqb,EAAMrb,UACjBqb,EAAQjf,KAAOA,KAAOif,EAEtBxa,MAInBya,GAAe7Y,EACX,qGACA,WACI,IAAI4Y,EAAQtC,GAAYvc,MAAM,KAAMC,WACpC,OAAIL,KAAK4D,WAAaqb,EAAMrb,UACT5D,KAARif,EAAejf,KAAOif,EAEtBxa,MAUvB,SAAS0a,GAAOtd,EAAIud,GAChB,IAAItd,EAAKC,EAIT,GAHuB,IAAnBqd,EAAQ/d,QAAgBf,EAAQ8e,EAAQ,MACxCA,EAAUA,EAAQ,KAEjBA,EAAQ/d,OACT,OAAOsb,KAGX,IADA7a,EAAMsd,EAAQ,GACTrd,EAAI,EAAGA,EAAIqd,EAAQ/d,SAAUU,EACzBqd,EAAQrd,GAAG6B,YAAawb,EAAQrd,GAAGF,GAAIC,KACxCA,EAAMsd,EAAQrd,IAGtB,OAAOD,EAgBX,IAIIud,GAAW,CACX,OACA,UACA,QACA,OACA,MACA,OACA,SACA,SACA,eAyCJ,SAASC,GAASC,GACd,IAAI/U,EAAkBH,EAAqBkV,GACvCC,EAAQhV,EAAgBK,MAAQ,EAChC4U,EAAWjV,EAAgBkV,SAAW,EACtC7Q,EAASrE,EAAgBkB,OAAS,EAClCiU,EAAQnV,EAAgB4G,MAAQ5G,EAAgBoV,SAAW,EAC3DC,EAAOrV,EAAgB6I,KAAO,EAC9BQ,EAAQrJ,EAAgBgT,MAAQ,EAChCzJ,EAAUvJ,EAAgBkU,QAAU,EACpCxK,EAAU1J,EAAgBmU,QAAU,EACpCmB,EAAetV,EAAgBoU,aAAe,EAElD5e,KAAK6D,SAlDT,SAAyBnB,GACrB,IAAI+D,EAEA1E,EADAge,GAAiB,EAErB,IAAKtZ,KAAO/D,EACR,GACI5B,EAAW4B,EAAG+D,MAEuB,IAAjCsH,GAAQnN,KAAKye,GAAU5Y,IACZ,MAAV/D,EAAE+D,IAAiBxC,MAAMvB,EAAE+D,KAGhC,OAAO,EAIf,IAAK1E,EAAI,EAAGA,EAAIsd,GAAShe,SAAUU,EAC/B,GAAIW,EAAE2c,GAAStd,IAAK,CAChB,GAAIge,EACA,OAAO,EAEPC,WAAWtd,EAAE2c,GAAStd,OAASkJ,EAAMvI,EAAE2c,GAAStd,OAChDge,GAAiB,GAK7B,OAAO,EAuBSE,CAAgBzV,GAGhCxK,KAAKkgB,eACAJ,EACS,IAAV5L,EACU,IAAVH,EACQ,IAARF,EAAe,GAAK,GAGxB7T,KAAKmgB,OAASN,EAAe,EAARF,EAIrB3f,KAAKogB,SAAWvR,EAAoB,EAAX4Q,EAAuB,GAARD,EAExCxf,KAAKqgB,MAAQ,GAEbrgB,KAAK4F,QAAUgS,KAEf5X,KAAKsgB,UAGT,SAASC,GAAWpf,GAChB,OAAOA,aAAeme,GAG1B,SAASkB,GAAS7Y,GACd,OAAIA,EAAS,GACyB,EAA3BI,KAAK0Y,OAAO,EAAI9Y,GAEhBI,KAAK0Y,MAAM9Y,GAuB1B,SAAS+Y,GAAOhY,EAAOiY,GACnBlY,EAAeC,EAAO,EAAG,EAAG,WACxB,IAAIgY,EAAS1gB,KAAK4gB,YACdC,EAAO,IAKX,OAJIH,EAAS,IACTA,GAAUA,EACVG,EAAO,KAGPA,EACAnZ,KAAYgZ,EAAS,IAAK,GAC1BC,EACAjZ,IAAWgZ,EAAS,GAAI,KAKpCA,GAAO,IAAK,KACZA,GAAO,KAAM,IAIb5T,GAAc,IAAKF,IACnBE,GAAc,KAAMF,IACpBgB,GAAc,CAAC,IAAK,MAAO,SAAUrN,EAAO2I,EAAOpD,GAC/CA,EAAOgW,SAAU,EACjBhW,EAAOL,KAAOqb,GAAiBlU,GAAkBrM,KAQrD,IAAIwgB,GAAc,kBAElB,SAASD,GAAiBE,EAASlH,GAC/B,IAEImH,EACAlN,EAHAmN,GAAWpH,GAAU,IAAI3Q,MAAM6X,GAKnC,OAAgB,OAAZE,EACO,KAOQ,KAFnBnN,EAAuB,IADvBkN,IADQC,EAAQA,EAAQ7f,OAAS,IAAM,IACtB,IAAI8H,MAAM4X,KAAgB,CAAC,IAAK,EAAG,IAClC,GAAW9V,EAAMgW,EAAM,KAElB,EAAiB,MAAbA,EAAM,GAAalN,GAAWA,EAI7D,SAASoN,GAAgB5gB,EAAO6gB,GAC5B,IAAItf,EAAKuf,EACT,OAAID,EAAM1b,QACN5D,EAAMsf,EAAME,QACZD,GACKrb,EAASzF,IAAUkB,EAAOlB,GACrBA,EAAM2B,UACNya,GAAYpc,GAAO2B,WAAaJ,EAAII,UAE9CJ,EAAIoC,GAAGqd,QAAQzf,EAAIoC,GAAGhC,UAAYmf,GAClClhB,EAAM4F,aAAajE,GAAK,GACjBA,GAEA6a,GAAYpc,GAAOihB,QAIlC,SAASC,GAAc/e,GAGnB,OAAQqF,KAAK0Y,MAAM/d,EAAEwB,GAAGwd,qBA0J5B,SAASC,KACL,QAAO3hB,KAAK4D,YAAY5D,KAAK0F,QAA2B,IAAjB1F,KAAK2F,SApJhDxF,EAAM4F,aAAe,aAwJrB,IAAI6b,GAAc,wDAIdC,GAAW,sKAEf,SAASC,GAAevhB,EAAOkG,GAC3B,IAGIoa,EACAkB,EACAC,EALAzC,EAAWhf,EAEX4I,EAAQ,KAkEZ,OA7DIoX,GAAWhgB,GACXgf,EAAW,CACPtC,GAAI1c,EAAM2f,cACVzN,EAAGlS,EAAM4f,MACT9J,EAAG9V,EAAM6f,SAEN5e,EAASjB,KAAW0D,OAAO1D,IAClCgf,EAAW,GACP9Y,EACA8Y,EAAS9Y,IAAQlG,EAEjBgf,EAASO,cAAgBvf,IAErB4I,EAAQyY,GAAY7H,KAAKxZ,KACjCsgB,EAAoB,MAAb1X,EAAM,IAAc,EAAI,EAC/BoW,EAAW,CACPjP,EAAG,EACHmC,EAAGxH,EAAM9B,EAAM+E,KAAS2S,EACxB7K,EAAG/K,EAAM9B,EAAMgF,KAAS0S,EACxBne,EAAGuI,EAAM9B,EAAMiF,KAAWyS,EAC1BnT,EAAGzC,EAAM9B,EAAMkF,KAAWwS,EAC1B5D,GAAIhS,EAAMuV,GAA8B,IAArBrX,EAAMmF,MAAwBuS,KAE7C1X,EAAQ0Y,GAAS9H,KAAKxZ,KAC9BsgB,EAAoB,MAAb1X,EAAM,IAAc,EAAI,EAC/BoW,EAAW,CACPjP,EAAG2R,GAAS9Y,EAAM,GAAI0X,GACtBxK,EAAG4L,GAAS9Y,EAAM,GAAI0X,GACtB1K,EAAG8L,GAAS9Y,EAAM,GAAI0X,GACtBpO,EAAGwP,GAAS9Y,EAAM,GAAI0X,GACtB7K,EAAGiM,GAAS9Y,EAAM,GAAI0X,GACtBne,EAAGuf,GAAS9Y,EAAM,GAAI0X,GACtBnT,EAAGuU,GAAS9Y,EAAM,GAAI0X,KAEP,MAAZtB,EAEPA,EAAW,GAES,iBAAbA,IACN,SAAUA,GAAY,OAAQA,KAE/ByC,EAiDR,SAA2BE,EAAMjD,GAC7B,IAAInd,EACJ,IAAMogB,EAAKte,YAAaqb,EAAMrb,UAC1B,MAAO,CAAEkc,aAAc,EAAGjR,OAAQ,GAGtCoQ,EAAQkC,GAAgBlC,EAAOiD,GAC3BA,EAAKC,SAASlD,GACdnd,EAAMsgB,GAA0BF,EAAMjD,KAEtCnd,EAAMsgB,GAA0BnD,EAAOiD,IACnCpC,cAAgBhe,EAAIge,aACxBhe,EAAI+M,QAAU/M,EAAI+M,QAGtB,OAAO/M,EAhEOugB,CACN1F,GAAY4C,EAASra,MACrByX,GAAY4C,EAASta,MAGzBsa,EAAW,IACFtC,GAAK+E,EAAQlC,aACtBP,EAASlJ,EAAI2L,EAAQnT,QAGzBkT,EAAM,IAAIzC,GAASC,GAEfgB,GAAWhgB,IAAUO,EAAWP,EAAO,aACvCwhB,EAAInc,QAAUrF,EAAMqF,SAGpB2a,GAAWhgB,IAAUO,EAAWP,EAAO,cACvCwhB,EAAIle,SAAWtD,EAAMsD,UAGlBke,EAMX,SAASE,GAASK,EAAKzB,GAInB,IAAI/e,EAAMwgB,GAAOtC,WAAWsC,EAAIlZ,QAAQ,IAAK,MAE7C,OAAQnF,MAAMnC,GAAO,EAAIA,GAAO+e,EAGpC,SAASuB,GAA0BF,EAAMjD,GACrC,IAAInd,EAAM,GAUV,OARAA,EAAI+M,OACAoQ,EAAMvT,QAAUwW,EAAKxW,QAAyC,IAA9BuT,EAAMpU,OAASqX,EAAKrX,QACpDqX,EAAKZ,QAAQvC,IAAIjd,EAAI+M,OAAQ,KAAK0T,QAAQtD,MACxCnd,EAAI+M,OAGV/M,EAAIge,aAAgBb,EAASiD,EAAKZ,QAAQvC,IAAIjd,EAAI+M,OAAQ,KAEnD/M,EAsBX,SAAS0gB,GAAYC,EAAWvb,GAC5B,OAAO,SAAU9B,EAAKsd,GAClB,IAASC,EAmBT,OAjBe,OAAXD,GAAoBze,OAAOye,KAC3Bzb,EACIC,EACA,YACIA,EACA,uDACAA,EACA,kGAGRyb,EAAMvd,EACNA,EAAMsd,EACNA,EAASC,GAIbC,GAAY5iB,KADN8hB,GAAe1c,EAAKsd,GACHD,GAChBziB,MAIf,SAAS4iB,GAAYvZ,EAAKkW,EAAUsD,EAAU9c,GAC1C,IAAI+Z,EAAeP,EAASW,cACxBL,EAAOW,GAASjB,EAASY,OACzBtR,EAAS2R,GAASjB,EAASa,SAE1B/W,EAAIzF,YAKTmC,EAA+B,MAAhBA,GAA8BA,EAEzC8I,GACAU,GAASlG,EAAKoC,EAAIpC,EAAK,SAAWwF,EAASgU,GAE3ChD,GACArU,EAAMnC,EAAK,OAAQoC,EAAIpC,EAAK,QAAUwW,EAAOgD,GAE7C/C,GACAzW,EAAInF,GAAGqd,QAAQlY,EAAInF,GAAGhC,UAAY4d,EAAe+C,GAEjD9c,GACA5F,EAAM4F,aAAasD,EAAKwW,GAAQhR,IA5FxCiT,GAAejgB,GAAKyd,GAAS5e,UAC7BohB,GAAegB,QA9Xf,WACI,OAAOhB,GAAepd,MA4d1B,IAAIqa,GAAMyD,GAAY,EAAG,OACrBO,GAAWP,IAAa,EAAG,YAE/B,SAASQ,GAASziB,GACd,MAAwB,iBAAVA,GAAsBA,aAAiB0iB,OAIzD,SAASC,GAAc3iB,GACnB,OACIyF,EAASzF,IACTkB,EAAOlB,IACPyiB,GAASziB,IACTiB,EAASjB,IAgDjB,SAA+BA,GAC3B,IAAI4iB,EAAY7iB,EAAQC,GACpB6iB,GAAe,EACfD,IACAC,EAGkB,IAFd7iB,EAAM8iB,OAAO,SAAUC,GACnB,OAAQ9hB,EAAS8hB,IAASN,GAASziB,KACpCc,QAEX,OAAO8hB,GAAaC,EAxDhBG,CAAsBhjB,IAO9B,SAA6BA,GACzB,IA4BIwB,EACAyhB,EA7BAC,EAAa5iB,EAASN,KAAWW,EAAcX,GAC/CmjB,GAAe,EACfC,EAAa,CACT,QACA,OACA,IACA,SACA,QACA,IACA,OACA,MACA,IACA,QACA,OACA,IACA,QACA,OACA,IACA,UACA,SACA,IACA,UACA,SACA,IACA,eACA,cACA,MAKR,IAAK5hB,EAAI,EAAGA,EAAI4hB,EAAWtiB,OAAQU,GAAK,EACpCyhB,EAAWG,EAAW5hB,GACtB2hB,EAAeA,GAAgB5iB,EAAWP,EAAOijB,GAGrD,OAAOC,GAAcC,EA3CjBE,CAAoBrjB,IANjB,MAOHA,EAqPR,SAASsjB,GAAU9iB,EAAGC,GAClB,GAAID,EAAE4K,OAAS3K,EAAE2K,OAGb,OAAQkY,GAAU7iB,EAAGD,GAGzB,IAAI+iB,EAAyC,IAAvB9iB,EAAE6J,OAAS9J,EAAE8J,SAAgB7J,EAAE0K,QAAU3K,EAAE2K,SAE7DqY,EAAShjB,EAAEugB,QAAQvC,IAAI+E,EAAgB,UAOvCE,EAHAhjB,EAAI+iB,EAAS,GAGH/iB,EAAI+iB,IAAWA,EAFfhjB,EAAEugB,QAAQvC,IAAI+E,EAAiB,EAAG,YAMlC9iB,EAAI+iB,IAFJhjB,EAAEugB,QAAQvC,IAAqB,EAAjB+E,EAAoB,UAETC,GAIvC,QAASD,EAAiBE,IAAW,EAmHzC,SAAS3hB,GAAOoE,GACZ,IAAIwd,EAEJ,YAAY3f,IAARmC,EACOzG,KAAK4F,QAAQ0R,OAGC,OADrB2M,EAAgBrM,GAAUnR,MAEtBzG,KAAK4F,QAAUqe,GAEZjkB,MA1HfG,EAAM+jB,cAAgB,uBACtB/jB,EAAMgkB,iBAAmB,yBA6HzB,IAAIC,GAAO/d,EACP,kJACA,SAAUI,GACN,YAAYnC,IAARmC,EACOzG,KAAK+I,aAEL/I,KAAKqC,OAAOoE,KAK/B,SAASsC,KACL,OAAO/I,KAAK4F,QAGhB,IAGIye,GAAmB,YAGvB,SAASC,GAAMC,EAAUC,GACrB,OAASD,EAAWC,EAAWA,GAAWA,EAG9C,SAASC,GAAiBnU,EAAG5N,EAAG+P,GAE5B,OAAInC,EAAI,KAAY,GAALA,EAEJ,IAAI5O,KAAK4O,EAAI,IAAK5N,EAAG+P,GAAK4R,GAE1B,IAAI3iB,KAAK4O,EAAG5N,EAAG+P,GAAGvQ,UAIjC,SAASwiB,GAAepU,EAAG5N,EAAG+P,GAE1B,OAAInC,EAAI,KAAY,GAALA,EAEJ5O,KAAKiP,IAAIL,EAAI,IAAK5N,EAAG+P,GAAK4R,GAE1B3iB,KAAKiP,IAAIL,EAAG5N,EAAG+P,GAsb9B,SAASkS,GAAa1X,EAAU5K,GAC5B,OAAOA,EAAOuiB,cAAc3X,GAehC,SAAS4X,KASL,IARA,IAAIC,EAAa,GACbC,EAAa,GACbC,EAAe,GACfjV,EAAc,GAGdkV,EAAOjlB,KAAKilB,OAEXljB,EAAI,EAAG0X,EAAIwL,EAAK5jB,OAAQU,EAAI0X,IAAK1X,EAClCgjB,EAAW/iB,KAAKoL,GAAY6X,EAAKljB,GAAGmF,OACpC4d,EAAW9iB,KAAKoL,GAAY6X,EAAKljB,GAAG+V,OACpCkN,EAAahjB,KAAKoL,GAAY6X,EAAKljB,GAAGmjB,SAEtCnV,EAAY/N,KAAKoL,GAAY6X,EAAKljB,GAAGmF,OACrC6I,EAAY/N,KAAKoL,GAAY6X,EAAKljB,GAAG+V,OACrC/H,EAAY/N,KAAKoL,GAAY6X,EAAKljB,GAAGmjB,SAGzCllB,KAAKmlB,WAAa,IAAIhY,OAAO,KAAO4C,EAAYnJ,KAAK,KAAO,IAAK,KACjE5G,KAAKolB,eAAiB,IAAIjY,OAAO,KAAO4X,EAAWne,KAAK,KAAO,IAAK,KACpE5G,KAAKqlB,eAAiB,IAAIlY,OAAO,KAAO2X,EAAWle,KAAK,KAAO,IAAK,KACpE5G,KAAKslB,iBAAmB,IAAInY,OACxB,KAAO6X,EAAape,KAAK,KAAO,IAChC,KAcR,SAAS2e,GAAuB7c,EAAO8c,GACnC/c,EAAe,EAAG,CAACC,EAAOA,EAAMrH,QAAS,EAAGmkB,GAoFhD,SAASC,GAAqBllB,EAAO6Q,EAAMC,EAASN,EAAKC,GACrD,IAAI0U,EACJ,OAAa,MAATnlB,EACOkR,GAAWzR,KAAM+Q,EAAKC,GAAKnG,OAElC6a,EAAc9T,GAAYrR,EAAOwQ,EAAKC,IAClCI,IACAA,EAAOsU,GAMnB,SAAoBtJ,EAAUhL,EAAMC,EAASN,EAAKC,GAC9C,IAAI2U,EAAgBxU,GAAmBiL,EAAUhL,EAAMC,EAASN,EAAKC,GACjErF,EAAO+E,GAAciV,EAAc9a,KAAM,EAAG8a,EAAcpU,WAK9D,OAHAvR,KAAK6K,KAAKc,EAAKiF,kBACf5Q,KAAK0L,MAAMC,EAAKoQ,eAChB/b,KAAK2L,KAAKA,EAAKqQ,cACRhc,MAXeY,KAAKZ,KAAMO,EAAO6Q,EAAMC,EAASN,EAAKC,IAjYhEvI,EAAe,IAAK,EAAG,EAAG,WAC1BA,EAAe,KAAM,EAAG,EAAG,WAC3BA,EAAe,MAAO,EAAG,EAAG,WAC5BA,EAAe,OAAQ,EAAG,EAAG,WAC7BA,EAAe,QAAS,EAAG,EAAG,aAE9BA,EAAe,IAAK,CAAC,IAAK,GAAI,KAAM,WACpCA,EAAe,IAAK,CAAC,KAAM,GAAI,EAAG,WAClCA,EAAe,IAAK,CAAC,MAAO,GAAI,EAAG,WACnCA,EAAe,IAAK,CAAC,OAAQ,GAAI,EAAG,WAEpCqE,GAAc,IAAK6X,IACnB7X,GAAc,KAAM6X,IACpB7X,GAAc,MAAO6X,IACrB7X,GAAc,OAmOd,SAAsBG,EAAU5K,GAC5B,OAAOA,EAAOujB,cAAc3Y,KAnOhCH,GAAc,QAsOd,SAAwBG,EAAU5K,GAC9B,OAAOA,EAAOwjB,gBAAgB5Y,KArOlCW,GAAc,CAAC,IAAK,KAAM,MAAO,OAAQ,SAAU,SAC/CrN,EACA2I,EACApD,EACA4C,GAEA,IAAIlF,EAAMsC,EAAOF,QAAQkgB,UAAUvlB,EAAOmI,EAAO5C,EAAOzB,SACpDb,EACAf,EAAgBqD,GAAQtC,IAAMA,EAE9Bf,EAAgBqD,GAAQ5C,WAAa3C,IAI7CuM,GAAc,IAAKL,IACnBK,GAAc,KAAML,IACpBK,GAAc,MAAOL,IACrBK,GAAc,OAAQL,IACtBK,GAAc,KAsNd,SAA6BG,EAAU5K,GACnC,OAAOA,EAAO0jB,sBAAwBtZ,KArN1CmB,GAAc,CAAC,IAAK,KAAM,MAAO,QAASI,IAC1CJ,GAAc,CAAC,MAAO,SAAUrN,EAAO2I,EAAOpD,EAAQ4C,GAClD,IAAIS,EACArD,EAAOF,QAAQmgB,uBACf5c,EAAQ5I,EAAM4I,MAAMrD,EAAOF,QAAQmgB,uBAGnCjgB,EAAOF,QAAQogB,oBACf9c,EAAM8E,IAAQlI,EAAOF,QAAQogB,oBAAoBzlB,EAAO4I,GAExDD,EAAM8E,IAAQwC,SAASjQ,EAAO,MA4OtCkI,EAAe,EAAG,CAAC,KAAM,GAAI,EAAG,WAC5B,OAAOzI,KAAKoc,WAAa,MAG7B3T,EAAe,EAAG,CAAC,KAAM,GAAI,EAAG,WAC5B,OAAOzI,KAAKimB,cAAgB,MAOhCV,GAAuB,OAAQ,YAC/BA,GAAuB,QAAS,YAChCA,GAAuB,OAAQ,eAC/BA,GAAuB,QAAS,eAIhCzb,EAAa,WAAY,MACzBA,EAAa,cAAe,MAI5BY,EAAgB,WAAY,GAC5BA,EAAgB,cAAe,GAI/BoC,GAAc,IAAKJ,IACnBI,GAAc,IAAKJ,IACnBI,GAAc,KAAMX,GAAWJ,GAC/Be,GAAc,KAAMX,GAAWJ,GAC/Be,GAAc,OAAQP,GAAWN,GACjCa,GAAc,OAAQP,GAAWN,GACjCa,GAAc,QAASN,GAAWN,IAClCY,GAAc,QAASN,GAAWN,IAElC2B,GAAkB,CAAC,OAAQ,QAAS,OAAQ,SAAU,SAClDtN,EACA6Q,EACAtL,EACA4C,GAEA0I,EAAK1I,EAAMN,OAAO,EAAG,IAAM6C,EAAM1K,KAGrCsN,GAAkB,CAAC,KAAM,MAAO,SAAUtN,EAAO6Q,EAAMtL,EAAQ4C,GAC3D0I,EAAK1I,GAASvI,EAAMoQ,kBAAkBhQ,KAsE1CkI,EAAe,IAAK,EAAG,KAAM,WAI7BqB,EAAa,UAAW,KAIxBY,EAAgB,UAAW,GAI3BoC,GAAc,IAAKhB,GACnB8B,GAAc,IAAK,SAAUrN,EAAO2I,GAChCA,EAAM+E,IAA8B,GAApBhD,EAAM1K,GAAS,KAanCkI,EAAe,IAAK,CAAC,KAAM,GAAI,KAAM,QAIrCqB,EAAa,OAAQ,KAGrBY,EAAgB,OAAQ,GAIxBoC,GAAc,IAAKX,IACnBW,GAAc,KAAMX,GAAWJ,GAC/Be,GAAc,KAAM,SAAUG,EAAU5K,GAEpC,OAAO4K,EACD5K,EAAO6jB,yBAA2B7jB,EAAO8jB,cACzC9jB,EAAO+jB,iCAGjBxY,GAAc,CAAC,IAAK,MAAOM,IAC3BN,GAAc,KAAM,SAAUrN,EAAO2I,GACjCA,EAAMgF,IAAQjD,EAAM1K,EAAM4I,MAAMgD,IAAW,MAK/C,IAAIka,GAAmB/a,EAAW,QAAQ,GAI1C7C,EAAe,MAAO,CAAC,OAAQ,GAAI,OAAQ,aAI3CqB,EAAa,YAAa,OAG1BY,EAAgB,YAAa,GAI7BoC,GAAc,MAAOR,IACrBQ,GAAc,OAAQd,GACtB4B,GAAc,CAAC,MAAO,QAAS,SAAUrN,EAAO2I,EAAOpD,GACnDA,EAAOgX,WAAa7R,EAAM1K,KAiB9BkI,EAAe,IAAK,CAAC,KAAM,GAAI,EAAG,UAIlCqB,EAAa,SAAU,KAIvBY,EAAgB,SAAU,IAI1BoC,GAAc,IAAKX,IACnBW,GAAc,KAAMX,GAAWJ,GAC/B6B,GAAc,CAAC,IAAK,MAAOQ,IAI3B,IAAIkY,GAAehb,EAAW,WAAW,GAIzC7C,EAAe,IAAK,CAAC,KAAM,GAAI,EAAG,UAIlCqB,EAAa,SAAU,KAIvBY,EAAgB,SAAU,IAI1BoC,GAAc,IAAKX,IACnBW,GAAc,KAAMX,GAAWJ,GAC/B6B,GAAc,CAAC,IAAK,MAAOS,IAI3B,IA8CI3F,GAAO6d,GA9CPC,GAAelb,EAAW,WAAW,GA+CzC,IA3CA7C,EAAe,IAAK,EAAG,EAAG,WACtB,SAAUzI,KAAK4e,cAAgB,OAGnCnW,EAAe,EAAG,CAAC,KAAM,GAAI,EAAG,WAC5B,SAAUzI,KAAK4e,cAAgB,MAGnCnW,EAAe,EAAG,CAAC,MAAO,GAAI,EAAG,eACjCA,EAAe,EAAG,CAAC,OAAQ,GAAI,EAAG,WAC9B,OAA4B,GAArBzI,KAAK4e,gBAEhBnW,EAAe,EAAG,CAAC,QAAS,GAAI,EAAG,WAC/B,OAA4B,IAArBzI,KAAK4e,gBAEhBnW,EAAe,EAAG,CAAC,SAAU,GAAI,EAAG,WAChC,OAA4B,IAArBzI,KAAK4e,gBAEhBnW,EAAe,EAAG,CAAC,UAAW,GAAI,EAAG,WACjC,OAA4B,IAArBzI,KAAK4e,gBAEhBnW,EAAe,EAAG,CAAC,WAAY,GAAI,EAAG,WAClC,OAA4B,IAArBzI,KAAK4e,gBAEhBnW,EAAe,EAAG,CAAC,YAAa,GAAI,EAAG,WACnC,OAA4B,IAArBzI,KAAK4e,gBAKhB9U,EAAa,cAAe,MAI5BY,EAAgB,cAAe,IAI/BoC,GAAc,IAAKR,GAAWR,GAC9BgB,GAAc,KAAMR,GAAWP,GAC/Be,GAAc,MAAOR,GAAWN,GAG3BtD,GAAQ,OAAQA,GAAMrH,QAAU,EAAGqH,IAAS,IAC7CoE,GAAcpE,GAAO+D,IAGzB,SAASga,GAAQlmB,EAAO2I,GACpBA,EAAMoF,IAAerD,EAAuB,KAAhB,KAAO1K,IAGvC,IAAKmI,GAAQ,IAAKA,GAAMrH,QAAU,EAAGqH,IAAS,IAC1CkF,GAAclF,GAAO+d,IAGzBF,GAAoBjb,EAAW,gBAAgB,GAI/C7C,EAAe,IAAK,EAAG,EAAG,YAC1BA,EAAe,KAAM,EAAG,EAAG,YAY3B,IAAIie,GAAQ7gB,EAAOnF,UAgHnB,SAASimB,GAAmB7M,GACxB,OAAOA,EA/GX4M,GAAM3H,IAAMA,GACZ2H,GAAM7R,SAjoCN,SAAoB+R,EAAMC,GAEG,IAArBxmB,UAAUgB,SACN6hB,GAAc7iB,UAAU,KACxBumB,EAAOvmB,UAAU,GACjBwmB,OAAUviB,GA5CtB,SAAwB/D,GAcpB,IAbA,IAAIkjB,EAAa5iB,EAASN,KAAWW,EAAcX,GAC/CmjB,GAAe,EACfC,EAAa,CACT,UACA,UACA,UACA,WACA,WACA,YAKH5hB,EAAI,EAAGA,EAAI4hB,EAAWtiB,OAAQU,GAAK,EAEpC2hB,EAAeA,GAAgB5iB,EAAWP,EAD/BojB,EAAW5hB,IAI1B,OAAO0hB,GAAcC,EA0BNoD,CAAezmB,UAAU,MAChCwmB,EAAUxmB,UAAU,GACpBumB,OAAOtiB,IAKf,IAAIuX,EAAM+K,GAAQjK,KACdoK,EAAM5F,GAAgBtF,EAAK7b,MAAMgnB,QAAQ,OACzC5kB,EAASjC,EAAM8mB,eAAejnB,KAAM+mB,IAAQ,WAC5Czd,EACIud,IACC1f,EAAW0f,EAAQzkB,IACdykB,EAAQzkB,GAAQxB,KAAKZ,KAAM6b,GAC3BgL,EAAQzkB,IAEtB,OAAOpC,KAAKoC,OACRkH,GAAUtJ,KAAK+I,aAAa8L,SAASzS,EAAQpC,KAAM2c,GAAYd,MA2mCvE6K,GAAMpF,MAvmCN,WACI,OAAO,IAAIzb,EAAO7F,OAumCtB0mB,GAAMrF,KA/hCN,SAAc9gB,EAAO6J,EAAO8c,GACxB,IAAIC,EAAMC,EAAW9d,EAErB,IAAKtJ,KAAK4D,UACN,OAAOc,IAKX,KAFAyiB,EAAOhG,GAAgB5gB,EAAOP,OAEpB4D,UACN,OAAOc,IAOX,OAJA0iB,EAAoD,KAAvCD,EAAKvG,YAAc5gB,KAAK4gB,aAErCxW,EAAQD,EAAeC,IAGnB,IAAK,OACDd,EAASua,GAAU7jB,KAAMmnB,GAAQ,GACjC,MACJ,IAAK,QACD7d,EAASua,GAAU7jB,KAAMmnB,GACzB,MACJ,IAAK,UACD7d,EAASua,GAAU7jB,KAAMmnB,GAAQ,EACjC,MACJ,IAAK,SACD7d,GAAUtJ,KAAOmnB,GAAQ,IACzB,MACJ,IAAK,SACD7d,GAAUtJ,KAAOmnB,GAAQ,IACzB,MACJ,IAAK,OACD7d,GAAUtJ,KAAOmnB,GAAQ,KACzB,MACJ,IAAK,MACD7d,GAAUtJ,KAAOmnB,EAAOC,GAAa,MACrC,MACJ,IAAK,OACD9d,GAAUtJ,KAAOmnB,EAAOC,GAAa,OACrC,MACJ,QACI9d,EAAStJ,KAAOmnB,EAGxB,OAAOD,EAAU5d,EAASwB,EAASxB,IAk/BvCod,GAAMW,MA1uBN,SAAejd,GACX,IAAIwc,EAAMU,EAEV,QAAchjB,KADd8F,EAAQD,EAAeC,KACc,gBAAVA,IAA4BpK,KAAK4D,UACxD,OAAO5D,KAKX,OAFAsnB,EAActnB,KAAK0F,OAASgf,GAAiBD,GAErCra,GACJ,IAAK,OACDwc,EAAOU,EAAYtnB,KAAK6K,OAAS,EAAG,EAAG,GAAK,EAC5C,MACJ,IAAK,UACD+b,EACIU,EACItnB,KAAK6K,OACL7K,KAAK0L,QAAW1L,KAAK0L,QAAU,EAAK,EACpC,GACA,EACR,MACJ,IAAK,QACDkb,EAAOU,EAAYtnB,KAAK6K,OAAQ7K,KAAK0L,QAAU,EAAG,GAAK,EACvD,MACJ,IAAK,OACDkb,EACIU,EACItnB,KAAK6K,OACL7K,KAAK0L,QACL1L,KAAK2L,OAAS3L,KAAKqR,UAAY,GAC/B,EACR,MACJ,IAAK,UACDuV,EACIU,EACItnB,KAAK6K,OACL7K,KAAK0L,QACL1L,KAAK2L,QAAU3L,KAAKunB,aAAe,GAAK,GACxC,EACR,MACJ,IAAK,MACL,IAAK,OACDX,EAAOU,EAAYtnB,KAAK6K,OAAQ7K,KAAK0L,QAAS1L,KAAK2L,OAAS,GAAK,EACjE,MACJ,IAAK,OACDib,EAAO5mB,KAAKkE,GAAGhC,UACf0kB,GAzIM,KA2IFtC,GACIsC,GAAQ5mB,KAAK0F,OAAS,EA7ItB,IA6I0B1F,KAAK4gB,aA5IjC,MA+IF,EACJ,MACJ,IAAK,SACDgG,EAAO5mB,KAAKkE,GAAGhC,UACf0kB,GApJQ,IAoJgBtC,GAAMsC,EApJtB,KAoJ6C,EACrD,MACJ,IAAK,SACDA,EAAO5mB,KAAKkE,GAAGhC,UACf0kB,GAzJQ,IAyJgBtC,GAAMsC,EAzJtB,KAyJ6C,EACrD,MAKR,OAFA5mB,KAAKkE,GAAGqd,QAAQqF,GAChBzmB,EAAM4F,aAAa/F,MAAM,GAClBA,MAyqBX0mB,GAAMtkB,OAp5BN,SAAgBolB,GAERA,EADCA,IACaxnB,KAAK2hB,QACbxhB,EAAMgkB,iBACNhkB,EAAM+jB,eAEhB,IAAI5a,EAASN,EAAahJ,KAAMwnB,GAChC,OAAOxnB,KAAK+I,aAAa0e,WAAWne,IA84BxCod,GAAMxhB,KA34BN,SAAc0hB,EAAMc,GAChB,OACI1nB,KAAK4D,YACHoC,EAAS4gB,IAASA,EAAKhjB,WAAc+Y,GAAYiK,GAAMhjB,WAElDke,GAAe,CAAE7c,GAAIjF,KAAMkF,KAAM0hB,IACnCvkB,OAAOrC,KAAKqC,UACZslB,UAAUD,GAER1nB,KAAK+I,aAAaS,eAm4BjCkd,GAAMkB,QA/3BN,SAAiBF,GACb,OAAO1nB,KAAKkF,KAAKyX,KAAe+K,IA+3BpChB,GAAMzhB,GA53BN,SAAY2hB,EAAMc,GACd,OACI1nB,KAAK4D,YACHoC,EAAS4gB,IAASA,EAAKhjB,WAAc+Y,GAAYiK,GAAMhjB,WAElDke,GAAe,CAAE5c,KAAMlF,KAAMiF,GAAI2hB,IACnCvkB,OAAOrC,KAAKqC,UACZslB,UAAUD,GAER1nB,KAAK+I,aAAaS,eAo3BjCkd,GAAMmB,MAh3BN,SAAeH,GACX,OAAO1nB,KAAKiF,GAAG0X,KAAe+K,IAg3BlChB,GAAMjb,IAnjIN,SAAmBrB,GAEf,OAAIjD,EAAWnH,KADfoK,EAAQD,EAAeC,KAEZpK,KAAKoK,KAETpK,MA+iIX0mB,GAAMoB,UAznBN,WACI,OAAOrlB,EAAgBzC,MAAM+C,UAynBjC2jB,GAAMnE,QA7mCN,SAAiBhiB,EAAO6J,GACpB,IAAI2d,EAAa/hB,EAASzF,GAASA,EAAQoc,GAAYpc,GACvD,SAAMP,KAAK4D,YAAamkB,EAAWnkB,aAIrB,iBADdwG,EAAQD,EAAeC,IAAU,eAEtBpK,KAAKkC,UAAY6lB,EAAW7lB,UAE5B6lB,EAAW7lB,UAAYlC,KAAKshB,QAAQ0F,QAAQ5c,GAAOlI,YAqmClEwkB,GAAMvE,SAjmCN,SAAkB5hB,EAAO6J,GACrB,IAAI2d,EAAa/hB,EAASzF,GAASA,EAAQoc,GAAYpc,GACvD,SAAMP,KAAK4D,YAAamkB,EAAWnkB,aAIrB,iBADdwG,EAAQD,EAAeC,IAAU,eAEtBpK,KAAKkC,UAAY6lB,EAAW7lB,UAE5BlC,KAAKshB,QAAQ+F,MAAMjd,GAAOlI,UAAY6lB,EAAW7lB,YAylChEwkB,GAAMsB,UArlCN,SAAmB9iB,EAAMD,EAAImF,EAAO6d,GAChC,IAAIC,EAAYliB,EAASd,GAAQA,EAAOyX,GAAYzX,GAChDijB,EAAUniB,EAASf,GAAMA,EAAK0X,GAAY1X,GAC9C,SAAMjF,KAAK4D,WAAaskB,EAAUtkB,WAAaukB,EAAQvkB,cAK/B,OAFxBqkB,EAAcA,GAAe,MAEZ,GACPjoB,KAAKuiB,QAAQ2F,EAAW9d,IACvBpK,KAAKmiB,SAAS+F,EAAW9d,MACZ,MAAnB6d,EAAY,GACPjoB,KAAKmiB,SAASgG,EAAS/d,IACtBpK,KAAKuiB,QAAQ4F,EAAS/d,MAykCrCsc,GAAM0B,OArkCN,SAAgB7nB,EAAO6J,GACnB,IACIie,EADAN,EAAa/hB,EAASzF,GAASA,EAAQoc,GAAYpc,GAEvD,SAAMP,KAAK4D,YAAamkB,EAAWnkB,aAIrB,iBADdwG,EAAQD,EAAeC,IAAU,eAEtBpK,KAAKkC,YAAc6lB,EAAW7lB,WAErCmmB,EAAUN,EAAW7lB,UAEjBlC,KAAKshB,QAAQ0F,QAAQ5c,GAAOlI,WAAammB,GACzCA,GAAWroB,KAAKshB,QAAQ+F,MAAMjd,GAAOlI,aAyjCjDwkB,GAAM4B,cApjCN,SAAuB/nB,EAAO6J,GAC1B,OAAOpK,KAAKooB,OAAO7nB,EAAO6J,IAAUpK,KAAKuiB,QAAQhiB,EAAO6J,IAojC5Dsc,GAAM6B,eAjjCN,SAAwBhoB,EAAO6J,GAC3B,OAAOpK,KAAKooB,OAAO7nB,EAAO6J,IAAUpK,KAAKmiB,SAAS5hB,EAAO6J,IAijC7Dsc,GAAM9iB,QAxoBN,WACI,OAAOA,EAAQ5D,OAwoBnB0mB,GAAMtC,KAAOA,GACbsC,GAAMrkB,OAASA,GACfqkB,GAAM3d,WAAaA,GACnB2d,GAAMve,IAAM+W,GACZwH,GAAMjX,IAAMuP,GACZ0H,GAAM8B,aA1oBN,WACI,OAAOvmB,EAAO,GAAIQ,EAAgBzC,QA0oBtC0mB,GAAMjf,IA1jIN,SAAmB2C,EAAOgB,GACtB,GAAqB,iBAAVhB,EAIP,IAFA,IAAIqe,EAzFZ,SAA6BC,GACzB,IACIC,EADAve,EAAQ,GAEZ,IAAKue,KAAKD,EACF5nB,EAAW4nB,EAAUC,IACrBve,EAAMpI,KAAK,CAAE+H,KAAM4e,EAAGhe,SAAUF,EAAWke,KAMnD,OAHAve,EAAM4F,KAAK,SAAUjP,EAAGC,GACpB,OAAOD,EAAE4J,SAAW3J,EAAE2J,WAEnBP,EA8Eewe,CADlBxe,EAAQC,EAAqBD,IAGxBrI,EAAI,EAAGA,EAAI0mB,EAAYpnB,OAAQU,IAChC/B,KAAKyoB,EAAY1mB,GAAGgI,MAAMK,EAAMqe,EAAY1mB,GAAGgI,YAInD,GAAI5C,EAAWnH,KADfoK,EAAQD,EAAeC,KAEnB,OAAOpK,KAAKoK,GAAOgB,GAG3B,OAAOpL,MA6iIX0mB,GAAMM,QA/zBN,SAAiB5c,GACb,IAAIwc,EAAMU,EAEV,QAAchjB,KADd8F,EAAQD,EAAeC,KACc,gBAAVA,IAA4BpK,KAAK4D,UACxD,OAAO5D,KAKX,OAFAsnB,EAActnB,KAAK0F,OAASgf,GAAiBD,GAErCra,GACJ,IAAK,OACDwc,EAAOU,EAAYtnB,KAAK6K,OAAQ,EAAG,GACnC,MACJ,IAAK,UACD+b,EAAOU,EACHtnB,KAAK6K,OACL7K,KAAK0L,QAAW1L,KAAK0L,QAAU,EAC/B,GAEJ,MACJ,IAAK,QACDkb,EAAOU,EAAYtnB,KAAK6K,OAAQ7K,KAAK0L,QAAS,GAC9C,MACJ,IAAK,OACDkb,EAAOU,EACHtnB,KAAK6K,OACL7K,KAAK0L,QACL1L,KAAK2L,OAAS3L,KAAKqR,WAEvB,MACJ,IAAK,UACDuV,EAAOU,EACHtnB,KAAK6K,OACL7K,KAAK0L,QACL1L,KAAK2L,QAAU3L,KAAKunB,aAAe,IAEvC,MACJ,IAAK,MACL,IAAK,OACDX,EAAOU,EAAYtnB,KAAK6K,OAAQ7K,KAAK0L,QAAS1L,KAAK2L,QACnD,MACJ,IAAK,OACDib,EAAO5mB,KAAKkE,GAAGhC,UACf0kB,GAAQtC,GACJsC,GAAQ5mB,KAAK0F,OAAS,EAzElB,IAyEsB1F,KAAK4gB,aAxE7B,MA2EN,MACJ,IAAK,SACDgG,EAAO5mB,KAAKkE,GAAGhC,UACf0kB,GAAQtC,GAAMsC,EA/EN,KAgFR,MACJ,IAAK,SACDA,EAAO5mB,KAAKkE,GAAGhC,UACf0kB,GAAQtC,GAAMsC,EApFN,KAqFR,MAKR,OAFA5mB,KAAKkE,GAAGqd,QAAQqF,GAChBzmB,EAAM4F,aAAa/F,MAAM,GAClBA,MAowBX0mB,GAAM3D,SAAWA,GACjB2D,GAAMmC,QAjrBN,WACI,IAAInmB,EAAI1C,KACR,MAAO,CACH0C,EAAEmI,OACFnI,EAAEgJ,QACFhJ,EAAEiJ,OACFjJ,EAAE8a,OACF9a,EAAEgc,SACFhc,EAAEic,SACFjc,EAAEkc,gBAyqBV8H,GAAMoC,SArqBN,WACI,IAAIpmB,EAAI1C,KACR,MAAO,CACHwf,MAAO9c,EAAEmI,OACTgE,OAAQnM,EAAEgJ,QACVC,KAAMjJ,EAAEiJ,OACRkI,MAAOnR,EAAEmR,QACTE,QAASrR,EAAEqR,UACXG,QAASxR,EAAEwR,UACX4L,aAAcpd,EAAEod,iBA6pBxB4G,GAAMqC,OAvrBN,WACI,OAAO,IAAIrnB,KAAK1B,KAAKkC,YAurBzBwkB,GAAMsC,YAx+BN,SAAqBC,GACjB,IAAKjpB,KAAK4D,UACN,OAAO,KAEX,IAAIpB,GAAqB,IAAfymB,EACNvmB,EAAIF,EAAMxC,KAAKshB,QAAQ9e,MAAQxC,KACnC,OAAI0C,EAAEmI,OAAS,GAAgB,KAAXnI,EAAEmI,OACX7B,EACHtG,EACAF,EACM,iCACA,gCAGV2E,EAAWzF,KAAKhB,UAAUsoB,aAEtBxmB,EACOxC,KAAK+oB,SAASC,cAEd,IAAItnB,KAAK1B,KAAKkC,UAA+B,GAAnBlC,KAAK4gB,YAAmB,KACpDoI,cACA5f,QAAQ,IAAKJ,EAAatG,EAAG,MAGnCsG,EACHtG,EACAF,EAAM,+BAAiC,+BA+8B/CkkB,GAAMwC,QAr8BN,WACI,IAAKlpB,KAAK4D,UACN,MAAO,qBAAuB5D,KAAKsF,GAAK,OAE5C,IAEI6jB,EACAte,EAEAue,EALAtgB,EAAO,SACPugB,EAAO,GAcX,OATKrpB,KAAKspB,YACNxgB,EAA4B,IAArB9I,KAAK4gB,YAAoB,aAAe,mBAC/CyI,EAAO,KAEXF,EAAS,IAAMrgB,EAAO,MACtB+B,EAAO,GAAK7K,KAAK6K,QAAU7K,KAAK6K,QAAU,KAAO,OAAS,SAE1Due,EAASC,EAAO,OAETrpB,KAAKoC,OAAO+mB,EAASte,EAHjB,wBAGmCue,IAm7B5B,oBAAXG,QAAwC,MAAdA,OAAOC,MACxC9C,GAAM6C,OAAOC,IAAI,+BAAiC,WAC9C,MAAO,UAAYxpB,KAAKoC,SAAW,MAG3CskB,GAAM+C,OAjqBN,WAEI,OAAOzpB,KAAK4D,UAAY5D,KAAKgpB,cAAgB,MAgqBjDtC,GAAM/lB,SAp/BN,WACI,OAAOX,KAAKshB,QAAQjf,OAAO,MAAMD,OAAO,qCAo/B5CskB,GAAMgD,KArsBN,WACI,OAAO3hB,KAAKiD,MAAMhL,KAAKkC,UAAY,MAqsBvCwkB,GAAMxkB,QA1sBN,WACI,OAAOlC,KAAKkE,GAAGhC,UAAkC,KAArBlC,KAAK2F,SAAW,IA0sBhD+gB,GAAMiD,aAppBN,WACI,MAAO,CACHppB,MAAOP,KAAKsF,GACZlD,OAAQpC,KAAKuF,GACblD,OAAQrC,KAAK4F,QACbkZ,MAAO9e,KAAK0F,OACZpD,OAAQtC,KAAKqE,UA+oBrBqiB,GAAMkD,QAzgBN,WAKI,IAJA,IAEIxkB,EACA6f,EAAOjlB,KAAK+I,aAAakc,OACxBljB,EAAI,EAAG0X,EAAIwL,EAAK5jB,OAAQU,EAAI0X,IAAK1X,EAAG,CAIrC,GAFAqD,EAAMpF,KAAKshB,QAAQ0F,QAAQ,OAAO9kB,UAE9B+iB,EAAKljB,GAAG8nB,OAASzkB,GAAOA,GAAO6f,EAAKljB,GAAG+nB,MACvC,OAAO7E,EAAKljB,GAAGmF,KAEnB,GAAI+d,EAAKljB,GAAG+nB,OAAS1kB,GAAOA,GAAO6f,EAAKljB,GAAG8nB,MACvC,OAAO5E,EAAKljB,GAAGmF,KAIvB,MAAO,IAyfXwf,GAAMqD,UAtfN,WAKI,IAJA,IAEI3kB,EACA6f,EAAOjlB,KAAK+I,aAAakc,OACxBljB,EAAI,EAAG0X,EAAIwL,EAAK5jB,OAAQU,EAAI0X,IAAK1X,EAAG,CAIrC,GAFAqD,EAAMpF,KAAKshB,QAAQ0F,QAAQ,OAAO9kB,UAE9B+iB,EAAKljB,GAAG8nB,OAASzkB,GAAOA,GAAO6f,EAAKljB,GAAG+nB,MACvC,OAAO7E,EAAKljB,GAAGmjB,OAEnB,GAAID,EAAKljB,GAAG+nB,OAAS1kB,GAAOA,GAAO6f,EAAKljB,GAAG8nB,MACvC,OAAO5E,EAAKljB,GAAGmjB,OAIvB,MAAO,IAseXwB,GAAMsD,QAneN,WAKI,IAJA,IAEI5kB,EACA6f,EAAOjlB,KAAK+I,aAAakc,OACxBljB,EAAI,EAAG0X,EAAIwL,EAAK5jB,OAAQU,EAAI0X,IAAK1X,EAAG,CAIrC,GAFAqD,EAAMpF,KAAKshB,QAAQ0F,QAAQ,OAAO9kB,UAE9B+iB,EAAKljB,GAAG8nB,OAASzkB,GAAOA,GAAO6f,EAAKljB,GAAG+nB,MACvC,OAAO7E,EAAKljB,GAAG+V,KAEnB,GAAImN,EAAKljB,GAAG+nB,OAAS1kB,GAAOA,GAAO6f,EAAKljB,GAAG8nB,MACvC,OAAO5E,EAAKljB,GAAG+V,KAIvB,MAAO,IAmdX4O,GAAMuD,QAhdN,WAMI,IALA,IAEIC,EACA9kB,EACA6f,EAAOjlB,KAAK+I,aAAakc,OACxBljB,EAAI,EAAG0X,EAAIwL,EAAK5jB,OAAQU,EAAI0X,IAAK1X,EAMlC,GALAmoB,EAAMjF,EAAKljB,GAAG8nB,OAAS5E,EAAKljB,GAAG+nB,MAAQ,GAAM,EAG7C1kB,EAAMpF,KAAKshB,QAAQ0F,QAAQ,OAAO9kB,UAG7B+iB,EAAKljB,GAAG8nB,OAASzkB,GAAOA,GAAO6f,EAAKljB,GAAG+nB,OACvC7E,EAAKljB,GAAG+nB,OAAS1kB,GAAOA,GAAO6f,EAAKljB,GAAG8nB,MAExC,OACK7pB,KAAK6K,OAAS1K,EAAM8kB,EAAKljB,GAAG8nB,OAAOhf,QAAUqf,EAC9CjF,EAAKljB,GAAG2e,OAKpB,OAAO1gB,KAAK6K,QA0bhB6b,GAAM7b,KAAO4F,GACbiW,GAAM9b,WAvkHN,WACI,OAAOA,EAAW5K,KAAK6K,SAukH3B6b,GAAMtK,SAjUN,SAAwB7b,GACpB,OAAOklB,GAAqB7kB,KACxBZ,KACAO,EACAP,KAAKoR,OACLpR,KAAKqR,UACLrR,KAAK+I,aAAa6T,MAAM7L,IACxB/Q,KAAK+I,aAAa6T,MAAM5L,MA2ThC0V,GAAMT,YAvTN,SAA2B1lB,GACvB,OAAOklB,GAAqB7kB,KACxBZ,KACAO,EACAP,KAAK4f,UACL5f,KAAKunB,aACL,EACA,IAiTRb,GAAMhH,QAAUgH,GAAMjH,SA/OtB,SAAuBlf,GACnB,OAAgB,MAATA,EACDwH,KAAKgD,MAAM/K,KAAK0L,QAAU,GAAK,GAC/B1L,KAAK0L,MAAoB,GAAbnL,EAAQ,GAAUP,KAAK0L,QAAU,IA6OvDgb,GAAMhb,MAAQgE,GACdgX,GAAM9a,YA9tHN,WACI,OAAOA,GAAY5L,KAAK6K,OAAQ7K,KAAK0L,UA8tHzCgb,GAAMtV,KAAOsV,GAAM/G,MA/6GnB,SAAoBpf,GAChB,IAAI6Q,EAAOpR,KAAK+I,aAAaqI,KAAKpR,MAClC,OAAgB,MAATO,EAAgB6Q,EAAOpR,KAAK+e,IAAqB,GAAhBxe,EAAQ6Q,GAAW,MA86G/DsV,GAAM9G,QAAU8G,GAAMyD,SA36GtB,SAAuB5pB,GACnB,IAAI6Q,EAAOK,GAAWzR,KAAM,EAAG,GAAGoR,KAClC,OAAgB,MAAT7Q,EAAgB6Q,EAAOpR,KAAK+e,IAAqB,GAAhBxe,EAAQ6Q,GAAW,MA06G/DsV,GAAM9U,YA1SN,WACI,IAAIwY,EAAWpqB,KAAK+I,aAAa6T,MACjC,OAAOhL,GAAY5R,KAAK6K,OAAQuf,EAASrZ,IAAKqZ,EAASpZ,MAyS3D0V,GAAM2D,gBAtSN,WACI,IAAID,EAAWpqB,KAAK+I,aAAa6T,MACjC,OAAOhL,GAAY5R,KAAKoc,WAAYgO,EAASrZ,IAAKqZ,EAASpZ,MAqS/D0V,GAAM4D,eApTN,WACI,OAAO1Y,GAAY5R,KAAK6K,OAAQ,EAAG,IAoTvC6b,GAAM6D,sBAjTN,WACI,OAAO3Y,GAAY5R,KAAKimB,cAAe,EAAG,IAiT9CS,GAAM/a,KAAO0a,GACbK,GAAMrT,IAAMqT,GAAM7G,KA5pGlB,SAAyBtf,GACrB,IAAKP,KAAK4D,UACN,OAAgB,MAATrD,EAAgBP,KAAO0E,IAElC,IAvNkBnE,EAAO8B,EAuNrBgR,EAAMrT,KAAK0F,OAAS1F,KAAKkE,GAAGgN,YAAclR,KAAKkE,GAAG4W,SACtD,OAAa,MAATva,GAxNcA,EAyNOA,EAzNA8B,EAyNOrC,KAAK+I,aAAjCxI,EAxNiB,iBAAVA,EACAA,EAGN0D,MAAM1D,GAKU,iBADrBA,EAAQ8B,EAAOmQ,cAAcjS,IAElBA,EAGJ,KARIiQ,SAASjQ,EAAO,IAoNhBP,KAAK+e,IAAIxe,EAAQ8S,EAAK,MAEtBA,GAopGfqT,GAAMrV,QAhpGN,SAA+B9Q,GAC3B,IAAKP,KAAK4D,UACN,OAAgB,MAATrD,EAAgBP,KAAO0E,IAElC,IAAI2M,GAAWrR,KAAKqT,MAAQ,EAAIrT,KAAK+I,aAAa6T,MAAM7L,KAAO,EAC/D,OAAgB,MAATxQ,EAAgB8Q,EAAUrR,KAAK+e,IAAIxe,EAAQ8Q,EAAS,MA4oG/DqV,GAAMa,WAzoGN,SAA4BhnB,GACxB,IAAKP,KAAK4D,UACN,OAAgB,MAATrD,EAAgBP,KAAO0E,IAOlC,GAAa,MAATnE,EAIA,OAAOP,KAAKqT,OAAS,EAHrB,IAjOiB9S,EAAO8B,EAiOpBgP,GAjOa9Q,EAiOaA,EAjON8B,EAiOarC,KAAK+I,aAhOzB,iBAAVxI,EACA8B,EAAOmQ,cAAcjS,GAAS,GAAK,EAEvC0D,MAAM1D,GAAS,KAAOA,GA8NzB,OAAOP,KAAKqT,IAAIrT,KAAKqT,MAAQ,EAAIhC,EAAUA,EAAU,IA+nG7DqV,GAAMnV,UAhMN,SAAyBhR,GACrB,IAAIgR,EACAxJ,KAAK0Y,OACAzgB,KAAKshB,QAAQ0F,QAAQ,OAAShnB,KAAKshB,QAAQ0F,QAAQ,SAAW,OAC/D,EACR,OAAgB,MAATzmB,EAAgBgR,EAAYvR,KAAK+e,IAAIxe,EAAQgR,EAAW,MA4LnEmV,GAAMlJ,KAAOkJ,GAAM7S,MAAQa,GAC3BgS,GAAMhI,OAASgI,GAAM3S,QAAUuS,GAC/BI,GAAM/H,OAAS+H,GAAMxS,QAAUsS,GAC/BE,GAAM9H,YAAc8H,GAAM5G,aAAeyG,GACzCG,GAAM9F,UA7mDN,SAAsBrgB,EAAOiqB,EAAeC,GACxC,IACIC,EADAhK,EAAS1gB,KAAK2F,SAAW,EAE7B,IAAK3F,KAAK4D,UACN,OAAgB,MAATrD,EAAgBP,KAAO0E,IAElC,GAAa,MAATnE,EAiCA,OAAOP,KAAK0F,OAASgb,EAASe,GAAczhB,MAhC5C,GAAqB,iBAAVO,GAEP,GAAc,QADdA,EAAQugB,GAAiBlU,GAAkBrM,IAEvC,OAAOP,UAEJ+H,KAAKC,IAAIzH,GAAS,KAAOkqB,IAChClqB,GAAgB,IAwBpB,OAtBKP,KAAK0F,QAAU8kB,IAChBE,EAAcjJ,GAAczhB,OAEhCA,KAAK2F,QAAUpF,EACfP,KAAK0F,QAAS,EACK,MAAfglB,GACA1qB,KAAK+e,IAAI2L,EAAa,KAEtBhK,IAAWngB,KACNiqB,GAAiBxqB,KAAK2qB,kBACvB/H,GACI5iB,KACA8hB,GAAevhB,EAAQmgB,EAAQ,KAC/B,GACA,GAEI1gB,KAAK2qB,oBACb3qB,KAAK2qB,mBAAoB,EACzBxqB,EAAM4F,aAAa/F,MAAM,GACzBA,KAAK2qB,kBAAoB,OAG1B3qB,MAykDf0mB,GAAMlkB,IArjDN,SAAwBgoB,GACpB,OAAOxqB,KAAK4gB,UAAU,EAAG4J,IAqjD7B9D,GAAMlF,MAljDN,SAA0BgJ,GAStB,OARIxqB,KAAK0F,SACL1F,KAAK4gB,UAAU,EAAG4J,GAClBxqB,KAAK0F,QAAS,EAEV8kB,GACAxqB,KAAK+iB,SAAStB,GAAczhB,MAAO,MAGpCA,MA0iDX0mB,GAAMkE,UAviDN,WACI,IAGQC,EAOR,OAViB,MAAb7qB,KAAKyF,KACLzF,KAAK4gB,UAAU5gB,KAAKyF,MAAM,GAAO,GACP,iBAAZzF,KAAKsF,KAEN,OADTulB,EAAQ/J,GAAiBnU,GAAa3M,KAAKsF,KAE3CtF,KAAK4gB,UAAUiK,GAEf7qB,KAAK4gB,UAAU,GAAG,IAGnB5gB,MA6hDX0mB,GAAMoE,qBA1hDN,SAA8BvqB,GAC1B,QAAKP,KAAK4D,YAGVrD,EAAQA,EAAQoc,GAAYpc,GAAOqgB,YAAc,GAEzC5gB,KAAK4gB,YAAcrgB,GAAS,IAAO,IAqhD/CmmB,GAAMqE,MAlhDN,WACI,OACI/qB,KAAK4gB,YAAc5gB,KAAKshB,QAAQ5V,MAAM,GAAGkV,aACzC5gB,KAAK4gB,YAAc5gB,KAAKshB,QAAQ5V,MAAM,GAAGkV,aAghDjD8F,GAAM4C,QAt/CN,WACI,QAAOtpB,KAAK4D,YAAa5D,KAAK0F,QAs/ClCghB,GAAMsE,YAn/CN,WACI,QAAOhrB,KAAK4D,WAAY5D,KAAK0F,QAm/CjCghB,GAAM/E,MAAQA,GACd+E,GAAM5H,MAAQ6C,GACd+E,GAAMuE,SAzFN,WACI,OAAOjrB,KAAK0F,OAAS,MAAQ,IAyFjCghB,GAAMwE,SAtFN,WACI,OAAOlrB,KAAK0F,OAAS,6BAA+B,IAsFxDghB,GAAMyE,MAAQ9kB,EACV,kDACAggB,IAEJK,GAAM7X,OAASxI,EACX,mDACAqJ,IAEJgX,GAAMlH,MAAQnZ,EACV,iDACAoK,IAEJiW,GAAM2C,KAAOhjB,EACT,2GA3lDJ,SAAoB9F,EAAOiqB,GACvB,OAAa,MAATjqB,GACqB,iBAAVA,IACPA,GAASA,GAGbP,KAAK4gB,UAAUrgB,EAAOiqB,GAEfxqB,OAECA,KAAK4gB,cAolDrB8F,GAAM0E,aAAe/kB,EACjB,0GAniDJ,WACI,IAAK9E,EAAYvB,KAAKqrB,eAClB,OAAOrrB,KAAKqrB,cAGhB,IACIpM,EADA1D,EAAI,GAcR,OAXAvW,EAAWuW,EAAGvb,OACdub,EAAIsC,GAActC,IAEZpD,IACF8G,GAAQ1D,EAAE7V,OAASvD,EAAkBwa,IAARpB,EAAEpD,IAC/BnY,KAAKqrB,cACDrrB,KAAK4D,WAAoD,EAtOrE,SAAuB0nB,EAAQC,EAAQC,GAKnC,IAJA,IAAI3mB,EAAMkD,KAAK0H,IAAI6b,EAAOjqB,OAAQkqB,EAAOlqB,QACrCoqB,EAAa1jB,KAAKC,IAAIsjB,EAAOjqB,OAASkqB,EAAOlqB,QAC7CqqB,EAAQ,EAEP3pB,EAAI,EAAGA,EAAI8C,EAAK9C,KAEZypB,GAAeF,EAAOvpB,KAAOwpB,EAAOxpB,KACnCypB,GAAevgB,EAAMqgB,EAAOvpB,MAAQkJ,EAAMsgB,EAAOxpB,MAEnD2pB,IAGR,OAAOA,EAAQD,EAyNWE,CAAcpQ,EAAEpD,GAAI8G,EAAM4J,YAEhD7oB,KAAKqrB,eAAgB,EAGlBrrB,KAAKqrB,gBAgiDhB,IAAIO,GAAUpkB,EAAO9G,UAuCrB,SAASmrB,GAAMzpB,EAAQ0pB,EAAOC,EAAOC,GACjC,IAAI3pB,EAASuV,KACTpV,EAAML,IAAYsF,IAAIukB,EAAQF,GAClC,OAAOzpB,EAAO0pB,GAAOvpB,EAAKJ,GAG9B,SAAS6pB,GAAe7pB,EAAQ0pB,EAAOC,GAQnC,GAPIvqB,EAASY,KACT0pB,EAAQ1pB,EACRA,OAASkC,GAGblC,EAASA,GAAU,GAEN,MAAT0pB,EACA,OAAOD,GAAMzpB,EAAQ0pB,EAAOC,EAAO,SAKvC,IAFA,IACIG,EAAM,GACLnqB,EAAI,EAAGA,EAAI,GAAIA,IAChBmqB,EAAInqB,GAAK8pB,GAAMzpB,EAAQL,EAAGgqB,EAAO,SAErC,OAAOG,EAWX,SAASC,GAAiBC,EAAchqB,EAAQ0pB,EAAOC,GAO/C3pB,GANwB,kBAAjBgqB,EACH5qB,EAASY,KACT0pB,EAAQ1pB,EACRA,OAASkC,IAKblC,EAASgqB,EAETA,GAAe,EAEX5qB,EAHJsqB,EAAQ1pB,KAIJ0pB,EAAQ1pB,EACRA,OAASkC,IARJlC,GAAU,IAcvB,IAEIL,EAFAM,EAASuV,KACTyU,EAAQD,EAAe/pB,EAAOua,MAAM7L,IAAM,EAE1Cmb,EAAM,GAEV,GAAa,MAATJ,EACA,OAAOD,GAAMzpB,GAAS0pB,EAAQO,GAAS,EAAGN,EAAO,OAGrD,IAAKhqB,EAAI,EAAGA,EAAI,EAAGA,IACfmqB,EAAInqB,GAAK8pB,GAAMzpB,GAASL,EAAIsqB,GAAS,EAAGN,EAAO,OAEnD,OAAOG,EAxGXN,GAAQ/W,SAj9IR,SAAkBpO,EAAK4C,EAAKwS,GACxB,IAAIvS,EAAStJ,KAAKssB,UAAU7lB,IAAQzG,KAAKssB,UAAoB,SAC7D,OAAOnlB,EAAWmC,GAAUA,EAAO1I,KAAKyI,EAAKwS,GAAOvS,GAg9IxDsiB,GAAQliB,eAt1IR,SAAwBjD,GACpB,IAAIrE,EAASpC,KAAKusB,gBAAgB9lB,GAC9B+lB,EAAcxsB,KAAKusB,gBAAgB9lB,EAAIgmB,eAE3C,OAAIrqB,IAAWoqB,EACJpqB,GAGXpC,KAAKusB,gBAAgB9lB,GAAO+lB,EACvBrjB,MAAMd,GACN1G,IAAI,SAAU+qB,GACX,MACY,SAARA,GACQ,OAARA,GACQ,OAARA,GACQ,SAARA,EAEOA,EAAI/lB,MAAM,GAEd+lB,IAEV9lB,KAAK,IAEH5G,KAAKusB,gBAAgB9lB,KAg0IhCmlB,GAAQpiB,YA3zIR,WACI,OAAOxJ,KAAK2sB,cA2zIhBf,GAAQhjB,QArzIR,SAAiBjB,GACb,OAAO3H,KAAK4sB,SAASxjB,QAAQ,KAAMzB,IAqzIvCikB,GAAQ9N,SAAW6I,GACnBiF,GAAQnE,WAAad,GACrBiF,GAAQjW,aAjyIR,SAAsBhO,EAAQ+f,EAAe5N,EAAQ+S,GACjD,IAAIvjB,EAAStJ,KAAK8sB,cAAchT,GAChC,OAAO3S,EAAWmC,GACZA,EAAO3B,EAAQ+f,EAAe5N,EAAQ+S,GACtCvjB,EAAOF,QAAQ,MAAOzB,IA8xIhCikB,GAAQmB,WA3xIR,SAAoB1L,EAAM/X,GACtB,IAAIlH,EAASpC,KAAK8sB,cAAqB,EAAPzL,EAAW,SAAW,QACtD,OAAOla,EAAW/E,GAAUA,EAAOkH,GAAUlH,EAAOgH,QAAQ,MAAOE,IA0xIvEsiB,GAAQnkB,IA7iJR,SAAa3B,GACT,IAAIX,EAAMpD,EACV,IAAKA,KAAK+D,EACFhF,EAAWgF,EAAQ/D,KAEfoF,EADJhC,EAAOW,EAAO/D,IAEV/B,KAAK+B,GAAKoD,EAEVnF,KAAK,IAAM+B,GAAKoD,GAI5BnF,KAAK+X,QAAUjS,EAIf9F,KAAKomB,+BAAiC,IAAIjZ,QACrCnN,KAAKkmB,wBAAwB8G,QAAUhtB,KAAKmmB,cAAc6G,QACvD,IACA,UAAUA,SA2hJtBpB,GAAQ3G,KA1qBR,SAAoBviB,EAAGN,GAKnB,IAJA,IAEIuJ,EACAsZ,EAAOjlB,KAAKitB,OAASrV,GAAU,MAAMqV,MACpClrB,EAAI,EAAG0X,EAAIwL,EAAK5jB,OAAQU,EAAI0X,IAAK1X,EAAG,CACrC,cAAekjB,EAAKljB,GAAG8nB,OACnB,IAAK,SAEDle,EAAOxL,EAAM8kB,EAAKljB,GAAG8nB,OAAO7C,QAAQ,OACpC/B,EAAKljB,GAAG8nB,MAAQle,EAAKzJ,UACrB,MAGR,cAAe+iB,EAAKljB,GAAG+nB,OACnB,IAAK,YACD7E,EAAKljB,GAAG+nB,MAASoD,EAAAA,EACjB,MACJ,IAAK,SAEDvhB,EAAOxL,EAAM8kB,EAAKljB,GAAG+nB,OAAO9C,QAAQ,OAAO9kB,UAC3C+iB,EAAKljB,GAAG+nB,MAAQne,EAAKzJ,UACrB,OAGZ,OAAO+iB,GAkpBX2G,GAAQ9F,UA/oBR,SAAyB8D,EAASxnB,EAAQE,GACtC,IAAIP,EACA0X,EAEAvS,EACA4Q,EACAoN,EAHAD,EAAOjlB,KAAKilB,OAMhB,IAFA2E,EAAUA,EAAQ6C,cAEb1qB,EAAI,EAAG0X,EAAIwL,EAAK5jB,OAAQU,EAAI0X,IAAK1X,EAKlC,GAJAmF,EAAO+d,EAAKljB,GAAGmF,KAAKulB,cACpB3U,EAAOmN,EAAKljB,GAAG+V,KAAK2U,cACpBvH,EAASD,EAAKljB,GAAGmjB,OAAOuH,cAEpBnqB,EACA,OAAQF,GACJ,IAAK,IACL,IAAK,KACL,IAAK,MACD,GAAI0V,IAAS8R,EACT,OAAO3E,EAAKljB,GAEhB,MAEJ,IAAK,OACD,GAAImF,IAAS0iB,EACT,OAAO3E,EAAKljB,GAEhB,MAEJ,IAAK,QACD,GAAImjB,IAAW0E,EACX,OAAO3E,EAAKljB,GAEhB,WAEL,GAA6C,GAAzC,CAACmF,EAAM4Q,EAAMoN,GAAQnX,QAAQ6b,GACpC,OAAO3E,EAAKljB,IA2mBxB6pB,GAAQhO,gBAtmBR,SAA+Bpa,EAAKqH,GAChC,IAAIqf,EAAM1mB,EAAIqmB,OAASrmB,EAAIsmB,MAAQ,GAAM,EACzC,YAAaxlB,IAATuG,EACO1K,EAAMqD,EAAIqmB,OAAOhf,OAEjB1K,EAAMqD,EAAIqmB,OAAOhf,QAAUA,EAAOrH,EAAIkd,QAAUwJ,GAkmB/D0B,GAAQhH,cAjgBR,SAAuB3X,GAInB,OAHKnM,EAAWd,KAAM,mBAClB6kB,GAAiBjkB,KAAKZ,MAEnBiN,EAAWjN,KAAKqlB,eAAiBrlB,KAAKmlB,YA8fjDyG,GAAQhG,cAzgBR,SAAuB3Y,GAInB,OAHKnM,EAAWd,KAAM,mBAClB6kB,GAAiBjkB,KAAKZ,MAEnBiN,EAAWjN,KAAKolB,eAAiBplB,KAAKmlB,YAsgBjDyG,GAAQ/F,gBA5fR,SAAyB5Y,GAIrB,OAHKnM,EAAWd,KAAM,qBAClB6kB,GAAiBjkB,KAAKZ,MAEnBiN,EAAWjN,KAAKslB,iBAAmBtlB,KAAKmlB,YA0fnDyG,GAAQ/c,OAl9HR,SAAsBnM,EAAGN,GACrB,OAAKM,EAKEpC,EAAQN,KAAKogB,SACdpgB,KAAKogB,QAAQ1d,EAAEgJ,SACf1L,KAAKogB,SACApgB,KAAKogB,QAAQ+M,UAAY/d,IAAkBxF,KAAKxH,GAC3C,SACA,cACRM,EAAEgJ,SAVCpL,EAAQN,KAAKogB,SACdpgB,KAAKogB,QACLpgB,KAAKogB,QAAoB,YA+8HvCwL,GAAQhd,YAp8HR,SAA2BlM,EAAGN,GAC1B,OAAKM,EAKEpC,EAAQN,KAAKotB,cACdptB,KAAKotB,aAAa1qB,EAAEgJ,SACpB1L,KAAKotB,aACDhe,GAAiBxF,KAAKxH,GAAU,SAAW,cAC7CM,EAAEgJ,SARCpL,EAAQN,KAAKotB,cACdptB,KAAKotB,aACLptB,KAAKotB,aAAyB,YAi8H5CxB,GAAQ5c,YAz4HR,SAA2Bqe,EAAWjrB,EAAQE,GAC1C,IAAIP,EAAGsH,EAAK0D,EAEZ,GAAI/M,KAAKstB,kBACL,OAnDR,SAA2BD,EAAWjrB,EAAQE,GAC1C,IAAIP,EACAwrB,EACAlkB,EACAmkB,EAAMH,EAAUI,oBACpB,IAAKztB,KAAK0tB,aAKN,IAHA1tB,KAAK0tB,aAAe,GACpB1tB,KAAK2tB,iBAAmB,GACxB3tB,KAAK4tB,kBAAoB,GACpB7rB,EAAI,EAAGA,EAAI,KAAMA,EAClBsH,EAAMlH,EAAU,CAAC,IAAMJ,IACvB/B,KAAK4tB,kBAAkB7rB,GAAK/B,KAAK4O,YAC7BvF,EACA,IACFokB,oBACFztB,KAAK2tB,iBAAiB5rB,GAAK/B,KAAK6O,OAAOxF,EAAK,IAAIokB,oBAIxD,OAAInrB,EACe,QAAXF,GAEe,KADfmrB,EAAKxf,GAAQnN,KAAKZ,KAAK4tB,kBAAmBJ,IACvBD,EAAK,MAGT,KADfA,EAAKxf,GAAQnN,KAAKZ,KAAK2tB,iBAAkBH,IACtBD,EAAK,KAGb,QAAXnrB,GAEY,KADZmrB,EAAKxf,GAAQnN,KAAKZ,KAAK4tB,kBAAmBJ,MAK3B,KADfD,EAAKxf,GAAQnN,KAAKZ,KAAK2tB,iBAAkBH,IAF9BD,EAGa,MAGZ,KADZA,EAAKxf,GAAQnN,KAAKZ,KAAK2tB,iBAAkBH,MAK1B,KADfD,EAAKxf,GAAQnN,KAAKZ,KAAK4tB,kBAAmBJ,IAF/BD,EAGa,MASH3sB,KAAKZ,KAAMqtB,EAAWjrB,EAAQE,GAY3D,IATKtC,KAAK0tB,eACN1tB,KAAK0tB,aAAe,GACpB1tB,KAAK2tB,iBAAmB,GACxB3tB,KAAK4tB,kBAAoB,IAMxB7rB,EAAI,EAAGA,EAAI,GAAIA,IAAK,CAmBrB,GAjBAsH,EAAMlH,EAAU,CAAC,IAAMJ,IACnBO,IAAWtC,KAAK2tB,iBAAiB5rB,KACjC/B,KAAK2tB,iBAAiB5rB,GAAK,IAAIoL,OAC3B,IAAMnN,KAAK6O,OAAOxF,EAAK,IAAID,QAAQ,IAAK,IAAM,IAC9C,KAEJpJ,KAAK4tB,kBAAkB7rB,GAAK,IAAIoL,OAC5B,IAAMnN,KAAK4O,YAAYvF,EAAK,IAAID,QAAQ,IAAK,IAAM,IACnD,MAGH9G,GAAWtC,KAAK0tB,aAAa3rB,KAC9BgL,EACI,IAAM/M,KAAK6O,OAAOxF,EAAK,IAAM,KAAOrJ,KAAK4O,YAAYvF,EAAK,IAC9DrJ,KAAK0tB,aAAa3rB,GAAK,IAAIoL,OAAOJ,EAAM3D,QAAQ,IAAK,IAAK,MAI1D9G,GACW,SAAXF,GACApC,KAAK2tB,iBAAiB5rB,GAAG6H,KAAKyjB,GAE9B,OAAOtrB,EACJ,GACHO,GACW,QAAXF,GACApC,KAAK4tB,kBAAkB7rB,GAAG6H,KAAKyjB,GAE/B,OAAOtrB,EACJ,IAAKO,GAAUtC,KAAK0tB,aAAa3rB,GAAG6H,KAAKyjB,GAC5C,OAAOtrB,IA01HnB6pB,GAAQ7c,YAxxHR,SAAqB9B,GACjB,OAAIjN,KAAKstB,mBACAxsB,EAAWd,KAAM,iBAClB2P,GAAmB/O,KAAKZ,MAExBiN,EACOjN,KAAKmQ,mBAELnQ,KAAKiQ,eAGXnP,EAAWd,KAAM,kBAClBA,KAAKiQ,aAAeX,IAEjBtP,KAAKmQ,oBAAsBlD,EAC5BjN,KAAKmQ,mBACLnQ,KAAKiQ,eAywHnB2b,GAAQ9c,iBA7yHR,SAA0B7B,GACtB,OAAIjN,KAAKstB,mBACAxsB,EAAWd,KAAM,iBAClB2P,GAAmB/O,KAAKZ,MAExBiN,EACOjN,KAAKoQ,wBAELpQ,KAAKkQ,oBAGXpP,EAAWd,KAAM,uBAClBA,KAAKkQ,kBAAoBb,IAEtBrP,KAAKoQ,yBAA2BnD,EACjCjN,KAAKoQ,wBACLpQ,KAAKkQ,oBA8xHnB0b,GAAQxa,KArhHR,SAAoB/H,GAChB,OAAOoI,GAAWpI,EAAKrJ,KAAK4c,MAAM7L,IAAK/Q,KAAK4c,MAAM5L,KAAKI,MAqhH3Dwa,GAAQiC,eAzgHR,WACI,OAAO7tB,KAAK4c,MAAM5L,KAygHtB4a,GAAQkC,eA9gHR,WACI,OAAO9tB,KAAK4c,MAAM7L,KA+gHtB6a,GAAQxZ,SAz5GR,SAAwB1P,EAAGN,GACvB,IAAIgQ,EAAW9R,EAAQN,KAAK+tB,WACtB/tB,KAAK+tB,UACL/tB,KAAK+tB,UACDrrB,IAAW,IAANA,GAAc1C,KAAK+tB,UAAUZ,SAASvjB,KAAKxH,GAC1C,SACA,cAEhB,OAAa,IAANM,EACDoP,GAAcM,EAAUpS,KAAK4c,MAAM7L,KACnCrO,EACA0P,EAAS1P,EAAE2Q,OACXjB,GA84GVwZ,GAAQ1Z,YAn4GR,SAA2BxP,GACvB,OAAa,IAANA,EACDoP,GAAc9R,KAAKguB,aAAchuB,KAAK4c,MAAM7L,KAC5CrO,EACA1C,KAAKguB,aAAatrB,EAAE2Q,OACpBrT,KAAKguB,cA+3GfpC,GAAQzZ,cA54GR,SAA6BzP,GACzB,OAAa,IAANA,EACDoP,GAAc9R,KAAKiuB,eAAgBjuB,KAAK4c,MAAM7L,KAC9CrO,EACA1C,KAAKiuB,eAAevrB,EAAE2Q,OACtBrT,KAAKiuB,gBAw4GfrC,GAAQpZ,cApzGR,SAA6B0b,EAAa9rB,EAAQE,GAC9C,IAAIP,EAAGsH,EAAK0D,EAEZ,GAAI/M,KAAKmuB,oBACL,OA7ER,SAA6BD,EAAa9rB,EAAQE,GAC9C,IAAIP,EACAwrB,EACAlkB,EACAmkB,EAAMU,EAAYT,oBACtB,IAAKztB,KAAKouB,eAKN,IAJApuB,KAAKouB,eAAiB,GACtBpuB,KAAKquB,oBAAsB,GAC3BruB,KAAKsuB,kBAAoB,GAEpBvsB,EAAI,EAAGA,EAAI,IAAKA,EACjBsH,EAAMlH,EAAU,CAAC,IAAM,IAAIkR,IAAItR,GAC/B/B,KAAKsuB,kBAAkBvsB,GAAK/B,KAAKkS,YAC7B7I,EACA,IACFokB,oBACFztB,KAAKquB,oBAAoBtsB,GAAK/B,KAAKmS,cAC/B9I,EACA,IACFokB,oBACFztB,KAAKouB,eAAersB,GAAK/B,KAAKoS,SAAS/I,EAAK,IAAIokB,oBAIxD,OAAInrB,EACe,SAAXF,GAEe,KADfmrB,EAAKxf,GAAQnN,KAAKZ,KAAKouB,eAAgBZ,IACpBD,EAAK,KACN,QAAXnrB,GAEQ,KADfmrB,EAAKxf,GAAQnN,KAAKZ,KAAKquB,oBAAqBb,IACzBD,EAAK,MAGT,KADfA,EAAKxf,GAAQnN,KAAKZ,KAAKsuB,kBAAmBd,IACvBD,EAAK,KAGb,SAAXnrB,GAEY,KADZmrB,EAAKxf,GAAQnN,KAAKZ,KAAKouB,eAAgBZ,MAK3B,KADZD,EAAKxf,GAAQnN,KAAKZ,KAAKquB,oBAAqBb,MAK7B,KADfD,EAAKxf,GAAQnN,KAAKZ,KAAKsuB,kBAAmBd,IAN/BD,EAOa,KACN,QAAXnrB,GAEK,KADZmrB,EAAKxf,GAAQnN,KAAKZ,KAAKquB,oBAAqBb,MAKhC,KADZD,EAAKxf,GAAQnN,KAAKZ,KAAKouB,eAAgBZ,MAKxB,KADfD,EAAKxf,GAAQnN,KAAKZ,KAAKsuB,kBAAmBd,IAN/BD,EAOa,MAGZ,KADZA,EAAKxf,GAAQnN,KAAKZ,KAAKsuB,kBAAmBd,MAK9B,KADZD,EAAKxf,GAAQnN,KAAKZ,KAAKouB,eAAgBZ,MAKxB,KADfD,EAAKxf,GAAQnN,KAAKZ,KAAKquB,oBAAqBb,IANjCD,EAOa,MASD3sB,KAAKZ,KAAMkuB,EAAa9rB,EAAQE,GAU/D,IAPKtC,KAAKouB,iBACNpuB,KAAKouB,eAAiB,GACtBpuB,KAAKsuB,kBAAoB,GACzBtuB,KAAKquB,oBAAsB,GAC3BruB,KAAKuuB,mBAAqB,IAGzBxsB,EAAI,EAAGA,EAAI,EAAGA,IAAK,CA6BpB,GA1BAsH,EAAMlH,EAAU,CAAC,IAAM,IAAIkR,IAAItR,GAC3BO,IAAWtC,KAAKuuB,mBAAmBxsB,KACnC/B,KAAKuuB,mBAAmBxsB,GAAK,IAAIoL,OAC7B,IAAMnN,KAAKoS,SAAS/I,EAAK,IAAID,QAAQ,IAAK,QAAU,IACpD,KAEJpJ,KAAKquB,oBAAoBtsB,GAAK,IAAIoL,OAC9B,IAAMnN,KAAKmS,cAAc9I,EAAK,IAAID,QAAQ,IAAK,QAAU,IACzD,KAEJpJ,KAAKsuB,kBAAkBvsB,GAAK,IAAIoL,OAC5B,IAAMnN,KAAKkS,YAAY7I,EAAK,IAAID,QAAQ,IAAK,QAAU,IACvD,MAGHpJ,KAAKouB,eAAersB,KACrBgL,EACI,IACA/M,KAAKoS,SAAS/I,EAAK,IACnB,KACArJ,KAAKmS,cAAc9I,EAAK,IACxB,KACArJ,KAAKkS,YAAY7I,EAAK,IAC1BrJ,KAAKouB,eAAersB,GAAK,IAAIoL,OAAOJ,EAAM3D,QAAQ,IAAK,IAAK,MAI5D9G,GACW,SAAXF,GACApC,KAAKuuB,mBAAmBxsB,GAAG6H,KAAKskB,GAEhC,OAAOnsB,EACJ,GACHO,GACW,QAAXF,GACApC,KAAKquB,oBAAoBtsB,GAAG6H,KAAKskB,GAEjC,OAAOnsB,EACJ,GACHO,GACW,OAAXF,GACApC,KAAKsuB,kBAAkBvsB,GAAG6H,KAAKskB,GAE/B,OAAOnsB,EACJ,IAAKO,GAAUtC,KAAKouB,eAAersB,GAAG6H,KAAKskB,GAC9C,OAAOnsB,IAwvGnB6pB,GAAQrZ,cA3sGR,SAAuBtF,GACnB,OAAIjN,KAAKmuB,qBACArtB,EAAWd,KAAM,mBAClBgT,GAAqBpS,KAAKZ,MAE1BiN,EACOjN,KAAKyT,qBAELzT,KAAKsT,iBAGXxS,EAAWd,KAAM,oBAClBA,KAAKsT,eAAiBT,IAEnB7S,KAAKyT,sBAAwBxG,EAC9BjN,KAAKyT,qBACLzT,KAAKsT,iBA4rGnBsY,GAAQtZ,mBAxrGR,SAA4BrF,GACxB,OAAIjN,KAAKmuB,qBACArtB,EAAWd,KAAM,mBAClBgT,GAAqBpS,KAAKZ,MAE1BiN,EACOjN,KAAK0T,0BAEL1T,KAAKuT,sBAGXzS,EAAWd,KAAM,yBAClBA,KAAKuT,oBAAsBT,IAExB9S,KAAK0T,2BAA6BzG,EACnCjN,KAAK0T,0BACL1T,KAAKuT,sBAyqGnBqY,GAAQvZ,iBArqGR,SAA0BpF,GACtB,OAAIjN,KAAKmuB,qBACArtB,EAAWd,KAAM,mBAClBgT,GAAqBpS,KAAKZ,MAE1BiN,EACOjN,KAAK2T,wBAEL3T,KAAKwT,oBAGX1S,EAAWd,KAAM,uBAClBA,KAAKwT,kBAAoBT,IAEtB/S,KAAK2T,yBAA2B1G,EACjCjN,KAAK2T,wBACL3T,KAAKwT,oBAupGnBoY,GAAQvX,KAr+FR,SAAoB9T,GAGhB,MAAgD,OAAxCA,EAAQ,IAAI2J,cAAcskB,OAAO,IAm+F7C5C,GAAQnoB,SAz9FR,SAAwBoQ,EAAOE,EAAS0a,GACpC,OAAY,GAAR5a,EACO4a,EAAU,KAAO,KAEjBA,EAAU,KAAO,MAijGhCjX,GAAmB,KAAM,CACrByN,KAAM,CACF,CACI4E,MAAO,aACPC,MAAQoD,EAAAA,EACRxM,OAAQ,EACRxZ,KAAM,cACNge,OAAQ,KACRpN,KAAM,MAEV,CACI+R,MAAO,aACPC,OAAQoD,EAAAA,EACRxM,OAAQ,EACRxZ,KAAM,gBACNge,OAAQ,KACRpN,KAAM,OAGdpC,uBAAwB,uBACxB9M,QAAS,SAAUjB,GACf,IAAI3G,EAAI2G,EAAS,GAWjB,OAAOA,GATgC,IAA/BsD,EAAOtD,EAAS,IAAO,IACjB,KACM,GAAN3G,EACA,KACM,GAANA,EACA,KACM,GAANA,EACA,KACA,SAOtBb,EAAMikB,KAAO/d,EACT,wDACAmR,IAEJrX,EAAMuuB,SAAWroB,EACb,gEACAuR,IAGJ,IAAI+W,GAAU5mB,KAAKC,IAmBnB,SAAS4mB,GAAcrP,EAAUhf,EAAO6K,EAAOqX,GAC3C,IAAIxD,EAAQ6C,GAAevhB,EAAO6K,GAMlC,OAJAmU,EAASW,eAAiBuC,EAAYxD,EAAMiB,cAC5CX,EAASY,OAASsC,EAAYxD,EAAMkB,MACpCZ,EAASa,SAAWqC,EAAYxD,EAAMmB,QAE/Bb,EAASe,UAapB,SAASuO,GAAQlnB,GACb,OAAIA,EAAS,EACFI,KAAKiD,MAAMrD,GAEXI,KAAKgD,KAAKpD,GA2DzB,SAASmnB,GAAajP,GAGlB,OAAe,KAAPA,EAAe,OAG3B,SAASkP,GAAalgB,GAElB,OAAiB,OAATA,EAAmB,KA4D/B,SAASmgB,GAAOC,GACZ,OAAO,WACH,OAAOjvB,KAAKkvB,GAAGD,IAIvB,IAAIE,GAAiBH,GAAO,MACxBI,GAAYJ,GAAO,KACnBK,GAAYL,GAAO,KACnBM,GAAUN,GAAO,KACjBO,GAASP,GAAO,KAChBQ,GAAUR,GAAO,KACjBS,GAAWT,GAAO,KAClBU,GAAaV,GAAO,KACpBW,GAAUX,GAAO,KAWrB,SAASY,GAAW1oB,GAChB,OAAO,WACH,OAAOlH,KAAK4D,UAAY5D,KAAKqgB,MAAMnZ,GAAQxC,KAInD,IAAIob,GAAe8P,GAAW,gBAC1B1b,GAAU0b,GAAW,WACrB7b,GAAU6b,GAAW,WACrB/b,GAAQ+b,GAAW,SACnB/P,GAAO+P,GAAW,QAClB/gB,GAAS+gB,GAAW,UACpBpQ,GAAQoQ,GAAW,SAMvB,IAAInP,GAAQ1Y,KAAK0Y,MACboP,GAAa,CACT/Z,GAAI,GACJpI,EAAG,GACHhL,EAAG,GACHsT,EAAG,GACHvD,EAAG,GACH0D,EAAG,KACHE,EAAG,IAQX,SAASyZ,GAAeC,EAAgBrI,EAAemI,EAAYxtB,GAC/D,IAAIkd,EAAWuC,GAAeiO,GAAgB/nB,MAC1CkM,EAAUuM,GAAMlB,EAAS2P,GAAG,MAC5Bnb,EAAU0M,GAAMlB,EAAS2P,GAAG,MAC5Brb,EAAQ4M,GAAMlB,EAAS2P,GAAG,MAC1BrP,EAAOY,GAAMlB,EAAS2P,GAAG,MACzBrgB,EAAS4R,GAAMlB,EAAS2P,GAAG,MAC3BvP,EAAQc,GAAMlB,EAAS2P,GAAG,MAC1B1P,EAAQiB,GAAMlB,EAAS2P,GAAG,MAC1BnuB,GACKmT,GAAW2b,EAAW/Z,GAAM,CAAC,IAAK5B,GAClCA,EAAU2b,EAAWniB,GAAK,CAAC,KAAMwG,KACjCH,GAAW,GAAK,CAAC,MACjBA,EAAU8b,EAAWntB,GAAK,CAAC,KAAMqR,IACjCF,GAAS,GAAK,CAAC,MACfA,EAAQgc,EAAW7Z,GAAK,CAAC,KAAMnC,IAC/BgM,GAAQ,GAAK,CAAC,MACdA,EAAOgQ,EAAWpd,GAAK,CAAC,KAAMoN,GAgBvC,OAdoB,MAAhBgQ,EAAW1Z,IACXpV,EACIA,GACC4e,GAAS,GAAK,CAAC,MACfA,EAAQkQ,EAAW1Z,GAAK,CAAC,KAAMwJ,KAExC5e,EAAIA,GACC8N,GAAU,GAAK,CAAC,MAChBA,EAASghB,EAAWxZ,GAAK,CAAC,KAAMxH,IAChC2Q,GAAS,GAAK,CAAC,MAAS,CAAC,KAAMA,IAElC,GAAKkI,EACP3mB,EAAE,GAAuB,GAAjBgvB,EACRhvB,EAAE,GAAKsB,EApCX,SAA2ByX,EAAQnS,EAAQ+f,EAAemF,EAAUxqB,GAChE,OAAOA,EAAOsT,aAAahO,GAAU,IAAK+f,EAAe5N,EAAQ+S,IAoCxCzsB,MAAM,KAAMW,GAgEzC,IAAIivB,GAAQjoB,KAAKC,IAEjB,SAAS6Y,GAAKpS,GACV,OAAY,EAAJA,IAAUA,EAAI,KAAOA,EAGjC,SAASwhB,KAQL,IAAKjwB,KAAK4D,UACN,OAAO5D,KAAK+I,aAAaS,cAG7B,IAGIuK,EACAF,EACA2L,EACA9R,EAEAwiB,EACAC,EACAC,EACAC,EAXAnc,EAAU8b,GAAMhwB,KAAKkgB,eAAiB,IACtCL,EAAOmQ,GAAMhwB,KAAKmgB,OAClBtR,EAASmhB,GAAMhwB,KAAKogB,SAKpBkQ,EAAQtwB,KAAKovB,YAMjB,OAAKkB,GAOLvc,EAAUjJ,EAASoJ,EAAU,IAC7BL,EAAQ/I,EAASiJ,EAAU,IAC3BG,GAAW,GACXH,GAAW,GAGXyL,EAAQ1U,EAAS+D,EAAS,IAC1BA,GAAU,GAGVnB,EAAIwG,EAAUA,EAAQqc,QAAQ,GAAGnnB,QAAQ,SAAU,IAAM,GAEzD8mB,EAAYI,EAAQ,EAAI,IAAM,GAC9BH,EAAStP,GAAK7gB,KAAKogB,WAAaS,GAAKyP,GAAS,IAAM,GACpDF,EAAWvP,GAAK7gB,KAAKmgB,SAAWU,GAAKyP,GAAS,IAAM,GACpDD,EAAUxP,GAAK7gB,KAAKkgB,iBAAmBW,GAAKyP,GAAS,IAAM,GAGvDJ,EACA,KACC1Q,EAAQ2Q,EAAS3Q,EAAQ,IAAM,KAC/B3Q,EAASshB,EAASthB,EAAS,IAAM,KACjCgR,EAAOuQ,EAAWvQ,EAAO,IAAM,KAC/BhM,GAASE,GAAWG,EAAU,IAAM,KACpCL,EAAQwc,EAAUxc,EAAQ,IAAM,KAChCE,EAAUsc,EAAUtc,EAAU,IAAM,KACpCG,EAAUmc,EAAU3iB,EAAI,IAAM,KA9BxB,MAkCf,IAAI8iB,GAAUlR,GAAS5e,UAwGvB,OAtGA8vB,GAAQ5sB,QA/3ER,WACI,OAAO5D,KAAK6D,UA+3EhB2sB,GAAQxoB,IA3YR,WACI,IAAI2P,EAAO3X,KAAKqgB,MAahB,OAXArgB,KAAKkgB,cAAgByO,GAAQ3uB,KAAKkgB,eAClClgB,KAAKmgB,MAAQwO,GAAQ3uB,KAAKmgB,OAC1BngB,KAAKogB,QAAUuO,GAAQ3uB,KAAKogB,SAE5BzI,EAAKmI,aAAe6O,GAAQhX,EAAKmI,cACjCnI,EAAKzD,QAAUya,GAAQhX,EAAKzD,SAC5ByD,EAAK5D,QAAU4a,GAAQhX,EAAK5D,SAC5B4D,EAAK9D,MAAQ8a,GAAQhX,EAAK9D,OAC1B8D,EAAK9I,OAAS8f,GAAQhX,EAAK9I,QAC3B8I,EAAK6H,MAAQmP,GAAQhX,EAAK6H,OAEnBxf,MA8XXwwB,GAAQzR,IAhXR,SAAexe,EAAO6K,GAClB,OAAOwjB,GAAc5uB,KAAMO,EAAO6K,EAAO,IAgX7ColB,GAAQzN,SA5WR,SAAoBxiB,EAAO6K,GACvB,OAAOwjB,GAAc5uB,KAAMO,EAAO6K,GAAQ,IA4W9ColB,GAAQtB,GA/RR,SAAY9kB,GACR,IAAKpK,KAAK4D,UACN,OAAOc,IAEX,IAAImb,EACAhR,EACAiR,EAAe9f,KAAKkgB,cAIxB,GAAc,WAFd9V,EAAQD,EAAeC,KAEY,YAAVA,GAAiC,SAAVA,EAG5C,OAFAyV,EAAO7f,KAAKmgB,MAAQL,EAAe,MACnCjR,EAAS7O,KAAKogB,QAAU0O,GAAajP,GAC7BzV,GACJ,IAAK,QACD,OAAOyE,EACX,IAAK,UACD,OAAOA,EAAS,EACpB,IAAK,OACD,OAAOA,EAAS,QAKxB,OADAgR,EAAO7f,KAAKmgB,MAAQpY,KAAK0Y,MAAMsO,GAAa/uB,KAAKogB,UACzChW,GACJ,IAAK,OACD,OAAOyV,EAAO,EAAIC,EAAe,OACrC,IAAK,MACD,OAAOD,EAAOC,EAAe,MACjC,IAAK,OACD,OAAc,GAAPD,EAAYC,EAAe,KACtC,IAAK,SACD,OAAc,KAAPD,EAAcC,EAAe,IACxC,IAAK,SACD,OAAc,MAAPD,EAAeC,EAAe,IAEzC,IAAK,cACD,OAAO/X,KAAKiD,MAAa,MAAP6U,GAAgBC,EACtC,QACI,MAAM,IAAIjZ,MAAM,gBAAkBuD,KAyPlDomB,GAAQrB,eAAiBA,GACzBqB,GAAQpB,UAAYA,GACpBoB,GAAQnB,UAAYA,GACpBmB,GAAQlB,QAAUA,GAClBkB,GAAQjB,OAASA,GACjBiB,GAAQhB,QAAUA,GAClBgB,GAAQf,SAAWA,GACnBe,GAAQd,WAAaA,GACrBc,GAAQb,QAAUA,GAClBa,GAAQtuB,QA5PR,WACI,OAAKlC,KAAK4D,UAIN5D,KAAKkgB,cACQ,MAAblgB,KAAKmgB,MACJngB,KAAKogB,QAAU,GAAM,OACK,QAA3BnV,EAAMjL,KAAKogB,QAAU,IANd1b,KA2Pf8rB,GAAQlQ,QA5WR,WACI,IAIIpM,EACAH,EACAF,EACA2L,EACAiR,EARA3Q,EAAe9f,KAAKkgB,cACpBL,EAAO7f,KAAKmgB,MACZtR,EAAS7O,KAAKogB,QACdzI,EAAO3X,KAAKqgB,MAgDhB,OArCyB,GAAhBP,GAA6B,GAARD,GAAuB,GAAVhR,GAClCiR,GAAgB,GAAKD,GAAQ,GAAKhR,GAAU,IAGjDiR,GAAuD,MAAvC+O,GAAQE,GAAalgB,GAAUgR,GAE/ChR,EADAgR,EAAO,GAMXlI,EAAKmI,aAAeA,EAAe,IAEnC5L,EAAUpJ,EAASgV,EAAe,KAClCnI,EAAKzD,QAAUA,EAAU,GAEzBH,EAAUjJ,EAASoJ,EAAU,IAC7ByD,EAAK5D,QAAUA,EAAU,GAEzBF,EAAQ/I,EAASiJ,EAAU,IAC3B4D,EAAK9D,MAAQA,EAAQ,GAErBgM,GAAQ/U,EAAS+I,EAAQ,IAIzBhF,GADA4hB,EAAiB3lB,EAASgkB,GAAajP,IAEvCA,GAAQgP,GAAQE,GAAa0B,IAG7BjR,EAAQ1U,EAAS+D,EAAS,IAC1BA,GAAU,GAEV8I,EAAKkI,KAAOA,EACZlI,EAAK9I,OAASA,EACd8I,EAAK6H,MAAQA,EAENxf,MAyTXwwB,GAAQlP,MAlOR,WACI,OAAOQ,GAAe9hB,OAkO1BwwB,GAAQ/kB,IA/NR,SAAerB,GAEX,OADAA,EAAQD,EAAeC,GAChBpK,KAAK4D,UAAY5D,KAAKoK,EAAQ,OAAS1F,KA8NlD8rB,GAAQ1Q,aAAeA,GACvB0Q,GAAQtc,QAAUA,GAClBsc,GAAQzc,QAAUA,GAClByc,GAAQ3c,MAAQA,GAChB2c,GAAQ3Q,KAAOA,GACf2Q,GAAQ7Q,MAlNR,WACI,OAAO7U,EAAS9K,KAAK6f,OAAS,IAkNlC2Q,GAAQ3hB,OAASA,GACjB2hB,GAAQhR,MAAQA,GAChBgR,GAAQ7I,SAlIR,SAAkB+I,EAAeC,GAC7B,IAAK3wB,KAAK4D,UACN,OAAO5D,KAAK+I,aAAaS,cAG7B,IAEInH,EACAiH,EAHAsnB,GAAa,EACbC,EAAKhB,GAyBT,MArB6B,iBAAlBa,IACPC,EAAgBD,EAChBA,GAAgB,GAES,kBAAlBA,IACPE,EAAaF,GAEY,iBAAlBC,IACPE,EAAKpwB,OAAOqwB,OAAO,GAAIjB,GAAYc,GACZ,MAAnBA,EAAcjjB,GAAiC,MAApBijB,EAAc7a,KACzC+a,EAAG/a,GAAK6a,EAAcjjB,EAAI,IAIlCrL,EAASrC,KAAK+I,aACdO,EAASwmB,GAAe9vB,MAAO4wB,EAAYC,EAAIxuB,GAE3CuuB,IACAtnB,EAASjH,EAAO0qB,YAAY/sB,KAAMsJ,IAG/BjH,EAAOolB,WAAWne,IAoG7BknB,GAAQxH,YAAciH,GACtBO,GAAQ7vB,SAAWsvB,GACnBO,GAAQ/G,OAASwG,GACjBO,GAAQnuB,OAASA,GACjBmuB,GAAQznB,WAAaA,GAErBynB,GAAQO,YAAc1qB,EAClB,sFACA4pB,IAEJO,GAAQpM,KAAOA,GAIf3b,EAAe,IAAK,EAAG,EAAG,QAC1BA,EAAe,IAAK,EAAG,EAAG,WAI1BqE,GAAc,IAAKJ,IACnBI,GAAc,IA9tJO,wBA+tJrBc,GAAc,IAAK,SAAUrN,EAAO2I,EAAOpD,GACvCA,EAAO5B,GAAK,IAAIxC,KAAyB,IAApBse,WAAWzf,MAEpCqN,GAAc,IAAK,SAAUrN,EAAO2I,EAAOpD,GACvCA,EAAO5B,GAAK,IAAIxC,KAAKuJ,EAAM1K,MAK/BJ,EAAM6wB,QAAU,SA/9KZ/wB,EAi+KY0c,GAEhBxc,EAAM0B,GAAK6kB,GACXvmB,EAAMsP,IAv/EN,WAGI,OAAO0P,GAAO,WAFH,GAAGxY,MAAM/F,KAAKP,UAAW,KAu/ExCF,EAAMgI,IAl/EN,WAGI,OAAOgX,GAAO,UAFH,GAAGxY,MAAM/F,KAAKP,UAAW,KAk/ExCF,EAAM0b,IA7+EI,WACN,OAAOna,KAAKma,IAAMna,KAAKma,OAAS,IAAIna,MA6+ExCvB,EAAMqC,IAAML,EACZhC,EAAMupB,KA1oBN,SAAoBnpB,GAChB,OAAOoc,GAAoB,IAARpc,IA0oBvBJ,EAAM0O,OAlhBN,SAAoBzM,EAAQ0pB,GACxB,OAAOG,GAAe7pB,EAAQ0pB,EAAO,WAkhBzC3rB,EAAMsB,OAASA,EACftB,EAAMkC,OAASmV,GACfrX,EAAM2iB,QAAUre,EAChBtE,EAAMof,SAAWuC,GACjB3hB,EAAM6F,SAAWA,EACjB7F,EAAMiS,SAhhBN,SAAsBga,EAAchqB,EAAQ0pB,GACxC,OAAOK,GAAiBC,EAAchqB,EAAQ0pB,EAAO,aAghBzD3rB,EAAMyqB,UA9oBN,WACI,OAAOjO,GAAYvc,MAAM,KAAMC,WAAWuqB,aA8oB9CzqB,EAAM4I,WAAa6O,GACnBzX,EAAMogB,WAAaA,GACnBpgB,EAAMyO,YAxhBN,SAAyBxM,EAAQ0pB,GAC7B,OAAOG,GAAe7pB,EAAQ0pB,EAAO,gBAwhBzC3rB,EAAM+R,YA7gBN,SAAyBka,EAAchqB,EAAQ0pB,GAC3C,OAAOK,GAAiBC,EAAchqB,EAAQ0pB,EAAO,gBA6gBzD3rB,EAAM0X,aAAeA,GACrB1X,EAAM8wB,aAn4GN,SAAsB/pB,EAAMpB,GACxB,IACQzD,EACA6uB,EACA5pB,EAsCR,OAzCc,MAAVxB,GAGIwB,EAAesN,GAEE,MAAjB6B,GAAQvP,IAA+C,MAA9BuP,GAAQvP,GAAM8Q,aAEvCvB,GAAQvP,GAAMO,IAAIJ,EAAaoP,GAAQvP,GAAM6Q,QAASjS,KAIrC,OADjBorB,EAAYla,GAAW9P,MAEnBI,EAAe4pB,EAAUnZ,SAE7BjS,EAASuB,EAAaC,EAAcxB,GACnB,MAAborB,IAIAprB,EAAOgS,KAAO5Q,IAElB7E,EAAS,IAAImF,EAAO1B,IACbkS,aAAevB,GAAQvP,GAC9BuP,GAAQvP,GAAQ7E,GAIpBmV,GAAmBtQ,IAGE,MAAjBuP,GAAQvP,KAC0B,MAA9BuP,GAAQvP,GAAM8Q,cACdvB,GAAQvP,GAAQuP,GAAQvP,GAAM8Q,aAC1B9Q,IAASsQ,MACTA,GAAmBtQ,IAEC,MAAjBuP,GAAQvP,WACRuP,GAAQvP,IAIpBuP,GAAQvP,IA01GnB/G,EAAMsW,QA/zGN,WACI,OAAO1P,EAAK0P,KA+zGhBtW,EAAMgS,cArhBN,SAA2Bia,EAAchqB,EAAQ0pB,GAC7C,OAAOK,GAAiBC,EAAchqB,EAAQ0pB,EAAO,kBAqhBzD3rB,EAAMgK,eAAiBA,EACvBhK,EAAMgxB,qBAtNN,SAAoCC,GAChC,YAAyB9sB,IAArB8sB,EACO3Q,GAEqB,mBAArB2Q,IACP3Q,GAAQ2Q,GACD,IAiNfjxB,EAAMkxB,sBA3MN,SAAqCC,EAAWC,GAC5C,YAA8BjtB,IAA1BurB,GAAWyB,UAGDhtB,IAAVitB,EACO1B,GAAWyB,IAEtBzB,GAAWyB,GAAaC,EACN,MAAdD,IACAzB,GAAW/Z,GAAKyb,EAAQ,IAErB,KAiMXpxB,EAAM8mB,eAr5DN,SAA2BuK,EAAU3V,GACjC,IAAIwF,EAAOmQ,EAASnQ,KAAKxF,EAAK,QAAQ,GACtC,OAAOwF,GAAQ,EACT,WACAA,GAAQ,EACR,WACAA,EAAO,EACP,UACAA,EAAO,EACP,UACAA,EAAO,EACP,UACAA,EAAO,EACP,WACA,YAw4DVlhB,EAAMO,UAAYgmB,GAGlBvmB,EAAMsxB,UAAY,CACdC,eAAgB,mBAChBC,uBAAwB,sBACxBC,kBAAmB,0BACnB1jB,KAAM,aACN2jB,KAAM,QACNC,aAAc,WACdC,QAAS,eACTxjB,KAAM,aACNN,MAAO,WAGJ9N"}
\ No newline at end of file
diff --git a/admin/js/vendors/slimselect/slimselect.css b/admin/js/vendors/slimselect/slimselect.css
new file mode 100644 (file)
index 0000000..2a8df02
--- /dev/null
@@ -0,0 +1,398 @@
+.ss-main {
+  position   : relative;
+  display    : inline-block;
+  user-select: none;
+  color      : #666;
+  width      : 100%;
+  font-size: 11pt;
+  color: #000;
+}
+
+.ss-main .ss-single-selected {
+  display         : flex;
+  cursor          : pointer;
+  width           : 100%;
+  height          : 30px;
+  padding         : 6px;
+  /* border          : 1px solid #dcdee2;
+  border-radius   : 4px; */
+  background-color: #fff;
+  outline         : 0;
+  box-sizing      : border-box;
+  /* transition      : background-color .2s */
+}
+
+.ss-main .ss-single-selected.ss-disabled {
+  background-color: #dcdee2;
+  cursor          : not-allowed
+}
+
+.ss-main .ss-single-selected.ss-open-above {
+  border-top-left-radius : 0px;
+  border-top-right-radius: 0px
+}
+
+.ss-main .ss-single-selected.ss-open-below {
+  border-bottom-left-radius : 0px;
+  border-bottom-right-radius: 0px
+}
+
+.ss-main .ss-single-selected .placeholder {
+  display            : flex;
+  flex               : 1 1 100%;
+  align-items        : center;
+  overflow           : hidden;
+  text-overflow      : ellipsis;
+  white-space        : nowrap;
+  text-align         : left;
+  width              : calc(100% - 30px);
+  line-height        : 1em;
+  -webkit-user-select: none;
+  -moz-user-select   : none;
+  -ms-user-select    : none;
+  user-select        : none
+}
+
+.ss-main .ss-single-selected .placeholder * {
+  display      : flex;
+  align-items  : center;
+  overflow     : hidden;
+  text-overflow: ellipsis;
+  white-space  : nowrap;
+  width        : auto
+}
+
+.ss-main .ss-single-selected .placeholder .ss-disabled {
+  color: #dedede
+}
+
+.ss-main .ss-single-selected .ss-deselect {
+  display        : flex;
+  align-items    : center;
+  justify-content: flex-end;
+  flex           : 0 1 auto;
+  margin         : 0 6px 0 6px;
+  font-weight    : bold
+}
+
+.ss-main .ss-single-selected .ss-deselect.ss-hide {
+  display: none
+}
+
+.ss-main .ss-single-selected .ss-arrow {
+  display        : flex;
+  align-items    : center;
+  justify-content: flex-end;
+  flex           : 0 1 auto;
+  margin         : 0 6px 0 6px
+}
+
+.ss-main .ss-single-selected .ss-arrow span {
+  border      : solid #666;
+  border-width: 0 2px 2px 0;
+  display     : inline-block;
+  padding     : 3px;
+  transition  : transform .2s, margin .2s
+}
+
+.ss-main .ss-single-selected .ss-arrow span.arrow-up {
+  transform: rotate(-135deg);
+  margin   : 3px 0 0 0
+}
+
+.ss-main .ss-single-selected .ss-arrow span.arrow-down {
+  transform: rotate(45deg);
+  margin   : -3px 0 0 0
+}
+
+.ss-main .ss-multi-selected {
+  display         : flex;
+  flex-direction  : row;
+  cursor          : pointer;
+  min-height      : 30px;
+  width           : 100%;
+  padding         : 0 0 0 3px;
+  /* border          : 1px solid #dcdee2; */
+  /* border-radius   : 4px; */
+  font-size: 11pt;
+  background-color: #fff;
+  outline         : 0;
+  box-sizing      : border-box;
+  transition      : background-color .2s
+}
+
+.ss-main .ss-multi-selected.ss-disabled {
+  background-color: #dcdee2;
+  cursor          : not-allowed
+}
+
+.ss-main .ss-multi-selected.ss-disabled .ss-values .ss-disabled {
+  color: #666
+}
+
+.ss-main .ss-multi-selected.ss-disabled .ss-values .ss-value .ss-value-delete {
+  cursor: not-allowed
+}
+
+.ss-main .ss-multi-selected.ss-open-above {
+  border-top-left-radius : 0px;
+  border-top-right-radius: 0px
+}
+
+.ss-main .ss-multi-selected.ss-open-below {
+  border-bottom-left-radius : 0px;
+  border-bottom-right-radius: 0px
+}
+
+.ss-main .ss-multi-selected .ss-values {
+  display        : flex;
+  flex-wrap      : wrap;
+  justify-content: flex-start;
+  flex           : 1 1 100%;
+  width          : calc(100% - 30px)
+}
+
+.ss-main .ss-multi-selected .ss-values .ss-disabled {
+  display      : flex;
+  padding      : 4px 5px;
+  margin       : 2px 0px;
+  line-height  : 1em;
+  align-items  : center;
+  width        : 100%;
+  color        : #dedede;
+  overflow     : hidden;
+  text-overflow: ellipsis;
+  white-space  : nowrap
+}
+
+@keyframes scaleIn {
+  0% {
+    transform: scale(0);
+    opacity  : 0
+  }
+
+  100% {
+    transform: scale(1);
+    opacity  : 1
+  }
+}
+
+@keyframes scaleOut {
+  0% {
+    transform: scale(1);
+    opacity  : 1
+  }
+
+  100% {
+    transform: scale(0);
+    opacity  : 0
+  }
+}
+
+.ss-main .ss-multi-selected .ss-values .ss-value {
+  display                  : flex;
+  user-select              : none;
+  align-items              : center;
+  font-size                : 12px;
+  padding                  : 3px 5px;
+  margin                   : 1px 1px;
+  color                    : #000;
+  font-size: 11pt;
+  background-color         : #9ABCEA;
+  border-radius            : 2px;
+  animation-name           : scaleIn;
+  animation-duration       : .2s;
+  animation-timing-function: ease-out;
+  animation-fill-mode      : both
+}
+
+.ss-main .ss-multi-selected .ss-values .ss-value.ss-out {
+  animation-name           : scaleOut;
+  animation-duration       : .2s;
+  animation-timing-function: ease-out
+}
+
+.ss-main .ss-multi-selected .ss-values .ss-value .ss-value-delete {
+  margin: 0 0 0 5px;
+  cursor: pointer;
+  color: #f00;
+}
+
+.ss-main .ss-multi-selected .ss-add {
+  display: flex;
+  flex   : 0 1 3px;
+  margin : 9px 12px 0 5px
+}
+
+.ss-main .ss-multi-selected .ss-add .ss-plus {
+  display        : flex;
+  justify-content: center;
+  align-items    : center;
+  background     : #666;
+  position       : relative;
+  height         : 10px;
+  width          : 2px;
+  transition     : transform .2s
+}
+
+.ss-main .ss-multi-selected .ss-add .ss-plus:after {
+  background: #666;
+  content   : "";
+  position  : absolute;
+  height    : 2px;
+  width     : 10px;
+  left      : -4px;
+  top       : 4px
+}
+
+.ss-main .ss-multi-selected .ss-add .ss-plus.ss-cross {
+  transform: rotate(45deg)
+}
+
+.ss-content {
+  position        : absolute;
+  width           : 100%;
+  margin          : -1px 0 0 0;
+  box-sizing      : border-box;
+  border          : solid 1px #dcdee2;
+  z-index         : 1010;
+  background-color: #fff;
+  transform-origin: center top;
+  transition      : transform .2s, opacity .2s;
+  opacity         : 0;
+  transform       : scaleY(0)
+}
+
+.ss-content.ss-open {
+  display  : block;
+  opacity  : 1;
+  transform: scaleY(1)
+}
+
+.ss-content .ss-search {
+  display       : flex;
+  flex-direction: row;
+  padding       : 8px 8px 6px 8px
+}
+
+.ss-content .ss-search.ss-hide {
+  height : 0px;
+  opacity: 0;
+  padding: 0px 0px 0px 0px;
+  margin : 0px 0px 0px 0px
+}
+
+.ss-content .ss-search.ss-hide input {
+  height : 0px;
+  opacity: 0;
+  padding: 0px 0px 0px 0px;
+  margin : 0px 0px 0px 0px
+}
+
+.ss-content .ss-search input {
+  display           : inline-flex;
+  font-size         : inherit;
+  line-height       : inherit;
+  flex              : 1 1 auto;
+  width             : 100%;
+  min-width         : 0px;
+  height            : 30px;
+  padding           : 6px 8px;
+  margin            : 0;
+  border            : 1px solid #dcdee2;
+  border-radius     : 4px;
+  background-color  : #fff;
+  outline           : 0;
+  text-align        : left;
+  box-sizing        : border-box;
+  -webkit-box-sizing: border-box;
+  -webkit-appearance: textfield
+}
+
+.ss-content .ss-search input::placeholder {
+  color         : #8a8a8a;
+  vertical-align: middle
+}
+
+.ss-content .ss-search input:focus {
+  box-shadow: 0 0 5px #5897fb
+}
+
+.ss-content .ss-search .ss-addable {
+  display        : inline-flex;
+  justify-content: center;
+  align-items    : center;
+  cursor         : pointer;
+  font-size      : 22px;
+  font-weight    : bold;
+  flex           : 0 0 30px;
+  height         : 30px;
+  margin         : 0 0 0 8px;
+  border         : 1px solid #dcdee2;
+  border-radius  : 4px;
+  box-sizing     : border-box
+}
+
+.ss-content .ss-addable {
+  padding-top: 0px
+}
+
+.ss-content .ss-list {
+  max-height: 200px;
+  overflow-x: hidden;
+  overflow-y: auto;
+  text-align: left
+}
+
+.ss-content .ss-list .ss-optgroup .ss-optgroup-label {
+  padding    : 6px 10px 6px 10px;
+  font-weight: bold
+}
+
+.ss-content .ss-list .ss-optgroup .ss-option {
+  padding: 6px 6px 6px 25px
+}
+
+.ss-content .ss-list .ss-optgroup-label-selectable {
+  cursor: pointer
+}
+
+.ss-content .ss-list .ss-optgroup-label-selectable:hover {
+  color           : #fff;
+  background-color: #5897fb
+}
+
+.ss-content .ss-list .ss-option {
+  padding    : 6px 10px 6px 10px;
+  cursor     : pointer;
+  user-select: none
+}
+
+.ss-content .ss-list .ss-option * {
+  display: inline-block
+}
+
+.ss-content .ss-list .ss-option:hover,
+.ss-content .ss-list .ss-option.ss-highlighted {
+  color           : #fff;
+  background-color: #5897fb
+}
+
+.ss-content .ss-list .ss-option.ss-disabled {
+  cursor          : not-allowed;
+  color           : #dedede;
+  background-color: #fff
+}
+
+.ss-content .ss-list .ss-option:not(.ss-disabled).ss-option-selected {
+  color           : #666;
+  background-color: rgba(88, 151, 251, 0.1)
+}
+
+.ss-content .ss-list .ss-option.ss-hide {
+  display: none
+}
+
+.ss-content .ss-list .ss-option .ss-search-highlight {
+  background-color: #fffb8c
+}
\ No newline at end of file
diff --git a/admin/js/vendors/slimselect/slimselect.min.css b/admin/js/vendors/slimselect/slimselect.min.css
new file mode 100644 (file)
index 0000000..4dd68dc
--- /dev/null
@@ -0,0 +1 @@
+.ss-main{position:relative;display:inline-block;user-select:none;color:#666;width:100%;font-size:11pt;color:#000}.ss-main .ss-single-selected{display:flex;cursor:pointer;width:100%;height:30px;padding:6px;background-color:#fff;outline:0;box-sizing:border-box}.ss-main .ss-single-selected.ss-disabled{background-color:#dcdee2;cursor:not-allowed}.ss-main .ss-single-selected.ss-open-above{border-top-left-radius:0;border-top-right-radius:0}.ss-main .ss-single-selected.ss-open-below{border-bottom-left-radius:0;border-bottom-right-radius:0}.ss-main .ss-single-selected .placeholder{display:flex;flex:1 1 100%;align-items:center;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;text-align:left;width:calc(100% - 30px);line-height:1em;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.ss-main .ss-single-selected .placeholder *{display:flex;align-items:center;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;width:auto}.ss-main .ss-single-selected .placeholder .ss-disabled{color:#dedede}.ss-main .ss-single-selected .ss-deselect{display:flex;align-items:center;justify-content:flex-end;flex:0 1 auto;margin:0 6px 0 6px;font-weight:700}.ss-main .ss-single-selected .ss-deselect.ss-hide{display:none}.ss-main .ss-single-selected .ss-arrow{display:flex;align-items:center;justify-content:flex-end;flex:0 1 auto;margin:0 6px 0 6px}.ss-main .ss-single-selected .ss-arrow span{border:solid #666;border-width:0 2px 2px 0;display:inline-block;padding:3px;transition:transform .2s,margin .2s}.ss-main .ss-single-selected .ss-arrow span.arrow-up{transform:rotate(-135deg);margin:3px 0 0 0}.ss-main .ss-single-selected .ss-arrow span.arrow-down{transform:rotate(45deg);margin:-3px 0 0 0}.ss-main .ss-multi-selected{display:flex;flex-direction:row;cursor:pointer;min-height:30px;width:100%;padding:0 0 0 3px;font-size:11pt;background-color:#fff;outline:0;box-sizing:border-box;transition:background-color .2s}.ss-main .ss-multi-selected.ss-disabled{background-color:#dcdee2;cursor:not-allowed}.ss-main .ss-multi-selected.ss-disabled .ss-values .ss-disabled{color:#666}.ss-main .ss-multi-selected.ss-disabled .ss-values .ss-value .ss-value-delete{cursor:not-allowed}.ss-main .ss-multi-selected.ss-open-above{border-top-left-radius:0;border-top-right-radius:0}.ss-main .ss-multi-selected.ss-open-below{border-bottom-left-radius:0;border-bottom-right-radius:0}.ss-main .ss-multi-selected .ss-values{display:flex;flex-wrap:wrap;justify-content:flex-start;flex:1 1 100%;width:calc(100% - 30px)}.ss-main .ss-multi-selected .ss-values .ss-disabled{display:flex;padding:4px 5px;margin:2px 0;line-height:1em;align-items:center;width:100%;color:#dedede;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}@keyframes scaleIn{0%{transform:scale(0);opacity:0}100%{transform:scale(1);opacity:1}}@keyframes scaleOut{0%{transform:scale(1);opacity:1}100%{transform:scale(0);opacity:0}}.ss-main .ss-multi-selected .ss-values .ss-value{display:flex;user-select:none;align-items:center;font-size:12px;padding:3px 5px;margin:1px 1px;color:#000;font-size:11pt;background-color:#9abcea;border-radius:2px;animation-name:scaleIn;animation-duration:.2s;animation-timing-function:ease-out;animation-fill-mode:both}.ss-main .ss-multi-selected .ss-values .ss-value.ss-out{animation-name:scaleOut;animation-duration:.2s;animation-timing-function:ease-out}.ss-main .ss-multi-selected .ss-values .ss-value .ss-value-delete{margin:0 0 0 5px;cursor:pointer;color:red}.ss-main .ss-multi-selected .ss-add{display:flex;flex:0 1 3px;margin:9px 12px 0 5px}.ss-main .ss-multi-selected .ss-add .ss-plus{display:flex;justify-content:center;align-items:center;background:#666;position:relative;height:10px;width:2px;transition:transform .2s}.ss-main .ss-multi-selected .ss-add .ss-plus:after{background:#666;content:"";position:absolute;height:2px;width:10px;left:-4px;top:4px}.ss-main .ss-multi-selected .ss-add .ss-plus.ss-cross{transform:rotate(45deg)}.ss-content{position:absolute;width:100%;margin:-1px 0 0 0;box-sizing:border-box;border:solid 1px #dcdee2;z-index:1010;background-color:#fff;transform-origin:center top;transition:transform .2s,opacity .2s;opacity:0;transform:scaleY(0)}.ss-content.ss-open{display:block;opacity:1;transform:scaleY(1)}.ss-content .ss-search{display:flex;flex-direction:row;padding:8px 8px 6px 8px}.ss-content .ss-search.ss-hide{height:0;opacity:0;padding:0;margin:0}.ss-content .ss-search.ss-hide input{height:0;opacity:0;padding:0;margin:0}.ss-content .ss-search input{display:inline-flex;font-size:inherit;line-height:inherit;flex:1 1 auto;width:100%;min-width:0;height:30px;padding:6px 8px;margin:0;border:1px solid #dcdee2;border-radius:4px;background-color:#fff;outline:0;text-align:left;box-sizing:border-box;-webkit-box-sizing:border-box;-webkit-appearance:textfield}.ss-content .ss-search input::placeholder{color:#8a8a8a;vertical-align:middle}.ss-content .ss-search input:focus{box-shadow:0 0 5px #5897fb}.ss-content .ss-search .ss-addable{display:inline-flex;justify-content:center;align-items:center;cursor:pointer;font-size:22px;font-weight:700;flex:0 0 30px;height:30px;margin:0 0 0 8px;border:1px solid #dcdee2;border-radius:4px;box-sizing:border-box}.ss-content .ss-addable{padding-top:0}.ss-content .ss-list{max-height:200px;overflow-x:hidden;overflow-y:auto;text-align:left}.ss-content .ss-list .ss-optgroup .ss-optgroup-label{padding:6px 10px 6px 10px;font-weight:700}.ss-content .ss-list .ss-optgroup .ss-option{padding:6px 6px 6px 25px}.ss-content .ss-list .ss-optgroup-label-selectable{cursor:pointer}.ss-content .ss-list .ss-optgroup-label-selectable:hover{color:#fff;background-color:#5897fb}.ss-content .ss-list .ss-option{padding:6px 10px 6px 10px;cursor:pointer;user-select:none}.ss-content .ss-list .ss-option *{display:inline-block}.ss-content .ss-list .ss-option.ss-highlighted,.ss-content .ss-list .ss-option:hover{color:#fff;background-color:#5897fb}.ss-content .ss-list .ss-option.ss-disabled{cursor:not-allowed;color:#dedede;background-color:#fff}.ss-content .ss-list .ss-option:not(.ss-disabled).ss-option-selected{color:#666;background-color:rgba(88,151,251,.1)}.ss-content .ss-list .ss-option.ss-hide{display:none}.ss-content .ss-list .ss-option .ss-search-highlight{background-color:#fffb8c}
\ No newline at end of file
diff --git a/admin/js/vendors/slimselect/slimselect.min.js b/admin/js/vendors/slimselect/slimselect.min.js
new file mode 100644 (file)
index 0000000..8638634
--- /dev/null
@@ -0,0 +1 @@
+!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.SlimSelect=t():e.SlimSelect=t()}(window,function(){return s={},n.m=i=[function(e,t,i){"use strict";function s(e,t){t=t||{bubbles:!1,cancelable:!1,detail:void 0};var i=document.createEvent("CustomEvent");return i.initCustomEvent(e,t.bubbles,t.cancelable,t.detail),i}var n;t.__esModule=!0,t.hasClassInTree=function(e,t){function s(e,t){return t&&e&&e.classList&&e.classList.contains(t)?e:null}return s(e,t)||function e(t,i){return t&&t!==document?s(t,i)?t:e(t.parentNode,i):null}(e,t)},t.ensureElementInView=function(e,t){var i=e.scrollTop+e.offsetTop,s=i+e.clientHeight,n=t.offsetTop,a=n+t.clientHeight;n<i?e.scrollTop-=i-n:s<a&&(e.scrollTop+=a-s)},t.putContent=function(e,t,i){var s=e.offsetHeight,n=e.getBoundingClientRect(),a=i?n.top:n.top-s,o=i?n.bottom:n.bottom+s;return a<=0?"below":o>=window.innerHeight?"above":i?t:"below"},t.debounce=function(n,a,o){var l;return void 0===a&&(a=100),void 0===o&&(o=!1),function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];var i=self,s=o&&!l;clearTimeout(l),l=setTimeout(function(){l=null,o||n.apply(i,e)},a),s&&n.apply(i,e)}},t.isValueInArrayOfObjects=function(e,t,i){if(!Array.isArray(e))return e[t]===i;for(var s=0,n=e;s<n.length;s++){var a=n[s];if(a&&a[t]&&a[t]===i)return!0}return!1},t.highlight=function(e,t,i){var s=e,n=new RegExp("("+t.trim()+")(?![^<]*>[^<>]*</)","i");if(!e.match(n))return e;var a=e.match(n).index,o=a+e.match(n)[0].toString().length,l=e.substring(a,o);return s=s.replace(n,'<mark class="'+i+'">'+l+"</mark>")},t.kebabCase=function(e){var t=e.replace(/[A-Z\u00C0-\u00D6\u00D8-\u00DE]/g,function(e){return"-"+e.toLowerCase()});return e[0]===e[0].toUpperCase()?t.substring(1):t},"function"!=typeof(n=window).CustomEvent&&(s.prototype=n.Event.prototype,n.CustomEvent=s)},function(e,t,i){"use strict";t.__esModule=!0;var s=(n.prototype.newOption=function(e){return{id:e.id?e.id:String(Math.floor(1e8*Math.random())),value:e.value?e.value:"",text:e.text?e.text:"",innerHTML:e.innerHTML?e.innerHTML:"",selected:!!e.selected&&e.selected,display:void 0===e.display||e.display,disabled:!!e.disabled&&e.disabled,placeholder:!!e.placeholder&&e.placeholder,class:e.class?e.class:void 0,data:e.data?e.data:{},mandatory:!!e.mandatory&&e.mandatory}},n.prototype.add=function(e){this.data.push({id:String(Math.floor(1e8*Math.random())),value:e.value,text:e.text,innerHTML:"",selected:!1,display:!0,disabled:!1,placeholder:!1,class:void 0,mandatory:e.mandatory,data:{}})},n.prototype.parseSelectData=function(){this.data=[];for(var e=0,t=this.main.select.element.childNodes;e<t.length;e++){var i=t[e];if("OPTGROUP"===i.nodeName){for(var s={label:i.label,options:[]},n=0,a=i.childNodes;n<a.length;n++){var o=a[n];if("OPTION"===o.nodeName){var l=this.pullOptionData(o);s.options.push(l),l.placeholder&&""!==l.text.trim()&&(this.main.config.placeholderText=l.text)}}this.data.push(s)}else"OPTION"===i.nodeName&&(l=this.pullOptionData(i),this.data.push(l),l.placeholder&&""!==l.text.trim()&&(this.main.config.placeholderText=l.text))}},n.prototype.pullOptionData=function(e){return{id:!!e.dataset&&e.dataset.id||String(Math.floor(1e8*Math.random())),value:e.value,text:e.text,innerHTML:e.innerHTML,selected:e.selected,disabled:e.disabled,placeholder:"true"===e.dataset.placeholder,class:e.className,style:e.style.cssText,data:e.dataset,mandatory:!!e.dataset&&"true"===e.dataset.mandatory}},n.prototype.setSelectedFromSelect=function(){if(this.main.config.isMultiple){for(var e=[],t=0,i=this.main.select.element.options;t<i.length;t++){var s=i[t];if(s.selected){var n=this.getObjectFromData(s.value,"value");n&&n.id&&e.push(n.id)}}this.setSelected(e,"id")}else{var a=this.main.select.element;if(-1!==a.selectedIndex){var o=a.options[a.selectedIndex].value;this.setSelected(o,"value")}}},n.prototype.setSelected=function(e,t){void 0===t&&(t="id");for(var i=0,s=this.data;i<s.length;i++){var n=s[i];if(n.hasOwnProperty("label")){if(n.hasOwnProperty("options")){var a=n.options;if(a)for(var o=0,l=a;o<l.length;o++){var r=l[o];r.placeholder||(r.selected=this.shouldBeSelected(r,e,t))}}}else n.selected=this.shouldBeSelected(n,e,t)}},n.prototype.shouldBeSelected=function(e,t,i){if(void 0===i&&(i="id"),Array.isArray(t))for(var s=0,n=t;s<n.length;s++){var a=n[s];if(i in e&&String(e[i])===String(a))return!0}else if(i in e&&String(e[i])===String(t))return!0;return!1},n.prototype.getSelected=function(){for(var e={text:"",placeholder:this.main.config.placeholderText},t=[],i=0,s=this.data;i<s.length;i++){var n=s[i];if(n.hasOwnProperty("label")){if(n.hasOwnProperty("options")){var a=n.options;if(a)for(var o=0,l=a;o<l.length;o++){var r=l[o];r.selected&&(this.main.config.isMultiple?t.push(r):e=r)}}}else n.selected&&(this.main.config.isMultiple?t.push(n):e=n)}return this.main.config.isMultiple?t:e},n.prototype.addToSelected=function(e,t){if(void 0===t&&(t="id"),this.main.config.isMultiple){var i=[],s=this.getSelected();if(Array.isArray(s))for(var n=0,a=s;n<a.length;n++){var o=a[n];i.push(o[t])}i.push(e),this.setSelected(i,t)}},n.prototype.removeFromSelected=function(e,t){if(void 0===t&&(t="id"),this.main.config.isMultiple){for(var i=[],s=0,n=this.getSelected();s<n.length;s++){var a=n[s];String(a[t])!==String(e)&&i.push(a[t])}this.setSelected(i,t)}},n.prototype.onDataChange=function(){this.main.onChange&&this.isOnChangeEnabled&&this.main.onChange(JSON.parse(JSON.stringify(this.getSelected())))},n.prototype.getObjectFromData=function(e,t){void 0===t&&(t="id");for(var i=0,s=this.data;i<s.length;i++){var n=s[i];if(t in n&&String(n[t])===String(e))return n;if(n.hasOwnProperty("options")&&n.options)for(var a=0,o=n.options;a<o.length;a++){var l=o[a];if(String(l[t])===String(e))return l}}return null},n.prototype.search=function(n){if(""!==(this.searchValue=n).trim()){var a=this.main.config.searchFilter,e=this.data.slice(0);n=n.trim();var t=e.map(function(e){if(e.hasOwnProperty("options")){var t=e,i=[];if(t.options&&(i=t.options.filter(function(e){return a(e,n)})),0!==i.length){var s=Object.assign({},t);return s.options=i,s}}return e.hasOwnProperty("text")&&a(e,n)?e:null});this.filtered=t.filter(function(e){return e})}else this.filtered=null},n);function n(e){this.contentOpen=!1,this.contentPosition="below",this.isOnChangeEnabled=!0,this.main=e.main,this.searchValue="",this.data=[],this.filtered=null,this.parseSelectData(),this.setSelectedFromSelect()}function r(e){return void 0!==e.text||(console.error("Data object option must have at least have a text value. Check object: "+JSON.stringify(e)),!1)}t.Data=s,t.validateData=function(e){if(!e)return console.error("Data must be an array of objects"),!1;for(var t=0,i=0,s=e;i<s.length;i++){var n=s[i];if(n.hasOwnProperty("label")){if(n.hasOwnProperty("options")){var a=n.options;if(a)for(var o=0,l=a;o<l.length;o++){r(l[o])||t++}}}else r(n)||t++}return 0===t},t.validateOption=r},function(e,t,i){"use strict";t.__esModule=!0;var s=i(3),n=i(4),a=i(5),o=i(1),l=i(0),r=(c.prototype.validate=function(e){var t="string"==typeof e.select?document.querySelector(e.select):e.select;if(!t)throw new Error("Could not find select element");if("SELECT"!==t.tagName)throw new Error("Element isnt of type select");return t},c.prototype.selected=function(){if(this.config.isMultiple){for(var e=[],t=0,i=n=this.data.getSelected();t<i.length;t++){var s=i[t];e.push(s.value)}return e}var n;return(n=this.data.getSelected())?n.value:""},c.prototype.set=function(e,t,i,s){void 0===t&&(t="value"),void 0===i&&(i=!0),void 0===s&&(s=!0),this.config.isMultiple&&!Array.isArray(e)?this.data.addToSelected(e,t):this.data.setSelected(e,t),this.select.setValue(),this.data.onDataChange(),this.render(),i&&this.close()},c.prototype.setSelected=function(e,t,i,s){void 0===t&&(t="value"),void 0===i&&(i=!0),void 0===s&&(s=!0),this.set(e,t,i,s)},c.prototype.setData=function(e){if(o.validateData(e)){var t=JSON.parse(JSON.stringify(e)),i=this.data.getSelected();if(this.config.isAjax&&i)if(this.config.isMultiple)for(var s=0,n=i.reverse();s<n.length;s++){var a=n[s];t.unshift(a)}else t.unshift(this.data.getSelected()),t.unshift({text:"",placeholder:!0});this.select.create(t),this.data.parseSelectData(),this.data.setSelectedFromSelect()}else console.error("Validation problem on: #"+this.select.element.id)},c.prototype.addData=function(e){o.validateData([e])?(this.data.add(this.data.newOption(e)),this.select.create(this.data.data),this.data.parseSelectData(),this.data.setSelectedFromSelect(),this.render()):console.error("Validation problem on: #"+this.select.element.id)},c.prototype.open=function(){var e=this;if(this.config.isEnabled&&!this.data.contentOpen){if(this.beforeOpen&&this.beforeOpen(),this.config.isMultiple&&this.slim.multiSelected?this.slim.multiSelected.plus.classList.add("ss-cross"):this.slim.singleSelected&&(this.slim.singleSelected.arrowIcon.arrow.classList.remove("arrow-down"),this.slim.singleSelected.arrowIcon.arrow.classList.add("arrow-up")),this.slim[this.config.isMultiple?"multiSelected":"singleSelected"].container.classList.add("above"===this.data.contentPosition?this.config.openAbove:this.config.openBelow),this.config.addToBody){var t=this.slim.container.getBoundingClientRect();this.slim.content.style.top=t.top+t.height+window.scrollY+"px",this.slim.content.style.left=t.left+window.scrollX+"px",this.slim.content.style.width=t.width+"px"}if(this.slim.content.classList.add(this.config.open),"up"===this.config.showContent.toLowerCase()||"down"!==this.config.showContent.toLowerCase()&&"above"===l.putContent(this.slim.content,this.data.contentPosition,this.data.contentOpen)?this.moveContentAbove():this.moveContentBelow(),!this.config.isMultiple){var i=this.data.getSelected();if(i){var s=i.id,n=this.slim.list.querySelector('[data-id="'+s+'"]');n&&l.ensureElementInView(this.slim.list,n)}}setTimeout(function(){e.data.contentOpen=!0,e.config.searchFocus&&e.slim.search.input.focus(),e.afterOpen&&e.afterOpen()},this.config.timeoutDelay)}},c.prototype.close=function(){var e=this;this.data.contentOpen&&(this.beforeClose&&this.beforeClose(),this.config.isMultiple&&this.slim.multiSelected?(this.slim.multiSelected.container.classList.remove(this.config.openAbove),this.slim.multiSelected.container.classList.remove(this.config.openBelow),this.slim.multiSelected.plus.classList.remove("ss-cross")):this.slim.singleSelected&&(this.slim.singleSelected.container.classList.remove(this.config.openAbove),this.slim.singleSelected.container.classList.remove(this.config.openBelow),this.slim.singleSelected.arrowIcon.arrow.classList.add("arrow-down"),this.slim.singleSelected.arrowIcon.arrow.classList.remove("arrow-up")),this.slim.content.classList.remove(this.config.open),this.data.contentOpen=!1,this.search(""),setTimeout(function(){e.slim.content.removeAttribute("style"),e.data.contentPosition="below",e.config.isMultiple&&e.slim.multiSelected?(e.slim.multiSelected.container.classList.remove(e.config.openAbove),e.slim.multiSelected.container.classList.remove(e.config.openBelow)):e.slim.singleSelected&&(e.slim.singleSelected.container.classList.remove(e.config.openAbove),e.slim.singleSelected.container.classList.remove(e.config.openBelow)),e.slim.search.input.blur(),e.afterClose&&e.afterClose()},this.config.timeoutDelay))},c.prototype.moveContentAbove=function(){var e=0;this.config.isMultiple&&this.slim.multiSelected?e=this.slim.multiSelected.container.offsetHeight:this.slim.singleSelected&&(e=this.slim.singleSelected.container.offsetHeight);var t=e+this.slim.content.offsetHeight-1;this.slim.content.style.margin="-"+t+"px 0 0 0",this.slim.content.style.height=t-e+1+"px",this.slim.content.style.transformOrigin="center bottom",this.data.contentPosition="above",this.config.isMultiple&&this.slim.multiSelected?(this.slim.multiSelected.container.classList.remove(this.config.openBelow),this.slim.multiSelected.container.classList.add(this.config.openAbove)):this.slim.singleSelected&&(this.slim.singleSelected.container.classList.remove(this.config.openBelow),this.slim.singleSelected.container.classList.add(this.config.openAbove))},c.prototype.moveContentBelow=function(){this.data.contentPosition="below",this.config.isMultiple&&this.slim.multiSelected?(this.slim.multiSelected.container.classList.remove(this.config.openAbove),this.slim.multiSelected.container.classList.add(this.config.openBelow)):this.slim.singleSelected&&(this.slim.singleSelected.container.classList.remove(this.config.openAbove),this.slim.singleSelected.container.classList.add(this.config.openBelow))},c.prototype.enable=function(){this.config.isEnabled=!0,this.config.isMultiple&&this.slim.multiSelected?this.slim.multiSelected.container.classList.remove(this.config.disabled):this.slim.singleSelected&&this.slim.singleSelected.container.classList.remove(this.config.disabled),this.select.triggerMutationObserver=!1,this.select.element.disabled=!1,this.slim.search.input.disabled=!1,this.select.triggerMutationObserver=!0},c.prototype.disable=function(){this.config.isEnabled=!1,this.config.isMultiple&&this.slim.multiSelected?this.slim.multiSelected.container.classList.add(this.config.disabled):this.slim.singleSelected&&this.slim.singleSelected.container.classList.add(this.config.disabled),this.select.triggerMutationObserver=!1,this.select.element.disabled=!0,this.slim.search.input.disabled=!0,this.select.triggerMutationObserver=!0},c.prototype.search=function(t){if(this.data.searchValue!==t)if(this.slim.search.input.value=t,this.config.isAjax){var i=this;this.config.isSearching=!0,this.render(),this.ajax&&this.ajax(t,function(e){i.config.isSearching=!1,Array.isArray(e)?(e.unshift({text:"",placeholder:!0}),i.setData(e),i.data.search(t),i.render()):"string"==typeof e?i.slim.options(e):i.render()})}else this.data.search(t),this.render()},c.prototype.setSearchText=function(e){this.config.searchText=e},c.prototype.render=function(){this.config.isMultiple?this.slim.values():(this.slim.placeholder(),this.slim.deselect()),this.slim.options()},c.prototype.destroy=function(e){void 0===e&&(e=null);var t=e?document.querySelector("."+e+".ss-main"):this.slim.container,i=e?document.querySelector("[data-ssid="+e+"]"):this.select.element;if(t&&i&&(i.style.display="",delete i.dataset.ssid,i.slim=null,t.parentElement&&t.parentElement.removeChild(t),this.config.addToBody)){var s=e?document.querySelector("."+e+".ss-content"):this.slim.content;if(!s)return;document.body.removeChild(s)}},c);function c(e){var t=this;this.ajax=null,this.addable=null,this.beforeOnChange=null,this.onChange=null,this.beforeOpen=null,this.afterOpen=null,this.beforeClose=null,this.afterClose=null;var i=this.validate(e);i.dataset.ssid&&this.destroy(i.dataset.ssid),e.ajax&&(this.ajax=e.ajax),e.addable&&(this.addable=e.addable),this.config=new s.Config({select:i,isAjax:!!e.ajax,showSearch:e.showSearch,searchPlaceholder:e.searchPlaceholder,searchText:e.searchText,searchingText:e.searchingText,searchFocus:e.searchFocus,searchHighlight:e.searchHighlight,searchFilter:e.searchFilter,closeOnSelect:e.closeOnSelect,showContent:e.showContent,placeholderText:e.placeholder,allowDeselect:e.allowDeselect,allowDeselectOption:e.allowDeselectOption,hideSelectedOption:e.hideSelectedOption,deselectLabel:e.deselectLabel,isEnabled:e.isEnabled,valuesUseText:e.valuesUseText,showOptionTooltips:e.showOptionTooltips,selectByGroup:e.selectByGroup,limit:e.limit,timeoutDelay:e.timeoutDelay,addToBody:e.addToBody}),this.select=new n.Select({select:i,main:this}),this.data=new o.Data({main:this}),this.slim=new a.Slim({main:this}),this.select.element.parentNode&&this.select.element.parentNode.insertBefore(this.slim.container,this.select.element.nextSibling),e.data?this.setData(e.data):this.render(),document.addEventListener("click",function(e){e.target&&!l.hasClassInTree(e.target,t.config.id)&&t.close()}),"auto"===this.config.showContent&&window.addEventListener("scroll",l.debounce(function(e){t.data.contentOpen&&("above"===l.putContent(t.slim.content,t.data.contentPosition,t.data.contentOpen)?t.moveContentAbove():t.moveContentBelow())}),!1),e.beforeOnChange&&(this.beforeOnChange=e.beforeOnChange),e.onChange&&(this.onChange=e.onChange),e.beforeOpen&&(this.beforeOpen=e.beforeOpen),e.afterOpen&&(this.afterOpen=e.afterOpen),e.beforeClose&&(this.beforeClose=e.beforeClose),e.afterClose&&(this.afterClose=e.afterClose),this.config.isEnabled||this.disable()}t.default=r},function(e,t,i){"use strict";t.__esModule=!0;var s=(n.prototype.searchFilter=function(e,t){return-1!==e.text.toLowerCase().indexOf(t.toLowerCase())},n);function n(e){this.id="",this.isMultiple=!1,this.isAjax=!1,this.isSearching=!1,this.showSearch=!0,this.searchFocus=!0,this.searchHighlight=!1,this.closeOnSelect=!0,this.showContent="auto",this.searchPlaceholder="Search",this.searchText="No Results",this.searchingText="Searching...",this.placeholderText="Select Value",this.allowDeselect=!1,this.allowDeselectOption=!1,this.hideSelectedOption=!1,this.deselectLabel="x",this.isEnabled=!0,this.valuesUseText=!1,this.showOptionTooltips=!1,this.selectByGroup=!1,this.limit=0,this.timeoutDelay=200,this.addToBody=!1,this.main="ss-main",this.singleSelected="ss-single-selected",this.arrow="ss-arrow",this.multiSelected="ss-multi-selected",this.add="ss-add",this.plus="ss-plus",this.values="ss-values",this.value="ss-value",this.valueText="ss-value-text",this.valueDelete="ss-value-delete",this.content="ss-content",this.open="ss-open",this.openAbove="ss-open-above",this.openBelow="ss-open-below",this.search="ss-search",this.searchHighlighter="ss-search-highlight",this.addable="ss-addable",this.list="ss-list",this.optgroup="ss-optgroup",this.optgroupLabel="ss-optgroup-label",this.optgroupLabelSelectable="ss-optgroup-label-selectable",this.option="ss-option",this.optionSelected="ss-option-selected",this.highlighted="ss-highlighted",this.disabled="ss-disabled",this.hide="ss-hide",this.id="ss-"+Math.floor(1e5*Math.random()),this.style=e.select.style.cssText,this.class=e.select.className.split(" "),this.isMultiple=e.select.multiple,this.isAjax=e.isAjax,this.showSearch=!1!==e.showSearch,this.searchFocus=!1!==e.searchFocus,this.searchHighlight=!0===e.searchHighlight,this.closeOnSelect=!1!==e.closeOnSelect,e.showContent&&(this.showContent=e.showContent),this.isEnabled=!1!==e.isEnabled,e.searchPlaceholder&&(this.searchPlaceholder=e.searchPlaceholder),e.searchText&&(this.searchText=e.searchText),e.searchingText&&(this.searchingText=e.searchingText),e.placeholderText&&(this.placeholderText=e.placeholderText),this.allowDeselect=!0===e.allowDeselect,this.allowDeselectOption=!0===e.allowDeselectOption,this.hideSelectedOption=!0===e.hideSelectedOption,e.deselectLabel&&(this.deselectLabel=e.deselectLabel),e.valuesUseText&&(this.valuesUseText=e.valuesUseText),e.showOptionTooltips&&(this.showOptionTooltips=e.showOptionTooltips),e.selectByGroup&&(this.selectByGroup=e.selectByGroup),e.limit&&(this.limit=e.limit),e.searchFilter&&(this.searchFilter=e.searchFilter),null!=e.timeoutDelay&&(this.timeoutDelay=e.timeoutDelay),this.addToBody=!0===e.addToBody}t.Config=s},function(e,t,i){"use strict";t.__esModule=!0;var s=i(0),n=(a.prototype.setValue=function(){if(this.main.data.getSelected()){if(this.main.config.isMultiple)for(var e=this.main.data.getSelected(),t=0,i=this.element.options;t<i.length;t++){var s=i[t];s.selected=!1;for(var n=0,a=e;n<a.length;n++)a[n].value===s.value&&(s.selected=!0)}else e=this.main.data.getSelected(),this.element.value=e?e.value:"";this.main.data.isOnChangeEnabled=!1,this.element.dispatchEvent(new CustomEvent("change",{bubbles:!0})),this.main.data.isOnChangeEnabled=!0}},a.prototype.addAttributes=function(){this.element.tabIndex=-1,this.element.style.display="none",this.element.dataset.ssid=this.main.config.id},a.prototype.addEventListeners=function(){var t=this;this.element.addEventListener("change",function(e){t.main.data.setSelectedFromSelect(),t.main.render()})},a.prototype.addMutationObserver=function(){var t=this;this.main.config.isAjax||(this.mutationObserver=new MutationObserver(function(e){t.triggerMutationObserver&&(t.main.data.parseSelectData(),t.main.data.setSelectedFromSelect(),t.main.render(),e.forEach(function(e){"class"===e.attributeName&&t.main.slim.updateContainerDivClass(t.main.slim.container)}))}),this.observeMutationObserver())},a.prototype.observeMutationObserver=function(){this.mutationObserver&&this.mutationObserver.observe(this.element,{attributes:!0,childList:!0,characterData:!0})},a.prototype.disconnectMutationObserver=function(){this.mutationObserver&&this.mutationObserver.disconnect()},a.prototype.create=function(e){this.element.innerHTML="";for(var t=0,i=e;t<i.length;t++){var s=i[t];if(s.hasOwnProperty("options")){var n=s,a=document.createElement("optgroup");if(a.label=n.label,n.options)for(var o=0,l=n.options;o<l.length;o++){var r=l[o];a.appendChild(this.createOption(r))}this.element.appendChild(a)}else this.element.appendChild(this.createOption(s))}},a.prototype.createOption=function(t){var i=document.createElement("option");return i.value=""!==t.value?t.value:t.text,i.innerHTML=t.innerHTML||t.text,t.selected&&(i.selected=t.selected),!1===t.display&&(i.style.display="none"),t.disabled&&(i.disabled=!0),t.placeholder&&i.setAttribute("data-placeholder","true"),t.mandatory&&i.setAttribute("data-mandatory","true"),t.class&&t.class.split(" ").forEach(function(e){i.classList.add(e)}),t.data&&"object"==typeof t.data&&Object.keys(t.data).forEach(function(e){i.setAttribute("data-"+s.kebabCase(e),t.data[e])}),i},a);function a(e){this.triggerMutationObserver=!0,this.element=e.select,this.main=e.main,this.element.disabled&&(this.main.config.isEnabled=!1),this.addAttributes(),this.addEventListeners(),this.mutationObserver=null,this.addMutationObserver(),this.element.slim=e.main}t.Select=n},function(e,t,i){"use strict";t.__esModule=!0;var a=i(0),o=i(1),s=(n.prototype.containerDiv=function(){var e=document.createElement("div");return e.style.cssText=this.main.config.style,this.updateContainerDivClass(e),e},n.prototype.updateContainerDivClass=function(e){this.main.config.class=this.main.select.element.className.split(" "),e.className="",e.classList.add(this.main.config.id),e.classList.add(this.main.config.main);for(var t=0,i=this.main.config.class;t<i.length;t++){var s=i[t];""!==s.trim()&&e.classList.add(s)}},n.prototype.singleSelectedDiv=function(){var t=this,e=document.createElement("div");e.classList.add(this.main.config.singleSelected);var i=document.createElement("span");i.classList.add("placeholder"),e.appendChild(i);var s=document.createElement("span");s.innerHTML=this.main.config.deselectLabel,s.classList.add("ss-deselect"),s.onclick=function(e){e.stopPropagation(),t.main.config.isEnabled&&t.main.set("")},e.appendChild(s);var n=document.createElement("span");n.classList.add(this.main.config.arrow);var a=document.createElement("span");return a.classList.add("arrow-down"),n.appendChild(a),e.appendChild(n),e.onclick=function(){t.main.config.isEnabled&&(t.main.data.contentOpen?t.main.close():t.main.open())},{container:e,placeholder:i,deselect:s,arrowIcon:{container:n,arrow:a}}},n.prototype.placeholder=function(){var e=this.main.data.getSelected();if(null===e||e&&e.placeholder){var t=document.createElement("span");t.classList.add(this.main.config.disabled),t.innerHTML=this.main.config.placeholderText,this.singleSelected&&(this.singleSelected.placeholder.innerHTML=t.outerHTML)}else{var i="";e&&(i=e.innerHTML&&!0!==this.main.config.valuesUseText?e.innerHTML:e.text),this.singleSelected&&(this.singleSelected.placeholder.innerHTML=e?i:"")}},n.prototype.deselect=function(){if(this.singleSelected){if(!this.main.config.allowDeselect)return void this.singleSelected.deselect.classList.add("ss-hide");""===this.main.selected()?this.singleSelected.deselect.classList.add("ss-hide"):this.singleSelected.deselect.classList.remove("ss-hide")}},n.prototype.multiSelectedDiv=function(){var t=this,e=document.createElement("div");e.classList.add(this.main.config.multiSelected);var i=document.createElement("div");i.classList.add(this.main.config.values),e.appendChild(i);var s=document.createElement("div");s.classList.add(this.main.config.add);var n=document.createElement("span");return n.classList.add(this.main.config.plus),n.onclick=function(e){t.main.data.contentOpen&&(t.main.close(),e.stopPropagation())},s.appendChild(n),e.appendChild(s),e.onclick=function(e){t.main.config.isEnabled&&(e.target.classList.contains(t.main.config.valueDelete)||(t.main.data.contentOpen?t.main.close():t.main.open()))},{container:e,values:i,add:s,plus:n}},n.prototype.values=function(){if(this.multiSelected){for(var e,t=this.multiSelected.values.childNodes,i=this.main.data.getSelected(),s=[],n=0,a=t;n<a.length;n++){var o=a[n];e=!0;for(var l=0,r=i;l<r.length;l++){var c=r[l];String(c.id)===String(o.dataset.id)&&(e=!1)}e&&s.push(o)}for(var d=0,h=s;d<h.length;d++){var u=h[d];u.classList.add("ss-out"),this.multiSelected.values.removeChild(u)}for(t=this.multiSelected.values.childNodes,c=0;c<i.length;c++){e=!1;for(var p=0,m=t;p<m.length;p++)o=m[p],String(i[c].id)===String(o.dataset.id)&&(e=!0);e||(0!==t.length&&HTMLElement.prototype.insertAdjacentElement?0===c?this.multiSelected.values.insertBefore(this.valueDiv(i[c]),t[c]):t[c-1].insertAdjacentElement("afterend",this.valueDiv(i[c])):this.multiSelected.values.appendChild(this.valueDiv(i[c])))}if(0===i.length){var f=document.createElement("span");f.classList.add(this.main.config.disabled),f.innerHTML=this.main.config.placeholderText,this.multiSelected.values.innerHTML=f.outerHTML}}},n.prototype.valueDiv=function(a){var o=this,e=document.createElement("div");e.classList.add(this.main.config.value),e.dataset.id=a.id;var t=document.createElement("span");if(t.classList.add(this.main.config.valueText),t.innerHTML=a.innerHTML&&!0!==this.main.config.valuesUseText?a.innerHTML:a.text,e.appendChild(t),!a.mandatory){var i=document.createElement("span");i.classList.add(this.main.config.valueDelete),i.innerHTML=this.main.config.deselectLabel,i.onclick=function(e){e.preventDefault(),e.stopPropagation();var t=!1;if(o.main.beforeOnChange||(t=!0),o.main.beforeOnChange){for(var i=o.main.data.getSelected(),s=JSON.parse(JSON.stringify(i)),n=0;n<s.length;n++)s[n].id===a.id&&s.splice(n,1);!1!==o.main.beforeOnChange(s)&&(t=!0)}t&&(o.main.data.removeFromSelected(a.id,"id"),o.main.render(),o.main.select.setValue(),o.main.data.onDataChange())},e.appendChild(i)}return e},n.prototype.contentDiv=function(){var e=document.createElement("div");return e.classList.add(this.main.config.content),e},n.prototype.searchDiv=function(){var n=this,e=document.createElement("div"),s=document.createElement("input"),a=document.createElement("div");e.classList.add(this.main.config.search);var t={container:e,input:s};return this.main.config.showSearch||(e.classList.add(this.main.config.hide),s.readOnly=!0),s.type="search",s.placeholder=this.main.config.searchPlaceholder,s.tabIndex=0,s.setAttribute("aria-label",this.main.config.searchPlaceholder),s.setAttribute("autocapitalize","off"),s.setAttribute("autocomplete","off"),s.setAttribute("autocorrect","off"),s.onclick=function(e){setTimeout(function(){""===e.target.value&&n.main.search("")},10)},s.onkeydown=function(e){"ArrowUp"===e.key?(n.main.open(),n.highlightUp(),e.preventDefault()):"ArrowDown"===e.key?(n.main.open(),n.highlightDown(),e.preventDefault()):"Tab"===e.key?n.main.data.contentOpen?n.main.close():setTimeout(function(){n.main.close()},n.main.config.timeoutDelay):"Enter"===e.key&&e.preventDefault()},s.onkeyup=function(e){var t=e.target;if("Enter"===e.key){if(n.main.addable&&e.ctrlKey)return a.click(),e.preventDefault(),void e.stopPropagation();var i=n.list.querySelector("."+n.main.config.highlighted);i&&i.click()}else"ArrowUp"===e.key||"ArrowDown"===e.key||("Escape"===e.key?n.main.close():n.main.config.showSearch&&n.main.data.contentOpen?n.main.search(t.value):s.value="");e.preventDefault(),e.stopPropagation()},s.onfocus=function(){n.main.open()},e.appendChild(s),this.main.addable&&(a.classList.add(this.main.config.addable),a.innerHTML="+",a.onclick=function(e){if(n.main.addable){e.preventDefault(),e.stopPropagation();var t=n.search.input.value;if(""===t.trim())return void n.search.input.focus();var i=n.main.addable(t),s="";if(!i)return;"object"==typeof i?o.validateOption(i)&&(n.main.addData(i),s=i.value?i.value:i.text):(n.main.addData(n.main.data.newOption({text:i,value:i})),s=i),n.main.search(""),setTimeout(function(){n.main.set(s,"value",!1,!1)},100),n.main.config.closeOnSelect&&setTimeout(function(){n.main.close()},100)}},e.appendChild(a),t.addable=a),t},n.prototype.highlightUp=function(){var e=this.list.querySelector("."+this.main.config.highlighted),t=null;if(e)for(t=e.previousSibling;null!==t&&t.classList.contains(this.main.config.disabled);)t=t.previousSibling;else{var i=this.list.querySelectorAll("."+this.main.config.option+":not(."+this.main.config.disabled+")");t=i[i.length-1]}if(t&&t.classList.contains(this.main.config.optgroupLabel)&&(t=null),null===t){var s=e.parentNode;if(s.classList.contains(this.main.config.optgroup)&&s.previousSibling){var n=s.previousSibling.querySelectorAll("."+this.main.config.option+":not(."+this.main.config.disabled+")");n.length&&(t=n[n.length-1])}}t&&(e&&e.classList.remove(this.main.config.highlighted),t.classList.add(this.main.config.highlighted),a.ensureElementInView(this.list,t))},n.prototype.highlightDown=function(){var e=this.list.querySelector("."+this.main.config.highlighted),t=null;if(e)for(t=e.nextSibling;null!==t&&t.classList.contains(this.main.config.disabled);)t=t.nextSibling;else t=this.list.querySelector("."+this.main.config.option+":not(."+this.main.config.disabled+")");if(null===t&&null!==e){var i=e.parentNode;i.classList.contains(this.main.config.optgroup)&&i.nextSibling&&(t=i.nextSibling.querySelector("."+this.main.config.option+":not(."+this.main.config.disabled+")"))}t&&(e&&e.classList.remove(this.main.config.highlighted),t.classList.add(this.main.config.highlighted),a.ensureElementInView(this.list,t))},n.prototype.listDiv=function(){var e=document.createElement("div");return e.classList.add(this.main.config.list),e},n.prototype.options=function(e){void 0===e&&(e="");var t,i=this.main.data.filtered||this.main.data.data;if((this.list.innerHTML="")!==e)return(t=document.createElement("div")).classList.add(this.main.config.option),t.classList.add(this.main.config.disabled),t.innerHTML=e,void this.list.appendChild(t);if(this.main.config.isAjax&&this.main.config.isSearching)return(t=document.createElement("div")).classList.add(this.main.config.option),t.classList.add(this.main.config.disabled),t.innerHTML=this.main.config.searchingText,void this.list.appendChild(t);if(0===i.length){var s=document.createElement("div");return s.classList.add(this.main.config.option),s.classList.add(this.main.config.disabled),s.innerHTML=this.main.config.searchText,void this.list.appendChild(s)}for(var n=function(e){if(e.hasOwnProperty("label")){var t=e,n=document.createElement("div");n.classList.add(c.main.config.optgroup);var i=document.createElement("div");i.classList.add(c.main.config.optgroupLabel),c.main.config.selectByGroup&&c.main.config.isMultiple&&i.classList.add(c.main.config.optgroupLabelSelectable),i.innerHTML=t.label,n.appendChild(i);var s=t.options;if(s){for(var a=0,o=s;a<o.length;a++){var l=o[a];n.appendChild(c.option(l))}if(c.main.config.selectByGroup&&c.main.config.isMultiple){var r=c;i.addEventListener("click",function(e){e.preventDefault(),e.stopPropagation();for(var t=0,i=n.children;t<i.length;t++){var s=i[t];-1!==s.className.indexOf(r.main.config.option)&&s.click()}})}}c.list.appendChild(n)}else c.list.appendChild(c.option(e))},c=this,a=0,o=i;a<o.length;a++)n(o[a])},n.prototype.option=function(r){if(r.placeholder){var e=document.createElement("div");return e.classList.add(this.main.config.option),e.classList.add(this.main.config.hide),e}var t=document.createElement("div");t.classList.add(this.main.config.option),r.class&&r.class.split(" ").forEach(function(e){t.classList.add(e)}),r.style&&(t.style.cssText=r.style);var c=this.main.data.getSelected();t.dataset.id=r.id,this.main.config.searchHighlight&&this.main.slim&&r.innerHTML&&""!==this.main.slim.search.input.value.trim()?t.innerHTML=a.highlight(r.innerHTML,this.main.slim.search.input.value,this.main.config.searchHighlighter):r.innerHTML&&(t.innerHTML=r.innerHTML),this.main.config.showOptionTooltips&&t.textContent&&t.setAttribute("title",t.textContent);var d=this;t.addEventListener("click",function(e){e.preventDefault(),e.stopPropagation();var t=this.dataset.id;if(!0===r.selected&&d.main.config.allowDeselectOption){var i=!1;if(d.main.beforeOnChange&&d.main.config.isMultiple||(i=!0),d.main.beforeOnChange&&d.main.config.isMultiple){for(var s=d.main.data.getSelected(),n=JSON.parse(JSON.stringify(s)),a=0;a<n.length;a++)n[a].id===t&&n.splice(a,1);!1!==d.main.beforeOnChange(n)&&(i=!0)}i&&(d.main.config.isMultiple?(d.main.data.removeFromSelected(t,"id"),d.main.render(),d.main.select.setValue(),d.main.data.onDataChange()):d.main.set(""))}else{if(r.disabled||r.selected)return;if(d.main.config.limit&&Array.isArray(c)&&d.main.config.limit<=c.length)return;if(d.main.beforeOnChange){var o=void 0,l=JSON.parse(JSON.stringify(d.main.data.getObjectFromData(t)));l.selected=!0,d.main.config.isMultiple?(o=JSON.parse(JSON.stringify(c))).push(l):o=JSON.parse(JSON.stringify(l)),!1!==d.main.beforeOnChange(o)&&d.main.set(t,"id",d.main.config.closeOnSelect)}else d.main.set(t,"id",d.main.config.closeOnSelect)}});var i=c&&a.isValueInArrayOfObjects(c,"id",r.id);return(r.disabled||i)&&(t.onclick=null,d.main.config.allowDeselectOption||t.classList.add(this.main.config.disabled),d.main.config.hideSelectedOption&&t.classList.add(this.main.config.hide)),i?t.classList.add(this.main.config.optionSelected):t.classList.remove(this.main.config.optionSelected),t},n);function n(e){this.main=e.main,this.container=this.containerDiv(),this.content=this.contentDiv(),this.search=this.searchDiv(),this.list=this.listDiv(),this.options(),this.singleSelected=null,this.multiSelected=null,this.main.config.isMultiple?(this.multiSelected=this.multiSelectedDiv(),this.multiSelected&&this.container.appendChild(this.multiSelected.container)):(this.singleSelected=this.singleSelectedDiv(),this.container.appendChild(this.singleSelected.container)),this.main.config.addToBody?(this.content.classList.add(this.main.config.id),document.body.appendChild(this.content)):this.container.appendChild(this.content),this.content.appendChild(this.search.container),this.content.appendChild(this.list)}t.Slim=s}],n.c=s,n.d=function(e,t,i){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:i})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(t,e){if(1&e&&(t=n(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var i=Object.create(null);if(n.r(i),Object.defineProperty(i,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var s in t)n.d(i,s,function(e){return t[e]}.bind(null,s));return i},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=2).default;function n(e){if(s[e])return s[e].exports;var t=s[e]={i:e,l:!1,exports:{}};return i[e].call(t.exports,t,t.exports,n),t.l=!0,t.exports}var i,s});
\ No newline at end of file
diff --git a/admin/js/vendors/slimselect/slimselect.min.orig.css b/admin/js/vendors/slimselect/slimselect.min.orig.css
new file mode 100644 (file)
index 0000000..753635a
--- /dev/null
@@ -0,0 +1 @@
+.ss-main{position:relative;display:inline-block;user-select:none;color:#666;width:100%}.ss-main .ss-single-selected{display:flex;cursor:pointer;width:100%;height:30px;padding:6px;border:1px solid #dcdee2;border-radius:4px;background-color:#fff;outline:0;box-sizing:border-box;transition:background-color .2s}.ss-main .ss-single-selected.ss-disabled{background-color:#dcdee2;cursor:not-allowed}.ss-main .ss-single-selected.ss-open-above{border-top-left-radius:0;border-top-right-radius:0}.ss-main .ss-single-selected.ss-open-below{border-bottom-left-radius:0;border-bottom-right-radius:0}.ss-main .ss-single-selected .placeholder{display:flex;flex:1 1 100%;align-items:center;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;text-align:left;width:calc(100% - 30px);line-height:1em;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.ss-main .ss-single-selected .placeholder *{display:flex;align-items:center;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;width:auto}.ss-main .ss-single-selected .placeholder .ss-disabled{color:#dedede}.ss-main .ss-single-selected .ss-deselect{display:flex;align-items:center;justify-content:flex-end;flex:0 1 auto;margin:0 6px 0 6px;font-weight:700}.ss-main .ss-single-selected .ss-deselect.ss-hide{display:none}.ss-main .ss-single-selected .ss-arrow{display:flex;align-items:center;justify-content:flex-end;flex:0 1 auto;margin:0 6px 0 6px}.ss-main .ss-single-selected .ss-arrow span{border:solid #666;border-width:0 2px 2px 0;display:inline-block;padding:3px;transition:transform .2s,margin .2s}.ss-main .ss-single-selected .ss-arrow span.arrow-up{transform:rotate(-135deg);margin:3px 0 0 0}.ss-main .ss-single-selected .ss-arrow span.arrow-down{transform:rotate(45deg);margin:-3px 0 0 0}.ss-main .ss-multi-selected{display:flex;flex-direction:row;cursor:pointer;min-height:30px;width:100%;padding:0 0 0 3px;border:1px solid #dcdee2;border-radius:4px;background-color:#fff;outline:0;box-sizing:border-box;transition:background-color .2s}.ss-main .ss-multi-selected.ss-disabled{background-color:#dcdee2;cursor:not-allowed}.ss-main .ss-multi-selected.ss-disabled .ss-values .ss-disabled{color:#666}.ss-main .ss-multi-selected.ss-disabled .ss-values .ss-value .ss-value-delete{cursor:not-allowed}.ss-main .ss-multi-selected.ss-open-above{border-top-left-radius:0;border-top-right-radius:0}.ss-main .ss-multi-selected.ss-open-below{border-bottom-left-radius:0;border-bottom-right-radius:0}.ss-main .ss-multi-selected .ss-values{display:flex;flex-wrap:wrap;justify-content:flex-start;flex:1 1 100%;width:calc(100% - 30px)}.ss-main .ss-multi-selected .ss-values .ss-disabled{display:flex;padding:4px 5px;margin:2px 0;line-height:1em;align-items:center;width:100%;color:#dedede;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}@keyframes scaleIn{0%{transform:scale(0);opacity:0}100%{transform:scale(1);opacity:1}}@keyframes scaleOut{0%{transform:scale(1);opacity:1}100%{transform:scale(0);opacity:0}}.ss-main .ss-multi-selected .ss-values .ss-value{display:flex;user-select:none;align-items:center;font-size:12px;padding:3px 5px;margin:3px 5px 3px 0;color:#fff;background-color:#5897fb;border-radius:4px;animation-name:scaleIn;animation-duration:.2s;animation-timing-function:ease-out;animation-fill-mode:both}.ss-main .ss-multi-selected .ss-values .ss-value.ss-out{animation-name:scaleOut;animation-duration:.2s;animation-timing-function:ease-out}.ss-main .ss-multi-selected .ss-values .ss-value .ss-value-delete{margin:0 0 0 5px;cursor:pointer}.ss-main .ss-multi-selected .ss-add{display:flex;flex:0 1 3px;margin:9px 12px 0 5px}.ss-main .ss-multi-selected .ss-add .ss-plus{display:flex;justify-content:center;align-items:center;background:#666;position:relative;height:10px;width:2px;transition:transform .2s}.ss-main .ss-multi-selected .ss-add .ss-plus:after{background:#666;content:"";position:absolute;height:2px;width:10px;left:-4px;top:4px}.ss-main .ss-multi-selected .ss-add .ss-plus.ss-cross{transform:rotate(45deg)}.ss-content{position:absolute;width:100%;margin:-1px 0 0 0;box-sizing:border-box;border:solid 1px #dcdee2;z-index:1010;background-color:#fff;transform-origin:center top;transition:transform .2s,opacity .2s;opacity:0;transform:scaleY(0)}.ss-content.ss-open{display:block;opacity:1;transform:scaleY(1)}.ss-content .ss-search{display:flex;flex-direction:row;padding:8px 8px 6px 8px}.ss-content .ss-search.ss-hide{height:0;opacity:0;padding:0;margin:0}.ss-content .ss-search.ss-hide input{height:0;opacity:0;padding:0;margin:0}.ss-content .ss-search input{display:inline-flex;font-size:inherit;line-height:inherit;flex:1 1 auto;width:100%;min-width:0;height:30px;padding:6px 8px;margin:0;border:1px solid #dcdee2;border-radius:4px;background-color:#fff;outline:0;text-align:left;box-sizing:border-box;-webkit-box-sizing:border-box;-webkit-appearance:textfield}.ss-content .ss-search input::placeholder{color:#8a8a8a;vertical-align:middle}.ss-content .ss-search input:focus{box-shadow:0 0 5px #5897fb}.ss-content .ss-search .ss-addable{display:inline-flex;justify-content:center;align-items:center;cursor:pointer;font-size:22px;font-weight:700;flex:0 0 30px;height:30px;margin:0 0 0 8px;border:1px solid #dcdee2;border-radius:4px;box-sizing:border-box}.ss-content .ss-addable{padding-top:0}.ss-content .ss-list{max-height:200px;overflow-x:hidden;overflow-y:auto;text-align:left}.ss-content .ss-list .ss-optgroup .ss-optgroup-label{padding:6px 10px 6px 10px;font-weight:700}.ss-content .ss-list .ss-optgroup .ss-option{padding:6px 6px 6px 25px}.ss-content .ss-list .ss-optgroup-label-selectable{cursor:pointer}.ss-content .ss-list .ss-optgroup-label-selectable:hover{color:#fff;background-color:#5897fb}.ss-content .ss-list .ss-option{padding:6px 10px 6px 10px;cursor:pointer;user-select:none}.ss-content .ss-list .ss-option *{display:inline-block}.ss-content .ss-list .ss-option.ss-highlighted,.ss-content .ss-list .ss-option:hover{color:#fff;background-color:#5897fb}.ss-content .ss-list .ss-option.ss-disabled{cursor:not-allowed;color:#dedede;background-color:#fff}.ss-content .ss-list .ss-option:not(.ss-disabled).ss-option-selected{color:#666;background-color:rgba(88,151,251,.1)}.ss-content .ss-list .ss-option.ss-hide{display:none}.ss-content .ss-list .ss-option .ss-search-highlight{background-color:#fffb8c}
\ No newline at end of file
diff --git a/admin/js/vendors/slimselect/slimselect.min.xx.js b/admin/js/vendors/slimselect/slimselect.min.xx.js
new file mode 100644 (file)
index 0000000..d396710
--- /dev/null
@@ -0,0 +1 @@
+!function webpackUniversalModuleDefinition(root,factory){"object"==typeof exports&&"object"==typeof module?module.exports=factory():"function"==typeof define&&define.amd?define([],factory):"object"==typeof exports?exports.SlimSelect=factory():root.SlimSelect=factory()}(window,(function(){return function(modules){var installedModules={};function __webpack_require__(moduleId){if(installedModules[moduleId])return installedModules[moduleId].exports;var module=installedModules[moduleId]={i:moduleId,l:!1,exports:{}};return modules[moduleId].call(module.exports,module,module.exports,__webpack_require__),module.l=!0,module.exports}return __webpack_require__.m=modules,__webpack_require__.c=installedModules,__webpack_require__.d=function(exports,name,getter){__webpack_require__.o(exports,name)||Object.defineProperty(exports,name,{enumerable:!0,get:getter})},__webpack_require__.r=function(exports){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(exports,"__esModule",{value:!0})},__webpack_require__.t=function(value,mode){if(1&mode&&(value=__webpack_require__(value)),8&mode)return value;if(4&mode&&"object"==typeof value&&value&&value.__esModule)return value;var ns=Object.create(null);if(__webpack_require__.r(ns),Object.defineProperty(ns,"default",{enumerable:!0,value:value}),2&mode&&"string"!=typeof value)for(var key in value)__webpack_require__.d(ns,key,function(key){return value[key]}.bind(null,key));return ns},__webpack_require__.n=function(module){var getter=module&&module.__esModule?function getDefault(){return module.default}:function getModuleExports(){return module};return __webpack_require__.d(getter,"a",getter),getter},__webpack_require__.o=function(object,property){return Object.prototype.hasOwnProperty.call(object,property)},__webpack_require__.p="",__webpack_require__(__webpack_require__.s=2)}([function(module,exports,__webpack_require__){"use strict";function hasClassInTree(element,className){function hasClass(e,c){return c&&e&&e.classList&&e.classList.contains(c)?e:null}function parentByClass(e,c){return e&&e!==document?hasClass(e,c)?e:parentByClass(e.parentNode,c):null}return hasClass(element,className)||parentByClass(element,className)}function ensureElementInView(container,element){var cTop=container.scrollTop+container.offsetTop,cBottom=cTop+container.clientHeight,eTop=element.offsetTop,eBottom=eTop+element.clientHeight;eTop<cTop?container.scrollTop-=cTop-eTop:eBottom>cBottom&&(container.scrollTop+=eBottom-cBottom)}function putContent(el,currentPosition,isOpen){var height=el.offsetHeight,rect=el.getBoundingClientRect(),elemTop=isOpen?rect.top:rect.top-height,elemBottom=isOpen?rect.bottom:rect.bottom+height;return elemTop<=0?"below":elemBottom>=window.innerHeight?"above":isOpen?currentPosition:"below"}function debounce(func,wait,immediate){var timeout;return void 0===wait&&(wait=100),void 0===immediate&&(immediate=!1),function(){for(var args=[],_i=0;_i<arguments.length;_i++)args[_i]=arguments[_i];var context=self,later=function(){timeout=null,immediate||func.apply(context,args)},callNow=immediate&&!timeout;clearTimeout(timeout),timeout=setTimeout(later,wait),callNow&&func.apply(context,args)}}function isValueInArrayOfObjects(selected,key,value){if(!Array.isArray(selected))return selected[key]===value;for(var _i=0,selected_1=selected;_i<selected_1.length;_i++){var s=selected_1[_i];if(s&&s[key]&&s[key]===value)return!0}return!1}function highlight(str,search,className){var completedString=str,regex=new RegExp("("+search.trim()+")(?![^<]*>[^<>]*</)","i");if(!str.match(regex))return str;var matchStartPosition=str.match(regex).index,matchEndPosition=matchStartPosition+str.match(regex)[0].toString().length,originalTextFoundByRegex=str.substring(matchStartPosition,matchEndPosition);return completedString=completedString.replace(regex,'<mark class="'+className+'">'+originalTextFoundByRegex+"</mark>")}function kebabCase(str){var result=str.replace(/[A-Z\u00C0-\u00D6\u00D8-\u00DE]/g,(function(match){return"-"+match.toLowerCase()}));return str[0]===str[0].toUpperCase()?result.substring(1):result}exports.__esModule=!0,exports.hasClassInTree=hasClassInTree,exports.ensureElementInView=ensureElementInView,exports.putContent=putContent,exports.debounce=debounce,exports.isValueInArrayOfObjects=isValueInArrayOfObjects,exports.highlight=highlight,exports.kebabCase=kebabCase,function(){var w=window;function CustomEvent(event,params){params=params||{bubbles:!1,cancelable:!1,detail:void 0};var evt=document.createEvent("CustomEvent");return evt.initCustomEvent(event,params.bubbles,params.cancelable,params.detail),evt}"function"!=typeof w.CustomEvent&&(CustomEvent.prototype=w.Event.prototype,w.CustomEvent=CustomEvent)}()},function(module,exports,__webpack_require__){"use strict";exports.__esModule=!0;var Data=function(){function Data(info){this.contentOpen=!1,this.contentPosition="below",this.isOnChangeEnabled=!0,this.main=info.main,this.searchValue="",this.data=[],this.filtered=null,this.parseSelectData(),this.setSelectedFromSelect()}return Data.prototype.newOption=function(info){return{id:info.id?info.id:String(Math.floor(1e8*Math.random())),value:info.value?info.value:"",text:info.text?info.text:"",innerHTML:info.innerHTML?info.innerHTML:"",selected:!!info.selected&&info.selected,display:void 0===info.display||info.display,disabled:!!info.disabled&&info.disabled,placeholder:!!info.placeholder&&info.placeholder,class:info.class?info.class:void 0,data:info.data?info.data:{},mandatory:!!info.mandatory&&info.mandatory}},Data.prototype.add=function(data){this.data.push({id:String(Math.floor(1e8*Math.random())),value:data.value,text:data.text,innerHTML:"",selected:!1,display:!0,disabled:!1,placeholder:!1,class:void 0,mandatory:data.mandatory,data:{}})},Data.prototype.parseSelectData=function(){this.data=[];for(var nodes,_i=0,nodes_1=this.main.select.element.childNodes;_i<nodes_1.length;_i++){var n=nodes_1[_i];if("OPTGROUP"===n.nodeName){for(var node,optgroup={label:n.label,options:[]},options,_a=0,options_1=n.childNodes;_a<options_1.length;_a++){var o=options_1[_a];if("OPTION"===o.nodeName){var option=this.pullOptionData(o);optgroup.options.push(option),option.placeholder&&""!==option.text.trim()&&(this.main.config.placeholderText=option.text)}}this.data.push(optgroup)}else if("OPTION"===n.nodeName){var option=this.pullOptionData(n);this.data.push(option),option.placeholder&&""!==option.text.trim()&&(this.main.config.placeholderText=option.text)}}},Data.prototype.pullOptionData=function(option){return{id:!!option.dataset&&option.dataset.id||String(Math.floor(1e8*Math.random())),value:option.value,text:option.text,innerHTML:option.innerHTML,selected:option.selected,disabled:option.disabled,placeholder:"true"===option.dataset.placeholder,class:option.className,style:option.style.cssText,data:option.dataset,mandatory:!!option.dataset&&"true"===option.dataset.mandatory}},Data.prototype.setSelectedFromSelect=function(){if(this.main.config.isMultiple){for(var options,newSelected=[],_i=0,options_2=this.main.select.element.options;_i<options_2.length;_i++){var o=options_2[_i];if(o.selected){var newOption=this.getObjectFromData(o.value,"value");newOption&&newOption.id&&newSelected.push(newOption.id)}}this.setSelected(newSelected,"id")}else{var element=this.main.select.element;if(-1!==element.selectedIndex){var option,value=element.options[element.selectedIndex].value;this.setSelected(value,"value")}}},Data.prototype.setSelected=function(value,type){void 0===type&&(type="id");for(var _i=0,_a=this.data;_i<_a.length;_i++){var d=_a[_i];if(d.hasOwnProperty("label")){if(d.hasOwnProperty("options")){var options=d.options;if(options)for(var _b=0,options_3=options;_b<options_3.length;_b++){var o=options_3[_b];o.placeholder||(o.selected=this.shouldBeSelected(o,value,type))}}}else d.selected=this.shouldBeSelected(d,value,type)}},Data.prototype.shouldBeSelected=function(option,value,type){if(void 0===type&&(type="id"),Array.isArray(value))for(var _i=0,value_1=value;_i<value_1.length;_i++){var v=value_1[_i];if(type in option&&String(option[type])===String(v))return!0}else if(type in option&&String(option[type])===String(value))return!0;return!1},Data.prototype.getSelected=function(){for(var value={text:"",placeholder:this.main.config.placeholderText},values=[],_i=0,_a=this.data;_i<_a.length;_i++){var d=_a[_i];if(d.hasOwnProperty("label")){if(d.hasOwnProperty("options")){var options=d.options;if(options)for(var _b=0,options_4=options;_b<options_4.length;_b++){var o=options_4[_b];o.selected&&(this.main.config.isMultiple?values.push(o):value=o)}}}else d.selected&&(this.main.config.isMultiple?values.push(d):value=d)}return this.main.config.isMultiple?values:value},Data.prototype.addToSelected=function(value,type){if(void 0===type&&(type="id"),this.main.config.isMultiple){var values=[],selected=this.getSelected();if(Array.isArray(selected))for(var _i=0,selected_1=selected;_i<selected_1.length;_i++){var s=selected_1[_i];values.push(s[type])}values.push(value),this.setSelected(values,type)}},Data.prototype.removeFromSelected=function(value,type){if(void 0===type&&(type="id"),this.main.config.isMultiple){for(var values=[],selected,_i=0,selected_2=this.getSelected();_i<selected_2.length;_i++){var s=selected_2[_i];String(s[type])!==String(value)&&values.push(s[type])}this.setSelected(values,type)}},Data.prototype.onDataChange=function(){this.main.onChange&&this.isOnChangeEnabled&&this.main.onChange(JSON.parse(JSON.stringify(this.getSelected())))},Data.prototype.getObjectFromData=function(value,type){void 0===type&&(type="id");for(var _i=0,_a=this.data;_i<_a.length;_i++){var d=_a[_i];if(type in d&&String(d[type])===String(value))return d;if(d.hasOwnProperty("options")){var optgroupObject=d;if(optgroupObject.options)for(var _b=0,_c=optgroupObject.options;_b<_c.length;_b++){var oo=_c[_b];if(String(oo[type])===String(value))return oo}}}return null},Data.prototype.search=function(search){if(this.searchValue=search,""!==search.trim()){var searchFilter=this.main.config.searchFilter,valuesArray=this.data.slice(0);search=search.trim();var filtered=valuesArray.map((function(obj){if(obj.hasOwnProperty("options")){var optgroupObj=obj,options=[];if(optgroupObj.options&&(options=optgroupObj.options.filter((function(opt){return searchFilter(opt,search)}))),0!==options.length){var optgroup=Object.assign({},optgroupObj);return optgroup.options=options,optgroup}}var optionObj;if(obj.hasOwnProperty("text")&&searchFilter(obj,search))return obj;return null}));this.filtered=filtered.filter((function(info){return info}))}else this.filtered=null},Data}();function validateData(data){if(!data)return console.error("Data must be an array of objects"),!1;for(var isValid=!1,errorCount=0,_i=0,data_1=data;_i<data_1.length;_i++){var d=data_1[_i],option;if(d.hasOwnProperty("label")){if(d.hasOwnProperty("options")){var optgroup,options=d.options;if(options)for(var _a=0,options_5=options;_a<options_5.length;_a++){var o;(isValid=validateOption(options_5[_a]))||errorCount++}}}else(isValid=validateOption(d))||errorCount++}return 0===errorCount}function validateOption(option){return void 0!==option.text||(console.error("Data object option must have at least have a text value. Check object: "+JSON.stringify(option)),!1)}exports.Data=Data,exports.validateData=validateData,exports.validateOption=validateOption},function(module,exports,__webpack_require__){"use strict";exports.__esModule=!0;var config_1=__webpack_require__(3),select_1=__webpack_require__(4),slim_1=__webpack_require__(5),data_1=__webpack_require__(1),helper_1=__webpack_require__(0),SlimSelect=function(){function SlimSelect(info){var _this=this;this.ajax=null,this.addable=null,this.beforeOnChange=null,this.onChange=null,this.beforeOpen=null,this.afterOpen=null,this.beforeClose=null,this.afterClose=null;var selectElement=this.validate(info);selectElement.dataset.ssid&&this.destroy(selectElement.dataset.ssid),info.ajax&&(this.ajax=info.ajax),info.addable&&(this.addable=info.addable),this.config=new config_1.Config({select:selectElement,isAjax:!!info.ajax,showSearch:info.showSearch,searchPlaceholder:info.searchPlaceholder,searchText:info.searchText,searchingText:info.searchingText,searchFocus:info.searchFocus,searchHighlight:info.searchHighlight,searchFilter:info.searchFilter,closeOnSelect:info.closeOnSelect,showContent:info.showContent,placeholderText:info.placeholder,allowDeselect:info.allowDeselect,allowDeselectOption:info.allowDeselectOption,hideSelectedOption:info.hideSelectedOption,deselectLabel:info.deselectLabel,isEnabled:info.isEnabled,valuesUseText:info.valuesUseText,showOptionTooltips:info.showOptionTooltips,selectByGroup:info.selectByGroup,limit:info.limit,timeoutDelay:info.timeoutDelay,addToBody:info.addToBody}),this.select=new select_1.Select({select:selectElement,main:this}),this.data=new data_1.Data({main:this}),this.slim=new slim_1.Slim({main:this}),this.select.element.parentNode&&this.select.element.parentNode.insertBefore(this.slim.container,this.select.element.nextSibling),info.data?this.setData(info.data):this.render(),document.addEventListener("click",(function(e){e.target&&!helper_1.hasClassInTree(e.target,_this.config.id)&&_this.close()})),"auto"===this.config.showContent&&window.addEventListener("scroll",helper_1.debounce((function(e){_this.data.contentOpen&&("above"===helper_1.putContent(_this.slim.content,_this.data.contentPosition,_this.data.contentOpen)?_this.moveContentAbove():_this.moveContentBelow())})),!1),info.beforeOnChange&&(this.beforeOnChange=info.beforeOnChange),info.onChange&&(this.onChange=info.onChange),info.beforeOpen&&(this.beforeOpen=info.beforeOpen),info.afterOpen&&(this.afterOpen=info.afterOpen),info.beforeClose&&(this.beforeClose=info.beforeClose),info.afterClose&&(this.afterClose=info.afterClose),this.config.isEnabled||this.disable()}return SlimSelect.prototype.validate=function(info){var select="string"==typeof info.select?document.querySelector(info.select):info.select;if(!select)throw new Error("Could not find select element");if("SELECT"!==select.tagName)throw new Error("Element isnt of type select");return select},SlimSelect.prototype.selected=function(){if(this.config.isMultiple){for(var selected,outputSelected=[],_i=0,selected_1=selected=this.data.getSelected();_i<selected_1.length;_i++){var s=selected_1[_i];outputSelected.push(s.value)}return outputSelected}var selected;return(selected=this.data.getSelected())?selected.value:""},SlimSelect.prototype.set=function(value,type,close,render){void 0===type&&(type="value"),void 0===close&&(close=!0),void 0===render&&(render=!0),this.config.isMultiple&&!Array.isArray(value)?this.data.addToSelected(value,type):this.data.setSelected(value,type),this.select.setValue(),this.data.onDataChange(),this.render(),close&&this.close()},SlimSelect.prototype.setSelected=function(value,type,close,render){void 0===type&&(type="value"),void 0===close&&(close=!0),void 0===render&&(render=!0),this.set(value,type,close,render)},SlimSelect.prototype.setData=function(data){var isValid;if(data_1.validateData(data)){var newData=JSON.parse(JSON.stringify(data)),selected=this.data.getSelected();if(this.config.isAjax&&selected)if(this.config.isMultiple)for(var reverseSelected,_i=0,reverseSelected_1=selected.reverse();_i<reverseSelected_1.length;_i++){var r=reverseSelected_1[_i];newData.unshift(r)}else newData.unshift(this.data.getSelected()),newData.unshift({text:"",placeholder:!0});this.select.create(newData),this.data.parseSelectData(),this.data.setSelectedFromSelect()}else console.error("Validation problem on: #"+this.select.element.id)},SlimSelect.prototype.addData=function(data){var isValid;data_1.validateData([data])?(this.data.add(this.data.newOption(data)),this.select.create(this.data.data),this.data.parseSelectData(),this.data.setSelectedFromSelect(),this.render()):console.error("Validation problem on: #"+this.select.element.id)},SlimSelect.prototype.open=function(){var _this=this;if(this.config.isEnabled&&!this.data.contentOpen){if(this.beforeOpen&&this.beforeOpen(),this.config.isMultiple&&this.slim.multiSelected?this.slim.multiSelected.plus.classList.add("ss-cross"):this.slim.singleSelected&&(this.slim.singleSelected.arrowIcon.arrow.classList.remove("arrow-down"),this.slim.singleSelected.arrowIcon.arrow.classList.add("arrow-up")),this.slim[this.config.isMultiple?"multiSelected":"singleSelected"].container.classList.add("above"===this.data.contentPosition?this.config.openAbove:this.config.openBelow),this.config.addToBody){var containerRect=this.slim.container.getBoundingClientRect();this.slim.content.style.top=containerRect.top+containerRect.height+window.scrollY+"px",this.slim.content.style.left=containerRect.left+window.scrollX+"px",this.slim.content.style.width=containerRect.width+"px"}if(this.slim.content.classList.add(this.config.open),"up"===this.config.showContent.toLowerCase()?this.moveContentAbove():"down"===this.config.showContent.toLowerCase()?this.moveContentBelow():"above"===helper_1.putContent(this.slim.content,this.data.contentPosition,this.data.contentOpen)?this.moveContentAbove():this.moveContentBelow(),!this.config.isMultiple){var selected=this.data.getSelected();if(selected){var selectedId=selected.id,selectedOption=this.slim.list.querySelector('[data-id="'+selectedId+'"]');selectedOption&&helper_1.ensureElementInView(this.slim.list,selectedOption)}}setTimeout((function(){_this.data.contentOpen=!0,_this.config.searchFocus&&_this.slim.search.input.focus(),_this.afterOpen&&_this.afterOpen()}),this.config.timeoutDelay)}},SlimSelect.prototype.close=function(){var _this=this;this.data.contentOpen&&(this.beforeClose&&this.beforeClose(),this.config.isMultiple&&this.slim.multiSelected?(this.slim.multiSelected.container.classList.remove(this.config.openAbove),this.slim.multiSelected.container.classList.remove(this.config.openBelow),this.slim.multiSelected.plus.classList.remove("ss-cross")):this.slim.singleSelected&&(this.slim.singleSelected.container.classList.remove(this.config.openAbove),this.slim.singleSelected.container.classList.remove(this.config.openBelow),this.slim.singleSelected.arrowIcon.arrow.classList.add("arrow-down"),this.slim.singleSelected.arrowIcon.arrow.classList.remove("arrow-up")),this.slim.content.classList.remove(this.config.open),this.data.contentOpen=!1,this.search(""),setTimeout((function(){_this.slim.content.removeAttribute("style"),_this.data.contentPosition="below",_this.config.isMultiple&&_this.slim.multiSelected?(_this.slim.multiSelected.container.classList.remove(_this.config.openAbove),_this.slim.multiSelected.container.classList.remove(_this.config.openBelow)):_this.slim.singleSelected&&(_this.slim.singleSelected.container.classList.remove(_this.config.openAbove),_this.slim.singleSelected.container.classList.remove(_this.config.openBelow)),_this.slim.search.input.blur(),_this.afterClose&&_this.afterClose()}),this.config.timeoutDelay))},SlimSelect.prototype.moveContentAbove=function(){var selectHeight=0;this.config.isMultiple&&this.slim.multiSelected?selectHeight=this.slim.multiSelected.container.offsetHeight:this.slim.singleSelected&&(selectHeight=this.slim.singleSelected.container.offsetHeight);var contentHeight,height=selectHeight+this.slim.content.offsetHeight-1;this.slim.content.style.margin="-"+height+"px 0 0 0",this.slim.content.style.height=height-selectHeight+1+"px",this.slim.content.style.transformOrigin="center bottom",this.data.contentPosition="above",this.config.isMultiple&&this.slim.multiSelected?(this.slim.multiSelected.container.classList.remove(this.config.openBelow),this.slim.multiSelected.container.classList.add(this.config.openAbove)):this.slim.singleSelected&&(this.slim.singleSelected.container.classList.remove(this.config.openBelow),this.slim.singleSelected.container.classList.add(this.config.openAbove))},SlimSelect.prototype.moveContentBelow=function(){this.data.contentPosition="below",this.config.isMultiple&&this.slim.multiSelected?(this.slim.multiSelected.container.classList.remove(this.config.openAbove),this.slim.multiSelected.container.classList.add(this.config.openBelow)):this.slim.singleSelected&&(this.slim.singleSelected.container.classList.remove(this.config.openAbove),this.slim.singleSelected.container.classList.add(this.config.openBelow))},SlimSelect.prototype.enable=function(){this.config.isEnabled=!0,this.config.isMultiple&&this.slim.multiSelected?this.slim.multiSelected.container.classList.remove(this.config.disabled):this.slim.singleSelected&&this.slim.singleSelected.container.classList.remove(this.config.disabled),this.select.triggerMutationObserver=!1,this.select.element.disabled=!1,this.slim.search.input.disabled=!1,this.select.triggerMutationObserver=!0},SlimSelect.prototype.disable=function(){this.config.isEnabled=!1,this.config.isMultiple&&this.slim.multiSelected?this.slim.multiSelected.container.classList.add(this.config.disabled):this.slim.singleSelected&&this.slim.singleSelected.container.classList.add(this.config.disabled),this.select.triggerMutationObserver=!1,this.select.element.disabled=!0,this.slim.search.input.disabled=!0,this.select.triggerMutationObserver=!0},SlimSelect.prototype.search=function(value){if(this.data.searchValue!==value)if(this.slim.search.input.value=value,this.config.isAjax){var master_1=this;this.config.isSearching=!0,this.render(),this.ajax&&this.ajax(value,(function(info){master_1.config.isSearching=!1,Array.isArray(info)?(info.unshift({text:"",placeholder:!0}),master_1.setData(info),master_1.data.search(value),master_1.render()):"string"==typeof info?master_1.slim.options(info):master_1.render()}))}else this.data.search(value),this.render()},SlimSelect.prototype.setSearchText=function(text){this.config.searchText=text},SlimSelect.prototype.render=function(){this.config.isMultiple?this.slim.values():(this.slim.placeholder(),this.slim.deselect()),this.slim.options()},SlimSelect.prototype.destroy=function(id){void 0===id&&(id=null);var slim=id?document.querySelector("."+id+".ss-main"):this.slim.container,select=id?document.querySelector("[data-ssid="+id+"]"):this.select.element,el;if(slim&&select&&(select.style.display="",delete select.dataset.ssid,select.slim=null,slim.parentElement&&slim.parentElement.removeChild(slim),this.config.addToBody)){var slimContent=id?document.querySelector("."+id+".ss-content"):this.slim.content;if(!slimContent)return;document.body.removeChild(slimContent)}},SlimSelect}();exports.default=SlimSelect},function(module,exports,__webpack_require__){"use strict";exports.__esModule=!0;var Config=function(){function Config(info){this.id="",this.isMultiple=!1,this.isAjax=!1,this.isSearching=!1,this.showSearch=!0,this.searchFocus=!0,this.searchHighlight=!1,this.closeOnSelect=!0,this.showContent="auto",this.searchPlaceholder="Search",this.searchText="No Results",this.searchingText="Searching...",this.placeholderText="Select Value",this.allowDeselect=!1,this.allowDeselectOption=!1,this.hideSelectedOption=!1,this.deselectLabel="x",this.isEnabled=!0,this.valuesUseText=!1,this.showOptionTooltips=!1,this.selectByGroup=!1,this.limit=0,this.timeoutDelay=200,this.addToBody=!1,this.main="ss-main",this.singleSelected="ss-single-selected",this.arrow="ss-arrow",this.multiSelected="ss-multi-selected",this.add="ss-add",this.plus="ss-plus",this.values="ss-values",this.value="ss-value",this.valueText="ss-value-text",this.valueDelete="ss-value-delete",this.content="ss-content",this.open="ss-open",this.openAbove="ss-open-above",this.openBelow="ss-open-below",this.search="ss-search",this.searchHighlighter="ss-search-highlight",this.addable="ss-addable",this.list="ss-list",this.optgroup="ss-optgroup",this.optgroupLabel="ss-optgroup-label",this.optgroupLabelSelectable="ss-optgroup-label-selectable",this.option="ss-option",this.optionSelected="ss-option-selected",this.highlighted="ss-highlighted",this.disabled="ss-disabled",this.hide="ss-hide",this.id="ss-"+Math.floor(1e5*Math.random()),this.style=info.select.style.cssText,this.class=info.select.className.split(" "),this.isMultiple=info.select.multiple,this.isAjax=info.isAjax,this.showSearch=!1!==info.showSearch,this.searchFocus=!1!==info.searchFocus,this.searchHighlight=!0===info.searchHighlight,this.closeOnSelect=!1!==info.closeOnSelect,info.showContent&&(this.showContent=info.showContent),this.isEnabled=!1!==info.isEnabled,info.searchPlaceholder&&(this.searchPlaceholder=info.searchPlaceholder),info.searchText&&(this.searchText=info.searchText),info.searchingText&&(this.searchingText=info.searchingText),info.placeholderText&&(this.placeholderText=info.placeholderText),this.allowDeselect=!0===info.allowDeselect,this.allowDeselectOption=!0===info.allowDeselectOption,this.hideSelectedOption=!0===info.hideSelectedOption,info.deselectLabel&&(this.deselectLabel=info.deselectLabel),info.valuesUseText&&(this.valuesUseText=info.valuesUseText),info.showOptionTooltips&&(this.showOptionTooltips=info.showOptionTooltips),info.selectByGroup&&(this.selectByGroup=info.selectByGroup),info.limit&&(this.limit=info.limit),info.searchFilter&&(this.searchFilter=info.searchFilter),null!=info.timeoutDelay&&(this.timeoutDelay=info.timeoutDelay),this.addToBody=!0===info.addToBody}return Config.prototype.searchFilter=function(opt,search){return-1!==opt.text.toLowerCase().indexOf(search.toLowerCase())},Config}();exports.Config=Config},function(module,exports,__webpack_require__){"use strict";exports.__esModule=!0;var helper_1=__webpack_require__(0),Select=function(){function Select(info){var el;this.triggerMutationObserver=!0,this.element=info.select,this.main=info.main,this.element.disabled&&(this.main.config.isEnabled=!1),this.addAttributes(),this.addEventListeners(),this.mutationObserver=null,this.addMutationObserver(),this.element.slim=info.main}return Select.prototype.setValue=function(){if(this.main.data.getSelected()){if(this.main.config.isMultiple)for(var selected=this.main.data.getSelected(),options,_i=0,options_1=this.element.options;_i<options_1.length;_i++){var o=options_1[_i];o.selected=!1;for(var _a=0,selected_1=selected;_a<selected_1.length;_a++){var s;selected_1[_a].value===o.value&&(o.selected=!0)}}else{var selected=this.main.data.getSelected();this.element.value=selected?selected.value:""}this.main.data.isOnChangeEnabled=!1,this.element.dispatchEvent(new CustomEvent("change",{bubbles:!0})),this.main.data.isOnChangeEnabled=!0}},Select.prototype.addAttributes=function(){this.element.tabIndex=-1,this.element.style.display="none",this.element.dataset.ssid=this.main.config.id},Select.prototype.addEventListeners=function(){var _this=this;this.element.addEventListener("change",(function(e){_this.main.data.setSelectedFromSelect(),_this.main.render()}))},Select.prototype.addMutationObserver=function(){var _this=this;this.main.config.isAjax||(this.mutationObserver=new MutationObserver((function(mutations){_this.triggerMutationObserver&&(_this.main.data.parseSelectData(),_this.main.data.setSelectedFromSelect(),_this.main.render(),mutations.forEach((function(mutation){"class"===mutation.attributeName&&_this.main.slim.updateContainerDivClass(_this.main.slim.container)})))})),this.observeMutationObserver())},Select.prototype.observeMutationObserver=function(){this.mutationObserver&&this.mutationObserver.observe(this.element,{attributes:!0,childList:!0,characterData:!0})},Select.prototype.disconnectMutationObserver=function(){this.mutationObserver&&this.mutationObserver.disconnect()},Select.prototype.create=function(data){this.element.innerHTML="";for(var _i=0,data_1=data;_i<data_1.length;_i++){var d=data_1[_i];if(d.hasOwnProperty("options")){var optgroupObject=d,optgroupEl=document.createElement("optgroup");if(optgroupEl.label=optgroupObject.label,optgroupObject.options)for(var _a=0,_b=optgroupObject.options;_a<_b.length;_a++){var oo=_b[_a];optgroupEl.appendChild(this.createOption(oo))}this.element.appendChild(optgroupEl)}else this.element.appendChild(this.createOption(d))}},Select.prototype.createOption=function(info){var optionEl=document.createElement("option");return optionEl.value=""!==info.value?info.value:info.text,optionEl.innerHTML=info.innerHTML||info.text,info.selected&&(optionEl.selected=info.selected),!1===info.display&&(optionEl.style.display="none"),info.disabled&&(optionEl.disabled=!0),info.placeholder&&optionEl.setAttribute("data-placeholder","true"),info.mandatory&&optionEl.setAttribute("data-mandatory","true"),info.class&&info.class.split(" ").forEach((function(optionClass){optionEl.classList.add(optionClass)})),info.data&&"object"==typeof info.data&&Object.keys(info.data).forEach((function(key){optionEl.setAttribute("data-"+helper_1.kebabCase(key),info.data[key])})),optionEl},Select}();exports.Select=Select},function(module,exports,__webpack_require__){"use strict";exports.__esModule=!0;var helper_1=__webpack_require__(0),data_1=__webpack_require__(1),Slim=function(){function Slim(info){this.main=info.main,this.container=this.containerDiv(),this.content=this.contentDiv(),this.search=this.searchDiv(),this.list=this.listDiv(),this.options(),this.singleSelected=null,this.multiSelected=null,this.main.config.isMultiple?(this.multiSelected=this.multiSelectedDiv(),this.multiSelected&&this.container.appendChild(this.multiSelected.container)):(this.singleSelected=this.singleSelectedDiv(),this.container.appendChild(this.singleSelected.container)),this.main.config.addToBody?(this.content.classList.add(this.main.config.id),document.body.appendChild(this.content)):this.container.appendChild(this.content),this.content.appendChild(this.search.container),this.content.appendChild(this.list)}return Slim.prototype.containerDiv=function(){var container=document.createElement("div");return container.style.cssText=this.main.config.style,this.updateContainerDivClass(container),container},Slim.prototype.updateContainerDivClass=function(container){this.main.config.class=this.main.select.element.className.split(" "),container.className="",container.classList.add(this.main.config.id),container.classList.add(this.main.config.main);for(var _i=0,_a=this.main.config.class;_i<_a.length;_i++){var c=_a[_i];""!==c.trim()&&container.classList.add(c)}},Slim.prototype.singleSelectedDiv=function(){var _this=this,container=document.createElement("div");container.classList.add(this.main.config.singleSelected);var placeholder=document.createElement("span");placeholder.classList.add("placeholder"),container.appendChild(placeholder);var deselect=document.createElement("span");deselect.innerHTML=this.main.config.deselectLabel,deselect.classList.add("ss-deselect"),deselect.onclick=function(e){e.stopPropagation(),_this.main.config.isEnabled&&_this.main.set("")},container.appendChild(deselect);var arrowContainer=document.createElement("span");arrowContainer.classList.add(this.main.config.arrow);var arrowIcon=document.createElement("span");return arrowIcon.classList.add("arrow-down"),arrowContainer.appendChild(arrowIcon),container.appendChild(arrowContainer),container.onclick=function(){_this.main.config.isEnabled&&(_this.main.data.contentOpen?_this.main.close():_this.main.open())},{container:container,placeholder:placeholder,deselect:deselect,arrowIcon:{container:arrowContainer,arrow:arrowIcon}}},Slim.prototype.placeholder=function(){var selected=this.main.data.getSelected();if(null===selected||selected&&selected.placeholder){var placeholder=document.createElement("span");placeholder.classList.add(this.main.config.disabled),placeholder.innerHTML=this.main.config.placeholderText,this.singleSelected&&(this.singleSelected.placeholder.innerHTML=placeholder.outerHTML)}else{var selectedValue="";selected&&(selectedValue=selected.innerHTML&&!0!==this.main.config.valuesUseText?selected.innerHTML:selected.text),this.singleSelected&&(this.singleSelected.placeholder.innerHTML=selected?selectedValue:"")}},Slim.prototype.deselect=function(){if(this.singleSelected){if(!this.main.config.allowDeselect)return void this.singleSelected.deselect.classList.add("ss-hide");""===this.main.selected()?this.singleSelected.deselect.classList.add("ss-hide"):this.singleSelected.deselect.classList.remove("ss-hide")}},Slim.prototype.multiSelectedDiv=function(){var _this=this,container=document.createElement("div");container.classList.add(this.main.config.multiSelected);var values=document.createElement("div");values.classList.add(this.main.config.values),container.appendChild(values);var add=document.createElement("div");add.classList.add(this.main.config.add);var plus=document.createElement("span");return plus.classList.add(this.main.config.plus),plus.onclick=function(e){_this.main.data.contentOpen&&(_this.main.close(),e.stopPropagation())},add.appendChild(plus),container.appendChild(add),container.onclick=function(e){var target;_this.main.config.isEnabled&&(e.target.classList.contains(_this.main.config.valueDelete)||(_this.main.data.contentOpen?_this.main.close():_this.main.open()))},{container:container,values:values,add:add,plus:plus}},Slim.prototype.values=function(){if(this.multiSelected){for(var currentNodes=this.multiSelected.values.childNodes,selected=this.main.data.getSelected(),exists,nodesToRemove=[],_i=0,currentNodes_1=currentNodes;_i<currentNodes_1.length;_i++){var c=currentNodes_1[_i];exists=!0;for(var _a=0,selected_1=selected;_a<selected_1.length;_a++){var s=selected_1[_a];String(s.id)===String(c.dataset.id)&&(exists=!1)}exists&&nodesToRemove.push(c)}for(var _b=0,nodesToRemove_1=nodesToRemove;_b<nodesToRemove_1.length;_b++){var n=nodesToRemove_1[_b];n.classList.add("ss-out"),this.multiSelected.values.removeChild(n)}currentNodes=this.multiSelected.values.childNodes;for(var s=0;s<selected.length;s++){exists=!1;for(var _c=0,currentNodes_2=currentNodes;_c<currentNodes_2.length;_c++){var c=currentNodes_2[_c];String(selected[s].id)===String(c.dataset.id)&&(exists=!0)}exists||(0!==currentNodes.length&&HTMLElement.prototype.insertAdjacentElement?0===s?this.multiSelected.values.insertBefore(this.valueDiv(selected[s]),currentNodes[s]):currentNodes[s-1].insertAdjacentElement("afterend",this.valueDiv(selected[s])):this.multiSelected.values.appendChild(this.valueDiv(selected[s])))}if(0===selected.length){var placeholder=document.createElement("span");placeholder.classList.add(this.main.config.disabled),placeholder.innerHTML=this.main.config.placeholderText,this.multiSelected.values.innerHTML=placeholder.outerHTML}}},Slim.prototype.valueDiv=function(optionObj){var _this=this,value=document.createElement("div");value.classList.add(this.main.config.value),value.dataset.id=optionObj.id;var text=document.createElement("span");if(text.classList.add(this.main.config.valueText),text.innerHTML=optionObj.innerHTML&&!0!==this.main.config.valuesUseText?optionObj.innerHTML:optionObj.text,value.appendChild(text),!optionObj.mandatory){var deleteSpan=document.createElement("span");deleteSpan.classList.add(this.main.config.valueDelete),deleteSpan.innerHTML=this.main.config.deselectLabel,deleteSpan.onclick=function(e){e.preventDefault(),e.stopPropagation();var shouldUpdate=!1;if(_this.main.beforeOnChange||(shouldUpdate=!0),_this.main.beforeOnChange){for(var selected=_this.main.data.getSelected(),currentValues=JSON.parse(JSON.stringify(selected)),i=0;i<currentValues.length;i++)currentValues[i].id===optionObj.id&&currentValues.splice(i,1);var beforeOnchange;!1!==_this.main.beforeOnChange(currentValues)&&(shouldUpdate=!0)}shouldUpdate&&(_this.main.data.removeFromSelected(optionObj.id,"id"),_this.main.render(),_this.main.select.setValue(),_this.main.data.onDataChange())},value.appendChild(deleteSpan)}return value},Slim.prototype.contentDiv=function(){var container=document.createElement("div");return container.classList.add(this.main.config.content),container},Slim.prototype.searchDiv=function(){var _this=this,container=document.createElement("div"),input=document.createElement("input"),addable=document.createElement("div");container.classList.add(this.main.config.search);var searchReturn={container:container,input:input};return this.main.config.showSearch||(container.classList.add(this.main.config.hide),input.readOnly=!0),input.type="search",input.placeholder=this.main.config.searchPlaceholder,input.tabIndex=0,input.setAttribute("aria-label",this.main.config.searchPlaceholder),input.setAttribute("autocapitalize","off"),input.setAttribute("autocomplete","off"),input.setAttribute("autocorrect","off"),input.onclick=function(e){setTimeout((function(){var target;""===e.target.value&&_this.main.search("")}),10)},input.onkeydown=function(e){"ArrowUp"===e.key?(_this.main.open(),_this.highlightUp(),e.preventDefault()):"ArrowDown"===e.key?(_this.main.open(),_this.highlightDown(),e.preventDefault()):"Tab"===e.key?_this.main.data.contentOpen?_this.main.close():setTimeout((function(){_this.main.close()}),_this.main.config.timeoutDelay):"Enter"===e.key&&e.preventDefault()},input.onkeyup=function(e){var target=e.target;if("Enter"===e.key){if(_this.main.addable&&e.ctrlKey)return addable.click(),e.preventDefault(),void e.stopPropagation();var highlighted=_this.list.querySelector("."+_this.main.config.highlighted);highlighted&&highlighted.click()}else"ArrowUp"===e.key||"ArrowDown"===e.key||("Escape"===e.key?_this.main.close():_this.main.config.showSearch&&_this.main.data.contentOpen?_this.main.search(target.value):input.value="");e.preventDefault(),e.stopPropagation()},input.onfocus=function(){_this.main.open()},container.appendChild(input),this.main.addable&&(addable.classList.add(this.main.config.addable),addable.innerHTML="+",addable.onclick=function(e){if(_this.main.addable){e.preventDefault(),e.stopPropagation();var inputValue=_this.search.input.value;if(""===inputValue.trim())return void _this.search.input.focus();var addableValue=_this.main.addable(inputValue),addableValueStr_1="",validValue;if(!addableValue)return;if("object"==typeof addableValue)data_1.validateOption(addableValue)&&(_this.main.addData(addableValue),addableValueStr_1=addableValue.value?addableValue.value:addableValue.text);else _this.main.addData(_this.main.data.newOption({text:addableValue,value:addableValue})),addableValueStr_1=addableValue;_this.main.search(""),setTimeout((function(){_this.main.set(addableValueStr_1,"value",!1,!1)}),100),_this.main.config.closeOnSelect&&setTimeout((function(){_this.main.close()}),100)}},container.appendChild(addable),searchReturn.addable=addable),searchReturn},Slim.prototype.highlightUp=function(){var highlighted=this.list.querySelector("."+this.main.config.highlighted),prev=null;if(highlighted)for(prev=highlighted.previousSibling;null!==prev&&prev.classList.contains(this.main.config.disabled);)prev=prev.previousSibling;else{var allOptions=this.list.querySelectorAll("."+this.main.config.option+":not(."+this.main.config.disabled+")");prev=allOptions[allOptions.length-1]}if(prev&&prev.classList.contains(this.main.config.optgroupLabel)&&(prev=null),null===prev){var parent_1=highlighted.parentNode;if(parent_1.classList.contains(this.main.config.optgroup)&&parent_1.previousSibling){var prevNodes=parent_1.previousSibling.querySelectorAll("."+this.main.config.option+":not(."+this.main.config.disabled+")");prevNodes.length&&(prev=prevNodes[prevNodes.length-1])}}prev&&(highlighted&&highlighted.classList.remove(this.main.config.highlighted),prev.classList.add(this.main.config.highlighted),helper_1.ensureElementInView(this.list,prev))},Slim.prototype.highlightDown=function(){var highlighted=this.list.querySelector("."+this.main.config.highlighted),next=null;if(highlighted)for(next=highlighted.nextSibling;null!==next&&next.classList.contains(this.main.config.disabled);)next=next.nextSibling;else next=this.list.querySelector("."+this.main.config.option+":not(."+this.main.config.disabled+")");if(null===next&&null!==highlighted){var parent_2=highlighted.parentNode,sibling;if(parent_2.classList.contains(this.main.config.optgroup))if(parent_2.nextSibling)next=parent_2.nextSibling.querySelector("."+this.main.config.option+":not(."+this.main.config.disabled+")")}next&&(highlighted&&highlighted.classList.remove(this.main.config.highlighted),next.classList.add(this.main.config.highlighted),helper_1.ensureElementInView(this.list,next))},Slim.prototype.listDiv=function(){var list=document.createElement("div");return list.classList.add(this.main.config.list),list},Slim.prototype.options=function(content){void 0===content&&(content="");var data=this.main.data.filtered||this.main.data.data,searching,searching;if(this.list.innerHTML="",""!==content)return(searching=document.createElement("div")).classList.add(this.main.config.option),searching.classList.add(this.main.config.disabled),searching.innerHTML=content,void this.list.appendChild(searching);if(this.main.config.isAjax&&this.main.config.isSearching)return(searching=document.createElement("div")).classList.add(this.main.config.option),searching.classList.add(this.main.config.disabled),searching.innerHTML=this.main.config.searchingText,void this.list.appendChild(searching);if(0===data.length){var noResults=document.createElement("div");return noResults.classList.add(this.main.config.option),noResults.classList.add(this.main.config.disabled),noResults.innerHTML=this.main.config.searchText,void this.list.appendChild(noResults)}for(var _loop_1=function(d){if(d.hasOwnProperty("label")){var item=d,optgroupEl_1=document.createElement("div");optgroupEl_1.classList.add(this_1.main.config.optgroup);var optgroupLabel=document.createElement("div");optgroupLabel.classList.add(this_1.main.config.optgroupLabel),this_1.main.config.selectByGroup&&this_1.main.config.isMultiple&&optgroupLabel.classList.add(this_1.main.config.optgroupLabelSelectable),optgroupLabel.innerHTML=item.label,optgroupEl_1.appendChild(optgroupLabel);var options=item.options;if(options){for(var _i=0,options_1=options;_i<options_1.length;_i++){var o=options_1[_i];optgroupEl_1.appendChild(this_1.option(o))}if(this_1.main.config.selectByGroup&&this_1.main.config.isMultiple){var master_1=this_1;optgroupLabel.addEventListener("click",(function(e){e.preventDefault(),e.stopPropagation();for(var _i=0,_a=optgroupEl_1.children;_i<_a.length;_i++){var childEl=_a[_i];-1!==childEl.className.indexOf(master_1.main.config.option)&&childEl.click()}}))}}this_1.list.appendChild(optgroupEl_1)}else this_1.list.appendChild(this_1.option(d))},this_1=this,_i=0,data_2=data;_i<data_2.length;_i++){var d;_loop_1(data_2[_i])}},Slim.prototype.option=function(data){if(data.placeholder){var placeholder=document.createElement("div");return placeholder.classList.add(this.main.config.option),placeholder.classList.add(this.main.config.hide),placeholder}var optionEl=document.createElement("div");optionEl.classList.add(this.main.config.option),data.class&&data.class.split(" ").forEach((function(dataClass){optionEl.classList.add(dataClass)})),data.style&&(optionEl.style.cssText=data.style);var selected=this.main.data.getSelected();optionEl.dataset.id=data.id,this.main.config.searchHighlight&&this.main.slim&&data.innerHTML&&""!==this.main.slim.search.input.value.trim()?optionEl.innerHTML=helper_1.highlight(data.innerHTML,this.main.slim.search.input.value,this.main.config.searchHighlighter):data.innerHTML&&(optionEl.innerHTML=data.innerHTML),this.main.config.showOptionTooltips&&optionEl.textContent&&optionEl.setAttribute("title",optionEl.textContent);var master=this;optionEl.addEventListener("click",(function(e){e.preventDefault(),e.stopPropagation();var element=this,elementID=this.dataset.id;if(!0===data.selected&&master.main.config.allowDeselectOption){var shouldUpdate=!1;if(master.main.beforeOnChange&&master.main.config.isMultiple||(shouldUpdate=!0),master.main.beforeOnChange&&master.main.config.isMultiple){for(var selectedValues=master.main.data.getSelected(),currentValues=JSON.parse(JSON.stringify(selectedValues)),i=0;i<currentValues.length;i++)currentValues[i].id===elementID&&currentValues.splice(i,1);var beforeOnchange;!1!==(beforeOnchange=master.main.beforeOnChange(currentValues))&&(shouldUpdate=!0)}shouldUpdate&&(master.main.config.isMultiple?(master.main.data.removeFromSelected(elementID,"id"),master.main.render(),master.main.select.setValue(),master.main.data.onDataChange()):master.main.set(""))}else{if(data.disabled||data.selected)return;if(master.main.config.limit&&Array.isArray(selected)&&master.main.config.limit<=selected.length)return;if(master.main.beforeOnChange){var value=void 0,objectInfo=JSON.parse(JSON.stringify(master.main.data.getObjectFromData(elementID))),beforeOnchange;objectInfo.selected=!0,master.main.config.isMultiple?(value=JSON.parse(JSON.stringify(selected))).push(objectInfo):value=JSON.parse(JSON.stringify(objectInfo)),!1!==(beforeOnchange=master.main.beforeOnChange(value))&&master.main.set(elementID,"id",master.main.config.closeOnSelect)}else master.main.set(elementID,"id",master.main.config.closeOnSelect)}}));var isSelected=selected&&helper_1.isValueInArrayOfObjects(selected,"id",data.id);return(data.disabled||isSelected)&&(optionEl.onclick=null,master.main.config.allowDeselectOption||optionEl.classList.add(this.main.config.disabled),master.main.config.hideSelectedOption&&optionEl.classList.add(this.main.config.hide)),isSelected?optionEl.classList.add(this.main.config.optionSelected):optionEl.classList.remove(this.main.config.optionSelected),optionEl},Slim}();exports.Slim=Slim}]).default}));
\ No newline at end of file
diff --git a/admin/js/vendors/slimselect/slimselect.scss b/admin/js/vendors/slimselect/slimselect.scss
new file mode 100644 (file)
index 0000000..705bb30
--- /dev/null
@@ -0,0 +1,391 @@
+$height: 30px !default;
+$white: #ffffff !default;
+$font-color: #666666 !default;
+$font-placeholder-color: #8a8a8a !default;
+$font-disabled-color: #dedede !default;
+$primary-color: #5897fb !default;
+$border-color: #dcdee2 !default;
+$search-highlight-color: #fffb8c !default;
+$border-radius: 4px !default;
+$spacing-l: 8px !default;
+$spacing-m: 6px !default;
+$spacing-s: 4px !default;
+
+.ss-main {
+  position: relative;
+  display: inline-block;
+  user-select: none;
+  color: $font-color;
+  width: 100%;
+
+  .ss-single-selected {
+    display: flex;
+    cursor: pointer;
+    width: 100%;
+    height: $height;
+    padding: $spacing-m;
+    border: 1px solid $border-color;
+    border-radius: $border-radius;
+    background-color: $white;
+    outline: 0;
+    box-sizing: border-box;
+    transition: background-color .2s;
+
+    &.ss-disabled {
+      background-color: $border-color;
+      cursor: not-allowed;
+    }
+
+    &.ss-open-above {
+      border-top-left-radius: 0px;
+      border-top-right-radius: 0px;
+    }
+    &.ss-open-below {
+      border-bottom-left-radius: 0px;
+      border-bottom-right-radius: 0px;
+    }
+
+    .placeholder {
+      display: flex;
+      flex: 1 1 100%;
+      align-items: center;
+      overflow: hidden;
+      text-overflow: ellipsis;
+      white-space: nowrap;
+      text-align: left;
+      width: calc(100% - 30px);
+      line-height: 1em;
+      -webkit-user-select: none;  
+      -moz-user-select: none;    
+      -ms-user-select: none;      
+      user-select: none;
+
+      * {
+        display: flex;
+        align-items: center;
+        overflow: hidden;
+        text-overflow: ellipsis;
+        white-space: nowrap;
+        width: auto;
+      }
+
+      .ss-disabled {
+        color: $font-disabled-color;
+      }
+    }
+
+    .ss-deselect {
+      display: flex;
+      align-items: center;
+      justify-content: flex-end;
+      flex: 0 1 auto;
+      margin: 0 $spacing-m 0 $spacing-m;
+      font-weight: bold;
+
+      &.ss-hide {
+        display: none;
+      }
+    }
+
+    .ss-arrow {
+      display: flex;
+      align-items: center;
+      justify-content: flex-end;
+      flex: 0 1 auto;
+      margin: 0 $spacing-m 0 $spacing-m;
+
+      span {
+        border: solid $font-color;
+        border-width: 0 2px 2px 0;
+        display: inline-block;
+        padding: 3px;
+        transition: transform .2s, margin .2s;
+
+        &.arrow-up {
+          transform: rotate(-135deg);
+          margin: 3px 0 0 0;
+        }
+        &.arrow-down {
+          transform: rotate(45deg);
+          margin: -3px 0 0 0;
+        }
+      }
+    }
+  }
+
+  .ss-multi-selected {
+    display: flex;
+    flex-direction: row;
+    cursor: pointer;
+    min-height: $height;
+    width: 100%;
+    padding: 0 0 0 3px;
+    border: 1px solid $border-color;
+    border-radius: $border-radius;
+    background-color: $white;
+    outline: 0;
+    box-sizing: border-box;
+    transition: background-color .2s;
+
+    &.ss-disabled {
+      background-color: $border-color;
+      cursor: not-allowed;
+
+      .ss-values {
+        .ss-disabled {
+          color: $font-color;
+        }
+
+        .ss-value {
+          .ss-value-delete {
+            cursor: not-allowed;
+          }
+        }
+      }
+    }
+
+    &.ss-open-above {
+      border-top-left-radius: 0px;
+      border-top-right-radius: 0px;
+    }
+    &.ss-open-below {
+      border-bottom-left-radius: 0px;
+      border-bottom-right-radius: 0px;
+    }
+
+    .ss-values {
+      display: flex;
+      flex-wrap: wrap;
+      justify-content: flex-start;
+      flex: 1 1 100%;
+      width: calc(100% - 30px);
+
+      .ss-disabled {
+        display: flex;
+        padding: 4px 5px;
+        margin: 2px 0px;
+        line-height: 1em;
+        align-items: center;
+        width: 100%;
+        color: $font-disabled-color;
+        overflow: hidden;
+        text-overflow: ellipsis;
+        white-space: nowrap;
+      }
+
+      @keyframes scaleIn {
+        0% {transform: scale(0); opacity: 0;}
+        100% {transform: scale(1); opacity: 1;}
+      }
+      @keyframes scaleOut {
+        0% {transform: scale(1); opacity: 1;}
+        100% {transform: scale(0); opacity: 0;}
+      }
+
+      .ss-value {
+        display: flex;
+        user-select: none;
+        align-items: center;
+        font-size: 12px;
+        padding: 3px 5px;
+        margin: 3px 5px 3px 0px;
+        color: $white;
+        background-color: $primary-color;
+        border-radius: $border-radius;
+        animation-name: scaleIn;
+        animation-duration: .2s;
+        animation-timing-function: ease-out;
+        animation-fill-mode: both;
+
+        &.ss-out {
+          animation-name: scaleOut;
+          animation-duration: .2s;
+          animation-timing-function: ease-out;
+        }
+
+        .ss-value-delete {
+          margin: 0 0 0 5px;
+          cursor: pointer;
+        }
+      }
+    }
+
+    .ss-add {
+      display: flex;
+      flex: 0 1 3px;
+      margin: 9px 12px 0 5px;
+
+      .ss-plus {
+        display: flex;
+        justify-content: center;
+        align-items: center;
+        background: $font-color;
+        position: relative;
+        height: 10px;
+        width: 2px;
+        transition: transform .2s;
+
+        &:after {
+          background: $font-color;
+          content: "";
+          position: absolute;
+          height: 2px;
+          width: 10px;
+          left: -4px;
+          top: 4px;
+        }
+
+        &.ss-cross {
+          transform: rotate(45deg);
+        }
+      }
+    }
+
+  }
+}
+.ss-content {
+  position: absolute;
+  width: 100%;
+  margin: -1px 0 0 0;
+  box-sizing: border-box;
+  border: solid 1px $border-color;
+  z-index: 1010;
+  background-color: $white;
+  transform-origin: center top;
+  transition: transform .2s, opacity .2s;
+  opacity: 0;
+  transform: scaleY(0);
+
+  &.ss-open {
+    display: block;
+    opacity: 1;
+    transform: scaleY(1);
+  }
+
+  .ss-search {
+    display: flex;
+    flex-direction: row;
+    padding: $spacing-l $spacing-l $spacing-m $spacing-l;
+
+    &.ss-hide {
+      height: 0px;
+      opacity: 0;
+      padding: 0px 0px 0px 0px;
+      margin: 0px 0px 0px 0px;
+
+      input {
+        height: 0px;
+        opacity: 0;
+        padding: 0px 0px 0px 0px;
+        margin: 0px 0px 0px 0px;
+      }
+    }
+
+    input {
+      display: inline-flex;
+      font-size: inherit;
+      line-height: inherit;
+      flex: 1 1 auto;
+      width: 100%;
+      min-width: 0px;
+      height: 30px;
+      padding: $spacing-m $spacing-l;
+      margin: 0;
+      border: 1px solid $border-color;
+      border-radius: $border-radius;
+      background-color: $white;
+      outline: 0;
+      text-align: left;
+      box-sizing: border-box;
+      -webkit-box-sizing: border-box;
+      -webkit-appearance: textfield;
+      
+      &::placeholder {
+        color: $font-placeholder-color;
+        vertical-align: middle;
+      }
+
+      &:focus {
+        box-shadow: 0 0 5px $primary-color;
+      }
+    }
+
+    .ss-addable {
+      display: inline-flex;
+      justify-content: center;
+      align-items: center;
+      cursor: pointer;
+      font-size: 22px;
+      font-weight: bold;
+      flex: 0 0 30px;
+      height: 30px;
+      margin: 0 0 0 8px;
+      border: 1px solid $border-color;
+      border-radius: $border-radius;
+      box-sizing: border-box;
+    }
+  }
+
+  .ss-addable {
+    padding-top: 0px;
+  }
+
+  .ss-list {
+    max-height: 200px;
+    overflow-x: hidden;
+    overflow-y: auto;
+    text-align: left;
+
+    .ss-optgroup {
+      .ss-optgroup-label {
+        padding: 6px 10px 6px 10px;
+        font-weight: bold;
+      }
+
+      .ss-option {
+        padding: 6px 6px 6px 25px;
+      }
+    }
+
+    .ss-optgroup-label-selectable {
+      cursor: pointer;
+      
+      &:hover {
+        color: $white;
+        background-color: $primary-color;
+      }
+    }
+
+    .ss-option {
+      padding: 6px 10px 6px 10px;
+      cursor: pointer;
+      user-select: none;
+
+      * {
+        display: inline-block;
+      }
+
+      &:hover, &.ss-highlighted {
+        color: $white;
+        background-color: $primary-color;
+      }
+
+      &.ss-disabled {
+        cursor: not-allowed;
+        color: $font-disabled-color;
+        background-color: $white;
+      }
+
+      &:not(.ss-disabled).ss-option-selected {
+        color: $font-color;
+        background-color: rgba($primary-color, .1);
+      }
+
+      &.ss-hide { display: none; }
+
+      .ss-search-highlight {
+        background-color: $search-highlight-color;
+      }
+    }
+  }
+}
diff --git a/admin/js/vendors/slimselect/slimselect.xx.js b/admin/js/vendors/slimselect/slimselect.xx.js
new file mode 100644 (file)
index 0000000..2b0ce4b
--- /dev/null
@@ -0,0 +1,1931 @@
+(function webpackUniversalModuleDefinition(root, factory) {
+       if(typeof exports === 'object' && typeof module === 'object')
+               module.exports = factory();
+       else if(typeof define === 'function' && define.amd)
+               define([], factory);
+       else if(typeof exports === 'object')
+               exports["SlimSelect"] = factory();
+       else
+               root["SlimSelect"] = factory();
+})(window, function() {
+return /******/ (function(modules) { // webpackBootstrap
+/******/       // The module cache
+/******/       var installedModules = {};
+/******/
+/******/       // The require function
+/******/       function __webpack_require__(moduleId) {
+/******/
+/******/               // Check if module is in cache
+/******/               if(installedModules[moduleId]) {
+/******/                       return installedModules[moduleId].exports;
+/******/               }
+/******/               // Create a new module (and put it into the cache)
+/******/               var module = installedModules[moduleId] = {
+/******/                       i: moduleId,
+/******/                       l: false,
+/******/                       exports: {}
+/******/               };
+/******/
+/******/               // Execute the module function
+/******/               modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+/******/
+/******/               // Flag the module as loaded
+/******/               module.l = true;
+/******/
+/******/               // Return the exports of the module
+/******/               return module.exports;
+/******/       }
+/******/
+/******/
+/******/       // expose the modules object (__webpack_modules__)
+/******/       __webpack_require__.m = modules;
+/******/
+/******/       // expose the module cache
+/******/       __webpack_require__.c = installedModules;
+/******/
+/******/       // define getter function for harmony exports
+/******/       __webpack_require__.d = function(exports, name, getter) {
+/******/               if(!__webpack_require__.o(exports, name)) {
+/******/                       Object.defineProperty(exports, name, { enumerable: true, get: getter });
+/******/               }
+/******/       };
+/******/
+/******/       // define __esModule on exports
+/******/       __webpack_require__.r = function(exports) {
+/******/               if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
+/******/                       Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+/******/               }
+/******/               Object.defineProperty(exports, '__esModule', { value: true });
+/******/       };
+/******/
+/******/       // create a fake namespace object
+/******/       // mode & 1: value is a module id, require it
+/******/       // mode & 2: merge all properties of value into the ns
+/******/       // mode & 4: return value when already ns object
+/******/       // mode & 8|1: behave like require
+/******/       __webpack_require__.t = function(value, mode) {
+/******/               if(mode & 1) value = __webpack_require__(value);
+/******/               if(mode & 8) return value;
+/******/               if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
+/******/               var ns = Object.create(null);
+/******/               __webpack_require__.r(ns);
+/******/               Object.defineProperty(ns, 'default', { enumerable: true, value: value });
+/******/               if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
+/******/               return ns;
+/******/       };
+/******/
+/******/       // getDefaultExport function for compatibility with non-harmony modules
+/******/       __webpack_require__.n = function(module) {
+/******/               var getter = module && module.__esModule ?
+/******/                       function getDefault() { return module['default']; } :
+/******/                       function getModuleExports() { return module; };
+/******/               __webpack_require__.d(getter, 'a', getter);
+/******/               return getter;
+/******/       };
+/******/
+/******/       // Object.prototype.hasOwnProperty.call
+/******/       __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
+/******/
+/******/       // __webpack_public_path__
+/******/       __webpack_require__.p = "";
+/******/
+/******/
+/******/       // Load entry module and return exports
+/******/       return __webpack_require__(__webpack_require__.s = 2);
+/******/ })
+/************************************************************************/
+/******/ ([
+/* 0 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+exports.__esModule = true;
+function hasClassInTree(element, className) {
+    function hasClass(e, c) {
+        if (!(!c || !e || !e.classList || !e.classList.contains(c))) {
+            return e;
+        }
+        return null;
+    }
+    function parentByClass(e, c) {
+        if (!e || e === document) {
+            return null;
+        }
+        else if (hasClass(e, c)) {
+            return e;
+        }
+        else {
+            return parentByClass(e.parentNode, c);
+        }
+    }
+    return hasClass(element, className) || parentByClass(element, className);
+}
+exports.hasClassInTree = hasClassInTree;
+function ensureElementInView(container, element) {
+    var cTop = container.scrollTop + container.offsetTop;
+    var cBottom = cTop + container.clientHeight;
+    var eTop = element.offsetTop;
+    var eBottom = eTop + element.clientHeight;
+    if (eTop < cTop) {
+        container.scrollTop -= (cTop - eTop);
+    }
+    else if (eBottom > cBottom) {
+        container.scrollTop += (eBottom - cBottom);
+    }
+}
+exports.ensureElementInView = ensureElementInView;
+function putContent(el, currentPosition, isOpen) {
+    var height = el.offsetHeight;
+    var rect = el.getBoundingClientRect();
+    var elemTop = (isOpen ? rect.top : rect.top - height);
+    var elemBottom = (isOpen ? rect.bottom : rect.bottom + height);
+    if (elemTop <= 0) {
+        return 'below';
+    }
+    if (elemBottom >= window.innerHeight) {
+        return 'above';
+    }
+    return (isOpen ? currentPosition : 'below');
+}
+exports.putContent = putContent;
+function debounce(func, wait, immediate) {
+    if (wait === void 0) { wait = 100; }
+    if (immediate === void 0) { immediate = false; }
+    var timeout;
+    return function () {
+        var args = [];
+        for (var _i = 0; _i < arguments.length; _i++) {
+            args[_i] = arguments[_i];
+        }
+        var context = self;
+        var later = function () {
+            timeout = null;
+            if (!immediate) {
+                func.apply(context, args);
+            }
+        };
+        var callNow = immediate && !timeout;
+        clearTimeout(timeout);
+        timeout = setTimeout(later, wait);
+        if (callNow) {
+            func.apply(context, args);
+        }
+    };
+}
+exports.debounce = debounce;
+function isValueInArrayOfObjects(selected, key, value) {
+    if (!Array.isArray(selected)) {
+        return selected[key] === value;
+    }
+    for (var _i = 0, selected_1 = selected; _i < selected_1.length; _i++) {
+        var s = selected_1[_i];
+        if (s && s[key] && s[key] === value) {
+            return true;
+        }
+    }
+    return false;
+}
+exports.isValueInArrayOfObjects = isValueInArrayOfObjects;
+function highlight(str, search, className) {
+    var completedString = str;
+    var regex = new RegExp('(' + search.trim() + ')(?![^<]*>[^<>]*</)', 'i');
+    if (!str.match(regex)) {
+        return str;
+    }
+    var matchStartPosition = str.match(regex).index;
+    var matchEndPosition = matchStartPosition + str.match(regex)[0].toString().length;
+    var originalTextFoundByRegex = str.substring(matchStartPosition, matchEndPosition);
+    completedString = completedString.replace(regex, "<mark class=\"" + className + "\">" + originalTextFoundByRegex + "</mark>");
+    return completedString;
+}
+exports.highlight = highlight;
+function kebabCase(str) {
+    var result = str.replace(/[A-Z\u00C0-\u00D6\u00D8-\u00DE]/g, function (match) { return '-' + match.toLowerCase(); });
+    return (str[0] === str[0].toUpperCase())
+        ? result.substring(1)
+        : result;
+}
+exports.kebabCase = kebabCase;
+(function () {
+    var w = window;
+    if (typeof w.CustomEvent === 'function') {
+        return;
+    }
+    function CustomEvent(event, params) {
+        params = params || { bubbles: false, cancelable: false, detail: undefined };
+        var evt = document.createEvent('CustomEvent');
+        evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail);
+        return evt;
+    }
+    CustomEvent.prototype = w.Event.prototype;
+    w.CustomEvent = CustomEvent;
+})();
+
+
+/***/ }),
+/* 1 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+exports.__esModule = true;
+var Data = (function () {
+    function Data(info) {
+        this.contentOpen = false;
+        this.contentPosition = 'below';
+        this.isOnChangeEnabled = true;
+        this.main = info.main;
+        this.searchValue = '';
+        this.data = [];
+        this.filtered = null;
+        this.parseSelectData();
+        this.setSelectedFromSelect();
+    }
+    Data.prototype.newOption = function (info) {
+        return {
+            id: (info.id ? info.id : String(Math.floor(Math.random() * 100000000))),
+            value: (info.value ? info.value : ''),
+            text: (info.text ? info.text : ''),
+            innerHTML: (info.innerHTML ? info.innerHTML : ''),
+            selected: (info.selected ? info.selected : false),
+            display: (info.display !== undefined ? info.display : true),
+            disabled: (info.disabled ? info.disabled : false),
+            placeholder: (info.placeholder ? info.placeholder : false),
+            "class": (info["class"] ? info["class"] : undefined),
+            data: (info.data ? info.data : {}),
+            mandatory: (info.mandatory ? info.mandatory : false)
+        };
+    };
+    Data.prototype.add = function (data) {
+        this.data.push({
+            id: String(Math.floor(Math.random() * 100000000)),
+            value: data.value,
+            text: data.text,
+            innerHTML: '',
+            selected: false,
+            display: true,
+            disabled: false,
+            placeholder: false,
+            "class": undefined,
+            mandatory: data.mandatory,
+            data: {}
+        });
+    };
+    Data.prototype.parseSelectData = function () {
+        this.data = [];
+        var nodes = this.main.select.element.childNodes;
+        for (var _i = 0, nodes_1 = nodes; _i < nodes_1.length; _i++) {
+            var n = nodes_1[_i];
+            if (n.nodeName === 'OPTGROUP') {
+                var node = n;
+                var optgroup = {
+                    label: node.label,
+                    options: []
+                };
+                var options = n.childNodes;
+                for (var _a = 0, options_1 = options; _a < options_1.length; _a++) {
+                    var o = options_1[_a];
+                    if (o.nodeName === 'OPTION') {
+                        var option = this.pullOptionData(o);
+                        optgroup.options.push(option);
+                        if (option.placeholder && option.text.trim() !== '') {
+                            this.main.config.placeholderText = option.text;
+                        }
+                    }
+                }
+                this.data.push(optgroup);
+            }
+            else if (n.nodeName === 'OPTION') {
+                var option = this.pullOptionData(n);
+                this.data.push(option);
+                if (option.placeholder && option.text.trim() !== '') {
+                    this.main.config.placeholderText = option.text;
+                }
+            }
+        }
+    };
+    Data.prototype.pullOptionData = function (option) {
+        return {
+            id: (option.dataset ? option.dataset.id : false) || String(Math.floor(Math.random() * 100000000)),
+            value: option.value,
+            text: option.text,
+            innerHTML: option.innerHTML,
+            selected: option.selected,
+            disabled: option.disabled,
+            placeholder: option.dataset.placeholder === 'true',
+            "class": option.className,
+            style: option.style.cssText,
+            data: option.dataset,
+            mandatory: (option.dataset ? option.dataset.mandatory === 'true' : false)
+        };
+    };
+    Data.prototype.setSelectedFromSelect = function () {
+        if (this.main.config.isMultiple) {
+            var options = this.main.select.element.options;
+            var newSelected = [];
+            for (var _i = 0, options_2 = options; _i < options_2.length; _i++) {
+                var o = options_2[_i];
+                if (o.selected) {
+                    var newOption = this.getObjectFromData(o.value, 'value');
+                    if (newOption && newOption.id) {
+                        newSelected.push(newOption.id);
+                    }
+                }
+            }
+            this.setSelected(newSelected, 'id');
+        }
+        else {
+            var element = this.main.select.element;
+            if (element.selectedIndex !== -1) {
+                var option = element.options[element.selectedIndex];
+                var value = option.value;
+                this.setSelected(value, 'value');
+            }
+        }
+    };
+    Data.prototype.setSelected = function (value, type) {
+        if (type === void 0) { type = 'id'; }
+        for (var _i = 0, _a = this.data; _i < _a.length; _i++) {
+            var d = _a[_i];
+            if (d.hasOwnProperty('label')) {
+                if (d.hasOwnProperty('options')) {
+                    var options = d.options;
+                    if (options) {
+                        for (var _b = 0, options_3 = options; _b < options_3.length; _b++) {
+                            var o = options_3[_b];
+                            if (o.placeholder) {
+                                continue;
+                            }
+                            o.selected = this.shouldBeSelected(o, value, type);
+                        }
+                    }
+                }
+            }
+            else {
+                d.selected = this.shouldBeSelected(d, value, type);
+            }
+        }
+    };
+    Data.prototype.shouldBeSelected = function (option, value, type) {
+        if (type === void 0) { type = 'id'; }
+        if (Array.isArray(value)) {
+            for (var _i = 0, value_1 = value; _i < value_1.length; _i++) {
+                var v = value_1[_i];
+                if (type in option && String(option[type]) === String(v)) {
+                    return true;
+                }
+            }
+        }
+        else {
+            if (type in option && String(option[type]) === String(value)) {
+                return true;
+            }
+        }
+        return false;
+    };
+    Data.prototype.getSelected = function () {
+        var value = { text: '', placeholder: this.main.config.placeholderText };
+        var values = [];
+        for (var _i = 0, _a = this.data; _i < _a.length; _i++) {
+            var d = _a[_i];
+            if (d.hasOwnProperty('label')) {
+                if (d.hasOwnProperty('options')) {
+                    var options = d.options;
+                    if (options) {
+                        for (var _b = 0, options_4 = options; _b < options_4.length; _b++) {
+                            var o = options_4[_b];
+                            if (o.selected) {
+                                if (!this.main.config.isMultiple) {
+                                    value = o;
+                                }
+                                else {
+                                    values.push(o);
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+            else {
+                if (d.selected) {
+                    if (!this.main.config.isMultiple) {
+                        value = d;
+                    }
+                    else {
+                        values.push(d);
+                    }
+                }
+            }
+        }
+        if (this.main.config.isMultiple) {
+            return values;
+        }
+        return value;
+    };
+    Data.prototype.addToSelected = function (value, type) {
+        if (type === void 0) { type = 'id'; }
+        if (this.main.config.isMultiple) {
+            var values = [];
+            var selected = this.getSelected();
+            if (Array.isArray(selected)) {
+                for (var _i = 0, selected_1 = selected; _i < selected_1.length; _i++) {
+                    var s = selected_1[_i];
+                    values.push(s[type]);
+                }
+            }
+            values.push(value);
+            this.setSelected(values, type);
+        }
+    };
+    Data.prototype.removeFromSelected = function (value, type) {
+        if (type === void 0) { type = 'id'; }
+        if (this.main.config.isMultiple) {
+            var values = [];
+            var selected = this.getSelected();
+            for (var _i = 0, selected_2 = selected; _i < selected_2.length; _i++) {
+                var s = selected_2[_i];
+                if (String(s[type]) !== String(value)) {
+                    values.push(s[type]);
+                }
+            }
+            this.setSelected(values, type);
+        }
+    };
+    Data.prototype.onDataChange = function () {
+        if (this.main.onChange && this.isOnChangeEnabled) {
+            this.main.onChange(JSON.parse(JSON.stringify(this.getSelected())));
+        }
+    };
+    Data.prototype.getObjectFromData = function (value, type) {
+        if (type === void 0) { type = 'id'; }
+        for (var _i = 0, _a = this.data; _i < _a.length; _i++) {
+            var d = _a[_i];
+            if (type in d && String(d[type]) === String(value)) {
+                return d;
+            }
+            if (d.hasOwnProperty('options')) {
+                var optgroupObject = d;
+                if (optgroupObject.options) {
+                    for (var _b = 0, _c = optgroupObject.options; _b < _c.length; _b++) {
+                        var oo = _c[_b];
+                        if (String(oo[type]) === String(value)) {
+                            return oo;
+                        }
+                    }
+                }
+            }
+        }
+        return null;
+    };
+    Data.prototype.search = function (search) {
+        this.searchValue = search;
+        if (search.trim() === '') {
+            this.filtered = null;
+            return;
+        }
+        var searchFilter = this.main.config.searchFilter;
+        var valuesArray = this.data.slice(0);
+        search = search.trim();
+        var filtered = valuesArray.map(function (obj) {
+            if (obj.hasOwnProperty('options')) {
+                var optgroupObj = obj;
+                var options = [];
+                if (optgroupObj.options) {
+                    options = optgroupObj.options.filter(function (opt) {
+                        return searchFilter(opt, search);
+                    });
+                }
+                if (options.length !== 0) {
+                    var optgroup = Object.assign({}, optgroupObj);
+                    optgroup.options = options;
+                    return optgroup;
+                }
+            }
+            if (obj.hasOwnProperty('text')) {
+                var optionObj = obj;
+                if (searchFilter(optionObj, search)) {
+                    return obj;
+                }
+            }
+            return null;
+        });
+        this.filtered = filtered.filter(function (info) { return info; });
+    };
+    return Data;
+}());
+exports.Data = Data;
+function validateData(data) {
+    if (!data) {
+        console.error('Data must be an array of objects');
+        return false;
+    }
+    var isValid = false;
+    var errorCount = 0;
+    for (var _i = 0, data_1 = data; _i < data_1.length; _i++) {
+        var d = data_1[_i];
+        if (d.hasOwnProperty('label')) {
+            if (d.hasOwnProperty('options')) {
+                var optgroup = d;
+                var options = optgroup.options;
+                if (options) {
+                    for (var _a = 0, options_5 = options; _a < options_5.length; _a++) {
+                        var o = options_5[_a];
+                        isValid = validateOption(o);
+                        if (!isValid) {
+                            errorCount++;
+                        }
+                    }
+                }
+            }
+        }
+        else {
+            var option = d;
+            isValid = validateOption(option);
+            if (!isValid) {
+                errorCount++;
+            }
+        }
+    }
+    return errorCount === 0;
+}
+exports.validateData = validateData;
+function validateOption(option) {
+    if (option.text === undefined) {
+        console.error('Data object option must have at least have a text value. Check object: ' + JSON.stringify(option));
+        return false;
+    }
+    return true;
+}
+exports.validateOption = validateOption;
+
+
+/***/ }),
+/* 2 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+exports.__esModule = true;
+var config_1 = __webpack_require__(3);
+var select_1 = __webpack_require__(4);
+var slim_1 = __webpack_require__(5);
+var data_1 = __webpack_require__(1);
+var helper_1 = __webpack_require__(0);
+var SlimSelect = (function () {
+    function SlimSelect(info) {
+        var _this = this;
+        this.ajax = null;
+        this.addable = null;
+        this.beforeOnChange = null;
+        this.onChange = null;
+        this.beforeOpen = null;
+        this.afterOpen = null;
+        this.beforeClose = null;
+        this.afterClose = null;
+        var selectElement = this.validate(info);
+        if (selectElement.dataset.ssid) {
+            this.destroy(selectElement.dataset.ssid);
+        }
+        if (info.ajax) {
+            this.ajax = info.ajax;
+        }
+        if (info.addable) {
+            this.addable = info.addable;
+        }
+        this.config = new config_1.Config({
+            select: selectElement,
+            isAjax: (info.ajax ? true : false),
+            showSearch: info.showSearch,
+            searchPlaceholder: info.searchPlaceholder,
+            searchText: info.searchText,
+            searchingText: info.searchingText,
+            searchFocus: info.searchFocus,
+            searchHighlight: info.searchHighlight,
+            searchFilter: info.searchFilter,
+            closeOnSelect: info.closeOnSelect,
+            showContent: info.showContent,
+            placeholderText: info.placeholder,
+            allowDeselect: info.allowDeselect,
+            allowDeselectOption: info.allowDeselectOption,
+            hideSelectedOption: info.hideSelectedOption,
+            deselectLabel: info.deselectLabel,
+            isEnabled: info.isEnabled,
+            valuesUseText: info.valuesUseText,
+            showOptionTooltips: info.showOptionTooltips,
+            selectByGroup: info.selectByGroup,
+            limit: info.limit,
+            timeoutDelay: info.timeoutDelay,
+            addToBody: info.addToBody
+        });
+        this.select = new select_1.Select({
+            select: selectElement,
+            main: this
+        });
+        this.data = new data_1.Data({ main: this });
+        this.slim = new slim_1.Slim({ main: this });
+        if (this.select.element.parentNode) {
+            this.select.element.parentNode.insertBefore(this.slim.container, this.select.element.nextSibling);
+        }
+        if (info.data) {
+            this.setData(info.data);
+        }
+        else {
+            this.render();
+        }
+        document.addEventListener('click', function (e) {
+            if (e.target && !helper_1.hasClassInTree(e.target, _this.config.id)) {
+                _this.close();
+            }
+        });
+        if (this.config.showContent === 'auto') {
+            window.addEventListener('scroll', helper_1.debounce(function (e) {
+                if (_this.data.contentOpen) {
+                    if (helper_1.putContent(_this.slim.content, _this.data.contentPosition, _this.data.contentOpen) === 'above') {
+                        _this.moveContentAbove();
+                    }
+                    else {
+                        _this.moveContentBelow();
+                    }
+                }
+            }), false);
+        }
+        if (info.beforeOnChange) {
+            this.beforeOnChange = info.beforeOnChange;
+        }
+        if (info.onChange) {
+            this.onChange = info.onChange;
+        }
+        if (info.beforeOpen) {
+            this.beforeOpen = info.beforeOpen;
+        }
+        if (info.afterOpen) {
+            this.afterOpen = info.afterOpen;
+        }
+        if (info.beforeClose) {
+            this.beforeClose = info.beforeClose;
+        }
+        if (info.afterClose) {
+            this.afterClose = info.afterClose;
+        }
+        if (!this.config.isEnabled) {
+            this.disable();
+        }
+    }
+    SlimSelect.prototype.validate = function (info) {
+        var select = (typeof info.select === 'string' ? document.querySelector(info.select) : info.select);
+        if (!select) {
+            throw new Error('Could not find select element');
+        }
+        if (select.tagName !== 'SELECT') {
+            throw new Error('Element isnt of type select');
+        }
+        return select;
+    };
+    SlimSelect.prototype.selected = function () {
+        if (this.config.isMultiple) {
+            var selected = this.data.getSelected();
+            var outputSelected = [];
+            for (var _i = 0, selected_1 = selected; _i < selected_1.length; _i++) {
+                var s = selected_1[_i];
+                outputSelected.push(s.value);
+            }
+            return outputSelected;
+        }
+        else {
+            var selected = this.data.getSelected();
+            return (selected ? selected.value : '');
+        }
+    };
+    SlimSelect.prototype.set = function (value, type, close, render) {
+        if (type === void 0) { type = 'value'; }
+        if (close === void 0) { close = true; }
+        if (render === void 0) { render = true; }
+        if (this.config.isMultiple && !Array.isArray(value)) {
+            this.data.addToSelected(value, type);
+        }
+        else {
+            this.data.setSelected(value, type);
+        }
+        this.select.setValue();
+        this.data.onDataChange();
+        this.render();
+        if (close) {
+            this.close();
+        }
+    };
+    SlimSelect.prototype.setSelected = function (value, type, close, render) {
+        if (type === void 0) { type = 'value'; }
+        if (close === void 0) { close = true; }
+        if (render === void 0) { render = true; }
+        this.set(value, type, close, render);
+    };
+    SlimSelect.prototype.setData = function (data) {
+        var isValid = data_1.validateData(data);
+        if (!isValid) {
+            console.error('Validation problem on: #' + this.select.element.id);
+            return;
+        }
+        var newData = JSON.parse(JSON.stringify(data));
+        var selected = this.data.getSelected();
+        if (this.config.isAjax && selected) {
+            if (this.config.isMultiple) {
+                var reverseSelected = selected.reverse();
+                for (var _i = 0, reverseSelected_1 = reverseSelected; _i < reverseSelected_1.length; _i++) {
+                    var r = reverseSelected_1[_i];
+                    newData.unshift(r);
+                }
+            }
+            else {
+                newData.unshift(this.data.getSelected());
+                newData.unshift({ text: '', placeholder: true });
+            }
+        }
+        this.select.create(newData);
+        this.data.parseSelectData();
+        this.data.setSelectedFromSelect();
+    };
+    SlimSelect.prototype.addData = function (data) {
+        var isValid = data_1.validateData([data]);
+        if (!isValid) {
+            console.error('Validation problem on: #' + this.select.element.id);
+            return;
+        }
+        this.data.add(this.data.newOption(data));
+        this.select.create(this.data.data);
+        this.data.parseSelectData();
+        this.data.setSelectedFromSelect();
+        this.render();
+    };
+    SlimSelect.prototype.open = function () {
+        var _this = this;
+        if (!this.config.isEnabled) {
+            return;
+        }
+        if (this.data.contentOpen) {
+            return;
+        }
+        if (this.beforeOpen) {
+            this.beforeOpen();
+        }
+        if (this.config.isMultiple && this.slim.multiSelected) {
+            this.slim.multiSelected.plus.classList.add('ss-cross');
+        }
+        else if (this.slim.singleSelected) {
+            this.slim.singleSelected.arrowIcon.arrow.classList.remove('arrow-down');
+            this.slim.singleSelected.arrowIcon.arrow.classList.add('arrow-up');
+        }
+        this.slim[(this.config.isMultiple ? 'multiSelected' : 'singleSelected')].container.classList.add((this.data.contentPosition === 'above' ? this.config.openAbove : this.config.openBelow));
+        if (this.config.addToBody) {
+            var containerRect = this.slim.container.getBoundingClientRect();
+            this.slim.content.style.top = (containerRect.top + containerRect.height + window.scrollY) + 'px';
+            this.slim.content.style.left = (containerRect.left + window.scrollX) + 'px';
+            this.slim.content.style.width = containerRect.width + 'px';
+        }
+        this.slim.content.classList.add(this.config.open);
+        if (this.config.showContent.toLowerCase() === 'up') {
+            this.moveContentAbove();
+        }
+        else if (this.config.showContent.toLowerCase() === 'down') {
+            this.moveContentBelow();
+        }
+        else {
+            if (helper_1.putContent(this.slim.content, this.data.contentPosition, this.data.contentOpen) === 'above') {
+                this.moveContentAbove();
+            }
+            else {
+                this.moveContentBelow();
+            }
+        }
+        if (!this.config.isMultiple) {
+            var selected = this.data.getSelected();
+            if (selected) {
+                var selectedId = selected.id;
+                var selectedOption = this.slim.list.querySelector('[data-id="' + selectedId + '"]');
+                if (selectedOption) {
+                    helper_1.ensureElementInView(this.slim.list, selectedOption);
+                }
+            }
+        }
+        setTimeout(function () {
+            _this.data.contentOpen = true;
+            if (_this.config.searchFocus) {
+                _this.slim.search.input.focus();
+            }
+            if (_this.afterOpen) {
+                _this.afterOpen();
+            }
+        }, this.config.timeoutDelay);
+    };
+    SlimSelect.prototype.close = function () {
+        var _this = this;
+        if (!this.data.contentOpen) {
+            return;
+        }
+        if (this.beforeClose) {
+            this.beforeClose();
+        }
+        if (this.config.isMultiple && this.slim.multiSelected) {
+            this.slim.multiSelected.container.classList.remove(this.config.openAbove);
+            this.slim.multiSelected.container.classList.remove(this.config.openBelow);
+            this.slim.multiSelected.plus.classList.remove('ss-cross');
+        }
+        else if (this.slim.singleSelected) {
+            this.slim.singleSelected.container.classList.remove(this.config.openAbove);
+            this.slim.singleSelected.container.classList.remove(this.config.openBelow);
+            this.slim.singleSelected.arrowIcon.arrow.classList.add('arrow-down');
+            this.slim.singleSelected.arrowIcon.arrow.classList.remove('arrow-up');
+        }
+        this.slim.content.classList.remove(this.config.open);
+        this.data.contentOpen = false;
+        this.search('');
+        setTimeout(function () {
+            _this.slim.content.removeAttribute('style');
+            _this.data.contentPosition = 'below';
+            if (_this.config.isMultiple && _this.slim.multiSelected) {
+                _this.slim.multiSelected.container.classList.remove(_this.config.openAbove);
+                _this.slim.multiSelected.container.classList.remove(_this.config.openBelow);
+            }
+            else if (_this.slim.singleSelected) {
+                _this.slim.singleSelected.container.classList.remove(_this.config.openAbove);
+                _this.slim.singleSelected.container.classList.remove(_this.config.openBelow);
+            }
+            _this.slim.search.input.blur();
+            if (_this.afterClose) {
+                _this.afterClose();
+            }
+        }, this.config.timeoutDelay);
+    };
+    SlimSelect.prototype.moveContentAbove = function () {
+        var selectHeight = 0;
+        if (this.config.isMultiple && this.slim.multiSelected) {
+            selectHeight = this.slim.multiSelected.container.offsetHeight;
+        }
+        else if (this.slim.singleSelected) {
+            selectHeight = this.slim.singleSelected.container.offsetHeight;
+        }
+        var contentHeight = this.slim.content.offsetHeight;
+        var height = selectHeight + contentHeight - 1;
+        this.slim.content.style.margin = '-' + height + 'px 0 0 0';
+        this.slim.content.style.height = (height - selectHeight + 1) + 'px';
+        this.slim.content.style.transformOrigin = 'center bottom';
+        this.data.contentPosition = 'above';
+        if (this.config.isMultiple && this.slim.multiSelected) {
+            this.slim.multiSelected.container.classList.remove(this.config.openBelow);
+            this.slim.multiSelected.container.classList.add(this.config.openAbove);
+        }
+        else if (this.slim.singleSelected) {
+            this.slim.singleSelected.container.classList.remove(this.config.openBelow);
+            this.slim.singleSelected.container.classList.add(this.config.openAbove);
+        }
+    };
+    SlimSelect.prototype.moveContentBelow = function () {
+        this.data.contentPosition = 'below';
+        if (this.config.isMultiple && this.slim.multiSelected) {
+            this.slim.multiSelected.container.classList.remove(this.config.openAbove);
+            this.slim.multiSelected.container.classList.add(this.config.openBelow);
+        }
+        else if (this.slim.singleSelected) {
+            this.slim.singleSelected.container.classList.remove(this.config.openAbove);
+            this.slim.singleSelected.container.classList.add(this.config.openBelow);
+        }
+    };
+    SlimSelect.prototype.enable = function () {
+        this.config.isEnabled = true;
+        if (this.config.isMultiple && this.slim.multiSelected) {
+            this.slim.multiSelected.container.classList.remove(this.config.disabled);
+        }
+        else if (this.slim.singleSelected) {
+            this.slim.singleSelected.container.classList.remove(this.config.disabled);
+        }
+        this.select.triggerMutationObserver = false;
+        this.select.element.disabled = false;
+        this.slim.search.input.disabled = false;
+        this.select.triggerMutationObserver = true;
+    };
+    SlimSelect.prototype.disable = function () {
+        this.config.isEnabled = false;
+        if (this.config.isMultiple && this.slim.multiSelected) {
+            this.slim.multiSelected.container.classList.add(this.config.disabled);
+        }
+        else if (this.slim.singleSelected) {
+            this.slim.singleSelected.container.classList.add(this.config.disabled);
+        }
+        this.select.triggerMutationObserver = false;
+        this.select.element.disabled = true;
+        this.slim.search.input.disabled = true;
+        this.select.triggerMutationObserver = true;
+    };
+    SlimSelect.prototype.search = function (value) {
+        if (this.data.searchValue !== value) {
+            this.slim.search.input.value = value;
+            if (this.config.isAjax) {
+                var master_1 = this;
+                this.config.isSearching = true;
+                this.render();
+                if (this.ajax) {
+                    this.ajax(value, function (info) {
+                        master_1.config.isSearching = false;
+                        if (Array.isArray(info)) {
+                            info.unshift({ text: '', placeholder: true });
+                            master_1.setData(info);
+                            master_1.data.search(value);
+                            master_1.render();
+                        }
+                        else if (typeof info === 'string') {
+                            master_1.slim.options(info);
+                        }
+                        else {
+                            master_1.render();
+                        }
+                    });
+                }
+            }
+            else {
+                this.data.search(value);
+                this.render();
+            }
+        }
+    };
+    SlimSelect.prototype.setSearchText = function (text) {
+        this.config.searchText = text;
+    };
+    SlimSelect.prototype.render = function () {
+        if (this.config.isMultiple) {
+            this.slim.values();
+        }
+        else {
+            this.slim.placeholder();
+            this.slim.deselect();
+        }
+        this.slim.options();
+    };
+    SlimSelect.prototype.destroy = function (id) {
+        if (id === void 0) { id = null; }
+        var slim = (id ? document.querySelector('.' + id + '.ss-main') : this.slim.container);
+        var select = (id ? document.querySelector("[data-ssid=" + id + "]") : this.select.element);
+        if (!slim || !select) {
+            return;
+        }
+        select.style.display = '';
+        delete select.dataset.ssid;
+        var el = select;
+        el.slim = null;
+        if (slim.parentElement) {
+            slim.parentElement.removeChild(slim);
+        }
+        if (this.config.addToBody) {
+            var slimContent = (id ? document.querySelector('.' + id + '.ss-content') : this.slim.content);
+            if (!slimContent) {
+                return;
+            }
+            document.body.removeChild(slimContent);
+        }
+    };
+    return SlimSelect;
+}());
+exports["default"] = SlimSelect;
+
+
+/***/ }),
+/* 3 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+exports.__esModule = true;
+var Config = (function () {
+    function Config(info) {
+        this.id = '';
+        this.isMultiple = false;
+        this.isAjax = false;
+        this.isSearching = false;
+        this.showSearch = true;
+        this.searchFocus = true;
+        this.searchHighlight = false;
+        this.closeOnSelect = true;
+        this.showContent = 'auto';
+        this.searchPlaceholder = 'Search';
+        this.searchText = 'No Results';
+        this.searchingText = 'Searching...';
+        this.placeholderText = 'Select Value';
+        this.allowDeselect = false;
+        this.allowDeselectOption = false;
+        this.hideSelectedOption = false;
+        this.deselectLabel = 'x';
+        this.isEnabled = true;
+        this.valuesUseText = false;
+        this.showOptionTooltips = false;
+        this.selectByGroup = false;
+        this.limit = 0;
+        this.timeoutDelay = 200;
+        this.addToBody = false;
+        this.main = 'ss-main';
+        this.singleSelected = 'ss-single-selected';
+        this.arrow = 'ss-arrow';
+        this.multiSelected = 'ss-multi-selected';
+        this.add = 'ss-add';
+        this.plus = 'ss-plus';
+        this.values = 'ss-values';
+        this.value = 'ss-value';
+        this.valueText = 'ss-value-text';
+        this.valueDelete = 'ss-value-delete';
+        this.content = 'ss-content';
+        this.open = 'ss-open';
+        this.openAbove = 'ss-open-above';
+        this.openBelow = 'ss-open-below';
+        this.search = 'ss-search';
+        this.searchHighlighter = 'ss-search-highlight';
+        this.addable = 'ss-addable';
+        this.list = 'ss-list';
+        this.optgroup = 'ss-optgroup';
+        this.optgroupLabel = 'ss-optgroup-label';
+        this.optgroupLabelSelectable = 'ss-optgroup-label-selectable';
+        this.option = 'ss-option';
+        this.optionSelected = 'ss-option-selected';
+        this.highlighted = 'ss-highlighted';
+        this.disabled = 'ss-disabled';
+        this.hide = 'ss-hide';
+        this.id = 'ss-' + Math.floor(Math.random() * 100000);
+        this.style = info.select.style.cssText;
+        this["class"] = info.select.className.split(' ');
+        this.isMultiple = info.select.multiple;
+        this.isAjax = info.isAjax;
+        this.showSearch = (info.showSearch === false ? false : true);
+        this.searchFocus = (info.searchFocus === false ? false : true);
+        this.searchHighlight = (info.searchHighlight === true ? true : false);
+        this.closeOnSelect = (info.closeOnSelect === false ? false : true);
+        if (info.showContent) {
+            this.showContent = info.showContent;
+        }
+        this.isEnabled = (info.isEnabled === false ? false : true);
+        if (info.searchPlaceholder) {
+            this.searchPlaceholder = info.searchPlaceholder;
+        }
+        if (info.searchText) {
+            this.searchText = info.searchText;
+        }
+        if (info.searchingText) {
+            this.searchingText = info.searchingText;
+        }
+        if (info.placeholderText) {
+            this.placeholderText = info.placeholderText;
+        }
+        this.allowDeselect = (info.allowDeselect === true ? true : false);
+        this.allowDeselectOption = (info.allowDeselectOption === true ? true : false);
+        this.hideSelectedOption = (info.hideSelectedOption === true ? true : false);
+        if (info.deselectLabel) {
+            this.deselectLabel = info.deselectLabel;
+        }
+        if (info.valuesUseText) {
+            this.valuesUseText = info.valuesUseText;
+        }
+        if (info.showOptionTooltips) {
+            this.showOptionTooltips = info.showOptionTooltips;
+        }
+        if (info.selectByGroup) {
+            this.selectByGroup = info.selectByGroup;
+        }
+        if (info.limit) {
+            this.limit = info.limit;
+        }
+        if (info.searchFilter) {
+            this.searchFilter = info.searchFilter;
+        }
+        if (info.timeoutDelay != null) {
+            this.timeoutDelay = info.timeoutDelay;
+        }
+        this.addToBody = (info.addToBody === true ? true : false);
+    }
+    Config.prototype.searchFilter = function (opt, search) {
+        return opt.text.toLowerCase().indexOf(search.toLowerCase()) !== -1;
+    };
+    return Config;
+}());
+exports.Config = Config;
+
+
+/***/ }),
+/* 4 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+exports.__esModule = true;
+var helper_1 = __webpack_require__(0);
+var Select = (function () {
+    function Select(info) {
+        this.triggerMutationObserver = true;
+        this.element = info.select;
+        this.main = info.main;
+        if (this.element.disabled) {
+            this.main.config.isEnabled = false;
+        }
+        this.addAttributes();
+        this.addEventListeners();
+        this.mutationObserver = null;
+        this.addMutationObserver();
+        var el = this.element;
+        el.slim = info.main;
+    }
+    Select.prototype.setValue = function () {
+        if (!this.main.data.getSelected()) {
+            return;
+        }
+        if (this.main.config.isMultiple) {
+            var selected = this.main.data.getSelected();
+            var options = this.element.options;
+            for (var _i = 0, options_1 = options; _i < options_1.length; _i++) {
+                var o = options_1[_i];
+                o.selected = false;
+                for (var _a = 0, selected_1 = selected; _a < selected_1.length; _a++) {
+                    var s = selected_1[_a];
+                    if (s.value === o.value) {
+                        o.selected = true;
+                    }
+                }
+            }
+        }
+        else {
+            var selected = this.main.data.getSelected();
+            this.element.value = (selected ? selected.value : '');
+        }
+        this.main.data.isOnChangeEnabled = false;
+        this.element.dispatchEvent(new CustomEvent('change', { bubbles: true }));
+        this.main.data.isOnChangeEnabled = true;
+    };
+    Select.prototype.addAttributes = function () {
+        this.element.tabIndex = -1;
+        this.element.style.display = 'none';
+        this.element.dataset.ssid = this.main.config.id;
+    };
+    Select.prototype.addEventListeners = function () {
+        var _this = this;
+        this.element.addEventListener('change', function (e) {
+            _this.main.data.setSelectedFromSelect();
+            _this.main.render();
+        });
+    };
+    Select.prototype.addMutationObserver = function () {
+        var _this = this;
+        if (this.main.config.isAjax) {
+            return;
+        }
+        this.mutationObserver = new MutationObserver(function (mutations) {
+            if (!_this.triggerMutationObserver) {
+                return;
+            }
+            _this.main.data.parseSelectData();
+            _this.main.data.setSelectedFromSelect();
+            _this.main.render();
+            mutations.forEach(function (mutation) {
+                if (mutation.attributeName === 'class') {
+                    _this.main.slim.updateContainerDivClass(_this.main.slim.container);
+                }
+            });
+        });
+        this.observeMutationObserver();
+    };
+    Select.prototype.observeMutationObserver = function () {
+        if (!this.mutationObserver) {
+            return;
+        }
+        this.mutationObserver.observe(this.element, {
+            attributes: true,
+            childList: true,
+            characterData: true
+        });
+    };
+    Select.prototype.disconnectMutationObserver = function () {
+        if (this.mutationObserver) {
+            this.mutationObserver.disconnect();
+        }
+    };
+    Select.prototype.create = function (data) {
+        this.element.innerHTML = '';
+        for (var _i = 0, data_1 = data; _i < data_1.length; _i++) {
+            var d = data_1[_i];
+            if (d.hasOwnProperty('options')) {
+                var optgroupObject = d;
+                var optgroupEl = document.createElement('optgroup');
+                optgroupEl.label = optgroupObject.label;
+                if (optgroupObject.options) {
+                    for (var _a = 0, _b = optgroupObject.options; _a < _b.length; _a++) {
+                        var oo = _b[_a];
+                        optgroupEl.appendChild(this.createOption(oo));
+                    }
+                }
+                this.element.appendChild(optgroupEl);
+            }
+            else {
+                this.element.appendChild(this.createOption(d));
+            }
+        }
+    };
+    Select.prototype.createOption = function (info) {
+        var optionEl = document.createElement('option');
+        optionEl.value = info.value !== '' ? info.value : info.text;
+        optionEl.innerHTML = info.innerHTML || info.text;
+        if (info.selected) {
+            optionEl.selected = info.selected;
+        }
+        if (info.display === false) {
+            optionEl.style.display = 'none';
+        }
+        if (info.disabled) {
+            optionEl.disabled = true;
+        }
+        if (info.placeholder) {
+            optionEl.setAttribute('data-placeholder', 'true');
+        }
+        if (info.mandatory) {
+            optionEl.setAttribute('data-mandatory', 'true');
+        }
+        if (info["class"]) {
+            info["class"].split(' ').forEach(function (optionClass) {
+                optionEl.classList.add(optionClass);
+            });
+        }
+        if (info.data && typeof info.data === 'object') {
+            Object.keys(info.data).forEach(function (key) {
+                optionEl.setAttribute('data-' + helper_1.kebabCase(key), info.data[key]);
+            });
+        }
+        return optionEl;
+    };
+    return Select;
+}());
+exports.Select = Select;
+
+
+/***/ }),
+/* 5 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+exports.__esModule = true;
+var helper_1 = __webpack_require__(0);
+var data_1 = __webpack_require__(1);
+var Slim = (function () {
+    function Slim(info) {
+        this.main = info.main;
+        this.container = this.containerDiv();
+        this.content = this.contentDiv();
+        this.search = this.searchDiv();
+        this.list = this.listDiv();
+        this.options();
+        this.singleSelected = null;
+        this.multiSelected = null;
+        if (this.main.config.isMultiple) {
+            this.multiSelected = this.multiSelectedDiv();
+            if (this.multiSelected) {
+                this.container.appendChild(this.multiSelected.container);
+            }
+        }
+        else {
+            this.singleSelected = this.singleSelectedDiv();
+            this.container.appendChild(this.singleSelected.container);
+        }
+        if (this.main.config.addToBody) {
+            this.content.classList.add(this.main.config.id);
+            document.body.appendChild(this.content);
+        }
+        else {
+            this.container.appendChild(this.content);
+        }
+        this.content.appendChild(this.search.container);
+        this.content.appendChild(this.list);
+    }
+    Slim.prototype.containerDiv = function () {
+        var container = document.createElement('div');
+        container.style.cssText = this.main.config.style;
+        this.updateContainerDivClass(container);
+        return container;
+    };
+    Slim.prototype.updateContainerDivClass = function (container) {
+        this.main.config["class"] = this.main.select.element.className.split(' ');
+        container.className = '';
+        container.classList.add(this.main.config.id);
+        container.classList.add(this.main.config.main);
+        for (var _i = 0, _a = this.main.config["class"]; _i < _a.length; _i++) {
+            var c = _a[_i];
+            if (c.trim() !== '') {
+                container.classList.add(c);
+            }
+        }
+    };
+    Slim.prototype.singleSelectedDiv = function () {
+        var _this = this;
+        var container = document.createElement('div');
+        container.classList.add(this.main.config.singleSelected);
+        var placeholder = document.createElement('span');
+        placeholder.classList.add('placeholder');
+        container.appendChild(placeholder);
+        var deselect = document.createElement('span');
+        deselect.innerHTML = this.main.config.deselectLabel;
+        deselect.classList.add('ss-deselect');
+        deselect.onclick = function (e) {
+            e.stopPropagation();
+            if (!_this.main.config.isEnabled) {
+                return;
+            }
+            _this.main.set('');
+        };
+        container.appendChild(deselect);
+        var arrowContainer = document.createElement('span');
+        arrowContainer.classList.add(this.main.config.arrow);
+        var arrowIcon = document.createElement('span');
+        arrowIcon.classList.add('arrow-down');
+        arrowContainer.appendChild(arrowIcon);
+        container.appendChild(arrowContainer);
+        container.onclick = function () {
+            if (!_this.main.config.isEnabled) {
+                return;
+            }
+            _this.main.data.contentOpen ? _this.main.close() : _this.main.open();
+        };
+        return {
+            container: container,
+            placeholder: placeholder,
+            deselect: deselect,
+            arrowIcon: {
+                container: arrowContainer,
+                arrow: arrowIcon
+            }
+        };
+    };
+    Slim.prototype.placeholder = function () {
+        var selected = this.main.data.getSelected();
+        if (selected === null || (selected && selected.placeholder)) {
+            var placeholder = document.createElement('span');
+            placeholder.classList.add(this.main.config.disabled);
+            placeholder.innerHTML = this.main.config.placeholderText;
+            if (this.singleSelected) {
+                this.singleSelected.placeholder.innerHTML = placeholder.outerHTML;
+            }
+        }
+        else {
+            var selectedValue = '';
+            if (selected) {
+                selectedValue = selected.innerHTML && this.main.config.valuesUseText !== true ? selected.innerHTML : selected.text;
+            }
+            if (this.singleSelected) {
+                this.singleSelected.placeholder.innerHTML = (selected ? selectedValue : '');
+            }
+        }
+    };
+    Slim.prototype.deselect = function () {
+        if (this.singleSelected) {
+            if (!this.main.config.allowDeselect) {
+                this.singleSelected.deselect.classList.add('ss-hide');
+                return;
+            }
+            if (this.main.selected() === '') {
+                this.singleSelected.deselect.classList.add('ss-hide');
+            }
+            else {
+                this.singleSelected.deselect.classList.remove('ss-hide');
+            }
+        }
+    };
+    Slim.prototype.multiSelectedDiv = function () {
+        var _this = this;
+        var container = document.createElement('div');
+        container.classList.add(this.main.config.multiSelected);
+        var values = document.createElement('div');
+        values.classList.add(this.main.config.values);
+        container.appendChild(values);
+        var add = document.createElement('div');
+        add.classList.add(this.main.config.add);
+        var plus = document.createElement('span');
+        plus.classList.add(this.main.config.plus);
+        plus.onclick = function (e) {
+            if (_this.main.data.contentOpen) {
+                _this.main.close();
+                e.stopPropagation();
+            }
+        };
+        add.appendChild(plus);
+        container.appendChild(add);
+        container.onclick = function (e) {
+            if (!_this.main.config.isEnabled) {
+                return;
+            }
+            var target = e.target;
+            if (!target.classList.contains(_this.main.config.valueDelete)) {
+                _this.main.data.contentOpen ? _this.main.close() : _this.main.open();
+            }
+        };
+        return {
+            container: container,
+            values: values,
+            add: add,
+            plus: plus
+        };
+    };
+    Slim.prototype.values = function () {
+        if (!this.multiSelected) {
+            return;
+        }
+        var currentNodes = this.multiSelected.values.childNodes;
+        var selected = this.main.data.getSelected();
+        var exists;
+        var nodesToRemove = [];
+        for (var _i = 0, currentNodes_1 = currentNodes; _i < currentNodes_1.length; _i++) {
+            var c = currentNodes_1[_i];
+            exists = true;
+            for (var _a = 0, selected_1 = selected; _a < selected_1.length; _a++) {
+                var s = selected_1[_a];
+                if (String(s.id) === String(c.dataset.id)) {
+                    exists = false;
+                }
+            }
+            if (exists) {
+                nodesToRemove.push(c);
+            }
+        }
+        for (var _b = 0, nodesToRemove_1 = nodesToRemove; _b < nodesToRemove_1.length; _b++) {
+            var n = nodesToRemove_1[_b];
+            n.classList.add('ss-out');
+            this.multiSelected.values.removeChild(n);
+        }
+        currentNodes = this.multiSelected.values.childNodes;
+        for (var s = 0; s < selected.length; s++) {
+            exists = false;
+            for (var _c = 0, currentNodes_2 = currentNodes; _c < currentNodes_2.length; _c++) {
+                var c = currentNodes_2[_c];
+                if (String(selected[s].id) === String(c.dataset.id)) {
+                    exists = true;
+                }
+            }
+            if (!exists) {
+                if (currentNodes.length === 0 || !HTMLElement.prototype.insertAdjacentElement) {
+                    this.multiSelected.values.appendChild(this.valueDiv(selected[s]));
+                }
+                else if (s === 0) {
+                    this.multiSelected.values.insertBefore(this.valueDiv(selected[s]), currentNodes[s]);
+                }
+                else {
+                    currentNodes[s - 1].insertAdjacentElement('afterend', this.valueDiv(selected[s]));
+                }
+            }
+        }
+        if (selected.length === 0) {
+            var placeholder = document.createElement('span');
+            placeholder.classList.add(this.main.config.disabled);
+            placeholder.innerHTML = this.main.config.placeholderText;
+            this.multiSelected.values.innerHTML = placeholder.outerHTML;
+        }
+    };
+    Slim.prototype.valueDiv = function (optionObj) {
+        var _this = this;
+        var value = document.createElement('div');
+        value.classList.add(this.main.config.value);
+        value.dataset.id = optionObj.id;
+        var text = document.createElement('span');
+        text.classList.add(this.main.config.valueText);
+        text.innerHTML = (optionObj.innerHTML && this.main.config.valuesUseText !== true ? optionObj.innerHTML : optionObj.text);
+        value.appendChild(text);
+        if (!optionObj.mandatory) {
+            var deleteSpan = document.createElement('span');
+            deleteSpan.classList.add(this.main.config.valueDelete);
+            deleteSpan.innerHTML = this.main.config.deselectLabel;
+            deleteSpan.onclick = function (e) {
+                e.preventDefault();
+                e.stopPropagation();
+                var shouldUpdate = false;
+                if (!_this.main.beforeOnChange) {
+                    shouldUpdate = true;
+                }
+                if (_this.main.beforeOnChange) {
+                    var selected = _this.main.data.getSelected();
+                    var currentValues = JSON.parse(JSON.stringify(selected));
+                    for (var i = 0; i < currentValues.length; i++) {
+                        if (currentValues[i].id === optionObj.id) {
+                            currentValues.splice(i, 1);
+                        }
+                    }
+                    var beforeOnchange = _this.main.beforeOnChange(currentValues);
+                    if (beforeOnchange !== false) {
+                        shouldUpdate = true;
+                    }
+                }
+                if (shouldUpdate) {
+                    _this.main.data.removeFromSelected(optionObj.id, 'id');
+                    _this.main.render();
+                    _this.main.select.setValue();
+                    _this.main.data.onDataChange();
+                }
+            };
+            value.appendChild(deleteSpan);
+        }
+        return value;
+    };
+    Slim.prototype.contentDiv = function () {
+        var container = document.createElement('div');
+        container.classList.add(this.main.config.content);
+        return container;
+    };
+    Slim.prototype.searchDiv = function () {
+        var _this = this;
+        var container = document.createElement('div');
+        var input = document.createElement('input');
+        var addable = document.createElement('div');
+        container.classList.add(this.main.config.search);
+        var searchReturn = {
+            container: container,
+            input: input
+        };
+        if (!this.main.config.showSearch) {
+            container.classList.add(this.main.config.hide);
+            input.readOnly = true;
+        }
+        input.type = 'search';
+        input.placeholder = this.main.config.searchPlaceholder;
+        input.tabIndex = 0;
+        input.setAttribute('aria-label', this.main.config.searchPlaceholder);
+        input.setAttribute('autocapitalize', 'off');
+        input.setAttribute('autocomplete', 'off');
+        input.setAttribute('autocorrect', 'off');
+        input.onclick = function (e) {
+            setTimeout(function () {
+                var target = e.target;
+                if (target.value === '') {
+                    _this.main.search('');
+                }
+            }, 10);
+        };
+        input.onkeydown = function (e) {
+            if (e.key === 'ArrowUp') {
+                _this.main.open();
+                _this.highlightUp();
+                e.preventDefault();
+            }
+            else if (e.key === 'ArrowDown') {
+                _this.main.open();
+                _this.highlightDown();
+                e.preventDefault();
+            }
+            else if (e.key === 'Tab') {
+                if (!_this.main.data.contentOpen) {
+                    setTimeout(function () { _this.main.close(); }, _this.main.config.timeoutDelay);
+                }
+                else {
+                    _this.main.close();
+                }
+            }
+            else if (e.key === 'Enter') {
+                e.preventDefault();
+            }
+        };
+        input.onkeyup = function (e) {
+            var target = e.target;
+            if (e.key === 'Enter') {
+                if (_this.main.addable && e.ctrlKey) {
+                    addable.click();
+                    e.preventDefault();
+                    e.stopPropagation();
+                    return;
+                }
+                var highlighted = _this.list.querySelector('.' + _this.main.config.highlighted);
+                if (highlighted) {
+                    highlighted.click();
+                }
+            }
+            else if (e.key === 'ArrowUp' || e.key === 'ArrowDown') {
+            }
+            else if (e.key === 'Escape') {
+                _this.main.close();
+            }
+            else {
+                if (_this.main.config.showSearch && _this.main.data.contentOpen) {
+                    _this.main.search(target.value);
+                }
+                else {
+                    input.value = '';
+                }
+            }
+            e.preventDefault();
+            e.stopPropagation();
+        };
+        input.onfocus = function () { _this.main.open(); };
+        container.appendChild(input);
+        if (this.main.addable) {
+            addable.classList.add(this.main.config.addable);
+            addable.innerHTML = '+';
+            addable.onclick = function (e) {
+                if (_this.main.addable) {
+                    e.preventDefault();
+                    e.stopPropagation();
+                    var inputValue = _this.search.input.value;
+                    if (inputValue.trim() === '') {
+                        _this.search.input.focus();
+                        return;
+                    }
+                    var addableValue = _this.main.addable(inputValue);
+                    var addableValueStr_1 = '';
+                    if (!addableValue) {
+                        return;
+                    }
+                    if (typeof addableValue === 'object') {
+                        var validValue = data_1.validateOption(addableValue);
+                        if (validValue) {
+                            _this.main.addData(addableValue);
+                            addableValueStr_1 = (addableValue.value ? addableValue.value : addableValue.text);
+                        }
+                    }
+                    else {
+                        _this.main.addData(_this.main.data.newOption({
+                            text: addableValue,
+                            value: addableValue
+                        }));
+                        addableValueStr_1 = addableValue;
+                    }
+                    _this.main.search('');
+                    setTimeout(function () {
+                        _this.main.set(addableValueStr_1, 'value', false, false);
+                    }, 100);
+                    if (_this.main.config.closeOnSelect) {
+                        setTimeout(function () {
+                            _this.main.close();
+                        }, 100);
+                    }
+                }
+            };
+            container.appendChild(addable);
+            searchReturn.addable = addable;
+        }
+        return searchReturn;
+    };
+    Slim.prototype.highlightUp = function () {
+        var highlighted = this.list.querySelector('.' + this.main.config.highlighted);
+        var prev = null;
+        if (highlighted) {
+            prev = highlighted.previousSibling;
+            while (prev !== null) {
+                if (prev.classList.contains(this.main.config.disabled)) {
+                    prev = prev.previousSibling;
+                    continue;
+                }
+                else {
+                    break;
+                }
+            }
+        }
+        else {
+            var allOptions = this.list.querySelectorAll('.' + this.main.config.option + ':not(.' + this.main.config.disabled + ')');
+            prev = allOptions[allOptions.length - 1];
+        }
+        if (prev && prev.classList.contains(this.main.config.optgroupLabel)) {
+            prev = null;
+        }
+        if (prev === null) {
+            var parent_1 = highlighted.parentNode;
+            if (parent_1.classList.contains(this.main.config.optgroup)) {
+                if (parent_1.previousSibling) {
+                    var prevNodes = parent_1.previousSibling.querySelectorAll('.' + this.main.config.option + ':not(.' + this.main.config.disabled + ')');
+                    if (prevNodes.length) {
+                        prev = prevNodes[prevNodes.length - 1];
+                    }
+                }
+            }
+        }
+        if (prev) {
+            if (highlighted) {
+                highlighted.classList.remove(this.main.config.highlighted);
+            }
+            prev.classList.add(this.main.config.highlighted);
+            helper_1.ensureElementInView(this.list, prev);
+        }
+    };
+    Slim.prototype.highlightDown = function () {
+        var highlighted = this.list.querySelector('.' + this.main.config.highlighted);
+        var next = null;
+        if (highlighted) {
+            next = highlighted.nextSibling;
+            while (next !== null) {
+                if (next.classList.contains(this.main.config.disabled)) {
+                    next = next.nextSibling;
+                    continue;
+                }
+                else {
+                    break;
+                }
+            }
+        }
+        else {
+            next = this.list.querySelector('.' + this.main.config.option + ':not(.' + this.main.config.disabled + ')');
+        }
+        if (next === null && highlighted !== null) {
+            var parent_2 = highlighted.parentNode;
+            if (parent_2.classList.contains(this.main.config.optgroup)) {
+                if (parent_2.nextSibling) {
+                    var sibling = parent_2.nextSibling;
+                    next = sibling.querySelector('.' + this.main.config.option + ':not(.' + this.main.config.disabled + ')');
+                }
+            }
+        }
+        if (next) {
+            if (highlighted) {
+                highlighted.classList.remove(this.main.config.highlighted);
+            }
+            next.classList.add(this.main.config.highlighted);
+            helper_1.ensureElementInView(this.list, next);
+        }
+    };
+    Slim.prototype.listDiv = function () {
+        var list = document.createElement('div');
+        list.classList.add(this.main.config.list);
+        return list;
+    };
+    Slim.prototype.options = function (content) {
+        if (content === void 0) { content = ''; }
+        var data = this.main.data.filtered || this.main.data.data;
+        this.list.innerHTML = '';
+        if (content !== '') {
+            var searching = document.createElement('div');
+            searching.classList.add(this.main.config.option);
+            searching.classList.add(this.main.config.disabled);
+            searching.innerHTML = content;
+            this.list.appendChild(searching);
+            return;
+        }
+        if (this.main.config.isAjax && this.main.config.isSearching) {
+            var searching = document.createElement('div');
+            searching.classList.add(this.main.config.option);
+            searching.classList.add(this.main.config.disabled);
+            searching.innerHTML = this.main.config.searchingText;
+            this.list.appendChild(searching);
+            return;
+        }
+        if (data.length === 0) {
+            var noResults = document.createElement('div');
+            noResults.classList.add(this.main.config.option);
+            noResults.classList.add(this.main.config.disabled);
+            noResults.innerHTML = this.main.config.searchText;
+            this.list.appendChild(noResults);
+            return;
+        }
+        var _loop_1 = function (d) {
+            if (d.hasOwnProperty('label')) {
+                var item = d;
+                var optgroupEl_1 = document.createElement('div');
+                optgroupEl_1.classList.add(this_1.main.config.optgroup);
+                var optgroupLabel = document.createElement('div');
+                optgroupLabel.classList.add(this_1.main.config.optgroupLabel);
+                if (this_1.main.config.selectByGroup && this_1.main.config.isMultiple) {
+                    optgroupLabel.classList.add(this_1.main.config.optgroupLabelSelectable);
+                }
+                optgroupLabel.innerHTML = item.label;
+                optgroupEl_1.appendChild(optgroupLabel);
+                var options = item.options;
+                if (options) {
+                    for (var _i = 0, options_1 = options; _i < options_1.length; _i++) {
+                        var o = options_1[_i];
+                        optgroupEl_1.appendChild(this_1.option(o));
+                    }
+                    if (this_1.main.config.selectByGroup && this_1.main.config.isMultiple) {
+                        var master_1 = this_1;
+                        optgroupLabel.addEventListener('click', function (e) {
+                            e.preventDefault();
+                            e.stopPropagation();
+                            for (var _i = 0, _a = optgroupEl_1.children; _i < _a.length; _i++) {
+                                var childEl = _a[_i];
+                                if (childEl.className.indexOf(master_1.main.config.option) !== -1) {
+                                    childEl.click();
+                                }
+                            }
+                        });
+                    }
+                }
+                this_1.list.appendChild(optgroupEl_1);
+            }
+            else {
+                this_1.list.appendChild(this_1.option(d));
+            }
+        };
+        var this_1 = this;
+        for (var _i = 0, data_2 = data; _i < data_2.length; _i++) {
+            var d = data_2[_i];
+            _loop_1(d);
+        }
+    };
+    Slim.prototype.option = function (data) {
+        if (data.placeholder) {
+            var placeholder = document.createElement('div');
+            placeholder.classList.add(this.main.config.option);
+            placeholder.classList.add(this.main.config.hide);
+            return placeholder;
+        }
+        var optionEl = document.createElement('div');
+        optionEl.classList.add(this.main.config.option);
+        if (data["class"]) {
+            data["class"].split(' ').forEach(function (dataClass) {
+                optionEl.classList.add(dataClass);
+            });
+        }
+        if (data.style) {
+            optionEl.style.cssText = data.style;
+        }
+        var selected = this.main.data.getSelected();
+        optionEl.dataset.id = data.id;
+        if (this.main.config.searchHighlight && this.main.slim && data.innerHTML && this.main.slim.search.input.value.trim() !== '') {
+            optionEl.innerHTML = helper_1.highlight(data.innerHTML, this.main.slim.search.input.value, this.main.config.searchHighlighter);
+        }
+        else if (data.innerHTML) {
+            optionEl.innerHTML = data.innerHTML;
+        }
+        if (this.main.config.showOptionTooltips && optionEl.textContent) {
+            optionEl.setAttribute('title', optionEl.textContent);
+        }
+        var master = this;
+        optionEl.addEventListener('click', function (e) {
+            e.preventDefault();
+            e.stopPropagation();
+            var element = this;
+            var elementID = element.dataset.id;
+            if (data.selected === true && master.main.config.allowDeselectOption) {
+                var shouldUpdate = false;
+                if (!master.main.beforeOnChange || !master.main.config.isMultiple) {
+                    shouldUpdate = true;
+                }
+                if (master.main.beforeOnChange && master.main.config.isMultiple) {
+                    var selectedValues = master.main.data.getSelected();
+                    var currentValues = JSON.parse(JSON.stringify(selectedValues));
+                    for (var i = 0; i < currentValues.length; i++) {
+                        if (currentValues[i].id === elementID) {
+                            currentValues.splice(i, 1);
+                        }
+                    }
+                    var beforeOnchange = master.main.beforeOnChange(currentValues);
+                    if (beforeOnchange !== false) {
+                        shouldUpdate = true;
+                    }
+                }
+                if (shouldUpdate) {
+                    if (master.main.config.isMultiple) {
+                        master.main.data.removeFromSelected(elementID, 'id');
+                        master.main.render();
+                        master.main.select.setValue();
+                        master.main.data.onDataChange();
+                    }
+                    else {
+                        master.main.set('');
+                    }
+                }
+            }
+            else {
+                if (data.disabled || data.selected) {
+                    return;
+                }
+                if (master.main.config.limit && Array.isArray(selected) && master.main.config.limit <= selected.length) {
+                    return;
+                }
+                if (master.main.beforeOnChange) {
+                    var value = void 0;
+                    var objectInfo = JSON.parse(JSON.stringify(master.main.data.getObjectFromData(elementID)));
+                    objectInfo.selected = true;
+                    if (master.main.config.isMultiple) {
+                        value = JSON.parse(JSON.stringify(selected));
+                        value.push(objectInfo);
+                    }
+                    else {
+                        value = JSON.parse(JSON.stringify(objectInfo));
+                    }
+                    var beforeOnchange = master.main.beforeOnChange(value);
+                    if (beforeOnchange !== false) {
+                        master.main.set(elementID, 'id', master.main.config.closeOnSelect);
+                    }
+                }
+                else {
+                    master.main.set(elementID, 'id', master.main.config.closeOnSelect);
+                }
+            }
+        });
+        var isSelected = selected && helper_1.isValueInArrayOfObjects(selected, 'id', data.id);
+        if (data.disabled || isSelected) {
+            optionEl.onclick = null;
+            if (!master.main.config.allowDeselectOption) {
+                optionEl.classList.add(this.main.config.disabled);
+            }
+            if (master.main.config.hideSelectedOption) {
+                optionEl.classList.add(this.main.config.hide);
+            }
+        }
+        if (isSelected) {
+            optionEl.classList.add(this.main.config.optionSelected);
+        }
+        else {
+            optionEl.classList.remove(this.main.config.optionSelected);
+        }
+        return optionEl;
+    };
+    return Slim;
+}());
+exports.Slim = Slim;
+
+
+/***/ })
+/******/ ])["default"];
+});
\ No newline at end of file
diff --git a/admin/js/vendors/tabulator/css/tabulator.css b/admin/js/vendors/tabulator/css/tabulator.css
new file mode 100644 (file)
index 0000000..ec3b42a
--- /dev/null
@@ -0,0 +1,995 @@
+/* Tabulator v4.7.0 (c) Oliver Folkerd */
+.tabulator {
+  position: relative;
+  border: 1px solid #999;
+  background-color: #888;
+  font-size: 14px;
+  text-align: left;
+  overflow: hidden;
+  -ms-transform: translatez(0);
+  transform: translatez(0);
+}
+
+.tabulator[tabulator-layout="fitDataFill"] .tabulator-tableHolder .tabulator-table {
+  min-width: 100%;
+}
+
+.tabulator[tabulator-layout="fitDataTable"] {
+  display: inline-block;
+}
+
+.tabulator.tabulator-block-select {
+  -webkit-user-select: none;
+      -ms-user-select: none;
+          user-select: none;
+}
+
+.tabulator .tabulator-header {
+  position: relative;
+  box-sizing: border-box;
+  width: 100%;
+  border-bottom: 1px solid #999;
+  background-color: #e6e6e6;
+  color: #555;
+  font-weight: bold;
+  white-space: nowrap;
+  overflow: hidden;
+  -moz-user-select: none;
+  -khtml-user-select: none;
+  -webkit-user-select: none;
+  -o-user-select: none;
+}
+
+.tabulator .tabulator-header.tabulator-header-hidden {
+  display: none;
+}
+
+.tabulator .tabulator-header .tabulator-col {
+  display: inline-block;
+  position: relative;
+  box-sizing: border-box;
+  border-right: 1px solid #aaa;
+  background: #e6e6e6;
+  text-align: left;
+  vertical-align: bottom;
+  overflow: hidden;
+}
+
+.tabulator .tabulator-header .tabulator-col.tabulator-moving {
+  position: absolute;
+  border: 1px solid #999;
+  background: #cdcdcd;
+  pointer-events: none;
+}
+
+.tabulator .tabulator-header .tabulator-col .tabulator-col-content {
+  box-sizing: border-box;
+  position: relative;
+  padding: 4px;
+}
+
+.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-header-menu-button {
+  padding: 0 8px;
+}
+
+.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-header-menu-button:hover {
+  cursor: pointer;
+  opacity: .6;
+}
+
+.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title {
+  box-sizing: border-box;
+  width: 100%;
+  white-space: nowrap;
+  overflow: hidden;
+  text-overflow: ellipsis;
+  vertical-align: bottom;
+}
+
+.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title .tabulator-title-editor {
+  box-sizing: border-box;
+  width: 100%;
+  border: 1px solid #999;
+  padding: 1px;
+  background: #fff;
+}
+
+.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-arrow {
+  display: inline-block;
+  position: absolute;
+  top: 9px;
+  right: 8px;
+  width: 0;
+  height: 0;
+  border-left: 6px solid transparent;
+  border-right: 6px solid transparent;
+  border-bottom: 6px solid #bbb;
+}
+
+.tabulator .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols {
+  position: relative;
+  display: -ms-flexbox;
+  display: flex;
+  border-top: 1px solid #aaa;
+  overflow: hidden;
+  margin-right: -1px;
+}
+
+.tabulator .tabulator-header .tabulator-col:first-child .tabulator-col-resize-handle.prev {
+  display: none;
+}
+
+.tabulator .tabulator-header .tabulator-col .tabulator-header-filter {
+  position: relative;
+  box-sizing: border-box;
+  margin-top: 2px;
+  width: 100%;
+  text-align: center;
+}
+
+.tabulator .tabulator-header .tabulator-col .tabulator-header-filter textarea {
+  height: auto !important;
+}
+
+.tabulator .tabulator-header .tabulator-col .tabulator-header-filter svg {
+  margin-top: 3px;
+}
+
+.tabulator .tabulator-header .tabulator-col .tabulator-header-filter input::-ms-clear {
+  width: 0;
+  height: 0;
+}
+
+.tabulator .tabulator-header .tabulator-col.tabulator-sortable .tabulator-col-title {
+  padding-right: 25px;
+}
+
+.tabulator .tabulator-header .tabulator-col.tabulator-sortable:hover {
+  cursor: pointer;
+  background-color: #cdcdcd;
+}
+
+.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort="none"] .tabulator-col-content .tabulator-arrow {
+  border-top: none;
+  border-bottom: 6px solid #bbb;
+}
+
+.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort="asc"] .tabulator-col-content .tabulator-arrow {
+  border-top: none;
+  border-bottom: 6px solid #666;
+}
+
+.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort="desc"] .tabulator-col-content .tabulator-arrow {
+  border-top: 6px solid #666;
+  border-bottom: none;
+}
+
+.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical .tabulator-col-content .tabulator-col-title {
+  -ms-writing-mode: tb-rl;
+      writing-mode: vertical-rl;
+  text-orientation: mixed;
+  display: -ms-flexbox;
+  display: flex;
+  -ms-flex-align: center;
+      align-items: center;
+  -ms-flex-pack: center;
+      justify-content: center;
+}
+
+.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-col-vertical-flip .tabulator-col-title {
+  -ms-transform: rotate(180deg);
+      transform: rotate(180deg);
+}
+
+.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable .tabulator-col-title {
+  padding-right: 0;
+  padding-top: 20px;
+}
+
+.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable.tabulator-col-vertical-flip .tabulator-col-title {
+  padding-right: 0;
+  padding-bottom: 20px;
+}
+
+.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable .tabulator-arrow {
+  right: calc(50% - 6px);
+}
+
+.tabulator .tabulator-header .tabulator-frozen {
+  display: inline-block;
+  position: absolute;
+  z-index: 10;
+}
+
+.tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-left {
+  border-right: 2px solid #aaa;
+}
+
+.tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-right {
+  border-left: 2px solid #aaa;
+}
+
+.tabulator .tabulator-header .tabulator-calcs-holder {
+  box-sizing: border-box;
+  min-width: 600%;
+  background: #f3f3f3 !important;
+  border-top: 1px solid #aaa;
+  border-bottom: 1px solid #aaa;
+  overflow: hidden;
+}
+
+.tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row {
+  background: #f3f3f3 !important;
+}
+
+.tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row .tabulator-col-resize-handle {
+  display: none;
+}
+
+.tabulator .tabulator-header .tabulator-frozen-rows-holder {
+  min-width: 600%;
+}
+
+.tabulator .tabulator-header .tabulator-frozen-rows-holder:empty {
+  display: none;
+}
+
+.tabulator .tabulator-tableHolder {
+  position: relative;
+  width: 100%;
+  white-space: nowrap;
+  overflow: auto;
+  -webkit-overflow-scrolling: touch;
+}
+
+.tabulator .tabulator-tableHolder:focus {
+  outline: none;
+}
+
+.tabulator .tabulator-tableHolder .tabulator-placeholder {
+  box-sizing: border-box;
+  display: -ms-flexbox;
+  display: flex;
+  -ms-flex-align: center;
+      align-items: center;
+  width: 100%;
+}
+
+.tabulator .tabulator-tableHolder .tabulator-placeholder[tabulator-render-mode="virtual"] {
+  min-height: 100%;
+  min-width: 100%;
+}
+
+.tabulator .tabulator-tableHolder .tabulator-placeholder span {
+  display: inline-block;
+  margin: 0 auto;
+  padding: 10px;
+  color: #ccc;
+  font-weight: bold;
+  font-size: 20px;
+}
+
+.tabulator .tabulator-tableHolder .tabulator-table {
+  position: relative;
+  display: inline-block;
+  background-color: #fff;
+  white-space: nowrap;
+  overflow: visible;
+  color: #333;
+}
+
+.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.tabulator-calcs {
+  font-weight: bold;
+  background: #e2e2e2 !important;
+}
+
+.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.tabulator-calcs.tabulator-calcs-top {
+  border-bottom: 2px solid #aaa;
+}
+
+.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.tabulator-calcs.tabulator-calcs-bottom {
+  border-top: 2px solid #aaa;
+}
+
+.tabulator .tabulator-footer {
+  padding: 5px 10px;
+  border-top: 1px solid #999;
+  background-color: #e6e6e6;
+  text-align: right;
+  color: #555;
+  font-weight: bold;
+  white-space: nowrap;
+  -ms-user-select: none;
+      user-select: none;
+  -moz-user-select: none;
+  -khtml-user-select: none;
+  -webkit-user-select: none;
+  -o-user-select: none;
+}
+
+.tabulator .tabulator-footer .tabulator-calcs-holder {
+  box-sizing: border-box;
+  width: calc(100% + 20px);
+  margin: -5px -10px 5px -10px;
+  text-align: left;
+  background: #f3f3f3 !important;
+  border-bottom: 1px solid #aaa;
+  border-top: 1px solid #aaa;
+  overflow: hidden;
+}
+
+.tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row {
+  background: #f3f3f3 !important;
+}
+
+.tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row .tabulator-col-resize-handle {
+  display: none;
+}
+
+.tabulator .tabulator-footer .tabulator-calcs-holder:only-child {
+  margin-bottom: -5px;
+  border-bottom: none;
+}
+
+.tabulator .tabulator-footer .tabulator-paginator {
+  color: #555;
+  font-family: inherit;
+  font-weight: inherit;
+  font-size: inherit;
+}
+
+.tabulator .tabulator-footer .tabulator-page-size {
+  display: inline-block;
+  margin: 0 5px;
+  padding: 2px 5px;
+  border: 1px solid #aaa;
+  border-radius: 3px;
+}
+
+.tabulator .tabulator-footer .tabulator-pages {
+  margin: 0 7px;
+}
+
+.tabulator .tabulator-footer .tabulator-page {
+  display: inline-block;
+  margin: 0 2px;
+  padding: 2px 5px;
+  border: 1px solid #aaa;
+  border-radius: 3px;
+  background: rgba(255, 255, 255, 0.2);
+}
+
+.tabulator .tabulator-footer .tabulator-page.active {
+  color: #d00;
+}
+
+.tabulator .tabulator-footer .tabulator-page:disabled {
+  opacity: .5;
+}
+
+.tabulator .tabulator-footer .tabulator-page:not(.disabled):hover {
+  cursor: pointer;
+  background: rgba(0, 0, 0, 0.2);
+  color: #fff;
+}
+
+.tabulator .tabulator-col-resize-handle {
+  position: absolute;
+  right: 0;
+  top: 0;
+  bottom: 0;
+  width: 5px;
+}
+
+.tabulator .tabulator-col-resize-handle.prev {
+  left: 0;
+  right: auto;
+}
+
+.tabulator .tabulator-col-resize-handle:hover {
+  cursor: ew-resize;
+}
+
+.tabulator .tabulator-loader {
+  position: absolute;
+  display: -ms-flexbox;
+  display: flex;
+  -ms-flex-align: center;
+      align-items: center;
+  top: 0;
+  left: 0;
+  z-index: 100;
+  height: 100%;
+  width: 100%;
+  background: rgba(0, 0, 0, 0.4);
+  text-align: center;
+}
+
+.tabulator .tabulator-loader .tabulator-loader-msg {
+  display: inline-block;
+  margin: 0 auto;
+  padding: 10px 20px;
+  border-radius: 10px;
+  background: #fff;
+  font-weight: bold;
+  font-size: 16px;
+}
+
+.tabulator .tabulator-loader .tabulator-loader-msg.tabulator-loading {
+  border: 4px solid #333;
+  color: #000;
+}
+
+.tabulator .tabulator-loader .tabulator-loader-msg.tabulator-error {
+  border: 4px solid #D00;
+  color: #590000;
+}
+
+.tabulator-row {
+  position: relative;
+  box-sizing: border-box;
+  min-height: 22px;
+  background-color: #fff;
+}
+
+.tabulator-row.tabulator-row-even {
+  background-color: #EFEFEF;
+}
+
+.tabulator-row.tabulator-selectable:hover {
+  background-color: #bbb;
+  cursor: pointer;
+}
+
+.tabulator-row.tabulator-selected {
+  background-color: #9ABCEA;
+}
+
+.tabulator-row.tabulator-selected:hover {
+  background-color: #769BCC;
+  cursor: pointer;
+}
+
+.tabulator-row.tabulator-row-moving {
+  border: 1px solid #000;
+  background: #fff;
+}
+
+.tabulator-row.tabulator-moving {
+  position: absolute;
+  border-top: 1px solid #aaa;
+  border-bottom: 1px solid #aaa;
+  pointer-events: none;
+  z-index: 15;
+}
+
+.tabulator-row .tabulator-row-resize-handle {
+  position: absolute;
+  right: 0;
+  bottom: 0;
+  left: 0;
+  height: 5px;
+}
+
+.tabulator-row .tabulator-row-resize-handle.prev {
+  top: 0;
+  bottom: auto;
+}
+
+.tabulator-row .tabulator-row-resize-handle:hover {
+  cursor: ns-resize;
+}
+
+.tabulator-row .tabulator-frozen {
+  display: inline-block;
+  position: absolute;
+  background-color: inherit;
+  z-index: 10;
+}
+
+.tabulator-row .tabulator-frozen.tabulator-frozen-left {
+  border-right: 2px solid #aaa;
+}
+
+.tabulator-row .tabulator-frozen.tabulator-frozen-right {
+  border-left: 2px solid #aaa;
+}
+
+.tabulator-row .tabulator-responsive-collapse {
+  box-sizing: border-box;
+  padding: 5px;
+  border-top: 1px solid #aaa;
+  border-bottom: 1px solid #aaa;
+}
+
+.tabulator-row .tabulator-responsive-collapse:empty {
+  display: none;
+}
+
+.tabulator-row .tabulator-responsive-collapse table {
+  font-size: 14px;
+}
+
+.tabulator-row .tabulator-responsive-collapse table tr td {
+  position: relative;
+}
+
+.tabulator-row .tabulator-responsive-collapse table tr td:first-of-type {
+  padding-right: 10px;
+}
+
+.tabulator-row .tabulator-cell {
+  display: inline-block;
+  position: relative;
+  box-sizing: border-box;
+  padding: 4px;
+  border-right: 1px solid #aaa;
+  vertical-align: middle;
+  white-space: nowrap;
+  overflow: hidden;
+  text-overflow: ellipsis;
+}
+
+.tabulator-row .tabulator-cell.tabulator-editing {
+  border: 1px solid #1D68CD;
+  padding: 0;
+}
+
+.tabulator-row .tabulator-cell.tabulator-editing input, .tabulator-row .tabulator-cell.tabulator-editing select {
+  border: 1px;
+  background: transparent;
+}
+
+.tabulator-row .tabulator-cell.tabulator-validation-fail {
+  border: 1px solid #dd0000;
+}
+
+.tabulator-row .tabulator-cell.tabulator-validation-fail input, .tabulator-row .tabulator-cell.tabulator-validation-fail select {
+  border: 1px;
+  background: transparent;
+  color: #dd0000;
+}
+
+.tabulator-row .tabulator-cell:first-child .tabulator-col-resize-handle.prev {
+  display: none;
+}
+
+.tabulator-row .tabulator-cell.tabulator-row-handle {
+  display: -ms-inline-flexbox;
+  display: inline-flex;
+  -ms-flex-align: center;
+      align-items: center;
+  -ms-flex-pack: center;
+      justify-content: center;
+  -moz-user-select: none;
+  -khtml-user-select: none;
+  -webkit-user-select: none;
+  -o-user-select: none;
+}
+
+.tabulator-row .tabulator-cell.tabulator-row-handle .tabulator-row-handle-box {
+  width: 80%;
+}
+
+.tabulator-row .tabulator-cell.tabulator-row-handle .tabulator-row-handle-box .tabulator-row-handle-bar {
+  width: 100%;
+  height: 3px;
+  margin-top: 2px;
+  background: #666;
+}
+
+.tabulator-row .tabulator-cell .tabulator-data-tree-branch {
+  display: inline-block;
+  vertical-align: middle;
+  height: 9px;
+  width: 7px;
+  margin-top: -9px;
+  margin-right: 5px;
+  border-bottom-left-radius: 1px;
+  border-left: 2px solid #aaa;
+  border-bottom: 2px solid #aaa;
+}
+
+.tabulator-row .tabulator-cell .tabulator-data-tree-control {
+  display: -ms-inline-flexbox;
+  display: inline-flex;
+  -ms-flex-pack: center;
+      justify-content: center;
+  -ms-flex-align: center;
+      align-items: center;
+  vertical-align: middle;
+  height: 11px;
+  width: 11px;
+  margin-right: 5px;
+  border: 1px solid #333;
+  border-radius: 2px;
+  background: rgba(0, 0, 0, 0.1);
+  overflow: hidden;
+}
+
+.tabulator-row .tabulator-cell .tabulator-data-tree-control:hover {
+  cursor: pointer;
+  background: rgba(0, 0, 0, 0.2);
+}
+
+.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-collapse {
+  display: inline-block;
+  position: relative;
+  height: 7px;
+  width: 1px;
+  background: transparent;
+}
+
+.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-collapse:after {
+  position: absolute;
+  content: "";
+  left: -3px;
+  top: 3px;
+  height: 1px;
+  width: 7px;
+  background: #333;
+}
+
+.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand {
+  display: inline-block;
+  position: relative;
+  height: 7px;
+  width: 1px;
+  background: #333;
+}
+
+.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand:after {
+  position: absolute;
+  content: "";
+  left: -3px;
+  top: 3px;
+  height: 1px;
+  width: 7px;
+  background: #333;
+}
+
+.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle {
+  display: -ms-inline-flexbox;
+  display: inline-flex;
+  -ms-flex-align: center;
+      align-items: center;
+  -ms-flex-pack: center;
+      justify-content: center;
+  -moz-user-select: none;
+  -khtml-user-select: none;
+  -webkit-user-select: none;
+  -o-user-select: none;
+  height: 15px;
+  width: 15px;
+  border-radius: 20px;
+  background: #666;
+  color: #fff;
+  font-weight: bold;
+  font-size: 1.1em;
+}
+
+.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle:hover {
+  opacity: .7;
+}
+
+.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle.open .tabulator-responsive-collapse-toggle-close {
+  display: initial;
+}
+
+.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle.open .tabulator-responsive-collapse-toggle-open {
+  display: none;
+}
+
+.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle .tabulator-responsive-collapse-toggle-close {
+  display: none;
+}
+
+.tabulator-row .tabulator-cell .tabulator-traffic-light {
+  display: inline-block;
+  height: 14px;
+  width: 14px;
+  border-radius: 14px;
+}
+
+.tabulator-row.tabulator-group {
+  box-sizing: border-box;
+  border-bottom: 1px solid #999;
+  border-right: 1px solid #aaa;
+  border-top: 1px solid #999;
+  padding: 5px;
+  padding-left: 10px;
+  background: #ccc;
+  font-weight: bold;
+  min-width: 100%;
+}
+
+.tabulator-row.tabulator-group:hover {
+  cursor: pointer;
+  background-color: rgba(0, 0, 0, 0.1);
+}
+
+.tabulator-row.tabulator-group.tabulator-group-visible .tabulator-arrow {
+  margin-right: 10px;
+  border-left: 6px solid transparent;
+  border-right: 6px solid transparent;
+  border-top: 6px solid #666;
+  border-bottom: 0;
+}
+
+.tabulator-row.tabulator-group.tabulator-group-level-1 {
+  padding-left: 30px;
+}
+
+.tabulator-row.tabulator-group.tabulator-group-level-2 {
+  padding-left: 50px;
+}
+
+.tabulator-row.tabulator-group.tabulator-group-level-3 {
+  padding-left: 70px;
+}
+
+.tabulator-row.tabulator-group.tabulator-group-level-4 {
+  padding-left: 90px;
+}
+
+.tabulator-row.tabulator-group.tabulator-group-level-5 {
+  padding-left: 110px;
+}
+
+.tabulator-row.tabulator-group .tabulator-group-toggle {
+  display: inline-block;
+}
+
+.tabulator-row.tabulator-group .tabulator-arrow {
+  display: inline-block;
+  width: 0;
+  height: 0;
+  margin-right: 16px;
+  border-top: 6px solid transparent;
+  border-bottom: 6px solid transparent;
+  border-right: 0;
+  border-left: 6px solid #666;
+  vertical-align: middle;
+}
+
+.tabulator-row.tabulator-group span {
+  margin-left: 10px;
+  color: #d00;
+}
+
+.tabulator-menu {
+  position: absolute;
+  display: inline-block;
+  box-sizing: border-box;
+  background: #fff;
+  border: 1px solid #aaa;
+  box-shadow: 0 0 5px 0 rgba(0, 0, 0, 0.2);
+  font-size: 14px;
+  overflow-y: auto;
+  -webkit-overflow-scrolling: touch;
+  z-index: 10000;
+}
+
+.tabulator-menu .tabulator-menu-item {
+  padding: 5px 10px;
+  -webkit-user-select: none;
+      -ms-user-select: none;
+          user-select: none;
+}
+
+.tabulator-menu .tabulator-menu-item.tabulator-menu-item-disabled {
+  opacity: .5;
+}
+
+.tabulator-menu .tabulator-menu-item:not(.tabulator-menu-item-disabled):hover {
+  cursor: pointer;
+  background: #EFEFEF;
+}
+
+.tabulator-menu .tabulator-menu-separator {
+  border-top: 1px solid #aaa;
+}
+
+.tabulator-edit-select-list {
+  position: absolute;
+  display: inline-block;
+  box-sizing: border-box;
+  max-height: 200px;
+  background: #fff;
+  border: 1px solid #aaa;
+  font-size: 14px;
+  overflow-y: auto;
+  -webkit-overflow-scrolling: touch;
+  z-index: 10000;
+}
+
+.tabulator-edit-select-list .tabulator-edit-select-list-item {
+  padding: 4px;
+  color: #333;
+}
+
+.tabulator-edit-select-list .tabulator-edit-select-list-item.active {
+  color: #fff;
+  background: #1D68CD;
+}
+
+.tabulator-edit-select-list .tabulator-edit-select-list-item.active.focused {
+  outline: 1px solid rgba(255, 255, 255, 0.5);
+}
+
+.tabulator-edit-select-list .tabulator-edit-select-list-item.focused {
+  outline: 1px solid #1D68CD;
+}
+
+.tabulator-edit-select-list .tabulator-edit-select-list-item:hover {
+  cursor: pointer;
+  color: #fff;
+  background: #1D68CD;
+}
+
+.tabulator-edit-select-list .tabulator-edit-select-list-notice {
+  padding: 4px;
+  color: #333;
+  text-align: center;
+}
+
+.tabulator-edit-select-list .tabulator-edit-select-list-group {
+  border-bottom: 1px solid #aaa;
+  padding: 4px;
+  padding-top: 6px;
+  color: #333;
+  font-weight: bold;
+}
+
+.tabulator-print-fullscreen {
+  position: absolute;
+  top: 0;
+  bottom: 0;
+  left: 0;
+  right: 0;
+  z-index: 10000;
+}
+
+body.tabulator-print-fullscreen-hide > *:not(.tabulator-print-fullscreen) {
+  display: none !important;
+}
+
+.tabulator-print-table {
+  border-collapse: collapse;
+}
+
+.tabulator-print-table .tabulator-data-tree-branch {
+  display: inline-block;
+  vertical-align: middle;
+  height: 9px;
+  width: 7px;
+  margin-top: -9px;
+  margin-right: 5px;
+  border-bottom-left-radius: 1px;
+  border-left: 2px solid #aaa;
+  border-bottom: 2px solid #aaa;
+}
+
+.tabulator-print-table .tabulator-print-table-group {
+  box-sizing: border-box;
+  border-bottom: 1px solid #999;
+  border-right: 1px solid #aaa;
+  border-top: 1px solid #999;
+  padding: 5px;
+  padding-left: 10px;
+  background: #ccc;
+  font-weight: bold;
+  min-width: 100%;
+}
+
+.tabulator-print-table .tabulator-print-table-group:hover {
+  cursor: pointer;
+  background-color: rgba(0, 0, 0, 0.1);
+}
+
+.tabulator-print-table .tabulator-print-table-group.tabulator-group-visible .tabulator-arrow {
+  margin-right: 10px;
+  border-left: 6px solid transparent;
+  border-right: 6px solid transparent;
+  border-top: 6px solid #666;
+  border-bottom: 0;
+}
+
+.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-1 td {
+  padding-left: 30px !important;
+}
+
+.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-2 td {
+  padding-left: 50px !important;
+}
+
+.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-3 td {
+  padding-left: 70px !important;
+}
+
+.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-4 td {
+  padding-left: 90px !important;
+}
+
+.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-5 td {
+  padding-left: 110px !important;
+}
+
+.tabulator-print-table .tabulator-print-table-group .tabulator-group-toggle {
+  display: inline-block;
+}
+
+.tabulator-print-table .tabulator-print-table-group .tabulator-arrow {
+  display: inline-block;
+  width: 0;
+  height: 0;
+  margin-right: 16px;
+  border-top: 6px solid transparent;
+  border-bottom: 6px solid transparent;
+  border-right: 0;
+  border-left: 6px solid #666;
+  vertical-align: middle;
+}
+
+.tabulator-print-table .tabulator-print-table-group span {
+  margin-left: 10px;
+  color: #d00;
+}
+
+.tabulator-print-table .tabulator-data-tree-control {
+  display: -ms-inline-flexbox;
+  display: inline-flex;
+  -ms-flex-pack: center;
+      justify-content: center;
+  -ms-flex-align: center;
+      align-items: center;
+  vertical-align: middle;
+  height: 11px;
+  width: 11px;
+  margin-right: 5px;
+  border: 1px solid #333;
+  border-radius: 2px;
+  background: rgba(0, 0, 0, 0.1);
+  overflow: hidden;
+}
+
+.tabulator-print-table .tabulator-data-tree-control:hover {
+  cursor: pointer;
+  background: rgba(0, 0, 0, 0.2);
+}
+
+.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-collapse {
+  display: inline-block;
+  position: relative;
+  height: 7px;
+  width: 1px;
+  background: transparent;
+}
+
+.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-collapse:after {
+  position: absolute;
+  content: "";
+  left: -3px;
+  top: 3px;
+  height: 1px;
+  width: 7px;
+  background: #333;
+}
+
+.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-expand {
+  display: inline-block;
+  position: relative;
+  height: 7px;
+  width: 1px;
+  background: #333;
+}
+
+.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-expand:after {
+  position: absolute;
+  content: "";
+  left: -3px;
+  top: 3px;
+  height: 1px;
+  width: 7px;
+  background: #333;
+}
diff --git a/admin/js/vendors/tabulator/css/tabulator.min.css b/admin/js/vendors/tabulator/css/tabulator.min.css
new file mode 100644 (file)
index 0000000..bafd6c7
--- /dev/null
@@ -0,0 +1,3 @@
+/* Tabulator v4.7.0 (c) Oliver Folkerd */
+.tabulator{position:relative;border:1px solid #999;background-color:#888;font-size:14px;text-align:left;overflow:hidden;transform:translatez(0)}.tabulator[tabulator-layout=fitDataFill] .tabulator-tableHolder .tabulator-table{min-width:100%}.tabulator[tabulator-layout=fitDataTable]{display:inline-block}.tabulator.tabulator-block-select{-webkit-user-select:none;-ms-user-select:none;user-select:none}.tabulator .tabulator-header{position:relative;box-sizing:border-box;width:100%;border-bottom:1px solid #999;background-color:#e6e6e6;color:#555;font-weight:700;white-space:nowrap;overflow:hidden;-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-o-user-select:none}.tabulator .tabulator-header.tabulator-header-hidden{display:none}.tabulator .tabulator-header .tabulator-col{display:inline-block;position:relative;box-sizing:border-box;border-right:1px solid #aaa;background:#e6e6e6;text-align:left;vertical-align:bottom;overflow:hidden}.tabulator .tabulator-header .tabulator-col.tabulator-moving{position:absolute;border:1px solid #999;background:#cdcdcd;pointer-events:none}.tabulator .tabulator-header .tabulator-col .tabulator-col-content{box-sizing:border-box;position:relative;padding:4px}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-header-menu-button{padding:0 8px}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-header-menu-button:hover{cursor:pointer;opacity:.6}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title{box-sizing:border-box;width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;vertical-align:bottom}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title .tabulator-title-editor{box-sizing:border-box;width:100%;border:1px solid #999;padding:1px;background:#fff}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-arrow{display:inline-block;position:absolute;top:9px;right:8px;width:0;height:0;border-left:6px solid transparent;border-right:6px solid transparent;border-bottom:6px solid #bbb}.tabulator .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols{position:relative;display:-ms-flexbox;display:flex;border-top:1px solid #aaa;overflow:hidden;margin-right:-1px}.tabulator .tabulator-header .tabulator-col:first-child .tabulator-col-resize-handle.prev{display:none}.tabulator .tabulator-header .tabulator-col .tabulator-header-filter{position:relative;box-sizing:border-box;margin-top:2px;width:100%;text-align:center}.tabulator .tabulator-header .tabulator-col .tabulator-header-filter textarea{height:auto!important}.tabulator .tabulator-header .tabulator-col .tabulator-header-filter svg{margin-top:3px}.tabulator .tabulator-header .tabulator-col .tabulator-header-filter input::-ms-clear{width:0;height:0}.tabulator .tabulator-header .tabulator-col.tabulator-sortable .tabulator-col-title{padding-right:25px}.tabulator .tabulator-header .tabulator-col.tabulator-sortable:hover{cursor:pointer;background-color:#cdcdcd}.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=none] .tabulator-col-content .tabulator-arrow{border-top:none;border-bottom:6px solid #bbb}.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=asc] .tabulator-col-content .tabulator-arrow{border-top:none;border-bottom:6px solid #666}.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=desc] .tabulator-col-content .tabulator-arrow{border-top:6px solid #666;border-bottom:none}.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical .tabulator-col-content .tabulator-col-title{-ms-writing-mode:tb-rl;writing-mode:vertical-rl;text-orientation:mixed;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center}.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-col-vertical-flip .tabulator-col-title{transform:rotate(180deg)}.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable .tabulator-col-title{padding-right:0;padding-top:20px}.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable.tabulator-col-vertical-flip .tabulator-col-title{padding-right:0;padding-bottom:20px}.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable .tabulator-arrow{right:calc(50% - 6px)}.tabulator .tabulator-header .tabulator-frozen{display:inline-block;position:absolute;z-index:10}.tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-left{border-right:2px solid #aaa}.tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-right{border-left:2px solid #aaa}.tabulator .tabulator-header .tabulator-calcs-holder{box-sizing:border-box;min-width:600%;background:#f3f3f3!important;border-top:1px solid #aaa;border-bottom:1px solid #aaa;overflow:hidden}.tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row{background:#f3f3f3!important}.tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row .tabulator-col-resize-handle{display:none}.tabulator .tabulator-header .tabulator-frozen-rows-holder{min-width:600%}.tabulator .tabulator-header .tabulator-frozen-rows-holder:empty{display:none}.tabulator .tabulator-tableHolder{position:relative;width:100%;white-space:nowrap;overflow:auto;-webkit-overflow-scrolling:touch}.tabulator .tabulator-tableHolder:focus{outline:none}.tabulator .tabulator-tableHolder .tabulator-placeholder{box-sizing:border-box;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;width:100%}.tabulator .tabulator-tableHolder .tabulator-placeholder[tabulator-render-mode=virtual]{min-height:100%;min-width:100%}.tabulator .tabulator-tableHolder .tabulator-placeholder span{display:inline-block;margin:0 auto;padding:10px;color:#ccc;font-weight:700;font-size:20px}.tabulator .tabulator-tableHolder .tabulator-table{position:relative;display:inline-block;background-color:#fff;white-space:nowrap;overflow:visible;color:#333}.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.tabulator-calcs{font-weight:700;background:#e2e2e2!important}.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.tabulator-calcs.tabulator-calcs-top{border-bottom:2px solid #aaa}.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.tabulator-calcs.tabulator-calcs-bottom{border-top:2px solid #aaa}.tabulator .tabulator-footer{padding:5px 10px;border-top:1px solid #999;background-color:#e6e6e6;text-align:right;color:#555;font-weight:700;white-space:nowrap;-ms-user-select:none;user-select:none;-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-o-user-select:none}.tabulator .tabulator-footer .tabulator-calcs-holder{box-sizing:border-box;width:calc(100% + 20px);margin:-5px -10px 5px;text-align:left;background:#f3f3f3!important;border-bottom:1px solid #aaa;border-top:1px solid #aaa;overflow:hidden}.tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row{background:#f3f3f3!important}.tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row .tabulator-col-resize-handle{display:none}.tabulator .tabulator-footer .tabulator-calcs-holder:only-child{margin-bottom:-5px;border-bottom:none}.tabulator .tabulator-footer .tabulator-paginator{color:#555;font-family:inherit;font-weight:inherit;font-size:inherit}.tabulator .tabulator-footer .tabulator-page-size{display:inline-block;margin:0 5px;padding:2px 5px;border:1px solid #aaa;border-radius:3px}.tabulator .tabulator-footer .tabulator-pages{margin:0 7px}.tabulator .tabulator-footer .tabulator-page{display:inline-block;margin:0 2px;padding:2px 5px;border:1px solid #aaa;border-radius:3px;background:hsla(0,0%,100%,.2)}.tabulator .tabulator-footer .tabulator-page.active{color:#d00}.tabulator .tabulator-footer .tabulator-page:disabled{opacity:.5}.tabulator .tabulator-footer .tabulator-page:not(.disabled):hover{cursor:pointer;background:rgba(0,0,0,.2);color:#fff}.tabulator .tabulator-col-resize-handle{position:absolute;right:0;top:0;bottom:0;width:5px}.tabulator .tabulator-col-resize-handle.prev{left:0;right:auto}.tabulator .tabulator-col-resize-handle:hover{cursor:ew-resize}.tabulator .tabulator-loader{position:absolute;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;top:0;left:0;z-index:100;height:100%;width:100%;background:rgba(0,0,0,.4);text-align:center}.tabulator .tabulator-loader .tabulator-loader-msg{display:inline-block;margin:0 auto;padding:10px 20px;border-radius:10px;background:#fff;font-weight:700;font-size:16px}.tabulator .tabulator-loader .tabulator-loader-msg.tabulator-loading{border:4px solid #333;color:#000}.tabulator .tabulator-loader .tabulator-loader-msg.tabulator-error{border:4px solid #d00;color:#590000}.tabulator-row{position:relative;box-sizing:border-box;min-height:22px;background-color:#fff}.tabulator-row.tabulator-row-even{background-color:#efefef}.tabulator-row.tabulator-selectable:hover{background-color:#bbb;cursor:pointer}.tabulator-row.tabulator-selected{background-color:#9abcea}.tabulator-row.tabulator-selected:hover{background-color:#769bcc;cursor:pointer}.tabulator-row.tabulator-row-moving{border:1px solid #000;background:#fff}.tabulator-row.tabulator-moving{position:absolute;border-top:1px solid #aaa;border-bottom:1px solid #aaa;pointer-events:none;z-index:15}.tabulator-row .tabulator-row-resize-handle{position:absolute;right:0;bottom:0;left:0;height:5px}.tabulator-row .tabulator-row-resize-handle.prev{top:0;bottom:auto}.tabulator-row .tabulator-row-resize-handle:hover{cursor:ns-resize}.tabulator-row .tabulator-frozen{display:inline-block;position:absolute;background-color:inherit;z-index:10}.tabulator-row .tabulator-frozen.tabulator-frozen-left{border-right:2px solid #aaa}.tabulator-row .tabulator-frozen.tabulator-frozen-right{border-left:2px solid #aaa}.tabulator-row .tabulator-responsive-collapse{box-sizing:border-box;padding:5px;border-top:1px solid #aaa;border-bottom:1px solid #aaa}.tabulator-row .tabulator-responsive-collapse:empty{display:none}.tabulator-row .tabulator-responsive-collapse table{font-size:14px}.tabulator-row .tabulator-responsive-collapse table tr td{position:relative}.tabulator-row .tabulator-responsive-collapse table tr td:first-of-type{padding-right:10px}.tabulator-row .tabulator-cell{display:inline-block;position:relative;box-sizing:border-box;padding:4px;border-right:1px solid #aaa;vertical-align:middle;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.tabulator-row .tabulator-cell.tabulator-editing{border:1px solid #1d68cd;padding:0}.tabulator-row .tabulator-cell.tabulator-editing input,.tabulator-row .tabulator-cell.tabulator-editing select{border:1px;background:transparent}.tabulator-row .tabulator-cell.tabulator-validation-fail{border:1px solid #d00}.tabulator-row .tabulator-cell.tabulator-validation-fail input,.tabulator-row .tabulator-cell.tabulator-validation-fail select{border:1px;background:transparent;color:#d00}.tabulator-row .tabulator-cell:first-child .tabulator-col-resize-handle.prev{display:none}.tabulator-row .tabulator-cell.tabulator-row-handle{display:-ms-inline-flexbox;display:inline-flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-o-user-select:none}.tabulator-row .tabulator-cell.tabulator-row-handle .tabulator-row-handle-box{width:80%}.tabulator-row .tabulator-cell.tabulator-row-handle .tabulator-row-handle-box .tabulator-row-handle-bar{width:100%;height:3px;margin-top:2px;background:#666}.tabulator-row .tabulator-cell .tabulator-data-tree-branch{display:inline-block;vertical-align:middle;height:9px;width:7px;margin-top:-9px;margin-right:5px;border-bottom-left-radius:1px;border-left:2px solid #aaa;border-bottom:2px solid #aaa}.tabulator-row .tabulator-cell .tabulator-data-tree-control{display:-ms-inline-flexbox;display:inline-flex;-ms-flex-pack:center;justify-content:center;-ms-flex-align:center;align-items:center;vertical-align:middle;height:11px;width:11px;margin-right:5px;border:1px solid #333;border-radius:2px;background:rgba(0,0,0,.1);overflow:hidden}.tabulator-row .tabulator-cell .tabulator-data-tree-control:hover{cursor:pointer;background:rgba(0,0,0,.2)}.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-collapse{display:inline-block;position:relative;height:7px;width:1px;background:transparent}.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-collapse:after{position:absolute;content:"";left:-3px;top:3px;height:1px;width:7px;background:#333}.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand{display:inline-block;position:relative;height:7px;width:1px;background:#333}.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand:after{position:absolute;content:"";left:-3px;top:3px;height:1px;width:7px;background:#333}.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle{display:-ms-inline-flexbox;display:inline-flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-o-user-select:none;height:15px;width:15px;border-radius:20px;background:#666;color:#fff;font-weight:700;font-size:1.1em}.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle:hover{opacity:.7}.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle.open .tabulator-responsive-collapse-toggle-close{display:initial}.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle.open .tabulator-responsive-collapse-toggle-open,.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle .tabulator-responsive-collapse-toggle-close{display:none}.tabulator-row .tabulator-cell .tabulator-traffic-light{display:inline-block;height:14px;width:14px;border-radius:14px}.tabulator-row.tabulator-group{box-sizing:border-box;border-bottom:1px solid #999;border-right:1px solid #aaa;border-top:1px solid #999;padding:5px;padding-left:10px;background:#ccc;font-weight:700;min-width:100%}.tabulator-row.tabulator-group:hover{cursor:pointer;background-color:rgba(0,0,0,.1)}.tabulator-row.tabulator-group.tabulator-group-visible .tabulator-arrow{margin-right:10px;border-left:6px solid transparent;border-right:6px solid transparent;border-top:6px solid #666;border-bottom:0}.tabulator-row.tabulator-group.tabulator-group-level-1{padding-left:30px}.tabulator-row.tabulator-group.tabulator-group-level-2{padding-left:50px}.tabulator-row.tabulator-group.tabulator-group-level-3{padding-left:70px}.tabulator-row.tabulator-group.tabulator-group-level-4{padding-left:90px}.tabulator-row.tabulator-group.tabulator-group-level-5{padding-left:110px}.tabulator-row.tabulator-group .tabulator-group-toggle{display:inline-block}.tabulator-row.tabulator-group .tabulator-arrow{display:inline-block;width:0;height:0;margin-right:16px;border-top:6px solid transparent;border-bottom:6px solid transparent;border-right:0;border-left:6px solid #666;vertical-align:middle}.tabulator-row.tabulator-group span{margin-left:10px;color:#d00}.tabulator-menu{position:absolute;display:inline-block;box-sizing:border-box;background:#fff;border:1px solid #aaa;box-shadow:0 0 5px 0 rgba(0,0,0,.2);font-size:14px;overflow-y:auto;-webkit-overflow-scrolling:touch;z-index:10000}.tabulator-menu .tabulator-menu-item{padding:5px 10px;-webkit-user-select:none;-ms-user-select:none;user-select:none}.tabulator-menu .tabulator-menu-item.tabulator-menu-item-disabled{opacity:.5}.tabulator-menu .tabulator-menu-item:not(.tabulator-menu-item-disabled):hover{cursor:pointer;background:#efefef}.tabulator-menu .tabulator-menu-separator{border-top:1px solid #aaa}.tabulator-edit-select-list{position:absolute;display:inline-block;box-sizing:border-box;max-height:200px;background:#fff;border:1px solid #aaa;font-size:14px;overflow-y:auto;-webkit-overflow-scrolling:touch;z-index:10000}.tabulator-edit-select-list .tabulator-edit-select-list-item{padding:4px;color:#333}.tabulator-edit-select-list .tabulator-edit-select-list-item.active{color:#fff;background:#1d68cd}.tabulator-edit-select-list .tabulator-edit-select-list-item.active.focused{outline:1px solid hsla(0,0%,100%,.5)}.tabulator-edit-select-list .tabulator-edit-select-list-item.focused{outline:1px solid #1d68cd}.tabulator-edit-select-list .tabulator-edit-select-list-item:hover{cursor:pointer;color:#fff;background:#1d68cd}.tabulator-edit-select-list .tabulator-edit-select-list-notice{padding:4px;color:#333;text-align:center}.tabulator-edit-select-list .tabulator-edit-select-list-group{border-bottom:1px solid #aaa;padding:4px;padding-top:6px;color:#333;font-weight:700}.tabulator-print-fullscreen{position:absolute;top:0;bottom:0;left:0;right:0;z-index:10000}body.tabulator-print-fullscreen-hide>:not(.tabulator-print-fullscreen){display:none!important}.tabulator-print-table{border-collapse:collapse}.tabulator-print-table .tabulator-data-tree-branch{display:inline-block;vertical-align:middle;height:9px;width:7px;margin-top:-9px;margin-right:5px;border-bottom-left-radius:1px;border-left:2px solid #aaa;border-bottom:2px solid #aaa}.tabulator-print-table .tabulator-print-table-group{box-sizing:border-box;border-bottom:1px solid #999;border-right:1px solid #aaa;border-top:1px solid #999;padding:5px;padding-left:10px;background:#ccc;font-weight:700;min-width:100%}.tabulator-print-table .tabulator-print-table-group:hover{cursor:pointer;background-color:rgba(0,0,0,.1)}.tabulator-print-table .tabulator-print-table-group.tabulator-group-visible .tabulator-arrow{margin-right:10px;border-left:6px solid transparent;border-right:6px solid transparent;border-top:6px solid #666;border-bottom:0}.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-1 td{padding-left:30px!important}.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-2 td{padding-left:50px!important}.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-3 td{padding-left:70px!important}.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-4 td{padding-left:90px!important}.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-5 td{padding-left:110px!important}.tabulator-print-table .tabulator-print-table-group .tabulator-group-toggle{display:inline-block}.tabulator-print-table .tabulator-print-table-group .tabulator-arrow{display:inline-block;width:0;height:0;margin-right:16px;border-top:6px solid transparent;border-bottom:6px solid transparent;border-right:0;border-left:6px solid #666;vertical-align:middle}.tabulator-print-table .tabulator-print-table-group span{margin-left:10px;color:#d00}.tabulator-print-table .tabulator-data-tree-control{display:-ms-inline-flexbox;display:inline-flex;-ms-flex-pack:center;justify-content:center;-ms-flex-align:center;align-items:center;vertical-align:middle;height:11px;width:11px;margin-right:5px;border:1px solid #333;border-radius:2px;background:rgba(0,0,0,.1);overflow:hidden}.tabulator-print-table .tabulator-data-tree-control:hover{cursor:pointer;background:rgba(0,0,0,.2)}.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-collapse{display:inline-block;position:relative;height:7px;width:1px;background:transparent}.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-collapse:after{position:absolute;content:"";left:-3px;top:3px;height:1px;width:7px;background:#333}.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-expand{display:inline-block;position:relative;height:7px;width:1px;background:#333}.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-expand:after{position:absolute;content:"";left:-3px;top:3px;height:1px;width:7px;background:#333}
+/*# sourceMappingURL=tabulator.min.css.map */
diff --git a/admin/js/vendors/tabulator/css/tabulator.min.css.map b/admin/js/vendors/tabulator/css/tabulator.min.css.map
new file mode 100644 (file)
index 0000000..47a4c5c
--- /dev/null
@@ -0,0 +1 @@
+{"version":3,"sources":["tabulator.scss"],"names":[],"mappings":"AA0CA,WACC,kBAAkB,AAElB,sBAxCgB,AA0ChB,sBA3CqB,AA6CrB,eA3Ca,AA4Cb,gBAAgB,AAChB,gBAAe,AAMf,uBAAwB,CAwfxB,AAvgBD,iFAoBI,cAAc,CACd,AArBJ,0CA0BE,oBAAqB,CACrB,AA3BF,kCA8BE,yBAAiB,AAAjB,qBAAiB,AAAjB,gBAAiB,CACjB,AA/BF,6BAmCE,kBAAiB,AACjB,sBAAsB,AAEtB,WAAU,AAEV,6BAtEwB,AAuExB,yBA1E4B,AA2E5B,WA1EmB,AA2EnB,gBAAgB,AAEhB,mBAAmB,AACnB,gBAAe,AAEf,sBAAsB,AACtB,wBAAwB,AACxB,yBAAyB,AACzB,mBAAoB,CAmPpB,AAtSF,qDAsDG,YAAY,CACZ,AAvDH,4CA2DG,qBAAoB,AACpB,kBAAiB,AACjB,sBAAqB,AACrB,4BA7FoB,AA8FpB,mBAhG2B,AAiG3B,gBAAe,AACf,sBAAsB,AACtB,eAAgB,CAqLhB,AAvPH,6DAqEI,kBAAkB,AAClB,sBApGsB,AAqGtB,mBAA8C,AAC9C,mBAAoB,CACpB,AAzEJ,mEA6EI,sBAAqB,AACrB,kBAAkB,AAClB,WAAW,CAgDX,AA/HJ,iGAmFK,aAAc,CAMd,AAzFL,uGAsFM,eAAe,AACf,UAAW,CACX,AAxFN,wFA6FK,sBAAqB,AACrB,WAAW,AAEX,mBAAmB,AACnB,gBAAgB,AAChB,uBAAuB,AACvB,qBAAqB,CAarB,AAhHL,gHAuGM,sBAAsB,AACtB,WAAW,AAEX,sBAAqB,AAErB,YAAW,AAEX,eAAgB,CAChB,AA/GN,oFAoHK,qBAAqB,AACrB,kBAAkB,AAClB,QAAO,AACP,UAAS,AACT,QAAQ,AACR,SAAS,AACT,kCAAkC,AAClC,mCAAmC,AACnC,4BArJmB,CAsJnB,AA7HL,0FAsIK,kBAAiB,AACjB,oBAAa,AAAb,aAAa,AAEb,0BAxKkB,AAyKlB,gBAAgB,AAEhB,iBAAiB,CACjB,AA7IL,0FAmJK,YAAa,CACb,AApJL,qEAyJI,kBAAkB,AAClB,sBAAsB,AACtB,eAAc,AACd,WAAU,AACV,iBAAkB,CAiBlB,AA9KJ,8EAiKK,qBAAsB,CACtB,AAlKL,yEAqKK,cAAe,CACf,AAtKL,sFA0KM,QAAS,AACT,QAAS,CACT,AA5KN,oFAmLK,kBAAkB,CAClB,AApLL,qEAuLK,eAAc,AACd,wBAAoD,CACpD,AAzLL,uHA6LM,gBAAgB,AAChB,4BAvNkB,CAwNlB,AA/LN,sHAoMM,gBAAgB,AAChB,4BA/NgB,CAgOhB,AAtMN,uHA2MM,0BArOgB,AAsOhB,kBAAmB,CACnB,AA7MN,+GAqNM,uBAAyB,AAAzB,yBAAyB,AACzB,uBAAuB,AAEvB,oBAAY,AAAZ,aAAY,AACZ,sBAAkB,AAAlB,mBAAkB,AAClB,qBAAsB,AAAtB,sBAAsB,CACtB,AA3NN,oHAgOM,wBAAyB,CACzB,AAjON,2GAsOM,gBAAe,AACf,gBAAgB,CAChB,AAxON,uIA4OO,gBAAe,AACf,mBAAmB,CACnB,AA9OP,uGAmPM,qBAAqB,CACrB,AApPN,+CA0PG,qBAAqB,AACrB,kBAAkB,AAIlB,UAAW,CASX,AAxQH,qEAkQI,2BAtRgB,CAuRhB,AAnQJ,sEAsQI,0BA1RgB,CA2RhB,AAvQJ,qDA4QG,sBAAqB,AACrB,eAAc,AAEd,6BAAyD,AAUzD,0BA7SiB,AA8SjB,6BAzToB,AA2TpB,eAAgB,CAChB,AA7RH,oEAkRI,4BAAyD,CAKzD,AAvRJ,iGAqRK,YAAa,CACb,AAtRL,2DAgSG,cAAc,CAKd,AArSH,iEAmSI,YAAa,CACb,AApSJ,kCA0SE,kBAAiB,AACjB,WAAU,AACV,mBAAmB,AACnB,cAAa,AACb,gCAAiC,CAyDjC,AAvWF,wCAiTG,YAAa,CACb,AAlTH,yDAsTG,sBAAqB,AACrB,oBAAa,AAAb,aAAa,AACb,sBAAkB,AAAlB,mBAAkB,AAOlB,UAAU,CAYV,AA3UH,wFA2TI,gBAAe,AACf,cAAc,CACd,AA7TJ,8DAkUI,qBAAqB,AAErB,cAAa,AACb,aAAY,AAEZ,WAAU,AACV,gBAAiB,AACjB,cAAe,CACf,AA1UJ,mDA+UG,kBAAiB,AACjB,qBAAoB,AACpB,sBAvWqB,AAwWrB,mBAAmB,AACnB,iBAAgB,AAChB,UAvWe,CAyXf,AAtWH,kFAyVK,gBAAiB,AACjB,4BAAwD,CASxD,AAnWL,sGA6VM,4BAjXc,CAkXd,AA9VN,yGAiWM,yBArXc,CAsXd,AAlWN,6BA6WE,iBAAgB,AAChB,0BApXwB,AAqXxB,yBAxX4B,AAyX5B,iBAAiB,AACjB,WAzXmB,AA0XnB,gBAAgB,AAChB,mBAAkB,AAClB,qBAAgB,AAAhB,iBAAgB,AAEhB,sBAAsB,AACtB,wBAAwB,AACxB,yBAAyB,AACzB,mBAAoB,CAgFpB,AAzcF,qDA4XG,sBAAqB,AACrB,wBAAuB,AACvB,sBAA2B,AAE3B,gBAAgB,AAEhB,6BAAyD,AAUzD,6BAhaiB,AAiajB,0BAjaiB,AAmajB,eAAgB,CAMhB,AArZH,oEAqYI,4BAAyD,CAKzD,AA1YJ,iGAwYK,YAAa,CACb,AAzYL,gEAkZI,mBAAkB,AAClB,kBAAkB,CAClB,AApZJ,kDAwZG,WAhakB,AAialB,oBAAmB,AACnB,oBAAmB,AACnB,iBAAiB,CACjB,AA5ZH,kDAgaG,qBAAoB,AAEpB,aAAY,AACZ,gBAAe,AAEf,sBA5aoB,AA6apB,iBAAiB,CACjB,AAvaH,8CA0aG,YAAY,CACZ,AA3aH,6CA+aG,qBAAoB,AAEpB,aAAY,AACZ,gBAAe,AAEf,sBA3boB,AA4bpB,kBAAiB,AAEjB,6BAA+B,CAiB/B,AAxcH,oDA0bI,UA/bmB,CAgcnB,AA3bJ,sDA8bI,UAAU,CACV,AA/bJ,kEAmcK,eAAc,AACd,0BAAyB,AACzB,UAAU,CACV,AAtcL,wCA6cE,kBAAiB,AACjB,QAAO,AACP,MAAK,AACL,SAAQ,AACR,SAAS,CAUT,AA3dF,6CAodG,OAAM,AACN,UAAU,CACV,AAtdH,8CAydG,gBAAgB,CAChB,AA1dH,6BAgeE,kBAAiB,AACjB,oBAAa,AAAb,aAAa,AACb,sBAAkB,AAAlB,mBAAkB,AAElB,MAAK,AACL,OAAM,AACN,YAAW,AAEX,YAAW,AACX,WAAU,AACV,0BAAyB,AACzB,iBAAiB,CA2BjB,AAtgBF,mDA+eG,qBAAoB,AAEpB,cAAa,AACb,kBAAiB,AAEjB,mBAAkB,AAElB,gBAAe,AACf,gBAAgB,AAChB,cAAc,CAad,AArgBH,qEA4fI,sBAAqB,AACrB,UAAU,CACV,AA9fJ,mEAkgBI,sBAAqB,AACrB,aAAa,CACb,AAMJ,eACC,kBAAkB,AAClB,sBAAsB,AACtB,gBAA0C,AAC1C,qBApiBuB,CAo5BvB,AApXD,kCAQE,wBAviB4B,CAwiB5B,AATF,0CAYE,sBAxiBsB,AAyiBtB,cAAe,CACf,AAdF,kCAiBE,wBA3iB6B,CA4iB7B,AAlBF,wCAqBE,yBA9iBkC,AA+iBlC,cAAe,CACf,AAvBF,oCA0BE,sBAAqB,AACrB,eAAe,CACf,AA5BF,gCA+BE,kBAAkB,AAElB,0BA/jBkB,AAgkBlB,6BAhkBkB,AAkkBlB,oBAAoB,AACpB,UAAU,CACV,AAtCF,4CA0CE,kBAAiB,AACjB,QAAO,AACP,SAAQ,AACR,OAAM,AACN,UAAU,CAUV,AAxDF,iDAiDG,MAAK,AACL,WAAW,CACX,AAnDH,kDAsDG,gBAAgB,CAChB,AAvDH,iCA2DE,qBAAqB,AACrB,kBAAkB,AAElB,yBAAyB,AAEzB,UAAW,CASX,AAzEF,uDAmEG,2BAjmBiB,CAkmBjB,AApEH,wDAuEG,0BArmBiB,CAsmBjB,AAxEH,8CA4EE,sBAAqB,AAErB,YAAW,AAEX,0BA9mBkB,AA+mBlB,4BA/mBkB,CAkoBlB,AApGF,oDAoFG,YAAY,CACZ,AArFH,oDAwFG,cAtoBW,CAipBX,AAnGH,0DA4FK,iBAAkB,CAKlB,AAjGL,wEA+FM,kBAAkB,CAClB,AAhGN,+BAwGE,qBAAoB,AACpB,kBAAkB,AAClB,sBAAqB,AACrB,YAAW,AACX,4BA1oBkB,AA2oBlB,sBAAqB,AACrB,mBAAkB,AAClB,gBAAe,AACf,sBAAsB,CAyLtB,AAzSF,iDAmHG,yBA1oBkB,AA2oBlB,SAAU,CAMV,AA1HH,+GAuHI,WAAU,AACV,sBAAsB,CACtB,AAzHJ,yDA6HG,qBAnpBgB,CA0pBhB,AApIH,+HA+HI,WAAU,AACV,uBAAsB,AAEtB,UAxpBe,CAypBf,AAnIJ,6EAyII,YAAa,CACb,AA1IJ,oDA+IG,2BAAoB,AAApB,oBAAoB,AACpB,sBAAkB,AAAlB,mBAAkB,AAClB,qBAAsB,AAAtB,uBAAsB,AAEtB,sBAAsB,AACtB,wBAAwB,AACxB,yBAAyB,AACzB,mBAAoB,CAcpB,AApKH,8EA0JI,SAAS,CAST,AAnKJ,wGA8JK,WAAU,AACV,WAAU,AACV,eAAc,AACd,eAAe,CACf,AAlKL,2DAuKG,qBAAoB,AACpB,sBAAqB,AAErB,WAAU,AACV,UAAS,AAET,gBAAe,AACf,iBAAgB,AAEhB,8BAA6B,AAE7B,2BAhtBiB,AAitBjB,4BAjtBiB,CAktBjB,AApLH,4DAwLG,2BAAmB,AAAnB,oBAAmB,AACnB,qBAAsB,AAAtB,uBAAsB,AACtB,sBAAkB,AAAlB,mBAAkB,AAClB,sBAAqB,AAErB,YAAW,AACX,WAAU,AAEV,iBAAgB,AAEhB,sBA/tBe,AAguBf,kBAAiB,AACjB,0BAA4B,AAE5B,eAAe,CAmDf,AAzPH,kEAyMI,eAAc,AACd,yBAA4B,CAC5B,AA3MJ,kGA8MI,qBAAoB,AACpB,kBAAkB,AAElB,WAAW,AACX,UAAU,AAEV,sBAAuB,CAavB,AAjOJ,wGAuNK,kBAAkB,AAClB,WAAW,AACX,UAAU,AACV,QAAQ,AAER,WAAW,AACX,UAAU,AAEV,eA5vBa,CA6vBb,AAhOL,gGAoOI,qBAAoB,AACpB,kBAAkB,AAElB,WAAW,AACX,UAAU,AAEV,eAvwBc,CAoxBd,AAvPJ,sGA6OK,kBAAkB,AAClB,WAAW,AACX,UAAU,AACV,QAAQ,AAER,WAAW,AACX,UAAU,AAEV,eAlxBa,CAmxBb,AAtPL,qEA4PG,2BAAoB,AAApB,oBAAoB,AACpB,sBAAkB,AAAlB,mBAAkB,AAClB,qBAAsB,AAAtB,uBAAsB,AAEtB,sBAAsB,AACtB,wBAAwB,AACxB,yBAAyB,AACzB,oBAAoB,AAEpB,YAAW,AACX,WAAU,AAEV,mBAAkB,AAClB,gBAAe,AAEf,WA3yBqB,AA4yBrB,gBAAgB,AAChB,eAAe,CAmBf,AAhSH,2EAgRI,UAAU,CACV,AAjRJ,sHAqRK,eAAe,CACf,AAtRL,sOA8RI,YAAY,CACZ,AA/RJ,wDAmSG,qBAAqB,AACrB,YAAW,AACX,WAAU,AAEV,kBAAkB,CAClB,AAxSH,+BA6SE,sBAAqB,AACrB,6BAA4B,AAC5B,4BA70BkB,AA80BlB,0BAAyB,AACzB,YAAW,AACX,kBAAiB,AACjB,gBAAe,AACf,gBAAgB,AAEhB,cAAe,CA4Df,AAlXF,qCAyTG,eAAc,AACd,+BAA+B,CAC/B,AA3TH,wEAgUI,kBAAiB,AACjB,kCAAkC,AAClC,mCAAmC,AACnC,0BAv2BkB,AAw2BlB,eAAgB,CAChB,AArUJ,uDA0UG,iBAAiB,CACjB,AA3UH,uDA8UG,iBAAiB,CACjB,AA/UH,uDAkVG,iBAAiB,CACjB,AAnVH,uDAsVG,iBAAiB,CACjB,AAvVH,uDA0VG,kBAAkB,CAClB,AA3VH,uDA8VG,oBAAqB,CACrB,AA/VH,gDAmWG,qBAAqB,AACrB,QAAQ,AACR,SAAS,AACT,kBAAiB,AACjB,iCAAiC,AACjC,oCAAoC,AACpC,eAAe,AACf,2BA94BmB,AA+4BnB,qBAAqB,CACrB,AA5WH,oCA+WG,iBAAgB,AAChB,UAAU,CACV,AAKH,gBACC,kBAAkB,AAClB,qBAAoB,AACpB,sBAAqB,AAErB,gBA35BuB,AA45BvB,sBA15BmB,AA25BnB,oCAAuC,AAEvC,eA76Ba,AA+6Bb,gBAAe,AACf,iCAAiC,AAEjC,aAAc,CAqBd,AAnCD,qCAkBE,iBAAgB,AAEhB,yBAAiB,AAAjB,qBAAiB,AAAjB,gBAAiB,CAUjB,AA9BF,kEAuBG,UAAW,CACX,AAxBH,8EA2BG,eAAe,AACf,kBAj7B2B,CAk7B3B,AA7BH,0CAiCE,yBAr7BkB,CAs7BlB,AAGF,4BACC,kBAAkB,AAClB,qBAAoB,AACpB,sBAAqB,AAErB,iBAAgB,AAEhB,gBAl8BuB,AAm8BvB,sBAj8BmB,AAm8BnB,eAn9Ba,AAq9Bb,gBAAe,AACf,iCAAiC,AAEjC,aAAc,CA4Cd,AA3DD,6DAkBE,YAAW,AAEX,UA58BgB,CAi+BhB,AAzCF,oEAuBG,WAl9BqB,AAm9BrB,kBA18BkB,CA+8BlB,AA7BH,4EA2BI,oCAt9BoB,CAu9BpB,AA5BJ,qEAgCG,yBAl9BkB,CAm9BlB,AAjCH,mEAoCG,eAAc,AAEd,WAj+BqB,AAk+BrB,kBAz9BkB,CA09BlB,AAxCH,+DA4CE,YAAW,AAEX,WAt+BgB,AAu+BhB,iBAAkB,CAClB,AAhDF,8DAmDE,6BA5+BkB,AA8+BlB,YAAW,AACX,gBAAe,AAEf,WAh/BgB,AAi/BhB,eAAgB,CAChB,AAKF,4BACC,kBAAkB,AAClB,MAAK,AACL,SAAQ,AACR,OAAM,AACN,QAAO,AAEP,aAAc,CACd,AAED,uEACC,sBAAuB,CACvB,AAED,uBACC,wBAAyB,CAwKzB,AAzKD,mDAIE,qBAAoB,AACpB,sBAAqB,AAErB,WAAU,AACV,UAAS,AAET,gBAAe,AACf,iBAAgB,AAEhB,8BAA6B,AAE7B,2BArhCkB,AAshClB,4BAthCkB,CAuhClB,AAjBF,oDAqBE,sBAAqB,AACrB,6BAA4B,AAC5B,4BA7hCkB,AA8hClB,0BAAyB,AACzB,YAAW,AACX,kBAAiB,AACjB,gBAAe,AACf,gBAAgB,AAEhB,cAAe,CAsEf,AApGF,0DAiCG,eAAc,AACd,+BAA+B,CAC/B,AAnCH,6FAwCI,kBAAiB,AACjB,kCAAkC,AAClC,mCAAmC,AACnC,0BAvjCkB,AAwjClB,eAAgB,CAChB,AA7CJ,+EAmDI,2BAA4B,CAC5B,AApDJ,+EAyDI,2BAA4B,CAC5B,AA1DJ,+EA+DI,2BAA4B,CAC5B,AAhEJ,+EAqEI,2BAA4B,CAC5B,AAtEJ,+EA2EI,4BAA6B,CAC7B,AA5EJ,4EAgFG,oBAAqB,CACrB,AAjFH,qEAqFG,qBAAqB,AACrB,QAAQ,AACR,SAAS,AACT,kBAAiB,AACjB,iCAAiC,AACjC,oCAAoC,AACpC,eAAe,AACf,2BAxmCmB,AAymCnB,qBAAqB,CACrB,AA9FH,yDAiGG,iBAAgB,AAChB,UAAU,CACV,AAnGH,oDAwGE,2BAAmB,AAAnB,oBAAmB,AACnB,qBAAsB,AAAtB,uBAAsB,AACtB,sBAAkB,AAAlB,mBAAkB,AAClB,sBAAqB,AAErB,YAAW,AACX,WAAU,AAEV,iBAAgB,AAEhB,sBAvnCgB,AAwnChB,kBAAiB,AACjB,0BAA4B,AAE5B,eAAe,CAkDf,AAxKF,0DAyHG,eAAc,AACd,yBAA4B,CAC5B,AA3HH,0FA8HG,qBAAoB,AACpB,kBAAkB,AAElB,WAAW,AACX,UAAU,AAEV,sBAAuB,CAavB,AAjJH,gGAuII,kBAAkB,AAClB,WAAW,AACX,UAAU,AACV,QAAQ,AAER,WAAW,AACX,UAAU,AAEV,eAppCc,CAqpCd,AAhJJ,wFAoJG,qBAAoB,AACpB,kBAAkB,AAElB,WAAW,AACX,UAAU,AAEV,eA/pCe,CA4qCf,AAvKH,8FA6JI,kBAAkB,AAClB,WAAW,AACX,UAAU,AACV,QAAQ,AAER,WAAW,AACX,UAAU,AAEV,eA1qCc,CA2qCd","file":"tabulator.min.css","sourcesContent":["/* Tabulator v4.7.0 (c) Oliver Folkerd */\n\n\r\n//Main Theme Variables\r\n$backgroundColor: #888 !default; //background color of tabulator\r\n$borderColor:#999 !default; //border to tabulator\r\n$textSize:14px !default; //table text size\r\n\r\n//header themeing\r\n$headerBackgroundColor:#e6e6e6 !default; //border to tabulator\r\n$headerTextColor:#555 !default; //header text colour\r\n$headerBorderColor:#aaa !default;  //header border color\r\n$headerSeperatorColor:#999 !default; //header bottom seperator color\r\n$headerMargin:4px !default; //padding round header\r\n\r\n//column header arrows\r\n$sortArrowActive: #666 !default;\r\n$sortArrowInactive: #bbb !default;\r\n\r\n//row themeing\r\n$rowBackgroundColor:#fff !default; //table row background color\r\n$rowAltBackgroundColor:#EFEFEF !default; //table row background color\r\n$rowBorderColor:#aaa !default; //table border color\r\n$rowTextColor:#333 !default; //table text color\r\n$rowHoverBackground:#bbb !default; //row background color on hover\r\n\r\n$rowSelectedBackground: #9ABCEA !default; //row background color when selected\r\n$rowSelectedBackgroundHover: #769BCC !default;//row background color when selected and hovered\r\n\r\n$editBoxColor:#1D68CD !default; //border color for edit boxes\r\n$errorColor:#dd0000 !default; //error indication\r\n\r\n//footer themeing\r\n$footerBackgroundColor:#e6e6e6 !default; //border to tabulator\r\n$footerTextColor:#555 !default; //footer text colour\r\n$footerBorderColor:#aaa !default; //footer border color\r\n$footerSeperatorColor:#999 !default; //footer bottom seperator color\r\n$footerActiveColor:#d00 !default; //footer bottom active text color\r\n\r\n\r\n\r\n//Tabulator Containing Element\r\n.tabulator{\r\n\tposition: relative;\r\n\r\n\tborder: 1px solid $borderColor;\r\n\r\n\tbackground-color: $backgroundColor;\r\n\r\n\tfont-size:$textSize;\r\n\ttext-align: left;\r\n\toverflow:hidden;\r\n\r\n\t-webkit-transform: translatez(0);\r\n\t-moz-transform: translatez(0);\r\n\t-ms-transform: translatez(0);\r\n\t-o-transform: translatez(0);\r\n\ttransform: translatez(0);\r\n\r\n\t&[tabulator-layout=\"fitDataFill\"]{\r\n\t\t.tabulator-tableHolder{\r\n\t\t\t.tabulator-table{\r\n\t\t\t\tmin-width:100%;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t&[tabulator-layout=\"fitDataTable\"]{\r\n\t\tdisplay: inline-block;\r\n\t}\r\n\r\n\t&.tabulator-block-select{\r\n\t\tuser-select: none;\r\n\t}\r\n\r\n\t//column header containing element\r\n\t.tabulator-header{\r\n\t\tposition:relative;\r\n\t\tbox-sizing: border-box;\r\n\r\n\t\twidth:100%;\r\n\r\n\t\tborder-bottom:1px solid $headerSeperatorColor;\r\n\t\tbackground-color: $headerBackgroundColor;\r\n\t\tcolor: $headerTextColor;\r\n\t\tfont-weight:bold;\r\n\r\n\t\twhite-space: nowrap;\r\n\t\toverflow:hidden;\r\n\r\n\t\t-moz-user-select: none;\r\n\t\t-khtml-user-select: none;\r\n\t\t-webkit-user-select: none;\r\n\t\t-o-user-select: none;\r\n\r\n\t\t&.tabulator-header-hidden{\r\n\t\t\tdisplay:none;\r\n\t\t}\r\n\r\n\t\t//individual column header element\r\n\t\t.tabulator-col{\r\n\t\t\tdisplay:inline-block;\r\n\t\t\tposition:relative;\r\n\t\t\tbox-sizing:border-box;\r\n\t\t\tborder-right:1px solid $headerBorderColor;\r\n\t\t\tbackground:$headerBackgroundColor;\r\n\t\t\ttext-align:left;\r\n\t\t\tvertical-align: bottom;\r\n\t\t\toverflow: hidden;\r\n\r\n\t\t\t&.tabulator-moving{\r\n\t\t\t\tposition: absolute;\r\n\t\t\t\tborder:1px solid  $headerSeperatorColor;\r\n\t\t\t\tbackground:darken($headerBackgroundColor, 10%);\r\n\t\t\t\tpointer-events: none;\r\n\t\t\t}\r\n\r\n\t\t\t//hold content of column header\r\n\t\t\t.tabulator-col-content{\r\n\t\t\t\tbox-sizing:border-box;\r\n\t\t\t\tposition: relative;\r\n\t\t\t\tpadding:4px;\r\n\r\n\t\t\t\t//header menu button\r\n\t\t\t\t.tabulator-header-menu-button{\r\n\t\t\t\t\tpadding: 0 8px;\r\n\r\n\t\t\t\t\t&:hover{\r\n\t\t\t\t\t\tcursor: pointer;\r\n\t\t\t\t\t\topacity: .6;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t//hold title of column header\r\n\t\t\t\t.tabulator-col-title{\r\n\t\t\t\t\tbox-sizing:border-box;\r\n\t\t\t\t\twidth: 100%;\r\n\r\n\t\t\t\t\twhite-space: nowrap;\r\n\t\t\t\t\toverflow: hidden;\r\n\t\t\t\t\ttext-overflow: ellipsis;\r\n\t\t\t\t\tvertical-align:bottom;\r\n\r\n\t\t\t\t\t//element to hold title editor\r\n\t\t\t\t\t.tabulator-title-editor{\r\n\t\t\t\t\t\tbox-sizing: border-box;\r\n\t\t\t\t\t\twidth: 100%;\r\n\r\n\t\t\t\t\t\tborder:1px solid #999;\r\n\r\n\t\t\t\t\t\tpadding:1px;\r\n\r\n\t\t\t\t\t\tbackground: #fff;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t//column sorter arrow\r\n\t\t\t\t.tabulator-arrow{\r\n\t\t\t\t\tdisplay: inline-block;\r\n\t\t\t\t\tposition: absolute;\r\n\t\t\t\t\ttop:9px;\r\n\t\t\t\t\tright:8px;\r\n\t\t\t\t\twidth: 0;\r\n\t\t\t\t\theight: 0;\r\n\t\t\t\t\tborder-left: 6px solid transparent;\r\n\t\t\t\t\tborder-right: 6px solid transparent;\r\n\t\t\t\t\tborder-bottom: 6px solid $sortArrowInactive;\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t\t//complex header column group\r\n\t\t\t&.tabulator-col-group{\r\n\r\n\t\t\t\t//gelement to hold sub columns in column group\r\n\t\t\t\t.tabulator-col-group-cols{\r\n\t\t\t\t\tposition:relative;\r\n\t\t\t\t\tdisplay: flex;\r\n\r\n\t\t\t\t\tborder-top:1px solid $headerBorderColor;\r\n\t\t\t\t\toverflow: hidden;\r\n\r\n\t\t\t\t\tmargin-right:-1px;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t//hide left resize handle on first column\r\n\t\t\t&:first-child{\r\n\t\t\t\t.tabulator-col-resize-handle.prev{\r\n\t\t\t\t\tdisplay: none;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t//header filter containing element\r\n\t\t\t.tabulator-header-filter{\r\n\t\t\t\tposition: relative;\r\n\t\t\t\tbox-sizing: border-box;\r\n\t\t\t\tmargin-top:2px;\r\n\t\t\t\twidth:100%;\r\n\t\t\t\ttext-align: center;\r\n\r\n\t\t\t\t//styling adjustment for inbuilt editors\r\n\t\t\t\ttextarea{\r\n\t\t\t\t\theight:auto !important;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tsvg{\r\n\t\t\t\t\tmargin-top: 3px;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tinput{\r\n\t\t\t\t\t&::-ms-clear {\r\n\t\t\t\t\t\twidth : 0;\r\n\t\t\t\t\t\theight: 0;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t//styling child elements for sortable columns\r\n\t\t\t&.tabulator-sortable{\r\n\t\t\t\t.tabulator-col-title{\r\n\t\t\t\t\tpadding-right:25px;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t&:hover{\r\n\t\t\t\t\tcursor:pointer;\r\n\t\t\t\t\tbackground-color:darken($headerBackgroundColor, 10%);\r\n\t\t\t\t}\r\n\r\n\t\t\t\t&[aria-sort=\"none\"]{\r\n\t\t\t\t\t.tabulator-col-content .tabulator-arrow{\r\n\t\t\t\t\t\tborder-top: none;\r\n\t\t\t\t\t\tborder-bottom: 6px solid $sortArrowInactive;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t&[aria-sort=\"asc\"]{\r\n\t\t\t\t\t.tabulator-col-content .tabulator-arrow{\r\n\t\t\t\t\t\tborder-top: none;\r\n\t\t\t\t\t\tborder-bottom: 6px solid $sortArrowActive;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t&[aria-sort=\"desc\"]{\r\n\t\t\t\t\t.tabulator-col-content .tabulator-arrow{\r\n\t\t\t\t\t\tborder-top: 6px solid $sortArrowActive;\r\n\t\t\t\t\t\tborder-bottom: none;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\r\n\t\t\t&.tabulator-col-vertical{\r\n\t\t\t\t.tabulator-col-content{\r\n\t\t\t\t\t.tabulator-col-title{\r\n\t\t\t\t\t\twriting-mode: vertical-rl;\r\n\t\t\t\t\t\ttext-orientation: mixed;\r\n\r\n\t\t\t\t\t\tdisplay:flex;\r\n\t\t\t\t\t\talign-items:center;\r\n\t\t\t\t\t\tjustify-content:center;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t&.tabulator-col-vertical-flip{\r\n\t\t\t\t\t.tabulator-col-title{\r\n\t\t\t\t\t\ttransform: rotate(180deg);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t&.tabulator-sortable{\r\n\t\t\t\t\t.tabulator-col-title{\r\n\t\t\t\t\t\tpadding-right:0;\r\n\t\t\t\t\t\tpadding-top:20px;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t&.tabulator-col-vertical-flip{\r\n\t\t\t\t\t\t.tabulator-col-title{\r\n\t\t\t\t\t\t\tpadding-right:0;\r\n\t\t\t\t\t\t\tpadding-bottom:20px;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t.tabulator-arrow{\r\n\t\t\t\t\t\tright:calc(50% - 6px);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t.tabulator-frozen{\r\n\t\t\tdisplay: inline-block;\r\n\t\t\tposition: absolute;\r\n\r\n\t\t\t// background-color: inherit;\r\n\r\n\t\t\tz-index: 10;\r\n\r\n\t\t\t&.tabulator-frozen-left{\r\n\t\t\t\tborder-right:2px solid $rowBorderColor;\r\n\t\t\t}\r\n\r\n\t\t\t&.tabulator-frozen-right{\r\n\t\t\t\tborder-left:2px solid $rowBorderColor;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\r\n\t\t.tabulator-calcs-holder{\r\n\t\t\tbox-sizing:border-box;\r\n\t\t\tmin-width:600%;\r\n\r\n\t\t\tbackground:lighten($headerBackgroundColor, 5%) !important;\r\n\r\n\t\t\t.tabulator-row{\r\n\t\t\t\tbackground:lighten($headerBackgroundColor, 5%) !important;\r\n\r\n\t\t\t\t.tabulator-col-resize-handle{\r\n\t\t\t\t\tdisplay: none;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tborder-top:1px solid $rowBorderColor;\r\n\t\t\tborder-bottom:1px solid $headerBorderColor;\r\n\r\n\t\t\toverflow: hidden;\r\n\t\t}\r\n\r\n\t\t.tabulator-frozen-rows-holder{\r\n\t\t\tmin-width:600%;\r\n\r\n\t\t\t&:empty{\r\n\t\t\t\tdisplay: none;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//scrolling element to hold table\r\n\t.tabulator-tableHolder{\r\n\t\tposition:relative;\r\n\t\twidth:100%;\r\n\t\twhite-space: nowrap;\r\n\t\toverflow:auto;\r\n\t\t-webkit-overflow-scrolling: touch;\r\n\r\n\t\t&:focus{\r\n\t\t\toutline: none;\r\n\t\t}\r\n\r\n\t\t//default placeholder element\r\n\t\t.tabulator-placeholder{\r\n\t\t\tbox-sizing:border-box;\r\n\t\t\tdisplay: flex;\r\n\t\t\talign-items:center;\r\n\r\n\t\t\t&[tabulator-render-mode=\"virtual\"]{\r\n\t\t\t\tmin-height:100%;\r\n\t\t\t\tmin-width:100%;\r\n\t\t\t}\r\n\r\n\t\t\twidth:100%;\r\n\r\n\t\t\tspan{\r\n\t\t\t\tdisplay: inline-block;\r\n\r\n\t\t\t\tmargin:0 auto;\r\n\t\t\t\tpadding:10px;\r\n\r\n\t\t\t\tcolor:#ccc;\r\n\t\t\t\tfont-weight: bold;\r\n\t\t\t\tfont-size: 20px;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t//element to hold table rows\r\n\t\t.tabulator-table{\r\n\t\t\tposition:relative;\r\n\t\t\tdisplay:inline-block;\r\n\t\t\tbackground-color:$rowBackgroundColor;\r\n\t\t\twhite-space: nowrap;\r\n\t\t\toverflow:visible;\r\n\t\t\tcolor:$rowTextColor;\r\n\r\n\t\t\t//row element\r\n\t\t\t.tabulator-row{\r\n\t\t\t\t&.tabulator-calcs{\r\n\t\t\t\t\tfont-weight: bold;\r\n\t\t\t\t\tbackground:darken($rowAltBackgroundColor, 5%) !important;\r\n\r\n\t\t\t\t\t&.tabulator-calcs-top{\r\n\t\t\t\t\t\tborder-bottom:2px solid $rowBorderColor;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t&.tabulator-calcs-bottom{\r\n\t\t\t\t\t\tborder-top:2px solid $rowBorderColor;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t}\r\n\t}\r\n\r\n\r\n\r\n\t//footer element\r\n\t.tabulator-footer{\r\n\t\tpadding:5px 10px;\r\n\t\tborder-top:1px solid $footerSeperatorColor;\r\n\t\tbackground-color: $footerBackgroundColor;\r\n\t\ttext-align: right;\r\n\t\tcolor: $footerTextColor;\r\n\t\tfont-weight:bold;\r\n\t\twhite-space:nowrap;\r\n\t\tuser-select:none;\r\n\r\n\t\t-moz-user-select: none;\r\n\t\t-khtml-user-select: none;\r\n\t\t-webkit-user-select: none;\r\n\t\t-o-user-select: none;\r\n\r\n\t\t.tabulator-calcs-holder{\r\n\t\t\tbox-sizing:border-box;\r\n\t\t\twidth:calc(100% + 20px);\r\n\t\t\tmargin:-5px -10px 5px -10px;\r\n\r\n\t\t\ttext-align: left;\r\n\r\n\t\t\tbackground:lighten($footerBackgroundColor, 5%) !important;\r\n\r\n\t\t\t.tabulator-row{\r\n\t\t\t\tbackground:lighten($footerBackgroundColor, 5%) !important;\r\n\r\n\t\t\t\t.tabulator-col-resize-handle{\r\n\t\t\t\t\tdisplay: none;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tborder-bottom:1px solid $rowBorderColor;\r\n\t\t\tborder-top:1px solid $rowBorderColor;\r\n\r\n\t\t\toverflow: hidden;\r\n\r\n\t\t\t&:only-child{\r\n\t\t\t\tmargin-bottom:-5px;\r\n\t\t\t\tborder-bottom:none;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t.tabulator-paginator{\r\n\t\t\tcolor: $footerTextColor;\r\n\t\t\tfont-family:inherit;\r\n\t\t\tfont-weight:inherit;\r\n\t\t\tfont-size:inherit;\r\n\t\t}\r\n\r\n\t\t//pagination container element\r\n\t\t.tabulator-page-size{\r\n\t\t\tdisplay:inline-block;\r\n\r\n\t\t\tmargin:0 5px;\r\n\t\t\tpadding:2px 5px;\r\n\r\n\t\t\tborder:1px solid $footerBorderColor;\r\n\t\t\tborder-radius:3px;\r\n\t\t}\r\n\r\n\t\t.tabulator-pages{\r\n\t\t\tmargin:0 7px;\r\n\t\t}\r\n\r\n\t\t//pagination button\r\n\t\t.tabulator-page{\r\n\t\t\tdisplay:inline-block;\r\n\r\n\t\t\tmargin:0 2px;\r\n\t\t\tpadding:2px 5px;\r\n\r\n\t\t\tborder:1px solid $footerBorderColor;\r\n\t\t\tborder-radius:3px;\r\n\r\n\t\t\tbackground:rgba(255,255,255,.2);\r\n\r\n\t\t\t&.active{\r\n\t\t\t\tcolor:$footerActiveColor;\r\n\t\t\t}\r\n\r\n\t\t\t&:disabled{\r\n\t\t\t\topacity:.5;\r\n\t\t\t}\r\n\r\n\t\t\t&:not(.disabled){\r\n\t\t\t\t&:hover{\r\n\t\t\t\t\tcursor:pointer;\r\n\t\t\t\t\tbackground:rgba(0,0,0,.2);\r\n\t\t\t\t\tcolor:#fff;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//column resize handles\r\n\t.tabulator-col-resize-handle{\r\n\t\tposition:absolute;\r\n\t\tright:0;\r\n\t\ttop:0;\r\n\t\tbottom:0;\r\n\t\twidth:5px;\r\n\r\n\t\t&.prev{\r\n\t\t\tleft:0;\r\n\t\t\tright:auto;\r\n\t\t}\r\n\r\n\t\t&:hover{\r\n\t\t\tcursor:ew-resize;\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t//holding div that contains loader and covers tabulator element to prevent interaction\r\n\t.tabulator-loader{\r\n\t\tposition:absolute;\r\n\t\tdisplay: flex;\r\n\t\talign-items:center;\r\n\r\n\t\ttop:0;\r\n\t\tleft:0;\r\n\t\tz-index:100;\r\n\r\n\t\theight:100%;\r\n\t\twidth:100%;\r\n\t\tbackground:rgba(0,0,0,.4);\r\n\t\ttext-align:center;\r\n\r\n\t\t//loading message element\r\n\t\t.tabulator-loader-msg{\r\n\t\t\tdisplay:inline-block;\r\n\r\n\t\t\tmargin:0 auto;\r\n\t\t\tpadding:10px 20px;\r\n\r\n\t\t\tborder-radius:10px;\r\n\r\n\t\t\tbackground:#fff;\r\n\t\t\tfont-weight:bold;\r\n\t\t\tfont-size:16px;\r\n\r\n\t\t\t//loading message\r\n\t\t\t&.tabulator-loading{\r\n\t\t\t\tborder:4px solid #333;\r\n\t\t\t\tcolor:#000;\r\n\t\t\t}\r\n\r\n\t\t\t//error message\r\n\t\t\t&.tabulator-error{\r\n\t\t\t\tborder:4px solid #D00;\r\n\t\t\t\tcolor:#590000;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n\r\n//row element\r\n.tabulator-row{\r\n\tposition: relative;\r\n\tbox-sizing: border-box;\r\n\tmin-height:$textSize + ($headerMargin * 2);\r\n\tbackground-color: $rowBackgroundColor;\r\n\r\n\r\n\t&.tabulator-row-even{\r\n\t\tbackground-color: $rowAltBackgroundColor;\r\n\t}\r\n\r\n\t&.tabulator-selectable:hover{\r\n\t\tbackground-color:$rowHoverBackground;\r\n\t\tcursor: pointer;\r\n\t}\r\n\r\n\t&.tabulator-selected{\r\n\t\tbackground-color:$rowSelectedBackground;\r\n\t}\r\n\r\n\t&.tabulator-selected:hover{\r\n\t\tbackground-color:$rowSelectedBackgroundHover;\r\n\t\tcursor: pointer;\r\n\t}\r\n\r\n\t&.tabulator-row-moving{\r\n\t\tborder:1px solid #000;\r\n\t\tbackground:#fff;\r\n\t}\r\n\r\n\t&.tabulator-moving{\r\n\t\tposition: absolute;\r\n\r\n\t\tborder-top:1px solid  $rowBorderColor;\r\n\t\tborder-bottom:1px solid  $rowBorderColor;\r\n\r\n\t\tpointer-events: none;\r\n\t\tz-index:15;\r\n\t}\r\n\r\n\t//row resize handles\r\n\t.tabulator-row-resize-handle{\r\n\t\tposition:absolute;\r\n\t\tright:0;\r\n\t\tbottom:0;\r\n\t\tleft:0;\r\n\t\theight:5px;\r\n\r\n\t\t&.prev{\r\n\t\t\ttop:0;\r\n\t\t\tbottom:auto;\r\n\t\t}\r\n\r\n\t\t&:hover{\r\n\t\t\tcursor:ns-resize;\r\n\t\t}\r\n\t}\r\n\r\n\t.tabulator-frozen{\r\n\t\tdisplay: inline-block;\r\n\t\tposition: absolute;\r\n\r\n\t\tbackground-color: inherit;\r\n\r\n\t\tz-index: 10;\r\n\r\n\t\t&.tabulator-frozen-left{\r\n\t\t\tborder-right:2px solid $rowBorderColor;\r\n\t\t}\r\n\r\n\t\t&.tabulator-frozen-right{\r\n\t\t\tborder-left:2px solid $rowBorderColor;\r\n\t\t}\r\n\t}\r\n\r\n\t.tabulator-responsive-collapse{\r\n\t\tbox-sizing:border-box;\r\n\r\n\t\tpadding:5px;\r\n\r\n\t\tborder-top:1px solid $rowBorderColor;\r\n\t\tborder-bottom:1px solid $rowBorderColor;\r\n\r\n\t\t&:empty{\r\n\t\t\tdisplay:none;\r\n\t\t}\r\n\r\n\t\ttable{\r\n\t\t\tfont-size:$textSize;\r\n\r\n\t\t\ttr{\r\n\t\t\t\ttd{\r\n\t\t\t\t\tposition: relative;\r\n\r\n\t\t\t\t\t&:first-of-type{\r\n\t\t\t\t\t\tpadding-right:10px;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//cell element\r\n\t.tabulator-cell{\r\n\t\tdisplay:inline-block;\r\n\t\tposition: relative;\r\n\t\tbox-sizing:border-box;\r\n\t\tpadding:4px;\r\n\t\tborder-right:1px solid $rowBorderColor;\r\n\t\tvertical-align:middle;\r\n\t\twhite-space:nowrap;\r\n\t\toverflow:hidden;\r\n\t\ttext-overflow:ellipsis;\r\n\r\n\t\t&.tabulator-editing{\r\n\t\t\tborder:1px solid  $editBoxColor;\r\n\t\t\tpadding: 0;\r\n\r\n\t\t\tinput, select{\r\n\t\t\t\tborder:1px;\r\n\t\t\t\tbackground:transparent;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t&.tabulator-validation-fail{\r\n\t\t\tborder:1px solid $errorColor;\r\n\t\t\tinput, select{\r\n\t\t\t\tborder:1px;\r\n\t\t\t\tbackground:transparent;\r\n\r\n\t\t\t\tcolor: $errorColor;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t//hide left resize handle on first column\r\n\t\t&:first-child{\r\n\t\t\t.tabulator-col-resize-handle.prev{\r\n\t\t\t\tdisplay: none;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t//movable row handle\r\n\t\t&.tabulator-row-handle{\r\n\t\t\tdisplay: inline-flex;\r\n\t\t\talign-items:center;\r\n\t\t\tjustify-content:center;\r\n\r\n\t\t\t-moz-user-select: none;\r\n\t\t\t-khtml-user-select: none;\r\n\t\t\t-webkit-user-select: none;\r\n\t\t\t-o-user-select: none;\r\n\r\n\t\t\t//handle holder\r\n\t\t\t.tabulator-row-handle-box{\r\n\t\t\t\twidth:80%;\r\n\r\n\t\t\t\t//Hamburger element\r\n\t\t\t\t.tabulator-row-handle-bar{\r\n\t\t\t\t\twidth:100%;\r\n\t\t\t\t\theight:3px;\r\n\t\t\t\t\tmargin-top:2px;\r\n\t\t\t\t\tbackground:#666;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t.tabulator-data-tree-branch{\r\n\t\t\tdisplay:inline-block;\r\n\t\t\tvertical-align:middle;\r\n\r\n\t\t\theight:9px;\r\n\t\t\twidth:7px;\r\n\r\n\t\t\tmargin-top:-9px;\r\n\t\t\tmargin-right:5px;\r\n\r\n\t\t\tborder-bottom-left-radius:1px;\r\n\r\n\t\t\tborder-left:2px solid $rowBorderColor;\r\n\t\t\tborder-bottom:2px solid $rowBorderColor;\r\n\t\t}\r\n\r\n\t\t.tabulator-data-tree-control{\r\n\r\n\t\t\tdisplay:inline-flex;\r\n\t\t\tjustify-content:center;\r\n\t\t\talign-items:center;\r\n\t\t\tvertical-align:middle;\r\n\r\n\t\t\theight:11px;\r\n\t\t\twidth:11px;\r\n\r\n\t\t\tmargin-right:5px;\r\n\r\n\t\t\tborder:1px solid $rowTextColor;\r\n\t\t\tborder-radius:2px;\r\n\t\t\tbackground:rgba(0, 0, 0, .1);\r\n\r\n\t\t\toverflow:hidden;\r\n\r\n\t\t\t&:hover{\r\n\t\t\t\tcursor:pointer;\r\n\t\t\t\tbackground:rgba(0, 0, 0, .2);\r\n\t\t\t}\r\n\r\n\t\t\t.tabulator-data-tree-control-collapse{\r\n\t\t\t\tdisplay:inline-block;\r\n\t\t\t\tposition: relative;\r\n\r\n\t\t\t\theight: 7px;\r\n\t\t\t\twidth: 1px;\r\n\r\n\t\t\t\tbackground: transparent;\r\n\r\n\t\t\t\t&:after {\r\n\t\t\t\t\tposition: absolute;\r\n\t\t\t\t\tcontent: \"\";\r\n\t\t\t\t\tleft: -3px;\r\n\t\t\t\t\ttop: 3px;\r\n\r\n\t\t\t\t\theight: 1px;\r\n\t\t\t\t\twidth: 7px;\r\n\r\n\t\t\t\t\tbackground: $rowTextColor;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t.tabulator-data-tree-control-expand{\r\n\t\t\t\tdisplay:inline-block;\r\n\t\t\t\tposition: relative;\r\n\r\n\t\t\t\theight: 7px;\r\n\t\t\t\twidth: 1px;\r\n\r\n\t\t\t\tbackground: $rowTextColor;\r\n\r\n\t\t\t\t&:after {\r\n\t\t\t\t\tposition: absolute;\r\n\t\t\t\t\tcontent: \"\";\r\n\t\t\t\t\tleft: -3px;\r\n\t\t\t\t\ttop: 3px;\r\n\r\n\t\t\t\t\theight: 1px;\r\n\t\t\t\t\twidth: 7px;\r\n\r\n\t\t\t\t\tbackground: $rowTextColor;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\t.tabulator-responsive-collapse-toggle{\r\n\t\t\tdisplay: inline-flex;\r\n\t\t\talign-items:center;\r\n\t\t\tjustify-content:center;\r\n\r\n\t\t\t-moz-user-select: none;\r\n\t\t\t-khtml-user-select: none;\r\n\t\t\t-webkit-user-select: none;\r\n\t\t\t-o-user-select: none;\r\n\r\n\t\t\theight:15px;\r\n\t\t\twidth:15px;\r\n\r\n\t\t\tborder-radius:20px;\r\n\t\t\tbackground:#666;\r\n\r\n\t\t\tcolor:$rowBackgroundColor;\r\n\t\t\tfont-weight:bold;\r\n\t\t\tfont-size:1.1em;\r\n\r\n\t\t\t&:hover{\r\n\t\t\t\topacity:.7;\r\n\t\t\t}\r\n\r\n\t\t\t&.open{\r\n\t\t\t\t.tabulator-responsive-collapse-toggle-close{\r\n\t\t\t\t\tdisplay:initial;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t.tabulator-responsive-collapse-toggle-open{\r\n\t\t\t\t\tdisplay:none;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t.tabulator-responsive-collapse-toggle-close{\r\n\t\t\t\tdisplay:none;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t.tabulator-traffic-light{\r\n\t\t\tdisplay: inline-block;\r\n\t\t\theight:14px;\r\n\t\t\twidth:14px;\r\n\r\n\t\t\tborder-radius:14px;\r\n\t\t}\r\n\t}\r\n\r\n\t//row grouping element\r\n\t&.tabulator-group{\r\n\t\tbox-sizing:border-box;\r\n\t\tborder-bottom:1px solid #999;\r\n\t\tborder-right:1px solid $rowBorderColor;\r\n\t\tborder-top:1px solid #999;\r\n\t\tpadding:5px;\r\n\t\tpadding-left:10px;\r\n\t\tbackground:#ccc;\r\n\t\tfont-weight:bold;\r\n\r\n\t\tmin-width: 100%;\r\n\r\n\t\t&:hover{\r\n\t\t\tcursor:pointer;\r\n\t\t\tbackground-color:rgba(0,0,0,.1);\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-visible{\r\n\r\n\t\t\t.tabulator-arrow{\r\n\t\t\t\tmargin-right:10px;\r\n\t\t\t\tborder-left: 6px solid transparent;\r\n\t\t\t\tborder-right: 6px solid transparent;\r\n\t\t\t\tborder-top: 6px solid $sortArrowActive;\r\n\t\t\t\tborder-bottom: 0;\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-1{\r\n\t\t\tpadding-left:30px;\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-2{\r\n\t\t\tpadding-left:50px;\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-3{\r\n\t\t\tpadding-left:70px;\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-4{\r\n\t\t\tpadding-left:90px;\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-5{\r\n\t\t\tpadding-left:110px;\r\n\t\t}\r\n\r\n\t\t.tabulator-group-toggle{\r\n\t\t\tdisplay: inline-block;\r\n\t\t}\r\n\r\n\t\t//sorting arrow\r\n\t\t.tabulator-arrow{\r\n\t\t\tdisplay: inline-block;\r\n\t\t\twidth: 0;\r\n\t\t\theight: 0;\r\n\t\t\tmargin-right:16px;\r\n\t\t\tborder-top: 6px solid transparent;\r\n\t\t\tborder-bottom: 6px solid transparent;\r\n\t\t\tborder-right: 0;\r\n\t\t\tborder-left: 6px solid $sortArrowActive;\r\n\t\t\tvertical-align:middle;\r\n\t\t}\r\n\r\n\t\tspan{\r\n\t\t\tmargin-left:10px;\r\n\t\t\tcolor:#d00;\r\n\t\t}\r\n\t}\r\n\r\n}\r\n\r\n.tabulator-menu{\r\n\tposition: absolute;\r\n\tdisplay:inline-block;\r\n\tbox-sizing:border-box;\r\n\r\n\tbackground:$rowBackgroundColor;\r\n\tborder:1px solid $rowBorderColor;\r\n\tbox-shadow: 0 0 5px 0 rgba(0, 0, 0, .2);\r\n\r\n\tfont-size:$textSize;\r\n\r\n\toverflow-y:auto;\r\n\t-webkit-overflow-scrolling: touch;\r\n\r\n\tz-index: 10000;\r\n\r\n\t.tabulator-menu-item{\r\n\r\n\t\tpadding:5px 10px;\r\n\r\n\t\tuser-select: none;\r\n\r\n\t\t&.tabulator-menu-item-disabled{\r\n\t\t\topacity: .5;\r\n\t\t}\r\n\r\n\t\t&:not(.tabulator-menu-item-disabled):hover{\r\n\t\t\tcursor: pointer;\r\n\t\t\tbackground: $rowAltBackgroundColor;\r\n\t\t}\r\n\t}\r\n\r\n\t.tabulator-menu-separator{\r\n\t\tborder-top:1px solid $rowBorderColor;\r\n\t}\r\n}\r\n\r\n.tabulator-edit-select-list{\r\n\tposition: absolute;\r\n\tdisplay:inline-block;\r\n\tbox-sizing:border-box;\r\n\r\n\tmax-height:200px;\r\n\r\n\tbackground:$rowBackgroundColor;\r\n\tborder:1px solid $rowBorderColor;\r\n\r\n\tfont-size:$textSize;\r\n\r\n\toverflow-y:auto;\r\n\t-webkit-overflow-scrolling: touch;\r\n\r\n\tz-index: 10000;\r\n\r\n\t.tabulator-edit-select-list-item{\r\n\t\tpadding:4px;\r\n\r\n\t\tcolor:$rowTextColor;\r\n\r\n\t\t&.active{\r\n\t\t\tcolor:$rowBackgroundColor;\r\n\t\t\tbackground:$editBoxColor;\r\n\r\n\t\t\t&.focused{\r\n\t\t\t\toutline:1px solid rgba($rowBackgroundColor, .5);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t&.focused{\r\n\t\t\toutline:1px solid $editBoxColor;\r\n\t\t}\r\n\r\n\t\t&:hover{\r\n\t\t\tcursor:pointer;\r\n\r\n\t\t\tcolor:$rowBackgroundColor;\r\n\t\t\tbackground:$editBoxColor;\r\n\t\t}\r\n\t}\r\n\r\n\t.tabulator-edit-select-list-notice{\r\n\t\tpadding:4px;\r\n\r\n\t\tcolor:$rowTextColor;\r\n\t\ttext-align: center;\r\n\t}\r\n\r\n\t.tabulator-edit-select-list-group{\r\n\t\tborder-bottom:1px solid $rowBorderColor;\r\n\r\n\t\tpadding:4px;\r\n\t\tpadding-top:6px;\r\n\r\n\t\tcolor:$rowTextColor;\r\n\t\tfont-weight:bold;\r\n\t}\r\n}\r\n\r\n// Table print styling\r\n\r\n.tabulator-print-fullscreen{\r\n\tposition: absolute;\r\n\ttop:0;\r\n\tbottom:0;\r\n\tleft:0;\r\n\tright:0;\r\n\r\n\tz-index: 10000;\r\n}\r\n\r\nbody.tabulator-print-fullscreen-hide>*:not(.tabulator-print-fullscreen){\r\n\tdisplay:none !important;\r\n}\r\n\r\n.tabulator-print-table{\r\n\tborder-collapse: collapse;\r\n\r\n\t.tabulator-data-tree-branch{\r\n\t\tdisplay:inline-block;\r\n\t\tvertical-align:middle;\r\n\r\n\t\theight:9px;\r\n\t\twidth:7px;\r\n\r\n\t\tmargin-top:-9px;\r\n\t\tmargin-right:5px;\r\n\r\n\t\tborder-bottom-left-radius:1px;\r\n\r\n\t\tborder-left:2px solid $rowBorderColor;\r\n\t\tborder-bottom:2px solid $rowBorderColor;\r\n\t}\r\n\r\n\t//row grouping element\r\n\t.tabulator-print-table-group{\r\n\t\tbox-sizing:border-box;\r\n\t\tborder-bottom:1px solid #999;\r\n\t\tborder-right:1px solid $rowBorderColor;\r\n\t\tborder-top:1px solid #999;\r\n\t\tpadding:5px;\r\n\t\tpadding-left:10px;\r\n\t\tbackground:#ccc;\r\n\t\tfont-weight:bold;\r\n\r\n\t\tmin-width: 100%;\r\n\r\n\t\t&:hover{\r\n\t\t\tcursor:pointer;\r\n\t\t\tbackground-color:rgba(0,0,0,.1);\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-visible{\r\n\r\n\t\t\t.tabulator-arrow{\r\n\t\t\t\tmargin-right:10px;\r\n\t\t\t\tborder-left: 6px solid transparent;\r\n\t\t\t\tborder-right: 6px solid transparent;\r\n\t\t\t\tborder-top: 6px solid $sortArrowActive;\r\n\t\t\t\tborder-bottom: 0;\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-1{\r\n\t\t\ttd{\r\n\t\t\t\tpadding-left:30px !important;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-2{\r\n\t\t\ttd{\r\n\t\t\t\tpadding-left:50px !important;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-3{\r\n\t\t\ttd{\r\n\t\t\t\tpadding-left:70px !important;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-4{\r\n\t\t\ttd{\r\n\t\t\t\tpadding-left:90px !important;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-5{\r\n\t\t\ttd{\r\n\t\t\t\tpadding-left:110px !important;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t.tabulator-group-toggle{\r\n\t\t\tdisplay: inline-block;\r\n\t\t}\r\n\r\n\t\t//sorting arrow\r\n\t\t.tabulator-arrow{\r\n\t\t\tdisplay: inline-block;\r\n\t\t\twidth: 0;\r\n\t\t\theight: 0;\r\n\t\t\tmargin-right:16px;\r\n\t\t\tborder-top: 6px solid transparent;\r\n\t\t\tborder-bottom: 6px solid transparent;\r\n\t\t\tborder-right: 0;\r\n\t\t\tborder-left: 6px solid $sortArrowActive;\r\n\t\t\tvertical-align:middle;\r\n\t\t}\r\n\r\n\t\tspan{\r\n\t\t\tmargin-left:10px;\r\n\t\t\tcolor:#d00;\r\n\t\t}\r\n\t}\r\n\r\n\t.tabulator-data-tree-control{\r\n\r\n\t\tdisplay:inline-flex;\r\n\t\tjustify-content:center;\r\n\t\talign-items:center;\r\n\t\tvertical-align:middle;\r\n\r\n\t\theight:11px;\r\n\t\twidth:11px;\r\n\r\n\t\tmargin-right:5px;\r\n\r\n\t\tborder:1px solid $rowTextColor;\r\n\t\tborder-radius:2px;\r\n\t\tbackground:rgba(0, 0, 0, .1);\r\n\r\n\t\toverflow:hidden;\r\n\r\n\t\t&:hover{\r\n\t\t\tcursor:pointer;\r\n\t\t\tbackground:rgba(0, 0, 0, .2);\r\n\t\t}\r\n\r\n\t\t.tabulator-data-tree-control-collapse{\r\n\t\t\tdisplay:inline-block;\r\n\t\t\tposition: relative;\r\n\r\n\t\t\theight: 7px;\r\n\t\t\twidth: 1px;\r\n\r\n\t\t\tbackground: transparent;\r\n\r\n\t\t\t&:after {\r\n\t\t\t\tposition: absolute;\r\n\t\t\t\tcontent: \"\";\r\n\t\t\t\tleft: -3px;\r\n\t\t\t\ttop: 3px;\r\n\r\n\t\t\t\theight: 1px;\r\n\t\t\t\twidth: 7px;\r\n\r\n\t\t\t\tbackground: $rowTextColor;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t.tabulator-data-tree-control-expand{\r\n\t\t\tdisplay:inline-block;\r\n\t\t\tposition: relative;\r\n\r\n\t\t\theight: 7px;\r\n\t\t\twidth: 1px;\r\n\r\n\t\t\tbackground: $rowTextColor;\r\n\r\n\t\t\t&:after {\r\n\t\t\t\tposition: absolute;\r\n\t\t\t\tcontent: \"\";\r\n\t\t\t\tleft: -3px;\r\n\t\t\t\ttop: 3px;\r\n\r\n\t\t\t\theight: 1px;\r\n\t\t\t\twidth: 7px;\r\n\r\n\t\t\t\tbackground: $rowTextColor;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n\r\n"]}
\ No newline at end of file
diff --git a/admin/js/vendors/tabulator/css/tabulator_site.css b/admin/js/vendors/tabulator/css/tabulator_site.css
new file mode 100644 (file)
index 0000000..7139757
--- /dev/null
@@ -0,0 +1,993 @@
+/* Tabulator v4.7.0 (c) Oliver Folkerd */
+.tabulator {
+  position: relative;
+  border-bottom: 5px solid #293146;
+  background-color: #fff;
+  font-size: 14px;
+  text-align: left;
+  overflow: hidden;
+  -ms-transform: translatez(0);
+  transform: translatez(0);
+}
+
+.tabulator[tabulator-layout="fitDataFill"] .tabulator-tableHolder .tabulator-table {
+  min-width: 100%;
+}
+
+.tabulator[tabulator-layout="fitDataTable"] {
+  display: inline-block;
+}
+
+.tabulator[tabulator-layout="fitColumns"] .tabulator-row .tabulator-cell:last-of-type {
+  border-right: none;
+}
+
+.tabulator.tabulator-block-select {
+  -webkit-user-select: none;
+      -ms-user-select: none;
+          user-select: none;
+}
+
+.tabulator .tabulator-header {
+  position: relative;
+  box-sizing: border-box;
+  width: 100%;
+  /* border-bottom: 3px solid #003268; */
+  background-color: #293146;
+  color: #fff;
+  font-weight: bold;
+  white-space: nowrap;
+  overflow: hidden;
+  -moz-user-select: none;
+  -khtml-user-select: none;
+  -webkit-user-select: none;
+  -o-user-select: none;
+}
+
+.tabulator .tabulator-header.tabulator-header-hidden {
+  display: none;
+}
+
+.tabulator .tabulator-header .tabulator-col {
+  display: inline-block;
+  position: relative;
+  box-sizing: border-box;
+  border-right: 1px solid #aaa;
+  background-color: #293146;
+  text-align: left;
+  vertical-align: bottom;
+  overflow: hidden;
+}
+
+.tabulator .tabulator-header .tabulator-col.tabulator-moving {
+  position: absolute;
+  /* border: 1px solid #3FB449; */
+  background: #090909;
+  pointer-events: none;
+}
+
+.tabulator .tabulator-header .tabulator-col .tabulator-col-content {
+  box-sizing: border-box;
+  position: relative;
+  padding: 8px;
+}
+
+.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-header-menu-button {
+  padding: 0 8px;
+}
+
+.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-header-menu-button:hover {
+  cursor: pointer;
+  opacity: .6;
+}
+
+.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title {
+  box-sizing: border-box;
+  width: 100%;
+  white-space: nowrap;
+  overflow: hidden;
+  text-overflow: ellipsis;
+  vertical-align: bottom;
+}
+
+.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title .tabulator-title-editor {
+  box-sizing: border-box;
+  width: 100%;
+  border: 1px solid #999;
+  padding: 1px;
+  background: #fff;
+}
+
+.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-arrow {
+  display: inline-block;
+  position: absolute;
+  top: 14px;
+  right: 8px;
+  width: 0;
+  height: 0;
+  border-left: 6px solid transparent;
+  border-right: 6px solid transparent;
+  border-bottom: 6px solid #bbb;
+}
+
+.tabulator .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols {
+  position: relative;
+  display: -ms-flexbox;
+  display: flex;
+  border-top: 1px solid #aaa;
+  overflow: hidden;
+  margin-right: -1px;
+}
+
+.tabulator .tabulator-header .tabulator-col:first-child .tabulator-col-resize-handle.prev {
+  display: none;
+}
+
+.tabulator .tabulator-header .tabulator-col .tabulator-header-filter {
+  position: relative;
+  box-sizing: border-box;
+  margin-top: 2px;
+  width: 100%;
+  text-align: center;
+}
+
+.tabulator .tabulator-header .tabulator-col .tabulator-header-filter textarea {
+  height: auto !important;
+}
+
+.tabulator .tabulator-header .tabulator-col .tabulator-header-filter svg {
+  margin-top: 3px;
+}
+
+.tabulator .tabulator-header .tabulator-col .tabulator-header-filter input::-ms-clear {
+  width: 0;
+  height: 0;
+}
+
+.tabulator .tabulator-header .tabulator-col.tabulator-sortable .tabulator-col-title {
+  padding-right: 25px;
+}
+
+.tabulator .tabulator-header .tabulator-col.tabulator-sortable:hover {
+  cursor: pointer;
+  background-color: #090909;
+}
+
+.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort="none"] .tabulator-col-content .tabulator-arrow {
+  border-top: none;
+  border-bottom: 6px solid #bbb;
+}
+
+.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort="asc"] .tabulator-col-content .tabulator-arrow {
+  border-top: none;
+  /* border-bottom: 6px solid #3FB449; */
+}
+
+.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort="desc"] .tabulator-col-content .tabulator-arrow {
+  border-top: 6px solid #3FB449;
+  border-bottom: none;
+}
+
+.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical .tabulator-col-content .tabulator-col-title {
+  -ms-writing-mode: tb-rl;
+      writing-mode: vertical-rl;
+  text-orientation: mixed;
+  display: -ms-flexbox;
+  display: flex;
+  -ms-flex-align: center;
+      align-items: center;
+  -ms-flex-pack: center;
+      justify-content: center;
+}
+
+.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-col-vertical-flip .tabulator-col-title {
+  -ms-transform: rotate(180deg);
+      transform: rotate(180deg);
+}
+
+.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable .tabulator-col-title {
+  padding-right: 0;
+  padding-top: 20px;
+}
+
+.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable.tabulator-col-vertical-flip .tabulator-col-title {
+  padding-right: 0;
+  padding-bottom: 20px;
+}
+
+.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable .tabulator-arrow {
+  right: calc(50% - 6px);
+}
+
+.tabulator .tabulator-header .tabulator-frozen {
+  display: inline-block;
+  position: absolute;
+  z-index: 10;
+}
+
+.tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-left {
+  border-right: 2px solid #aaa;
+}
+
+.tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-right {
+  border-left: 2px solid #aaa;
+}
+
+.tabulator .tabulator-header .tabulator-calcs-holder {
+  box-sizing: border-box;
+  min-width: 600%;
+  background: #3c3c3c !important;
+  border-top: 1px solid #aaa;
+  overflow: hidden;
+}
+
+.tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row {
+  background: #3c3c3c !important;
+}
+
+.tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row .tabulator-col-resize-handle {
+  display: none;
+}
+
+.tabulator .tabulator-header .tabulator-frozen-rows-holder {
+  min-width: 600%;
+}
+
+.tabulator .tabulator-header .tabulator-frozen-rows-holder:empty {
+  display: none;
+}
+
+.tabulator .tabulator-tableHolder {
+  position: relative;
+  width: 100%;
+  white-space: nowrap;
+  overflow: auto;
+  -webkit-overflow-scrolling: touch;
+}
+
+.tabulator .tabulator-tableHolder:focus {
+  outline: none;
+}
+
+.tabulator .tabulator-tableHolder .tabulator-placeholder {
+  box-sizing: border-box;
+  display: -ms-flexbox;
+  display: flex;
+  -ms-flex-align: center;
+      align-items: center;
+  width: 100%;
+}
+
+.tabulator .tabulator-tableHolder .tabulator-placeholder[tabulator-render-mode="virtual"] {
+  min-height: 100%;
+  min-width: 100%;
+}
+
+.tabulator .tabulator-tableHolder .tabulator-placeholder span {
+  display: inline-block;
+  margin: 0 auto;
+  padding: 10px;
+  color: #3FB449;
+  font-weight: bold;
+  font-size: 20px;
+}
+
+.tabulator .tabulator-tableHolder .tabulator-table {
+  position: relative;
+  display: inline-block;
+  background-color: #fff;
+  white-space: nowrap;
+  overflow: visible;
+  color: #333;
+}
+
+.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.tabulator-calcs {
+  font-weight: bold;
+  background: #484848 !important;
+  color: #fff;
+}
+
+.tabulator .tabulator-footer {
+  padding: 5px 10px;
+  padding-top: 8px;
+  /* border-top: 3px solid #3FB449; */
+  background-color: #293146;
+  text-align: right;
+  color: #293146;
+  font-weight: bold;
+  white-space: nowrap;
+  -ms-user-select: none;
+      user-select: none;
+  -moz-user-select: none;
+  -khtml-user-select: none;
+  -webkit-user-select: none;
+  -o-user-select: none;
+}
+
+.tabulator .tabulator-footer .tabulator-calcs-holder {
+  box-sizing: border-box;
+  width: calc(100% + 20px);
+  margin: -8px -10px 8px -10px;
+  text-align: left;
+  background: #3c3c3c !important;
+  border-bottom: 1px solid #aaa;
+  overflow: hidden;
+}
+
+.tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row {
+  background: #3c3c3c !important;
+  color: #fff !important;
+}
+
+.tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row .tabulator-col-resize-handle {
+  display: none;
+}
+
+.tabulator .tabulator-footer .tabulator-calcs-holder:only-child {
+  margin-bottom: -5px;
+  border-bottom: none;
+}
+
+.tabulator .tabulator-footer .tabulator-paginator label {
+  color: #fff;
+}
+
+.tabulator .tabulator-footer .tabulator-page-size {
+  display: inline-block;
+  margin: 0 5px;
+  padding: 2px 5px;
+  border: 1px solid #aaa;
+  border-radius: 3px;
+}
+
+.tabulator .tabulator-footer .tabulator-pages {
+  margin: 0 7px;
+}
+
+.tabulator .tabulator-footer .tabulator-page {
+  display: inline-block;
+  margin: 0 2px;
+  padding: 2px 5px;
+  border: 1px solid #aaa;
+  border-radius: 3px;
+  background: #fff;
+  color: #293146;
+  font-family: inherit;
+  font-weight: inherit;
+  font-size: inherit;
+}
+
+.tabulator .tabulator-footer .tabulator-page.active {
+  /* color: #3FB449; */
+}
+
+.tabulator .tabulator-footer .tabulator-page:disabled {
+  opacity: .5;
+}
+
+.tabulator .tabulator-footer .tabulator-page:not(.disabled):hover {
+  cursor: pointer;
+  background: rgba(0, 0, 0, 0.2);
+  color: #fff;
+}
+
+.tabulator .tabulator-col-resize-handle {
+  position: absolute;
+  right: 0;
+  top: 0;
+  bottom: 0;
+  width: 5px;
+}
+
+.tabulator .tabulator-col-resize-handle.prev {
+  left: 0;
+  right: auto;
+}
+
+.tabulator .tabulator-col-resize-handle:hover {
+  cursor: ew-resize;
+}
+
+.tabulator .tabulator-loader {
+  position: absolute;
+  display: -ms-flexbox;
+  display: flex;
+  -ms-flex-align: center;
+      align-items: center;
+  top: 0;
+  left: 0;
+  z-index: 100;
+  height: 100%;
+  width: 100%;
+  background: rgba(0, 0, 0, 0.4);
+  text-align: center;
+}
+
+.tabulator .tabulator-loader .tabulator-loader-msg {
+  display: inline-block;
+  margin: 0 auto;
+  padding: 10px 20px;
+  border-radius: 10px;
+  background: #fff;
+  font-weight: bold;
+  font-size: 16px;
+}
+
+.tabulator .tabulator-loader .tabulator-loader-msg.tabulator-loading {
+  border: 4px solid #333;
+  color: #000;
+}
+
+.tabulator .tabulator-loader .tabulator-loader-msg.tabulator-error {
+  border: 4px solid #D00;
+  color: #590000;
+}
+
+.tabulator-row {
+  position: relative;
+  box-sizing: border-box;
+  min-height: 22px;
+  background-color: #fff;
+}
+
+.tabulator-row.tabulator-row-even {
+  background-color: #EFEFEF;
+}
+
+.tabulator-row.tabulator-selectable:hover {
+  background-color: #bbb;
+  cursor: pointer;
+}
+
+.tabulator-row.tabulator-selected {
+  background-color: #9ABCEA;
+}
+
+.tabulator-row.tabulator-selected:hover {
+  background-color: #769BCC;
+  cursor: pointer;
+}
+
+.tabulator-row.tabulator-row-moving {
+  border: 1px solid #000;
+  background: #fff;
+}
+
+.tabulator-row.tabulator-moving {
+  position: absolute;
+  border-top: 1px solid #aaa;
+  border-bottom: 1px solid #aaa;
+  pointer-events: none !important;
+  z-index: 15;
+}
+
+.tabulator-row .tabulator-row-resize-handle {
+  position: absolute;
+  right: 0;
+  bottom: 0;
+  left: 0;
+  height: 5px;
+}
+
+.tabulator-row .tabulator-row-resize-handle.prev {
+  top: 0;
+  bottom: auto;
+}
+
+.tabulator-row .tabulator-row-resize-handle:hover {
+  cursor: ns-resize;
+}
+
+.tabulator-row .tabulator-frozen {
+  display: inline-block;
+  position: absolute;
+  background-color: inherit;
+  z-index: 10;
+}
+
+.tabulator-row .tabulator-frozen.tabulator-frozen-left {
+  border-right: 2px solid #aaa;
+}
+
+.tabulator-row .tabulator-frozen.tabulator-frozen-right {
+  border-left: 2px solid #aaa;
+}
+
+.tabulator-row .tabulator-responsive-collapse {
+  box-sizing: border-box;
+  padding: 5px;
+  border-top: 1px solid #aaa;
+  border-bottom: 1px solid #aaa;
+}
+
+.tabulator-row .tabulator-responsive-collapse:empty {
+  display: none;
+}
+
+.tabulator-row .tabulator-responsive-collapse table {
+  font-size: 14px;
+}
+
+.tabulator-row .tabulator-responsive-collapse table tr td {
+  position: relative;
+}
+
+.tabulator-row .tabulator-responsive-collapse table tr td:first-of-type {
+  padding-right: 10px;
+}
+
+.tabulator-row .tabulator-cell {
+  display: inline-block;
+  position: relative;
+  box-sizing: border-box;
+  padding: 6px;
+  border-right: 1px solid #aaa;
+  vertical-align: middle;
+  white-space: nowrap;
+  overflow: hidden;
+  text-overflow: ellipsis;
+}
+
+.tabulator-row .tabulator-cell.tabulator-editing {
+  border: 1px solid #1D68CD;
+  padding: 0;
+}
+
+.tabulator-row .tabulator-cell.tabulator-editing input, .tabulator-row .tabulator-cell.tabulator-editing select {
+  border: 1px;
+  background: transparent;
+}
+
+.tabulator-row .tabulator-cell.tabulator-validation-fail {
+  border: 1px solid #dd0000;
+}
+
+.tabulator-row .tabulator-cell.tabulator-validation-fail input, .tabulator-row .tabulator-cell.tabulator-validation-fail select {
+  border: 1px;
+  background: transparent;
+  color: #dd0000;
+}
+
+.tabulator-row .tabulator-cell:first-child .tabulator-col-resize-handle.prev {
+  display: none;
+}
+
+.tabulator-row .tabulator-cell.tabulator-row-handle {
+  display: -ms-inline-flexbox;
+  display: inline-flex;
+  -ms-flex-align: center;
+      align-items: center;
+  -moz-user-select: none;
+  -khtml-user-select: none;
+  -webkit-user-select: none;
+  -o-user-select: none;
+}
+
+.tabulator-row .tabulator-cell.tabulator-row-handle .tabulator-row-handle-box {
+  width: 80%;
+}
+
+.tabulator-row .tabulator-cell.tabulator-row-handle .tabulator-row-handle-box .tabulator-row-handle-bar {
+  width: 100%;
+  height: 3px;
+  margin-top: 2px;
+  background: #3FB449;
+}
+
+.tabulator-row .tabulator-cell .tabulator-data-tree-branch {
+  display: inline-block;
+  vertical-align: middle;
+  height: 9px;
+  width: 7px;
+  margin-top: -9px;
+  margin-right: 5px;
+  border-bottom-left-radius: 1px;
+  border-left: 2px solid #aaa;
+  border-bottom: 2px solid #aaa;
+}
+
+.tabulator-row .tabulator-cell .tabulator-data-tree-control {
+  display: -ms-inline-flexbox;
+  display: inline-flex;
+  -ms-flex-pack: center;
+      justify-content: center;
+  -ms-flex-align: center;
+      align-items: center;
+  vertical-align: middle;
+  height: 11px;
+  width: 11px;
+  margin-right: 5px;
+  border: 1px solid #333;
+  border-radius: 2px;
+  background: rgba(0, 0, 0, 0.1);
+  overflow: hidden;
+}
+
+.tabulator-row .tabulator-cell .tabulator-data-tree-control:hover {
+  cursor: pointer;
+  background: rgba(0, 0, 0, 0.2);
+}
+
+.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-collapse {
+  display: inline-block;
+  position: relative;
+  height: 7px;
+  width: 1px;
+  background: transparent;
+}
+
+.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-collapse:after {
+  position: absolute;
+  content: "";
+  left: -3px;
+  top: 3px;
+  height: 1px;
+  width: 7px;
+  background: #333;
+}
+
+.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand {
+  display: inline-block;
+  position: relative;
+  height: 7px;
+  width: 1px;
+  background: #333;
+}
+
+.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand:after {
+  position: absolute;
+  content: "";
+  left: -3px;
+  top: 3px;
+  height: 1px;
+  width: 7px;
+  background: #333;
+}
+
+.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle {
+  display: -ms-inline-flexbox;
+  display: inline-flex;
+  -ms-flex-align: center;
+      align-items: center;
+  -ms-flex-pack: center;
+      justify-content: center;
+  -moz-user-select: none;
+  -khtml-user-select: none;
+  -webkit-user-select: none;
+  -o-user-select: none;
+  height: 15px;
+  width: 15px;
+  border-radius: 20px;
+  background: #666;
+  color: #fff;
+  font-weight: bold;
+  font-size: 1.1em;
+}
+
+.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle:hover {
+  opacity: .7;
+}
+
+.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle.open .tabulator-responsive-collapse-toggle-close {
+  display: initial;
+}
+
+.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle.open .tabulator-responsive-collapse-toggle-open {
+  display: none;
+}
+
+.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle .tabulator-responsive-collapse-toggle-close {
+  display: none;
+}
+
+.tabulator-row .tabulator-cell .tabulator-traffic-light {
+  display: inline-block;
+  height: 14px;
+  width: 14px;
+  border-radius: 14px;
+}
+
+.tabulator-row.tabulator-group {
+  box-sizing: border-box;
+  border-right: 1px solid #aaa;
+  border-top: 1px solid #000;
+  /* border-bottom: 2px solid #3FB449; */
+  padding: 5px;
+  padding-left: 10px;
+  background: #293146;
+  color: #fff;
+  font-weight: bold;
+  min-width: 100%;
+}
+
+.tabulator-row.tabulator-group:hover {
+  cursor: pointer;
+  background-color: #090909;
+}
+
+.tabulator-row.tabulator-group.tabulator-group-visible .tabulator-arrow {
+  margin-right: 10px;
+  border-left: 6px solid transparent;
+  border-right: 6px solid transparent;
+  border-top: 6px solid #bbb;
+  border-bottom: 0;
+}
+
+.tabulator-row.tabulator-group.tabulator-group-level-1 {
+  padding-left: 30px;
+}
+
+.tabulator-row.tabulator-group.tabulator-group-level-2 {
+  padding-left: 50px;
+}
+
+.tabulator-row.tabulator-group.tabulator-group-level-3 {
+  padding-left: 70px;
+}
+
+.tabulator-row.tabulator-group.tabulator-group-level-4 {
+  padding-left: 90px;
+}
+
+.tabulator-row.tabulator-group.tabulator-group-level-5 {
+  padding-left: 110px;
+}
+
+.tabulator-row.tabulator-group .tabulator-group-toggle {
+  display: inline-block;
+}
+
+.tabulator-row.tabulator-group .tabulator-arrow {
+  display: inline-block;
+  width: 0;
+  height: 0;
+  margin-right: 16px;
+  border-top: 6px solid transparent;
+  border-bottom: 6px solid transparent;
+  border-right: 0;
+  border-left: 6px solid #bbb;
+  vertical-align: middle;
+}
+
+.tabulator-row.tabulator-group span {
+  margin-left: 10px;
+  color: #bbb;
+}
+
+.tabulator-menu {
+  position: absolute;
+  display: inline-block;
+  box-sizing: border-box;
+  background: #fff;
+  border: 1px solid #aaa;
+  box-shadow: 0 0 5px 0 rgba(0, 0, 0, 0.2);
+  font-size: 14px;
+  overflow-y: auto;
+  -webkit-overflow-scrolling: touch;
+  z-index: 10000;
+}
+
+.tabulator-menu .tabulator-menu-item {
+  padding: 5px 10px;
+  -webkit-user-select: none;
+      -ms-user-select: none;
+          user-select: none;
+}
+
+.tabulator-menu .tabulator-menu-item.tabulator-menu-item-disabled {
+  opacity: .5;
+}
+
+.tabulator-menu .tabulator-menu-item:not(.tabulator-menu-item-disabled):hover {
+  cursor: pointer;
+  background: #EFEFEF;
+}
+
+.tabulator-menu .tabulator-menu-separator {
+  border-top: 1px solid #aaa;
+}
+
+.tabulator-edit-select-list {
+  position: absolute;
+  display: inline-block;
+  box-sizing: border-box;
+  max-height: 200px;
+  background: #fff;
+  border: 1px solid #aaa;
+  font-size: 14px;
+  overflow-y: auto;
+  -webkit-overflow-scrolling: touch;
+  z-index: 10000;
+}
+
+.tabulator-edit-select-list .tabulator-edit-select-list-item {
+  padding: 4px;
+  color: #333;
+}
+
+.tabulator-edit-select-list .tabulator-edit-select-list-item.active {
+  color: #fff;
+  background: #1D68CD;
+}
+
+.tabulator-edit-select-list .tabulator-edit-select-list-item.active.focused {
+  outline: 1px solid rgba(255, 255, 255, 0.5);
+}
+
+.tabulator-edit-select-list .tabulator-edit-select-list-item.focused {
+  outline: 1px solid #1D68CD;
+}
+
+.tabulator-edit-select-list .tabulator-edit-select-list-item:hover {
+  cursor: pointer;
+  color: #fff;
+  background: #1D68CD;
+}
+
+.tabulator-edit-select-list .tabulator-edit-select-list-notice {
+  padding: 4px;
+  color: #333;
+  text-align: center;
+}
+
+.tabulator-edit-select-list .tabulator-edit-select-list-group {
+  border-bottom: 1px solid #aaa;
+  padding: 4px;
+  padding-top: 6px;
+  color: #333;
+  font-weight: bold;
+}
+
+.tabulator-print-fullscreen {
+  position: absolute;
+  top: 0;
+  bottom: 0;
+  left: 0;
+  right: 0;
+  z-index: 10000;
+}
+
+body.tabulator-print-fullscreen-hide > *:not(.tabulator-print-fullscreen) {
+  display: none !important;
+}
+
+.tabulator-print-table {
+  border-collapse: collapse;
+}
+
+.tabulator-print-table .tabulator-print-table-group {
+  box-sizing: border-box;
+  border-right: 1px solid #aaa;
+  border-top: 1px solid #000;
+  border-bottom: 2px solid #3FB449;
+  padding: 5px;
+  padding-left: 10px;
+  background: #293146;
+  color: #fff;
+  font-weight: bold;
+  min-width: 100%;
+}
+
+.tabulator-print-table .tabulator-print-table-group:hover {
+  cursor: pointer;
+  background-color: #090909;
+}
+
+.tabulator-print-table .tabulator-print-table-group.tabulator-group-visible .tabulator-arrow {
+  margin-right: 10px;
+  border-left: 6px solid transparent;
+  border-right: 6px solid transparent;
+  border-top: 6px solid #3FB449;
+  border-bottom: 0;
+}
+
+.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-1 td {
+  padding-left: 30px !important;
+}
+
+.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-2 td {
+  padding-left: 50px !important;
+}
+
+.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-3 td {
+  padding-left: 70px !important;
+}
+
+.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-4 td {
+  padding-left: 90px !important;
+}
+
+.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-5 td {
+  padding-left: 110px !important;
+}
+
+.tabulator-print-table .tabulator-print-table-group .tabulator-group-toggle {
+  display: inline-block;
+}
+
+.tabulator-print-table .tabulator-print-table-group .tabulator-arrow {
+  display: inline-block;
+  width: 0;
+  height: 0;
+  margin-right: 16px;
+  border-top: 6px solid transparent;
+  border-bottom: 6px solid transparent;
+  border-right: 0;
+  border-left: 6px solid #3FB449;
+  vertical-align: middle;
+}
+
+.tabulator-print-table .tabulator-print-table-group span {
+  margin-left: 10px;
+  color: #3FB449;
+}
+
+.tabulator-print-table .tabulator-data-tree-branch {
+  display: inline-block;
+  vertical-align: middle;
+  height: 9px;
+  width: 7px;
+  margin-top: -9px;
+  margin-right: 5px;
+  border-bottom-left-radius: 1px;
+  border-left: 2px solid #aaa;
+  border-bottom: 2px solid #aaa;
+}
+
+.tabulator-print-table .tabulator-data-tree-control {
+  display: -ms-inline-flexbox;
+  display: inline-flex;
+  -ms-flex-pack: center;
+      justify-content: center;
+  -ms-flex-align: center;
+      align-items: center;
+  vertical-align: middle;
+  height: 11px;
+  width: 11px;
+  margin-right: 5px;
+  border: 1px solid #333;
+  border-radius: 2px;
+  background: rgba(0, 0, 0, 0.1);
+  overflow: hidden;
+}
+
+.tabulator-print-table .tabulator-data-tree-control:hover {
+  cursor: pointer;
+  background: rgba(0, 0, 0, 0.2);
+}
+
+.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-collapse {
+  display: inline-block;
+  position: relative;
+  height: 7px;
+  width: 1px;
+  background: transparent;
+}
+
+.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-collapse:after {
+  position: absolute;
+  content: "";
+  left: -3px;
+  top: 3px;
+  height: 1px;
+  width: 7px;
+  background: #333;
+}
+
+.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-expand {
+  display: inline-block;
+  position: relative;
+  height: 7px;
+  width: 1px;
+  background: #333;
+}
+
+.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-expand:after {
+  position: absolute;
+  content: "";
+  left: -3px;
+  top: 3px;
+  height: 1px;
+  width: 7px;
+  background: #333;
+}
diff --git a/admin/js/vendors/tabulator/css/tabulator_site.min.css b/admin/js/vendors/tabulator/css/tabulator_site.min.css
new file mode 100644 (file)
index 0000000..67f5443
--- /dev/null
@@ -0,0 +1 @@
+.tabulator{position:relative;border-bottom:5px solid #293146;background-color:#fff;font-size:14px;text-align:left;overflow:hidden;-ms-transform:translatez(0);transform:translatez(0)}.tabulator[tabulator-layout=fitDataFill] .tabulator-tableHolder .tabulator-table{min-width:100%}.tabulator[tabulator-layout=fitDataTable]{display:inline-block}.tabulator[tabulator-layout=fitColumns] .tabulator-row .tabulator-cell:last-of-type{border-right:none}.tabulator.tabulator-block-select{-webkit-user-select:none;-ms-user-select:none;user-select:none}.tabulator .tabulator-header{position:relative;box-sizing:border-box;width:100%;background-color:#293146;color:#fff;font-weight:700;white-space:nowrap;overflow:hidden;-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-o-user-select:none}.tabulator .tabulator-header.tabulator-header-hidden{display:none}.tabulator .tabulator-header .tabulator-col{display:inline-block;position:relative;box-sizing:border-box;border-right:1px solid #aaa;background-color:#293146;text-align:left;vertical-align:bottom;overflow:hidden}.tabulator .tabulator-header .tabulator-col.tabulator-moving{position:absolute;background:#090909;pointer-events:none}.tabulator .tabulator-header .tabulator-col .tabulator-col-content{box-sizing:border-box;position:relative;padding:8px}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-header-menu-button{padding:0 8px}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-header-menu-button:hover{cursor:pointer;opacity:.6}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title{box-sizing:border-box;width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;vertical-align:bottom}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title .tabulator-title-editor{box-sizing:border-box;width:100%;border:1px solid #999;padding:1px;background:#fff}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-arrow{display:inline-block;position:absolute;top:14px;right:8px;width:0;height:0;border-left:6px solid transparent;border-right:6px solid transparent;border-bottom:6px solid #bbb}.tabulator .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols{position:relative;display:-ms-flexbox;display:flex;border-top:1px solid #aaa;overflow:hidden;margin-right:-1px}.tabulator .tabulator-header .tabulator-col:first-child .tabulator-col-resize-handle.prev{display:none}.tabulator .tabulator-header .tabulator-col .tabulator-header-filter{position:relative;box-sizing:border-box;margin-top:2px;width:100%;text-align:center}.tabulator .tabulator-header .tabulator-col .tabulator-header-filter textarea{height:auto!important}.tabulator .tabulator-header .tabulator-col .tabulator-header-filter svg{margin-top:3px}.tabulator .tabulator-header .tabulator-col .tabulator-header-filter input::-ms-clear{width:0;height:0}.tabulator .tabulator-header .tabulator-col.tabulator-sortable .tabulator-col-title{padding-right:25px}.tabulator .tabulator-header .tabulator-col.tabulator-sortable:hover{cursor:pointer;background-color:#090909}.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=none] .tabulator-col-content .tabulator-arrow{border-top:none;border-bottom:6px solid #bbb}.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=asc] .tabulator-col-content .tabulator-arrow{border-top:none}.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=desc] .tabulator-col-content .tabulator-arrow{border-top:6px solid #3fb449;border-bottom:none}.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical .tabulator-col-content .tabulator-col-title{-ms-writing-mode:tb-rl;writing-mode:vertical-rl;text-orientation:mixed;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center}.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-col-vertical-flip .tabulator-col-title{-ms-transform:rotate(180deg);transform:rotate(180deg)}.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable .tabulator-col-title{padding-right:0;padding-top:20px}.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable.tabulator-col-vertical-flip .tabulator-col-title{padding-right:0;padding-bottom:20px}.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable .tabulator-arrow{right:calc(50% - 6px)}.tabulator .tabulator-header .tabulator-frozen{display:inline-block;position:absolute;z-index:10}.tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-left{border-right:2px solid #aaa}.tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-right{border-left:2px solid #aaa}.tabulator .tabulator-header .tabulator-calcs-holder{box-sizing:border-box;min-width:600%;background:#3c3c3c!important;border-top:1px solid #aaa;overflow:hidden}.tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row{background:#3c3c3c!important}.tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row .tabulator-col-resize-handle{display:none}.tabulator .tabulator-header .tabulator-frozen-rows-holder{min-width:600%}.tabulator .tabulator-header .tabulator-frozen-rows-holder:empty{display:none}.tabulator .tabulator-tableHolder{position:relative;width:100%;white-space:nowrap;overflow:auto;-webkit-overflow-scrolling:touch}.tabulator .tabulator-tableHolder:focus{outline:0}.tabulator .tabulator-tableHolder .tabulator-placeholder{box-sizing:border-box;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;width:100%}.tabulator .tabulator-tableHolder .tabulator-placeholder[tabulator-render-mode=virtual]{min-height:100%;min-width:100%}.tabulator .tabulator-tableHolder .tabulator-placeholder span{display:inline-block;margin:0 auto;padding:10px;color:#3fb449;font-weight:700;font-size:20px}.tabulator .tabulator-tableHolder .tabulator-table{position:relative;display:inline-block;background-color:#fff;white-space:nowrap;overflow:visible;color:#333}.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.tabulator-calcs{font-weight:700;background:#484848!important;color:#fff}.tabulator .tabulator-footer{padding:5px 10px;padding-top:8px;background-color:#293146;text-align:right;color:#293146;font-weight:700;white-space:nowrap;-ms-user-select:none;user-select:none;-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-o-user-select:none}.tabulator .tabulator-footer .tabulator-calcs-holder{box-sizing:border-box;width:calc(100% + 20px);margin:-8px -10px 8px -10px;text-align:left;background:#3c3c3c!important;border-bottom:1px solid #aaa;overflow:hidden}.tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row{background:#3c3c3c!important;color:#fff!important}.tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row .tabulator-col-resize-handle{display:none}.tabulator .tabulator-footer .tabulator-calcs-holder:only-child{margin-bottom:-5px;border-bottom:none}.tabulator .tabulator-footer .tabulator-paginator label{color:#fff}.tabulator .tabulator-footer .tabulator-page-size{display:inline-block;margin:0 5px;padding:2px 5px;border:1px solid #aaa;border-radius:3px}.tabulator .tabulator-footer .tabulator-pages{margin:0 7px}.tabulator .tabulator-footer .tabulator-page{display:inline-block;margin:0 2px;padding:2px 5px;border:1px solid #aaa;border-radius:3px;background:#fff;color:#293146;font-family:inherit;font-weight:inherit;font-size:inherit}.tabulator .tabulator-footer .tabulator-page:disabled{opacity:.5}.tabulator .tabulator-footer .tabulator-page:not(.disabled):hover{cursor:pointer;background:rgba(0,0,0,.2);color:#fff}.tabulator .tabulator-col-resize-handle{position:absolute;right:0;top:0;bottom:0;width:5px}.tabulator .tabulator-col-resize-handle.prev{left:0;right:auto}.tabulator .tabulator-col-resize-handle:hover{cursor:ew-resize}.tabulator .tabulator-loader{position:absolute;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;top:0;left:0;z-index:100;height:100%;width:100%;background:rgba(0,0,0,.4);text-align:center}.tabulator .tabulator-loader .tabulator-loader-msg{display:inline-block;margin:0 auto;padding:10px 20px;border-radius:10px;background:#fff;font-weight:700;font-size:16px}.tabulator .tabulator-loader .tabulator-loader-msg.tabulator-loading{border:4px solid #333;color:#000}.tabulator .tabulator-loader .tabulator-loader-msg.tabulator-error{border:4px solid #d00;color:#590000}.tabulator-row{position:relative;box-sizing:border-box;min-height:22px;background-color:#fff}.tabulator-row.tabulator-row-even{background-color:#efefef}.tabulator-row.tabulator-selectable:hover{background-color:#bbb;cursor:pointer}.tabulator-row.tabulator-selected{background-color:#9abcea}.tabulator-row.tabulator-selected:hover{background-color:#769bcc;cursor:pointer}.tabulator-row.tabulator-row-moving{border:1px solid #000;background:#fff}.tabulator-row.tabulator-moving{position:absolute;border-top:1px solid #aaa;border-bottom:1px solid #aaa;pointer-events:none!important;z-index:15}.tabulator-row .tabulator-row-resize-handle{position:absolute;right:0;bottom:0;left:0;height:5px}.tabulator-row .tabulator-row-resize-handle.prev{top:0;bottom:auto}.tabulator-row .tabulator-row-resize-handle:hover{cursor:ns-resize}.tabulator-row .tabulator-frozen{display:inline-block;position:absolute;background-color:inherit;z-index:10}.tabulator-row .tabulator-frozen.tabulator-frozen-left{border-right:2px solid #aaa}.tabulator-row .tabulator-frozen.tabulator-frozen-right{border-left:2px solid #aaa}.tabulator-row .tabulator-responsive-collapse{box-sizing:border-box;padding:5px;border-top:1px solid #aaa;border-bottom:1px solid #aaa}.tabulator-row .tabulator-responsive-collapse:empty{display:none}.tabulator-row .tabulator-responsive-collapse table{font-size:14px}.tabulator-row .tabulator-responsive-collapse table tr td{position:relative}.tabulator-row .tabulator-responsive-collapse table tr td:first-of-type{padding-right:10px}.tabulator-row .tabulator-cell{display:inline-block;position:relative;box-sizing:border-box;padding:6px;border-right:1px solid #aaa;vertical-align:middle;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.tabulator-row .tabulator-cell.tabulator-editing{border:1px solid #1d68cd;padding:0}.tabulator-row .tabulator-cell.tabulator-editing input,.tabulator-row .tabulator-cell.tabulator-editing select{border:1px;background:0 0}.tabulator-row .tabulator-cell.tabulator-validation-fail{border:1px solid #d00}.tabulator-row .tabulator-cell.tabulator-validation-fail input,.tabulator-row .tabulator-cell.tabulator-validation-fail select{border:1px;background:0 0;color:#d00}.tabulator-row .tabulator-cell:first-child .tabulator-col-resize-handle.prev{display:none}.tabulator-row .tabulator-cell.tabulator-row-handle{display:-ms-inline-flexbox;display:inline-flex;-ms-flex-align:center;align-items:center;-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-o-user-select:none}.tabulator-row .tabulator-cell.tabulator-row-handle .tabulator-row-handle-box{width:80%}.tabulator-row .tabulator-cell.tabulator-row-handle .tabulator-row-handle-box .tabulator-row-handle-bar{width:100%;height:3px;margin-top:2px;background:#3fb449}.tabulator-row .tabulator-cell .tabulator-data-tree-branch{display:inline-block;vertical-align:middle;height:9px;width:7px;margin-top:-9px;margin-right:5px;border-bottom-left-radius:1px;border-left:2px solid #aaa;border-bottom:2px solid #aaa}.tabulator-row .tabulator-cell .tabulator-data-tree-control{display:-ms-inline-flexbox;display:inline-flex;-ms-flex-pack:center;justify-content:center;-ms-flex-align:center;align-items:center;vertical-align:middle;height:11px;width:11px;margin-right:5px;border:1px solid #333;border-radius:2px;background:rgba(0,0,0,.1);overflow:hidden}.tabulator-row .tabulator-cell .tabulator-data-tree-control:hover{cursor:pointer;background:rgba(0,0,0,.2)}.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-collapse{display:inline-block;position:relative;height:7px;width:1px;background:0 0}.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-collapse:after{position:absolute;content:"";left:-3px;top:3px;height:1px;width:7px;background:#333}.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand{display:inline-block;position:relative;height:7px;width:1px;background:#333}.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand:after{position:absolute;content:"";left:-3px;top:3px;height:1px;width:7px;background:#333}.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle{display:-ms-inline-flexbox;display:inline-flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-o-user-select:none;height:15px;width:15px;border-radius:20px;background:#666;color:#fff;font-weight:700;font-size:1.1em}.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle:hover{opacity:.7}.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle.open .tabulator-responsive-collapse-toggle-close{display:initial}.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle.open .tabulator-responsive-collapse-toggle-open{display:none}.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle .tabulator-responsive-collapse-toggle-close{display:none}.tabulator-row .tabulator-cell .tabulator-traffic-light{display:inline-block;height:14px;width:14px;border-radius:14px}.tabulator-row.tabulator-group{box-sizing:border-box;border-right:1px solid #aaa;border-top:1px solid #000;padding:5px;padding-left:10px;background:#293146;color:#fff;font-weight:700;min-width:100%}.tabulator-row.tabulator-group:hover{cursor:pointer;background-color:#090909}.tabulator-row.tabulator-group.tabulator-group-visible .tabulator-arrow{margin-right:10px;border-left:6px solid transparent;border-right:6px solid transparent;border-top:6px solid #bbb;border-bottom:0}.tabulator-row.tabulator-group.tabulator-group-level-1{padding-left:30px}.tabulator-row.tabulator-group.tabulator-group-level-2{padding-left:50px}.tabulator-row.tabulator-group.tabulator-group-level-3{padding-left:70px}.tabulator-row.tabulator-group.tabulator-group-level-4{padding-left:90px}.tabulator-row.tabulator-group.tabulator-group-level-5{padding-left:110px}.tabulator-row.tabulator-group .tabulator-group-toggle{display:inline-block}.tabulator-row.tabulator-group .tabulator-arrow{display:inline-block;width:0;height:0;margin-right:16px;border-top:6px solid transparent;border-bottom:6px solid transparent;border-right:0;border-left:6px solid #bbb;vertical-align:middle}.tabulator-row.tabulator-group span{margin-left:10px;color:#bbb}.tabulator-menu{position:absolute;display:inline-block;box-sizing:border-box;background:#fff;border:1px solid #aaa;box-shadow:0 0 5px 0 rgba(0,0,0,.2);font-size:14px;overflow-y:auto;-webkit-overflow-scrolling:touch;z-index:10000}.tabulator-menu .tabulator-menu-item{padding:5px 10px;-webkit-user-select:none;-ms-user-select:none;user-select:none}.tabulator-menu .tabulator-menu-item.tabulator-menu-item-disabled{opacity:.5}.tabulator-menu .tabulator-menu-item:not(.tabulator-menu-item-disabled):hover{cursor:pointer;background:#efefef}.tabulator-menu .tabulator-menu-separator{border-top:1px solid #aaa}.tabulator-edit-select-list{position:absolute;display:inline-block;box-sizing:border-box;max-height:200px;background:#fff;border:1px solid #aaa;font-size:14px;overflow-y:auto;-webkit-overflow-scrolling:touch;z-index:10000}.tabulator-edit-select-list .tabulator-edit-select-list-item{padding:4px;color:#333}.tabulator-edit-select-list .tabulator-edit-select-list-item.active{color:#fff;background:#1d68cd}.tabulator-edit-select-list .tabulator-edit-select-list-item.active.focused{outline:1px solid rgba(255,255,255,.5)}.tabulator-edit-select-list .tabulator-edit-select-list-item.focused{outline:1px solid #1d68cd}.tabulator-edit-select-list .tabulator-edit-select-list-item:hover{cursor:pointer;color:#fff;background:#1d68cd}.tabulator-edit-select-list .tabulator-edit-select-list-notice{padding:4px;color:#333;text-align:center}.tabulator-edit-select-list .tabulator-edit-select-list-group{border-bottom:1px solid #aaa;padding:4px;padding-top:6px;color:#333;font-weight:700}.tabulator-print-fullscreen{position:absolute;top:0;bottom:0;left:0;right:0;z-index:10000}body.tabulator-print-fullscreen-hide>:not(.tabulator-print-fullscreen){display:none!important}.tabulator-print-table{border-collapse:collapse}.tabulator-print-table .tabulator-print-table-group{box-sizing:border-box;border-right:1px solid #aaa;border-top:1px solid #000;border-bottom:2px solid #3fb449;padding:5px;padding-left:10px;background:#293146;color:#fff;font-weight:700;min-width:100%}.tabulator-print-table .tabulator-print-table-group:hover{cursor:pointer;background-color:#090909}.tabulator-print-table .tabulator-print-table-group.tabulator-group-visible .tabulator-arrow{margin-right:10px;border-left:6px solid transparent;border-right:6px solid transparent;border-top:6px solid #3fb449;border-bottom:0}.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-1 td{padding-left:30px!important}.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-2 td{padding-left:50px!important}.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-3 td{padding-left:70px!important}.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-4 td{padding-left:90px!important}.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-5 td{padding-left:110px!important}.tabulator-print-table .tabulator-print-table-group .tabulator-group-toggle{display:inline-block}.tabulator-print-table .tabulator-print-table-group .tabulator-arrow{display:inline-block;width:0;height:0;margin-right:16px;border-top:6px solid transparent;border-bottom:6px solid transparent;border-right:0;border-left:6px solid #3fb449;vertical-align:middle}.tabulator-print-table .tabulator-print-table-group span{margin-left:10px;color:#3fb449}.tabulator-print-table .tabulator-data-tree-branch{display:inline-block;vertical-align:middle;height:9px;width:7px;margin-top:-9px;margin-right:5px;border-bottom-left-radius:1px;border-left:2px solid #aaa;border-bottom:2px solid #aaa}.tabulator-print-table .tabulator-data-tree-control{display:-ms-inline-flexbox;display:inline-flex;-ms-flex-pack:center;justify-content:center;-ms-flex-align:center;align-items:center;vertical-align:middle;height:11px;width:11px;margin-right:5px;border:1px solid #333;border-radius:2px;background:rgba(0,0,0,.1);overflow:hidden}.tabulator-print-table .tabulator-data-tree-control:hover{cursor:pointer;background:rgba(0,0,0,.2)}.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-collapse{display:inline-block;position:relative;height:7px;width:1px;background:0 0}.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-collapse:after{position:absolute;content:"";left:-3px;top:3px;height:1px;width:7px;background:#333}.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-expand{display:inline-block;position:relative;height:7px;width:1px;background:#333}.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-expand:after{position:absolute;content:"";left:-3px;top:3px;height:1px;width:7px;background:#333}
\ No newline at end of file
diff --git a/admin/js/vendors/tabulator/css/tabulator_site.min.css.map b/admin/js/vendors/tabulator/css/tabulator_site.min.css.map
new file mode 100644 (file)
index 0000000..6970f0b
--- /dev/null
@@ -0,0 +1 @@
+{"version":3,"sources":["tabulator_site.scss"],"names":[],"mappings":"AAyCA,WACC,kBAAkB,AAElB,6BAvCgB,AAyChB,sBA1CqB,AA4CrB,eA1Ca,AA2Cb,gBAAgB,AAChB,gBAAe,AAMf,uBAAwB,CAigBxB,AAhhBD,iFAoBI,cAAc,CACd,AArBJ,0CA0BE,oBAAqB,CACrB,AA3BF,oFAiCK,iBAAkB,CAClB,AAlCL,kCAyCE,yBAAiB,AAAjB,qBAAiB,AAAjB,gBAAiB,CACjB,AA1CF,6BA8CE,kBAAiB,AACjB,sBAAsB,AAEtB,WAAU,AAEV,gCAhF2B,AAiF3B,sBApFyB,AAqFzB,WApFmB,AAqFnB,gBAAgB,AAEhB,mBAAmB,AACnB,gBAAe,AAEf,sBAAsB,AACtB,wBAAwB,AACxB,yBAAyB,AACzB,mBAAoB,CAmPpB,AAjTF,qDAiEG,YAAY,CACZ,AAlEH,4CAsEG,qBAAoB,AAEpB,kBAAiB,AACjB,sBAAqB,AACrB,4BAxGoB,AAyGpB,sBA3GwB,AA4GxB,gBAAe,AACf,sBAAsB,AACtB,eAAgB,CAqLhB,AAnQH,6DAiFI,kBAAkB,AAClB,yBA/GyB,AAgHzB,mBAA8C,AAC9C,mBAAoB,CACpB,AArFJ,mEAyFI,sBAAqB,AACrB,kBAAkB,AAClB,WAAW,CAgDX,AA3IJ,iGA+FK,aAAc,CAMd,AArGL,uGAkGM,eAAe,AACf,UAAW,CACX,AApGN,wFAyGK,sBAAqB,AACrB,WAAW,AAEX,mBAAmB,AACnB,gBAAgB,AAChB,uBAAuB,AACvB,qBAAqB,CAarB,AA5HL,gHAmHM,sBAAsB,AACtB,WAAW,AAEX,sBAAqB,AAErB,YAAW,AAEX,eAAgB,CAChB,AA3HN,oFAgIK,qBAAqB,AACrB,kBAAkB,AAClB,SAAQ,AACR,UAAS,AACT,QAAQ,AACR,SAAS,AACT,kCAAkC,AAClC,mCAAmC,AACnC,4BAhKmB,CAiKnB,AAzIL,0FAkJK,kBAAiB,AACjB,oBAAa,AAAb,aAAa,AAEb,0BAnLkB,AAoLlB,gBAAgB,AAEhB,iBAAiB,CACjB,AAzJL,0FA+JK,YAAa,CACb,AAhKL,qEAqKI,kBAAkB,AAClB,sBAAsB,AACtB,eAAc,AACd,WAAU,AACV,iBAAkB,CAiBlB,AA1LJ,8EA6KK,qBAAsB,CACtB,AA9KL,yEAiLK,cAAe,CACf,AAlLL,sFAsLO,QAAS,AACT,QAAS,CACV,AAxLN,oFA+LK,kBAAkB,CAClB,AAhML,qEAmMK,eAAc,AACd,wBAAoD,CACpD,AArML,uHAyMM,gBAAgB,AAChB,4BAlOkB,CAmOlB,AA3MN,sHAgNM,gBAAgB,AAChB,+BA1OmB,CA2OnB,AAlNN,uHAuNM,6BAhPmB,AAiPnB,kBAAmB,CACnB,AAzNN,+GAgOM,uBAAyB,AAAzB,yBAAyB,AACzB,uBAAuB,AAEvB,oBAAY,AAAZ,aAAY,AACZ,sBAAkB,AAAlB,mBAAkB,AAClB,qBAAsB,AAAtB,sBAAsB,CACtB,AAtON,oHA2OM,wBAAyB,CACzB,AA5ON,2GAiPM,gBAAe,AACf,gBAAgB,CAChB,AAnPN,uIAuPO,gBAAe,AACf,mBAAmB,CACnB,AAzPP,uGA8PM,qBAAqB,CACrB,AA/PN,+CAsQG,qBAAqB,AACrB,kBAAkB,AAIlB,UAAW,CASX,AApRH,qEA8QI,2BAjSgB,CAkShB,AA/QJ,sEAkRI,0BArSgB,CAsShB,AAnRJ,qDAuRG,sBAAqB,AACrB,eAAc,AAEd,6BAA0D,AAU1D,0BAvTiB,AA0TjB,eAAgB,CAChB,AAxSH,oEA6RI,4BAA0D,CAK1D,AAlSJ,iGAgSK,YAAa,CACb,AAjSL,2DA2SG,cAAc,CAKd,AAhTH,iEA8SI,YAAa,CACb,AA/SJ,kCAqTE,kBAAiB,AACjB,WAAU,AACV,mBAAmB,AACnB,cAAa,AACb,gCAAiC,CAgDjC,AAzWF,wCA4TG,YAAa,CACb,AA7TH,yDAiUG,sBAAqB,AACrB,oBAAa,AAAb,aAAa,AACb,sBAAkB,AAAlB,mBAAkB,AAOlB,UAAU,CAYV,AAtVH,wFAsUI,gBAAe,AACf,cAAc,CACd,AAxUJ,8DA6UI,qBAAqB,AAErB,cAAa,AACb,aAAY,AAEZ,cA/WyB,AAgXzB,gBAAiB,AACjB,cAAe,CACf,AArVJ,mDA0VG,kBAAiB,AACjB,qBAAoB,AACpB,sBAjXqB,AAkXrB,mBAAmB,AACnB,iBAAgB,AAChB,UAjXe,CA0Xf,AAxWH,kFAmWK,gBAAiB,AACjB,6BAA0D,AAC1D,UApYgB,CAqYhB,AAtWL,6BA8WE,iBAAgB,AAChB,gBAAe,AACf,6BArX2B,AAsX3B,sBAzXyB,AA0XzB,iBAAgB,AAChB,WA1XmB,AA2XnB,gBAAgB,AAChB,mBAAkB,AAClB,qBAAgB,AAAhB,iBAAgB,AAEhB,sBAAsB,AACtB,wBAAwB,AACxB,yBAAyB,AACzB,mBAAoB,CAuFpB,AAldF,qDA8XG,sBAAqB,AACrB,wBAAuB,AACvB,sBAA2B,AAE3B,gBAAgB,AAEhB,6BAA0D,AAY1D,6BAnaiB,AAqajB,eAAgB,CAMhB,AAxZH,oEAuYI,6BAA0D,AAC1D,oBAAiC,CAKjC,AA7YJ,iGA2YK,YAAa,CACb,AA5YL,gEAqZI,mBAAkB,AAClB,kBAAkB,CAClB,AAvZJ,wDA6ZI,UAAU,CACV,AA9ZJ,kDAmaG,qBAAoB,AAEpB,aAAY,AACZ,gBAAe,AAEf,sBA9aoB,AA+apB,iBAAiB,CACjB,AA1aH,8CA8aG,YAAY,CACZ,AA/aH,6CAmbG,qBAAoB,AAEpB,aAAY,AACZ,gBAAe,AAEf,sBA9boB,AA+bpB,kBAAiB,AAEjB,gBAAe,AAEf,WApckB,AAqclB,oBAAmB,AACnB,oBAAmB,AACnB,iBAAiB,CAiBjB,AAjdH,oDAmcI,aAxcyB,CAyczB,AApcJ,sDAucI,UAAU,CACV,AAxcJ,kEA4cK,eAAc,AACd,0BAAyB,AACzB,UAAU,CACV,AA/cL,wCAsdE,kBAAiB,AACjB,QAAO,AACP,MAAK,AACL,SAAQ,AACR,SAAS,CAUT,AApeF,6CA6dG,OAAM,AACN,UAAU,CACV,AA/dH,8CAkeG,gBAAgB,CAChB,AAneH,6BAyeE,kBAAiB,AACjB,oBAAa,AAAb,aAAa,AACb,sBAAkB,AAAlB,mBAAkB,AAElB,MAAK,AACL,OAAM,AACN,YAAW,AAEX,YAAW,AACX,WAAU,AACV,0BAAyB,AACzB,iBAAiB,CA2BjB,AA/gBF,mDAwfG,qBAAoB,AAEpB,cAAa,AACb,kBAAiB,AAEjB,mBAAkB,AAElB,gBAAe,AACf,gBAAgB,AAChB,cAAc,CAad,AA9gBH,qEAqgBI,sBAAqB,AACrB,UAAU,CACV,AAvgBJ,mEA2gBI,sBAAqB,AACrB,aAAa,CACb,AAMJ,eACC,kBAAkB,AAClB,sBAAsB,AACtB,gBAA0C,AAC1C,qBA5iBuB,CA45BvB,AApXD,kCAQE,wBA/iB4B,CAgjB5B,AATF,0CAYE,sBAhjBsB,AAijBtB,cAAe,CACf,AAdF,kCAiBE,wBAnjB6B,CAojB7B,AAlBF,wCAqBE,yBAtjBkC,AAujBlC,cAAe,CACf,AAvBF,oCA0BE,sBAAqB,AACrB,eAAe,CACf,AA5BF,gCA+BE,kBAAkB,AAElB,0BAvkBkB,AAwkBlB,6BAxkBkB,AA0kBlB,8BAA+B,AAC/B,UAAU,CACV,AAtCF,4CA0CE,kBAAiB,AACjB,QAAO,AACP,SAAQ,AACR,OAAM,AACN,UAAU,CAUV,AAxDF,iDAiDG,MAAK,AACL,WAAW,CACX,AAnDH,kDAsDG,gBAAgB,CAChB,AAvDH,iCA2DE,qBAAqB,AACrB,kBAAkB,AAElB,yBAAyB,AAEzB,UAAW,CASX,AAzEF,uDAmEG,2BAzmBiB,CA0mBjB,AApEH,wDAuEG,0BA7mBiB,CA8mBjB,AAxEH,8CA4EE,sBAAqB,AAErB,YAAW,AAEX,0BAtnBkB,AAunBlB,4BAvnBkB,CA0oBlB,AApGF,oDAoFG,YAAY,CACZ,AArFH,oDAwFG,cA9oBW,CAypBX,AAnGH,0DA4FK,iBAAkB,CAKlB,AAjGL,wEA+FM,kBAAkB,CAClB,AAhGN,+BAwGE,qBAAoB,AACpB,kBAAkB,AAClB,sBAAqB,AACrB,YAAW,AACX,4BAlpBkB,AAmpBlB,sBAAqB,AACrB,mBAAkB,AAClB,gBAAe,AACf,sBAAsB,CA0LtB,AA1SF,iDAoHG,yBAnpBkB,AAopBlB,SAAU,CAMV,AA3HH,+GAwHI,WAAU,AACV,sBAAsB,CACtB,AA1HJ,yDA8HG,qBA5pBgB,CAmqBhB,AArIH,+HAgII,WAAU,AACV,uBAAsB,AAEtB,UAjqBe,CAkqBf,AApIJ,6EA0II,YAAa,CACb,AA3IJ,oDAiJG,2BAAoB,AAApB,oBAAoB,AACpB,sBAAkB,AAAlB,mBAAkB,AAElB,sBAAsB,AACtB,wBAAwB,AACxB,yBAAyB,AACzB,mBAAoB,CAcpB,AArKH,8EA2JI,SAAS,CAST,AApKJ,wGA+JK,WAAU,AACV,WAAU,AACV,eAAc,AACd,kBA9sBoB,CA+sBpB,AAnKL,2DAwKG,qBAAoB,AACpB,sBAAqB,AAErB,WAAU,AACV,UAAS,AAET,gBAAe,AACf,iBAAgB,AAEhB,8BAA6B,AAE7B,2BAztBiB,AA0tBjB,4BA1tBiB,CA2tBjB,AArLH,4DAyLG,2BAAmB,AAAnB,oBAAmB,AACnB,qBAAsB,AAAtB,uBAAsB,AACtB,sBAAkB,AAAlB,mBAAkB,AAClB,sBAAqB,AAErB,YAAW,AACX,WAAU,AAEV,iBAAgB,AAEhB,sBAxuBe,AAyuBf,kBAAiB,AACjB,0BAA4B,AAE5B,eAAe,CAmDf,AA1PH,kEA0MI,eAAc,AACd,yBAA4B,CAC5B,AA5MJ,kGA+MI,qBAAoB,AACpB,kBAAkB,AAElB,WAAW,AACX,UAAU,AAEV,sBAAuB,CAavB,AAlOJ,wGAwNK,kBAAkB,AAClB,WAAW,AACX,UAAU,AACV,QAAQ,AAER,WAAW,AACX,UAAU,AAEV,eArwBa,CAswBb,AAjOL,gGAqOI,qBAAoB,AACpB,kBAAkB,AAElB,WAAW,AACX,UAAU,AAEV,eAhxBc,CA6xBd,AAxPJ,sGA8OK,kBAAkB,AAClB,WAAW,AACX,UAAU,AACV,QAAQ,AAER,WAAW,AACX,UAAU,AAEV,eA3xBa,CA4xBb,AAvPL,qEA6PG,2BAAoB,AAApB,oBAAoB,AACpB,sBAAkB,AAAlB,mBAAkB,AAClB,qBAAsB,AAAtB,uBAAsB,AAEtB,sBAAsB,AACtB,wBAAwB,AACxB,yBAAyB,AACzB,oBAAoB,AAEpB,YAAW,AACX,WAAU,AAEV,mBAAkB,AAClB,gBAAe,AAEf,WApzBqB,AAqzBrB,gBAAgB,AAChB,eAAe,CAmBf,AAjSH,2EAiRI,UAAU,CACV,AAlRJ,sHAsRK,eAAe,CACf,AAvRL,sOA+RI,YAAY,CACZ,AAhSJ,wDAoSG,qBAAqB,AACrB,YAAW,AACX,WAAU,AAEV,kBAAkB,CAClB,AAzSH,+BA8SE,sBAAqB,AACrB,4BAr1BkB,AAs1BlB,0BAAyB,AACzB,gCAj2B2B,AAk2B3B,YAAW,AACX,kBAAiB,AACjB,gBAv2ByB,AAw2BzB,WAv2BmB,AAw2BnB,gBAAgB,AAEhB,cAAe,CA0Df,AAlXF,qCA2TG,eAAc,AACd,wBAAoD,CACpD,AA7TH,wEAiUI,kBAAiB,AACjB,kCAAkC,AAClC,mCAAmC,AACnC,6BAh3BqB,AAi3BrB,eAAgB,CAChB,AAtUJ,uDA0UG,iBAAiB,CACjB,AA3UH,uDA8UG,iBAAiB,CACjB,AA/UH,uDAkVG,iBAAiB,CACjB,AAnVH,uDAsVG,iBAAiB,CACjB,AAvVH,uDA0VG,kBAAkB,CAClB,AA3VH,uDA8VG,oBAAqB,CACrB,AA/VH,gDAmWG,qBAAqB,AACrB,QAAQ,AACR,SAAS,AACT,kBAAiB,AACjB,iCAAiC,AACjC,oCAAoC,AACpC,eAAe,AACf,8BAt5BsB,AAu5BtB,qBAAqB,CACrB,AA5WH,oCA+WG,iBAAgB,AAChB,aAh6B0B,CAi6B1B,AAKH,gBACC,kBAAkB,AAClB,qBAAoB,AACpB,sBAAqB,AAErB,gBAn6BuB,AAo6BvB,sBAl6BmB,AAm6BnB,oCAAuC,AAEvC,eAr7Ba,AAu7Bb,gBAAe,AACf,iCAAiC,AAEjC,aAAc,CAqBd,AAnCD,qCAkBE,iBAAgB,AAEhB,yBAAiB,AAAjB,qBAAiB,AAAjB,gBAAiB,CAUjB,AA9BF,kEAuBG,UAAW,CACX,AAxBH,8EA2BG,eAAe,AACf,kBAz7B2B,CA07B3B,AA7BH,0CAiCE,yBA77BkB,CA87BlB,AAGF,4BACC,kBAAkB,AAClB,qBAAoB,AACpB,sBAAqB,AAErB,iBAAgB,AAEhB,gBA18BuB,AA28BvB,sBAz8BmB,AA28BnB,eA39Ba,AA69Bb,gBAAe,AACf,iCAAiC,AAEjC,aAAc,CA6Cd,AA5DD,6DAkBE,YAAW,AAEX,UAp9BgB,CA0+BhB,AA1CF,oEAuBG,WA19BqB,AA29BrB,kBAl9BkB,CAu9BlB,AA7BH,4EA2BI,oCA99BoB,CA+9BpB,AA5BJ,qEAgCG,yBA19BkB,CA29BlB,AAjCH,mEAqCG,eAAc,AAEd,WA1+BqB,AA2+BrB,kBAl+BkB,CAm+BlB,AAzCH,+DA6CE,YAAW,AAEX,WA/+BgB,AAg/BhB,iBAAkB,CAClB,AAjDF,8DAoDE,6BAr/BkB,AAu/BlB,YAAW,AACX,gBAAe,AAEf,WAz/BgB,AA0/BhB,eAAgB,CAChB,AAKF,4BACC,kBAAkB,AAClB,MAAK,AACL,SAAQ,AACR,OAAM,AACN,QAAO,AAEP,aAAc,CACd,AAED,uEACC,sBAAuB,CACvB,AAED,uBACC,wBAAyB,CAsKzB,AAvKD,oDAKE,sBAAqB,AACrB,4BArhCkB,AAshClB,0BAAyB,AACzB,gCAjiC2B,AAkiC3B,YAAW,AACX,kBAAiB,AACjB,gBAviCyB,AAwiCzB,WAviCmB,AAwiCnB,gBAAgB,AAEhB,cAAe,CAmEf,AAlFF,0DAkBG,eAAc,AACd,wBAAoD,CACpD,AApBH,6FAwBI,kBAAiB,AACjB,kCAAkC,AAClC,mCAAmC,AACnC,6BAhjCqB,AAijCrB,eAAgB,CAChB,AA7BJ,+EAkCI,2BAA4B,CAC5B,AAnCJ,+EAwCI,2BAA4B,CAC5B,AAzCJ,+EA8CI,2BAA4B,CAC5B,AA/CJ,+EAoDI,2BAA4B,CAC5B,AArDJ,+EA0DI,4BAA6B,CAC7B,AA3DJ,4EA8DG,oBAAqB,CACrB,AA/DH,qEAmEG,qBAAqB,AACrB,QAAQ,AACR,SAAS,AACT,kBAAiB,AACjB,iCAAiC,AACjC,oCAAoC,AACpC,eAAe,AACf,8BA/lCsB,AAgmCtB,qBAAqB,CACrB,AA5EH,yDA+EG,iBAAgB,AAChB,aAzmC0B,CA0mC1B,AAjFH,mDAqFE,qBAAoB,AACpB,sBAAqB,AAErB,WAAU,AACV,UAAS,AAET,gBAAe,AACf,iBAAgB,AAEhB,8BAA6B,AAE7B,2BA/mCkB,AAgnClB,4BAhnCkB,CAinClB,AAlGF,oDAsGE,2BAAmB,AAAnB,oBAAmB,AACnB,qBAAsB,AAAtB,uBAAsB,AACtB,sBAAkB,AAAlB,mBAAkB,AAClB,sBAAqB,AAErB,YAAW,AACX,WAAU,AAEV,iBAAgB,AAEhB,sBA9nCgB,AA+nChB,kBAAiB,AACjB,0BAA4B,AAE5B,eAAe,CAkDf,AAtKF,0DAuHG,eAAc,AACd,yBAA4B,CAC5B,AAzHH,0FA4HG,qBAAoB,AACpB,kBAAkB,AAElB,WAAW,AACX,UAAU,AAEV,sBAAuB,CAavB,AA/IH,gGAqII,kBAAkB,AAClB,WAAW,AACX,UAAU,AACV,QAAQ,AAER,WAAW,AACX,UAAU,AAEV,eA3pCc,CA4pCd,AA9IJ,wFAkJG,qBAAoB,AACpB,kBAAkB,AAElB,WAAW,AACX,UAAU,AAEV,eAtqCe,CAmrCf,AArKH,8FA2JI,kBAAkB,AAClB,WAAW,AACX,UAAU,AACV,QAAQ,AAER,WAAW,AACX,UAAU,AAEV,eAjrCc,CAkrCd","file":"tabulator_site.min.css","sourcesContent":["/* Tabulator v4.7.0 (c) Oliver Folkerd */\n\n\r\n//Main Theme Variables\r\n$backgroundColor: #fff !default; //background color of tabulator\r\n$borderColor:#222 !default; //border to tabulator\r\n$textSize:14px !default; //table text size\r\n\r\n//header themeing\r\n$headerBackgroundColor:#222 !default; //border to tabulator\r\n$headerTextColor:#fff !default; //header text colour\r\n$headerBorderColor:#aaa !default;  //header border color\r\n$headerSeperatorColor:#3FB449 !default; //header bottom seperator color\r\n$headerMargin:4px !default; //padding round header\r\n\r\n//column header arrows\r\n$sortArrowActive: #3FB449 !default;\r\n$sortArrowInactive: #bbb !default;\r\n\r\n//row themeing\r\n$rowBackgroundColor:#fff !default; //table row background color\r\n$rowAltBackgroundColor:#EFEFEF !default; //table row background color\r\n$rowBorderColor:#aaa !default; //table border color\r\n$rowTextColor:#333 !default; //table text color\r\n$rowHoverBackground:#bbb !default; //row background color on hover\r\n\r\n$rowSelectedBackground: #9ABCEA !default; //row background color when selected\r\n$rowSelectedBackgroundHover: #769BCC !default;//row background color when selected and hovered\r\n\r\n$editBoxColor:#1D68CD !default; //border color for edit boxes\r\n$errorColor:#dd0000 !default; //error indication\r\n\r\n//footer themeing\r\n$footerBackgroundColor:#222 !default; //border to tabulator\r\n$footerTextColor:#222 !default; //footer text colour\r\n$footerBorderColor:#aaa !default; //footer border color\r\n$footerSeperatorColor:#3FB449 !default; //footer bottom seperator color\r\n$footerActiveColor:$footerSeperatorColor !default; //footer bottom active text color\r\n\r\n\r\n//Tabulator Containing Element\r\n.tabulator{\r\n\tposition: relative;\r\n\r\n\tborder-bottom: 5px solid $borderColor;\r\n\r\n\tbackground-color: $backgroundColor;\r\n\r\n\tfont-size:$textSize;\r\n\ttext-align: left;\r\n\toverflow:hidden;\r\n\r\n\t-webkit-transform: translatez(0);\r\n\t-moz-transform: translatez(0);\r\n\t-ms-transform: translatez(0);\r\n\t-o-transform: translatez(0);\r\n\ttransform: translatez(0);\r\n\r\n\t&[tabulator-layout=\"fitDataFill\"]{\r\n\t\t.tabulator-tableHolder{\r\n\t\t\t.tabulator-table{\r\n\t\t\t\tmin-width:100%;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t&[tabulator-layout=\"fitDataTable\"]{\r\n\t\tdisplay: inline-block;\r\n\t}\r\n\r\n\t&[tabulator-layout=\"fitColumns\"]{\r\n\t\t.tabulator-row{\r\n\t\t\t.tabulator-cell{\r\n\t\t\t\t&:last-of-type{\r\n\t\t\t\t\tborder-right: none;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t&.tabulator-block-select{\r\n\t\tuser-select: none;\r\n\t}\r\n\r\n\t//column header containing element\r\n\t.tabulator-header{\r\n\t\tposition:relative;\r\n\t\tbox-sizing: border-box;\r\n\r\n\t\twidth:100%;\r\n\r\n\t\tborder-bottom:3px solid $headerSeperatorColor;\r\n\t\tbackground-color: $headerBackgroundColor;\r\n\t\tcolor: $headerTextColor;\r\n\t\tfont-weight:bold;\r\n\r\n\t\twhite-space: nowrap;\r\n\t\toverflow:hidden;\r\n\r\n\t\t-moz-user-select: none;\r\n\t\t-khtml-user-select: none;\r\n\t\t-webkit-user-select: none;\r\n\t\t-o-user-select: none;\r\n\r\n\t\t&.tabulator-header-hidden{\r\n\t\t\tdisplay:none;\r\n\t\t}\r\n\r\n\t\t//individual column header element\r\n\t\t.tabulator-col{\r\n\t\t\tdisplay:inline-block;\r\n\r\n\t\t\tposition:relative;\r\n\t\t\tbox-sizing:border-box;\r\n\t\t\tborder-right:1px solid $headerBorderColor;\r\n\t\t\tbackground-color: $headerBackgroundColor;\r\n\t\t\ttext-align:left;\r\n\t\t\tvertical-align: bottom;\r\n\t\t\toverflow: hidden;\r\n\r\n\t\t\t&.tabulator-moving{\r\n\t\t\t\tposition: absolute;\r\n\t\t\t\tborder:1px solid  $headerSeperatorColor;\r\n\t\t\t\tbackground:darken($headerBackgroundColor, 10%);\r\n\t\t\t\tpointer-events: none;\r\n\t\t\t}\r\n\r\n\t\t\t//hold content of column header\r\n\t\t\t.tabulator-col-content{\r\n\t\t\t\tbox-sizing:border-box;\r\n\t\t\t\tposition: relative;\r\n\t\t\t\tpadding:8px;\r\n\r\n\t\t\t\t//header menu button\r\n\t\t\t\t.tabulator-header-menu-button{\r\n\t\t\t\t\tpadding: 0 8px;\r\n\r\n\t\t\t\t\t&:hover{\r\n\t\t\t\t\t\tcursor: pointer;\r\n\t\t\t\t\t\topacity: .6;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t//hold title of column header\r\n\t\t\t\t.tabulator-col-title{\r\n\t\t\t\t\tbox-sizing:border-box;\r\n\t\t\t\t\twidth: 100%;\r\n\r\n\t\t\t\t\twhite-space: nowrap;\r\n\t\t\t\t\toverflow: hidden;\r\n\t\t\t\t\ttext-overflow: ellipsis;\r\n\t\t\t\t\tvertical-align:bottom;\r\n\r\n\t\t\t\t\t//element to hold title editor\r\n\t\t\t\t\t.tabulator-title-editor{\r\n\t\t\t\t\t\tbox-sizing: border-box;\r\n\t\t\t\t\t\twidth: 100%;\r\n\r\n\t\t\t\t\t\tborder:1px solid #999;\r\n\r\n\t\t\t\t\t\tpadding:1px;\r\n\r\n\t\t\t\t\t\tbackground: #fff;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t//column sorter arrow\r\n\t\t\t\t.tabulator-arrow{\r\n\t\t\t\t\tdisplay: inline-block;\r\n\t\t\t\t\tposition: absolute;\r\n\t\t\t\t\ttop:14px;\r\n\t\t\t\t\tright:8px;\r\n\t\t\t\t\twidth: 0;\r\n\t\t\t\t\theight: 0;\r\n\t\t\t\t\tborder-left: 6px solid transparent;\r\n\t\t\t\t\tborder-right: 6px solid transparent;\r\n\t\t\t\t\tborder-bottom: 6px solid $sortArrowInactive;\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t\t//complex header column group\r\n\t\t\t&.tabulator-col-group{\r\n\r\n\t\t\t\t//gelement to hold sub columns in column group\r\n\t\t\t\t.tabulator-col-group-cols{\r\n\t\t\t\t\tposition:relative;\r\n\t\t\t\t\tdisplay: flex;\r\n\r\n\t\t\t\t\tborder-top:1px solid $headerBorderColor;\r\n\t\t\t\t\toverflow: hidden;\r\n\r\n\t\t\t\t\tmargin-right:-1px;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t//hide left resize handle on first column\r\n\t\t\t&:first-child{\r\n\t\t\t\t.tabulator-col-resize-handle.prev{\r\n\t\t\t\t\tdisplay: none;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t//header filter containing element\r\n\t\t\t.tabulator-header-filter{\r\n\t\t\t\tposition: relative;\r\n\t\t\t\tbox-sizing: border-box;\r\n\t\t\t\tmargin-top:2px;\r\n\t\t\t\twidth:100%;\r\n\t\t\t\ttext-align: center;\r\n\r\n\t\t\t\t//styling adjustment for inbuilt editors\r\n\t\t\t\ttextarea{\r\n\t\t\t\t\theight:auto !important;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tsvg{\r\n\t\t\t\t\tmargin-top: 3px;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tinput{\r\n\t\t\t\t\t&::-ms-clear {\r\n\t\t\t\t\t  width : 0;\r\n\t\t\t\t\t  height: 0;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t//styling child elements for sortable columns\r\n\t\t\t&.tabulator-sortable{\r\n\t\t\t\t.tabulator-col-title{\r\n\t\t\t\t\tpadding-right:25px;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t&:hover{\r\n\t\t\t\t\tcursor:pointer;\r\n\t\t\t\t\tbackground-color:darken($headerBackgroundColor, 10%);\r\n\t\t\t\t}\r\n\r\n\t\t\t\t&[aria-sort=\"none\"]{\r\n\t\t\t\t\t.tabulator-col-content .tabulator-arrow{\r\n\t\t\t\t\t\tborder-top: none;\r\n\t\t\t\t\t\tborder-bottom: 6px solid $sortArrowInactive;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t&[aria-sort=\"asc\"]{\r\n\t\t\t\t\t.tabulator-col-content .tabulator-arrow{\r\n\t\t\t\t\t\tborder-top: none;\r\n\t\t\t\t\t\tborder-bottom: 6px solid $sortArrowActive;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t&[aria-sort=\"desc\"]{\r\n\t\t\t\t\t.tabulator-col-content .tabulator-arrow{\r\n\t\t\t\t\t\tborder-top: 6px solid $sortArrowActive;\r\n\t\t\t\t\t\tborder-bottom: none;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t&.tabulator-col-vertical{\r\n\t\t\t\t.tabulator-col-content{\r\n\t\t\t\t\t.tabulator-col-title{\r\n\t\t\t\t\t\twriting-mode: vertical-rl;\r\n\t\t\t\t\t\ttext-orientation: mixed;\r\n\r\n\t\t\t\t\t\tdisplay:flex;\r\n\t\t\t\t\t\talign-items:center;\r\n\t\t\t\t\t\tjustify-content:center;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t&.tabulator-col-vertical-flip{\r\n\t\t\t\t\t.tabulator-col-title{\r\n\t\t\t\t\t\ttransform: rotate(180deg);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t&.tabulator-sortable{\r\n\t\t\t\t\t.tabulator-col-title{\r\n\t\t\t\t\t\tpadding-right:0;\r\n\t\t\t\t\t\tpadding-top:20px;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t&.tabulator-col-vertical-flip{\r\n\t\t\t\t\t\t.tabulator-col-title{\r\n\t\t\t\t\t\t\tpadding-right:0;\r\n\t\t\t\t\t\t\tpadding-bottom:20px;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t.tabulator-arrow{\r\n\t\t\t\t\t\tright:calc(50% - 6px);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\t.tabulator-frozen{\r\n\t\t\tdisplay: inline-block;\r\n\t\t\tposition: absolute;\r\n\r\n\t\t\t// background-color: inherit;\r\n\r\n\t\t\tz-index: 10;\r\n\r\n\t\t\t&.tabulator-frozen-left{\r\n\t\t\t\tborder-right:2px solid $rowBorderColor;\r\n\t\t\t}\r\n\r\n\t\t\t&.tabulator-frozen-right{\r\n\t\t\t\tborder-left:2px solid $rowBorderColor;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t.tabulator-calcs-holder{\r\n\t\t\tbox-sizing:border-box;\r\n\t\t\tmin-width:600%;\r\n\r\n\t\t\tbackground:lighten($headerBackgroundColor, 10%) !important;\r\n\r\n\t\t\t.tabulator-row{\r\n\t\t\t\tbackground:lighten($headerBackgroundColor, 10%) !important;\r\n\r\n\t\t\t\t.tabulator-col-resize-handle{\r\n\t\t\t\t\tdisplay: none;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tborder-top:1px solid $rowBorderColor;\r\n\t\t\t// border-bottom:1px solid $headerBorderColor;\r\n\r\n\t\t\toverflow: hidden;\r\n\t\t}\r\n\r\n\t\t.tabulator-frozen-rows-holder{\r\n\t\t\tmin-width:600%;\r\n\r\n\t\t\t&:empty{\r\n\t\t\t\tdisplay: none;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//scrolling element to hold table\r\n\t.tabulator-tableHolder{\r\n\t\tposition:relative;\r\n\t\twidth:100%;\r\n\t\twhite-space: nowrap;\r\n\t\toverflow:auto;\r\n\t\t-webkit-overflow-scrolling: touch;\r\n\r\n\t\t&:focus{\r\n\t\t\toutline: none;\r\n\t\t}\r\n\r\n\t\t//default placeholder element\r\n\t\t.tabulator-placeholder{\r\n\t\t\tbox-sizing:border-box;\r\n\t\t\tdisplay: flex;\r\n\t\t\talign-items:center;\r\n\r\n\t\t\t&[tabulator-render-mode=\"virtual\"]{\r\n\t\t\t\tmin-height:100%;\r\n\t\t\t\tmin-width:100%;\r\n\t\t\t}\r\n\r\n\t\t\twidth:100%;\r\n\r\n\t\t\tspan{\r\n\t\t\t\tdisplay: inline-block;\r\n\r\n\t\t\t\tmargin:0 auto;\r\n\t\t\t\tpadding:10px;\r\n\r\n\t\t\t\tcolor:$headerSeperatorColor;\r\n\t\t\t\tfont-weight: bold;\r\n\t\t\t\tfont-size: 20px;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t//element to hold table rows\r\n\t\t.tabulator-table{\r\n\t\t\tposition:relative;\r\n\t\t\tdisplay:inline-block;\r\n\t\t\tbackground-color:$rowBackgroundColor;\r\n\t\t\twhite-space: nowrap;\r\n\t\t\toverflow:visible;\r\n\t\t\tcolor:$rowTextColor;\r\n\r\n\t\t\t.tabulator-row{\r\n\t\t\t\t&.tabulator-calcs{\r\n\t\t\t\t\tfont-weight: bold;\r\n\t\t\t\t\tbackground:lighten($headerBackgroundColor, 15%) !important;\r\n\t\t\t\t\tcolor:$headerTextColor;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t//footer element\r\n\t.tabulator-footer{\r\n\t\tpadding:5px 10px;\r\n\t\tpadding-top:8px;\r\n\t\tborder-top:3px solid $footerSeperatorColor;\r\n\t\tbackground-color: $footerBackgroundColor;\r\n\t\ttext-align:right;\r\n\t\tcolor: $footerTextColor;\r\n\t\tfont-weight:bold;\r\n\t\twhite-space:nowrap;\r\n\t\tuser-select:none;\r\n\r\n\t\t-moz-user-select: none;\r\n\t\t-khtml-user-select: none;\r\n\t\t-webkit-user-select: none;\r\n\t\t-o-user-select: none;\r\n\r\n\t\t.tabulator-calcs-holder{\r\n\t\t\tbox-sizing:border-box;\r\n\t\t\twidth:calc(100% + 20px);\r\n\t\t\tmargin:-8px -10px 8px -10px;\r\n\r\n\t\t\ttext-align: left;\r\n\r\n\t\t\tbackground:lighten($footerBackgroundColor, 10%) !important;\r\n\r\n\t\t\t.tabulator-row{\r\n\t\t\t\tbackground:lighten($footerBackgroundColor, 10%) !important;\r\n\t\t\t\tcolor:$headerTextColor !important;\r\n\r\n\t\t\t\t.tabulator-col-resize-handle{\r\n\t\t\t\t\tdisplay: none;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// border-top:1px solid $rowBorderColor;\r\n\t\t\tborder-bottom:1px solid $rowBorderColor;\r\n\r\n\t\t\toverflow: hidden;\r\n\r\n\t\t\t&:only-child{\r\n\t\t\t\tmargin-bottom:-5px;\r\n\t\t\t\tborder-bottom:none;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t//pagination container element\r\n\t\t.tabulator-paginator{\r\n\t\t\tlabel{\r\n\t\t\t\tcolor:#fff;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t//page size select element\r\n\t\t.tabulator-page-size{\r\n\t\t\tdisplay:inline-block;\r\n\r\n\t\t\tmargin:0 5px;\r\n\t\t\tpadding:2px 5px;\r\n\r\n\t\t\tborder:1px solid $footerBorderColor;\r\n\t\t\tborder-radius:3px;\r\n\t\t}\r\n\r\n\t\t//pagination container element\r\n\t\t.tabulator-pages{\r\n\t\t\tmargin:0 7px;\r\n\t\t}\r\n\r\n\t\t//pagination button\r\n\t\t.tabulator-page{\r\n\t\t\tdisplay:inline-block;\r\n\r\n\t\t\tmargin:0 2px;\r\n\t\t\tpadding:2px 5px;\r\n\r\n\t\t\tborder:1px solid $footerBorderColor;\r\n\t\t\tborder-radius:3px;\r\n\r\n\t\t\tbackground:#fff;\r\n\r\n\t\t\tcolor: $footerTextColor;\r\n\t\t\tfont-family:inherit;\r\n\t\t\tfont-weight:inherit;\r\n\t\t\tfont-size:inherit;\r\n\r\n\t\t\t&.active{\r\n\t\t\t\tcolor:$footerActiveColor;\r\n\t\t\t}\r\n\r\n\t\t\t&:disabled{\r\n\t\t\t\topacity:.5;\r\n\t\t\t}\r\n\r\n\t\t\t&:not(.disabled){\r\n\t\t\t\t&:hover{\r\n\t\t\t\t\tcursor:pointer;\r\n\t\t\t\t\tbackground:rgba(0,0,0,.2);\r\n\t\t\t\t\tcolor:#fff;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//column resize handles\r\n\t.tabulator-col-resize-handle{\r\n\t\tposition:absolute;\r\n\t\tright:0;\r\n\t\ttop:0;\r\n\t\tbottom:0;\r\n\t\twidth:5px;\r\n\r\n\t\t&.prev{\r\n\t\t\tleft:0;\r\n\t\t\tright:auto;\r\n\t\t}\r\n\r\n\t\t&:hover{\r\n\t\t\tcursor:ew-resize;\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t//holding div that contains loader and covers tabulator element to prevent interaction\r\n\t.tabulator-loader{\r\n\t\tposition:absolute;\r\n\t\tdisplay: flex;\r\n\t\talign-items:center;\r\n\r\n\t\ttop:0;\r\n\t\tleft:0;\r\n\t\tz-index:100;\r\n\r\n\t\theight:100%;\r\n\t\twidth:100%;\r\n\t\tbackground:rgba(0,0,0,.4);\r\n\t\ttext-align:center;\r\n\r\n\t\t//loading message element\r\n\t\t.tabulator-loader-msg{\r\n\t\t\tdisplay:inline-block;\r\n\r\n\t\t\tmargin:0 auto;\r\n\t\t\tpadding:10px 20px;\r\n\r\n\t\t\tborder-radius:10px;\r\n\r\n\t\t\tbackground:#fff;\r\n\t\t\tfont-weight:bold;\r\n\t\t\tfont-size:16px;\r\n\r\n\t\t\t//loading message\r\n\t\t\t&.tabulator-loading{\r\n\t\t\t\tborder:4px solid #333;\r\n\t\t\t\tcolor:#000;\r\n\t\t\t}\r\n\r\n\t\t\t//error message\r\n\t\t\t&.tabulator-error{\r\n\t\t\t\tborder:4px solid #D00;\r\n\t\t\t\tcolor:#590000;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n\r\n//row element\r\n.tabulator-row{\r\n\tposition: relative;\r\n\tbox-sizing: border-box;\r\n\tmin-height:$textSize + ($headerMargin * 2);\r\n\tbackground-color: $rowBackgroundColor;\r\n\r\n\r\n\t&.tabulator-row-even{\r\n\t\tbackground-color: $rowAltBackgroundColor;\r\n\t}\r\n\r\n\t&.tabulator-selectable:hover{\r\n\t\tbackground-color:$rowHoverBackground;\r\n\t\tcursor: pointer;\r\n\t}\r\n\r\n\t&.tabulator-selected{\r\n\t\tbackground-color:$rowSelectedBackground;\r\n\t}\r\n\r\n\t&.tabulator-selected:hover{\r\n\t\tbackground-color:$rowSelectedBackgroundHover;\r\n\t\tcursor: pointer;\r\n\t}\r\n\r\n\t&.tabulator-row-moving{\r\n\t\tborder:1px solid #000;\r\n\t\tbackground:#fff;\r\n\t}\r\n\r\n\t&.tabulator-moving{\r\n\t\tposition: absolute;\r\n\r\n\t\tborder-top:1px solid  $rowBorderColor;\r\n\t\tborder-bottom:1px solid  $rowBorderColor;\r\n\r\n\t\tpointer-events: none !important;\r\n\t\tz-index:15;\r\n\t}\r\n\r\n\t//row resize handles\r\n\t.tabulator-row-resize-handle{\r\n\t\tposition:absolute;\r\n\t\tright:0;\r\n\t\tbottom:0;\r\n\t\tleft:0;\r\n\t\theight:5px;\r\n\r\n\t\t&.prev{\r\n\t\t\ttop:0;\r\n\t\t\tbottom:auto;\r\n\t\t}\r\n\r\n\t\t&:hover{\r\n\t\t\tcursor:ns-resize;\r\n\t\t}\r\n\t}\r\n\r\n\t.tabulator-frozen{\r\n\t\tdisplay: inline-block;\r\n\t\tposition: absolute;\r\n\r\n\t\tbackground-color: inherit;\r\n\r\n\t\tz-index: 10;\r\n\r\n\t\t&.tabulator-frozen-left{\r\n\t\t\tborder-right:2px solid $rowBorderColor;\r\n\t\t}\r\n\r\n\t\t&.tabulator-frozen-right{\r\n\t\t\tborder-left:2px solid $rowBorderColor;\r\n\t\t}\r\n\t}\r\n\r\n\t.tabulator-responsive-collapse{\r\n\t\tbox-sizing:border-box;\r\n\r\n\t\tpadding:5px;\r\n\r\n\t\tborder-top:1px solid $rowBorderColor;\r\n\t\tborder-bottom:1px solid $rowBorderColor;\r\n\r\n\t\t&:empty{\r\n\t\t\tdisplay:none;\r\n\t\t}\r\n\r\n\t\ttable{\r\n\t\t\tfont-size:$textSize;\r\n\r\n\t\t\ttr{\r\n\t\t\t\ttd{\r\n\t\t\t\t\tposition: relative;\r\n\r\n\t\t\t\t\t&:first-of-type{\r\n\t\t\t\t\t\tpadding-right:10px;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//cell element\r\n\t.tabulator-cell{\r\n\t\tdisplay:inline-block;\r\n\t\tposition: relative;\r\n\t\tbox-sizing:border-box;\r\n\t\tpadding:6px;\r\n\t\tborder-right:1px solid $rowBorderColor;\r\n\t\tvertical-align:middle;\r\n\t\twhite-space:nowrap;\r\n\t\toverflow:hidden;\r\n\t\ttext-overflow:ellipsis;\r\n\r\n\r\n\t\t&.tabulator-editing{\r\n\t\t\tborder:1px solid  $editBoxColor;\r\n\t\t\tpadding: 0;\r\n\r\n\t\t\tinput, select{\r\n\t\t\t\tborder:1px;\r\n\t\t\t\tbackground:transparent;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t&.tabulator-validation-fail{\r\n\t\t\tborder:1px solid $errorColor;\r\n\t\t\tinput, select{\r\n\t\t\t\tborder:1px;\r\n\t\t\t\tbackground:transparent;\r\n\r\n\t\t\t\tcolor: $errorColor;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t//hide left resize handle on first column\r\n\t\t&:first-child{\r\n\t\t\t.tabulator-col-resize-handle.prev{\r\n\t\t\t\tdisplay: none;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t//movable row handle\r\n\t\t&.tabulator-row-handle{\r\n\r\n\t\t\tdisplay: inline-flex;\r\n\t\t\talign-items:center;\r\n\r\n\t\t\t-moz-user-select: none;\r\n\t\t\t-khtml-user-select: none;\r\n\t\t\t-webkit-user-select: none;\r\n\t\t\t-o-user-select: none;\r\n\r\n\t\t\t//handle holder\r\n\t\t\t.tabulator-row-handle-box{\r\n\t\t\t\twidth:80%;\r\n\r\n\t\t\t\t//Hamburger element\r\n\t\t\t\t.tabulator-row-handle-bar{\r\n\t\t\t\t\twidth:100%;\r\n\t\t\t\t\theight:3px;\r\n\t\t\t\t\tmargin-top:2px;\r\n\t\t\t\t\tbackground:$sortArrowActive;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t.tabulator-data-tree-branch{\r\n\t\t\tdisplay:inline-block;\r\n\t\t\tvertical-align:middle;\r\n\r\n\t\t\theight:9px;\r\n\t\t\twidth:7px;\r\n\r\n\t\t\tmargin-top:-9px;\r\n\t\t\tmargin-right:5px;\r\n\r\n\t\t\tborder-bottom-left-radius:1px;\r\n\r\n\t\t\tborder-left:2px solid $rowBorderColor;\r\n\t\t\tborder-bottom:2px solid $rowBorderColor;\r\n\t\t}\r\n\r\n\t\t.tabulator-data-tree-control{\r\n\r\n\t\t\tdisplay:inline-flex;\r\n\t\t\tjustify-content:center;\r\n\t\t\talign-items:center;\r\n\t\t\tvertical-align:middle;\r\n\r\n\t\t\theight:11px;\r\n\t\t\twidth:11px;\r\n\r\n\t\t\tmargin-right:5px;\r\n\r\n\t\t\tborder:1px solid $rowTextColor;\r\n\t\t\tborder-radius:2px;\r\n\t\t\tbackground:rgba(0, 0, 0, .1);\r\n\r\n\t\t\toverflow:hidden;\r\n\r\n\t\t\t&:hover{\r\n\t\t\t\tcursor:pointer;\r\n\t\t\t\tbackground:rgba(0, 0, 0, .2);\r\n\t\t\t}\r\n\r\n\t\t\t.tabulator-data-tree-control-collapse{\r\n\t\t\t\tdisplay:inline-block;\r\n\t\t\t\tposition: relative;\r\n\r\n\t\t\t\theight: 7px;\r\n\t\t\t\twidth: 1px;\r\n\r\n\t\t\t\tbackground: transparent;\r\n\r\n\t\t\t\t&:after {\r\n\t\t\t\t\tposition: absolute;\r\n\t\t\t\t\tcontent: \"\";\r\n\t\t\t\t\tleft: -3px;\r\n\t\t\t\t\ttop: 3px;\r\n\r\n\t\t\t\t\theight: 1px;\r\n\t\t\t\t\twidth: 7px;\r\n\r\n\t\t\t\t\tbackground: $rowTextColor;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t.tabulator-data-tree-control-expand{\r\n\t\t\t\tdisplay:inline-block;\r\n\t\t\t\tposition: relative;\r\n\r\n\t\t\t\theight: 7px;\r\n\t\t\t\twidth: 1px;\r\n\r\n\t\t\t\tbackground: $rowTextColor;\r\n\r\n\t\t\t\t&:after {\r\n\t\t\t\t\tposition: absolute;\r\n\t\t\t\t\tcontent: \"\";\r\n\t\t\t\t\tleft: -3px;\r\n\t\t\t\t\ttop: 3px;\r\n\r\n\t\t\t\t\theight: 1px;\r\n\t\t\t\t\twidth: 7px;\r\n\r\n\t\t\t\t\tbackground: $rowTextColor;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\t.tabulator-responsive-collapse-toggle{\r\n\t\t\tdisplay: inline-flex;\r\n\t\t\talign-items:center;\r\n\t\t\tjustify-content:center;\r\n\r\n\t\t\t-moz-user-select: none;\r\n\t\t\t-khtml-user-select: none;\r\n\t\t\t-webkit-user-select: none;\r\n\t\t\t-o-user-select: none;\r\n\r\n\t\t\theight:15px;\r\n\t\t\twidth:15px;\r\n\r\n\t\t\tborder-radius:20px;\r\n\t\t\tbackground:#666;\r\n\r\n\t\t\tcolor:$rowBackgroundColor;\r\n\t\t\tfont-weight:bold;\r\n\t\t\tfont-size:1.1em;\r\n\r\n\t\t\t&:hover{\r\n\t\t\t\topacity:.7;\r\n\t\t\t}\r\n\r\n\t\t\t&.open{\r\n\t\t\t\t.tabulator-responsive-collapse-toggle-close{\r\n\t\t\t\t\tdisplay:initial;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t.tabulator-responsive-collapse-toggle-open{\r\n\t\t\t\t\tdisplay:none;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t.tabulator-responsive-collapse-toggle-close{\r\n\t\t\t\tdisplay:none;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t.tabulator-traffic-light{\r\n\t\t\tdisplay: inline-block;\r\n\t\t\theight:14px;\r\n\t\t\twidth:14px;\r\n\r\n\t\t\tborder-radius:14px;\r\n\t\t}\r\n\t}\r\n\r\n\t//row grouping element\r\n\t&.tabulator-group{\r\n\t\tbox-sizing:border-box;\r\n\t\tborder-right:1px solid $rowBorderColor;\r\n\t\tborder-top:1px solid #000;\r\n\t\tborder-bottom:2px solid $headerSeperatorColor;\r\n\t\tpadding:5px;\r\n\t\tpadding-left:10px;\r\n\t\tbackground:$headerBackgroundColor;\r\n\t\tcolor:$headerTextColor;\r\n\t\tfont-weight:bold;\r\n\r\n\t\tmin-width: 100%;\r\n\r\n\t\t&:hover{\r\n\t\t\tcursor:pointer;\r\n\t\t\tbackground-color:darken($headerBackgroundColor, 10%);\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-visible{\r\n\t\t\t.tabulator-arrow{\r\n\t\t\t\tmargin-right:10px;\r\n\t\t\t\tborder-left: 6px solid transparent;\r\n\t\t\t\tborder-right: 6px solid transparent;\r\n\t\t\t\tborder-top: 6px solid $sortArrowActive;\r\n\t\t\t\tborder-bottom: 0;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-1{\r\n\t\t\tpadding-left:30px;\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-2{\r\n\t\t\tpadding-left:50px;\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-3{\r\n\t\t\tpadding-left:70px;\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-4{\r\n\t\t\tpadding-left:90px;\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-5{\r\n\t\t\tpadding-left:110px;\r\n\t\t}\r\n\r\n\t\t.tabulator-group-toggle{\r\n\t\t\tdisplay: inline-block;\r\n\t\t}\r\n\r\n\t\t//sorting arrow\r\n\t\t.tabulator-arrow{\r\n\t\t\tdisplay: inline-block;\r\n\t\t\twidth: 0;\r\n\t\t\theight: 0;\r\n\t\t\tmargin-right:16px;\r\n\t\t\tborder-top: 6px solid transparent;\r\n\t\t\tborder-bottom: 6px solid transparent;\r\n\t\t\tborder-right: 0;\r\n\t\t\tborder-left: 6px solid $sortArrowActive;\r\n\t\t\tvertical-align:middle;\r\n\t\t}\r\n\r\n\t\tspan{\r\n\t\t\tmargin-left:10px;\r\n\t\t\tcolor:$headerSeperatorColor;\r\n\t\t}\r\n\t}\r\n\r\n}\r\n\r\n.tabulator-menu{\r\n\tposition: absolute;\r\n\tdisplay:inline-block;\r\n\tbox-sizing:border-box;\r\n\r\n\tbackground:$rowBackgroundColor;\r\n\tborder:1px solid $rowBorderColor;\r\n\tbox-shadow: 0 0 5px 0 rgba(0, 0, 0, .2);\r\n\r\n\tfont-size:$textSize;\r\n\r\n\toverflow-y:auto;\r\n\t-webkit-overflow-scrolling: touch;\r\n\r\n\tz-index: 10000;\r\n\r\n\t.tabulator-menu-item{\r\n\r\n\t\tpadding:5px 10px;\r\n\r\n\t\tuser-select: none;\r\n\r\n\t\t&.tabulator-menu-item-disabled{\r\n\t\t\topacity: .5;\r\n\t\t}\r\n\r\n\t\t&:not(.tabulator-menu-item-disabled):hover{\r\n\t\t\tcursor: pointer;\r\n\t\t\tbackground: $rowAltBackgroundColor;\r\n\t\t}\r\n\t}\r\n\r\n\t.tabulator-menu-separator{\r\n\t\tborder-top:1px solid $rowBorderColor;\r\n\t}\r\n}\r\n\r\n.tabulator-edit-select-list{\r\n\tposition: absolute;\r\n\tdisplay:inline-block;\r\n\tbox-sizing:border-box;\r\n\r\n\tmax-height:200px;\r\n\r\n\tbackground:$rowBackgroundColor;\r\n\tborder:1px solid $rowBorderColor;\r\n\r\n\tfont-size:$textSize;\r\n\r\n\toverflow-y:auto;\r\n\t-webkit-overflow-scrolling: touch;\r\n\r\n\tz-index: 10000;\r\n\r\n\t.tabulator-edit-select-list-item{\r\n\t\tpadding:4px;\r\n\r\n\t\tcolor:$rowTextColor;\r\n\r\n\t\t&.active{\r\n\t\t\tcolor:$rowBackgroundColor;\r\n\t\t\tbackground:$editBoxColor;\r\n\r\n\t\t\t&.focused{\r\n\t\t\t\toutline:1px solid rgba($rowBackgroundColor, .5);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t&.focused{\r\n\t\t\toutline:1px solid $editBoxColor;\r\n\t\t}\r\n\r\n\r\n\t\t&:hover{\r\n\t\t\tcursor:pointer;\r\n\r\n\t\t\tcolor:$rowBackgroundColor;\r\n\t\t\tbackground:$editBoxColor;\r\n\t\t}\r\n\t}\r\n\r\n\t.tabulator-edit-select-list-notice{\r\n\t\tpadding:4px;\r\n\r\n\t\tcolor:$rowTextColor;\r\n\t\ttext-align: center;\r\n\t}\r\n\r\n\t.tabulator-edit-select-list-group{\r\n\t\tborder-bottom:1px solid $rowBorderColor;\r\n\r\n\t\tpadding:4px;\r\n\t\tpadding-top:6px;\r\n\r\n\t\tcolor:$rowTextColor;\r\n\t\tfont-weight:bold;\r\n\t}\r\n}\r\n\r\n// Table print styling\r\n\r\n.tabulator-print-fullscreen{\r\n\tposition: absolute;\r\n\ttop:0;\r\n\tbottom:0;\r\n\tleft:0;\r\n\tright:0;\r\n\r\n\tz-index: 10000;\r\n}\r\n\r\nbody.tabulator-print-fullscreen-hide>*:not(.tabulator-print-fullscreen){\r\n\tdisplay:none !important;\r\n}\r\n\r\n.tabulator-print-table{\r\n\tborder-collapse: collapse;\r\n\r\n\t//row grouping element\r\n\t.tabulator-print-table-group{\r\n\t\tbox-sizing:border-box;\r\n\t\tborder-right:1px solid $rowBorderColor;\r\n\t\tborder-top:1px solid #000;\r\n\t\tborder-bottom:2px solid $headerSeperatorColor;\r\n\t\tpadding:5px;\r\n\t\tpadding-left:10px;\r\n\t\tbackground:$headerBackgroundColor;\r\n\t\tcolor:$headerTextColor;\r\n\t\tfont-weight:bold;\r\n\r\n\t\tmin-width: 100%;\r\n\r\n\t\t&:hover{\r\n\t\t\tcursor:pointer;\r\n\t\t\tbackground-color:darken($headerBackgroundColor, 10%);\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-visible{\r\n\t\t\t.tabulator-arrow{\r\n\t\t\t\tmargin-right:10px;\r\n\t\t\t\tborder-left: 6px solid transparent;\r\n\t\t\t\tborder-right: 6px solid transparent;\r\n\t\t\t\tborder-top: 6px solid $sortArrowActive;\r\n\t\t\t\tborder-bottom: 0;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-1{\r\n\t\t\ttd{\r\n\t\t\t\tpadding-left:30px !important;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-2{\r\n\t\t\ttd{\r\n\t\t\t\tpadding-left:50px !important;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-3{\r\n\t\t\ttd{\r\n\t\t\t\tpadding-left:70px !important;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-4{\r\n\t\t\ttd{\r\n\t\t\t\tpadding-left:90px !important;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-5{\r\n\t\t\ttd{\r\n\t\t\t\tpadding-left:110px !important;\r\n\t\t\t}\r\n\t\t}\r\n\t\t.tabulator-group-toggle{\r\n\t\t\tdisplay: inline-block;\r\n\t\t}\r\n\r\n\t\t//sorting arrow\r\n\t\t.tabulator-arrow{\r\n\t\t\tdisplay: inline-block;\r\n\t\t\twidth: 0;\r\n\t\t\theight: 0;\r\n\t\t\tmargin-right:16px;\r\n\t\t\tborder-top: 6px solid transparent;\r\n\t\t\tborder-bottom: 6px solid transparent;\r\n\t\t\tborder-right: 0;\r\n\t\t\tborder-left: 6px solid $sortArrowActive;\r\n\t\t\tvertical-align:middle;\r\n\t\t}\r\n\r\n\t\tspan{\r\n\t\t\tmargin-left:10px;\r\n\t\t\tcolor:$headerSeperatorColor;\r\n\t\t}\r\n\t}\r\n\r\n\t.tabulator-data-tree-branch{\r\n\t\tdisplay:inline-block;\r\n\t\tvertical-align:middle;\r\n\r\n\t\theight:9px;\r\n\t\twidth:7px;\r\n\r\n\t\tmargin-top:-9px;\r\n\t\tmargin-right:5px;\r\n\r\n\t\tborder-bottom-left-radius:1px;\r\n\r\n\t\tborder-left:2px solid $rowBorderColor;\r\n\t\tborder-bottom:2px solid $rowBorderColor;\r\n\t}\r\n\r\n\t.tabulator-data-tree-control{\r\n\r\n\t\tdisplay:inline-flex;\r\n\t\tjustify-content:center;\r\n\t\talign-items:center;\r\n\t\tvertical-align:middle;\r\n\r\n\t\theight:11px;\r\n\t\twidth:11px;\r\n\r\n\t\tmargin-right:5px;\r\n\r\n\t\tborder:1px solid $rowTextColor;\r\n\t\tborder-radius:2px;\r\n\t\tbackground:rgba(0, 0, 0, .1);\r\n\r\n\t\toverflow:hidden;\r\n\r\n\t\t&:hover{\r\n\t\t\tcursor:pointer;\r\n\t\t\tbackground:rgba(0, 0, 0, .2);\r\n\t\t}\r\n\r\n\t\t.tabulator-data-tree-control-collapse{\r\n\t\t\tdisplay:inline-block;\r\n\t\t\tposition: relative;\r\n\r\n\t\t\theight: 7px;\r\n\t\t\twidth: 1px;\r\n\r\n\t\t\tbackground: transparent;\r\n\r\n\t\t\t&:after {\r\n\t\t\t\tposition: absolute;\r\n\t\t\t\tcontent: \"\";\r\n\t\t\t\tleft: -3px;\r\n\t\t\t\ttop: 3px;\r\n\r\n\t\t\t\theight: 1px;\r\n\t\t\t\twidth: 7px;\r\n\r\n\t\t\t\tbackground: $rowTextColor;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t.tabulator-data-tree-control-expand{\r\n\t\t\tdisplay:inline-block;\r\n\t\t\tposition: relative;\r\n\r\n\t\t\theight: 7px;\r\n\t\t\twidth: 1px;\r\n\r\n\t\t\tbackground: $rowTextColor;\r\n\r\n\t\t\t&:after {\r\n\t\t\t\tposition: absolute;\r\n\t\t\t\tcontent: \"\";\r\n\t\t\t\tleft: -3px;\r\n\t\t\t\ttop: 3px;\r\n\r\n\t\t\t\theight: 1px;\r\n\t\t\t\twidth: 7px;\r\n\r\n\t\t\t\tbackground: $rowTextColor;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n\r\n"]}
\ No newline at end of file
diff --git a/admin/js/vendors/tabulator/css/tabulator_site.min.orig.css b/admin/js/vendors/tabulator/css/tabulator_site.min.orig.css
new file mode 100644 (file)
index 0000000..2fc522d
--- /dev/null
@@ -0,0 +1,3 @@
+/* Tabulator v4.7.0 (c) Oliver Folkerd */
+.tabulator{position:relative;border-bottom:5px solid #222;background-color:#fff;font-size:14px;text-align:left;overflow:hidden;transform:translatez(0)}.tabulator[tabulator-layout=fitDataFill] .tabulator-tableHolder .tabulator-table{min-width:100%}.tabulator[tabulator-layout=fitDataTable]{display:inline-block}.tabulator[tabulator-layout=fitColumns] .tabulator-row .tabulator-cell:last-of-type{border-right:none}.tabulator.tabulator-block-select{-webkit-user-select:none;-ms-user-select:none;user-select:none}.tabulator .tabulator-header{position:relative;box-sizing:border-box;width:100%;border-bottom:3px solid #3fb449;background-color:#222;color:#fff;font-weight:700;white-space:nowrap;overflow:hidden;-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-o-user-select:none}.tabulator .tabulator-header.tabulator-header-hidden{display:none}.tabulator .tabulator-header .tabulator-col{display:inline-block;position:relative;box-sizing:border-box;border-right:1px solid #aaa;background-color:#222;text-align:left;vertical-align:bottom;overflow:hidden}.tabulator .tabulator-header .tabulator-col.tabulator-moving{position:absolute;border:1px solid #3fb449;background:#090909;pointer-events:none}.tabulator .tabulator-header .tabulator-col .tabulator-col-content{box-sizing:border-box;position:relative;padding:8px}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-header-menu-button{padding:0 8px}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-header-menu-button:hover{cursor:pointer;opacity:.6}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title{box-sizing:border-box;width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;vertical-align:bottom}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title .tabulator-title-editor{box-sizing:border-box;width:100%;border:1px solid #999;padding:1px;background:#fff}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-arrow{display:inline-block;position:absolute;top:14px;right:8px;width:0;height:0;border-left:6px solid transparent;border-right:6px solid transparent;border-bottom:6px solid #bbb}.tabulator .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols{position:relative;display:-ms-flexbox;display:flex;border-top:1px solid #aaa;overflow:hidden;margin-right:-1px}.tabulator .tabulator-header .tabulator-col:first-child .tabulator-col-resize-handle.prev{display:none}.tabulator .tabulator-header .tabulator-col .tabulator-header-filter{position:relative;box-sizing:border-box;margin-top:2px;width:100%;text-align:center}.tabulator .tabulator-header .tabulator-col .tabulator-header-filter textarea{height:auto!important}.tabulator .tabulator-header .tabulator-col .tabulator-header-filter svg{margin-top:3px}.tabulator .tabulator-header .tabulator-col .tabulator-header-filter input::-ms-clear{width:0;height:0}.tabulator .tabulator-header .tabulator-col.tabulator-sortable .tabulator-col-title{padding-right:25px}.tabulator .tabulator-header .tabulator-col.tabulator-sortable:hover{cursor:pointer;background-color:#090909}.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=none] .tabulator-col-content .tabulator-arrow{border-top:none;border-bottom:6px solid #bbb}.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=asc] .tabulator-col-content .tabulator-arrow{border-top:none;border-bottom:6px solid #3fb449}.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=desc] .tabulator-col-content .tabulator-arrow{border-top:6px solid #3fb449;border-bottom:none}.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical .tabulator-col-content .tabulator-col-title{-ms-writing-mode:tb-rl;writing-mode:vertical-rl;text-orientation:mixed;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center}.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-col-vertical-flip .tabulator-col-title{transform:rotate(180deg)}.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable .tabulator-col-title{padding-right:0;padding-top:20px}.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable.tabulator-col-vertical-flip .tabulator-col-title{padding-right:0;padding-bottom:20px}.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable .tabulator-arrow{right:calc(50% - 6px)}.tabulator .tabulator-header .tabulator-frozen{display:inline-block;position:absolute;z-index:10}.tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-left{border-right:2px solid #aaa}.tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-right{border-left:2px solid #aaa}.tabulator .tabulator-header .tabulator-calcs-holder{box-sizing:border-box;min-width:600%;background:#3c3c3c!important;border-top:1px solid #aaa;overflow:hidden}.tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row{background:#3c3c3c!important}.tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row .tabulator-col-resize-handle{display:none}.tabulator .tabulator-header .tabulator-frozen-rows-holder{min-width:600%}.tabulator .tabulator-header .tabulator-frozen-rows-holder:empty{display:none}.tabulator .tabulator-tableHolder{position:relative;width:100%;white-space:nowrap;overflow:auto;-webkit-overflow-scrolling:touch}.tabulator .tabulator-tableHolder:focus{outline:none}.tabulator .tabulator-tableHolder .tabulator-placeholder{box-sizing:border-box;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;width:100%}.tabulator .tabulator-tableHolder .tabulator-placeholder[tabulator-render-mode=virtual]{min-height:100%;min-width:100%}.tabulator .tabulator-tableHolder .tabulator-placeholder span{display:inline-block;margin:0 auto;padding:10px;color:#3fb449;font-weight:700;font-size:20px}.tabulator .tabulator-tableHolder .tabulator-table{position:relative;display:inline-block;background-color:#fff;white-space:nowrap;overflow:visible;color:#333}.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.tabulator-calcs{font-weight:700;background:#484848!important;color:#fff}.tabulator .tabulator-footer{padding:5px 10px;padding-top:8px;border-top:3px solid #3fb449;background-color:#222;text-align:right;color:#222;font-weight:700;white-space:nowrap;-ms-user-select:none;user-select:none;-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-o-user-select:none}.tabulator .tabulator-footer .tabulator-calcs-holder{box-sizing:border-box;width:calc(100% + 20px);margin:-8px -10px 8px;text-align:left;background:#3c3c3c!important;border-bottom:1px solid #aaa;overflow:hidden}.tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row{background:#3c3c3c!important;color:#fff!important}.tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row .tabulator-col-resize-handle{display:none}.tabulator .tabulator-footer .tabulator-calcs-holder:only-child{margin-bottom:-5px;border-bottom:none}.tabulator .tabulator-footer .tabulator-paginator label{color:#fff}.tabulator .tabulator-footer .tabulator-page-size{display:inline-block;margin:0 5px;padding:2px 5px;border:1px solid #aaa;border-radius:3px}.tabulator .tabulator-footer .tabulator-pages{margin:0 7px}.tabulator .tabulator-footer .tabulator-page{display:inline-block;margin:0 2px;padding:2px 5px;border:1px solid #aaa;border-radius:3px;background:#fff;color:#222;font-family:inherit;font-weight:inherit;font-size:inherit}.tabulator .tabulator-footer .tabulator-page.active{color:#3fb449}.tabulator .tabulator-footer .tabulator-page:disabled{opacity:.5}.tabulator .tabulator-footer .tabulator-page:not(.disabled):hover{cursor:pointer;background:rgba(0,0,0,.2);color:#fff}.tabulator .tabulator-col-resize-handle{position:absolute;right:0;top:0;bottom:0;width:5px}.tabulator .tabulator-col-resize-handle.prev{left:0;right:auto}.tabulator .tabulator-col-resize-handle:hover{cursor:ew-resize}.tabulator .tabulator-loader{position:absolute;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;top:0;left:0;z-index:100;height:100%;width:100%;background:rgba(0,0,0,.4);text-align:center}.tabulator .tabulator-loader .tabulator-loader-msg{display:inline-block;margin:0 auto;padding:10px 20px;border-radius:10px;background:#fff;font-weight:700;font-size:16px}.tabulator .tabulator-loader .tabulator-loader-msg.tabulator-loading{border:4px solid #333;color:#000}.tabulator .tabulator-loader .tabulator-loader-msg.tabulator-error{border:4px solid #d00;color:#590000}.tabulator-row{position:relative;box-sizing:border-box;min-height:22px;background-color:#fff}.tabulator-row.tabulator-row-even{background-color:#efefef}.tabulator-row.tabulator-selectable:hover{background-color:#bbb;cursor:pointer}.tabulator-row.tabulator-selected{background-color:#9abcea}.tabulator-row.tabulator-selected:hover{background-color:#769bcc;cursor:pointer}.tabulator-row.tabulator-row-moving{border:1px solid #000;background:#fff}.tabulator-row.tabulator-moving{position:absolute;border-top:1px solid #aaa;border-bottom:1px solid #aaa;pointer-events:none!important;z-index:15}.tabulator-row .tabulator-row-resize-handle{position:absolute;right:0;bottom:0;left:0;height:5px}.tabulator-row .tabulator-row-resize-handle.prev{top:0;bottom:auto}.tabulator-row .tabulator-row-resize-handle:hover{cursor:ns-resize}.tabulator-row .tabulator-frozen{display:inline-block;position:absolute;background-color:inherit;z-index:10}.tabulator-row .tabulator-frozen.tabulator-frozen-left{border-right:2px solid #aaa}.tabulator-row .tabulator-frozen.tabulator-frozen-right{border-left:2px solid #aaa}.tabulator-row .tabulator-responsive-collapse{box-sizing:border-box;padding:5px;border-top:1px solid #aaa;border-bottom:1px solid #aaa}.tabulator-row .tabulator-responsive-collapse:empty{display:none}.tabulator-row .tabulator-responsive-collapse table{font-size:14px}.tabulator-row .tabulator-responsive-collapse table tr td{position:relative}.tabulator-row .tabulator-responsive-collapse table tr td:first-of-type{padding-right:10px}.tabulator-row .tabulator-cell{display:inline-block;position:relative;box-sizing:border-box;padding:6px;border-right:1px solid #aaa;vertical-align:middle;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.tabulator-row .tabulator-cell.tabulator-editing{border:1px solid #1d68cd;padding:0}.tabulator-row .tabulator-cell.tabulator-editing input,.tabulator-row .tabulator-cell.tabulator-editing select{border:1px;background:transparent}.tabulator-row .tabulator-cell.tabulator-validation-fail{border:1px solid #d00}.tabulator-row .tabulator-cell.tabulator-validation-fail input,.tabulator-row .tabulator-cell.tabulator-validation-fail select{border:1px;background:transparent;color:#d00}.tabulator-row .tabulator-cell:first-child .tabulator-col-resize-handle.prev{display:none}.tabulator-row .tabulator-cell.tabulator-row-handle{display:-ms-inline-flexbox;display:inline-flex;-ms-flex-align:center;align-items:center;-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-o-user-select:none}.tabulator-row .tabulator-cell.tabulator-row-handle .tabulator-row-handle-box{width:80%}.tabulator-row .tabulator-cell.tabulator-row-handle .tabulator-row-handle-box .tabulator-row-handle-bar{width:100%;height:3px;margin-top:2px;background:#3fb449}.tabulator-row .tabulator-cell .tabulator-data-tree-branch{display:inline-block;vertical-align:middle;height:9px;width:7px;margin-top:-9px;margin-right:5px;border-bottom-left-radius:1px;border-left:2px solid #aaa;border-bottom:2px solid #aaa}.tabulator-row .tabulator-cell .tabulator-data-tree-control{display:-ms-inline-flexbox;display:inline-flex;-ms-flex-pack:center;justify-content:center;-ms-flex-align:center;align-items:center;vertical-align:middle;height:11px;width:11px;margin-right:5px;border:1px solid #333;border-radius:2px;background:rgba(0,0,0,.1);overflow:hidden}.tabulator-row .tabulator-cell .tabulator-data-tree-control:hover{cursor:pointer;background:rgba(0,0,0,.2)}.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-collapse{display:inline-block;position:relative;height:7px;width:1px;background:transparent}.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-collapse:after{position:absolute;content:"";left:-3px;top:3px;height:1px;width:7px;background:#333}.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand{display:inline-block;position:relative;height:7px;width:1px;background:#333}.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand:after{position:absolute;content:"";left:-3px;top:3px;height:1px;width:7px;background:#333}.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle{display:-ms-inline-flexbox;display:inline-flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-o-user-select:none;height:15px;width:15px;border-radius:20px;background:#666;color:#fff;font-weight:700;font-size:1.1em}.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle:hover{opacity:.7}.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle.open .tabulator-responsive-collapse-toggle-close{display:initial}.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle.open .tabulator-responsive-collapse-toggle-open,.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle .tabulator-responsive-collapse-toggle-close{display:none}.tabulator-row .tabulator-cell .tabulator-traffic-light{display:inline-block;height:14px;width:14px;border-radius:14px}.tabulator-row.tabulator-group{box-sizing:border-box;border-right:1px solid #aaa;border-top:1px solid #000;border-bottom:2px solid #3fb449;padding:5px;padding-left:10px;background:#222;color:#fff;font-weight:700;min-width:100%}.tabulator-row.tabulator-group:hover{cursor:pointer;background-color:#090909}.tabulator-row.tabulator-group.tabulator-group-visible .tabulator-arrow{margin-right:10px;border-left:6px solid transparent;border-right:6px solid transparent;border-top:6px solid #3fb449;border-bottom:0}.tabulator-row.tabulator-group.tabulator-group-level-1{padding-left:30px}.tabulator-row.tabulator-group.tabulator-group-level-2{padding-left:50px}.tabulator-row.tabulator-group.tabulator-group-level-3{padding-left:70px}.tabulator-row.tabulator-group.tabulator-group-level-4{padding-left:90px}.tabulator-row.tabulator-group.tabulator-group-level-5{padding-left:110px}.tabulator-row.tabulator-group .tabulator-group-toggle{display:inline-block}.tabulator-row.tabulator-group .tabulator-arrow{display:inline-block;width:0;height:0;margin-right:16px;border-top:6px solid transparent;border-bottom:6px solid transparent;border-right:0;border-left:6px solid #3fb449;vertical-align:middle}.tabulator-row.tabulator-group span{margin-left:10px;color:#3fb449}.tabulator-menu{position:absolute;display:inline-block;box-sizing:border-box;background:#fff;border:1px solid #aaa;box-shadow:0 0 5px 0 rgba(0,0,0,.2);font-size:14px;overflow-y:auto;-webkit-overflow-scrolling:touch;z-index:10000}.tabulator-menu .tabulator-menu-item{padding:5px 10px;-webkit-user-select:none;-ms-user-select:none;user-select:none}.tabulator-menu .tabulator-menu-item.tabulator-menu-item-disabled{opacity:.5}.tabulator-menu .tabulator-menu-item:not(.tabulator-menu-item-disabled):hover{cursor:pointer;background:#efefef}.tabulator-menu .tabulator-menu-separator{border-top:1px solid #aaa}.tabulator-edit-select-list{position:absolute;display:inline-block;box-sizing:border-box;max-height:200px;background:#fff;border:1px solid #aaa;font-size:14px;overflow-y:auto;-webkit-overflow-scrolling:touch;z-index:10000}.tabulator-edit-select-list .tabulator-edit-select-list-item{padding:4px;color:#333}.tabulator-edit-select-list .tabulator-edit-select-list-item.active{color:#fff;background:#1d68cd}.tabulator-edit-select-list .tabulator-edit-select-list-item.active.focused{outline:1px solid hsla(0,0%,100%,.5)}.tabulator-edit-select-list .tabulator-edit-select-list-item.focused{outline:1px solid #1d68cd}.tabulator-edit-select-list .tabulator-edit-select-list-item:hover{cursor:pointer;color:#fff;background:#1d68cd}.tabulator-edit-select-list .tabulator-edit-select-list-notice{padding:4px;color:#333;text-align:center}.tabulator-edit-select-list .tabulator-edit-select-list-group{border-bottom:1px solid #aaa;padding:4px;padding-top:6px;color:#333;font-weight:700}.tabulator-print-fullscreen{position:absolute;top:0;bottom:0;left:0;right:0;z-index:10000}body.tabulator-print-fullscreen-hide>:not(.tabulator-print-fullscreen){display:none!important}.tabulator-print-table{border-collapse:collapse}.tabulator-print-table .tabulator-print-table-group{box-sizing:border-box;border-right:1px solid #aaa;border-top:1px solid #000;border-bottom:2px solid #3fb449;padding:5px;padding-left:10px;background:#222;color:#fff;font-weight:700;min-width:100%}.tabulator-print-table .tabulator-print-table-group:hover{cursor:pointer;background-color:#090909}.tabulator-print-table .tabulator-print-table-group.tabulator-group-visible .tabulator-arrow{margin-right:10px;border-left:6px solid transparent;border-right:6px solid transparent;border-top:6px solid #3fb449;border-bottom:0}.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-1 td{padding-left:30px!important}.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-2 td{padding-left:50px!important}.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-3 td{padding-left:70px!important}.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-4 td{padding-left:90px!important}.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-5 td{padding-left:110px!important}.tabulator-print-table .tabulator-print-table-group .tabulator-group-toggle{display:inline-block}.tabulator-print-table .tabulator-print-table-group .tabulator-arrow{display:inline-block;width:0;height:0;margin-right:16px;border-top:6px solid transparent;border-bottom:6px solid transparent;border-right:0;border-left:6px solid #3fb449;vertical-align:middle}.tabulator-print-table .tabulator-print-table-group span{margin-left:10px;color:#3fb449}.tabulator-print-table .tabulator-data-tree-branch{display:inline-block;vertical-align:middle;height:9px;width:7px;margin-top:-9px;margin-right:5px;border-bottom-left-radius:1px;border-left:2px solid #aaa;border-bottom:2px solid #aaa}.tabulator-print-table .tabulator-data-tree-control{display:-ms-inline-flexbox;display:inline-flex;-ms-flex-pack:center;justify-content:center;-ms-flex-align:center;align-items:center;vertical-align:middle;height:11px;width:11px;margin-right:5px;border:1px solid #333;border-radius:2px;background:rgba(0,0,0,.1);overflow:hidden}.tabulator-print-table .tabulator-data-tree-control:hover{cursor:pointer;background:rgba(0,0,0,.2)}.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-collapse{display:inline-block;position:relative;height:7px;width:1px;background:transparent}.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-collapse:after{position:absolute;content:"";left:-3px;top:3px;height:1px;width:7px;background:#333}.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-expand{display:inline-block;position:relative;height:7px;width:1px;background:#333}.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-expand:after{position:absolute;content:"";left:-3px;top:3px;height:1px;width:7px;background:#333}
+/*# sourceMappingURL=tabulator_site.min.css.map */
diff --git a/admin/js/vendors/tabulator/js/modules/accessor.js b/admin/js/vendors/tabulator/js/modules/accessor.js
new file mode 100644 (file)
index 0000000..8ffe1bf
--- /dev/null
@@ -0,0 +1,93 @@
+var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
+
+/* Tabulator v4.7.0 (c) Oliver Folkerd */
+
+var Accessor = function Accessor(table) {
+       this.table = table; //hold Tabulator object
+       this.allowedTypes = ["", "data", "download", "clipboard", "print", "htmlOutput"]; //list of accessor types
+};
+
+//initialize column accessor
+Accessor.prototype.initializeColumn = function (column) {
+       var self = this,
+           match = false,
+           config = {};
+
+       this.allowedTypes.forEach(function (type) {
+               var key = "accessor" + (type.charAt(0).toUpperCase() + type.slice(1)),
+                   accessor;
+
+               if (column.definition[key]) {
+                       accessor = self.lookupAccessor(column.definition[key]);
+
+                       if (accessor) {
+                               match = true;
+
+                               config[key] = {
+                                       accessor: accessor,
+                                       params: column.definition[key + "Params"] || {}
+                               };
+                       }
+               }
+       });
+
+       if (match) {
+               column.modules.accessor = config;
+       }
+};
+
+Accessor.prototype.lookupAccessor = function (value) {
+       var accessor = false;
+
+       //set column accessor
+       switch (typeof value === "undefined" ? "undefined" : _typeof(value)) {
+               case "string":
+                       if (this.accessors[value]) {
+                               accessor = this.accessors[value];
+                       } else {
+                               console.warn("Accessor Error - No such accessor found, ignoring: ", value);
+                       }
+                       break;
+
+               case "function":
+                       accessor = value;
+                       break;
+       }
+
+       return accessor;
+};
+
+//apply accessor to row
+Accessor.prototype.transformRow = function (dataIn, type) {
+       var self = this,
+           key = "accessor" + (type.charAt(0).toUpperCase() + type.slice(1));
+
+       //clone data object with deep copy to isolate internal data from returned result
+       var data = Tabulator.prototype.helpers.deepClone(dataIn || {});
+
+       self.table.columnManager.traverse(function (column) {
+               var value, accessor, params, component;
+
+               if (column.modules.accessor) {
+
+                       accessor = column.modules.accessor[key] || column.modules.accessor.accessor || false;
+
+                       if (accessor) {
+                               value = column.getFieldValue(data);
+
+                               if (value != "undefined") {
+                                       component = column.getComponent();
+                                       params = typeof accessor.params === "function" ? accessor.params(value, data, type, component) : accessor.params;
+                                       column.setFieldValue(data, accessor.accessor(value, data, type, params, component));
+                               }
+                       }
+               }
+       });
+
+       return data;
+},
+
+//default accessors
+Accessor.prototype.accessors = {};
+
+Tabulator.prototype.registerModule("accessor", Accessor);
\ No newline at end of file
diff --git a/admin/js/vendors/tabulator/js/modules/accessor.min.js b/admin/js/vendors/tabulator/js/modules/accessor.min.js
new file mode 100644 (file)
index 0000000..2633b8f
--- /dev/null
@@ -0,0 +1,2 @@
+/* Tabulator v4.7.0 (c) Oliver Folkerd */
+var _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(o){return typeof o}:function(o){return o&&"function"==typeof Symbol&&o.constructor===Symbol&&o!==Symbol.prototype?"symbol":typeof o},Accessor=function(o){this.table=o,this.allowedTypes=["","data","download","clipboard","print","htmlOutput"]};Accessor.prototype.initializeColumn=function(o){var e=this,s=!1,r={};this.allowedTypes.forEach(function(t){var c,a="accessor"+(t.charAt(0).toUpperCase()+t.slice(1));o.definition[a]&&(c=e.lookupAccessor(o.definition[a]))&&(s=!0,r[a]={accessor:c,params:o.definition[a+"Params"]||{}})}),s&&(o.modules.accessor=r)},Accessor.prototype.lookupAccessor=function(o){var e=!1;switch(void 0===o?"undefined":_typeof(o)){case"string":this.accessors[o]?e=this.accessors[o]:console.warn("Accessor Error - No such accessor found, ignoring: ",o);break;case"function":e=o}return e},Accessor.prototype.transformRow=function(o,e){var s=this,r="accessor"+(e.charAt(0).toUpperCase()+e.slice(1)),t=Tabulator.prototype.helpers.deepClone(o||{});return s.table.columnManager.traverse(function(o){var s,c,a,n;o.modules.accessor&&(c=o.modules.accessor[r]||o.modules.accessor.accessor||!1)&&"undefined"!=(s=o.getFieldValue(t))&&(n=o.getComponent(),a="function"==typeof c.params?c.params(s,t,e,n):c.params,o.setFieldValue(t,c.accessor(s,t,e,a,n)))}),t},Accessor.prototype.accessors={},Tabulator.prototype.registerModule("accessor",Accessor);
\ No newline at end of file
diff --git a/admin/js/vendors/tabulator/js/modules/ajax.js b/admin/js/vendors/tabulator/js/modules/ajax.js
new file mode 100644 (file)
index 0000000..7d72604
--- /dev/null
@@ -0,0 +1,465 @@
+var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
+
+/* Tabulator v4.7.0 (c) Oliver Folkerd */
+
+var Ajax = function Ajax(table) {
+
+       this.table = table; //hold Tabulator object
+       this.config = false; //hold config object for ajax request
+       this.url = ""; //request URL
+       this.urlGenerator = false;
+       this.params = false; //request parameters
+
+       this.loaderElement = this.createLoaderElement(); //loader message div
+       this.msgElement = this.createMsgElement(); //message element
+       this.loadingElement = false;
+       this.errorElement = false;
+       this.loaderPromise = false;
+
+       this.progressiveLoad = false;
+       this.loading = false;
+
+       this.requestOrder = 0; //prevent requests comming out of sequence if overridden by another load request
+};
+
+//initialize setup options
+Ajax.prototype.initialize = function () {
+       var template;
+
+       this.loaderElement.appendChild(this.msgElement);
+
+       if (this.table.options.ajaxLoaderLoading) {
+               if (typeof this.table.options.ajaxLoaderLoading == "string") {
+                       template = document.createElement('template');
+                       template.innerHTML = this.table.options.ajaxLoaderLoading.trim();
+                       this.loadingElement = template.content.firstChild;
+               } else {
+                       this.loadingElement = this.table.options.ajaxLoaderLoading;
+               }
+       }
+
+       this.loaderPromise = this.table.options.ajaxRequestFunc || this.defaultLoaderPromise;
+
+       this.urlGenerator = this.table.options.ajaxURLGenerator || this.defaultURLGenerator;
+
+       if (this.table.options.ajaxLoaderError) {
+               if (typeof this.table.options.ajaxLoaderError == "string") {
+                       template = document.createElement('template');
+                       template.innerHTML = this.table.options.ajaxLoaderError.trim();
+                       this.errorElement = template.content.firstChild;
+               } else {
+                       this.errorElement = this.table.options.ajaxLoaderError;
+               }
+       }
+
+       if (this.table.options.ajaxParams) {
+               this.setParams(this.table.options.ajaxParams);
+       }
+
+       if (this.table.options.ajaxConfig) {
+               this.setConfig(this.table.options.ajaxConfig);
+       }
+
+       if (this.table.options.ajaxURL) {
+               this.setUrl(this.table.options.ajaxURL);
+       }
+
+       if (this.table.options.ajaxProgressiveLoad) {
+               if (this.table.options.pagination) {
+                       this.progressiveLoad = false;
+                       console.error("Progressive Load Error - Pagination and progressive load cannot be used at the same time");
+               } else {
+                       if (this.table.modExists("page")) {
+                               this.progressiveLoad = this.table.options.ajaxProgressiveLoad;
+                               this.table.modules.page.initializeProgressive(this.progressiveLoad);
+                       } else {
+                               console.error("Pagination plugin is required for progressive ajax loading");
+                       }
+               }
+       }
+};
+
+Ajax.prototype.createLoaderElement = function () {
+       var el = document.createElement("div");
+       el.classList.add("tabulator-loader");
+       return el;
+};
+
+Ajax.prototype.createMsgElement = function () {
+       var el = document.createElement("div");
+
+       el.classList.add("tabulator-loader-msg");
+       el.setAttribute("role", "alert");
+
+       return el;
+};
+
+//set ajax params
+Ajax.prototype.setParams = function (params, update) {
+       if (update) {
+               this.params = this.params || {};
+
+               for (var key in params) {
+                       this.params[key] = params[key];
+               }
+       } else {
+               this.params = params;
+       }
+};
+
+Ajax.prototype.getParams = function () {
+       return this.params || {};
+};
+
+//load config object
+Ajax.prototype.setConfig = function (config) {
+       this._loadDefaultConfig();
+
+       if (typeof config == "string") {
+               this.config.method = config;
+       } else {
+               for (var key in config) {
+                       this.config[key] = config[key];
+               }
+       }
+};
+
+//create config object from default
+Ajax.prototype._loadDefaultConfig = function (force) {
+       var self = this;
+       if (!self.config || force) {
+
+               self.config = {};
+
+               //load base config from defaults
+               for (var key in self.defaultConfig) {
+                       self.config[key] = self.defaultConfig[key];
+               }
+       }
+};
+
+//set request url
+Ajax.prototype.setUrl = function (url) {
+       this.url = url;
+};
+
+//get request url
+Ajax.prototype.getUrl = function () {
+       return this.url;
+};
+
+//lstandard loading function
+Ajax.prototype.loadData = function (inPosition, columnsChanged) {
+       var self = this;
+
+       if (this.progressiveLoad) {
+               return this._loadDataProgressive();
+       } else {
+               return this._loadDataStandard(inPosition, columnsChanged);
+       }
+};
+
+Ajax.prototype.nextPage = function (diff) {
+       var margin;
+
+       if (!this.loading) {
+
+               margin = this.table.options.ajaxProgressiveLoadScrollMargin || this.table.rowManager.getElement().clientHeight * 2;
+
+               if (diff < margin) {
+                       this.table.modules.page.nextPage().then(function () {}).catch(function () {});
+               }
+       }
+};
+
+Ajax.prototype.blockActiveRequest = function () {
+       this.requestOrder++;
+};
+
+Ajax.prototype._loadDataProgressive = function () {
+       this.table.rowManager.setData([]);
+       return this.table.modules.page.setPage(1);
+};
+
+Ajax.prototype._loadDataStandard = function (inPosition, columnsChanged) {
+       var _this = this;
+
+       return new Promise(function (resolve, reject) {
+               _this.sendRequest(inPosition).then(function (data) {
+                       _this.table.rowManager.setData(data, inPosition, columnsChanged).then(function () {
+                               resolve();
+                       }).catch(function (e) {
+                               reject(e);
+                       });
+               }).catch(function (e) {
+                       reject(e);
+               });
+       });
+};
+
+Ajax.prototype.generateParamsList = function (data, prefix) {
+       var self = this,
+           output = [];
+
+       prefix = prefix || "";
+
+       if (Array.isArray(data)) {
+               data.forEach(function (item, i) {
+                       output = output.concat(self.generateParamsList(item, prefix ? prefix + "[" + i + "]" : i));
+               });
+       } else if ((typeof data === "undefined" ? "undefined" : _typeof(data)) === "object") {
+               for (var key in data) {
+                       output = output.concat(self.generateParamsList(data[key], prefix ? prefix + "[" + key + "]" : key));
+               }
+       } else {
+               output.push({ key: prefix, value: data });
+       }
+
+       return output;
+};
+
+Ajax.prototype.serializeParams = function (params) {
+       var output = this.generateParamsList(params),
+           encoded = [];
+
+       output.forEach(function (item) {
+               encoded.push(encodeURIComponent(item.key) + "=" + encodeURIComponent(item.value));
+       });
+
+       return encoded.join("&");
+};
+
+//send ajax request
+Ajax.prototype.sendRequest = function (silent) {
+       var _this2 = this;
+
+       var self = this,
+           url = self.url,
+           requestNo,
+           esc,
+           query;
+
+       self.requestOrder++;
+       requestNo = self.requestOrder;
+
+       self._loadDefaultConfig();
+
+       return new Promise(function (resolve, reject) {
+               if (self.table.options.ajaxRequesting.call(_this2.table, self.url, self.params) !== false) {
+
+                       self.loading = true;
+
+                       if (!silent) {
+                               self.showLoader();
+                       }
+
+                       _this2.loaderPromise(url, self.config, self.params).then(function (data) {
+                               if (requestNo === self.requestOrder) {
+                                       if (self.table.options.ajaxResponse) {
+                                               data = self.table.options.ajaxResponse.call(self.table, self.url, self.params, data);
+                                       }
+                                       resolve(data);
+
+                                       self.hideLoader();
+                                       self.loading = false;
+                               } else {
+                                       console.warn("Ajax Response Blocked - An active ajax request was blocked by an attempt to change table data while the request was being made");
+                               }
+                       }).catch(function (error) {
+                               console.error("Ajax Load Error: ", error);
+                               self.table.options.ajaxError.call(self.table, error);
+
+                               self.showError();
+
+                               setTimeout(function () {
+                                       self.hideLoader();
+                               }, 3000);
+
+                               self.loading = false;
+
+                               reject();
+                       });
+               } else {
+                       reject();
+               }
+       });
+};
+
+Ajax.prototype.showLoader = function () {
+       var shouldLoad = typeof this.table.options.ajaxLoader === "function" ? this.table.options.ajaxLoader() : this.table.options.ajaxLoader;
+
+       if (shouldLoad) {
+
+               this.hideLoader();
+
+               while (this.msgElement.firstChild) {
+                       this.msgElement.removeChild(this.msgElement.firstChild);
+               }this.msgElement.classList.remove("tabulator-error");
+               this.msgElement.classList.add("tabulator-loading");
+
+               if (this.loadingElement) {
+                       this.msgElement.appendChild(this.loadingElement);
+               } else {
+                       this.msgElement.innerHTML = this.table.modules.localize.getText("ajax|loading");
+               }
+
+               this.table.element.appendChild(this.loaderElement);
+       }
+};
+
+Ajax.prototype.showError = function () {
+       this.hideLoader();
+
+       while (this.msgElement.firstChild) {
+               this.msgElement.removeChild(this.msgElement.firstChild);
+       }this.msgElement.classList.remove("tabulator-loading");
+       this.msgElement.classList.add("tabulator-error");
+
+       if (this.errorElement) {
+               this.msgElement.appendChild(this.errorElement);
+       } else {
+               this.msgElement.innerHTML = this.table.modules.localize.getText("ajax|error");
+       }
+
+       this.table.element.appendChild(this.loaderElement);
+};
+
+Ajax.prototype.hideLoader = function () {
+       if (this.loaderElement.parentNode) {
+               this.loaderElement.parentNode.removeChild(this.loaderElement);
+       }
+};
+
+//default ajax config object
+Ajax.prototype.defaultConfig = {
+       method: "GET"
+};
+
+Ajax.prototype.defaultURLGenerator = function (url, config, params) {
+
+       if (url) {
+               if (params && Object.keys(params).length) {
+                       if (!config.method || config.method.toLowerCase() == "get") {
+                               config.method = "get";
+
+                               url += (url.includes("?") ? "&" : "?") + this.serializeParams(params);
+                       }
+               }
+       }
+
+       return url;
+};
+
+Ajax.prototype.defaultLoaderPromise = function (url, config, params) {
+       var self = this,
+           contentType;
+
+       return new Promise(function (resolve, reject) {
+
+               //set url
+               url = self.urlGenerator(url, config, params);
+
+               //set body content if not GET request
+               if (config.method.toUpperCase() != "GET") {
+                       contentType = _typeof(self.table.options.ajaxContentType) === "object" ? self.table.options.ajaxContentType : self.contentTypeFormatters[self.table.options.ajaxContentType];
+                       if (contentType) {
+
+                               for (var key in contentType.headers) {
+                                       if (!config.headers) {
+                                               config.headers = {};
+                                       }
+
+                                       if (typeof config.headers[key] === "undefined") {
+                                               config.headers[key] = contentType.headers[key];
+                                       }
+                               }
+
+                               config.body = contentType.body.call(self, url, config, params);
+                       } else {
+                               console.warn("Ajax Error - Invalid ajaxContentType value:", self.table.options.ajaxContentType);
+                       }
+               }
+
+               if (url) {
+
+                       //configure headers
+                       if (typeof config.headers === "undefined") {
+                               config.headers = {};
+                       }
+
+                       if (typeof config.headers.Accept === "undefined") {
+                               config.headers.Accept = "application/json";
+                       }
+
+                       if (typeof config.headers["X-Requested-With"] === "undefined") {
+                               config.headers["X-Requested-With"] = "XMLHttpRequest";
+                       }
+
+                       if (typeof config.mode === "undefined") {
+                               config.mode = "cors";
+                       }
+
+                       if (config.mode == "cors") {
+
+                               if (typeof config.headers["Access-Control-Allow-Origin"] === "undefined") {
+                                       config.headers["Access-Control-Allow-Origin"] = window.location.origin;
+                               }
+
+                               if (typeof config.credentials === "undefined") {
+                                       config.credentials = 'same-origin';
+                               }
+                       } else {
+                               if (typeof config.credentials === "undefined") {
+                                       config.credentials = 'include';
+                               }
+                       }
+
+                       //send request
+                       fetch(url, config).then(function (response) {
+                               if (response.ok) {
+                                       response.json().then(function (data) {
+                                               resolve(data);
+                                       }).catch(function (error) {
+                                               reject(error);
+                                               console.warn("Ajax Load Error - Invalid JSON returned", error);
+                                       });
+                               } else {
+                                       console.error("Ajax Load Error - Connection Error: " + response.status, response.statusText);
+                                       reject(response);
+                               }
+                       }).catch(function (error) {
+                               console.error("Ajax Load Error - Connection Error: ", error);
+                               reject(error);
+                       });
+               } else {
+                       console.warn("Ajax Load Error - No URL Set");
+                       resolve([]);
+               }
+       });
+};
+
+Ajax.prototype.contentTypeFormatters = {
+       "json": {
+               headers: {
+                       'Content-Type': 'application/json'
+               },
+               body: function body(url, config, params) {
+                       return JSON.stringify(params);
+               }
+       },
+       "form": {
+               headers: {},
+               body: function body(url, config, params) {
+                       var output = this.generateParamsList(params),
+                           form = new FormData();
+
+                       output.forEach(function (item) {
+                               form.append(item.key, item.value);
+                       });
+
+                       return form;
+               }
+       }
+};
+
+Tabulator.prototype.registerModule("ajax", Ajax);
\ No newline at end of file
diff --git a/admin/js/vendors/tabulator/js/modules/ajax.min.js b/admin/js/vendors/tabulator/js/modules/ajax.min.js
new file mode 100644 (file)
index 0000000..a5dae29
--- /dev/null
@@ -0,0 +1,2 @@
+/* Tabulator v4.7.0 (c) Oliver Folkerd */
+var _typeof="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},Ajax=function(e){this.table=e,this.config=!1,this.url="",this.urlGenerator=!1,this.params=!1,this.loaderElement=this.createLoaderElement(),this.msgElement=this.createMsgElement(),this.loadingElement=!1,this.errorElement=!1,this.loaderPromise=!1,this.progressiveLoad=!1,this.loading=!1,this.requestOrder=0};Ajax.prototype.initialize=function(){var e;this.loaderElement.appendChild(this.msgElement),this.table.options.ajaxLoaderLoading&&("string"==typeof this.table.options.ajaxLoaderLoading?(e=document.createElement("template"),e.innerHTML=this.table.options.ajaxLoaderLoading.trim(),this.loadingElement=e.content.firstChild):this.loadingElement=this.table.options.ajaxLoaderLoading),this.loaderPromise=this.table.options.ajaxRequestFunc||this.defaultLoaderPromise,this.urlGenerator=this.table.options.ajaxURLGenerator||this.defaultURLGenerator,this.table.options.ajaxLoaderError&&("string"==typeof this.table.options.ajaxLoaderError?(e=document.createElement("template"),e.innerHTML=this.table.options.ajaxLoaderError.trim(),this.errorElement=e.content.firstChild):this.errorElement=this.table.options.ajaxLoaderError),this.table.options.ajaxParams&&this.setParams(this.table.options.ajaxParams),this.table.options.ajaxConfig&&this.setConfig(this.table.options.ajaxConfig),this.table.options.ajaxURL&&this.setUrl(this.table.options.ajaxURL),this.table.options.ajaxProgressiveLoad&&(this.table.options.pagination?(this.progressiveLoad=!1,console.error("Progressive Load Error - Pagination and progressive load cannot be used at the same time")):this.table.modExists("page")?(this.progressiveLoad=this.table.options.ajaxProgressiveLoad,this.table.modules.page.initializeProgressive(this.progressiveLoad)):console.error("Pagination plugin is required for progressive ajax loading"))},Ajax.prototype.createLoaderElement=function(){var e=document.createElement("div");return e.classList.add("tabulator-loader"),e},Ajax.prototype.createMsgElement=function(){var e=document.createElement("div");return e.classList.add("tabulator-loader-msg"),e.setAttribute("role","alert"),e},Ajax.prototype.setParams=function(e,t){if(t){this.params=this.params||{};for(var o in e)this.params[o]=e[o]}else this.params=e},Ajax.prototype.getParams=function(){return this.params||{}},Ajax.prototype.setConfig=function(e){if(this._loadDefaultConfig(),"string"==typeof e)this.config.method=e;else for(var t in e)this.config[t]=e[t]},Ajax.prototype._loadDefaultConfig=function(e){var t=this;if(!t.config||e){t.config={};for(var o in t.defaultConfig)t.config[o]=t.defaultConfig[o]}},Ajax.prototype.setUrl=function(e){this.url=e},Ajax.prototype.getUrl=function(){return this.url},Ajax.prototype.loadData=function(e,t){return this.progressiveLoad?this._loadDataProgressive():this._loadDataStandard(e,t)},Ajax.prototype.nextPage=function(e){var t;this.loading||(t=this.table.options.ajaxProgressiveLoadScrollMargin||2*this.table.rowManager.getElement().clientHeight,e<t&&this.table.modules.page.nextPage().then(function(){}).catch(function(){}))},Ajax.prototype.blockActiveRequest=function(){this.requestOrder++},Ajax.prototype._loadDataProgressive=function(){return this.table.rowManager.setData([]),this.table.modules.page.setPage(1)},Ajax.prototype._loadDataStandard=function(e,t){var o=this;return new Promise(function(a,r){o.sendRequest(e).then(function(i){o.table.rowManager.setData(i,e,t).then(function(){a()}).catch(function(e){r(e)})}).catch(function(e){r(e)})})},Ajax.prototype.generateParamsList=function(e,t){var o=this,a=[];if(t=t||"",Array.isArray(e))e.forEach(function(e,r){a=a.concat(o.generateParamsList(e,t?t+"["+r+"]":r))});else if("object"===(void 0===e?"undefined":_typeof(e)))for(var r in e)a=a.concat(o.generateParamsList(e[r],t?t+"["+r+"]":r));else a.push({key:t,value:e});return a},Ajax.prototype.serializeParams=function(e){var t=this.generateParamsList(e),o=[];return t.forEach(function(e){o.push(encodeURIComponent(e.key)+"="+encodeURIComponent(e.value))}),o.join("&")},Ajax.prototype.sendRequest=function(e){var t,o=this,a=this,r=a.url;return a.requestOrder++,t=a.requestOrder,a._loadDefaultConfig(),new Promise(function(i,n){!1!==a.table.options.ajaxRequesting.call(o.table,a.url,a.params)?(a.loading=!0,e||a.showLoader(),o.loaderPromise(r,a.config,a.params).then(function(e){t===a.requestOrder?(a.table.options.ajaxResponse&&(e=a.table.options.ajaxResponse.call(a.table,a.url,a.params,e)),i(e),a.hideLoader(),a.loading=!1):console.warn("Ajax Response Blocked - An active ajax request was blocked by an attempt to change table data while the request was being made")}).catch(function(e){console.error("Ajax Load Error: ",e),a.table.options.ajaxError.call(a.table,e),a.showError(),setTimeout(function(){a.hideLoader()},3e3),a.loading=!1,n()})):n()})},Ajax.prototype.showLoader=function(){if("function"==typeof this.table.options.ajaxLoader?this.table.options.ajaxLoader():this.table.options.ajaxLoader){for(this.hideLoader();this.msgElement.firstChild;)this.msgElement.removeChild(this.msgElement.firstChild);this.msgElement.classList.remove("tabulator-error"),this.msgElement.classList.add("tabulator-loading"),this.loadingElement?this.msgElement.appendChild(this.loadingElement):this.msgElement.innerHTML=this.table.modules.localize.getText("ajax|loading"),this.table.element.appendChild(this.loaderElement)}},Ajax.prototype.showError=function(){for(this.hideLoader();this.msgElement.firstChild;)this.msgElement.removeChild(this.msgElement.firstChild);this.msgElement.classList.remove("tabulator-loading"),this.msgElement.classList.add("tabulator-error"),this.errorElement?this.msgElement.appendChild(this.errorElement):this.msgElement.innerHTML=this.table.modules.localize.getText("ajax|error"),this.table.element.appendChild(this.loaderElement)},Ajax.prototype.hideLoader=function(){this.loaderElement.parentNode&&this.loaderElement.parentNode.removeChild(this.loaderElement)},Ajax.prototype.defaultConfig={method:"GET"},Ajax.prototype.defaultURLGenerator=function(e,t,o){return e&&o&&Object.keys(o).length&&(t.method&&"get"!=t.method.toLowerCase()||(t.method="get",e+=(e.includes("?")?"&":"?")+this.serializeParams(o))),e},Ajax.prototype.defaultLoaderPromise=function(e,t,o){var a,r=this;return new Promise(function(i,n){if(e=r.urlGenerator(e,t,o),"GET"!=t.method.toUpperCase())if(a="object"===_typeof(r.table.options.ajaxContentType)?r.table.options.ajaxContentType:r.contentTypeFormatters[r.table.options.ajaxContentType]){for(var s in a.headers)t.headers||(t.headers={}),void 0===t.headers[s]&&(t.headers[s]=a.headers[s]);t.body=a.body.call(r,e,t,o)}else console.warn("Ajax Error - Invalid ajaxContentType value:",r.table.options.ajaxContentType);e?(void 0===t.headers&&(t.headers={}),void 0===t.headers.Accept&&(t.headers.Accept="application/json"),void 0===t.headers["X-Requested-With"]&&(t.headers["X-Requested-With"]="XMLHttpRequest"),void 0===t.mode&&(t.mode="cors"),"cors"==t.mode?(void 0===t.headers["Access-Control-Allow-Origin"]&&(t.headers["Access-Control-Allow-Origin"]=window.location.origin),void 0===t.credentials&&(t.credentials="same-origin")):void 0===t.credentials&&(t.credentials="include"),fetch(e,t).then(function(e){e.ok?e.json().then(function(e){i(e)}).catch(function(e){n(e),console.warn("Ajax Load Error - Invalid JSON returned",e)}):(console.error("Ajax Load Error - Connection Error: "+e.status,e.statusText),n(e))}).catch(function(e){console.error("Ajax Load Error - Connection Error: ",e),n(e)})):(console.warn("Ajax Load Error - No URL Set"),i([]))})},Ajax.prototype.contentTypeFormatters={json:{headers:{"Content-Type":"application/json"},body:function(e,t,o){return JSON.stringify(o)}},form:{headers:{},body:function(e,t,o){var a=this.generateParamsList(o),r=new FormData;return a.forEach(function(e){r.append(e.key,e.value)}),r}}},Tabulator.prototype.registerModule("ajax",Ajax);
\ No newline at end of file
diff --git a/admin/js/vendors/tabulator/js/modules/calculation_colums.js b/admin/js/vendors/tabulator/js/modules/calculation_colums.js
new file mode 100644 (file)
index 0000000..51fbd91
--- /dev/null
@@ -0,0 +1,495 @@
+var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
+
+/* Tabulator v4.7.0 (c) Oliver Folkerd */
+
+var ColumnCalcs = function ColumnCalcs(table) {
+       this.table = table; //hold Tabulator object
+       this.topCalcs = [];
+       this.botCalcs = [];
+       this.genColumn = false;
+       this.topElement = this.createElement();
+       this.botElement = this.createElement();
+       this.topRow = false;
+       this.botRow = false;
+       this.topInitialized = false;
+       this.botInitialized = false;
+
+       this.initialize();
+};
+
+ColumnCalcs.prototype.createElement = function () {
+       var el = document.createElement("div");
+       el.classList.add("tabulator-calcs-holder");
+       return el;
+};
+
+ColumnCalcs.prototype.initialize = function () {
+       this.genColumn = new Column({ field: "value" }, this);
+};
+
+//dummy functions to handle being mock column manager
+ColumnCalcs.prototype.registerColumnField = function () {};
+
+//initialize column calcs
+ColumnCalcs.prototype.initializeColumn = function (column) {
+       var def = column.definition;
+
+       var config = {
+               topCalcParams: def.topCalcParams || {},
+               botCalcParams: def.bottomCalcParams || {}
+       };
+
+       if (def.topCalc) {
+
+               switch (_typeof(def.topCalc)) {
+                       case "string":
+                               if (this.calculations[def.topCalc]) {
+                                       config.topCalc = this.calculations[def.topCalc];
+                               } else {
+                                       console.warn("Column Calc Error - No such calculation found, ignoring: ", def.topCalc);
+                               }
+                               break;
+
+                       case "function":
+                               config.topCalc = def.topCalc;
+                               break;
+
+               }
+
+               if (config.topCalc) {
+                       column.modules.columnCalcs = config;
+                       this.topCalcs.push(column);
+
+                       if (this.table.options.columnCalcs != "group") {
+                               this.initializeTopRow();
+                       }
+               }
+       }
+
+       if (def.bottomCalc) {
+               switch (_typeof(def.bottomCalc)) {
+                       case "string":
+                               if (this.calculations[def.bottomCalc]) {
+                                       config.botCalc = this.calculations[def.bottomCalc];
+                               } else {
+                                       console.warn("Column Calc Error - No such calculation found, ignoring: ", def.bottomCalc);
+                               }
+                               break;
+
+                       case "function":
+                               config.botCalc = def.bottomCalc;
+                               break;
+
+               }
+
+               if (config.botCalc) {
+                       column.modules.columnCalcs = config;
+                       this.botCalcs.push(column);
+
+                       if (this.table.options.columnCalcs != "group") {
+                               this.initializeBottomRow();
+                       }
+               }
+       }
+};
+
+ColumnCalcs.prototype.removeCalcs = function () {
+       var changed = false;
+
+       if (this.topInitialized) {
+               this.topInitialized = false;
+               this.topElement.parentNode.removeChild(this.topElement);
+               changed = true;
+       }
+
+       if (this.botInitialized) {
+               this.botInitialized = false;
+               this.table.footerManager.remove(this.botElement);
+               changed = true;
+       }
+
+       if (changed) {
+               this.table.rowManager.adjustTableSize();
+       }
+};
+
+ColumnCalcs.prototype.initializeTopRow = function () {
+       if (!this.topInitialized) {
+               // this.table.columnManager.headersElement.after(this.topElement);
+               this.table.columnManager.getElement().insertBefore(this.topElement, this.table.columnManager.headersElement.nextSibling);
+               this.topInitialized = true;
+       }
+};
+
+ColumnCalcs.prototype.initializeBottomRow = function () {
+       if (!this.botInitialized) {
+               this.table.footerManager.prepend(this.botElement);
+               this.botInitialized = true;
+       }
+};
+
+ColumnCalcs.prototype.scrollHorizontal = function (left) {
+       var hozAdjust = 0,
+           scrollWidth = this.table.columnManager.getElement().scrollWidth - this.table.element.clientWidth;
+
+       if (this.botInitialized) {
+               this.botRow.getElement().style.marginLeft = -left + "px";
+       }
+};
+
+ColumnCalcs.prototype.recalc = function (rows) {
+       var data, row;
+
+       if (this.topInitialized || this.botInitialized) {
+               data = this.rowsToData(rows);
+
+               if (this.topInitialized) {
+                       if (this.topRow) {
+                               this.topRow.deleteCells();
+                       }
+
+                       row = this.generateRow("top", this.rowsToData(rows));
+                       this.topRow = row;
+                       while (this.topElement.firstChild) {
+                               this.topElement.removeChild(this.topElement.firstChild);
+                       }this.topElement.appendChild(row.getElement());
+                       row.initialize(true);
+               }
+
+               if (this.botInitialized) {
+                       if (this.botRow) {
+                               this.botRow.deleteCells();
+                       }
+
+                       row = this.generateRow("bottom", this.rowsToData(rows));
+                       this.botRow = row;
+                       while (this.botElement.firstChild) {
+                               this.botElement.removeChild(this.botElement.firstChild);
+                       }this.botElement.appendChild(row.getElement());
+                       row.initialize(true);
+               }
+
+               this.table.rowManager.adjustTableSize();
+
+               //set resizable handles
+               if (this.table.modExists("frozenColumns")) {
+                       this.table.modules.frozenColumns.layout();
+               }
+       }
+};
+
+ColumnCalcs.prototype.recalcRowGroup = function (row) {
+       this.recalcGroup(this.table.modules.groupRows.getRowGroup(row));
+};
+
+ColumnCalcs.prototype.recalcAll = function () {
+       var _this = this;
+
+       if (this.topCalcs.length || this.botCalcs.length) {
+               if (this.table.options.columnCalcs !== "group") {
+                       this.recalc(this.table.rowManager.activeRows);
+               }
+
+               if (this.table.options.groupBy && this.table.options.columnCalcs !== "table") {
+
+                       var groups = table.modules.groupRows.getChildGroups();
+
+                       groups.forEach(function (group) {
+                               _this.recalcGroup(group);
+                       });
+               }
+       }
+};
+
+ColumnCalcs.prototype.recalcGroup = function (group) {
+       var data, rowData;
+
+       if (group) {
+               if (group.calcs) {
+                       if (group.calcs.bottom) {
+                               data = this.rowsToData(group.rows);
+                               rowData = this.generateRowData("bottom", data);
+
+                               group.calcs.bottom.updateData(rowData);
+                               group.calcs.bottom.reinitialize();
+                       }
+
+                       if (group.calcs.top) {
+                               data = this.rowsToData(group.rows);
+                               rowData = this.generateRowData("top", data);
+
+                               group.calcs.top.updateData(rowData);
+                               group.calcs.top.reinitialize();
+                       }
+               }
+       }
+};
+
+//generate top stats row
+ColumnCalcs.prototype.generateTopRow = function (rows) {
+       return this.generateRow("top", this.rowsToData(rows));
+};
+//generate bottom stats row
+ColumnCalcs.prototype.generateBottomRow = function (rows) {
+       return this.generateRow("bottom", this.rowsToData(rows));
+};
+
+ColumnCalcs.prototype.rowsToData = function (rows) {
+       var _this2 = this;
+
+       var data = [];
+
+       rows.forEach(function (row) {
+               data.push(row.getData());
+
+               if (_this2.table.options.dataTree && _this2.table.options.dataTreeChildColumnCalcs) {
+                       if (row.modules.dataTree.open) {
+                               var children = _this2.rowsToData(_this2.table.modules.dataTree.getFilteredTreeChildren(row));
+                               data = data.concat(children);
+                       }
+               }
+       });
+
+       return data;
+};
+
+//generate stats row
+ColumnCalcs.prototype.generateRow = function (pos, data) {
+       var self = this,
+           rowData = this.generateRowData(pos, data),
+           row;
+
+       if (self.table.modExists("mutator")) {
+               self.table.modules.mutator.disable();
+       }
+
+       row = new Row(rowData, this, "calc");
+
+       if (self.table.modExists("mutator")) {
+               self.table.modules.mutator.enable();
+       }
+
+       row.getElement().classList.add("tabulator-calcs", "tabulator-calcs-" + pos);
+
+       row.generateCells = function () {
+
+               var cells = [];
+
+               self.table.columnManager.columnsByIndex.forEach(function (column) {
+
+                       //set field name of mock column
+                       self.genColumn.setField(column.getField());
+                       self.genColumn.hozAlign = column.hozAlign;
+
+                       if (column.definition[pos + "CalcFormatter"] && self.table.modExists("format")) {
+
+                               self.genColumn.modules.format = {
+                                       formatter: self.table.modules.format.getFormatter(column.definition[pos + "CalcFormatter"]),
+                                       params: column.definition[pos + "CalcFormatterParams"]
+                               };
+                       } else {
+                               self.genColumn.modules.format = {
+                                       formatter: self.table.modules.format.getFormatter("plaintext"),
+                                       params: {}
+                               };
+                       }
+
+                       //ensure css class defintion is replicated to calculation cell
+                       self.genColumn.definition.cssClass = column.definition.cssClass;
+
+                       //generate cell and assign to correct column
+                       var cell = new Cell(self.genColumn, row);
+                       cell.column = column;
+                       cell.setWidth();
+
+                       column.cells.push(cell);
+                       cells.push(cell);
+
+                       if (!column.visible) {
+                               cell.hide();
+                       }
+               });
+
+               this.cells = cells;
+       };
+
+       return row;
+};
+
+//generate stats row
+ColumnCalcs.prototype.generateRowData = function (pos, data) {
+       var rowData = {},
+           calcs = pos == "top" ? this.topCalcs : this.botCalcs,
+           type = pos == "top" ? "topCalc" : "botCalc",
+           params,
+           paramKey;
+
+       calcs.forEach(function (column) {
+               var values = [];
+
+               if (column.modules.columnCalcs && column.modules.columnCalcs[type]) {
+                       data.forEach(function (item) {
+                               values.push(column.getFieldValue(item));
+                       });
+
+                       paramKey = type + "Params";
+                       params = typeof column.modules.columnCalcs[paramKey] === "function" ? column.modules.columnCalcs[paramKey](values, data) : column.modules.columnCalcs[paramKey];
+
+                       column.setFieldValue(rowData, column.modules.columnCalcs[type](values, data, params));
+               }
+       });
+
+       return rowData;
+};
+
+ColumnCalcs.prototype.hasTopCalcs = function () {
+       return !!this.topCalcs.length;
+};
+
+ColumnCalcs.prototype.hasBottomCalcs = function () {
+       return !!this.botCalcs.length;
+};
+
+//handle table redraw
+ColumnCalcs.prototype.redraw = function () {
+       if (this.topRow) {
+               this.topRow.normalizeHeight(true);
+       }
+       if (this.botRow) {
+               this.botRow.normalizeHeight(true);
+       }
+};
+
+//return the calculated
+ColumnCalcs.prototype.getResults = function () {
+       var self = this,
+           results = {},
+           groups;
+
+       if (this.table.options.groupBy && this.table.modExists("groupRows")) {
+               groups = this.table.modules.groupRows.getGroups(true);
+
+               groups.forEach(function (group) {
+                       results[group.getKey()] = self.getGroupResults(group);
+               });
+       } else {
+               results = {
+                       top: this.topRow ? this.topRow.getData() : {},
+                       bottom: this.botRow ? this.botRow.getData() : {}
+               };
+       }
+
+       return results;
+};
+
+//get results from a group
+ColumnCalcs.prototype.getGroupResults = function (group) {
+       var self = this,
+           groupObj = group._getSelf(),
+           subGroups = group.getSubGroups(),
+           subGroupResults = {},
+           results = {};
+
+       subGroups.forEach(function (subgroup) {
+               subGroupResults[subgroup.getKey()] = self.getGroupResults(subgroup);
+       });
+
+       results = {
+               top: groupObj.calcs.top ? groupObj.calcs.top.getData() : {},
+               bottom: groupObj.calcs.bottom ? groupObj.calcs.bottom.getData() : {},
+               groups: subGroupResults
+       };
+
+       return results;
+};
+
+//default calculations
+ColumnCalcs.prototype.calculations = {
+       "avg": function avg(values, data, calcParams) {
+               var output = 0,
+                   precision = typeof calcParams.precision !== "undefined" ? calcParams.precision : 2;
+
+               if (values.length) {
+                       output = values.reduce(function (sum, value) {
+                               value = Number(value);
+                               return sum + value;
+                       });
+
+                       output = output / values.length;
+
+                       output = precision !== false ? output.toFixed(precision) : output;
+               }
+
+               return parseFloat(output).toString();
+       },
+       "max": function max(values, data, calcParams) {
+               var output = null,
+                   precision = typeof calcParams.precision !== "undefined" ? calcParams.precision : false;
+
+               values.forEach(function (value) {
+
+                       value = Number(value);
+
+                       if (value > output || output === null) {
+                               output = value;
+                       }
+               });
+
+               return output !== null ? precision !== false ? output.toFixed(precision) : output : "";
+       },
+       "min": function min(values, data, calcParams) {
+               var output = null,
+                   precision = typeof calcParams.precision !== "undefined" ? calcParams.precision : false;
+
+               values.forEach(function (value) {
+
+                       value = Number(value);
+
+                       if (value < output || output === null) {
+                               output = value;
+                       }
+               });
+
+               return output !== null ? precision !== false ? output.toFixed(precision) : output : "";
+       },
+       "sum": function sum(values, data, calcParams) {
+               var output = 0,
+                   precision = typeof calcParams.precision !== "undefined" ? calcParams.precision : false;
+
+               if (values.length) {
+                       values.forEach(function (value) {
+                               value = Number(value);
+
+                               output += !isNaN(value) ? Number(value) : 0;
+                       });
+               }
+
+               return precision !== false ? output.toFixed(precision) : output;
+       },
+       "concat": function concat(values, data, calcParams) {
+               var output = 0;
+
+               if (values.length) {
+                       output = values.reduce(function (sum, value) {
+                               return String(sum) + String(value);
+                       });
+               }
+
+               return output;
+       },
+       "count": function count(values, data, calcParams) {
+               var output = 0;
+
+               if (values.length) {
+                       values.forEach(function (value) {
+                               if (value) {
+                                       output++;
+                               }
+                       });
+               }
+
+               return output;
+       }
+};
+
+Tabulator.prototype.registerModule("columnCalcs", ColumnCalcs);
\ No newline at end of file
diff --git a/admin/js/vendors/tabulator/js/modules/calculation_colums.min.js b/admin/js/vendors/tabulator/js/modules/calculation_colums.min.js
new file mode 100644 (file)
index 0000000..33464d5
--- /dev/null
@@ -0,0 +1,2 @@
+/* Tabulator v4.7.0 (c) Oliver Folkerd */
+var _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},ColumnCalcs=function(t){this.table=t,this.topCalcs=[],this.botCalcs=[],this.genColumn=!1,this.topElement=this.createElement(),this.botElement=this.createElement(),this.topRow=!1,this.botRow=!1,this.topInitialized=!1,this.botInitialized=!1,this.initialize()};ColumnCalcs.prototype.createElement=function(){var t=document.createElement("div");return t.classList.add("tabulator-calcs-holder"),t},ColumnCalcs.prototype.initialize=function(){this.genColumn=new Column({field:"value"},this)},ColumnCalcs.prototype.registerColumnField=function(){},ColumnCalcs.prototype.initializeColumn=function(t){var o=t.definition,e={topCalcParams:o.topCalcParams||{},botCalcParams:o.bottomCalcParams||{}};if(o.topCalc){switch(_typeof(o.topCalc)){case"string":this.calculations[o.topCalc]?e.topCalc=this.calculations[o.topCalc]:console.warn("Column Calc Error - No such calculation found, ignoring: ",o.topCalc);break;case"function":e.topCalc=o.topCalc}e.topCalc&&(t.modules.columnCalcs=e,this.topCalcs.push(t),"group"!=this.table.options.columnCalcs&&this.initializeTopRow())}if(o.bottomCalc){switch(_typeof(o.bottomCalc)){case"string":this.calculations[o.bottomCalc]?e.botCalc=this.calculations[o.bottomCalc]:console.warn("Column Calc Error - No such calculation found, ignoring: ",o.bottomCalc);break;case"function":e.botCalc=o.bottomCalc}e.botCalc&&(t.modules.columnCalcs=e,this.botCalcs.push(t),"group"!=this.table.options.columnCalcs&&this.initializeBottomRow())}},ColumnCalcs.prototype.removeCalcs=function(){var t=!1;this.topInitialized&&(this.topInitialized=!1,this.topElement.parentNode.removeChild(this.topElement),t=!0),this.botInitialized&&(this.botInitialized=!1,this.table.footerManager.remove(this.botElement),t=!0),t&&this.table.rowManager.adjustTableSize()},ColumnCalcs.prototype.initializeTopRow=function(){this.topInitialized||(this.table.columnManager.getElement().insertBefore(this.topElement,this.table.columnManager.headersElement.nextSibling),this.topInitialized=!0)},ColumnCalcs.prototype.initializeBottomRow=function(){this.botInitialized||(this.table.footerManager.prepend(this.botElement),this.botInitialized=!0)},ColumnCalcs.prototype.scrollHorizontal=function(t){this.table.columnManager.getElement().scrollWidth,this.table.element.clientWidth;this.botInitialized&&(this.botRow.getElement().style.marginLeft=-t+"px")},ColumnCalcs.prototype.recalc=function(t){var o;if(this.topInitialized||this.botInitialized){if(this.rowsToData(t),this.topInitialized){for(this.topRow&&this.topRow.deleteCells(),o=this.generateRow("top",this.rowsToData(t)),this.topRow=o;this.topElement.firstChild;)this.topElement.removeChild(this.topElement.firstChild);this.topElement.appendChild(o.getElement()),o.initialize(!0)}if(this.botInitialized){for(this.botRow&&this.botRow.deleteCells(),o=this.generateRow("bottom",this.rowsToData(t)),this.botRow=o;this.botElement.firstChild;)this.botElement.removeChild(this.botElement.firstChild);this.botElement.appendChild(o.getElement()),o.initialize(!0)}this.table.rowManager.adjustTableSize(),this.table.modExists("frozenColumns")&&this.table.modules.frozenColumns.layout()}},ColumnCalcs.prototype.recalcRowGroup=function(t){this.recalcGroup(this.table.modules.groupRows.getRowGroup(t))},ColumnCalcs.prototype.recalcAll=function(){var t=this;if((this.topCalcs.length||this.botCalcs.length)&&("group"!==this.table.options.columnCalcs&&this.recalc(this.table.rowManager.activeRows),this.table.options.groupBy&&"table"!==this.table.options.columnCalcs)){table.modules.groupRows.getChildGroups().forEach(function(o){t.recalcGroup(o)})}},ColumnCalcs.prototype.recalcGroup=function(t){var o,e;t&&t.calcs&&(t.calcs.bottom&&(o=this.rowsToData(t.rows),e=this.generateRowData("bottom",o),t.calcs.bottom.updateData(e),t.calcs.bottom.reinitialize()),t.calcs.top&&(o=this.rowsToData(t.rows),e=this.generateRowData("top",o),t.calcs.top.updateData(e),t.calcs.top.reinitialize()))},ColumnCalcs.prototype.generateTopRow=function(t){return this.generateRow("top",this.rowsToData(t))},ColumnCalcs.prototype.generateBottomRow=function(t){return this.generateRow("bottom",this.rowsToData(t))},ColumnCalcs.prototype.rowsToData=function(t){var o=this,e=[];return t.forEach(function(t){if(e.push(t.getData()),o.table.options.dataTree&&o.table.options.dataTreeChildColumnCalcs&&t.modules.dataTree.open){var l=o.rowsToData(o.table.modules.dataTree.getFilteredTreeChildren(t));e=e.concat(l)}}),e},ColumnCalcs.prototype.generateRow=function(t,o){var e,l=this,i=this.generateRowData(t,o);return l.table.modExists("mutator")&&l.table.modules.mutator.disable(),e=new Row(i,this,"calc"),l.table.modExists("mutator")&&l.table.modules.mutator.enable(),e.getElement().classList.add("tabulator-calcs","tabulator-calcs-"+t),e.generateCells=function(){var o=[];l.table.columnManager.columnsByIndex.forEach(function(i){l.genColumn.setField(i.getField()),l.genColumn.hozAlign=i.hozAlign,i.definition[t+"CalcFormatter"]&&l.table.modExists("format")?l.genColumn.modules.format={formatter:l.table.modules.format.getFormatter(i.definition[t+"CalcFormatter"]),params:i.definition[t+"CalcFormatterParams"]}:l.genColumn.modules.format={formatter:l.table.modules.format.getFormatter("plaintext"),params:{}},l.genColumn.definition.cssClass=i.definition.cssClass;var a=new Cell(l.genColumn,e);a.column=i,a.setWidth(),i.cells.push(a),o.push(a),i.visible||a.hide()}),this.cells=o},e},ColumnCalcs.prototype.generateRowData=function(t,o){var e,l,i={},a="top"==t?this.topCalcs:this.botCalcs,n="top"==t?"topCalc":"botCalc";return a.forEach(function(t){var a=[];t.modules.columnCalcs&&t.modules.columnCalcs[n]&&(o.forEach(function(o){a.push(t.getFieldValue(o))}),l=n+"Params",e="function"==typeof t.modules.columnCalcs[l]?t.modules.columnCalcs[l](a,o):t.modules.columnCalcs[l],t.setFieldValue(i,t.modules.columnCalcs[n](a,o,e)))}),i},ColumnCalcs.prototype.hasTopCalcs=function(){return!!this.topCalcs.length},ColumnCalcs.prototype.hasBottomCalcs=function(){return!!this.botCalcs.length},ColumnCalcs.prototype.redraw=function(){this.topRow&&this.topRow.normalizeHeight(!0),this.botRow&&this.botRow.normalizeHeight(!0)},ColumnCalcs.prototype.getResults=function(){var t,o=this,e={};return this.table.options.groupBy&&this.table.modExists("groupRows")?(t=this.table.modules.groupRows.getGroups(!0),t.forEach(function(t){e[t.getKey()]=o.getGroupResults(t)})):e={top:this.topRow?this.topRow.getData():{},bottom:this.botRow?this.botRow.getData():{}},e},ColumnCalcs.prototype.getGroupResults=function(t){var o=this,e=t._getSelf(),l=t.getSubGroups(),i={};return l.forEach(function(t){i[t.getKey()]=o.getGroupResults(t)}),{top:e.calcs.top?e.calcs.top.getData():{},bottom:e.calcs.bottom?e.calcs.bottom.getData():{},groups:i}},ColumnCalcs.prototype.calculations={avg:function(t,o,e){var l=0,i=void 0!==e.precision?e.precision:2;return t.length&&(l=t.reduce(function(t,o){return o=Number(o),t+o}),l/=t.length,l=!1!==i?l.toFixed(i):l),parseFloat(l).toString()},max:function(t,o,e){var l=null,i=void 0!==e.precision&&e.precision;return t.forEach(function(t){((t=Number(t))>l||null===l)&&(l=t)}),null!==l?!1!==i?l.toFixed(i):l:""},min:function(t,o,e){var l=null,i=void 0!==e.precision&&e.precision;return t.forEach(function(t){((t=Number(t))<l||null===l)&&(l=t)}),null!==l?!1!==i?l.toFixed(i):l:""},sum:function(t,o,e){var l=0,i=void 0!==e.precision&&e.precision;return t.length&&t.forEach(function(t){t=Number(t),l+=isNaN(t)?0:Number(t)}),!1!==i?l.toFixed(i):l},concat:function(t,o,e){var l=0;return t.length&&(l=t.reduce(function(t,o){return String(t)+String(o)})),l},count:function(t,o,e){var l=0;return t.length&&t.forEach(function(t){t&&l++}),l}},Tabulator.prototype.registerModule("columnCalcs",ColumnCalcs);
\ No newline at end of file
diff --git a/admin/js/vendors/tabulator/js/modules/clipboard.js b/admin/js/vendors/tabulator/js/modules/clipboard.js
new file mode 100644 (file)
index 0000000..34490bc
--- /dev/null
@@ -0,0 +1,346 @@
+var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
+
+/* Tabulator v4.7.0 (c) Oliver Folkerd */
+
+var Clipboard = function Clipboard(table) {
+       this.table = table;
+       this.mode = true;
+
+       this.pasteParser = function () {};
+       this.pasteAction = function () {};
+       this.customSelection = false;
+       this.rowRange = false;
+       this.blocked = true; //block copy actions not originating from this command
+};
+
+Clipboard.prototype.initialize = function () {
+       var _this = this;
+
+       this.mode = this.table.options.clipboard;
+
+       this.rowRange = this.table.options.clipboardCopyRowRange;
+
+       if (this.mode === true || this.mode === "copy") {
+               this.table.element.addEventListener("copy", function (e) {
+                       var plain, html, list;
+
+                       if (!_this.blocked) {
+                               e.preventDefault();
+
+                               if (_this.customSelection) {
+                                       plain = _this.customSelection;
+
+                                       if (_this.table.options.clipboardCopyFormatter) {
+                                               plain = _this.table.options.clipboardCopyFormatter("plain", plain);
+                                       }
+                               } else {
+
+                                       var list = _this.table.modules.export.generateExportList(_this.rowRange, _this.table.options.clipboardCopyStyled, _this.table.options.clipboardCopyConfig, "clipboard");
+
+                                       html = _this.table.modules.export.genereateHTMLTable(list);
+                                       plain = html ? _this.generatePlainContent(list) : "";
+
+                                       if (_this.table.options.clipboardCopyFormatter) {
+                                               plain = _this.table.options.clipboardCopyFormatter("plain", plain);
+                                               html = _this.table.options.clipboardCopyFormatter("html", html);
+                                       }
+                               }
+
+                               if (window.clipboardData && window.clipboardData.setData) {
+                                       window.clipboardData.setData('Text', plain);
+                               } else if (e.clipboardData && e.clipboardData.setData) {
+                                       e.clipboardData.setData('text/plain', plain);
+                                       if (html) {
+                                               e.clipboardData.setData('text/html', html);
+                                       }
+                               } else if (e.originalEvent && e.originalEvent.clipboardData.setData) {
+                                       e.originalEvent.clipboardData.setData('text/plain', plain);
+                                       if (html) {
+                                               e.originalEvent.clipboardData.setData('text/html', html);
+                                       }
+                               }
+
+                               _this.table.options.clipboardCopied.call(_this.table, plain, html);
+
+                               _this.reset();
+                       }
+               });
+       }
+
+       if (this.mode === true || this.mode === "paste") {
+               this.table.element.addEventListener("paste", function (e) {
+                       _this.paste(e);
+               });
+       }
+
+       this.setPasteParser(this.table.options.clipboardPasteParser);
+       this.setPasteAction(this.table.options.clipboardPasteAction);
+};
+
+Clipboard.prototype.reset = function () {
+       this.blocked = false;
+       this.originalSelectionText = "";
+};
+
+Clipboard.prototype.generatePlainContent = function (list) {
+       var output = [];
+
+       list.forEach(function (row) {
+               var rowData = [];
+
+               row.columns.forEach(function (col) {
+                       var value = "";
+
+                       if (col) {
+
+                               if (row.type === "group") {
+                                       col.value = col.component.getKey();
+                               }
+
+                               switch (_typeof(col.value)) {
+                                       case "object":
+                                               value = JSON.stringify(col.value);
+                                               break;
+
+                                       case "undefined":
+                                       case "null":
+                                               value = "";
+                                               break;
+
+                                       default:
+                                               value = col.value;
+                               }
+                       }
+
+                       rowData.push(value);
+               });
+
+               output.push(rowData.join("\t"));
+       });
+
+       return output.join("\n");
+};
+
+Clipboard.prototype.copy = function (range, internal) {
+       var range, sel, textRange;
+       this.blocked = false;
+       this.customSelection = false;
+
+       if (this.mode === true || this.mode === "copy") {
+
+               this.rowRange = range || this.table.options.clipboardCopyRowRange;
+
+               if (typeof window.getSelection != "undefined" && typeof document.createRange != "undefined") {
+                       range = document.createRange();
+                       range.selectNodeContents(this.table.element);
+                       sel = window.getSelection();
+
+                       if (sel.toString() && internal) {
+                               this.customSelection = sel.toString();
+                       }
+
+                       sel.removeAllRanges();
+                       sel.addRange(range);
+               } else if (typeof document.selection != "undefined" && typeof document.body.createTextRange != "undefined") {
+                       textRange = document.body.createTextRange();
+                       textRange.moveToElementText(this.table.element);
+                       textRange.select();
+               }
+
+               document.execCommand('copy');
+
+               if (sel) {
+                       sel.removeAllRanges();
+               }
+       }
+};
+
+//PASTE EVENT HANDLING
+
+Clipboard.prototype.setPasteAction = function (action) {
+
+       switch (typeof action === "undefined" ? "undefined" : _typeof(action)) {
+               case "string":
+                       this.pasteAction = this.pasteActions[action];
+
+                       if (!this.pasteAction) {
+                               console.warn("Clipboard Error - No such paste action found:", action);
+                       }
+                       break;
+
+               case "function":
+                       this.pasteAction = action;
+                       break;
+       }
+};
+
+Clipboard.prototype.setPasteParser = function (parser) {
+       switch (typeof parser === "undefined" ? "undefined" : _typeof(parser)) {
+               case "string":
+                       this.pasteParser = this.pasteParsers[parser];
+
+                       if (!this.pasteParser) {
+                               console.warn("Clipboard Error - No such paste parser found:", parser);
+                       }
+                       break;
+
+               case "function":
+                       this.pasteParser = parser;
+                       break;
+       }
+};
+
+Clipboard.prototype.paste = function (e) {
+       var data, rowData, rows;
+
+       if (this.checkPaseOrigin(e)) {
+
+               data = this.getPasteData(e);
+
+               rowData = this.pasteParser.call(this, data);
+
+               if (rowData) {
+                       e.preventDefault();
+
+                       if (this.table.modExists("mutator")) {
+                               rowData = this.mutateData(rowData);
+                       }
+
+                       rows = this.pasteAction.call(this, rowData);
+                       this.table.options.clipboardPasted.call(this.table, data, rowData, rows);
+               } else {
+                       this.table.options.clipboardPasteError.call(this.table, data);
+               }
+       }
+};
+
+Clipboard.prototype.mutateData = function (data) {
+       var self = this,
+           output = [];
+
+       if (Array.isArray(data)) {
+               data.forEach(function (row) {
+                       output.push(self.table.modules.mutator.transformRow(row, "clipboard"));
+               });
+       } else {
+               output = data;
+       }
+
+       return output;
+};
+
+Clipboard.prototype.checkPaseOrigin = function (e) {
+       var valid = true;
+
+       if (e.target.tagName != "DIV" || this.table.modules.edit.currentCell) {
+               valid = false;
+       }
+
+       return valid;
+};
+
+Clipboard.prototype.getPasteData = function (e) {
+       var data;
+
+       if (window.clipboardData && window.clipboardData.getData) {
+               data = window.clipboardData.getData('Text');
+       } else if (e.clipboardData && e.clipboardData.getData) {
+               data = e.clipboardData.getData('text/plain');
+       } else if (e.originalEvent && e.originalEvent.clipboardData.getData) {
+               data = e.originalEvent.clipboardData.getData('text/plain');
+       }
+
+       return data;
+};
+
+Clipboard.prototype.pasteParsers = {
+       table: function table(clipboard) {
+               var data = [],
+                   success = false,
+                   headerFindSuccess = true,
+                   columns = this.table.columnManager.columns,
+                   columnMap = [],
+                   rows = [];
+
+               //get data from clipboard into array of columns and rows.
+               clipboard = clipboard.split("\n");
+
+               clipboard.forEach(function (row) {
+                       data.push(row.split("\t"));
+               });
+
+               if (data.length && !(data.length === 1 && data[0].length < 2)) {
+                       success = true;
+
+                       //check if headers are present by title
+                       data[0].forEach(function (value) {
+                               var column = columns.find(function (column) {
+                                       return value && column.definition.title && value.trim() && column.definition.title.trim() === value.trim();
+                               });
+
+                               if (column) {
+                                       columnMap.push(column);
+                               } else {
+                                       headerFindSuccess = false;
+                               }
+                       });
+
+                       //check if column headers are present by field
+                       if (!headerFindSuccess) {
+                               headerFindSuccess = true;
+                               columnMap = [];
+
+                               data[0].forEach(function (value) {
+                                       var column = columns.find(function (column) {
+                                               return value && column.field && value.trim() && column.field.trim() === value.trim();
+                                       });
+
+                                       if (column) {
+                                               columnMap.push(column);
+                                       } else {
+                                               headerFindSuccess = false;
+                                       }
+                               });
+
+                               if (!headerFindSuccess) {
+                                       columnMap = this.table.columnManager.columnsByIndex;
+                               }
+                       }
+
+                       //remove header row if found
+                       if (headerFindSuccess) {
+                               data.shift();
+                       }
+
+                       data.forEach(function (item) {
+                               var row = {};
+
+                               item.forEach(function (value, i) {
+                                       if (columnMap[i]) {
+                                               row[columnMap[i].field] = value;
+                                       }
+                               });
+
+                               rows.push(row);
+                       });
+
+                       return rows;
+               } else {
+                       return false;
+               }
+       }
+};
+
+Clipboard.prototype.pasteActions = {
+       replace: function replace(rows) {
+               return this.table.setData(rows);
+       },
+       update: function update(rows) {
+               return this.table.updateOrAddData(rows);
+       },
+       insert: function insert(rows) {
+               return this.table.addData(rows);
+       }
+};
+
+Tabulator.prototype.registerModule("clipboard", Clipboard);
\ No newline at end of file
diff --git a/admin/js/vendors/tabulator/js/modules/clipboard.min.js b/admin/js/vendors/tabulator/js/modules/clipboard.min.js
new file mode 100644 (file)
index 0000000..2a2eb5a
--- /dev/null
@@ -0,0 +1,2 @@
+/* Tabulator v4.7.0 (c) Oliver Folkerd */
+var _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Clipboard=function(t){this.table=t,this.mode=!0,this.pasteParser=function(){},this.pasteAction=function(){},this.customSelection=!1,this.rowRange=!1,this.blocked=!0};Clipboard.prototype.initialize=function(){var t=this;this.mode=this.table.options.clipboard,this.rowRange=this.table.options.clipboardCopyRowRange,!0!==this.mode&&"copy"!==this.mode||this.table.element.addEventListener("copy",function(e){var a,o,i;if(!t.blocked){if(e.preventDefault(),t.customSelection)a=t.customSelection,t.table.options.clipboardCopyFormatter&&(a=t.table.options.clipboardCopyFormatter("plain",a));else{var i=t.table.modules.export.generateExportList(t.rowRange,t.table.options.clipboardCopyStyled,t.table.options.clipboardCopyConfig,"clipboard");o=t.table.modules.export.genereateHTMLTable(i),a=o?t.generatePlainContent(i):"",t.table.options.clipboardCopyFormatter&&(a=t.table.options.clipboardCopyFormatter("plain",a),o=t.table.options.clipboardCopyFormatter("html",o))}window.clipboardData&&window.clipboardData.setData?window.clipboardData.setData("Text",a):e.clipboardData&&e.clipboardData.setData?(e.clipboardData.setData("text/plain",a),o&&e.clipboardData.setData("text/html",o)):e.originalEvent&&e.originalEvent.clipboardData.setData&&(e.originalEvent.clipboardData.setData("text/plain",a),o&&e.originalEvent.clipboardData.setData("text/html",o)),t.table.options.clipboardCopied.call(t.table,a,o),t.reset()}}),!0!==this.mode&&"paste"!==this.mode||this.table.element.addEventListener("paste",function(e){t.paste(e)}),this.setPasteParser(this.table.options.clipboardPasteParser),this.setPasteAction(this.table.options.clipboardPasteAction)},Clipboard.prototype.reset=function(){this.blocked=!1,this.originalSelectionText=""},Clipboard.prototype.generatePlainContent=function(t){var e=[];return t.forEach(function(t){var a=[];t.columns.forEach(function(e){var o="";if(e)switch("group"===t.type&&(e.value=e.component.getKey()),_typeof(e.value)){case"object":o=JSON.stringify(e.value);break;case"undefined":case"null":o="";break;default:o=e.value}a.push(o)}),e.push(a.join("\t"))}),e.join("\n")},Clipboard.prototype.copy=function(t,e){var t,a,o;this.blocked=!1,this.customSelection=!1,!0!==this.mode&&"copy"!==this.mode||(this.rowRange=t||this.table.options.clipboardCopyRowRange,void 0!==window.getSelection&&void 0!==document.createRange?(t=document.createRange(),t.selectNodeContents(this.table.element),a=window.getSelection(),a.toString()&&e&&(this.customSelection=a.toString()),a.removeAllRanges(),a.addRange(t)):void 0!==document.selection&&void 0!==document.body.createTextRange&&(o=document.body.createTextRange(),o.moveToElementText(this.table.element),o.select()),document.execCommand("copy"),a&&a.removeAllRanges())},Clipboard.prototype.setPasteAction=function(t){switch(void 0===t?"undefined":_typeof(t)){case"string":this.pasteAction=this.pasteActions[t],this.pasteAction||console.warn("Clipboard Error - No such paste action found:",t);break;case"function":this.pasteAction=t}},Clipboard.prototype.setPasteParser=function(t){switch(void 0===t?"undefined":_typeof(t)){case"string":this.pasteParser=this.pasteParsers[t],this.pasteParser||console.warn("Clipboard Error - No such paste parser found:",t);break;case"function":this.pasteParser=t}},Clipboard.prototype.paste=function(t){var e,a,o;this.checkPaseOrigin(t)&&(e=this.getPasteData(t),a=this.pasteParser.call(this,e),a?(t.preventDefault(),this.table.modExists("mutator")&&(a=this.mutateData(a)),o=this.pasteAction.call(this,a),this.table.options.clipboardPasted.call(this.table,e,a,o)):this.table.options.clipboardPasteError.call(this.table,e))},Clipboard.prototype.mutateData=function(t){var e=this,a=[];return Array.isArray(t)?t.forEach(function(t){a.push(e.table.modules.mutator.transformRow(t,"clipboard"))}):a=t,a},Clipboard.prototype.checkPaseOrigin=function(t){var e=!0;return("DIV"!=t.target.tagName||this.table.modules.edit.currentCell)&&(e=!1),e},Clipboard.prototype.getPasteData=function(t){var e;return window.clipboardData&&window.clipboardData.getData?e=window.clipboardData.getData("Text"):t.clipboardData&&t.clipboardData.getData?e=t.clipboardData.getData("text/plain"):t.originalEvent&&t.originalEvent.clipboardData.getData&&(e=t.originalEvent.clipboardData.getData("text/plain")),e},Clipboard.prototype.pasteParsers={table:function(t){var e=[],a=!0,o=this.table.columnManager.columns,i=[],n=[];return t=t.split("\n"),t.forEach(function(t){e.push(t.split("\t"))}),!(!e.length||1===e.length&&e[0].length<2)&&(!0,e[0].forEach(function(t){var e=o.find(function(e){return t&&e.definition.title&&t.trim()&&e.definition.title.trim()===t.trim()});e?i.push(e):a=!1}),a||(a=!0,i=[],e[0].forEach(function(t){var e=o.find(function(e){return t&&e.field&&t.trim()&&e.field.trim()===t.trim()});e?i.push(e):a=!1}),a||(i=this.table.columnManager.columnsByIndex)),a&&e.shift(),e.forEach(function(t){var e={};t.forEach(function(t,a){i[a]&&(e[i[a].field]=t)}),n.push(e)}),n)}},Clipboard.prototype.pasteActions={replace:function(t){return this.table.setData(t)},update:function(t){return this.table.updateOrAddData(t)},insert:function(t){return this.table.addData(t)}},Tabulator.prototype.registerModule("clipboard",Clipboard);
\ No newline at end of file
diff --git a/admin/js/vendors/tabulator/js/modules/data_tree.js b/admin/js/vendors/tabulator/js/modules/data_tree.js
new file mode 100644 (file)
index 0000000..4d1638a
--- /dev/null
@@ -0,0 +1,492 @@
+var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
+
+/* Tabulator v4.7.0 (c) Oliver Folkerd */
+
+var DataTree = function DataTree(table) {
+       this.table = table;
+       this.indent = 10;
+       this.field = "";
+       this.collapseEl = null;
+       this.expandEl = null;
+       this.branchEl = null;
+       this.elementField = false;
+
+       this.startOpen = function () {};
+
+       this.displayIndex = 0;
+};
+
+DataTree.prototype.initialize = function () {
+       var dummyEl = null,
+           firstCol = this.table.columnManager.getFirstVisibileColumn(),
+           options = this.table.options;
+
+       this.field = options.dataTreeChildField;
+       this.indent = options.dataTreeChildIndent;
+       this.elementField = options.dataTreeElementColumn || (firstCol ? firstCol.field : false);
+
+       if (options.dataTreeBranchElement) {
+
+               if (options.dataTreeBranchElement === true) {
+                       this.branchEl = document.createElement("div");
+                       this.branchEl.classList.add("tabulator-data-tree-branch");
+               } else {
+                       if (typeof options.dataTreeBranchElement === "string") {
+                               dummyEl = document.createElement("div");
+                               dummyEl.innerHTML = options.dataTreeBranchElement;
+                               this.branchEl = dummyEl.firstChild;
+                       } else {
+                               this.branchEl = options.dataTreeBranchElement;
+                       }
+               }
+       }
+
+       if (options.dataTreeCollapseElement) {
+               if (typeof options.dataTreeCollapseElement === "string") {
+                       dummyEl = document.createElement("div");
+                       dummyEl.innerHTML = options.dataTreeCollapseElement;
+                       this.collapseEl = dummyEl.firstChild;
+               } else {
+                       this.collapseEl = options.dataTreeCollapseElement;
+               }
+       } else {
+               this.collapseEl = document.createElement("div");
+               this.collapseEl.classList.add("tabulator-data-tree-control");
+               this.collapseEl.tabIndex = 0;
+               this.collapseEl.innerHTML = "<div class='tabulator-data-tree-control-collapse'></div>";
+       }
+
+       if (options.dataTreeExpandElement) {
+               if (typeof options.dataTreeExpandElement === "string") {
+                       dummyEl = document.createElement("div");
+                       dummyEl.innerHTML = options.dataTreeExpandElement;
+                       this.expandEl = dummyEl.firstChild;
+               } else {
+                       this.expandEl = options.dataTreeExpandElement;
+               }
+       } else {
+               this.expandEl = document.createElement("div");
+               this.expandEl.classList.add("tabulator-data-tree-control");
+               this.expandEl.tabIndex = 0;
+               this.expandEl.innerHTML = "<div class='tabulator-data-tree-control-expand'></div>";
+       }
+
+       switch (_typeof(options.dataTreeStartExpanded)) {
+               case "boolean":
+                       this.startOpen = function (row, index) {
+                               return options.dataTreeStartExpanded;
+                       };
+                       break;
+
+               case "function":
+                       this.startOpen = options.dataTreeStartExpanded;
+                       break;
+
+               default:
+                       this.startOpen = function (row, index) {
+                               return options.dataTreeStartExpanded[index];
+                       };
+                       break;
+       }
+};
+
+DataTree.prototype.initializeRow = function (row) {
+       var childArray = row.getData()[this.field];
+       var isArray = Array.isArray(childArray);
+
+       var children = isArray || !isArray && (typeof childArray === "undefined" ? "undefined" : _typeof(childArray)) === "object" && childArray !== null;
+
+       if (!children && row.modules.dataTree && row.modules.dataTree.branchEl) {
+               row.modules.dataTree.branchEl.parentNode.removeChild(row.modules.dataTree.branchEl);
+       }
+
+       if (!children && row.modules.dataTree && row.modules.dataTree.controlEl) {
+               row.modules.dataTree.controlEl.parentNode.removeChild(row.modules.dataTree.controlEl);
+       }
+
+       row.modules.dataTree = {
+               index: row.modules.dataTree ? row.modules.dataTree.index : 0,
+               open: children ? row.modules.dataTree ? row.modules.dataTree.open : this.startOpen(row.getComponent(), 0) : false,
+               controlEl: row.modules.dataTree && children ? row.modules.dataTree.controlEl : false,
+               branchEl: row.modules.dataTree && children ? row.modules.dataTree.branchEl : false,
+               parent: row.modules.dataTree ? row.modules.dataTree.parent : false,
+               children: children
+       };
+};
+
+DataTree.prototype.layoutRow = function (row) {
+       var cell = this.elementField ? row.getCell(this.elementField) : row.getCells()[0],
+           el = cell.getElement(),
+           config = row.modules.dataTree;
+
+       if (config.branchEl) {
+               if (config.branchEl.parentNode) {
+                       config.branchEl.parentNode.removeChild(config.branchEl);
+               }
+               config.branchEl = false;
+       }
+
+       if (config.controlEl) {
+               if (config.controlEl.parentNode) {
+                       config.controlEl.parentNode.removeChild(config.controlEl);
+               }
+               config.controlEl = false;
+       }
+
+       this.generateControlElement(row, el);
+
+       row.element.classList.add("tabulator-tree-level-" + config.index);
+
+       if (config.index) {
+               if (this.branchEl) {
+                       config.branchEl = this.branchEl.cloneNode(true);
+                       el.insertBefore(config.branchEl, el.firstChild);
+                       config.branchEl.style.marginLeft = (config.branchEl.offsetWidth + config.branchEl.style.marginRight) * (config.index - 1) + config.index * this.indent + "px";
+               } else {
+                       el.style.paddingLeft = parseInt(window.getComputedStyle(el, null).getPropertyValue('padding-left')) + config.index * this.indent + "px";
+               }
+       }
+};
+
+DataTree.prototype.generateControlElement = function (row, el) {
+       var _this = this;
+
+       var config = row.modules.dataTree,
+           el = el || row.getCells()[0].getElement(),
+           oldControl = config.controlEl;
+
+       if (config.children !== false) {
+
+               if (config.open) {
+                       config.controlEl = this.collapseEl.cloneNode(true);
+                       config.controlEl.addEventListener("click", function (e) {
+                               e.stopPropagation();
+                               _this.collapseRow(row);
+                       });
+               } else {
+                       config.controlEl = this.expandEl.cloneNode(true);
+                       config.controlEl.addEventListener("click", function (e) {
+                               e.stopPropagation();
+                               _this.expandRow(row);
+                       });
+               }
+
+               config.controlEl.addEventListener("mousedown", function (e) {
+                       e.stopPropagation();
+               });
+
+               if (oldControl && oldControl.parentNode === el) {
+                       oldControl.parentNode.replaceChild(config.controlEl, oldControl);
+               } else {
+                       el.insertBefore(config.controlEl, el.firstChild);
+               }
+       }
+};
+
+DataTree.prototype.setDisplayIndex = function (index) {
+       this.displayIndex = index;
+};
+
+DataTree.prototype.getDisplayIndex = function () {
+       return this.displayIndex;
+};
+
+DataTree.prototype.getRows = function (rows) {
+       var _this2 = this;
+
+       var output = [];
+
+       rows.forEach(function (row, i) {
+               var config, children;
+
+               output.push(row);
+
+               if (row instanceof Row) {
+
+                       config = row.modules.dataTree.children;
+
+                       if (!config.index && config.children !== false) {
+                               children = _this2.getChildren(row);
+
+                               children.forEach(function (child) {
+                                       output.push(child);
+                               });
+                       }
+               }
+       });
+
+       return output;
+};
+
+DataTree.prototype.getChildren = function (row) {
+       var _this3 = this;
+
+       var config = row.modules.dataTree,
+           children = [],
+           output = [];
+
+       if (config.children !== false && config.open) {
+               if (!Array.isArray(config.children)) {
+                       config.children = this.generateChildren(row);
+               }
+
+               if (this.table.modExists("filter")) {
+                       children = this.table.modules.filter.filter(config.children);
+               } else {
+                       children = config.children;
+               }
+
+               if (this.table.modExists("sort")) {
+                       this.table.modules.sort.sort(children);
+               }
+
+               children.forEach(function (child) {
+                       output.push(child);
+
+                       var subChildren = _this3.getChildren(child);
+
+                       subChildren.forEach(function (sub) {
+                               output.push(sub);
+                       });
+               });
+       }
+
+       return output;
+};
+
+DataTree.prototype.generateChildren = function (row) {
+       var _this4 = this;
+
+       var children = [];
+
+       var childArray = row.getData()[this.field];
+
+       if (!Array.isArray(childArray)) {
+               childArray = [childArray];
+       }
+
+       childArray.forEach(function (childData) {
+               var childRow = new Row(childData || {}, _this4.table.rowManager);
+               childRow.modules.dataTree.index = row.modules.dataTree.index + 1;
+               childRow.modules.dataTree.parent = row;
+               if (childRow.modules.dataTree.children) {
+                       childRow.modules.dataTree.open = _this4.startOpen(childRow.getComponent(), childRow.modules.dataTree.index);
+               }
+               children.push(childRow);
+       });
+
+       return children;
+};
+
+DataTree.prototype.expandRow = function (row, silent) {
+       var config = row.modules.dataTree;
+
+       if (config.children !== false) {
+               config.open = true;
+
+               row.reinitialize();
+
+               this.table.rowManager.refreshActiveData("tree", false, true);
+
+               this.table.options.dataTreeRowExpanded(row.getComponent(), row.modules.dataTree.index);
+       }
+};
+
+DataTree.prototype.collapseRow = function (row) {
+       var config = row.modules.dataTree;
+
+       if (config.children !== false) {
+               config.open = false;
+
+               row.reinitialize();
+
+               this.table.rowManager.refreshActiveData("tree", false, true);
+
+               this.table.options.dataTreeRowCollapsed(row.getComponent(), row.modules.dataTree.index);
+       }
+};
+
+DataTree.prototype.toggleRow = function (row) {
+       var config = row.modules.dataTree;
+
+       if (config.children !== false) {
+               if (config.open) {
+                       this.collapseRow(row);
+               } else {
+                       this.expandRow(row);
+               }
+       }
+};
+
+DataTree.prototype.getTreeParent = function (row) {
+       return row.modules.dataTree.parent ? row.modules.dataTree.parent.getComponent() : false;
+};
+
+DataTree.prototype.getFilteredTreeChildren = function (row) {
+       var config = row.modules.dataTree,
+           output = [],
+           children;
+
+       if (config.children) {
+
+               if (!Array.isArray(config.children)) {
+                       config.children = this.generateChildren(row);
+               }
+
+               if (this.table.modExists("filter")) {
+                       children = this.table.modules.filter.filter(config.children);
+               } else {
+                       children = config.children;
+               }
+
+               children.forEach(function (childRow) {
+                       if (childRow instanceof Row) {
+                               output.push(childRow);
+                       }
+               });
+       }
+
+       return output;
+};
+
+DataTree.prototype.rowDelete = function (row) {
+       var parent = row.modules.dataTree.parent,
+           childIndex;
+
+       if (parent) {
+               childIndex = this.findChildIndex(row, parent);
+
+               if (childIndex !== false) {
+                       parent.data[this.field].splice(childIndex, 1);
+               }
+
+               if (!parent.data[this.field].length) {
+                       delete parent.data[this.field];
+               }
+
+               this.initializeRow(parent);
+               this.layoutRow(parent);
+       }
+
+       this.table.rowManager.refreshActiveData("tree", false, true);
+};
+
+DataTree.prototype.addTreeChildRow = function (row, data, top, index) {
+       var childIndex = false;
+
+       if (typeof data === "string") {
+               data = JSON.parse(data);
+       }
+
+       if (!Array.isArray(row.data[this.field])) {
+               row.data[this.field] = [];
+
+               row.modules.dataTree.open = this.startOpen(row.getComponent(), row.modules.dataTree.index);
+       }
+
+       if (typeof index !== "undefined") {
+               childIndex = this.findChildIndex(index, row);
+
+               if (childIndex !== false) {
+                       row.data[this.field].splice(top ? childIndex : childIndex + 1, 0, data);
+               }
+       }
+
+       if (childIndex === false) {
+               if (top) {
+                       row.data[this.field].unshift(data);
+               } else {
+                       row.data[this.field].push(data);
+               }
+       }
+
+       this.initializeRow(row);
+       this.layoutRow(row);
+
+       this.table.rowManager.refreshActiveData("tree", false, true);
+};
+
+DataTree.prototype.findChildIndex = function (subject, parent) {
+       var _this5 = this;
+
+       var match = false;
+
+       if ((typeof subject === "undefined" ? "undefined" : _typeof(subject)) == "object") {
+
+               if (subject instanceof Row) {
+                       //subject is row element
+                       match = subject.data;
+               } else if (subject instanceof RowComponent) {
+                       //subject is public row component
+                       match = subject._getSelf().data;
+               } else if (typeof HTMLElement !== "undefined" && subject instanceof HTMLElement) {
+                       if (parent.modules.dataTree) {
+                               match = parent.modules.dataTree.children.find(function (childRow) {
+                                       return childRow instanceof Row ? childRow.element === subject : false;
+                               });
+
+                               if (match) {
+                                       match = match.data;
+                               }
+                       }
+               }
+       } else if (typeof subject == "undefined" || subject === null) {
+               match = false;
+       } else {
+               //subject should be treated as the index of the row
+               match = parent.data[this.field].find(function (row) {
+                       return row.data[_this5.table.options.index] == subject;
+               });
+       }
+
+       if (match) {
+
+               if (Array.isArray(parent.data[this.field])) {
+                       match = parent.data[this.field].indexOf(match);
+               }
+
+               if (match == -1) {
+                       match = false;
+               }
+       }
+
+       //catch all for any other type of input
+
+       return match;
+};
+
+DataTree.prototype.getTreeChildren = function (row) {
+       var config = row.modules.dataTree,
+           output = [];
+
+       if (config.children) {
+
+               if (!Array.isArray(config.children)) {
+                       config.children = this.generateChildren(row);
+               }
+
+               config.children.forEach(function (childRow) {
+                       if (childRow instanceof Row) {
+                               output.push(childRow.getComponent());
+                       }
+               });
+       }
+
+       return output;
+};
+
+DataTree.prototype.checkForRestyle = function (cell) {
+       if (!cell.row.cells.indexOf(cell)) {
+               cell.row.reinitialize();
+       }
+};
+
+DataTree.prototype.getChildField = function () {
+       return this.field;
+};
+
+DataTree.prototype.redrawNeeded = function (data) {
+       return (this.field ? typeof data[this.field] !== "undefined" : false) || (this.elementField ? typeof data[this.elementField] !== "undefined" : false);
+};
+
+Tabulator.prototype.registerModule("dataTree", DataTree);
\ No newline at end of file
diff --git a/admin/js/vendors/tabulator/js/modules/data_tree.min.js b/admin/js/vendors/tabulator/js/modules/data_tree.min.js
new file mode 100644 (file)
index 0000000..5f87cab
--- /dev/null
@@ -0,0 +1,2 @@
+/* Tabulator v4.7.0 (c) Oliver Folkerd */
+var _typeof="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},DataTree=function(e){this.table=e,this.indent=10,this.field="",this.collapseEl=null,this.expandEl=null,this.branchEl=null,this.elementField=!1,this.startOpen=function(){},this.displayIndex=0};DataTree.prototype.initialize=function(){var e=null,t=this.table.columnManager.getFirstVisibileColumn(),a=this.table.options;switch(this.field=a.dataTreeChildField,this.indent=a.dataTreeChildIndent,this.elementField=a.dataTreeElementColumn||!!t&&t.field,a.dataTreeBranchElement&&(!0===a.dataTreeBranchElement?(this.branchEl=document.createElement("div"),this.branchEl.classList.add("tabulator-data-tree-branch")):"string"==typeof a.dataTreeBranchElement?(e=document.createElement("div"),e.innerHTML=a.dataTreeBranchElement,this.branchEl=e.firstChild):this.branchEl=a.dataTreeBranchElement),a.dataTreeCollapseElement?"string"==typeof a.dataTreeCollapseElement?(e=document.createElement("div"),e.innerHTML=a.dataTreeCollapseElement,this.collapseEl=e.firstChild):this.collapseEl=a.dataTreeCollapseElement:(this.collapseEl=document.createElement("div"),this.collapseEl.classList.add("tabulator-data-tree-control"),this.collapseEl.tabIndex=0,this.collapseEl.innerHTML="<div class='tabulator-data-tree-control-collapse'></div>"),a.dataTreeExpandElement?"string"==typeof a.dataTreeExpandElement?(e=document.createElement("div"),e.innerHTML=a.dataTreeExpandElement,this.expandEl=e.firstChild):this.expandEl=a.dataTreeExpandElement:(this.expandEl=document.createElement("div"),this.expandEl.classList.add("tabulator-data-tree-control"),this.expandEl.tabIndex=0,this.expandEl.innerHTML="<div class='tabulator-data-tree-control-expand'></div>"),_typeof(a.dataTreeStartExpanded)){case"boolean":this.startOpen=function(e,t){return a.dataTreeStartExpanded};break;case"function":this.startOpen=a.dataTreeStartExpanded;break;default:this.startOpen=function(e,t){return a.dataTreeStartExpanded[t]}}},DataTree.prototype.initializeRow=function(e){var t=e.getData()[this.field],a=Array.isArray(t),n=a||!a&&"object"===(void 0===t?"undefined":_typeof(t))&&null!==t;!n&&e.modules.dataTree&&e.modules.dataTree.branchEl&&e.modules.dataTree.branchEl.parentNode.removeChild(e.modules.dataTree.branchEl),!n&&e.modules.dataTree&&e.modules.dataTree.controlEl&&e.modules.dataTree.controlEl.parentNode.removeChild(e.modules.dataTree.controlEl),e.modules.dataTree={index:e.modules.dataTree?e.modules.dataTree.index:0,open:!!n&&(e.modules.dataTree?e.modules.dataTree.open:this.startOpen(e.getComponent(),0)),controlEl:!(!e.modules.dataTree||!n)&&e.modules.dataTree.controlEl,branchEl:!(!e.modules.dataTree||!n)&&e.modules.dataTree.branchEl,parent:!!e.modules.dataTree&&e.modules.dataTree.parent,children:n}},DataTree.prototype.layoutRow=function(e){var t=this.elementField?e.getCell(this.elementField):e.getCells()[0],a=t.getElement(),n=e.modules.dataTree;n.branchEl&&(n.branchEl.parentNode&&n.branchEl.parentNode.removeChild(n.branchEl),n.branchEl=!1),n.controlEl&&(n.controlEl.parentNode&&n.controlEl.parentNode.removeChild(n.controlEl),n.controlEl=!1),this.generateControlElement(e,a),e.element.classList.add("tabulator-tree-level-"+n.index),n.index&&(this.branchEl?(n.branchEl=this.branchEl.cloneNode(!0),a.insertBefore(n.branchEl,a.firstChild),n.branchEl.style.marginLeft=(n.branchEl.offsetWidth+n.branchEl.style.marginRight)*(n.index-1)+n.index*this.indent+"px"):a.style.paddingLeft=parseInt(window.getComputedStyle(a,null).getPropertyValue("padding-left"))+n.index*this.indent+"px")},DataTree.prototype.generateControlElement=function(e,t){var a=this,n=e.modules.dataTree,t=t||e.getCells()[0].getElement(),r=n.controlEl;!1!==n.children&&(n.open?(n.controlEl=this.collapseEl.cloneNode(!0),n.controlEl.addEventListener("click",function(t){t.stopPropagation(),a.collapseRow(e)})):(n.controlEl=this.expandEl.cloneNode(!0),n.controlEl.addEventListener("click",function(t){t.stopPropagation(),a.expandRow(e)})),n.controlEl.addEventListener("mousedown",function(e){e.stopPropagation()}),r&&r.parentNode===t?r.parentNode.replaceChild(n.controlEl,r):t.insertBefore(n.controlEl,t.firstChild))},DataTree.prototype.setDisplayIndex=function(e){this.displayIndex=e},DataTree.prototype.getDisplayIndex=function(){return this.displayIndex},DataTree.prototype.getRows=function(e){var t=this,a=[];return e.forEach(function(e,n){var r,l;a.push(e),e instanceof Row&&(r=e.modules.dataTree.children,r.index||!1===r.children||(l=t.getChildren(e),l.forEach(function(e){a.push(e)})))}),a},DataTree.prototype.getChildren=function(e){var t=this,a=e.modules.dataTree,n=[],r=[];return!1!==a.children&&a.open&&(Array.isArray(a.children)||(a.children=this.generateChildren(e)),n=this.table.modExists("filter")?this.table.modules.filter.filter(a.children):a.children,this.table.modExists("sort")&&this.table.modules.sort.sort(n),n.forEach(function(e){r.push(e),t.getChildren(e).forEach(function(e){r.push(e)})})),r},DataTree.prototype.generateChildren=function(e){var t=this,a=[],n=e.getData()[this.field];return Array.isArray(n)||(n=[n]),n.forEach(function(n){var r=new Row(n||{},t.table.rowManager);r.modules.dataTree.index=e.modules.dataTree.index+1,r.modules.dataTree.parent=e,r.modules.dataTree.children&&(r.modules.dataTree.open=t.startOpen(r.getComponent(),r.modules.dataTree.index)),a.push(r)}),a},DataTree.prototype.expandRow=function(e,t){var a=e.modules.dataTree;!1!==a.children&&(a.open=!0,e.reinitialize(),this.table.rowManager.refreshActiveData("tree",!1,!0),this.table.options.dataTreeRowExpanded(e.getComponent(),e.modules.dataTree.index))},DataTree.prototype.collapseRow=function(e){var t=e.modules.dataTree;!1!==t.children&&(t.open=!1,e.reinitialize(),this.table.rowManager.refreshActiveData("tree",!1,!0),this.table.options.dataTreeRowCollapsed(e.getComponent(),e.modules.dataTree.index))},DataTree.prototype.toggleRow=function(e){var t=e.modules.dataTree;!1!==t.children&&(t.open?this.collapseRow(e):this.expandRow(e))},DataTree.prototype.getTreeParent=function(e){return!!e.modules.dataTree.parent&&e.modules.dataTree.parent.getComponent()},DataTree.prototype.getFilteredTreeChildren=function(e){var t,a=e.modules.dataTree,n=[];return a.children&&(Array.isArray(a.children)||(a.children=this.generateChildren(e)),t=this.table.modExists("filter")?this.table.modules.filter.filter(a.children):a.children,t.forEach(function(e){e instanceof Row&&n.push(e)})),n},DataTree.prototype.rowDelete=function(e){var t,a=e.modules.dataTree.parent;a&&(t=this.findChildIndex(e,a),!1!==t&&a.data[this.field].splice(t,1),a.data[this.field].length||delete a.data[this.field],this.initializeRow(a),this.layoutRow(a)),this.table.rowManager.refreshActiveData("tree",!1,!0)},DataTree.prototype.addTreeChildRow=function(e,t,a,n){var r=!1;"string"==typeof t&&(t=JSON.parse(t)),Array.isArray(e.data[this.field])||(e.data[this.field]=[],e.modules.dataTree.open=this.startOpen(e.getComponent(),e.modules.dataTree.index)),void 0!==n&&!1!==(r=this.findChildIndex(n,e))&&e.data[this.field].splice(a?r:r+1,0,t),!1===r&&(a?e.data[this.field].unshift(t):e.data[this.field].push(t)),this.initializeRow(e),this.layoutRow(e),this.table.rowManager.refreshActiveData("tree",!1,!0)},DataTree.prototype.findChildIndex=function(e,t){var a=this,n=!1;return"object"==(void 0===e?"undefined":_typeof(e))?e instanceof Row?n=e.data:e instanceof RowComponent?n=e._getSelf().data:"undefined"!=typeof HTMLElement&&e instanceof HTMLElement&&t.modules.dataTree&&(n=t.modules.dataTree.children.find(function(t){return t instanceof Row&&t.element===e}))&&(n=n.data):n=void 0!==e&&null!==e&&t.data[this.field].find(function(t){return t.data[a.table.options.index]==e}),n&&(Array.isArray(t.data[this.field])&&(n=t.data[this.field].indexOf(n)),-1==n&&(n=!1)),n},DataTree.prototype.getTreeChildren=function(e){var t=e.modules.dataTree,a=[];return t.children&&(Array.isArray(t.children)||(t.children=this.generateChildren(e)),t.children.forEach(function(e){e instanceof Row&&a.push(e.getComponent())})),a},DataTree.prototype.checkForRestyle=function(e){e.row.cells.indexOf(e)||e.row.reinitialize()},DataTree.prototype.getChildField=function(){return this.field},DataTree.prototype.redrawNeeded=function(e){return!!this.field&&void 0!==e[this.field]||!!this.elementField&&void 0!==e[this.elementField]},Tabulator.prototype.registerModule("dataTree",DataTree);
\ No newline at end of file
diff --git a/admin/js/vendors/tabulator/js/modules/download.js b/admin/js/vendors/tabulator/js/modules/download.js
new file mode 100644 (file)
index 0000000..9954910
--- /dev/null
@@ -0,0 +1,433 @@
+var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
+
+/* Tabulator v4.7.0 (c) Oliver Folkerd */
+
+var Download = function Download(table) {
+       this.table = table; //hold Tabulator object
+};
+
+//trigger file download
+Download.prototype.download = function (type, filename, options, range, interceptCallback) {
+       var self = this,
+           downloadFunc = false;
+
+       function buildLink(data, mime) {
+               if (interceptCallback) {
+                       if (interceptCallback === true) {
+                               self.triggerDownload(data, mime, type, filename, true);
+                       } else {
+                               interceptCallback(data);
+                       }
+               } else {
+                       self.triggerDownload(data, mime, type, filename);
+               }
+       }
+
+       if (typeof type == "function") {
+               downloadFunc = type;
+       } else {
+               if (self.downloaders[type]) {
+                       downloadFunc = self.downloaders[type];
+               } else {
+                       console.warn("Download Error - No such download type found: ", type);
+               }
+       }
+
+       if (downloadFunc) {
+               var list = this.generateExportList(range);
+
+               downloadFunc.call(this.table, list, options || {}, buildLink);
+       }
+};
+
+Download.prototype.generateExportList = function (range) {
+       var list = this.table.modules.export.generateExportList(this.table.options.downloadConfig, false, range || this.table.options.downloadRowRange, "download");
+
+       //assign group header formatter
+       var groupHeader = this.table.options.groupHeaderDownload;
+
+       if (groupHeader && !Array.isArray(groupHeader)) {
+               groupHeader = [groupHeader];
+       }
+
+       list.forEach(function (row) {
+               var group;
+
+               if (row.type === "group") {
+                       group = row.columns[0];
+
+                       if (groupHeader && groupHeader[row.indent]) {
+                               group.value = groupHeader[row.indent](group.value, row.component._group.getRowCount(), row.component._group.getData(), row.component);
+                       }
+               }
+       });
+
+       return list;
+};
+
+Download.prototype.triggerDownload = function (data, mime, type, filename, newTab) {
+       var element = document.createElement('a'),
+           blob = new Blob([data], { type: mime }),
+           filename = filename || "Tabulator." + (typeof type === "function" ? "txt" : type);
+
+       blob = this.table.options.downloadReady.call(this.table, data, blob);
+
+       if (blob) {
+
+               if (newTab) {
+                       window.open(window.URL.createObjectURL(blob));
+               } else {
+                       if (navigator.msSaveOrOpenBlob) {
+                               navigator.msSaveOrOpenBlob(blob, filename);
+                       } else {
+                               element.setAttribute('href', window.URL.createObjectURL(blob));
+
+                               //set file title
+                               element.setAttribute('download', filename);
+
+                               //trigger download
+                               element.style.display = 'none';
+                               document.body.appendChild(element);
+                               element.click();
+
+                               //remove temporary link element
+                               document.body.removeChild(element);
+                       }
+               }
+
+               if (this.table.options.downloadComplete) {
+                       this.table.options.downloadComplete();
+               }
+       }
+};
+
+Download.prototype.commsReceived = function (table, action, data) {
+       switch (action) {
+               case "intercept":
+                       this.download(data.type, "", data.options, data.active, data.intercept);
+                       break;
+       }
+};
+
+//downloaders
+Download.prototype.downloaders = {
+       csv: function csv(list, options, setFileContents) {
+               var delimiter = options && options.delimiter ? options.delimiter : ",",
+                   fileContents = [],
+                   headers = [];
+
+               list.forEach(function (row) {
+                       var item = [];
+
+                       switch (row.type) {
+                               case "group":
+                                       console.warn("Download Warning - CSV downloader cannot process row groups");
+                                       break;
+
+                               case "calc":
+                                       console.warn("Download Warning - CSV downloader cannot process column calculations");
+                                       break;
+
+                               case "header":
+                                       row.columns.forEach(function (col, i) {
+                                               if (col && col.depth === 1) {
+                                                       headers[i] = typeof col.value == "undefined" || typeof col.value == "null" ? "" : col.value;
+                                               }
+                                       });
+                                       break;
+
+                               case "row":
+                                       row.columns.forEach(function (col) {
+
+                                               if (col) {
+
+                                                       switch (_typeof(col.value)) {
+                                                               case "object":
+                                                                       col.value = JSON.stringify(col.value);
+                                                                       break;
+
+                                                               case "undefined":
+                                                               case "null":
+                                                                       col.value = "";
+                                                                       break;
+                                                       }
+
+                                                       item.push('"' + String(col.value).split('"').join('""') + '"');
+                                               }
+                                       });
+
+                                       fileContents.push(item.join(delimiter));
+                                       break;
+                       }
+               });
+
+               if (headers.length) {
+                       fileContents = [headers].concat(fileContents);
+               }
+
+               fileContents = fileContents.join("\n");
+
+               if (options.bom) {
+                       fileContents = "\uFEFF" + fileContents;
+               }
+
+               setFileContents(fileContents, "text/csv");
+       },
+
+       json: function json(list, options, setFileContents) {
+               var fileContents = [];
+
+               list.forEach(function (row) {
+                       var item = {};
+
+                       switch (row.type) {
+                               case "header":
+                                       break;
+
+                               case "group":
+                                       console.warn("Download Warning - JSON downloader cannot process row groups");
+                                       break;
+
+                               case "calc":
+                                       console.warn("Download Warning - JSON downloader cannot process column calculations");
+                                       break;
+
+                               case "row":
+                                       row.columns.forEach(function (col) {
+                                               if (col) {
+                                                       item[col.component.getField()] = col.value;
+                                               }
+                                       });
+
+                                       fileContents.push(item);
+                                       break;
+                       }
+               });
+
+               fileContents = JSON.stringify(fileContents, null, '\t');
+
+               setFileContents(fileContents, "application/json");
+       },
+
+       pdf: function pdf(list, options, setFileContents) {
+               var header = [],
+                   body = [],
+                   autoTableParams = {},
+                   rowGroupStyles = options.rowGroupStyles || {
+                       fontStyle: "bold",
+                       fontSize: 12,
+                       cellPadding: 6,
+                       fillColor: 220
+               },
+                   rowCalcStyles = options.rowCalcStyles || {
+                       fontStyle: "bold",
+                       fontSize: 10,
+                       cellPadding: 4,
+                       fillColor: 232
+               },
+                   jsPDFParams = options.jsPDF || {},
+                   title = options && options.title ? options.title : "";
+
+               if (!jsPDFParams.orientation) {
+                       jsPDFParams.orientation = options.orientation || "landscape";
+               }
+
+               if (!jsPDFParams.unit) {
+                       jsPDFParams.unit = "pt";
+               }
+
+               //parse row list
+               list.forEach(function (row) {
+                       var item = {};
+
+                       switch (row.type) {
+                               case "header":
+                                       header.push(parseRow(row));
+                                       break;
+
+                               case "group":
+                                       body.push(parseRow(row, rowGroupStyles));
+                                       break;
+
+                               case "calc":
+                                       body.push(parseRow(row, rowCalcStyles));
+                                       break;
+
+                               case "row":
+                                       body.push(parseRow(row));
+                                       break;
+                       }
+               });
+
+               function parseRow(row, styles) {
+                       var rowData = [];
+
+                       row.columns.forEach(function (col) {
+                               var cell;
+
+                               if (col) {
+                                       switch (_typeof(col.value)) {
+                                               case "object":
+                                                       col.value = JSON.stringify(col.value);
+                                                       break;
+
+                                               case "undefined":
+                                               case "null":
+                                                       col.value = "";
+                                                       break;
+                                       }
+
+                                       cell = {
+                                               content: col.value,
+                                               colSpan: col.width,
+                                               rowSpan: col.height
+                                       };
+
+                                       if (styles) {
+                                               cell.styles = styles;
+                                       }
+
+                                       rowData.push(cell);
+                               } else {
+                                       rowData.push("");
+                               }
+                       });
+
+                       return rowData;
+               }
+
+               //configure PDF
+               var doc = new jsPDF(jsPDFParams); //set document to landscape, better for most tables
+
+               if (options && options.autoTable) {
+                       if (typeof options.autoTable === "function") {
+                               autoTableParams = options.autoTable(doc) || {};
+                       } else {
+                               autoTableParams = options.autoTable;
+                       }
+               }
+
+               if (title) {
+                       autoTableParams.addPageContent = function (data) {
+                               doc.text(title, 40, 30);
+                       };
+               }
+
+               autoTableParams.head = header;
+               autoTableParams.body = body;
+
+               doc.autoTable(autoTableParams);
+
+               if (options && options.documentProcessing) {
+                       options.documentProcessing(doc);
+               }
+
+               setFileContents(doc.output("arraybuffer"), "application/pdf");
+       },
+
+       xlsx: function xlsx(list, options, setFileContents) {
+               var self = this,
+                   sheetName = options.sheetName || "Sheet1",
+                   workbook = XLSX.utils.book_new(),
+                   output;
+
+               workbook.SheetNames = [];
+               workbook.Sheets = {};
+
+               function generateSheet() {
+                       var rows = [],
+                           merges = [],
+                           worksheet = {},
+                           range = { s: { c: 0, r: 0 }, e: { c: list[0] ? list[0].columns.reduce(function (a, b) {
+                                               return a + (b && b.width ? b.width : 1);
+                                       }, 0) : 0, r: list.length } };
+
+                       //parse row list
+                       list.forEach(function (row, i) {
+                               var rowData = [];
+
+                               row.columns.forEach(function (col, j) {
+
+                                       if (col) {
+                                               rowData.push(!(col.value instanceof Date) && _typeof(col.value) === "object" ? JSON.stringify(col.value) : col.value);
+
+                                               if (col.width > 1 || col.height > -1) {
+                                                       merges.push({ s: { r: i, c: j }, e: { r: i + col.height - 1, c: j + col.width - 1 } });
+                                               }
+                                       } else {
+                                               rowData.push("");
+                                       }
+                               });
+
+                               rows.push(rowData);
+                       });
+
+                       //convert rows to worksheet
+                       XLSX.utils.sheet_add_aoa(worksheet, rows);
+
+                       worksheet['!ref'] = XLSX.utils.encode_range(range);
+
+                       if (merges.length) {
+                               worksheet["!merges"] = merges;
+                       }
+
+                       return worksheet;
+               }
+
+               if (options.sheetOnly) {
+                       setFileContents(generateSheet());
+                       return;
+               }
+
+               if (options.sheets) {
+                       for (var sheet in options.sheets) {
+
+                               if (options.sheets[sheet] === true) {
+                                       workbook.SheetNames.push(sheet);
+                                       workbook.Sheets[sheet] = generateSheet();
+                               } else {
+
+                                       workbook.SheetNames.push(sheet);
+
+                                       this.table.modules.comms.send(options.sheets[sheet], "download", "intercept", {
+                                               type: "xlsx",
+                                               options: { sheetOnly: true },
+                                               active: self.active,
+                                               intercept: function intercept(data) {
+                                                       workbook.Sheets[sheet] = data;
+                                               }
+                                       });
+                               }
+                       }
+               } else {
+                       workbook.SheetNames.push(sheetName);
+                       workbook.Sheets[sheetName] = generateSheet();
+               }
+
+               if (options.documentProcessing) {
+                       workbook = options.documentProcessing(workbook);
+               }
+
+               //convert workbook to binary array
+               function s2ab(s) {
+                       var buf = new ArrayBuffer(s.length);
+                       var view = new Uint8Array(buf);
+                       for (var i = 0; i != s.length; ++i) {
+                               view[i] = s.charCodeAt(i) & 0xFF;
+                       }return buf;
+               }
+
+               output = XLSX.write(workbook, { bookType: 'xlsx', bookSST: true, type: 'binary' });
+
+               setFileContents(s2ab(output), "application/octet-stream");
+       },
+
+       html: function html(list, options, setFileContents) {
+               if (this.modExists("export", true)) {
+                       setFileContents(this.modules.export.genereateHTMLTable(list), "text/html");
+               }
+       }
+
+};
+
+Tabulator.prototype.registerModule("download", Download);
\ No newline at end of file
diff --git a/admin/js/vendors/tabulator/js/modules/download.min.js b/admin/js/vendors/tabulator/js/modules/download.min.js
new file mode 100644 (file)
index 0000000..b3b776c
--- /dev/null
@@ -0,0 +1,2 @@
+/* Tabulator v4.7.0 (c) Oliver Folkerd */
+var _typeof="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},Download=function(e){this.table=e};Download.prototype.download=function(e,o,t,n,a){function r(t,n){a?!0===a?l.triggerDownload(t,n,e,o,!0):a(t):l.triggerDownload(t,n,e,o)}var l=this,s=!1;if("function"==typeof e?s=e:l.downloaders[e]?s=l.downloaders[e]:console.warn("Download Error - No such download type found: ",e),s){var i=this.generateExportList(n);s.call(this.table,i,t||{},r)}},Download.prototype.generateExportList=function(e){var o=this.table.modules.export.generateExportList(this.table.options.downloadConfig,!1,e||this.table.options.downloadRowRange,"download"),t=this.table.options.groupHeaderDownload;return t&&!Array.isArray(t)&&(t=[t]),o.forEach(function(e){var o;"group"===e.type&&(o=e.columns[0],t&&t[e.indent]&&(o.value=t[e.indent](o.value,e.component._group.getRowCount(),e.component._group.getData(),e.component)))}),o},Download.prototype.triggerDownload=function(e,o,t,n,a){var r=document.createElement("a"),l=new Blob([e],{type:o}),n=n||"Tabulator."+("function"==typeof t?"txt":t);(l=this.table.options.downloadReady.call(this.table,e,l))&&(a?window.open(window.URL.createObjectURL(l)):navigator.msSaveOrOpenBlob?navigator.msSaveOrOpenBlob(l,n):(r.setAttribute("href",window.URL.createObjectURL(l)),r.setAttribute("download",n),r.style.display="none",document.body.appendChild(r),r.click(),document.body.removeChild(r)),this.table.options.downloadComplete&&this.table.options.downloadComplete())},Download.prototype.commsReceived=function(e,o,t){switch(o){case"intercept":this.download(t.type,"",t.options,t.active,t.intercept)}},Download.prototype.downloaders={csv:function(e,o,t){var n=o&&o.delimiter?o.delimiter:",",a=[],r=[];e.forEach(function(e){var o=[];switch(e.type){case"group":console.warn("Download Warning - CSV downloader cannot process row groups");break;case"calc":console.warn("Download Warning - CSV downloader cannot process column calculations");break;case"header":e.columns.forEach(function(e,o){e&&1===e.depth&&(r[o]=void 0===e.value||"null"==typeof e.value?"":e.value)});break;case"row":e.columns.forEach(function(e){if(e){switch(_typeof(e.value)){case"object":e.value=JSON.stringify(e.value);break;case"undefined":case"null":e.value=""}o.push('"'+String(e.value).split('"').join('""')+'"')}}),a.push(o.join(n))}}),r.length&&(a=[r].concat(a)),a=a.join("\n"),o.bom&&(a="\ufeff"+a),t(a,"text/csv")},json:function(e,o,t){var n=[];e.forEach(function(e){var o={};switch(e.type){case"header":break;case"group":console.warn("Download Warning - JSON downloader cannot process row groups");break;case"calc":console.warn("Download Warning - JSON downloader cannot process column calculations");break;case"row":e.columns.forEach(function(e){e&&(o[e.component.getField()]=e.value)}),n.push(o)}}),n=JSON.stringify(n,null,"\t"),t(n,"application/json")},pdf:function(e,o,t){function n(e,o){var t=[];return e.columns.forEach(function(e){var n;if(e){switch(_typeof(e.value)){case"object":e.value=JSON.stringify(e.value);break;case"undefined":case"null":e.value=""}n={content:e.value,colSpan:e.width,rowSpan:e.height},o&&(n.styles=o),t.push(n)}else t.push("")}),t}var a=[],r=[],l={},s=o.rowGroupStyles||{fontStyle:"bold",fontSize:12,cellPadding:6,fillColor:220},i=o.rowCalcStyles||{fontStyle:"bold",fontSize:10,cellPadding:4,fillColor:232},c=o.jsPDF||{},u=o&&o.title?o.title:"";c.orientation||(c.orientation=o.orientation||"landscape"),c.unit||(c.unit="pt"),e.forEach(function(e){switch(e.type){case"header":a.push(n(e));break;case"group":r.push(n(e,s));break;case"calc":r.push(n(e,i));break;case"row":r.push(n(e))}});var d=new jsPDF(c);o&&o.autoTable&&(l="function"==typeof o.autoTable?o.autoTable(d)||{}:o.autoTable),u&&(l.addPageContent=function(e){d.text(u,40,30)}),l.head=a,l.body=r,d.autoTable(l),o&&o.documentProcessing&&o.documentProcessing(d),t(d.output("arraybuffer"),"application/pdf")},xlsx:function(e,o,t){function n(){var o=[],t=[],n={},a={s:{c:0,r:0},e:{c:e[0]?e[0].columns.reduce(function(e,o){return e+(o&&o.width?o.width:1)},0):0,r:e.length}};return e.forEach(function(e,n){var a=[];e.columns.forEach(function(e,o){e?(a.push(e.value instanceof Date||"object"!==_typeof(e.value)?e.value:JSON.stringify(e.value)),(e.width>1||e.height>-1)&&t.push({s:{r:n,c:o},e:{r:n+e.height-1,c:o+e.width-1}})):a.push("")}),o.push(a)}),XLSX.utils.sheet_add_aoa(n,o),n["!ref"]=XLSX.utils.encode_range(a),t.length&&(n["!merges"]=t),n}var a,r=this,l=o.sheetName||"Sheet1",s=XLSX.utils.book_new();if(s.SheetNames=[],s.Sheets={},o.sheetOnly)return void t(n());if(o.sheets)for(var i in o.sheets)!0===o.sheets[i]?(s.SheetNames.push(i),s.Sheets[i]=n()):(s.SheetNames.push(i),this.table.modules.comms.send(o.sheets[i],"download","intercept",{type:"xlsx",options:{sheetOnly:!0},active:r.active,intercept:function(e){s.Sheets[i]=e}}));else s.SheetNames.push(l),s.Sheets[l]=n();o.documentProcessing&&(s=o.documentProcessing(s)),a=XLSX.write(s,{bookType:"xlsx",bookSST:!0,type:"binary"}),t(function(e){for(var o=new ArrayBuffer(e.length),t=new Uint8Array(o),n=0;n!=e.length;++n)t[n]=255&e.charCodeAt(n);return o}(a),"application/octet-stream")},html:function(e,o,t){this.modExists("export",!0)&&t(this.modules.export.genereateHTMLTable(e),"text/html")}},Tabulator.prototype.registerModule("download",Download);
\ No newline at end of file
diff --git a/admin/js/vendors/tabulator/js/modules/edit.js b/admin/js/vendors/tabulator/js/modules/edit.js
new file mode 100644 (file)
index 0000000..e35dd84
--- /dev/null
@@ -0,0 +1,2109 @@
+var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
+
+/* Tabulator v4.7.0 (c) Oliver Folkerd */
+
+var Edit = function Edit(table) {
+       this.table = table; //hold Tabulator object
+       this.currentCell = false; //hold currently editing cell
+       this.mouseClick = false; //hold mousedown state to prevent click binding being overriden by editor opening
+       this.recursionBlock = false; //prevent focus recursion
+       this.invalidEdit = false;
+       this.editedCells = [];
+};
+
+//initialize column editor
+Edit.prototype.initializeColumn = function (column) {
+       var self = this,
+           config = {
+               editor: false,
+               blocked: false,
+               check: column.definition.editable,
+               params: column.definition.editorParams || {}
+       };
+
+       //set column editor
+       switch (_typeof(column.definition.editor)) {
+               case "string":
+
+                       if (column.definition.editor === "tick") {
+                               column.definition.editor = "tickCross";
+                               console.warn("DEPRECATION WARNING - the tick editor has been deprecated, please use the tickCross editor");
+                       }
+
+                       if (self.editors[column.definition.editor]) {
+                               config.editor = self.editors[column.definition.editor];
+                       } else {
+                               console.warn("Editor Error - No such editor found: ", column.definition.editor);
+                       }
+                       break;
+
+               case "function":
+                       config.editor = column.definition.editor;
+                       break;
+
+               case "boolean":
+
+                       if (column.definition.editor === true) {
+
+                               if (typeof column.definition.formatter !== "function") {
+
+                                       if (column.definition.formatter === "tick") {
+                                               column.definition.formatter = "tickCross";
+                                               console.warn("DEPRECATION WARNING - the tick editor has been deprecated, please use the tickCross editor");
+                                       }
+
+                                       if (self.editors[column.definition.formatter]) {
+                                               config.editor = self.editors[column.definition.formatter];
+                                       } else {
+                                               config.editor = self.editors["input"];
+                                       }
+                               } else {
+                                       console.warn("Editor Error - Cannot auto lookup editor for a custom formatter: ", column.definition.formatter);
+                               }
+                       }
+                       break;
+       }
+
+       if (config.editor) {
+               column.modules.edit = config;
+       }
+};
+
+Edit.prototype.getCurrentCell = function () {
+       return this.currentCell ? this.currentCell.getComponent() : false;
+};
+
+Edit.prototype.clearEditor = function (cancel) {
+       var cell = this.currentCell,
+           cellEl;
+
+       this.invalidEdit = false;
+
+       if (cell) {
+               this.currentCell = false;
+
+               cellEl = cell.getElement();
+
+               if (cancel) {
+                       cell.validate();
+               } else {
+                       cellEl.classList.remove("tabulator-validation-fail");
+               }
+
+               cellEl.classList.remove("tabulator-editing");
+               while (cellEl.firstChild) {
+                       cellEl.removeChild(cellEl.firstChild);
+               }cell.row.getElement().classList.remove("tabulator-row-editing");
+       }
+};
+
+Edit.prototype.cancelEdit = function () {
+
+       if (this.currentCell) {
+               var cell = this.currentCell;
+               var component = this.currentCell.getComponent();
+
+               this.clearEditor(true);
+               cell.setValueActual(cell.getValue());
+               cell.cellRendered();
+
+               if (cell.column.cellEvents.cellEditCancelled) {
+                       cell.column.cellEvents.cellEditCancelled.call(this.table, component);
+               }
+
+               this.table.options.cellEditCancelled.call(this.table, component);
+       }
+};
+
+//return a formatted value for a cell
+Edit.prototype.bindEditor = function (cell) {
+       var self = this,
+           element = cell.getElement();
+
+       element.setAttribute("tabindex", 0);
+
+       element.addEventListener("click", function (e) {
+               if (!element.classList.contains("tabulator-editing")) {
+                       element.focus({ preventScroll: true });
+               }
+       });
+
+       element.addEventListener("mousedown", function (e) {
+               self.mouseClick = true;
+       });
+
+       element.addEventListener("focus", function (e) {
+               if (!self.recursionBlock) {
+                       self.edit(cell, e, false);
+               }
+       });
+};
+
+Edit.prototype.focusCellNoEvent = function (cell, block) {
+       this.recursionBlock = true;
+       if (!(block && this.table.browser === "ie")) {
+               cell.getElement().focus({ preventScroll: true });
+       }
+       this.recursionBlock = false;
+};
+
+Edit.prototype.editCell = function (cell, forceEdit) {
+       this.focusCellNoEvent(cell);
+       this.edit(cell, false, forceEdit);
+};
+
+Edit.prototype.focusScrollAdjust = function (cell) {
+       if (this.table.rowManager.getRenderMode() == "virtual") {
+               var topEdge = this.table.rowManager.element.scrollTop,
+                   bottomEdge = this.table.rowManager.element.clientHeight + this.table.rowManager.element.scrollTop,
+                   rowEl = cell.row.getElement(),
+                   offset = rowEl.offsetTop;
+
+               if (rowEl.offsetTop < topEdge) {
+                       this.table.rowManager.element.scrollTop -= topEdge - rowEl.offsetTop;
+               } else {
+                       if (rowEl.offsetTop + rowEl.offsetHeight > bottomEdge) {
+                               this.table.rowManager.element.scrollTop += rowEl.offsetTop + rowEl.offsetHeight - bottomEdge;
+                       }
+               }
+       }
+};
+
+Edit.prototype.edit = function (cell, e, forceEdit) {
+       var self = this,
+           allowEdit = true,
+           rendered = function rendered() {},
+           element = cell.getElement(),
+           cellEditor,
+           component,
+           params;
+
+       //prevent editing if another cell is refusing to leave focus (eg. validation fail)
+       if (this.currentCell) {
+               if (!this.invalidEdit) {
+                       this.cancelEdit();
+               }
+               return;
+       }
+
+       //handle successfull value change
+       function success(value) {
+               if (self.currentCell === cell) {
+                       var valid = true;
+
+                       if (cell.column.modules.validate && self.table.modExists("validate") && self.table.options.validationMode != "manual") {
+                               valid = self.table.modules.validate.validate(cell.column.modules.validate, cell, value);
+                       }
+
+                       if (valid === true || self.table.options.validationMode === "highlight") {
+                               self.clearEditor();
+                               cell.setValue(value, true);
+
+                               if (!cell.modules.edit) {
+                                       cell.modules.edit = {};
+                               }
+
+                               cell.modules.edit.edited = true;
+
+                               if (self.editedCells.indexOf(cell) == -1) {
+                                       self.editedCells.push(cell);
+                               }
+
+                               if (self.table.options.dataTree && self.table.modExists("dataTree")) {
+                                       self.table.modules.dataTree.checkForRestyle(cell);
+                               }
+
+                               if (valid !== true) {
+                                       element.classList.add("tabulator-validation-fail");
+                                       return false;
+                               }
+
+                               return true;
+                       } else {
+                               self.invalidEdit = true;
+                               element.classList.add("tabulator-validation-fail");
+                               self.focusCellNoEvent(cell, true);
+                               rendered();
+                               self.table.options.validationFailed.call(self.table, cell.getComponent(), value, valid);
+
+                               return false;
+                       }
+               } else {
+                       // console.warn("Edit Success Error - cannot call success on a cell that is no longer being edited");
+               }
+       }
+
+       //handle aborted edit
+       function cancel() {
+               if (self.currentCell === cell) {
+                       self.cancelEdit();
+
+                       if (self.table.options.dataTree && self.table.modExists("dataTree")) {
+                               self.table.modules.dataTree.checkForRestyle(cell);
+                       }
+               } else {
+                       // console.warn("Edit Success Error - cannot call cancel on a cell that is no longer being edited");
+               }
+       }
+
+       function onRendered(callback) {
+               rendered = callback;
+       }
+
+       if (!cell.column.modules.edit.blocked) {
+               if (e) {
+                       e.stopPropagation();
+               }
+
+               switch (_typeof(cell.column.modules.edit.check)) {
+                       case "function":
+                               allowEdit = cell.column.modules.edit.check(cell.getComponent());
+                               break;
+
+                       case "boolean":
+                               allowEdit = cell.column.modules.edit.check;
+                               break;
+               }
+
+               if (allowEdit || forceEdit) {
+
+                       self.cancelEdit();
+
+                       self.currentCell = cell;
+
+                       this.focusScrollAdjust(cell);
+
+                       component = cell.getComponent();
+
+                       if (this.mouseClick) {
+                               this.mouseClick = false;
+
+                               if (cell.column.cellEvents.cellClick) {
+                                       cell.column.cellEvents.cellClick.call(this.table, e, component);
+                               }
+                       }
+
+                       if (cell.column.cellEvents.cellEditing) {
+                               cell.column.cellEvents.cellEditing.call(this.table, component);
+                       }
+
+                       self.table.options.cellEditing.call(this.table, component);
+
+                       params = typeof cell.column.modules.edit.params === "function" ? cell.column.modules.edit.params(component) : cell.column.modules.edit.params;
+
+                       cellEditor = cell.column.modules.edit.editor.call(self, component, onRendered, success, cancel, params);
+
+                       //if editor returned, add to DOM, if false, abort edit
+                       if (cellEditor !== false) {
+
+                               if (cellEditor instanceof Node) {
+                                       element.classList.add("tabulator-editing");
+                                       cell.row.getElement().classList.add("tabulator-row-editing");
+                                       while (element.firstChild) {
+                                               element.removeChild(element.firstChild);
+                                       }element.appendChild(cellEditor);
+
+                                       //trigger onRendered Callback
+                                       rendered();
+
+                                       //prevent editing from triggering rowClick event
+                                       var children = element.children;
+
+                                       for (var i = 0; i < children.length; i++) {
+                                               children[i].addEventListener("click", function (e) {
+                                                       e.stopPropagation();
+                                               });
+                                       }
+                               } else {
+                                       console.warn("Edit Error - Editor should return an instance of Node, the editor returned:", cellEditor);
+                                       element.blur();
+                                       return false;
+                               }
+                       } else {
+                               element.blur();
+                               return false;
+                       }
+
+                       return true;
+               } else {
+                       this.mouseClick = false;
+                       element.blur();
+                       return false;
+               }
+       } else {
+               this.mouseClick = false;
+               element.blur();
+               return false;
+       }
+};
+
+Edit.prototype.maskInput = function (el, options) {
+       var mask = options.mask,
+           maskLetter = typeof options.maskLetterChar !== "undefined" ? options.maskLetterChar : "A",
+           maskNumber = typeof options.maskNumberChar !== "undefined" ? options.maskNumberChar : "9",
+           maskWildcard = typeof options.maskWildcardChar !== "undefined" ? options.maskWildcardChar : "*",
+           success = false;
+
+       function fillSymbols(index) {
+               var symbol = mask[index];
+               if (typeof symbol !== "undefined" && symbol !== maskWildcard && symbol !== maskLetter && symbol !== maskNumber) {
+                       el.value = el.value + "" + symbol;
+                       fillSymbols(index + 1);
+               }
+       }
+
+       el.addEventListener("keydown", function (e) {
+               var index = el.value.length,
+                   char = e.key;
+
+               if (e.keyCode > 46) {
+                       if (index >= mask.length) {
+                               e.preventDefault();
+                               e.stopPropagation();
+                               success = false;
+                               return false;
+                       } else {
+                               switch (mask[index]) {
+                                       case maskLetter:
+                                               if (char.toUpperCase() == char.toLowerCase()) {
+                                                       e.preventDefault();
+                                                       e.stopPropagation();
+                                                       success = false;
+                                                       return false;
+                                               }
+                                               break;
+
+                                       case maskNumber:
+                                               if (isNaN(char)) {
+                                                       e.preventDefault();
+                                                       e.stopPropagation();
+                                                       success = false;
+                                                       return false;
+                                               }
+                                               break;
+
+                                       case maskWildcard:
+                                               break;
+
+                                       default:
+                                               if (char !== mask[index]) {
+                                                       e.preventDefault();
+                                                       e.stopPropagation();
+                                                       success = false;
+                                                       return false;
+                                               }
+                               }
+                       }
+
+                       success = true;
+               }
+
+               return;
+       });
+
+       el.addEventListener("keyup", function (e) {
+               if (e.keyCode > 46) {
+                       if (options.maskAutoFill) {
+                               fillSymbols(el.value.length);
+                       }
+               }
+       });
+
+       if (!el.placeholder) {
+               el.placeholder = mask;
+       }
+
+       if (options.maskAutoFill) {
+               fillSymbols(el.value.length);
+       }
+};
+
+Edit.prototype.getEditedCells = function () {
+       var output = [];
+
+       this.editedCells.forEach(function (cell) {
+               output.push(cell.getComponent());
+       });
+
+       return output;
+};
+
+Edit.prototype.clearEdited = function (cell) {
+       var editIndex;
+
+       if (cell.modules.edit && cell.modules.edit.edited) {
+               cell.modules.validate.invalid = false;
+
+               editIndex = this.editedCells.indexOf(cell);
+
+               if (editIndex > -1) {
+                       this.editedCells.splice(editIndex, 1);
+               }
+       }
+};
+
+//default data editors
+Edit.prototype.editors = {
+
+       //input element
+       input: function input(cell, onRendered, success, cancel, editorParams) {
+
+               //create and style input
+               var cellValue = cell.getValue(),
+                   input = document.createElement("input");
+
+               input.setAttribute("type", editorParams.search ? "search" : "text");
+
+               input.style.padding = "4px";
+               input.style.width = "100%";
+               input.style.boxSizing = "border-box";
+
+               if (editorParams.elementAttributes && _typeof(editorParams.elementAttributes) == "object") {
+                       for (var key in editorParams.elementAttributes) {
+                               if (key.charAt(0) == "+") {
+                                       key = key.slice(1);
+                                       input.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes["+" + key]);
+                               } else {
+                                       input.setAttribute(key, editorParams.elementAttributes[key]);
+                               }
+                       }
+               }
+
+               input.value = typeof cellValue !== "undefined" ? cellValue : "";
+
+               onRendered(function () {
+                       input.focus({ preventScroll: true });
+                       input.style.height = "100%";
+               });
+
+               function onChange(e) {
+                       if ((cellValue === null || typeof cellValue === "undefined") && input.value !== "" || input.value !== cellValue) {
+                               if (success(input.value)) {
+                                       cellValue = input.value; //persist value if successfully validated incase editor is used as header filter
+                               }
+                       } else {
+                               cancel();
+                       }
+               }
+
+               //submit new value on blur or change
+               input.addEventListener("change", onChange);
+               input.addEventListener("blur", onChange);
+
+               //submit new value on enter
+               input.addEventListener("keydown", function (e) {
+                       switch (e.keyCode) {
+                               // case 9:
+                               case 13:
+                                       onChange(e);
+                                       break;
+
+                               case 27:
+                                       cancel();
+                                       break;
+                       }
+               });
+
+               if (editorParams.mask) {
+                       this.table.modules.edit.maskInput(input, editorParams);
+               }
+
+               return input;
+       },
+
+       //resizable text area element
+       textarea: function textarea(cell, onRendered, success, cancel, editorParams) {
+               var self = this,
+                   cellValue = cell.getValue(),
+                   vertNav = editorParams.verticalNavigation || "hybrid",
+                   value = String(cellValue !== null && typeof cellValue !== "undefined" ? cellValue : ""),
+                   count = (value.match(/(?:\r\n|\r|\n)/g) || []).length + 1,
+                   input = document.createElement("textarea"),
+                   scrollHeight = 0;
+
+               //create and style input
+               input.style.display = "block";
+               input.style.padding = "2px";
+               input.style.height = "100%";
+               input.style.width = "100%";
+               input.style.boxSizing = "border-box";
+               input.style.whiteSpace = "pre-wrap";
+               input.style.resize = "none";
+
+               if (editorParams.elementAttributes && _typeof(editorParams.elementAttributes) == "object") {
+                       for (var key in editorParams.elementAttributes) {
+                               if (key.charAt(0) == "+") {
+                                       key = key.slice(1);
+                                       input.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes["+" + key]);
+                               } else {
+                                       input.setAttribute(key, editorParams.elementAttributes[key]);
+                               }
+                       }
+               }
+
+               input.value = value;
+
+               onRendered(function () {
+                       input.focus({ preventScroll: true });
+                       input.style.height = "100%";
+               });
+
+               function onChange(e) {
+
+                       if ((cellValue === null || typeof cellValue === "undefined") && input.value !== "" || input.value !== cellValue) {
+
+                               if (success(input.value)) {
+                                       cellValue = input.value; //persist value if successfully validated incase editor is used as header filter
+                               }
+
+                               setTimeout(function () {
+                                       cell.getRow().normalizeHeight();
+                               }, 300);
+                       } else {
+                               cancel();
+                       }
+               }
+
+               //submit new value on blur or change
+               input.addEventListener("change", onChange);
+               input.addEventListener("blur", onChange);
+
+               input.addEventListener("keyup", function () {
+
+                       input.style.height = "";
+
+                       var heightNow = input.scrollHeight;
+
+                       input.style.height = heightNow + "px";
+
+                       if (heightNow != scrollHeight) {
+                               scrollHeight = heightNow;
+                               cell.getRow().normalizeHeight();
+                       }
+               });
+
+               input.addEventListener("keydown", function (e) {
+
+                       switch (e.keyCode) {
+                               case 27:
+                                       cancel();
+                                       break;
+
+                               case 38:
+                                       //up arrow
+                                       if (vertNav == "editor" || vertNav == "hybrid" && input.selectionStart) {
+                                               e.stopImmediatePropagation();
+                                               e.stopPropagation();
+                                       }
+
+                                       break;
+
+                               case 40:
+                                       //down arrow
+                                       if (vertNav == "editor" || vertNav == "hybrid" && input.selectionStart !== input.value.length) {
+                                               e.stopImmediatePropagation();
+                                               e.stopPropagation();
+                                       }
+                                       break;
+                       }
+               });
+
+               if (editorParams.mask) {
+                       this.table.modules.edit.maskInput(input, editorParams);
+               }
+
+               return input;
+       },
+
+       //input element with type of number
+       number: function number(cell, onRendered, success, cancel, editorParams) {
+
+               var cellValue = cell.getValue(),
+                   vertNav = editorParams.verticalNavigation || "editor",
+                   input = document.createElement("input");
+
+               input.setAttribute("type", "number");
+
+               if (typeof editorParams.max != "undefined") {
+                       input.setAttribute("max", editorParams.max);
+               }
+
+               if (typeof editorParams.min != "undefined") {
+                       input.setAttribute("min", editorParams.min);
+               }
+
+               if (typeof editorParams.step != "undefined") {
+                       input.setAttribute("step", editorParams.step);
+               }
+
+               //create and style input
+               input.style.padding = "4px";
+               input.style.width = "100%";
+               input.style.boxSizing = "border-box";
+
+               if (editorParams.elementAttributes && _typeof(editorParams.elementAttributes) == "object") {
+                       for (var key in editorParams.elementAttributes) {
+                               if (key.charAt(0) == "+") {
+                                       key = key.slice(1);
+                                       input.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes["+" + key]);
+                               } else {
+                                       input.setAttribute(key, editorParams.elementAttributes[key]);
+                               }
+                       }
+               }
+
+               input.value = cellValue;
+
+               var blurFunc = function blurFunc(e) {
+                       onChange();
+               };
+
+               onRendered(function () {
+                       //submit new value on blur
+                       input.removeEventListener("blur", blurFunc);
+
+                       input.focus({ preventScroll: true });
+                       input.style.height = "100%";
+
+                       //submit new value on blur
+                       input.addEventListener("blur", blurFunc);
+               });
+
+               function onChange() {
+                       var value = input.value;
+
+                       if (!isNaN(value) && value !== "") {
+                               value = Number(value);
+                       }
+
+                       if (value !== cellValue) {
+                               if (success(value)) {
+                                       cellValue = value; //persist value if successfully validated incase editor is used as header filter
+                               }
+                       } else {
+                               cancel();
+                       }
+               }
+
+               //submit new value on enter
+               input.addEventListener("keydown", function (e) {
+                       switch (e.keyCode) {
+                               case 13:
+                                       // case 9:
+                                       onChange();
+                                       break;
+
+                               case 27:
+                                       cancel();
+                                       break;
+
+                               case 38: //up arrow
+                               case 40:
+                                       //down arrow
+                                       if (vertNav == "editor") {
+                                               e.stopImmediatePropagation();
+                                               e.stopPropagation();
+                                       }
+                                       break;
+                       }
+               });
+
+               if (editorParams.mask) {
+                       this.table.modules.edit.maskInput(input, editorParams);
+               }
+
+               return input;
+       },
+
+       //input element with type of number
+       range: function range(cell, onRendered, success, cancel, editorParams) {
+
+               var cellValue = cell.getValue(),
+                   input = document.createElement("input");
+
+               input.setAttribute("type", "range");
+
+               if (typeof editorParams.max != "undefined") {
+                       input.setAttribute("max", editorParams.max);
+               }
+
+               if (typeof editorParams.min != "undefined") {
+                       input.setAttribute("min", editorParams.min);
+               }
+
+               if (typeof editorParams.step != "undefined") {
+                       input.setAttribute("step", editorParams.step);
+               }
+
+               //create and style input
+               input.style.padding = "4px";
+               input.style.width = "100%";
+               input.style.boxSizing = "border-box";
+
+               if (editorParams.elementAttributes && _typeof(editorParams.elementAttributes) == "object") {
+                       for (var key in editorParams.elementAttributes) {
+                               if (key.charAt(0) == "+") {
+                                       key = key.slice(1);
+                                       input.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes["+" + key]);
+                               } else {
+                                       input.setAttribute(key, editorParams.elementAttributes[key]);
+                               }
+                       }
+               }
+
+               input.value = cellValue;
+
+               onRendered(function () {
+                       input.focus({ preventScroll: true });
+                       input.style.height = "100%";
+               });
+
+               function onChange() {
+                       var value = input.value;
+
+                       if (!isNaN(value) && value !== "") {
+                               value = Number(value);
+                       }
+
+                       if (value != cellValue) {
+                               if (success(value)) {
+                                       cellValue = value; //persist value if successfully validated incase editor is used as header filter
+                               }
+                       } else {
+                               cancel();
+                       }
+               }
+
+               //submit new value on blur
+               input.addEventListener("blur", function (e) {
+                       onChange();
+               });
+
+               //submit new value on enter
+               input.addEventListener("keydown", function (e) {
+                       switch (e.keyCode) {
+                               case 13:
+                                       // case 9:
+                                       onChange();
+                                       break;
+
+                               case 27:
+                                       cancel();
+                                       break;
+                       }
+               });
+
+               return input;
+       },
+
+       //select
+       select: function select(cell, onRendered, success, cancel, editorParams) {
+               var self = this,
+                   cellEl = cell.getElement(),
+                   initialValue = cell.getValue(),
+                   vertNav = editorParams.verticalNavigation || "editor",
+                   initialDisplayValue = typeof initialValue !== "undefined" || initialValue === null ? initialValue : typeof editorParams.defaultValue !== "undefined" ? editorParams.defaultValue : [],
+                   input = document.createElement("input"),
+                   listEl = document.createElement("div"),
+                   multiselect = editorParams.multiselect,
+                   dataItems = [],
+                   currentItem = {},
+                   displayItems = [],
+                   currentItems = [],
+                   blurable = true;
+
+               this.table.rowManager.element.addEventListener("scroll", cancelItem);
+
+               if (Array.isArray(editorParams) || !Array.isArray(editorParams) && (typeof editorParams === "undefined" ? "undefined" : _typeof(editorParams)) === "object" && !editorParams.values) {
+                       console.warn("DEPRECATION WARNING - values for the select editor must now be passed into the values property of the editorParams object, not as the editorParams object");
+                       editorParams = { values: editorParams };
+               }
+
+               function getUniqueColumnValues(field) {
+                       var output = {},
+                           data = self.table.getData(),
+                           column;
+
+                       if (field) {
+                               column = self.table.columnManager.getColumnByField(field);
+                       } else {
+                               column = cell.getColumn()._getSelf();
+                       }
+
+                       if (column) {
+                               data.forEach(function (row) {
+                                       var val = column.getFieldValue(row);
+
+                                       if (val !== null && typeof val !== "undefined" && val !== "") {
+                                               output[val] = true;
+                                       }
+                               });
+
+                               if (editorParams.sortValuesList) {
+                                       if (editorParams.sortValuesList == "asc") {
+                                               output = Object.keys(output).sort();
+                                       } else {
+                                               output = Object.keys(output).sort().reverse();
+                                       }
+                               } else {
+                                       output = Object.keys(output);
+                               }
+                       } else {
+                               console.warn("unable to find matching column to create select lookup list:", field);
+                       }
+
+                       return output;
+               }
+
+               function parseItems(inputValues, curentValues) {
+                       var dataList = [];
+                       var displayList = [];
+
+                       function processComplexListItem(item) {
+                               var item = {
+                                       label: item.label,
+                                       value: item.value,
+                                       itemParams: item.itemParams,
+                                       elementAttributes: item.elementAttributes,
+                                       element: false
+                               };
+
+                               // if(item.value === curentValue || (!isNaN(parseFloat(item.value)) && !isNaN(parseFloat(item.value)) && parseFloat(item.value) === parseFloat(curentValue))){
+                               //      setCurrentItem(item);
+                               // }
+
+                               if (curentValues.indexOf(item.value) > -1) {
+                                       setItem(item);
+                               }
+
+                               dataList.push(item);
+                               displayList.push(item);
+
+                               return item;
+                       }
+
+                       if (typeof inputValues == "function") {
+                               inputValues = inputValues(cell);
+                       }
+
+                       if (Array.isArray(inputValues)) {
+                               inputValues.forEach(function (value) {
+                                       var item;
+
+                                       if ((typeof value === "undefined" ? "undefined" : _typeof(value)) === "object") {
+
+                                               if (value.options) {
+                                                       item = {
+                                                               label: value.label,
+                                                               group: true,
+                                                               itemParams: value.itemParams,
+                                                               elementAttributes: value.elementAttributes,
+                                                               element: false
+                                                       };
+
+                                                       displayList.push(item);
+
+                                                       value.options.forEach(function (item) {
+                                                               processComplexListItem(item);
+                                                       });
+                                               } else {
+                                                       processComplexListItem(value);
+                                               }
+                                       } else {
+
+                                               item = {
+                                                       label: value,
+                                                       value: value,
+                                                       element: false
+                                               };
+
+                                               // if(item.value === curentValue || (!isNaN(parseFloat(item.value)) && !isNaN(parseFloat(item.value)) && parseFloat(item.value) === parseFloat(curentValue))){
+                                               //      setCurrentItem(item);
+                                               // }
+
+                                               if (curentValues.indexOf(item.value) > -1) {
+                                                       setItem(item);
+                                               }
+
+                                               dataList.push(item);
+                                               displayList.push(item);
+                                       }
+                               });
+                       } else {
+                               for (var key in inputValues) {
+                                       var item = {
+                                               label: inputValues[key],
+                                               value: key,
+                                               element: false
+                                       };
+
+                                       // if(item.value === curentValue || (!isNaN(parseFloat(item.value)) && !isNaN(parseFloat(item.value)) && parseFloat(item.value) === parseFloat(curentValue))){
+                                       //      setCurrentItem(item);
+                                       // }
+
+                                       if (curentValues.indexOf(item.value) > -1) {
+                                               setItem(item);
+                                       }
+
+                                       dataList.push(item);
+                                       displayList.push(item);
+                               }
+                       }
+
+                       dataItems = dataList;
+                       displayItems = displayList;
+
+                       fillList();
+               }
+
+               function fillList() {
+                       while (listEl.firstChild) {
+                               listEl.removeChild(listEl.firstChild);
+                       }displayItems.forEach(function (item) {
+
+                               var el = item.element;
+
+                               if (!el) {
+                                       el = document.createElement("div");
+                                       item.label = editorParams.listItemFormatter ? editorParams.listItemFormatter(item.value, item.label, cell, el, item.itemParams) : item.label;
+                                       if (item.group) {
+                                               el.classList.add("tabulator-edit-select-list-group");
+                                               el.tabIndex = 0;
+                                               el.innerHTML = item.label === "" ? "&nbsp;" : item.label;
+                                       } else {
+                                               el.classList.add("tabulator-edit-select-list-item");
+                                               el.tabIndex = 0;
+                                               el.innerHTML = item.label === "" ? "&nbsp;" : item.label;
+
+                                               el.addEventListener("click", function () {
+                                                       // setCurrentItem(item);
+                                                       // chooseItem();
+                                                       if (multiselect) {
+                                                               toggleItem(item);
+                                                               input.focus();
+                                                       } else {
+                                                               chooseItem(item);
+                                                       }
+                                               });
+
+                                               // if(item === currentItem){
+                                               //      el.classList.add("active");
+                                               // }
+
+                                               if (currentItems.indexOf(item) > -1) {
+                                                       el.classList.add("active");
+                                               }
+                                       }
+
+                                       if (item.elementAttributes && _typeof(item.elementAttributes) == "object") {
+                                               for (var key in item.elementAttributes) {
+                                                       if (key.charAt(0) == "+") {
+                                                               key = key.slice(1);
+                                                               el.setAttribute(key, input.getAttribute(key) + item.elementAttributes["+" + key]);
+                                                       } else {
+                                                               el.setAttribute(key, item.elementAttributes[key]);
+                                                       }
+                                               }
+                                       }
+                                       el.addEventListener("mousedown", function () {
+                                               blurable = false;
+
+                                               setTimeout(function () {
+                                                       blurable = true;
+                                               }, 10);
+                                       });
+
+                                       item.element = el;
+                               }
+
+                               listEl.appendChild(el);
+                       });
+               }
+
+               function setCurrentItem(item, active) {
+
+                       if (!multiselect && currentItem && currentItem.element) {
+                               currentItem.element.classList.remove("active");
+                       }
+
+                       if (currentItem && currentItem.element) {
+                               currentItem.element.classList.remove("focused");
+                       }
+
+                       currentItem = item;
+
+                       if (item.element) {
+                               item.element.classList.add("focused");
+                               if (active) {
+                                       item.element.classList.add("active");
+                               }
+                       }
+               }
+
+               // function chooseItem(){
+               //      hideList();
+
+               //      if(initialValue !== currentItem.value){
+               //              initialValue = currentItem.value;
+               //              success(currentItem.value);
+               //      }else{
+               //              cancel();
+               //      }
+               // }
+
+               function setItem(item) {
+                       var index = currentItems.indexOf(item);
+
+                       if (index == -1) {
+                               currentItems.push(item);
+                               setCurrentItem(item, true);
+                       }
+
+                       fillInput();
+               }
+
+               function unsetItem(index) {
+                       var item = currentItems[index];
+
+                       if (index > -1) {
+                               currentItems.splice(index, 1);
+                               if (item.element) {
+                                       item.element.classList.remove("active");
+                               }
+                       }
+               }
+
+               function toggleItem(item) {
+                       if (!item) {
+                               item = currentItem;
+                       }
+
+                       var index = currentItems.indexOf(item);
+
+                       if (index > -1) {
+                               unsetItem(index);
+                       } else {
+                               if (multiselect !== true && currentItems.length >= multiselect) {
+                                       unsetItem(0);
+                               }
+
+                               setItem(item);
+                       }
+
+                       fillInput();
+               }
+
+               function chooseItem(item) {
+                       hideList();
+
+                       if (!item) {
+                               item = currentItem;
+                       }
+
+                       if (item) {
+                               success(item.value);
+                       }
+               }
+
+               function chooseItems() {
+                       hideList();
+
+                       var output = [];
+
+                       currentItems.forEach(function (item) {
+                               output.push(item.value);
+                       });
+
+                       success(output);
+               }
+
+               function fillInput() {
+                       var output = [];
+
+                       currentItems.forEach(function (item) {
+                               output.push(item.label);
+                       });
+
+                       input.value = output.join(", ");
+               }
+
+               function cancelItem() {
+                       hideList();
+                       cancel();
+               }
+
+               function showList() {
+                       if (!listEl.parentNode) {
+
+                               if (editorParams.values === true) {
+                                       parseItems(getUniqueColumnValues(), initialDisplayValue);
+                               } else if (typeof editorParams.values === "string") {
+                                       parseItems(getUniqueColumnValues(editorParams.values), initialDisplayValue);
+                               } else {
+                                       parseItems(editorParams.values || [], initialDisplayValue);
+                               }
+
+                               var offset = Tabulator.prototype.helpers.elOffset(cellEl);
+
+                               listEl.style.minWidth = cellEl.offsetWidth + "px";
+
+                               listEl.style.top = offset.top + cellEl.offsetHeight + "px";
+                               listEl.style.left = offset.left + "px";
+
+                               listEl.addEventListener("mousedown", function (e) {
+                                       blurable = false;
+
+                                       setTimeout(function () {
+                                               blurable = true;
+                                       }, 10);
+                               });
+
+                               document.body.appendChild(listEl);
+                       }
+               }
+
+               function hideList() {
+                       if (listEl.parentNode) {
+                               listEl.parentNode.removeChild(listEl);
+                       }
+
+                       removeScrollListener();
+               }
+
+               function removeScrollListener() {
+                       self.table.rowManager.element.removeEventListener("scroll", cancelItem);
+               }
+
+               //style input
+               input.setAttribute("type", "text");
+
+               input.style.padding = "4px";
+               input.style.width = "100%";
+               input.style.boxSizing = "border-box";
+               input.style.cursor = "default";
+               input.readOnly = this.currentCell != false;
+
+               if (editorParams.elementAttributes && _typeof(editorParams.elementAttributes) == "object") {
+                       for (var key in editorParams.elementAttributes) {
+                               if (key.charAt(0) == "+") {
+                                       key = key.slice(1);
+                                       input.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes["+" + key]);
+                               } else {
+                                       input.setAttribute(key, editorParams.elementAttributes[key]);
+                               }
+                       }
+               }
+
+               input.value = typeof initialValue !== "undefined" || initialValue === null ? initialValue : "";
+
+               // if(editorParams.values === true){
+               //      parseItems(getUniqueColumnValues(), initialValue);
+               // }else if(typeof editorParams.values === "string"){
+               //      parseItems(getUniqueColumnValues(editorParams.values), initialValue);
+               // }else{
+               //      parseItems(editorParams.values || [], initialValue);
+               // }
+
+               //allow key based navigation
+               input.addEventListener("keydown", function (e) {
+                       var index;
+
+                       switch (e.keyCode) {
+                               case 38:
+                                       //up arrow
+                                       index = dataItems.indexOf(currentItem);
+
+                                       if (vertNav == "editor" || vertNav == "hybrid" && index) {
+                                               e.stopImmediatePropagation();
+                                               e.stopPropagation();
+                                               e.preventDefault();
+
+                                               if (index > 0) {
+                                                       setCurrentItem(dataItems[index - 1], !multiselect);
+                                               }
+                                       }
+                                       break;
+
+                               case 40:
+                                       //down arrow
+                                       index = dataItems.indexOf(currentItem);
+
+                                       if (vertNav == "editor" || vertNav == "hybrid" && index < dataItems.length - 1) {
+                                               e.stopImmediatePropagation();
+                                               e.stopPropagation();
+                                               e.preventDefault();
+
+                                               if (index < dataItems.length - 1) {
+                                                       if (index == -1) {
+                                                               setCurrentItem(dataItems[0], !multiselect);
+                                                       } else {
+                                                               setCurrentItem(dataItems[index + 1], !multiselect);
+                                                       }
+                                               }
+                                       }
+                                       break;
+
+                               case 37: //left arrow
+                               case 39:
+                                       //right arrow
+                                       e.stopImmediatePropagation();
+                                       e.stopPropagation();
+                                       e.preventDefault();
+                                       break;
+
+                               case 13:
+                                       //enter
+                                       // chooseItem();
+
+                                       if (multiselect) {
+                                               toggleItem();
+                                       } else {
+                                               chooseItem();
+                                       }
+
+                                       break;
+
+                               case 27:
+                                       //escape
+                                       cancelItem();
+                                       break;
+                       }
+               });
+
+               input.addEventListener("blur", function (e) {
+                       if (blurable) {
+                               if (multiselect) {
+                                       chooseItems();
+                               } else {
+                                       cancelItem();
+                               }
+                       }
+               });
+
+               input.addEventListener("focus", function (e) {
+                       showList();
+               });
+
+               //style list element
+               listEl = document.createElement("div");
+               listEl.classList.add("tabulator-edit-select-list");
+
+               onRendered(function () {
+                       input.style.height = "100%";
+                       input.focus({ preventScroll: true });
+               });
+
+               return input;
+       },
+
+       //autocomplete
+       autocomplete: function autocomplete(cell, onRendered, success, cancel, editorParams) {
+               var self = this,
+                   cellEl = cell.getElement(),
+                   initialValue = cell.getValue(),
+                   vertNav = editorParams.verticalNavigation || "editor",
+                   initialDisplayValue = typeof initialValue !== "undefined" || initialValue === null ? initialValue : typeof editorParams.defaultValue !== "undefined" ? editorParams.defaultValue : "",
+                   input = document.createElement("input"),
+                   listEl = document.createElement("div"),
+                   allItems = [],
+                   displayItems = [],
+                   values = [],
+                   currentItem = false,
+                   blurable = true,
+                   uniqueColumnValues = false;
+
+               this.table.rowManager.element.addEventListener("scroll", cancelItem);
+
+               //style input
+               input.setAttribute("type", "search");
+
+               input.style.padding = "4px";
+               input.style.width = "100%";
+               input.style.boxSizing = "border-box";
+
+               if (editorParams.elementAttributes && _typeof(editorParams.elementAttributes) == "object") {
+                       for (var key in editorParams.elementAttributes) {
+                               if (key.charAt(0) == "+") {
+                                       key = key.slice(1);
+                                       input.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes["+" + key]);
+                               } else {
+                                       input.setAttribute(key, editorParams.elementAttributes[key]);
+                               }
+                       }
+               }
+
+               //style list element
+               listEl.classList.add("tabulator-edit-select-list");
+
+               listEl.addEventListener("mousedown", function (e) {
+                       blurable = false;
+
+                       setTimeout(function () {
+                               blurable = true;
+                       }, 10);
+               });
+
+               function genUniqueColumnValues() {
+                       if (editorParams.values === true) {
+                               uniqueColumnValues = getUniqueColumnValues();
+                       } else if (typeof editorParams.values === "string") {
+                               uniqueColumnValues = getUniqueColumnValues(editorParams.values);
+                       }
+               }
+
+               function getUniqueColumnValues(field) {
+                       var output = {},
+                           data = self.table.getData(),
+                           column;
+
+                       if (field) {
+                               column = self.table.columnManager.getColumnByField(field);
+                       } else {
+                               column = cell.getColumn()._getSelf();
+                       }
+
+                       if (column) {
+                               data.forEach(function (row) {
+                                       var val = column.getFieldValue(row);
+
+                                       if (val !== null && typeof val !== "undefined" && val !== "") {
+                                               output[val] = true;
+                                       }
+                               });
+
+                               if (editorParams.sortValuesList) {
+                                       if (editorParams.sortValuesList == "asc") {
+                                               output = Object.keys(output).sort();
+                                       } else {
+                                               output = Object.keys(output).sort().reverse();
+                                       }
+                               } else {
+                                       output = Object.keys(output);
+                               }
+                       } else {
+                               console.warn("unable to find matching column to create autocomplete lookup list:", field);
+                       }
+
+                       return output;
+               }
+
+               function filterList(term, intialLoad) {
+                       var matches = [],
+                           values,
+                           items,
+                           searchEl;
+
+                       //lookup base values list
+                       if (uniqueColumnValues) {
+                               values = uniqueColumnValues;
+                       } else {
+                               values = editorParams.values || [];
+                       }
+
+                       if (editorParams.searchFunc) {
+                               matches = editorParams.searchFunc(term, values);
+
+                               if (matches instanceof Promise) {
+
+                                       addNotice(typeof editorParams.searchingPlaceholder !== "undefined" ? editorParams.searchingPlaceholder : "Searching...");
+
+                                       matches.then(function (result) {
+                                               fillListIfNotEmpty(parseItems(result), intialLoad);
+                                       }).catch(function (err) {
+                                               console.err("error in autocomplete search promise:", err);
+                                       });
+                               } else {
+                                       fillListIfNotEmpty(parseItems(matches), intialLoad);
+                               }
+                       } else {
+                               items = parseItems(values);
+
+                               if (term === "") {
+                                       if (editorParams.showListOnEmpty) {
+                                               matches = items;
+                                       }
+                               } else {
+                                       items.forEach(function (item) {
+                                               if (item.value !== null || typeof item.value !== "undefined") {
+                                                       if (String(item.value).toLowerCase().indexOf(String(term).toLowerCase()) > -1 || String(item.title).toLowerCase().indexOf(String(term).toLowerCase()) > -1) {
+                                                               matches.push(item);
+                                                       }
+                                               }
+                                       });
+                               }
+
+                               fillListIfNotEmpty(matches, intialLoad);
+                       }
+               }
+
+               function addNotice(notice) {
+                       var searchEl = document.createElement("div");
+
+                       clearList();
+
+                       if (notice !== false) {
+                               searchEl.classList.add("tabulator-edit-select-list-notice");
+                               searchEl.tabIndex = 0;
+
+                               if (notice instanceof Node) {
+                                       searchEl.appendChild(notice);
+                               } else {
+                                       searchEl.innerHTML = notice;
+                               }
+
+                               listEl.appendChild(searchEl);
+                       }
+               }
+
+               function parseItems(inputValues) {
+                       var itemList = [];
+
+                       if (Array.isArray(inputValues)) {
+                               inputValues.forEach(function (value) {
+
+                                       var item = {};
+
+                                       if ((typeof value === "undefined" ? "undefined" : _typeof(value)) === "object") {
+                                               item.title = editorParams.listItemFormatter ? editorParams.listItemFormatter(value.value, value.label) : value.label;
+                                               item.value = value.value;
+                                       } else {
+                                               item.title = editorParams.listItemFormatter ? editorParams.listItemFormatter(value, value) : value;
+                                               item.value = value;
+                                       }
+
+                                       itemList.push(item);
+                               });
+                       } else {
+                               for (var key in inputValues) {
+                                       var item = {
+                                               title: editorParams.listItemFormatter ? editorParams.listItemFormatter(key, inputValues[key]) : inputValues[key],
+                                               value: key
+                                       };
+
+                                       itemList.push(item);
+                               }
+                       }
+
+                       return itemList;
+               }
+
+               function clearList() {
+                       while (listEl.firstChild) {
+                               listEl.removeChild(listEl.firstChild);
+                       }
+               }
+
+               function fillListIfNotEmpty(items, intialLoad) {
+                       if (items.length) {
+                               fillList(items, intialLoad);
+                       } else {
+                               if (editorParams.emptyPlaceholder) {
+                                       addNotice(editorParams.emptyPlaceholder);
+                               }
+                       }
+               }
+
+               function fillList(items, intialLoad) {
+                       var current = false;
+
+                       clearList();
+
+                       displayItems = items;
+
+                       displayItems.forEach(function (item) {
+                               var el = item.element;
+
+                               if (!el) {
+                                       el = document.createElement("div");
+                                       el.classList.add("tabulator-edit-select-list-item");
+                                       el.tabIndex = 0;
+                                       el.innerHTML = item.title;
+
+                                       el.addEventListener("click", function (e) {
+                                               setCurrentItem(item);
+                                               chooseItem();
+                                       });
+
+                                       el.addEventListener("mousedown", function (e) {
+                                               blurable = false;
+
+                                               setTimeout(function () {
+                                                       blurable = true;
+                                               }, 10);
+                                       });
+
+                                       item.element = el;
+
+                                       if (intialLoad && item.value == initialValue) {
+                                               input.value = item.title;
+                                               item.element.classList.add("active");
+                                               current = true;
+                                       }
+
+                                       if (item === currentItem) {
+                                               item.element.classList.add("active");
+                                               current = true;
+                                       }
+                               }
+
+                               listEl.appendChild(el);
+                       });
+
+                       if (!current) {
+                               setCurrentItem(false);
+                       }
+               }
+
+               function chooseItem() {
+                       hideList();
+
+                       if (currentItem) {
+                               if (initialValue !== currentItem.value) {
+                                       initialValue = currentItem.value;
+                                       input.value = currentItem.title;
+                                       success(currentItem.value);
+                               } else {
+                                       cancel();
+                               }
+                       } else {
+                               if (editorParams.freetext) {
+                                       initialValue = input.value;
+                                       success(input.value);
+                               } else {
+                                       if (editorParams.allowEmpty && input.value === "") {
+                                               initialValue = input.value;
+                                               success(input.value);
+                                       } else {
+                                               cancel();
+                                       }
+                               }
+                       }
+               }
+
+               function showList() {
+                       if (!listEl.parentNode) {
+                               while (listEl.firstChild) {
+                                       listEl.removeChild(listEl.firstChild);
+                               }var offset = Tabulator.prototype.helpers.elOffset(cellEl);
+
+                               listEl.style.minWidth = cellEl.offsetWidth + "px";
+
+                               listEl.style.top = offset.top + cellEl.offsetHeight + "px";
+                               listEl.style.left = offset.left + "px";
+                               document.body.appendChild(listEl);
+                       }
+               }
+
+               function setCurrentItem(item, showInputValue) {
+                       if (currentItem && currentItem.element) {
+                               currentItem.element.classList.remove("active");
+                       }
+
+                       currentItem = item;
+
+                       if (item && item.element) {
+                               item.element.classList.add("active");
+                       }
+               }
+
+               function hideList() {
+                       if (listEl.parentNode) {
+                               listEl.parentNode.removeChild(listEl);
+                       }
+
+                       removeScrollListener();
+               }
+
+               function cancelItem() {
+                       hideList();
+                       cancel();
+               }
+
+               function removeScrollListener() {
+                       self.table.rowManager.element.removeEventListener("scroll", cancelItem);
+               }
+
+               //allow key based navigation
+               input.addEventListener("keydown", function (e) {
+                       var index;
+
+                       switch (e.keyCode) {
+                               case 38:
+                                       //up arrow
+                                       index = displayItems.indexOf(currentItem);
+
+                                       if (vertNav == "editor" || vertNav == "hybrid" && index) {
+                                               e.stopImmediatePropagation();
+                                               e.stopPropagation();
+                                               e.preventDefault();
+
+                                               if (index > 0) {
+                                                       setCurrentItem(displayItems[index - 1]);
+                                               } else {
+                                                       setCurrentItem(false);
+                                               }
+                                       }
+                                       break;
+
+                               case 40:
+                                       //down arrow
+
+                                       index = displayItems.indexOf(currentItem);
+
+                                       if (vertNav == "editor" || vertNav == "hybrid" && index < displayItems.length - 1) {
+
+                                               e.stopImmediatePropagation();
+                                               e.stopPropagation();
+                                               e.preventDefault();
+
+                                               if (index < displayItems.length - 1) {
+                                                       if (index == -1) {
+                                                               setCurrentItem(displayItems[0]);
+                                                       } else {
+                                                               setCurrentItem(displayItems[index + 1]);
+                                                       }
+                                               }
+                                       }
+                                       break;
+
+                               case 37: //left arrow
+                               case 39:
+                                       //right arrow
+                                       e.stopImmediatePropagation();
+                                       e.stopPropagation();
+                                       // e.preventDefault();
+                                       break;
+
+                               case 13:
+                                       //enter
+                                       chooseItem();
+                                       break;
+
+                               case 27:
+                                       //escape
+                                       cancelItem();
+                                       break;
+
+                               case 36: //home
+                               case 35:
+                                       //end
+                                       //prevent table navigation while using input element
+                                       e.stopImmediatePropagation();
+                                       break;
+                       }
+               });
+
+               input.addEventListener("keyup", function (e) {
+
+                       switch (e.keyCode) {
+                               case 38: //up arrow
+                               case 37: //left arrow
+                               case 39: //up arrow
+                               case 40: //right arrow
+                               case 13: //enter
+                               case 27:
+                                       //escape
+                                       break;
+
+                               default:
+                                       filterList(input.value);
+                       }
+               });
+
+               input.addEventListener("search", function (e) {
+                       filterList(input.value);
+               });
+
+               input.addEventListener("blur", function (e) {
+                       if (blurable) {
+                               chooseItem();
+                       }
+               });
+
+               input.addEventListener("focus", function (e) {
+                       var value = initialDisplayValue;
+                       genUniqueColumnValues();
+                       showList();
+                       input.value = value;
+                       filterList(value, true);
+               });
+
+               onRendered(function () {
+                       input.style.height = "100%";
+                       input.focus({ preventScroll: true });
+               });
+
+               if (editorParams.mask) {
+                       this.table.modules.edit.maskInput(input, editorParams);
+               }
+
+               return input;
+       },
+
+       //star rating
+       star: function star(cell, onRendered, success, cancel, editorParams) {
+               var self = this,
+                   element = cell.getElement(),
+                   value = cell.getValue(),
+                   maxStars = element.getElementsByTagName("svg").length || 5,
+                   size = element.getElementsByTagName("svg")[0] ? element.getElementsByTagName("svg")[0].getAttribute("width") : 14,
+                   stars = [],
+                   starsHolder = document.createElement("div"),
+                   star = document.createElementNS('http://www.w3.org/2000/svg', "svg");
+
+               //change star type
+               function starChange(val) {
+                       stars.forEach(function (star, i) {
+                               if (i < val) {
+                                       if (self.table.browser == "ie") {
+                                               star.setAttribute("class", "tabulator-star-active");
+                                       } else {
+                                               star.classList.replace("tabulator-star-inactive", "tabulator-star-active");
+                                       }
+
+                                       star.innerHTML = '<polygon fill="#488CE9" stroke="#014AAE" stroke-width="37.6152" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" points="259.216,29.942 330.27,173.919 489.16,197.007 374.185,309.08 401.33,467.31 259.216,392.612 117.104,467.31 144.25,309.08 29.274,197.007 188.165,173.919 "/>';
+                               } else {
+                                       if (self.table.browser == "ie") {
+                                               star.setAttribute("class", "tabulator-star-inactive");
+                                       } else {
+                                               star.classList.replace("tabulator-star-active", "tabulator-star-inactive");
+                                       }
+
+                                       star.innerHTML = '<polygon fill="#010155" stroke="#686868" stroke-width="37.6152" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" points="259.216,29.942 330.27,173.919 489.16,197.007 374.185,309.08 401.33,467.31 259.216,392.612 117.104,467.31 144.25,309.08 29.274,197.007 188.165,173.919 "/>';
+                               }
+                       });
+               }
+
+               //build stars
+               function buildStar(i) {
+
+                       var starHolder = document.createElement("span");
+                       var nextStar = star.cloneNode(true);
+
+                       stars.push(nextStar);
+
+                       starHolder.addEventListener("mouseenter", function (e) {
+                               e.stopPropagation();
+                               e.stopImmediatePropagation();
+                               starChange(i);
+                       });
+
+                       starHolder.addEventListener("mousemove", function (e) {
+                               e.stopPropagation();
+                               e.stopImmediatePropagation();
+                       });
+
+                       starHolder.addEventListener("click", function (e) {
+                               e.stopPropagation();
+                               e.stopImmediatePropagation();
+                               success(i);
+                               element.blur();
+                       });
+
+                       starHolder.appendChild(nextStar);
+                       starsHolder.appendChild(starHolder);
+               }
+
+               //handle keyboard navigation value change
+               function changeValue(val) {
+                       value = val;
+                       starChange(val);
+               }
+
+               //style cell
+               element.style.whiteSpace = "nowrap";
+               element.style.overflow = "hidden";
+               element.style.textOverflow = "ellipsis";
+
+               //style holding element
+               starsHolder.style.verticalAlign = "middle";
+               starsHolder.style.display = "inline-block";
+               starsHolder.style.padding = "4px";
+
+               //style star
+               star.setAttribute("width", size);
+               star.setAttribute("height", size);
+               star.setAttribute("viewBox", "0 0 512 512");
+               star.setAttribute("xml:space", "preserve");
+               star.style.padding = "0 1px";
+
+               if (editorParams.elementAttributes && _typeof(editorParams.elementAttributes) == "object") {
+                       for (var key in editorParams.elementAttributes) {
+                               if (key.charAt(0) == "+") {
+                                       key = key.slice(1);
+                                       starsHolder.setAttribute(key, starsHolder.getAttribute(key) + editorParams.elementAttributes["+" + key]);
+                               } else {
+                                       starsHolder.setAttribute(key, editorParams.elementAttributes[key]);
+                               }
+                       }
+               }
+
+               //create correct number of stars
+               for (var i = 1; i <= maxStars; i++) {
+                       buildStar(i);
+               }
+
+               //ensure value does not exceed number of stars
+               value = Math.min(parseInt(value), maxStars);
+
+               // set initial styling of stars
+               starChange(value);
+
+               starsHolder.addEventListener("mousemove", function (e) {
+                       starChange(0);
+               });
+
+               starsHolder.addEventListener("click", function (e) {
+                       success(0);
+               });
+
+               element.addEventListener("blur", function (e) {
+                       cancel();
+               });
+
+               //allow key based navigation
+               element.addEventListener("keydown", function (e) {
+                       switch (e.keyCode) {
+                               case 39:
+                                       //right arrow
+                                       changeValue(value + 1);
+                                       break;
+
+                               case 37:
+                                       //left arrow
+                                       changeValue(value - 1);
+                                       break;
+
+                               case 13:
+                                       //enter
+                                       success(value);
+                                       break;
+
+                               case 27:
+                                       //escape
+                                       cancel();
+                                       break;
+                       }
+               });
+
+               return starsHolder;
+       },
+
+       //draggable progress bar
+       progress: function progress(cell, onRendered, success, cancel, editorParams) {
+               var element = cell.getElement(),
+                   max = typeof editorParams.max === "undefined" ? element.getElementsByTagName("div")[0].getAttribute("max") || 100 : editorParams.max,
+                   min = typeof editorParams.min === "undefined" ? element.getElementsByTagName("div")[0].getAttribute("min") || 0 : editorParams.min,
+                   percent = (max - min) / 100,
+                   value = cell.getValue() || 0,
+                   handle = document.createElement("div"),
+                   bar = document.createElement("div"),
+                   mouseDrag,
+                   mouseDragWidth;
+
+               //set new value
+               function updateValue() {
+                       var calcVal = percent * Math.round(bar.offsetWidth / (element.clientWidth / 100)) + min;
+                       success(calcVal);
+                       element.setAttribute("aria-valuenow", calcVal);
+                       element.setAttribute("aria-label", value);
+               }
+
+               //style handle
+               handle.style.position = "absolute";
+               handle.style.right = "0";
+               handle.style.top = "0";
+               handle.style.bottom = "0";
+               handle.style.width = "5px";
+               handle.classList.add("tabulator-progress-handle");
+
+               //style bar
+               bar.style.display = "inline-block";
+               bar.style.position = "relative";
+               // bar.style.top = "8px";
+               // bar.style.bottom = "8px";
+               // bar.style.left = "4px";
+               // bar.style.marginRight = "4px";
+               bar.style.height = "100%";
+               bar.style.backgroundColor = "#488CE9";
+               bar.style.maxWidth = "100%";
+               bar.style.minWidth = "0%";
+
+               if (editorParams.elementAttributes && _typeof(editorParams.elementAttributes) == "object") {
+                       for (var key in editorParams.elementAttributes) {
+                               if (key.charAt(0) == "+") {
+                                       key = key.slice(1);
+                                       bar.setAttribute(key, bar.getAttribute(key) + editorParams.elementAttributes["+" + key]);
+                               } else {
+                                       bar.setAttribute(key, editorParams.elementAttributes[key]);
+                               }
+                       }
+               }
+
+               //style cell
+               element.style.padding = "4px 4px";
+
+               //make sure value is in range
+               value = Math.min(parseFloat(value), max);
+               value = Math.max(parseFloat(value), min);
+
+               //workout percentage
+               value = Math.round((value - min) / percent);
+               // bar.style.right = value + "%";
+               bar.style.width = value + "%";
+
+               element.setAttribute("aria-valuemin", min);
+               element.setAttribute("aria-valuemax", max);
+
+               bar.appendChild(handle);
+
+               handle.addEventListener("mousedown", function (e) {
+                       mouseDrag = e.screenX;
+                       mouseDragWidth = bar.offsetWidth;
+               });
+
+               handle.addEventListener("mouseover", function () {
+                       handle.style.cursor = "ew-resize";
+               });
+
+               element.addEventListener("mousemove", function (e) {
+                       if (mouseDrag) {
+                               bar.style.width = mouseDragWidth + e.screenX - mouseDrag + "px";
+                       }
+               });
+
+               element.addEventListener("mouseup", function (e) {
+                       if (mouseDrag) {
+                               e.stopPropagation();
+                               e.stopImmediatePropagation();
+
+                               mouseDrag = false;
+                               mouseDragWidth = false;
+
+                               updateValue();
+                       }
+               });
+
+               //allow key based navigation
+               element.addEventListener("keydown", function (e) {
+                       switch (e.keyCode) {
+                               case 39:
+                                       //right arrow
+                                       e.preventDefault();
+                                       bar.style.width = bar.clientWidth + element.clientWidth / 100 + "px";
+                                       break;
+
+                               case 37:
+                                       //left arrow
+                                       e.preventDefault();
+                                       bar.style.width = bar.clientWidth - element.clientWidth / 100 + "px";
+                                       break;
+
+                               case 9: //tab
+                               case 13:
+                                       //enter
+                                       updateValue();
+                                       break;
+
+                               case 27:
+                                       //escape
+                                       cancel();
+                                       break;
+
+                       }
+               });
+
+               element.addEventListener("blur", function () {
+                       cancel();
+               });
+
+               return bar;
+       },
+
+       //checkbox
+       tickCross: function tickCross(cell, onRendered, success, cancel, editorParams) {
+               var value = cell.getValue(),
+                   input = document.createElement("input"),
+                   tristate = editorParams.tristate,
+                   indetermValue = typeof editorParams.indeterminateValue === "undefined" ? null : editorParams.indeterminateValue,
+                   indetermState = false;
+
+               input.setAttribute("type", "checkbox");
+               input.style.marginTop = "5px";
+               input.style.boxSizing = "border-box";
+
+               if (editorParams.elementAttributes && _typeof(editorParams.elementAttributes) == "object") {
+                       for (var key in editorParams.elementAttributes) {
+                               if (key.charAt(0) == "+") {
+                                       key = key.slice(1);
+                                       input.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes["+" + key]);
+                               } else {
+                                       input.setAttribute(key, editorParams.elementAttributes[key]);
+                               }
+                       }
+               }
+
+               input.value = value;
+
+               if (tristate && (typeof value === "undefined" || value === indetermValue || value === "")) {
+                       indetermState = true;
+                       input.indeterminate = true;
+               }
+
+               if (this.table.browser != "firefox") {
+                       //prevent blur issue on mac firefox
+                       onRendered(function () {
+                               input.focus({ preventScroll: true });
+                       });
+               }
+
+               input.checked = value === true || value === "true" || value === "True" || value === 1;
+
+               function setValue(blur) {
+                       if (tristate) {
+                               if (!blur) {
+                                       if (input.checked && !indetermState) {
+                                               input.checked = false;
+                                               input.indeterminate = true;
+                                               indetermState = true;
+                                               return indetermValue;
+                                       } else {
+                                               indetermState = false;
+                                               return input.checked;
+                                       }
+                               } else {
+                                       if (indetermState) {
+                                               return indetermValue;
+                                       } else {
+                                               return input.checked;
+                                       }
+                               }
+                       } else {
+                               return input.checked;
+                       }
+               }
+
+               //submit new value on blur
+               input.addEventListener("change", function (e) {
+                       success(setValue());
+               });
+
+               input.addEventListener("blur", function (e) {
+                       success(setValue(true));
+               });
+
+               //submit new value on enter
+               input.addEventListener("keydown", function (e) {
+                       if (e.keyCode == 13) {
+                               success(setValue());
+                       }
+                       if (e.keyCode == 27) {
+                               cancel();
+                       }
+               });
+
+               return input;
+       }
+};
+
+Tabulator.prototype.registerModule("edit", Edit);
\ No newline at end of file
diff --git a/admin/js/vendors/tabulator/js/modules/edit.min.js b/admin/js/vendors/tabulator/js/modules/edit.min.js
new file mode 100644 (file)
index 0000000..8e256be
--- /dev/null
@@ -0,0 +1,2 @@
+/* Tabulator v4.7.0 (c) Oliver Folkerd */
+var _typeof="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},Edit=function(e){this.table=e,this.currentCell=!1,this.mouseClick=!1,this.recursionBlock=!1,this.invalidEdit=!1,this.editedCells=[]};Edit.prototype.initializeColumn=function(e){var t=this,i={editor:!1,blocked:!1,check:e.definition.editable,params:e.definition.editorParams||{}};switch(_typeof(e.definition.editor)){case"string":"tick"===e.definition.editor&&(e.definition.editor="tickCross",console.warn("DEPRECATION WARNING - the tick editor has been deprecated, please use the tickCross editor")),t.editors[e.definition.editor]?i.editor=t.editors[e.definition.editor]:console.warn("Editor Error - No such editor found: ",e.definition.editor);break;case"function":i.editor=e.definition.editor;break;case"boolean":!0===e.definition.editor&&("function"!=typeof e.definition.formatter?("tick"===e.definition.formatter&&(e.definition.formatter="tickCross",console.warn("DEPRECATION WARNING - the tick editor has been deprecated, please use the tickCross editor")),t.editors[e.definition.formatter]?i.editor=t.editors[e.definition.formatter]:i.editor=t.editors.input):console.warn("Editor Error - Cannot auto lookup editor for a custom formatter: ",e.definition.formatter))}i.editor&&(e.modules.edit=i)},Edit.prototype.getCurrentCell=function(){return!!this.currentCell&&this.currentCell.getComponent()},Edit.prototype.clearEditor=function(e){var t,i=this.currentCell;if(this.invalidEdit=!1,i){for(this.currentCell=!1,t=i.getElement(),e?i.validate():t.classList.remove("tabulator-validation-fail"),t.classList.remove("tabulator-editing");t.firstChild;)t.removeChild(t.firstChild);i.row.getElement().classList.remove("tabulator-row-editing")}},Edit.prototype.cancelEdit=function(){if(this.currentCell){var e=this.currentCell,t=this.currentCell.getComponent();this.clearEditor(!0),e.setValueActual(e.getValue()),e.cellRendered(),e.column.cellEvents.cellEditCancelled&&e.column.cellEvents.cellEditCancelled.call(this.table,t),this.table.options.cellEditCancelled.call(this.table,t)}},Edit.prototype.bindEditor=function(e){var t=this,i=e.getElement();i.setAttribute("tabindex",0),i.addEventListener("click",function(e){i.classList.contains("tabulator-editing")||i.focus({preventScroll:!0})}),i.addEventListener("mousedown",function(e){t.mouseClick=!0}),i.addEventListener("focus",function(i){t.recursionBlock||t.edit(e,i,!1)})},Edit.prototype.focusCellNoEvent=function(e,t){this.recursionBlock=!0,t&&"ie"===this.table.browser||e.getElement().focus({preventScroll:!0}),this.recursionBlock=!1},Edit.prototype.editCell=function(e,t){this.focusCellNoEvent(e),this.edit(e,!1,t)},Edit.prototype.focusScrollAdjust=function(e){if("virtual"==this.table.rowManager.getRenderMode()){var t=this.table.rowManager.element.scrollTop,i=this.table.rowManager.element.clientHeight+this.table.rowManager.element.scrollTop,n=e.row.getElement();n.offsetTop;n.offsetTop<t?this.table.rowManager.element.scrollTop-=t-n.offsetTop:n.offsetTop+n.offsetHeight>i&&(this.table.rowManager.element.scrollTop+=n.offsetTop+n.offsetHeight-i)}},Edit.prototype.edit=function(e,t,i){function n(t){if(u.currentCell===e){var i=!0;return e.column.modules.validate&&u.table.modExists("validate")&&"manual"!=u.table.options.validationMode&&(i=u.table.modules.validate.validate(e.column.modules.validate,e,t)),!0===i||"highlight"===u.table.options.validationMode?(u.clearEditor(),e.setValue(t,!0),e.modules.edit||(e.modules.edit={}),e.modules.edit.edited=!0,-1==u.editedCells.indexOf(e)&&u.editedCells.push(e),u.table.options.dataTree&&u.table.modExists("dataTree")&&u.table.modules.dataTree.checkForRestyle(e),!0===i||(m.classList.add("tabulator-validation-fail"),!1)):(u.invalidEdit=!0,m.classList.add("tabulator-validation-fail"),u.focusCellNoEvent(e,!0),c(),u.table.options.validationFailed.call(u.table,e.getComponent(),t,i),!1)}}function o(){u.currentCell===e&&(u.cancelEdit(),u.table.options.dataTree&&u.table.modExists("dataTree")&&u.table.modules.dataTree.checkForRestyle(e))}function a(e){c=e}var r,l,s,u=this,d=!0,c=function(){},m=e.getElement();if(this.currentCell)return void(this.invalidEdit||this.cancelEdit());if(e.column.modules.edit.blocked)return this.mouseClick=!1,m.blur(),!1;switch(t&&t.stopPropagation(),_typeof(e.column.modules.edit.check)){case"function":d=e.column.modules.edit.check(e.getComponent());break;case"boolean":d=e.column.modules.edit.check}if(d||i){if(u.cancelEdit(),u.currentCell=e,this.focusScrollAdjust(e),l=e.getComponent(),this.mouseClick&&(this.mouseClick=!1,e.column.cellEvents.cellClick&&e.column.cellEvents.cellClick.call(this.table,t,l)),e.column.cellEvents.cellEditing&&e.column.cellEvents.cellEditing.call(this.table,l),u.table.options.cellEditing.call(this.table,l),s="function"==typeof e.column.modules.edit.params?e.column.modules.edit.params(l):e.column.modules.edit.params,!1===(r=e.column.modules.edit.editor.call(u,l,a,n,o,s)))return m.blur(),!1;if(!(r instanceof Node))return console.warn("Edit Error - Editor should return an instance of Node, the editor returned:",r),m.blur(),!1;for(m.classList.add("tabulator-editing"),e.row.getElement().classList.add("tabulator-row-editing");m.firstChild;)m.removeChild(m.firstChild);m.appendChild(r),c();for(var f=m.children,p=0;p<f.length;p++)f[p].addEventListener("click",function(e){e.stopPropagation()});return!0}return this.mouseClick=!1,m.blur(),!1},Edit.prototype.maskInput=function(e,t){function i(t){var l=n[t];void 0!==l&&l!==r&&l!==o&&l!==a&&(e.value=e.value+""+l,i(t+1))}var n=t.mask,o=void 0!==t.maskLetterChar?t.maskLetterChar:"A",a=void 0!==t.maskNumberChar?t.maskNumberChar:"9",r=void 0!==t.maskWildcardChar?t.maskWildcardChar:"*",l=!1;e.addEventListener("keydown",function(t){var i=e.value.length,s=t.key;if(t.keyCode>46){if(i>=n.length)return t.preventDefault(),t.stopPropagation(),l=!1,!1;switch(n[i]){case o:if(s.toUpperCase()==s.toLowerCase())return t.preventDefault(),t.stopPropagation(),l=!1,!1;break;case a:if(isNaN(s))return t.preventDefault(),t.stopPropagation(),l=!1,!1;break;case r:break;default:if(s!==n[i])return t.preventDefault(),t.stopPropagation(),l=!1,!1}l=!0}}),e.addEventListener("keyup",function(n){n.keyCode>46&&t.maskAutoFill&&i(e.value.length)}),e.placeholder||(e.placeholder=n),t.maskAutoFill&&i(e.value.length)},Edit.prototype.getEditedCells=function(){var e=[];return this.editedCells.forEach(function(t){e.push(t.getComponent())}),e},Edit.prototype.clearEdited=function(e){var t;e.modules.edit&&e.modules.edit.edited&&(e.modules.validate.invalid=!1,(t=this.editedCells.indexOf(e))>-1&&this.editedCells.splice(t,1))},Edit.prototype.editors={input:function(e,t,i,n,o){function a(e){(null===r||void 0===r)&&""!==l.value||l.value!==r?i(l.value)&&(r=l.value):n()}var r=e.getValue(),l=document.createElement("input");if(l.setAttribute("type",o.search?"search":"text"),l.style.padding="4px",l.style.width="100%",l.style.boxSizing="border-box",o.elementAttributes&&"object"==_typeof(o.elementAttributes))for(var s in o.elementAttributes)"+"==s.charAt(0)?(s=s.slice(1),l.setAttribute(s,l.getAttribute(s)+o.elementAttributes["+"+s])):l.setAttribute(s,o.elementAttributes[s]);return l.value=void 0!==r?r:"",t(function(){l.focus({preventScroll:!0}),l.style.height="100%"}),l.addEventListener("change",a),l.addEventListener("blur",a),l.addEventListener("keydown",function(e){switch(e.keyCode){case 13:a(e);break;case 27:n()}}),o.mask&&this.table.modules.edit.maskInput(l,o),l},textarea:function(e,t,i,n,o){function a(t){(null===r||void 0===r)&&""!==u.value||u.value!==r?(i(u.value)&&(r=u.value),setTimeout(function(){e.getRow().normalizeHeight()},300)):n()}var r=e.getValue(),l=o.verticalNavigation||"hybrid",s=String(null!==r&&void 0!==r?r:""),u=(s.match(/(?:\r\n|\r|\n)/g),document.createElement("textarea")),d=0;if(u.style.display="block",u.style.padding="2px",u.style.height="100%",u.style.width="100%",u.style.boxSizing="border-box",u.style.whiteSpace="pre-wrap",u.style.resize="none",o.elementAttributes&&"object"==_typeof(o.elementAttributes))for(var c in o.elementAttributes)"+"==c.charAt(0)?(c=c.slice(1),u.setAttribute(c,u.getAttribute(c)+o.elementAttributes["+"+c])):u.setAttribute(c,o.elementAttributes[c]);return u.value=s,t(function(){u.focus({preventScroll:!0}),u.style.height="100%"}),u.addEventListener("change",a),u.addEventListener("blur",a),u.addEventListener("keyup",function(){u.style.height="";var t=u.scrollHeight;u.style.height=t+"px",t!=d&&(d=t,e.getRow().normalizeHeight())}),u.addEventListener("keydown",function(e){switch(e.keyCode){case 27:n();break;case 38:("editor"==l||"hybrid"==l&&u.selectionStart)&&(e.stopImmediatePropagation(),e.stopPropagation());break;case 40:("editor"==l||"hybrid"==l&&u.selectionStart!==u.value.length)&&(e.stopImmediatePropagation(),e.stopPropagation())}}),o.mask&&this.table.modules.edit.maskInput(u,o),u},number:function(e,t,i,n,o){function a(){var e=s.value;isNaN(e)||""===e||(e=Number(e)),e!==r?i(e)&&(r=e):n()}var r=e.getValue(),l=o.verticalNavigation||"editor",s=document.createElement("input");if(s.setAttribute("type","number"),void 0!==o.max&&s.setAttribute("max",o.max),void 0!==o.min&&s.setAttribute("min",o.min),void 0!==o.step&&s.setAttribute("step",o.step),s.style.padding="4px",s.style.width="100%",s.style.boxSizing="border-box",o.elementAttributes&&"object"==_typeof(o.elementAttributes))for(var u in o.elementAttributes)"+"==u.charAt(0)?(u=u.slice(1),s.setAttribute(u,s.getAttribute(u)+o.elementAttributes["+"+u])):s.setAttribute(u,o.elementAttributes[u]);s.value=r;var d=function(e){a()};return t(function(){s.removeEventListener("blur",d),s.focus({preventScroll:!0}),s.style.height="100%",s.addEventListener("blur",d)}),s.addEventListener("keydown",function(e){switch(e.keyCode){case 13:a();break;case 27:n();break;case 38:case 40:"editor"==l&&(e.stopImmediatePropagation(),e.stopPropagation())}}),o.mask&&this.table.modules.edit.maskInput(s,o),s},range:function(e,t,i,n,o){function a(){var e=l.value;isNaN(e)||""===e||(e=Number(e)),e!=r?i(e)&&(r=e):n()}var r=e.getValue(),l=document.createElement("input");if(l.setAttribute("type","range"),void 0!==o.max&&l.setAttribute("max",o.max),void 0!==o.min&&l.setAttribute("min",o.min),void 0!==o.step&&l.setAttribute("step",o.step),l.style.padding="4px",l.style.width="100%",l.style.boxSizing="border-box",o.elementAttributes&&"object"==_typeof(o.elementAttributes))for(var s in o.elementAttributes)"+"==s.charAt(0)?(s=s.slice(1),l.setAttribute(s,l.getAttribute(s)+o.elementAttributes["+"+s])):l.setAttribute(s,o.elementAttributes[s]);return l.value=r,t(function(){l.focus({preventScroll:!0}),l.style.height="100%"}),l.addEventListener("blur",function(e){a()}),l.addEventListener("keydown",function(e){switch(e.keyCode){case 13:a();break;case 27:n()}}),l},select:function(e,t,i,n,o){function a(t){var i,n={},a=y.table.getData();return i=t?y.table.columnManager.getColumnByField(t):e.getColumn()._getSelf(),i?(a.forEach(function(e){var t=i.getFieldValue(e);null!==t&&void 0!==t&&""!==t&&(n[t]=!0)}),n=o.sortValuesList?"asc"==o.sortValuesList?Object.keys(n).sort():Object.keys(n).sort().reverse():Object.keys(n)):console.warn("unable to find matching column to create select lookup list:",t),n}function r(t,i){function n(e){var e={label:e.label,value:e.value,itemParams:e.itemParams,elementAttributes:e.elementAttributes,element:!1};return i.indexOf(e.value)>-1&&u(e),o.push(e),a.push(e),e}var o=[],a=[];if("function"==typeof t&&(t=t(e)),Array.isArray(t))t.forEach(function(e){var t;"object"===(void 0===e?"undefined":_typeof(e))?e.options?(t={label:e.label,group:!0,itemParams:e.itemParams,elementAttributes:e.elementAttributes,element:!1},a.push(t),e.options.forEach(function(e){n(e)})):n(e):(t={label:e,value:e,element:!1},i.indexOf(t.value)>-1&&u(t),o.push(t),a.push(t))});else for(var r in t){var s={label:t[r],value:r,element:!1};i.indexOf(s.value)>-1&&u(s),o.push(s),a.push(s)}P=o,T=a,l()}function l(){for(;w.firstChild;)w.removeChild(w.firstChild);T.forEach(function(t){var i=t.element;if(!i){if(i=document.createElement("div"),t.label=o.listItemFormatter?o.listItemFormatter(t.value,t.label,e,i,t.itemParams):t.label,t.group?(i.classList.add("tabulator-edit-select-list-group"),i.tabIndex=0,i.innerHTML=""===t.label?"&nbsp;":t.label):(i.classList.add("tabulator-edit-select-list-item"),i.tabIndex=0,i.innerHTML=""===t.label?"&nbsp;":t.label,i.addEventListener("click",function(){x?(c(t),L.focus()):m(t)}),I.indexOf(t)>-1&&i.classList.add("active")),t.elementAttributes&&"object"==_typeof(t.elementAttributes))for(var n in t.elementAttributes)"+"==n.charAt(0)?(n=n.slice(1),i.setAttribute(n,L.getAttribute(n)+t.elementAttributes["+"+n])):i.setAttribute(n,t.elementAttributes[n]);i.addEventListener("mousedown",function(){S=!1,setTimeout(function(){S=!0},10)}),t.element=i}w.appendChild(i)})}function s(e,t){!x&&N&&N.element&&N.element.classList.remove("active"),N&&N.element&&N.element.classList.remove("focused"),N=e,e.element&&(e.element.classList.add("focused"),t&&e.element.classList.add("active"))}function u(e){-1==I.indexOf(e)&&(I.push(e),s(e,!0)),p()}function d(e){var t=I[e];e>-1&&(I.splice(e,1),t.element&&t.element.classList.remove("active"))}function c(e){e||(e=N);var t=I.indexOf(e);t>-1?d(t):(!0!==x&&I.length>=x&&d(0),u(e)),p()}function m(e){h(),e||(e=N),e&&i(e.value)}function f(){h();var e=[];I.forEach(function(t){e.push(t.value)}),i(e)}function p(){var e=[];I.forEach(function(t){e.push(t.label)}),L.value=e.join(", ")}function v(){h(),n()}function b(){if(!w.parentNode){!0===o.values?r(a(),C):"string"==typeof o.values?r(a(o.values),C):r(o.values||[],C);var e=Tabulator.prototype.helpers.elOffset(E);w.style.minWidth=E.offsetWidth+"px",w.style.top=e.top+E.offsetHeight+"px",w.style.left=e.left+"px",w.addEventListener("mousedown",function(e){S=!1,setTimeout(function(){S=!0},10)}),document.body.appendChild(w)}}function h(){w.parentNode&&w.parentNode.removeChild(w),g()}function g(){y.table.rowManager.element.removeEventListener("scroll",v)}var y=this,E=e.getElement(),A=e.getValue(),k=o.verticalNavigation||"editor",C=void 0!==A||null===A?A:void 0!==o.defaultValue?o.defaultValue:[],L=document.createElement("input"),w=document.createElement("div"),x=o.multiselect,P=[],N={},T=[],I=[],S=!0;if(this.table.rowManager.element.addEventListener("scroll",v),(Array.isArray(o)||!Array.isArray(o)&&"object"===(void 0===o?"undefined":_typeof(o))&&!o.values)&&(console.warn("DEPRECATION WARNING - values for the select editor must now be passed into the values property of the editorParams object, not as the editorParams object"),o={values:o}),L.setAttribute("type","text"),L.style.padding="4px",L.style.width="100%",L.style.boxSizing="border-box",L.style.cursor="default",L.readOnly=0!=this.currentCell,o.elementAttributes&&"object"==_typeof(o.elementAttributes))for(var O in o.elementAttributes)"+"==O.charAt(0)?(O=O.slice(1),L.setAttribute(O,L.getAttribute(O)+o.elementAttributes["+"+O])):L.setAttribute(O,o.elementAttributes[O]);return L.value=void 0!==A||null===A?A:"",L.addEventListener("keydown",function(e){var t;switch(e.keyCode){case 38:t=P.indexOf(N),("editor"==k||"hybrid"==k&&t)&&(e.stopImmediatePropagation(),e.stopPropagation(),e.preventDefault(),t>0&&s(P[t-1],!x));break;case 40:t=P.indexOf(N),("editor"==k||"hybrid"==k&&t<P.length-1)&&(e.stopImmediatePropagation(),e.stopPropagation(),e.preventDefault(),t<P.length-1&&(-1==t?s(P[0],!x):s(P[t+1],!x)));break;case 37:case 39:e.stopImmediatePropagation(),e.stopPropagation(),e.preventDefault();break;case 13:x?c():m();break;case 27:v()}}),L.addEventListener("blur",function(e){S&&(x?f():v())}),L.addEventListener("focus",function(e){b()}),w=document.createElement("div"),w.classList.add("tabulator-edit-select-list"),t(function(){L.style.height="100%",L.focus({preventScroll:!0})}),L},autocomplete:function(e,t,i,n,o){function a(){!0===o.values?T=r():"string"==typeof o.values&&(T=r(o.values))}function r(t){var i,n={},a=y.table.getData();return i=t?y.table.columnManager.getColumnByField(t):e.getColumn()._getSelf(),i?(a.forEach(function(e){var t=i.getFieldValue(e);null!==t&&void 0!==t&&""!==t&&(n[t]=!0)}),n=o.sortValuesList?"asc"==o.sortValuesList?Object.keys(n).sort():Object.keys(n).sort().reverse():Object.keys(n)):console.warn("unable to find matching column to create autocomplete lookup list:",t),n}function l(e,t){var i,n,a=[];i=T||(o.values||[]),o.searchFunc?(a=o.searchFunc(e,i),a instanceof Promise?(s(void 0!==o.searchingPlaceholder?o.searchingPlaceholder:"Searching..."),a.then(function(e){c(u(e),t)}).catch(function(e){console.err("error in autocomplete search promise:",e)})):c(u(a),t)):(n=u(i),""===e?o.showListOnEmpty&&(a=n):n.forEach(function(t){null===t.value&&void 0===t.value||(String(t.value).toLowerCase().indexOf(String(e).toLowerCase())>-1||String(t.title).toLowerCase().indexOf(String(e).toLowerCase())>-1)&&a.push(t)}),c(a,t))}function s(e){var t=document.createElement("div");d(),!1!==e&&(t.classList.add("tabulator-edit-select-list-notice"),t.tabIndex=0,e instanceof Node?t.appendChild(e):t.innerHTML=e,w.appendChild(t))}function u(e){var t=[];if(Array.isArray(e))e.forEach(function(e){var i={};"object"===(void 0===e?"undefined":_typeof(e))?(i.title=o.listItemFormatter?o.listItemFormatter(e.value,e.label):e.label,i.value=e.value):(i.title=o.listItemFormatter?o.listItemFormatter(e,e):e,i.value=e),t.push(i)});else for(var i in e){var n={title:o.listItemFormatter?o.listItemFormatter(i,e[i]):e[i],value:i};t.push(n)}return t}function d(){for(;w.firstChild;)w.removeChild(w.firstChild)}function c(e,t){e.length?m(e,t):o.emptyPlaceholder&&s(o.emptyPlaceholder)}function m(e,t){var i=!1;d(),x=e,x.forEach(function(e){var n=e.element;n||(n=document.createElement("div"),n.classList.add("tabulator-edit-select-list-item"),n.tabIndex=0,n.innerHTML=e.title,n.addEventListener("click",function(t){v(e),f()}),n.addEventListener("mousedown",function(e){N=!1,setTimeout(function(){N=!0},10)}),e.element=n,t&&e.value==A&&(L.value=e.title,e.element.classList.add("active"),i=!0),e===P&&(e.element.classList.add("active"),i=!0)),w.appendChild(n)}),i||v(!1)}function f(){b(),P?A!==P.value?(A=P.value,L.value=P.title,i(P.value)):n():o.freetext?(A=L.value,i(L.value)):o.allowEmpty&&""===L.value?(A=L.value,i(L.value)):n()}function p(){if(!w.parentNode){for(;w.firstChild;)w.removeChild(w.firstChild);var e=Tabulator.prototype.helpers.elOffset(E);w.style.minWidth=E.offsetWidth+"px",w.style.top=e.top+E.offsetHeight+"px",w.style.left=e.left+"px",document.body.appendChild(w)}}function v(e,t){P&&P.element&&P.element.classList.remove("active"),P=e,e&&e.element&&e.element.classList.add("active")}function b(){w.parentNode&&w.parentNode.removeChild(w),g()}function h(){b(),n()}function g(){y.table.rowManager.element.removeEventListener("scroll",h)}var y=this,E=e.getElement(),A=e.getValue(),k=o.verticalNavigation||"editor",C=void 0!==A||null===A?A:void 0!==o.defaultValue?o.defaultValue:"",L=document.createElement("input"),w=document.createElement("div"),x=[],P=!1,N=!0,T=!1;if(this.table.rowManager.element.addEventListener("scroll",h),L.setAttribute("type","search"),L.style.padding="4px",L.style.width="100%",L.style.boxSizing="border-box",o.elementAttributes&&"object"==_typeof(o.elementAttributes))for(var I in o.elementAttributes)"+"==I.charAt(0)?(I=I.slice(1),L.setAttribute(I,L.getAttribute(I)+o.elementAttributes["+"+I])):L.setAttribute(I,o.elementAttributes[I]);return w.classList.add("tabulator-edit-select-list"),w.addEventListener("mousedown",function(e){N=!1,setTimeout(function(){N=!0},10)}),L.addEventListener("keydown",function(e){var t;switch(e.keyCode){case 38:t=x.indexOf(P),("editor"==k||"hybrid"==k&&t)&&(e.stopImmediatePropagation(),e.stopPropagation(),e.preventDefault(),v(t>0?x[t-1]:!1));break;case 40:t=x.indexOf(P),("editor"==k||"hybrid"==k&&t<x.length-1)&&(e.stopImmediatePropagation(),e.stopPropagation(),e.preventDefault(),t<x.length-1&&v(-1==t?x[0]:x[t+1]));break;case 37:case 39:e.stopImmediatePropagation(),e.stopPropagation();break;case 13:f();break;case 27:h();break;case 36:case 35:e.stopImmediatePropagation()}}),L.addEventListener("keyup",function(e){switch(e.keyCode){case 38:case 37:case 39:case 40:case 13:case 27:break;default:l(L.value)}}),L.addEventListener("search",function(e){l(L.value)}),L.addEventListener("blur",function(e){N&&f()}),L.addEventListener("focus",function(e){var t=C;a(),p(),L.value=t,l(t,!0)}),t(function(){L.style.height="100%",L.focus({preventScroll:!0})}),o.mask&&this.table.modules.edit.maskInput(L,o),L},star:function(e,t,i,n,o){function a(e){m.forEach(function(t,i){i<e?("ie"==l.table.browser?t.setAttribute("class","tabulator-star-active"):t.classList.replace("tabulator-star-inactive","tabulator-star-active"),t.innerHTML='<polygon fill="#488CE9" stroke="#014AAE" stroke-width="37.6152" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" points="259.216,29.942 330.27,173.919 489.16,197.007 374.185,309.08 401.33,467.31 259.216,392.612 117.104,467.31 144.25,309.08 29.274,197.007 188.165,173.919 "/>'):("ie"==l.table.browser?t.setAttribute("class","tabulator-star-inactive"):t.classList.replace("tabulator-star-active","tabulator-star-inactive"),t.innerHTML='<polygon fill="#010155" stroke="#686868" stroke-width="37.6152" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" points="259.216,29.942 330.27,173.919 489.16,197.007 374.185,309.08 401.33,467.31 259.216,392.612 117.104,467.31 144.25,309.08 29.274,197.007 188.165,173.919 "/>')})}function r(e){u=e,a(e)}var l=this,s=e.getElement(),u=e.getValue(),d=s.getElementsByTagName("svg").length||5,c=s.getElementsByTagName("svg")[0]?s.getElementsByTagName("svg")[0].getAttribute("width"):14,m=[],f=document.createElement("div"),p=document.createElementNS("http://www.w3.org/2000/svg","svg");if(s.style.whiteSpace="nowrap",s.style.overflow="hidden",s.style.textOverflow="ellipsis",f.style.verticalAlign="middle",f.style.display="inline-block",f.style.padding="4px",p.setAttribute("width",c),p.setAttribute("height",c),p.setAttribute("viewBox","0 0 512 512"),p.setAttribute("xml:space","preserve"),p.style.padding="0 1px",o.elementAttributes&&"object"==_typeof(o.elementAttributes))for(var v in o.elementAttributes)"+"==v.charAt(0)?(v=v.slice(1),f.setAttribute(v,f.getAttribute(v)+o.elementAttributes["+"+v])):f.setAttribute(v,o.elementAttributes[v]);for(var b=1;b<=d;b++)!function(e){var t=document.createElement("span"),n=p.cloneNode(!0);m.push(n),t.addEventListener("mouseenter",function(t){t.stopPropagation(),t.stopImmediatePropagation(),a(e)}),t.addEventListener("mousemove",function(e){e.stopPropagation(),e.stopImmediatePropagation()}),t.addEventListener("click",function(t){t.stopPropagation(),t.stopImmediatePropagation(),i(e),s.blur()}),t.appendChild(n),f.appendChild(t)}(b);return u=Math.min(parseInt(u),d),a(u),f.addEventListener("mousemove",function(e){a(0)}),f.addEventListener("click",function(e){i(0)}),s.addEventListener("blur",function(e){n()}),s.addEventListener("keydown",function(e){switch(e.keyCode){case 39:r(u+1);break;case 37:r(u-1);break;case 13:i(u);break;case 27:n()}}),f},progress:function(e,t,i,n,o){function a(){var e=c*Math.round(p.offsetWidth/(s.clientWidth/100))+d;i(e),s.setAttribute("aria-valuenow",e),s.setAttribute("aria-label",m)}var r,l,s=e.getElement(),u=void 0===o.max?s.getElementsByTagName("div")[0].getAttribute("max")||100:o.max,d=void 0===o.min?s.getElementsByTagName("div")[0].getAttribute("min")||0:o.min,c=(u-d)/100,m=e.getValue()||0,f=document.createElement("div"),p=document.createElement("div");if(f.style.position="absolute",f.style.right="0",f.style.top="0",f.style.bottom="0",f.style.width="5px",f.classList.add("tabulator-progress-handle"),p.style.display="inline-block",p.style.position="relative",p.style.height="100%",p.style.backgroundColor="#488CE9",p.style.maxWidth="100%",p.style.minWidth="0%",o.elementAttributes&&"object"==_typeof(o.elementAttributes))for(var v in o.elementAttributes)"+"==v.charAt(0)?(v=v.slice(1),p.setAttribute(v,p.getAttribute(v)+o.elementAttributes["+"+v])):p.setAttribute(v,o.elementAttributes[v]);return s.style.padding="4px 4px",m=Math.min(parseFloat(m),u),m=Math.max(parseFloat(m),d),m=Math.round((m-d)/c),p.style.width=m+"%",s.setAttribute("aria-valuemin",d),s.setAttribute("aria-valuemax",u),p.appendChild(f),f.addEventListener("mousedown",function(e){r=e.screenX,l=p.offsetWidth}),f.addEventListener("mouseover",function(){f.style.cursor="ew-resize"}),s.addEventListener("mousemove",function(e){r&&(p.style.width=l+e.screenX-r+"px")}),s.addEventListener("mouseup",function(e){r&&(e.stopPropagation(),e.stopImmediatePropagation(),r=!1,l=!1,a())}),s.addEventListener("keydown",function(e){switch(e.keyCode){case 39:e.preventDefault(),p.style.width=p.clientWidth+s.clientWidth/100+"px";break;case 37:e.preventDefault(),p.style.width=p.clientWidth-s.clientWidth/100+"px";break;case 9:case 13:a();break;case 27:n()}}),s.addEventListener("blur",function(){n()}),p},tickCross:function(e,t,i,n,o){function a(e){return s?e?d?u:l.checked:l.checked&&!d?(l.checked=!1,l.indeterminate=!0,d=!0,u):(d=!1,l.checked):l.checked}var r=e.getValue(),l=document.createElement("input"),s=o.tristate,u=void 0===o.indeterminateValue?null:o.indeterminateValue,d=!1;if(l.setAttribute("type","checkbox"),l.style.marginTop="5px",l.style.boxSizing="border-box",o.elementAttributes&&"object"==_typeof(o.elementAttributes))for(var c in o.elementAttributes)"+"==c.charAt(0)?(c=c.slice(1),l.setAttribute(c,l.getAttribute(c)+o.elementAttributes["+"+c])):l.setAttribute(c,o.elementAttributes[c]);return l.value=r,!s||void 0!==r&&r!==u&&""!==r||(d=!0,l.indeterminate=!0),"firefox"!=this.table.browser&&t(function(){l.focus({preventScroll:!0})}),l.checked=!0===r||"true"===r||"True"===r||1===r,l.addEventListener("change",function(e){i(a())}),l.addEventListener("blur",function(e){i(a(!0))}),l.addEventListener("keydown",function(e){13==e.keyCode&&i(a()),27==e.keyCode&&n()}),l}},Tabulator.prototype.registerModule("edit",Edit);
\ No newline at end of file
diff --git a/admin/js/vendors/tabulator/js/modules/export.js b/admin/js/vendors/tabulator/js/modules/export.js
new file mode 100644 (file)
index 0000000..18d3f6c
--- /dev/null
@@ -0,0 +1,616 @@
+var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
+
+/* Tabulator v4.7.0 (c) Oliver Folkerd */
+
+var ExportRow = function ExportRow(type, columns, component, indent) {
+       this.type = type;
+       this.columns = columns;
+       this.component = component || false;
+       this.indent = indent || 0;
+};
+
+var ExportColumn = function ExportColumn(value, component, width, height, depth) {
+       this.value = value;
+       this.component = component || false;
+       this.width = width;
+       this.height = height;
+       this.depth = depth;
+};
+
+var Export = function Export(table) {
+       this.table = table; //hold Tabulator object
+       this.config = {};
+       this.cloneTableStyle = true;
+       this.colVisProp = "";
+};
+
+Export.prototype.generateExportList = function (config, style, range, colVisProp) {
+       this.cloneTableStyle = style;
+       this.config = config || {};
+       this.colVisProp = colVisProp;
+
+       var headers = this.config.columnHeaders !== false ? this.headersToExportRows(this.generateColumnGroupHeaders()) : [];
+       var body = this.bodyToExportRows(this.rowLookup(range));
+
+       return headers.concat(body);
+};
+
+Export.prototype.genereateTable = function (config, style, range, colVisProp) {
+       var list = this.generateExportList(config, style, range, colVisProp);
+
+       return this.genereateTableElement(list);
+};
+
+Export.prototype.rowLookup = function (range) {
+       var _this = this;
+
+       var rows = [];
+
+       if (typeof range == "function") {
+               range.call(this.table).forEach(function (row) {
+                       row = _this.table.rowManager.findRow(row);
+
+                       if (row) {
+                               rows.push(row);
+                       }
+               });
+       } else {
+               switch (range) {
+                       case true:
+                       case "visible":
+                               rows = this.table.rowManager.getVisibleRows(true);
+                               break;
+
+                       case "all":
+                               rows = this.table.rowManager.rows;
+                               break;
+
+                       case "selected":
+                               rows = this.table.modules.selectRow.selectedRows;
+                               break;
+
+                       case "active":
+                       default:
+                               rows = this.table.rowManager.getDisplayRows();
+               }
+       }
+
+       return Object.assign([], rows);
+};
+
+Export.prototype.generateColumnGroupHeaders = function () {
+       var _this2 = this;
+
+       var output = [];
+
+       var columns = this.config.columnGroups !== false ? this.table.columnManager.columns : this.table.columnManager.columnsByIndex;
+
+       columns.forEach(function (column) {
+               var colData = _this2.processColumnGroup(column);
+
+               if (colData) {
+                       output.push(colData);
+               }
+       });
+
+       return output;
+};
+
+Export.prototype.processColumnGroup = function (column) {
+       var _this3 = this;
+
+       var subGroups = column.columns,
+           maxDepth = 0,
+           title = column.definition["title" + (this.colVisProp.charAt(0).toUpperCase() + this.colVisProp.slice(1))] || column.definition.title;
+
+       var groupData = {
+               title: title,
+               column: column,
+               depth: 1
+       };
+
+       if (subGroups.length) {
+               groupData.subGroups = [];
+               groupData.width = 0;
+
+               subGroups.forEach(function (subGroup) {
+                       var subGroupData = _this3.processColumnGroup(subGroup);
+
+                       if (subGroupData) {
+                               groupData.width += subGroupData.width;
+                               groupData.subGroups.push(subGroupData);
+
+                               if (subGroupData.depth > maxDepth) {
+                                       maxDepth = subGroupData.depth;
+                               }
+                       }
+               });
+
+               groupData.depth += maxDepth;
+
+               if (!groupData.width) {
+                       return false;
+               }
+       } else {
+               if (this.columnVisCheck(column)) {
+                       groupData.width = 1;
+               } else {
+                       return false;
+               }
+       }
+
+       return groupData;
+};
+
+Export.prototype.columnVisCheck = function (column) {
+       return column.definition[this.colVisProp] !== false && (column.visible || !column.visible && column.definition[this.colVisProp]);
+};
+
+Export.prototype.headersToExportRows = function (columns) {
+       var headers = [],
+           headerDepth = 0,
+           exportRows = [];
+
+       function parseColumnGroup(column, level) {
+
+               var depth = headerDepth - level;
+
+               if (typeof headers[level] === "undefined") {
+                       headers[level] = [];
+               }
+
+               column.height = column.subGroups ? 1 : depth - column.depth + 1;
+
+               headers[level].push(column);
+
+               if (column.height > 1) {
+                       for (var _i = 1; _i < column.height; _i++) {
+
+                               if (typeof headers[level + _i] === "undefined") {
+                                       headers[level + _i] = [];
+                               }
+
+                               headers[level + _i].push(false);
+                       }
+               }
+
+               if (column.width > 1) {
+                       for (var _i2 = 1; _i2 < column.width; _i2++) {
+                               headers[level].push(false);
+                       }
+               }
+
+               if (column.subGroups) {
+                       column.subGroups.forEach(function (subGroup) {
+                               parseColumnGroup(subGroup, level + 1);
+                       });
+               }
+       }
+
+       //calculate maximum header debth
+       columns.forEach(function (column) {
+               if (column.depth > headerDepth) {
+                       headerDepth = column.depth;
+               }
+       });
+
+       columns.forEach(function (column) {
+               parseColumnGroup(column, 0);
+       });
+
+       headers.forEach(function (header) {
+               var columns = [];
+
+               header.forEach(function (col) {
+                       if (col) {
+                               columns.push(new ExportColumn(col.title, col.column.getComponent(), col.width, col.height, col.depth));
+                       } else {
+                               columns.push(null);
+                       }
+               });
+
+               exportRows.push(new ExportRow("header", columns));
+       });
+
+       return exportRows;
+};
+
+Export.prototype.bodyToExportRows = function (rows) {
+       var _this4 = this;
+
+       var columns = [];
+       var exportRows = [];
+
+       this.table.columnManager.columnsByIndex.forEach(function (column) {
+               if (_this4.columnVisCheck(column)) {
+                       columns.push(column.getComponent());
+               }
+       });
+
+       if (this.config.columnCalcs !== false && this.table.modExists("columnCalcs")) {
+               if (this.table.modules.columnCalcs.topInitialized) {
+                       rows.unshift(this.table.modules.columnCalcs.topRow);
+               }
+
+               if (this.table.modules.columnCalcs.botInitialized) {
+                       rows.push(this.table.modules.columnCalcs.botRow);
+               }
+       }
+
+       rows = rows.filter(function (row) {
+               switch (row.type) {
+                       case "group":
+                               return _this4.config.rowGroups !== false;
+                               break;
+
+                       case "calc":
+                               return _this4.config.columnCalcs !== false;
+                               break;
+
+                       case "row":
+                               return !(_this4.table.options.dataTree && _this4.config.dataTree === false && row.modules.dataTree.parent);
+                               break;
+               }
+
+               return true;
+       });
+
+       rows.forEach(function (row, i) {
+               var rowData = row.getData(_this4.colVisProp);
+               var exportCols = [];
+               var indent = 0;
+
+               switch (row.type) {
+                       case "group":
+                               indent = row.level;
+                               exportCols.push(new ExportColumn(row.key, row.getComponent(), columns.length, 1));
+                               break;
+
+                       case "calc":
+                       case "row":
+                               columns.forEach(function (col) {
+                                       exportCols.push(new ExportColumn(col._column.getFieldValue(rowData), col, 1, 1));
+                               });
+
+                               if (_this4.table.options.dataTree && _this4.config.dataTree !== false) {
+                                       indent = row.modules.dataTree.index;
+                               }
+                               break;
+               }
+
+               exportRows.push(new ExportRow(row.type, exportCols, row.getComponent(), indent));
+       });
+
+       return exportRows;
+};
+
+Export.prototype.genereateTableElement = function (list) {
+       var _this5 = this;
+
+       var table = document.createElement("table"),
+           headerEl = document.createElement("thead"),
+           bodyEl = document.createElement("tbody"),
+           styles = this.lookupTableStyles(),
+           rowFormatter = this.table.options["rowFormatter" + (this.colVisProp.charAt(0).toUpperCase() + this.colVisProp.slice(1))],
+           setup = {};
+
+       setup.rowFormatter = rowFormatter !== null ? rowFormatter : this.table.options.rowFormatter;
+
+       if (this.table.options.dataTree && this.config.dataTree !== false && this.table.modExists("columnCalcs")) {
+               setup.treeElementField = this.table.modules.dataTree.elementField;
+       }
+
+       //assign group header formatter
+       setup.groupHeader = this.table.options["groupHeader" + (this.colVisProp.charAt(0).toUpperCase() + this.colVisProp.slice(1))];
+
+       if (setup.groupHeader && !Array.isArray(setup.groupHeader)) {
+               setup.groupHeader = [setup.groupHeader];
+       }
+
+       table.classList.add("tabulator-print-table");
+
+       this.mapElementStyles(this.table.columnManager.getHeadersElement(), headerEl, ["border-top", "border-left", "border-right", "border-bottom", "background-color", "color", "font-weight", "font-family", "font-size"]);
+
+       if (list.length > 1000) {
+               console.warn("It may take a long time to render an HTML table with more than 1000 rows");
+       }
+
+       list.forEach(function (row, i) {
+               switch (row.type) {
+                       case "header":
+                               headerEl.appendChild(_this5.genereateHeaderElement(row, setup, styles));
+                               break;
+
+                       case "group":
+                               bodyEl.appendChild(_this5.genereateGroupElement(row, setup, styles));
+                               break;
+
+                       case "calc":
+                               bodyEl.appendChild(_this5.genereateCalcElement(row, setup, styles));
+                               break;
+
+                       case "row":
+                               var rowEl = _this5.genereateRowElement(row, setup, styles);
+                               _this5.mapElementStyles(i % 2 && styles.evenRow ? styles.evenRow : styles.oddRow, rowEl, ["border-top", "border-left", "border-right", "border-bottom", "color", "font-weight", "font-family", "font-size", "background-color"]);
+                               bodyEl.appendChild(rowEl);
+                               break;
+               }
+       });
+
+       if (headerEl.innerHTML) {
+               table.appendChild(headerEl);
+       }
+
+       table.appendChild(bodyEl);
+
+       this.mapElementStyles(this.table.element, table, ["border-top", "border-left", "border-right", "border-bottom"]);
+       return table;
+};
+
+Export.prototype.lookupTableStyles = function () {
+       var styles = {};
+
+       //lookup row styles
+       if (this.cloneTableStyle && window.getComputedStyle) {
+               styles.oddRow = this.table.element.querySelector(".tabulator-row-odd:not(.tabulator-group):not(.tabulator-calcs)");
+               styles.evenRow = this.table.element.querySelector(".tabulator-row-even:not(.tabulator-group):not(.tabulator-calcs)");
+               styles.calcRow = this.table.element.querySelector(".tabulator-row.tabulator-calcs");
+               styles.firstRow = this.table.element.querySelector(".tabulator-row:not(.tabulator-group):not(.tabulator-calcs)");
+               styles.firstGroup = this.table.element.getElementsByClassName("tabulator-group")[0];
+
+               if (styles.firstRow) {
+                       styles.styleCells = styles.firstRow.getElementsByClassName("tabulator-cell");
+                       styles.firstCell = styles.styleCells[0];
+                       styles.lastCell = styles.styleCells[styles.styleCells.length - 1];
+               }
+       }
+
+       return styles;
+};
+
+Export.prototype.genereateHeaderElement = function (row, setup, styles) {
+       var _this6 = this;
+
+       var rowEl = document.createElement("tr");
+
+       row.columns.forEach(function (column) {
+               if (column) {
+                       var cellEl = document.createElement("th");
+                       var classNames = column.component._column.definition.cssClass ? column.component._column.definition.cssClass.split(" ") : [];
+
+                       cellEl.colSpan = column.width;
+                       cellEl.rowSpan = column.height;
+
+                       cellEl.innerHTML = column.value;
+
+                       if (_this6.cloneTableStyle) {
+                               cellEl.style.boxSizing = "border-box";
+                       }
+
+                       classNames.forEach(function (className) {
+                               cellEl.classList.add(className);
+                       });
+
+                       _this6.mapElementStyles(column.component.getElement(), cellEl, ["text-align", "border-top", "border-left", "border-right", "border-bottom", "background-color", "color", "font-weight", "font-family", "font-size"]);
+                       _this6.mapElementStyles(column.component._column.contentElement, cellEl, ["padding-top", "padding-left", "padding-right", "padding-bottom"]);
+
+                       if (column.component._column.visible) {
+                               _this6.mapElementStyles(column.component.getElement(), cellEl, ["width"]);
+                       } else {
+                               if (column.component._column.definition.width) {
+                                       cellEl.style.width = column.component._column.definition.width + "px";
+                               }
+                       }
+
+                       if (column.component._column.parent) {
+                               _this6.mapElementStyles(column.component._column.parent.groupElement, cellEl, ["border-top"]);
+                       }
+
+                       rowEl.appendChild(cellEl);
+               }
+       });
+
+       return rowEl;
+};
+
+Export.prototype.genereateGroupElement = function (row, setup, styles) {
+
+       var rowEl = document.createElement("tr"),
+           cellEl = document.createElement("td"),
+           group = row.columns[0];
+
+       rowEl.classList.add("tabulator-print-table-row");
+
+       if (setup.groupHeader && setup.groupHeader[row.indent]) {
+               group.value = setup.groupHeader[row.indent](group.value, row.component._group.getRowCount(), row.component._group.getData(), row.component);
+       } else {
+               if (setup.groupHeader === false) {
+                       group.value = group.value;
+               } else {
+                       group.value = row.component._group.generator(group.value, row.component._group.getRowCount(), row.component._group.getData(), row.component);
+               }
+       }
+
+       cellEl.colSpan = group.width;
+       cellEl.innerHTML = group.value;
+
+       rowEl.classList.add("tabulator-print-table-group");
+       rowEl.classList.add("tabulator-group-level-" + row.indent);
+
+       if (group.component.getVisibility()) {
+               rowEl.classList.add("tabulator-group-visible");
+       }
+
+       this.mapElementStyles(styles.firstGroup, rowEl, ["border-top", "border-left", "border-right", "border-bottom", "color", "font-weight", "font-family", "font-size", "background-color"]);
+       this.mapElementStyles(styles.firstGroup, cellEl, ["padding-top", "padding-left", "padding-right", "padding-bottom"]);
+
+       rowEl.appendChild(cellEl);
+
+       return rowEl;
+};
+
+Export.prototype.genereateCalcElement = function (row, setup, styles) {
+       var rowEl = this.genereateRowElement(row, setup, styles);
+
+       rowEl.classList.add("tabulator-print-table-calcs");
+       this.mapElementStyles(styles.calcRow, rowEl, ["border-top", "border-left", "border-right", "border-bottom", "color", "font-weight", "font-family", "font-size", "background-color"]);
+
+       return rowEl;
+};
+
+Export.prototype.genereateRowElement = function (row, setup, styles) {
+       var _this7 = this;
+
+       var rowEl = document.createElement("tr");
+
+       rowEl.classList.add("tabulator-print-table-row");
+
+       row.columns.forEach(function (col) {
+
+               if (col) {
+                       var cellEl = document.createElement("td"),
+                           column = col.component._column,
+                           value = col.value;
+
+                       var cellWrapper = {
+                               modules: {},
+                               getValue: function getValue() {
+                                       return value;
+                               },
+                               getField: function getField() {
+                                       return column.definition.field;
+                               },
+                               getElement: function getElement() {
+                                       return cellEl;
+                               },
+                               getColumn: function getColumn() {
+                                       return column.getComponent();
+                               },
+                               getData: function getData() {
+                                       return rowData;
+                               },
+                               getRow: function getRow() {
+                                       return row.getComponent();
+                               },
+                               getComponent: function getComponent() {
+                                       return cellWrapper;
+                               },
+                               column: column
+                       };
+
+                       var classNames = column.definition.cssClass ? column.definition.cssClass.split(" ") : [];
+
+                       classNames.forEach(function (className) {
+                               cellEl.classList.add(className);
+                       });
+
+                       if (_this7.table.modExists("format") && _this7.config.formatCells !== false) {
+                               value = _this7.table.modules.format.formatExportValue(cellWrapper, _this7.colVisProp);
+                       } else {
+                               switch (typeof value === "undefined" ? "undefined" : _typeof(value)) {
+                                       case "object":
+                                               value = JSON.stringify(value);
+                                               break;
+
+                                       case "undefined":
+                                       case "null":
+                                               value = "";
+                                               break;
+
+                                       default:
+                                               value = value;
+                               }
+                       }
+
+                       if (value instanceof Node) {
+                               cellEl.appendChild(value);
+                       } else {
+                               cellEl.innerHTML = value;
+                       }
+
+                       if (styles.firstCell) {
+                               _this7.mapElementStyles(styles.firstCell, cellEl, ["padding-top", "padding-left", "padding-right", "padding-bottom", "border-top", "border-left", "border-right", "border-bottom", "color", "font-weight", "font-family", "font-size"]);
+
+                               if (column.definition.align) {
+                                       cellEl.style.textAlign = column.definition.align;
+                               }
+                       }
+
+                       if (_this7.table.options.dataTree && _this7.config.dataTree !== false) {
+                               if (setup.treeElementField && setup.treeElementField == column.field || !setup.treeElementField && i == 0) {
+                                       if (row.component._row.modules.dataTree.controlEl) {
+                                               cellEl.insertBefore(row.component._row.modules.dataTree.controlEl.cloneNode(true), cellEl.firstChild);
+                                       }
+                                       if (row.component._row.modules.dataTree.branchEl) {
+                                               cellEl.insertBefore(row.component._row.modules.dataTree.branchEl.cloneNode(true), cellEl.firstChild);
+                                       }
+                               }
+                       }
+
+                       rowEl.appendChild(cellEl);
+
+                       if (cellWrapper.modules.format && cellWrapper.modules.format.renderedCallback) {
+                               cellWrapper.modules.format.renderedCallback();
+                       }
+
+                       if (setup.rowFormatter && _this7.config.formatCells !== false) {
+                               var rowComponent = row.getComponent();
+
+                               rowComponent.getElement = function () {
+                                       return rowEl;
+                               };
+
+                               setup.rowFormatter(rowComponent);
+                       }
+               }
+       });
+
+       return rowEl;
+};
+
+Export.prototype.genereateHTMLTable = function (list) {
+       var holder = document.createElement("div");
+
+       holder.appendChild(this.genereateTableElement(list));
+
+       return holder.innerHTML;
+};
+
+Export.prototype.getHtml = function (visible, style, config, colVisProp) {
+       var list = this.generateExportList(config || this.table.options.htmlOutputConfig, style, visible, colVisProp || "htmlOutput");
+
+       return this.genereateHTMLTable(list);
+};
+
+Export.prototype.mapElementStyles = function (from, to, props) {
+       if (this.cloneTableStyle && from && to) {
+
+               var lookup = {
+                       "background-color": "backgroundColor",
+                       "color": "fontColor",
+                       "width": "width",
+                       "font-weight": "fontWeight",
+                       "font-family": "fontFamily",
+                       "font-size": "fontSize",
+                       "text-align": "textAlign",
+                       "border-top": "borderTop",
+                       "border-left": "borderLeft",
+                       "border-right": "borderRight",
+                       "border-bottom": "borderBottom",
+                       "padding-top": "paddingTop",
+                       "padding-left": "paddingLeft",
+                       "padding-right": "paddingRight",
+                       "padding-bottom": "paddingBottom"
+               };
+
+               if (window.getComputedStyle) {
+                       var fromStyle = window.getComputedStyle(from);
+
+                       props.forEach(function (prop) {
+                               to.style[lookup[prop]] = fromStyle.getPropertyValue(prop);
+                       });
+               }
+       }
+};
+
+Tabulator.prototype.registerModule("export", Export);
\ No newline at end of file
diff --git a/admin/js/vendors/tabulator/js/modules/export.min.js b/admin/js/vendors/tabulator/js/modules/export.min.js
new file mode 100644 (file)
index 0000000..d0dcccd
--- /dev/null
@@ -0,0 +1,2 @@
+/* Tabulator v4.7.0 (c) Oliver Folkerd */
+var _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},ExportRow=function(t,e,o,r){this.type=t,this.columns=e,this.component=o||!1,this.indent=r||0},ExportColumn=function(t,e,o,r,n){this.value=t,this.component=e||!1,this.width=o,this.height=r,this.depth=n},Export=function(t){this.table=t,this.config={},this.cloneTableStyle=!0,this.colVisProp=""};Export.prototype.generateExportList=function(t,e,o,r){this.cloneTableStyle=e,this.config=t||{},this.colVisProp=r;var n=!1!==this.config.columnHeaders?this.headersToExportRows(this.generateColumnGroupHeaders()):[],l=this.bodyToExportRows(this.rowLookup(o));return n.concat(l)},Export.prototype.genereateTable=function(t,e,o,r){var n=this.generateExportList(t,e,o,r);return this.genereateTableElement(n)},Export.prototype.rowLookup=function(t){var e=this,o=[];if("function"==typeof t)t.call(this.table).forEach(function(t){(t=e.table.rowManager.findRow(t))&&o.push(t)});else switch(t){case!0:case"visible":o=this.table.rowManager.getVisibleRows(!0);break;case"all":o=this.table.rowManager.rows;break;case"selected":o=this.table.modules.selectRow.selectedRows;break;case"active":default:o=this.table.rowManager.getDisplayRows()}return Object.assign([],o)},Export.prototype.generateColumnGroupHeaders=function(){var t=this,e=[];return(!1!==this.config.columnGroups?this.table.columnManager.columns:this.table.columnManager.columnsByIndex).forEach(function(o){var r=t.processColumnGroup(o);r&&e.push(r)}),e},Export.prototype.processColumnGroup=function(t){var e=this,o=t.columns,r=0,n=t.definition["title"+(this.colVisProp.charAt(0).toUpperCase()+this.colVisProp.slice(1))]||t.definition.title,l={title:n,column:t,depth:1};if(o.length){if(l.subGroups=[],l.width=0,o.forEach(function(t){var o=e.processColumnGroup(t);o&&(l.width+=o.width,l.subGroups.push(o),o.depth>r&&(r=o.depth))}),l.depth+=r,!l.width)return!1}else{if(!this.columnVisCheck(t))return!1;l.width=1}return l},Export.prototype.columnVisCheck=function(t){return!1!==t.definition[this.colVisProp]&&(t.visible||!t.visible&&t.definition[this.colVisProp])},Export.prototype.headersToExportRows=function(t){function e(t,n){var l=r-n;if(void 0===o[n]&&(o[n]=[]),t.height=t.subGroups?1:l-t.depth+1,o[n].push(t),t.height>1)for(var a=1;a<t.height;a++)void 0===o[n+a]&&(o[n+a]=[]),o[n+a].push(!1);if(t.width>1)for(var i=1;i<t.width;i++)o[n].push(!1);t.subGroups&&t.subGroups.forEach(function(t){e(t,n+1)})}var o=[],r=0,n=[];return t.forEach(function(t){t.depth>r&&(r=t.depth)}),t.forEach(function(t){e(t,0)}),o.forEach(function(t){var e=[];t.forEach(function(t){t?e.push(new ExportColumn(t.title,t.column.getComponent(),t.width,t.height,t.depth)):e.push(null)}),n.push(new ExportRow("header",e))}),n},Export.prototype.bodyToExportRows=function(t){var e=this,o=[],r=[];return this.table.columnManager.columnsByIndex.forEach(function(t){e.columnVisCheck(t)&&o.push(t.getComponent())}),!1!==this.config.columnCalcs&&this.table.modExists("columnCalcs")&&(this.table.modules.columnCalcs.topInitialized&&t.unshift(this.table.modules.columnCalcs.topRow),this.table.modules.columnCalcs.botInitialized&&t.push(this.table.modules.columnCalcs.botRow)),t=t.filter(function(t){switch(t.type){case"group":return!1!==e.config.rowGroups;case"calc":return!1!==e.config.columnCalcs;case"row":return!(e.table.options.dataTree&&!1===e.config.dataTree&&t.modules.dataTree.parent)}return!0}),t.forEach(function(t,n){var l=t.getData(e.colVisProp),a=[],i=0;switch(t.type){case"group":i=t.level,a.push(new ExportColumn(t.key,t.getComponent(),o.length,1));break;case"calc":case"row":o.forEach(function(t){a.push(new ExportColumn(t._column.getFieldValue(l),t,1,1))}),e.table.options.dataTree&&!1!==e.config.dataTree&&(i=t.modules.dataTree.index)}r.push(new ExportRow(t.type,a,t.getComponent(),i))}),r},Export.prototype.genereateTableElement=function(t){var e=this,o=document.createElement("table"),r=document.createElement("thead"),n=document.createElement("tbody"),l=this.lookupTableStyles(),a=this.table.options["rowFormatter"+(this.colVisProp.charAt(0).toUpperCase()+this.colVisProp.slice(1))],i={};return i.rowFormatter=null!==a?a:this.table.options.rowFormatter,this.table.options.dataTree&&!1!==this.config.dataTree&&this.table.modExists("columnCalcs")&&(i.treeElementField=this.table.modules.dataTree.elementField),i.groupHeader=this.table.options["groupHeader"+(this.colVisProp.charAt(0).toUpperCase()+this.colVisProp.slice(1))],i.groupHeader&&!Array.isArray(i.groupHeader)&&(i.groupHeader=[i.groupHeader]),o.classList.add("tabulator-print-table"),this.mapElementStyles(this.table.columnManager.getHeadersElement(),r,["border-top","border-left","border-right","border-bottom","background-color","color","font-weight","font-family","font-size"]),t.length>1e3&&console.warn("It may take a long time to render an HTML table with more than 1000 rows"),t.forEach(function(t,o){switch(t.type){case"header":r.appendChild(e.genereateHeaderElement(t,i,l));break;case"group":n.appendChild(e.genereateGroupElement(t,i,l));break;case"calc":n.appendChild(e.genereateCalcElement(t,i,l));break;case"row":var a=e.genereateRowElement(t,i,l);e.mapElementStyles(o%2&&l.evenRow?l.evenRow:l.oddRow,a,["border-top","border-left","border-right","border-bottom","color","font-weight","font-family","font-size","background-color"]),n.appendChild(a)}}),r.innerHTML&&o.appendChild(r),o.appendChild(n),this.mapElementStyles(this.table.element,o,["border-top","border-left","border-right","border-bottom"]),o},Export.prototype.lookupTableStyles=function(){var t={};return this.cloneTableStyle&&window.getComputedStyle&&(t.oddRow=this.table.element.querySelector(".tabulator-row-odd:not(.tabulator-group):not(.tabulator-calcs)"),t.evenRow=this.table.element.querySelector(".tabulator-row-even:not(.tabulator-group):not(.tabulator-calcs)"),t.calcRow=this.table.element.querySelector(".tabulator-row.tabulator-calcs"),t.firstRow=this.table.element.querySelector(".tabulator-row:not(.tabulator-group):not(.tabulator-calcs)"),t.firstGroup=this.table.element.getElementsByClassName("tabulator-group")[0],t.firstRow&&(t.styleCells=t.firstRow.getElementsByClassName("tabulator-cell"),t.firstCell=t.styleCells[0],t.lastCell=t.styleCells[t.styleCells.length-1])),t},Export.prototype.genereateHeaderElement=function(t,e,o){var r=this,n=document.createElement("tr");return t.columns.forEach(function(t){if(t){var e=document.createElement("th"),o=t.component._column.definition.cssClass?t.component._column.definition.cssClass.split(" "):[];e.colSpan=t.width,e.rowSpan=t.height,e.innerHTML=t.value,r.cloneTableStyle&&(e.style.boxSizing="border-box"),o.forEach(function(t){e.classList.add(t)}),r.mapElementStyles(t.component.getElement(),e,["text-align","border-top","border-left","border-right","border-bottom","background-color","color","font-weight","font-family","font-size"]),r.mapElementStyles(t.component._column.contentElement,e,["padding-top","padding-left","padding-right","padding-bottom"]),t.component._column.visible?r.mapElementStyles(t.component.getElement(),e,["width"]):t.component._column.definition.width&&(e.style.width=t.component._column.definition.width+"px"),t.component._column.parent&&r.mapElementStyles(t.component._column.parent.groupElement,e,["border-top"]),n.appendChild(e)}}),n},Export.prototype.genereateGroupElement=function(t,e,o){var r=document.createElement("tr"),n=document.createElement("td"),l=t.columns[0];return r.classList.add("tabulator-print-table-row"),e.groupHeader&&e.groupHeader[t.indent]?l.value=e.groupHeader[t.indent](l.value,t.component._group.getRowCount(),t.component._group.getData(),t.component):!1===e.groupHeader?l.value=l.value:l.value=t.component._group.generator(l.value,t.component._group.getRowCount(),t.component._group.getData(),t.component),n.colSpan=l.width,n.innerHTML=l.value,r.classList.add("tabulator-print-table-group"),r.classList.add("tabulator-group-level-"+t.indent),l.component.getVisibility()&&r.classList.add("tabulator-group-visible"),this.mapElementStyles(o.firstGroup,r,["border-top","border-left","border-right","border-bottom","color","font-weight","font-family","font-size","background-color"]),this.mapElementStyles(o.firstGroup,n,["padding-top","padding-left","padding-right","padding-bottom"]),r.appendChild(n),r},Export.prototype.genereateCalcElement=function(t,e,o){var r=this.genereateRowElement(t,e,o);return r.classList.add("tabulator-print-table-calcs"),this.mapElementStyles(o.calcRow,r,["border-top","border-left","border-right","border-bottom","color","font-weight","font-family","font-size","background-color"]),r},Export.prototype.genereateRowElement=function(t,e,o){var r=this,n=document.createElement("tr");return n.classList.add("tabulator-print-table-row"),t.columns.forEach(function(l){if(l){var a=document.createElement("td"),s=l.component._column,p=l.value,c={modules:{},getValue:function(){return p},getField:function(){return s.definition.field},getElement:function(){return a},getColumn:function(){return s.getComponent()},getData:function(){return rowData},getRow:function(){return t.getComponent()},getComponent:function(){return c},column:s};if((s.definition.cssClass?s.definition.cssClass.split(" "):[]).forEach(function(t){a.classList.add(t)}),r.table.modExists("format")&&!1!==r.config.formatCells)p=r.table.modules.format.formatExportValue(c,r.colVisProp);else switch(void 0===p?"undefined":_typeof(p)){case"object":p=JSON.stringify(p);break;case"undefined":case"null":p="";break;default:p=p}if(p instanceof Node?a.appendChild(p):a.innerHTML=p,o.firstCell&&(r.mapElementStyles(o.firstCell,a,["padding-top","padding-left","padding-right","padding-bottom","border-top","border-left","border-right","border-bottom","color","font-weight","font-family","font-size"]),s.definition.align&&(a.style.textAlign=s.definition.align)),r.table.options.dataTree&&!1!==r.config.dataTree&&(e.treeElementField&&e.treeElementField==s.field||!e.treeElementField&&0==i)&&(t.component._row.modules.dataTree.controlEl&&a.insertBefore(t.component._row.modules.dataTree.controlEl.cloneNode(!0),a.firstChild),t.component._row.modules.dataTree.branchEl&&a.insertBefore(t.component._row.modules.dataTree.branchEl.cloneNode(!0),a.firstChild)),n.appendChild(a),c.modules.format&&c.modules.format.renderedCallback&&c.modules.format.renderedCallback(),e.rowFormatter&&!1!==r.config.formatCells){var u=t.getComponent();u.getElement=function(){return n},e.rowFormatter(u)}}}),n},Export.prototype.genereateHTMLTable=function(t){var e=document.createElement("div");return e.appendChild(this.genereateTableElement(t)),e.innerHTML},Export.prototype.getHtml=function(t,e,o,r){var n=this.generateExportList(o||this.table.options.htmlOutputConfig,e,t,r||"htmlOutput");return this.genereateHTMLTable(n)},Export.prototype.mapElementStyles=function(t,e,o){if(this.cloneTableStyle&&t&&e){var r={"background-color":"backgroundColor",color:"fontColor",width:"width","font-weight":"fontWeight","font-family":"fontFamily","font-size":"fontSize","text-align":"textAlign","border-top":"borderTop","border-left":"borderLeft","border-right":"borderRight","border-bottom":"borderBottom","padding-top":"paddingTop","padding-left":"paddingLeft","padding-right":"paddingRight","padding-bottom":"paddingBottom"};if(window.getComputedStyle){var n=window.getComputedStyle(t);o.forEach(function(t){e.style[r[t]]=n.getPropertyValue(t)})}}},Tabulator.prototype.registerModule("export",Export);
\ No newline at end of file
diff --git a/admin/js/vendors/tabulator/js/modules/filter.js b/admin/js/vendors/tabulator/js/modules/filter.js
new file mode 100644 (file)
index 0000000..aaed59b
--- /dev/null
@@ -0,0 +1,807 @@
+var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
+
+/* Tabulator v4.7.0 (c) Oliver Folkerd */
+
+var Filter = function Filter(table) {
+
+       this.table = table; //hold Tabulator object
+
+       this.filterList = []; //hold filter list
+       this.headerFilters = {}; //hold column filters
+       this.headerFilterColumns = []; //hold columns that use header filters
+
+       this.prevHeaderFilterChangeCheck = "";
+       this.prevHeaderFilterChangeCheck = "{}";
+
+       this.changed = false; //has filtering changed since last render
+};
+
+//initialize column header filter
+Filter.prototype.initializeColumn = function (column, value) {
+       var self = this,
+           field = column.getField(),
+           params;
+
+       //handle successfull value change
+       function success(value) {
+               var filterType = column.modules.filter.tagType == "input" && column.modules.filter.attrType == "text" || column.modules.filter.tagType == "textarea" ? "partial" : "match",
+                   type = "",
+                   filterChangeCheck = "",
+                   filterFunc;
+
+               if (typeof column.modules.filter.prevSuccess === "undefined" || column.modules.filter.prevSuccess !== value) {
+
+                       column.modules.filter.prevSuccess = value;
+
+                       if (!column.modules.filter.emptyFunc(value)) {
+                               column.modules.filter.value = value;
+
+                               switch (_typeof(column.definition.headerFilterFunc)) {
+                                       case "string":
+                                               if (self.filters[column.definition.headerFilterFunc]) {
+                                                       type = column.definition.headerFilterFunc;
+                                                       filterFunc = function filterFunc(data) {
+                                                               var params = column.definition.headerFilterFuncParams || {};
+                                                               var fieldVal = column.getFieldValue(data);
+
+                                                               params = typeof params === "function" ? params(value, fieldVal, data) : params;
+
+                                                               return self.filters[column.definition.headerFilterFunc](value, fieldVal, data, params);
+                                                       };
+                                               } else {
+                                                       console.warn("Header Filter Error - Matching filter function not found: ", column.definition.headerFilterFunc);
+                                               }
+                                               break;
+
+                                       case "function":
+                                               filterFunc = function filterFunc(data) {
+                                                       var params = column.definition.headerFilterFuncParams || {};
+                                                       var fieldVal = column.getFieldValue(data);
+
+                                                       params = typeof params === "function" ? params(value, fieldVal, data) : params;
+
+                                                       return column.definition.headerFilterFunc(value, fieldVal, data, params);
+                                               };
+
+                                               type = filterFunc;
+                                               break;
+                               }
+
+                               if (!filterFunc) {
+                                       switch (filterType) {
+                                               case "partial":
+                                                       filterFunc = function filterFunc(data) {
+                                                               var colVal = column.getFieldValue(data);
+
+                                                               if (typeof colVal !== 'undefined' && colVal !== null) {
+                                                                       return String(colVal).toLowerCase().indexOf(String(value).toLowerCase()) > -1;
+                                                               } else {
+                                                                       return false;
+                                                               }
+                                                       };
+                                                       type = "like";
+                                                       break;
+
+                                               default:
+                                                       filterFunc = function filterFunc(data) {
+                                                               return column.getFieldValue(data) == value;
+                                                       };
+                                                       type = "=";
+                                       }
+                               }
+
+                               self.headerFilters[field] = { value: value, func: filterFunc, type: type, params: params || {} };
+                       } else {
+                               delete self.headerFilters[field];
+                       }
+
+                       filterChangeCheck = JSON.stringify(self.headerFilters);
+
+                       if (self.prevHeaderFilterChangeCheck !== filterChangeCheck) {
+                               self.prevHeaderFilterChangeCheck = filterChangeCheck;
+
+                               self.changed = true;
+                               self.table.rowManager.filterRefresh();
+                       }
+               }
+
+               return true;
+       }
+
+       column.modules.filter = {
+               success: success,
+               attrType: false,
+               tagType: false,
+               emptyFunc: false
+       };
+
+       this.generateHeaderFilterElement(column);
+};
+
+Filter.prototype.generateHeaderFilterElement = function (column, initialValue, reinitialize) {
+       var _this = this;
+
+       var self = this,
+           success = column.modules.filter.success,
+           field = column.getField(),
+           filterElement,
+           editor,
+           editorElement,
+           cellWrapper,
+           typingTimer,
+           searchTrigger,
+           params;
+
+       //handle aborted edit
+       function cancel() {}
+
+       if (column.modules.filter.headerElement && column.modules.filter.headerElement.parentNode) {
+               column.contentElement.removeChild(column.modules.filter.headerElement.parentNode);
+       }
+
+       if (field) {
+
+               //set empty value function
+               column.modules.filter.emptyFunc = column.definition.headerFilterEmptyCheck || function (value) {
+                       return !value && value !== "0";
+               };
+
+               filterElement = document.createElement("div");
+               filterElement.classList.add("tabulator-header-filter");
+
+               //set column editor
+               switch (_typeof(column.definition.headerFilter)) {
+                       case "string":
+                               if (self.table.modules.edit.editors[column.definition.headerFilter]) {
+                                       editor = self.table.modules.edit.editors[column.definition.headerFilter];
+
+                                       if ((column.definition.headerFilter === "tick" || column.definition.headerFilter === "tickCross") && !column.definition.headerFilterEmptyCheck) {
+                                               column.modules.filter.emptyFunc = function (value) {
+                                                       return value !== true && value !== false;
+                                               };
+                                       }
+                               } else {
+                                       console.warn("Filter Error - Cannot build header filter, No such editor found: ", column.definition.editor);
+                               }
+                               break;
+
+                       case "function":
+                               editor = column.definition.headerFilter;
+                               break;
+
+                       case "boolean":
+                               if (column.modules.edit && column.modules.edit.editor) {
+                                       editor = column.modules.edit.editor;
+                               } else {
+                                       if (column.definition.formatter && self.table.modules.edit.editors[column.definition.formatter]) {
+                                               editor = self.table.modules.edit.editors[column.definition.formatter];
+
+                                               if ((column.definition.formatter === "tick" || column.definition.formatter === "tickCross") && !column.definition.headerFilterEmptyCheck) {
+                                                       column.modules.filter.emptyFunc = function (value) {
+                                                               return value !== true && value !== false;
+                                                       };
+                                               }
+                                       } else {
+                                               editor = self.table.modules.edit.editors["input"];
+                                       }
+                               }
+                               break;
+               }
+
+               if (editor) {
+
+                       cellWrapper = {
+                               getValue: function getValue() {
+                                       return typeof initialValue !== "undefined" ? initialValue : "";
+                               },
+                               getField: function getField() {
+                                       return column.definition.field;
+                               },
+                               getElement: function getElement() {
+                                       return filterElement;
+                               },
+                               getColumn: function getColumn() {
+                                       return column.getComponent();
+                               },
+                               getRow: function getRow() {
+                                       return {
+                                               normalizeHeight: function normalizeHeight() {}
+                                       };
+                               }
+                       };
+
+                       params = column.definition.headerFilterParams || {};
+
+                       params = typeof params === "function" ? params.call(self.table) : params;
+
+                       editorElement = editor.call(this.table.modules.edit, cellWrapper, function () {}, success, cancel, params);
+
+                       if (!editorElement) {
+                               console.warn("Filter Error - Cannot add filter to " + field + " column, editor returned a value of false");
+                               return;
+                       }
+
+                       if (!(editorElement instanceof Node)) {
+                               console.warn("Filter Error - Cannot add filter to " + field + " column, editor should return an instance of Node, the editor returned:", editorElement);
+                               return;
+                       }
+
+                       //set Placeholder Text
+                       if (field) {
+                               self.table.modules.localize.bind("headerFilters|columns|" + column.definition.field, function (value) {
+                                       editorElement.setAttribute("placeholder", typeof value !== "undefined" && value ? value : self.table.modules.localize.getText("headerFilters|default"));
+                               });
+                       } else {
+                               self.table.modules.localize.bind("headerFilters|default", function (value) {
+                                       editorElement.setAttribute("placeholder", typeof self.column.definition.headerFilterPlaceholder !== "undefined" && self.column.definition.headerFilterPlaceholder ? self.column.definition.headerFilterPlaceholder : value);
+                               });
+                       }
+
+                       //focus on element on click
+                       editorElement.addEventListener("click", function (e) {
+                               e.stopPropagation();
+                               editorElement.focus();
+                       });
+
+                       editorElement.addEventListener("focus", function (e) {
+                               var left = _this.table.columnManager.element.scrollLeft;
+
+                               if (left !== _this.table.rowManager.element.scrollLeft) {
+                                       _this.table.rowManager.scrollHorizontal(left);
+                                       _this.table.columnManager.scrollHorizontal(left);
+                               }
+                       });
+
+                       //live update filters as user types
+                       typingTimer = false;
+
+                       searchTrigger = function searchTrigger(e) {
+                               if (typingTimer) {
+                                       clearTimeout(typingTimer);
+                               }
+
+                               typingTimer = setTimeout(function () {
+                                       success(editorElement.value);
+                               }, self.table.options.headerFilterLiveFilterDelay);
+                       };
+
+                       column.modules.filter.headerElement = editorElement;
+                       column.modules.filter.attrType = editorElement.hasAttribute("type") ? editorElement.getAttribute("type").toLowerCase() : "";
+                       column.modules.filter.tagType = editorElement.tagName.toLowerCase();
+
+                       if (column.definition.headerFilterLiveFilter !== false) {
+
+                               if (!(column.definition.headerFilter === 'autocomplete' || column.definition.headerFilter === 'tickCross' || (column.definition.editor === 'autocomplete' || column.definition.editor === 'tickCross') && column.definition.headerFilter === true)) {
+                                       editorElement.addEventListener("keyup", searchTrigger);
+                                       editorElement.addEventListener("search", searchTrigger);
+
+                                       //update number filtered columns on change
+                                       if (column.modules.filter.attrType == "number") {
+                                               editorElement.addEventListener("change", function (e) {
+                                                       success(editorElement.value);
+                                               });
+                                       }
+
+                                       //change text inputs to search inputs to allow for clearing of field
+                                       if (column.modules.filter.attrType == "text" && this.table.browser !== "ie") {
+                                               editorElement.setAttribute("type", "search");
+                                               // editorElement.off("change blur"); //prevent blur from triggering filter and preventing selection click
+                                       }
+                               }
+
+                               //prevent input and select elements from propegating click to column sorters etc
+                               if (column.modules.filter.tagType == "input" || column.modules.filter.tagType == "select" || column.modules.filter.tagType == "textarea") {
+                                       editorElement.addEventListener("mousedown", function (e) {
+                                               e.stopPropagation();
+                                       });
+                               }
+                       }
+
+                       filterElement.appendChild(editorElement);
+
+                       column.contentElement.appendChild(filterElement);
+
+                       if (!reinitialize) {
+                               self.headerFilterColumns.push(column);
+                       }
+               }
+       } else {
+               console.warn("Filter Error - Cannot add header filter, column has no field set:", column.definition.title);
+       }
+};
+
+//hide all header filter elements (used to ensure correct column widths in "fitData" layout mode)
+Filter.prototype.hideHeaderFilterElements = function () {
+       this.headerFilterColumns.forEach(function (column) {
+               if (column.modules.filter && column.modules.filter.headerElement) {
+                       column.modules.filter.headerElement.style.display = 'none';
+               }
+       });
+};
+
+//show all header filter elements (used to ensure correct column widths in "fitData" layout mode)
+Filter.prototype.showHeaderFilterElements = function () {
+       this.headerFilterColumns.forEach(function (column) {
+               if (column.modules.filter && column.modules.filter.headerElement) {
+                       column.modules.filter.headerElement.style.display = '';
+               }
+       });
+};
+
+//programatically set focus of header filter
+Filter.prototype.setHeaderFilterFocus = function (column) {
+       if (column.modules.filter && column.modules.filter.headerElement) {
+               column.modules.filter.headerElement.focus();
+       } else {
+               console.warn("Column Filter Focus Error - No header filter set on column:", column.getField());
+       }
+};
+
+//programmatically get value of header filter
+Filter.prototype.getHeaderFilterValue = function (column) {
+       if (column.modules.filter && column.modules.filter.headerElement) {
+               return column.modules.filter.headerElement.value;
+       } else {
+               console.warn("Column Filter Error - No header filter set on column:", column.getField());
+       }
+};
+
+//programatically set value of header filter
+Filter.prototype.setHeaderFilterValue = function (column, value) {
+       if (column) {
+               if (column.modules.filter && column.modules.filter.headerElement) {
+                       this.generateHeaderFilterElement(column, value, true);
+                       column.modules.filter.success(value);
+               } else {
+                       console.warn("Column Filter Error - No header filter set on column:", column.getField());
+               }
+       }
+};
+
+Filter.prototype.reloadHeaderFilter = function (column) {
+       if (column) {
+               if (column.modules.filter && column.modules.filter.headerElement) {
+                       this.generateHeaderFilterElement(column, column.modules.filter.value, true);
+               } else {
+                       console.warn("Column Filter Error - No header filter set on column:", column.getField());
+               }
+       }
+};
+
+//check if the filters has changed since last use
+Filter.prototype.hasChanged = function () {
+       var changed = this.changed;
+       this.changed = false;
+       return changed;
+};
+
+//set standard filters
+Filter.prototype.setFilter = function (field, type, value, params) {
+       var self = this;
+
+       self.filterList = [];
+
+       if (!Array.isArray(field)) {
+               field = [{ field: field, type: type, value: value, params: params }];
+       }
+
+       self.addFilter(field);
+};
+
+//add filter to array
+Filter.prototype.addFilter = function (field, type, value, params) {
+       var self = this;
+
+       if (!Array.isArray(field)) {
+               field = [{ field: field, type: type, value: value, params: params }];
+       }
+
+       field.forEach(function (filter) {
+
+               filter = self.findFilter(filter);
+
+               if (filter) {
+                       self.filterList.push(filter);
+
+                       self.changed = true;
+               }
+       });
+
+       if (this.table.options.persistence && this.table.modExists("persistence", true) && this.table.modules.persistence.config.filter) {
+               this.table.modules.persistence.save("filter");
+       }
+};
+
+Filter.prototype.findFilter = function (filter) {
+       var self = this,
+           column;
+
+       if (Array.isArray(filter)) {
+               return this.findSubFilters(filter);
+       }
+
+       var filterFunc = false;
+
+       if (typeof filter.field == "function") {
+               filterFunc = function filterFunc(data) {
+                       return filter.field(data, filter.type || {}); // pass params to custom filter function
+               };
+       } else {
+
+               if (self.filters[filter.type]) {
+
+                       column = self.table.columnManager.getColumnByField(filter.field);
+
+                       if (column) {
+                               filterFunc = function filterFunc(data) {
+                                       return self.filters[filter.type](filter.value, column.getFieldValue(data), data, filter.params || {});
+                               };
+                       } else {
+                               filterFunc = function filterFunc(data) {
+                                       return self.filters[filter.type](filter.value, data[filter.field], data, filter.params || {});
+                               };
+                       }
+               } else {
+                       console.warn("Filter Error - No such filter type found, ignoring: ", filter.type);
+               }
+       }
+
+       filter.func = filterFunc;
+
+       return filter.func ? filter : false;
+};
+
+Filter.prototype.findSubFilters = function (filters) {
+       var self = this,
+           output = [];
+
+       filters.forEach(function (filter) {
+               filter = self.findFilter(filter);
+
+               if (filter) {
+                       output.push(filter);
+               }
+       });
+
+       return output.length ? output : false;
+};
+
+//get all filters
+Filter.prototype.getFilters = function (all, ajax) {
+       var output = [];
+
+       if (all) {
+               output = this.getHeaderFilters();
+       }
+
+       if (ajax) {
+               output.forEach(function (item) {
+                       if (typeof item.type == "function") {
+                               item.type = "function";
+                       }
+               });
+       }
+
+       output = output.concat(this.filtersToArray(this.filterList, ajax));
+
+       return output;
+};
+
+//filter to Object
+Filter.prototype.filtersToArray = function (filterList, ajax) {
+       var _this2 = this;
+
+       var output = [];
+
+       filterList.forEach(function (filter) {
+               var item;
+
+               if (Array.isArray(filter)) {
+                       output.push(_this2.filtersToArray(filter, ajax));
+               } else {
+                       item = { field: filter.field, type: filter.type, value: filter.value };
+
+                       if (ajax) {
+                               if (typeof item.type == "function") {
+                                       item.type = "function";
+                               }
+                       }
+
+                       output.push(item);
+               }
+       });
+
+       return output;
+};
+
+//get all filters
+Filter.prototype.getHeaderFilters = function () {
+       var self = this,
+           output = [];
+
+       for (var key in this.headerFilters) {
+               output.push({ field: key, type: this.headerFilters[key].type, value: this.headerFilters[key].value });
+       }
+
+       return output;
+};
+
+//remove filter from array
+Filter.prototype.removeFilter = function (field, type, value) {
+       var self = this;
+
+       if (!Array.isArray(field)) {
+               field = [{ field: field, type: type, value: value }];
+       }
+
+       field.forEach(function (filter) {
+               var index = -1;
+
+               if (_typeof(filter.field) == "object") {
+                       index = self.filterList.findIndex(function (element) {
+                               return filter === element;
+                       });
+               } else {
+                       index = self.filterList.findIndex(function (element) {
+                               return filter.field === element.field && filter.type === element.type && filter.value === element.value;
+                       });
+               }
+
+               if (index > -1) {
+                       self.filterList.splice(index, 1);
+                       self.changed = true;
+               } else {
+                       console.warn("Filter Error - No matching filter type found, ignoring: ", filter.type);
+               }
+       });
+
+       if (this.table.options.persistence && this.table.modExists("persistence", true) && this.table.modules.persistence.config.filter) {
+               this.table.modules.persistence.save("filter");
+       }
+};
+
+//clear filters
+Filter.prototype.clearFilter = function (all) {
+       this.filterList = [];
+
+       if (all) {
+               this.clearHeaderFilter();
+       }
+
+       this.changed = true;
+
+       if (this.table.options.persistence && this.table.modExists("persistence", true) && this.table.modules.persistence.config.filter) {
+               this.table.modules.persistence.save("filter");
+       }
+};
+
+//clear header filters
+Filter.prototype.clearHeaderFilter = function () {
+       var self = this;
+
+       this.headerFilters = {};
+       self.prevHeaderFilterChangeCheck = "{}";
+
+       this.headerFilterColumns.forEach(function (column) {
+               column.modules.filter.value = null;
+               column.modules.filter.prevSuccess = undefined;
+               self.reloadHeaderFilter(column);
+       });
+
+       this.changed = true;
+};
+
+//search data and return matching rows
+Filter.prototype.search = function (searchType, field, type, value) {
+       var self = this,
+           activeRows = [],
+           filterList = [];
+
+       if (!Array.isArray(field)) {
+               field = [{ field: field, type: type, value: value }];
+       }
+
+       field.forEach(function (filter) {
+               filter = self.findFilter(filter);
+
+               if (filter) {
+                       filterList.push(filter);
+               }
+       });
+
+       this.table.rowManager.rows.forEach(function (row) {
+               var match = true;
+
+               filterList.forEach(function (filter) {
+                       if (!self.filterRecurse(filter, row.getData())) {
+                               match = false;
+                       }
+               });
+
+               if (match) {
+                       activeRows.push(searchType === "data" ? row.getData("data") : row.getComponent());
+               }
+       });
+
+       return activeRows;
+};
+
+//filter row array
+Filter.prototype.filter = function (rowList, filters) {
+       var self = this,
+           activeRows = [],
+           activeRowComponents = [];
+
+       if (self.table.options.dataFiltering) {
+               self.table.options.dataFiltering.call(self.table, self.getFilters());
+       }
+
+       if (!self.table.options.ajaxFiltering && (self.filterList.length || Object.keys(self.headerFilters).length)) {
+
+               rowList.forEach(function (row) {
+                       if (self.filterRow(row)) {
+                               activeRows.push(row);
+                       }
+               });
+       } else {
+               activeRows = rowList.slice(0);
+       }
+
+       if (self.table.options.dataFiltered) {
+
+               activeRows.forEach(function (row) {
+                       activeRowComponents.push(row.getComponent());
+               });
+
+               self.table.options.dataFiltered.call(self.table, self.getFilters(), activeRowComponents);
+       }
+
+       return activeRows;
+};
+
+//filter individual row
+Filter.prototype.filterRow = function (row, filters) {
+       var self = this,
+           match = true,
+           data = row.getData();
+
+       self.filterList.forEach(function (filter) {
+               if (!self.filterRecurse(filter, data)) {
+                       match = false;
+               }
+       });
+
+       for (var field in self.headerFilters) {
+               if (!self.headerFilters[field].func(data)) {
+                       match = false;
+               }
+       }
+
+       return match;
+};
+
+Filter.prototype.filterRecurse = function (filter, data) {
+       var self = this,
+           match = false;
+
+       if (Array.isArray(filter)) {
+               filter.forEach(function (subFilter) {
+                       if (self.filterRecurse(subFilter, data)) {
+                               match = true;
+                       }
+               });
+       } else {
+               match = filter.func(data);
+       }
+
+       return match;
+};
+
+//list of available filters
+Filter.prototype.filters = {
+
+       //equal to
+       "=": function _(filterVal, rowVal, rowData, filterParams) {
+               return rowVal == filterVal ? true : false;
+       },
+
+       //less than
+       "<": function _(filterVal, rowVal, rowData, filterParams) {
+               return rowVal < filterVal ? true : false;
+       },
+
+       //less than or equal to
+       "<=": function _(filterVal, rowVal, rowData, filterParams) {
+               return rowVal <= filterVal ? true : false;
+       },
+
+       //greater than
+       ">": function _(filterVal, rowVal, rowData, filterParams) {
+               return rowVal > filterVal ? true : false;
+       },
+
+       //greater than or equal to
+       ">=": function _(filterVal, rowVal, rowData, filterParams) {
+               return rowVal >= filterVal ? true : false;
+       },
+
+       //not equal to
+       "!=": function _(filterVal, rowVal, rowData, filterParams) {
+               return rowVal != filterVal ? true : false;
+       },
+
+       "regex": function regex(filterVal, rowVal, rowData, filterParams) {
+
+               if (typeof filterVal == "string") {
+                       filterVal = new RegExp(filterVal);
+               }
+
+               return filterVal.test(rowVal);
+       },
+
+       //contains the string
+       "like": function like(filterVal, rowVal, rowData, filterParams) {
+               if (filterVal === null || typeof filterVal === "undefined") {
+                       return rowVal === filterVal ? true : false;
+               } else {
+                       if (typeof rowVal !== 'undefined' && rowVal !== null) {
+                               return String(rowVal).toLowerCase().indexOf(filterVal.toLowerCase()) > -1;
+                       } else {
+                               return false;
+                       }
+               }
+       },
+
+       //contains the keywords
+       "keywords": function keywords(filterVal, rowVal, rowData, filterParams) {
+               var keywords = filterVal.toLowerCase().split(typeof filterParams.separator === "undefined" ? " " : filterParams.separator),
+                   value = String(rowVal === null || typeof rowVal === "undefined" ? "" : rowVal).toLowerCase(),
+                   matches = [];
+
+               keywords.forEach(function (keyword) {
+                       if (value.includes(keyword)) {
+                               matches.push(true);
+                       }
+               });
+
+               return filterParams.matchAll ? matches.length === keywords.length : !!matches.length;
+       },
+
+       //starts with the string
+       "starts": function starts(filterVal, rowVal, rowData, filterParams) {
+               if (filterVal === null || typeof filterVal === "undefined") {
+                       return rowVal === filterVal ? true : false;
+               } else {
+                       if (typeof rowVal !== 'undefined' && rowVal !== null) {
+                               return String(rowVal).toLowerCase().startsWith(filterVal.toLowerCase());
+                       } else {
+                               return false;
+                       }
+               }
+       },
+
+       //ends with the string
+       "ends": function ends(filterVal, rowVal, rowData, filterParams) {
+               if (filterVal === null || typeof filterVal === "undefined") {
+                       return rowVal === filterVal ? true : false;
+               } else {
+                       if (typeof rowVal !== 'undefined' && rowVal !== null) {
+                               return String(rowVal).toLowerCase().endsWith(filterVal.toLowerCase());
+                       } else {
+                               return false;
+                       }
+               }
+       },
+
+       //in array
+       "in": function _in(filterVal, rowVal, rowData, filterParams) {
+               if (Array.isArray(filterVal)) {
+                       return filterVal.indexOf(rowVal) > -1;
+               } else {
+                       console.warn("Filter Error - filter value is not an array:", filterVal);
+                       return false;
+               }
+       }
+};
+
+Tabulator.prototype.registerModule("filter", Filter);
\ No newline at end of file
diff --git a/admin/js/vendors/tabulator/js/modules/filter.min.js b/admin/js/vendors/tabulator/js/modules/filter.min.js
new file mode 100644 (file)
index 0000000..8be2662
--- /dev/null
@@ -0,0 +1,2 @@
+/* Tabulator v4.7.0 (c) Oliver Folkerd */
+var _typeof="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},Filter=function(e){this.table=e,this.filterList=[],this.headerFilters={},this.headerFilterColumns=[],this.prevHeaderFilterChangeCheck="",this.prevHeaderFilterChangeCheck="{}",this.changed=!1};Filter.prototype.initializeColumn=function(e,t){function r(t){var r,o="input"==e.modules.filter.tagType&&"text"==e.modules.filter.attrType||"textarea"==e.modules.filter.tagType?"partial":"match",a="",s="";if(void 0===e.modules.filter.prevSuccess||e.modules.filter.prevSuccess!==t){if(e.modules.filter.prevSuccess=t,e.modules.filter.emptyFunc(t))delete n.headerFilters[l];else{switch(e.modules.filter.value=t,_typeof(e.definition.headerFilterFunc)){case"string":n.filters[e.definition.headerFilterFunc]?(a=e.definition.headerFilterFunc,r=function(r){var i=e.definition.headerFilterFuncParams||{},l=e.getFieldValue(r);return i="function"==typeof i?i(t,l,r):i,n.filters[e.definition.headerFilterFunc](t,l,r,i)}):console.warn("Header Filter Error - Matching filter function not found: ",e.definition.headerFilterFunc);break;case"function":r=function(r){var i=e.definition.headerFilterFuncParams||{},n=e.getFieldValue(r);return i="function"==typeof i?i(t,n,r):i,e.definition.headerFilterFunc(t,n,r,i)},a=r}if(!r)switch(o){case"partial":r=function(r){var i=e.getFieldValue(r);return void 0!==i&&null!==i&&String(i).toLowerCase().indexOf(String(t).toLowerCase())>-1},a="like";break;default:r=function(r){return e.getFieldValue(r)==t},a="="}n.headerFilters[l]={value:t,func:r,type:a,params:i||{}}}s=JSON.stringify(n.headerFilters),n.prevHeaderFilterChangeCheck!==s&&(n.prevHeaderFilterChangeCheck=s,n.changed=!0,n.table.rowManager.filterRefresh())}return!0}var i,n=this,l=e.getField();e.modules.filter={success:r,attrType:!1,tagType:!1,emptyFunc:!1},this.generateHeaderFilterElement(e)},Filter.prototype.generateHeaderFilterElement=function(e,t,r){function i(){}var n,l,o,a,s,d,u,f=this,c=this,h=e.modules.filter.success,p=e.getField();if(e.modules.filter.headerElement&&e.modules.filter.headerElement.parentNode&&e.contentElement.removeChild(e.modules.filter.headerElement.parentNode),p){switch(e.modules.filter.emptyFunc=e.definition.headerFilterEmptyCheck||function(e){return!e&&"0"!==e},n=document.createElement("div"),n.classList.add("tabulator-header-filter"),_typeof(e.definition.headerFilter)){case"string":c.table.modules.edit.editors[e.definition.headerFilter]?(l=c.table.modules.edit.editors[e.definition.headerFilter],"tick"!==e.definition.headerFilter&&"tickCross"!==e.definition.headerFilter||e.definition.headerFilterEmptyCheck||(e.modules.filter.emptyFunc=function(e){return!0!==e&&!1!==e})):console.warn("Filter Error - Cannot build header filter, No such editor found: ",e.definition.editor);break;case"function":l=e.definition.headerFilter;break;case"boolean":e.modules.edit&&e.modules.edit.editor?l=e.modules.edit.editor:e.definition.formatter&&c.table.modules.edit.editors[e.definition.formatter]?(l=c.table.modules.edit.editors[e.definition.formatter],"tick"!==e.definition.formatter&&"tickCross"!==e.definition.formatter||e.definition.headerFilterEmptyCheck||(e.modules.filter.emptyFunc=function(e){return!0!==e&&!1!==e})):l=c.table.modules.edit.editors.input}if(l){if(a={getValue:function(){return void 0!==t?t:""},getField:function(){return e.definition.field},getElement:function(){return n},getColumn:function(){return e.getComponent()},getRow:function(){return{normalizeHeight:function(){}}}},u=e.definition.headerFilterParams||{},u="function"==typeof u?u.call(c.table):u,!(o=l.call(this.table.modules.edit,a,function(){},h,i,u)))return void console.warn("Filter Error - Cannot add filter to "+p+" column, editor returned a value of false");if(!(o instanceof Node))return void console.warn("Filter Error - Cannot add filter to "+p+" column, editor should return an instance of Node, the editor returned:",o);p?c.table.modules.localize.bind("headerFilters|columns|"+e.definition.field,function(e){o.setAttribute("placeholder",void 0!==e&&e?e:c.table.modules.localize.getText("headerFilters|default"))}):c.table.modules.localize.bind("headerFilters|default",function(e){o.setAttribute("placeholder",void 0!==c.column.definition.headerFilterPlaceholder&&c.column.definition.headerFilterPlaceholder?c.column.definition.headerFilterPlaceholder:e)}),o.addEventListener("click",function(e){e.stopPropagation(),o.focus()}),o.addEventListener("focus",function(e){var t=f.table.columnManager.element.scrollLeft;t!==f.table.rowManager.element.scrollLeft&&(f.table.rowManager.scrollHorizontal(t),f.table.columnManager.scrollHorizontal(t))}),s=!1,d=function(e){s&&clearTimeout(s),s=setTimeout(function(){h(o.value)},c.table.options.headerFilterLiveFilterDelay)},e.modules.filter.headerElement=o,e.modules.filter.attrType=o.hasAttribute("type")?o.getAttribute("type").toLowerCase():"",e.modules.filter.tagType=o.tagName.toLowerCase(),!1!==e.definition.headerFilterLiveFilter&&("autocomplete"!==e.definition.headerFilter&&"tickCross"!==e.definition.headerFilter&&("autocomplete"!==e.definition.editor&&"tickCross"!==e.definition.editor||!0!==e.definition.headerFilter)&&(o.addEventListener("keyup",d),o.addEventListener("search",d),"number"==e.modules.filter.attrType&&o.addEventListener("change",function(e){h(o.value)}),"text"==e.modules.filter.attrType&&"ie"!==this.table.browser&&o.setAttribute("type","search")),"input"!=e.modules.filter.tagType&&"select"!=e.modules.filter.tagType&&"textarea"!=e.modules.filter.tagType||o.addEventListener("mousedown",function(e){e.stopPropagation()})),n.appendChild(o),e.contentElement.appendChild(n),r||c.headerFilterColumns.push(e)}}else console.warn("Filter Error - Cannot add header filter, column has no field set:",e.definition.title)},Filter.prototype.hideHeaderFilterElements=function(){this.headerFilterColumns.forEach(function(e){e.modules.filter&&e.modules.filter.headerElement&&(e.modules.filter.headerElement.style.display="none")})},Filter.prototype.showHeaderFilterElements=function(){this.headerFilterColumns.forEach(function(e){e.modules.filter&&e.modules.filter.headerElement&&(e.modules.filter.headerElement.style.display="")})},Filter.prototype.setHeaderFilterFocus=function(e){e.modules.filter&&e.modules.filter.headerElement?e.modules.filter.headerElement.focus():console.warn("Column Filter Focus Error - No header filter set on column:",e.getField())},Filter.prototype.getHeaderFilterValue=function(e){if(e.modules.filter&&e.modules.filter.headerElement)return e.modules.filter.headerElement.value;console.warn("Column Filter Error - No header filter set on column:",e.getField())},Filter.prototype.setHeaderFilterValue=function(e,t){e&&(e.modules.filter&&e.modules.filter.headerElement?(this.generateHeaderFilterElement(e,t,!0),e.modules.filter.success(t)):console.warn("Column Filter Error - No header filter set on column:",e.getField()))},Filter.prototype.reloadHeaderFilter=function(e){e&&(e.modules.filter&&e.modules.filter.headerElement?this.generateHeaderFilterElement(e,e.modules.filter.value,!0):console.warn("Column Filter Error - No header filter set on column:",e.getField()))},Filter.prototype.hasChanged=function(){var e=this.changed;return this.changed=!1,e},Filter.prototype.setFilter=function(e,t,r,i){var n=this;n.filterList=[],Array.isArray(e)||(e=[{field:e,type:t,value:r,params:i}]),n.addFilter(e)},Filter.prototype.addFilter=function(e,t,r,i){var n=this;Array.isArray(e)||(e=[{field:e,type:t,value:r,params:i}]),e.forEach(function(e){(e=n.findFilter(e))&&(n.filterList.push(e),n.changed=!0)}),this.table.options.persistence&&this.table.modExists("persistence",!0)&&this.table.modules.persistence.config.filter&&this.table.modules.persistence.save("filter")},Filter.prototype.findFilter=function(e){var t,r=this;if(Array.isArray(e))return this.findSubFilters(e);var i=!1;return"function"==typeof e.field?i=function(t){return e.field(t,e.type||{})}:r.filters[e.type]?(t=r.table.columnManager.getColumnByField(e.field),i=t?function(i){return r.filters[e.type](e.value,t.getFieldValue(i),i,e.params||{})}:function(t){return r.filters[e.type](e.value,t[e.field],t,e.params||{})}):console.warn("Filter Error - No such filter type found, ignoring: ",e.type),e.func=i,!!e.func&&e},Filter.prototype.findSubFilters=function(e){var t=this,r=[];return e.forEach(function(e){(e=t.findFilter(e))&&r.push(e)}),!!r.length&&r},Filter.prototype.getFilters=function(e,t){var r=[];return e&&(r=this.getHeaderFilters()),t&&r.forEach(function(e){"function"==typeof e.type&&(e.type="function")}),r=r.concat(this.filtersToArray(this.filterList,t))},Filter.prototype.filtersToArray=function(e,t){var r=this,i=[];return e.forEach(function(e){var n;Array.isArray(e)?i.push(r.filtersToArray(e,t)):(n={field:e.field,type:e.type,value:e.value},t&&"function"==typeof n.type&&(n.type="function"),i.push(n))}),i},Filter.prototype.getHeaderFilters=function(){var e=[];for(var t in this.headerFilters)e.push({field:t,type:this.headerFilters[t].type,value:this.headerFilters[t].value});return e},Filter.prototype.removeFilter=function(e,t,r){var i=this;Array.isArray(e)||(e=[{field:e,type:t,value:r}]),e.forEach(function(e){var t=-1;t="object"==_typeof(e.field)?i.filterList.findIndex(function(t){return e===t}):i.filterList.findIndex(function(t){return e.field===t.field&&e.type===t.type&&e.value===t.value}),t>-1?(i.filterList.splice(t,1),i.changed=!0):console.warn("Filter Error - No matching filter type found, ignoring: ",e.type)}),this.table.options.persistence&&this.table.modExists("persistence",!0)&&this.table.modules.persistence.config.filter&&this.table.modules.persistence.save("filter")},Filter.prototype.clearFilter=function(e){this.filterList=[],e&&this.clearHeaderFilter(),this.changed=!0,this.table.options.persistence&&this.table.modExists("persistence",!0)&&this.table.modules.persistence.config.filter&&this.table.modules.persistence.save("filter")},Filter.prototype.clearHeaderFilter=function(){var e=this;this.headerFilters={},e.prevHeaderFilterChangeCheck="{}",this.headerFilterColumns.forEach(function(t){t.modules.filter.value=null,t.modules.filter.prevSuccess=void 0,e.reloadHeaderFilter(t)}),this.changed=!0},Filter.prototype.search=function(e,t,r,i){var n=this,l=[],o=[];return Array.isArray(t)||(t=[{field:t,type:r,value:i}]),t.forEach(function(e){(e=n.findFilter(e))&&o.push(e)}),this.table.rowManager.rows.forEach(function(t){var r=!0;o.forEach(function(e){n.filterRecurse(e,t.getData())||(r=!1)}),r&&l.push("data"===e?t.getData("data"):t.getComponent())}),l},Filter.prototype.filter=function(e,t){var r=this,i=[],n=[];return r.table.options.dataFiltering&&r.table.options.dataFiltering.call(r.table,r.getFilters()),r.table.options.ajaxFiltering||!r.filterList.length&&!Object.keys(r.headerFilters).length?i=e.slice(0):e.forEach(function(e){r.filterRow(e)&&i.push(e)}),r.table.options.dataFiltered&&(i.forEach(function(e){n.push(e.getComponent())}),r.table.options.dataFiltered.call(r.table,r.getFilters(),n)),i},Filter.prototype.filterRow=function(e,t){var r=this,i=!0,n=e.getData();r.filterList.forEach(function(e){r.filterRecurse(e,n)||(i=!1)});for(var l in r.headerFilters)r.headerFilters[l].func(n)||(i=!1);return i},Filter.prototype.filterRecurse=function(e,t){var r=this,i=!1;return Array.isArray(e)?e.forEach(function(e){r.filterRecurse(e,t)&&(i=!0)}):i=e.func(t),i},Filter.prototype.filters={"=":function(e,t,r,i){return t==e},"<":function(e,t,r,i){return t<e},"<=":function(e,t,r,i){return t<=e},">":function(e,t,r,i){return t>e},">=":function(e,t,r,i){return t>=e},"!=":function(e,t,r,i){return t!=e},regex:function(e,t,r,i){return"string"==typeof e&&(e=new RegExp(e)),e.test(t)},like:function(e,t,r,i){return null===e||void 0===e?t===e:void 0!==t&&null!==t&&String(t).toLowerCase().indexOf(e.toLowerCase())>-1},keywords:function(e,t,r,i){var n=e.toLowerCase().split(void 0===i.separator?" ":i.separator),l=String(null===t||void 0===t?"":t).toLowerCase(),o=[];return n.forEach(function(e){l.includes(e)&&o.push(!0)}),i.matchAll?o.length===n.length:!!o.length},starts:function(e,t,r,i){return null===e||void 0===e?t===e:void 0!==t&&null!==t&&String(t).toLowerCase().startsWith(e.toLowerCase())},ends:function(e,t,r,i){return null===e||void 0===e?t===e:void 0!==t&&null!==t&&String(t).toLowerCase().endsWith(e.toLowerCase())},in:function(e,t,r,i){return Array.isArray(e)?e.indexOf(t)>-1:(console.warn("Filter Error - filter value is not an array:",e),!1)}},Tabulator.prototype.registerModule("filter",Filter);
\ No newline at end of file
diff --git a/admin/js/vendors/tabulator/js/modules/format.js b/admin/js/vendors/tabulator/js/modules/format.js
new file mode 100644 (file)
index 0000000..5714027
--- /dev/null
@@ -0,0 +1,725 @@
+var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
+
+/* Tabulator v4.7.0 (c) Oliver Folkerd */
+
+var Format = function Format(table) {
+       this.table = table; //hold Tabulator object
+};
+
+//initialize column formatter
+Format.prototype.initializeColumn = function (column) {
+       column.modules.format = this.lookupFormatter(column, "");
+
+       if (typeof column.definition.formatterPrint !== "undefined") {
+               column.modules.format.print = this.lookupFormatter(column, "Print");
+       }
+
+       if (typeof column.definition.formatterClipboard !== "undefined") {
+               column.modules.format.clipboard = this.lookupFormatter(column, "Clipboard");
+       }
+
+       if (typeof column.definition.formatterHtmlOutput !== "undefined") {
+               column.modules.format.htmlOutput = this.lookupFormatter(column, "HtmlOutput");
+       }
+};
+
+Format.prototype.lookupFormatter = function (column, type) {
+       var config = { params: column.definition["formatter" + type + "Params"] || {} },
+           formatter = column.definition["formatter" + type];
+
+       //set column formatter
+       switch (typeof formatter === "undefined" ? "undefined" : _typeof(formatter)) {
+               case "string":
+
+                       if (formatter === "tick") {
+                               formatter = "tickCross";
+
+                               if (typeof config.params.crossElement == "undefined") {
+                                       config.params.crossElement = false;
+                               }
+
+                               console.warn("DEPRECATION WARNING - the tick formatter has been deprecated, please use the tickCross formatter with the crossElement param set to false");
+                       }
+
+                       if (this.formatters[formatter]) {
+                               config.formatter = this.formatters[formatter];
+                       } else {
+                               console.warn("Formatter Error - No such formatter found: ", formatter);
+                               config.formatter = this.formatters.plaintext;
+                       }
+                       break;
+
+               case "function":
+                       config.formatter = formatter;
+                       break;
+
+               default:
+                       config.formatter = this.formatters.plaintext;
+                       break;
+       }
+
+       return config;
+};
+
+Format.prototype.cellRendered = function (cell) {
+       if (cell.modules.format && cell.modules.format.renderedCallback) {
+               cell.modules.format.renderedCallback();
+       }
+};
+
+//return a formatted value for a cell
+Format.prototype.formatValue = function (cell) {
+       var component = cell.getComponent(),
+           params = typeof cell.column.modules.format.params === "function" ? cell.column.modules.format.params(component) : cell.column.modules.format.params;
+
+       function onRendered(callback) {
+               if (!cell.modules.format) {
+                       cell.modules.format = {};
+               }
+
+               cell.modules.format.renderedCallback = callback;
+       }
+
+       return cell.column.modules.format.formatter.call(this, component, params, onRendered);
+};
+
+Format.prototype.formatExportValue = function (cell, type) {
+       var formatter = cell.column.modules.format[type],
+           params;
+
+       if (formatter) {
+               var onRendered = function onRendered(callback) {
+                       if (!cell.modules.format) {
+                               cell.modules.format = {};
+                       }
+
+                       cell.modules.format.renderedCallback = callback;
+               };
+
+               params = typeof formatter.params === "function" ? formatter.params(component) : formatter.params;
+
+               return formatter.formatter.call(this, cell.getComponent(), params, onRendered);
+       } else {
+               return this.formatValue(cell);
+       }
+};
+
+Format.prototype.sanitizeHTML = function (value) {
+       if (value) {
+               var entityMap = {
+                       '&': '&amp;',
+                       '<': '&lt;',
+                       '>': '&gt;',
+                       '"': '&quot;',
+                       "'": '&#39;',
+                       '/': '&#x2F;',
+                       '`': '&#x60;',
+                       '=': '&#x3D;'
+               };
+
+               return String(value).replace(/[&<>"'`=\/]/g, function (s) {
+                       return entityMap[s];
+               });
+       } else {
+               return value;
+       }
+};
+
+Format.prototype.emptyToSpace = function (value) {
+       return value === null || typeof value === "undefined" || value === "" ? "&nbsp;" : value;
+};
+
+//get formatter for cell
+Format.prototype.getFormatter = function (formatter) {
+       var formatter;
+
+       switch (typeof formatter === "undefined" ? "undefined" : _typeof(formatter)) {
+               case "string":
+                       if (this.formatters[formatter]) {
+                               formatter = this.formatters[formatter];
+                       } else {
+                               console.warn("Formatter Error - No such formatter found: ", formatter);
+                               formatter = this.formatters.plaintext;
+                       }
+                       break;
+
+               case "function":
+                       formatter = formatter;
+                       break;
+
+               default:
+                       formatter = this.formatters.plaintext;
+                       break;
+       }
+
+       return formatter;
+};
+
+//default data formatters
+Format.prototype.formatters = {
+       //plain text value
+       plaintext: function plaintext(cell, formatterParams, onRendered) {
+               return this.emptyToSpace(this.sanitizeHTML(cell.getValue()));
+       },
+
+       //html text value
+       html: function html(cell, formatterParams, onRendered) {
+               return cell.getValue();
+       },
+
+       //multiline text area
+       textarea: function textarea(cell, formatterParams, onRendered) {
+               cell.getElement().style.whiteSpace = "pre-wrap";
+               return this.emptyToSpace(this.sanitizeHTML(cell.getValue()));
+       },
+
+       //currency formatting
+       money: function money(cell, formatterParams, onRendered) {
+               var floatVal = parseFloat(cell.getValue()),
+                   number,
+                   integer,
+                   decimal,
+                   rgx;
+
+               var decimalSym = formatterParams.decimal || ".";
+               var thousandSym = formatterParams.thousand || ",";
+               var symbol = formatterParams.symbol || "";
+               var after = !!formatterParams.symbolAfter;
+               var precision = typeof formatterParams.precision !== "undefined" ? formatterParams.precision : 2;
+
+               if (isNaN(floatVal)) {
+                       return this.emptyToSpace(this.sanitizeHTML(cell.getValue()));
+               }
+
+               number = precision !== false ? floatVal.toFixed(precision) : floatVal;
+               number = String(number).split(".");
+
+               integer = number[0];
+               decimal = number.length > 1 ? decimalSym + number[1] : "";
+
+               rgx = /(\d+)(\d{3})/;
+
+               while (rgx.test(integer)) {
+                       integer = integer.replace(rgx, "$1" + thousandSym + "$2");
+               }
+
+               return after ? integer + decimal + symbol : symbol + integer + decimal;
+       },
+
+       //clickable anchor tag
+       link: function link(cell, formatterParams, onRendered) {
+               var value = cell.getValue(),
+                   urlPrefix = formatterParams.urlPrefix || "",
+                   download = formatterParams.download,
+                   label = value,
+                   el = document.createElement("a"),
+                   data;
+
+               if (formatterParams.labelField) {
+                       data = cell.getData();
+                       label = data[formatterParams.labelField];
+               }
+
+               if (formatterParams.label) {
+                       switch (_typeof(formatterParams.label)) {
+                               case "string":
+                                       label = formatterParams.label;
+                                       break;
+
+                               case "function":
+                                       label = formatterParams.label(cell);
+                                       break;
+                       }
+               }
+
+               if (label) {
+                       if (formatterParams.urlField) {
+                               data = cell.getData();
+                               value = data[formatterParams.urlField];
+                       }
+
+                       if (formatterParams.url) {
+                               switch (_typeof(formatterParams.url)) {
+                                       case "string":
+                                               value = formatterParams.url;
+                                               break;
+
+                                       case "function":
+                                               value = formatterParams.url(cell);
+                                               break;
+                               }
+                       }
+
+                       el.setAttribute("href", urlPrefix + value);
+
+                       if (formatterParams.target) {
+                               el.setAttribute("target", formatterParams.target);
+                       }
+
+                       if (formatterParams.download) {
+
+                               if (typeof download == "function") {
+                                       download = download(cell);
+                               } else {
+                                       download = download === true ? "" : download;
+                               }
+
+                               el.setAttribute("download", download);
+                       }
+
+                       el.innerHTML = this.emptyToSpace(this.sanitizeHTML(label));
+
+                       return el;
+               } else {
+                       return "&nbsp;";
+               }
+       },
+
+       //image element
+       image: function image(cell, formatterParams, onRendered) {
+               var el = document.createElement("img");
+               el.setAttribute("src", cell.getValue());
+
+               switch (_typeof(formatterParams.height)) {
+                       case "number":
+                               el.style.height = formatterParams.height + "px";
+                               break;
+
+                       case "string":
+                               el.style.height = formatterParams.height;
+                               break;
+               }
+
+               switch (_typeof(formatterParams.width)) {
+                       case "number":
+                               el.style.width = formatterParams.width + "px";
+                               break;
+
+                       case "string":
+                               el.style.width = formatterParams.width;
+                               break;
+               }
+
+               el.addEventListener("load", function () {
+                       cell.getRow().normalizeHeight();
+               });
+
+               return el;
+       },
+
+       //tick or cross
+       tickCross: function tickCross(cell, formatterParams, onRendered) {
+               var value = cell.getValue(),
+                   element = cell.getElement(),
+                   empty = formatterParams.allowEmpty,
+                   truthy = formatterParams.allowTruthy,
+                   tick = typeof formatterParams.tickElement !== "undefined" ? formatterParams.tickElement : '<svg enable-background="new 0 0 24 24" height="14" width="14" viewBox="0 0 24 24" xml:space="preserve" ><path fill="#2DC214" clip-rule="evenodd" d="M21.652,3.211c-0.293-0.295-0.77-0.295-1.061,0L9.41,14.34  c-0.293,0.297-0.771,0.297-1.062,0L3.449,9.351C3.304,9.203,3.114,9.13,2.923,9.129C2.73,9.128,2.534,9.201,2.387,9.351  l-2.165,1.946C0.078,11.445,0,11.63,0,11.823c0,0.194,0.078,0.397,0.223,0.544l4.94,5.184c0.292,0.296,0.771,0.776,1.062,1.07  l2.124,2.141c0.292,0.293,0.769,0.293,1.062,0l14.366-14.34c0.293-0.294,0.293-0.777,0-1.071L21.652,3.211z" fill-rule="evenodd"/></svg>',
+                   cross = typeof formatterParams.crossElement !== "undefined" ? formatterParams.crossElement : '<svg enable-background="new 0 0 24 24" height="14" width="14"  viewBox="0 0 24 24" xml:space="preserve" ><path fill="#CE1515" d="M22.245,4.015c0.313,0.313,0.313,0.826,0,1.139l-6.276,6.27c-0.313,0.312-0.313,0.826,0,1.14l6.273,6.272  c0.313,0.313,0.313,0.826,0,1.14l-2.285,2.277c-0.314,0.312-0.828,0.312-1.142,0l-6.271-6.271c-0.313-0.313-0.828-0.313-1.141,0  l-6.276,6.267c-0.313,0.313-0.828,0.313-1.141,0l-2.282-2.28c-0.313-0.313-0.313-0.826,0-1.14l6.278-6.269  c0.313-0.312,0.313-0.826,0-1.14L1.709,5.147c-0.314-0.313-0.314-0.827,0-1.14l2.284-2.278C4.308,1.417,4.821,1.417,5.135,1.73  L11.405,8c0.314,0.314,0.828,0.314,1.141,0.001l6.276-6.267c0.312-0.312,0.826-0.312,1.141,0L22.245,4.015z"/></svg>';
+
+               if (truthy && value || value === true || value === "true" || value === "True" || value === 1 || value === "1") {
+                       element.setAttribute("aria-checked", true);
+                       return tick || "";
+               } else {
+                       if (empty && (value === "null" || value === "" || value === null || typeof value === "undefined")) {
+                               element.setAttribute("aria-checked", "mixed");
+                               return "";
+                       } else {
+                               element.setAttribute("aria-checked", false);
+                               return cross || "";
+                       }
+               }
+       },
+
+       datetime: function datetime(cell, formatterParams, onRendered) {
+               var inputFormat = formatterParams.inputFormat || "YYYY-MM-DD hh:mm:ss";
+               var outputFormat = formatterParams.outputFormat || "DD/MM/YYYY hh:mm:ss";
+               var invalid = typeof formatterParams.invalidPlaceholder !== "undefined" ? formatterParams.invalidPlaceholder : "";
+               var value = cell.getValue();
+
+               var newDatetime = moment(value, inputFormat);
+
+               if (newDatetime.isValid()) {
+                       return formatterParams.timezone ? newDatetime.tz(formatterParams.timezone).format(outputFormat) : newDatetime.format(outputFormat);
+               } else {
+
+                       if (invalid === true) {
+                               return value;
+                       } else if (typeof invalid === "function") {
+                               return invalid(value);
+                       } else {
+                               return invalid;
+                       }
+               }
+       },
+
+       datetimediff: function datetime(cell, formatterParams, onRendered) {
+               var inputFormat = formatterParams.inputFormat || "YYYY-MM-DD hh:mm:ss";
+               var invalid = typeof formatterParams.invalidPlaceholder !== "undefined" ? formatterParams.invalidPlaceholder : "";
+               var suffix = typeof formatterParams.suffix !== "undefined" ? formatterParams.suffix : false;
+               var unit = typeof formatterParams.unit !== "undefined" ? formatterParams.unit : undefined;
+               var humanize = typeof formatterParams.humanize !== "undefined" ? formatterParams.humanize : false;
+               var date = typeof formatterParams.date !== "undefined" ? formatterParams.date : moment();
+               var value = cell.getValue();
+
+               var newDatetime = moment(value, inputFormat);
+
+               if (newDatetime.isValid()) {
+                       if (humanize) {
+                               return moment.duration(newDatetime.diff(date)).humanize(suffix);
+                       } else {
+                               return newDatetime.diff(date, unit) + (suffix ? " " + suffix : "");
+                       }
+               } else {
+
+                       if (invalid === true) {
+                               return value;
+                       } else if (typeof invalid === "function") {
+                               return invalid(value);
+                       } else {
+                               return invalid;
+                       }
+               }
+       },
+
+       //select
+       lookup: function lookup(cell, formatterParams, onRendered) {
+               var value = cell.getValue();
+
+               if (typeof formatterParams[value] === "undefined") {
+                       console.warn('Missing display value for ' + value);
+                       return value;
+               }
+
+               return formatterParams[value];
+       },
+
+       //star rating
+       star: function star(cell, formatterParams, onRendered) {
+               var value = cell.getValue(),
+                   element = cell.getElement(),
+                   maxStars = formatterParams && formatterParams.stars ? formatterParams.stars : 5,
+                   stars = document.createElement("span"),
+                   star = document.createElementNS('http://www.w3.org/2000/svg', "svg"),
+                   starActive = '<polygon fill="#FFEA00" stroke="#C1AB60" stroke-width="37.6152" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" points="259.216,29.942 330.27,173.919 489.16,197.007 374.185,309.08 401.33,467.31 259.216,392.612 117.104,467.31 144.25,309.08 29.274,197.007 188.165,173.919 "/>',
+                   starInactive = '<polygon fill="#D2D2D2" stroke="#686868" stroke-width="37.6152" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" points="259.216,29.942 330.27,173.919 489.16,197.007 374.185,309.08 401.33,467.31 259.216,392.612 117.104,467.31 144.25,309.08 29.274,197.007 188.165,173.919 "/>';
+
+               //style stars holder
+               stars.style.verticalAlign = "middle";
+
+               //style star
+               star.setAttribute("width", "14");
+               star.setAttribute("height", "14");
+               star.setAttribute("viewBox", "0 0 512 512");
+               star.setAttribute("xml:space", "preserve");
+               star.style.padding = "0 1px";
+
+               value = value && !isNaN(value) ? parseInt(value) : 0;
+
+               value = Math.max(0, Math.min(value, maxStars));
+
+               for (var i = 1; i <= maxStars; i++) {
+                       var nextStar = star.cloneNode(true);
+                       nextStar.innerHTML = i <= value ? starActive : starInactive;
+
+                       stars.appendChild(nextStar);
+               }
+
+               element.style.whiteSpace = "nowrap";
+               element.style.overflow = "hidden";
+               element.style.textOverflow = "ellipsis";
+
+               element.setAttribute("aria-label", value);
+
+               return stars;
+       },
+
+       traffic: function traffic(cell, formatterParams, onRendered) {
+               var value = this.sanitizeHTML(cell.getValue()) || 0,
+                   el = document.createElement("span"),
+                   max = formatterParams && formatterParams.max ? formatterParams.max : 100,
+                   min = formatterParams && formatterParams.min ? formatterParams.min : 0,
+                   colors = formatterParams && typeof formatterParams.color !== "undefined" ? formatterParams.color : ["red", "orange", "green"],
+                   color = "#666666",
+                   percent,
+                   percentValue;
+
+               if (isNaN(value) || typeof cell.getValue() === "undefined") {
+                       return;
+               }
+
+               el.classList.add("tabulator-traffic-light");
+
+               //make sure value is in range
+               percentValue = parseFloat(value) <= max ? parseFloat(value) : max;
+               percentValue = parseFloat(percentValue) >= min ? parseFloat(percentValue) : min;
+
+               //workout percentage
+               percent = (max - min) / 100;
+               percentValue = Math.round((percentValue - min) / percent);
+
+               //set color
+               switch (typeof colors === "undefined" ? "undefined" : _typeof(colors)) {
+                       case "string":
+                               color = colors;
+                               break;
+                       case "function":
+                               color = colors(value);
+                               break;
+                       case "object":
+                               if (Array.isArray(colors)) {
+                                       var unit = 100 / colors.length;
+                                       var index = Math.floor(percentValue / unit);
+
+                                       index = Math.min(index, colors.length - 1);
+                                       index = Math.max(index, 0);
+                                       color = colors[index];
+                                       break;
+                               }
+               }
+
+               el.style.backgroundColor = color;
+
+               return el;
+       },
+
+       //progress bar
+       progress: function progress(cell, formatterParams, onRendered) {
+               //progress bar
+               var value = this.sanitizeHTML(cell.getValue()) || 0,
+                   element = cell.getElement(),
+                   max = formatterParams && formatterParams.max ? formatterParams.max : 100,
+                   min = formatterParams && formatterParams.min ? formatterParams.min : 0,
+                   legendAlign = formatterParams && formatterParams.legendAlign ? formatterParams.legendAlign : "center",
+                   percent,
+                   percentValue,
+                   color,
+                   legend,
+                   legendColor,
+                   top,
+                   left,
+                   right,
+                   bottom;
+
+               //make sure value is in range
+               percentValue = parseFloat(value) <= max ? parseFloat(value) : max;
+               percentValue = parseFloat(percentValue) >= min ? parseFloat(percentValue) : min;
+
+               //workout percentage
+               percent = (max - min) / 100;
+               percentValue = Math.round((percentValue - min) / percent);
+
+               //set bar color
+               switch (_typeof(formatterParams.color)) {
+                       case "string":
+                               color = formatterParams.color;
+                               break;
+                       case "function":
+                               color = formatterParams.color(value);
+                               break;
+                       case "object":
+                               if (Array.isArray(formatterParams.color)) {
+                                       var unit = 100 / formatterParams.color.length;
+                                       var index = Math.floor(percentValue / unit);
+
+                                       index = Math.min(index, formatterParams.color.length - 1);
+                                       index = Math.max(index, 0);
+                                       color = formatterParams.color[index];
+                                       break;
+                               }
+                       default:
+                               color = "#2DC214";
+               }
+
+               //generate legend
+               switch (_typeof(formatterParams.legend)) {
+                       case "string":
+                               legend = formatterParams.legend;
+                               break;
+                       case "function":
+                               legend = formatterParams.legend(value);
+                               break;
+                       case "boolean":
+                               legend = value;
+                               break;
+                       default:
+                               legend = false;
+               }
+
+               //set legend color
+               switch (_typeof(formatterParams.legendColor)) {
+                       case "string":
+                               legendColor = formatterParams.legendColor;
+                               break;
+                       case "function":
+                               legendColor = formatterParams.legendColor(value);
+                               break;
+                       case "object":
+                               if (Array.isArray(formatterParams.legendColor)) {
+                                       var unit = 100 / formatterParams.legendColor.length;
+                                       var index = Math.floor(percentValue / unit);
+
+                                       index = Math.min(index, formatterParams.legendColor.length - 1);
+                                       index = Math.max(index, 0);
+                                       legendColor = formatterParams.legendColor[index];
+                               }
+                               break;
+                       default:
+                               legendColor = "#000";
+               }
+
+               element.style.minWidth = "30px";
+               element.style.position = "relative";
+
+               element.setAttribute("aria-label", percentValue);
+
+               var barEl = document.createElement("div");
+               barEl.style.display = "inline-block";
+               barEl.style.position = "relative";
+               barEl.style.width = percentValue + "%";
+               barEl.style.backgroundColor = color;
+               barEl.style.height = "100%";
+
+               barEl.setAttribute('data-max', max);
+               barEl.setAttribute('data-min', min);
+
+               if (legend) {
+                       var legendEl = document.createElement("div");
+                       legendEl.style.position = "absolute";
+                       legendEl.style.top = "4px";
+                       legendEl.style.left = 0;
+                       legendEl.style.textAlign = legendAlign;
+                       legendEl.style.width = "100%";
+                       legendEl.style.color = legendColor;
+                       legendEl.innerHTML = legend;
+               }
+
+               onRendered(function () {
+
+                       //handle custom element needed if formatter is to be included in printed/downloaded output
+                       if (!(cell instanceof CellComponent)) {
+                               var holderEl = document.createElement("div");
+                               holderEl.style.position = "absolute";
+                               holderEl.style.top = "4px";
+                               holderEl.style.bottom = "4px";
+                               holderEl.style.left = "4px";
+                               holderEl.style.right = "4px";
+
+                               element.appendChild(holderEl);
+
+                               element = holderEl;
+                       }
+
+                       element.appendChild(barEl);
+
+                       if (legend) {
+                               element.appendChild(legendEl);
+                       }
+               });
+
+               return "";
+       },
+
+       //background color
+       color: function color(cell, formatterParams, onRendered) {
+               cell.getElement().style.backgroundColor = this.sanitizeHTML(cell.getValue());
+               return "";
+       },
+
+       //tick icon
+       buttonTick: function buttonTick(cell, formatterParams, onRendered) {
+               return '<svg enable-background="new 0 0 24 24" height="14" width="14" viewBox="0 0 24 24" xml:space="preserve" ><path fill="#2DC214" clip-rule="evenodd" d="M21.652,3.211c-0.293-0.295-0.77-0.295-1.061,0L9.41,14.34  c-0.293,0.297-0.771,0.297-1.062,0L3.449,9.351C3.304,9.203,3.114,9.13,2.923,9.129C2.73,9.128,2.534,9.201,2.387,9.351  l-2.165,1.946C0.078,11.445,0,11.63,0,11.823c0,0.194,0.078,0.397,0.223,0.544l4.94,5.184c0.292,0.296,0.771,0.776,1.062,1.07  l2.124,2.141c0.292,0.293,0.769,0.293,1.062,0l14.366-14.34c0.293-0.294,0.293-0.777,0-1.071L21.652,3.211z" fill-rule="evenodd"/></svg>';
+       },
+
+       //cross icon
+       buttonCross: function buttonCross(cell, formatterParams, onRendered) {
+               return '<svg enable-background="new 0 0 24 24" height="14" width="14" viewBox="0 0 24 24" xml:space="preserve" ><path fill="#CE1515" d="M22.245,4.015c0.313,0.313,0.313,0.826,0,1.139l-6.276,6.27c-0.313,0.312-0.313,0.826,0,1.14l6.273,6.272  c0.313,0.313,0.313,0.826,0,1.14l-2.285,2.277c-0.314,0.312-0.828,0.312-1.142,0l-6.271-6.271c-0.313-0.313-0.828-0.313-1.141,0  l-6.276,6.267c-0.313,0.313-0.828,0.313-1.141,0l-2.282-2.28c-0.313-0.313-0.313-0.826,0-1.14l6.278-6.269  c0.313-0.312,0.313-0.826,0-1.14L1.709,5.147c-0.314-0.313-0.314-0.827,0-1.14l2.284-2.278C4.308,1.417,4.821,1.417,5.135,1.73  L11.405,8c0.314,0.314,0.828,0.314,1.141,0.001l6.276-6.267c0.312-0.312,0.826-0.312,1.141,0L22.245,4.015z"/></svg>';
+       },
+
+       //current row number
+       rownum: function rownum(cell, formatterParams, onRendered) {
+               return this.table.rowManager.activeRows.indexOf(cell.getRow()._getSelf()) + 1;
+       },
+
+       //row handle
+       handle: function handle(cell, formatterParams, onRendered) {
+               cell.getElement().classList.add("tabulator-row-handle");
+               return "<div class='tabulator-row-handle-box'><div class='tabulator-row-handle-bar'></div><div class='tabulator-row-handle-bar'></div><div class='tabulator-row-handle-bar'></div></div>";
+       },
+
+       responsiveCollapse: function responsiveCollapse(cell, formatterParams, onRendered) {
+               var self = this,
+                   open = false,
+                   el = document.createElement("div"),
+                   config = cell.getRow()._row.modules.responsiveLayout;
+
+               el.classList.add("tabulator-responsive-collapse-toggle");
+               el.innerHTML = "<span class='tabulator-responsive-collapse-toggle-open'>+</span><span class='tabulator-responsive-collapse-toggle-close'>-</span>";
+
+               cell.getElement().classList.add("tabulator-row-handle");
+
+               function toggleList(isOpen) {
+                       var collapseEl = config.element;
+
+                       config.open = isOpen;
+
+                       if (collapseEl) {
+
+                               if (config.open) {
+                                       el.classList.add("open");
+                                       collapseEl.style.display = '';
+                               } else {
+                                       el.classList.remove("open");
+                                       collapseEl.style.display = 'none';
+                               }
+                       }
+               }
+
+               el.addEventListener("click", function (e) {
+                       e.stopImmediatePropagation();
+                       toggleList(!config.open);
+               });
+
+               toggleList(config.open);
+
+               return el;
+       },
+
+       rowSelection: function rowSelection(cell) {
+               var _this = this;
+
+               var checkbox = document.createElement("input");
+
+               checkbox.type = 'checkbox';
+
+               if (this.table.modExists("selectRow", true)) {
+
+                       checkbox.addEventListener("click", function (e) {
+                               e.stopPropagation();
+                       });
+
+                       if (typeof cell.getRow == 'function') {
+                               var row = cell.getRow();
+
+                               checkbox.addEventListener("change", function (e) {
+                                       row.toggleSelect();
+                               });
+
+                               checkbox.checked = row.isSelected();
+                               this.table.modules.selectRow.registerRowSelectCheckbox(row, checkbox);
+                       } else {
+                               checkbox.addEventListener("change", function (e) {
+                                       if (_this.table.modules.selectRow.selectedRows.length) {
+                                               _this.table.deselectRow();
+                                       } else {
+                                               _this.table.selectRow();
+                                       }
+                               });
+
+                               this.table.modules.selectRow.registerHeaderSelectCheckbox(checkbox);
+                       }
+               }
+               return checkbox;
+       }
+};
+
+Tabulator.prototype.registerModule("format", Format);
\ No newline at end of file
diff --git a/admin/js/vendors/tabulator/js/modules/format.min.js b/admin/js/vendors/tabulator/js/modules/format.min.js
new file mode 100644 (file)
index 0000000..0b39b61
--- /dev/null
@@ -0,0 +1,2 @@
+/* Tabulator v4.7.0 (c) Oliver Folkerd */
+var _typeof="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},Format=function(e){this.table=e};Format.prototype.initializeColumn=function(e){e.modules.format=this.lookupFormatter(e,""),void 0!==e.definition.formatterPrint&&(e.modules.format.print=this.lookupFormatter(e,"Print")),void 0!==e.definition.formatterClipboard&&(e.modules.format.clipboard=this.lookupFormatter(e,"Clipboard")),void 0!==e.definition.formatterHtmlOutput&&(e.modules.format.htmlOutput=this.lookupFormatter(e,"HtmlOutput"))},Format.prototype.lookupFormatter=function(e,t){var o={params:e.definition["formatter"+t+"Params"]||{}},r=e.definition["formatter"+t];switch(void 0===r?"undefined":_typeof(r)){case"string":"tick"===r&&(r="tickCross",void 0===o.params.crossElement&&(o.params.crossElement=!1),console.warn("DEPRECATION WARNING - the tick formatter has been deprecated, please use the tickCross formatter with the crossElement param set to false")),this.formatters[r]?o.formatter=this.formatters[r]:(console.warn("Formatter Error - No such formatter found: ",r),o.formatter=this.formatters.plaintext);break;case"function":o.formatter=r;break;default:o.formatter=this.formatters.plaintext}return o},Format.prototype.cellRendered=function(e){e.modules.format&&e.modules.format.renderedCallback&&e.modules.format.renderedCallback()},Format.prototype.formatValue=function(e){function t(t){e.modules.format||(e.modules.format={}),e.modules.format.renderedCallback=t}var o=e.getComponent(),r="function"==typeof e.column.modules.format.params?e.column.modules.format.params(o):e.column.modules.format.params;return e.column.modules.format.formatter.call(this,o,r,t)},Format.prototype.formatExportValue=function(e,t){var o,r=e.column.modules.format[t];if(r){var a=function(t){e.modules.format||(e.modules.format={}),e.modules.format.renderedCallback=t};return o="function"==typeof r.params?r.params(component):r.params,r.formatter.call(this,e.getComponent(),o,a)}return this.formatValue(e)},Format.prototype.sanitizeHTML=function(e){if(e){var t={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;","/":"&#x2F;","`":"&#x60;","=":"&#x3D;"};return String(e).replace(/[&<>"'`=\/]/g,function(e){return t[e]})}return e},Format.prototype.emptyToSpace=function(e){return null===e||void 0===e||""===e?"&nbsp;":e},Format.prototype.getFormatter=function(e){var e;switch(void 0===e?"undefined":_typeof(e)){case"string":this.formatters[e]?e=this.formatters[e]:(console.warn("Formatter Error - No such formatter found: ",e),e=this.formatters.plaintext);break;case"function":e=e;break;default:e=this.formatters.plaintext}return e},Format.prototype.formatters={plaintext:function(e,t,o){return this.emptyToSpace(this.sanitizeHTML(e.getValue()))},html:function(e,t,o){return e.getValue()},textarea:function(e,t,o){return e.getElement().style.whiteSpace="pre-wrap",this.emptyToSpace(this.sanitizeHTML(e.getValue()))},money:function(e,t,o){var r,a,n,l,i=parseFloat(e.getValue()),s=t.decimal||".",c=t.thousand||",",u=t.symbol||"",d=!!t.symbolAfter,m=void 0!==t.precision?t.precision:2;if(isNaN(i))return this.emptyToSpace(this.sanitizeHTML(e.getValue()));for(r=!1!==m?i.toFixed(m):i,r=String(r).split("."),a=r[0],n=r.length>1?s+r[1]:"",l=/(\d+)(\d{3})/;l.test(a);)a=a.replace(l,"$1"+c+"$2");return d?a+n+u:u+a+n},link:function(e,t,o){var r,a=e.getValue(),n=t.urlPrefix||"",l=t.download,i=a,s=document.createElement("a");if(t.labelField&&(r=e.getData(),i=r[t.labelField]),t.label)switch(_typeof(t.label)){case"string":i=t.label;break;case"function":i=t.label(e)}if(i){if(t.urlField&&(r=e.getData(),a=r[t.urlField]),t.url)switch(_typeof(t.url)){case"string":a=t.url;break;case"function":a=t.url(e)}return s.setAttribute("href",n+a),t.target&&s.setAttribute("target",t.target),t.download&&(l="function"==typeof l?l(e):!0===l?"":l,s.setAttribute("download",l)),s.innerHTML=this.emptyToSpace(this.sanitizeHTML(i)),s}return"&nbsp;"},image:function(e,t,o){var r=document.createElement("img");switch(r.setAttribute("src",e.getValue()),_typeof(t.height)){case"number":r.style.height=t.height+"px";break;case"string":r.style.height=t.height}switch(_typeof(t.width)){case"number":r.style.width=t.width+"px";break;case"string":r.style.width=t.width}return r.addEventListener("load",function(){e.getRow().normalizeHeight()}),r},tickCross:function(e,t,o){var r=e.getValue(),a=e.getElement(),n=t.allowEmpty,l=t.allowTruthy,i=void 0!==t.tickElement?t.tickElement:'<svg enable-background="new 0 0 24 24" height="14" width="14" viewBox="0 0 24 24" xml:space="preserve" ><path fill="#2DC214" clip-rule="evenodd" d="M21.652,3.211c-0.293-0.295-0.77-0.295-1.061,0L9.41,14.34  c-0.293,0.297-0.771,0.297-1.062,0L3.449,9.351C3.304,9.203,3.114,9.13,2.923,9.129C2.73,9.128,2.534,9.201,2.387,9.351  l-2.165,1.946C0.078,11.445,0,11.63,0,11.823c0,0.194,0.078,0.397,0.223,0.544l4.94,5.184c0.292,0.296,0.771,0.776,1.062,1.07  l2.124,2.141c0.292,0.293,0.769,0.293,1.062,0l14.366-14.34c0.293-0.294,0.293-0.777,0-1.071L21.652,3.211z" fill-rule="evenodd"/></svg>',s=void 0!==t.crossElement?t.crossElement:'<svg enable-background="new 0 0 24 24" height="14" width="14"  viewBox="0 0 24 24" xml:space="preserve" ><path fill="#CE1515" d="M22.245,4.015c0.313,0.313,0.313,0.826,0,1.139l-6.276,6.27c-0.313,0.312-0.313,0.826,0,1.14l6.273,6.272  c0.313,0.313,0.313,0.826,0,1.14l-2.285,2.277c-0.314,0.312-0.828,0.312-1.142,0l-6.271-6.271c-0.313-0.313-0.828-0.313-1.141,0  l-6.276,6.267c-0.313,0.313-0.828,0.313-1.141,0l-2.282-2.28c-0.313-0.313-0.313-0.826,0-1.14l6.278-6.269  c0.313-0.312,0.313-0.826,0-1.14L1.709,5.147c-0.314-0.313-0.314-0.827,0-1.14l2.284-2.278C4.308,1.417,4.821,1.417,5.135,1.73  L11.405,8c0.314,0.314,0.828,0.314,1.141,0.001l6.276-6.267c0.312-0.312,0.826-0.312,1.141,0L22.245,4.015z"/></svg>';return l&&r||!0===r||"true"===r||"True"===r||1===r||"1"===r?(a.setAttribute("aria-checked",!0),i||""):!n||"null"!==r&&""!==r&&null!==r&&void 0!==r?(a.setAttribute("aria-checked",!1),s||""):(a.setAttribute("aria-checked","mixed"),"")},datetime:function(e,t,o){var r=t.inputFormat||"YYYY-MM-DD hh:mm:ss",a=t.outputFormat||"DD/MM/YYYY hh:mm:ss",n=void 0!==t.invalidPlaceholder?t.invalidPlaceholder:"",l=e.getValue(),i=moment(l,r);return i.isValid()?t.timezone?i.tz(t.timezone).format(a):i.format(a):!0===n?l:"function"==typeof n?n(l):n},datetimediff:function(e,t,o){var r=t.inputFormat||"YYYY-MM-DD hh:mm:ss",a=void 0!==t.invalidPlaceholder?t.invalidPlaceholder:"",n=void 0!==t.suffix&&t.suffix,l=void 0!==t.unit?t.unit:void 0,i=void 0!==t.humanize&&t.humanize,s=void 0!==t.date?t.date:moment(),c=e.getValue(),u=moment(c,r);return u.isValid()?i?moment.duration(u.diff(s)).humanize(n):u.diff(s,l)+(n?" "+n:""):!0===a?c:"function"==typeof a?a(c):a},lookup:function(e,t,o){var r=e.getValue();return void 0===t[r]?(console.warn("Missing display value for "+r),r):t[r]},star:function(e,t,o){var r=e.getValue(),a=e.getElement(),n=t&&t.stars?t.stars:5,l=document.createElement("span"),i=document.createElementNS("http://www.w3.org/2000/svg","svg");l.style.verticalAlign="middle",i.setAttribute("width","14"),i.setAttribute("height","14"),i.setAttribute("viewBox","0 0 512 512"),i.setAttribute("xml:space","preserve"),i.style.padding="0 1px",r=r&&!isNaN(r)?parseInt(r):0,r=Math.max(0,Math.min(r,n));for(var s=1;s<=n;s++){var c=i.cloneNode(!0);c.innerHTML=s<=r?'<polygon fill="#FFEA00" stroke="#C1AB60" stroke-width="37.6152" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" points="259.216,29.942 330.27,173.919 489.16,197.007 374.185,309.08 401.33,467.31 259.216,392.612 117.104,467.31 144.25,309.08 29.274,197.007 188.165,173.919 "/>':'<polygon fill="#D2D2D2" stroke="#686868" stroke-width="37.6152" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" points="259.216,29.942 330.27,173.919 489.16,197.007 374.185,309.08 401.33,467.31 259.216,392.612 117.104,467.31 144.25,309.08 29.274,197.007 188.165,173.919 "/>',l.appendChild(c)}return a.style.whiteSpace="nowrap",a.style.overflow="hidden",a.style.textOverflow="ellipsis",a.setAttribute("aria-label",r),l},traffic:function(e,t,o){var r,a,n=this.sanitizeHTML(e.getValue())||0,l=document.createElement("span"),i=t&&t.max?t.max:100,s=t&&t.min?t.min:0,c=t&&void 0!==t.color?t.color:["red","orange","green"],u="#666666";if(!isNaN(n)&&void 0!==e.getValue()){switch(l.classList.add("tabulator-traffic-light"),a=parseFloat(n)<=i?parseFloat(n):i,a=parseFloat(a)>=s?parseFloat(a):s,r=(i-s)/100,a=Math.round((a-s)/r),void 0===c?"undefined":_typeof(c)){case"string":u=c;break;case"function":u=c(n);break;case"object":if(Array.isArray(c)){var d=100/c.length,m=Math.floor(a/d);m=Math.min(m,c.length-1),m=Math.max(m,0),u=c[m];break}}return l.style.backgroundColor=u,l}},progress:function(e,t,o){var r,a,n,l,i,s=this.sanitizeHTML(e.getValue())||0,c=e.getElement(),u=t&&t.max?t.max:100,d=t&&t.min?t.min:0,m=t&&t.legendAlign?t.legendAlign:"center";switch(a=parseFloat(s)<=u?parseFloat(s):u,a=parseFloat(a)>=d?parseFloat(a):d,r=(u-d)/100,a=Math.round((a-d)/r),_typeof(t.color)){case"string":n=t.color;break;case"function":n=t.color(s);break;case"object":if(Array.isArray(t.color)){var p=100/t.color.length,f=Math.floor(a/p);f=Math.min(f,t.color.length-1),f=Math.max(f,0),n=t.color[f];break}default:n="#2DC214"}switch(_typeof(t.legend)){case"string":l=t.legend;break;case"function":l=t.legend(s);break;case"boolean":l=s;break;default:l=!1}switch(_typeof(t.legendColor)){case"string":i=t.legendColor;break;case"function":i=t.legendColor(s);break;case"object":if(Array.isArray(t.legendColor)){var p=100/t.legendColor.length,f=Math.floor(a/p);f=Math.min(f,t.legendColor.length-1),f=Math.max(f,0),i=t.legendColor[f]}break;default:i="#000"}c.style.minWidth="30px",c.style.position="relative",c.setAttribute("aria-label",a);var h=document.createElement("div");if(h.style.display="inline-block",h.style.position="relative",h.style.width=a+"%",h.style.backgroundColor=n,h.style.height="100%",h.setAttribute("data-max",u),h.setAttribute("data-min",d),l){var g=document.createElement("div");g.style.position="absolute",g.style.top="4px",g.style.left=0,g.style.textAlign=m,g.style.width="100%",g.style.color=i,g.innerHTML=l}return o(function(){if(!(e instanceof CellComponent)){var t=document.createElement("div");t.style.position="absolute",t.style.top="4px",t.style.bottom="4px",t.style.left="4px",t.style.right="4px",c.appendChild(t),c=t}c.appendChild(h),l&&c.appendChild(g)}),""},color:function(e,t,o){return e.getElement().style.backgroundColor=this.sanitizeHTML(e.getValue()),""},buttonTick:function(e,t,o){return'<svg enable-background="new 0 0 24 24" height="14" width="14" viewBox="0 0 24 24" xml:space="preserve" ><path fill="#2DC214" clip-rule="evenodd" d="M21.652,3.211c-0.293-0.295-0.77-0.295-1.061,0L9.41,14.34  c-0.293,0.297-0.771,0.297-1.062,0L3.449,9.351C3.304,9.203,3.114,9.13,2.923,9.129C2.73,9.128,2.534,9.201,2.387,9.351  l-2.165,1.946C0.078,11.445,0,11.63,0,11.823c0,0.194,0.078,0.397,0.223,0.544l4.94,5.184c0.292,0.296,0.771,0.776,1.062,1.07  l2.124,2.141c0.292,0.293,0.769,0.293,1.062,0l14.366-14.34c0.293-0.294,0.293-0.777,0-1.071L21.652,3.211z" fill-rule="evenodd"/></svg>'},buttonCross:function(e,t,o){return'<svg enable-background="new 0 0 24 24" height="14" width="14" viewBox="0 0 24 24" xml:space="preserve" ><path fill="#CE1515" d="M22.245,4.015c0.313,0.313,0.313,0.826,0,1.139l-6.276,6.27c-0.313,0.312-0.313,0.826,0,1.14l6.273,6.272  c0.313,0.313,0.313,0.826,0,1.14l-2.285,2.277c-0.314,0.312-0.828,0.312-1.142,0l-6.271-6.271c-0.313-0.313-0.828-0.313-1.141,0  l-6.276,6.267c-0.313,0.313-0.828,0.313-1.141,0l-2.282-2.28c-0.313-0.313-0.313-0.826,0-1.14l6.278-6.269  c0.313-0.312,0.313-0.826,0-1.14L1.709,5.147c-0.314-0.313-0.314-0.827,0-1.14l2.284-2.278C4.308,1.417,4.821,1.417,5.135,1.73  L11.405,8c0.314,0.314,0.828,0.314,1.141,0.001l6.276-6.267c0.312-0.312,0.826-0.312,1.141,0L22.245,4.015z"/></svg>'},rownum:function(e,t,o){return this.table.rowManager.activeRows.indexOf(e.getRow()._getSelf())+1},handle:function(e,t,o){return e.getElement().classList.add("tabulator-row-handle"),"<div class='tabulator-row-handle-box'><div class='tabulator-row-handle-bar'></div><div class='tabulator-row-handle-bar'></div><div class='tabulator-row-handle-bar'></div></div>"},responsiveCollapse:function(e,t,o){function r(e){var t=n.element;n.open=e,t&&(n.open?(a.classList.add("open"),t.style.display=""):(a.classList.remove("open"),t.style.display="none"))}var a=document.createElement("div"),n=e.getRow()._row.modules.responsiveLayout;return a.classList.add("tabulator-responsive-collapse-toggle"),a.innerHTML="<span class='tabulator-responsive-collapse-toggle-open'>+</span><span class='tabulator-responsive-collapse-toggle-close'>-</span>",e.getElement().classList.add("tabulator-row-handle"),a.addEventListener("click",function(e){e.stopImmediatePropagation(),r(!n.open)}),r(n.open),a},rowSelection:function(e){var t=this,o=document.createElement("input");if(o.type="checkbox",this.table.modExists("selectRow",!0))if(o.addEventListener("click",function(e){e.stopPropagation()}),"function"==typeof e.getRow){var r=e.getRow();o.addEventListener("change",function(e){r.toggleSelect()}),o.checked=r.isSelected(),this.table.modules.selectRow.registerRowSelectCheckbox(r,o)}else o.addEventListener("change",function(e){t.table.modules.selectRow.selectedRows.length?t.table.deselectRow():t.table.selectRow()}),this.table.modules.selectRow.registerHeaderSelectCheckbox(o);return o}},Tabulator.prototype.registerModule("format",Format);
\ No newline at end of file
diff --git a/admin/js/vendors/tabulator/js/modules/frozen_columns.js b/admin/js/vendors/tabulator/js/modules/frozen_columns.js
new file mode 100644 (file)
index 0000000..fdbc4ab
--- /dev/null
@@ -0,0 +1,275 @@
+/* Tabulator v4.7.0 (c) Oliver Folkerd */
+
+var FrozenColumns = function FrozenColumns(table) {
+       this.table = table; //hold Tabulator object
+       this.leftColumns = [];
+       this.rightColumns = [];
+       this.leftMargin = 0;
+       this.rightMargin = 0;
+       this.rightPadding = 0;
+       this.initializationMode = "left";
+       this.active = false;
+       this.scrollEndTimer = false;
+};
+
+//reset initial state
+FrozenColumns.prototype.reset = function () {
+       this.initializationMode = "left";
+       this.leftColumns = [];
+       this.rightColumns = [];
+       this.leftMargin = 0;
+       this.rightMargin = 0;
+       this.rightMargin = 0;
+       this.active = false;
+
+       this.table.columnManager.headersElement.style.marginLeft = 0;
+       this.table.columnManager.element.style.paddingRight = 0;
+};
+
+//initialize specific column
+FrozenColumns.prototype.initializeColumn = function (column) {
+       var config = { margin: 0, edge: false };
+
+       if (!column.isGroup) {
+
+               if (this.frozenCheck(column)) {
+
+                       config.position = this.initializationMode;
+
+                       if (this.initializationMode == "left") {
+                               this.leftColumns.push(column);
+                       } else {
+                               this.rightColumns.unshift(column);
+                       }
+
+                       this.active = true;
+
+                       column.modules.frozen = config;
+               } else {
+                       this.initializationMode = "right";
+               }
+       }
+};
+
+FrozenColumns.prototype.frozenCheck = function (column) {
+       var frozen = false;
+
+       if (column.parent.isGroup && column.definition.frozen) {
+               console.warn("Frozen Column Error - Parent column group must be frozen, not individual columns or sub column groups");
+       }
+
+       if (column.parent.isGroup) {
+               return this.frozenCheck(column.parent);
+       } else {
+               return column.definition.frozen;
+       }
+
+       return frozen;
+};
+
+//quick layout to smooth horizontal scrolling
+FrozenColumns.prototype.scrollHorizontal = function () {
+       var _this = this;
+
+       var rows;
+
+       if (this.active) {
+               clearTimeout(this.scrollEndTimer);
+
+               //layout all rows after scroll is complete
+               this.scrollEndTimer = setTimeout(function () {
+                       _this.layout();
+               }, 100);
+
+               rows = this.table.rowManager.getVisibleRows();
+
+               this.calcMargins();
+
+               this.layoutColumnPosition();
+
+               this.layoutCalcRows();
+
+               rows.forEach(function (row) {
+                       if (row.type === "row") {
+                               _this.layoutRow(row);
+                       }
+               });
+
+               this.table.rowManager.tableElement.style.marginRight = this.rightMargin;
+       }
+};
+
+//calculate margins for rows
+FrozenColumns.prototype.calcMargins = function () {
+       this.leftMargin = this._calcSpace(this.leftColumns, this.leftColumns.length) + "px";
+       this.table.columnManager.headersElement.style.marginLeft = this.leftMargin;
+
+       this.rightMargin = this._calcSpace(this.rightColumns, this.rightColumns.length) + "px";
+       this.table.columnManager.element.style.paddingRight = this.rightMargin;
+
+       //calculate right frozen columns
+       this.rightPadding = this.table.rowManager.element.clientWidth + this.table.columnManager.scrollLeft;
+};
+
+//layout calculation rows
+FrozenColumns.prototype.layoutCalcRows = function () {
+       if (this.table.modExists("columnCalcs")) {
+               if (this.table.modules.columnCalcs.topInitialized && this.table.modules.columnCalcs.topRow) {
+                       this.layoutRow(this.table.modules.columnCalcs.topRow);
+               }
+               if (this.table.modules.columnCalcs.botInitialized && this.table.modules.columnCalcs.botRow) {
+                       this.layoutRow(this.table.modules.columnCalcs.botRow);
+               }
+       }
+};
+
+//calculate column positions and layout headers
+FrozenColumns.prototype.layoutColumnPosition = function (allCells) {
+       var _this2 = this;
+
+       var leftParents = [];
+
+       this.leftColumns.forEach(function (column, i) {
+               column.modules.frozen.margin = _this2._calcSpace(_this2.leftColumns, i) + _this2.table.columnManager.scrollLeft + "px";
+
+               if (i == _this2.leftColumns.length - 1) {
+                       column.modules.frozen.edge = true;
+               } else {
+                       column.modules.frozen.edge = false;
+               }
+
+               if (column.parent.isGroup) {
+                       var parentEl = _this2.getColGroupParentElement(column);
+                       if (!leftParents.includes(parentEl)) {
+                               _this2.layoutElement(parentEl, column);
+                               leftParents.push(parentEl);
+                       }
+
+                       if (column.modules.frozen.edge) {
+                               parentEl.classList.add("tabulator-frozen-" + column.modules.frozen.position);
+                       }
+               } else {
+                       _this2.layoutElement(column.getElement(), column);
+               }
+
+               if (allCells) {
+                       column.cells.forEach(function (cell) {
+                               _this2.layoutElement(cell.getElement(), column);
+                       });
+               }
+       });
+
+       this.rightColumns.forEach(function (column, i) {
+               column.modules.frozen.margin = _this2.rightPadding - _this2._calcSpace(_this2.rightColumns, i + 1) + "px";
+
+               if (i == _this2.rightColumns.length - 1) {
+                       column.modules.frozen.edge = true;
+               } else {
+                       column.modules.frozen.edge = false;
+               }
+
+               if (column.parent.isGroup) {
+                       _this2.layoutElement(_this2.getColGroupParentElement(column), column);
+               } else {
+                       _this2.layoutElement(column.getElement(), column);
+               }
+
+               if (allCells) {
+                       column.cells.forEach(function (cell) {
+                               _this2.layoutElement(cell.getElement(), column);
+                       });
+               }
+       });
+};
+
+FrozenColumns.prototype.getColGroupParentElement = function (column) {
+       return column.parent.isGroup ? this.getColGroupParentElement(column.parent) : column.getElement();
+};
+
+//layout columns appropropriatly
+FrozenColumns.prototype.layout = function () {
+       var self = this,
+           rightMargin = 0;
+
+       if (self.active) {
+
+               //calculate row padding
+               this.calcMargins();
+
+               // self.table.rowManager.activeRows.forEach(function(row){
+               //      self.layoutRow(row);
+               // });
+
+               // if(self.table.options.dataTree){
+               self.table.rowManager.getDisplayRows().forEach(function (row) {
+                       if (row.type === "row") {
+                               self.layoutRow(row);
+                       }
+               });
+               // }
+
+               this.layoutCalcRows();
+
+               //calculate left columns
+               this.layoutColumnPosition(true);
+
+               // if(tableHolder.scrollHeight > tableHolder.clientHeight){
+               //      rightMargin -= tableHolder.offsetWidth - tableHolder.clientWidth;
+               // }
+
+               this.table.rowManager.tableElement.style.marginRight = this.rightMargin;
+       }
+};
+
+FrozenColumns.prototype.layoutRow = function (row) {
+       var _this3 = this;
+
+       var rowEl = row.getElement();
+
+       rowEl.style.paddingLeft = this.leftMargin;
+       // rowEl.style.paddingRight = this.rightMargin + "px";
+
+       this.leftColumns.forEach(function (column) {
+               var cell = row.getCell(column);
+
+               if (cell) {
+                       _this3.layoutElement(cell.getElement(), column);
+               }
+       });
+
+       this.rightColumns.forEach(function (column) {
+               var cell = row.getCell(column);
+
+               if (cell) {
+                       _this3.layoutElement(cell.getElement(), column);
+               }
+       });
+};
+
+FrozenColumns.prototype.layoutElement = function (element, column) {
+
+       if (column.modules.frozen) {
+               element.style.position = "absolute";
+               element.style.left = column.modules.frozen.margin;
+
+               element.classList.add("tabulator-frozen");
+
+               if (column.modules.frozen.edge) {
+                       element.classList.add("tabulator-frozen-" + column.modules.frozen.position);
+               }
+       }
+};
+
+FrozenColumns.prototype._calcSpace = function (columns, index) {
+       var width = 0;
+
+       for (var i = 0; i < index; i++) {
+               if (columns[i].visible) {
+                       width += columns[i].getWidth();
+               }
+       }
+
+       return width;
+};
+
+Tabulator.prototype.registerModule("frozenColumns", FrozenColumns);
\ No newline at end of file
diff --git a/admin/js/vendors/tabulator/js/modules/frozen_columns.min.js b/admin/js/vendors/tabulator/js/modules/frozen_columns.min.js
new file mode 100644 (file)
index 0000000..bf2bb60
--- /dev/null
@@ -0,0 +1,2 @@
+/* Tabulator v4.7.0 (c) Oliver Folkerd */
+var FrozenColumns=function(t){this.table=t,this.leftColumns=[],this.rightColumns=[],this.leftMargin=0,this.rightMargin=0,this.rightPadding=0,this.initializationMode="left",this.active=!1,this.scrollEndTimer=!1};FrozenColumns.prototype.reset=function(){this.initializationMode="left",this.leftColumns=[],this.rightColumns=[],this.leftMargin=0,this.rightMargin=0,this.rightMargin=0,this.active=!1,this.table.columnManager.headersElement.style.marginLeft=0,this.table.columnManager.element.style.paddingRight=0},FrozenColumns.prototype.initializeColumn=function(t){var e={margin:0,edge:!1};t.isGroup||(this.frozenCheck(t)?(e.position=this.initializationMode,"left"==this.initializationMode?this.leftColumns.push(t):this.rightColumns.unshift(t),this.active=!0,t.modules.frozen=e):this.initializationMode="right")},FrozenColumns.prototype.frozenCheck=function(t){return t.parent.isGroup&&t.definition.frozen&&console.warn("Frozen Column Error - Parent column group must be frozen, not individual columns or sub column groups"),t.parent.isGroup?this.frozenCheck(t.parent):t.definition.frozen},FrozenColumns.prototype.scrollHorizontal=function(){var t,e=this;this.active&&(clearTimeout(this.scrollEndTimer),this.scrollEndTimer=setTimeout(function(){e.layout()},100),t=this.table.rowManager.getVisibleRows(),this.calcMargins(),this.layoutColumnPosition(),this.layoutCalcRows(),t.forEach(function(t){"row"===t.type&&e.layoutRow(t)}),this.table.rowManager.tableElement.style.marginRight=this.rightMargin)},FrozenColumns.prototype.calcMargins=function(){this.leftMargin=this._calcSpace(this.leftColumns,this.leftColumns.length)+"px",this.table.columnManager.headersElement.style.marginLeft=this.leftMargin,this.rightMargin=this._calcSpace(this.rightColumns,this.rightColumns.length)+"px",this.table.columnManager.element.style.paddingRight=this.rightMargin,this.rightPadding=this.table.rowManager.element.clientWidth+this.table.columnManager.scrollLeft},FrozenColumns.prototype.layoutCalcRows=function(){this.table.modExists("columnCalcs")&&(this.table.modules.columnCalcs.topInitialized&&this.table.modules.columnCalcs.topRow&&this.layoutRow(this.table.modules.columnCalcs.topRow),this.table.modules.columnCalcs.botInitialized&&this.table.modules.columnCalcs.botRow&&this.layoutRow(this.table.modules.columnCalcs.botRow))},FrozenColumns.prototype.layoutColumnPosition=function(t){var e=this,o=[];this.leftColumns.forEach(function(n,l){if(n.modules.frozen.margin=e._calcSpace(e.leftColumns,l)+e.table.columnManager.scrollLeft+"px",l==e.leftColumns.length-1?n.modules.frozen.edge=!0:n.modules.frozen.edge=!1,n.parent.isGroup){var i=e.getColGroupParentElement(n);o.includes(i)||(e.layoutElement(i,n),o.push(i)),n.modules.frozen.edge&&i.classList.add("tabulator-frozen-"+n.modules.frozen.position)}else e.layoutElement(n.getElement(),n);t&&n.cells.forEach(function(t){e.layoutElement(t.getElement(),n)})}),this.rightColumns.forEach(function(o,n){o.modules.frozen.margin=e.rightPadding-e._calcSpace(e.rightColumns,n+1)+"px",n==e.rightColumns.length-1?o.modules.frozen.edge=!0:o.modules.frozen.edge=!1,o.parent.isGroup?e.layoutElement(e.getColGroupParentElement(o),o):e.layoutElement(o.getElement(),o),t&&o.cells.forEach(function(t){e.layoutElement(t.getElement(),o)})})},FrozenColumns.prototype.getColGroupParentElement=function(t){return t.parent.isGroup?this.getColGroupParentElement(t.parent):t.getElement()},FrozenColumns.prototype.layout=function(){var t=this;t.active&&(this.calcMargins(),t.table.rowManager.getDisplayRows().forEach(function(e){"row"===e.type&&t.layoutRow(e)}),this.layoutCalcRows(),this.layoutColumnPosition(!0),this.table.rowManager.tableElement.style.marginRight=this.rightMargin)},FrozenColumns.prototype.layoutRow=function(t){var e=this;t.getElement().style.paddingLeft=this.leftMargin,this.leftColumns.forEach(function(o){var n=t.getCell(o);n&&e.layoutElement(n.getElement(),o)}),this.rightColumns.forEach(function(o){var n=t.getCell(o);n&&e.layoutElement(n.getElement(),o)})},FrozenColumns.prototype.layoutElement=function(t,e){e.modules.frozen&&(t.style.position="absolute",t.style.left=e.modules.frozen.margin,t.classList.add("tabulator-frozen"),e.modules.frozen.edge&&t.classList.add("tabulator-frozen-"+e.modules.frozen.position))},FrozenColumns.prototype._calcSpace=function(t,e){for(var o=0,n=0;n<e;n++)t[n].visible&&(o+=t[n].getWidth());return o},Tabulator.prototype.registerModule("frozenColumns",FrozenColumns);
\ No newline at end of file
diff --git a/admin/js/vendors/tabulator/js/modules/frozen_rows.js b/admin/js/vendors/tabulator/js/modules/frozen_rows.js
new file mode 100644 (file)
index 0000000..42dd3e5
--- /dev/null
@@ -0,0 +1,98 @@
+/* Tabulator v4.7.0 (c) Oliver Folkerd */
+
+var FrozenRows = function FrozenRows(table) {
+       this.table = table; //hold Tabulator object
+       this.topElement = document.createElement("div");
+       this.rows = [];
+       this.displayIndex = 0; //index in display pipeline
+};
+
+FrozenRows.prototype.initialize = function () {
+       this.rows = [];
+
+       this.topElement.classList.add("tabulator-frozen-rows-holder");
+
+       // this.table.columnManager.element.append(this.topElement);
+       this.table.columnManager.getElement().insertBefore(this.topElement, this.table.columnManager.headersElement.nextSibling);
+};
+
+FrozenRows.prototype.setDisplayIndex = function (index) {
+       this.displayIndex = index;
+};
+
+FrozenRows.prototype.getDisplayIndex = function () {
+       return this.displayIndex;
+};
+
+FrozenRows.prototype.isFrozen = function () {
+       return !!this.rows.length;
+};
+
+//filter frozen rows out of display data
+FrozenRows.prototype.getRows = function (rows) {
+       var self = this,
+           frozen = [],
+           output = rows.slice(0);
+
+       this.rows.forEach(function (row) {
+               var index = output.indexOf(row);
+
+               if (index > -1) {
+                       output.splice(index, 1);
+               }
+       });
+
+       return output;
+};
+
+FrozenRows.prototype.freezeRow = function (row) {
+       if (!row.modules.frozen) {
+               row.modules.frozen = true;
+               this.topElement.appendChild(row.getElement());
+               row.initialize();
+               row.normalizeHeight();
+               this.table.rowManager.adjustTableSize();
+
+               this.rows.push(row);
+
+               this.table.rowManager.refreshActiveData("display");
+
+               this.styleRows();
+       } else {
+               console.warn("Freeze Error - Row is already frozen");
+       }
+};
+
+FrozenRows.prototype.unfreezeRow = function (row) {
+       var index = this.rows.indexOf(row);
+
+       if (row.modules.frozen) {
+
+               row.modules.frozen = false;
+
+               var rowEl = row.getElement();
+               rowEl.parentNode.removeChild(rowEl);
+
+               this.table.rowManager.adjustTableSize();
+
+               this.rows.splice(index, 1);
+
+               this.table.rowManager.refreshActiveData("display");
+
+               if (this.rows.length) {
+                       this.styleRows();
+               }
+       } else {
+               console.warn("Freeze Error - Row is already unfrozen");
+       }
+};
+
+FrozenRows.prototype.styleRows = function (row) {
+       var self = this;
+
+       this.rows.forEach(function (row, i) {
+               self.table.rowManager.styleRow(row, i);
+       });
+};
+
+Tabulator.prototype.registerModule("frozenRows", FrozenRows);
\ No newline at end of file
diff --git a/admin/js/vendors/tabulator/js/modules/frozen_rows.min.js b/admin/js/vendors/tabulator/js/modules/frozen_rows.min.js
new file mode 100644 (file)
index 0000000..c38e992
--- /dev/null
@@ -0,0 +1,2 @@
+/* Tabulator v4.7.0 (c) Oliver Folkerd */
+var FrozenRows=function(e){this.table=e,this.topElement=document.createElement("div"),this.rows=[],this.displayIndex=0};FrozenRows.prototype.initialize=function(){this.rows=[],this.topElement.classList.add("tabulator-frozen-rows-holder"),this.table.columnManager.getElement().insertBefore(this.topElement,this.table.columnManager.headersElement.nextSibling)},FrozenRows.prototype.setDisplayIndex=function(e){this.displayIndex=e},FrozenRows.prototype.getDisplayIndex=function(){return this.displayIndex},FrozenRows.prototype.isFrozen=function(){return!!this.rows.length},FrozenRows.prototype.getRows=function(e){var o=e.slice(0);return this.rows.forEach(function(e){var t=o.indexOf(e);t>-1&&o.splice(t,1)}),o},FrozenRows.prototype.freezeRow=function(e){e.modules.frozen?console.warn("Freeze Error - Row is already frozen"):(e.modules.frozen=!0,this.topElement.appendChild(e.getElement()),e.initialize(),e.normalizeHeight(),this.table.rowManager.adjustTableSize(),this.rows.push(e),this.table.rowManager.refreshActiveData("display"),this.styleRows())},FrozenRows.prototype.unfreezeRow=function(e){var o=this.rows.indexOf(e);if(e.modules.frozen){e.modules.frozen=!1;var t=e.getElement();t.parentNode.removeChild(t),this.table.rowManager.adjustTableSize(),this.rows.splice(o,1),this.table.rowManager.refreshActiveData("display"),this.rows.length&&this.styleRows()}else console.warn("Freeze Error - Row is already unfrozen")},FrozenRows.prototype.styleRows=function(e){var o=this;this.rows.forEach(function(e,t){o.table.rowManager.styleRow(e,t)})},Tabulator.prototype.registerModule("frozenRows",FrozenRows);
\ No newline at end of file
diff --git a/admin/js/vendors/tabulator/js/modules/group_rows.js b/admin/js/vendors/tabulator/js/modules/group_rows.js
new file mode 100644 (file)
index 0000000..05731ec
--- /dev/null
@@ -0,0 +1,1087 @@
+/* Tabulator v4.7.0 (c) Oliver Folkerd */
+
+//public group object
+var GroupComponent = function GroupComponent(group) {
+       this._group = group;
+       this.type = "GroupComponent";
+};
+
+GroupComponent.prototype.getKey = function () {
+       return this._group.key;
+};
+
+GroupComponent.prototype.getField = function () {
+       return this._group.field;
+};
+
+GroupComponent.prototype.getElement = function () {
+       return this._group.element;
+};
+
+GroupComponent.prototype.getRows = function () {
+       return this._group.getRows(true);
+};
+
+GroupComponent.prototype.getSubGroups = function () {
+       return this._group.getSubGroups(true);
+};
+
+GroupComponent.prototype.getParentGroup = function () {
+       return this._group.parent ? this._group.parent.getComponent() : false;
+};
+
+GroupComponent.prototype.getVisibility = function () {
+       console.warn("getVisibility function is deprecated, you should now use the isVisible function");
+       return this._group.visible;
+};
+
+GroupComponent.prototype.isVisible = function () {
+       return this._group.visible;
+};
+
+GroupComponent.prototype.show = function () {
+       this._group.show();
+};
+
+GroupComponent.prototype.hide = function () {
+       this._group.hide();
+};
+
+GroupComponent.prototype.toggle = function () {
+       this._group.toggleVisibility();
+};
+
+GroupComponent.prototype._getSelf = function () {
+       return this._group;
+};
+
+GroupComponent.prototype.getTable = function () {
+       return this._group.groupManager.table;
+};
+
+//////////////////////////////////////////////////
+//////////////// Group Functions /////////////////
+//////////////////////////////////////////////////
+
+var Group = function Group(groupManager, parent, level, key, field, generator, oldGroup) {
+
+       this.groupManager = groupManager;
+       this.parent = parent;
+       this.key = key;
+       this.level = level;
+       this.field = field;
+       this.hasSubGroups = level < groupManager.groupIDLookups.length - 1;
+       this.addRow = this.hasSubGroups ? this._addRowToGroup : this._addRow;
+       this.type = "group"; //type of element
+       this.old = oldGroup;
+       this.rows = [];
+       this.groups = [];
+       this.groupList = [];
+       this.generator = generator;
+       this.elementContents = false;
+       this.height = 0;
+       this.outerHeight = 0;
+       this.initialized = false;
+       this.calcs = {};
+       this.initialized = false;
+       this.modules = {};
+       this.arrowElement = false;
+
+       this.visible = oldGroup ? oldGroup.visible : typeof groupManager.startOpen[level] !== "undefined" ? groupManager.startOpen[level] : groupManager.startOpen[0];
+
+       this.component = null;
+
+       this.createElements();
+       this.addBindings();
+
+       this.createValueGroups();
+};
+
+Group.prototype.wipe = function () {
+       if (this.groupList.length) {
+               this.groupList.forEach(function (group) {
+                       group.wipe();
+               });
+       } else {
+               this.element = false;
+               this.arrowElement = false;
+               this.elementContents = false;
+       }
+};
+
+Group.prototype.createElements = function () {
+       var arrow = document.createElement("div");
+       arrow.classList.add("tabulator-arrow");
+
+       this.element = document.createElement("div");
+       this.element.classList.add("tabulator-row");
+       this.element.classList.add("tabulator-group");
+       this.element.classList.add("tabulator-group-level-" + this.level);
+       this.element.setAttribute("role", "rowgroup");
+
+       this.arrowElement = document.createElement("div");
+       this.arrowElement.classList.add("tabulator-group-toggle");
+       this.arrowElement.appendChild(arrow);
+
+       //setup movable rows
+       if (this.groupManager.table.options.movableRows !== false && this.groupManager.table.modExists("moveRow")) {
+               this.groupManager.table.modules.moveRow.initializeGroupHeader(this);
+       }
+};
+
+Group.prototype.createValueGroups = function () {
+       var _this = this;
+
+       var level = this.level + 1;
+       if (this.groupManager.allowedValues && this.groupManager.allowedValues[level]) {
+               this.groupManager.allowedValues[level].forEach(function (value) {
+                       _this._createGroup(value, level);
+               });
+       }
+};
+
+Group.prototype.addBindings = function () {
+       var self = this,
+           dblTap,
+           tapHold,
+           tap,
+           toggleElement;
+
+       //handle group click events
+       if (self.groupManager.table.options.groupClick) {
+               self.element.addEventListener("click", function (e) {
+                       self.groupManager.table.options.groupClick.call(self.groupManager.table, e, self.getComponent());
+               });
+       }
+
+       if (self.groupManager.table.options.groupDblClick) {
+               self.element.addEventListener("dblclick", function (e) {
+                       self.groupManager.table.options.groupDblClick.call(self.groupManager.table, e, self.getComponent());
+               });
+       }
+
+       if (self.groupManager.table.options.groupContext) {
+               self.element.addEventListener("contextmenu", function (e) {
+                       self.groupManager.table.options.groupContext.call(self.groupManager.table, e, self.getComponent());
+               });
+       }
+
+       if (self.groupManager.table.options.groupContextMenu && self.groupManager.table.modExists("menu")) {
+               self.groupManager.table.modules.menu.initializeGroup.call(self.groupManager.table.modules.menu, self);
+       }
+
+       if (self.groupManager.table.options.groupTap) {
+
+               tap = false;
+
+               self.element.addEventListener("touchstart", function (e) {
+                       tap = true;
+               }, { passive: true });
+
+               self.element.addEventListener("touchend", function (e) {
+                       if (tap) {
+                               self.groupManager.table.options.groupTap(e, self.getComponent());
+                       }
+
+                       tap = false;
+               });
+       }
+
+       if (self.groupManager.table.options.groupDblTap) {
+
+               dblTap = null;
+
+               self.element.addEventListener("touchend", function (e) {
+
+                       if (dblTap) {
+                               clearTimeout(dblTap);
+                               dblTap = null;
+
+                               self.groupManager.table.options.groupDblTap(e, self.getComponent());
+                       } else {
+
+                               dblTap = setTimeout(function () {
+                                       clearTimeout(dblTap);
+                                       dblTap = null;
+                               }, 300);
+                       }
+               });
+       }
+
+       if (self.groupManager.table.options.groupTapHold) {
+
+               tapHold = null;
+
+               self.element.addEventListener("touchstart", function (e) {
+                       clearTimeout(tapHold);
+
+                       tapHold = setTimeout(function () {
+                               clearTimeout(tapHold);
+                               tapHold = null;
+                               tap = false;
+                               self.groupManager.table.options.groupTapHold(e, self.getComponent());
+                       }, 1000);
+               }, { passive: true });
+
+               self.element.addEventListener("touchend", function (e) {
+                       clearTimeout(tapHold);
+                       tapHold = null;
+               });
+       }
+
+       if (self.groupManager.table.options.groupToggleElement) {
+               toggleElement = self.groupManager.table.options.groupToggleElement == "arrow" ? self.arrowElement : self.element;
+
+               toggleElement.addEventListener("click", function (e) {
+                       e.stopPropagation();
+                       e.stopImmediatePropagation();
+                       self.toggleVisibility();
+               });
+       }
+};
+
+Group.prototype._createGroup = function (groupID, level) {
+       var groupKey = level + "_" + groupID;
+       var group = new Group(this.groupManager, this, level, groupID, this.groupManager.groupIDLookups[level].field, this.groupManager.headerGenerator[level] || this.groupManager.headerGenerator[0], this.old ? this.old.groups[groupKey] : false);
+
+       this.groups[groupKey] = group;
+       this.groupList.push(group);
+};
+
+Group.prototype._addRowToGroup = function (row) {
+
+       var level = this.level + 1;
+
+       if (this.hasSubGroups) {
+               var groupID = this.groupManager.groupIDLookups[level].func(row.getData()),
+                   groupKey = level + "_" + groupID;
+
+               if (this.groupManager.allowedValues && this.groupManager.allowedValues[level]) {
+                       if (this.groups[groupKey]) {
+                               this.groups[groupKey].addRow(row);
+                       }
+               } else {
+                       if (!this.groups[groupKey]) {
+                               this._createGroup(groupID, level);
+                       }
+
+                       this.groups[groupKey].addRow(row);
+               }
+       }
+};
+
+Group.prototype._addRow = function (row) {
+       this.rows.push(row);
+       row.modules.group = this;
+};
+
+Group.prototype.insertRow = function (row, to, after) {
+       var data = this.conformRowData({});
+
+       row.updateData(data);
+
+       var toIndex = this.rows.indexOf(to);
+
+       if (toIndex > -1) {
+               if (after) {
+                       this.rows.splice(toIndex + 1, 0, row);
+               } else {
+                       this.rows.splice(toIndex, 0, row);
+               }
+       } else {
+               if (after) {
+                       this.rows.push(row);
+               } else {
+                       this.rows.unshift(row);
+               }
+       }
+
+       row.modules.group = this;
+
+       this.generateGroupHeaderContents();
+
+       if (this.groupManager.table.modExists("columnCalcs") && this.groupManager.table.options.columnCalcs != "table") {
+               this.groupManager.table.modules.columnCalcs.recalcGroup(this);
+       }
+
+       this.groupManager.updateGroupRows(true);
+};
+
+Group.prototype.scrollHeader = function (left) {
+       this.arrowElement.style.marginLeft = left;
+
+       this.groupList.forEach(function (child) {
+               child.scrollHeader(left);
+       });
+};
+
+Group.prototype.getRowIndex = function (row) {};
+
+//update row data to match grouping contraints
+Group.prototype.conformRowData = function (data) {
+       if (this.field) {
+               data[this.field] = this.key;
+       } else {
+               console.warn("Data Conforming Error - Cannot conform row data to match new group as groupBy is a function");
+       }
+
+       if (this.parent) {
+               data = this.parent.conformRowData(data);
+       }
+
+       return data;
+};
+
+Group.prototype.removeRow = function (row) {
+       var index = this.rows.indexOf(row);
+       var el = row.getElement();
+
+       if (index > -1) {
+               this.rows.splice(index, 1);
+       }
+
+       if (!this.groupManager.table.options.groupValues && !this.rows.length) {
+               if (this.parent) {
+                       this.parent.removeGroup(this);
+               } else {
+                       this.groupManager.removeGroup(this);
+               }
+
+               this.groupManager.updateGroupRows(true);
+       } else {
+
+               if (el.parentNode) {
+                       el.parentNode.removeChild(el);
+               }
+
+               this.generateGroupHeaderContents();
+
+               if (this.groupManager.table.modExists("columnCalcs") && this.groupManager.table.options.columnCalcs != "table") {
+                       this.groupManager.table.modules.columnCalcs.recalcGroup(this);
+               }
+       }
+};
+
+Group.prototype.removeGroup = function (group) {
+       var groupKey = group.level + "_" + group.key,
+           index;
+
+       if (this.groups[groupKey]) {
+               delete this.groups[groupKey];
+
+               index = this.groupList.indexOf(group);
+
+               if (index > -1) {
+                       this.groupList.splice(index, 1);
+               }
+
+               if (!this.groupList.length) {
+                       if (this.parent) {
+                               this.parent.removeGroup(this);
+                       } else {
+                               this.groupManager.removeGroup(this);
+                       }
+               }
+       }
+};
+
+Group.prototype.getHeadersAndRows = function (noCalc) {
+       var output = [];
+
+       output.push(this);
+
+       this._visSet();
+
+       if (this.visible) {
+               if (this.groupList.length) {
+                       this.groupList.forEach(function (group) {
+                               output = output.concat(group.getHeadersAndRows(noCalc));
+                       });
+               } else {
+                       if (!noCalc && this.groupManager.table.options.columnCalcs != "table" && this.groupManager.table.modExists("columnCalcs") && this.groupManager.table.modules.columnCalcs.hasTopCalcs()) {
+                               if (this.calcs.top) {
+                                       this.calcs.top.detachElement();
+                                       this.calcs.top.deleteCells();
+                               }
+
+                               this.calcs.top = this.groupManager.table.modules.columnCalcs.generateTopRow(this.rows);
+                               output.push(this.calcs.top);
+                       }
+
+                       output = output.concat(this.rows);
+
+                       if (!noCalc && this.groupManager.table.options.columnCalcs != "table" && this.groupManager.table.modExists("columnCalcs") && this.groupManager.table.modules.columnCalcs.hasBottomCalcs()) {
+                               if (this.calcs.bottom) {
+                                       this.calcs.bottom.detachElement();
+                                       this.calcs.bottom.deleteCells();
+                               }
+
+                               this.calcs.bottom = this.groupManager.table.modules.columnCalcs.generateBottomRow(this.rows);
+                               output.push(this.calcs.bottom);
+                       }
+               }
+       } else {
+               if (!this.groupList.length && this.groupManager.table.options.columnCalcs != "table") {
+
+                       if (this.groupManager.table.modExists("columnCalcs")) {
+
+                               if (!noCalc && this.groupManager.table.modules.columnCalcs.hasTopCalcs()) {
+                                       if (this.calcs.top) {
+                                               this.calcs.top.detachElement();
+                                               this.calcs.top.deleteCells();
+                                       }
+
+                                       if (this.groupManager.table.options.groupClosedShowCalcs) {
+                                               this.calcs.top = this.groupManager.table.modules.columnCalcs.generateTopRow(this.rows);
+                                               output.push(this.calcs.top);
+                                       }
+                               }
+
+                               if (!noCalc && this.groupManager.table.modules.columnCalcs.hasBottomCalcs()) {
+                                       if (this.calcs.bottom) {
+                                               this.calcs.bottom.detachElement();
+                                               this.calcs.bottom.deleteCells();
+                                       }
+
+                                       if (this.groupManager.table.options.groupClosedShowCalcs) {
+                                               this.calcs.bottom = this.groupManager.table.modules.columnCalcs.generateBottomRow(this.rows);
+                                               output.push(this.calcs.bottom);
+                                       }
+                               }
+                       }
+               }
+       }
+
+       return output;
+};
+
+Group.prototype.getData = function (visible, transform) {
+       var self = this,
+           output = [];
+
+       this._visSet();
+
+       if (!visible || visible && this.visible) {
+               this.rows.forEach(function (row) {
+                       output.push(row.getData(transform || "data"));
+               });
+       }
+
+       return output;
+};
+
+// Group.prototype.getRows = function(){
+//     this._visSet();
+
+//     return this.visible ? this.rows : [];
+// };
+
+Group.prototype.getRowCount = function () {
+       var count = 0;
+
+       if (this.groupList.length) {
+               this.groupList.forEach(function (group) {
+                       count += group.getRowCount();
+               });
+       } else {
+               count = this.rows.length;
+       }
+       return count;
+};
+
+Group.prototype.toggleVisibility = function () {
+       if (this.visible) {
+               this.hide();
+       } else {
+               this.show();
+       }
+};
+
+Group.prototype.hide = function () {
+       this.visible = false;
+
+       if (this.groupManager.table.rowManager.getRenderMode() == "classic" && !this.groupManager.table.options.pagination) {
+
+               this.element.classList.remove("tabulator-group-visible");
+
+               if (this.groupList.length) {
+                       this.groupList.forEach(function (group) {
+
+                               var rows = group.getHeadersAndRows();
+
+                               rows.forEach(function (row) {
+                                       row.detachElement();
+                               });
+                       });
+               } else {
+                       this.rows.forEach(function (row) {
+                               var rowEl = row.getElement();
+                               rowEl.parentNode.removeChild(rowEl);
+                       });
+               }
+
+               this.groupManager.table.rowManager.setDisplayRows(this.groupManager.updateGroupRows(), this.groupManager.getDisplayIndex());
+
+               this.groupManager.table.rowManager.checkClassicModeGroupHeaderWidth();
+       } else {
+               this.groupManager.updateGroupRows(true);
+       }
+
+       this.groupManager.table.options.groupVisibilityChanged.call(this.table, this.getComponent(), false);
+};
+
+Group.prototype.show = function () {
+       var self = this;
+
+       self.visible = true;
+
+       if (this.groupManager.table.rowManager.getRenderMode() == "classic" && !this.groupManager.table.options.pagination) {
+
+               this.element.classList.add("tabulator-group-visible");
+
+               var prev = self.getElement();
+
+               if (this.groupList.length) {
+                       this.groupList.forEach(function (group) {
+                               var rows = group.getHeadersAndRows();
+
+                               rows.forEach(function (row) {
+                                       var rowEl = row.getElement();
+                                       prev.parentNode.insertBefore(rowEl, prev.nextSibling);
+                                       row.initialize();
+                                       prev = rowEl;
+                               });
+                       });
+               } else {
+                       self.rows.forEach(function (row) {
+                               var rowEl = row.getElement();
+                               prev.parentNode.insertBefore(rowEl, prev.nextSibling);
+                               row.initialize();
+                               prev = rowEl;
+                       });
+               }
+
+               this.groupManager.table.rowManager.setDisplayRows(this.groupManager.updateGroupRows(), this.groupManager.getDisplayIndex());
+
+               this.groupManager.table.rowManager.checkClassicModeGroupHeaderWidth();
+       } else {
+               this.groupManager.updateGroupRows(true);
+       }
+
+       this.groupManager.table.options.groupVisibilityChanged.call(this.table, this.getComponent(), true);
+};
+
+Group.prototype._visSet = function () {
+       var data = [];
+
+       if (typeof this.visible == "function") {
+
+               this.rows.forEach(function (row) {
+                       data.push(row.getData());
+               });
+
+               this.visible = this.visible(this.key, this.getRowCount(), data, this.getComponent());
+       }
+};
+
+Group.prototype.getRowGroup = function (row) {
+       var match = false;
+       if (this.groupList.length) {
+               this.groupList.forEach(function (group) {
+                       var result = group.getRowGroup(row);
+
+                       if (result) {
+                               match = result;
+                       }
+               });
+       } else {
+               if (this.rows.find(function (item) {
+                       return item === row;
+               })) {
+                       match = this;
+               }
+       }
+
+       return match;
+};
+
+Group.prototype.getSubGroups = function (component) {
+       var output = [];
+
+       this.groupList.forEach(function (child) {
+               output.push(component ? child.getComponent() : child);
+       });
+
+       return output;
+};
+
+Group.prototype.getRows = function (compoment) {
+       var output = [];
+
+       this.rows.forEach(function (row) {
+               output.push(compoment ? row.getComponent() : row);
+       });
+
+       return output;
+};
+
+Group.prototype.generateGroupHeaderContents = function () {
+       var data = [];
+
+       this.rows.forEach(function (row) {
+               data.push(row.getData());
+       });
+
+       this.elementContents = this.generator(this.key, this.getRowCount(), data, this.getComponent());
+
+       while (this.element.firstChild) {
+               this.element.removeChild(this.element.firstChild);
+       }if (typeof this.elementContents === "string") {
+               this.element.innerHTML = this.elementContents;
+       } else {
+               this.element.appendChild(this.elementContents);
+       }
+
+       this.element.insertBefore(this.arrowElement, this.element.firstChild);
+};
+
+////////////// Standard Row Functions //////////////
+
+Group.prototype.getElement = function () {
+       this.addBindingsd = false;
+
+       this._visSet();
+
+       if (this.visible) {
+               this.element.classList.add("tabulator-group-visible");
+       } else {
+               this.element.classList.remove("tabulator-group-visible");
+       }
+
+       for (var i = 0; i < this.element.childNodes.length; ++i) {
+               this.element.childNodes[i].parentNode.removeChild(this.element.childNodes[i]);
+       }
+
+       this.generateGroupHeaderContents();
+
+       // this.addBindings();
+
+       return this.element;
+};
+
+Group.prototype.detachElement = function () {
+       if (this.element && this.element.parentNode) {
+               this.element.parentNode.removeChild(this.element);
+       }
+};
+
+//normalize the height of elements in the row
+Group.prototype.normalizeHeight = function () {
+       this.setHeight(this.element.clientHeight);
+};
+
+Group.prototype.initialize = function (force) {
+       if (!this.initialized || force) {
+               this.normalizeHeight();
+               this.initialized = true;
+       }
+};
+
+Group.prototype.reinitialize = function () {
+       this.initialized = false;
+       this.height = 0;
+
+       if (Tabulator.prototype.helpers.elVisible(this.element)) {
+               this.initialize(true);
+       }
+};
+
+Group.prototype.setHeight = function (height) {
+       if (this.height != height) {
+               this.height = height;
+               this.outerHeight = this.element.offsetHeight;
+       }
+};
+
+//return rows outer height
+Group.prototype.getHeight = function () {
+       return this.outerHeight;
+};
+
+Group.prototype.getGroup = function () {
+       return this;
+};
+
+Group.prototype.reinitializeHeight = function () {};
+Group.prototype.calcHeight = function () {};
+Group.prototype.setCellHeight = function () {};
+Group.prototype.clearCellHeight = function () {};
+
+//////////////// Object Generation /////////////////
+Group.prototype.getComponent = function () {
+       if (!this.component) {
+               this.component = new GroupComponent(this);
+       }
+
+       return this.component;
+};
+
+//////////////////////////////////////////////////
+////////////// Group Row Extension ///////////////
+//////////////////////////////////////////////////
+
+var GroupRows = function GroupRows(table) {
+
+       this.table = table; //hold Tabulator object
+
+       this.groupIDLookups = false; //enable table grouping and set field to group by
+       this.startOpen = [function () {
+               return false;
+       }]; //starting state of group
+       this.headerGenerator = [function () {
+               return "";
+       }];
+       this.groupList = []; //ordered list of groups
+       this.allowedValues = false;
+       this.groups = {}; //hold row groups
+       this.displayIndex = 0; //index in display pipeline
+};
+
+//initialize group configuration
+GroupRows.prototype.initialize = function () {
+       var self = this,
+           groupBy = self.table.options.groupBy,
+           startOpen = self.table.options.groupStartOpen,
+           groupHeader = self.table.options.groupHeader;
+
+       this.allowedValues = self.table.options.groupValues;
+
+       if (Array.isArray(groupBy) && Array.isArray(groupHeader) && groupBy.length > groupHeader.length) {
+               console.warn("Error creating group headers, groupHeader array is shorter than groupBy array");
+       }
+
+       self.headerGenerator = [function () {
+               return "";
+       }];
+       this.startOpen = [function () {
+               return false;
+       }]; //starting state of group
+
+       self.table.modules.localize.bind("groups|item", function (langValue, lang) {
+               self.headerGenerator[0] = function (value, count, data) {
+                       //header layout function
+                       return (typeof value === "undefined" ? "" : value) + "<span>(" + count + " " + (count === 1 ? langValue : lang.groups.items) + ")</span>";
+               };
+       });
+
+       this.groupIDLookups = [];
+
+       if (Array.isArray(groupBy) || groupBy) {
+               if (this.table.modExists("columnCalcs") && this.table.options.columnCalcs != "table" && this.table.options.columnCalcs != "both") {
+                       this.table.modules.columnCalcs.removeCalcs();
+               }
+       } else {
+               if (this.table.modExists("columnCalcs") && this.table.options.columnCalcs != "group") {
+
+                       var cols = this.table.columnManager.getRealColumns();
+
+                       cols.forEach(function (col) {
+                               if (col.definition.topCalc) {
+                                       self.table.modules.columnCalcs.initializeTopRow();
+                               }
+
+                               if (col.definition.bottomCalc) {
+                                       self.table.modules.columnCalcs.initializeBottomRow();
+                               }
+                       });
+               }
+       }
+
+       if (!Array.isArray(groupBy)) {
+               groupBy = [groupBy];
+       }
+
+       groupBy.forEach(function (group, i) {
+               var lookupFunc, column;
+
+               if (typeof group == "function") {
+                       lookupFunc = group;
+               } else {
+                       column = self.table.columnManager.getColumnByField(group);
+
+                       if (column) {
+                               lookupFunc = function lookupFunc(data) {
+                                       return column.getFieldValue(data);
+                               };
+                       } else {
+                               lookupFunc = function lookupFunc(data) {
+                                       return data[group];
+                               };
+                       }
+               }
+
+               self.groupIDLookups.push({
+                       field: typeof group === "function" ? false : group,
+                       func: lookupFunc,
+                       values: self.allowedValues ? self.allowedValues[i] : false
+               });
+       });
+
+       if (startOpen) {
+
+               if (!Array.isArray(startOpen)) {
+                       startOpen = [startOpen];
+               }
+
+               startOpen.forEach(function (level) {
+                       level = typeof level == "function" ? level : function () {
+                               return true;
+                       };
+               });
+
+               self.startOpen = startOpen;
+       }
+
+       if (groupHeader) {
+               self.headerGenerator = Array.isArray(groupHeader) ? groupHeader : [groupHeader];
+       }
+
+       this.initialized = true;
+};
+
+GroupRows.prototype.setDisplayIndex = function (index) {
+       this.displayIndex = index;
+};
+
+GroupRows.prototype.getDisplayIndex = function () {
+       return this.displayIndex;
+};
+
+//return appropriate rows with group headers
+GroupRows.prototype.getRows = function (rows) {
+       if (this.groupIDLookups.length) {
+
+               this.table.options.dataGrouping.call(this.table);
+
+               this.generateGroups(rows);
+
+               if (this.table.options.dataGrouped) {
+                       this.table.options.dataGrouped.call(this.table, this.getGroups(true));
+               }
+
+               return this.updateGroupRows();
+       } else {
+               return rows.slice(0);
+       }
+};
+
+GroupRows.prototype.getGroups = function (compoment) {
+       var groupComponents = [];
+
+       this.groupList.forEach(function (group) {
+               groupComponents.push(compoment ? group.getComponent() : group);
+       });
+
+       return groupComponents;
+};
+
+GroupRows.prototype.getChildGroups = function (group) {
+       var _this2 = this;
+
+       var groupComponents = [];
+
+       if (!group) {
+               group = this;
+       }
+
+       group.groupList.forEach(function (child) {
+               if (child.groupList.length) {
+                       groupComponents = groupComponents.concat(_this2.getChildGroups(child));
+               } else {
+                       groupComponents.push(child);
+               }
+       });
+
+       return groupComponents;
+};
+
+GroupRows.prototype.wipe = function () {
+       this.groupList.forEach(function (group) {
+               group.wipe();
+       });
+};
+
+GroupRows.prototype.pullGroupListData = function (groupList) {
+       var self = this;
+       var groupListData = [];
+
+       groupList.forEach(function (group) {
+               var groupHeader = {};
+               groupHeader.level = 0;
+               groupHeader.rowCount = 0;
+               groupHeader.headerContent = "";
+               var childData = [];
+
+               if (group.hasSubGroups) {
+                       childData = self.pullGroupListData(group.groupList);
+
+                       groupHeader.level = group.level;
+                       groupHeader.rowCount = childData.length - group.groupList.length; // data length minus number of sub-headers
+                       groupHeader.headerContent = group.generator(group.key, groupHeader.rowCount, group.rows, group);
+
+                       groupListData.push(groupHeader);
+                       groupListData = groupListData.concat(childData);
+               } else {
+                       groupHeader.level = group.level;
+                       groupHeader.headerContent = group.generator(group.key, group.rows.length, group.rows, group);
+                       groupHeader.rowCount = group.getRows().length;
+
+                       groupListData.push(groupHeader);
+
+                       group.getRows().forEach(function (row) {
+                               groupListData.push(row.getData("data"));
+                       });
+               }
+       });
+
+       return groupListData;
+};
+
+GroupRows.prototype.getGroupedData = function () {
+
+       return this.pullGroupListData(this.groupList);
+};
+
+GroupRows.prototype.getRowGroup = function (row) {
+       var match = false;
+
+       this.groupList.forEach(function (group) {
+               var result = group.getRowGroup(row);
+
+               if (result) {
+                       match = result;
+               }
+       });
+
+       return match;
+};
+
+GroupRows.prototype.countGroups = function () {
+       return this.groupList.length;
+};
+
+GroupRows.prototype.generateGroups = function (rows) {
+       var self = this,
+           oldGroups = self.groups;
+
+       self.groups = {};
+       self.groupList = [];
+
+       if (this.allowedValues && this.allowedValues[0]) {
+               this.allowedValues[0].forEach(function (value) {
+                       self.createGroup(value, 0, oldGroups);
+               });
+
+               rows.forEach(function (row) {
+                       self.assignRowToExistingGroup(row, oldGroups);
+               });
+       } else {
+               rows.forEach(function (row) {
+                       self.assignRowToGroup(row, oldGroups);
+               });
+       }
+};
+
+GroupRows.prototype.createGroup = function (groupID, level, oldGroups) {
+       var groupKey = level + "_" + groupID,
+           group;
+
+       oldGroups = oldGroups || [];
+
+       group = new Group(this, false, level, groupID, this.groupIDLookups[0].field, this.headerGenerator[0], oldGroups[groupKey]);
+
+       this.groups[groupKey] = group;
+       this.groupList.push(group);
+};
+
+// GroupRows.prototype.assignRowToGroup = function(row, oldGroups){
+//     var groupID = this.groupIDLookups[0].func(row.getData()),
+//     groupKey = "0_" + groupID;
+
+//     if(!this.groups[groupKey]){
+//             this.createGroup(groupID, 0, oldGroups);
+//     }
+
+//     this.groups[groupKey].addRow(row);
+// };
+
+GroupRows.prototype.assignRowToExistingGroup = function (row, oldGroups) {
+       var groupID = this.groupIDLookups[0].func(row.getData()),
+           groupKey = "0_" + groupID;
+
+       if (this.groups[groupKey]) {
+               this.groups[groupKey].addRow(row);
+       }
+};
+
+GroupRows.prototype.assignRowToGroup = function (row, oldGroups) {
+       var groupID = this.groupIDLookups[0].func(row.getData()),
+           newGroupNeeded = !this.groups["0_" + groupID];
+
+       if (newGroupNeeded) {
+               this.createGroup(groupID, 0, oldGroups);
+       }
+
+       this.groups["0_" + groupID].addRow(row);
+
+       return !newGroupNeeded;
+};
+
+GroupRows.prototype.updateGroupRows = function (force) {
+       var self = this,
+           output = [],
+           oldRowCount;
+
+       self.groupList.forEach(function (group) {
+               output = output.concat(group.getHeadersAndRows());
+       });
+
+       //force update of table display
+       if (force) {
+
+               var displayIndex = self.table.rowManager.setDisplayRows(output, this.getDisplayIndex());
+
+               if (displayIndex !== true) {
+                       this.setDisplayIndex(displayIndex);
+               }
+
+               self.table.rowManager.refreshActiveData("group", true, true);
+       }
+
+       return output;
+};
+
+GroupRows.prototype.scrollHeaders = function (left) {
+       left = left + "px";
+
+       this.groupList.forEach(function (group) {
+               group.scrollHeader(left);
+       });
+};
+
+GroupRows.prototype.removeGroup = function (group) {
+       var groupKey = group.level + "_" + group.key,
+           index;
+
+       if (this.groups[groupKey]) {
+               delete this.groups[groupKey];
+
+               index = this.groupList.indexOf(group);
+
+               if (index > -1) {
+                       this.groupList.splice(index, 1);
+               }
+       }
+};
+
+Tabulator.prototype.registerModule("groupRows", GroupRows);
\ No newline at end of file
diff --git a/admin/js/vendors/tabulator/js/modules/group_rows.min.js b/admin/js/vendors/tabulator/js/modules/group_rows.min.js
new file mode 100644 (file)
index 0000000..6039f2c
--- /dev/null
@@ -0,0 +1,2 @@
+/* Tabulator v4.7.0 (c) Oliver Folkerd */
+var GroupComponent=function(t){this._group=t,this.type="GroupComponent"};GroupComponent.prototype.getKey=function(){return this._group.key},GroupComponent.prototype.getField=function(){return this._group.field},GroupComponent.prototype.getElement=function(){return this._group.element},GroupComponent.prototype.getRows=function(){return this._group.getRows(!0)},GroupComponent.prototype.getSubGroups=function(){return this._group.getSubGroups(!0)},GroupComponent.prototype.getParentGroup=function(){return!!this._group.parent&&this._group.parent.getComponent()},GroupComponent.prototype.getVisibility=function(){return console.warn("getVisibility function is deprecated, you should now use the isVisible function"),this._group.visible},GroupComponent.prototype.isVisible=function(){return this._group.visible},GroupComponent.prototype.show=function(){this._group.show()},GroupComponent.prototype.hide=function(){this._group.hide()},GroupComponent.prototype.toggle=function(){this._group.toggleVisibility()},GroupComponent.prototype._getSelf=function(){return this._group},GroupComponent.prototype.getTable=function(){return this._group.groupManager.table};var Group=function(t,o,e,r,i,s,n){this.groupManager=t,this.parent=o,this.key=r,this.level=e,this.field=i,this.hasSubGroups=e<t.groupIDLookups.length-1,this.addRow=this.hasSubGroups?this._addRowToGroup:this._addRow,this.type="group",this.old=n,this.rows=[],this.groups=[],this.groupList=[],this.generator=s,this.elementContents=!1,this.height=0,this.outerHeight=0,this.initialized=!1,this.calcs={},this.initialized=!1,this.modules={},this.arrowElement=!1,this.visible=n?n.visible:void 0!==t.startOpen[e]?t.startOpen[e]:t.startOpen[0],this.component=null,this.createElements(),this.addBindings(),this.createValueGroups()};Group.prototype.wipe=function(){this.groupList.length?this.groupList.forEach(function(t){t.wipe()}):(this.element=!1,this.arrowElement=!1,this.elementContents=!1)},Group.prototype.createElements=function(){var t=document.createElement("div");t.classList.add("tabulator-arrow"),this.element=document.createElement("div"),this.element.classList.add("tabulator-row"),this.element.classList.add("tabulator-group"),this.element.classList.add("tabulator-group-level-"+this.level),this.element.setAttribute("role","rowgroup"),this.arrowElement=document.createElement("div"),this.arrowElement.classList.add("tabulator-group-toggle"),this.arrowElement.appendChild(t),!1!==this.groupManager.table.options.movableRows&&this.groupManager.table.modExists("moveRow")&&this.groupManager.table.modules.moveRow.initializeGroupHeader(this)},Group.prototype.createValueGroups=function(){var t=this,o=this.level+1;this.groupManager.allowedValues&&this.groupManager.allowedValues[o]&&this.groupManager.allowedValues[o].forEach(function(e){t._createGroup(e,o)})},Group.prototype.addBindings=function(){var t,o,e,r,i=this;i.groupManager.table.options.groupClick&&i.element.addEventListener("click",function(t){i.groupManager.table.options.groupClick.call(i.groupManager.table,t,i.getComponent())}),i.groupManager.table.options.groupDblClick&&i.element.addEventListener("dblclick",function(t){i.groupManager.table.options.groupDblClick.call(i.groupManager.table,t,i.getComponent())}),i.groupManager.table.options.groupContext&&i.element.addEventListener("contextmenu",function(t){i.groupManager.table.options.groupContext.call(i.groupManager.table,t,i.getComponent())}),i.groupManager.table.options.groupContextMenu&&i.groupManager.table.modExists("menu")&&i.groupManager.table.modules.menu.initializeGroup.call(i.groupManager.table.modules.menu,i),i.groupManager.table.options.groupTap&&(e=!1,i.element.addEventListener("touchstart",function(t){e=!0},{passive:!0}),i.element.addEventListener("touchend",function(t){e&&i.groupManager.table.options.groupTap(t,i.getComponent()),e=!1})),i.groupManager.table.options.groupDblTap&&(t=null,i.element.addEventListener("touchend",function(o){t?(clearTimeout(t),t=null,i.groupManager.table.options.groupDblTap(o,i.getComponent())):t=setTimeout(function(){clearTimeout(t),t=null},300)})),i.groupManager.table.options.groupTapHold&&(o=null,i.element.addEventListener("touchstart",function(t){clearTimeout(o),o=setTimeout(function(){clearTimeout(o),o=null,e=!1,i.groupManager.table.options.groupTapHold(t,i.getComponent())},1e3)},{passive:!0}),i.element.addEventListener("touchend",function(t){clearTimeout(o),o=null})),i.groupManager.table.options.groupToggleElement&&(r="arrow"==i.groupManager.table.options.groupToggleElement?i.arrowElement:i.element,r.addEventListener("click",function(t){t.stopPropagation(),t.stopImmediatePropagation(),i.toggleVisibility()}))},Group.prototype._createGroup=function(t,o){var e=o+"_"+t,r=new Group(this.groupManager,this,o,t,this.groupManager.groupIDLookups[o].field,this.groupManager.headerGenerator[o]||this.groupManager.headerGenerator[0],!!this.old&&this.old.groups[e]);this.groups[e]=r,this.groupList.push(r)},Group.prototype._addRowToGroup=function(t){var o=this.level+1;if(this.hasSubGroups){var e=this.groupManager.groupIDLookups[o].func(t.getData()),r=o+"_"+e;this.groupManager.allowedValues&&this.groupManager.allowedValues[o]?this.groups[r]&&this.groups[r].addRow(t):(this.groups[r]||this._createGroup(e,o),this.groups[r].addRow(t))}},Group.prototype._addRow=function(t){this.rows.push(t),t.modules.group=this},Group.prototype.insertRow=function(t,o,e){var r=this.conformRowData({});t.updateData(r);var i=this.rows.indexOf(o);i>-1?e?this.rows.splice(i+1,0,t):this.rows.splice(i,0,t):e?this.rows.push(t):this.rows.unshift(t),t.modules.group=this,this.generateGroupHeaderContents(),this.groupManager.table.modExists("columnCalcs")&&"table"!=this.groupManager.table.options.columnCalcs&&this.groupManager.table.modules.columnCalcs.recalcGroup(this),this.groupManager.updateGroupRows(!0)},Group.prototype.scrollHeader=function(t){this.arrowElement.style.marginLeft=t,this.groupList.forEach(function(o){o.scrollHeader(t)})},Group.prototype.getRowIndex=function(t){},Group.prototype.conformRowData=function(t){return this.field?t[this.field]=this.key:console.warn("Data Conforming Error - Cannot conform row data to match new group as groupBy is a function"),this.parent&&(t=this.parent.conformRowData(t)),t},Group.prototype.removeRow=function(t){var o=this.rows.indexOf(t),e=t.getElement();o>-1&&this.rows.splice(o,1),this.groupManager.table.options.groupValues||this.rows.length?(e.parentNode&&e.parentNode.removeChild(e),this.generateGroupHeaderContents(),this.groupManager.table.modExists("columnCalcs")&&"table"!=this.groupManager.table.options.columnCalcs&&this.groupManager.table.modules.columnCalcs.recalcGroup(this)):(this.parent?this.parent.removeGroup(this):this.groupManager.removeGroup(this),this.groupManager.updateGroupRows(!0))},Group.prototype.removeGroup=function(t){var o,e=t.level+"_"+t.key;this.groups[e]&&(delete this.groups[e],o=this.groupList.indexOf(t),o>-1&&this.groupList.splice(o,1),this.groupList.length||(this.parent?this.parent.removeGroup(this):this.groupManager.removeGroup(this)))},Group.prototype.getHeadersAndRows=function(t){var o=[];return o.push(this),this._visSet(),this.visible?this.groupList.length?this.groupList.forEach(function(e){o=o.concat(e.getHeadersAndRows(t))}):(!t&&"table"!=this.groupManager.table.options.columnCalcs&&this.groupManager.table.modExists("columnCalcs")&&this.groupManager.table.modules.columnCalcs.hasTopCalcs()&&(this.calcs.top&&(this.calcs.top.detachElement(),this.calcs.top.deleteCells()),this.calcs.top=this.groupManager.table.modules.columnCalcs.generateTopRow(this.rows),o.push(this.calcs.top)),o=o.concat(this.rows),!t&&"table"!=this.groupManager.table.options.columnCalcs&&this.groupManager.table.modExists("columnCalcs")&&this.groupManager.table.modules.columnCalcs.hasBottomCalcs()&&(this.calcs.bottom&&(this.calcs.bottom.detachElement(),this.calcs.bottom.deleteCells()),this.calcs.bottom=this.groupManager.table.modules.columnCalcs.generateBottomRow(this.rows),o.push(this.calcs.bottom))):this.groupList.length||"table"==this.groupManager.table.options.columnCalcs||this.groupManager.table.modExists("columnCalcs")&&(!t&&this.groupManager.table.modules.columnCalcs.hasTopCalcs()&&(this.calcs.top&&(this.calcs.top.detachElement(),this.calcs.top.deleteCells()),this.groupManager.table.options.groupClosedShowCalcs&&(this.calcs.top=this.groupManager.table.modules.columnCalcs.generateTopRow(this.rows),o.push(this.calcs.top))),!t&&this.groupManager.table.modules.columnCalcs.hasBottomCalcs()&&(this.calcs.bottom&&(this.calcs.bottom.detachElement(),this.calcs.bottom.deleteCells()),this.groupManager.table.options.groupClosedShowCalcs&&(this.calcs.bottom=this.groupManager.table.modules.columnCalcs.generateBottomRow(this.rows),o.push(this.calcs.bottom)))),o},Group.prototype.getData=function(t,o){var e=[];return this._visSet(),(!t||t&&this.visible)&&this.rows.forEach(function(t){e.push(t.getData(o||"data"))}),e},Group.prototype.getRowCount=function(){var t=0;return this.groupList.length?this.groupList.forEach(function(o){t+=o.getRowCount()}):t=this.rows.length,t},Group.prototype.toggleVisibility=function(){this.visible?this.hide():this.show()},Group.prototype.hide=function(){this.visible=!1,"classic"!=this.groupManager.table.rowManager.getRenderMode()||this.groupManager.table.options.pagination?this.groupManager.updateGroupRows(!0):(this.element.classList.remove("tabulator-group-visible"),this.groupList.length?this.groupList.forEach(function(t){t.getHeadersAndRows().forEach(function(t){t.detachElement()})}):this.rows.forEach(function(t){var o=t.getElement();o.parentNode.removeChild(o)}),this.groupManager.table.rowManager.setDisplayRows(this.groupManager.updateGroupRows(),this.groupManager.getDisplayIndex()),this.groupManager.table.rowManager.checkClassicModeGroupHeaderWidth()),this.groupManager.table.options.groupVisibilityChanged.call(this.table,this.getComponent(),!1)},Group.prototype.show=function(){var t=this;if(t.visible=!0,"classic"!=this.groupManager.table.rowManager.getRenderMode()||this.groupManager.table.options.pagination)this.groupManager.updateGroupRows(!0);else{this.element.classList.add("tabulator-group-visible");var o=t.getElement();this.groupList.length?this.groupList.forEach(function(t){t.getHeadersAndRows().forEach(function(t){var e=t.getElement();o.parentNode.insertBefore(e,o.nextSibling),t.initialize(),o=e})}):t.rows.forEach(function(t){var e=t.getElement();o.parentNode.insertBefore(e,o.nextSibling),t.initialize(),o=e}),this.groupManager.table.rowManager.setDisplayRows(this.groupManager.updateGroupRows(),this.groupManager.getDisplayIndex()),this.groupManager.table.rowManager.checkClassicModeGroupHeaderWidth()}this.groupManager.table.options.groupVisibilityChanged.call(this.table,this.getComponent(),!0)},Group.prototype._visSet=function(){var t=[];"function"==typeof this.visible&&(this.rows.forEach(function(o){t.push(o.getData())}),this.visible=this.visible(this.key,this.getRowCount(),t,this.getComponent()))},Group.prototype.getRowGroup=function(t){var o=!1;return this.groupList.length?this.groupList.forEach(function(e){var r=e.getRowGroup(t);r&&(o=r)}):this.rows.find(function(o){return o===t})&&(o=this),o},Group.prototype.getSubGroups=function(t){var o=[];return this.groupList.forEach(function(e){o.push(t?e.getComponent():e)}),o},Group.prototype.getRows=function(t){var o=[];return this.rows.forEach(function(e){o.push(t?e.getComponent():e)}),o},Group.prototype.generateGroupHeaderContents=function(){var t=[];for(this.rows.forEach(function(o){t.push(o.getData())}),this.elementContents=this.generator(this.key,this.getRowCount(),t,this.getComponent());this.element.firstChild;)this.element.removeChild(this.element.firstChild);"string"==typeof this.elementContents?this.element.innerHTML=this.elementContents:this.element.appendChild(this.elementContents),this.element.insertBefore(this.arrowElement,this.element.firstChild)},Group.prototype.getElement=function(){this.addBindingsd=!1,this._visSet(),this.visible?this.element.classList.add("tabulator-group-visible"):this.element.classList.remove("tabulator-group-visible");for(var t=0;t<this.element.childNodes.length;++t)this.element.childNodes[t].parentNode.removeChild(this.element.childNodes[t]);return this.generateGroupHeaderContents(),this.element},Group.prototype.detachElement=function(){this.element&&this.element.parentNode&&this.element.parentNode.removeChild(this.element)},Group.prototype.normalizeHeight=function(){this.setHeight(this.element.clientHeight)},Group.prototype.initialize=function(t){this.initialized&&!t||(this.normalizeHeight(),this.initialized=!0)},Group.prototype.reinitialize=function(){this.initialized=!1,this.height=0,Tabulator.prototype.helpers.elVisible(this.element)&&this.initialize(!0)},Group.prototype.setHeight=function(t){this.height!=t&&(this.height=t,this.outerHeight=this.element.offsetHeight)},Group.prototype.getHeight=function(){return this.outerHeight},Group.prototype.getGroup=function(){return this},Group.prototype.reinitializeHeight=function(){},Group.prototype.calcHeight=function(){},Group.prototype.setCellHeight=function(){},Group.prototype.clearCellHeight=function(){},Group.prototype.getComponent=function(){return this.component||(this.component=new GroupComponent(this)),this.component};var GroupRows=function(t){this.table=t,this.groupIDLookups=!1,this.startOpen=[function(){return!1}],this.headerGenerator=[function(){return""}],this.groupList=[],this.allowedValues=!1,this.groups={},this.displayIndex=0};GroupRows.prototype.initialize=function(){var t=this,o=t.table.options.groupBy,e=t.table.options.groupStartOpen,r=t.table.options.groupHeader;if(this.allowedValues=t.table.options.groupValues,Array.isArray(o)&&Array.isArray(r)&&o.length>r.length&&console.warn("Error creating group headers, groupHeader array is shorter than groupBy array"),t.headerGenerator=[function(){return""}],this.startOpen=[function(){return!1}],t.table.modules.localize.bind("groups|item",function(o,e){t.headerGenerator[0]=function(t,r,i){return(void 0===t?"":t)+"<span>("+r+" "+(1===r?o:e.groups.items)+")</span>"}}),this.groupIDLookups=[],Array.isArray(o)||o)this.table.modExists("columnCalcs")&&"table"!=this.table.options.columnCalcs&&"both"!=this.table.options.columnCalcs&&this.table.modules.columnCalcs.removeCalcs();else if(this.table.modExists("columnCalcs")&&"group"!=this.table.options.columnCalcs){var i=this.table.columnManager.getRealColumns();i.forEach(function(o){o.definition.topCalc&&t.table.modules.columnCalcs.initializeTopRow(),o.definition.bottomCalc&&t.table.modules.columnCalcs.initializeBottomRow()})}Array.isArray(o)||(o=[o]),o.forEach(function(o,e){var r,i;"function"==typeof o?r=o:(i=t.table.columnManager.getColumnByField(o),r=i?function(t){return i.getFieldValue(t)}:function(t){return t[o]}),t.groupIDLookups.push({field:"function"!=typeof o&&o,func:r,values:!!t.allowedValues&&t.allowedValues[e]})}),e&&(Array.isArray(e)||(e=[e]),e.forEach(function(t){t="function"==typeof t?t:function(){return!0}}),t.startOpen=e),r&&(t.headerGenerator=Array.isArray(r)?r:[r]),this.initialized=!0},GroupRows.prototype.setDisplayIndex=function(t){this.displayIndex=t},GroupRows.prototype.getDisplayIndex=function(){return this.displayIndex},GroupRows.prototype.getRows=function(t){return this.groupIDLookups.length?(this.table.options.dataGrouping.call(this.table),this.generateGroups(t),this.table.options.dataGrouped&&this.table.options.dataGrouped.call(this.table,this.getGroups(!0)),this.updateGroupRows()):t.slice(0)},GroupRows.prototype.getGroups=function(t){var o=[];return this.groupList.forEach(function(e){o.push(t?e.getComponent():e)}),o},GroupRows.prototype.getChildGroups=function(t){var o=this,e=[];return t||(t=this),t.groupList.forEach(function(t){t.groupList.length?e=e.concat(o.getChildGroups(t)):e.push(t)}),e},GroupRows.prototype.wipe=function(){this.groupList.forEach(function(t){t.wipe()})},GroupRows.prototype.pullGroupListData=function(t){var o=this,e=[];return t.forEach(function(t){var r={};r.level=0,r.rowCount=0,r.headerContent="";var i=[];t.hasSubGroups?(i=o.pullGroupListData(t.groupList),r.level=t.level,r.rowCount=i.length-t.groupList.length,r.headerContent=t.generator(t.key,r.rowCount,t.rows,t),e.push(r),e=e.concat(i)):(r.level=t.level,r.headerContent=t.generator(t.key,t.rows.length,t.rows,t),r.rowCount=t.getRows().length,e.push(r),t.getRows().forEach(function(t){e.push(t.getData("data"))}))}),e},GroupRows.prototype.getGroupedData=function(){return this.pullGroupListData(this.groupList)},GroupRows.prototype.getRowGroup=function(t){var o=!1;return this.groupList.forEach(function(e){var r=e.getRowGroup(t);r&&(o=r)}),o},GroupRows.prototype.countGroups=function(){return this.groupList.length},GroupRows.prototype.generateGroups=function(t){var o=this,e=o.groups;o.groups={},o.groupList=[],this.allowedValues&&this.allowedValues[0]?(this.allowedValues[0].forEach(function(t){o.createGroup(t,0,e)}),t.forEach(function(t){o.assignRowToExistingGroup(t,e)})):t.forEach(function(t){o.assignRowToGroup(t,e)})},GroupRows.prototype.createGroup=function(t,o,e){var r,i=o+"_"+t;e=e||[],r=new Group(this,!1,o,t,this.groupIDLookups[0].field,this.headerGenerator[0],e[i]),this.groups[i]=r,this.groupList.push(r)},GroupRows.prototype.assignRowToExistingGroup=function(t,o){var e=this.groupIDLookups[0].func(t.getData()),r="0_"+e;this.groups[r]&&this.groups[r].addRow(t)},GroupRows.prototype.assignRowToGroup=function(t,o){var e=this.groupIDLookups[0].func(t.getData()),r=!this.groups["0_"+e];return r&&this.createGroup(e,0,o),this.groups["0_"+e].addRow(t),!r},GroupRows.prototype.updateGroupRows=function(t){var o=this,e=[];if(o.groupList.forEach(function(t){e=e.concat(t.getHeadersAndRows())}),t){var r=o.table.rowManager.setDisplayRows(e,this.getDisplayIndex());!0!==r&&this.setDisplayIndex(r),o.table.rowManager.refreshActiveData("group",!0,!0)}return e},GroupRows.prototype.scrollHeaders=function(t){t+="px",this.groupList.forEach(function(o){o.scrollHeader(t)})},GroupRows.prototype.removeGroup=function(t){var o,e=t.level+"_"+t.key;this.groups[e]&&(delete this.groups[e],(o=this.groupList.indexOf(t))>-1&&this.groupList.splice(o,1))},Tabulator.prototype.registerModule("groupRows",GroupRows);
\ No newline at end of file
diff --git a/admin/js/vendors/tabulator/js/modules/history.js b/admin/js/vendors/tabulator/js/modules/history.js
new file mode 100644 (file)
index 0000000..1c3ae3e
--- /dev/null
@@ -0,0 +1,141 @@
+/* Tabulator v4.7.0 (c) Oliver Folkerd */
+
+var History = function History(table) {
+       this.table = table; //hold Tabulator object
+
+       this.history = [];
+       this.index = -1;
+};
+
+History.prototype.clear = function () {
+       this.history = [];
+       this.index = -1;
+};
+
+History.prototype.action = function (type, component, data) {
+
+       this.history = this.history.slice(0, this.index + 1);
+
+       this.history.push({
+               type: type,
+               component: component,
+               data: data
+       });
+
+       this.index++;
+};
+
+History.prototype.getHistoryUndoSize = function () {
+       return this.index + 1;
+};
+
+History.prototype.getHistoryRedoSize = function () {
+       return this.history.length - (this.index + 1);
+};
+
+History.prototype.undo = function () {
+
+       if (this.index > -1) {
+               var action = this.history[this.index];
+
+               this.undoers[action.type].call(this, action);
+
+               this.index--;
+
+               this.table.options.historyUndo.call(this.table, action.type, action.component.getComponent(), action.data);
+
+               return true;
+       } else {
+               console.warn("History Undo Error - No more history to undo");
+               return false;
+       }
+};
+
+History.prototype.redo = function () {
+       if (this.history.length - 1 > this.index) {
+
+               this.index++;
+
+               var action = this.history[this.index];
+
+               this.redoers[action.type].call(this, action);
+
+               this.table.options.historyRedo.call(this.table, action.type, action.component.getComponent(), action.data);
+
+               return true;
+       } else {
+               console.warn("History Redo Error - No more history to redo");
+               return false;
+       }
+};
+
+History.prototype.undoers = {
+       cellEdit: function cellEdit(action) {
+               action.component.setValueProcessData(action.data.oldValue);
+       },
+
+       rowAdd: function rowAdd(action) {
+               action.component.deleteActual();
+       },
+
+       rowDelete: function rowDelete(action) {
+               var newRow = this.table.rowManager.addRowActual(action.data.data, action.data.pos, action.data.index);
+
+               if (this.table.options.groupBy && this.table.modExists("groupRows")) {
+                       this.table.modules.groupRows.updateGroupRows(true);
+               }
+
+               this._rebindRow(action.component, newRow);
+       },
+
+       rowMove: function rowMove(action) {
+               this.table.rowManager.moveRowActual(action.component, this.table.rowManager.rows[action.data.posFrom], !action.data.after);
+               this.table.rowManager.redraw();
+       }
+};
+
+History.prototype.redoers = {
+       cellEdit: function cellEdit(action) {
+               action.component.setValueProcessData(action.data.newValue);
+       },
+
+       rowAdd: function rowAdd(action) {
+               var newRow = this.table.rowManager.addRowActual(action.data.data, action.data.pos, action.data.index);
+
+               if (this.table.options.groupBy && this.table.modExists("groupRows")) {
+                       this.table.modules.groupRows.updateGroupRows(true);
+               }
+
+               this._rebindRow(action.component, newRow);
+       },
+
+       rowDelete: function rowDelete(action) {
+               action.component.deleteActual();
+       },
+
+       rowMove: function rowMove(action) {
+               this.table.rowManager.moveRowActual(action.component, this.table.rowManager.rows[action.data.posTo], action.data.after);
+               this.table.rowManager.redraw();
+       }
+};
+
+//rebind rows to new element after deletion
+History.prototype._rebindRow = function (oldRow, newRow) {
+       this.history.forEach(function (action) {
+               if (action.component instanceof Row) {
+                       if (action.component === oldRow) {
+                               action.component = newRow;
+                       }
+               } else if (action.component instanceof Cell) {
+                       if (action.component.row === oldRow) {
+                               var field = action.component.column.getField();
+
+                               if (field) {
+                                       action.component = newRow.getCell(field);
+                               }
+                       }
+               }
+       });
+};
+
+Tabulator.prototype.registerModule("history", History);
\ No newline at end of file
diff --git a/admin/js/vendors/tabulator/js/modules/history.min.js b/admin/js/vendors/tabulator/js/modules/history.min.js
new file mode 100644 (file)
index 0000000..5df3187
--- /dev/null
@@ -0,0 +1,2 @@
+/* Tabulator v4.7.0 (c) Oliver Folkerd */
+var History=function(t){this.table=t,this.history=[],this.index=-1};History.prototype.clear=function(){this.history=[],this.index=-1},History.prototype.action=function(t,o,e){this.history=this.history.slice(0,this.index+1),this.history.push({type:t,component:o,data:e}),this.index++},History.prototype.getHistoryUndoSize=function(){return this.index+1},History.prototype.getHistoryRedoSize=function(){return this.history.length-(this.index+1)},History.prototype.undo=function(){if(this.index>-1){var t=this.history[this.index];return this.undoers[t.type].call(this,t),this.index--,this.table.options.historyUndo.call(this.table,t.type,t.component.getComponent(),t.data),!0}return console.warn("History Undo Error - No more history to undo"),!1},History.prototype.redo=function(){if(this.history.length-1>this.index){this.index++;var t=this.history[this.index];return this.redoers[t.type].call(this,t),this.table.options.historyRedo.call(this.table,t.type,t.component.getComponent(),t.data),!0}return console.warn("History Redo Error - No more history to redo"),!1},History.prototype.undoers={cellEdit:function(t){t.component.setValueProcessData(t.data.oldValue)},rowAdd:function(t){t.component.deleteActual()},rowDelete:function(t){var o=this.table.rowManager.addRowActual(t.data.data,t.data.pos,t.data.index);this.table.options.groupBy&&this.table.modExists("groupRows")&&this.table.modules.groupRows.updateGroupRows(!0),this._rebindRow(t.component,o)},rowMove:function(t){this.table.rowManager.moveRowActual(t.component,this.table.rowManager.rows[t.data.posFrom],!t.data.after),this.table.rowManager.redraw()}},History.prototype.redoers={cellEdit:function(t){t.component.setValueProcessData(t.data.newValue)},rowAdd:function(t){var o=this.table.rowManager.addRowActual(t.data.data,t.data.pos,t.data.index);this.table.options.groupBy&&this.table.modExists("groupRows")&&this.table.modules.groupRows.updateGroupRows(!0),this._rebindRow(t.component,o)},rowDelete:function(t){t.component.deleteActual()},rowMove:function(t){this.table.rowManager.moveRowActual(t.component,this.table.rowManager.rows[t.data.posTo],t.data.after),this.table.rowManager.redraw()}},History.prototype._rebindRow=function(t,o){this.history.forEach(function(e){if(e.component instanceof Row)e.component===t&&(e.component=o);else if(e.component instanceof Cell&&e.component.row===t){var i=e.component.column.getField();i&&(e.component=o.getCell(i))}})},Tabulator.prototype.registerModule("history",History);
\ No newline at end of file
diff --git a/admin/js/vendors/tabulator/js/modules/html_table_import.js b/admin/js/vendors/tabulator/js/modules/html_table_import.js
new file mode 100644 (file)
index 0000000..34fed7c
--- /dev/null
@@ -0,0 +1,191 @@
+var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
+
+/* Tabulator v4.7.0 (c) Oliver Folkerd */
+
+var HtmlTableImport = function HtmlTableImport(table) {
+       this.table = table; //hold Tabulator object
+       this.fieldIndex = [];
+       this.hasIndex = false;
+};
+
+HtmlTableImport.prototype.parseTable = function () {
+       var self = this,
+           element = self.table.element,
+           options = self.table.options,
+           columns = options.columns,
+           headers = element.getElementsByTagName("th"),
+           rows = element.getElementsByTagName("tbody")[0],
+           data = [],
+           newTable;
+
+       self.hasIndex = false;
+
+       self.table.options.htmlImporting.call(this.table);
+
+       rows = rows ? rows.getElementsByTagName("tr") : [];
+
+       //check for tablator inline options
+       self._extractOptions(element, options);
+
+       if (headers.length) {
+               self._extractHeaders(headers, rows);
+       } else {
+               self._generateBlankHeaders(headers, rows);
+       }
+
+       //iterate through table rows and build data set
+       for (var index = 0; index < rows.length; index++) {
+               var row = rows[index],
+                   cells = row.getElementsByTagName("td"),
+                   item = {};
+
+               //create index if the dont exist in table
+               if (!self.hasIndex) {
+                       item[options.index] = index;
+               }
+
+               for (var i = 0; i < cells.length; i++) {
+                       var cell = cells[i];
+                       if (typeof this.fieldIndex[i] !== "undefined") {
+                               item[this.fieldIndex[i]] = cell.innerHTML;
+                       }
+               }
+
+               //add row data to item
+               data.push(item);
+       }
+
+       //create new element
+       var newElement = document.createElement("div");
+
+       //transfer attributes to new element
+       var attributes = element.attributes;
+
+       // loop through attributes and apply them on div
+
+       for (var i in attributes) {
+               if (_typeof(attributes[i]) == "object") {
+                       newElement.setAttribute(attributes[i].name, attributes[i].value);
+               }
+       }
+
+       // replace table with div element
+       element.parentNode.replaceChild(newElement, element);
+
+       options.data = data;
+
+       self.table.options.htmlImported.call(this.table);
+
+       // // newElement.tabulator(options);
+
+       this.table.element = newElement;
+};
+
+//extract tabulator attribute options
+HtmlTableImport.prototype._extractOptions = function (element, options, defaultOptions) {
+       var attributes = element.attributes;
+       var optionsArr = defaultOptions ? Object.assign([], defaultOptions) : Object.keys(options);
+       var optionsList = {};
+
+       optionsArr.forEach(function (item) {
+               optionsList[item.toLowerCase()] = item;
+       });
+
+       for (var index in attributes) {
+               var attrib = attributes[index];
+               var name;
+
+               if (attrib && (typeof attrib === "undefined" ? "undefined" : _typeof(attrib)) == "object" && attrib.name && attrib.name.indexOf("tabulator-") === 0) {
+                       name = attrib.name.replace("tabulator-", "");
+
+                       if (typeof optionsList[name] !== "undefined") {
+                               options[optionsList[name]] = this._attribValue(attrib.value);
+                       }
+               }
+       }
+};
+
+//get value of attribute
+HtmlTableImport.prototype._attribValue = function (value) {
+       if (value === "true") {
+               return true;
+       }
+
+       if (value === "false") {
+               return false;
+       }
+
+       return value;
+};
+
+//find column if it has already been defined
+HtmlTableImport.prototype._findCol = function (title) {
+       var match = this.table.options.columns.find(function (column) {
+               return column.title === title;
+       });
+
+       return match || false;
+};
+
+//extract column from headers
+HtmlTableImport.prototype._extractHeaders = function (headers, rows) {
+       for (var index = 0; index < headers.length; index++) {
+               var header = headers[index],
+                   exists = false,
+                   col = this._findCol(header.textContent),
+                   width,
+                   attributes;
+
+               if (col) {
+                       exists = true;
+               } else {
+                       col = { title: header.textContent.trim() };
+               }
+
+               if (!col.field) {
+                       col.field = header.textContent.trim().toLowerCase().replace(" ", "_");
+               }
+
+               width = header.getAttribute("width");
+
+               if (width && !col.width) {
+                       col.width = width;
+               }
+
+               //check for tablator inline options
+               attributes = header.attributes;
+
+               // //check for tablator inline options
+               this._extractOptions(header, col, Column.prototype.defaultOptionList);
+
+               this.fieldIndex[index] = col.field;
+
+               if (col.field == this.table.options.index) {
+                       this.hasIndex = true;
+               }
+
+               if (!exists) {
+                       this.table.options.columns.push(col);
+               }
+       }
+};
+
+//generate blank headers
+HtmlTableImport.prototype._generateBlankHeaders = function (headers, rows) {
+       for (var index = 0; index < headers.length; index++) {
+               var header = headers[index],
+                   col = { title: "", field: "col" + index };
+
+               this.fieldIndex[index] = col.field;
+
+               var width = header.getAttribute("width");
+
+               if (width) {
+                       col.width = width;
+               }
+
+               this.table.options.columns.push(col);
+       }
+};
+
+Tabulator.prototype.registerModule("htmlTableImport", HtmlTableImport);
\ No newline at end of file
diff --git a/admin/js/vendors/tabulator/js/modules/html_table_import.min.js b/admin/js/vendors/tabulator/js/modules/html_table_import.min.js
new file mode 100644 (file)
index 0000000..aef2b5c
--- /dev/null
@@ -0,0 +1,2 @@
+/* Tabulator v4.7.0 (c) Oliver Folkerd */
+var _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},HtmlTableImport=function(t){this.table=t,this.fieldIndex=[],this.hasIndex=!1};HtmlTableImport.prototype.parseTable=function(){var t=this,e=t.table.element,o=t.table.options,a=(o.columns,e.getElementsByTagName("th")),n=e.getElementsByTagName("tbody")[0],l=[];t.hasIndex=!1,t.table.options.htmlImporting.call(this.table),n=n?n.getElementsByTagName("tr"):[],t._extractOptions(e,o),a.length?t._extractHeaders(a,n):t._generateBlankHeaders(a,n);for(var r=0;r<n.length;r++){var i=n[r],s=i.getElementsByTagName("td"),p={};t.hasIndex||(p[o.index]=r);for(var m=0;m<s.length;m++){var d=s[m];void 0!==this.fieldIndex[m]&&(p[this.fieldIndex[m]]=d.innerHTML)}l.push(p)}var f=document.createElement("div"),b=e.attributes;for(var m in b)"object"==_typeof(b[m])&&f.setAttribute(b[m].name,b[m].value);e.parentNode.replaceChild(f,e),o.data=l,t.table.options.htmlImported.call(this.table),this.table.element=f},HtmlTableImport.prototype._extractOptions=function(t,e,o){var a=t.attributes,n=o?Object.assign([],o):Object.keys(e),l={};n.forEach(function(t){l[t.toLowerCase()]=t});for(var r in a){var i,s=a[r];s&&"object"==(void 0===s?"undefined":_typeof(s))&&s.name&&0===s.name.indexOf("tabulator-")&&(i=s.name.replace("tabulator-",""),void 0!==l[i]&&(e[l[i]]=this._attribValue(s.value)))}},HtmlTableImport.prototype._attribValue=function(t){return"true"===t||"false"!==t&&t},HtmlTableImport.prototype._findCol=function(t){return this.table.options.columns.find(function(e){return e.title===t})||!1},HtmlTableImport.prototype._extractHeaders=function(t,e){for(var o=0;o<t.length;o++){var a,n=t[o],l=!1,r=this._findCol(n.textContent);r?l=!0:r={title:n.textContent.trim()},r.field||(r.field=n.textContent.trim().toLowerCase().replace(" ","_")),a=n.getAttribute("width"),a&&!r.width&&(r.width=a),n.attributes,this._extractOptions(n,r,Column.prototype.defaultOptionList),this.fieldIndex[o]=r.field,r.field==this.table.options.index&&(this.hasIndex=!0),l||this.table.options.columns.push(r)}},HtmlTableImport.prototype._generateBlankHeaders=function(t,e){for(var o=0;o<t.length;o++){var a=t[o],n={title:"",field:"col"+o};this.fieldIndex[o]=n.field;var l=a.getAttribute("width");l&&(n.width=l),this.table.options.columns.push(n)}},Tabulator.prototype.registerModule("htmlTableImport",HtmlTableImport);
\ No newline at end of file
diff --git a/admin/js/vendors/tabulator/js/modules/keybindings.js b/admin/js/vendors/tabulator/js/modules/keybindings.js
new file mode 100644 (file)
index 0000000..b65d9e8
--- /dev/null
@@ -0,0 +1,392 @@
+var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
+
+/* Tabulator v4.7.0 (c) Oliver Folkerd */
+
+var Keybindings = function Keybindings(table) {
+       this.table = table; //hold Tabulator object
+       this.watchKeys = null;
+       this.pressedKeys = null;
+       this.keyupBinding = false;
+       this.keydownBinding = false;
+};
+
+Keybindings.prototype.initialize = function () {
+       var bindings = this.table.options.keybindings,
+           mergedBindings = {};
+
+       this.watchKeys = {};
+       this.pressedKeys = [];
+
+       if (bindings !== false) {
+
+               for (var key in this.bindings) {
+                       mergedBindings[key] = this.bindings[key];
+               }
+
+               if (Object.keys(bindings).length) {
+
+                       for (var _key in bindings) {
+                               mergedBindings[_key] = bindings[_key];
+                       }
+               }
+
+               this.mapBindings(mergedBindings);
+               this.bindEvents();
+       }
+};
+
+Keybindings.prototype.mapBindings = function (bindings) {
+       var _this = this;
+
+       var self = this;
+
+       var _loop = function _loop(key) {
+
+               if (_this.actions[key]) {
+
+                       if (bindings[key]) {
+
+                               if (_typeof(bindings[key]) !== "object") {
+                                       bindings[key] = [bindings[key]];
+                               }
+
+                               bindings[key].forEach(function (binding) {
+                                       self.mapBinding(key, binding);
+                               });
+                       }
+               } else {
+                       console.warn("Key Binding Error - no such action:", key);
+               }
+       };
+
+       for (var key in bindings) {
+               _loop(key);
+       }
+};
+
+Keybindings.prototype.mapBinding = function (action, symbolsList) {
+       var self = this;
+
+       var binding = {
+               action: this.actions[action],
+               keys: [],
+               ctrl: false,
+               shift: false,
+               meta: false
+       };
+
+       var symbols = symbolsList.toString().toLowerCase().split(" ").join("").split("+");
+
+       symbols.forEach(function (symbol) {
+               switch (symbol) {
+                       case "ctrl":
+                               binding.ctrl = true;
+                               break;
+
+                       case "shift":
+                               binding.shift = true;
+                               break;
+
+                       case "meta":
+                               binding.meta = true;
+                               break;
+
+                       default:
+                               symbol = parseInt(symbol);
+                               binding.keys.push(symbol);
+
+                               if (!self.watchKeys[symbol]) {
+                                       self.watchKeys[symbol] = [];
+                               }
+
+                               self.watchKeys[symbol].push(binding);
+               }
+       });
+};
+
+Keybindings.prototype.bindEvents = function () {
+       var self = this;
+
+       this.keyupBinding = function (e) {
+               var code = e.keyCode;
+               var bindings = self.watchKeys[code];
+
+               if (bindings) {
+
+                       self.pressedKeys.push(code);
+
+                       bindings.forEach(function (binding) {
+                               self.checkBinding(e, binding);
+                       });
+               }
+       };
+
+       this.keydownBinding = function (e) {
+               var code = e.keyCode;
+               var bindings = self.watchKeys[code];
+
+               if (bindings) {
+
+                       var index = self.pressedKeys.indexOf(code);
+
+                       if (index > -1) {
+                               self.pressedKeys.splice(index, 1);
+                       }
+               }
+       };
+
+       this.table.element.addEventListener("keydown", this.keyupBinding);
+
+       this.table.element.addEventListener("keyup", this.keydownBinding);
+};
+
+Keybindings.prototype.clearBindings = function () {
+       if (this.keyupBinding) {
+               this.table.element.removeEventListener("keydown", this.keyupBinding);
+       }
+
+       if (this.keydownBinding) {
+               this.table.element.removeEventListener("keyup", this.keydownBinding);
+       }
+};
+
+Keybindings.prototype.checkBinding = function (e, binding) {
+       var self = this,
+           match = true;
+
+       if (e.ctrlKey == binding.ctrl && e.shiftKey == binding.shift && e.metaKey == binding.meta) {
+               binding.keys.forEach(function (key) {
+                       var index = self.pressedKeys.indexOf(key);
+
+                       if (index == -1) {
+                               match = false;
+                       }
+               });
+
+               if (match) {
+                       binding.action.call(self, e);
+               }
+
+               return true;
+       }
+
+       return false;
+};
+
+//default bindings
+Keybindings.prototype.bindings = {
+       navPrev: "shift + 9",
+       navNext: 9,
+       navUp: 38,
+       navDown: 40,
+       scrollPageUp: 33,
+       scrollPageDown: 34,
+       scrollToStart: 36,
+       scrollToEnd: 35,
+       undo: "ctrl + 90",
+       redo: "ctrl + 89",
+       copyToClipboard: "ctrl + 67"
+};
+
+//default actions
+Keybindings.prototype.actions = {
+       keyBlock: function keyBlock(e) {
+               e.stopPropagation();
+               e.preventDefault();
+       },
+       scrollPageUp: function scrollPageUp(e) {
+               var rowManager = this.table.rowManager,
+                   newPos = rowManager.scrollTop - rowManager.height,
+                   scrollMax = rowManager.element.scrollHeight;
+
+               e.preventDefault();
+
+               if (rowManager.displayRowsCount) {
+                       if (newPos >= 0) {
+                               rowManager.element.scrollTop = newPos;
+                       } else {
+                               rowManager.scrollToRow(rowManager.getDisplayRows()[0]);
+                       }
+               }
+
+               this.table.element.focus();
+       },
+       scrollPageDown: function scrollPageDown(e) {
+               var rowManager = this.table.rowManager,
+                   newPos = rowManager.scrollTop + rowManager.height,
+                   scrollMax = rowManager.element.scrollHeight;
+
+               e.preventDefault();
+
+               if (rowManager.displayRowsCount) {
+                       if (newPos <= scrollMax) {
+                               rowManager.element.scrollTop = newPos;
+                       } else {
+                               rowManager.scrollToRow(rowManager.getDisplayRows()[rowManager.displayRowsCount - 1]);
+                       }
+               }
+
+               this.table.element.focus();
+       },
+       scrollToStart: function scrollToStart(e) {
+               var rowManager = this.table.rowManager;
+
+               e.preventDefault();
+
+               if (rowManager.displayRowsCount) {
+                       rowManager.scrollToRow(rowManager.getDisplayRows()[0]);
+               }
+
+               this.table.element.focus();
+       },
+       scrollToEnd: function scrollToEnd(e) {
+               var rowManager = this.table.rowManager;
+
+               e.preventDefault();
+
+               if (rowManager.displayRowsCount) {
+                       rowManager.scrollToRow(rowManager.getDisplayRows()[rowManager.displayRowsCount - 1]);
+               }
+
+               this.table.element.focus();
+       },
+       navPrev: function navPrev(e) {
+               var cell = false;
+
+               if (this.table.modExists("edit")) {
+                       cell = this.table.modules.edit.currentCell;
+
+                       if (cell) {
+                               e.preventDefault();
+                               cell.nav().prev();
+                       }
+               }
+       },
+
+       navNext: function navNext(e) {
+               var cell = false;
+               var newRow = this.table.options.tabEndNewRow;
+               var nav;
+
+               if (this.table.modExists("edit")) {
+                       cell = this.table.modules.edit.currentCell;
+
+                       if (cell) {
+                               e.preventDefault();
+
+                               nav = cell.nav();
+
+                               if (!nav.next()) {
+                                       if (newRow) {
+
+                                               cell.getElement().firstChild.blur();
+
+                                               if (newRow === true) {
+                                                       newRow = this.table.addRow({});
+                                               } else {
+                                                       if (typeof newRow == "function") {
+                                                               newRow = this.table.addRow(newRow(cell.row.getComponent()));
+                                                       } else {
+                                                               newRow = this.table.addRow(Object.assign({}, newRow));
+                                                       }
+                                               }
+
+                                               newRow.then(function () {
+                                                       setTimeout(function () {
+                                                               nav.next();
+                                                       });
+                                               });
+                                       }
+                               }
+                       }
+               }
+       },
+
+       navLeft: function navLeft(e) {
+               var cell = false;
+
+               if (this.table.modExists("edit")) {
+                       cell = this.table.modules.edit.currentCell;
+
+                       if (cell) {
+                               e.preventDefault();
+                               cell.nav().left();
+                       }
+               }
+       },
+
+       navRight: function navRight(e) {
+               var cell = false;
+
+               if (this.table.modExists("edit")) {
+                       cell = this.table.modules.edit.currentCell;
+
+                       if (cell) {
+                               e.preventDefault();
+                               cell.nav().right();
+                       }
+               }
+       },
+
+       navUp: function navUp(e) {
+               var cell = false;
+
+               if (this.table.modExists("edit")) {
+                       cell = this.table.modules.edit.currentCell;
+
+                       if (cell) {
+                               e.preventDefault();
+                               cell.nav().up();
+                       }
+               }
+       },
+
+       navDown: function navDown(e) {
+               var cell = false;
+
+               if (this.table.modExists("edit")) {
+                       cell = this.table.modules.edit.currentCell;
+
+                       if (cell) {
+                               e.preventDefault();
+                               cell.nav().down();
+                       }
+               }
+       },
+
+       undo: function undo(e) {
+               var cell = false;
+               if (this.table.options.history && this.table.modExists("history") && this.table.modExists("edit")) {
+
+                       cell = this.table.modules.edit.currentCell;
+
+                       if (!cell) {
+                               e.preventDefault();
+                               this.table.modules.history.undo();
+                       }
+               }
+       },
+
+       redo: function redo(e) {
+               var cell = false;
+               if (this.table.options.history && this.table.modExists("history") && this.table.modExists("edit")) {
+
+                       cell = this.table.modules.edit.currentCell;
+
+                       if (!cell) {
+                               e.preventDefault();
+                               this.table.modules.history.redo();
+                       }
+               }
+       },
+
+       copyToClipboard: function copyToClipboard(e) {
+               if (!this.table.modules.edit.currentCell) {
+                       if (this.table.modExists("clipboard", true)) {
+                               this.table.modules.clipboard.copy(false, true);
+                       }
+               }
+       }
+};
+
+Tabulator.prototype.registerModule("keybindings", Keybindings);
\ No newline at end of file
diff --git a/admin/js/vendors/tabulator/js/modules/keybindings.min.js b/admin/js/vendors/tabulator/js/modules/keybindings.min.js
new file mode 100644 (file)
index 0000000..3535b88
--- /dev/null
@@ -0,0 +1,2 @@
+/* Tabulator v4.7.0 (c) Oliver Folkerd */
+var _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Keybindings=function(t){this.table=t,this.watchKeys=null,this.pressedKeys=null,this.keyupBinding=!1,this.keydownBinding=!1};Keybindings.prototype.initialize=function(){var t=this.table.options.keybindings,e={};if(this.watchKeys={},this.pressedKeys=[],!1!==t){for(var i in this.bindings)e[i]=this.bindings[i];if(Object.keys(t).length)for(var n in t)e[n]=t[n];this.mapBindings(e),this.bindEvents()}},Keybindings.prototype.mapBindings=function(t){var e=this,i=this;for(var n in t)!function(n){e.actions[n]?t[n]&&("object"!==_typeof(t[n])&&(t[n]=[t[n]]),t[n].forEach(function(t){i.mapBinding(n,t)})):console.warn("Key Binding Error - no such action:",n)}(n)},Keybindings.prototype.mapBinding=function(t,e){var i=this,n={action:this.actions[t],keys:[],ctrl:!1,shift:!1,meta:!1};e.toString().toLowerCase().split(" ").join("").split("+").forEach(function(t){switch(t){case"ctrl":n.ctrl=!0;break;case"shift":n.shift=!0;break;case"meta":n.meta=!0;break;default:t=parseInt(t),n.keys.push(t),i.watchKeys[t]||(i.watchKeys[t]=[]),i.watchKeys[t].push(n)}})},Keybindings.prototype.bindEvents=function(){var t=this;this.keyupBinding=function(e){var i=e.keyCode,n=t.watchKeys[i];n&&(t.pressedKeys.push(i),n.forEach(function(i){t.checkBinding(e,i)}))},this.keydownBinding=function(e){var i=e.keyCode;if(t.watchKeys[i]){var n=t.pressedKeys.indexOf(i);n>-1&&t.pressedKeys.splice(n,1)}},this.table.element.addEventListener("keydown",this.keyupBinding),this.table.element.addEventListener("keyup",this.keydownBinding)},Keybindings.prototype.clearBindings=function(){this.keyupBinding&&this.table.element.removeEventListener("keydown",this.keyupBinding),this.keydownBinding&&this.table.element.removeEventListener("keyup",this.keydownBinding)},Keybindings.prototype.checkBinding=function(t,e){var i=this,n=!0;return t.ctrlKey==e.ctrl&&t.shiftKey==e.shift&&t.metaKey==e.meta&&(e.keys.forEach(function(t){-1==i.pressedKeys.indexOf(t)&&(n=!1)}),n&&e.action.call(i,t),!0)},Keybindings.prototype.bindings={navPrev:"shift + 9",navNext:9,navUp:38,navDown:40,scrollPageUp:33,scrollPageDown:34,scrollToStart:36,scrollToEnd:35,undo:"ctrl + 90",redo:"ctrl + 89",copyToClipboard:"ctrl + 67"},Keybindings.prototype.actions={keyBlock:function(t){t.stopPropagation(),t.preventDefault()},scrollPageUp:function(t){var e=this.table.rowManager,i=e.scrollTop-e.height;e.element.scrollHeight;t.preventDefault(),e.displayRowsCount&&(i>=0?e.element.scrollTop=i:e.scrollToRow(e.getDisplayRows()[0])),this.table.element.focus()},scrollPageDown:function(t){var e=this.table.rowManager,i=e.scrollTop+e.height,n=e.element.scrollHeight;t.preventDefault(),e.displayRowsCount&&(i<=n?e.element.scrollTop=i:e.scrollToRow(e.getDisplayRows()[e.displayRowsCount-1])),this.table.element.focus()},scrollToStart:function(t){var e=this.table.rowManager;t.preventDefault(),e.displayRowsCount&&e.scrollToRow(e.getDisplayRows()[0]),this.table.element.focus()},scrollToEnd:function(t){var e=this.table.rowManager;t.preventDefault(),e.displayRowsCount&&e.scrollToRow(e.getDisplayRows()[e.displayRowsCount-1]),this.table.element.focus()},navPrev:function(t){var e=!1;this.table.modExists("edit")&&(e=this.table.modules.edit.currentCell)&&(t.preventDefault(),e.nav().prev())},navNext:function(t){var e,i=!1,n=this.table.options.tabEndNewRow;this.table.modExists("edit")&&(i=this.table.modules.edit.currentCell)&&(t.preventDefault(),e=i.nav(),e.next()||n&&(i.getElement().firstChild.blur(),n=!0===n?this.table.addRow({}):"function"==typeof n?this.table.addRow(n(i.row.getComponent())):this.table.addRow(Object.assign({},n)),n.then(function(){setTimeout(function(){e.next()})})))},navLeft:function(t){var e=!1;this.table.modExists("edit")&&(e=this.table.modules.edit.currentCell)&&(t.preventDefault(),e.nav().left())},navRight:function(t){var e=!1;this.table.modExists("edit")&&(e=this.table.modules.edit.currentCell)&&(t.preventDefault(),e.nav().right())},navUp:function(t){var e=!1;this.table.modExists("edit")&&(e=this.table.modules.edit.currentCell)&&(t.preventDefault(),e.nav().up())},navDown:function(t){var e=!1;this.table.modExists("edit")&&(e=this.table.modules.edit.currentCell)&&(t.preventDefault(),e.nav().down())},undo:function(t){this.table.options.history&&this.table.modExists("history")&&this.table.modExists("edit")&&(this.table.modules.edit.currentCell||(t.preventDefault(),this.table.modules.history.undo()))},redo:function(t){this.table.options.history&&this.table.modExists("history")&&this.table.modExists("edit")&&(this.table.modules.edit.currentCell||(t.preventDefault(),this.table.modules.history.redo()))},copyToClipboard:function(t){this.table.modules.edit.currentCell||this.table.modExists("clipboard",!0)&&this.table.modules.clipboard.copy(!1,!0)}},Tabulator.prototype.registerModule("keybindings",Keybindings);
\ No newline at end of file
diff --git a/admin/js/vendors/tabulator/js/modules/menu.js b/admin/js/vendors/tabulator/js/modules/menu.js
new file mode 100644 (file)
index 0000000..d86575f
--- /dev/null
@@ -0,0 +1,200 @@
+/* Tabulator v4.7.0 (c) Oliver Folkerd */
+
+var Menu = function Menu(table) {
+       this.table = table; //hold Tabulator object
+       this.menuEl = false;
+       this.blurEvent = this.hideMenu.bind(this);
+       this.escEvent = this.escMenu.bind(this);
+       this.nestedMenuBlock = false;
+};
+
+Menu.prototype.initializeColumnHeader = function (column) {
+       var _this = this;
+
+       var headerMenuEl;
+
+       if (column.definition.headerContextMenu) {
+               column.getElement().addEventListener("contextmenu", function (e) {
+                       var menu = typeof column.definition.headerContextMenu == "function" ? column.definition.headerContextMenu(column.getComponent()) : column.definition.headerContextMenu;
+
+                       e.preventDefault();
+
+                       _this.loadMenu(e, column, menu);
+               });
+       }
+
+       if (column.definition.headerMenu) {
+
+               headerMenuEl = document.createElement("span");
+               headerMenuEl.classList.add("tabulator-header-menu-button");
+               headerMenuEl.innerHTML = "&vellip;";
+
+               headerMenuEl.addEventListener("click", function (e) {
+                       var menu = typeof column.definition.headerMenu == "function" ? column.definition.headerMenu(column.getComponent()) : column.definition.headerMenu;
+                       e.stopPropagation();
+                       e.preventDefault();
+
+                       _this.loadMenu(e, column, menu);
+               });
+
+               column.titleElement.insertBefore(headerMenuEl, column.titleElement.firstChild);
+       }
+};
+
+Menu.prototype.initializeCell = function (cell) {
+       var _this2 = this;
+
+       cell.getElement().addEventListener("contextmenu", function (e) {
+               var menu = typeof cell.column.definition.contextMenu == "function" ? cell.column.definition.contextMenu(cell.getComponent()) : cell.column.definition.contextMenu;
+
+               e.stopImmediatePropagation();
+
+               _this2.loadMenu(e, cell, menu);
+       });
+};
+
+Menu.prototype.initializeRow = function (row) {
+       var _this3 = this;
+
+       row.getElement().addEventListener("contextmenu", function (e) {
+               var menu = typeof _this3.table.options.rowContextMenu == "function" ? _this3.table.options.rowContextMenu(row.getComponent()) : _this3.table.options.rowContextMenu;
+
+               _this3.loadMenu(e, row, menu);
+       });
+};
+
+Menu.prototype.initializeGroup = function (group) {
+       var _this4 = this;
+
+       group.getElement().addEventListener("contextmenu", function (e) {
+               var menu = typeof _this4.table.options.groupContextMenu == "function" ? _this4.table.options.groupContextMenu(group.getComponent()) : _this4.table.options.groupContextMenu;
+
+               _this4.loadMenu(e, group, menu);
+       });
+};
+
+Menu.prototype.loadMenu = function (e, component, menu) {
+       var _this5 = this;
+
+       var docHeight = Math.max(document.body.offsetHeight, window.innerHeight);
+
+       e.preventDefault();
+
+       //abort if no menu set
+       if (!menu || !menu.length) {
+               return;
+       }
+
+       if (this.nestedMenuBlock) {
+               //abort if child menu already open
+               if (this.isOpen()) {
+                       return;
+               }
+       } else {
+               this.nestedMenuBlock = setTimeout(function () {
+                       _this5.nestedMenuBlock = false;
+               }, 100);
+       }
+
+       this.hideMenu();
+
+       this.menuEl = document.createElement("div");
+       this.menuEl.classList.add("tabulator-menu");
+
+       menu.forEach(function (item) {
+               var itemEl = document.createElement("div");
+               var label = item.label;
+               var disabled = item.disabled;
+
+               if (item.separator) {
+                       itemEl.classList.add("tabulator-menu-separator");
+               } else {
+                       itemEl.classList.add("tabulator-menu-item");
+
+                       if (typeof label == "function") {
+                               label = label(component.getComponent());
+                       }
+
+                       if (label instanceof Node) {
+                               itemEl.appendChild(label);
+                       } else {
+                               itemEl.innerHTML = label;
+                       }
+
+                       if (typeof disabled == "function") {
+                               disabled = disabled(component.getComponent());
+                       }
+
+                       if (disabled) {
+                               itemEl.classList.add("tabulator-menu-item-disabled");
+                               itemEl.addEventListener("click", function (e) {
+                                       e.stopPropagation();
+                               });
+                       } else {
+                               itemEl.addEventListener("click", function (e) {
+                                       _this5.hideMenu();
+                                       item.action(e, component.getComponent());
+                               });
+                       }
+               }
+
+               _this5.menuEl.appendChild(itemEl);
+       });
+
+       this.menuEl.style.top = e.pageY + "px";
+       this.menuEl.style.left = e.pageX + "px";
+
+       document.body.addEventListener("click", this.blurEvent);
+       this.table.rowManager.element.addEventListener("scroll", this.blurEvent);
+
+       setTimeout(function () {
+               document.body.addEventListener("contextmenu", _this5.blurEvent);
+       }, 100);
+
+       document.body.addEventListener("keydown", this.escEvent);
+
+       document.body.appendChild(this.menuEl);
+
+       //move menu to start on right edge if it is too close to the edge of the screen
+       if (e.pageX + this.menuEl.offsetWidth >= document.body.offsetWidth) {
+               this.menuEl.style.left = "";
+               this.menuEl.style.right = document.body.offsetWidth - e.pageX + "px";
+       }
+
+       //move menu to start on bottom edge if it is too close to the edge of the screen
+       if (e.pageY + this.menuEl.offsetHeight >= docHeight) {
+               this.menuEl.style.top = "";
+               this.menuEl.style.bottom = docHeight - e.pageY + "px";
+       }
+};
+
+Menu.prototype.isOpen = function () {
+       return !!this.menuEl.parentNode;
+};
+
+Menu.prototype.escMenu = function (e) {
+       if (e.keyCode == 27) {
+               this.hideMenu();
+       }
+};
+
+Menu.prototype.hideMenu = function () {
+       if (this.menuEl.parentNode) {
+               this.menuEl.parentNode.removeChild(this.menuEl);
+       }
+
+       if (this.escEvent) {
+               document.body.removeEventListener("keydown", this.escEvent);
+       }
+
+       if (this.blurEvent) {
+               document.body.removeEventListener("click", this.blurEvent);
+               document.body.removeEventListener("contextmenu", this.blurEvent);
+               this.table.rowManager.element.removeEventListener("scroll", this.blurEvent);
+       }
+};
+
+//default accessors
+Menu.prototype.menus = {};
+
+Tabulator.prototype.registerModule("menu", Menu);
\ No newline at end of file
diff --git a/admin/js/vendors/tabulator/js/modules/menu.min.js b/admin/js/vendors/tabulator/js/modules/menu.min.js
new file mode 100644 (file)
index 0000000..40b8241
--- /dev/null
@@ -0,0 +1,2 @@
+/* Tabulator v4.7.0 (c) Oliver Folkerd */
+var Menu=function(e){this.table=e,this.menuEl=!1,this.blurEvent=this.hideMenu.bind(this),this.escEvent=this.escMenu.bind(this),this.nestedMenuBlock=!1};Menu.prototype.initializeColumnHeader=function(e){var t,n=this;e.definition.headerContextMenu&&e.getElement().addEventListener("contextmenu",function(t){var o="function"==typeof e.definition.headerContextMenu?e.definition.headerContextMenu(e.getComponent()):e.definition.headerContextMenu;t.preventDefault(),n.loadMenu(t,e,o)}),e.definition.headerMenu&&(t=document.createElement("span"),t.classList.add("tabulator-header-menu-button"),t.innerHTML="&vellip;",t.addEventListener("click",function(t){var o="function"==typeof e.definition.headerMenu?e.definition.headerMenu(e.getComponent()):e.definition.headerMenu;t.stopPropagation(),t.preventDefault(),n.loadMenu(t,e,o)}),e.titleElement.insertBefore(t,e.titleElement.firstChild))},Menu.prototype.initializeCell=function(e){var t=this;e.getElement().addEventListener("contextmenu",function(n){var o="function"==typeof e.column.definition.contextMenu?e.column.definition.contextMenu(e.getComponent()):e.column.definition.contextMenu;n.stopImmediatePropagation(),t.loadMenu(n,e,o)})},Menu.prototype.initializeRow=function(e){var t=this;e.getElement().addEventListener("contextmenu",function(n){var o="function"==typeof t.table.options.rowContextMenu?t.table.options.rowContextMenu(e.getComponent()):t.table.options.rowContextMenu;t.loadMenu(n,e,o)})},Menu.prototype.initializeGroup=function(e){var t=this;e.getElement().addEventListener("contextmenu",function(n){var o="function"==typeof t.table.options.groupContextMenu?t.table.options.groupContextMenu(e.getComponent()):t.table.options.groupContextMenu;t.loadMenu(n,e,o)})},Menu.prototype.loadMenu=function(e,t,n){var o=this,i=Math.max(document.body.offsetHeight,window.innerHeight);if(e.preventDefault(),n&&n.length){if(this.nestedMenuBlock){if(this.isOpen())return}else this.nestedMenuBlock=setTimeout(function(){o.nestedMenuBlock=!1},100);this.hideMenu(),this.menuEl=document.createElement("div"),this.menuEl.classList.add("tabulator-menu"),n.forEach(function(e){var n=document.createElement("div"),i=e.label,u=e.disabled;e.separator?n.classList.add("tabulator-menu-separator"):(n.classList.add("tabulator-menu-item"),"function"==typeof i&&(i=i(t.getComponent())),i instanceof Node?n.appendChild(i):n.innerHTML=i,"function"==typeof u&&(u=u(t.getComponent())),u?(n.classList.add("tabulator-menu-item-disabled"),n.addEventListener("click",function(e){e.stopPropagation()})):n.addEventListener("click",function(n){o.hideMenu(),e.action(n,t.getComponent())})),o.menuEl.appendChild(n)}),this.menuEl.style.top=e.pageY+"px",this.menuEl.style.left=e.pageX+"px",document.body.addEventListener("click",this.blurEvent),this.table.rowManager.element.addEventListener("scroll",this.blurEvent),setTimeout(function(){document.body.addEventListener("contextmenu",o.blurEvent)},100),document.body.addEventListener("keydown",this.escEvent),document.body.appendChild(this.menuEl),e.pageX+this.menuEl.offsetWidth>=document.body.offsetWidth&&(this.menuEl.style.left="",this.menuEl.style.right=document.body.offsetWidth-e.pageX+"px"),e.pageY+this.menuEl.offsetHeight>=i&&(this.menuEl.style.top="",this.menuEl.style.bottom=i-e.pageY+"px")}},Menu.prototype.isOpen=function(){return!!this.menuEl.parentNode},Menu.prototype.escMenu=function(e){27==e.keyCode&&this.hideMenu()},Menu.prototype.hideMenu=function(){this.menuEl.parentNode&&this.menuEl.parentNode.removeChild(this.menuEl),this.escEvent&&document.body.removeEventListener("keydown",this.escEvent),this.blurEvent&&(document.body.removeEventListener("click",this.blurEvent),document.body.removeEventListener("contextmenu",this.blurEvent),this.table.rowManager.element.removeEventListener("scroll",this.blurEvent))},Menu.prototype.menus={},Tabulator.prototype.registerModule("menu",Menu);
\ No newline at end of file
diff --git a/admin/js/vendors/tabulator/js/modules/moveable_columns.js b/admin/js/vendors/tabulator/js/modules/moveable_columns.js
new file mode 100644 (file)
index 0000000..5244016
--- /dev/null
@@ -0,0 +1,289 @@
+/* Tabulator v4.7.0 (c) Oliver Folkerd */
+
+var MoveColumns = function MoveColumns(table) {
+       this.table = table; //hold Tabulator object
+       this.placeholderElement = this.createPlaceholderElement();
+       this.hoverElement = false; //floating column header element
+       this.checkTimeout = false; //click check timeout holder
+       this.checkPeriod = 250; //period to wait on mousedown to consider this a move and not a click
+       this.moving = false; //currently moving column
+       this.toCol = false; //destination column
+       this.toColAfter = false; //position of moving column relative to the desitnation column
+       this.startX = 0; //starting position within header element
+       this.autoScrollMargin = 40; //auto scroll on edge when within margin
+       this.autoScrollStep = 5; //auto scroll distance in pixels
+       this.autoScrollTimeout = false; //auto scroll timeout
+       this.touchMove = false;
+
+       this.moveHover = this.moveHover.bind(this);
+       this.endMove = this.endMove.bind(this);
+};
+
+MoveColumns.prototype.createPlaceholderElement = function () {
+       var el = document.createElement("div");
+
+       el.classList.add("tabulator-col");
+       el.classList.add("tabulator-col-placeholder");
+
+       return el;
+};
+
+MoveColumns.prototype.initializeColumn = function (column) {
+       var self = this,
+           config = {},
+           colEl;
+
+       if (!column.modules.frozen) {
+
+               colEl = column.getElement();
+
+               config.mousemove = function (e) {
+                       if (column.parent === self.moving.parent) {
+                               if ((self.touchMove ? e.touches[0].pageX : e.pageX) - Tabulator.prototype.helpers.elOffset(colEl).left + self.table.columnManager.element.scrollLeft > column.getWidth() / 2) {
+                                       if (self.toCol !== column || !self.toColAfter) {
+                                               colEl.parentNode.insertBefore(self.placeholderElement, colEl.nextSibling);
+                                               self.moveColumn(column, true);
+                                       }
+                               } else {
+                                       if (self.toCol !== column || self.toColAfter) {
+                                               colEl.parentNode.insertBefore(self.placeholderElement, colEl);
+                                               self.moveColumn(column, false);
+                                       }
+                               }
+                       }
+               }.bind(self);
+
+               colEl.addEventListener("mousedown", function (e) {
+                       self.touchMove = false;
+                       if (e.which === 1) {
+                               self.checkTimeout = setTimeout(function () {
+                                       self.startMove(e, column);
+                               }, self.checkPeriod);
+                       }
+               });
+
+               colEl.addEventListener("mouseup", function (e) {
+                       if (e.which === 1) {
+                               if (self.checkTimeout) {
+                                       clearTimeout(self.checkTimeout);
+                               }
+                       }
+               });
+
+               self.bindTouchEvents(column);
+       }
+
+       column.modules.moveColumn = config;
+};
+
+MoveColumns.prototype.bindTouchEvents = function (column) {
+       var self = this,
+           colEl = column.getElement(),
+           startXMove = false,
+           //shifting center position of the cell
+       dir = false,
+           currentCol,
+           nextCol,
+           prevCol,
+           nextColWidth,
+           prevColWidth,
+           nextColWidthLast,
+           prevColWidthLast;
+
+       colEl.addEventListener("touchstart", function (e) {
+               self.checkTimeout = setTimeout(function () {
+                       self.touchMove = true;
+                       currentCol = column;
+                       nextCol = column.nextColumn();
+                       nextColWidth = nextCol ? nextCol.getWidth() / 2 : 0;
+                       prevCol = column.prevColumn();
+                       prevColWidth = prevCol ? prevCol.getWidth() / 2 : 0;
+                       nextColWidthLast = 0;
+                       prevColWidthLast = 0;
+                       startXMove = false;
+
+                       self.startMove(e, column);
+               }, self.checkPeriod);
+       }, { passive: true });
+
+       colEl.addEventListener("touchmove", function (e) {
+               var halfCol, diff, moveToCol;
+
+               if (self.moving) {
+                       self.moveHover(e);
+
+                       if (!startXMove) {
+                               startXMove = e.touches[0].pageX;
+                       }
+
+                       diff = e.touches[0].pageX - startXMove;
+
+                       if (diff > 0) {
+                               if (nextCol && diff - nextColWidthLast > nextColWidth) {
+                                       moveToCol = nextCol;
+
+                                       if (moveToCol !== column) {
+                                               startXMove = e.touches[0].pageX;
+                                               moveToCol.getElement().parentNode.insertBefore(self.placeholderElement, moveToCol.getElement().nextSibling);
+                                               self.moveColumn(moveToCol, true);
+                                       }
+                               }
+                       } else {
+                               if (prevCol && -diff - prevColWidthLast > prevColWidth) {
+                                       moveToCol = prevCol;
+
+                                       if (moveToCol !== column) {
+                                               startXMove = e.touches[0].pageX;
+                                               moveToCol.getElement().parentNode.insertBefore(self.placeholderElement, moveToCol.getElement());
+                                               self.moveColumn(moveToCol, false);
+                                       }
+                               }
+                       }
+
+                       if (moveToCol) {
+                               currentCol = moveToCol;
+                               nextCol = moveToCol.nextColumn();
+                               nextColWidthLast = nextColWidth;
+                               nextColWidth = nextCol ? nextCol.getWidth() / 2 : 0;
+                               prevCol = moveToCol.prevColumn();
+                               prevColWidthLast = prevColWidth;
+                               prevColWidth = prevCol ? prevCol.getWidth() / 2 : 0;
+                       }
+               }
+       }, { passive: true });
+
+       colEl.addEventListener("touchend", function (e) {
+               if (self.checkTimeout) {
+                       clearTimeout(self.checkTimeout);
+               }
+               if (self.moving) {
+                       self.endMove(e);
+               }
+       });
+};
+
+MoveColumns.prototype.startMove = function (e, column) {
+       var element = column.getElement();
+
+       this.moving = column;
+       this.startX = (this.touchMove ? e.touches[0].pageX : e.pageX) - Tabulator.prototype.helpers.elOffset(element).left;
+
+       this.table.element.classList.add("tabulator-block-select");
+
+       //create placeholder
+       this.placeholderElement.style.width = column.getWidth() + "px";
+       this.placeholderElement.style.height = column.getHeight() + "px";
+
+       element.parentNode.insertBefore(this.placeholderElement, element);
+       element.parentNode.removeChild(element);
+
+       //create hover element
+       this.hoverElement = element.cloneNode(true);
+       this.hoverElement.classList.add("tabulator-moving");
+
+       this.table.columnManager.getElement().appendChild(this.hoverElement);
+
+       this.hoverElement.style.left = "0";
+       this.hoverElement.style.bottom = "0";
+
+       if (!this.touchMove) {
+               this._bindMouseMove();
+
+               document.body.addEventListener("mousemove", this.moveHover);
+               document.body.addEventListener("mouseup", this.endMove);
+       }
+
+       this.moveHover(e);
+};
+
+MoveColumns.prototype._bindMouseMove = function () {
+       this.table.columnManager.columnsByIndex.forEach(function (column) {
+               if (column.modules.moveColumn.mousemove) {
+                       column.getElement().addEventListener("mousemove", column.modules.moveColumn.mousemove);
+               }
+       });
+};
+
+MoveColumns.prototype._unbindMouseMove = function () {
+       this.table.columnManager.columnsByIndex.forEach(function (column) {
+               if (column.modules.moveColumn.mousemove) {
+                       column.getElement().removeEventListener("mousemove", column.modules.moveColumn.mousemove);
+               }
+       });
+};
+
+MoveColumns.prototype.moveColumn = function (column, after) {
+       var movingCells = this.moving.getCells();
+
+       this.toCol = column;
+       this.toColAfter = after;
+
+       if (after) {
+               column.getCells().forEach(function (cell, i) {
+                       var cellEl = cell.getElement();
+                       cellEl.parentNode.insertBefore(movingCells[i].getElement(), cellEl.nextSibling);
+               });
+       } else {
+               column.getCells().forEach(function (cell, i) {
+                       var cellEl = cell.getElement();
+                       cellEl.parentNode.insertBefore(movingCells[i].getElement(), cellEl);
+               });
+       }
+};
+
+MoveColumns.prototype.endMove = function (e) {
+       if (e.which === 1 || this.touchMove) {
+               this._unbindMouseMove();
+
+               this.placeholderElement.parentNode.insertBefore(this.moving.getElement(), this.placeholderElement.nextSibling);
+               this.placeholderElement.parentNode.removeChild(this.placeholderElement);
+               this.hoverElement.parentNode.removeChild(this.hoverElement);
+
+               this.table.element.classList.remove("tabulator-block-select");
+
+               if (this.toCol) {
+                       this.table.columnManager.moveColumnActual(this.moving, this.toCol, this.toColAfter);
+               }
+
+               this.moving = false;
+               this.toCol = false;
+               this.toColAfter = false;
+
+               if (!this.touchMove) {
+                       document.body.removeEventListener("mousemove", this.moveHover);
+                       document.body.removeEventListener("mouseup", this.endMove);
+               }
+       }
+};
+
+MoveColumns.prototype.moveHover = function (e) {
+       var self = this,
+           columnHolder = self.table.columnManager.getElement(),
+           scrollLeft = columnHolder.scrollLeft,
+           xPos = (self.touchMove ? e.touches[0].pageX : e.pageX) - Tabulator.prototype.helpers.elOffset(columnHolder).left + scrollLeft,
+           scrollPos;
+
+       self.hoverElement.style.left = xPos - self.startX + "px";
+
+       if (xPos - scrollLeft < self.autoScrollMargin) {
+               if (!self.autoScrollTimeout) {
+                       self.autoScrollTimeout = setTimeout(function () {
+                               scrollPos = Math.max(0, scrollLeft - 5);
+                               self.table.rowManager.getElement().scrollLeft = scrollPos;
+                               self.autoScrollTimeout = false;
+                       }, 1);
+               }
+       }
+
+       if (scrollLeft + columnHolder.clientWidth - xPos < self.autoScrollMargin) {
+               if (!self.autoScrollTimeout) {
+                       self.autoScrollTimeout = setTimeout(function () {
+                               scrollPos = Math.min(columnHolder.clientWidth, scrollLeft + 5);
+                               self.table.rowManager.getElement().scrollLeft = scrollPos;
+                               self.autoScrollTimeout = false;
+                       }, 1);
+               }
+       }
+};
+
+Tabulator.prototype.registerModule("moveColumn", MoveColumns);
\ No newline at end of file
diff --git a/admin/js/vendors/tabulator/js/modules/moveable_columns.min.js b/admin/js/vendors/tabulator/js/modules/moveable_columns.min.js
new file mode 100644 (file)
index 0000000..0135a3b
--- /dev/null
@@ -0,0 +1,2 @@
+/* Tabulator v4.7.0 (c) Oliver Folkerd */
+var MoveColumns=function(e){this.table=e,this.placeholderElement=this.createPlaceholderElement(),this.hoverElement=!1,this.checkTimeout=!1,this.checkPeriod=250,this.moving=!1,this.toCol=!1,this.toColAfter=!1,this.startX=0,this.autoScrollMargin=40,this.autoScrollStep=5,this.autoScrollTimeout=!1,this.touchMove=!1,this.moveHover=this.moveHover.bind(this),this.endMove=this.endMove.bind(this)};MoveColumns.prototype.createPlaceholderElement=function(){var e=document.createElement("div");return e.classList.add("tabulator-col"),e.classList.add("tabulator-col-placeholder"),e},MoveColumns.prototype.initializeColumn=function(e){var t,o=this,n={};e.modules.frozen||(t=e.getElement(),n.mousemove=function(n){e.parent===o.moving.parent&&((o.touchMove?n.touches[0].pageX:n.pageX)-Tabulator.prototype.helpers.elOffset(t).left+o.table.columnManager.element.scrollLeft>e.getWidth()/2?o.toCol===e&&o.toColAfter||(t.parentNode.insertBefore(o.placeholderElement,t.nextSibling),o.moveColumn(e,!0)):(o.toCol!==e||o.toColAfter)&&(t.parentNode.insertBefore(o.placeholderElement,t),o.moveColumn(e,!1)))}.bind(o),t.addEventListener("mousedown",function(t){o.touchMove=!1,1===t.which&&(o.checkTimeout=setTimeout(function(){o.startMove(t,e)},o.checkPeriod))}),t.addEventListener("mouseup",function(e){1===e.which&&o.checkTimeout&&clearTimeout(o.checkTimeout)}),o.bindTouchEvents(e)),e.modules.moveColumn=n},MoveColumns.prototype.bindTouchEvents=function(e){var t,o,n,l,i,s,m,r=this,u=e.getElement(),h=!1;u.addEventListener("touchstart",function(u){r.checkTimeout=setTimeout(function(){r.touchMove=!0,t=e,o=e.nextColumn(),l=o?o.getWidth()/2:0,n=e.prevColumn(),i=n?n.getWidth()/2:0,s=0,m=0,h=!1,r.startMove(u,e)},r.checkPeriod)},{passive:!0}),u.addEventListener("touchmove",function(u){var a,c;r.moving&&(r.moveHover(u),h||(h=u.touches[0].pageX),a=u.touches[0].pageX-h,a>0?o&&a-s>l&&(c=o)!==e&&(h=u.touches[0].pageX,c.getElement().parentNode.insertBefore(r.placeholderElement,c.getElement().nextSibling),r.moveColumn(c,!0)):n&&-a-m>i&&(c=n)!==e&&(h=u.touches[0].pageX,c.getElement().parentNode.insertBefore(r.placeholderElement,c.getElement()),r.moveColumn(c,!1)),c&&(t=c,o=c.nextColumn(),s=l,l=o?o.getWidth()/2:0,n=c.prevColumn(),m=i,i=n?n.getWidth()/2:0))},{passive:!0}),u.addEventListener("touchend",function(e){r.checkTimeout&&clearTimeout(r.checkTimeout),r.moving&&r.endMove(e)})},MoveColumns.prototype.startMove=function(e,t){var o=t.getElement();this.moving=t,this.startX=(this.touchMove?e.touches[0].pageX:e.pageX)-Tabulator.prototype.helpers.elOffset(o).left,this.table.element.classList.add("tabulator-block-select"),this.placeholderElement.style.width=t.getWidth()+"px",this.placeholderElement.style.height=t.getHeight()+"px",o.parentNode.insertBefore(this.placeholderElement,o),o.parentNode.removeChild(o),this.hoverElement=o.cloneNode(!0),this.hoverElement.classList.add("tabulator-moving"),this.table.columnManager.getElement().appendChild(this.hoverElement),this.hoverElement.style.left="0",this.hoverElement.style.bottom="0",this.touchMove||(this._bindMouseMove(),document.body.addEventListener("mousemove",this.moveHover),document.body.addEventListener("mouseup",this.endMove)),this.moveHover(e)},MoveColumns.prototype._bindMouseMove=function(){this.table.columnManager.columnsByIndex.forEach(function(e){e.modules.moveColumn.mousemove&&e.getElement().addEventListener("mousemove",e.modules.moveColumn.mousemove)})},MoveColumns.prototype._unbindMouseMove=function(){this.table.columnManager.columnsByIndex.forEach(function(e){e.modules.moveColumn.mousemove&&e.getElement().removeEventListener("mousemove",e.modules.moveColumn.mousemove)})},MoveColumns.prototype.moveColumn=function(e,t){var o=this.moving.getCells();this.toCol=e,this.toColAfter=t,t?e.getCells().forEach(function(e,t){var n=e.getElement();n.parentNode.insertBefore(o[t].getElement(),n.nextSibling)}):e.getCells().forEach(function(e,t){var n=e.getElement();n.parentNode.insertBefore(o[t].getElement(),n)})},MoveColumns.prototype.endMove=function(e){(1===e.which||this.touchMove)&&(this._unbindMouseMove(),this.placeholderElement.parentNode.insertBefore(this.moving.getElement(),this.placeholderElement.nextSibling),this.placeholderElement.parentNode.removeChild(this.placeholderElement),this.hoverElement.parentNode.removeChild(this.hoverElement),this.table.element.classList.remove("tabulator-block-select"),this.toCol&&this.table.columnManager.moveColumnActual(this.moving,this.toCol,this.toColAfter),this.moving=!1,this.toCol=!1,this.toColAfter=!1,this.touchMove||(document.body.removeEventListener("mousemove",this.moveHover),document.body.removeEventListener("mouseup",this.endMove)))},MoveColumns.prototype.moveHover=function(e){var t,o=this,n=o.table.columnManager.getElement(),l=n.scrollLeft,i=(o.touchMove?e.touches[0].pageX:e.pageX)-Tabulator.prototype.helpers.elOffset(n).left+l;o.hoverElement.style.left=i-o.startX+"px",i-l<o.autoScrollMargin&&(o.autoScrollTimeout||(o.autoScrollTimeout=setTimeout(function(){t=Math.max(0,l-5),o.table.rowManager.getElement().scrollLeft=t,o.autoScrollTimeout=!1},1))),l+n.clientWidth-i<o.autoScrollMargin&&(o.autoScrollTimeout||(o.autoScrollTimeout=setTimeout(function(){t=Math.min(n.clientWidth,l+5),o.table.rowManager.getElement().scrollLeft=t,o.autoScrollTimeout=!1},1)))},Tabulator.prototype.registerModule("moveColumn",MoveColumns);
\ No newline at end of file
diff --git a/admin/js/vendors/tabulator/js/modules/moveable_rows.js b/admin/js/vendors/tabulator/js/modules/moveable_rows.js
new file mode 100644 (file)
index 0000000..1b165a4
--- /dev/null
@@ -0,0 +1,636 @@
+var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
+
+/* Tabulator v4.7.0 (c) Oliver Folkerd */
+
+var MoveRows = function MoveRows(table) {
+
+       this.table = table; //hold Tabulator object
+       this.placeholderElement = this.createPlaceholderElement();
+       this.hoverElement = false; //floating row header element
+       this.checkTimeout = false; //click check timeout holder
+       this.checkPeriod = 150; //period to wait on mousedown to consider this a move and not a click
+       this.moving = false; //currently moving row
+       this.toRow = false; //destination row
+       this.toRowAfter = false; //position of moving row relative to the desitnation row
+       this.hasHandle = false; //row has handle instead of fully movable row
+       this.startY = 0; //starting Y position within header element
+       this.startX = 0; //starting X position within header element
+
+       this.moveHover = this.moveHover.bind(this);
+       this.endMove = this.endMove.bind(this);
+       this.tableRowDropEvent = false;
+
+       this.touchMove = false;
+
+       this.connection = false;
+       this.connectionSelectorsTables = false;
+       this.connectionSelectorsElements = false;
+       this.connectionElements = [];
+       this.connections = [];
+
+       this.connectedTable = false;
+       this.connectedRow = false;
+};
+
+MoveRows.prototype.createPlaceholderElement = function () {
+       var el = document.createElement("div");
+
+       el.classList.add("tabulator-row");
+       el.classList.add("tabulator-row-placeholder");
+
+       return el;
+};
+
+MoveRows.prototype.initialize = function (handle) {
+       this.connectionSelectorsTables = this.table.options.movableRowsConnectedTables;
+       this.connectionSelectorsElements = this.table.options.movableRowsConnectedElements;
+
+       this.connection = this.connectionSelectorsTables || this.connectionSelectorsElements;
+};
+
+MoveRows.prototype.setHandle = function (handle) {
+       this.hasHandle = handle;
+};
+
+MoveRows.prototype.initializeGroupHeader = function (group) {
+       var self = this,
+           config = {},
+           rowEl;
+
+       //inter table drag drop
+       config.mouseup = function (e) {
+               self.tableRowDrop(e, row);
+       }.bind(self);
+
+       //same table drag drop
+       config.mousemove = function (e) {
+               if (e.pageY - Tabulator.prototype.helpers.elOffset(group.element).top + self.table.rowManager.element.scrollTop > group.getHeight() / 2) {
+                       if (self.toRow !== group || !self.toRowAfter) {
+                               var rowEl = group.getElement();
+                               rowEl.parentNode.insertBefore(self.placeholderElement, rowEl.nextSibling);
+                               self.moveRow(group, true);
+                       }
+               } else {
+                       if (self.toRow !== group || self.toRowAfter) {
+                               var rowEl = group.getElement();
+                               if (rowEl.previousSibling) {
+                                       rowEl.parentNode.insertBefore(self.placeholderElement, rowEl);
+                                       self.moveRow(group, false);
+                               }
+                       }
+               }
+       }.bind(self);
+
+       group.modules.moveRow = config;
+};
+
+MoveRows.prototype.initializeRow = function (row) {
+       var self = this,
+           config = {},
+           rowEl;
+
+       //inter table drag drop
+       config.mouseup = function (e) {
+               self.tableRowDrop(e, row);
+       }.bind(self);
+
+       //same table drag drop
+       config.mousemove = function (e) {
+               if (e.pageY - Tabulator.prototype.helpers.elOffset(row.element).top + self.table.rowManager.element.scrollTop > row.getHeight() / 2) {
+                       if (self.toRow !== row || !self.toRowAfter) {
+                               var rowEl = row.getElement();
+                               rowEl.parentNode.insertBefore(self.placeholderElement, rowEl.nextSibling);
+                               self.moveRow(row, true);
+                       }
+               } else {
+                       if (self.toRow !== row || self.toRowAfter) {
+                               var rowEl = row.getElement();
+                               rowEl.parentNode.insertBefore(self.placeholderElement, rowEl);
+                               self.moveRow(row, false);
+                       }
+               }
+       }.bind(self);
+
+       if (!this.hasHandle) {
+
+               rowEl = row.getElement();
+
+               rowEl.addEventListener("mousedown", function (e) {
+                       if (e.which === 1) {
+                               self.checkTimeout = setTimeout(function () {
+                                       self.startMove(e, row);
+                               }, self.checkPeriod);
+                       }
+               });
+
+               rowEl.addEventListener("mouseup", function (e) {
+                       if (e.which === 1) {
+                               if (self.checkTimeout) {
+                                       clearTimeout(self.checkTimeout);
+                               }
+                       }
+               });
+
+               this.bindTouchEvents(row, row.getElement());
+       }
+
+       row.modules.moveRow = config;
+};
+
+MoveRows.prototype.initializeCell = function (cell) {
+       var self = this,
+           cellEl = cell.getElement();
+
+       cellEl.addEventListener("mousedown", function (e) {
+               if (e.which === 1) {
+                       self.checkTimeout = setTimeout(function () {
+                               self.startMove(e, cell.row);
+                       }, self.checkPeriod);
+               }
+       });
+
+       cellEl.addEventListener("mouseup", function (e) {
+               if (e.which === 1) {
+                       if (self.checkTimeout) {
+                               clearTimeout(self.checkTimeout);
+                       }
+               }
+       });
+
+       this.bindTouchEvents(cell.row, cell.getElement());
+};
+
+MoveRows.prototype.bindTouchEvents = function (row, element) {
+       var self = this,
+           startYMove = false,
+           //shifting center position of the cell
+       dir = false,
+           currentRow,
+           nextRow,
+           prevRow,
+           nextRowHeight,
+           prevRowHeight,
+           nextRowHeightLast,
+           prevRowHeightLast;
+
+       element.addEventListener("touchstart", function (e) {
+               self.checkTimeout = setTimeout(function () {
+                       self.touchMove = true;
+                       currentRow = row;
+                       nextRow = row.nextRow();
+                       nextRowHeight = nextRow ? nextRow.getHeight() / 2 : 0;
+                       prevRow = row.prevRow();
+                       prevRowHeight = prevRow ? prevRow.getHeight() / 2 : 0;
+                       nextRowHeightLast = 0;
+                       prevRowHeightLast = 0;
+                       startYMove = false;
+
+                       self.startMove(e, row);
+               }, self.checkPeriod);
+       }, { passive: true });
+       this.moving, this.toRow, this.toRowAfter;
+       element.addEventListener("touchmove", function (e) {
+
+               var halfCol, diff, moveToRow;
+
+               if (self.moving) {
+                       e.preventDefault();
+
+                       self.moveHover(e);
+
+                       if (!startYMove) {
+                               startYMove = e.touches[0].pageY;
+                       }
+
+                       diff = e.touches[0].pageY - startYMove;
+
+                       if (diff > 0) {
+                               if (nextRow && diff - nextRowHeightLast > nextRowHeight) {
+                                       moveToRow = nextRow;
+
+                                       if (moveToRow !== row) {
+                                               startYMove = e.touches[0].pageY;
+                                               moveToRow.getElement().parentNode.insertBefore(self.placeholderElement, moveToRow.getElement().nextSibling);
+                                               self.moveRow(moveToRow, true);
+                                       }
+                               }
+                       } else {
+                               if (prevRow && -diff - prevRowHeightLast > prevRowHeight) {
+                                       moveToRow = prevRow;
+
+                                       if (moveToRow !== row) {
+                                               startYMove = e.touches[0].pageY;
+                                               moveToRow.getElement().parentNode.insertBefore(self.placeholderElement, moveToRow.getElement());
+                                               self.moveRow(moveToRow, false);
+                                       }
+                               }
+                       }
+
+                       if (moveToRow) {
+                               currentRow = moveToRow;
+                               nextRow = moveToRow.nextRow();
+                               nextRowHeightLast = nextRowHeight;
+                               nextRowHeight = nextRow ? nextRow.getHeight() / 2 : 0;
+                               prevRow = moveToRow.prevRow();
+                               prevRowHeightLast = prevRowHeight;
+                               prevRowHeight = prevRow ? prevRow.getHeight() / 2 : 0;
+                       }
+               }
+       });
+
+       element.addEventListener("touchend", function (e) {
+               if (self.checkTimeout) {
+                       clearTimeout(self.checkTimeout);
+               }
+               if (self.moving) {
+                       self.endMove(e);
+                       self.touchMove = false;
+               }
+       });
+};
+
+MoveRows.prototype._bindMouseMove = function () {
+       var self = this;
+
+       self.table.rowManager.getDisplayRows().forEach(function (row) {
+               if ((row.type === "row" || row.type === "group") && row.modules.moveRow.mousemove) {
+                       row.getElement().addEventListener("mousemove", row.modules.moveRow.mousemove);
+               }
+       });
+};
+
+MoveRows.prototype._unbindMouseMove = function () {
+       var self = this;
+
+       self.table.rowManager.getDisplayRows().forEach(function (row) {
+               if ((row.type === "row" || row.type === "group") && row.modules.moveRow.mousemove) {
+                       row.getElement().removeEventListener("mousemove", row.modules.moveRow.mousemove);
+               }
+       });
+};
+
+MoveRows.prototype.startMove = function (e, row) {
+       var element = row.getElement();
+
+       this.setStartPosition(e, row);
+
+       this.moving = row;
+
+       this.table.element.classList.add("tabulator-block-select");
+
+       //create placeholder
+       this.placeholderElement.style.width = row.getWidth() + "px";
+       this.placeholderElement.style.height = row.getHeight() + "px";
+
+       if (!this.connection) {
+               element.parentNode.insertBefore(this.placeholderElement, element);
+               element.parentNode.removeChild(element);
+       } else {
+               this.table.element.classList.add("tabulator-movingrow-sending");
+               this.connectToTables(row);
+       }
+
+       //create hover element
+       this.hoverElement = element.cloneNode(true);
+       this.hoverElement.classList.add("tabulator-moving");
+
+       if (this.connection) {
+               document.body.appendChild(this.hoverElement);
+               this.hoverElement.style.left = "0";
+               this.hoverElement.style.top = "0";
+               this.hoverElement.style.width = this.table.element.clientWidth + "px";
+               this.hoverElement.style.whiteSpace = "nowrap";
+               this.hoverElement.style.overflow = "hidden";
+               this.hoverElement.style.pointerEvents = "none";
+       } else {
+               this.table.rowManager.getTableElement().appendChild(this.hoverElement);
+
+               this.hoverElement.style.left = "0";
+               this.hoverElement.style.top = "0";
+
+               this._bindMouseMove();
+       }
+
+       document.body.addEventListener("mousemove", this.moveHover);
+       document.body.addEventListener("mouseup", this.endMove);
+
+       this.moveHover(e);
+};
+
+MoveRows.prototype.setStartPosition = function (e, row) {
+       var pageX = this.touchMove ? e.touches[0].pageX : e.pageX,
+           pageY = this.touchMove ? e.touches[0].pageY : e.pageY,
+           element,
+           position;
+
+       element = row.getElement();
+       if (this.connection) {
+               position = element.getBoundingClientRect();
+
+               this.startX = position.left - pageX + window.pageXOffset;
+               this.startY = position.top - pageY + window.pageYOffset;
+       } else {
+               this.startY = pageY - element.getBoundingClientRect().top;
+       }
+};
+
+MoveRows.prototype.endMove = function (e) {
+       if (!e || e.which === 1 || this.touchMove) {
+               this._unbindMouseMove();
+
+               if (!this.connection) {
+                       this.placeholderElement.parentNode.insertBefore(this.moving.getElement(), this.placeholderElement.nextSibling);
+                       this.placeholderElement.parentNode.removeChild(this.placeholderElement);
+               }
+
+               this.hoverElement.parentNode.removeChild(this.hoverElement);
+
+               this.table.element.classList.remove("tabulator-block-select");
+
+               if (this.toRow) {
+                       this.table.rowManager.moveRow(this.moving, this.toRow, this.toRowAfter);
+               }
+
+               this.moving = false;
+               this.toRow = false;
+               this.toRowAfter = false;
+
+               document.body.removeEventListener("mousemove", this.moveHover);
+               document.body.removeEventListener("mouseup", this.endMove);
+
+               if (this.connection) {
+                       this.table.element.classList.remove("tabulator-movingrow-sending");
+                       this.disconnectFromTables();
+               }
+       }
+};
+
+MoveRows.prototype.moveRow = function (row, after) {
+       this.toRow = row;
+       this.toRowAfter = after;
+};
+
+MoveRows.prototype.moveHover = function (e) {
+       if (this.connection) {
+               this.moveHoverConnections.call(this, e);
+       } else {
+               this.moveHoverTable.call(this, e);
+       }
+};
+
+MoveRows.prototype.moveHoverTable = function (e) {
+       var rowHolder = this.table.rowManager.getElement(),
+           scrollTop = rowHolder.scrollTop,
+           yPos = (this.touchMove ? e.touches[0].pageY : e.pageY) - rowHolder.getBoundingClientRect().top + scrollTop,
+           scrollPos;
+
+       this.hoverElement.style.top = yPos - this.startY + "px";
+};
+
+MoveRows.prototype.moveHoverConnections = function (e) {
+       this.hoverElement.style.left = this.startX + (this.touchMove ? e.touches[0].pageX : e.pageX) + "px";
+       this.hoverElement.style.top = this.startY + (this.touchMove ? e.touches[0].pageY : e.pageY) + "px";
+};
+
+MoveRows.prototype.elementRowDrop = function (e, element, row) {
+       if (this.table.options.movableRowsElementDrop) {
+               this.table.options.movableRowsElementDrop(e, element, row ? row.getComponent() : false);
+       }
+};
+
+//establish connection with other tables
+MoveRows.prototype.connectToTables = function (row) {
+       var _this = this;
+
+       var connectionTables;
+
+       if (this.connectionSelectorsTables) {
+               connectionTables = this.table.modules.comms.getConnections(this.connectionSelectorsTables);
+
+               this.table.options.movableRowsSendingStart.call(this.table, connectionTables);
+
+               this.table.modules.comms.send(this.connectionSelectorsTables, "moveRow", "connect", {
+                       row: row
+               });
+       }
+
+       if (this.connectionSelectorsElements) {
+
+               this.connectionElements = [];
+
+               if (!Array.isArray(this.connectionSelectorsElements)) {
+                       this.connectionSelectorsElements = [this.connectionSelectorsElements];
+               }
+
+               this.connectionSelectorsElements.forEach(function (query) {
+                       if (typeof query === "string") {
+                               _this.connectionElements = _this.connectionElements.concat(Array.prototype.slice.call(document.querySelectorAll(query)));
+                       } else {
+                               _this.connectionElements.push(query);
+                       }
+               });
+
+               this.connectionElements.forEach(function (element) {
+                       var dropEvent = function dropEvent(e) {
+                               _this.elementRowDrop(e, element, _this.moving);
+                       };
+
+                       element.addEventListener("mouseup", dropEvent);
+                       element.tabulatorElementDropEvent = dropEvent;
+
+                       element.classList.add("tabulator-movingrow-receiving");
+               });
+       }
+};
+
+//disconnect from other tables
+MoveRows.prototype.disconnectFromTables = function () {
+       var connectionTables;
+
+       if (this.connectionSelectorsTables) {
+               connectionTables = this.table.modules.comms.getConnections(this.connectionSelectorsTables);
+
+               this.table.options.movableRowsSendingStop.call(this.table, connectionTables);
+
+               this.table.modules.comms.send(this.connectionSelectorsTables, "moveRow", "disconnect");
+       }
+
+       this.connectionElements.forEach(function (element) {
+               element.classList.remove("tabulator-movingrow-receiving");
+               element.removeEventListener("mouseup", element.tabulatorElementDropEvent);
+               delete element.tabulatorElementDropEvent;
+       });
+};
+
+//accept incomming connection
+MoveRows.prototype.connect = function (table, row) {
+       var self = this;
+       if (!this.connectedTable) {
+               this.connectedTable = table;
+               this.connectedRow = row;
+
+               this.table.element.classList.add("tabulator-movingrow-receiving");
+
+               self.table.rowManager.getDisplayRows().forEach(function (row) {
+                       if (row.type === "row" && row.modules.moveRow && row.modules.moveRow.mouseup) {
+                               row.getElement().addEventListener("mouseup", row.modules.moveRow.mouseup);
+                       }
+               });
+
+               self.tableRowDropEvent = self.tableRowDrop.bind(self);
+
+               self.table.element.addEventListener("mouseup", self.tableRowDropEvent);
+
+               this.table.options.movableRowsReceivingStart.call(this.table, row, table);
+
+               return true;
+       } else {
+               console.warn("Move Row Error - Table cannot accept connection, already connected to table:", this.connectedTable);
+               return false;
+       }
+};
+
+//close incomming connection
+MoveRows.prototype.disconnect = function (table) {
+       var self = this;
+       if (table === this.connectedTable) {
+               this.connectedTable = false;
+               this.connectedRow = false;
+
+               this.table.element.classList.remove("tabulator-movingrow-receiving");
+
+               self.table.rowManager.getDisplayRows().forEach(function (row) {
+                       if (row.type === "row" && row.modules.moveRow && row.modules.moveRow.mouseup) {
+                               row.getElement().removeEventListener("mouseup", row.modules.moveRow.mouseup);
+                       }
+               });
+
+               self.table.element.removeEventListener("mouseup", self.tableRowDropEvent);
+
+               this.table.options.movableRowsReceivingStop.call(this.table, table);
+       } else {
+               console.warn("Move Row Error - trying to disconnect from non connected table");
+       }
+};
+
+MoveRows.prototype.dropComplete = function (table, row, success) {
+       var sender = false;
+
+       if (success) {
+
+               switch (_typeof(this.table.options.movableRowsSender)) {
+                       case "string":
+                               sender = this.senders[this.table.options.movableRowsSender];
+                               break;
+
+                       case "function":
+                               sender = this.table.options.movableRowsSender;
+                               break;
+               }
+
+               if (sender) {
+                       sender.call(this, this.moving.getComponent(), row ? row.getComponent() : undefined, table);
+               } else {
+                       if (this.table.options.movableRowsSender) {
+                               console.warn("Mover Row Error - no matching sender found:", this.table.options.movableRowsSender);
+                       }
+               }
+
+               this.table.options.movableRowsSent.call(this.table, this.moving.getComponent(), row ? row.getComponent() : undefined, table);
+       } else {
+               this.table.options.movableRowsSentFailed.call(this.table, this.moving.getComponent(), row ? row.getComponent() : undefined, table);
+       }
+
+       this.endMove();
+};
+
+MoveRows.prototype.tableRowDrop = function (e, row) {
+       var receiver = false,
+           success = false;
+
+       console.trace("drop");
+
+       e.stopImmediatePropagation();
+
+       switch (_typeof(this.table.options.movableRowsReceiver)) {
+               case "string":
+                       receiver = this.receivers[this.table.options.movableRowsReceiver];
+                       break;
+
+               case "function":
+                       receiver = this.table.options.movableRowsReceiver;
+                       break;
+       }
+
+       if (receiver) {
+               success = receiver.call(this, this.connectedRow.getComponent(), row ? row.getComponent() : undefined, this.connectedTable);
+       } else {
+               console.warn("Mover Row Error - no matching receiver found:", this.table.options.movableRowsReceiver);
+       }
+
+       if (success) {
+               this.table.options.movableRowsReceived.call(this.table, this.connectedRow.getComponent(), row ? row.getComponent() : undefined, this.connectedTable);
+       } else {
+               this.table.options.movableRowsReceivedFailed.call(this.table, this.connectedRow.getComponent(), row ? row.getComponent() : undefined, this.connectedTable);
+       }
+
+       this.table.modules.comms.send(this.connectedTable, "moveRow", "dropcomplete", {
+               row: row,
+               success: success
+       });
+};
+
+MoveRows.prototype.receivers = {
+       insert: function insert(fromRow, toRow, fromTable) {
+               this.table.addRow(fromRow.getData(), undefined, toRow);
+               return true;
+       },
+
+       add: function add(fromRow, toRow, fromTable) {
+               this.table.addRow(fromRow.getData());
+               return true;
+       },
+
+       update: function update(fromRow, toRow, fromTable) {
+               if (toRow) {
+                       toRow.update(fromRow.getData());
+                       return true;
+               }
+
+               return false;
+       },
+
+       replace: function replace(fromRow, toRow, fromTable) {
+               if (toRow) {
+                       this.table.addRow(fromRow.getData(), undefined, toRow);
+                       toRow.delete();
+                       return true;
+               }
+
+               return false;
+       }
+};
+
+MoveRows.prototype.senders = {
+       delete: function _delete(fromRow, toRow, toTable) {
+               fromRow.delete();
+       }
+};
+
+MoveRows.prototype.commsReceived = function (table, action, data) {
+       switch (action) {
+               case "connect":
+                       return this.connect(table, data.row);
+                       break;
+
+               case "disconnect":
+                       return this.disconnect(table);
+                       break;
+
+               case "dropcomplete":
+                       return this.dropComplete(table, data.row, data.success);
+                       break;
+       }
+};
+
+Tabulator.prototype.registerModule("moveRow", MoveRows);
\ No newline at end of file
diff --git a/admin/js/vendors/tabulator/js/modules/moveable_rows.min.js b/admin/js/vendors/tabulator/js/modules/moveable_rows.min.js
new file mode 100644 (file)
index 0000000..f928535
--- /dev/null
@@ -0,0 +1,2 @@
+/* Tabulator v4.7.0 (c) Oliver Folkerd */
+var _typeof="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},MoveRows=function(e){this.table=e,this.placeholderElement=this.createPlaceholderElement(),this.hoverElement=!1,this.checkTimeout=!1,this.checkPeriod=150,this.moving=!1,this.toRow=!1,this.toRowAfter=!1,this.hasHandle=!1,this.startY=0,this.startX=0,this.moveHover=this.moveHover.bind(this),this.endMove=this.endMove.bind(this),this.tableRowDropEvent=!1,this.touchMove=!1,this.connection=!1,this.connectionSelectorsTables=!1,this.connectionSelectorsElements=!1,this.connectionElements=[],this.connections=[],this.connectedTable=!1,this.connectedRow=!1};MoveRows.prototype.createPlaceholderElement=function(){var e=document.createElement("div");return e.classList.add("tabulator-row"),e.classList.add("tabulator-row-placeholder"),e},MoveRows.prototype.initialize=function(e){this.connectionSelectorsTables=this.table.options.movableRowsConnectedTables,this.connectionSelectorsElements=this.table.options.movableRowsConnectedElements,this.connection=this.connectionSelectorsTables||this.connectionSelectorsElements},MoveRows.prototype.setHandle=function(e){this.hasHandle=e},MoveRows.prototype.initializeGroupHeader=function(e){var t=this,o={};o.mouseup=function(e){t.tableRowDrop(e,row)}.bind(t),o.mousemove=function(o){if(o.pageY-Tabulator.prototype.helpers.elOffset(e.element).top+t.table.rowManager.element.scrollTop>e.getHeight()/2){if(t.toRow!==e||!t.toRowAfter){var n=e.getElement();n.parentNode.insertBefore(t.placeholderElement,n.nextSibling),t.moveRow(e,!0)}}else if(t.toRow!==e||t.toRowAfter){var n=e.getElement();n.previousSibling&&(n.parentNode.insertBefore(t.placeholderElement,n),t.moveRow(e,!1))}}.bind(t),e.modules.moveRow=o},MoveRows.prototype.initializeRow=function(e){var t,o=this,n={};n.mouseup=function(t){o.tableRowDrop(t,e)}.bind(o),n.mousemove=function(t){if(t.pageY-Tabulator.prototype.helpers.elOffset(e.element).top+o.table.rowManager.element.scrollTop>e.getHeight()/2){if(o.toRow!==e||!o.toRowAfter){var n=e.getElement();n.parentNode.insertBefore(o.placeholderElement,n.nextSibling),o.moveRow(e,!0)}}else if(o.toRow!==e||o.toRowAfter){var n=e.getElement();n.parentNode.insertBefore(o.placeholderElement,n),o.moveRow(e,!1)}}.bind(o),this.hasHandle||(t=e.getElement(),t.addEventListener("mousedown",function(t){1===t.which&&(o.checkTimeout=setTimeout(function(){o.startMove(t,e)},o.checkPeriod))}),t.addEventListener("mouseup",function(e){1===e.which&&o.checkTimeout&&clearTimeout(o.checkTimeout)}),this.bindTouchEvents(e,e.getElement())),e.modules.moveRow=n},MoveRows.prototype.initializeCell=function(e){var t=this,o=e.getElement();o.addEventListener("mousedown",function(o){1===o.which&&(t.checkTimeout=setTimeout(function(){t.startMove(o,e.row)},t.checkPeriod))}),o.addEventListener("mouseup",function(e){1===e.which&&t.checkTimeout&&clearTimeout(t.checkTimeout)}),this.bindTouchEvents(e.row,e.getElement())},MoveRows.prototype.bindTouchEvents=function(e,t){var o,n,s,i,l,c,r,a=this,h=!1;t.addEventListener("touchstart",function(t){a.checkTimeout=setTimeout(function(){a.touchMove=!0,o=e,n=e.nextRow(),i=n?n.getHeight()/2:0,s=e.prevRow(),l=s?s.getHeight()/2:0,c=0,r=0,h=!1,a.startMove(t,e)},a.checkPeriod)},{passive:!0}),this.moving,this.toRow,this.toRowAfter,t.addEventListener("touchmove",function(t){var m,v;a.moving&&(t.preventDefault(),a.moveHover(t),h||(h=t.touches[0].pageY),m=t.touches[0].pageY-h,m>0?n&&m-c>i&&(v=n)!==e&&(h=t.touches[0].pageY,v.getElement().parentNode.insertBefore(a.placeholderElement,v.getElement().nextSibling),a.moveRow(v,!0)):s&&-m-r>l&&(v=s)!==e&&(h=t.touches[0].pageY,v.getElement().parentNode.insertBefore(a.placeholderElement,v.getElement()),a.moveRow(v,!1)),v&&(o=v,n=v.nextRow(),c=i,i=n?n.getHeight()/2:0,s=v.prevRow(),r=l,l=s?s.getHeight()/2:0))}),t.addEventListener("touchend",function(e){a.checkTimeout&&clearTimeout(a.checkTimeout),a.moving&&(a.endMove(e),a.touchMove=!1)})},MoveRows.prototype._bindMouseMove=function(){this.table.rowManager.getDisplayRows().forEach(function(e){"row"!==e.type&&"group"!==e.type||!e.modules.moveRow.mousemove||e.getElement().addEventListener("mousemove",e.modules.moveRow.mousemove)})},MoveRows.prototype._unbindMouseMove=function(){this.table.rowManager.getDisplayRows().forEach(function(e){"row"!==e.type&&"group"!==e.type||!e.modules.moveRow.mousemove||e.getElement().removeEventListener("mousemove",e.modules.moveRow.mousemove)})},MoveRows.prototype.startMove=function(e,t){var o=t.getElement();this.setStartPosition(e,t),this.moving=t,this.table.element.classList.add("tabulator-block-select"),this.placeholderElement.style.width=t.getWidth()+"px",this.placeholderElement.style.height=t.getHeight()+"px",this.connection?(this.table.element.classList.add("tabulator-movingrow-sending"),this.connectToTables(t)):(o.parentNode.insertBefore(this.placeholderElement,o),o.parentNode.removeChild(o)),this.hoverElement=o.cloneNode(!0),this.hoverElement.classList.add("tabulator-moving"),this.connection?(document.body.appendChild(this.hoverElement),this.hoverElement.style.left="0",this.hoverElement.style.top="0",this.hoverElement.style.width=this.table.element.clientWidth+"px",this.hoverElement.style.whiteSpace="nowrap",this.hoverElement.style.overflow="hidden",this.hoverElement.style.pointerEvents="none"):(this.table.rowManager.getTableElement().appendChild(this.hoverElement),this.hoverElement.style.left="0",this.hoverElement.style.top="0",this._bindMouseMove()),document.body.addEventListener("mousemove",this.moveHover),document.body.addEventListener("mouseup",this.endMove),this.moveHover(e)},MoveRows.prototype.setStartPosition=function(e,t){var o,n,s=this.touchMove?e.touches[0].pageX:e.pageX,i=this.touchMove?e.touches[0].pageY:e.pageY;o=t.getElement(),this.connection?(n=o.getBoundingClientRect(),this.startX=n.left-s+window.pageXOffset,this.startY=n.top-i+window.pageYOffset):this.startY=i-o.getBoundingClientRect().top},MoveRows.prototype.endMove=function(e){e&&1!==e.which&&!this.touchMove||(this._unbindMouseMove(),this.connection||(this.placeholderElement.parentNode.insertBefore(this.moving.getElement(),this.placeholderElement.nextSibling),this.placeholderElement.parentNode.removeChild(this.placeholderElement)),this.hoverElement.parentNode.removeChild(this.hoverElement),this.table.element.classList.remove("tabulator-block-select"),this.toRow&&this.table.rowManager.moveRow(this.moving,this.toRow,this.toRowAfter),this.moving=!1,this.toRow=!1,this.toRowAfter=!1,document.body.removeEventListener("mousemove",this.moveHover),document.body.removeEventListener("mouseup",this.endMove),this.connection&&(this.table.element.classList.remove("tabulator-movingrow-sending"),this.disconnectFromTables()))},MoveRows.prototype.moveRow=function(e,t){this.toRow=e,this.toRowAfter=t},MoveRows.prototype.moveHover=function(e){this.connection?this.moveHoverConnections.call(this,e):this.moveHoverTable.call(this,e)},MoveRows.prototype.moveHoverTable=function(e){var t=this.table.rowManager.getElement(),o=t.scrollTop,n=(this.touchMove?e.touches[0].pageY:e.pageY)-t.getBoundingClientRect().top+o;this.hoverElement.style.top=n-this.startY+"px"},MoveRows.prototype.moveHoverConnections=function(e){this.hoverElement.style.left=this.startX+(this.touchMove?e.touches[0].pageX:e.pageX)+"px",this.hoverElement.style.top=this.startY+(this.touchMove?e.touches[0].pageY:e.pageY)+"px"},MoveRows.prototype.elementRowDrop=function(e,t,o){this.table.options.movableRowsElementDrop&&this.table.options.movableRowsElementDrop(e,t,!!o&&o.getComponent())},MoveRows.prototype.connectToTables=function(e){var t,o=this;this.connectionSelectorsTables&&(t=this.table.modules.comms.getConnections(this.connectionSelectorsTables),this.table.options.movableRowsSendingStart.call(this.table,t),this.table.modules.comms.send(this.connectionSelectorsTables,"moveRow","connect",{row:e})),this.connectionSelectorsElements&&(this.connectionElements=[],Array.isArray(this.connectionSelectorsElements)||(this.connectionSelectorsElements=[this.connectionSelectorsElements]),this.connectionSelectorsElements.forEach(function(e){"string"==typeof e?o.connectionElements=o.connectionElements.concat(Array.prototype.slice.call(document.querySelectorAll(e))):o.connectionElements.push(e)}),this.connectionElements.forEach(function(e){var t=function(t){o.elementRowDrop(t,e,o.moving)};e.addEventListener("mouseup",t),e.tabulatorElementDropEvent=t,e.classList.add("tabulator-movingrow-receiving")}))},MoveRows.prototype.disconnectFromTables=function(){var e;this.connectionSelectorsTables&&(e=this.table.modules.comms.getConnections(this.connectionSelectorsTables),this.table.options.movableRowsSendingStop.call(this.table,e),this.table.modules.comms.send(this.connectionSelectorsTables,"moveRow","disconnect")),this.connectionElements.forEach(function(e){e.classList.remove("tabulator-movingrow-receiving"),e.removeEventListener("mouseup",e.tabulatorElementDropEvent),delete e.tabulatorElementDropEvent})},MoveRows.prototype.connect=function(e,t){var o=this;return this.connectedTable?(console.warn("Move Row Error - Table cannot accept connection, already connected to table:",this.connectedTable),!1):(this.connectedTable=e,this.connectedRow=t,this.table.element.classList.add("tabulator-movingrow-receiving"),o.table.rowManager.getDisplayRows().forEach(function(e){"row"===e.type&&e.modules.moveRow&&e.modules.moveRow.mouseup&&e.getElement().addEventListener("mouseup",e.modules.moveRow.mouseup)}),o.tableRowDropEvent=o.tableRowDrop.bind(o),o.table.element.addEventListener("mouseup",o.tableRowDropEvent),this.table.options.movableRowsReceivingStart.call(this.table,t,e),!0)},MoveRows.prototype.disconnect=function(e){var t=this;e===this.connectedTable?(this.connectedTable=!1,this.connectedRow=!1,this.table.element.classList.remove("tabulator-movingrow-receiving"),t.table.rowManager.getDisplayRows().forEach(function(e){"row"===e.type&&e.modules.moveRow&&e.modules.moveRow.mouseup&&e.getElement().removeEventListener("mouseup",e.modules.moveRow.mouseup)}),t.table.element.removeEventListener("mouseup",t.tableRowDropEvent),this.table.options.movableRowsReceivingStop.call(this.table,e)):console.warn("Move Row Error - trying to disconnect from non connected table")},MoveRows.prototype.dropComplete=function(e,t,o){var n=!1;if(o){switch(_typeof(this.table.options.movableRowsSender)){case"string":n=this.senders[this.table.options.movableRowsSender];break;case"function":n=this.table.options.movableRowsSender}n?n.call(this,this.moving.getComponent(),t?t.getComponent():void 0,e):this.table.options.movableRowsSender&&console.warn("Mover Row Error - no matching sender found:",this.table.options.movableRowsSender),this.table.options.movableRowsSent.call(this.table,this.moving.getComponent(),t?t.getComponent():void 0,e)}else this.table.options.movableRowsSentFailed.call(this.table,this.moving.getComponent(),t?t.getComponent():void 0,e);this.endMove()},MoveRows.prototype.tableRowDrop=function(e,t){var o=!1,n=!1;switch(console.trace("drop"),e.stopImmediatePropagation(),_typeof(this.table.options.movableRowsReceiver)){case"string":o=this.receivers[this.table.options.movableRowsReceiver];break;case"function":o=this.table.options.movableRowsReceiver}o?n=o.call(this,this.connectedRow.getComponent(),t?t.getComponent():void 0,this.connectedTable):console.warn("Mover Row Error - no matching receiver found:",this.table.options.movableRowsReceiver),n?this.table.options.movableRowsReceived.call(this.table,this.connectedRow.getComponent(),t?t.getComponent():void 0,this.connectedTable):this.table.options.movableRowsReceivedFailed.call(this.table,this.connectedRow.getComponent(),t?t.getComponent():void 0,this.connectedTable),this.table.modules.comms.send(this.connectedTable,"moveRow","dropcomplete",{row:t,success:n})},MoveRows.prototype.receivers={insert:function(e,t,o){return this.table.addRow(e.getData(),void 0,t),!0},add:function(e,t,o){return this.table.addRow(e.getData()),!0},update:function(e,t,o){return!!t&&(t.update(e.getData()),!0)},replace:function(e,t,o){return!!t&&(this.table.addRow(e.getData(),void 0,t),t.delete(),!0)}},MoveRows.prototype.senders={delete:function(e,t,o){e.delete()}},MoveRows.prototype.commsReceived=function(e,t,o){switch(t){case"connect":return this.connect(e,o.row);case"disconnect":return this.disconnect(e);case"dropcomplete":return this.dropComplete(e,o.row,o.success)}},Tabulator.prototype.registerModule("moveRow",MoveRows);
\ No newline at end of file
diff --git a/admin/js/vendors/tabulator/js/modules/mutator.js b/admin/js/vendors/tabulator/js/modules/mutator.js
new file mode 100644 (file)
index 0000000..e5b5dad
--- /dev/null
@@ -0,0 +1,116 @@
+var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
+
+/* Tabulator v4.7.0 (c) Oliver Folkerd */
+
+var Mutator = function Mutator(table) {
+       this.table = table; //hold Tabulator object
+       this.allowedTypes = ["", "data", "edit", "clipboard"]; //list of muatation types
+       this.enabled = true;
+};
+
+//initialize column mutator
+Mutator.prototype.initializeColumn = function (column) {
+       var self = this,
+           match = false,
+           config = {};
+
+       this.allowedTypes.forEach(function (type) {
+               var key = "mutator" + (type.charAt(0).toUpperCase() + type.slice(1)),
+                   mutator;
+
+               if (column.definition[key]) {
+                       mutator = self.lookupMutator(column.definition[key]);
+
+                       if (mutator) {
+                               match = true;
+
+                               config[key] = {
+                                       mutator: mutator,
+                                       params: column.definition[key + "Params"] || {}
+                               };
+                       }
+               }
+       });
+
+       if (match) {
+               column.modules.mutate = config;
+       }
+};
+
+Mutator.prototype.lookupMutator = function (value) {
+       var mutator = false;
+
+       //set column mutator
+       switch (typeof value === "undefined" ? "undefined" : _typeof(value)) {
+               case "string":
+                       if (this.mutators[value]) {
+                               mutator = this.mutators[value];
+                       } else {
+                               console.warn("Mutator Error - No such mutator found, ignoring: ", value);
+                       }
+                       break;
+
+               case "function":
+                       mutator = value;
+                       break;
+       }
+
+       return mutator;
+};
+
+//apply mutator to row
+Mutator.prototype.transformRow = function (data, type, updatedData) {
+       var self = this,
+           key = "mutator" + (type.charAt(0).toUpperCase() + type.slice(1)),
+           value;
+
+       if (this.enabled) {
+
+               self.table.columnManager.traverse(function (column) {
+                       var mutator, params, component;
+
+                       if (column.modules.mutate) {
+                               mutator = column.modules.mutate[key] || column.modules.mutate.mutator || false;
+
+                               if (mutator) {
+                                       value = column.getFieldValue(typeof updatedData !== "undefined" ? updatedData : data);
+
+                                       if (type == "data" || typeof value !== "undefined") {
+                                               component = column.getComponent();
+                                               params = typeof mutator.params === "function" ? mutator.params(value, data, type, component) : mutator.params;
+                                               column.setFieldValue(data, mutator.mutator(value, data, type, params, component));
+                                       }
+                               }
+                       }
+               });
+       }
+
+       return data;
+};
+
+//apply mutator to new cell value
+Mutator.prototype.transformCell = function (cell, value) {
+       var mutator = cell.column.modules.mutate.mutatorEdit || cell.column.modules.mutate.mutator || false,
+           tempData = {};
+
+       if (mutator) {
+               tempData = Object.assign(tempData, cell.row.getData());
+               cell.column.setFieldValue(tempData, value);
+               return mutator.mutator(value, tempData, "edit", mutator.params, cell.getComponent());
+       } else {
+               return value;
+       }
+};
+
+Mutator.prototype.enable = function () {
+       this.enabled = true;
+};
+
+Mutator.prototype.disable = function () {
+       this.enabled = false;
+};
+
+//default mutators
+Mutator.prototype.mutators = {};
+
+Tabulator.prototype.registerModule("mutator", Mutator);
\ No newline at end of file
diff --git a/admin/js/vendors/tabulator/js/modules/mutator.min.js b/admin/js/vendors/tabulator/js/modules/mutator.min.js
new file mode 100644 (file)
index 0000000..00005d1
--- /dev/null
@@ -0,0 +1,2 @@
+/* Tabulator v4.7.0 (c) Oliver Folkerd */
+var _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Mutator=function(t){this.table=t,this.allowedTypes=["","data","edit","clipboard"],this.enabled=!0};Mutator.prototype.initializeColumn=function(t){var o=this,e=!1,a={};this.allowedTypes.forEach(function(r){var u,n="mutator"+(r.charAt(0).toUpperCase()+r.slice(1));t.definition[n]&&(u=o.lookupMutator(t.definition[n]))&&(e=!0,a[n]={mutator:u,params:t.definition[n+"Params"]||{}})}),e&&(t.modules.mutate=a)},Mutator.prototype.lookupMutator=function(t){var o=!1;switch(void 0===t?"undefined":_typeof(t)){case"string":this.mutators[t]?o=this.mutators[t]:console.warn("Mutator Error - No such mutator found, ignoring: ",t);break;case"function":o=t}return o},Mutator.prototype.transformRow=function(t,o,e){var a,r=this,u="mutator"+(o.charAt(0).toUpperCase()+o.slice(1));return this.enabled&&r.table.columnManager.traverse(function(r){var n,i,s;r.modules.mutate&&(n=r.modules.mutate[u]||r.modules.mutate.mutator||!1)&&(a=r.getFieldValue(void 0!==e?e:t),"data"!=o&&void 0===a||(s=r.getComponent(),i="function"==typeof n.params?n.params(a,t,o,s):n.params,r.setFieldValue(t,n.mutator(a,t,o,i,s))))}),t},Mutator.prototype.transformCell=function(t,o){var e=t.column.modules.mutate.mutatorEdit||t.column.modules.mutate.mutator||!1,a={};return e?(a=Object.assign(a,t.row.getData()),t.column.setFieldValue(a,o),e.mutator(o,a,"edit",e.params,t.getComponent())):o},Mutator.prototype.enable=function(){this.enabled=!0},Mutator.prototype.disable=function(){this.enabled=!1},Mutator.prototype.mutators={},Tabulator.prototype.registerModule("mutator",Mutator);
\ No newline at end of file
diff --git a/admin/js/vendors/tabulator/js/modules/page.js b/admin/js/vendors/tabulator/js/modules/page.js
new file mode 100644 (file)
index 0000000..d37b814
--- /dev/null
@@ -0,0 +1,730 @@
+/* Tabulator v4.7.0 (c) Oliver Folkerd */
+
+var Page = function Page(table) {
+
+       this.table = table; //hold Tabulator object
+
+       this.mode = "local";
+       this.progressiveLoad = false;
+
+       this.size = 0;
+       this.page = 1;
+       this.count = 5;
+       this.max = 1;
+
+       this.displayIndex = 0; //index in display pipeline
+
+       this.initialLoad = true;
+
+       this.pageSizes = [];
+
+       this.dataReceivedNames = {};
+       this.dataSentNames = {};
+
+       this.createElements();
+};
+
+Page.prototype.createElements = function () {
+
+       var button;
+
+       this.element = document.createElement("span");
+       this.element.classList.add("tabulator-paginator");
+
+       this.pagesElement = document.createElement("span");
+       this.pagesElement.classList.add("tabulator-pages");
+
+       button = document.createElement("button");
+       button.classList.add("tabulator-page");
+       button.setAttribute("type", "button");
+       button.setAttribute("role", "button");
+       button.setAttribute("aria-label", "");
+       button.setAttribute("title", "");
+
+       this.firstBut = button.cloneNode(true);
+       this.firstBut.setAttribute("data-page", "first");
+
+       this.prevBut = button.cloneNode(true);
+       this.prevBut.setAttribute("data-page", "prev");
+
+       this.nextBut = button.cloneNode(true);
+       this.nextBut.setAttribute("data-page", "next");
+
+       this.lastBut = button.cloneNode(true);
+       this.lastBut.setAttribute("data-page", "last");
+
+       if (this.table.options.paginationSizeSelector) {
+               this.pageSizeSelect = document.createElement("select");
+               this.pageSizeSelect.classList.add("tabulator-page-size");
+       }
+};
+
+Page.prototype.generatePageSizeSelectList = function () {
+       var _this = this;
+
+       var pageSizes = [];
+
+       if (this.pageSizeSelect) {
+
+               if (Array.isArray(this.table.options.paginationSizeSelector)) {
+                       pageSizes = this.table.options.paginationSizeSelector;
+                       this.pageSizes = pageSizes;
+
+                       if (this.pageSizes.indexOf(this.size) == -1) {
+                               pageSizes.unshift(this.size);
+                       }
+               } else {
+
+                       if (this.pageSizes.indexOf(this.size) == -1) {
+                               pageSizes = [];
+
+                               for (var i = 1; i < 5; i++) {
+                                       pageSizes.push(this.size * i);
+                               }
+
+                               this.pageSizes = pageSizes;
+                       } else {
+                               pageSizes = this.pageSizes;
+                       }
+               }
+
+               while (this.pageSizeSelect.firstChild) {
+                       this.pageSizeSelect.removeChild(this.pageSizeSelect.firstChild);
+               }pageSizes.forEach(function (item) {
+                       var itemEl = document.createElement("option");
+                       itemEl.value = item;
+
+                       if (item === true) {
+                               _this.table.modules.localize.bind("pagination|all", function (value) {
+                                       itemEl.innerHTML = value;
+                               });
+                       } else {
+                               itemEl.innerHTML = item;
+                       }
+
+                       _this.pageSizeSelect.appendChild(itemEl);
+               });
+
+               this.pageSizeSelect.value = this.size;
+       }
+};
+
+//setup pageination
+Page.prototype.initialize = function (hidden) {
+       var self = this,
+           pageSelectLabel,
+           testElRow,
+           testElCell;
+
+       //update param names
+       this.dataSentNames = Object.assign({}, this.paginationDataSentNames);
+       this.dataSentNames = Object.assign(this.dataSentNames, this.table.options.paginationDataSent);
+
+       this.dataReceivedNames = Object.assign({}, this.paginationDataReceivedNames);
+       this.dataReceivedNames = Object.assign(this.dataReceivedNames, this.table.options.paginationDataReceived);
+
+       //build pagination element
+
+       //bind localizations
+       self.table.modules.localize.bind("pagination|first", function (value) {
+               self.firstBut.innerHTML = value;
+       });
+
+       self.table.modules.localize.bind("pagination|first_title", function (value) {
+               self.firstBut.setAttribute("aria-label", value);
+               self.firstBut.setAttribute("title", value);
+       });
+
+       self.table.modules.localize.bind("pagination|prev", function (value) {
+               self.prevBut.innerHTML = value;
+       });
+
+       self.table.modules.localize.bind("pagination|prev_title", function (value) {
+               self.prevBut.setAttribute("aria-label", value);
+               self.prevBut.setAttribute("title", value);
+       });
+
+       self.table.modules.localize.bind("pagination|next", function (value) {
+               self.nextBut.innerHTML = value;
+       });
+
+       self.table.modules.localize.bind("pagination|next_title", function (value) {
+               self.nextBut.setAttribute("aria-label", value);
+               self.nextBut.setAttribute("title", value);
+       });
+
+       self.table.modules.localize.bind("pagination|last", function (value) {
+               self.lastBut.innerHTML = value;
+       });
+
+       self.table.modules.localize.bind("pagination|last_title", function (value) {
+               self.lastBut.setAttribute("aria-label", value);
+               self.lastBut.setAttribute("title", value);
+       });
+
+       //click bindings
+       self.firstBut.addEventListener("click", function () {
+               self.setPage(1);
+       });
+
+       self.prevBut.addEventListener("click", function () {
+               self.previousPage();
+       });
+
+       self.nextBut.addEventListener("click", function () {
+               self.nextPage().then(function () {}).catch(function () {});
+       });
+
+       self.lastBut.addEventListener("click", function () {
+               self.setPage(self.max);
+       });
+
+       if (self.table.options.paginationElement) {
+               self.element = self.table.options.paginationElement;
+       }
+
+       if (this.pageSizeSelect) {
+               pageSelectLabel = document.createElement("label");
+
+               self.table.modules.localize.bind("pagination|page_size", function (value) {
+                       self.pageSizeSelect.setAttribute("aria-label", value);
+                       self.pageSizeSelect.setAttribute("title", value);
+                       pageSelectLabel.innerHTML = value;
+               });
+
+               self.element.appendChild(pageSelectLabel);
+               self.element.appendChild(self.pageSizeSelect);
+
+               self.pageSizeSelect.addEventListener("change", function (e) {
+                       self.setPageSize(self.pageSizeSelect.value == "true" ? true : self.pageSizeSelect.value);
+                       self.setPage(1).then(function () {}).catch(function () {});
+               });
+       }
+
+       //append to DOM
+       self.element.appendChild(self.firstBut);
+       self.element.appendChild(self.prevBut);
+       self.element.appendChild(self.pagesElement);
+       self.element.appendChild(self.nextBut);
+       self.element.appendChild(self.lastBut);
+
+       if (!self.table.options.paginationElement && !hidden) {
+               self.table.footerManager.append(self.element, self);
+       }
+
+       //set default values
+       self.mode = self.table.options.pagination;
+
+       if (self.table.options.paginationSize) {
+               self.size = self.table.options.paginationSize;
+       } else {
+               testElRow = document.createElement("div");
+               testElRow.classList.add("tabulator-row");
+               testElRow.style.visibility = hidden;
+
+               testElCell = document.createElement("div");
+               testElCell.classList.add("tabulator-cell");
+               testElCell.innerHTML = "Page Row Test";
+
+               testElRow.appendChild(testElCell);
+
+               self.table.rowManager.getTableElement().appendChild(testElRow);
+
+               self.size = Math.floor(self.table.rowManager.getElement().clientHeight / testElRow.offsetHeight);
+
+               self.table.rowManager.getTableElement().removeChild(testElRow);
+       }
+
+       // self.page = self.table.options.paginationInitialPage || 1;
+       self.count = self.table.options.paginationButtonCount;
+
+       self.generatePageSizeSelectList();
+};
+
+Page.prototype.initializeProgressive = function (mode) {
+       this.initialize(true);
+       this.mode = "progressive_" + mode;
+       this.progressiveLoad = true;
+};
+
+Page.prototype.setDisplayIndex = function (index) {
+       this.displayIndex = index;
+};
+
+Page.prototype.getDisplayIndex = function () {
+       return this.displayIndex;
+};
+
+//calculate maximum page from number of rows
+Page.prototype.setMaxRows = function (rowCount) {
+       if (!rowCount) {
+               this.max = 1;
+       } else {
+               this.max = this.size === true ? 1 : Math.ceil(rowCount / this.size);
+       }
+
+       if (this.page > this.max) {
+               this.page = this.max;
+       }
+};
+
+//reset to first page without triggering action
+Page.prototype.reset = function (force, columnsChanged) {
+       if (this.mode == "local" || force) {
+               this.page = 1;
+       }
+
+       if (columnsChanged) {
+               this.initialLoad = true;
+       }
+
+       return true;
+};
+
+//set the maxmum page
+Page.prototype.setMaxPage = function (max) {
+
+       max = parseInt(max);
+
+       this.max = max || 1;
+
+       if (this.page > this.max) {
+               this.page = this.max;
+               this.trigger();
+       }
+};
+
+//set current page number
+Page.prototype.setPage = function (page) {
+       var _this2 = this;
+
+       var self = this;
+
+       switch (page) {
+               case "first":
+                       return this.setPage(1);
+                       break;
+
+               case "prev":
+                       return this.previousPage();
+                       break;
+
+               case "next":
+                       return this.nextPage();
+                       break;
+
+               case "last":
+                       return this.setPage(this.max);
+                       break;
+       }
+
+       return new Promise(function (resolve, reject) {
+
+               page = parseInt(page);
+
+               if (page > 0 && page <= _this2.max) {
+                       _this2.page = page;
+                       _this2.trigger().then(function () {
+                               resolve();
+                       }).catch(function () {
+                               reject();
+                       });
+
+                       if (self.table.options.persistence && self.table.modExists("persistence", true) && self.table.modules.persistence.config.page) {
+                               self.table.modules.persistence.save("page");
+                       }
+               } else {
+                       console.warn("Pagination Error - Requested page is out of range of 1 - " + _this2.max + ":", page);
+                       reject();
+               }
+       });
+};
+
+Page.prototype.setPageToRow = function (row) {
+       var _this3 = this;
+
+       return new Promise(function (resolve, reject) {
+
+               var rows = _this3.table.rowManager.getDisplayRows(_this3.displayIndex - 1);
+               var index = rows.indexOf(row);
+
+               if (index > -1) {
+                       var page = _this3.size === true ? 1 : Math.ceil((index + 1) / _this3.size);
+
+                       _this3.setPage(page).then(function () {
+                               resolve();
+                       }).catch(function () {
+                               reject();
+                       });
+               } else {
+                       console.warn("Pagination Error - Requested row is not visible");
+                       reject();
+               }
+       });
+};
+
+Page.prototype.setPageSize = function (size) {
+       if (size !== true) {
+               size = parseInt(size);
+       }
+
+       if (size > 0) {
+               this.size = size;
+       }
+
+       if (this.pageSizeSelect) {
+               // this.pageSizeSelect.value = size;
+               this.generatePageSizeSelectList();
+       }
+
+       if (this.table.options.persistence && this.table.modExists("persistence", true) && this.table.modules.persistence.config.page) {
+               this.table.modules.persistence.save("page");
+       }
+};
+
+//setup the pagination buttons
+Page.prototype._setPageButtons = function () {
+       var self = this;
+
+       var leftSize = Math.floor((this.count - 1) / 2);
+       var rightSize = Math.ceil((this.count - 1) / 2);
+       var min = this.max - this.page + leftSize + 1 < this.count ? this.max - this.count + 1 : Math.max(this.page - leftSize, 1);
+       var max = this.page <= rightSize ? Math.min(this.count, this.max) : Math.min(this.page + rightSize, this.max);
+
+       while (self.pagesElement.firstChild) {
+               self.pagesElement.removeChild(self.pagesElement.firstChild);
+       }if (self.page == 1) {
+               self.firstBut.disabled = true;
+               self.prevBut.disabled = true;
+       } else {
+               self.firstBut.disabled = false;
+               self.prevBut.disabled = false;
+       }
+
+       if (self.page == self.max) {
+               self.lastBut.disabled = true;
+               self.nextBut.disabled = true;
+       } else {
+               self.lastBut.disabled = false;
+               self.nextBut.disabled = false;
+       }
+
+       for (var i = min; i <= max; i++) {
+               if (i > 0 && i <= self.max) {
+                       self.pagesElement.appendChild(self._generatePageButton(i));
+               }
+       }
+
+       this.footerRedraw();
+};
+
+Page.prototype._generatePageButton = function (page) {
+       var self = this,
+           button = document.createElement("button");
+
+       button.classList.add("tabulator-page");
+       if (page == self.page) {
+               button.classList.add("active");
+       }
+
+       button.setAttribute("type", "button");
+       button.setAttribute("role", "button");
+
+       self.table.modules.localize.bind("pagination|page_title", function (value) {
+               button.setAttribute("aria-label", value + " " + page);
+               button.setAttribute("title", value + " " + page);
+       });
+
+       button.setAttribute("data-page", page);
+       button.textContent = page;
+
+       button.addEventListener("click", function (e) {
+               self.setPage(page);
+       });
+
+       return button;
+};
+
+//previous page
+Page.prototype.previousPage = function () {
+       var _this4 = this;
+
+       return new Promise(function (resolve, reject) {
+               if (_this4.page > 1) {
+                       _this4.page--;
+                       _this4.trigger().then(function () {
+                               resolve();
+                       }).catch(function () {
+                               reject();
+                       });
+
+                       if (_this4.table.options.persistence && _this4.table.modExists("persistence", true) && _this4.table.modules.persistence.config.page) {
+                               _this4.table.modules.persistence.save("page");
+                       }
+               } else {
+                       console.warn("Pagination Error - Previous page would be less than page 1:", 0);
+                       reject();
+               }
+       });
+};
+
+//next page
+Page.prototype.nextPage = function () {
+       var _this5 = this;
+
+       return new Promise(function (resolve, reject) {
+               if (_this5.page < _this5.max) {
+                       _this5.page++;
+                       _this5.trigger().then(function () {
+                               resolve();
+                       }).catch(function () {
+                               reject();
+                       });
+
+                       if (_this5.table.options.persistence && _this5.table.modExists("persistence", true) && _this5.table.modules.persistence.config.page) {
+                               _this5.table.modules.persistence.save("page");
+                       }
+               } else {
+                       if (!_this5.progressiveLoad) {
+                               console.warn("Pagination Error - Next page would be greater than maximum page of " + _this5.max + ":", _this5.max + 1);
+                       }
+                       reject();
+               }
+       });
+};
+
+//return current page number
+Page.prototype.getPage = function () {
+       return this.page;
+};
+
+//return max page number
+Page.prototype.getPageMax = function () {
+       return this.max;
+};
+
+Page.prototype.getPageSize = function (size) {
+       return this.size;
+};
+
+Page.prototype.getMode = function () {
+       return this.mode;
+};
+
+//return appropriate rows for current page
+Page.prototype.getRows = function (data) {
+       var output, start, end;
+
+       if (this.mode == "local") {
+               output = [];
+
+               if (this.size === true) {
+                       start = 0;
+                       end = data.length - 1;
+               } else {
+                       start = this.size * (this.page - 1);
+                       end = start + parseInt(this.size);
+               }
+
+               this._setPageButtons();
+
+               for (var i = start; i < end; i++) {
+                       if (data[i]) {
+                               output.push(data[i]);
+                       }
+               }
+
+               return output;
+       } else {
+
+               this._setPageButtons();
+
+               return data.slice(0);
+       }
+};
+
+Page.prototype.trigger = function () {
+       var _this6 = this;
+
+       var left;
+
+       return new Promise(function (resolve, reject) {
+
+               switch (_this6.mode) {
+                       case "local":
+                               left = _this6.table.rowManager.scrollLeft;
+
+                               _this6.table.rowManager.refreshActiveData("page");
+                               _this6.table.rowManager.scrollHorizontal(left);
+
+                               _this6.table.options.pageLoaded.call(_this6.table, _this6.getPage());
+                               resolve();
+                               break;
+
+                       case "remote":
+                       case "progressive_load":
+                       case "progressive_scroll":
+                               _this6.table.modules.ajax.blockActiveRequest();
+                               _this6._getRemotePage().then(function () {
+                                       resolve();
+                               }).catch(function () {
+                                       reject();
+                               });
+                               break;
+
+                       default:
+                               console.warn("Pagination Error - no such pagination mode:", _this6.mode);
+                               reject();
+               }
+       });
+};
+
+Page.prototype._getRemotePage = function () {
+       var _this7 = this;
+
+       var self = this,
+           oldParams,
+           pageParams;
+
+       return new Promise(function (resolve, reject) {
+
+               if (!self.table.modExists("ajax", true)) {
+                       reject();
+               }
+
+               //record old params and restore after request has been made
+               oldParams = Tabulator.prototype.helpers.deepClone(self.table.modules.ajax.getParams() || {});
+               pageParams = self.table.modules.ajax.getParams();
+
+               //configure request params
+               pageParams[_this7.dataSentNames.page] = self.page;
+
+               //set page size if defined
+               if (_this7.size) {
+                       pageParams[_this7.dataSentNames.size] = _this7.size;
+               }
+
+               //set sort data if defined
+               if (_this7.table.options.ajaxSorting && _this7.table.modExists("sort")) {
+                       var sorters = self.table.modules.sort.getSort();
+
+                       sorters.forEach(function (item) {
+                               delete item.column;
+                       });
+
+                       pageParams[_this7.dataSentNames.sorters] = sorters;
+               }
+
+               //set filter data if defined
+               if (_this7.table.options.ajaxFiltering && _this7.table.modExists("filter")) {
+                       var filters = self.table.modules.filter.getFilters(true, true);
+                       pageParams[_this7.dataSentNames.filters] = filters;
+               }
+
+               self.table.modules.ajax.setParams(pageParams);
+
+               self.table.modules.ajax.sendRequest(_this7.progressiveLoad).then(function (data) {
+                       self._parseRemoteData(data);
+                       resolve();
+               }).catch(function (e) {
+                       reject();
+               });
+
+               self.table.modules.ajax.setParams(oldParams);
+       });
+};
+
+Page.prototype._parseRemoteData = function (data) {
+       var self = this,
+           left,
+           data,
+           margin;
+
+       if (typeof data[this.dataReceivedNames.last_page] === "undefined") {
+               console.warn("Remote Pagination Error - Server response missing '" + this.dataReceivedNames.last_page + "' property");
+       }
+
+       if (data[this.dataReceivedNames.data]) {
+               this.max = parseInt(data[this.dataReceivedNames.last_page]) || 1;
+
+               if (this.progressiveLoad) {
+                       switch (this.mode) {
+                               case "progressive_load":
+
+                                       if (this.page == 1) {
+                                               this.table.rowManager.setData(data[this.dataReceivedNames.data], false, this.initialLoad && this.page == 1);
+                                       } else {
+                                               this.table.rowManager.addRows(data[this.dataReceivedNames.data]);
+                                       }
+
+                                       if (this.page < this.max) {
+                                               setTimeout(function () {
+                                                       self.nextPage().then(function () {}).catch(function () {});
+                                               }, self.table.options.ajaxProgressiveLoadDelay);
+                                       }
+                                       break;
+
+                               case "progressive_scroll":
+                                       data = this.table.rowManager.getData().concat(data[this.dataReceivedNames.data]);
+
+                                       this.table.rowManager.setData(data, true, this.initialLoad && this.page == 1);
+
+                                       margin = this.table.options.ajaxProgressiveLoadScrollMargin || this.table.rowManager.element.clientHeight * 2;
+
+                                       if (self.table.rowManager.element.scrollHeight <= self.table.rowManager.element.clientHeight + margin) {
+                                               self.nextPage().then(function () {}).catch(function () {});
+                                       }
+                                       break;
+                       }
+               } else {
+                       left = this.table.rowManager.scrollLeft;
+
+                       this.table.rowManager.setData(data[this.dataReceivedNames.data], false, this.initialLoad && this.page == 1);
+
+                       this.table.rowManager.scrollHorizontal(left);
+
+                       this.table.columnManager.scrollHorizontal(left);
+
+                       this.table.options.pageLoaded.call(this.table, this.getPage());
+               }
+
+               this.initialLoad = false;
+       } else {
+               console.warn("Remote Pagination Error - Server response missing '" + this.dataReceivedNames.data + "' property");
+       }
+};
+
+//handle the footer element being redrawn
+Page.prototype.footerRedraw = function () {
+       var footer = this.table.footerManager.element;
+
+       if (Math.ceil(footer.clientWidth) - footer.scrollWidth < 0) {
+               this.pagesElement.style.display = 'none';
+       } else {
+               this.pagesElement.style.display = '';
+
+               if (Math.ceil(footer.clientWidth) - footer.scrollWidth < 0) {
+                       this.pagesElement.style.display = 'none';
+               }
+       }
+};
+
+//set the paramter names for pagination requests
+Page.prototype.paginationDataSentNames = {
+       "page": "page",
+       "size": "size",
+       "sorters": "sorters",
+       // "sort_dir":"sort_dir",
+       "filters": "filters"
+       // "filter_value":"filter_value",
+       // "filter_type":"filter_type",
+};
+
+//set the property names for pagination responses
+Page.prototype.paginationDataReceivedNames = {
+       "current_page": "current_page",
+       "last_page": "last_page",
+       "data": "data"
+};
+
+Tabulator.prototype.registerModule("page", Page);
\ No newline at end of file
diff --git a/admin/js/vendors/tabulator/js/modules/page.min.js b/admin/js/vendors/tabulator/js/modules/page.min.js
new file mode 100644 (file)
index 0000000..c2835ba
--- /dev/null
@@ -0,0 +1,2 @@
+/* Tabulator v4.7.0 (c) Oliver Folkerd */
+var Page=function(e){this.table=e,this.mode="local",this.progressiveLoad=!1,this.size=0,this.page=1,this.count=5,this.max=1,this.displayIndex=0,this.initialLoad=!0,this.pageSizes=[],this.dataReceivedNames={},this.dataSentNames={},this.createElements()};Page.prototype.createElements=function(){var e;this.element=document.createElement("span"),this.element.classList.add("tabulator-paginator"),this.pagesElement=document.createElement("span"),this.pagesElement.classList.add("tabulator-pages"),e=document.createElement("button"),e.classList.add("tabulator-page"),e.setAttribute("type","button"),e.setAttribute("role","button"),e.setAttribute("aria-label",""),e.setAttribute("title",""),this.firstBut=e.cloneNode(!0),this.firstBut.setAttribute("data-page","first"),this.prevBut=e.cloneNode(!0),this.prevBut.setAttribute("data-page","prev"),this.nextBut=e.cloneNode(!0),this.nextBut.setAttribute("data-page","next"),this.lastBut=e.cloneNode(!0),this.lastBut.setAttribute("data-page","last"),this.table.options.paginationSizeSelector&&(this.pageSizeSelect=document.createElement("select"),this.pageSizeSelect.classList.add("tabulator-page-size"))},Page.prototype.generatePageSizeSelectList=function(){var e=this,t=[];if(this.pageSizeSelect){if(Array.isArray(this.table.options.paginationSizeSelector))t=this.table.options.paginationSizeSelector,this.pageSizes=t,-1==this.pageSizes.indexOf(this.size)&&t.unshift(this.size);else if(-1==this.pageSizes.indexOf(this.size)){t=[];for(var a=1;a<5;a++)t.push(this.size*a);this.pageSizes=t}else t=this.pageSizes;for(;this.pageSizeSelect.firstChild;)this.pageSizeSelect.removeChild(this.pageSizeSelect.firstChild);t.forEach(function(t){var a=document.createElement("option");a.value=t,!0===t?e.table.modules.localize.bind("pagination|all",function(e){a.innerHTML=e}):a.innerHTML=t,e.pageSizeSelect.appendChild(a)}),this.pageSizeSelect.value=this.size}},Page.prototype.initialize=function(e){var t,a,i,s=this;this.dataSentNames=Object.assign({},this.paginationDataSentNames),this.dataSentNames=Object.assign(this.dataSentNames,this.table.options.paginationDataSent),this.dataReceivedNames=Object.assign({},this.paginationDataReceivedNames),this.dataReceivedNames=Object.assign(this.dataReceivedNames,this.table.options.paginationDataReceived),s.table.modules.localize.bind("pagination|first",function(e){s.firstBut.innerHTML=e}),s.table.modules.localize.bind("pagination|first_title",function(e){s.firstBut.setAttribute("aria-label",e),s.firstBut.setAttribute("title",e)}),s.table.modules.localize.bind("pagination|prev",function(e){s.prevBut.innerHTML=e}),s.table.modules.localize.bind("pagination|prev_title",function(e){s.prevBut.setAttribute("aria-label",e),s.prevBut.setAttribute("title",e)}),s.table.modules.localize.bind("pagination|next",function(e){s.nextBut.innerHTML=e}),s.table.modules.localize.bind("pagination|next_title",function(e){s.nextBut.setAttribute("aria-label",e),s.nextBut.setAttribute("title",e)}),s.table.modules.localize.bind("pagination|last",function(e){s.lastBut.innerHTML=e}),s.table.modules.localize.bind("pagination|last_title",function(e){s.lastBut.setAttribute("aria-label",e),s.lastBut.setAttribute("title",e)}),s.firstBut.addEventListener("click",function(){s.setPage(1)}),s.prevBut.addEventListener("click",function(){s.previousPage()}),s.nextBut.addEventListener("click",function(){s.nextPage().then(function(){}).catch(function(){})}),s.lastBut.addEventListener("click",function(){s.setPage(s.max)}),s.table.options.paginationElement&&(s.element=s.table.options.paginationElement),this.pageSizeSelect&&(t=document.createElement("label"),s.table.modules.localize.bind("pagination|page_size",function(e){s.pageSizeSelect.setAttribute("aria-label",e),s.pageSizeSelect.setAttribute("title",e),t.innerHTML=e}),s.element.appendChild(t),s.element.appendChild(s.pageSizeSelect),s.pageSizeSelect.addEventListener("change",function(e){s.setPageSize("true"==s.pageSizeSelect.value||s.pageSizeSelect.value),s.setPage(1).then(function(){}).catch(function(){})})),s.element.appendChild(s.firstBut),s.element.appendChild(s.prevBut),s.element.appendChild(s.pagesElement),s.element.appendChild(s.nextBut),s.element.appendChild(s.lastBut),s.table.options.paginationElement||e||s.table.footerManager.append(s.element,s),s.mode=s.table.options.pagination,s.table.options.paginationSize?s.size=s.table.options.paginationSize:(a=document.createElement("div"),a.classList.add("tabulator-row"),a.style.visibility=e,i=document.createElement("div"),i.classList.add("tabulator-cell"),i.innerHTML="Page Row Test",a.appendChild(i),s.table.rowManager.getTableElement().appendChild(a),s.size=Math.floor(s.table.rowManager.getElement().clientHeight/a.offsetHeight),s.table.rowManager.getTableElement().removeChild(a)),s.count=s.table.options.paginationButtonCount,s.generatePageSizeSelectList()},Page.prototype.initializeProgressive=function(e){this.initialize(!0),this.mode="progressive_"+e,this.progressiveLoad=!0},Page.prototype.setDisplayIndex=function(e){this.displayIndex=e},Page.prototype.getDisplayIndex=function(){return this.displayIndex},Page.prototype.setMaxRows=function(e){this.max=e?!0===this.size?1:Math.ceil(e/this.size):1,this.page>this.max&&(this.page=this.max)},Page.prototype.reset=function(e,t){return("local"==this.mode||e)&&(this.page=1),t&&(this.initialLoad=!0),!0},Page.prototype.setMaxPage=function(e){e=parseInt(e),this.max=e||1,this.page>this.max&&(this.page=this.max,this.trigger())},Page.prototype.setPage=function(e){var t=this,a=this;switch(e){case"first":return this.setPage(1);case"prev":return this.previousPage();case"next":return this.nextPage();case"last":return this.setPage(this.max)}return new Promise(function(i,s){e=parseInt(e),e>0&&e<=t.max?(t.page=e,t.trigger().then(function(){i()}).catch(function(){s()}),a.table.options.persistence&&a.table.modExists("persistence",!0)&&a.table.modules.persistence.config.page&&a.table.modules.persistence.save("page")):(console.warn("Pagination Error - Requested page is out of range of 1 - "+t.max+":",e),s())})},Page.prototype.setPageToRow=function(e){var t=this;return new Promise(function(a,i){var s=t.table.rowManager.getDisplayRows(t.displayIndex-1),n=s.indexOf(e);if(n>-1){var o=!0===t.size?1:Math.ceil((n+1)/t.size);t.setPage(o).then(function(){a()}).catch(function(){i()})}else console.warn("Pagination Error - Requested row is not visible"),i()})},Page.prototype.setPageSize=function(e){!0!==e&&(e=parseInt(e)),e>0&&(this.size=e),this.pageSizeSelect&&this.generatePageSizeSelectList(),this.table.options.persistence&&this.table.modExists("persistence",!0)&&this.table.modules.persistence.config.page&&this.table.modules.persistence.save("page")},Page.prototype._setPageButtons=function(){for(var e=this,t=Math.floor((this.count-1)/2),a=Math.ceil((this.count-1)/2),i=this.max-this.page+t+1<this.count?this.max-this.count+1:Math.max(this.page-t,1),s=this.page<=a?Math.min(this.count,this.max):Math.min(this.page+a,this.max);e.pagesElement.firstChild;)e.pagesElement.removeChild(e.pagesElement.firstChild);1==e.page?(e.firstBut.disabled=!0,e.prevBut.disabled=!0):(e.firstBut.disabled=!1,e.prevBut.disabled=!1),e.page==e.max?(e.lastBut.disabled=!0,e.nextBut.disabled=!0):(e.lastBut.disabled=!1,e.nextBut.disabled=!1);for(var n=i;n<=s;n++)n>0&&n<=e.max&&e.pagesElement.appendChild(e._generatePageButton(n));this.footerRedraw()},Page.prototype._generatePageButton=function(e){var t=this,a=document.createElement("button");return a.classList.add("tabulator-page"),e==t.page&&a.classList.add("active"),a.setAttribute("type","button"),a.setAttribute("role","button"),t.table.modules.localize.bind("pagination|page_title",function(t){a.setAttribute("aria-label",t+" "+e),a.setAttribute("title",t+" "+e)}),a.setAttribute("data-page",e),a.textContent=e,a.addEventListener("click",function(a){t.setPage(e)}),a},Page.prototype.previousPage=function(){var e=this;return new Promise(function(t,a){e.page>1?(e.page--,e.trigger().then(function(){t()}).catch(function(){a()}),e.table.options.persistence&&e.table.modExists("persistence",!0)&&e.table.modules.persistence.config.page&&e.table.modules.persistence.save("page")):(console.warn("Pagination Error - Previous page would be less than page 1:",0),a())})},Page.prototype.nextPage=function(){var e=this;return new Promise(function(t,a){e.page<e.max?(e.page++,e.trigger().then(function(){t()}).catch(function(){a()}),e.table.options.persistence&&e.table.modExists("persistence",!0)&&e.table.modules.persistence.config.page&&e.table.modules.persistence.save("page")):(e.progressiveLoad||console.warn("Pagination Error - Next page would be greater than maximum page of "+e.max+":",e.max+1),a())})},Page.prototype.getPage=function(){return this.page},Page.prototype.getPageMax=function(){return this.max},Page.prototype.getPageSize=function(e){return this.size},Page.prototype.getMode=function(){return this.mode},Page.prototype.getRows=function(e){var t,a,i;if("local"==this.mode){t=[],!0===this.size?(a=0,i=e.length-1):(a=this.size*(this.page-1),i=a+parseInt(this.size)),this._setPageButtons();for(var s=a;s<i;s++)e[s]&&t.push(e[s]);return t}return this._setPageButtons(),e.slice(0)},Page.prototype.trigger=function(){var e,t=this;return new Promise(function(a,i){switch(t.mode){case"local":e=t.table.rowManager.scrollLeft,t.table.rowManager.refreshActiveData("page"),t.table.rowManager.scrollHorizontal(e),t.table.options.pageLoaded.call(t.table,t.getPage()),a();break;case"remote":case"progressive_load":case"progressive_scroll":t.table.modules.ajax.blockActiveRequest(),t._getRemotePage().then(function(){a()}).catch(function(){i()});break;default:console.warn("Pagination Error - no such pagination mode:",t.mode),i()}})},Page.prototype._getRemotePage=function(){var e,t,a=this,i=this;return new Promise(function(s,n){if(i.table.modExists("ajax",!0)||n(),e=Tabulator.prototype.helpers.deepClone(i.table.modules.ajax.getParams()||{}),t=i.table.modules.ajax.getParams(),t[a.dataSentNames.page]=i.page,a.size&&(t[a.dataSentNames.size]=a.size),a.table.options.ajaxSorting&&a.table.modExists("sort")){var o=i.table.modules.sort.getSort();o.forEach(function(e){delete e.column}),t[a.dataSentNames.sorters]=o}if(a.table.options.ajaxFiltering&&a.table.modExists("filter")){var r=i.table.modules.filter.getFilters(!0,!0);t[a.dataSentNames.filters]=r}i.table.modules.ajax.setParams(t),i.table.modules.ajax.sendRequest(a.progressiveLoad).then(function(e){i._parseRemoteData(e),s()}).catch(function(e){n()}),i.table.modules.ajax.setParams(e)})},Page.prototype._parseRemoteData=function(e){var t,e,a,i=this;if(void 0===e[this.dataReceivedNames.last_page]&&console.warn("Remote Pagination Error - Server response missing '"+this.dataReceivedNames.last_page+"' property"),e[this.dataReceivedNames.data]){if(this.max=parseInt(e[this.dataReceivedNames.last_page])||1,this.progressiveLoad)switch(this.mode){case"progressive_load":1==this.page?this.table.rowManager.setData(e[this.dataReceivedNames.data],!1,this.initialLoad&&1==this.page):this.table.rowManager.addRows(e[this.dataReceivedNames.data]),this.page<this.max&&setTimeout(function(){i.nextPage().then(function(){}).catch(function(){})},i.table.options.ajaxProgressiveLoadDelay);break;case"progressive_scroll":e=this.table.rowManager.getData().concat(e[this.dataReceivedNames.data]),this.table.rowManager.setData(e,!0,this.initialLoad&&1==this.page),a=this.table.options.ajaxProgressiveLoadScrollMargin||2*this.table.rowManager.element.clientHeight,i.table.rowManager.element.scrollHeight<=i.table.rowManager.element.clientHeight+a&&i.nextPage().then(function(){}).catch(function(){})}else t=this.table.rowManager.scrollLeft,this.table.rowManager.setData(e[this.dataReceivedNames.data],!1,this.initialLoad&&1==this.page),this.table.rowManager.scrollHorizontal(t),this.table.columnManager.scrollHorizontal(t),this.table.options.pageLoaded.call(this.table,this.getPage());this.initialLoad=!1}else console.warn("Remote Pagination Error - Server response missing '"+this.dataReceivedNames.data+"' property")},Page.prototype.footerRedraw=function(){var e=this.table.footerManager.element;Math.ceil(e.clientWidth)-e.scrollWidth<0?this.pagesElement.style.display="none":(this.pagesElement.style.display="",Math.ceil(e.clientWidth)-e.scrollWidth<0&&(this.pagesElement.style.display="none"))},Page.prototype.paginationDataSentNames={page:"page",size:"size",sorters:"sorters",filters:"filters"},Page.prototype.paginationDataReceivedNames={current_page:"current_page",last_page:"last_page",data:"data"},Tabulator.prototype.registerModule("page",Page);
\ No newline at end of file
diff --git a/admin/js/vendors/tabulator/js/modules/persistence.js b/admin/js/vendors/tabulator/js/modules/persistence.js
new file mode 100644 (file)
index 0000000..8e5de49
--- /dev/null
@@ -0,0 +1,411 @@
+/* Tabulator v4.7.0 (c) Oliver Folkerd */
+
+var Persistence = function Persistence(table) {
+       this.table = table; //hold Tabulator object
+       this.mode = "";
+       this.id = "";
+       // this.persistProps = ["field", "width", "visible"];
+       this.defWatcherBlock = false;
+       this.config = {};
+       this.readFunc = false;
+       this.writeFunc = false;
+};
+
+// Test for whether localStorage is available for use.
+Persistence.prototype.localStorageTest = function () {
+       var testKey = "_tabulator_test";
+
+       try {
+               window.localStorage.setItem(testKey, testKey);
+               window.localStorage.removeItem(testKey);
+               return true;
+       } catch (e) {
+               return false;
+       }
+};
+
+//setup parameters
+Persistence.prototype.initialize = function () {
+       //determine persistent layout storage type
+
+       var mode = this.table.options.persistenceMode,
+           id = this.table.options.persistenceID,
+           retreivedData;
+
+       this.mode = mode !== true ? mode : this.localStorageTest() ? "local" : "cookie";
+
+       if (this.table.options.persistenceReaderFunc) {
+               if (typeof this.table.options.persistenceReaderFunc === "function") {
+                       this.readFunc = this.table.options.persistenceReaderFunc;
+               } else {
+                       if (this.readers[this.table.options.persistenceReaderFunc]) {
+                               this.readFunc = this.readers[this.table.options.persistenceReaderFunc];
+                       } else {
+                               console.warn("Persistence Read Error - invalid reader set", this.table.options.persistenceReaderFunc);
+                       }
+               }
+       } else {
+               if (this.readers[this.mode]) {
+                       this.readFunc = this.readers[this.mode];
+               } else {
+                       console.warn("Persistence Read Error - invalid reader set", this.mode);
+               }
+       }
+
+       if (this.table.options.persistenceWriterFunc) {
+               if (typeof this.table.options.persistenceWriterFunc === "function") {
+                       this.writeFunc = this.table.options.persistenceWriterFunc;
+               } else {
+                       if (this.readers[this.table.options.persistenceWriterFunc]) {
+                               this.writeFunc = this.readers[this.table.options.persistenceWriterFunc];
+                       } else {
+                               console.warn("Persistence Write Error - invalid reader set", this.table.options.persistenceWriterFunc);
+                       }
+               }
+       } else {
+               if (this.writers[this.mode]) {
+                       this.writeFunc = this.writers[this.mode];
+               } else {
+                       console.warn("Persistence Write Error - invalid writer set", this.mode);
+               }
+       }
+
+       //set storage tag
+       this.id = "tabulator-" + (id || this.table.element.getAttribute("id") || "");
+
+       this.config = {
+               sort: this.table.options.persistence === true || this.table.options.persistence.sort,
+               filter: this.table.options.persistence === true || this.table.options.persistence.filter,
+               group: this.table.options.persistence === true || this.table.options.persistence.group,
+               page: this.table.options.persistence === true || this.table.options.persistence.page,
+               columns: this.table.options.persistence === true ? ["title", "width", "visible"] : this.table.options.persistence.columns
+       };
+
+       //load pagination data if needed
+       if (this.config.page) {
+               retreivedData = this.retreiveData("page");
+
+               if (retreivedData) {
+                       if (typeof retreivedData.paginationSize !== "undefined" && (this.config.page === true || this.config.page.size)) {
+                               this.table.options.paginationSize = retreivedData.paginationSize;
+                       }
+
+                       if (typeof retreivedData.paginationInitialPage !== "undefined" && (this.config.page === true || this.config.page.page)) {
+                               this.table.options.paginationInitialPage = retreivedData.paginationInitialPage;
+                       }
+               }
+       }
+
+       //load group data if needed
+       if (this.config.group) {
+               retreivedData = this.retreiveData("group");
+
+               if (retreivedData) {
+                       if (typeof retreivedData.groupBy !== "undefined" && (this.config.group === true || this.config.group.groupBy)) {
+                               this.table.options.groupBy = retreivedData.groupBy;
+                       }
+                       if (typeof retreivedData.groupStartOpen !== "undefined" && (this.config.group === true || this.config.group.groupStartOpen)) {
+                               this.table.options.groupStartOpen = retreivedData.groupStartOpen;
+                       }
+                       if (typeof retreivedData.groupHeader !== "undefined" && (this.config.group === true || this.config.group.groupHeader)) {
+                               this.table.options.groupHeader = retreivedData.groupHeader;
+                       }
+               }
+       }
+};
+
+Persistence.prototype.initializeColumn = function (column) {
+       var self = this,
+           def,
+           keys;
+
+       if (this.config.columns) {
+               this.defWatcherBlock = true;
+
+               def = column.getDefinition();
+
+               keys = this.config.columns === true ? Object.keys(def) : this.config.columns;
+
+               keys.forEach(function (key) {
+                       var props = Object.getOwnPropertyDescriptor(def, key);
+                       var value = def[key];
+                       if (props) {
+                               Object.defineProperty(def, key, {
+                                       set: function set(newValue) {
+                                               value = newValue;
+
+                                               if (!self.defWatcherBlock) {
+                                                       self.save("columns");
+                                               }
+
+                                               if (props.set) {
+                                                       props.set(newValue);
+                                               }
+                                       },
+                                       get: function get() {
+                                               if (props.get) {
+                                                       props.get();
+                                               }
+                                               return value;
+                                       }
+                               });
+                       }
+               });
+
+               this.defWatcherBlock = false;
+       }
+};
+
+//load saved definitions
+Persistence.prototype.load = function (type, current) {
+       var data = this.retreiveData(type);
+
+       if (current) {
+               data = data ? this.mergeDefinition(current, data) : current;
+       }
+
+       return data;
+};
+
+//retreive data from memory
+Persistence.prototype.retreiveData = function (type) {
+       return this.readFunc ? this.readFunc(this.id, type) : false;
+};
+
+//merge old and new column definitions
+Persistence.prototype.mergeDefinition = function (oldCols, newCols) {
+       var self = this,
+           output = [];
+
+       // oldCols = oldCols || [];
+       newCols = newCols || [];
+
+       newCols.forEach(function (column, to) {
+
+               var from = self._findColumn(oldCols, column),
+                   keys;
+
+               if (from) {
+
+                       if (self.config.columns === true || self.config.columns == undefined) {
+                               keys = Object.keys(from);
+                               keys.push("width");
+                       } else {
+                               keys = self.config.columns;
+                       }
+
+                       keys.forEach(function (key) {
+                               if (typeof column[key] !== "undefined") {
+                                       from[key] = column[key];
+                               }
+                       });
+
+                       if (from.columns) {
+                               from.columns = self.mergeDefinition(from.columns, column.columns);
+                       }
+
+                       output.push(from);
+               }
+       });
+
+       oldCols.forEach(function (column, i) {
+               var from = self._findColumn(newCols, column);
+               if (!from) {
+                       if (output.length > i) {
+                               output.splice(i, 0, column);
+                       } else {
+                               output.push(column);
+                       }
+               }
+       });
+
+       return output;
+};
+
+//find matching columns
+Persistence.prototype._findColumn = function (columns, subject) {
+       var type = subject.columns ? "group" : subject.field ? "field" : "object";
+
+       return columns.find(function (col) {
+               switch (type) {
+                       case "group":
+                               return col.title === subject.title && col.columns.length === subject.columns.length;
+                               break;
+
+                       case "field":
+                               return col.field === subject.field;
+                               break;
+
+                       case "object":
+                               return col === subject;
+                               break;
+               }
+       });
+};
+
+//save data
+Persistence.prototype.save = function (type) {
+       var data = {};
+
+       switch (type) {
+               case "columns":
+                       data = this.parseColumns(this.table.columnManager.getColumns());
+                       break;
+
+               case "filter":
+                       data = this.table.modules.filter.getFilters();
+                       break;
+
+               case "sort":
+                       data = this.validateSorters(this.table.modules.sort.getSort());
+                       break;
+
+               case "group":
+                       data = this.getGroupConfig();
+                       break;
+
+               case "page":
+                       data = this.getPageConfig();
+                       break;
+       }
+
+       if (this.writeFunc) {
+               this.writeFunc(this.id, type, data);
+       }
+};
+
+//ensure sorters contain no function data
+Persistence.prototype.validateSorters = function (data) {
+       data.forEach(function (item) {
+               item.column = item.field;
+               delete item.field;
+       });
+
+       return data;
+};
+
+Persistence.prototype.getGroupConfig = function () {
+       if (this.config.group) {
+               if (this.config.group === true || this.config.group.groupBy) {
+                       data.groupBy = this.table.options.groupBy;
+               }
+
+               if (this.config.group === true || this.config.group.groupStartOpen) {
+                       data.groupStartOpen = this.table.options.groupStartOpen;
+               }
+
+               if (this.config.group === true || this.config.group.groupHeader) {
+                       data.groupHeader = this.table.options.groupHeader;
+               }
+       }
+
+       return data;
+};
+
+Persistence.prototype.getPageConfig = function () {
+       var data = {};
+
+       if (this.config.page) {
+               if (this.config.page === true || this.config.page.size) {
+                       data.paginationSize = this.table.modules.page.getPageSize();
+               }
+
+               if (this.config.page === true || this.config.page.page) {
+                       data.paginationInitialPage = this.table.modules.page.getPage();
+               }
+       }
+
+       return data;
+};
+
+//parse columns for data to store
+Persistence.prototype.parseColumns = function (columns) {
+       var self = this,
+           definitions = [];
+
+       columns.forEach(function (column) {
+               var defStore = {},
+                   colDef = column.getDefinition(),
+                   keys;
+
+               if (column.isGroup) {
+                       defStore.title = colDef.title;
+                       defStore.columns = self.parseColumns(column.getColumns());
+               } else {
+                       defStore.field = column.getField();
+
+                       if (self.config.columns === true || self.config.columns == undefined) {
+                               keys = Object.keys(colDef);
+                               keys.push("width");
+                       } else {
+                               keys = self.config.columns;
+                       }
+
+                       keys.forEach(function (key) {
+
+                               switch (key) {
+                                       case "width":
+                                               defStore.width = column.getWidth();
+                                               break;
+                                       case "visible":
+                                               defStore.visible = column.visible;
+                                               break;
+
+                                       default:
+                                               defStore[key] = colDef[key];
+                               }
+                       });
+               }
+
+               definitions.push(defStore);
+       });
+
+       return definitions;
+};
+
+// read peristence information from storage
+Persistence.prototype.readers = {
+       local: function local(id, type) {
+               var data = localStorage.getItem(id + "-" + type);
+
+               return data ? JSON.parse(data) : false;
+       },
+       cookie: function cookie(id, type) {
+               var cookie = document.cookie,
+                   key = id + "-" + type,
+                   cookiePos = cookie.indexOf(key + "="),
+                   end,
+                   data;
+
+               //if cookie exists, decode and load column data into tabulator
+               if (cookiePos > -1) {
+                       cookie = cookie.substr(cookiePos);
+
+                       end = cookie.indexOf(";");
+
+                       if (end > -1) {
+                               cookie = cookie.substr(0, end);
+                       }
+
+                       data = cookie.replace(key + "=", "");
+               }
+
+               return data ? JSON.parse(data) : false;
+       }
+};
+
+//write persistence information to storage
+Persistence.prototype.writers = {
+       local: function local(id, type, data) {
+               localStorage.setItem(id + "-" + type, JSON.stringify(data));
+       },
+       cookie: function cookie(id, type, data) {
+               var expireDate = new Date();
+
+               expireDate.setDate(expireDate.getDate() + 10000);
+
+               document.cookie = id + "-" + type + "=" + JSON.stringify(data) + "; expires=" + expireDate.toUTCString();
+       }
+};
+
+Tabulator.prototype.registerModule("persistence", Persistence);
\ No newline at end of file
diff --git a/admin/js/vendors/tabulator/js/modules/persistence.min.js b/admin/js/vendors/tabulator/js/modules/persistence.min.js
new file mode 100644 (file)
index 0000000..8d87ab3
--- /dev/null
@@ -0,0 +1,2 @@
+/* Tabulator v4.7.0 (c) Oliver Folkerd */
+var Persistence=function(e){this.table=e,this.mode="",this.id="",this.defWatcherBlock=!1,this.config={},this.readFunc=!1,this.writeFunc=!1};Persistence.prototype.localStorageTest=function(){var e="_tabulator_test";try{return window.localStorage.setItem(e,e),window.localStorage.removeItem(e),!0}catch(e){return!1}},Persistence.prototype.initialize=function(){var e,t=this.table.options.persistenceMode,i=this.table.options.persistenceID;this.mode=!0!==t?t:this.localStorageTest()?"local":"cookie",this.table.options.persistenceReaderFunc?"function"==typeof this.table.options.persistenceReaderFunc?this.readFunc=this.table.options.persistenceReaderFunc:this.readers[this.table.options.persistenceReaderFunc]?this.readFunc=this.readers[this.table.options.persistenceReaderFunc]:console.warn("Persistence Read Error - invalid reader set",this.table.options.persistenceReaderFunc):this.readers[this.mode]?this.readFunc=this.readers[this.mode]:console.warn("Persistence Read Error - invalid reader set",this.mode),this.table.options.persistenceWriterFunc?"function"==typeof this.table.options.persistenceWriterFunc?this.writeFunc=this.table.options.persistenceWriterFunc:this.readers[this.table.options.persistenceWriterFunc]?this.writeFunc=this.readers[this.table.options.persistenceWriterFunc]:console.warn("Persistence Write Error - invalid reader set",this.table.options.persistenceWriterFunc):this.writers[this.mode]?this.writeFunc=this.writers[this.mode]:console.warn("Persistence Write Error - invalid writer set",this.mode),this.id="tabulator-"+(i||this.table.element.getAttribute("id")||""),this.config={sort:!0===this.table.options.persistence||this.table.options.persistence.sort,filter:!0===this.table.options.persistence||this.table.options.persistence.filter,group:!0===this.table.options.persistence||this.table.options.persistence.group,page:!0===this.table.options.persistence||this.table.options.persistence.page,columns:!0===this.table.options.persistence?["title","width","visible"]:this.table.options.persistence.columns},this.config.page&&(e=this.retreiveData("page"))&&(void 0===e.paginationSize||!0!==this.config.page&&!this.config.page.size||(this.table.options.paginationSize=e.paginationSize),void 0===e.paginationInitialPage||!0!==this.config.page&&!this.config.page.page||(this.table.options.paginationInitialPage=e.paginationInitialPage)),this.config.group&&(e=this.retreiveData("group"))&&(void 0===e.groupBy||!0!==this.config.group&&!this.config.group.groupBy||(this.table.options.groupBy=e.groupBy),void 0===e.groupStartOpen||!0!==this.config.group&&!this.config.group.groupStartOpen||(this.table.options.groupStartOpen=e.groupStartOpen),void 0===e.groupHeader||!0!==this.config.group&&!this.config.group.groupHeader||(this.table.options.groupHeader=e.groupHeader))},Persistence.prototype.initializeColumn=function(e){var t,i,s=this;this.config.columns&&(this.defWatcherBlock=!0,t=e.getDefinition(),i=!0===this.config.columns?Object.keys(t):this.config.columns,i.forEach(function(e){var i=Object.getOwnPropertyDescriptor(t,e),o=t[e];i&&Object.defineProperty(t,e,{set:function(e){o=e,s.defWatcherBlock||s.save("columns"),i.set&&i.set(e)},get:function(){return i.get&&i.get(),o}})}),this.defWatcherBlock=!1)},Persistence.prototype.load=function(e,t){var i=this.retreiveData(e);return t&&(i=i?this.mergeDefinition(t,i):t),i},Persistence.prototype.retreiveData=function(e){return!!this.readFunc&&this.readFunc(this.id,e)},Persistence.prototype.mergeDefinition=function(e,t){var i=this,s=[];return t=t||[],t.forEach(function(t,o){var n,r=i._findColumn(e,t);r&&(!0===i.config.columns||void 0==i.config.columns?(n=Object.keys(r),n.push("width")):n=i.config.columns,n.forEach(function(e){void 0!==t[e]&&(r[e]=t[e])}),r.columns&&(r.columns=i.mergeDefinition(r.columns,t.columns)),s.push(r))}),e.forEach(function(e,o){i._findColumn(t,e)||(s.length>o?s.splice(o,0,e):s.push(e))}),s},Persistence.prototype._findColumn=function(e,t){var i=t.columns?"group":t.field?"field":"object";return e.find(function(e){switch(i){case"group":return e.title===t.title&&e.columns.length===t.columns.length;case"field":return e.field===t.field;case"object":return e===t}})},Persistence.prototype.save=function(e){var t={};switch(e){case"columns":t=this.parseColumns(this.table.columnManager.getColumns());break;case"filter":t=this.table.modules.filter.getFilters();break;case"sort":t=this.validateSorters(this.table.modules.sort.getSort());break;case"group":t=this.getGroupConfig();break;case"page":t=this.getPageConfig()}this.writeFunc&&this.writeFunc(this.id,e,t)},Persistence.prototype.validateSorters=function(e){return e.forEach(function(e){e.column=e.field,delete e.field}),e},Persistence.prototype.getGroupConfig=function(){return this.config.group&&((!0===this.config.group||this.config.group.groupBy)&&(data.groupBy=this.table.options.groupBy),(!0===this.config.group||this.config.group.groupStartOpen)&&(data.groupStartOpen=this.table.options.groupStartOpen),(!0===this.config.group||this.config.group.groupHeader)&&(data.groupHeader=this.table.options.groupHeader)),data},Persistence.prototype.getPageConfig=function(){var e={};return this.config.page&&((!0===this.config.page||this.config.page.size)&&(e.paginationSize=this.table.modules.page.getPageSize()),(!0===this.config.page||this.config.page.page)&&(e.paginationInitialPage=this.table.modules.page.getPage())),e},Persistence.prototype.parseColumns=function(e){var t=this,i=[];return e.forEach(function(e){var s,o={},n=e.getDefinition();e.isGroup?(o.title=n.title,o.columns=t.parseColumns(e.getColumns())):(o.field=e.getField(),!0===t.config.columns||void 0==t.config.columns?(s=Object.keys(n),s.push("width")):s=t.config.columns,s.forEach(function(t){switch(t){case"width":o.width=e.getWidth();break;case"visible":o.visible=e.visible;break;default:o[t]=n[t]}})),i.push(o)}),i},Persistence.prototype.readers={local:function(e,t){var i=localStorage.getItem(e+"-"+t);return!!i&&JSON.parse(i)},cookie:function(e,t){var i,s,o=document.cookie,n=e+"-"+t,r=o.indexOf(n+"=");return r>-1&&(o=o.substr(r),i=o.indexOf(";"),i>-1&&(o=o.substr(0,i)),s=o.replace(n+"=","")),!!s&&JSON.parse(s)}},Persistence.prototype.writers={local:function(e,t,i){localStorage.setItem(e+"-"+t,JSON.stringify(i))},cookie:function(e,t,i){var s=new Date;s.setDate(s.getDate()+1e4),document.cookie=e+"-"+t+"="+JSON.stringify(i)+"; expires="+s.toUTCString()}},Tabulator.prototype.registerModule("persistence",Persistence);
\ No newline at end of file
diff --git a/admin/js/vendors/tabulator/js/modules/print.js b/admin/js/vendors/tabulator/js/modules/print.js
new file mode 100644 (file)
index 0000000..940f1a9
--- /dev/null
@@ -0,0 +1,96 @@
+/* Tabulator v4.7.0 (c) Oliver Folkerd */
+
+var Print = function Print(table) {
+       this.table = table; //hold Tabulator object
+       this.element = false;
+       this.manualBlock = false;
+};
+
+Print.prototype.initialize = function () {
+       window.addEventListener("beforeprint", this.replaceTable.bind(this));
+       window.addEventListener("afterprint", this.cleanup.bind(this));
+};
+
+Print.prototype.replaceTable = function () {
+       if (!this.manualBlock) {
+               this.element = document.createElement("div");
+               this.element.classList.add("tabulator-print-table");
+
+               this.element.appendChild(this.table.modules.export.genereateTable(this.table.options.printConfig, this.table.options.printStyled, this.table.options.printRowRange, "print"));
+
+               this.table.element.style.display = "none";
+
+               this.table.element.parentNode.insertBefore(this.element, this.table.element);
+       }
+};
+
+Print.prototype.cleanup = function () {
+       document.body.classList.remove("tabulator-print-fullscreen-hide");
+
+       if (this.element && this.element.parentNode) {
+               this.element.parentNode.removeChild(this.element);
+               this.table.element.style.display = "";
+       }
+};
+
+Print.prototype.printFullscreen = function (visible, style, config) {
+       var scrollX = window.scrollX,
+           scrollY = window.scrollY,
+           headerEl = document.createElement("div"),
+           footerEl = document.createElement("div"),
+           tableEl = this.table.modules.export.genereateTable(typeof config != "undefined" ? config : this.table.options.printConfig, typeof style != "undefined" ? style : this.table.options.printStyled, visible, "print"),
+           headerContent,
+           footerContent;
+
+       this.manualBlock = true;
+
+       this.element = document.createElement("div");
+       this.element.classList.add("tabulator-print-fullscreen");
+
+       if (this.table.options.printHeader) {
+               headerEl.classList.add("tabulator-print-header");
+
+               headerContent = typeof this.table.options.printHeader == "function" ? this.table.options.printHeader.call(this.table) : this.table.options.printHeader;
+
+               if (typeof headerContent == "string") {
+                       headerEl.innerHTML = headerContent;
+               } else {
+                       headerEl.appendChild(headerContent);
+               }
+
+               this.element.appendChild(headerEl);
+       }
+
+       this.element.appendChild(tableEl);
+
+       if (this.table.options.printFooter) {
+               footerEl.classList.add("tabulator-print-footer");
+
+               footerContent = typeof this.table.options.printFooter == "function" ? this.table.options.printFooter.call(this.table) : this.table.options.printFooter;
+
+               if (typeof footerContent == "string") {
+                       footerEl.innerHTML = footerContent;
+               } else {
+                       footerEl.appendChild(footerContent);
+               }
+
+               this.element.appendChild(footerEl);
+       }
+
+       document.body.classList.add("tabulator-print-fullscreen-hide");
+       document.body.appendChild(this.element);
+
+       if (this.table.options.printFormatter) {
+               this.table.options.printFormatter(this.element, tableEl);
+       }
+
+       window.print();
+
+       this.cleanup();
+
+       window.scrollTo(scrollX, scrollY);
+
+       this.manualBlock = false;
+};
+
+Tabulator.prototype.registerModule("print", Print);
\ No newline at end of file
diff --git a/admin/js/vendors/tabulator/js/modules/print.min.js b/admin/js/vendors/tabulator/js/modules/print.min.js
new file mode 100644 (file)
index 0000000..b46279c
--- /dev/null
@@ -0,0 +1,2 @@
+/* Tabulator v4.7.0 (c) Oliver Folkerd */
+var Print=function(t){this.table=t,this.element=!1,this.manualBlock=!1};Print.prototype.initialize=function(){window.addEventListener("beforeprint",this.replaceTable.bind(this)),window.addEventListener("afterprint",this.cleanup.bind(this))},Print.prototype.replaceTable=function(){this.manualBlock||(this.element=document.createElement("div"),this.element.classList.add("tabulator-print-table"),this.element.appendChild(this.table.modules.export.genereateTable(this.table.options.printConfig,this.table.options.printStyled,this.table.options.printRowRange,"print")),this.table.element.style.display="none",this.table.element.parentNode.insertBefore(this.element,this.table.element))},Print.prototype.cleanup=function(){document.body.classList.remove("tabulator-print-fullscreen-hide"),this.element&&this.element.parentNode&&(this.element.parentNode.removeChild(this.element),this.table.element.style.display="")},Print.prototype.printFullscreen=function(t,e,i){var n,l,o=window.scrollX,a=window.scrollY,s=document.createElement("div"),r=document.createElement("div"),p=this.table.modules.export.genereateTable(void 0!==i?i:this.table.options.printConfig,void 0!==e?e:this.table.options.printStyled,t,"print");this.manualBlock=!0,this.element=document.createElement("div"),this.element.classList.add("tabulator-print-fullscreen"),this.table.options.printHeader&&(s.classList.add("tabulator-print-header"),n="function"==typeof this.table.options.printHeader?this.table.options.printHeader.call(this.table):this.table.options.printHeader,"string"==typeof n?s.innerHTML=n:s.appendChild(n),this.element.appendChild(s)),this.element.appendChild(p),this.table.options.printFooter&&(r.classList.add("tabulator-print-footer"),l="function"==typeof this.table.options.printFooter?this.table.options.printFooter.call(this.table):this.table.options.printFooter,"string"==typeof l?r.innerHTML=l:r.appendChild(l),this.element.appendChild(r)),document.body.classList.add("tabulator-print-fullscreen-hide"),document.body.appendChild(this.element),this.table.options.printFormatter&&this.table.options.printFormatter(this.element,p),window.print(),this.cleanup(),window.scrollTo(o,a),this.manualBlock=!1},Tabulator.prototype.registerModule("print",Print);
\ No newline at end of file
diff --git a/admin/js/vendors/tabulator/js/modules/reactive_data.js b/admin/js/vendors/tabulator/js/modules/reactive_data.js
new file mode 100644 (file)
index 0000000..eb73971
--- /dev/null
@@ -0,0 +1,235 @@
+/* Tabulator v4.7.0 (c) Oliver Folkerd */
+
+var ReactiveData = function ReactiveData(table) {
+       this.table = table; //hold Tabulator object
+       this.data = false;
+       this.blocked = false; //block reactivity while performing update
+       this.origFuncs = {}; // hold original data array functions to allow replacement after data is done with
+       this.currentVersion = 0;
+};
+
+ReactiveData.prototype.watchData = function (data) {
+       var self = this,
+           pushFunc,
+           version;
+
+       this.currentVersion++;
+
+       version = this.currentVersion;
+
+       self.unwatchData();
+
+       self.data = data;
+
+       //override array push function
+       self.origFuncs.push = data.push;
+
+       Object.defineProperty(self.data, "push", {
+               enumerable: false,
+               configurable: true,
+               value: function value() {
+                       var args = Array.from(arguments);
+
+                       if (!self.blocked && version === self.currentVersion) {
+                               args.forEach(function (arg) {
+                                       self.table.rowManager.addRowActual(arg, false);
+                               });
+                       }
+
+                       return self.origFuncs.push.apply(data, arguments);
+               }
+       });
+
+       //override array unshift function
+       self.origFuncs.unshift = data.unshift;
+
+       Object.defineProperty(self.data, "unshift", {
+               enumerable: false,
+               configurable: true,
+               value: function value() {
+                       var args = Array.from(arguments);
+
+                       if (!self.blocked && version === self.currentVersion) {
+                               args.forEach(function (arg) {
+                                       self.table.rowManager.addRowActual(arg, true);
+                               });
+                       }
+
+                       return self.origFuncs.unshift.apply(data, arguments);
+               }
+       });
+
+       //override array shift function
+       self.origFuncs.shift = data.shift;
+
+       Object.defineProperty(self.data, "shift", {
+               enumerable: false,
+               configurable: true,
+               value: function value() {
+                       var row;
+
+                       if (!self.blocked && version === self.currentVersion) {
+                               if (self.data.length) {
+                                       row = self.table.rowManager.getRowFromDataObject(self.data[0]);
+
+                                       if (row) {
+                                               row.deleteActual();
+                                       }
+                               }
+                       }
+
+                       return self.origFuncs.shift.call(data);
+               }
+       });
+
+       //override array pop function
+       self.origFuncs.pop = data.pop;
+
+       Object.defineProperty(self.data, "pop", {
+               enumerable: false,
+               configurable: true,
+               value: function value() {
+                       var row;
+                       if (!self.blocked && version === self.currentVersion) {
+                               if (self.data.length) {
+                                       row = self.table.rowManager.getRowFromDataObject(self.data[self.data.length - 1]);
+
+                                       if (row) {
+                                               row.deleteActual();
+                                       }
+                               }
+                       }
+                       return self.origFuncs.pop.call(data);
+               }
+       });
+
+       //override array splice function
+       self.origFuncs.splice = data.splice;
+
+       Object.defineProperty(self.data, "splice", {
+               enumerable: false,
+               configurable: true,
+               value: function value() {
+                       var args = Array.from(arguments),
+                           start = args[0] < 0 ? data.length + args[0] : args[0],
+                           end = args[1],
+                           newRows = args[2] ? args.slice(2) : false,
+                           startRow;
+
+                       if (!self.blocked && version === self.currentVersion) {
+
+                               //add new rows
+                               if (newRows) {
+                                       startRow = data[start] ? self.table.rowManager.getRowFromDataObject(data[start]) : false;
+
+                                       if (startRow) {
+                                               newRows.forEach(function (rowData) {
+                                                       self.table.rowManager.addRowActual(rowData, true, startRow, true);
+                                               });
+                                       } else {
+                                               newRows = newRows.slice().reverse();
+
+                                               newRows.forEach(function (rowData) {
+                                                       self.table.rowManager.addRowActual(rowData, true, false, true);
+                                               });
+                                       }
+                               }
+
+                               //delete removed rows
+                               if (end !== 0) {
+                                       var oldRows = data.slice(start, typeof args[1] === "undefined" ? args[1] : start + end);
+
+                                       oldRows.forEach(function (rowData, i) {
+                                               var row = self.table.rowManager.getRowFromDataObject(rowData);
+
+                                               if (row) {
+                                                       row.deleteActual(i !== oldRows.length - 1);
+                                               }
+                                       });
+                               }
+
+                               if (newRows || end !== 0) {
+                                       self.table.rowManager.reRenderInPosition();
+                               }
+                       }
+
+                       return self.origFuncs.splice.apply(data, arguments);
+               }
+       });
+};
+
+ReactiveData.prototype.unwatchData = function () {
+       if (this.data !== false) {
+               for (var key in this.origFuncs) {
+                       Object.defineProperty(this.data, key, {
+                               enumerable: true,
+                               configurable: true,
+                               writable: true,
+                               value: this.origFuncs.key
+                       });
+               }
+       }
+};
+
+ReactiveData.prototype.watchRow = function (row) {
+       var self = this,
+           data = row.getData();
+
+       this.blocked = true;
+
+       for (var key in data) {
+               this.watchKey(row, data, key);
+       }
+
+       this.blocked = false;
+};
+
+ReactiveData.prototype.watchKey = function (row, data, key) {
+       var self = this,
+           props = Object.getOwnPropertyDescriptor(data, key),
+           value = data[key],
+           version = this.currentVersion;
+
+       Object.defineProperty(data, key, {
+               set: function set(newValue) {
+                       value = newValue;
+                       if (!self.blocked && version === self.currentVersion) {
+                               var update = {};
+                               update[key] = newValue;
+                               row.updateData(update);
+                       }
+
+                       if (props.set) {
+                               props.set(newValue);
+                       }
+               },
+               get: function get() {
+
+                       if (props.get) {
+                               props.get();
+                       }
+
+                       return value;
+               }
+       });
+};
+
+ReactiveData.prototype.unwatchRow = function (row) {
+       var data = row.getData();
+
+       for (var key in data) {
+               Object.defineProperty(data, key, {
+                       value: data[key]
+               });
+       }
+};
+
+ReactiveData.prototype.block = function () {
+       this.blocked = true;
+};
+
+ReactiveData.prototype.unblock = function () {
+       this.blocked = false;
+};
+
+Tabulator.prototype.registerModule("reactiveData", ReactiveData);
\ No newline at end of file
diff --git a/admin/js/vendors/tabulator/js/modules/reactive_data.min.js b/admin/js/vendors/tabulator/js/modules/reactive_data.min.js
new file mode 100644 (file)
index 0000000..c5dc047
--- /dev/null
@@ -0,0 +1,2 @@
+/* Tabulator v4.7.0 (c) Oliver Folkerd */
+var ReactiveData=function(e){this.table=e,this.data=!1,this.blocked=!1,this.origFuncs={},this.currentVersion=0};ReactiveData.prototype.watchData=function(e){var t,a=this;this.currentVersion++,t=this.currentVersion,a.unwatchData(),a.data=e,a.origFuncs.push=e.push,Object.defineProperty(a.data,"push",{enumerable:!1,configurable:!0,value:function(){var r=Array.from(arguments);return a.blocked||t!==a.currentVersion||r.forEach(function(e){a.table.rowManager.addRowActual(e,!1)}),a.origFuncs.push.apply(e,arguments)}}),a.origFuncs.unshift=e.unshift,Object.defineProperty(a.data,"unshift",{enumerable:!1,configurable:!0,value:function(){var r=Array.from(arguments);return a.blocked||t!==a.currentVersion||r.forEach(function(e){a.table.rowManager.addRowActual(e,!0)}),a.origFuncs.unshift.apply(e,arguments)}}),a.origFuncs.shift=e.shift,Object.defineProperty(a.data,"shift",{enumerable:!1,configurable:!0,value:function(){var r;return a.blocked||t!==a.currentVersion||a.data.length&&(r=a.table.rowManager.getRowFromDataObject(a.data[0]))&&r.deleteActual(),a.origFuncs.shift.call(e)}}),a.origFuncs.pop=e.pop,Object.defineProperty(a.data,"pop",{enumerable:!1,configurable:!0,value:function(){var r;return a.blocked||t!==a.currentVersion||a.data.length&&(r=a.table.rowManager.getRowFromDataObject(a.data[a.data.length-1]))&&r.deleteActual(),a.origFuncs.pop.call(e)}}),a.origFuncs.splice=e.splice,Object.defineProperty(a.data,"splice",{enumerable:!1,configurable:!0,value:function(){var r,o=Array.from(arguments),n=o[0]<0?e.length+o[0]:o[0],c=o[1],i=!!o[2]&&o.slice(2);if(!a.blocked&&t===a.currentVersion){if(i&&(r=!!e[n]&&a.table.rowManager.getRowFromDataObject(e[n]),r?i.forEach(function(e){a.table.rowManager.addRowActual(e,!0,r,!0)}):(i=i.slice().reverse(),i.forEach(function(e){a.table.rowManager.addRowActual(e,!0,!1,!0)}))),0!==c){var u=e.slice(n,void 0===o[1]?o[1]:n+c);u.forEach(function(e,t){var r=a.table.rowManager.getRowFromDataObject(e);r&&r.deleteActual(t!==u.length-1)})}(i||0!==c)&&a.table.rowManager.reRenderInPosition()}return a.origFuncs.splice.apply(e,arguments)}})},ReactiveData.prototype.unwatchData=function(){if(!1!==this.data)for(var e in this.origFuncs)Object.defineProperty(this.data,e,{enumerable:!0,configurable:!0,writable:!0,value:this.origFuncs.key})},ReactiveData.prototype.watchRow=function(e){var t=e.getData();this.blocked=!0;for(var a in t)this.watchKey(e,t,a);this.blocked=!1},ReactiveData.prototype.watchKey=function(e,t,a){var r=this,o=Object.getOwnPropertyDescriptor(t,a),n=t[a],c=this.currentVersion;Object.defineProperty(t,a,{set:function(t){if(n=t,!r.blocked&&c===r.currentVersion){var i={};i[a]=t,e.updateData(i)}o.set&&o.set(t)},get:function(){return o.get&&o.get(),n}})},ReactiveData.prototype.unwatchRow=function(e){var t=e.getData();for(var a in t)Object.defineProperty(t,a,{value:t[a]})},ReactiveData.prototype.block=function(){this.blocked=!0},ReactiveData.prototype.unblock=function(){this.blocked=!1},Tabulator.prototype.registerModule("reactiveData",ReactiveData);
\ No newline at end of file
diff --git a/admin/js/vendors/tabulator/js/modules/resize_columns.js b/admin/js/vendors/tabulator/js/modules/resize_columns.js
new file mode 100644 (file)
index 0000000..753c02b
--- /dev/null
@@ -0,0 +1,163 @@
+/* Tabulator v4.7.0 (c) Oliver Folkerd */
+
+var ResizeColumns = function ResizeColumns(table) {
+       this.table = table; //hold Tabulator object
+       this.startColumn = false;
+       this.startX = false;
+       this.startWidth = false;
+       this.handle = null;
+       this.prevHandle = null;
+};
+
+ResizeColumns.prototype.initializeColumn = function (type, column, element) {
+       var self = this,
+           variableHeight = false,
+           mode = this.table.options.resizableColumns;
+
+       //set column resize mode
+       if (type === "header") {
+               variableHeight = column.definition.formatter == "textarea" || column.definition.variableHeight;
+               column.modules.resize = { variableHeight: variableHeight };
+       }
+
+       if (mode === true || mode == type) {
+
+               var handle = document.createElement('div');
+               handle.className = "tabulator-col-resize-handle";
+
+               var prevHandle = document.createElement('div');
+               prevHandle.className = "tabulator-col-resize-handle prev";
+
+               handle.addEventListener("click", function (e) {
+                       e.stopPropagation();
+               });
+
+               var handleDown = function handleDown(e) {
+                       var nearestColumn = column.getLastColumn();
+
+                       if (nearestColumn && self._checkResizability(nearestColumn)) {
+                               self.startColumn = column;
+                               self._mouseDown(e, nearestColumn, handle);
+                       }
+               };
+
+               handle.addEventListener("mousedown", handleDown);
+               handle.addEventListener("touchstart", handleDown, { passive: true });
+
+               //reszie column on  double click
+               handle.addEventListener("dblclick", function (e) {
+                       var col = column.getLastColumn();
+
+                       if (col && self._checkResizability(col)) {
+                               e.stopPropagation();
+                               col.reinitializeWidth(true);
+                       }
+               });
+
+               prevHandle.addEventListener("click", function (e) {
+                       e.stopPropagation();
+               });
+
+               var prevHandleDown = function prevHandleDown(e) {
+                       var nearestColumn, colIndex, prevColumn;
+
+                       nearestColumn = column.getFirstColumn();
+
+                       if (nearestColumn) {
+                               colIndex = self.table.columnManager.findColumnIndex(nearestColumn);
+                               prevColumn = colIndex > 0 ? self.table.columnManager.getColumnByIndex(colIndex - 1) : false;
+
+                               if (prevColumn && self._checkResizability(prevColumn)) {
+                                       self.startColumn = column;
+                                       self._mouseDown(e, prevColumn, prevHandle);
+                               }
+                       }
+               };
+
+               prevHandle.addEventListener("mousedown", prevHandleDown);
+               prevHandle.addEventListener("touchstart", prevHandleDown, { passive: true });
+
+               //resize column on double click
+               prevHandle.addEventListener("dblclick", function (e) {
+                       var nearestColumn, colIndex, prevColumn;
+
+                       nearestColumn = column.getFirstColumn();
+
+                       if (nearestColumn) {
+                               colIndex = self.table.columnManager.findColumnIndex(nearestColumn);
+                               prevColumn = colIndex > 0 ? self.table.columnManager.getColumnByIndex(colIndex - 1) : false;
+
+                               if (prevColumn && self._checkResizability(prevColumn)) {
+                                       e.stopPropagation();
+                                       prevColumn.reinitializeWidth(true);
+                               }
+                       }
+               });
+
+               element.appendChild(handle);
+               element.appendChild(prevHandle);
+       }
+};
+
+ResizeColumns.prototype._checkResizability = function (column) {
+       return typeof column.definition.resizable != "undefined" ? column.definition.resizable : this.table.options.resizableColumns;
+};
+
+ResizeColumns.prototype._mouseDown = function (e, column, handle) {
+       var self = this;
+
+       self.table.element.classList.add("tabulator-block-select");
+
+       function mouseMove(e) {
+               // self.table.columnManager.tempScrollBlock();
+
+               column.setWidth(self.startWidth + ((typeof e.screenX === "undefined" ? e.touches[0].screenX : e.screenX) - self.startX));
+
+               if (!self.table.browserSlow && column.modules.resize && column.modules.resize.variableHeight) {
+                       column.checkCellHeights();
+               }
+       }
+
+       function mouseUp(e) {
+
+               //block editor from taking action while resizing is taking place
+               if (self.startColumn.modules.edit) {
+                       self.startColumn.modules.edit.blocked = false;
+               }
+
+               if (self.table.browserSlow && column.modules.resize && column.modules.resize.variableHeight) {
+                       column.checkCellHeights();
+               }
+
+               document.body.removeEventListener("mouseup", mouseUp);
+               document.body.removeEventListener("mousemove", mouseMove);
+
+               handle.removeEventListener("touchmove", mouseMove);
+               handle.removeEventListener("touchend", mouseUp);
+
+               self.table.element.classList.remove("tabulator-block-select");
+
+               if (self.table.options.persistence && self.table.modExists("persistence", true) && self.table.modules.persistence.config.columns) {
+                       self.table.modules.persistence.save("columns");
+               }
+
+               self.table.options.columnResized.call(self.table, column.getComponent());
+       }
+
+       e.stopPropagation(); //prevent resize from interfereing with movable columns
+
+       //block editor from taking action while resizing is taking place
+       if (self.startColumn.modules.edit) {
+               self.startColumn.modules.edit.blocked = true;
+       }
+
+       self.startX = typeof e.screenX === "undefined" ? e.touches[0].screenX : e.screenX;
+       self.startWidth = column.getWidth();
+
+       document.body.addEventListener("mousemove", mouseMove);
+       document.body.addEventListener("mouseup", mouseUp);
+       handle.addEventListener("touchmove", mouseMove, { passive: true });
+       handle.addEventListener("touchend", mouseUp);
+};
+
+Tabulator.prototype.registerModule("resizeColumns", ResizeColumns);
\ No newline at end of file
diff --git a/admin/js/vendors/tabulator/js/modules/resize_columns.min.js b/admin/js/vendors/tabulator/js/modules/resize_columns.min.js
new file mode 100644 (file)
index 0000000..7ae0e38
--- /dev/null
@@ -0,0 +1,2 @@
+/* Tabulator v4.7.0 (c) Oliver Folkerd */
+var ResizeColumns=function(e){this.table=e,this.startColumn=!1,this.startX=!1,this.startWidth=!1,this.handle=null,this.prevHandle=null};ResizeColumns.prototype.initializeColumn=function(e,t,n){var o=this,i=!1,s=this.table.options.resizableColumns;if("header"===e&&(i="textarea"==t.definition.formatter||t.definition.variableHeight,t.modules.resize={variableHeight:i}),!0===s||s==e){var a=document.createElement("div");a.className="tabulator-col-resize-handle";var l=document.createElement("div");l.className="tabulator-col-resize-handle prev",a.addEventListener("click",function(e){e.stopPropagation()});var r=function(e){var n=t.getLastColumn();n&&o._checkResizability(n)&&(o.startColumn=t,o._mouseDown(e,n,a))};a.addEventListener("mousedown",r),a.addEventListener("touchstart",r,{passive:!0}),a.addEventListener("dblclick",function(e){var n=t.getLastColumn();n&&o._checkResizability(n)&&(e.stopPropagation(),n.reinitializeWidth(!0))}),l.addEventListener("click",function(e){e.stopPropagation()});var d=function(e){var n,i,s;(n=t.getFirstColumn())&&(i=o.table.columnManager.findColumnIndex(n),(s=i>0&&o.table.columnManager.getColumnByIndex(i-1))&&o._checkResizability(s)&&(o.startColumn=t,o._mouseDown(e,s,l)))};l.addEventListener("mousedown",d),l.addEventListener("touchstart",d,{passive:!0}),l.addEventListener("dblclick",function(e){var n,i,s;(n=t.getFirstColumn())&&(i=o.table.columnManager.findColumnIndex(n),(s=i>0&&o.table.columnManager.getColumnByIndex(i-1))&&o._checkResizability(s)&&(e.stopPropagation(),s.reinitializeWidth(!0)))}),n.appendChild(a),n.appendChild(l)}},ResizeColumns.prototype._checkResizability=function(e){return void 0!==e.definition.resizable?e.definition.resizable:this.table.options.resizableColumns},ResizeColumns.prototype._mouseDown=function(e,t,n){function o(e){t.setWidth(s.startWidth+((void 0===e.screenX?e.touches[0].screenX:e.screenX)-s.startX)),!s.table.browserSlow&&t.modules.resize&&t.modules.resize.variableHeight&&t.checkCellHeights()}function i(e){s.startColumn.modules.edit&&(s.startColumn.modules.edit.blocked=!1),s.table.browserSlow&&t.modules.resize&&t.modules.resize.variableHeight&&t.checkCellHeights(),document.body.removeEventListener("mouseup",i),document.body.removeEventListener("mousemove",o),n.removeEventListener("touchmove",o),n.removeEventListener("touchend",i),s.table.element.classList.remove("tabulator-block-select"),s.table.options.persistence&&s.table.modExists("persistence",!0)&&s.table.modules.persistence.config.columns&&s.table.modules.persistence.save("columns"),s.table.options.columnResized.call(s.table,t.getComponent())}var s=this;s.table.element.classList.add("tabulator-block-select"),e.stopPropagation(),s.startColumn.modules.edit&&(s.startColumn.modules.edit.blocked=!0),s.startX=void 0===e.screenX?e.touches[0].screenX:e.screenX,s.startWidth=t.getWidth(),document.body.addEventListener("mousemove",o),document.body.addEventListener("mouseup",i),n.addEventListener("touchmove",o,{passive:!0}),n.addEventListener("touchend",i)},Tabulator.prototype.registerModule("resizeColumns",ResizeColumns);
\ No newline at end of file
diff --git a/admin/js/vendors/tabulator/js/modules/resize_rows.js b/admin/js/vendors/tabulator/js/modules/resize_rows.js
new file mode 100644 (file)
index 0000000..8d39fcd
--- /dev/null
@@ -0,0 +1,98 @@
+/* Tabulator v4.7.0 (c) Oliver Folkerd */
+
+var ResizeRows = function ResizeRows(table) {
+       this.table = table; //hold Tabulator object
+       this.startColumn = false;
+       this.startY = false;
+       this.startHeight = false;
+       this.handle = null;
+       this.prevHandle = null;
+};
+
+ResizeRows.prototype.initializeRow = function (row) {
+       var self = this,
+           rowEl = row.getElement();
+
+       var handle = document.createElement('div');
+       handle.className = "tabulator-row-resize-handle";
+
+       var prevHandle = document.createElement('div');
+       prevHandle.className = "tabulator-row-resize-handle prev";
+
+       handle.addEventListener("click", function (e) {
+               e.stopPropagation();
+       });
+
+       var handleDown = function handleDown(e) {
+               self.startRow = row;
+               self._mouseDown(e, row, handle);
+       };
+
+       handle.addEventListener("mousedown", handleDown);
+       handle.addEventListener("touchstart", handleDown, { passive: true });
+
+       prevHandle.addEventListener("click", function (e) {
+               e.stopPropagation();
+       });
+
+       var prevHandleDown = function prevHandleDown(e) {
+               var prevRow = self.table.rowManager.prevDisplayRow(row);
+
+               if (prevRow) {
+                       self.startRow = prevRow;
+                       self._mouseDown(e, prevRow, prevHandle);
+               }
+       };
+
+       prevHandle.addEventListener("mousedown", prevHandleDown);
+       prevHandle.addEventListener("touchstart", prevHandleDown, { passive: true });
+
+       rowEl.appendChild(handle);
+       rowEl.appendChild(prevHandle);
+};
+
+ResizeRows.prototype._mouseDown = function (e, row, handle) {
+       var self = this;
+
+       self.table.element.classList.add("tabulator-block-select");
+
+       function mouseMove(e) {
+               row.setHeight(self.startHeight + ((typeof e.screenY === "undefined" ? e.touches[0].screenY : e.screenY) - self.startY));
+       }
+
+       function mouseUp(e) {
+
+               // //block editor from taking action while resizing is taking place
+               // if(self.startColumn.modules.edit){
+               //      self.startColumn.modules.edit.blocked = false;
+               // }
+
+               document.body.removeEventListener("mouseup", mouseMove);
+               document.body.removeEventListener("mousemove", mouseMove);
+
+               handle.removeEventListener("touchmove", mouseMove);
+               handle.removeEventListener("touchend", mouseUp);
+
+               self.table.element.classList.remove("tabulator-block-select");
+
+               self.table.options.rowResized.call(this.table, row.getComponent());
+       }
+
+       e.stopPropagation(); //prevent resize from interfereing with movable columns
+
+       //block editor from taking action while resizing is taking place
+       // if(self.startColumn.modules.edit){
+       //      self.startColumn.modules.edit.blocked = true;
+       // }
+
+       self.startY = typeof e.screenY === "undefined" ? e.touches[0].screenY : e.screenY;
+       self.startHeight = row.getHeight();
+
+       document.body.addEventListener("mousemove", mouseMove);
+       document.body.addEventListener("mouseup", mouseUp);
+
+       handle.addEventListener("touchmove", mouseMove, { passive: true });
+       handle.addEventListener("touchend", mouseUp);
+};
+
+Tabulator.prototype.registerModule("resizeRows", ResizeRows);
\ No newline at end of file
diff --git a/admin/js/vendors/tabulator/js/modules/resize_rows.min.js b/admin/js/vendors/tabulator/js/modules/resize_rows.min.js
new file mode 100644 (file)
index 0000000..fb0db00
--- /dev/null
@@ -0,0 +1,2 @@
+/* Tabulator v4.7.0 (c) Oliver Folkerd */
+var ResizeRows=function(e){this.table=e,this.startColumn=!1,this.startY=!1,this.startHeight=!1,this.handle=null,this.prevHandle=null};ResizeRows.prototype.initializeRow=function(e){var t=this,o=e.getElement(),s=document.createElement("div");s.className="tabulator-row-resize-handle";var n=document.createElement("div");n.className="tabulator-row-resize-handle prev",s.addEventListener("click",function(e){e.stopPropagation()});var a=function(o){t.startRow=e,t._mouseDown(o,e,s)};s.addEventListener("mousedown",a),s.addEventListener("touchstart",a,{passive:!0}),n.addEventListener("click",function(e){e.stopPropagation()});var r=function(o){var s=t.table.rowManager.prevDisplayRow(e);s&&(t.startRow=s,t._mouseDown(o,s,n))};n.addEventListener("mousedown",r),n.addEventListener("touchstart",r,{passive:!0}),o.appendChild(s),o.appendChild(n)},ResizeRows.prototype._mouseDown=function(e,t,o){function s(e){t.setHeight(a.startHeight+((void 0===e.screenY?e.touches[0].screenY:e.screenY)-a.startY))}function n(e){document.body.removeEventListener("mouseup",s),document.body.removeEventListener("mousemove",s),o.removeEventListener("touchmove",s),o.removeEventListener("touchend",n),a.table.element.classList.remove("tabulator-block-select"),a.table.options.rowResized.call(this.table,t.getComponent())}var a=this;a.table.element.classList.add("tabulator-block-select"),e.stopPropagation(),a.startY=void 0===e.screenY?e.touches[0].screenY:e.screenY,a.startHeight=t.getHeight(),document.body.addEventListener("mousemove",s),document.body.addEventListener("mouseup",n),o.addEventListener("touchmove",s,{passive:!0}),o.addEventListener("touchend",n)},Tabulator.prototype.registerModule("resizeRows",ResizeRows);
\ No newline at end of file
diff --git a/admin/js/vendors/tabulator/js/modules/resize_table.js b/admin/js/vendors/tabulator/js/modules/resize_table.js
new file mode 100644 (file)
index 0000000..1286641
--- /dev/null
@@ -0,0 +1,107 @@
+/* Tabulator v4.7.0 (c) Oliver Folkerd */
+
+var ResizeTable = function ResizeTable(table) {
+       this.table = table; //hold Tabulator object
+       this.binding = false;
+       this.observer = false;
+       this.containerObserver = false;
+
+       this.tableHeight = 0;
+       this.tableWidth = 0;
+       this.containerHeight = 0;
+       this.containerWidth = 0;
+
+       this.autoResize = false;
+};
+
+ResizeTable.prototype.initialize = function (row) {
+       var _this = this;
+
+       var table = this.table,
+           tableStyle;
+
+       this.tableHeight = table.element.clientHeight;
+       this.tableWidth = table.element.clientWidth;
+
+       if (table.element.parentNode) {
+               this.containerHeight = table.element.parentNode.clientHeight;
+               this.containerWidth = table.element.parentNode.clientWidth;
+       }
+
+       if (typeof ResizeObserver !== "undefined" && table.rowManager.getRenderMode() === "virtual") {
+
+               this.autoResize = true;
+
+               this.observer = new ResizeObserver(function (entry) {
+                       if (!table.browserMobile || table.browserMobile && !table.modules.edit.currentCell) {
+
+                               var nodeHeight = Math.floor(entry[0].contentRect.height);
+                               var nodeWidth = Math.floor(entry[0].contentRect.width);
+
+                               if (_this.tableHeight != nodeHeight || _this.tableWidth != nodeWidth) {
+                                       _this.tableHeight = nodeHeight;
+                                       _this.tableWidth = nodeWidth;
+
+                                       if (table.element.parentNode) {
+                                               _this.containerHeight = table.element.parentNode.clientHeight;
+                                               _this.containerWidth = table.element.parentNode.clientWidth;
+                                       }
+
+                                       table.redraw();
+                               }
+                       }
+               });
+
+               this.observer.observe(table.element);
+
+               tableStyle = window.getComputedStyle(table.element);
+
+               if (this.table.element.parentNode && !this.table.rowManager.fixedHeight && (tableStyle.getPropertyValue("max-height") || tableStyle.getPropertyValue("min-height"))) {
+
+                       this.containerObserver = new ResizeObserver(function (entry) {
+                               if (!table.browserMobile || table.browserMobile && !table.modules.edit.currentCell) {
+
+                                       var nodeHeight = Math.floor(entry[0].contentRect.height);
+                                       var nodeWidth = Math.floor(entry[0].contentRect.width);
+
+                                       if (_this.containerHeight != nodeHeight || _this.containerWidth != nodeWidth) {
+                                               _this.containerHeight = nodeHeight;
+                                               _this.containerWidth = nodeWidth;
+                                               _this.tableHeight = table.element.clientHeight;
+                                               _this.tableWidth = table.element.clientWidth;
+
+                                               table.redraw();
+                                       }
+
+                                       table.redraw();
+                               }
+                       });
+
+                       this.containerObserver.observe(this.table.element.parentNode);
+               }
+       } else {
+               this.binding = function () {
+                       if (!table.browserMobile || table.browserMobile && !table.modules.edit.currentCell) {
+                               table.redraw();
+                       }
+               };
+
+               window.addEventListener("resize", this.binding);
+       }
+};
+
+ResizeTable.prototype.clearBindings = function (row) {
+       if (this.binding) {
+               window.removeEventListener("resize", this.binding);
+       }
+
+       if (this.observer) {
+               this.observer.unobserve(this.table.element);
+       }
+
+       if (this.containerObserver) {
+               this.containerObserver.unobserve(this.table.element.parentNode);
+       }
+};
+
+Tabulator.prototype.registerModule("resizeTable", ResizeTable);
\ No newline at end of file
diff --git a/admin/js/vendors/tabulator/js/modules/resize_table.min.js b/admin/js/vendors/tabulator/js/modules/resize_table.min.js
new file mode 100644 (file)
index 0000000..e992d75
--- /dev/null
@@ -0,0 +1,2 @@
+/* Tabulator v4.7.0 (c) Oliver Folkerd */
+var ResizeTable=function(e){this.table=e,this.binding=!1,this.observer=!1,this.containerObserver=!1,this.tableHeight=0,this.tableWidth=0,this.containerHeight=0,this.containerWidth=0,this.autoResize=!1};ResizeTable.prototype.initialize=function(e){var t,i=this,n=this.table;this.tableHeight=n.element.clientHeight,this.tableWidth=n.element.clientWidth,n.element.parentNode&&(this.containerHeight=n.element.parentNode.clientHeight,this.containerWidth=n.element.parentNode.clientWidth),"undefined"!=typeof ResizeObserver&&"virtual"===n.rowManager.getRenderMode()?(this.autoResize=!0,this.observer=new ResizeObserver(function(e){if(!n.browserMobile||n.browserMobile&&!n.modules.edit.currentCell){var t=Math.floor(e[0].contentRect.height),r=Math.floor(e[0].contentRect.width);i.tableHeight==t&&i.tableWidth==r||(i.tableHeight=t,i.tableWidth=r,n.element.parentNode&&(i.containerHeight=n.element.parentNode.clientHeight,i.containerWidth=n.element.parentNode.clientWidth),n.redraw())}}),this.observer.observe(n.element),t=window.getComputedStyle(n.element),this.table.element.parentNode&&!this.table.rowManager.fixedHeight&&(t.getPropertyValue("max-height")||t.getPropertyValue("min-height"))&&(this.containerObserver=new ResizeObserver(function(e){if(!n.browserMobile||n.browserMobile&&!n.modules.edit.currentCell){var t=Math.floor(e[0].contentRect.height),r=Math.floor(e[0].contentRect.width);i.containerHeight==t&&i.containerWidth==r||(i.containerHeight=t,i.containerWidth=r,i.tableHeight=n.element.clientHeight,i.tableWidth=n.element.clientWidth,n.redraw()),n.redraw()}}),this.containerObserver.observe(this.table.element.parentNode))):(this.binding=function(){(!n.browserMobile||n.browserMobile&&!n.modules.edit.currentCell)&&n.redraw()},window.addEventListener("resize",this.binding))},ResizeTable.prototype.clearBindings=function(e){this.binding&&window.removeEventListener("resize",this.binding),this.observer&&this.observer.unobserve(this.table.element),this.containerObserver&&this.containerObserver.unobserve(this.table.element.parentNode)},Tabulator.prototype.registerModule("resizeTable",ResizeTable);
\ No newline at end of file
diff --git a/admin/js/vendors/tabulator/js/modules/responsive_layout.js b/admin/js/vendors/tabulator/js/modules/responsive_layout.js
new file mode 100644 (file)
index 0000000..329f2a6
--- /dev/null
@@ -0,0 +1,301 @@
+/* Tabulator v4.7.0 (c) Oliver Folkerd */
+
+var ResponsiveLayout = function ResponsiveLayout(table) {
+       this.table = table; //hold Tabulator object
+       this.columns = [];
+       this.hiddenColumns = [];
+       this.mode = "";
+       this.index = 0;
+       this.collapseFormatter = [];
+       this.collapseStartOpen = true;
+       this.collapseHandleColumn = false;
+};
+
+//generate resposive columns list
+ResponsiveLayout.prototype.initialize = function () {
+       var self = this,
+           columns = [];
+
+       this.mode = this.table.options.responsiveLayout;
+       this.collapseFormatter = this.table.options.responsiveLayoutCollapseFormatter || this.formatCollapsedData;
+       this.collapseStartOpen = this.table.options.responsiveLayoutCollapseStartOpen;
+       this.hiddenColumns = [];
+
+       //detemine level of responsivity for each column
+       this.table.columnManager.columnsByIndex.forEach(function (column, i) {
+               if (column.modules.responsive) {
+                       if (column.modules.responsive.order && column.modules.responsive.visible) {
+                               column.modules.responsive.index = i;
+                               columns.push(column);
+
+                               if (!column.visible && self.mode === "collapse") {
+                                       self.hiddenColumns.push(column);
+                               }
+                       }
+               }
+       });
+
+       //sort list by responsivity
+       columns = columns.reverse();
+       columns = columns.sort(function (a, b) {
+               var diff = b.modules.responsive.order - a.modules.responsive.order;
+               return diff || b.modules.responsive.index - a.modules.responsive.index;
+       });
+
+       this.columns = columns;
+
+       if (this.mode === "collapse") {
+               this.generateCollapsedContent();
+       }
+
+       //assign collapse column
+       for (var _iterator = this.table.columnManager.columnsByIndex, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {
+               var _ref;
+
+               if (_isArray) {
+                       if (_i >= _iterator.length) break;
+                       _ref = _iterator[_i++];
+               } else {
+                       _i = _iterator.next();
+                       if (_i.done) break;
+                       _ref = _i.value;
+               }
+
+               var col = _ref;
+
+               if (col.definition.formatter == "responsiveCollapse") {
+                       this.collapseHandleColumn = col;
+                       break;
+               }
+       }
+
+       if (this.collapseHandleColumn) {
+               if (this.hiddenColumns.length) {
+                       this.collapseHandleColumn.show();
+               } else {
+                       this.collapseHandleColumn.hide();
+               }
+       }
+};
+
+//define layout information
+ResponsiveLayout.prototype.initializeColumn = function (column) {
+       var def = column.getDefinition();
+
+       column.modules.responsive = { order: typeof def.responsive === "undefined" ? 1 : def.responsive, visible: def.visible === false ? false : true };
+};
+
+ResponsiveLayout.prototype.initializeRow = function (row) {
+       var el;
+
+       if (row.type !== "calc") {
+               el = document.createElement("div");
+               el.classList.add("tabulator-responsive-collapse");
+
+               row.modules.responsiveLayout = {
+                       element: el,
+                       open: this.collapseStartOpen
+               };
+
+               if (!this.collapseStartOpen) {
+                       el.style.display = 'none';
+               }
+       }
+};
+
+ResponsiveLayout.prototype.layoutRow = function (row) {
+       var rowEl = row.getElement();
+
+       if (row.modules.responsiveLayout) {
+               rowEl.appendChild(row.modules.responsiveLayout.element);
+               this.generateCollapsedRowContent(row);
+       }
+};
+
+//update column visibility
+ResponsiveLayout.prototype.updateColumnVisibility = function (column, visible) {
+       var index;
+       if (column.modules.responsive) {
+               column.modules.responsive.visible = visible;
+               this.initialize();
+       }
+};
+
+ResponsiveLayout.prototype.hideColumn = function (column) {
+       var colCount = this.hiddenColumns.length;
+
+       column.hide(false, true);
+
+       if (this.mode === "collapse") {
+               this.hiddenColumns.unshift(column);
+               this.generateCollapsedContent();
+
+               if (this.collapseHandleColumn && !colCount) {
+                       this.collapseHandleColumn.show();
+               }
+       }
+};
+
+ResponsiveLayout.prototype.showColumn = function (column) {
+       var index;
+
+       column.show(false, true);
+       //set column width to prevent calculation loops on uninitialized columns
+       column.setWidth(column.getWidth());
+
+       if (this.mode === "collapse") {
+               index = this.hiddenColumns.indexOf(column);
+
+               if (index > -1) {
+                       this.hiddenColumns.splice(index, 1);
+               }
+
+               this.generateCollapsedContent();
+
+               if (this.collapseHandleColumn && !this.hiddenColumns.length) {
+                       this.collapseHandleColumn.hide();
+               }
+       }
+};
+
+//redraw columns to fit space
+ResponsiveLayout.prototype.update = function () {
+       var self = this,
+           working = true;
+
+       while (working) {
+
+               var width = self.table.modules.layout.getMode() == "fitColumns" ? self.table.columnManager.getFlexBaseWidth() : self.table.columnManager.getWidth();
+
+               var diff = (self.table.options.headerVisible ? self.table.columnManager.element.clientWidth : self.table.element.clientWidth) - width;
+
+               if (diff < 0) {
+                       //table is too wide
+                       var column = self.columns[self.index];
+
+                       if (column) {
+                               self.hideColumn(column);
+                               self.index++;
+                       } else {
+                               working = false;
+                       }
+               } else {
+
+                       //table has spare space
+                       var _column = self.columns[self.index - 1];
+
+                       if (_column) {
+                               if (diff > 0) {
+                                       if (diff >= _column.getWidth()) {
+                                               self.showColumn(_column);
+                                               self.index--;
+                                       } else {
+                                               working = false;
+                                       }
+                               } else {
+                                       working = false;
+                               }
+                       } else {
+                               working = false;
+                       }
+               }
+
+               if (!self.table.rowManager.activeRowsCount) {
+                       self.table.rowManager.renderEmptyScroll();
+               }
+       }
+};
+
+ResponsiveLayout.prototype.generateCollapsedContent = function () {
+       var self = this,
+           rows = this.table.rowManager.getDisplayRows();
+
+       rows.forEach(function (row) {
+               self.generateCollapsedRowContent(row);
+       });
+};
+
+ResponsiveLayout.prototype.generateCollapsedRowContent = function (row) {
+       var el, contents;
+
+       if (row.modules.responsiveLayout) {
+               el = row.modules.responsiveLayout.element;
+
+               while (el.firstChild) {
+                       el.removeChild(el.firstChild);
+               }contents = this.collapseFormatter(this.generateCollapsedRowData(row));
+               if (contents) {
+                       el.appendChild(contents);
+               }
+       }
+};
+
+ResponsiveLayout.prototype.generateCollapsedRowData = function (row) {
+       var self = this,
+           data = row.getData(),
+           output = [],
+           mockCellComponent;
+
+       this.hiddenColumns.forEach(function (column) {
+               var value = column.getFieldValue(data);
+
+               if (column.definition.title && column.field) {
+                       if (column.modules.format && self.table.options.responsiveLayoutCollapseUseFormatters) {
+
+                               mockCellComponent = {
+                                       value: false,
+                                       data: {},
+                                       getValue: function getValue() {
+                                               return value;
+                                       },
+                                       getData: function getData() {
+                                               return data;
+                                       },
+                                       getElement: function getElement() {
+                                               return document.createElement("div");
+                                       },
+                                       getRow: function getRow() {
+                                               return row.getComponent();
+                                       },
+                                       getColumn: function getColumn() {
+                                               return column.getComponent();
+                                       }
+                               };
+
+                               output.push({
+                                       title: column.definition.title,
+                                       value: column.modules.format.formatter.call(self.table.modules.format, mockCellComponent, column.modules.format.params)
+                               });
+                       } else {
+                               output.push({
+                                       title: column.definition.title,
+                                       value: value
+                               });
+                       }
+               }
+       });
+
+       return output;
+};
+
+ResponsiveLayout.prototype.formatCollapsedData = function (data) {
+       var list = document.createElement("table"),
+           listContents = "";
+
+       data.forEach(function (item) {
+               var div = document.createElement("div");
+
+               if (item.value instanceof Node) {
+                       div.appendChild(item.value);
+                       item.value = div.innerHTML;
+               }
+
+               listContents += "<tr><td><strong>" + item.title + "</strong></td><td>" + item.value + "</td></tr>";
+       });
+
+       list.innerHTML = listContents;
+
+       return Object.keys(data).length ? list : "";
+};
+
+Tabulator.prototype.registerModule("responsiveLayout", ResponsiveLayout);
\ No newline at end of file
diff --git a/admin/js/vendors/tabulator/js/modules/responsive_layout.min.js b/admin/js/vendors/tabulator/js/modules/responsive_layout.min.js
new file mode 100644 (file)
index 0000000..4ef6538
--- /dev/null
@@ -0,0 +1,2 @@
+/* Tabulator v4.7.0 (c) Oliver Folkerd */
+var ResponsiveLayout=function(e){this.table=e,this.columns=[],this.hiddenColumns=[],this.mode="",this.index=0,this.collapseFormatter=[],this.collapseStartOpen=!0,this.collapseHandleColumn=!1};ResponsiveLayout.prototype.initialize=function(){var e=this,t=[];this.mode=this.table.options.responsiveLayout,this.collapseFormatter=this.table.options.responsiveLayoutCollapseFormatter||this.formatCollapsedData,this.collapseStartOpen=this.table.options.responsiveLayoutCollapseStartOpen,this.hiddenColumns=[],this.table.columnManager.columnsByIndex.forEach(function(o,n){o.modules.responsive&&o.modules.responsive.order&&o.modules.responsive.visible&&(o.modules.responsive.index=n,t.push(o),o.visible||"collapse"!==e.mode||e.hiddenColumns.push(o))}),t=t.reverse(),t=t.sort(function(e,t){return t.modules.responsive.order-e.modules.responsive.order||t.modules.responsive.index-e.modules.responsive.index}),this.columns=t,"collapse"===this.mode&&this.generateCollapsedContent();for(var o=this.table.columnManager.columnsByIndex,n=Array.isArray(o),s=0,o=n?o:o[Symbol.iterator]();;){var i;if(n){if(s>=o.length)break;i=o[s++]}else{if(s=o.next(),s.done)break;i=s.value}var l=i;if("responsiveCollapse"==l.definition.formatter){this.collapseHandleColumn=l;break}}this.collapseHandleColumn&&(this.hiddenColumns.length?this.collapseHandleColumn.show():this.collapseHandleColumn.hide())},ResponsiveLayout.prototype.initializeColumn=function(e){var t=e.getDefinition();e.modules.responsive={order:void 0===t.responsive?1:t.responsive,visible:!1!==t.visible}},ResponsiveLayout.prototype.initializeRow=function(e){var t;"calc"!==e.type&&(t=document.createElement("div"),t.classList.add("tabulator-responsive-collapse"),e.modules.responsiveLayout={element:t,open:this.collapseStartOpen},this.collapseStartOpen||(t.style.display="none"))},ResponsiveLayout.prototype.layoutRow=function(e){var t=e.getElement();e.modules.responsiveLayout&&(t.appendChild(e.modules.responsiveLayout.element),this.generateCollapsedRowContent(e))},ResponsiveLayout.prototype.updateColumnVisibility=function(e,t){e.modules.responsive&&(e.modules.responsive.visible=t,this.initialize())},ResponsiveLayout.prototype.hideColumn=function(e){var t=this.hiddenColumns.length;e.hide(!1,!0),"collapse"===this.mode&&(this.hiddenColumns.unshift(e),this.generateCollapsedContent(),this.collapseHandleColumn&&!t&&this.collapseHandleColumn.show())},ResponsiveLayout.prototype.showColumn=function(e){var t;e.show(!1,!0),e.setWidth(e.getWidth()),"collapse"===this.mode&&(t=this.hiddenColumns.indexOf(e),t>-1&&this.hiddenColumns.splice(t,1),this.generateCollapsedContent(),this.collapseHandleColumn&&!this.hiddenColumns.length&&this.collapseHandleColumn.hide())},ResponsiveLayout.prototype.update=function(){for(var e=this,t=!0;t;){var o="fitColumns"==e.table.modules.layout.getMode()?e.table.columnManager.getFlexBaseWidth():e.table.columnManager.getWidth(),n=(e.table.options.headerVisible?e.table.columnManager.element.clientWidth:e.table.element.clientWidth)-o;if(n<0){var s=e.columns[e.index];s?(e.hideColumn(s),e.index++):t=!1}else{var i=e.columns[e.index-1];i&&n>0&&n>=i.getWidth()?(e.showColumn(i),e.index--):t=!1}e.table.rowManager.activeRowsCount||e.table.rowManager.renderEmptyScroll()}},ResponsiveLayout.prototype.generateCollapsedContent=function(){var e=this;this.table.rowManager.getDisplayRows().forEach(function(t){e.generateCollapsedRowContent(t)})},ResponsiveLayout.prototype.generateCollapsedRowContent=function(e){var t,o;if(e.modules.responsiveLayout){for(t=e.modules.responsiveLayout.element;t.firstChild;)t.removeChild(t.firstChild);o=this.collapseFormatter(this.generateCollapsedRowData(e)),o&&t.appendChild(o)}},ResponsiveLayout.prototype.generateCollapsedRowData=function(e){var t,o=this,n=e.getData(),s=[];return this.hiddenColumns.forEach(function(i){var l=i.getFieldValue(n);i.definition.title&&i.field&&(i.modules.format&&o.table.options.responsiveLayoutCollapseUseFormatters?(t={value:!1,data:{},getValue:function(){return l},getData:function(){return n},getElement:function(){return document.createElement("div")},getRow:function(){return e.getComponent()},getColumn:function(){return i.getComponent()}},s.push({title:i.definition.title,value:i.modules.format.formatter.call(o.table.modules.format,t,i.modules.format.params)})):s.push({title:i.definition.title,value:l}))}),s},ResponsiveLayout.prototype.formatCollapsedData=function(e){var t=document.createElement("table"),o="";return e.forEach(function(e){var t=document.createElement("div");e.value instanceof Node&&(t.appendChild(e.value),e.value=t.innerHTML),o+="<tr><td><strong>"+e.title+"</strong></td><td>"+e.value+"</td></tr>"}),t.innerHTML=o,Object.keys(e).length?t:""},Tabulator.prototype.registerModule("responsiveLayout",ResponsiveLayout);
\ No newline at end of file
diff --git a/admin/js/vendors/tabulator/js/modules/select_row.js b/admin/js/vendors/tabulator/js/modules/select_row.js
new file mode 100644 (file)
index 0000000..2869429
--- /dev/null
@@ -0,0 +1,417 @@
+var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
+
+/* Tabulator v4.7.0 (c) Oliver Folkerd */
+
+var SelectRow = function SelectRow(table) {
+       this.table = table; //hold Tabulator object
+       this.selecting = false; //flag selecting in progress
+       this.lastClickedRow = false; //last clicked row
+       this.selectPrev = []; //hold previously selected element for drag drop selection
+       this.selectedRows = []; //hold selected rows
+       this.headerCheckboxElement = null; // hold header select element
+};
+
+SelectRow.prototype.clearSelectionData = function (silent) {
+       this.selecting = false;
+       this.lastClickedRow = false;
+       this.selectPrev = [];
+       this.selectedRows = [];
+
+       if (!silent) {
+               this._rowSelectionChanged();
+       }
+};
+
+SelectRow.prototype.initializeRow = function (row) {
+       var self = this,
+           element = row.getElement();
+
+       // trigger end of row selection
+       var endSelect = function endSelect() {
+
+               setTimeout(function () {
+                       self.selecting = false;
+               }, 50);
+
+               document.body.removeEventListener("mouseup", endSelect);
+       };
+
+       row.modules.select = { selected: false };
+
+       //set row selection class
+       if (self.table.options.selectableCheck.call(this.table, row.getComponent())) {
+               element.classList.add("tabulator-selectable");
+               element.classList.remove("tabulator-unselectable");
+
+               if (self.table.options.selectable && self.table.options.selectable != "highlight") {
+                       if (self.table.options.selectableRangeMode === "click") {
+                               element.addEventListener("click", function (e) {
+                                       if (e.shiftKey) {
+                                               self.table._clearSelection();
+                                               self.lastClickedRow = self.lastClickedRow || row;
+
+                                               var lastClickedRowIdx = self.table.rowManager.getDisplayRowIndex(self.lastClickedRow);
+                                               var rowIdx = self.table.rowManager.getDisplayRowIndex(row);
+
+                                               var fromRowIdx = lastClickedRowIdx <= rowIdx ? lastClickedRowIdx : rowIdx;
+                                               var toRowIdx = lastClickedRowIdx >= rowIdx ? lastClickedRowIdx : rowIdx;
+
+                                               var rows = self.table.rowManager.getDisplayRows().slice(0);
+                                               var toggledRows = rows.splice(fromRowIdx, toRowIdx - fromRowIdx + 1);
+
+                                               if (e.ctrlKey || e.metaKey) {
+                                                       toggledRows.forEach(function (toggledRow) {
+                                                               if (toggledRow !== self.lastClickedRow) {
+
+                                                                       if (self.table.options.selectable !== true && !self.isRowSelected(row)) {
+                                                                               if (self.selectedRows.length < self.table.options.selectable) {
+                                                                                       self.toggleRow(toggledRow);
+                                                                               }
+                                                                       } else {
+                                                                               self.toggleRow(toggledRow);
+                                                                       }
+                                                               }
+                                                       });
+                                                       self.lastClickedRow = row;
+                                               } else {
+                                                       self.deselectRows(undefined, true);
+
+                                                       if (self.table.options.selectable !== true) {
+                                                               if (toggledRows.length > self.table.options.selectable) {
+                                                                       toggledRows = toggledRows.slice(0, self.table.options.selectable);
+                                                               }
+                                                       }
+
+                                                       self.selectRows(toggledRows);
+                                               }
+                                               self.table._clearSelection();
+                                       } else if (e.ctrlKey || e.metaKey) {
+                                               self.toggleRow(row);
+                                               self.lastClickedRow = row;
+                                       } else {
+                                               self.deselectRows(undefined, true);
+                                               self.selectRows(row);
+                                               self.lastClickedRow = row;
+                                       }
+                               });
+                       } else {
+                               element.addEventListener("click", function (e) {
+                                       if (!self.table.modExists("edit") || !self.table.modules.edit.getCurrentCell()) {
+                                               self.table._clearSelection();
+                                       }
+
+                                       if (!self.selecting) {
+                                               self.toggleRow(row);
+                                       }
+                               });
+
+                               element.addEventListener("mousedown", function (e) {
+                                       if (e.shiftKey) {
+                                               self.table._clearSelection();
+
+                                               self.selecting = true;
+
+                                               self.selectPrev = [];
+
+                                               document.body.addEventListener("mouseup", endSelect);
+                                               document.body.addEventListener("keyup", endSelect);
+
+                                               self.toggleRow(row);
+
+                                               return false;
+                                       }
+                               });
+
+                               element.addEventListener("mouseenter", function (e) {
+                                       if (self.selecting) {
+                                               self.table._clearSelection();
+                                               self.toggleRow(row);
+
+                                               if (self.selectPrev[1] == row) {
+                                                       self.toggleRow(self.selectPrev[0]);
+                                               }
+                                       }
+                               });
+
+                               element.addEventListener("mouseout", function (e) {
+                                       if (self.selecting) {
+                                               self.table._clearSelection();
+                                               self.selectPrev.unshift(row);
+                                       }
+                               });
+                       }
+               }
+       } else {
+               element.classList.add("tabulator-unselectable");
+               element.classList.remove("tabulator-selectable");
+       }
+};
+
+//toggle row selection
+SelectRow.prototype.toggleRow = function (row) {
+       if (this.table.options.selectableCheck.call(this.table, row.getComponent())) {
+               if (row.modules.select && row.modules.select.selected) {
+                       this._deselectRow(row);
+               } else {
+                       this._selectRow(row);
+               }
+       }
+};
+
+//select a number of rows
+SelectRow.prototype.selectRows = function (rows) {
+       var _this = this;
+
+       var rowMatch;
+
+       switch (typeof rows === "undefined" ? "undefined" : _typeof(rows)) {
+               case "undefined":
+                       this.table.rowManager.rows.forEach(function (row) {
+                               _this._selectRow(row, true, true);
+                       });
+
+                       this._rowSelectionChanged();
+                       break;
+
+               case "string":
+
+                       rowMatch = this.table.rowManager.findRow(rows);
+
+                       if (rowMatch) {
+                               this._selectRow(rowMatch, true, true);
+                       } else {
+                               this.table.rowManager.getRows(rows).forEach(function (row) {
+                                       _this._selectRow(row, true, true);
+                               });
+                       }
+
+                       this._rowSelectionChanged();
+                       break;
+
+               default:
+                       if (Array.isArray(rows)) {
+                               rows.forEach(function (row) {
+                                       _this._selectRow(row, true, true);
+                               });
+
+                               this._rowSelectionChanged();
+                       } else {
+                               this._selectRow(rows, false, true);
+                       }
+                       break;
+       }
+};
+
+//select an individual row
+SelectRow.prototype._selectRow = function (rowInfo, silent, force) {
+       var index;
+
+       //handle max row count
+       if (!isNaN(this.table.options.selectable) && this.table.options.selectable !== true && !force) {
+               if (this.selectedRows.length >= this.table.options.selectable) {
+                       if (this.table.options.selectableRollingSelection) {
+                               this._deselectRow(this.selectedRows[0]);
+                       } else {
+                               return false;
+                       }
+               }
+       }
+
+       var row = this.table.rowManager.findRow(rowInfo);
+
+       if (row) {
+               if (this.selectedRows.indexOf(row) == -1) {
+                       if (!row.modules.select) {
+                               row.modules.select = {};
+                       }
+
+                       row.modules.select.selected = true;
+                       if (row.modules.select.checkboxEl) {
+                               row.modules.select.checkboxEl.checked = true;
+                       }
+                       row.getElement().classList.add("tabulator-selected");
+
+                       this.selectedRows.push(row);
+
+                       if (this.table.options.dataTreeSelectPropagate) {
+                               this.childRowSelection(row, true);
+                       }
+
+                       if (!silent) {
+                               this.table.options.rowSelected.call(this.table, row.getComponent());
+                       }
+
+                       this._rowSelectionChanged(silent);
+               }
+       } else {
+               if (!silent) {
+                       console.warn("Selection Error - No such row found, ignoring selection:" + rowInfo);
+               }
+       }
+};
+
+SelectRow.prototype.isRowSelected = function (row) {
+       return this.selectedRows.indexOf(row) !== -1;
+};
+
+//deselect a number of rows
+SelectRow.prototype.deselectRows = function (rows, silent) {
+       var self = this,
+           rowCount;
+
+       if (typeof rows == "undefined") {
+
+               rowCount = self.selectedRows.length;
+
+               for (var i = 0; i < rowCount; i++) {
+                       self._deselectRow(self.selectedRows[0], true);
+               }
+
+               self._rowSelectionChanged(silent);
+       } else {
+               if (Array.isArray(rows)) {
+                       rows.forEach(function (row) {
+                               self._deselectRow(row, true);
+                       });
+
+                       self._rowSelectionChanged(silent);
+               } else {
+                       self._deselectRow(rows, silent);
+               }
+       }
+};
+
+//deselect an individual row
+SelectRow.prototype._deselectRow = function (rowInfo, silent) {
+       var self = this,
+           row = self.table.rowManager.findRow(rowInfo),
+           index;
+
+       if (row) {
+               index = self.selectedRows.findIndex(function (selectedRow) {
+                       return selectedRow == row;
+               });
+
+               if (index > -1) {
+
+                       if (!row.modules.select) {
+                               row.modules.select = {};
+                       }
+
+                       row.modules.select.selected = false;
+                       if (row.modules.select.checkboxEl) {
+                               row.modules.select.checkboxEl.checked = false;
+                       }
+                       row.getElement().classList.remove("tabulator-selected");
+                       self.selectedRows.splice(index, 1);
+
+                       if (this.table.options.dataTreeSelectPropagate) {
+                               this.childRowSelection(row, false);
+                       }
+
+                       if (!silent) {
+                               self.table.options.rowDeselected.call(this.table, row.getComponent());
+                       }
+
+                       self._rowSelectionChanged(silent);
+               }
+       } else {
+               if (!silent) {
+                       console.warn("Deselection Error - No such row found, ignoring selection:" + rowInfo);
+               }
+       }
+};
+
+SelectRow.prototype.getSelectedData = function () {
+       var data = [];
+
+       this.selectedRows.forEach(function (row) {
+               data.push(row.getData());
+       });
+
+       return data;
+};
+
+SelectRow.prototype.getSelectedRows = function () {
+
+       var rows = [];
+
+       this.selectedRows.forEach(function (row) {
+               rows.push(row.getComponent());
+       });
+
+       return rows;
+};
+
+SelectRow.prototype._rowSelectionChanged = function (silent) {
+       if (this.headerCheckboxElement) {
+               if (this.selectedRows.length === 0) {
+                       this.headerCheckboxElement.checked = false;
+                       this.headerCheckboxElement.indeterminate = false;
+               } else if (this.table.rowManager.rows.length === this.selectedRows.length) {
+                       this.headerCheckboxElement.checked = true;
+                       this.headerCheckboxElement.indeterminate = false;
+               } else {
+                       this.headerCheckboxElement.indeterminate = true;
+                       this.headerCheckboxElement.checked = false;
+               }
+       }
+
+       if (!silent) {
+               this.table.options.rowSelectionChanged.call(this.table, this.getSelectedData(), this.getSelectedRows());
+       }
+};
+
+SelectRow.prototype.registerRowSelectCheckbox = function (row, element) {
+       if (!row._row.modules.select) {
+               row._row.modules.select = {};
+       }
+
+       row._row.modules.select.checkboxEl = element;
+};
+
+SelectRow.prototype.registerHeaderSelectCheckbox = function (element) {
+       this.headerCheckboxElement = element;
+};
+
+SelectRow.prototype.childRowSelection = function (row, select) {
+       var children = this.table.modules.dataTree.getChildren(row);
+
+       if (select) {
+               for (var _iterator = children, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {
+                       var _ref;
+
+                       if (_isArray) {
+                               if (_i >= _iterator.length) break;
+                               _ref = _iterator[_i++];
+                       } else {
+                               _i = _iterator.next();
+                               if (_i.done) break;
+                               _ref = _i.value;
+                       }
+
+                       var child = _ref;
+
+                       this._selectRow(child, true);
+               }
+       } else {
+               for (var _iterator2 = children, _isArray2 = Array.isArray(_iterator2), _i2 = 0, _iterator2 = _isArray2 ? _iterator2 : _iterator2[Symbol.iterator]();;) {
+                       var _ref2;
+
+                       if (_isArray2) {
+                               if (_i2 >= _iterator2.length) break;
+                               _ref2 = _iterator2[_i2++];
+                       } else {
+                               _i2 = _iterator2.next();
+                               if (_i2.done) break;
+                               _ref2 = _i2.value;
+                       }
+
+                       var _child = _ref2;
+
+                       this._deselectRow(_child, true);
+               }
+       }
+};
+
+Tabulator.prototype.registerModule("selectRow", SelectRow);
\ No newline at end of file
diff --git a/admin/js/vendors/tabulator/js/modules/select_row.min.js b/admin/js/vendors/tabulator/js/modules/select_row.min.js
new file mode 100644 (file)
index 0000000..488d7e6
--- /dev/null
@@ -0,0 +1,2 @@
+/* Tabulator v4.7.0 (c) Oliver Folkerd */
+var _typeof="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},SelectRow=function(e){this.table=e,this.selecting=!1,this.lastClickedRow=!1,this.selectPrev=[],this.selectedRows=[],this.headerCheckboxElement=null};SelectRow.prototype.clearSelectionData=function(e){this.selecting=!1,this.lastClickedRow=!1,this.selectPrev=[],this.selectedRows=[],e||this._rowSelectionChanged()},SelectRow.prototype.initializeRow=function(e){var t=this,o=e.getElement(),l=function e(){setTimeout(function(){t.selecting=!1},50),document.body.removeEventListener("mouseup",e)};e.modules.select={selected:!1},t.table.options.selectableCheck.call(this.table,e.getComponent())?(o.classList.add("tabulator-selectable"),o.classList.remove("tabulator-unselectable"),t.table.options.selectable&&"highlight"!=t.table.options.selectable&&("click"===t.table.options.selectableRangeMode?o.addEventListener("click",function(o){if(o.shiftKey){t.table._clearSelection(),t.lastClickedRow=t.lastClickedRow||e;var l=t.table.rowManager.getDisplayRowIndex(t.lastClickedRow),s=t.table.rowManager.getDisplayRowIndex(e),c=l<=s?l:s,i=l>=s?l:s,n=t.table.rowManager.getDisplayRows().slice(0),a=n.splice(c,i-c+1);o.ctrlKey||o.metaKey?(a.forEach(function(o){o!==t.lastClickedRow&&(!0===t.table.options.selectable||t.isRowSelected(e)?t.toggleRow(o):t.selectedRows.length<t.table.options.selectable&&t.toggleRow(o))}),t.lastClickedRow=e):(t.deselectRows(void 0,!0),!0!==t.table.options.selectable&&a.length>t.table.options.selectable&&(a=a.slice(0,t.table.options.selectable)),t.selectRows(a)),t.table._clearSelection()}else o.ctrlKey||o.metaKey?(t.toggleRow(e),t.lastClickedRow=e):(t.deselectRows(void 0,!0),t.selectRows(e),t.lastClickedRow=e)}):(o.addEventListener("click",function(o){t.table.modExists("edit")&&t.table.modules.edit.getCurrentCell()||t.table._clearSelection(),t.selecting||t.toggleRow(e)}),o.addEventListener("mousedown",function(o){if(o.shiftKey)return t.table._clearSelection(),t.selecting=!0,t.selectPrev=[],document.body.addEventListener("mouseup",l),document.body.addEventListener("keyup",l),t.toggleRow(e),!1}),o.addEventListener("mouseenter",function(o){t.selecting&&(t.table._clearSelection(),t.toggleRow(e),t.selectPrev[1]==e&&t.toggleRow(t.selectPrev[0]))}),o.addEventListener("mouseout",function(o){t.selecting&&(t.table._clearSelection(),t.selectPrev.unshift(e))})))):(o.classList.add("tabulator-unselectable"),o.classList.remove("tabulator-selectable"))},SelectRow.prototype.toggleRow=function(e){this.table.options.selectableCheck.call(this.table,e.getComponent())&&(e.modules.select&&e.modules.select.selected?this._deselectRow(e):this._selectRow(e))},SelectRow.prototype.selectRows=function(e){var t,o=this;switch(void 0===e?"undefined":_typeof(e)){case"undefined":this.table.rowManager.rows.forEach(function(e){o._selectRow(e,!0,!0)}),this._rowSelectionChanged();break;case"string":t=this.table.rowManager.findRow(e),t?this._selectRow(t,!0,!0):this.table.rowManager.getRows(e).forEach(function(e){o._selectRow(e,!0,!0)}),this._rowSelectionChanged();break;default:Array.isArray(e)?(e.forEach(function(e){o._selectRow(e,!0,!0)}),this._rowSelectionChanged()):this._selectRow(e,!1,!0)}},SelectRow.prototype._selectRow=function(e,t,o){if(!isNaN(this.table.options.selectable)&&!0!==this.table.options.selectable&&!o&&this.selectedRows.length>=this.table.options.selectable){if(!this.table.options.selectableRollingSelection)return!1;this._deselectRow(this.selectedRows[0])}var l=this.table.rowManager.findRow(e);l?-1==this.selectedRows.indexOf(l)&&(l.modules.select||(l.modules.select={}),l.modules.select.selected=!0,l.modules.select.checkboxEl&&(l.modules.select.checkboxEl.checked=!0),l.getElement().classList.add("tabulator-selected"),this.selectedRows.push(l),this.table.options.dataTreeSelectPropagate&&this.childRowSelection(l,!0),t||this.table.options.rowSelected.call(this.table,l.getComponent()),this._rowSelectionChanged(t)):t||console.warn("Selection Error - No such row found, ignoring selection:"+e)},SelectRow.prototype.isRowSelected=function(e){return-1!==this.selectedRows.indexOf(e)},SelectRow.prototype.deselectRows=function(e,t){var o,l=this;if(void 0===e){o=l.selectedRows.length;for(var s=0;s<o;s++)l._deselectRow(l.selectedRows[0],!0);l._rowSelectionChanged(t)}else Array.isArray(e)?(e.forEach(function(e){l._deselectRow(e,!0)}),l._rowSelectionChanged(t)):l._deselectRow(e,t)},SelectRow.prototype._deselectRow=function(e,t){var o,l=this,s=l.table.rowManager.findRow(e);s?(o=l.selectedRows.findIndex(function(e){return e==s}))>-1&&(s.modules.select||(s.modules.select={}),s.modules.select.selected=!1,s.modules.select.checkboxEl&&(s.modules.select.checkboxEl.checked=!1),s.getElement().classList.remove("tabulator-selected"),l.selectedRows.splice(o,1),this.table.options.dataTreeSelectPropagate&&this.childRowSelection(s,!1),t||l.table.options.rowDeselected.call(this.table,s.getComponent()),l._rowSelectionChanged(t)):t||console.warn("Deselection Error - No such row found, ignoring selection:"+e)},SelectRow.prototype.getSelectedData=function(){var e=[];return this.selectedRows.forEach(function(t){e.push(t.getData())}),e},SelectRow.prototype.getSelectedRows=function(){var e=[];return this.selectedRows.forEach(function(t){e.push(t.getComponent())}),e},SelectRow.prototype._rowSelectionChanged=function(e){this.headerCheckboxElement&&(0===this.selectedRows.length?(this.headerCheckboxElement.checked=!1,this.headerCheckboxElement.indeterminate=!1):this.table.rowManager.rows.length===this.selectedRows.length?(this.headerCheckboxElement.checked=!0,this.headerCheckboxElement.indeterminate=!1):(this.headerCheckboxElement.indeterminate=!0,this.headerCheckboxElement.checked=!1)),e||this.table.options.rowSelectionChanged.call(this.table,this.getSelectedData(),this.getSelectedRows())},SelectRow.prototype.registerRowSelectCheckbox=function(e,t){e._row.modules.select||(e._row.modules.select={}),e._row.modules.select.checkboxEl=t},SelectRow.prototype.registerHeaderSelectCheckbox=function(e){this.headerCheckboxElement=e},SelectRow.prototype.childRowSelection=function(e,t){var o=this.table.modules.dataTree.getChildren(e);if(t)for(var l=o,s=Array.isArray(l),c=0,l=s?l:l[Symbol.iterator]();;){var i;if(s){if(c>=l.length)break;i=l[c++]}else{if(c=l.next(),c.done)break;i=c.value}var n=i;this._selectRow(n,!0)}else for(var a=o,r=Array.isArray(a),d=0,a=r?a:a[Symbol.iterator]();;){var h;if(r){if(d>=a.length)break;h=a[d++]}else{if(d=a.next(),d.done)break;h=d.value}var w=h;this._deselectRow(w,!0)}},Tabulator.prototype.registerModule("selectRow",SelectRow);
\ No newline at end of file
diff --git a/admin/js/vendors/tabulator/js/modules/sort.js b/admin/js/vendors/tabulator/js/modules/sort.js
new file mode 100644 (file)
index 0000000..2422968
--- /dev/null
@@ -0,0 +1,571 @@
+var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
+
+/* Tabulator v4.7.0 (c) Oliver Folkerd */
+
+var Sort = function Sort(table) {
+       this.table = table; //hold Tabulator object
+       this.sortList = []; //holder current sort
+       this.changed = false; //has the sort changed since last render
+};
+
+//initialize column header for sorting
+Sort.prototype.initializeColumn = function (column, content) {
+       var self = this,
+           sorter = false,
+           colEl,
+           arrowEl;
+
+       switch (_typeof(column.definition.sorter)) {
+               case "string":
+                       if (self.sorters[column.definition.sorter]) {
+                               sorter = self.sorters[column.definition.sorter];
+                       } else {
+                               console.warn("Sort Error - No such sorter found: ", column.definition.sorter);
+                       }
+                       break;
+
+               case "function":
+                       sorter = column.definition.sorter;
+                       break;
+       }
+
+       column.modules.sort = {
+               sorter: sorter, dir: "none",
+               params: column.definition.sorterParams || {},
+               startingDir: column.definition.headerSortStartingDir || "asc",
+               tristate: typeof column.definition.headerSortTristate !== "undefined" ? column.definition.headerSortTristate : this.table.options.headerSortTristate
+       };
+
+       if (typeof column.definition.headerSort === "undefined" ? this.table.options.headerSort !== false : column.definition.headerSort !== false) {
+
+               colEl = column.getElement();
+
+               colEl.classList.add("tabulator-sortable");
+
+               arrowEl = document.createElement("div");
+               arrowEl.classList.add("tabulator-arrow");
+               //create sorter arrow
+               content.appendChild(arrowEl);
+
+               //sort on click
+               colEl.addEventListener("click", function (e) {
+                       var dir = "",
+                           sorters = [],
+                           match = false;
+
+                       if (column.modules.sort) {
+                               if (column.modules.sort.tristate) {
+                                       if (column.modules.sort.dir == "none") {
+                                               dir = column.modules.sort.startingDir;
+                                       } else {
+                                               if (column.modules.sort.dir == column.modules.sort.startingDir) {
+                                                       dir = column.modules.sort.dir == "asc" ? "desc" : "asc";
+                                               } else {
+                                                       dir = "none";
+                                               }
+                                       }
+                               } else {
+                                       switch (column.modules.sort.dir) {
+                                               case "asc":
+                                                       dir = "desc";
+                                                       break;
+
+                                               case "desc":
+                                                       dir = "asc";
+                                                       break;
+
+                                               default:
+                                                       dir = column.modules.sort.startingDir;
+                                       }
+                               }
+
+                               if (self.table.options.columnHeaderSortMulti && (e.shiftKey || e.ctrlKey)) {
+                                       sorters = self.getSort();
+
+                                       match = sorters.findIndex(function (sorter) {
+                                               return sorter.field === column.getField();
+                                       });
+
+                                       if (match > -1) {
+                                               sorters[match].dir = dir;
+
+                                               if (match != sorters.length - 1) {
+                                                       match = sorters.splice(match, 1)[0];
+                                                       if (dir != "none") {
+                                                               sorters.push(match);
+                                                       }
+                                               }
+                                       } else {
+                                               if (dir != "none") {
+                                                       sorters.push({ column: column, dir: dir });
+                                               }
+                                       }
+
+                                       //add to existing sort
+                                       self.setSort(sorters);
+                               } else {
+                                       if (dir == "none") {
+                                               self.clear();
+                                       } else {
+                                               //sort by column only
+                                               self.setSort(column, dir);
+                                       }
+                               }
+
+                               self.table.rowManager.sorterRefresh(!self.sortList.length);
+                       }
+               });
+       }
+};
+
+//check if the sorters have changed since last use
+Sort.prototype.hasChanged = function () {
+       var changed = this.changed;
+       this.changed = false;
+       return changed;
+};
+
+//return current sorters
+Sort.prototype.getSort = function () {
+       var self = this,
+           sorters = [];
+
+       self.sortList.forEach(function (item) {
+               if (item.column) {
+                       sorters.push({ column: item.column.getComponent(), field: item.column.getField(), dir: item.dir });
+               }
+       });
+
+       return sorters;
+};
+
+//change sort list and trigger sort
+Sort.prototype.setSort = function (sortList, dir) {
+       var self = this,
+           newSortList = [];
+
+       if (!Array.isArray(sortList)) {
+               sortList = [{ column: sortList, dir: dir }];
+       }
+
+       sortList.forEach(function (item) {
+               var column;
+
+               column = self.table.columnManager.findColumn(item.column);
+
+               if (column) {
+                       item.column = column;
+                       newSortList.push(item);
+                       self.changed = true;
+               } else {
+                       console.warn("Sort Warning - Sort field does not exist and is being ignored: ", item.column);
+               }
+       });
+
+       self.sortList = newSortList;
+
+       if (this.table.options.persistence && this.table.modExists("persistence", true) && this.table.modules.persistence.config.sort) {
+               this.table.modules.persistence.save("sort");
+       }
+};
+
+//clear sorters
+Sort.prototype.clear = function () {
+       this.setSort([]);
+};
+
+//find appropriate sorter for column
+Sort.prototype.findSorter = function (column) {
+       var row = this.table.rowManager.activeRows[0],
+           sorter = "string",
+           field,
+           value;
+
+       if (row) {
+               row = row.getData();
+               field = column.getField();
+
+               if (field) {
+
+                       value = column.getFieldValue(row);
+
+                       switch (typeof value === "undefined" ? "undefined" : _typeof(value)) {
+                               case "undefined":
+                                       sorter = "string";
+                                       break;
+
+                               case "boolean":
+                                       sorter = "boolean";
+                                       break;
+
+                               default:
+                                       if (!isNaN(value) && value !== "") {
+                                               sorter = "number";
+                                       } else {
+                                               if (value.match(/((^[0-9]+[a-z]+)|(^[a-z]+[0-9]+))+$/i)) {
+                                                       sorter = "alphanum";
+                                               }
+                                       }
+                                       break;
+                       }
+               }
+       }
+
+       return this.sorters[sorter];
+};
+
+//work through sort list sorting data
+Sort.prototype.sort = function (data) {
+       var self = this,
+           sortList = this.table.options.sortOrderReverse ? self.sortList.slice().reverse() : self.sortList,
+           sortListActual = [],
+           rowComponents = [],
+           lastSort;
+
+       if (self.table.options.dataSorting) {
+               self.table.options.dataSorting.call(self.table, self.getSort());
+       }
+
+       self.clearColumnHeaders();
+
+       if (!self.table.options.ajaxSorting) {
+
+               //build list of valid sorters and trigger column specific callbacks before sort begins
+               sortList.forEach(function (item, i) {
+                       var sortObj = item.column.modules.sort;
+
+                       if (item.column && sortObj) {
+
+                               //if no sorter has been defined, take a guess
+                               if (!sortObj.sorter) {
+                                       sortObj.sorter = self.findSorter(item.column);
+                               }
+
+                               item.params = typeof sortObj.params === "function" ? sortObj.params(item.column.getComponent(), item.dir) : sortObj.params;
+
+                               sortListActual.push(item);
+                       }
+
+                       self.setColumnHeader(item.column, item.dir);
+               });
+
+               //sort data
+               if (sortListActual.length) {
+                       self._sortItems(data, sortListActual);
+               }
+       } else {
+               sortList.forEach(function (item, i) {
+                       self.setColumnHeader(item.column, item.dir);
+               });
+       }
+
+       if (self.table.options.dataSorted) {
+               data.forEach(function (row) {
+                       rowComponents.push(row.getComponent());
+               });
+
+               self.table.options.dataSorted.call(self.table, self.getSort(), rowComponents);
+       }
+};
+
+//clear sort arrows on columns
+Sort.prototype.clearColumnHeaders = function () {
+       this.table.columnManager.getRealColumns().forEach(function (column) {
+               if (column.modules.sort) {
+                       column.modules.sort.dir = "none";
+                       column.getElement().setAttribute("aria-sort", "none");
+               }
+       });
+};
+
+//set the column header sort direction
+Sort.prototype.setColumnHeader = function (column, dir) {
+       column.modules.sort.dir = dir;
+       column.getElement().setAttribute("aria-sort", dir);
+};
+
+//sort each item in sort list
+Sort.prototype._sortItems = function (data, sortList) {
+       var _this = this;
+
+       var sorterCount = sortList.length - 1;
+
+       data.sort(function (a, b) {
+               var result;
+
+               for (var i = sorterCount; i >= 0; i--) {
+                       var sortItem = sortList[i];
+
+                       result = _this._sortRow(a, b, sortItem.column, sortItem.dir, sortItem.params);
+
+                       if (result !== 0) {
+                               break;
+                       }
+               }
+
+               return result;
+       });
+};
+
+//process individual rows for a sort function on active data
+Sort.prototype._sortRow = function (a, b, column, dir, params) {
+       var el1Comp, el2Comp, colComp;
+
+       //switch elements depending on search direction
+       var el1 = dir == "asc" ? a : b;
+       var el2 = dir == "asc" ? b : a;
+
+       a = column.getFieldValue(el1.getData());
+       b = column.getFieldValue(el2.getData());
+
+       a = typeof a !== "undefined" ? a : "";
+       b = typeof b !== "undefined" ? b : "";
+
+       el1Comp = el1.getComponent();
+       el2Comp = el2.getComponent();
+
+       return column.modules.sort.sorter.call(this, a, b, el1Comp, el2Comp, column.getComponent(), dir, params);
+};
+
+//default data sorters
+Sort.prototype.sorters = {
+
+       //sort numbers
+       number: function number(a, b, aRow, bRow, column, dir, params) {
+               var alignEmptyValues = params.alignEmptyValues;
+               var decimal = params.decimalSeparator || ".";
+               var thousand = params.thousandSeparator || ",";
+               var emptyAlign = 0;
+
+               a = parseFloat(String(a).split(thousand).join("").split(decimal).join("."));
+               b = parseFloat(String(b).split(thousand).join("").split(decimal).join("."));
+
+               //handle non numeric values
+               if (isNaN(a)) {
+                       emptyAlign = isNaN(b) ? 0 : -1;
+               } else if (isNaN(b)) {
+                       emptyAlign = 1;
+               } else {
+                       //compare valid values
+                       return a - b;
+               }
+
+               //fix empty values in position
+               if (alignEmptyValues === "top" && dir === "desc" || alignEmptyValues === "bottom" && dir === "asc") {
+                       emptyAlign *= -1;
+               }
+
+               return emptyAlign;
+       },
+
+       //sort strings
+       string: function string(a, b, aRow, bRow, column, dir, params) {
+               var alignEmptyValues = params.alignEmptyValues;
+               var emptyAlign = 0;
+               var locale;
+
+               //handle empty values
+               if (!a) {
+                       emptyAlign = !b ? 0 : -1;
+               } else if (!b) {
+                       emptyAlign = 1;
+               } else {
+                       //compare valid values
+                       switch (_typeof(params.locale)) {
+                               case "boolean":
+                                       if (params.locale) {
+                                               locale = this.table.modules.localize.getLocale();
+                                       }
+                                       break;
+                               case "string":
+                                       locale = params.locale;
+                                       break;
+                       }
+
+                       return String(a).toLowerCase().localeCompare(String(b).toLowerCase(), locale);
+               }
+
+               //fix empty values in position
+               if (alignEmptyValues === "top" && dir === "desc" || alignEmptyValues === "bottom" && dir === "asc") {
+                       emptyAlign *= -1;
+               }
+
+               return emptyAlign;
+       },
+
+       //sort date
+       date: function date(a, b, aRow, bRow, column, dir, params) {
+               if (!params.format) {
+                       params.format = "DD/MM/YYYY";
+               }
+
+               return this.sorters.datetime.call(this, a, b, aRow, bRow, column, dir, params);
+       },
+
+       //sort HH:mm formatted times
+       time: function time(a, b, aRow, bRow, column, dir, params) {
+               if (!params.format) {
+                       params.format = "HH:mm";
+               }
+
+               return this.sorters.datetime.call(this, a, b, aRow, bRow, column, dir, params);
+       },
+
+       //sort datetime
+       datetime: function datetime(a, b, aRow, bRow, column, dir, params) {
+               var format = params.format || "DD/MM/YYYY HH:mm:ss",
+                   alignEmptyValues = params.alignEmptyValues,
+                   emptyAlign = 0;
+
+               if (typeof moment != "undefined") {
+                       a = moment(a, format);
+                       b = moment(b, format);
+
+                       if (!a.isValid()) {
+                               emptyAlign = !b.isValid() ? 0 : -1;
+                       } else if (!b.isValid()) {
+                               emptyAlign = 1;
+                       } else {
+                               //compare valid values
+                               return a - b;
+                       }
+
+                       //fix empty values in position
+                       if (alignEmptyValues === "top" && dir === "desc" || alignEmptyValues === "bottom" && dir === "asc") {
+                               emptyAlign *= -1;
+                       }
+
+                       return emptyAlign;
+               } else {
+                       console.error("Sort Error - 'datetime' sorter is dependant on moment.js");
+               }
+       },
+
+       //sort booleans
+       boolean: function boolean(a, b, aRow, bRow, column, dir, params) {
+               var el1 = a === true || a === "true" || a === "True" || a === 1 ? 1 : 0;
+               var el2 = b === true || b === "true" || b === "True" || b === 1 ? 1 : 0;
+
+               return el1 - el2;
+       },
+
+       //sort if element contains any data
+       array: function array(a, b, aRow, bRow, column, dir, params) {
+               var el1 = 0;
+               var el2 = 0;
+               var type = params.type || "length";
+               var alignEmptyValues = params.alignEmptyValues;
+               var emptyAlign = 0;
+
+               function calc(value) {
+
+                       switch (type) {
+                               case "length":
+                                       return value.length;
+                                       break;
+
+                               case "sum":
+                                       return value.reduce(function (c, d) {
+                                               return c + d;
+                                       });
+                                       break;
+
+                               case "max":
+                                       return Math.max.apply(null, value);
+                                       break;
+
+                               case "min":
+                                       return Math.min.apply(null, value);
+                                       break;
+
+                               case "avg":
+                                       return value.reduce(function (c, d) {
+                                               return c + d;
+                                       }) / value.length;
+                                       break;
+                       }
+               }
+
+               //handle non array values
+               if (!Array.isArray(a)) {
+                       alignEmptyValues = !Array.isArray(b) ? 0 : -1;
+               } else if (!Array.isArray(b)) {
+                       alignEmptyValues = 1;
+               } else {
+
+                       //compare valid values
+                       el1 = a ? calc(a) : 0;
+                       el2 = b ? calc(b) : 0;
+
+                       return el1 - el2;
+               }
+
+               //fix empty values in position
+               if (alignEmptyValues === "top" && dir === "desc" || alignEmptyValues === "bottom" && dir === "asc") {
+                       emptyAlign *= -1;
+               }
+
+               return emptyAlign;
+       },
+
+       //sort if element contains any data
+       exists: function exists(a, b, aRow, bRow, column, dir, params) {
+               var el1 = typeof a == "undefined" ? 0 : 1;
+               var el2 = typeof b == "undefined" ? 0 : 1;
+
+               return el1 - el2;
+       },
+
+       //sort alpha numeric strings
+       alphanum: function alphanum(as, bs, aRow, bRow, column, dir, params) {
+               var a,
+                   b,
+                   a1,
+                   b1,
+                   i = 0,
+                   L,
+                   rx = /(\d+)|(\D+)/g,
+                   rd = /\d/;
+               var alignEmptyValues = params.alignEmptyValues;
+               var emptyAlign = 0;
+
+               //handle empty values
+               if (!as && as !== 0) {
+                       emptyAlign = !bs && bs !== 0 ? 0 : -1;
+               } else if (!bs && bs !== 0) {
+                       emptyAlign = 1;
+               } else {
+
+                       if (isFinite(as) && isFinite(bs)) return as - bs;
+                       a = String(as).toLowerCase();
+                       b = String(bs).toLowerCase();
+                       if (a === b) return 0;
+                       if (!(rd.test(a) && rd.test(b))) return a > b ? 1 : -1;
+                       a = a.match(rx);
+                       b = b.match(rx);
+                       L = a.length > b.length ? b.length : a.length;
+                       while (i < L) {
+                               a1 = a[i];
+                               b1 = b[i++];
+                               if (a1 !== b1) {
+                                       if (isFinite(a1) && isFinite(b1)) {
+                                               if (a1.charAt(0) === "0") a1 = "." + a1;
+                                               if (b1.charAt(0) === "0") b1 = "." + b1;
+                                               return a1 - b1;
+                                       } else return a1 > b1 ? 1 : -1;
+                               }
+                       }
+
+                       return a.length > b.length;
+               }
+
+               //fix empty values in position
+               if (alignEmptyValues === "top" && dir === "desc" || alignEmptyValues === "bottom" && dir === "asc") {
+                       emptyAlign *= -1;
+               }
+
+               return emptyAlign;
+       }
+};
+
+Tabulator.prototype.registerModule("sort", Sort);
\ No newline at end of file
diff --git a/admin/js/vendors/tabulator/js/modules/sort.min.js b/admin/js/vendors/tabulator/js/modules/sort.min.js
new file mode 100644 (file)
index 0000000..d0b4cb0
--- /dev/null
@@ -0,0 +1,2 @@
+/* Tabulator v4.7.0 (c) Oliver Folkerd */
+var _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Sort=function(t){this.table=t,this.sortList=[],this.changed=!1};Sort.prototype.initializeColumn=function(t,e){var r,o,n=this,i=!1;switch(_typeof(t.definition.sorter)){case"string":n.sorters[t.definition.sorter]?i=n.sorters[t.definition.sorter]:console.warn("Sort Error - No such sorter found: ",t.definition.sorter);break;case"function":i=t.definition.sorter}t.modules.sort={sorter:i,dir:"none",params:t.definition.sorterParams||{},startingDir:t.definition.headerSortStartingDir||"asc",tristate:void 0!==t.definition.headerSortTristate?t.definition.headerSortTristate:this.table.options.headerSortTristate},(void 0===t.definition.headerSort?!1!==this.table.options.headerSort:!1!==t.definition.headerSort)&&(r=t.getElement(),r.classList.add("tabulator-sortable"),o=document.createElement("div"),o.classList.add("tabulator-arrow"),e.appendChild(o),r.addEventListener("click",function(e){var r="",o=[],i=!1;if(t.modules.sort){if(t.modules.sort.tristate)r="none"==t.modules.sort.dir?t.modules.sort.startingDir:t.modules.sort.dir==t.modules.sort.startingDir?"asc"==t.modules.sort.dir?"desc":"asc":"none";else switch(t.modules.sort.dir){case"asc":r="desc";break;case"desc":r="asc";break;default:r=t.modules.sort.startingDir}n.table.options.columnHeaderSortMulti&&(e.shiftKey||e.ctrlKey)?(o=n.getSort(),i=o.findIndex(function(e){return e.field===t.getField()}),i>-1?(o[i].dir=r,i!=o.length-1&&(i=o.splice(i,1)[0],"none"!=r&&o.push(i))):"none"!=r&&o.push({column:t,dir:r}),n.setSort(o)):"none"==r?n.clear():n.setSort(t,r),n.table.rowManager.sorterRefresh(!n.sortList.length)}}))},Sort.prototype.hasChanged=function(){var t=this.changed;return this.changed=!1,t},Sort.prototype.getSort=function(){var t=this,e=[];return t.sortList.forEach(function(t){t.column&&e.push({column:t.column.getComponent(),field:t.column.getField(),dir:t.dir})}),e},Sort.prototype.setSort=function(t,e){var r=this,o=[];Array.isArray(t)||(t=[{column:t,dir:e}]),t.forEach(function(t){var e;e=r.table.columnManager.findColumn(t.column),e?(t.column=e,o.push(t),r.changed=!0):console.warn("Sort Warning - Sort field does not exist and is being ignored: ",t.column)}),r.sortList=o,this.table.options.persistence&&this.table.modExists("persistence",!0)&&this.table.modules.persistence.config.sort&&this.table.modules.persistence.save("sort")},Sort.prototype.clear=function(){this.setSort([])},Sort.prototype.findSorter=function(t){var e,r=this.table.rowManager.activeRows[0],o="string";if(r&&(r=r.getData(),t.getField()))switch(e=t.getFieldValue(r),void 0===e?"undefined":_typeof(e)){case"undefined":o="string";break;case"boolean":o="boolean";break;default:isNaN(e)||""===e?e.match(/((^[0-9]+[a-z]+)|(^[a-z]+[0-9]+))+$/i)&&(o="alphanum"):o="number"}return this.sorters[o]},Sort.prototype.sort=function(t){var e=this,r=this.table.options.sortOrderReverse?e.sortList.slice().reverse():e.sortList,o=[],n=[];e.table.options.dataSorting&&e.table.options.dataSorting.call(e.table,e.getSort()),e.clearColumnHeaders(),e.table.options.ajaxSorting?r.forEach(function(t,r){e.setColumnHeader(t.column,t.dir)}):(r.forEach(function(t,r){var n=t.column.modules.sort;t.column&&n&&(n.sorter||(n.sorter=e.findSorter(t.column)),t.params="function"==typeof n.params?n.params(t.column.getComponent(),t.dir):n.params,o.push(t)),e.setColumnHeader(t.column,t.dir)}),o.length&&e._sortItems(t,o)),e.table.options.dataSorted&&(t.forEach(function(t){n.push(t.getComponent())}),e.table.options.dataSorted.call(e.table,e.getSort(),n))},Sort.prototype.clearColumnHeaders=function(){this.table.columnManager.getRealColumns().forEach(function(t){t.modules.sort&&(t.modules.sort.dir="none",t.getElement().setAttribute("aria-sort","none"))})},Sort.prototype.setColumnHeader=function(t,e){t.modules.sort.dir=e,t.getElement().setAttribute("aria-sort",e)},Sort.prototype._sortItems=function(t,e){var r=this,o=e.length-1;t.sort(function(t,n){for(var i,s=o;s>=0;s--){var a=e[s];if(0!==(i=r._sortRow(t,n,a.column,a.dir,a.params)))break}return i})},Sort.prototype._sortRow=function(t,e,r,o,n){var i,s,a="asc"==o?t:e,l="asc"==o?e:t;return t=r.getFieldValue(a.getData()),e=r.getFieldValue(l.getData()),t=void 0!==t?t:"",e=void 0!==e?e:"",i=a.getComponent(),s=l.getComponent(),r.modules.sort.sorter.call(this,t,e,i,s,r.getComponent(),o,n)},Sort.prototype.sorters={number:function(t,e,r,o,n,i,s){var a=s.alignEmptyValues,l=s.decimalSeparator||".",u=s.thousandSeparator||",",c=0;if(t=parseFloat(String(t).split(u).join("").split(l).join(".")),e=parseFloat(String(e).split(u).join("").split(l).join(".")),isNaN(t))c=isNaN(e)?0:-1;else{if(!isNaN(e))return t-e;c=1}return("top"===a&&"desc"===i||"bottom"===a&&"asc"===i)&&(c*=-1),c},string:function(t,e,r,o,n,i,s){var a,l=s.alignEmptyValues,u=0;if(t){if(e){switch(_typeof(s.locale)){case"boolean":s.locale&&(a=this.table.modules.localize.getLocale());break;case"string":a=s.locale}return String(t).toLowerCase().localeCompare(String(e).toLowerCase(),a)}u=1}else u=e?-1:0;return("top"===l&&"desc"===i||"bottom"===l&&"asc"===i)&&(u*=-1),u},date:function(t,e,r,o,n,i,s){return s.format||(s.format="DD/MM/YYYY"),this.sorters.datetime.call(this,t,e,r,o,n,i,s)},time:function(t,e,r,o,n,i,s){return s.format||(s.format="HH:mm"),this.sorters.datetime.call(this,t,e,r,o,n,i,s)},datetime:function(t,e,r,o,n,i,s){var a=s.format||"DD/MM/YYYY HH:mm:ss",l=s.alignEmptyValues,u=0;if("undefined"!=typeof moment){if(t=moment(t,a),e=moment(e,a),t.isValid()){if(e.isValid())return t-e;u=1}else u=e.isValid()?-1:0;return("top"===l&&"desc"===i||"bottom"===l&&"asc"===i)&&(u*=-1),u}console.error("Sort Error - 'datetime' sorter is dependant on moment.js")},boolean:function(t,e,r,o,n,i,s){return(!0===t||"true"===t||"True"===t||1===t?1:0)-(!0===e||"true"===e||"True"===e||1===e?1:0)},array:function(t,e,r,o,n,i,s){function a(t){switch(c){case"length":return t.length;case"sum":return t.reduce(function(t,e){return t+e});case"max":return Math.max.apply(null,t);case"min":return Math.min.apply(null,t);case"avg":return t.reduce(function(t,e){return t+e})/t.length}}var l=0,u=0,c=s.type||"length",d=s.alignEmptyValues,m=0;if(Array.isArray(t)){if(Array.isArray(e))return l=t?a(t):0,u=e?a(e):0,l-u;d=1}else d=Array.isArray(e)?-1:0;return("top"===d&&"desc"===i||"bottom"===d&&"asc"===i)&&(m*=-1),m},exists:function(t,e,r,o,n,i,s){return(void 0===t?0:1)-(void 0===e?0:1)},alphanum:function(t,e,r,o,n,i,s){var a,l,u,c,d,m=0,f=/(\d+)|(\D+)/g,p=/\d/,h=s.alignEmptyValues,g=0;if(t||0===t){if(e||0===e){if(isFinite(t)&&isFinite(e))return t-e;if(a=String(t).toLowerCase(),l=String(e).toLowerCase(),a===l)return 0;if(!p.test(a)||!p.test(l))return a>l?1:-1;for(a=a.match(f),l=l.match(f),d=a.length>l.length?l.length:a.length;m<d;)if(u=a[m],c=l[m++],u!==c)return isFinite(u)&&isFinite(c)?("0"===u.charAt(0)&&(u="."+u),"0"===c.charAt(0)&&(c="."+c),u-c):u>c?1:-1;return a.length>l.length}g=1}else g=e||0===e?-1:0;return("top"===h&&"desc"===i||"bottom"===h&&"asc"===i)&&(g*=-1),g}},Tabulator.prototype.registerModule("sort",Sort);
\ No newline at end of file
diff --git a/admin/js/vendors/tabulator/js/modules/validate.js b/admin/js/vendors/tabulator/js/modules/validate.js
new file mode 100644 (file)
index 0000000..b5f6182
--- /dev/null
@@ -0,0 +1,286 @@
+var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
+
+/* Tabulator v4.7.0 (c) Oliver Folkerd */
+
+var Validate = function Validate(table) {
+       this.table = table;
+       this.invalidCells = [];
+};
+
+//validate
+Validate.prototype.initializeColumn = function (column) {
+       var self = this,
+           config = [],
+           validator;
+
+       if (column.definition.validator) {
+
+               if (Array.isArray(column.definition.validator)) {
+                       column.definition.validator.forEach(function (item) {
+                               validator = self._extractValidator(item);
+
+                               if (validator) {
+                                       config.push(validator);
+                               }
+                       });
+               } else {
+                       validator = this._extractValidator(column.definition.validator);
+
+                       if (validator) {
+                               config.push(validator);
+                       }
+               }
+
+               column.modules.validate = config.length ? config : false;
+       }
+};
+
+Validate.prototype._extractValidator = function (value) {
+       var type, params, pos;
+
+       switch (typeof value === "undefined" ? "undefined" : _typeof(value)) {
+               case "string":
+                       pos = value.indexOf(':');
+
+                       if (pos > -1) {
+                               type = value.substring(0, pos);
+                               params = value.substring(pos + 1);
+                       } else {
+                               type = value;
+                       }
+
+                       return this._buildValidator(type, params);
+                       break;
+
+               case "function":
+                       return this._buildValidator(value);
+                       break;
+
+               case "object":
+                       return this._buildValidator(value.type, value.parameters);
+                       break;
+       }
+};
+
+Validate.prototype._buildValidator = function (type, params) {
+
+       var func = typeof type == "function" ? type : this.validators[type];
+
+       if (!func) {
+               console.warn("Validator Setup Error - No matching validator found:", type);
+               return false;
+       } else {
+               return {
+                       type: typeof type == "function" ? "function" : type,
+                       func: func,
+                       params: params
+               };
+       }
+};
+
+Validate.prototype.validate = function (validators, cell, value) {
+       var self = this,
+           valid = [],
+           invalidIndex = this.invalidCells.indexOf(cell);
+
+       if (validators) {
+               validators.forEach(function (item) {
+                       if (!item.func.call(self, cell.getComponent(), value, item.params)) {
+                               valid.push({
+                                       type: item.type,
+                                       parameters: item.params
+                               });
+                       }
+               });
+       }
+
+       valid = valid.length ? valid : true;
+
+       if (!cell.modules.validate) {
+               cell.modules.validate = {};
+       }
+
+       if (valid === true) {
+               cell.modules.validate.invalid = false;
+               cell.getElement().classList.remove("tabulator-validation-fail");
+
+               if (invalidIndex > -1) {
+                       this.invalidCells.splice(invalidIndex, 1);
+               }
+       } else {
+               cell.modules.validate.invalid = true;
+
+               if (this.table.options.validationMode !== "manual") {
+                       cell.getElement().classList.add("tabulator-validation-fail");
+               }
+
+               if (invalidIndex == -1) {
+                       this.invalidCells.push(cell);
+               }
+       }
+
+       return valid;
+};
+
+Validate.prototype.getInvalidCells = function () {
+       var output = [];
+
+       this.invalidCells.forEach(function (cell) {
+               output.push(cell.getComponent());
+       });
+
+       return output;
+};
+
+Validate.prototype.clearValidation = function (cell) {
+       var invalidIndex;
+
+       if (cell.modules.validate && cell.modules.validate.invalid) {
+
+               cell.element.classList.remove("tabulator-validation-fail");
+               cell.modules.validate.invalid = false;
+
+               invalidIndex = this.invalidCells.indexOf(cell);
+
+               if (invalidIndex > -1) {
+                       this.invalidCells.splice(invalidIndex, 1);
+               }
+       }
+};
+
+Validate.prototype.validators = {
+
+       //is integer
+       integer: function integer(cell, value, parameters) {
+               if (value === "" || value === null || typeof value === "undefined") {
+                       return true;
+               }
+               value = Number(value);
+               return typeof value === 'number' && isFinite(value) && Math.floor(value) === value;
+       },
+
+       //is float
+       float: function float(cell, value, parameters) {
+               if (value === "" || value === null || typeof value === "undefined") {
+                       return true;
+               }
+               value = Number(value);
+               return typeof value === 'number' && isFinite(value) && value % 1 !== 0;
+       },
+
+       //must be a number
+       numeric: function numeric(cell, value, parameters) {
+               if (value === "" || value === null || typeof value === "undefined") {
+                       return true;
+               }
+               return !isNaN(value);
+       },
+
+       //must be a string
+       string: function string(cell, value, parameters) {
+               if (value === "" || value === null || typeof value === "undefined") {
+                       return true;
+               }
+               return isNaN(value);
+       },
+
+       //maximum value
+       max: function max(cell, value, parameters) {
+               if (value === "" || value === null || typeof value === "undefined") {
+                       return true;
+               }
+               return parseFloat(value) <= parameters;
+       },
+
+       //minimum value
+       min: function min(cell, value, parameters) {
+               if (value === "" || value === null || typeof value === "undefined") {
+                       return true;
+               }
+               return parseFloat(value) >= parameters;
+       },
+
+       //starts with  value
+       starts: function starts(cell, value, parameters) {
+               if (value === "" || value === null || typeof value === "undefined") {
+                       return true;
+               }
+               return String(value).toLowerCase().startsWith(String(parameters).toLowerCase());
+       },
+
+       //ends with  value
+       ends: function ends(cell, value, parameters) {
+               if (value === "" || value === null || typeof value === "undefined") {
+                       return true;
+               }
+               return String(value).toLowerCase().endsWith(String(parameters).toLowerCase());
+       },
+
+       //minimum string length
+       minLength: function minLength(cell, value, parameters) {
+               if (value === "" || value === null || typeof value === "undefined") {
+                       return true;
+               }
+               return String(value).length >= parameters;
+       },
+
+       //maximum string length
+       maxLength: function maxLength(cell, value, parameters) {
+               if (value === "" || value === null || typeof value === "undefined") {
+                       return true;
+               }
+               return String(value).length <= parameters;
+       },
+
+       //in provided value list
+       in: function _in(cell, value, parameters) {
+               if (value === "" || value === null || typeof value === "undefined") {
+                       return true;
+               }
+               if (typeof parameters == "string") {
+                       parameters = parameters.split("|");
+               }
+
+               return value === "" || parameters.indexOf(value) > -1;
+       },
+
+       //must match provided regex
+       regex: function regex(cell, value, parameters) {
+               if (value === "" || value === null || typeof value === "undefined") {
+                       return true;
+               }
+               var reg = new RegExp(parameters);
+
+               return reg.test(value);
+       },
+
+       //value must be unique in this column
+       unique: function unique(cell, value, parameters) {
+               if (value === "" || value === null || typeof value === "undefined") {
+                       return true;
+               }
+               var unique = true;
+
+               var cellData = cell.getData();
+               var column = cell.getColumn()._getSelf();
+
+               this.table.rowManager.rows.forEach(function (row) {
+                       var data = row.getData();
+
+                       if (data !== cellData) {
+                               if (value == column.getFieldValue(data)) {
+                                       unique = false;
+                               }
+                       }
+               });
+
+               return unique;
+       },
+
+       //must have a value
+       required: function required(cell, value, parameters) {
+               return value !== "" && value !== null && typeof value !== "undefined";
+       }
+};
+
+Tabulator.prototype.registerModule("validate", Validate);
\ No newline at end of file
diff --git a/admin/js/vendors/tabulator/js/modules/validate.min.js b/admin/js/vendors/tabulator/js/modules/validate.min.js
new file mode 100644 (file)
index 0000000..fc189c0
--- /dev/null
@@ -0,0 +1,2 @@
+/* Tabulator v4.7.0 (c) Oliver Folkerd */
+var _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Validate=function(t){this.table=t,this.invalidCells=[]};Validate.prototype.initializeColumn=function(t){var i,n=this,e=[];t.definition.validator&&(Array.isArray(t.definition.validator)?t.definition.validator.forEach(function(t){(i=n._extractValidator(t))&&e.push(i)}):(i=this._extractValidator(t.definition.validator))&&e.push(i),t.modules.validate=!!e.length&&e)},Validate.prototype._extractValidator=function(t){var i,n,e;switch(void 0===t?"undefined":_typeof(t)){case"string":return e=t.indexOf(":"),e>-1?(i=t.substring(0,e),n=t.substring(e+1)):i=t,this._buildValidator(i,n);case"function":return this._buildValidator(t);case"object":return this._buildValidator(t.type,t.parameters)}},Validate.prototype._buildValidator=function(t,i){var n="function"==typeof t?t:this.validators[t];return n?{type:"function"==typeof t?"function":t,func:n,params:i}:(console.warn("Validator Setup Error - No matching validator found:",t),!1)},Validate.prototype.validate=function(t,i,n){var e=this,a=[],o=this.invalidCells.indexOf(i);return t&&t.forEach(function(t){t.func.call(e,i.getComponent(),n,t.params)||a.push({type:t.type,parameters:t.params})}),a=!a.length||a,i.modules.validate||(i.modules.validate={}),!0===a?(i.modules.validate.invalid=!1,i.getElement().classList.remove("tabulator-validation-fail"),o>-1&&this.invalidCells.splice(o,1)):(i.modules.validate.invalid=!0,"manual"!==this.table.options.validationMode&&i.getElement().classList.add("tabulator-validation-fail"),-1==o&&this.invalidCells.push(i)),a},Validate.prototype.getInvalidCells=function(){var t=[];return this.invalidCells.forEach(function(i){t.push(i.getComponent())}),t},Validate.prototype.clearValidation=function(t){var i;t.modules.validate&&t.modules.validate.invalid&&(t.element.classList.remove("tabulator-validation-fail"),t.modules.validate.invalid=!1,(i=this.invalidCells.indexOf(t))>-1&&this.invalidCells.splice(i,1))},Validate.prototype.validators={integer:function(t,i,n){return""===i||null===i||void 0===i||"number"==typeof(i=Number(i))&&isFinite(i)&&Math.floor(i)===i},float:function(t,i,n){return""===i||null===i||void 0===i||"number"==typeof(i=Number(i))&&isFinite(i)&&i%1!=0},numeric:function(t,i,n){return""===i||null===i||void 0===i||!isNaN(i)},string:function(t,i,n){return""===i||null===i||void 0===i||isNaN(i)},max:function(t,i,n){return""===i||null===i||void 0===i||parseFloat(i)<=n},min:function(t,i,n){return""===i||null===i||void 0===i||parseFloat(i)>=n},starts:function(t,i,n){return""===i||null===i||void 0===i||String(i).toLowerCase().startsWith(String(n).toLowerCase())},ends:function(t,i,n){return""===i||null===i||void 0===i||String(i).toLowerCase().endsWith(String(n).toLowerCase())},minLength:function(t,i,n){return""===i||null===i||void 0===i||String(i).length>=n},maxLength:function(t,i,n){return""===i||null===i||void 0===i||String(i).length<=n},in:function(t,i,n){return""===i||null===i||void 0===i||("string"==typeof n&&(n=n.split("|")),""===i||n.indexOf(i)>-1)},regex:function(t,i,n){return""===i||null===i||void 0===i||new RegExp(n).test(i)},unique:function(t,i,n){if(""===i||null===i||void 0===i)return!0;var e=!0,a=t.getData(),o=t.getColumn()._getSelf();return this.table.rowManager.rows.forEach(function(t){var n=t.getData();n!==a&&i==o.getFieldValue(n)&&(e=!1)}),e},required:function(t,i,n){return""!==i&&null!==i&&void 0!==i}},Tabulator.prototype.registerModule("validate",Validate);
\ No newline at end of file
diff --git a/admin/js/vendors/tabulator/js/tabulator.js b/admin/js/vendors/tabulator/js/tabulator.js
new file mode 100644 (file)
index 0000000..256e565
--- /dev/null
@@ -0,0 +1,24907 @@
+var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
+
+/* Tabulator v4.7.0 (c) Oliver Folkerd */
+
+;(function (global, factory) {
+       if ((typeof exports === 'undefined' ? 'undefined' : _typeof(exports)) === 'object' && typeof module !== 'undefined') {
+               module.exports = factory();
+       } else if (typeof define === 'function' && define.amd) {
+               define(factory);
+       } else {
+               global.Tabulator = factory();
+       }
+})(this, function () {
+
+       'use strict';
+
+       // https://tc39.github.io/ecma262/#sec-array.prototype.findIndex
+
+
+       if (!Array.prototype.findIndex) {
+
+               Object.defineProperty(Array.prototype, 'findIndex', {
+
+                       value: function value(predicate) {
+
+                               // 1. Let O be ? ToObject(this value).
+
+
+                               if (this == null) {
+
+                                       throw new TypeError('"this" is null or not defined');
+                               }
+
+                               var o = Object(this);
+
+                               // 2. Let len be ? ToLength(? Get(O, "length")).
+
+
+                               var len = o.length >>> 0;
+
+                               // 3. If IsCallable(predicate) is false, throw a TypeError exception.
+
+
+                               if (typeof predicate !== 'function') {
+
+                                       throw new TypeError('predicate must be a function');
+                               }
+
+                               // 4. If thisArg was supplied, let T be thisArg; else let T be undefined.
+
+
+                               var thisArg = arguments[1];
+
+                               // 5. Let k be 0.
+
+
+                               var k = 0;
+
+                               // 6. Repeat, while k < len
+
+
+                               while (k < len) {
+
+                                       // a. Let Pk be ! ToString(k).
+
+
+                                       // b. Let kValue be ? Get(O, Pk).
+
+
+                                       // c. Let testResult be ToBoolean(? Call(predicate, T, « kValue, k, O »)).
+
+
+                                       // d. If testResult is true, return k.
+
+
+                                       var kValue = o[k];
+
+                                       if (predicate.call(thisArg, kValue, k, o)) {
+
+                                               return k;
+                                       }
+
+                                       // e. Increase k by 1.
+
+
+                                       k++;
+                               }
+
+                               // 7. Return -1.
+
+
+                               return -1;
+                       }
+
+               });
+       }
+
+       // https://tc39.github.io/ecma262/#sec-array.prototype.find
+
+
+       if (!Array.prototype.find) {
+
+               Object.defineProperty(Array.prototype, 'find', {
+
+                       value: function value(predicate) {
+
+                               // 1. Let O be ? ToObject(this value).
+
+
+                               if (this == null) {
+
+                                       throw new TypeError('"this" is null or not defined');
+                               }
+
+                               var o = Object(this);
+
+                               // 2. Let len be ? ToLength(? Get(O, "length")).
+
+
+                               var len = o.length >>> 0;
+
+                               // 3. If IsCallable(predicate) is false, throw a TypeError exception.
+
+
+                               if (typeof predicate !== 'function') {
+
+                                       throw new TypeError('predicate must be a function');
+                               }
+
+                               // 4. If thisArg was supplied, let T be thisArg; else let T be undefined.
+
+
+                               var thisArg = arguments[1];
+
+                               // 5. Let k be 0.
+
+
+                               var k = 0;
+
+                               // 6. Repeat, while k < len
+
+
+                               while (k < len) {
+
+                                       // a. Let Pk be ! ToString(k).
+
+
+                                       // b. Let kValue be ? Get(O, Pk).
+
+
+                                       // c. Let testResult be ToBoolean(? Call(predicate, T, « kValue, k, O »)).
+
+
+                                       // d. If testResult is true, return kValue.
+
+
+                                       var kValue = o[k];
+
+                                       if (predicate.call(thisArg, kValue, k, o)) {
+
+                                               return kValue;
+                                       }
+
+                                       // e. Increase k by 1.
+
+
+                                       k++;
+                               }
+
+                               // 7. Return undefined.
+
+
+                               return undefined;
+                       }
+
+               });
+       }
+
+       // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/includes#Polyfill
+
+
+       if (!String.prototype.includes) {
+
+               String.prototype.includes = function (search, start) {
+
+                       'use strict';
+
+                       if (search instanceof RegExp) {
+
+                               throw TypeError('first argument must not be a RegExp');
+                       }
+
+                       if (start === undefined) {
+                               start = 0;
+                       }
+
+                       return this.indexOf(search, start) !== -1;
+               };
+       }
+
+       // https://tc39.github.io/ecma262/#sec-array.prototype.includes
+
+
+       if (!Array.prototype.includes) {
+
+               Object.defineProperty(Array.prototype, 'includes', {
+
+                       value: function value(searchElement, fromIndex) {
+
+                               if (this == null) {
+
+                                       throw new TypeError('"this" is null or not defined');
+                               }
+
+                               // 1. Let O be ? ToObject(this value).
+
+
+                               var o = Object(this);
+
+                               // 2. Let len be ? ToLength(? Get(O, "length")).
+
+
+                               var len = o.length >>> 0;
+
+                               // 3. If len is 0, return false.
+
+
+                               if (len === 0) {
+
+                                       return false;
+                               }
+
+                               // 4. Let n be ? ToInteger(fromIndex).
+
+
+                               //    (If fromIndex is undefined, this step produces the value 0.)
+
+
+                               var n = fromIndex | 0;
+
+                               // 5. If n ≥ 0, then
+
+
+                               //  a. Let k be n.
+
+
+                               // 6. Else n < 0,
+
+
+                               //  a. Let k be len + n.
+
+
+                               //  b. If k < 0, let k be 0.
+
+
+                               var k = Math.max(n >= 0 ? n : len - Math.abs(n), 0);
+
+                               function sameValueZero(x, y) {
+
+                                       return x === y || typeof x === 'number' && typeof y === 'number' && isNaN(x) && isNaN(y);
+                               }
+
+                               // 7. Repeat, while k < len
+
+
+                               while (k < len) {
+
+                                       // a. Let elementK be the result of ? Get(O, ! ToString(k)).
+
+
+                                       // b. If SameValueZero(searchElement, elementK) is true, return true.
+
+
+                                       if (sameValueZero(o[k], searchElement)) {
+
+                                               return true;
+                                       }
+
+                                       // c. Increase k by 1.
+
+
+                                       k++;
+                               }
+
+                               // 8. Return false
+
+
+                               return false;
+                       }
+
+               });
+       }
+
+       // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign#Polyfill
+
+
+       if (typeof Object.assign !== 'function') {
+
+               // Must be writable: true, enumerable: false, configurable: true
+
+
+               Object.defineProperty(Object, "assign", {
+
+                       value: function assign(target, varArgs) {
+                               // .length of function is 2
+
+
+                               'use strict';
+
+                               if (target === null || target === undefined) {
+
+                                       throw new TypeError('Cannot convert undefined or null to object');
+                               }
+
+                               var to = Object(target);
+
+                               for (var index = 1; index < arguments.length; index++) {
+
+                                       var nextSource = arguments[index];
+
+                                       if (nextSource !== null && nextSource !== undefined) {
+
+                                               for (var nextKey in nextSource) {
+
+                                                       // Avoid bugs when hasOwnProperty is shadowed
+
+
+                                                       if (Object.prototype.hasOwnProperty.call(nextSource, nextKey)) {
+
+                                                               to[nextKey] = nextSource[nextKey];
+                                                       }
+                                               }
+                                       }
+                               }
+
+                               return to;
+                       },
+
+                       writable: true,
+
+                       configurable: true
+
+               });
+       }
+
+       var ColumnManager = function ColumnManager(table) {
+
+               this.table = table; //hold parent table
+
+
+               this.blockHozScrollEvent = false;
+
+               this.headersElement = this.createHeadersElement();
+
+               this.element = this.createHeaderElement(); //containing element
+
+
+               this.rowManager = null; //hold row manager object
+
+
+               this.columns = []; // column definition object
+
+
+               this.columnsByIndex = []; //columns by index
+
+
+               this.columnsByField = {}; //columns by field
+
+
+               this.scrollLeft = 0;
+
+               this.element.insertBefore(this.headersElement, this.element.firstChild);
+       };
+
+       ////////////// Setup Functions /////////////////
+
+
+       ColumnManager.prototype.createHeadersElement = function () {
+
+               var el = document.createElement("div");
+
+               el.classList.add("tabulator-headers");
+
+               return el;
+       };
+
+       ColumnManager.prototype.createHeaderElement = function () {
+
+               var el = document.createElement("div");
+
+               el.classList.add("tabulator-header");
+
+               if (!this.table.options.headerVisible) {
+
+                       el.classList.add("tabulator-header-hidden");
+               }
+
+               return el;
+       };
+
+       ColumnManager.prototype.initialize = function () {
+
+               var self = this;
+
+               //scroll body along with header
+
+
+               // self.element.addEventListener("scroll", function(e){
+
+
+               //      if(!self.blockHozScrollEvent){
+
+
+               //              self.table.rowManager.scrollHorizontal(self.element.scrollLeft);
+
+
+               //      }
+
+
+               // });
+
+       };
+
+       //link to row manager
+
+
+       ColumnManager.prototype.setRowManager = function (manager) {
+
+               this.rowManager = manager;
+       };
+
+       //return containing element
+
+
+       ColumnManager.prototype.getElement = function () {
+
+               return this.element;
+       };
+
+       //return header containing element
+
+
+       ColumnManager.prototype.getHeadersElement = function () {
+
+               return this.headersElement;
+       };
+
+       // ColumnManager.prototype.tempScrollBlock = function(){
+
+
+       //      clearTimeout(this.blockHozScrollEvent);
+
+
+       //      this.blockHozScrollEvent = setTimeout(() => {this.blockHozScrollEvent = false;}, 50);
+
+
+       // }
+
+
+       //scroll horizontally to match table body
+
+
+       ColumnManager.prototype.scrollHorizontal = function (left) {
+
+               var hozAdjust = 0,
+                   scrollWidth = this.element.scrollWidth - this.table.element.clientWidth;
+
+               // this.tempScrollBlock();
+
+
+               this.element.scrollLeft = left;
+
+               //adjust for vertical scrollbar moving table when present
+
+
+               if (left > scrollWidth) {
+
+                       hozAdjust = left - scrollWidth;
+
+                       this.element.style.marginLeft = -hozAdjust + "px";
+               } else {
+
+                       this.element.style.marginLeft = 0;
+               }
+
+               //keep frozen columns fixed in position
+
+
+               //this._calcFrozenColumnsPos(hozAdjust + 3);
+
+
+               this.scrollLeft = left;
+
+               if (this.table.modExists("frozenColumns")) {
+
+                       this.table.modules.frozenColumns.scrollHorizontal();
+               }
+       };
+
+       ///////////// Column Setup Functions /////////////
+
+
+       ColumnManager.prototype.generateColumnsFromRowData = function (data) {
+
+               var cols = [],
+                   row,
+                   sorter;
+
+               if (data && data.length) {
+
+                       row = data[0];
+
+                       for (var key in row) {
+
+                               var col = {
+
+                                       field: key,
+
+                                       title: key
+
+                               };
+
+                               var value = row[key];
+
+                               switch (typeof value === 'undefined' ? 'undefined' : _typeof(value)) {
+
+                                       case "undefined":
+
+                                               sorter = "string";
+
+                                               break;
+
+                                       case "boolean":
+
+                                               sorter = "boolean";
+
+                                               break;
+
+                                       case "object":
+
+                                               if (Array.isArray(value)) {
+
+                                                       sorter = "array";
+                                               } else {
+
+                                                       sorter = "string";
+                                               }
+
+                                               break;
+
+                                       default:
+
+                                               if (!isNaN(value) && value !== "") {
+
+                                                       sorter = "number";
+                                               } else {
+
+                                                       if (value.match(/((^[0-9]+[a-z]+)|(^[a-z]+[0-9]+))+$/i)) {
+
+                                                               sorter = "alphanum";
+                                                       } else {
+
+                                                               sorter = "string";
+                                                       }
+                                               }
+
+                                               break;
+
+                               }
+
+                               col.sorter = sorter;
+
+                               cols.push(col);
+                       }
+
+                       this.table.options.columns = cols;
+
+                       this.setColumns(this.table.options.columns);
+               }
+       };
+
+       ColumnManager.prototype.setColumns = function (cols, row) {
+
+               var self = this;
+
+               while (self.headersElement.firstChild) {
+                       self.headersElement.removeChild(self.headersElement.firstChild);
+               }self.columns = [];
+
+               self.columnsByIndex = [];
+
+               self.columnsByField = {};
+
+               //reset frozen columns
+
+
+               if (self.table.modExists("frozenColumns")) {
+
+                       self.table.modules.frozenColumns.reset();
+               }
+
+               cols.forEach(function (def, i) {
+
+                       self._addColumn(def);
+               });
+
+               self._reIndexColumns();
+
+               if (self.table.options.responsiveLayout && self.table.modExists("responsiveLayout", true)) {
+
+                       self.table.modules.responsiveLayout.initialize();
+               }
+
+               self.redraw(true);
+       };
+
+       ColumnManager.prototype._addColumn = function (definition, before, nextToColumn) {
+
+               var column = new Column(definition, this),
+                   colEl = column.getElement(),
+                   index = nextToColumn ? this.findColumnIndex(nextToColumn) : nextToColumn;
+
+               if (nextToColumn && index > -1) {
+
+                       var parentIndex = this.columns.indexOf(nextToColumn.getTopColumn());
+
+                       var nextEl = nextToColumn.getElement();
+
+                       if (before) {
+
+                               this.columns.splice(parentIndex, 0, column);
+
+                               nextEl.parentNode.insertBefore(colEl, nextEl);
+                       } else {
+
+                               this.columns.splice(parentIndex + 1, 0, column);
+
+                               nextEl.parentNode.insertBefore(colEl, nextEl.nextSibling);
+                       }
+               } else {
+
+                       if (before) {
+
+                               this.columns.unshift(column);
+
+                               this.headersElement.insertBefore(column.getElement(), this.headersElement.firstChild);
+                       } else {
+
+                               this.columns.push(column);
+
+                               this.headersElement.appendChild(column.getElement());
+                       }
+
+                       column.columnRendered();
+               }
+
+               return column;
+       };
+
+       ColumnManager.prototype.registerColumnField = function (col) {
+
+               if (col.definition.field) {
+
+                       this.columnsByField[col.definition.field] = col;
+               }
+       };
+
+       ColumnManager.prototype.registerColumnPosition = function (col) {
+
+               this.columnsByIndex.push(col);
+       };
+
+       ColumnManager.prototype._reIndexColumns = function () {
+
+               this.columnsByIndex = [];
+
+               this.columns.forEach(function (column) {
+
+                       column.reRegisterPosition();
+               });
+       };
+
+       //ensure column headers take up the correct amount of space in column groups
+
+
+       ColumnManager.prototype._verticalAlignHeaders = function () {
+
+               var self = this,
+                   minHeight = 0;
+
+               self.columns.forEach(function (column) {
+
+                       var height;
+
+                       column.clearVerticalAlign();
+
+                       height = column.getHeight();
+
+                       if (height > minHeight) {
+
+                               minHeight = height;
+                       }
+               });
+
+               self.columns.forEach(function (column) {
+
+                       column.verticalAlign(self.table.options.columnHeaderVertAlign, minHeight);
+               });
+
+               self.rowManager.adjustTableSize();
+       };
+
+       //////////////// Column Details /////////////////
+
+
+       ColumnManager.prototype.findColumn = function (subject) {
+
+               var self = this;
+
+               if ((typeof subject === 'undefined' ? 'undefined' : _typeof(subject)) == "object") {
+
+                       if (subject instanceof Column) {
+
+                               //subject is column element
+
+
+                               return subject;
+                       } else if (subject instanceof ColumnComponent) {
+
+                               //subject is public column component
+
+
+                               return subject._getSelf() || false;
+                       } else if (typeof HTMLElement !== "undefined" && subject instanceof HTMLElement) {
+
+                               //subject is a HTML element of the column header
+
+
+                               var match = self.columns.find(function (column) {
+
+                                       return column.element === subject;
+                               });
+
+                               return match || false;
+                       }
+               } else {
+
+                       //subject should be treated as the field name of the column
+
+
+                       return this.columnsByField[subject] || false;
+               }
+
+               //catch all for any other type of input
+
+
+               return false;
+       };
+
+       ColumnManager.prototype.getColumnByField = function (field) {
+
+               return this.columnsByField[field];
+       };
+
+       ColumnManager.prototype.getColumnsByFieldRoot = function (root) {
+               var _this = this;
+
+               var matches = [];
+
+               Object.keys(this.columnsByField).forEach(function (field) {
+
+                       var fieldRoot = field.split(".")[0];
+
+                       if (fieldRoot === root) {
+
+                               matches.push(_this.columnsByField[field]);
+                       }
+               });
+
+               return matches;
+       };
+
+       ColumnManager.prototype.getColumnByIndex = function (index) {
+
+               return this.columnsByIndex[index];
+       };
+
+       ColumnManager.prototype.getFirstVisibileColumn = function (index) {
+
+               var index = this.columnsByIndex.findIndex(function (col) {
+
+                       return col.visible;
+               });
+
+               return index > -1 ? this.columnsByIndex[index] : false;
+       };
+
+       ColumnManager.prototype.getColumns = function () {
+
+               return this.columns;
+       };
+
+       ColumnManager.prototype.findColumnIndex = function (column) {
+
+               return this.columnsByIndex.findIndex(function (col) {
+
+                       return column === col;
+               });
+       };
+
+       //return all columns that are not groups
+
+
+       ColumnManager.prototype.getRealColumns = function () {
+
+               return this.columnsByIndex;
+       };
+
+       //travers across columns and call action
+
+
+       ColumnManager.prototype.traverse = function (callback) {
+
+               var self = this;
+
+               self.columnsByIndex.forEach(function (column, i) {
+
+                       callback(column, i);
+               });
+       };
+
+       //get defintions of actual columns
+
+
+       ColumnManager.prototype.getDefinitions = function (active) {
+
+               var self = this,
+                   output = [];
+
+               self.columnsByIndex.forEach(function (column) {
+
+                       if (!active || active && column.visible) {
+
+                               output.push(column.getDefinition());
+                       }
+               });
+
+               return output;
+       };
+
+       //get full nested definition tree
+
+
+       ColumnManager.prototype.getDefinitionTree = function () {
+
+               var self = this,
+                   output = [];
+
+               self.columns.forEach(function (column) {
+
+                       output.push(column.getDefinition(true));
+               });
+
+               return output;
+       };
+
+       ColumnManager.prototype.getComponents = function (structured) {
+
+               var self = this,
+                   output = [],
+                   columns = structured ? self.columns : self.columnsByIndex;
+
+               columns.forEach(function (column) {
+
+                       output.push(column.getComponent());
+               });
+
+               return output;
+       };
+
+       ColumnManager.prototype.getWidth = function () {
+
+               var width = 0;
+
+               this.columnsByIndex.forEach(function (column) {
+
+                       if (column.visible) {
+
+                               width += column.getWidth();
+                       }
+               });
+
+               return width;
+       };
+
+       ColumnManager.prototype.moveColumn = function (from, to, after) {
+
+               this.moveColumnActual(from, to, after);
+
+               if (this.table.options.responsiveLayout && this.table.modExists("responsiveLayout", true)) {
+
+                       this.table.modules.responsiveLayout.initialize();
+               }
+
+               if (this.table.modExists("columnCalcs")) {
+
+                       this.table.modules.columnCalcs.recalc(this.table.rowManager.activeRows);
+               }
+
+               to.element.parentNode.insertBefore(from.element, to.element);
+
+               if (after) {
+
+                       to.element.parentNode.insertBefore(to.element, from.element);
+               }
+
+               this._verticalAlignHeaders();
+
+               this.table.rowManager.reinitialize();
+       };
+
+       ColumnManager.prototype.moveColumnActual = function (from, to, after) {
+
+               if (from.parent.isGroup) {
+
+                       this._moveColumnInArray(from.parent.columns, from, to, after);
+               } else {
+
+                       this._moveColumnInArray(this.columns, from, to, after);
+               }
+
+               this._moveColumnInArray(this.columnsByIndex, from, to, after, true);
+
+               if (this.table.options.responsiveLayout && this.table.modExists("responsiveLayout", true)) {
+
+                       this.table.modules.responsiveLayout.initialize();
+               }
+
+               if (this.table.options.columnMoved) {
+
+                       this.table.options.columnMoved.call(this.table, from.getComponent(), this.table.columnManager.getComponents());
+               }
+
+               if (this.table.options.persistence && this.table.modExists("persistence", true) && this.table.modules.persistence.config.columns) {
+
+                       this.table.modules.persistence.save("columns");
+               }
+       };
+
+       ColumnManager.prototype._moveColumnInArray = function (columns, from, to, after, updateRows) {
+
+               var fromIndex = columns.indexOf(from),
+                   toIndex;
+
+               if (fromIndex > -1) {
+
+                       columns.splice(fromIndex, 1);
+
+                       toIndex = columns.indexOf(to);
+
+                       if (toIndex > -1) {
+
+                               if (after) {
+
+                                       toIndex = toIndex + 1;
+                               }
+                       } else {
+
+                               toIndex = fromIndex;
+                       }
+
+                       columns.splice(toIndex, 0, from);
+
+                       if (updateRows) {
+
+                               this.table.rowManager.rows.forEach(function (row) {
+
+                                       if (row.cells.length) {
+
+                                               var cell = row.cells.splice(fromIndex, 1)[0];
+
+                                               row.cells.splice(toIndex, 0, cell);
+                                       }
+                               });
+                       }
+               }
+       };
+
+       ColumnManager.prototype.scrollToColumn = function (column, position, ifVisible) {
+               var _this2 = this;
+
+               var left = 0,
+                   offset = 0,
+                   adjust = 0,
+                   colEl = column.getElement();
+
+               return new Promise(function (resolve, reject) {
+
+                       if (typeof position === "undefined") {
+
+                               position = _this2.table.options.scrollToColumnPosition;
+                       }
+
+                       if (typeof ifVisible === "undefined") {
+
+                               ifVisible = _this2.table.options.scrollToColumnIfVisible;
+                       }
+
+                       if (column.visible) {
+
+                               //align to correct position
+
+
+                               switch (position) {
+
+                                       case "middle":
+
+                                       case "center":
+
+                                               adjust = -_this2.element.clientWidth / 2;
+
+                                               break;
+
+                                       case "right":
+
+                                               adjust = colEl.clientWidth - _this2.headersElement.clientWidth;
+
+                                               break;
+
+                               }
+
+                               //check column visibility
+
+
+                               if (!ifVisible) {
+
+                                       offset = colEl.offsetLeft;
+
+                                       if (offset > 0 && offset + colEl.offsetWidth < _this2.element.clientWidth) {
+
+                                               return false;
+                                       }
+                               }
+
+                               //calculate scroll position
+
+
+                               left = colEl.offsetLeft + _this2.element.scrollLeft + adjust;
+
+                               left = Math.max(Math.min(left, _this2.table.rowManager.element.scrollWidth - _this2.table.rowManager.element.clientWidth), 0);
+
+                               _this2.table.rowManager.scrollHorizontal(left);
+
+                               _this2.scrollHorizontal(left);
+
+                               resolve();
+                       } else {
+
+                               console.warn("Scroll Error - Column not visible");
+
+                               reject("Scroll Error - Column not visible");
+                       }
+               });
+       };
+
+       //////////////// Cell Management /////////////////
+
+
+       ColumnManager.prototype.generateCells = function (row) {
+
+               var self = this;
+
+               var cells = [];
+
+               self.columnsByIndex.forEach(function (column) {
+
+                       cells.push(column.generateCell(row));
+               });
+
+               return cells;
+       };
+
+       //////////////// Column Management /////////////////
+
+
+       ColumnManager.prototype.getFlexBaseWidth = function () {
+
+               var self = this,
+                   totalWidth = self.table.element.clientWidth,
+                   //table element width
+
+
+               fixedWidth = 0;
+
+               //adjust for vertical scrollbar if present
+
+
+               if (self.rowManager.element.scrollHeight > self.rowManager.element.clientHeight) {
+
+                       totalWidth -= self.rowManager.element.offsetWidth - self.rowManager.element.clientWidth;
+               }
+
+               this.columnsByIndex.forEach(function (column) {
+
+                       var width, minWidth, colWidth;
+
+                       if (column.visible) {
+
+                               width = column.definition.width || 0;
+
+                               minWidth = typeof column.minWidth == "undefined" ? self.table.options.columnMinWidth : parseInt(column.minWidth);
+
+                               if (typeof width == "string") {
+
+                                       if (width.indexOf("%") > -1) {
+
+                                               colWidth = totalWidth / 100 * parseInt(width);
+                                       } else {
+
+                                               colWidth = parseInt(width);
+                                       }
+                               } else {
+
+                                       colWidth = width;
+                               }
+
+                               fixedWidth += colWidth > minWidth ? colWidth : minWidth;
+                       }
+               });
+
+               return fixedWidth;
+       };
+
+       ColumnManager.prototype.addColumn = function (definition, before, nextToColumn) {
+               var _this3 = this;
+
+               return new Promise(function (resolve, reject) {
+
+                       var column = _this3._addColumn(definition, before, nextToColumn);
+
+                       _this3._reIndexColumns();
+
+                       if (_this3.table.options.responsiveLayout && _this3.table.modExists("responsiveLayout", true)) {
+
+                               _this3.table.modules.responsiveLayout.initialize();
+                       }
+
+                       if (_this3.table.modExists("columnCalcs")) {
+
+                               _this3.table.modules.columnCalcs.recalc(_this3.table.rowManager.activeRows);
+                       }
+
+                       _this3.redraw();
+
+                       if (_this3.table.modules.layout.getMode() != "fitColumns") {
+
+                               column.reinitializeWidth();
+                       }
+
+                       _this3._verticalAlignHeaders();
+
+                       _this3.table.rowManager.reinitialize();
+
+                       resolve(column);
+               });
+       };
+
+       //remove column from system
+
+
+       ColumnManager.prototype.deregisterColumn = function (column) {
+
+               var field = column.getField(),
+                   index;
+
+               //remove from field list
+
+
+               if (field) {
+
+                       delete this.columnsByField[field];
+               }
+
+               //remove from index list
+
+
+               index = this.columnsByIndex.indexOf(column);
+
+               if (index > -1) {
+
+                       this.columnsByIndex.splice(index, 1);
+               }
+
+               //remove from column list
+
+
+               index = this.columns.indexOf(column);
+
+               if (index > -1) {
+
+                       this.columns.splice(index, 1);
+               }
+
+               if (this.table.options.responsiveLayout && this.table.modExists("responsiveLayout", true)) {
+
+                       this.table.modules.responsiveLayout.initialize();
+               }
+
+               this.redraw();
+       };
+
+       //redraw columns
+
+
+       ColumnManager.prototype.redraw = function (force) {
+
+               if (force) {
+
+                       if (Tabulator.prototype.helpers.elVisible(this.element)) {
+
+                               this._verticalAlignHeaders();
+                       }
+
+                       this.table.rowManager.resetScroll();
+
+                       this.table.rowManager.reinitialize();
+               }
+
+               if (["fitColumns", "fitDataStretch"].indexOf(this.table.modules.layout.getMode()) > -1) {
+
+                       this.table.modules.layout.layout();
+               } else {
+
+                       if (force) {
+
+                               this.table.modules.layout.layout();
+                       } else {
+
+                               if (this.table.options.responsiveLayout && this.table.modExists("responsiveLayout", true)) {
+
+                                       this.table.modules.responsiveLayout.update();
+                               }
+                       }
+               }
+
+               if (this.table.modExists("frozenColumns")) {
+
+                       this.table.modules.frozenColumns.layout();
+               }
+
+               if (this.table.modExists("columnCalcs")) {
+
+                       this.table.modules.columnCalcs.recalc(this.table.rowManager.activeRows);
+               }
+
+               if (force) {
+
+                       if (this.table.options.persistence && this.table.modExists("persistence", true) && this.table.modules.persistence.config.columns) {
+
+                               this.table.modules.persistence.save("columns");
+                       }
+
+                       if (this.table.modExists("columnCalcs")) {
+
+                               this.table.modules.columnCalcs.redraw();
+                       }
+               }
+
+               this.table.footerManager.redraw();
+       };
+
+       //public column object
+
+       var ColumnComponent = function ColumnComponent(column) {
+
+               this._column = column;
+
+               this.type = "ColumnComponent";
+       };
+
+       ColumnComponent.prototype.getElement = function () {
+
+               return this._column.getElement();
+       };
+
+       ColumnComponent.prototype.getDefinition = function () {
+
+               return this._column.getDefinition();
+       };
+
+       ColumnComponent.prototype.getField = function () {
+
+               return this._column.getField();
+       };
+
+       ColumnComponent.prototype.getCells = function () {
+
+               var cells = [];
+
+               this._column.cells.forEach(function (cell) {
+
+                       cells.push(cell.getComponent());
+               });
+
+               return cells;
+       };
+
+       ColumnComponent.prototype.getVisibility = function () {
+
+               console.warn("getVisibility function is deprecated, you should now use the isVisible function");
+
+               return this._column.visible;
+       };
+
+       ColumnComponent.prototype.isVisible = function () {
+
+               return this._column.visible;
+       };
+
+       ColumnComponent.prototype.show = function () {
+
+               if (this._column.isGroup) {
+
+                       this._column.columns.forEach(function (column) {
+
+                               column.show();
+                       });
+               } else {
+
+                       this._column.show();
+               }
+       };
+
+       ColumnComponent.prototype.hide = function () {
+
+               if (this._column.isGroup) {
+
+                       this._column.columns.forEach(function (column) {
+
+                               column.hide();
+                       });
+               } else {
+
+                       this._column.hide();
+               }
+       };
+
+       ColumnComponent.prototype.toggle = function () {
+
+               if (this._column.visible) {
+
+                       this.hide();
+               } else {
+
+                       this.show();
+               }
+       };
+
+       ColumnComponent.prototype.delete = function () {
+
+               return this._column.delete();
+       };
+
+       ColumnComponent.prototype.getSubColumns = function () {
+
+               var output = [];
+
+               if (this._column.columns.length) {
+
+                       this._column.columns.forEach(function (column) {
+
+                               output.push(column.getComponent());
+                       });
+               }
+
+               return output;
+       };
+
+       ColumnComponent.prototype.getParentColumn = function () {
+
+               return this._column.parent instanceof Column ? this._column.parent.getComponent() : false;
+       };
+
+       ColumnComponent.prototype._getSelf = function () {
+
+               return this._column;
+       };
+
+       ColumnComponent.prototype.scrollTo = function () {
+
+               return this._column.table.columnManager.scrollToColumn(this._column);
+       };
+
+       ColumnComponent.prototype.getTable = function () {
+
+               return this._column.table;
+       };
+
+       ColumnComponent.prototype.headerFilterFocus = function () {
+
+               if (this._column.table.modExists("filter", true)) {
+
+                       this._column.table.modules.filter.setHeaderFilterFocus(this._column);
+               }
+       };
+
+       ColumnComponent.prototype.reloadHeaderFilter = function () {
+
+               if (this._column.table.modExists("filter", true)) {
+
+                       this._column.table.modules.filter.reloadHeaderFilter(this._column);
+               }
+       };
+
+       ColumnComponent.prototype.getHeaderFilterValue = function () {
+
+               if (this._column.table.modExists("filter", true)) {
+
+                       return this._column.table.modules.filter.getHeaderFilterValue(this._column);
+               }
+       };
+
+       ColumnComponent.prototype.setHeaderFilterValue = function (value) {
+
+               if (this._column.table.modExists("filter", true)) {
+
+                       this._column.table.modules.filter.setHeaderFilterValue(this._column, value);
+               }
+       };
+
+       ColumnComponent.prototype.move = function (to, after) {
+
+               var toColumn = this._column.table.columnManager.findColumn(to);
+
+               if (toColumn) {
+
+                       this._column.table.columnManager.moveColumn(this._column, toColumn, after);
+               } else {
+
+                       console.warn("Move Error - No matching column found:", toColumn);
+               }
+       };
+
+       ColumnComponent.prototype.getNextColumn = function () {
+
+               var nextCol = this._column.nextColumn();
+
+               return nextCol ? nextCol.getComponent() : false;
+       };
+
+       ColumnComponent.prototype.getPrevColumn = function () {
+
+               var prevCol = this._column.prevColumn();
+
+               return prevCol ? prevCol.getComponent() : false;
+       };
+
+       ColumnComponent.prototype.updateDefinition = function (updates) {
+
+               return this._column.updateDefinition(updates);
+       };
+
+       ColumnComponent.prototype.getWidth = function () {
+
+               return this._column.getWidth();
+       };
+
+       ColumnComponent.prototype.setWidth = function (width) {
+
+               if (width === true) {
+
+                       return this._column.reinitializeWidth(true);
+               } else {
+
+                       return this._column.setWidth(width);
+               }
+       };
+
+       ColumnComponent.prototype.validate = function () {
+
+               return this._column.validate();
+       };
+
+       var Column = function Column(def, parent) {
+
+               var self = this;
+
+               this.table = parent.table;
+
+               this.definition = def; //column definition
+
+               this.parent = parent; //hold parent object
+
+               this.type = "column"; //type of element
+
+               this.columns = []; //child columns
+
+               this.cells = []; //cells bound to this column
+
+               this.element = this.createElement(); //column header element
+
+               this.contentElement = false;
+
+               this.titleElement = false;
+
+               this.groupElement = this.createGroupElement(); //column group holder element
+
+               this.isGroup = false;
+
+               this.tooltip = false; //hold column tooltip
+
+               this.hozAlign = ""; //horizontal text alignment
+
+               this.vertAlign = ""; //vert text alignment
+
+
+               //multi dimensional filed handling
+
+               this.field = "";
+
+               this.fieldStructure = "";
+
+               this.getFieldValue = "";
+
+               this.setFieldValue = "";
+
+               this.titleFormatterRendered = false;
+
+               this.setField(this.definition.field);
+
+               if (this.table.options.invalidOptionWarnings) {
+
+                       this.checkDefinition();
+               }
+
+               this.modules = {}; //hold module variables;
+
+
+               this.cellEvents = {
+
+                       cellClick: false,
+
+                       cellDblClick: false,
+
+                       cellContext: false,
+
+                       cellTap: false,
+
+                       cellDblTap: false,
+
+                       cellTapHold: false,
+
+                       cellMouseEnter: false,
+
+                       cellMouseLeave: false,
+
+                       cellMouseOver: false,
+
+                       cellMouseOut: false,
+
+                       cellMouseMove: false
+
+               };
+
+               this.width = null; //column width
+
+               this.widthStyled = ""; //column width prestyled to improve render efficiency
+
+               this.minWidth = null; //column minimum width
+
+               this.minWidthStyled = ""; //column minimum prestyled to improve render efficiency
+
+               this.widthFixed = false; //user has specified a width for this column
+
+
+               this.visible = true; //default visible state
+
+
+               this.component = null;
+
+               this._mapDepricatedFunctionality();
+
+               //initialize column
+
+               if (def.columns) {
+
+                       this.isGroup = true;
+
+                       def.columns.forEach(function (def, i) {
+
+                               var newCol = new Column(def, self);
+
+                               self.attachColumn(newCol);
+                       });
+
+                       self.checkColumnVisibility();
+               } else {
+
+                       parent.registerColumnField(this);
+               }
+
+               if (def.rowHandle && this.table.options.movableRows !== false && this.table.modExists("moveRow")) {
+
+                       this.table.modules.moveRow.setHandle(true);
+               }
+
+               this._buildHeader();
+
+               this.bindModuleColumns();
+       };
+
+       Column.prototype.createElement = function () {
+
+               var el = document.createElement("div");
+
+               el.classList.add("tabulator-col");
+
+               el.setAttribute("role", "columnheader");
+
+               el.setAttribute("aria-sort", "none");
+
+               return el;
+       };
+
+       Column.prototype.createGroupElement = function () {
+
+               var el = document.createElement("div");
+
+               el.classList.add("tabulator-col-group-cols");
+
+               return el;
+       };
+
+       Column.prototype.checkDefinition = function () {
+               var _this4 = this;
+
+               Object.keys(this.definition).forEach(function (key) {
+
+                       if (_this4.defaultOptionList.indexOf(key) === -1) {
+
+                               console.warn("Invalid column definition option in '" + (_this4.field || _this4.definition.title) + "' column:", key);
+                       }
+               });
+       };
+
+       Column.prototype.setField = function (field) {
+
+               this.field = field;
+
+               this.fieldStructure = field ? this.table.options.nestedFieldSeparator ? field.split(this.table.options.nestedFieldSeparator) : [field] : [];
+
+               this.getFieldValue = this.fieldStructure.length > 1 ? this._getNestedData : this._getFlatData;
+
+               this.setFieldValue = this.fieldStructure.length > 1 ? this._setNestedData : this._setFlatData;
+       };
+
+       //register column position with column manager
+
+       Column.prototype.registerColumnPosition = function (column) {
+
+               this.parent.registerColumnPosition(column);
+       };
+
+       //register column position with column manager
+
+       Column.prototype.registerColumnField = function (column) {
+
+               this.parent.registerColumnField(column);
+       };
+
+       //trigger position registration
+
+       Column.prototype.reRegisterPosition = function () {
+
+               if (this.isGroup) {
+
+                       this.columns.forEach(function (column) {
+
+                               column.reRegisterPosition();
+                       });
+               } else {
+
+                       this.registerColumnPosition(this);
+               }
+       };
+
+       Column.prototype._mapDepricatedFunctionality = function () {
+
+               if (typeof this.definition.hideInHtml !== "undefined") {
+
+                       this.definition.htmlOutput = !this.definition.hideInHtml;
+
+                       console.warn("hideInHtml column definition property is deprecated, you should now use htmlOutput");
+               }
+
+               if (typeof this.definition.align !== "undefined") {
+
+                       this.definition.hozAlign = this.definition.align;
+
+                       console.warn("align column definition property is deprecated, you should now use hozAlign");
+               }
+
+               if (typeof this.definition.downloadTitle !== "undefined") {
+
+                       this.definition.titleDownload = this.definition.downloadTitle;
+
+                       console.warn("downloadTitle definition property is deprecated, you should now use titleDownload");
+               }
+       };
+
+       Column.prototype.setTooltip = function () {
+
+               var self = this,
+                   def = self.definition;
+
+               //set header tooltips
+
+               var tooltip = def.headerTooltip || def.tooltip === false ? def.headerTooltip : self.table.options.tooltipsHeader;
+
+               if (tooltip) {
+
+                       if (tooltip === true) {
+
+                               if (def.field) {
+
+                                       self.table.modules.localize.bind("columns|" + def.field, function (value) {
+
+                                               self.element.setAttribute("title", value || def.title);
+                                       });
+                               } else {
+
+                                       self.element.setAttribute("title", def.title);
+                               }
+                       } else {
+
+                               if (typeof tooltip == "function") {
+
+                                       tooltip = tooltip(self.getComponent());
+
+                                       if (tooltip === false) {
+
+                                               tooltip = "";
+                                       }
+                               }
+
+                               self.element.setAttribute("title", tooltip);
+                       }
+               } else {
+
+                       self.element.setAttribute("title", "");
+               }
+       };
+
+       //build header element
+
+       Column.prototype._buildHeader = function () {
+
+               var self = this,
+                   def = self.definition;
+
+               while (self.element.firstChild) {
+                       self.element.removeChild(self.element.firstChild);
+               }if (def.headerVertical) {
+
+                       self.element.classList.add("tabulator-col-vertical");
+
+                       if (def.headerVertical === "flip") {
+
+                               self.element.classList.add("tabulator-col-vertical-flip");
+                       }
+               }
+
+               self.contentElement = self._bindEvents();
+
+               self.contentElement = self._buildColumnHeaderContent();
+
+               self.element.appendChild(self.contentElement);
+
+               if (self.isGroup) {
+
+                       self._buildGroupHeader();
+               } else {
+
+                       self._buildColumnHeader();
+               }
+
+               self.setTooltip();
+
+               //set resizable handles
+
+               if (self.table.options.resizableColumns && self.table.modExists("resizeColumns")) {
+
+                       self.table.modules.resizeColumns.initializeColumn("header", self, self.element);
+               }
+
+               //set resizable handles
+
+               if (def.headerFilter && self.table.modExists("filter") && self.table.modExists("edit")) {
+
+                       if (typeof def.headerFilterPlaceholder !== "undefined" && def.field) {
+
+                               self.table.modules.localize.setHeaderFilterColumnPlaceholder(def.field, def.headerFilterPlaceholder);
+                       }
+
+                       self.table.modules.filter.initializeColumn(self);
+               }
+
+               //set resizable handles
+
+               if (self.table.modExists("frozenColumns")) {
+
+                       self.table.modules.frozenColumns.initializeColumn(self);
+               }
+
+               //set movable column
+
+               if (self.table.options.movableColumns && !self.isGroup && self.table.modExists("moveColumn")) {
+
+                       self.table.modules.moveColumn.initializeColumn(self);
+               }
+
+               //set calcs column
+
+               if ((def.topCalc || def.bottomCalc) && self.table.modExists("columnCalcs")) {
+
+                       self.table.modules.columnCalcs.initializeColumn(self);
+               }
+
+               //handle persistence
+
+               if (self.table.modExists("persistence") && self.table.modules.persistence.config.columns) {
+
+                       self.table.modules.persistence.initializeColumn(self);
+               }
+
+               //update header tooltip on mouse enter
+
+               self.element.addEventListener("mouseenter", function (e) {
+
+                       self.setTooltip();
+               });
+       };
+
+       Column.prototype._bindEvents = function () {
+
+               var self = this,
+                   def = self.definition,
+                   dblTap,
+                   tapHold,
+                   tap;
+
+               //setup header click event bindings
+
+               if (typeof def.headerClick == "function") {
+
+                       self.element.addEventListener("click", function (e) {
+                               def.headerClick(e, self.getComponent());
+                       });
+               }
+
+               if (typeof def.headerDblClick == "function") {
+
+                       self.element.addEventListener("dblclick", function (e) {
+                               def.headerDblClick(e, self.getComponent());
+                       });
+               }
+
+               if (typeof def.headerContext == "function") {
+
+                       self.element.addEventListener("contextmenu", function (e) {
+                               def.headerContext(e, self.getComponent());
+                       });
+               }
+
+               //setup header tap event bindings
+
+               if (typeof def.headerTap == "function") {
+
+                       tap = false;
+
+                       self.element.addEventListener("touchstart", function (e) {
+
+                               tap = true;
+                       }, { passive: true });
+
+                       self.element.addEventListener("touchend", function (e) {
+
+                               if (tap) {
+
+                                       def.headerTap(e, self.getComponent());
+                               }
+
+                               tap = false;
+                       });
+               }
+
+               if (typeof def.headerDblTap == "function") {
+
+                       dblTap = null;
+
+                       self.element.addEventListener("touchend", function (e) {
+
+                               if (dblTap) {
+
+                                       clearTimeout(dblTap);
+
+                                       dblTap = null;
+
+                                       def.headerDblTap(e, self.getComponent());
+                               } else {
+
+                                       dblTap = setTimeout(function () {
+
+                                               clearTimeout(dblTap);
+
+                                               dblTap = null;
+                                       }, 300);
+                               }
+                       });
+               }
+
+               if (typeof def.headerTapHold == "function") {
+
+                       tapHold = null;
+
+                       self.element.addEventListener("touchstart", function (e) {
+
+                               clearTimeout(tapHold);
+
+                               tapHold = setTimeout(function () {
+
+                                       clearTimeout(tapHold);
+
+                                       tapHold = null;
+
+                                       tap = false;
+
+                                       def.headerTapHold(e, self.getComponent());
+                               }, 1000);
+                       }, { passive: true });
+
+                       self.element.addEventListener("touchend", function (e) {
+
+                               clearTimeout(tapHold);
+
+                               tapHold = null;
+                       });
+               }
+
+               //store column cell click event bindings
+
+               if (typeof def.cellClick == "function") {
+
+                       self.cellEvents.cellClick = def.cellClick;
+               }
+
+               if (typeof def.cellDblClick == "function") {
+
+                       self.cellEvents.cellDblClick = def.cellDblClick;
+               }
+
+               if (typeof def.cellContext == "function") {
+
+                       self.cellEvents.cellContext = def.cellContext;
+               }
+
+               //store column mouse event bindings
+
+               if (typeof def.cellMouseEnter == "function") {
+
+                       self.cellEvents.cellMouseEnter = def.cellMouseEnter;
+               }
+
+               if (typeof def.cellMouseLeave == "function") {
+
+                       self.cellEvents.cellMouseLeave = def.cellMouseLeave;
+               }
+
+               if (typeof def.cellMouseOver == "function") {
+
+                       self.cellEvents.cellMouseOver = def.cellMouseOver;
+               }
+
+               if (typeof def.cellMouseOut == "function") {
+
+                       self.cellEvents.cellMouseOut = def.cellMouseOut;
+               }
+
+               if (typeof def.cellMouseMove == "function") {
+
+                       self.cellEvents.cellMouseMove = def.cellMouseMove;
+               }
+
+               //setup column cell tap event bindings
+
+               if (typeof def.cellTap == "function") {
+
+                       self.cellEvents.cellTap = def.cellTap;
+               }
+
+               if (typeof def.cellDblTap == "function") {
+
+                       self.cellEvents.cellDblTap = def.cellDblTap;
+               }
+
+               if (typeof def.cellTapHold == "function") {
+
+                       self.cellEvents.cellTapHold = def.cellTapHold;
+               }
+
+               //setup column cell edit callbacks
+
+               if (typeof def.cellEdited == "function") {
+
+                       self.cellEvents.cellEdited = def.cellEdited;
+               }
+
+               if (typeof def.cellEditing == "function") {
+
+                       self.cellEvents.cellEditing = def.cellEditing;
+               }
+
+               if (typeof def.cellEditCancelled == "function") {
+
+                       self.cellEvents.cellEditCancelled = def.cellEditCancelled;
+               }
+       };
+
+       //build header element for header
+
+       Column.prototype._buildColumnHeader = function () {
+
+               var self = this,
+                   def = self.definition,
+                   table = self.table,
+                   sortable;
+
+               //set column sorter
+
+               if (table.modExists("sort")) {
+
+                       table.modules.sort.initializeColumn(self, self.contentElement);
+               }
+
+               //set column header context menu
+
+               if ((def.headerContextMenu || def.headerMenu) && table.modExists("menu")) {
+
+                       table.modules.menu.initializeColumnHeader(self);
+               }
+
+               //set column formatter
+
+               if (table.modExists("format")) {
+
+                       table.modules.format.initializeColumn(self);
+               }
+
+               //set column editor
+
+               if (typeof def.editor != "undefined" && table.modExists("edit")) {
+
+                       table.modules.edit.initializeColumn(self);
+               }
+
+               //set colum validator
+
+               if (typeof def.validator != "undefined" && table.modExists("validate")) {
+
+                       table.modules.validate.initializeColumn(self);
+               }
+
+               //set column mutator
+
+               if (table.modExists("mutator")) {
+
+                       table.modules.mutator.initializeColumn(self);
+               }
+
+               //set column accessor
+
+               if (table.modExists("accessor")) {
+
+                       table.modules.accessor.initializeColumn(self);
+               }
+
+               //set respoviveLayout
+
+               if (_typeof(table.options.responsiveLayout) && table.modExists("responsiveLayout")) {
+
+                       table.modules.responsiveLayout.initializeColumn(self);
+               }
+
+               //set column visibility
+
+               if (typeof def.visible != "undefined") {
+
+                       if (def.visible) {
+
+                               self.show(true);
+                       } else {
+
+                               self.hide(true);
+                       }
+               }
+
+               //asign additional css classes to column header
+
+               if (def.cssClass) {
+
+                       var classeNames = def.cssClass.split(" ");
+
+                       classeNames.forEach(function (className) {
+
+                               self.element.classList.add(className);
+                       });
+               }
+
+               if (def.field) {
+
+                       this.element.setAttribute("tabulator-field", def.field);
+               }
+
+               //set min width if present
+
+               self.setMinWidth(typeof def.minWidth == "undefined" ? self.table.options.columnMinWidth : parseInt(def.minWidth));
+
+               self.reinitializeWidth();
+
+               //set tooltip if present
+
+               self.tooltip = self.definition.tooltip || self.definition.tooltip === false ? self.definition.tooltip : self.table.options.tooltips;
+
+               //set orizontal text alignment
+
+               self.hozAlign = typeof self.definition.hozAlign == "undefined" ? self.table.options.cellHozAlign : self.definition.hozAlign;
+
+               self.vertAlign = typeof self.definition.vertAlign == "undefined" ? self.table.options.cellVertAlign : self.definition.vertAlign;
+       };
+
+       Column.prototype._buildColumnHeaderContent = function () {
+
+               var def = this.definition,
+                   table = this.table;
+
+               var contentElement = document.createElement("div");
+
+               contentElement.classList.add("tabulator-col-content");
+
+               this.titleElement = this._buildColumnHeaderTitle();
+
+               contentElement.appendChild(this.titleElement);
+
+               return contentElement;
+       };
+
+       //build title element of column
+
+       Column.prototype._buildColumnHeaderTitle = function () {
+
+               var self = this,
+                   def = self.definition,
+                   table = self.table,
+                   title;
+
+               var titleHolderElement = document.createElement("div");
+
+               titleHolderElement.classList.add("tabulator-col-title");
+
+               if (def.editableTitle) {
+
+                       var titleElement = document.createElement("input");
+
+                       titleElement.classList.add("tabulator-title-editor");
+
+                       titleElement.addEventListener("click", function (e) {
+
+                               e.stopPropagation();
+
+                               titleElement.focus();
+                       });
+
+                       titleElement.addEventListener("change", function () {
+
+                               def.title = titleElement.value;
+
+                               table.options.columnTitleChanged.call(self.table, self.getComponent());
+                       });
+
+                       titleHolderElement.appendChild(titleElement);
+
+                       if (def.field) {
+
+                               table.modules.localize.bind("columns|" + def.field, function (text) {
+
+                                       titleElement.value = text || def.title || "&nbsp;";
+                               });
+                       } else {
+
+                               titleElement.value = def.title || "&nbsp;";
+                       }
+               } else {
+
+                       if (def.field) {
+
+                               table.modules.localize.bind("columns|" + def.field, function (text) {
+
+                                       self._formatColumnHeaderTitle(titleHolderElement, text || def.title || "&nbsp;");
+                               });
+                       } else {
+
+                               self._formatColumnHeaderTitle(titleHolderElement, def.title || "&nbsp;");
+                       }
+               }
+
+               return titleHolderElement;
+       };
+
+       Column.prototype._formatColumnHeaderTitle = function (el, title) {
+               var _this5 = this;
+
+               var formatter, contents, params, mockCell, onRendered;
+
+               if (this.definition.titleFormatter && this.table.modExists("format")) {
+
+                       formatter = this.table.modules.format.getFormatter(this.definition.titleFormatter);
+
+                       onRendered = function onRendered(callback) {
+
+                               _this5.titleFormatterRendered = callback;
+                       };
+
+                       mockCell = {
+
+                               getValue: function getValue() {
+
+                                       return title;
+                               },
+
+                               getElement: function getElement() {
+
+                                       return el;
+                               }
+
+                       };
+
+                       params = this.definition.titleFormatterParams || {};
+
+                       params = typeof params === "function" ? params() : params;
+
+                       contents = formatter.call(this.table.modules.format, mockCell, params, onRendered);
+
+                       switch (typeof contents === 'undefined' ? 'undefined' : _typeof(contents)) {
+
+                               case "object":
+
+                                       if (contents instanceof Node) {
+
+                                               el.appendChild(contents);
+                                       } else {
+
+                                               el.innerHTML = "";
+
+                                               console.warn("Format Error - Title formatter has returned a type of object, the only valid formatter object return is an instance of Node, the formatter returned:", contents);
+                                       }
+
+                                       break;
+
+                               case "undefined":
+
+                               case "null":
+
+                                       el.innerHTML = "";
+
+                                       break;
+
+                               default:
+
+                                       el.innerHTML = contents;
+
+                       }
+               } else {
+
+                       el.innerHTML = title;
+               }
+       };
+
+       //build header element for column group
+
+       Column.prototype._buildGroupHeader = function () {
+               var _this6 = this;
+
+               this.element.classList.add("tabulator-col-group");
+
+               this.element.setAttribute("role", "columngroup");
+
+               this.element.setAttribute("aria-title", this.definition.title);
+
+               //asign additional css classes to column header
+
+               if (this.definition.cssClass) {
+
+                       var classeNames = this.definition.cssClass.split(" ");
+
+                       classeNames.forEach(function (className) {
+
+                               _this6.element.classList.add(className);
+                       });
+               }
+
+               //set column header context menu
+
+               if ((this.definition.headerContextMenu || this.definition.headerMenu) && this.table.modExists("menu")) {
+
+                       this.table.modules.menu.initializeColumnHeader(this);
+               }
+
+               this.element.appendChild(this.groupElement);
+       };
+
+       //flat field lookup
+
+       Column.prototype._getFlatData = function (data) {
+
+               return data[this.field];
+       };
+
+       //nested field lookup
+
+       Column.prototype._getNestedData = function (data) {
+
+               var dataObj = data,
+                   structure = this.fieldStructure,
+                   length = structure.length,
+                   output;
+
+               for (var _i = 0; _i < length; _i++) {
+
+                       dataObj = dataObj[structure[_i]];
+
+                       output = dataObj;
+
+                       if (!dataObj) {
+
+                               break;
+                       }
+               }
+
+               return output;
+       };
+
+       //flat field set
+
+       Column.prototype._setFlatData = function (data, value) {
+
+               if (this.field) {
+
+                       data[this.field] = value;
+               }
+       };
+
+       //nested field set
+
+       Column.prototype._setNestedData = function (data, value) {
+
+               var dataObj = data,
+                   structure = this.fieldStructure,
+                   length = structure.length;
+
+               for (var _i2 = 0; _i2 < length; _i2++) {
+
+                       if (_i2 == length - 1) {
+
+                               dataObj[structure[_i2]] = value;
+                       } else {
+
+                               if (!dataObj[structure[_i2]]) {
+
+                                       if (typeof value !== "undefined") {
+
+                                               dataObj[structure[_i2]] = {};
+                                       } else {
+
+                                               break;
+                                       }
+                               }
+
+                               dataObj = dataObj[structure[_i2]];
+                       }
+               }
+       };
+
+       //attach column to this group
+
+       Column.prototype.attachColumn = function (column) {
+
+               var self = this;
+
+               if (self.groupElement) {
+
+                       self.columns.push(column);
+
+                       self.groupElement.appendChild(column.getElement());
+               } else {
+
+                       console.warn("Column Warning - Column being attached to another column instead of column group");
+               }
+       };
+
+       //vertically align header in column
+
+       Column.prototype.verticalAlign = function (alignment, height) {
+
+               //calculate height of column header and group holder element
+
+               var parentHeight = this.parent.isGroup ? this.parent.getGroupElement().clientHeight : height || this.parent.getHeadersElement().clientHeight;
+
+               // var parentHeight = this.parent.isGroup ? this.parent.getGroupElement().clientHeight : this.parent.getHeadersElement().clientHeight;
+
+
+               this.element.style.height = parentHeight + "px";
+
+               if (this.isGroup) {
+
+                       this.groupElement.style.minHeight = parentHeight - this.contentElement.offsetHeight + "px";
+               }
+
+               //vertically align cell contents
+
+               if (!this.isGroup && alignment !== "top") {
+
+                       if (alignment === "bottom") {
+
+                               this.element.style.paddingTop = this.element.clientHeight - this.contentElement.offsetHeight + "px";
+                       } else {
+
+                               this.element.style.paddingTop = (this.element.clientHeight - this.contentElement.offsetHeight) / 2 + "px";
+                       }
+               }
+
+               this.columns.forEach(function (column) {
+
+                       column.verticalAlign(alignment);
+               });
+       };
+
+       //clear vertical alignmenet
+
+       Column.prototype.clearVerticalAlign = function () {
+
+               this.element.style.paddingTop = "";
+
+               this.element.style.height = "";
+
+               this.element.style.minHeight = "";
+
+               this.groupElement.style.minHeight = "";
+
+               this.columns.forEach(function (column) {
+
+                       column.clearVerticalAlign();
+               });
+       };
+
+       Column.prototype.bindModuleColumns = function () {
+
+               //check if rownum formatter is being used on a column
+
+               if (this.definition.formatter == "rownum") {
+
+                       this.table.rowManager.rowNumColumn = this;
+               }
+       };
+
+       //// Retreive Column Information ////
+
+
+       //return column header element
+
+       Column.prototype.getElement = function () {
+
+               return this.element;
+       };
+
+       //return colunm group element
+
+       Column.prototype.getGroupElement = function () {
+
+               return this.groupElement;
+       };
+
+       //return field name
+
+       Column.prototype.getField = function () {
+
+               return this.field;
+       };
+
+       //return the first column in a group
+
+       Column.prototype.getFirstColumn = function () {
+
+               if (!this.isGroup) {
+
+                       return this;
+               } else {
+
+                       if (this.columns.length) {
+
+                               return this.columns[0].getFirstColumn();
+                       } else {
+
+                               return false;
+                       }
+               }
+       };
+
+       //return the last column in a group
+
+       Column.prototype.getLastColumn = function () {
+
+               if (!this.isGroup) {
+
+                       return this;
+               } else {
+
+                       if (this.columns.length) {
+
+                               return this.columns[this.columns.length - 1].getLastColumn();
+                       } else {
+
+                               return false;
+                       }
+               }
+       };
+
+       //return all columns in a group
+
+       Column.prototype.getColumns = function () {
+
+               return this.columns;
+       };
+
+       //return all columns in a group
+
+       Column.prototype.getCells = function () {
+
+               return this.cells;
+       };
+
+       //retreive the top column in a group of columns
+
+       Column.prototype.getTopColumn = function () {
+
+               if (this.parent.isGroup) {
+
+                       return this.parent.getTopColumn();
+               } else {
+
+                       return this;
+               }
+       };
+
+       //return column definition object
+
+       Column.prototype.getDefinition = function (updateBranches) {
+
+               var colDefs = [];
+
+               if (this.isGroup && updateBranches) {
+
+                       this.columns.forEach(function (column) {
+
+                               colDefs.push(column.getDefinition(true));
+                       });
+
+                       this.definition.columns = colDefs;
+               }
+
+               return this.definition;
+       };
+
+       //////////////////// Actions ////////////////////
+
+
+       Column.prototype.checkColumnVisibility = function () {
+
+               var visible = false;
+
+               this.columns.forEach(function (column) {
+
+                       if (column.visible) {
+
+                               visible = true;
+                       }
+               });
+
+               if (visible) {
+
+                       this.show();
+
+                       this.parent.table.options.columnVisibilityChanged.call(this.table, this.getComponent(), false);
+               } else {
+
+                       this.hide();
+               }
+       };
+
+       //show column
+
+       Column.prototype.show = function (silent, responsiveToggle) {
+
+               if (!this.visible) {
+
+                       this.visible = true;
+
+                       this.element.style.display = "";
+
+                       if (this.parent.isGroup) {
+
+                               this.parent.checkColumnVisibility();
+                       }
+
+                       this.cells.forEach(function (cell) {
+
+                               cell.show();
+                       });
+
+                       if (!this.isGroup && this.width === null) {
+
+                               this.reinitializeWidth();
+                       }
+
+                       this.table.columnManager._verticalAlignHeaders();
+
+                       if (this.table.options.persistence && this.table.modExists("persistence", true) && this.table.modules.persistence.config.columns) {
+
+                               this.table.modules.persistence.save("columns");
+                       }
+
+                       if (!responsiveToggle && this.table.options.responsiveLayout && this.table.modExists("responsiveLayout", true)) {
+
+                               this.table.modules.responsiveLayout.updateColumnVisibility(this, this.visible);
+                       }
+
+                       if (!silent) {
+
+                               this.table.options.columnVisibilityChanged.call(this.table, this.getComponent(), true);
+                       }
+
+                       if (this.parent.isGroup) {
+
+                               this.parent.matchChildWidths();
+                       }
+               }
+       };
+
+       //hide column
+
+       Column.prototype.hide = function (silent, responsiveToggle) {
+
+               if (this.visible) {
+
+                       this.visible = false;
+
+                       this.element.style.display = "none";
+
+                       this.table.columnManager._verticalAlignHeaders();
+
+                       if (this.parent.isGroup) {
+
+                               this.parent.checkColumnVisibility();
+                       }
+
+                       this.cells.forEach(function (cell) {
+
+                               cell.hide();
+                       });
+
+                       if (this.table.options.persistence && this.table.modExists("persistence", true) && this.table.modules.persistence.config.columns) {
+
+                               this.table.modules.persistence.save("columns");
+                       }
+
+                       if (!responsiveToggle && this.table.options.responsiveLayout && this.table.modExists("responsiveLayout", true)) {
+
+                               this.table.modules.responsiveLayout.updateColumnVisibility(this, this.visible);
+                       }
+
+                       if (!silent) {
+
+                               this.table.options.columnVisibilityChanged.call(this.table, this.getComponent(), false);
+                       }
+
+                       if (this.parent.isGroup) {
+
+                               this.parent.matchChildWidths();
+                       }
+               }
+       };
+
+       Column.prototype.matchChildWidths = function () {
+
+               var childWidth = 0;
+
+               if (this.contentElement && this.columns.length) {
+
+                       this.columns.forEach(function (column) {
+
+                               if (column.visible) {
+
+                                       childWidth += column.getWidth();
+                               }
+                       });
+
+                       this.contentElement.style.maxWidth = childWidth - 1 + "px";
+
+                       if (this.parent.isGroup) {
+
+                               this.parent.matchChildWidths();
+                       }
+               }
+       };
+
+       Column.prototype.setWidth = function (width) {
+
+               this.widthFixed = true;
+
+               this.setWidthActual(width);
+       };
+
+       Column.prototype.setWidthActual = function (width) {
+
+               if (isNaN(width)) {
+
+                       width = Math.floor(this.table.element.clientWidth / 100 * parseInt(width));
+               }
+
+               width = Math.max(this.minWidth, width);
+
+               this.width = width;
+
+               this.widthStyled = width ? width + "px" : "";
+
+               this.element.style.width = this.widthStyled;
+
+               if (!this.isGroup) {
+
+                       this.cells.forEach(function (cell) {
+
+                               cell.setWidth();
+                       });
+               }
+
+               if (this.parent.isGroup) {
+
+                       this.parent.matchChildWidths();
+               }
+
+               //set resizable handles
+
+               if (this.table.modExists("frozenColumns")) {
+
+                       this.table.modules.frozenColumns.layout();
+               }
+       };
+
+       Column.prototype.checkCellHeights = function () {
+
+               var rows = [];
+
+               this.cells.forEach(function (cell) {
+
+                       if (cell.row.heightInitialized) {
+
+                               if (cell.row.getElement().offsetParent !== null) {
+
+                                       rows.push(cell.row);
+
+                                       cell.row.clearCellHeight();
+                               } else {
+
+                                       cell.row.heightInitialized = false;
+                               }
+                       }
+               });
+
+               rows.forEach(function (row) {
+
+                       row.calcHeight();
+               });
+
+               rows.forEach(function (row) {
+
+                       row.setCellHeight();
+               });
+       };
+
+       Column.prototype.getWidth = function () {
+
+               var width = 0;
+
+               if (this.isGroup) {
+
+                       this.columns.forEach(function (column) {
+
+                               if (column.visible) {
+
+                                       width += column.getWidth();
+                               }
+                       });
+               } else {
+
+                       width = this.width;
+               }
+
+               return width;
+       };
+
+       Column.prototype.getHeight = function () {
+
+               return this.element.offsetHeight;
+       };
+
+       Column.prototype.setMinWidth = function (minWidth) {
+
+               this.minWidth = minWidth;
+
+               this.minWidthStyled = minWidth ? minWidth + "px" : "";
+
+               this.element.style.minWidth = this.minWidthStyled;
+
+               this.cells.forEach(function (cell) {
+
+                       cell.setMinWidth();
+               });
+       };
+
+       Column.prototype.delete = function () {
+               var _this7 = this;
+
+               return new Promise(function (resolve, reject) {
+
+                       if (_this7.isGroup) {
+
+                               _this7.columns.forEach(function (column) {
+
+                                       column.delete();
+                               });
+                       }
+
+                       //cancel edit if column is currently being edited
+
+                       if (_this7.table.modExists("edit")) {
+
+                               if (_this7.table.modules.edit.currentCell.column === _this7) {
+
+                                       _this7.table.modules.edit.cancelEdit();
+                               }
+                       }
+
+                       var cellCount = _this7.cells.length;
+
+                       for (var _i3 = 0; _i3 < cellCount; _i3++) {
+
+                               _this7.cells[0].delete();
+                       }
+
+                       _this7.element.parentNode.removeChild(_this7.element);
+
+                       _this7.table.columnManager.deregisterColumn(_this7);
+
+                       resolve();
+               });
+       };
+
+       Column.prototype.columnRendered = function () {
+
+               if (this.titleFormatterRendered) {
+
+                       this.titleFormatterRendered();
+               }
+       };
+
+       Column.prototype.validate = function () {
+
+               var invalid = [];
+
+               this.cells.forEach(function (cell) {
+
+                       if (!cell.validate()) {
+
+                               invalid.push(cell.getComponent());
+                       }
+               });
+
+               return invalid.length ? invalid : true;
+       };
+
+       //////////////// Cell Management /////////////////
+
+
+       //generate cell for this column
+
+       Column.prototype.generateCell = function (row) {
+
+               var self = this;
+
+               var cell = new Cell(self, row);
+
+               this.cells.push(cell);
+
+               return cell;
+       };
+
+       Column.prototype.nextColumn = function () {
+
+               var index = this.table.columnManager.findColumnIndex(this);
+
+               return index > -1 ? this._nextVisibleColumn(index + 1) : false;
+       };
+
+       Column.prototype._nextVisibleColumn = function (index) {
+
+               var column = this.table.columnManager.getColumnByIndex(index);
+
+               return !column || column.visible ? column : this._nextVisibleColumn(index + 1);
+       };
+
+       Column.prototype.prevColumn = function () {
+
+               var index = this.table.columnManager.findColumnIndex(this);
+
+               return index > -1 ? this._prevVisibleColumn(index - 1) : false;
+       };
+
+       Column.prototype._prevVisibleColumn = function (index) {
+
+               var column = this.table.columnManager.getColumnByIndex(index);
+
+               return !column || column.visible ? column : this._prevVisibleColumn(index - 1);
+       };
+
+       Column.prototype.reinitializeWidth = function (force) {
+
+               this.widthFixed = false;
+
+               //set width if present
+
+               if (typeof this.definition.width !== "undefined" && !force) {
+
+                       this.setWidth(this.definition.width);
+               }
+
+               //hide header filters to prevent them altering column width
+
+               if (this.table.modExists("filter")) {
+
+                       this.table.modules.filter.hideHeaderFilterElements();
+               }
+
+               this.fitToData();
+
+               //show header filters again after layout is complete
+
+               if (this.table.modExists("filter")) {
+
+                       this.table.modules.filter.showHeaderFilterElements();
+               }
+       };
+
+       //set column width to maximum cell width
+
+       Column.prototype.fitToData = function () {
+
+               var self = this;
+
+               if (!this.widthFixed) {
+
+                       this.element.style.width = "";
+
+                       self.cells.forEach(function (cell) {
+
+                               cell.clearWidth();
+                       });
+               }
+
+               var maxWidth = this.element.offsetWidth;
+
+               if (!self.width || !this.widthFixed) {
+
+                       self.cells.forEach(function (cell) {
+
+                               var width = cell.getWidth();
+
+                               if (width > maxWidth) {
+
+                                       maxWidth = width;
+                               }
+                       });
+
+                       if (maxWidth) {
+
+                               self.setWidthActual(maxWidth + 1);
+                       }
+               }
+       };
+
+       Column.prototype.updateDefinition = function (updates) {
+               var _this8 = this;
+
+               return new Promise(function (resolve, reject) {
+
+                       var definition;
+
+                       if (!_this8.isGroup) {
+
+                               definition = Object.assign({}, _this8.getDefinition());
+
+                               definition = Object.assign(definition, updates);
+
+                               _this8.table.columnManager.addColumn(definition, false, _this8).then(function (column) {
+
+                                       if (definition.field == _this8.field) {
+
+                                               _this8.field = false; //cleair field name to prevent deletion of duplicate column from arrays
+                                       }
+
+                                       _this8.delete().then(function () {
+
+                                               resolve(column.getComponent());
+                                       }).catch(function (err) {
+
+                                               reject(err);
+                                       });
+                               }).catch(function (err) {
+
+                                       reject(err);
+                               });
+                       } else {
+
+                               console.warn("Column Update Error - The updateDefintion function is only available on columns, not column groups");
+
+                               reject("Column Update Error - The updateDefintion function is only available on columns, not column groups");
+                       }
+               });
+       };
+
+       Column.prototype.deleteCell = function (cell) {
+
+               var index = this.cells.indexOf(cell);
+
+               if (index > -1) {
+
+                       this.cells.splice(index, 1);
+               }
+       };
+
+       Column.prototype.defaultOptionList = ["title", "field", "columns", "visible", "align", "hozAlign", "vertAlign", "width", "minWidth", "widthGrow", "widthShrink", "resizable", "frozen", "responsive", "tooltip", "cssClass", "rowHandle", "hideInHtml", "print", "htmlOutput", "sorter", "sorterParams", "formatter", "formatterParams", "variableHeight", "editable", "editor", "editorParams", "validator", "mutator", "mutatorParams", "mutatorData", "mutatorDataParams", "mutatorEdit", "mutatorEditParams", "mutatorClipboard", "mutatorClipboardParams", "accessor", "accessorParams", "accessorData", "accessorDataParams", "accessorDownload", "accessorDownloadParams", "accessorClipboard", "accessorClipboardParams", "accessorPrint", "accessorPrintParams", "accessorHtmlOutput", "accessorHtmlOutputParams", "clipboard", "download", "downloadTitle", "topCalc", "topCalcParams", "topCalcFormatter", "topCalcFormatterParams", "bottomCalc", "bottomCalcParams", "bottomCalcFormatter", "bottomCalcFormatterParams", "cellClick", "cellDblClick", "cellContext", "cellTap", "cellDblTap", "cellTapHold", "cellMouseEnter", "cellMouseLeave", "cellMouseOver", "cellMouseOut", "cellMouseMove", "cellEditing", "cellEdited", "cellEditCancelled", "headerSort", "headerSortStartingDir", "headerSortTristate", "headerClick", "headerDblClick", "headerContext", "headerTap", "headerDblTap", "headerTapHold", "headerTooltip", "headerVertical", "editableTitle", "titleFormatter", "titleFormatterParams", "headerFilter", "headerFilterPlaceholder", "headerFilterParams", "headerFilterEmptyCheck", "headerFilterFunc", "headerFilterFuncParams", "headerFilterLiveFilter", "print", "headerContextMenu", "headerMenu", "contextMenu", "formatterPrint", "formatterPrintParams", "formatterClipboard", "formatterClipboardParams", "formatterHtmlOutput", "formatterHtmlOutputParams", "titlePrint", "titleClipboard", "titleHtmlOutput", "titleDownload"];
+
+       //////////////// Event Bindings /////////////////
+
+
+       //////////////// Object Generation /////////////////
+
+       Column.prototype.getComponent = function () {
+
+               if (!this.component) {
+
+                       this.component = new ColumnComponent(this);
+               }
+
+               return this.component;
+       };
+
+       var RowManager = function RowManager(table) {
+
+               this.table = table;
+
+               this.element = this.createHolderElement(); //containing element
+
+               this.tableElement = this.createTableElement(); //table element
+
+               this.heightFixer = this.createTableElement(); //table element
+
+               this.columnManager = null; //hold column manager object
+
+               this.height = 0; //hold height of table element
+
+
+               this.firstRender = false; //handle first render
+
+               this.renderMode = "virtual"; //current rendering mode
+
+               this.fixedHeight = false; //current rendering mode
+
+
+               this.rows = []; //hold row data objects
+
+               this.activeRows = []; //rows currently available to on display in the table
+
+               this.activeRowsCount = 0; //count of active rows
+
+
+               this.displayRows = []; //rows currently on display in the table
+
+               this.displayRowsCount = 0; //count of display rows
+
+
+               this.scrollTop = 0;
+
+               this.scrollLeft = 0;
+
+               this.vDomRowHeight = 20; //approximation of row heights for padding
+
+
+               this.vDomTop = 0; //hold position for first rendered row in the virtual DOM
+
+               this.vDomBottom = 0; //hold possition for last rendered row in the virtual DOM
+
+
+               this.vDomScrollPosTop = 0; //last scroll position of the vDom top;
+
+               this.vDomScrollPosBottom = 0; //last scroll position of the vDom bottom;
+
+
+               this.vDomTopPad = 0; //hold value of padding for top of virtual DOM
+
+               this.vDomBottomPad = 0; //hold value of padding for bottom of virtual DOM
+
+
+               this.vDomMaxRenderChain = 90; //the maximum number of dom elements that can be rendered in 1 go
+
+
+               this.vDomWindowBuffer = 0; //window row buffer before removing elements, to smooth scrolling
+
+
+               this.vDomWindowMinTotalRows = 20; //minimum number of rows to be generated in virtual dom (prevent buffering issues on tables with tall rows)
+
+               this.vDomWindowMinMarginRows = 5; //minimum number of rows to be generated in virtual dom margin
+
+
+               this.vDomTopNewRows = []; //rows to normalize after appending to optimize render speed
+
+               this.vDomBottomNewRows = []; //rows to normalize after appending to optimize render speed
+
+
+               this.rowNumColumn = false; //hold column component for row number column
+
+
+               this.redrawBlock = false; //prevent redraws to allow multiple data manipulations becore continuing
+
+               this.redrawBlockRestoreConfig = false; //store latest redraw function calls for when redraw is needed
+
+               this.redrawBlockRederInPosition = false; //store latest redraw function calls for when redraw is needed
+       };
+
+       //////////////// Setup Functions /////////////////
+
+
+       RowManager.prototype.createHolderElement = function () {
+
+               var el = document.createElement("div");
+
+               el.classList.add("tabulator-tableHolder");
+
+               el.setAttribute("tabindex", 0);
+
+               return el;
+       };
+
+       RowManager.prototype.createTableElement = function () {
+
+               var el = document.createElement("div");
+
+               el.classList.add("tabulator-table");
+
+               return el;
+       };
+
+       //return containing element
+
+       RowManager.prototype.getElement = function () {
+
+               return this.element;
+       };
+
+       //return table element
+
+       RowManager.prototype.getTableElement = function () {
+
+               return this.tableElement;
+       };
+
+       //return position of row in table
+
+       RowManager.prototype.getRowPosition = function (row, active) {
+
+               if (active) {
+
+                       return this.activeRows.indexOf(row);
+               } else {
+
+                       return this.rows.indexOf(row);
+               }
+       };
+
+       //link to column manager
+
+       RowManager.prototype.setColumnManager = function (manager) {
+
+               this.columnManager = manager;
+       };
+
+       RowManager.prototype.initialize = function () {
+
+               var self = this;
+
+               self.setRenderMode();
+
+               //initialize manager
+
+               self.element.appendChild(self.tableElement);
+
+               self.firstRender = true;
+
+               //scroll header along with table body
+
+               self.element.addEventListener("scroll", function () {
+
+                       var left = self.element.scrollLeft;
+
+                       //handle horizontal scrolling
+
+                       if (self.scrollLeft != left) {
+
+                               self.columnManager.scrollHorizontal(left);
+
+                               if (self.table.options.groupBy) {
+
+                                       self.table.modules.groupRows.scrollHeaders(left);
+                               }
+
+                               if (self.table.modExists("columnCalcs")) {
+
+                                       self.table.modules.columnCalcs.scrollHorizontal(left);
+                               }
+
+                               self.table.options.scrollHorizontal(left);
+                       }
+
+                       self.scrollLeft = left;
+               });
+
+               //handle virtual dom scrolling
+
+               if (this.renderMode === "virtual") {
+
+                       self.element.addEventListener("scroll", function () {
+
+                               var top = self.element.scrollTop;
+
+                               var dir = self.scrollTop > top;
+
+                               //handle verical scrolling
+
+                               if (self.scrollTop != top) {
+
+                                       self.scrollTop = top;
+
+                                       self.scrollVertical(dir);
+
+                                       if (self.table.options.ajaxProgressiveLoad == "scroll") {
+
+                                               self.table.modules.ajax.nextPage(self.element.scrollHeight - self.element.clientHeight - top);
+                                       }
+
+                                       self.table.options.scrollVertical(top);
+                               } else {
+
+                                       self.scrollTop = top;
+                               }
+                       });
+               }
+       };
+
+       ////////////////// Row Manipulation //////////////////
+
+
+       RowManager.prototype.findRow = function (subject) {
+
+               var self = this;
+
+               if ((typeof subject === 'undefined' ? 'undefined' : _typeof(subject)) == "object") {
+
+                       if (subject instanceof Row) {
+
+                               //subject is row element
+
+                               return subject;
+                       } else if (subject instanceof RowComponent) {
+
+                               //subject is public row component
+
+                               return subject._getSelf() || false;
+                       } else if (typeof HTMLElement !== "undefined" && subject instanceof HTMLElement) {
+
+                               //subject is a HTML element of the row
+
+                               var match = self.rows.find(function (row) {
+
+                                       return row.element === subject;
+                               });
+
+                               return match || false;
+                       }
+               } else if (typeof subject == "undefined" || subject === null) {
+
+                       return false;
+               } else {
+
+                       //subject should be treated as the index of the row
+
+                       var _match = self.rows.find(function (row) {
+
+                               return row.data[self.table.options.index] == subject;
+                       });
+
+                       return _match || false;
+               }
+
+               //catch all for any other type of input
+
+
+               return false;
+       };
+
+       RowManager.prototype.getRowFromDataObject = function (data) {
+
+               var match = this.rows.find(function (row) {
+
+                       return row.data === data;
+               });
+
+               return match || false;
+       };
+
+       RowManager.prototype.getRowFromPosition = function (position, active) {
+
+               if (active) {
+
+                       return this.activeRows[position];
+               } else {
+
+                       return this.rows[position];
+               }
+       };
+
+       RowManager.prototype.scrollToRow = function (row, position, ifVisible) {
+               var _this9 = this;
+
+               var rowIndex = this.getDisplayRows().indexOf(row),
+                   rowEl = row.getElement(),
+                   rowTop,
+                   offset = 0;
+
+               return new Promise(function (resolve, reject) {
+
+                       if (rowIndex > -1) {
+
+                               if (typeof position === "undefined") {
+
+                                       position = _this9.table.options.scrollToRowPosition;
+                               }
+
+                               if (typeof ifVisible === "undefined") {
+
+                                       ifVisible = _this9.table.options.scrollToRowIfVisible;
+                               }
+
+                               if (position === "nearest") {
+
+                                       switch (_this9.renderMode) {
+
+                                               case "classic":
+
+                                                       rowTop = Tabulator.prototype.helpers.elOffset(rowEl).top;
+
+                                                       position = Math.abs(_this9.element.scrollTop - rowTop) > Math.abs(_this9.element.scrollTop + _this9.element.clientHeight - rowTop) ? "bottom" : "top";
+
+                                                       break;
+
+                                               case "virtual":
+
+                                                       position = Math.abs(_this9.vDomTop - rowIndex) > Math.abs(_this9.vDomBottom - rowIndex) ? "bottom" : "top";
+
+                                                       break;
+
+                                       }
+                               }
+
+                               //check row visibility
+
+                               if (!ifVisible) {
+
+                                       if (Tabulator.prototype.helpers.elVisible(rowEl)) {
+
+                                               offset = Tabulator.prototype.helpers.elOffset(rowEl).top - Tabulator.prototype.helpers.elOffset(_this9.element).top;
+
+                                               if (offset > 0 && offset < _this9.element.clientHeight - rowEl.offsetHeight) {
+
+                                                       return false;
+                                               }
+                                       }
+                               }
+
+                               //scroll to row
+
+                               switch (_this9.renderMode) {
+
+                                       case "classic":
+
+                                               _this9.element.scrollTop = Tabulator.prototype.helpers.elOffset(rowEl).top - Tabulator.prototype.helpers.elOffset(_this9.element).top + _this9.element.scrollTop;
+
+                                               break;
+
+                                       case "virtual":
+
+                                               _this9._virtualRenderFill(rowIndex, true);
+
+                                               break;
+
+                               }
+
+                               //align to correct position
+
+                               switch (position) {
+
+                                       case "middle":
+
+                                       case "center":
+
+                                               if (_this9.element.scrollHeight - _this9.element.scrollTop == _this9.element.clientHeight) {
+
+                                                       _this9.element.scrollTop = _this9.element.scrollTop + (rowEl.offsetTop - _this9.element.scrollTop) - (_this9.element.scrollHeight - rowEl.offsetTop) / 2;
+                                               } else {
+
+                                                       _this9.element.scrollTop = _this9.element.scrollTop - _this9.element.clientHeight / 2;
+                                               }
+
+                                               break;
+
+                                       case "bottom":
+
+                                               if (_this9.element.scrollHeight - _this9.element.scrollTop == _this9.element.clientHeight) {
+
+                                                       _this9.element.scrollTop = _this9.element.scrollTop - (_this9.element.scrollHeight - rowEl.offsetTop) + rowEl.offsetHeight;
+                                               } else {
+
+                                                       _this9.element.scrollTop = _this9.element.scrollTop - _this9.element.clientHeight + rowEl.offsetHeight;
+                                               }
+
+                                               break;
+
+                               }
+
+                               resolve();
+                       } else {
+
+                               console.warn("Scroll Error - Row not visible");
+
+                               reject("Scroll Error - Row not visible");
+                       }
+               });
+       };
+
+       ////////////////// Data Handling //////////////////
+
+
+       RowManager.prototype.setData = function (data, renderInPosition, columnsChanged) {
+               var _this10 = this;
+
+               var self = this;
+
+               return new Promise(function (resolve, reject) {
+
+                       if (renderInPosition && _this10.getDisplayRows().length) {
+
+                               if (self.table.options.pagination) {
+
+                                       self._setDataActual(data, true);
+                               } else {
+
+                                       _this10.reRenderInPosition(function () {
+
+                                               self._setDataActual(data);
+                                       });
+                               }
+                       } else {
+
+                               if (_this10.table.options.autoColumns && columnsChanged) {
+
+                                       _this10.table.columnManager.generateColumnsFromRowData(data);
+                               }
+
+                               _this10.resetScroll();
+
+                               _this10._setDataActual(data);
+                       }
+
+                       resolve();
+               });
+       };
+
+       RowManager.prototype._setDataActual = function (data, renderInPosition) {
+
+               var self = this;
+
+               self.table.options.dataLoading.call(this.table, data);
+
+               this._wipeElements();
+
+               if (this.table.options.history && this.table.modExists("history")) {
+
+                       this.table.modules.history.clear();
+               }
+
+               if (Array.isArray(data)) {
+
+                       if (this.table.modExists("selectRow")) {
+
+                               this.table.modules.selectRow.clearSelectionData();
+                       }
+
+                       if (this.table.options.reactiveData && this.table.modExists("reactiveData", true)) {
+
+                               this.table.modules.reactiveData.watchData(data);
+                       }
+
+                       data.forEach(function (def, i) {
+
+                               if (def && (typeof def === 'undefined' ? 'undefined' : _typeof(def)) === "object") {
+
+                                       var row = new Row(def, self);
+
+                                       self.rows.push(row);
+                               } else {
+
+                                       console.warn("Data Loading Warning - Invalid row data detected and ignored, expecting object but received:", def);
+                               }
+                       });
+
+                       self.table.options.dataLoaded.call(this.table, data);
+
+                       self.refreshActiveData(false, false, renderInPosition);
+               } else {
+
+                       console.error("Data Loading Error - Unable to process data due to invalid data type \nExpecting: array \nReceived: ", typeof data === 'undefined' ? 'undefined' : _typeof(data), "\nData:     ", data);
+               }
+       };
+
+       RowManager.prototype._wipeElements = function () {
+
+               this.rows.forEach(function (row) {
+
+                       row.wipe();
+               });
+
+               if (this.table.options.groupBy && this.table.modExists("groupRows")) {
+
+                       this.table.modules.groupRows.wipe();
+               }
+
+               this.rows = [];
+       };
+
+       RowManager.prototype.deleteRow = function (row, blockRedraw) {
+
+               var allIndex = this.rows.indexOf(row),
+                   activeIndex = this.activeRows.indexOf(row);
+
+               if (activeIndex > -1) {
+
+                       this.activeRows.splice(activeIndex, 1);
+               }
+
+               if (allIndex > -1) {
+
+                       this.rows.splice(allIndex, 1);
+               }
+
+               this.setActiveRows(this.activeRows);
+
+               this.displayRowIterator(function (rows) {
+
+                       var displayIndex = rows.indexOf(row);
+
+                       if (displayIndex > -1) {
+
+                               rows.splice(displayIndex, 1);
+                       }
+               });
+
+               if (!blockRedraw) {
+
+                       this.reRenderInPosition();
+               }
+
+               this.regenerateRowNumbers();
+
+               this.table.options.rowDeleted.call(this.table, row.getComponent());
+
+               this.table.options.dataEdited.call(this.table, this.getData());
+
+               if (this.table.options.groupBy && this.table.modExists("groupRows")) {
+
+                       this.table.modules.groupRows.updateGroupRows(true);
+               } else if (this.table.options.pagination && this.table.modExists("page")) {
+
+                       this.refreshActiveData(false, false, true);
+               } else {
+
+                       if (this.table.options.pagination && this.table.modExists("page")) {
+
+                               this.refreshActiveData("page");
+                       }
+               }
+       };
+
+       RowManager.prototype.addRow = function (data, pos, index, blockRedraw) {
+
+               var row = this.addRowActual(data, pos, index, blockRedraw);
+
+               if (this.table.options.history && this.table.modExists("history")) {
+
+                       this.table.modules.history.action("rowAdd", row, { data: data, pos: pos, index: index });
+               }
+
+               return row;
+       };
+
+       //add multiple rows
+
+       RowManager.prototype.addRows = function (data, pos, index) {
+               var _this11 = this;
+
+               var self = this,
+                   length = 0,
+                   rows = [];
+
+               return new Promise(function (resolve, reject) {
+
+                       pos = _this11.findAddRowPos(pos);
+
+                       if (!Array.isArray(data)) {
+
+                               data = [data];
+                       }
+
+                       length = data.length - 1;
+
+                       if (typeof index == "undefined" && pos || typeof index !== "undefined" && !pos) {
+
+                               data.reverse();
+                       }
+
+                       data.forEach(function (item, i) {
+
+                               var row = self.addRow(item, pos, index, true);
+
+                               rows.push(row);
+                       });
+
+                       if (_this11.table.options.groupBy && _this11.table.modExists("groupRows")) {
+
+                               _this11.table.modules.groupRows.updateGroupRows(true);
+                       } else if (_this11.table.options.pagination && _this11.table.modExists("page")) {
+
+                               _this11.refreshActiveData(false, false, true);
+                       } else {
+
+                               _this11.reRenderInPosition();
+                       }
+
+                       //recalc column calculations if present
+
+                       if (_this11.table.modExists("columnCalcs")) {
+
+                               _this11.table.modules.columnCalcs.recalc(_this11.table.rowManager.activeRows);
+                       }
+
+                       _this11.regenerateRowNumbers();
+
+                       resolve(rows);
+               });
+       };
+
+       RowManager.prototype.findAddRowPos = function (pos) {
+
+               if (typeof pos === "undefined") {
+
+                       pos = this.table.options.addRowPos;
+               }
+
+               if (pos === "pos") {
+
+                       pos = true;
+               }
+
+               if (pos === "bottom") {
+
+                       pos = false;
+               }
+
+               return pos;
+       };
+
+       RowManager.prototype.addRowActual = function (data, pos, index, blockRedraw) {
+
+               var row = data instanceof Row ? data : new Row(data || {}, this),
+                   top = this.findAddRowPos(pos),
+                   allIndex = -1,
+                   activeIndex,
+                   dispRows;
+
+               if (!index && this.table.options.pagination && this.table.options.paginationAddRow == "page") {
+
+                       dispRows = this.getDisplayRows();
+
+                       if (top) {
+
+                               if (dispRows.length) {
+
+                                       index = dispRows[0];
+                               } else {
+
+                                       if (this.activeRows.length) {
+
+                                               index = this.activeRows[this.activeRows.length - 1];
+
+                                               top = false;
+                                       }
+                               }
+                       } else {
+
+                               if (dispRows.length) {
+
+                                       index = dispRows[dispRows.length - 1];
+
+                                       top = dispRows.length < this.table.modules.page.getPageSize() ? false : true;
+                               }
+                       }
+               }
+
+               if (typeof index !== "undefined") {
+
+                       index = this.findRow(index);
+               }
+
+               if (this.table.options.groupBy && this.table.modExists("groupRows")) {
+
+                       this.table.modules.groupRows.assignRowToGroup(row);
+
+                       var groupRows = row.getGroup().rows;
+
+                       if (groupRows.length > 1) {
+
+                               if (!index || index && groupRows.indexOf(index) == -1) {
+
+                                       if (top) {
+
+                                               if (groupRows[0] !== row) {
+
+                                                       index = groupRows[0];
+
+                                                       this._moveRowInArray(row.getGroup().rows, row, index, !top);
+                                               }
+                                       } else {
+
+                                               if (groupRows[groupRows.length - 1] !== row) {
+
+                                                       index = groupRows[groupRows.length - 1];
+
+                                                       this._moveRowInArray(row.getGroup().rows, row, index, !top);
+                                               }
+                                       }
+                               } else {
+
+                                       this._moveRowInArray(row.getGroup().rows, row, index, !top);
+                               }
+                       }
+               }
+
+               if (index) {
+
+                       allIndex = this.rows.indexOf(index);
+               }
+
+               if (index && allIndex > -1) {
+
+                       activeIndex = this.activeRows.indexOf(index);
+
+                       this.displayRowIterator(function (rows) {
+
+                               var displayIndex = rows.indexOf(index);
+
+                               if (displayIndex > -1) {
+
+                                       rows.splice(top ? displayIndex : displayIndex + 1, 0, row);
+                               }
+                       });
+
+                       if (activeIndex > -1) {
+
+                               this.activeRows.splice(top ? activeIndex : activeIndex + 1, 0, row);
+                       }
+
+                       this.rows.splice(top ? allIndex : allIndex + 1, 0, row);
+               } else {
+
+                       if (top) {
+
+                               this.displayRowIterator(function (rows) {
+
+                                       rows.unshift(row);
+                               });
+
+                               this.activeRows.unshift(row);
+
+                               this.rows.unshift(row);
+                       } else {
+
+                               this.displayRowIterator(function (rows) {
+
+                                       rows.push(row);
+                               });
+
+                               this.activeRows.push(row);
+
+                               this.rows.push(row);
+                       }
+               }
+
+               this.setActiveRows(this.activeRows);
+
+               this.table.options.rowAdded.call(this.table, row.getComponent());
+
+               this.table.options.dataEdited.call(this.table, this.getData());
+
+               if (!blockRedraw) {
+
+                       this.reRenderInPosition();
+               }
+
+               return row;
+       };
+
+       RowManager.prototype.moveRow = function (from, to, after) {
+
+               if (this.table.options.history && this.table.modExists("history")) {
+
+                       this.table.modules.history.action("rowMove", from, { posFrom: this.getRowPosition(from), posTo: this.getRowPosition(to), to: to, after: after });
+               }
+
+               this.moveRowActual(from, to, after);
+
+               this.regenerateRowNumbers();
+
+               this.table.options.rowMoved.call(this.table, from.getComponent());
+       };
+
+       RowManager.prototype.moveRowActual = function (from, to, after) {
+               var _this12 = this;
+
+               this._moveRowInArray(this.rows, from, to, after);
+
+               this._moveRowInArray(this.activeRows, from, to, after);
+
+               this.displayRowIterator(function (rows) {
+
+                       _this12._moveRowInArray(rows, from, to, after);
+               });
+
+               if (this.table.options.groupBy && this.table.modExists("groupRows")) {
+
+                       if (!after && to instanceof Group) {
+
+                               to = this.table.rowManager.prevDisplayRow(from) || to;
+                       }
+
+                       var toGroup = to.getGroup();
+
+                       var fromGroup = from.getGroup();
+
+                       if (toGroup === fromGroup) {
+
+                               this._moveRowInArray(toGroup.rows, from, to, after);
+                       } else {
+
+                               if (fromGroup) {
+
+                                       fromGroup.removeRow(from);
+                               }
+
+                               toGroup.insertRow(from, to, after);
+                       }
+               }
+       };
+
+       RowManager.prototype._moveRowInArray = function (rows, from, to, after) {
+
+               var fromIndex, toIndex, start, end;
+
+               if (from !== to) {
+
+                       fromIndex = rows.indexOf(from);
+
+                       if (fromIndex > -1) {
+
+                               rows.splice(fromIndex, 1);
+
+                               toIndex = rows.indexOf(to);
+
+                               if (toIndex > -1) {
+
+                                       if (after) {
+
+                                               rows.splice(toIndex + 1, 0, from);
+                                       } else {
+
+                                               rows.splice(toIndex, 0, from);
+                                       }
+                               } else {
+
+                                       rows.splice(fromIndex, 0, from);
+                               }
+                       }
+
+                       //restyle rows
+
+                       if (rows === this.getDisplayRows()) {
+
+                               start = fromIndex < toIndex ? fromIndex : toIndex;
+
+                               end = toIndex > fromIndex ? toIndex : fromIndex + 1;
+
+                               for (var _i4 = start; _i4 <= end; _i4++) {
+
+                                       if (rows[_i4]) {
+
+                                               this.styleRow(rows[_i4], _i4);
+                                       }
+                               }
+                       }
+               }
+       };
+
+       RowManager.prototype.clearData = function () {
+
+               this.setData([]);
+       };
+
+       RowManager.prototype.getRowIndex = function (row) {
+
+               return this.findRowIndex(row, this.rows);
+       };
+
+       RowManager.prototype.getDisplayRowIndex = function (row) {
+
+               var index = this.getDisplayRows().indexOf(row);
+
+               return index > -1 ? index : false;
+       };
+
+       RowManager.prototype.nextDisplayRow = function (row, rowOnly) {
+
+               var index = this.getDisplayRowIndex(row),
+                   nextRow = false;
+
+               if (index !== false && index < this.displayRowsCount - 1) {
+
+                       nextRow = this.getDisplayRows()[index + 1];
+               }
+
+               if (nextRow && (!(nextRow instanceof Row) || nextRow.type != "row")) {
+
+                       return this.nextDisplayRow(nextRow, rowOnly);
+               }
+
+               return nextRow;
+       };
+
+       RowManager.prototype.prevDisplayRow = function (row, rowOnly) {
+
+               var index = this.getDisplayRowIndex(row),
+                   prevRow = false;
+
+               if (index) {
+
+                       prevRow = this.getDisplayRows()[index - 1];
+               }
+
+               if (rowOnly && prevRow && (!(prevRow instanceof Row) || prevRow.type != "row")) {
+
+                       return this.prevDisplayRow(prevRow, rowOnly);
+               }
+
+               return prevRow;
+       };
+
+       RowManager.prototype.findRowIndex = function (row, list) {
+
+               var rowIndex;
+
+               row = this.findRow(row);
+
+               if (row) {
+
+                       rowIndex = list.indexOf(row);
+
+                       if (rowIndex > -1) {
+
+                               return rowIndex;
+                       }
+               }
+
+               return false;
+       };
+
+       RowManager.prototype.getData = function (active, transform) {
+
+               var output = [],
+                   rows = this.getRows(active);
+
+               rows.forEach(function (row) {
+
+                       if (row.type == "row") {
+
+                               output.push(row.getData(transform || "data"));
+                       }
+               });
+
+               return output;
+       };
+
+       RowManager.prototype.getComponents = function (active) {
+
+               var output = [],
+                   rows = this.getRows(active);
+
+               rows.forEach(function (row) {
+
+                       output.push(row.getComponent());
+               });
+
+               return output;
+       };
+
+       RowManager.prototype.getDataCount = function (active) {
+
+               var rows = this.getRows(active);
+
+               return rows.length;
+       };
+
+       RowManager.prototype._genRemoteRequest = function () {
+               var _this13 = this;
+
+               var table = this.table,
+                   options = table.options,
+                   params = {};
+
+               if (table.modExists("page")) {
+
+                       //set sort data if defined
+
+                       if (options.ajaxSorting) {
+
+                               var sorters = this.table.modules.sort.getSort();
+
+                               sorters.forEach(function (item) {
+
+                                       delete item.column;
+                               });
+
+                               params[this.table.modules.page.paginationDataSentNames.sorters] = sorters;
+                       }
+
+                       //set filter data if defined
+
+                       if (options.ajaxFiltering) {
+
+                               var filters = this.table.modules.filter.getFilters(true, true);
+
+                               params[this.table.modules.page.paginationDataSentNames.filters] = filters;
+                       }
+
+                       this.table.modules.ajax.setParams(params, true);
+               }
+
+               table.modules.ajax.sendRequest().then(function (data) {
+
+                       _this13._setDataActual(data, true);
+               }).catch(function (e) {});
+       };
+
+       //choose the path to refresh data after a filter update
+
+       RowManager.prototype.filterRefresh = function () {
+
+               var table = this.table,
+                   options = table.options,
+                   left = this.scrollLeft;
+
+               if (options.ajaxFiltering) {
+
+                       if (options.pagination == "remote" && table.modExists("page")) {
+
+                               table.modules.page.reset(true);
+
+                               table.modules.page.setPage(1).then(function () {}).catch(function () {});
+                       } else if (options.ajaxProgressiveLoad) {
+
+                               table.modules.ajax.loadData().then(function () {}).catch(function () {});
+                       } else {
+
+                               //assume data is url, make ajax call to url to get data
+
+                               this._genRemoteRequest();
+                       }
+               } else {
+
+                       this.refreshActiveData("filter");
+               }
+
+               this.scrollHorizontal(left);
+       };
+
+       //choose the path to refresh data after a sorter update
+
+       RowManager.prototype.sorterRefresh = function (loadOrignalData) {
+
+               var table = this.table,
+                   options = this.table.options,
+                   left = this.scrollLeft;
+
+               if (options.ajaxSorting) {
+
+                       if ((options.pagination == "remote" || options.progressiveLoad) && table.modExists("page")) {
+
+                               table.modules.page.reset(true);
+
+                               table.modules.page.setPage(1).then(function () {}).catch(function () {});
+                       } else if (options.ajaxProgressiveLoad) {
+
+                               table.modules.ajax.loadData().then(function () {}).catch(function () {});
+                       } else {
+
+                               //assume data is url, make ajax call to url to get data
+
+                               this._genRemoteRequest();
+                       }
+               } else {
+
+                       this.refreshActiveData(loadOrignalData ? "filter" : "sort");
+               }
+
+               this.scrollHorizontal(left);
+       };
+
+       RowManager.prototype.scrollHorizontal = function (left) {
+
+               this.scrollLeft = left;
+
+               this.element.scrollLeft = left;
+
+               if (this.table.options.groupBy) {
+
+                       this.table.modules.groupRows.scrollHeaders(left);
+               }
+
+               if (this.table.modExists("columnCalcs")) {
+
+                       this.table.modules.columnCalcs.scrollHorizontal(left);
+               }
+       };
+
+       //set active data set
+
+       RowManager.prototype.refreshActiveData = function (stage, skipStage, renderInPosition) {
+
+               var self = this,
+                   table = this.table,
+                   cascadeOrder = ["all", "filter", "sort", "display", "freeze", "group", "tree", "page"],
+                   displayIndex;
+
+               if (this.redrawBlock) {
+
+                       if (!this.redrawBlockRestoreConfig || cascadeOrder.indexOf(stage) < cascadeOrder.indexOf(this.redrawBlockRestoreConfig.stage)) {
+
+                               this.redrawBlockRestoreConfig = {
+
+                                       stage: stage,
+
+                                       skipStage: skipStage,
+
+                                       renderInPosition: renderInPosition
+
+                               };
+                       }
+
+                       return;
+               } else {
+
+                       if (self.table.modExists("edit")) {
+
+                               self.table.modules.edit.cancelEdit();
+                       }
+
+                       if (!stage) {
+
+                               stage = "all";
+                       }
+
+                       if (table.options.selectable && !table.options.selectablePersistence && table.modExists("selectRow")) {
+
+                               table.modules.selectRow.deselectRows();
+                       }
+
+                       //cascade through data refresh stages
+
+                       switch (stage) {
+
+                               case "all":
+
+                               case "filter":
+
+                                       if (!skipStage) {
+
+                                               if (table.modExists("filter")) {
+
+                                                       self.setActiveRows(table.modules.filter.filter(self.rows));
+                                               } else {
+
+                                                       self.setActiveRows(self.rows.slice(0));
+                                               }
+                                       } else {
+
+                                               skipStage = false;
+                                       }
+
+                               case "sort":
+
+                                       if (!skipStage) {
+
+                                               if (table.modExists("sort")) {
+
+                                                       table.modules.sort.sort(this.activeRows);
+                                               }
+                                       } else {
+
+                                               skipStage = false;
+                                       }
+
+                                       //regenerate row numbers for row number formatter if in use
+
+                                       this.regenerateRowNumbers();
+
+                               //generic stage to allow for pipeline trigger after the data manipulation stage
+
+                               case "display":
+
+                                       this.resetDisplayRows();
+
+                               case "freeze":
+
+                                       if (!skipStage) {
+
+                                               if (this.table.modExists("frozenRows")) {
+
+                                                       if (table.modules.frozenRows.isFrozen()) {
+
+                                                               if (!table.modules.frozenRows.getDisplayIndex()) {
+
+                                                                       table.modules.frozenRows.setDisplayIndex(this.getNextDisplayIndex());
+                                                               }
+
+                                                               displayIndex = table.modules.frozenRows.getDisplayIndex();
+
+                                                               displayIndex = self.setDisplayRows(table.modules.frozenRows.getRows(this.getDisplayRows(displayIndex - 1)), displayIndex);
+
+                                                               if (displayIndex !== true) {
+
+                                                                       table.modules.frozenRows.setDisplayIndex(displayIndex);
+                                                               }
+                                                       }
+                                               }
+                                       } else {
+
+                                               skipStage = false;
+                                       }
+
+                               case "group":
+
+                                       if (!skipStage) {
+
+                                               if (table.options.groupBy && table.modExists("groupRows")) {
+
+                                                       if (!table.modules.groupRows.getDisplayIndex()) {
+
+                                                               table.modules.groupRows.setDisplayIndex(this.getNextDisplayIndex());
+                                                       }
+
+                                                       displayIndex = table.modules.groupRows.getDisplayIndex();
+
+                                                       displayIndex = self.setDisplayRows(table.modules.groupRows.getRows(this.getDisplayRows(displayIndex - 1)), displayIndex);
+
+                                                       if (displayIndex !== true) {
+
+                                                               table.modules.groupRows.setDisplayIndex(displayIndex);
+                                                       }
+                                               }
+                                       } else {
+
+                                               skipStage = false;
+                                       }
+
+                               case "tree":
+
+                                       if (!skipStage) {
+
+                                               if (table.options.dataTree && table.modExists("dataTree")) {
+
+                                                       if (!table.modules.dataTree.getDisplayIndex()) {
+
+                                                               table.modules.dataTree.setDisplayIndex(this.getNextDisplayIndex());
+                                                       }
+
+                                                       displayIndex = table.modules.dataTree.getDisplayIndex();
+
+                                                       displayIndex = self.setDisplayRows(table.modules.dataTree.getRows(this.getDisplayRows(displayIndex - 1)), displayIndex);
+
+                                                       if (displayIndex !== true) {
+
+                                                               table.modules.dataTree.setDisplayIndex(displayIndex);
+                                                       }
+                                               }
+                                       } else {
+
+                                               skipStage = false;
+                                       }
+
+                                       if (table.options.pagination && table.modExists("page") && !renderInPosition) {
+
+                                               if (table.modules.page.getMode() == "local") {
+
+                                                       table.modules.page.reset();
+                                               }
+                                       }
+
+                               case "page":
+
+                                       if (!skipStage) {
+
+                                               if (table.options.pagination && table.modExists("page")) {
+
+                                                       if (!table.modules.page.getDisplayIndex()) {
+
+                                                               table.modules.page.setDisplayIndex(this.getNextDisplayIndex());
+                                                       }
+
+                                                       displayIndex = table.modules.page.getDisplayIndex();
+
+                                                       if (table.modules.page.getMode() == "local") {
+
+                                                               table.modules.page.setMaxRows(this.getDisplayRows(displayIndex - 1).length);
+                                                       }
+
+                                                       displayIndex = self.setDisplayRows(table.modules.page.getRows(this.getDisplayRows(displayIndex - 1)), displayIndex);
+
+                                                       if (displayIndex !== true) {
+
+                                                               table.modules.page.setDisplayIndex(displayIndex);
+                                                       }
+                                               }
+                                       } else {
+
+                                               skipStage = false;
+                                       }
+
+                       }
+
+                       if (Tabulator.prototype.helpers.elVisible(self.element)) {
+
+                               if (renderInPosition) {
+
+                                       self.reRenderInPosition();
+                               } else {
+
+                                       self.renderTable();
+
+                                       if (table.options.layoutColumnsOnNewData) {
+
+                                               self.table.columnManager.redraw(true);
+                                       }
+                               }
+                       }
+
+                       if (table.modExists("columnCalcs")) {
+
+                               table.modules.columnCalcs.recalc(this.activeRows);
+                       }
+               }
+       };
+
+       //regenerate row numbers for row number formatter if in use
+
+       RowManager.prototype.regenerateRowNumbers = function () {
+               var _this14 = this;
+
+               if (this.rowNumColumn) {
+
+                       this.activeRows.forEach(function (row) {
+
+                               var cell = row.getCell(_this14.rowNumColumn);
+
+                               if (cell) {
+
+                                       cell._generateContents();
+                               }
+                       });
+               }
+       };
+
+       RowManager.prototype.setActiveRows = function (activeRows) {
+
+               this.activeRows = activeRows;
+
+               this.activeRowsCount = this.activeRows.length;
+       };
+
+       //reset display rows array
+
+       RowManager.prototype.resetDisplayRows = function () {
+
+               this.displayRows = [];
+
+               this.displayRows.push(this.activeRows.slice(0));
+
+               this.displayRowsCount = this.displayRows[0].length;
+
+               if (this.table.modExists("frozenRows")) {
+
+                       this.table.modules.frozenRows.setDisplayIndex(0);
+               }
+
+               if (this.table.options.groupBy && this.table.modExists("groupRows")) {
+
+                       this.table.modules.groupRows.setDisplayIndex(0);
+               }
+
+               if (this.table.options.pagination && this.table.modExists("page")) {
+
+                       this.table.modules.page.setDisplayIndex(0);
+               }
+       };
+
+       RowManager.prototype.getNextDisplayIndex = function () {
+
+               return this.displayRows.length;
+       };
+
+       //set display row pipeline data
+
+       RowManager.prototype.setDisplayRows = function (displayRows, index) {
+
+               var output = true;
+
+               if (index && typeof this.displayRows[index] != "undefined") {
+
+                       this.displayRows[index] = displayRows;
+
+                       output = true;
+               } else {
+
+                       this.displayRows.push(displayRows);
+
+                       output = index = this.displayRows.length - 1;
+               }
+
+               if (index == this.displayRows.length - 1) {
+
+                       this.displayRowsCount = this.displayRows[this.displayRows.length - 1].length;
+               }
+
+               return output;
+       };
+
+       RowManager.prototype.getDisplayRows = function (index) {
+
+               if (typeof index == "undefined") {
+
+                       return this.displayRows.length ? this.displayRows[this.displayRows.length - 1] : [];
+               } else {
+
+                       return this.displayRows[index] || [];
+               }
+       };
+
+       RowManager.prototype.getVisibleRows = function (viewable) {
+
+               var topEdge = this.element.scrollTop,
+                   bottomEdge = this.element.clientHeight + topEdge,
+                   topFound = false,
+                   topRow = 0,
+                   bottomRow = 0,
+                   rows = this.getDisplayRows();
+
+               if (viewable) {
+
+                       this.getDisplayRows();
+
+                       for (var i = this.vDomTop; i <= this.vDomBottom; i++) {
+
+                               if (rows[i]) {
+
+                                       if (!topFound) {
+
+                                               if (topEdge - rows[i].getElement().offsetTop >= 0) {
+
+                                                       topRow = i;
+                                               } else {
+
+                                                       topFound = true;
+
+                                                       if (bottomEdge - rows[i].getElement().offsetTop >= 0) {
+
+                                                               bottomRow = i;
+                                                       } else {
+
+                                                               break;
+                                                       }
+                                               }
+                                       } else {
+
+                                               if (bottomEdge - rows[i].getElement().offsetTop >= 0) {
+
+                                                       bottomRow = i;
+                                               } else {
+
+                                                       break;
+                                               }
+                                       }
+                               }
+                       }
+               } else {
+
+                       topRow = this.vDomTop;
+
+                       bottomRow = this.vDomBottom;
+               }
+
+               return rows.slice(topRow, bottomRow + 1);
+       };
+
+       //repeat action accross display rows
+
+       RowManager.prototype.displayRowIterator = function (callback) {
+
+               this.displayRows.forEach(callback);
+
+               this.displayRowsCount = this.displayRows[this.displayRows.length - 1].length;
+       };
+
+       //return only actual rows (not group headers etc)
+
+       RowManager.prototype.getRows = function (active) {
+
+               var rows;
+
+               switch (active) {
+
+                       case "active":
+
+                               rows = this.activeRows;
+
+                               break;
+
+                       case "display":
+
+                               rows = this.table.rowManager.getDisplayRows();
+
+                               break;
+
+                       case "visible":
+
+                               rows = this.getVisibleRows(true);
+
+                               break;
+
+                       default:
+
+                               rows = this.rows;
+
+               }
+
+               return rows;
+       };
+
+       ///////////////// Table Rendering /////////////////
+
+
+       //trigger rerender of table in current position
+
+       RowManager.prototype.reRenderInPosition = function (callback) {
+
+               if (this.getRenderMode() == "virtual") {
+
+                       if (this.redrawBlock) {
+
+                               if (callback) {
+
+                                       callback();
+                               } else {
+
+                                       this.redrawBlockRederInPosition = true;
+                               }
+                       } else {
+
+                               var scrollTop = this.element.scrollTop;
+
+                               var topRow = false;
+
+                               var topOffset = false;
+
+                               var left = this.scrollLeft;
+
+                               var rows = this.getDisplayRows();
+
+                               for (var i = this.vDomTop; i <= this.vDomBottom; i++) {
+
+                                       if (rows[i]) {
+
+                                               var diff = scrollTop - rows[i].getElement().offsetTop;
+
+                                               if (topOffset === false || Math.abs(diff) < topOffset) {
+
+                                                       topOffset = diff;
+
+                                                       topRow = i;
+                                               } else {
+
+                                                       break;
+                                               }
+                                       }
+                               }
+
+                               if (callback) {
+
+                                       callback();
+                               }
+
+                               this._virtualRenderFill(topRow === false ? this.displayRowsCount - 1 : topRow, true, topOffset || 0);
+
+                               this.scrollHorizontal(left);
+                       }
+               } else {
+
+                       this.renderTable();
+
+                       if (callback) {
+
+                               callback();
+                       }
+               }
+       };
+
+       RowManager.prototype.setRenderMode = function () {
+
+               if (this.table.options.virtualDom) {
+
+                       this.renderMode = "virtual";
+
+                       if (this.table.element.clientHeight || this.table.options.height) {
+
+                               this.fixedHeight = true;
+                       } else {
+
+                               this.fixedHeight = false;
+                       }
+               } else {
+
+                       this.renderMode = "classic";
+               }
+       };
+
+       RowManager.prototype.getRenderMode = function () {
+
+               return this.renderMode;
+       };
+
+       RowManager.prototype.renderTable = function () {
+
+               this.table.options.renderStarted.call(this.table);
+
+               this.element.scrollTop = 0;
+
+               switch (this.renderMode) {
+
+                       case "classic":
+
+                               this._simpleRender();
+
+                               break;
+
+                       case "virtual":
+
+                               this._virtualRenderFill();
+
+                               break;
+
+               }
+
+               if (this.firstRender) {
+
+                       if (this.displayRowsCount) {
+
+                               this.firstRender = false;
+
+                               this.table.modules.layout.layout();
+                       } else {
+
+                               this.renderEmptyScroll();
+                       }
+               }
+
+               if (this.table.modExists("frozenColumns")) {
+
+                       this.table.modules.frozenColumns.layout();
+               }
+
+               if (!this.displayRowsCount) {
+
+                       if (this.table.options.placeholder) {
+
+                               this.table.options.placeholder.setAttribute("tabulator-render-mode", this.renderMode);
+
+                               this.getElement().appendChild(this.table.options.placeholder);
+
+                               this.table.options.placeholder.style.width = this.table.columnManager.getWidth() + "px";
+                       }
+               }
+
+               this.table.options.renderComplete.call(this.table);
+       };
+
+       //simple render on heightless table
+
+       RowManager.prototype._simpleRender = function () {
+
+               this._clearVirtualDom();
+
+               if (this.displayRowsCount) {
+
+                       this.checkClassicModeGroupHeaderWidth();
+               } else {
+
+                       this.renderEmptyScroll();
+               }
+       };
+
+       RowManager.prototype.checkClassicModeGroupHeaderWidth = function () {
+
+               var self = this,
+                   element = this.tableElement,
+                   onlyGroupHeaders = true;
+
+               self.getDisplayRows().forEach(function (row, index) {
+
+                       self.styleRow(row, index);
+
+                       element.appendChild(row.getElement());
+
+                       row.initialize(true);
+
+                       if (row.type !== "group") {
+
+                               onlyGroupHeaders = false;
+                       }
+               });
+
+               if (onlyGroupHeaders) {
+
+                       element.style.minWidth = self.table.columnManager.getWidth() + "px";
+               } else {
+
+                       element.style.minWidth = "";
+               }
+       };
+
+       //show scrollbars on empty table div
+
+       RowManager.prototype.renderEmptyScroll = function () {
+
+               if (this.table.options.placeholder) {
+
+                       this.tableElement.style.display = "none";
+               } else {
+
+                       this.tableElement.style.minWidth = this.table.columnManager.getWidth() + "px";
+
+                       this.tableElement.style.minHeight = "1px";
+
+                       this.tableElement.style.visibility = "hidden";
+               }
+       };
+
+       RowManager.prototype._clearVirtualDom = function () {
+
+               var element = this.tableElement;
+
+               if (this.table.options.placeholder && this.table.options.placeholder.parentNode) {
+
+                       this.table.options.placeholder.parentNode.removeChild(this.table.options.placeholder);
+               }
+
+               // element.children.detach();
+
+               while (element.firstChild) {
+                       element.removeChild(element.firstChild);
+               }element.style.paddingTop = "";
+
+               element.style.paddingBottom = "";
+
+               element.style.minWidth = "";
+
+               element.style.minHeight = "";
+
+               element.style.display = "";
+
+               element.style.visibility = "";
+
+               this.scrollTop = 0;
+
+               this.scrollLeft = 0;
+
+               this.vDomTop = 0;
+
+               this.vDomBottom = 0;
+
+               this.vDomTopPad = 0;
+
+               this.vDomBottomPad = 0;
+       };
+
+       RowManager.prototype.styleRow = function (row, index) {
+
+               var rowEl = row.getElement();
+
+               if (index % 2) {
+
+                       rowEl.classList.add("tabulator-row-even");
+
+                       rowEl.classList.remove("tabulator-row-odd");
+               } else {
+
+                       rowEl.classList.add("tabulator-row-odd");
+
+                       rowEl.classList.remove("tabulator-row-even");
+               }
+       };
+
+       //full virtual render
+
+       RowManager.prototype._virtualRenderFill = function (position, forceMove, offset) {
+
+               var self = this,
+                   element = self.tableElement,
+                   holder = self.element,
+                   topPad = 0,
+                   rowsHeight = 0,
+                   topPadHeight = 0,
+                   i = 0,
+                   onlyGroupHeaders = true,
+                   rows = self.getDisplayRows();
+
+               position = position || 0;
+
+               offset = offset || 0;
+
+               if (!position) {
+
+                       self._clearVirtualDom();
+               } else {
+
+                       while (element.firstChild) {
+                               element.removeChild(element.firstChild);
+                       } //check if position is too close to bottom of table
+
+                       var heightOccupied = (self.displayRowsCount - position + 1) * self.vDomRowHeight;
+
+                       if (heightOccupied < self.height) {
+
+                               position -= Math.ceil((self.height - heightOccupied) / self.vDomRowHeight);
+
+                               if (position < 0) {
+
+                                       position = 0;
+                               }
+                       }
+
+                       //calculate initial pad
+
+                       topPad = Math.min(Math.max(Math.floor(self.vDomWindowBuffer / self.vDomRowHeight), self.vDomWindowMinMarginRows), position);
+
+                       position -= topPad;
+               }
+
+               if (self.displayRowsCount && Tabulator.prototype.helpers.elVisible(self.element)) {
+
+                       self.vDomTop = position;
+
+                       self.vDomBottom = position - 1;
+
+                       while ((rowsHeight <= self.height + self.vDomWindowBuffer || i < self.vDomWindowMinTotalRows) && self.vDomBottom < self.displayRowsCount - 1) {
+
+                               var index = self.vDomBottom + 1,
+                                   row = rows[index],
+                                   rowHeight = 0;
+
+                               self.styleRow(row, index);
+
+                               element.appendChild(row.getElement());
+
+                               if (!row.initialized) {
+
+                                       row.initialize(true);
+                               } else {
+
+                                       if (!row.heightInitialized) {
+
+                                               row.normalizeHeight(true);
+                                       }
+                               }
+
+                               rowHeight = row.getHeight();
+
+                               if (i < topPad) {
+
+                                       topPadHeight += rowHeight;
+                               } else {
+
+                                       rowsHeight += rowHeight;
+                               }
+
+                               if (rowHeight > this.vDomWindowBuffer) {
+
+                                       this.vDomWindowBuffer = rowHeight * 2;
+                               }
+
+                               if (row.type !== "group") {
+
+                                       onlyGroupHeaders = false;
+                               }
+
+                               self.vDomBottom++;
+
+                               i++;
+                       }
+
+                       if (!position) {
+
+                               this.vDomTopPad = 0;
+
+                               //adjust rowheight to match average of rendered elements
+
+                               self.vDomRowHeight = Math.floor((rowsHeight + topPadHeight) / i);
+
+                               self.vDomBottomPad = self.vDomRowHeight * (self.displayRowsCount - self.vDomBottom - 1);
+
+                               self.vDomScrollHeight = topPadHeight + rowsHeight + self.vDomBottomPad - self.height;
+                       } else {
+
+                               self.vDomTopPad = !forceMove ? self.scrollTop - topPadHeight : self.vDomRowHeight * this.vDomTop + offset;
+
+                               self.vDomBottomPad = self.vDomBottom == self.displayRowsCount - 1 ? 0 : Math.max(self.vDomScrollHeight - self.vDomTopPad - rowsHeight - topPadHeight, 0);
+                       }
+
+                       element.style.paddingTop = self.vDomTopPad + "px";
+
+                       element.style.paddingBottom = self.vDomBottomPad + "px";
+
+                       if (forceMove) {
+
+                               this.scrollTop = self.vDomTopPad + topPadHeight + offset - (this.element.scrollWidth > this.element.clientWidth ? this.element.offsetHeight - this.element.clientHeight : 0);
+                       }
+
+                       this.scrollTop = Math.min(this.scrollTop, this.element.scrollHeight - this.height);
+
+                       //adjust for horizontal scrollbar if present (and not at top of table)
+
+                       if (this.element.scrollWidth > this.element.offsetWidth && forceMove) {
+
+                               this.scrollTop += this.element.offsetHeight - this.element.clientHeight;
+                       }
+
+                       this.vDomScrollPosTop = this.scrollTop;
+
+                       this.vDomScrollPosBottom = this.scrollTop;
+
+                       holder.scrollTop = this.scrollTop;
+
+                       element.style.minWidth = onlyGroupHeaders ? self.table.columnManager.getWidth() + "px" : "";
+
+                       if (self.table.options.groupBy) {
+
+                               if (self.table.modules.layout.getMode() != "fitDataFill" && self.displayRowsCount == self.table.modules.groupRows.countGroups()) {
+
+                                       self.tableElement.style.minWidth = self.table.columnManager.getWidth();
+                               }
+                       }
+               } else {
+
+                       this.renderEmptyScroll();
+               }
+
+               if (!this.fixedHeight) {
+
+                       this.adjustTableSize();
+               }
+       };
+
+       //handle vertical scrolling
+
+       RowManager.prototype.scrollVertical = function (dir) {
+
+               var topDiff = this.scrollTop - this.vDomScrollPosTop;
+
+               var bottomDiff = this.scrollTop - this.vDomScrollPosBottom;
+
+               var margin = this.vDomWindowBuffer * 2;
+
+               if (-topDiff > margin || bottomDiff > margin) {
+
+                       //if big scroll redraw table;
+
+                       var left = this.scrollLeft;
+
+                       this._virtualRenderFill(Math.floor(this.element.scrollTop / this.element.scrollHeight * this.displayRowsCount));
+
+                       this.scrollHorizontal(left);
+               } else {
+
+                       if (dir) {
+
+                               //scrolling up
+
+                               if (topDiff < 0) {
+
+                                       this._addTopRow(-topDiff);
+                               }
+
+                               if (bottomDiff < 0) {
+
+                                       //hide bottom row if needed
+
+                                       if (this.vDomScrollHeight - this.scrollTop > this.vDomWindowBuffer) {
+
+                                               this._removeBottomRow(-bottomDiff);
+                                       } else {
+
+                                               this.vDomScrollPosBottom = this.scrollTop;
+                                       }
+                               }
+                       } else {
+
+                               //scrolling down
+
+                               if (topDiff >= 0) {
+
+                                       //hide top row if needed
+
+                                       if (this.scrollTop > this.vDomWindowBuffer) {
+
+                                               this._removeTopRow(topDiff);
+                                       } else {
+
+                                               this.vDomScrollPosTop = this.scrollTop;
+                                       }
+                               }
+
+                               if (bottomDiff >= 0) {
+
+                                       this._addBottomRow(bottomDiff);
+                               }
+                       }
+               }
+       };
+
+       RowManager.prototype._addTopRow = function (topDiff) {
+               var i = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
+
+
+               var table = this.tableElement,
+                   rows = this.getDisplayRows();
+
+               if (this.vDomTop) {
+
+                       var index = this.vDomTop - 1,
+                           topRow = rows[index],
+                           topRowHeight = topRow.getHeight() || this.vDomRowHeight;
+
+                       //hide top row if needed
+
+                       if (topDiff >= topRowHeight) {
+
+                               this.styleRow(topRow, index);
+
+                               table.insertBefore(topRow.getElement(), table.firstChild);
+
+                               if (!topRow.initialized || !topRow.heightInitialized) {
+
+                                       this.vDomTopNewRows.push(topRow);
+
+                                       if (!topRow.heightInitialized) {
+
+                                               topRow.clearCellHeight();
+                                       }
+                               }
+
+                               topRow.initialize();
+
+                               this.vDomTopPad -= topRowHeight;
+
+                               if (this.vDomTopPad < 0) {
+
+                                       this.vDomTopPad = index * this.vDomRowHeight;
+                               }
+
+                               if (!index) {
+
+                                       this.vDomTopPad = 0;
+                               }
+
+                               table.style.paddingTop = this.vDomTopPad + "px";
+
+                               this.vDomScrollPosTop -= topRowHeight;
+
+                               this.vDomTop--;
+                       }
+
+                       topDiff = -(this.scrollTop - this.vDomScrollPosTop);
+
+                       if (topRow.getHeight() > this.vDomWindowBuffer) {
+
+                               this.vDomWindowBuffer = topRow.getHeight() * 2;
+                       }
+
+                       if (i < this.vDomMaxRenderChain && this.vDomTop && topDiff >= (rows[this.vDomTop - 1].getHeight() || this.vDomRowHeight)) {
+
+                               this._addTopRow(topDiff, i + 1);
+                       } else {
+
+                               this._quickNormalizeRowHeight(this.vDomTopNewRows);
+                       }
+               }
+       };
+
+       RowManager.prototype._removeTopRow = function (topDiff) {
+
+               var table = this.tableElement,
+                   topRow = this.getDisplayRows()[this.vDomTop],
+                   topRowHeight = topRow.getHeight() || this.vDomRowHeight;
+
+               if (topDiff >= topRowHeight) {
+
+                       var rowEl = topRow.getElement();
+
+                       rowEl.parentNode.removeChild(rowEl);
+
+                       this.vDomTopPad += topRowHeight;
+
+                       table.style.paddingTop = this.vDomTopPad + "px";
+
+                       this.vDomScrollPosTop += this.vDomTop ? topRowHeight : topRowHeight + this.vDomWindowBuffer;
+
+                       this.vDomTop++;
+
+                       topDiff = this.scrollTop - this.vDomScrollPosTop;
+
+                       this._removeTopRow(topDiff);
+               }
+       };
+
+       RowManager.prototype._addBottomRow = function (bottomDiff) {
+               var i = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
+
+
+               var table = this.tableElement,
+                   rows = this.getDisplayRows();
+
+               if (this.vDomBottom < this.displayRowsCount - 1) {
+
+                       var index = this.vDomBottom + 1,
+                           bottomRow = rows[index],
+                           bottomRowHeight = bottomRow.getHeight() || this.vDomRowHeight;
+
+                       //hide bottom row if needed
+
+                       if (bottomDiff >= bottomRowHeight) {
+
+                               this.styleRow(bottomRow, index);
+
+                               table.appendChild(bottomRow.getElement());
+
+                               if (!bottomRow.initialized || !bottomRow.heightInitialized) {
+
+                                       this.vDomBottomNewRows.push(bottomRow);
+
+                                       if (!bottomRow.heightInitialized) {
+
+                                               bottomRow.clearCellHeight();
+                                       }
+                               }
+
+                               bottomRow.initialize();
+
+                               this.vDomBottomPad -= bottomRowHeight;
+
+                               if (this.vDomBottomPad < 0 || index == this.displayRowsCount - 1) {
+
+                                       this.vDomBottomPad = 0;
+                               }
+
+                               table.style.paddingBottom = this.vDomBottomPad + "px";
+
+                               this.vDomScrollPosBottom += bottomRowHeight;
+
+                               this.vDomBottom++;
+                       }
+
+                       bottomDiff = this.scrollTop - this.vDomScrollPosBottom;
+
+                       if (bottomRow.getHeight() > this.vDomWindowBuffer) {
+
+                               this.vDomWindowBuffer = bottomRow.getHeight() * 2;
+                       }
+
+                       if (i < this.vDomMaxRenderChain && this.vDomBottom < this.displayRowsCount - 1 && bottomDiff >= (rows[this.vDomBottom + 1].getHeight() || this.vDomRowHeight)) {
+
+                               this._addBottomRow(bottomDiff, i + 1);
+                       } else {
+
+                               this._quickNormalizeRowHeight(this.vDomBottomNewRows);
+                       }
+               }
+       };
+
+       RowManager.prototype._removeBottomRow = function (bottomDiff) {
+
+               var table = this.tableElement,
+                   bottomRow = this.getDisplayRows()[this.vDomBottom],
+                   bottomRowHeight = bottomRow.getHeight() || this.vDomRowHeight;
+
+               if (bottomDiff >= bottomRowHeight) {
+
+                       var rowEl = bottomRow.getElement();
+
+                       if (rowEl.parentNode) {
+
+                               rowEl.parentNode.removeChild(rowEl);
+                       }
+
+                       this.vDomBottomPad += bottomRowHeight;
+
+                       if (this.vDomBottomPad < 0) {
+
+                               this.vDomBottomPad = 0;
+                       }
+
+                       table.style.paddingBottom = this.vDomBottomPad + "px";
+
+                       this.vDomScrollPosBottom -= bottomRowHeight;
+
+                       this.vDomBottom--;
+
+                       bottomDiff = -(this.scrollTop - this.vDomScrollPosBottom);
+
+                       this._removeBottomRow(bottomDiff);
+               }
+       };
+
+       RowManager.prototype._quickNormalizeRowHeight = function (rows) {
+
+               rows.forEach(function (row) {
+
+                       row.calcHeight();
+               });
+
+               rows.forEach(function (row) {
+
+                       row.setCellHeight();
+               });
+
+               rows.length = 0;
+       };
+
+       //normalize height of active rows
+
+       RowManager.prototype.normalizeHeight = function () {
+
+               this.activeRows.forEach(function (row) {
+
+                       row.normalizeHeight();
+               });
+       };
+
+       //adjust the height of the table holder to fit in the Tabulator element
+
+       RowManager.prototype.adjustTableSize = function () {
+
+               var initialHeight = this.element.clientHeight,
+                   modExists;
+
+               if (this.renderMode === "virtual") {
+
+                       var otherHeight = this.columnManager.getElement().offsetHeight + (this.table.footerManager && !this.table.footerManager.external ? this.table.footerManager.getElement().offsetHeight : 0);
+
+                       if (this.fixedHeight) {
+
+                               this.element.style.minHeight = "calc(100% - " + otherHeight + "px)";
+
+                               this.element.style.height = "calc(100% - " + otherHeight + "px)";
+
+                               this.element.style.maxHeight = "calc(100% - " + otherHeight + "px)";
+                       } else {
+
+                               this.element.style.height = "";
+
+                               this.element.style.height = this.table.element.clientHeight - otherHeight + "px";
+
+                               this.element.scrollTop = this.scrollTop;
+                       }
+
+                       this.height = this.element.clientHeight;
+
+                       this.vDomWindowBuffer = this.table.options.virtualDomBuffer || this.height;
+
+                       //check if the table has changed size when dealing with variable height tables
+
+                       if (!this.fixedHeight && initialHeight != this.element.clientHeight) {
+
+                               modExists = this.table.modExists("resizeTable");
+
+                               if (modExists && !this.table.modules.resizeTable.autoResize || !modExists) {
+
+                                       this.redraw();
+                               }
+                       }
+               }
+       };
+
+       //renitialize all rows
+
+       RowManager.prototype.reinitialize = function () {
+
+               this.rows.forEach(function (row) {
+
+                       row.reinitialize();
+               });
+       };
+
+       //prevent table from being redrawn
+
+       RowManager.prototype.blockRedraw = function () {
+
+               this.redrawBlock = true;
+
+               this.redrawBlockRestoreConfig = false;
+       };
+
+       //restore table redrawing
+
+       RowManager.prototype.restoreRedraw = function () {
+
+               this.redrawBlock = false;
+
+               if (this.redrawBlockRestoreConfig) {
+
+                       this.refreshActiveData(this.redrawBlockRestoreConfig.stage, this.redrawBlockRestoreConfig.skipStage, this.redrawBlockRestoreConfig.renderInPosition);
+
+                       this.redrawBlockRestoreConfig = false;
+               } else {
+
+                       if (this.redrawBlockRederInPosition) {
+
+                               this.reRenderInPosition();
+                       }
+               }
+
+               this.redrawBlockRederInPosition = false;
+       };
+
+       //redraw table
+
+       RowManager.prototype.redraw = function (force) {
+
+               var pos = 0,
+                   left = this.scrollLeft;
+
+               this.adjustTableSize();
+
+               this.table.tableWidth = this.table.element.clientWidth;
+
+               if (!force) {
+
+                       if (this.renderMode == "classic") {
+
+                               if (this.table.options.groupBy) {
+
+                                       this.refreshActiveData("group", false, false);
+                               } else {
+
+                                       this._simpleRender();
+                               }
+                       } else {
+
+                               this.reRenderInPosition();
+
+                               this.scrollHorizontal(left);
+                       }
+
+                       if (!this.displayRowsCount) {
+
+                               if (this.table.options.placeholder) {
+
+                                       this.getElement().appendChild(this.table.options.placeholder);
+                               }
+                       }
+               } else {
+
+                       this.renderTable();
+               }
+       };
+
+       RowManager.prototype.resetScroll = function () {
+
+               this.element.scrollLeft = 0;
+
+               this.element.scrollTop = 0;
+
+               if (this.table.browser === "ie") {
+
+                       var event = document.createEvent("Event");
+
+                       event.initEvent("scroll", false, true);
+
+                       this.element.dispatchEvent(event);
+               } else {
+
+                       this.element.dispatchEvent(new Event('scroll'));
+               }
+       };
+
+       //public row object
+
+       var RowComponent = function RowComponent(row) {
+
+               this._row = row;
+       };
+
+       RowComponent.prototype.getData = function (transform) {
+
+               return this._row.getData(transform);
+       };
+
+       RowComponent.prototype.getElement = function () {
+
+               return this._row.getElement();
+       };
+
+       RowComponent.prototype.getCells = function () {
+
+               var cells = [];
+
+               this._row.getCells().forEach(function (cell) {
+
+                       cells.push(cell.getComponent());
+               });
+
+               return cells;
+       };
+
+       RowComponent.prototype.getCell = function (column) {
+
+               var cell = this._row.getCell(column);
+
+               return cell ? cell.getComponent() : false;
+       };
+
+       RowComponent.prototype.getIndex = function () {
+
+               return this._row.getData("data")[this._row.table.options.index];
+       };
+
+       RowComponent.prototype.getPosition = function (active) {
+
+               return this._row.table.rowManager.getRowPosition(this._row, active);
+       };
+
+       RowComponent.prototype.delete = function () {
+
+               return this._row.delete();
+       };
+
+       RowComponent.prototype.scrollTo = function () {
+
+               return this._row.table.rowManager.scrollToRow(this._row);
+       };
+
+       RowComponent.prototype.pageTo = function () {
+
+               if (this._row.table.modExists("page", true)) {
+
+                       return this._row.table.modules.page.setPageToRow(this._row);
+               }
+       };
+
+       RowComponent.prototype.move = function (to, after) {
+
+               this._row.moveToRow(to, after);
+       };
+
+       RowComponent.prototype.update = function (data) {
+
+               return this._row.updateData(data);
+       };
+
+       RowComponent.prototype.normalizeHeight = function () {
+
+               this._row.normalizeHeight(true);
+       };
+
+       RowComponent.prototype.select = function () {
+
+               this._row.table.modules.selectRow.selectRows(this._row);
+       };
+
+       RowComponent.prototype.deselect = function () {
+
+               this._row.table.modules.selectRow.deselectRows(this._row);
+       };
+
+       RowComponent.prototype.toggleSelect = function () {
+
+               this._row.table.modules.selectRow.toggleRow(this._row);
+       };
+
+       RowComponent.prototype.isSelected = function () {
+
+               return this._row.table.modules.selectRow.isRowSelected(this._row);
+       };
+
+       RowComponent.prototype._getSelf = function () {
+
+               return this._row;
+       };
+
+       RowComponent.prototype.validate = function () {
+
+               return this._row.validate();
+       };
+
+       RowComponent.prototype.freeze = function () {
+
+               if (this._row.table.modExists("frozenRows", true)) {
+
+                       this._row.table.modules.frozenRows.freezeRow(this._row);
+               }
+       };
+
+       RowComponent.prototype.unfreeze = function () {
+
+               if (this._row.table.modExists("frozenRows", true)) {
+
+                       this._row.table.modules.frozenRows.unfreezeRow(this._row);
+               }
+       };
+
+       RowComponent.prototype.isFrozen = function () {
+
+               if (this._row.table.modExists("frozenRows", true)) {
+
+                       var index = this._row.table.modules.frozenRows.rows.indexOf(this._row);
+
+                       return index > -1;
+               }
+
+               return false;
+       };
+
+       RowComponent.prototype.treeCollapse = function () {
+
+               if (this._row.table.modExists("dataTree", true)) {
+
+                       this._row.table.modules.dataTree.collapseRow(this._row);
+               }
+       };
+
+       RowComponent.prototype.treeExpand = function () {
+
+               if (this._row.table.modExists("dataTree", true)) {
+
+                       this._row.table.modules.dataTree.expandRow(this._row);
+               }
+       };
+
+       RowComponent.prototype.treeToggle = function () {
+
+               if (this._row.table.modExists("dataTree", true)) {
+
+                       this._row.table.modules.dataTree.toggleRow(this._row);
+               }
+       };
+
+       RowComponent.prototype.getTreeParent = function () {
+
+               if (this._row.table.modExists("dataTree", true)) {
+
+                       return this._row.table.modules.dataTree.getTreeParent(this._row);
+               }
+
+               return false;
+       };
+
+       RowComponent.prototype.getTreeChildren = function () {
+
+               if (this._row.table.modExists("dataTree", true)) {
+
+                       return this._row.table.modules.dataTree.getTreeChildren(this._row);
+               }
+
+               return false;
+       };
+
+       RowComponent.prototype.addTreeChild = function (data, pos, index) {
+
+               if (this._row.table.modExists("dataTree", true)) {
+
+                       return this._row.table.modules.dataTree.addTreeChildRow(this._row, data, pos, index);
+               }
+
+               return false;
+       };
+
+       RowComponent.prototype.reformat = function () {
+
+               return this._row.reinitialize();
+       };
+
+       RowComponent.prototype.getGroup = function () {
+
+               return this._row.getGroup().getComponent();
+       };
+
+       RowComponent.prototype.getTable = function () {
+
+               return this._row.table;
+       };
+
+       RowComponent.prototype.getNextRow = function () {
+
+               var row = this._row.nextRow();
+
+               return row ? row.getComponent() : row;
+       };
+
+       RowComponent.prototype.getPrevRow = function () {
+
+               var row = this._row.prevRow();
+
+               return row ? row.getComponent() : row;
+       };
+
+       var Row = function Row(data, parent) {
+               var type = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : "row";
+
+
+               this.table = parent.table;
+
+               this.parent = parent;
+
+               this.data = {};
+
+               this.type = type; //type of element
+
+               this.element = this.createElement();
+
+               this.modules = {}; //hold module variables;
+
+               this.cells = [];
+
+               this.height = 0; //hold element height
+
+               this.heightStyled = ""; //hold element height prestyled to improve render efficiency
+
+               this.manualHeight = false; //user has manually set row height
+
+               this.outerHeight = 0; //holde lements outer height
+
+               this.initialized = false; //element has been rendered
+
+               this.heightInitialized = false; //element has resized cells to fit
+
+
+               this.component = null;
+
+               this.setData(data);
+
+               this.generateElement();
+       };
+
+       Row.prototype.createElement = function () {
+
+               var el = document.createElement("div");
+
+               el.classList.add("tabulator-row");
+
+               el.setAttribute("role", "row");
+
+               return el;
+       };
+
+       Row.prototype.getElement = function () {
+
+               return this.element;
+       };
+
+       Row.prototype.detachElement = function () {
+
+               if (this.element && this.element.parentNode) {
+
+                       this.element.parentNode.removeChild(this.element);
+               }
+       };
+
+       Row.prototype.generateElement = function () {
+
+               var self = this,
+                   dblTap,
+                   tapHold,
+                   tap;
+
+               //set row selection characteristics
+
+               if (self.table.options.selectable !== false && self.table.modExists("selectRow")) {
+
+                       self.table.modules.selectRow.initializeRow(this);
+               }
+
+               //setup movable rows
+
+               if (self.table.options.movableRows !== false && self.table.modExists("moveRow")) {
+
+                       self.table.modules.moveRow.initializeRow(this);
+               }
+
+               //setup data tree
+
+               if (self.table.options.dataTree !== false && self.table.modExists("dataTree")) {
+
+                       self.table.modules.dataTree.initializeRow(this);
+               }
+
+               //setup column colapse container
+
+               if (self.table.options.responsiveLayout === "collapse" && self.table.modExists("responsiveLayout")) {
+
+                       self.table.modules.responsiveLayout.initializeRow(this);
+               }
+
+               //set column menu
+
+               if (self.table.options.rowContextMenu && this.table.modExists("menu")) {
+
+                       self.table.modules.menu.initializeRow(this);
+               }
+
+               //handle row click events
+
+               if (self.table.options.rowClick) {
+
+                       self.element.addEventListener("click", function (e) {
+
+                               self.table.options.rowClick(e, self.getComponent());
+                       });
+               }
+
+               if (self.table.options.rowDblClick) {
+
+                       self.element.addEventListener("dblclick", function (e) {
+
+                               self.table.options.rowDblClick(e, self.getComponent());
+                       });
+               }
+
+               if (self.table.options.rowContext) {
+
+                       self.element.addEventListener("contextmenu", function (e) {
+
+                               self.table.options.rowContext(e, self.getComponent());
+                       });
+               }
+
+               //handle mouse events
+
+               if (self.table.options.rowMouseEnter) {
+
+                       self.element.addEventListener("mouseenter", function (e) {
+
+                               self.table.options.rowMouseEnter(e, self.getComponent());
+                       });
+               }
+
+               if (self.table.options.rowMouseLeave) {
+
+                       self.element.addEventListener("mouseleave", function (e) {
+
+                               self.table.options.rowMouseLeave(e, self.getComponent());
+                       });
+               }
+
+               if (self.table.options.rowMouseOver) {
+
+                       self.element.addEventListener("mouseover", function (e) {
+
+                               self.table.options.rowMouseOver(e, self.getComponent());
+                       });
+               }
+
+               if (self.table.options.rowMouseOut) {
+
+                       self.element.addEventListener("mouseout", function (e) {
+
+                               self.table.options.rowMouseOut(e, self.getComponent());
+                       });
+               }
+
+               if (self.table.options.rowMouseMove) {
+
+                       self.element.addEventListener("mousemove", function (e) {
+
+                               self.table.options.rowMouseMove(e, self.getComponent());
+                       });
+               }
+
+               if (self.table.options.rowTap) {
+
+                       tap = false;
+
+                       self.element.addEventListener("touchstart", function (e) {
+
+                               tap = true;
+                       }, { passive: true });
+
+                       self.element.addEventListener("touchend", function (e) {
+
+                               if (tap) {
+
+                                       self.table.options.rowTap(e, self.getComponent());
+                               }
+
+                               tap = false;
+                       });
+               }
+
+               if (self.table.options.rowDblTap) {
+
+                       dblTap = null;
+
+                       self.element.addEventListener("touchend", function (e) {
+
+                               if (dblTap) {
+
+                                       clearTimeout(dblTap);
+
+                                       dblTap = null;
+
+                                       self.table.options.rowDblTap(e, self.getComponent());
+                               } else {
+
+                                       dblTap = setTimeout(function () {
+
+                                               clearTimeout(dblTap);
+
+                                               dblTap = null;
+                                       }, 300);
+                               }
+                       });
+               }
+
+               if (self.table.options.rowTapHold) {
+
+                       tapHold = null;
+
+                       self.element.addEventListener("touchstart", function (e) {
+
+                               clearTimeout(tapHold);
+
+                               tapHold = setTimeout(function () {
+
+                                       clearTimeout(tapHold);
+
+                                       tapHold = null;
+
+                                       tap = false;
+
+                                       self.table.options.rowTapHold(e, self.getComponent());
+                               }, 1000);
+                       }, { passive: true });
+
+                       self.element.addEventListener("touchend", function (e) {
+
+                               clearTimeout(tapHold);
+
+                               tapHold = null;
+                       });
+               }
+       };
+
+       Row.prototype.generateCells = function () {
+
+               this.cells = this.table.columnManager.generateCells(this);
+       };
+
+       //functions to setup on first render
+
+       Row.prototype.initialize = function (force) {
+
+               var self = this;
+
+               if (!self.initialized || force) {
+
+                       self.deleteCells();
+
+                       while (self.element.firstChild) {
+                               self.element.removeChild(self.element.firstChild);
+                       } //handle frozen cells
+
+                       if (this.table.modExists("frozenColumns")) {
+
+                               this.table.modules.frozenColumns.layoutRow(this);
+                       }
+
+                       this.generateCells();
+
+                       self.cells.forEach(function (cell) {
+
+                               self.element.appendChild(cell.getElement());
+
+                               cell.cellRendered();
+                       });
+
+                       if (force) {
+
+                               self.normalizeHeight();
+                       }
+
+                       //setup movable rows
+
+                       if (self.table.options.dataTree && self.table.modExists("dataTree")) {
+
+                               self.table.modules.dataTree.layoutRow(this);
+                       }
+
+                       //setup column colapse container
+
+                       if (self.table.options.responsiveLayout === "collapse" && self.table.modExists("responsiveLayout")) {
+
+                               self.table.modules.responsiveLayout.layoutRow(this);
+                       }
+
+                       if (self.table.options.rowFormatter) {
+
+                               self.table.options.rowFormatter(self.getComponent());
+                       }
+
+                       //set resizable handles
+
+                       if (self.table.options.resizableRows && self.table.modExists("resizeRows")) {
+
+                               self.table.modules.resizeRows.initializeRow(self);
+                       }
+
+                       self.initialized = true;
+               }
+       };
+
+       Row.prototype.reinitializeHeight = function () {
+
+               this.heightInitialized = false;
+
+               if (this.element.offsetParent !== null) {
+
+                       this.normalizeHeight(true);
+               }
+       };
+
+       Row.prototype.reinitialize = function () {
+
+               this.initialized = false;
+
+               this.heightInitialized = false;
+
+               if (!this.manualHeight) {
+
+                       this.height = 0;
+
+                       this.heightStyled = "";
+               }
+
+               if (this.element.offsetParent !== null) {
+
+                       this.initialize(true);
+               }
+       };
+
+       //get heights when doing bulk row style calcs in virtual DOM
+
+       Row.prototype.calcHeight = function (force) {
+
+               var maxHeight = 0,
+                   minHeight = this.table.options.resizableRows ? this.element.clientHeight : 0;
+
+               this.cells.forEach(function (cell) {
+
+                       var height = cell.getHeight();
+
+                       if (height > maxHeight) {
+
+                               maxHeight = height;
+                       }
+               });
+
+               if (force) {
+
+                       this.height = Math.max(maxHeight, minHeight);
+               } else {
+
+                       this.height = this.manualHeight ? this.height : Math.max(maxHeight, minHeight);
+               }
+
+               this.heightStyled = this.height ? this.height + "px" : "";
+
+               this.outerHeight = this.element.offsetHeight;
+       };
+
+       //set of cells
+
+       Row.prototype.setCellHeight = function () {
+
+               this.cells.forEach(function (cell) {
+
+                       cell.setHeight();
+               });
+
+               this.heightInitialized = true;
+       };
+
+       Row.prototype.clearCellHeight = function () {
+
+               this.cells.forEach(function (cell) {
+
+                       cell.clearHeight();
+               });
+       };
+
+       //normalize the height of elements in the row
+
+       Row.prototype.normalizeHeight = function (force) {
+
+               if (force) {
+
+                       this.clearCellHeight();
+               }
+
+               this.calcHeight(force);
+
+               this.setCellHeight();
+       };
+
+       // Row.prototype.setHeight = function(height){
+
+       //      this.height = height;
+
+
+       //      this.setCellHeight();
+
+       // };
+
+
+       //set height of rows
+
+       Row.prototype.setHeight = function (height, force) {
+
+               if (this.height != height || force) {
+
+                       this.manualHeight = true;
+
+                       this.height = height;
+
+                       this.heightStyled = height ? height + "px" : "";
+
+                       this.setCellHeight();
+
+                       // this.outerHeight = this.element.outerHeight();
+
+                       this.outerHeight = this.element.offsetHeight;
+               }
+       };
+
+       //return rows outer height
+
+       Row.prototype.getHeight = function () {
+
+               return this.outerHeight;
+       };
+
+       //return rows outer Width
+
+       Row.prototype.getWidth = function () {
+
+               return this.element.offsetWidth;
+       };
+
+       //////////////// Cell Management /////////////////
+
+
+       Row.prototype.deleteCell = function (cell) {
+
+               var index = this.cells.indexOf(cell);
+
+               if (index > -1) {
+
+                       this.cells.splice(index, 1);
+               }
+       };
+
+       //////////////// Data Management /////////////////
+
+
+       Row.prototype.setData = function (data) {
+
+               if (this.table.modExists("mutator")) {
+
+                       data = this.table.modules.mutator.transformRow(data, "data");
+               }
+
+               this.data = data;
+
+               if (this.table.options.reactiveData && this.table.modExists("reactiveData", true)) {
+
+                       this.table.modules.reactiveData.watchRow(this);
+               }
+       };
+
+       //update the rows data
+
+       Row.prototype.updateData = function (updatedData) {
+               var _this15 = this;
+
+               var visible = Tabulator.prototype.helpers.elVisible(this.element),
+                   tempData = {},
+                   newRowData;
+
+               return new Promise(function (resolve, reject) {
+
+                       if (typeof updatedData === "string") {
+
+                               updatedData = JSON.parse(updatedData);
+                       }
+
+                       if (_this15.table.options.reactiveData && _this15.table.modExists("reactiveData", true)) {
+
+                               _this15.table.modules.reactiveData.block();
+                       }
+
+                       //mutate incomming data if needed
+
+                       if (_this15.table.modExists("mutator")) {
+
+                               tempData = Object.assign(tempData, _this15.data);
+
+                               tempData = Object.assign(tempData, updatedData);
+
+                               newRowData = _this15.table.modules.mutator.transformRow(tempData, "data", updatedData);
+                       } else {
+
+                               newRowData = updatedData;
+                       }
+
+                       //set data
+
+                       for (var attrname in newRowData) {
+
+                               _this15.data[attrname] = newRowData[attrname];
+                       }
+
+                       if (_this15.table.options.reactiveData && _this15.table.modExists("reactiveData", true)) {
+
+                               _this15.table.modules.reactiveData.unblock();
+                       }
+
+                       //update affected cells only
+
+                       for (var attrname in updatedData) {
+
+                               var columns = _this15.table.columnManager.getColumnsByFieldRoot(attrname);
+
+                               columns.forEach(function (column) {
+
+                                       var cell = _this15.getCell(column.getField());
+
+                                       if (cell) {
+
+                                               var value = column.getFieldValue(newRowData);
+
+                                               if (cell.getValue() != value) {
+
+                                                       cell.setValueProcessData(value);
+
+                                                       if (visible) {
+
+                                                               cell.cellRendered();
+                                                       }
+                                               }
+                                       }
+                               });
+                       }
+
+                       //Partial reinitialization if visible
+
+                       if (visible) {
+
+                               _this15.normalizeHeight(true);
+
+                               if (_this15.table.options.rowFormatter) {
+
+                                       _this15.table.options.rowFormatter(_this15.getComponent());
+                               }
+                       } else {
+
+                               _this15.initialized = false;
+
+                               _this15.height = 0;
+
+                               _this15.heightStyled = "";
+                       }
+
+                       if (_this15.table.options.dataTree !== false && _this15.table.modExists("dataTree") && _this15.table.modules.dataTree.redrawNeeded(updatedData)) {
+
+                               _this15.table.modules.dataTree.initializeRow(_this15);
+
+                               _this15.table.modules.dataTree.layoutRow(_this15);
+
+                               _this15.table.rowManager.refreshActiveData("tree", false, true);
+                       }
+
+                       //this.reinitialize();
+
+
+                       _this15.table.options.rowUpdated.call(_this15.table, _this15.getComponent());
+
+                       resolve();
+               });
+       };
+
+       Row.prototype.getData = function (transform) {
+
+               var self = this;
+
+               if (transform) {
+
+                       if (self.table.modExists("accessor")) {
+
+                               return self.table.modules.accessor.transformRow(self.data, transform);
+                       }
+               } else {
+
+                       return this.data;
+               }
+       };
+
+       Row.prototype.getCell = function (column) {
+
+               var match = false;
+
+               column = this.table.columnManager.findColumn(column);
+
+               match = this.cells.find(function (cell) {
+
+                       return cell.column === column;
+               });
+
+               return match;
+       };
+
+       Row.prototype.getCellIndex = function (findCell) {
+
+               return this.cells.findIndex(function (cell) {
+
+                       return cell === findCell;
+               });
+       };
+
+       Row.prototype.findNextEditableCell = function (index) {
+
+               var nextCell = false;
+
+               if (index < this.cells.length - 1) {
+
+                       for (var i = index + 1; i < this.cells.length; i++) {
+
+                               var cell = this.cells[i];
+
+                               if (cell.column.modules.edit && Tabulator.prototype.helpers.elVisible(cell.getElement())) {
+
+                                       var allowEdit = true;
+
+                                       if (typeof cell.column.modules.edit.check == "function") {
+
+                                               allowEdit = cell.column.modules.edit.check(cell.getComponent());
+                                       }
+
+                                       if (allowEdit) {
+
+                                               nextCell = cell;
+
+                                               break;
+                                       }
+                               }
+                       }
+               }
+
+               return nextCell;
+       };
+
+       Row.prototype.findPrevEditableCell = function (index) {
+
+               var prevCell = false;
+
+               if (index > 0) {
+
+                       for (var i = index - 1; i >= 0; i--) {
+
+                               var cell = this.cells[i],
+                                   allowEdit = true;
+
+                               if (cell.column.modules.edit && Tabulator.prototype.helpers.elVisible(cell.getElement())) {
+
+                                       if (typeof cell.column.modules.edit.check == "function") {
+
+                                               allowEdit = cell.column.modules.edit.check(cell.getComponent());
+                                       }
+
+                                       if (allowEdit) {
+
+                                               prevCell = cell;
+
+                                               break;
+                                       }
+                               }
+                       }
+               }
+
+               return prevCell;
+       };
+
+       Row.prototype.getCells = function () {
+
+               return this.cells;
+       };
+
+       Row.prototype.nextRow = function () {
+
+               var row = this.table.rowManager.nextDisplayRow(this, true);
+
+               return row || false;
+       };
+
+       Row.prototype.prevRow = function () {
+
+               var row = this.table.rowManager.prevDisplayRow(this, true);
+
+               return row || false;
+       };
+
+       Row.prototype.moveToRow = function (to, before) {
+
+               var toRow = this.table.rowManager.findRow(to);
+
+               if (toRow) {
+
+                       this.table.rowManager.moveRowActual(this, toRow, !before);
+
+                       this.table.rowManager.refreshActiveData("display", false, true);
+               } else {
+
+                       console.warn("Move Error - No matching row found:", to);
+               }
+       };
+
+       Row.prototype.validate = function () {
+
+               var invalid = [];
+
+               this.cells.forEach(function (cell) {
+
+                       if (!cell.validate()) {
+
+                               invalid.push(cell.getComponent());
+                       }
+               });
+
+               return invalid.length ? invalid : true;
+       };
+
+       ///////////////////// Actions  /////////////////////
+
+
+       Row.prototype.delete = function () {
+               var _this16 = this;
+
+               return new Promise(function (resolve, reject) {
+
+                       var index, rows;
+
+                       if (_this16.table.options.history && _this16.table.modExists("history")) {
+
+                               if (_this16.table.options.groupBy && _this16.table.modExists("groupRows")) {
+
+                                       rows = _this16.getGroup().rows;
+
+                                       index = rows.indexOf(_this16);
+
+                                       if (index) {
+
+                                               index = rows[index - 1];
+                                       }
+                               } else {
+
+                                       index = _this16.table.rowManager.getRowIndex(_this16);
+
+                                       if (index) {
+
+                                               index = _this16.table.rowManager.rows[index - 1];
+                                       }
+                               }
+
+                               _this16.table.modules.history.action("rowDelete", _this16, { data: _this16.getData(), pos: !index, index: index });
+                       }
+
+                       _this16.deleteActual();
+
+                       resolve();
+               });
+       };
+
+       Row.prototype.deleteActual = function (blockRedraw) {
+
+               var index = this.table.rowManager.getRowIndex(this);
+
+               //deselect row if it is selected
+
+               if (this.table.modExists("selectRow")) {
+
+                       this.table.modules.selectRow._deselectRow(this, true);
+               }
+
+               //cancel edit if row is currently being edited
+
+               if (this.table.modExists("edit")) {
+
+                       if (this.table.modules.edit.currentCell.row === this) {
+
+                               this.table.modules.edit.cancelEdit();
+                       }
+               }
+
+               // if(this.table.options.dataTree && this.table.modExists("dataTree")){
+
+               //      this.table.modules.dataTree.collapseRow(this, true);
+
+               // }
+
+
+               //remove any reactive data watchers from row object
+
+               if (this.table.options.reactiveData && this.table.modExists("reactiveData", true)) {}
+
+               // this.table.modules.reactiveData.unwatchRow(this);
+
+               //remove from group
+
+               if (this.modules.group) {
+
+                       this.modules.group.removeRow(this);
+               }
+
+               this.table.rowManager.deleteRow(this, blockRedraw);
+
+               this.deleteCells();
+
+               this.initialized = false;
+
+               this.heightInitialized = false;
+
+               if (this.table.options.dataTree && this.table.modExists("dataTree", true)) {
+
+                       this.table.modules.dataTree.rowDelete(this);
+               }
+
+               //recalc column calculations if present
+
+               if (this.table.modExists("columnCalcs")) {
+
+                       if (this.table.options.groupBy && this.table.modExists("groupRows")) {
+
+                               this.table.modules.columnCalcs.recalcRowGroup(this);
+                       } else {
+
+                               this.table.modules.columnCalcs.recalc(this.table.rowManager.activeRows);
+                       }
+               }
+       };
+
+       Row.prototype.deleteCells = function () {
+
+               var cellCount = this.cells.length;
+
+               for (var _i5 = 0; _i5 < cellCount; _i5++) {
+
+                       this.cells[0].delete();
+               }
+       };
+
+       Row.prototype.wipe = function () {
+
+               this.deleteCells();
+
+               while (this.element.firstChild) {
+                       this.element.removeChild(this.element.firstChild);
+               }this.element = false;
+
+               this.modules = {};
+
+               if (this.element.parentNode) {
+
+                       this.element.parentNode.removeChild(this.element);
+               }
+       };
+
+       Row.prototype.getGroup = function () {
+
+               return this.modules.group || false;
+       };
+
+       //////////////// Object Generation /////////////////
+
+       Row.prototype.getComponent = function () {
+
+               if (!this.component) {
+
+                       this.component = new RowComponent(this);
+               }
+
+               return this.component;
+       };
+
+       //public row object
+
+       var CellComponent = function CellComponent(cell) {
+
+               this._cell = cell;
+       };
+
+       CellComponent.prototype.getValue = function () {
+
+               return this._cell.getValue();
+       };
+
+       CellComponent.prototype.getOldValue = function () {
+
+               return this._cell.getOldValue();
+       };
+
+       CellComponent.prototype.getElement = function () {
+
+               return this._cell.getElement();
+       };
+
+       CellComponent.prototype.getRow = function () {
+
+               return this._cell.row.getComponent();
+       };
+
+       CellComponent.prototype.getData = function () {
+
+               return this._cell.row.getData();
+       };
+
+       CellComponent.prototype.getField = function () {
+
+               return this._cell.column.getField();
+       };
+
+       CellComponent.prototype.getColumn = function () {
+
+               return this._cell.column.getComponent();
+       };
+
+       CellComponent.prototype.setValue = function (value, mutate) {
+
+               if (typeof mutate == "undefined") {
+
+                       mutate = true;
+               }
+
+               this._cell.setValue(value, mutate);
+       };
+
+       CellComponent.prototype.restoreOldValue = function () {
+
+               this._cell.setValueActual(this._cell.getOldValue());
+       };
+
+       CellComponent.prototype.edit = function (force) {
+
+               return this._cell.edit(force);
+       };
+
+       CellComponent.prototype.cancelEdit = function () {
+
+               this._cell.cancelEdit();
+       };
+
+       CellComponent.prototype.isEdited = function () {
+
+               return !!this._cell.modules.edit && this._cell.modules.edit.edited;
+       };
+
+       CellComponent.prototype.clearEdited = function () {
+
+               if (self.table.modExists("edit", true)) {
+
+                       this._cell.table.modules.edit.clearEdited(this._cell);
+               }
+       };
+
+       CellComponent.prototype.isValid = function () {
+
+               return this._cell.modules.validate ? !this._cell.modules.validate.invalid : true;
+       };
+
+       CellComponent.prototype.validate = function () {
+
+               return this._cell.validate();
+       };
+
+       CellComponent.prototype.clearValidation = function () {
+
+               if (self.table.modExists("validate", true)) {
+
+                       this._cell.table.modules.validate.clearValidation(this._cell);
+               }
+       };
+
+       CellComponent.prototype.nav = function () {
+
+               return this._cell.nav();
+       };
+
+       CellComponent.prototype.checkHeight = function () {
+
+               this._cell.checkHeight();
+       };
+
+       CellComponent.prototype.getTable = function () {
+
+               return this._cell.table;
+       };
+
+       CellComponent.prototype._getSelf = function () {
+
+               return this._cell;
+       };
+
+       var Cell = function Cell(column, row) {
+
+               this.table = column.table;
+
+               this.column = column;
+
+               this.row = row;
+
+               this.element = null;
+
+               this.value = null;
+
+               this.oldValue = null;
+
+               this.modules = {};
+
+               this.height = null;
+
+               this.width = null;
+
+               this.minWidth = null;
+
+               this.component = null;
+
+               this.build();
+       };
+
+       //////////////// Setup Functions /////////////////
+
+
+       //generate element
+
+       Cell.prototype.build = function () {
+
+               this.generateElement();
+
+               this.setWidth();
+
+               this._configureCell();
+
+               this.setValueActual(this.column.getFieldValue(this.row.data));
+       };
+
+       Cell.prototype.generateElement = function () {
+
+               this.element = document.createElement('div');
+
+               this.element.className = "tabulator-cell";
+
+               this.element.setAttribute("role", "gridcell");
+
+               this.element = this.element;
+       };
+
+       Cell.prototype._configureCell = function () {
+
+               var self = this,
+                   cellEvents = self.column.cellEvents,
+                   element = self.element,
+                   field = this.column.getField(),
+                   vertAligns = {
+
+                       top: "flex-start",
+
+                       bottom: "flex-end",
+
+                       middle: "center"
+
+               },
+                   hozAligns = {
+
+                       left: "flex-start",
+
+                       right: "flex-end",
+
+                       center: "center"
+
+               };
+
+               //set text alignment
+
+               element.style.textAlign = self.column.hozAlign;
+
+               if (self.column.vertAlign) {
+
+                       element.style.display = "inline-flex";
+
+                       element.style.alignItems = vertAligns[self.column.vertAlign] || "";
+
+                       if (self.column.hozAlign) {
+
+                               element.style.justifyContent = hozAligns[self.column.hozAlign] || "";
+                       }
+               }
+
+               if (field) {
+
+                       element.setAttribute("tabulator-field", field);
+               }
+
+               //add class to cell if needed
+
+               if (self.column.definition.cssClass) {
+
+                       var classNames = self.column.definition.cssClass.split(" ");
+
+                       classNames.forEach(function (className) {
+
+                               element.classList.add(className);
+                       });
+               }
+
+               //update tooltip on mouse enter
+
+               if (this.table.options.tooltipGenerationMode === "hover") {
+
+                       element.addEventListener("mouseenter", function (e) {
+
+                               self._generateTooltip();
+                       });
+               }
+
+               self._bindClickEvents(cellEvents);
+
+               self._bindTouchEvents(cellEvents);
+
+               self._bindMouseEvents(cellEvents);
+
+               if (self.column.modules.edit) {
+
+                       self.table.modules.edit.bindEditor(self);
+               }
+
+               if (self.column.definition.rowHandle && self.table.options.movableRows !== false && self.table.modExists("moveRow")) {
+
+                       self.table.modules.moveRow.initializeCell(self);
+               }
+
+               //hide cell if not visible
+
+               if (!self.column.visible) {
+
+                       self.hide();
+               }
+       };
+
+       Cell.prototype._bindClickEvents = function (cellEvents) {
+
+               var self = this,
+                   element = self.element;
+
+               //set event bindings
+
+               if (cellEvents.cellClick || self.table.options.cellClick) {
+
+                       element.addEventListener("click", function (e) {
+
+                               var component = self.getComponent();
+
+                               if (cellEvents.cellClick) {
+
+                                       cellEvents.cellClick.call(self.table, e, component);
+                               }
+
+                               if (self.table.options.cellClick) {
+
+                                       self.table.options.cellClick.call(self.table, e, component);
+                               }
+                       });
+               }
+
+               if (cellEvents.cellDblClick || this.table.options.cellDblClick) {
+
+                       element.addEventListener("dblclick", function (e) {
+
+                               var component = self.getComponent();
+
+                               if (cellEvents.cellDblClick) {
+
+                                       cellEvents.cellDblClick.call(self.table, e, component);
+                               }
+
+                               if (self.table.options.cellDblClick) {
+
+                                       self.table.options.cellDblClick.call(self.table, e, component);
+                               }
+                       });
+               } else {
+
+                       element.addEventListener("dblclick", function (e) {
+
+                               if (self.table.modExists("edit")) {
+
+                                       if (self.table.modules.edit.currentCell === self) {
+
+                                               return; //prevent instant selection of editor content
+                                       }
+                               }
+
+                               e.preventDefault();
+
+                               try {
+
+                                       if (document.selection) {
+                                               // IE
+
+                                               var range = document.body.createTextRange();
+
+                                               range.moveToElementText(self.element);
+
+                                               range.select();
+                                       } else if (window.getSelection) {
+
+                                               var range = document.createRange();
+
+                                               range.selectNode(self.element);
+
+                                               window.getSelection().removeAllRanges();
+
+                                               window.getSelection().addRange(range);
+                                       }
+                               } catch (e) {}
+                       });
+               }
+
+               if (cellEvents.cellContext || this.table.options.cellContext) {
+
+                       element.addEventListener("contextmenu", function (e) {
+
+                               var component = self.getComponent();
+
+                               if (cellEvents.cellContext) {
+
+                                       cellEvents.cellContext.call(self.table, e, component);
+                               }
+
+                               if (self.table.options.cellContext) {
+
+                                       self.table.options.cellContext.call(self.table, e, component);
+                               }
+                       });
+               }
+       };
+
+       Cell.prototype._bindMouseEvents = function (cellEvents) {
+
+               var self = this,
+                   element = self.element;
+
+               if (cellEvents.cellMouseEnter || self.table.options.cellMouseEnter) {
+
+                       element.addEventListener("mouseenter", function (e) {
+
+                               var component = self.getComponent();
+
+                               if (cellEvents.cellMouseEnter) {
+
+                                       cellEvents.cellMouseEnter.call(self.table, e, component);
+                               }
+
+                               if (self.table.options.cellMouseEnter) {
+
+                                       self.table.options.cellMouseEnter.call(self.table, e, component);
+                               }
+                       });
+               }
+
+               if (cellEvents.cellMouseLeave || self.table.options.cellMouseLeave) {
+
+                       element.addEventListener("mouseleave", function (e) {
+
+                               var component = self.getComponent();
+
+                               if (cellEvents.cellMouseLeave) {
+
+                                       cellEvents.cellMouseLeave.call(self.table, e, component);
+                               }
+
+                               if (self.table.options.cellMouseLeave) {
+
+                                       self.table.options.cellMouseLeave.call(self.table, e, component);
+                               }
+                       });
+               }
+
+               if (cellEvents.cellMouseOver || self.table.options.cellMouseOver) {
+
+                       element.addEventListener("mouseover", function (e) {
+
+                               var component = self.getComponent();
+
+                               if (cellEvents.cellMouseOver) {
+
+                                       cellEvents.cellMouseOver.call(self.table, e, component);
+                               }
+
+                               if (self.table.options.cellMouseOver) {
+
+                                       self.table.options.cellMouseOver.call(self.table, e, component);
+                               }
+                       });
+               }
+
+               if (cellEvents.cellMouseOut || self.table.options.cellMouseOut) {
+
+                       element.addEventListener("mouseout", function (e) {
+
+                               var component = self.getComponent();
+
+                               if (cellEvents.cellMouseOut) {
+
+                                       cellEvents.cellMouseOut.call(self.table, e, component);
+                               }
+
+                               if (self.table.options.cellMouseOut) {
+
+                                       self.table.options.cellMouseOut.call(self.table, e, component);
+                               }
+                       });
+               }
+
+               if (cellEvents.cellMouseMove || self.table.options.cellMouseMove) {
+
+                       element.addEventListener("mousemove", function (e) {
+
+                               var component = self.getComponent();
+
+                               if (cellEvents.cellMouseMove) {
+
+                                       cellEvents.cellMouseMove.call(self.table, e, component);
+                               }
+
+                               if (self.table.options.cellMouseMove) {
+
+                                       self.table.options.cellMouseMove.call(self.table, e, component);
+                               }
+                       });
+               }
+       };
+
+       Cell.prototype._bindTouchEvents = function (cellEvents) {
+
+               var self = this,
+                   element = self.element,
+                   dblTap,
+                   tapHold,
+                   tap;
+
+               if (cellEvents.cellTap || this.table.options.cellTap) {
+
+                       tap = false;
+
+                       element.addEventListener("touchstart", function (e) {
+
+                               tap = true;
+                       }, { passive: true });
+
+                       element.addEventListener("touchend", function (e) {
+
+                               if (tap) {
+
+                                       var component = self.getComponent();
+
+                                       if (cellEvents.cellTap) {
+
+                                               cellEvents.cellTap.call(self.table, e, component);
+                                       }
+
+                                       if (self.table.options.cellTap) {
+
+                                               self.table.options.cellTap.call(self.table, e, component);
+                                       }
+                               }
+
+                               tap = false;
+                       });
+               }
+
+               if (cellEvents.cellDblTap || this.table.options.cellDblTap) {
+
+                       dblTap = null;
+
+                       element.addEventListener("touchend", function (e) {
+
+                               if (dblTap) {
+
+                                       clearTimeout(dblTap);
+
+                                       dblTap = null;
+
+                                       var component = self.getComponent();
+
+                                       if (cellEvents.cellDblTap) {
+
+                                               cellEvents.cellDblTap.call(self.table, e, component);
+                                       }
+
+                                       if (self.table.options.cellDblTap) {
+
+                                               self.table.options.cellDblTap.call(self.table, e, component);
+                                       }
+                               } else {
+
+                                       dblTap = setTimeout(function () {
+
+                                               clearTimeout(dblTap);
+
+                                               dblTap = null;
+                                       }, 300);
+                               }
+                       });
+               }
+
+               if (cellEvents.cellTapHold || this.table.options.cellTapHold) {
+
+                       tapHold = null;
+
+                       element.addEventListener("touchstart", function (e) {
+
+                               clearTimeout(tapHold);
+
+                               tapHold = setTimeout(function () {
+
+                                       clearTimeout(tapHold);
+
+                                       tapHold = null;
+
+                                       tap = false;
+
+                                       var component = self.getComponent();
+
+                                       if (cellEvents.cellTapHold) {
+
+                                               cellEvents.cellTapHold.call(self.table, e, component);
+                                       }
+
+                                       if (self.table.options.cellTapHold) {
+
+                                               self.table.options.cellTapHold.call(self.table, e, component);
+                                       }
+                               }, 1000);
+                       }, { passive: true });
+
+                       element.addEventListener("touchend", function (e) {
+
+                               clearTimeout(tapHold);
+
+                               tapHold = null;
+                       });
+               }
+       };
+
+       //generate cell contents
+
+       Cell.prototype._generateContents = function () {
+
+               var val;
+
+               if (this.table.modExists("format")) {
+
+                       val = this.table.modules.format.formatValue(this);
+               } else {
+
+                       val = this.element.innerHTML = this.value;
+               }
+
+               switch (typeof val === 'undefined' ? 'undefined' : _typeof(val)) {
+
+                       case "object":
+
+                               if (val instanceof Node) {
+
+                                       //clear previous cell contents
+
+                                       while (this.element.firstChild) {
+                                               this.element.removeChild(this.element.firstChild);
+                                       }this.element.appendChild(val);
+                               } else {
+
+                                       this.element.innerHTML = "";
+
+                                       if (val != null) {
+
+                                               console.warn("Format Error - Formatter has returned a type of object, the only valid formatter object return is an instance of Node, the formatter returned:", val);
+                                       }
+                               }
+
+                               break;
+
+                       case "undefined":
+
+                       case "null":
+
+                               this.element.innerHTML = "";
+
+                               break;
+
+                       default:
+
+                               this.element.innerHTML = val;
+
+               }
+       };
+
+       Cell.prototype.cellRendered = function () {
+
+               if (this.table.modExists("format") && this.table.modules.format.cellRendered) {
+
+                       this.table.modules.format.cellRendered(this);
+               }
+       };
+
+       //generate tooltip text
+
+       Cell.prototype._generateTooltip = function () {
+
+               var tooltip = this.column.tooltip;
+
+               if (tooltip) {
+
+                       if (tooltip === true) {
+
+                               tooltip = this.value;
+                       } else if (typeof tooltip == "function") {
+
+                               tooltip = tooltip(this.getComponent());
+
+                               if (tooltip === false) {
+
+                                       tooltip = "";
+                               }
+                       }
+
+                       if (typeof tooltip === "undefined") {
+
+                               tooltip = "";
+                       }
+
+                       this.element.setAttribute("title", tooltip);
+               } else {
+
+                       this.element.setAttribute("title", "");
+               }
+       };
+
+       //////////////////// Getters ////////////////////
+
+       Cell.prototype.getElement = function () {
+
+               return this.element;
+       };
+
+       Cell.prototype.getValue = function () {
+
+               return this.value;
+       };
+
+       Cell.prototype.getOldValue = function () {
+
+               return this.oldValue;
+       };
+
+       //////////////////// Actions ////////////////////
+
+
+       Cell.prototype.setValue = function (value, mutate) {
+
+               var changed = this.setValueProcessData(value, mutate),
+                   component;
+
+               if (changed) {
+
+                       if (this.table.options.history && this.table.modExists("history")) {
+
+                               this.table.modules.history.action("cellEdit", this, { oldValue: this.oldValue, newValue: this.value });
+                       }
+
+                       component = this.getComponent();
+
+                       if (this.column.cellEvents.cellEdited) {
+
+                               this.column.cellEvents.cellEdited.call(this.table, component);
+                       }
+
+                       this.cellRendered();
+
+                       this.table.options.cellEdited.call(this.table, component);
+
+                       this.table.options.dataEdited.call(this.table, this.table.rowManager.getData());
+               }
+       };
+
+       Cell.prototype.setValueProcessData = function (value, mutate) {
+
+               var changed = false;
+
+               if (this.value != value) {
+
+                       changed = true;
+
+                       if (mutate) {
+
+                               if (this.column.modules.mutate) {
+
+                                       value = this.table.modules.mutator.transformCell(this, value);
+                               }
+                       }
+               }
+
+               this.setValueActual(value);
+
+               if (changed && this.table.modExists("columnCalcs")) {
+
+                       if (this.column.definition.topCalc || this.column.definition.bottomCalc) {
+
+                               if (this.table.options.groupBy && this.table.modExists("groupRows")) {
+
+                                       if (this.table.options.columnCalcs == "table" || this.table.options.columnCalcs == "both") {
+
+                                               this.table.modules.columnCalcs.recalc(this.table.rowManager.activeRows);
+                                       }
+
+                                       if (this.table.options.columnCalcs != "table") {
+
+                                               this.table.modules.columnCalcs.recalcRowGroup(this.row);
+                                       }
+                               } else {
+
+                                       this.table.modules.columnCalcs.recalc(this.table.rowManager.activeRows);
+                               }
+                       }
+               }
+
+               return changed;
+       };
+
+       Cell.prototype.setValueActual = function (value) {
+
+               this.oldValue = this.value;
+
+               this.value = value;
+
+               if (this.table.options.reactiveData && this.table.modExists("reactiveData")) {
+
+                       this.table.modules.reactiveData.block();
+               }
+
+               this.column.setFieldValue(this.row.data, value);
+
+               if (this.table.options.reactiveData && this.table.modExists("reactiveData")) {
+
+                       this.table.modules.reactiveData.unblock();
+               }
+
+               this._generateContents();
+
+               this._generateTooltip();
+
+               //set resizable handles
+
+               if (this.table.options.resizableColumns && this.table.modExists("resizeColumns")) {
+
+                       this.table.modules.resizeColumns.initializeColumn("cell", this.column, this.element);
+               }
+
+               //set column menu
+
+               if (this.column.definition.contextMenu && this.table.modExists("menu")) {
+
+                       this.table.modules.menu.initializeCell(this);
+               }
+
+               //handle frozen cells
+
+               if (this.table.modExists("frozenColumns")) {
+
+                       this.table.modules.frozenColumns.layoutElement(this.element, this.column);
+               }
+       };
+
+       Cell.prototype.setWidth = function () {
+
+               this.width = this.column.width;
+
+               this.element.style.width = this.column.widthStyled;
+       };
+
+       Cell.prototype.clearWidth = function () {
+
+               this.width = "";
+
+               this.element.style.width = "";
+       };
+
+       Cell.prototype.getWidth = function () {
+
+               return this.width || this.element.offsetWidth;
+       };
+
+       Cell.prototype.setMinWidth = function () {
+
+               this.minWidth = this.column.minWidth;
+
+               this.element.style.minWidth = this.column.minWidthStyled;
+       };
+
+       Cell.prototype.checkHeight = function () {
+
+               // var height = this.element.css("height");
+
+               this.row.reinitializeHeight();
+       };
+
+       Cell.prototype.clearHeight = function () {
+
+               this.element.style.height = "";
+
+               this.height = null;
+       };
+
+       Cell.prototype.setHeight = function () {
+
+               this.height = this.row.height;
+
+               this.element.style.height = this.row.heightStyled;
+       };
+
+       Cell.prototype.getHeight = function () {
+
+               return this.height || this.element.offsetHeight;
+       };
+
+       Cell.prototype.show = function () {
+
+               this.element.style.display = "";
+       };
+
+       Cell.prototype.hide = function () {
+
+               this.element.style.display = "none";
+       };
+
+       Cell.prototype.edit = function (force) {
+
+               if (this.table.modExists("edit", true)) {
+
+                       return this.table.modules.edit.editCell(this, force);
+               }
+       };
+
+       Cell.prototype.cancelEdit = function () {
+
+               if (this.table.modExists("edit", true)) {
+
+                       var editing = this.table.modules.edit.getCurrentCell();
+
+                       if (editing && editing._getSelf() === this) {
+
+                               this.table.modules.edit.cancelEdit();
+                       } else {
+
+                               console.warn("Cancel Editor Error - This cell is not currently being edited ");
+                       }
+               }
+       };
+
+       Cell.prototype.validate = function () {
+
+               if (this.column.modules.validate && this.table.modExists("validate", true)) {
+
+                       var valid = this.table.modules.validate.validate(this.column.modules.validate, this, this.getValue());
+
+                       return valid === true;
+               } else {
+
+                       return true;
+               }
+       };
+
+       Cell.prototype.delete = function () {
+
+               if (!this.table.rowManager.redrawBlock) {
+
+                       this.element.parentNode.removeChild(this.element);
+               }
+
+               if (this.modules.validate && this.modules.validate.invalid) {
+
+                       this.table.modules.validate.clearValidation(this);
+               }
+
+               if (this.modules.edit && this.modules.edit.edited) {
+
+                       this.table.modules.edit.clearEdited(this);
+               }
+
+               this.element = false;
+
+               this.column.deleteCell(this);
+
+               this.row.deleteCell(this);
+
+               this.calcs = {};
+       };
+
+       //////////////// Navigation /////////////////
+
+
+       Cell.prototype.nav = function () {
+
+               var self = this,
+                   nextCell = false,
+                   index = this.row.getCellIndex(this);
+
+               return {
+
+                       next: function next() {
+
+                               var nextCell = this.right(),
+                                   nextRow;
+
+                               if (!nextCell) {
+
+                                       nextRow = self.table.rowManager.nextDisplayRow(self.row, true);
+
+                                       if (nextRow) {
+
+                                               nextCell = nextRow.findNextEditableCell(-1);
+
+                                               if (nextCell) {
+
+                                                       nextCell.edit();
+
+                                                       return true;
+                                               }
+                                       }
+                               } else {
+
+                                       return true;
+                               }
+
+                               return false;
+                       },
+
+                       prev: function prev() {
+
+                               var nextCell = this.left(),
+                                   prevRow;
+
+                               if (!nextCell) {
+
+                                       prevRow = self.table.rowManager.prevDisplayRow(self.row, true);
+
+                                       if (prevRow) {
+
+                                               nextCell = prevRow.findPrevEditableCell(prevRow.cells.length);
+
+                                               if (nextCell) {
+
+                                                       nextCell.edit();
+
+                                                       return true;
+                                               }
+                                       }
+                               } else {
+
+                                       return true;
+                               }
+
+                               return false;
+                       },
+
+                       left: function left() {
+
+                               nextCell = self.row.findPrevEditableCell(index);
+
+                               if (nextCell) {
+
+                                       nextCell.edit();
+
+                                       return true;
+                               } else {
+
+                                       return false;
+                               }
+                       },
+
+                       right: function right() {
+
+                               nextCell = self.row.findNextEditableCell(index);
+
+                               if (nextCell) {
+
+                                       nextCell.edit();
+
+                                       return true;
+                               } else {
+
+                                       return false;
+                               }
+                       },
+
+                       up: function up() {
+
+                               var nextRow = self.table.rowManager.prevDisplayRow(self.row, true);
+
+                               if (nextRow) {
+
+                                       nextRow.cells[index].edit();
+                               }
+                       },
+
+                       down: function down() {
+
+                               var nextRow = self.table.rowManager.nextDisplayRow(self.row, true);
+
+                               if (nextRow) {
+
+                                       nextRow.cells[index].edit();
+                               }
+                       }
+
+               };
+       };
+
+       Cell.prototype.getIndex = function () {
+
+               this.row.getCellIndex(this);
+       };
+
+       //////////////// Object Generation /////////////////
+
+       Cell.prototype.getComponent = function () {
+
+               if (!this.component) {
+
+                       this.component = new CellComponent(this);
+               }
+
+               return this.component;
+       };
+
+       var FooterManager = function FooterManager(table) {
+
+               this.table = table;
+
+               this.active = false;
+
+               this.element = this.createElement(); //containing element
+
+               this.external = false;
+
+               this.links = [];
+
+               this._initialize();
+       };
+
+       FooterManager.prototype.createElement = function () {
+
+               var el = document.createElement("div");
+
+               el.classList.add("tabulator-footer");
+
+               return el;
+       };
+
+       FooterManager.prototype._initialize = function (element) {
+
+               if (this.table.options.footerElement) {
+
+                       switch (_typeof(this.table.options.footerElement)) {
+
+                               case "string":
+
+                                       if (this.table.options.footerElement[0] === "<") {
+
+                                               this.element.innerHTML = this.table.options.footerElement;
+                                       } else {
+
+                                               this.external = true;
+
+                                               this.element = document.querySelector(this.table.options.footerElement);
+                                       }
+
+                                       break;
+
+                               default:
+
+                                       this.element = this.table.options.footerElement;
+
+                                       break;
+
+                       }
+               }
+       };
+
+       FooterManager.prototype.getElement = function () {
+
+               return this.element;
+       };
+
+       FooterManager.prototype.append = function (element, parent) {
+
+               this.activate(parent);
+
+               this.element.appendChild(element);
+
+               this.table.rowManager.adjustTableSize();
+       };
+
+       FooterManager.prototype.prepend = function (element, parent) {
+
+               this.activate(parent);
+
+               this.element.insertBefore(element, this.element.firstChild);
+
+               this.table.rowManager.adjustTableSize();
+       };
+
+       FooterManager.prototype.remove = function (element) {
+
+               element.parentNode.removeChild(element);
+
+               this.deactivate();
+       };
+
+       FooterManager.prototype.deactivate = function (force) {
+
+               if (!this.element.firstChild || force) {
+
+                       if (!this.external) {
+
+                               this.element.parentNode.removeChild(this.element);
+                       }
+
+                       this.active = false;
+               }
+
+               // this.table.rowManager.adjustTableSize();
+       };
+
+       FooterManager.prototype.activate = function (parent) {
+
+               if (!this.active) {
+
+                       this.active = true;
+
+                       if (!this.external) {
+
+                               this.table.element.appendChild(this.getElement());
+
+                               this.table.element.style.display = '';
+                       }
+               }
+
+               if (parent) {
+
+                       this.links.push(parent);
+               }
+       };
+
+       FooterManager.prototype.redraw = function () {
+
+               this.links.forEach(function (link) {
+
+                       link.footerRedraw();
+               });
+       };
+
+       var Tabulator = function Tabulator(element, options) {
+
+               this.options = {};
+
+               this.columnManager = null; // hold Column Manager
+
+               this.rowManager = null; //hold Row Manager
+
+               this.footerManager = null; //holder Footer Manager
+
+               this.browser = ""; //hold current browser type
+
+               this.browserSlow = false; //handle reduced functionality for slower browsers
+
+               this.browserMobile = false; //check if running on moble, prevent resize cancelling edit on keyboard appearence
+
+
+               this.modules = {}; //hold all modules bound to this table
+
+
+               this.initializeElement(element);
+
+               this.initializeOptions(options || {});
+
+               this._create();
+
+               Tabulator.prototype.comms.register(this); //register table for inderdevice communication
+       };
+
+       //default setup options
+
+       Tabulator.prototype.defaultOptions = {
+
+               height: false, //height of tabulator
+
+               minHeight: false, //minimum height of tabulator
+
+               maxHeight: false, //maximum height of tabulator
+
+
+               layout: "fitData", ///layout type "fitColumns" | "fitData"
+
+               layoutColumnsOnNewData: false, //update column widths on setData
+
+
+               columnMinWidth: 40, //minimum global width for a column
+
+               columnHeaderVertAlign: "top", //vertical alignment of column headers
+
+               columnVertAlign: false, // DEPRECATED - Left to allow warning
+
+
+               resizableColumns: true, //resizable columns
+
+               resizableRows: false, //resizable rows
+
+               autoResize: true, //auto resize table
+
+
+               columns: [], //store for colum header info
+
+
+               cellHozAlign: "", //horizontal align columns
+
+               cellVertAlign: "", //certical align columns
+
+
+               data: [], //default starting data
+
+
+               autoColumns: false, //build columns from data row structure
+
+
+               reactiveData: false, //enable data reactivity
+
+
+               nestedFieldSeparator: ".", //seperatpr for nested data
+
+
+               tooltips: false, //Tool tip value
+
+               tooltipsHeader: false, //Tool tip for headers
+
+               tooltipGenerationMode: "load", //when to generate tooltips
+
+
+               initialSort: false, //initial sorting criteria
+
+               initialFilter: false, //initial filtering criteria
+
+               initialHeaderFilter: false, //initial header filtering criteria
+
+
+               columnHeaderSortMulti: true, //multiple or single column sorting
+
+
+               sortOrderReverse: false, //reverse internal sort ordering
+
+
+               headerSort: true, //set default global header sort
+
+               headerSortTristate: false, //set default tristate header sorting
+
+
+               footerElement: false, //hold footer element
+
+
+               index: "id", //filed for row index
+
+
+               keybindings: [], //array for keybindings
+
+
+               tabEndNewRow: false, //create new row when tab to end of table
+
+
+               invalidOptionWarnings: true, //allow toggling of invalid option warnings
+
+
+               clipboard: false, //enable clipboard
+
+               clipboardCopyStyled: true, //formatted table data
+
+               clipboardCopyConfig: false, //clipboard config
+
+               clipboardCopyFormatter: false, //DEPRICATED - REMOVE in 5.0
+
+               clipboardCopyRowRange: "active", //restrict clipboard to visible rows only
+
+               clipboardPasteParser: "table", //convert pasted clipboard data to rows
+
+               clipboardPasteAction: "insert", //how to insert pasted data into the table
+
+
+               clipboardCopied: function clipboardCopied() {}, //data has been copied to the clipboard
+
+               clipboardPasted: function clipboardPasted() {}, //data has been pasted into the table
+
+               clipboardPasteError: function clipboardPasteError() {}, //data has not successfully been pasted into the table
+
+
+               downloadDataFormatter: false, //function to manipulate table data before it is downloaded
+
+               downloadReady: function downloadReady(data, blob) {
+                       return blob;
+               }, //function to manipulate download data
+
+               downloadComplete: false, //function to manipulate download data
+
+               downloadConfig: {}, //download config
+
+               downloadRowRange: "active", //restrict download to active rows only
+
+
+               dataTree: false, //enable data tree
+
+               dataTreeElementColumn: false,
+
+               dataTreeBranchElement: true, //show data tree branch element
+
+               dataTreeChildIndent: 9, //data tree child indent in px
+
+               dataTreeChildField: "_children", //data tre column field to look for child rows
+
+               dataTreeCollapseElement: false, //data tree row collapse element
+
+               dataTreeExpandElement: false, //data tree row expand element
+
+               dataTreeStartExpanded: false,
+
+               dataTreeRowExpanded: function dataTreeRowExpanded() {}, //row has been expanded
+
+               dataTreeRowCollapsed: function dataTreeRowCollapsed() {}, //row has been collapsed
+
+               dataTreeChildColumnCalcs: false, //include visible data tree rows in column calculations
+
+               dataTreeSelectPropagate: false, //seleccting a parent row selects its children
+
+
+               printAsHtml: false, //enable print as html
+
+               printFormatter: false, //printing page formatter
+
+               printHeader: false, //page header contents
+
+               printFooter: false, //page footer contents
+
+               printCopyStyle: true, //DEPRICATED - REMOVE in 5.0
+
+               printStyled: true, //enable print as html styling
+
+               printVisibleRows: true, //DEPRICATED - REMOVE in 5.0
+
+               printRowRange: "visible", //restrict print to visible rows only
+
+               printConfig: {}, //print config options
+
+
+               addRowPos: "bottom", //position to insert blank rows, top|bottom
+
+
+               selectable: "highlight", //highlight rows on hover
+
+               selectableRangeMode: "drag", //highlight rows on hover
+
+               selectableRollingSelection: true, //roll selection once maximum number of selectable rows is reached
+
+               selectablePersistence: true, // maintain selection when table view is updated
+
+               selectableCheck: function selectableCheck(data, row) {
+                       return true;
+               }, //check wheather row is selectable
+
+
+               headerFilterLiveFilterDelay: 300, //delay before updating column after user types in header filter
+
+               headerFilterPlaceholder: false, //placeholder text to display in header filters
+
+
+               headerVisible: true, //hide header
+
+
+               history: false, //enable edit history
+
+
+               locale: false, //current system language
+
+               langs: {},
+
+               virtualDom: true, //enable DOM virtualization
+
+               virtualDomBuffer: 0, // set virtual DOM buffer size
+
+
+               persistentLayout: false, //DEPRICATED - REMOVE in 5.0
+
+               persistentSort: false, //DEPRICATED - REMOVE in 5.0
+
+               persistentFilter: false, //DEPRICATED - REMOVE in 5.0
+
+               persistenceID: "", //key for persistent storage
+
+               persistenceMode: true, //mode for storing persistence information
+
+               persistenceReaderFunc: false, //function for handling persistence data reading
+
+               persistenceWriterFunc: false, //function for handling persistence data writing
+
+
+               persistence: false,
+
+               responsiveLayout: false, //responsive layout flags
+
+               responsiveLayoutCollapseStartOpen: true, //start showing collapsed data
+
+               responsiveLayoutCollapseUseFormatters: true, //responsive layout collapse formatter
+
+               responsiveLayoutCollapseFormatter: false, //responsive layout collapse formatter
+
+
+               pagination: false, //set pagination type
+
+               paginationSize: false, //set number of rows to a page
+
+               paginationInitialPage: 1, //initail page to show on load
+
+               paginationButtonCount: 5, // set count of page button
+
+               paginationSizeSelector: false, //add pagination size selector element
+
+               paginationElement: false, //element to hold pagination numbers
+
+               paginationDataSent: {}, //pagination data sent to the server
+
+               paginationDataReceived: {}, //pagination data received from the server
+
+               paginationAddRow: "page", //add rows on table or page
+
+
+               ajaxURL: false, //url for ajax loading
+
+               ajaxURLGenerator: false,
+
+               ajaxParams: {}, //params for ajax loading
+
+               ajaxConfig: "get", //ajax request type
+
+               ajaxContentType: "form", //ajax request type
+
+               ajaxRequestFunc: false, //promise function
+
+               ajaxLoader: true, //show loader
+
+               ajaxLoaderLoading: false, //loader element
+
+               ajaxLoaderError: false, //loader element
+
+               ajaxFiltering: false,
+
+               ajaxSorting: false,
+
+               ajaxProgressiveLoad: false, //progressive loading
+
+               ajaxProgressiveLoadDelay: 0, //delay between requests
+
+               ajaxProgressiveLoadScrollMargin: 0, //margin before scroll begins
+
+
+               groupBy: false, //enable table grouping and set field to group by
+
+               groupStartOpen: true, //starting state of group
+
+               groupValues: false,
+
+               groupHeader: false, //header generation function
+
+               groupHeaderPrint: null,
+
+               groupHeaderClipboard: null,
+
+               groupHeaderHtmlOutput: null,
+
+               groupHeaderDownload: null,
+
+               htmlOutputConfig: false, //html outypu config
+
+
+               movableColumns: false, //enable movable columns
+
+
+               movableRows: false, //enable movable rows
+
+               movableRowsConnectedTables: false, //tables for movable rows to be connected to
+
+               movableRowsConnectedElements: false, //other elements for movable rows to be connected to
+
+               movableRowsSender: false,
+
+               movableRowsReceiver: "insert",
+
+               movableRowsSendingStart: function movableRowsSendingStart() {},
+
+               movableRowsSent: function movableRowsSent() {},
+
+               movableRowsSentFailed: function movableRowsSentFailed() {},
+
+               movableRowsSendingStop: function movableRowsSendingStop() {},
+
+               movableRowsReceivingStart: function movableRowsReceivingStart() {},
+
+               movableRowsReceived: function movableRowsReceived() {},
+
+               movableRowsReceivedFailed: function movableRowsReceivedFailed() {},
+
+               movableRowsReceivingStop: function movableRowsReceivingStop() {},
+
+               movableRowsElementDrop: function movableRowsElementDrop() {},
+
+               scrollToRowPosition: "top",
+
+               scrollToRowIfVisible: true,
+
+               scrollToColumnPosition: "left",
+
+               scrollToColumnIfVisible: true,
+
+               rowFormatter: false,
+
+               rowFormatterPrint: null,
+
+               rowFormatterClipboard: null,
+
+               rowFormatterHtmlOutput: null,
+
+               placeholder: false,
+
+               //table building callbacks
+
+               tableBuilding: function tableBuilding() {},
+
+               tableBuilt: function tableBuilt() {},
+
+               //render callbacks
+
+               renderStarted: function renderStarted() {},
+
+               renderComplete: function renderComplete() {},
+
+               //row callbacks
+
+               rowClick: false,
+
+               rowDblClick: false,
+
+               rowContext: false,
+
+               rowTap: false,
+
+               rowDblTap: false,
+
+               rowTapHold: false,
+
+               rowMouseEnter: false,
+
+               rowMouseLeave: false,
+
+               rowMouseOver: false,
+
+               rowMouseOut: false,
+
+               rowMouseMove: false,
+
+               rowContextMenu: false,
+
+               rowAdded: function rowAdded() {},
+
+               rowDeleted: function rowDeleted() {},
+
+               rowMoved: function rowMoved() {},
+
+               rowUpdated: function rowUpdated() {},
+
+               rowSelectionChanged: function rowSelectionChanged() {},
+
+               rowSelected: function rowSelected() {},
+
+               rowDeselected: function rowDeselected() {},
+
+               rowResized: function rowResized() {},
+
+               //cell callbacks
+
+               //row callbacks
+
+               cellClick: false,
+
+               cellDblClick: false,
+
+               cellContext: false,
+
+               cellTap: false,
+
+               cellDblTap: false,
+
+               cellTapHold: false,
+
+               cellMouseEnter: false,
+
+               cellMouseLeave: false,
+
+               cellMouseOver: false,
+
+               cellMouseOut: false,
+
+               cellMouseMove: false,
+
+               cellEditing: function cellEditing() {},
+
+               cellEdited: function cellEdited() {},
+
+               cellEditCancelled: function cellEditCancelled() {},
+
+               //column callbacks
+
+               columnMoved: false,
+
+               columnResized: function columnResized() {},
+
+               columnTitleChanged: function columnTitleChanged() {},
+
+               columnVisibilityChanged: function columnVisibilityChanged() {},
+
+               //HTML iport callbacks
+
+               htmlImporting: function htmlImporting() {},
+
+               htmlImported: function htmlImported() {},
+
+               //data callbacks
+
+               dataLoading: function dataLoading() {},
+
+               dataLoaded: function dataLoaded() {},
+
+               dataEdited: function dataEdited() {},
+
+               //ajax callbacks
+
+               ajaxRequesting: function ajaxRequesting() {},
+
+               ajaxResponse: false,
+
+               ajaxError: function ajaxError() {},
+
+               //filtering callbacks
+
+               dataFiltering: false,
+
+               dataFiltered: false,
+
+               //sorting callbacks
+
+               dataSorting: function dataSorting() {},
+
+               dataSorted: function dataSorted() {},
+
+               //grouping callbacks
+
+               groupToggleElement: "arrow",
+
+               groupClosedShowCalcs: false,
+
+               dataGrouping: function dataGrouping() {},
+
+               dataGrouped: false,
+
+               groupVisibilityChanged: function groupVisibilityChanged() {},
+
+               groupClick: false,
+
+               groupDblClick: false,
+
+               groupContext: false,
+
+               groupContextMenu: false,
+
+               groupTap: false,
+
+               groupDblTap: false,
+
+               groupTapHold: false,
+
+               columnCalcs: true,
+
+               //pagination callbacks
+
+               pageLoaded: function pageLoaded() {},
+
+               //localization callbacks
+
+               localized: function localized() {},
+
+               //validation callbacks
+
+               validationMode: "blocking",
+
+               validationFailed: function validationFailed() {},
+
+               //history callbacks
+
+               historyUndo: function historyUndo() {},
+
+               historyRedo: function historyRedo() {},
+
+               //scroll callbacks
+
+               scrollHorizontal: function scrollHorizontal() {},
+
+               scrollVertical: function scrollVertical() {}
+
+       };
+
+       Tabulator.prototype.initializeOptions = function (options) {
+
+               //warn user if option is not available
+
+               if (options.invalidOptionWarnings !== false) {
+
+                       for (var key in options) {
+
+                               if (typeof this.defaultOptions[key] === "undefined") {
+
+                                       console.warn("Invalid table constructor option:", key);
+                               }
+                       }
+               }
+
+               //assign options to table
+
+               for (var key in this.defaultOptions) {
+
+                       if (key in options) {
+
+                               this.options[key] = options[key];
+                       } else {
+
+                               if (Array.isArray(this.defaultOptions[key])) {
+
+                                       this.options[key] = [];
+                               } else if (_typeof(this.defaultOptions[key]) === "object" && this.defaultOptions[key] !== null) {
+
+                                       this.options[key] = {};
+                               } else {
+
+                                       this.options[key] = this.defaultOptions[key];
+                               }
+                       }
+               }
+       };
+
+       Tabulator.prototype.initializeElement = function (element) {
+
+               if (typeof HTMLElement !== "undefined" && element instanceof HTMLElement) {
+
+                       this.element = element;
+
+                       return true;
+               } else if (typeof element === "string") {
+
+                       this.element = document.querySelector(element);
+
+                       if (this.element) {
+
+                               return true;
+                       } else {
+
+                               console.error("Tabulator Creation Error - no element found matching selector: ", element);
+
+                               return false;
+                       }
+               } else {
+
+                       console.error("Tabulator Creation Error - Invalid element provided:", element);
+
+                       return false;
+               }
+       };
+
+       //convert depricated functionality to new functions
+
+       Tabulator.prototype._mapDepricatedFunctionality = function () {
+
+               //map depricated persistance setup options
+
+               if (this.options.persistentLayout || this.options.persistentSort || this.options.persistentFilter) {
+
+                       if (!this.options.persistence) {
+
+                               this.options.persistence = {};
+                       }
+               }
+
+               if (this.options.downloadDataFormatter) {
+
+                       console.warn("DEPRECATION WARNING - downloadDataFormatter option has been deprecated");
+               }
+
+               if (typeof this.options.clipboardCopyHeader !== "undefined") {
+
+                       this.options.columnHeaders = this.options.clipboardCopyHeader;
+
+                       console.warn("DEPRECATION WARNING - clipboardCopyHeader option has been deprecated, please use the columnHeaders property on the clipboardCopyConfig option");
+               }
+
+               if (this.options.printVisibleRows !== true) {
+
+                       console.warn("printVisibleRows option is deprecated, you should now use the printRowRange option");
+
+                       this.options.persistence.printRowRange = "active";
+               }
+
+               if (this.options.printCopyStyle !== true) {
+
+                       console.warn("printCopyStyle option is deprecated, you should now use the printStyled option");
+
+                       this.options.persistence.printStyled = this.options.printCopyStyle;
+               }
+
+               if (this.options.persistentLayout) {
+
+                       console.warn("persistentLayout option is deprecated, you should now use the persistence option");
+
+                       if (this.options.persistence !== true && typeof this.options.persistence.columns === "undefined") {
+
+                               this.options.persistence.columns = true;
+                       }
+               }
+
+               if (this.options.persistentSort) {
+
+                       console.warn("persistentSort option is deprecated, you should now use the persistence option");
+
+                       if (this.options.persistence !== true && typeof this.options.persistence.sort === "undefined") {
+
+                               this.options.persistence.sort = true;
+                       }
+               }
+
+               if (this.options.persistentFilter) {
+
+                       console.warn("persistentFilter option is deprecated, you should now use the persistence option");
+
+                       if (this.options.persistence !== true && typeof this.options.persistence.filter === "undefined") {
+
+                               this.options.persistence.filter = true;
+                       }
+               }
+
+               if (this.options.columnVertAlign) {
+
+                       console.warn("columnVertAlign option is deprecated, you should now use the columnHeaderVertAlign option");
+
+                       this.options.columnHeaderVertAlign = this.options.columnVertAlign;
+               }
+       };
+
+       Tabulator.prototype._clearSelection = function () {
+
+               this.element.classList.add("tabulator-block-select");
+
+               if (window.getSelection) {
+
+                       if (window.getSelection().empty) {
+                               // Chrome
+
+                               window.getSelection().empty();
+                       } else if (window.getSelection().removeAllRanges) {
+                               // Firefox
+
+                               window.getSelection().removeAllRanges();
+                       }
+               } else if (document.selection) {
+                       // IE?
+
+                       document.selection.empty();
+               }
+
+               this.element.classList.remove("tabulator-block-select");
+       };
+
+       //concreate table
+
+       Tabulator.prototype._create = function () {
+
+               this._clearObjectPointers();
+
+               this._mapDepricatedFunctionality();
+
+               this.bindModules();
+
+               if (this.element.tagName === "TABLE") {
+
+                       if (this.modExists("htmlTableImport", true)) {
+
+                               this.modules.htmlTableImport.parseTable();
+                       }
+               }
+
+               this.columnManager = new ColumnManager(this);
+
+               this.rowManager = new RowManager(this);
+
+               this.footerManager = new FooterManager(this);
+
+               this.columnManager.setRowManager(this.rowManager);
+
+               this.rowManager.setColumnManager(this.columnManager);
+
+               this._buildElement();
+
+               this._loadInitialData();
+       };
+
+       //clear pointers to objects in default config object
+
+       Tabulator.prototype._clearObjectPointers = function () {
+
+               this.options.columns = this.options.columns.slice(0);
+
+               if (!this.options.reactiveData) {
+
+                       this.options.data = this.options.data.slice(0);
+               }
+       };
+
+       //build tabulator element
+
+       Tabulator.prototype._buildElement = function () {
+               var _this17 = this;
+
+               var element = this.element,
+                   mod = this.modules,
+                   options = this.options;
+
+               options.tableBuilding.call(this);
+
+               element.classList.add("tabulator");
+
+               element.setAttribute("role", "grid");
+
+               //empty element
+
+               while (element.firstChild) {
+                       element.removeChild(element.firstChild);
+               } //set table height
+
+               if (options.height) {
+
+                       options.height = isNaN(options.height) ? options.height : options.height + "px";
+
+                       element.style.height = options.height;
+               }
+
+               //set table min height
+
+               if (options.minHeight !== false) {
+
+                       options.minHeight = isNaN(options.minHeight) ? options.minHeight : options.minHeight + "px";
+
+                       element.style.minHeight = options.minHeight;
+               }
+
+               //set table maxHeight
+
+               if (options.maxHeight !== false) {
+
+                       options.maxHeight = isNaN(options.maxHeight) ? options.maxHeight : options.maxHeight + "px";
+
+                       element.style.maxHeight = options.maxHeight;
+               }
+
+               this.columnManager.initialize();
+
+               this.rowManager.initialize();
+
+               this._detectBrowser();
+
+               if (this.modExists("layout", true)) {
+
+                       mod.layout.initialize(options.layout);
+               }
+
+               //set localization
+
+               if (options.headerFilterPlaceholder !== false) {
+
+                       mod.localize.setHeaderFilterPlaceholder(options.headerFilterPlaceholder);
+               }
+
+               for (var locale in options.langs) {
+
+                       mod.localize.installLang(locale, options.langs[locale]);
+               }
+
+               mod.localize.setLocale(options.locale);
+
+               //configure placeholder element
+
+               if (typeof options.placeholder == "string") {
+
+                       var el = document.createElement("div");
+
+                       el.classList.add("tabulator-placeholder");
+
+                       var span = document.createElement("span");
+
+                       span.innerHTML = options.placeholder;
+
+                       el.appendChild(span);
+
+                       options.placeholder = el;
+               }
+
+               //build table elements
+
+               element.appendChild(this.columnManager.getElement());
+
+               element.appendChild(this.rowManager.getElement());
+
+               if (options.footerElement) {
+
+                       this.footerManager.activate();
+               }
+
+               if (options.persistence && this.modExists("persistence", true)) {
+
+                       mod.persistence.initialize();
+               }
+
+               if (options.persistence && this.modExists("persistence", true) && mod.persistence.config.columns) {
+
+                       options.columns = mod.persistence.load("columns", options.columns);
+               }
+
+               if (options.movableRows && this.modExists("moveRow")) {
+
+                       mod.moveRow.initialize();
+               }
+
+               if (options.autoColumns && this.options.data) {
+
+                       this.columnManager.generateColumnsFromRowData(this.options.data);
+               }
+
+               if (this.modExists("columnCalcs")) {
+
+                       mod.columnCalcs.initialize();
+               }
+
+               this.columnManager.setColumns(options.columns);
+
+               if (options.dataTree && this.modExists("dataTree", true)) {
+
+                       mod.dataTree.initialize();
+               }
+
+               if (this.modExists("frozenRows")) {
+
+                       this.modules.frozenRows.initialize();
+               }
+
+               if ((options.persistence && this.modExists("persistence", true) && mod.persistence.config.sort || options.initialSort) && this.modExists("sort", true)) {
+
+                       var sorters = [];
+
+                       if (options.persistence && this.modExists("persistence", true) && mod.persistence.config.sort) {
+
+                               sorters = mod.persistence.load("sort");
+
+                               if (sorters === false && options.initialSort) {
+
+                                       sorters = options.initialSort;
+                               }
+                       } else if (options.initialSort) {
+
+                               sorters = options.initialSort;
+                       }
+
+                       mod.sort.setSort(sorters);
+               }
+
+               if ((options.persistence && this.modExists("persistence", true) && mod.persistence.config.filter || options.initialFilter) && this.modExists("filter", true)) {
+
+                       var filters = [];
+
+                       if (options.persistence && this.modExists("persistence", true) && mod.persistence.config.filter) {
+
+                               filters = mod.persistence.load("filter");
+
+                               if (filters === false && options.initialFilter) {
+
+                                       filters = options.initialFilter;
+                               }
+                       } else if (options.initialFilter) {
+
+                               filters = options.initialFilter;
+                       }
+
+                       mod.filter.setFilter(filters);
+               }
+
+               if (options.initialHeaderFilter && this.modExists("filter", true)) {
+
+                       options.initialHeaderFilter.forEach(function (item) {
+
+                               var column = _this17.columnManager.findColumn(item.field);
+
+                               if (column) {
+
+                                       mod.filter.setHeaderFilterValue(column, item.value);
+                               } else {
+
+                                       console.warn("Column Filter Error - No matching column found:", item.field);
+
+                                       return false;
+                               }
+                       });
+               }
+
+               if (this.modExists("ajax")) {
+
+                       mod.ajax.initialize();
+               }
+
+               if (options.pagination && this.modExists("page", true)) {
+
+                       mod.page.initialize();
+               }
+
+               if (options.groupBy && this.modExists("groupRows", true)) {
+
+                       mod.groupRows.initialize();
+               }
+
+               if (this.modExists("keybindings")) {
+
+                       mod.keybindings.initialize();
+               }
+
+               if (this.modExists("selectRow")) {
+
+                       mod.selectRow.clearSelectionData(true);
+               }
+
+               if (options.autoResize && this.modExists("resizeTable")) {
+
+                       mod.resizeTable.initialize();
+               }
+
+               if (this.modExists("clipboard")) {
+
+                       mod.clipboard.initialize();
+               }
+
+               if (options.printAsHtml && this.modExists("print")) {
+
+                       mod.print.initialize();
+               }
+
+               options.tableBuilt.call(this);
+       };
+
+       Tabulator.prototype._loadInitialData = function () {
+
+               var self = this;
+
+               if (self.options.pagination && self.modExists("page")) {
+
+                       self.modules.page.reset(true, true);
+
+                       if (self.options.pagination == "local") {
+
+                               if (self.options.data.length) {
+
+                                       self.rowManager.setData(self.options.data, false, true);
+                               } else {
+
+                                       if ((self.options.ajaxURL || self.options.ajaxURLGenerator) && self.modExists("ajax")) {
+
+                                               self.modules.ajax.loadData(false, true).then(function () {}).catch(function () {
+
+                                                       if (self.options.paginationInitialPage) {
+
+                                                               self.modules.page.setPage(self.options.paginationInitialPage);
+                                                       }
+                                               });
+
+                                               return;
+                                       } else {
+
+                                               self.rowManager.setData(self.options.data, false, true);
+                                       }
+                               }
+
+                               if (self.options.paginationInitialPage) {
+
+                                       self.modules.page.setPage(self.options.paginationInitialPage);
+                               }
+                       } else {
+
+                               if (self.options.ajaxURL) {
+
+                                       self.modules.page.setPage(self.options.paginationInitialPage).then(function () {}).catch(function () {});
+                               } else {
+
+                                       self.rowManager.setData([], false, true);
+                               }
+                       }
+               } else {
+
+                       if (self.options.data.length) {
+
+                               self.rowManager.setData(self.options.data);
+                       } else {
+
+                               if ((self.options.ajaxURL || self.options.ajaxURLGenerator) && self.modExists("ajax")) {
+
+                                       self.modules.ajax.loadData(false, true).then(function () {}).catch(function () {});
+                               } else {
+
+                                       self.rowManager.setData(self.options.data, false, true);
+                               }
+                       }
+               }
+       };
+
+       //deconstructor
+
+       Tabulator.prototype.destroy = function () {
+
+               var element = this.element;
+
+               Tabulator.prototype.comms.deregister(this); //deregister table from inderdevice communication
+
+
+               if (this.options.reactiveData && this.modExists("reactiveData", true)) {
+
+                       this.modules.reactiveData.unwatchData();
+               }
+
+               //clear row data
+
+               this.rowManager.rows.forEach(function (row) {
+
+                       row.wipe();
+               });
+
+               this.rowManager.rows = [];
+
+               this.rowManager.activeRows = [];
+
+               this.rowManager.displayRows = [];
+
+               //clear event bindings
+
+               if (this.options.autoResize && this.modExists("resizeTable")) {
+
+                       this.modules.resizeTable.clearBindings();
+               }
+
+               if (this.modExists("keybindings")) {
+
+                       this.modules.keybindings.clearBindings();
+               }
+
+               //clear DOM
+
+               while (element.firstChild) {
+                       element.removeChild(element.firstChild);
+               }element.classList.remove("tabulator");
+       };
+
+       Tabulator.prototype._detectBrowser = function () {
+
+               var ua = navigator.userAgent || navigator.vendor || window.opera;
+
+               if (ua.indexOf("Trident") > -1) {
+
+                       this.browser = "ie";
+
+                       this.browserSlow = true;
+               } else if (ua.indexOf("Edge") > -1) {
+
+                       this.browser = "edge";
+
+                       this.browserSlow = true;
+               } else if (ua.indexOf("Firefox") > -1) {
+
+                       this.browser = "firefox";
+
+                       this.browserSlow = false;
+               } else {
+
+                       this.browser = "other";
+
+                       this.browserSlow = false;
+               }
+
+               this.browserMobile = /(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino|android|ipad|playbook|silk/i.test(ua) || /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(ua.substr(0, 4));
+       };
+
+       ////////////////// Data Handling //////////////////
+
+
+       //block table redrawing
+
+       Tabulator.prototype.blockRedraw = function () {
+
+               return this.rowManager.blockRedraw();
+       };
+
+       //restore table redrawing
+
+       Tabulator.prototype.restoreRedraw = function () {
+
+               return this.rowManager.restoreRedraw();
+       };
+
+       //local data from local file
+
+       Tabulator.prototype.setDataFromLocalFile = function (extensions) {
+               var _this18 = this;
+
+               return new Promise(function (resolve, reject) {
+
+                       var input = document.createElement("input");
+
+                       input.type = "file";
+
+                       input.accept = extensions || ".json,application/json";
+
+                       input.addEventListener("change", function (e) {
+
+                               var file = input.files[0],
+                                   reader = new FileReader(),
+                                   data;
+
+                               reader.readAsText(file);
+
+                               reader.onload = function (e) {
+
+                                       try {
+
+                                               data = JSON.parse(reader.result);
+                                       } catch (e) {
+
+                                               console.warn("File Load Error - File contents is invalid JSON", e);
+
+                                               reject(e);
+
+                                               return;
+                                       }
+
+                                       _this18._setData(data).then(function (data) {
+
+                                               resolve(data);
+                                       }).catch(function (err) {
+
+                                               resolve(err);
+                                       });
+                               };
+
+                               reader.onerror = function (e) {
+
+                                       console.warn("File Load Error - Unable to read file");
+
+                                       reject();
+                               };
+                       });
+
+                       input.click();
+               });
+       };
+
+       //load data
+
+       Tabulator.prototype.setData = function (data, params, config) {
+
+               if (this.modExists("ajax")) {
+
+                       this.modules.ajax.blockActiveRequest();
+               }
+
+               return this._setData(data, params, config, false, true);
+       };
+
+       Tabulator.prototype._setData = function (data, params, config, inPosition, columnsChanged) {
+
+               var self = this;
+
+               if (typeof data === "string") {
+
+                       if (data.indexOf("{") == 0 || data.indexOf("[") == 0) {
+
+                               //data is a json encoded string
+
+                               return self.rowManager.setData(JSON.parse(data), inPosition, columnsChanged);
+                       } else {
+
+                               if (self.modExists("ajax", true)) {
+
+                                       if (params) {
+
+                                               self.modules.ajax.setParams(params);
+                                       }
+
+                                       if (config) {
+
+                                               self.modules.ajax.setConfig(config);
+                                       }
+
+                                       self.modules.ajax.setUrl(data);
+
+                                       if (self.options.pagination == "remote" && self.modExists("page", true)) {
+
+                                               self.modules.page.reset(true, true);
+
+                                               return self.modules.page.setPage(1);
+                                       } else {
+
+                                               //assume data is url, make ajax call to url to get data
+
+                                               return self.modules.ajax.loadData(inPosition, columnsChanged);
+                                       }
+                               }
+                       }
+               } else {
+
+                       if (data) {
+
+                               //asume data is already an object
+
+                               return self.rowManager.setData(data, inPosition, columnsChanged);
+                       } else {
+
+                               //no data provided, check if ajaxURL is present;
+
+                               if (self.modExists("ajax") && (self.modules.ajax.getUrl || self.options.ajaxURLGenerator)) {
+
+                                       if (self.options.pagination == "remote" && self.modExists("page", true)) {
+
+                                               self.modules.page.reset(true, true);
+
+                                               return self.modules.page.setPage(1);
+                                       } else {
+
+                                               return self.modules.ajax.loadData(inPosition, columnsChanged);
+                                       }
+                               } else {
+
+                                       //empty data
+
+                                       return self.rowManager.setData([], inPosition, columnsChanged);
+                               }
+                       }
+               }
+       };
+
+       //clear data
+
+       Tabulator.prototype.clearData = function () {
+
+               if (this.modExists("ajax")) {
+
+                       this.modules.ajax.blockActiveRequest();
+               }
+
+               this.rowManager.clearData();
+       };
+
+       //get table data array
+
+       Tabulator.prototype.getData = function (active) {
+
+               if (active === true) {
+
+                       console.warn("passing a boolean to the getData function is deprecated, you should now pass the string 'active'");
+
+                       active = "active";
+               }
+
+               return this.rowManager.getData(active);
+       };
+
+       //get table data array count
+
+       Tabulator.prototype.getDataCount = function (active) {
+
+               if (active === true) {
+
+                       console.warn("passing a boolean to the getDataCount function is deprecated, you should now pass the string 'active'");
+
+                       active = "active";
+               }
+
+               return this.rowManager.getDataCount(active);
+       };
+
+       //search for specific row components
+
+       Tabulator.prototype.searchRows = function (field, type, value) {
+
+               if (this.modExists("filter", true)) {
+
+                       return this.modules.filter.search("rows", field, type, value);
+               }
+       };
+
+       //search for specific data
+
+       Tabulator.prototype.searchData = function (field, type, value) {
+
+               if (this.modExists("filter", true)) {
+
+                       return this.modules.filter.search("data", field, type, value);
+               }
+       };
+
+       //get table html
+
+       Tabulator.prototype.getHtml = function (visible, style, config) {
+
+               if (this.modExists("export", true)) {
+
+                       return this.modules.export.getHtml(visible, style, config);
+               }
+       };
+
+       //get print html
+
+       Tabulator.prototype.print = function (visible, style, config) {
+
+               if (this.modExists("print", true)) {
+
+                       return this.modules.print.printFullscreen(visible, style, config);
+               }
+       };
+
+       //retrieve Ajax URL
+
+       Tabulator.prototype.getAjaxUrl = function () {
+
+               if (this.modExists("ajax", true)) {
+
+                       return this.modules.ajax.getUrl();
+               }
+       };
+
+       //replace data, keeping table in position with same sort
+
+       Tabulator.prototype.replaceData = function (data, params, config) {
+
+               if (this.modExists("ajax")) {
+
+                       this.modules.ajax.blockActiveRequest();
+               }
+
+               return this._setData(data, params, config, true);
+       };
+
+       //update table data
+
+       Tabulator.prototype.updateData = function (data) {
+               var _this19 = this;
+
+               var self = this;
+
+               var responses = 0;
+
+               return new Promise(function (resolve, reject) {
+
+                       if (_this19.modExists("ajax")) {
+
+                               _this19.modules.ajax.blockActiveRequest();
+                       }
+
+                       if (typeof data === "string") {
+
+                               data = JSON.parse(data);
+                       }
+
+                       if (data) {
+
+                               data.forEach(function (item) {
+
+                                       var row = self.rowManager.findRow(item[self.options.index]);
+
+                                       if (row) {
+
+                                               responses++;
+
+                                               row.updateData(item).then(function () {
+
+                                                       responses--;
+
+                                                       if (!responses) {
+
+                                                               resolve();
+                                                       }
+                                               });
+                                       }
+                               });
+                       } else {
+
+                               console.warn("Update Error - No data provided");
+
+                               reject("Update Error - No data provided");
+                       }
+               });
+       };
+
+       Tabulator.prototype.addData = function (data, pos, index) {
+               var _this20 = this;
+
+               return new Promise(function (resolve, reject) {
+
+                       if (_this20.modExists("ajax")) {
+
+                               _this20.modules.ajax.blockActiveRequest();
+                       }
+
+                       if (typeof data === "string") {
+
+                               data = JSON.parse(data);
+                       }
+
+                       if (data) {
+
+                               _this20.rowManager.addRows(data, pos, index).then(function (rows) {
+
+                                       var output = [];
+
+                                       rows.forEach(function (row) {
+
+                                               output.push(row.getComponent());
+                                       });
+
+                                       resolve(output);
+                               });
+                       } else {
+
+                               console.warn("Update Error - No data provided");
+
+                               reject("Update Error - No data provided");
+                       }
+               });
+       };
+
+       //update table data
+
+       Tabulator.prototype.updateOrAddData = function (data) {
+               var _this21 = this;
+
+               var self = this,
+                   rows = [],
+                   responses = 0;
+
+               return new Promise(function (resolve, reject) {
+
+                       if (_this21.modExists("ajax")) {
+
+                               _this21.modules.ajax.blockActiveRequest();
+                       }
+
+                       if (typeof data === "string") {
+
+                               data = JSON.parse(data);
+                       }
+
+                       if (data) {
+
+                               data.forEach(function (item) {
+
+                                       var row = self.rowManager.findRow(item[self.options.index]);
+
+                                       responses++;
+
+                                       if (row) {
+
+                                               row.updateData(item).then(function () {
+
+                                                       responses--;
+
+                                                       rows.push(row.getComponent());
+
+                                                       if (!responses) {
+
+                                                               resolve(rows);
+                                                       }
+                                               });
+                                       } else {
+
+                                               self.rowManager.addRows(item).then(function (newRows) {
+
+                                                       responses--;
+
+                                                       rows.push(newRows[0].getComponent());
+
+                                                       if (!responses) {
+
+                                                               resolve(rows);
+                                                       }
+                                               });
+                                       }
+                               });
+                       } else {
+
+                               console.warn("Update Error - No data provided");
+
+                               reject("Update Error - No data provided");
+                       }
+               });
+       };
+
+       //get row object
+
+       Tabulator.prototype.getRow = function (index) {
+
+               var row = this.rowManager.findRow(index);
+
+               if (row) {
+
+                       return row.getComponent();
+               } else {
+
+                       console.warn("Find Error - No matching row found:", index);
+
+                       return false;
+               }
+       };
+
+       //get row object
+
+       Tabulator.prototype.getRowFromPosition = function (position, active) {
+
+               var row = this.rowManager.getRowFromPosition(position, active);
+
+               if (row) {
+
+                       return row.getComponent();
+               } else {
+
+                       console.warn("Find Error - No matching row found:", position);
+
+                       return false;
+               }
+       };
+
+       //delete row from table
+
+       Tabulator.prototype.deleteRow = function (index) {
+               var _this22 = this;
+
+               return new Promise(function (resolve, reject) {
+
+                       var self = _this22,
+                           count = 0,
+                           successCount = 0,
+                           foundRows = [];
+
+                       function doneCheck() {
+
+                               count++;
+
+                               if (count == index.length) {
+
+                                       if (successCount) {
+
+                                               self.rowManager.reRenderInPosition();
+
+                                               resolve();
+                                       }
+                               }
+                       }
+
+                       if (!Array.isArray(index)) {
+
+                               index = [index];
+                       }
+
+                       //find matching rows
+
+                       index.forEach(function (item) {
+
+                               var row = _this22.rowManager.findRow(item, true);
+
+                               if (row) {
+
+                                       foundRows.push(row);
+                               } else {
+
+                                       console.warn("Delete Error - No matching row found:", item);
+
+                                       reject("Delete Error - No matching row found");
+
+                                       doneCheck();
+                               }
+                       });
+
+                       //sort rows into correct order to ensure smooth delete from table
+
+                       foundRows.sort(function (a, b) {
+
+                               return _this22.rowManager.rows.indexOf(a) > _this22.rowManager.rows.indexOf(b) ? 1 : -1;
+                       });
+
+                       foundRows.forEach(function (row) {
+
+                               row.delete().then(function () {
+
+                                       successCount++;
+
+                                       doneCheck();
+                               }).catch(function (err) {
+
+                                       doneCheck();
+
+                                       reject(err);
+                               });
+                       });
+               });
+       };
+
+       //add row to table
+
+       Tabulator.prototype.addRow = function (data, pos, index) {
+               var _this23 = this;
+
+               return new Promise(function (resolve, reject) {
+
+                       if (typeof data === "string") {
+
+                               data = JSON.parse(data);
+                       }
+
+                       _this23.rowManager.addRows(data, pos, index).then(function (rows) {
+
+                               //recalc column calculations if present
+
+                               if (_this23.modExists("columnCalcs")) {
+
+                                       _this23.modules.columnCalcs.recalc(_this23.rowManager.activeRows);
+                               }
+
+                               resolve(rows[0].getComponent());
+                       });
+               });
+       };
+
+       //update a row if it exitsts otherwise create it
+
+       Tabulator.prototype.updateOrAddRow = function (index, data) {
+               var _this24 = this;
+
+               return new Promise(function (resolve, reject) {
+
+                       var row = _this24.rowManager.findRow(index);
+
+                       if (typeof data === "string") {
+
+                               data = JSON.parse(data);
+                       }
+
+                       if (row) {
+
+                               row.updateData(data).then(function () {
+
+                                       //recalc column calculations if present
+
+                                       if (_this24.modExists("columnCalcs")) {
+
+                                               _this24.modules.columnCalcs.recalc(_this24.rowManager.activeRows);
+                                       }
+
+                                       resolve(row.getComponent());
+                               }).catch(function (err) {
+
+                                       reject(err);
+                               });
+                       } else {
+
+                               row = _this24.rowManager.addRows(data).then(function (rows) {
+
+                                       //recalc column calculations if present
+
+                                       if (_this24.modExists("columnCalcs")) {
+
+                                               _this24.modules.columnCalcs.recalc(_this24.rowManager.activeRows);
+                                       }
+
+                                       resolve(rows[0].getComponent());
+                               }).catch(function (err) {
+
+                                       reject(err);
+                               });
+                       }
+               });
+       };
+
+       //update row data
+
+       Tabulator.prototype.updateRow = function (index, data) {
+               var _this25 = this;
+
+               return new Promise(function (resolve, reject) {
+
+                       var row = _this25.rowManager.findRow(index);
+
+                       if (typeof data === "string") {
+
+                               data = JSON.parse(data);
+                       }
+
+                       if (row) {
+
+                               row.updateData(data).then(function () {
+
+                                       resolve(row.getComponent());
+                               }).catch(function (err) {
+
+                                       reject(err);
+                               });
+                       } else {
+
+                               console.warn("Update Error - No matching row found:", index);
+
+                               reject("Update Error - No matching row found");
+                       }
+               });
+       };
+
+       //scroll to row in DOM
+
+       Tabulator.prototype.scrollToRow = function (index, position, ifVisible) {
+               var _this26 = this;
+
+               return new Promise(function (resolve, reject) {
+
+                       var row = _this26.rowManager.findRow(index);
+
+                       if (row) {
+
+                               _this26.rowManager.scrollToRow(row, position, ifVisible).then(function () {
+
+                                       resolve();
+                               }).catch(function (err) {
+
+                                       reject(err);
+                               });
+                       } else {
+
+                               console.warn("Scroll Error - No matching row found:", index);
+
+                               reject("Scroll Error - No matching row found");
+                       }
+               });
+       };
+
+       Tabulator.prototype.moveRow = function (from, to, after) {
+
+               var fromRow = this.rowManager.findRow(from);
+
+               if (fromRow) {
+
+                       fromRow.moveToRow(to, after);
+               } else {
+
+                       console.warn("Move Error - No matching row found:", from);
+               }
+       };
+
+       Tabulator.prototype.getRows = function (active) {
+
+               if (active === true) {
+
+                       console.warn("passing a boolean to the getRows function is deprecated, you should now pass the string 'active'");
+
+                       active = "active";
+               }
+
+               return this.rowManager.getComponents(active);
+       };
+
+       //get position of row in table
+
+       Tabulator.prototype.getRowPosition = function (index, active) {
+
+               var row = this.rowManager.findRow(index);
+
+               if (row) {
+
+                       return this.rowManager.getRowPosition(row, active);
+               } else {
+
+                       console.warn("Position Error - No matching row found:", index);
+
+                       return false;
+               }
+       };
+
+       //copy table data to clipboard
+
+       Tabulator.prototype.copyToClipboard = function (selector) {
+
+               if (this.modExists("clipboard", true)) {
+
+                       this.modules.clipboard.copy(selector);
+               }
+       };
+
+       /////////////// Column Functions  ///////////////
+
+
+       Tabulator.prototype.setColumns = function (definition) {
+
+               this.columnManager.setColumns(definition);
+       };
+
+       Tabulator.prototype.getColumns = function (structured) {
+
+               return this.columnManager.getComponents(structured);
+       };
+
+       Tabulator.prototype.getColumn = function (field) {
+
+               var col = this.columnManager.findColumn(field);
+
+               if (col) {
+
+                       return col.getComponent();
+               } else {
+
+                       console.warn("Find Error - No matching column found:", field);
+
+                       return false;
+               }
+       };
+
+       Tabulator.prototype.getColumnDefinitions = function () {
+
+               return this.columnManager.getDefinitionTree();
+       };
+
+       Tabulator.prototype.getColumnLayout = function () {
+
+               if (this.modExists("persistence", true)) {
+
+                       return this.modules.persistence.parseColumns(this.columnManager.getColumns());
+               }
+       };
+
+       Tabulator.prototype.setColumnLayout = function (layout) {
+
+               if (this.modExists("persistence", true)) {
+
+                       this.columnManager.setColumns(this.modules.persistence.mergeDefinition(this.options.columns, layout));
+
+                       return true;
+               }
+
+               return false;
+       };
+
+       Tabulator.prototype.showColumn = function (field) {
+
+               var column = this.columnManager.findColumn(field);
+
+               if (column) {
+
+                       column.show();
+
+                       if (this.options.responsiveLayout && this.modExists("responsiveLayout", true)) {
+
+                               this.modules.responsiveLayout.update();
+                       }
+               } else {
+
+                       console.warn("Column Show Error - No matching column found:", field);
+
+                       return false;
+               }
+       };
+
+       Tabulator.prototype.hideColumn = function (field) {
+
+               var column = this.columnManager.findColumn(field);
+
+               if (column) {
+
+                       column.hide();
+
+                       if (this.options.responsiveLayout && this.modExists("responsiveLayout", true)) {
+
+                               this.modules.responsiveLayout.update();
+                       }
+               } else {
+
+                       console.warn("Column Hide Error - No matching column found:", field);
+
+                       return false;
+               }
+       };
+
+       Tabulator.prototype.toggleColumn = function (field) {
+
+               var column = this.columnManager.findColumn(field);
+
+               if (column) {
+
+                       if (column.visible) {
+
+                               column.hide();
+                       } else {
+
+                               column.show();
+                       }
+               } else {
+
+                       console.warn("Column Visibility Toggle Error - No matching column found:", field);
+
+                       return false;
+               }
+       };
+
+       Tabulator.prototype.addColumn = function (definition, before, field) {
+               var _this27 = this;
+
+               return new Promise(function (resolve, reject) {
+
+                       var column = _this27.columnManager.findColumn(field);
+
+                       _this27.columnManager.addColumn(definition, before, column).then(function (column) {
+
+                               resolve(column.getComponent());
+                       }).catch(function (err) {
+
+                               reject(err);
+                       });
+               });
+       };
+
+       Tabulator.prototype.deleteColumn = function (field) {
+               var _this28 = this;
+
+               return new Promise(function (resolve, reject) {
+
+                       var column = _this28.columnManager.findColumn(field);
+
+                       if (column) {
+
+                               column.delete().then(function () {
+
+                                       resolve();
+                               }).catch(function (err) {
+
+                                       reject(err);
+                               });
+                       } else {
+
+                               console.warn("Column Delete Error - No matching column found:", field);
+
+                               reject();
+                       }
+               });
+       };
+
+       Tabulator.prototype.updateColumnDefinition = function (field, definition) {
+               var _this29 = this;
+
+               return new Promise(function (resolve, reject) {
+
+                       var column = _this29.columnManager.findColumn(field);
+
+                       if (column) {
+
+                               column.updateDefinition(definition).then(function (col) {
+
+                                       resolve(col);
+                               }).catch(function (err) {
+
+                                       reject(err);
+                               });
+                       } else {
+
+                               console.warn("Column Update Error - No matching column found:", field);
+
+                               reject();
+                       }
+               });
+       };
+
+       Tabulator.prototype.moveColumn = function (from, to, after) {
+
+               var fromColumn = this.columnManager.findColumn(from);
+
+               var toColumn = this.columnManager.findColumn(to);
+
+               if (fromColumn) {
+
+                       if (toColumn) {
+
+                               this.columnManager.moveColumn(fromColumn, toColumn, after);
+                       } else {
+
+                               console.warn("Move Error - No matching column found:", toColumn);
+                       }
+               } else {
+
+                       console.warn("Move Error - No matching column found:", from);
+               }
+       };
+
+       //scroll to column in DOM
+
+       Tabulator.prototype.scrollToColumn = function (field, position, ifVisible) {
+               var _this30 = this;
+
+               return new Promise(function (resolve, reject) {
+
+                       var column = _this30.columnManager.findColumn(field);
+
+                       if (column) {
+
+                               _this30.columnManager.scrollToColumn(column, position, ifVisible).then(function () {
+
+                                       resolve();
+                               }).catch(function (err) {
+
+                                       reject(err);
+                               });
+                       } else {
+
+                               console.warn("Scroll Error - No matching column found:", field);
+
+                               reject("Scroll Error - No matching column found");
+                       }
+               });
+       };
+
+       //////////// Localization Functions  ////////////
+
+       Tabulator.prototype.setLocale = function (locale) {
+
+               this.modules.localize.setLocale(locale);
+       };
+
+       Tabulator.prototype.getLocale = function () {
+
+               return this.modules.localize.getLocale();
+       };
+
+       Tabulator.prototype.getLang = function (locale) {
+
+               return this.modules.localize.getLang(locale);
+       };
+
+       //////////// General Public Functions ////////////
+
+
+       //redraw list without updating data
+
+       Tabulator.prototype.redraw = function (force) {
+
+               this.columnManager.redraw(force);
+
+               this.rowManager.redraw(force);
+       };
+
+       Tabulator.prototype.setHeight = function (height) {
+
+               if (this.rowManager.renderMode !== "classic") {
+
+                       this.options.height = isNaN(height) ? height : height + "px";
+
+                       this.element.style.height = this.options.height;
+
+                       this.rowManager.setRenderMode();
+
+                       this.rowManager.redraw();
+               } else {
+
+                       console.warn("setHeight function is not available in classic render mode");
+               }
+       };
+
+       ///////////////////// Sorting ////////////////////
+
+
+       //trigger sort
+
+       Tabulator.prototype.setSort = function (sortList, dir) {
+
+               if (this.modExists("sort", true)) {
+
+                       this.modules.sort.setSort(sortList, dir);
+
+                       this.rowManager.sorterRefresh();
+               }
+       };
+
+       Tabulator.prototype.getSorters = function () {
+
+               if (this.modExists("sort", true)) {
+
+                       return this.modules.sort.getSort();
+               }
+       };
+
+       Tabulator.prototype.clearSort = function () {
+
+               if (this.modExists("sort", true)) {
+
+                       this.modules.sort.clear();
+
+                       this.rowManager.sorterRefresh();
+               }
+       };
+
+       ///////////////////// Filtering ////////////////////
+
+
+       //set standard filters
+
+       Tabulator.prototype.setFilter = function (field, type, value, params) {
+
+               if (this.modExists("filter", true)) {
+
+                       this.modules.filter.setFilter(field, type, value, params);
+
+                       this.rowManager.filterRefresh();
+               }
+       };
+
+       //add filter to array
+
+       Tabulator.prototype.addFilter = function (field, type, value, params) {
+
+               if (this.modExists("filter", true)) {
+
+                       this.modules.filter.addFilter(field, type, value, params);
+
+                       this.rowManager.filterRefresh();
+               }
+       };
+
+       //get all filters
+
+       Tabulator.prototype.getFilters = function (all) {
+
+               if (this.modExists("filter", true)) {
+
+                       return this.modules.filter.getFilters(all);
+               }
+       };
+
+       Tabulator.prototype.setHeaderFilterFocus = function (field) {
+
+               if (this.modExists("filter", true)) {
+
+                       var column = this.columnManager.findColumn(field);
+
+                       if (column) {
+
+                               this.modules.filter.setHeaderFilterFocus(column);
+                       } else {
+
+                               console.warn("Column Filter Focus Error - No matching column found:", field);
+
+                               return false;
+                       }
+               }
+       };
+
+       Tabulator.prototype.getHeaderFilterValue = function (field) {
+
+               if (this.modExists("filter", true)) {
+
+                       var column = this.columnManager.findColumn(field);
+
+                       if (column) {
+
+                               return this.modules.filter.getHeaderFilterValue(column);
+                       } else {
+
+                               console.warn("Column Filter Error - No matching column found:", field);
+                       }
+               }
+       };
+
+       Tabulator.prototype.setHeaderFilterValue = function (field, value) {
+
+               if (this.modExists("filter", true)) {
+
+                       var column = this.columnManager.findColumn(field);
+
+                       if (column) {
+
+                               this.modules.filter.setHeaderFilterValue(column, value);
+                       } else {
+
+                               console.warn("Column Filter Error - No matching column found:", field);
+
+                               return false;
+                       }
+               }
+       };
+
+       Tabulator.prototype.getHeaderFilters = function () {
+
+               if (this.modExists("filter", true)) {
+
+                       return this.modules.filter.getHeaderFilters();
+               }
+       };
+
+       //remove filter from array
+
+       Tabulator.prototype.removeFilter = function (field, type, value) {
+
+               if (this.modExists("filter", true)) {
+
+                       this.modules.filter.removeFilter(field, type, value);
+
+                       this.rowManager.filterRefresh();
+               }
+       };
+
+       //clear filters
+
+       Tabulator.prototype.clearFilter = function (all) {
+
+               if (this.modExists("filter", true)) {
+
+                       this.modules.filter.clearFilter(all);
+
+                       this.rowManager.filterRefresh();
+               }
+       };
+
+       //clear header filters
+
+       Tabulator.prototype.clearHeaderFilter = function () {
+
+               if (this.modExists("filter", true)) {
+
+                       this.modules.filter.clearHeaderFilter();
+
+                       this.rowManager.filterRefresh();
+               }
+       };
+
+       ///////////////////// select ////////////////////
+
+       Tabulator.prototype.selectRow = function (rows) {
+
+               if (this.modExists("selectRow", true)) {
+
+                       if (rows === true) {
+
+                               console.warn("passing a boolean to the selectRowselectRow function is deprecated, you should now pass the string 'active'");
+
+                               rows = "active";
+                       }
+
+                       this.modules.selectRow.selectRows(rows);
+               }
+       };
+
+       Tabulator.prototype.deselectRow = function (rows) {
+
+               if (this.modExists("selectRow", true)) {
+
+                       this.modules.selectRow.deselectRows(rows);
+               }
+       };
+
+       Tabulator.prototype.toggleSelectRow = function (row) {
+
+               if (this.modExists("selectRow", true)) {
+
+                       this.modules.selectRow.toggleRow(row);
+               }
+       };
+
+       Tabulator.prototype.getSelectedRows = function () {
+
+               if (this.modExists("selectRow", true)) {
+
+                       return this.modules.selectRow.getSelectedRows();
+               }
+       };
+
+       Tabulator.prototype.getSelectedData = function () {
+
+               if (this.modExists("selectRow", true)) {
+
+                       return this.modules.selectRow.getSelectedData();
+               }
+       };
+
+       ///////////////////// validation  ////////////////////
+
+       Tabulator.prototype.getInvalidCells = function () {
+
+               if (this.modExists("validate", true)) {
+
+                       return this.modules.validate.getInvalidCells();
+               }
+       };
+
+       Tabulator.prototype.clearCellValidation = function (cells) {
+               var _this31 = this;
+
+               if (this.modExists("validate", true)) {
+
+                       if (!cells) {
+
+                               cells = this.modules.validate.getInvalidCells();
+                       }
+
+                       if (!Array.isArray(cells)) {
+
+                               cells = [cells];
+                       }
+
+                       cells.forEach(function (cell) {
+
+                               _this31.modules.validate.clearValidation(cell._getSelf());
+                       });
+               }
+       };
+
+       Tabulator.prototype.validate = function (cells) {
+
+               var output = [];
+
+               //clear row data
+
+               this.rowManager.rows.forEach(function (row) {
+
+                       var valid = row.validate();
+
+                       if (valid !== true) {
+
+                               output = output.concat(valid);
+                       }
+               });
+
+               return output.length ? output : true;
+       };
+
+       //////////// Pagination Functions  ////////////
+
+
+       Tabulator.prototype.setMaxPage = function (max) {
+
+               if (this.options.pagination && this.modExists("page")) {
+
+                       this.modules.page.setMaxPage(max);
+               } else {
+
+                       return false;
+               }
+       };
+
+       Tabulator.prototype.setPage = function (page) {
+
+               if (this.options.pagination && this.modExists("page")) {
+
+                       return this.modules.page.setPage(page);
+               } else {
+
+                       return new Promise(function (resolve, reject) {
+                               reject();
+                       });
+               }
+       };
+
+       Tabulator.prototype.setPageToRow = function (row) {
+               var _this32 = this;
+
+               return new Promise(function (resolve, reject) {
+
+                       if (_this32.options.pagination && _this32.modExists("page")) {
+
+                               row = _this32.rowManager.findRow(row);
+
+                               if (row) {
+
+                                       _this32.modules.page.setPageToRow(row).then(function () {
+
+                                               resolve();
+                                       }).catch(function () {
+
+                                               reject();
+                                       });
+                               } else {
+
+                                       reject();
+                               }
+                       } else {
+
+                               reject();
+                       }
+               });
+       };
+
+       Tabulator.prototype.setPageSize = function (size) {
+
+               if (this.options.pagination && this.modExists("page")) {
+
+                       this.modules.page.setPageSize(size);
+
+                       this.modules.page.setPage(1).then(function () {}).catch(function () {});
+               } else {
+
+                       return false;
+               }
+       };
+
+       Tabulator.prototype.getPageSize = function () {
+
+               if (this.options.pagination && this.modExists("page", true)) {
+
+                       return this.modules.page.getPageSize();
+               }
+       };
+
+       Tabulator.prototype.previousPage = function () {
+
+               if (this.options.pagination && this.modExists("page")) {
+
+                       this.modules.page.previousPage();
+               } else {
+
+                       return false;
+               }
+       };
+
+       Tabulator.prototype.nextPage = function () {
+
+               if (this.options.pagination && this.modExists("page")) {
+
+                       this.modules.page.nextPage();
+               } else {
+
+                       return false;
+               }
+       };
+
+       Tabulator.prototype.getPage = function () {
+
+               if (this.options.pagination && this.modExists("page")) {
+
+                       return this.modules.page.getPage();
+               } else {
+
+                       return false;
+               }
+       };
+
+       Tabulator.prototype.getPageMax = function () {
+
+               if (this.options.pagination && this.modExists("page")) {
+
+                       return this.modules.page.getPageMax();
+               } else {
+
+                       return false;
+               }
+       };
+
+       ///////////////// Grouping Functions ///////////////
+
+
+       Tabulator.prototype.setGroupBy = function (groups) {
+
+               if (this.modExists("groupRows", true)) {
+
+                       this.options.groupBy = groups;
+
+                       this.modules.groupRows.initialize();
+
+                       this.rowManager.refreshActiveData("display");
+
+                       if (this.options.persistence && this.modExists("persistence", true) && this.modules.persistence.config.group) {
+
+                               this.modules.persistence.save("group");
+                       }
+               } else {
+
+                       return false;
+               }
+       };
+
+       Tabulator.prototype.setGroupStartOpen = function (values) {
+
+               if (this.modExists("groupRows", true)) {
+
+                       this.options.groupStartOpen = values;
+
+                       this.modules.groupRows.initialize();
+
+                       if (this.options.groupBy) {
+
+                               this.rowManager.refreshActiveData("group");
+
+                               if (this.options.persistence && this.modExists("persistence", true) && this.modules.persistence.config.group) {
+
+                                       this.modules.persistence.save("group");
+                               }
+                       } else {
+
+                               console.warn("Grouping Update - cant refresh view, no groups have been set");
+                       }
+               } else {
+
+                       return false;
+               }
+       };
+
+       Tabulator.prototype.setGroupHeader = function (values) {
+
+               if (this.modExists("groupRows", true)) {
+
+                       this.options.groupHeader = values;
+
+                       this.modules.groupRows.initialize();
+
+                       if (this.options.groupBy) {
+
+                               this.rowManager.refreshActiveData("group");
+
+                               if (this.options.persistence && this.modExists("persistence", true) && this.modules.persistence.config.group) {
+
+                                       this.modules.persistence.save("group");
+                               }
+                       } else {
+
+                               console.warn("Grouping Update - cant refresh view, no groups have been set");
+                       }
+               } else {
+
+                       return false;
+               }
+       };
+
+       Tabulator.prototype.getGroups = function (values) {
+
+               if (this.modExists("groupRows", true)) {
+
+                       return this.modules.groupRows.getGroups(true);
+               } else {
+
+                       return false;
+               }
+       };
+
+       // get grouped table data in the same format as getData()
+
+       Tabulator.prototype.getGroupedData = function () {
+
+               if (this.modExists("groupRows", true)) {
+
+                       return this.options.groupBy ? this.modules.groupRows.getGroupedData() : this.getData();
+               }
+       };
+
+       Tabulator.prototype.getEditedCells = function () {
+
+               if (this.modExists("edit", true)) {
+
+                       return this.modules.edit.getEditedCells();
+               }
+       };
+
+       Tabulator.prototype.clearCellEdited = function (cells) {
+               var _this33 = this;
+
+               if (this.modExists("edit", true)) {
+
+                       if (!cells) {
+
+                               cells = this.modules.edit.getEditedCells();
+                       }
+
+                       if (!Array.isArray(cells)) {
+
+                               cells = [cells];
+                       }
+
+                       cells.forEach(function (cell) {
+
+                               _this33.modules.edit.clearEdited(cell._getSelf());
+                       });
+               }
+       };
+
+       ///////////////// Column Calculation Functions ///////////////
+
+       Tabulator.prototype.getCalcResults = function () {
+
+               if (this.modExists("columnCalcs", true)) {
+
+                       return this.modules.columnCalcs.getResults();
+               } else {
+
+                       return false;
+               }
+       };
+
+       Tabulator.prototype.recalc = function () {
+
+               if (this.modExists("columnCalcs", true)) {
+
+                       this.modules.columnCalcs.recalcAll(this.rowManager.activeRows);
+               }
+       };
+
+       /////////////// Navigation Management //////////////
+
+
+       Tabulator.prototype.navigatePrev = function () {
+
+               var cell = false;
+
+               if (this.modExists("edit", true)) {
+
+                       cell = this.modules.edit.currentCell;
+
+                       if (cell) {
+
+                               return cell.nav().prev();
+                       }
+               }
+
+               return false;
+       };
+
+       Tabulator.prototype.navigateNext = function () {
+
+               var cell = false;
+
+               if (this.modExists("edit", true)) {
+
+                       cell = this.modules.edit.currentCell;
+
+                       if (cell) {
+
+                               return cell.nav().next();
+                       }
+               }
+
+               return false;
+       };
+
+       Tabulator.prototype.navigateLeft = function () {
+
+               var cell = false;
+
+               if (this.modExists("edit", true)) {
+
+                       cell = this.modules.edit.currentCell;
+
+                       if (cell) {
+
+                               e.preventDefault();
+
+                               return cell.nav().left();
+                       }
+               }
+
+               return false;
+       };
+
+       Tabulator.prototype.navigateRight = function () {
+
+               var cell = false;
+
+               if (this.modExists("edit", true)) {
+
+                       cell = this.modules.edit.currentCell;
+
+                       if (cell) {
+
+                               e.preventDefault();
+
+                               return cell.nav().right();
+                       }
+               }
+
+               return false;
+       };
+
+       Tabulator.prototype.navigateUp = function () {
+
+               var cell = false;
+
+               if (this.modExists("edit", true)) {
+
+                       cell = this.modules.edit.currentCell;
+
+                       if (cell) {
+
+                               e.preventDefault();
+
+                               return cell.nav().up();
+                       }
+               }
+
+               return false;
+       };
+
+       Tabulator.prototype.navigateDown = function () {
+
+               var cell = false;
+
+               if (this.modExists("edit", true)) {
+
+                       cell = this.modules.edit.currentCell;
+
+                       if (cell) {
+
+                               e.preventDefault();
+
+                               return cell.nav().down();
+                       }
+               }
+
+               return false;
+       };
+
+       /////////////// History Management //////////////
+
+       Tabulator.prototype.undo = function () {
+
+               if (this.options.history && this.modExists("history", true)) {
+
+                       return this.modules.history.undo();
+               } else {
+
+                       return false;
+               }
+       };
+
+       Tabulator.prototype.redo = function () {
+
+               if (this.options.history && this.modExists("history", true)) {
+
+                       return this.modules.history.redo();
+               } else {
+
+                       return false;
+               }
+       };
+
+       Tabulator.prototype.getHistoryUndoSize = function () {
+
+               if (this.options.history && this.modExists("history", true)) {
+
+                       return this.modules.history.getHistoryUndoSize();
+               } else {
+
+                       return false;
+               }
+       };
+
+       Tabulator.prototype.getHistoryRedoSize = function () {
+
+               if (this.options.history && this.modExists("history", true)) {
+
+                       return this.modules.history.getHistoryRedoSize();
+               } else {
+
+                       return false;
+               }
+       };
+
+       /////////////// Download Management //////////////
+
+
+       Tabulator.prototype.download = function (type, filename, options, active) {
+
+               if (this.modExists("download", true)) {
+
+                       this.modules.download.download(type, filename, options, active);
+               }
+       };
+
+       Tabulator.prototype.downloadToTab = function (type, filename, options, active) {
+
+               if (this.modExists("download", true)) {
+
+                       this.modules.download.download(type, filename, options, active, true);
+               }
+       };
+
+       /////////// Inter Table Communications ///////////
+
+
+       Tabulator.prototype.tableComms = function (table, module, action, data) {
+
+               this.modules.comms.receive(table, module, action, data);
+       };
+
+       ////////////// Extension Management //////////////
+
+
+       //object to hold module
+
+       Tabulator.prototype.moduleBindings = {};
+
+       //extend module
+
+       Tabulator.prototype.extendModule = function (name, property, values) {
+
+               if (Tabulator.prototype.moduleBindings[name]) {
+
+                       var source = Tabulator.prototype.moduleBindings[name].prototype[property];
+
+                       if (source) {
+
+                               if ((typeof values === 'undefined' ? 'undefined' : _typeof(values)) == "object") {
+
+                                       for (var key in values) {
+
+                                               source[key] = values[key];
+                                       }
+                               } else {
+
+                                       console.warn("Module Error - Invalid value type, it must be an object");
+                               }
+                       } else {
+
+                               console.warn("Module Error - property does not exist:", property);
+                       }
+               } else {
+
+                       console.warn("Module Error - module does not exist:", name);
+               }
+       };
+
+       //add module to tabulator
+
+       Tabulator.prototype.registerModule = function (name, module) {
+
+               var self = this;
+
+               Tabulator.prototype.moduleBindings[name] = module;
+       };
+
+       //ensure that module are bound to instantiated function
+
+       Tabulator.prototype.bindModules = function () {
+
+               this.modules = {};
+
+               for (var name in Tabulator.prototype.moduleBindings) {
+
+                       this.modules[name] = new Tabulator.prototype.moduleBindings[name](this);
+               }
+       };
+
+       //Check for module
+
+       Tabulator.prototype.modExists = function (plugin, required) {
+
+               if (this.modules[plugin]) {
+
+                       return true;
+               } else {
+
+                       if (required) {
+
+                               console.error("Tabulator Module Not Installed: " + plugin);
+                       }
+
+                       return false;
+               }
+       };
+
+       Tabulator.prototype.helpers = {
+
+               elVisible: function elVisible(el) {
+
+                       return !(el.offsetWidth <= 0 && el.offsetHeight <= 0);
+               },
+
+               elOffset: function elOffset(el) {
+
+                       var box = el.getBoundingClientRect();
+
+                       return {
+
+                               top: box.top + window.pageYOffset - document.documentElement.clientTop,
+
+                               left: box.left + window.pageXOffset - document.documentElement.clientLeft
+
+                       };
+               },
+
+               deepClone: function deepClone(obj) {
+
+                       var clone = Array.isArray(obj) ? [] : {};
+
+                       for (var i in obj) {
+
+                               if (obj[i] != null && _typeof(obj[i]) === "object") {
+
+                                       if (obj[i] instanceof Date) {
+
+                                               clone[i] = new Date(obj[i]);
+                                       } else {
+
+                                               clone[i] = this.deepClone(obj[i]);
+                                       }
+                               } else {
+
+                                       clone[i] = obj[i];
+                               }
+                       }
+
+                       return clone;
+               }
+
+       };
+
+       Tabulator.prototype.comms = {
+
+               tables: [],
+
+               register: function register(table) {
+
+                       Tabulator.prototype.comms.tables.push(table);
+               },
+
+               deregister: function deregister(table) {
+
+                       var index = Tabulator.prototype.comms.tables.indexOf(table);
+
+                       if (index > -1) {
+
+                               Tabulator.prototype.comms.tables.splice(index, 1);
+                       }
+               },
+
+               lookupTable: function lookupTable(query, silent) {
+
+                       var results = [],
+                           matches,
+                           match;
+
+                       if (typeof query === "string") {
+
+                               matches = document.querySelectorAll(query);
+
+                               if (matches.length) {
+
+                                       for (var i = 0; i < matches.length; i++) {
+
+                                               match = Tabulator.prototype.comms.matchElement(matches[i]);
+
+                                               if (match) {
+
+                                                       results.push(match);
+                                               }
+                                       }
+                               }
+                       } else if (typeof HTMLElement !== "undefined" && query instanceof HTMLElement || query instanceof Tabulator) {
+
+                               match = Tabulator.prototype.comms.matchElement(query);
+
+                               if (match) {
+
+                                       results.push(match);
+                               }
+                       } else if (Array.isArray(query)) {
+
+                               query.forEach(function (item) {
+
+                                       results = results.concat(Tabulator.prototype.comms.lookupTable(item));
+                               });
+                       } else {
+
+                               if (!silent) {
+
+                                       console.warn("Table Connection Error - Invalid Selector", query);
+                               }
+                       }
+
+                       return results;
+               },
+
+               matchElement: function matchElement(element) {
+
+                       return Tabulator.prototype.comms.tables.find(function (table) {
+
+                               return element instanceof Tabulator ? table === element : table.element === element;
+                       });
+               }
+
+       };
+
+       Tabulator.prototype.findTable = function (query) {
+
+               var results = Tabulator.prototype.comms.lookupTable(query, true);
+
+               return Array.isArray(results) && !results.length ? false : results;
+       };
+
+       var Layout = function Layout(table) {
+
+               this.table = table;
+
+               this.mode = null;
+       };
+
+       //initialize layout system
+
+
+       Layout.prototype.initialize = function (layout) {
+
+               if (this.modes[layout]) {
+
+                       this.mode = layout;
+               } else {
+
+                       console.warn("Layout Error - invalid mode set, defaulting to 'fitData' : " + layout);
+
+                       this.mode = 'fitData';
+               }
+
+               this.table.element.setAttribute("tabulator-layout", this.mode);
+       };
+
+       Layout.prototype.getMode = function () {
+
+               return this.mode;
+       };
+
+       //trigger table layout
+
+
+       Layout.prototype.layout = function () {
+
+               this.modes[this.mode].call(this, this.table.columnManager.columnsByIndex);
+       };
+
+       //layout render functions
+
+
+       Layout.prototype.modes = {
+
+               //resize columns to fit data they contain
+
+
+               "fitData": function fitData(columns) {
+
+                       columns.forEach(function (column) {
+
+                               column.reinitializeWidth();
+                       });
+
+                       if (this.table.options.responsiveLayout && this.table.modExists("responsiveLayout", true)) {
+
+                               this.table.modules.responsiveLayout.update();
+                       }
+               },
+
+               //resize columns to fit data they contain and stretch row to fill table
+
+
+               "fitDataFill": function fitDataFill(columns) {
+
+                       columns.forEach(function (column) {
+
+                               column.reinitializeWidth();
+                       });
+
+                       if (this.table.options.responsiveLayout && this.table.modExists("responsiveLayout", true)) {
+
+                               this.table.modules.responsiveLayout.update();
+                       }
+               },
+
+               //resize columns to fit data they contain
+
+
+               "fitDataTable": function fitDataTable(columns) {
+
+                       columns.forEach(function (column) {
+
+                               column.reinitializeWidth();
+                       });
+
+                       if (this.table.options.responsiveLayout && this.table.modExists("responsiveLayout", true)) {
+
+                               this.table.modules.responsiveLayout.update();
+                       }
+               },
+
+               //resize columns to fit data the contain and stretch last column to fill table
+
+
+               "fitDataStretch": function fitDataStretch(columns) {
+                       var _this34 = this;
+
+                       var colsWidth = 0,
+                           tableWidth = this.table.rowManager.element.clientWidth,
+                           gap = 0,
+                           lastCol = false;
+
+                       columns.forEach(function (column, i) {
+
+                               if (!column.widthFixed) {
+
+                                       column.reinitializeWidth();
+                               }
+
+                               if (_this34.table.options.responsiveLayout ? column.modules.responsive.visible : column.visible) {
+
+                                       lastCol = column;
+                               }
+
+                               if (column.visible) {
+
+                                       colsWidth += column.getWidth();
+                               }
+                       });
+
+                       if (lastCol) {
+
+                               gap = tableWidth - colsWidth + lastCol.getWidth();
+
+                               if (this.table.options.responsiveLayout && this.table.modExists("responsiveLayout", true)) {
+
+                                       lastCol.setWidth(0);
+
+                                       this.table.modules.responsiveLayout.update();
+                               }
+
+                               if (gap > 0) {
+
+                                       lastCol.setWidth(gap);
+                               } else {
+
+                                       lastCol.reinitializeWidth();
+                               }
+                       } else {
+
+                               if (this.table.options.responsiveLayout && this.table.modExists("responsiveLayout", true)) {
+
+                                       this.table.modules.responsiveLayout.update();
+                               }
+                       }
+               },
+
+               //resize columns to fit
+
+
+               "fitColumns": function fitColumns(columns) {
+
+                       var self = this;
+
+                       var totalWidth = self.table.element.clientWidth; //table element width
+
+
+                       var fixedWidth = 0; //total width of columns with a defined width
+
+
+                       var flexWidth = 0; //total width available to flexible columns
+
+
+                       var flexGrowUnits = 0; //total number of widthGrow blocks accross all columns
+
+
+                       var flexColWidth = 0; //desired width of flexible columns
+
+
+                       var flexColumns = []; //array of flexible width columns
+
+
+                       var fixedShrinkColumns = []; //array of fixed width columns that can shrink
+
+
+                       var flexShrinkUnits = 0; //total number of widthShrink blocks accross all columns
+
+
+                       var overflowWidth = 0; //horizontal overflow width
+
+
+                       var gapFill = 0; //number of pixels to be added to final column to close and half pixel gaps
+
+
+                       function calcWidth(width) {
+
+                               var colWidth;
+
+                               if (typeof width == "string") {
+
+                                       if (width.indexOf("%") > -1) {
+
+                                               colWidth = totalWidth / 100 * parseInt(width);
+                                       } else {
+
+                                               colWidth = parseInt(width);
+                                       }
+                               } else {
+
+                                       colWidth = width;
+                               }
+
+                               return colWidth;
+                       }
+
+                       //ensure columns resize to take up the correct amount of space
+
+
+                       function scaleColumns(columns, freeSpace, colWidth, shrinkCols) {
+
+                               var oversizeCols = [],
+                                   oversizeSpace = 0,
+                                   remainingSpace = 0,
+                                   nextColWidth = 0,
+                                   gap = 0,
+                                   changeUnits = 0,
+                                   undersizeCols = [];
+
+                               function calcGrow(col) {
+
+                                       return colWidth * (col.column.definition.widthGrow || 1);
+                               }
+
+                               function calcShrink(col) {
+
+                                       return calcWidth(col.width) - colWidth * (col.column.definition.widthShrink || 0);
+                               }
+
+                               columns.forEach(function (col, i) {
+
+                                       var width = shrinkCols ? calcShrink(col) : calcGrow(col);
+
+                                       if (col.column.minWidth >= width) {
+
+                                               oversizeCols.push(col);
+                                       } else {
+
+                                               undersizeCols.push(col);
+
+                                               changeUnits += shrinkCols ? col.column.definition.widthShrink || 1 : col.column.definition.widthGrow || 1;
+                                       }
+                               });
+
+                               if (oversizeCols.length) {
+
+                                       oversizeCols.forEach(function (col) {
+
+                                               oversizeSpace += shrinkCols ? col.width - col.column.minWidth : col.column.minWidth;
+
+                                               col.width = col.column.minWidth;
+                                       });
+
+                                       remainingSpace = freeSpace - oversizeSpace;
+
+                                       nextColWidth = changeUnits ? Math.floor(remainingSpace / changeUnits) : remainingSpace;
+
+                                       gap = remainingSpace - nextColWidth * changeUnits;
+
+                                       gap += scaleColumns(undersizeCols, remainingSpace, nextColWidth, shrinkCols);
+                               } else {
+
+                                       gap = changeUnits ? freeSpace - Math.floor(freeSpace / changeUnits) * changeUnits : freeSpace;
+
+                                       undersizeCols.forEach(function (column) {
+
+                                               column.width = shrinkCols ? calcShrink(column) : calcGrow(column);
+                                       });
+                               }
+
+                               return gap;
+                       }
+
+                       if (this.table.options.responsiveLayout && this.table.modExists("responsiveLayout", true)) {
+
+                               this.table.modules.responsiveLayout.update();
+                       }
+
+                       //adjust for vertical scrollbar if present
+
+
+                       if (this.table.rowManager.element.scrollHeight > this.table.rowManager.element.clientHeight) {
+
+                               totalWidth -= this.table.rowManager.element.offsetWidth - this.table.rowManager.element.clientWidth;
+                       }
+
+                       columns.forEach(function (column) {
+
+                               var width, minWidth, colWidth;
+
+                               if (column.visible) {
+
+                                       width = column.definition.width;
+
+                                       minWidth = parseInt(column.minWidth);
+
+                                       if (width) {
+
+                                               colWidth = calcWidth(width);
+
+                                               fixedWidth += colWidth > minWidth ? colWidth : minWidth;
+
+                                               if (column.definition.widthShrink) {
+
+                                                       fixedShrinkColumns.push({
+
+                                                               column: column,
+
+                                                               width: colWidth > minWidth ? colWidth : minWidth
+
+                                                       });
+
+                                                       flexShrinkUnits += column.definition.widthShrink;
+                                               }
+                                       } else {
+
+                                               flexColumns.push({
+
+                                                       column: column,
+
+                                                       width: 0
+
+                                               });
+
+                                               flexGrowUnits += column.definition.widthGrow || 1;
+                                       }
+                               }
+                       });
+
+                       //calculate available space
+
+
+                       flexWidth = totalWidth - fixedWidth;
+
+                       //calculate correct column size
+
+
+                       flexColWidth = Math.floor(flexWidth / flexGrowUnits);
+
+                       //generate column widths
+
+
+                       var gapFill = scaleColumns(flexColumns, flexWidth, flexColWidth, false);
+
+                       //increase width of last column to account for rounding errors
+
+
+                       if (flexColumns.length && gapFill > 0) {
+
+                               flexColumns[flexColumns.length - 1].width += +gapFill;
+                       }
+
+                       //caculate space for columns to be shrunk into
+
+
+                       flexColumns.forEach(function (col) {
+
+                               flexWidth -= col.width;
+                       });
+
+                       overflowWidth = Math.abs(gapFill) + flexWidth;
+
+                       //shrink oversize columns if there is no available space
+
+
+                       if (overflowWidth > 0 && flexShrinkUnits) {
+
+                               gapFill = scaleColumns(fixedShrinkColumns, overflowWidth, Math.floor(overflowWidth / flexShrinkUnits), true);
+                       }
+
+                       //decrease width of last column to account for rounding errors
+
+
+                       if (fixedShrinkColumns.length) {
+
+                               fixedShrinkColumns[fixedShrinkColumns.length - 1].width -= gapFill;
+                       }
+
+                       flexColumns.forEach(function (col) {
+
+                               col.column.setWidth(col.width);
+                       });
+
+                       fixedShrinkColumns.forEach(function (col) {
+
+                               col.column.setWidth(col.width);
+                       });
+               }
+
+       };
+
+       Tabulator.prototype.registerModule("layout", Layout);
+
+       var Localize = function Localize(table) {
+
+               this.table = table; //hold Tabulator object
+
+               this.locale = "default"; //current locale
+
+               this.lang = false; //current language
+
+               this.bindings = {}; //update events to call when locale is changed
+       };
+
+       //set header placehoder
+
+       Localize.prototype.setHeaderFilterPlaceholder = function (placeholder) {
+
+               this.langs.default.headerFilters.default = placeholder;
+       };
+
+       //set header filter placeholder by column
+
+       Localize.prototype.setHeaderFilterColumnPlaceholder = function (column, placeholder) {
+
+               this.langs.default.headerFilters.columns[column] = placeholder;
+
+               if (this.lang && !this.lang.headerFilters.columns[column]) {
+
+                       this.lang.headerFilters.columns[column] = placeholder;
+               }
+       };
+
+       //setup a lang description object
+
+       Localize.prototype.installLang = function (locale, lang) {
+
+               if (this.langs[locale]) {
+
+                       this._setLangProp(this.langs[locale], lang);
+               } else {
+
+                       this.langs[locale] = lang;
+               }
+       };
+
+       Localize.prototype._setLangProp = function (lang, values) {
+
+               for (var key in values) {
+
+                       if (lang[key] && _typeof(lang[key]) == "object") {
+
+                               this._setLangProp(lang[key], values[key]);
+                       } else {
+
+                               lang[key] = values[key];
+                       }
+               }
+       };
+
+       //set current locale
+
+       Localize.prototype.setLocale = function (desiredLocale) {
+
+               var self = this;
+
+               desiredLocale = desiredLocale || "default";
+
+               //fill in any matching languge values
+
+               function traverseLang(trans, path) {
+
+                       for (var prop in trans) {
+
+                               if (_typeof(trans[prop]) == "object") {
+
+                                       if (!path[prop]) {
+
+                                               path[prop] = {};
+                                       }
+
+                                       traverseLang(trans[prop], path[prop]);
+                               } else {
+
+                                       path[prop] = trans[prop];
+                               }
+                       }
+               }
+
+               //determing correct locale to load
+
+               if (desiredLocale === true && navigator.language) {
+
+                       //get local from system
+
+                       desiredLocale = navigator.language.toLowerCase();
+               }
+
+               if (desiredLocale) {
+
+                       //if locale is not set, check for matching top level locale else use default
+
+                       if (!self.langs[desiredLocale]) {
+
+                               var prefix = desiredLocale.split("-")[0];
+
+                               if (self.langs[prefix]) {
+
+                                       console.warn("Localization Error - Exact matching locale not found, using closest match: ", desiredLocale, prefix);
+
+                                       desiredLocale = prefix;
+                               } else {
+
+                                       console.warn("Localization Error - Matching locale not found, using default: ", desiredLocale);
+
+                                       desiredLocale = "default";
+                               }
+                       }
+               }
+
+               self.locale = desiredLocale;
+
+               //load default lang template
+
+               self.lang = Tabulator.prototype.helpers.deepClone(self.langs.default || {});
+
+               if (desiredLocale != "default") {
+
+                       traverseLang(self.langs[desiredLocale], self.lang);
+               }
+
+               self.table.options.localized.call(self.table, self.locale, self.lang);
+
+               self._executeBindings();
+       };
+
+       //get current locale
+
+       Localize.prototype.getLocale = function (locale) {
+
+               return self.locale;
+       };
+
+       //get lang object for given local or current if none provided
+
+       Localize.prototype.getLang = function (locale) {
+
+               return locale ? this.langs[locale] : this.lang;
+       };
+
+       //get text for current locale
+
+       Localize.prototype.getText = function (path, value) {
+
+               var path = value ? path + "|" + value : path,
+                   pathArray = path.split("|"),
+                   text = this._getLangElement(pathArray, this.locale);
+
+               // if(text === false){
+
+               //      console.warn("Localization Error - Matching localized text not found for given path: ", path);
+
+               // }
+
+
+               return text || "";
+       };
+
+       //traverse langs object and find localized copy
+
+       Localize.prototype._getLangElement = function (path, locale) {
+
+               var self = this;
+
+               var root = self.lang;
+
+               path.forEach(function (level) {
+
+                       var rootPath;
+
+                       if (root) {
+
+                               rootPath = root[level];
+
+                               if (typeof rootPath != "undefined") {
+
+                                       root = rootPath;
+                               } else {
+
+                                       root = false;
+                               }
+                       }
+               });
+
+               return root;
+       };
+
+       //set update binding
+
+       Localize.prototype.bind = function (path, callback) {
+
+               if (!this.bindings[path]) {
+
+                       this.bindings[path] = [];
+               }
+
+               this.bindings[path].push(callback);
+
+               callback(this.getText(path), this.lang);
+       };
+
+       //itterate through bindings and trigger updates
+
+       Localize.prototype._executeBindings = function () {
+
+               var self = this;
+
+               var _loop = function _loop(path) {
+
+                       self.bindings[path].forEach(function (binding) {
+
+                               binding(self.getText(path), self.lang);
+                       });
+               };
+
+               for (var path in self.bindings) {
+                       _loop(path);
+               }
+       };
+
+       //Localized text listings
+
+       Localize.prototype.langs = {
+
+               "default": { //hold default locale text
+
+                       "groups": {
+
+                               "item": "item",
+
+                               "items": "items"
+
+                       },
+
+                       "columns": {},
+
+                       "ajax": {
+
+                               "loading": "Loading",
+
+                               "error": "Error"
+
+                       },
+
+                       "pagination": {
+
+                               "page_size": "Page Size",
+
+                               "page_title": "Show Page",
+
+                               "first": "First",
+
+                               "first_title": "First Page",
+
+                               "last": "Last",
+
+                               "last_title": "Last Page",
+
+                               "prev": "Prev",
+
+                               "prev_title": "Prev Page",
+
+                               "next": "Next",
+
+                               "next_title": "Next Page",
+
+                               "all": "All"
+
+                       },
+
+                       "headerFilters": {
+
+                               "default": "filter column...",
+
+                               "columns": {}
+
+                       }
+
+               }
+
+       };
+
+       Tabulator.prototype.registerModule("localize", Localize);
+
+       var Comms = function Comms(table) {
+
+               this.table = table;
+       };
+
+       Comms.prototype.getConnections = function (selectors) {
+
+               var self = this,
+                   connections = [],
+                   connection;
+
+               connection = Tabulator.prototype.comms.lookupTable(selectors);
+
+               connection.forEach(function (con) {
+
+                       if (self.table !== con) {
+
+                               connections.push(con);
+                       }
+               });
+
+               return connections;
+       };
+
+       Comms.prototype.send = function (selectors, module, action, data) {
+
+               var self = this,
+                   connections = this.getConnections(selectors);
+
+               connections.forEach(function (connection) {
+
+                       connection.tableComms(self.table.element, module, action, data);
+               });
+
+               if (!connections.length && selectors) {
+
+                       console.warn("Table Connection Error - No tables matching selector found", selectors);
+               }
+       };
+
+       Comms.prototype.receive = function (table, module, action, data) {
+
+               if (this.table.modExists(module)) {
+
+                       return this.table.modules[module].commsReceived(table, action, data);
+               } else {
+
+                       console.warn("Inter-table Comms Error - no such module:", module);
+               }
+       };
+
+       Tabulator.prototype.registerModule("comms", Comms);
+
+       var Accessor = function Accessor(table) {
+               this.table = table; //hold Tabulator object
+               this.allowedTypes = ["", "data", "download", "clipboard", "print", "htmlOutput"]; //list of accessor types
+       };
+
+       //initialize column accessor
+       Accessor.prototype.initializeColumn = function (column) {
+               var self = this,
+                   match = false,
+                   config = {};
+
+               this.allowedTypes.forEach(function (type) {
+                       var key = "accessor" + (type.charAt(0).toUpperCase() + type.slice(1)),
+                           accessor;
+
+                       if (column.definition[key]) {
+                               accessor = self.lookupAccessor(column.definition[key]);
+
+                               if (accessor) {
+                                       match = true;
+
+                                       config[key] = {
+                                               accessor: accessor,
+                                               params: column.definition[key + "Params"] || {}
+                                       };
+                               }
+                       }
+               });
+
+               if (match) {
+                       column.modules.accessor = config;
+               }
+       };
+
+       Accessor.prototype.lookupAccessor = function (value) {
+               var accessor = false;
+
+               //set column accessor
+               switch (typeof value === 'undefined' ? 'undefined' : _typeof(value)) {
+                       case "string":
+                               if (this.accessors[value]) {
+                                       accessor = this.accessors[value];
+                               } else {
+                                       console.warn("Accessor Error - No such accessor found, ignoring: ", value);
+                               }
+                               break;
+
+                       case "function":
+                               accessor = value;
+                               break;
+               }
+
+               return accessor;
+       };
+
+       //apply accessor to row
+       Accessor.prototype.transformRow = function (dataIn, type) {
+               var self = this,
+                   key = "accessor" + (type.charAt(0).toUpperCase() + type.slice(1));
+
+               //clone data object with deep copy to isolate internal data from returned result
+               var data = Tabulator.prototype.helpers.deepClone(dataIn || {});
+
+               self.table.columnManager.traverse(function (column) {
+                       var value, accessor, params, component;
+
+                       if (column.modules.accessor) {
+
+                               accessor = column.modules.accessor[key] || column.modules.accessor.accessor || false;
+
+                               if (accessor) {
+                                       value = column.getFieldValue(data);
+
+                                       if (value != "undefined") {
+                                               component = column.getComponent();
+                                               params = typeof accessor.params === "function" ? accessor.params(value, data, type, component) : accessor.params;
+                                               column.setFieldValue(data, accessor.accessor(value, data, type, params, component));
+                                       }
+                               }
+                       }
+               });
+
+               return data;
+       },
+
+       //default accessors
+       Accessor.prototype.accessors = {};
+
+       Tabulator.prototype.registerModule("accessor", Accessor);
+       var Ajax = function Ajax(table) {
+
+               this.table = table; //hold Tabulator object
+               this.config = false; //hold config object for ajax request
+               this.url = ""; //request URL
+               this.urlGenerator = false;
+               this.params = false; //request parameters
+
+               this.loaderElement = this.createLoaderElement(); //loader message div
+               this.msgElement = this.createMsgElement(); //message element
+               this.loadingElement = false;
+               this.errorElement = false;
+               this.loaderPromise = false;
+
+               this.progressiveLoad = false;
+               this.loading = false;
+
+               this.requestOrder = 0; //prevent requests comming out of sequence if overridden by another load request
+       };
+
+       //initialize setup options
+       Ajax.prototype.initialize = function () {
+               var template;
+
+               this.loaderElement.appendChild(this.msgElement);
+
+               if (this.table.options.ajaxLoaderLoading) {
+                       if (typeof this.table.options.ajaxLoaderLoading == "string") {
+                               template = document.createElement('template');
+                               template.innerHTML = this.table.options.ajaxLoaderLoading.trim();
+                               this.loadingElement = template.content.firstChild;
+                       } else {
+                               this.loadingElement = this.table.options.ajaxLoaderLoading;
+                       }
+               }
+
+               this.loaderPromise = this.table.options.ajaxRequestFunc || this.defaultLoaderPromise;
+
+               this.urlGenerator = this.table.options.ajaxURLGenerator || this.defaultURLGenerator;
+
+               if (this.table.options.ajaxLoaderError) {
+                       if (typeof this.table.options.ajaxLoaderError == "string") {
+                               template = document.createElement('template');
+                               template.innerHTML = this.table.options.ajaxLoaderError.trim();
+                               this.errorElement = template.content.firstChild;
+                       } else {
+                               this.errorElement = this.table.options.ajaxLoaderError;
+                       }
+               }
+
+               if (this.table.options.ajaxParams) {
+                       this.setParams(this.table.options.ajaxParams);
+               }
+
+               if (this.table.options.ajaxConfig) {
+                       this.setConfig(this.table.options.ajaxConfig);
+               }
+
+               if (this.table.options.ajaxURL) {
+                       this.setUrl(this.table.options.ajaxURL);
+               }
+
+               if (this.table.options.ajaxProgressiveLoad) {
+                       if (this.table.options.pagination) {
+                               this.progressiveLoad = false;
+                               console.error("Progressive Load Error - Pagination and progressive load cannot be used at the same time");
+                       } else {
+                               if (this.table.modExists("page")) {
+                                       this.progressiveLoad = this.table.options.ajaxProgressiveLoad;
+                                       this.table.modules.page.initializeProgressive(this.progressiveLoad);
+                               } else {
+                                       console.error("Pagination plugin is required for progressive ajax loading");
+                               }
+                       }
+               }
+       };
+
+       Ajax.prototype.createLoaderElement = function () {
+               var el = document.createElement("div");
+               el.classList.add("tabulator-loader");
+               return el;
+       };
+
+       Ajax.prototype.createMsgElement = function () {
+               var el = document.createElement("div");
+
+               el.classList.add("tabulator-loader-msg");
+               el.setAttribute("role", "alert");
+
+               return el;
+       };
+
+       //set ajax params
+       Ajax.prototype.setParams = function (params, update) {
+               if (update) {
+                       this.params = this.params || {};
+
+                       for (var key in params) {
+                               this.params[key] = params[key];
+                       }
+               } else {
+                       this.params = params;
+               }
+       };
+
+       Ajax.prototype.getParams = function () {
+               return this.params || {};
+       };
+
+       //load config object
+       Ajax.prototype.setConfig = function (config) {
+               this._loadDefaultConfig();
+
+               if (typeof config == "string") {
+                       this.config.method = config;
+               } else {
+                       for (var key in config) {
+                               this.config[key] = config[key];
+                       }
+               }
+       };
+
+       //create config object from default
+       Ajax.prototype._loadDefaultConfig = function (force) {
+               var self = this;
+               if (!self.config || force) {
+
+                       self.config = {};
+
+                       //load base config from defaults
+                       for (var key in self.defaultConfig) {
+                               self.config[key] = self.defaultConfig[key];
+                       }
+               }
+       };
+
+       //set request url
+       Ajax.prototype.setUrl = function (url) {
+               this.url = url;
+       };
+
+       //get request url
+       Ajax.prototype.getUrl = function () {
+               return this.url;
+       };
+
+       //lstandard loading function
+       Ajax.prototype.loadData = function (inPosition, columnsChanged) {
+               var self = this;
+
+               if (this.progressiveLoad) {
+                       return this._loadDataProgressive();
+               } else {
+                       return this._loadDataStandard(inPosition, columnsChanged);
+               }
+       };
+
+       Ajax.prototype.nextPage = function (diff) {
+               var margin;
+
+               if (!this.loading) {
+
+                       margin = this.table.options.ajaxProgressiveLoadScrollMargin || this.table.rowManager.getElement().clientHeight * 2;
+
+                       if (diff < margin) {
+                               this.table.modules.page.nextPage().then(function () {}).catch(function () {});
+                       }
+               }
+       };
+
+       Ajax.prototype.blockActiveRequest = function () {
+               this.requestOrder++;
+       };
+
+       Ajax.prototype._loadDataProgressive = function () {
+               this.table.rowManager.setData([]);
+               return this.table.modules.page.setPage(1);
+       };
+
+       Ajax.prototype._loadDataStandard = function (inPosition, columnsChanged) {
+               var _this35 = this;
+
+               return new Promise(function (resolve, reject) {
+                       _this35.sendRequest(inPosition).then(function (data) {
+                               _this35.table.rowManager.setData(data, inPosition, columnsChanged).then(function () {
+                                       resolve();
+                               }).catch(function (e) {
+                                       reject(e);
+                               });
+                       }).catch(function (e) {
+                               reject(e);
+                       });
+               });
+       };
+
+       Ajax.prototype.generateParamsList = function (data, prefix) {
+               var self = this,
+                   output = [];
+
+               prefix = prefix || "";
+
+               if (Array.isArray(data)) {
+                       data.forEach(function (item, i) {
+                               output = output.concat(self.generateParamsList(item, prefix ? prefix + "[" + i + "]" : i));
+                       });
+               } else if ((typeof data === 'undefined' ? 'undefined' : _typeof(data)) === "object") {
+                       for (var key in data) {
+                               output = output.concat(self.generateParamsList(data[key], prefix ? prefix + "[" + key + "]" : key));
+                       }
+               } else {
+                       output.push({ key: prefix, value: data });
+               }
+
+               return output;
+       };
+
+       Ajax.prototype.serializeParams = function (params) {
+               var output = this.generateParamsList(params),
+                   encoded = [];
+
+               output.forEach(function (item) {
+                       encoded.push(encodeURIComponent(item.key) + "=" + encodeURIComponent(item.value));
+               });
+
+               return encoded.join("&");
+       };
+
+       //send ajax request
+       Ajax.prototype.sendRequest = function (silent) {
+               var _this36 = this;
+
+               var self = this,
+                   url = self.url,
+                   requestNo,
+                   esc,
+                   query;
+
+               self.requestOrder++;
+               requestNo = self.requestOrder;
+
+               self._loadDefaultConfig();
+
+               return new Promise(function (resolve, reject) {
+                       if (self.table.options.ajaxRequesting.call(_this36.table, self.url, self.params) !== false) {
+
+                               self.loading = true;
+
+                               if (!silent) {
+                                       self.showLoader();
+                               }
+
+                               _this36.loaderPromise(url, self.config, self.params).then(function (data) {
+                                       if (requestNo === self.requestOrder) {
+                                               if (self.table.options.ajaxResponse) {
+                                                       data = self.table.options.ajaxResponse.call(self.table, self.url, self.params, data);
+                                               }
+                                               resolve(data);
+
+                                               self.hideLoader();
+                                               self.loading = false;
+                                       } else {
+                                               console.warn("Ajax Response Blocked - An active ajax request was blocked by an attempt to change table data while the request was being made");
+                                       }
+                               }).catch(function (error) {
+                                       console.error("Ajax Load Error: ", error);
+                                       self.table.options.ajaxError.call(self.table, error);
+
+                                       self.showError();
+
+                                       setTimeout(function () {
+                                               self.hideLoader();
+                                       }, 3000);
+
+                                       self.loading = false;
+
+                                       reject();
+                               });
+                       } else {
+                               reject();
+                       }
+               });
+       };
+
+       Ajax.prototype.showLoader = function () {
+               var shouldLoad = typeof this.table.options.ajaxLoader === "function" ? this.table.options.ajaxLoader() : this.table.options.ajaxLoader;
+
+               if (shouldLoad) {
+
+                       this.hideLoader();
+
+                       while (this.msgElement.firstChild) {
+                               this.msgElement.removeChild(this.msgElement.firstChild);
+                       }this.msgElement.classList.remove("tabulator-error");
+                       this.msgElement.classList.add("tabulator-loading");
+
+                       if (this.loadingElement) {
+                               this.msgElement.appendChild(this.loadingElement);
+                       } else {
+                               this.msgElement.innerHTML = this.table.modules.localize.getText("ajax|loading");
+                       }
+
+                       this.table.element.appendChild(this.loaderElement);
+               }
+       };
+
+       Ajax.prototype.showError = function () {
+               this.hideLoader();
+
+               while (this.msgElement.firstChild) {
+                       this.msgElement.removeChild(this.msgElement.firstChild);
+               }this.msgElement.classList.remove("tabulator-loading");
+               this.msgElement.classList.add("tabulator-error");
+
+               if (this.errorElement) {
+                       this.msgElement.appendChild(this.errorElement);
+               } else {
+                       this.msgElement.innerHTML = this.table.modules.localize.getText("ajax|error");
+               }
+
+               this.table.element.appendChild(this.loaderElement);
+       };
+
+       Ajax.prototype.hideLoader = function () {
+               if (this.loaderElement.parentNode) {
+                       this.loaderElement.parentNode.removeChild(this.loaderElement);
+               }
+       };
+
+       //default ajax config object
+       Ajax.prototype.defaultConfig = {
+               method: "GET"
+       };
+
+       Ajax.prototype.defaultURLGenerator = function (url, config, params) {
+
+               if (url) {
+                       if (params && Object.keys(params).length) {
+                               if (!config.method || config.method.toLowerCase() == "get") {
+                                       config.method = "get";
+
+                                       url += (url.includes("?") ? "&" : "?") + this.serializeParams(params);
+                               }
+                       }
+               }
+
+               return url;
+       };
+
+       Ajax.prototype.defaultLoaderPromise = function (url, config, params) {
+               var self = this,
+                   contentType;
+
+               return new Promise(function (resolve, reject) {
+
+                       //set url
+                       url = self.urlGenerator(url, config, params);
+
+                       //set body content if not GET request
+                       if (config.method.toUpperCase() != "GET") {
+                               contentType = _typeof(self.table.options.ajaxContentType) === "object" ? self.table.options.ajaxContentType : self.contentTypeFormatters[self.table.options.ajaxContentType];
+                               if (contentType) {
+
+                                       for (var key in contentType.headers) {
+                                               if (!config.headers) {
+                                                       config.headers = {};
+                                               }
+
+                                               if (typeof config.headers[key] === "undefined") {
+                                                       config.headers[key] = contentType.headers[key];
+                                               }
+                                       }
+
+                                       config.body = contentType.body.call(self, url, config, params);
+                               } else {
+                                       console.warn("Ajax Error - Invalid ajaxContentType value:", self.table.options.ajaxContentType);
+                               }
+                       }
+
+                       if (url) {
+
+                               //configure headers
+                               if (typeof config.headers === "undefined") {
+                                       config.headers = {};
+                               }
+
+                               if (typeof config.headers.Accept === "undefined") {
+                                       config.headers.Accept = "application/json";
+                               }
+
+                               if (typeof config.headers["X-Requested-With"] === "undefined") {
+                                       config.headers["X-Requested-With"] = "XMLHttpRequest";
+                               }
+
+                               if (typeof config.mode === "undefined") {
+                                       config.mode = "cors";
+                               }
+
+                               if (config.mode == "cors") {
+
+                                       if (typeof config.headers["Access-Control-Allow-Origin"] === "undefined") {
+                                               config.headers["Access-Control-Allow-Origin"] = window.location.origin;
+                                       }
+
+                                       if (typeof config.credentials === "undefined") {
+                                               config.credentials = 'same-origin';
+                                       }
+                               } else {
+                                       if (typeof config.credentials === "undefined") {
+                                               config.credentials = 'include';
+                                       }
+                               }
+
+                               //send request
+                               fetch(url, config).then(function (response) {
+                                       if (response.ok) {
+                                               response.json().then(function (data) {
+                                                       resolve(data);
+                                               }).catch(function (error) {
+                                                       reject(error);
+                                                       console.warn("Ajax Load Error - Invalid JSON returned", error);
+                                               });
+                                       } else {
+                                               console.error("Ajax Load Error - Connection Error: " + response.status, response.statusText);
+                                               reject(response);
+                                       }
+                               }).catch(function (error) {
+                                       console.error("Ajax Load Error - Connection Error: ", error);
+                                       reject(error);
+                               });
+                       } else {
+                               console.warn("Ajax Load Error - No URL Set");
+                               resolve([]);
+                       }
+               });
+       };
+
+       Ajax.prototype.contentTypeFormatters = {
+               "json": {
+                       headers: {
+                               'Content-Type': 'application/json'
+                       },
+                       body: function body(url, config, params) {
+                               return JSON.stringify(params);
+                       }
+               },
+               "form": {
+                       headers: {},
+                       body: function body(url, config, params) {
+                               var output = this.generateParamsList(params),
+                                   form = new FormData();
+
+                               output.forEach(function (item) {
+                                       form.append(item.key, item.value);
+                               });
+
+                               return form;
+                       }
+               }
+       };
+
+       Tabulator.prototype.registerModule("ajax", Ajax);
+
+       var ColumnCalcs = function ColumnCalcs(table) {
+               this.table = table; //hold Tabulator object
+               this.topCalcs = [];
+               this.botCalcs = [];
+               this.genColumn = false;
+               this.topElement = this.createElement();
+               this.botElement = this.createElement();
+               this.topRow = false;
+               this.botRow = false;
+               this.topInitialized = false;
+               this.botInitialized = false;
+
+               this.initialize();
+       };
+
+       ColumnCalcs.prototype.createElement = function () {
+               var el = document.createElement("div");
+               el.classList.add("tabulator-calcs-holder");
+               return el;
+       };
+
+       ColumnCalcs.prototype.initialize = function () {
+               this.genColumn = new Column({ field: "value" }, this);
+       };
+
+       //dummy functions to handle being mock column manager
+       ColumnCalcs.prototype.registerColumnField = function () {};
+
+       //initialize column calcs
+       ColumnCalcs.prototype.initializeColumn = function (column) {
+               var def = column.definition;
+
+               var config = {
+                       topCalcParams: def.topCalcParams || {},
+                       botCalcParams: def.bottomCalcParams || {}
+               };
+
+               if (def.topCalc) {
+
+                       switch (_typeof(def.topCalc)) {
+                               case "string":
+                                       if (this.calculations[def.topCalc]) {
+                                               config.topCalc = this.calculations[def.topCalc];
+                                       } else {
+                                               console.warn("Column Calc Error - No such calculation found, ignoring: ", def.topCalc);
+                                       }
+                                       break;
+
+                               case "function":
+                                       config.topCalc = def.topCalc;
+                                       break;
+
+                       }
+
+                       if (config.topCalc) {
+                               column.modules.columnCalcs = config;
+                               this.topCalcs.push(column);
+
+                               if (this.table.options.columnCalcs != "group") {
+                                       this.initializeTopRow();
+                               }
+                       }
+               }
+
+               if (def.bottomCalc) {
+                       switch (_typeof(def.bottomCalc)) {
+                               case "string":
+                                       if (this.calculations[def.bottomCalc]) {
+                                               config.botCalc = this.calculations[def.bottomCalc];
+                                       } else {
+                                               console.warn("Column Calc Error - No such calculation found, ignoring: ", def.bottomCalc);
+                                       }
+                                       break;
+
+                               case "function":
+                                       config.botCalc = def.bottomCalc;
+                                       break;
+
+                       }
+
+                       if (config.botCalc) {
+                               column.modules.columnCalcs = config;
+                               this.botCalcs.push(column);
+
+                               if (this.table.options.columnCalcs != "group") {
+                                       this.initializeBottomRow();
+                               }
+                       }
+               }
+       };
+
+       ColumnCalcs.prototype.removeCalcs = function () {
+               var changed = false;
+
+               if (this.topInitialized) {
+                       this.topInitialized = false;
+                       this.topElement.parentNode.removeChild(this.topElement);
+                       changed = true;
+               }
+
+               if (this.botInitialized) {
+                       this.botInitialized = false;
+                       this.table.footerManager.remove(this.botElement);
+                       changed = true;
+               }
+
+               if (changed) {
+                       this.table.rowManager.adjustTableSize();
+               }
+       };
+
+       ColumnCalcs.prototype.initializeTopRow = function () {
+               if (!this.topInitialized) {
+                       // this.table.columnManager.headersElement.after(this.topElement);
+                       this.table.columnManager.getElement().insertBefore(this.topElement, this.table.columnManager.headersElement.nextSibling);
+                       this.topInitialized = true;
+               }
+       };
+
+       ColumnCalcs.prototype.initializeBottomRow = function () {
+               if (!this.botInitialized) {
+                       this.table.footerManager.prepend(this.botElement);
+                       this.botInitialized = true;
+               }
+       };
+
+       ColumnCalcs.prototype.scrollHorizontal = function (left) {
+               var hozAdjust = 0,
+                   scrollWidth = this.table.columnManager.getElement().scrollWidth - this.table.element.clientWidth;
+
+               if (this.botInitialized) {
+                       this.botRow.getElement().style.marginLeft = -left + "px";
+               }
+       };
+
+       ColumnCalcs.prototype.recalc = function (rows) {
+               var data, row;
+
+               if (this.topInitialized || this.botInitialized) {
+                       data = this.rowsToData(rows);
+
+                       if (this.topInitialized) {
+                               if (this.topRow) {
+                                       this.topRow.deleteCells();
+                               }
+
+                               row = this.generateRow("top", this.rowsToData(rows));
+                               this.topRow = row;
+                               while (this.topElement.firstChild) {
+                                       this.topElement.removeChild(this.topElement.firstChild);
+                               }this.topElement.appendChild(row.getElement());
+                               row.initialize(true);
+                       }
+
+                       if (this.botInitialized) {
+                               if (this.botRow) {
+                                       this.botRow.deleteCells();
+                               }
+
+                               row = this.generateRow("bottom", this.rowsToData(rows));
+                               this.botRow = row;
+                               while (this.botElement.firstChild) {
+                                       this.botElement.removeChild(this.botElement.firstChild);
+                               }this.botElement.appendChild(row.getElement());
+                               row.initialize(true);
+                       }
+
+                       this.table.rowManager.adjustTableSize();
+
+                       //set resizable handles
+                       if (this.table.modExists("frozenColumns")) {
+                               this.table.modules.frozenColumns.layout();
+                       }
+               }
+       };
+
+       ColumnCalcs.prototype.recalcRowGroup = function (row) {
+               this.recalcGroup(this.table.modules.groupRows.getRowGroup(row));
+       };
+
+       ColumnCalcs.prototype.recalcAll = function () {
+               var _this37 = this;
+
+               if (this.topCalcs.length || this.botCalcs.length) {
+                       if (this.table.options.columnCalcs !== "group") {
+                               this.recalc(this.table.rowManager.activeRows);
+                       }
+
+                       if (this.table.options.groupBy && this.table.options.columnCalcs !== "table") {
+
+                               var groups = table.modules.groupRows.getChildGroups();
+
+                               groups.forEach(function (group) {
+                                       _this37.recalcGroup(group);
+                               });
+                       }
+               }
+       };
+
+       ColumnCalcs.prototype.recalcGroup = function (group) {
+               var data, rowData;
+
+               if (group) {
+                       if (group.calcs) {
+                               if (group.calcs.bottom) {
+                                       data = this.rowsToData(group.rows);
+                                       rowData = this.generateRowData("bottom", data);
+
+                                       group.calcs.bottom.updateData(rowData);
+                                       group.calcs.bottom.reinitialize();
+                               }
+
+                               if (group.calcs.top) {
+                                       data = this.rowsToData(group.rows);
+                                       rowData = this.generateRowData("top", data);
+
+                                       group.calcs.top.updateData(rowData);
+                                       group.calcs.top.reinitialize();
+                               }
+                       }
+               }
+       };
+
+       //generate top stats row
+       ColumnCalcs.prototype.generateTopRow = function (rows) {
+               return this.generateRow("top", this.rowsToData(rows));
+       };
+       //generate bottom stats row
+       ColumnCalcs.prototype.generateBottomRow = function (rows) {
+               return this.generateRow("bottom", this.rowsToData(rows));
+       };
+
+       ColumnCalcs.prototype.rowsToData = function (rows) {
+               var _this38 = this;
+
+               var data = [];
+
+               rows.forEach(function (row) {
+                       data.push(row.getData());
+
+                       if (_this38.table.options.dataTree && _this38.table.options.dataTreeChildColumnCalcs) {
+                               if (row.modules.dataTree.open) {
+                                       var children = _this38.rowsToData(_this38.table.modules.dataTree.getFilteredTreeChildren(row));
+                                       data = data.concat(children);
+                               }
+                       }
+               });
+
+               return data;
+       };
+
+       //generate stats row
+       ColumnCalcs.prototype.generateRow = function (pos, data) {
+               var self = this,
+                   rowData = this.generateRowData(pos, data),
+                   row;
+
+               if (self.table.modExists("mutator")) {
+                       self.table.modules.mutator.disable();
+               }
+
+               row = new Row(rowData, this, "calc");
+
+               if (self.table.modExists("mutator")) {
+                       self.table.modules.mutator.enable();
+               }
+
+               row.getElement().classList.add("tabulator-calcs", "tabulator-calcs-" + pos);
+
+               row.generateCells = function () {
+
+                       var cells = [];
+
+                       self.table.columnManager.columnsByIndex.forEach(function (column) {
+
+                               //set field name of mock column
+                               self.genColumn.setField(column.getField());
+                               self.genColumn.hozAlign = column.hozAlign;
+
+                               if (column.definition[pos + "CalcFormatter"] && self.table.modExists("format")) {
+
+                                       self.genColumn.modules.format = {
+                                               formatter: self.table.modules.format.getFormatter(column.definition[pos + "CalcFormatter"]),
+                                               params: column.definition[pos + "CalcFormatterParams"]
+                                       };
+                               } else {
+                                       self.genColumn.modules.format = {
+                                               formatter: self.table.modules.format.getFormatter("plaintext"),
+                                               params: {}
+                                       };
+                               }
+
+                               //ensure css class defintion is replicated to calculation cell
+                               self.genColumn.definition.cssClass = column.definition.cssClass;
+
+                               //generate cell and assign to correct column
+                               var cell = new Cell(self.genColumn, row);
+                               cell.column = column;
+                               cell.setWidth();
+
+                               column.cells.push(cell);
+                               cells.push(cell);
+
+                               if (!column.visible) {
+                                       cell.hide();
+                               }
+                       });
+
+                       this.cells = cells;
+               };
+
+               return row;
+       };
+
+       //generate stats row
+       ColumnCalcs.prototype.generateRowData = function (pos, data) {
+               var rowData = {},
+                   calcs = pos == "top" ? this.topCalcs : this.botCalcs,
+                   type = pos == "top" ? "topCalc" : "botCalc",
+                   params,
+                   paramKey;
+
+               calcs.forEach(function (column) {
+                       var values = [];
+
+                       if (column.modules.columnCalcs && column.modules.columnCalcs[type]) {
+                               data.forEach(function (item) {
+                                       values.push(column.getFieldValue(item));
+                               });
+
+                               paramKey = type + "Params";
+                               params = typeof column.modules.columnCalcs[paramKey] === "function" ? column.modules.columnCalcs[paramKey](values, data) : column.modules.columnCalcs[paramKey];
+
+                               column.setFieldValue(rowData, column.modules.columnCalcs[type](values, data, params));
+                       }
+               });
+
+               return rowData;
+       };
+
+       ColumnCalcs.prototype.hasTopCalcs = function () {
+               return !!this.topCalcs.length;
+       };
+
+       ColumnCalcs.prototype.hasBottomCalcs = function () {
+               return !!this.botCalcs.length;
+       };
+
+       //handle table redraw
+       ColumnCalcs.prototype.redraw = function () {
+               if (this.topRow) {
+                       this.topRow.normalizeHeight(true);
+               }
+               if (this.botRow) {
+                       this.botRow.normalizeHeight(true);
+               }
+       };
+
+       //return the calculated
+       ColumnCalcs.prototype.getResults = function () {
+               var self = this,
+                   results = {},
+                   groups;
+
+               if (this.table.options.groupBy && this.table.modExists("groupRows")) {
+                       groups = this.table.modules.groupRows.getGroups(true);
+
+                       groups.forEach(function (group) {
+                               results[group.getKey()] = self.getGroupResults(group);
+                       });
+               } else {
+                       results = {
+                               top: this.topRow ? this.topRow.getData() : {},
+                               bottom: this.botRow ? this.botRow.getData() : {}
+                       };
+               }
+
+               return results;
+       };
+
+       //get results from a group
+       ColumnCalcs.prototype.getGroupResults = function (group) {
+               var self = this,
+                   groupObj = group._getSelf(),
+                   subGroups = group.getSubGroups(),
+                   subGroupResults = {},
+                   results = {};
+
+               subGroups.forEach(function (subgroup) {
+                       subGroupResults[subgroup.getKey()] = self.getGroupResults(subgroup);
+               });
+
+               results = {
+                       top: groupObj.calcs.top ? groupObj.calcs.top.getData() : {},
+                       bottom: groupObj.calcs.bottom ? groupObj.calcs.bottom.getData() : {},
+                       groups: subGroupResults
+               };
+
+               return results;
+       };
+
+       //default calculations
+       ColumnCalcs.prototype.calculations = {
+               "avg": function avg(values, data, calcParams) {
+                       var output = 0,
+                           precision = typeof calcParams.precision !== "undefined" ? calcParams.precision : 2;
+
+                       if (values.length) {
+                               output = values.reduce(function (sum, value) {
+                                       value = Number(value);
+                                       return sum + value;
+                               });
+
+                               output = output / values.length;
+
+                               output = precision !== false ? output.toFixed(precision) : output;
+                       }
+
+                       return parseFloat(output).toString();
+               },
+               "max": function max(values, data, calcParams) {
+                       var output = null,
+                           precision = typeof calcParams.precision !== "undefined" ? calcParams.precision : false;
+
+                       values.forEach(function (value) {
+
+                               value = Number(value);
+
+                               if (value > output || output === null) {
+                                       output = value;
+                               }
+                       });
+
+                       return output !== null ? precision !== false ? output.toFixed(precision) : output : "";
+               },
+               "min": function min(values, data, calcParams) {
+                       var output = null,
+                           precision = typeof calcParams.precision !== "undefined" ? calcParams.precision : false;
+
+                       values.forEach(function (value) {
+
+                               value = Number(value);
+
+                               if (value < output || output === null) {
+                                       output = value;
+                               }
+                       });
+
+                       return output !== null ? precision !== false ? output.toFixed(precision) : output : "";
+               },
+               "sum": function sum(values, data, calcParams) {
+                       var output = 0,
+                           precision = typeof calcParams.precision !== "undefined" ? calcParams.precision : false;
+
+                       if (values.length) {
+                               values.forEach(function (value) {
+                                       value = Number(value);
+
+                                       output += !isNaN(value) ? Number(value) : 0;
+                               });
+                       }
+
+                       return precision !== false ? output.toFixed(precision) : output;
+               },
+               "concat": function concat(values, data, calcParams) {
+                       var output = 0;
+
+                       if (values.length) {
+                               output = values.reduce(function (sum, value) {
+                                       return String(sum) + String(value);
+                               });
+                       }
+
+                       return output;
+               },
+               "count": function count(values, data, calcParams) {
+                       var output = 0;
+
+                       if (values.length) {
+                               values.forEach(function (value) {
+                                       if (value) {
+                                               output++;
+                                       }
+                               });
+                       }
+
+                       return output;
+               }
+       };
+
+       Tabulator.prototype.registerModule("columnCalcs", ColumnCalcs);
+
+       var Clipboard = function Clipboard(table) {
+               this.table = table;
+               this.mode = true;
+
+               this.pasteParser = function () {};
+               this.pasteAction = function () {};
+               this.customSelection = false;
+               this.rowRange = false;
+               this.blocked = true; //block copy actions not originating from this command
+       };
+
+       Clipboard.prototype.initialize = function () {
+               var _this39 = this;
+
+               this.mode = this.table.options.clipboard;
+
+               this.rowRange = this.table.options.clipboardCopyRowRange;
+
+               if (this.mode === true || this.mode === "copy") {
+                       this.table.element.addEventListener("copy", function (e) {
+                               var plain, html, list;
+
+                               if (!_this39.blocked) {
+                                       e.preventDefault();
+
+                                       if (_this39.customSelection) {
+                                               plain = _this39.customSelection;
+
+                                               if (_this39.table.options.clipboardCopyFormatter) {
+                                                       plain = _this39.table.options.clipboardCopyFormatter("plain", plain);
+                                               }
+                                       } else {
+
+                                               var list = _this39.table.modules.export.generateExportList(_this39.rowRange, _this39.table.options.clipboardCopyStyled, _this39.table.options.clipboardCopyConfig, "clipboard");
+
+                                               html = _this39.table.modules.export.genereateHTMLTable(list);
+                                               plain = html ? _this39.generatePlainContent(list) : "";
+
+                                               if (_this39.table.options.clipboardCopyFormatter) {
+                                                       plain = _this39.table.options.clipboardCopyFormatter("plain", plain);
+                                                       html = _this39.table.options.clipboardCopyFormatter("html", html);
+                                               }
+                                       }
+
+                                       if (window.clipboardData && window.clipboardData.setData) {
+                                               window.clipboardData.setData('Text', plain);
+                                       } else if (e.clipboardData && e.clipboardData.setData) {
+                                               e.clipboardData.setData('text/plain', plain);
+                                               if (html) {
+                                                       e.clipboardData.setData('text/html', html);
+                                               }
+                                       } else if (e.originalEvent && e.originalEvent.clipboardData.setData) {
+                                               e.originalEvent.clipboardData.setData('text/plain', plain);
+                                               if (html) {
+                                                       e.originalEvent.clipboardData.setData('text/html', html);
+                                               }
+                                       }
+
+                                       _this39.table.options.clipboardCopied.call(_this39.table, plain, html);
+
+                                       _this39.reset();
+                               }
+                       });
+               }
+
+               if (this.mode === true || this.mode === "paste") {
+                       this.table.element.addEventListener("paste", function (e) {
+                               _this39.paste(e);
+                       });
+               }
+
+               this.setPasteParser(this.table.options.clipboardPasteParser);
+               this.setPasteAction(this.table.options.clipboardPasteAction);
+       };
+
+       Clipboard.prototype.reset = function () {
+               this.blocked = false;
+               this.originalSelectionText = "";
+       };
+
+       Clipboard.prototype.generatePlainContent = function (list) {
+               var output = [];
+
+               list.forEach(function (row) {
+                       var rowData = [];
+
+                       row.columns.forEach(function (col) {
+                               var value = "";
+
+                               if (col) {
+
+                                       if (row.type === "group") {
+                                               col.value = col.component.getKey();
+                                       }
+
+                                       switch (_typeof(col.value)) {
+                                               case "object":
+                                                       value = JSON.stringify(col.value);
+                                                       break;
+
+                                               case "undefined":
+                                               case "null":
+                                                       value = "";
+                                                       break;
+
+                                               default:
+                                                       value = col.value;
+                                       }
+                               }
+
+                               rowData.push(value);
+                       });
+
+                       output.push(rowData.join("\t"));
+               });
+
+               return output.join("\n");
+       };
+
+       Clipboard.prototype.copy = function (range, internal) {
+               var range, sel, textRange;
+               this.blocked = false;
+               this.customSelection = false;
+
+               if (this.mode === true || this.mode === "copy") {
+
+                       this.rowRange = range || this.table.options.clipboardCopyRowRange;
+
+                       if (typeof window.getSelection != "undefined" && typeof document.createRange != "undefined") {
+                               range = document.createRange();
+                               range.selectNodeContents(this.table.element);
+                               sel = window.getSelection();
+
+                               if (sel.toString() && internal) {
+                                       this.customSelection = sel.toString();
+                               }
+
+                               sel.removeAllRanges();
+                               sel.addRange(range);
+                       } else if (typeof document.selection != "undefined" && typeof document.body.createTextRange != "undefined") {
+                               textRange = document.body.createTextRange();
+                               textRange.moveToElementText(this.table.element);
+                               textRange.select();
+                       }
+
+                       document.execCommand('copy');
+
+                       if (sel) {
+                               sel.removeAllRanges();
+                       }
+               }
+       };
+
+       //PASTE EVENT HANDLING
+
+       Clipboard.prototype.setPasteAction = function (action) {
+
+               switch (typeof action === 'undefined' ? 'undefined' : _typeof(action)) {
+                       case "string":
+                               this.pasteAction = this.pasteActions[action];
+
+                               if (!this.pasteAction) {
+                                       console.warn("Clipboard Error - No such paste action found:", action);
+                               }
+                               break;
+
+                       case "function":
+                               this.pasteAction = action;
+                               break;
+               }
+       };
+
+       Clipboard.prototype.setPasteParser = function (parser) {
+               switch (typeof parser === 'undefined' ? 'undefined' : _typeof(parser)) {
+                       case "string":
+                               this.pasteParser = this.pasteParsers[parser];
+
+                               if (!this.pasteParser) {
+                                       console.warn("Clipboard Error - No such paste parser found:", parser);
+                               }
+                               break;
+
+                       case "function":
+                               this.pasteParser = parser;
+                               break;
+               }
+       };
+
+       Clipboard.prototype.paste = function (e) {
+               var data, rowData, rows;
+
+               if (this.checkPaseOrigin(e)) {
+
+                       data = this.getPasteData(e);
+
+                       rowData = this.pasteParser.call(this, data);
+
+                       if (rowData) {
+                               e.preventDefault();
+
+                               if (this.table.modExists("mutator")) {
+                                       rowData = this.mutateData(rowData);
+                               }
+
+                               rows = this.pasteAction.call(this, rowData);
+                               this.table.options.clipboardPasted.call(this.table, data, rowData, rows);
+                       } else {
+                               this.table.options.clipboardPasteError.call(this.table, data);
+                       }
+               }
+       };
+
+       Clipboard.prototype.mutateData = function (data) {
+               var self = this,
+                   output = [];
+
+               if (Array.isArray(data)) {
+                       data.forEach(function (row) {
+                               output.push(self.table.modules.mutator.transformRow(row, "clipboard"));
+                       });
+               } else {
+                       output = data;
+               }
+
+               return output;
+       };
+
+       Clipboard.prototype.checkPaseOrigin = function (e) {
+               var valid = true;
+
+               if (e.target.tagName != "DIV" || this.table.modules.edit.currentCell) {
+                       valid = false;
+               }
+
+               return valid;
+       };
+
+       Clipboard.prototype.getPasteData = function (e) {
+               var data;
+
+               if (window.clipboardData && window.clipboardData.getData) {
+                       data = window.clipboardData.getData('Text');
+               } else if (e.clipboardData && e.clipboardData.getData) {
+                       data = e.clipboardData.getData('text/plain');
+               } else if (e.originalEvent && e.originalEvent.clipboardData.getData) {
+                       data = e.originalEvent.clipboardData.getData('text/plain');
+               }
+
+               return data;
+       };
+
+       Clipboard.prototype.pasteParsers = {
+               table: function table(clipboard) {
+                       var data = [],
+                           success = false,
+                           headerFindSuccess = true,
+                           columns = this.table.columnManager.columns,
+                           columnMap = [],
+                           rows = [];
+
+                       //get data from clipboard into array of columns and rows.
+                       clipboard = clipboard.split("\n");
+
+                       clipboard.forEach(function (row) {
+                               data.push(row.split("\t"));
+                       });
+
+                       if (data.length && !(data.length === 1 && data[0].length < 2)) {
+                               success = true;
+
+                               //check if headers are present by title
+                               data[0].forEach(function (value) {
+                                       var column = columns.find(function (column) {
+                                               return value && column.definition.title && value.trim() && column.definition.title.trim() === value.trim();
+                                       });
+
+                                       if (column) {
+                                               columnMap.push(column);
+                                       } else {
+                                               headerFindSuccess = false;
+                                       }
+                               });
+
+                               //check if column headers are present by field
+                               if (!headerFindSuccess) {
+                                       headerFindSuccess = true;
+                                       columnMap = [];
+
+                                       data[0].forEach(function (value) {
+                                               var column = columns.find(function (column) {
+                                                       return value && column.field && value.trim() && column.field.trim() === value.trim();
+                                               });
+
+                                               if (column) {
+                                                       columnMap.push(column);
+                                               } else {
+                                                       headerFindSuccess = false;
+                                               }
+                                       });
+
+                                       if (!headerFindSuccess) {
+                                               columnMap = this.table.columnManager.columnsByIndex;
+                                       }
+                               }
+
+                               //remove header row if found
+                               if (headerFindSuccess) {
+                                       data.shift();
+                               }
+
+                               data.forEach(function (item) {
+                                       var row = {};
+
+                                       item.forEach(function (value, i) {
+                                               if (columnMap[i]) {
+                                                       row[columnMap[i].field] = value;
+                                               }
+                                       });
+
+                                       rows.push(row);
+                               });
+
+                               return rows;
+                       } else {
+                               return false;
+                       }
+               }
+       };
+
+       Clipboard.prototype.pasteActions = {
+               replace: function replace(rows) {
+                       return this.table.setData(rows);
+               },
+               update: function update(rows) {
+                       return this.table.updateOrAddData(rows);
+               },
+               insert: function insert(rows) {
+                       return this.table.addData(rows);
+               }
+       };
+
+       Tabulator.prototype.registerModule("clipboard", Clipboard);
+
+       var DataTree = function DataTree(table) {
+               this.table = table;
+               this.indent = 10;
+               this.field = "";
+               this.collapseEl = null;
+               this.expandEl = null;
+               this.branchEl = null;
+               this.elementField = false;
+
+               this.startOpen = function () {};
+
+               this.displayIndex = 0;
+       };
+
+       DataTree.prototype.initialize = function () {
+               var dummyEl = null,
+                   firstCol = this.table.columnManager.getFirstVisibileColumn(),
+                   options = this.table.options;
+
+               this.field = options.dataTreeChildField;
+               this.indent = options.dataTreeChildIndent;
+               this.elementField = options.dataTreeElementColumn || (firstCol ? firstCol.field : false);
+
+               if (options.dataTreeBranchElement) {
+
+                       if (options.dataTreeBranchElement === true) {
+                               this.branchEl = document.createElement("div");
+                               this.branchEl.classList.add("tabulator-data-tree-branch");
+                       } else {
+                               if (typeof options.dataTreeBranchElement === "string") {
+                                       dummyEl = document.createElement("div");
+                                       dummyEl.innerHTML = options.dataTreeBranchElement;
+                                       this.branchEl = dummyEl.firstChild;
+                               } else {
+                                       this.branchEl = options.dataTreeBranchElement;
+                               }
+                       }
+               }
+
+               if (options.dataTreeCollapseElement) {
+                       if (typeof options.dataTreeCollapseElement === "string") {
+                               dummyEl = document.createElement("div");
+                               dummyEl.innerHTML = options.dataTreeCollapseElement;
+                               this.collapseEl = dummyEl.firstChild;
+                       } else {
+                               this.collapseEl = options.dataTreeCollapseElement;
+                       }
+               } else {
+                       this.collapseEl = document.createElement("div");
+                       this.collapseEl.classList.add("tabulator-data-tree-control");
+                       this.collapseEl.tabIndex = 0;
+                       this.collapseEl.innerHTML = "<div class='tabulator-data-tree-control-collapse'></div>";
+               }
+
+               if (options.dataTreeExpandElement) {
+                       if (typeof options.dataTreeExpandElement === "string") {
+                               dummyEl = document.createElement("div");
+                               dummyEl.innerHTML = options.dataTreeExpandElement;
+                               this.expandEl = dummyEl.firstChild;
+                       } else {
+                               this.expandEl = options.dataTreeExpandElement;
+                       }
+               } else {
+                       this.expandEl = document.createElement("div");
+                       this.expandEl.classList.add("tabulator-data-tree-control");
+                       this.expandEl.tabIndex = 0;
+                       this.expandEl.innerHTML = "<div class='tabulator-data-tree-control-expand'></div>";
+               }
+
+               switch (_typeof(options.dataTreeStartExpanded)) {
+                       case "boolean":
+                               this.startOpen = function (row, index) {
+                                       return options.dataTreeStartExpanded;
+                               };
+                               break;
+
+                       case "function":
+                               this.startOpen = options.dataTreeStartExpanded;
+                               break;
+
+                       default:
+                               this.startOpen = function (row, index) {
+                                       return options.dataTreeStartExpanded[index];
+                               };
+                               break;
+               }
+       };
+
+       DataTree.prototype.initializeRow = function (row) {
+               var childArray = row.getData()[this.field];
+               var isArray = Array.isArray(childArray);
+
+               var children = isArray || !isArray && (typeof childArray === 'undefined' ? 'undefined' : _typeof(childArray)) === "object" && childArray !== null;
+
+               if (!children && row.modules.dataTree && row.modules.dataTree.branchEl) {
+                       row.modules.dataTree.branchEl.parentNode.removeChild(row.modules.dataTree.branchEl);
+               }
+
+               if (!children && row.modules.dataTree && row.modules.dataTree.controlEl) {
+                       row.modules.dataTree.controlEl.parentNode.removeChild(row.modules.dataTree.controlEl);
+               }
+
+               row.modules.dataTree = {
+                       index: row.modules.dataTree ? row.modules.dataTree.index : 0,
+                       open: children ? row.modules.dataTree ? row.modules.dataTree.open : this.startOpen(row.getComponent(), 0) : false,
+                       controlEl: row.modules.dataTree && children ? row.modules.dataTree.controlEl : false,
+                       branchEl: row.modules.dataTree && children ? row.modules.dataTree.branchEl : false,
+                       parent: row.modules.dataTree ? row.modules.dataTree.parent : false,
+                       children: children
+               };
+       };
+
+       DataTree.prototype.layoutRow = function (row) {
+               var cell = this.elementField ? row.getCell(this.elementField) : row.getCells()[0],
+                   el = cell.getElement(),
+                   config = row.modules.dataTree;
+
+               if (config.branchEl) {
+                       if (config.branchEl.parentNode) {
+                               config.branchEl.parentNode.removeChild(config.branchEl);
+                       }
+                       config.branchEl = false;
+               }
+
+               if (config.controlEl) {
+                       if (config.controlEl.parentNode) {
+                               config.controlEl.parentNode.removeChild(config.controlEl);
+                       }
+                       config.controlEl = false;
+               }
+
+               this.generateControlElement(row, el);
+
+               row.element.classList.add("tabulator-tree-level-" + config.index);
+
+               if (config.index) {
+                       if (this.branchEl) {
+                               config.branchEl = this.branchEl.cloneNode(true);
+                               el.insertBefore(config.branchEl, el.firstChild);
+                               config.branchEl.style.marginLeft = (config.branchEl.offsetWidth + config.branchEl.style.marginRight) * (config.index - 1) + config.index * this.indent + "px";
+                       } else {
+                               el.style.paddingLeft = parseInt(window.getComputedStyle(el, null).getPropertyValue('padding-left')) + config.index * this.indent + "px";
+                       }
+               }
+       };
+
+       DataTree.prototype.generateControlElement = function (row, el) {
+               var _this40 = this;
+
+               var config = row.modules.dataTree,
+                   el = el || row.getCells()[0].getElement(),
+                   oldControl = config.controlEl;
+
+               if (config.children !== false) {
+
+                       if (config.open) {
+                               config.controlEl = this.collapseEl.cloneNode(true);
+                               config.controlEl.addEventListener("click", function (e) {
+                                       e.stopPropagation();
+                                       _this40.collapseRow(row);
+                               });
+                       } else {
+                               config.controlEl = this.expandEl.cloneNode(true);
+                               config.controlEl.addEventListener("click", function (e) {
+                                       e.stopPropagation();
+                                       _this40.expandRow(row);
+                               });
+                       }
+
+                       config.controlEl.addEventListener("mousedown", function (e) {
+                               e.stopPropagation();
+                       });
+
+                       if (oldControl && oldControl.parentNode === el) {
+                               oldControl.parentNode.replaceChild(config.controlEl, oldControl);
+                       } else {
+                               el.insertBefore(config.controlEl, el.firstChild);
+                       }
+               }
+       };
+
+       DataTree.prototype.setDisplayIndex = function (index) {
+               this.displayIndex = index;
+       };
+
+       DataTree.prototype.getDisplayIndex = function () {
+               return this.displayIndex;
+       };
+
+       DataTree.prototype.getRows = function (rows) {
+               var _this41 = this;
+
+               var output = [];
+
+               rows.forEach(function (row, i) {
+                       var config, children;
+
+                       output.push(row);
+
+                       if (row instanceof Row) {
+
+                               config = row.modules.dataTree.children;
+
+                               if (!config.index && config.children !== false) {
+                                       children = _this41.getChildren(row);
+
+                                       children.forEach(function (child) {
+                                               output.push(child);
+                                       });
+                               }
+                       }
+               });
+
+               return output;
+       };
+
+       DataTree.prototype.getChildren = function (row) {
+               var _this42 = this;
+
+               var config = row.modules.dataTree,
+                   children = [],
+                   output = [];
+
+               if (config.children !== false && config.open) {
+                       if (!Array.isArray(config.children)) {
+                               config.children = this.generateChildren(row);
+                       }
+
+                       if (this.table.modExists("filter")) {
+                               children = this.table.modules.filter.filter(config.children);
+                       } else {
+                               children = config.children;
+                       }
+
+                       if (this.table.modExists("sort")) {
+                               this.table.modules.sort.sort(children);
+                       }
+
+                       children.forEach(function (child) {
+                               output.push(child);
+
+                               var subChildren = _this42.getChildren(child);
+
+                               subChildren.forEach(function (sub) {
+                                       output.push(sub);
+                               });
+                       });
+               }
+
+               return output;
+       };
+
+       DataTree.prototype.generateChildren = function (row) {
+               var _this43 = this;
+
+               var children = [];
+
+               var childArray = row.getData()[this.field];
+
+               if (!Array.isArray(childArray)) {
+                       childArray = [childArray];
+               }
+
+               childArray.forEach(function (childData) {
+                       var childRow = new Row(childData || {}, _this43.table.rowManager);
+                       childRow.modules.dataTree.index = row.modules.dataTree.index + 1;
+                       childRow.modules.dataTree.parent = row;
+                       if (childRow.modules.dataTree.children) {
+                               childRow.modules.dataTree.open = _this43.startOpen(childRow.getComponent(), childRow.modules.dataTree.index);
+                       }
+                       children.push(childRow);
+               });
+
+               return children;
+       };
+
+       DataTree.prototype.expandRow = function (row, silent) {
+               var config = row.modules.dataTree;
+
+               if (config.children !== false) {
+                       config.open = true;
+
+                       row.reinitialize();
+
+                       this.table.rowManager.refreshActiveData("tree", false, true);
+
+                       this.table.options.dataTreeRowExpanded(row.getComponent(), row.modules.dataTree.index);
+               }
+       };
+
+       DataTree.prototype.collapseRow = function (row) {
+               var config = row.modules.dataTree;
+
+               if (config.children !== false) {
+                       config.open = false;
+
+                       row.reinitialize();
+
+                       this.table.rowManager.refreshActiveData("tree", false, true);
+
+                       this.table.options.dataTreeRowCollapsed(row.getComponent(), row.modules.dataTree.index);
+               }
+       };
+
+       DataTree.prototype.toggleRow = function (row) {
+               var config = row.modules.dataTree;
+
+               if (config.children !== false) {
+                       if (config.open) {
+                               this.collapseRow(row);
+                       } else {
+                               this.expandRow(row);
+                       }
+               }
+       };
+
+       DataTree.prototype.getTreeParent = function (row) {
+               return row.modules.dataTree.parent ? row.modules.dataTree.parent.getComponent() : false;
+       };
+
+       DataTree.prototype.getFilteredTreeChildren = function (row) {
+               var config = row.modules.dataTree,
+                   output = [],
+                   children;
+
+               if (config.children) {
+
+                       if (!Array.isArray(config.children)) {
+                               config.children = this.generateChildren(row);
+                       }
+
+                       if (this.table.modExists("filter")) {
+                               children = this.table.modules.filter.filter(config.children);
+                       } else {
+                               children = config.children;
+                       }
+
+                       children.forEach(function (childRow) {
+                               if (childRow instanceof Row) {
+                                       output.push(childRow);
+                               }
+                       });
+               }
+
+               return output;
+       };
+
+       DataTree.prototype.rowDelete = function (row) {
+               var parent = row.modules.dataTree.parent,
+                   childIndex;
+
+               if (parent) {
+                       childIndex = this.findChildIndex(row, parent);
+
+                       if (childIndex !== false) {
+                               parent.data[this.field].splice(childIndex, 1);
+                       }
+
+                       if (!parent.data[this.field].length) {
+                               delete parent.data[this.field];
+                       }
+
+                       this.initializeRow(parent);
+                       this.layoutRow(parent);
+               }
+
+               this.table.rowManager.refreshActiveData("tree", false, true);
+       };
+
+       DataTree.prototype.addTreeChildRow = function (row, data, top, index) {
+               var childIndex = false;
+
+               if (typeof data === "string") {
+                       data = JSON.parse(data);
+               }
+
+               if (!Array.isArray(row.data[this.field])) {
+                       row.data[this.field] = [];
+
+                       row.modules.dataTree.open = this.startOpen(row.getComponent(), row.modules.dataTree.index);
+               }
+
+               if (typeof index !== "undefined") {
+                       childIndex = this.findChildIndex(index, row);
+
+                       if (childIndex !== false) {
+                               row.data[this.field].splice(top ? childIndex : childIndex + 1, 0, data);
+                       }
+               }
+
+               if (childIndex === false) {
+                       if (top) {
+                               row.data[this.field].unshift(data);
+                       } else {
+                               row.data[this.field].push(data);
+                       }
+               }
+
+               this.initializeRow(row);
+               this.layoutRow(row);
+
+               this.table.rowManager.refreshActiveData("tree", false, true);
+       };
+
+       DataTree.prototype.findChildIndex = function (subject, parent) {
+               var _this44 = this;
+
+               var match = false;
+
+               if ((typeof subject === 'undefined' ? 'undefined' : _typeof(subject)) == "object") {
+
+                       if (subject instanceof Row) {
+                               //subject is row element
+                               match = subject.data;
+                       } else if (subject instanceof RowComponent) {
+                               //subject is public row component
+                               match = subject._getSelf().data;
+                       } else if (typeof HTMLElement !== "undefined" && subject instanceof HTMLElement) {
+                               if (parent.modules.dataTree) {
+                                       match = parent.modules.dataTree.children.find(function (childRow) {
+                                               return childRow instanceof Row ? childRow.element === subject : false;
+                                       });
+
+                                       if (match) {
+                                               match = match.data;
+                                       }
+                               }
+                       }
+               } else if (typeof subject == "undefined" || subject === null) {
+                       match = false;
+               } else {
+                       //subject should be treated as the index of the row
+                       match = parent.data[this.field].find(function (row) {
+                               return row.data[_this44.table.options.index] == subject;
+                       });
+               }
+
+               if (match) {
+
+                       if (Array.isArray(parent.data[this.field])) {
+                               match = parent.data[this.field].indexOf(match);
+                       }
+
+                       if (match == -1) {
+                               match = false;
+                       }
+               }
+
+               //catch all for any other type of input
+
+               return match;
+       };
+
+       DataTree.prototype.getTreeChildren = function (row) {
+               var config = row.modules.dataTree,
+                   output = [];
+
+               if (config.children) {
+
+                       if (!Array.isArray(config.children)) {
+                               config.children = this.generateChildren(row);
+                       }
+
+                       config.children.forEach(function (childRow) {
+                               if (childRow instanceof Row) {
+                                       output.push(childRow.getComponent());
+                               }
+                       });
+               }
+
+               return output;
+       };
+
+       DataTree.prototype.checkForRestyle = function (cell) {
+               if (!cell.row.cells.indexOf(cell)) {
+                       cell.row.reinitialize();
+               }
+       };
+
+       DataTree.prototype.getChildField = function () {
+               return this.field;
+       };
+
+       DataTree.prototype.redrawNeeded = function (data) {
+               return (this.field ? typeof data[this.field] !== "undefined" : false) || (this.elementField ? typeof data[this.elementField] !== "undefined" : false);
+       };
+
+       Tabulator.prototype.registerModule("dataTree", DataTree);
+
+       var Download = function Download(table) {
+               this.table = table; //hold Tabulator object
+       };
+
+       //trigger file download
+       Download.prototype.download = function (type, filename, options, range, interceptCallback) {
+               var self = this,
+                   downloadFunc = false;
+
+               function buildLink(data, mime) {
+                       if (interceptCallback) {
+                               if (interceptCallback === true) {
+                                       self.triggerDownload(data, mime, type, filename, true);
+                               } else {
+                                       interceptCallback(data);
+                               }
+                       } else {
+                               self.triggerDownload(data, mime, type, filename);
+                       }
+               }
+
+               if (typeof type == "function") {
+                       downloadFunc = type;
+               } else {
+                       if (self.downloaders[type]) {
+                               downloadFunc = self.downloaders[type];
+                       } else {
+                               console.warn("Download Error - No such download type found: ", type);
+                       }
+               }
+
+               if (downloadFunc) {
+                       var list = this.generateExportList(range);
+
+                       downloadFunc.call(this.table, list, options || {}, buildLink);
+               }
+       };
+
+       Download.prototype.generateExportList = function (range) {
+               var list = this.table.modules.export.generateExportList(this.table.options.downloadConfig, false, range || this.table.options.downloadRowRange, "download");
+
+               //assign group header formatter
+               var groupHeader = this.table.options.groupHeaderDownload;
+
+               if (groupHeader && !Array.isArray(groupHeader)) {
+                       groupHeader = [groupHeader];
+               }
+
+               list.forEach(function (row) {
+                       var group;
+
+                       if (row.type === "group") {
+                               group = row.columns[0];
+
+                               if (groupHeader && groupHeader[row.indent]) {
+                                       group.value = groupHeader[row.indent](group.value, row.component._group.getRowCount(), row.component._group.getData(), row.component);
+                               }
+                       }
+               });
+
+               return list;
+       };
+
+       Download.prototype.triggerDownload = function (data, mime, type, filename, newTab) {
+               var element = document.createElement('a'),
+                   blob = new Blob([data], { type: mime }),
+                   filename = filename || "Tabulator." + (typeof type === "function" ? "txt" : type);
+
+               blob = this.table.options.downloadReady.call(this.table, data, blob);
+
+               if (blob) {
+
+                       if (newTab) {
+                               window.open(window.URL.createObjectURL(blob));
+                       } else {
+                               if (navigator.msSaveOrOpenBlob) {
+                                       navigator.msSaveOrOpenBlob(blob, filename);
+                               } else {
+                                       element.setAttribute('href', window.URL.createObjectURL(blob));
+
+                                       //set file title
+                                       element.setAttribute('download', filename);
+
+                                       //trigger download
+                                       element.style.display = 'none';
+                                       document.body.appendChild(element);
+                                       element.click();
+
+                                       //remove temporary link element
+                                       document.body.removeChild(element);
+                               }
+                       }
+
+                       if (this.table.options.downloadComplete) {
+                               this.table.options.downloadComplete();
+                       }
+               }
+       };
+
+       Download.prototype.commsReceived = function (table, action, data) {
+               switch (action) {
+                       case "intercept":
+                               this.download(data.type, "", data.options, data.active, data.intercept);
+                               break;
+               }
+       };
+
+       //downloaders
+       Download.prototype.downloaders = {
+               csv: function csv(list, options, setFileContents) {
+                       var delimiter = options && options.delimiter ? options.delimiter : ",",
+                           fileContents = [],
+                           headers = [];
+
+                       list.forEach(function (row) {
+                               var item = [];
+
+                               switch (row.type) {
+                                       case "group":
+                                               console.warn("Download Warning - CSV downloader cannot process row groups");
+                                               break;
+
+                                       case "calc":
+                                               console.warn("Download Warning - CSV downloader cannot process column calculations");
+                                               break;
+
+                                       case "header":
+                                               row.columns.forEach(function (col, i) {
+                                                       if (col && col.depth === 1) {
+                                                               headers[i] = typeof col.value == "undefined" || typeof col.value == "null" ? "" : col.value;
+                                                       }
+                                               });
+                                               break;
+
+                                       case "row":
+                                               row.columns.forEach(function (col) {
+
+                                                       if (col) {
+
+                                                               switch (_typeof(col.value)) {
+                                                                       case "object":
+                                                                               col.value = JSON.stringify(col.value);
+                                                                               break;
+
+                                                                       case "undefined":
+                                                                       case "null":
+                                                                               col.value = "";
+                                                                               break;
+                                                               }
+
+                                                               item.push('"' + String(col.value).split('"').join('""') + '"');
+                                                       }
+                                               });
+
+                                               fileContents.push(item.join(delimiter));
+                                               break;
+                               }
+                       });
+
+                       if (headers.length) {
+                               fileContents = [headers].concat(fileContents);
+                       }
+
+                       fileContents = fileContents.join("\n");
+
+                       if (options.bom) {
+                               fileContents = '\uFEFF' + fileContents;
+                       }
+
+                       setFileContents(fileContents, "text/csv");
+               },
+
+               json: function json(list, options, setFileContents) {
+                       var fileContents = [];
+
+                       list.forEach(function (row) {
+                               var item = {};
+
+                               switch (row.type) {
+                                       case "header":
+                                               break;
+
+                                       case "group":
+                                               console.warn("Download Warning - JSON downloader cannot process row groups");
+                                               break;
+
+                                       case "calc":
+                                               console.warn("Download Warning - JSON downloader cannot process column calculations");
+                                               break;
+
+                                       case "row":
+                                               row.columns.forEach(function (col) {
+                                                       if (col) {
+                                                               item[col.component.getField()] = col.value;
+                                                       }
+                                               });
+
+                                               fileContents.push(item);
+                                               break;
+                               }
+                       });
+
+                       fileContents = JSON.stringify(fileContents, null, '\t');
+
+                       setFileContents(fileContents, "application/json");
+               },
+
+               pdf: function pdf(list, options, setFileContents) {
+                       var header = [],
+                           body = [],
+                           autoTableParams = {},
+                           rowGroupStyles = options.rowGroupStyles || {
+                               fontStyle: "bold",
+                               fontSize: 12,
+                               cellPadding: 6,
+                               fillColor: 220
+                       },
+                           rowCalcStyles = options.rowCalcStyles || {
+                               fontStyle: "bold",
+                               fontSize: 10,
+                               cellPadding: 4,
+                               fillColor: 232
+                       },
+                           jsPDFParams = options.jsPDF || {},
+                           title = options && options.title ? options.title : "";
+
+                       if (!jsPDFParams.orientation) {
+                               jsPDFParams.orientation = options.orientation || "landscape";
+                       }
+
+                       if (!jsPDFParams.unit) {
+                               jsPDFParams.unit = "pt";
+                       }
+
+                       //parse row list
+                       list.forEach(function (row) {
+                               var item = {};
+
+                               switch (row.type) {
+                                       case "header":
+                                               header.push(parseRow(row));
+                                               break;
+
+                                       case "group":
+                                               body.push(parseRow(row, rowGroupStyles));
+                                               break;
+
+                                       case "calc":
+                                               body.push(parseRow(row, rowCalcStyles));
+                                               break;
+
+                                       case "row":
+                                               body.push(parseRow(row));
+                                               break;
+                               }
+                       });
+
+                       function parseRow(row, styles) {
+                               var rowData = [];
+
+                               row.columns.forEach(function (col) {
+                                       var cell;
+
+                                       if (col) {
+                                               switch (_typeof(col.value)) {
+                                                       case "object":
+                                                               col.value = JSON.stringify(col.value);
+                                                               break;
+
+                                                       case "undefined":
+                                                       case "null":
+                                                               col.value = "";
+                                                               break;
+                                               }
+
+                                               cell = {
+                                                       content: col.value,
+                                                       colSpan: col.width,
+                                                       rowSpan: col.height
+                                               };
+
+                                               if (styles) {
+                                                       cell.styles = styles;
+                                               }
+
+                                               rowData.push(cell);
+                                       } else {
+                                               rowData.push("");
+                                       }
+                               });
+
+                               return rowData;
+                       }
+
+                       //configure PDF
+                       var doc = new jsPDF(jsPDFParams); //set document to landscape, better for most tables
+
+                       if (options && options.autoTable) {
+                               if (typeof options.autoTable === "function") {
+                                       autoTableParams = options.autoTable(doc) || {};
+                               } else {
+                                       autoTableParams = options.autoTable;
+                               }
+                       }
+
+                       if (title) {
+                               autoTableParams.addPageContent = function (data) {
+                                       doc.text(title, 40, 30);
+                               };
+                       }
+
+                       autoTableParams.head = header;
+                       autoTableParams.body = body;
+
+                       doc.autoTable(autoTableParams);
+
+                       if (options && options.documentProcessing) {
+                               options.documentProcessing(doc);
+                       }
+
+                       setFileContents(doc.output("arraybuffer"), "application/pdf");
+               },
+
+               xlsx: function xlsx(list, options, setFileContents) {
+                       var self = this,
+                           sheetName = options.sheetName || "Sheet1",
+                           workbook = XLSX.utils.book_new(),
+                           output;
+
+                       workbook.SheetNames = [];
+                       workbook.Sheets = {};
+
+                       function generateSheet() {
+                               var rows = [],
+                                   merges = [],
+                                   worksheet = {},
+                                   range = { s: { c: 0, r: 0 }, e: { c: list[0] ? list[0].columns.reduce(function (a, b) {
+                                                       return a + (b && b.width ? b.width : 1);
+                                               }, 0) : 0, r: list.length } };
+
+                               //parse row list
+                               list.forEach(function (row, i) {
+                                       var rowData = [];
+
+                                       row.columns.forEach(function (col, j) {
+
+                                               if (col) {
+                                                       rowData.push(!(col.value instanceof Date) && _typeof(col.value) === "object" ? JSON.stringify(col.value) : col.value);
+
+                                                       if (col.width > 1 || col.height > -1) {
+                                                               merges.push({ s: { r: i, c: j }, e: { r: i + col.height - 1, c: j + col.width - 1 } });
+                                                       }
+                                               } else {
+                                                       rowData.push("");
+                                               }
+                                       });
+
+                                       rows.push(rowData);
+                               });
+
+                               //convert rows to worksheet
+                               XLSX.utils.sheet_add_aoa(worksheet, rows);
+
+                               worksheet['!ref'] = XLSX.utils.encode_range(range);
+
+                               if (merges.length) {
+                                       worksheet["!merges"] = merges;
+                               }
+
+                               return worksheet;
+                       }
+
+                       if (options.sheetOnly) {
+                               setFileContents(generateSheet());
+                               return;
+                       }
+
+                       if (options.sheets) {
+                               for (var sheet in options.sheets) {
+
+                                       if (options.sheets[sheet] === true) {
+                                               workbook.SheetNames.push(sheet);
+                                               workbook.Sheets[sheet] = generateSheet();
+                                       } else {
+
+                                               workbook.SheetNames.push(sheet);
+
+                                               this.table.modules.comms.send(options.sheets[sheet], "download", "intercept", {
+                                                       type: "xlsx",
+                                                       options: { sheetOnly: true },
+                                                       active: self.active,
+                                                       intercept: function intercept(data) {
+                                                               workbook.Sheets[sheet] = data;
+                                                       }
+                                               });
+                                       }
+                               }
+                       } else {
+                               workbook.SheetNames.push(sheetName);
+                               workbook.Sheets[sheetName] = generateSheet();
+                       }
+
+                       if (options.documentProcessing) {
+                               workbook = options.documentProcessing(workbook);
+                       }
+
+                       //convert workbook to binary array
+                       function s2ab(s) {
+                               var buf = new ArrayBuffer(s.length);
+                               var view = new Uint8Array(buf);
+                               for (var i = 0; i != s.length; ++i) {
+                                       view[i] = s.charCodeAt(i) & 0xFF;
+                               }return buf;
+                       }
+
+                       output = XLSX.write(workbook, { bookType: 'xlsx', bookSST: true, type: 'binary' });
+
+                       setFileContents(s2ab(output), "application/octet-stream");
+               },
+
+               html: function html(list, options, setFileContents) {
+                       if (this.modExists("export", true)) {
+                               setFileContents(this.modules.export.genereateHTMLTable(list), "text/html");
+                       }
+               }
+
+       };
+
+       Tabulator.prototype.registerModule("download", Download);
+
+       var Edit = function Edit(table) {
+               this.table = table; //hold Tabulator object
+               this.currentCell = false; //hold currently editing cell
+               this.mouseClick = false; //hold mousedown state to prevent click binding being overriden by editor opening
+               this.recursionBlock = false; //prevent focus recursion
+               this.invalidEdit = false;
+               this.editedCells = [];
+       };
+
+       //initialize column editor
+       Edit.prototype.initializeColumn = function (column) {
+               var self = this,
+                   config = {
+                       editor: false,
+                       blocked: false,
+                       check: column.definition.editable,
+                       params: column.definition.editorParams || {}
+               };
+
+               //set column editor
+               switch (_typeof(column.definition.editor)) {
+                       case "string":
+
+                               if (column.definition.editor === "tick") {
+                                       column.definition.editor = "tickCross";
+                                       console.warn("DEPRECATION WARNING - the tick editor has been deprecated, please use the tickCross editor");
+                               }
+
+                               if (self.editors[column.definition.editor]) {
+                                       config.editor = self.editors[column.definition.editor];
+                               } else {
+                                       console.warn("Editor Error - No such editor found: ", column.definition.editor);
+                               }
+                               break;
+
+                       case "function":
+                               config.editor = column.definition.editor;
+                               break;
+
+                       case "boolean":
+
+                               if (column.definition.editor === true) {
+
+                                       if (typeof column.definition.formatter !== "function") {
+
+                                               if (column.definition.formatter === "tick") {
+                                                       column.definition.formatter = "tickCross";
+                                                       console.warn("DEPRECATION WARNING - the tick editor has been deprecated, please use the tickCross editor");
+                                               }
+
+                                               if (self.editors[column.definition.formatter]) {
+                                                       config.editor = self.editors[column.definition.formatter];
+                                               } else {
+                                                       config.editor = self.editors["input"];
+                                               }
+                                       } else {
+                                               console.warn("Editor Error - Cannot auto lookup editor for a custom formatter: ", column.definition.formatter);
+                                       }
+                               }
+                               break;
+               }
+
+               if (config.editor) {
+                       column.modules.edit = config;
+               }
+       };
+
+       Edit.prototype.getCurrentCell = function () {
+               return this.currentCell ? this.currentCell.getComponent() : false;
+       };
+
+       Edit.prototype.clearEditor = function (cancel) {
+               var cell = this.currentCell,
+                   cellEl;
+
+               this.invalidEdit = false;
+
+               if (cell) {
+                       this.currentCell = false;
+
+                       cellEl = cell.getElement();
+
+                       if (cancel) {
+                               cell.validate();
+                       } else {
+                               cellEl.classList.remove("tabulator-validation-fail");
+                       }
+
+                       cellEl.classList.remove("tabulator-editing");
+                       while (cellEl.firstChild) {
+                               cellEl.removeChild(cellEl.firstChild);
+                       }cell.row.getElement().classList.remove("tabulator-row-editing");
+               }
+       };
+
+       Edit.prototype.cancelEdit = function () {
+
+               if (this.currentCell) {
+                       var cell = this.currentCell;
+                       var component = this.currentCell.getComponent();
+
+                       this.clearEditor(true);
+                       cell.setValueActual(cell.getValue());
+                       cell.cellRendered();
+
+                       if (cell.column.cellEvents.cellEditCancelled) {
+                               cell.column.cellEvents.cellEditCancelled.call(this.table, component);
+                       }
+
+                       this.table.options.cellEditCancelled.call(this.table, component);
+               }
+       };
+
+       //return a formatted value for a cell
+       Edit.prototype.bindEditor = function (cell) {
+               var self = this,
+                   element = cell.getElement();
+
+               element.setAttribute("tabindex", 0);
+
+               element.addEventListener("click", function (e) {
+                       if (!element.classList.contains("tabulator-editing")) {
+                               element.focus({ preventScroll: true });
+                       }
+               });
+
+               element.addEventListener("mousedown", function (e) {
+                       self.mouseClick = true;
+               });
+
+               element.addEventListener("focus", function (e) {
+                       if (!self.recursionBlock) {
+                               self.edit(cell, e, false);
+                       }
+               });
+       };
+
+       Edit.prototype.focusCellNoEvent = function (cell, block) {
+               this.recursionBlock = true;
+               if (!(block && this.table.browser === "ie")) {
+                       cell.getElement().focus({ preventScroll: true });
+               }
+               this.recursionBlock = false;
+       };
+
+       Edit.prototype.editCell = function (cell, forceEdit) {
+               this.focusCellNoEvent(cell);
+               this.edit(cell, false, forceEdit);
+       };
+
+       Edit.prototype.focusScrollAdjust = function (cell) {
+               if (this.table.rowManager.getRenderMode() == "virtual") {
+                       var topEdge = this.table.rowManager.element.scrollTop,
+                           bottomEdge = this.table.rowManager.element.clientHeight + this.table.rowManager.element.scrollTop,
+                           rowEl = cell.row.getElement(),
+                           offset = rowEl.offsetTop;
+
+                       if (rowEl.offsetTop < topEdge) {
+                               this.table.rowManager.element.scrollTop -= topEdge - rowEl.offsetTop;
+                       } else {
+                               if (rowEl.offsetTop + rowEl.offsetHeight > bottomEdge) {
+                                       this.table.rowManager.element.scrollTop += rowEl.offsetTop + rowEl.offsetHeight - bottomEdge;
+                               }
+                       }
+               }
+       };
+
+       Edit.prototype.edit = function (cell, e, forceEdit) {
+               var self = this,
+                   allowEdit = true,
+                   rendered = function rendered() {},
+                   element = cell.getElement(),
+                   cellEditor,
+                   component,
+                   params;
+
+               //prevent editing if another cell is refusing to leave focus (eg. validation fail)
+               if (this.currentCell) {
+                       if (!this.invalidEdit) {
+                               this.cancelEdit();
+                       }
+                       return;
+               }
+
+               //handle successfull value change
+               function success(value) {
+                       if (self.currentCell === cell) {
+                               var valid = true;
+
+                               if (cell.column.modules.validate && self.table.modExists("validate") && self.table.options.validationMode != "manual") {
+                                       valid = self.table.modules.validate.validate(cell.column.modules.validate, cell, value);
+                               }
+
+                               if (valid === true || self.table.options.validationMode === "highlight") {
+                                       self.clearEditor();
+                                       cell.setValue(value, true);
+
+                                       if (!cell.modules.edit) {
+                                               cell.modules.edit = {};
+                                       }
+
+                                       cell.modules.edit.edited = true;
+
+                                       if (self.editedCells.indexOf(cell) == -1) {
+                                               self.editedCells.push(cell);
+                                       }
+
+                                       if (self.table.options.dataTree && self.table.modExists("dataTree")) {
+                                               self.table.modules.dataTree.checkForRestyle(cell);
+                                       }
+
+                                       if (valid !== true) {
+                                               element.classList.add("tabulator-validation-fail");
+                                               return false;
+                                       }
+
+                                       return true;
+                               } else {
+                                       self.invalidEdit = true;
+                                       element.classList.add("tabulator-validation-fail");
+                                       self.focusCellNoEvent(cell, true);
+                                       rendered();
+                                       self.table.options.validationFailed.call(self.table, cell.getComponent(), value, valid);
+
+                                       return false;
+                               }
+                       } else {
+                               // console.warn("Edit Success Error - cannot call success on a cell that is no longer being edited");
+                       }
+               }
+
+               //handle aborted edit
+               function cancel() {
+                       if (self.currentCell === cell) {
+                               self.cancelEdit();
+
+                               if (self.table.options.dataTree && self.table.modExists("dataTree")) {
+                                       self.table.modules.dataTree.checkForRestyle(cell);
+                               }
+                       } else {
+                               // console.warn("Edit Success Error - cannot call cancel on a cell that is no longer being edited");
+                       }
+               }
+
+               function onRendered(callback) {
+                       rendered = callback;
+               }
+
+               if (!cell.column.modules.edit.blocked) {
+                       if (e) {
+                               e.stopPropagation();
+                       }
+
+                       switch (_typeof(cell.column.modules.edit.check)) {
+                               case "function":
+                                       allowEdit = cell.column.modules.edit.check(cell.getComponent());
+                                       break;
+
+                               case "boolean":
+                                       allowEdit = cell.column.modules.edit.check;
+                                       break;
+                       }
+
+                       if (allowEdit || forceEdit) {
+
+                               self.cancelEdit();
+
+                               self.currentCell = cell;
+
+                               this.focusScrollAdjust(cell);
+
+                               component = cell.getComponent();
+
+                               if (this.mouseClick) {
+                                       this.mouseClick = false;
+
+                                       if (cell.column.cellEvents.cellClick) {
+                                               cell.column.cellEvents.cellClick.call(this.table, e, component);
+                                       }
+                               }
+
+                               if (cell.column.cellEvents.cellEditing) {
+                                       cell.column.cellEvents.cellEditing.call(this.table, component);
+                               }
+
+                               self.table.options.cellEditing.call(this.table, component);
+
+                               params = typeof cell.column.modules.edit.params === "function" ? cell.column.modules.edit.params(component) : cell.column.modules.edit.params;
+
+                               cellEditor = cell.column.modules.edit.editor.call(self, component, onRendered, success, cancel, params);
+
+                               //if editor returned, add to DOM, if false, abort edit
+                               if (cellEditor !== false) {
+
+                                       if (cellEditor instanceof Node) {
+                                               element.classList.add("tabulator-editing");
+                                               cell.row.getElement().classList.add("tabulator-row-editing");
+                                               while (element.firstChild) {
+                                                       element.removeChild(element.firstChild);
+                                               }element.appendChild(cellEditor);
+
+                                               //trigger onRendered Callback
+                                               rendered();
+
+                                               //prevent editing from triggering rowClick event
+                                               var children = element.children;
+
+                                               for (var i = 0; i < children.length; i++) {
+                                                       children[i].addEventListener("click", function (e) {
+                                                               e.stopPropagation();
+                                                       });
+                                               }
+                                       } else {
+                                               console.warn("Edit Error - Editor should return an instance of Node, the editor returned:", cellEditor);
+                                               element.blur();
+                                               return false;
+                                       }
+                               } else {
+                                       element.blur();
+                                       return false;
+                               }
+
+                               return true;
+                       } else {
+                               this.mouseClick = false;
+                               element.blur();
+                               return false;
+                       }
+               } else {
+                       this.mouseClick = false;
+                       element.blur();
+                       return false;
+               }
+       };
+
+       Edit.prototype.maskInput = function (el, options) {
+               var mask = options.mask,
+                   maskLetter = typeof options.maskLetterChar !== "undefined" ? options.maskLetterChar : "A",
+                   maskNumber = typeof options.maskNumberChar !== "undefined" ? options.maskNumberChar : "9",
+                   maskWildcard = typeof options.maskWildcardChar !== "undefined" ? options.maskWildcardChar : "*",
+                   success = false;
+
+               function fillSymbols(index) {
+                       var symbol = mask[index];
+                       if (typeof symbol !== "undefined" && symbol !== maskWildcard && symbol !== maskLetter && symbol !== maskNumber) {
+                               el.value = el.value + "" + symbol;
+                               fillSymbols(index + 1);
+                       }
+               }
+
+               el.addEventListener("keydown", function (e) {
+                       var index = el.value.length,
+                           char = e.key;
+
+                       if (e.keyCode > 46) {
+                               if (index >= mask.length) {
+                                       e.preventDefault();
+                                       e.stopPropagation();
+                                       success = false;
+                                       return false;
+                               } else {
+                                       switch (mask[index]) {
+                                               case maskLetter:
+                                                       if (char.toUpperCase() == char.toLowerCase()) {
+                                                               e.preventDefault();
+                                                               e.stopPropagation();
+                                                               success = false;
+                                                               return false;
+                                                       }
+                                                       break;
+
+                                               case maskNumber:
+                                                       if (isNaN(char)) {
+                                                               e.preventDefault();
+                                                               e.stopPropagation();
+                                                               success = false;
+                                                               return false;
+                                                       }
+                                                       break;
+
+                                               case maskWildcard:
+                                                       break;
+
+                                               default:
+                                                       if (char !== mask[index]) {
+                                                               e.preventDefault();
+                                                               e.stopPropagation();
+                                                               success = false;
+                                                               return false;
+                                                       }
+                                       }
+                               }
+
+                               success = true;
+                       }
+
+                       return;
+               });
+
+               el.addEventListener("keyup", function (e) {
+                       if (e.keyCode > 46) {
+                               if (options.maskAutoFill) {
+                                       fillSymbols(el.value.length);
+                               }
+                       }
+               });
+
+               if (!el.placeholder) {
+                       el.placeholder = mask;
+               }
+
+               if (options.maskAutoFill) {
+                       fillSymbols(el.value.length);
+               }
+       };
+
+       Edit.prototype.getEditedCells = function () {
+               var output = [];
+
+               this.editedCells.forEach(function (cell) {
+                       output.push(cell.getComponent());
+               });
+
+               return output;
+       };
+
+       Edit.prototype.clearEdited = function (cell) {
+               var editIndex;
+
+               if (cell.modules.edit && cell.modules.edit.edited) {
+                       cell.modules.validate.invalid = false;
+
+                       editIndex = this.editedCells.indexOf(cell);
+
+                       if (editIndex > -1) {
+                               this.editedCells.splice(editIndex, 1);
+                       }
+               }
+       };
+
+       //default data editors
+       Edit.prototype.editors = {
+
+               //input element
+               input: function input(cell, onRendered, success, cancel, editorParams) {
+
+                       //create and style input
+                       var cellValue = cell.getValue(),
+                           input = document.createElement("input");
+
+                       input.setAttribute("type", editorParams.search ? "search" : "text");
+
+                       input.style.padding = "4px";
+                       input.style.width = "100%";
+                       input.style.boxSizing = "border-box";
+
+                       if (editorParams.elementAttributes && _typeof(editorParams.elementAttributes) == "object") {
+                               for (var key in editorParams.elementAttributes) {
+                                       if (key.charAt(0) == "+") {
+                                               key = key.slice(1);
+                                               input.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes["+" + key]);
+                                       } else {
+                                               input.setAttribute(key, editorParams.elementAttributes[key]);
+                                       }
+                               }
+                       }
+
+                       input.value = typeof cellValue !== "undefined" ? cellValue : "";
+
+                       onRendered(function () {
+                               input.focus({ preventScroll: true });
+                               input.style.height = "100%";
+                       });
+
+                       function onChange(e) {
+                               if ((cellValue === null || typeof cellValue === "undefined") && input.value !== "" || input.value !== cellValue) {
+                                       if (success(input.value)) {
+                                               cellValue = input.value; //persist value if successfully validated incase editor is used as header filter
+                                       }
+                               } else {
+                                       cancel();
+                               }
+                       }
+
+                       //submit new value on blur or change
+                       input.addEventListener("change", onChange);
+                       input.addEventListener("blur", onChange);
+
+                       //submit new value on enter
+                       input.addEventListener("keydown", function (e) {
+                               switch (e.keyCode) {
+                                       // case 9:
+                                       case 13:
+                                               onChange(e);
+                                               break;
+
+                                       case 27:
+                                               cancel();
+                                               break;
+                               }
+                       });
+
+                       if (editorParams.mask) {
+                               this.table.modules.edit.maskInput(input, editorParams);
+                       }
+
+                       return input;
+               },
+
+               //resizable text area element
+               textarea: function textarea(cell, onRendered, success, cancel, editorParams) {
+                       var self = this,
+                           cellValue = cell.getValue(),
+                           vertNav = editorParams.verticalNavigation || "hybrid",
+                           value = String(cellValue !== null && typeof cellValue !== "undefined" ? cellValue : ""),
+                           count = (value.match(/(?:\r\n|\r|\n)/g) || []).length + 1,
+                           input = document.createElement("textarea"),
+                           scrollHeight = 0;
+
+                       //create and style input
+                       input.style.display = "block";
+                       input.style.padding = "2px";
+                       input.style.height = "100%";
+                       input.style.width = "100%";
+                       input.style.boxSizing = "border-box";
+                       input.style.whiteSpace = "pre-wrap";
+                       input.style.resize = "none";
+
+                       if (editorParams.elementAttributes && _typeof(editorParams.elementAttributes) == "object") {
+                               for (var key in editorParams.elementAttributes) {
+                                       if (key.charAt(0) == "+") {
+                                               key = key.slice(1);
+                                               input.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes["+" + key]);
+                                       } else {
+                                               input.setAttribute(key, editorParams.elementAttributes[key]);
+                                       }
+                               }
+                       }
+
+                       input.value = value;
+
+                       onRendered(function () {
+                               input.focus({ preventScroll: true });
+                               input.style.height = "100%";
+                       });
+
+                       function onChange(e) {
+
+                               if ((cellValue === null || typeof cellValue === "undefined") && input.value !== "" || input.value !== cellValue) {
+
+                                       if (success(input.value)) {
+                                               cellValue = input.value; //persist value if successfully validated incase editor is used as header filter
+                                       }
+
+                                       setTimeout(function () {
+                                               cell.getRow().normalizeHeight();
+                                       }, 300);
+                               } else {
+                                       cancel();
+                               }
+                       }
+
+                       //submit new value on blur or change
+                       input.addEventListener("change", onChange);
+                       input.addEventListener("blur", onChange);
+
+                       input.addEventListener("keyup", function () {
+
+                               input.style.height = "";
+
+                               var heightNow = input.scrollHeight;
+
+                               input.style.height = heightNow + "px";
+
+                               if (heightNow != scrollHeight) {
+                                       scrollHeight = heightNow;
+                                       cell.getRow().normalizeHeight();
+                               }
+                       });
+
+                       input.addEventListener("keydown", function (e) {
+
+                               switch (e.keyCode) {
+                                       case 27:
+                                               cancel();
+                                               break;
+
+                                       case 38:
+                                               //up arrow
+                                               if (vertNav == "editor" || vertNav == "hybrid" && input.selectionStart) {
+                                                       e.stopImmediatePropagation();
+                                                       e.stopPropagation();
+                                               }
+
+                                               break;
+
+                                       case 40:
+                                               //down arrow
+                                               if (vertNav == "editor" || vertNav == "hybrid" && input.selectionStart !== input.value.length) {
+                                                       e.stopImmediatePropagation();
+                                                       e.stopPropagation();
+                                               }
+                                               break;
+                               }
+                       });
+
+                       if (editorParams.mask) {
+                               this.table.modules.edit.maskInput(input, editorParams);
+                       }
+
+                       return input;
+               },
+
+               //input element with type of number
+               number: function number(cell, onRendered, success, cancel, editorParams) {
+
+                       var cellValue = cell.getValue(),
+                           vertNav = editorParams.verticalNavigation || "editor",
+                           input = document.createElement("input");
+
+                       input.setAttribute("type", "number");
+
+                       if (typeof editorParams.max != "undefined") {
+                               input.setAttribute("max", editorParams.max);
+                       }
+
+                       if (typeof editorParams.min != "undefined") {
+                               input.setAttribute("min", editorParams.min);
+                       }
+
+                       if (typeof editorParams.step != "undefined") {
+                               input.setAttribute("step", editorParams.step);
+                       }
+
+                       //create and style input
+                       input.style.padding = "4px";
+                       input.style.width = "100%";
+                       input.style.boxSizing = "border-box";
+
+                       if (editorParams.elementAttributes && _typeof(editorParams.elementAttributes) == "object") {
+                               for (var key in editorParams.elementAttributes) {
+                                       if (key.charAt(0) == "+") {
+                                               key = key.slice(1);
+                                               input.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes["+" + key]);
+                                       } else {
+                                               input.setAttribute(key, editorParams.elementAttributes[key]);
+                                       }
+                               }
+                       }
+
+                       input.value = cellValue;
+
+                       var blurFunc = function blurFunc(e) {
+                               onChange();
+                       };
+
+                       onRendered(function () {
+                               //submit new value on blur
+                               input.removeEventListener("blur", blurFunc);
+
+                               input.focus({ preventScroll: true });
+                               input.style.height = "100%";
+
+                               //submit new value on blur
+                               input.addEventListener("blur", blurFunc);
+                       });
+
+                       function onChange() {
+                               var value = input.value;
+
+                               if (!isNaN(value) && value !== "") {
+                                       value = Number(value);
+                               }
+
+                               if (value !== cellValue) {
+                                       if (success(value)) {
+                                               cellValue = value; //persist value if successfully validated incase editor is used as header filter
+                                       }
+                               } else {
+                                       cancel();
+                               }
+                       }
+
+                       //submit new value on enter
+                       input.addEventListener("keydown", function (e) {
+                               switch (e.keyCode) {
+                                       case 13:
+                                               // case 9:
+                                               onChange();
+                                               break;
+
+                                       case 27:
+                                               cancel();
+                                               break;
+
+                                       case 38: //up arrow
+                                       case 40:
+                                               //down arrow
+                                               if (vertNav == "editor") {
+                                                       e.stopImmediatePropagation();
+                                                       e.stopPropagation();
+                                               }
+                                               break;
+                               }
+                       });
+
+                       if (editorParams.mask) {
+                               this.table.modules.edit.maskInput(input, editorParams);
+                       }
+
+                       return input;
+               },
+
+               //input element with type of number
+               range: function range(cell, onRendered, success, cancel, editorParams) {
+
+                       var cellValue = cell.getValue(),
+                           input = document.createElement("input");
+
+                       input.setAttribute("type", "range");
+
+                       if (typeof editorParams.max != "undefined") {
+                               input.setAttribute("max", editorParams.max);
+                       }
+
+                       if (typeof editorParams.min != "undefined") {
+                               input.setAttribute("min", editorParams.min);
+                       }
+
+                       if (typeof editorParams.step != "undefined") {
+                               input.setAttribute("step", editorParams.step);
+                       }
+
+                       //create and style input
+                       input.style.padding = "4px";
+                       input.style.width = "100%";
+                       input.style.boxSizing = "border-box";
+
+                       if (editorParams.elementAttributes && _typeof(editorParams.elementAttributes) == "object") {
+                               for (var key in editorParams.elementAttributes) {
+                                       if (key.charAt(0) == "+") {
+                                               key = key.slice(1);
+                                               input.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes["+" + key]);
+                                       } else {
+                                               input.setAttribute(key, editorParams.elementAttributes[key]);
+                                       }
+                               }
+                       }
+
+                       input.value = cellValue;
+
+                       onRendered(function () {
+                               input.focus({ preventScroll: true });
+                               input.style.height = "100%";
+                       });
+
+                       function onChange() {
+                               var value = input.value;
+
+                               if (!isNaN(value) && value !== "") {
+                                       value = Number(value);
+                               }
+
+                               if (value != cellValue) {
+                                       if (success(value)) {
+                                               cellValue = value; //persist value if successfully validated incase editor is used as header filter
+                                       }
+                               } else {
+                                       cancel();
+                               }
+                       }
+
+                       //submit new value on blur
+                       input.addEventListener("blur", function (e) {
+                               onChange();
+                       });
+
+                       //submit new value on enter
+                       input.addEventListener("keydown", function (e) {
+                               switch (e.keyCode) {
+                                       case 13:
+                                               // case 9:
+                                               onChange();
+                                               break;
+
+                                       case 27:
+                                               cancel();
+                                               break;
+                               }
+                       });
+
+                       return input;
+               },
+
+               //select
+               select: function select(cell, onRendered, success, cancel, editorParams) {
+                       var self = this,
+                           cellEl = cell.getElement(),
+                           initialValue = cell.getValue(),
+                           vertNav = editorParams.verticalNavigation || "editor",
+                           initialDisplayValue = typeof initialValue !== "undefined" || initialValue === null ? initialValue : typeof editorParams.defaultValue !== "undefined" ? editorParams.defaultValue : [],
+                           input = document.createElement("input"),
+                           listEl = document.createElement("div"),
+                           multiselect = editorParams.multiselect,
+                           dataItems = [],
+                           currentItem = {},
+                           displayItems = [],
+                           currentItems = [],
+                           blurable = true;
+
+                       this.table.rowManager.element.addEventListener("scroll", cancelItem);
+
+                       if (Array.isArray(editorParams) || !Array.isArray(editorParams) && (typeof editorParams === 'undefined' ? 'undefined' : _typeof(editorParams)) === "object" && !editorParams.values) {
+                               console.warn("DEPRECATION WARNING - values for the select editor must now be passed into the values property of the editorParams object, not as the editorParams object");
+                               editorParams = { values: editorParams };
+                       }
+
+                       function getUniqueColumnValues(field) {
+                               var output = {},
+                                   data = self.table.getData(),
+                                   column;
+
+                               if (field) {
+                                       column = self.table.columnManager.getColumnByField(field);
+                               } else {
+                                       column = cell.getColumn()._getSelf();
+                               }
+
+                               if (column) {
+                                       data.forEach(function (row) {
+                                               var val = column.getFieldValue(row);
+
+                                               if (val !== null && typeof val !== "undefined" && val !== "") {
+                                                       output[val] = true;
+                                               }
+                                       });
+
+                                       if (editorParams.sortValuesList) {
+                                               if (editorParams.sortValuesList == "asc") {
+                                                       output = Object.keys(output).sort();
+                                               } else {
+                                                       output = Object.keys(output).sort().reverse();
+                                               }
+                                       } else {
+                                               output = Object.keys(output);
+                                       }
+                               } else {
+                                       console.warn("unable to find matching column to create select lookup list:", field);
+                               }
+
+                               return output;
+                       }
+
+                       function parseItems(inputValues, curentValues) {
+                               var dataList = [];
+                               var displayList = [];
+
+                               function processComplexListItem(item) {
+                                       var item = {
+                                               label: item.label,
+                                               value: item.value,
+                                               itemParams: item.itemParams,
+                                               elementAttributes: item.elementAttributes,
+                                               element: false
+                                       };
+
+                                       // if(item.value === curentValue || (!isNaN(parseFloat(item.value)) && !isNaN(parseFloat(item.value)) && parseFloat(item.value) === parseFloat(curentValue))){
+                                       //      setCurrentItem(item);
+                                       // }
+
+                                       if (curentValues.indexOf(item.value) > -1) {
+                                               setItem(item);
+                                       }
+
+                                       dataList.push(item);
+                                       displayList.push(item);
+
+                                       return item;
+                               }
+
+                               if (typeof inputValues == "function") {
+                                       inputValues = inputValues(cell);
+                               }
+
+                               if (Array.isArray(inputValues)) {
+                                       inputValues.forEach(function (value) {
+                                               var item;
+
+                                               if ((typeof value === 'undefined' ? 'undefined' : _typeof(value)) === "object") {
+
+                                                       if (value.options) {
+                                                               item = {
+                                                                       label: value.label,
+                                                                       group: true,
+                                                                       itemParams: value.itemParams,
+                                                                       elementAttributes: value.elementAttributes,
+                                                                       element: false
+                                                               };
+
+                                                               displayList.push(item);
+
+                                                               value.options.forEach(function (item) {
+                                                                       processComplexListItem(item);
+                                                               });
+                                                       } else {
+                                                               processComplexListItem(value);
+                                                       }
+                                               } else {
+
+                                                       item = {
+                                                               label: value,
+                                                               value: value,
+                                                               element: false
+                                                       };
+
+                                                       // if(item.value === curentValue || (!isNaN(parseFloat(item.value)) && !isNaN(parseFloat(item.value)) && parseFloat(item.value) === parseFloat(curentValue))){
+                                                       //      setCurrentItem(item);
+                                                       // }
+
+                                                       if (curentValues.indexOf(item.value) > -1) {
+                                                               setItem(item);
+                                                       }
+
+                                                       dataList.push(item);
+                                                       displayList.push(item);
+                                               }
+                                       });
+                               } else {
+                                       for (var key in inputValues) {
+                                               var item = {
+                                                       label: inputValues[key],
+                                                       value: key,
+                                                       element: false
+                                               };
+
+                                               // if(item.value === curentValue || (!isNaN(parseFloat(item.value)) && !isNaN(parseFloat(item.value)) && parseFloat(item.value) === parseFloat(curentValue))){
+                                               //      setCurrentItem(item);
+                                               // }
+
+                                               if (curentValues.indexOf(item.value) > -1) {
+                                                       setItem(item);
+                                               }
+
+                                               dataList.push(item);
+                                               displayList.push(item);
+                                       }
+                               }
+
+                               dataItems = dataList;
+                               displayItems = displayList;
+
+                               fillList();
+                       }
+
+                       function fillList() {
+                               while (listEl.firstChild) {
+                                       listEl.removeChild(listEl.firstChild);
+                               }displayItems.forEach(function (item) {
+
+                                       var el = item.element;
+
+                                       if (!el) {
+                                               el = document.createElement("div");
+                                               item.label = editorParams.listItemFormatter ? editorParams.listItemFormatter(item.value, item.label, cell, el, item.itemParams) : item.label;
+                                               if (item.group) {
+                                                       el.classList.add("tabulator-edit-select-list-group");
+                                                       el.tabIndex = 0;
+                                                       el.innerHTML = item.label === "" ? "&nbsp;" : item.label;
+                                               } else {
+                                                       el.classList.add("tabulator-edit-select-list-item");
+                                                       el.tabIndex = 0;
+                                                       el.innerHTML = item.label === "" ? "&nbsp;" : item.label;
+
+                                                       el.addEventListener("click", function () {
+                                                               // setCurrentItem(item);
+                                                               // chooseItem();
+                                                               if (multiselect) {
+                                                                       toggleItem(item);
+                                                                       input.focus();
+                                                               } else {
+                                                                       chooseItem(item);
+                                                               }
+                                                       });
+
+                                                       // if(item === currentItem){
+                                                       //      el.classList.add("active");
+                                                       // }
+
+                                                       if (currentItems.indexOf(item) > -1) {
+                                                               el.classList.add("active");
+                                                       }
+                                               }
+
+                                               if (item.elementAttributes && _typeof(item.elementAttributes) == "object") {
+                                                       for (var key in item.elementAttributes) {
+                                                               if (key.charAt(0) == "+") {
+                                                                       key = key.slice(1);
+                                                                       el.setAttribute(key, input.getAttribute(key) + item.elementAttributes["+" + key]);
+                                                               } else {
+                                                                       el.setAttribute(key, item.elementAttributes[key]);
+                                                               }
+                                                       }
+                                               }
+                                               el.addEventListener("mousedown", function () {
+                                                       blurable = false;
+
+                                                       setTimeout(function () {
+                                                               blurable = true;
+                                                       }, 10);
+                                               });
+
+                                               item.element = el;
+                                       }
+
+                                       listEl.appendChild(el);
+                               });
+                       }
+
+                       function setCurrentItem(item, active) {
+
+                               if (!multiselect && currentItem && currentItem.element) {
+                                       currentItem.element.classList.remove("active");
+                               }
+
+                               if (currentItem && currentItem.element) {
+                                       currentItem.element.classList.remove("focused");
+                               }
+
+                               currentItem = item;
+
+                               if (item.element) {
+                                       item.element.classList.add("focused");
+                                       if (active) {
+                                               item.element.classList.add("active");
+                                       }
+                               }
+                       }
+
+                       // function chooseItem(){
+                       //      hideList();
+
+                       //      if(initialValue !== currentItem.value){
+                       //              initialValue = currentItem.value;
+                       //              success(currentItem.value);
+                       //      }else{
+                       //              cancel();
+                       //      }
+                       // }
+
+                       function setItem(item) {
+                               var index = currentItems.indexOf(item);
+
+                               if (index == -1) {
+                                       currentItems.push(item);
+                                       setCurrentItem(item, true);
+                               }
+
+                               fillInput();
+                       }
+
+                       function unsetItem(index) {
+                               var item = currentItems[index];
+
+                               if (index > -1) {
+                                       currentItems.splice(index, 1);
+                                       if (item.element) {
+                                               item.element.classList.remove("active");
+                                       }
+                               }
+                       }
+
+                       function toggleItem(item) {
+                               if (!item) {
+                                       item = currentItem;
+                               }
+
+                               var index = currentItems.indexOf(item);
+
+                               if (index > -1) {
+                                       unsetItem(index);
+                               } else {
+                                       if (multiselect !== true && currentItems.length >= multiselect) {
+                                               unsetItem(0);
+                                       }
+
+                                       setItem(item);
+                               }
+
+                               fillInput();
+                       }
+
+                       function chooseItem(item) {
+                               hideList();
+
+                               if (!item) {
+                                       item = currentItem;
+                               }
+
+                               if (item) {
+                                       success(item.value);
+                               }
+                       }
+
+                       function chooseItems() {
+                               hideList();
+
+                               var output = [];
+
+                               currentItems.forEach(function (item) {
+                                       output.push(item.value);
+                               });
+
+                               success(output);
+                       }
+
+                       function fillInput() {
+                               var output = [];
+
+                               currentItems.forEach(function (item) {
+                                       output.push(item.label);
+                               });
+
+                               input.value = output.join(", ");
+                       }
+
+                       function cancelItem() {
+                               hideList();
+                               cancel();
+                       }
+
+                       function showList() {
+                               if (!listEl.parentNode) {
+
+                                       if (editorParams.values === true) {
+                                               parseItems(getUniqueColumnValues(), initialDisplayValue);
+                                       } else if (typeof editorParams.values === "string") {
+                                               parseItems(getUniqueColumnValues(editorParams.values), initialDisplayValue);
+                                       } else {
+                                               parseItems(editorParams.values || [], initialDisplayValue);
+                                       }
+
+                                       var offset = Tabulator.prototype.helpers.elOffset(cellEl);
+
+                                       listEl.style.minWidth = cellEl.offsetWidth + "px";
+
+                                       listEl.style.top = offset.top + cellEl.offsetHeight + "px";
+                                       listEl.style.left = offset.left + "px";
+
+                                       listEl.addEventListener("mousedown", function (e) {
+                                               blurable = false;
+
+                                               setTimeout(function () {
+                                                       blurable = true;
+                                               }, 10);
+                                       });
+
+                                       document.body.appendChild(listEl);
+                               }
+                       }
+
+                       function hideList() {
+                               if (listEl.parentNode) {
+                                       listEl.parentNode.removeChild(listEl);
+                               }
+
+                               removeScrollListener();
+                       }
+
+                       function removeScrollListener() {
+                               self.table.rowManager.element.removeEventListener("scroll", cancelItem);
+                       }
+
+                       //style input
+                       input.setAttribute("type", "text");
+
+                       input.style.padding = "4px";
+                       input.style.width = "100%";
+                       input.style.boxSizing = "border-box";
+                       input.style.cursor = "default";
+                       input.readOnly = this.currentCell != false;
+
+                       if (editorParams.elementAttributes && _typeof(editorParams.elementAttributes) == "object") {
+                               for (var key in editorParams.elementAttributes) {
+                                       if (key.charAt(0) == "+") {
+                                               key = key.slice(1);
+                                               input.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes["+" + key]);
+                                       } else {
+                                               input.setAttribute(key, editorParams.elementAttributes[key]);
+                                       }
+                               }
+                       }
+
+                       input.value = typeof initialValue !== "undefined" || initialValue === null ? initialValue : "";
+
+                       // if(editorParams.values === true){
+                       //      parseItems(getUniqueColumnValues(), initialValue);
+                       // }else if(typeof editorParams.values === "string"){
+                       //      parseItems(getUniqueColumnValues(editorParams.values), initialValue);
+                       // }else{
+                       //      parseItems(editorParams.values || [], initialValue);
+                       // }
+
+                       //allow key based navigation
+                       input.addEventListener("keydown", function (e) {
+                               var index;
+
+                               switch (e.keyCode) {
+                                       case 38:
+                                               //up arrow
+                                               index = dataItems.indexOf(currentItem);
+
+                                               if (vertNav == "editor" || vertNav == "hybrid" && index) {
+                                                       e.stopImmediatePropagation();
+                                                       e.stopPropagation();
+                                                       e.preventDefault();
+
+                                                       if (index > 0) {
+                                                               setCurrentItem(dataItems[index - 1], !multiselect);
+                                                       }
+                                               }
+                                               break;
+
+                                       case 40:
+                                               //down arrow
+                                               index = dataItems.indexOf(currentItem);
+
+                                               if (vertNav == "editor" || vertNav == "hybrid" && index < dataItems.length - 1) {
+                                                       e.stopImmediatePropagation();
+                                                       e.stopPropagation();
+                                                       e.preventDefault();
+
+                                                       if (index < dataItems.length - 1) {
+                                                               if (index == -1) {
+                                                                       setCurrentItem(dataItems[0], !multiselect);
+                                                               } else {
+                                                                       setCurrentItem(dataItems[index + 1], !multiselect);
+                                                               }
+                                                       }
+                                               }
+                                               break;
+
+                                       case 37: //left arrow
+                                       case 39:
+                                               //right arrow
+                                               e.stopImmediatePropagation();
+                                               e.stopPropagation();
+                                               e.preventDefault();
+                                               break;
+
+                                       case 13:
+                                               //enter
+                                               // chooseItem();
+
+                                               if (multiselect) {
+                                                       toggleItem();
+                                               } else {
+                                                       chooseItem();
+                                               }
+
+                                               break;
+
+                                       case 27:
+                                               //escape
+                                               cancelItem();
+                                               break;
+                               }
+                       });
+
+                       input.addEventListener("blur", function (e) {
+                               if (blurable) {
+                                       if (multiselect) {
+                                               chooseItems();
+                                       } else {
+                                               cancelItem();
+                                       }
+                               }
+                       });
+
+                       input.addEventListener("focus", function (e) {
+                               showList();
+                       });
+
+                       //style list element
+                       listEl = document.createElement("div");
+                       listEl.classList.add("tabulator-edit-select-list");
+
+                       onRendered(function () {
+                               input.style.height = "100%";
+                               input.focus({ preventScroll: true });
+                       });
+
+                       return input;
+               },
+
+               //autocomplete
+               autocomplete: function autocomplete(cell, onRendered, success, cancel, editorParams) {
+                       var self = this,
+                           cellEl = cell.getElement(),
+                           initialValue = cell.getValue(),
+                           vertNav = editorParams.verticalNavigation || "editor",
+                           initialDisplayValue = typeof initialValue !== "undefined" || initialValue === null ? initialValue : typeof editorParams.defaultValue !== "undefined" ? editorParams.defaultValue : "",
+                           input = document.createElement("input"),
+                           listEl = document.createElement("div"),
+                           allItems = [],
+                           displayItems = [],
+                           values = [],
+                           currentItem = false,
+                           blurable = true,
+                           uniqueColumnValues = false;
+
+                       this.table.rowManager.element.addEventListener("scroll", cancelItem);
+
+                       //style input
+                       input.setAttribute("type", "search");
+
+                       input.style.padding = "4px";
+                       input.style.width = "100%";
+                       input.style.boxSizing = "border-box";
+
+                       if (editorParams.elementAttributes && _typeof(editorParams.elementAttributes) == "object") {
+                               for (var key in editorParams.elementAttributes) {
+                                       if (key.charAt(0) == "+") {
+                                               key = key.slice(1);
+                                               input.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes["+" + key]);
+                                       } else {
+                                               input.setAttribute(key, editorParams.elementAttributes[key]);
+                                       }
+                               }
+                       }
+
+                       //style list element
+                       listEl.classList.add("tabulator-edit-select-list");
+
+                       listEl.addEventListener("mousedown", function (e) {
+                               blurable = false;
+
+                               setTimeout(function () {
+                                       blurable = true;
+                               }, 10);
+                       });
+
+                       function genUniqueColumnValues() {
+                               if (editorParams.values === true) {
+                                       uniqueColumnValues = getUniqueColumnValues();
+                               } else if (typeof editorParams.values === "string") {
+                                       uniqueColumnValues = getUniqueColumnValues(editorParams.values);
+                               }
+                       }
+
+                       function getUniqueColumnValues(field) {
+                               var output = {},
+                                   data = self.table.getData(),
+                                   column;
+
+                               if (field) {
+                                       column = self.table.columnManager.getColumnByField(field);
+                               } else {
+                                       column = cell.getColumn()._getSelf();
+                               }
+
+                               if (column) {
+                                       data.forEach(function (row) {
+                                               var val = column.getFieldValue(row);
+
+                                               if (val !== null && typeof val !== "undefined" && val !== "") {
+                                                       output[val] = true;
+                                               }
+                                       });
+
+                                       if (editorParams.sortValuesList) {
+                                               if (editorParams.sortValuesList == "asc") {
+                                                       output = Object.keys(output).sort();
+                                               } else {
+                                                       output = Object.keys(output).sort().reverse();
+                                               }
+                                       } else {
+                                               output = Object.keys(output);
+                                       }
+                               } else {
+                                       console.warn("unable to find matching column to create autocomplete lookup list:", field);
+                               }
+
+                               return output;
+                       }
+
+                       function filterList(term, intialLoad) {
+                               var matches = [],
+                                   values,
+                                   items,
+                                   searchEl;
+
+                               //lookup base values list
+                               if (uniqueColumnValues) {
+                                       values = uniqueColumnValues;
+                               } else {
+                                       values = editorParams.values || [];
+                               }
+
+                               if (editorParams.searchFunc) {
+                                       matches = editorParams.searchFunc(term, values);
+
+                                       if (matches instanceof Promise) {
+
+                                               addNotice(typeof editorParams.searchingPlaceholder !== "undefined" ? editorParams.searchingPlaceholder : "Searching...");
+
+                                               matches.then(function (result) {
+                                                       fillListIfNotEmpty(parseItems(result), intialLoad);
+                                               }).catch(function (err) {
+                                                       console.err("error in autocomplete search promise:", err);
+                                               });
+                                       } else {
+                                               fillListIfNotEmpty(parseItems(matches), intialLoad);
+                                       }
+                               } else {
+                                       items = parseItems(values);
+
+                                       if (term === "") {
+                                               if (editorParams.showListOnEmpty) {
+                                                       matches = items;
+                                               }
+                                       } else {
+                                               items.forEach(function (item) {
+                                                       if (item.value !== null || typeof item.value !== "undefined") {
+                                                               if (String(item.value).toLowerCase().indexOf(String(term).toLowerCase()) > -1 || String(item.title).toLowerCase().indexOf(String(term).toLowerCase()) > -1) {
+                                                                       matches.push(item);
+                                                               }
+                                                       }
+                                               });
+                                       }
+
+                                       fillListIfNotEmpty(matches, intialLoad);
+                               }
+                       }
+
+                       function addNotice(notice) {
+                               var searchEl = document.createElement("div");
+
+                               clearList();
+
+                               if (notice !== false) {
+                                       searchEl.classList.add("tabulator-edit-select-list-notice");
+                                       searchEl.tabIndex = 0;
+
+                                       if (notice instanceof Node) {
+                                               searchEl.appendChild(notice);
+                                       } else {
+                                               searchEl.innerHTML = notice;
+                                       }
+
+                                       listEl.appendChild(searchEl);
+                               }
+                       }
+
+                       function parseItems(inputValues) {
+                               var itemList = [];
+
+                               if (Array.isArray(inputValues)) {
+                                       inputValues.forEach(function (value) {
+
+                                               var item = {};
+
+                                               if ((typeof value === 'undefined' ? 'undefined' : _typeof(value)) === "object") {
+                                                       item.title = editorParams.listItemFormatter ? editorParams.listItemFormatter(value.value, value.label) : value.label;
+                                                       item.value = value.value;
+                                               } else {
+                                                       item.title = editorParams.listItemFormatter ? editorParams.listItemFormatter(value, value) : value;
+                                                       item.value = value;
+                                               }
+
+                                               itemList.push(item);
+                                       });
+                               } else {
+                                       for (var key in inputValues) {
+                                               var item = {
+                                                       title: editorParams.listItemFormatter ? editorParams.listItemFormatter(key, inputValues[key]) : inputValues[key],
+                                                       value: key
+                                               };
+
+                                               itemList.push(item);
+                                       }
+                               }
+
+                               return itemList;
+                       }
+
+                       function clearList() {
+                               while (listEl.firstChild) {
+                                       listEl.removeChild(listEl.firstChild);
+                               }
+                       }
+
+                       function fillListIfNotEmpty(items, intialLoad) {
+                               if (items.length) {
+                                       fillList(items, intialLoad);
+                               } else {
+                                       if (editorParams.emptyPlaceholder) {
+                                               addNotice(editorParams.emptyPlaceholder);
+                                       }
+                               }
+                       }
+
+                       function fillList(items, intialLoad) {
+                               var current = false;
+
+                               clearList();
+
+                               displayItems = items;
+
+                               displayItems.forEach(function (item) {
+                                       var el = item.element;
+
+                                       if (!el) {
+                                               el = document.createElement("div");
+                                               el.classList.add("tabulator-edit-select-list-item");
+                                               el.tabIndex = 0;
+                                               el.innerHTML = item.title;
+
+                                               el.addEventListener("click", function (e) {
+                                                       setCurrentItem(item);
+                                                       chooseItem();
+                                               });
+
+                                               el.addEventListener("mousedown", function (e) {
+                                                       blurable = false;
+
+                                                       setTimeout(function () {
+                                                               blurable = true;
+                                                       }, 10);
+                                               });
+
+                                               item.element = el;
+
+                                               if (intialLoad && item.value == initialValue) {
+                                                       input.value = item.title;
+                                                       item.element.classList.add("active");
+                                                       current = true;
+                                               }
+
+                                               if (item === currentItem) {
+                                                       item.element.classList.add("active");
+                                                       current = true;
+                                               }
+                                       }
+
+                                       listEl.appendChild(el);
+                               });
+
+                               if (!current) {
+                                       setCurrentItem(false);
+                               }
+                       }
+
+                       function chooseItem() {
+                               hideList();
+
+                               if (currentItem) {
+                                       if (initialValue !== currentItem.value) {
+                                               initialValue = currentItem.value;
+                                               input.value = currentItem.title;
+                                               success(currentItem.value);
+                                       } else {
+                                               cancel();
+                                       }
+                               } else {
+                                       if (editorParams.freetext) {
+                                               initialValue = input.value;
+                                               success(input.value);
+                                       } else {
+                                               if (editorParams.allowEmpty && input.value === "") {
+                                                       initialValue = input.value;
+                                                       success(input.value);
+                                               } else {
+                                                       cancel();
+                                               }
+                                       }
+                               }
+                       }
+
+                       function showList() {
+                               if (!listEl.parentNode) {
+                                       while (listEl.firstChild) {
+                                               listEl.removeChild(listEl.firstChild);
+                                       }var offset = Tabulator.prototype.helpers.elOffset(cellEl);
+
+                                       listEl.style.minWidth = cellEl.offsetWidth + "px";
+
+                                       listEl.style.top = offset.top + cellEl.offsetHeight + "px";
+                                       listEl.style.left = offset.left + "px";
+                                       document.body.appendChild(listEl);
+                               }
+                       }
+
+                       function setCurrentItem(item, showInputValue) {
+                               if (currentItem && currentItem.element) {
+                                       currentItem.element.classList.remove("active");
+                               }
+
+                               currentItem = item;
+
+                               if (item && item.element) {
+                                       item.element.classList.add("active");
+                               }
+                       }
+
+                       function hideList() {
+                               if (listEl.parentNode) {
+                                       listEl.parentNode.removeChild(listEl);
+                               }
+
+                               removeScrollListener();
+                       }
+
+                       function cancelItem() {
+                               hideList();
+                               cancel();
+                       }
+
+                       function removeScrollListener() {
+                               self.table.rowManager.element.removeEventListener("scroll", cancelItem);
+                       }
+
+                       //allow key based navigation
+                       input.addEventListener("keydown", function (e) {
+                               var index;
+
+                               switch (e.keyCode) {
+                                       case 38:
+                                               //up arrow
+                                               index = displayItems.indexOf(currentItem);
+
+                                               if (vertNav == "editor" || vertNav == "hybrid" && index) {
+                                                       e.stopImmediatePropagation();
+                                                       e.stopPropagation();
+                                                       e.preventDefault();
+
+                                                       if (index > 0) {
+                                                               setCurrentItem(displayItems[index - 1]);
+                                                       } else {
+                                                               setCurrentItem(false);
+                                                       }
+                                               }
+                                               break;
+
+                                       case 40:
+                                               //down arrow
+
+                                               index = displayItems.indexOf(currentItem);
+
+                                               if (vertNav == "editor" || vertNav == "hybrid" && index < displayItems.length - 1) {
+
+                                                       e.stopImmediatePropagation();
+                                                       e.stopPropagation();
+                                                       e.preventDefault();
+
+                                                       if (index < displayItems.length - 1) {
+                                                               if (index == -1) {
+                                                                       setCurrentItem(displayItems[0]);
+                                                               } else {
+                                                                       setCurrentItem(displayItems[index + 1]);
+                                                               }
+                                                       }
+                                               }
+                                               break;
+
+                                       case 37: //left arrow
+                                       case 39:
+                                               //right arrow
+                                               e.stopImmediatePropagation();
+                                               e.stopPropagation();
+                                               // e.preventDefault();
+                                               break;
+
+                                       case 13:
+                                               //enter
+                                               chooseItem();
+                                               break;
+
+                                       case 27:
+                                               //escape
+                                               cancelItem();
+                                               break;
+
+                                       case 36: //home
+                                       case 35:
+                                               //end
+                                               //prevent table navigation while using input element
+                                               e.stopImmediatePropagation();
+                                               break;
+                               }
+                       });
+
+                       input.addEventListener("keyup", function (e) {
+
+                               switch (e.keyCode) {
+                                       case 38: //up arrow
+                                       case 37: //left arrow
+                                       case 39: //up arrow
+                                       case 40: //right arrow
+                                       case 13: //enter
+                                       case 27:
+                                               //escape
+                                               break;
+
+                                       default:
+                                               filterList(input.value);
+                               }
+                       });
+
+                       input.addEventListener("search", function (e) {
+                               filterList(input.value);
+                       });
+
+                       input.addEventListener("blur", function (e) {
+                               if (blurable) {
+                                       chooseItem();
+                               }
+                       });
+
+                       input.addEventListener("focus", function (e) {
+                               var value = initialDisplayValue;
+                               genUniqueColumnValues();
+                               showList();
+                               input.value = value;
+                               filterList(value, true);
+                       });
+
+                       onRendered(function () {
+                               input.style.height = "100%";
+                               input.focus({ preventScroll: true });
+                       });
+
+                       if (editorParams.mask) {
+                               this.table.modules.edit.maskInput(input, editorParams);
+                       }
+
+                       return input;
+               },
+
+               //star rating
+               star: function star(cell, onRendered, success, cancel, editorParams) {
+                       var self = this,
+                           element = cell.getElement(),
+                           value = cell.getValue(),
+                           maxStars = element.getElementsByTagName("svg").length || 5,
+                           size = element.getElementsByTagName("svg")[0] ? element.getElementsByTagName("svg")[0].getAttribute("width") : 14,
+                           stars = [],
+                           starsHolder = document.createElement("div"),
+                           star = document.createElementNS('http://www.w3.org/2000/svg', "svg");
+
+                       //change star type
+                       function starChange(val) {
+                               stars.forEach(function (star, i) {
+                                       if (i < val) {
+                                               if (self.table.browser == "ie") {
+                                                       star.setAttribute("class", "tabulator-star-active");
+                                               } else {
+                                                       star.classList.replace("tabulator-star-inactive", "tabulator-star-active");
+                                               }
+
+                                               star.innerHTML = '<polygon fill="#488CE9" stroke="#014AAE" stroke-width="37.6152" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" points="259.216,29.942 330.27,173.919 489.16,197.007 374.185,309.08 401.33,467.31 259.216,392.612 117.104,467.31 144.25,309.08 29.274,197.007 188.165,173.919 "/>';
+                                       } else {
+                                               if (self.table.browser == "ie") {
+                                                       star.setAttribute("class", "tabulator-star-inactive");
+                                               } else {
+                                                       star.classList.replace("tabulator-star-active", "tabulator-star-inactive");
+                                               }
+
+                                               star.innerHTML = '<polygon fill="#010155" stroke="#686868" stroke-width="37.6152" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" points="259.216,29.942 330.27,173.919 489.16,197.007 374.185,309.08 401.33,467.31 259.216,392.612 117.104,467.31 144.25,309.08 29.274,197.007 188.165,173.919 "/>';
+                                       }
+                               });
+                       }
+
+                       //build stars
+                       function buildStar(i) {
+
+                               var starHolder = document.createElement("span");
+                               var nextStar = star.cloneNode(true);
+
+                               stars.push(nextStar);
+
+                               starHolder.addEventListener("mouseenter", function (e) {
+                                       e.stopPropagation();
+                                       e.stopImmediatePropagation();
+                                       starChange(i);
+                               });
+
+                               starHolder.addEventListener("mousemove", function (e) {
+                                       e.stopPropagation();
+                                       e.stopImmediatePropagation();
+                               });
+
+                               starHolder.addEventListener("click", function (e) {
+                                       e.stopPropagation();
+                                       e.stopImmediatePropagation();
+                                       success(i);
+                                       element.blur();
+                               });
+
+                               starHolder.appendChild(nextStar);
+                               starsHolder.appendChild(starHolder);
+                       }
+
+                       //handle keyboard navigation value change
+                       function changeValue(val) {
+                               value = val;
+                               starChange(val);
+                       }
+
+                       //style cell
+                       element.style.whiteSpace = "nowrap";
+                       element.style.overflow = "hidden";
+                       element.style.textOverflow = "ellipsis";
+
+                       //style holding element
+                       starsHolder.style.verticalAlign = "middle";
+                       starsHolder.style.display = "inline-block";
+                       starsHolder.style.padding = "4px";
+
+                       //style star
+                       star.setAttribute("width", size);
+                       star.setAttribute("height", size);
+                       star.setAttribute("viewBox", "0 0 512 512");
+                       star.setAttribute("xml:space", "preserve");
+                       star.style.padding = "0 1px";
+
+                       if (editorParams.elementAttributes && _typeof(editorParams.elementAttributes) == "object") {
+                               for (var key in editorParams.elementAttributes) {
+                                       if (key.charAt(0) == "+") {
+                                               key = key.slice(1);
+                                               starsHolder.setAttribute(key, starsHolder.getAttribute(key) + editorParams.elementAttributes["+" + key]);
+                                       } else {
+                                               starsHolder.setAttribute(key, editorParams.elementAttributes[key]);
+                                       }
+                               }
+                       }
+
+                       //create correct number of stars
+                       for (var i = 1; i <= maxStars; i++) {
+                               buildStar(i);
+                       }
+
+                       //ensure value does not exceed number of stars
+                       value = Math.min(parseInt(value), maxStars);
+
+                       // set initial styling of stars
+                       starChange(value);
+
+                       starsHolder.addEventListener("mousemove", function (e) {
+                               starChange(0);
+                       });
+
+                       starsHolder.addEventListener("click", function (e) {
+                               success(0);
+                       });
+
+                       element.addEventListener("blur", function (e) {
+                               cancel();
+                       });
+
+                       //allow key based navigation
+                       element.addEventListener("keydown", function (e) {
+                               switch (e.keyCode) {
+                                       case 39:
+                                               //right arrow
+                                               changeValue(value + 1);
+                                               break;
+
+                                       case 37:
+                                               //left arrow
+                                               changeValue(value - 1);
+                                               break;
+
+                                       case 13:
+                                               //enter
+                                               success(value);
+                                               break;
+
+                                       case 27:
+                                               //escape
+                                               cancel();
+                                               break;
+                               }
+                       });
+
+                       return starsHolder;
+               },
+
+               //draggable progress bar
+               progress: function progress(cell, onRendered, success, cancel, editorParams) {
+                       var element = cell.getElement(),
+                           max = typeof editorParams.max === "undefined" ? element.getElementsByTagName("div")[0].getAttribute("max") || 100 : editorParams.max,
+                           min = typeof editorParams.min === "undefined" ? element.getElementsByTagName("div")[0].getAttribute("min") || 0 : editorParams.min,
+                           percent = (max - min) / 100,
+                           value = cell.getValue() || 0,
+                           handle = document.createElement("div"),
+                           bar = document.createElement("div"),
+                           mouseDrag,
+                           mouseDragWidth;
+
+                       //set new value
+                       function updateValue() {
+                               var calcVal = percent * Math.round(bar.offsetWidth / (element.clientWidth / 100)) + min;
+                               success(calcVal);
+                               element.setAttribute("aria-valuenow", calcVal);
+                               element.setAttribute("aria-label", value);
+                       }
+
+                       //style handle
+                       handle.style.position = "absolute";
+                       handle.style.right = "0";
+                       handle.style.top = "0";
+                       handle.style.bottom = "0";
+                       handle.style.width = "5px";
+                       handle.classList.add("tabulator-progress-handle");
+
+                       //style bar
+                       bar.style.display = "inline-block";
+                       bar.style.position = "relative";
+                       // bar.style.top = "8px";
+                       // bar.style.bottom = "8px";
+                       // bar.style.left = "4px";
+                       // bar.style.marginRight = "4px";
+                       bar.style.height = "100%";
+                       bar.style.backgroundColor = "#488CE9";
+                       bar.style.maxWidth = "100%";
+                       bar.style.minWidth = "0%";
+
+                       if (editorParams.elementAttributes && _typeof(editorParams.elementAttributes) == "object") {
+                               for (var key in editorParams.elementAttributes) {
+                                       if (key.charAt(0) == "+") {
+                                               key = key.slice(1);
+                                               bar.setAttribute(key, bar.getAttribute(key) + editorParams.elementAttributes["+" + key]);
+                                       } else {
+                                               bar.setAttribute(key, editorParams.elementAttributes[key]);
+                                       }
+                               }
+                       }
+
+                       //style cell
+                       element.style.padding = "4px 4px";
+
+                       //make sure value is in range
+                       value = Math.min(parseFloat(value), max);
+                       value = Math.max(parseFloat(value), min);
+
+                       //workout percentage
+                       value = Math.round((value - min) / percent);
+                       // bar.style.right = value + "%";
+                       bar.style.width = value + "%";
+
+                       element.setAttribute("aria-valuemin", min);
+                       element.setAttribute("aria-valuemax", max);
+
+                       bar.appendChild(handle);
+
+                       handle.addEventListener("mousedown", function (e) {
+                               mouseDrag = e.screenX;
+                               mouseDragWidth = bar.offsetWidth;
+                       });
+
+                       handle.addEventListener("mouseover", function () {
+                               handle.style.cursor = "ew-resize";
+                       });
+
+                       element.addEventListener("mousemove", function (e) {
+                               if (mouseDrag) {
+                                       bar.style.width = mouseDragWidth + e.screenX - mouseDrag + "px";
+                               }
+                       });
+
+                       element.addEventListener("mouseup", function (e) {
+                               if (mouseDrag) {
+                                       e.stopPropagation();
+                                       e.stopImmediatePropagation();
+
+                                       mouseDrag = false;
+                                       mouseDragWidth = false;
+
+                                       updateValue();
+                               }
+                       });
+
+                       //allow key based navigation
+                       element.addEventListener("keydown", function (e) {
+                               switch (e.keyCode) {
+                                       case 39:
+                                               //right arrow
+                                               e.preventDefault();
+                                               bar.style.width = bar.clientWidth + element.clientWidth / 100 + "px";
+                                               break;
+
+                                       case 37:
+                                               //left arrow
+                                               e.preventDefault();
+                                               bar.style.width = bar.clientWidth - element.clientWidth / 100 + "px";
+                                               break;
+
+                                       case 9: //tab
+                                       case 13:
+                                               //enter
+                                               updateValue();
+                                               break;
+
+                                       case 27:
+                                               //escape
+                                               cancel();
+                                               break;
+
+                               }
+                       });
+
+                       element.addEventListener("blur", function () {
+                               cancel();
+                       });
+
+                       return bar;
+               },
+
+               //checkbox
+               tickCross: function tickCross(cell, onRendered, success, cancel, editorParams) {
+                       var value = cell.getValue(),
+                           input = document.createElement("input"),
+                           tristate = editorParams.tristate,
+                           indetermValue = typeof editorParams.indeterminateValue === "undefined" ? null : editorParams.indeterminateValue,
+                           indetermState = false;
+
+                       input.setAttribute("type", "checkbox");
+                       input.style.marginTop = "5px";
+                       input.style.boxSizing = "border-box";
+
+                       if (editorParams.elementAttributes && _typeof(editorParams.elementAttributes) == "object") {
+                               for (var key in editorParams.elementAttributes) {
+                                       if (key.charAt(0) == "+") {
+                                               key = key.slice(1);
+                                               input.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes["+" + key]);
+                                       } else {
+                                               input.setAttribute(key, editorParams.elementAttributes[key]);
+                                       }
+                               }
+                       }
+
+                       input.value = value;
+
+                       if (tristate && (typeof value === "undefined" || value === indetermValue || value === "")) {
+                               indetermState = true;
+                               input.indeterminate = true;
+                       }
+
+                       if (this.table.browser != "firefox") {
+                               //prevent blur issue on mac firefox
+                               onRendered(function () {
+                                       input.focus({ preventScroll: true });
+                               });
+                       }
+
+                       input.checked = value === true || value === "true" || value === "True" || value === 1;
+
+                       function setValue(blur) {
+                               if (tristate) {
+                                       if (!blur) {
+                                               if (input.checked && !indetermState) {
+                                                       input.checked = false;
+                                                       input.indeterminate = true;
+                                                       indetermState = true;
+                                                       return indetermValue;
+                                               } else {
+                                                       indetermState = false;
+                                                       return input.checked;
+                                               }
+                                       } else {
+                                               if (indetermState) {
+                                                       return indetermValue;
+                                               } else {
+                                                       return input.checked;
+                                               }
+                                       }
+                               } else {
+                                       return input.checked;
+                               }
+                       }
+
+                       //submit new value on blur
+                       input.addEventListener("change", function (e) {
+                               success(setValue());
+                       });
+
+                       input.addEventListener("blur", function (e) {
+                               success(setValue(true));
+                       });
+
+                       //submit new value on enter
+                       input.addEventListener("keydown", function (e) {
+                               if (e.keyCode == 13) {
+                                       success(setValue());
+                               }
+                               if (e.keyCode == 27) {
+                                       cancel();
+                               }
+                       });
+
+                       return input;
+               }
+       };
+
+       Tabulator.prototype.registerModule("edit", Edit);
+
+       var ExportRow = function ExportRow(type, columns, component, indent) {
+               this.type = type;
+               this.columns = columns;
+               this.component = component || false;
+               this.indent = indent || 0;
+       };
+
+       var ExportColumn = function ExportColumn(value, component, width, height, depth) {
+               this.value = value;
+               this.component = component || false;
+               this.width = width;
+               this.height = height;
+               this.depth = depth;
+       };
+
+       var Export = function Export(table) {
+               this.table = table; //hold Tabulator object
+               this.config = {};
+               this.cloneTableStyle = true;
+               this.colVisProp = "";
+       };
+
+       Export.prototype.generateExportList = function (config, style, range, colVisProp) {
+               this.cloneTableStyle = style;
+               this.config = config || {};
+               this.colVisProp = colVisProp;
+
+               var headers = this.config.columnHeaders !== false ? this.headersToExportRows(this.generateColumnGroupHeaders()) : [];
+               var body = this.bodyToExportRows(this.rowLookup(range));
+
+               return headers.concat(body);
+       };
+
+       Export.prototype.genereateTable = function (config, style, range, colVisProp) {
+               var list = this.generateExportList(config, style, range, colVisProp);
+
+               return this.genereateTableElement(list);
+       };
+
+       Export.prototype.rowLookup = function (range) {
+               var _this45 = this;
+
+               var rows = [];
+
+               if (typeof range == "function") {
+                       range.call(this.table).forEach(function (row) {
+                               row = _this45.table.rowManager.findRow(row);
+
+                               if (row) {
+                                       rows.push(row);
+                               }
+                       });
+               } else {
+                       switch (range) {
+                               case true:
+                               case "visible":
+                                       rows = this.table.rowManager.getVisibleRows(true);
+                                       break;
+
+                               case "all":
+                                       rows = this.table.rowManager.rows;
+                                       break;
+
+                               case "selected":
+                                       rows = this.table.modules.selectRow.selectedRows;
+                                       break;
+
+                               case "active":
+                               default:
+                                       rows = this.table.rowManager.getDisplayRows();
+                       }
+               }
+
+               return Object.assign([], rows);
+       };
+
+       Export.prototype.generateColumnGroupHeaders = function () {
+               var _this46 = this;
+
+               var output = [];
+
+               var columns = this.config.columnGroups !== false ? this.table.columnManager.columns : this.table.columnManager.columnsByIndex;
+
+               columns.forEach(function (column) {
+                       var colData = _this46.processColumnGroup(column);
+
+                       if (colData) {
+                               output.push(colData);
+                       }
+               });
+
+               return output;
+       };
+
+       Export.prototype.processColumnGroup = function (column) {
+               var _this47 = this;
+
+               var subGroups = column.columns,
+                   maxDepth = 0,
+                   title = column.definition["title" + (this.colVisProp.charAt(0).toUpperCase() + this.colVisProp.slice(1))] || column.definition.title;
+
+               var groupData = {
+                       title: title,
+                       column: column,
+                       depth: 1
+               };
+
+               if (subGroups.length) {
+                       groupData.subGroups = [];
+                       groupData.width = 0;
+
+                       subGroups.forEach(function (subGroup) {
+                               var subGroupData = _this47.processColumnGroup(subGroup);
+
+                               if (subGroupData) {
+                                       groupData.width += subGroupData.width;
+                                       groupData.subGroups.push(subGroupData);
+
+                                       if (subGroupData.depth > maxDepth) {
+                                               maxDepth = subGroupData.depth;
+                                       }
+                               }
+                       });
+
+                       groupData.depth += maxDepth;
+
+                       if (!groupData.width) {
+                               return false;
+                       }
+               } else {
+                       if (this.columnVisCheck(column)) {
+                               groupData.width = 1;
+                       } else {
+                               return false;
+                       }
+               }
+
+               return groupData;
+       };
+
+       Export.prototype.columnVisCheck = function (column) {
+               return column.definition[this.colVisProp] !== false && (column.visible || !column.visible && column.definition[this.colVisProp]);
+       };
+
+       Export.prototype.headersToExportRows = function (columns) {
+               var headers = [],
+                   headerDepth = 0,
+                   exportRows = [];
+
+               function parseColumnGroup(column, level) {
+
+                       var depth = headerDepth - level;
+
+                       if (typeof headers[level] === "undefined") {
+                               headers[level] = [];
+                       }
+
+                       column.height = column.subGroups ? 1 : depth - column.depth + 1;
+
+                       headers[level].push(column);
+
+                       if (column.height > 1) {
+                               for (var _i6 = 1; _i6 < column.height; _i6++) {
+
+                                       if (typeof headers[level + _i6] === "undefined") {
+                                               headers[level + _i6] = [];
+                                       }
+
+                                       headers[level + _i6].push(false);
+                               }
+                       }
+
+                       if (column.width > 1) {
+                               for (var _i7 = 1; _i7 < column.width; _i7++) {
+                                       headers[level].push(false);
+                               }
+                       }
+
+                       if (column.subGroups) {
+                               column.subGroups.forEach(function (subGroup) {
+                                       parseColumnGroup(subGroup, level + 1);
+                               });
+                       }
+               }
+
+               //calculate maximum header debth
+               columns.forEach(function (column) {
+                       if (column.depth > headerDepth) {
+                               headerDepth = column.depth;
+                       }
+               });
+
+               columns.forEach(function (column) {
+                       parseColumnGroup(column, 0);
+               });
+
+               headers.forEach(function (header) {
+                       var columns = [];
+
+                       header.forEach(function (col) {
+                               if (col) {
+                                       columns.push(new ExportColumn(col.title, col.column.getComponent(), col.width, col.height, col.depth));
+                               } else {
+                                       columns.push(null);
+                               }
+                       });
+
+                       exportRows.push(new ExportRow("header", columns));
+               });
+
+               return exportRows;
+       };
+
+       Export.prototype.bodyToExportRows = function (rows) {
+               var _this48 = this;
+
+               var columns = [];
+               var exportRows = [];
+
+               this.table.columnManager.columnsByIndex.forEach(function (column) {
+                       if (_this48.columnVisCheck(column)) {
+                               columns.push(column.getComponent());
+                       }
+               });
+
+               if (this.config.columnCalcs !== false && this.table.modExists("columnCalcs")) {
+                       if (this.table.modules.columnCalcs.topInitialized) {
+                               rows.unshift(this.table.modules.columnCalcs.topRow);
+                       }
+
+                       if (this.table.modules.columnCalcs.botInitialized) {
+                               rows.push(this.table.modules.columnCalcs.botRow);
+                       }
+               }
+
+               rows = rows.filter(function (row) {
+                       switch (row.type) {
+                               case "group":
+                                       return _this48.config.rowGroups !== false;
+                                       break;
+
+                               case "calc":
+                                       return _this48.config.columnCalcs !== false;
+                                       break;
+
+                               case "row":
+                                       return !(_this48.table.options.dataTree && _this48.config.dataTree === false && row.modules.dataTree.parent);
+                                       break;
+                       }
+
+                       return true;
+               });
+
+               rows.forEach(function (row, i) {
+                       var rowData = row.getData(_this48.colVisProp);
+                       var exportCols = [];
+                       var indent = 0;
+
+                       switch (row.type) {
+                               case "group":
+                                       indent = row.level;
+                                       exportCols.push(new ExportColumn(row.key, row.getComponent(), columns.length, 1));
+                                       break;
+
+                               case "calc":
+                               case "row":
+                                       columns.forEach(function (col) {
+                                               exportCols.push(new ExportColumn(col._column.getFieldValue(rowData), col, 1, 1));
+                                       });
+
+                                       if (_this48.table.options.dataTree && _this48.config.dataTree !== false) {
+                                               indent = row.modules.dataTree.index;
+                                       }
+                                       break;
+                       }
+
+                       exportRows.push(new ExportRow(row.type, exportCols, row.getComponent(), indent));
+               });
+
+               return exportRows;
+       };
+
+       Export.prototype.genereateTableElement = function (list) {
+               var _this49 = this;
+
+               var table = document.createElement("table"),
+                   headerEl = document.createElement("thead"),
+                   bodyEl = document.createElement("tbody"),
+                   styles = this.lookupTableStyles(),
+                   rowFormatter = this.table.options["rowFormatter" + (this.colVisProp.charAt(0).toUpperCase() + this.colVisProp.slice(1))],
+                   setup = {};
+
+               setup.rowFormatter = rowFormatter !== null ? rowFormatter : this.table.options.rowFormatter;
+
+               if (this.table.options.dataTree && this.config.dataTree !== false && this.table.modExists("columnCalcs")) {
+                       setup.treeElementField = this.table.modules.dataTree.elementField;
+               }
+
+               //assign group header formatter
+               setup.groupHeader = this.table.options["groupHeader" + (this.colVisProp.charAt(0).toUpperCase() + this.colVisProp.slice(1))];
+
+               if (setup.groupHeader && !Array.isArray(setup.groupHeader)) {
+                       setup.groupHeader = [setup.groupHeader];
+               }
+
+               table.classList.add("tabulator-print-table");
+
+               this.mapElementStyles(this.table.columnManager.getHeadersElement(), headerEl, ["border-top", "border-left", "border-right", "border-bottom", "background-color", "color", "font-weight", "font-family", "font-size"]);
+
+               if (list.length > 1000) {
+                       console.warn("It may take a long time to render an HTML table with more than 1000 rows");
+               }
+
+               list.forEach(function (row, i) {
+                       switch (row.type) {
+                               case "header":
+                                       headerEl.appendChild(_this49.genereateHeaderElement(row, setup, styles));
+                                       break;
+
+                               case "group":
+                                       bodyEl.appendChild(_this49.genereateGroupElement(row, setup, styles));
+                                       break;
+
+                               case "calc":
+                                       bodyEl.appendChild(_this49.genereateCalcElement(row, setup, styles));
+                                       break;
+
+                               case "row":
+                                       var rowEl = _this49.genereateRowElement(row, setup, styles);
+                                       _this49.mapElementStyles(i % 2 && styles.evenRow ? styles.evenRow : styles.oddRow, rowEl, ["border-top", "border-left", "border-right", "border-bottom", "color", "font-weight", "font-family", "font-size", "background-color"]);
+                                       bodyEl.appendChild(rowEl);
+                                       break;
+                       }
+               });
+
+               if (headerEl.innerHTML) {
+                       table.appendChild(headerEl);
+               }
+
+               table.appendChild(bodyEl);
+
+               this.mapElementStyles(this.table.element, table, ["border-top", "border-left", "border-right", "border-bottom"]);
+               return table;
+       };
+
+       Export.prototype.lookupTableStyles = function () {
+               var styles = {};
+
+               //lookup row styles
+               if (this.cloneTableStyle && window.getComputedStyle) {
+                       styles.oddRow = this.table.element.querySelector(".tabulator-row-odd:not(.tabulator-group):not(.tabulator-calcs)");
+                       styles.evenRow = this.table.element.querySelector(".tabulator-row-even:not(.tabulator-group):not(.tabulator-calcs)");
+                       styles.calcRow = this.table.element.querySelector(".tabulator-row.tabulator-calcs");
+                       styles.firstRow = this.table.element.querySelector(".tabulator-row:not(.tabulator-group):not(.tabulator-calcs)");
+                       styles.firstGroup = this.table.element.getElementsByClassName("tabulator-group")[0];
+
+                       if (styles.firstRow) {
+                               styles.styleCells = styles.firstRow.getElementsByClassName("tabulator-cell");
+                               styles.firstCell = styles.styleCells[0];
+                               styles.lastCell = styles.styleCells[styles.styleCells.length - 1];
+                       }
+               }
+
+               return styles;
+       };
+
+       Export.prototype.genereateHeaderElement = function (row, setup, styles) {
+               var _this50 = this;
+
+               var rowEl = document.createElement("tr");
+
+               row.columns.forEach(function (column) {
+                       if (column) {
+                               var cellEl = document.createElement("th");
+                               var classNames = column.component._column.definition.cssClass ? column.component._column.definition.cssClass.split(" ") : [];
+
+                               cellEl.colSpan = column.width;
+                               cellEl.rowSpan = column.height;
+
+                               cellEl.innerHTML = column.value;
+
+                               if (_this50.cloneTableStyle) {
+                                       cellEl.style.boxSizing = "border-box";
+                               }
+
+                               classNames.forEach(function (className) {
+                                       cellEl.classList.add(className);
+                               });
+
+                               _this50.mapElementStyles(column.component.getElement(), cellEl, ["text-align", "border-top", "border-left", "border-right", "border-bottom", "background-color", "color", "font-weight", "font-family", "font-size"]);
+                               _this50.mapElementStyles(column.component._column.contentElement, cellEl, ["padding-top", "padding-left", "padding-right", "padding-bottom"]);
+
+                               if (column.component._column.visible) {
+                                       _this50.mapElementStyles(column.component.getElement(), cellEl, ["width"]);
+                               } else {
+                                       if (column.component._column.definition.width) {
+                                               cellEl.style.width = column.component._column.definition.width + "px";
+                                       }
+                               }
+
+                               if (column.component._column.parent) {
+                                       _this50.mapElementStyles(column.component._column.parent.groupElement, cellEl, ["border-top"]);
+                               }
+
+                               rowEl.appendChild(cellEl);
+                       }
+               });
+
+               return rowEl;
+       };
+
+       Export.prototype.genereateGroupElement = function (row, setup, styles) {
+
+               var rowEl = document.createElement("tr"),
+                   cellEl = document.createElement("td"),
+                   group = row.columns[0];
+
+               rowEl.classList.add("tabulator-print-table-row");
+
+               if (setup.groupHeader && setup.groupHeader[row.indent]) {
+                       group.value = setup.groupHeader[row.indent](group.value, row.component._group.getRowCount(), row.component._group.getData(), row.component);
+               } else {
+                       if (setup.groupHeader === false) {
+                               group.value = group.value;
+                       } else {
+                               group.value = row.component._group.generator(group.value, row.component._group.getRowCount(), row.component._group.getData(), row.component);
+                       }
+               }
+
+               cellEl.colSpan = group.width;
+               cellEl.innerHTML = group.value;
+
+               rowEl.classList.add("tabulator-print-table-group");
+               rowEl.classList.add("tabulator-group-level-" + row.indent);
+
+               if (group.component.getVisibility()) {
+                       rowEl.classList.add("tabulator-group-visible");
+               }
+
+               this.mapElementStyles(styles.firstGroup, rowEl, ["border-top", "border-left", "border-right", "border-bottom", "color", "font-weight", "font-family", "font-size", "background-color"]);
+               this.mapElementStyles(styles.firstGroup, cellEl, ["padding-top", "padding-left", "padding-right", "padding-bottom"]);
+
+               rowEl.appendChild(cellEl);
+
+               return rowEl;
+       };
+
+       Export.prototype.genereateCalcElement = function (row, setup, styles) {
+               var rowEl = this.genereateRowElement(row, setup, styles);
+
+               rowEl.classList.add("tabulator-print-table-calcs");
+               this.mapElementStyles(styles.calcRow, rowEl, ["border-top", "border-left", "border-right", "border-bottom", "color", "font-weight", "font-family", "font-size", "background-color"]);
+
+               return rowEl;
+       };
+
+       Export.prototype.genereateRowElement = function (row, setup, styles) {
+               var _this51 = this;
+
+               var rowEl = document.createElement("tr");
+
+               rowEl.classList.add("tabulator-print-table-row");
+
+               row.columns.forEach(function (col) {
+
+                       if (col) {
+                               var cellEl = document.createElement("td"),
+                                   column = col.component._column,
+                                   value = col.value;
+
+                               var cellWrapper = {
+                                       modules: {},
+                                       getValue: function getValue() {
+                                               return value;
+                                       },
+                                       getField: function getField() {
+                                               return column.definition.field;
+                                       },
+                                       getElement: function getElement() {
+                                               return cellEl;
+                                       },
+                                       getColumn: function getColumn() {
+                                               return column.getComponent();
+                                       },
+                                       getData: function getData() {
+                                               return rowData;
+                                       },
+                                       getRow: function getRow() {
+                                               return row.getComponent();
+                                       },
+                                       getComponent: function getComponent() {
+                                               return cellWrapper;
+                                       },
+                                       column: column
+                               };
+
+                               var classNames = column.definition.cssClass ? column.definition.cssClass.split(" ") : [];
+
+                               classNames.forEach(function (className) {
+                                       cellEl.classList.add(className);
+                               });
+
+                               if (_this51.table.modExists("format") && _this51.config.formatCells !== false) {
+                                       value = _this51.table.modules.format.formatExportValue(cellWrapper, _this51.colVisProp);
+                               } else {
+                                       switch (typeof value === 'undefined' ? 'undefined' : _typeof(value)) {
+                                               case "object":
+                                                       value = JSON.stringify(value);
+                                                       break;
+
+                                               case "undefined":
+                                               case "null":
+                                                       value = "";
+                                                       break;
+
+                                               default:
+                                                       value = value;
+                                       }
+                               }
+
+                               if (value instanceof Node) {
+                                       cellEl.appendChild(value);
+                               } else {
+                                       cellEl.innerHTML = value;
+                               }
+
+                               if (styles.firstCell) {
+                                       _this51.mapElementStyles(styles.firstCell, cellEl, ["padding-top", "padding-left", "padding-right", "padding-bottom", "border-top", "border-left", "border-right", "border-bottom", "color", "font-weight", "font-family", "font-size"]);
+
+                                       if (column.definition.align) {
+                                               cellEl.style.textAlign = column.definition.align;
+                                       }
+                               }
+
+                               if (_this51.table.options.dataTree && _this51.config.dataTree !== false) {
+                                       if (setup.treeElementField && setup.treeElementField == column.field || !setup.treeElementField && i == 0) {
+                                               if (row.component._row.modules.dataTree.controlEl) {
+                                                       cellEl.insertBefore(row.component._row.modules.dataTree.controlEl.cloneNode(true), cellEl.firstChild);
+                                               }
+                                               if (row.component._row.modules.dataTree.branchEl) {
+                                                       cellEl.insertBefore(row.component._row.modules.dataTree.branchEl.cloneNode(true), cellEl.firstChild);
+                                               }
+                                       }
+                               }
+
+                               rowEl.appendChild(cellEl);
+
+                               if (cellWrapper.modules.format && cellWrapper.modules.format.renderedCallback) {
+                                       cellWrapper.modules.format.renderedCallback();
+                               }
+
+                               if (setup.rowFormatter && _this51.config.formatCells !== false) {
+                                       var rowComponent = row.getComponent();
+
+                                       rowComponent.getElement = function () {
+                                               return rowEl;
+                                       };
+
+                                       setup.rowFormatter(rowComponent);
+                               }
+                       }
+               });
+
+               return rowEl;
+       };
+
+       Export.prototype.genereateHTMLTable = function (list) {
+               var holder = document.createElement("div");
+
+               holder.appendChild(this.genereateTableElement(list));
+
+               return holder.innerHTML;
+       };
+
+       Export.prototype.getHtml = function (visible, style, config, colVisProp) {
+               var list = this.generateExportList(config || this.table.options.htmlOutputConfig, style, visible, colVisProp || "htmlOutput");
+
+               return this.genereateHTMLTable(list);
+       };
+
+       Export.prototype.mapElementStyles = function (from, to, props) {
+               if (this.cloneTableStyle && from && to) {
+
+                       var lookup = {
+                               "background-color": "backgroundColor",
+                               "color": "fontColor",
+                               "width": "width",
+                               "font-weight": "fontWeight",
+                               "font-family": "fontFamily",
+                               "font-size": "fontSize",
+                               "text-align": "textAlign",
+                               "border-top": "borderTop",
+                               "border-left": "borderLeft",
+                               "border-right": "borderRight",
+                               "border-bottom": "borderBottom",
+                               "padding-top": "paddingTop",
+                               "padding-left": "paddingLeft",
+                               "padding-right": "paddingRight",
+                               "padding-bottom": "paddingBottom"
+                       };
+
+                       if (window.getComputedStyle) {
+                               var fromStyle = window.getComputedStyle(from);
+
+                               props.forEach(function (prop) {
+                                       to.style[lookup[prop]] = fromStyle.getPropertyValue(prop);
+                               });
+                       }
+               }
+       };
+
+       Tabulator.prototype.registerModule("export", Export);
+
+       var Filter = function Filter(table) {
+
+               this.table = table; //hold Tabulator object
+
+               this.filterList = []; //hold filter list
+               this.headerFilters = {}; //hold column filters
+               this.headerFilterColumns = []; //hold columns that use header filters
+
+               this.prevHeaderFilterChangeCheck = "";
+               this.prevHeaderFilterChangeCheck = "{}";
+
+               this.changed = false; //has filtering changed since last render
+       };
+
+       //initialize column header filter
+       Filter.prototype.initializeColumn = function (column, value) {
+               var self = this,
+                   field = column.getField(),
+                   params;
+
+               //handle successfull value change
+               function success(value) {
+                       var filterType = column.modules.filter.tagType == "input" && column.modules.filter.attrType == "text" || column.modules.filter.tagType == "textarea" ? "partial" : "match",
+                           type = "",
+                           filterChangeCheck = "",
+                           filterFunc;
+
+                       if (typeof column.modules.filter.prevSuccess === "undefined" || column.modules.filter.prevSuccess !== value) {
+
+                               column.modules.filter.prevSuccess = value;
+
+                               if (!column.modules.filter.emptyFunc(value)) {
+                                       column.modules.filter.value = value;
+
+                                       switch (_typeof(column.definition.headerFilterFunc)) {
+                                               case "string":
+                                                       if (self.filters[column.definition.headerFilterFunc]) {
+                                                               type = column.definition.headerFilterFunc;
+                                                               filterFunc = function filterFunc(data) {
+                                                                       var params = column.definition.headerFilterFuncParams || {};
+                                                                       var fieldVal = column.getFieldValue(data);
+
+                                                                       params = typeof params === "function" ? params(value, fieldVal, data) : params;
+
+                                                                       return self.filters[column.definition.headerFilterFunc](value, fieldVal, data, params);
+                                                               };
+                                                       } else {
+                                                               console.warn("Header Filter Error - Matching filter function not found: ", column.definition.headerFilterFunc);
+                                                       }
+                                                       break;
+
+                                               case "function":
+                                                       filterFunc = function filterFunc(data) {
+                                                               var params = column.definition.headerFilterFuncParams || {};
+                                                               var fieldVal = column.getFieldValue(data);
+
+                                                               params = typeof params === "function" ? params(value, fieldVal, data) : params;
+
+                                                               return column.definition.headerFilterFunc(value, fieldVal, data, params);
+                                                       };
+
+                                                       type = filterFunc;
+                                                       break;
+                                       }
+
+                                       if (!filterFunc) {
+                                               switch (filterType) {
+                                                       case "partial":
+                                                               filterFunc = function filterFunc(data) {
+                                                                       var colVal = column.getFieldValue(data);
+
+                                                                       if (typeof colVal !== 'undefined' && colVal !== null) {
+                                                                               return String(colVal).toLowerCase().indexOf(String(value).toLowerCase()) > -1;
+                                                                       } else {
+                                                                               return false;
+                                                                       }
+                                                               };
+                                                               type = "like";
+                                                               break;
+
+                                                       default:
+                                                               filterFunc = function filterFunc(data) {
+                                                                       return column.getFieldValue(data) == value;
+                                                               };
+                                                               type = "=";
+                                               }
+                                       }
+
+                                       self.headerFilters[field] = { value: value, func: filterFunc, type: type, params: params || {} };
+                               } else {
+                                       delete self.headerFilters[field];
+                               }
+
+                               filterChangeCheck = JSON.stringify(self.headerFilters);
+
+                               if (self.prevHeaderFilterChangeCheck !== filterChangeCheck) {
+                                       self.prevHeaderFilterChangeCheck = filterChangeCheck;
+
+                                       self.changed = true;
+                                       self.table.rowManager.filterRefresh();
+                               }
+                       }
+
+                       return true;
+               }
+
+               column.modules.filter = {
+                       success: success,
+                       attrType: false,
+                       tagType: false,
+                       emptyFunc: false
+               };
+
+               this.generateHeaderFilterElement(column);
+       };
+
+       Filter.prototype.generateHeaderFilterElement = function (column, initialValue, reinitialize) {
+               var _this52 = this;
+
+               var self = this,
+                   success = column.modules.filter.success,
+                   field = column.getField(),
+                   filterElement,
+                   editor,
+                   editorElement,
+                   cellWrapper,
+                   typingTimer,
+                   searchTrigger,
+                   params;
+
+               //handle aborted edit
+               function cancel() {}
+
+               if (column.modules.filter.headerElement && column.modules.filter.headerElement.parentNode) {
+                       column.contentElement.removeChild(column.modules.filter.headerElement.parentNode);
+               }
+
+               if (field) {
+
+                       //set empty value function
+                       column.modules.filter.emptyFunc = column.definition.headerFilterEmptyCheck || function (value) {
+                               return !value && value !== "0";
+                       };
+
+                       filterElement = document.createElement("div");
+                       filterElement.classList.add("tabulator-header-filter");
+
+                       //set column editor
+                       switch (_typeof(column.definition.headerFilter)) {
+                               case "string":
+                                       if (self.table.modules.edit.editors[column.definition.headerFilter]) {
+                                               editor = self.table.modules.edit.editors[column.definition.headerFilter];
+
+                                               if ((column.definition.headerFilter === "tick" || column.definition.headerFilter === "tickCross") && !column.definition.headerFilterEmptyCheck) {
+                                                       column.modules.filter.emptyFunc = function (value) {
+                                                               return value !== true && value !== false;
+                                                       };
+                                               }
+                                       } else {
+                                               console.warn("Filter Error - Cannot build header filter, No such editor found: ", column.definition.editor);
+                                       }
+                                       break;
+
+                               case "function":
+                                       editor = column.definition.headerFilter;
+                                       break;
+
+                               case "boolean":
+                                       if (column.modules.edit && column.modules.edit.editor) {
+                                               editor = column.modules.edit.editor;
+                                       } else {
+                                               if (column.definition.formatter && self.table.modules.edit.editors[column.definition.formatter]) {
+                                                       editor = self.table.modules.edit.editors[column.definition.formatter];
+
+                                                       if ((column.definition.formatter === "tick" || column.definition.formatter === "tickCross") && !column.definition.headerFilterEmptyCheck) {
+                                                               column.modules.filter.emptyFunc = function (value) {
+                                                                       return value !== true && value !== false;
+                                                               };
+                                                       }
+                                               } else {
+                                                       editor = self.table.modules.edit.editors["input"];
+                                               }
+                                       }
+                                       break;
+                       }
+
+                       if (editor) {
+
+                               cellWrapper = {
+                                       getValue: function getValue() {
+                                               return typeof initialValue !== "undefined" ? initialValue : "";
+                                       },
+                                       getField: function getField() {
+                                               return column.definition.field;
+                                       },
+                                       getElement: function getElement() {
+                                               return filterElement;
+                                       },
+                                       getColumn: function getColumn() {
+                                               return column.getComponent();
+                                       },
+                                       getRow: function getRow() {
+                                               return {
+                                                       normalizeHeight: function normalizeHeight() {}
+                                               };
+                                       }
+                               };
+
+                               params = column.definition.headerFilterParams || {};
+
+                               params = typeof params === "function" ? params.call(self.table) : params;
+
+                               editorElement = editor.call(this.table.modules.edit, cellWrapper, function () {}, success, cancel, params);
+
+                               if (!editorElement) {
+                                       console.warn("Filter Error - Cannot add filter to " + field + " column, editor returned a value of false");
+                                       return;
+                               }
+
+                               if (!(editorElement instanceof Node)) {
+                                       console.warn("Filter Error - Cannot add filter to " + field + " column, editor should return an instance of Node, the editor returned:", editorElement);
+                                       return;
+                               }
+
+                               //set Placeholder Text
+                               if (field) {
+                                       self.table.modules.localize.bind("headerFilters|columns|" + column.definition.field, function (value) {
+                                               editorElement.setAttribute("placeholder", typeof value !== "undefined" && value ? value : self.table.modules.localize.getText("headerFilters|default"));
+                                       });
+                               } else {
+                                       self.table.modules.localize.bind("headerFilters|default", function (value) {
+                                               editorElement.setAttribute("placeholder", typeof self.column.definition.headerFilterPlaceholder !== "undefined" && self.column.definition.headerFilterPlaceholder ? self.column.definition.headerFilterPlaceholder : value);
+                                       });
+                               }
+
+                               //focus on element on click
+                               editorElement.addEventListener("click", function (e) {
+                                       e.stopPropagation();
+                                       editorElement.focus();
+                               });
+
+                               editorElement.addEventListener("focus", function (e) {
+                                       var left = _this52.table.columnManager.element.scrollLeft;
+
+                                       if (left !== _this52.table.rowManager.element.scrollLeft) {
+                                               _this52.table.rowManager.scrollHorizontal(left);
+                                               _this52.table.columnManager.scrollHorizontal(left);
+                                       }
+                               });
+
+                               //live update filters as user types
+                               typingTimer = false;
+
+                               searchTrigger = function searchTrigger(e) {
+                                       if (typingTimer) {
+                                               clearTimeout(typingTimer);
+                                       }
+
+                                       typingTimer = setTimeout(function () {
+                                               success(editorElement.value);
+                                       }, self.table.options.headerFilterLiveFilterDelay);
+                               };
+
+                               column.modules.filter.headerElement = editorElement;
+                               column.modules.filter.attrType = editorElement.hasAttribute("type") ? editorElement.getAttribute("type").toLowerCase() : "";
+                               column.modules.filter.tagType = editorElement.tagName.toLowerCase();
+
+                               if (column.definition.headerFilterLiveFilter !== false) {
+
+                                       if (!(column.definition.headerFilter === 'autocomplete' || column.definition.headerFilter === 'tickCross' || (column.definition.editor === 'autocomplete' || column.definition.editor === 'tickCross') && column.definition.headerFilter === true)) {
+                                               editorElement.addEventListener("keyup", searchTrigger);
+                                               editorElement.addEventListener("search", searchTrigger);
+
+                                               //update number filtered columns on change
+                                               if (column.modules.filter.attrType == "number") {
+                                                       editorElement.addEventListener("change", function (e) {
+                                                               success(editorElement.value);
+                                                       });
+                                               }
+
+                                               //change text inputs to search inputs to allow for clearing of field
+                                               if (column.modules.filter.attrType == "text" && this.table.browser !== "ie") {
+                                                       editorElement.setAttribute("type", "search");
+                                                       // editorElement.off("change blur"); //prevent blur from triggering filter and preventing selection click
+                                               }
+                                       }
+
+                                       //prevent input and select elements from propegating click to column sorters etc
+                                       if (column.modules.filter.tagType == "input" || column.modules.filter.tagType == "select" || column.modules.filter.tagType == "textarea") {
+                                               editorElement.addEventListener("mousedown", function (e) {
+                                                       e.stopPropagation();
+                                               });
+                                       }
+                               }
+
+                               filterElement.appendChild(editorElement);
+
+                               column.contentElement.appendChild(filterElement);
+
+                               if (!reinitialize) {
+                                       self.headerFilterColumns.push(column);
+                               }
+                       }
+               } else {
+                       console.warn("Filter Error - Cannot add header filter, column has no field set:", column.definition.title);
+               }
+       };
+
+       //hide all header filter elements (used to ensure correct column widths in "fitData" layout mode)
+       Filter.prototype.hideHeaderFilterElements = function () {
+               this.headerFilterColumns.forEach(function (column) {
+                       if (column.modules.filter && column.modules.filter.headerElement) {
+                               column.modules.filter.headerElement.style.display = 'none';
+                       }
+               });
+       };
+
+       //show all header filter elements (used to ensure correct column widths in "fitData" layout mode)
+       Filter.prototype.showHeaderFilterElements = function () {
+               this.headerFilterColumns.forEach(function (column) {
+                       if (column.modules.filter && column.modules.filter.headerElement) {
+                               column.modules.filter.headerElement.style.display = '';
+                       }
+               });
+       };
+
+       //programatically set focus of header filter
+       Filter.prototype.setHeaderFilterFocus = function (column) {
+               if (column.modules.filter && column.modules.filter.headerElement) {
+                       column.modules.filter.headerElement.focus();
+               } else {
+                       console.warn("Column Filter Focus Error - No header filter set on column:", column.getField());
+               }
+       };
+
+       //programmatically get value of header filter
+       Filter.prototype.getHeaderFilterValue = function (column) {
+               if (column.modules.filter && column.modules.filter.headerElement) {
+                       return column.modules.filter.headerElement.value;
+               } else {
+                       console.warn("Column Filter Error - No header filter set on column:", column.getField());
+               }
+       };
+
+       //programatically set value of header filter
+       Filter.prototype.setHeaderFilterValue = function (column, value) {
+               if (column) {
+                       if (column.modules.filter && column.modules.filter.headerElement) {
+                               this.generateHeaderFilterElement(column, value, true);
+                               column.modules.filter.success(value);
+                       } else {
+                               console.warn("Column Filter Error - No header filter set on column:", column.getField());
+                       }
+               }
+       };
+
+       Filter.prototype.reloadHeaderFilter = function (column) {
+               if (column) {
+                       if (column.modules.filter && column.modules.filter.headerElement) {
+                               this.generateHeaderFilterElement(column, column.modules.filter.value, true);
+                       } else {
+                               console.warn("Column Filter Error - No header filter set on column:", column.getField());
+                       }
+               }
+       };
+
+       //check if the filters has changed since last use
+       Filter.prototype.hasChanged = function () {
+               var changed = this.changed;
+               this.changed = false;
+               return changed;
+       };
+
+       //set standard filters
+       Filter.prototype.setFilter = function (field, type, value, params) {
+               var self = this;
+
+               self.filterList = [];
+
+               if (!Array.isArray(field)) {
+                       field = [{ field: field, type: type, value: value, params: params }];
+               }
+
+               self.addFilter(field);
+       };
+
+       //add filter to array
+       Filter.prototype.addFilter = function (field, type, value, params) {
+               var self = this;
+
+               if (!Array.isArray(field)) {
+                       field = [{ field: field, type: type, value: value, params: params }];
+               }
+
+               field.forEach(function (filter) {
+
+                       filter = self.findFilter(filter);
+
+                       if (filter) {
+                               self.filterList.push(filter);
+
+                               self.changed = true;
+                       }
+               });
+
+               if (this.table.options.persistence && this.table.modExists("persistence", true) && this.table.modules.persistence.config.filter) {
+                       this.table.modules.persistence.save("filter");
+               }
+       };
+
+       Filter.prototype.findFilter = function (filter) {
+               var self = this,
+                   column;
+
+               if (Array.isArray(filter)) {
+                       return this.findSubFilters(filter);
+               }
+
+               var filterFunc = false;
+
+               if (typeof filter.field == "function") {
+                       filterFunc = function filterFunc(data) {
+                               return filter.field(data, filter.type || {}); // pass params to custom filter function
+                       };
+               } else {
+
+                       if (self.filters[filter.type]) {
+
+                               column = self.table.columnManager.getColumnByField(filter.field);
+
+                               if (column) {
+                                       filterFunc = function filterFunc(data) {
+                                               return self.filters[filter.type](filter.value, column.getFieldValue(data), data, filter.params || {});
+                                       };
+                               } else {
+                                       filterFunc = function filterFunc(data) {
+                                               return self.filters[filter.type](filter.value, data[filter.field], data, filter.params || {});
+                                       };
+                               }
+                       } else {
+                               console.warn("Filter Error - No such filter type found, ignoring: ", filter.type);
+                       }
+               }
+
+               filter.func = filterFunc;
+
+               return filter.func ? filter : false;
+       };
+
+       Filter.prototype.findSubFilters = function (filters) {
+               var self = this,
+                   output = [];
+
+               filters.forEach(function (filter) {
+                       filter = self.findFilter(filter);
+
+                       if (filter) {
+                               output.push(filter);
+                       }
+               });
+
+               return output.length ? output : false;
+       };
+
+       //get all filters
+       Filter.prototype.getFilters = function (all, ajax) {
+               var output = [];
+
+               if (all) {
+                       output = this.getHeaderFilters();
+               }
+
+               if (ajax) {
+                       output.forEach(function (item) {
+                               if (typeof item.type == "function") {
+                                       item.type = "function";
+                               }
+                       });
+               }
+
+               output = output.concat(this.filtersToArray(this.filterList, ajax));
+
+               return output;
+       };
+
+       //filter to Object
+       Filter.prototype.filtersToArray = function (filterList, ajax) {
+               var _this53 = this;
+
+               var output = [];
+
+               filterList.forEach(function (filter) {
+                       var item;
+
+                       if (Array.isArray(filter)) {
+                               output.push(_this53.filtersToArray(filter, ajax));
+                       } else {
+                               item = { field: filter.field, type: filter.type, value: filter.value };
+
+                               if (ajax) {
+                                       if (typeof item.type == "function") {
+                                               item.type = "function";
+                                       }
+                               }
+
+                               output.push(item);
+                       }
+               });
+
+               return output;
+       };
+
+       //get all filters
+       Filter.prototype.getHeaderFilters = function () {
+               var self = this,
+                   output = [];
+
+               for (var key in this.headerFilters) {
+                       output.push({ field: key, type: this.headerFilters[key].type, value: this.headerFilters[key].value });
+               }
+
+               return output;
+       };
+
+       //remove filter from array
+       Filter.prototype.removeFilter = function (field, type, value) {
+               var self = this;
+
+               if (!Array.isArray(field)) {
+                       field = [{ field: field, type: type, value: value }];
+               }
+
+               field.forEach(function (filter) {
+                       var index = -1;
+
+                       if (_typeof(filter.field) == "object") {
+                               index = self.filterList.findIndex(function (element) {
+                                       return filter === element;
+                               });
+                       } else {
+                               index = self.filterList.findIndex(function (element) {
+                                       return filter.field === element.field && filter.type === element.type && filter.value === element.value;
+                               });
+                       }
+
+                       if (index > -1) {
+                               self.filterList.splice(index, 1);
+                               self.changed = true;
+                       } else {
+                               console.warn("Filter Error - No matching filter type found, ignoring: ", filter.type);
+                       }
+               });
+
+               if (this.table.options.persistence && this.table.modExists("persistence", true) && this.table.modules.persistence.config.filter) {
+                       this.table.modules.persistence.save("filter");
+               }
+       };
+
+       //clear filters
+       Filter.prototype.clearFilter = function (all) {
+               this.filterList = [];
+
+               if (all) {
+                       this.clearHeaderFilter();
+               }
+
+               this.changed = true;
+
+               if (this.table.options.persistence && this.table.modExists("persistence", true) && this.table.modules.persistence.config.filter) {
+                       this.table.modules.persistence.save("filter");
+               }
+       };
+
+       //clear header filters
+       Filter.prototype.clearHeaderFilter = function () {
+               var self = this;
+
+               this.headerFilters = {};
+               self.prevHeaderFilterChangeCheck = "{}";
+
+               this.headerFilterColumns.forEach(function (column) {
+                       column.modules.filter.value = null;
+                       column.modules.filter.prevSuccess = undefined;
+                       self.reloadHeaderFilter(column);
+               });
+
+               this.changed = true;
+       };
+
+       //search data and return matching rows
+       Filter.prototype.search = function (searchType, field, type, value) {
+               var self = this,
+                   activeRows = [],
+                   filterList = [];
+
+               if (!Array.isArray(field)) {
+                       field = [{ field: field, type: type, value: value }];
+               }
+
+               field.forEach(function (filter) {
+                       filter = self.findFilter(filter);
+
+                       if (filter) {
+                               filterList.push(filter);
+                       }
+               });
+
+               this.table.rowManager.rows.forEach(function (row) {
+                       var match = true;
+
+                       filterList.forEach(function (filter) {
+                               if (!self.filterRecurse(filter, row.getData())) {
+                                       match = false;
+                               }
+                       });
+
+                       if (match) {
+                               activeRows.push(searchType === "data" ? row.getData("data") : row.getComponent());
+                       }
+               });
+
+               return activeRows;
+       };
+
+       //filter row array
+       Filter.prototype.filter = function (rowList, filters) {
+               var self = this,
+                   activeRows = [],
+                   activeRowComponents = [];
+
+               if (self.table.options.dataFiltering) {
+                       self.table.options.dataFiltering.call(self.table, self.getFilters());
+               }
+
+               if (!self.table.options.ajaxFiltering && (self.filterList.length || Object.keys(self.headerFilters).length)) {
+
+                       rowList.forEach(function (row) {
+                               if (self.filterRow(row)) {
+                                       activeRows.push(row);
+                               }
+                       });
+               } else {
+                       activeRows = rowList.slice(0);
+               }
+
+               if (self.table.options.dataFiltered) {
+
+                       activeRows.forEach(function (row) {
+                               activeRowComponents.push(row.getComponent());
+                       });
+
+                       self.table.options.dataFiltered.call(self.table, self.getFilters(), activeRowComponents);
+               }
+
+               return activeRows;
+       };
+
+       //filter individual row
+       Filter.prototype.filterRow = function (row, filters) {
+               var self = this,
+                   match = true,
+                   data = row.getData();
+
+               self.filterList.forEach(function (filter) {
+                       if (!self.filterRecurse(filter, data)) {
+                               match = false;
+                       }
+               });
+
+               for (var field in self.headerFilters) {
+                       if (!self.headerFilters[field].func(data)) {
+                               match = false;
+                       }
+               }
+
+               return match;
+       };
+
+       Filter.prototype.filterRecurse = function (filter, data) {
+               var self = this,
+                   match = false;
+
+               if (Array.isArray(filter)) {
+                       filter.forEach(function (subFilter) {
+                               if (self.filterRecurse(subFilter, data)) {
+                                       match = true;
+                               }
+                       });
+               } else {
+                       match = filter.func(data);
+               }
+
+               return match;
+       };
+
+       //list of available filters
+       Filter.prototype.filters = {
+
+               //equal to
+               "=": function _(filterVal, rowVal, rowData, filterParams) {
+                       return rowVal == filterVal ? true : false;
+               },
+
+               //less than
+               "<": function _(filterVal, rowVal, rowData, filterParams) {
+                       return rowVal < filterVal ? true : false;
+               },
+
+               //less than or equal to
+               "<=": function _(filterVal, rowVal, rowData, filterParams) {
+                       return rowVal <= filterVal ? true : false;
+               },
+
+               //greater than
+               ">": function _(filterVal, rowVal, rowData, filterParams) {
+                       return rowVal > filterVal ? true : false;
+               },
+
+               //greater than or equal to
+               ">=": function _(filterVal, rowVal, rowData, filterParams) {
+                       return rowVal >= filterVal ? true : false;
+               },
+
+               //not equal to
+               "!=": function _(filterVal, rowVal, rowData, filterParams) {
+                       return rowVal != filterVal ? true : false;
+               },
+
+               "regex": function regex(filterVal, rowVal, rowData, filterParams) {
+
+                       if (typeof filterVal == "string") {
+                               filterVal = new RegExp(filterVal);
+                       }
+
+                       return filterVal.test(rowVal);
+               },
+
+               //contains the string
+               "like": function like(filterVal, rowVal, rowData, filterParams) {
+                       if (filterVal === null || typeof filterVal === "undefined") {
+                               return rowVal === filterVal ? true : false;
+                       } else {
+                               if (typeof rowVal !== 'undefined' && rowVal !== null) {
+                                       return String(rowVal).toLowerCase().indexOf(filterVal.toLowerCase()) > -1;
+                               } else {
+                                       return false;
+                               }
+                       }
+               },
+
+               //contains the keywords
+               "keywords": function keywords(filterVal, rowVal, rowData, filterParams) {
+                       var keywords = filterVal.toLowerCase().split(typeof filterParams.separator === "undefined" ? " " : filterParams.separator),
+                           value = String(rowVal === null || typeof rowVal === "undefined" ? "" : rowVal).toLowerCase(),
+                           matches = [];
+
+                       keywords.forEach(function (keyword) {
+                               if (value.includes(keyword)) {
+                                       matches.push(true);
+                               }
+                       });
+
+                       return filterParams.matchAll ? matches.length === keywords.length : !!matches.length;
+               },
+
+               //starts with the string
+               "starts": function starts(filterVal, rowVal, rowData, filterParams) {
+                       if (filterVal === null || typeof filterVal === "undefined") {
+                               return rowVal === filterVal ? true : false;
+                       } else {
+                               if (typeof rowVal !== 'undefined' && rowVal !== null) {
+                                       return String(rowVal).toLowerCase().startsWith(filterVal.toLowerCase());
+                               } else {
+                                       return false;
+                               }
+                       }
+               },
+
+               //ends with the string
+               "ends": function ends(filterVal, rowVal, rowData, filterParams) {
+                       if (filterVal === null || typeof filterVal === "undefined") {
+                               return rowVal === filterVal ? true : false;
+                       } else {
+                               if (typeof rowVal !== 'undefined' && rowVal !== null) {
+                                       return String(rowVal).toLowerCase().endsWith(filterVal.toLowerCase());
+                               } else {
+                                       return false;
+                               }
+                       }
+               },
+
+               //in array
+               "in": function _in(filterVal, rowVal, rowData, filterParams) {
+                       if (Array.isArray(filterVal)) {
+                               return filterVal.indexOf(rowVal) > -1;
+                       } else {
+                               console.warn("Filter Error - filter value is not an array:", filterVal);
+                               return false;
+                       }
+               }
+       };
+
+       Tabulator.prototype.registerModule("filter", Filter);
+
+       var Format = function Format(table) {
+               this.table = table; //hold Tabulator object
+       };
+
+       //initialize column formatter
+       Format.prototype.initializeColumn = function (column) {
+               column.modules.format = this.lookupFormatter(column, "");
+
+               if (typeof column.definition.formatterPrint !== "undefined") {
+                       column.modules.format.print = this.lookupFormatter(column, "Print");
+               }
+
+               if (typeof column.definition.formatterClipboard !== "undefined") {
+                       column.modules.format.clipboard = this.lookupFormatter(column, "Clipboard");
+               }
+
+               if (typeof column.definition.formatterHtmlOutput !== "undefined") {
+                       column.modules.format.htmlOutput = this.lookupFormatter(column, "HtmlOutput");
+               }
+       };
+
+       Format.prototype.lookupFormatter = function (column, type) {
+               var config = { params: column.definition["formatter" + type + "Params"] || {} },
+                   formatter = column.definition["formatter" + type];
+
+               //set column formatter
+               switch (typeof formatter === 'undefined' ? 'undefined' : _typeof(formatter)) {
+                       case "string":
+
+                               if (formatter === "tick") {
+                                       formatter = "tickCross";
+
+                                       if (typeof config.params.crossElement == "undefined") {
+                                               config.params.crossElement = false;
+                                       }
+
+                                       console.warn("DEPRECATION WARNING - the tick formatter has been deprecated, please use the tickCross formatter with the crossElement param set to false");
+                               }
+
+                               if (this.formatters[formatter]) {
+                                       config.formatter = this.formatters[formatter];
+                               } else {
+                                       console.warn("Formatter Error - No such formatter found: ", formatter);
+                                       config.formatter = this.formatters.plaintext;
+                               }
+                               break;
+
+                       case "function":
+                               config.formatter = formatter;
+                               break;
+
+                       default:
+                               config.formatter = this.formatters.plaintext;
+                               break;
+               }
+
+               return config;
+       };
+
+       Format.prototype.cellRendered = function (cell) {
+               if (cell.modules.format && cell.modules.format.renderedCallback) {
+                       cell.modules.format.renderedCallback();
+               }
+       };
+
+       //return a formatted value for a cell
+       Format.prototype.formatValue = function (cell) {
+               var component = cell.getComponent(),
+                   params = typeof cell.column.modules.format.params === "function" ? cell.column.modules.format.params(component) : cell.column.modules.format.params;
+
+               function onRendered(callback) {
+                       if (!cell.modules.format) {
+                               cell.modules.format = {};
+                       }
+
+                       cell.modules.format.renderedCallback = callback;
+               }
+
+               return cell.column.modules.format.formatter.call(this, component, params, onRendered);
+       };
+
+       Format.prototype.formatExportValue = function (cell, type) {
+               var formatter = cell.column.modules.format[type],
+                   params;
+
+               if (formatter) {
+                       var onRendered = function onRendered(callback) {
+                               if (!cell.modules.format) {
+                                       cell.modules.format = {};
+                               }
+
+                               cell.modules.format.renderedCallback = callback;
+                       };
+
+                       params = typeof formatter.params === "function" ? formatter.params(component) : formatter.params;
+
+                       return formatter.formatter.call(this, cell.getComponent(), params, onRendered);
+               } else {
+                       return this.formatValue(cell);
+               }
+       };
+
+       Format.prototype.sanitizeHTML = function (value) {
+               if (value) {
+                       var entityMap = {
+                               '&': '&amp;',
+                               '<': '&lt;',
+                               '>': '&gt;',
+                               '"': '&quot;',
+                               "'": '&#39;',
+                               '/': '&#x2F;',
+                               '`': '&#x60;',
+                               '=': '&#x3D;'
+                       };
+
+                       return String(value).replace(/[&<>"'`=\/]/g, function (s) {
+                               return entityMap[s];
+                       });
+               } else {
+                       return value;
+               }
+       };
+
+       Format.prototype.emptyToSpace = function (value) {
+               return value === null || typeof value === "undefined" || value === "" ? "&nbsp;" : value;
+       };
+
+       //get formatter for cell
+       Format.prototype.getFormatter = function (formatter) {
+               var formatter;
+
+               switch (typeof formatter === 'undefined' ? 'undefined' : _typeof(formatter)) {
+                       case "string":
+                               if (this.formatters[formatter]) {
+                                       formatter = this.formatters[formatter];
+                               } else {
+                                       console.warn("Formatter Error - No such formatter found: ", formatter);
+                                       formatter = this.formatters.plaintext;
+                               }
+                               break;
+
+                       case "function":
+                               formatter = formatter;
+                               break;
+
+                       default:
+                               formatter = this.formatters.plaintext;
+                               break;
+               }
+
+               return formatter;
+       };
+
+       //default data formatters
+       Format.prototype.formatters = {
+               //plain text value
+               plaintext: function plaintext(cell, formatterParams, onRendered) {
+                       return this.emptyToSpace(this.sanitizeHTML(cell.getValue()));
+               },
+
+               //html text value
+               html: function html(cell, formatterParams, onRendered) {
+                       return cell.getValue();
+               },
+
+               //multiline text area
+               textarea: function textarea(cell, formatterParams, onRendered) {
+                       cell.getElement().style.whiteSpace = "pre-wrap";
+                       return this.emptyToSpace(this.sanitizeHTML(cell.getValue()));
+               },
+
+               //currency formatting
+               money: function money(cell, formatterParams, onRendered) {
+                       var floatVal = parseFloat(cell.getValue()),
+                           number,
+                           integer,
+                           decimal,
+                           rgx;
+
+                       var decimalSym = formatterParams.decimal || ".";
+                       var thousandSym = formatterParams.thousand || ",";
+                       var symbol = formatterParams.symbol || "";
+                       var after = !!formatterParams.symbolAfter;
+                       var precision = typeof formatterParams.precision !== "undefined" ? formatterParams.precision : 2;
+
+                       if (isNaN(floatVal)) {
+                               return this.emptyToSpace(this.sanitizeHTML(cell.getValue()));
+                       }
+
+                       number = precision !== false ? floatVal.toFixed(precision) : floatVal;
+                       number = String(number).split(".");
+
+                       integer = number[0];
+                       decimal = number.length > 1 ? decimalSym + number[1] : "";
+
+                       rgx = /(\d+)(\d{3})/;
+
+                       while (rgx.test(integer)) {
+                               integer = integer.replace(rgx, "$1" + thousandSym + "$2");
+                       }
+
+                       return after ? integer + decimal + symbol : symbol + integer + decimal;
+               },
+
+               //clickable anchor tag
+               link: function link(cell, formatterParams, onRendered) {
+                       var value = cell.getValue(),
+                           urlPrefix = formatterParams.urlPrefix || "",
+                           download = formatterParams.download,
+                           label = value,
+                           el = document.createElement("a"),
+                           data;
+
+                       if (formatterParams.labelField) {
+                               data = cell.getData();
+                               label = data[formatterParams.labelField];
+                       }
+
+                       if (formatterParams.label) {
+                               switch (_typeof(formatterParams.label)) {
+                                       case "string":
+                                               label = formatterParams.label;
+                                               break;
+
+                                       case "function":
+                                               label = formatterParams.label(cell);
+                                               break;
+                               }
+                       }
+
+                       if (label) {
+                               if (formatterParams.urlField) {
+                                       data = cell.getData();
+                                       value = data[formatterParams.urlField];
+                               }
+
+                               if (formatterParams.url) {
+                                       switch (_typeof(formatterParams.url)) {
+                                               case "string":
+                                                       value = formatterParams.url;
+                                                       break;
+
+                                               case "function":
+                                                       value = formatterParams.url(cell);
+                                                       break;
+                                       }
+                               }
+
+                               el.setAttribute("href", urlPrefix + value);
+
+                               if (formatterParams.target) {
+                                       el.setAttribute("target", formatterParams.target);
+                               }
+
+                               if (formatterParams.download) {
+
+                                       if (typeof download == "function") {
+                                               download = download(cell);
+                                       } else {
+                                               download = download === true ? "" : download;
+                                       }
+
+                                       el.setAttribute("download", download);
+                               }
+
+                               el.innerHTML = this.emptyToSpace(this.sanitizeHTML(label));
+
+                               return el;
+                       } else {
+                               return "&nbsp;";
+                       }
+               },
+
+               //image element
+               image: function image(cell, formatterParams, onRendered) {
+                       var el = document.createElement("img");
+                       el.setAttribute("src", cell.getValue());
+
+                       switch (_typeof(formatterParams.height)) {
+                               case "number":
+                                       el.style.height = formatterParams.height + "px";
+                                       break;
+
+                               case "string":
+                                       el.style.height = formatterParams.height;
+                                       break;
+                       }
+
+                       switch (_typeof(formatterParams.width)) {
+                               case "number":
+                                       el.style.width = formatterParams.width + "px";
+                                       break;
+
+                               case "string":
+                                       el.style.width = formatterParams.width;
+                                       break;
+                       }
+
+                       el.addEventListener("load", function () {
+                               cell.getRow().normalizeHeight();
+                       });
+
+                       return el;
+               },
+
+               //tick or cross
+               tickCross: function tickCross(cell, formatterParams, onRendered) {
+                       var value = cell.getValue(),
+                           element = cell.getElement(),
+                           empty = formatterParams.allowEmpty,
+                           truthy = formatterParams.allowTruthy,
+                           tick = typeof formatterParams.tickElement !== "undefined" ? formatterParams.tickElement : '<svg enable-background="new 0 0 24 24" height="14" width="14" viewBox="0 0 24 24" xml:space="preserve" ><path fill="#2DC214" clip-rule="evenodd" d="M21.652,3.211c-0.293-0.295-0.77-0.295-1.061,0L9.41,14.34  c-0.293,0.297-0.771,0.297-1.062,0L3.449,9.351C3.304,9.203,3.114,9.13,2.923,9.129C2.73,9.128,2.534,9.201,2.387,9.351  l-2.165,1.946C0.078,11.445,0,11.63,0,11.823c0,0.194,0.078,0.397,0.223,0.544l4.94,5.184c0.292,0.296,0.771,0.776,1.062,1.07  l2.124,2.141c0.292,0.293,0.769,0.293,1.062,0l14.366-14.34c0.293-0.294,0.293-0.777,0-1.071L21.652,3.211z" fill-rule="evenodd"/></svg>',
+                           cross = typeof formatterParams.crossElement !== "undefined" ? formatterParams.crossElement : '<svg enable-background="new 0 0 24 24" height="14" width="14"  viewBox="0 0 24 24" xml:space="preserve" ><path fill="#CE1515" d="M22.245,4.015c0.313,0.313,0.313,0.826,0,1.139l-6.276,6.27c-0.313,0.312-0.313,0.826,0,1.14l6.273,6.272  c0.313,0.313,0.313,0.826,0,1.14l-2.285,2.277c-0.314,0.312-0.828,0.312-1.142,0l-6.271-6.271c-0.313-0.313-0.828-0.313-1.141,0  l-6.276,6.267c-0.313,0.313-0.828,0.313-1.141,0l-2.282-2.28c-0.313-0.313-0.313-0.826,0-1.14l6.278-6.269  c0.313-0.312,0.313-0.826,0-1.14L1.709,5.147c-0.314-0.313-0.314-0.827,0-1.14l2.284-2.278C4.308,1.417,4.821,1.417,5.135,1.73  L11.405,8c0.314,0.314,0.828,0.314,1.141,0.001l6.276-6.267c0.312-0.312,0.826-0.312,1.141,0L22.245,4.015z"/></svg>';
+
+                       if (truthy && value || value === true || value === "true" || value === "True" || value === 1 || value === "1") {
+                               element.setAttribute("aria-checked", true);
+                               return tick || "";
+                       } else {
+                               if (empty && (value === "null" || value === "" || value === null || typeof value === "undefined")) {
+                                       element.setAttribute("aria-checked", "mixed");
+                                       return "";
+                               } else {
+                                       element.setAttribute("aria-checked", false);
+                                       return cross || "";
+                               }
+                       }
+               },
+
+               datetime: function datetime(cell, formatterParams, onRendered) {
+                       var inputFormat = formatterParams.inputFormat || "YYYY-MM-DD hh:mm:ss";
+                       var outputFormat = formatterParams.outputFormat || "DD/MM/YYYY hh:mm:ss";
+                       var invalid = typeof formatterParams.invalidPlaceholder !== "undefined" ? formatterParams.invalidPlaceholder : "";
+                       var value = cell.getValue();
+
+                       var newDatetime = moment(value, inputFormat);
+
+                       if (newDatetime.isValid()) {
+                               return formatterParams.timezone ? newDatetime.tz(formatterParams.timezone).format(outputFormat) : newDatetime.format(outputFormat);
+                       } else {
+
+                               if (invalid === true) {
+                                       return value;
+                               } else if (typeof invalid === "function") {
+                                       return invalid(value);
+                               } else {
+                                       return invalid;
+                               }
+                       }
+               },
+
+               datetimediff: function datetime(cell, formatterParams, onRendered) {
+                       var inputFormat = formatterParams.inputFormat || "YYYY-MM-DD hh:mm:ss";
+                       var invalid = typeof formatterParams.invalidPlaceholder !== "undefined" ? formatterParams.invalidPlaceholder : "";
+                       var suffix = typeof formatterParams.suffix !== "undefined" ? formatterParams.suffix : false;
+                       var unit = typeof formatterParams.unit !== "undefined" ? formatterParams.unit : undefined;
+                       var humanize = typeof formatterParams.humanize !== "undefined" ? formatterParams.humanize : false;
+                       var date = typeof formatterParams.date !== "undefined" ? formatterParams.date : moment();
+                       var value = cell.getValue();
+
+                       var newDatetime = moment(value, inputFormat);
+
+                       if (newDatetime.isValid()) {
+                               if (humanize) {
+                                       return moment.duration(newDatetime.diff(date)).humanize(suffix);
+                               } else {
+                                       return newDatetime.diff(date, unit) + (suffix ? " " + suffix : "");
+                               }
+                       } else {
+
+                               if (invalid === true) {
+                                       return value;
+                               } else if (typeof invalid === "function") {
+                                       return invalid(value);
+                               } else {
+                                       return invalid;
+                               }
+                       }
+               },
+
+               //select
+               lookup: function lookup(cell, formatterParams, onRendered) {
+                       var value = cell.getValue();
+
+                       if (typeof formatterParams[value] === "undefined") {
+                               console.warn('Missing display value for ' + value);
+                               return value;
+                       }
+
+                       return formatterParams[value];
+               },
+
+               //star rating
+               star: function star(cell, formatterParams, onRendered) {
+                       var value = cell.getValue(),
+                           element = cell.getElement(),
+                           maxStars = formatterParams && formatterParams.stars ? formatterParams.stars : 5,
+                           stars = document.createElement("span"),
+                           star = document.createElementNS('http://www.w3.org/2000/svg', "svg"),
+                           starActive = '<polygon fill="#FFEA00" stroke="#C1AB60" stroke-width="37.6152" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" points="259.216,29.942 330.27,173.919 489.16,197.007 374.185,309.08 401.33,467.31 259.216,392.612 117.104,467.31 144.25,309.08 29.274,197.007 188.165,173.919 "/>',
+                           starInactive = '<polygon fill="#D2D2D2" stroke="#686868" stroke-width="37.6152" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" points="259.216,29.942 330.27,173.919 489.16,197.007 374.185,309.08 401.33,467.31 259.216,392.612 117.104,467.31 144.25,309.08 29.274,197.007 188.165,173.919 "/>';
+
+                       //style stars holder
+                       stars.style.verticalAlign = "middle";
+
+                       //style star
+                       star.setAttribute("width", "14");
+                       star.setAttribute("height", "14");
+                       star.setAttribute("viewBox", "0 0 512 512");
+                       star.setAttribute("xml:space", "preserve");
+                       star.style.padding = "0 1px";
+
+                       value = value && !isNaN(value) ? parseInt(value) : 0;
+
+                       value = Math.max(0, Math.min(value, maxStars));
+
+                       for (var i = 1; i <= maxStars; i++) {
+                               var nextStar = star.cloneNode(true);
+                               nextStar.innerHTML = i <= value ? starActive : starInactive;
+
+                               stars.appendChild(nextStar);
+                       }
+
+                       element.style.whiteSpace = "nowrap";
+                       element.style.overflow = "hidden";
+                       element.style.textOverflow = "ellipsis";
+
+                       element.setAttribute("aria-label", value);
+
+                       return stars;
+               },
+
+               traffic: function traffic(cell, formatterParams, onRendered) {
+                       var value = this.sanitizeHTML(cell.getValue()) || 0,
+                           el = document.createElement("span"),
+                           max = formatterParams && formatterParams.max ? formatterParams.max : 100,
+                           min = formatterParams && formatterParams.min ? formatterParams.min : 0,
+                           colors = formatterParams && typeof formatterParams.color !== "undefined" ? formatterParams.color : ["red", "orange", "green"],
+                           color = "#666666",
+                           percent,
+                           percentValue;
+
+                       if (isNaN(value) || typeof cell.getValue() === "undefined") {
+                               return;
+                       }
+
+                       el.classList.add("tabulator-traffic-light");
+
+                       //make sure value is in range
+                       percentValue = parseFloat(value) <= max ? parseFloat(value) : max;
+                       percentValue = parseFloat(percentValue) >= min ? parseFloat(percentValue) : min;
+
+                       //workout percentage
+                       percent = (max - min) / 100;
+                       percentValue = Math.round((percentValue - min) / percent);
+
+                       //set color
+                       switch (typeof colors === 'undefined' ? 'undefined' : _typeof(colors)) {
+                               case "string":
+                                       color = colors;
+                                       break;
+                               case "function":
+                                       color = colors(value);
+                                       break;
+                               case "object":
+                                       if (Array.isArray(colors)) {
+                                               var unit = 100 / colors.length;
+                                               var index = Math.floor(percentValue / unit);
+
+                                               index = Math.min(index, colors.length - 1);
+                                               index = Math.max(index, 0);
+                                               color = colors[index];
+                                               break;
+                                       }
+                       }
+
+                       el.style.backgroundColor = color;
+
+                       return el;
+               },
+
+               //progress bar
+               progress: function progress(cell, formatterParams, onRendered) {
+                       //progress bar
+                       var value = this.sanitizeHTML(cell.getValue()) || 0,
+                           element = cell.getElement(),
+                           max = formatterParams && formatterParams.max ? formatterParams.max : 100,
+                           min = formatterParams && formatterParams.min ? formatterParams.min : 0,
+                           legendAlign = formatterParams && formatterParams.legendAlign ? formatterParams.legendAlign : "center",
+                           percent,
+                           percentValue,
+                           color,
+                           legend,
+                           legendColor,
+                           top,
+                           left,
+                           right,
+                           bottom;
+
+                       //make sure value is in range
+                       percentValue = parseFloat(value) <= max ? parseFloat(value) : max;
+                       percentValue = parseFloat(percentValue) >= min ? parseFloat(percentValue) : min;
+
+                       //workout percentage
+                       percent = (max - min) / 100;
+                       percentValue = Math.round((percentValue - min) / percent);
+
+                       //set bar color
+                       switch (_typeof(formatterParams.color)) {
+                               case "string":
+                                       color = formatterParams.color;
+                                       break;
+                               case "function":
+                                       color = formatterParams.color(value);
+                                       break;
+                               case "object":
+                                       if (Array.isArray(formatterParams.color)) {
+                                               var unit = 100 / formatterParams.color.length;
+                                               var index = Math.floor(percentValue / unit);
+
+                                               index = Math.min(index, formatterParams.color.length - 1);
+                                               index = Math.max(index, 0);
+                                               color = formatterParams.color[index];
+                                               break;
+                                       }
+                               default:
+                                       color = "#2DC214";
+                       }
+
+                       //generate legend
+                       switch (_typeof(formatterParams.legend)) {
+                               case "string":
+                                       legend = formatterParams.legend;
+                                       break;
+                               case "function":
+                                       legend = formatterParams.legend(value);
+                                       break;
+                               case "boolean":
+                                       legend = value;
+                                       break;
+                               default:
+                                       legend = false;
+                       }
+
+                       //set legend color
+                       switch (_typeof(formatterParams.legendColor)) {
+                               case "string":
+                                       legendColor = formatterParams.legendColor;
+                                       break;
+                               case "function":
+                                       legendColor = formatterParams.legendColor(value);
+                                       break;
+                               case "object":
+                                       if (Array.isArray(formatterParams.legendColor)) {
+                                               var unit = 100 / formatterParams.legendColor.length;
+                                               var index = Math.floor(percentValue / unit);
+
+                                               index = Math.min(index, formatterParams.legendColor.length - 1);
+                                               index = Math.max(index, 0);
+                                               legendColor = formatterParams.legendColor[index];
+                                       }
+                                       break;
+                               default:
+                                       legendColor = "#000";
+                       }
+
+                       element.style.minWidth = "30px";
+                       element.style.position = "relative";
+
+                       element.setAttribute("aria-label", percentValue);
+
+                       var barEl = document.createElement("div");
+                       barEl.style.display = "inline-block";
+                       barEl.style.position = "relative";
+                       barEl.style.width = percentValue + "%";
+                       barEl.style.backgroundColor = color;
+                       barEl.style.height = "100%";
+
+                       barEl.setAttribute('data-max', max);
+                       barEl.setAttribute('data-min', min);
+
+                       if (legend) {
+                               var legendEl = document.createElement("div");
+                               legendEl.style.position = "absolute";
+                               legendEl.style.top = "4px";
+                               legendEl.style.left = 0;
+                               legendEl.style.textAlign = legendAlign;
+                               legendEl.style.width = "100%";
+                               legendEl.style.color = legendColor;
+                               legendEl.innerHTML = legend;
+                       }
+
+                       onRendered(function () {
+
+                               //handle custom element needed if formatter is to be included in printed/downloaded output
+                               if (!(cell instanceof CellComponent)) {
+                                       var holderEl = document.createElement("div");
+                                       holderEl.style.position = "absolute";
+                                       holderEl.style.top = "4px";
+                                       holderEl.style.bottom = "4px";
+                                       holderEl.style.left = "4px";
+                                       holderEl.style.right = "4px";
+
+                                       element.appendChild(holderEl);
+
+                                       element = holderEl;
+                               }
+
+                               element.appendChild(barEl);
+
+                               if (legend) {
+                                       element.appendChild(legendEl);
+                               }
+                       });
+
+                       return "";
+               },
+
+               //background color
+               color: function color(cell, formatterParams, onRendered) {
+                       cell.getElement().style.backgroundColor = this.sanitizeHTML(cell.getValue());
+                       return "";
+               },
+
+               //tick icon
+               buttonTick: function buttonTick(cell, formatterParams, onRendered) {
+                       return '<svg enable-background="new 0 0 24 24" height="14" width="14" viewBox="0 0 24 24" xml:space="preserve" ><path fill="#2DC214" clip-rule="evenodd" d="M21.652,3.211c-0.293-0.295-0.77-0.295-1.061,0L9.41,14.34  c-0.293,0.297-0.771,0.297-1.062,0L3.449,9.351C3.304,9.203,3.114,9.13,2.923,9.129C2.73,9.128,2.534,9.201,2.387,9.351  l-2.165,1.946C0.078,11.445,0,11.63,0,11.823c0,0.194,0.078,0.397,0.223,0.544l4.94,5.184c0.292,0.296,0.771,0.776,1.062,1.07  l2.124,2.141c0.292,0.293,0.769,0.293,1.062,0l14.366-14.34c0.293-0.294,0.293-0.777,0-1.071L21.652,3.211z" fill-rule="evenodd"/></svg>';
+               },
+
+               //cross icon
+               buttonCross: function buttonCross(cell, formatterParams, onRendered) {
+                       return '<svg enable-background="new 0 0 24 24" height="14" width="14" viewBox="0 0 24 24" xml:space="preserve" ><path fill="#CE1515" d="M22.245,4.015c0.313,0.313,0.313,0.826,0,1.139l-6.276,6.27c-0.313,0.312-0.313,0.826,0,1.14l6.273,6.272  c0.313,0.313,0.313,0.826,0,1.14l-2.285,2.277c-0.314,0.312-0.828,0.312-1.142,0l-6.271-6.271c-0.313-0.313-0.828-0.313-1.141,0  l-6.276,6.267c-0.313,0.313-0.828,0.313-1.141,0l-2.282-2.28c-0.313-0.313-0.313-0.826,0-1.14l6.278-6.269  c0.313-0.312,0.313-0.826,0-1.14L1.709,5.147c-0.314-0.313-0.314-0.827,0-1.14l2.284-2.278C4.308,1.417,4.821,1.417,5.135,1.73  L11.405,8c0.314,0.314,0.828,0.314,1.141,0.001l6.276-6.267c0.312-0.312,0.826-0.312,1.141,0L22.245,4.015z"/></svg>';
+               },
+
+               //current row number
+               rownum: function rownum(cell, formatterParams, onRendered) {
+                       return this.table.rowManager.activeRows.indexOf(cell.getRow()._getSelf()) + 1;
+               },
+
+               //row handle
+               handle: function handle(cell, formatterParams, onRendered) {
+                       cell.getElement().classList.add("tabulator-row-handle");
+                       return "<div class='tabulator-row-handle-box'><div class='tabulator-row-handle-bar'></div><div class='tabulator-row-handle-bar'></div><div class='tabulator-row-handle-bar'></div></div>";
+               },
+
+               responsiveCollapse: function responsiveCollapse(cell, formatterParams, onRendered) {
+                       var self = this,
+                           open = false,
+                           el = document.createElement("div"),
+                           config = cell.getRow()._row.modules.responsiveLayout;
+
+                       el.classList.add("tabulator-responsive-collapse-toggle");
+                       el.innerHTML = "<span class='tabulator-responsive-collapse-toggle-open'>+</span><span class='tabulator-responsive-collapse-toggle-close'>-</span>";
+
+                       cell.getElement().classList.add("tabulator-row-handle");
+
+                       function toggleList(isOpen) {
+                               var collapseEl = config.element;
+
+                               config.open = isOpen;
+
+                               if (collapseEl) {
+
+                                       if (config.open) {
+                                               el.classList.add("open");
+                                               collapseEl.style.display = '';
+                                       } else {
+                                               el.classList.remove("open");
+                                               collapseEl.style.display = 'none';
+                                       }
+                               }
+                       }
+
+                       el.addEventListener("click", function (e) {
+                               e.stopImmediatePropagation();
+                               toggleList(!config.open);
+                       });
+
+                       toggleList(config.open);
+
+                       return el;
+               },
+
+               rowSelection: function rowSelection(cell) {
+                       var _this54 = this;
+
+                       var checkbox = document.createElement("input");
+
+                       checkbox.type = 'checkbox';
+
+                       if (this.table.modExists("selectRow", true)) {
+
+                               checkbox.addEventListener("click", function (e) {
+                                       e.stopPropagation();
+                               });
+
+                               if (typeof cell.getRow == 'function') {
+                                       var row = cell.getRow();
+
+                                       checkbox.addEventListener("change", function (e) {
+                                               row.toggleSelect();
+                                       });
+
+                                       checkbox.checked = row.isSelected();
+                                       this.table.modules.selectRow.registerRowSelectCheckbox(row, checkbox);
+                               } else {
+                                       checkbox.addEventListener("change", function (e) {
+                                               if (_this54.table.modules.selectRow.selectedRows.length) {
+                                                       _this54.table.deselectRow();
+                                               } else {
+                                                       _this54.table.selectRow();
+                                               }
+                                       });
+
+                                       this.table.modules.selectRow.registerHeaderSelectCheckbox(checkbox);
+                               }
+                       }
+                       return checkbox;
+               }
+       };
+
+       Tabulator.prototype.registerModule("format", Format);
+
+       var FrozenColumns = function FrozenColumns(table) {
+               this.table = table; //hold Tabulator object
+               this.leftColumns = [];
+               this.rightColumns = [];
+               this.leftMargin = 0;
+               this.rightMargin = 0;
+               this.rightPadding = 0;
+               this.initializationMode = "left";
+               this.active = false;
+               this.scrollEndTimer = false;
+       };
+
+       //reset initial state
+       FrozenColumns.prototype.reset = function () {
+               this.initializationMode = "left";
+               this.leftColumns = [];
+               this.rightColumns = [];
+               this.leftMargin = 0;
+               this.rightMargin = 0;
+               this.rightMargin = 0;
+               this.active = false;
+
+               this.table.columnManager.headersElement.style.marginLeft = 0;
+               this.table.columnManager.element.style.paddingRight = 0;
+       };
+
+       //initialize specific column
+       FrozenColumns.prototype.initializeColumn = function (column) {
+               var config = { margin: 0, edge: false };
+
+               if (!column.isGroup) {
+
+                       if (this.frozenCheck(column)) {
+
+                               config.position = this.initializationMode;
+
+                               if (this.initializationMode == "left") {
+                                       this.leftColumns.push(column);
+                               } else {
+                                       this.rightColumns.unshift(column);
+                               }
+
+                               this.active = true;
+
+                               column.modules.frozen = config;
+                       } else {
+                               this.initializationMode = "right";
+                       }
+               }
+       };
+
+       FrozenColumns.prototype.frozenCheck = function (column) {
+               var frozen = false;
+
+               if (column.parent.isGroup && column.definition.frozen) {
+                       console.warn("Frozen Column Error - Parent column group must be frozen, not individual columns or sub column groups");
+               }
+
+               if (column.parent.isGroup) {
+                       return this.frozenCheck(column.parent);
+               } else {
+                       return column.definition.frozen;
+               }
+
+               return frozen;
+       };
+
+       //quick layout to smooth horizontal scrolling
+       FrozenColumns.prototype.scrollHorizontal = function () {
+               var _this55 = this;
+
+               var rows;
+
+               if (this.active) {
+                       clearTimeout(this.scrollEndTimer);
+
+                       //layout all rows after scroll is complete
+                       this.scrollEndTimer = setTimeout(function () {
+                               _this55.layout();
+                       }, 100);
+
+                       rows = this.table.rowManager.getVisibleRows();
+
+                       this.calcMargins();
+
+                       this.layoutColumnPosition();
+
+                       this.layoutCalcRows();
+
+                       rows.forEach(function (row) {
+                               if (row.type === "row") {
+                                       _this55.layoutRow(row);
+                               }
+                       });
+
+                       this.table.rowManager.tableElement.style.marginRight = this.rightMargin;
+               }
+       };
+
+       //calculate margins for rows
+       FrozenColumns.prototype.calcMargins = function () {
+               this.leftMargin = this._calcSpace(this.leftColumns, this.leftColumns.length) + "px";
+               this.table.columnManager.headersElement.style.marginLeft = this.leftMargin;
+
+               this.rightMargin = this._calcSpace(this.rightColumns, this.rightColumns.length) + "px";
+               this.table.columnManager.element.style.paddingRight = this.rightMargin;
+
+               //calculate right frozen columns
+               this.rightPadding = this.table.rowManager.element.clientWidth + this.table.columnManager.scrollLeft;
+       };
+
+       //layout calculation rows
+       FrozenColumns.prototype.layoutCalcRows = function () {
+               if (this.table.modExists("columnCalcs")) {
+                       if (this.table.modules.columnCalcs.topInitialized && this.table.modules.columnCalcs.topRow) {
+                               this.layoutRow(this.table.modules.columnCalcs.topRow);
+                       }
+                       if (this.table.modules.columnCalcs.botInitialized && this.table.modules.columnCalcs.botRow) {
+                               this.layoutRow(this.table.modules.columnCalcs.botRow);
+                       }
+               }
+       };
+
+       //calculate column positions and layout headers
+       FrozenColumns.prototype.layoutColumnPosition = function (allCells) {
+               var _this56 = this;
+
+               var leftParents = [];
+
+               this.leftColumns.forEach(function (column, i) {
+                       column.modules.frozen.margin = _this56._calcSpace(_this56.leftColumns, i) + _this56.table.columnManager.scrollLeft + "px";
+
+                       if (i == _this56.leftColumns.length - 1) {
+                               column.modules.frozen.edge = true;
+                       } else {
+                               column.modules.frozen.edge = false;
+                       }
+
+                       if (column.parent.isGroup) {
+                               var parentEl = _this56.getColGroupParentElement(column);
+                               if (!leftParents.includes(parentEl)) {
+                                       _this56.layoutElement(parentEl, column);
+                                       leftParents.push(parentEl);
+                               }
+
+                               if (column.modules.frozen.edge) {
+                                       parentEl.classList.add("tabulator-frozen-" + column.modules.frozen.position);
+                               }
+                       } else {
+                               _this56.layoutElement(column.getElement(), column);
+                       }
+
+                       if (allCells) {
+                               column.cells.forEach(function (cell) {
+                                       _this56.layoutElement(cell.getElement(), column);
+                               });
+                       }
+               });
+
+               this.rightColumns.forEach(function (column, i) {
+                       column.modules.frozen.margin = _this56.rightPadding - _this56._calcSpace(_this56.rightColumns, i + 1) + "px";
+
+                       if (i == _this56.rightColumns.length - 1) {
+                               column.modules.frozen.edge = true;
+                       } else {
+                               column.modules.frozen.edge = false;
+                       }
+
+                       if (column.parent.isGroup) {
+                               _this56.layoutElement(_this56.getColGroupParentElement(column), column);
+                       } else {
+                               _this56.layoutElement(column.getElement(), column);
+                       }
+
+                       if (allCells) {
+                               column.cells.forEach(function (cell) {
+                                       _this56.layoutElement(cell.getElement(), column);
+                               });
+                       }
+               });
+       };
+
+       FrozenColumns.prototype.getColGroupParentElement = function (column) {
+               return column.parent.isGroup ? this.getColGroupParentElement(column.parent) : column.getElement();
+       };
+
+       //layout columns appropropriatly
+       FrozenColumns.prototype.layout = function () {
+               var self = this,
+                   rightMargin = 0;
+
+               if (self.active) {
+
+                       //calculate row padding
+                       this.calcMargins();
+
+                       // self.table.rowManager.activeRows.forEach(function(row){
+                       //      self.layoutRow(row);
+                       // });
+
+                       // if(self.table.options.dataTree){
+                       self.table.rowManager.getDisplayRows().forEach(function (row) {
+                               if (row.type === "row") {
+                                       self.layoutRow(row);
+                               }
+                       });
+                       // }
+
+                       this.layoutCalcRows();
+
+                       //calculate left columns
+                       this.layoutColumnPosition(true);
+
+                       // if(tableHolder.scrollHeight > tableHolder.clientHeight){
+                       //      rightMargin -= tableHolder.offsetWidth - tableHolder.clientWidth;
+                       // }
+
+                       this.table.rowManager.tableElement.style.marginRight = this.rightMargin;
+               }
+       };
+
+       FrozenColumns.prototype.layoutRow = function (row) {
+               var _this57 = this;
+
+               var rowEl = row.getElement();
+
+               rowEl.style.paddingLeft = this.leftMargin;
+               // rowEl.style.paddingRight = this.rightMargin + "px";
+
+               this.leftColumns.forEach(function (column) {
+                       var cell = row.getCell(column);
+
+                       if (cell) {
+                               _this57.layoutElement(cell.getElement(), column);
+                       }
+               });
+
+               this.rightColumns.forEach(function (column) {
+                       var cell = row.getCell(column);
+
+                       if (cell) {
+                               _this57.layoutElement(cell.getElement(), column);
+                       }
+               });
+       };
+
+       FrozenColumns.prototype.layoutElement = function (element, column) {
+
+               if (column.modules.frozen) {
+                       element.style.position = "absolute";
+                       element.style.left = column.modules.frozen.margin;
+
+                       element.classList.add("tabulator-frozen");
+
+                       if (column.modules.frozen.edge) {
+                               element.classList.add("tabulator-frozen-" + column.modules.frozen.position);
+                       }
+               }
+       };
+
+       FrozenColumns.prototype._calcSpace = function (columns, index) {
+               var width = 0;
+
+               for (var _i8 = 0; _i8 < index; _i8++) {
+                       if (columns[_i8].visible) {
+                               width += columns[_i8].getWidth();
+                       }
+               }
+
+               return width;
+       };
+
+       Tabulator.prototype.registerModule("frozenColumns", FrozenColumns);
+       var FrozenRows = function FrozenRows(table) {
+               this.table = table; //hold Tabulator object
+               this.topElement = document.createElement("div");
+               this.rows = [];
+               this.displayIndex = 0; //index in display pipeline
+       };
+
+       FrozenRows.prototype.initialize = function () {
+               this.rows = [];
+
+               this.topElement.classList.add("tabulator-frozen-rows-holder");
+
+               // this.table.columnManager.element.append(this.topElement);
+               this.table.columnManager.getElement().insertBefore(this.topElement, this.table.columnManager.headersElement.nextSibling);
+       };
+
+       FrozenRows.prototype.setDisplayIndex = function (index) {
+               this.displayIndex = index;
+       };
+
+       FrozenRows.prototype.getDisplayIndex = function () {
+               return this.displayIndex;
+       };
+
+       FrozenRows.prototype.isFrozen = function () {
+               return !!this.rows.length;
+       };
+
+       //filter frozen rows out of display data
+       FrozenRows.prototype.getRows = function (rows) {
+               var self = this,
+                   frozen = [],
+                   output = rows.slice(0);
+
+               this.rows.forEach(function (row) {
+                       var index = output.indexOf(row);
+
+                       if (index > -1) {
+                               output.splice(index, 1);
+                       }
+               });
+
+               return output;
+       };
+
+       FrozenRows.prototype.freezeRow = function (row) {
+               if (!row.modules.frozen) {
+                       row.modules.frozen = true;
+                       this.topElement.appendChild(row.getElement());
+                       row.initialize();
+                       row.normalizeHeight();
+                       this.table.rowManager.adjustTableSize();
+
+                       this.rows.push(row);
+
+                       this.table.rowManager.refreshActiveData("display");
+
+                       this.styleRows();
+               } else {
+                       console.warn("Freeze Error - Row is already frozen");
+               }
+       };
+
+       FrozenRows.prototype.unfreezeRow = function (row) {
+               var index = this.rows.indexOf(row);
+
+               if (row.modules.frozen) {
+
+                       row.modules.frozen = false;
+
+                       var rowEl = row.getElement();
+                       rowEl.parentNode.removeChild(rowEl);
+
+                       this.table.rowManager.adjustTableSize();
+
+                       this.rows.splice(index, 1);
+
+                       this.table.rowManager.refreshActiveData("display");
+
+                       if (this.rows.length) {
+                               this.styleRows();
+                       }
+               } else {
+                       console.warn("Freeze Error - Row is already unfrozen");
+               }
+       };
+
+       FrozenRows.prototype.styleRows = function (row) {
+               var self = this;
+
+               this.rows.forEach(function (row, i) {
+                       self.table.rowManager.styleRow(row, i);
+               });
+       };
+
+       Tabulator.prototype.registerModule("frozenRows", FrozenRows);
+
+       //public group object
+       var GroupComponent = function GroupComponent(group) {
+               this._group = group;
+               this.type = "GroupComponent";
+       };
+
+       GroupComponent.prototype.getKey = function () {
+               return this._group.key;
+       };
+
+       GroupComponent.prototype.getField = function () {
+               return this._group.field;
+       };
+
+       GroupComponent.prototype.getElement = function () {
+               return this._group.element;
+       };
+
+       GroupComponent.prototype.getRows = function () {
+               return this._group.getRows(true);
+       };
+
+       GroupComponent.prototype.getSubGroups = function () {
+               return this._group.getSubGroups(true);
+       };
+
+       GroupComponent.prototype.getParentGroup = function () {
+               return this._group.parent ? this._group.parent.getComponent() : false;
+       };
+
+       GroupComponent.prototype.getVisibility = function () {
+               console.warn("getVisibility function is deprecated, you should now use the isVisible function");
+               return this._group.visible;
+       };
+
+       GroupComponent.prototype.isVisible = function () {
+               return this._group.visible;
+       };
+
+       GroupComponent.prototype.show = function () {
+               this._group.show();
+       };
+
+       GroupComponent.prototype.hide = function () {
+               this._group.hide();
+       };
+
+       GroupComponent.prototype.toggle = function () {
+               this._group.toggleVisibility();
+       };
+
+       GroupComponent.prototype._getSelf = function () {
+               return this._group;
+       };
+
+       GroupComponent.prototype.getTable = function () {
+               return this._group.groupManager.table;
+       };
+
+       //////////////////////////////////////////////////
+       //////////////// Group Functions /////////////////
+       //////////////////////////////////////////////////
+
+       var Group = function Group(groupManager, parent, level, key, field, generator, oldGroup) {
+
+               this.groupManager = groupManager;
+               this.parent = parent;
+               this.key = key;
+               this.level = level;
+               this.field = field;
+               this.hasSubGroups = level < groupManager.groupIDLookups.length - 1;
+               this.addRow = this.hasSubGroups ? this._addRowToGroup : this._addRow;
+               this.type = "group"; //type of element
+               this.old = oldGroup;
+               this.rows = [];
+               this.groups = [];
+               this.groupList = [];
+               this.generator = generator;
+               this.elementContents = false;
+               this.height = 0;
+               this.outerHeight = 0;
+               this.initialized = false;
+               this.calcs = {};
+               this.initialized = false;
+               this.modules = {};
+               this.arrowElement = false;
+
+               this.visible = oldGroup ? oldGroup.visible : typeof groupManager.startOpen[level] !== "undefined" ? groupManager.startOpen[level] : groupManager.startOpen[0];
+
+               this.component = null;
+
+               this.createElements();
+               this.addBindings();
+
+               this.createValueGroups();
+       };
+
+       Group.prototype.wipe = function () {
+               if (this.groupList.length) {
+                       this.groupList.forEach(function (group) {
+                               group.wipe();
+                       });
+               } else {
+                       this.element = false;
+                       this.arrowElement = false;
+                       this.elementContents = false;
+               }
+       };
+
+       Group.prototype.createElements = function () {
+               var arrow = document.createElement("div");
+               arrow.classList.add("tabulator-arrow");
+
+               this.element = document.createElement("div");
+               this.element.classList.add("tabulator-row");
+               this.element.classList.add("tabulator-group");
+               this.element.classList.add("tabulator-group-level-" + this.level);
+               this.element.setAttribute("role", "rowgroup");
+
+               this.arrowElement = document.createElement("div");
+               this.arrowElement.classList.add("tabulator-group-toggle");
+               this.arrowElement.appendChild(arrow);
+
+               //setup movable rows
+               if (this.groupManager.table.options.movableRows !== false && this.groupManager.table.modExists("moveRow")) {
+                       this.groupManager.table.modules.moveRow.initializeGroupHeader(this);
+               }
+       };
+
+       Group.prototype.createValueGroups = function () {
+               var _this58 = this;
+
+               var level = this.level + 1;
+               if (this.groupManager.allowedValues && this.groupManager.allowedValues[level]) {
+                       this.groupManager.allowedValues[level].forEach(function (value) {
+                               _this58._createGroup(value, level);
+                       });
+               }
+       };
+
+       Group.prototype.addBindings = function () {
+               var self = this,
+                   dblTap,
+                   tapHold,
+                   tap,
+                   toggleElement;
+
+               //handle group click events
+               if (self.groupManager.table.options.groupClick) {
+                       self.element.addEventListener("click", function (e) {
+                               self.groupManager.table.options.groupClick.call(self.groupManager.table, e, self.getComponent());
+                       });
+               }
+
+               if (self.groupManager.table.options.groupDblClick) {
+                       self.element.addEventListener("dblclick", function (e) {
+                               self.groupManager.table.options.groupDblClick.call(self.groupManager.table, e, self.getComponent());
+                       });
+               }
+
+               if (self.groupManager.table.options.groupContext) {
+                       self.element.addEventListener("contextmenu", function (e) {
+                               self.groupManager.table.options.groupContext.call(self.groupManager.table, e, self.getComponent());
+                       });
+               }
+
+               if (self.groupManager.table.options.groupContextMenu && self.groupManager.table.modExists("menu")) {
+                       self.groupManager.table.modules.menu.initializeGroup.call(self.groupManager.table.modules.menu, self);
+               }
+
+               if (self.groupManager.table.options.groupTap) {
+
+                       tap = false;
+
+                       self.element.addEventListener("touchstart", function (e) {
+                               tap = true;
+                       }, { passive: true });
+
+                       self.element.addEventListener("touchend", function (e) {
+                               if (tap) {
+                                       self.groupManager.table.options.groupTap(e, self.getComponent());
+                               }
+
+                               tap = false;
+                       });
+               }
+
+               if (self.groupManager.table.options.groupDblTap) {
+
+                       dblTap = null;
+
+                       self.element.addEventListener("touchend", function (e) {
+
+                               if (dblTap) {
+                                       clearTimeout(dblTap);
+                                       dblTap = null;
+
+                                       self.groupManager.table.options.groupDblTap(e, self.getComponent());
+                               } else {
+
+                                       dblTap = setTimeout(function () {
+                                               clearTimeout(dblTap);
+                                               dblTap = null;
+                                       }, 300);
+                               }
+                       });
+               }
+
+               if (self.groupManager.table.options.groupTapHold) {
+
+                       tapHold = null;
+
+                       self.element.addEventListener("touchstart", function (e) {
+                               clearTimeout(tapHold);
+
+                               tapHold = setTimeout(function () {
+                                       clearTimeout(tapHold);
+                                       tapHold = null;
+                                       tap = false;
+                                       self.groupManager.table.options.groupTapHold(e, self.getComponent());
+                               }, 1000);
+                       }, { passive: true });
+
+                       self.element.addEventListener("touchend", function (e) {
+                               clearTimeout(tapHold);
+                               tapHold = null;
+                       });
+               }
+
+               if (self.groupManager.table.options.groupToggleElement) {
+                       toggleElement = self.groupManager.table.options.groupToggleElement == "arrow" ? self.arrowElement : self.element;
+
+                       toggleElement.addEventListener("click", function (e) {
+                               e.stopPropagation();
+                               e.stopImmediatePropagation();
+                               self.toggleVisibility();
+                       });
+               }
+       };
+
+       Group.prototype._createGroup = function (groupID, level) {
+               var groupKey = level + "_" + groupID;
+               var group = new Group(this.groupManager, this, level, groupID, this.groupManager.groupIDLookups[level].field, this.groupManager.headerGenerator[level] || this.groupManager.headerGenerator[0], this.old ? this.old.groups[groupKey] : false);
+
+               this.groups[groupKey] = group;
+               this.groupList.push(group);
+       };
+
+       Group.prototype._addRowToGroup = function (row) {
+
+               var level = this.level + 1;
+
+               if (this.hasSubGroups) {
+                       var groupID = this.groupManager.groupIDLookups[level].func(row.getData()),
+                           groupKey = level + "_" + groupID;
+
+                       if (this.groupManager.allowedValues && this.groupManager.allowedValues[level]) {
+                               if (this.groups[groupKey]) {
+                                       this.groups[groupKey].addRow(row);
+                               }
+                       } else {
+                               if (!this.groups[groupKey]) {
+                                       this._createGroup(groupID, level);
+                               }
+
+                               this.groups[groupKey].addRow(row);
+                       }
+               }
+       };
+
+       Group.prototype._addRow = function (row) {
+               this.rows.push(row);
+               row.modules.group = this;
+       };
+
+       Group.prototype.insertRow = function (row, to, after) {
+               var data = this.conformRowData({});
+
+               row.updateData(data);
+
+               var toIndex = this.rows.indexOf(to);
+
+               if (toIndex > -1) {
+                       if (after) {
+                               this.rows.splice(toIndex + 1, 0, row);
+                       } else {
+                               this.rows.splice(toIndex, 0, row);
+                       }
+               } else {
+                       if (after) {
+                               this.rows.push(row);
+                       } else {
+                               this.rows.unshift(row);
+                       }
+               }
+
+               row.modules.group = this;
+
+               this.generateGroupHeaderContents();
+
+               if (this.groupManager.table.modExists("columnCalcs") && this.groupManager.table.options.columnCalcs != "table") {
+                       this.groupManager.table.modules.columnCalcs.recalcGroup(this);
+               }
+
+               this.groupManager.updateGroupRows(true);
+       };
+
+       Group.prototype.scrollHeader = function (left) {
+               this.arrowElement.style.marginLeft = left;
+
+               this.groupList.forEach(function (child) {
+                       child.scrollHeader(left);
+               });
+       };
+
+       Group.prototype.getRowIndex = function (row) {};
+
+       //update row data to match grouping contraints
+       Group.prototype.conformRowData = function (data) {
+               if (this.field) {
+                       data[this.field] = this.key;
+               } else {
+                       console.warn("Data Conforming Error - Cannot conform row data to match new group as groupBy is a function");
+               }
+
+               if (this.parent) {
+                       data = this.parent.conformRowData(data);
+               }
+
+               return data;
+       };
+
+       Group.prototype.removeRow = function (row) {
+               var index = this.rows.indexOf(row);
+               var el = row.getElement();
+
+               if (index > -1) {
+                       this.rows.splice(index, 1);
+               }
+
+               if (!this.groupManager.table.options.groupValues && !this.rows.length) {
+                       if (this.parent) {
+                               this.parent.removeGroup(this);
+                       } else {
+                               this.groupManager.removeGroup(this);
+                       }
+
+                       this.groupManager.updateGroupRows(true);
+               } else {
+
+                       if (el.parentNode) {
+                               el.parentNode.removeChild(el);
+                       }
+
+                       this.generateGroupHeaderContents();
+
+                       if (this.groupManager.table.modExists("columnCalcs") && this.groupManager.table.options.columnCalcs != "table") {
+                               this.groupManager.table.modules.columnCalcs.recalcGroup(this);
+                       }
+               }
+       };
+
+       Group.prototype.removeGroup = function (group) {
+               var groupKey = group.level + "_" + group.key,
+                   index;
+
+               if (this.groups[groupKey]) {
+                       delete this.groups[groupKey];
+
+                       index = this.groupList.indexOf(group);
+
+                       if (index > -1) {
+                               this.groupList.splice(index, 1);
+                       }
+
+                       if (!this.groupList.length) {
+                               if (this.parent) {
+                                       this.parent.removeGroup(this);
+                               } else {
+                                       this.groupManager.removeGroup(this);
+                               }
+                       }
+               }
+       };
+
+       Group.prototype.getHeadersAndRows = function (noCalc) {
+               var output = [];
+
+               output.push(this);
+
+               this._visSet();
+
+               if (this.visible) {
+                       if (this.groupList.length) {
+                               this.groupList.forEach(function (group) {
+                                       output = output.concat(group.getHeadersAndRows(noCalc));
+                               });
+                       } else {
+                               if (!noCalc && this.groupManager.table.options.columnCalcs != "table" && this.groupManager.table.modExists("columnCalcs") && this.groupManager.table.modules.columnCalcs.hasTopCalcs()) {
+                                       if (this.calcs.top) {
+                                               this.calcs.top.detachElement();
+                                               this.calcs.top.deleteCells();
+                                       }
+
+                                       this.calcs.top = this.groupManager.table.modules.columnCalcs.generateTopRow(this.rows);
+                                       output.push(this.calcs.top);
+                               }
+
+                               output = output.concat(this.rows);
+
+                               if (!noCalc && this.groupManager.table.options.columnCalcs != "table" && this.groupManager.table.modExists("columnCalcs") && this.groupManager.table.modules.columnCalcs.hasBottomCalcs()) {
+                                       if (this.calcs.bottom) {
+                                               this.calcs.bottom.detachElement();
+                                               this.calcs.bottom.deleteCells();
+                                       }
+
+                                       this.calcs.bottom = this.groupManager.table.modules.columnCalcs.generateBottomRow(this.rows);
+                                       output.push(this.calcs.bottom);
+                               }
+                       }
+               } else {
+                       if (!this.groupList.length && this.groupManager.table.options.columnCalcs != "table") {
+
+                               if (this.groupManager.table.modExists("columnCalcs")) {
+
+                                       if (!noCalc && this.groupManager.table.modules.columnCalcs.hasTopCalcs()) {
+                                               if (this.calcs.top) {
+                                                       this.calcs.top.detachElement();
+                                                       this.calcs.top.deleteCells();
+                                               }
+
+                                               if (this.groupManager.table.options.groupClosedShowCalcs) {
+                                                       this.calcs.top = this.groupManager.table.modules.columnCalcs.generateTopRow(this.rows);
+                                                       output.push(this.calcs.top);
+                                               }
+                                       }
+
+                                       if (!noCalc && this.groupManager.table.modules.columnCalcs.hasBottomCalcs()) {
+                                               if (this.calcs.bottom) {
+                                                       this.calcs.bottom.detachElement();
+                                                       this.calcs.bottom.deleteCells();
+                                               }
+
+                                               if (this.groupManager.table.options.groupClosedShowCalcs) {
+                                                       this.calcs.bottom = this.groupManager.table.modules.columnCalcs.generateBottomRow(this.rows);
+                                                       output.push(this.calcs.bottom);
+                                               }
+                                       }
+                               }
+                       }
+               }
+
+               return output;
+       };
+
+       Group.prototype.getData = function (visible, transform) {
+               var self = this,
+                   output = [];
+
+               this._visSet();
+
+               if (!visible || visible && this.visible) {
+                       this.rows.forEach(function (row) {
+                               output.push(row.getData(transform || "data"));
+                       });
+               }
+
+               return output;
+       };
+
+       // Group.prototype.getRows = function(){
+       //      this._visSet();
+
+       //      return this.visible ? this.rows : [];
+       // };
+
+       Group.prototype.getRowCount = function () {
+               var count = 0;
+
+               if (this.groupList.length) {
+                       this.groupList.forEach(function (group) {
+                               count += group.getRowCount();
+                       });
+               } else {
+                       count = this.rows.length;
+               }
+               return count;
+       };
+
+       Group.prototype.toggleVisibility = function () {
+               if (this.visible) {
+                       this.hide();
+               } else {
+                       this.show();
+               }
+       };
+
+       Group.prototype.hide = function () {
+               this.visible = false;
+
+               if (this.groupManager.table.rowManager.getRenderMode() == "classic" && !this.groupManager.table.options.pagination) {
+
+                       this.element.classList.remove("tabulator-group-visible");
+
+                       if (this.groupList.length) {
+                               this.groupList.forEach(function (group) {
+
+                                       var rows = group.getHeadersAndRows();
+
+                                       rows.forEach(function (row) {
+                                               row.detachElement();
+                                       });
+                               });
+                       } else {
+                               this.rows.forEach(function (row) {
+                                       var rowEl = row.getElement();
+                                       rowEl.parentNode.removeChild(rowEl);
+                               });
+                       }
+
+                       this.groupManager.table.rowManager.setDisplayRows(this.groupManager.updateGroupRows(), this.groupManager.getDisplayIndex());
+
+                       this.groupManager.table.rowManager.checkClassicModeGroupHeaderWidth();
+               } else {
+                       this.groupManager.updateGroupRows(true);
+               }
+
+               this.groupManager.table.options.groupVisibilityChanged.call(this.table, this.getComponent(), false);
+       };
+
+       Group.prototype.show = function () {
+               var self = this;
+
+               self.visible = true;
+
+               if (this.groupManager.table.rowManager.getRenderMode() == "classic" && !this.groupManager.table.options.pagination) {
+
+                       this.element.classList.add("tabulator-group-visible");
+
+                       var prev = self.getElement();
+
+                       if (this.groupList.length) {
+                               this.groupList.forEach(function (group) {
+                                       var rows = group.getHeadersAndRows();
+
+                                       rows.forEach(function (row) {
+                                               var rowEl = row.getElement();
+                                               prev.parentNode.insertBefore(rowEl, prev.nextSibling);
+                                               row.initialize();
+                                               prev = rowEl;
+                                       });
+                               });
+                       } else {
+                               self.rows.forEach(function (row) {
+                                       var rowEl = row.getElement();
+                                       prev.parentNode.insertBefore(rowEl, prev.nextSibling);
+                                       row.initialize();
+                                       prev = rowEl;
+                               });
+                       }
+
+                       this.groupManager.table.rowManager.setDisplayRows(this.groupManager.updateGroupRows(), this.groupManager.getDisplayIndex());
+
+                       this.groupManager.table.rowManager.checkClassicModeGroupHeaderWidth();
+               } else {
+                       this.groupManager.updateGroupRows(true);
+               }
+
+               this.groupManager.table.options.groupVisibilityChanged.call(this.table, this.getComponent(), true);
+       };
+
+       Group.prototype._visSet = function () {
+               var data = [];
+
+               if (typeof this.visible == "function") {
+
+                       this.rows.forEach(function (row) {
+                               data.push(row.getData());
+                       });
+
+                       this.visible = this.visible(this.key, this.getRowCount(), data, this.getComponent());
+               }
+       };
+
+       Group.prototype.getRowGroup = function (row) {
+               var match = false;
+               if (this.groupList.length) {
+                       this.groupList.forEach(function (group) {
+                               var result = group.getRowGroup(row);
+
+                               if (result) {
+                                       match = result;
+                               }
+                       });
+               } else {
+                       if (this.rows.find(function (item) {
+                               return item === row;
+                       })) {
+                               match = this;
+                       }
+               }
+
+               return match;
+       };
+
+       Group.prototype.getSubGroups = function (component) {
+               var output = [];
+
+               this.groupList.forEach(function (child) {
+                       output.push(component ? child.getComponent() : child);
+               });
+
+               return output;
+       };
+
+       Group.prototype.getRows = function (compoment) {
+               var output = [];
+
+               this.rows.forEach(function (row) {
+                       output.push(compoment ? row.getComponent() : row);
+               });
+
+               return output;
+       };
+
+       Group.prototype.generateGroupHeaderContents = function () {
+               var data = [];
+
+               this.rows.forEach(function (row) {
+                       data.push(row.getData());
+               });
+
+               this.elementContents = this.generator(this.key, this.getRowCount(), data, this.getComponent());
+
+               while (this.element.firstChild) {
+                       this.element.removeChild(this.element.firstChild);
+               }if (typeof this.elementContents === "string") {
+                       this.element.innerHTML = this.elementContents;
+               } else {
+                       this.element.appendChild(this.elementContents);
+               }
+
+               this.element.insertBefore(this.arrowElement, this.element.firstChild);
+       };
+
+       ////////////// Standard Row Functions //////////////
+
+       Group.prototype.getElement = function () {
+               this.addBindingsd = false;
+
+               this._visSet();
+
+               if (this.visible) {
+                       this.element.classList.add("tabulator-group-visible");
+               } else {
+                       this.element.classList.remove("tabulator-group-visible");
+               }
+
+               for (var i = 0; i < this.element.childNodes.length; ++i) {
+                       this.element.childNodes[i].parentNode.removeChild(this.element.childNodes[i]);
+               }
+
+               this.generateGroupHeaderContents();
+
+               // this.addBindings();
+
+               return this.element;
+       };
+
+       Group.prototype.detachElement = function () {
+               if (this.element && this.element.parentNode) {
+                       this.element.parentNode.removeChild(this.element);
+               }
+       };
+
+       //normalize the height of elements in the row
+       Group.prototype.normalizeHeight = function () {
+               this.setHeight(this.element.clientHeight);
+       };
+
+       Group.prototype.initialize = function (force) {
+               if (!this.initialized || force) {
+                       this.normalizeHeight();
+                       this.initialized = true;
+               }
+       };
+
+       Group.prototype.reinitialize = function () {
+               this.initialized = false;
+               this.height = 0;
+
+               if (Tabulator.prototype.helpers.elVisible(this.element)) {
+                       this.initialize(true);
+               }
+       };
+
+       Group.prototype.setHeight = function (height) {
+               if (this.height != height) {
+                       this.height = height;
+                       this.outerHeight = this.element.offsetHeight;
+               }
+       };
+
+       //return rows outer height
+       Group.prototype.getHeight = function () {
+               return this.outerHeight;
+       };
+
+       Group.prototype.getGroup = function () {
+               return this;
+       };
+
+       Group.prototype.reinitializeHeight = function () {};
+       Group.prototype.calcHeight = function () {};
+       Group.prototype.setCellHeight = function () {};
+       Group.prototype.clearCellHeight = function () {};
+
+       //////////////// Object Generation /////////////////
+       Group.prototype.getComponent = function () {
+               if (!this.component) {
+                       this.component = new GroupComponent(this);
+               }
+
+               return this.component;
+       };
+
+       //////////////////////////////////////////////////
+       ////////////// Group Row Extension ///////////////
+       //////////////////////////////////////////////////
+
+       var GroupRows = function GroupRows(table) {
+
+               this.table = table; //hold Tabulator object
+
+               this.groupIDLookups = false; //enable table grouping and set field to group by
+               this.startOpen = [function () {
+                       return false;
+               }]; //starting state of group
+               this.headerGenerator = [function () {
+                       return "";
+               }];
+               this.groupList = []; //ordered list of groups
+               this.allowedValues = false;
+               this.groups = {}; //hold row groups
+               this.displayIndex = 0; //index in display pipeline
+       };
+
+       //initialize group configuration
+       GroupRows.prototype.initialize = function () {
+               var self = this,
+                   groupBy = self.table.options.groupBy,
+                   startOpen = self.table.options.groupStartOpen,
+                   groupHeader = self.table.options.groupHeader;
+
+               this.allowedValues = self.table.options.groupValues;
+
+               if (Array.isArray(groupBy) && Array.isArray(groupHeader) && groupBy.length > groupHeader.length) {
+                       console.warn("Error creating group headers, groupHeader array is shorter than groupBy array");
+               }
+
+               self.headerGenerator = [function () {
+                       return "";
+               }];
+               this.startOpen = [function () {
+                       return false;
+               }]; //starting state of group
+
+               self.table.modules.localize.bind("groups|item", function (langValue, lang) {
+                       self.headerGenerator[0] = function (value, count, data) {
+                               //header layout function
+                               return (typeof value === "undefined" ? "" : value) + "<span>(" + count + " " + (count === 1 ? langValue : lang.groups.items) + ")</span>";
+                       };
+               });
+
+               this.groupIDLookups = [];
+
+               if (Array.isArray(groupBy) || groupBy) {
+                       if (this.table.modExists("columnCalcs") && this.table.options.columnCalcs != "table" && this.table.options.columnCalcs != "both") {
+                               this.table.modules.columnCalcs.removeCalcs();
+                       }
+               } else {
+                       if (this.table.modExists("columnCalcs") && this.table.options.columnCalcs != "group") {
+
+                               var cols = this.table.columnManager.getRealColumns();
+
+                               cols.forEach(function (col) {
+                                       if (col.definition.topCalc) {
+                                               self.table.modules.columnCalcs.initializeTopRow();
+                                       }
+
+                                       if (col.definition.bottomCalc) {
+                                               self.table.modules.columnCalcs.initializeBottomRow();
+                                       }
+                               });
+                       }
+               }
+
+               if (!Array.isArray(groupBy)) {
+                       groupBy = [groupBy];
+               }
+
+               groupBy.forEach(function (group, i) {
+                       var lookupFunc, column;
+
+                       if (typeof group == "function") {
+                               lookupFunc = group;
+                       } else {
+                               column = self.table.columnManager.getColumnByField(group);
+
+                               if (column) {
+                                       lookupFunc = function lookupFunc(data) {
+                                               return column.getFieldValue(data);
+                                       };
+                               } else {
+                                       lookupFunc = function lookupFunc(data) {
+                                               return data[group];
+                                       };
+                               }
+                       }
+
+                       self.groupIDLookups.push({
+                               field: typeof group === "function" ? false : group,
+                               func: lookupFunc,
+                               values: self.allowedValues ? self.allowedValues[i] : false
+                       });
+               });
+
+               if (startOpen) {
+
+                       if (!Array.isArray(startOpen)) {
+                               startOpen = [startOpen];
+                       }
+
+                       startOpen.forEach(function (level) {
+                               level = typeof level == "function" ? level : function () {
+                                       return true;
+                               };
+                       });
+
+                       self.startOpen = startOpen;
+               }
+
+               if (groupHeader) {
+                       self.headerGenerator = Array.isArray(groupHeader) ? groupHeader : [groupHeader];
+               }
+
+               this.initialized = true;
+       };
+
+       GroupRows.prototype.setDisplayIndex = function (index) {
+               this.displayIndex = index;
+       };
+
+       GroupRows.prototype.getDisplayIndex = function () {
+               return this.displayIndex;
+       };
+
+       //return appropriate rows with group headers
+       GroupRows.prototype.getRows = function (rows) {
+               if (this.groupIDLookups.length) {
+
+                       this.table.options.dataGrouping.call(this.table);
+
+                       this.generateGroups(rows);
+
+                       if (this.table.options.dataGrouped) {
+                               this.table.options.dataGrouped.call(this.table, this.getGroups(true));
+                       }
+
+                       return this.updateGroupRows();
+               } else {
+                       return rows.slice(0);
+               }
+       };
+
+       GroupRows.prototype.getGroups = function (compoment) {
+               var groupComponents = [];
+
+               this.groupList.forEach(function (group) {
+                       groupComponents.push(compoment ? group.getComponent() : group);
+               });
+
+               return groupComponents;
+       };
+
+       GroupRows.prototype.getChildGroups = function (group) {
+               var _this59 = this;
+
+               var groupComponents = [];
+
+               if (!group) {
+                       group = this;
+               }
+
+               group.groupList.forEach(function (child) {
+                       if (child.groupList.length) {
+                               groupComponents = groupComponents.concat(_this59.getChildGroups(child));
+                       } else {
+                               groupComponents.push(child);
+                       }
+               });
+
+               return groupComponents;
+       };
+
+       GroupRows.prototype.wipe = function () {
+               this.groupList.forEach(function (group) {
+                       group.wipe();
+               });
+       };
+
+       GroupRows.prototype.pullGroupListData = function (groupList) {
+               var self = this;
+               var groupListData = [];
+
+               groupList.forEach(function (group) {
+                       var groupHeader = {};
+                       groupHeader.level = 0;
+                       groupHeader.rowCount = 0;
+                       groupHeader.headerContent = "";
+                       var childData = [];
+
+                       if (group.hasSubGroups) {
+                               childData = self.pullGroupListData(group.groupList);
+
+                               groupHeader.level = group.level;
+                               groupHeader.rowCount = childData.length - group.groupList.length; // data length minus number of sub-headers
+                               groupHeader.headerContent = group.generator(group.key, groupHeader.rowCount, group.rows, group);
+
+                               groupListData.push(groupHeader);
+                               groupListData = groupListData.concat(childData);
+                       } else {
+                               groupHeader.level = group.level;
+                               groupHeader.headerContent = group.generator(group.key, group.rows.length, group.rows, group);
+                               groupHeader.rowCount = group.getRows().length;
+
+                               groupListData.push(groupHeader);
+
+                               group.getRows().forEach(function (row) {
+                                       groupListData.push(row.getData("data"));
+                               });
+                       }
+               });
+
+               return groupListData;
+       };
+
+       GroupRows.prototype.getGroupedData = function () {
+
+               return this.pullGroupListData(this.groupList);
+       };
+
+       GroupRows.prototype.getRowGroup = function (row) {
+               var match = false;
+
+               this.groupList.forEach(function (group) {
+                       var result = group.getRowGroup(row);
+
+                       if (result) {
+                               match = result;
+                       }
+               });
+
+               return match;
+       };
+
+       GroupRows.prototype.countGroups = function () {
+               return this.groupList.length;
+       };
+
+       GroupRows.prototype.generateGroups = function (rows) {
+               var self = this,
+                   oldGroups = self.groups;
+
+               self.groups = {};
+               self.groupList = [];
+
+               if (this.allowedValues && this.allowedValues[0]) {
+                       this.allowedValues[0].forEach(function (value) {
+                               self.createGroup(value, 0, oldGroups);
+                       });
+
+                       rows.forEach(function (row) {
+                               self.assignRowToExistingGroup(row, oldGroups);
+                       });
+               } else {
+                       rows.forEach(function (row) {
+                               self.assignRowToGroup(row, oldGroups);
+                       });
+               }
+       };
+
+       GroupRows.prototype.createGroup = function (groupID, level, oldGroups) {
+               var groupKey = level + "_" + groupID,
+                   group;
+
+               oldGroups = oldGroups || [];
+
+               group = new Group(this, false, level, groupID, this.groupIDLookups[0].field, this.headerGenerator[0], oldGroups[groupKey]);
+
+               this.groups[groupKey] = group;
+               this.groupList.push(group);
+       };
+
+       // GroupRows.prototype.assignRowToGroup = function(row, oldGroups){
+       //      var groupID = this.groupIDLookups[0].func(row.getData()),
+       //      groupKey = "0_" + groupID;
+
+       //      if(!this.groups[groupKey]){
+       //              this.createGroup(groupID, 0, oldGroups);
+       //      }
+
+       //      this.groups[groupKey].addRow(row);
+       // };
+
+       GroupRows.prototype.assignRowToExistingGroup = function (row, oldGroups) {
+               var groupID = this.groupIDLookups[0].func(row.getData()),
+                   groupKey = "0_" + groupID;
+
+               if (this.groups[groupKey]) {
+                       this.groups[groupKey].addRow(row);
+               }
+       };
+
+       GroupRows.prototype.assignRowToGroup = function (row, oldGroups) {
+               var groupID = this.groupIDLookups[0].func(row.getData()),
+                   newGroupNeeded = !this.groups["0_" + groupID];
+
+               if (newGroupNeeded) {
+                       this.createGroup(groupID, 0, oldGroups);
+               }
+
+               this.groups["0_" + groupID].addRow(row);
+
+               return !newGroupNeeded;
+       };
+
+       GroupRows.prototype.updateGroupRows = function (force) {
+               var self = this,
+                   output = [],
+                   oldRowCount;
+
+               self.groupList.forEach(function (group) {
+                       output = output.concat(group.getHeadersAndRows());
+               });
+
+               //force update of table display
+               if (force) {
+
+                       var displayIndex = self.table.rowManager.setDisplayRows(output, this.getDisplayIndex());
+
+                       if (displayIndex !== true) {
+                               this.setDisplayIndex(displayIndex);
+                       }
+
+                       self.table.rowManager.refreshActiveData("group", true, true);
+               }
+
+               return output;
+       };
+
+       GroupRows.prototype.scrollHeaders = function (left) {
+               left = left + "px";
+
+               this.groupList.forEach(function (group) {
+                       group.scrollHeader(left);
+               });
+       };
+
+       GroupRows.prototype.removeGroup = function (group) {
+               var groupKey = group.level + "_" + group.key,
+                   index;
+
+               if (this.groups[groupKey]) {
+                       delete this.groups[groupKey];
+
+                       index = this.groupList.indexOf(group);
+
+                       if (index > -1) {
+                               this.groupList.splice(index, 1);
+                       }
+               }
+       };
+
+       Tabulator.prototype.registerModule("groupRows", GroupRows);
+       var History = function History(table) {
+               this.table = table; //hold Tabulator object
+
+               this.history = [];
+               this.index = -1;
+       };
+
+       History.prototype.clear = function () {
+               this.history = [];
+               this.index = -1;
+       };
+
+       History.prototype.action = function (type, component, data) {
+
+               this.history = this.history.slice(0, this.index + 1);
+
+               this.history.push({
+                       type: type,
+                       component: component,
+                       data: data
+               });
+
+               this.index++;
+       };
+
+       History.prototype.getHistoryUndoSize = function () {
+               return this.index + 1;
+       };
+
+       History.prototype.getHistoryRedoSize = function () {
+               return this.history.length - (this.index + 1);
+       };
+
+       History.prototype.undo = function () {
+
+               if (this.index > -1) {
+                       var action = this.history[this.index];
+
+                       this.undoers[action.type].call(this, action);
+
+                       this.index--;
+
+                       this.table.options.historyUndo.call(this.table, action.type, action.component.getComponent(), action.data);
+
+                       return true;
+               } else {
+                       console.warn("History Undo Error - No more history to undo");
+                       return false;
+               }
+       };
+
+       History.prototype.redo = function () {
+               if (this.history.length - 1 > this.index) {
+
+                       this.index++;
+
+                       var action = this.history[this.index];
+
+                       this.redoers[action.type].call(this, action);
+
+                       this.table.options.historyRedo.call(this.table, action.type, action.component.getComponent(), action.data);
+
+                       return true;
+               } else {
+                       console.warn("History Redo Error - No more history to redo");
+                       return false;
+               }
+       };
+
+       History.prototype.undoers = {
+               cellEdit: function cellEdit(action) {
+                       action.component.setValueProcessData(action.data.oldValue);
+               },
+
+               rowAdd: function rowAdd(action) {
+                       action.component.deleteActual();
+               },
+
+               rowDelete: function rowDelete(action) {
+                       var newRow = this.table.rowManager.addRowActual(action.data.data, action.data.pos, action.data.index);
+
+                       if (this.table.options.groupBy && this.table.modExists("groupRows")) {
+                               this.table.modules.groupRows.updateGroupRows(true);
+                       }
+
+                       this._rebindRow(action.component, newRow);
+               },
+
+               rowMove: function rowMove(action) {
+                       this.table.rowManager.moveRowActual(action.component, this.table.rowManager.rows[action.data.posFrom], !action.data.after);
+                       this.table.rowManager.redraw();
+               }
+       };
+
+       History.prototype.redoers = {
+               cellEdit: function cellEdit(action) {
+                       action.component.setValueProcessData(action.data.newValue);
+               },
+
+               rowAdd: function rowAdd(action) {
+                       var newRow = this.table.rowManager.addRowActual(action.data.data, action.data.pos, action.data.index);
+
+                       if (this.table.options.groupBy && this.table.modExists("groupRows")) {
+                               this.table.modules.groupRows.updateGroupRows(true);
+                       }
+
+                       this._rebindRow(action.component, newRow);
+               },
+
+               rowDelete: function rowDelete(action) {
+                       action.component.deleteActual();
+               },
+
+               rowMove: function rowMove(action) {
+                       this.table.rowManager.moveRowActual(action.component, this.table.rowManager.rows[action.data.posTo], action.data.after);
+                       this.table.rowManager.redraw();
+               }
+       };
+
+       //rebind rows to new element after deletion
+       History.prototype._rebindRow = function (oldRow, newRow) {
+               this.history.forEach(function (action) {
+                       if (action.component instanceof Row) {
+                               if (action.component === oldRow) {
+                                       action.component = newRow;
+                               }
+                       } else if (action.component instanceof Cell) {
+                               if (action.component.row === oldRow) {
+                                       var field = action.component.column.getField();
+
+                                       if (field) {
+                                               action.component = newRow.getCell(field);
+                                       }
+                               }
+                       }
+               });
+       };
+
+       Tabulator.prototype.registerModule("history", History);
+       var HtmlTableImport = function HtmlTableImport(table) {
+               this.table = table; //hold Tabulator object
+               this.fieldIndex = [];
+               this.hasIndex = false;
+       };
+
+       HtmlTableImport.prototype.parseTable = function () {
+               var self = this,
+                   element = self.table.element,
+                   options = self.table.options,
+                   columns = options.columns,
+                   headers = element.getElementsByTagName("th"),
+                   rows = element.getElementsByTagName("tbody")[0],
+                   data = [],
+                   newTable;
+
+               self.hasIndex = false;
+
+               self.table.options.htmlImporting.call(this.table);
+
+               rows = rows ? rows.getElementsByTagName("tr") : [];
+
+               //check for tablator inline options
+               self._extractOptions(element, options);
+
+               if (headers.length) {
+                       self._extractHeaders(headers, rows);
+               } else {
+                       self._generateBlankHeaders(headers, rows);
+               }
+
+               //iterate through table rows and build data set
+               for (var index = 0; index < rows.length; index++) {
+                       var row = rows[index],
+                           cells = row.getElementsByTagName("td"),
+                           item = {};
+
+                       //create index if the dont exist in table
+                       if (!self.hasIndex) {
+                               item[options.index] = index;
+                       }
+
+                       for (var i = 0; i < cells.length; i++) {
+                               var cell = cells[i];
+                               if (typeof this.fieldIndex[i] !== "undefined") {
+                                       item[this.fieldIndex[i]] = cell.innerHTML;
+                               }
+                       }
+
+                       //add row data to item
+                       data.push(item);
+               }
+
+               //create new element
+               var newElement = document.createElement("div");
+
+               //transfer attributes to new element
+               var attributes = element.attributes;
+
+               // loop through attributes and apply them on div
+
+               for (var i in attributes) {
+                       if (_typeof(attributes[i]) == "object") {
+                               newElement.setAttribute(attributes[i].name, attributes[i].value);
+                       }
+               }
+
+               // replace table with div element
+               element.parentNode.replaceChild(newElement, element);
+
+               options.data = data;
+
+               self.table.options.htmlImported.call(this.table);
+
+               // // newElement.tabulator(options);
+
+               this.table.element = newElement;
+       };
+
+       //extract tabulator attribute options
+       HtmlTableImport.prototype._extractOptions = function (element, options, defaultOptions) {
+               var attributes = element.attributes;
+               var optionsArr = defaultOptions ? Object.assign([], defaultOptions) : Object.keys(options);
+               var optionsList = {};
+
+               optionsArr.forEach(function (item) {
+                       optionsList[item.toLowerCase()] = item;
+               });
+
+               for (var index in attributes) {
+                       var attrib = attributes[index];
+                       var name;
+
+                       if (attrib && (typeof attrib === 'undefined' ? 'undefined' : _typeof(attrib)) == "object" && attrib.name && attrib.name.indexOf("tabulator-") === 0) {
+                               name = attrib.name.replace("tabulator-", "");
+
+                               if (typeof optionsList[name] !== "undefined") {
+                                       options[optionsList[name]] = this._attribValue(attrib.value);
+                               }
+                       }
+               }
+       };
+
+       //get value of attribute
+       HtmlTableImport.prototype._attribValue = function (value) {
+               if (value === "true") {
+                       return true;
+               }
+
+               if (value === "false") {
+                       return false;
+               }
+
+               return value;
+       };
+
+       //find column if it has already been defined
+       HtmlTableImport.prototype._findCol = function (title) {
+               var match = this.table.options.columns.find(function (column) {
+                       return column.title === title;
+               });
+
+               return match || false;
+       };
+
+       //extract column from headers
+       HtmlTableImport.prototype._extractHeaders = function (headers, rows) {
+               for (var index = 0; index < headers.length; index++) {
+                       var header = headers[index],
+                           exists = false,
+                           col = this._findCol(header.textContent),
+                           width,
+                           attributes;
+
+                       if (col) {
+                               exists = true;
+                       } else {
+                               col = { title: header.textContent.trim() };
+                       }
+
+                       if (!col.field) {
+                               col.field = header.textContent.trim().toLowerCase().replace(" ", "_");
+                       }
+
+                       width = header.getAttribute("width");
+
+                       if (width && !col.width) {
+                               col.width = width;
+                       }
+
+                       //check for tablator inline options
+                       attributes = header.attributes;
+
+                       // //check for tablator inline options
+                       this._extractOptions(header, col, Column.prototype.defaultOptionList);
+
+                       this.fieldIndex[index] = col.field;
+
+                       if (col.field == this.table.options.index) {
+                               this.hasIndex = true;
+                       }
+
+                       if (!exists) {
+                               this.table.options.columns.push(col);
+                       }
+               }
+       };
+
+       //generate blank headers
+       HtmlTableImport.prototype._generateBlankHeaders = function (headers, rows) {
+               for (var index = 0; index < headers.length; index++) {
+                       var header = headers[index],
+                           col = { title: "", field: "col" + index };
+
+                       this.fieldIndex[index] = col.field;
+
+                       var width = header.getAttribute("width");
+
+                       if (width) {
+                               col.width = width;
+                       }
+
+                       this.table.options.columns.push(col);
+               }
+       };
+
+       Tabulator.prototype.registerModule("htmlTableImport", HtmlTableImport);
+       var Keybindings = function Keybindings(table) {
+               this.table = table; //hold Tabulator object
+               this.watchKeys = null;
+               this.pressedKeys = null;
+               this.keyupBinding = false;
+               this.keydownBinding = false;
+       };
+
+       Keybindings.prototype.initialize = function () {
+               var bindings = this.table.options.keybindings,
+                   mergedBindings = {};
+
+               this.watchKeys = {};
+               this.pressedKeys = [];
+
+               if (bindings !== false) {
+
+                       for (var key in this.bindings) {
+                               mergedBindings[key] = this.bindings[key];
+                       }
+
+                       if (Object.keys(bindings).length) {
+
+                               for (var _key in bindings) {
+                                       mergedBindings[_key] = bindings[_key];
+                               }
+                       }
+
+                       this.mapBindings(mergedBindings);
+                       this.bindEvents();
+               }
+       };
+
+       Keybindings.prototype.mapBindings = function (bindings) {
+               var _this60 = this;
+
+               var self = this;
+
+               var _loop2 = function _loop2(key) {
+
+                       if (_this60.actions[key]) {
+
+                               if (bindings[key]) {
+
+                                       if (_typeof(bindings[key]) !== "object") {
+                                               bindings[key] = [bindings[key]];
+                                       }
+
+                                       bindings[key].forEach(function (binding) {
+                                               self.mapBinding(key, binding);
+                                       });
+                               }
+                       } else {
+                               console.warn("Key Binding Error - no such action:", key);
+                       }
+               };
+
+               for (var key in bindings) {
+                       _loop2(key);
+               }
+       };
+
+       Keybindings.prototype.mapBinding = function (action, symbolsList) {
+               var self = this;
+
+               var binding = {
+                       action: this.actions[action],
+                       keys: [],
+                       ctrl: false,
+                       shift: false,
+                       meta: false
+               };
+
+               var symbols = symbolsList.toString().toLowerCase().split(" ").join("").split("+");
+
+               symbols.forEach(function (symbol) {
+                       switch (symbol) {
+                               case "ctrl":
+                                       binding.ctrl = true;
+                                       break;
+
+                               case "shift":
+                                       binding.shift = true;
+                                       break;
+
+                               case "meta":
+                                       binding.meta = true;
+                                       break;
+
+                               default:
+                                       symbol = parseInt(symbol);
+                                       binding.keys.push(symbol);
+
+                                       if (!self.watchKeys[symbol]) {
+                                               self.watchKeys[symbol] = [];
+                                       }
+
+                                       self.watchKeys[symbol].push(binding);
+                       }
+               });
+       };
+
+       Keybindings.prototype.bindEvents = function () {
+               var self = this;
+
+               this.keyupBinding = function (e) {
+                       var code = e.keyCode;
+                       var bindings = self.watchKeys[code];
+
+                       if (bindings) {
+
+                               self.pressedKeys.push(code);
+
+                               bindings.forEach(function (binding) {
+                                       self.checkBinding(e, binding);
+                               });
+                       }
+               };
+
+               this.keydownBinding = function (e) {
+                       var code = e.keyCode;
+                       var bindings = self.watchKeys[code];
+
+                       if (bindings) {
+
+                               var index = self.pressedKeys.indexOf(code);
+
+                               if (index > -1) {
+                                       self.pressedKeys.splice(index, 1);
+                               }
+                       }
+               };
+
+               this.table.element.addEventListener("keydown", this.keyupBinding);
+
+               this.table.element.addEventListener("keyup", this.keydownBinding);
+       };
+
+       Keybindings.prototype.clearBindings = function () {
+               if (this.keyupBinding) {
+                       this.table.element.removeEventListener("keydown", this.keyupBinding);
+               }
+
+               if (this.keydownBinding) {
+                       this.table.element.removeEventListener("keyup", this.keydownBinding);
+               }
+       };
+
+       Keybindings.prototype.checkBinding = function (e, binding) {
+               var self = this,
+                   match = true;
+
+               if (e.ctrlKey == binding.ctrl && e.shiftKey == binding.shift && e.metaKey == binding.meta) {
+                       binding.keys.forEach(function (key) {
+                               var index = self.pressedKeys.indexOf(key);
+
+                               if (index == -1) {
+                                       match = false;
+                               }
+                       });
+
+                       if (match) {
+                               binding.action.call(self, e);
+                       }
+
+                       return true;
+               }
+
+               return false;
+       };
+
+       //default bindings
+       Keybindings.prototype.bindings = {
+               navPrev: "shift + 9",
+               navNext: 9,
+               navUp: 38,
+               navDown: 40,
+               scrollPageUp: 33,
+               scrollPageDown: 34,
+               scrollToStart: 36,
+               scrollToEnd: 35,
+               undo: "ctrl + 90",
+               redo: "ctrl + 89",
+               copyToClipboard: "ctrl + 67"
+       };
+
+       //default actions
+       Keybindings.prototype.actions = {
+               keyBlock: function keyBlock(e) {
+                       e.stopPropagation();
+                       e.preventDefault();
+               },
+               scrollPageUp: function scrollPageUp(e) {
+                       var rowManager = this.table.rowManager,
+                           newPos = rowManager.scrollTop - rowManager.height,
+                           scrollMax = rowManager.element.scrollHeight;
+
+                       e.preventDefault();
+
+                       if (rowManager.displayRowsCount) {
+                               if (newPos >= 0) {
+                                       rowManager.element.scrollTop = newPos;
+                               } else {
+                                       rowManager.scrollToRow(rowManager.getDisplayRows()[0]);
+                               }
+                       }
+
+                       this.table.element.focus();
+               },
+               scrollPageDown: function scrollPageDown(e) {
+                       var rowManager = this.table.rowManager,
+                           newPos = rowManager.scrollTop + rowManager.height,
+                           scrollMax = rowManager.element.scrollHeight;
+
+                       e.preventDefault();
+
+                       if (rowManager.displayRowsCount) {
+                               if (newPos <= scrollMax) {
+                                       rowManager.element.scrollTop = newPos;
+                               } else {
+                                       rowManager.scrollToRow(rowManager.getDisplayRows()[rowManager.displayRowsCount - 1]);
+                               }
+                       }
+
+                       this.table.element.focus();
+               },
+               scrollToStart: function scrollToStart(e) {
+                       var rowManager = this.table.rowManager;
+
+                       e.preventDefault();
+
+                       if (rowManager.displayRowsCount) {
+                               rowManager.scrollToRow(rowManager.getDisplayRows()[0]);
+                       }
+
+                       this.table.element.focus();
+               },
+               scrollToEnd: function scrollToEnd(e) {
+                       var rowManager = this.table.rowManager;
+
+                       e.preventDefault();
+
+                       if (rowManager.displayRowsCount) {
+                               rowManager.scrollToRow(rowManager.getDisplayRows()[rowManager.displayRowsCount - 1]);
+                       }
+
+                       this.table.element.focus();
+               },
+               navPrev: function navPrev(e) {
+                       var cell = false;
+
+                       if (this.table.modExists("edit")) {
+                               cell = this.table.modules.edit.currentCell;
+
+                               if (cell) {
+                                       e.preventDefault();
+                                       cell.nav().prev();
+                               }
+                       }
+               },
+
+               navNext: function navNext(e) {
+                       var cell = false;
+                       var newRow = this.table.options.tabEndNewRow;
+                       var nav;
+
+                       if (this.table.modExists("edit")) {
+                               cell = this.table.modules.edit.currentCell;
+
+                               if (cell) {
+                                       e.preventDefault();
+
+                                       nav = cell.nav();
+
+                                       if (!nav.next()) {
+                                               if (newRow) {
+
+                                                       cell.getElement().firstChild.blur();
+
+                                                       if (newRow === true) {
+                                                               newRow = this.table.addRow({});
+                                                       } else {
+                                                               if (typeof newRow == "function") {
+                                                                       newRow = this.table.addRow(newRow(cell.row.getComponent()));
+                                                               } else {
+                                                                       newRow = this.table.addRow(Object.assign({}, newRow));
+                                                               }
+                                                       }
+
+                                                       newRow.then(function () {
+                                                               setTimeout(function () {
+                                                                       nav.next();
+                                                               });
+                                                       });
+                                               }
+                                       }
+                               }
+                       }
+               },
+
+               navLeft: function navLeft(e) {
+                       var cell = false;
+
+                       if (this.table.modExists("edit")) {
+                               cell = this.table.modules.edit.currentCell;
+
+                               if (cell) {
+                                       e.preventDefault();
+                                       cell.nav().left();
+                               }
+                       }
+               },
+
+               navRight: function navRight(e) {
+                       var cell = false;
+
+                       if (this.table.modExists("edit")) {
+                               cell = this.table.modules.edit.currentCell;
+
+                               if (cell) {
+                                       e.preventDefault();
+                                       cell.nav().right();
+                               }
+                       }
+               },
+
+               navUp: function navUp(e) {
+                       var cell = false;
+
+                       if (this.table.modExists("edit")) {
+                               cell = this.table.modules.edit.currentCell;
+
+                               if (cell) {
+                                       e.preventDefault();
+                                       cell.nav().up();
+                               }
+                       }
+               },
+
+               navDown: function navDown(e) {
+                       var cell = false;
+
+                       if (this.table.modExists("edit")) {
+                               cell = this.table.modules.edit.currentCell;
+
+                               if (cell) {
+                                       e.preventDefault();
+                                       cell.nav().down();
+                               }
+                       }
+               },
+
+               undo: function undo(e) {
+                       var cell = false;
+                       if (this.table.options.history && this.table.modExists("history") && this.table.modExists("edit")) {
+
+                               cell = this.table.modules.edit.currentCell;
+
+                               if (!cell) {
+                                       e.preventDefault();
+                                       this.table.modules.history.undo();
+                               }
+                       }
+               },
+
+               redo: function redo(e) {
+                       var cell = false;
+                       if (this.table.options.history && this.table.modExists("history") && this.table.modExists("edit")) {
+
+                               cell = this.table.modules.edit.currentCell;
+
+                               if (!cell) {
+                                       e.preventDefault();
+                                       this.table.modules.history.redo();
+                               }
+                       }
+               },
+
+               copyToClipboard: function copyToClipboard(e) {
+                       if (!this.table.modules.edit.currentCell) {
+                               if (this.table.modExists("clipboard", true)) {
+                                       this.table.modules.clipboard.copy(false, true);
+                               }
+                       }
+               }
+       };
+
+       Tabulator.prototype.registerModule("keybindings", Keybindings);
+       var Menu = function Menu(table) {
+               this.table = table; //hold Tabulator object
+               this.menuEl = false;
+               this.blurEvent = this.hideMenu.bind(this);
+               this.escEvent = this.escMenu.bind(this);
+               this.nestedMenuBlock = false;
+       };
+
+       Menu.prototype.initializeColumnHeader = function (column) {
+               var _this61 = this;
+
+               var headerMenuEl;
+
+               if (column.definition.headerContextMenu) {
+                       column.getElement().addEventListener("contextmenu", function (e) {
+                               var menu = typeof column.definition.headerContextMenu == "function" ? column.definition.headerContextMenu(column.getComponent()) : column.definition.headerContextMenu;
+
+                               e.preventDefault();
+
+                               _this61.loadMenu(e, column, menu);
+                       });
+               }
+
+               if (column.definition.headerMenu) {
+
+                       headerMenuEl = document.createElement("span");
+                       headerMenuEl.classList.add("tabulator-header-menu-button");
+                       headerMenuEl.innerHTML = "&vellip;";
+
+                       headerMenuEl.addEventListener("click", function (e) {
+                               var menu = typeof column.definition.headerMenu == "function" ? column.definition.headerMenu(column.getComponent()) : column.definition.headerMenu;
+                               e.stopPropagation();
+                               e.preventDefault();
+
+                               _this61.loadMenu(e, column, menu);
+                       });
+
+                       column.titleElement.insertBefore(headerMenuEl, column.titleElement.firstChild);
+               }
+       };
+
+       Menu.prototype.initializeCell = function (cell) {
+               var _this62 = this;
+
+               cell.getElement().addEventListener("contextmenu", function (e) {
+                       var menu = typeof cell.column.definition.contextMenu == "function" ? cell.column.definition.contextMenu(cell.getComponent()) : cell.column.definition.contextMenu;
+
+                       e.stopImmediatePropagation();
+
+                       _this62.loadMenu(e, cell, menu);
+               });
+       };
+
+       Menu.prototype.initializeRow = function (row) {
+               var _this63 = this;
+
+               row.getElement().addEventListener("contextmenu", function (e) {
+                       var menu = typeof _this63.table.options.rowContextMenu == "function" ? _this63.table.options.rowContextMenu(row.getComponent()) : _this63.table.options.rowContextMenu;
+
+                       _this63.loadMenu(e, row, menu);
+               });
+       };
+
+       Menu.prototype.initializeGroup = function (group) {
+               var _this64 = this;
+
+               group.getElement().addEventListener("contextmenu", function (e) {
+                       var menu = typeof _this64.table.options.groupContextMenu == "function" ? _this64.table.options.groupContextMenu(group.getComponent()) : _this64.table.options.groupContextMenu;
+
+                       _this64.loadMenu(e, group, menu);
+               });
+       };
+
+       Menu.prototype.loadMenu = function (e, component, menu) {
+               var _this65 = this;
+
+               var docHeight = Math.max(document.body.offsetHeight, window.innerHeight);
+
+               e.preventDefault();
+
+               //abort if no menu set
+               if (!menu || !menu.length) {
+                       return;
+               }
+
+               if (this.nestedMenuBlock) {
+                       //abort if child menu already open
+                       if (this.isOpen()) {
+                               return;
+                       }
+               } else {
+                       this.nestedMenuBlock = setTimeout(function () {
+                               _this65.nestedMenuBlock = false;
+                       }, 100);
+               }
+
+               this.hideMenu();
+
+               this.menuEl = document.createElement("div");
+               this.menuEl.classList.add("tabulator-menu");
+
+               menu.forEach(function (item) {
+                       var itemEl = document.createElement("div");
+                       var label = item.label;
+                       var disabled = item.disabled;
+
+                       if (item.separator) {
+                               itemEl.classList.add("tabulator-menu-separator");
+                       } else {
+                               itemEl.classList.add("tabulator-menu-item");
+
+                               if (typeof label == "function") {
+                                       label = label(component.getComponent());
+                               }
+
+                               if (label instanceof Node) {
+                                       itemEl.appendChild(label);
+                               } else {
+                                       itemEl.innerHTML = label;
+                               }
+
+                               if (typeof disabled == "function") {
+                                       disabled = disabled(component.getComponent());
+                               }
+
+                               if (disabled) {
+                                       itemEl.classList.add("tabulator-menu-item-disabled");
+                                       itemEl.addEventListener("click", function (e) {
+                                               e.stopPropagation();
+                                       });
+                               } else {
+                                       itemEl.addEventListener("click", function (e) {
+                                               _this65.hideMenu();
+                                               item.action(e, component.getComponent());
+                                       });
+                               }
+                       }
+
+                       _this65.menuEl.appendChild(itemEl);
+               });
+
+               this.menuEl.style.top = e.pageY + "px";
+               this.menuEl.style.left = e.pageX + "px";
+
+               document.body.addEventListener("click", this.blurEvent);
+               this.table.rowManager.element.addEventListener("scroll", this.blurEvent);
+
+               setTimeout(function () {
+                       document.body.addEventListener("contextmenu", _this65.blurEvent);
+               }, 100);
+
+               document.body.addEventListener("keydown", this.escEvent);
+
+               document.body.appendChild(this.menuEl);
+
+               //move menu to start on right edge if it is too close to the edge of the screen
+               if (e.pageX + this.menuEl.offsetWidth >= document.body.offsetWidth) {
+                       this.menuEl.style.left = "";
+                       this.menuEl.style.right = document.body.offsetWidth - e.pageX + "px";
+               }
+
+               //move menu to start on bottom edge if it is too close to the edge of the screen
+               if (e.pageY + this.menuEl.offsetHeight >= docHeight) {
+                       this.menuEl.style.top = "";
+                       this.menuEl.style.bottom = docHeight - e.pageY + "px";
+               }
+       };
+
+       Menu.prototype.isOpen = function () {
+               return !!this.menuEl.parentNode;
+       };
+
+       Menu.prototype.escMenu = function (e) {
+               if (e.keyCode == 27) {
+                       this.hideMenu();
+               }
+       };
+
+       Menu.prototype.hideMenu = function () {
+               if (this.menuEl.parentNode) {
+                       this.menuEl.parentNode.removeChild(this.menuEl);
+               }
+
+               if (this.escEvent) {
+                       document.body.removeEventListener("keydown", this.escEvent);
+               }
+
+               if (this.blurEvent) {
+                       document.body.removeEventListener("click", this.blurEvent);
+                       document.body.removeEventListener("contextmenu", this.blurEvent);
+                       this.table.rowManager.element.removeEventListener("scroll", this.blurEvent);
+               }
+       };
+
+       //default accessors
+       Menu.prototype.menus = {};
+
+       Tabulator.prototype.registerModule("menu", Menu);
+       var MoveColumns = function MoveColumns(table) {
+               this.table = table; //hold Tabulator object
+               this.placeholderElement = this.createPlaceholderElement();
+               this.hoverElement = false; //floating column header element
+               this.checkTimeout = false; //click check timeout holder
+               this.checkPeriod = 250; //period to wait on mousedown to consider this a move and not a click
+               this.moving = false; //currently moving column
+               this.toCol = false; //destination column
+               this.toColAfter = false; //position of moving column relative to the desitnation column
+               this.startX = 0; //starting position within header element
+               this.autoScrollMargin = 40; //auto scroll on edge when within margin
+               this.autoScrollStep = 5; //auto scroll distance in pixels
+               this.autoScrollTimeout = false; //auto scroll timeout
+               this.touchMove = false;
+
+               this.moveHover = this.moveHover.bind(this);
+               this.endMove = this.endMove.bind(this);
+       };
+
+       MoveColumns.prototype.createPlaceholderElement = function () {
+               var el = document.createElement("div");
+
+               el.classList.add("tabulator-col");
+               el.classList.add("tabulator-col-placeholder");
+
+               return el;
+       };
+
+       MoveColumns.prototype.initializeColumn = function (column) {
+               var self = this,
+                   config = {},
+                   colEl;
+
+               if (!column.modules.frozen) {
+
+                       colEl = column.getElement();
+
+                       config.mousemove = function (e) {
+                               if (column.parent === self.moving.parent) {
+                                       if ((self.touchMove ? e.touches[0].pageX : e.pageX) - Tabulator.prototype.helpers.elOffset(colEl).left + self.table.columnManager.element.scrollLeft > column.getWidth() / 2) {
+                                               if (self.toCol !== column || !self.toColAfter) {
+                                                       colEl.parentNode.insertBefore(self.placeholderElement, colEl.nextSibling);
+                                                       self.moveColumn(column, true);
+                                               }
+                                       } else {
+                                               if (self.toCol !== column || self.toColAfter) {
+                                                       colEl.parentNode.insertBefore(self.placeholderElement, colEl);
+                                                       self.moveColumn(column, false);
+                                               }
+                                       }
+                               }
+                       }.bind(self);
+
+                       colEl.addEventListener("mousedown", function (e) {
+                               self.touchMove = false;
+                               if (e.which === 1) {
+                                       self.checkTimeout = setTimeout(function () {
+                                               self.startMove(e, column);
+                                       }, self.checkPeriod);
+                               }
+                       });
+
+                       colEl.addEventListener("mouseup", function (e) {
+                               if (e.which === 1) {
+                                       if (self.checkTimeout) {
+                                               clearTimeout(self.checkTimeout);
+                                       }
+                               }
+                       });
+
+                       self.bindTouchEvents(column);
+               }
+
+               column.modules.moveColumn = config;
+       };
+
+       MoveColumns.prototype.bindTouchEvents = function (column) {
+               var self = this,
+                   colEl = column.getElement(),
+                   startXMove = false,
+                   //shifting center position of the cell
+               dir = false,
+                   currentCol,
+                   nextCol,
+                   prevCol,
+                   nextColWidth,
+                   prevColWidth,
+                   nextColWidthLast,
+                   prevColWidthLast;
+
+               colEl.addEventListener("touchstart", function (e) {
+                       self.checkTimeout = setTimeout(function () {
+                               self.touchMove = true;
+                               currentCol = column;
+                               nextCol = column.nextColumn();
+                               nextColWidth = nextCol ? nextCol.getWidth() / 2 : 0;
+                               prevCol = column.prevColumn();
+                               prevColWidth = prevCol ? prevCol.getWidth() / 2 : 0;
+                               nextColWidthLast = 0;
+                               prevColWidthLast = 0;
+                               startXMove = false;
+
+                               self.startMove(e, column);
+                       }, self.checkPeriod);
+               }, { passive: true });
+
+               colEl.addEventListener("touchmove", function (e) {
+                       var halfCol, diff, moveToCol;
+
+                       if (self.moving) {
+                               self.moveHover(e);
+
+                               if (!startXMove) {
+                                       startXMove = e.touches[0].pageX;
+                               }
+
+                               diff = e.touches[0].pageX - startXMove;
+
+                               if (diff > 0) {
+                                       if (nextCol && diff - nextColWidthLast > nextColWidth) {
+                                               moveToCol = nextCol;
+
+                                               if (moveToCol !== column) {
+                                                       startXMove = e.touches[0].pageX;
+                                                       moveToCol.getElement().parentNode.insertBefore(self.placeholderElement, moveToCol.getElement().nextSibling);
+                                                       self.moveColumn(moveToCol, true);
+                                               }
+                                       }
+                               } else {
+                                       if (prevCol && -diff - prevColWidthLast > prevColWidth) {
+                                               moveToCol = prevCol;
+
+                                               if (moveToCol !== column) {
+                                                       startXMove = e.touches[0].pageX;
+                                                       moveToCol.getElement().parentNode.insertBefore(self.placeholderElement, moveToCol.getElement());
+                                                       self.moveColumn(moveToCol, false);
+                                               }
+                                       }
+                               }
+
+                               if (moveToCol) {
+                                       currentCol = moveToCol;
+                                       nextCol = moveToCol.nextColumn();
+                                       nextColWidthLast = nextColWidth;
+                                       nextColWidth = nextCol ? nextCol.getWidth() / 2 : 0;
+                                       prevCol = moveToCol.prevColumn();
+                                       prevColWidthLast = prevColWidth;
+                                       prevColWidth = prevCol ? prevCol.getWidth() / 2 : 0;
+                               }
+                       }
+               }, { passive: true });
+
+               colEl.addEventListener("touchend", function (e) {
+                       if (self.checkTimeout) {
+                               clearTimeout(self.checkTimeout);
+                       }
+                       if (self.moving) {
+                               self.endMove(e);
+                       }
+               });
+       };
+
+       MoveColumns.prototype.startMove = function (e, column) {
+               var element = column.getElement();
+
+               this.moving = column;
+               this.startX = (this.touchMove ? e.touches[0].pageX : e.pageX) - Tabulator.prototype.helpers.elOffset(element).left;
+
+               this.table.element.classList.add("tabulator-block-select");
+
+               //create placeholder
+               this.placeholderElement.style.width = column.getWidth() + "px";
+               this.placeholderElement.style.height = column.getHeight() + "px";
+
+               element.parentNode.insertBefore(this.placeholderElement, element);
+               element.parentNode.removeChild(element);
+
+               //create hover element
+               this.hoverElement = element.cloneNode(true);
+               this.hoverElement.classList.add("tabulator-moving");
+
+               this.table.columnManager.getElement().appendChild(this.hoverElement);
+
+               this.hoverElement.style.left = "0";
+               this.hoverElement.style.bottom = "0";
+
+               if (!this.touchMove) {
+                       this._bindMouseMove();
+
+                       document.body.addEventListener("mousemove", this.moveHover);
+                       document.body.addEventListener("mouseup", this.endMove);
+               }
+
+               this.moveHover(e);
+       };
+
+       MoveColumns.prototype._bindMouseMove = function () {
+               this.table.columnManager.columnsByIndex.forEach(function (column) {
+                       if (column.modules.moveColumn.mousemove) {
+                               column.getElement().addEventListener("mousemove", column.modules.moveColumn.mousemove);
+                       }
+               });
+       };
+
+       MoveColumns.prototype._unbindMouseMove = function () {
+               this.table.columnManager.columnsByIndex.forEach(function (column) {
+                       if (column.modules.moveColumn.mousemove) {
+                               column.getElement().removeEventListener("mousemove", column.modules.moveColumn.mousemove);
+                       }
+               });
+       };
+
+       MoveColumns.prototype.moveColumn = function (column, after) {
+               var movingCells = this.moving.getCells();
+
+               this.toCol = column;
+               this.toColAfter = after;
+
+               if (after) {
+                       column.getCells().forEach(function (cell, i) {
+                               var cellEl = cell.getElement();
+                               cellEl.parentNode.insertBefore(movingCells[i].getElement(), cellEl.nextSibling);
+                       });
+               } else {
+                       column.getCells().forEach(function (cell, i) {
+                               var cellEl = cell.getElement();
+                               cellEl.parentNode.insertBefore(movingCells[i].getElement(), cellEl);
+                       });
+               }
+       };
+
+       MoveColumns.prototype.endMove = function (e) {
+               if (e.which === 1 || this.touchMove) {
+                       this._unbindMouseMove();
+
+                       this.placeholderElement.parentNode.insertBefore(this.moving.getElement(), this.placeholderElement.nextSibling);
+                       this.placeholderElement.parentNode.removeChild(this.placeholderElement);
+                       this.hoverElement.parentNode.removeChild(this.hoverElement);
+
+                       this.table.element.classList.remove("tabulator-block-select");
+
+                       if (this.toCol) {
+                               this.table.columnManager.moveColumnActual(this.moving, this.toCol, this.toColAfter);
+                       }
+
+                       this.moving = false;
+                       this.toCol = false;
+                       this.toColAfter = false;
+
+                       if (!this.touchMove) {
+                               document.body.removeEventListener("mousemove", this.moveHover);
+                               document.body.removeEventListener("mouseup", this.endMove);
+                       }
+               }
+       };
+
+       MoveColumns.prototype.moveHover = function (e) {
+               var self = this,
+                   columnHolder = self.table.columnManager.getElement(),
+                   scrollLeft = columnHolder.scrollLeft,
+                   xPos = (self.touchMove ? e.touches[0].pageX : e.pageX) - Tabulator.prototype.helpers.elOffset(columnHolder).left + scrollLeft,
+                   scrollPos;
+
+               self.hoverElement.style.left = xPos - self.startX + "px";
+
+               if (xPos - scrollLeft < self.autoScrollMargin) {
+                       if (!self.autoScrollTimeout) {
+                               self.autoScrollTimeout = setTimeout(function () {
+                                       scrollPos = Math.max(0, scrollLeft - 5);
+                                       self.table.rowManager.getElement().scrollLeft = scrollPos;
+                                       self.autoScrollTimeout = false;
+                               }, 1);
+                       }
+               }
+
+               if (scrollLeft + columnHolder.clientWidth - xPos < self.autoScrollMargin) {
+                       if (!self.autoScrollTimeout) {
+                               self.autoScrollTimeout = setTimeout(function () {
+                                       scrollPos = Math.min(columnHolder.clientWidth, scrollLeft + 5);
+                                       self.table.rowManager.getElement().scrollLeft = scrollPos;
+                                       self.autoScrollTimeout = false;
+                               }, 1);
+                       }
+               }
+       };
+
+       Tabulator.prototype.registerModule("moveColumn", MoveColumns);
+
+       var MoveRows = function MoveRows(table) {
+
+               this.table = table; //hold Tabulator object
+               this.placeholderElement = this.createPlaceholderElement();
+               this.hoverElement = false; //floating row header element
+               this.checkTimeout = false; //click check timeout holder
+               this.checkPeriod = 150; //period to wait on mousedown to consider this a move and not a click
+               this.moving = false; //currently moving row
+               this.toRow = false; //destination row
+               this.toRowAfter = false; //position of moving row relative to the desitnation row
+               this.hasHandle = false; //row has handle instead of fully movable row
+               this.startY = 0; //starting Y position within header element
+               this.startX = 0; //starting X position within header element
+
+               this.moveHover = this.moveHover.bind(this);
+               this.endMove = this.endMove.bind(this);
+               this.tableRowDropEvent = false;
+
+               this.touchMove = false;
+
+               this.connection = false;
+               this.connectionSelectorsTables = false;
+               this.connectionSelectorsElements = false;
+               this.connectionElements = [];
+               this.connections = [];
+
+               this.connectedTable = false;
+               this.connectedRow = false;
+       };
+
+       MoveRows.prototype.createPlaceholderElement = function () {
+               var el = document.createElement("div");
+
+               el.classList.add("tabulator-row");
+               el.classList.add("tabulator-row-placeholder");
+
+               return el;
+       };
+
+       MoveRows.prototype.initialize = function (handle) {
+               this.connectionSelectorsTables = this.table.options.movableRowsConnectedTables;
+               this.connectionSelectorsElements = this.table.options.movableRowsConnectedElements;
+
+               this.connection = this.connectionSelectorsTables || this.connectionSelectorsElements;
+       };
+
+       MoveRows.prototype.setHandle = function (handle) {
+               this.hasHandle = handle;
+       };
+
+       MoveRows.prototype.initializeGroupHeader = function (group) {
+               var self = this,
+                   config = {},
+                   rowEl;
+
+               //inter table drag drop
+               config.mouseup = function (e) {
+                       self.tableRowDrop(e, row);
+               }.bind(self);
+
+               //same table drag drop
+               config.mousemove = function (e) {
+                       if (e.pageY - Tabulator.prototype.helpers.elOffset(group.element).top + self.table.rowManager.element.scrollTop > group.getHeight() / 2) {
+                               if (self.toRow !== group || !self.toRowAfter) {
+                                       var rowEl = group.getElement();
+                                       rowEl.parentNode.insertBefore(self.placeholderElement, rowEl.nextSibling);
+                                       self.moveRow(group, true);
+                               }
+                       } else {
+                               if (self.toRow !== group || self.toRowAfter) {
+                                       var rowEl = group.getElement();
+                                       if (rowEl.previousSibling) {
+                                               rowEl.parentNode.insertBefore(self.placeholderElement, rowEl);
+                                               self.moveRow(group, false);
+                                       }
+                               }
+                       }
+               }.bind(self);
+
+               group.modules.moveRow = config;
+       };
+
+       MoveRows.prototype.initializeRow = function (row) {
+               var self = this,
+                   config = {},
+                   rowEl;
+
+               //inter table drag drop
+               config.mouseup = function (e) {
+                       self.tableRowDrop(e, row);
+               }.bind(self);
+
+               //same table drag drop
+               config.mousemove = function (e) {
+                       if (e.pageY - Tabulator.prototype.helpers.elOffset(row.element).top + self.table.rowManager.element.scrollTop > row.getHeight() / 2) {
+                               if (self.toRow !== row || !self.toRowAfter) {
+                                       var rowEl = row.getElement();
+                                       rowEl.parentNode.insertBefore(self.placeholderElement, rowEl.nextSibling);
+                                       self.moveRow(row, true);
+                               }
+                       } else {
+                               if (self.toRow !== row || self.toRowAfter) {
+                                       var rowEl = row.getElement();
+                                       rowEl.parentNode.insertBefore(self.placeholderElement, rowEl);
+                                       self.moveRow(row, false);
+                               }
+                       }
+               }.bind(self);
+
+               if (!this.hasHandle) {
+
+                       rowEl = row.getElement();
+
+                       rowEl.addEventListener("mousedown", function (e) {
+                               if (e.which === 1) {
+                                       self.checkTimeout = setTimeout(function () {
+                                               self.startMove(e, row);
+                                       }, self.checkPeriod);
+                               }
+                       });
+
+                       rowEl.addEventListener("mouseup", function (e) {
+                               if (e.which === 1) {
+                                       if (self.checkTimeout) {
+                                               clearTimeout(self.checkTimeout);
+                                       }
+                               }
+                       });
+
+                       this.bindTouchEvents(row, row.getElement());
+               }
+
+               row.modules.moveRow = config;
+       };
+
+       MoveRows.prototype.initializeCell = function (cell) {
+               var self = this,
+                   cellEl = cell.getElement();
+
+               cellEl.addEventListener("mousedown", function (e) {
+                       if (e.which === 1) {
+                               self.checkTimeout = setTimeout(function () {
+                                       self.startMove(e, cell.row);
+                               }, self.checkPeriod);
+                       }
+               });
+
+               cellEl.addEventListener("mouseup", function (e) {
+                       if (e.which === 1) {
+                               if (self.checkTimeout) {
+                                       clearTimeout(self.checkTimeout);
+                               }
+                       }
+               });
+
+               this.bindTouchEvents(cell.row, cell.getElement());
+       };
+
+       MoveRows.prototype.bindTouchEvents = function (row, element) {
+               var self = this,
+                   startYMove = false,
+                   //shifting center position of the cell
+               dir = false,
+                   currentRow,
+                   nextRow,
+                   prevRow,
+                   nextRowHeight,
+                   prevRowHeight,
+                   nextRowHeightLast,
+                   prevRowHeightLast;
+
+               element.addEventListener("touchstart", function (e) {
+                       self.checkTimeout = setTimeout(function () {
+                               self.touchMove = true;
+                               currentRow = row;
+                               nextRow = row.nextRow();
+                               nextRowHeight = nextRow ? nextRow.getHeight() / 2 : 0;
+                               prevRow = row.prevRow();
+                               prevRowHeight = prevRow ? prevRow.getHeight() / 2 : 0;
+                               nextRowHeightLast = 0;
+                               prevRowHeightLast = 0;
+                               startYMove = false;
+
+                               self.startMove(e, row);
+                       }, self.checkPeriod);
+               }, { passive: true });
+               this.moving, this.toRow, this.toRowAfter;
+               element.addEventListener("touchmove", function (e) {
+
+                       var halfCol, diff, moveToRow;
+
+                       if (self.moving) {
+                               e.preventDefault();
+
+                               self.moveHover(e);
+
+                               if (!startYMove) {
+                                       startYMove = e.touches[0].pageY;
+                               }
+
+                               diff = e.touches[0].pageY - startYMove;
+
+                               if (diff > 0) {
+                                       if (nextRow && diff - nextRowHeightLast > nextRowHeight) {
+                                               moveToRow = nextRow;
+
+                                               if (moveToRow !== row) {
+                                                       startYMove = e.touches[0].pageY;
+                                                       moveToRow.getElement().parentNode.insertBefore(self.placeholderElement, moveToRow.getElement().nextSibling);
+                                                       self.moveRow(moveToRow, true);
+                                               }
+                                       }
+                               } else {
+                                       if (prevRow && -diff - prevRowHeightLast > prevRowHeight) {
+                                               moveToRow = prevRow;
+
+                                               if (moveToRow !== row) {
+                                                       startYMove = e.touches[0].pageY;
+                                                       moveToRow.getElement().parentNode.insertBefore(self.placeholderElement, moveToRow.getElement());
+                                                       self.moveRow(moveToRow, false);
+                                               }
+                                       }
+                               }
+
+                               if (moveToRow) {
+                                       currentRow = moveToRow;
+                                       nextRow = moveToRow.nextRow();
+                                       nextRowHeightLast = nextRowHeight;
+                                       nextRowHeight = nextRow ? nextRow.getHeight() / 2 : 0;
+                                       prevRow = moveToRow.prevRow();
+                                       prevRowHeightLast = prevRowHeight;
+                                       prevRowHeight = prevRow ? prevRow.getHeight() / 2 : 0;
+                               }
+                       }
+               });
+
+               element.addEventListener("touchend", function (e) {
+                       if (self.checkTimeout) {
+                               clearTimeout(self.checkTimeout);
+                       }
+                       if (self.moving) {
+                               self.endMove(e);
+                               self.touchMove = false;
+                       }
+               });
+       };
+
+       MoveRows.prototype._bindMouseMove = function () {
+               var self = this;
+
+               self.table.rowManager.getDisplayRows().forEach(function (row) {
+                       if ((row.type === "row" || row.type === "group") && row.modules.moveRow.mousemove) {
+                               row.getElement().addEventListener("mousemove", row.modules.moveRow.mousemove);
+                       }
+               });
+       };
+
+       MoveRows.prototype._unbindMouseMove = function () {
+               var self = this;
+
+               self.table.rowManager.getDisplayRows().forEach(function (row) {
+                       if ((row.type === "row" || row.type === "group") && row.modules.moveRow.mousemove) {
+                               row.getElement().removeEventListener("mousemove", row.modules.moveRow.mousemove);
+                       }
+               });
+       };
+
+       MoveRows.prototype.startMove = function (e, row) {
+               var element = row.getElement();
+
+               this.setStartPosition(e, row);
+
+               this.moving = row;
+
+               this.table.element.classList.add("tabulator-block-select");
+
+               //create placeholder
+               this.placeholderElement.style.width = row.getWidth() + "px";
+               this.placeholderElement.style.height = row.getHeight() + "px";
+
+               if (!this.connection) {
+                       element.parentNode.insertBefore(this.placeholderElement, element);
+                       element.parentNode.removeChild(element);
+               } else {
+                       this.table.element.classList.add("tabulator-movingrow-sending");
+                       this.connectToTables(row);
+               }
+
+               //create hover element
+               this.hoverElement = element.cloneNode(true);
+               this.hoverElement.classList.add("tabulator-moving");
+
+               if (this.connection) {
+                       document.body.appendChild(this.hoverElement);
+                       this.hoverElement.style.left = "0";
+                       this.hoverElement.style.top = "0";
+                       this.hoverElement.style.width = this.table.element.clientWidth + "px";
+                       this.hoverElement.style.whiteSpace = "nowrap";
+                       this.hoverElement.style.overflow = "hidden";
+                       this.hoverElement.style.pointerEvents = "none";
+               } else {
+                       this.table.rowManager.getTableElement().appendChild(this.hoverElement);
+
+                       this.hoverElement.style.left = "0";
+                       this.hoverElement.style.top = "0";
+
+                       this._bindMouseMove();
+               }
+
+               document.body.addEventListener("mousemove", this.moveHover);
+               document.body.addEventListener("mouseup", this.endMove);
+
+               this.moveHover(e);
+       };
+
+       MoveRows.prototype.setStartPosition = function (e, row) {
+               var pageX = this.touchMove ? e.touches[0].pageX : e.pageX,
+                   pageY = this.touchMove ? e.touches[0].pageY : e.pageY,
+                   element,
+                   position;
+
+               element = row.getElement();
+               if (this.connection) {
+                       position = element.getBoundingClientRect();
+
+                       this.startX = position.left - pageX + window.pageXOffset;
+                       this.startY = position.top - pageY + window.pageYOffset;
+               } else {
+                       this.startY = pageY - element.getBoundingClientRect().top;
+               }
+       };
+
+       MoveRows.prototype.endMove = function (e) {
+               if (!e || e.which === 1 || this.touchMove) {
+                       this._unbindMouseMove();
+
+                       if (!this.connection) {
+                               this.placeholderElement.parentNode.insertBefore(this.moving.getElement(), this.placeholderElement.nextSibling);
+                               this.placeholderElement.parentNode.removeChild(this.placeholderElement);
+                       }
+
+                       this.hoverElement.parentNode.removeChild(this.hoverElement);
+
+                       this.table.element.classList.remove("tabulator-block-select");
+
+                       if (this.toRow) {
+                               this.table.rowManager.moveRow(this.moving, this.toRow, this.toRowAfter);
+                       }
+
+                       this.moving = false;
+                       this.toRow = false;
+                       this.toRowAfter = false;
+
+                       document.body.removeEventListener("mousemove", this.moveHover);
+                       document.body.removeEventListener("mouseup", this.endMove);
+
+                       if (this.connection) {
+                               this.table.element.classList.remove("tabulator-movingrow-sending");
+                               this.disconnectFromTables();
+                       }
+               }
+       };
+
+       MoveRows.prototype.moveRow = function (row, after) {
+               this.toRow = row;
+               this.toRowAfter = after;
+       };
+
+       MoveRows.prototype.moveHover = function (e) {
+               if (this.connection) {
+                       this.moveHoverConnections.call(this, e);
+               } else {
+                       this.moveHoverTable.call(this, e);
+               }
+       };
+
+       MoveRows.prototype.moveHoverTable = function (e) {
+               var rowHolder = this.table.rowManager.getElement(),
+                   scrollTop = rowHolder.scrollTop,
+                   yPos = (this.touchMove ? e.touches[0].pageY : e.pageY) - rowHolder.getBoundingClientRect().top + scrollTop,
+                   scrollPos;
+
+               this.hoverElement.style.top = yPos - this.startY + "px";
+       };
+
+       MoveRows.prototype.moveHoverConnections = function (e) {
+               this.hoverElement.style.left = this.startX + (this.touchMove ? e.touches[0].pageX : e.pageX) + "px";
+               this.hoverElement.style.top = this.startY + (this.touchMove ? e.touches[0].pageY : e.pageY) + "px";
+       };
+
+       MoveRows.prototype.elementRowDrop = function (e, element, row) {
+               if (this.table.options.movableRowsElementDrop) {
+                       this.table.options.movableRowsElementDrop(e, element, row ? row.getComponent() : false);
+               }
+       };
+
+       //establish connection with other tables
+       MoveRows.prototype.connectToTables = function (row) {
+               var _this66 = this;
+
+               var connectionTables;
+
+               if (this.connectionSelectorsTables) {
+                       connectionTables = this.table.modules.comms.getConnections(this.connectionSelectorsTables);
+
+                       this.table.options.movableRowsSendingStart.call(this.table, connectionTables);
+
+                       this.table.modules.comms.send(this.connectionSelectorsTables, "moveRow", "connect", {
+                               row: row
+                       });
+               }
+
+               if (this.connectionSelectorsElements) {
+
+                       this.connectionElements = [];
+
+                       if (!Array.isArray(this.connectionSelectorsElements)) {
+                               this.connectionSelectorsElements = [this.connectionSelectorsElements];
+                       }
+
+                       this.connectionSelectorsElements.forEach(function (query) {
+                               if (typeof query === "string") {
+                                       _this66.connectionElements = _this66.connectionElements.concat(Array.prototype.slice.call(document.querySelectorAll(query)));
+                               } else {
+                                       _this66.connectionElements.push(query);
+                               }
+                       });
+
+                       this.connectionElements.forEach(function (element) {
+                               var dropEvent = function dropEvent(e) {
+                                       _this66.elementRowDrop(e, element, _this66.moving);
+                               };
+
+                               element.addEventListener("mouseup", dropEvent);
+                               element.tabulatorElementDropEvent = dropEvent;
+
+                               element.classList.add("tabulator-movingrow-receiving");
+                       });
+               }
+       };
+
+       //disconnect from other tables
+       MoveRows.prototype.disconnectFromTables = function () {
+               var connectionTables;
+
+               if (this.connectionSelectorsTables) {
+                       connectionTables = this.table.modules.comms.getConnections(this.connectionSelectorsTables);
+
+                       this.table.options.movableRowsSendingStop.call(this.table, connectionTables);
+
+                       this.table.modules.comms.send(this.connectionSelectorsTables, "moveRow", "disconnect");
+               }
+
+               this.connectionElements.forEach(function (element) {
+                       element.classList.remove("tabulator-movingrow-receiving");
+                       element.removeEventListener("mouseup", element.tabulatorElementDropEvent);
+                       delete element.tabulatorElementDropEvent;
+               });
+       };
+
+       //accept incomming connection
+       MoveRows.prototype.connect = function (table, row) {
+               var self = this;
+               if (!this.connectedTable) {
+                       this.connectedTable = table;
+                       this.connectedRow = row;
+
+                       this.table.element.classList.add("tabulator-movingrow-receiving");
+
+                       self.table.rowManager.getDisplayRows().forEach(function (row) {
+                               if (row.type === "row" && row.modules.moveRow && row.modules.moveRow.mouseup) {
+                                       row.getElement().addEventListener("mouseup", row.modules.moveRow.mouseup);
+                               }
+                       });
+
+                       self.tableRowDropEvent = self.tableRowDrop.bind(self);
+
+                       self.table.element.addEventListener("mouseup", self.tableRowDropEvent);
+
+                       this.table.options.movableRowsReceivingStart.call(this.table, row, table);
+
+                       return true;
+               } else {
+                       console.warn("Move Row Error - Table cannot accept connection, already connected to table:", this.connectedTable);
+                       return false;
+               }
+       };
+
+       //close incomming connection
+       MoveRows.prototype.disconnect = function (table) {
+               var self = this;
+               if (table === this.connectedTable) {
+                       this.connectedTable = false;
+                       this.connectedRow = false;
+
+                       this.table.element.classList.remove("tabulator-movingrow-receiving");
+
+                       self.table.rowManager.getDisplayRows().forEach(function (row) {
+                               if (row.type === "row" && row.modules.moveRow && row.modules.moveRow.mouseup) {
+                                       row.getElement().removeEventListener("mouseup", row.modules.moveRow.mouseup);
+                               }
+                       });
+
+                       self.table.element.removeEventListener("mouseup", self.tableRowDropEvent);
+
+                       this.table.options.movableRowsReceivingStop.call(this.table, table);
+               } else {
+                       console.warn("Move Row Error - trying to disconnect from non connected table");
+               }
+       };
+
+       MoveRows.prototype.dropComplete = function (table, row, success) {
+               var sender = false;
+
+               if (success) {
+
+                       switch (_typeof(this.table.options.movableRowsSender)) {
+                               case "string":
+                                       sender = this.senders[this.table.options.movableRowsSender];
+                                       break;
+
+                               case "function":
+                                       sender = this.table.options.movableRowsSender;
+                                       break;
+                       }
+
+                       if (sender) {
+                               sender.call(this, this.moving.getComponent(), row ? row.getComponent() : undefined, table);
+                       } else {
+                               if (this.table.options.movableRowsSender) {
+                                       console.warn("Mover Row Error - no matching sender found:", this.table.options.movableRowsSender);
+                               }
+                       }
+
+                       this.table.options.movableRowsSent.call(this.table, this.moving.getComponent(), row ? row.getComponent() : undefined, table);
+               } else {
+                       this.table.options.movableRowsSentFailed.call(this.table, this.moving.getComponent(), row ? row.getComponent() : undefined, table);
+               }
+
+               this.endMove();
+       };
+
+       MoveRows.prototype.tableRowDrop = function (e, row) {
+               var receiver = false,
+                   success = false;
+
+               console.trace("drop");
+
+               e.stopImmediatePropagation();
+
+               switch (_typeof(this.table.options.movableRowsReceiver)) {
+                       case "string":
+                               receiver = this.receivers[this.table.options.movableRowsReceiver];
+                               break;
+
+                       case "function":
+                               receiver = this.table.options.movableRowsReceiver;
+                               break;
+               }
+
+               if (receiver) {
+                       success = receiver.call(this, this.connectedRow.getComponent(), row ? row.getComponent() : undefined, this.connectedTable);
+               } else {
+                       console.warn("Mover Row Error - no matching receiver found:", this.table.options.movableRowsReceiver);
+               }
+
+               if (success) {
+                       this.table.options.movableRowsReceived.call(this.table, this.connectedRow.getComponent(), row ? row.getComponent() : undefined, this.connectedTable);
+               } else {
+                       this.table.options.movableRowsReceivedFailed.call(this.table, this.connectedRow.getComponent(), row ? row.getComponent() : undefined, this.connectedTable);
+               }
+
+               this.table.modules.comms.send(this.connectedTable, "moveRow", "dropcomplete", {
+                       row: row,
+                       success: success
+               });
+       };
+
+       MoveRows.prototype.receivers = {
+               insert: function insert(fromRow, toRow, fromTable) {
+                       this.table.addRow(fromRow.getData(), undefined, toRow);
+                       return true;
+               },
+
+               add: function add(fromRow, toRow, fromTable) {
+                       this.table.addRow(fromRow.getData());
+                       return true;
+               },
+
+               update: function update(fromRow, toRow, fromTable) {
+                       if (toRow) {
+                               toRow.update(fromRow.getData());
+                               return true;
+                       }
+
+                       return false;
+               },
+
+               replace: function replace(fromRow, toRow, fromTable) {
+                       if (toRow) {
+                               this.table.addRow(fromRow.getData(), undefined, toRow);
+                               toRow.delete();
+                               return true;
+                       }
+
+                       return false;
+               }
+       };
+
+       MoveRows.prototype.senders = {
+               delete: function _delete(fromRow, toRow, toTable) {
+                       fromRow.delete();
+               }
+       };
+
+       MoveRows.prototype.commsReceived = function (table, action, data) {
+               switch (action) {
+                       case "connect":
+                               return this.connect(table, data.row);
+                               break;
+
+                       case "disconnect":
+                               return this.disconnect(table);
+                               break;
+
+                       case "dropcomplete":
+                               return this.dropComplete(table, data.row, data.success);
+                               break;
+               }
+       };
+
+       Tabulator.prototype.registerModule("moveRow", MoveRows);
+       var Mutator = function Mutator(table) {
+               this.table = table; //hold Tabulator object
+               this.allowedTypes = ["", "data", "edit", "clipboard"]; //list of muatation types
+               this.enabled = true;
+       };
+
+       //initialize column mutator
+       Mutator.prototype.initializeColumn = function (column) {
+               var self = this,
+                   match = false,
+                   config = {};
+
+               this.allowedTypes.forEach(function (type) {
+                       var key = "mutator" + (type.charAt(0).toUpperCase() + type.slice(1)),
+                           mutator;
+
+                       if (column.definition[key]) {
+                               mutator = self.lookupMutator(column.definition[key]);
+
+                               if (mutator) {
+                                       match = true;
+
+                                       config[key] = {
+                                               mutator: mutator,
+                                               params: column.definition[key + "Params"] || {}
+                                       };
+                               }
+                       }
+               });
+
+               if (match) {
+                       column.modules.mutate = config;
+               }
+       };
+
+       Mutator.prototype.lookupMutator = function (value) {
+               var mutator = false;
+
+               //set column mutator
+               switch (typeof value === 'undefined' ? 'undefined' : _typeof(value)) {
+                       case "string":
+                               if (this.mutators[value]) {
+                                       mutator = this.mutators[value];
+                               } else {
+                                       console.warn("Mutator Error - No such mutator found, ignoring: ", value);
+                               }
+                               break;
+
+                       case "function":
+                               mutator = value;
+                               break;
+               }
+
+               return mutator;
+       };
+
+       //apply mutator to row
+       Mutator.prototype.transformRow = function (data, type, updatedData) {
+               var self = this,
+                   key = "mutator" + (type.charAt(0).toUpperCase() + type.slice(1)),
+                   value;
+
+               if (this.enabled) {
+
+                       self.table.columnManager.traverse(function (column) {
+                               var mutator, params, component;
+
+                               if (column.modules.mutate) {
+                                       mutator = column.modules.mutate[key] || column.modules.mutate.mutator || false;
+
+                                       if (mutator) {
+                                               value = column.getFieldValue(typeof updatedData !== "undefined" ? updatedData : data);
+
+                                               if (type == "data" || typeof value !== "undefined") {
+                                                       component = column.getComponent();
+                                                       params = typeof mutator.params === "function" ? mutator.params(value, data, type, component) : mutator.params;
+                                                       column.setFieldValue(data, mutator.mutator(value, data, type, params, component));
+                                               }
+                                       }
+                               }
+                       });
+               }
+
+               return data;
+       };
+
+       //apply mutator to new cell value
+       Mutator.prototype.transformCell = function (cell, value) {
+               var mutator = cell.column.modules.mutate.mutatorEdit || cell.column.modules.mutate.mutator || false,
+                   tempData = {};
+
+               if (mutator) {
+                       tempData = Object.assign(tempData, cell.row.getData());
+                       cell.column.setFieldValue(tempData, value);
+                       return mutator.mutator(value, tempData, "edit", mutator.params, cell.getComponent());
+               } else {
+                       return value;
+               }
+       };
+
+       Mutator.prototype.enable = function () {
+               this.enabled = true;
+       };
+
+       Mutator.prototype.disable = function () {
+               this.enabled = false;
+       };
+
+       //default mutators
+       Mutator.prototype.mutators = {};
+
+       Tabulator.prototype.registerModule("mutator", Mutator);
+       var Page = function Page(table) {
+
+               this.table = table; //hold Tabulator object
+
+               this.mode = "local";
+               this.progressiveLoad = false;
+
+               this.size = 0;
+               this.page = 1;
+               this.count = 5;
+               this.max = 1;
+
+               this.displayIndex = 0; //index in display pipeline
+
+               this.initialLoad = true;
+
+               this.pageSizes = [];
+
+               this.dataReceivedNames = {};
+               this.dataSentNames = {};
+
+               this.createElements();
+       };
+
+       Page.prototype.createElements = function () {
+
+               var button;
+
+               this.element = document.createElement("span");
+               this.element.classList.add("tabulator-paginator");
+
+               this.pagesElement = document.createElement("span");
+               this.pagesElement.classList.add("tabulator-pages");
+
+               button = document.createElement("button");
+               button.classList.add("tabulator-page");
+               button.setAttribute("type", "button");
+               button.setAttribute("role", "button");
+               button.setAttribute("aria-label", "");
+               button.setAttribute("title", "");
+
+               this.firstBut = button.cloneNode(true);
+               this.firstBut.setAttribute("data-page", "first");
+
+               this.prevBut = button.cloneNode(true);
+               this.prevBut.setAttribute("data-page", "prev");
+
+               this.nextBut = button.cloneNode(true);
+               this.nextBut.setAttribute("data-page", "next");
+
+               this.lastBut = button.cloneNode(true);
+               this.lastBut.setAttribute("data-page", "last");
+
+               if (this.table.options.paginationSizeSelector) {
+                       this.pageSizeSelect = document.createElement("select");
+                       this.pageSizeSelect.classList.add("tabulator-page-size");
+               }
+       };
+
+       Page.prototype.generatePageSizeSelectList = function () {
+               var _this67 = this;
+
+               var pageSizes = [];
+
+               if (this.pageSizeSelect) {
+
+                       if (Array.isArray(this.table.options.paginationSizeSelector)) {
+                               pageSizes = this.table.options.paginationSizeSelector;
+                               this.pageSizes = pageSizes;
+
+                               if (this.pageSizes.indexOf(this.size) == -1) {
+                                       pageSizes.unshift(this.size);
+                               }
+                       } else {
+
+                               if (this.pageSizes.indexOf(this.size) == -1) {
+                                       pageSizes = [];
+
+                                       for (var _i9 = 1; _i9 < 5; _i9++) {
+                                               pageSizes.push(this.size * _i9);
+                                       }
+
+                                       this.pageSizes = pageSizes;
+                               } else {
+                                       pageSizes = this.pageSizes;
+                               }
+                       }
+
+                       while (this.pageSizeSelect.firstChild) {
+                               this.pageSizeSelect.removeChild(this.pageSizeSelect.firstChild);
+                       }pageSizes.forEach(function (item) {
+                               var itemEl = document.createElement("option");
+                               itemEl.value = item;
+
+                               if (item === true) {
+                                       _this67.table.modules.localize.bind("pagination|all", function (value) {
+                                               itemEl.innerHTML = value;
+                                       });
+                               } else {
+                                       itemEl.innerHTML = item;
+                               }
+
+                               _this67.pageSizeSelect.appendChild(itemEl);
+                       });
+
+                       this.pageSizeSelect.value = this.size;
+               }
+       };
+
+       //setup pageination
+       Page.prototype.initialize = function (hidden) {
+               var self = this,
+                   pageSelectLabel,
+                   testElRow,
+                   testElCell;
+
+               //update param names
+               this.dataSentNames = Object.assign({}, this.paginationDataSentNames);
+               this.dataSentNames = Object.assign(this.dataSentNames, this.table.options.paginationDataSent);
+
+               this.dataReceivedNames = Object.assign({}, this.paginationDataReceivedNames);
+               this.dataReceivedNames = Object.assign(this.dataReceivedNames, this.table.options.paginationDataReceived);
+
+               //build pagination element
+
+               //bind localizations
+               self.table.modules.localize.bind("pagination|first", function (value) {
+                       self.firstBut.innerHTML = value;
+               });
+
+               self.table.modules.localize.bind("pagination|first_title", function (value) {
+                       self.firstBut.setAttribute("aria-label", value);
+                       self.firstBut.setAttribute("title", value);
+               });
+
+               self.table.modules.localize.bind("pagination|prev", function (value) {
+                       self.prevBut.innerHTML = value;
+               });
+
+               self.table.modules.localize.bind("pagination|prev_title", function (value) {
+                       self.prevBut.setAttribute("aria-label", value);
+                       self.prevBut.setAttribute("title", value);
+               });
+
+               self.table.modules.localize.bind("pagination|next", function (value) {
+                       self.nextBut.innerHTML = value;
+               });
+
+               self.table.modules.localize.bind("pagination|next_title", function (value) {
+                       self.nextBut.setAttribute("aria-label", value);
+                       self.nextBut.setAttribute("title", value);
+               });
+
+               self.table.modules.localize.bind("pagination|last", function (value) {
+                       self.lastBut.innerHTML = value;
+               });
+
+               self.table.modules.localize.bind("pagination|last_title", function (value) {
+                       self.lastBut.setAttribute("aria-label", value);
+                       self.lastBut.setAttribute("title", value);
+               });
+
+               //click bindings
+               self.firstBut.addEventListener("click", function () {
+                       self.setPage(1);
+               });
+
+               self.prevBut.addEventListener("click", function () {
+                       self.previousPage();
+               });
+
+               self.nextBut.addEventListener("click", function () {
+                       self.nextPage().then(function () {}).catch(function () {});
+               });
+
+               self.lastBut.addEventListener("click", function () {
+                       self.setPage(self.max);
+               });
+
+               if (self.table.options.paginationElement) {
+                       self.element = self.table.options.paginationElement;
+               }
+
+               if (this.pageSizeSelect) {
+                       pageSelectLabel = document.createElement("label");
+
+                       self.table.modules.localize.bind("pagination|page_size", function (value) {
+                               self.pageSizeSelect.setAttribute("aria-label", value);
+                               self.pageSizeSelect.setAttribute("title", value);
+                               pageSelectLabel.innerHTML = value;
+                       });
+
+                       self.element.appendChild(pageSelectLabel);
+                       self.element.appendChild(self.pageSizeSelect);
+
+                       self.pageSizeSelect.addEventListener("change", function (e) {
+                               self.setPageSize(self.pageSizeSelect.value == "true" ? true : self.pageSizeSelect.value);
+                               self.setPage(1).then(function () {}).catch(function () {});
+                       });
+               }
+
+               //append to DOM
+               self.element.appendChild(self.firstBut);
+               self.element.appendChild(self.prevBut);
+               self.element.appendChild(self.pagesElement);
+               self.element.appendChild(self.nextBut);
+               self.element.appendChild(self.lastBut);
+
+               if (!self.table.options.paginationElement && !hidden) {
+                       self.table.footerManager.append(self.element, self);
+               }
+
+               //set default values
+               self.mode = self.table.options.pagination;
+
+               if (self.table.options.paginationSize) {
+                       self.size = self.table.options.paginationSize;
+               } else {
+                       testElRow = document.createElement("div");
+                       testElRow.classList.add("tabulator-row");
+                       testElRow.style.visibility = hidden;
+
+                       testElCell = document.createElement("div");
+                       testElCell.classList.add("tabulator-cell");
+                       testElCell.innerHTML = "Page Row Test";
+
+                       testElRow.appendChild(testElCell);
+
+                       self.table.rowManager.getTableElement().appendChild(testElRow);
+
+                       self.size = Math.floor(self.table.rowManager.getElement().clientHeight / testElRow.offsetHeight);
+
+                       self.table.rowManager.getTableElement().removeChild(testElRow);
+               }
+
+               // self.page = self.table.options.paginationInitialPage || 1;
+               self.count = self.table.options.paginationButtonCount;
+
+               self.generatePageSizeSelectList();
+       };
+
+       Page.prototype.initializeProgressive = function (mode) {
+               this.initialize(true);
+               this.mode = "progressive_" + mode;
+               this.progressiveLoad = true;
+       };
+
+       Page.prototype.setDisplayIndex = function (index) {
+               this.displayIndex = index;
+       };
+
+       Page.prototype.getDisplayIndex = function () {
+               return this.displayIndex;
+       };
+
+       //calculate maximum page from number of rows
+       Page.prototype.setMaxRows = function (rowCount) {
+               if (!rowCount) {
+                       this.max = 1;
+               } else {
+                       this.max = this.size === true ? 1 : Math.ceil(rowCount / this.size);
+               }
+
+               if (this.page > this.max) {
+                       this.page = this.max;
+               }
+       };
+
+       //reset to first page without triggering action
+       Page.prototype.reset = function (force, columnsChanged) {
+               if (this.mode == "local" || force) {
+                       this.page = 1;
+               }
+
+               if (columnsChanged) {
+                       this.initialLoad = true;
+               }
+
+               return true;
+       };
+
+       //set the maxmum page
+       Page.prototype.setMaxPage = function (max) {
+
+               max = parseInt(max);
+
+               this.max = max || 1;
+
+               if (this.page > this.max) {
+                       this.page = this.max;
+                       this.trigger();
+               }
+       };
+
+       //set current page number
+       Page.prototype.setPage = function (page) {
+               var _this68 = this;
+
+               var self = this;
+
+               switch (page) {
+                       case "first":
+                               return this.setPage(1);
+                               break;
+
+                       case "prev":
+                               return this.previousPage();
+                               break;
+
+                       case "next":
+                               return this.nextPage();
+                               break;
+
+                       case "last":
+                               return this.setPage(this.max);
+                               break;
+               }
+
+               return new Promise(function (resolve, reject) {
+
+                       page = parseInt(page);
+
+                       if (page > 0 && page <= _this68.max) {
+                               _this68.page = page;
+                               _this68.trigger().then(function () {
+                                       resolve();
+                               }).catch(function () {
+                                       reject();
+                               });
+
+                               if (self.table.options.persistence && self.table.modExists("persistence", true) && self.table.modules.persistence.config.page) {
+                                       self.table.modules.persistence.save("page");
+                               }
+                       } else {
+                               console.warn("Pagination Error - Requested page is out of range of 1 - " + _this68.max + ":", page);
+                               reject();
+                       }
+               });
+       };
+
+       Page.prototype.setPageToRow = function (row) {
+               var _this69 = this;
+
+               return new Promise(function (resolve, reject) {
+
+                       var rows = _this69.table.rowManager.getDisplayRows(_this69.displayIndex - 1);
+                       var index = rows.indexOf(row);
+
+                       if (index > -1) {
+                               var page = _this69.size === true ? 1 : Math.ceil((index + 1) / _this69.size);
+
+                               _this69.setPage(page).then(function () {
+                                       resolve();
+                               }).catch(function () {
+                                       reject();
+                               });
+                       } else {
+                               console.warn("Pagination Error - Requested row is not visible");
+                               reject();
+                       }
+               });
+       };
+
+       Page.prototype.setPageSize = function (size) {
+               if (size !== true) {
+                       size = parseInt(size);
+               }
+
+               if (size > 0) {
+                       this.size = size;
+               }
+
+               if (this.pageSizeSelect) {
+                       // this.pageSizeSelect.value = size;
+                       this.generatePageSizeSelectList();
+               }
+
+               if (this.table.options.persistence && this.table.modExists("persistence", true) && this.table.modules.persistence.config.page) {
+                       this.table.modules.persistence.save("page");
+               }
+       };
+
+       //setup the pagination buttons
+       Page.prototype._setPageButtons = function () {
+               var self = this;
+
+               var leftSize = Math.floor((this.count - 1) / 2);
+               var rightSize = Math.ceil((this.count - 1) / 2);
+               var min = this.max - this.page + leftSize + 1 < this.count ? this.max - this.count + 1 : Math.max(this.page - leftSize, 1);
+               var max = this.page <= rightSize ? Math.min(this.count, this.max) : Math.min(this.page + rightSize, this.max);
+
+               while (self.pagesElement.firstChild) {
+                       self.pagesElement.removeChild(self.pagesElement.firstChild);
+               }if (self.page == 1) {
+                       self.firstBut.disabled = true;
+                       self.prevBut.disabled = true;
+               } else {
+                       self.firstBut.disabled = false;
+                       self.prevBut.disabled = false;
+               }
+
+               if (self.page == self.max) {
+                       self.lastBut.disabled = true;
+                       self.nextBut.disabled = true;
+               } else {
+                       self.lastBut.disabled = false;
+                       self.nextBut.disabled = false;
+               }
+
+               for (var _i10 = min; _i10 <= max; _i10++) {
+                       if (_i10 > 0 && _i10 <= self.max) {
+                               self.pagesElement.appendChild(self._generatePageButton(_i10));
+                       }
+               }
+
+               this.footerRedraw();
+       };
+
+       Page.prototype._generatePageButton = function (page) {
+               var self = this,
+                   button = document.createElement("button");
+
+               button.classList.add("tabulator-page");
+               if (page == self.page) {
+                       button.classList.add("active");
+               }
+
+               button.setAttribute("type", "button");
+               button.setAttribute("role", "button");
+
+               self.table.modules.localize.bind("pagination|page_title", function (value) {
+                       button.setAttribute("aria-label", value + " " + page);
+                       button.setAttribute("title", value + " " + page);
+               });
+
+               button.setAttribute("data-page", page);
+               button.textContent = page;
+
+               button.addEventListener("click", function (e) {
+                       self.setPage(page);
+               });
+
+               return button;
+       };
+
+       //previous page
+       Page.prototype.previousPage = function () {
+               var _this70 = this;
+
+               return new Promise(function (resolve, reject) {
+                       if (_this70.page > 1) {
+                               _this70.page--;
+                               _this70.trigger().then(function () {
+                                       resolve();
+                               }).catch(function () {
+                                       reject();
+                               });
+
+                               if (_this70.table.options.persistence && _this70.table.modExists("persistence", true) && _this70.table.modules.persistence.config.page) {
+                                       _this70.table.modules.persistence.save("page");
+                               }
+                       } else {
+                               console.warn("Pagination Error - Previous page would be less than page 1:", 0);
+                               reject();
+                       }
+               });
+       };
+
+       //next page
+       Page.prototype.nextPage = function () {
+               var _this71 = this;
+
+               return new Promise(function (resolve, reject) {
+                       if (_this71.page < _this71.max) {
+                               _this71.page++;
+                               _this71.trigger().then(function () {
+                                       resolve();
+                               }).catch(function () {
+                                       reject();
+                               });
+
+                               if (_this71.table.options.persistence && _this71.table.modExists("persistence", true) && _this71.table.modules.persistence.config.page) {
+                                       _this71.table.modules.persistence.save("page");
+                               }
+                       } else {
+                               if (!_this71.progressiveLoad) {
+                                       console.warn("Pagination Error - Next page would be greater than maximum page of " + _this71.max + ":", _this71.max + 1);
+                               }
+                               reject();
+                       }
+               });
+       };
+
+       //return current page number
+       Page.prototype.getPage = function () {
+               return this.page;
+       };
+
+       //return max page number
+       Page.prototype.getPageMax = function () {
+               return this.max;
+       };
+
+       Page.prototype.getPageSize = function (size) {
+               return this.size;
+       };
+
+       Page.prototype.getMode = function () {
+               return this.mode;
+       };
+
+       //return appropriate rows for current page
+       Page.prototype.getRows = function (data) {
+               var output, start, end;
+
+               if (this.mode == "local") {
+                       output = [];
+
+                       if (this.size === true) {
+                               start = 0;
+                               end = data.length - 1;
+                       } else {
+                               start = this.size * (this.page - 1);
+                               end = start + parseInt(this.size);
+                       }
+
+                       this._setPageButtons();
+
+                       for (var _i11 = start; _i11 < end; _i11++) {
+                               if (data[_i11]) {
+                                       output.push(data[_i11]);
+                               }
+                       }
+
+                       return output;
+               } else {
+
+                       this._setPageButtons();
+
+                       return data.slice(0);
+               }
+       };
+
+       Page.prototype.trigger = function () {
+               var _this72 = this;
+
+               var left;
+
+               return new Promise(function (resolve, reject) {
+
+                       switch (_this72.mode) {
+                               case "local":
+                                       left = _this72.table.rowManager.scrollLeft;
+
+                                       _this72.table.rowManager.refreshActiveData("page");
+                                       _this72.table.rowManager.scrollHorizontal(left);
+
+                                       _this72.table.options.pageLoaded.call(_this72.table, _this72.getPage());
+                                       resolve();
+                                       break;
+
+                               case "remote":
+                               case "progressive_load":
+                               case "progressive_scroll":
+                                       _this72.table.modules.ajax.blockActiveRequest();
+                                       _this72._getRemotePage().then(function () {
+                                               resolve();
+                                       }).catch(function () {
+                                               reject();
+                                       });
+                                       break;
+
+                               default:
+                                       console.warn("Pagination Error - no such pagination mode:", _this72.mode);
+                                       reject();
+                       }
+               });
+       };
+
+       Page.prototype._getRemotePage = function () {
+               var _this73 = this;
+
+               var self = this,
+                   oldParams,
+                   pageParams;
+
+               return new Promise(function (resolve, reject) {
+
+                       if (!self.table.modExists("ajax", true)) {
+                               reject();
+                       }
+
+                       //record old params and restore after request has been made
+                       oldParams = Tabulator.prototype.helpers.deepClone(self.table.modules.ajax.getParams() || {});
+                       pageParams = self.table.modules.ajax.getParams();
+
+                       //configure request params
+                       pageParams[_this73.dataSentNames.page] = self.page;
+
+                       //set page size if defined
+                       if (_this73.size) {
+                               pageParams[_this73.dataSentNames.size] = _this73.size;
+                       }
+
+                       //set sort data if defined
+                       if (_this73.table.options.ajaxSorting && _this73.table.modExists("sort")) {
+                               var sorters = self.table.modules.sort.getSort();
+
+                               sorters.forEach(function (item) {
+                                       delete item.column;
+                               });
+
+                               pageParams[_this73.dataSentNames.sorters] = sorters;
+                       }
+
+                       //set filter data if defined
+                       if (_this73.table.options.ajaxFiltering && _this73.table.modExists("filter")) {
+                               var filters = self.table.modules.filter.getFilters(true, true);
+                               pageParams[_this73.dataSentNames.filters] = filters;
+                       }
+
+                       self.table.modules.ajax.setParams(pageParams);
+
+                       self.table.modules.ajax.sendRequest(_this73.progressiveLoad).then(function (data) {
+                               self._parseRemoteData(data);
+                               resolve();
+                       }).catch(function (e) {
+                               reject();
+                       });
+
+                       self.table.modules.ajax.setParams(oldParams);
+               });
+       };
+
+       Page.prototype._parseRemoteData = function (data) {
+               var self = this,
+                   left,
+                   data,
+                   margin;
+
+               if (typeof data[this.dataReceivedNames.last_page] === "undefined") {
+                       console.warn("Remote Pagination Error - Server response missing '" + this.dataReceivedNames.last_page + "' property");
+               }
+
+               if (data[this.dataReceivedNames.data]) {
+                       this.max = parseInt(data[this.dataReceivedNames.last_page]) || 1;
+
+                       if (this.progressiveLoad) {
+                               switch (this.mode) {
+                                       case "progressive_load":
+
+                                               if (this.page == 1) {
+                                                       this.table.rowManager.setData(data[this.dataReceivedNames.data], false, this.initialLoad && this.page == 1);
+                                               } else {
+                                                       this.table.rowManager.addRows(data[this.dataReceivedNames.data]);
+                                               }
+
+                                               if (this.page < this.max) {
+                                                       setTimeout(function () {
+                                                               self.nextPage().then(function () {}).catch(function () {});
+                                                       }, self.table.options.ajaxProgressiveLoadDelay);
+                                               }
+                                               break;
+
+                                       case "progressive_scroll":
+                                               data = this.table.rowManager.getData().concat(data[this.dataReceivedNames.data]);
+
+                                               this.table.rowManager.setData(data, true, this.initialLoad && this.page == 1);
+
+                                               margin = this.table.options.ajaxProgressiveLoadScrollMargin || this.table.rowManager.element.clientHeight * 2;
+
+                                               if (self.table.rowManager.element.scrollHeight <= self.table.rowManager.element.clientHeight + margin) {
+                                                       self.nextPage().then(function () {}).catch(function () {});
+                                               }
+                                               break;
+                               }
+                       } else {
+                               left = this.table.rowManager.scrollLeft;
+
+                               this.table.rowManager.setData(data[this.dataReceivedNames.data], false, this.initialLoad && this.page == 1);
+
+                               this.table.rowManager.scrollHorizontal(left);
+
+                               this.table.columnManager.scrollHorizontal(left);
+
+                               this.table.options.pageLoaded.call(this.table, this.getPage());
+                       }
+
+                       this.initialLoad = false;
+               } else {
+                       console.warn("Remote Pagination Error - Server response missing '" + this.dataReceivedNames.data + "' property");
+               }
+       };
+
+       //handle the footer element being redrawn
+       Page.prototype.footerRedraw = function () {
+               var footer = this.table.footerManager.element;
+
+               if (Math.ceil(footer.clientWidth) - footer.scrollWidth < 0) {
+                       this.pagesElement.style.display = 'none';
+               } else {
+                       this.pagesElement.style.display = '';
+
+                       if (Math.ceil(footer.clientWidth) - footer.scrollWidth < 0) {
+                               this.pagesElement.style.display = 'none';
+                       }
+               }
+       };
+
+       //set the paramter names for pagination requests
+       Page.prototype.paginationDataSentNames = {
+               "page": "page",
+               "size": "size",
+               "sorters": "sorters",
+               // "sort_dir":"sort_dir",
+               "filters": "filters"
+               // "filter_value":"filter_value",
+               // "filter_type":"filter_type",
+       };
+
+       //set the property names for pagination responses
+       Page.prototype.paginationDataReceivedNames = {
+               "current_page": "current_page",
+               "last_page": "last_page",
+               "data": "data"
+       };
+
+       Tabulator.prototype.registerModule("page", Page);
+
+       var Persistence = function Persistence(table) {
+               this.table = table; //hold Tabulator object
+               this.mode = "";
+               this.id = "";
+               // this.persistProps = ["field", "width", "visible"];
+               this.defWatcherBlock = false;
+               this.config = {};
+               this.readFunc = false;
+               this.writeFunc = false;
+       };
+
+       // Test for whether localStorage is available for use.
+       Persistence.prototype.localStorageTest = function () {
+               var testKey = "_tabulator_test";
+
+               try {
+                       window.localStorage.setItem(testKey, testKey);
+                       window.localStorage.removeItem(testKey);
+                       return true;
+               } catch (e) {
+                       return false;
+               }
+       };
+
+       //setup parameters
+       Persistence.prototype.initialize = function () {
+               //determine persistent layout storage type
+
+               var mode = this.table.options.persistenceMode,
+                   id = this.table.options.persistenceID,
+                   retreivedData;
+
+               this.mode = mode !== true ? mode : this.localStorageTest() ? "local" : "cookie";
+
+               if (this.table.options.persistenceReaderFunc) {
+                       if (typeof this.table.options.persistenceReaderFunc === "function") {
+                               this.readFunc = this.table.options.persistenceReaderFunc;
+                       } else {
+                               if (this.readers[this.table.options.persistenceReaderFunc]) {
+                                       this.readFunc = this.readers[this.table.options.persistenceReaderFunc];
+                               } else {
+                                       console.warn("Persistence Read Error - invalid reader set", this.table.options.persistenceReaderFunc);
+                               }
+                       }
+               } else {
+                       if (this.readers[this.mode]) {
+                               this.readFunc = this.readers[this.mode];
+                       } else {
+                               console.warn("Persistence Read Error - invalid reader set", this.mode);
+                       }
+               }
+
+               if (this.table.options.persistenceWriterFunc) {
+                       if (typeof this.table.options.persistenceWriterFunc === "function") {
+                               this.writeFunc = this.table.options.persistenceWriterFunc;
+                       } else {
+                               if (this.readers[this.table.options.persistenceWriterFunc]) {
+                                       this.writeFunc = this.readers[this.table.options.persistenceWriterFunc];
+                               } else {
+                                       console.warn("Persistence Write Error - invalid reader set", this.table.options.persistenceWriterFunc);
+                               }
+                       }
+               } else {
+                       if (this.writers[this.mode]) {
+                               this.writeFunc = this.writers[this.mode];
+                       } else {
+                               console.warn("Persistence Write Error - invalid writer set", this.mode);
+                       }
+               }
+
+               //set storage tag
+               this.id = "tabulator-" + (id || this.table.element.getAttribute("id") || "");
+
+               this.config = {
+                       sort: this.table.options.persistence === true || this.table.options.persistence.sort,
+                       filter: this.table.options.persistence === true || this.table.options.persistence.filter,
+                       group: this.table.options.persistence === true || this.table.options.persistence.group,
+                       page: this.table.options.persistence === true || this.table.options.persistence.page,
+                       columns: this.table.options.persistence === true ? ["title", "width", "visible"] : this.table.options.persistence.columns
+               };
+
+               //load pagination data if needed
+               if (this.config.page) {
+                       retreivedData = this.retreiveData("page");
+
+                       if (retreivedData) {
+                               if (typeof retreivedData.paginationSize !== "undefined" && (this.config.page === true || this.config.page.size)) {
+                                       this.table.options.paginationSize = retreivedData.paginationSize;
+                               }
+
+                               if (typeof retreivedData.paginationInitialPage !== "undefined" && (this.config.page === true || this.config.page.page)) {
+                                       this.table.options.paginationInitialPage = retreivedData.paginationInitialPage;
+                               }
+                       }
+               }
+
+               //load group data if needed
+               if (this.config.group) {
+                       retreivedData = this.retreiveData("group");
+
+                       if (retreivedData) {
+                               if (typeof retreivedData.groupBy !== "undefined" && (this.config.group === true || this.config.group.groupBy)) {
+                                       this.table.options.groupBy = retreivedData.groupBy;
+                               }
+                               if (typeof retreivedData.groupStartOpen !== "undefined" && (this.config.group === true || this.config.group.groupStartOpen)) {
+                                       this.table.options.groupStartOpen = retreivedData.groupStartOpen;
+                               }
+                               if (typeof retreivedData.groupHeader !== "undefined" && (this.config.group === true || this.config.group.groupHeader)) {
+                                       this.table.options.groupHeader = retreivedData.groupHeader;
+                               }
+                       }
+               }
+       };
+
+       Persistence.prototype.initializeColumn = function (column) {
+               var self = this,
+                   def,
+                   keys;
+
+               if (this.config.columns) {
+                       this.defWatcherBlock = true;
+
+                       def = column.getDefinition();
+
+                       keys = this.config.columns === true ? Object.keys(def) : this.config.columns;
+
+                       keys.forEach(function (key) {
+                               var props = Object.getOwnPropertyDescriptor(def, key);
+                               var value = def[key];
+                               if (props) {
+                                       Object.defineProperty(def, key, {
+                                               set: function set(newValue) {
+                                                       value = newValue;
+
+                                                       if (!self.defWatcherBlock) {
+                                                               self.save("columns");
+                                                       }
+
+                                                       if (props.set) {
+                                                               props.set(newValue);
+                                                       }
+                                               },
+                                               get: function get() {
+                                                       if (props.get) {
+                                                               props.get();
+                                                       }
+                                                       return value;
+                                               }
+                                       });
+                               }
+                       });
+
+                       this.defWatcherBlock = false;
+               }
+       };
+
+       //load saved definitions
+       Persistence.prototype.load = function (type, current) {
+               var data = this.retreiveData(type);
+
+               if (current) {
+                       data = data ? this.mergeDefinition(current, data) : current;
+               }
+
+               return data;
+       };
+
+       //retreive data from memory
+       Persistence.prototype.retreiveData = function (type) {
+               return this.readFunc ? this.readFunc(this.id, type) : false;
+       };
+
+       //merge old and new column definitions
+       Persistence.prototype.mergeDefinition = function (oldCols, newCols) {
+               var self = this,
+                   output = [];
+
+               // oldCols = oldCols || [];
+               newCols = newCols || [];
+
+               newCols.forEach(function (column, to) {
+
+                       var from = self._findColumn(oldCols, column),
+                           keys;
+
+                       if (from) {
+
+                               if (self.config.columns === true || self.config.columns == undefined) {
+                                       keys = Object.keys(from);
+                                       keys.push("width");
+                               } else {
+                                       keys = self.config.columns;
+                               }
+
+                               keys.forEach(function (key) {
+                                       if (typeof column[key] !== "undefined") {
+                                               from[key] = column[key];
+                                       }
+                               });
+
+                               if (from.columns) {
+                                       from.columns = self.mergeDefinition(from.columns, column.columns);
+                               }
+
+                               output.push(from);
+                       }
+               });
+
+               oldCols.forEach(function (column, i) {
+                       var from = self._findColumn(newCols, column);
+                       if (!from) {
+                               if (output.length > i) {
+                                       output.splice(i, 0, column);
+                               } else {
+                                       output.push(column);
+                               }
+                       }
+               });
+
+               return output;
+       };
+
+       //find matching columns
+       Persistence.prototype._findColumn = function (columns, subject) {
+               var type = subject.columns ? "group" : subject.field ? "field" : "object";
+
+               return columns.find(function (col) {
+                       switch (type) {
+                               case "group":
+                                       return col.title === subject.title && col.columns.length === subject.columns.length;
+                                       break;
+
+                               case "field":
+                                       return col.field === subject.field;
+                                       break;
+
+                               case "object":
+                                       return col === subject;
+                                       break;
+                       }
+               });
+       };
+
+       //save data
+       Persistence.prototype.save = function (type) {
+               var data = {};
+
+               switch (type) {
+                       case "columns":
+                               data = this.parseColumns(this.table.columnManager.getColumns());
+                               break;
+
+                       case "filter":
+                               data = this.table.modules.filter.getFilters();
+                               break;
+
+                       case "sort":
+                               data = this.validateSorters(this.table.modules.sort.getSort());
+                               break;
+
+                       case "group":
+                               data = this.getGroupConfig();
+                               break;
+
+                       case "page":
+                               data = this.getPageConfig();
+                               break;
+               }
+
+               if (this.writeFunc) {
+                       this.writeFunc(this.id, type, data);
+               }
+       };
+
+       //ensure sorters contain no function data
+       Persistence.prototype.validateSorters = function (data) {
+               data.forEach(function (item) {
+                       item.column = item.field;
+                       delete item.field;
+               });
+
+               return data;
+       };
+
+       Persistence.prototype.getGroupConfig = function () {
+               if (this.config.group) {
+                       if (this.config.group === true || this.config.group.groupBy) {
+                               data.groupBy = this.table.options.groupBy;
+                       }
+
+                       if (this.config.group === true || this.config.group.groupStartOpen) {
+                               data.groupStartOpen = this.table.options.groupStartOpen;
+                       }
+
+                       if (this.config.group === true || this.config.group.groupHeader) {
+                               data.groupHeader = this.table.options.groupHeader;
+                       }
+               }
+
+               return data;
+       };
+
+       Persistence.prototype.getPageConfig = function () {
+               var data = {};
+
+               if (this.config.page) {
+                       if (this.config.page === true || this.config.page.size) {
+                               data.paginationSize = this.table.modules.page.getPageSize();
+                       }
+
+                       if (this.config.page === true || this.config.page.page) {
+                               data.paginationInitialPage = this.table.modules.page.getPage();
+                       }
+               }
+
+               return data;
+       };
+
+       //parse columns for data to store
+       Persistence.prototype.parseColumns = function (columns) {
+               var self = this,
+                   definitions = [];
+
+               columns.forEach(function (column) {
+                       var defStore = {},
+                           colDef = column.getDefinition(),
+                           keys;
+
+                       if (column.isGroup) {
+                               defStore.title = colDef.title;
+                               defStore.columns = self.parseColumns(column.getColumns());
+                       } else {
+                               defStore.field = column.getField();
+
+                               if (self.config.columns === true || self.config.columns == undefined) {
+                                       keys = Object.keys(colDef);
+                                       keys.push("width");
+                               } else {
+                                       keys = self.config.columns;
+                               }
+
+                               keys.forEach(function (key) {
+
+                                       switch (key) {
+                                               case "width":
+                                                       defStore.width = column.getWidth();
+                                                       break;
+                                               case "visible":
+                                                       defStore.visible = column.visible;
+                                                       break;
+
+                                               default:
+                                                       defStore[key] = colDef[key];
+                                       }
+                               });
+                       }
+
+                       definitions.push(defStore);
+               });
+
+               return definitions;
+       };
+
+       // read peristence information from storage
+       Persistence.prototype.readers = {
+               local: function local(id, type) {
+                       var data = localStorage.getItem(id + "-" + type);
+
+                       return data ? JSON.parse(data) : false;
+               },
+               cookie: function cookie(id, type) {
+                       var cookie = document.cookie,
+                           key = id + "-" + type,
+                           cookiePos = cookie.indexOf(key + "="),
+                           end,
+                           data;
+
+                       //if cookie exists, decode and load column data into tabulator
+                       if (cookiePos > -1) {
+                               cookie = cookie.substr(cookiePos);
+
+                               end = cookie.indexOf(";");
+
+                               if (end > -1) {
+                                       cookie = cookie.substr(0, end);
+                               }
+
+                               data = cookie.replace(key + "=", "");
+                       }
+
+                       return data ? JSON.parse(data) : false;
+               }
+       };
+
+       //write persistence information to storage
+       Persistence.prototype.writers = {
+               local: function local(id, type, data) {
+                       localStorage.setItem(id + "-" + type, JSON.stringify(data));
+               },
+               cookie: function cookie(id, type, data) {
+                       var expireDate = new Date();
+
+                       expireDate.setDate(expireDate.getDate() + 10000);
+
+                       document.cookie = id + "-" + type + "=" + JSON.stringify(data) + "; expires=" + expireDate.toUTCString();
+               }
+       };
+
+       Tabulator.prototype.registerModule("persistence", Persistence);
+
+       var Print = function Print(table) {
+               this.table = table; //hold Tabulator object
+               this.element = false;
+               this.manualBlock = false;
+       };
+
+       Print.prototype.initialize = function () {
+               window.addEventListener("beforeprint", this.replaceTable.bind(this));
+               window.addEventListener("afterprint", this.cleanup.bind(this));
+       };
+
+       Print.prototype.replaceTable = function () {
+               if (!this.manualBlock) {
+                       this.element = document.createElement("div");
+                       this.element.classList.add("tabulator-print-table");
+
+                       this.element.appendChild(this.table.modules.export.genereateTable(this.table.options.printConfig, this.table.options.printStyled, this.table.options.printRowRange, "print"));
+
+                       this.table.element.style.display = "none";
+
+                       this.table.element.parentNode.insertBefore(this.element, this.table.element);
+               }
+       };
+
+       Print.prototype.cleanup = function () {
+               document.body.classList.remove("tabulator-print-fullscreen-hide");
+
+               if (this.element && this.element.parentNode) {
+                       this.element.parentNode.removeChild(this.element);
+                       this.table.element.style.display = "";
+               }
+       };
+
+       Print.prototype.printFullscreen = function (visible, style, config) {
+               var scrollX = window.scrollX,
+                   scrollY = window.scrollY,
+                   headerEl = document.createElement("div"),
+                   footerEl = document.createElement("div"),
+                   tableEl = this.table.modules.export.genereateTable(typeof config != "undefined" ? config : this.table.options.printConfig, typeof style != "undefined" ? style : this.table.options.printStyled, visible, "print"),
+                   headerContent,
+                   footerContent;
+
+               this.manualBlock = true;
+
+               this.element = document.createElement("div");
+               this.element.classList.add("tabulator-print-fullscreen");
+
+               if (this.table.options.printHeader) {
+                       headerEl.classList.add("tabulator-print-header");
+
+                       headerContent = typeof this.table.options.printHeader == "function" ? this.table.options.printHeader.call(this.table) : this.table.options.printHeader;
+
+                       if (typeof headerContent == "string") {
+                               headerEl.innerHTML = headerContent;
+                       } else {
+                               headerEl.appendChild(headerContent);
+                       }
+
+                       this.element.appendChild(headerEl);
+               }
+
+               this.element.appendChild(tableEl);
+
+               if (this.table.options.printFooter) {
+                       footerEl.classList.add("tabulator-print-footer");
+
+                       footerContent = typeof this.table.options.printFooter == "function" ? this.table.options.printFooter.call(this.table) : this.table.options.printFooter;
+
+                       if (typeof footerContent == "string") {
+                               footerEl.innerHTML = footerContent;
+                       } else {
+                               footerEl.appendChild(footerContent);
+                       }
+
+                       this.element.appendChild(footerEl);
+               }
+
+               document.body.classList.add("tabulator-print-fullscreen-hide");
+               document.body.appendChild(this.element);
+
+               if (this.table.options.printFormatter) {
+                       this.table.options.printFormatter(this.element, tableEl);
+               }
+
+               window.print();
+
+               this.cleanup();
+
+               window.scrollTo(scrollX, scrollY);
+
+               this.manualBlock = false;
+       };
+
+       Tabulator.prototype.registerModule("print", Print);
+       var ReactiveData = function ReactiveData(table) {
+               this.table = table; //hold Tabulator object
+               this.data = false;
+               this.blocked = false; //block reactivity while performing update
+               this.origFuncs = {}; // hold original data array functions to allow replacement after data is done with
+               this.currentVersion = 0;
+       };
+
+       ReactiveData.prototype.watchData = function (data) {
+               var self = this,
+                   pushFunc,
+                   version;
+
+               this.currentVersion++;
+
+               version = this.currentVersion;
+
+               self.unwatchData();
+
+               self.data = data;
+
+               //override array push function
+               self.origFuncs.push = data.push;
+
+               Object.defineProperty(self.data, "push", {
+                       enumerable: false,
+                       configurable: true,
+                       value: function value() {
+                               var args = Array.from(arguments);
+
+                               if (!self.blocked && version === self.currentVersion) {
+                                       args.forEach(function (arg) {
+                                               self.table.rowManager.addRowActual(arg, false);
+                                       });
+                               }
+
+                               return self.origFuncs.push.apply(data, arguments);
+                       }
+               });
+
+               //override array unshift function
+               self.origFuncs.unshift = data.unshift;
+
+               Object.defineProperty(self.data, "unshift", {
+                       enumerable: false,
+                       configurable: true,
+                       value: function value() {
+                               var args = Array.from(arguments);
+
+                               if (!self.blocked && version === self.currentVersion) {
+                                       args.forEach(function (arg) {
+                                               self.table.rowManager.addRowActual(arg, true);
+                                       });
+                               }
+
+                               return self.origFuncs.unshift.apply(data, arguments);
+                       }
+               });
+
+               //override array shift function
+               self.origFuncs.shift = data.shift;
+
+               Object.defineProperty(self.data, "shift", {
+                       enumerable: false,
+                       configurable: true,
+                       value: function value() {
+                               var row;
+
+                               if (!self.blocked && version === self.currentVersion) {
+                                       if (self.data.length) {
+                                               row = self.table.rowManager.getRowFromDataObject(self.data[0]);
+
+                                               if (row) {
+                                                       row.deleteActual();
+                                               }
+                                       }
+                               }
+
+                               return self.origFuncs.shift.call(data);
+                       }
+               });
+
+               //override array pop function
+               self.origFuncs.pop = data.pop;
+
+               Object.defineProperty(self.data, "pop", {
+                       enumerable: false,
+                       configurable: true,
+                       value: function value() {
+                               var row;
+                               if (!self.blocked && version === self.currentVersion) {
+                                       if (self.data.length) {
+                                               row = self.table.rowManager.getRowFromDataObject(self.data[self.data.length - 1]);
+
+                                               if (row) {
+                                                       row.deleteActual();
+                                               }
+                                       }
+                               }
+                               return self.origFuncs.pop.call(data);
+                       }
+               });
+
+               //override array splice function
+               self.origFuncs.splice = data.splice;
+
+               Object.defineProperty(self.data, "splice", {
+                       enumerable: false,
+                       configurable: true,
+                       value: function value() {
+                               var args = Array.from(arguments),
+                                   start = args[0] < 0 ? data.length + args[0] : args[0],
+                                   end = args[1],
+                                   newRows = args[2] ? args.slice(2) : false,
+                                   startRow;
+
+                               if (!self.blocked && version === self.currentVersion) {
+
+                                       //add new rows
+                                       if (newRows) {
+                                               startRow = data[start] ? self.table.rowManager.getRowFromDataObject(data[start]) : false;
+
+                                               if (startRow) {
+                                                       newRows.forEach(function (rowData) {
+                                                               self.table.rowManager.addRowActual(rowData, true, startRow, true);
+                                                       });
+                                               } else {
+                                                       newRows = newRows.slice().reverse();
+
+                                                       newRows.forEach(function (rowData) {
+                                                               self.table.rowManager.addRowActual(rowData, true, false, true);
+                                                       });
+                                               }
+                                       }
+
+                                       //delete removed rows
+                                       if (end !== 0) {
+                                               var oldRows = data.slice(start, typeof args[1] === "undefined" ? args[1] : start + end);
+
+                                               oldRows.forEach(function (rowData, i) {
+                                                       var row = self.table.rowManager.getRowFromDataObject(rowData);
+
+                                                       if (row) {
+                                                               row.deleteActual(i !== oldRows.length - 1);
+                                                       }
+                                               });
+                                       }
+
+                                       if (newRows || end !== 0) {
+                                               self.table.rowManager.reRenderInPosition();
+                                       }
+                               }
+
+                               return self.origFuncs.splice.apply(data, arguments);
+                       }
+               });
+       };
+
+       ReactiveData.prototype.unwatchData = function () {
+               if (this.data !== false) {
+                       for (var key in this.origFuncs) {
+                               Object.defineProperty(this.data, key, {
+                                       enumerable: true,
+                                       configurable: true,
+                                       writable: true,
+                                       value: this.origFuncs.key
+                               });
+                       }
+               }
+       };
+
+       ReactiveData.prototype.watchRow = function (row) {
+               var self = this,
+                   data = row.getData();
+
+               this.blocked = true;
+
+               for (var key in data) {
+                       this.watchKey(row, data, key);
+               }
+
+               this.blocked = false;
+       };
+
+       ReactiveData.prototype.watchKey = function (row, data, key) {
+               var self = this,
+                   props = Object.getOwnPropertyDescriptor(data, key),
+                   value = data[key],
+                   version = this.currentVersion;
+
+               Object.defineProperty(data, key, {
+                       set: function set(newValue) {
+                               value = newValue;
+                               if (!self.blocked && version === self.currentVersion) {
+                                       var update = {};
+                                       update[key] = newValue;
+                                       row.updateData(update);
+                               }
+
+                               if (props.set) {
+                                       props.set(newValue);
+                               }
+                       },
+                       get: function get() {
+
+                               if (props.get) {
+                                       props.get();
+                               }
+
+                               return value;
+                       }
+               });
+       };
+
+       ReactiveData.prototype.unwatchRow = function (row) {
+               var data = row.getData();
+
+               for (var key in data) {
+                       Object.defineProperty(data, key, {
+                               value: data[key]
+                       });
+               }
+       };
+
+       ReactiveData.prototype.block = function () {
+               this.blocked = true;
+       };
+
+       ReactiveData.prototype.unblock = function () {
+               this.blocked = false;
+       };
+
+       Tabulator.prototype.registerModule("reactiveData", ReactiveData);
+
+       var ResizeColumns = function ResizeColumns(table) {
+               this.table = table; //hold Tabulator object
+               this.startColumn = false;
+               this.startX = false;
+               this.startWidth = false;
+               this.handle = null;
+               this.prevHandle = null;
+       };
+
+       ResizeColumns.prototype.initializeColumn = function (type, column, element) {
+               var self = this,
+                   variableHeight = false,
+                   mode = this.table.options.resizableColumns;
+
+               //set column resize mode
+               if (type === "header") {
+                       variableHeight = column.definition.formatter == "textarea" || column.definition.variableHeight;
+                       column.modules.resize = { variableHeight: variableHeight };
+               }
+
+               if (mode === true || mode == type) {
+
+                       var handle = document.createElement('div');
+                       handle.className = "tabulator-col-resize-handle";
+
+                       var prevHandle = document.createElement('div');
+                       prevHandle.className = "tabulator-col-resize-handle prev";
+
+                       handle.addEventListener("click", function (e) {
+                               e.stopPropagation();
+                       });
+
+                       var handleDown = function handleDown(e) {
+                               var nearestColumn = column.getLastColumn();
+
+                               if (nearestColumn && self._checkResizability(nearestColumn)) {
+                                       self.startColumn = column;
+                                       self._mouseDown(e, nearestColumn, handle);
+                               }
+                       };
+
+                       handle.addEventListener("mousedown", handleDown);
+                       handle.addEventListener("touchstart", handleDown, { passive: true });
+
+                       //reszie column on  double click
+                       handle.addEventListener("dblclick", function (e) {
+                               var col = column.getLastColumn();
+
+                               if (col && self._checkResizability(col)) {
+                                       e.stopPropagation();
+                                       col.reinitializeWidth(true);
+                               }
+                       });
+
+                       prevHandle.addEventListener("click", function (e) {
+                               e.stopPropagation();
+                       });
+
+                       var prevHandleDown = function prevHandleDown(e) {
+                               var nearestColumn, colIndex, prevColumn;
+
+                               nearestColumn = column.getFirstColumn();
+
+                               if (nearestColumn) {
+                                       colIndex = self.table.columnManager.findColumnIndex(nearestColumn);
+                                       prevColumn = colIndex > 0 ? self.table.columnManager.getColumnByIndex(colIndex - 1) : false;
+
+                                       if (prevColumn && self._checkResizability(prevColumn)) {
+                                               self.startColumn = column;
+                                               self._mouseDown(e, prevColumn, prevHandle);
+                                       }
+                               }
+                       };
+
+                       prevHandle.addEventListener("mousedown", prevHandleDown);
+                       prevHandle.addEventListener("touchstart", prevHandleDown, { passive: true });
+
+                       //resize column on double click
+                       prevHandle.addEventListener("dblclick", function (e) {
+                               var nearestColumn, colIndex, prevColumn;
+
+                               nearestColumn = column.getFirstColumn();
+
+                               if (nearestColumn) {
+                                       colIndex = self.table.columnManager.findColumnIndex(nearestColumn);
+                                       prevColumn = colIndex > 0 ? self.table.columnManager.getColumnByIndex(colIndex - 1) : false;
+
+                                       if (prevColumn && self._checkResizability(prevColumn)) {
+                                               e.stopPropagation();
+                                               prevColumn.reinitializeWidth(true);
+                                       }
+                               }
+                       });
+
+                       element.appendChild(handle);
+                       element.appendChild(prevHandle);
+               }
+       };
+
+       ResizeColumns.prototype._checkResizability = function (column) {
+               return typeof column.definition.resizable != "undefined" ? column.definition.resizable : this.table.options.resizableColumns;
+       };
+
+       ResizeColumns.prototype._mouseDown = function (e, column, handle) {
+               var self = this;
+
+               self.table.element.classList.add("tabulator-block-select");
+
+               function mouseMove(e) {
+                       // self.table.columnManager.tempScrollBlock();
+
+                       column.setWidth(self.startWidth + ((typeof e.screenX === "undefined" ? e.touches[0].screenX : e.screenX) - self.startX));
+
+                       if (!self.table.browserSlow && column.modules.resize && column.modules.resize.variableHeight) {
+                               column.checkCellHeights();
+                       }
+               }
+
+               function mouseUp(e) {
+
+                       //block editor from taking action while resizing is taking place
+                       if (self.startColumn.modules.edit) {
+                               self.startColumn.modules.edit.blocked = false;
+                       }
+
+                       if (self.table.browserSlow && column.modules.resize && column.modules.resize.variableHeight) {
+                               column.checkCellHeights();
+                       }
+
+                       document.body.removeEventListener("mouseup", mouseUp);
+                       document.body.removeEventListener("mousemove", mouseMove);
+
+                       handle.removeEventListener("touchmove", mouseMove);
+                       handle.removeEventListener("touchend", mouseUp);
+
+                       self.table.element.classList.remove("tabulator-block-select");
+
+                       if (self.table.options.persistence && self.table.modExists("persistence", true) && self.table.modules.persistence.config.columns) {
+                               self.table.modules.persistence.save("columns");
+                       }
+
+                       self.table.options.columnResized.call(self.table, column.getComponent());
+               }
+
+               e.stopPropagation(); //prevent resize from interfereing with movable columns
+
+               //block editor from taking action while resizing is taking place
+               if (self.startColumn.modules.edit) {
+                       self.startColumn.modules.edit.blocked = true;
+               }
+
+               self.startX = typeof e.screenX === "undefined" ? e.touches[0].screenX : e.screenX;
+               self.startWidth = column.getWidth();
+
+               document.body.addEventListener("mousemove", mouseMove);
+               document.body.addEventListener("mouseup", mouseUp);
+               handle.addEventListener("touchmove", mouseMove, { passive: true });
+               handle.addEventListener("touchend", mouseUp);
+       };
+
+       Tabulator.prototype.registerModule("resizeColumns", ResizeColumns);
+       var ResizeRows = function ResizeRows(table) {
+               this.table = table; //hold Tabulator object
+               this.startColumn = false;
+               this.startY = false;
+               this.startHeight = false;
+               this.handle = null;
+               this.prevHandle = null;
+       };
+
+       ResizeRows.prototype.initializeRow = function (row) {
+               var self = this,
+                   rowEl = row.getElement();
+
+               var handle = document.createElement('div');
+               handle.className = "tabulator-row-resize-handle";
+
+               var prevHandle = document.createElement('div');
+               prevHandle.className = "tabulator-row-resize-handle prev";
+
+               handle.addEventListener("click", function (e) {
+                       e.stopPropagation();
+               });
+
+               var handleDown = function handleDown(e) {
+                       self.startRow = row;
+                       self._mouseDown(e, row, handle);
+               };
+
+               handle.addEventListener("mousedown", handleDown);
+               handle.addEventListener("touchstart", handleDown, { passive: true });
+
+               prevHandle.addEventListener("click", function (e) {
+                       e.stopPropagation();
+               });
+
+               var prevHandleDown = function prevHandleDown(e) {
+                       var prevRow = self.table.rowManager.prevDisplayRow(row);
+
+                       if (prevRow) {
+                               self.startRow = prevRow;
+                               self._mouseDown(e, prevRow, prevHandle);
+                       }
+               };
+
+               prevHandle.addEventListener("mousedown", prevHandleDown);
+               prevHandle.addEventListener("touchstart", prevHandleDown, { passive: true });
+
+               rowEl.appendChild(handle);
+               rowEl.appendChild(prevHandle);
+       };
+
+       ResizeRows.prototype._mouseDown = function (e, row, handle) {
+               var self = this;
+
+               self.table.element.classList.add("tabulator-block-select");
+
+               function mouseMove(e) {
+                       row.setHeight(self.startHeight + ((typeof e.screenY === "undefined" ? e.touches[0].screenY : e.screenY) - self.startY));
+               }
+
+               function mouseUp(e) {
+
+                       // //block editor from taking action while resizing is taking place
+                       // if(self.startColumn.modules.edit){
+                       //      self.startColumn.modules.edit.blocked = false;
+                       // }
+
+                       document.body.removeEventListener("mouseup", mouseMove);
+                       document.body.removeEventListener("mousemove", mouseMove);
+
+                       handle.removeEventListener("touchmove", mouseMove);
+                       handle.removeEventListener("touchend", mouseUp);
+
+                       self.table.element.classList.remove("tabulator-block-select");
+
+                       self.table.options.rowResized.call(this.table, row.getComponent());
+               }
+
+               e.stopPropagation(); //prevent resize from interfereing with movable columns
+
+               //block editor from taking action while resizing is taking place
+               // if(self.startColumn.modules.edit){
+               //      self.startColumn.modules.edit.blocked = true;
+               // }
+
+               self.startY = typeof e.screenY === "undefined" ? e.touches[0].screenY : e.screenY;
+               self.startHeight = row.getHeight();
+
+               document.body.addEventListener("mousemove", mouseMove);
+               document.body.addEventListener("mouseup", mouseUp);
+
+               handle.addEventListener("touchmove", mouseMove, { passive: true });
+               handle.addEventListener("touchend", mouseUp);
+       };
+
+       Tabulator.prototype.registerModule("resizeRows", ResizeRows);
+       var ResizeTable = function ResizeTable(table) {
+               this.table = table; //hold Tabulator object
+               this.binding = false;
+               this.observer = false;
+               this.containerObserver = false;
+
+               this.tableHeight = 0;
+               this.tableWidth = 0;
+               this.containerHeight = 0;
+               this.containerWidth = 0;
+
+               this.autoResize = false;
+       };
+
+       ResizeTable.prototype.initialize = function (row) {
+               var _this74 = this;
+
+               var table = this.table,
+                   tableStyle;
+
+               this.tableHeight = table.element.clientHeight;
+               this.tableWidth = table.element.clientWidth;
+
+               if (table.element.parentNode) {
+                       this.containerHeight = table.element.parentNode.clientHeight;
+                       this.containerWidth = table.element.parentNode.clientWidth;
+               }
+
+               if (typeof ResizeObserver !== "undefined" && table.rowManager.getRenderMode() === "virtual") {
+
+                       this.autoResize = true;
+
+                       this.observer = new ResizeObserver(function (entry) {
+                               if (!table.browserMobile || table.browserMobile && !table.modules.edit.currentCell) {
+
+                                       var nodeHeight = Math.floor(entry[0].contentRect.height);
+                                       var nodeWidth = Math.floor(entry[0].contentRect.width);
+
+                                       if (_this74.tableHeight != nodeHeight || _this74.tableWidth != nodeWidth) {
+                                               _this74.tableHeight = nodeHeight;
+                                               _this74.tableWidth = nodeWidth;
+
+                                               if (table.element.parentNode) {
+                                                       _this74.containerHeight = table.element.parentNode.clientHeight;
+                                                       _this74.containerWidth = table.element.parentNode.clientWidth;
+                                               }
+
+                                               table.redraw();
+                                       }
+                               }
+                       });
+
+                       this.observer.observe(table.element);
+
+                       tableStyle = window.getComputedStyle(table.element);
+
+                       if (this.table.element.parentNode && !this.table.rowManager.fixedHeight && (tableStyle.getPropertyValue("max-height") || tableStyle.getPropertyValue("min-height"))) {
+
+                               this.containerObserver = new ResizeObserver(function (entry) {
+                                       if (!table.browserMobile || table.browserMobile && !table.modules.edit.currentCell) {
+
+                                               var nodeHeight = Math.floor(entry[0].contentRect.height);
+                                               var nodeWidth = Math.floor(entry[0].contentRect.width);
+
+                                               if (_this74.containerHeight != nodeHeight || _this74.containerWidth != nodeWidth) {
+                                                       _this74.containerHeight = nodeHeight;
+                                                       _this74.containerWidth = nodeWidth;
+                                                       _this74.tableHeight = table.element.clientHeight;
+                                                       _this74.tableWidth = table.element.clientWidth;
+
+                                                       table.redraw();
+                                               }
+
+                                               table.redraw();
+                                       }
+                               });
+
+                               this.containerObserver.observe(this.table.element.parentNode);
+                       }
+               } else {
+                       this.binding = function () {
+                               if (!table.browserMobile || table.browserMobile && !table.modules.edit.currentCell) {
+                                       table.redraw();
+                               }
+                       };
+
+                       window.addEventListener("resize", this.binding);
+               }
+       };
+
+       ResizeTable.prototype.clearBindings = function (row) {
+               if (this.binding) {
+                       window.removeEventListener("resize", this.binding);
+               }
+
+               if (this.observer) {
+                       this.observer.unobserve(this.table.element);
+               }
+
+               if (this.containerObserver) {
+                       this.containerObserver.unobserve(this.table.element.parentNode);
+               }
+       };
+
+       Tabulator.prototype.registerModule("resizeTable", ResizeTable);
+       var ResponsiveLayout = function ResponsiveLayout(table) {
+               this.table = table; //hold Tabulator object
+               this.columns = [];
+               this.hiddenColumns = [];
+               this.mode = "";
+               this.index = 0;
+               this.collapseFormatter = [];
+               this.collapseStartOpen = true;
+               this.collapseHandleColumn = false;
+       };
+
+       //generate resposive columns list
+       ResponsiveLayout.prototype.initialize = function () {
+               var self = this,
+                   columns = [];
+
+               this.mode = this.table.options.responsiveLayout;
+               this.collapseFormatter = this.table.options.responsiveLayoutCollapseFormatter || this.formatCollapsedData;
+               this.collapseStartOpen = this.table.options.responsiveLayoutCollapseStartOpen;
+               this.hiddenColumns = [];
+
+               //detemine level of responsivity for each column
+               this.table.columnManager.columnsByIndex.forEach(function (column, i) {
+                       if (column.modules.responsive) {
+                               if (column.modules.responsive.order && column.modules.responsive.visible) {
+                                       column.modules.responsive.index = i;
+                                       columns.push(column);
+
+                                       if (!column.visible && self.mode === "collapse") {
+                                               self.hiddenColumns.push(column);
+                                       }
+                               }
+                       }
+               });
+
+               //sort list by responsivity
+               columns = columns.reverse();
+               columns = columns.sort(function (a, b) {
+                       var diff = b.modules.responsive.order - a.modules.responsive.order;
+                       return diff || b.modules.responsive.index - a.modules.responsive.index;
+               });
+
+               this.columns = columns;
+
+               if (this.mode === "collapse") {
+                       this.generateCollapsedContent();
+               }
+
+               //assign collapse column
+               for (var _iterator = this.table.columnManager.columnsByIndex, _isArray = Array.isArray(_iterator), _i12 = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {
+                       var _ref;
+
+                       if (_isArray) {
+                               if (_i12 >= _iterator.length) break;
+                               _ref = _iterator[_i12++];
+                       } else {
+                               _i12 = _iterator.next();
+                               if (_i12.done) break;
+                               _ref = _i12.value;
+                       }
+
+                       var col = _ref;
+
+                       if (col.definition.formatter == "responsiveCollapse") {
+                               this.collapseHandleColumn = col;
+                               break;
+                       }
+               }
+
+               if (this.collapseHandleColumn) {
+                       if (this.hiddenColumns.length) {
+                               this.collapseHandleColumn.show();
+                       } else {
+                               this.collapseHandleColumn.hide();
+                       }
+               }
+       };
+
+       //define layout information
+       ResponsiveLayout.prototype.initializeColumn = function (column) {
+               var def = column.getDefinition();
+
+               column.modules.responsive = { order: typeof def.responsive === "undefined" ? 1 : def.responsive, visible: def.visible === false ? false : true };
+       };
+
+       ResponsiveLayout.prototype.initializeRow = function (row) {
+               var el;
+
+               if (row.type !== "calc") {
+                       el = document.createElement("div");
+                       el.classList.add("tabulator-responsive-collapse");
+
+                       row.modules.responsiveLayout = {
+                               element: el,
+                               open: this.collapseStartOpen
+                       };
+
+                       if (!this.collapseStartOpen) {
+                               el.style.display = 'none';
+                       }
+               }
+       };
+
+       ResponsiveLayout.prototype.layoutRow = function (row) {
+               var rowEl = row.getElement();
+
+               if (row.modules.responsiveLayout) {
+                       rowEl.appendChild(row.modules.responsiveLayout.element);
+                       this.generateCollapsedRowContent(row);
+               }
+       };
+
+       //update column visibility
+       ResponsiveLayout.prototype.updateColumnVisibility = function (column, visible) {
+               var index;
+               if (column.modules.responsive) {
+                       column.modules.responsive.visible = visible;
+                       this.initialize();
+               }
+       };
+
+       ResponsiveLayout.prototype.hideColumn = function (column) {
+               var colCount = this.hiddenColumns.length;
+
+               column.hide(false, true);
+
+               if (this.mode === "collapse") {
+                       this.hiddenColumns.unshift(column);
+                       this.generateCollapsedContent();
+
+                       if (this.collapseHandleColumn && !colCount) {
+                               this.collapseHandleColumn.show();
+                       }
+               }
+       };
+
+       ResponsiveLayout.prototype.showColumn = function (column) {
+               var index;
+
+               column.show(false, true);
+               //set column width to prevent calculation loops on uninitialized columns
+               column.setWidth(column.getWidth());
+
+               if (this.mode === "collapse") {
+                       index = this.hiddenColumns.indexOf(column);
+
+                       if (index > -1) {
+                               this.hiddenColumns.splice(index, 1);
+                       }
+
+                       this.generateCollapsedContent();
+
+                       if (this.collapseHandleColumn && !this.hiddenColumns.length) {
+                               this.collapseHandleColumn.hide();
+                       }
+               }
+       };
+
+       //redraw columns to fit space
+       ResponsiveLayout.prototype.update = function () {
+               var self = this,
+                   working = true;
+
+               while (working) {
+
+                       var width = self.table.modules.layout.getMode() == "fitColumns" ? self.table.columnManager.getFlexBaseWidth() : self.table.columnManager.getWidth();
+
+                       var diff = (self.table.options.headerVisible ? self.table.columnManager.element.clientWidth : self.table.element.clientWidth) - width;
+
+                       if (diff < 0) {
+                               //table is too wide
+                               var column = self.columns[self.index];
+
+                               if (column) {
+                                       self.hideColumn(column);
+                                       self.index++;
+                               } else {
+                                       working = false;
+                               }
+                       } else {
+
+                               //table has spare space
+                               var _column = self.columns[self.index - 1];
+
+                               if (_column) {
+                                       if (diff > 0) {
+                                               if (diff >= _column.getWidth()) {
+                                                       self.showColumn(_column);
+                                                       self.index--;
+                                               } else {
+                                                       working = false;
+                                               }
+                                       } else {
+                                               working = false;
+                                       }
+                               } else {
+                                       working = false;
+                               }
+                       }
+
+                       if (!self.table.rowManager.activeRowsCount) {
+                               self.table.rowManager.renderEmptyScroll();
+                       }
+               }
+       };
+
+       ResponsiveLayout.prototype.generateCollapsedContent = function () {
+               var self = this,
+                   rows = this.table.rowManager.getDisplayRows();
+
+               rows.forEach(function (row) {
+                       self.generateCollapsedRowContent(row);
+               });
+       };
+
+       ResponsiveLayout.prototype.generateCollapsedRowContent = function (row) {
+               var el, contents;
+
+               if (row.modules.responsiveLayout) {
+                       el = row.modules.responsiveLayout.element;
+
+                       while (el.firstChild) {
+                               el.removeChild(el.firstChild);
+                       }contents = this.collapseFormatter(this.generateCollapsedRowData(row));
+                       if (contents) {
+                               el.appendChild(contents);
+                       }
+               }
+       };
+
+       ResponsiveLayout.prototype.generateCollapsedRowData = function (row) {
+               var self = this,
+                   data = row.getData(),
+                   output = [],
+                   mockCellComponent;
+
+               this.hiddenColumns.forEach(function (column) {
+                       var value = column.getFieldValue(data);
+
+                       if (column.definition.title && column.field) {
+                               if (column.modules.format && self.table.options.responsiveLayoutCollapseUseFormatters) {
+
+                                       mockCellComponent = {
+                                               value: false,
+                                               data: {},
+                                               getValue: function getValue() {
+                                                       return value;
+                                               },
+                                               getData: function getData() {
+                                                       return data;
+                                               },
+                                               getElement: function getElement() {
+                                                       return document.createElement("div");
+                                               },
+                                               getRow: function getRow() {
+                                                       return row.getComponent();
+                                               },
+                                               getColumn: function getColumn() {
+                                                       return column.getComponent();
+                                               }
+                                       };
+
+                                       output.push({
+                                               title: column.definition.title,
+                                               value: column.modules.format.formatter.call(self.table.modules.format, mockCellComponent, column.modules.format.params)
+                                       });
+                               } else {
+                                       output.push({
+                                               title: column.definition.title,
+                                               value: value
+                                       });
+                               }
+                       }
+               });
+
+               return output;
+       };
+
+       ResponsiveLayout.prototype.formatCollapsedData = function (data) {
+               var list = document.createElement("table"),
+                   listContents = "";
+
+               data.forEach(function (item) {
+                       var div = document.createElement("div");
+
+                       if (item.value instanceof Node) {
+                               div.appendChild(item.value);
+                               item.value = div.innerHTML;
+                       }
+
+                       listContents += "<tr><td><strong>" + item.title + "</strong></td><td>" + item.value + "</td></tr>";
+               });
+
+               list.innerHTML = listContents;
+
+               return Object.keys(data).length ? list : "";
+       };
+
+       Tabulator.prototype.registerModule("responsiveLayout", ResponsiveLayout);
+
+       var SelectRow = function SelectRow(table) {
+               this.table = table; //hold Tabulator object
+               this.selecting = false; //flag selecting in progress
+               this.lastClickedRow = false; //last clicked row
+               this.selectPrev = []; //hold previously selected element for drag drop selection
+               this.selectedRows = []; //hold selected rows
+               this.headerCheckboxElement = null; // hold header select element
+       };
+
+       SelectRow.prototype.clearSelectionData = function (silent) {
+               this.selecting = false;
+               this.lastClickedRow = false;
+               this.selectPrev = [];
+               this.selectedRows = [];
+
+               if (!silent) {
+                       this._rowSelectionChanged();
+               }
+       };
+
+       SelectRow.prototype.initializeRow = function (row) {
+               var self = this,
+                   element = row.getElement();
+
+               // trigger end of row selection
+               var endSelect = function endSelect() {
+
+                       setTimeout(function () {
+                               self.selecting = false;
+                       }, 50);
+
+                       document.body.removeEventListener("mouseup", endSelect);
+               };
+
+               row.modules.select = { selected: false };
+
+               //set row selection class
+               if (self.table.options.selectableCheck.call(this.table, row.getComponent())) {
+                       element.classList.add("tabulator-selectable");
+                       element.classList.remove("tabulator-unselectable");
+
+                       if (self.table.options.selectable && self.table.options.selectable != "highlight") {
+                               if (self.table.options.selectableRangeMode === "click") {
+                                       element.addEventListener("click", function (e) {
+                                               if (e.shiftKey) {
+                                                       self.table._clearSelection();
+                                                       self.lastClickedRow = self.lastClickedRow || row;
+
+                                                       var lastClickedRowIdx = self.table.rowManager.getDisplayRowIndex(self.lastClickedRow);
+                                                       var rowIdx = self.table.rowManager.getDisplayRowIndex(row);
+
+                                                       var fromRowIdx = lastClickedRowIdx <= rowIdx ? lastClickedRowIdx : rowIdx;
+                                                       var toRowIdx = lastClickedRowIdx >= rowIdx ? lastClickedRowIdx : rowIdx;
+
+                                                       var rows = self.table.rowManager.getDisplayRows().slice(0);
+                                                       var toggledRows = rows.splice(fromRowIdx, toRowIdx - fromRowIdx + 1);
+
+                                                       if (e.ctrlKey || e.metaKey) {
+                                                               toggledRows.forEach(function (toggledRow) {
+                                                                       if (toggledRow !== self.lastClickedRow) {
+
+                                                                               if (self.table.options.selectable !== true && !self.isRowSelected(row)) {
+                                                                                       if (self.selectedRows.length < self.table.options.selectable) {
+                                                                                               self.toggleRow(toggledRow);
+                                                                                       }
+                                                                               } else {
+                                                                                       self.toggleRow(toggledRow);
+                                                                               }
+                                                                       }
+                                                               });
+                                                               self.lastClickedRow = row;
+                                                       } else {
+                                                               self.deselectRows(undefined, true);
+
+                                                               if (self.table.options.selectable !== true) {
+                                                                       if (toggledRows.length > self.table.options.selectable) {
+                                                                               toggledRows = toggledRows.slice(0, self.table.options.selectable);
+                                                                       }
+                                                               }
+
+                                                               self.selectRows(toggledRows);
+                                                       }
+                                                       self.table._clearSelection();
+                                               } else if (e.ctrlKey || e.metaKey) {
+                                                       self.toggleRow(row);
+                                                       self.lastClickedRow = row;
+                                               } else {
+                                                       self.deselectRows(undefined, true);
+                                                       self.selectRows(row);
+                                                       self.lastClickedRow = row;
+                                               }
+                                       });
+                               } else {
+                                       element.addEventListener("click", function (e) {
+                                               if (!self.table.modExists("edit") || !self.table.modules.edit.getCurrentCell()) {
+                                                       self.table._clearSelection();
+                                               }
+
+                                               if (!self.selecting) {
+                                                       self.toggleRow(row);
+                                               }
+                                       });
+
+                                       element.addEventListener("mousedown", function (e) {
+                                               if (e.shiftKey) {
+                                                       self.table._clearSelection();
+
+                                                       self.selecting = true;
+
+                                                       self.selectPrev = [];
+
+                                                       document.body.addEventListener("mouseup", endSelect);
+                                                       document.body.addEventListener("keyup", endSelect);
+
+                                                       self.toggleRow(row);
+
+                                                       return false;
+                                               }
+                                       });
+
+                                       element.addEventListener("mouseenter", function (e) {
+                                               if (self.selecting) {
+                                                       self.table._clearSelection();
+                                                       self.toggleRow(row);
+
+                                                       if (self.selectPrev[1] == row) {
+                                                               self.toggleRow(self.selectPrev[0]);
+                                                       }
+                                               }
+                                       });
+
+                                       element.addEventListener("mouseout", function (e) {
+                                               if (self.selecting) {
+                                                       self.table._clearSelection();
+                                                       self.selectPrev.unshift(row);
+                                               }
+                                       });
+                               }
+                       }
+               } else {
+                       element.classList.add("tabulator-unselectable");
+                       element.classList.remove("tabulator-selectable");
+               }
+       };
+
+       //toggle row selection
+       SelectRow.prototype.toggleRow = function (row) {
+               if (this.table.options.selectableCheck.call(this.table, row.getComponent())) {
+                       if (row.modules.select && row.modules.select.selected) {
+                               this._deselectRow(row);
+                       } else {
+                               this._selectRow(row);
+                       }
+               }
+       };
+
+       //select a number of rows
+       SelectRow.prototype.selectRows = function (rows) {
+               var _this75 = this;
+
+               var rowMatch;
+
+               switch (typeof rows === 'undefined' ? 'undefined' : _typeof(rows)) {
+                       case "undefined":
+                               this.table.rowManager.rows.forEach(function (row) {
+                                       _this75._selectRow(row, true, true);
+                               });
+
+                               this._rowSelectionChanged();
+                               break;
+
+                       case "string":
+
+                               rowMatch = this.table.rowManager.findRow(rows);
+
+                               if (rowMatch) {
+                                       this._selectRow(rowMatch, true, true);
+                               } else {
+                                       this.table.rowManager.getRows(rows).forEach(function (row) {
+                                               _this75._selectRow(row, true, true);
+                                       });
+                               }
+
+                               this._rowSelectionChanged();
+                               break;
+
+                       default:
+                               if (Array.isArray(rows)) {
+                                       rows.forEach(function (row) {
+                                               _this75._selectRow(row, true, true);
+                                       });
+
+                                       this._rowSelectionChanged();
+                               } else {
+                                       this._selectRow(rows, false, true);
+                               }
+                               break;
+               }
+       };
+
+       //select an individual row
+       SelectRow.prototype._selectRow = function (rowInfo, silent, force) {
+               var index;
+
+               //handle max row count
+               if (!isNaN(this.table.options.selectable) && this.table.options.selectable !== true && !force) {
+                       if (this.selectedRows.length >= this.table.options.selectable) {
+                               if (this.table.options.selectableRollingSelection) {
+                                       this._deselectRow(this.selectedRows[0]);
+                               } else {
+                                       return false;
+                               }
+                       }
+               }
+
+               var row = this.table.rowManager.findRow(rowInfo);
+
+               if (row) {
+                       if (this.selectedRows.indexOf(row) == -1) {
+                               if (!row.modules.select) {
+                                       row.modules.select = {};
+                               }
+
+                               row.modules.select.selected = true;
+                               if (row.modules.select.checkboxEl) {
+                                       row.modules.select.checkboxEl.checked = true;
+                               }
+                               row.getElement().classList.add("tabulator-selected");
+
+                               this.selectedRows.push(row);
+
+                               if (this.table.options.dataTreeSelectPropagate) {
+                                       this.childRowSelection(row, true);
+                               }
+
+                               if (!silent) {
+                                       this.table.options.rowSelected.call(this.table, row.getComponent());
+                               }
+
+                               this._rowSelectionChanged(silent);
+                       }
+               } else {
+                       if (!silent) {
+                               console.warn("Selection Error - No such row found, ignoring selection:" + rowInfo);
+                       }
+               }
+       };
+
+       SelectRow.prototype.isRowSelected = function (row) {
+               return this.selectedRows.indexOf(row) !== -1;
+       };
+
+       //deselect a number of rows
+       SelectRow.prototype.deselectRows = function (rows, silent) {
+               var self = this,
+                   rowCount;
+
+               if (typeof rows == "undefined") {
+
+                       rowCount = self.selectedRows.length;
+
+                       for (var _i13 = 0; _i13 < rowCount; _i13++) {
+                               self._deselectRow(self.selectedRows[0], true);
+                       }
+
+                       self._rowSelectionChanged(silent);
+               } else {
+                       if (Array.isArray(rows)) {
+                               rows.forEach(function (row) {
+                                       self._deselectRow(row, true);
+                               });
+
+                               self._rowSelectionChanged(silent);
+                       } else {
+                               self._deselectRow(rows, silent);
+                       }
+               }
+       };
+
+       //deselect an individual row
+       SelectRow.prototype._deselectRow = function (rowInfo, silent) {
+               var self = this,
+                   row = self.table.rowManager.findRow(rowInfo),
+                   index;
+
+               if (row) {
+                       index = self.selectedRows.findIndex(function (selectedRow) {
+                               return selectedRow == row;
+                       });
+
+                       if (index > -1) {
+
+                               if (!row.modules.select) {
+                                       row.modules.select = {};
+                               }
+
+                               row.modules.select.selected = false;
+                               if (row.modules.select.checkboxEl) {
+                                       row.modules.select.checkboxEl.checked = false;
+                               }
+                               row.getElement().classList.remove("tabulator-selected");
+                               self.selectedRows.splice(index, 1);
+
+                               if (this.table.options.dataTreeSelectPropagate) {
+                                       this.childRowSelection(row, false);
+                               }
+
+                               if (!silent) {
+                                       self.table.options.rowDeselected.call(this.table, row.getComponent());
+                               }
+
+                               self._rowSelectionChanged(silent);
+                       }
+               } else {
+                       if (!silent) {
+                               console.warn("Deselection Error - No such row found, ignoring selection:" + rowInfo);
+                       }
+               }
+       };
+
+       SelectRow.prototype.getSelectedData = function () {
+               var data = [];
+
+               this.selectedRows.forEach(function (row) {
+                       data.push(row.getData());
+               });
+
+               return data;
+       };
+
+       SelectRow.prototype.getSelectedRows = function () {
+
+               var rows = [];
+
+               this.selectedRows.forEach(function (row) {
+                       rows.push(row.getComponent());
+               });
+
+               return rows;
+       };
+
+       SelectRow.prototype._rowSelectionChanged = function (silent) {
+               if (this.headerCheckboxElement) {
+                       if (this.selectedRows.length === 0) {
+                               this.headerCheckboxElement.checked = false;
+                               this.headerCheckboxElement.indeterminate = false;
+                       } else if (this.table.rowManager.rows.length === this.selectedRows.length) {
+                               this.headerCheckboxElement.checked = true;
+                               this.headerCheckboxElement.indeterminate = false;
+                       } else {
+                               this.headerCheckboxElement.indeterminate = true;
+                               this.headerCheckboxElement.checked = false;
+                       }
+               }
+
+               if (!silent) {
+                       this.table.options.rowSelectionChanged.call(this.table, this.getSelectedData(), this.getSelectedRows());
+               }
+       };
+
+       SelectRow.prototype.registerRowSelectCheckbox = function (row, element) {
+               if (!row._row.modules.select) {
+                       row._row.modules.select = {};
+               }
+
+               row._row.modules.select.checkboxEl = element;
+       };
+
+       SelectRow.prototype.registerHeaderSelectCheckbox = function (element) {
+               this.headerCheckboxElement = element;
+       };
+
+       SelectRow.prototype.childRowSelection = function (row, select) {
+               var children = this.table.modules.dataTree.getChildren(row);
+
+               if (select) {
+                       for (var _iterator2 = children, _isArray2 = Array.isArray(_iterator2), _i14 = 0, _iterator2 = _isArray2 ? _iterator2 : _iterator2[Symbol.iterator]();;) {
+                               var _ref2;
+
+                               if (_isArray2) {
+                                       if (_i14 >= _iterator2.length) break;
+                                       _ref2 = _iterator2[_i14++];
+                               } else {
+                                       _i14 = _iterator2.next();
+                                       if (_i14.done) break;
+                                       _ref2 = _i14.value;
+                               }
+
+                               var child = _ref2;
+
+                               this._selectRow(child, true);
+                       }
+               } else {
+                       for (var _iterator3 = children, _isArray3 = Array.isArray(_iterator3), _i15 = 0, _iterator3 = _isArray3 ? _iterator3 : _iterator3[Symbol.iterator]();;) {
+                               var _ref3;
+
+                               if (_isArray3) {
+                                       if (_i15 >= _iterator3.length) break;
+                                       _ref3 = _iterator3[_i15++];
+                               } else {
+                                       _i15 = _iterator3.next();
+                                       if (_i15.done) break;
+                                       _ref3 = _i15.value;
+                               }
+
+                               var _child = _ref3;
+
+                               this._deselectRow(_child, true);
+                       }
+               }
+       };
+
+       Tabulator.prototype.registerModule("selectRow", SelectRow);
+
+       var Sort = function Sort(table) {
+               this.table = table; //hold Tabulator object
+               this.sortList = []; //holder current sort
+               this.changed = false; //has the sort changed since last render
+       };
+
+       //initialize column header for sorting
+       Sort.prototype.initializeColumn = function (column, content) {
+               var self = this,
+                   sorter = false,
+                   colEl,
+                   arrowEl;
+
+               switch (_typeof(column.definition.sorter)) {
+                       case "string":
+                               if (self.sorters[column.definition.sorter]) {
+                                       sorter = self.sorters[column.definition.sorter];
+                               } else {
+                                       console.warn("Sort Error - No such sorter found: ", column.definition.sorter);
+                               }
+                               break;
+
+                       case "function":
+                               sorter = column.definition.sorter;
+                               break;
+               }
+
+               column.modules.sort = {
+                       sorter: sorter, dir: "none",
+                       params: column.definition.sorterParams || {},
+                       startingDir: column.definition.headerSortStartingDir || "asc",
+                       tristate: typeof column.definition.headerSortTristate !== "undefined" ? column.definition.headerSortTristate : this.table.options.headerSortTristate
+               };
+
+               if (typeof column.definition.headerSort === "undefined" ? this.table.options.headerSort !== false : column.definition.headerSort !== false) {
+
+                       colEl = column.getElement();
+
+                       colEl.classList.add("tabulator-sortable");
+
+                       arrowEl = document.createElement("div");
+                       arrowEl.classList.add("tabulator-arrow");
+                       //create sorter arrow
+                       content.appendChild(arrowEl);
+
+                       //sort on click
+                       colEl.addEventListener("click", function (e) {
+                               var dir = "",
+                                   sorters = [],
+                                   match = false;
+
+                               if (column.modules.sort) {
+                                       if (column.modules.sort.tristate) {
+                                               if (column.modules.sort.dir == "none") {
+                                                       dir = column.modules.sort.startingDir;
+                                               } else {
+                                                       if (column.modules.sort.dir == column.modules.sort.startingDir) {
+                                                               dir = column.modules.sort.dir == "asc" ? "desc" : "asc";
+                                                       } else {
+                                                               dir = "none";
+                                                       }
+                                               }
+                                       } else {
+                                               switch (column.modules.sort.dir) {
+                                                       case "asc":
+                                                               dir = "desc";
+                                                               break;
+
+                                                       case "desc":
+                                                               dir = "asc";
+                                                               break;
+
+                                                       default:
+                                                               dir = column.modules.sort.startingDir;
+                                               }
+                                       }
+
+                                       if (self.table.options.columnHeaderSortMulti && (e.shiftKey || e.ctrlKey)) {
+                                               sorters = self.getSort();
+
+                                               match = sorters.findIndex(function (sorter) {
+                                                       return sorter.field === column.getField();
+                                               });
+
+                                               if (match > -1) {
+                                                       sorters[match].dir = dir;
+
+                                                       if (match != sorters.length - 1) {
+                                                               match = sorters.splice(match, 1)[0];
+                                                               if (dir != "none") {
+                                                                       sorters.push(match);
+                                                               }
+                                                       }
+                                               } else {
+                                                       if (dir != "none") {
+                                                               sorters.push({ column: column, dir: dir });
+                                                       }
+                                               }
+
+                                               //add to existing sort
+                                               self.setSort(sorters);
+                                       } else {
+                                               if (dir == "none") {
+                                                       self.clear();
+                                               } else {
+                                                       //sort by column only
+                                                       self.setSort(column, dir);
+                                               }
+                                       }
+
+                                       self.table.rowManager.sorterRefresh(!self.sortList.length);
+                               }
+                       });
+               }
+       };
+
+       //check if the sorters have changed since last use
+       Sort.prototype.hasChanged = function () {
+               var changed = this.changed;
+               this.changed = false;
+               return changed;
+       };
+
+       //return current sorters
+       Sort.prototype.getSort = function () {
+               var self = this,
+                   sorters = [];
+
+               self.sortList.forEach(function (item) {
+                       if (item.column) {
+                               sorters.push({ column: item.column.getComponent(), field: item.column.getField(), dir: item.dir });
+                       }
+               });
+
+               return sorters;
+       };
+
+       //change sort list and trigger sort
+       Sort.prototype.setSort = function (sortList, dir) {
+               var self = this,
+                   newSortList = [];
+
+               if (!Array.isArray(sortList)) {
+                       sortList = [{ column: sortList, dir: dir }];
+               }
+
+               sortList.forEach(function (item) {
+                       var column;
+
+                       column = self.table.columnManager.findColumn(item.column);
+
+                       if (column) {
+                               item.column = column;
+                               newSortList.push(item);
+                               self.changed = true;
+                       } else {
+                               console.warn("Sort Warning - Sort field does not exist and is being ignored: ", item.column);
+                       }
+               });
+
+               self.sortList = newSortList;
+
+               if (this.table.options.persistence && this.table.modExists("persistence", true) && this.table.modules.persistence.config.sort) {
+                       this.table.modules.persistence.save("sort");
+               }
+       };
+
+       //clear sorters
+       Sort.prototype.clear = function () {
+               this.setSort([]);
+       };
+
+       //find appropriate sorter for column
+       Sort.prototype.findSorter = function (column) {
+               var row = this.table.rowManager.activeRows[0],
+                   sorter = "string",
+                   field,
+                   value;
+
+               if (row) {
+                       row = row.getData();
+                       field = column.getField();
+
+                       if (field) {
+
+                               value = column.getFieldValue(row);
+
+                               switch (typeof value === 'undefined' ? 'undefined' : _typeof(value)) {
+                                       case "undefined":
+                                               sorter = "string";
+                                               break;
+
+                                       case "boolean":
+                                               sorter = "boolean";
+                                               break;
+
+                                       default:
+                                               if (!isNaN(value) && value !== "") {
+                                                       sorter = "number";
+                                               } else {
+                                                       if (value.match(/((^[0-9]+[a-z]+)|(^[a-z]+[0-9]+))+$/i)) {
+                                                               sorter = "alphanum";
+                                                       }
+                                               }
+                                               break;
+                               }
+                       }
+               }
+
+               return this.sorters[sorter];
+       };
+
+       //work through sort list sorting data
+       Sort.prototype.sort = function (data) {
+               var self = this,
+                   sortList = this.table.options.sortOrderReverse ? self.sortList.slice().reverse() : self.sortList,
+                   sortListActual = [],
+                   rowComponents = [],
+                   lastSort;
+
+               if (self.table.options.dataSorting) {
+                       self.table.options.dataSorting.call(self.table, self.getSort());
+               }
+
+               self.clearColumnHeaders();
+
+               if (!self.table.options.ajaxSorting) {
+
+                       //build list of valid sorters and trigger column specific callbacks before sort begins
+                       sortList.forEach(function (item, i) {
+                               var sortObj = item.column.modules.sort;
+
+                               if (item.column && sortObj) {
+
+                                       //if no sorter has been defined, take a guess
+                                       if (!sortObj.sorter) {
+                                               sortObj.sorter = self.findSorter(item.column);
+                                       }
+
+                                       item.params = typeof sortObj.params === "function" ? sortObj.params(item.column.getComponent(), item.dir) : sortObj.params;
+
+                                       sortListActual.push(item);
+                               }
+
+                               self.setColumnHeader(item.column, item.dir);
+                       });
+
+                       //sort data
+                       if (sortListActual.length) {
+                               self._sortItems(data, sortListActual);
+                       }
+               } else {
+                       sortList.forEach(function (item, i) {
+                               self.setColumnHeader(item.column, item.dir);
+                       });
+               }
+
+               if (self.table.options.dataSorted) {
+                       data.forEach(function (row) {
+                               rowComponents.push(row.getComponent());
+                       });
+
+                       self.table.options.dataSorted.call(self.table, self.getSort(), rowComponents);
+               }
+       };
+
+       //clear sort arrows on columns
+       Sort.prototype.clearColumnHeaders = function () {
+               this.table.columnManager.getRealColumns().forEach(function (column) {
+                       if (column.modules.sort) {
+                               column.modules.sort.dir = "none";
+                               column.getElement().setAttribute("aria-sort", "none");
+                       }
+               });
+       };
+
+       //set the column header sort direction
+       Sort.prototype.setColumnHeader = function (column, dir) {
+               column.modules.sort.dir = dir;
+               column.getElement().setAttribute("aria-sort", dir);
+       };
+
+       //sort each item in sort list
+       Sort.prototype._sortItems = function (data, sortList) {
+               var _this76 = this;
+
+               var sorterCount = sortList.length - 1;
+
+               data.sort(function (a, b) {
+                       var result;
+
+                       for (var i = sorterCount; i >= 0; i--) {
+                               var sortItem = sortList[i];
+
+                               result = _this76._sortRow(a, b, sortItem.column, sortItem.dir, sortItem.params);
+
+                               if (result !== 0) {
+                                       break;
+                               }
+                       }
+
+                       return result;
+               });
+       };
+
+       //process individual rows for a sort function on active data
+       Sort.prototype._sortRow = function (a, b, column, dir, params) {
+               var el1Comp, el2Comp, colComp;
+
+               //switch elements depending on search direction
+               var el1 = dir == "asc" ? a : b;
+               var el2 = dir == "asc" ? b : a;
+
+               a = column.getFieldValue(el1.getData());
+               b = column.getFieldValue(el2.getData());
+
+               a = typeof a !== "undefined" ? a : "";
+               b = typeof b !== "undefined" ? b : "";
+
+               el1Comp = el1.getComponent();
+               el2Comp = el2.getComponent();
+
+               return column.modules.sort.sorter.call(this, a, b, el1Comp, el2Comp, column.getComponent(), dir, params);
+       };
+
+       //default data sorters
+       Sort.prototype.sorters = {
+
+               //sort numbers
+               number: function number(a, b, aRow, bRow, column, dir, params) {
+                       var alignEmptyValues = params.alignEmptyValues;
+                       var decimal = params.decimalSeparator || ".";
+                       var thousand = params.thousandSeparator || ",";
+                       var emptyAlign = 0;
+
+                       a = parseFloat(String(a).split(thousand).join("").split(decimal).join("."));
+                       b = parseFloat(String(b).split(thousand).join("").split(decimal).join("."));
+
+                       //handle non numeric values
+                       if (isNaN(a)) {
+                               emptyAlign = isNaN(b) ? 0 : -1;
+                       } else if (isNaN(b)) {
+                               emptyAlign = 1;
+                       } else {
+                               //compare valid values
+                               return a - b;
+                       }
+
+                       //fix empty values in position
+                       if (alignEmptyValues === "top" && dir === "desc" || alignEmptyValues === "bottom" && dir === "asc") {
+                               emptyAlign *= -1;
+                       }
+
+                       return emptyAlign;
+               },
+
+               //sort strings
+               string: function string(a, b, aRow, bRow, column, dir, params) {
+                       var alignEmptyValues = params.alignEmptyValues;
+                       var emptyAlign = 0;
+                       var locale;
+
+                       //handle empty values
+                       if (!a) {
+                               emptyAlign = !b ? 0 : -1;
+                       } else if (!b) {
+                               emptyAlign = 1;
+                       } else {
+                               //compare valid values
+                               switch (_typeof(params.locale)) {
+                                       case "boolean":
+                                               if (params.locale) {
+                                                       locale = this.table.modules.localize.getLocale();
+                                               }
+                                               break;
+                                       case "string":
+                                               locale = params.locale;
+                                               break;
+                               }
+
+                               return String(a).toLowerCase().localeCompare(String(b).toLowerCase(), locale);
+                       }
+
+                       //fix empty values in position
+                       if (alignEmptyValues === "top" && dir === "desc" || alignEmptyValues === "bottom" && dir === "asc") {
+                               emptyAlign *= -1;
+                       }
+
+                       return emptyAlign;
+               },
+
+               //sort date
+               date: function date(a, b, aRow, bRow, column, dir, params) {
+                       if (!params.format) {
+                               params.format = "DD/MM/YYYY";
+                       }
+
+                       return this.sorters.datetime.call(this, a, b, aRow, bRow, column, dir, params);
+               },
+
+               //sort HH:mm formatted times
+               time: function time(a, b, aRow, bRow, column, dir, params) {
+                       if (!params.format) {
+                               params.format = "HH:mm";
+                       }
+
+                       return this.sorters.datetime.call(this, a, b, aRow, bRow, column, dir, params);
+               },
+
+               //sort datetime
+               datetime: function datetime(a, b, aRow, bRow, column, dir, params) {
+                       var format = params.format || "DD/MM/YYYY HH:mm:ss",
+                           alignEmptyValues = params.alignEmptyValues,
+                           emptyAlign = 0;
+
+                       if (typeof moment != "undefined") {
+                               a = moment(a, format);
+                               b = moment(b, format);
+
+                               if (!a.isValid()) {
+                                       emptyAlign = !b.isValid() ? 0 : -1;
+                               } else if (!b.isValid()) {
+                                       emptyAlign = 1;
+                               } else {
+                                       //compare valid values
+                                       return a - b;
+                               }
+
+                               //fix empty values in position
+                               if (alignEmptyValues === "top" && dir === "desc" || alignEmptyValues === "bottom" && dir === "asc") {
+                                       emptyAlign *= -1;
+                               }
+
+                               return emptyAlign;
+                       } else {
+                               console.error("Sort Error - 'datetime' sorter is dependant on moment.js");
+                       }
+               },
+
+               //sort booleans
+               boolean: function boolean(a, b, aRow, bRow, column, dir, params) {
+                       var el1 = a === true || a === "true" || a === "True" || a === 1 ? 1 : 0;
+                       var el2 = b === true || b === "true" || b === "True" || b === 1 ? 1 : 0;
+
+                       return el1 - el2;
+               },
+
+               //sort if element contains any data
+               array: function array(a, b, aRow, bRow, column, dir, params) {
+                       var el1 = 0;
+                       var el2 = 0;
+                       var type = params.type || "length";
+                       var alignEmptyValues = params.alignEmptyValues;
+                       var emptyAlign = 0;
+
+                       function calc(value) {
+
+                               switch (type) {
+                                       case "length":
+                                               return value.length;
+                                               break;
+
+                                       case "sum":
+                                               return value.reduce(function (c, d) {
+                                                       return c + d;
+                                               });
+                                               break;
+
+                                       case "max":
+                                               return Math.max.apply(null, value);
+                                               break;
+
+                                       case "min":
+                                               return Math.min.apply(null, value);
+                                               break;
+
+                                       case "avg":
+                                               return value.reduce(function (c, d) {
+                                                       return c + d;
+                                               }) / value.length;
+                                               break;
+                               }
+                       }
+
+                       //handle non array values
+                       if (!Array.isArray(a)) {
+                               alignEmptyValues = !Array.isArray(b) ? 0 : -1;
+                       } else if (!Array.isArray(b)) {
+                               alignEmptyValues = 1;
+                       } else {
+
+                               //compare valid values
+                               el1 = a ? calc(a) : 0;
+                               el2 = b ? calc(b) : 0;
+
+                               return el1 - el2;
+                       }
+
+                       //fix empty values in position
+                       if (alignEmptyValues === "top" && dir === "desc" || alignEmptyValues === "bottom" && dir === "asc") {
+                               emptyAlign *= -1;
+                       }
+
+                       return emptyAlign;
+               },
+
+               //sort if element contains any data
+               exists: function exists(a, b, aRow, bRow, column, dir, params) {
+                       var el1 = typeof a == "undefined" ? 0 : 1;
+                       var el2 = typeof b == "undefined" ? 0 : 1;
+
+                       return el1 - el2;
+               },
+
+               //sort alpha numeric strings
+               alphanum: function alphanum(as, bs, aRow, bRow, column, dir, params) {
+                       var a,
+                           b,
+                           a1,
+                           b1,
+                           i = 0,
+                           L,
+                           rx = /(\d+)|(\D+)/g,
+                           rd = /\d/;
+                       var alignEmptyValues = params.alignEmptyValues;
+                       var emptyAlign = 0;
+
+                       //handle empty values
+                       if (!as && as !== 0) {
+                               emptyAlign = !bs && bs !== 0 ? 0 : -1;
+                       } else if (!bs && bs !== 0) {
+                               emptyAlign = 1;
+                       } else {
+
+                               if (isFinite(as) && isFinite(bs)) return as - bs;
+                               a = String(as).toLowerCase();
+                               b = String(bs).toLowerCase();
+                               if (a === b) return 0;
+                               if (!(rd.test(a) && rd.test(b))) return a > b ? 1 : -1;
+                               a = a.match(rx);
+                               b = b.match(rx);
+                               L = a.length > b.length ? b.length : a.length;
+                               while (i < L) {
+                                       a1 = a[i];
+                                       b1 = b[i++];
+                                       if (a1 !== b1) {
+                                               if (isFinite(a1) && isFinite(b1)) {
+                                                       if (a1.charAt(0) === "0") a1 = "." + a1;
+                                                       if (b1.charAt(0) === "0") b1 = "." + b1;
+                                                       return a1 - b1;
+                                               } else return a1 > b1 ? 1 : -1;
+                                       }
+                               }
+
+                               return a.length > b.length;
+                       }
+
+                       //fix empty values in position
+                       if (alignEmptyValues === "top" && dir === "desc" || alignEmptyValues === "bottom" && dir === "asc") {
+                               emptyAlign *= -1;
+                       }
+
+                       return emptyAlign;
+               }
+       };
+
+       Tabulator.prototype.registerModule("sort", Sort);
+
+       var Validate = function Validate(table) {
+               this.table = table;
+               this.invalidCells = [];
+       };
+
+       //validate
+       Validate.prototype.initializeColumn = function (column) {
+               var self = this,
+                   config = [],
+                   validator;
+
+               if (column.definition.validator) {
+
+                       if (Array.isArray(column.definition.validator)) {
+                               column.definition.validator.forEach(function (item) {
+                                       validator = self._extractValidator(item);
+
+                                       if (validator) {
+                                               config.push(validator);
+                                       }
+                               });
+                       } else {
+                               validator = this._extractValidator(column.definition.validator);
+
+                               if (validator) {
+                                       config.push(validator);
+                               }
+                       }
+
+                       column.modules.validate = config.length ? config : false;
+               }
+       };
+
+       Validate.prototype._extractValidator = function (value) {
+               var type, params, pos;
+
+               switch (typeof value === 'undefined' ? 'undefined' : _typeof(value)) {
+                       case "string":
+                               pos = value.indexOf(':');
+
+                               if (pos > -1) {
+                                       type = value.substring(0, pos);
+                                       params = value.substring(pos + 1);
+                               } else {
+                                       type = value;
+                               }
+
+                               return this._buildValidator(type, params);
+                               break;
+
+                       case "function":
+                               return this._buildValidator(value);
+                               break;
+
+                       case "object":
+                               return this._buildValidator(value.type, value.parameters);
+                               break;
+               }
+       };
+
+       Validate.prototype._buildValidator = function (type, params) {
+
+               var func = typeof type == "function" ? type : this.validators[type];
+
+               if (!func) {
+                       console.warn("Validator Setup Error - No matching validator found:", type);
+                       return false;
+               } else {
+                       return {
+                               type: typeof type == "function" ? "function" : type,
+                               func: func,
+                               params: params
+                       };
+               }
+       };
+
+       Validate.prototype.validate = function (validators, cell, value) {
+               var self = this,
+                   valid = [],
+                   invalidIndex = this.invalidCells.indexOf(cell);
+
+               if (validators) {
+                       validators.forEach(function (item) {
+                               if (!item.func.call(self, cell.getComponent(), value, item.params)) {
+                                       valid.push({
+                                               type: item.type,
+                                               parameters: item.params
+                                       });
+                               }
+                       });
+               }
+
+               valid = valid.length ? valid : true;
+
+               if (!cell.modules.validate) {
+                       cell.modules.validate = {};
+               }
+
+               if (valid === true) {
+                       cell.modules.validate.invalid = false;
+                       cell.getElement().classList.remove("tabulator-validation-fail");
+
+                       if (invalidIndex > -1) {
+                               this.invalidCells.splice(invalidIndex, 1);
+                       }
+               } else {
+                       cell.modules.validate.invalid = true;
+
+                       if (this.table.options.validationMode !== "manual") {
+                               cell.getElement().classList.add("tabulator-validation-fail");
+                       }
+
+                       if (invalidIndex == -1) {
+                               this.invalidCells.push(cell);
+                       }
+               }
+
+               return valid;
+       };
+
+       Validate.prototype.getInvalidCells = function () {
+               var output = [];
+
+               this.invalidCells.forEach(function (cell) {
+                       output.push(cell.getComponent());
+               });
+
+               return output;
+       };
+
+       Validate.prototype.clearValidation = function (cell) {
+               var invalidIndex;
+
+               if (cell.modules.validate && cell.modules.validate.invalid) {
+
+                       cell.element.classList.remove("tabulator-validation-fail");
+                       cell.modules.validate.invalid = false;
+
+                       invalidIndex = this.invalidCells.indexOf(cell);
+
+                       if (invalidIndex > -1) {
+                               this.invalidCells.splice(invalidIndex, 1);
+                       }
+               }
+       };
+
+       Validate.prototype.validators = {
+
+               //is integer
+               integer: function integer(cell, value, parameters) {
+                       if (value === "" || value === null || typeof value === "undefined") {
+                               return true;
+                       }
+                       value = Number(value);
+                       return typeof value === 'number' && isFinite(value) && Math.floor(value) === value;
+               },
+
+               //is float
+               float: function float(cell, value, parameters) {
+                       if (value === "" || value === null || typeof value === "undefined") {
+                               return true;
+                       }
+                       value = Number(value);
+                       return typeof value === 'number' && isFinite(value) && value % 1 !== 0;
+               },
+
+               //must be a number
+               numeric: function numeric(cell, value, parameters) {
+                       if (value === "" || value === null || typeof value === "undefined") {
+                               return true;
+                       }
+                       return !isNaN(value);
+               },
+
+               //must be a string
+               string: function string(cell, value, parameters) {
+                       if (value === "" || value === null || typeof value === "undefined") {
+                               return true;
+                       }
+                       return isNaN(value);
+               },
+
+               //maximum value
+               max: function max(cell, value, parameters) {
+                       if (value === "" || value === null || typeof value === "undefined") {
+                               return true;
+                       }
+                       return parseFloat(value) <= parameters;
+               },
+
+               //minimum value
+               min: function min(cell, value, parameters) {
+                       if (value === "" || value === null || typeof value === "undefined") {
+                               return true;
+                       }
+                       return parseFloat(value) >= parameters;
+               },
+
+               //starts with  value
+               starts: function starts(cell, value, parameters) {
+                       if (value === "" || value === null || typeof value === "undefined") {
+                               return true;
+                       }
+                       return String(value).toLowerCase().startsWith(String(parameters).toLowerCase());
+               },
+
+               //ends with  value
+               ends: function ends(cell, value, parameters) {
+                       if (value === "" || value === null || typeof value === "undefined") {
+                               return true;
+                       }
+                       return String(value).toLowerCase().endsWith(String(parameters).toLowerCase());
+               },
+
+               //minimum string length
+               minLength: function minLength(cell, value, parameters) {
+                       if (value === "" || value === null || typeof value === "undefined") {
+                               return true;
+                       }
+                       return String(value).length >= parameters;
+               },
+
+               //maximum string length
+               maxLength: function maxLength(cell, value, parameters) {
+                       if (value === "" || value === null || typeof value === "undefined") {
+                               return true;
+                       }
+                       return String(value).length <= parameters;
+               },
+
+               //in provided value list
+               in: function _in(cell, value, parameters) {
+                       if (value === "" || value === null || typeof value === "undefined") {
+                               return true;
+                       }
+                       if (typeof parameters == "string") {
+                               parameters = parameters.split("|");
+                       }
+
+                       return value === "" || parameters.indexOf(value) > -1;
+               },
+
+               //must match provided regex
+               regex: function regex(cell, value, parameters) {
+                       if (value === "" || value === null || typeof value === "undefined") {
+                               return true;
+                       }
+                       var reg = new RegExp(parameters);
+
+                       return reg.test(value);
+               },
+
+               //value must be unique in this column
+               unique: function unique(cell, value, parameters) {
+                       if (value === "" || value === null || typeof value === "undefined") {
+                               return true;
+                       }
+                       var unique = true;
+
+                       var cellData = cell.getData();
+                       var column = cell.getColumn()._getSelf();
+
+                       this.table.rowManager.rows.forEach(function (row) {
+                               var data = row.getData();
+
+                               if (data !== cellData) {
+                                       if (value == column.getFieldValue(data)) {
+                                               unique = false;
+                                       }
+                               }
+                       });
+
+                       return unique;
+               },
+
+               //must have a value
+               required: function required(cell, value, parameters) {
+                       return value !== "" && value !== null && typeof value !== "undefined";
+               }
+       };
+
+       Tabulator.prototype.registerModule("validate", Validate);
+
+       return Tabulator;
+});
\ No newline at end of file
diff --git a/admin/js/vendors/tabulator/js/tabulator.min.js b/admin/js/vendors/tabulator/js/tabulator.min.js
new file mode 100644 (file)
index 0000000..425389a
--- /dev/null
@@ -0,0 +1 @@
+var _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(obj){return typeof obj}:function(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj};!function(global,factory){"object"===("undefined"==typeof exports?"undefined":_typeof(exports))&&"undefined"!=typeof module?module.exports=factory():"function"==typeof define&&define.amd?define(factory):global.Tabulator=factory()}(this,(function(){"use strict";Array.prototype.findIndex||Object.defineProperty(Array.prototype,"findIndex",{value:function value(predicate){if(null==this)throw new TypeError('"this" is null or not defined');var o=Object(this),len=o.length>>>0;if("function"!=typeof predicate)throw new TypeError("predicate must be a function");for(var thisArg=arguments[1],k=0;k<len;){var kValue=o[k];if(predicate.call(thisArg,kValue,k,o))return k;k++}return-1}}),Array.prototype.find||Object.defineProperty(Array.prototype,"find",{value:function value(predicate){if(null==this)throw new TypeError('"this" is null or not defined');var o=Object(this),len=o.length>>>0;if("function"!=typeof predicate)throw new TypeError("predicate must be a function");for(var thisArg=arguments[1],k=0;k<len;){var kValue=o[k];if(predicate.call(thisArg,kValue,k,o))return kValue;k++}}}),String.prototype.includes||(String.prototype.includes=function(search,start){if(search instanceof RegExp)throw TypeError("first argument must not be a RegExp");return void 0===start&&(start=0),-1!==this.indexOf(search,start)}),Array.prototype.includes||Object.defineProperty(Array.prototype,"includes",{value:function value(searchElement,fromIndex){if(null==this)throw new TypeError('"this" is null or not defined');var o=Object(this),len=o.length>>>0;if(0===len)return!1;var n=0|fromIndex,k=Math.max(n>=0?n:len-Math.abs(n),0);function sameValueZero(x,y){return x===y||"number"==typeof x&&"number"==typeof y&&isNaN(x)&&isNaN(y)}for(;k<len;){if(sameValueZero(o[k],searchElement))return!0;k++}return!1}}),"function"!=typeof Object.assign&&Object.defineProperty(Object,"assign",{value:function assign(target,varArgs){if(null==target)throw new TypeError("Cannot convert undefined or null to object");for(var to=Object(target),index=1;index<arguments.length;index++){var nextSource=arguments[index];if(null!=nextSource)for(var nextKey in nextSource)Object.prototype.hasOwnProperty.call(nextSource,nextKey)&&(to[nextKey]=nextSource[nextKey])}return to},writable:!0,configurable:!0});var ColumnManager=function ColumnManager(table){this.table=table,this.blockHozScrollEvent=!1,this.headersElement=this.createHeadersElement(),this.element=this.createHeaderElement(),this.rowManager=null,this.columns=[],this.columnsByIndex=[],this.columnsByField={},this.scrollLeft=0,this.element.insertBefore(this.headersElement,this.element.firstChild)};ColumnManager.prototype.createHeadersElement=function(){var el=document.createElement("div");return el.classList.add("tabulator-headers"),el},ColumnManager.prototype.createHeaderElement=function(){var el=document.createElement("div");return el.classList.add("tabulator-header"),this.table.options.headerVisible||el.classList.add("tabulator-header-hidden"),el},ColumnManager.prototype.initialize=function(){var self=this},ColumnManager.prototype.setRowManager=function(manager){this.rowManager=manager},ColumnManager.prototype.getElement=function(){return this.element},ColumnManager.prototype.getHeadersElement=function(){return this.headersElement},ColumnManager.prototype.scrollHorizontal=function(left){var hozAdjust=0,scrollWidth=this.element.scrollWidth-this.table.element.clientWidth;this.element.scrollLeft=left,left>scrollWidth?(hozAdjust=left-scrollWidth,this.element.style.marginLeft=-hozAdjust+"px"):this.element.style.marginLeft=0,this.scrollLeft=left,this.table.modExists("frozenColumns")&&this.table.modules.frozenColumns.scrollHorizontal()},ColumnManager.prototype.generateColumnsFromRowData=function(data){var cols=[],row,sorter;if(data&&data.length){for(var key in row=data[0]){var col={field:key,title:key},value=row[key];switch(void 0===value?"undefined":_typeof(value)){case"undefined":sorter="string";break;case"boolean":sorter="boolean";break;case"object":sorter=Array.isArray(value)?"array":"string";break;default:sorter=isNaN(value)||""===value?value.match(/((^[0-9]+[a-z]+)|(^[a-z]+[0-9]+))+$/i)?"alphanum":"string":"number"}col.sorter=sorter,cols.push(col)}this.table.options.columns=cols,this.setColumns(this.table.options.columns)}},ColumnManager.prototype.setColumns=function(cols,row){for(var self=this;self.headersElement.firstChild;)self.headersElement.removeChild(self.headersElement.firstChild);self.columns=[],self.columnsByIndex=[],self.columnsByField={},self.table.modExists("frozenColumns")&&self.table.modules.frozenColumns.reset(),cols.forEach((function(def,i){self._addColumn(def)})),self._reIndexColumns(),self.table.options.responsiveLayout&&self.table.modExists("responsiveLayout",!0)&&self.table.modules.responsiveLayout.initialize(),self.redraw(!0)},ColumnManager.prototype._addColumn=function(definition,before,nextToColumn){var column=new Column(definition,this),colEl=column.getElement(),index=nextToColumn?this.findColumnIndex(nextToColumn):nextToColumn;if(nextToColumn&&index>-1){var parentIndex=this.columns.indexOf(nextToColumn.getTopColumn()),nextEl=nextToColumn.getElement();before?(this.columns.splice(parentIndex,0,column),nextEl.parentNode.insertBefore(colEl,nextEl)):(this.columns.splice(parentIndex+1,0,column),nextEl.parentNode.insertBefore(colEl,nextEl.nextSibling))}else before?(this.columns.unshift(column),this.headersElement.insertBefore(column.getElement(),this.headersElement.firstChild)):(this.columns.push(column),this.headersElement.appendChild(column.getElement())),column.columnRendered();return column},ColumnManager.prototype.registerColumnField=function(col){col.definition.field&&(this.columnsByField[col.definition.field]=col)},ColumnManager.prototype.registerColumnPosition=function(col){this.columnsByIndex.push(col)},ColumnManager.prototype._reIndexColumns=function(){this.columnsByIndex=[],this.columns.forEach((function(column){column.reRegisterPosition()}))},ColumnManager.prototype._verticalAlignHeaders=function(){var self=this,minHeight=0;self.columns.forEach((function(column){var height;column.clearVerticalAlign(),(height=column.getHeight())>minHeight&&(minHeight=height)})),self.columns.forEach((function(column){column.verticalAlign(self.table.options.columnHeaderVertAlign,minHeight)})),self.rowManager.adjustTableSize()},ColumnManager.prototype.findColumn=function(subject){var self=this,match;return"object"!=(void 0===subject?"undefined":_typeof(subject))?this.columnsByField[subject]||!1:subject instanceof Column?subject:subject instanceof ColumnComponent?subject._getSelf()||!1:"undefined"!=typeof HTMLElement&&subject instanceof HTMLElement&&this.columns.find((function(column){return column.element===subject}))||!1},ColumnManager.prototype.getColumnByField=function(field){return this.columnsByField[field]},ColumnManager.prototype.getColumnsByFieldRoot=function(root){var _this=this,matches=[];return Object.keys(this.columnsByField).forEach((function(field){var fieldRoot;field.split(".")[0]===root&&matches.push(_this.columnsByField[field])})),matches},ColumnManager.prototype.getColumnByIndex=function(index){return this.columnsByIndex[index]},ColumnManager.prototype.getFirstVisibileColumn=function(index){var index;return(index=this.columnsByIndex.findIndex((function(col){return col.visible})))>-1&&this.columnsByIndex[index]},ColumnManager.prototype.getColumns=function(){return this.columns},ColumnManager.prototype.findColumnIndex=function(column){return this.columnsByIndex.findIndex((function(col){return column===col}))},ColumnManager.prototype.getRealColumns=function(){return this.columnsByIndex},ColumnManager.prototype.traverse=function(callback){var self=this;this.columnsByIndex.forEach((function(column,i){callback(column,i)}))},ColumnManager.prototype.getDefinitions=function(active){var self=this,output=[];return this.columnsByIndex.forEach((function(column){(!active||active&&column.visible)&&output.push(column.getDefinition())})),output},ColumnManager.prototype.getDefinitionTree=function(){var self=this,output=[];return this.columns.forEach((function(column){output.push(column.getDefinition(!0))})),output},ColumnManager.prototype.getComponents=function(structured){var self=this,output=[],columns;return(structured?this.columns:this.columnsByIndex).forEach((function(column){output.push(column.getComponent())})),output},ColumnManager.prototype.getWidth=function(){var width=0;return this.columnsByIndex.forEach((function(column){column.visible&&(width+=column.getWidth())})),width},ColumnManager.prototype.moveColumn=function(from,to,after){this.moveColumnActual(from,to,after),this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.initialize(),this.table.modExists("columnCalcs")&&this.table.modules.columnCalcs.recalc(this.table.rowManager.activeRows),to.element.parentNode.insertBefore(from.element,to.element),after&&to.element.parentNode.insertBefore(to.element,from.element),this._verticalAlignHeaders(),this.table.rowManager.reinitialize()},ColumnManager.prototype.moveColumnActual=function(from,to,after){from.parent.isGroup?this._moveColumnInArray(from.parent.columns,from,to,after):this._moveColumnInArray(this.columns,from,to,after),this._moveColumnInArray(this.columnsByIndex,from,to,after,!0),this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.initialize(),this.table.options.columnMoved&&this.table.options.columnMoved.call(this.table,from.getComponent(),this.table.columnManager.getComponents()),this.table.options.persistence&&this.table.modExists("persistence",!0)&&this.table.modules.persistence.config.columns&&this.table.modules.persistence.save("columns")},ColumnManager.prototype._moveColumnInArray=function(columns,from,to,after,updateRows){var fromIndex=columns.indexOf(from),toIndex;fromIndex>-1&&(columns.splice(fromIndex,1),(toIndex=columns.indexOf(to))>-1?after&&(toIndex+=1):toIndex=fromIndex,columns.splice(toIndex,0,from),updateRows&&this.table.rowManager.rows.forEach((function(row){if(row.cells.length){var cell=row.cells.splice(fromIndex,1)[0];row.cells.splice(toIndex,0,cell)}})))},ColumnManager.prototype.scrollToColumn=function(column,position,ifVisible){var _this2=this,left=0,offset=0,adjust=0,colEl=column.getElement();return new Promise((function(resolve,reject){if(void 0===position&&(position=_this2.table.options.scrollToColumnPosition),void 0===ifVisible&&(ifVisible=_this2.table.options.scrollToColumnIfVisible),column.visible){switch(position){case"middle":case"center":adjust=-_this2.element.clientWidth/2;break;case"right":adjust=colEl.clientWidth-_this2.headersElement.clientWidth}if(!ifVisible&&(offset=colEl.offsetLeft)>0&&offset+colEl.offsetWidth<_this2.element.clientWidth)return!1;left=colEl.offsetLeft+_this2.element.scrollLeft+adjust,left=Math.max(Math.min(left,_this2.table.rowManager.element.scrollWidth-_this2.table.rowManager.element.clientWidth),0),_this2.table.rowManager.scrollHorizontal(left),_this2.scrollHorizontal(left),resolve()}else console.warn("Scroll Error - Column not visible"),reject("Scroll Error - Column not visible")}))},ColumnManager.prototype.generateCells=function(row){var self=this,cells=[];return this.columnsByIndex.forEach((function(column){cells.push(column.generateCell(row))})),cells},ColumnManager.prototype.getFlexBaseWidth=function(){var self=this,totalWidth=self.table.element.clientWidth,fixedWidth=0;return self.rowManager.element.scrollHeight>self.rowManager.element.clientHeight&&(totalWidth-=self.rowManager.element.offsetWidth-self.rowManager.element.clientWidth),this.columnsByIndex.forEach((function(column){var width,minWidth,colWidth;column.visible&&(width=column.definition.width||0,minWidth=void 0===column.minWidth?self.table.options.columnMinWidth:parseInt(column.minWidth),colWidth="string"==typeof width?width.indexOf("%")>-1?totalWidth/100*parseInt(width):parseInt(width):width,fixedWidth+=colWidth>minWidth?colWidth:minWidth)})),fixedWidth},ColumnManager.prototype.addColumn=function(definition,before,nextToColumn){var _this3=this;return new Promise((function(resolve,reject){var column=_this3._addColumn(definition,before,nextToColumn);_this3._reIndexColumns(),_this3.table.options.responsiveLayout&&_this3.table.modExists("responsiveLayout",!0)&&_this3.table.modules.responsiveLayout.initialize(),_this3.table.modExists("columnCalcs")&&_this3.table.modules.columnCalcs.recalc(_this3.table.rowManager.activeRows),_this3.redraw(),"fitColumns"!=_this3.table.modules.layout.getMode()&&column.reinitializeWidth(),_this3._verticalAlignHeaders(),_this3.table.rowManager.reinitialize(),resolve(column)}))},ColumnManager.prototype.deregisterColumn=function(column){var field=column.getField(),index;field&&delete this.columnsByField[field],(index=this.columnsByIndex.indexOf(column))>-1&&this.columnsByIndex.splice(index,1),(index=this.columns.indexOf(column))>-1&&this.columns.splice(index,1),this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.initialize(),this.redraw()},ColumnManager.prototype.redraw=function(force){force&&(Tabulator.prototype.helpers.elVisible(this.element)&&this._verticalAlignHeaders(),this.table.rowManager.resetScroll(),this.table.rowManager.reinitialize()),["fitColumns","fitDataStretch"].indexOf(this.table.modules.layout.getMode())>-1?this.table.modules.layout.layout():force?this.table.modules.layout.layout():this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.update(),this.table.modExists("frozenColumns")&&this.table.modules.frozenColumns.layout(),this.table.modExists("columnCalcs")&&this.table.modules.columnCalcs.recalc(this.table.rowManager.activeRows),force&&(this.table.options.persistence&&this.table.modExists("persistence",!0)&&this.table.modules.persistence.config.columns&&this.table.modules.persistence.save("columns"),this.table.modExists("columnCalcs")&&this.table.modules.columnCalcs.redraw()),this.table.footerManager.redraw()};var ColumnComponent=function ColumnComponent(column){this._column=column,this.type="ColumnComponent"};ColumnComponent.prototype.getElement=function(){return this._column.getElement()},ColumnComponent.prototype.getDefinition=function(){return this._column.getDefinition()},ColumnComponent.prototype.getField=function(){return this._column.getField()},ColumnComponent.prototype.getCells=function(){var cells=[];return this._column.cells.forEach((function(cell){cells.push(cell.getComponent())})),cells},ColumnComponent.prototype.getVisibility=function(){return console.warn("getVisibility function is deprecated, you should now use the isVisible function"),this._column.visible},ColumnComponent.prototype.isVisible=function(){return this._column.visible},ColumnComponent.prototype.show=function(){this._column.isGroup?this._column.columns.forEach((function(column){column.show()})):this._column.show()},ColumnComponent.prototype.hide=function(){this._column.isGroup?this._column.columns.forEach((function(column){column.hide()})):this._column.hide()},ColumnComponent.prototype.toggle=function(){this._column.visible?this.hide():this.show()},ColumnComponent.prototype.delete=function(){return this._column.delete()},ColumnComponent.prototype.getSubColumns=function(){var output=[];return this._column.columns.length&&this._column.columns.forEach((function(column){output.push(column.getComponent())})),output},ColumnComponent.prototype.getParentColumn=function(){return this._column.parent instanceof Column&&this._column.parent.getComponent()},ColumnComponent.prototype._getSelf=function(){return this._column},ColumnComponent.prototype.scrollTo=function(){return this._column.table.columnManager.scrollToColumn(this._column)},ColumnComponent.prototype.getTable=function(){return this._column.table},ColumnComponent.prototype.headerFilterFocus=function(){this._column.table.modExists("filter",!0)&&this._column.table.modules.filter.setHeaderFilterFocus(this._column)},ColumnComponent.prototype.reloadHeaderFilter=function(){this._column.table.modExists("filter",!0)&&this._column.table.modules.filter.reloadHeaderFilter(this._column)},ColumnComponent.prototype.getHeaderFilterValue=function(){if(this._column.table.modExists("filter",!0))return this._column.table.modules.filter.getHeaderFilterValue(this._column)},ColumnComponent.prototype.setHeaderFilterValue=function(value){this._column.table.modExists("filter",!0)&&this._column.table.modules.filter.setHeaderFilterValue(this._column,value)},ColumnComponent.prototype.move=function(to,after){var toColumn=this._column.table.columnManager.findColumn(to);toColumn?this._column.table.columnManager.moveColumn(this._column,toColumn,after):console.warn("Move Error - No matching column found:",toColumn)},ColumnComponent.prototype.getNextColumn=function(){var nextCol=this._column.nextColumn();return!!nextCol&&nextCol.getComponent()},ColumnComponent.prototype.getPrevColumn=function(){var prevCol=this._column.prevColumn();return!!prevCol&&prevCol.getComponent()},ColumnComponent.prototype.updateDefinition=function(updates){return this._column.updateDefinition(updates)},ColumnComponent.prototype.getWidth=function(){return this._column.getWidth()},ColumnComponent.prototype.setWidth=function(width){return!0===width?this._column.reinitializeWidth(!0):this._column.setWidth(width)},ColumnComponent.prototype.validate=function(){return this._column.validate()};var Column=function Column(def,parent){var self=this;this.table=parent.table,this.definition=def,this.parent=parent,this.type="column",this.columns=[],this.cells=[],this.element=this.createElement(),this.contentElement=!1,this.titleElement=!1,this.groupElement=this.createGroupElement(),this.isGroup=!1,this.tooltip=!1,this.hozAlign="",this.vertAlign="",this.field="",this.fieldStructure="",this.getFieldValue="",this.setFieldValue="",this.titleFormatterRendered=!1,this.setField(this.definition.field),this.table.options.invalidOptionWarnings&&this.checkDefinition(),this.modules={},this.cellEvents={cellClick:!1,cellDblClick:!1,cellContext:!1,cellTap:!1,cellDblTap:!1,cellTapHold:!1,cellMouseEnter:!1,cellMouseLeave:!1,cellMouseOver:!1,cellMouseOut:!1,cellMouseMove:!1},this.width=null,this.widthStyled="",this.minWidth=null,this.minWidthStyled="",this.widthFixed=!1,this.visible=!0,this.component=null,this._mapDepricatedFunctionality(),def.columns?(this.isGroup=!0,def.columns.forEach((function(def,i){var newCol=new Column(def,self);self.attachColumn(newCol)})),self.checkColumnVisibility()):parent.registerColumnField(this),def.rowHandle&&!1!==this.table.options.movableRows&&this.table.modExists("moveRow")&&this.table.modules.moveRow.setHandle(!0),this._buildHeader(),this.bindModuleColumns()};Column.prototype.createElement=function(){var el=document.createElement("div");return el.classList.add("tabulator-col"),el.setAttribute("role","columnheader"),el.setAttribute("aria-sort","none"),el},Column.prototype.createGroupElement=function(){var el=document.createElement("div");return el.classList.add("tabulator-col-group-cols"),el},Column.prototype.checkDefinition=function(){var _this4=this;Object.keys(this.definition).forEach((function(key){-1===_this4.defaultOptionList.indexOf(key)&&console.warn("Invalid column definition option in '"+(_this4.field||_this4.definition.title)+"' column:",key)}))},Column.prototype.setField=function(field){this.field=field,this.fieldStructure=field?this.table.options.nestedFieldSeparator?field.split(this.table.options.nestedFieldSeparator):[field]:[],this.getFieldValue=this.fieldStructure.length>1?this._getNestedData:this._getFlatData,this.setFieldValue=this.fieldStructure.length>1?this._setNestedData:this._setFlatData},Column.prototype.registerColumnPosition=function(column){this.parent.registerColumnPosition(column)},Column.prototype.registerColumnField=function(column){this.parent.registerColumnField(column)},Column.prototype.reRegisterPosition=function(){this.isGroup?this.columns.forEach((function(column){column.reRegisterPosition()})):this.registerColumnPosition(this)},Column.prototype._mapDepricatedFunctionality=function(){void 0!==this.definition.hideInHtml&&(this.definition.htmlOutput=!this.definition.hideInHtml,console.warn("hideInHtml column definition property is deprecated, you should now use htmlOutput")),void 0!==this.definition.align&&(this.definition.hozAlign=this.definition.align,console.warn("align column definition property is deprecated, you should now use hozAlign")),void 0!==this.definition.downloadTitle&&(this.definition.titleDownload=this.definition.downloadTitle,console.warn("downloadTitle definition property is deprecated, you should now use titleDownload"))},Column.prototype.setTooltip=function(){var self=this,def=self.definition,tooltip=def.headerTooltip||!1===def.tooltip?def.headerTooltip:self.table.options.tooltipsHeader;tooltip?!0===tooltip?def.field?self.table.modules.localize.bind("columns|"+def.field,(function(value){self.element.setAttribute("title",value||def.title)})):self.element.setAttribute("title",def.title):("function"==typeof tooltip&&!1===(tooltip=tooltip(self.getComponent()))&&(tooltip=""),self.element.setAttribute("title",tooltip)):self.element.setAttribute("title","")},Column.prototype._buildHeader=function(){for(var self=this,def=self.definition;self.element.firstChild;)self.element.removeChild(self.element.firstChild);def.headerVertical&&(self.element.classList.add("tabulator-col-vertical"),"flip"===def.headerVertical&&self.element.classList.add("tabulator-col-vertical-flip")),self.contentElement=self._bindEvents(),self.contentElement=self._buildColumnHeaderContent(),self.element.appendChild(self.contentElement),self.isGroup?self._buildGroupHeader():self._buildColumnHeader(),self.setTooltip(),self.table.options.resizableColumns&&self.table.modExists("resizeColumns")&&self.table.modules.resizeColumns.initializeColumn("header",self,self.element),def.headerFilter&&self.table.modExists("filter")&&self.table.modExists("edit")&&(void 0!==def.headerFilterPlaceholder&&def.field&&self.table.modules.localize.setHeaderFilterColumnPlaceholder(def.field,def.headerFilterPlaceholder),self.table.modules.filter.initializeColumn(self)),self.table.modExists("frozenColumns")&&self.table.modules.frozenColumns.initializeColumn(self),self.table.options.movableColumns&&!self.isGroup&&self.table.modExists("moveColumn")&&self.table.modules.moveColumn.initializeColumn(self),(def.topCalc||def.bottomCalc)&&self.table.modExists("columnCalcs")&&self.table.modules.columnCalcs.initializeColumn(self),self.table.modExists("persistence")&&self.table.modules.persistence.config.columns&&self.table.modules.persistence.initializeColumn(self),self.element.addEventListener("mouseenter",(function(e){self.setTooltip()}))},Column.prototype._bindEvents=function(){var self=this,def=self.definition,dblTap,tapHold,tap;"function"==typeof def.headerClick&&self.element.addEventListener("click",(function(e){def.headerClick(e,self.getComponent())})),"function"==typeof def.headerDblClick&&self.element.addEventListener("dblclick",(function(e){def.headerDblClick(e,self.getComponent())})),"function"==typeof def.headerContext&&self.element.addEventListener("contextmenu",(function(e){def.headerContext(e,self.getComponent())})),"function"==typeof def.headerTap&&(tap=!1,self.element.addEventListener("touchstart",(function(e){tap=!0}),{passive:!0}),self.element.addEventListener("touchend",(function(e){tap&&def.headerTap(e,self.getComponent()),tap=!1}))),"function"==typeof def.headerDblTap&&(dblTap=null,self.element.addEventListener("touchend",(function(e){dblTap?(clearTimeout(dblTap),dblTap=null,def.headerDblTap(e,self.getComponent())):dblTap=setTimeout((function(){clearTimeout(dblTap),dblTap=null}),300)}))),"function"==typeof def.headerTapHold&&(tapHold=null,self.element.addEventListener("touchstart",(function(e){clearTimeout(tapHold),tapHold=setTimeout((function(){clearTimeout(tapHold),tapHold=null,tap=!1,def.headerTapHold(e,self.getComponent())}),1e3)}),{passive:!0}),self.element.addEventListener("touchend",(function(e){clearTimeout(tapHold),tapHold=null}))),"function"==typeof def.cellClick&&(self.cellEvents.cellClick=def.cellClick),"function"==typeof def.cellDblClick&&(self.cellEvents.cellDblClick=def.cellDblClick),"function"==typeof def.cellContext&&(self.cellEvents.cellContext=def.cellContext),"function"==typeof def.cellMouseEnter&&(self.cellEvents.cellMouseEnter=def.cellMouseEnter),"function"==typeof def.cellMouseLeave&&(self.cellEvents.cellMouseLeave=def.cellMouseLeave),"function"==typeof def.cellMouseOver&&(self.cellEvents.cellMouseOver=def.cellMouseOver),"function"==typeof def.cellMouseOut&&(self.cellEvents.cellMouseOut=def.cellMouseOut),"function"==typeof def.cellMouseMove&&(self.cellEvents.cellMouseMove=def.cellMouseMove),"function"==typeof def.cellTap&&(self.cellEvents.cellTap=def.cellTap),"function"==typeof def.cellDblTap&&(self.cellEvents.cellDblTap=def.cellDblTap),"function"==typeof def.cellTapHold&&(self.cellEvents.cellTapHold=def.cellTapHold),"function"==typeof def.cellEdited&&(self.cellEvents.cellEdited=def.cellEdited),"function"==typeof def.cellEditing&&(self.cellEvents.cellEditing=def.cellEditing),"function"==typeof def.cellEditCancelled&&(self.cellEvents.cellEditCancelled=def.cellEditCancelled)},Column.prototype._buildColumnHeader=function(){var self=this,def=self.definition,table=self.table,sortable,classeNames;(table.modExists("sort")&&table.modules.sort.initializeColumn(self,self.contentElement),(def.headerContextMenu||def.headerMenu)&&table.modExists("menu")&&table.modules.menu.initializeColumnHeader(self),table.modExists("format")&&table.modules.format.initializeColumn(self),void 0!==def.editor&&table.modExists("edit")&&table.modules.edit.initializeColumn(self),void 0!==def.validator&&table.modExists("validate")&&table.modules.validate.initializeColumn(self),table.modExists("mutator")&&table.modules.mutator.initializeColumn(self),table.modExists("accessor")&&table.modules.accessor.initializeColumn(self),_typeof(table.options.responsiveLayout)&&table.modExists("responsiveLayout")&&table.modules.responsiveLayout.initializeColumn(self),void 0!==def.visible&&(def.visible?self.show(!0):self.hide(!0)),def.cssClass)&&def.cssClass.split(" ").forEach((function(className){self.element.classList.add(className)}));def.field&&this.element.setAttribute("tabulator-field",def.field),self.setMinWidth(void 0===def.minWidth?self.table.options.columnMinWidth:parseInt(def.minWidth)),self.reinitializeWidth(),self.tooltip=self.definition.tooltip||!1===self.definition.tooltip?self.definition.tooltip:self.table.options.tooltips,self.hozAlign=void 0===self.definition.hozAlign?self.table.options.cellHozAlign:self.definition.hozAlign,self.vertAlign=void 0===self.definition.vertAlign?self.table.options.cellVertAlign:self.definition.vertAlign},Column.prototype._buildColumnHeaderContent=function(){var def=this.definition,table=this.table,contentElement=document.createElement("div");return contentElement.classList.add("tabulator-col-content"),this.titleElement=this._buildColumnHeaderTitle(),contentElement.appendChild(this.titleElement),contentElement},Column.prototype._buildColumnHeaderTitle=function(){var self=this,def=self.definition,table=self.table,title,titleHolderElement=document.createElement("div");if(titleHolderElement.classList.add("tabulator-col-title"),def.editableTitle){var titleElement=document.createElement("input");titleElement.classList.add("tabulator-title-editor"),titleElement.addEventListener("click",(function(e){e.stopPropagation(),titleElement.focus()})),titleElement.addEventListener("change",(function(){def.title=titleElement.value,table.options.columnTitleChanged.call(self.table,self.getComponent())})),titleHolderElement.appendChild(titleElement),def.field?table.modules.localize.bind("columns|"+def.field,(function(text){titleElement.value=text||def.title||"&nbsp;"})):titleElement.value=def.title||"&nbsp;"}else def.field?table.modules.localize.bind("columns|"+def.field,(function(text){self._formatColumnHeaderTitle(titleHolderElement,text||def.title||"&nbsp;")})):self._formatColumnHeaderTitle(titleHolderElement,def.title||"&nbsp;");return titleHolderElement},Column.prototype._formatColumnHeaderTitle=function(el,title){var _this5=this,formatter,contents,params,mockCell,onRendered;if(this.definition.titleFormatter&&this.table.modExists("format"))switch(formatter=this.table.modules.format.getFormatter(this.definition.titleFormatter),onRendered=function onRendered(callback){_this5.titleFormatterRendered=callback},mockCell={getValue:function getValue(){return title},getElement:function getElement(){return el}},params="function"==typeof(params=this.definition.titleFormatterParams||{})?params():params,void 0===(contents=formatter.call(this.table.modules.format,mockCell,params,onRendered))?"undefined":_typeof(contents)){case"object":contents instanceof Node?el.appendChild(contents):(el.innerHTML="",console.warn("Format Error - Title formatter has returned a type of object, the only valid formatter object return is an instance of Node, the formatter returned:",contents));break;case"undefined":case"null":el.innerHTML="";break;default:el.innerHTML=contents}else el.innerHTML=title},Column.prototype._buildGroupHeader=function(){var _this6=this,classeNames;(this.element.classList.add("tabulator-col-group"),this.element.setAttribute("role","columngroup"),this.element.setAttribute("aria-title",this.definition.title),this.definition.cssClass)&&this.definition.cssClass.split(" ").forEach((function(className){_this6.element.classList.add(className)}));(this.definition.headerContextMenu||this.definition.headerMenu)&&this.table.modExists("menu")&&this.table.modules.menu.initializeColumnHeader(this),this.element.appendChild(this.groupElement)},Column.prototype._getFlatData=function(data){return data[this.field]},Column.prototype._getNestedData=function(data){for(var dataObj=data,structure=this.fieldStructure,length=structure.length,output,_i=0;_i<length&&(output=dataObj=dataObj[structure[_i]],dataObj);_i++);return output},Column.prototype._setFlatData=function(data,value){this.field&&(data[this.field]=value)},Column.prototype._setNestedData=function(data,value){for(var dataObj=data,structure=this.fieldStructure,length=structure.length,_i2=0;_i2<length;_i2++)if(_i2==length-1)dataObj[structure[_i2]]=value;else{if(!dataObj[structure[_i2]]){if(void 0===value)break;dataObj[structure[_i2]]={}}dataObj=dataObj[structure[_i2]]}},Column.prototype.attachColumn=function(column){var self=this;this.groupElement?(this.columns.push(column),this.groupElement.appendChild(column.getElement())):console.warn("Column Warning - Column being attached to another column instead of column group")},Column.prototype.verticalAlign=function(alignment,height){var parentHeight=this.parent.isGroup?this.parent.getGroupElement().clientHeight:height||this.parent.getHeadersElement().clientHeight;this.element.style.height=parentHeight+"px",this.isGroup&&(this.groupElement.style.minHeight=parentHeight-this.contentElement.offsetHeight+"px"),this.isGroup||"top"===alignment||(this.element.style.paddingTop="bottom"===alignment?this.element.clientHeight-this.contentElement.offsetHeight+"px":(this.element.clientHeight-this.contentElement.offsetHeight)/2+"px"),this.columns.forEach((function(column){column.verticalAlign(alignment)}))},Column.prototype.clearVerticalAlign=function(){this.element.style.paddingTop="",this.element.style.height="",this.element.style.minHeight="",this.groupElement.style.minHeight="",this.columns.forEach((function(column){column.clearVerticalAlign()}))},Column.prototype.bindModuleColumns=function(){"rownum"==this.definition.formatter&&(this.table.rowManager.rowNumColumn=this)},Column.prototype.getElement=function(){return this.element},Column.prototype.getGroupElement=function(){return this.groupElement},Column.prototype.getField=function(){return this.field},Column.prototype.getFirstColumn=function(){return this.isGroup?!!this.columns.length&&this.columns[0].getFirstColumn():this},Column.prototype.getLastColumn=function(){return this.isGroup?!!this.columns.length&&this.columns[this.columns.length-1].getLastColumn():this},Column.prototype.getColumns=function(){return this.columns},Column.prototype.getCells=function(){return this.cells},Column.prototype.getTopColumn=function(){return this.parent.isGroup?this.parent.getTopColumn():this},Column.prototype.getDefinition=function(updateBranches){var colDefs=[];return this.isGroup&&updateBranches&&(this.columns.forEach((function(column){colDefs.push(column.getDefinition(!0))})),this.definition.columns=colDefs),this.definition},Column.prototype.checkColumnVisibility=function(){var visible=!1;this.columns.forEach((function(column){column.visible&&(visible=!0)})),visible?(this.show(),this.parent.table.options.columnVisibilityChanged.call(this.table,this.getComponent(),!1)):this.hide()},Column.prototype.show=function(silent,responsiveToggle){this.visible||(this.visible=!0,this.element.style.display="",this.parent.isGroup&&this.parent.checkColumnVisibility(),this.cells.forEach((function(cell){cell.show()})),this.isGroup||null!==this.width||this.reinitializeWidth(),this.table.columnManager._verticalAlignHeaders(),this.table.options.persistence&&this.table.modExists("persistence",!0)&&this.table.modules.persistence.config.columns&&this.table.modules.persistence.save("columns"),!responsiveToggle&&this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.updateColumnVisibility(this,this.visible),silent||this.table.options.columnVisibilityChanged.call(this.table,this.getComponent(),!0),this.parent.isGroup&&this.parent.matchChildWidths())},Column.prototype.hide=function(silent,responsiveToggle){this.visible&&(this.visible=!1,this.element.style.display="none",this.table.columnManager._verticalAlignHeaders(),this.parent.isGroup&&this.parent.checkColumnVisibility(),this.cells.forEach((function(cell){cell.hide()})),this.table.options.persistence&&this.table.modExists("persistence",!0)&&this.table.modules.persistence.config.columns&&this.table.modules.persistence.save("columns"),!responsiveToggle&&this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.updateColumnVisibility(this,this.visible),silent||this.table.options.columnVisibilityChanged.call(this.table,this.getComponent(),!1),this.parent.isGroup&&this.parent.matchChildWidths())},Column.prototype.matchChildWidths=function(){var childWidth=0;this.contentElement&&this.columns.length&&(this.columns.forEach((function(column){column.visible&&(childWidth+=column.getWidth())})),this.contentElement.style.maxWidth=childWidth-1+"px",this.parent.isGroup&&this.parent.matchChildWidths())},Column.prototype.setWidth=function(width){this.widthFixed=!0,this.setWidthActual(width)},Column.prototype.setWidthActual=function(width){isNaN(width)&&(width=Math.floor(this.table.element.clientWidth/100*parseInt(width))),width=Math.max(this.minWidth,width),this.width=width,this.widthStyled=width?width+"px":"",this.element.style.width=this.widthStyled,this.isGroup||this.cells.forEach((function(cell){cell.setWidth()})),this.parent.isGroup&&this.parent.matchChildWidths(),this.table.modExists("frozenColumns")&&this.table.modules.frozenColumns.layout()},Column.prototype.checkCellHeights=function(){var rows=[];this.cells.forEach((function(cell){cell.row.heightInitialized&&(null!==cell.row.getElement().offsetParent?(rows.push(cell.row),cell.row.clearCellHeight()):cell.row.heightInitialized=!1)})),rows.forEach((function(row){row.calcHeight()})),rows.forEach((function(row){row.setCellHeight()}))},Column.prototype.getWidth=function(){var width=0;return this.isGroup?this.columns.forEach((function(column){column.visible&&(width+=column.getWidth())})):width=this.width,width},Column.prototype.getHeight=function(){return this.element.offsetHeight},Column.prototype.setMinWidth=function(minWidth){this.minWidth=minWidth,this.minWidthStyled=minWidth?minWidth+"px":"",this.element.style.minWidth=this.minWidthStyled,this.cells.forEach((function(cell){cell.setMinWidth()}))},Column.prototype.delete=function(){var _this7=this;return new Promise((function(resolve,reject){_this7.isGroup&&_this7.columns.forEach((function(column){column.delete()})),_this7.table.modExists("edit")&&_this7.table.modules.edit.currentCell.column===_this7&&_this7.table.modules.edit.cancelEdit();for(var cellCount=_this7.cells.length,_i3=0;_i3<cellCount;_i3++)_this7.cells[0].delete();_this7.element.parentNode.removeChild(_this7.element),_this7.table.columnManager.deregisterColumn(_this7),resolve()}))},Column.prototype.columnRendered=function(){this.titleFormatterRendered&&this.titleFormatterRendered()},Column.prototype.validate=function(){var invalid=[];return this.cells.forEach((function(cell){cell.validate()||invalid.push(cell.getComponent())})),!invalid.length||invalid},Column.prototype.generateCell=function(row){var self=this,cell=new Cell(this,row);return this.cells.push(cell),cell},Column.prototype.nextColumn=function(){var index=this.table.columnManager.findColumnIndex(this);return index>-1&&this._nextVisibleColumn(index+1)},Column.prototype._nextVisibleColumn=function(index){var column=this.table.columnManager.getColumnByIndex(index);return!column||column.visible?column:this._nextVisibleColumn(index+1)},Column.prototype.prevColumn=function(){var index=this.table.columnManager.findColumnIndex(this);return index>-1&&this._prevVisibleColumn(index-1)},Column.prototype._prevVisibleColumn=function(index){var column=this.table.columnManager.getColumnByIndex(index);return!column||column.visible?column:this._prevVisibleColumn(index-1)},Column.prototype.reinitializeWidth=function(force){this.widthFixed=!1,void 0===this.definition.width||force||this.setWidth(this.definition.width),this.table.modExists("filter")&&this.table.modules.filter.hideHeaderFilterElements(),this.fitToData(),this.table.modExists("filter")&&this.table.modules.filter.showHeaderFilterElements()},Column.prototype.fitToData=function(){var self=this;this.widthFixed||(this.element.style.width="",this.cells.forEach((function(cell){cell.clearWidth()})));var maxWidth=this.element.offsetWidth;this.width&&this.widthFixed||(this.cells.forEach((function(cell){var width=cell.getWidth();width>maxWidth&&(maxWidth=width)})),maxWidth&&this.setWidthActual(maxWidth+1))},Column.prototype.updateDefinition=function(updates){var _this8=this;return new Promise((function(resolve,reject){var definition;_this8.isGroup?(console.warn("Column Update Error - The updateDefintion function is only available on columns, not column groups"),reject("Column Update Error - The updateDefintion function is only available on columns, not column groups")):(definition=Object.assign({},_this8.getDefinition()),definition=Object.assign(definition,updates),_this8.table.columnManager.addColumn(definition,!1,_this8).then((function(column){definition.field==_this8.field&&(_this8.field=!1),_this8.delete().then((function(){resolve(column.getComponent())})).catch((function(err){reject(err)}))})).catch((function(err){reject(err)})))}))},Column.prototype.deleteCell=function(cell){var index=this.cells.indexOf(cell);index>-1&&this.cells.splice(index,1)},Column.prototype.defaultOptionList=["title","field","columns","visible","align","hozAlign","vertAlign","width","minWidth","widthGrow","widthShrink","resizable","frozen","responsive","tooltip","cssClass","rowHandle","hideInHtml","print","htmlOutput","sorter","sorterParams","formatter","formatterParams","variableHeight","editable","editor","editorParams","validator","mutator","mutatorParams","mutatorData","mutatorDataParams","mutatorEdit","mutatorEditParams","mutatorClipboard","mutatorClipboardParams","accessor","accessorParams","accessorData","accessorDataParams","accessorDownload","accessorDownloadParams","accessorClipboard","accessorClipboardParams","accessorPrint","accessorPrintParams","accessorHtmlOutput","accessorHtmlOutputParams","clipboard","download","downloadTitle","topCalc","topCalcParams","topCalcFormatter","topCalcFormatterParams","bottomCalc","bottomCalcParams","bottomCalcFormatter","bottomCalcFormatterParams","cellClick","cellDblClick","cellContext","cellTap","cellDblTap","cellTapHold","cellMouseEnter","cellMouseLeave","cellMouseOver","cellMouseOut","cellMouseMove","cellEditing","cellEdited","cellEditCancelled","headerSort","headerSortStartingDir","headerSortTristate","headerClick","headerDblClick","headerContext","headerTap","headerDblTap","headerTapHold","headerTooltip","headerVertical","editableTitle","titleFormatter","titleFormatterParams","headerFilter","headerFilterPlaceholder","headerFilterParams","headerFilterEmptyCheck","headerFilterFunc","headerFilterFuncParams","headerFilterLiveFilter","print","headerContextMenu","headerMenu","contextMenu","formatterPrint","formatterPrintParams","formatterClipboard","formatterClipboardParams","formatterHtmlOutput","formatterHtmlOutputParams","titlePrint","titleClipboard","titleHtmlOutput","titleDownload"],Column.prototype.getComponent=function(){return this.component||(this.component=new ColumnComponent(this)),this.component};var RowManager=function RowManager(table){this.table=table,this.element=this.createHolderElement(),this.tableElement=this.createTableElement(),this.heightFixer=this.createTableElement(),this.columnManager=null,this.height=0,this.firstRender=!1,this.renderMode="virtual",this.fixedHeight=!1,this.rows=[],this.activeRows=[],this.activeRowsCount=0,this.displayRows=[],this.displayRowsCount=0,this.scrollTop=0,this.scrollLeft=0,this.vDomRowHeight=20,this.vDomTop=0,this.vDomBottom=0,this.vDomScrollPosTop=0,this.vDomScrollPosBottom=0,this.vDomTopPad=0,this.vDomBottomPad=0,this.vDomMaxRenderChain=90,this.vDomWindowBuffer=0,this.vDomWindowMinTotalRows=20,this.vDomWindowMinMarginRows=5,this.vDomTopNewRows=[],this.vDomBottomNewRows=[],this.rowNumColumn=!1,this.redrawBlock=!1,this.redrawBlockRestoreConfig=!1,this.redrawBlockRederInPosition=!1};RowManager.prototype.createHolderElement=function(){var el=document.createElement("div");return el.classList.add("tabulator-tableHolder"),el.setAttribute("tabindex",0),el},RowManager.prototype.createTableElement=function(){var el=document.createElement("div");return el.classList.add("tabulator-table"),el},RowManager.prototype.getElement=function(){return this.element},RowManager.prototype.getTableElement=function(){return this.tableElement},RowManager.prototype.getRowPosition=function(row,active){return active?this.activeRows.indexOf(row):this.rows.indexOf(row)},RowManager.prototype.setColumnManager=function(manager){this.columnManager=manager},RowManager.prototype.initialize=function(){var self=this;self.setRenderMode(),self.element.appendChild(self.tableElement),self.firstRender=!0,self.element.addEventListener("scroll",(function(){var left=self.element.scrollLeft;self.scrollLeft!=left&&(self.columnManager.scrollHorizontal(left),self.table.options.groupBy&&self.table.modules.groupRows.scrollHeaders(left),self.table.modExists("columnCalcs")&&self.table.modules.columnCalcs.scrollHorizontal(left),self.table.options.scrollHorizontal(left)),self.scrollLeft=left})),"virtual"===this.renderMode&&self.element.addEventListener("scroll",(function(){var top=self.element.scrollTop,dir=self.scrollTop>top;self.scrollTop!=top?(self.scrollTop=top,self.scrollVertical(dir),"scroll"==self.table.options.ajaxProgressiveLoad&&self.table.modules.ajax.nextPage(self.element.scrollHeight-self.element.clientHeight-top),self.table.options.scrollVertical(top)):self.scrollTop=top}))},RowManager.prototype.findRow=function(subject){var self=this,_match,match;return"object"!=(void 0===subject?"undefined":_typeof(subject))?null!=subject&&(self.rows.find((function(row){return row.data[self.table.options.index]==subject}))||!1):subject instanceof Row?subject:subject instanceof RowComponent?subject._getSelf()||!1:"undefined"!=typeof HTMLElement&&subject instanceof HTMLElement&&self.rows.find((function(row){return row.element===subject}))||!1},RowManager.prototype.getRowFromDataObject=function(data){var match;return this.rows.find((function(row){return row.data===data}))||!1},RowManager.prototype.getRowFromPosition=function(position,active){return active?this.activeRows[position]:this.rows[position]},RowManager.prototype.scrollToRow=function(row,position,ifVisible){var _this9=this,rowIndex=this.getDisplayRows().indexOf(row),rowEl=row.getElement(),rowTop,offset=0;return new Promise((function(resolve,reject){if(rowIndex>-1){if(void 0===position&&(position=_this9.table.options.scrollToRowPosition),void 0===ifVisible&&(ifVisible=_this9.table.options.scrollToRowIfVisible),"nearest"===position)switch(_this9.renderMode){case"classic":rowTop=Tabulator.prototype.helpers.elOffset(rowEl).top,position=Math.abs(_this9.element.scrollTop-rowTop)>Math.abs(_this9.element.scrollTop+_this9.element.clientHeight-rowTop)?"bottom":"top";break;case"virtual":position=Math.abs(_this9.vDomTop-rowIndex)>Math.abs(_this9.vDomBottom-rowIndex)?"bottom":"top"}if(!ifVisible&&Tabulator.prototype.helpers.elVisible(rowEl)&&(offset=Tabulator.prototype.helpers.elOffset(rowEl).top-Tabulator.prototype.helpers.elOffset(_this9.element).top)>0&&offset<_this9.element.clientHeight-rowEl.offsetHeight)return!1;switch(_this9.renderMode){case"classic":_this9.element.scrollTop=Tabulator.prototype.helpers.elOffset(rowEl).top-Tabulator.prototype.helpers.elOffset(_this9.element).top+_this9.element.scrollTop;break;case"virtual":_this9._virtualRenderFill(rowIndex,!0)}switch(position){case"middle":case"center":_this9.element.scrollHeight-_this9.element.scrollTop==_this9.element.clientHeight?_this9.element.scrollTop=_this9.element.scrollTop+(rowEl.offsetTop-_this9.element.scrollTop)-(_this9.element.scrollHeight-rowEl.offsetTop)/2:_this9.element.scrollTop=_this9.element.scrollTop-_this9.element.clientHeight/2;break;case"bottom":_this9.element.scrollHeight-_this9.element.scrollTop==_this9.element.clientHeight?_this9.element.scrollTop=_this9.element.scrollTop-(_this9.element.scrollHeight-rowEl.offsetTop)+rowEl.offsetHeight:_this9.element.scrollTop=_this9.element.scrollTop-_this9.element.clientHeight+rowEl.offsetHeight}resolve()}else console.warn("Scroll Error - Row not visible"),reject("Scroll Error - Row not visible")}))},RowManager.prototype.setData=function(data,renderInPosition,columnsChanged){var _this10=this,self=this;return new Promise((function(resolve,reject){renderInPosition&&_this10.getDisplayRows().length?self.table.options.pagination?self._setDataActual(data,!0):_this10.reRenderInPosition((function(){self._setDataActual(data)})):(_this10.table.options.autoColumns&&columnsChanged&&_this10.table.columnManager.generateColumnsFromRowData(data),_this10.resetScroll(),_this10._setDataActual(data)),resolve()}))},RowManager.prototype._setDataActual=function(data,renderInPosition){var self=this;self.table.options.dataLoading.call(this.table,data),this._wipeElements(),this.table.options.history&&this.table.modExists("history")&&this.table.modules.history.clear(),Array.isArray(data)?(this.table.modExists("selectRow")&&this.table.modules.selectRow.clearSelectionData(),this.table.options.reactiveData&&this.table.modExists("reactiveData",!0)&&this.table.modules.reactiveData.watchData(data),data.forEach((function(def,i){if(def&&"object"===(void 0===def?"undefined":_typeof(def))){var row=new Row(def,self);self.rows.push(row)}else console.warn("Data Loading Warning - Invalid row data detected and ignored, expecting object but received:",def)})),self.table.options.dataLoaded.call(this.table,data),self.refreshActiveData(!1,!1,renderInPosition)):console.error("Data Loading Error - Unable to process data due to invalid data type \nExpecting: array \nReceived: ",void 0===data?"undefined":_typeof(data),"\nData:     ",data)},RowManager.prototype._wipeElements=function(){this.rows.forEach((function(row){row.wipe()})),this.table.options.groupBy&&this.table.modExists("groupRows")&&this.table.modules.groupRows.wipe(),this.rows=[]},RowManager.prototype.deleteRow=function(row,blockRedraw){var allIndex=this.rows.indexOf(row),activeIndex=this.activeRows.indexOf(row);activeIndex>-1&&this.activeRows.splice(activeIndex,1),allIndex>-1&&this.rows.splice(allIndex,1),this.setActiveRows(this.activeRows),this.displayRowIterator((function(rows){var displayIndex=rows.indexOf(row);displayIndex>-1&&rows.splice(displayIndex,1)})),blockRedraw||this.reRenderInPosition(),this.regenerateRowNumbers(),this.table.options.rowDeleted.call(this.table,row.getComponent()),this.table.options.dataEdited.call(this.table,this.getData()),this.table.options.groupBy&&this.table.modExists("groupRows")?this.table.modules.groupRows.updateGroupRows(!0):this.table.options.pagination&&this.table.modExists("page")?this.refreshActiveData(!1,!1,!0):this.table.options.pagination&&this.table.modExists("page")&&this.refreshActiveData("page")},RowManager.prototype.addRow=function(data,pos,index,blockRedraw){var row=this.addRowActual(data,pos,index,blockRedraw);return this.table.options.history&&this.table.modExists("history")&&this.table.modules.history.action("rowAdd",row,{data:data,pos:pos,index:index}),row},RowManager.prototype.addRows=function(data,pos,index){var _this11=this,self=this,length=0,rows=[];return new Promise((function(resolve,reject){pos=_this11.findAddRowPos(pos),Array.isArray(data)||(data=[data]),length=data.length-1,(void 0===index&&pos||void 0!==index&&!pos)&&data.reverse(),data.forEach((function(item,i){var row=self.addRow(item,pos,index,!0);rows.push(row)})),_this11.table.options.groupBy&&_this11.table.modExists("groupRows")?_this11.table.modules.groupRows.updateGroupRows(!0):_this11.table.options.pagination&&_this11.table.modExists("page")?_this11.refreshActiveData(!1,!1,!0):_this11.reRenderInPosition(),_this11.table.modExists("columnCalcs")&&_this11.table.modules.columnCalcs.recalc(_this11.table.rowManager.activeRows),_this11.regenerateRowNumbers(),resolve(rows)}))},RowManager.prototype.findAddRowPos=function(pos){return void 0===pos&&(pos=this.table.options.addRowPos),"pos"===pos&&(pos=!0),"bottom"===pos&&(pos=!1),pos},RowManager.prototype.addRowActual=function(data,pos,index,blockRedraw){var row=data instanceof Row?data:new Row(data||{},this),top=this.findAddRowPos(pos),allIndex=-1,activeIndex,dispRows;if(!index&&this.table.options.pagination&&"page"==this.table.options.paginationAddRow&&(dispRows=this.getDisplayRows(),top?dispRows.length?index=dispRows[0]:this.activeRows.length&&(index=this.activeRows[this.activeRows.length-1],top=!1):dispRows.length&&(index=dispRows[dispRows.length-1],top=!(dispRows.length<this.table.modules.page.getPageSize()))),void 0!==index&&(index=this.findRow(index)),this.table.options.groupBy&&this.table.modExists("groupRows")){this.table.modules.groupRows.assignRowToGroup(row);var groupRows=row.getGroup().rows;groupRows.length>1&&(!index||index&&-1==groupRows.indexOf(index)?top?groupRows[0]!==row&&(index=groupRows[0],this._moveRowInArray(row.getGroup().rows,row,index,!top)):groupRows[groupRows.length-1]!==row&&(index=groupRows[groupRows.length-1],this._moveRowInArray(row.getGroup().rows,row,index,!top)):this._moveRowInArray(row.getGroup().rows,row,index,!top))}return index&&(allIndex=this.rows.indexOf(index)),index&&allIndex>-1?(activeIndex=this.activeRows.indexOf(index),this.displayRowIterator((function(rows){var displayIndex=rows.indexOf(index);displayIndex>-1&&rows.splice(top?displayIndex:displayIndex+1,0,row)})),activeIndex>-1&&this.activeRows.splice(top?activeIndex:activeIndex+1,0,row),this.rows.splice(top?allIndex:allIndex+1,0,row)):top?(this.displayRowIterator((function(rows){rows.unshift(row)})),this.activeRows.unshift(row),this.rows.unshift(row)):(this.displayRowIterator((function(rows){rows.push(row)})),this.activeRows.push(row),this.rows.push(row)),this.setActiveRows(this.activeRows),this.table.options.rowAdded.call(this.table,row.getComponent()),this.table.options.dataEdited.call(this.table,this.getData()),blockRedraw||this.reRenderInPosition(),row},RowManager.prototype.moveRow=function(from,to,after){this.table.options.history&&this.table.modExists("history")&&this.table.modules.history.action("rowMove",from,{posFrom:this.getRowPosition(from),posTo:this.getRowPosition(to),to:to,after:after}),this.moveRowActual(from,to,after),this.regenerateRowNumbers(),this.table.options.rowMoved.call(this.table,from.getComponent())},RowManager.prototype.moveRowActual=function(from,to,after){var _this12=this;if(this._moveRowInArray(this.rows,from,to,after),this._moveRowInArray(this.activeRows,from,to,after),this.displayRowIterator((function(rows){_this12._moveRowInArray(rows,from,to,after)})),this.table.options.groupBy&&this.table.modExists("groupRows")){!after&&to instanceof Group&&(to=this.table.rowManager.prevDisplayRow(from)||to);var toGroup=to.getGroup(),fromGroup=from.getGroup();toGroup===fromGroup?this._moveRowInArray(toGroup.rows,from,to,after):(fromGroup&&fromGroup.removeRow(from),toGroup.insertRow(from,to,after))}},RowManager.prototype._moveRowInArray=function(rows,from,to,after){var fromIndex,toIndex,start,end;if(from!==to&&((fromIndex=rows.indexOf(from))>-1&&(rows.splice(fromIndex,1),(toIndex=rows.indexOf(to))>-1?after?rows.splice(toIndex+1,0,from):rows.splice(toIndex,0,from):rows.splice(fromIndex,0,from)),rows===this.getDisplayRows())){end=toIndex>fromIndex?toIndex:fromIndex+1;for(var _i4=start=fromIndex<toIndex?fromIndex:toIndex;_i4<=end;_i4++)rows[_i4]&&this.styleRow(rows[_i4],_i4)}},RowManager.prototype.clearData=function(){this.setData([])},RowManager.prototype.getRowIndex=function(row){return this.findRowIndex(row,this.rows)},RowManager.prototype.getDisplayRowIndex=function(row){var index=this.getDisplayRows().indexOf(row);return index>-1&&index},RowManager.prototype.nextDisplayRow=function(row,rowOnly){var index=this.getDisplayRowIndex(row),nextRow=!1;return!1!==index&&index<this.displayRowsCount-1&&(nextRow=this.getDisplayRows()[index+1]),!nextRow||nextRow instanceof Row&&"row"==nextRow.type?nextRow:this.nextDisplayRow(nextRow,rowOnly)},RowManager.prototype.prevDisplayRow=function(row,rowOnly){var index=this.getDisplayRowIndex(row),prevRow=!1;return index&&(prevRow=this.getDisplayRows()[index-1]),!rowOnly||!prevRow||prevRow instanceof Row&&"row"==prevRow.type?prevRow:this.prevDisplayRow(prevRow,rowOnly)},RowManager.prototype.findRowIndex=function(row,list){var rowIndex;return!!((row=this.findRow(row))&&(rowIndex=list.indexOf(row))>-1)&&rowIndex},RowManager.prototype.getData=function(active,transform){var output=[],rows;return this.getRows(active).forEach((function(row){"row"==row.type&&output.push(row.getData(transform||"data"))})),output},RowManager.prototype.getComponents=function(active){var output=[],rows;return this.getRows(active).forEach((function(row){output.push(row.getComponent())})),output},RowManager.prototype.getDataCount=function(active){var rows;return this.getRows(active).length},RowManager.prototype._genRemoteRequest=function(){var _this13=this,table=this.table,options=table.options,params={};if(table.modExists("page")){if(options.ajaxSorting){var sorters=this.table.modules.sort.getSort();sorters.forEach((function(item){delete item.column})),params[this.table.modules.page.paginationDataSentNames.sorters]=sorters}if(options.ajaxFiltering){var filters=this.table.modules.filter.getFilters(!0,!0);params[this.table.modules.page.paginationDataSentNames.filters]=filters}this.table.modules.ajax.setParams(params,!0)}table.modules.ajax.sendRequest().then((function(data){_this13._setDataActual(data,!0)})).catch((function(e){}))},RowManager.prototype.filterRefresh=function(){var table=this.table,options=table.options,left=this.scrollLeft;options.ajaxFiltering?"remote"==options.pagination&&table.modExists("page")?(table.modules.page.reset(!0),table.modules.page.setPage(1).then((function(){})).catch((function(){}))):options.ajaxProgressiveLoad?table.modules.ajax.loadData().then((function(){})).catch((function(){})):this._genRemoteRequest():this.refreshActiveData("filter"),this.scrollHorizontal(left)},RowManager.prototype.sorterRefresh=function(loadOrignalData){var table=this.table,options=this.table.options,left=this.scrollLeft;options.ajaxSorting?("remote"==options.pagination||options.progressiveLoad)&&table.modExists("page")?(table.modules.page.reset(!0),table.modules.page.setPage(1).then((function(){})).catch((function(){}))):options.ajaxProgressiveLoad?table.modules.ajax.loadData().then((function(){})).catch((function(){})):this._genRemoteRequest():this.refreshActiveData(loadOrignalData?"filter":"sort"),this.scrollHorizontal(left)},RowManager.prototype.scrollHorizontal=function(left){this.scrollLeft=left,this.element.scrollLeft=left,this.table.options.groupBy&&this.table.modules.groupRows.scrollHeaders(left),this.table.modExists("columnCalcs")&&this.table.modules.columnCalcs.scrollHorizontal(left)},RowManager.prototype.refreshActiveData=function(stage,skipStage,renderInPosition){var self=this,table=this.table,cascadeOrder=["all","filter","sort","display","freeze","group","tree","page"],displayIndex;if(this.redrawBlock)(!this.redrawBlockRestoreConfig||cascadeOrder.indexOf(stage)<cascadeOrder.indexOf(this.redrawBlockRestoreConfig.stage))&&(this.redrawBlockRestoreConfig={stage:stage,skipStage:skipStage,renderInPosition:renderInPosition});else{switch(this.table.modExists("edit")&&this.table.modules.edit.cancelEdit(),stage||(stage="all"),table.options.selectable&&!table.options.selectablePersistence&&table.modExists("selectRow")&&table.modules.selectRow.deselectRows(),stage){case"all":case"filter":skipStage?skipStage=!1:table.modExists("filter")?this.setActiveRows(table.modules.filter.filter(this.rows)):this.setActiveRows(this.rows.slice(0));case"sort":skipStage?skipStage=!1:table.modExists("sort")&&table.modules.sort.sort(this.activeRows),this.regenerateRowNumbers();case"display":this.resetDisplayRows();case"freeze":skipStage?skipStage=!1:this.table.modExists("frozenRows")&&table.modules.frozenRows.isFrozen()&&(table.modules.frozenRows.getDisplayIndex()||table.modules.frozenRows.setDisplayIndex(this.getNextDisplayIndex()),displayIndex=table.modules.frozenRows.getDisplayIndex(),!0!==(displayIndex=this.setDisplayRows(table.modules.frozenRows.getRows(this.getDisplayRows(displayIndex-1)),displayIndex))&&table.modules.frozenRows.setDisplayIndex(displayIndex));case"group":skipStage?skipStage=!1:table.options.groupBy&&table.modExists("groupRows")&&(table.modules.groupRows.getDisplayIndex()||table.modules.groupRows.setDisplayIndex(this.getNextDisplayIndex()),displayIndex=table.modules.groupRows.getDisplayIndex(),!0!==(displayIndex=this.setDisplayRows(table.modules.groupRows.getRows(this.getDisplayRows(displayIndex-1)),displayIndex))&&table.modules.groupRows.setDisplayIndex(displayIndex));case"tree":skipStage?skipStage=!1:table.options.dataTree&&table.modExists("dataTree")&&(table.modules.dataTree.getDisplayIndex()||table.modules.dataTree.setDisplayIndex(this.getNextDisplayIndex()),displayIndex=table.modules.dataTree.getDisplayIndex(),!0!==(displayIndex=this.setDisplayRows(table.modules.dataTree.getRows(this.getDisplayRows(displayIndex-1)),displayIndex))&&table.modules.dataTree.setDisplayIndex(displayIndex)),table.options.pagination&&table.modExists("page")&&!renderInPosition&&"local"==table.modules.page.getMode()&&table.modules.page.reset();case"page":skipStage?skipStage=!1:table.options.pagination&&table.modExists("page")&&(table.modules.page.getDisplayIndex()||table.modules.page.setDisplayIndex(this.getNextDisplayIndex()),displayIndex=table.modules.page.getDisplayIndex(),"local"==table.modules.page.getMode()&&table.modules.page.setMaxRows(this.getDisplayRows(displayIndex-1).length),!0!==(displayIndex=this.setDisplayRows(table.modules.page.getRows(this.getDisplayRows(displayIndex-1)),displayIndex))&&table.modules.page.setDisplayIndex(displayIndex))}Tabulator.prototype.helpers.elVisible(this.element)&&(renderInPosition?this.reRenderInPosition():(this.renderTable(),table.options.layoutColumnsOnNewData&&this.table.columnManager.redraw(!0))),table.modExists("columnCalcs")&&table.modules.columnCalcs.recalc(this.activeRows)}},RowManager.prototype.regenerateRowNumbers=function(){var _this14=this;this.rowNumColumn&&this.activeRows.forEach((function(row){var cell=row.getCell(_this14.rowNumColumn);cell&&cell._generateContents()}))},RowManager.prototype.setActiveRows=function(activeRows){this.activeRows=activeRows,this.activeRowsCount=this.activeRows.length},RowManager.prototype.resetDisplayRows=function(){this.displayRows=[],this.displayRows.push(this.activeRows.slice(0)),this.displayRowsCount=this.displayRows[0].length,this.table.modExists("frozenRows")&&this.table.modules.frozenRows.setDisplayIndex(0),this.table.options.groupBy&&this.table.modExists("groupRows")&&this.table.modules.groupRows.setDisplayIndex(0),this.table.options.pagination&&this.table.modExists("page")&&this.table.modules.page.setDisplayIndex(0)},RowManager.prototype.getNextDisplayIndex=function(){return this.displayRows.length},RowManager.prototype.setDisplayRows=function(displayRows,index){var output=!0;return index&&void 0!==this.displayRows[index]?(this.displayRows[index]=displayRows,output=!0):(this.displayRows.push(displayRows),output=index=this.displayRows.length-1),index==this.displayRows.length-1&&(this.displayRowsCount=this.displayRows[this.displayRows.length-1].length),output},RowManager.prototype.getDisplayRows=function(index){return void 0===index?this.displayRows.length?this.displayRows[this.displayRows.length-1]:[]:this.displayRows[index]||[]},RowManager.prototype.getVisibleRows=function(viewable){var topEdge=this.element.scrollTop,bottomEdge=this.element.clientHeight+topEdge,topFound=!1,topRow=0,bottomRow=0,rows=this.getDisplayRows();if(viewable){this.getDisplayRows();for(var i=this.vDomTop;i<=this.vDomBottom;i++)if(rows[i])if(topFound){if(!(bottomEdge-rows[i].getElement().offsetTop>=0))break;bottomRow=i}else if(topEdge-rows[i].getElement().offsetTop>=0)topRow=i;else{if(topFound=!0,!(bottomEdge-rows[i].getElement().offsetTop>=0))break;bottomRow=i}}else topRow=this.vDomTop,bottomRow=this.vDomBottom;return rows.slice(topRow,bottomRow+1)},RowManager.prototype.displayRowIterator=function(callback){this.displayRows.forEach(callback),this.displayRowsCount=this.displayRows[this.displayRows.length-1].length},RowManager.prototype.getRows=function(active){var rows;switch(active){case"active":rows=this.activeRows;break;case"display":rows=this.table.rowManager.getDisplayRows();break;case"visible":rows=this.getVisibleRows(!0);break;default:rows=this.rows}return rows},RowManager.prototype.reRenderInPosition=function(callback){if("virtual"==this.getRenderMode())if(this.redrawBlock)callback?callback():this.redrawBlockRederInPosition=!0;else{for(var scrollTop=this.element.scrollTop,topRow=!1,topOffset=!1,left=this.scrollLeft,rows=this.getDisplayRows(),i=this.vDomTop;i<=this.vDomBottom;i++)if(rows[i]){var diff=scrollTop-rows[i].getElement().offsetTop;if(!(!1===topOffset||Math.abs(diff)<topOffset))break;topOffset=diff,topRow=i}callback&&callback(),this._virtualRenderFill(!1===topRow?this.displayRowsCount-1:topRow,!0,topOffset||0),this.scrollHorizontal(left)}else this.renderTable(),callback&&callback()},RowManager.prototype.setRenderMode=function(){this.table.options.virtualDom?(this.renderMode="virtual",this.table.element.clientHeight||this.table.options.height?this.fixedHeight=!0:this.fixedHeight=!1):this.renderMode="classic"},RowManager.prototype.getRenderMode=function(){return this.renderMode},RowManager.prototype.renderTable=function(){switch(this.table.options.renderStarted.call(this.table),this.element.scrollTop=0,this.renderMode){case"classic":this._simpleRender();break;case"virtual":this._virtualRenderFill()}this.firstRender&&(this.displayRowsCount?(this.firstRender=!1,this.table.modules.layout.layout()):this.renderEmptyScroll()),this.table.modExists("frozenColumns")&&this.table.modules.frozenColumns.layout(),this.displayRowsCount||this.table.options.placeholder&&(this.table.options.placeholder.setAttribute("tabulator-render-mode",this.renderMode),this.getElement().appendChild(this.table.options.placeholder),this.table.options.placeholder.style.width=this.table.columnManager.getWidth()+"px"),this.table.options.renderComplete.call(this.table)},RowManager.prototype._simpleRender=function(){this._clearVirtualDom(),this.displayRowsCount?this.checkClassicModeGroupHeaderWidth():this.renderEmptyScroll()},RowManager.prototype.checkClassicModeGroupHeaderWidth=function(){var self=this,element=this.tableElement,onlyGroupHeaders=!0;self.getDisplayRows().forEach((function(row,index){self.styleRow(row,index),element.appendChild(row.getElement()),row.initialize(!0),"group"!==row.type&&(onlyGroupHeaders=!1)})),element.style.minWidth=onlyGroupHeaders?self.table.columnManager.getWidth()+"px":""},RowManager.prototype.renderEmptyScroll=function(){this.table.options.placeholder?this.tableElement.style.display="none":(this.tableElement.style.minWidth=this.table.columnManager.getWidth()+"px",this.tableElement.style.minHeight="1px",this.tableElement.style.visibility="hidden")},RowManager.prototype._clearVirtualDom=function(){var element=this.tableElement;for(this.table.options.placeholder&&this.table.options.placeholder.parentNode&&this.table.options.placeholder.parentNode.removeChild(this.table.options.placeholder);element.firstChild;)element.removeChild(element.firstChild);element.style.paddingTop="",element.style.paddingBottom="",element.style.minWidth="",element.style.minHeight="",element.style.display="",element.style.visibility="",this.scrollTop=0,this.scrollLeft=0,this.vDomTop=0,this.vDomBottom=0,this.vDomTopPad=0,this.vDomBottomPad=0},RowManager.prototype.styleRow=function(row,index){var rowEl=row.getElement();index%2?(rowEl.classList.add("tabulator-row-even"),rowEl.classList.remove("tabulator-row-odd")):(rowEl.classList.add("tabulator-row-odd"),rowEl.classList.remove("tabulator-row-even"))},RowManager.prototype._virtualRenderFill=function(position,forceMove,offset){var self=this,element=this.tableElement,holder=this.element,topPad=0,rowsHeight=0,topPadHeight=0,i=0,onlyGroupHeaders=!0,rows=this.getDisplayRows();if(offset=offset||0,position=position||0){for(;element.firstChild;)element.removeChild(element.firstChild);var heightOccupied=(this.displayRowsCount-position+1)*this.vDomRowHeight;heightOccupied<this.height&&(position-=Math.ceil((this.height-heightOccupied)/this.vDomRowHeight))<0&&(position=0),position-=topPad=Math.min(Math.max(Math.floor(this.vDomWindowBuffer/this.vDomRowHeight),this.vDomWindowMinMarginRows),position)}else this._clearVirtualDom();if(this.displayRowsCount&&Tabulator.prototype.helpers.elVisible(this.element)){for(this.vDomTop=position,this.vDomBottom=position-1;(rowsHeight<=this.height+this.vDomWindowBuffer||i<this.vDomWindowMinTotalRows)&&this.vDomBottom<this.displayRowsCount-1;){var index=this.vDomBottom+1,row=rows[index],rowHeight=0;this.styleRow(row,index),element.appendChild(row.getElement()),row.initialized?row.heightInitialized||row.normalizeHeight(!0):row.initialize(!0),rowHeight=row.getHeight(),i<topPad?topPadHeight+=rowHeight:rowsHeight+=rowHeight,rowHeight>this.vDomWindowBuffer&&(this.vDomWindowBuffer=2*rowHeight),"group"!==row.type&&(onlyGroupHeaders=!1),this.vDomBottom++,i++}position?(this.vDomTopPad=forceMove?this.vDomRowHeight*this.vDomTop+offset:this.scrollTop-topPadHeight,this.vDomBottomPad=this.vDomBottom==this.displayRowsCount-1?0:Math.max(this.vDomScrollHeight-this.vDomTopPad-rowsHeight-topPadHeight,0)):(this.vDomTopPad=0,this.vDomRowHeight=Math.floor((rowsHeight+topPadHeight)/i),this.vDomBottomPad=this.vDomRowHeight*(this.displayRowsCount-this.vDomBottom-1),this.vDomScrollHeight=topPadHeight+rowsHeight+this.vDomBottomPad-this.height),element.style.paddingTop=this.vDomTopPad+"px",element.style.paddingBottom=this.vDomBottomPad+"px",forceMove&&(this.scrollTop=this.vDomTopPad+topPadHeight+offset-(this.element.scrollWidth>this.element.clientWidth?this.element.offsetHeight-this.element.clientHeight:0)),this.scrollTop=Math.min(this.scrollTop,this.element.scrollHeight-this.height),this.element.scrollWidth>this.element.offsetWidth&&forceMove&&(this.scrollTop+=this.element.offsetHeight-this.element.clientHeight),this.vDomScrollPosTop=this.scrollTop,this.vDomScrollPosBottom=this.scrollTop,holder.scrollTop=this.scrollTop,element.style.minWidth=onlyGroupHeaders?this.table.columnManager.getWidth()+"px":"",this.table.options.groupBy&&"fitDataFill"!=this.table.modules.layout.getMode()&&this.displayRowsCount==this.table.modules.groupRows.countGroups()&&(this.tableElement.style.minWidth=this.table.columnManager.getWidth())}else this.renderEmptyScroll();this.fixedHeight||this.adjustTableSize()},RowManager.prototype.scrollVertical=function(dir){var topDiff=this.scrollTop-this.vDomScrollPosTop,bottomDiff=this.scrollTop-this.vDomScrollPosBottom,margin=2*this.vDomWindowBuffer;if(-topDiff>margin||bottomDiff>margin){var left=this.scrollLeft;this._virtualRenderFill(Math.floor(this.element.scrollTop/this.element.scrollHeight*this.displayRowsCount)),this.scrollHorizontal(left)}else dir?(topDiff<0&&this._addTopRow(-topDiff),bottomDiff<0&&(this.vDomScrollHeight-this.scrollTop>this.vDomWindowBuffer?this._removeBottomRow(-bottomDiff):this.vDomScrollPosBottom=this.scrollTop)):(topDiff>=0&&(this.scrollTop>this.vDomWindowBuffer?this._removeTopRow(topDiff):this.vDomScrollPosTop=this.scrollTop),bottomDiff>=0&&this._addBottomRow(bottomDiff))},RowManager.prototype._addTopRow=function(topDiff){var i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,table=this.tableElement,rows=this.getDisplayRows();if(this.vDomTop){var index=this.vDomTop-1,topRow=rows[index],topRowHeight=topRow.getHeight()||this.vDomRowHeight;topDiff>=topRowHeight&&(this.styleRow(topRow,index),table.insertBefore(topRow.getElement(),table.firstChild),topRow.initialized&&topRow.heightInitialized||(this.vDomTopNewRows.push(topRow),topRow.heightInitialized||topRow.clearCellHeight()),topRow.initialize(),this.vDomTopPad-=topRowHeight,this.vDomTopPad<0&&(this.vDomTopPad=index*this.vDomRowHeight),index||(this.vDomTopPad=0),table.style.paddingTop=this.vDomTopPad+"px",this.vDomScrollPosTop-=topRowHeight,this.vDomTop--),topDiff=-(this.scrollTop-this.vDomScrollPosTop),topRow.getHeight()>this.vDomWindowBuffer&&(this.vDomWindowBuffer=2*topRow.getHeight()),i<this.vDomMaxRenderChain&&this.vDomTop&&topDiff>=(rows[this.vDomTop-1].getHeight()||this.vDomRowHeight)?this._addTopRow(topDiff,i+1):this._quickNormalizeRowHeight(this.vDomTopNewRows)}},RowManager.prototype._removeTopRow=function(topDiff){var table=this.tableElement,topRow=this.getDisplayRows()[this.vDomTop],topRowHeight=topRow.getHeight()||this.vDomRowHeight;if(topDiff>=topRowHeight){var rowEl=topRow.getElement();rowEl.parentNode.removeChild(rowEl),this.vDomTopPad+=topRowHeight,table.style.paddingTop=this.vDomTopPad+"px",this.vDomScrollPosTop+=this.vDomTop?topRowHeight:topRowHeight+this.vDomWindowBuffer,this.vDomTop++,topDiff=this.scrollTop-this.vDomScrollPosTop,this._removeTopRow(topDiff)}},RowManager.prototype._addBottomRow=function(bottomDiff){var i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,table=this.tableElement,rows=this.getDisplayRows();if(this.vDomBottom<this.displayRowsCount-1){var index=this.vDomBottom+1,bottomRow=rows[index],bottomRowHeight=bottomRow.getHeight()||this.vDomRowHeight;bottomDiff>=bottomRowHeight&&(this.styleRow(bottomRow,index),table.appendChild(bottomRow.getElement()),bottomRow.initialized&&bottomRow.heightInitialized||(this.vDomBottomNewRows.push(bottomRow),bottomRow.heightInitialized||bottomRow.clearCellHeight()),bottomRow.initialize(),this.vDomBottomPad-=bottomRowHeight,(this.vDomBottomPad<0||index==this.displayRowsCount-1)&&(this.vDomBottomPad=0),table.style.paddingBottom=this.vDomBottomPad+"px",this.vDomScrollPosBottom+=bottomRowHeight,this.vDomBottom++),bottomDiff=this.scrollTop-this.vDomScrollPosBottom,bottomRow.getHeight()>this.vDomWindowBuffer&&(this.vDomWindowBuffer=2*bottomRow.getHeight()),i<this.vDomMaxRenderChain&&this.vDomBottom<this.displayRowsCount-1&&bottomDiff>=(rows[this.vDomBottom+1].getHeight()||this.vDomRowHeight)?this._addBottomRow(bottomDiff,i+1):this._quickNormalizeRowHeight(this.vDomBottomNewRows)}},RowManager.prototype._removeBottomRow=function(bottomDiff){var table=this.tableElement,bottomRow=this.getDisplayRows()[this.vDomBottom],bottomRowHeight=bottomRow.getHeight()||this.vDomRowHeight;if(bottomDiff>=bottomRowHeight){var rowEl=bottomRow.getElement();rowEl.parentNode&&rowEl.parentNode.removeChild(rowEl),this.vDomBottomPad+=bottomRowHeight,this.vDomBottomPad<0&&(this.vDomBottomPad=0),table.style.paddingBottom=this.vDomBottomPad+"px",this.vDomScrollPosBottom-=bottomRowHeight,this.vDomBottom--,bottomDiff=-(this.scrollTop-this.vDomScrollPosBottom),this._removeBottomRow(bottomDiff)}},RowManager.prototype._quickNormalizeRowHeight=function(rows){rows.forEach((function(row){row.calcHeight()})),rows.forEach((function(row){row.setCellHeight()})),rows.length=0},RowManager.prototype.normalizeHeight=function(){this.activeRows.forEach((function(row){row.normalizeHeight()}))},RowManager.prototype.adjustTableSize=function(){var initialHeight=this.element.clientHeight,modExists;if("virtual"===this.renderMode){var otherHeight=this.columnManager.getElement().offsetHeight+(this.table.footerManager&&!this.table.footerManager.external?this.table.footerManager.getElement().offsetHeight:0);this.fixedHeight?(this.element.style.minHeight="calc(100% - "+otherHeight+"px)",this.element.style.height="calc(100% - "+otherHeight+"px)",this.element.style.maxHeight="calc(100% - "+otherHeight+"px)"):(this.element.style.height="",this.element.style.height=this.table.element.clientHeight-otherHeight+"px",this.element.scrollTop=this.scrollTop),this.height=this.element.clientHeight,this.vDomWindowBuffer=this.table.options.virtualDomBuffer||this.height,this.fixedHeight||initialHeight==this.element.clientHeight||((modExists=this.table.modExists("resizeTable"))&&!this.table.modules.resizeTable.autoResize||!modExists)&&this.redraw()}},RowManager.prototype.reinitialize=function(){this.rows.forEach((function(row){row.reinitialize()}))},RowManager.prototype.blockRedraw=function(){this.redrawBlock=!0,this.redrawBlockRestoreConfig=!1},RowManager.prototype.restoreRedraw=function(){this.redrawBlock=!1,this.redrawBlockRestoreConfig?(this.refreshActiveData(this.redrawBlockRestoreConfig.stage,this.redrawBlockRestoreConfig.skipStage,this.redrawBlockRestoreConfig.renderInPosition),this.redrawBlockRestoreConfig=!1):this.redrawBlockRederInPosition&&this.reRenderInPosition(),this.redrawBlockRederInPosition=!1},RowManager.prototype.redraw=function(force){var pos=0,left=this.scrollLeft;this.adjustTableSize(),this.table.tableWidth=this.table.element.clientWidth,force?this.renderTable():("classic"==this.renderMode?this.table.options.groupBy?this.refreshActiveData("group",!1,!1):this._simpleRender():(this.reRenderInPosition(),this.scrollHorizontal(left)),this.displayRowsCount||this.table.options.placeholder&&this.getElement().appendChild(this.table.options.placeholder))},RowManager.prototype.resetScroll=function(){if(this.element.scrollLeft=0,this.element.scrollTop=0,"ie"===this.table.browser){var event=document.createEvent("Event");event.initEvent("scroll",!1,!0),this.element.dispatchEvent(event)}else this.element.dispatchEvent(new Event("scroll"))};var RowComponent=function RowComponent(row){this._row=row};RowComponent.prototype.getData=function(transform){return this._row.getData(transform)},RowComponent.prototype.getElement=function(){return this._row.getElement()},RowComponent.prototype.getCells=function(){var cells=[];return this._row.getCells().forEach((function(cell){cells.push(cell.getComponent())})),cells},RowComponent.prototype.getCell=function(column){var cell=this._row.getCell(column);return!!cell&&cell.getComponent()},RowComponent.prototype.getIndex=function(){return this._row.getData("data")[this._row.table.options.index]},RowComponent.prototype.getPosition=function(active){return this._row.table.rowManager.getRowPosition(this._row,active)},RowComponent.prototype.delete=function(){return this._row.delete()},RowComponent.prototype.scrollTo=function(){return this._row.table.rowManager.scrollToRow(this._row)},RowComponent.prototype.pageTo=function(){if(this._row.table.modExists("page",!0))return this._row.table.modules.page.setPageToRow(this._row)},RowComponent.prototype.move=function(to,after){this._row.moveToRow(to,after)},RowComponent.prototype.update=function(data){return this._row.updateData(data)},RowComponent.prototype.normalizeHeight=function(){this._row.normalizeHeight(!0)},RowComponent.prototype.select=function(){this._row.table.modules.selectRow.selectRows(this._row)},RowComponent.prototype.deselect=function(){this._row.table.modules.selectRow.deselectRows(this._row)},RowComponent.prototype.toggleSelect=function(){this._row.table.modules.selectRow.toggleRow(this._row)},RowComponent.prototype.isSelected=function(){return this._row.table.modules.selectRow.isRowSelected(this._row)},RowComponent.prototype._getSelf=function(){return this._row},RowComponent.prototype.validate=function(){return this._row.validate()},RowComponent.prototype.freeze=function(){this._row.table.modExists("frozenRows",!0)&&this._row.table.modules.frozenRows.freezeRow(this._row)},RowComponent.prototype.unfreeze=function(){this._row.table.modExists("frozenRows",!0)&&this._row.table.modules.frozenRows.unfreezeRow(this._row)},RowComponent.prototype.isFrozen=function(){var index;return!!this._row.table.modExists("frozenRows",!0)&&this._row.table.modules.frozenRows.rows.indexOf(this._row)>-1},RowComponent.prototype.treeCollapse=function(){this._row.table.modExists("dataTree",!0)&&this._row.table.modules.dataTree.collapseRow(this._row)},RowComponent.prototype.treeExpand=function(){this._row.table.modExists("dataTree",!0)&&this._row.table.modules.dataTree.expandRow(this._row)},RowComponent.prototype.treeToggle=function(){this._row.table.modExists("dataTree",!0)&&this._row.table.modules.dataTree.toggleRow(this._row)},RowComponent.prototype.getTreeParent=function(){return!!this._row.table.modExists("dataTree",!0)&&this._row.table.modules.dataTree.getTreeParent(this._row)},RowComponent.prototype.getTreeChildren=function(){return!!this._row.table.modExists("dataTree",!0)&&this._row.table.modules.dataTree.getTreeChildren(this._row)},RowComponent.prototype.addTreeChild=function(data,pos,index){return!!this._row.table.modExists("dataTree",!0)&&this._row.table.modules.dataTree.addTreeChildRow(this._row,data,pos,index)},RowComponent.prototype.reformat=function(){return this._row.reinitialize()},RowComponent.prototype.getGroup=function(){return this._row.getGroup().getComponent()},RowComponent.prototype.getTable=function(){return this._row.table},RowComponent.prototype.getNextRow=function(){var row=this._row.nextRow();return row?row.getComponent():row},RowComponent.prototype.getPrevRow=function(){var row=this._row.prevRow();return row?row.getComponent():row};var Row=function Row(data,parent){var type=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"row";this.table=parent.table,this.parent=parent,this.data={},this.type=type,this.element=this.createElement(),this.modules={},this.cells=[],this.height=0,this.heightStyled="",this.manualHeight=!1,this.outerHeight=0,this.initialized=!1,this.heightInitialized=!1,this.component=null,this.setData(data),this.generateElement()};Row.prototype.createElement=function(){var el=document.createElement("div");return el.classList.add("tabulator-row"),el.setAttribute("role","row"),el},Row.prototype.getElement=function(){return this.element},Row.prototype.detachElement=function(){this.element&&this.element.parentNode&&this.element.parentNode.removeChild(this.element)},Row.prototype.generateElement=function(){var self=this,dblTap,tapHold,tap;!1!==self.table.options.selectable&&self.table.modExists("selectRow")&&self.table.modules.selectRow.initializeRow(this),!1!==self.table.options.movableRows&&self.table.modExists("moveRow")&&self.table.modules.moveRow.initializeRow(this),!1!==self.table.options.dataTree&&self.table.modExists("dataTree")&&self.table.modules.dataTree.initializeRow(this),"collapse"===self.table.options.responsiveLayout&&self.table.modExists("responsiveLayout")&&self.table.modules.responsiveLayout.initializeRow(this),self.table.options.rowContextMenu&&this.table.modExists("menu")&&self.table.modules.menu.initializeRow(this),self.table.options.rowClick&&self.element.addEventListener("click",(function(e){self.table.options.rowClick(e,self.getComponent())})),self.table.options.rowDblClick&&self.element.addEventListener("dblclick",(function(e){self.table.options.rowDblClick(e,self.getComponent())})),self.table.options.rowContext&&self.element.addEventListener("contextmenu",(function(e){self.table.options.rowContext(e,self.getComponent())})),self.table.options.rowMouseEnter&&self.element.addEventListener("mouseenter",(function(e){self.table.options.rowMouseEnter(e,self.getComponent())})),self.table.options.rowMouseLeave&&self.element.addEventListener("mouseleave",(function(e){self.table.options.rowMouseLeave(e,self.getComponent())})),self.table.options.rowMouseOver&&self.element.addEventListener("mouseover",(function(e){self.table.options.rowMouseOver(e,self.getComponent())})),self.table.options.rowMouseOut&&self.element.addEventListener("mouseout",(function(e){self.table.options.rowMouseOut(e,self.getComponent())})),self.table.options.rowMouseMove&&self.element.addEventListener("mousemove",(function(e){self.table.options.rowMouseMove(e,self.getComponent())})),self.table.options.rowTap&&(tap=!1,self.element.addEventListener("touchstart",(function(e){tap=!0}),{passive:!0}),self.element.addEventListener("touchend",(function(e){tap&&self.table.options.rowTap(e,self.getComponent()),tap=!1}))),self.table.options.rowDblTap&&(dblTap=null,self.element.addEventListener("touchend",(function(e){dblTap?(clearTimeout(dblTap),dblTap=null,self.table.options.rowDblTap(e,self.getComponent())):dblTap=setTimeout((function(){clearTimeout(dblTap),dblTap=null}),300)}))),self.table.options.rowTapHold&&(tapHold=null,self.element.addEventListener("touchstart",(function(e){clearTimeout(tapHold),tapHold=setTimeout((function(){clearTimeout(tapHold),tapHold=null,tap=!1,self.table.options.rowTapHold(e,self.getComponent())}),1e3)}),{passive:!0}),self.element.addEventListener("touchend",(function(e){clearTimeout(tapHold),tapHold=null})))},Row.prototype.generateCells=function(){this.cells=this.table.columnManager.generateCells(this)},Row.prototype.initialize=function(force){var self=this;if(!self.initialized||force){for(self.deleteCells();self.element.firstChild;)self.element.removeChild(self.element.firstChild);this.table.modExists("frozenColumns")&&this.table.modules.frozenColumns.layoutRow(this),this.generateCells(),self.cells.forEach((function(cell){self.element.appendChild(cell.getElement()),cell.cellRendered()})),force&&self.normalizeHeight(),self.table.options.dataTree&&self.table.modExists("dataTree")&&self.table.modules.dataTree.layoutRow(this),"collapse"===self.table.options.responsiveLayout&&self.table.modExists("responsiveLayout")&&self.table.modules.responsiveLayout.layoutRow(this),self.table.options.rowFormatter&&self.table.options.rowFormatter(self.getComponent()),self.table.options.resizableRows&&self.table.modExists("resizeRows")&&self.table.modules.resizeRows.initializeRow(self),self.initialized=!0}},Row.prototype.reinitializeHeight=function(){this.heightInitialized=!1,null!==this.element.offsetParent&&this.normalizeHeight(!0)},Row.prototype.reinitialize=function(){this.initialized=!1,this.heightInitialized=!1,this.manualHeight||(this.height=0,this.heightStyled=""),null!==this.element.offsetParent&&this.initialize(!0)},Row.prototype.calcHeight=function(force){var maxHeight=0,minHeight=this.table.options.resizableRows?this.element.clientHeight:0;this.cells.forEach((function(cell){var height=cell.getHeight();height>maxHeight&&(maxHeight=height)})),this.height=force?Math.max(maxHeight,minHeight):this.manualHeight?this.height:Math.max(maxHeight,minHeight),this.heightStyled=this.height?this.height+"px":"",this.outerHeight=this.element.offsetHeight},Row.prototype.setCellHeight=function(){this.cells.forEach((function(cell){cell.setHeight()})),this.heightInitialized=!0},Row.prototype.clearCellHeight=function(){this.cells.forEach((function(cell){cell.clearHeight()}))},Row.prototype.normalizeHeight=function(force){force&&this.clearCellHeight(),this.calcHeight(force),this.setCellHeight()},Row.prototype.setHeight=function(height,force){(this.height!=height||force)&&(this.manualHeight=!0,this.height=height,this.heightStyled=height?height+"px":"",this.setCellHeight(),this.outerHeight=this.element.offsetHeight)},Row.prototype.getHeight=function(){return this.outerHeight},Row.prototype.getWidth=function(){return this.element.offsetWidth},Row.prototype.deleteCell=function(cell){var index=this.cells.indexOf(cell);index>-1&&this.cells.splice(index,1)},Row.prototype.setData=function(data){this.table.modExists("mutator")&&(data=this.table.modules.mutator.transformRow(data,"data")),this.data=data,this.table.options.reactiveData&&this.table.modExists("reactiveData",!0)&&this.table.modules.reactiveData.watchRow(this)},Row.prototype.updateData=function(updatedData){var _this15=this,visible=Tabulator.prototype.helpers.elVisible(this.element),tempData={},newRowData;return new Promise((function(resolve,reject){for(var attrname in"string"==typeof updatedData&&(updatedData=JSON.parse(updatedData)),_this15.table.options.reactiveData&&_this15.table.modExists("reactiveData",!0)&&_this15.table.modules.reactiveData.block(),_this15.table.modExists("mutator")?(tempData=Object.assign(tempData,_this15.data),tempData=Object.assign(tempData,updatedData),newRowData=_this15.table.modules.mutator.transformRow(tempData,"data",updatedData)):newRowData=updatedData,newRowData)_this15.data[attrname]=newRowData[attrname];for(var attrname in _this15.table.options.reactiveData&&_this15.table.modExists("reactiveData",!0)&&_this15.table.modules.reactiveData.unblock(),updatedData){var columns;_this15.table.columnManager.getColumnsByFieldRoot(attrname).forEach((function(column){var cell=_this15.getCell(column.getField());if(cell){var value=column.getFieldValue(newRowData);cell.getValue()!=value&&(cell.setValueProcessData(value),visible&&cell.cellRendered())}}))}visible?(_this15.normalizeHeight(!0),_this15.table.options.rowFormatter&&_this15.table.options.rowFormatter(_this15.getComponent())):(_this15.initialized=!1,_this15.height=0,_this15.heightStyled=""),!1!==_this15.table.options.dataTree&&_this15.table.modExists("dataTree")&&_this15.table.modules.dataTree.redrawNeeded(updatedData)&&(_this15.table.modules.dataTree.initializeRow(_this15),_this15.table.modules.dataTree.layoutRow(_this15),_this15.table.rowManager.refreshActiveData("tree",!1,!0)),_this15.table.options.rowUpdated.call(_this15.table,_this15.getComponent()),resolve()}))},Row.prototype.getData=function(transform){var self=this;return transform?this.table.modExists("accessor")?this.table.modules.accessor.transformRow(this.data,transform):void 0:this.data},Row.prototype.getCell=function(column){var match=!1;return column=this.table.columnManager.findColumn(column),match=this.cells.find((function(cell){return cell.column===column}))},Row.prototype.getCellIndex=function(findCell){return this.cells.findIndex((function(cell){return cell===findCell}))},Row.prototype.findNextEditableCell=function(index){var nextCell=!1;if(index<this.cells.length-1)for(var i=index+1;i<this.cells.length;i++){var cell=this.cells[i];if(cell.column.modules.edit&&Tabulator.prototype.helpers.elVisible(cell.getElement())){var allowEdit=!0;if("function"==typeof cell.column.modules.edit.check&&(allowEdit=cell.column.modules.edit.check(cell.getComponent())),allowEdit){nextCell=cell;break}}}return nextCell},Row.prototype.findPrevEditableCell=function(index){var prevCell=!1;if(index>0)for(var i=index-1;i>=0;i--){var cell=this.cells[i],allowEdit=!0;if(cell.column.modules.edit&&Tabulator.prototype.helpers.elVisible(cell.getElement())&&("function"==typeof cell.column.modules.edit.check&&(allowEdit=cell.column.modules.edit.check(cell.getComponent())),allowEdit)){prevCell=cell;break}}return prevCell},Row.prototype.getCells=function(){return this.cells},Row.prototype.nextRow=function(){var row;return this.table.rowManager.nextDisplayRow(this,!0)||!1},Row.prototype.prevRow=function(){var row;return this.table.rowManager.prevDisplayRow(this,!0)||!1},Row.prototype.moveToRow=function(to,before){var toRow=this.table.rowManager.findRow(to);toRow?(this.table.rowManager.moveRowActual(this,toRow,!before),this.table.rowManager.refreshActiveData("display",!1,!0)):console.warn("Move Error - No matching row found:",to)},Row.prototype.validate=function(){var invalid=[];return this.cells.forEach((function(cell){cell.validate()||invalid.push(cell.getComponent())})),!invalid.length||invalid},Row.prototype.delete=function(){var _this16=this;return new Promise((function(resolve,reject){var index,rows;_this16.table.options.history&&_this16.table.modExists("history")&&(_this16.table.options.groupBy&&_this16.table.modExists("groupRows")?(index=(rows=_this16.getGroup().rows).indexOf(_this16))&&(index=rows[index-1]):(index=_this16.table.rowManager.getRowIndex(_this16))&&(index=_this16.table.rowManager.rows[index-1]),_this16.table.modules.history.action("rowDelete",_this16,{data:_this16.getData(),pos:!index,index:index})),_this16.deleteActual(),resolve()}))},Row.prototype.deleteActual=function(blockRedraw){var index=this.table.rowManager.getRowIndex(this);this.table.modExists("selectRow")&&this.table.modules.selectRow._deselectRow(this,!0),this.table.modExists("edit")&&this.table.modules.edit.currentCell.row===this&&this.table.modules.edit.cancelEdit(),this.table.options.reactiveData&&this.table.modExists("reactiveData",!0),this.modules.group&&this.modules.group.removeRow(this),this.table.rowManager.deleteRow(this,blockRedraw),this.deleteCells(),this.initialized=!1,this.heightInitialized=!1,this.table.options.dataTree&&this.table.modExists("dataTree",!0)&&this.table.modules.dataTree.rowDelete(this),this.table.modExists("columnCalcs")&&(this.table.options.groupBy&&this.table.modExists("groupRows")?this.table.modules.columnCalcs.recalcRowGroup(this):this.table.modules.columnCalcs.recalc(this.table.rowManager.activeRows))},Row.prototype.deleteCells=function(){for(var cellCount=this.cells.length,_i5=0;_i5<cellCount;_i5++)this.cells[0].delete()},Row.prototype.wipe=function(){for(this.deleteCells();this.element.firstChild;)this.element.removeChild(this.element.firstChild);this.element=!1,this.modules={},this.element.parentNode&&this.element.parentNode.removeChild(this.element)},Row.prototype.getGroup=function(){return this.modules.group||!1},Row.prototype.getComponent=function(){return this.component||(this.component=new RowComponent(this)),this.component};var CellComponent=function CellComponent(cell){this._cell=cell};CellComponent.prototype.getValue=function(){return this._cell.getValue()},CellComponent.prototype.getOldValue=function(){return this._cell.getOldValue()},CellComponent.prototype.getElement=function(){return this._cell.getElement()},CellComponent.prototype.getRow=function(){return this._cell.row.getComponent()},CellComponent.prototype.getData=function(){return this._cell.row.getData()},CellComponent.prototype.getField=function(){return this._cell.column.getField()},CellComponent.prototype.getColumn=function(){return this._cell.column.getComponent()},CellComponent.prototype.setValue=function(value,mutate){void 0===mutate&&(mutate=!0),this._cell.setValue(value,mutate)},CellComponent.prototype.restoreOldValue=function(){this._cell.setValueActual(this._cell.getOldValue())},CellComponent.prototype.edit=function(force){return this._cell.edit(force)},CellComponent.prototype.cancelEdit=function(){this._cell.cancelEdit()},CellComponent.prototype.isEdited=function(){return!!this._cell.modules.edit&&this._cell.modules.edit.edited},CellComponent.prototype.clearEdited=function(){self.table.modExists("edit",!0)&&this._cell.table.modules.edit.clearEdited(this._cell)},CellComponent.prototype.isValid=function(){return!this._cell.modules.validate||!this._cell.modules.validate.invalid},CellComponent.prototype.validate=function(){return this._cell.validate()},CellComponent.prototype.clearValidation=function(){self.table.modExists("validate",!0)&&this._cell.table.modules.validate.clearValidation(this._cell)},CellComponent.prototype.nav=function(){return this._cell.nav()},CellComponent.prototype.checkHeight=function(){this._cell.checkHeight()},CellComponent.prototype.getTable=function(){return this._cell.table},CellComponent.prototype._getSelf=function(){return this._cell};var Cell=function Cell(column,row){this.table=column.table,this.column=column,this.row=row,this.element=null,this.value=null,this.oldValue=null,this.modules={},this.height=null,this.width=null,this.minWidth=null,this.component=null,this.build()};Cell.prototype.build=function(){this.generateElement(),this.setWidth(),this._configureCell(),this.setValueActual(this.column.getFieldValue(this.row.data))},Cell.prototype.generateElement=function(){this.element=document.createElement("div"),this.element.className="tabulator-cell",this.element.setAttribute("role","gridcell"),this.element=this.element},Cell.prototype._configureCell=function(){var self=this,cellEvents=self.column.cellEvents,element=self.element,field=this.column.getField(),vertAligns={top:"flex-start",bottom:"flex-end",middle:"center"},hozAligns={left:"flex-start",right:"flex-end",center:"center"},classNames;(element.style.textAlign=self.column.hozAlign,self.column.vertAlign&&(element.style.display="inline-flex",element.style.alignItems=vertAligns[self.column.vertAlign]||"",self.column.hozAlign&&(element.style.justifyContent=hozAligns[self.column.hozAlign]||"")),field&&element.setAttribute("tabulator-field",field),self.column.definition.cssClass)&&self.column.definition.cssClass.split(" ").forEach((function(className){element.classList.add(className)}));"hover"===this.table.options.tooltipGenerationMode&&element.addEventListener("mouseenter",(function(e){self._generateTooltip()})),self._bindClickEvents(cellEvents),self._bindTouchEvents(cellEvents),self._bindMouseEvents(cellEvents),self.column.modules.edit&&self.table.modules.edit.bindEditor(self),self.column.definition.rowHandle&&!1!==self.table.options.movableRows&&self.table.modExists("moveRow")&&self.table.modules.moveRow.initializeCell(self),self.column.visible||self.hide()},Cell.prototype._bindClickEvents=function(cellEvents){var self=this,element=self.element;(cellEvents.cellClick||self.table.options.cellClick)&&element.addEventListener("click",(function(e){var component=self.getComponent();cellEvents.cellClick&&cellEvents.cellClick.call(self.table,e,component),self.table.options.cellClick&&self.table.options.cellClick.call(self.table,e,component)})),cellEvents.cellDblClick||this.table.options.cellDblClick?element.addEventListener("dblclick",(function(e){var component=self.getComponent();cellEvents.cellDblClick&&cellEvents.cellDblClick.call(self.table,e,component),self.table.options.cellDblClick&&self.table.options.cellDblClick.call(self.table,e,component)})):element.addEventListener("dblclick",(function(e){if(!self.table.modExists("edit")||self.table.modules.edit.currentCell!==self){e.preventDefault();try{var range;if(document.selection)(range=document.body.createTextRange()).moveToElementText(self.element),range.select();else if(window.getSelection){var range;(range=document.createRange()).selectNode(self.element),window.getSelection().removeAllRanges(),window.getSelection().addRange(range)}}catch(e){}}})),(cellEvents.cellContext||this.table.options.cellContext)&&element.addEventListener("contextmenu",(function(e){var component=self.getComponent();cellEvents.cellContext&&cellEvents.cellContext.call(self.table,e,component),self.table.options.cellContext&&self.table.options.cellContext.call(self.table,e,component)}))},Cell.prototype._bindMouseEvents=function(cellEvents){var self=this,element=self.element;(cellEvents.cellMouseEnter||self.table.options.cellMouseEnter)&&element.addEventListener("mouseenter",(function(e){var component=self.getComponent();cellEvents.cellMouseEnter&&cellEvents.cellMouseEnter.call(self.table,e,component),self.table.options.cellMouseEnter&&self.table.options.cellMouseEnter.call(self.table,e,component)})),(cellEvents.cellMouseLeave||self.table.options.cellMouseLeave)&&element.addEventListener("mouseleave",(function(e){var component=self.getComponent();cellEvents.cellMouseLeave&&cellEvents.cellMouseLeave.call(self.table,e,component),self.table.options.cellMouseLeave&&self.table.options.cellMouseLeave.call(self.table,e,component)})),(cellEvents.cellMouseOver||self.table.options.cellMouseOver)&&element.addEventListener("mouseover",(function(e){var component=self.getComponent();cellEvents.cellMouseOver&&cellEvents.cellMouseOver.call(self.table,e,component),self.table.options.cellMouseOver&&self.table.options.cellMouseOver.call(self.table,e,component)})),(cellEvents.cellMouseOut||self.table.options.cellMouseOut)&&element.addEventListener("mouseout",(function(e){var component=self.getComponent();cellEvents.cellMouseOut&&cellEvents.cellMouseOut.call(self.table,e,component),self.table.options.cellMouseOut&&self.table.options.cellMouseOut.call(self.table,e,component)})),(cellEvents.cellMouseMove||self.table.options.cellMouseMove)&&element.addEventListener("mousemove",(function(e){var component=self.getComponent();cellEvents.cellMouseMove&&cellEvents.cellMouseMove.call(self.table,e,component),self.table.options.cellMouseMove&&self.table.options.cellMouseMove.call(self.table,e,component)}))},Cell.prototype._bindTouchEvents=function(cellEvents){var self=this,element=self.element,dblTap,tapHold,tap;(cellEvents.cellTap||this.table.options.cellTap)&&(tap=!1,element.addEventListener("touchstart",(function(e){tap=!0}),{passive:!0}),element.addEventListener("touchend",(function(e){if(tap){var component=self.getComponent();cellEvents.cellTap&&cellEvents.cellTap.call(self.table,e,component),self.table.options.cellTap&&self.table.options.cellTap.call(self.table,e,component)}tap=!1}))),(cellEvents.cellDblTap||this.table.options.cellDblTap)&&(dblTap=null,element.addEventListener("touchend",(function(e){if(dblTap){clearTimeout(dblTap),dblTap=null;var component=self.getComponent();cellEvents.cellDblTap&&cellEvents.cellDblTap.call(self.table,e,component),self.table.options.cellDblTap&&self.table.options.cellDblTap.call(self.table,e,component)}else dblTap=setTimeout((function(){clearTimeout(dblTap),dblTap=null}),300)}))),(cellEvents.cellTapHold||this.table.options.cellTapHold)&&(tapHold=null,element.addEventListener("touchstart",(function(e){clearTimeout(tapHold),tapHold=setTimeout((function(){clearTimeout(tapHold),tapHold=null,tap=!1;var component=self.getComponent();cellEvents.cellTapHold&&cellEvents.cellTapHold.call(self.table,e,component),self.table.options.cellTapHold&&self.table.options.cellTapHold.call(self.table,e,component)}),1e3)}),{passive:!0}),element.addEventListener("touchend",(function(e){clearTimeout(tapHold),tapHold=null})))},Cell.prototype._generateContents=function(){var val;switch(void 0===(val=this.table.modExists("format")?this.table.modules.format.formatValue(this):this.element.innerHTML=this.value)?"undefined":_typeof(val)){case"object":if(val instanceof Node){for(;this.element.firstChild;)this.element.removeChild(this.element.firstChild);this.element.appendChild(val)}else this.element.innerHTML="",null!=val&&console.warn("Format Error - Formatter has returned a type of object, the only valid formatter object return is an instance of Node, the formatter returned:",val);break;case"undefined":case"null":this.element.innerHTML="";break;default:this.element.innerHTML=val}},Cell.prototype.cellRendered=function(){this.table.modExists("format")&&this.table.modules.format.cellRendered&&this.table.modules.format.cellRendered(this)},Cell.prototype._generateTooltip=function(){var tooltip=this.column.tooltip;tooltip?(!0===tooltip?tooltip=this.value:"function"==typeof tooltip&&!1===(tooltip=tooltip(this.getComponent()))&&(tooltip=""),void 0===tooltip&&(tooltip=""),this.element.setAttribute("title",tooltip)):this.element.setAttribute("title","")},Cell.prototype.getElement=function(){return this.element},Cell.prototype.getValue=function(){return this.value},Cell.prototype.getOldValue=function(){return this.oldValue},Cell.prototype.setValue=function(value,mutate){var changed,component;this.setValueProcessData(value,mutate)&&(this.table.options.history&&this.table.modExists("history")&&this.table.modules.history.action("cellEdit",this,{oldValue:this.oldValue,newValue:this.value}),component=this.getComponent(),this.column.cellEvents.cellEdited&&this.column.cellEvents.cellEdited.call(this.table,component),this.cellRendered(),this.table.options.cellEdited.call(this.table,component),this.table.options.dataEdited.call(this.table,this.table.rowManager.getData()))},Cell.prototype.setValueProcessData=function(value,mutate){var changed=!1;return this.value!=value&&(changed=!0,mutate&&this.column.modules.mutate&&(value=this.table.modules.mutator.transformCell(this,value))),this.setValueActual(value),changed&&this.table.modExists("columnCalcs")&&(this.column.definition.topCalc||this.column.definition.bottomCalc)&&(this.table.options.groupBy&&this.table.modExists("groupRows")?("table"!=this.table.options.columnCalcs&&"both"!=this.table.options.columnCalcs||this.table.modules.columnCalcs.recalc(this.table.rowManager.activeRows),"table"!=this.table.options.columnCalcs&&this.table.modules.columnCalcs.recalcRowGroup(this.row)):this.table.modules.columnCalcs.recalc(this.table.rowManager.activeRows)),changed},Cell.prototype.setValueActual=function(value){this.oldValue=this.value,this.value=value,this.table.options.reactiveData&&this.table.modExists("reactiveData")&&this.table.modules.reactiveData.block(),this.column.setFieldValue(this.row.data,value),this.table.options.reactiveData&&this.table.modExists("reactiveData")&&this.table.modules.reactiveData.unblock(),this._generateContents(),this._generateTooltip(),this.table.options.resizableColumns&&this.table.modExists("resizeColumns")&&this.table.modules.resizeColumns.initializeColumn("cell",this.column,this.element),this.column.definition.contextMenu&&this.table.modExists("menu")&&this.table.modules.menu.initializeCell(this),this.table.modExists("frozenColumns")&&this.table.modules.frozenColumns.layoutElement(this.element,this.column)},Cell.prototype.setWidth=function(){this.width=this.column.width,this.element.style.width=this.column.widthStyled},Cell.prototype.clearWidth=function(){this.width="",this.element.style.width=""},Cell.prototype.getWidth=function(){return this.width||this.element.offsetWidth},Cell.prototype.setMinWidth=function(){this.minWidth=this.column.minWidth,this.element.style.minWidth=this.column.minWidthStyled},Cell.prototype.checkHeight=function(){this.row.reinitializeHeight()},Cell.prototype.clearHeight=function(){this.element.style.height="",this.height=null},Cell.prototype.setHeight=function(){this.height=this.row.height,this.element.style.height=this.row.heightStyled},Cell.prototype.getHeight=function(){return this.height||this.element.offsetHeight},Cell.prototype.show=function(){this.element.style.display=""},Cell.prototype.hide=function(){this.element.style.display="none"},Cell.prototype.edit=function(force){if(this.table.modExists("edit",!0))return this.table.modules.edit.editCell(this,force)},Cell.prototype.cancelEdit=function(){if(this.table.modExists("edit",!0)){var editing=this.table.modules.edit.getCurrentCell();editing&&editing._getSelf()===this?this.table.modules.edit.cancelEdit():console.warn("Cancel Editor Error - This cell is not currently being edited ")}},Cell.prototype.validate=function(){var valid;return!this.column.modules.validate||!this.table.modExists("validate",!0)||!0===this.table.modules.validate.validate(this.column.modules.validate,this,this.getValue())},Cell.prototype.delete=function(){this.table.rowManager.redrawBlock||this.element.parentNode.removeChild(this.element),this.modules.validate&&this.modules.validate.invalid&&this.table.modules.validate.clearValidation(this),this.modules.edit&&this.modules.edit.edited&&this.table.modules.edit.clearEdited(this),this.element=!1,this.column.deleteCell(this),this.row.deleteCell(this),this.calcs={}},Cell.prototype.nav=function(){var self=this,nextCell=!1,index=this.row.getCellIndex(this);return{next:function next(){var nextCell=this.right(),nextRow;return!!nextCell||!(!(nextRow=self.table.rowManager.nextDisplayRow(self.row,!0))||!(nextCell=nextRow.findNextEditableCell(-1)))&&(nextCell.edit(),!0)},prev:function prev(){var nextCell=this.left(),prevRow;return!!nextCell||!(!(prevRow=self.table.rowManager.prevDisplayRow(self.row,!0))||!(nextCell=prevRow.findPrevEditableCell(prevRow.cells.length)))&&(nextCell.edit(),!0)},left:function left(){return!!(nextCell=self.row.findPrevEditableCell(index))&&(nextCell.edit(),!0)},right:function right(){return!!(nextCell=self.row.findNextEditableCell(index))&&(nextCell.edit(),!0)},up:function up(){var nextRow=self.table.rowManager.prevDisplayRow(self.row,!0);nextRow&&nextRow.cells[index].edit()},down:function down(){var nextRow=self.table.rowManager.nextDisplayRow(self.row,!0);nextRow&&nextRow.cells[index].edit()}}},Cell.prototype.getIndex=function(){this.row.getCellIndex(this)},Cell.prototype.getComponent=function(){return this.component||(this.component=new CellComponent(this)),this.component};var FooterManager=function FooterManager(table){this.table=table,this.active=!1,this.element=this.createElement(),this.external=!1,this.links=[],this._initialize()};FooterManager.prototype.createElement=function(){var el=document.createElement("div");return el.classList.add("tabulator-footer"),el},FooterManager.prototype._initialize=function(element){if(this.table.options.footerElement)switch(_typeof(this.table.options.footerElement)){case"string":"<"===this.table.options.footerElement[0]?this.element.innerHTML=this.table.options.footerElement:(this.external=!0,this.element=document.querySelector(this.table.options.footerElement));break;default:this.element=this.table.options.footerElement}},FooterManager.prototype.getElement=function(){return this.element},FooterManager.prototype.append=function(element,parent){this.activate(parent),this.element.appendChild(element),this.table.rowManager.adjustTableSize()},FooterManager.prototype.prepend=function(element,parent){this.activate(parent),this.element.insertBefore(element,this.element.firstChild),this.table.rowManager.adjustTableSize()},FooterManager.prototype.remove=function(element){element.parentNode.removeChild(element),this.deactivate()},FooterManager.prototype.deactivate=function(force){this.element.firstChild&&!force||(this.external||this.element.parentNode.removeChild(this.element),this.active=!1)},FooterManager.prototype.activate=function(parent){this.active||(this.active=!0,this.external||(this.table.element.appendChild(this.getElement()),this.table.element.style.display="")),parent&&this.links.push(parent)},FooterManager.prototype.redraw=function(){this.links.forEach((function(link){link.footerRedraw()}))};var Tabulator=function Tabulator(element,options){this.options={},this.columnManager=null,this.rowManager=null,this.footerManager=null,this.browser="",this.browserSlow=!1,this.browserMobile=!1,this.modules={},this.initializeElement(element),this.initializeOptions(options||{}),this._create(),Tabulator.prototype.comms.register(this)};Tabulator.prototype.defaultOptions={height:!1,minHeight:!1,maxHeight:!1,layout:"fitData",layoutColumnsOnNewData:!1,columnMinWidth:40,columnHeaderVertAlign:"top",columnVertAlign:!1,resizableColumns:!0,resizableRows:!1,autoResize:!0,columns:[],cellHozAlign:"",cellVertAlign:"",data:[],autoColumns:!1,reactiveData:!1,nestedFieldSeparator:".",tooltips:!1,tooltipsHeader:!1,tooltipGenerationMode:"load",initialSort:!1,initialFilter:!1,initialHeaderFilter:!1,columnHeaderSortMulti:!0,sortOrderReverse:!1,headerSort:!0,headerSortTristate:!1,footerElement:!1,index:"id",keybindings:[],tabEndNewRow:!1,invalidOptionWarnings:!0,clipboard:!1,clipboardCopyStyled:!0,clipboardCopyConfig:!1,clipboardCopyFormatter:!1,clipboardCopyRowRange:"active",clipboardPasteParser:"table",clipboardPasteAction:"insert",clipboardCopied:function clipboardCopied(){},clipboardPasted:function clipboardPasted(){},clipboardPasteError:function clipboardPasteError(){},downloadDataFormatter:!1,downloadReady:function downloadReady(data,blob){return blob},downloadComplete:!1,downloadConfig:{},downloadRowRange:"active",dataTree:!1,dataTreeElementColumn:!1,dataTreeBranchElement:!0,dataTreeChildIndent:9,dataTreeChildField:"_children",dataTreeCollapseElement:!1,dataTreeExpandElement:!1,dataTreeStartExpanded:!1,dataTreeRowExpanded:function dataTreeRowExpanded(){},dataTreeRowCollapsed:function dataTreeRowCollapsed(){},dataTreeChildColumnCalcs:!1,dataTreeSelectPropagate:!1,printAsHtml:!1,printFormatter:!1,printHeader:!1,printFooter:!1,printCopyStyle:!0,printStyled:!0,printVisibleRows:!0,printRowRange:"visible",printConfig:{},addRowPos:"bottom",selectable:"highlight",selectableRangeMode:"drag",selectableRollingSelection:!0,selectablePersistence:!0,selectableCheck:function selectableCheck(data,row){return!0},headerFilterLiveFilterDelay:300,headerFilterPlaceholder:!1,headerVisible:!0,history:!1,locale:!1,langs:{},virtualDom:!0,virtualDomBuffer:0,persistentLayout:!1,persistentSort:!1,persistentFilter:!1,persistenceID:"",persistenceMode:!0,persistenceReaderFunc:!1,persistenceWriterFunc:!1,persistence:!1,responsiveLayout:!1,responsiveLayoutCollapseStartOpen:!0,responsiveLayoutCollapseUseFormatters:!0,responsiveLayoutCollapseFormatter:!1,pagination:!1,paginationSize:!1,paginationInitialPage:1,paginationButtonCount:5,paginationSizeSelector:!1,paginationElement:!1,paginationDataSent:{},paginationDataReceived:{},paginationAddRow:"page",ajaxURL:!1,ajaxURLGenerator:!1,ajaxParams:{},ajaxConfig:"get",ajaxContentType:"form",ajaxRequestFunc:!1,ajaxLoader:!0,ajaxLoaderLoading:!1,ajaxLoaderError:!1,ajaxFiltering:!1,ajaxSorting:!1,ajaxProgressiveLoad:!1,ajaxProgressiveLoadDelay:0,ajaxProgressiveLoadScrollMargin:0,groupBy:!1,groupStartOpen:!0,groupValues:!1,groupHeader:!1,groupHeaderPrint:null,groupHeaderClipboard:null,groupHeaderHtmlOutput:null,groupHeaderDownload:null,htmlOutputConfig:!1,movableColumns:!1,movableRows:!1,movableRowsConnectedTables:!1,movableRowsConnectedElements:!1,movableRowsSender:!1,movableRowsReceiver:"insert",movableRowsSendingStart:function movableRowsSendingStart(){},movableRowsSent:function movableRowsSent(){},movableRowsSentFailed:function movableRowsSentFailed(){},movableRowsSendingStop:function movableRowsSendingStop(){},movableRowsReceivingStart:function movableRowsReceivingStart(){},movableRowsReceived:function movableRowsReceived(){},movableRowsReceivedFailed:function movableRowsReceivedFailed(){},movableRowsReceivingStop:function movableRowsReceivingStop(){},movableRowsElementDrop:function movableRowsElementDrop(){},scrollToRowPosition:"top",scrollToRowIfVisible:!0,scrollToColumnPosition:"left",scrollToColumnIfVisible:!0,rowFormatter:!1,rowFormatterPrint:null,rowFormatterClipboard:null,rowFormatterHtmlOutput:null,placeholder:!1,tableBuilding:function tableBuilding(){},tableBuilt:function tableBuilt(){},renderStarted:function renderStarted(){},renderComplete:function renderComplete(){},rowClick:!1,rowDblClick:!1,rowContext:!1,rowTap:!1,rowDblTap:!1,rowTapHold:!1,rowMouseEnter:!1,rowMouseLeave:!1,rowMouseOver:!1,rowMouseOut:!1,rowMouseMove:!1,rowContextMenu:!1,rowAdded:function rowAdded(){},rowDeleted:function rowDeleted(){},rowMoved:function rowMoved(){},rowUpdated:function rowUpdated(){},rowSelectionChanged:function rowSelectionChanged(){},rowSelected:function rowSelected(){},rowDeselected:function rowDeselected(){},rowResized:function rowResized(){},cellClick:!1,cellDblClick:!1,cellContext:!1,cellTap:!1,cellDblTap:!1,cellTapHold:!1,cellMouseEnter:!1,cellMouseLeave:!1,cellMouseOver:!1,cellMouseOut:!1,cellMouseMove:!1,cellEditing:function cellEditing(){},cellEdited:function cellEdited(){},cellEditCancelled:function cellEditCancelled(){},columnMoved:!1,columnResized:function columnResized(){},columnTitleChanged:function columnTitleChanged(){},columnVisibilityChanged:function columnVisibilityChanged(){},htmlImporting:function htmlImporting(){},htmlImported:function htmlImported(){},dataLoading:function dataLoading(){},dataLoaded:function dataLoaded(){},dataEdited:function dataEdited(){},ajaxRequesting:function ajaxRequesting(){},ajaxResponse:!1,ajaxError:function ajaxError(){},dataFiltering:!1,dataFiltered:!1,dataSorting:function dataSorting(){},dataSorted:function dataSorted(){},groupToggleElement:"arrow",groupClosedShowCalcs:!1,dataGrouping:function dataGrouping(){},dataGrouped:!1,groupVisibilityChanged:function groupVisibilityChanged(){},groupClick:!1,groupDblClick:!1,groupContext:!1,groupContextMenu:!1,groupTap:!1,groupDblTap:!1,groupTapHold:!1,columnCalcs:!0,pageLoaded:function pageLoaded(){},localized:function localized(){},validationMode:"blocking",validationFailed:function validationFailed(){},historyUndo:function historyUndo(){},historyRedo:function historyRedo(){},scrollHorizontal:function scrollHorizontal(){},scrollVertical:function scrollVertical(){}},Tabulator.prototype.initializeOptions=function(options){if(!1!==options.invalidOptionWarnings)for(var key in options)void 0===this.defaultOptions[key]&&console.warn("Invalid table constructor option:",key);for(var key in this.defaultOptions)key in options?this.options[key]=options[key]:Array.isArray(this.defaultOptions[key])?this.options[key]=[]:"object"===_typeof(this.defaultOptions[key])&&null!==this.defaultOptions[key]?this.options[key]={}:this.options[key]=this.defaultOptions[key]},Tabulator.prototype.initializeElement=function(element){return"undefined"!=typeof HTMLElement&&element instanceof HTMLElement?(this.element=element,!0):"string"==typeof element?(this.element=document.querySelector(element),!!this.element||(console.error("Tabulator Creation Error - no element found matching selector: ",element),!1)):(console.error("Tabulator Creation Error - Invalid element provided:",element),!1)},Tabulator.prototype._mapDepricatedFunctionality=function(){(this.options.persistentLayout||this.options.persistentSort||this.options.persistentFilter)&&(this.options.persistence||(this.options.persistence={})),this.options.downloadDataFormatter&&console.warn("DEPRECATION WARNING - downloadDataFormatter option has been deprecated"),void 0!==this.options.clipboardCopyHeader&&(this.options.columnHeaders=this.options.clipboardCopyHeader,console.warn("DEPRECATION WARNING - clipboardCopyHeader option has been deprecated, please use the columnHeaders property on the clipboardCopyConfig option")),!0!==this.options.printVisibleRows&&(console.warn("printVisibleRows option is deprecated, you should now use the printRowRange option"),this.options.persistence.printRowRange="active"),!0!==this.options.printCopyStyle&&(console.warn("printCopyStyle option is deprecated, you should now use the printStyled option"),this.options.persistence.printStyled=this.options.printCopyStyle),this.options.persistentLayout&&(console.warn("persistentLayout option is deprecated, you should now use the persistence option"),!0!==this.options.persistence&&void 0===this.options.persistence.columns&&(this.options.persistence.columns=!0)),this.options.persistentSort&&(console.warn("persistentSort option is deprecated, you should now use the persistence option"),!0!==this.options.persistence&&void 0===this.options.persistence.sort&&(this.options.persistence.sort=!0)),this.options.persistentFilter&&(console.warn("persistentFilter option is deprecated, you should now use the persistence option"),!0!==this.options.persistence&&void 0===this.options.persistence.filter&&(this.options.persistence.filter=!0)),this.options.columnVertAlign&&(console.warn("columnVertAlign option is deprecated, you should now use the columnHeaderVertAlign option"),this.options.columnHeaderVertAlign=this.options.columnVertAlign)},Tabulator.prototype._clearSelection=function(){this.element.classList.add("tabulator-block-select"),window.getSelection?window.getSelection().empty?window.getSelection().empty():window.getSelection().removeAllRanges&&window.getSelection().removeAllRanges():document.selection&&document.selection.empty(),this.element.classList.remove("tabulator-block-select")},Tabulator.prototype._create=function(){this._clearObjectPointers(),this._mapDepricatedFunctionality(),this.bindModules(),"TABLE"===this.element.tagName&&this.modExists("htmlTableImport",!0)&&this.modules.htmlTableImport.parseTable(),this.columnManager=new ColumnManager(this),this.rowManager=new RowManager(this),this.footerManager=new FooterManager(this),this.columnManager.setRowManager(this.rowManager),this.rowManager.setColumnManager(this.columnManager),this._buildElement(),this._loadInitialData()},Tabulator.prototype._clearObjectPointers=function(){this.options.columns=this.options.columns.slice(0),this.options.reactiveData||(this.options.data=this.options.data.slice(0))},Tabulator.prototype._buildElement=function(){var _this17=this,element=this.element,mod=this.modules,options=this.options;for(options.tableBuilding.call(this),element.classList.add("tabulator"),element.setAttribute("role","grid");element.firstChild;)element.removeChild(element.firstChild);for(var locale in options.height&&(options.height=isNaN(options.height)?options.height:options.height+"px",element.style.height=options.height),!1!==options.minHeight&&(options.minHeight=isNaN(options.minHeight)?options.minHeight:options.minHeight+"px",element.style.minHeight=options.minHeight),!1!==options.maxHeight&&(options.maxHeight=isNaN(options.maxHeight)?options.maxHeight:options.maxHeight+"px",element.style.maxHeight=options.maxHeight),this.columnManager.initialize(),this.rowManager.initialize(),this._detectBrowser(),this.modExists("layout",!0)&&mod.layout.initialize(options.layout),!1!==options.headerFilterPlaceholder&&mod.localize.setHeaderFilterPlaceholder(options.headerFilterPlaceholder),options.langs)mod.localize.installLang(locale,options.langs[locale]);if(mod.localize.setLocale(options.locale),"string"==typeof options.placeholder){var el=document.createElement("div");el.classList.add("tabulator-placeholder");var span=document.createElement("span");span.innerHTML=options.placeholder,el.appendChild(span),options.placeholder=el}if(element.appendChild(this.columnManager.getElement()),element.appendChild(this.rowManager.getElement()),options.footerElement&&this.footerManager.activate(),options.persistence&&this.modExists("persistence",!0)&&mod.persistence.initialize(),options.persistence&&this.modExists("persistence",!0)&&mod.persistence.config.columns&&(options.columns=mod.persistence.load("columns",options.columns)),options.movableRows&&this.modExists("moveRow")&&mod.moveRow.initialize(),options.autoColumns&&this.options.data&&this.columnManager.generateColumnsFromRowData(this.options.data),this.modExists("columnCalcs")&&mod.columnCalcs.initialize(),this.columnManager.setColumns(options.columns),options.dataTree&&this.modExists("dataTree",!0)&&mod.dataTree.initialize(),this.modExists("frozenRows")&&this.modules.frozenRows.initialize(),(options.persistence&&this.modExists("persistence",!0)&&mod.persistence.config.sort||options.initialSort)&&this.modExists("sort",!0)){var sorters=[];options.persistence&&this.modExists("persistence",!0)&&mod.persistence.config.sort?!1===(sorters=mod.persistence.load("sort"))&&options.initialSort&&(sorters=options.initialSort):options.initialSort&&(sorters=options.initialSort),mod.sort.setSort(sorters)}if((options.persistence&&this.modExists("persistence",!0)&&mod.persistence.config.filter||options.initialFilter)&&this.modExists("filter",!0)){var filters=[];options.persistence&&this.modExists("persistence",!0)&&mod.persistence.config.filter?!1===(filters=mod.persistence.load("filter"))&&options.initialFilter&&(filters=options.initialFilter):options.initialFilter&&(filters=options.initialFilter),mod.filter.setFilter(filters)}options.initialHeaderFilter&&this.modExists("filter",!0)&&options.initialHeaderFilter.forEach((function(item){var column=_this17.columnManager.findColumn(item.field);if(!column)return console.warn("Column Filter Error - No matching column found:",item.field),!1;mod.filter.setHeaderFilterValue(column,item.value)})),this.modExists("ajax")&&mod.ajax.initialize(),options.pagination&&this.modExists("page",!0)&&mod.page.initialize(),options.groupBy&&this.modExists("groupRows",!0)&&mod.groupRows.initialize(),this.modExists("keybindings")&&mod.keybindings.initialize(),this.modExists("selectRow")&&mod.selectRow.clearSelectionData(!0),options.autoResize&&this.modExists("resizeTable")&&mod.resizeTable.initialize(),this.modExists("clipboard")&&mod.clipboard.initialize(),options.printAsHtml&&this.modExists("print")&&mod.print.initialize(),options.tableBuilt.call(this)},Tabulator.prototype._loadInitialData=function(){var self=this;if(self.options.pagination&&self.modExists("page"))if(self.modules.page.reset(!0,!0),"local"==self.options.pagination){if(self.options.data.length)self.rowManager.setData(self.options.data,!1,!0);else{if((self.options.ajaxURL||self.options.ajaxURLGenerator)&&self.modExists("ajax"))return void self.modules.ajax.loadData(!1,!0).then((function(){})).catch((function(){self.options.paginationInitialPage&&self.modules.page.setPage(self.options.paginationInitialPage)}));self.rowManager.setData(self.options.data,!1,!0)}self.options.paginationInitialPage&&self.modules.page.setPage(self.options.paginationInitialPage)}else self.options.ajaxURL?self.modules.page.setPage(self.options.paginationInitialPage).then((function(){})).catch((function(){})):self.rowManager.setData([],!1,!0);else self.options.data.length?self.rowManager.setData(self.options.data):(self.options.ajaxURL||self.options.ajaxURLGenerator)&&self.modExists("ajax")?self.modules.ajax.loadData(!1,!0).then((function(){})).catch((function(){})):self.rowManager.setData(self.options.data,!1,!0)},Tabulator.prototype.destroy=function(){var element=this.element;for(Tabulator.prototype.comms.deregister(this),this.options.reactiveData&&this.modExists("reactiveData",!0)&&this.modules.reactiveData.unwatchData(),this.rowManager.rows.forEach((function(row){row.wipe()})),this.rowManager.rows=[],this.rowManager.activeRows=[],this.rowManager.displayRows=[],this.options.autoResize&&this.modExists("resizeTable")&&this.modules.resizeTable.clearBindings(),this.modExists("keybindings")&&this.modules.keybindings.clearBindings();element.firstChild;)element.removeChild(element.firstChild);element.classList.remove("tabulator")},Tabulator.prototype._detectBrowser=function(){var ua=navigator.userAgent||navigator.vendor||window.opera;ua.indexOf("Trident")>-1?(this.browser="ie",this.browserSlow=!0):ua.indexOf("Edge")>-1?(this.browser="edge",this.browserSlow=!0):ua.indexOf("Firefox")>-1?(this.browser="firefox",this.browserSlow=!1):(this.browser="other",this.browserSlow=!1),this.browserMobile=/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino|android|ipad|playbook|silk/i.test(ua)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(ua.substr(0,4))},Tabulator.prototype.blockRedraw=function(){return this.rowManager.blockRedraw()},Tabulator.prototype.restoreRedraw=function(){return this.rowManager.restoreRedraw()},Tabulator.prototype.setDataFromLocalFile=function(extensions){var _this18=this;return new Promise((function(resolve,reject){var input=document.createElement("input");input.type="file",input.accept=extensions||".json,application/json",input.addEventListener("change",(function(e){var file=input.files[0],reader=new FileReader,data;reader.readAsText(file),reader.onload=function(e){try{data=JSON.parse(reader.result)}catch(e){return console.warn("File Load Error - File contents is invalid JSON",e),void reject(e)}_this18._setData(data).then((function(data){resolve(data)})).catch((function(err){resolve(err)}))},reader.onerror=function(e){console.warn("File Load Error - Unable to read file"),reject()}})),input.click()}))},Tabulator.prototype.setData=function(data,params,config){return this.modExists("ajax")&&this.modules.ajax.blockActiveRequest(),this._setData(data,params,config,!1,!0)},Tabulator.prototype._setData=function(data,params,config,inPosition,columnsChanged){var self=this;return"string"!=typeof data?data?this.rowManager.setData(data,inPosition,columnsChanged):this.modExists("ajax")&&(this.modules.ajax.getUrl||this.options.ajaxURLGenerator)?"remote"==this.options.pagination&&this.modExists("page",!0)?(this.modules.page.reset(!0,!0),this.modules.page.setPage(1)):this.modules.ajax.loadData(inPosition,columnsChanged):this.rowManager.setData([],inPosition,columnsChanged):0==data.indexOf("{")||0==data.indexOf("[")?this.rowManager.setData(JSON.parse(data),inPosition,columnsChanged):this.modExists("ajax",!0)?(params&&this.modules.ajax.setParams(params),config&&this.modules.ajax.setConfig(config),this.modules.ajax.setUrl(data),"remote"==this.options.pagination&&this.modExists("page",!0)?(this.modules.page.reset(!0,!0),this.modules.page.setPage(1)):this.modules.ajax.loadData(inPosition,columnsChanged)):void 0},Tabulator.prototype.clearData=function(){this.modExists("ajax")&&this.modules.ajax.blockActiveRequest(),this.rowManager.clearData()},Tabulator.prototype.getData=function(active){return!0===active&&(console.warn("passing a boolean to the getData function is deprecated, you should now pass the string 'active'"),active="active"),this.rowManager.getData(active)},Tabulator.prototype.getDataCount=function(active){return!0===active&&(console.warn("passing a boolean to the getDataCount function is deprecated, you should now pass the string 'active'"),active="active"),this.rowManager.getDataCount(active)},Tabulator.prototype.searchRows=function(field,type,value){if(this.modExists("filter",!0))return this.modules.filter.search("rows",field,type,value)},Tabulator.prototype.searchData=function(field,type,value){if(this.modExists("filter",!0))return this.modules.filter.search("data",field,type,value)},Tabulator.prototype.getHtml=function(visible,style,config){if(this.modExists("export",!0))return this.modules.export.getHtml(visible,style,config)},Tabulator.prototype.print=function(visible,style,config){if(this.modExists("print",!0))return this.modules.print.printFullscreen(visible,style,config)},Tabulator.prototype.getAjaxUrl=function(){if(this.modExists("ajax",!0))return this.modules.ajax.getUrl()},Tabulator.prototype.replaceData=function(data,params,config){return this.modExists("ajax")&&this.modules.ajax.blockActiveRequest(),this._setData(data,params,config,!0)},Tabulator.prototype.updateData=function(data){var _this19=this,self=this,responses=0;return new Promise((function(resolve,reject){_this19.modExists("ajax")&&_this19.modules.ajax.blockActiveRequest(),"string"==typeof data&&(data=JSON.parse(data)),data?data.forEach((function(item){var row=self.rowManager.findRow(item[self.options.index]);row&&(responses++,row.updateData(item).then((function(){--responses||resolve()})))})):(console.warn("Update Error - No data provided"),reject("Update Error - No data provided"))}))},Tabulator.prototype.addData=function(data,pos,index){var _this20=this;return new Promise((function(resolve,reject){_this20.modExists("ajax")&&_this20.modules.ajax.blockActiveRequest(),"string"==typeof data&&(data=JSON.parse(data)),data?_this20.rowManager.addRows(data,pos,index).then((function(rows){var output=[];rows.forEach((function(row){output.push(row.getComponent())})),resolve(output)})):(console.warn("Update Error - No data provided"),reject("Update Error - No data provided"))}))},Tabulator.prototype.updateOrAddData=function(data){var _this21=this,self=this,rows=[],responses=0;return new Promise((function(resolve,reject){_this21.modExists("ajax")&&_this21.modules.ajax.blockActiveRequest(),"string"==typeof data&&(data=JSON.parse(data)),data?data.forEach((function(item){var row=self.rowManager.findRow(item[self.options.index]);responses++,row?row.updateData(item).then((function(){responses--,rows.push(row.getComponent()),responses||resolve(rows)})):self.rowManager.addRows(item).then((function(newRows){responses--,rows.push(newRows[0].getComponent()),responses||resolve(rows)}))})):(console.warn("Update Error - No data provided"),reject("Update Error - No data provided"))}))},Tabulator.prototype.getRow=function(index){var row=this.rowManager.findRow(index);return row?row.getComponent():(console.warn("Find Error - No matching row found:",index),!1)},Tabulator.prototype.getRowFromPosition=function(position,active){var row=this.rowManager.getRowFromPosition(position,active);return row?row.getComponent():(console.warn("Find Error - No matching row found:",position),!1)},Tabulator.prototype.deleteRow=function(index){var _this22=this;return new Promise((function(resolve,reject){var self=_this22,count=0,successCount=0,foundRows=[];function doneCheck(){++count==index.length&&successCount&&(self.rowManager.reRenderInPosition(),resolve())}Array.isArray(index)||(index=[index]),index.forEach((function(item){var row=_this22.rowManager.findRow(item,!0);row?foundRows.push(row):(console.warn("Delete Error - No matching row found:",item),reject("Delete Error - No matching row found"),doneCheck())})),foundRows.sort((function(a,b){return _this22.rowManager.rows.indexOf(a)>_this22.rowManager.rows.indexOf(b)?1:-1})),foundRows.forEach((function(row){row.delete().then((function(){successCount++,doneCheck()})).catch((function(err){doneCheck(),reject(err)}))}))}))},Tabulator.prototype.addRow=function(data,pos,index){var _this23=this;return new Promise((function(resolve,reject){"string"==typeof data&&(data=JSON.parse(data)),_this23.rowManager.addRows(data,pos,index).then((function(rows){_this23.modExists("columnCalcs")&&_this23.modules.columnCalcs.recalc(_this23.rowManager.activeRows),resolve(rows[0].getComponent())}))}))},Tabulator.prototype.updateOrAddRow=function(index,data){var _this24=this;return new Promise((function(resolve,reject){var row=_this24.rowManager.findRow(index);"string"==typeof data&&(data=JSON.parse(data)),row?row.updateData(data).then((function(){_this24.modExists("columnCalcs")&&_this24.modules.columnCalcs.recalc(_this24.rowManager.activeRows),resolve(row.getComponent())})).catch((function(err){reject(err)})):row=_this24.rowManager.addRows(data).then((function(rows){_this24.modExists("columnCalcs")&&_this24.modules.columnCalcs.recalc(_this24.rowManager.activeRows),resolve(rows[0].getComponent())})).catch((function(err){reject(err)}))}))},Tabulator.prototype.updateRow=function(index,data){var _this25=this;return new Promise((function(resolve,reject){var row=_this25.rowManager.findRow(index);"string"==typeof data&&(data=JSON.parse(data)),row?row.updateData(data).then((function(){resolve(row.getComponent())})).catch((function(err){reject(err)})):(console.warn("Update Error - No matching row found:",index),reject("Update Error - No matching row found"))}))},Tabulator.prototype.scrollToRow=function(index,position,ifVisible){var _this26=this;return new Promise((function(resolve,reject){var row=_this26.rowManager.findRow(index);row?_this26.rowManager.scrollToRow(row,position,ifVisible).then((function(){resolve()})).catch((function(err){reject(err)})):(console.warn("Scroll Error - No matching row found:",index),reject("Scroll Error - No matching row found"))}))},Tabulator.prototype.moveRow=function(from,to,after){var fromRow=this.rowManager.findRow(from);fromRow?fromRow.moveToRow(to,after):console.warn("Move Error - No matching row found:",from)},Tabulator.prototype.getRows=function(active){return!0===active&&(console.warn("passing a boolean to the getRows function is deprecated, you should now pass the string 'active'"),active="active"),this.rowManager.getComponents(active)},Tabulator.prototype.getRowPosition=function(index,active){var row=this.rowManager.findRow(index);return row?this.rowManager.getRowPosition(row,active):(console.warn("Position Error - No matching row found:",index),!1)},Tabulator.prototype.copyToClipboard=function(selector){this.modExists("clipboard",!0)&&this.modules.clipboard.copy(selector)},Tabulator.prototype.setColumns=function(definition){this.columnManager.setColumns(definition)},Tabulator.prototype.getColumns=function(structured){return this.columnManager.getComponents(structured)},Tabulator.prototype.getColumn=function(field){var col=this.columnManager.findColumn(field);return col?col.getComponent():(console.warn("Find Error - No matching column found:",field),!1)},Tabulator.prototype.getColumnDefinitions=function(){return this.columnManager.getDefinitionTree()},Tabulator.prototype.getColumnLayout=function(){if(this.modExists("persistence",!0))return this.modules.persistence.parseColumns(this.columnManager.getColumns())},Tabulator.prototype.setColumnLayout=function(layout){return!!this.modExists("persistence",!0)&&(this.columnManager.setColumns(this.modules.persistence.mergeDefinition(this.options.columns,layout)),!0)},Tabulator.prototype.showColumn=function(field){var column=this.columnManager.findColumn(field);if(!column)return console.warn("Column Show Error - No matching column found:",field),!1;column.show(),this.options.responsiveLayout&&this.modExists("responsiveLayout",!0)&&this.modules.responsiveLayout.update()},Tabulator.prototype.hideColumn=function(field){var column=this.columnManager.findColumn(field);if(!column)return console.warn("Column Hide Error - No matching column found:",field),!1;column.hide(),this.options.responsiveLayout&&this.modExists("responsiveLayout",!0)&&this.modules.responsiveLayout.update()},Tabulator.prototype.toggleColumn=function(field){var column=this.columnManager.findColumn(field);if(!column)return console.warn("Column Visibility Toggle Error - No matching column found:",field),!1;column.visible?column.hide():column.show()},Tabulator.prototype.addColumn=function(definition,before,field){var _this27=this;return new Promise((function(resolve,reject){var column=_this27.columnManager.findColumn(field);_this27.columnManager.addColumn(definition,before,column).then((function(column){resolve(column.getComponent())})).catch((function(err){reject(err)}))}))},Tabulator.prototype.deleteColumn=function(field){var _this28=this;return new Promise((function(resolve,reject){var column=_this28.columnManager.findColumn(field);column?column.delete().then((function(){resolve()})).catch((function(err){reject(err)})):(console.warn("Column Delete Error - No matching column found:",field),reject())}))},Tabulator.prototype.updateColumnDefinition=function(field,definition){var _this29=this;return new Promise((function(resolve,reject){var column=_this29.columnManager.findColumn(field);column?column.updateDefinition(definition).then((function(col){resolve(col)})).catch((function(err){reject(err)})):(console.warn("Column Update Error - No matching column found:",field),reject())}))},Tabulator.prototype.moveColumn=function(from,to,after){var fromColumn=this.columnManager.findColumn(from),toColumn=this.columnManager.findColumn(to);fromColumn?toColumn?this.columnManager.moveColumn(fromColumn,toColumn,after):console.warn("Move Error - No matching column found:",toColumn):console.warn("Move Error - No matching column found:",from)},Tabulator.prototype.scrollToColumn=function(field,position,ifVisible){var _this30=this;return new Promise((function(resolve,reject){var column=_this30.columnManager.findColumn(field);column?_this30.columnManager.scrollToColumn(column,position,ifVisible).then((function(){resolve()})).catch((function(err){reject(err)})):(console.warn("Scroll Error - No matching column found:",field),reject("Scroll Error - No matching column found"))}))},Tabulator.prototype.setLocale=function(locale){this.modules.localize.setLocale(locale)},Tabulator.prototype.getLocale=function(){return this.modules.localize.getLocale()},Tabulator.prototype.getLang=function(locale){return this.modules.localize.getLang(locale)},Tabulator.prototype.redraw=function(force){this.columnManager.redraw(force),this.rowManager.redraw(force)},Tabulator.prototype.setHeight=function(height){"classic"!==this.rowManager.renderMode?(this.options.height=isNaN(height)?height:height+"px",this.element.style.height=this.options.height,this.rowManager.setRenderMode(),this.rowManager.redraw()):console.warn("setHeight function is not available in classic render mode")},Tabulator.prototype.setSort=function(sortList,dir){this.modExists("sort",!0)&&(this.modules.sort.setSort(sortList,dir),this.rowManager.sorterRefresh())},Tabulator.prototype.getSorters=function(){if(this.modExists("sort",!0))return this.modules.sort.getSort()},Tabulator.prototype.clearSort=function(){this.modExists("sort",!0)&&(this.modules.sort.clear(),this.rowManager.sorterRefresh())},Tabulator.prototype.setFilter=function(field,type,value,params){this.modExists("filter",!0)&&(this.modules.filter.setFilter(field,type,value,params),this.rowManager.filterRefresh())},Tabulator.prototype.addFilter=function(field,type,value,params){this.modExists("filter",!0)&&(this.modules.filter.addFilter(field,type,value,params),this.rowManager.filterRefresh())},Tabulator.prototype.getFilters=function(all){if(this.modExists("filter",!0))return this.modules.filter.getFilters(all)},Tabulator.prototype.setHeaderFilterFocus=function(field){if(this.modExists("filter",!0)){var column=this.columnManager.findColumn(field);if(!column)return console.warn("Column Filter Focus Error - No matching column found:",field),!1;this.modules.filter.setHeaderFilterFocus(column)}},Tabulator.prototype.getHeaderFilterValue=function(field){if(this.modExists("filter",!0)){var column=this.columnManager.findColumn(field);if(column)return this.modules.filter.getHeaderFilterValue(column);console.warn("Column Filter Error - No matching column found:",field)}},Tabulator.prototype.setHeaderFilterValue=function(field,value){if(this.modExists("filter",!0)){var column=this.columnManager.findColumn(field);if(!column)return console.warn("Column Filter Error - No matching column found:",field),!1;this.modules.filter.setHeaderFilterValue(column,value)}},Tabulator.prototype.getHeaderFilters=function(){if(this.modExists("filter",!0))return this.modules.filter.getHeaderFilters()},Tabulator.prototype.removeFilter=function(field,type,value){this.modExists("filter",!0)&&(this.modules.filter.removeFilter(field,type,value),this.rowManager.filterRefresh())},Tabulator.prototype.clearFilter=function(all){this.modExists("filter",!0)&&(this.modules.filter.clearFilter(all),this.rowManager.filterRefresh())},Tabulator.prototype.clearHeaderFilter=function(){this.modExists("filter",!0)&&(this.modules.filter.clearHeaderFilter(),this.rowManager.filterRefresh())},Tabulator.prototype.selectRow=function(rows){this.modExists("selectRow",!0)&&(!0===rows&&(console.warn("passing a boolean to the selectRowselectRow function is deprecated, you should now pass the string 'active'"),rows="active"),this.modules.selectRow.selectRows(rows))},Tabulator.prototype.deselectRow=function(rows){this.modExists("selectRow",!0)&&this.modules.selectRow.deselectRows(rows)},Tabulator.prototype.toggleSelectRow=function(row){this.modExists("selectRow",!0)&&this.modules.selectRow.toggleRow(row)},Tabulator.prototype.getSelectedRows=function(){if(this.modExists("selectRow",!0))return this.modules.selectRow.getSelectedRows()},Tabulator.prototype.getSelectedData=function(){if(this.modExists("selectRow",!0))return this.modules.selectRow.getSelectedData()},Tabulator.prototype.getInvalidCells=function(){if(this.modExists("validate",!0))return this.modules.validate.getInvalidCells()},Tabulator.prototype.clearCellValidation=function(cells){var _this31=this;this.modExists("validate",!0)&&(cells||(cells=this.modules.validate.getInvalidCells()),Array.isArray(cells)||(cells=[cells]),cells.forEach((function(cell){_this31.modules.validate.clearValidation(cell._getSelf())})))},Tabulator.prototype.validate=function(cells){var output=[];return this.rowManager.rows.forEach((function(row){var valid=row.validate();!0!==valid&&(output=output.concat(valid))})),!output.length||output},Tabulator.prototype.setMaxPage=function(max){if(!this.options.pagination||!this.modExists("page"))return!1;this.modules.page.setMaxPage(max)},Tabulator.prototype.setPage=function(page){return this.options.pagination&&this.modExists("page")?this.modules.page.setPage(page):new Promise((function(resolve,reject){reject()}))},Tabulator.prototype.setPageToRow=function(row){var _this32=this;return new Promise((function(resolve,reject){_this32.options.pagination&&_this32.modExists("page")&&(row=_this32.rowManager.findRow(row))?_this32.modules.page.setPageToRow(row).then((function(){resolve()})).catch((function(){reject()})):reject()}))},Tabulator.prototype.setPageSize=function(size){if(!this.options.pagination||!this.modExists("page"))return!1;this.modules.page.setPageSize(size),this.modules.page.setPage(1).then((function(){})).catch((function(){}))},Tabulator.prototype.getPageSize=function(){if(this.options.pagination&&this.modExists("page",!0))return this.modules.page.getPageSize()},Tabulator.prototype.previousPage=function(){if(!this.options.pagination||!this.modExists("page"))return!1;this.modules.page.previousPage()},Tabulator.prototype.nextPage=function(){if(!this.options.pagination||!this.modExists("page"))return!1;this.modules.page.nextPage()},Tabulator.prototype.getPage=function(){return!(!this.options.pagination||!this.modExists("page"))&&this.modules.page.getPage()},Tabulator.prototype.getPageMax=function(){return!(!this.options.pagination||!this.modExists("page"))&&this.modules.page.getPageMax()},Tabulator.prototype.setGroupBy=function(groups){if(!this.modExists("groupRows",!0))return!1;this.options.groupBy=groups,this.modules.groupRows.initialize(),this.rowManager.refreshActiveData("display"),this.options.persistence&&this.modExists("persistence",!0)&&this.modules.persistence.config.group&&this.modules.persistence.save("group")},Tabulator.prototype.setGroupStartOpen=function(values){if(!this.modExists("groupRows",!0))return!1;this.options.groupStartOpen=values,this.modules.groupRows.initialize(),this.options.groupBy?(this.rowManager.refreshActiveData("group"),this.options.persistence&&this.modExists("persistence",!0)&&this.modules.persistence.config.group&&this.modules.persistence.save("group")):console.warn("Grouping Update - cant refresh view, no groups have been set")},Tabulator.prototype.setGroupHeader=function(values){if(!this.modExists("groupRows",!0))return!1;this.options.groupHeader=values,this.modules.groupRows.initialize(),this.options.groupBy?(this.rowManager.refreshActiveData("group"),this.options.persistence&&this.modExists("persistence",!0)&&this.modules.persistence.config.group&&this.modules.persistence.save("group")):console.warn("Grouping Update - cant refresh view, no groups have been set")},Tabulator.prototype.getGroups=function(values){return!!this.modExists("groupRows",!0)&&this.modules.groupRows.getGroups(!0)},Tabulator.prototype.getGroupedData=function(){if(this.modExists("groupRows",!0))return this.options.groupBy?this.modules.groupRows.getGroupedData():this.getData()},Tabulator.prototype.getEditedCells=function(){if(this.modExists("edit",!0))return this.modules.edit.getEditedCells()},Tabulator.prototype.clearCellEdited=function(cells){var _this33=this;this.modExists("edit",!0)&&(cells||(cells=this.modules.edit.getEditedCells()),Array.isArray(cells)||(cells=[cells]),cells.forEach((function(cell){_this33.modules.edit.clearEdited(cell._getSelf())})))},Tabulator.prototype.getCalcResults=function(){return!!this.modExists("columnCalcs",!0)&&this.modules.columnCalcs.getResults()},Tabulator.prototype.recalc=function(){this.modExists("columnCalcs",!0)&&this.modules.columnCalcs.recalcAll(this.rowManager.activeRows)},Tabulator.prototype.navigatePrev=function(){var cell=!1;return!(!this.modExists("edit",!0)||!(cell=this.modules.edit.currentCell))&&cell.nav().prev()},Tabulator.prototype.navigateNext=function(){var cell=!1;return!(!this.modExists("edit",!0)||!(cell=this.modules.edit.currentCell))&&cell.nav().next()},Tabulator.prototype.navigateLeft=function(){var cell=!1;return!(!this.modExists("edit",!0)||!(cell=this.modules.edit.currentCell))&&(e.preventDefault(),cell.nav().left())},Tabulator.prototype.navigateRight=function(){var cell=!1;return!(!this.modExists("edit",!0)||!(cell=this.modules.edit.currentCell))&&(e.preventDefault(),cell.nav().right())},Tabulator.prototype.navigateUp=function(){var cell=!1;return!(!this.modExists("edit",!0)||!(cell=this.modules.edit.currentCell))&&(e.preventDefault(),cell.nav().up())},Tabulator.prototype.navigateDown=function(){var cell=!1;return!(!this.modExists("edit",!0)||!(cell=this.modules.edit.currentCell))&&(e.preventDefault(),cell.nav().down())},Tabulator.prototype.undo=function(){return!(!this.options.history||!this.modExists("history",!0))&&this.modules.history.undo()},Tabulator.prototype.redo=function(){return!(!this.options.history||!this.modExists("history",!0))&&this.modules.history.redo()},Tabulator.prototype.getHistoryUndoSize=function(){return!(!this.options.history||!this.modExists("history",!0))&&this.modules.history.getHistoryUndoSize()},Tabulator.prototype.getHistoryRedoSize=function(){return!(!this.options.history||!this.modExists("history",!0))&&this.modules.history.getHistoryRedoSize()},Tabulator.prototype.download=function(type,filename,options,active){this.modExists("download",!0)&&this.modules.download.download(type,filename,options,active)},Tabulator.prototype.downloadToTab=function(type,filename,options,active){this.modExists("download",!0)&&this.modules.download.download(type,filename,options,active,!0)},Tabulator.prototype.tableComms=function(table,module,action,data){this.modules.comms.receive(table,module,action,data)},Tabulator.prototype.moduleBindings={},Tabulator.prototype.extendModule=function(name,property,values){if(Tabulator.prototype.moduleBindings[name]){var source=Tabulator.prototype.moduleBindings[name].prototype[property];if(source)if("object"==(void 0===values?"undefined":_typeof(values)))for(var key in values)source[key]=values[key];else console.warn("Module Error - Invalid value type, it must be an object");else console.warn("Module Error - property does not exist:",property)}else console.warn("Module Error - module does not exist:",name)},Tabulator.prototype.registerModule=function(name,module){var self=this;Tabulator.prototype.moduleBindings[name]=module},Tabulator.prototype.bindModules=function(){for(var name in this.modules={},Tabulator.prototype.moduleBindings)this.modules[name]=new Tabulator.prototype.moduleBindings[name](this)},Tabulator.prototype.modExists=function(plugin,required){return!!this.modules[plugin]||(required&&console.error("Tabulator Module Not Installed: "+plugin),!1)},Tabulator.prototype.helpers={elVisible:function elVisible(el){return!(el.offsetWidth<=0&&el.offsetHeight<=0)},elOffset:function elOffset(el){var box=el.getBoundingClientRect();return{top:box.top+window.pageYOffset-document.documentElement.clientTop,left:box.left+window.pageXOffset-document.documentElement.clientLeft}},deepClone:function deepClone(obj){var clone=Array.isArray(obj)?[]:{};for(var i in obj)null!=obj[i]&&"object"===_typeof(obj[i])?obj[i]instanceof Date?clone[i]=new Date(obj[i]):clone[i]=this.deepClone(obj[i]):clone[i]=obj[i];return clone}},Tabulator.prototype.comms={tables:[],register:function register(table){Tabulator.prototype.comms.tables.push(table)},deregister:function deregister(table){var index=Tabulator.prototype.comms.tables.indexOf(table);index>-1&&Tabulator.prototype.comms.tables.splice(index,1)},lookupTable:function lookupTable(query,silent){var results=[],matches,match;if("string"==typeof query){if((matches=document.querySelectorAll(query)).length)for(var i=0;i<matches.length;i++)(match=Tabulator.prototype.comms.matchElement(matches[i]))&&results.push(match)}else"undefined"!=typeof HTMLElement&&query instanceof HTMLElement||query instanceof Tabulator?(match=Tabulator.prototype.comms.matchElement(query))&&results.push(match):Array.isArray(query)?query.forEach((function(item){results=results.concat(Tabulator.prototype.comms.lookupTable(item))})):silent||console.warn("Table Connection Error - Invalid Selector",query);return results},matchElement:function matchElement(element){return Tabulator.prototype.comms.tables.find((function(table){return element instanceof Tabulator?table===element:table.element===element}))}},Tabulator.prototype.findTable=function(query){var results=Tabulator.prototype.comms.lookupTable(query,!0);return!(Array.isArray(results)&&!results.length)&&results};var Layout=function Layout(table){this.table=table,this.mode=null};Layout.prototype.initialize=function(layout){this.modes[layout]?this.mode=layout:(console.warn("Layout Error - invalid mode set, defaulting to 'fitData' : "+layout),this.mode="fitData"),this.table.element.setAttribute("tabulator-layout",this.mode)},Layout.prototype.getMode=function(){return this.mode},Layout.prototype.layout=function(){this.modes[this.mode].call(this,this.table.columnManager.columnsByIndex)},Layout.prototype.modes={fitData:function fitData(columns){columns.forEach((function(column){column.reinitializeWidth()})),this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.update()},fitDataFill:function fitDataFill(columns){columns.forEach((function(column){column.reinitializeWidth()})),this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.update()},fitDataTable:function fitDataTable(columns){columns.forEach((function(column){column.reinitializeWidth()})),this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.update()},fitDataStretch:function fitDataStretch(columns){var _this34=this,colsWidth=0,tableWidth=this.table.rowManager.element.clientWidth,gap=0,lastCol=!1;columns.forEach((function(column,i){column.widthFixed||column.reinitializeWidth(),(_this34.table.options.responsiveLayout?column.modules.responsive.visible:column.visible)&&(lastCol=column),column.visible&&(colsWidth+=column.getWidth())})),lastCol?(gap=tableWidth-colsWidth+lastCol.getWidth(),this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&(lastCol.setWidth(0),this.table.modules.responsiveLayout.update()),gap>0?lastCol.setWidth(gap):lastCol.reinitializeWidth()):this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.update()},fitColumns:function fitColumns(columns){var self=this,totalWidth=this.table.element.clientWidth,fixedWidth=0,flexWidth=0,flexGrowUnits=0,flexColWidth=0,flexColumns=[],fixedShrinkColumns=[],flexShrinkUnits=0,overflowWidth=0,gapFill=0;function calcWidth(width){var colWidth;return colWidth="string"==typeof width?width.indexOf("%")>-1?totalWidth/100*parseInt(width):parseInt(width):width}function scaleColumns(columns,freeSpace,colWidth,shrinkCols){var oversizeCols=[],oversizeSpace=0,remainingSpace=0,nextColWidth=0,gap=0,changeUnits=0,undersizeCols=[];function calcGrow(col){return colWidth*(col.column.definition.widthGrow||1)}function calcShrink(col){return calcWidth(col.width)-colWidth*(col.column.definition.widthShrink||0)}return columns.forEach((function(col,i){var width=shrinkCols?calcShrink(col):calcGrow(col);col.column.minWidth>=width?oversizeCols.push(col):(undersizeCols.push(col),changeUnits+=shrinkCols?col.column.definition.widthShrink||1:col.column.definition.widthGrow||1)})),oversizeCols.length?(oversizeCols.forEach((function(col){oversizeSpace+=shrinkCols?col.width-col.column.minWidth:col.column.minWidth,col.width=col.column.minWidth})),gap=(remainingSpace=freeSpace-oversizeSpace)-(nextColWidth=changeUnits?Math.floor(remainingSpace/changeUnits):remainingSpace)*changeUnits,gap+=scaleColumns(undersizeCols,remainingSpace,nextColWidth,shrinkCols)):(gap=changeUnits?freeSpace-Math.floor(freeSpace/changeUnits)*changeUnits:freeSpace,undersizeCols.forEach((function(column){column.width=shrinkCols?calcShrink(column):calcGrow(column)}))),gap}this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.update(),this.table.rowManager.element.scrollHeight>this.table.rowManager.element.clientHeight&&(totalWidth-=this.table.rowManager.element.offsetWidth-this.table.rowManager.element.clientWidth),columns.forEach((function(column){var width,minWidth,colWidth;column.visible&&(width=column.definition.width,minWidth=parseInt(column.minWidth),width?(colWidth=calcWidth(width),fixedWidth+=colWidth>minWidth?colWidth:minWidth,column.definition.widthShrink&&(fixedShrinkColumns.push({column:column,width:colWidth>minWidth?colWidth:minWidth}),flexShrinkUnits+=column.definition.widthShrink)):(flexColumns.push({column:column,width:0}),flexGrowUnits+=column.definition.widthGrow||1))})),flexWidth=totalWidth-fixedWidth,flexColWidth=Math.floor(flexWidth/flexGrowUnits);var gapFill=scaleColumns(flexColumns,flexWidth,flexColWidth,!1);flexColumns.length&&gapFill>0&&(flexColumns[flexColumns.length-1].width+=+gapFill),flexColumns.forEach((function(col){flexWidth-=col.width})),(overflowWidth=Math.abs(gapFill)+flexWidth)>0&&flexShrinkUnits&&(gapFill=scaleColumns(fixedShrinkColumns,overflowWidth,Math.floor(overflowWidth/flexShrinkUnits),!0)),fixedShrinkColumns.length&&(fixedShrinkColumns[fixedShrinkColumns.length-1].width-=gapFill),flexColumns.forEach((function(col){col.column.setWidth(col.width)})),fixedShrinkColumns.forEach((function(col){col.column.setWidth(col.width)}))}},Tabulator.prototype.registerModule("layout",Layout);var Localize=function Localize(table){this.table=table,this.locale="default",this.lang=!1,this.bindings={}};Localize.prototype.setHeaderFilterPlaceholder=function(placeholder){this.langs.default.headerFilters.default=placeholder},Localize.prototype.setHeaderFilterColumnPlaceholder=function(column,placeholder){this.langs.default.headerFilters.columns[column]=placeholder,this.lang&&!this.lang.headerFilters.columns[column]&&(this.lang.headerFilters.columns[column]=placeholder)},Localize.prototype.installLang=function(locale,lang){this.langs[locale]?this._setLangProp(this.langs[locale],lang):this.langs[locale]=lang},Localize.prototype._setLangProp=function(lang,values){for(var key in values)lang[key]&&"object"==_typeof(lang[key])?this._setLangProp(lang[key],values[key]):lang[key]=values[key]},Localize.prototype.setLocale=function(desiredLocale){var self=this;function traverseLang(trans,path){for(var prop in trans)"object"==_typeof(trans[prop])?(path[prop]||(path[prop]={}),traverseLang(trans[prop],path[prop])):path[prop]=trans[prop]}if(!0===(desiredLocale=desiredLocale||"default")&&navigator.language&&(desiredLocale=navigator.language.toLowerCase()),desiredLocale&&!this.langs[desiredLocale]){var prefix=desiredLocale.split("-")[0];this.langs[prefix]?(console.warn("Localization Error - Exact matching locale not found, using closest match: ",desiredLocale,prefix),desiredLocale=prefix):(console.warn("Localization Error - Matching locale not found, using default: ",desiredLocale),desiredLocale="default")}this.locale=desiredLocale,this.lang=Tabulator.prototype.helpers.deepClone(this.langs.default||{}),"default"!=desiredLocale&&traverseLang(this.langs[desiredLocale],this.lang),this.table.options.localized.call(this.table,this.locale,this.lang),this._executeBindings()},Localize.prototype.getLocale=function(locale){return self.locale},Localize.prototype.getLang=function(locale){return locale?this.langs[locale]:this.lang},Localize.prototype.getText=function(path,value){var path,pathArray=(path=value?path+"|"+value:path).split("|"),text;return this._getLangElement(pathArray,this.locale)||""},Localize.prototype._getLangElement=function(path,locale){var self=this,root=this.lang;return path.forEach((function(level){var rootPath;root&&(rootPath=root[level],root=void 0!==rootPath&&rootPath)})),root},Localize.prototype.bind=function(path,callback){this.bindings[path]||(this.bindings[path]=[]),this.bindings[path].push(callback),callback(this.getText(path),this.lang)},Localize.prototype._executeBindings=function(){var self=this,_loop=function _loop(path){self.bindings[path].forEach((function(binding){binding(self.getText(path),self.lang)}))};for(var path in self.bindings)_loop(path)},Localize.prototype.langs={default:{groups:{item:"item",items:"items"},columns:{},ajax:{loading:"Loading",error:"Error"},pagination:{page_size:"Page Size",page_title:"Show Page",first:"First",first_title:"First Page",last:"Last",last_title:"Last Page",prev:"Prev",prev_title:"Prev Page",next:"Next",next_title:"Next Page",all:"All"},headerFilters:{default:"filter column...",columns:{}}}},Tabulator.prototype.registerModule("localize",Localize);var Comms=function Comms(table){this.table=table};Comms.prototype.getConnections=function(selectors){var self=this,connections=[],connection;return(connection=Tabulator.prototype.comms.lookupTable(selectors)).forEach((function(con){self.table!==con&&connections.push(con)})),connections},Comms.prototype.send=function(selectors,module,action,data){var self=this,connections=this.getConnections(selectors);connections.forEach((function(connection){connection.tableComms(self.table.element,module,action,data)})),!connections.length&&selectors&&console.warn("Table Connection Error - No tables matching selector found",selectors)},Comms.prototype.receive=function(table,module,action,data){if(this.table.modExists(module))return this.table.modules[module].commsReceived(table,action,data);console.warn("Inter-table Comms Error - no such module:",module)},Tabulator.prototype.registerModule("comms",Comms);var Accessor=function Accessor(table){this.table=table,this.allowedTypes=["","data","download","clipboard","print","htmlOutput"]};Accessor.prototype.initializeColumn=function(column){var self=this,match=!1,config={};this.allowedTypes.forEach((function(type){var key="accessor"+(type.charAt(0).toUpperCase()+type.slice(1)),accessor;column.definition[key]&&(accessor=self.lookupAccessor(column.definition[key]))&&(match=!0,config[key]={accessor:accessor,params:column.definition[key+"Params"]||{}})})),match&&(column.modules.accessor=config)},Accessor.prototype.lookupAccessor=function(value){var accessor=!1;switch(void 0===value?"undefined":_typeof(value)){case"string":this.accessors[value]?accessor=this.accessors[value]:console.warn("Accessor Error - No such accessor found, ignoring: ",value);break;case"function":accessor=value}return accessor},Accessor.prototype.transformRow=function(dataIn,type){var self=this,key="accessor"+(type.charAt(0).toUpperCase()+type.slice(1)),data=Tabulator.prototype.helpers.deepClone(dataIn||{});return this.table.columnManager.traverse((function(column){var value,accessor,params,component;column.modules.accessor&&(accessor=column.modules.accessor[key]||column.modules.accessor.accessor||!1)&&"undefined"!=(value=column.getFieldValue(data))&&(component=column.getComponent(),params="function"==typeof accessor.params?accessor.params(value,data,type,component):accessor.params,column.setFieldValue(data,accessor.accessor(value,data,type,params,component)))})),data},Accessor.prototype.accessors={},Tabulator.prototype.registerModule("accessor",Accessor);var Ajax=function Ajax(table){this.table=table,this.config=!1,this.url="",this.urlGenerator=!1,this.params=!1,this.loaderElement=this.createLoaderElement(),this.msgElement=this.createMsgElement(),this.loadingElement=!1,this.errorElement=!1,this.loaderPromise=!1,this.progressiveLoad=!1,this.loading=!1,this.requestOrder=0};Ajax.prototype.initialize=function(){var template;this.loaderElement.appendChild(this.msgElement),this.table.options.ajaxLoaderLoading&&("string"==typeof this.table.options.ajaxLoaderLoading?((template=document.createElement("template")).innerHTML=this.table.options.ajaxLoaderLoading.trim(),this.loadingElement=template.content.firstChild):this.loadingElement=this.table.options.ajaxLoaderLoading),this.loaderPromise=this.table.options.ajaxRequestFunc||this.defaultLoaderPromise,this.urlGenerator=this.table.options.ajaxURLGenerator||this.defaultURLGenerator,this.table.options.ajaxLoaderError&&("string"==typeof this.table.options.ajaxLoaderError?((template=document.createElement("template")).innerHTML=this.table.options.ajaxLoaderError.trim(),this.errorElement=template.content.firstChild):this.errorElement=this.table.options.ajaxLoaderError),this.table.options.ajaxParams&&this.setParams(this.table.options.ajaxParams),this.table.options.ajaxConfig&&this.setConfig(this.table.options.ajaxConfig),this.table.options.ajaxURL&&this.setUrl(this.table.options.ajaxURL),this.table.options.ajaxProgressiveLoad&&(this.table.options.pagination?(this.progressiveLoad=!1,console.error("Progressive Load Error - Pagination and progressive load cannot be used at the same time")):this.table.modExists("page")?(this.progressiveLoad=this.table.options.ajaxProgressiveLoad,this.table.modules.page.initializeProgressive(this.progressiveLoad)):console.error("Pagination plugin is required for progressive ajax loading"))},Ajax.prototype.createLoaderElement=function(){var el=document.createElement("div");return el.classList.add("tabulator-loader"),el},Ajax.prototype.createMsgElement=function(){var el=document.createElement("div");return el.classList.add("tabulator-loader-msg"),el.setAttribute("role","alert"),el},Ajax.prototype.setParams=function(params,update){if(update)for(var key in this.params=this.params||{},params)this.params[key]=params[key];else this.params=params},Ajax.prototype.getParams=function(){return this.params||{}},Ajax.prototype.setConfig=function(config){if(this._loadDefaultConfig(),"string"==typeof config)this.config.method=config;else for(var key in config)this.config[key]=config[key]},Ajax.prototype._loadDefaultConfig=function(force){var self=this;if(!this.config||force)for(var key in this.config={},this.defaultConfig)this.config[key]=this.defaultConfig[key]},Ajax.prototype.setUrl=function(url){this.url=url},Ajax.prototype.getUrl=function(){return this.url},Ajax.prototype.loadData=function(inPosition,columnsChanged){var self=this;return this.progressiveLoad?this._loadDataProgressive():this._loadDataStandard(inPosition,columnsChanged)},Ajax.prototype.nextPage=function(diff){var margin;this.loading||diff<(margin=this.table.options.ajaxProgressiveLoadScrollMargin||2*this.table.rowManager.getElement().clientHeight)&&this.table.modules.page.nextPage().then((function(){})).catch((function(){}))},Ajax.prototype.blockActiveRequest=function(){this.requestOrder++},Ajax.prototype._loadDataProgressive=function(){return this.table.rowManager.setData([]),this.table.modules.page.setPage(1)},Ajax.prototype._loadDataStandard=function(inPosition,columnsChanged){var _this35=this;return new Promise((function(resolve,reject){_this35.sendRequest(inPosition).then((function(data){_this35.table.rowManager.setData(data,inPosition,columnsChanged).then((function(){resolve()})).catch((function(e){reject(e)}))})).catch((function(e){reject(e)}))}))},Ajax.prototype.generateParamsList=function(data,prefix){var self=this,output=[];if(prefix=prefix||"",Array.isArray(data))data.forEach((function(item,i){output=output.concat(self.generateParamsList(item,prefix?prefix+"["+i+"]":i))}));else if("object"===(void 0===data?"undefined":_typeof(data)))for(var key in data)output=output.concat(self.generateParamsList(data[key],prefix?prefix+"["+key+"]":key));else output.push({key:prefix,value:data});return output},Ajax.prototype.serializeParams=function(params){var output=this.generateParamsList(params),encoded=[];return output.forEach((function(item){encoded.push(encodeURIComponent(item.key)+"="+encodeURIComponent(item.value))})),encoded.join("&")},Ajax.prototype.sendRequest=function(silent){var _this36=this,self=this,url=self.url,requestNo,esc,query;return self.requestOrder++,requestNo=self.requestOrder,self._loadDefaultConfig(),new Promise((function(resolve,reject){!1!==self.table.options.ajaxRequesting.call(_this36.table,self.url,self.params)?(self.loading=!0,silent||self.showLoader(),_this36.loaderPromise(url,self.config,self.params).then((function(data){requestNo===self.requestOrder?(self.table.options.ajaxResponse&&(data=self.table.options.ajaxResponse.call(self.table,self.url,self.params,data)),resolve(data),self.hideLoader(),self.loading=!1):console.warn("Ajax Response Blocked - An active ajax request was blocked by an attempt to change table data while the request was being made")})).catch((function(error){console.error("Ajax Load Error: ",error),self.table.options.ajaxError.call(self.table,error),self.showError(),setTimeout((function(){self.hideLoader()}),3e3),self.loading=!1,reject()}))):reject()}))},Ajax.prototype.showLoader=function(){var shouldLoad;if("function"==typeof this.table.options.ajaxLoader?this.table.options.ajaxLoader():this.table.options.ajaxLoader){for(this.hideLoader();this.msgElement.firstChild;)this.msgElement.removeChild(this.msgElement.firstChild);this.msgElement.classList.remove("tabulator-error"),this.msgElement.classList.add("tabulator-loading"),this.loadingElement?this.msgElement.appendChild(this.loadingElement):this.msgElement.innerHTML=this.table.modules.localize.getText("ajax|loading"),this.table.element.appendChild(this.loaderElement)}},Ajax.prototype.showError=function(){for(this.hideLoader();this.msgElement.firstChild;)this.msgElement.removeChild(this.msgElement.firstChild);this.msgElement.classList.remove("tabulator-loading"),this.msgElement.classList.add("tabulator-error"),this.errorElement?this.msgElement.appendChild(this.errorElement):this.msgElement.innerHTML=this.table.modules.localize.getText("ajax|error"),this.table.element.appendChild(this.loaderElement)},Ajax.prototype.hideLoader=function(){this.loaderElement.parentNode&&this.loaderElement.parentNode.removeChild(this.loaderElement)},Ajax.prototype.defaultConfig={method:"GET"},Ajax.prototype.defaultURLGenerator=function(url,config,params){return url&&params&&Object.keys(params).length&&(config.method&&"get"!=config.method.toLowerCase()||(config.method="get",url+=(url.includes("?")?"&":"?")+this.serializeParams(params))),url},Ajax.prototype.defaultLoaderPromise=function(url,config,params){var self=this,contentType;return new Promise((function(resolve,reject){if(url=self.urlGenerator(url,config,params),"GET"!=config.method.toUpperCase())if(contentType="object"===_typeof(self.table.options.ajaxContentType)?self.table.options.ajaxContentType:self.contentTypeFormatters[self.table.options.ajaxContentType]){for(var key in contentType.headers)config.headers||(config.headers={}),void 0===config.headers[key]&&(config.headers[key]=contentType.headers[key]);config.body=contentType.body.call(self,url,config,params)}else console.warn("Ajax Error - Invalid ajaxContentType value:",self.table.options.ajaxContentType);url?(void 0===config.headers&&(config.headers={}),void 0===config.headers.Accept&&(config.headers.Accept="application/json"),void 0===config.headers["X-Requested-With"]&&(config.headers["X-Requested-With"]="XMLHttpRequest"),void 0===config.mode&&(config.mode="cors"),"cors"==config.mode?(void 0===config.headers["Access-Control-Allow-Origin"]&&(config.headers["Access-Control-Allow-Origin"]=window.location.origin),void 0===config.credentials&&(config.credentials="same-origin")):void 0===config.credentials&&(config.credentials="include"),fetch(url,config).then((function(response){response.ok?response.json().then((function(data){resolve(data)})).catch((function(error){reject(error),console.warn("Ajax Load Error - Invalid JSON returned",error)})):(console.error("Ajax Load Error - Connection Error: "+response.status,response.statusText),reject(response))})).catch((function(error){console.error("Ajax Load Error - Connection Error: ",error),reject(error)}))):(console.warn("Ajax Load Error - No URL Set"),resolve([]))}))},Ajax.prototype.contentTypeFormatters={json:{headers:{"Content-Type":"application/json"},body:function body(url,config,params){return JSON.stringify(params)}},form:{headers:{},body:function body(url,config,params){var output=this.generateParamsList(params),form=new FormData;return output.forEach((function(item){form.append(item.key,item.value)})),form}}},Tabulator.prototype.registerModule("ajax",Ajax);var ColumnCalcs=function ColumnCalcs(table){this.table=table,this.topCalcs=[],this.botCalcs=[],this.genColumn=!1,this.topElement=this.createElement(),this.botElement=this.createElement(),this.topRow=!1,this.botRow=!1,this.topInitialized=!1,this.botInitialized=!1,this.initialize()};ColumnCalcs.prototype.createElement=function(){var el=document.createElement("div");return el.classList.add("tabulator-calcs-holder"),el},ColumnCalcs.prototype.initialize=function(){this.genColumn=new Column({field:"value"},this)},ColumnCalcs.prototype.registerColumnField=function(){},ColumnCalcs.prototype.initializeColumn=function(column){var def=column.definition,config={topCalcParams:def.topCalcParams||{},botCalcParams:def.bottomCalcParams||{}};if(def.topCalc){switch(_typeof(def.topCalc)){case"string":this.calculations[def.topCalc]?config.topCalc=this.calculations[def.topCalc]:console.warn("Column Calc Error - No such calculation found, ignoring: ",def.topCalc);break;case"function":config.topCalc=def.topCalc}config.topCalc&&(column.modules.columnCalcs=config,this.topCalcs.push(column),"group"!=this.table.options.columnCalcs&&this.initializeTopRow())}if(def.bottomCalc){switch(_typeof(def.bottomCalc)){case"string":this.calculations[def.bottomCalc]?config.botCalc=this.calculations[def.bottomCalc]:console.warn("Column Calc Error - No such calculation found, ignoring: ",def.bottomCalc);break;case"function":config.botCalc=def.bottomCalc}config.botCalc&&(column.modules.columnCalcs=config,this.botCalcs.push(column),"group"!=this.table.options.columnCalcs&&this.initializeBottomRow())}},ColumnCalcs.prototype.removeCalcs=function(){var changed=!1;this.topInitialized&&(this.topInitialized=!1,this.topElement.parentNode.removeChild(this.topElement),changed=!0),this.botInitialized&&(this.botInitialized=!1,this.table.footerManager.remove(this.botElement),changed=!0),changed&&this.table.rowManager.adjustTableSize()},ColumnCalcs.prototype.initializeTopRow=function(){this.topInitialized||(this.table.columnManager.getElement().insertBefore(this.topElement,this.table.columnManager.headersElement.nextSibling),this.topInitialized=!0)},ColumnCalcs.prototype.initializeBottomRow=function(){this.botInitialized||(this.table.footerManager.prepend(this.botElement),this.botInitialized=!0)},ColumnCalcs.prototype.scrollHorizontal=function(left){var hozAdjust=0,scrollWidth=this.table.columnManager.getElement().scrollWidth-this.table.element.clientWidth;this.botInitialized&&(this.botRow.getElement().style.marginLeft=-left+"px")},ColumnCalcs.prototype.recalc=function(rows){var data,row;if(this.topInitialized||this.botInitialized){if(data=this.rowsToData(rows),this.topInitialized){for(this.topRow&&this.topRow.deleteCells(),row=this.generateRow("top",this.rowsToData(rows)),this.topRow=row;this.topElement.firstChild;)this.topElement.removeChild(this.topElement.firstChild);this.topElement.appendChild(row.getElement()),row.initialize(!0)}if(this.botInitialized){for(this.botRow&&this.botRow.deleteCells(),row=this.generateRow("bottom",this.rowsToData(rows)),this.botRow=row;this.botElement.firstChild;)this.botElement.removeChild(this.botElement.firstChild);this.botElement.appendChild(row.getElement()),row.initialize(!0)}this.table.rowManager.adjustTableSize(),this.table.modExists("frozenColumns")&&this.table.modules.frozenColumns.layout()}},ColumnCalcs.prototype.recalcRowGroup=function(row){this.recalcGroup(this.table.modules.groupRows.getRowGroup(row))},ColumnCalcs.prototype.recalcAll=function(){var _this37=this,groups;(this.topCalcs.length||this.botCalcs.length)&&("group"!==this.table.options.columnCalcs&&this.recalc(this.table.rowManager.activeRows),this.table.options.groupBy&&"table"!==this.table.options.columnCalcs&&table.modules.groupRows.getChildGroups().forEach((function(group){_this37.recalcGroup(group)})))},ColumnCalcs.prototype.recalcGroup=function(group){var data,rowData;group&&group.calcs&&(group.calcs.bottom&&(data=this.rowsToData(group.rows),rowData=this.generateRowData("bottom",data),group.calcs.bottom.updateData(rowData),group.calcs.bottom.reinitialize()),group.calcs.top&&(data=this.rowsToData(group.rows),rowData=this.generateRowData("top",data),group.calcs.top.updateData(rowData),group.calcs.top.reinitialize()))},ColumnCalcs.prototype.generateTopRow=function(rows){return this.generateRow("top",this.rowsToData(rows))},ColumnCalcs.prototype.generateBottomRow=function(rows){return this.generateRow("bottom",this.rowsToData(rows))},ColumnCalcs.prototype.rowsToData=function(rows){var _this38=this,data=[];return rows.forEach((function(row){if(data.push(row.getData()),_this38.table.options.dataTree&&_this38.table.options.dataTreeChildColumnCalcs&&row.modules.dataTree.open){var children=_this38.rowsToData(_this38.table.modules.dataTree.getFilteredTreeChildren(row));data=data.concat(children)}})),data},ColumnCalcs.prototype.generateRow=function(pos,data){var self=this,rowData=this.generateRowData(pos,data),row;return self.table.modExists("mutator")&&self.table.modules.mutator.disable(),row=new Row(rowData,this,"calc"),self.table.modExists("mutator")&&self.table.modules.mutator.enable(),row.getElement().classList.add("tabulator-calcs","tabulator-calcs-"+pos),row.generateCells=function(){var cells=[];self.table.columnManager.columnsByIndex.forEach((function(column){self.genColumn.setField(column.getField()),self.genColumn.hozAlign=column.hozAlign,column.definition[pos+"CalcFormatter"]&&self.table.modExists("format")?self.genColumn.modules.format={formatter:self.table.modules.format.getFormatter(column.definition[pos+"CalcFormatter"]),params:column.definition[pos+"CalcFormatterParams"]}:self.genColumn.modules.format={formatter:self.table.modules.format.getFormatter("plaintext"),params:{}},self.genColumn.definition.cssClass=column.definition.cssClass;var cell=new Cell(self.genColumn,row);cell.column=column,cell.setWidth(),column.cells.push(cell),cells.push(cell),column.visible||cell.hide()})),this.cells=cells},row},ColumnCalcs.prototype.generateRowData=function(pos,data){var rowData={},calcs="top"==pos?this.topCalcs:this.botCalcs,type="top"==pos?"topCalc":"botCalc",params,paramKey;return calcs.forEach((function(column){var values=[];column.modules.columnCalcs&&column.modules.columnCalcs[type]&&(data.forEach((function(item){values.push(column.getFieldValue(item))})),paramKey=type+"Params",params="function"==typeof column.modules.columnCalcs[paramKey]?column.modules.columnCalcs[paramKey](values,data):column.modules.columnCalcs[paramKey],column.setFieldValue(rowData,column.modules.columnCalcs[type](values,data,params)))})),rowData},ColumnCalcs.prototype.hasTopCalcs=function(){return!!this.topCalcs.length},ColumnCalcs.prototype.hasBottomCalcs=function(){return!!this.botCalcs.length},ColumnCalcs.prototype.redraw=function(){this.topRow&&this.topRow.normalizeHeight(!0),this.botRow&&this.botRow.normalizeHeight(!0)},ColumnCalcs.prototype.getResults=function(){var self=this,results={},groups;return this.table.options.groupBy&&this.table.modExists("groupRows")?(groups=this.table.modules.groupRows.getGroups(!0)).forEach((function(group){results[group.getKey()]=self.getGroupResults(group)})):results={top:this.topRow?this.topRow.getData():{},bottom:this.botRow?this.botRow.getData():{}},results},ColumnCalcs.prototype.getGroupResults=function(group){var self=this,groupObj=group._getSelf(),subGroups=group.getSubGroups(),subGroupResults={},results={};return subGroups.forEach((function(subgroup){subGroupResults[subgroup.getKey()]=self.getGroupResults(subgroup)})),results={top:groupObj.calcs.top?groupObj.calcs.top.getData():{},bottom:groupObj.calcs.bottom?groupObj.calcs.bottom.getData():{},groups:subGroupResults}},ColumnCalcs.prototype.calculations={avg:function avg(values,data,calcParams){var output=0,precision=void 0!==calcParams.precision?calcParams.precision:2;return values.length&&(output=values.reduce((function(sum,value){return sum+(value=Number(value))})),output/=values.length,output=!1!==precision?output.toFixed(precision):output),parseFloat(output).toString()},max:function max(values,data,calcParams){var output=null,precision=void 0!==calcParams.precision&&calcParams.precision;return values.forEach((function(value){((value=Number(value))>output||null===output)&&(output=value)})),null!==output?!1!==precision?output.toFixed(precision):output:""},min:function min(values,data,calcParams){var output=null,precision=void 0!==calcParams.precision&&calcParams.precision;return values.forEach((function(value){((value=Number(value))<output||null===output)&&(output=value)})),null!==output?!1!==precision?output.toFixed(precision):output:""},sum:function sum(values,data,calcParams){var output=0,precision=void 0!==calcParams.precision&&calcParams.precision;return values.length&&values.forEach((function(value){value=Number(value),output+=isNaN(value)?0:Number(value)})),!1!==precision?output.toFixed(precision):output},concat:function concat(values,data,calcParams){var output=0;return values.length&&(output=values.reduce((function(sum,value){return String(sum)+String(value)}))),output},count:function count(values,data,calcParams){var output=0;return values.length&&values.forEach((function(value){value&&output++})),output}},Tabulator.prototype.registerModule("columnCalcs",ColumnCalcs);var Clipboard=function Clipboard(table){this.table=table,this.mode=!0,this.pasteParser=function(){},this.pasteAction=function(){},this.customSelection=!1,this.rowRange=!1,this.blocked=!0};Clipboard.prototype.initialize=function(){var _this39=this;this.mode=this.table.options.clipboard,this.rowRange=this.table.options.clipboardCopyRowRange,!0!==this.mode&&"copy"!==this.mode||this.table.element.addEventListener("copy",(function(e){var plain,html,list;if(!_this39.blocked){if(e.preventDefault(),_this39.customSelection)plain=_this39.customSelection,_this39.table.options.clipboardCopyFormatter&&(plain=_this39.table.options.clipboardCopyFormatter("plain",plain));else{var list=_this39.table.modules.export.generateExportList(_this39.rowRange,_this39.table.options.clipboardCopyStyled,_this39.table.options.clipboardCopyConfig,"clipboard");plain=(html=_this39.table.modules.export.genereateHTMLTable(list))?_this39.generatePlainContent(list):"",_this39.table.options.clipboardCopyFormatter&&(plain=_this39.table.options.clipboardCopyFormatter("plain",plain),html=_this39.table.options.clipboardCopyFormatter("html",html))}window.clipboardData&&window.clipboardData.setData?window.clipboardData.setData("Text",plain):e.clipboardData&&e.clipboardData.setData?(e.clipboardData.setData("text/plain",plain),html&&e.clipboardData.setData("text/html",html)):e.originalEvent&&e.originalEvent.clipboardData.setData&&(e.originalEvent.clipboardData.setData("text/plain",plain),html&&e.originalEvent.clipboardData.setData("text/html",html)),_this39.table.options.clipboardCopied.call(_this39.table,plain,html),_this39.reset()}})),!0!==this.mode&&"paste"!==this.mode||this.table.element.addEventListener("paste",(function(e){_this39.paste(e)})),this.setPasteParser(this.table.options.clipboardPasteParser),this.setPasteAction(this.table.options.clipboardPasteAction)},Clipboard.prototype.reset=function(){this.blocked=!1,this.originalSelectionText=""},Clipboard.prototype.generatePlainContent=function(list){var output=[];return list.forEach((function(row){var rowData=[];row.columns.forEach((function(col){var value="";if(col)switch("group"===row.type&&(col.value=col.component.getKey()),_typeof(col.value)){case"object":value=JSON.stringify(col.value);break;case"undefined":case"null":value="";break;default:value=col.value}rowData.push(value)})),output.push(rowData.join("\t"))})),output.join("\n")},Clipboard.prototype.copy=function(range,internal){var range,sel,textRange;this.blocked=!1,this.customSelection=!1,!0!==this.mode&&"copy"!==this.mode||(this.rowRange=range||this.table.options.clipboardCopyRowRange,void 0!==window.getSelection&&void 0!==document.createRange?((range=document.createRange()).selectNodeContents(this.table.element),(sel=window.getSelection()).toString()&&internal&&(this.customSelection=sel.toString()),sel.removeAllRanges(),sel.addRange(range)):void 0!==document.selection&&void 0!==document.body.createTextRange&&((textRange=document.body.createTextRange()).moveToElementText(this.table.element),textRange.select()),document.execCommand("copy"),sel&&sel.removeAllRanges())},Clipboard.prototype.setPasteAction=function(action){switch(void 0===action?"undefined":_typeof(action)){case"string":this.pasteAction=this.pasteActions[action],this.pasteAction||console.warn("Clipboard Error - No such paste action found:",action);break;case"function":this.pasteAction=action}},Clipboard.prototype.setPasteParser=function(parser){switch(void 0===parser?"undefined":_typeof(parser)){case"string":this.pasteParser=this.pasteParsers[parser],this.pasteParser||console.warn("Clipboard Error - No such paste parser found:",parser);break;case"function":this.pasteParser=parser}},Clipboard.prototype.paste=function(e){var data,rowData,rows;this.checkPaseOrigin(e)&&(data=this.getPasteData(e),(rowData=this.pasteParser.call(this,data))?(e.preventDefault(),this.table.modExists("mutator")&&(rowData=this.mutateData(rowData)),rows=this.pasteAction.call(this,rowData),this.table.options.clipboardPasted.call(this.table,data,rowData,rows)):this.table.options.clipboardPasteError.call(this.table,data))},Clipboard.prototype.mutateData=function(data){var self=this,output=[];return Array.isArray(data)?data.forEach((function(row){output.push(self.table.modules.mutator.transformRow(row,"clipboard"))})):output=data,output},Clipboard.prototype.checkPaseOrigin=function(e){var valid=!0;return("DIV"!=e.target.tagName||this.table.modules.edit.currentCell)&&(valid=!1),valid},Clipboard.prototype.getPasteData=function(e){var data;return window.clipboardData&&window.clipboardData.getData?data=window.clipboardData.getData("Text"):e.clipboardData&&e.clipboardData.getData?data=e.clipboardData.getData("text/plain"):e.originalEvent&&e.originalEvent.clipboardData.getData&&(data=e.originalEvent.clipboardData.getData("text/plain")),data},Clipboard.prototype.pasteParsers={table:function table(clipboard){var data=[],success=!1,headerFindSuccess=!0,columns=this.table.columnManager.columns,columnMap=[],rows=[];return(clipboard=clipboard.split("\n")).forEach((function(row){data.push(row.split("\t"))})),!(!data.length||1===data.length&&data[0].length<2)&&(success=!0,data[0].forEach((function(value){var column=columns.find((function(column){return value&&column.definition.title&&value.trim()&&column.definition.title.trim()===value.trim()}));column?columnMap.push(column):headerFindSuccess=!1})),headerFindSuccess||(headerFindSuccess=!0,columnMap=[],data[0].forEach((function(value){var column=columns.find((function(column){return value&&column.field&&value.trim()&&column.field.trim()===value.trim()}));column?columnMap.push(column):headerFindSuccess=!1})),headerFindSuccess||(columnMap=this.table.columnManager.columnsByIndex)),headerFindSuccess&&data.shift(),data.forEach((function(item){var row={};item.forEach((function(value,i){columnMap[i]&&(row[columnMap[i].field]=value)})),rows.push(row)})),rows)}},Clipboard.prototype.pasteActions={replace:function replace(rows){return this.table.setData(rows)},update:function update(rows){return this.table.updateOrAddData(rows)},insert:function insert(rows){return this.table.addData(rows)}},Tabulator.prototype.registerModule("clipboard",Clipboard);var DataTree=function DataTree(table){this.table=table,this.indent=10,this.field="",this.collapseEl=null,this.expandEl=null,this.branchEl=null,this.elementField=!1,this.startOpen=function(){},this.displayIndex=0};DataTree.prototype.initialize=function(){var dummyEl=null,firstCol=this.table.columnManager.getFirstVisibileColumn(),options=this.table.options;switch(this.field=options.dataTreeChildField,this.indent=options.dataTreeChildIndent,this.elementField=options.dataTreeElementColumn||!!firstCol&&firstCol.field,options.dataTreeBranchElement&&(!0===options.dataTreeBranchElement?(this.branchEl=document.createElement("div"),this.branchEl.classList.add("tabulator-data-tree-branch")):"string"==typeof options.dataTreeBranchElement?((dummyEl=document.createElement("div")).innerHTML=options.dataTreeBranchElement,this.branchEl=dummyEl.firstChild):this.branchEl=options.dataTreeBranchElement),options.dataTreeCollapseElement?"string"==typeof options.dataTreeCollapseElement?((dummyEl=document.createElement("div")).innerHTML=options.dataTreeCollapseElement,this.collapseEl=dummyEl.firstChild):this.collapseEl=options.dataTreeCollapseElement:(this.collapseEl=document.createElement("div"),this.collapseEl.classList.add("tabulator-data-tree-control"),this.collapseEl.tabIndex=0,this.collapseEl.innerHTML="<div class='tabulator-data-tree-control-collapse'></div>"),options.dataTreeExpandElement?"string"==typeof options.dataTreeExpandElement?((dummyEl=document.createElement("div")).innerHTML=options.dataTreeExpandElement,this.expandEl=dummyEl.firstChild):this.expandEl=options.dataTreeExpandElement:(this.expandEl=document.createElement("div"),this.expandEl.classList.add("tabulator-data-tree-control"),this.expandEl.tabIndex=0,this.expandEl.innerHTML="<div class='tabulator-data-tree-control-expand'></div>"),_typeof(options.dataTreeStartExpanded)){case"boolean":this.startOpen=function(row,index){return options.dataTreeStartExpanded};break;case"function":this.startOpen=options.dataTreeStartExpanded;break;default:this.startOpen=function(row,index){return options.dataTreeStartExpanded[index]}}},DataTree.prototype.initializeRow=function(row){var childArray=row.getData()[this.field],isArray=Array.isArray(childArray),children=isArray||!isArray&&"object"===(void 0===childArray?"undefined":_typeof(childArray))&&null!==childArray;!children&&row.modules.dataTree&&row.modules.dataTree.branchEl&&row.modules.dataTree.branchEl.parentNode.removeChild(row.modules.dataTree.branchEl),!children&&row.modules.dataTree&&row.modules.dataTree.controlEl&&row.modules.dataTree.controlEl.parentNode.removeChild(row.modules.dataTree.controlEl),row.modules.dataTree={index:row.modules.dataTree?row.modules.dataTree.index:0,open:!!children&&(row.modules.dataTree?row.modules.dataTree.open:this.startOpen(row.getComponent(),0)),controlEl:!(!row.modules.dataTree||!children)&&row.modules.dataTree.controlEl,branchEl:!(!row.modules.dataTree||!children)&&row.modules.dataTree.branchEl,parent:!!row.modules.dataTree&&row.modules.dataTree.parent,children:children}},DataTree.prototype.layoutRow=function(row){var cell,el=(this.elementField?row.getCell(this.elementField):row.getCells()[0]).getElement(),config=row.modules.dataTree;config.branchEl&&(config.branchEl.parentNode&&config.branchEl.parentNode.removeChild(config.branchEl),config.branchEl=!1),config.controlEl&&(config.controlEl.parentNode&&config.controlEl.parentNode.removeChild(config.controlEl),config.controlEl=!1),this.generateControlElement(row,el),row.element.classList.add("tabulator-tree-level-"+config.index),config.index&&(this.branchEl?(config.branchEl=this.branchEl.cloneNode(!0),el.insertBefore(config.branchEl,el.firstChild),config.branchEl.style.marginLeft=(config.branchEl.offsetWidth+config.branchEl.style.marginRight)*(config.index-1)+config.index*this.indent+"px"):el.style.paddingLeft=parseInt(window.getComputedStyle(el,null).getPropertyValue("padding-left"))+config.index*this.indent+"px")},DataTree.prototype.generateControlElement=function(row,el){var _this40=this,config=row.modules.dataTree,el=el||row.getCells()[0].getElement(),oldControl=config.controlEl;!1!==config.children&&(config.open?(config.controlEl=this.collapseEl.cloneNode(!0),config.controlEl.addEventListener("click",(function(e){e.stopPropagation(),_this40.collapseRow(row)}))):(config.controlEl=this.expandEl.cloneNode(!0),config.controlEl.addEventListener("click",(function(e){e.stopPropagation(),_this40.expandRow(row)}))),config.controlEl.addEventListener("mousedown",(function(e){e.stopPropagation()})),oldControl&&oldControl.parentNode===el?oldControl.parentNode.replaceChild(config.controlEl,oldControl):el.insertBefore(config.controlEl,el.firstChild))},DataTree.prototype.setDisplayIndex=function(index){this.displayIndex=index},DataTree.prototype.getDisplayIndex=function(){return this.displayIndex},DataTree.prototype.getRows=function(rows){var _this41=this,output=[];return rows.forEach((function(row,i){var config,children;output.push(row),row instanceof Row&&((config=row.modules.dataTree.children).index||!1===config.children||(children=_this41.getChildren(row)).forEach((function(child){output.push(child)})))})),output},DataTree.prototype.getChildren=function(row){var _this42=this,config=row.modules.dataTree,children=[],output=[];return!1!==config.children&&config.open&&(Array.isArray(config.children)||(config.children=this.generateChildren(row)),children=this.table.modExists("filter")?this.table.modules.filter.filter(config.children):config.children,this.table.modExists("sort")&&this.table.modules.sort.sort(children),children.forEach((function(child){var subChildren;output.push(child),_this42.getChildren(child).forEach((function(sub){output.push(sub)}))}))),output},DataTree.prototype.generateChildren=function(row){var _this43=this,children=[],childArray=row.getData()[this.field];return Array.isArray(childArray)||(childArray=[childArray]),childArray.forEach((function(childData){var childRow=new Row(childData||{},_this43.table.rowManager);childRow.modules.dataTree.index=row.modules.dataTree.index+1,childRow.modules.dataTree.parent=row,childRow.modules.dataTree.children&&(childRow.modules.dataTree.open=_this43.startOpen(childRow.getComponent(),childRow.modules.dataTree.index)),children.push(childRow)})),children},DataTree.prototype.expandRow=function(row,silent){var config=row.modules.dataTree;!1!==config.children&&(config.open=!0,row.reinitialize(),this.table.rowManager.refreshActiveData("tree",!1,!0),this.table.options.dataTreeRowExpanded(row.getComponent(),row.modules.dataTree.index))},DataTree.prototype.collapseRow=function(row){var config=row.modules.dataTree;!1!==config.children&&(config.open=!1,row.reinitialize(),this.table.rowManager.refreshActiveData("tree",!1,!0),this.table.options.dataTreeRowCollapsed(row.getComponent(),row.modules.dataTree.index))},DataTree.prototype.toggleRow=function(row){var config=row.modules.dataTree;!1!==config.children&&(config.open?this.collapseRow(row):this.expandRow(row))},DataTree.prototype.getTreeParent=function(row){return!!row.modules.dataTree.parent&&row.modules.dataTree.parent.getComponent()},DataTree.prototype.getFilteredTreeChildren=function(row){var config=row.modules.dataTree,output=[],children;return config.children&&(Array.isArray(config.children)||(config.children=this.generateChildren(row)),(children=this.table.modExists("filter")?this.table.modules.filter.filter(config.children):config.children).forEach((function(childRow){childRow instanceof Row&&output.push(childRow)}))),output},DataTree.prototype.rowDelete=function(row){var parent=row.modules.dataTree.parent,childIndex;parent&&(!1!==(childIndex=this.findChildIndex(row,parent))&&parent.data[this.field].splice(childIndex,1),parent.data[this.field].length||delete parent.data[this.field],this.initializeRow(parent),this.layoutRow(parent)),this.table.rowManager.refreshActiveData("tree",!1,!0)},DataTree.prototype.addTreeChildRow=function(row,data,top,index){var childIndex=!1;"string"==typeof data&&(data=JSON.parse(data)),Array.isArray(row.data[this.field])||(row.data[this.field]=[],row.modules.dataTree.open=this.startOpen(row.getComponent(),row.modules.dataTree.index)),void 0!==index&&!1!==(childIndex=this.findChildIndex(index,row))&&row.data[this.field].splice(top?childIndex:childIndex+1,0,data),!1===childIndex&&(top?row.data[this.field].unshift(data):row.data[this.field].push(data)),this.initializeRow(row),this.layoutRow(row),this.table.rowManager.refreshActiveData("tree",!1,!0)},DataTree.prototype.findChildIndex=function(subject,parent){var _this44=this,match=!1;return"object"==(void 0===subject?"undefined":_typeof(subject))?subject instanceof Row?match=subject.data:subject instanceof RowComponent?match=subject._getSelf().data:"undefined"!=typeof HTMLElement&&subject instanceof HTMLElement&&parent.modules.dataTree&&(match=parent.modules.dataTree.children.find((function(childRow){return childRow instanceof Row&&childRow.element===subject})))&&(match=match.data):match=null!=subject&&parent.data[this.field].find((function(row){return row.data[_this44.table.options.index]==subject})),match&&(Array.isArray(parent.data[this.field])&&(match=parent.data[this.field].indexOf(match)),-1==match&&(match=!1)),match},DataTree.prototype.getTreeChildren=function(row){var config=row.modules.dataTree,output=[];return config.children&&(Array.isArray(config.children)||(config.children=this.generateChildren(row)),config.children.forEach((function(childRow){childRow instanceof Row&&output.push(childRow.getComponent())}))),output},DataTree.prototype.checkForRestyle=function(cell){cell.row.cells.indexOf(cell)||cell.row.reinitialize()},DataTree.prototype.getChildField=function(){return this.field},DataTree.prototype.redrawNeeded=function(data){return!!this.field&&void 0!==data[this.field]||!!this.elementField&&void 0!==data[this.elementField]},Tabulator.prototype.registerModule("dataTree",DataTree);var Download=function Download(table){this.table=table};Download.prototype.download=function(type,filename,options,range,interceptCallback){var self=this,downloadFunc=!1;function buildLink(data,mime){interceptCallback?!0===interceptCallback?self.triggerDownload(data,mime,type,filename,!0):interceptCallback(data):self.triggerDownload(data,mime,type,filename)}if("function"==typeof type?downloadFunc=type:self.downloaders[type]?downloadFunc=self.downloaders[type]:console.warn("Download Error - No such download type found: ",type),downloadFunc){var list=this.generateExportList(range);downloadFunc.call(this.table,list,options||{},buildLink)}},Download.prototype.generateExportList=function(range){var list=this.table.modules.export.generateExportList(this.table.options.downloadConfig,!1,range||this.table.options.downloadRowRange,"download"),groupHeader=this.table.options.groupHeaderDownload;return groupHeader&&!Array.isArray(groupHeader)&&(groupHeader=[groupHeader]),list.forEach((function(row){var group;"group"===row.type&&(group=row.columns[0],groupHeader&&groupHeader[row.indent]&&(group.value=groupHeader[row.indent](group.value,row.component._group.getRowCount(),row.component._group.getData(),row.component)))})),list},Download.prototype.triggerDownload=function(data,mime,type,filename,newTab){var element=document.createElement("a"),blob=new Blob([data],{type:mime}),filename=filename||"Tabulator."+("function"==typeof type?"txt":type);(blob=this.table.options.downloadReady.call(this.table,data,blob))&&(newTab?window.open(window.URL.createObjectURL(blob)):navigator.msSaveOrOpenBlob?navigator.msSaveOrOpenBlob(blob,filename):(element.setAttribute("href",window.URL.createObjectURL(blob)),element.setAttribute("download",filename),element.style.display="none",document.body.appendChild(element),element.click(),document.body.removeChild(element)),this.table.options.downloadComplete&&this.table.options.downloadComplete())},Download.prototype.commsReceived=function(table,action,data){switch(action){case"intercept":this.download(data.type,"",data.options,data.active,data.intercept)}},Download.prototype.downloaders={csv:function csv(list,options,setFileContents){var delimiter=options&&options.delimiter?options.delimiter:",",fileContents=[],headers=[];list.forEach((function(row){var item=[];switch(row.type){case"group":console.warn("Download Warning - CSV downloader cannot process row groups");break;case"calc":console.warn("Download Warning - CSV downloader cannot process column calculations");break;case"header":row.columns.forEach((function(col,i){col&&1===col.depth&&(headers[i]=void 0===col.value||"null"==typeof col.value?"":col.value)}));break;case"row":row.columns.forEach((function(col){if(col){switch(_typeof(col.value)){case"object":col.value=JSON.stringify(col.value);break;case"undefined":case"null":col.value=""}item.push('"'+String(col.value).split('"').join('""')+'"')}})),fileContents.push(item.join(delimiter))}})),headers.length&&(fileContents=[headers].concat(fileContents)),fileContents=fileContents.join("\n"),options.bom&&(fileContents="\ufeff"+fileContents),setFileContents(fileContents,"text/csv")},json:function json(list,options,setFileContents){var fileContents=[];list.forEach((function(row){var item={};switch(row.type){case"header":break;case"group":console.warn("Download Warning - JSON downloader cannot process row groups");break;case"calc":console.warn("Download Warning - JSON downloader cannot process column calculations");break;case"row":row.columns.forEach((function(col){col&&(item[col.component.getField()]=col.value)})),fileContents.push(item)}})),setFileContents(fileContents=JSON.stringify(fileContents,null,"\t"),"application/json")},pdf:function pdf(list,options,setFileContents){var header=[],body=[],autoTableParams={},rowGroupStyles=options.rowGroupStyles||{fontStyle:"bold",fontSize:12,cellPadding:6,fillColor:220},rowCalcStyles=options.rowCalcStyles||{fontStyle:"bold",fontSize:10,cellPadding:4,fillColor:232},jsPDFParams=options.jsPDF||{},title=options&&options.title?options.title:"";function parseRow(row,styles){var rowData=[];return row.columns.forEach((function(col){var cell;if(col){switch(_typeof(col.value)){case"object":col.value=JSON.stringify(col.value);break;case"undefined":case"null":col.value=""}cell={content:col.value,colSpan:col.width,rowSpan:col.height},styles&&(cell.styles=styles),rowData.push(cell)}else rowData.push("")})),rowData}jsPDFParams.orientation||(jsPDFParams.orientation=options.orientation||"landscape"),jsPDFParams.unit||(jsPDFParams.unit="pt"),list.forEach((function(row){switch(row.type){case"header":header.push(parseRow(row));break;case"group":body.push(parseRow(row,rowGroupStyles));break;case"calc":body.push(parseRow(row,rowCalcStyles));break;case"row":body.push(parseRow(row))}}));var doc=new jsPDF(jsPDFParams);options&&options.autoTable&&(autoTableParams="function"==typeof options.autoTable?options.autoTable(doc)||{}:options.autoTable),title&&(autoTableParams.addPageContent=function(data){doc.text(title,40,30)}),autoTableParams.head=header,autoTableParams.body=body,doc.autoTable(autoTableParams),options&&options.documentProcessing&&options.documentProcessing(doc),setFileContents(doc.output("arraybuffer"),"application/pdf")},xlsx:function xlsx(list,options,setFileContents){var self=this,sheetName=options.sheetName||"Sheet1",workbook=XLSX.utils.book_new(),output;function generateSheet(){var rows=[],merges=[],worksheet={},range={s:{c:0,r:0},e:{c:list[0]?list[0].columns.reduce((function(a,b){return a+(b&&b.width?b.width:1)}),0):0,r:list.length}};return list.forEach((function(row,i){var rowData=[];row.columns.forEach((function(col,j){col?(rowData.push(col.value instanceof Date||"object"!==_typeof(col.value)?col.value:JSON.stringify(col.value)),(col.width>1||col.height>-1)&&merges.push({s:{r:i,c:j},e:{r:i+col.height-1,c:j+col.width-1}})):rowData.push("")})),rows.push(rowData)})),XLSX.utils.sheet_add_aoa(worksheet,rows),worksheet["!ref"]=XLSX.utils.encode_range(range),merges.length&&(worksheet["!merges"]=merges),worksheet}if(workbook.SheetNames=[],workbook.Sheets={},options.sheetOnly)setFileContents(generateSheet());else{if(options.sheets)for(var sheet in options.sheets)!0===options.sheets[sheet]?(workbook.SheetNames.push(sheet),workbook.Sheets[sheet]=generateSheet()):(workbook.SheetNames.push(sheet),this.table.modules.comms.send(options.sheets[sheet],"download","intercept",{type:"xlsx",options:{sheetOnly:!0},active:this.active,intercept:function intercept(data){workbook.Sheets[sheet]=data}}));else workbook.SheetNames.push(sheetName),workbook.Sheets[sheetName]=generateSheet();options.documentProcessing&&(workbook=options.documentProcessing(workbook)),setFileContents(s2ab(output=XLSX.write(workbook,{bookType:"xlsx",bookSST:!0,type:"binary"})),"application/octet-stream")}function s2ab(s){for(var buf=new ArrayBuffer(s.length),view=new Uint8Array(buf),i=0;i!=s.length;++i)view[i]=255&s.charCodeAt(i);return buf}},html:function html(list,options,setFileContents){this.modExists("export",!0)&&setFileContents(this.modules.export.genereateHTMLTable(list),"text/html")}},Tabulator.prototype.registerModule("download",Download);var Edit=function Edit(table){this.table=table,this.currentCell=!1,this.mouseClick=!1,this.recursionBlock=!1,this.invalidEdit=!1,this.editedCells=[]};Edit.prototype.initializeColumn=function(column){var self=this,config={editor:!1,blocked:!1,check:column.definition.editable,params:column.definition.editorParams||{}};switch(_typeof(column.definition.editor)){case"string":"tick"===column.definition.editor&&(column.definition.editor="tickCross",console.warn("DEPRECATION WARNING - the tick editor has been deprecated, please use the tickCross editor")),this.editors[column.definition.editor]?config.editor=this.editors[column.definition.editor]:console.warn("Editor Error - No such editor found: ",column.definition.editor);break;case"function":config.editor=column.definition.editor;break;case"boolean":!0===column.definition.editor&&("function"!=typeof column.definition.formatter?("tick"===column.definition.formatter&&(column.definition.formatter="tickCross",console.warn("DEPRECATION WARNING - the tick editor has been deprecated, please use the tickCross editor")),this.editors[column.definition.formatter]?config.editor=this.editors[column.definition.formatter]:config.editor=this.editors.input):console.warn("Editor Error - Cannot auto lookup editor for a custom formatter: ",column.definition.formatter))}config.editor&&(column.modules.edit=config)},Edit.prototype.getCurrentCell=function(){return!!this.currentCell&&this.currentCell.getComponent()},Edit.prototype.clearEditor=function(cancel){var cell=this.currentCell,cellEl;if(this.invalidEdit=!1,cell){for(this.currentCell=!1,cellEl=cell.getElement(),cancel?cell.validate():cellEl.classList.remove("tabulator-validation-fail"),cellEl.classList.remove("tabulator-editing");cellEl.firstChild;)cellEl.removeChild(cellEl.firstChild);cell.row.getElement().classList.remove("tabulator-row-editing")}},Edit.prototype.cancelEdit=function(){if(this.currentCell){var cell=this.currentCell,component=this.currentCell.getComponent();this.clearEditor(!0),cell.setValueActual(cell.getValue()),cell.cellRendered(),cell.column.cellEvents.cellEditCancelled&&cell.column.cellEvents.cellEditCancelled.call(this.table,component),this.table.options.cellEditCancelled.call(this.table,component)}},Edit.prototype.bindEditor=function(cell){var self=this,element=cell.getElement();element.setAttribute("tabindex",0),element.addEventListener("click",(function(e){element.classList.contains("tabulator-editing")||element.focus({preventScroll:!0})})),element.addEventListener("mousedown",(function(e){self.mouseClick=!0})),element.addEventListener("focus",(function(e){self.recursionBlock||self.edit(cell,e,!1)}))},Edit.prototype.focusCellNoEvent=function(cell,block){this.recursionBlock=!0,block&&"ie"===this.table.browser||cell.getElement().focus({preventScroll:!0}),this.recursionBlock=!1},Edit.prototype.editCell=function(cell,forceEdit){this.focusCellNoEvent(cell),this.edit(cell,!1,forceEdit)},Edit.prototype.focusScrollAdjust=function(cell){if("virtual"==this.table.rowManager.getRenderMode()){var topEdge=this.table.rowManager.element.scrollTop,bottomEdge=this.table.rowManager.element.clientHeight+this.table.rowManager.element.scrollTop,rowEl=cell.row.getElement(),offset=rowEl.offsetTop;rowEl.offsetTop<topEdge?this.table.rowManager.element.scrollTop-=topEdge-rowEl.offsetTop:rowEl.offsetTop+rowEl.offsetHeight>bottomEdge&&(this.table.rowManager.element.scrollTop+=rowEl.offsetTop+rowEl.offsetHeight-bottomEdge)}},Edit.prototype.edit=function(cell,e,forceEdit){var self=this,allowEdit=!0,rendered=function rendered(){},element=cell.getElement(),cellEditor,component,params;if(!this.currentCell){if(cell.column.modules.edit.blocked)return this.mouseClick=!1,element.blur(),!1;switch(e&&e.stopPropagation(),_typeof(cell.column.modules.edit.check)){case"function":allowEdit=cell.column.modules.edit.check(cell.getComponent());break;case"boolean":allowEdit=cell.column.modules.edit.check}if(allowEdit||forceEdit){if(self.cancelEdit(),self.currentCell=cell,this.focusScrollAdjust(cell),component=cell.getComponent(),this.mouseClick&&(this.mouseClick=!1,cell.column.cellEvents.cellClick&&cell.column.cellEvents.cellClick.call(this.table,e,component)),cell.column.cellEvents.cellEditing&&cell.column.cellEvents.cellEditing.call(this.table,component),self.table.options.cellEditing.call(this.table,component),params="function"==typeof cell.column.modules.edit.params?cell.column.modules.edit.params(component):cell.column.modules.edit.params,!1===(cellEditor=cell.column.modules.edit.editor.call(self,component,onRendered,success,cancel,params)))return element.blur(),!1;if(!(cellEditor instanceof Node))return console.warn("Edit Error - Editor should return an instance of Node, the editor returned:",cellEditor),element.blur(),!1;for(element.classList.add("tabulator-editing"),cell.row.getElement().classList.add("tabulator-row-editing");element.firstChild;)element.removeChild(element.firstChild);element.appendChild(cellEditor),rendered();for(var children=element.children,i=0;i<children.length;i++)children[i].addEventListener("click",(function(e){e.stopPropagation()}));return!0}return this.mouseClick=!1,element.blur(),!1}function success(value){if(self.currentCell===cell){var valid=!0;return cell.column.modules.validate&&self.table.modExists("validate")&&"manual"!=self.table.options.validationMode&&(valid=self.table.modules.validate.validate(cell.column.modules.validate,cell,value)),!0===valid||"highlight"===self.table.options.validationMode?(self.clearEditor(),cell.setValue(value,!0),cell.modules.edit||(cell.modules.edit={}),cell.modules.edit.edited=!0,-1==self.editedCells.indexOf(cell)&&self.editedCells.push(cell),self.table.options.dataTree&&self.table.modExists("dataTree")&&self.table.modules.dataTree.checkForRestyle(cell),!0===valid||(element.classList.add("tabulator-validation-fail"),!1)):(self.invalidEdit=!0,element.classList.add("tabulator-validation-fail"),self.focusCellNoEvent(cell,!0),rendered(),self.table.options.validationFailed.call(self.table,cell.getComponent(),value,valid),!1)}}function cancel(){self.currentCell===cell&&(self.cancelEdit(),self.table.options.dataTree&&self.table.modExists("dataTree")&&self.table.modules.dataTree.checkForRestyle(cell))}function onRendered(callback){rendered=callback}this.invalidEdit||this.cancelEdit()},Edit.prototype.maskInput=function(el,options){var mask=options.mask,maskLetter=void 0!==options.maskLetterChar?options.maskLetterChar:"A",maskNumber=void 0!==options.maskNumberChar?options.maskNumberChar:"9",maskWildcard=void 0!==options.maskWildcardChar?options.maskWildcardChar:"*",success=!1;function fillSymbols(index){var symbol=mask[index];void 0!==symbol&&symbol!==maskWildcard&&symbol!==maskLetter&&symbol!==maskNumber&&(el.value=el.value+""+symbol,fillSymbols(index+1))}el.addEventListener("keydown",(function(e){var index=el.value.length,char=e.key;if(e.keyCode>46){if(index>=mask.length)return e.preventDefault(),e.stopPropagation(),success=!1,!1;switch(mask[index]){case maskLetter:if(char.toUpperCase()==char.toLowerCase())return e.preventDefault(),e.stopPropagation(),success=!1,!1;break;case maskNumber:if(isNaN(char))return e.preventDefault(),e.stopPropagation(),success=!1,!1;break;case maskWildcard:break;default:if(char!==mask[index])return e.preventDefault(),e.stopPropagation(),success=!1,!1}success=!0}})),el.addEventListener("keyup",(function(e){e.keyCode>46&&options.maskAutoFill&&fillSymbols(el.value.length)})),el.placeholder||(el.placeholder=mask),options.maskAutoFill&&fillSymbols(el.value.length)},Edit.prototype.getEditedCells=function(){var output=[];return this.editedCells.forEach((function(cell){output.push(cell.getComponent())})),output},Edit.prototype.clearEdited=function(cell){var editIndex;cell.modules.edit&&cell.modules.edit.edited&&(cell.modules.validate.invalid=!1,(editIndex=this.editedCells.indexOf(cell))>-1&&this.editedCells.splice(editIndex,1))},Edit.prototype.editors={input:function input(cell,onRendered,success,cancel,editorParams){var cellValue=cell.getValue(),input=document.createElement("input");if(input.setAttribute("type",editorParams.search?"search":"text"),input.style.padding="4px",input.style.width="100%",input.style.boxSizing="border-box",editorParams.elementAttributes&&"object"==_typeof(editorParams.elementAttributes))for(var key in editorParams.elementAttributes)"+"==key.charAt(0)?(key=key.slice(1),input.setAttribute(key,input.getAttribute(key)+editorParams.elementAttributes["+"+key])):input.setAttribute(key,editorParams.elementAttributes[key]);function onChange(e){null==cellValue&&""!==input.value||input.value!==cellValue?success(input.value)&&(cellValue=input.value):cancel()}return input.value=void 0!==cellValue?cellValue:"",onRendered((function(){input.focus({preventScroll:!0}),input.style.height="100%"})),input.addEventListener("change",onChange),input.addEventListener("blur",onChange),input.addEventListener("keydown",(function(e){switch(e.keyCode){case 13:onChange(e);break;case 27:cancel()}})),editorParams.mask&&this.table.modules.edit.maskInput(input,editorParams),input},textarea:function textarea(cell,onRendered,success,cancel,editorParams){var self=this,cellValue=cell.getValue(),vertNav=editorParams.verticalNavigation||"hybrid",value=String(null!=cellValue?cellValue:""),count=(value.match(/(?:\r\n|\r|\n)/g)||[]).length+1,input=document.createElement("textarea"),scrollHeight=0;if(input.style.display="block",input.style.padding="2px",input.style.height="100%",input.style.width="100%",input.style.boxSizing="border-box",input.style.whiteSpace="pre-wrap",input.style.resize="none",editorParams.elementAttributes&&"object"==_typeof(editorParams.elementAttributes))for(var key in editorParams.elementAttributes)"+"==key.charAt(0)?(key=key.slice(1),input.setAttribute(key,input.getAttribute(key)+editorParams.elementAttributes["+"+key])):input.setAttribute(key,editorParams.elementAttributes[key]);function onChange(e){null==cellValue&&""!==input.value||input.value!==cellValue?(success(input.value)&&(cellValue=input.value),setTimeout((function(){cell.getRow().normalizeHeight()}),300)):cancel()}return input.value=value,onRendered((function(){input.focus({preventScroll:!0}),input.style.height="100%"})),input.addEventListener("change",onChange),input.addEventListener("blur",onChange),input.addEventListener("keyup",(function(){input.style.height="";var heightNow=input.scrollHeight;input.style.height=heightNow+"px",heightNow!=scrollHeight&&(scrollHeight=heightNow,cell.getRow().normalizeHeight())})),input.addEventListener("keydown",(function(e){switch(e.keyCode){case 27:cancel();break;case 38:("editor"==vertNav||"hybrid"==vertNav&&input.selectionStart)&&(e.stopImmediatePropagation(),e.stopPropagation());break;case 40:("editor"==vertNav||"hybrid"==vertNav&&input.selectionStart!==input.value.length)&&(e.stopImmediatePropagation(),e.stopPropagation())}})),editorParams.mask&&this.table.modules.edit.maskInput(input,editorParams),input},number:function number(cell,onRendered,success,cancel,editorParams){var cellValue=cell.getValue(),vertNav=editorParams.verticalNavigation||"editor",input=document.createElement("input");if(input.setAttribute("type","number"),void 0!==editorParams.max&&input.setAttribute("max",editorParams.max),void 0!==editorParams.min&&input.setAttribute("min",editorParams.min),void 0!==editorParams.step&&input.setAttribute("step",editorParams.step),input.style.padding="4px",input.style.width="100%",input.style.boxSizing="border-box",editorParams.elementAttributes&&"object"==_typeof(editorParams.elementAttributes))for(var key in editorParams.elementAttributes)"+"==key.charAt(0)?(key=key.slice(1),input.setAttribute(key,input.getAttribute(key)+editorParams.elementAttributes["+"+key])):input.setAttribute(key,editorParams.elementAttributes[key]);input.value=cellValue;var blurFunc=function blurFunc(e){onChange()};function onChange(){var value=input.value;isNaN(value)||""===value||(value=Number(value)),value!==cellValue?success(value)&&(cellValue=value):cancel()}return onRendered((function(){input.removeEventListener("blur",blurFunc),input.focus({preventScroll:!0}),input.style.height="100%",input.addEventListener("blur",blurFunc)})),input.addEventListener("keydown",(function(e){switch(e.keyCode){case 13:onChange();break;case 27:cancel();break;case 38:case 40:"editor"==vertNav&&(e.stopImmediatePropagation(),e.stopPropagation())}})),editorParams.mask&&this.table.modules.edit.maskInput(input,editorParams),input},range:function range(cell,onRendered,success,cancel,editorParams){var cellValue=cell.getValue(),input=document.createElement("input");if(input.setAttribute("type","range"),void 0!==editorParams.max&&input.setAttribute("max",editorParams.max),void 0!==editorParams.min&&input.setAttribute("min",editorParams.min),void 0!==editorParams.step&&input.setAttribute("step",editorParams.step),input.style.padding="4px",input.style.width="100%",input.style.boxSizing="border-box",editorParams.elementAttributes&&"object"==_typeof(editorParams.elementAttributes))for(var key in editorParams.elementAttributes)"+"==key.charAt(0)?(key=key.slice(1),input.setAttribute(key,input.getAttribute(key)+editorParams.elementAttributes["+"+key])):input.setAttribute(key,editorParams.elementAttributes[key]);function onChange(){var value=input.value;isNaN(value)||""===value||(value=Number(value)),value!=cellValue?success(value)&&(cellValue=value):cancel()}return input.value=cellValue,onRendered((function(){input.focus({preventScroll:!0}),input.style.height="100%"})),input.addEventListener("blur",(function(e){onChange()})),input.addEventListener("keydown",(function(e){switch(e.keyCode){case 13:onChange();break;case 27:cancel()}})),input},select:function select(cell,onRendered,success,cancel,editorParams){var self=this,cellEl=cell.getElement(),initialValue=cell.getValue(),vertNav=editorParams.verticalNavigation||"editor",initialDisplayValue=void 0!==initialValue||null===initialValue?initialValue:void 0!==editorParams.defaultValue?editorParams.defaultValue:[],input=document.createElement("input"),listEl=document.createElement("div"),multiselect=editorParams.multiselect,dataItems=[],currentItem={},displayItems=[],currentItems=[],blurable=!0;function getUniqueColumnValues(field){var output={},data=self.table.getData(),column;return(column=field?self.table.columnManager.getColumnByField(field):cell.getColumn()._getSelf())?(data.forEach((function(row){var val=column.getFieldValue(row);null!=val&&""!==val&&(output[val]=!0)})),output=editorParams.sortValuesList?"asc"==editorParams.sortValuesList?Object.keys(output).sort():Object.keys(output).sort().reverse():Object.keys(output)):console.warn("unable to find matching column to create select lookup list:",field),output}function parseItems(inputValues,curentValues){var dataList=[],displayList=[];function processComplexListItem(item){var item={label:item.label,value:item.value,itemParams:item.itemParams,elementAttributes:item.elementAttributes,element:!1};return curentValues.indexOf(item.value)>-1&&setItem(item),dataList.push(item),displayList.push(item),item}if("function"==typeof inputValues&&(inputValues=inputValues(cell)),Array.isArray(inputValues))inputValues.forEach((function(value){var item;"object"===(void 0===value?"undefined":_typeof(value))?value.options?(item={label:value.label,group:!0,itemParams:value.itemParams,elementAttributes:value.elementAttributes,element:!1},displayList.push(item),value.options.forEach((function(item){processComplexListItem(item)}))):processComplexListItem(value):(item={label:value,value:value,element:!1},curentValues.indexOf(item.value)>-1&&setItem(item),dataList.push(item),displayList.push(item))}));else for(var key in inputValues){var item={label:inputValues[key],value:key,element:!1};curentValues.indexOf(item.value)>-1&&setItem(item),dataList.push(item),displayList.push(item)}dataItems=dataList,displayItems=displayList,fillList()}function fillList(){for(;listEl.firstChild;)listEl.removeChild(listEl.firstChild);displayItems.forEach((function(item){var el=item.element;if(!el){if(el=document.createElement("div"),item.label=editorParams.listItemFormatter?editorParams.listItemFormatter(item.value,item.label,cell,el,item.itemParams):item.label,item.group?(el.classList.add("tabulator-edit-select-list-group"),el.tabIndex=0,el.innerHTML=""===item.label?"&nbsp;":item.label):(el.classList.add("tabulator-edit-select-list-item"),el.tabIndex=0,el.innerHTML=""===item.label?"&nbsp;":item.label,el.addEventListener("click",(function(){multiselect?(toggleItem(item),input.focus()):chooseItem(item)})),currentItems.indexOf(item)>-1&&el.classList.add("active")),item.elementAttributes&&"object"==_typeof(item.elementAttributes))for(var key in item.elementAttributes)"+"==key.charAt(0)?(key=key.slice(1),el.setAttribute(key,input.getAttribute(key)+item.elementAttributes["+"+key])):el.setAttribute(key,item.elementAttributes[key]);el.addEventListener("mousedown",(function(){blurable=!1,setTimeout((function(){blurable=!0}),10)})),item.element=el}listEl.appendChild(el)}))}function setCurrentItem(item,active){!multiselect&&currentItem&&currentItem.element&&currentItem.element.classList.remove("active"),currentItem&&currentItem.element&&currentItem.element.classList.remove("focused"),currentItem=item,item.element&&(item.element.classList.add("focused"),active&&item.element.classList.add("active"))}function setItem(item){var index;-1==currentItems.indexOf(item)&&(currentItems.push(item),setCurrentItem(item,!0)),fillInput()}function unsetItem(index){var item=currentItems[index];index>-1&&(currentItems.splice(index,1),item.element&&item.element.classList.remove("active"))}function toggleItem(item){item||(item=currentItem);var index=currentItems.indexOf(item);index>-1?unsetItem(index):(!0!==multiselect&&currentItems.length>=multiselect&&unsetItem(0),setItem(item)),fillInput()}function chooseItem(item){hideList(),item||(item=currentItem),item&&success(item.value)}function chooseItems(){hideList();var output=[];currentItems.forEach((function(item){output.push(item.value)})),success(output)}function fillInput(){var output=[];currentItems.forEach((function(item){output.push(item.label)})),input.value=output.join(", ")}function cancelItem(){hideList(),cancel()}function showList(){if(!listEl.parentNode){!0===editorParams.values?parseItems(getUniqueColumnValues(),initialDisplayValue):"string"==typeof editorParams.values?parseItems(getUniqueColumnValues(editorParams.values),initialDisplayValue):parseItems(editorParams.values||[],initialDisplayValue);var offset=Tabulator.prototype.helpers.elOffset(cellEl);listEl.style.minWidth=cellEl.offsetWidth+"px",listEl.style.top=offset.top+cellEl.offsetHeight+"px",listEl.style.left=offset.left+"px",listEl.addEventListener("mousedown",(function(e){blurable=!1,setTimeout((function(){blurable=!0}),10)})),document.body.appendChild(listEl)}}function hideList(){listEl.parentNode&&listEl.parentNode.removeChild(listEl),removeScrollListener()}function removeScrollListener(){self.table.rowManager.element.removeEventListener("scroll",cancelItem)}if(this.table.rowManager.element.addEventListener("scroll",cancelItem),(Array.isArray(editorParams)||!Array.isArray(editorParams)&&"object"===(void 0===editorParams?"undefined":_typeof(editorParams))&&!editorParams.values)&&(console.warn("DEPRECATION WARNING - values for the select editor must now be passed into the values property of the editorParams object, not as the editorParams object"),editorParams={values:editorParams}),input.setAttribute("type","text"),input.style.padding="4px",input.style.width="100%",input.style.boxSizing="border-box",input.style.cursor="default",input.readOnly=0!=this.currentCell,editorParams.elementAttributes&&"object"==_typeof(editorParams.elementAttributes))for(var key in editorParams.elementAttributes)"+"==key.charAt(0)?(key=key.slice(1),input.setAttribute(key,input.getAttribute(key)+editorParams.elementAttributes["+"+key])):input.setAttribute(key,editorParams.elementAttributes[key]);return input.value=void 0!==initialValue||null===initialValue?initialValue:"",input.addEventListener("keydown",(function(e){var index;switch(e.keyCode){case 38:index=dataItems.indexOf(currentItem),("editor"==vertNav||"hybrid"==vertNav&&index)&&(e.stopImmediatePropagation(),e.stopPropagation(),e.preventDefault(),index>0&&setCurrentItem(dataItems[index-1],!multiselect));break;case 40:index=dataItems.indexOf(currentItem),("editor"==vertNav||"hybrid"==vertNav&&index<dataItems.length-1)&&(e.stopImmediatePropagation(),e.stopPropagation(),e.preventDefault(),index<dataItems.length-1&&setCurrentItem(-1==index?dataItems[0]:dataItems[index+1],!multiselect));break;case 37:case 39:e.stopImmediatePropagation(),e.stopPropagation(),e.preventDefault();break;case 13:multiselect?toggleItem():chooseItem();break;case 27:cancelItem()}})),input.addEventListener("blur",(function(e){blurable&&(multiselect?chooseItems():cancelItem())})),input.addEventListener("focus",(function(e){showList()})),(listEl=document.createElement("div")).classList.add("tabulator-edit-select-list"),onRendered((function(){input.style.height="100%",input.focus({preventScroll:!0})})),input},autocomplete:function autocomplete(cell,onRendered,success,cancel,editorParams){var self=this,cellEl=cell.getElement(),initialValue=cell.getValue(),vertNav=editorParams.verticalNavigation||"editor",initialDisplayValue=void 0!==initialValue||null===initialValue?initialValue:void 0!==editorParams.defaultValue?editorParams.defaultValue:"",input=document.createElement("input"),listEl=document.createElement("div"),allItems=[],displayItems=[],values=[],currentItem=!1,blurable=!0,uniqueColumnValues=!1;if(this.table.rowManager.element.addEventListener("scroll",cancelItem),input.setAttribute("type","search"),input.style.padding="4px",input.style.width="100%",input.style.boxSizing="border-box",editorParams.elementAttributes&&"object"==_typeof(editorParams.elementAttributes))for(var key in editorParams.elementAttributes)"+"==key.charAt(0)?(key=key.slice(1),input.setAttribute(key,input.getAttribute(key)+editorParams.elementAttributes["+"+key])):input.setAttribute(key,editorParams.elementAttributes[key]);function genUniqueColumnValues(){!0===editorParams.values?uniqueColumnValues=getUniqueColumnValues():"string"==typeof editorParams.values&&(uniqueColumnValues=getUniqueColumnValues(editorParams.values))}function getUniqueColumnValues(field){var output={},data=self.table.getData(),column;return(column=field?self.table.columnManager.getColumnByField(field):cell.getColumn()._getSelf())?(data.forEach((function(row){var val=column.getFieldValue(row);null!=val&&""!==val&&(output[val]=!0)})),output=editorParams.sortValuesList?"asc"==editorParams.sortValuesList?Object.keys(output).sort():Object.keys(output).sort().reverse():Object.keys(output)):console.warn("unable to find matching column to create autocomplete lookup list:",field),output}function filterList(term,intialLoad){var matches=[],values,items,searchEl;values=uniqueColumnValues||(editorParams.values||[]),editorParams.searchFunc?(matches=editorParams.searchFunc(term,values))instanceof Promise?(addNotice(void 0!==editorParams.searchingPlaceholder?editorParams.searchingPlaceholder:"Searching..."),matches.then((function(result){fillListIfNotEmpty(parseItems(result),intialLoad)})).catch((function(err){console.err("error in autocomplete search promise:",err)}))):fillListIfNotEmpty(parseItems(matches),intialLoad):(items=parseItems(values),""===term?editorParams.showListOnEmpty&&(matches=items):items.forEach((function(item){null===item.value&&void 0===item.value||(String(item.value).toLowerCase().indexOf(String(term).toLowerCase())>-1||String(item.title).toLowerCase().indexOf(String(term).toLowerCase())>-1)&&matches.push(item)})),fillListIfNotEmpty(matches,intialLoad))}function addNotice(notice){var searchEl=document.createElement("div");clearList(),!1!==notice&&(searchEl.classList.add("tabulator-edit-select-list-notice"),searchEl.tabIndex=0,notice instanceof Node?searchEl.appendChild(notice):searchEl.innerHTML=notice,listEl.appendChild(searchEl))}function parseItems(inputValues){var itemList=[];if(Array.isArray(inputValues))inputValues.forEach((function(value){var item={};"object"===(void 0===value?"undefined":_typeof(value))?(item.title=editorParams.listItemFormatter?editorParams.listItemFormatter(value.value,value.label):value.label,item.value=value.value):(item.title=editorParams.listItemFormatter?editorParams.listItemFormatter(value,value):value,item.value=value),itemList.push(item)}));else for(var key in inputValues){var item={title:editorParams.listItemFormatter?editorParams.listItemFormatter(key,inputValues[key]):inputValues[key],value:key};itemList.push(item)}return itemList}function clearList(){for(;listEl.firstChild;)listEl.removeChild(listEl.firstChild)}function fillListIfNotEmpty(items,intialLoad){items.length?fillList(items,intialLoad):editorParams.emptyPlaceholder&&addNotice(editorParams.emptyPlaceholder)}function fillList(items,intialLoad){var current=!1;clearList(),(displayItems=items).forEach((function(item){var el=item.element;el||((el=document.createElement("div")).classList.add("tabulator-edit-select-list-item"),el.tabIndex=0,el.innerHTML=item.title,el.addEventListener("click",(function(e){setCurrentItem(item),chooseItem()})),el.addEventListener("mousedown",(function(e){blurable=!1,setTimeout((function(){blurable=!0}),10)})),item.element=el,intialLoad&&item.value==initialValue&&(input.value=item.title,item.element.classList.add("active"),current=!0),item===currentItem&&(item.element.classList.add("active"),current=!0)),listEl.appendChild(el)})),current||setCurrentItem(!1)}function chooseItem(){hideList(),currentItem?initialValue!==currentItem.value?(initialValue=currentItem.value,input.value=currentItem.title,success(currentItem.value)):cancel():editorParams.freetext?(initialValue=input.value,success(input.value)):editorParams.allowEmpty&&""===input.value?(initialValue=input.value,success(input.value)):cancel()}function showList(){if(!listEl.parentNode){for(;listEl.firstChild;)listEl.removeChild(listEl.firstChild);var offset=Tabulator.prototype.helpers.elOffset(cellEl);listEl.style.minWidth=cellEl.offsetWidth+"px",listEl.style.top=offset.top+cellEl.offsetHeight+"px",listEl.style.left=offset.left+"px",document.body.appendChild(listEl)}}function setCurrentItem(item,showInputValue){currentItem&&currentItem.element&&currentItem.element.classList.remove("active"),currentItem=item,item&&item.element&&item.element.classList.add("active")}function hideList(){listEl.parentNode&&listEl.parentNode.removeChild(listEl),removeScrollListener()}function cancelItem(){hideList(),cancel()}function removeScrollListener(){self.table.rowManager.element.removeEventListener("scroll",cancelItem)}return listEl.classList.add("tabulator-edit-select-list"),listEl.addEventListener("mousedown",(function(e){blurable=!1,setTimeout((function(){blurable=!0}),10)})),input.addEventListener("keydown",(function(e){var index;switch(e.keyCode){case 38:index=displayItems.indexOf(currentItem),("editor"==vertNav||"hybrid"==vertNav&&index)&&(e.stopImmediatePropagation(),e.stopPropagation(),e.preventDefault(),setCurrentItem(index>0&&displayItems[index-1]));break;case 40:index=displayItems.indexOf(currentItem),("editor"==vertNav||"hybrid"==vertNav&&index<displayItems.length-1)&&(e.stopImmediatePropagation(),e.stopPropagation(),e.preventDefault(),index<displayItems.length-1&&setCurrentItem(-1==index?displayItems[0]:displayItems[index+1]));break;case 37:case 39:e.stopImmediatePropagation(),e.stopPropagation();break;case 13:chooseItem();break;case 27:cancelItem();break;case 36:case 35:e.stopImmediatePropagation()}})),input.addEventListener("keyup",(function(e){switch(e.keyCode){case 38:case 37:case 39:case 40:case 13:case 27:break;default:filterList(input.value)}})),input.addEventListener("search",(function(e){filterList(input.value)})),input.addEventListener("blur",(function(e){blurable&&chooseItem()})),input.addEventListener("focus",(function(e){var value=initialDisplayValue;genUniqueColumnValues(),showList(),input.value=value,filterList(value,!0)})),onRendered((function(){input.style.height="100%",input.focus({preventScroll:!0})})),editorParams.mask&&this.table.modules.edit.maskInput(input,editorParams),input},star:function star(cell,onRendered,success,cancel,editorParams){var self=this,element=cell.getElement(),value=cell.getValue(),maxStars=element.getElementsByTagName("svg").length||5,size=element.getElementsByTagName("svg")[0]?element.getElementsByTagName("svg")[0].getAttribute("width"):14,stars=[],starsHolder=document.createElement("div"),star=document.createElementNS("http://www.w3.org/2000/svg","svg");function starChange(val){stars.forEach((function(star,i){i<val?("ie"==self.table.browser?star.setAttribute("class","tabulator-star-active"):star.classList.replace("tabulator-star-inactive","tabulator-star-active"),star.innerHTML='<polygon fill="#488CE9" stroke="#014AAE" stroke-width="37.6152" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" points="259.216,29.942 330.27,173.919 489.16,197.007 374.185,309.08 401.33,467.31 259.216,392.612 117.104,467.31 144.25,309.08 29.274,197.007 188.165,173.919 "/>'):("ie"==self.table.browser?star.setAttribute("class","tabulator-star-inactive"):star.classList.replace("tabulator-star-active","tabulator-star-inactive"),star.innerHTML='<polygon fill="#010155" stroke="#686868" stroke-width="37.6152" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" points="259.216,29.942 330.27,173.919 489.16,197.007 374.185,309.08 401.33,467.31 259.216,392.612 117.104,467.31 144.25,309.08 29.274,197.007 188.165,173.919 "/>')}))}function buildStar(i){var starHolder=document.createElement("span"),nextStar=star.cloneNode(!0);stars.push(nextStar),starHolder.addEventListener("mouseenter",(function(e){e.stopPropagation(),e.stopImmediatePropagation(),starChange(i)})),starHolder.addEventListener("mousemove",(function(e){e.stopPropagation(),e.stopImmediatePropagation()})),starHolder.addEventListener("click",(function(e){e.stopPropagation(),e.stopImmediatePropagation(),success(i),element.blur()})),starHolder.appendChild(nextStar),starsHolder.appendChild(starHolder)}function changeValue(val){value=val,starChange(val)}if(element.style.whiteSpace="nowrap",element.style.overflow="hidden",element.style.textOverflow="ellipsis",starsHolder.style.verticalAlign="middle",starsHolder.style.display="inline-block",starsHolder.style.padding="4px",star.setAttribute("width",size),star.setAttribute("height",size),star.setAttribute("viewBox","0 0 512 512"),star.setAttribute("xml:space","preserve"),star.style.padding="0 1px",editorParams.elementAttributes&&"object"==_typeof(editorParams.elementAttributes))for(var key in editorParams.elementAttributes)"+"==key.charAt(0)?(key=key.slice(1),starsHolder.setAttribute(key,starsHolder.getAttribute(key)+editorParams.elementAttributes["+"+key])):starsHolder.setAttribute(key,editorParams.elementAttributes[key]);for(var i=1;i<=maxStars;i++)buildStar(i);return starChange(value=Math.min(parseInt(value),maxStars)),starsHolder.addEventListener("mousemove",(function(e){starChange(0)})),starsHolder.addEventListener("click",(function(e){success(0)})),element.addEventListener("blur",(function(e){cancel()})),element.addEventListener("keydown",(function(e){switch(e.keyCode){case 39:changeValue(value+1);break;case 37:changeValue(value-1);break;case 13:success(value);break;case 27:cancel()}})),starsHolder},progress:function progress(cell,onRendered,success,cancel,editorParams){var element=cell.getElement(),max=void 0===editorParams.max?element.getElementsByTagName("div")[0].getAttribute("max")||100:editorParams.max,min=void 0===editorParams.min?element.getElementsByTagName("div")[0].getAttribute("min")||0:editorParams.min,percent=(max-min)/100,value=cell.getValue()||0,handle=document.createElement("div"),bar=document.createElement("div"),mouseDrag,mouseDragWidth;function updateValue(){var calcVal=percent*Math.round(bar.offsetWidth/(element.clientWidth/100))+min;success(calcVal),element.setAttribute("aria-valuenow",calcVal),element.setAttribute("aria-label",value)}if(handle.style.position="absolute",handle.style.right="0",handle.style.top="0",handle.style.bottom="0",handle.style.width="5px",handle.classList.add("tabulator-progress-handle"),bar.style.display="inline-block",bar.style.position="relative",bar.style.height="100%",bar.style.backgroundColor="#488CE9",bar.style.maxWidth="100%",bar.style.minWidth="0%",editorParams.elementAttributes&&"object"==_typeof(editorParams.elementAttributes))for(var key in editorParams.elementAttributes)"+"==key.charAt(0)?(key=key.slice(1),bar.setAttribute(key,bar.getAttribute(key)+editorParams.elementAttributes["+"+key])):bar.setAttribute(key,editorParams.elementAttributes[key]);return element.style.padding="4px 4px",value=Math.min(parseFloat(value),max),value=Math.max(parseFloat(value),min),value=Math.round((value-min)/percent),bar.style.width=value+"%",element.setAttribute("aria-valuemin",min),element.setAttribute("aria-valuemax",max),bar.appendChild(handle),handle.addEventListener("mousedown",(function(e){mouseDrag=e.screenX,mouseDragWidth=bar.offsetWidth})),handle.addEventListener("mouseover",(function(){handle.style.cursor="ew-resize"})),element.addEventListener("mousemove",(function(e){mouseDrag&&(bar.style.width=mouseDragWidth+e.screenX-mouseDrag+"px")})),element.addEventListener("mouseup",(function(e){mouseDrag&&(e.stopPropagation(),e.stopImmediatePropagation(),mouseDrag=!1,mouseDragWidth=!1,updateValue())})),element.addEventListener("keydown",(function(e){switch(e.keyCode){case 39:e.preventDefault(),bar.style.width=bar.clientWidth+element.clientWidth/100+"px";break;case 37:e.preventDefault(),bar.style.width=bar.clientWidth-element.clientWidth/100+"px";break;case 9:case 13:updateValue();break;case 27:cancel()}})),element.addEventListener("blur",(function(){cancel()})),bar},tickCross:function tickCross(cell,onRendered,success,cancel,editorParams){var value=cell.getValue(),input=document.createElement("input"),tristate=editorParams.tristate,indetermValue=void 0===editorParams.indeterminateValue?null:editorParams.indeterminateValue,indetermState=!1;if(input.setAttribute("type","checkbox"),input.style.marginTop="5px",input.style.boxSizing="border-box",editorParams.elementAttributes&&"object"==_typeof(editorParams.elementAttributes))for(var key in editorParams.elementAttributes)"+"==key.charAt(0)?(key=key.slice(1),input.setAttribute(key,input.getAttribute(key)+editorParams.elementAttributes["+"+key])):input.setAttribute(key,editorParams.elementAttributes[key]);function setValue(blur){return tristate?blur?indetermState?indetermValue:input.checked:input.checked&&!indetermState?(input.checked=!1,input.indeterminate=!0,indetermState=!0,indetermValue):(indetermState=!1,input.checked):input.checked}return input.value=value,!tristate||void 0!==value&&value!==indetermValue&&""!==value||(indetermState=!0,input.indeterminate=!0),"firefox"!=this.table.browser&&onRendered((function(){input.focus({preventScroll:!0})})),input.checked=!0===value||"true"===value||"True"===value||1===value,input.addEventListener("change",(function(e){success(setValue())})),input.addEventListener("blur",(function(e){success(setValue(!0))})),input.addEventListener("keydown",(function(e){13==e.keyCode&&success(setValue()),27==e.keyCode&&cancel()})),input}},Tabulator.prototype.registerModule("edit",Edit);var ExportRow=function ExportRow(type,columns,component,indent){this.type=type,this.columns=columns,this.component=component||!1,this.indent=indent||0},ExportColumn=function ExportColumn(value,component,width,height,depth){this.value=value,this.component=component||!1,this.width=width,this.height=height,this.depth=depth},Export=function Export(table){this.table=table,this.config={},this.cloneTableStyle=!0,this.colVisProp=""};Export.prototype.generateExportList=function(config,style,range,colVisProp){this.cloneTableStyle=style,this.config=config||{},this.colVisProp=colVisProp;var headers=!1!==this.config.columnHeaders?this.headersToExportRows(this.generateColumnGroupHeaders()):[],body=this.bodyToExportRows(this.rowLookup(range));return headers.concat(body)},Export.prototype.genereateTable=function(config,style,range,colVisProp){var list=this.generateExportList(config,style,range,colVisProp);return this.genereateTableElement(list)},Export.prototype.rowLookup=function(range){var _this45=this,rows=[];if("function"==typeof range)range.call(this.table).forEach((function(row){(row=_this45.table.rowManager.findRow(row))&&rows.push(row)}));else switch(range){case!0:case"visible":rows=this.table.rowManager.getVisibleRows(!0);break;case"all":rows=this.table.rowManager.rows;break;case"selected":rows=this.table.modules.selectRow.selectedRows;break;case"active":default:rows=this.table.rowManager.getDisplayRows()}return Object.assign([],rows)},Export.prototype.generateColumnGroupHeaders=function(){var _this46=this,output=[],columns;return(!1!==this.config.columnGroups?this.table.columnManager.columns:this.table.columnManager.columnsByIndex).forEach((function(column){var colData=_this46.processColumnGroup(column);colData&&output.push(colData)})),output},Export.prototype.processColumnGroup=function(column){var _this47=this,subGroups=column.columns,maxDepth=0,title,groupData={title:column.definition["title"+(this.colVisProp.charAt(0).toUpperCase()+this.colVisProp.slice(1))]||column.definition.title,column:column,depth:1};if(subGroups.length){if(groupData.subGroups=[],groupData.width=0,subGroups.forEach((function(subGroup){var subGroupData=_this47.processColumnGroup(subGroup);subGroupData&&(groupData.width+=subGroupData.width,groupData.subGroups.push(subGroupData),subGroupData.depth>maxDepth&&(maxDepth=subGroupData.depth))})),groupData.depth+=maxDepth,!groupData.width)return!1}else{if(!this.columnVisCheck(column))return!1;groupData.width=1}return groupData},Export.prototype.columnVisCheck=function(column){return!1!==column.definition[this.colVisProp]&&(column.visible||!column.visible&&column.definition[this.colVisProp])},Export.prototype.headersToExportRows=function(columns){var headers=[],headerDepth=0,exportRows=[];function parseColumnGroup(column,level){var depth=headerDepth-level;if(void 0===headers[level]&&(headers[level]=[]),column.height=column.subGroups?1:depth-column.depth+1,headers[level].push(column),column.height>1)for(var _i6=1;_i6<column.height;_i6++)void 0===headers[level+_i6]&&(headers[level+_i6]=[]),headers[level+_i6].push(!1);if(column.width>1)for(var _i7=1;_i7<column.width;_i7++)headers[level].push(!1);column.subGroups&&column.subGroups.forEach((function(subGroup){parseColumnGroup(subGroup,level+1)}))}return columns.forEach((function(column){column.depth>headerDepth&&(headerDepth=column.depth)})),columns.forEach((function(column){parseColumnGroup(column,0)})),headers.forEach((function(header){var columns=[];header.forEach((function(col){col?columns.push(new ExportColumn(col.title,col.column.getComponent(),col.width,col.height,col.depth)):columns.push(null)})),exportRows.push(new ExportRow("header",columns))})),exportRows},Export.prototype.bodyToExportRows=function(rows){var _this48=this,columns=[],exportRows=[];return this.table.columnManager.columnsByIndex.forEach((function(column){_this48.columnVisCheck(column)&&columns.push(column.getComponent())})),!1!==this.config.columnCalcs&&this.table.modExists("columnCalcs")&&(this.table.modules.columnCalcs.topInitialized&&rows.unshift(this.table.modules.columnCalcs.topRow),this.table.modules.columnCalcs.botInitialized&&rows.push(this.table.modules.columnCalcs.botRow)),(rows=rows.filter((function(row){switch(row.type){case"group":return!1!==_this48.config.rowGroups;case"calc":return!1!==_this48.config.columnCalcs;case"row":return!(_this48.table.options.dataTree&&!1===_this48.config.dataTree&&row.modules.dataTree.parent)}return!0}))).forEach((function(row,i){var rowData=row.getData(_this48.colVisProp),exportCols=[],indent=0;switch(row.type){case"group":indent=row.level,exportCols.push(new ExportColumn(row.key,row.getComponent(),columns.length,1));break;case"calc":case"row":columns.forEach((function(col){exportCols.push(new ExportColumn(col._column.getFieldValue(rowData),col,1,1))})),_this48.table.options.dataTree&&!1!==_this48.config.dataTree&&(indent=row.modules.dataTree.index)}exportRows.push(new ExportRow(row.type,exportCols,row.getComponent(),indent))})),exportRows},Export.prototype.genereateTableElement=function(list){var _this49=this,table=document.createElement("table"),headerEl=document.createElement("thead"),bodyEl=document.createElement("tbody"),styles=this.lookupTableStyles(),rowFormatter=this.table.options["rowFormatter"+(this.colVisProp.charAt(0).toUpperCase()+this.colVisProp.slice(1))],setup={};return setup.rowFormatter=null!==rowFormatter?rowFormatter:this.table.options.rowFormatter,this.table.options.dataTree&&!1!==this.config.dataTree&&this.table.modExists("columnCalcs")&&(setup.treeElementField=this.table.modules.dataTree.elementField),setup.groupHeader=this.table.options["groupHeader"+(this.colVisProp.charAt(0).toUpperCase()+this.colVisProp.slice(1))],setup.groupHeader&&!Array.isArray(setup.groupHeader)&&(setup.groupHeader=[setup.groupHeader]),table.classList.add("tabulator-print-table"),this.mapElementStyles(this.table.columnManager.getHeadersElement(),headerEl,["border-top","border-left","border-right","border-bottom","background-color","color","font-weight","font-family","font-size"]),list.length>1e3&&console.warn("It may take a long time to render an HTML table with more than 1000 rows"),list.forEach((function(row,i){switch(row.type){case"header":headerEl.appendChild(_this49.genereateHeaderElement(row,setup,styles));break;case"group":bodyEl.appendChild(_this49.genereateGroupElement(row,setup,styles));break;case"calc":bodyEl.appendChild(_this49.genereateCalcElement(row,setup,styles));break;case"row":var rowEl=_this49.genereateRowElement(row,setup,styles);_this49.mapElementStyles(i%2&&styles.evenRow?styles.evenRow:styles.oddRow,rowEl,["border-top","border-left","border-right","border-bottom","color","font-weight","font-family","font-size","background-color"]),bodyEl.appendChild(rowEl)}})),headerEl.innerHTML&&table.appendChild(headerEl),table.appendChild(bodyEl),this.mapElementStyles(this.table.element,table,["border-top","border-left","border-right","border-bottom"]),table},Export.prototype.lookupTableStyles=function(){var styles={};return this.cloneTableStyle&&window.getComputedStyle&&(styles.oddRow=this.table.element.querySelector(".tabulator-row-odd:not(.tabulator-group):not(.tabulator-calcs)"),styles.evenRow=this.table.element.querySelector(".tabulator-row-even:not(.tabulator-group):not(.tabulator-calcs)"),styles.calcRow=this.table.element.querySelector(".tabulator-row.tabulator-calcs"),styles.firstRow=this.table.element.querySelector(".tabulator-row:not(.tabulator-group):not(.tabulator-calcs)"),styles.firstGroup=this.table.element.getElementsByClassName("tabulator-group")[0],styles.firstRow&&(styles.styleCells=styles.firstRow.getElementsByClassName("tabulator-cell"),styles.firstCell=styles.styleCells[0],styles.lastCell=styles.styleCells[styles.styleCells.length-1])),styles},Export.prototype.genereateHeaderElement=function(row,setup,styles){var _this50=this,rowEl=document.createElement("tr");return row.columns.forEach((function(column){if(column){var cellEl=document.createElement("th"),classNames=column.component._column.definition.cssClass?column.component._column.definition.cssClass.split(" "):[];cellEl.colSpan=column.width,cellEl.rowSpan=column.height,cellEl.innerHTML=column.value,_this50.cloneTableStyle&&(cellEl.style.boxSizing="border-box"),classNames.forEach((function(className){cellEl.classList.add(className)})),_this50.mapElementStyles(column.component.getElement(),cellEl,["text-align","border-top","border-left","border-right","border-bottom","background-color","color","font-weight","font-family","font-size"]),_this50.mapElementStyles(column.component._column.contentElement,cellEl,["padding-top","padding-left","padding-right","padding-bottom"]),column.component._column.visible?_this50.mapElementStyles(column.component.getElement(),cellEl,["width"]):column.component._column.definition.width&&(cellEl.style.width=column.component._column.definition.width+"px"),column.component._column.parent&&_this50.mapElementStyles(column.component._column.parent.groupElement,cellEl,["border-top"]),rowEl.appendChild(cellEl)}})),rowEl},Export.prototype.genereateGroupElement=function(row,setup,styles){var rowEl=document.createElement("tr"),cellEl=document.createElement("td"),group=row.columns[0];return rowEl.classList.add("tabulator-print-table-row"),setup.groupHeader&&setup.groupHeader[row.indent]?group.value=setup.groupHeader[row.indent](group.value,row.component._group.getRowCount(),row.component._group.getData(),row.component):!1===setup.groupHeader?group.value=group.value:group.value=row.component._group.generator(group.value,row.component._group.getRowCount(),row.component._group.getData(),row.component),cellEl.colSpan=group.width,cellEl.innerHTML=group.value,rowEl.classList.add("tabulator-print-table-group"),rowEl.classList.add("tabulator-group-level-"+row.indent),group.component.getVisibility()&&rowEl.classList.add("tabulator-group-visible"),this.mapElementStyles(styles.firstGroup,rowEl,["border-top","border-left","border-right","border-bottom","color","font-weight","font-family","font-size","background-color"]),this.mapElementStyles(styles.firstGroup,cellEl,["padding-top","padding-left","padding-right","padding-bottom"]),rowEl.appendChild(cellEl),rowEl},Export.prototype.genereateCalcElement=function(row,setup,styles){var rowEl=this.genereateRowElement(row,setup,styles);return rowEl.classList.add("tabulator-print-table-calcs"),this.mapElementStyles(styles.calcRow,rowEl,["border-top","border-left","border-right","border-bottom","color","font-weight","font-family","font-size","background-color"]),rowEl},Export.prototype.genereateRowElement=function(row,setup,styles){var _this51=this,rowEl=document.createElement("tr");return rowEl.classList.add("tabulator-print-table-row"),row.columns.forEach((function(col){if(col){var cellEl=document.createElement("td"),column=col.component._column,value=col.value,cellWrapper={modules:{},getValue:function getValue(){return value},getField:function getField(){return column.definition.field},getElement:function getElement(){return cellEl},getColumn:function getColumn(){return column.getComponent()},getData:function getData(){return rowData},getRow:function getRow(){return row.getComponent()},getComponent:function getComponent(){return cellWrapper},column:column},classNames;if((column.definition.cssClass?column.definition.cssClass.split(" "):[]).forEach((function(className){cellEl.classList.add(className)})),_this51.table.modExists("format")&&!1!==_this51.config.formatCells)value=_this51.table.modules.format.formatExportValue(cellWrapper,_this51.colVisProp);else switch(void 0===value?"undefined":_typeof(value)){case"object":value=JSON.stringify(value);break;case"undefined":case"null":value="";break;default:value=value}if(value instanceof Node?cellEl.appendChild(value):cellEl.innerHTML=value,styles.firstCell&&(_this51.mapElementStyles(styles.firstCell,cellEl,["padding-top","padding-left","padding-right","padding-bottom","border-top","border-left","border-right","border-bottom","color","font-weight","font-family","font-size"]),column.definition.align&&(cellEl.style.textAlign=column.definition.align)),_this51.table.options.dataTree&&!1!==_this51.config.dataTree&&(setup.treeElementField&&setup.treeElementField==column.field||!setup.treeElementField&&0==i)&&(row.component._row.modules.dataTree.controlEl&&cellEl.insertBefore(row.component._row.modules.dataTree.controlEl.cloneNode(!0),cellEl.firstChild),row.component._row.modules.dataTree.branchEl&&cellEl.insertBefore(row.component._row.modules.dataTree.branchEl.cloneNode(!0),cellEl.firstChild)),rowEl.appendChild(cellEl),cellWrapper.modules.format&&cellWrapper.modules.format.renderedCallback&&cellWrapper.modules.format.renderedCallback(),setup.rowFormatter&&!1!==_this51.config.formatCells){var rowComponent=row.getComponent();rowComponent.getElement=function(){return rowEl},setup.rowFormatter(rowComponent)}}})),rowEl},Export.prototype.genereateHTMLTable=function(list){var holder=document.createElement("div");return holder.appendChild(this.genereateTableElement(list)),holder.innerHTML},Export.prototype.getHtml=function(visible,style,config,colVisProp){var list=this.generateExportList(config||this.table.options.htmlOutputConfig,style,visible,colVisProp||"htmlOutput");return this.genereateHTMLTable(list)},Export.prototype.mapElementStyles=function(from,to,props){if(this.cloneTableStyle&&from&&to){var lookup={"background-color":"backgroundColor",color:"fontColor",width:"width","font-weight":"fontWeight","font-family":"fontFamily","font-size":"fontSize","text-align":"textAlign","border-top":"borderTop","border-left":"borderLeft","border-right":"borderRight","border-bottom":"borderBottom","padding-top":"paddingTop","padding-left":"paddingLeft","padding-right":"paddingRight","padding-bottom":"paddingBottom"};if(window.getComputedStyle){var fromStyle=window.getComputedStyle(from);props.forEach((function(prop){to.style[lookup[prop]]=fromStyle.getPropertyValue(prop)}))}}},Tabulator.prototype.registerModule("export",Export);var Filter=function Filter(table){this.table=table,this.filterList=[],this.headerFilters={},this.headerFilterColumns=[],this.prevHeaderFilterChangeCheck="",this.prevHeaderFilterChangeCheck="{}",this.changed=!1};Filter.prototype.initializeColumn=function(column,value){var self=this,field=column.getField(),params;function success(value){var filterType="input"==column.modules.filter.tagType&&"text"==column.modules.filter.attrType||"textarea"==column.modules.filter.tagType?"partial":"match",type="",filterChangeCheck="",filterFunc;if(void 0===column.modules.filter.prevSuccess||column.modules.filter.prevSuccess!==value){if(column.modules.filter.prevSuccess=value,column.modules.filter.emptyFunc(value))delete self.headerFilters[field];else{switch(column.modules.filter.value=value,_typeof(column.definition.headerFilterFunc)){case"string":self.filters[column.definition.headerFilterFunc]?(type=column.definition.headerFilterFunc,filterFunc=function filterFunc(data){var params=column.definition.headerFilterFuncParams||{},fieldVal=column.getFieldValue(data);return params="function"==typeof params?params(value,fieldVal,data):params,self.filters[column.definition.headerFilterFunc](value,fieldVal,data,params)}):console.warn("Header Filter Error - Matching filter function not found: ",column.definition.headerFilterFunc);break;case"function":type=filterFunc=function filterFunc(data){var params=column.definition.headerFilterFuncParams||{},fieldVal=column.getFieldValue(data);return params="function"==typeof params?params(value,fieldVal,data):params,column.definition.headerFilterFunc(value,fieldVal,data,params)}}if(!filterFunc)switch(filterType){case"partial":filterFunc=function filterFunc(data){var colVal=column.getFieldValue(data);return null!=colVal&&String(colVal).toLowerCase().indexOf(String(value).toLowerCase())>-1},type="like";break;default:filterFunc=function filterFunc(data){return column.getFieldValue(data)==value},type="="}self.headerFilters[field]={value:value,func:filterFunc,type:type,params:{}}}filterChangeCheck=JSON.stringify(self.headerFilters),self.prevHeaderFilterChangeCheck!==filterChangeCheck&&(self.prevHeaderFilterChangeCheck=filterChangeCheck,self.changed=!0,self.table.rowManager.filterRefresh())}return!0}column.modules.filter={success:success,attrType:!1,tagType:!1,emptyFunc:!1},this.generateHeaderFilterElement(column)},Filter.prototype.generateHeaderFilterElement=function(column,initialValue,reinitialize){var _this52=this,self=this,success=column.modules.filter.success,field=column.getField(),filterElement,editor,editorElement,cellWrapper,typingTimer,searchTrigger,params;function cancel(){}if(column.modules.filter.headerElement&&column.modules.filter.headerElement.parentNode&&column.contentElement.removeChild(column.modules.filter.headerElement.parentNode),field){switch(column.modules.filter.emptyFunc=column.definition.headerFilterEmptyCheck||function(value){return!value&&"0"!==value},(filterElement=document.createElement("div")).classList.add("tabulator-header-filter"),_typeof(column.definition.headerFilter)){case"string":self.table.modules.edit.editors[column.definition.headerFilter]?(editor=self.table.modules.edit.editors[column.definition.headerFilter],"tick"!==column.definition.headerFilter&&"tickCross"!==column.definition.headerFilter||column.definition.headerFilterEmptyCheck||(column.modules.filter.emptyFunc=function(value){return!0!==value&&!1!==value})):console.warn("Filter Error - Cannot build header filter, No such editor found: ",column.definition.editor);break;case"function":editor=column.definition.headerFilter;break;case"boolean":column.modules.edit&&column.modules.edit.editor?editor=column.modules.edit.editor:column.definition.formatter&&self.table.modules.edit.editors[column.definition.formatter]?(editor=self.table.modules.edit.editors[column.definition.formatter],"tick"!==column.definition.formatter&&"tickCross"!==column.definition.formatter||column.definition.headerFilterEmptyCheck||(column.modules.filter.emptyFunc=function(value){return!0!==value&&!1!==value})):editor=self.table.modules.edit.editors.input}if(editor){if(cellWrapper={getValue:function getValue(){return void 0!==initialValue?initialValue:""},getField:function getField(){return column.definition.field},getElement:function getElement(){return filterElement},getColumn:function getColumn(){return column.getComponent()},getRow:function getRow(){return{normalizeHeight:function normalizeHeight(){}}}},params="function"==typeof(params=column.definition.headerFilterParams||{})?params.call(self.table):params,!(editorElement=editor.call(this.table.modules.edit,cellWrapper,(function(){}),success,cancel,params)))return void console.warn("Filter Error - Cannot add filter to "+field+" column, editor returned a value of false");if(!(editorElement instanceof Node))return void console.warn("Filter Error - Cannot add filter to "+field+" column, editor should return an instance of Node, the editor returned:",editorElement);field?self.table.modules.localize.bind("headerFilters|columns|"+column.definition.field,(function(value){editorElement.setAttribute("placeholder",void 0!==value&&value?value:self.table.modules.localize.getText("headerFilters|default"))})):self.table.modules.localize.bind("headerFilters|default",(function(value){editorElement.setAttribute("placeholder",void 0!==self.column.definition.headerFilterPlaceholder&&self.column.definition.headerFilterPlaceholder?self.column.definition.headerFilterPlaceholder:value)})),editorElement.addEventListener("click",(function(e){e.stopPropagation(),editorElement.focus()})),editorElement.addEventListener("focus",(function(e){var left=_this52.table.columnManager.element.scrollLeft;left!==_this52.table.rowManager.element.scrollLeft&&(_this52.table.rowManager.scrollHorizontal(left),_this52.table.columnManager.scrollHorizontal(left))})),typingTimer=!1,searchTrigger=function searchTrigger(e){typingTimer&&clearTimeout(typingTimer),typingTimer=setTimeout((function(){success(editorElement.value)}),self.table.options.headerFilterLiveFilterDelay)},column.modules.filter.headerElement=editorElement,column.modules.filter.attrType=editorElement.hasAttribute("type")?editorElement.getAttribute("type").toLowerCase():"",column.modules.filter.tagType=editorElement.tagName.toLowerCase(),!1!==column.definition.headerFilterLiveFilter&&("autocomplete"!==column.definition.headerFilter&&"tickCross"!==column.definition.headerFilter&&("autocomplete"!==column.definition.editor&&"tickCross"!==column.definition.editor||!0!==column.definition.headerFilter)&&(editorElement.addEventListener("keyup",searchTrigger),editorElement.addEventListener("search",searchTrigger),"number"==column.modules.filter.attrType&&editorElement.addEventListener("change",(function(e){success(editorElement.value)})),"text"==column.modules.filter.attrType&&"ie"!==this.table.browser&&editorElement.setAttribute("type","search")),"input"!=column.modules.filter.tagType&&"select"!=column.modules.filter.tagType&&"textarea"!=column.modules.filter.tagType||editorElement.addEventListener("mousedown",(function(e){e.stopPropagation()}))),filterElement.appendChild(editorElement),column.contentElement.appendChild(filterElement),reinitialize||self.headerFilterColumns.push(column)}}else console.warn("Filter Error - Cannot add header filter, column has no field set:",column.definition.title)},Filter.prototype.hideHeaderFilterElements=function(){this.headerFilterColumns.forEach((function(column){column.modules.filter&&column.modules.filter.headerElement&&(column.modules.filter.headerElement.style.display="none")}))},Filter.prototype.showHeaderFilterElements=function(){this.headerFilterColumns.forEach((function(column){column.modules.filter&&column.modules.filter.headerElement&&(column.modules.filter.headerElement.style.display="")}))},Filter.prototype.setHeaderFilterFocus=function(column){column.modules.filter&&column.modules.filter.headerElement?column.modules.filter.headerElement.focus():console.warn("Column Filter Focus Error - No header filter set on column:",column.getField())},Filter.prototype.getHeaderFilterValue=function(column){if(column.modules.filter&&column.modules.filter.headerElement)return column.modules.filter.headerElement.value;console.warn("Column Filter Error - No header filter set on column:",column.getField())},Filter.prototype.setHeaderFilterValue=function(column,value){column&&(column.modules.filter&&column.modules.filter.headerElement?(this.generateHeaderFilterElement(column,value,!0),column.modules.filter.success(value)):console.warn("Column Filter Error - No header filter set on column:",column.getField()))},Filter.prototype.reloadHeaderFilter=function(column){column&&(column.modules.filter&&column.modules.filter.headerElement?this.generateHeaderFilterElement(column,column.modules.filter.value,!0):console.warn("Column Filter Error - No header filter set on column:",column.getField()))},Filter.prototype.hasChanged=function(){var changed=this.changed;return this.changed=!1,changed},Filter.prototype.setFilter=function(field,type,value,params){var self=this;this.filterList=[],Array.isArray(field)||(field=[{field:field,type:type,value:value,params:params}]),this.addFilter(field)},Filter.prototype.addFilter=function(field,type,value,params){var self=this;Array.isArray(field)||(field=[{field:field,type:type,value:value,params:params}]),field.forEach((function(filter){(filter=self.findFilter(filter))&&(self.filterList.push(filter),self.changed=!0)})),this.table.options.persistence&&this.table.modExists("persistence",!0)&&this.table.modules.persistence.config.filter&&this.table.modules.persistence.save("filter")},Filter.prototype.findFilter=function(filter){var self=this,column;if(Array.isArray(filter))return this.findSubFilters(filter);var filterFunc=!1;return"function"==typeof filter.field?filterFunc=function filterFunc(data){return filter.field(data,filter.type||{})}:self.filters[filter.type]?filterFunc=(column=self.table.columnManager.getColumnByField(filter.field))?function filterFunc(data){return self.filters[filter.type](filter.value,column.getFieldValue(data),data,filter.params||{})}:function filterFunc(data){return self.filters[filter.type](filter.value,data[filter.field],data,filter.params||{})}:console.warn("Filter Error - No such filter type found, ignoring: ",filter.type),filter.func=filterFunc,!!filter.func&&filter},Filter.prototype.findSubFilters=function(filters){var self=this,output=[];return filters.forEach((function(filter){(filter=self.findFilter(filter))&&output.push(filter)})),!!output.length&&output},Filter.prototype.getFilters=function(all,ajax){var output=[];return all&&(output=this.getHeaderFilters()),ajax&&output.forEach((function(item){"function"==typeof item.type&&(item.type="function")})),output=output.concat(this.filtersToArray(this.filterList,ajax))},Filter.prototype.filtersToArray=function(filterList,ajax){var _this53=this,output=[];return filterList.forEach((function(filter){var item;Array.isArray(filter)?output.push(_this53.filtersToArray(filter,ajax)):(item={field:filter.field,type:filter.type,value:filter.value},ajax&&"function"==typeof item.type&&(item.type="function"),output.push(item))})),output},Filter.prototype.getHeaderFilters=function(){var self=this,output=[];for(var key in this.headerFilters)output.push({field:key,type:this.headerFilters[key].type,value:this.headerFilters[key].value});return output},Filter.prototype.removeFilter=function(field,type,value){var self=this;Array.isArray(field)||(field=[{field:field,type:type,value:value}]),field.forEach((function(filter){var index=-1;(index="object"==_typeof(filter.field)?self.filterList.findIndex((function(element){return filter===element})):self.filterList.findIndex((function(element){return filter.field===element.field&&filter.type===element.type&&filter.value===element.value})))>-1?(self.filterList.splice(index,1),self.changed=!0):console.warn("Filter Error - No matching filter type found, ignoring: ",filter.type)})),this.table.options.persistence&&this.table.modExists("persistence",!0)&&this.table.modules.persistence.config.filter&&this.table.modules.persistence.save("filter")},Filter.prototype.clearFilter=function(all){this.filterList=[],all&&this.clearHeaderFilter(),this.changed=!0,this.table.options.persistence&&this.table.modExists("persistence",!0)&&this.table.modules.persistence.config.filter&&this.table.modules.persistence.save("filter")},Filter.prototype.clearHeaderFilter=function(){var self=this;this.headerFilters={},self.prevHeaderFilterChangeCheck="{}",this.headerFilterColumns.forEach((function(column){column.modules.filter.value=null,column.modules.filter.prevSuccess=void 0,self.reloadHeaderFilter(column)})),this.changed=!0},Filter.prototype.search=function(searchType,field,type,value){var self=this,activeRows=[],filterList=[];return Array.isArray(field)||(field=[{field:field,type:type,value:value}]),field.forEach((function(filter){(filter=self.findFilter(filter))&&filterList.push(filter)})),this.table.rowManager.rows.forEach((function(row){var match=!0;filterList.forEach((function(filter){self.filterRecurse(filter,row.getData())||(match=!1)})),match&&activeRows.push("data"===searchType?row.getData("data"):row.getComponent())})),activeRows},Filter.prototype.filter=function(rowList,filters){var self=this,activeRows=[],activeRowComponents=[];return self.table.options.dataFiltering&&self.table.options.dataFiltering.call(self.table,self.getFilters()),self.table.options.ajaxFiltering||!self.filterList.length&&!Object.keys(self.headerFilters).length?activeRows=rowList.slice(0):rowList.forEach((function(row){self.filterRow(row)&&activeRows.push(row)})),self.table.options.dataFiltered&&(activeRows.forEach((function(row){activeRowComponents.push(row.getComponent())})),self.table.options.dataFiltered.call(self.table,self.getFilters(),activeRowComponents)),activeRows},Filter.prototype.filterRow=function(row,filters){var self=this,match=!0,data=row.getData();for(var field in self.filterList.forEach((function(filter){self.filterRecurse(filter,data)||(match=!1)})),self.headerFilters)self.headerFilters[field].func(data)||(match=!1);return match},Filter.prototype.filterRecurse=function(filter,data){var self=this,match=!1;return Array.isArray(filter)?filter.forEach((function(subFilter){self.filterRecurse(subFilter,data)&&(match=!0)})):match=filter.func(data),match},Filter.prototype.filters={"=":function _(filterVal,rowVal,rowData,filterParams){return rowVal==filterVal},"<":function _(filterVal,rowVal,rowData,filterParams){return rowVal<filterVal},"<=":function _(filterVal,rowVal,rowData,filterParams){return rowVal<=filterVal},">":function _(filterVal,rowVal,rowData,filterParams){return rowVal>filterVal},">=":function _(filterVal,rowVal,rowData,filterParams){return rowVal>=filterVal},"!=":function _(filterVal,rowVal,rowData,filterParams){return rowVal!=filterVal},regex:function regex(filterVal,rowVal,rowData,filterParams){return"string"==typeof filterVal&&(filterVal=new RegExp(filterVal)),filterVal.test(rowVal)},like:function like(filterVal,rowVal,rowData,filterParams){return null==filterVal?rowVal===filterVal:null!=rowVal&&String(rowVal).toLowerCase().indexOf(filterVal.toLowerCase())>-1},keywords:function keywords(filterVal,rowVal,rowData,filterParams){var keywords=filterVal.toLowerCase().split(void 0===filterParams.separator?" ":filterParams.separator),value=String(null==rowVal?"":rowVal).toLowerCase(),matches=[];return keywords.forEach((function(keyword){value.includes(keyword)&&matches.push(!0)})),filterParams.matchAll?matches.length===keywords.length:!!matches.length},starts:function starts(filterVal,rowVal,rowData,filterParams){return null==filterVal?rowVal===filterVal:null!=rowVal&&String(rowVal).toLowerCase().startsWith(filterVal.toLowerCase())},ends:function ends(filterVal,rowVal,rowData,filterParams){return null==filterVal?rowVal===filterVal:null!=rowVal&&String(rowVal).toLowerCase().endsWith(filterVal.toLowerCase())},in:function _in(filterVal,rowVal,rowData,filterParams){return Array.isArray(filterVal)?filterVal.indexOf(rowVal)>-1:(console.warn("Filter Error - filter value is not an array:",filterVal),!1)}},Tabulator.prototype.registerModule("filter",Filter);var Format=function Format(table){this.table=table};Format.prototype.initializeColumn=function(column){column.modules.format=this.lookupFormatter(column,""),void 0!==column.definition.formatterPrint&&(column.modules.format.print=this.lookupFormatter(column,"Print")),void 0!==column.definition.formatterClipboard&&(column.modules.format.clipboard=this.lookupFormatter(column,"Clipboard")),void 0!==column.definition.formatterHtmlOutput&&(column.modules.format.htmlOutput=this.lookupFormatter(column,"HtmlOutput"))},Format.prototype.lookupFormatter=function(column,type){var config={params:column.definition["formatter"+type+"Params"]||{}},formatter=column.definition["formatter"+type];switch(void 0===formatter?"undefined":_typeof(formatter)){case"string":"tick"===formatter&&(formatter="tickCross",void 0===config.params.crossElement&&(config.params.crossElement=!1),console.warn("DEPRECATION WARNING - the tick formatter has been deprecated, please use the tickCross formatter with the crossElement param set to false")),this.formatters[formatter]?config.formatter=this.formatters[formatter]:(console.warn("Formatter Error - No such formatter found: ",formatter),config.formatter=this.formatters.plaintext);break;case"function":config.formatter=formatter;break;default:config.formatter=this.formatters.plaintext}return config},Format.prototype.cellRendered=function(cell){cell.modules.format&&cell.modules.format.renderedCallback&&cell.modules.format.renderedCallback()},Format.prototype.formatValue=function(cell){var component=cell.getComponent(),params="function"==typeof cell.column.modules.format.params?cell.column.modules.format.params(component):cell.column.modules.format.params;function onRendered(callback){cell.modules.format||(cell.modules.format={}),cell.modules.format.renderedCallback=callback}return cell.column.modules.format.formatter.call(this,component,params,onRendered)},Format.prototype.formatExportValue=function(cell,type){var formatter=cell.column.modules.format[type],params;if(formatter){var onRendered=function onRendered(callback){cell.modules.format||(cell.modules.format={}),cell.modules.format.renderedCallback=callback};return params="function"==typeof formatter.params?formatter.params(component):formatter.params,formatter.formatter.call(this,cell.getComponent(),params,onRendered)}return this.formatValue(cell)},Format.prototype.sanitizeHTML=function(value){if(value){var entityMap={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;","/":"&#x2F;","`":"&#x60;","=":"&#x3D;"};return String(value).replace(/[&<>"'`=\/]/g,(function(s){return entityMap[s]}))}return value},Format.prototype.emptyToSpace=function(value){return null==value||""===value?"&nbsp;":value},Format.prototype.getFormatter=function(formatter){var formatter;switch(void 0===formatter?"undefined":_typeof(formatter)){case"string":this.formatters[formatter]?formatter=this.formatters[formatter]:(console.warn("Formatter Error - No such formatter found: ",formatter),formatter=this.formatters.plaintext);break;case"function":formatter=formatter;break;default:formatter=this.formatters.plaintext}return formatter},Format.prototype.formatters={plaintext:function plaintext(cell,formatterParams,onRendered){return this.emptyToSpace(this.sanitizeHTML(cell.getValue()))},html:function html(cell,formatterParams,onRendered){return cell.getValue()},textarea:function textarea(cell,formatterParams,onRendered){return cell.getElement().style.whiteSpace="pre-wrap",this.emptyToSpace(this.sanitizeHTML(cell.getValue()))},money:function money(cell,formatterParams,onRendered){var floatVal=parseFloat(cell.getValue()),number,integer,decimal,rgx,decimalSym=formatterParams.decimal||".",thousandSym=formatterParams.thousand||",",symbol=formatterParams.symbol||"",after=!!formatterParams.symbolAfter,precision=void 0!==formatterParams.precision?formatterParams.precision:2;if(isNaN(floatVal))return this.emptyToSpace(this.sanitizeHTML(cell.getValue()));for(number=!1!==precision?floatVal.toFixed(precision):floatVal,integer=(number=String(number).split("."))[0],decimal=number.length>1?decimalSym+number[1]:"",rgx=/(\d+)(\d{3})/;rgx.test(integer);)integer=integer.replace(rgx,"$1"+thousandSym+"$2");return after?integer+decimal+symbol:symbol+integer+decimal},link:function link(cell,formatterParams,onRendered){var value=cell.getValue(),urlPrefix=formatterParams.urlPrefix||"",download=formatterParams.download,label=value,el=document.createElement("a"),data;if(formatterParams.labelField&&(label=(data=cell.getData())[formatterParams.labelField]),formatterParams.label)switch(_typeof(formatterParams.label)){case"string":label=formatterParams.label;break;case"function":label=formatterParams.label(cell)}if(label){if(formatterParams.urlField&&(value=(data=cell.getData())[formatterParams.urlField]),formatterParams.url)switch(_typeof(formatterParams.url)){case"string":value=formatterParams.url;break;case"function":value=formatterParams.url(cell)}return el.setAttribute("href",urlPrefix+value),formatterParams.target&&el.setAttribute("target",formatterParams.target),formatterParams.download&&(download="function"==typeof download?download(cell):!0===download?"":download,el.setAttribute("download",download)),el.innerHTML=this.emptyToSpace(this.sanitizeHTML(label)),el}return"&nbsp;"},image:function image(cell,formatterParams,onRendered){var el=document.createElement("img");switch(el.setAttribute("src",cell.getValue()),_typeof(formatterParams.height)){case"number":el.style.height=formatterParams.height+"px";break;case"string":el.style.height=formatterParams.height}switch(_typeof(formatterParams.width)){case"number":el.style.width=formatterParams.width+"px";break;case"string":el.style.width=formatterParams.width}return el.addEventListener("load",(function(){cell.getRow().normalizeHeight()})),el},tickCross:function tickCross(cell,formatterParams,onRendered){var value=cell.getValue(),element=cell.getElement(),empty=formatterParams.allowEmpty,truthy=formatterParams.allowTruthy,tick=void 0!==formatterParams.tickElement?formatterParams.tickElement:'<svg enable-background="new 0 0 24 24" height="14" width="14" viewBox="0 0 24 24" xml:space="preserve" ><path fill="#2DC214" clip-rule="evenodd" d="M21.652,3.211c-0.293-0.295-0.77-0.295-1.061,0L9.41,14.34  c-0.293,0.297-0.771,0.297-1.062,0L3.449,9.351C3.304,9.203,3.114,9.13,2.923,9.129C2.73,9.128,2.534,9.201,2.387,9.351  l-2.165,1.946C0.078,11.445,0,11.63,0,11.823c0,0.194,0.078,0.397,0.223,0.544l4.94,5.184c0.292,0.296,0.771,0.776,1.062,1.07  l2.124,2.141c0.292,0.293,0.769,0.293,1.062,0l14.366-14.34c0.293-0.294,0.293-0.777,0-1.071L21.652,3.211z" fill-rule="evenodd"/></svg>',cross=void 0!==formatterParams.crossElement?formatterParams.crossElement:'<svg enable-background="new 0 0 24 24" height="14" width="14"  viewBox="0 0 24 24" xml:space="preserve" ><path fill="#CE1515" d="M22.245,4.015c0.313,0.313,0.313,0.826,0,1.139l-6.276,6.27c-0.313,0.312-0.313,0.826,0,1.14l6.273,6.272  c0.313,0.313,0.313,0.826,0,1.14l-2.285,2.277c-0.314,0.312-0.828,0.312-1.142,0l-6.271-6.271c-0.313-0.313-0.828-0.313-1.141,0  l-6.276,6.267c-0.313,0.313-0.828,0.313-1.141,0l-2.282-2.28c-0.313-0.313-0.313-0.826,0-1.14l6.278-6.269  c0.313-0.312,0.313-0.826,0-1.14L1.709,5.147c-0.314-0.313-0.314-0.827,0-1.14l2.284-2.278C4.308,1.417,4.821,1.417,5.135,1.73  L11.405,8c0.314,0.314,0.828,0.314,1.141,0.001l6.276-6.267c0.312-0.312,0.826-0.312,1.141,0L22.245,4.015z"/></svg>';return truthy&&value||!0===value||"true"===value||"True"===value||1===value||"1"===value?(element.setAttribute("aria-checked",!0),tick||""):!empty||"null"!==value&&""!==value&&null!=value?(element.setAttribute("aria-checked",!1),cross||""):(element.setAttribute("aria-checked","mixed"),"")},datetime:function datetime(cell,formatterParams,onRendered){var inputFormat=formatterParams.inputFormat||"YYYY-MM-DD hh:mm:ss",outputFormat=formatterParams.outputFormat||"DD/MM/YYYY hh:mm:ss",invalid=void 0!==formatterParams.invalidPlaceholder?formatterParams.invalidPlaceholder:"",value=cell.getValue(),newDatetime=moment(value,inputFormat);return newDatetime.isValid()?formatterParams.timezone?newDatetime.tz(formatterParams.timezone).format(outputFormat):newDatetime.format(outputFormat):!0===invalid?value:"function"==typeof invalid?invalid(value):invalid},datetimediff:function datetime(cell,formatterParams,onRendered){var inputFormat=formatterParams.inputFormat||"YYYY-MM-DD hh:mm:ss",invalid=void 0!==formatterParams.invalidPlaceholder?formatterParams.invalidPlaceholder:"",suffix=void 0!==formatterParams.suffix&&formatterParams.suffix,unit=void 0!==formatterParams.unit?formatterParams.unit:void 0,humanize=void 0!==formatterParams.humanize&&formatterParams.humanize,date=void 0!==formatterParams.date?formatterParams.date:moment(),value=cell.getValue(),newDatetime=moment(value,inputFormat);return newDatetime.isValid()?humanize?moment.duration(newDatetime.diff(date)).humanize(suffix):newDatetime.diff(date,unit)+(suffix?" "+suffix:""):!0===invalid?value:"function"==typeof invalid?invalid(value):invalid},lookup:function lookup(cell,formatterParams,onRendered){var value=cell.getValue();return void 0===formatterParams[value]?(console.warn("Missing display value for "+value),value):formatterParams[value]},star:function star(cell,formatterParams,onRendered){var value=cell.getValue(),element=cell.getElement(),maxStars=formatterParams&&formatterParams.stars?formatterParams.stars:5,stars=document.createElement("span"),star=document.createElementNS("http://www.w3.org/2000/svg","svg"),starActive='<polygon fill="#FFEA00" stroke="#C1AB60" stroke-width="37.6152" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" points="259.216,29.942 330.27,173.919 489.16,197.007 374.185,309.08 401.33,467.31 259.216,392.612 117.104,467.31 144.25,309.08 29.274,197.007 188.165,173.919 "/>',starInactive='<polygon fill="#D2D2D2" stroke="#686868" stroke-width="37.6152" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" points="259.216,29.942 330.27,173.919 489.16,197.007 374.185,309.08 401.33,467.31 259.216,392.612 117.104,467.31 144.25,309.08 29.274,197.007 188.165,173.919 "/>';stars.style.verticalAlign="middle",star.setAttribute("width","14"),star.setAttribute("height","14"),star.setAttribute("viewBox","0 0 512 512"),star.setAttribute("xml:space","preserve"),star.style.padding="0 1px",value=value&&!isNaN(value)?parseInt(value):0,value=Math.max(0,Math.min(value,maxStars));for(var i=1;i<=maxStars;i++){var nextStar=star.cloneNode(!0);nextStar.innerHTML=i<=value?starActive:starInactive,stars.appendChild(nextStar)}return element.style.whiteSpace="nowrap",element.style.overflow="hidden",element.style.textOverflow="ellipsis",element.setAttribute("aria-label",value),stars},traffic:function traffic(cell,formatterParams,onRendered){var value=this.sanitizeHTML(cell.getValue())||0,el=document.createElement("span"),max=formatterParams&&formatterParams.max?formatterParams.max:100,min=formatterParams&&formatterParams.min?formatterParams.min:0,colors=formatterParams&&void 0!==formatterParams.color?formatterParams.color:["red","orange","green"],color="#666666",percent,percentValue;if(!isNaN(value)&&void 0!==cell.getValue()){switch(el.classList.add("tabulator-traffic-light"),percentValue=parseFloat(value)<=max?parseFloat(value):max,percentValue=parseFloat(percentValue)>=min?parseFloat(percentValue):min,percent=(max-min)/100,percentValue=Math.round((percentValue-min)/percent),void 0===colors?"undefined":_typeof(colors)){case"string":color=colors;break;case"function":color=colors(value);break;case"object":if(Array.isArray(colors)){var unit=100/colors.length,index=Math.floor(percentValue/unit);index=Math.min(index,colors.length-1),color=colors[index=Math.max(index,0)];break}}return el.style.backgroundColor=color,el}},progress:function progress(cell,formatterParams,onRendered){var value=this.sanitizeHTML(cell.getValue())||0,element=cell.getElement(),max=formatterParams&&formatterParams.max?formatterParams.max:100,min=formatterParams&&formatterParams.min?formatterParams.min:0,legendAlign=formatterParams&&formatterParams.legendAlign?formatterParams.legendAlign:"center",percent,percentValue,color,legend,legendColor,top,left,right,bottom;switch(percentValue=parseFloat(value)<=max?parseFloat(value):max,percentValue=parseFloat(percentValue)>=min?parseFloat(percentValue):min,percent=(max-min)/100,percentValue=Math.round((percentValue-min)/percent),_typeof(formatterParams.color)){case"string":color=formatterParams.color;break;case"function":color=formatterParams.color(value);break;case"object":if(Array.isArray(formatterParams.color)){var unit=100/formatterParams.color.length,index=Math.floor(percentValue/unit);index=Math.min(index,formatterParams.color.length-1),index=Math.max(index,0),color=formatterParams.color[index];break}default:color="#2DC214"}switch(_typeof(formatterParams.legend)){case"string":legend=formatterParams.legend;break;case"function":legend=formatterParams.legend(value);break;case"boolean":legend=value;break;default:legend=!1}switch(_typeof(formatterParams.legendColor)){case"string":legendColor=formatterParams.legendColor;break;case"function":legendColor=formatterParams.legendColor(value);break;case"object":if(Array.isArray(formatterParams.legendColor)){var unit=100/formatterParams.legendColor.length,index=Math.floor(percentValue/unit);index=Math.min(index,formatterParams.legendColor.length-1),index=Math.max(index,0),legendColor=formatterParams.legendColor[index]}break;default:legendColor="#000"}element.style.minWidth="30px",element.style.position="relative",element.setAttribute("aria-label",percentValue);var barEl=document.createElement("div");if(barEl.style.display="inline-block",barEl.style.position="relative",barEl.style.width=percentValue+"%",barEl.style.backgroundColor=color,barEl.style.height="100%",barEl.setAttribute("data-max",max),barEl.setAttribute("data-min",min),legend){var legendEl=document.createElement("div");legendEl.style.position="absolute",legendEl.style.top="4px",legendEl.style.left=0,legendEl.style.textAlign=legendAlign,legendEl.style.width="100%",legendEl.style.color=legendColor,legendEl.innerHTML=legend}return onRendered((function(){if(!(cell instanceof CellComponent)){var holderEl=document.createElement("div");holderEl.style.position="absolute",holderEl.style.top="4px",holderEl.style.bottom="4px",holderEl.style.left="4px",holderEl.style.right="4px",element.appendChild(holderEl),element=holderEl}element.appendChild(barEl),legend&&element.appendChild(legendEl)})),""},color:function color(cell,formatterParams,onRendered){return cell.getElement().style.backgroundColor=this.sanitizeHTML(cell.getValue()),""},buttonTick:function buttonTick(cell,formatterParams,onRendered){return'<svg enable-background="new 0 0 24 24" height="14" width="14" viewBox="0 0 24 24" xml:space="preserve" ><path fill="#2DC214" clip-rule="evenodd" d="M21.652,3.211c-0.293-0.295-0.77-0.295-1.061,0L9.41,14.34  c-0.293,0.297-0.771,0.297-1.062,0L3.449,9.351C3.304,9.203,3.114,9.13,2.923,9.129C2.73,9.128,2.534,9.201,2.387,9.351  l-2.165,1.946C0.078,11.445,0,11.63,0,11.823c0,0.194,0.078,0.397,0.223,0.544l4.94,5.184c0.292,0.296,0.771,0.776,1.062,1.07  l2.124,2.141c0.292,0.293,0.769,0.293,1.062,0l14.366-14.34c0.293-0.294,0.293-0.777,0-1.071L21.652,3.211z" fill-rule="evenodd"/></svg>'},buttonCross:function buttonCross(cell,formatterParams,onRendered){return'<svg enable-background="new 0 0 24 24" height="14" width="14" viewBox="0 0 24 24" xml:space="preserve" ><path fill="#CE1515" d="M22.245,4.015c0.313,0.313,0.313,0.826,0,1.139l-6.276,6.27c-0.313,0.312-0.313,0.826,0,1.14l6.273,6.272  c0.313,0.313,0.313,0.826,0,1.14l-2.285,2.277c-0.314,0.312-0.828,0.312-1.142,0l-6.271-6.271c-0.313-0.313-0.828-0.313-1.141,0  l-6.276,6.267c-0.313,0.313-0.828,0.313-1.141,0l-2.282-2.28c-0.313-0.313-0.313-0.826,0-1.14l6.278-6.269  c0.313-0.312,0.313-0.826,0-1.14L1.709,5.147c-0.314-0.313-0.314-0.827,0-1.14l2.284-2.278C4.308,1.417,4.821,1.417,5.135,1.73  L11.405,8c0.314,0.314,0.828,0.314,1.141,0.001l6.276-6.267c0.312-0.312,0.826-0.312,1.141,0L22.245,4.015z"/></svg>'},rownum:function rownum(cell,formatterParams,onRendered){return this.table.rowManager.activeRows.indexOf(cell.getRow()._getSelf())+1},handle:function handle(cell,formatterParams,onRendered){return cell.getElement().classList.add("tabulator-row-handle"),"<div class='tabulator-row-handle-box'><div class='tabulator-row-handle-bar'></div><div class='tabulator-row-handle-bar'></div><div class='tabulator-row-handle-bar'></div></div>"},responsiveCollapse:function responsiveCollapse(cell,formatterParams,onRendered){var self=this,open=!1,el=document.createElement("div"),config=cell.getRow()._row.modules.responsiveLayout;function toggleList(isOpen){var collapseEl=config.element;config.open=isOpen,collapseEl&&(config.open?(el.classList.add("open"),collapseEl.style.display=""):(el.classList.remove("open"),collapseEl.style.display="none"))}return el.classList.add("tabulator-responsive-collapse-toggle"),el.innerHTML="<span class='tabulator-responsive-collapse-toggle-open'>+</span><span class='tabulator-responsive-collapse-toggle-close'>-</span>",cell.getElement().classList.add("tabulator-row-handle"),el.addEventListener("click",(function(e){e.stopImmediatePropagation(),toggleList(!config.open)})),toggleList(config.open),el},rowSelection:function rowSelection(cell){var _this54=this,checkbox=document.createElement("input");if(checkbox.type="checkbox",this.table.modExists("selectRow",!0))if(checkbox.addEventListener("click",(function(e){e.stopPropagation()})),"function"==typeof cell.getRow){var row=cell.getRow();checkbox.addEventListener("change",(function(e){row.toggleSelect()})),checkbox.checked=row.isSelected(),this.table.modules.selectRow.registerRowSelectCheckbox(row,checkbox)}else checkbox.addEventListener("change",(function(e){_this54.table.modules.selectRow.selectedRows.length?_this54.table.deselectRow():_this54.table.selectRow()})),this.table.modules.selectRow.registerHeaderSelectCheckbox(checkbox);return checkbox}},Tabulator.prototype.registerModule("format",Format);var FrozenColumns=function FrozenColumns(table){this.table=table,this.leftColumns=[],this.rightColumns=[],this.leftMargin=0,this.rightMargin=0,this.rightPadding=0,this.initializationMode="left",this.active=!1,this.scrollEndTimer=!1};FrozenColumns.prototype.reset=function(){this.initializationMode="left",this.leftColumns=[],this.rightColumns=[],this.leftMargin=0,this.rightMargin=0,this.rightMargin=0,this.active=!1,this.table.columnManager.headersElement.style.marginLeft=0,this.table.columnManager.element.style.paddingRight=0},FrozenColumns.prototype.initializeColumn=function(column){var config={margin:0,edge:!1};column.isGroup||(this.frozenCheck(column)?(config.position=this.initializationMode,"left"==this.initializationMode?this.leftColumns.push(column):this.rightColumns.unshift(column),this.active=!0,column.modules.frozen=config):this.initializationMode="right")},FrozenColumns.prototype.frozenCheck=function(column){var frozen=!1;return column.parent.isGroup&&column.definition.frozen&&console.warn("Frozen Column Error - Parent column group must be frozen, not individual columns or sub column groups"),column.parent.isGroup?this.frozenCheck(column.parent):column.definition.frozen},FrozenColumns.prototype.scrollHorizontal=function(){var _this55=this,rows;this.active&&(clearTimeout(this.scrollEndTimer),this.scrollEndTimer=setTimeout((function(){_this55.layout()}),100),rows=this.table.rowManager.getVisibleRows(),this.calcMargins(),this.layoutColumnPosition(),this.layoutCalcRows(),rows.forEach((function(row){"row"===row.type&&_this55.layoutRow(row)})),this.table.rowManager.tableElement.style.marginRight=this.rightMargin)},FrozenColumns.prototype.calcMargins=function(){this.leftMargin=this._calcSpace(this.leftColumns,this.leftColumns.length)+"px",this.table.columnManager.headersElement.style.marginLeft=this.leftMargin,this.rightMargin=this._calcSpace(this.rightColumns,this.rightColumns.length)+"px",this.table.columnManager.element.style.paddingRight=this.rightMargin,this.rightPadding=this.table.rowManager.element.clientWidth+this.table.columnManager.scrollLeft},FrozenColumns.prototype.layoutCalcRows=function(){this.table.modExists("columnCalcs")&&(this.table.modules.columnCalcs.topInitialized&&this.table.modules.columnCalcs.topRow&&this.layoutRow(this.table.modules.columnCalcs.topRow),this.table.modules.columnCalcs.botInitialized&&this.table.modules.columnCalcs.botRow&&this.layoutRow(this.table.modules.columnCalcs.botRow))},FrozenColumns.prototype.layoutColumnPosition=function(allCells){var _this56=this,leftParents=[];this.leftColumns.forEach((function(column,i){if(column.modules.frozen.margin=_this56._calcSpace(_this56.leftColumns,i)+_this56.table.columnManager.scrollLeft+"px",i==_this56.leftColumns.length-1?column.modules.frozen.edge=!0:column.modules.frozen.edge=!1,column.parent.isGroup){var parentEl=_this56.getColGroupParentElement(column);leftParents.includes(parentEl)||(_this56.layoutElement(parentEl,column),leftParents.push(parentEl)),column.modules.frozen.edge&&parentEl.classList.add("tabulator-frozen-"+column.modules.frozen.position)}else _this56.layoutElement(column.getElement(),column);allCells&&column.cells.forEach((function(cell){_this56.layoutElement(cell.getElement(),column)}))})),this.rightColumns.forEach((function(column,i){column.modules.frozen.margin=_this56.rightPadding-_this56._calcSpace(_this56.rightColumns,i+1)+"px",i==_this56.rightColumns.length-1?column.modules.frozen.edge=!0:column.modules.frozen.edge=!1,column.parent.isGroup?_this56.layoutElement(_this56.getColGroupParentElement(column),column):_this56.layoutElement(column.getElement(),column),allCells&&column.cells.forEach((function(cell){_this56.layoutElement(cell.getElement(),column)}))}))},FrozenColumns.prototype.getColGroupParentElement=function(column){return column.parent.isGroup?this.getColGroupParentElement(column.parent):column.getElement()},FrozenColumns.prototype.layout=function(){var self=this,rightMargin=0;self.active&&(this.calcMargins(),self.table.rowManager.getDisplayRows().forEach((function(row){"row"===row.type&&self.layoutRow(row)})),this.layoutCalcRows(),this.layoutColumnPosition(!0),this.table.rowManager.tableElement.style.marginRight=this.rightMargin)},FrozenColumns.prototype.layoutRow=function(row){var _this57=this,rowEl;row.getElement().style.paddingLeft=this.leftMargin,this.leftColumns.forEach((function(column){var cell=row.getCell(column);cell&&_this57.layoutElement(cell.getElement(),column)})),this.rightColumns.forEach((function(column){var cell=row.getCell(column);cell&&_this57.layoutElement(cell.getElement(),column)}))},FrozenColumns.prototype.layoutElement=function(element,column){column.modules.frozen&&(element.style.position="absolute",element.style.left=column.modules.frozen.margin,element.classList.add("tabulator-frozen"),column.modules.frozen.edge&&element.classList.add("tabulator-frozen-"+column.modules.frozen.position))},FrozenColumns.prototype._calcSpace=function(columns,index){for(var width=0,_i8=0;_i8<index;_i8++)columns[_i8].visible&&(width+=columns[_i8].getWidth());return width},Tabulator.prototype.registerModule("frozenColumns",FrozenColumns);var FrozenRows=function FrozenRows(table){this.table=table,this.topElement=document.createElement("div"),this.rows=[],this.displayIndex=0};FrozenRows.prototype.initialize=function(){this.rows=[],this.topElement.classList.add("tabulator-frozen-rows-holder"),this.table.columnManager.getElement().insertBefore(this.topElement,this.table.columnManager.headersElement.nextSibling)},FrozenRows.prototype.setDisplayIndex=function(index){this.displayIndex=index},FrozenRows.prototype.getDisplayIndex=function(){return this.displayIndex},FrozenRows.prototype.isFrozen=function(){return!!this.rows.length},FrozenRows.prototype.getRows=function(rows){var self=this,frozen=[],output=rows.slice(0);return this.rows.forEach((function(row){var index=output.indexOf(row);index>-1&&output.splice(index,1)})),output},FrozenRows.prototype.freezeRow=function(row){row.modules.frozen?console.warn("Freeze Error - Row is already frozen"):(row.modules.frozen=!0,this.topElement.appendChild(row.getElement()),row.initialize(),row.normalizeHeight(),this.table.rowManager.adjustTableSize(),this.rows.push(row),this.table.rowManager.refreshActiveData("display"),this.styleRows())},FrozenRows.prototype.unfreezeRow=function(row){var index=this.rows.indexOf(row);if(row.modules.frozen){row.modules.frozen=!1;var rowEl=row.getElement();rowEl.parentNode.removeChild(rowEl),this.table.rowManager.adjustTableSize(),this.rows.splice(index,1),this.table.rowManager.refreshActiveData("display"),this.rows.length&&this.styleRows()}else console.warn("Freeze Error - Row is already unfrozen")},FrozenRows.prototype.styleRows=function(row){var self=this;this.rows.forEach((function(row,i){self.table.rowManager.styleRow(row,i)}))},Tabulator.prototype.registerModule("frozenRows",FrozenRows);var GroupComponent=function GroupComponent(group){this._group=group,this.type="GroupComponent"};GroupComponent.prototype.getKey=function(){return this._group.key},GroupComponent.prototype.getField=function(){return this._group.field},GroupComponent.prototype.getElement=function(){return this._group.element},GroupComponent.prototype.getRows=function(){return this._group.getRows(!0)},GroupComponent.prototype.getSubGroups=function(){return this._group.getSubGroups(!0)},GroupComponent.prototype.getParentGroup=function(){return!!this._group.parent&&this._group.parent.getComponent()},GroupComponent.prototype.getVisibility=function(){return console.warn("getVisibility function is deprecated, you should now use the isVisible function"),this._group.visible},GroupComponent.prototype.isVisible=function(){return this._group.visible},GroupComponent.prototype.show=function(){this._group.show()},GroupComponent.prototype.hide=function(){this._group.hide()},GroupComponent.prototype.toggle=function(){this._group.toggleVisibility()},GroupComponent.prototype._getSelf=function(){return this._group},GroupComponent.prototype.getTable=function(){return this._group.groupManager.table};var Group=function Group(groupManager,parent,level,key,field,generator,oldGroup){this.groupManager=groupManager,this.parent=parent,this.key=key,this.level=level,this.field=field,this.hasSubGroups=level<groupManager.groupIDLookups.length-1,this.addRow=this.hasSubGroups?this._addRowToGroup:this._addRow,this.type="group",this.old=oldGroup,this.rows=[],this.groups=[],this.groupList=[],this.generator=generator,this.elementContents=!1,this.height=0,this.outerHeight=0,this.initialized=!1,this.calcs={},this.initialized=!1,this.modules={},this.arrowElement=!1,this.visible=oldGroup?oldGroup.visible:void 0!==groupManager.startOpen[level]?groupManager.startOpen[level]:groupManager.startOpen[0],this.component=null,this.createElements(),this.addBindings(),this.createValueGroups()};Group.prototype.wipe=function(){this.groupList.length?this.groupList.forEach((function(group){group.wipe()})):(this.element=!1,this.arrowElement=!1,this.elementContents=!1)},Group.prototype.createElements=function(){var arrow=document.createElement("div");arrow.classList.add("tabulator-arrow"),this.element=document.createElement("div"),this.element.classList.add("tabulator-row"),this.element.classList.add("tabulator-group"),this.element.classList.add("tabulator-group-level-"+this.level),this.element.setAttribute("role","rowgroup"),this.arrowElement=document.createElement("div"),this.arrowElement.classList.add("tabulator-group-toggle"),this.arrowElement.appendChild(arrow),!1!==this.groupManager.table.options.movableRows&&this.groupManager.table.modExists("moveRow")&&this.groupManager.table.modules.moveRow.initializeGroupHeader(this)},Group.prototype.createValueGroups=function(){var _this58=this,level=this.level+1;this.groupManager.allowedValues&&this.groupManager.allowedValues[level]&&this.groupManager.allowedValues[level].forEach((function(value){_this58._createGroup(value,level)}))},Group.prototype.addBindings=function(){var self=this,dblTap,tapHold,tap,toggleElement;self.groupManager.table.options.groupClick&&self.element.addEventListener("click",(function(e){self.groupManager.table.options.groupClick.call(self.groupManager.table,e,self.getComponent())})),self.groupManager.table.options.groupDblClick&&self.element.addEventListener("dblclick",(function(e){self.groupManager.table.options.groupDblClick.call(self.groupManager.table,e,self.getComponent())})),self.groupManager.table.options.groupContext&&self.element.addEventListener("contextmenu",(function(e){self.groupManager.table.options.groupContext.call(self.groupManager.table,e,self.getComponent())})),self.groupManager.table.options.groupContextMenu&&self.groupManager.table.modExists("menu")&&self.groupManager.table.modules.menu.initializeGroup.call(self.groupManager.table.modules.menu,self),self.groupManager.table.options.groupTap&&(tap=!1,self.element.addEventListener("touchstart",(function(e){tap=!0}),{passive:!0}),self.element.addEventListener("touchend",(function(e){tap&&self.groupManager.table.options.groupTap(e,self.getComponent()),tap=!1}))),self.groupManager.table.options.groupDblTap&&(dblTap=null,self.element.addEventListener("touchend",(function(e){dblTap?(clearTimeout(dblTap),dblTap=null,self.groupManager.table.options.groupDblTap(e,self.getComponent())):dblTap=setTimeout((function(){clearTimeout(dblTap),dblTap=null}),300)}))),self.groupManager.table.options.groupTapHold&&(tapHold=null,self.element.addEventListener("touchstart",(function(e){clearTimeout(tapHold),tapHold=setTimeout((function(){clearTimeout(tapHold),tapHold=null,tap=!1,self.groupManager.table.options.groupTapHold(e,self.getComponent())}),1e3)}),{passive:!0}),self.element.addEventListener("touchend",(function(e){clearTimeout(tapHold),tapHold=null}))),self.groupManager.table.options.groupToggleElement&&(toggleElement="arrow"==self.groupManager.table.options.groupToggleElement?self.arrowElement:self.element).addEventListener("click",(function(e){e.stopPropagation(),e.stopImmediatePropagation(),self.toggleVisibility()}))},Group.prototype._createGroup=function(groupID,level){var groupKey=level+"_"+groupID,group=new Group(this.groupManager,this,level,groupID,this.groupManager.groupIDLookups[level].field,this.groupManager.headerGenerator[level]||this.groupManager.headerGenerator[0],!!this.old&&this.old.groups[groupKey]);this.groups[groupKey]=group,this.groupList.push(group)},Group.prototype._addRowToGroup=function(row){var level=this.level+1;if(this.hasSubGroups){var groupID=this.groupManager.groupIDLookups[level].func(row.getData()),groupKey=level+"_"+groupID;this.groupManager.allowedValues&&this.groupManager.allowedValues[level]?this.groups[groupKey]&&this.groups[groupKey].addRow(row):(this.groups[groupKey]||this._createGroup(groupID,level),this.groups[groupKey].addRow(row))}},Group.prototype._addRow=function(row){this.rows.push(row),row.modules.group=this},Group.prototype.insertRow=function(row,to,after){var data=this.conformRowData({});row.updateData(data);var toIndex=this.rows.indexOf(to);toIndex>-1?after?this.rows.splice(toIndex+1,0,row):this.rows.splice(toIndex,0,row):after?this.rows.push(row):this.rows.unshift(row),row.modules.group=this,this.generateGroupHeaderContents(),this.groupManager.table.modExists("columnCalcs")&&"table"!=this.groupManager.table.options.columnCalcs&&this.groupManager.table.modules.columnCalcs.recalcGroup(this),this.groupManager.updateGroupRows(!0)},Group.prototype.scrollHeader=function(left){this.arrowElement.style.marginLeft=left,this.groupList.forEach((function(child){child.scrollHeader(left)}))},Group.prototype.getRowIndex=function(row){},Group.prototype.conformRowData=function(data){return this.field?data[this.field]=this.key:console.warn("Data Conforming Error - Cannot conform row data to match new group as groupBy is a function"),this.parent&&(data=this.parent.conformRowData(data)),data},Group.prototype.removeRow=function(row){var index=this.rows.indexOf(row),el=row.getElement();index>-1&&this.rows.splice(index,1),this.groupManager.table.options.groupValues||this.rows.length?(el.parentNode&&el.parentNode.removeChild(el),this.generateGroupHeaderContents(),this.groupManager.table.modExists("columnCalcs")&&"table"!=this.groupManager.table.options.columnCalcs&&this.groupManager.table.modules.columnCalcs.recalcGroup(this)):(this.parent?this.parent.removeGroup(this):this.groupManager.removeGroup(this),this.groupManager.updateGroupRows(!0))},Group.prototype.removeGroup=function(group){var groupKey=group.level+"_"+group.key,index;this.groups[groupKey]&&(delete this.groups[groupKey],(index=this.groupList.indexOf(group))>-1&&this.groupList.splice(index,1),this.groupList.length||(this.parent?this.parent.removeGroup(this):this.groupManager.removeGroup(this)))},Group.prototype.getHeadersAndRows=function(noCalc){var output=[];return output.push(this),this._visSet(),this.visible?this.groupList.length?this.groupList.forEach((function(group){output=output.concat(group.getHeadersAndRows(noCalc))})):(!noCalc&&"table"!=this.groupManager.table.options.columnCalcs&&this.groupManager.table.modExists("columnCalcs")&&this.groupManager.table.modules.columnCalcs.hasTopCalcs()&&(this.calcs.top&&(this.calcs.top.detachElement(),this.calcs.top.deleteCells()),this.calcs.top=this.groupManager.table.modules.columnCalcs.generateTopRow(this.rows),output.push(this.calcs.top)),output=output.concat(this.rows),!noCalc&&"table"!=this.groupManager.table.options.columnCalcs&&this.groupManager.table.modExists("columnCalcs")&&this.groupManager.table.modules.columnCalcs.hasBottomCalcs()&&(this.calcs.bottom&&(this.calcs.bottom.detachElement(),this.calcs.bottom.deleteCells()),this.calcs.bottom=this.groupManager.table.modules.columnCalcs.generateBottomRow(this.rows),output.push(this.calcs.bottom))):this.groupList.length||"table"==this.groupManager.table.options.columnCalcs||this.groupManager.table.modExists("columnCalcs")&&(!noCalc&&this.groupManager.table.modules.columnCalcs.hasTopCalcs()&&(this.calcs.top&&(this.calcs.top.detachElement(),this.calcs.top.deleteCells()),this.groupManager.table.options.groupClosedShowCalcs&&(this.calcs.top=this.groupManager.table.modules.columnCalcs.generateTopRow(this.rows),output.push(this.calcs.top))),!noCalc&&this.groupManager.table.modules.columnCalcs.hasBottomCalcs()&&(this.calcs.bottom&&(this.calcs.bottom.detachElement(),this.calcs.bottom.deleteCells()),this.groupManager.table.options.groupClosedShowCalcs&&(this.calcs.bottom=this.groupManager.table.modules.columnCalcs.generateBottomRow(this.rows),output.push(this.calcs.bottom)))),output},Group.prototype.getData=function(visible,transform){var self=this,output=[];return this._visSet(),(!visible||visible&&this.visible)&&this.rows.forEach((function(row){output.push(row.getData(transform||"data"))})),output},Group.prototype.getRowCount=function(){var count=0;return this.groupList.length?this.groupList.forEach((function(group){count+=group.getRowCount()})):count=this.rows.length,count},Group.prototype.toggleVisibility=function(){this.visible?this.hide():this.show()},Group.prototype.hide=function(){this.visible=!1,"classic"!=this.groupManager.table.rowManager.getRenderMode()||this.groupManager.table.options.pagination?this.groupManager.updateGroupRows(!0):(this.element.classList.remove("tabulator-group-visible"),this.groupList.length?this.groupList.forEach((function(group){var rows;group.getHeadersAndRows().forEach((function(row){row.detachElement()}))})):this.rows.forEach((function(row){var rowEl=row.getElement();rowEl.parentNode.removeChild(rowEl)})),this.groupManager.table.rowManager.setDisplayRows(this.groupManager.updateGroupRows(),this.groupManager.getDisplayIndex()),this.groupManager.table.rowManager.checkClassicModeGroupHeaderWidth()),this.groupManager.table.options.groupVisibilityChanged.call(this.table,this.getComponent(),!1)},Group.prototype.show=function(){var self=this;if(this.visible=!0,"classic"!=this.groupManager.table.rowManager.getRenderMode()||this.groupManager.table.options.pagination)this.groupManager.updateGroupRows(!0);else{this.element.classList.add("tabulator-group-visible");var prev=this.getElement();this.groupList.length?this.groupList.forEach((function(group){var rows;group.getHeadersAndRows().forEach((function(row){var rowEl=row.getElement();prev.parentNode.insertBefore(rowEl,prev.nextSibling),row.initialize(),prev=rowEl}))})):this.rows.forEach((function(row){var rowEl=row.getElement();prev.parentNode.insertBefore(rowEl,prev.nextSibling),row.initialize(),prev=rowEl})),this.groupManager.table.rowManager.setDisplayRows(this.groupManager.updateGroupRows(),this.groupManager.getDisplayIndex()),this.groupManager.table.rowManager.checkClassicModeGroupHeaderWidth()}this.groupManager.table.options.groupVisibilityChanged.call(this.table,this.getComponent(),!0)},Group.prototype._visSet=function(){var data=[];"function"==typeof this.visible&&(this.rows.forEach((function(row){data.push(row.getData())})),this.visible=this.visible(this.key,this.getRowCount(),data,this.getComponent()))},Group.prototype.getRowGroup=function(row){var match=!1;return this.groupList.length?this.groupList.forEach((function(group){var result=group.getRowGroup(row);result&&(match=result)})):this.rows.find((function(item){return item===row}))&&(match=this),match},Group.prototype.getSubGroups=function(component){var output=[];return this.groupList.forEach((function(child){output.push(component?child.getComponent():child)})),output},Group.prototype.getRows=function(compoment){var output=[];return this.rows.forEach((function(row){output.push(compoment?row.getComponent():row)})),output},Group.prototype.generateGroupHeaderContents=function(){var data=[];for(this.rows.forEach((function(row){data.push(row.getData())})),this.elementContents=this.generator(this.key,this.getRowCount(),data,this.getComponent());this.element.firstChild;)this.element.removeChild(this.element.firstChild);"string"==typeof this.elementContents?this.element.innerHTML=this.elementContents:this.element.appendChild(this.elementContents),this.element.insertBefore(this.arrowElement,this.element.firstChild)},Group.prototype.getElement=function(){this.addBindingsd=!1,this._visSet(),this.visible?this.element.classList.add("tabulator-group-visible"):this.element.classList.remove("tabulator-group-visible");for(var i=0;i<this.element.childNodes.length;++i)this.element.childNodes[i].parentNode.removeChild(this.element.childNodes[i]);return this.generateGroupHeaderContents(),this.element},Group.prototype.detachElement=function(){this.element&&this.element.parentNode&&this.element.parentNode.removeChild(this.element)},Group.prototype.normalizeHeight=function(){this.setHeight(this.element.clientHeight)},Group.prototype.initialize=function(force){this.initialized&&!force||(this.normalizeHeight(),this.initialized=!0)},Group.prototype.reinitialize=function(){this.initialized=!1,this.height=0,Tabulator.prototype.helpers.elVisible(this.element)&&this.initialize(!0)},Group.prototype.setHeight=function(height){this.height!=height&&(this.height=height,this.outerHeight=this.element.offsetHeight)},Group.prototype.getHeight=function(){return this.outerHeight},Group.prototype.getGroup=function(){return this},Group.prototype.reinitializeHeight=function(){},Group.prototype.calcHeight=function(){},Group.prototype.setCellHeight=function(){},Group.prototype.clearCellHeight=function(){},Group.prototype.getComponent=function(){return this.component||(this.component=new GroupComponent(this)),this.component};var GroupRows=function GroupRows(table){this.table=table,this.groupIDLookups=!1,this.startOpen=[function(){return!1}],this.headerGenerator=[function(){return""}],this.groupList=[],this.allowedValues=!1,this.groups={},this.displayIndex=0};GroupRows.prototype.initialize=function(){var self=this,groupBy=self.table.options.groupBy,startOpen=self.table.options.groupStartOpen,groupHeader=self.table.options.groupHeader,cols;(this.allowedValues=self.table.options.groupValues,Array.isArray(groupBy)&&Array.isArray(groupHeader)&&groupBy.length>groupHeader.length&&console.warn("Error creating group headers, groupHeader array is shorter than groupBy array"),self.headerGenerator=[function(){return""}],this.startOpen=[function(){return!1}],self.table.modules.localize.bind("groups|item",(function(langValue,lang){self.headerGenerator[0]=function(value,count,data){return(void 0===value?"":value)+"<span>("+count+" "+(1===count?langValue:lang.groups.items)+")</span>"}})),this.groupIDLookups=[],Array.isArray(groupBy)||groupBy)?this.table.modExists("columnCalcs")&&"table"!=this.table.options.columnCalcs&&"both"!=this.table.options.columnCalcs&&this.table.modules.columnCalcs.removeCalcs():this.table.modExists("columnCalcs")&&"group"!=this.table.options.columnCalcs&&this.table.columnManager.getRealColumns().forEach((function(col){col.definition.topCalc&&self.table.modules.columnCalcs.initializeTopRow(),col.definition.bottomCalc&&self.table.modules.columnCalcs.initializeBottomRow()}));Array.isArray(groupBy)||(groupBy=[groupBy]),groupBy.forEach((function(group,i){var lookupFunc,column;lookupFunc="function"==typeof group?group:(column=self.table.columnManager.getColumnByField(group))?function lookupFunc(data){return column.getFieldValue(data)}:function lookupFunc(data){return data[group]},self.groupIDLookups.push({field:"function"!=typeof group&&group,func:lookupFunc,values:!!self.allowedValues&&self.allowedValues[i]})})),startOpen&&(Array.isArray(startOpen)||(startOpen=[startOpen]),startOpen.forEach((function(level){level="function"==typeof level?level:function(){return!0}})),self.startOpen=startOpen),groupHeader&&(self.headerGenerator=Array.isArray(groupHeader)?groupHeader:[groupHeader]),this.initialized=!0},GroupRows.prototype.setDisplayIndex=function(index){this.displayIndex=index},GroupRows.prototype.getDisplayIndex=function(){return this.displayIndex},GroupRows.prototype.getRows=function(rows){return this.groupIDLookups.length?(this.table.options.dataGrouping.call(this.table),this.generateGroups(rows),this.table.options.dataGrouped&&this.table.options.dataGrouped.call(this.table,this.getGroups(!0)),this.updateGroupRows()):rows.slice(0)},GroupRows.prototype.getGroups=function(compoment){var groupComponents=[];return this.groupList.forEach((function(group){groupComponents.push(compoment?group.getComponent():group)})),groupComponents},GroupRows.prototype.getChildGroups=function(group){var _this59=this,groupComponents=[];return group||(group=this),group.groupList.forEach((function(child){child.groupList.length?groupComponents=groupComponents.concat(_this59.getChildGroups(child)):groupComponents.push(child)})),groupComponents},GroupRows.prototype.wipe=function(){this.groupList.forEach((function(group){group.wipe()}))},GroupRows.prototype.pullGroupListData=function(groupList){var self=this,groupListData=[];return groupList.forEach((function(group){var groupHeader={level:0,rowCount:0,headerContent:""},childData=[];group.hasSubGroups?(childData=self.pullGroupListData(group.groupList),groupHeader.level=group.level,groupHeader.rowCount=childData.length-group.groupList.length,groupHeader.headerContent=group.generator(group.key,groupHeader.rowCount,group.rows,group),groupListData.push(groupHeader),groupListData=groupListData.concat(childData)):(groupHeader.level=group.level,groupHeader.headerContent=group.generator(group.key,group.rows.length,group.rows,group),groupHeader.rowCount=group.getRows().length,groupListData.push(groupHeader),group.getRows().forEach((function(row){groupListData.push(row.getData("data"))})))})),groupListData},GroupRows.prototype.getGroupedData=function(){return this.pullGroupListData(this.groupList)},GroupRows.prototype.getRowGroup=function(row){var match=!1;return this.groupList.forEach((function(group){var result=group.getRowGroup(row);result&&(match=result)})),match},GroupRows.prototype.countGroups=function(){return this.groupList.length},GroupRows.prototype.generateGroups=function(rows){var self=this,oldGroups=self.groups;self.groups={},self.groupList=[],this.allowedValues&&this.allowedValues[0]?(this.allowedValues[0].forEach((function(value){self.createGroup(value,0,oldGroups)})),rows.forEach((function(row){self.assignRowToExistingGroup(row,oldGroups)}))):rows.forEach((function(row){self.assignRowToGroup(row,oldGroups)}))},GroupRows.prototype.createGroup=function(groupID,level,oldGroups){var groupKey=level+"_"+groupID,group;oldGroups=oldGroups||[],group=new Group(this,!1,level,groupID,this.groupIDLookups[0].field,this.headerGenerator[0],oldGroups[groupKey]),this.groups[groupKey]=group,this.groupList.push(group)},GroupRows.prototype.assignRowToExistingGroup=function(row,oldGroups){var groupID,groupKey="0_"+this.groupIDLookups[0].func(row.getData());this.groups[groupKey]&&this.groups[groupKey].addRow(row)},GroupRows.prototype.assignRowToGroup=function(row,oldGroups){var groupID=this.groupIDLookups[0].func(row.getData()),newGroupNeeded=!this.groups["0_"+groupID];return newGroupNeeded&&this.createGroup(groupID,0,oldGroups),this.groups["0_"+groupID].addRow(row),!newGroupNeeded},GroupRows.prototype.updateGroupRows=function(force){var self=this,output=[],oldRowCount;if(this.groupList.forEach((function(group){output=output.concat(group.getHeadersAndRows())})),force){var displayIndex=this.table.rowManager.setDisplayRows(output,this.getDisplayIndex());!0!==displayIndex&&this.setDisplayIndex(displayIndex),this.table.rowManager.refreshActiveData("group",!0,!0)}return output},GroupRows.prototype.scrollHeaders=function(left){left+="px",this.groupList.forEach((function(group){group.scrollHeader(left)}))},GroupRows.prototype.removeGroup=function(group){var groupKey=group.level+"_"+group.key,index;this.groups[groupKey]&&(delete this.groups[groupKey],(index=this.groupList.indexOf(group))>-1&&this.groupList.splice(index,1))},Tabulator.prototype.registerModule("groupRows",GroupRows);var History=function History(table){this.table=table,this.history=[],this.index=-1};History.prototype.clear=function(){this.history=[],this.index=-1},History.prototype.action=function(type,component,data){this.history=this.history.slice(0,this.index+1),this.history.push({type:type,component:component,data:data}),this.index++},History.prototype.getHistoryUndoSize=function(){return this.index+1},History.prototype.getHistoryRedoSize=function(){return this.history.length-(this.index+1)},History.prototype.undo=function(){if(this.index>-1){var action=this.history[this.index];return this.undoers[action.type].call(this,action),this.index--,this.table.options.historyUndo.call(this.table,action.type,action.component.getComponent(),action.data),!0}return console.warn("History Undo Error - No more history to undo"),!1},History.prototype.redo=function(){if(this.history.length-1>this.index){this.index++;var action=this.history[this.index];return this.redoers[action.type].call(this,action),this.table.options.historyRedo.call(this.table,action.type,action.component.getComponent(),action.data),!0}return console.warn("History Redo Error - No more history to redo"),!1},History.prototype.undoers={cellEdit:function cellEdit(action){action.component.setValueProcessData(action.data.oldValue)},rowAdd:function rowAdd(action){action.component.deleteActual()},rowDelete:function rowDelete(action){var newRow=this.table.rowManager.addRowActual(action.data.data,action.data.pos,action.data.index);this.table.options.groupBy&&this.table.modExists("groupRows")&&this.table.modules.groupRows.updateGroupRows(!0),this._rebindRow(action.component,newRow)},rowMove:function rowMove(action){this.table.rowManager.moveRowActual(action.component,this.table.rowManager.rows[action.data.posFrom],!action.data.after),this.table.rowManager.redraw()}},History.prototype.redoers={cellEdit:function cellEdit(action){action.component.setValueProcessData(action.data.newValue)},rowAdd:function rowAdd(action){var newRow=this.table.rowManager.addRowActual(action.data.data,action.data.pos,action.data.index);this.table.options.groupBy&&this.table.modExists("groupRows")&&this.table.modules.groupRows.updateGroupRows(!0),this._rebindRow(action.component,newRow)},rowDelete:function rowDelete(action){action.component.deleteActual()},rowMove:function rowMove(action){this.table.rowManager.moveRowActual(action.component,this.table.rowManager.rows[action.data.posTo],action.data.after),this.table.rowManager.redraw()}},History.prototype._rebindRow=function(oldRow,newRow){this.history.forEach((function(action){if(action.component instanceof Row)action.component===oldRow&&(action.component=newRow);else if(action.component instanceof Cell&&action.component.row===oldRow){var field=action.component.column.getField();field&&(action.component=newRow.getCell(field))}}))},Tabulator.prototype.registerModule("history",History);var HtmlTableImport=function HtmlTableImport(table){this.table=table,this.fieldIndex=[],this.hasIndex=!1};HtmlTableImport.prototype.parseTable=function(){var self=this,element=this.table.element,options=this.table.options,columns=options.columns,headers=element.getElementsByTagName("th"),rows=element.getElementsByTagName("tbody")[0],data=[],newTable;this.hasIndex=!1,this.table.options.htmlImporting.call(this.table),rows=rows?rows.getElementsByTagName("tr"):[],this._extractOptions(element,options),headers.length?this._extractHeaders(headers,rows):this._generateBlankHeaders(headers,rows);for(var index=0;index<rows.length;index++){var row,cells=rows[index].getElementsByTagName("td"),item={};this.hasIndex||(item[options.index]=index);for(var i=0;i<cells.length;i++){var cell=cells[i];void 0!==this.fieldIndex[i]&&(item[this.fieldIndex[i]]=cell.innerHTML)}data.push(item)}var newElement=document.createElement("div"),attributes=element.attributes;for(var i in attributes)"object"==_typeof(attributes[i])&&newElement.setAttribute(attributes[i].name,attributes[i].value);element.parentNode.replaceChild(newElement,element),options.data=data,this.table.options.htmlImported.call(this.table),this.table.element=newElement},HtmlTableImport.prototype._extractOptions=function(element,options,defaultOptions){var attributes=element.attributes,optionsArr=defaultOptions?Object.assign([],defaultOptions):Object.keys(options),optionsList={};for(var index in optionsArr.forEach((function(item){optionsList[item.toLowerCase()]=item})),attributes){var attrib=attributes[index],name;attrib&&"object"==(void 0===attrib?"undefined":_typeof(attrib))&&attrib.name&&0===attrib.name.indexOf("tabulator-")&&(name=attrib.name.replace("tabulator-",""),void 0!==optionsList[name]&&(options[optionsList[name]]=this._attribValue(attrib.value)))}},HtmlTableImport.prototype._attribValue=function(value){return"true"===value||"false"!==value&&value},HtmlTableImport.prototype._findCol=function(title){var match;return this.table.options.columns.find((function(column){return column.title===title}))||!1},HtmlTableImport.prototype._extractHeaders=function(headers,rows){for(var index=0;index<headers.length;index++){var header=headers[index],exists=!1,col=this._findCol(header.textContent),width,attributes;col?exists=!0:col={title:header.textContent.trim()},col.field||(col.field=header.textContent.trim().toLowerCase().replace(" ","_")),(width=header.getAttribute("width"))&&!col.width&&(col.width=width),attributes=header.attributes,this._extractOptions(header,col,Column.prototype.defaultOptionList),this.fieldIndex[index]=col.field,col.field==this.table.options.index&&(this.hasIndex=!0),exists||this.table.options.columns.push(col)}},HtmlTableImport.prototype._generateBlankHeaders=function(headers,rows){for(var index=0;index<headers.length;index++){var header=headers[index],col={title:"",field:"col"+index};this.fieldIndex[index]=col.field;var width=header.getAttribute("width");width&&(col.width=width),this.table.options.columns.push(col)}},Tabulator.prototype.registerModule("htmlTableImport",HtmlTableImport);var Keybindings=function Keybindings(table){this.table=table,this.watchKeys=null,this.pressedKeys=null,this.keyupBinding=!1,this.keydownBinding=!1};Keybindings.prototype.initialize=function(){var bindings=this.table.options.keybindings,mergedBindings={};if(this.watchKeys={},this.pressedKeys=[],!1!==bindings){for(var key in this.bindings)mergedBindings[key]=this.bindings[key];if(Object.keys(bindings).length)for(var _key in bindings)mergedBindings[_key]=bindings[_key];this.mapBindings(mergedBindings),this.bindEvents()}},Keybindings.prototype.mapBindings=function(bindings){var _this60=this,self=this,_loop2=function _loop2(key){_this60.actions[key]?bindings[key]&&("object"!==_typeof(bindings[key])&&(bindings[key]=[bindings[key]]),bindings[key].forEach((function(binding){self.mapBinding(key,binding)}))):console.warn("Key Binding Error - no such action:",key)};for(var key in bindings)_loop2(key)},Keybindings.prototype.mapBinding=function(action,symbolsList){var self=this,binding={action:this.actions[action],keys:[],ctrl:!1,shift:!1,meta:!1},symbols;symbolsList.toString().toLowerCase().split(" ").join("").split("+").forEach((function(symbol){switch(symbol){case"ctrl":binding.ctrl=!0;break;case"shift":binding.shift=!0;break;case"meta":binding.meta=!0;break;default:symbol=parseInt(symbol),binding.keys.push(symbol),self.watchKeys[symbol]||(self.watchKeys[symbol]=[]),self.watchKeys[symbol].push(binding)}}))},Keybindings.prototype.bindEvents=function(){var self=this;this.keyupBinding=function(e){var code=e.keyCode,bindings=self.watchKeys[code];bindings&&(self.pressedKeys.push(code),bindings.forEach((function(binding){self.checkBinding(e,binding)})))},this.keydownBinding=function(e){var code=e.keyCode,bindings;if(self.watchKeys[code]){var index=self.pressedKeys.indexOf(code);index>-1&&self.pressedKeys.splice(index,1)}},this.table.element.addEventListener("keydown",this.keyupBinding),this.table.element.addEventListener("keyup",this.keydownBinding)},Keybindings.prototype.clearBindings=function(){this.keyupBinding&&this.table.element.removeEventListener("keydown",this.keyupBinding),this.keydownBinding&&this.table.element.removeEventListener("keyup",this.keydownBinding)},Keybindings.prototype.checkBinding=function(e,binding){var self=this,match=!0;return e.ctrlKey==binding.ctrl&&e.shiftKey==binding.shift&&e.metaKey==binding.meta&&(binding.keys.forEach((function(key){var index;-1==self.pressedKeys.indexOf(key)&&(match=!1)})),match&&binding.action.call(self,e),!0)},Keybindings.prototype.bindings={navPrev:"shift + 9",navNext:9,navUp:38,navDown:40,scrollPageUp:33,scrollPageDown:34,scrollToStart:36,scrollToEnd:35,undo:"ctrl + 90",redo:"ctrl + 89",copyToClipboard:"ctrl + 67"},Keybindings.prototype.actions={keyBlock:function keyBlock(e){e.stopPropagation(),e.preventDefault()},scrollPageUp:function scrollPageUp(e){var rowManager=this.table.rowManager,newPos=rowManager.scrollTop-rowManager.height,scrollMax=rowManager.element.scrollHeight;e.preventDefault(),rowManager.displayRowsCount&&(newPos>=0?rowManager.element.scrollTop=newPos:rowManager.scrollToRow(rowManager.getDisplayRows()[0])),this.table.element.focus()},scrollPageDown:function scrollPageDown(e){var rowManager=this.table.rowManager,newPos=rowManager.scrollTop+rowManager.height,scrollMax=rowManager.element.scrollHeight;e.preventDefault(),rowManager.displayRowsCount&&(newPos<=scrollMax?rowManager.element.scrollTop=newPos:rowManager.scrollToRow(rowManager.getDisplayRows()[rowManager.displayRowsCount-1])),this.table.element.focus()},scrollToStart:function scrollToStart(e){var rowManager=this.table.rowManager;e.preventDefault(),rowManager.displayRowsCount&&rowManager.scrollToRow(rowManager.getDisplayRows()[0]),this.table.element.focus()},scrollToEnd:function scrollToEnd(e){var rowManager=this.table.rowManager;e.preventDefault(),rowManager.displayRowsCount&&rowManager.scrollToRow(rowManager.getDisplayRows()[rowManager.displayRowsCount-1]),this.table.element.focus()},navPrev:function navPrev(e){var cell=!1;this.table.modExists("edit")&&(cell=this.table.modules.edit.currentCell)&&(e.preventDefault(),cell.nav().prev())},navNext:function navNext(e){var cell=!1,newRow=this.table.options.tabEndNewRow,nav;this.table.modExists("edit")&&(cell=this.table.modules.edit.currentCell)&&(e.preventDefault(),(nav=cell.nav()).next()||newRow&&(cell.getElement().firstChild.blur(),(newRow=!0===newRow?this.table.addRow({}):"function"==typeof newRow?this.table.addRow(newRow(cell.row.getComponent())):this.table.addRow(Object.assign({},newRow))).then((function(){setTimeout((function(){nav.next()}))}))))},navLeft:function navLeft(e){var cell=!1;this.table.modExists("edit")&&(cell=this.table.modules.edit.currentCell)&&(e.preventDefault(),cell.nav().left())},navRight:function navRight(e){var cell=!1;this.table.modExists("edit")&&(cell=this.table.modules.edit.currentCell)&&(e.preventDefault(),cell.nav().right())},navUp:function navUp(e){var cell=!1;this.table.modExists("edit")&&(cell=this.table.modules.edit.currentCell)&&(e.preventDefault(),cell.nav().up())},navDown:function navDown(e){var cell=!1;this.table.modExists("edit")&&(cell=this.table.modules.edit.currentCell)&&(e.preventDefault(),cell.nav().down())},undo:function undo(e){var cell=!1;this.table.options.history&&this.table.modExists("history")&&this.table.modExists("edit")&&((cell=this.table.modules.edit.currentCell)||(e.preventDefault(),this.table.modules.history.undo()))},redo:function redo(e){var cell=!1;this.table.options.history&&this.table.modExists("history")&&this.table.modExists("edit")&&((cell=this.table.modules.edit.currentCell)||(e.preventDefault(),this.table.modules.history.redo()))},copyToClipboard:function copyToClipboard(e){this.table.modules.edit.currentCell||this.table.modExists("clipboard",!0)&&this.table.modules.clipboard.copy(!1,!0)}},Tabulator.prototype.registerModule("keybindings",Keybindings);var Menu=function Menu(table){this.table=table,this.menuEl=!1,this.blurEvent=this.hideMenu.bind(this),this.escEvent=this.escMenu.bind(this),this.nestedMenuBlock=!1};Menu.prototype.initializeColumnHeader=function(column){var _this61=this,headerMenuEl;column.definition.headerContextMenu&&column.getElement().addEventListener("contextmenu",(function(e){var menu="function"==typeof column.definition.headerContextMenu?column.definition.headerContextMenu(column.getComponent()):column.definition.headerContextMenu;e.preventDefault(),_this61.loadMenu(e,column,menu)})),column.definition.headerMenu&&((headerMenuEl=document.createElement("span")).classList.add("tabulator-header-menu-button"),headerMenuEl.innerHTML="&vellip;",headerMenuEl.addEventListener("click",(function(e){var menu="function"==typeof column.definition.headerMenu?column.definition.headerMenu(column.getComponent()):column.definition.headerMenu;e.stopPropagation(),e.preventDefault(),_this61.loadMenu(e,column,menu)})),column.titleElement.insertBefore(headerMenuEl,column.titleElement.firstChild))},Menu.prototype.initializeCell=function(cell){var _this62=this;cell.getElement().addEventListener("contextmenu",(function(e){var menu="function"==typeof cell.column.definition.contextMenu?cell.column.definition.contextMenu(cell.getComponent()):cell.column.definition.contextMenu;e.stopImmediatePropagation(),_this62.loadMenu(e,cell,menu)}))},Menu.prototype.initializeRow=function(row){var _this63=this;row.getElement().addEventListener("contextmenu",(function(e){var menu="function"==typeof _this63.table.options.rowContextMenu?_this63.table.options.rowContextMenu(row.getComponent()):_this63.table.options.rowContextMenu;_this63.loadMenu(e,row,menu)}))},Menu.prototype.initializeGroup=function(group){var _this64=this;group.getElement().addEventListener("contextmenu",(function(e){var menu="function"==typeof _this64.table.options.groupContextMenu?_this64.table.options.groupContextMenu(group.getComponent()):_this64.table.options.groupContextMenu;_this64.loadMenu(e,group,menu)}))},Menu.prototype.loadMenu=function(e,component,menu){var _this65=this,docHeight=Math.max(document.body.offsetHeight,window.innerHeight);if(e.preventDefault(),menu&&menu.length){if(this.nestedMenuBlock){if(this.isOpen())return}else this.nestedMenuBlock=setTimeout((function(){_this65.nestedMenuBlock=!1}),100);this.hideMenu(),this.menuEl=document.createElement("div"),this.menuEl.classList.add("tabulator-menu"),menu.forEach((function(item){var itemEl=document.createElement("div"),label=item.label,disabled=item.disabled;item.separator?itemEl.classList.add("tabulator-menu-separator"):(itemEl.classList.add("tabulator-menu-item"),"function"==typeof label&&(label=label(component.getComponent())),label instanceof Node?itemEl.appendChild(label):itemEl.innerHTML=label,"function"==typeof disabled&&(disabled=disabled(component.getComponent())),disabled?(itemEl.classList.add("tabulator-menu-item-disabled"),itemEl.addEventListener("click",(function(e){e.stopPropagation()}))):itemEl.addEventListener("click",(function(e){_this65.hideMenu(),item.action(e,component.getComponent())}))),_this65.menuEl.appendChild(itemEl)})),this.menuEl.style.top=e.pageY+"px",this.menuEl.style.left=e.pageX+"px",document.body.addEventListener("click",this.blurEvent),this.table.rowManager.element.addEventListener("scroll",this.blurEvent),setTimeout((function(){document.body.addEventListener("contextmenu",_this65.blurEvent)}),100),document.body.addEventListener("keydown",this.escEvent),document.body.appendChild(this.menuEl),e.pageX+this.menuEl.offsetWidth>=document.body.offsetWidth&&(this.menuEl.style.left="",this.menuEl.style.right=document.body.offsetWidth-e.pageX+"px"),e.pageY+this.menuEl.offsetHeight>=docHeight&&(this.menuEl.style.top="",this.menuEl.style.bottom=docHeight-e.pageY+"px")}},Menu.prototype.isOpen=function(){return!!this.menuEl.parentNode},Menu.prototype.escMenu=function(e){27==e.keyCode&&this.hideMenu()},Menu.prototype.hideMenu=function(){this.menuEl.parentNode&&this.menuEl.parentNode.removeChild(this.menuEl),this.escEvent&&document.body.removeEventListener("keydown",this.escEvent),this.blurEvent&&(document.body.removeEventListener("click",this.blurEvent),document.body.removeEventListener("contextmenu",this.blurEvent),this.table.rowManager.element.removeEventListener("scroll",this.blurEvent))},Menu.prototype.menus={},Tabulator.prototype.registerModule("menu",Menu);var MoveColumns=function MoveColumns(table){this.table=table,this.placeholderElement=this.createPlaceholderElement(),this.hoverElement=!1,this.checkTimeout=!1,this.checkPeriod=250,this.moving=!1,this.toCol=!1,this.toColAfter=!1,this.startX=0,this.autoScrollMargin=40,this.autoScrollStep=5,this.autoScrollTimeout=!1,this.touchMove=!1,this.moveHover=this.moveHover.bind(this),this.endMove=this.endMove.bind(this)};MoveColumns.prototype.createPlaceholderElement=function(){var el=document.createElement("div");return el.classList.add("tabulator-col"),el.classList.add("tabulator-col-placeholder"),el},MoveColumns.prototype.initializeColumn=function(column){var self=this,config={},colEl;column.modules.frozen||(colEl=column.getElement(),config.mousemove=function(e){column.parent===self.moving.parent&&((self.touchMove?e.touches[0].pageX:e.pageX)-Tabulator.prototype.helpers.elOffset(colEl).left+self.table.columnManager.element.scrollLeft>column.getWidth()/2?self.toCol===column&&self.toColAfter||(colEl.parentNode.insertBefore(self.placeholderElement,colEl.nextSibling),self.moveColumn(column,!0)):(self.toCol!==column||self.toColAfter)&&(colEl.parentNode.insertBefore(self.placeholderElement,colEl),self.moveColumn(column,!1)))}.bind(self),colEl.addEventListener("mousedown",(function(e){self.touchMove=!1,1===e.which&&(self.checkTimeout=setTimeout((function(){self.startMove(e,column)}),self.checkPeriod))})),colEl.addEventListener("mouseup",(function(e){1===e.which&&self.checkTimeout&&clearTimeout(self.checkTimeout)})),self.bindTouchEvents(column)),column.modules.moveColumn=config},MoveColumns.prototype.bindTouchEvents=function(column){var self=this,colEl=column.getElement(),startXMove=!1,dir=!1,currentCol,nextCol,prevCol,nextColWidth,prevColWidth,nextColWidthLast,prevColWidthLast;colEl.addEventListener("touchstart",(function(e){self.checkTimeout=setTimeout((function(){self.touchMove=!0,currentCol=column,nextCol=column.nextColumn(),nextColWidth=nextCol?nextCol.getWidth()/2:0,prevCol=column.prevColumn(),prevColWidth=prevCol?prevCol.getWidth()/2:0,nextColWidthLast=0,prevColWidthLast=0,startXMove=!1,self.startMove(e,column)}),self.checkPeriod)}),{passive:!0}),colEl.addEventListener("touchmove",(function(e){var halfCol,diff,moveToCol;self.moving&&(self.moveHover(e),startXMove||(startXMove=e.touches[0].pageX),(diff=e.touches[0].pageX-startXMove)>0?nextCol&&diff-nextColWidthLast>nextColWidth&&(moveToCol=nextCol)!==column&&(startXMove=e.touches[0].pageX,moveToCol.getElement().parentNode.insertBefore(self.placeholderElement,moveToCol.getElement().nextSibling),self.moveColumn(moveToCol,!0)):prevCol&&-diff-prevColWidthLast>prevColWidth&&(moveToCol=prevCol)!==column&&(startXMove=e.touches[0].pageX,moveToCol.getElement().parentNode.insertBefore(self.placeholderElement,moveToCol.getElement()),self.moveColumn(moveToCol,!1)),moveToCol&&(currentCol=moveToCol,nextCol=moveToCol.nextColumn(),nextColWidthLast=nextColWidth,nextColWidth=nextCol?nextCol.getWidth()/2:0,prevCol=moveToCol.prevColumn(),prevColWidthLast=prevColWidth,prevColWidth=prevCol?prevCol.getWidth()/2:0))}),{passive:!0}),colEl.addEventListener("touchend",(function(e){self.checkTimeout&&clearTimeout(self.checkTimeout),self.moving&&self.endMove(e)}))},MoveColumns.prototype.startMove=function(e,column){var element=column.getElement();this.moving=column,this.startX=(this.touchMove?e.touches[0].pageX:e.pageX)-Tabulator.prototype.helpers.elOffset(element).left,this.table.element.classList.add("tabulator-block-select"),this.placeholderElement.style.width=column.getWidth()+"px",this.placeholderElement.style.height=column.getHeight()+"px",element.parentNode.insertBefore(this.placeholderElement,element),element.parentNode.removeChild(element),this.hoverElement=element.cloneNode(!0),this.hoverElement.classList.add("tabulator-moving"),this.table.columnManager.getElement().appendChild(this.hoverElement),this.hoverElement.style.left="0",this.hoverElement.style.bottom="0",this.touchMove||(this._bindMouseMove(),document.body.addEventListener("mousemove",this.moveHover),document.body.addEventListener("mouseup",this.endMove)),this.moveHover(e)},MoveColumns.prototype._bindMouseMove=function(){this.table.columnManager.columnsByIndex.forEach((function(column){column.modules.moveColumn.mousemove&&column.getElement().addEventListener("mousemove",column.modules.moveColumn.mousemove)}))},MoveColumns.prototype._unbindMouseMove=function(){this.table.columnManager.columnsByIndex.forEach((function(column){column.modules.moveColumn.mousemove&&column.getElement().removeEventListener("mousemove",column.modules.moveColumn.mousemove)}))},MoveColumns.prototype.moveColumn=function(column,after){var movingCells=this.moving.getCells();this.toCol=column,this.toColAfter=after,after?column.getCells().forEach((function(cell,i){var cellEl=cell.getElement();cellEl.parentNode.insertBefore(movingCells[i].getElement(),cellEl.nextSibling)})):column.getCells().forEach((function(cell,i){var cellEl=cell.getElement();cellEl.parentNode.insertBefore(movingCells[i].getElement(),cellEl)}))},MoveColumns.prototype.endMove=function(e){(1===e.which||this.touchMove)&&(this._unbindMouseMove(),this.placeholderElement.parentNode.insertBefore(this.moving.getElement(),this.placeholderElement.nextSibling),this.placeholderElement.parentNode.removeChild(this.placeholderElement),this.hoverElement.parentNode.removeChild(this.hoverElement),this.table.element.classList.remove("tabulator-block-select"),this.toCol&&this.table.columnManager.moveColumnActual(this.moving,this.toCol,this.toColAfter),this.moving=!1,this.toCol=!1,this.toColAfter=!1,this.touchMove||(document.body.removeEventListener("mousemove",this.moveHover),document.body.removeEventListener("mouseup",this.endMove)))},MoveColumns.prototype.moveHover=function(e){var self=this,columnHolder=self.table.columnManager.getElement(),scrollLeft=columnHolder.scrollLeft,xPos=(self.touchMove?e.touches[0].pageX:e.pageX)-Tabulator.prototype.helpers.elOffset(columnHolder).left+scrollLeft,scrollPos;self.hoverElement.style.left=xPos-self.startX+"px",xPos-scrollLeft<self.autoScrollMargin&&(self.autoScrollTimeout||(self.autoScrollTimeout=setTimeout((function(){scrollPos=Math.max(0,scrollLeft-5),self.table.rowManager.getElement().scrollLeft=scrollPos,self.autoScrollTimeout=!1}),1))),scrollLeft+columnHolder.clientWidth-xPos<self.autoScrollMargin&&(self.autoScrollTimeout||(self.autoScrollTimeout=setTimeout((function(){scrollPos=Math.min(columnHolder.clientWidth,scrollLeft+5),self.table.rowManager.getElement().scrollLeft=scrollPos,self.autoScrollTimeout=!1}),1)))},Tabulator.prototype.registerModule("moveColumn",MoveColumns);var MoveRows=function MoveRows(table){this.table=table,this.placeholderElement=this.createPlaceholderElement(),this.hoverElement=!1,this.checkTimeout=!1,this.checkPeriod=150,this.moving=!1,this.toRow=!1,this.toRowAfter=!1,this.hasHandle=!1,this.startY=0,this.startX=0,this.moveHover=this.moveHover.bind(this),this.endMove=this.endMove.bind(this),this.tableRowDropEvent=!1,this.touchMove=!1,this.connection=!1,this.connectionSelectorsTables=!1,this.connectionSelectorsElements=!1,this.connectionElements=[],this.connections=[],this.connectedTable=!1,this.connectedRow=!1};MoveRows.prototype.createPlaceholderElement=function(){var el=document.createElement("div");return el.classList.add("tabulator-row"),el.classList.add("tabulator-row-placeholder"),el},MoveRows.prototype.initialize=function(handle){this.connectionSelectorsTables=this.table.options.movableRowsConnectedTables,this.connectionSelectorsElements=this.table.options.movableRowsConnectedElements,this.connection=this.connectionSelectorsTables||this.connectionSelectorsElements},MoveRows.prototype.setHandle=function(handle){this.hasHandle=handle},MoveRows.prototype.initializeGroupHeader=function(group){var self=this,config={},rowEl;config.mouseup=function(e){self.tableRowDrop(e,row)}.bind(self),config.mousemove=function(e){var rowEl,rowEl;e.pageY-Tabulator.prototype.helpers.elOffset(group.element).top+self.table.rowManager.element.scrollTop>group.getHeight()/2?self.toRow===group&&self.toRowAfter||((rowEl=group.getElement()).parentNode.insertBefore(self.placeholderElement,rowEl.nextSibling),self.moveRow(group,!0)):(self.toRow!==group||self.toRowAfter)&&(rowEl=group.getElement()).previousSibling&&(rowEl.parentNode.insertBefore(self.placeholderElement,rowEl),self.moveRow(group,!1))}.bind(self),group.modules.moveRow=config},MoveRows.prototype.initializeRow=function(row){var self=this,config={},rowEl;config.mouseup=function(e){self.tableRowDrop(e,row)}.bind(self),config.mousemove=function(e){var rowEl,rowEl;e.pageY-Tabulator.prototype.helpers.elOffset(row.element).top+self.table.rowManager.element.scrollTop>row.getHeight()/2?self.toRow===row&&self.toRowAfter||((rowEl=row.getElement()).parentNode.insertBefore(self.placeholderElement,rowEl.nextSibling),self.moveRow(row,!0)):(self.toRow!==row||self.toRowAfter)&&((rowEl=row.getElement()).parentNode.insertBefore(self.placeholderElement,rowEl),self.moveRow(row,!1))}.bind(self),this.hasHandle||((rowEl=row.getElement()).addEventListener("mousedown",(function(e){1===e.which&&(self.checkTimeout=setTimeout((function(){self.startMove(e,row)}),self.checkPeriod))})),rowEl.addEventListener("mouseup",(function(e){1===e.which&&self.checkTimeout&&clearTimeout(self.checkTimeout)})),this.bindTouchEvents(row,row.getElement())),row.modules.moveRow=config},MoveRows.prototype.initializeCell=function(cell){var self=this,cellEl=cell.getElement();cellEl.addEventListener("mousedown",(function(e){1===e.which&&(self.checkTimeout=setTimeout((function(){self.startMove(e,cell.row)}),self.checkPeriod))})),cellEl.addEventListener("mouseup",(function(e){1===e.which&&self.checkTimeout&&clearTimeout(self.checkTimeout)})),this.bindTouchEvents(cell.row,cell.getElement())},MoveRows.prototype.bindTouchEvents=function(row,element){var self=this,startYMove=!1,dir=!1,currentRow,nextRow,prevRow,nextRowHeight,prevRowHeight,nextRowHeightLast,prevRowHeightLast;element.addEventListener("touchstart",(function(e){self.checkTimeout=setTimeout((function(){self.touchMove=!0,currentRow=row,nextRow=row.nextRow(),nextRowHeight=nextRow?nextRow.getHeight()/2:0,prevRow=row.prevRow(),prevRowHeight=prevRow?prevRow.getHeight()/2:0,nextRowHeightLast=0,prevRowHeightLast=0,startYMove=!1,self.startMove(e,row)}),self.checkPeriod)}),{passive:!0}),this.moving,this.toRow,this.toRowAfter,element.addEventListener("touchmove",(function(e){var halfCol,diff,moveToRow;self.moving&&(e.preventDefault(),self.moveHover(e),startYMove||(startYMove=e.touches[0].pageY),(diff=e.touches[0].pageY-startYMove)>0?nextRow&&diff-nextRowHeightLast>nextRowHeight&&(moveToRow=nextRow)!==row&&(startYMove=e.touches[0].pageY,moveToRow.getElement().parentNode.insertBefore(self.placeholderElement,moveToRow.getElement().nextSibling),self.moveRow(moveToRow,!0)):prevRow&&-diff-prevRowHeightLast>prevRowHeight&&(moveToRow=prevRow)!==row&&(startYMove=e.touches[0].pageY,moveToRow.getElement().parentNode.insertBefore(self.placeholderElement,moveToRow.getElement()),self.moveRow(moveToRow,!1)),moveToRow&&(currentRow=moveToRow,nextRow=moveToRow.nextRow(),nextRowHeightLast=nextRowHeight,nextRowHeight=nextRow?nextRow.getHeight()/2:0,prevRow=moveToRow.prevRow(),prevRowHeightLast=prevRowHeight,prevRowHeight=prevRow?prevRow.getHeight()/2:0))})),element.addEventListener("touchend",(function(e){self.checkTimeout&&clearTimeout(self.checkTimeout),self.moving&&(self.endMove(e),self.touchMove=!1)}))},MoveRows.prototype._bindMouseMove=function(){var self=this;this.table.rowManager.getDisplayRows().forEach((function(row){"row"!==row.type&&"group"!==row.type||!row.modules.moveRow.mousemove||row.getElement().addEventListener("mousemove",row.modules.moveRow.mousemove)}))},MoveRows.prototype._unbindMouseMove=function(){var self=this;this.table.rowManager.getDisplayRows().forEach((function(row){"row"!==row.type&&"group"!==row.type||!row.modules.moveRow.mousemove||row.getElement().removeEventListener("mousemove",row.modules.moveRow.mousemove)}))},MoveRows.prototype.startMove=function(e,row){var element=row.getElement();this.setStartPosition(e,row),this.moving=row,this.table.element.classList.add("tabulator-block-select"),this.placeholderElement.style.width=row.getWidth()+"px",this.placeholderElement.style.height=row.getHeight()+"px",this.connection?(this.table.element.classList.add("tabulator-movingrow-sending"),this.connectToTables(row)):(element.parentNode.insertBefore(this.placeholderElement,element),element.parentNode.removeChild(element)),this.hoverElement=element.cloneNode(!0),this.hoverElement.classList.add("tabulator-moving"),this.connection?(document.body.appendChild(this.hoverElement),this.hoverElement.style.left="0",this.hoverElement.style.top="0",this.hoverElement.style.width=this.table.element.clientWidth+"px",this.hoverElement.style.whiteSpace="nowrap",this.hoverElement.style.overflow="hidden",this.hoverElement.style.pointerEvents="none"):(this.table.rowManager.getTableElement().appendChild(this.hoverElement),this.hoverElement.style.left="0",this.hoverElement.style.top="0",this._bindMouseMove()),document.body.addEventListener("mousemove",this.moveHover),document.body.addEventListener("mouseup",this.endMove),this.moveHover(e)},MoveRows.prototype.setStartPosition=function(e,row){var pageX=this.touchMove?e.touches[0].pageX:e.pageX,pageY=this.touchMove?e.touches[0].pageY:e.pageY,element,position;element=row.getElement(),this.connection?(position=element.getBoundingClientRect(),this.startX=position.left-pageX+window.pageXOffset,this.startY=position.top-pageY+window.pageYOffset):this.startY=pageY-element.getBoundingClientRect().top},MoveRows.prototype.endMove=function(e){e&&1!==e.which&&!this.touchMove||(this._unbindMouseMove(),this.connection||(this.placeholderElement.parentNode.insertBefore(this.moving.getElement(),this.placeholderElement.nextSibling),this.placeholderElement.parentNode.removeChild(this.placeholderElement)),this.hoverElement.parentNode.removeChild(this.hoverElement),this.table.element.classList.remove("tabulator-block-select"),this.toRow&&this.table.rowManager.moveRow(this.moving,this.toRow,this.toRowAfter),this.moving=!1,this.toRow=!1,this.toRowAfter=!1,document.body.removeEventListener("mousemove",this.moveHover),document.body.removeEventListener("mouseup",this.endMove),this.connection&&(this.table.element.classList.remove("tabulator-movingrow-sending"),this.disconnectFromTables()))},MoveRows.prototype.moveRow=function(row,after){this.toRow=row,this.toRowAfter=after},MoveRows.prototype.moveHover=function(e){this.connection?this.moveHoverConnections.call(this,e):this.moveHoverTable.call(this,e)},MoveRows.prototype.moveHoverTable=function(e){var rowHolder=this.table.rowManager.getElement(),scrollTop=rowHolder.scrollTop,yPos=(this.touchMove?e.touches[0].pageY:e.pageY)-rowHolder.getBoundingClientRect().top+scrollTop,scrollPos;this.hoverElement.style.top=yPos-this.startY+"px"},MoveRows.prototype.moveHoverConnections=function(e){this.hoverElement.style.left=this.startX+(this.touchMove?e.touches[0].pageX:e.pageX)+"px",this.hoverElement.style.top=this.startY+(this.touchMove?e.touches[0].pageY:e.pageY)+"px"},MoveRows.prototype.elementRowDrop=function(e,element,row){this.table.options.movableRowsElementDrop&&this.table.options.movableRowsElementDrop(e,element,!!row&&row.getComponent())},MoveRows.prototype.connectToTables=function(row){var _this66=this,connectionTables;this.connectionSelectorsTables&&(connectionTables=this.table.modules.comms.getConnections(this.connectionSelectorsTables),this.table.options.movableRowsSendingStart.call(this.table,connectionTables),this.table.modules.comms.send(this.connectionSelectorsTables,"moveRow","connect",{row:row})),this.connectionSelectorsElements&&(this.connectionElements=[],Array.isArray(this.connectionSelectorsElements)||(this.connectionSelectorsElements=[this.connectionSelectorsElements]),this.connectionSelectorsElements.forEach((function(query){"string"==typeof query?_this66.connectionElements=_this66.connectionElements.concat(Array.prototype.slice.call(document.querySelectorAll(query))):_this66.connectionElements.push(query)})),this.connectionElements.forEach((function(element){var dropEvent=function dropEvent(e){_this66.elementRowDrop(e,element,_this66.moving)};element.addEventListener("mouseup",dropEvent),element.tabulatorElementDropEvent=dropEvent,element.classList.add("tabulator-movingrow-receiving")})))},MoveRows.prototype.disconnectFromTables=function(){var connectionTables;this.connectionSelectorsTables&&(connectionTables=this.table.modules.comms.getConnections(this.connectionSelectorsTables),this.table.options.movableRowsSendingStop.call(this.table,connectionTables),this.table.modules.comms.send(this.connectionSelectorsTables,"moveRow","disconnect")),this.connectionElements.forEach((function(element){element.classList.remove("tabulator-movingrow-receiving"),element.removeEventListener("mouseup",element.tabulatorElementDropEvent),delete element.tabulatorElementDropEvent}))},MoveRows.prototype.connect=function(table,row){var self=this;return this.connectedTable?(console.warn("Move Row Error - Table cannot accept connection, already connected to table:",this.connectedTable),!1):(this.connectedTable=table,this.connectedRow=row,this.table.element.classList.add("tabulator-movingrow-receiving"),this.table.rowManager.getDisplayRows().forEach((function(row){"row"===row.type&&row.modules.moveRow&&row.modules.moveRow.mouseup&&row.getElement().addEventListener("mouseup",row.modules.moveRow.mouseup)})),this.tableRowDropEvent=this.tableRowDrop.bind(this),this.table.element.addEventListener("mouseup",this.tableRowDropEvent),this.table.options.movableRowsReceivingStart.call(this.table,row,table),!0)},MoveRows.prototype.disconnect=function(table){var self=this;table===this.connectedTable?(this.connectedTable=!1,this.connectedRow=!1,this.table.element.classList.remove("tabulator-movingrow-receiving"),this.table.rowManager.getDisplayRows().forEach((function(row){"row"===row.type&&row.modules.moveRow&&row.modules.moveRow.mouseup&&row.getElement().removeEventListener("mouseup",row.modules.moveRow.mouseup)})),this.table.element.removeEventListener("mouseup",this.tableRowDropEvent),this.table.options.movableRowsReceivingStop.call(this.table,table)):console.warn("Move Row Error - trying to disconnect from non connected table")},MoveRows.prototype.dropComplete=function(table,row,success){var sender=!1;if(success){switch(_typeof(this.table.options.movableRowsSender)){case"string":sender=this.senders[this.table.options.movableRowsSender];break;case"function":sender=this.table.options.movableRowsSender}sender?sender.call(this,this.moving.getComponent(),row?row.getComponent():void 0,table):this.table.options.movableRowsSender&&console.warn("Mover Row Error - no matching sender found:",this.table.options.movableRowsSender),this.table.options.movableRowsSent.call(this.table,this.moving.getComponent(),row?row.getComponent():void 0,table)}else this.table.options.movableRowsSentFailed.call(this.table,this.moving.getComponent(),row?row.getComponent():void 0,table);this.endMove()},MoveRows.prototype.tableRowDrop=function(e,row){var receiver=!1,success=!1;switch(console.trace("drop"),e.stopImmediatePropagation(),_typeof(this.table.options.movableRowsReceiver)){case"string":receiver=this.receivers[this.table.options.movableRowsReceiver];break;case"function":receiver=this.table.options.movableRowsReceiver}receiver?success=receiver.call(this,this.connectedRow.getComponent(),row?row.getComponent():void 0,this.connectedTable):console.warn("Mover Row Error - no matching receiver found:",this.table.options.movableRowsReceiver),success?this.table.options.movableRowsReceived.call(this.table,this.connectedRow.getComponent(),row?row.getComponent():void 0,this.connectedTable):this.table.options.movableRowsReceivedFailed.call(this.table,this.connectedRow.getComponent(),row?row.getComponent():void 0,this.connectedTable),this.table.modules.comms.send(this.connectedTable,"moveRow","dropcomplete",{row:row,success:success})},MoveRows.prototype.receivers={insert:function insert(fromRow,toRow,fromTable){return this.table.addRow(fromRow.getData(),void 0,toRow),!0},add:function add(fromRow,toRow,fromTable){return this.table.addRow(fromRow.getData()),!0},update:function update(fromRow,toRow,fromTable){return!!toRow&&(toRow.update(fromRow.getData()),!0)},replace:function replace(fromRow,toRow,fromTable){return!!toRow&&(this.table.addRow(fromRow.getData(),void 0,toRow),toRow.delete(),!0)}},MoveRows.prototype.senders={delete:function _delete(fromRow,toRow,toTable){fromRow.delete()}},MoveRows.prototype.commsReceived=function(table,action,data){switch(action){case"connect":return this.connect(table,data.row);case"disconnect":return this.disconnect(table);case"dropcomplete":return this.dropComplete(table,data.row,data.success)}},Tabulator.prototype.registerModule("moveRow",MoveRows);var Mutator=function Mutator(table){this.table=table,this.allowedTypes=["","data","edit","clipboard"],this.enabled=!0};Mutator.prototype.initializeColumn=function(column){var self=this,match=!1,config={};this.allowedTypes.forEach((function(type){var key="mutator"+(type.charAt(0).toUpperCase()+type.slice(1)),mutator;column.definition[key]&&(mutator=self.lookupMutator(column.definition[key]))&&(match=!0,config[key]={mutator:mutator,params:column.definition[key+"Params"]||{}})})),match&&(column.modules.mutate=config)},Mutator.prototype.lookupMutator=function(value){var mutator=!1;switch(void 0===value?"undefined":_typeof(value)){case"string":this.mutators[value]?mutator=this.mutators[value]:console.warn("Mutator Error - No such mutator found, ignoring: ",value);break;case"function":mutator=value}return mutator},Mutator.prototype.transformRow=function(data,type,updatedData){var self=this,key="mutator"+(type.charAt(0).toUpperCase()+type.slice(1)),value;return this.enabled&&this.table.columnManager.traverse((function(column){var mutator,params,component;column.modules.mutate&&(mutator=column.modules.mutate[key]||column.modules.mutate.mutator||!1)&&(value=column.getFieldValue(void 0!==updatedData?updatedData:data),"data"!=type&&void 0===value||(component=column.getComponent(),params="function"==typeof mutator.params?mutator.params(value,data,type,component):mutator.params,column.setFieldValue(data,mutator.mutator(value,data,type,params,component))))})),data},Mutator.prototype.transformCell=function(cell,value){var mutator=cell.column.modules.mutate.mutatorEdit||cell.column.modules.mutate.mutator||!1,tempData={};return mutator?(tempData=Object.assign(tempData,cell.row.getData()),cell.column.setFieldValue(tempData,value),mutator.mutator(value,tempData,"edit",mutator.params,cell.getComponent())):value},Mutator.prototype.enable=function(){this.enabled=!0},Mutator.prototype.disable=function(){this.enabled=!1},Mutator.prototype.mutators={},Tabulator.prototype.registerModule("mutator",Mutator);var Page=function Page(table){this.table=table,this.mode="local",this.progressiveLoad=!1,this.size=0,this.page=1,this.count=5,this.max=1,this.displayIndex=0,this.initialLoad=!0,this.pageSizes=[],this.dataReceivedNames={},this.dataSentNames={},this.createElements()};Page.prototype.createElements=function(){var button;this.element=document.createElement("span"),this.element.classList.add("tabulator-paginator"),this.pagesElement=document.createElement("span"),this.pagesElement.classList.add("tabulator-pages"),(button=document.createElement("button")).classList.add("tabulator-page"),button.setAttribute("type","button"),button.setAttribute("role","button"),button.setAttribute("aria-label",""),button.setAttribute("title",""),this.firstBut=button.cloneNode(!0),this.firstBut.setAttribute("data-page","first"),this.prevBut=button.cloneNode(!0),this.prevBut.setAttribute("data-page","prev"),this.nextBut=button.cloneNode(!0),this.nextBut.setAttribute("data-page","next"),this.lastBut=button.cloneNode(!0),this.lastBut.setAttribute("data-page","last"),this.table.options.paginationSizeSelector&&(this.pageSizeSelect=document.createElement("select"),this.pageSizeSelect.classList.add("tabulator-page-size"))},Page.prototype.generatePageSizeSelectList=function(){var _this67=this,pageSizes=[];if(this.pageSizeSelect){if(Array.isArray(this.table.options.paginationSizeSelector))pageSizes=this.table.options.paginationSizeSelector,this.pageSizes=pageSizes,-1==this.pageSizes.indexOf(this.size)&&pageSizes.unshift(this.size);else if(-1==this.pageSizes.indexOf(this.size)){pageSizes=[];for(var _i9=1;_i9<5;_i9++)pageSizes.push(this.size*_i9);this.pageSizes=pageSizes}else pageSizes=this.pageSizes;for(;this.pageSizeSelect.firstChild;)this.pageSizeSelect.removeChild(this.pageSizeSelect.firstChild);pageSizes.forEach((function(item){var itemEl=document.createElement("option");itemEl.value=item,!0===item?_this67.table.modules.localize.bind("pagination|all",(function(value){itemEl.innerHTML=value})):itemEl.innerHTML=item,_this67.pageSizeSelect.appendChild(itemEl)})),this.pageSizeSelect.value=this.size}},Page.prototype.initialize=function(hidden){var self=this,pageSelectLabel,testElRow,testElCell;this.dataSentNames=Object.assign({},this.paginationDataSentNames),this.dataSentNames=Object.assign(this.dataSentNames,this.table.options.paginationDataSent),this.dataReceivedNames=Object.assign({},this.paginationDataReceivedNames),this.dataReceivedNames=Object.assign(this.dataReceivedNames,this.table.options.paginationDataReceived),self.table.modules.localize.bind("pagination|first",(function(value){self.firstBut.innerHTML=value})),self.table.modules.localize.bind("pagination|first_title",(function(value){self.firstBut.setAttribute("aria-label",value),self.firstBut.setAttribute("title",value)})),self.table.modules.localize.bind("pagination|prev",(function(value){self.prevBut.innerHTML=value})),self.table.modules.localize.bind("pagination|prev_title",(function(value){self.prevBut.setAttribute("aria-label",value),self.prevBut.setAttribute("title",value)})),self.table.modules.localize.bind("pagination|next",(function(value){self.nextBut.innerHTML=value})),self.table.modules.localize.bind("pagination|next_title",(function(value){self.nextBut.setAttribute("aria-label",value),self.nextBut.setAttribute("title",value)})),self.table.modules.localize.bind("pagination|last",(function(value){self.lastBut.innerHTML=value})),self.table.modules.localize.bind("pagination|last_title",(function(value){self.lastBut.setAttribute("aria-label",value),self.lastBut.setAttribute("title",value)})),self.firstBut.addEventListener("click",(function(){self.setPage(1)})),self.prevBut.addEventListener("click",(function(){self.previousPage()})),self.nextBut.addEventListener("click",(function(){self.nextPage().then((function(){})).catch((function(){}))})),self.lastBut.addEventListener("click",(function(){self.setPage(self.max)})),self.table.options.paginationElement&&(self.element=self.table.options.paginationElement),this.pageSizeSelect&&(pageSelectLabel=document.createElement("label"),self.table.modules.localize.bind("pagination|page_size",(function(value){self.pageSizeSelect.setAttribute("aria-label",value),self.pageSizeSelect.setAttribute("title",value),pageSelectLabel.innerHTML=value})),self.element.appendChild(pageSelectLabel),self.element.appendChild(self.pageSizeSelect),self.pageSizeSelect.addEventListener("change",(function(e){self.setPageSize("true"==self.pageSizeSelect.value||self.pageSizeSelect.value),self.setPage(1).then((function(){})).catch((function(){}))}))),self.element.appendChild(self.firstBut),self.element.appendChild(self.prevBut),self.element.appendChild(self.pagesElement),self.element.appendChild(self.nextBut),self.element.appendChild(self.lastBut),self.table.options.paginationElement||hidden||self.table.footerManager.append(self.element,self),self.mode=self.table.options.pagination,self.table.options.paginationSize?self.size=self.table.options.paginationSize:((testElRow=document.createElement("div")).classList.add("tabulator-row"),testElRow.style.visibility=hidden,(testElCell=document.createElement("div")).classList.add("tabulator-cell"),testElCell.innerHTML="Page Row Test",testElRow.appendChild(testElCell),self.table.rowManager.getTableElement().appendChild(testElRow),self.size=Math.floor(self.table.rowManager.getElement().clientHeight/testElRow.offsetHeight),self.table.rowManager.getTableElement().removeChild(testElRow)),self.count=self.table.options.paginationButtonCount,self.generatePageSizeSelectList()},Page.prototype.initializeProgressive=function(mode){this.initialize(!0),this.mode="progressive_"+mode,this.progressiveLoad=!0},Page.prototype.setDisplayIndex=function(index){this.displayIndex=index},Page.prototype.getDisplayIndex=function(){return this.displayIndex},Page.prototype.setMaxRows=function(rowCount){this.max=rowCount?!0===this.size?1:Math.ceil(rowCount/this.size):1,this.page>this.max&&(this.page=this.max)},Page.prototype.reset=function(force,columnsChanged){return("local"==this.mode||force)&&(this.page=1),columnsChanged&&(this.initialLoad=!0),!0},Page.prototype.setMaxPage=function(max){max=parseInt(max),this.max=max||1,this.page>this.max&&(this.page=this.max,this.trigger())},Page.prototype.setPage=function(page){var _this68=this,self=this;switch(page){case"first":return this.setPage(1);case"prev":return this.previousPage();case"next":return this.nextPage();case"last":return this.setPage(this.max)}return new Promise((function(resolve,reject){(page=parseInt(page))>0&&page<=_this68.max?(_this68.page=page,_this68.trigger().then((function(){resolve()})).catch((function(){reject()})),self.table.options.persistence&&self.table.modExists("persistence",!0)&&self.table.modules.persistence.config.page&&self.table.modules.persistence.save("page")):(console.warn("Pagination Error - Requested page is out of range of 1 - "+_this68.max+":",page),reject())}))},Page.prototype.setPageToRow=function(row){var _this69=this;return new Promise((function(resolve,reject){var rows,index=_this69.table.rowManager.getDisplayRows(_this69.displayIndex-1).indexOf(row);if(index>-1){var page=!0===_this69.size?1:Math.ceil((index+1)/_this69.size);_this69.setPage(page).then((function(){resolve()})).catch((function(){reject()}))}else console.warn("Pagination Error - Requested row is not visible"),reject()}))},Page.prototype.setPageSize=function(size){!0!==size&&(size=parseInt(size)),size>0&&(this.size=size),this.pageSizeSelect&&this.generatePageSizeSelectList(),this.table.options.persistence&&this.table.modExists("persistence",!0)&&this.table.modules.persistence.config.page&&this.table.modules.persistence.save("page")},Page.prototype._setPageButtons=function(){for(var self=this,leftSize=Math.floor((this.count-1)/2),rightSize=Math.ceil((this.count-1)/2),min=this.max-this.page+leftSize+1<this.count?this.max-this.count+1:Math.max(this.page-leftSize,1),max=this.page<=rightSize?Math.min(this.count,this.max):Math.min(this.page+rightSize,this.max);this.pagesElement.firstChild;)this.pagesElement.removeChild(this.pagesElement.firstChild);1==this.page?(this.firstBut.disabled=!0,this.prevBut.disabled=!0):(this.firstBut.disabled=!1,this.prevBut.disabled=!1),this.page==this.max?(this.lastBut.disabled=!0,this.nextBut.disabled=!0):(this.lastBut.disabled=!1,this.nextBut.disabled=!1);for(var _i10=min;_i10<=max;_i10++)_i10>0&&_i10<=this.max&&this.pagesElement.appendChild(this._generatePageButton(_i10));this.footerRedraw()},Page.prototype._generatePageButton=function(page){var self=this,button=document.createElement("button");return button.classList.add("tabulator-page"),page==self.page&&button.classList.add("active"),button.setAttribute("type","button"),button.setAttribute("role","button"),self.table.modules.localize.bind("pagination|page_title",(function(value){button.setAttribute("aria-label",value+" "+page),button.setAttribute("title",value+" "+page)})),button.setAttribute("data-page",page),button.textContent=page,button.addEventListener("click",(function(e){self.setPage(page)})),button},Page.prototype.previousPage=function(){var _this70=this;return new Promise((function(resolve,reject){_this70.page>1?(_this70.page--,_this70.trigger().then((function(){resolve()})).catch((function(){reject()})),_this70.table.options.persistence&&_this70.table.modExists("persistence",!0)&&_this70.table.modules.persistence.config.page&&_this70.table.modules.persistence.save("page")):(console.warn("Pagination Error - Previous page would be less than page 1:",0),reject())}))},Page.prototype.nextPage=function(){var _this71=this;return new Promise((function(resolve,reject){_this71.page<_this71.max?(_this71.page++,_this71.trigger().then((function(){resolve()})).catch((function(){reject()})),_this71.table.options.persistence&&_this71.table.modExists("persistence",!0)&&_this71.table.modules.persistence.config.page&&_this71.table.modules.persistence.save("page")):(_this71.progressiveLoad||console.warn("Pagination Error - Next page would be greater than maximum page of "+_this71.max+":",_this71.max+1),reject())}))},Page.prototype.getPage=function(){return this.page},Page.prototype.getPageMax=function(){return this.max},Page.prototype.getPageSize=function(size){return this.size},Page.prototype.getMode=function(){return this.mode},Page.prototype.getRows=function(data){var output,start,end;if("local"==this.mode){output=[],!0===this.size?(start=0,end=data.length-1):end=(start=this.size*(this.page-1))+parseInt(this.size),this._setPageButtons();for(var _i11=start;_i11<end;_i11++)data[_i11]&&output.push(data[_i11]);return output}return this._setPageButtons(),data.slice(0)},Page.prototype.trigger=function(){var _this72=this,left;return new Promise((function(resolve,reject){switch(_this72.mode){case"local":left=_this72.table.rowManager.scrollLeft,_this72.table.rowManager.refreshActiveData("page"),_this72.table.rowManager.scrollHorizontal(left),_this72.table.options.pageLoaded.call(_this72.table,_this72.getPage()),resolve();break;case"remote":case"progressive_load":case"progressive_scroll":_this72.table.modules.ajax.blockActiveRequest(),_this72._getRemotePage().then((function(){resolve()})).catch((function(){reject()}));break;default:console.warn("Pagination Error - no such pagination mode:",_this72.mode),reject()}}))},Page.prototype._getRemotePage=function(){var _this73=this,self=this,oldParams,pageParams;return new Promise((function(resolve,reject){if(self.table.modExists("ajax",!0)||reject(),oldParams=Tabulator.prototype.helpers.deepClone(self.table.modules.ajax.getParams()||{}),(pageParams=self.table.modules.ajax.getParams())[_this73.dataSentNames.page]=self.page,_this73.size&&(pageParams[_this73.dataSentNames.size]=_this73.size),_this73.table.options.ajaxSorting&&_this73.table.modExists("sort")){var sorters=self.table.modules.sort.getSort();sorters.forEach((function(item){delete item.column})),pageParams[_this73.dataSentNames.sorters]=sorters}if(_this73.table.options.ajaxFiltering&&_this73.table.modExists("filter")){var filters=self.table.modules.filter.getFilters(!0,!0);pageParams[_this73.dataSentNames.filters]=filters}self.table.modules.ajax.setParams(pageParams),self.table.modules.ajax.sendRequest(_this73.progressiveLoad).then((function(data){self._parseRemoteData(data),resolve()})).catch((function(e){reject()})),self.table.modules.ajax.setParams(oldParams)}))},Page.prototype._parseRemoteData=function(data){var self=this,left,data,margin;if(void 0===data[this.dataReceivedNames.last_page]&&console.warn("Remote Pagination Error - Server response missing '"+this.dataReceivedNames.last_page+"' property"),data[this.dataReceivedNames.data]){if(this.max=parseInt(data[this.dataReceivedNames.last_page])||1,this.progressiveLoad)switch(this.mode){case"progressive_load":1==this.page?this.table.rowManager.setData(data[this.dataReceivedNames.data],!1,this.initialLoad&&1==this.page):this.table.rowManager.addRows(data[this.dataReceivedNames.data]),this.page<this.max&&setTimeout((function(){self.nextPage().then((function(){})).catch((function(){}))}),self.table.options.ajaxProgressiveLoadDelay);break;case"progressive_scroll":data=this.table.rowManager.getData().concat(data[this.dataReceivedNames.data]),this.table.rowManager.setData(data,!0,this.initialLoad&&1==this.page),margin=this.table.options.ajaxProgressiveLoadScrollMargin||2*this.table.rowManager.element.clientHeight,self.table.rowManager.element.scrollHeight<=self.table.rowManager.element.clientHeight+margin&&self.nextPage().then((function(){})).catch((function(){}))}else left=this.table.rowManager.scrollLeft,this.table.rowManager.setData(data[this.dataReceivedNames.data],!1,this.initialLoad&&1==this.page),this.table.rowManager.scrollHorizontal(left),this.table.columnManager.scrollHorizontal(left),this.table.options.pageLoaded.call(this.table,this.getPage());this.initialLoad=!1}else console.warn("Remote Pagination Error - Server response missing '"+this.dataReceivedNames.data+"' property")},Page.prototype.footerRedraw=function(){var footer=this.table.footerManager.element;Math.ceil(footer.clientWidth)-footer.scrollWidth<0?this.pagesElement.style.display="none":(this.pagesElement.style.display="",Math.ceil(footer.clientWidth)-footer.scrollWidth<0&&(this.pagesElement.style.display="none"))},Page.prototype.paginationDataSentNames={page:"page",size:"size",sorters:"sorters",filters:"filters"},Page.prototype.paginationDataReceivedNames={current_page:"current_page",last_page:"last_page",data:"data"},Tabulator.prototype.registerModule("page",Page);var Persistence=function Persistence(table){this.table=table,this.mode="",this.id="",this.defWatcherBlock=!1,this.config={},this.readFunc=!1,this.writeFunc=!1};Persistence.prototype.localStorageTest=function(){var testKey="_tabulator_test";try{return window.localStorage.setItem(testKey,testKey),window.localStorage.removeItem(testKey),!0}catch(e){return!1}},Persistence.prototype.initialize=function(){var mode=this.table.options.persistenceMode,id=this.table.options.persistenceID,retreivedData;this.mode=!0!==mode?mode:this.localStorageTest()?"local":"cookie",this.table.options.persistenceReaderFunc?"function"==typeof this.table.options.persistenceReaderFunc?this.readFunc=this.table.options.persistenceReaderFunc:this.readers[this.table.options.persistenceReaderFunc]?this.readFunc=this.readers[this.table.options.persistenceReaderFunc]:console.warn("Persistence Read Error - invalid reader set",this.table.options.persistenceReaderFunc):this.readers[this.mode]?this.readFunc=this.readers[this.mode]:console.warn("Persistence Read Error - invalid reader set",this.mode),this.table.options.persistenceWriterFunc?"function"==typeof this.table.options.persistenceWriterFunc?this.writeFunc=this.table.options.persistenceWriterFunc:this.readers[this.table.options.persistenceWriterFunc]?this.writeFunc=this.readers[this.table.options.persistenceWriterFunc]:console.warn("Persistence Write Error - invalid reader set",this.table.options.persistenceWriterFunc):this.writers[this.mode]?this.writeFunc=this.writers[this.mode]:console.warn("Persistence Write Error - invalid writer set",this.mode),this.id="tabulator-"+(id||this.table.element.getAttribute("id")||""),this.config={sort:!0===this.table.options.persistence||this.table.options.persistence.sort,filter:!0===this.table.options.persistence||this.table.options.persistence.filter,group:!0===this.table.options.persistence||this.table.options.persistence.group,page:!0===this.table.options.persistence||this.table.options.persistence.page,columns:!0===this.table.options.persistence?["title","width","visible"]:this.table.options.persistence.columns},this.config.page&&(retreivedData=this.retreiveData("page"))&&(void 0===retreivedData.paginationSize||!0!==this.config.page&&!this.config.page.size||(this.table.options.paginationSize=retreivedData.paginationSize),void 0===retreivedData.paginationInitialPage||!0!==this.config.page&&!this.config.page.page||(this.table.options.paginationInitialPage=retreivedData.paginationInitialPage)),this.config.group&&(retreivedData=this.retreiveData("group"))&&(void 0===retreivedData.groupBy||!0!==this.config.group&&!this.config.group.groupBy||(this.table.options.groupBy=retreivedData.groupBy),void 0===retreivedData.groupStartOpen||!0!==this.config.group&&!this.config.group.groupStartOpen||(this.table.options.groupStartOpen=retreivedData.groupStartOpen),void 0===retreivedData.groupHeader||!0!==this.config.group&&!this.config.group.groupHeader||(this.table.options.groupHeader=retreivedData.groupHeader))},Persistence.prototype.initializeColumn=function(column){var self=this,def,keys;this.config.columns&&(this.defWatcherBlock=!0,def=column.getDefinition(),(keys=!0===this.config.columns?Object.keys(def):this.config.columns).forEach((function(key){var props=Object.getOwnPropertyDescriptor(def,key),value=def[key];props&&Object.defineProperty(def,key,{set:function set(newValue){value=newValue,self.defWatcherBlock||self.save("columns"),props.set&&props.set(newValue)},get:function get(){return props.get&&props.get(),value}})})),this.defWatcherBlock=!1)},Persistence.prototype.load=function(type,current){var data=this.retreiveData(type);return current&&(data=data?this.mergeDefinition(current,data):current),data},Persistence.prototype.retreiveData=function(type){return!!this.readFunc&&this.readFunc(this.id,type)},Persistence.prototype.mergeDefinition=function(oldCols,newCols){var self=this,output=[];return(newCols=newCols||[]).forEach((function(column,to){var from=self._findColumn(oldCols,column),keys;from&&(!0===self.config.columns||null==self.config.columns?(keys=Object.keys(from)).push("width"):keys=self.config.columns,keys.forEach((function(key){void 0!==column[key]&&(from[key]=column[key])})),from.columns&&(from.columns=self.mergeDefinition(from.columns,column.columns)),output.push(from))})),oldCols.forEach((function(column,i){var from;self._findColumn(newCols,column)||(output.length>i?output.splice(i,0,column):output.push(column))})),output},Persistence.prototype._findColumn=function(columns,subject){var type=subject.columns?"group":subject.field?"field":"object";return columns.find((function(col){switch(type){case"group":return col.title===subject.title&&col.columns.length===subject.columns.length;case"field":return col.field===subject.field;case"object":return col===subject}}))},Persistence.prototype.save=function(type){var data={};switch(type){case"columns":data=this.parseColumns(this.table.columnManager.getColumns());break;case"filter":data=this.table.modules.filter.getFilters();break;case"sort":data=this.validateSorters(this.table.modules.sort.getSort());break;case"group":data=this.getGroupConfig();break;case"page":data=this.getPageConfig()}this.writeFunc&&this.writeFunc(this.id,type,data)},Persistence.prototype.validateSorters=function(data){return data.forEach((function(item){item.column=item.field,delete item.field})),data},Persistence.prototype.getGroupConfig=function(){return this.config.group&&((!0===this.config.group||this.config.group.groupBy)&&(data.groupBy=this.table.options.groupBy),(!0===this.config.group||this.config.group.groupStartOpen)&&(data.groupStartOpen=this.table.options.groupStartOpen),(!0===this.config.group||this.config.group.groupHeader)&&(data.groupHeader=this.table.options.groupHeader)),data},Persistence.prototype.getPageConfig=function(){var data={};return this.config.page&&((!0===this.config.page||this.config.page.size)&&(data.paginationSize=this.table.modules.page.getPageSize()),(!0===this.config.page||this.config.page.page)&&(data.paginationInitialPage=this.table.modules.page.getPage())),data},Persistence.prototype.parseColumns=function(columns){var self=this,definitions=[];return columns.forEach((function(column){var defStore={},colDef=column.getDefinition(),keys;column.isGroup?(defStore.title=colDef.title,defStore.columns=self.parseColumns(column.getColumns())):(defStore.field=column.getField(),!0===self.config.columns||null==self.config.columns?(keys=Object.keys(colDef)).push("width"):keys=self.config.columns,keys.forEach((function(key){switch(key){case"width":defStore.width=column.getWidth();break;case"visible":defStore.visible=column.visible;break;default:defStore[key]=colDef[key]}}))),definitions.push(defStore)})),definitions},Persistence.prototype.readers={local:function local(id,type){var data=localStorage.getItem(id+"-"+type);return!!data&&JSON.parse(data)},cookie:function cookie(id,type){var cookie=document.cookie,key=id+"-"+type,cookiePos=cookie.indexOf(key+"="),end,data;return cookiePos>-1&&(cookie=cookie.substr(cookiePos),(end=cookie.indexOf(";"))>-1&&(cookie=cookie.substr(0,end)),data=cookie.replace(key+"=","")),!!data&&JSON.parse(data)}},Persistence.prototype.writers={local:function local(id,type,data){localStorage.setItem(id+"-"+type,JSON.stringify(data))},cookie:function cookie(id,type,data){var expireDate=new Date;expireDate.setDate(expireDate.getDate()+1e4),document.cookie=id+"-"+type+"="+JSON.stringify(data)+"; expires="+expireDate.toUTCString()}},Tabulator.prototype.registerModule("persistence",Persistence);var Print=function Print(table){this.table=table,this.element=!1,this.manualBlock=!1};Print.prototype.initialize=function(){window.addEventListener("beforeprint",this.replaceTable.bind(this)),window.addEventListener("afterprint",this.cleanup.bind(this))},Print.prototype.replaceTable=function(){this.manualBlock||(this.element=document.createElement("div"),this.element.classList.add("tabulator-print-table"),this.element.appendChild(this.table.modules.export.genereateTable(this.table.options.printConfig,this.table.options.printStyled,this.table.options.printRowRange,"print")),this.table.element.style.display="none",this.table.element.parentNode.insertBefore(this.element,this.table.element))},Print.prototype.cleanup=function(){document.body.classList.remove("tabulator-print-fullscreen-hide"),this.element&&this.element.parentNode&&(this.element.parentNode.removeChild(this.element),this.table.element.style.display="")},Print.prototype.printFullscreen=function(visible,style,config){var scrollX=window.scrollX,scrollY=window.scrollY,headerEl=document.createElement("div"),footerEl=document.createElement("div"),tableEl=this.table.modules.export.genereateTable(void 0!==config?config:this.table.options.printConfig,void 0!==style?style:this.table.options.printStyled,visible,"print"),headerContent,footerContent;this.manualBlock=!0,this.element=document.createElement("div"),this.element.classList.add("tabulator-print-fullscreen"),this.table.options.printHeader&&(headerEl.classList.add("tabulator-print-header"),"string"==typeof(headerContent="function"==typeof this.table.options.printHeader?this.table.options.printHeader.call(this.table):this.table.options.printHeader)?headerEl.innerHTML=headerContent:headerEl.appendChild(headerContent),this.element.appendChild(headerEl)),this.element.appendChild(tableEl),this.table.options.printFooter&&(footerEl.classList.add("tabulator-print-footer"),"string"==typeof(footerContent="function"==typeof this.table.options.printFooter?this.table.options.printFooter.call(this.table):this.table.options.printFooter)?footerEl.innerHTML=footerContent:footerEl.appendChild(footerContent),this.element.appendChild(footerEl)),document.body.classList.add("tabulator-print-fullscreen-hide"),document.body.appendChild(this.element),this.table.options.printFormatter&&this.table.options.printFormatter(this.element,tableEl),window.print(),this.cleanup(),window.scrollTo(scrollX,scrollY),this.manualBlock=!1},Tabulator.prototype.registerModule("print",Print);var ReactiveData=function ReactiveData(table){this.table=table,this.data=!1,this.blocked=!1,this.origFuncs={},this.currentVersion=0};ReactiveData.prototype.watchData=function(data){var self=this,pushFunc,version;this.currentVersion++,version=this.currentVersion,self.unwatchData(),self.data=data,self.origFuncs.push=data.push,Object.defineProperty(self.data,"push",{enumerable:!1,configurable:!0,value:function value(){var args=Array.from(arguments);return self.blocked||version!==self.currentVersion||args.forEach((function(arg){self.table.rowManager.addRowActual(arg,!1)})),self.origFuncs.push.apply(data,arguments)}}),self.origFuncs.unshift=data.unshift,Object.defineProperty(self.data,"unshift",{enumerable:!1,configurable:!0,value:function value(){var args=Array.from(arguments);return self.blocked||version!==self.currentVersion||args.forEach((function(arg){self.table.rowManager.addRowActual(arg,!0)})),self.origFuncs.unshift.apply(data,arguments)}}),self.origFuncs.shift=data.shift,Object.defineProperty(self.data,"shift",{enumerable:!1,configurable:!0,value:function value(){var row;return self.blocked||version!==self.currentVersion||self.data.length&&(row=self.table.rowManager.getRowFromDataObject(self.data[0]))&&row.deleteActual(),self.origFuncs.shift.call(data)}}),self.origFuncs.pop=data.pop,Object.defineProperty(self.data,"pop",{enumerable:!1,configurable:!0,value:function value(){var row;return self.blocked||version!==self.currentVersion||self.data.length&&(row=self.table.rowManager.getRowFromDataObject(self.data[self.data.length-1]))&&row.deleteActual(),self.origFuncs.pop.call(data)}}),self.origFuncs.splice=data.splice,Object.defineProperty(self.data,"splice",{enumerable:!1,configurable:!0,value:function value(){var args=Array.from(arguments),start=args[0]<0?data.length+args[0]:args[0],end=args[1],newRows=!!args[2]&&args.slice(2),startRow;if(!self.blocked&&version===self.currentVersion){if(newRows&&((startRow=!!data[start]&&self.table.rowManager.getRowFromDataObject(data[start]))?newRows.forEach((function(rowData){self.table.rowManager.addRowActual(rowData,!0,startRow,!0)})):(newRows=newRows.slice().reverse()).forEach((function(rowData){self.table.rowManager.addRowActual(rowData,!0,!1,!0)}))),0!==end){var oldRows=data.slice(start,void 0===args[1]?args[1]:start+end);oldRows.forEach((function(rowData,i){var row=self.table.rowManager.getRowFromDataObject(rowData);row&&row.deleteActual(i!==oldRows.length-1)}))}(newRows||0!==end)&&self.table.rowManager.reRenderInPosition()}return self.origFuncs.splice.apply(data,arguments)}})},ReactiveData.prototype.unwatchData=function(){if(!1!==this.data)for(var key in this.origFuncs)Object.defineProperty(this.data,key,{enumerable:!0,configurable:!0,writable:!0,value:this.origFuncs.key})},ReactiveData.prototype.watchRow=function(row){var self=this,data=row.getData();for(var key in this.blocked=!0,data)this.watchKey(row,data,key);this.blocked=!1},ReactiveData.prototype.watchKey=function(row,data,key){var self=this,props=Object.getOwnPropertyDescriptor(data,key),value=data[key],version=this.currentVersion;Object.defineProperty(data,key,{set:function set(newValue){if(value=newValue,!self.blocked&&version===self.currentVersion){var update={};update[key]=newValue,row.updateData(update)}props.set&&props.set(newValue)},get:function get(){return props.get&&props.get(),value}})},ReactiveData.prototype.unwatchRow=function(row){var data=row.getData();for(var key in data)Object.defineProperty(data,key,{value:data[key]})},ReactiveData.prototype.block=function(){this.blocked=!0},ReactiveData.prototype.unblock=function(){this.blocked=!1},Tabulator.prototype.registerModule("reactiveData",ReactiveData);var ResizeColumns=function ResizeColumns(table){this.table=table,this.startColumn=!1,this.startX=!1,this.startWidth=!1,this.handle=null,this.prevHandle=null};ResizeColumns.prototype.initializeColumn=function(type,column,element){var self=this,variableHeight=!1,mode=this.table.options.resizableColumns;if("header"===type&&(variableHeight="textarea"==column.definition.formatter||column.definition.variableHeight,column.modules.resize={variableHeight:variableHeight}),!0===mode||mode==type){var handle=document.createElement("div");handle.className="tabulator-col-resize-handle";var prevHandle=document.createElement("div");prevHandle.className="tabulator-col-resize-handle prev",handle.addEventListener("click",(function(e){e.stopPropagation()}));var handleDown=function handleDown(e){var nearestColumn=column.getLastColumn();nearestColumn&&self._checkResizability(nearestColumn)&&(self.startColumn=column,self._mouseDown(e,nearestColumn,handle))};handle.addEventListener("mousedown",handleDown),handle.addEventListener("touchstart",handleDown,{passive:!0}),handle.addEventListener("dblclick",(function(e){var col=column.getLastColumn();col&&self._checkResizability(col)&&(e.stopPropagation(),col.reinitializeWidth(!0))})),prevHandle.addEventListener("click",(function(e){e.stopPropagation()}));var prevHandleDown=function prevHandleDown(e){var nearestColumn,colIndex,prevColumn;(nearestColumn=column.getFirstColumn())&&(prevColumn=(colIndex=self.table.columnManager.findColumnIndex(nearestColumn))>0&&self.table.columnManager.getColumnByIndex(colIndex-1))&&self._checkResizability(prevColumn)&&(self.startColumn=column,self._mouseDown(e,prevColumn,prevHandle))};prevHandle.addEventListener("mousedown",prevHandleDown),prevHandle.addEventListener("touchstart",prevHandleDown,{passive:!0}),prevHandle.addEventListener("dblclick",(function(e){var nearestColumn,colIndex,prevColumn;(nearestColumn=column.getFirstColumn())&&(prevColumn=(colIndex=self.table.columnManager.findColumnIndex(nearestColumn))>0&&self.table.columnManager.getColumnByIndex(colIndex-1))&&self._checkResizability(prevColumn)&&(e.stopPropagation(),prevColumn.reinitializeWidth(!0))})),element.appendChild(handle),element.appendChild(prevHandle)}},ResizeColumns.prototype._checkResizability=function(column){return void 0!==column.definition.resizable?column.definition.resizable:this.table.options.resizableColumns},ResizeColumns.prototype._mouseDown=function(e,column,handle){var self=this;function mouseMove(e){column.setWidth(self.startWidth+((void 0===e.screenX?e.touches[0].screenX:e.screenX)-self.startX)),!self.table.browserSlow&&column.modules.resize&&column.modules.resize.variableHeight&&column.checkCellHeights()}function mouseUp(e){self.startColumn.modules.edit&&(self.startColumn.modules.edit.blocked=!1),self.table.browserSlow&&column.modules.resize&&column.modules.resize.variableHeight&&column.checkCellHeights(),document.body.removeEventListener("mouseup",mouseUp),document.body.removeEventListener("mousemove",mouseMove),handle.removeEventListener("touchmove",mouseMove),handle.removeEventListener("touchend",mouseUp),self.table.element.classList.remove("tabulator-block-select"),self.table.options.persistence&&self.table.modExists("persistence",!0)&&self.table.modules.persistence.config.columns&&self.table.modules.persistence.save("columns"),self.table.options.columnResized.call(self.table,column.getComponent())}self.table.element.classList.add("tabulator-block-select"),e.stopPropagation(),self.startColumn.modules.edit&&(self.startColumn.modules.edit.blocked=!0),self.startX=void 0===e.screenX?e.touches[0].screenX:e.screenX,self.startWidth=column.getWidth(),document.body.addEventListener("mousemove",mouseMove),document.body.addEventListener("mouseup",mouseUp),handle.addEventListener("touchmove",mouseMove,{passive:!0}),handle.addEventListener("touchend",mouseUp)},Tabulator.prototype.registerModule("resizeColumns",ResizeColumns);var ResizeRows=function ResizeRows(table){this.table=table,this.startColumn=!1,this.startY=!1,this.startHeight=!1,this.handle=null,this.prevHandle=null};ResizeRows.prototype.initializeRow=function(row){var self=this,rowEl=row.getElement(),handle=document.createElement("div");handle.className="tabulator-row-resize-handle";var prevHandle=document.createElement("div");prevHandle.className="tabulator-row-resize-handle prev",handle.addEventListener("click",(function(e){e.stopPropagation()}));var handleDown=function handleDown(e){self.startRow=row,self._mouseDown(e,row,handle)};handle.addEventListener("mousedown",handleDown),handle.addEventListener("touchstart",handleDown,{passive:!0}),prevHandle.addEventListener("click",(function(e){e.stopPropagation()}));var prevHandleDown=function prevHandleDown(e){var prevRow=self.table.rowManager.prevDisplayRow(row);prevRow&&(self.startRow=prevRow,self._mouseDown(e,prevRow,prevHandle))};prevHandle.addEventListener("mousedown",prevHandleDown),prevHandle.addEventListener("touchstart",prevHandleDown,{passive:!0}),rowEl.appendChild(handle),rowEl.appendChild(prevHandle)},ResizeRows.prototype._mouseDown=function(e,row,handle){var self=this;function mouseMove(e){row.setHeight(self.startHeight+((void 0===e.screenY?e.touches[0].screenY:e.screenY)-self.startY))}function mouseUp(e){document.body.removeEventListener("mouseup",mouseMove),document.body.removeEventListener("mousemove",mouseMove),handle.removeEventListener("touchmove",mouseMove),handle.removeEventListener("touchend",mouseUp),self.table.element.classList.remove("tabulator-block-select"),self.table.options.rowResized.call(this.table,row.getComponent())}self.table.element.classList.add("tabulator-block-select"),e.stopPropagation(),self.startY=void 0===e.screenY?e.touches[0].screenY:e.screenY,self.startHeight=row.getHeight(),document.body.addEventListener("mousemove",mouseMove),document.body.addEventListener("mouseup",mouseUp),handle.addEventListener("touchmove",mouseMove,{passive:!0}),handle.addEventListener("touchend",mouseUp)},Tabulator.prototype.registerModule("resizeRows",ResizeRows);var ResizeTable=function ResizeTable(table){this.table=table,this.binding=!1,this.observer=!1,this.containerObserver=!1,this.tableHeight=0,this.tableWidth=0,this.containerHeight=0,this.containerWidth=0,this.autoResize=!1};ResizeTable.prototype.initialize=function(row){var _this74=this,table=this.table,tableStyle;this.tableHeight=table.element.clientHeight,this.tableWidth=table.element.clientWidth,table.element.parentNode&&(this.containerHeight=table.element.parentNode.clientHeight,this.containerWidth=table.element.parentNode.clientWidth),"undefined"!=typeof ResizeObserver&&"virtual"===table.rowManager.getRenderMode()?(this.autoResize=!0,this.observer=new ResizeObserver((function(entry){if(!table.browserMobile||table.browserMobile&&!table.modules.edit.currentCell){var nodeHeight=Math.floor(entry[0].contentRect.height),nodeWidth=Math.floor(entry[0].contentRect.width);_this74.tableHeight==nodeHeight&&_this74.tableWidth==nodeWidth||(_this74.tableHeight=nodeHeight,_this74.tableWidth=nodeWidth,table.element.parentNode&&(_this74.containerHeight=table.element.parentNode.clientHeight,_this74.containerWidth=table.element.parentNode.clientWidth),table.redraw())}})),this.observer.observe(table.element),tableStyle=window.getComputedStyle(table.element),this.table.element.parentNode&&!this.table.rowManager.fixedHeight&&(tableStyle.getPropertyValue("max-height")||tableStyle.getPropertyValue("min-height"))&&(this.containerObserver=new ResizeObserver((function(entry){if(!table.browserMobile||table.browserMobile&&!table.modules.edit.currentCell){var nodeHeight=Math.floor(entry[0].contentRect.height),nodeWidth=Math.floor(entry[0].contentRect.width);_this74.containerHeight==nodeHeight&&_this74.containerWidth==nodeWidth||(_this74.containerHeight=nodeHeight,_this74.containerWidth=nodeWidth,_this74.tableHeight=table.element.clientHeight,_this74.tableWidth=table.element.clientWidth,table.redraw()),table.redraw()}})),this.containerObserver.observe(this.table.element.parentNode))):(this.binding=function(){(!table.browserMobile||table.browserMobile&&!table.modules.edit.currentCell)&&table.redraw()},window.addEventListener("resize",this.binding))},ResizeTable.prototype.clearBindings=function(row){this.binding&&window.removeEventListener("resize",this.binding),this.observer&&this.observer.unobserve(this.table.element),this.containerObserver&&this.containerObserver.unobserve(this.table.element.parentNode)},Tabulator.prototype.registerModule("resizeTable",ResizeTable);var ResponsiveLayout=function ResponsiveLayout(table){this.table=table,this.columns=[],this.hiddenColumns=[],this.mode="",this.index=0,this.collapseFormatter=[],this.collapseStartOpen=!0,this.collapseHandleColumn=!1};ResponsiveLayout.prototype.initialize=function(){var self=this,columns=[];this.mode=this.table.options.responsiveLayout,this.collapseFormatter=this.table.options.responsiveLayoutCollapseFormatter||this.formatCollapsedData,this.collapseStartOpen=this.table.options.responsiveLayoutCollapseStartOpen,this.hiddenColumns=[],this.table.columnManager.columnsByIndex.forEach((function(column,i){column.modules.responsive&&column.modules.responsive.order&&column.modules.responsive.visible&&(column.modules.responsive.index=i,columns.push(column),column.visible||"collapse"!==self.mode||self.hiddenColumns.push(column))})),columns=(columns=columns.reverse()).sort((function(a,b){var diff;return b.modules.responsive.order-a.modules.responsive.order||b.modules.responsive.index-a.modules.responsive.index})),this.columns=columns,"collapse"===this.mode&&this.generateCollapsedContent();for(var _iterator=this.table.columnManager.columnsByIndex,_isArray=Array.isArray(_iterator),_i12=0,_iterator=_isArray?_iterator:_iterator[Symbol.iterator]();;){var _ref;if(_isArray){if(_i12>=_iterator.length)break;_ref=_iterator[_i12++]}else{if((_i12=_iterator.next()).done)break;_ref=_i12.value}var col=_ref;if("responsiveCollapse"==col.definition.formatter){this.collapseHandleColumn=col;break}}this.collapseHandleColumn&&(this.hiddenColumns.length?this.collapseHandleColumn.show():this.collapseHandleColumn.hide())},ResponsiveLayout.prototype.initializeColumn=function(column){var def=column.getDefinition();column.modules.responsive={order:void 0===def.responsive?1:def.responsive,visible:!1!==def.visible}},ResponsiveLayout.prototype.initializeRow=function(row){var el;"calc"!==row.type&&((el=document.createElement("div")).classList.add("tabulator-responsive-collapse"),row.modules.responsiveLayout={element:el,open:this.collapseStartOpen},this.collapseStartOpen||(el.style.display="none"))},ResponsiveLayout.prototype.layoutRow=function(row){var rowEl=row.getElement();row.modules.responsiveLayout&&(rowEl.appendChild(row.modules.responsiveLayout.element),this.generateCollapsedRowContent(row))},ResponsiveLayout.prototype.updateColumnVisibility=function(column,visible){var index;column.modules.responsive&&(column.modules.responsive.visible=visible,this.initialize())},ResponsiveLayout.prototype.hideColumn=function(column){var colCount=this.hiddenColumns.length;column.hide(!1,!0),"collapse"===this.mode&&(this.hiddenColumns.unshift(column),this.generateCollapsedContent(),this.collapseHandleColumn&&!colCount&&this.collapseHandleColumn.show())},ResponsiveLayout.prototype.showColumn=function(column){var index;column.show(!1,!0),column.setWidth(column.getWidth()),"collapse"===this.mode&&((index=this.hiddenColumns.indexOf(column))>-1&&this.hiddenColumns.splice(index,1),this.generateCollapsedContent(),this.collapseHandleColumn&&!this.hiddenColumns.length&&this.collapseHandleColumn.hide())},ResponsiveLayout.prototype.update=function(){for(var self=this,working=!0;working;){var width="fitColumns"==this.table.modules.layout.getMode()?this.table.columnManager.getFlexBaseWidth():this.table.columnManager.getWidth(),diff=(this.table.options.headerVisible?this.table.columnManager.element.clientWidth:this.table.element.clientWidth)-width;if(diff<0){var column=this.columns[this.index];column?(this.hideColumn(column),this.index++):working=!1}else{var _column=this.columns[this.index-1];_column&&diff>0&&diff>=_column.getWidth()?(this.showColumn(_column),this.index--):working=!1}this.table.rowManager.activeRowsCount||this.table.rowManager.renderEmptyScroll()}},ResponsiveLayout.prototype.generateCollapsedContent=function(){var self=this,rows;this.table.rowManager.getDisplayRows().forEach((function(row){self.generateCollapsedRowContent(row)}))},ResponsiveLayout.prototype.generateCollapsedRowContent=function(row){var el,contents;if(row.modules.responsiveLayout){for(el=row.modules.responsiveLayout.element;el.firstChild;)el.removeChild(el.firstChild);(contents=this.collapseFormatter(this.generateCollapsedRowData(row)))&&el.appendChild(contents)}},ResponsiveLayout.prototype.generateCollapsedRowData=function(row){var self=this,data=row.getData(),output=[],mockCellComponent;return this.hiddenColumns.forEach((function(column){var value=column.getFieldValue(data);column.definition.title&&column.field&&(column.modules.format&&self.table.options.responsiveLayoutCollapseUseFormatters?(mockCellComponent={value:!1,data:{},getValue:function getValue(){return value},getData:function getData(){return data},getElement:function getElement(){return document.createElement("div")},getRow:function getRow(){return row.getComponent()},getColumn:function getColumn(){return column.getComponent()}},output.push({title:column.definition.title,value:column.modules.format.formatter.call(self.table.modules.format,mockCellComponent,column.modules.format.params)})):output.push({title:column.definition.title,value:value}))})),output},ResponsiveLayout.prototype.formatCollapsedData=function(data){var list=document.createElement("table"),listContents="";return data.forEach((function(item){var div=document.createElement("div");item.value instanceof Node&&(div.appendChild(item.value),item.value=div.innerHTML),listContents+="<tr><td><strong>"+item.title+"</strong></td><td>"+item.value+"</td></tr>"})),list.innerHTML=listContents,Object.keys(data).length?list:""},Tabulator.prototype.registerModule("responsiveLayout",ResponsiveLayout);var SelectRow=function SelectRow(table){this.table=table,this.selecting=!1,this.lastClickedRow=!1,this.selectPrev=[],this.selectedRows=[],this.headerCheckboxElement=null};SelectRow.prototype.clearSelectionData=function(silent){this.selecting=!1,this.lastClickedRow=!1,this.selectPrev=[],this.selectedRows=[],silent||this._rowSelectionChanged()},SelectRow.prototype.initializeRow=function(row){var self=this,element=row.getElement(),endSelect=function endSelect(){setTimeout((function(){self.selecting=!1}),50),document.body.removeEventListener("mouseup",endSelect)};row.modules.select={selected:!1},self.table.options.selectableCheck.call(this.table,row.getComponent())?(element.classList.add("tabulator-selectable"),element.classList.remove("tabulator-unselectable"),self.table.options.selectable&&"highlight"!=self.table.options.selectable&&("click"===self.table.options.selectableRangeMode?element.addEventListener("click",(function(e){if(e.shiftKey){self.table._clearSelection(),self.lastClickedRow=self.lastClickedRow||row;var lastClickedRowIdx=self.table.rowManager.getDisplayRowIndex(self.lastClickedRow),rowIdx=self.table.rowManager.getDisplayRowIndex(row),fromRowIdx=lastClickedRowIdx<=rowIdx?lastClickedRowIdx:rowIdx,toRowIdx=lastClickedRowIdx>=rowIdx?lastClickedRowIdx:rowIdx,rows,toggledRows=self.table.rowManager.getDisplayRows().slice(0).splice(fromRowIdx,toRowIdx-fromRowIdx+1);e.ctrlKey||e.metaKey?(toggledRows.forEach((function(toggledRow){toggledRow!==self.lastClickedRow&&(!0===self.table.options.selectable||self.isRowSelected(row)?self.toggleRow(toggledRow):self.selectedRows.length<self.table.options.selectable&&self.toggleRow(toggledRow))})),self.lastClickedRow=row):(self.deselectRows(void 0,!0),!0!==self.table.options.selectable&&toggledRows.length>self.table.options.selectable&&(toggledRows=toggledRows.slice(0,self.table.options.selectable)),self.selectRows(toggledRows)),self.table._clearSelection()}else e.ctrlKey||e.metaKey?(self.toggleRow(row),self.lastClickedRow=row):(self.deselectRows(void 0,!0),self.selectRows(row),self.lastClickedRow=row)})):(element.addEventListener("click",(function(e){self.table.modExists("edit")&&self.table.modules.edit.getCurrentCell()||self.table._clearSelection(),self.selecting||self.toggleRow(row)})),element.addEventListener("mousedown",(function(e){if(e.shiftKey)return self.table._clearSelection(),self.selecting=!0,self.selectPrev=[],document.body.addEventListener("mouseup",endSelect),document.body.addEventListener("keyup",endSelect),self.toggleRow(row),!1})),element.addEventListener("mouseenter",(function(e){self.selecting&&(self.table._clearSelection(),self.toggleRow(row),self.selectPrev[1]==row&&self.toggleRow(self.selectPrev[0]))})),element.addEventListener("mouseout",(function(e){self.selecting&&(self.table._clearSelection(),self.selectPrev.unshift(row))}))))):(element.classList.add("tabulator-unselectable"),element.classList.remove("tabulator-selectable"))},SelectRow.prototype.toggleRow=function(row){this.table.options.selectableCheck.call(this.table,row.getComponent())&&(row.modules.select&&row.modules.select.selected?this._deselectRow(row):this._selectRow(row))},SelectRow.prototype.selectRows=function(rows){var _this75=this,rowMatch;switch(void 0===rows?"undefined":_typeof(rows)){case"undefined":this.table.rowManager.rows.forEach((function(row){_this75._selectRow(row,!0,!0)})),this._rowSelectionChanged();break;case"string":(rowMatch=this.table.rowManager.findRow(rows))?this._selectRow(rowMatch,!0,!0):this.table.rowManager.getRows(rows).forEach((function(row){_this75._selectRow(row,!0,!0)})),this._rowSelectionChanged();break;default:Array.isArray(rows)?(rows.forEach((function(row){_this75._selectRow(row,!0,!0)})),this._rowSelectionChanged()):this._selectRow(rows,!1,!0)}},SelectRow.prototype._selectRow=function(rowInfo,silent,force){var index;if(!isNaN(this.table.options.selectable)&&!0!==this.table.options.selectable&&!force&&this.selectedRows.length>=this.table.options.selectable){if(!this.table.options.selectableRollingSelection)return!1;this._deselectRow(this.selectedRows[0])}var row=this.table.rowManager.findRow(rowInfo);row?-1==this.selectedRows.indexOf(row)&&(row.modules.select||(row.modules.select={}),row.modules.select.selected=!0,row.modules.select.checkboxEl&&(row.modules.select.checkboxEl.checked=!0),row.getElement().classList.add("tabulator-selected"),this.selectedRows.push(row),this.table.options.dataTreeSelectPropagate&&this.childRowSelection(row,!0),silent||this.table.options.rowSelected.call(this.table,row.getComponent()),this._rowSelectionChanged(silent)):silent||console.warn("Selection Error - No such row found, ignoring selection:"+rowInfo)},SelectRow.prototype.isRowSelected=function(row){return-1!==this.selectedRows.indexOf(row)},SelectRow.prototype.deselectRows=function(rows,silent){var self=this,rowCount;if(void 0===rows){rowCount=self.selectedRows.length;for(var _i13=0;_i13<rowCount;_i13++)self._deselectRow(self.selectedRows[0],!0);self._rowSelectionChanged(silent)}else Array.isArray(rows)?(rows.forEach((function(row){self._deselectRow(row,!0)})),self._rowSelectionChanged(silent)):self._deselectRow(rows,silent)},SelectRow.prototype._deselectRow=function(rowInfo,silent){var self=this,row=this.table.rowManager.findRow(rowInfo),index;row?(index=this.selectedRows.findIndex((function(selectedRow){return selectedRow==row})))>-1&&(row.modules.select||(row.modules.select={}),row.modules.select.selected=!1,row.modules.select.checkboxEl&&(row.modules.select.checkboxEl.checked=!1),row.getElement().classList.remove("tabulator-selected"),this.selectedRows.splice(index,1),this.table.options.dataTreeSelectPropagate&&this.childRowSelection(row,!1),silent||this.table.options.rowDeselected.call(this.table,row.getComponent()),this._rowSelectionChanged(silent)):silent||console.warn("Deselection Error - No such row found, ignoring selection:"+rowInfo)},SelectRow.prototype.getSelectedData=function(){var data=[];return this.selectedRows.forEach((function(row){data.push(row.getData())})),data},SelectRow.prototype.getSelectedRows=function(){var rows=[];return this.selectedRows.forEach((function(row){rows.push(row.getComponent())})),rows},SelectRow.prototype._rowSelectionChanged=function(silent){this.headerCheckboxElement&&(0===this.selectedRows.length?(this.headerCheckboxElement.checked=!1,this.headerCheckboxElement.indeterminate=!1):this.table.rowManager.rows.length===this.selectedRows.length?(this.headerCheckboxElement.checked=!0,this.headerCheckboxElement.indeterminate=!1):(this.headerCheckboxElement.indeterminate=!0,this.headerCheckboxElement.checked=!1)),silent||this.table.options.rowSelectionChanged.call(this.table,this.getSelectedData(),this.getSelectedRows())},SelectRow.prototype.registerRowSelectCheckbox=function(row,element){row._row.modules.select||(row._row.modules.select={}),row._row.modules.select.checkboxEl=element},SelectRow.prototype.registerHeaderSelectCheckbox=function(element){this.headerCheckboxElement=element},SelectRow.prototype.childRowSelection=function(row,select){var children=this.table.modules.dataTree.getChildren(row);if(select)for(var _iterator2=children,_isArray2=Array.isArray(_iterator2),_i14=0,_iterator2=_isArray2?_iterator2:_iterator2[Symbol.iterator]();;){var _ref2;if(_isArray2){if(_i14>=_iterator2.length)break;_ref2=_iterator2[_i14++]}else{if((_i14=_iterator2.next()).done)break;_ref2=_i14.value}var child=_ref2;this._selectRow(child,!0)}else for(var _iterator3=children,_isArray3=Array.isArray(_iterator3),_i15=0,_iterator3=_isArray3?_iterator3:_iterator3[Symbol.iterator]();;){var _ref3;if(_isArray3){if(_i15>=_iterator3.length)break;_ref3=_iterator3[_i15++]}else{if((_i15=_iterator3.next()).done)break;_ref3=_i15.value}var _child=_ref3;this._deselectRow(_child,!0)}},Tabulator.prototype.registerModule("selectRow",SelectRow);var Sort=function Sort(table){this.table=table,this.sortList=[],this.changed=!1};Sort.prototype.initializeColumn=function(column,content){var self=this,sorter=!1,colEl,arrowEl;switch(_typeof(column.definition.sorter)){case"string":self.sorters[column.definition.sorter]?sorter=self.sorters[column.definition.sorter]:console.warn("Sort Error - No such sorter found: ",column.definition.sorter);break;case"function":sorter=column.definition.sorter}column.modules.sort={sorter:sorter,dir:"none",params:column.definition.sorterParams||{},startingDir:column.definition.headerSortStartingDir||"asc",tristate:void 0!==column.definition.headerSortTristate?column.definition.headerSortTristate:this.table.options.headerSortTristate},(void 0===column.definition.headerSort?!1!==this.table.options.headerSort:!1!==column.definition.headerSort)&&((colEl=column.getElement()).classList.add("tabulator-sortable"),(arrowEl=document.createElement("div")).classList.add("tabulator-arrow"),content.appendChild(arrowEl),colEl.addEventListener("click",(function(e){var dir="",sorters=[],match=!1;if(column.modules.sort){if(column.modules.sort.tristate)dir="none"==column.modules.sort.dir?column.modules.sort.startingDir:column.modules.sort.dir==column.modules.sort.startingDir?"asc"==column.modules.sort.dir?"desc":"asc":"none";else switch(column.modules.sort.dir){case"asc":dir="desc";break;case"desc":dir="asc";break;default:dir=column.modules.sort.startingDir}self.table.options.columnHeaderSortMulti&&(e.shiftKey||e.ctrlKey)?((match=(sorters=self.getSort()).findIndex((function(sorter){return sorter.field===column.getField()})))>-1?(sorters[match].dir=dir,match!=sorters.length-1&&(match=sorters.splice(match,1)[0],"none"!=dir&&sorters.push(match))):"none"!=dir&&sorters.push({column:column,dir:dir}),self.setSort(sorters)):"none"==dir?self.clear():self.setSort(column,dir),self.table.rowManager.sorterRefresh(!self.sortList.length)}})))},Sort.prototype.hasChanged=function(){var changed=this.changed;return this.changed=!1,changed},Sort.prototype.getSort=function(){var self=this,sorters=[];return this.sortList.forEach((function(item){item.column&&sorters.push({column:item.column.getComponent(),field:item.column.getField(),dir:item.dir})})),sorters},Sort.prototype.setSort=function(sortList,dir){var self=this,newSortList=[];Array.isArray(sortList)||(sortList=[{column:sortList,dir:dir}]),sortList.forEach((function(item){var column;(column=self.table.columnManager.findColumn(item.column))?(item.column=column,newSortList.push(item),self.changed=!0):console.warn("Sort Warning - Sort field does not exist and is being ignored: ",item.column)})),self.sortList=newSortList,this.table.options.persistence&&this.table.modExists("persistence",!0)&&this.table.modules.persistence.config.sort&&this.table.modules.persistence.save("sort")},Sort.prototype.clear=function(){this.setSort([])},Sort.prototype.findSorter=function(column){var row=this.table.rowManager.activeRows[0],sorter="string",field,value;if(row&&(row=row.getData(),field=column.getField()))switch(void 0===(value=column.getFieldValue(row))?"undefined":_typeof(value)){case"undefined":sorter="string";break;case"boolean":sorter="boolean";break;default:isNaN(value)||""===value?value.match(/((^[0-9]+[a-z]+)|(^[a-z]+[0-9]+))+$/i)&&(sorter="alphanum"):sorter="number"}return this.sorters[sorter]},Sort.prototype.sort=function(data){var self=this,sortList=this.table.options.sortOrderReverse?self.sortList.slice().reverse():self.sortList,sortListActual=[],rowComponents=[],lastSort;self.table.options.dataSorting&&self.table.options.dataSorting.call(self.table,self.getSort()),self.clearColumnHeaders(),self.table.options.ajaxSorting?sortList.forEach((function(item,i){self.setColumnHeader(item.column,item.dir)})):(sortList.forEach((function(item,i){var sortObj=item.column.modules.sort;item.column&&sortObj&&(sortObj.sorter||(sortObj.sorter=self.findSorter(item.column)),item.params="function"==typeof sortObj.params?sortObj.params(item.column.getComponent(),item.dir):sortObj.params,sortListActual.push(item)),self.setColumnHeader(item.column,item.dir)})),sortListActual.length&&self._sortItems(data,sortListActual)),self.table.options.dataSorted&&(data.forEach((function(row){rowComponents.push(row.getComponent())})),self.table.options.dataSorted.call(self.table,self.getSort(),rowComponents))},Sort.prototype.clearColumnHeaders=function(){this.table.columnManager.getRealColumns().forEach((function(column){column.modules.sort&&(column.modules.sort.dir="none",column.getElement().setAttribute("aria-sort","none"))}))},Sort.prototype.setColumnHeader=function(column,dir){column.modules.sort.dir=dir,column.getElement().setAttribute("aria-sort",dir)},Sort.prototype._sortItems=function(data,sortList){var _this76=this,sorterCount=sortList.length-1;data.sort((function(a,b){for(var result,i=sorterCount;i>=0;i--){var sortItem=sortList[i];if(0!==(result=_this76._sortRow(a,b,sortItem.column,sortItem.dir,sortItem.params)))break}return result}))},Sort.prototype._sortRow=function(a,b,column,dir,params){var el1Comp,el2Comp,colComp,el1="asc"==dir?a:b,el2="asc"==dir?b:a;return a=void 0!==(a=column.getFieldValue(el1.getData()))?a:"",b=void 0!==(b=column.getFieldValue(el2.getData()))?b:"",el1Comp=el1.getComponent(),el2Comp=el2.getComponent(),column.modules.sort.sorter.call(this,a,b,el1Comp,el2Comp,column.getComponent(),dir,params)},Sort.prototype.sorters={number:function number(a,b,aRow,bRow,column,dir,params){var alignEmptyValues=params.alignEmptyValues,decimal=params.decimalSeparator||".",thousand=params.thousandSeparator||",",emptyAlign=0;if(a=parseFloat(String(a).split(thousand).join("").split(decimal).join(".")),b=parseFloat(String(b).split(thousand).join("").split(decimal).join(".")),isNaN(a))emptyAlign=isNaN(b)?0:-1;else{if(!isNaN(b))return a-b;emptyAlign=1}return("top"===alignEmptyValues&&"desc"===dir||"bottom"===alignEmptyValues&&"asc"===dir)&&(emptyAlign*=-1),emptyAlign},string:function string(a,b,aRow,bRow,column,dir,params){var alignEmptyValues=params.alignEmptyValues,emptyAlign=0,locale;if(a){if(b){switch(_typeof(params.locale)){case"boolean":params.locale&&(locale=this.table.modules.localize.getLocale());break;case"string":locale=params.locale}return String(a).toLowerCase().localeCompare(String(b).toLowerCase(),locale)}emptyAlign=1}else emptyAlign=b?-1:0;return("top"===alignEmptyValues&&"desc"===dir||"bottom"===alignEmptyValues&&"asc"===dir)&&(emptyAlign*=-1),emptyAlign},date:function date(a,b,aRow,bRow,column,dir,params){return params.format||(params.format="DD/MM/YYYY"),this.sorters.datetime.call(this,a,b,aRow,bRow,column,dir,params)},time:function time(a,b,aRow,bRow,column,dir,params){return params.format||(params.format="HH:mm"),this.sorters.datetime.call(this,a,b,aRow,bRow,column,dir,params)},datetime:function datetime(a,b,aRow,bRow,column,dir,params){var format=params.format||"DD/MM/YYYY HH:mm:ss",alignEmptyValues=params.alignEmptyValues,emptyAlign=0;if("undefined"!=typeof moment){if(a=moment(a,format),b=moment(b,format),a.isValid()){if(b.isValid())return a-b;emptyAlign=1}else emptyAlign=b.isValid()?-1:0;return("top"===alignEmptyValues&&"desc"===dir||"bottom"===alignEmptyValues&&"asc"===dir)&&(emptyAlign*=-1),emptyAlign}console.error("Sort Error - 'datetime' sorter is dependant on moment.js")},boolean:function boolean(a,b,aRow,bRow,column,dir,params){var el1,el2;return(!0===a||"true"===a||"True"===a||1===a?1:0)-(!0===b||"true"===b||"True"===b||1===b?1:0)},array:function array(a,b,aRow,bRow,column,dir,params){var el1=0,el2=0,type=params.type||"length",alignEmptyValues=params.alignEmptyValues,emptyAlign=0;function calc(value){switch(type){case"length":return value.length;case"sum":return value.reduce((function(c,d){return c+d}));case"max":return Math.max.apply(null,value);case"min":return Math.min.apply(null,value);case"avg":return value.reduce((function(c,d){return c+d}))/value.length}}if(Array.isArray(a)){if(Array.isArray(b))return(el1=a?calc(a):0)-(el2=b?calc(b):0);alignEmptyValues=1}else alignEmptyValues=Array.isArray(b)?-1:0;return("top"===alignEmptyValues&&"desc"===dir||"bottom"===alignEmptyValues&&"asc"===dir)&&(emptyAlign*=-1),emptyAlign},exists:function exists(a,b,aRow,bRow,column,dir,params){var el1,el2;return(void 0===a?0:1)-(void 0===b?0:1)},alphanum:function alphanum(as,bs,aRow,bRow,column,dir,params){var a,b,a1,b1,i=0,L,rx=/(\d+)|(\D+)/g,rd=/\d/,alignEmptyValues=params.alignEmptyValues,emptyAlign=0;if(as||0===as){if(bs||0===bs){if(isFinite(as)&&isFinite(bs))return as-bs;if((a=String(as).toLowerCase())===(b=String(bs).toLowerCase()))return 0;if(!rd.test(a)||!rd.test(b))return a>b?1:-1;for(a=a.match(rx),b=b.match(rx),L=a.length>b.length?b.length:a.length;i<L;)if((a1=a[i])!==(b1=b[i++]))return isFinite(a1)&&isFinite(b1)?("0"===a1.charAt(0)&&(a1="."+a1),"0"===b1.charAt(0)&&(b1="."+b1),a1-b1):a1>b1?1:-1;return a.length>b.length}emptyAlign=1}else emptyAlign=bs||0===bs?-1:0;return("top"===alignEmptyValues&&"desc"===dir||"bottom"===alignEmptyValues&&"asc"===dir)&&(emptyAlign*=-1),emptyAlign}},Tabulator.prototype.registerModule("sort",Sort);var Validate=function Validate(table){this.table=table,this.invalidCells=[]};return Validate.prototype.initializeColumn=function(column){var self=this,config=[],validator;column.definition.validator&&(Array.isArray(column.definition.validator)?column.definition.validator.forEach((function(item){(validator=self._extractValidator(item))&&config.push(validator)})):(validator=this._extractValidator(column.definition.validator))&&config.push(validator),column.modules.validate=!!config.length&&config)},Validate.prototype._extractValidator=function(value){var type,params,pos;switch(void 0===value?"undefined":_typeof(value)){case"string":return(pos=value.indexOf(":"))>-1?(type=value.substring(0,pos),params=value.substring(pos+1)):type=value,this._buildValidator(type,params);case"function":return this._buildValidator(value);case"object":return this._buildValidator(value.type,value.parameters)}},Validate.prototype._buildValidator=function(type,params){var func="function"==typeof type?type:this.validators[type];return func?{type:"function"==typeof type?"function":type,func:func,params:params}:(console.warn("Validator Setup Error - No matching validator found:",type),!1)},Validate.prototype.validate=function(validators,cell,value){var self=this,valid=[],invalidIndex=this.invalidCells.indexOf(cell);return validators&&validators.forEach((function(item){item.func.call(self,cell.getComponent(),value,item.params)||valid.push({type:item.type,parameters:item.params})})),valid=!valid.length||valid,cell.modules.validate||(cell.modules.validate={}),!0===valid?(cell.modules.validate.invalid=!1,cell.getElement().classList.remove("tabulator-validation-fail"),invalidIndex>-1&&this.invalidCells.splice(invalidIndex,1)):(cell.modules.validate.invalid=!0,"manual"!==this.table.options.validationMode&&cell.getElement().classList.add("tabulator-validation-fail"),-1==invalidIndex&&this.invalidCells.push(cell)),valid},Validate.prototype.getInvalidCells=function(){var output=[];return this.invalidCells.forEach((function(cell){output.push(cell.getComponent())})),output},Validate.prototype.clearValidation=function(cell){var invalidIndex;cell.modules.validate&&cell.modules.validate.invalid&&(cell.element.classList.remove("tabulator-validation-fail"),cell.modules.validate.invalid=!1,(invalidIndex=this.invalidCells.indexOf(cell))>-1&&this.invalidCells.splice(invalidIndex,1))},Validate.prototype.validators={integer:function integer(cell,value,parameters){return""===value||null==value||"number"==typeof(value=Number(value))&&isFinite(value)&&Math.floor(value)===value},float:function float(cell,value,parameters){return""===value||null==value||"number"==typeof(value=Number(value))&&isFinite(value)&&value%1!=0},numeric:function numeric(cell,value,parameters){return""===value||null==value||!isNaN(value)},string:function string(cell,value,parameters){return""===value||null==value||isNaN(value)},max:function max(cell,value,parameters){return""===value||null==value||parseFloat(value)<=parameters},min:function min(cell,value,parameters){return""===value||null==value||parseFloat(value)>=parameters},starts:function starts(cell,value,parameters){return""===value||null==value||String(value).toLowerCase().startsWith(String(parameters).toLowerCase())},ends:function ends(cell,value,parameters){return""===value||null==value||String(value).toLowerCase().endsWith(String(parameters).toLowerCase())},minLength:function minLength(cell,value,parameters){return""===value||null==value||String(value).length>=parameters},maxLength:function maxLength(cell,value,parameters){return""===value||null==value||String(value).length<=parameters},in:function _in(cell,value,parameters){return""===value||null==value||("string"==typeof parameters&&(parameters=parameters.split("|")),""===value||parameters.indexOf(value)>-1)},regex:function regex(cell,value,parameters){return""===value||null==value||new RegExp(parameters).test(value);var reg},unique:function unique(cell,value,parameters){if(""===value||null==value)return!0;var unique=!0,cellData=cell.getData(),column=cell.getColumn()._getSelf();return this.table.rowManager.rows.forEach((function(row){var data=row.getData();data!==cellData&&value==column.getFieldValue(data)&&(unique=!1)})),unique},required:function required(cell,value,parameters){return""!==value&&null!=value}},Tabulator.prototype.registerModule("validate",Validate),Tabulator}));
\ No newline at end of file
diff --git a/admin/js/vendors/tabulator/js/tabulator.min.orig.js b/admin/js/vendors/tabulator/js/tabulator.min.orig.js
new file mode 100644 (file)
index 0000000..74f4780
--- /dev/null
@@ -0,0 +1,12 @@
+/* Tabulator v4.7.0 (c) Oliver Folkerd */
+var _typeof="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};!function(e,t){"object"===("undefined"==typeof exports?"undefined":_typeof(exports))&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):e.Tabulator=t()}(this,function(){"use strict";Array.prototype.findIndex||Object.defineProperty(Array.prototype,"findIndex",{value:function(e){if(null==this)throw new TypeError('"this" is null or not defined');var t=Object(this),o=t.length>>>0;if("function"!=typeof e)throw new TypeError("predicate must be a function");for(var i=arguments[1],n=0;n<o;){var s=t[n];if(e.call(i,s,n,t))return n;n++}return-1}}),Array.prototype.find||Object.defineProperty(Array.prototype,"find",{value:function(e){if(null==this)throw new TypeError('"this" is null or not defined');var t=Object(this),o=t.length>>>0;if("function"!=typeof e)throw new TypeError("predicate must be a function");for(var i=arguments[1],n=0;n<o;){var s=t[n];if(e.call(i,s,n,t))return s;n++}}}),String.prototype.includes||(String.prototype.includes=function(e,t){if(e instanceof RegExp)throw TypeError("first argument must not be a RegExp");return void 0===t&&(t=0),-1!==this.indexOf(e,t)}),Array.prototype.includes||Object.defineProperty(Array.prototype,"includes",{value:function(e,t){if(null==this)throw new TypeError('"this" is null or not defined');var o=Object(this),i=o.length>>>0;if(0===i)return!1;for(var n=0|t,s=Math.max(n>=0?n:i-Math.abs(n),0);s<i;){if(function(e,t){return e===t||"number"==typeof e&&"number"==typeof t&&isNaN(e)&&isNaN(t)}(o[s],e))return!0;s++}return!1}}),"function"!=typeof Object.assign&&Object.defineProperty(Object,"assign",{value:function(e,t){if(null===e||void 0===e)throw new TypeError("Cannot convert undefined or null to object");for(var o=Object(e),i=1;i<arguments.length;i++){var n=arguments[i];if(null!==n&&void 0!==n)for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(o[s]=n[s])}return o},writable:!0,configurable:!0});var t=function(e){this.table=e,this.blockHozScrollEvent=!1,this.headersElement=this.createHeadersElement(),this.element=this.createHeaderElement(),this.rowManager=null,this.columns=[],this.columnsByIndex=[],this.columnsByField={},this.scrollLeft=0,this.element.insertBefore(this.headersElement,this.element.firstChild)};t.prototype.createHeadersElement=function(){var e=document.createElement("div");return e.classList.add("tabulator-headers"),e},t.prototype.createHeaderElement=function(){var e=document.createElement("div");return e.classList.add("tabulator-header"),this.table.options.headerVisible||e.classList.add("tabulator-header-hidden"),e},t.prototype.initialize=function(){},t.prototype.setRowManager=function(e){this.rowManager=e},t.prototype.getElement=function(){return this.element},t.prototype.getHeadersElement=function(){return this.headersElement},t.prototype.scrollHorizontal=function(e){var t=0,o=this.element.scrollWidth-this.table.element.clientWidth;this.element.scrollLeft=e,e>o?(t=e-o,this.element.style.marginLeft=-t+"px"):this.element.style.marginLeft=0,this.scrollLeft=e,this.table.modExists("frozenColumns")&&this.table.modules.frozenColumns.scrollHorizontal()},t.prototype.generateColumnsFromRowData=function(e){var t,o,i=[];if(e&&e.length){t=e[0];for(var n in t){var s={field:n,title:n},r=t[n];switch(void 0===r?"undefined":_typeof(r)){case"undefined":o="string";break;case"boolean":o="boolean";break;case"object":o=Array.isArray(r)?"array":"string";break;default:o=isNaN(r)||""===r?r.match(/((^[0-9]+[a-z]+)|(^[a-z]+[0-9]+))+$/i)?"alphanum":"string":"number"}s.sorter=o,i.push(s)}this.table.options.columns=i,this.setColumns(this.table.options.columns)}},t.prototype.setColumns=function(e,t){for(var o=this;o.headersElement.firstChild;)o.headersElement.removeChild(o.headersElement.firstChild);o.columns=[],o.columnsByIndex=[],o.columnsByField={},o.table.modExists("frozenColumns")&&o.table.modules.frozenColumns.reset(),e.forEach(function(e,t){o._addColumn(e)}),o._reIndexColumns(),o.table.options.responsiveLayout&&o.table.modExists("responsiveLayout",!0)&&o.table.modules.responsiveLayout.initialize(),o.redraw(!0)},t.prototype._addColumn=function(e,t,o){var i=new n(e,this),s=i.getElement(),r=o?this.findColumnIndex(o):o;if(o&&r>-1){var a=this.columns.indexOf(o.getTopColumn()),l=o.getElement();t?(this.columns.splice(a,0,i),l.parentNode.insertBefore(s,l)):(this.columns.splice(a+1,0,i),l.parentNode.insertBefore(s,l.nextSibling))}else t?(this.columns.unshift(i),this.headersElement.insertBefore(i.getElement(),this.headersElement.firstChild)):(this.columns.push(i),this.headersElement.appendChild(i.getElement())),i.columnRendered();return i},t.prototype.registerColumnField=function(e){e.definition.field&&(this.columnsByField[e.definition.field]=e)},t.prototype.registerColumnPosition=function(e){this.columnsByIndex.push(e)},t.prototype._reIndexColumns=function(){this.columnsByIndex=[],this.columns.forEach(function(e){e.reRegisterPosition()})},t.prototype._verticalAlignHeaders=function(){var e=this,t=0;e.columns.forEach(function(e){var o;e.clearVerticalAlign(),(o=e.getHeight())>t&&(t=o)}),e.columns.forEach(function(o){o.verticalAlign(e.table.options.columnHeaderVertAlign,t)}),e.rowManager.adjustTableSize()},t.prototype.findColumn=function(e){var t=this;if("object"!=(void 0===e?"undefined":_typeof(e)))return this.columnsByField[e]||!1;if(e instanceof n)return e;if(e instanceof o)return e._getSelf()||!1;if("undefined"!=typeof HTMLElement&&e instanceof HTMLElement){return t.columns.find(function(t){return t.element===e})||!1}return!1},t.prototype.getColumnByField=function(e){return this.columnsByField[e]},t.prototype.getColumnsByFieldRoot=function(e){var t=this,o=[];return Object.keys(this.columnsByField).forEach(function(i){i.split(".")[0]===e&&o.push(t.columnsByField[i])}),o},t.prototype.getColumnByIndex=function(e){return this.columnsByIndex[e]},t.prototype.getFirstVisibileColumn=function(e){var e=this.columnsByIndex.findIndex(function(e){return e.visible});return e>-1&&this.columnsByIndex[e]},t.prototype.getColumns=function(){return this.columns},t.prototype.findColumnIndex=function(e){return this.columnsByIndex.findIndex(function(t){return e===t})},t.prototype.getRealColumns=function(){return this.columnsByIndex},t.prototype.traverse=function(e){this.columnsByIndex.forEach(function(t,o){e(t,o)})},t.prototype.getDefinitions=function(e){var t=this,o=[];return t.columnsByIndex.forEach(function(t){(!e||e&&t.visible)&&o.push(t.getDefinition())}),o},t.prototype.getDefinitionTree=function(){var e=this,t=[];return e.columns.forEach(function(e){t.push(e.getDefinition(!0))}),t},t.prototype.getComponents=function(e){var t=this,o=[];return(e?t.columns:t.columnsByIndex).forEach(function(e){o.push(e.getComponent())}),o},t.prototype.getWidth=function(){var e=0;return this.columnsByIndex.forEach(function(t){t.visible&&(e+=t.getWidth())}),e},t.prototype.moveColumn=function(e,t,o){this.moveColumnActual(e,t,o),this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.initialize(),this.table.modExists("columnCalcs")&&this.table.modules.columnCalcs.recalc(this.table.rowManager.activeRows),t.element.parentNode.insertBefore(e.element,t.element),o&&t.element.parentNode.insertBefore(t.element,e.element),this._verticalAlignHeaders(),this.table.rowManager.reinitialize()},t.prototype.moveColumnActual=function(e,t,o){e.parent.isGroup?this._moveColumnInArray(e.parent.columns,e,t,o):this._moveColumnInArray(this.columns,e,t,o),this._moveColumnInArray(this.columnsByIndex,e,t,o,!0),this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.initialize(),this.table.options.columnMoved&&this.table.options.columnMoved.call(this.table,e.getComponent(),this.table.columnManager.getComponents()),this.table.options.persistence&&this.table.modExists("persistence",!0)&&this.table.modules.persistence.config.columns&&this.table.modules.persistence.save("columns")},t.prototype._moveColumnInArray=function(e,t,o,i,n){var s,r=e.indexOf(t);r>-1&&(e.splice(r,1),s=e.indexOf(o),s>-1?i&&(s+=1):s=r,e.splice(s,0,t),n&&this.table.rowManager.rows.forEach(function(e){if(e.cells.length){var t=e.cells.splice(r,1)[0];e.cells.splice(s,0,t)}}))},t.prototype.scrollToColumn=function(e,t,o){var i=this,n=0,s=0,r=0,a=e.getElement();return new Promise(function(l,c){if(void 0===t&&(t=i.table.options.scrollToColumnPosition),void 0===o&&(o=i.table.options.scrollToColumnIfVisible),e.visible){switch(t){case"middle":case"center":r=-i.element.clientWidth/2;break;case"right":r=a.clientWidth-i.headersElement.clientWidth}if(!o&&(s=a.offsetLeft)>0&&s+a.offsetWidth<i.element.clientWidth)return!1;n=a.offsetLeft+i.element.scrollLeft+r,n=Math.max(Math.min(n,i.table.rowManager.element.scrollWidth-i.table.rowManager.element.clientWidth),0),i.table.rowManager.scrollHorizontal(n),i.scrollHorizontal(n),l()}else console.warn("Scroll Error - Column not visible"),c("Scroll Error - Column not visible")})},t.prototype.generateCells=function(e){var t=this,o=[];return t.columnsByIndex.forEach(function(t){o.push(t.generateCell(e))}),o},t.prototype.getFlexBaseWidth=function(){var e=this,t=e.table.element.clientWidth,o=0;return e.rowManager.element.scrollHeight>e.rowManager.element.clientHeight&&(t-=e.rowManager.element.offsetWidth-e.rowManager.element.clientWidth),this.columnsByIndex.forEach(function(i){var n,s,r;i.visible&&(n=i.definition.width||0,s=void 0===i.minWidth?e.table.options.columnMinWidth:parseInt(i.minWidth),r="string"==typeof n?n.indexOf("%")>-1?t/100*parseInt(n):parseInt(n):n,o+=r>s?r:s)}),o},t.prototype.addColumn=function(e,t,o){var i=this;return new Promise(function(n,s){var r=i._addColumn(e,t,o);i._reIndexColumns(),i.table.options.responsiveLayout&&i.table.modExists("responsiveLayout",!0)&&i.table.modules.responsiveLayout.initialize(),i.table.modExists("columnCalcs")&&i.table.modules.columnCalcs.recalc(i.table.rowManager.activeRows),i.redraw(),"fitColumns"!=i.table.modules.layout.getMode()&&r.reinitializeWidth(),i._verticalAlignHeaders(),i.table.rowManager.reinitialize(),n(r)})},t.prototype.deregisterColumn=function(e){var t,o=e.getField();o&&delete this.columnsByField[o],t=this.columnsByIndex.indexOf(e),t>-1&&this.columnsByIndex.splice(t,1),t=this.columns.indexOf(e),t>-1&&this.columns.splice(t,1),this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.initialize(),this.redraw()},t.prototype.redraw=function(e){e&&(d.prototype.helpers.elVisible(this.element)&&this._verticalAlignHeaders(),this.table.rowManager.resetScroll(),this.table.rowManager.reinitialize()),["fitColumns","fitDataStretch"].indexOf(this.table.modules.layout.getMode())>-1?this.table.modules.layout.layout():e?this.table.modules.layout.layout():this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.update(),this.table.modExists("frozenColumns")&&this.table.modules.frozenColumns.layout(),this.table.modExists("columnCalcs")&&this.table.modules.columnCalcs.recalc(this.table.rowManager.activeRows),e&&(this.table.options.persistence&&this.table.modExists("persistence",!0)&&this.table.modules.persistence.config.columns&&this.table.modules.persistence.save("columns"),this.table.modExists("columnCalcs")&&this.table.modules.columnCalcs.redraw()),this.table.footerManager.redraw()};var o=function(e){this._column=e,this.type="ColumnComponent"};o.prototype.getElement=function(){return this._column.getElement()},o.prototype.getDefinition=function(){return this._column.getDefinition()},o.prototype.getField=function(){return this._column.getField()},o.prototype.getCells=function(){var e=[];return this._column.cells.forEach(function(t){e.push(t.getComponent())}),e},o.prototype.getVisibility=function(){return console.warn("getVisibility function is deprecated, you should now use the isVisible function"),this._column.visible},o.prototype.isVisible=function(){return this._column.visible},o.prototype.show=function(){this._column.isGroup?this._column.columns.forEach(function(e){e.show()}):this._column.show()},o.prototype.hide=function(){this._column.isGroup?this._column.columns.forEach(function(e){e.hide()}):this._column.hide()},o.prototype.toggle=function(){this._column.visible?this.hide():this.show()},o.prototype.delete=function(){return this._column.delete()},o.prototype.getSubColumns=function(){var e=[];return this._column.columns.length&&this._column.columns.forEach(function(t){e.push(t.getComponent())}),e},o.prototype.getParentColumn=function(){return this._column.parent instanceof n&&this._column.parent.getComponent()},o.prototype._getSelf=function(){return this._column},o.prototype.scrollTo=function(){return this._column.table.columnManager.scrollToColumn(this._column)},o.prototype.getTable=function(){return this._column.table},o.prototype.headerFilterFocus=function(){this._column.table.modExists("filter",!0)&&this._column.table.modules.filter.setHeaderFilterFocus(this._column)},o.prototype.reloadHeaderFilter=function(){this._column.table.modExists("filter",!0)&&this._column.table.modules.filter.reloadHeaderFilter(this._column)},o.prototype.getHeaderFilterValue=function(){if(this._column.table.modExists("filter",!0))return this._column.table.modules.filter.getHeaderFilterValue(this._column)},o.prototype.setHeaderFilterValue=function(e){this._column.table.modExists("filter",!0)&&this._column.table.modules.filter.setHeaderFilterValue(this._column,e)},o.prototype.move=function(e,t){var o=this._column.table.columnManager.findColumn(e);o?this._column.table.columnManager.moveColumn(this._column,o,t):console.warn("Move Error - No matching column found:",o)},o.prototype.getNextColumn=function(){var e=this._column.nextColumn();return!!e&&e.getComponent()},o.prototype.getPrevColumn=function(){var e=this._column.prevColumn();return!!e&&e.getComponent()},o.prototype.updateDefinition=function(e){return this._column.updateDefinition(e)},o.prototype.getWidth=function(){return this._column.getWidth()},o.prototype.setWidth=function(e){return!0===e?this._column.reinitializeWidth(!0):this._column.setWidth(e)},o.prototype.validate=function(){return this._column.validate()};var n=function e(t,o){var i=this;this.table=o.table,this.definition=t,this.parent=o,this.type="column",this.columns=[],this.cells=[],this.element=this.createElement(),this.contentElement=!1,this.titleElement=!1,this.groupElement=this.createGroupElement(),this.isGroup=!1,this.tooltip=!1,this.hozAlign="",this.vertAlign="",this.field="",this.fieldStructure="",this.getFieldValue="",this.setFieldValue="",this.titleFormatterRendered=!1,this.setField(this.definition.field),this.table.options.invalidOptionWarnings&&this.checkDefinition(),this.modules={},this.cellEvents={cellClick:!1,cellDblClick:!1,cellContext:!1,cellTap:!1,cellDblTap:!1,cellTapHold:!1,cellMouseEnter:!1,cellMouseLeave:!1,cellMouseOver:!1,cellMouseOut:!1,cellMouseMove:!1},this.width=null,this.widthStyled="",this.minWidth=null,this.minWidthStyled="",this.widthFixed=!1,this.visible=!0,this.component=null,this._mapDepricatedFunctionality(),t.columns?(this.isGroup=!0,t.columns.forEach(function(t,o){var n=new e(t,i);i.attachColumn(n)}),i.checkColumnVisibility()):o.registerColumnField(this),t.rowHandle&&!1!==this.table.options.movableRows&&this.table.modExists("moveRow")&&this.table.modules.moveRow.setHandle(!0),this._buildHeader(),this.bindModuleColumns()};n.prototype.createElement=function(){var e=document.createElement("div");return e.classList.add("tabulator-col"),e.setAttribute("role","columnheader"),e.setAttribute("aria-sort","none"),e},n.prototype.createGroupElement=function(){var e=document.createElement("div");return e.classList.add("tabulator-col-group-cols"),e},n.prototype.checkDefinition=function(){var e=this;Object.keys(this.definition).forEach(function(t){-1===e.defaultOptionList.indexOf(t)&&console.warn("Invalid column definition option in '"+(e.field||e.definition.title)+"' column:",t)})},n.prototype.setField=function(e){this.field=e,this.fieldStructure=e?this.table.options.nestedFieldSeparator?e.split(this.table.options.nestedFieldSeparator):[e]:[],this.getFieldValue=this.fieldStructure.length>1?this._getNestedData:this._getFlatData,this.setFieldValue=this.fieldStructure.length>1?this._setNestedData:this._setFlatData},n.prototype.registerColumnPosition=function(e){this.parent.registerColumnPosition(e)},n.prototype.registerColumnField=function(e){this.parent.registerColumnField(e)},n.prototype.reRegisterPosition=function(){this.isGroup?this.columns.forEach(function(e){e.reRegisterPosition()}):this.registerColumnPosition(this)},n.prototype._mapDepricatedFunctionality=function(){void 0!==this.definition.hideInHtml&&(this.definition.htmlOutput=!this.definition.hideInHtml,console.warn("hideInHtml column definition property is deprecated, you should now use htmlOutput")),void 0!==this.definition.align&&(this.definition.hozAlign=this.definition.align,console.warn("align column definition property is deprecated, you should now use hozAlign")),void 0!==this.definition.downloadTitle&&(this.definition.titleDownload=this.definition.downloadTitle,console.warn("downloadTitle definition property is deprecated, you should now use titleDownload"))},n.prototype.setTooltip=function(){var e=this,t=e.definition,o=t.headerTooltip||!1===t.tooltip?t.headerTooltip:e.table.options.tooltipsHeader;o?!0===o?t.field?e.table.modules.localize.bind("columns|"+t.field,function(o){e.element.setAttribute("title",o||t.title)}):e.element.setAttribute("title",t.title):("function"==typeof o&&!1===(o=o(e.getComponent()))&&(o=""),e.element.setAttribute("title",o)):e.element.setAttribute("title","")},n.prototype._buildHeader=function(){for(var e=this,t=e.definition;e.element.firstChild;)e.element.removeChild(e.element.firstChild);t.headerVertical&&(e.element.classList.add("tabulator-col-vertical"),"flip"===t.headerVertical&&e.element.classList.add("tabulator-col-vertical-flip")),e.contentElement=e._bindEvents(),e.contentElement=e._buildColumnHeaderContent(),e.element.appendChild(e.contentElement),e.isGroup?e._buildGroupHeader():e._buildColumnHeader(),e.setTooltip(),e.table.options.resizableColumns&&e.table.modExists("resizeColumns")&&e.table.modules.resizeColumns.initializeColumn("header",e,e.element),t.headerFilter&&e.table.modExists("filter")&&e.table.modExists("edit")&&(void 0!==t.headerFilterPlaceholder&&t.field&&e.table.modules.localize.setHeaderFilterColumnPlaceholder(t.field,t.headerFilterPlaceholder),e.table.modules.filter.initializeColumn(e)),e.table.modExists("frozenColumns")&&e.table.modules.frozenColumns.initializeColumn(e),e.table.options.movableColumns&&!e.isGroup&&e.table.modExists("moveColumn")&&e.table.modules.moveColumn.initializeColumn(e),(t.topCalc||t.bottomCalc)&&e.table.modExists("columnCalcs")&&e.table.modules.columnCalcs.initializeColumn(e),e.table.modExists("persistence")&&e.table.modules.persistence.config.columns&&e.table.modules.persistence.initializeColumn(e),e.element.addEventListener("mouseenter",function(t){e.setTooltip()})},n.prototype._bindEvents=function(){var e,t,o,i=this,n=i.definition;"function"==typeof n.headerClick&&i.element.addEventListener("click",function(e){n.headerClick(e,i.getComponent())}),"function"==typeof n.headerDblClick&&i.element.addEventListener("dblclick",function(e){n.headerDblClick(e,i.getComponent())}),"function"==typeof n.headerContext&&i.element.addEventListener("contextmenu",function(e){n.headerContext(e,i.getComponent())}),"function"==typeof n.headerTap&&(o=!1,i.element.addEventListener("touchstart",function(e){o=!0},{passive:!0}),i.element.addEventListener("touchend",function(e){o&&n.headerTap(e,i.getComponent()),o=!1})),"function"==typeof n.headerDblTap&&(e=null,i.element.addEventListener("touchend",function(t){e?(clearTimeout(e),e=null,n.headerDblTap(t,i.getComponent())):e=setTimeout(function(){clearTimeout(e),e=null},300)})),"function"==typeof n.headerTapHold&&(t=null,i.element.addEventListener("touchstart",function(e){clearTimeout(t),t=setTimeout(function(){clearTimeout(t),t=null,o=!1,n.headerTapHold(e,i.getComponent())},1e3)},{passive:!0}),i.element.addEventListener("touchend",function(e){clearTimeout(t),t=null})),"function"==typeof n.cellClick&&(i.cellEvents.cellClick=n.cellClick),"function"==typeof n.cellDblClick&&(i.cellEvents.cellDblClick=n.cellDblClick),"function"==typeof n.cellContext&&(i.cellEvents.cellContext=n.cellContext),"function"==typeof n.cellMouseEnter&&(i.cellEvents.cellMouseEnter=n.cellMouseEnter),"function"==typeof n.cellMouseLeave&&(i.cellEvents.cellMouseLeave=n.cellMouseLeave),"function"==typeof n.cellMouseOver&&(i.cellEvents.cellMouseOver=n.cellMouseOver),"function"==typeof n.cellMouseOut&&(i.cellEvents.cellMouseOut=n.cellMouseOut),"function"==typeof n.cellMouseMove&&(i.cellEvents.cellMouseMove=n.cellMouseMove),"function"==typeof n.cellTap&&(i.cellEvents.cellTap=n.cellTap),"function"==typeof n.cellDblTap&&(i.cellEvents.cellDblTap=n.cellDblTap),"function"==typeof n.cellTapHold&&(i.cellEvents.cellTapHold=n.cellTapHold),"function"==typeof n.cellEdited&&(i.cellEvents.cellEdited=n.cellEdited),"function"==typeof n.cellEditing&&(i.cellEvents.cellEditing=n.cellEditing),"function"==typeof n.cellEditCancelled&&(i.cellEvents.cellEditCancelled=n.cellEditCancelled)},n.prototype._buildColumnHeader=function(){var e=this,t=e.definition,o=e.table;if(o.modExists("sort")&&o.modules.sort.initializeColumn(e,e.contentElement),(t.headerContextMenu||t.headerMenu)&&o.modExists("menu")&&o.modules.menu.initializeColumnHeader(e),o.modExists("format")&&o.modules.format.initializeColumn(e),void 0!==t.editor&&o.modExists("edit")&&o.modules.edit.initializeColumn(e),void 0!==t.validator&&o.modExists("validate")&&o.modules.validate.initializeColumn(e),o.modExists("mutator")&&o.modules.mutator.initializeColumn(e),o.modExists("accessor")&&o.modules.accessor.initializeColumn(e),_typeof(o.options.responsiveLayout)&&o.modExists("responsiveLayout")&&o.modules.responsiveLayout.initializeColumn(e),void 0!==t.visible&&(t.visible?e.show(!0):e.hide(!0)),t.cssClass){t.cssClass.split(" ").forEach(function(t){e.element.classList.add(t)})}t.field&&this.element.setAttribute("tabulator-field",t.field),e.setMinWidth(void 0===t.minWidth?e.table.options.columnMinWidth:parseInt(t.minWidth)),e.reinitializeWidth(),e.tooltip=e.definition.tooltip||!1===e.definition.tooltip?e.definition.tooltip:e.table.options.tooltips,e.hozAlign=void 0===e.definition.hozAlign?e.table.options.cellHozAlign:e.definition.hozAlign,e.vertAlign=void 0===e.definition.vertAlign?e.table.options.cellVertAlign:e.definition.vertAlign},n.prototype._buildColumnHeaderContent=function(){var e=(this.definition,this.table,document.createElement("div"));return e.classList.add("tabulator-col-content"),this.titleElement=this._buildColumnHeaderTitle(),e.appendChild(this.titleElement),e},n.prototype._buildColumnHeaderTitle=function(){var e=this,t=e.definition,o=e.table,i=document.createElement("div");if(i.classList.add("tabulator-col-title"),t.editableTitle){var n=document.createElement("input");n.classList.add("tabulator-title-editor"),n.addEventListener("click",function(e){e.stopPropagation(),n.focus()}),n.addEventListener("change",function(){t.title=n.value,o.options.columnTitleChanged.call(e.table,e.getComponent())}),i.appendChild(n),t.field?o.modules.localize.bind("columns|"+t.field,function(e){n.value=e||t.title||"&nbsp;"}):n.value=t.title||"&nbsp;"}else t.field?o.modules.localize.bind("columns|"+t.field,function(o){e._formatColumnHeaderTitle(i,o||t.title||"&nbsp;")}):e._formatColumnHeaderTitle(i,t.title||"&nbsp;");return i},n.prototype._formatColumnHeaderTitle=function(e,t){var o,i,n,s,r,a=this;if(this.definition.titleFormatter&&this.table.modExists("format"))switch(o=this.table.modules.format.getFormatter(this.definition.titleFormatter),r=function(e){a.titleFormatterRendered=e},s={getValue:function(){return t},getElement:function(){return e}},n=this.definition.titleFormatterParams||{},n="function"==typeof n?n():n,i=o.call(this.table.modules.format,s,n,r),void 0===i?"undefined":_typeof(i)){case"object":i instanceof Node?e.appendChild(i):(e.innerHTML="",console.warn("Format Error - Title formatter has returned a type of object, the only valid formatter object return is an instance of Node, the formatter returned:",i));break;case"undefined":case"null":e.innerHTML="";break;default:e.innerHTML=i}else e.innerHTML=t},n.prototype._buildGroupHeader=function(){var e=this;if(this.element.classList.add("tabulator-col-group"),this.element.setAttribute("role","columngroup"),this.element.setAttribute("aria-title",this.definition.title),this.definition.cssClass){this.definition.cssClass.split(" ").forEach(function(t){e.element.classList.add(t)})}(this.definition.headerContextMenu||this.definition.headerMenu)&&this.table.modExists("menu")&&this.table.modules.menu.initializeColumnHeader(this),this.element.appendChild(this.groupElement)},n.prototype._getFlatData=function(e){return e[this.field]},n.prototype._getNestedData=function(e){for(var t,o=e,i=this.fieldStructure,n=i.length,s=0;s<n&&(o=o[i[s]],t=o,o);s++);return t},n.prototype._setFlatData=function(e,t){this.field&&(e[this.field]=t)},n.prototype._setNestedData=function(e,t){for(var o=e,i=this.fieldStructure,n=i.length,s=0;s<n;s++)if(s==n-1)o[i[s]]=t;else{if(!o[i[s]]){if(void 0===t)break;o[i[s]]={}}o=o[i[s]]}},n.prototype.attachColumn=function(e){var t=this;t.groupElement?(t.columns.push(e),t.groupElement.appendChild(e.getElement())):console.warn("Column Warning - Column being attached to another column instead of column group")},n.prototype.verticalAlign=function(e,t){var o=this.parent.isGroup?this.parent.getGroupElement().clientHeight:t||this.parent.getHeadersElement().clientHeight;this.element.style.height=o+"px",this.isGroup&&(this.groupElement.style.minHeight=o-this.contentElement.offsetHeight+"px"),this.isGroup||"top"===e||(this.element.style.paddingTop="bottom"===e?this.element.clientHeight-this.contentElement.offsetHeight+"px":(this.element.clientHeight-this.contentElement.offsetHeight)/2+"px"),this.columns.forEach(function(t){t.verticalAlign(e)})},n.prototype.clearVerticalAlign=function(){this.element.style.paddingTop="",this.element.style.height="",this.element.style.minHeight="",this.groupElement.style.minHeight="",this.columns.forEach(function(e){e.clearVerticalAlign()})},n.prototype.bindModuleColumns=function(){"rownum"==this.definition.formatter&&(this.table.rowManager.rowNumColumn=this)},n.prototype.getElement=function(){return this.element},n.prototype.getGroupElement=function(){return this.groupElement},n.prototype.getField=function(){return this.field},n.prototype.getFirstColumn=function(){return this.isGroup?!!this.columns.length&&this.columns[0].getFirstColumn():this},n.prototype.getLastColumn=function(){return this.isGroup?!!this.columns.length&&this.columns[this.columns.length-1].getLastColumn():this},n.prototype.getColumns=function(){return this.columns},n.prototype.getCells=function(){return this.cells},n.prototype.getTopColumn=function(){return this.parent.isGroup?this.parent.getTopColumn():this},n.prototype.getDefinition=function(e){var t=[];return this.isGroup&&e&&(this.columns.forEach(function(e){t.push(e.getDefinition(!0))}),this.definition.columns=t),this.definition},n.prototype.checkColumnVisibility=function(){var e=!1;this.columns.forEach(function(t){t.visible&&(e=!0)}),e?(this.show(),this.parent.table.options.columnVisibilityChanged.call(this.table,this.getComponent(),!1)):this.hide()},n.prototype.show=function(e,t){this.visible||(this.visible=!0,this.element.style.display="",this.parent.isGroup&&this.parent.checkColumnVisibility(),this.cells.forEach(function(e){e.show()}),this.isGroup||null!==this.width||this.reinitializeWidth(),this.table.columnManager._verticalAlignHeaders(),this.table.options.persistence&&this.table.modExists("persistence",!0)&&this.table.modules.persistence.config.columns&&this.table.modules.persistence.save("columns"),!t&&this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.updateColumnVisibility(this,this.visible),e||this.table.options.columnVisibilityChanged.call(this.table,this.getComponent(),!0),this.parent.isGroup&&this.parent.matchChildWidths())},n.prototype.hide=function(e,t){this.visible&&(this.visible=!1,this.element.style.display="none",this.table.columnManager._verticalAlignHeaders(),this.parent.isGroup&&this.parent.checkColumnVisibility(),this.cells.forEach(function(e){e.hide()}),this.table.options.persistence&&this.table.modExists("persistence",!0)&&this.table.modules.persistence.config.columns&&this.table.modules.persistence.save("columns"),!t&&this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.updateColumnVisibility(this,this.visible),e||this.table.options.columnVisibilityChanged.call(this.table,this.getComponent(),!1),this.parent.isGroup&&this.parent.matchChildWidths())},n.prototype.matchChildWidths=function(){var e=0;this.contentElement&&this.columns.length&&(this.columns.forEach(function(t){t.visible&&(e+=t.getWidth())}),this.contentElement.style.maxWidth=e-1+"px",this.parent.isGroup&&this.parent.matchChildWidths())},n.prototype.setWidth=function(e){this.widthFixed=!0,this.setWidthActual(e)},n.prototype.setWidthActual=function(e){isNaN(e)&&(e=Math.floor(this.table.element.clientWidth/100*parseInt(e))),e=Math.max(this.minWidth,e),this.width=e,this.widthStyled=e?e+"px":"",this.element.style.width=this.widthStyled,this.isGroup||this.cells.forEach(function(e){e.setWidth()}),this.parent.isGroup&&this.parent.matchChildWidths(),this.table.modExists("frozenColumns")&&this.table.modules.frozenColumns.layout()},n.prototype.checkCellHeights=function(){var e=[];this.cells.forEach(function(t){t.row.heightInitialized&&(null!==t.row.getElement().offsetParent?(e.push(t.row),t.row.clearCellHeight()):t.row.heightInitialized=!1)}),e.forEach(function(e){e.calcHeight()}),e.forEach(function(e){e.setCellHeight()})},n.prototype.getWidth=function(){var e=0;return this.isGroup?this.columns.forEach(function(t){t.visible&&(e+=t.getWidth())}):e=this.width,e},n.prototype.getHeight=function(){return this.element.offsetHeight},n.prototype.setMinWidth=function(e){this.minWidth=e,this.minWidthStyled=e?e+"px":"",this.element.style.minWidth=this.minWidthStyled,this.cells.forEach(function(e){e.setMinWidth()})},n.prototype.delete=function(){var e=this;return new Promise(function(t,o){e.isGroup&&e.columns.forEach(function(e){e.delete()}),e.table.modExists("edit")&&e.table.modules.edit.currentCell.column===e&&e.table.modules.edit.cancelEdit();for(var i=e.cells.length,n=0;n<i;n++)e.cells[0].delete();e.element.parentNode.removeChild(e.element),e.table.columnManager.deregisterColumn(e),t()})},n.prototype.columnRendered=function(){this.titleFormatterRendered&&this.titleFormatterRendered()},n.prototype.validate=function(){var e=[];return this.cells.forEach(function(t){t.validate()||e.push(t.getComponent())}),!e.length||e},n.prototype.generateCell=function(e){var t=this,o=new c(t,e);return this.cells.push(o),o},n.prototype.nextColumn=function(){var e=this.table.columnManager.findColumnIndex(this);return e>-1&&this._nextVisibleColumn(e+1)},n.prototype._nextVisibleColumn=function(e){var t=this.table.columnManager.getColumnByIndex(e);return!t||t.visible?t:this._nextVisibleColumn(e+1)},n.prototype.prevColumn=function(){var e=this.table.columnManager.findColumnIndex(this);return e>-1&&this._prevVisibleColumn(e-1)},n.prototype._prevVisibleColumn=function(e){var t=this.table.columnManager.getColumnByIndex(e);return!t||t.visible?t:this._prevVisibleColumn(e-1)},n.prototype.reinitializeWidth=function(e){this.widthFixed=!1,
+void 0===this.definition.width||e||this.setWidth(this.definition.width),this.table.modExists("filter")&&this.table.modules.filter.hideHeaderFilterElements(),this.fitToData(),this.table.modExists("filter")&&this.table.modules.filter.showHeaderFilterElements()},n.prototype.fitToData=function(){var e=this;this.widthFixed||(this.element.style.width="",e.cells.forEach(function(e){e.clearWidth()}));var t=this.element.offsetWidth;e.width&&this.widthFixed||(e.cells.forEach(function(e){var o=e.getWidth();o>t&&(t=o)}),t&&e.setWidthActual(t+1))},n.prototype.updateDefinition=function(e){var t=this;return new Promise(function(o,i){var n;t.isGroup?(console.warn("Column Update Error - The updateDefintion function is only available on columns, not column groups"),i("Column Update Error - The updateDefintion function is only available on columns, not column groups")):(n=Object.assign({},t.getDefinition()),n=Object.assign(n,e),t.table.columnManager.addColumn(n,!1,t).then(function(e){n.field==t.field&&(t.field=!1),t.delete().then(function(){o(e.getComponent())}).catch(function(e){i(e)})}).catch(function(e){i(e)}))})},n.prototype.deleteCell=function(e){var t=this.cells.indexOf(e);t>-1&&this.cells.splice(t,1)},n.prototype.defaultOptionList=["title","field","columns","visible","align","hozAlign","vertAlign","width","minWidth","widthGrow","widthShrink","resizable","frozen","responsive","tooltip","cssClass","rowHandle","hideInHtml","print","htmlOutput","sorter","sorterParams","formatter","formatterParams","variableHeight","editable","editor","editorParams","validator","mutator","mutatorParams","mutatorData","mutatorDataParams","mutatorEdit","mutatorEditParams","mutatorClipboard","mutatorClipboardParams","accessor","accessorParams","accessorData","accessorDataParams","accessorDownload","accessorDownloadParams","accessorClipboard","accessorClipboardParams","accessorPrint","accessorPrintParams","accessorHtmlOutput","accessorHtmlOutputParams","clipboard","download","downloadTitle","topCalc","topCalcParams","topCalcFormatter","topCalcFormatterParams","bottomCalc","bottomCalcParams","bottomCalcFormatter","bottomCalcFormatterParams","cellClick","cellDblClick","cellContext","cellTap","cellDblTap","cellTapHold","cellMouseEnter","cellMouseLeave","cellMouseOver","cellMouseOut","cellMouseMove","cellEditing","cellEdited","cellEditCancelled","headerSort","headerSortStartingDir","headerSortTristate","headerClick","headerDblClick","headerContext","headerTap","headerDblTap","headerTapHold","headerTooltip","headerVertical","editableTitle","titleFormatter","titleFormatterParams","headerFilter","headerFilterPlaceholder","headerFilterParams","headerFilterEmptyCheck","headerFilterFunc","headerFilterFuncParams","headerFilterLiveFilter","print","headerContextMenu","headerMenu","contextMenu","formatterPrint","formatterPrintParams","formatterClipboard","formatterClipboardParams","formatterHtmlOutput","formatterHtmlOutputParams","titlePrint","titleClipboard","titleHtmlOutput","titleDownload"],n.prototype.getComponent=function(){return this.component||(this.component=new o(this)),this.component};var s=function(e){this.table=e,this.element=this.createHolderElement(),this.tableElement=this.createTableElement(),this.heightFixer=this.createTableElement(),this.columnManager=null,this.height=0,this.firstRender=!1,this.renderMode="virtual",this.fixedHeight=!1,this.rows=[],this.activeRows=[],this.activeRowsCount=0,this.displayRows=[],this.displayRowsCount=0,this.scrollTop=0,this.scrollLeft=0,this.vDomRowHeight=20,this.vDomTop=0,this.vDomBottom=0,this.vDomScrollPosTop=0,this.vDomScrollPosBottom=0,this.vDomTopPad=0,this.vDomBottomPad=0,this.vDomMaxRenderChain=90,this.vDomWindowBuffer=0,this.vDomWindowMinTotalRows=20,this.vDomWindowMinMarginRows=5,this.vDomTopNewRows=[],this.vDomBottomNewRows=[],this.rowNumColumn=!1,this.redrawBlock=!1,this.redrawBlockRestoreConfig=!1,this.redrawBlockRederInPosition=!1};s.prototype.createHolderElement=function(){var e=document.createElement("div");return e.classList.add("tabulator-tableHolder"),e.setAttribute("tabindex",0),e},s.prototype.createTableElement=function(){var e=document.createElement("div");return e.classList.add("tabulator-table"),e},s.prototype.getElement=function(){return this.element},s.prototype.getTableElement=function(){return this.tableElement},s.prototype.getRowPosition=function(e,t){return t?this.activeRows.indexOf(e):this.rows.indexOf(e)},s.prototype.setColumnManager=function(e){this.columnManager=e},s.prototype.initialize=function(){var e=this;e.setRenderMode(),e.element.appendChild(e.tableElement),e.firstRender=!0,e.element.addEventListener("scroll",function(){var t=e.element.scrollLeft;e.scrollLeft!=t&&(e.columnManager.scrollHorizontal(t),e.table.options.groupBy&&e.table.modules.groupRows.scrollHeaders(t),e.table.modExists("columnCalcs")&&e.table.modules.columnCalcs.scrollHorizontal(t),e.table.options.scrollHorizontal(t)),e.scrollLeft=t}),"virtual"===this.renderMode&&e.element.addEventListener("scroll",function(){var t=e.element.scrollTop,o=e.scrollTop>t;e.scrollTop!=t?(e.scrollTop=t,e.scrollVertical(o),"scroll"==e.table.options.ajaxProgressiveLoad&&e.table.modules.ajax.nextPage(e.element.scrollHeight-e.element.clientHeight-t),e.table.options.scrollVertical(t)):e.scrollTop=t})},s.prototype.findRow=function(e){var t=this;if("object"!=(void 0===e?"undefined":_typeof(e))){if(void 0===e||null===e)return!1;return t.rows.find(function(o){return o.data[t.table.options.index]==e})||!1}if(e instanceof a)return e;if(e instanceof r)return e._getSelf()||!1;if("undefined"!=typeof HTMLElement&&e instanceof HTMLElement){return t.rows.find(function(t){return t.element===e})||!1}return!1},s.prototype.getRowFromDataObject=function(e){return this.rows.find(function(t){return t.data===e})||!1},s.prototype.getRowFromPosition=function(e,t){return t?this.activeRows[e]:this.rows[e]},s.prototype.scrollToRow=function(e,t,o){var i,n=this,s=this.getDisplayRows().indexOf(e),r=e.getElement(),a=0;return new Promise(function(e,l){if(s>-1){if(void 0===t&&(t=n.table.options.scrollToRowPosition),void 0===o&&(o=n.table.options.scrollToRowIfVisible),"nearest"===t)switch(n.renderMode){case"classic":i=d.prototype.helpers.elOffset(r).top,t=Math.abs(n.element.scrollTop-i)>Math.abs(n.element.scrollTop+n.element.clientHeight-i)?"bottom":"top";break;case"virtual":t=Math.abs(n.vDomTop-s)>Math.abs(n.vDomBottom-s)?"bottom":"top"}if(!o&&d.prototype.helpers.elVisible(r)&&(a=d.prototype.helpers.elOffset(r).top-d.prototype.helpers.elOffset(n.element).top)>0&&a<n.element.clientHeight-r.offsetHeight)return!1;switch(n.renderMode){case"classic":n.element.scrollTop=d.prototype.helpers.elOffset(r).top-d.prototype.helpers.elOffset(n.element).top+n.element.scrollTop;break;case"virtual":n._virtualRenderFill(s,!0)}switch(t){case"middle":case"center":n.element.scrollHeight-n.element.scrollTop==n.element.clientHeight?n.element.scrollTop=n.element.scrollTop+(r.offsetTop-n.element.scrollTop)-(n.element.scrollHeight-r.offsetTop)/2:n.element.scrollTop=n.element.scrollTop-n.element.clientHeight/2;break;case"bottom":n.element.scrollHeight-n.element.scrollTop==n.element.clientHeight?n.element.scrollTop=n.element.scrollTop-(n.element.scrollHeight-r.offsetTop)+r.offsetHeight:n.element.scrollTop=n.element.scrollTop-n.element.clientHeight+r.offsetHeight}e()}else console.warn("Scroll Error - Row not visible"),l("Scroll Error - Row not visible")})},s.prototype.setData=function(e,t,o){var i=this,n=this;return new Promise(function(s,r){t&&i.getDisplayRows().length?n.table.options.pagination?n._setDataActual(e,!0):i.reRenderInPosition(function(){n._setDataActual(e)}):(i.table.options.autoColumns&&o&&i.table.columnManager.generateColumnsFromRowData(e),i.resetScroll(),i._setDataActual(e)),s()})},s.prototype._setDataActual=function(e,t){var o=this;o.table.options.dataLoading.call(this.table,e),this._wipeElements(),this.table.options.history&&this.table.modExists("history")&&this.table.modules.history.clear(),Array.isArray(e)?(this.table.modExists("selectRow")&&this.table.modules.selectRow.clearSelectionData(),this.table.options.reactiveData&&this.table.modExists("reactiveData",!0)&&this.table.modules.reactiveData.watchData(e),e.forEach(function(e,t){if(e&&"object"===(void 0===e?"undefined":_typeof(e))){var i=new a(e,o);o.rows.push(i)}else console.warn("Data Loading Warning - Invalid row data detected and ignored, expecting object but received:",e)}),o.table.options.dataLoaded.call(this.table,e),o.refreshActiveData(!1,!1,t)):console.error("Data Loading Error - Unable to process data due to invalid data type \nExpecting: array \nReceived: ",void 0===e?"undefined":_typeof(e),"\nData:     ",e)},s.prototype._wipeElements=function(){this.rows.forEach(function(e){e.wipe()}),this.table.options.groupBy&&this.table.modExists("groupRows")&&this.table.modules.groupRows.wipe(),this.rows=[]},s.prototype.deleteRow=function(e,t){var o=this.rows.indexOf(e),i=this.activeRows.indexOf(e);i>-1&&this.activeRows.splice(i,1),o>-1&&this.rows.splice(o,1),this.setActiveRows(this.activeRows),this.displayRowIterator(function(t){var o=t.indexOf(e);o>-1&&t.splice(o,1)}),t||this.reRenderInPosition(),this.regenerateRowNumbers(),this.table.options.rowDeleted.call(this.table,e.getComponent()),this.table.options.dataEdited.call(this.table,this.getData()),this.table.options.groupBy&&this.table.modExists("groupRows")?this.table.modules.groupRows.updateGroupRows(!0):this.table.options.pagination&&this.table.modExists("page")?this.refreshActiveData(!1,!1,!0):this.table.options.pagination&&this.table.modExists("page")&&this.refreshActiveData("page")},s.prototype.addRow=function(e,t,o,i){var n=this.addRowActual(e,t,o,i);return this.table.options.history&&this.table.modExists("history")&&this.table.modules.history.action("rowAdd",n,{data:e,pos:t,index:o}),n},s.prototype.addRows=function(e,t,o){var i=this,n=this,s=0,r=[];return new Promise(function(a,l){t=i.findAddRowPos(t),Array.isArray(e)||(e=[e]),s=e.length-1,(void 0===o&&t||void 0!==o&&!t)&&e.reverse(),e.forEach(function(e,i){var s=n.addRow(e,t,o,!0);r.push(s)}),i.table.options.groupBy&&i.table.modExists("groupRows")?i.table.modules.groupRows.updateGroupRows(!0):i.table.options.pagination&&i.table.modExists("page")?i.refreshActiveData(!1,!1,!0):i.reRenderInPosition(),i.table.modExists("columnCalcs")&&i.table.modules.columnCalcs.recalc(i.table.rowManager.activeRows),i.regenerateRowNumbers(),a(r)})},s.prototype.findAddRowPos=function(e){return void 0===e&&(e=this.table.options.addRowPos),"pos"===e&&(e=!0),"bottom"===e&&(e=!1),e},s.prototype.addRowActual=function(e,t,o,i){var n,s,r=e instanceof a?e:new a(e||{},this),l=this.findAddRowPos(t),c=-1;if(!o&&this.table.options.pagination&&"page"==this.table.options.paginationAddRow&&(s=this.getDisplayRows(),l?s.length?o=s[0]:this.activeRows.length&&(o=this.activeRows[this.activeRows.length-1],l=!1):s.length&&(o=s[s.length-1],l=!(s.length<this.table.modules.page.getPageSize()))),void 0!==o&&(o=this.findRow(o)),this.table.options.groupBy&&this.table.modExists("groupRows")){this.table.modules.groupRows.assignRowToGroup(r);var u=r.getGroup().rows;u.length>1&&(!o||o&&-1==u.indexOf(o)?l?u[0]!==r&&(o=u[0],this._moveRowInArray(r.getGroup().rows,r,o,!l)):u[u.length-1]!==r&&(o=u[u.length-1],this._moveRowInArray(r.getGroup().rows,r,o,!l)):this._moveRowInArray(r.getGroup().rows,r,o,!l))}return o&&(c=this.rows.indexOf(o)),o&&c>-1?(n=this.activeRows.indexOf(o),this.displayRowIterator(function(e){var t=e.indexOf(o);t>-1&&e.splice(l?t:t+1,0,r)}),n>-1&&this.activeRows.splice(l?n:n+1,0,r),this.rows.splice(l?c:c+1,0,r)):l?(this.displayRowIterator(function(e){e.unshift(r)}),this.activeRows.unshift(r),this.rows.unshift(r)):(this.displayRowIterator(function(e){e.push(r)}),this.activeRows.push(r),this.rows.push(r)),this.setActiveRows(this.activeRows),this.table.options.rowAdded.call(this.table,r.getComponent()),this.table.options.dataEdited.call(this.table,this.getData()),i||this.reRenderInPosition(),r},s.prototype.moveRow=function(e,t,o){this.table.options.history&&this.table.modExists("history")&&this.table.modules.history.action("rowMove",e,{posFrom:this.getRowPosition(e),posTo:this.getRowPosition(t),to:t,after:o}),this.moveRowActual(e,t,o),this.regenerateRowNumbers(),this.table.options.rowMoved.call(this.table,e.getComponent())},s.prototype.moveRowActual=function(e,t,o){var i=this;if(this._moveRowInArray(this.rows,e,t,o),this._moveRowInArray(this.activeRows,e,t,o),this.displayRowIterator(function(n){i._moveRowInArray(n,e,t,o)}),this.table.options.groupBy&&this.table.modExists("groupRows")){!o&&t instanceof S&&(t=this.table.rowManager.prevDisplayRow(e)||t);var n=t.getGroup(),s=e.getGroup();n===s?this._moveRowInArray(n.rows,e,t,o):(s&&s.removeRow(e),n.insertRow(e,t,o))}},s.prototype._moveRowInArray=function(e,t,o,i){var n,s,r,a;if(t!==o&&(n=e.indexOf(t),n>-1&&(e.splice(n,1),s=e.indexOf(o),s>-1?i?e.splice(s+1,0,t):e.splice(s,0,t):e.splice(n,0,t)),e===this.getDisplayRows())){r=n<s?n:s,a=s>n?s:n+1;for(var l=r;l<=a;l++)e[l]&&this.styleRow(e[l],l)}},s.prototype.clearData=function(){this.setData([])},s.prototype.getRowIndex=function(e){return this.findRowIndex(e,this.rows)},s.prototype.getDisplayRowIndex=function(e){var t=this.getDisplayRows().indexOf(e);return t>-1&&t},s.prototype.nextDisplayRow=function(e,t){var o=this.getDisplayRowIndex(e),i=!1;return!1!==o&&o<this.displayRowsCount-1&&(i=this.getDisplayRows()[o+1]),!i||i instanceof a&&"row"==i.type?i:this.nextDisplayRow(i,t)},s.prototype.prevDisplayRow=function(e,t){var o=this.getDisplayRowIndex(e),i=!1;return o&&(i=this.getDisplayRows()[o-1]),!t||!i||i instanceof a&&"row"==i.type?i:this.prevDisplayRow(i,t)},s.prototype.findRowIndex=function(e,t){var o;return!!((e=this.findRow(e))&&(o=t.indexOf(e))>-1)&&o},s.prototype.getData=function(e,t){var o=[];return this.getRows(e).forEach(function(e){"row"==e.type&&o.push(e.getData(t||"data"))}),o},s.prototype.getComponents=function(e){var t=[];return this.getRows(e).forEach(function(e){t.push(e.getComponent())}),t},s.prototype.getDataCount=function(e){return this.getRows(e).length},s.prototype._genRemoteRequest=function(){var e=this,t=this.table,o=t.options,i={};if(t.modExists("page")){if(o.ajaxSorting){var n=this.table.modules.sort.getSort();n.forEach(function(e){delete e.column}),i[this.table.modules.page.paginationDataSentNames.sorters]=n}if(o.ajaxFiltering){var s=this.table.modules.filter.getFilters(!0,!0);i[this.table.modules.page.paginationDataSentNames.filters]=s}this.table.modules.ajax.setParams(i,!0)}t.modules.ajax.sendRequest().then(function(t){e._setDataActual(t,!0)}).catch(function(e){})},s.prototype.filterRefresh=function(){var e=this.table,t=e.options,o=this.scrollLeft;t.ajaxFiltering?"remote"==t.pagination&&e.modExists("page")?(e.modules.page.reset(!0),e.modules.page.setPage(1).then(function(){}).catch(function(){})):t.ajaxProgressiveLoad?e.modules.ajax.loadData().then(function(){}).catch(function(){}):this._genRemoteRequest():this.refreshActiveData("filter"),this.scrollHorizontal(o)},s.prototype.sorterRefresh=function(e){var t=this.table,o=this.table.options,i=this.scrollLeft;o.ajaxSorting?("remote"==o.pagination||o.progressiveLoad)&&t.modExists("page")?(t.modules.page.reset(!0),t.modules.page.setPage(1).then(function(){}).catch(function(){})):o.ajaxProgressiveLoad?t.modules.ajax.loadData().then(function(){}).catch(function(){}):this._genRemoteRequest():this.refreshActiveData(e?"filter":"sort"),this.scrollHorizontal(i)},s.prototype.scrollHorizontal=function(e){this.scrollLeft=e,this.element.scrollLeft=e,this.table.options.groupBy&&this.table.modules.groupRows.scrollHeaders(e),this.table.modExists("columnCalcs")&&this.table.modules.columnCalcs.scrollHorizontal(e)},s.prototype.refreshActiveData=function(e,t,o){var i,n=this,s=this.table,r=["all","filter","sort","display","freeze","group","tree","page"];if(this.redrawBlock)return void((!this.redrawBlockRestoreConfig||r.indexOf(e)<r.indexOf(this.redrawBlockRestoreConfig.stage))&&(this.redrawBlockRestoreConfig={stage:e,skipStage:t,renderInPosition:o}));switch(n.table.modExists("edit")&&n.table.modules.edit.cancelEdit(),e||(e="all"),s.options.selectable&&!s.options.selectablePersistence&&s.modExists("selectRow")&&s.modules.selectRow.deselectRows(),e){case"all":case"filter":t?t=!1:s.modExists("filter")?n.setActiveRows(s.modules.filter.filter(n.rows)):n.setActiveRows(n.rows.slice(0));case"sort":t?t=!1:s.modExists("sort")&&s.modules.sort.sort(this.activeRows),this.regenerateRowNumbers();case"display":this.resetDisplayRows();case"freeze":t?t=!1:this.table.modExists("frozenRows")&&s.modules.frozenRows.isFrozen()&&(s.modules.frozenRows.getDisplayIndex()||s.modules.frozenRows.setDisplayIndex(this.getNextDisplayIndex()),i=s.modules.frozenRows.getDisplayIndex(),!0!==(i=n.setDisplayRows(s.modules.frozenRows.getRows(this.getDisplayRows(i-1)),i))&&s.modules.frozenRows.setDisplayIndex(i));case"group":t?t=!1:s.options.groupBy&&s.modExists("groupRows")&&(s.modules.groupRows.getDisplayIndex()||s.modules.groupRows.setDisplayIndex(this.getNextDisplayIndex()),i=s.modules.groupRows.getDisplayIndex(),!0!==(i=n.setDisplayRows(s.modules.groupRows.getRows(this.getDisplayRows(i-1)),i))&&s.modules.groupRows.setDisplayIndex(i));case"tree":t?t=!1:s.options.dataTree&&s.modExists("dataTree")&&(s.modules.dataTree.getDisplayIndex()||s.modules.dataTree.setDisplayIndex(this.getNextDisplayIndex()),i=s.modules.dataTree.getDisplayIndex(),!0!==(i=n.setDisplayRows(s.modules.dataTree.getRows(this.getDisplayRows(i-1)),i))&&s.modules.dataTree.setDisplayIndex(i)),s.options.pagination&&s.modExists("page")&&!o&&"local"==s.modules.page.getMode()&&s.modules.page.reset();case"page":t?t=!1:s.options.pagination&&s.modExists("page")&&(s.modules.page.getDisplayIndex()||s.modules.page.setDisplayIndex(this.getNextDisplayIndex()),i=s.modules.page.getDisplayIndex(),"local"==s.modules.page.getMode()&&s.modules.page.setMaxRows(this.getDisplayRows(i-1).length),!0!==(i=n.setDisplayRows(s.modules.page.getRows(this.getDisplayRows(i-1)),i))&&s.modules.page.setDisplayIndex(i))}d.prototype.helpers.elVisible(n.element)&&(o?n.reRenderInPosition():(n.renderTable(),s.options.layoutColumnsOnNewData&&n.table.columnManager.redraw(!0))),s.modExists("columnCalcs")&&s.modules.columnCalcs.recalc(this.activeRows)},s.prototype.regenerateRowNumbers=function(){var e=this;this.rowNumColumn&&this.activeRows.forEach(function(t){var o=t.getCell(e.rowNumColumn);o&&o._generateContents()})},s.prototype.setActiveRows=function(e){this.activeRows=e,this.activeRowsCount=this.activeRows.length},s.prototype.resetDisplayRows=function(){this.displayRows=[],this.displayRows.push(this.activeRows.slice(0)),this.displayRowsCount=this.displayRows[0].length,this.table.modExists("frozenRows")&&this.table.modules.frozenRows.setDisplayIndex(0),this.table.options.groupBy&&this.table.modExists("groupRows")&&this.table.modules.groupRows.setDisplayIndex(0),this.table.options.pagination&&this.table.modExists("page")&&this.table.modules.page.setDisplayIndex(0)},s.prototype.getNextDisplayIndex=function(){return this.displayRows.length},s.prototype.setDisplayRows=function(e,t){var o=!0;return t&&void 0!==this.displayRows[t]?(this.displayRows[t]=e,o=!0):(this.displayRows.push(e),o=t=this.displayRows.length-1),t==this.displayRows.length-1&&(this.displayRowsCount=this.displayRows[this.displayRows.length-1].length),o},s.prototype.getDisplayRows=function(e){return void 0===e?this.displayRows.length?this.displayRows[this.displayRows.length-1]:[]:this.displayRows[e]||[]},s.prototype.getVisibleRows=function(e){var t=this.element.scrollTop,o=this.element.clientHeight+t,i=!1,n=0,s=0,r=this.getDisplayRows();if(e){this.getDisplayRows();for(var a=this.vDomTop;a<=this.vDomBottom;a++)if(r[a])if(i){if(!(o-r[a].getElement().offsetTop>=0))break;s=a}else if(t-r[a].getElement().offsetTop>=0)n=a;else{if(i=!0,!(o-r[a].getElement().offsetTop>=0))break;s=a}}else n=this.vDomTop,s=this.vDomBottom;return r.slice(n,s+1)},s.prototype.displayRowIterator=function(e){this.displayRows.forEach(e),this.displayRowsCount=this.displayRows[this.displayRows.length-1].length},s.prototype.getRows=function(e){var t;switch(e){case"active":t=this.activeRows;break;case"display":t=this.table.rowManager.getDisplayRows();break;case"visible":t=this.getVisibleRows(!0);break;default:t=this.rows}return t},s.prototype.reRenderInPosition=function(e){if("virtual"==this.getRenderMode())if(this.redrawBlock)e?e():this.redrawBlockRederInPosition=!0;else{for(var t=this.element.scrollTop,o=!1,i=!1,n=this.scrollLeft,s=this.getDisplayRows(),r=this.vDomTop;r<=this.vDomBottom;r++)if(s[r]){var a=t-s[r].getElement().offsetTop;if(!(!1===i||Math.abs(a)<i))break;i=a,o=r}e&&e(),this._virtualRenderFill(!1===o?this.displayRowsCount-1:o,!0,i||0),this.scrollHorizontal(n)}else this.renderTable(),e&&e()},s.prototype.setRenderMode=function(){this.table.options.virtualDom?(this.renderMode="virtual",this.table.element.clientHeight||this.table.options.height?this.fixedHeight=!0:this.fixedHeight=!1):this.renderMode="classic"},s.prototype.getRenderMode=function(){return this.renderMode},s.prototype.renderTable=function(){switch(this.table.options.renderStarted.call(this.table),this.element.scrollTop=0,this.renderMode){case"classic":this._simpleRender();break;case"virtual":this._virtualRenderFill()}this.firstRender&&(this.displayRowsCount?(this.firstRender=!1,this.table.modules.layout.layout()):this.renderEmptyScroll()),this.table.modExists("frozenColumns")&&this.table.modules.frozenColumns.layout(),this.displayRowsCount||this.table.options.placeholder&&(this.table.options.placeholder.setAttribute("tabulator-render-mode",this.renderMode),this.getElement().appendChild(this.table.options.placeholder),this.table.options.placeholder.style.width=this.table.columnManager.getWidth()+"px"),this.table.options.renderComplete.call(this.table)},s.prototype._simpleRender=function(){this._clearVirtualDom(),this.displayRowsCount?this.checkClassicModeGroupHeaderWidth():this.renderEmptyScroll()},s.prototype.checkClassicModeGroupHeaderWidth=function(){var e=this,t=this.tableElement,o=!0;e.getDisplayRows().forEach(function(i,n){e.styleRow(i,n),t.appendChild(i.getElement()),i.initialize(!0),"group"!==i.type&&(o=!1)}),t.style.minWidth=o?e.table.columnManager.getWidth()+"px":""},s.prototype.renderEmptyScroll=function(){this.table.options.placeholder?this.tableElement.style.display="none":(this.tableElement.style.minWidth=this.table.columnManager.getWidth()+"px",this.tableElement.style.minHeight="1px",this.tableElement.style.visibility="hidden")},s.prototype._clearVirtualDom=function(){var e=this.tableElement;for(this.table.options.placeholder&&this.table.options.placeholder.parentNode&&this.table.options.placeholder.parentNode.removeChild(this.table.options.placeholder);e.firstChild;)e.removeChild(e.firstChild);e.style.paddingTop="",e.style.paddingBottom="",e.style.minWidth="",e.style.minHeight="",e.style.display="",e.style.visibility="",this.scrollTop=0,this.scrollLeft=0,this.vDomTop=0,this.vDomBottom=0,this.vDomTopPad=0,this.vDomBottomPad=0},s.prototype.styleRow=function(e,t){var o=e.getElement();t%2?(o.classList.add("tabulator-row-even"),o.classList.remove("tabulator-row-odd")):(o.classList.add("tabulator-row-odd"),o.classList.remove("tabulator-row-even"))},s.prototype._virtualRenderFill=function(e,t,o){var i=this,n=i.tableElement,s=i.element,r=0,a=0,l=0,c=0,u=!0,h=i.getDisplayRows();if(e=e||0,o=o||0,e){for(;n.firstChild;)n.removeChild(n.firstChild);var p=(i.displayRowsCount-e+1)*i.vDomRowHeight;p<i.height&&(e-=Math.ceil((i.height-p)/i.vDomRowHeight))<0&&(e=0),r=Math.min(Math.max(Math.floor(i.vDomWindowBuffer/i.vDomRowHeight),i.vDomWindowMinMarginRows),e),e-=r}else i._clearVirtualDom();if(i.displayRowsCount&&d.prototype.helpers.elVisible(i.element)){for(i.vDomTop=e,i.vDomBottom=e-1;(a<=i.height+i.vDomWindowBuffer||c<i.vDomWindowMinTotalRows)&&i.vDomBottom<i.displayRowsCount-1;){var m=i.vDomBottom+1,f=h[m],g=0;i.styleRow(f,m),n.appendChild(f.getElement()),f.initialized?f.heightInitialized||f.normalizeHeight(!0):f.initialize(!0),g=f.getHeight(),c<r?l+=g:a+=g,g>this.vDomWindowBuffer&&(this.vDomWindowBuffer=2*g),"group"!==f.type&&(u=!1),i.vDomBottom++,c++}e?(i.vDomTopPad=t?i.vDomRowHeight*this.vDomTop+o:i.scrollTop-l,i.vDomBottomPad=i.vDomBottom==i.displayRowsCount-1?0:Math.max(i.vDomScrollHeight-i.vDomTopPad-a-l,0)):(this.vDomTopPad=0,i.vDomRowHeight=Math.floor((a+l)/c),i.vDomBottomPad=i.vDomRowHeight*(i.displayRowsCount-i.vDomBottom-1),i.vDomScrollHeight=l+a+i.vDomBottomPad-i.height),n.style.paddingTop=i.vDomTopPad+"px",n.style.paddingBottom=i.vDomBottomPad+"px",t&&(this.scrollTop=i.vDomTopPad+l+o-(this.element.scrollWidth>this.element.clientWidth?this.element.offsetHeight-this.element.clientHeight:0)),this.scrollTop=Math.min(this.scrollTop,this.element.scrollHeight-this.height),this.element.scrollWidth>this.element.offsetWidth&&t&&(this.scrollTop+=this.element.offsetHeight-this.element.clientHeight),this.vDomScrollPosTop=this.scrollTop,this.vDomScrollPosBottom=this.scrollTop,s.scrollTop=this.scrollTop,n.style.minWidth=u?i.table.columnManager.getWidth()+"px":"",i.table.options.groupBy&&"fitDataFill"!=i.table.modules.layout.getMode()&&i.displayRowsCount==i.table.modules.groupRows.countGroups()&&(i.tableElement.style.minWidth=i.table.columnManager.getWidth())}else this.renderEmptyScroll();this.fixedHeight||this.adjustTableSize()},s.prototype.scrollVertical=function(e){var t=this.scrollTop-this.vDomScrollPosTop,o=this.scrollTop-this.vDomScrollPosBottom,i=2*this.vDomWindowBuffer;if(-t>i||o>i){var n=this.scrollLeft;this._virtualRenderFill(Math.floor(this.element.scrollTop/this.element.scrollHeight*this.displayRowsCount)),this.scrollHorizontal(n)}else e?(t<0&&this._addTopRow(-t),o<0&&(this.vDomScrollHeight-this.scrollTop>this.vDomWindowBuffer?this._removeBottomRow(-o):this.vDomScrollPosBottom=this.scrollTop)):(t>=0&&(this.scrollTop>this.vDomWindowBuffer?this._removeTopRow(t):this.vDomScrollPosTop=this.scrollTop),o>=0&&this._addBottomRow(o))},s.prototype._addTopRow=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,o=this.tableElement,i=this.getDisplayRows();if(this.vDomTop){var n=this.vDomTop-1,s=i[n],r=s.getHeight()||this.vDomRowHeight;e>=r&&(this.styleRow(s,n),o.insertBefore(s.getElement(),o.firstChild),s.initialized&&s.heightInitialized||(this.vDomTopNewRows.push(s),s.heightInitialized||s.clearCellHeight()),s.initialize(),this.vDomTopPad-=r,this.vDomTopPad<0&&(this.vDomTopPad=n*this.vDomRowHeight),n||(this.vDomTopPad=0),o.style.paddingTop=this.vDomTopPad+"px",this.vDomScrollPosTop-=r,this.vDomTop--),e=-(this.scrollTop-this.vDomScrollPosTop),s.getHeight()>this.vDomWindowBuffer&&(this.vDomWindowBuffer=2*s.getHeight()),t<this.vDomMaxRenderChain&&this.vDomTop&&e>=(i[this.vDomTop-1].getHeight()||this.vDomRowHeight)?this._addTopRow(e,t+1):this._quickNormalizeRowHeight(this.vDomTopNewRows)}},s.prototype._removeTopRow=function(e){var t=this.tableElement,o=this.getDisplayRows()[this.vDomTop],i=o.getHeight()||this.vDomRowHeight;if(e>=i){var n=o.getElement();n.parentNode.removeChild(n),this.vDomTopPad+=i,t.style.paddingTop=this.vDomTopPad+"px",this.vDomScrollPosTop+=this.vDomTop?i:i+this.vDomWindowBuffer,this.vDomTop++,e=this.scrollTop-this.vDomScrollPosTop,this._removeTopRow(e)}},s.prototype._addBottomRow=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,o=this.tableElement,i=this.getDisplayRows();if(this.vDomBottom<this.displayRowsCount-1){var n=this.vDomBottom+1,s=i[n],r=s.getHeight()||this.vDomRowHeight;e>=r&&(this.styleRow(s,n),o.appendChild(s.getElement()),s.initialized&&s.heightInitialized||(this.vDomBottomNewRows.push(s),s.heightInitialized||s.clearCellHeight()),s.initialize(),this.vDomBottomPad-=r,(this.vDomBottomPad<0||n==this.displayRowsCount-1)&&(this.vDomBottomPad=0),o.style.paddingBottom=this.vDomBottomPad+"px",this.vDomScrollPosBottom+=r,this.vDomBottom++),e=this.scrollTop-this.vDomScrollPosBottom,s.getHeight()>this.vDomWindowBuffer&&(this.vDomWindowBuffer=2*s.getHeight()),t<this.vDomMaxRenderChain&&this.vDomBottom<this.displayRowsCount-1&&e>=(i[this.vDomBottom+1].getHeight()||this.vDomRowHeight)?this._addBottomRow(e,t+1):this._quickNormalizeRowHeight(this.vDomBottomNewRows)}},s.prototype._removeBottomRow=function(e){var t=this.tableElement,o=this.getDisplayRows()[this.vDomBottom],i=o.getHeight()||this.vDomRowHeight;if(e>=i){var n=o.getElement();n.parentNode&&n.parentNode.removeChild(n),this.vDomBottomPad+=i,this.vDomBottomPad<0&&(this.vDomBottomPad=0),t.style.paddingBottom=this.vDomBottomPad+"px",this.vDomScrollPosBottom-=i,this.vDomBottom--,e=-(this.scrollTop-this.vDomScrollPosBottom),this._removeBottomRow(e)}},s.prototype._quickNormalizeRowHeight=function(e){e.forEach(function(e){e.calcHeight()}),e.forEach(function(e){e.setCellHeight()}),e.length=0},s.prototype.normalizeHeight=function(){this.activeRows.forEach(function(e){e.normalizeHeight()})},s.prototype.adjustTableSize=function(){var e,t=this.element.clientHeight;if("virtual"===this.renderMode){var o=this.columnManager.getElement().offsetHeight+(this.table.footerManager&&!this.table.footerManager.external?this.table.footerManager.getElement().offsetHeight:0);this.fixedHeight?(this.element.style.minHeight="calc(100% - "+o+"px)",this.element.style.height="calc(100% - "+o+"px)",this.element.style.maxHeight="calc(100% - "+o+"px)"):(this.element.style.height="",this.element.style.height=this.table.element.clientHeight-o+"px",this.element.scrollTop=this.scrollTop),this.height=this.element.clientHeight,this.vDomWindowBuffer=this.table.options.virtualDomBuffer||this.height,this.fixedHeight||t==this.element.clientHeight||((e=this.table.modExists("resizeTable"))&&!this.table.modules.resizeTable.autoResize||!e)&&this.redraw()}},s.prototype.reinitialize=function(){this.rows.forEach(function(e){e.reinitialize()})},s.prototype.blockRedraw=function(){this.redrawBlock=!0,this.redrawBlockRestoreConfig=!1},s.prototype.restoreRedraw=function(){this.redrawBlock=!1,this.redrawBlockRestoreConfig?(this.refreshActiveData(this.redrawBlockRestoreConfig.stage,this.redrawBlockRestoreConfig.skipStage,this.redrawBlockRestoreConfig.renderInPosition),this.redrawBlockRestoreConfig=!1):this.redrawBlockRederInPosition&&this.reRenderInPosition(),this.redrawBlockRederInPosition=!1},s.prototype.redraw=function(e){var t=this.scrollLeft;this.adjustTableSize(),this.table.tableWidth=this.table.element.clientWidth,e?this.renderTable():("classic"==this.renderMode?this.table.options.groupBy?this.refreshActiveData("group",!1,!1):this._simpleRender():(this.reRenderInPosition(),this.scrollHorizontal(t)),this.displayRowsCount||this.table.options.placeholder&&this.getElement().appendChild(this.table.options.placeholder))},s.prototype.resetScroll=function(){if(this.element.scrollLeft=0,this.element.scrollTop=0,"ie"===this.table.browser){var e=document.createEvent("Event");e.initEvent("scroll",!1,!0),this.element.dispatchEvent(e)}else this.element.dispatchEvent(new Event("scroll"))};var r=function(e){this._row=e};r.prototype.getData=function(e){return this._row.getData(e)},r.prototype.getElement=function(){return this._row.getElement()},r.prototype.getCells=function(){var e=[];return this._row.getCells().forEach(function(t){e.push(t.getComponent())}),e},r.prototype.getCell=function(e){var t=this._row.getCell(e);return!!t&&t.getComponent()},r.prototype.getIndex=function(){return this._row.getData("data")[this._row.table.options.index]},r.prototype.getPosition=function(e){return this._row.table.rowManager.getRowPosition(this._row,e)},r.prototype.delete=function(){return this._row.delete()},r.prototype.scrollTo=function(){return this._row.table.rowManager.scrollToRow(this._row)},r.prototype.pageTo=function(){if(this._row.table.modExists("page",!0))return this._row.table.modules.page.setPageToRow(this._row)},r.prototype.move=function(e,t){this._row.moveToRow(e,t)},r.prototype.update=function(e){return this._row.updateData(e)},
+r.prototype.normalizeHeight=function(){this._row.normalizeHeight(!0)},r.prototype.select=function(){this._row.table.modules.selectRow.selectRows(this._row)},r.prototype.deselect=function(){this._row.table.modules.selectRow.deselectRows(this._row)},r.prototype.toggleSelect=function(){this._row.table.modules.selectRow.toggleRow(this._row)},r.prototype.isSelected=function(){return this._row.table.modules.selectRow.isRowSelected(this._row)},r.prototype._getSelf=function(){return this._row},r.prototype.validate=function(){return this._row.validate()},r.prototype.freeze=function(){this._row.table.modExists("frozenRows",!0)&&this._row.table.modules.frozenRows.freezeRow(this._row)},r.prototype.unfreeze=function(){this._row.table.modExists("frozenRows",!0)&&this._row.table.modules.frozenRows.unfreezeRow(this._row)},r.prototype.isFrozen=function(){if(this._row.table.modExists("frozenRows",!0)){return this._row.table.modules.frozenRows.rows.indexOf(this._row)>-1}return!1},r.prototype.treeCollapse=function(){this._row.table.modExists("dataTree",!0)&&this._row.table.modules.dataTree.collapseRow(this._row)},r.prototype.treeExpand=function(){this._row.table.modExists("dataTree",!0)&&this._row.table.modules.dataTree.expandRow(this._row)},r.prototype.treeToggle=function(){this._row.table.modExists("dataTree",!0)&&this._row.table.modules.dataTree.toggleRow(this._row)},r.prototype.getTreeParent=function(){return!!this._row.table.modExists("dataTree",!0)&&this._row.table.modules.dataTree.getTreeParent(this._row)},r.prototype.getTreeChildren=function(){return!!this._row.table.modExists("dataTree",!0)&&this._row.table.modules.dataTree.getTreeChildren(this._row)},r.prototype.addTreeChild=function(e,t,o){return!!this._row.table.modExists("dataTree",!0)&&this._row.table.modules.dataTree.addTreeChildRow(this._row,e,t,o)},r.prototype.reformat=function(){return this._row.reinitialize()},r.prototype.getGroup=function(){return this._row.getGroup().getComponent()},r.prototype.getTable=function(){return this._row.table},r.prototype.getNextRow=function(){var e=this._row.nextRow();return e?e.getComponent():e},r.prototype.getPrevRow=function(){var e=this._row.prevRow();return e?e.getComponent():e};var a=function(e,t){var o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"row";this.table=t.table,this.parent=t,this.data={},this.type=o,this.element=this.createElement(),this.modules={},this.cells=[],this.height=0,this.heightStyled="",this.manualHeight=!1,this.outerHeight=0,this.initialized=!1,this.heightInitialized=!1,this.component=null,this.setData(e),this.generateElement()};a.prototype.createElement=function(){var e=document.createElement("div");return e.classList.add("tabulator-row"),e.setAttribute("role","row"),e},a.prototype.getElement=function(){return this.element},a.prototype.detachElement=function(){this.element&&this.element.parentNode&&this.element.parentNode.removeChild(this.element)},a.prototype.generateElement=function(){var e,t,o,i=this;!1!==i.table.options.selectable&&i.table.modExists("selectRow")&&i.table.modules.selectRow.initializeRow(this),!1!==i.table.options.movableRows&&i.table.modExists("moveRow")&&i.table.modules.moveRow.initializeRow(this),!1!==i.table.options.dataTree&&i.table.modExists("dataTree")&&i.table.modules.dataTree.initializeRow(this),"collapse"===i.table.options.responsiveLayout&&i.table.modExists("responsiveLayout")&&i.table.modules.responsiveLayout.initializeRow(this),i.table.options.rowContextMenu&&this.table.modExists("menu")&&i.table.modules.menu.initializeRow(this),i.table.options.rowClick&&i.element.addEventListener("click",function(e){i.table.options.rowClick(e,i.getComponent())}),i.table.options.rowDblClick&&i.element.addEventListener("dblclick",function(e){i.table.options.rowDblClick(e,i.getComponent())}),i.table.options.rowContext&&i.element.addEventListener("contextmenu",function(e){i.table.options.rowContext(e,i.getComponent())}),i.table.options.rowMouseEnter&&i.element.addEventListener("mouseenter",function(e){i.table.options.rowMouseEnter(e,i.getComponent())}),i.table.options.rowMouseLeave&&i.element.addEventListener("mouseleave",function(e){i.table.options.rowMouseLeave(e,i.getComponent())}),i.table.options.rowMouseOver&&i.element.addEventListener("mouseover",function(e){i.table.options.rowMouseOver(e,i.getComponent())}),i.table.options.rowMouseOut&&i.element.addEventListener("mouseout",function(e){i.table.options.rowMouseOut(e,i.getComponent())}),i.table.options.rowMouseMove&&i.element.addEventListener("mousemove",function(e){i.table.options.rowMouseMove(e,i.getComponent())}),i.table.options.rowTap&&(o=!1,i.element.addEventListener("touchstart",function(e){o=!0},{passive:!0}),i.element.addEventListener("touchend",function(e){o&&i.table.options.rowTap(e,i.getComponent()),o=!1})),i.table.options.rowDblTap&&(e=null,i.element.addEventListener("touchend",function(t){e?(clearTimeout(e),e=null,i.table.options.rowDblTap(t,i.getComponent())):e=setTimeout(function(){clearTimeout(e),e=null},300)})),i.table.options.rowTapHold&&(t=null,i.element.addEventListener("touchstart",function(e){clearTimeout(t),t=setTimeout(function(){clearTimeout(t),t=null,o=!1,i.table.options.rowTapHold(e,i.getComponent())},1e3)},{passive:!0}),i.element.addEventListener("touchend",function(e){clearTimeout(t),t=null}))},a.prototype.generateCells=function(){this.cells=this.table.columnManager.generateCells(this)},a.prototype.initialize=function(e){var t=this;if(!t.initialized||e){for(t.deleteCells();t.element.firstChild;)t.element.removeChild(t.element.firstChild);this.table.modExists("frozenColumns")&&this.table.modules.frozenColumns.layoutRow(this),this.generateCells(),t.cells.forEach(function(e){t.element.appendChild(e.getElement()),e.cellRendered()}),e&&t.normalizeHeight(),t.table.options.dataTree&&t.table.modExists("dataTree")&&t.table.modules.dataTree.layoutRow(this),"collapse"===t.table.options.responsiveLayout&&t.table.modExists("responsiveLayout")&&t.table.modules.responsiveLayout.layoutRow(this),t.table.options.rowFormatter&&t.table.options.rowFormatter(t.getComponent()),t.table.options.resizableRows&&t.table.modExists("resizeRows")&&t.table.modules.resizeRows.initializeRow(t),t.initialized=!0}},a.prototype.reinitializeHeight=function(){this.heightInitialized=!1,null!==this.element.offsetParent&&this.normalizeHeight(!0)},a.prototype.reinitialize=function(){this.initialized=!1,this.heightInitialized=!1,this.manualHeight||(this.height=0,this.heightStyled=""),null!==this.element.offsetParent&&this.initialize(!0)},a.prototype.calcHeight=function(e){var t=0,o=this.table.options.resizableRows?this.element.clientHeight:0;this.cells.forEach(function(e){var o=e.getHeight();o>t&&(t=o)}),this.height=e?Math.max(t,o):this.manualHeight?this.height:Math.max(t,o),this.heightStyled=this.height?this.height+"px":"",this.outerHeight=this.element.offsetHeight},a.prototype.setCellHeight=function(){this.cells.forEach(function(e){e.setHeight()}),this.heightInitialized=!0},a.prototype.clearCellHeight=function(){this.cells.forEach(function(e){e.clearHeight()})},a.prototype.normalizeHeight=function(e){e&&this.clearCellHeight(),this.calcHeight(e),this.setCellHeight()},a.prototype.setHeight=function(e,t){(this.height!=e||t)&&(this.manualHeight=!0,this.height=e,this.heightStyled=e?e+"px":"",this.setCellHeight(),this.outerHeight=this.element.offsetHeight)},a.prototype.getHeight=function(){return this.outerHeight},a.prototype.getWidth=function(){return this.element.offsetWidth},a.prototype.deleteCell=function(e){var t=this.cells.indexOf(e);t>-1&&this.cells.splice(t,1)},a.prototype.setData=function(e){this.table.modExists("mutator")&&(e=this.table.modules.mutator.transformRow(e,"data")),this.data=e,this.table.options.reactiveData&&this.table.modExists("reactiveData",!0)&&this.table.modules.reactiveData.watchRow(this)},a.prototype.updateData=function(e){var t,o=this,i=d.prototype.helpers.elVisible(this.element),n={};return new Promise(function(s,r){"string"==typeof e&&(e=JSON.parse(e)),o.table.options.reactiveData&&o.table.modExists("reactiveData",!0)&&o.table.modules.reactiveData.block(),o.table.modExists("mutator")?(n=Object.assign(n,o.data),n=Object.assign(n,e),t=o.table.modules.mutator.transformRow(n,"data",e)):t=e;for(var a in t)o.data[a]=t[a];o.table.options.reactiveData&&o.table.modExists("reactiveData",!0)&&o.table.modules.reactiveData.unblock();for(var a in e){o.table.columnManager.getColumnsByFieldRoot(a).forEach(function(e){var n=o.getCell(e.getField());if(n){var s=e.getFieldValue(t);n.getValue()!=s&&(n.setValueProcessData(s),i&&n.cellRendered())}})}i?(o.normalizeHeight(!0),o.table.options.rowFormatter&&o.table.options.rowFormatter(o.getComponent())):(o.initialized=!1,o.height=0,o.heightStyled=""),!1!==o.table.options.dataTree&&o.table.modExists("dataTree")&&o.table.modules.dataTree.redrawNeeded(e)&&(o.table.modules.dataTree.initializeRow(o),o.table.modules.dataTree.layoutRow(o),o.table.rowManager.refreshActiveData("tree",!1,!0)),o.table.options.rowUpdated.call(o.table,o.getComponent()),s()})},a.prototype.getData=function(e){var t=this;return e?t.table.modExists("accessor")?t.table.modules.accessor.transformRow(t.data,e):void 0:this.data},a.prototype.getCell=function(e){return e=this.table.columnManager.findColumn(e),this.cells.find(function(t){return t.column===e})},a.prototype.getCellIndex=function(e){return this.cells.findIndex(function(t){return t===e})},a.prototype.findNextEditableCell=function(e){var t=!1;if(e<this.cells.length-1)for(var o=e+1;o<this.cells.length;o++){var i=this.cells[o];if(i.column.modules.edit&&d.prototype.helpers.elVisible(i.getElement())){var n=!0;if("function"==typeof i.column.modules.edit.check&&(n=i.column.modules.edit.check(i.getComponent())),n){t=i;break}}}return t},a.prototype.findPrevEditableCell=function(e){var t=!1;if(e>0)for(var o=e-1;o>=0;o--){var i=this.cells[o],n=!0;if(i.column.modules.edit&&d.prototype.helpers.elVisible(i.getElement())&&("function"==typeof i.column.modules.edit.check&&(n=i.column.modules.edit.check(i.getComponent())),n)){t=i;break}}return t},a.prototype.getCells=function(){return this.cells},a.prototype.nextRow=function(){return this.table.rowManager.nextDisplayRow(this,!0)||!1},a.prototype.prevRow=function(){return this.table.rowManager.prevDisplayRow(this,!0)||!1},a.prototype.moveToRow=function(e,t){var o=this.table.rowManager.findRow(e);o?(this.table.rowManager.moveRowActual(this,o,!t),this.table.rowManager.refreshActiveData("display",!1,!0)):console.warn("Move Error - No matching row found:",e)},a.prototype.validate=function(){var e=[];return this.cells.forEach(function(t){t.validate()||e.push(t.getComponent())}),!e.length||e},a.prototype.delete=function(){var e=this;return new Promise(function(t,o){var i,n;e.table.options.history&&e.table.modExists("history")&&(e.table.options.groupBy&&e.table.modExists("groupRows")?(n=e.getGroup().rows,(i=n.indexOf(e))&&(i=n[i-1])):(i=e.table.rowManager.getRowIndex(e))&&(i=e.table.rowManager.rows[i-1]),e.table.modules.history.action("rowDelete",e,{data:e.getData(),pos:!i,index:i})),e.deleteActual(),t()})},a.prototype.deleteActual=function(e){this.table.rowManager.getRowIndex(this);this.table.modExists("selectRow")&&this.table.modules.selectRow._deselectRow(this,!0),this.table.modExists("edit")&&this.table.modules.edit.currentCell.row===this&&this.table.modules.edit.cancelEdit(),this.table.options.reactiveData&&this.table.modExists("reactiveData",!0),this.modules.group&&this.modules.group.removeRow(this),this.table.rowManager.deleteRow(this,e),this.deleteCells(),this.initialized=!1,this.heightInitialized=!1,this.table.options.dataTree&&this.table.modExists("dataTree",!0)&&this.table.modules.dataTree.rowDelete(this),this.table.modExists("columnCalcs")&&(this.table.options.groupBy&&this.table.modExists("groupRows")?this.table.modules.columnCalcs.recalcRowGroup(this):this.table.modules.columnCalcs.recalc(this.table.rowManager.activeRows))},a.prototype.deleteCells=function(){for(var e=this.cells.length,t=0;t<e;t++)this.cells[0].delete()},a.prototype.wipe=function(){for(this.deleteCells();this.element.firstChild;)this.element.removeChild(this.element.firstChild);this.element=!1,this.modules={},this.element.parentNode&&this.element.parentNode.removeChild(this.element)},a.prototype.getGroup=function(){return this.modules.group||!1},a.prototype.getComponent=function(){return this.component||(this.component=new r(this)),this.component};var l=function(e){this._cell=e};l.prototype.getValue=function(){return this._cell.getValue()},l.prototype.getOldValue=function(){return this._cell.getOldValue()},l.prototype.getElement=function(){return this._cell.getElement()},l.prototype.getRow=function(){return this._cell.row.getComponent()},l.prototype.getData=function(){return this._cell.row.getData()},l.prototype.getField=function(){return this._cell.column.getField()},l.prototype.getColumn=function(){return this._cell.column.getComponent()},l.prototype.setValue=function(e,t){void 0===t&&(t=!0),this._cell.setValue(e,t)},l.prototype.restoreOldValue=function(){this._cell.setValueActual(this._cell.getOldValue())},l.prototype.edit=function(e){return this._cell.edit(e)},l.prototype.cancelEdit=function(){this._cell.cancelEdit()},l.prototype.isEdited=function(){return!!this._cell.modules.edit&&this._cell.modules.edit.edited},l.prototype.clearEdited=function(){self.table.modExists("edit",!0)&&this._cell.table.modules.edit.clearEdited(this._cell)},l.prototype.isValid=function(){return!this._cell.modules.validate||!this._cell.modules.validate.invalid},l.prototype.validate=function(){return this._cell.validate()},l.prototype.clearValidation=function(){self.table.modExists("validate",!0)&&this._cell.table.modules.validate.clearValidation(this._cell)},l.prototype.nav=function(){return this._cell.nav()},l.prototype.checkHeight=function(){this._cell.checkHeight()},l.prototype.getTable=function(){return this._cell.table},l.prototype._getSelf=function(){return this._cell};var c=function(e,t){this.table=e.table,this.column=e,this.row=t,this.element=null,this.value=null,this.oldValue=null,this.modules={},this.height=null,this.width=null,this.minWidth=null,this.component=null,this.build()};c.prototype.build=function(){this.generateElement(),this.setWidth(),this._configureCell(),this.setValueActual(this.column.getFieldValue(this.row.data))},c.prototype.generateElement=function(){this.element=document.createElement("div"),this.element.className="tabulator-cell",this.element.setAttribute("role","gridcell"),this.element=this.element},c.prototype._configureCell=function(){var e=this,t=e.column.cellEvents,o=e.element,i=this.column.getField(),n={top:"flex-start",bottom:"flex-end",middle:"center"},s={left:"flex-start",right:"flex-end",center:"center"};if(o.style.textAlign=e.column.hozAlign,e.column.vertAlign&&(o.style.display="inline-flex",o.style.alignItems=n[e.column.vertAlign]||"",e.column.hozAlign&&(o.style.justifyContent=s[e.column.hozAlign]||"")),i&&o.setAttribute("tabulator-field",i),e.column.definition.cssClass){e.column.definition.cssClass.split(" ").forEach(function(e){o.classList.add(e)})}"hover"===this.table.options.tooltipGenerationMode&&o.addEventListener("mouseenter",function(t){e._generateTooltip()}),e._bindClickEvents(t),e._bindTouchEvents(t),e._bindMouseEvents(t),e.column.modules.edit&&e.table.modules.edit.bindEditor(e),e.column.definition.rowHandle&&!1!==e.table.options.movableRows&&e.table.modExists("moveRow")&&e.table.modules.moveRow.initializeCell(e),e.column.visible||e.hide()},c.prototype._bindClickEvents=function(e){var t=this,o=t.element;(e.cellClick||t.table.options.cellClick)&&o.addEventListener("click",function(o){var i=t.getComponent();e.cellClick&&e.cellClick.call(t.table,o,i),t.table.options.cellClick&&t.table.options.cellClick.call(t.table,o,i)}),e.cellDblClick||this.table.options.cellDblClick?o.addEventListener("dblclick",function(o){var i=t.getComponent();e.cellDblClick&&e.cellDblClick.call(t.table,o,i),t.table.options.cellDblClick&&t.table.options.cellDblClick.call(t.table,o,i)}):o.addEventListener("dblclick",function(e){if(!t.table.modExists("edit")||t.table.modules.edit.currentCell!==t){e.preventDefault();try{if(document.selection){var o=document.body.createTextRange();o.moveToElementText(t.element),o.select()}else if(window.getSelection){var o=document.createRange();o.selectNode(t.element),window.getSelection().removeAllRanges(),window.getSelection().addRange(o)}}catch(e){}}}),(e.cellContext||this.table.options.cellContext)&&o.addEventListener("contextmenu",function(o){var i=t.getComponent();e.cellContext&&e.cellContext.call(t.table,o,i),t.table.options.cellContext&&t.table.options.cellContext.call(t.table,o,i)})},c.prototype._bindMouseEvents=function(e){var t=this,o=t.element;(e.cellMouseEnter||t.table.options.cellMouseEnter)&&o.addEventListener("mouseenter",function(o){var i=t.getComponent();e.cellMouseEnter&&e.cellMouseEnter.call(t.table,o,i),t.table.options.cellMouseEnter&&t.table.options.cellMouseEnter.call(t.table,o,i)}),(e.cellMouseLeave||t.table.options.cellMouseLeave)&&o.addEventListener("mouseleave",function(o){var i=t.getComponent();e.cellMouseLeave&&e.cellMouseLeave.call(t.table,o,i),t.table.options.cellMouseLeave&&t.table.options.cellMouseLeave.call(t.table,o,i)}),(e.cellMouseOver||t.table.options.cellMouseOver)&&o.addEventListener("mouseover",function(o){var i=t.getComponent();e.cellMouseOver&&e.cellMouseOver.call(t.table,o,i),t.table.options.cellMouseOver&&t.table.options.cellMouseOver.call(t.table,o,i)}),(e.cellMouseOut||t.table.options.cellMouseOut)&&o.addEventListener("mouseout",function(o){var i=t.getComponent();e.cellMouseOut&&e.cellMouseOut.call(t.table,o,i),t.table.options.cellMouseOut&&t.table.options.cellMouseOut.call(t.table,o,i)}),(e.cellMouseMove||t.table.options.cellMouseMove)&&o.addEventListener("mousemove",function(o){var i=t.getComponent();e.cellMouseMove&&e.cellMouseMove.call(t.table,o,i),t.table.options.cellMouseMove&&t.table.options.cellMouseMove.call(t.table,o,i)})},c.prototype._bindTouchEvents=function(e){var t,o,i,n=this,s=n.element;(e.cellTap||this.table.options.cellTap)&&(i=!1,s.addEventListener("touchstart",function(e){i=!0},{passive:!0}),s.addEventListener("touchend",function(t){if(i){var o=n.getComponent();e.cellTap&&e.cellTap.call(n.table,t,o),n.table.options.cellTap&&n.table.options.cellTap.call(n.table,t,o)}i=!1})),(e.cellDblTap||this.table.options.cellDblTap)&&(t=null,s.addEventListener("touchend",function(o){if(t){clearTimeout(t),t=null;var i=n.getComponent();e.cellDblTap&&e.cellDblTap.call(n.table,o,i),n.table.options.cellDblTap&&n.table.options.cellDblTap.call(n.table,o,i)}else t=setTimeout(function(){clearTimeout(t),t=null},300)})),(e.cellTapHold||this.table.options.cellTapHold)&&(o=null,s.addEventListener("touchstart",function(t){clearTimeout(o),o=setTimeout(function(){clearTimeout(o),o=null,i=!1;var s=n.getComponent();e.cellTapHold&&e.cellTapHold.call(n.table,t,s),n.table.options.cellTapHold&&n.table.options.cellTapHold.call(n.table,t,s)},1e3)},{passive:!0}),s.addEventListener("touchend",function(e){clearTimeout(o),o=null}))},c.prototype._generateContents=function(){var e;switch(e=this.table.modExists("format")?this.table.modules.format.formatValue(this):this.element.innerHTML=this.value,void 0===e?"undefined":_typeof(e)){case"object":if(e instanceof Node){for(;this.element.firstChild;)this.element.removeChild(this.element.firstChild);this.element.appendChild(e)}else this.element.innerHTML="",null!=e&&console.warn("Format Error - Formatter has returned a type of object, the only valid formatter object return is an instance of Node, the formatter returned:",e);break;case"undefined":case"null":this.element.innerHTML="";break;default:this.element.innerHTML=e}},c.prototype.cellRendered=function(){this.table.modExists("format")&&this.table.modules.format.cellRendered&&this.table.modules.format.cellRendered(this)},c.prototype._generateTooltip=function(){var e=this.column.tooltip;e?(!0===e?e=this.value:"function"==typeof e&&!1===(e=e(this.getComponent()))&&(e=""),void 0===e&&(e=""),this.element.setAttribute("title",e)):this.element.setAttribute("title","")},c.prototype.getElement=function(){return this.element},c.prototype.getValue=function(){return this.value},c.prototype.getOldValue=function(){return this.oldValue},c.prototype.setValue=function(e,t){var o,i=this.setValueProcessData(e,t);i&&(this.table.options.history&&this.table.modExists("history")&&this.table.modules.history.action("cellEdit",this,{oldValue:this.oldValue,newValue:this.value}),o=this.getComponent(),this.column.cellEvents.cellEdited&&this.column.cellEvents.cellEdited.call(this.table,o),this.cellRendered(),this.table.options.cellEdited.call(this.table,o),this.table.options.dataEdited.call(this.table,this.table.rowManager.getData()))},c.prototype.setValueProcessData=function(e,t){var o=!1;return this.value!=e&&(o=!0,t&&this.column.modules.mutate&&(e=this.table.modules.mutator.transformCell(this,e))),this.setValueActual(e),o&&this.table.modExists("columnCalcs")&&(this.column.definition.topCalc||this.column.definition.bottomCalc)&&(this.table.options.groupBy&&this.table.modExists("groupRows")?("table"!=this.table.options.columnCalcs&&"both"!=this.table.options.columnCalcs||this.table.modules.columnCalcs.recalc(this.table.rowManager.activeRows),"table"!=this.table.options.columnCalcs&&this.table.modules.columnCalcs.recalcRowGroup(this.row)):this.table.modules.columnCalcs.recalc(this.table.rowManager.activeRows)),o},c.prototype.setValueActual=function(e){this.oldValue=this.value,this.value=e,this.table.options.reactiveData&&this.table.modExists("reactiveData")&&this.table.modules.reactiveData.block(),this.column.setFieldValue(this.row.data,e),this.table.options.reactiveData&&this.table.modExists("reactiveData")&&this.table.modules.reactiveData.unblock(),this._generateContents(),this._generateTooltip(),this.table.options.resizableColumns&&this.table.modExists("resizeColumns")&&this.table.modules.resizeColumns.initializeColumn("cell",this.column,this.element),this.column.definition.contextMenu&&this.table.modExists("menu")&&this.table.modules.menu.initializeCell(this),this.table.modExists("frozenColumns")&&this.table.modules.frozenColumns.layoutElement(this.element,this.column)},c.prototype.setWidth=function(){this.width=this.column.width,this.element.style.width=this.column.widthStyled},c.prototype.clearWidth=function(){this.width="",this.element.style.width=""},c.prototype.getWidth=function(){return this.width||this.element.offsetWidth},c.prototype.setMinWidth=function(){this.minWidth=this.column.minWidth,this.element.style.minWidth=this.column.minWidthStyled},c.prototype.checkHeight=function(){this.row.reinitializeHeight()},c.prototype.clearHeight=function(){this.element.style.height="",this.height=null},c.prototype.setHeight=function(){this.height=this.row.height,this.element.style.height=this.row.heightStyled},c.prototype.getHeight=function(){return this.height||this.element.offsetHeight},c.prototype.show=function(){this.element.style.display=""},c.prototype.hide=function(){this.element.style.display="none"},c.prototype.edit=function(e){if(this.table.modExists("edit",!0))return this.table.modules.edit.editCell(this,e)},c.prototype.cancelEdit=function(){if(this.table.modExists("edit",!0)){var e=this.table.modules.edit.getCurrentCell();e&&e._getSelf()===this?this.table.modules.edit.cancelEdit():console.warn("Cancel Editor Error - This cell is not currently being edited ")}},c.prototype.validate=function(){if(this.column.modules.validate&&this.table.modExists("validate",!0)){return!0===this.table.modules.validate.validate(this.column.modules.validate,this,this.getValue())}return!0},c.prototype.delete=function(){this.table.rowManager.redrawBlock||this.element.parentNode.removeChild(this.element),this.modules.validate&&this.modules.validate.invalid&&this.table.modules.validate.clearValidation(this),this.modules.edit&&this.modules.edit.edited&&this.table.modules.edit.clearEdited(this),this.element=!1,this.column.deleteCell(this),this.row.deleteCell(this),this.calcs={}},c.prototype.nav=function(){var e=this,t=!1,o=this.row.getCellIndex(this);return{next:function(){var t,o=this.right();return!!o||!(!(t=e.table.rowManager.nextDisplayRow(e.row,!0))||!(o=t.findNextEditableCell(-1)))&&(o.edit(),!0)},prev:function(){var t,o=this.left();return!!o||!(!(t=e.table.rowManager.prevDisplayRow(e.row,!0))||!(o=t.findPrevEditableCell(t.cells.length)))&&(o.edit(),!0)},left:function(){return!!(t=e.row.findPrevEditableCell(o))&&(t.edit(),!0)},right:function(){return!!(t=e.row.findNextEditableCell(o))&&(t.edit(),!0)},up:function(){var t=e.table.rowManager.prevDisplayRow(e.row,!0);t&&t.cells[o].edit()},down:function(){var t=e.table.rowManager.nextDisplayRow(e.row,!0);t&&t.cells[o].edit()}}},c.prototype.getIndex=function(){this.row.getCellIndex(this)},c.prototype.getComponent=function(){return this.component||(this.component=new l(this)),this.component};var u=function(e){this.table=e,this.active=!1,this.element=this.createElement(),this.external=!1,this.links=[],this._initialize()};u.prototype.createElement=function(){var e=document.createElement("div");return e.classList.add("tabulator-footer"),e},u.prototype._initialize=function(e){if(this.table.options.footerElement)switch(_typeof(this.table.options.footerElement)){case"string":"<"===this.table.options.footerElement[0]?this.element.innerHTML=this.table.options.footerElement:(this.external=!0,this.element=document.querySelector(this.table.options.footerElement));break;default:this.element=this.table.options.footerElement}},u.prototype.getElement=function(){return this.element},u.prototype.append=function(e,t){this.activate(t),this.element.appendChild(e),this.table.rowManager.adjustTableSize()},u.prototype.prepend=function(e,t){this.activate(t),this.element.insertBefore(e,this.element.firstChild),this.table.rowManager.adjustTableSize()},u.prototype.remove=function(e){e.parentNode.removeChild(e),this.deactivate()},u.prototype.deactivate=function(e){this.element.firstChild&&!e||(this.external||this.element.parentNode.removeChild(this.element),this.active=!1)},u.prototype.activate=function(e){this.active||(this.active=!0,this.external||(this.table.element.appendChild(this.getElement()),this.table.element.style.display="")),e&&this.links.push(e)},u.prototype.redraw=function(){this.links.forEach(function(e){e.footerRedraw()})};var d=function e(t,o){this.options={},this.columnManager=null,this.rowManager=null,this.footerManager=null,this.browser="",this.browserSlow=!1,this.browserMobile=!1,this.modules={},this.initializeElement(t),this.initializeOptions(o||{}),this._create(),e.prototype.comms.register(this)};d.prototype.defaultOptions={height:!1,minHeight:!1,maxHeight:!1,layout:"fitData",layoutColumnsOnNewData:!1,columnMinWidth:40,columnHeaderVertAlign:"top",columnVertAlign:!1,resizableColumns:!0,resizableRows:!1,autoResize:!0,columns:[],cellHozAlign:"",cellVertAlign:"",data:[],autoColumns:!1,reactiveData:!1,nestedFieldSeparator:".",tooltips:!1,tooltipsHeader:!1,tooltipGenerationMode:"load",initialSort:!1,initialFilter:!1,initialHeaderFilter:!1,columnHeaderSortMulti:!0,sortOrderReverse:!1,headerSort:!0,headerSortTristate:!1,footerElement:!1,index:"id",keybindings:[],tabEndNewRow:!1,invalidOptionWarnings:!0,clipboard:!1,clipboardCopyStyled:!0,clipboardCopyConfig:!1,clipboardCopyFormatter:!1,clipboardCopyRowRange:"active",clipboardPasteParser:"table",clipboardPasteAction:"insert",clipboardCopied:function(){},clipboardPasted:function(){},clipboardPasteError:function(){},downloadDataFormatter:!1,downloadReady:function(e,t){return t},downloadComplete:!1,downloadConfig:{},downloadRowRange:"active",dataTree:!1,dataTreeElementColumn:!1,dataTreeBranchElement:!0,dataTreeChildIndent:9,dataTreeChildField:"_children",dataTreeCollapseElement:!1,dataTreeExpandElement:!1,dataTreeStartExpanded:!1,dataTreeRowExpanded:function(){},dataTreeRowCollapsed:function(){},dataTreeChildColumnCalcs:!1,dataTreeSelectPropagate:!1,printAsHtml:!1,printFormatter:!1,printHeader:!1,printFooter:!1,printCopyStyle:!0,printStyled:!0,printVisibleRows:!0,printRowRange:"visible",printConfig:{},addRowPos:"bottom",selectable:"highlight",selectableRangeMode:"drag",selectableRollingSelection:!0,selectablePersistence:!0,selectableCheck:function(e,t){return!0},headerFilterLiveFilterDelay:300,headerFilterPlaceholder:!1,headerVisible:!0,history:!1,locale:!1,langs:{},virtualDom:!0,virtualDomBuffer:0,persistentLayout:!1,persistentSort:!1,persistentFilter:!1,persistenceID:"",persistenceMode:!0,persistenceReaderFunc:!1,persistenceWriterFunc:!1,persistence:!1,responsiveLayout:!1,responsiveLayoutCollapseStartOpen:!0,responsiveLayoutCollapseUseFormatters:!0,responsiveLayoutCollapseFormatter:!1,pagination:!1,paginationSize:!1,paginationInitialPage:1,paginationButtonCount:5,paginationSizeSelector:!1,paginationElement:!1,paginationDataSent:{},paginationDataReceived:{},paginationAddRow:"page",ajaxURL:!1,ajaxURLGenerator:!1,ajaxParams:{},ajaxConfig:"get",ajaxContentType:"form",ajaxRequestFunc:!1,ajaxLoader:!0,ajaxLoaderLoading:!1,ajaxLoaderError:!1,ajaxFiltering:!1,ajaxSorting:!1,ajaxProgressiveLoad:!1,ajaxProgressiveLoadDelay:0,ajaxProgressiveLoadScrollMargin:0,groupBy:!1,groupStartOpen:!0,groupValues:!1,groupHeader:!1,groupHeaderPrint:null,groupHeaderClipboard:null,groupHeaderHtmlOutput:null,groupHeaderDownload:null,htmlOutputConfig:!1,movableColumns:!1,movableRows:!1,movableRowsConnectedTables:!1,movableRowsConnectedElements:!1,movableRowsSender:!1,movableRowsReceiver:"insert",movableRowsSendingStart:function(){},movableRowsSent:function(){},movableRowsSentFailed:function(){},movableRowsSendingStop:function(){},movableRowsReceivingStart:function(){},movableRowsReceived:function(){},movableRowsReceivedFailed:function(){},movableRowsReceivingStop:function(){},movableRowsElementDrop:function(){},scrollToRowPosition:"top",scrollToRowIfVisible:!0,scrollToColumnPosition:"left",scrollToColumnIfVisible:!0,rowFormatter:!1,rowFormatterPrint:null,rowFormatterClipboard:null,rowFormatterHtmlOutput:null,placeholder:!1,tableBuilding:function(){},tableBuilt:function(){},renderStarted:function(){},renderComplete:function(){},rowClick:!1,rowDblClick:!1,rowContext:!1,rowTap:!1,rowDblTap:!1,rowTapHold:!1,rowMouseEnter:!1,rowMouseLeave:!1,rowMouseOver:!1,rowMouseOut:!1,rowMouseMove:!1,rowContextMenu:!1,rowAdded:function(){},rowDeleted:function(){},rowMoved:function(){},rowUpdated:function(){},rowSelectionChanged:function(){},rowSelected:function(){},rowDeselected:function(){},rowResized:function(){},cellClick:!1,cellDblClick:!1,cellContext:!1,cellTap:!1,cellDblTap:!1,cellTapHold:!1,cellMouseEnter:!1,cellMouseLeave:!1,cellMouseOver:!1,cellMouseOut:!1,cellMouseMove:!1,cellEditing:function(){},cellEdited:function(){},cellEditCancelled:function(){},columnMoved:!1,columnResized:function(){},columnTitleChanged:function(){},columnVisibilityChanged:function(){},htmlImporting:function(){},htmlImported:function(){},dataLoading:function(){},dataLoaded:function(){},dataEdited:function(){},ajaxRequesting:function(){},ajaxResponse:!1,ajaxError:function(){},dataFiltering:!1,dataFiltered:!1,dataSorting:function(){},dataSorted:function(){},groupToggleElement:"arrow",groupClosedShowCalcs:!1,dataGrouping:function(){},dataGrouped:!1,groupVisibilityChanged:function(){},groupClick:!1,groupDblClick:!1,groupContext:!1,groupContextMenu:!1,groupTap:!1,groupDblTap:!1,groupTapHold:!1,columnCalcs:!0,pageLoaded:function(){},localized:function(){},validationMode:"blocking",validationFailed:function(){},historyUndo:function(){},historyRedo:function(){},scrollHorizontal:function(){},scrollVertical:function(){}},d.prototype.initializeOptions=function(e){if(!1!==e.invalidOptionWarnings)for(var t in e)void 0===this.defaultOptions[t]&&console.warn("Invalid table constructor option:",t)
+;for(var t in this.defaultOptions)t in e?this.options[t]=e[t]:Array.isArray(this.defaultOptions[t])?this.options[t]=[]:"object"===_typeof(this.defaultOptions[t])&&null!==this.defaultOptions[t]?this.options[t]={}:this.options[t]=this.defaultOptions[t]},d.prototype.initializeElement=function(e){return"undefined"!=typeof HTMLElement&&e instanceof HTMLElement?(this.element=e,!0):"string"==typeof e?(this.element=document.querySelector(e),!!this.element||(console.error("Tabulator Creation Error - no element found matching selector: ",e),!1)):(console.error("Tabulator Creation Error - Invalid element provided:",e),!1)},d.prototype._mapDepricatedFunctionality=function(){(this.options.persistentLayout||this.options.persistentSort||this.options.persistentFilter)&&(this.options.persistence||(this.options.persistence={})),this.options.downloadDataFormatter&&console.warn("DEPRECATION WARNING - downloadDataFormatter option has been deprecated"),void 0!==this.options.clipboardCopyHeader&&(this.options.columnHeaders=this.options.clipboardCopyHeader,console.warn("DEPRECATION WARNING - clipboardCopyHeader option has been deprecated, please use the columnHeaders property on the clipboardCopyConfig option")),!0!==this.options.printVisibleRows&&(console.warn("printVisibleRows option is deprecated, you should now use the printRowRange option"),this.options.persistence.printRowRange="active"),!0!==this.options.printCopyStyle&&(console.warn("printCopyStyle option is deprecated, you should now use the printStyled option"),this.options.persistence.printStyled=this.options.printCopyStyle),this.options.persistentLayout&&(console.warn("persistentLayout option is deprecated, you should now use the persistence option"),!0!==this.options.persistence&&void 0===this.options.persistence.columns&&(this.options.persistence.columns=!0)),this.options.persistentSort&&(console.warn("persistentSort option is deprecated, you should now use the persistence option"),!0!==this.options.persistence&&void 0===this.options.persistence.sort&&(this.options.persistence.sort=!0)),this.options.persistentFilter&&(console.warn("persistentFilter option is deprecated, you should now use the persistence option"),!0!==this.options.persistence&&void 0===this.options.persistence.filter&&(this.options.persistence.filter=!0)),this.options.columnVertAlign&&(console.warn("columnVertAlign option is deprecated, you should now use the columnHeaderVertAlign option"),this.options.columnHeaderVertAlign=this.options.columnVertAlign)},d.prototype._clearSelection=function(){this.element.classList.add("tabulator-block-select"),window.getSelection?window.getSelection().empty?window.getSelection().empty():window.getSelection().removeAllRanges&&window.getSelection().removeAllRanges():document.selection&&document.selection.empty(),this.element.classList.remove("tabulator-block-select")},d.prototype._create=function(){this._clearObjectPointers(),this._mapDepricatedFunctionality(),this.bindModules(),"TABLE"===this.element.tagName&&this.modExists("htmlTableImport",!0)&&this.modules.htmlTableImport.parseTable(),this.columnManager=new t(this),this.rowManager=new s(this),this.footerManager=new u(this),this.columnManager.setRowManager(this.rowManager),this.rowManager.setColumnManager(this.columnManager),this._buildElement(),this._loadInitialData()},d.prototype._clearObjectPointers=function(){this.options.columns=this.options.columns.slice(0),this.options.reactiveData||(this.options.data=this.options.data.slice(0))},d.prototype._buildElement=function(){var e=this,t=this.element,o=this.modules,i=this.options;for(i.tableBuilding.call(this),t.classList.add("tabulator"),t.setAttribute("role","grid");t.firstChild;)t.removeChild(t.firstChild);i.height&&(i.height=isNaN(i.height)?i.height:i.height+"px",t.style.height=i.height),!1!==i.minHeight&&(i.minHeight=isNaN(i.minHeight)?i.minHeight:i.minHeight+"px",t.style.minHeight=i.minHeight),!1!==i.maxHeight&&(i.maxHeight=isNaN(i.maxHeight)?i.maxHeight:i.maxHeight+"px",t.style.maxHeight=i.maxHeight),this.columnManager.initialize(),this.rowManager.initialize(),this._detectBrowser(),this.modExists("layout",!0)&&o.layout.initialize(i.layout),!1!==i.headerFilterPlaceholder&&o.localize.setHeaderFilterPlaceholder(i.headerFilterPlaceholder);for(var n in i.langs)o.localize.installLang(n,i.langs[n]);if(o.localize.setLocale(i.locale),"string"==typeof i.placeholder){var s=document.createElement("div");s.classList.add("tabulator-placeholder");var r=document.createElement("span");r.innerHTML=i.placeholder,s.appendChild(r),i.placeholder=s}if(t.appendChild(this.columnManager.getElement()),t.appendChild(this.rowManager.getElement()),i.footerElement&&this.footerManager.activate(),i.persistence&&this.modExists("persistence",!0)&&o.persistence.initialize(),i.persistence&&this.modExists("persistence",!0)&&o.persistence.config.columns&&(i.columns=o.persistence.load("columns",i.columns)),i.movableRows&&this.modExists("moveRow")&&o.moveRow.initialize(),i.autoColumns&&this.options.data&&this.columnManager.generateColumnsFromRowData(this.options.data),this.modExists("columnCalcs")&&o.columnCalcs.initialize(),this.columnManager.setColumns(i.columns),i.dataTree&&this.modExists("dataTree",!0)&&o.dataTree.initialize(),this.modExists("frozenRows")&&this.modules.frozenRows.initialize(),(i.persistence&&this.modExists("persistence",!0)&&o.persistence.config.sort||i.initialSort)&&this.modExists("sort",!0)){var a=[];i.persistence&&this.modExists("persistence",!0)&&o.persistence.config.sort?!1===(a=o.persistence.load("sort"))&&i.initialSort&&(a=i.initialSort):i.initialSort&&(a=i.initialSort),o.sort.setSort(a)}if((i.persistence&&this.modExists("persistence",!0)&&o.persistence.config.filter||i.initialFilter)&&this.modExists("filter",!0)){var l=[];i.persistence&&this.modExists("persistence",!0)&&o.persistence.config.filter?!1===(l=o.persistence.load("filter"))&&i.initialFilter&&(l=i.initialFilter):i.initialFilter&&(l=i.initialFilter),o.filter.setFilter(l)}i.initialHeaderFilter&&this.modExists("filter",!0)&&i.initialHeaderFilter.forEach(function(t){var i=e.columnManager.findColumn(t.field);if(!i)return console.warn("Column Filter Error - No matching column found:",t.field),!1;o.filter.setHeaderFilterValue(i,t.value)}),this.modExists("ajax")&&o.ajax.initialize(),i.pagination&&this.modExists("page",!0)&&o.page.initialize(),i.groupBy&&this.modExists("groupRows",!0)&&o.groupRows.initialize(),this.modExists("keybindings")&&o.keybindings.initialize(),this.modExists("selectRow")&&o.selectRow.clearSelectionData(!0),i.autoResize&&this.modExists("resizeTable")&&o.resizeTable.initialize(),this.modExists("clipboard")&&o.clipboard.initialize(),i.printAsHtml&&this.modExists("print")&&o.print.initialize(),i.tableBuilt.call(this)},d.prototype._loadInitialData=function(){var e=this;if(e.options.pagination&&e.modExists("page"))if(e.modules.page.reset(!0,!0),"local"==e.options.pagination){if(e.options.data.length)e.rowManager.setData(e.options.data,!1,!0);else{if((e.options.ajaxURL||e.options.ajaxURLGenerator)&&e.modExists("ajax"))return void e.modules.ajax.loadData(!1,!0).then(function(){}).catch(function(){e.options.paginationInitialPage&&e.modules.page.setPage(e.options.paginationInitialPage)});e.rowManager.setData(e.options.data,!1,!0)}e.options.paginationInitialPage&&e.modules.page.setPage(e.options.paginationInitialPage)}else e.options.ajaxURL?e.modules.page.setPage(e.options.paginationInitialPage).then(function(){}).catch(function(){}):e.rowManager.setData([],!1,!0);else e.options.data.length?e.rowManager.setData(e.options.data):(e.options.ajaxURL||e.options.ajaxURLGenerator)&&e.modExists("ajax")?e.modules.ajax.loadData(!1,!0).then(function(){}).catch(function(){}):e.rowManager.setData(e.options.data,!1,!0)},d.prototype.destroy=function(){var e=this.element;for(d.prototype.comms.deregister(this),this.options.reactiveData&&this.modExists("reactiveData",!0)&&this.modules.reactiveData.unwatchData(),this.rowManager.rows.forEach(function(e){e.wipe()}),this.rowManager.rows=[],this.rowManager.activeRows=[],this.rowManager.displayRows=[],this.options.autoResize&&this.modExists("resizeTable")&&this.modules.resizeTable.clearBindings(),this.modExists("keybindings")&&this.modules.keybindings.clearBindings();e.firstChild;)e.removeChild(e.firstChild);e.classList.remove("tabulator")},d.prototype._detectBrowser=function(){var e=navigator.userAgent||navigator.vendor||window.opera;e.indexOf("Trident")>-1?(this.browser="ie",this.browserSlow=!0):e.indexOf("Edge")>-1?(this.browser="edge",this.browserSlow=!0):e.indexOf("Firefox")>-1?(this.browser="firefox",this.browserSlow=!1):(this.browser="other",this.browserSlow=!1),this.browserMobile=/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino|android|ipad|playbook|silk/i.test(e)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(e.substr(0,4))},d.prototype.blockRedraw=function(){return this.rowManager.blockRedraw()},d.prototype.restoreRedraw=function(){return this.rowManager.restoreRedraw()},d.prototype.setDataFromLocalFile=function(e){var t=this;return new Promise(function(o,i){var n=document.createElement("input");n.type="file",n.accept=e||".json,application/json",n.addEventListener("change",function(e){var s,r=n.files[0],a=new FileReader;a.readAsText(r),a.onload=function(e){try{s=JSON.parse(a.result)}catch(e){return console.warn("File Load Error - File contents is invalid JSON",e),void i(e)}t._setData(s).then(function(e){o(e)}).catch(function(e){o(e)})},a.onerror=function(e){console.warn("File Load Error - Unable to read file"),i()}}),n.click()})},d.prototype.setData=function(e,t,o){return this.modExists("ajax")&&this.modules.ajax.blockActiveRequest(),this._setData(e,t,o,!1,!0)},d.prototype._setData=function(e,t,o,i,n){var s=this;return"string"!=typeof e?e?s.rowManager.setData(e,i,n):s.modExists("ajax")&&(s.modules.ajax.getUrl||s.options.ajaxURLGenerator)?"remote"==s.options.pagination&&s.modExists("page",!0)?(s.modules.page.reset(!0,!0),s.modules.page.setPage(1)):s.modules.ajax.loadData(i,n):s.rowManager.setData([],i,n):0==e.indexOf("{")||0==e.indexOf("[")?s.rowManager.setData(JSON.parse(e),i,n):s.modExists("ajax",!0)?(t&&s.modules.ajax.setParams(t),o&&s.modules.ajax.setConfig(o),s.modules.ajax.setUrl(e),"remote"==s.options.pagination&&s.modExists("page",!0)?(s.modules.page.reset(!0,!0),s.modules.page.setPage(1)):s.modules.ajax.loadData(i,n)):void 0},d.prototype.clearData=function(){this.modExists("ajax")&&this.modules.ajax.blockActiveRequest(),this.rowManager.clearData()},d.prototype.getData=function(e){return!0===e&&(console.warn("passing a boolean to the getData function is deprecated, you should now pass the string 'active'"),e="active"),this.rowManager.getData(e)},d.prototype.getDataCount=function(e){return!0===e&&(console.warn("passing a boolean to the getDataCount function is deprecated, you should now pass the string 'active'"),e="active"),this.rowManager.getDataCount(e)},d.prototype.searchRows=function(e,t,o){if(this.modExists("filter",!0))return this.modules.filter.search("rows",e,t,o)},d.prototype.searchData=function(e,t,o){if(this.modExists("filter",!0))return this.modules.filter.search("data",e,t,o)},d.prototype.getHtml=function(e,t,o){if(this.modExists("export",!0))return this.modules.export.getHtml(e,t,o)},d.prototype.print=function(e,t,o){if(this.modExists("print",!0))return this.modules.print.printFullscreen(e,t,o)},d.prototype.getAjaxUrl=function(){if(this.modExists("ajax",!0))return this.modules.ajax.getUrl()},d.prototype.replaceData=function(e,t,o){return this.modExists("ajax")&&this.modules.ajax.blockActiveRequest(),this._setData(e,t,o,!0)},d.prototype.updateData=function(e){var t=this,o=this,i=0;return new Promise(function(n,s){t.modExists("ajax")&&t.modules.ajax.blockActiveRequest(),"string"==typeof e&&(e=JSON.parse(e)),e?e.forEach(function(e){var t=o.rowManager.findRow(e[o.options.index]);t&&(i++,t.updateData(e).then(function(){--i||n()}))}):(console.warn("Update Error - No data provided"),s("Update Error - No data provided"))})},d.prototype.addData=function(e,t,o){var i=this;return new Promise(function(n,s){i.modExists("ajax")&&i.modules.ajax.blockActiveRequest(),"string"==typeof e&&(e=JSON.parse(e)),e?i.rowManager.addRows(e,t,o).then(function(e){var t=[];e.forEach(function(e){t.push(e.getComponent())}),n(t)}):(console.warn("Update Error - No data provided"),s("Update Error - No data provided"))})},d.prototype.updateOrAddData=function(e){var t=this,o=this,i=[],n=0;return new Promise(function(s,r){t.modExists("ajax")&&t.modules.ajax.blockActiveRequest(),"string"==typeof e&&(e=JSON.parse(e)),e?e.forEach(function(e){var t=o.rowManager.findRow(e[o.options.index]);n++,t?t.updateData(e).then(function(){n--,i.push(t.getComponent()),n||s(i)}):o.rowManager.addRows(e).then(function(e){n--,i.push(e[0].getComponent()),n||s(i)})}):(console.warn("Update Error - No data provided"),r("Update Error - No data provided"))})},d.prototype.getRow=function(e){var t=this.rowManager.findRow(e);return t?t.getComponent():(console.warn("Find Error - No matching row found:",e),!1)},d.prototype.getRowFromPosition=function(e,t){var o=this.rowManager.getRowFromPosition(e,t);return o?o.getComponent():(console.warn("Find Error - No matching row found:",e),!1)},d.prototype.deleteRow=function(e){var t=this;return new Promise(function(o,i){function n(){++r==e.length&&a&&(s.rowManager.reRenderInPosition(),o())}var s=t,r=0,a=0,l=[];Array.isArray(e)||(e=[e]),e.forEach(function(e){var o=t.rowManager.findRow(e,!0);o?l.push(o):(console.warn("Delete Error - No matching row found:",e),i("Delete Error - No matching row found"),n())}),l.sort(function(e,o){return t.rowManager.rows.indexOf(e)>t.rowManager.rows.indexOf(o)?1:-1}),l.forEach(function(e){e.delete().then(function(){a++,n()}).catch(function(e){n(),i(e)})})})},d.prototype.addRow=function(e,t,o){var i=this;return new Promise(function(n,s){"string"==typeof e&&(e=JSON.parse(e)),i.rowManager.addRows(e,t,o).then(function(e){i.modExists("columnCalcs")&&i.modules.columnCalcs.recalc(i.rowManager.activeRows),n(e[0].getComponent())})})},d.prototype.updateOrAddRow=function(e,t){var o=this;return new Promise(function(i,n){var s=o.rowManager.findRow(e);"string"==typeof t&&(t=JSON.parse(t)),s?s.updateData(t).then(function(){o.modExists("columnCalcs")&&o.modules.columnCalcs.recalc(o.rowManager.activeRows),i(s.getComponent())}).catch(function(e){n(e)}):s=o.rowManager.addRows(t).then(function(e){o.modExists("columnCalcs")&&o.modules.columnCalcs.recalc(o.rowManager.activeRows),i(e[0].getComponent())}).catch(function(e){n(e)})})},d.prototype.updateRow=function(e,t){var o=this;return new Promise(function(i,n){var s=o.rowManager.findRow(e);"string"==typeof t&&(t=JSON.parse(t)),s?s.updateData(t).then(function(){i(s.getComponent())}).catch(function(e){n(e)}):(console.warn("Update Error - No matching row found:",e),n("Update Error - No matching row found"))})},d.prototype.scrollToRow=function(e,t,o){var i=this;return new Promise(function(n,s){var r=i.rowManager.findRow(e);r?i.rowManager.scrollToRow(r,t,o).then(function(){n()}).catch(function(e){s(e)}):(console.warn("Scroll Error - No matching row found:",e),s("Scroll Error - No matching row found"))})},d.prototype.moveRow=function(e,t,o){var i=this.rowManager.findRow(e);i?i.moveToRow(t,o):console.warn("Move Error - No matching row found:",e)},d.prototype.getRows=function(e){return!0===e&&(console.warn("passing a boolean to the getRows function is deprecated, you should now pass the string 'active'"),e="active"),this.rowManager.getComponents(e)},d.prototype.getRowPosition=function(e,t){var o=this.rowManager.findRow(e);return o?this.rowManager.getRowPosition(o,t):(console.warn("Position Error - No matching row found:",e),!1)},d.prototype.copyToClipboard=function(e){this.modExists("clipboard",!0)&&this.modules.clipboard.copy(e)},d.prototype.setColumns=function(e){this.columnManager.setColumns(e)},d.prototype.getColumns=function(e){return this.columnManager.getComponents(e)},d.prototype.getColumn=function(e){var t=this.columnManager.findColumn(e);return t?t.getComponent():(console.warn("Find Error - No matching column found:",e),!1)},d.prototype.getColumnDefinitions=function(){return this.columnManager.getDefinitionTree()},d.prototype.getColumnLayout=function(){if(this.modExists("persistence",!0))return this.modules.persistence.parseColumns(this.columnManager.getColumns())},d.prototype.setColumnLayout=function(e){return!!this.modExists("persistence",!0)&&(this.columnManager.setColumns(this.modules.persistence.mergeDefinition(this.options.columns,e)),!0)},d.prototype.showColumn=function(e){var t=this.columnManager.findColumn(e);if(!t)return console.warn("Column Show Error - No matching column found:",e),!1;t.show(),this.options.responsiveLayout&&this.modExists("responsiveLayout",!0)&&this.modules.responsiveLayout.update()},d.prototype.hideColumn=function(e){var t=this.columnManager.findColumn(e);if(!t)return console.warn("Column Hide Error - No matching column found:",e),!1;t.hide(),this.options.responsiveLayout&&this.modExists("responsiveLayout",!0)&&this.modules.responsiveLayout.update()},d.prototype.toggleColumn=function(e){var t=this.columnManager.findColumn(e);if(!t)return console.warn("Column Visibility Toggle Error - No matching column found:",e),!1;t.visible?t.hide():t.show()},d.prototype.addColumn=function(e,t,o){var i=this;return new Promise(function(n,s){var r=i.columnManager.findColumn(o);i.columnManager.addColumn(e,t,r).then(function(e){n(e.getComponent())}).catch(function(e){s(e)})})},d.prototype.deleteColumn=function(e){var t=this;return new Promise(function(o,i){var n=t.columnManager.findColumn(e);n?n.delete().then(function(){o()}).catch(function(e){i(e)}):(console.warn("Column Delete Error - No matching column found:",e),i())})},d.prototype.updateColumnDefinition=function(e,t){var o=this;return new Promise(function(i,n){var s=o.columnManager.findColumn(e);s?s.updateDefinition(t).then(function(e){i(e)}).catch(function(e){n(e)}):(console.warn("Column Update Error - No matching column found:",e),n())})},d.prototype.moveColumn=function(e,t,o){var i=this.columnManager.findColumn(e),n=this.columnManager.findColumn(t);i?n?this.columnManager.moveColumn(i,n,o):console.warn("Move Error - No matching column found:",n):console.warn("Move Error - No matching column found:",e)},d.prototype.scrollToColumn=function(e,t,o){var i=this;return new Promise(function(n,s){var r=i.columnManager.findColumn(e);r?i.columnManager.scrollToColumn(r,t,o).then(function(){n()}).catch(function(e){s(e)}):(console.warn("Scroll Error - No matching column found:",e),s("Scroll Error - No matching column found"))})},d.prototype.setLocale=function(e){this.modules.localize.setLocale(e)},d.prototype.getLocale=function(){return this.modules.localize.getLocale()},d.prototype.getLang=function(e){return this.modules.localize.getLang(e)},d.prototype.redraw=function(e){this.columnManager.redraw(e),this.rowManager.redraw(e)},d.prototype.setHeight=function(e){"classic"!==this.rowManager.renderMode?(this.options.height=isNaN(e)?e:e+"px",this.element.style.height=this.options.height,this.rowManager.setRenderMode(),this.rowManager.redraw()):console.warn("setHeight function is not available in classic render mode")},d.prototype.setSort=function(e,t){this.modExists("sort",!0)&&(this.modules.sort.setSort(e,t),this.rowManager.sorterRefresh())},d.prototype.getSorters=function(){if(this.modExists("sort",!0))return this.modules.sort.getSort()},d.prototype.clearSort=function(){this.modExists("sort",!0)&&(this.modules.sort.clear(),this.rowManager.sorterRefresh())},d.prototype.setFilter=function(e,t,o,i){this.modExists("filter",!0)&&(this.modules.filter.setFilter(e,t,o,i),this.rowManager.filterRefresh())},d.prototype.addFilter=function(e,t,o,i){this.modExists("filter",!0)&&(this.modules.filter.addFilter(e,t,o,i),this.rowManager.filterRefresh())},d.prototype.getFilters=function(e){if(this.modExists("filter",!0))return this.modules.filter.getFilters(e)},d.prototype.setHeaderFilterFocus=function(e){if(this.modExists("filter",!0)){var t=this.columnManager.findColumn(e);if(!t)return console.warn("Column Filter Focus Error - No matching column found:",e),!1;this.modules.filter.setHeaderFilterFocus(t)}},d.prototype.getHeaderFilterValue=function(e){if(this.modExists("filter",!0)){var t=this.columnManager.findColumn(e);if(t)return this.modules.filter.getHeaderFilterValue(t);console.warn("Column Filter Error - No matching column found:",e)}},d.prototype.setHeaderFilterValue=function(e,t){if(this.modExists("filter",!0)){var o=this.columnManager.findColumn(e);if(!o)return console.warn("Column Filter Error - No matching column found:",e),!1;this.modules.filter.setHeaderFilterValue(o,t)}},d.prototype.getHeaderFilters=function(){if(this.modExists("filter",!0))return this.modules.filter.getHeaderFilters()},d.prototype.removeFilter=function(e,t,o){this.modExists("filter",!0)&&(this.modules.filter.removeFilter(e,t,o),this.rowManager.filterRefresh())},d.prototype.clearFilter=function(e){this.modExists("filter",!0)&&(this.modules.filter.clearFilter(e),this.rowManager.filterRefresh())},d.prototype.clearHeaderFilter=function(){this.modExists("filter",!0)&&(this.modules.filter.clearHeaderFilter(),this.rowManager.filterRefresh())},d.prototype.selectRow=function(e){this.modExists("selectRow",!0)&&(!0===e&&(console.warn("passing a boolean to the selectRowselectRow function is deprecated, you should now pass the string 'active'"),e="active"),this.modules.selectRow.selectRows(e))},d.prototype.deselectRow=function(e){this.modExists("selectRow",!0)&&this.modules.selectRow.deselectRows(e)},d.prototype.toggleSelectRow=function(e){this.modExists("selectRow",!0)&&this.modules.selectRow.toggleRow(e)},d.prototype.getSelectedRows=function(){if(this.modExists("selectRow",!0))return this.modules.selectRow.getSelectedRows()},d.prototype.getSelectedData=function(){if(this.modExists("selectRow",!0))return this.modules.selectRow.getSelectedData()},d.prototype.getInvalidCells=function(){if(this.modExists("validate",!0))return this.modules.validate.getInvalidCells()},d.prototype.clearCellValidation=function(e){var t=this;this.modExists("validate",!0)&&(e||(e=this.modules.validate.getInvalidCells()),Array.isArray(e)||(e=[e]),e.forEach(function(e){t.modules.validate.clearValidation(e._getSelf())}))},d.prototype.validate=function(e){var t=[];return this.rowManager.rows.forEach(function(e){var o=e.validate();!0!==o&&(t=t.concat(o))}),!t.length||t},d.prototype.setMaxPage=function(e){if(!this.options.pagination||!this.modExists("page"))return!1;this.modules.page.setMaxPage(e)},d.prototype.setPage=function(e){return this.options.pagination&&this.modExists("page")?this.modules.page.setPage(e):new Promise(function(e,t){t()})},d.prototype.setPageToRow=function(e){var t=this;return new Promise(function(o,i){t.options.pagination&&t.modExists("page")?(e=t.rowManager.findRow(e),e?t.modules.page.setPageToRow(e).then(function(){o()}).catch(function(){i()}):i()):i()})},d.prototype.setPageSize=function(e){if(!this.options.pagination||!this.modExists("page"))return!1;this.modules.page.setPageSize(e),this.modules.page.setPage(1).then(function(){}).catch(function(){})},d.prototype.getPageSize=function(){if(this.options.pagination&&this.modExists("page",!0))return this.modules.page.getPageSize()},d.prototype.previousPage=function(){if(!this.options.pagination||!this.modExists("page"))return!1;this.modules.page.previousPage()},d.prototype.nextPage=function(){if(!this.options.pagination||!this.modExists("page"))return!1;this.modules.page.nextPage()},d.prototype.getPage=function(){return!(!this.options.pagination||!this.modExists("page"))&&this.modules.page.getPage()},d.prototype.getPageMax=function(){return!(!this.options.pagination||!this.modExists("page"))&&this.modules.page.getPageMax()},d.prototype.setGroupBy=function(e){if(!this.modExists("groupRows",!0))return!1;this.options.groupBy=e,this.modules.groupRows.initialize(),this.rowManager.refreshActiveData("display"),this.options.persistence&&this.modExists("persistence",!0)&&this.modules.persistence.config.group&&this.modules.persistence.save("group")},d.prototype.setGroupStartOpen=function(e){if(!this.modExists("groupRows",!0))return!1;this.options.groupStartOpen=e,this.modules.groupRows.initialize(),this.options.groupBy?(this.rowManager.refreshActiveData("group"),this.options.persistence&&this.modExists("persistence",!0)&&this.modules.persistence.config.group&&this.modules.persistence.save("group")):console.warn("Grouping Update - cant refresh view, no groups have been set")},d.prototype.setGroupHeader=function(e){if(!this.modExists("groupRows",!0))return!1;this.options.groupHeader=e,this.modules.groupRows.initialize(),this.options.groupBy?(this.rowManager.refreshActiveData("group"),this.options.persistence&&this.modExists("persistence",!0)&&this.modules.persistence.config.group&&this.modules.persistence.save("group")):console.warn("Grouping Update - cant refresh view, no groups have been set")},d.prototype.getGroups=function(e){return!!this.modExists("groupRows",!0)&&this.modules.groupRows.getGroups(!0)},d.prototype.getGroupedData=function(){if(this.modExists("groupRows",!0))return this.options.groupBy?this.modules.groupRows.getGroupedData():this.getData()},d.prototype.getEditedCells=function(){if(this.modExists("edit",!0))return this.modules.edit.getEditedCells()},d.prototype.clearCellEdited=function(e){var t=this;this.modExists("edit",!0)&&(e||(e=this.modules.edit.getEditedCells()),Array.isArray(e)||(e=[e]),e.forEach(function(e){t.modules.edit.clearEdited(e._getSelf())}))},d.prototype.getCalcResults=function(){return!!this.modExists("columnCalcs",!0)&&this.modules.columnCalcs.getResults()},d.prototype.recalc=function(){this.modExists("columnCalcs",!0)&&this.modules.columnCalcs.recalcAll(this.rowManager.activeRows)},d.prototype.navigatePrev=function(){var e=!1;return!(!this.modExists("edit",!0)||!(e=this.modules.edit.currentCell))&&e.nav().prev()},d.prototype.navigateNext=function(){var e=!1;return!(!this.modExists("edit",!0)||!(e=this.modules.edit.currentCell))&&e.nav().next()},d.prototype.navigateLeft=function(){var t=!1;return!(!this.modExists("edit",!0)||!(t=this.modules.edit.currentCell))&&(e.preventDefault(),t.nav().left())},d.prototype.navigateRight=function(){var t=!1;return!(!this.modExists("edit",!0)||!(t=this.modules.edit.currentCell))&&(e.preventDefault(),t.nav().right())},d.prototype.navigateUp=function(){var t=!1;return!(!this.modExists("edit",!0)||!(t=this.modules.edit.currentCell))&&(e.preventDefault(),t.nav().up())},d.prototype.navigateDown=function(){var t=!1;return!(!this.modExists("edit",!0)||!(t=this.modules.edit.currentCell))&&(e.preventDefault(),t.nav().down())},d.prototype.undo=function(){return!(!this.options.history||!this.modExists("history",!0))&&this.modules.history.undo()},d.prototype.redo=function(){return!(!this.options.history||!this.modExists("history",!0))&&this.modules.history.redo()},d.prototype.getHistoryUndoSize=function(){return!(!this.options.history||!this.modExists("history",!0))&&this.modules.history.getHistoryUndoSize()},d.prototype.getHistoryRedoSize=function(){return!(!this.options.history||!this.modExists("history",!0))&&this.modules.history.getHistoryRedoSize()},d.prototype.download=function(e,t,o,i){this.modExists("download",!0)&&this.modules.download.download(e,t,o,i)},d.prototype.downloadToTab=function(e,t,o,i){this.modExists("download",!0)&&this.modules.download.download(e,t,o,i,!0)},d.prototype.tableComms=function(e,t,o,i){this.modules.comms.receive(e,t,o,i)},d.prototype.moduleBindings={},d.prototype.extendModule=function(e,t,o){if(d.prototype.moduleBindings[e]){var i=d.prototype.moduleBindings[e].prototype[t];if(i)if("object"==(void 0===o?"undefined":_typeof(o)))for(var n in o)i[n]=o[n];else console.warn("Module Error - Invalid value type, it must be an object");else console.warn("Module Error - property does not exist:",t)}else console.warn("Module Error - module does not exist:",e)},d.prototype.registerModule=function(e,t){d.prototype.moduleBindings[e]=t},d.prototype.bindModules=function(){this.modules={};for(var e in d.prototype.moduleBindings)this.modules[e]=new d.prototype.moduleBindings[e](this)},d.prototype.modExists=function(e,t){return!!this.modules[e]||(t&&console.error("Tabulator Module Not Installed: "+e),!1)},d.prototype.helpers={elVisible:function(e){return!(e.offsetWidth<=0&&e.offsetHeight<=0)},elOffset:function(e){var t=e.getBoundingClientRect();return{top:t.top+window.pageYOffset-document.documentElement.clientTop,left:t.left+window.pageXOffset-document.documentElement.clientLeft}},deepClone:function(e){var t=Array.isArray(e)?[]:{};for(var o in e)null!=e[o]&&"object"===_typeof(e[o])?e[o]instanceof Date?t[o]=new Date(e[o]):t[o]=this.deepClone(e[o]):t[o]=e[o];return t}},d.prototype.comms={tables:[],register:function(e){d.prototype.comms.tables.push(e)},deregister:function(e){var t=d.prototype.comms.tables.indexOf(e);t>-1&&d.prototype.comms.tables.splice(t,1)},lookupTable:function(e,t){var o,i,n=[];if("string"==typeof e){if(o=document.querySelectorAll(e),o.length)for(var s=0;s<o.length;s++)(i=d.prototype.comms.matchElement(o[s]))&&n.push(i)}else"undefined"!=typeof HTMLElement&&e instanceof HTMLElement||e instanceof d?(i=d.prototype.comms.matchElement(e))&&n.push(i):Array.isArray(e)?e.forEach(function(e){n=n.concat(d.prototype.comms.lookupTable(e))}):t||console.warn("Table Connection Error - Invalid Selector",e);return n},matchElement:function(e){return d.prototype.comms.tables.find(function(t){return e instanceof d?t===e:t.element===e})}},d.prototype.findTable=function(e){var t=d.prototype.comms.lookupTable(e,!0);return!(Array.isArray(t)&&!t.length)&&t};var h=function(e){this.table=e,this.mode=null};h.prototype.initialize=function(e){this.modes[e]?this.mode=e:(console.warn("Layout Error - invalid mode set, defaulting to 'fitData' : "+e),this.mode="fitData"),this.table.element.setAttribute("tabulator-layout",this.mode)},h.prototype.getMode=function(){return this.mode},h.prototype.layout=function(){this.modes[this.mode].call(this,this.table.columnManager.columnsByIndex)},h.prototype.modes={
+fitData:function(e){e.forEach(function(e){e.reinitializeWidth()}),this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.update()},fitDataFill:function(e){e.forEach(function(e){e.reinitializeWidth()}),this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.update()},fitDataTable:function(e){e.forEach(function(e){e.reinitializeWidth()}),this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.update()},fitDataStretch:function(e){var t=this,o=0,i=this.table.rowManager.element.clientWidth,n=0,s=!1;e.forEach(function(e,i){e.widthFixed||e.reinitializeWidth(),(t.table.options.responsiveLayout?e.modules.responsive.visible:e.visible)&&(s=e),e.visible&&(o+=e.getWidth())}),s?(n=i-o+s.getWidth(),this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&(s.setWidth(0),this.table.modules.responsiveLayout.update()),n>0?s.setWidth(n):s.reinitializeWidth()):this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.update()},fitColumns:function(e){function t(e){return"string"==typeof e?e.indexOf("%")>-1?n/100*parseInt(e):parseInt(e):e}function o(e,i,n,s){function r(e){return n*(e.column.definition.widthGrow||1)}function a(e){return t(e.width)-n*(e.column.definition.widthShrink||0)}var l=[],c=0,u=0,d=0,h=0,p=0,m=[];return e.forEach(function(e,t){var o=s?a(e):r(e);e.column.minWidth>=o?l.push(e):(m.push(e),p+=s?e.column.definition.widthShrink||1:e.column.definition.widthGrow||1)}),l.length?(l.forEach(function(e){c+=s?e.width-e.column.minWidth:e.column.minWidth,e.width=e.column.minWidth}),u=i-c,d=p?Math.floor(u/p):u,h=u-d*p,h+=o(m,u,d,s)):(h=p?i-Math.floor(i/p)*p:i,m.forEach(function(e){e.width=s?a(e):r(e)})),h}var i=this,n=i.table.element.clientWidth,s=0,r=0,a=0,l=0,c=[],u=[],d=0,h=0,p=0;this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.update(),this.table.rowManager.element.scrollHeight>this.table.rowManager.element.clientHeight&&(n-=this.table.rowManager.element.offsetWidth-this.table.rowManager.element.clientWidth),e.forEach(function(e){var o,i,n;e.visible&&(o=e.definition.width,i=parseInt(e.minWidth),o?(n=t(o),s+=n>i?n:i,e.definition.widthShrink&&(u.push({column:e,width:n>i?n:i}),d+=e.definition.widthShrink)):(c.push({column:e,width:0}),a+=e.definition.widthGrow||1))}),r=n-s,l=Math.floor(r/a);var p=o(c,r,l,!1);c.length&&p>0&&(c[c.length-1].width+=+p),c.forEach(function(e){r-=e.width}),h=Math.abs(p)+r,h>0&&d&&(p=o(u,h,Math.floor(h/d),!0)),u.length&&(u[u.length-1].width-=p),c.forEach(function(e){e.column.setWidth(e.width)}),u.forEach(function(e){e.column.setWidth(e.width)})}},d.prototype.registerModule("layout",h);var p=function(e){this.table=e,this.locale="default",this.lang=!1,this.bindings={}};p.prototype.setHeaderFilterPlaceholder=function(e){this.langs.default.headerFilters.default=e},p.prototype.setHeaderFilterColumnPlaceholder=function(e,t){this.langs.default.headerFilters.columns[e]=t,this.lang&&!this.lang.headerFilters.columns[e]&&(this.lang.headerFilters.columns[e]=t)},p.prototype.installLang=function(e,t){this.langs[e]?this._setLangProp(this.langs[e],t):this.langs[e]=t},p.prototype._setLangProp=function(e,t){for(var o in t)e[o]&&"object"==_typeof(e[o])?this._setLangProp(e[o],t[o]):e[o]=t[o]},p.prototype.setLocale=function(e){function t(e,o){for(var i in e)"object"==_typeof(e[i])?(o[i]||(o[i]={}),t(e[i],o[i])):o[i]=e[i]}var o=this;if(e=e||"default",!0===e&&navigator.language&&(e=navigator.language.toLowerCase()),e&&!o.langs[e]){var i=e.split("-")[0];o.langs[i]?(console.warn("Localization Error - Exact matching locale not found, using closest match: ",e,i),e=i):(console.warn("Localization Error - Matching locale not found, using default: ",e),e="default")}o.locale=e,o.lang=d.prototype.helpers.deepClone(o.langs.default||{}),"default"!=e&&t(o.langs[e],o.lang),o.table.options.localized.call(o.table,o.locale,o.lang),o._executeBindings()},p.prototype.getLocale=function(e){return self.locale},p.prototype.getLang=function(e){return e?this.langs[e]:this.lang},p.prototype.getText=function(e,t){var e=t?e+"|"+t:e,o=e.split("|");return this._getLangElement(o,this.locale)||""},p.prototype._getLangElement=function(e,t){var o=this,i=o.lang;return e.forEach(function(e){var t;i&&(t=i[e],i=void 0!==t&&t)}),i},p.prototype.bind=function(e,t){this.bindings[e]||(this.bindings[e]=[]),this.bindings[e].push(t),t(this.getText(e),this.lang)},p.prototype._executeBindings=function(){var e=this;for(var t in e.bindings)!function(t){e.bindings[t].forEach(function(o){o(e.getText(t),e.lang)})}(t)},p.prototype.langs={default:{groups:{item:"item",items:"items"},columns:{},ajax:{loading:"Loading",error:"Error"},pagination:{page_size:"Page Size",page_title:"Show Page",first:"First",first_title:"First Page",last:"Last",last_title:"Last Page",prev:"Prev",prev_title:"Prev Page",next:"Next",next_title:"Next Page",all:"All"},headerFilters:{default:"filter column...",columns:{}}}},d.prototype.registerModule("localize",p);var m=function(e){this.table=e};m.prototype.getConnections=function(e){var t,o=this,i=[];return t=d.prototype.comms.lookupTable(e),t.forEach(function(e){o.table!==e&&i.push(e)}),i},m.prototype.send=function(e,t,o,i){var n=this,s=this.getConnections(e);s.forEach(function(e){e.tableComms(n.table.element,t,o,i)}),!s.length&&e&&console.warn("Table Connection Error - No tables matching selector found",e)},m.prototype.receive=function(e,t,o,i){if(this.table.modExists(t))return this.table.modules[t].commsReceived(e,o,i);console.warn("Inter-table Comms Error - no such module:",t)},d.prototype.registerModule("comms",m);var f=function(e){this.table=e,this.allowedTypes=["","data","download","clipboard","print","htmlOutput"]};f.prototype.initializeColumn=function(e){var t=this,o=!1,i={};this.allowedTypes.forEach(function(n){var s,r="accessor"+(n.charAt(0).toUpperCase()+n.slice(1));e.definition[r]&&(s=t.lookupAccessor(e.definition[r]))&&(o=!0,i[r]={accessor:s,params:e.definition[r+"Params"]||{}})}),o&&(e.modules.accessor=i)},f.prototype.lookupAccessor=function(e){var t=!1;switch(void 0===e?"undefined":_typeof(e)){case"string":this.accessors[e]?t=this.accessors[e]:console.warn("Accessor Error - No such accessor found, ignoring: ",e);break;case"function":t=e}return t},f.prototype.transformRow=function(e,t){var o=this,i="accessor"+(t.charAt(0).toUpperCase()+t.slice(1)),n=d.prototype.helpers.deepClone(e||{});return o.table.columnManager.traverse(function(e){var o,s,r,a;e.modules.accessor&&(s=e.modules.accessor[i]||e.modules.accessor.accessor||!1)&&"undefined"!=(o=e.getFieldValue(n))&&(a=e.getComponent(),r="function"==typeof s.params?s.params(o,n,t,a):s.params,e.setFieldValue(n,s.accessor(o,n,t,r,a)))}),n},f.prototype.accessors={},d.prototype.registerModule("accessor",f);var g=function(e){this.table=e,this.config=!1,this.url="",this.urlGenerator=!1,this.params=!1,this.loaderElement=this.createLoaderElement(),this.msgElement=this.createMsgElement(),this.loadingElement=!1,this.errorElement=!1,this.loaderPromise=!1,this.progressiveLoad=!1,this.loading=!1,this.requestOrder=0};g.prototype.initialize=function(){var e;this.loaderElement.appendChild(this.msgElement),this.table.options.ajaxLoaderLoading&&("string"==typeof this.table.options.ajaxLoaderLoading?(e=document.createElement("template"),e.innerHTML=this.table.options.ajaxLoaderLoading.trim(),this.loadingElement=e.content.firstChild):this.loadingElement=this.table.options.ajaxLoaderLoading),this.loaderPromise=this.table.options.ajaxRequestFunc||this.defaultLoaderPromise,this.urlGenerator=this.table.options.ajaxURLGenerator||this.defaultURLGenerator,this.table.options.ajaxLoaderError&&("string"==typeof this.table.options.ajaxLoaderError?(e=document.createElement("template"),e.innerHTML=this.table.options.ajaxLoaderError.trim(),this.errorElement=e.content.firstChild):this.errorElement=this.table.options.ajaxLoaderError),this.table.options.ajaxParams&&this.setParams(this.table.options.ajaxParams),this.table.options.ajaxConfig&&this.setConfig(this.table.options.ajaxConfig),this.table.options.ajaxURL&&this.setUrl(this.table.options.ajaxURL),this.table.options.ajaxProgressiveLoad&&(this.table.options.pagination?(this.progressiveLoad=!1,console.error("Progressive Load Error - Pagination and progressive load cannot be used at the same time")):this.table.modExists("page")?(this.progressiveLoad=this.table.options.ajaxProgressiveLoad,this.table.modules.page.initializeProgressive(this.progressiveLoad)):console.error("Pagination plugin is required for progressive ajax loading"))},g.prototype.createLoaderElement=function(){var e=document.createElement("div");return e.classList.add("tabulator-loader"),e},g.prototype.createMsgElement=function(){var e=document.createElement("div");return e.classList.add("tabulator-loader-msg"),e.setAttribute("role","alert"),e},g.prototype.setParams=function(e,t){if(t){this.params=this.params||{};for(var o in e)this.params[o]=e[o]}else this.params=e},g.prototype.getParams=function(){return this.params||{}},g.prototype.setConfig=function(e){if(this._loadDefaultConfig(),"string"==typeof e)this.config.method=e;else for(var t in e)this.config[t]=e[t]},g.prototype._loadDefaultConfig=function(e){var t=this;if(!t.config||e){t.config={};for(var o in t.defaultConfig)t.config[o]=t.defaultConfig[o]}},g.prototype.setUrl=function(e){this.url=e},g.prototype.getUrl=function(){return this.url},g.prototype.loadData=function(e,t){return this.progressiveLoad?this._loadDataProgressive():this._loadDataStandard(e,t)},g.prototype.nextPage=function(e){var t;this.loading||(t=this.table.options.ajaxProgressiveLoadScrollMargin||2*this.table.rowManager.getElement().clientHeight,e<t&&this.table.modules.page.nextPage().then(function(){}).catch(function(){}))},g.prototype.blockActiveRequest=function(){this.requestOrder++},g.prototype._loadDataProgressive=function(){return this.table.rowManager.setData([]),this.table.modules.page.setPage(1)},g.prototype._loadDataStandard=function(e,t){var o=this;return new Promise(function(i,n){o.sendRequest(e).then(function(s){o.table.rowManager.setData(s,e,t).then(function(){i()}).catch(function(e){n(e)})}).catch(function(e){n(e)})})},g.prototype.generateParamsList=function(e,t){var o=this,i=[];if(t=t||"",Array.isArray(e))e.forEach(function(e,n){i=i.concat(o.generateParamsList(e,t?t+"["+n+"]":n))});else if("object"===(void 0===e?"undefined":_typeof(e)))for(var n in e)i=i.concat(o.generateParamsList(e[n],t?t+"["+n+"]":n));else i.push({key:t,value:e});return i},g.prototype.serializeParams=function(e){var t=this.generateParamsList(e),o=[];return t.forEach(function(e){o.push(encodeURIComponent(e.key)+"="+encodeURIComponent(e.value))}),o.join("&")},g.prototype.sendRequest=function(e){var t,o=this,i=this,n=i.url;return i.requestOrder++,t=i.requestOrder,i._loadDefaultConfig(),new Promise(function(s,r){!1!==i.table.options.ajaxRequesting.call(o.table,i.url,i.params)?(i.loading=!0,e||i.showLoader(),o.loaderPromise(n,i.config,i.params).then(function(e){t===i.requestOrder?(i.table.options.ajaxResponse&&(e=i.table.options.ajaxResponse.call(i.table,i.url,i.params,e)),s(e),i.hideLoader(),i.loading=!1):console.warn("Ajax Response Blocked - An active ajax request was blocked by an attempt to change table data while the request was being made")}).catch(function(e){console.error("Ajax Load Error: ",e),i.table.options.ajaxError.call(i.table,e),i.showError(),setTimeout(function(){i.hideLoader()},3e3),i.loading=!1,r()})):r()})},g.prototype.showLoader=function(){if("function"==typeof this.table.options.ajaxLoader?this.table.options.ajaxLoader():this.table.options.ajaxLoader){for(this.hideLoader();this.msgElement.firstChild;)this.msgElement.removeChild(this.msgElement.firstChild);this.msgElement.classList.remove("tabulator-error"),this.msgElement.classList.add("tabulator-loading"),this.loadingElement?this.msgElement.appendChild(this.loadingElement):this.msgElement.innerHTML=this.table.modules.localize.getText("ajax|loading"),this.table.element.appendChild(this.loaderElement)}},g.prototype.showError=function(){for(this.hideLoader();this.msgElement.firstChild;)this.msgElement.removeChild(this.msgElement.firstChild);this.msgElement.classList.remove("tabulator-loading"),this.msgElement.classList.add("tabulator-error"),this.errorElement?this.msgElement.appendChild(this.errorElement):this.msgElement.innerHTML=this.table.modules.localize.getText("ajax|error"),this.table.element.appendChild(this.loaderElement)},g.prototype.hideLoader=function(){this.loaderElement.parentNode&&this.loaderElement.parentNode.removeChild(this.loaderElement)},g.prototype.defaultConfig={method:"GET"},g.prototype.defaultURLGenerator=function(e,t,o){return e&&o&&Object.keys(o).length&&(t.method&&"get"!=t.method.toLowerCase()||(t.method="get",e+=(e.includes("?")?"&":"?")+this.serializeParams(o))),e},g.prototype.defaultLoaderPromise=function(e,t,o){var i,n=this;return new Promise(function(s,r){if(e=n.urlGenerator(e,t,o),"GET"!=t.method.toUpperCase())if(i="object"===_typeof(n.table.options.ajaxContentType)?n.table.options.ajaxContentType:n.contentTypeFormatters[n.table.options.ajaxContentType]){for(var a in i.headers)t.headers||(t.headers={}),void 0===t.headers[a]&&(t.headers[a]=i.headers[a]);t.body=i.body.call(n,e,t,o)}else console.warn("Ajax Error - Invalid ajaxContentType value:",n.table.options.ajaxContentType);e?(void 0===t.headers&&(t.headers={}),void 0===t.headers.Accept&&(t.headers.Accept="application/json"),void 0===t.headers["X-Requested-With"]&&(t.headers["X-Requested-With"]="XMLHttpRequest"),void 0===t.mode&&(t.mode="cors"),"cors"==t.mode?(void 0===t.headers["Access-Control-Allow-Origin"]&&(t.headers["Access-Control-Allow-Origin"]=window.location.origin),void 0===t.credentials&&(t.credentials="same-origin")):void 0===t.credentials&&(t.credentials="include"),fetch(e,t).then(function(e){e.ok?e.json().then(function(e){s(e)}).catch(function(e){r(e),console.warn("Ajax Load Error - Invalid JSON returned",e)}):(console.error("Ajax Load Error - Connection Error: "+e.status,e.statusText),r(e))}).catch(function(e){console.error("Ajax Load Error - Connection Error: ",e),r(e)})):(console.warn("Ajax Load Error - No URL Set"),s([]))})},g.prototype.contentTypeFormatters={json:{headers:{"Content-Type":"application/json"},body:function(e,t,o){return JSON.stringify(o)}},form:{headers:{},body:function(e,t,o){var i=this.generateParamsList(o),n=new FormData;return i.forEach(function(e){n.append(e.key,e.value)}),n}}},d.prototype.registerModule("ajax",g);var b=function(e){this.table=e,this.topCalcs=[],this.botCalcs=[],this.genColumn=!1,this.topElement=this.createElement(),this.botElement=this.createElement(),this.topRow=!1,this.botRow=!1,this.topInitialized=!1,this.botInitialized=!1,this.initialize()};b.prototype.createElement=function(){var e=document.createElement("div");return e.classList.add("tabulator-calcs-holder"),e},b.prototype.initialize=function(){this.genColumn=new n({field:"value"},this)},b.prototype.registerColumnField=function(){},b.prototype.initializeColumn=function(e){var t=e.definition,o={topCalcParams:t.topCalcParams||{},botCalcParams:t.bottomCalcParams||{}};if(t.topCalc){switch(_typeof(t.topCalc)){case"string":this.calculations[t.topCalc]?o.topCalc=this.calculations[t.topCalc]:console.warn("Column Calc Error - No such calculation found, ignoring: ",t.topCalc);break;case"function":o.topCalc=t.topCalc}o.topCalc&&(e.modules.columnCalcs=o,this.topCalcs.push(e),"group"!=this.table.options.columnCalcs&&this.initializeTopRow())}if(t.bottomCalc){switch(_typeof(t.bottomCalc)){case"string":this.calculations[t.bottomCalc]?o.botCalc=this.calculations[t.bottomCalc]:console.warn("Column Calc Error - No such calculation found, ignoring: ",t.bottomCalc);break;case"function":o.botCalc=t.bottomCalc}o.botCalc&&(e.modules.columnCalcs=o,this.botCalcs.push(e),"group"!=this.table.options.columnCalcs&&this.initializeBottomRow())}},b.prototype.removeCalcs=function(){var e=!1;this.topInitialized&&(this.topInitialized=!1,this.topElement.parentNode.removeChild(this.topElement),e=!0),this.botInitialized&&(this.botInitialized=!1,this.table.footerManager.remove(this.botElement),e=!0),e&&this.table.rowManager.adjustTableSize()},b.prototype.initializeTopRow=function(){this.topInitialized||(this.table.columnManager.getElement().insertBefore(this.topElement,this.table.columnManager.headersElement.nextSibling),this.topInitialized=!0)},b.prototype.initializeBottomRow=function(){this.botInitialized||(this.table.footerManager.prepend(this.botElement),this.botInitialized=!0)},b.prototype.scrollHorizontal=function(e){this.table.columnManager.getElement().scrollWidth,this.table.element.clientWidth;this.botInitialized&&(this.botRow.getElement().style.marginLeft=-e+"px")},b.prototype.recalc=function(e){var t;if(this.topInitialized||this.botInitialized){if(this.rowsToData(e),this.topInitialized){for(this.topRow&&this.topRow.deleteCells(),t=this.generateRow("top",this.rowsToData(e)),this.topRow=t;this.topElement.firstChild;)this.topElement.removeChild(this.topElement.firstChild);this.topElement.appendChild(t.getElement()),t.initialize(!0)}if(this.botInitialized){for(this.botRow&&this.botRow.deleteCells(),t=this.generateRow("bottom",this.rowsToData(e)),this.botRow=t;this.botElement.firstChild;)this.botElement.removeChild(this.botElement.firstChild);this.botElement.appendChild(t.getElement()),t.initialize(!0)}this.table.rowManager.adjustTableSize(),this.table.modExists("frozenColumns")&&this.table.modules.frozenColumns.layout()}},b.prototype.recalcRowGroup=function(e){this.recalcGroup(this.table.modules.groupRows.getRowGroup(e))},b.prototype.recalcAll=function(){var e=this;if((this.topCalcs.length||this.botCalcs.length)&&("group"!==this.table.options.columnCalcs&&this.recalc(this.table.rowManager.activeRows),this.table.options.groupBy&&"table"!==this.table.options.columnCalcs)){table.modules.groupRows.getChildGroups().forEach(function(t){e.recalcGroup(t)})}},b.prototype.recalcGroup=function(e){var t,o;e&&e.calcs&&(e.calcs.bottom&&(t=this.rowsToData(e.rows),o=this.generateRowData("bottom",t),e.calcs.bottom.updateData(o),e.calcs.bottom.reinitialize()),e.calcs.top&&(t=this.rowsToData(e.rows),o=this.generateRowData("top",t),e.calcs.top.updateData(o),e.calcs.top.reinitialize()))},b.prototype.generateTopRow=function(e){return this.generateRow("top",this.rowsToData(e))},b.prototype.generateBottomRow=function(e){return this.generateRow("bottom",this.rowsToData(e))},b.prototype.rowsToData=function(e){var t=this,o=[];return e.forEach(function(e){if(o.push(e.getData()),t.table.options.dataTree&&t.table.options.dataTreeChildColumnCalcs&&e.modules.dataTree.open){var i=t.rowsToData(t.table.modules.dataTree.getFilteredTreeChildren(e));o=o.concat(i)}}),o},b.prototype.generateRow=function(e,t){var o,i=this,n=this.generateRowData(e,t);return i.table.modExists("mutator")&&i.table.modules.mutator.disable(),o=new a(n,this,"calc"),i.table.modExists("mutator")&&i.table.modules.mutator.enable(),o.getElement().classList.add("tabulator-calcs","tabulator-calcs-"+e),o.generateCells=function(){var t=[];i.table.columnManager.columnsByIndex.forEach(function(n){i.genColumn.setField(n.getField()),i.genColumn.hozAlign=n.hozAlign,n.definition[e+"CalcFormatter"]&&i.table.modExists("format")?i.genColumn.modules.format={formatter:i.table.modules.format.getFormatter(n.definition[e+"CalcFormatter"]),params:n.definition[e+"CalcFormatterParams"]}:i.genColumn.modules.format={formatter:i.table.modules.format.getFormatter("plaintext"),params:{}},i.genColumn.definition.cssClass=n.definition.cssClass;var s=new c(i.genColumn,o);s.column=n,s.setWidth(),n.cells.push(s),t.push(s),n.visible||s.hide()}),this.cells=t},o},b.prototype.generateRowData=function(e,t){var o,i,n={},s="top"==e?this.topCalcs:this.botCalcs,r="top"==e?"topCalc":"botCalc";return s.forEach(function(e){var s=[];e.modules.columnCalcs&&e.modules.columnCalcs[r]&&(t.forEach(function(t){s.push(e.getFieldValue(t))}),i=r+"Params",o="function"==typeof e.modules.columnCalcs[i]?e.modules.columnCalcs[i](s,t):e.modules.columnCalcs[i],e.setFieldValue(n,e.modules.columnCalcs[r](s,t,o)))}),n},b.prototype.hasTopCalcs=function(){return!!this.topCalcs.length},b.prototype.hasBottomCalcs=function(){return!!this.botCalcs.length},b.prototype.redraw=function(){this.topRow&&this.topRow.normalizeHeight(!0),this.botRow&&this.botRow.normalizeHeight(!0)},b.prototype.getResults=function(){var e,t=this,o={};return this.table.options.groupBy&&this.table.modExists("groupRows")?(e=this.table.modules.groupRows.getGroups(!0),e.forEach(function(e){o[e.getKey()]=t.getGroupResults(e)})):o={top:this.topRow?this.topRow.getData():{},bottom:this.botRow?this.botRow.getData():{}},o},b.prototype.getGroupResults=function(e){var t=this,o=e._getSelf(),i=e.getSubGroups(),n={};return i.forEach(function(e){n[e.getKey()]=t.getGroupResults(e)}),{top:o.calcs.top?o.calcs.top.getData():{},bottom:o.calcs.bottom?o.calcs.bottom.getData():{},groups:n}},b.prototype.calculations={avg:function(e,t,o){var i=0,n=void 0!==o.precision?o.precision:2;return e.length&&(i=e.reduce(function(e,t){return t=Number(t),e+t}),i/=e.length,i=!1!==n?i.toFixed(n):i),parseFloat(i).toString()},max:function(e,t,o){var i=null,n=void 0!==o.precision&&o.precision;return e.forEach(function(e){((e=Number(e))>i||null===i)&&(i=e)}),null!==i?!1!==n?i.toFixed(n):i:""},min:function(e,t,o){var i=null,n=void 0!==o.precision&&o.precision;return e.forEach(function(e){((e=Number(e))<i||null===i)&&(i=e)}),null!==i?!1!==n?i.toFixed(n):i:""},sum:function(e,t,o){var i=0,n=void 0!==o.precision&&o.precision;return e.length&&e.forEach(function(e){e=Number(e),i+=isNaN(e)?0:Number(e)}),!1!==n?i.toFixed(n):i},concat:function(e,t,o){var i=0;return e.length&&(i=e.reduce(function(e,t){return String(e)+String(t)})),i},count:function(e,t,o){var i=0;return e.length&&e.forEach(function(e){e&&i++}),i}},d.prototype.registerModule("columnCalcs",b);var v=function(e){this.table=e,this.mode=!0,this.pasteParser=function(){},this.pasteAction=function(){},this.customSelection=!1,this.rowRange=!1,this.blocked=!0};v.prototype.initialize=function(){var e=this;this.mode=this.table.options.clipboard,this.rowRange=this.table.options.clipboardCopyRowRange,!0!==this.mode&&"copy"!==this.mode||this.table.element.addEventListener("copy",function(t){var o,i,n;if(!e.blocked){if(t.preventDefault(),e.customSelection)o=e.customSelection,e.table.options.clipboardCopyFormatter&&(o=e.table.options.clipboardCopyFormatter("plain",o));else{var n=e.table.modules.export.generateExportList(e.rowRange,e.table.options.clipboardCopyStyled,e.table.options.clipboardCopyConfig,"clipboard");i=e.table.modules.export.genereateHTMLTable(n),o=i?e.generatePlainContent(n):"",e.table.options.clipboardCopyFormatter&&(o=e.table.options.clipboardCopyFormatter("plain",o),i=e.table.options.clipboardCopyFormatter("html",i))}window.clipboardData&&window.clipboardData.setData?window.clipboardData.setData("Text",o):t.clipboardData&&t.clipboardData.setData?(t.clipboardData.setData("text/plain",o),i&&t.clipboardData.setData("text/html",i)):t.originalEvent&&t.originalEvent.clipboardData.setData&&(t.originalEvent.clipboardData.setData("text/plain",o),i&&t.originalEvent.clipboardData.setData("text/html",i)),e.table.options.clipboardCopied.call(e.table,o,i),e.reset()}}),!0!==this.mode&&"paste"!==this.mode||this.table.element.addEventListener("paste",function(t){e.paste(t)}),this.setPasteParser(this.table.options.clipboardPasteParser),this.setPasteAction(this.table.options.clipboardPasteAction)},v.prototype.reset=function(){this.blocked=!1,this.originalSelectionText=""},v.prototype.generatePlainContent=function(e){var t=[];return e.forEach(function(e){var o=[];e.columns.forEach(function(t){var i="";if(t)switch("group"===e.type&&(t.value=t.component.getKey()),_typeof(t.value)){case"object":i=JSON.stringify(t.value);break;case"undefined":case"null":i="";break;default:i=t.value}o.push(i)}),t.push(o.join("\t"))}),t.join("\n")},v.prototype.copy=function(e,t){var e,o,i;this.blocked=!1,this.customSelection=!1,!0!==this.mode&&"copy"!==this.mode||(this.rowRange=e||this.table.options.clipboardCopyRowRange,void 0!==window.getSelection&&void 0!==document.createRange?(e=document.createRange(),e.selectNodeContents(this.table.element),o=window.getSelection(),o.toString()&&t&&(this.customSelection=o.toString()),o.removeAllRanges(),o.addRange(e)):void 0!==document.selection&&void 0!==document.body.createTextRange&&(i=document.body.createTextRange(),i.moveToElementText(this.table.element),i.select()),document.execCommand("copy"),o&&o.removeAllRanges())},v.prototype.setPasteAction=function(e){switch(void 0===e?"undefined":_typeof(e)){case"string":this.pasteAction=this.pasteActions[e],this.pasteAction||console.warn("Clipboard Error - No such paste action found:",e);break;case"function":this.pasteAction=e}},v.prototype.setPasteParser=function(e){switch(void 0===e?"undefined":_typeof(e)){case"string":this.pasteParser=this.pasteParsers[e],this.pasteParser||console.warn("Clipboard Error - No such paste parser found:",e);break;case"function":this.pasteParser=e}},v.prototype.paste=function(e){var t,o,i;this.checkPaseOrigin(e)&&(t=this.getPasteData(e),o=this.pasteParser.call(this,t),o?(e.preventDefault(),this.table.modExists("mutator")&&(o=this.mutateData(o)),i=this.pasteAction.call(this,o),this.table.options.clipboardPasted.call(this.table,t,o,i)):this.table.options.clipboardPasteError.call(this.table,t))},v.prototype.mutateData=function(e){var t=this,o=[];return Array.isArray(e)?e.forEach(function(e){o.push(t.table.modules.mutator.transformRow(e,"clipboard"))}):o=e,o},v.prototype.checkPaseOrigin=function(e){var t=!0;return("DIV"!=e.target.tagName||this.table.modules.edit.currentCell)&&(t=!1),t},v.prototype.getPasteData=function(e){var t;return window.clipboardData&&window.clipboardData.getData?t=window.clipboardData.getData("Text"):e.clipboardData&&e.clipboardData.getData?t=e.clipboardData.getData("text/plain"):e.originalEvent&&e.originalEvent.clipboardData.getData&&(t=e.originalEvent.clipboardData.getData("text/plain")),t},v.prototype.pasteParsers={table:function(e){var t=[],o=!0,i=this.table.columnManager.columns,n=[],s=[];return e=e.split("\n"),e.forEach(function(e){t.push(e.split("\t"))}),!(!t.length||1===t.length&&t[0].length<2)&&(!0,t[0].forEach(function(e){var t=i.find(function(t){return e&&t.definition.title&&e.trim()&&t.definition.title.trim()===e.trim()});t?n.push(t):o=!1}),o||(o=!0,n=[],t[0].forEach(function(e){var t=i.find(function(t){return e&&t.field&&e.trim()&&t.field.trim()===e.trim()});t?n.push(t):o=!1}),o||(n=this.table.columnManager.columnsByIndex)),o&&t.shift(),t.forEach(function(e){var t={};e.forEach(function(e,o){n[o]&&(t[n[o].field]=e)}),s.push(t)}),s)}},v.prototype.pasteActions={replace:function(e){return this.table.setData(e)},update:function(e){return this.table.updateOrAddData(e)},insert:function(e){return this.table.addData(e)}},d.prototype.registerModule("clipboard",v);var y=function(e){this.table=e,this.indent=10,this.field="",this.collapseEl=null,this.expandEl=null,this.branchEl=null,this.elementField=!1,this.startOpen=function(){},this.displayIndex=0};y.prototype.initialize=function(){var e=null,t=this.table.columnManager.getFirstVisibileColumn(),o=this.table.options;switch(this.field=o.dataTreeChildField,this.indent=o.dataTreeChildIndent,this.elementField=o.dataTreeElementColumn||!!t&&t.field,o.dataTreeBranchElement&&(!0===o.dataTreeBranchElement?(this.branchEl=document.createElement("div"),this.branchEl.classList.add("tabulator-data-tree-branch")):"string"==typeof o.dataTreeBranchElement?(e=document.createElement("div"),e.innerHTML=o.dataTreeBranchElement,this.branchEl=e.firstChild):this.branchEl=o.dataTreeBranchElement),o.dataTreeCollapseElement?"string"==typeof o.dataTreeCollapseElement?(e=document.createElement("div"),e.innerHTML=o.dataTreeCollapseElement,this.collapseEl=e.firstChild):this.collapseEl=o.dataTreeCollapseElement:(this.collapseEl=document.createElement("div"),this.collapseEl.classList.add("tabulator-data-tree-control"),this.collapseEl.tabIndex=0,this.collapseEl.innerHTML="<div class='tabulator-data-tree-control-collapse'></div>"),o.dataTreeExpandElement?"string"==typeof o.dataTreeExpandElement?(e=document.createElement("div"),e.innerHTML=o.dataTreeExpandElement,this.expandEl=e.firstChild):this.expandEl=o.dataTreeExpandElement:(this.expandEl=document.createElement("div"),this.expandEl.classList.add("tabulator-data-tree-control"),this.expandEl.tabIndex=0,this.expandEl.innerHTML="<div class='tabulator-data-tree-control-expand'></div>"),_typeof(o.dataTreeStartExpanded)){case"boolean":this.startOpen=function(e,t){return o.dataTreeStartExpanded};break;case"function":this.startOpen=o.dataTreeStartExpanded;break;default:this.startOpen=function(e,t){return o.dataTreeStartExpanded[t]}}},y.prototype.initializeRow=function(e){var t=e.getData()[this.field],o=Array.isArray(t),i=o||!o&&"object"===(void 0===t?"undefined":_typeof(t))&&null!==t;!i&&e.modules.dataTree&&e.modules.dataTree.branchEl&&e.modules.dataTree.branchEl.parentNode.removeChild(e.modules.dataTree.branchEl),!i&&e.modules.dataTree&&e.modules.dataTree.controlEl&&e.modules.dataTree.controlEl.parentNode.removeChild(e.modules.dataTree.controlEl),e.modules.dataTree={index:e.modules.dataTree?e.modules.dataTree.index:0,open:!!i&&(e.modules.dataTree?e.modules.dataTree.open:this.startOpen(e.getComponent(),0)),controlEl:!(!e.modules.dataTree||!i)&&e.modules.dataTree.controlEl,branchEl:!(!e.modules.dataTree||!i)&&e.modules.dataTree.branchEl,parent:!!e.modules.dataTree&&e.modules.dataTree.parent,children:i}},y.prototype.layoutRow=function(e){var t=this.elementField?e.getCell(this.elementField):e.getCells()[0],o=t.getElement(),i=e.modules.dataTree;i.branchEl&&(i.branchEl.parentNode&&i.branchEl.parentNode.removeChild(i.branchEl),i.branchEl=!1),i.controlEl&&(i.controlEl.parentNode&&i.controlEl.parentNode.removeChild(i.controlEl),i.controlEl=!1),this.generateControlElement(e,o),e.element.classList.add("tabulator-tree-level-"+i.index),i.index&&(this.branchEl?(i.branchEl=this.branchEl.cloneNode(!0),o.insertBefore(i.branchEl,o.firstChild),i.branchEl.style.marginLeft=(i.branchEl.offsetWidth+i.branchEl.style.marginRight)*(i.index-1)+i.index*this.indent+"px"):o.style.paddingLeft=parseInt(window.getComputedStyle(o,null).getPropertyValue("padding-left"))+i.index*this.indent+"px")},y.prototype.generateControlElement=function(e,t){var o=this,i=e.modules.dataTree,t=t||e.getCells()[0].getElement(),n=i.controlEl;!1!==i.children&&(i.open?(i.controlEl=this.collapseEl.cloneNode(!0),i.controlEl.addEventListener("click",function(t){t.stopPropagation(),o.collapseRow(e)})):(i.controlEl=this.expandEl.cloneNode(!0),i.controlEl.addEventListener("click",function(t){t.stopPropagation(),o.expandRow(e)})),i.controlEl.addEventListener("mousedown",function(e){e.stopPropagation()}),n&&n.parentNode===t?n.parentNode.replaceChild(i.controlEl,n):t.insertBefore(i.controlEl,t.firstChild))},y.prototype.setDisplayIndex=function(e){this.displayIndex=e},y.prototype.getDisplayIndex=function(){return this.displayIndex},y.prototype.getRows=function(e){var t=this,o=[];return e.forEach(function(e,i){var n,s;o.push(e),e instanceof a&&(n=e.modules.dataTree.children,n.index||!1===n.children||(s=t.getChildren(e),s.forEach(function(e){o.push(e)})))}),o},y.prototype.getChildren=function(e){var t=this,o=e.modules.dataTree,i=[],n=[];return!1!==o.children&&o.open&&(Array.isArray(o.children)||(o.children=this.generateChildren(e)),i=this.table.modExists("filter")?this.table.modules.filter.filter(o.children):o.children,this.table.modExists("sort")&&this.table.modules.sort.sort(i),i.forEach(function(e){n.push(e),t.getChildren(e).forEach(function(e){n.push(e)})})),n},
+y.prototype.generateChildren=function(e){var t=this,o=[],i=e.getData()[this.field];return Array.isArray(i)||(i=[i]),i.forEach(function(i){var n=new a(i||{},t.table.rowManager);n.modules.dataTree.index=e.modules.dataTree.index+1,n.modules.dataTree.parent=e,n.modules.dataTree.children&&(n.modules.dataTree.open=t.startOpen(n.getComponent(),n.modules.dataTree.index)),o.push(n)}),o},y.prototype.expandRow=function(e,t){var o=e.modules.dataTree;!1!==o.children&&(o.open=!0,e.reinitialize(),this.table.rowManager.refreshActiveData("tree",!1,!0),this.table.options.dataTreeRowExpanded(e.getComponent(),e.modules.dataTree.index))},y.prototype.collapseRow=function(e){var t=e.modules.dataTree;!1!==t.children&&(t.open=!1,e.reinitialize(),this.table.rowManager.refreshActiveData("tree",!1,!0),this.table.options.dataTreeRowCollapsed(e.getComponent(),e.modules.dataTree.index))},y.prototype.toggleRow=function(e){var t=e.modules.dataTree;!1!==t.children&&(t.open?this.collapseRow(e):this.expandRow(e))},y.prototype.getTreeParent=function(e){return!!e.modules.dataTree.parent&&e.modules.dataTree.parent.getComponent()},y.prototype.getFilteredTreeChildren=function(e){var t,o=e.modules.dataTree,i=[];return o.children&&(Array.isArray(o.children)||(o.children=this.generateChildren(e)),t=this.table.modExists("filter")?this.table.modules.filter.filter(o.children):o.children,t.forEach(function(e){e instanceof a&&i.push(e)})),i},y.prototype.rowDelete=function(e){var t,o=e.modules.dataTree.parent;o&&(t=this.findChildIndex(e,o),!1!==t&&o.data[this.field].splice(t,1),o.data[this.field].length||delete o.data[this.field],this.initializeRow(o),this.layoutRow(o)),this.table.rowManager.refreshActiveData("tree",!1,!0)},y.prototype.addTreeChildRow=function(e,t,o,i){var n=!1;"string"==typeof t&&(t=JSON.parse(t)),Array.isArray(e.data[this.field])||(e.data[this.field]=[],e.modules.dataTree.open=this.startOpen(e.getComponent(),e.modules.dataTree.index)),void 0!==i&&!1!==(n=this.findChildIndex(i,e))&&e.data[this.field].splice(o?n:n+1,0,t),!1===n&&(o?e.data[this.field].unshift(t):e.data[this.field].push(t)),this.initializeRow(e),this.layoutRow(e),this.table.rowManager.refreshActiveData("tree",!1,!0)},y.prototype.findChildIndex=function(e,t){var o=this,i=!1;return"object"==(void 0===e?"undefined":_typeof(e))?e instanceof a?i=e.data:e instanceof r?i=e._getSelf().data:"undefined"!=typeof HTMLElement&&e instanceof HTMLElement&&t.modules.dataTree&&(i=t.modules.dataTree.children.find(function(t){return t instanceof a&&t.element===e}))&&(i=i.data):i=void 0!==e&&null!==e&&t.data[this.field].find(function(t){return t.data[o.table.options.index]==e}),i&&(Array.isArray(t.data[this.field])&&(i=t.data[this.field].indexOf(i)),-1==i&&(i=!1)),i},y.prototype.getTreeChildren=function(e){var t=e.modules.dataTree,o=[];return t.children&&(Array.isArray(t.children)||(t.children=this.generateChildren(e)),t.children.forEach(function(e){e instanceof a&&o.push(e.getComponent())})),o},y.prototype.checkForRestyle=function(e){e.row.cells.indexOf(e)||e.row.reinitialize()},y.prototype.getChildField=function(){return this.field},y.prototype.redrawNeeded=function(e){return!!this.field&&void 0!==e[this.field]||!!this.elementField&&void 0!==e[this.elementField]},d.prototype.registerModule("dataTree",y);var w=function(e){this.table=e};w.prototype.download=function(e,t,o,i,n){function s(o,i){n?!0===n?r.triggerDownload(o,i,e,t,!0):n(o):r.triggerDownload(o,i,e,t)}var r=this,a=!1;if("function"==typeof e?a=e:r.downloaders[e]?a=r.downloaders[e]:console.warn("Download Error - No such download type found: ",e),a){var l=this.generateExportList(i);a.call(this.table,l,o||{},s)}},w.prototype.generateExportList=function(e){var t=this.table.modules.export.generateExportList(this.table.options.downloadConfig,!1,e||this.table.options.downloadRowRange,"download"),o=this.table.options.groupHeaderDownload;return o&&!Array.isArray(o)&&(o=[o]),t.forEach(function(e){var t;"group"===e.type&&(t=e.columns[0],o&&o[e.indent]&&(t.value=o[e.indent](t.value,e.component._group.getRowCount(),e.component._group.getData(),e.component)))}),t},w.prototype.triggerDownload=function(e,t,o,i,n){var s=document.createElement("a"),r=new Blob([e],{type:t}),i=i||"Tabulator."+("function"==typeof o?"txt":o);(r=this.table.options.downloadReady.call(this.table,e,r))&&(n?window.open(window.URL.createObjectURL(r)):navigator.msSaveOrOpenBlob?navigator.msSaveOrOpenBlob(r,i):(s.setAttribute("href",window.URL.createObjectURL(r)),s.setAttribute("download",i),s.style.display="none",document.body.appendChild(s),s.click(),document.body.removeChild(s)),this.table.options.downloadComplete&&this.table.options.downloadComplete())},w.prototype.commsReceived=function(e,t,o){switch(t){case"intercept":this.download(o.type,"",o.options,o.active,o.intercept)}},w.prototype.downloaders={csv:function(e,t,o){var i=t&&t.delimiter?t.delimiter:",",n=[],s=[];e.forEach(function(e){var t=[];switch(e.type){case"group":console.warn("Download Warning - CSV downloader cannot process row groups");break;case"calc":console.warn("Download Warning - CSV downloader cannot process column calculations");break;case"header":e.columns.forEach(function(e,t){e&&1===e.depth&&(s[t]=void 0===e.value||"null"==typeof e.value?"":e.value)});break;case"row":e.columns.forEach(function(e){if(e){switch(_typeof(e.value)){case"object":e.value=JSON.stringify(e.value);break;case"undefined":case"null":e.value=""}t.push('"'+String(e.value).split('"').join('""')+'"')}}),n.push(t.join(i))}}),s.length&&(n=[s].concat(n)),n=n.join("\n"),t.bom&&(n="\ufeff"+n),o(n,"text/csv")},json:function(e,t,o){var i=[];e.forEach(function(e){var t={};switch(e.type){case"header":break;case"group":console.warn("Download Warning - JSON downloader cannot process row groups");break;case"calc":console.warn("Download Warning - JSON downloader cannot process column calculations");break;case"row":e.columns.forEach(function(e){e&&(t[e.component.getField()]=e.value)}),i.push(t)}}),i=JSON.stringify(i,null,"\t"),o(i,"application/json")},pdf:function(e,t,o){function i(e,t){var o=[];return e.columns.forEach(function(e){var i;if(e){switch(_typeof(e.value)){case"object":e.value=JSON.stringify(e.value);break;case"undefined":case"null":e.value=""}i={content:e.value,colSpan:e.width,rowSpan:e.height},t&&(i.styles=t),o.push(i)}else o.push("")}),o}var n=[],s=[],r={},a=t.rowGroupStyles||{fontStyle:"bold",fontSize:12,cellPadding:6,fillColor:220},l=t.rowCalcStyles||{fontStyle:"bold",fontSize:10,cellPadding:4,fillColor:232},c=t.jsPDF||{},u=t&&t.title?t.title:"";c.orientation||(c.orientation=t.orientation||"landscape"),c.unit||(c.unit="pt"),e.forEach(function(e){switch(e.type){case"header":n.push(i(e));break;case"group":s.push(i(e,a));break;case"calc":s.push(i(e,l));break;case"row":s.push(i(e))}});var d=new jsPDF(c);t&&t.autoTable&&(r="function"==typeof t.autoTable?t.autoTable(d)||{}:t.autoTable),u&&(r.addPageContent=function(e){d.text(u,40,30)}),r.head=n,r.body=s,d.autoTable(r),t&&t.documentProcessing&&t.documentProcessing(d),o(d.output("arraybuffer"),"application/pdf")},xlsx:function(e,t,o){function i(){var t=[],o=[],i={},n={s:{c:0,r:0},e:{c:e[0]?e[0].columns.reduce(function(e,t){return e+(t&&t.width?t.width:1)},0):0,r:e.length}};return e.forEach(function(e,i){var n=[];e.columns.forEach(function(e,t){e?(n.push(e.value instanceof Date||"object"!==_typeof(e.value)?e.value:JSON.stringify(e.value)),(e.width>1||e.height>-1)&&o.push({s:{r:i,c:t},e:{r:i+e.height-1,c:t+e.width-1}})):n.push("")}),t.push(n)}),XLSX.utils.sheet_add_aoa(i,t),i["!ref"]=XLSX.utils.encode_range(n),o.length&&(i["!merges"]=o),i}var n,s=this,r=t.sheetName||"Sheet1",a=XLSX.utils.book_new();if(a.SheetNames=[],a.Sheets={},t.sheetOnly)return void o(i());if(t.sheets)for(var l in t.sheets)!0===t.sheets[l]?(a.SheetNames.push(l),a.Sheets[l]=i()):(a.SheetNames.push(l),this.table.modules.comms.send(t.sheets[l],"download","intercept",{type:"xlsx",options:{sheetOnly:!0},active:s.active,intercept:function(e){a.Sheets[l]=e}}));else a.SheetNames.push(r),a.Sheets[r]=i();t.documentProcessing&&(a=t.documentProcessing(a)),n=XLSX.write(a,{bookType:"xlsx",bookSST:!0,type:"binary"}),o(function(e){for(var t=new ArrayBuffer(e.length),o=new Uint8Array(t),i=0;i!=e.length;++i)o[i]=255&e.charCodeAt(i);return t}(n),"application/octet-stream")},html:function(e,t,o){this.modExists("export",!0)&&o(this.modules.export.genereateHTMLTable(e),"text/html")}},d.prototype.registerModule("download",w);var E=function(e){this.table=e,this.currentCell=!1,this.mouseClick=!1,this.recursionBlock=!1,this.invalidEdit=!1,this.editedCells=[]};E.prototype.initializeColumn=function(e){var t=this,o={editor:!1,blocked:!1,check:e.definition.editable,params:e.definition.editorParams||{}};switch(_typeof(e.definition.editor)){case"string":"tick"===e.definition.editor&&(e.definition.editor="tickCross",console.warn("DEPRECATION WARNING - the tick editor has been deprecated, please use the tickCross editor")),t.editors[e.definition.editor]?o.editor=t.editors[e.definition.editor]:console.warn("Editor Error - No such editor found: ",e.definition.editor);break;case"function":o.editor=e.definition.editor;break;case"boolean":!0===e.definition.editor&&("function"!=typeof e.definition.formatter?("tick"===e.definition.formatter&&(e.definition.formatter="tickCross",console.warn("DEPRECATION WARNING - the tick editor has been deprecated, please use the tickCross editor")),t.editors[e.definition.formatter]?o.editor=t.editors[e.definition.formatter]:o.editor=t.editors.input):console.warn("Editor Error - Cannot auto lookup editor for a custom formatter: ",e.definition.formatter))}o.editor&&(e.modules.edit=o)},E.prototype.getCurrentCell=function(){return!!this.currentCell&&this.currentCell.getComponent()},E.prototype.clearEditor=function(e){var t,o=this.currentCell;if(this.invalidEdit=!1,o){for(this.currentCell=!1,t=o.getElement(),e?o.validate():t.classList.remove("tabulator-validation-fail"),t.classList.remove("tabulator-editing");t.firstChild;)t.removeChild(t.firstChild);o.row.getElement().classList.remove("tabulator-row-editing")}},E.prototype.cancelEdit=function(){if(this.currentCell){var e=this.currentCell,t=this.currentCell.getComponent();this.clearEditor(!0),e.setValueActual(e.getValue()),e.cellRendered(),e.column.cellEvents.cellEditCancelled&&e.column.cellEvents.cellEditCancelled.call(this.table,t),this.table.options.cellEditCancelled.call(this.table,t)}},E.prototype.bindEditor=function(e){var t=this,o=e.getElement();o.setAttribute("tabindex",0),o.addEventListener("click",function(e){o.classList.contains("tabulator-editing")||o.focus({preventScroll:!0})}),o.addEventListener("mousedown",function(e){t.mouseClick=!0}),o.addEventListener("focus",function(o){t.recursionBlock||t.edit(e,o,!1)})},E.prototype.focusCellNoEvent=function(e,t){this.recursionBlock=!0,t&&"ie"===this.table.browser||e.getElement().focus({preventScroll:!0}),this.recursionBlock=!1},E.prototype.editCell=function(e,t){this.focusCellNoEvent(e),this.edit(e,!1,t)},E.prototype.focusScrollAdjust=function(e){if("virtual"==this.table.rowManager.getRenderMode()){var t=this.table.rowManager.element.scrollTop,o=this.table.rowManager.element.clientHeight+this.table.rowManager.element.scrollTop,i=e.row.getElement();i.offsetTop;i.offsetTop<t?this.table.rowManager.element.scrollTop-=t-i.offsetTop:i.offsetTop+i.offsetHeight>o&&(this.table.rowManager.element.scrollTop+=i.offsetTop+i.offsetHeight-o)}},E.prototype.edit=function(e,t,o){function i(t){if(c.currentCell===e){var o=!0;return e.column.modules.validate&&c.table.modExists("validate")&&"manual"!=c.table.options.validationMode&&(o=c.table.modules.validate.validate(e.column.modules.validate,e,t)),!0===o||"highlight"===c.table.options.validationMode?(c.clearEditor(),e.setValue(t,!0),e.modules.edit||(e.modules.edit={}),e.modules.edit.edited=!0,-1==c.editedCells.indexOf(e)&&c.editedCells.push(e),c.table.options.dataTree&&c.table.modExists("dataTree")&&c.table.modules.dataTree.checkForRestyle(e),!0===o||(h.classList.add("tabulator-validation-fail"),!1)):(c.invalidEdit=!0,h.classList.add("tabulator-validation-fail"),c.focusCellNoEvent(e,!0),d(),c.table.options.validationFailed.call(c.table,e.getComponent(),t,o),!1)}}function n(){c.currentCell===e&&(c.cancelEdit(),c.table.options.dataTree&&c.table.modExists("dataTree")&&c.table.modules.dataTree.checkForRestyle(e))}function s(e){d=e}var r,a,l,c=this,u=!0,d=function(){},h=e.getElement();if(this.currentCell)return void(this.invalidEdit||this.cancelEdit());if(e.column.modules.edit.blocked)return this.mouseClick=!1,h.blur(),!1;switch(t&&t.stopPropagation(),_typeof(e.column.modules.edit.check)){case"function":u=e.column.modules.edit.check(e.getComponent());break;case"boolean":u=e.column.modules.edit.check}if(u||o){if(c.cancelEdit(),c.currentCell=e,this.focusScrollAdjust(e),a=e.getComponent(),this.mouseClick&&(this.mouseClick=!1,e.column.cellEvents.cellClick&&e.column.cellEvents.cellClick.call(this.table,t,a)),e.column.cellEvents.cellEditing&&e.column.cellEvents.cellEditing.call(this.table,a),c.table.options.cellEditing.call(this.table,a),l="function"==typeof e.column.modules.edit.params?e.column.modules.edit.params(a):e.column.modules.edit.params,!1===(r=e.column.modules.edit.editor.call(c,a,s,i,n,l)))return h.blur(),!1;if(!(r instanceof Node))return console.warn("Edit Error - Editor should return an instance of Node, the editor returned:",r),h.blur(),!1;for(h.classList.add("tabulator-editing"),e.row.getElement().classList.add("tabulator-row-editing");h.firstChild;)h.removeChild(h.firstChild);h.appendChild(r),d();for(var p=h.children,m=0;m<p.length;m++)p[m].addEventListener("click",function(e){e.stopPropagation()});return!0}return this.mouseClick=!1,h.blur(),!1},E.prototype.maskInput=function(e,t){function o(t){var a=i[t];void 0!==a&&a!==r&&a!==n&&a!==s&&(e.value=e.value+""+a,o(t+1))}var i=t.mask,n=void 0!==t.maskLetterChar?t.maskLetterChar:"A",s=void 0!==t.maskNumberChar?t.maskNumberChar:"9",r=void 0!==t.maskWildcardChar?t.maskWildcardChar:"*",a=!1;e.addEventListener("keydown",function(t){var o=e.value.length,l=t.key;if(t.keyCode>46){if(o>=i.length)return t.preventDefault(),t.stopPropagation(),a=!1,!1;switch(i[o]){case n:if(l.toUpperCase()==l.toLowerCase())return t.preventDefault(),t.stopPropagation(),a=!1,!1;break;case s:if(isNaN(l))return t.preventDefault(),t.stopPropagation(),a=!1,!1;break;case r:break;default:if(l!==i[o])return t.preventDefault(),t.stopPropagation(),a=!1,!1}a=!0}}),e.addEventListener("keyup",function(i){i.keyCode>46&&t.maskAutoFill&&o(e.value.length)}),e.placeholder||(e.placeholder=i),t.maskAutoFill&&o(e.value.length)},E.prototype.getEditedCells=function(){var e=[];return this.editedCells.forEach(function(t){e.push(t.getComponent())}),e},E.prototype.clearEdited=function(e){var t;e.modules.edit&&e.modules.edit.edited&&(e.modules.validate.invalid=!1,(t=this.editedCells.indexOf(e))>-1&&this.editedCells.splice(t,1))},E.prototype.editors={input:function(e,t,o,i,n){function s(e){(null===r||void 0===r)&&""!==a.value||a.value!==r?o(a.value)&&(r=a.value):i()}var r=e.getValue(),a=document.createElement("input");if(a.setAttribute("type",n.search?"search":"text"),a.style.padding="4px",a.style.width="100%",a.style.boxSizing="border-box",n.elementAttributes&&"object"==_typeof(n.elementAttributes))for(var l in n.elementAttributes)"+"==l.charAt(0)?(l=l.slice(1),a.setAttribute(l,a.getAttribute(l)+n.elementAttributes["+"+l])):a.setAttribute(l,n.elementAttributes[l]);return a.value=void 0!==r?r:"",t(function(){a.focus({preventScroll:!0}),a.style.height="100%"}),a.addEventListener("change",s),a.addEventListener("blur",s),a.addEventListener("keydown",function(e){switch(e.keyCode){case 13:s(e);break;case 27:i()}}),n.mask&&this.table.modules.edit.maskInput(a,n),a},textarea:function(e,t,o,i,n){function s(t){(null===r||void 0===r)&&""!==c.value||c.value!==r?(o(c.value)&&(r=c.value),setTimeout(function(){e.getRow().normalizeHeight()},300)):i()}var r=e.getValue(),a=n.verticalNavigation||"hybrid",l=String(null!==r&&void 0!==r?r:""),c=(l.match(/(?:\r\n|\r|\n)/g),document.createElement("textarea")),u=0;if(c.style.display="block",c.style.padding="2px",c.style.height="100%",c.style.width="100%",c.style.boxSizing="border-box",c.style.whiteSpace="pre-wrap",c.style.resize="none",n.elementAttributes&&"object"==_typeof(n.elementAttributes))for(var d in n.elementAttributes)"+"==d.charAt(0)?(d=d.slice(1),c.setAttribute(d,c.getAttribute(d)+n.elementAttributes["+"+d])):c.setAttribute(d,n.elementAttributes[d]);return c.value=l,t(function(){c.focus({preventScroll:!0}),c.style.height="100%"}),c.addEventListener("change",s),c.addEventListener("blur",s),c.addEventListener("keyup",function(){c.style.height="";var t=c.scrollHeight;c.style.height=t+"px",t!=u&&(u=t,e.getRow().normalizeHeight())}),c.addEventListener("keydown",function(e){switch(e.keyCode){case 27:i();break;case 38:("editor"==a||"hybrid"==a&&c.selectionStart)&&(e.stopImmediatePropagation(),e.stopPropagation());break;case 40:("editor"==a||"hybrid"==a&&c.selectionStart!==c.value.length)&&(e.stopImmediatePropagation(),e.stopPropagation())}}),n.mask&&this.table.modules.edit.maskInput(c,n),c},number:function(e,t,o,i,n){function s(){var e=l.value;isNaN(e)||""===e||(e=Number(e)),e!==r?o(e)&&(r=e):i()}var r=e.getValue(),a=n.verticalNavigation||"editor",l=document.createElement("input");if(l.setAttribute("type","number"),void 0!==n.max&&l.setAttribute("max",n.max),void 0!==n.min&&l.setAttribute("min",n.min),void 0!==n.step&&l.setAttribute("step",n.step),l.style.padding="4px",l.style.width="100%",l.style.boxSizing="border-box",n.elementAttributes&&"object"==_typeof(n.elementAttributes))for(var c in n.elementAttributes)"+"==c.charAt(0)?(c=c.slice(1),l.setAttribute(c,l.getAttribute(c)+n.elementAttributes["+"+c])):l.setAttribute(c,n.elementAttributes[c]);l.value=r;var u=function(e){s()};return t(function(){l.removeEventListener("blur",u),l.focus({preventScroll:!0}),l.style.height="100%",l.addEventListener("blur",u)}),l.addEventListener("keydown",function(e){switch(e.keyCode){case 13:s();break;case 27:i();break;case 38:case 40:"editor"==a&&(e.stopImmediatePropagation(),e.stopPropagation())}}),n.mask&&this.table.modules.edit.maskInput(l,n),l},range:function(e,t,o,i,n){function s(){var e=a.value;isNaN(e)||""===e||(e=Number(e)),e!=r?o(e)&&(r=e):i()}var r=e.getValue(),a=document.createElement("input");if(a.setAttribute("type","range"),void 0!==n.max&&a.setAttribute("max",n.max),void 0!==n.min&&a.setAttribute("min",n.min),void 0!==n.step&&a.setAttribute("step",n.step),a.style.padding="4px",a.style.width="100%",a.style.boxSizing="border-box",n.elementAttributes&&"object"==_typeof(n.elementAttributes))for(var l in n.elementAttributes)"+"==l.charAt(0)?(l=l.slice(1),a.setAttribute(l,a.getAttribute(l)+n.elementAttributes["+"+l])):a.setAttribute(l,n.elementAttributes[l]);return a.value=r,t(function(){a.focus({preventScroll:!0}),a.style.height="100%"}),a.addEventListener("blur",function(e){s()}),a.addEventListener("keydown",function(e){switch(e.keyCode){case 13:s();break;case 27:i()}}),a},select:function(e,t,o,i,n){function s(t){var o,i={},s=w.table.getData();return o=t?w.table.columnManager.getColumnByField(t):e.getColumn()._getSelf(),o?(s.forEach(function(e){var t=o.getFieldValue(e);null!==t&&void 0!==t&&""!==t&&(i[t]=!0)}),i=n.sortValuesList?"asc"==n.sortValuesList?Object.keys(i).sort():Object.keys(i).sort().reverse():Object.keys(i)):console.warn("unable to find matching column to create select lookup list:",t),i}function r(t,o){function i(e){var e={label:e.label,value:e.value,itemParams:e.itemParams,elementAttributes:e.elementAttributes,element:!1};return o.indexOf(e.value)>-1&&c(e),n.push(e),s.push(e),e}var n=[],s=[];if("function"==typeof t&&(t=t(e)),Array.isArray(t))t.forEach(function(e){var t;"object"===(void 0===e?"undefined":_typeof(e))?e.options?(t={label:e.label,group:!0,itemParams:e.itemParams,elementAttributes:e.elementAttributes,element:!1},s.push(t),e.options.forEach(function(e){i(e)})):i(e):(t={label:e,value:e,element:!1},o.indexOf(t.value)>-1&&c(t),n.push(t),s.push(t))});else for(var r in t){var l={label:t[r],value:r,element:!1};o.indexOf(l.value)>-1&&c(l),n.push(l),s.push(l)}D=n,S=s,a()}function a(){for(;L.firstChild;)L.removeChild(L.firstChild);S.forEach(function(t){var o=t.element;if(!o){if(o=document.createElement("div"),t.label=n.listItemFormatter?n.listItemFormatter(t.value,t.label,e,o,t.itemParams):t.label,t.group?(o.classList.add("tabulator-edit-select-list-group"),o.tabIndex=0,o.innerHTML=""===t.label?"&nbsp;":t.label):(o.classList.add("tabulator-edit-select-list-item"),o.tabIndex=0,o.innerHTML=""===t.label?"&nbsp;":t.label,o.addEventListener("click",function(){T?(h(t),M.focus()):p(t)}),H.indexOf(t)>-1&&o.classList.add("active")),t.elementAttributes&&"object"==_typeof(t.elementAttributes))for(var i in t.elementAttributes)"+"==i.charAt(0)?(i=i.slice(1),o.setAttribute(i,M.getAttribute(i)+t.elementAttributes["+"+i])):o.setAttribute(i,t.elementAttributes[i]);o.addEventListener("mousedown",function(){z=!1,setTimeout(function(){z=!0},10)}),t.element=o}L.appendChild(o)})}function l(e,t){!T&&k&&k.element&&k.element.classList.remove("active"),k&&k.element&&k.element.classList.remove("focused"),k=e,e.element&&(e.element.classList.add("focused"),t&&e.element.classList.add("active"))}function c(e){-1==H.indexOf(e)&&(H.push(e),l(e,!0)),f()}function u(e){var t=H[e];e>-1&&(H.splice(e,1),t.element&&t.element.classList.remove("active"))}function h(e){e||(e=k);var t=H.indexOf(e);t>-1?u(t):(!0!==T&&H.length>=T&&u(0),c(e)),f()}function p(e){v(),e||(e=k),e&&o(e.value)}function m(){v();var e=[];H.forEach(function(t){e.push(t.value)}),o(e)}function f(){var e=[];H.forEach(function(t){e.push(t.label)}),M.value=e.join(", ")}function g(){v(),i()}function b(){if(!L.parentNode){!0===n.values?r(s(),R):"string"==typeof n.values?r(s(n.values),R):r(n.values||[],R);var e=d.prototype.helpers.elOffset(E);L.style.minWidth=E.offsetWidth+"px",L.style.top=e.top+E.offsetHeight+"px",L.style.left=e.left+"px",L.addEventListener("mousedown",function(e){z=!1,setTimeout(function(){z=!0},10)}),document.body.appendChild(L)}}function v(){L.parentNode&&L.parentNode.removeChild(L),y()}function y(){w.table.rowManager.element.removeEventListener("scroll",g)}var w=this,E=e.getElement(),C=e.getValue(),x=n.verticalNavigation||"editor",R=void 0!==C||null===C?C:void 0!==n.defaultValue?n.defaultValue:[],M=document.createElement("input"),L=document.createElement("div"),T=n.multiselect,D=[],k={},S=[],H=[],z=!0;if(this.table.rowManager.element.addEventListener("scroll",g),(Array.isArray(n)||!Array.isArray(n)&&"object"===(void 0===n?"undefined":_typeof(n))&&!n.values)&&(console.warn("DEPRECATION WARNING - values for the select editor must now be passed into the values property of the editorParams object, not as the editorParams object"),n={values:n}),M.setAttribute("type","text"),M.style.padding="4px",M.style.width="100%",M.style.boxSizing="border-box",M.style.cursor="default",M.readOnly=0!=this.currentCell,n.elementAttributes&&"object"==_typeof(n.elementAttributes))for(var A in n.elementAttributes)"+"==A.charAt(0)?(A=A.slice(1),M.setAttribute(A,M.getAttribute(A)+n.elementAttributes["+"+A])):M.setAttribute(A,n.elementAttributes[A]);return M.value=void 0!==C||null===C?C:"",M.addEventListener("keydown",function(e){var t;switch(e.keyCode){case 38:t=D.indexOf(k),("editor"==x||"hybrid"==x&&t)&&(e.stopImmediatePropagation(),e.stopPropagation(),e.preventDefault(),t>0&&l(D[t-1],!T));break;case 40:t=D.indexOf(k),("editor"==x||"hybrid"==x&&t<D.length-1)&&(e.stopImmediatePropagation(),e.stopPropagation(),e.preventDefault(),t<D.length-1&&(-1==t?l(D[0],!T):l(D[t+1],!T)));break;case 37:case 39:e.stopImmediatePropagation(),e.stopPropagation(),e.preventDefault();break;case 13:T?h():p();break;case 27:g()}}),M.addEventListener("blur",function(e){z&&(T?m():g())}),M.addEventListener("focus",function(e){b()}),L=document.createElement("div"),L.classList.add("tabulator-edit-select-list"),t(function(){M.style.height="100%",M.focus({preventScroll:!0})}),M},autocomplete:function(e,t,o,i,n){function s(){!0===n.values?S=r():"string"==typeof n.values&&(S=r(n.values))}function r(t){var o,i={},s=w.table.getData();return o=t?w.table.columnManager.getColumnByField(t):e.getColumn()._getSelf(),o?(s.forEach(function(e){var t=o.getFieldValue(e);null!==t&&void 0!==t&&""!==t&&(i[t]=!0)}),i=n.sortValuesList?"asc"==n.sortValuesList?Object.keys(i).sort():Object.keys(i).sort().reverse():Object.keys(i)):console.warn("unable to find matching column to create autocomplete lookup list:",t),i}function a(e,t){var o,i,s=[];o=S||(n.values||[]),n.searchFunc?(s=n.searchFunc(e,o),s instanceof Promise?(l(void 0!==n.searchingPlaceholder?n.searchingPlaceholder:"Searching..."),s.then(function(e){h(c(e),t)}).catch(function(e){console.err("error in autocomplete search promise:",e)})):h(c(s),t)):(i=c(o),""===e?n.showListOnEmpty&&(s=i):i.forEach(function(t){null===t.value&&void 0===t.value||(String(t.value).toLowerCase().indexOf(String(e).toLowerCase())>-1||String(t.title).toLowerCase().indexOf(String(e).toLowerCase())>-1)&&s.push(t)}),h(s,t))}function l(e){var t=document.createElement("div");u(),!1!==e&&(t.classList.add("tabulator-edit-select-list-notice"),t.tabIndex=0,e instanceof Node?t.appendChild(e):t.innerHTML=e,L.appendChild(t))}function c(e){var t=[];if(Array.isArray(e))e.forEach(function(e){var o={};"object"===(void 0===e?"undefined":_typeof(e))?(o.title=n.listItemFormatter?n.listItemFormatter(e.value,e.label):e.label,o.value=e.value):(o.title=n.listItemFormatter?n.listItemFormatter(e,e):e,o.value=e),t.push(o)});else for(var o in e){var i={title:n.listItemFormatter?n.listItemFormatter(o,e[o]):e[o],value:o};t.push(i)}return t}function u(){for(;L.firstChild;)L.removeChild(L.firstChild)}function h(e,t){e.length?p(e,t):n.emptyPlaceholder&&l(n.emptyPlaceholder)}function p(e,t){var o=!1;u(),T=e,T.forEach(function(e){var i=e.element;i||(i=document.createElement("div"),i.classList.add("tabulator-edit-select-list-item"),i.tabIndex=0,i.innerHTML=e.title,i.addEventListener("click",function(t){g(e),m()}),i.addEventListener("mousedown",function(e){k=!1,setTimeout(function(){k=!0},10)}),e.element=i,t&&e.value==C&&(M.value=e.title,e.element.classList.add("active"),o=!0),e===D&&(e.element.classList.add("active"),o=!0)),L.appendChild(i)}),o||g(!1)}function m(){b(),D?C!==D.value?(C=D.value,M.value=D.title,o(D.value)):i():n.freetext?(C=M.value,o(M.value)):n.allowEmpty&&""===M.value?(C=M.value,o(M.value)):i()}function f(){if(!L.parentNode){for(;L.firstChild;)L.removeChild(L.firstChild);var e=d.prototype.helpers.elOffset(E);L.style.minWidth=E.offsetWidth+"px",L.style.top=e.top+E.offsetHeight+"px",L.style.left=e.left+"px",document.body.appendChild(L)}}function g(e,t){D&&D.element&&D.element.classList.remove("active"),D=e,e&&e.element&&e.element.classList.add("active")}function b(){L.parentNode&&L.parentNode.removeChild(L),y()}function v(){b(),i()}function y(){w.table.rowManager.element.removeEventListener("scroll",v)}var w=this,E=e.getElement(),C=e.getValue(),x=n.verticalNavigation||"editor",R=void 0!==C||null===C?C:void 0!==n.defaultValue?n.defaultValue:"",M=document.createElement("input"),L=document.createElement("div"),T=[],D=!1,k=!0,S=!1;if(this.table.rowManager.element.addEventListener("scroll",v),M.setAttribute("type","search"),M.style.padding="4px",M.style.width="100%",M.style.boxSizing="border-box",n.elementAttributes&&"object"==_typeof(n.elementAttributes))for(var H in n.elementAttributes)"+"==H.charAt(0)?(H=H.slice(1),M.setAttribute(H,M.getAttribute(H)+n.elementAttributes["+"+H])):M.setAttribute(H,n.elementAttributes[H]);return L.classList.add("tabulator-edit-select-list"),L.addEventListener("mousedown",function(e){k=!1,setTimeout(function(){k=!0},10)}),M.addEventListener("keydown",function(e){var t;switch(e.keyCode){case 38:t=T.indexOf(D),("editor"==x||"hybrid"==x&&t)&&(e.stopImmediatePropagation(),e.stopPropagation(),e.preventDefault(),g(t>0?T[t-1]:!1));break;case 40:t=T.indexOf(D),("editor"==x||"hybrid"==x&&t<T.length-1)&&(e.stopImmediatePropagation(),e.stopPropagation(),e.preventDefault(),t<T.length-1&&g(-1==t?T[0]:T[t+1]));break;case 37:case 39:e.stopImmediatePropagation(),e.stopPropagation();break;case 13:m();break;case 27:v();break;case 36:case 35:e.stopImmediatePropagation()}}),M.addEventListener("keyup",function(e){switch(e.keyCode){case 38:case 37:case 39:case 40:case 13:case 27:break;default:a(M.value)}}),M.addEventListener("search",function(e){a(M.value)}),M.addEventListener("blur",function(e){k&&m()}),M.addEventListener("focus",function(e){var t=R;s(),f(),M.value=t,a(t,!0)}),t(function(){M.style.height="100%",M.focus({preventScroll:!0})}),n.mask&&this.table.modules.edit.maskInput(M,n),M},star:function(e,t,o,i,n){function s(e){h.forEach(function(t,o){o<e?("ie"==a.table.browser?t.setAttribute("class","tabulator-star-active"):t.classList.replace("tabulator-star-inactive","tabulator-star-active"),t.innerHTML='<polygon fill="#488CE9" stroke="#014AAE" stroke-width="37.6152" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" points="259.216,29.942 330.27,173.919 489.16,197.007 374.185,309.08 401.33,467.31 259.216,392.612 117.104,467.31 144.25,309.08 29.274,197.007 188.165,173.919 "/>'):("ie"==a.table.browser?t.setAttribute("class","tabulator-star-inactive"):t.classList.replace("tabulator-star-active","tabulator-star-inactive"),t.innerHTML='<polygon fill="#010155" stroke="#686868" stroke-width="37.6152" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" points="259.216,29.942 330.27,173.919 489.16,197.007 374.185,309.08 401.33,467.31 259.216,392.612 117.104,467.31 144.25,309.08 29.274,197.007 188.165,173.919 "/>')})}function r(e){c=e,s(e)}var a=this,l=e.getElement(),c=e.getValue(),u=l.getElementsByTagName("svg").length||5,d=l.getElementsByTagName("svg")[0]?l.getElementsByTagName("svg")[0].getAttribute("width"):14,h=[],p=document.createElement("div"),m=document.createElementNS("http://www.w3.org/2000/svg","svg");if(l.style.whiteSpace="nowrap",l.style.overflow="hidden",l.style.textOverflow="ellipsis",p.style.verticalAlign="middle",p.style.display="inline-block",p.style.padding="4px",m.setAttribute("width",d),m.setAttribute("height",d),m.setAttribute("viewBox","0 0 512 512"),m.setAttribute("xml:space","preserve"),m.style.padding="0 1px",n.elementAttributes&&"object"==_typeof(n.elementAttributes))for(var f in n.elementAttributes)"+"==f.charAt(0)?(f=f.slice(1),p.setAttribute(f,p.getAttribute(f)+n.elementAttributes["+"+f])):p.setAttribute(f,n.elementAttributes[f]);for(var g=1;g<=u;g++)!function(e){var t=document.createElement("span"),i=m.cloneNode(!0);h.push(i),t.addEventListener("mouseenter",function(t){t.stopPropagation(),t.stopImmediatePropagation(),s(e)}),t.addEventListener("mousemove",function(e){e.stopPropagation(),e.stopImmediatePropagation()}),t.addEventListener("click",function(t){t.stopPropagation(),t.stopImmediatePropagation(),o(e),l.blur()}),t.appendChild(i),p.appendChild(t)}(g);return c=Math.min(parseInt(c),u),s(c),p.addEventListener("mousemove",function(e){s(0)}),p.addEventListener("click",function(e){o(0)}),l.addEventListener("blur",function(e){i()}),l.addEventListener("keydown",function(e){switch(e.keyCode){case 39:r(c+1);break;case 37:r(c-1);break;case 13:o(c);break;case 27:i()}}),p},progress:function(e,t,o,i,n){function s(){var e=d*Math.round(m.offsetWidth/(l.clientWidth/100))+u;o(e),l.setAttribute("aria-valuenow",e),l.setAttribute("aria-label",h)}var r,a,l=e.getElement(),c=void 0===n.max?l.getElementsByTagName("div")[0].getAttribute("max")||100:n.max,u=void 0===n.min?l.getElementsByTagName("div")[0].getAttribute("min")||0:n.min,d=(c-u)/100,h=e.getValue()||0,p=document.createElement("div"),m=document.createElement("div");if(p.style.position="absolute",p.style.right="0",p.style.top="0",p.style.bottom="0",p.style.width="5px",p.classList.add("tabulator-progress-handle"),m.style.display="inline-block",
+m.style.position="relative",m.style.height="100%",m.style.backgroundColor="#488CE9",m.style.maxWidth="100%",m.style.minWidth="0%",n.elementAttributes&&"object"==_typeof(n.elementAttributes))for(var f in n.elementAttributes)"+"==f.charAt(0)?(f=f.slice(1),m.setAttribute(f,m.getAttribute(f)+n.elementAttributes["+"+f])):m.setAttribute(f,n.elementAttributes[f]);return l.style.padding="4px 4px",h=Math.min(parseFloat(h),c),h=Math.max(parseFloat(h),u),h=Math.round((h-u)/d),m.style.width=h+"%",l.setAttribute("aria-valuemin",u),l.setAttribute("aria-valuemax",c),m.appendChild(p),p.addEventListener("mousedown",function(e){r=e.screenX,a=m.offsetWidth}),p.addEventListener("mouseover",function(){p.style.cursor="ew-resize"}),l.addEventListener("mousemove",function(e){r&&(m.style.width=a+e.screenX-r+"px")}),l.addEventListener("mouseup",function(e){r&&(e.stopPropagation(),e.stopImmediatePropagation(),r=!1,a=!1,s())}),l.addEventListener("keydown",function(e){switch(e.keyCode){case 39:e.preventDefault(),m.style.width=m.clientWidth+l.clientWidth/100+"px";break;case 37:e.preventDefault(),m.style.width=m.clientWidth-l.clientWidth/100+"px";break;case 9:case 13:s();break;case 27:i()}}),l.addEventListener("blur",function(){i()}),m},tickCross:function(e,t,o,i,n){function s(e){return l?e?u?c:a.checked:a.checked&&!u?(a.checked=!1,a.indeterminate=!0,u=!0,c):(u=!1,a.checked):a.checked}var r=e.getValue(),a=document.createElement("input"),l=n.tristate,c=void 0===n.indeterminateValue?null:n.indeterminateValue,u=!1;if(a.setAttribute("type","checkbox"),a.style.marginTop="5px",a.style.boxSizing="border-box",n.elementAttributes&&"object"==_typeof(n.elementAttributes))for(var d in n.elementAttributes)"+"==d.charAt(0)?(d=d.slice(1),a.setAttribute(d,a.getAttribute(d)+n.elementAttributes["+"+d])):a.setAttribute(d,n.elementAttributes[d]);return a.value=r,!l||void 0!==r&&r!==c&&""!==r||(u=!0,a.indeterminate=!0),"firefox"!=this.table.browser&&t(function(){a.focus({preventScroll:!0})}),a.checked=!0===r||"true"===r||"True"===r||1===r,a.addEventListener("change",function(e){o(s())}),a.addEventListener("blur",function(e){o(s(!0))}),a.addEventListener("keydown",function(e){13==e.keyCode&&o(s()),27==e.keyCode&&i()}),a}},d.prototype.registerModule("edit",E);var C=function(e,t,o,i){this.type=e,this.columns=t,this.component=o||!1,this.indent=i||0},x=function(e,t,o,i,n){this.value=e,this.component=t||!1,this.width=o,this.height=i,this.depth=n},R=function(e){this.table=e,this.config={},this.cloneTableStyle=!0,this.colVisProp=""};R.prototype.generateExportList=function(e,t,o,i){this.cloneTableStyle=t,this.config=e||{},this.colVisProp=i;var n=!1!==this.config.columnHeaders?this.headersToExportRows(this.generateColumnGroupHeaders()):[],s=this.bodyToExportRows(this.rowLookup(o));return n.concat(s)},R.prototype.genereateTable=function(e,t,o,i){var n=this.generateExportList(e,t,o,i);return this.genereateTableElement(n)},R.prototype.rowLookup=function(e){var t=this,o=[];if("function"==typeof e)e.call(this.table).forEach(function(e){(e=t.table.rowManager.findRow(e))&&o.push(e)});else switch(e){case!0:case"visible":o=this.table.rowManager.getVisibleRows(!0);break;case"all":o=this.table.rowManager.rows;break;case"selected":o=this.table.modules.selectRow.selectedRows;break;case"active":default:o=this.table.rowManager.getDisplayRows()}return Object.assign([],o)},R.prototype.generateColumnGroupHeaders=function(){var e=this,t=[];return(!1!==this.config.columnGroups?this.table.columnManager.columns:this.table.columnManager.columnsByIndex).forEach(function(o){var i=e.processColumnGroup(o);i&&t.push(i)}),t},R.prototype.processColumnGroup=function(e){var t=this,o=e.columns,i=0,n=e.definition["title"+(this.colVisProp.charAt(0).toUpperCase()+this.colVisProp.slice(1))]||e.definition.title,s={title:n,column:e,depth:1};if(o.length){if(s.subGroups=[],s.width=0,o.forEach(function(e){var o=t.processColumnGroup(e);o&&(s.width+=o.width,s.subGroups.push(o),o.depth>i&&(i=o.depth))}),s.depth+=i,!s.width)return!1}else{if(!this.columnVisCheck(e))return!1;s.width=1}return s},R.prototype.columnVisCheck=function(e){return!1!==e.definition[this.colVisProp]&&(e.visible||!e.visible&&e.definition[this.colVisProp])},R.prototype.headersToExportRows=function(e){function t(e,n){var s=i-n;if(void 0===o[n]&&(o[n]=[]),e.height=e.subGroups?1:s-e.depth+1,o[n].push(e),e.height>1)for(var r=1;r<e.height;r++)void 0===o[n+r]&&(o[n+r]=[]),o[n+r].push(!1);if(e.width>1)for(var a=1;a<e.width;a++)o[n].push(!1);e.subGroups&&e.subGroups.forEach(function(e){t(e,n+1)})}var o=[],i=0,n=[];return e.forEach(function(e){e.depth>i&&(i=e.depth)}),e.forEach(function(e){t(e,0)}),o.forEach(function(e){var t=[];e.forEach(function(e){e?t.push(new x(e.title,e.column.getComponent(),e.width,e.height,e.depth)):t.push(null)}),n.push(new C("header",t))}),n},R.prototype.bodyToExportRows=function(e){var t=this,o=[],i=[];return this.table.columnManager.columnsByIndex.forEach(function(e){t.columnVisCheck(e)&&o.push(e.getComponent())}),!1!==this.config.columnCalcs&&this.table.modExists("columnCalcs")&&(this.table.modules.columnCalcs.topInitialized&&e.unshift(this.table.modules.columnCalcs.topRow),this.table.modules.columnCalcs.botInitialized&&e.push(this.table.modules.columnCalcs.botRow)),e=e.filter(function(e){switch(e.type){case"group":return!1!==t.config.rowGroups;case"calc":return!1!==t.config.columnCalcs;case"row":return!(t.table.options.dataTree&&!1===t.config.dataTree&&e.modules.dataTree.parent)}return!0}),e.forEach(function(e,n){var s=e.getData(t.colVisProp),r=[],a=0;switch(e.type){case"group":a=e.level,r.push(new x(e.key,e.getComponent(),o.length,1));break;case"calc":case"row":o.forEach(function(e){r.push(new x(e._column.getFieldValue(s),e,1,1))}),t.table.options.dataTree&&!1!==t.config.dataTree&&(a=e.modules.dataTree.index)}i.push(new C(e.type,r,e.getComponent(),a))}),i},R.prototype.genereateTableElement=function(e){var t=this,o=document.createElement("table"),i=document.createElement("thead"),n=document.createElement("tbody"),s=this.lookupTableStyles(),r=this.table.options["rowFormatter"+(this.colVisProp.charAt(0).toUpperCase()+this.colVisProp.slice(1))],a={};return a.rowFormatter=null!==r?r:this.table.options.rowFormatter,this.table.options.dataTree&&!1!==this.config.dataTree&&this.table.modExists("columnCalcs")&&(a.treeElementField=this.table.modules.dataTree.elementField),a.groupHeader=this.table.options["groupHeader"+(this.colVisProp.charAt(0).toUpperCase()+this.colVisProp.slice(1))],a.groupHeader&&!Array.isArray(a.groupHeader)&&(a.groupHeader=[a.groupHeader]),o.classList.add("tabulator-print-table"),this.mapElementStyles(this.table.columnManager.getHeadersElement(),i,["border-top","border-left","border-right","border-bottom","background-color","color","font-weight","font-family","font-size"]),e.length>1e3&&console.warn("It may take a long time to render an HTML table with more than 1000 rows"),e.forEach(function(e,o){switch(e.type){case"header":i.appendChild(t.genereateHeaderElement(e,a,s));break;case"group":n.appendChild(t.genereateGroupElement(e,a,s));break;case"calc":n.appendChild(t.genereateCalcElement(e,a,s));break;case"row":var r=t.genereateRowElement(e,a,s);t.mapElementStyles(o%2&&s.evenRow?s.evenRow:s.oddRow,r,["border-top","border-left","border-right","border-bottom","color","font-weight","font-family","font-size","background-color"]),n.appendChild(r)}}),i.innerHTML&&o.appendChild(i),o.appendChild(n),this.mapElementStyles(this.table.element,o,["border-top","border-left","border-right","border-bottom"]),o},R.prototype.lookupTableStyles=function(){var e={};return this.cloneTableStyle&&window.getComputedStyle&&(e.oddRow=this.table.element.querySelector(".tabulator-row-odd:not(.tabulator-group):not(.tabulator-calcs)"),e.evenRow=this.table.element.querySelector(".tabulator-row-even:not(.tabulator-group):not(.tabulator-calcs)"),e.calcRow=this.table.element.querySelector(".tabulator-row.tabulator-calcs"),e.firstRow=this.table.element.querySelector(".tabulator-row:not(.tabulator-group):not(.tabulator-calcs)"),e.firstGroup=this.table.element.getElementsByClassName("tabulator-group")[0],e.firstRow&&(e.styleCells=e.firstRow.getElementsByClassName("tabulator-cell"),e.firstCell=e.styleCells[0],e.lastCell=e.styleCells[e.styleCells.length-1])),e},R.prototype.genereateHeaderElement=function(e,t,o){var i=this,n=document.createElement("tr");return e.columns.forEach(function(e){if(e){var t=document.createElement("th"),o=e.component._column.definition.cssClass?e.component._column.definition.cssClass.split(" "):[];t.colSpan=e.width,t.rowSpan=e.height,t.innerHTML=e.value,i.cloneTableStyle&&(t.style.boxSizing="border-box"),o.forEach(function(e){t.classList.add(e)}),i.mapElementStyles(e.component.getElement(),t,["text-align","border-top","border-left","border-right","border-bottom","background-color","color","font-weight","font-family","font-size"]),i.mapElementStyles(e.component._column.contentElement,t,["padding-top","padding-left","padding-right","padding-bottom"]),e.component._column.visible?i.mapElementStyles(e.component.getElement(),t,["width"]):e.component._column.definition.width&&(t.style.width=e.component._column.definition.width+"px"),e.component._column.parent&&i.mapElementStyles(e.component._column.parent.groupElement,t,["border-top"]),n.appendChild(t)}}),n},R.prototype.genereateGroupElement=function(e,t,o){var i=document.createElement("tr"),n=document.createElement("td"),s=e.columns[0];return i.classList.add("tabulator-print-table-row"),t.groupHeader&&t.groupHeader[e.indent]?s.value=t.groupHeader[e.indent](s.value,e.component._group.getRowCount(),e.component._group.getData(),e.component):!1===t.groupHeader?s.value=s.value:s.value=e.component._group.generator(s.value,e.component._group.getRowCount(),e.component._group.getData(),e.component),n.colSpan=s.width,n.innerHTML=s.value,i.classList.add("tabulator-print-table-group"),i.classList.add("tabulator-group-level-"+e.indent),s.component.getVisibility()&&i.classList.add("tabulator-group-visible"),this.mapElementStyles(o.firstGroup,i,["border-top","border-left","border-right","border-bottom","color","font-weight","font-family","font-size","background-color"]),this.mapElementStyles(o.firstGroup,n,["padding-top","padding-left","padding-right","padding-bottom"]),i.appendChild(n),i},R.prototype.genereateCalcElement=function(e,t,o){var i=this.genereateRowElement(e,t,o);return i.classList.add("tabulator-print-table-calcs"),this.mapElementStyles(o.calcRow,i,["border-top","border-left","border-right","border-bottom","color","font-weight","font-family","font-size","background-color"]),i},R.prototype.genereateRowElement=function(e,t,o){var n=this,s=document.createElement("tr");return s.classList.add("tabulator-print-table-row"),e.columns.forEach(function(r){if(r){var a=document.createElement("td"),l=r.component._column,c=r.value,u={modules:{},getValue:function(){return c},getField:function(){return l.definition.field},getElement:function(){return a},getColumn:function(){return l.getComponent()},getData:function(){return rowData},getRow:function(){return e.getComponent()},getComponent:function(){return u},column:l};if((l.definition.cssClass?l.definition.cssClass.split(" "):[]).forEach(function(e){a.classList.add(e)}),n.table.modExists("format")&&!1!==n.config.formatCells)c=n.table.modules.format.formatExportValue(u,n.colVisProp);else switch(void 0===c?"undefined":_typeof(c)){case"object":c=JSON.stringify(c);break;case"undefined":case"null":c="";break;default:c=c}if(c instanceof Node?a.appendChild(c):a.innerHTML=c,o.firstCell&&(n.mapElementStyles(o.firstCell,a,["padding-top","padding-left","padding-right","padding-bottom","border-top","border-left","border-right","border-bottom","color","font-weight","font-family","font-size"]),l.definition.align&&(a.style.textAlign=l.definition.align)),n.table.options.dataTree&&!1!==n.config.dataTree&&(t.treeElementField&&t.treeElementField==l.field||!t.treeElementField&&0==i)&&(e.component._row.modules.dataTree.controlEl&&a.insertBefore(e.component._row.modules.dataTree.controlEl.cloneNode(!0),a.firstChild),e.component._row.modules.dataTree.branchEl&&a.insertBefore(e.component._row.modules.dataTree.branchEl.cloneNode(!0),a.firstChild)),s.appendChild(a),u.modules.format&&u.modules.format.renderedCallback&&u.modules.format.renderedCallback(),t.rowFormatter&&!1!==n.config.formatCells){var d=e.getComponent();d.getElement=function(){return s},t.rowFormatter(d)}}}),s},R.prototype.genereateHTMLTable=function(e){var t=document.createElement("div");return t.appendChild(this.genereateTableElement(e)),t.innerHTML},R.prototype.getHtml=function(e,t,o,i){var n=this.generateExportList(o||this.table.options.htmlOutputConfig,t,e,i||"htmlOutput");return this.genereateHTMLTable(n)},R.prototype.mapElementStyles=function(e,t,o){if(this.cloneTableStyle&&e&&t){var i={"background-color":"backgroundColor",color:"fontColor",width:"width","font-weight":"fontWeight","font-family":"fontFamily","font-size":"fontSize","text-align":"textAlign","border-top":"borderTop","border-left":"borderLeft","border-right":"borderRight","border-bottom":"borderBottom","padding-top":"paddingTop","padding-left":"paddingLeft","padding-right":"paddingRight","padding-bottom":"paddingBottom"};if(window.getComputedStyle){var n=window.getComputedStyle(e);o.forEach(function(e){t.style[i[e]]=n.getPropertyValue(e)})}}},d.prototype.registerModule("export",R);var M=function(e){this.table=e,this.filterList=[],this.headerFilters={},this.headerFilterColumns=[],this.prevHeaderFilterChangeCheck="",this.prevHeaderFilterChangeCheck="{}",this.changed=!1};M.prototype.initializeColumn=function(e,t){function o(t){var o,r="input"==e.modules.filter.tagType&&"text"==e.modules.filter.attrType||"textarea"==e.modules.filter.tagType?"partial":"match",a="",l="";if(void 0===e.modules.filter.prevSuccess||e.modules.filter.prevSuccess!==t){if(e.modules.filter.prevSuccess=t,e.modules.filter.emptyFunc(t))delete n.headerFilters[s];else{switch(e.modules.filter.value=t,_typeof(e.definition.headerFilterFunc)){case"string":n.filters[e.definition.headerFilterFunc]?(a=e.definition.headerFilterFunc,o=function(o){var i=e.definition.headerFilterFuncParams||{},s=e.getFieldValue(o);return i="function"==typeof i?i(t,s,o):i,n.filters[e.definition.headerFilterFunc](t,s,o,i)}):console.warn("Header Filter Error - Matching filter function not found: ",e.definition.headerFilterFunc);break;case"function":o=function(o){var i=e.definition.headerFilterFuncParams||{},n=e.getFieldValue(o);return i="function"==typeof i?i(t,n,o):i,e.definition.headerFilterFunc(t,n,o,i)},a=o}if(!o)switch(r){case"partial":o=function(o){var i=e.getFieldValue(o);return void 0!==i&&null!==i&&String(i).toLowerCase().indexOf(String(t).toLowerCase())>-1},a="like";break;default:o=function(o){return e.getFieldValue(o)==t},a="="}n.headerFilters[s]={value:t,func:o,type:a,params:i||{}}}l=JSON.stringify(n.headerFilters),n.prevHeaderFilterChangeCheck!==l&&(n.prevHeaderFilterChangeCheck=l,n.changed=!0,n.table.rowManager.filterRefresh())}return!0}var i,n=this,s=e.getField();e.modules.filter={success:o,attrType:!1,tagType:!1,emptyFunc:!1},this.generateHeaderFilterElement(e)},M.prototype.generateHeaderFilterElement=function(e,t,o){function i(){}var n,s,r,a,l,c,u,d=this,h=this,p=e.modules.filter.success,m=e.getField();if(e.modules.filter.headerElement&&e.modules.filter.headerElement.parentNode&&e.contentElement.removeChild(e.modules.filter.headerElement.parentNode),m){switch(e.modules.filter.emptyFunc=e.definition.headerFilterEmptyCheck||function(e){return!e&&"0"!==e},n=document.createElement("div"),n.classList.add("tabulator-header-filter"),_typeof(e.definition.headerFilter)){case"string":h.table.modules.edit.editors[e.definition.headerFilter]?(s=h.table.modules.edit.editors[e.definition.headerFilter],"tick"!==e.definition.headerFilter&&"tickCross"!==e.definition.headerFilter||e.definition.headerFilterEmptyCheck||(e.modules.filter.emptyFunc=function(e){return!0!==e&&!1!==e})):console.warn("Filter Error - Cannot build header filter, No such editor found: ",e.definition.editor);break;case"function":s=e.definition.headerFilter;break;case"boolean":e.modules.edit&&e.modules.edit.editor?s=e.modules.edit.editor:e.definition.formatter&&h.table.modules.edit.editors[e.definition.formatter]?(s=h.table.modules.edit.editors[e.definition.formatter],"tick"!==e.definition.formatter&&"tickCross"!==e.definition.formatter||e.definition.headerFilterEmptyCheck||(e.modules.filter.emptyFunc=function(e){return!0!==e&&!1!==e})):s=h.table.modules.edit.editors.input}if(s){if(a={getValue:function(){return void 0!==t?t:""},getField:function(){return e.definition.field},getElement:function(){return n},getColumn:function(){return e.getComponent()},getRow:function(){return{normalizeHeight:function(){}}}},u=e.definition.headerFilterParams||{},u="function"==typeof u?u.call(h.table):u,!(r=s.call(this.table.modules.edit,a,function(){},p,i,u)))return void console.warn("Filter Error - Cannot add filter to "+m+" column, editor returned a value of false");if(!(r instanceof Node))return void console.warn("Filter Error - Cannot add filter to "+m+" column, editor should return an instance of Node, the editor returned:",r);m?h.table.modules.localize.bind("headerFilters|columns|"+e.definition.field,function(e){r.setAttribute("placeholder",void 0!==e&&e?e:h.table.modules.localize.getText("headerFilters|default"))}):h.table.modules.localize.bind("headerFilters|default",function(e){r.setAttribute("placeholder",void 0!==h.column.definition.headerFilterPlaceholder&&h.column.definition.headerFilterPlaceholder?h.column.definition.headerFilterPlaceholder:e)}),r.addEventListener("click",function(e){e.stopPropagation(),r.focus()}),r.addEventListener("focus",function(e){var t=d.table.columnManager.element.scrollLeft;t!==d.table.rowManager.element.scrollLeft&&(d.table.rowManager.scrollHorizontal(t),d.table.columnManager.scrollHorizontal(t))}),l=!1,c=function(e){l&&clearTimeout(l),l=setTimeout(function(){p(r.value)},h.table.options.headerFilterLiveFilterDelay)},e.modules.filter.headerElement=r,e.modules.filter.attrType=r.hasAttribute("type")?r.getAttribute("type").toLowerCase():"",e.modules.filter.tagType=r.tagName.toLowerCase(),!1!==e.definition.headerFilterLiveFilter&&("autocomplete"!==e.definition.headerFilter&&"tickCross"!==e.definition.headerFilter&&("autocomplete"!==e.definition.editor&&"tickCross"!==e.definition.editor||!0!==e.definition.headerFilter)&&(r.addEventListener("keyup",c),r.addEventListener("search",c),"number"==e.modules.filter.attrType&&r.addEventListener("change",function(e){p(r.value)}),"text"==e.modules.filter.attrType&&"ie"!==this.table.browser&&r.setAttribute("type","search")),"input"!=e.modules.filter.tagType&&"select"!=e.modules.filter.tagType&&"textarea"!=e.modules.filter.tagType||r.addEventListener("mousedown",function(e){e.stopPropagation()})),n.appendChild(r),e.contentElement.appendChild(n),o||h.headerFilterColumns.push(e)}}else console.warn("Filter Error - Cannot add header filter, column has no field set:",e.definition.title)},M.prototype.hideHeaderFilterElements=function(){this.headerFilterColumns.forEach(function(e){e.modules.filter&&e.modules.filter.headerElement&&(e.modules.filter.headerElement.style.display="none")})},M.prototype.showHeaderFilterElements=function(){this.headerFilterColumns.forEach(function(e){e.modules.filter&&e.modules.filter.headerElement&&(e.modules.filter.headerElement.style.display="")})},M.prototype.setHeaderFilterFocus=function(e){e.modules.filter&&e.modules.filter.headerElement?e.modules.filter.headerElement.focus():console.warn("Column Filter Focus Error - No header filter set on column:",e.getField())},M.prototype.getHeaderFilterValue=function(e){if(e.modules.filter&&e.modules.filter.headerElement)return e.modules.filter.headerElement.value;console.warn("Column Filter Error - No header filter set on column:",e.getField())},M.prototype.setHeaderFilterValue=function(e,t){e&&(e.modules.filter&&e.modules.filter.headerElement?(this.generateHeaderFilterElement(e,t,!0),e.modules.filter.success(t)):console.warn("Column Filter Error - No header filter set on column:",e.getField()))},M.prototype.reloadHeaderFilter=function(e){e&&(e.modules.filter&&e.modules.filter.headerElement?this.generateHeaderFilterElement(e,e.modules.filter.value,!0):console.warn("Column Filter Error - No header filter set on column:",e.getField()))},M.prototype.hasChanged=function(){var e=this.changed;return this.changed=!1,e},M.prototype.setFilter=function(e,t,o,i){var n=this;n.filterList=[],Array.isArray(e)||(e=[{field:e,type:t,value:o,params:i}]),n.addFilter(e)},M.prototype.addFilter=function(e,t,o,i){var n=this;Array.isArray(e)||(e=[{field:e,type:t,value:o,params:i}]),e.forEach(function(e){(e=n.findFilter(e))&&(n.filterList.push(e),n.changed=!0)}),this.table.options.persistence&&this.table.modExists("persistence",!0)&&this.table.modules.persistence.config.filter&&this.table.modules.persistence.save("filter")},M.prototype.findFilter=function(e){var t,o=this;if(Array.isArray(e))return this.findSubFilters(e);var i=!1;return"function"==typeof e.field?i=function(t){return e.field(t,e.type||{})}:o.filters[e.type]?(t=o.table.columnManager.getColumnByField(e.field),i=t?function(i){return o.filters[e.type](e.value,t.getFieldValue(i),i,e.params||{})}:function(t){return o.filters[e.type](e.value,t[e.field],t,e.params||{})}):console.warn("Filter Error - No such filter type found, ignoring: ",e.type),e.func=i,!!e.func&&e},M.prototype.findSubFilters=function(e){var t=this,o=[];return e.forEach(function(e){(e=t.findFilter(e))&&o.push(e)}),!!o.length&&o},M.prototype.getFilters=function(e,t){var o=[];return e&&(o=this.getHeaderFilters()),t&&o.forEach(function(e){"function"==typeof e.type&&(e.type="function")}),o=o.concat(this.filtersToArray(this.filterList,t))},M.prototype.filtersToArray=function(e,t){var o=this,i=[];return e.forEach(function(e){var n;Array.isArray(e)?i.push(o.filtersToArray(e,t)):(n={field:e.field,type:e.type,value:e.value},t&&"function"==typeof n.type&&(n.type="function"),i.push(n))}),i},M.prototype.getHeaderFilters=function(){var e=[];for(var t in this.headerFilters)e.push({field:t,type:this.headerFilters[t].type,value:this.headerFilters[t].value});return e},M.prototype.removeFilter=function(e,t,o){var i=this;Array.isArray(e)||(e=[{field:e,type:t,value:o}]),e.forEach(function(e){var t=-1;t="object"==_typeof(e.field)?i.filterList.findIndex(function(t){return e===t}):i.filterList.findIndex(function(t){return e.field===t.field&&e.type===t.type&&e.value===t.value}),t>-1?(i.filterList.splice(t,1),i.changed=!0):console.warn("Filter Error - No matching filter type found, ignoring: ",e.type)}),this.table.options.persistence&&this.table.modExists("persistence",!0)&&this.table.modules.persistence.config.filter&&this.table.modules.persistence.save("filter")},M.prototype.clearFilter=function(e){this.filterList=[],e&&this.clearHeaderFilter(),this.changed=!0,this.table.options.persistence&&this.table.modExists("persistence",!0)&&this.table.modules.persistence.config.filter&&this.table.modules.persistence.save("filter")},M.prototype.clearHeaderFilter=function(){var e=this;this.headerFilters={},e.prevHeaderFilterChangeCheck="{}",this.headerFilterColumns.forEach(function(t){t.modules.filter.value=null,t.modules.filter.prevSuccess=void 0,e.reloadHeaderFilter(t)}),this.changed=!0},M.prototype.search=function(e,t,o,i){var n=this,s=[],r=[];return Array.isArray(t)||(t=[{field:t,type:o,value:i}]),t.forEach(function(e){(e=n.findFilter(e))&&r.push(e)}),this.table.rowManager.rows.forEach(function(t){var o=!0;r.forEach(function(e){n.filterRecurse(e,t.getData())||(o=!1)}),o&&s.push("data"===e?t.getData("data"):t.getComponent())}),s},M.prototype.filter=function(e,t){var o=this,i=[],n=[];return o.table.options.dataFiltering&&o.table.options.dataFiltering.call(o.table,o.getFilters()),o.table.options.ajaxFiltering||!o.filterList.length&&!Object.keys(o.headerFilters).length?i=e.slice(0):e.forEach(function(e){o.filterRow(e)&&i.push(e)}),o.table.options.dataFiltered&&(i.forEach(function(e){n.push(e.getComponent())}),o.table.options.dataFiltered.call(o.table,o.getFilters(),n)),i},M.prototype.filterRow=function(e,t){var o=this,i=!0,n=e.getData();o.filterList.forEach(function(e){o.filterRecurse(e,n)||(i=!1)});for(var s in o.headerFilters)o.headerFilters[s].func(n)||(i=!1);return i},M.prototype.filterRecurse=function(e,t){var o=this,i=!1;return Array.isArray(e)?e.forEach(function(e){o.filterRecurse(e,t)&&(i=!0)}):i=e.func(t),i},M.prototype.filters={"=":function(e,t,o,i){return t==e},"<":function(e,t,o,i){return t<e},"<=":function(e,t,o,i){return t<=e},">":function(e,t,o,i){return t>e},">=":function(e,t,o,i){return t>=e},"!=":function(e,t,o,i){return t!=e},regex:function(e,t,o,i){return"string"==typeof e&&(e=new RegExp(e)),e.test(t)},like:function(e,t,o,i){return null===e||void 0===e?t===e:void 0!==t&&null!==t&&String(t).toLowerCase().indexOf(e.toLowerCase())>-1},keywords:function(e,t,o,i){var n=e.toLowerCase().split(void 0===i.separator?" ":i.separator),s=String(null===t||void 0===t?"":t).toLowerCase(),r=[];return n.forEach(function(e){s.includes(e)&&r.push(!0)}),i.matchAll?r.length===n.length:!!r.length},starts:function(e,t,o,i){return null===e||void 0===e?t===e:void 0!==t&&null!==t&&String(t).toLowerCase().startsWith(e.toLowerCase())},ends:function(e,t,o,i){return null===e||void 0===e?t===e:void 0!==t&&null!==t&&String(t).toLowerCase().endsWith(e.toLowerCase())},in:function(e,t,o,i){return Array.isArray(e)?e.indexOf(t)>-1:(console.warn("Filter Error - filter value is not an array:",e),!1)}},d.prototype.registerModule("filter",M);var L=function(e){this.table=e};L.prototype.initializeColumn=function(e){e.modules.format=this.lookupFormatter(e,""),void 0!==e.definition.formatterPrint&&(e.modules.format.print=this.lookupFormatter(e,"Print")),void 0!==e.definition.formatterClipboard&&(e.modules.format.clipboard=this.lookupFormatter(e,"Clipboard")),void 0!==e.definition.formatterHtmlOutput&&(e.modules.format.htmlOutput=this.lookupFormatter(e,"HtmlOutput"))},L.prototype.lookupFormatter=function(e,t){var o={params:e.definition["formatter"+t+"Params"]||{}},i=e.definition["formatter"+t];switch(void 0===i?"undefined":_typeof(i)){case"string":"tick"===i&&(i="tickCross",void 0===o.params.crossElement&&(o.params.crossElement=!1),console.warn("DEPRECATION WARNING - the tick formatter has been deprecated, please use the tickCross formatter with the crossElement param set to false")),this.formatters[i]?o.formatter=this.formatters[i]:(console.warn("Formatter Error - No such formatter found: ",i),o.formatter=this.formatters.plaintext);break;case"function":o.formatter=i;break;default:o.formatter=this.formatters.plaintext}return o},L.prototype.cellRendered=function(e){e.modules.format&&e.modules.format.renderedCallback&&e.modules.format.renderedCallback()},L.prototype.formatValue=function(e){function t(t){e.modules.format||(e.modules.format={}),e.modules.format.renderedCallback=t}var o=e.getComponent(),i="function"==typeof e.column.modules.format.params?e.column.modules.format.params(o):e.column.modules.format.params;return e.column.modules.format.formatter.call(this,o,i,t)},L.prototype.formatExportValue=function(e,t){var o,i=e.column.modules.format[t];if(i){var n=function(t){e.modules.format||(e.modules.format={}),e.modules.format.renderedCallback=t};return o="function"==typeof i.params?i.params(component):i.params,i.formatter.call(this,e.getComponent(),o,n)}return this.formatValue(e)},L.prototype.sanitizeHTML=function(e){if(e){var t={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;","/":"&#x2F;","`":"&#x60;","=":"&#x3D;"};return String(e).replace(/[&<>"'`=\/]/g,function(e){return t[e]})}return e},L.prototype.emptyToSpace=function(e){return null===e||void 0===e||""===e?"&nbsp;":e},L.prototype.getFormatter=function(e){var e;switch(void 0===e?"undefined":_typeof(e)){case"string":this.formatters[e]?e=this.formatters[e]:(console.warn("Formatter Error - No such formatter found: ",e),e=this.formatters.plaintext);break;case"function":e=e;break;default:e=this.formatters.plaintext}return e},L.prototype.formatters={plaintext:function(e,t,o){return this.emptyToSpace(this.sanitizeHTML(e.getValue()))},html:function(e,t,o){return e.getValue()},textarea:function(e,t,o){return e.getElement().style.whiteSpace="pre-wrap",this.emptyToSpace(this.sanitizeHTML(e.getValue()))},money:function(e,t,o){var i,n,s,r,a=parseFloat(e.getValue()),l=t.decimal||".",c=t.thousand||",",u=t.symbol||"",d=!!t.symbolAfter,h=void 0!==t.precision?t.precision:2;if(isNaN(a))return this.emptyToSpace(this.sanitizeHTML(e.getValue()));for(i=!1!==h?a.toFixed(h):a,i=String(i).split("."),n=i[0],s=i.length>1?l+i[1]:"",r=/(\d+)(\d{3})/;r.test(n);)n=n.replace(r,"$1"+c+"$2");return d?n+s+u:u+n+s},link:function(e,t,o){var i,n=e.getValue(),s=t.urlPrefix||"",r=t.download,a=n,l=document.createElement("a");if(t.labelField&&(i=e.getData(),a=i[t.labelField]),t.label)switch(_typeof(t.label)){case"string":a=t.label;break;case"function":a=t.label(e)}if(a){if(t.urlField&&(i=e.getData(),n=i[t.urlField]),t.url)switch(_typeof(t.url)){case"string":n=t.url;break;case"function":n=t.url(e)}return l.setAttribute("href",s+n),t.target&&l.setAttribute("target",t.target),t.download&&(r="function"==typeof r?r(e):!0===r?"":r,l.setAttribute("download",r)),l.innerHTML=this.emptyToSpace(this.sanitizeHTML(a)),l}return"&nbsp;"},image:function(e,t,o){var i=document.createElement("img");switch(i.setAttribute("src",e.getValue()),_typeof(t.height)){case"number":i.style.height=t.height+"px";break;case"string":i.style.height=t.height}switch(_typeof(t.width)){case"number":i.style.width=t.width+"px";break;case"string":i.style.width=t.width}return i.addEventListener("load",function(){e.getRow().normalizeHeight()}),i},tickCross:function(e,t,o){var i=e.getValue(),n=e.getElement(),s=t.allowEmpty,r=t.allowTruthy,a=void 0!==t.tickElement?t.tickElement:'<svg enable-background="new 0 0 24 24" height="14" width="14" viewBox="0 0 24 24" xml:space="preserve" ><path fill="#2DC214" clip-rule="evenodd" d="M21.652,3.211c-0.293-0.295-0.77-0.295-1.061,0L9.41,14.34  c-0.293,0.297-0.771,0.297-1.062,0L3.449,9.351C3.304,9.203,3.114,9.13,2.923,9.129C2.73,9.128,2.534,9.201,2.387,9.351  l-2.165,1.946C0.078,11.445,0,11.63,0,11.823c0,0.194,0.078,0.397,0.223,0.544l4.94,5.184c0.292,0.296,0.771,0.776,1.062,1.07  l2.124,2.141c0.292,0.293,0.769,0.293,1.062,0l14.366-14.34c0.293-0.294,0.293-0.777,0-1.071L21.652,3.211z" fill-rule="evenodd"/></svg>',l=void 0!==t.crossElement?t.crossElement:'<svg enable-background="new 0 0 24 24" height="14" width="14"  viewBox="0 0 24 24" xml:space="preserve" ><path fill="#CE1515" d="M22.245,4.015c0.313,0.313,0.313,0.826,0,1.139l-6.276,6.27c-0.313,0.312-0.313,0.826,0,1.14l6.273,6.272  c0.313,0.313,0.313,0.826,0,1.14l-2.285,2.277c-0.314,0.312-0.828,0.312-1.142,0l-6.271-6.271c-0.313-0.313-0.828-0.313-1.141,0  l-6.276,6.267c-0.313,0.313-0.828,0.313-1.141,0l-2.282-2.28c-0.313-0.313-0.313-0.826,0-1.14l6.278-6.269  c0.313-0.312,0.313-0.826,0-1.14L1.709,5.147c-0.314-0.313-0.314-0.827,0-1.14l2.284-2.278C4.308,1.417,4.821,1.417,5.135,1.73  L11.405,8c0.314,0.314,0.828,0.314,1.141,0.001l6.276-6.267c0.312-0.312,0.826-0.312,1.141,0L22.245,4.015z"/></svg>';return r&&i||!0===i||"true"===i||"True"===i||1===i||"1"===i?(n.setAttribute("aria-checked",!0),a||""):!s||"null"!==i&&""!==i&&null!==i&&void 0!==i?(n.setAttribute("aria-checked",!1),l||""):(n.setAttribute("aria-checked","mixed"),"")},datetime:function(e,t,o){var i=t.inputFormat||"YYYY-MM-DD hh:mm:ss",n=t.outputFormat||"DD/MM/YYYY hh:mm:ss",s=void 0!==t.invalidPlaceholder?t.invalidPlaceholder:"",r=e.getValue(),a=moment(r,i);return a.isValid()?t.timezone?a.tz(t.timezone).format(n):a.format(n):!0===s?r:"function"==typeof s?s(r):s},datetimediff:function(e,t,o){
+var i=t.inputFormat||"YYYY-MM-DD hh:mm:ss",n=void 0!==t.invalidPlaceholder?t.invalidPlaceholder:"",s=void 0!==t.suffix&&t.suffix,r=void 0!==t.unit?t.unit:void 0,a=void 0!==t.humanize&&t.humanize,l=void 0!==t.date?t.date:moment(),c=e.getValue(),u=moment(c,i);return u.isValid()?a?moment.duration(u.diff(l)).humanize(s):u.diff(l,r)+(s?" "+s:""):!0===n?c:"function"==typeof n?n(c):n},lookup:function(e,t,o){var i=e.getValue();return void 0===t[i]?(console.warn("Missing display value for "+i),i):t[i]},star:function(e,t,o){var i=e.getValue(),n=e.getElement(),s=t&&t.stars?t.stars:5,r=document.createElement("span"),a=document.createElementNS("http://www.w3.org/2000/svg","svg");r.style.verticalAlign="middle",a.setAttribute("width","14"),a.setAttribute("height","14"),a.setAttribute("viewBox","0 0 512 512"),a.setAttribute("xml:space","preserve"),a.style.padding="0 1px",i=i&&!isNaN(i)?parseInt(i):0,i=Math.max(0,Math.min(i,s));for(var l=1;l<=s;l++){var c=a.cloneNode(!0);c.innerHTML=l<=i?'<polygon fill="#FFEA00" stroke="#C1AB60" stroke-width="37.6152" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" points="259.216,29.942 330.27,173.919 489.16,197.007 374.185,309.08 401.33,467.31 259.216,392.612 117.104,467.31 144.25,309.08 29.274,197.007 188.165,173.919 "/>':'<polygon fill="#D2D2D2" stroke="#686868" stroke-width="37.6152" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" points="259.216,29.942 330.27,173.919 489.16,197.007 374.185,309.08 401.33,467.31 259.216,392.612 117.104,467.31 144.25,309.08 29.274,197.007 188.165,173.919 "/>',r.appendChild(c)}return n.style.whiteSpace="nowrap",n.style.overflow="hidden",n.style.textOverflow="ellipsis",n.setAttribute("aria-label",i),r},traffic:function(e,t,o){var i,n,s=this.sanitizeHTML(e.getValue())||0,r=document.createElement("span"),a=t&&t.max?t.max:100,l=t&&t.min?t.min:0,c=t&&void 0!==t.color?t.color:["red","orange","green"],u="#666666";if(!isNaN(s)&&void 0!==e.getValue()){switch(r.classList.add("tabulator-traffic-light"),n=parseFloat(s)<=a?parseFloat(s):a,n=parseFloat(n)>=l?parseFloat(n):l,i=(a-l)/100,n=Math.round((n-l)/i),void 0===c?"undefined":_typeof(c)){case"string":u=c;break;case"function":u=c(s);break;case"object":if(Array.isArray(c)){var d=100/c.length,h=Math.floor(n/d);h=Math.min(h,c.length-1),h=Math.max(h,0),u=c[h];break}}return r.style.backgroundColor=u,r}},progress:function(e,t,o){var i,n,s,r,a,c=this.sanitizeHTML(e.getValue())||0,u=e.getElement(),d=t&&t.max?t.max:100,h=t&&t.min?t.min:0,p=t&&t.legendAlign?t.legendAlign:"center";switch(n=parseFloat(c)<=d?parseFloat(c):d,n=parseFloat(n)>=h?parseFloat(n):h,i=(d-h)/100,n=Math.round((n-h)/i),_typeof(t.color)){case"string":s=t.color;break;case"function":s=t.color(c);break;case"object":if(Array.isArray(t.color)){var m=100/t.color.length,f=Math.floor(n/m);f=Math.min(f,t.color.length-1),f=Math.max(f,0),s=t.color[f];break}default:s="#2DC214"}switch(_typeof(t.legend)){case"string":r=t.legend;break;case"function":r=t.legend(c);break;case"boolean":r=c;break;default:r=!1}switch(_typeof(t.legendColor)){case"string":a=t.legendColor;break;case"function":a=t.legendColor(c);break;case"object":if(Array.isArray(t.legendColor)){var m=100/t.legendColor.length,f=Math.floor(n/m);f=Math.min(f,t.legendColor.length-1),f=Math.max(f,0),a=t.legendColor[f]}break;default:a="#000"}u.style.minWidth="30px",u.style.position="relative",u.setAttribute("aria-label",n);var g=document.createElement("div");if(g.style.display="inline-block",g.style.position="relative",g.style.width=n+"%",g.style.backgroundColor=s,g.style.height="100%",g.setAttribute("data-max",d),g.setAttribute("data-min",h),r){var b=document.createElement("div");b.style.position="absolute",b.style.top="4px",b.style.left=0,b.style.textAlign=p,b.style.width="100%",b.style.color=a,b.innerHTML=r}return o(function(){if(!(e instanceof l)){var t=document.createElement("div");t.style.position="absolute",t.style.top="4px",t.style.bottom="4px",t.style.left="4px",t.style.right="4px",u.appendChild(t),u=t}u.appendChild(g),r&&u.appendChild(b)}),""},color:function(e,t,o){return e.getElement().style.backgroundColor=this.sanitizeHTML(e.getValue()),""},buttonTick:function(e,t,o){return'<svg enable-background="new 0 0 24 24" height="14" width="14" viewBox="0 0 24 24" xml:space="preserve" ><path fill="#2DC214" clip-rule="evenodd" d="M21.652,3.211c-0.293-0.295-0.77-0.295-1.061,0L9.41,14.34  c-0.293,0.297-0.771,0.297-1.062,0L3.449,9.351C3.304,9.203,3.114,9.13,2.923,9.129C2.73,9.128,2.534,9.201,2.387,9.351  l-2.165,1.946C0.078,11.445,0,11.63,0,11.823c0,0.194,0.078,0.397,0.223,0.544l4.94,5.184c0.292,0.296,0.771,0.776,1.062,1.07  l2.124,2.141c0.292,0.293,0.769,0.293,1.062,0l14.366-14.34c0.293-0.294,0.293-0.777,0-1.071L21.652,3.211z" fill-rule="evenodd"/></svg>'},buttonCross:function(e,t,o){return'<svg enable-background="new 0 0 24 24" height="14" width="14" viewBox="0 0 24 24" xml:space="preserve" ><path fill="#CE1515" d="M22.245,4.015c0.313,0.313,0.313,0.826,0,1.139l-6.276,6.27c-0.313,0.312-0.313,0.826,0,1.14l6.273,6.272  c0.313,0.313,0.313,0.826,0,1.14l-2.285,2.277c-0.314,0.312-0.828,0.312-1.142,0l-6.271-6.271c-0.313-0.313-0.828-0.313-1.141,0  l-6.276,6.267c-0.313,0.313-0.828,0.313-1.141,0l-2.282-2.28c-0.313-0.313-0.313-0.826,0-1.14l6.278-6.269  c0.313-0.312,0.313-0.826,0-1.14L1.709,5.147c-0.314-0.313-0.314-0.827,0-1.14l2.284-2.278C4.308,1.417,4.821,1.417,5.135,1.73  L11.405,8c0.314,0.314,0.828,0.314,1.141,0.001l6.276-6.267c0.312-0.312,0.826-0.312,1.141,0L22.245,4.015z"/></svg>'},rownum:function(e,t,o){return this.table.rowManager.activeRows.indexOf(e.getRow()._getSelf())+1},handle:function(e,t,o){return e.getElement().classList.add("tabulator-row-handle"),"<div class='tabulator-row-handle-box'><div class='tabulator-row-handle-bar'></div><div class='tabulator-row-handle-bar'></div><div class='tabulator-row-handle-bar'></div></div>"},responsiveCollapse:function(e,t,o){function i(e){var t=s.element;s.open=e,t&&(s.open?(n.classList.add("open"),t.style.display=""):(n.classList.remove("open"),t.style.display="none"))}var n=document.createElement("div"),s=e.getRow()._row.modules.responsiveLayout;return n.classList.add("tabulator-responsive-collapse-toggle"),n.innerHTML="<span class='tabulator-responsive-collapse-toggle-open'>+</span><span class='tabulator-responsive-collapse-toggle-close'>-</span>",e.getElement().classList.add("tabulator-row-handle"),n.addEventListener("click",function(e){e.stopImmediatePropagation(),i(!s.open)}),i(s.open),n},rowSelection:function(e){var t=this,o=document.createElement("input");if(o.type="checkbox",this.table.modExists("selectRow",!0))if(o.addEventListener("click",function(e){e.stopPropagation()}),"function"==typeof e.getRow){var i=e.getRow();o.addEventListener("change",function(e){i.toggleSelect()}),o.checked=i.isSelected(),this.table.modules.selectRow.registerRowSelectCheckbox(i,o)}else o.addEventListener("change",function(e){t.table.modules.selectRow.selectedRows.length?t.table.deselectRow():t.table.selectRow()}),this.table.modules.selectRow.registerHeaderSelectCheckbox(o);return o}},d.prototype.registerModule("format",L);var T=function(e){this.table=e,this.leftColumns=[],this.rightColumns=[],this.leftMargin=0,this.rightMargin=0,this.rightPadding=0,this.initializationMode="left",this.active=!1,this.scrollEndTimer=!1};T.prototype.reset=function(){this.initializationMode="left",this.leftColumns=[],this.rightColumns=[],this.leftMargin=0,this.rightMargin=0,this.rightMargin=0,this.active=!1,this.table.columnManager.headersElement.style.marginLeft=0,this.table.columnManager.element.style.paddingRight=0},T.prototype.initializeColumn=function(e){var t={margin:0,edge:!1};e.isGroup||(this.frozenCheck(e)?(t.position=this.initializationMode,"left"==this.initializationMode?this.leftColumns.push(e):this.rightColumns.unshift(e),this.active=!0,e.modules.frozen=t):this.initializationMode="right")},T.prototype.frozenCheck=function(e){return e.parent.isGroup&&e.definition.frozen&&console.warn("Frozen Column Error - Parent column group must be frozen, not individual columns or sub column groups"),e.parent.isGroup?this.frozenCheck(e.parent):e.definition.frozen},T.prototype.scrollHorizontal=function(){var e,t=this;this.active&&(clearTimeout(this.scrollEndTimer),this.scrollEndTimer=setTimeout(function(){t.layout()},100),e=this.table.rowManager.getVisibleRows(),this.calcMargins(),this.layoutColumnPosition(),this.layoutCalcRows(),e.forEach(function(e){"row"===e.type&&t.layoutRow(e)}),this.table.rowManager.tableElement.style.marginRight=this.rightMargin)},T.prototype.calcMargins=function(){this.leftMargin=this._calcSpace(this.leftColumns,this.leftColumns.length)+"px",this.table.columnManager.headersElement.style.marginLeft=this.leftMargin,this.rightMargin=this._calcSpace(this.rightColumns,this.rightColumns.length)+"px",this.table.columnManager.element.style.paddingRight=this.rightMargin,this.rightPadding=this.table.rowManager.element.clientWidth+this.table.columnManager.scrollLeft},T.prototype.layoutCalcRows=function(){this.table.modExists("columnCalcs")&&(this.table.modules.columnCalcs.topInitialized&&this.table.modules.columnCalcs.topRow&&this.layoutRow(this.table.modules.columnCalcs.topRow),this.table.modules.columnCalcs.botInitialized&&this.table.modules.columnCalcs.botRow&&this.layoutRow(this.table.modules.columnCalcs.botRow))},T.prototype.layoutColumnPosition=function(e){var t=this,o=[];this.leftColumns.forEach(function(i,n){if(i.modules.frozen.margin=t._calcSpace(t.leftColumns,n)+t.table.columnManager.scrollLeft+"px",n==t.leftColumns.length-1?i.modules.frozen.edge=!0:i.modules.frozen.edge=!1,i.parent.isGroup){var s=t.getColGroupParentElement(i);o.includes(s)||(t.layoutElement(s,i),o.push(s)),i.modules.frozen.edge&&s.classList.add("tabulator-frozen-"+i.modules.frozen.position)}else t.layoutElement(i.getElement(),i);e&&i.cells.forEach(function(e){t.layoutElement(e.getElement(),i)})}),this.rightColumns.forEach(function(o,i){o.modules.frozen.margin=t.rightPadding-t._calcSpace(t.rightColumns,i+1)+"px",i==t.rightColumns.length-1?o.modules.frozen.edge=!0:o.modules.frozen.edge=!1,o.parent.isGroup?t.layoutElement(t.getColGroupParentElement(o),o):t.layoutElement(o.getElement(),o),e&&o.cells.forEach(function(e){t.layoutElement(e.getElement(),o)})})},T.prototype.getColGroupParentElement=function(e){return e.parent.isGroup?this.getColGroupParentElement(e.parent):e.getElement()},T.prototype.layout=function(){var e=this;e.active&&(this.calcMargins(),e.table.rowManager.getDisplayRows().forEach(function(t){"row"===t.type&&e.layoutRow(t)}),this.layoutCalcRows(),this.layoutColumnPosition(!0),this.table.rowManager.tableElement.style.marginRight=this.rightMargin)},T.prototype.layoutRow=function(e){var t=this;e.getElement().style.paddingLeft=this.leftMargin,this.leftColumns.forEach(function(o){var i=e.getCell(o);i&&t.layoutElement(i.getElement(),o)}),this.rightColumns.forEach(function(o){var i=e.getCell(o);i&&t.layoutElement(i.getElement(),o)})},T.prototype.layoutElement=function(e,t){t.modules.frozen&&(e.style.position="absolute",e.style.left=t.modules.frozen.margin,e.classList.add("tabulator-frozen"),t.modules.frozen.edge&&e.classList.add("tabulator-frozen-"+t.modules.frozen.position))},T.prototype._calcSpace=function(e,t){for(var o=0,i=0;i<t;i++)e[i].visible&&(o+=e[i].getWidth());return o},d.prototype.registerModule("frozenColumns",T);var D=function(e){this.table=e,this.topElement=document.createElement("div"),this.rows=[],this.displayIndex=0};D.prototype.initialize=function(){this.rows=[],this.topElement.classList.add("tabulator-frozen-rows-holder"),this.table.columnManager.getElement().insertBefore(this.topElement,this.table.columnManager.headersElement.nextSibling)},D.prototype.setDisplayIndex=function(e){this.displayIndex=e},D.prototype.getDisplayIndex=function(){return this.displayIndex},D.prototype.isFrozen=function(){return!!this.rows.length},D.prototype.getRows=function(e){var t=e.slice(0);return this.rows.forEach(function(e){var o=t.indexOf(e);o>-1&&t.splice(o,1)}),t},D.prototype.freezeRow=function(e){e.modules.frozen?console.warn("Freeze Error - Row is already frozen"):(e.modules.frozen=!0,this.topElement.appendChild(e.getElement()),e.initialize(),e.normalizeHeight(),this.table.rowManager.adjustTableSize(),this.rows.push(e),this.table.rowManager.refreshActiveData("display"),this.styleRows())},D.prototype.unfreezeRow=function(e){var t=this.rows.indexOf(e);if(e.modules.frozen){e.modules.frozen=!1;var o=e.getElement();o.parentNode.removeChild(o),this.table.rowManager.adjustTableSize(),this.rows.splice(t,1),this.table.rowManager.refreshActiveData("display"),this.rows.length&&this.styleRows()}else console.warn("Freeze Error - Row is already unfrozen")},D.prototype.styleRows=function(e){var t=this;this.rows.forEach(function(e,o){t.table.rowManager.styleRow(e,o)})},d.prototype.registerModule("frozenRows",D);var k=function(e){this._group=e,this.type="GroupComponent"};k.prototype.getKey=function(){return this._group.key},k.prototype.getField=function(){return this._group.field},k.prototype.getElement=function(){return this._group.element},k.prototype.getRows=function(){return this._group.getRows(!0)},k.prototype.getSubGroups=function(){return this._group.getSubGroups(!0)},k.prototype.getParentGroup=function(){return!!this._group.parent&&this._group.parent.getComponent()},k.prototype.getVisibility=function(){return console.warn("getVisibility function is deprecated, you should now use the isVisible function"),this._group.visible},k.prototype.isVisible=function(){return this._group.visible},k.prototype.show=function(){this._group.show()},k.prototype.hide=function(){this._group.hide()},k.prototype.toggle=function(){this._group.toggleVisibility()},k.prototype._getSelf=function(){return this._group},k.prototype.getTable=function(){return this._group.groupManager.table};var S=function(e,t,o,i,n,s,r){this.groupManager=e,this.parent=t,this.key=i,this.level=o,this.field=n,this.hasSubGroups=o<e.groupIDLookups.length-1,this.addRow=this.hasSubGroups?this._addRowToGroup:this._addRow,this.type="group",this.old=r,this.rows=[],this.groups=[],this.groupList=[],this.generator=s,this.elementContents=!1,this.height=0,this.outerHeight=0,this.initialized=!1,this.calcs={},this.initialized=!1,this.modules={},this.arrowElement=!1,this.visible=r?r.visible:void 0!==e.startOpen[o]?e.startOpen[o]:e.startOpen[0],this.component=null,this.createElements(),this.addBindings(),this.createValueGroups()};S.prototype.wipe=function(){this.groupList.length?this.groupList.forEach(function(e){e.wipe()}):(this.element=!1,this.arrowElement=!1,this.elementContents=!1)},S.prototype.createElements=function(){var e=document.createElement("div");e.classList.add("tabulator-arrow"),this.element=document.createElement("div"),this.element.classList.add("tabulator-row"),this.element.classList.add("tabulator-group"),this.element.classList.add("tabulator-group-level-"+this.level),this.element.setAttribute("role","rowgroup"),this.arrowElement=document.createElement("div"),this.arrowElement.classList.add("tabulator-group-toggle"),this.arrowElement.appendChild(e),!1!==this.groupManager.table.options.movableRows&&this.groupManager.table.modExists("moveRow")&&this.groupManager.table.modules.moveRow.initializeGroupHeader(this)},S.prototype.createValueGroups=function(){var e=this,t=this.level+1;this.groupManager.allowedValues&&this.groupManager.allowedValues[t]&&this.groupManager.allowedValues[t].forEach(function(o){e._createGroup(o,t)})},S.prototype.addBindings=function(){var e,t,o,i,n=this;n.groupManager.table.options.groupClick&&n.element.addEventListener("click",function(e){n.groupManager.table.options.groupClick.call(n.groupManager.table,e,n.getComponent())}),n.groupManager.table.options.groupDblClick&&n.element.addEventListener("dblclick",function(e){n.groupManager.table.options.groupDblClick.call(n.groupManager.table,e,n.getComponent())}),n.groupManager.table.options.groupContext&&n.element.addEventListener("contextmenu",function(e){n.groupManager.table.options.groupContext.call(n.groupManager.table,e,n.getComponent())}),n.groupManager.table.options.groupContextMenu&&n.groupManager.table.modExists("menu")&&n.groupManager.table.modules.menu.initializeGroup.call(n.groupManager.table.modules.menu,n),n.groupManager.table.options.groupTap&&(o=!1,n.element.addEventListener("touchstart",function(e){o=!0},{passive:!0}),n.element.addEventListener("touchend",function(e){o&&n.groupManager.table.options.groupTap(e,n.getComponent()),o=!1})),n.groupManager.table.options.groupDblTap&&(e=null,n.element.addEventListener("touchend",function(t){e?(clearTimeout(e),e=null,n.groupManager.table.options.groupDblTap(t,n.getComponent())):e=setTimeout(function(){clearTimeout(e),e=null},300)})),n.groupManager.table.options.groupTapHold&&(t=null,n.element.addEventListener("touchstart",function(e){clearTimeout(t),t=setTimeout(function(){clearTimeout(t),t=null,o=!1,n.groupManager.table.options.groupTapHold(e,n.getComponent())},1e3)},{passive:!0}),n.element.addEventListener("touchend",function(e){clearTimeout(t),t=null})),n.groupManager.table.options.groupToggleElement&&(i="arrow"==n.groupManager.table.options.groupToggleElement?n.arrowElement:n.element,i.addEventListener("click",function(e){e.stopPropagation(),e.stopImmediatePropagation(),n.toggleVisibility()}))},S.prototype._createGroup=function(e,t){var o=t+"_"+e,i=new S(this.groupManager,this,t,e,this.groupManager.groupIDLookups[t].field,this.groupManager.headerGenerator[t]||this.groupManager.headerGenerator[0],!!this.old&&this.old.groups[o]);this.groups[o]=i,this.groupList.push(i)},S.prototype._addRowToGroup=function(e){var t=this.level+1;if(this.hasSubGroups){var o=this.groupManager.groupIDLookups[t].func(e.getData()),i=t+"_"+o;this.groupManager.allowedValues&&this.groupManager.allowedValues[t]?this.groups[i]&&this.groups[i].addRow(e):(this.groups[i]||this._createGroup(o,t),this.groups[i].addRow(e))}},S.prototype._addRow=function(e){this.rows.push(e),e.modules.group=this},S.prototype.insertRow=function(e,t,o){var i=this.conformRowData({});e.updateData(i);var n=this.rows.indexOf(t);n>-1?o?this.rows.splice(n+1,0,e):this.rows.splice(n,0,e):o?this.rows.push(e):this.rows.unshift(e),e.modules.group=this,this.generateGroupHeaderContents(),this.groupManager.table.modExists("columnCalcs")&&"table"!=this.groupManager.table.options.columnCalcs&&this.groupManager.table.modules.columnCalcs.recalcGroup(this),this.groupManager.updateGroupRows(!0)},S.prototype.scrollHeader=function(e){this.arrowElement.style.marginLeft=e,this.groupList.forEach(function(t){t.scrollHeader(e)})},S.prototype.getRowIndex=function(e){},S.prototype.conformRowData=function(e){return this.field?e[this.field]=this.key:console.warn("Data Conforming Error - Cannot conform row data to match new group as groupBy is a function"),this.parent&&(e=this.parent.conformRowData(e)),e},S.prototype.removeRow=function(e){var t=this.rows.indexOf(e),o=e.getElement();t>-1&&this.rows.splice(t,1),this.groupManager.table.options.groupValues||this.rows.length?(o.parentNode&&o.parentNode.removeChild(o),this.generateGroupHeaderContents(),this.groupManager.table.modExists("columnCalcs")&&"table"!=this.groupManager.table.options.columnCalcs&&this.groupManager.table.modules.columnCalcs.recalcGroup(this)):(this.parent?this.parent.removeGroup(this):this.groupManager.removeGroup(this),this.groupManager.updateGroupRows(!0))},S.prototype.removeGroup=function(e){var t,o=e.level+"_"+e.key;this.groups[o]&&(delete this.groups[o],t=this.groupList.indexOf(e),t>-1&&this.groupList.splice(t,1),this.groupList.length||(this.parent?this.parent.removeGroup(this):this.groupManager.removeGroup(this)))},S.prototype.getHeadersAndRows=function(e){var t=[];return t.push(this),this._visSet(),this.visible?this.groupList.length?this.groupList.forEach(function(o){t=t.concat(o.getHeadersAndRows(e))}):(!e&&"table"!=this.groupManager.table.options.columnCalcs&&this.groupManager.table.modExists("columnCalcs")&&this.groupManager.table.modules.columnCalcs.hasTopCalcs()&&(this.calcs.top&&(this.calcs.top.detachElement(),this.calcs.top.deleteCells()),this.calcs.top=this.groupManager.table.modules.columnCalcs.generateTopRow(this.rows),t.push(this.calcs.top)),t=t.concat(this.rows),!e&&"table"!=this.groupManager.table.options.columnCalcs&&this.groupManager.table.modExists("columnCalcs")&&this.groupManager.table.modules.columnCalcs.hasBottomCalcs()&&(this.calcs.bottom&&(this.calcs.bottom.detachElement(),this.calcs.bottom.deleteCells()),this.calcs.bottom=this.groupManager.table.modules.columnCalcs.generateBottomRow(this.rows),t.push(this.calcs.bottom))):this.groupList.length||"table"==this.groupManager.table.options.columnCalcs||this.groupManager.table.modExists("columnCalcs")&&(!e&&this.groupManager.table.modules.columnCalcs.hasTopCalcs()&&(this.calcs.top&&(this.calcs.top.detachElement(),this.calcs.top.deleteCells()),this.groupManager.table.options.groupClosedShowCalcs&&(this.calcs.top=this.groupManager.table.modules.columnCalcs.generateTopRow(this.rows),t.push(this.calcs.top))),!e&&this.groupManager.table.modules.columnCalcs.hasBottomCalcs()&&(this.calcs.bottom&&(this.calcs.bottom.detachElement(),this.calcs.bottom.deleteCells()),this.groupManager.table.options.groupClosedShowCalcs&&(this.calcs.bottom=this.groupManager.table.modules.columnCalcs.generateBottomRow(this.rows),t.push(this.calcs.bottom)))),t},S.prototype.getData=function(e,t){var o=[];return this._visSet(),(!e||e&&this.visible)&&this.rows.forEach(function(e){o.push(e.getData(t||"data"))}),o},S.prototype.getRowCount=function(){var e=0;return this.groupList.length?this.groupList.forEach(function(t){e+=t.getRowCount()}):e=this.rows.length,e},S.prototype.toggleVisibility=function(){this.visible?this.hide():this.show()},S.prototype.hide=function(){this.visible=!1,"classic"!=this.groupManager.table.rowManager.getRenderMode()||this.groupManager.table.options.pagination?this.groupManager.updateGroupRows(!0):(this.element.classList.remove("tabulator-group-visible"),this.groupList.length?this.groupList.forEach(function(e){e.getHeadersAndRows().forEach(function(e){e.detachElement()})}):this.rows.forEach(function(e){var t=e.getElement();t.parentNode.removeChild(t)}),this.groupManager.table.rowManager.setDisplayRows(this.groupManager.updateGroupRows(),this.groupManager.getDisplayIndex()),this.groupManager.table.rowManager.checkClassicModeGroupHeaderWidth()),this.groupManager.table.options.groupVisibilityChanged.call(this.table,this.getComponent(),!1)},S.prototype.show=function(){var e=this;if(e.visible=!0,"classic"!=this.groupManager.table.rowManager.getRenderMode()||this.groupManager.table.options.pagination)this.groupManager.updateGroupRows(!0);else{this.element.classList.add("tabulator-group-visible");var t=e.getElement();this.groupList.length?this.groupList.forEach(function(e){e.getHeadersAndRows().forEach(function(e){var o=e.getElement();t.parentNode.insertBefore(o,t.nextSibling),e.initialize(),t=o})}):e.rows.forEach(function(e){var o=e.getElement();t.parentNode.insertBefore(o,t.nextSibling),e.initialize(),t=o}),this.groupManager.table.rowManager.setDisplayRows(this.groupManager.updateGroupRows(),this.groupManager.getDisplayIndex()),this.groupManager.table.rowManager.checkClassicModeGroupHeaderWidth()}this.groupManager.table.options.groupVisibilityChanged.call(this.table,this.getComponent(),!0)},S.prototype._visSet=function(){var e=[];"function"==typeof this.visible&&(this.rows.forEach(function(t){e.push(t.getData())}),this.visible=this.visible(this.key,this.getRowCount(),e,this.getComponent()))},S.prototype.getRowGroup=function(e){var t=!1;return this.groupList.length?this.groupList.forEach(function(o){var i=o.getRowGroup(e);i&&(t=i)}):this.rows.find(function(t){return t===e})&&(t=this),t},S.prototype.getSubGroups=function(e){var t=[];return this.groupList.forEach(function(o){t.push(e?o.getComponent():o)}),t},S.prototype.getRows=function(e){var t=[];return this.rows.forEach(function(o){t.push(e?o.getComponent():o)}),t},S.prototype.generateGroupHeaderContents=function(){var e=[];for(this.rows.forEach(function(t){e.push(t.getData())}),this.elementContents=this.generator(this.key,this.getRowCount(),e,this.getComponent());this.element.firstChild;)this.element.removeChild(this.element.firstChild);"string"==typeof this.elementContents?this.element.innerHTML=this.elementContents:this.element.appendChild(this.elementContents),this.element.insertBefore(this.arrowElement,this.element.firstChild)},S.prototype.getElement=function(){this.addBindingsd=!1,this._visSet(),this.visible?this.element.classList.add("tabulator-group-visible"):this.element.classList.remove("tabulator-group-visible");for(var e=0;e<this.element.childNodes.length;++e)this.element.childNodes[e].parentNode.removeChild(this.element.childNodes[e]);return this.generateGroupHeaderContents(),this.element},S.prototype.detachElement=function(){this.element&&this.element.parentNode&&this.element.parentNode.removeChild(this.element)},S.prototype.normalizeHeight=function(){this.setHeight(this.element.clientHeight)},S.prototype.initialize=function(e){this.initialized&&!e||(this.normalizeHeight(),this.initialized=!0)},S.prototype.reinitialize=function(){this.initialized=!1,this.height=0,d.prototype.helpers.elVisible(this.element)&&this.initialize(!0)},S.prototype.setHeight=function(e){this.height!=e&&(this.height=e,this.outerHeight=this.element.offsetHeight)},S.prototype.getHeight=function(){return this.outerHeight},S.prototype.getGroup=function(){return this},S.prototype.reinitializeHeight=function(){},S.prototype.calcHeight=function(){},S.prototype.setCellHeight=function(){},S.prototype.clearCellHeight=function(){},S.prototype.getComponent=function(){return this.component||(this.component=new k(this)),this.component};var H=function(e){this.table=e,this.groupIDLookups=!1,this.startOpen=[function(){return!1}],this.headerGenerator=[function(){return""}],this.groupList=[],this.allowedValues=!1,this.groups={},this.displayIndex=0};H.prototype.initialize=function(){var e=this,t=e.table.options.groupBy,o=e.table.options.groupStartOpen,i=e.table.options.groupHeader;if(this.allowedValues=e.table.options.groupValues,Array.isArray(t)&&Array.isArray(i)&&t.length>i.length&&console.warn("Error creating group headers, groupHeader array is shorter than groupBy array"),e.headerGenerator=[function(){return""}],this.startOpen=[function(){return!1}],e.table.modules.localize.bind("groups|item",function(t,o){e.headerGenerator[0]=function(e,i,n){return(void 0===e?"":e)+"<span>("+i+" "+(1===i?t:o.groups.items)+")</span>"}}),this.groupIDLookups=[],Array.isArray(t)||t)this.table.modExists("columnCalcs")&&"table"!=this.table.options.columnCalcs&&"both"!=this.table.options.columnCalcs&&this.table.modules.columnCalcs.removeCalcs();else if(this.table.modExists("columnCalcs")&&"group"!=this.table.options.columnCalcs){var n=this.table.columnManager.getRealColumns();n.forEach(function(t){t.definition.topCalc&&e.table.modules.columnCalcs.initializeTopRow(),t.definition.bottomCalc&&e.table.modules.columnCalcs.initializeBottomRow()})}Array.isArray(t)||(t=[t]),t.forEach(function(t,o){var i,n;"function"==typeof t?i=t:(n=e.table.columnManager.getColumnByField(t),i=n?function(e){return n.getFieldValue(e)}:function(e){return e[t]}),e.groupIDLookups.push({field:"function"!=typeof t&&t,func:i,values:!!e.allowedValues&&e.allowedValues[o]})}),o&&(Array.isArray(o)||(o=[o]),o.forEach(function(e){e="function"==typeof e?e:function(){return!0}}),e.startOpen=o),i&&(e.headerGenerator=Array.isArray(i)?i:[i]),this.initialized=!0},H.prototype.setDisplayIndex=function(e){this.displayIndex=e},H.prototype.getDisplayIndex=function(){return this.displayIndex},H.prototype.getRows=function(e){return this.groupIDLookups.length?(this.table.options.dataGrouping.call(this.table),this.generateGroups(e),this.table.options.dataGrouped&&this.table.options.dataGrouped.call(this.table,this.getGroups(!0)),this.updateGroupRows()):e.slice(0)},H.prototype.getGroups=function(e){var t=[];return this.groupList.forEach(function(o){t.push(e?o.getComponent():o)}),t},H.prototype.getChildGroups=function(e){var t=this,o=[];return e||(e=this),e.groupList.forEach(function(e){e.groupList.length?o=o.concat(t.getChildGroups(e)):o.push(e)}),o},H.prototype.wipe=function(){this.groupList.forEach(function(e){e.wipe()})},H.prototype.pullGroupListData=function(e){var t=this,o=[];return e.forEach(function(e){var i={};i.level=0,i.rowCount=0,i.headerContent="";var n=[];e.hasSubGroups?(n=t.pullGroupListData(e.groupList),i.level=e.level,i.rowCount=n.length-e.groupList.length,i.headerContent=e.generator(e.key,i.rowCount,e.rows,e),o.push(i),o=o.concat(n)):(i.level=e.level,i.headerContent=e.generator(e.key,e.rows.length,e.rows,e),i.rowCount=e.getRows().length,o.push(i),e.getRows().forEach(function(e){o.push(e.getData("data"))}))}),o},H.prototype.getGroupedData=function(){return this.pullGroupListData(this.groupList)},H.prototype.getRowGroup=function(e){var t=!1;return this.groupList.forEach(function(o){var i=o.getRowGroup(e);i&&(t=i)}),t},H.prototype.countGroups=function(){return this.groupList.length},H.prototype.generateGroups=function(e){var t=this,o=t.groups;t.groups={},t.groupList=[],this.allowedValues&&this.allowedValues[0]?(this.allowedValues[0].forEach(function(e){t.createGroup(e,0,o)}),e.forEach(function(e){t.assignRowToExistingGroup(e,o)})):e.forEach(function(e){t.assignRowToGroup(e,o)})},H.prototype.createGroup=function(e,t,o){var i,n=t+"_"+e;o=o||[],i=new S(this,!1,t,e,this.groupIDLookups[0].field,this.headerGenerator[0],o[n]),this.groups[n]=i,this.groupList.push(i)},H.prototype.assignRowToExistingGroup=function(e,t){var o=this.groupIDLookups[0].func(e.getData()),i="0_"+o;this.groups[i]&&this.groups[i].addRow(e)},H.prototype.assignRowToGroup=function(e,t){var o=this.groupIDLookups[0].func(e.getData()),i=!this.groups["0_"+o];return i&&this.createGroup(o,0,t),this.groups["0_"+o].addRow(e),!i},H.prototype.updateGroupRows=function(e){var t=this,o=[];if(t.groupList.forEach(function(e){o=o.concat(e.getHeadersAndRows())}),e){var i=t.table.rowManager.setDisplayRows(o,this.getDisplayIndex());!0!==i&&this.setDisplayIndex(i),t.table.rowManager.refreshActiveData("group",!0,!0)}return o},H.prototype.scrollHeaders=function(e){e+="px",this.groupList.forEach(function(t){t.scrollHeader(e)})},H.prototype.removeGroup=function(e){var t,o=e.level+"_"+e.key;this.groups[o]&&(delete this.groups[o],(t=this.groupList.indexOf(e))>-1&&this.groupList.splice(t,1))},d.prototype.registerModule("groupRows",H);var z=function(e){this.table=e,this.history=[],this.index=-1};z.prototype.clear=function(){this.history=[],this.index=-1},z.prototype.action=function(e,t,o){this.history=this.history.slice(0,this.index+1),this.history.push({type:e,component:t,data:o}),this.index++},z.prototype.getHistoryUndoSize=function(){return this.index+1},z.prototype.getHistoryRedoSize=function(){return this.history.length-(this.index+1)},z.prototype.undo=function(){if(this.index>-1){var e=this.history[this.index];return this.undoers[e.type].call(this,e),this.index--,this.table.options.historyUndo.call(this.table,e.type,e.component.getComponent(),e.data),!0}return console.warn("History Undo Error - No more history to undo"),!1},z.prototype.redo=function(){if(this.history.length-1>this.index){this.index++;var e=this.history[this.index];return this.redoers[e.type].call(this,e),this.table.options.historyRedo.call(this.table,e.type,e.component.getComponent(),e.data),!0}return console.warn("History Redo Error - No more history to redo"),!1},z.prototype.undoers={cellEdit:function(e){e.component.setValueProcessData(e.data.oldValue)},rowAdd:function(e){e.component.deleteActual()},rowDelete:function(e){var t=this.table.rowManager.addRowActual(e.data.data,e.data.pos,e.data.index);this.table.options.groupBy&&this.table.modExists("groupRows")&&this.table.modules.groupRows.updateGroupRows(!0),this._rebindRow(e.component,t)},rowMove:function(e){
+this.table.rowManager.moveRowActual(e.component,this.table.rowManager.rows[e.data.posFrom],!e.data.after),this.table.rowManager.redraw()}},z.prototype.redoers={cellEdit:function(e){e.component.setValueProcessData(e.data.newValue)},rowAdd:function(e){var t=this.table.rowManager.addRowActual(e.data.data,e.data.pos,e.data.index);this.table.options.groupBy&&this.table.modExists("groupRows")&&this.table.modules.groupRows.updateGroupRows(!0),this._rebindRow(e.component,t)},rowDelete:function(e){e.component.deleteActual()},rowMove:function(e){this.table.rowManager.moveRowActual(e.component,this.table.rowManager.rows[e.data.posTo],e.data.after),this.table.rowManager.redraw()}},z.prototype._rebindRow=function(e,t){this.history.forEach(function(o){if(o.component instanceof a)o.component===e&&(o.component=t);else if(o.component instanceof c&&o.component.row===e){var i=o.component.column.getField();i&&(o.component=t.getCell(i))}})},d.prototype.registerModule("history",z);var A=function(e){this.table=e,this.fieldIndex=[],this.hasIndex=!1};A.prototype.parseTable=function(){var e=this,t=e.table.element,o=e.table.options,i=(o.columns,t.getElementsByTagName("th")),n=t.getElementsByTagName("tbody")[0],s=[];e.hasIndex=!1,e.table.options.htmlImporting.call(this.table),n=n?n.getElementsByTagName("tr"):[],e._extractOptions(t,o),i.length?e._extractHeaders(i,n):e._generateBlankHeaders(i,n);for(var r=0;r<n.length;r++){var a=n[r],l=a.getElementsByTagName("td"),c={};e.hasIndex||(c[o.index]=r);for(var u=0;u<l.length;u++){var d=l[u];void 0!==this.fieldIndex[u]&&(c[this.fieldIndex[u]]=d.innerHTML)}s.push(c)}var h=document.createElement("div"),p=t.attributes;for(var u in p)"object"==_typeof(p[u])&&h.setAttribute(p[u].name,p[u].value);t.parentNode.replaceChild(h,t),o.data=s,e.table.options.htmlImported.call(this.table),this.table.element=h},A.prototype._extractOptions=function(e,t,o){var i=e.attributes,n=o?Object.assign([],o):Object.keys(t),s={};n.forEach(function(e){s[e.toLowerCase()]=e});for(var r in i){var a,l=i[r];l&&"object"==(void 0===l?"undefined":_typeof(l))&&l.name&&0===l.name.indexOf("tabulator-")&&(a=l.name.replace("tabulator-",""),void 0!==s[a]&&(t[s[a]]=this._attribValue(l.value)))}},A.prototype._attribValue=function(e){return"true"===e||"false"!==e&&e},A.prototype._findCol=function(e){return this.table.options.columns.find(function(t){return t.title===e})||!1},A.prototype._extractHeaders=function(e,t){for(var o=0;o<e.length;o++){var i,s=e[o],r=!1,a=this._findCol(s.textContent);a?r=!0:a={title:s.textContent.trim()},a.field||(a.field=s.textContent.trim().toLowerCase().replace(" ","_")),i=s.getAttribute("width"),i&&!a.width&&(a.width=i),s.attributes,this._extractOptions(s,a,n.prototype.defaultOptionList),this.fieldIndex[o]=a.field,a.field==this.table.options.index&&(this.hasIndex=!0),r||this.table.options.columns.push(a)}},A.prototype._generateBlankHeaders=function(e,t){for(var o=0;o<e.length;o++){var i=e[o],n={title:"",field:"col"+o};this.fieldIndex[o]=n.field;var s=i.getAttribute("width");s&&(n.width=s),this.table.options.columns.push(n)}},d.prototype.registerModule("htmlTableImport",A);var _=function(e){this.table=e,this.watchKeys=null,this.pressedKeys=null,this.keyupBinding=!1,this.keydownBinding=!1};_.prototype.initialize=function(){var e=this.table.options.keybindings,t={};if(this.watchKeys={},this.pressedKeys=[],!1!==e){for(var o in this.bindings)t[o]=this.bindings[o];if(Object.keys(e).length)for(var i in e)t[i]=e[i];this.mapBindings(t),this.bindEvents()}},_.prototype.mapBindings=function(e){var t=this,o=this;for(var i in e)!function(i){t.actions[i]?e[i]&&("object"!==_typeof(e[i])&&(e[i]=[e[i]]),e[i].forEach(function(e){o.mapBinding(i,e)})):console.warn("Key Binding Error - no such action:",i)}(i)},_.prototype.mapBinding=function(e,t){var o=this,i={action:this.actions[e],keys:[],ctrl:!1,shift:!1,meta:!1};t.toString().toLowerCase().split(" ").join("").split("+").forEach(function(e){switch(e){case"ctrl":i.ctrl=!0;break;case"shift":i.shift=!0;break;case"meta":i.meta=!0;break;default:e=parseInt(e),i.keys.push(e),o.watchKeys[e]||(o.watchKeys[e]=[]),o.watchKeys[e].push(i)}})},_.prototype.bindEvents=function(){var e=this;this.keyupBinding=function(t){var o=t.keyCode,i=e.watchKeys[o];i&&(e.pressedKeys.push(o),i.forEach(function(o){e.checkBinding(t,o)}))},this.keydownBinding=function(t){var o=t.keyCode;if(e.watchKeys[o]){var i=e.pressedKeys.indexOf(o);i>-1&&e.pressedKeys.splice(i,1)}},this.table.element.addEventListener("keydown",this.keyupBinding),this.table.element.addEventListener("keyup",this.keydownBinding)},_.prototype.clearBindings=function(){this.keyupBinding&&this.table.element.removeEventListener("keydown",this.keyupBinding),this.keydownBinding&&this.table.element.removeEventListener("keyup",this.keydownBinding)},_.prototype.checkBinding=function(e,t){var o=this,i=!0;return e.ctrlKey==t.ctrl&&e.shiftKey==t.shift&&e.metaKey==t.meta&&(t.keys.forEach(function(e){-1==o.pressedKeys.indexOf(e)&&(i=!1)}),i&&t.action.call(o,e),!0)},_.prototype.bindings={navPrev:"shift + 9",navNext:9,navUp:38,navDown:40,scrollPageUp:33,scrollPageDown:34,scrollToStart:36,scrollToEnd:35,undo:"ctrl + 90",redo:"ctrl + 89",copyToClipboard:"ctrl + 67"},_.prototype.actions={keyBlock:function(e){e.stopPropagation(),e.preventDefault()},scrollPageUp:function(e){var t=this.table.rowManager,o=t.scrollTop-t.height;t.element.scrollHeight;e.preventDefault(),t.displayRowsCount&&(o>=0?t.element.scrollTop=o:t.scrollToRow(t.getDisplayRows()[0])),this.table.element.focus()},scrollPageDown:function(e){var t=this.table.rowManager,o=t.scrollTop+t.height,i=t.element.scrollHeight;e.preventDefault(),t.displayRowsCount&&(o<=i?t.element.scrollTop=o:t.scrollToRow(t.getDisplayRows()[t.displayRowsCount-1])),this.table.element.focus()},scrollToStart:function(e){var t=this.table.rowManager;e.preventDefault(),t.displayRowsCount&&t.scrollToRow(t.getDisplayRows()[0]),this.table.element.focus()},scrollToEnd:function(e){var t=this.table.rowManager;e.preventDefault(),t.displayRowsCount&&t.scrollToRow(t.getDisplayRows()[t.displayRowsCount-1]),this.table.element.focus()},navPrev:function(e){var t=!1;this.table.modExists("edit")&&(t=this.table.modules.edit.currentCell)&&(e.preventDefault(),t.nav().prev())},navNext:function(e){var t,o=!1,i=this.table.options.tabEndNewRow;this.table.modExists("edit")&&(o=this.table.modules.edit.currentCell)&&(e.preventDefault(),t=o.nav(),t.next()||i&&(o.getElement().firstChild.blur(),i=!0===i?this.table.addRow({}):"function"==typeof i?this.table.addRow(i(o.row.getComponent())):this.table.addRow(Object.assign({},i)),i.then(function(){setTimeout(function(){t.next()})})))},navLeft:function(e){var t=!1;this.table.modExists("edit")&&(t=this.table.modules.edit.currentCell)&&(e.preventDefault(),t.nav().left())},navRight:function(e){var t=!1;this.table.modExists("edit")&&(t=this.table.modules.edit.currentCell)&&(e.preventDefault(),t.nav().right())},navUp:function(e){var t=!1;this.table.modExists("edit")&&(t=this.table.modules.edit.currentCell)&&(e.preventDefault(),t.nav().up())},navDown:function(e){var t=!1;this.table.modExists("edit")&&(t=this.table.modules.edit.currentCell)&&(e.preventDefault(),t.nav().down())},undo:function(e){this.table.options.history&&this.table.modExists("history")&&this.table.modExists("edit")&&(this.table.modules.edit.currentCell||(e.preventDefault(),this.table.modules.history.undo()))},redo:function(e){this.table.options.history&&this.table.modExists("history")&&this.table.modExists("edit")&&(this.table.modules.edit.currentCell||(e.preventDefault(),this.table.modules.history.redo()))},copyToClipboard:function(e){this.table.modules.edit.currentCell||this.table.modExists("clipboard",!0)&&this.table.modules.clipboard.copy(!1,!0)}},d.prototype.registerModule("keybindings",_);var P=function(e){this.table=e,this.menuEl=!1,this.blurEvent=this.hideMenu.bind(this),this.escEvent=this.escMenu.bind(this),this.nestedMenuBlock=!1};P.prototype.initializeColumnHeader=function(e){var t,o=this;e.definition.headerContextMenu&&e.getElement().addEventListener("contextmenu",function(t){var i="function"==typeof e.definition.headerContextMenu?e.definition.headerContextMenu(e.getComponent()):e.definition.headerContextMenu;t.preventDefault(),o.loadMenu(t,e,i)}),e.definition.headerMenu&&(t=document.createElement("span"),t.classList.add("tabulator-header-menu-button"),t.innerHTML="&vellip;",t.addEventListener("click",function(t){var i="function"==typeof e.definition.headerMenu?e.definition.headerMenu(e.getComponent()):e.definition.headerMenu;t.stopPropagation(),t.preventDefault(),o.loadMenu(t,e,i)}),e.titleElement.insertBefore(t,e.titleElement.firstChild))},P.prototype.initializeCell=function(e){var t=this;e.getElement().addEventListener("contextmenu",function(o){var i="function"==typeof e.column.definition.contextMenu?e.column.definition.contextMenu(e.getComponent()):e.column.definition.contextMenu;o.stopImmediatePropagation(),t.loadMenu(o,e,i)})},P.prototype.initializeRow=function(e){var t=this;e.getElement().addEventListener("contextmenu",function(o){var i="function"==typeof t.table.options.rowContextMenu?t.table.options.rowContextMenu(e.getComponent()):t.table.options.rowContextMenu;t.loadMenu(o,e,i)})},P.prototype.initializeGroup=function(e){var t=this;e.getElement().addEventListener("contextmenu",function(o){var i="function"==typeof t.table.options.groupContextMenu?t.table.options.groupContextMenu(e.getComponent()):t.table.options.groupContextMenu;t.loadMenu(o,e,i)})},P.prototype.loadMenu=function(e,t,o){var i=this,n=Math.max(document.body.offsetHeight,window.innerHeight);if(e.preventDefault(),o&&o.length){if(this.nestedMenuBlock){if(this.isOpen())return}else this.nestedMenuBlock=setTimeout(function(){i.nestedMenuBlock=!1},100);this.hideMenu(),this.menuEl=document.createElement("div"),this.menuEl.classList.add("tabulator-menu"),o.forEach(function(e){var o=document.createElement("div"),n=e.label,s=e.disabled;e.separator?o.classList.add("tabulator-menu-separator"):(o.classList.add("tabulator-menu-item"),"function"==typeof n&&(n=n(t.getComponent())),n instanceof Node?o.appendChild(n):o.innerHTML=n,"function"==typeof s&&(s=s(t.getComponent())),s?(o.classList.add("tabulator-menu-item-disabled"),o.addEventListener("click",function(e){e.stopPropagation()})):o.addEventListener("click",function(o){i.hideMenu(),e.action(o,t.getComponent())})),i.menuEl.appendChild(o)}),this.menuEl.style.top=e.pageY+"px",this.menuEl.style.left=e.pageX+"px",document.body.addEventListener("click",this.blurEvent),this.table.rowManager.element.addEventListener("scroll",this.blurEvent),setTimeout(function(){document.body.addEventListener("contextmenu",i.blurEvent)},100),document.body.addEventListener("keydown",this.escEvent),document.body.appendChild(this.menuEl),e.pageX+this.menuEl.offsetWidth>=document.body.offsetWidth&&(this.menuEl.style.left="",this.menuEl.style.right=document.body.offsetWidth-e.pageX+"px"),e.pageY+this.menuEl.offsetHeight>=n&&(this.menuEl.style.top="",this.menuEl.style.bottom=n-e.pageY+"px")}},P.prototype.isOpen=function(){return!!this.menuEl.parentNode},P.prototype.escMenu=function(e){27==e.keyCode&&this.hideMenu()},P.prototype.hideMenu=function(){this.menuEl.parentNode&&this.menuEl.parentNode.removeChild(this.menuEl),this.escEvent&&document.body.removeEventListener("keydown",this.escEvent),this.blurEvent&&(document.body.removeEventListener("click",this.blurEvent),document.body.removeEventListener("contextmenu",this.blurEvent),this.table.rowManager.element.removeEventListener("scroll",this.blurEvent))},P.prototype.menus={},d.prototype.registerModule("menu",P);var F=function(e){this.table=e,this.placeholderElement=this.createPlaceholderElement(),this.hoverElement=!1,this.checkTimeout=!1,this.checkPeriod=250,this.moving=!1,this.toCol=!1,this.toColAfter=!1,this.startX=0,this.autoScrollMargin=40,this.autoScrollStep=5,this.autoScrollTimeout=!1,this.touchMove=!1,this.moveHover=this.moveHover.bind(this),this.endMove=this.endMove.bind(this)};F.prototype.createPlaceholderElement=function(){var e=document.createElement("div");return e.classList.add("tabulator-col"),e.classList.add("tabulator-col-placeholder"),e},F.prototype.initializeColumn=function(e){var t,o=this,i={};e.modules.frozen||(t=e.getElement(),i.mousemove=function(i){e.parent===o.moving.parent&&((o.touchMove?i.touches[0].pageX:i.pageX)-d.prototype.helpers.elOffset(t).left+o.table.columnManager.element.scrollLeft>e.getWidth()/2?o.toCol===e&&o.toColAfter||(t.parentNode.insertBefore(o.placeholderElement,t.nextSibling),o.moveColumn(e,!0)):(o.toCol!==e||o.toColAfter)&&(t.parentNode.insertBefore(o.placeholderElement,t),o.moveColumn(e,!1)))}.bind(o),t.addEventListener("mousedown",function(t){o.touchMove=!1,1===t.which&&(o.checkTimeout=setTimeout(function(){o.startMove(t,e)},o.checkPeriod))}),t.addEventListener("mouseup",function(e){1===e.which&&o.checkTimeout&&clearTimeout(o.checkTimeout)}),o.bindTouchEvents(e)),e.modules.moveColumn=i},F.prototype.bindTouchEvents=function(e){var t,o,i,n,s,r,a,l=this,c=e.getElement(),u=!1;c.addEventListener("touchstart",function(c){l.checkTimeout=setTimeout(function(){l.touchMove=!0,t=e,o=e.nextColumn(),n=o?o.getWidth()/2:0,i=e.prevColumn(),s=i?i.getWidth()/2:0,r=0,a=0,u=!1,l.startMove(c,e)},l.checkPeriod)},{passive:!0}),c.addEventListener("touchmove",function(c){var d,h;l.moving&&(l.moveHover(c),u||(u=c.touches[0].pageX),d=c.touches[0].pageX-u,d>0?o&&d-r>n&&(h=o)!==e&&(u=c.touches[0].pageX,h.getElement().parentNode.insertBefore(l.placeholderElement,h.getElement().nextSibling),l.moveColumn(h,!0)):i&&-d-a>s&&(h=i)!==e&&(u=c.touches[0].pageX,h.getElement().parentNode.insertBefore(l.placeholderElement,h.getElement()),l.moveColumn(h,!1)),h&&(t=h,o=h.nextColumn(),r=n,n=o?o.getWidth()/2:0,i=h.prevColumn(),a=s,s=i?i.getWidth()/2:0))},{passive:!0}),c.addEventListener("touchend",function(e){l.checkTimeout&&clearTimeout(l.checkTimeout),l.moving&&l.endMove(e)})},F.prototype.startMove=function(e,t){var o=t.getElement();this.moving=t,this.startX=(this.touchMove?e.touches[0].pageX:e.pageX)-d.prototype.helpers.elOffset(o).left,this.table.element.classList.add("tabulator-block-select"),this.placeholderElement.style.width=t.getWidth()+"px",this.placeholderElement.style.height=t.getHeight()+"px",o.parentNode.insertBefore(this.placeholderElement,o),o.parentNode.removeChild(o),this.hoverElement=o.cloneNode(!0),this.hoverElement.classList.add("tabulator-moving"),this.table.columnManager.getElement().appendChild(this.hoverElement),this.hoverElement.style.left="0",this.hoverElement.style.bottom="0",this.touchMove||(this._bindMouseMove(),document.body.addEventListener("mousemove",this.moveHover),document.body.addEventListener("mouseup",this.endMove)),this.moveHover(e)},F.prototype._bindMouseMove=function(){this.table.columnManager.columnsByIndex.forEach(function(e){e.modules.moveColumn.mousemove&&e.getElement().addEventListener("mousemove",e.modules.moveColumn.mousemove)})},F.prototype._unbindMouseMove=function(){this.table.columnManager.columnsByIndex.forEach(function(e){e.modules.moveColumn.mousemove&&e.getElement().removeEventListener("mousemove",e.modules.moveColumn.mousemove)})},F.prototype.moveColumn=function(e,t){var o=this.moving.getCells();this.toCol=e,this.toColAfter=t,t?e.getCells().forEach(function(e,t){var i=e.getElement();i.parentNode.insertBefore(o[t].getElement(),i.nextSibling)}):e.getCells().forEach(function(e,t){var i=e.getElement();i.parentNode.insertBefore(o[t].getElement(),i)})},F.prototype.endMove=function(e){(1===e.which||this.touchMove)&&(this._unbindMouseMove(),this.placeholderElement.parentNode.insertBefore(this.moving.getElement(),this.placeholderElement.nextSibling),this.placeholderElement.parentNode.removeChild(this.placeholderElement),this.hoverElement.parentNode.removeChild(this.hoverElement),this.table.element.classList.remove("tabulator-block-select"),this.toCol&&this.table.columnManager.moveColumnActual(this.moving,this.toCol,this.toColAfter),this.moving=!1,this.toCol=!1,this.toColAfter=!1,this.touchMove||(document.body.removeEventListener("mousemove",this.moveHover),document.body.removeEventListener("mouseup",this.endMove)))},F.prototype.moveHover=function(e){var t,o=this,i=o.table.columnManager.getElement(),n=i.scrollLeft,s=(o.touchMove?e.touches[0].pageX:e.pageX)-d.prototype.helpers.elOffset(i).left+n;o.hoverElement.style.left=s-o.startX+"px",s-n<o.autoScrollMargin&&(o.autoScrollTimeout||(o.autoScrollTimeout=setTimeout(function(){t=Math.max(0,n-5),o.table.rowManager.getElement().scrollLeft=t,o.autoScrollTimeout=!1},1))),n+i.clientWidth-s<o.autoScrollMargin&&(o.autoScrollTimeout||(o.autoScrollTimeout=setTimeout(function(){t=Math.min(i.clientWidth,n+5),o.table.rowManager.getElement().scrollLeft=t,o.autoScrollTimeout=!1},1)))},d.prototype.registerModule("moveColumn",F);var N=function(e){this.table=e,this.placeholderElement=this.createPlaceholderElement(),this.hoverElement=!1,this.checkTimeout=!1,this.checkPeriod=150,this.moving=!1,this.toRow=!1,this.toRowAfter=!1,this.hasHandle=!1,this.startY=0,this.startX=0,this.moveHover=this.moveHover.bind(this),this.endMove=this.endMove.bind(this),this.tableRowDropEvent=!1,this.touchMove=!1,this.connection=!1,this.connectionSelectorsTables=!1,this.connectionSelectorsElements=!1,this.connectionElements=[],this.connections=[],this.connectedTable=!1,this.connectedRow=!1};N.prototype.createPlaceholderElement=function(){var e=document.createElement("div");return e.classList.add("tabulator-row"),e.classList.add("tabulator-row-placeholder"),e},N.prototype.initialize=function(e){this.connectionSelectorsTables=this.table.options.movableRowsConnectedTables,this.connectionSelectorsElements=this.table.options.movableRowsConnectedElements,this.connection=this.connectionSelectorsTables||this.connectionSelectorsElements},N.prototype.setHandle=function(e){this.hasHandle=e},N.prototype.initializeGroupHeader=function(e){var t=this,o={};o.mouseup=function(e){t.tableRowDrop(e,row)}.bind(t),o.mousemove=function(o){if(o.pageY-d.prototype.helpers.elOffset(e.element).top+t.table.rowManager.element.scrollTop>e.getHeight()/2){if(t.toRow!==e||!t.toRowAfter){var i=e.getElement();i.parentNode.insertBefore(t.placeholderElement,i.nextSibling),t.moveRow(e,!0)}}else if(t.toRow!==e||t.toRowAfter){var i=e.getElement();i.previousSibling&&(i.parentNode.insertBefore(t.placeholderElement,i),t.moveRow(e,!1))}}.bind(t),e.modules.moveRow=o},N.prototype.initializeRow=function(e){var t,o=this,i={};i.mouseup=function(t){o.tableRowDrop(t,e)}.bind(o),i.mousemove=function(t){if(t.pageY-d.prototype.helpers.elOffset(e.element).top+o.table.rowManager.element.scrollTop>e.getHeight()/2){if(o.toRow!==e||!o.toRowAfter){var i=e.getElement();i.parentNode.insertBefore(o.placeholderElement,i.nextSibling),o.moveRow(e,!0)}}else if(o.toRow!==e||o.toRowAfter){var i=e.getElement();i.parentNode.insertBefore(o.placeholderElement,i),o.moveRow(e,!1)}}.bind(o),this.hasHandle||(t=e.getElement(),t.addEventListener("mousedown",function(t){1===t.which&&(o.checkTimeout=setTimeout(function(){o.startMove(t,e)},o.checkPeriod))}),t.addEventListener("mouseup",function(e){1===e.which&&o.checkTimeout&&clearTimeout(o.checkTimeout)}),this.bindTouchEvents(e,e.getElement())),e.modules.moveRow=i},N.prototype.initializeCell=function(e){var t=this,o=e.getElement();o.addEventListener("mousedown",function(o){1===o.which&&(t.checkTimeout=setTimeout(function(){t.startMove(o,e.row)},t.checkPeriod))}),o.addEventListener("mouseup",function(e){1===e.which&&t.checkTimeout&&clearTimeout(t.checkTimeout)}),this.bindTouchEvents(e.row,e.getElement())},N.prototype.bindTouchEvents=function(e,t){var o,i,n,s,r,a,l,c=this,u=!1;t.addEventListener("touchstart",function(t){c.checkTimeout=setTimeout(function(){c.touchMove=!0,o=e,i=e.nextRow(),s=i?i.getHeight()/2:0,n=e.prevRow(),r=n?n.getHeight()/2:0,a=0,l=0,u=!1,c.startMove(t,e)},c.checkPeriod)},{passive:!0}),this.moving,this.toRow,this.toRowAfter,t.addEventListener("touchmove",function(t){var d,h;c.moving&&(t.preventDefault(),c.moveHover(t),u||(u=t.touches[0].pageY),d=t.touches[0].pageY-u,d>0?i&&d-a>s&&(h=i)!==e&&(u=t.touches[0].pageY,h.getElement().parentNode.insertBefore(c.placeholderElement,h.getElement().nextSibling),c.moveRow(h,!0)):n&&-d-l>r&&(h=n)!==e&&(u=t.touches[0].pageY,h.getElement().parentNode.insertBefore(c.placeholderElement,h.getElement()),c.moveRow(h,!1)),h&&(o=h,i=h.nextRow(),a=s,s=i?i.getHeight()/2:0,n=h.prevRow(),l=r,r=n?n.getHeight()/2:0))}),t.addEventListener("touchend",function(e){c.checkTimeout&&clearTimeout(c.checkTimeout),c.moving&&(c.endMove(e),c.touchMove=!1)})},N.prototype._bindMouseMove=function(){this.table.rowManager.getDisplayRows().forEach(function(e){"row"!==e.type&&"group"!==e.type||!e.modules.moveRow.mousemove||e.getElement().addEventListener("mousemove",e.modules.moveRow.mousemove)})},N.prototype._unbindMouseMove=function(){this.table.rowManager.getDisplayRows().forEach(function(e){"row"!==e.type&&"group"!==e.type||!e.modules.moveRow.mousemove||e.getElement().removeEventListener("mousemove",e.modules.moveRow.mousemove)})},N.prototype.startMove=function(e,t){var o=t.getElement();this.setStartPosition(e,t),this.moving=t,this.table.element.classList.add("tabulator-block-select"),this.placeholderElement.style.width=t.getWidth()+"px",this.placeholderElement.style.height=t.getHeight()+"px",this.connection?(this.table.element.classList.add("tabulator-movingrow-sending"),this.connectToTables(t)):(o.parentNode.insertBefore(this.placeholderElement,o),o.parentNode.removeChild(o)),this.hoverElement=o.cloneNode(!0),this.hoverElement.classList.add("tabulator-moving"),this.connection?(document.body.appendChild(this.hoverElement),this.hoverElement.style.left="0",this.hoverElement.style.top="0",this.hoverElement.style.width=this.table.element.clientWidth+"px",this.hoverElement.style.whiteSpace="nowrap",this.hoverElement.style.overflow="hidden",this.hoverElement.style.pointerEvents="none"):(this.table.rowManager.getTableElement().appendChild(this.hoverElement),this.hoverElement.style.left="0",this.hoverElement.style.top="0",this._bindMouseMove()),document.body.addEventListener("mousemove",this.moveHover),document.body.addEventListener("mouseup",this.endMove),this.moveHover(e)},N.prototype.setStartPosition=function(e,t){var o,i,n=this.touchMove?e.touches[0].pageX:e.pageX,s=this.touchMove?e.touches[0].pageY:e.pageY;o=t.getElement(),this.connection?(i=o.getBoundingClientRect(),this.startX=i.left-n+window.pageXOffset,this.startY=i.top-s+window.pageYOffset):this.startY=s-o.getBoundingClientRect().top},N.prototype.endMove=function(e){e&&1!==e.which&&!this.touchMove||(this._unbindMouseMove(),this.connection||(this.placeholderElement.parentNode.insertBefore(this.moving.getElement(),this.placeholderElement.nextSibling),this.placeholderElement.parentNode.removeChild(this.placeholderElement)),this.hoverElement.parentNode.removeChild(this.hoverElement),this.table.element.classList.remove("tabulator-block-select"),this.toRow&&this.table.rowManager.moveRow(this.moving,this.toRow,this.toRowAfter),this.moving=!1,this.toRow=!1,this.toRowAfter=!1,document.body.removeEventListener("mousemove",this.moveHover),document.body.removeEventListener("mouseup",this.endMove),this.connection&&(this.table.element.classList.remove("tabulator-movingrow-sending"),this.disconnectFromTables()))},N.prototype.moveRow=function(e,t){this.toRow=e,this.toRowAfter=t},N.prototype.moveHover=function(e){this.connection?this.moveHoverConnections.call(this,e):this.moveHoverTable.call(this,e)},N.prototype.moveHoverTable=function(e){var t=this.table.rowManager.getElement(),o=t.scrollTop,i=(this.touchMove?e.touches[0].pageY:e.pageY)-t.getBoundingClientRect().top+o;this.hoverElement.style.top=i-this.startY+"px"},N.prototype.moveHoverConnections=function(e){this.hoverElement.style.left=this.startX+(this.touchMove?e.touches[0].pageX:e.pageX)+"px",this.hoverElement.style.top=this.startY+(this.touchMove?e.touches[0].pageY:e.pageY)+"px"},N.prototype.elementRowDrop=function(e,t,o){this.table.options.movableRowsElementDrop&&this.table.options.movableRowsElementDrop(e,t,!!o&&o.getComponent())},N.prototype.connectToTables=function(e){var t,o=this;this.connectionSelectorsTables&&(t=this.table.modules.comms.getConnections(this.connectionSelectorsTables),this.table.options.movableRowsSendingStart.call(this.table,t),this.table.modules.comms.send(this.connectionSelectorsTables,"moveRow","connect",{row:e})),this.connectionSelectorsElements&&(this.connectionElements=[],Array.isArray(this.connectionSelectorsElements)||(this.connectionSelectorsElements=[this.connectionSelectorsElements]),this.connectionSelectorsElements.forEach(function(e){"string"==typeof e?o.connectionElements=o.connectionElements.concat(Array.prototype.slice.call(document.querySelectorAll(e))):o.connectionElements.push(e)}),this.connectionElements.forEach(function(e){var t=function(t){o.elementRowDrop(t,e,o.moving)};e.addEventListener("mouseup",t),e.tabulatorElementDropEvent=t,e.classList.add("tabulator-movingrow-receiving")}))},N.prototype.disconnectFromTables=function(){var e;this.connectionSelectorsTables&&(e=this.table.modules.comms.getConnections(this.connectionSelectorsTables),this.table.options.movableRowsSendingStop.call(this.table,e),this.table.modules.comms.send(this.connectionSelectorsTables,"moveRow","disconnect")),this.connectionElements.forEach(function(e){e.classList.remove("tabulator-movingrow-receiving"),e.removeEventListener("mouseup",e.tabulatorElementDropEvent),delete e.tabulatorElementDropEvent})},N.prototype.connect=function(e,t){var o=this;return this.connectedTable?(console.warn("Move Row Error - Table cannot accept connection, already connected to table:",this.connectedTable),!1):(this.connectedTable=e,this.connectedRow=t,this.table.element.classList.add("tabulator-movingrow-receiving"),o.table.rowManager.getDisplayRows().forEach(function(e){"row"===e.type&&e.modules.moveRow&&e.modules.moveRow.mouseup&&e.getElement().addEventListener("mouseup",e.modules.moveRow.mouseup)}),o.tableRowDropEvent=o.tableRowDrop.bind(o),o.table.element.addEventListener("mouseup",o.tableRowDropEvent),this.table.options.movableRowsReceivingStart.call(this.table,t,e),!0)},N.prototype.disconnect=function(e){var t=this;e===this.connectedTable?(this.connectedTable=!1,this.connectedRow=!1,this.table.element.classList.remove("tabulator-movingrow-receiving"),t.table.rowManager.getDisplayRows().forEach(function(e){"row"===e.type&&e.modules.moveRow&&e.modules.moveRow.mouseup&&e.getElement().removeEventListener("mouseup",e.modules.moveRow.mouseup)}),t.table.element.removeEventListener("mouseup",t.tableRowDropEvent),this.table.options.movableRowsReceivingStop.call(this.table,e)):console.warn("Move Row Error - trying to disconnect from non connected table")},N.prototype.dropComplete=function(e,t,o){var i=!1;if(o){switch(_typeof(this.table.options.movableRowsSender)){case"string":i=this.senders[this.table.options.movableRowsSender];break;case"function":i=this.table.options.movableRowsSender}i?i.call(this,this.moving.getComponent(),t?t.getComponent():void 0,e):this.table.options.movableRowsSender&&console.warn("Mover Row Error - no matching sender found:",this.table.options.movableRowsSender),this.table.options.movableRowsSent.call(this.table,this.moving.getComponent(),t?t.getComponent():void 0,e)}else this.table.options.movableRowsSentFailed.call(this.table,this.moving.getComponent(),t?t.getComponent():void 0,e);this.endMove()},N.prototype.tableRowDrop=function(e,t){var o=!1,i=!1;switch(console.trace("drop"),e.stopImmediatePropagation(),_typeof(this.table.options.movableRowsReceiver)){case"string":o=this.receivers[this.table.options.movableRowsReceiver];break;case"function":o=this.table.options.movableRowsReceiver}o?i=o.call(this,this.connectedRow.getComponent(),t?t.getComponent():void 0,this.connectedTable):console.warn("Mover Row Error - no matching receiver found:",this.table.options.movableRowsReceiver),i?this.table.options.movableRowsReceived.call(this.table,this.connectedRow.getComponent(),t?t.getComponent():void 0,this.connectedTable):this.table.options.movableRowsReceivedFailed.call(this.table,this.connectedRow.getComponent(),t?t.getComponent():void 0,this.connectedTable),this.table.modules.comms.send(this.connectedTable,"moveRow","dropcomplete",{row:t,success:i})},N.prototype.receivers={insert:function(e,t,o){return this.table.addRow(e.getData(),void 0,t),!0},add:function(e,t,o){return this.table.addRow(e.getData()),!0},update:function(e,t,o){return!!t&&(t.update(e.getData()),!0)},replace:function(e,t,o){return!!t&&(this.table.addRow(e.getData(),void 0,t),t.delete(),!0)}},N.prototype.senders={delete:function(e,t,o){e.delete()}},N.prototype.commsReceived=function(e,t,o){switch(t){case"connect":return this.connect(e,o.row);case"disconnect":return this.disconnect(e);case"dropcomplete":return this.dropComplete(e,o.row,o.success)}},d.prototype.registerModule("moveRow",N);var B=function(e){this.table=e,this.allowedTypes=["","data","edit","clipboard"],this.enabled=!0};B.prototype.initializeColumn=function(e){var t=this,o=!1,i={};this.allowedTypes.forEach(function(n){var s,r="mutator"+(n.charAt(0).toUpperCase()+n.slice(1));e.definition[r]&&(s=t.lookupMutator(e.definition[r]))&&(o=!0,i[r]={mutator:s,params:e.definition[r+"Params"]||{}})}),o&&(e.modules.mutate=i)},B.prototype.lookupMutator=function(e){var t=!1;switch(void 0===e?"undefined":_typeof(e)){case"string":this.mutators[e]?t=this.mutators[e]:console.warn("Mutator Error - No such mutator found, ignoring: ",e);break;case"function":t=e}return t},B.prototype.transformRow=function(e,t,o){var i,n=this,s="mutator"+(t.charAt(0).toUpperCase()+t.slice(1));return this.enabled&&n.table.columnManager.traverse(function(n){var r,a,l;n.modules.mutate&&(r=n.modules.mutate[s]||n.modules.mutate.mutator||!1)&&(i=n.getFieldValue(void 0!==o?o:e),"data"!=t&&void 0===i||(l=n.getComponent(),a="function"==typeof r.params?r.params(i,e,t,l):r.params,n.setFieldValue(e,r.mutator(i,e,t,a,l))))}),e},B.prototype.transformCell=function(e,t){var o=e.column.modules.mutate.mutatorEdit||e.column.modules.mutate.mutator||!1,i={};return o?(i=Object.assign(i,e.row.getData()),e.column.setFieldValue(i,t),o.mutator(t,i,"edit",o.params,e.getComponent())):t},B.prototype.enable=function(){this.enabled=!0},B.prototype.disable=function(){this.enabled=!1},B.prototype.mutators={},d.prototype.registerModule("mutator",B);var O=function(e){this.table=e,this.mode="local",this.progressiveLoad=!1,this.size=0,this.page=1,this.count=5,this.max=1,this.displayIndex=0,this.initialLoad=!0,this.pageSizes=[],this.dataReceivedNames={},this.dataSentNames={},this.createElements()};O.prototype.createElements=function(){var e;this.element=document.createElement("span"),this.element.classList.add("tabulator-paginator"),this.pagesElement=document.createElement("span"),this.pagesElement.classList.add("tabulator-pages"),e=document.createElement("button"),e.classList.add("tabulator-page"),e.setAttribute("type","button"),e.setAttribute("role","button"),e.setAttribute("aria-label",""),e.setAttribute("title",""),this.firstBut=e.cloneNode(!0),this.firstBut.setAttribute("data-page","first"),this.prevBut=e.cloneNode(!0),this.prevBut.setAttribute("data-page","prev"),this.nextBut=e.cloneNode(!0),this.nextBut.setAttribute("data-page","next"),this.lastBut=e.cloneNode(!0),this.lastBut.setAttribute("data-page","last"),this.table.options.paginationSizeSelector&&(this.pageSizeSelect=document.createElement("select"),this.pageSizeSelect.classList.add("tabulator-page-size"))},O.prototype.generatePageSizeSelectList=function(){var e=this,t=[];if(this.pageSizeSelect){if(Array.isArray(this.table.options.paginationSizeSelector))t=this.table.options.paginationSizeSelector,this.pageSizes=t,-1==this.pageSizes.indexOf(this.size)&&t.unshift(this.size);else if(-1==this.pageSizes.indexOf(this.size)){t=[];for(var o=1;o<5;o++)t.push(this.size*o);this.pageSizes=t}else t=this.pageSizes
+;for(;this.pageSizeSelect.firstChild;)this.pageSizeSelect.removeChild(this.pageSizeSelect.firstChild);t.forEach(function(t){var o=document.createElement("option");o.value=t,!0===t?e.table.modules.localize.bind("pagination|all",function(e){o.innerHTML=e}):o.innerHTML=t,e.pageSizeSelect.appendChild(o)}),this.pageSizeSelect.value=this.size}},O.prototype.initialize=function(e){var t,o,i,n=this;this.dataSentNames=Object.assign({},this.paginationDataSentNames),this.dataSentNames=Object.assign(this.dataSentNames,this.table.options.paginationDataSent),this.dataReceivedNames=Object.assign({},this.paginationDataReceivedNames),this.dataReceivedNames=Object.assign(this.dataReceivedNames,this.table.options.paginationDataReceived),n.table.modules.localize.bind("pagination|first",function(e){n.firstBut.innerHTML=e}),n.table.modules.localize.bind("pagination|first_title",function(e){n.firstBut.setAttribute("aria-label",e),n.firstBut.setAttribute("title",e)}),n.table.modules.localize.bind("pagination|prev",function(e){n.prevBut.innerHTML=e}),n.table.modules.localize.bind("pagination|prev_title",function(e){n.prevBut.setAttribute("aria-label",e),n.prevBut.setAttribute("title",e)}),n.table.modules.localize.bind("pagination|next",function(e){n.nextBut.innerHTML=e}),n.table.modules.localize.bind("pagination|next_title",function(e){n.nextBut.setAttribute("aria-label",e),n.nextBut.setAttribute("title",e)}),n.table.modules.localize.bind("pagination|last",function(e){n.lastBut.innerHTML=e}),n.table.modules.localize.bind("pagination|last_title",function(e){n.lastBut.setAttribute("aria-label",e),n.lastBut.setAttribute("title",e)}),n.firstBut.addEventListener("click",function(){n.setPage(1)}),n.prevBut.addEventListener("click",function(){n.previousPage()}),n.nextBut.addEventListener("click",function(){n.nextPage().then(function(){}).catch(function(){})}),n.lastBut.addEventListener("click",function(){n.setPage(n.max)}),n.table.options.paginationElement&&(n.element=n.table.options.paginationElement),this.pageSizeSelect&&(t=document.createElement("label"),n.table.modules.localize.bind("pagination|page_size",function(e){n.pageSizeSelect.setAttribute("aria-label",e),n.pageSizeSelect.setAttribute("title",e),t.innerHTML=e}),n.element.appendChild(t),n.element.appendChild(n.pageSizeSelect),n.pageSizeSelect.addEventListener("change",function(e){n.setPageSize("true"==n.pageSizeSelect.value||n.pageSizeSelect.value),n.setPage(1).then(function(){}).catch(function(){})})),n.element.appendChild(n.firstBut),n.element.appendChild(n.prevBut),n.element.appendChild(n.pagesElement),n.element.appendChild(n.nextBut),n.element.appendChild(n.lastBut),n.table.options.paginationElement||e||n.table.footerManager.append(n.element,n),n.mode=n.table.options.pagination,n.table.options.paginationSize?n.size=n.table.options.paginationSize:(o=document.createElement("div"),o.classList.add("tabulator-row"),o.style.visibility=e,i=document.createElement("div"),i.classList.add("tabulator-cell"),i.innerHTML="Page Row Test",o.appendChild(i),n.table.rowManager.getTableElement().appendChild(o),n.size=Math.floor(n.table.rowManager.getElement().clientHeight/o.offsetHeight),n.table.rowManager.getTableElement().removeChild(o)),n.count=n.table.options.paginationButtonCount,n.generatePageSizeSelectList()},O.prototype.initializeProgressive=function(e){this.initialize(!0),this.mode="progressive_"+e,this.progressiveLoad=!0},O.prototype.setDisplayIndex=function(e){this.displayIndex=e},O.prototype.getDisplayIndex=function(){return this.displayIndex},O.prototype.setMaxRows=function(e){this.max=e?!0===this.size?1:Math.ceil(e/this.size):1,this.page>this.max&&(this.page=this.max)},O.prototype.reset=function(e,t){return("local"==this.mode||e)&&(this.page=1),t&&(this.initialLoad=!0),!0},O.prototype.setMaxPage=function(e){e=parseInt(e),this.max=e||1,this.page>this.max&&(this.page=this.max,this.trigger())},O.prototype.setPage=function(e){var t=this,o=this;switch(e){case"first":return this.setPage(1);case"prev":return this.previousPage();case"next":return this.nextPage();case"last":return this.setPage(this.max)}return new Promise(function(i,n){e=parseInt(e),e>0&&e<=t.max?(t.page=e,t.trigger().then(function(){i()}).catch(function(){n()}),o.table.options.persistence&&o.table.modExists("persistence",!0)&&o.table.modules.persistence.config.page&&o.table.modules.persistence.save("page")):(console.warn("Pagination Error - Requested page is out of range of 1 - "+t.max+":",e),n())})},O.prototype.setPageToRow=function(e){var t=this;return new Promise(function(o,i){var n=t.table.rowManager.getDisplayRows(t.displayIndex-1),s=n.indexOf(e);if(s>-1){var r=!0===t.size?1:Math.ceil((s+1)/t.size);t.setPage(r).then(function(){o()}).catch(function(){i()})}else console.warn("Pagination Error - Requested row is not visible"),i()})},O.prototype.setPageSize=function(e){!0!==e&&(e=parseInt(e)),e>0&&(this.size=e),this.pageSizeSelect&&this.generatePageSizeSelectList(),this.table.options.persistence&&this.table.modExists("persistence",!0)&&this.table.modules.persistence.config.page&&this.table.modules.persistence.save("page")},O.prototype._setPageButtons=function(){for(var e=this,t=Math.floor((this.count-1)/2),o=Math.ceil((this.count-1)/2),i=this.max-this.page+t+1<this.count?this.max-this.count+1:Math.max(this.page-t,1),n=this.page<=o?Math.min(this.count,this.max):Math.min(this.page+o,this.max);e.pagesElement.firstChild;)e.pagesElement.removeChild(e.pagesElement.firstChild);1==e.page?(e.firstBut.disabled=!0,e.prevBut.disabled=!0):(e.firstBut.disabled=!1,e.prevBut.disabled=!1),e.page==e.max?(e.lastBut.disabled=!0,e.nextBut.disabled=!0):(e.lastBut.disabled=!1,e.nextBut.disabled=!1);for(var s=i;s<=n;s++)s>0&&s<=e.max&&e.pagesElement.appendChild(e._generatePageButton(s));this.footerRedraw()},O.prototype._generatePageButton=function(e){var t=this,o=document.createElement("button");return o.classList.add("tabulator-page"),e==t.page&&o.classList.add("active"),o.setAttribute("type","button"),o.setAttribute("role","button"),t.table.modules.localize.bind("pagination|page_title",function(t){o.setAttribute("aria-label",t+" "+e),o.setAttribute("title",t+" "+e)}),o.setAttribute("data-page",e),o.textContent=e,o.addEventListener("click",function(o){t.setPage(e)}),o},O.prototype.previousPage=function(){var e=this;return new Promise(function(t,o){e.page>1?(e.page--,e.trigger().then(function(){t()}).catch(function(){o()}),e.table.options.persistence&&e.table.modExists("persistence",!0)&&e.table.modules.persistence.config.page&&e.table.modules.persistence.save("page")):(console.warn("Pagination Error - Previous page would be less than page 1:",0),o())})},O.prototype.nextPage=function(){var e=this;return new Promise(function(t,o){e.page<e.max?(e.page++,e.trigger().then(function(){t()}).catch(function(){o()}),e.table.options.persistence&&e.table.modExists("persistence",!0)&&e.table.modules.persistence.config.page&&e.table.modules.persistence.save("page")):(e.progressiveLoad||console.warn("Pagination Error - Next page would be greater than maximum page of "+e.max+":",e.max+1),o())})},O.prototype.getPage=function(){return this.page},O.prototype.getPageMax=function(){return this.max},O.prototype.getPageSize=function(e){return this.size},O.prototype.getMode=function(){return this.mode},O.prototype.getRows=function(e){var t,o,i;if("local"==this.mode){t=[],!0===this.size?(o=0,i=e.length-1):(o=this.size*(this.page-1),i=o+parseInt(this.size)),this._setPageButtons();for(var n=o;n<i;n++)e[n]&&t.push(e[n]);return t}return this._setPageButtons(),e.slice(0)},O.prototype.trigger=function(){var e,t=this;return new Promise(function(o,i){switch(t.mode){case"local":e=t.table.rowManager.scrollLeft,t.table.rowManager.refreshActiveData("page"),t.table.rowManager.scrollHorizontal(e),t.table.options.pageLoaded.call(t.table,t.getPage()),o();break;case"remote":case"progressive_load":case"progressive_scroll":t.table.modules.ajax.blockActiveRequest(),t._getRemotePage().then(function(){o()}).catch(function(){i()});break;default:console.warn("Pagination Error - no such pagination mode:",t.mode),i()}})},O.prototype._getRemotePage=function(){var e,t,o=this,i=this;return new Promise(function(n,s){if(i.table.modExists("ajax",!0)||s(),e=d.prototype.helpers.deepClone(i.table.modules.ajax.getParams()||{}),t=i.table.modules.ajax.getParams(),t[o.dataSentNames.page]=i.page,o.size&&(t[o.dataSentNames.size]=o.size),o.table.options.ajaxSorting&&o.table.modExists("sort")){var r=i.table.modules.sort.getSort();r.forEach(function(e){delete e.column}),t[o.dataSentNames.sorters]=r}if(o.table.options.ajaxFiltering&&o.table.modExists("filter")){var a=i.table.modules.filter.getFilters(!0,!0);t[o.dataSentNames.filters]=a}i.table.modules.ajax.setParams(t),i.table.modules.ajax.sendRequest(o.progressiveLoad).then(function(e){i._parseRemoteData(e),n()}).catch(function(e){s()}),i.table.modules.ajax.setParams(e)})},O.prototype._parseRemoteData=function(e){var t,e,o,i=this;if(void 0===e[this.dataReceivedNames.last_page]&&console.warn("Remote Pagination Error - Server response missing '"+this.dataReceivedNames.last_page+"' property"),e[this.dataReceivedNames.data]){if(this.max=parseInt(e[this.dataReceivedNames.last_page])||1,this.progressiveLoad)switch(this.mode){case"progressive_load":1==this.page?this.table.rowManager.setData(e[this.dataReceivedNames.data],!1,this.initialLoad&&1==this.page):this.table.rowManager.addRows(e[this.dataReceivedNames.data]),this.page<this.max&&setTimeout(function(){i.nextPage().then(function(){}).catch(function(){})},i.table.options.ajaxProgressiveLoadDelay);break;case"progressive_scroll":e=this.table.rowManager.getData().concat(e[this.dataReceivedNames.data]),this.table.rowManager.setData(e,!0,this.initialLoad&&1==this.page),o=this.table.options.ajaxProgressiveLoadScrollMargin||2*this.table.rowManager.element.clientHeight,i.table.rowManager.element.scrollHeight<=i.table.rowManager.element.clientHeight+o&&i.nextPage().then(function(){}).catch(function(){})}else t=this.table.rowManager.scrollLeft,this.table.rowManager.setData(e[this.dataReceivedNames.data],!1,this.initialLoad&&1==this.page),this.table.rowManager.scrollHorizontal(t),this.table.columnManager.scrollHorizontal(t),this.table.options.pageLoaded.call(this.table,this.getPage());this.initialLoad=!1}else console.warn("Remote Pagination Error - Server response missing '"+this.dataReceivedNames.data+"' property")},O.prototype.footerRedraw=function(){var e=this.table.footerManager.element;Math.ceil(e.clientWidth)-e.scrollWidth<0?this.pagesElement.style.display="none":(this.pagesElement.style.display="",Math.ceil(e.clientWidth)-e.scrollWidth<0&&(this.pagesElement.style.display="none"))},O.prototype.paginationDataSentNames={page:"page",size:"size",sorters:"sorters",filters:"filters"},O.prototype.paginationDataReceivedNames={current_page:"current_page",last_page:"last_page",data:"data"},d.prototype.registerModule("page",O);var I=function(e){this.table=e,this.mode="",this.id="",this.defWatcherBlock=!1,this.config={},this.readFunc=!1,this.writeFunc=!1};I.prototype.localStorageTest=function(){var e="_tabulator_test";try{return window.localStorage.setItem(e,e),window.localStorage.removeItem(e),!0}catch(e){return!1}},I.prototype.initialize=function(){var e,t=this.table.options.persistenceMode,o=this.table.options.persistenceID;this.mode=!0!==t?t:this.localStorageTest()?"local":"cookie",this.table.options.persistenceReaderFunc?"function"==typeof this.table.options.persistenceReaderFunc?this.readFunc=this.table.options.persistenceReaderFunc:this.readers[this.table.options.persistenceReaderFunc]?this.readFunc=this.readers[this.table.options.persistenceReaderFunc]:console.warn("Persistence Read Error - invalid reader set",this.table.options.persistenceReaderFunc):this.readers[this.mode]?this.readFunc=this.readers[this.mode]:console.warn("Persistence Read Error - invalid reader set",this.mode),this.table.options.persistenceWriterFunc?"function"==typeof this.table.options.persistenceWriterFunc?this.writeFunc=this.table.options.persistenceWriterFunc:this.readers[this.table.options.persistenceWriterFunc]?this.writeFunc=this.readers[this.table.options.persistenceWriterFunc]:console.warn("Persistence Write Error - invalid reader set",this.table.options.persistenceWriterFunc):this.writers[this.mode]?this.writeFunc=this.writers[this.mode]:console.warn("Persistence Write Error - invalid writer set",this.mode),this.id="tabulator-"+(o||this.table.element.getAttribute("id")||""),this.config={sort:!0===this.table.options.persistence||this.table.options.persistence.sort,filter:!0===this.table.options.persistence||this.table.options.persistence.filter,group:!0===this.table.options.persistence||this.table.options.persistence.group,page:!0===this.table.options.persistence||this.table.options.persistence.page,columns:!0===this.table.options.persistence?["title","width","visible"]:this.table.options.persistence.columns},this.config.page&&(e=this.retreiveData("page"))&&(void 0===e.paginationSize||!0!==this.config.page&&!this.config.page.size||(this.table.options.paginationSize=e.paginationSize),void 0===e.paginationInitialPage||!0!==this.config.page&&!this.config.page.page||(this.table.options.paginationInitialPage=e.paginationInitialPage)),this.config.group&&(e=this.retreiveData("group"))&&(void 0===e.groupBy||!0!==this.config.group&&!this.config.group.groupBy||(this.table.options.groupBy=e.groupBy),void 0===e.groupStartOpen||!0!==this.config.group&&!this.config.group.groupStartOpen||(this.table.options.groupStartOpen=e.groupStartOpen),void 0===e.groupHeader||!0!==this.config.group&&!this.config.group.groupHeader||(this.table.options.groupHeader=e.groupHeader))},I.prototype.initializeColumn=function(e){var t,o,i=this;this.config.columns&&(this.defWatcherBlock=!0,t=e.getDefinition(),o=!0===this.config.columns?Object.keys(t):this.config.columns,o.forEach(function(e){var o=Object.getOwnPropertyDescriptor(t,e),n=t[e];o&&Object.defineProperty(t,e,{set:function(e){n=e,i.defWatcherBlock||i.save("columns"),o.set&&o.set(e)},get:function(){return o.get&&o.get(),n}})}),this.defWatcherBlock=!1)},I.prototype.load=function(e,t){var o=this.retreiveData(e);return t&&(o=o?this.mergeDefinition(t,o):t),o},I.prototype.retreiveData=function(e){return!!this.readFunc&&this.readFunc(this.id,e)},I.prototype.mergeDefinition=function(e,t){var o=this,i=[];return t=t||[],t.forEach(function(t,n){var s,r=o._findColumn(e,t);r&&(!0===o.config.columns||void 0==o.config.columns?(s=Object.keys(r),s.push("width")):s=o.config.columns,s.forEach(function(e){void 0!==t[e]&&(r[e]=t[e])}),r.columns&&(r.columns=o.mergeDefinition(r.columns,t.columns)),i.push(r))}),e.forEach(function(e,n){o._findColumn(t,e)||(i.length>n?i.splice(n,0,e):i.push(e))}),i},I.prototype._findColumn=function(e,t){var o=t.columns?"group":t.field?"field":"object";return e.find(function(e){switch(o){case"group":return e.title===t.title&&e.columns.length===t.columns.length;case"field":return e.field===t.field;case"object":return e===t}})},I.prototype.save=function(e){var t={};switch(e){case"columns":t=this.parseColumns(this.table.columnManager.getColumns());break;case"filter":t=this.table.modules.filter.getFilters();break;case"sort":t=this.validateSorters(this.table.modules.sort.getSort());break;case"group":t=this.getGroupConfig();break;case"page":t=this.getPageConfig()}this.writeFunc&&this.writeFunc(this.id,e,t)},I.prototype.validateSorters=function(e){return e.forEach(function(e){e.column=e.field,delete e.field}),e},I.prototype.getGroupConfig=function(){return this.config.group&&((!0===this.config.group||this.config.group.groupBy)&&(data.groupBy=this.table.options.groupBy),(!0===this.config.group||this.config.group.groupStartOpen)&&(data.groupStartOpen=this.table.options.groupStartOpen),(!0===this.config.group||this.config.group.groupHeader)&&(data.groupHeader=this.table.options.groupHeader)),data},I.prototype.getPageConfig=function(){var e={};return this.config.page&&((!0===this.config.page||this.config.page.size)&&(e.paginationSize=this.table.modules.page.getPageSize()),(!0===this.config.page||this.config.page.page)&&(e.paginationInitialPage=this.table.modules.page.getPage())),e},I.prototype.parseColumns=function(e){var t=this,o=[];return e.forEach(function(e){var i,n={},s=e.getDefinition();e.isGroup?(n.title=s.title,n.columns=t.parseColumns(e.getColumns())):(n.field=e.getField(),!0===t.config.columns||void 0==t.config.columns?(i=Object.keys(s),i.push("width")):i=t.config.columns,i.forEach(function(t){switch(t){case"width":n.width=e.getWidth();break;case"visible":n.visible=e.visible;break;default:n[t]=s[t]}})),o.push(n)}),o},I.prototype.readers={local:function(e,t){var o=localStorage.getItem(e+"-"+t);return!!o&&JSON.parse(o)},cookie:function(e,t){var o,i,n=document.cookie,s=e+"-"+t,r=n.indexOf(s+"=");return r>-1&&(n=n.substr(r),o=n.indexOf(";"),o>-1&&(n=n.substr(0,o)),i=n.replace(s+"=","")),!!i&&JSON.parse(i)}},I.prototype.writers={local:function(e,t,o){localStorage.setItem(e+"-"+t,JSON.stringify(o))},cookie:function(e,t,o){var i=new Date;i.setDate(i.getDate()+1e4),document.cookie=e+"-"+t+"="+JSON.stringify(o)+"; expires="+i.toUTCString()}},d.prototype.registerModule("persistence",I);var j=function(e){this.table=e,this.element=!1,this.manualBlock=!1};j.prototype.initialize=function(){window.addEventListener("beforeprint",this.replaceTable.bind(this)),window.addEventListener("afterprint",this.cleanup.bind(this))},j.prototype.replaceTable=function(){this.manualBlock||(this.element=document.createElement("div"),this.element.classList.add("tabulator-print-table"),this.element.appendChild(this.table.modules.export.genereateTable(this.table.options.printConfig,this.table.options.printStyled,this.table.options.printRowRange,"print")),this.table.element.style.display="none",this.table.element.parentNode.insertBefore(this.element,this.table.element))},j.prototype.cleanup=function(){document.body.classList.remove("tabulator-print-fullscreen-hide"),this.element&&this.element.parentNode&&(this.element.parentNode.removeChild(this.element),this.table.element.style.display="")},j.prototype.printFullscreen=function(e,t,o){var i,n,s=window.scrollX,r=window.scrollY,a=document.createElement("div"),l=document.createElement("div"),c=this.table.modules.export.genereateTable(void 0!==o?o:this.table.options.printConfig,void 0!==t?t:this.table.options.printStyled,e,"print");this.manualBlock=!0,this.element=document.createElement("div"),this.element.classList.add("tabulator-print-fullscreen"),this.table.options.printHeader&&(a.classList.add("tabulator-print-header"),i="function"==typeof this.table.options.printHeader?this.table.options.printHeader.call(this.table):this.table.options.printHeader,"string"==typeof i?a.innerHTML=i:a.appendChild(i),this.element.appendChild(a)),this.element.appendChild(c),this.table.options.printFooter&&(l.classList.add("tabulator-print-footer"),n="function"==typeof this.table.options.printFooter?this.table.options.printFooter.call(this.table):this.table.options.printFooter,"string"==typeof n?l.innerHTML=n:l.appendChild(n),this.element.appendChild(l)),document.body.classList.add("tabulator-print-fullscreen-hide"),document.body.appendChild(this.element),this.table.options.printFormatter&&this.table.options.printFormatter(this.element,c),window.print(),this.cleanup(),window.scrollTo(s,r),this.manualBlock=!1},d.prototype.registerModule("print",j);var V=function(e){this.table=e,this.data=!1,this.blocked=!1,this.origFuncs={},this.currentVersion=0};V.prototype.watchData=function(e){var t,o=this;this.currentVersion++,t=this.currentVersion,o.unwatchData(),o.data=e,o.origFuncs.push=e.push,Object.defineProperty(o.data,"push",{enumerable:!1,configurable:!0,value:function(){var i=Array.from(arguments);return o.blocked||t!==o.currentVersion||i.forEach(function(e){o.table.rowManager.addRowActual(e,!1)}),o.origFuncs.push.apply(e,arguments)}}),o.origFuncs.unshift=e.unshift,Object.defineProperty(o.data,"unshift",{enumerable:!1,configurable:!0,value:function(){var i=Array.from(arguments);return o.blocked||t!==o.currentVersion||i.forEach(function(e){o.table.rowManager.addRowActual(e,!0)}),o.origFuncs.unshift.apply(e,arguments)}}),o.origFuncs.shift=e.shift,Object.defineProperty(o.data,"shift",{enumerable:!1,configurable:!0,value:function(){var i;return o.blocked||t!==o.currentVersion||o.data.length&&(i=o.table.rowManager.getRowFromDataObject(o.data[0]))&&i.deleteActual(),o.origFuncs.shift.call(e)}}),o.origFuncs.pop=e.pop,Object.defineProperty(o.data,"pop",{enumerable:!1,configurable:!0,value:function(){var i;return o.blocked||t!==o.currentVersion||o.data.length&&(i=o.table.rowManager.getRowFromDataObject(o.data[o.data.length-1]))&&i.deleteActual(),o.origFuncs.pop.call(e)}}),o.origFuncs.splice=e.splice,Object.defineProperty(o.data,"splice",{enumerable:!1,configurable:!0,value:function(){var i,n=Array.from(arguments),s=n[0]<0?e.length+n[0]:n[0],r=n[1],a=!!n[2]&&n.slice(2);if(!o.blocked&&t===o.currentVersion){if(a&&(i=!!e[s]&&o.table.rowManager.getRowFromDataObject(e[s]),i?a.forEach(function(e){o.table.rowManager.addRowActual(e,!0,i,!0)}):(a=a.slice().reverse(),a.forEach(function(e){o.table.rowManager.addRowActual(e,!0,!1,!0)}))),0!==r){var l=e.slice(s,void 0===n[1]?n[1]:s+r);l.forEach(function(e,t){var i=o.table.rowManager.getRowFromDataObject(e);i&&i.deleteActual(t!==l.length-1)})}(a||0!==r)&&o.table.rowManager.reRenderInPosition()}return o.origFuncs.splice.apply(e,arguments)}})},V.prototype.unwatchData=function(){if(!1!==this.data)for(var e in this.origFuncs)Object.defineProperty(this.data,e,{enumerable:!0,configurable:!0,writable:!0,value:this.origFuncs.key})},V.prototype.watchRow=function(e){var t=e.getData();this.blocked=!0;for(var o in t)this.watchKey(e,t,o);this.blocked=!1},V.prototype.watchKey=function(e,t,o){var i=this,n=Object.getOwnPropertyDescriptor(t,o),s=t[o],r=this.currentVersion;Object.defineProperty(t,o,{set:function(t){if(s=t,!i.blocked&&r===i.currentVersion){var a={};a[o]=t,e.updateData(a)}n.set&&n.set(t)},get:function(){return n.get&&n.get(),s}})},V.prototype.unwatchRow=function(e){var t=e.getData();for(var o in t)Object.defineProperty(t,o,{value:t[o]})},V.prototype.block=function(){this.blocked=!0},V.prototype.unblock=function(){this.blocked=!1},d.prototype.registerModule("reactiveData",V);var W=function(e){this.table=e,this.startColumn=!1,this.startX=!1,this.startWidth=!1,this.handle=null,this.prevHandle=null};W.prototype.initializeColumn=function(e,t,o){var i=this,n=!1,s=this.table.options.resizableColumns;if("header"===e&&(n="textarea"==t.definition.formatter||t.definition.variableHeight,t.modules.resize={variableHeight:n}),!0===s||s==e){var r=document.createElement("div");r.className="tabulator-col-resize-handle";var a=document.createElement("div");a.className="tabulator-col-resize-handle prev",r.addEventListener("click",function(e){e.stopPropagation()});var l=function(e){var o=t.getLastColumn();o&&i._checkResizability(o)&&(i.startColumn=t,i._mouseDown(e,o,r))};r.addEventListener("mousedown",l),r.addEventListener("touchstart",l,{passive:!0}),r.addEventListener("dblclick",function(e){var o=t.getLastColumn();o&&i._checkResizability(o)&&(e.stopPropagation(),o.reinitializeWidth(!0))}),a.addEventListener("click",function(e){e.stopPropagation()});var c=function(e){var o,n,s;(o=t.getFirstColumn())&&(n=i.table.columnManager.findColumnIndex(o),(s=n>0&&i.table.columnManager.getColumnByIndex(n-1))&&i._checkResizability(s)&&(i.startColumn=t,i._mouseDown(e,s,a)))};a.addEventListener("mousedown",c),a.addEventListener("touchstart",c,{passive:!0}),a.addEventListener("dblclick",function(e){var o,n,s;(o=t.getFirstColumn())&&(n=i.table.columnManager.findColumnIndex(o),(s=n>0&&i.table.columnManager.getColumnByIndex(n-1))&&i._checkResizability(s)&&(e.stopPropagation(),s.reinitializeWidth(!0)))}),o.appendChild(r),o.appendChild(a)}},W.prototype._checkResizability=function(e){return void 0!==e.definition.resizable?e.definition.resizable:this.table.options.resizableColumns},W.prototype._mouseDown=function(e,t,o){function i(e){t.setWidth(s.startWidth+((void 0===e.screenX?e.touches[0].screenX:e.screenX)-s.startX)),!s.table.browserSlow&&t.modules.resize&&t.modules.resize.variableHeight&&t.checkCellHeights()}function n(e){s.startColumn.modules.edit&&(s.startColumn.modules.edit.blocked=!1),s.table.browserSlow&&t.modules.resize&&t.modules.resize.variableHeight&&t.checkCellHeights(),document.body.removeEventListener("mouseup",n),document.body.removeEventListener("mousemove",i),o.removeEventListener("touchmove",i),o.removeEventListener("touchend",n),s.table.element.classList.remove("tabulator-block-select"),s.table.options.persistence&&s.table.modExists("persistence",!0)&&s.table.modules.persistence.config.columns&&s.table.modules.persistence.save("columns"),s.table.options.columnResized.call(s.table,t.getComponent())}var s=this;s.table.element.classList.add("tabulator-block-select"),e.stopPropagation(),s.startColumn.modules.edit&&(s.startColumn.modules.edit.blocked=!0),s.startX=void 0===e.screenX?e.touches[0].screenX:e.screenX,s.startWidth=t.getWidth(),document.body.addEventListener("mousemove",i),document.body.addEventListener("mouseup",n),o.addEventListener("touchmove",i,{passive:!0}),o.addEventListener("touchend",n)},d.prototype.registerModule("resizeColumns",W);var G=function(e){this.table=e,this.startColumn=!1,this.startY=!1,this.startHeight=!1,this.handle=null,this.prevHandle=null};G.prototype.initializeRow=function(e){var t=this,o=e.getElement(),i=document.createElement("div");i.className="tabulator-row-resize-handle";var n=document.createElement("div");n.className="tabulator-row-resize-handle prev",i.addEventListener("click",function(e){e.stopPropagation()});var s=function(o){t.startRow=e,t._mouseDown(o,e,i)};i.addEventListener("mousedown",s),i.addEventListener("touchstart",s,{passive:!0}),n.addEventListener("click",function(e){e.stopPropagation()});var r=function(o){var i=t.table.rowManager.prevDisplayRow(e);i&&(t.startRow=i,t._mouseDown(o,i,n))};n.addEventListener("mousedown",r),n.addEventListener("touchstart",r,{passive:!0}),o.appendChild(i),o.appendChild(n)},G.prototype._mouseDown=function(e,t,o){function i(e){t.setHeight(s.startHeight+((void 0===e.screenY?e.touches[0].screenY:e.screenY)-s.startY))}function n(e){document.body.removeEventListener("mouseup",i),document.body.removeEventListener("mousemove",i),o.removeEventListener("touchmove",i),o.removeEventListener("touchend",n),s.table.element.classList.remove("tabulator-block-select"),s.table.options.rowResized.call(this.table,t.getComponent())}var s=this;s.table.element.classList.add("tabulator-block-select"),e.stopPropagation(),s.startY=void 0===e.screenY?e.touches[0].screenY:e.screenY,s.startHeight=t.getHeight(),document.body.addEventListener("mousemove",i),document.body.addEventListener("mouseup",n),o.addEventListener("touchmove",i,{passive:!0}),o.addEventListener("touchend",n)},d.prototype.registerModule("resizeRows",G);var U=function(e){this.table=e,this.binding=!1,this.observer=!1,this.containerObserver=!1,this.tableHeight=0,this.tableWidth=0,this.containerHeight=0,this.containerWidth=0,this.autoResize=!1};U.prototype.initialize=function(e){var t,o=this,i=this.table;this.tableHeight=i.element.clientHeight,this.tableWidth=i.element.clientWidth,i.element.parentNode&&(this.containerHeight=i.element.parentNode.clientHeight,this.containerWidth=i.element.parentNode.clientWidth),"undefined"!=typeof ResizeObserver&&"virtual"===i.rowManager.getRenderMode()?(this.autoResize=!0,this.observer=new ResizeObserver(function(e){if(!i.browserMobile||i.browserMobile&&!i.modules.edit.currentCell){var t=Math.floor(e[0].contentRect.height),n=Math.floor(e[0].contentRect.width);o.tableHeight==t&&o.tableWidth==n||(o.tableHeight=t,o.tableWidth=n,i.element.parentNode&&(o.containerHeight=i.element.parentNode.clientHeight,o.containerWidth=i.element.parentNode.clientWidth),i.redraw())}}),this.observer.observe(i.element),t=window.getComputedStyle(i.element),this.table.element.parentNode&&!this.table.rowManager.fixedHeight&&(t.getPropertyValue("max-height")||t.getPropertyValue("min-height"))&&(this.containerObserver=new ResizeObserver(function(e){if(!i.browserMobile||i.browserMobile&&!i.modules.edit.currentCell){var t=Math.floor(e[0].contentRect.height),n=Math.floor(e[0].contentRect.width);o.containerHeight==t&&o.containerWidth==n||(o.containerHeight=t,o.containerWidth=n,o.tableHeight=i.element.clientHeight,o.tableWidth=i.element.clientWidth,i.redraw()),i.redraw()}}),this.containerObserver.observe(this.table.element.parentNode))):(this.binding=function(){(!i.browserMobile||i.browserMobile&&!i.modules.edit.currentCell)&&i.redraw()},window.addEventListener("resize",this.binding))},U.prototype.clearBindings=function(e){this.binding&&window.removeEventListener("resize",this.binding),this.observer&&this.observer.unobserve(this.table.element),this.containerObserver&&this.containerObserver.unobserve(this.table.element.parentNode)},d.prototype.registerModule("resizeTable",U);var Y=function(e){this.table=e,this.columns=[],this.hiddenColumns=[],this.mode="",this.index=0,this.collapseFormatter=[],this.collapseStartOpen=!0,this.collapseHandleColumn=!1};Y.prototype.initialize=function(){var e=this,t=[];this.mode=this.table.options.responsiveLayout,this.collapseFormatter=this.table.options.responsiveLayoutCollapseFormatter||this.formatCollapsedData,this.collapseStartOpen=this.table.options.responsiveLayoutCollapseStartOpen,this.hiddenColumns=[],this.table.columnManager.columnsByIndex.forEach(function(o,i){o.modules.responsive&&o.modules.responsive.order&&o.modules.responsive.visible&&(o.modules.responsive.index=i,t.push(o),o.visible||"collapse"!==e.mode||e.hiddenColumns.push(o))}),t=t.reverse(),t=t.sort(function(e,t){return t.modules.responsive.order-e.modules.responsive.order||t.modules.responsive.index-e.modules.responsive.index}),this.columns=t,"collapse"===this.mode&&this.generateCollapsedContent();for(var o=this.table.columnManager.columnsByIndex,i=Array.isArray(o),n=0,o=i?o:o[Symbol.iterator]();;){var s;if(i){if(n>=o.length)break;s=o[n++]}else{if(n=o.next(),n.done)break;s=n.value}var r=s;if("responsiveCollapse"==r.definition.formatter){this.collapseHandleColumn=r;break}}this.collapseHandleColumn&&(this.hiddenColumns.length?this.collapseHandleColumn.show():this.collapseHandleColumn.hide())},Y.prototype.initializeColumn=function(e){var t=e.getDefinition();e.modules.responsive={order:void 0===t.responsive?1:t.responsive,visible:!1!==t.visible}},Y.prototype.initializeRow=function(e){var t;"calc"!==e.type&&(t=document.createElement("div"),t.classList.add("tabulator-responsive-collapse"),e.modules.responsiveLayout={element:t,open:this.collapseStartOpen},this.collapseStartOpen||(t.style.display="none"))},Y.prototype.layoutRow=function(e){var t=e.getElement();e.modules.responsiveLayout&&(t.appendChild(e.modules.responsiveLayout.element),this.generateCollapsedRowContent(e))},Y.prototype.updateColumnVisibility=function(e,t){e.modules.responsive&&(e.modules.responsive.visible=t,this.initialize())},Y.prototype.hideColumn=function(e){var t=this.hiddenColumns.length;e.hide(!1,!0),"collapse"===this.mode&&(this.hiddenColumns.unshift(e),this.generateCollapsedContent(),this.collapseHandleColumn&&!t&&this.collapseHandleColumn.show())},Y.prototype.showColumn=function(e){var t;e.show(!1,!0),e.setWidth(e.getWidth()),"collapse"===this.mode&&(t=this.hiddenColumns.indexOf(e),t>-1&&this.hiddenColumns.splice(t,1),this.generateCollapsedContent(),this.collapseHandleColumn&&!this.hiddenColumns.length&&this.collapseHandleColumn.hide())},Y.prototype.update=function(){for(var e=this,t=!0;t;){var o="fitColumns"==e.table.modules.layout.getMode()?e.table.columnManager.getFlexBaseWidth():e.table.columnManager.getWidth(),i=(e.table.options.headerVisible?e.table.columnManager.element.clientWidth:e.table.element.clientWidth)-o;if(i<0){var n=e.columns[e.index];n?(e.hideColumn(n),e.index++):t=!1}else{var s=e.columns[e.index-1]
+;s&&i>0&&i>=s.getWidth()?(e.showColumn(s),e.index--):t=!1}e.table.rowManager.activeRowsCount||e.table.rowManager.renderEmptyScroll()}},Y.prototype.generateCollapsedContent=function(){var e=this;this.table.rowManager.getDisplayRows().forEach(function(t){e.generateCollapsedRowContent(t)})},Y.prototype.generateCollapsedRowContent=function(e){var t,o;if(e.modules.responsiveLayout){for(t=e.modules.responsiveLayout.element;t.firstChild;)t.removeChild(t.firstChild);o=this.collapseFormatter(this.generateCollapsedRowData(e)),o&&t.appendChild(o)}},Y.prototype.generateCollapsedRowData=function(e){var t,o=this,i=e.getData(),n=[];return this.hiddenColumns.forEach(function(s){var r=s.getFieldValue(i);s.definition.title&&s.field&&(s.modules.format&&o.table.options.responsiveLayoutCollapseUseFormatters?(t={value:!1,data:{},getValue:function(){return r},getData:function(){return i},getElement:function(){return document.createElement("div")},getRow:function(){return e.getComponent()},getColumn:function(){return s.getComponent()}},n.push({title:s.definition.title,value:s.modules.format.formatter.call(o.table.modules.format,t,s.modules.format.params)})):n.push({title:s.definition.title,value:r}))}),n},Y.prototype.formatCollapsedData=function(e){var t=document.createElement("table"),o="";return e.forEach(function(e){var t=document.createElement("div");e.value instanceof Node&&(t.appendChild(e.value),e.value=t.innerHTML),o+="<tr><td><strong>"+e.title+"</strong></td><td>"+e.value+"</td></tr>"}),t.innerHTML=o,Object.keys(e).length?t:""},d.prototype.registerModule("responsiveLayout",Y);var q=function(e){this.table=e,this.selecting=!1,this.lastClickedRow=!1,this.selectPrev=[],this.selectedRows=[],this.headerCheckboxElement=null};q.prototype.clearSelectionData=function(e){this.selecting=!1,this.lastClickedRow=!1,this.selectPrev=[],this.selectedRows=[],e||this._rowSelectionChanged()},q.prototype.initializeRow=function(e){var t=this,o=e.getElement(),i=function e(){setTimeout(function(){t.selecting=!1},50),document.body.removeEventListener("mouseup",e)};e.modules.select={selected:!1},t.table.options.selectableCheck.call(this.table,e.getComponent())?(o.classList.add("tabulator-selectable"),o.classList.remove("tabulator-unselectable"),t.table.options.selectable&&"highlight"!=t.table.options.selectable&&("click"===t.table.options.selectableRangeMode?o.addEventListener("click",function(o){if(o.shiftKey){t.table._clearSelection(),t.lastClickedRow=t.lastClickedRow||e;var i=t.table.rowManager.getDisplayRowIndex(t.lastClickedRow),n=t.table.rowManager.getDisplayRowIndex(e),s=i<=n?i:n,r=i>=n?i:n,a=t.table.rowManager.getDisplayRows().slice(0),l=a.splice(s,r-s+1);o.ctrlKey||o.metaKey?(l.forEach(function(o){o!==t.lastClickedRow&&(!0===t.table.options.selectable||t.isRowSelected(e)?t.toggleRow(o):t.selectedRows.length<t.table.options.selectable&&t.toggleRow(o))}),t.lastClickedRow=e):(t.deselectRows(void 0,!0),!0!==t.table.options.selectable&&l.length>t.table.options.selectable&&(l=l.slice(0,t.table.options.selectable)),t.selectRows(l)),t.table._clearSelection()}else o.ctrlKey||o.metaKey?(t.toggleRow(e),t.lastClickedRow=e):(t.deselectRows(void 0,!0),t.selectRows(e),t.lastClickedRow=e)}):(o.addEventListener("click",function(o){t.table.modExists("edit")&&t.table.modules.edit.getCurrentCell()||t.table._clearSelection(),t.selecting||t.toggleRow(e)}),o.addEventListener("mousedown",function(o){if(o.shiftKey)return t.table._clearSelection(),t.selecting=!0,t.selectPrev=[],document.body.addEventListener("mouseup",i),document.body.addEventListener("keyup",i),t.toggleRow(e),!1}),o.addEventListener("mouseenter",function(o){t.selecting&&(t.table._clearSelection(),t.toggleRow(e),t.selectPrev[1]==e&&t.toggleRow(t.selectPrev[0]))}),o.addEventListener("mouseout",function(o){t.selecting&&(t.table._clearSelection(),t.selectPrev.unshift(e))})))):(o.classList.add("tabulator-unselectable"),o.classList.remove("tabulator-selectable"))},q.prototype.toggleRow=function(e){this.table.options.selectableCheck.call(this.table,e.getComponent())&&(e.modules.select&&e.modules.select.selected?this._deselectRow(e):this._selectRow(e))},q.prototype.selectRows=function(e){var t,o=this;switch(void 0===e?"undefined":_typeof(e)){case"undefined":this.table.rowManager.rows.forEach(function(e){o._selectRow(e,!0,!0)}),this._rowSelectionChanged();break;case"string":t=this.table.rowManager.findRow(e),t?this._selectRow(t,!0,!0):this.table.rowManager.getRows(e).forEach(function(e){o._selectRow(e,!0,!0)}),this._rowSelectionChanged();break;default:Array.isArray(e)?(e.forEach(function(e){o._selectRow(e,!0,!0)}),this._rowSelectionChanged()):this._selectRow(e,!1,!0)}},q.prototype._selectRow=function(e,t,o){if(!isNaN(this.table.options.selectable)&&!0!==this.table.options.selectable&&!o&&this.selectedRows.length>=this.table.options.selectable){if(!this.table.options.selectableRollingSelection)return!1;this._deselectRow(this.selectedRows[0])}var i=this.table.rowManager.findRow(e);i?-1==this.selectedRows.indexOf(i)&&(i.modules.select||(i.modules.select={}),i.modules.select.selected=!0,i.modules.select.checkboxEl&&(i.modules.select.checkboxEl.checked=!0),i.getElement().classList.add("tabulator-selected"),this.selectedRows.push(i),this.table.options.dataTreeSelectPropagate&&this.childRowSelection(i,!0),t||this.table.options.rowSelected.call(this.table,i.getComponent()),this._rowSelectionChanged(t)):t||console.warn("Selection Error - No such row found, ignoring selection:"+e)},q.prototype.isRowSelected=function(e){return-1!==this.selectedRows.indexOf(e)},q.prototype.deselectRows=function(e,t){var o,i=this;if(void 0===e){o=i.selectedRows.length;for(var n=0;n<o;n++)i._deselectRow(i.selectedRows[0],!0);i._rowSelectionChanged(t)}else Array.isArray(e)?(e.forEach(function(e){i._deselectRow(e,!0)}),i._rowSelectionChanged(t)):i._deselectRow(e,t)},q.prototype._deselectRow=function(e,t){var o,i=this,n=i.table.rowManager.findRow(e);n?(o=i.selectedRows.findIndex(function(e){return e==n}))>-1&&(n.modules.select||(n.modules.select={}),n.modules.select.selected=!1,n.modules.select.checkboxEl&&(n.modules.select.checkboxEl.checked=!1),n.getElement().classList.remove("tabulator-selected"),i.selectedRows.splice(o,1),this.table.options.dataTreeSelectPropagate&&this.childRowSelection(n,!1),t||i.table.options.rowDeselected.call(this.table,n.getComponent()),i._rowSelectionChanged(t)):t||console.warn("Deselection Error - No such row found, ignoring selection:"+e)},q.prototype.getSelectedData=function(){var e=[];return this.selectedRows.forEach(function(t){e.push(t.getData())}),e},q.prototype.getSelectedRows=function(){var e=[];return this.selectedRows.forEach(function(t){e.push(t.getComponent())}),e},q.prototype._rowSelectionChanged=function(e){this.headerCheckboxElement&&(0===this.selectedRows.length?(this.headerCheckboxElement.checked=!1,this.headerCheckboxElement.indeterminate=!1):this.table.rowManager.rows.length===this.selectedRows.length?(this.headerCheckboxElement.checked=!0,this.headerCheckboxElement.indeterminate=!1):(this.headerCheckboxElement.indeterminate=!0,this.headerCheckboxElement.checked=!1)),e||this.table.options.rowSelectionChanged.call(this.table,this.getSelectedData(),this.getSelectedRows())},q.prototype.registerRowSelectCheckbox=function(e,t){e._row.modules.select||(e._row.modules.select={}),e._row.modules.select.checkboxEl=t},q.prototype.registerHeaderSelectCheckbox=function(e){this.headerCheckboxElement=e},q.prototype.childRowSelection=function(e,t){var o=this.table.modules.dataTree.getChildren(e);if(t)for(var i=o,n=Array.isArray(i),s=0,i=n?i:i[Symbol.iterator]();;){var r;if(n){if(s>=i.length)break;r=i[s++]}else{if(s=i.next(),s.done)break;r=s.value}var a=r;this._selectRow(a,!0)}else for(var l=o,c=Array.isArray(l),u=0,l=c?l:l[Symbol.iterator]();;){var d;if(c){if(u>=l.length)break;d=l[u++]}else{if(u=l.next(),u.done)break;d=u.value}var h=d;this._deselectRow(h,!0)}},d.prototype.registerModule("selectRow",q);var X=function(e){this.table=e,this.sortList=[],this.changed=!1};X.prototype.initializeColumn=function(e,t){var o,i,n=this,s=!1;switch(_typeof(e.definition.sorter)){case"string":n.sorters[e.definition.sorter]?s=n.sorters[e.definition.sorter]:console.warn("Sort Error - No such sorter found: ",e.definition.sorter);break;case"function":s=e.definition.sorter}e.modules.sort={sorter:s,dir:"none",params:e.definition.sorterParams||{},startingDir:e.definition.headerSortStartingDir||"asc",tristate:void 0!==e.definition.headerSortTristate?e.definition.headerSortTristate:this.table.options.headerSortTristate},(void 0===e.definition.headerSort?!1!==this.table.options.headerSort:!1!==e.definition.headerSort)&&(o=e.getElement(),o.classList.add("tabulator-sortable"),i=document.createElement("div"),i.classList.add("tabulator-arrow"),t.appendChild(i),o.addEventListener("click",function(t){var o="",i=[],s=!1;if(e.modules.sort){if(e.modules.sort.tristate)o="none"==e.modules.sort.dir?e.modules.sort.startingDir:e.modules.sort.dir==e.modules.sort.startingDir?"asc"==e.modules.sort.dir?"desc":"asc":"none";else switch(e.modules.sort.dir){case"asc":o="desc";break;case"desc":o="asc";break;default:o=e.modules.sort.startingDir}n.table.options.columnHeaderSortMulti&&(t.shiftKey||t.ctrlKey)?(i=n.getSort(),s=i.findIndex(function(t){return t.field===e.getField()}),s>-1?(i[s].dir=o,s!=i.length-1&&(s=i.splice(s,1)[0],"none"!=o&&i.push(s))):"none"!=o&&i.push({column:e,dir:o}),n.setSort(i)):"none"==o?n.clear():n.setSort(e,o),n.table.rowManager.sorterRefresh(!n.sortList.length)}}))},X.prototype.hasChanged=function(){var e=this.changed;return this.changed=!1,e},X.prototype.getSort=function(){var e=this,t=[];return e.sortList.forEach(function(e){e.column&&t.push({column:e.column.getComponent(),field:e.column.getField(),dir:e.dir})}),t},X.prototype.setSort=function(e,t){var o=this,i=[];Array.isArray(e)||(e=[{column:e,dir:t}]),e.forEach(function(e){var t;t=o.table.columnManager.findColumn(e.column),t?(e.column=t,i.push(e),o.changed=!0):console.warn("Sort Warning - Sort field does not exist and is being ignored: ",e.column)}),o.sortList=i,this.table.options.persistence&&this.table.modExists("persistence",!0)&&this.table.modules.persistence.config.sort&&this.table.modules.persistence.save("sort")},X.prototype.clear=function(){this.setSort([])},X.prototype.findSorter=function(e){var t,o=this.table.rowManager.activeRows[0],i="string";if(o&&(o=o.getData(),e.getField()))switch(t=e.getFieldValue(o),void 0===t?"undefined":_typeof(t)){case"undefined":i="string";break;case"boolean":i="boolean";break;default:isNaN(t)||""===t?t.match(/((^[0-9]+[a-z]+)|(^[a-z]+[0-9]+))+$/i)&&(i="alphanum"):i="number"}return this.sorters[i]},X.prototype.sort=function(e){var t=this,o=this.table.options.sortOrderReverse?t.sortList.slice().reverse():t.sortList,i=[],n=[];t.table.options.dataSorting&&t.table.options.dataSorting.call(t.table,t.getSort()),t.clearColumnHeaders(),t.table.options.ajaxSorting?o.forEach(function(e,o){t.setColumnHeader(e.column,e.dir)}):(o.forEach(function(e,o){var n=e.column.modules.sort;e.column&&n&&(n.sorter||(n.sorter=t.findSorter(e.column)),e.params="function"==typeof n.params?n.params(e.column.getComponent(),e.dir):n.params,i.push(e)),t.setColumnHeader(e.column,e.dir)}),i.length&&t._sortItems(e,i)),t.table.options.dataSorted&&(e.forEach(function(e){n.push(e.getComponent())}),t.table.options.dataSorted.call(t.table,t.getSort(),n))},X.prototype.clearColumnHeaders=function(){this.table.columnManager.getRealColumns().forEach(function(e){e.modules.sort&&(e.modules.sort.dir="none",e.getElement().setAttribute("aria-sort","none"))})},X.prototype.setColumnHeader=function(e,t){e.modules.sort.dir=t,e.getElement().setAttribute("aria-sort",t)},X.prototype._sortItems=function(e,t){var o=this,i=t.length-1;e.sort(function(e,n){for(var s,r=i;r>=0;r--){var a=t[r];if(0!==(s=o._sortRow(e,n,a.column,a.dir,a.params)))break}return s})},X.prototype._sortRow=function(e,t,o,i,n){var s,r,a="asc"==i?e:t,l="asc"==i?t:e;return e=o.getFieldValue(a.getData()),t=o.getFieldValue(l.getData()),e=void 0!==e?e:"",t=void 0!==t?t:"",s=a.getComponent(),r=l.getComponent(),o.modules.sort.sorter.call(this,e,t,s,r,o.getComponent(),i,n)},X.prototype.sorters={number:function(e,t,o,i,n,s,r){var a=r.alignEmptyValues,l=r.decimalSeparator||".",c=r.thousandSeparator||",",u=0;if(e=parseFloat(String(e).split(c).join("").split(l).join(".")),t=parseFloat(String(t).split(c).join("").split(l).join(".")),isNaN(e))u=isNaN(t)?0:-1;else{if(!isNaN(t))return e-t;u=1}return("top"===a&&"desc"===s||"bottom"===a&&"asc"===s)&&(u*=-1),u},string:function(e,t,o,i,n,s,r){var a,l=r.alignEmptyValues,c=0;if(e){if(t){switch(_typeof(r.locale)){case"boolean":r.locale&&(a=this.table.modules.localize.getLocale());break;case"string":a=r.locale}return String(e).toLowerCase().localeCompare(String(t).toLowerCase(),a)}c=1}else c=t?-1:0;return("top"===l&&"desc"===s||"bottom"===l&&"asc"===s)&&(c*=-1),c},date:function(e,t,o,i,n,s,r){return r.format||(r.format="DD/MM/YYYY"),this.sorters.datetime.call(this,e,t,o,i,n,s,r)},time:function(e,t,o,i,n,s,r){return r.format||(r.format="HH:mm"),this.sorters.datetime.call(this,e,t,o,i,n,s,r)},datetime:function(e,t,o,i,n,s,r){var a=r.format||"DD/MM/YYYY HH:mm:ss",l=r.alignEmptyValues,c=0;if("undefined"!=typeof moment){if(e=moment(e,a),t=moment(t,a),e.isValid()){if(t.isValid())return e-t;c=1}else c=t.isValid()?-1:0;return("top"===l&&"desc"===s||"bottom"===l&&"asc"===s)&&(c*=-1),c}console.error("Sort Error - 'datetime' sorter is dependant on moment.js")},boolean:function(e,t,o,i,n,s,r){return(!0===e||"true"===e||"True"===e||1===e?1:0)-(!0===t||"true"===t||"True"===t||1===t?1:0)},array:function(e,t,o,i,n,s,r){function a(e){switch(u){case"length":return e.length;case"sum":return e.reduce(function(e,t){return e+t});case"max":return Math.max.apply(null,e);case"min":return Math.min.apply(null,e);case"avg":return e.reduce(function(e,t){return e+t})/e.length}}var l=0,c=0,u=r.type||"length",d=r.alignEmptyValues,h=0;if(Array.isArray(e)){if(Array.isArray(t))return l=e?a(e):0,c=t?a(t):0,l-c;d=1}else d=Array.isArray(t)?-1:0;return("top"===d&&"desc"===s||"bottom"===d&&"asc"===s)&&(h*=-1),h},exists:function(e,t,o,i,n,s,r){return(void 0===e?0:1)-(void 0===t?0:1)},alphanum:function(e,t,o,i,n,s,r){var a,l,c,u,d,h=0,p=/(\d+)|(\D+)/g,m=/\d/,f=r.alignEmptyValues,g=0;if(e||0===e){if(t||0===t){if(isFinite(e)&&isFinite(t))return e-t;if(a=String(e).toLowerCase(),l=String(t).toLowerCase(),a===l)return 0;if(!m.test(a)||!m.test(l))return a>l?1:-1;for(a=a.match(p),l=l.match(p),d=a.length>l.length?l.length:a.length;h<d;)if(c=a[h],u=l[h++],c!==u)return isFinite(c)&&isFinite(u)?("0"===c.charAt(0)&&(c="."+c),"0"===u.charAt(0)&&(u="."+u),c-u):c>u?1:-1;return a.length>l.length}g=1}else g=t||0===t?-1:0;return("top"===f&&"desc"===s||"bottom"===f&&"asc"===s)&&(g*=-1),g}},d.prototype.registerModule("sort",X);var K=function(e){this.table=e,this.invalidCells=[]};return K.prototype.initializeColumn=function(e){var t,o=this,i=[];e.definition.validator&&(Array.isArray(e.definition.validator)?e.definition.validator.forEach(function(e){(t=o._extractValidator(e))&&i.push(t)}):(t=this._extractValidator(e.definition.validator))&&i.push(t),e.modules.validate=!!i.length&&i)},K.prototype._extractValidator=function(e){var t,o,i;switch(void 0===e?"undefined":_typeof(e)){case"string":return i=e.indexOf(":"),i>-1?(t=e.substring(0,i),o=e.substring(i+1)):t=e,this._buildValidator(t,o);case"function":return this._buildValidator(e);case"object":return this._buildValidator(e.type,e.parameters)}},K.prototype._buildValidator=function(e,t){var o="function"==typeof e?e:this.validators[e];return o?{type:"function"==typeof e?"function":e,func:o,params:t}:(console.warn("Validator Setup Error - No matching validator found:",e),!1)},K.prototype.validate=function(e,t,o){var i=this,n=[],s=this.invalidCells.indexOf(t);return e&&e.forEach(function(e){e.func.call(i,t.getComponent(),o,e.params)||n.push({type:e.type,parameters:e.params})}),n=!n.length||n,t.modules.validate||(t.modules.validate={}),!0===n?(t.modules.validate.invalid=!1,t.getElement().classList.remove("tabulator-validation-fail"),s>-1&&this.invalidCells.splice(s,1)):(t.modules.validate.invalid=!0,"manual"!==this.table.options.validationMode&&t.getElement().classList.add("tabulator-validation-fail"),-1==s&&this.invalidCells.push(t)),n},K.prototype.getInvalidCells=function(){var e=[];return this.invalidCells.forEach(function(t){e.push(t.getComponent())}),e},K.prototype.clearValidation=function(e){var t;e.modules.validate&&e.modules.validate.invalid&&(e.element.classList.remove("tabulator-validation-fail"),e.modules.validate.invalid=!1,(t=this.invalidCells.indexOf(e))>-1&&this.invalidCells.splice(t,1))},K.prototype.validators={integer:function(e,t,o){return""===t||null===t||void 0===t||"number"==typeof(t=Number(t))&&isFinite(t)&&Math.floor(t)===t},float:function(e,t,o){return""===t||null===t||void 0===t||"number"==typeof(t=Number(t))&&isFinite(t)&&t%1!=0},numeric:function(e,t,o){return""===t||null===t||void 0===t||!isNaN(t)},string:function(e,t,o){return""===t||null===t||void 0===t||isNaN(t)},max:function(e,t,o){return""===t||null===t||void 0===t||parseFloat(t)<=o},min:function(e,t,o){return""===t||null===t||void 0===t||parseFloat(t)>=o},starts:function(e,t,o){return""===t||null===t||void 0===t||String(t).toLowerCase().startsWith(String(o).toLowerCase())},ends:function(e,t,o){return""===t||null===t||void 0===t||String(t).toLowerCase().endsWith(String(o).toLowerCase())},minLength:function(e,t,o){return""===t||null===t||void 0===t||String(t).length>=o},maxLength:function(e,t,o){return""===t||null===t||void 0===t||String(t).length<=o},in:function(e,t,o){return""===t||null===t||void 0===t||("string"==typeof o&&(o=o.split("|")),""===t||o.indexOf(t)>-1)},regex:function(e,t,o){return""===t||null===t||void 0===t||new RegExp(o).test(t)},unique:function(e,t,o){if(""===t||null===t||void 0===t)return!0;var i=!0,n=e.getData(),s=e.getColumn()._getSelf();return this.table.rowManager.rows.forEach(function(e){var o=e.getData();o!==n&&t==s.getFieldValue(o)&&(i=!1)}),i},required:function(e,t,o){return""!==t&&null!==t&&void 0!==t}},d.prototype.registerModule("validate",K),d});
\ No newline at end of file
diff --git a/admin/js/vendors/tabulator/js/tabulator_core.js b/admin/js/vendors/tabulator/js/tabulator_core.js
new file mode 100644 (file)
index 0000000..1c4797a
--- /dev/null
@@ -0,0 +1,8906 @@
+/* Tabulator v4.7.0 (c) Oliver Folkerd */
+
+'use strict';
+
+// https://tc39.github.io/ecma262/#sec-array.prototype.findIndex
+
+var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
+
+if (!Array.prototype.findIndex) {
+
+       Object.defineProperty(Array.prototype, 'findIndex', {
+
+               value: function value(predicate) {
+
+                       // 1. Let O be ? ToObject(this value).
+
+                       if (this == null) {
+
+                               throw new TypeError('"this" is null or not defined');
+                       }
+
+                       var o = Object(this);
+
+                       // 2. Let len be ? ToLength(? Get(O, "length")).
+
+                       var len = o.length >>> 0;
+
+                       // 3. If IsCallable(predicate) is false, throw a TypeError exception.
+
+                       if (typeof predicate !== 'function') {
+
+                               throw new TypeError('predicate must be a function');
+                       }
+
+                       // 4. If thisArg was supplied, let T be thisArg; else let T be undefined.
+
+                       var thisArg = arguments[1];
+
+                       // 5. Let k be 0.
+
+                       var k = 0;
+
+                       // 6. Repeat, while k < len
+
+                       while (k < len) {
+
+                               // a. Let Pk be ! ToString(k).
+
+                               // b. Let kValue be ? Get(O, Pk).
+
+                               // c. Let testResult be ToBoolean(? Call(predicate, T, « kValue, k, O »)).
+
+                               // d. If testResult is true, return k.
+
+                               var kValue = o[k];
+
+                               if (predicate.call(thisArg, kValue, k, o)) {
+
+                                       return k;
+                               }
+
+                               // e. Increase k by 1.
+
+                               k++;
+                       }
+
+                       // 7. Return -1.
+
+                       return -1;
+               }
+
+       });
+}
+
+// https://tc39.github.io/ecma262/#sec-array.prototype.find
+
+if (!Array.prototype.find) {
+
+       Object.defineProperty(Array.prototype, 'find', {
+
+               value: function value(predicate) {
+
+                       // 1. Let O be ? ToObject(this value).
+
+                       if (this == null) {
+
+                               throw new TypeError('"this" is null or not defined');
+                       }
+
+                       var o = Object(this);
+
+                       // 2. Let len be ? ToLength(? Get(O, "length")).
+
+                       var len = o.length >>> 0;
+
+                       // 3. If IsCallable(predicate) is false, throw a TypeError exception.
+
+                       if (typeof predicate !== 'function') {
+
+                               throw new TypeError('predicate must be a function');
+                       }
+
+                       // 4. If thisArg was supplied, let T be thisArg; else let T be undefined.
+
+                       var thisArg = arguments[1];
+
+                       // 5. Let k be 0.
+
+                       var k = 0;
+
+                       // 6. Repeat, while k < len
+
+                       while (k < len) {
+
+                               // a. Let Pk be ! ToString(k).
+
+                               // b. Let kValue be ? Get(O, Pk).
+
+                               // c. Let testResult be ToBoolean(? Call(predicate, T, « kValue, k, O »)).
+
+                               // d. If testResult is true, return kValue.
+
+                               var kValue = o[k];
+
+                               if (predicate.call(thisArg, kValue, k, o)) {
+
+                                       return kValue;
+                               }
+
+                               // e. Increase k by 1.
+
+                               k++;
+                       }
+
+                       // 7. Return undefined.
+
+                       return undefined;
+               }
+
+       });
+}
+
+// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/includes#Polyfill
+
+if (!String.prototype.includes) {
+
+       String.prototype.includes = function (search, start) {
+
+               'use strict';
+
+               if (search instanceof RegExp) {
+
+                       throw TypeError('first argument must not be a RegExp');
+               }
+
+               if (start === undefined) {
+                       start = 0;
+               }
+
+               return this.indexOf(search, start) !== -1;
+       };
+}
+
+// https://tc39.github.io/ecma262/#sec-array.prototype.includes
+
+if (!Array.prototype.includes) {
+
+       Object.defineProperty(Array.prototype, 'includes', {
+
+               value: function value(searchElement, fromIndex) {
+
+                       if (this == null) {
+
+                               throw new TypeError('"this" is null or not defined');
+                       }
+
+                       // 1. Let O be ? ToObject(this value).
+
+                       var o = Object(this);
+
+                       // 2. Let len be ? ToLength(? Get(O, "length")).
+
+                       var len = o.length >>> 0;
+
+                       // 3. If len is 0, return false.
+
+                       if (len === 0) {
+
+                               return false;
+                       }
+
+                       // 4. Let n be ? ToInteger(fromIndex).
+
+                       //    (If fromIndex is undefined, this step produces the value 0.)
+
+                       var n = fromIndex | 0;
+
+                       // 5. If n ≥ 0, then
+
+                       //  a. Let k be n.
+
+                       // 6. Else n < 0,
+
+                       //  a. Let k be len + n.
+
+                       //  b. If k < 0, let k be 0.
+
+                       var k = Math.max(n >= 0 ? n : len - Math.abs(n), 0);
+
+                       function sameValueZero(x, y) {
+
+                               return x === y || typeof x === 'number' && typeof y === 'number' && isNaN(x) && isNaN(y);
+                       }
+
+                       // 7. Repeat, while k < len
+
+                       while (k < len) {
+
+                               // a. Let elementK be the result of ? Get(O, ! ToString(k)).
+
+                               // b. If SameValueZero(searchElement, elementK) is true, return true.
+
+                               if (sameValueZero(o[k], searchElement)) {
+
+                                       return true;
+                               }
+
+                               // c. Increase k by 1.
+
+                               k++;
+                       }
+
+                       // 8. Return false
+
+                       return false;
+               }
+
+       });
+}
+
+// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign#Polyfill
+
+if (typeof Object.assign !== 'function') {
+
+       // Must be writable: true, enumerable: false, configurable: true
+
+       Object.defineProperty(Object, "assign", {
+
+               value: function assign(target, varArgs) {
+                       // .length of function is 2
+
+                       'use strict';
+
+                       if (target === null || target === undefined) {
+
+                               throw new TypeError('Cannot convert undefined or null to object');
+                       }
+
+                       var to = Object(target);
+
+                       for (var index = 1; index < arguments.length; index++) {
+
+                               var nextSource = arguments[index];
+
+                               if (nextSource !== null && nextSource !== undefined) {
+
+                                       for (var nextKey in nextSource) {
+
+                                               // Avoid bugs when hasOwnProperty is shadowed
+
+                                               if (Object.prototype.hasOwnProperty.call(nextSource, nextKey)) {
+
+                                                       to[nextKey] = nextSource[nextKey];
+                                               }
+                                       }
+                               }
+                       }
+
+                       return to;
+               },
+
+               writable: true,
+
+               configurable: true
+
+       });
+}
+
+var ColumnManager = function ColumnManager(table) {
+
+       this.table = table; //hold parent table
+
+       this.blockHozScrollEvent = false;
+
+       this.headersElement = this.createHeadersElement();
+
+       this.element = this.createHeaderElement(); //containing element
+
+       this.rowManager = null; //hold row manager object
+
+       this.columns = []; // column definition object
+
+       this.columnsByIndex = []; //columns by index
+
+       this.columnsByField = {}; //columns by field
+
+       this.scrollLeft = 0;
+
+       this.element.insertBefore(this.headersElement, this.element.firstChild);
+};
+
+////////////// Setup Functions /////////////////
+
+
+ColumnManager.prototype.createHeadersElement = function () {
+
+       var el = document.createElement("div");
+
+       el.classList.add("tabulator-headers");
+
+       return el;
+};
+
+ColumnManager.prototype.createHeaderElement = function () {
+
+       var el = document.createElement("div");
+
+       el.classList.add("tabulator-header");
+
+       if (!this.table.options.headerVisible) {
+
+               el.classList.add("tabulator-header-hidden");
+       }
+
+       return el;
+};
+
+ColumnManager.prototype.initialize = function () {
+
+       var self = this;
+
+       //scroll body along with header
+
+       // self.element.addEventListener("scroll", function(e){
+
+       //      if(!self.blockHozScrollEvent){
+
+       //              self.table.rowManager.scrollHorizontal(self.element.scrollLeft);
+
+       //      }
+
+       // });
+};
+
+//link to row manager
+
+ColumnManager.prototype.setRowManager = function (manager) {
+
+       this.rowManager = manager;
+};
+
+//return containing element
+
+ColumnManager.prototype.getElement = function () {
+
+       return this.element;
+};
+
+//return header containing element
+
+ColumnManager.prototype.getHeadersElement = function () {
+
+       return this.headersElement;
+};
+
+// ColumnManager.prototype.tempScrollBlock = function(){
+
+//     clearTimeout(this.blockHozScrollEvent);
+
+//     this.blockHozScrollEvent = setTimeout(() => {this.blockHozScrollEvent = false;}, 50);
+
+// }
+
+
+//scroll horizontally to match table body
+
+ColumnManager.prototype.scrollHorizontal = function (left) {
+
+       var hozAdjust = 0,
+           scrollWidth = this.element.scrollWidth - this.table.element.clientWidth;
+
+       // this.tempScrollBlock();
+
+       this.element.scrollLeft = left;
+
+       //adjust for vertical scrollbar moving table when present
+
+       if (left > scrollWidth) {
+
+               hozAdjust = left - scrollWidth;
+
+               this.element.style.marginLeft = -hozAdjust + "px";
+       } else {
+
+               this.element.style.marginLeft = 0;
+       }
+
+       //keep frozen columns fixed in position
+
+       //this._calcFrozenColumnsPos(hozAdjust + 3);
+
+
+       this.scrollLeft = left;
+
+       if (this.table.modExists("frozenColumns")) {
+
+               this.table.modules.frozenColumns.scrollHorizontal();
+       }
+};
+
+///////////// Column Setup Functions /////////////
+
+
+ColumnManager.prototype.generateColumnsFromRowData = function (data) {
+
+       var cols = [],
+           row,
+           sorter;
+
+       if (data && data.length) {
+
+               row = data[0];
+
+               for (var key in row) {
+
+                       var col = {
+
+                               field: key,
+
+                               title: key
+
+                       };
+
+                       var value = row[key];
+
+                       switch (typeof value === 'undefined' ? 'undefined' : _typeof(value)) {
+
+                               case "undefined":
+
+                                       sorter = "string";
+
+                                       break;
+
+                               case "boolean":
+
+                                       sorter = "boolean";
+
+                                       break;
+
+                               case "object":
+
+                                       if (Array.isArray(value)) {
+
+                                               sorter = "array";
+                                       } else {
+
+                                               sorter = "string";
+                                       }
+
+                                       break;
+
+                               default:
+
+                                       if (!isNaN(value) && value !== "") {
+
+                                               sorter = "number";
+                                       } else {
+
+                                               if (value.match(/((^[0-9]+[a-z]+)|(^[a-z]+[0-9]+))+$/i)) {
+
+                                                       sorter = "alphanum";
+                                               } else {
+
+                                                       sorter = "string";
+                                               }
+                                       }
+
+                                       break;
+
+                       }
+
+                       col.sorter = sorter;
+
+                       cols.push(col);
+               }
+
+               this.table.options.columns = cols;
+
+               this.setColumns(this.table.options.columns);
+       }
+};
+
+ColumnManager.prototype.setColumns = function (cols, row) {
+
+       var self = this;
+
+       while (self.headersElement.firstChild) {
+               self.headersElement.removeChild(self.headersElement.firstChild);
+       }self.columns = [];
+
+       self.columnsByIndex = [];
+
+       self.columnsByField = {};
+
+       //reset frozen columns
+
+       if (self.table.modExists("frozenColumns")) {
+
+               self.table.modules.frozenColumns.reset();
+       }
+
+       cols.forEach(function (def, i) {
+
+               self._addColumn(def);
+       });
+
+       self._reIndexColumns();
+
+       if (self.table.options.responsiveLayout && self.table.modExists("responsiveLayout", true)) {
+
+               self.table.modules.responsiveLayout.initialize();
+       }
+
+       self.redraw(true);
+};
+
+ColumnManager.prototype._addColumn = function (definition, before, nextToColumn) {
+
+       var column = new Column(definition, this),
+           colEl = column.getElement(),
+           index = nextToColumn ? this.findColumnIndex(nextToColumn) : nextToColumn;
+
+       if (nextToColumn && index > -1) {
+
+               var parentIndex = this.columns.indexOf(nextToColumn.getTopColumn());
+
+               var nextEl = nextToColumn.getElement();
+
+               if (before) {
+
+                       this.columns.splice(parentIndex, 0, column);
+
+                       nextEl.parentNode.insertBefore(colEl, nextEl);
+               } else {
+
+                       this.columns.splice(parentIndex + 1, 0, column);
+
+                       nextEl.parentNode.insertBefore(colEl, nextEl.nextSibling);
+               }
+       } else {
+
+               if (before) {
+
+                       this.columns.unshift(column);
+
+                       this.headersElement.insertBefore(column.getElement(), this.headersElement.firstChild);
+               } else {
+
+                       this.columns.push(column);
+
+                       this.headersElement.appendChild(column.getElement());
+               }
+
+               column.columnRendered();
+       }
+
+       return column;
+};
+
+ColumnManager.prototype.registerColumnField = function (col) {
+
+       if (col.definition.field) {
+
+               this.columnsByField[col.definition.field] = col;
+       }
+};
+
+ColumnManager.prototype.registerColumnPosition = function (col) {
+
+       this.columnsByIndex.push(col);
+};
+
+ColumnManager.prototype._reIndexColumns = function () {
+
+       this.columnsByIndex = [];
+
+       this.columns.forEach(function (column) {
+
+               column.reRegisterPosition();
+       });
+};
+
+//ensure column headers take up the correct amount of space in column groups
+
+ColumnManager.prototype._verticalAlignHeaders = function () {
+
+       var self = this,
+           minHeight = 0;
+
+       self.columns.forEach(function (column) {
+
+               var height;
+
+               column.clearVerticalAlign();
+
+               height = column.getHeight();
+
+               if (height > minHeight) {
+
+                       minHeight = height;
+               }
+       });
+
+       self.columns.forEach(function (column) {
+
+               column.verticalAlign(self.table.options.columnHeaderVertAlign, minHeight);
+       });
+
+       self.rowManager.adjustTableSize();
+};
+
+//////////////// Column Details /////////////////
+
+
+ColumnManager.prototype.findColumn = function (subject) {
+
+       var self = this;
+
+       if ((typeof subject === 'undefined' ? 'undefined' : _typeof(subject)) == "object") {
+
+               if (subject instanceof Column) {
+
+                       //subject is column element
+
+                       return subject;
+               } else if (subject instanceof ColumnComponent) {
+
+                       //subject is public column component
+
+                       return subject._getSelf() || false;
+               } else if (typeof HTMLElement !== "undefined" && subject instanceof HTMLElement) {
+
+                       //subject is a HTML element of the column header
+
+                       var match = self.columns.find(function (column) {
+
+                               return column.element === subject;
+                       });
+
+                       return match || false;
+               }
+       } else {
+
+               //subject should be treated as the field name of the column
+
+               return this.columnsByField[subject] || false;
+       }
+
+       //catch all for any other type of input
+
+
+       return false;
+};
+
+ColumnManager.prototype.getColumnByField = function (field) {
+
+       return this.columnsByField[field];
+};
+
+ColumnManager.prototype.getColumnsByFieldRoot = function (root) {
+       var _this = this;
+
+       var matches = [];
+
+       Object.keys(this.columnsByField).forEach(function (field) {
+
+               var fieldRoot = field.split(".")[0];
+
+               if (fieldRoot === root) {
+
+                       matches.push(_this.columnsByField[field]);
+               }
+       });
+
+       return matches;
+};
+
+ColumnManager.prototype.getColumnByIndex = function (index) {
+
+       return this.columnsByIndex[index];
+};
+
+ColumnManager.prototype.getFirstVisibileColumn = function (index) {
+
+       var index = this.columnsByIndex.findIndex(function (col) {
+
+               return col.visible;
+       });
+
+       return index > -1 ? this.columnsByIndex[index] : false;
+};
+
+ColumnManager.prototype.getColumns = function () {
+
+       return this.columns;
+};
+
+ColumnManager.prototype.findColumnIndex = function (column) {
+
+       return this.columnsByIndex.findIndex(function (col) {
+
+               return column === col;
+       });
+};
+
+//return all columns that are not groups
+
+ColumnManager.prototype.getRealColumns = function () {
+
+       return this.columnsByIndex;
+};
+
+//travers across columns and call action
+
+ColumnManager.prototype.traverse = function (callback) {
+
+       var self = this;
+
+       self.columnsByIndex.forEach(function (column, i) {
+
+               callback(column, i);
+       });
+};
+
+//get defintions of actual columns
+
+ColumnManager.prototype.getDefinitions = function (active) {
+
+       var self = this,
+           output = [];
+
+       self.columnsByIndex.forEach(function (column) {
+
+               if (!active || active && column.visible) {
+
+                       output.push(column.getDefinition());
+               }
+       });
+
+       return output;
+};
+
+//get full nested definition tree
+
+ColumnManager.prototype.getDefinitionTree = function () {
+
+       var self = this,
+           output = [];
+
+       self.columns.forEach(function (column) {
+
+               output.push(column.getDefinition(true));
+       });
+
+       return output;
+};
+
+ColumnManager.prototype.getComponents = function (structured) {
+
+       var self = this,
+           output = [],
+           columns = structured ? self.columns : self.columnsByIndex;
+
+       columns.forEach(function (column) {
+
+               output.push(column.getComponent());
+       });
+
+       return output;
+};
+
+ColumnManager.prototype.getWidth = function () {
+
+       var width = 0;
+
+       this.columnsByIndex.forEach(function (column) {
+
+               if (column.visible) {
+
+                       width += column.getWidth();
+               }
+       });
+
+       return width;
+};
+
+ColumnManager.prototype.moveColumn = function (from, to, after) {
+
+       this.moveColumnActual(from, to, after);
+
+       if (this.table.options.responsiveLayout && this.table.modExists("responsiveLayout", true)) {
+
+               this.table.modules.responsiveLayout.initialize();
+       }
+
+       if (this.table.modExists("columnCalcs")) {
+
+               this.table.modules.columnCalcs.recalc(this.table.rowManager.activeRows);
+       }
+
+       to.element.parentNode.insertBefore(from.element, to.element);
+
+       if (after) {
+
+               to.element.parentNode.insertBefore(to.element, from.element);
+       }
+
+       this._verticalAlignHeaders();
+
+       this.table.rowManager.reinitialize();
+};
+
+ColumnManager.prototype.moveColumnActual = function (from, to, after) {
+
+       if (from.parent.isGroup) {
+
+               this._moveColumnInArray(from.parent.columns, from, to, after);
+       } else {
+
+               this._moveColumnInArray(this.columns, from, to, after);
+       }
+
+       this._moveColumnInArray(this.columnsByIndex, from, to, after, true);
+
+       if (this.table.options.responsiveLayout && this.table.modExists("responsiveLayout", true)) {
+
+               this.table.modules.responsiveLayout.initialize();
+       }
+
+       if (this.table.options.columnMoved) {
+
+               this.table.options.columnMoved.call(this.table, from.getComponent(), this.table.columnManager.getComponents());
+       }
+
+       if (this.table.options.persistence && this.table.modExists("persistence", true) && this.table.modules.persistence.config.columns) {
+
+               this.table.modules.persistence.save("columns");
+       }
+};
+
+ColumnManager.prototype._moveColumnInArray = function (columns, from, to, after, updateRows) {
+
+       var fromIndex = columns.indexOf(from),
+           toIndex;
+
+       if (fromIndex > -1) {
+
+               columns.splice(fromIndex, 1);
+
+               toIndex = columns.indexOf(to);
+
+               if (toIndex > -1) {
+
+                       if (after) {
+
+                               toIndex = toIndex + 1;
+                       }
+               } else {
+
+                       toIndex = fromIndex;
+               }
+
+               columns.splice(toIndex, 0, from);
+
+               if (updateRows) {
+
+                       this.table.rowManager.rows.forEach(function (row) {
+
+                               if (row.cells.length) {
+
+                                       var cell = row.cells.splice(fromIndex, 1)[0];
+
+                                       row.cells.splice(toIndex, 0, cell);
+                               }
+                       });
+               }
+       }
+};
+
+ColumnManager.prototype.scrollToColumn = function (column, position, ifVisible) {
+       var _this2 = this;
+
+       var left = 0,
+           offset = 0,
+           adjust = 0,
+           colEl = column.getElement();
+
+       return new Promise(function (resolve, reject) {
+
+               if (typeof position === "undefined") {
+
+                       position = _this2.table.options.scrollToColumnPosition;
+               }
+
+               if (typeof ifVisible === "undefined") {
+
+                       ifVisible = _this2.table.options.scrollToColumnIfVisible;
+               }
+
+               if (column.visible) {
+
+                       //align to correct position
+
+                       switch (position) {
+
+                               case "middle":
+
+                               case "center":
+
+                                       adjust = -_this2.element.clientWidth / 2;
+
+                                       break;
+
+                               case "right":
+
+                                       adjust = colEl.clientWidth - _this2.headersElement.clientWidth;
+
+                                       break;
+
+                       }
+
+                       //check column visibility
+
+                       if (!ifVisible) {
+
+                               offset = colEl.offsetLeft;
+
+                               if (offset > 0 && offset + colEl.offsetWidth < _this2.element.clientWidth) {
+
+                                       return false;
+                               }
+                       }
+
+                       //calculate scroll position
+
+                       left = colEl.offsetLeft + _this2.element.scrollLeft + adjust;
+
+                       left = Math.max(Math.min(left, _this2.table.rowManager.element.scrollWidth - _this2.table.rowManager.element.clientWidth), 0);
+
+                       _this2.table.rowManager.scrollHorizontal(left);
+
+                       _this2.scrollHorizontal(left);
+
+                       resolve();
+               } else {
+
+                       console.warn("Scroll Error - Column not visible");
+
+                       reject("Scroll Error - Column not visible");
+               }
+       });
+};
+
+//////////////// Cell Management /////////////////
+
+
+ColumnManager.prototype.generateCells = function (row) {
+
+       var self = this;
+
+       var cells = [];
+
+       self.columnsByIndex.forEach(function (column) {
+
+               cells.push(column.generateCell(row));
+       });
+
+       return cells;
+};
+
+//////////////// Column Management /////////////////
+
+
+ColumnManager.prototype.getFlexBaseWidth = function () {
+
+       var self = this,
+           totalWidth = self.table.element.clientWidth,
+           //table element width
+
+       fixedWidth = 0;
+
+       //adjust for vertical scrollbar if present
+
+       if (self.rowManager.element.scrollHeight > self.rowManager.element.clientHeight) {
+
+               totalWidth -= self.rowManager.element.offsetWidth - self.rowManager.element.clientWidth;
+       }
+
+       this.columnsByIndex.forEach(function (column) {
+
+               var width, minWidth, colWidth;
+
+               if (column.visible) {
+
+                       width = column.definition.width || 0;
+
+                       minWidth = typeof column.minWidth == "undefined" ? self.table.options.columnMinWidth : parseInt(column.minWidth);
+
+                       if (typeof width == "string") {
+
+                               if (width.indexOf("%") > -1) {
+
+                                       colWidth = totalWidth / 100 * parseInt(width);
+                               } else {
+
+                                       colWidth = parseInt(width);
+                               }
+                       } else {
+
+                               colWidth = width;
+                       }
+
+                       fixedWidth += colWidth > minWidth ? colWidth : minWidth;
+               }
+       });
+
+       return fixedWidth;
+};
+
+ColumnManager.prototype.addColumn = function (definition, before, nextToColumn) {
+       var _this3 = this;
+
+       return new Promise(function (resolve, reject) {
+
+               var column = _this3._addColumn(definition, before, nextToColumn);
+
+               _this3._reIndexColumns();
+
+               if (_this3.table.options.responsiveLayout && _this3.table.modExists("responsiveLayout", true)) {
+
+                       _this3.table.modules.responsiveLayout.initialize();
+               }
+
+               if (_this3.table.modExists("columnCalcs")) {
+
+                       _this3.table.modules.columnCalcs.recalc(_this3.table.rowManager.activeRows);
+               }
+
+               _this3.redraw();
+
+               if (_this3.table.modules.layout.getMode() != "fitColumns") {
+
+                       column.reinitializeWidth();
+               }
+
+               _this3._verticalAlignHeaders();
+
+               _this3.table.rowManager.reinitialize();
+
+               resolve(column);
+       });
+};
+
+//remove column from system
+
+ColumnManager.prototype.deregisterColumn = function (column) {
+
+       var field = column.getField(),
+           index;
+
+       //remove from field list
+
+       if (field) {
+
+               delete this.columnsByField[field];
+       }
+
+       //remove from index list
+
+       index = this.columnsByIndex.indexOf(column);
+
+       if (index > -1) {
+
+               this.columnsByIndex.splice(index, 1);
+       }
+
+       //remove from column list
+
+       index = this.columns.indexOf(column);
+
+       if (index > -1) {
+
+               this.columns.splice(index, 1);
+       }
+
+       if (this.table.options.responsiveLayout && this.table.modExists("responsiveLayout", true)) {
+
+               this.table.modules.responsiveLayout.initialize();
+       }
+
+       this.redraw();
+};
+
+//redraw columns
+
+ColumnManager.prototype.redraw = function (force) {
+
+       if (force) {
+
+               if (Tabulator.prototype.helpers.elVisible(this.element)) {
+
+                       this._verticalAlignHeaders();
+               }
+
+               this.table.rowManager.resetScroll();
+
+               this.table.rowManager.reinitialize();
+       }
+
+       if (["fitColumns", "fitDataStretch"].indexOf(this.table.modules.layout.getMode()) > -1) {
+
+               this.table.modules.layout.layout();
+       } else {
+
+               if (force) {
+
+                       this.table.modules.layout.layout();
+               } else {
+
+                       if (this.table.options.responsiveLayout && this.table.modExists("responsiveLayout", true)) {
+
+                               this.table.modules.responsiveLayout.update();
+                       }
+               }
+       }
+
+       if (this.table.modExists("frozenColumns")) {
+
+               this.table.modules.frozenColumns.layout();
+       }
+
+       if (this.table.modExists("columnCalcs")) {
+
+               this.table.modules.columnCalcs.recalc(this.table.rowManager.activeRows);
+       }
+
+       if (force) {
+
+               if (this.table.options.persistence && this.table.modExists("persistence", true) && this.table.modules.persistence.config.columns) {
+
+                       this.table.modules.persistence.save("columns");
+               }
+
+               if (this.table.modExists("columnCalcs")) {
+
+                       this.table.modules.columnCalcs.redraw();
+               }
+       }
+
+       this.table.footerManager.redraw();
+};
+
+//public column object
+var ColumnComponent = function ColumnComponent(column) {
+       this._column = column;
+       this.type = "ColumnComponent";
+};
+
+ColumnComponent.prototype.getElement = function () {
+       return this._column.getElement();
+};
+
+ColumnComponent.prototype.getDefinition = function () {
+       return this._column.getDefinition();
+};
+
+ColumnComponent.prototype.getField = function () {
+       return this._column.getField();
+};
+
+ColumnComponent.prototype.getCells = function () {
+       var cells = [];
+
+       this._column.cells.forEach(function (cell) {
+               cells.push(cell.getComponent());
+       });
+
+       return cells;
+};
+
+ColumnComponent.prototype.getVisibility = function () {
+       console.warn("getVisibility function is deprecated, you should now use the isVisible function");
+       return this._column.visible;
+};
+
+ColumnComponent.prototype.isVisible = function () {
+       return this._column.visible;
+};
+
+ColumnComponent.prototype.show = function () {
+       if (this._column.isGroup) {
+               this._column.columns.forEach(function (column) {
+                       column.show();
+               });
+       } else {
+               this._column.show();
+       }
+};
+
+ColumnComponent.prototype.hide = function () {
+       if (this._column.isGroup) {
+               this._column.columns.forEach(function (column) {
+                       column.hide();
+               });
+       } else {
+               this._column.hide();
+       }
+};
+
+ColumnComponent.prototype.toggle = function () {
+       if (this._column.visible) {
+               this.hide();
+       } else {
+               this.show();
+       }
+};
+
+ColumnComponent.prototype.delete = function () {
+       return this._column.delete();
+};
+
+ColumnComponent.prototype.getSubColumns = function () {
+       var output = [];
+
+       if (this._column.columns.length) {
+               this._column.columns.forEach(function (column) {
+                       output.push(column.getComponent());
+               });
+       }
+
+       return output;
+};
+
+ColumnComponent.prototype.getParentColumn = function () {
+       return this._column.parent instanceof Column ? this._column.parent.getComponent() : false;
+};
+
+ColumnComponent.prototype._getSelf = function () {
+       return this._column;
+};
+
+ColumnComponent.prototype.scrollTo = function () {
+       return this._column.table.columnManager.scrollToColumn(this._column);
+};
+
+ColumnComponent.prototype.getTable = function () {
+       return this._column.table;
+};
+
+ColumnComponent.prototype.headerFilterFocus = function () {
+       if (this._column.table.modExists("filter", true)) {
+               this._column.table.modules.filter.setHeaderFilterFocus(this._column);
+       }
+};
+
+ColumnComponent.prototype.reloadHeaderFilter = function () {
+       if (this._column.table.modExists("filter", true)) {
+               this._column.table.modules.filter.reloadHeaderFilter(this._column);
+       }
+};
+
+ColumnComponent.prototype.getHeaderFilterValue = function () {
+       if (this._column.table.modExists("filter", true)) {
+               return this._column.table.modules.filter.getHeaderFilterValue(this._column);
+       }
+};
+
+ColumnComponent.prototype.setHeaderFilterValue = function (value) {
+       if (this._column.table.modExists("filter", true)) {
+               this._column.table.modules.filter.setHeaderFilterValue(this._column, value);
+       }
+};
+
+ColumnComponent.prototype.move = function (to, after) {
+       var toColumn = this._column.table.columnManager.findColumn(to);
+
+       if (toColumn) {
+               this._column.table.columnManager.moveColumn(this._column, toColumn, after);
+       } else {
+               console.warn("Move Error - No matching column found:", toColumn);
+       }
+};
+
+ColumnComponent.prototype.getNextColumn = function () {
+       var nextCol = this._column.nextColumn();
+
+       return nextCol ? nextCol.getComponent() : false;
+};
+
+ColumnComponent.prototype.getPrevColumn = function () {
+       var prevCol = this._column.prevColumn();
+
+       return prevCol ? prevCol.getComponent() : false;
+};
+
+ColumnComponent.prototype.updateDefinition = function (updates) {
+       return this._column.updateDefinition(updates);
+};
+
+ColumnComponent.prototype.getWidth = function () {
+       return this._column.getWidth();
+};
+
+ColumnComponent.prototype.setWidth = function (width) {
+       if (width === true) {
+               return this._column.reinitializeWidth(true);
+       } else {
+               return this._column.setWidth(width);
+       }
+};
+
+ColumnComponent.prototype.validate = function () {
+       return this._column.validate();
+};
+
+var Column = function Column(def, parent) {
+       var self = this;
+
+       this.table = parent.table;
+       this.definition = def; //column definition
+       this.parent = parent; //hold parent object
+       this.type = "column"; //type of element
+       this.columns = []; //child columns
+       this.cells = []; //cells bound to this column
+       this.element = this.createElement(); //column header element
+       this.contentElement = false;
+       this.titleElement = false;
+       this.groupElement = this.createGroupElement(); //column group holder element
+       this.isGroup = false;
+       this.tooltip = false; //hold column tooltip
+       this.hozAlign = ""; //horizontal text alignment
+       this.vertAlign = ""; //vert text alignment
+
+       //multi dimensional filed handling
+       this.field = "";
+       this.fieldStructure = "";
+       this.getFieldValue = "";
+       this.setFieldValue = "";
+
+       this.titleFormatterRendered = false;
+
+       this.setField(this.definition.field);
+
+       if (this.table.options.invalidOptionWarnings) {
+               this.checkDefinition();
+       }
+
+       this.modules = {}; //hold module variables;
+
+       this.cellEvents = {
+               cellClick: false,
+               cellDblClick: false,
+               cellContext: false,
+               cellTap: false,
+               cellDblTap: false,
+               cellTapHold: false,
+               cellMouseEnter: false,
+               cellMouseLeave: false,
+               cellMouseOver: false,
+               cellMouseOut: false,
+               cellMouseMove: false
+       };
+
+       this.width = null; //column width
+       this.widthStyled = ""; //column width prestyled to improve render efficiency
+       this.minWidth = null; //column minimum width
+       this.minWidthStyled = ""; //column minimum prestyled to improve render efficiency
+       this.widthFixed = false; //user has specified a width for this column
+
+       this.visible = true; //default visible state
+
+       this.component = null;
+
+       this._mapDepricatedFunctionality();
+
+       //initialize column
+       if (def.columns) {
+
+               this.isGroup = true;
+
+               def.columns.forEach(function (def, i) {
+                       var newCol = new Column(def, self);
+                       self.attachColumn(newCol);
+               });
+
+               self.checkColumnVisibility();
+       } else {
+               parent.registerColumnField(this);
+       }
+
+       if (def.rowHandle && this.table.options.movableRows !== false && this.table.modExists("moveRow")) {
+               this.table.modules.moveRow.setHandle(true);
+       }
+
+       this._buildHeader();
+
+       this.bindModuleColumns();
+};
+
+Column.prototype.createElement = function () {
+       var el = document.createElement("div");
+
+       el.classList.add("tabulator-col");
+       el.setAttribute("role", "columnheader");
+       el.setAttribute("aria-sort", "none");
+
+       return el;
+};
+
+Column.prototype.createGroupElement = function () {
+       var el = document.createElement("div");
+
+       el.classList.add("tabulator-col-group-cols");
+
+       return el;
+};
+
+Column.prototype.checkDefinition = function () {
+       var _this4 = this;
+
+       Object.keys(this.definition).forEach(function (key) {
+               if (_this4.defaultOptionList.indexOf(key) === -1) {
+                       console.warn("Invalid column definition option in '" + (_this4.field || _this4.definition.title) + "' column:", key);
+               }
+       });
+};
+
+Column.prototype.setField = function (field) {
+       this.field = field;
+       this.fieldStructure = field ? this.table.options.nestedFieldSeparator ? field.split(this.table.options.nestedFieldSeparator) : [field] : [];
+       this.getFieldValue = this.fieldStructure.length > 1 ? this._getNestedData : this._getFlatData;
+       this.setFieldValue = this.fieldStructure.length > 1 ? this._setNestedData : this._setFlatData;
+};
+
+//register column position with column manager
+Column.prototype.registerColumnPosition = function (column) {
+       this.parent.registerColumnPosition(column);
+};
+
+//register column position with column manager
+Column.prototype.registerColumnField = function (column) {
+       this.parent.registerColumnField(column);
+};
+
+//trigger position registration
+Column.prototype.reRegisterPosition = function () {
+       if (this.isGroup) {
+               this.columns.forEach(function (column) {
+                       column.reRegisterPosition();
+               });
+       } else {
+               this.registerColumnPosition(this);
+       }
+};
+
+Column.prototype._mapDepricatedFunctionality = function () {
+       if (typeof this.definition.hideInHtml !== "undefined") {
+               this.definition.htmlOutput = !this.definition.hideInHtml;
+               console.warn("hideInHtml column definition property is deprecated, you should now use htmlOutput");
+       }
+
+       if (typeof this.definition.align !== "undefined") {
+               this.definition.hozAlign = this.definition.align;
+               console.warn("align column definition property is deprecated, you should now use hozAlign");
+       }
+
+       if (typeof this.definition.downloadTitle !== "undefined") {
+               this.definition.titleDownload = this.definition.downloadTitle;
+               console.warn("downloadTitle definition property is deprecated, you should now use titleDownload");
+       }
+};
+
+Column.prototype.setTooltip = function () {
+       var self = this,
+           def = self.definition;
+
+       //set header tooltips
+       var tooltip = def.headerTooltip || def.tooltip === false ? def.headerTooltip : self.table.options.tooltipsHeader;
+
+       if (tooltip) {
+               if (tooltip === true) {
+                       if (def.field) {
+                               self.table.modules.localize.bind("columns|" + def.field, function (value) {
+                                       self.element.setAttribute("title", value || def.title);
+                               });
+                       } else {
+                               self.element.setAttribute("title", def.title);
+                       }
+               } else {
+                       if (typeof tooltip == "function") {
+                               tooltip = tooltip(self.getComponent());
+
+                               if (tooltip === false) {
+                                       tooltip = "";
+                               }
+                       }
+
+                       self.element.setAttribute("title", tooltip);
+               }
+       } else {
+               self.element.setAttribute("title", "");
+       }
+};
+
+//build header element
+Column.prototype._buildHeader = function () {
+       var self = this,
+           def = self.definition;
+
+       while (self.element.firstChild) {
+               self.element.removeChild(self.element.firstChild);
+       }if (def.headerVertical) {
+               self.element.classList.add("tabulator-col-vertical");
+
+               if (def.headerVertical === "flip") {
+                       self.element.classList.add("tabulator-col-vertical-flip");
+               }
+       }
+
+       self.contentElement = self._bindEvents();
+
+       self.contentElement = self._buildColumnHeaderContent();
+
+       self.element.appendChild(self.contentElement);
+
+       if (self.isGroup) {
+               self._buildGroupHeader();
+       } else {
+               self._buildColumnHeader();
+       }
+
+       self.setTooltip();
+
+       //set resizable handles
+       if (self.table.options.resizableColumns && self.table.modExists("resizeColumns")) {
+               self.table.modules.resizeColumns.initializeColumn("header", self, self.element);
+       }
+
+       //set resizable handles
+       if (def.headerFilter && self.table.modExists("filter") && self.table.modExists("edit")) {
+               if (typeof def.headerFilterPlaceholder !== "undefined" && def.field) {
+                       self.table.modules.localize.setHeaderFilterColumnPlaceholder(def.field, def.headerFilterPlaceholder);
+               }
+
+               self.table.modules.filter.initializeColumn(self);
+       }
+
+       //set resizable handles
+       if (self.table.modExists("frozenColumns")) {
+               self.table.modules.frozenColumns.initializeColumn(self);
+       }
+
+       //set movable column
+       if (self.table.options.movableColumns && !self.isGroup && self.table.modExists("moveColumn")) {
+               self.table.modules.moveColumn.initializeColumn(self);
+       }
+
+       //set calcs column
+       if ((def.topCalc || def.bottomCalc) && self.table.modExists("columnCalcs")) {
+               self.table.modules.columnCalcs.initializeColumn(self);
+       }
+
+       //handle persistence
+       if (self.table.modExists("persistence") && self.table.modules.persistence.config.columns) {
+               self.table.modules.persistence.initializeColumn(self);
+       }
+
+       //update header tooltip on mouse enter
+       self.element.addEventListener("mouseenter", function (e) {
+               self.setTooltip();
+       });
+};
+
+Column.prototype._bindEvents = function () {
+
+       var self = this,
+           def = self.definition,
+           dblTap,
+           tapHold,
+           tap;
+
+       //setup header click event bindings
+       if (typeof def.headerClick == "function") {
+               self.element.addEventListener("click", function (e) {
+                       def.headerClick(e, self.getComponent());
+               });
+       }
+
+       if (typeof def.headerDblClick == "function") {
+               self.element.addEventListener("dblclick", function (e) {
+                       def.headerDblClick(e, self.getComponent());
+               });
+       }
+
+       if (typeof def.headerContext == "function") {
+               self.element.addEventListener("contextmenu", function (e) {
+                       def.headerContext(e, self.getComponent());
+               });
+       }
+
+       //setup header tap event bindings
+       if (typeof def.headerTap == "function") {
+               tap = false;
+
+               self.element.addEventListener("touchstart", function (e) {
+                       tap = true;
+               }, { passive: true });
+
+               self.element.addEventListener("touchend", function (e) {
+                       if (tap) {
+                               def.headerTap(e, self.getComponent());
+                       }
+
+                       tap = false;
+               });
+       }
+
+       if (typeof def.headerDblTap == "function") {
+               dblTap = null;
+
+               self.element.addEventListener("touchend", function (e) {
+
+                       if (dblTap) {
+                               clearTimeout(dblTap);
+                               dblTap = null;
+
+                               def.headerDblTap(e, self.getComponent());
+                       } else {
+
+                               dblTap = setTimeout(function () {
+                                       clearTimeout(dblTap);
+                                       dblTap = null;
+                               }, 300);
+                       }
+               });
+       }
+
+       if (typeof def.headerTapHold == "function") {
+               tapHold = null;
+
+               self.element.addEventListener("touchstart", function (e) {
+                       clearTimeout(tapHold);
+
+                       tapHold = setTimeout(function () {
+                               clearTimeout(tapHold);
+                               tapHold = null;
+                               tap = false;
+                               def.headerTapHold(e, self.getComponent());
+                       }, 1000);
+               }, { passive: true });
+
+               self.element.addEventListener("touchend", function (e) {
+                       clearTimeout(tapHold);
+                       tapHold = null;
+               });
+       }
+
+       //store column cell click event bindings
+       if (typeof def.cellClick == "function") {
+               self.cellEvents.cellClick = def.cellClick;
+       }
+
+       if (typeof def.cellDblClick == "function") {
+               self.cellEvents.cellDblClick = def.cellDblClick;
+       }
+
+       if (typeof def.cellContext == "function") {
+               self.cellEvents.cellContext = def.cellContext;
+       }
+
+       //store column mouse event bindings
+       if (typeof def.cellMouseEnter == "function") {
+               self.cellEvents.cellMouseEnter = def.cellMouseEnter;
+       }
+
+       if (typeof def.cellMouseLeave == "function") {
+               self.cellEvents.cellMouseLeave = def.cellMouseLeave;
+       }
+
+       if (typeof def.cellMouseOver == "function") {
+               self.cellEvents.cellMouseOver = def.cellMouseOver;
+       }
+
+       if (typeof def.cellMouseOut == "function") {
+               self.cellEvents.cellMouseOut = def.cellMouseOut;
+       }
+
+       if (typeof def.cellMouseMove == "function") {
+               self.cellEvents.cellMouseMove = def.cellMouseMove;
+       }
+
+       //setup column cell tap event bindings
+       if (typeof def.cellTap == "function") {
+               self.cellEvents.cellTap = def.cellTap;
+       }
+
+       if (typeof def.cellDblTap == "function") {
+               self.cellEvents.cellDblTap = def.cellDblTap;
+       }
+
+       if (typeof def.cellTapHold == "function") {
+               self.cellEvents.cellTapHold = def.cellTapHold;
+       }
+
+       //setup column cell edit callbacks
+       if (typeof def.cellEdited == "function") {
+               self.cellEvents.cellEdited = def.cellEdited;
+       }
+
+       if (typeof def.cellEditing == "function") {
+               self.cellEvents.cellEditing = def.cellEditing;
+       }
+
+       if (typeof def.cellEditCancelled == "function") {
+               self.cellEvents.cellEditCancelled = def.cellEditCancelled;
+       }
+};
+
+//build header element for header
+Column.prototype._buildColumnHeader = function () {
+       var self = this,
+           def = self.definition,
+           table = self.table,
+           sortable;
+
+       //set column sorter
+       if (table.modExists("sort")) {
+               table.modules.sort.initializeColumn(self, self.contentElement);
+       }
+
+       //set column header context menu
+       if ((def.headerContextMenu || def.headerMenu) && table.modExists("menu")) {
+               table.modules.menu.initializeColumnHeader(self);
+       }
+
+       //set column formatter
+       if (table.modExists("format")) {
+               table.modules.format.initializeColumn(self);
+       }
+
+       //set column editor
+       if (typeof def.editor != "undefined" && table.modExists("edit")) {
+               table.modules.edit.initializeColumn(self);
+       }
+
+       //set colum validator
+       if (typeof def.validator != "undefined" && table.modExists("validate")) {
+               table.modules.validate.initializeColumn(self);
+       }
+
+       //set column mutator
+       if (table.modExists("mutator")) {
+               table.modules.mutator.initializeColumn(self);
+       }
+
+       //set column accessor
+       if (table.modExists("accessor")) {
+               table.modules.accessor.initializeColumn(self);
+       }
+
+       //set respoviveLayout
+       if (_typeof(table.options.responsiveLayout) && table.modExists("responsiveLayout")) {
+               table.modules.responsiveLayout.initializeColumn(self);
+       }
+
+       //set column visibility
+       if (typeof def.visible != "undefined") {
+               if (def.visible) {
+                       self.show(true);
+               } else {
+                       self.hide(true);
+               }
+       }
+
+       //asign additional css classes to column header
+       if (def.cssClass) {
+               var classeNames = def.cssClass.split(" ");
+               classeNames.forEach(function (className) {
+                       self.element.classList.add(className);
+               });
+       }
+
+       if (def.field) {
+               this.element.setAttribute("tabulator-field", def.field);
+       }
+
+       //set min width if present
+       self.setMinWidth(typeof def.minWidth == "undefined" ? self.table.options.columnMinWidth : parseInt(def.minWidth));
+
+       self.reinitializeWidth();
+
+       //set tooltip if present
+       self.tooltip = self.definition.tooltip || self.definition.tooltip === false ? self.definition.tooltip : self.table.options.tooltips;
+
+       //set orizontal text alignment
+       self.hozAlign = typeof self.definition.hozAlign == "undefined" ? self.table.options.cellHozAlign : self.definition.hozAlign;
+       self.vertAlign = typeof self.definition.vertAlign == "undefined" ? self.table.options.cellVertAlign : self.definition.vertAlign;
+};
+
+Column.prototype._buildColumnHeaderContent = function () {
+       var def = this.definition,
+           table = this.table;
+
+       var contentElement = document.createElement("div");
+       contentElement.classList.add("tabulator-col-content");
+
+       this.titleElement = this._buildColumnHeaderTitle();
+
+       contentElement.appendChild(this.titleElement);
+
+       return contentElement;
+};
+
+//build title element of column
+Column.prototype._buildColumnHeaderTitle = function () {
+       var self = this,
+           def = self.definition,
+           table = self.table,
+           title;
+
+       var titleHolderElement = document.createElement("div");
+       titleHolderElement.classList.add("tabulator-col-title");
+
+       if (def.editableTitle) {
+               var titleElement = document.createElement("input");
+               titleElement.classList.add("tabulator-title-editor");
+
+               titleElement.addEventListener("click", function (e) {
+                       e.stopPropagation();
+                       titleElement.focus();
+               });
+
+               titleElement.addEventListener("change", function () {
+                       def.title = titleElement.value;
+                       table.options.columnTitleChanged.call(self.table, self.getComponent());
+               });
+
+               titleHolderElement.appendChild(titleElement);
+
+               if (def.field) {
+                       table.modules.localize.bind("columns|" + def.field, function (text) {
+                               titleElement.value = text || def.title || "&nbsp;";
+                       });
+               } else {
+                       titleElement.value = def.title || "&nbsp;";
+               }
+       } else {
+               if (def.field) {
+                       table.modules.localize.bind("columns|" + def.field, function (text) {
+                               self._formatColumnHeaderTitle(titleHolderElement, text || def.title || "&nbsp;");
+                       });
+               } else {
+                       self._formatColumnHeaderTitle(titleHolderElement, def.title || "&nbsp;");
+               }
+       }
+
+       return titleHolderElement;
+};
+
+Column.prototype._formatColumnHeaderTitle = function (el, title) {
+       var _this5 = this;
+
+       var formatter, contents, params, mockCell, onRendered;
+
+       if (this.definition.titleFormatter && this.table.modExists("format")) {
+
+               formatter = this.table.modules.format.getFormatter(this.definition.titleFormatter);
+
+               onRendered = function onRendered(callback) {
+                       _this5.titleFormatterRendered = callback;
+               };
+
+               mockCell = {
+                       getValue: function getValue() {
+                               return title;
+                       },
+                       getElement: function getElement() {
+                               return el;
+                       }
+               };
+
+               params = this.definition.titleFormatterParams || {};
+
+               params = typeof params === "function" ? params() : params;
+
+               contents = formatter.call(this.table.modules.format, mockCell, params, onRendered);
+
+               switch (typeof contents === 'undefined' ? 'undefined' : _typeof(contents)) {
+                       case "object":
+                               if (contents instanceof Node) {
+                                       el.appendChild(contents);
+                               } else {
+                                       el.innerHTML = "";
+                                       console.warn("Format Error - Title formatter has returned a type of object, the only valid formatter object return is an instance of Node, the formatter returned:", contents);
+                               }
+                               break;
+                       case "undefined":
+                       case "null":
+                               el.innerHTML = "";
+                               break;
+                       default:
+                               el.innerHTML = contents;
+               }
+       } else {
+               el.innerHTML = title;
+       }
+};
+
+//build header element for column group
+Column.prototype._buildGroupHeader = function () {
+       var _this6 = this;
+
+       this.element.classList.add("tabulator-col-group");
+       this.element.setAttribute("role", "columngroup");
+       this.element.setAttribute("aria-title", this.definition.title);
+
+       //asign additional css classes to column header
+       if (this.definition.cssClass) {
+               var classeNames = this.definition.cssClass.split(" ");
+               classeNames.forEach(function (className) {
+                       _this6.element.classList.add(className);
+               });
+       }
+
+       //set column header context menu
+       if ((this.definition.headerContextMenu || this.definition.headerMenu) && this.table.modExists("menu")) {
+               this.table.modules.menu.initializeColumnHeader(this);
+       }
+
+       this.element.appendChild(this.groupElement);
+};
+
+//flat field lookup
+Column.prototype._getFlatData = function (data) {
+       return data[this.field];
+};
+
+//nested field lookup
+Column.prototype._getNestedData = function (data) {
+       var dataObj = data,
+           structure = this.fieldStructure,
+           length = structure.length,
+           output;
+
+       for (var i = 0; i < length; i++) {
+
+               dataObj = dataObj[structure[i]];
+
+               output = dataObj;
+
+               if (!dataObj) {
+                       break;
+               }
+       }
+
+       return output;
+};
+
+//flat field set
+Column.prototype._setFlatData = function (data, value) {
+       if (this.field) {
+               data[this.field] = value;
+       }
+};
+
+//nested field set
+Column.prototype._setNestedData = function (data, value) {
+       var dataObj = data,
+           structure = this.fieldStructure,
+           length = structure.length;
+
+       for (var i = 0; i < length; i++) {
+
+               if (i == length - 1) {
+                       dataObj[structure[i]] = value;
+               } else {
+                       if (!dataObj[structure[i]]) {
+                               if (typeof value !== "undefined") {
+                                       dataObj[structure[i]] = {};
+                               } else {
+                                       break;
+                               }
+                       }
+
+                       dataObj = dataObj[structure[i]];
+               }
+       }
+};
+
+//attach column to this group
+Column.prototype.attachColumn = function (column) {
+       var self = this;
+
+       if (self.groupElement) {
+               self.columns.push(column);
+               self.groupElement.appendChild(column.getElement());
+       } else {
+               console.warn("Column Warning - Column being attached to another column instead of column group");
+       }
+};
+
+//vertically align header in column
+Column.prototype.verticalAlign = function (alignment, height) {
+
+       //calculate height of column header and group holder element
+       var parentHeight = this.parent.isGroup ? this.parent.getGroupElement().clientHeight : height || this.parent.getHeadersElement().clientHeight;
+       // var parentHeight = this.parent.isGroup ? this.parent.getGroupElement().clientHeight : this.parent.getHeadersElement().clientHeight;
+
+       this.element.style.height = parentHeight + "px";
+
+       if (this.isGroup) {
+               this.groupElement.style.minHeight = parentHeight - this.contentElement.offsetHeight + "px";
+       }
+
+       //vertically align cell contents
+       if (!this.isGroup && alignment !== "top") {
+               if (alignment === "bottom") {
+                       this.element.style.paddingTop = this.element.clientHeight - this.contentElement.offsetHeight + "px";
+               } else {
+                       this.element.style.paddingTop = (this.element.clientHeight - this.contentElement.offsetHeight) / 2 + "px";
+               }
+       }
+
+       this.columns.forEach(function (column) {
+               column.verticalAlign(alignment);
+       });
+};
+
+//clear vertical alignmenet
+Column.prototype.clearVerticalAlign = function () {
+       this.element.style.paddingTop = "";
+       this.element.style.height = "";
+       this.element.style.minHeight = "";
+       this.groupElement.style.minHeight = "";
+
+       this.columns.forEach(function (column) {
+               column.clearVerticalAlign();
+       });
+};
+
+Column.prototype.bindModuleColumns = function () {
+       //check if rownum formatter is being used on a column
+       if (this.definition.formatter == "rownum") {
+               this.table.rowManager.rowNumColumn = this;
+       }
+};
+
+//// Retreive Column Information ////
+
+//return column header element
+Column.prototype.getElement = function () {
+       return this.element;
+};
+
+//return colunm group element
+Column.prototype.getGroupElement = function () {
+       return this.groupElement;
+};
+
+//return field name
+Column.prototype.getField = function () {
+       return this.field;
+};
+
+//return the first column in a group
+Column.prototype.getFirstColumn = function () {
+       if (!this.isGroup) {
+               return this;
+       } else {
+               if (this.columns.length) {
+                       return this.columns[0].getFirstColumn();
+               } else {
+                       return false;
+               }
+       }
+};
+
+//return the last column in a group
+Column.prototype.getLastColumn = function () {
+       if (!this.isGroup) {
+               return this;
+       } else {
+               if (this.columns.length) {
+                       return this.columns[this.columns.length - 1].getLastColumn();
+               } else {
+                       return false;
+               }
+       }
+};
+
+//return all columns in a group
+Column.prototype.getColumns = function () {
+       return this.columns;
+};
+
+//return all columns in a group
+Column.prototype.getCells = function () {
+       return this.cells;
+};
+
+//retreive the top column in a group of columns
+Column.prototype.getTopColumn = function () {
+       if (this.parent.isGroup) {
+               return this.parent.getTopColumn();
+       } else {
+               return this;
+       }
+};
+
+//return column definition object
+Column.prototype.getDefinition = function (updateBranches) {
+       var colDefs = [];
+
+       if (this.isGroup && updateBranches) {
+               this.columns.forEach(function (column) {
+                       colDefs.push(column.getDefinition(true));
+               });
+
+               this.definition.columns = colDefs;
+       }
+
+       return this.definition;
+};
+
+//////////////////// Actions ////////////////////
+
+Column.prototype.checkColumnVisibility = function () {
+       var visible = false;
+
+       this.columns.forEach(function (column) {
+               if (column.visible) {
+                       visible = true;
+               }
+       });
+
+       if (visible) {
+               this.show();
+               this.parent.table.options.columnVisibilityChanged.call(this.table, this.getComponent(), false);
+       } else {
+               this.hide();
+       }
+};
+
+//show column
+Column.prototype.show = function (silent, responsiveToggle) {
+       if (!this.visible) {
+               this.visible = true;
+
+               this.element.style.display = "";
+
+               if (this.parent.isGroup) {
+                       this.parent.checkColumnVisibility();
+               }
+
+               this.cells.forEach(function (cell) {
+                       cell.show();
+               });
+
+               if (!this.isGroup && this.width === null) {
+                       this.reinitializeWidth();
+               }
+
+               this.table.columnManager._verticalAlignHeaders();
+
+               if (this.table.options.persistence && this.table.modExists("persistence", true) && this.table.modules.persistence.config.columns) {
+                       this.table.modules.persistence.save("columns");
+               }
+
+               if (!responsiveToggle && this.table.options.responsiveLayout && this.table.modExists("responsiveLayout", true)) {
+                       this.table.modules.responsiveLayout.updateColumnVisibility(this, this.visible);
+               }
+
+               if (!silent) {
+                       this.table.options.columnVisibilityChanged.call(this.table, this.getComponent(), true);
+               }
+
+               if (this.parent.isGroup) {
+                       this.parent.matchChildWidths();
+               }
+       }
+};
+
+//hide column
+Column.prototype.hide = function (silent, responsiveToggle) {
+       if (this.visible) {
+               this.visible = false;
+
+               this.element.style.display = "none";
+
+               this.table.columnManager._verticalAlignHeaders();
+
+               if (this.parent.isGroup) {
+                       this.parent.checkColumnVisibility();
+               }
+
+               this.cells.forEach(function (cell) {
+                       cell.hide();
+               });
+
+               if (this.table.options.persistence && this.table.modExists("persistence", true) && this.table.modules.persistence.config.columns) {
+                       this.table.modules.persistence.save("columns");
+               }
+
+               if (!responsiveToggle && this.table.options.responsiveLayout && this.table.modExists("responsiveLayout", true)) {
+                       this.table.modules.responsiveLayout.updateColumnVisibility(this, this.visible);
+               }
+
+               if (!silent) {
+                       this.table.options.columnVisibilityChanged.call(this.table, this.getComponent(), false);
+               }
+
+               if (this.parent.isGroup) {
+                       this.parent.matchChildWidths();
+               }
+       }
+};
+
+Column.prototype.matchChildWidths = function () {
+       var childWidth = 0;
+
+       if (this.contentElement && this.columns.length) {
+               this.columns.forEach(function (column) {
+                       if (column.visible) {
+                               childWidth += column.getWidth();
+                       }
+               });
+
+               this.contentElement.style.maxWidth = childWidth - 1 + "px";
+
+               if (this.parent.isGroup) {
+                       this.parent.matchChildWidths();
+               }
+       }
+};
+
+Column.prototype.setWidth = function (width) {
+       this.widthFixed = true;
+       this.setWidthActual(width);
+};
+
+Column.prototype.setWidthActual = function (width) {
+       if (isNaN(width)) {
+               width = Math.floor(this.table.element.clientWidth / 100 * parseInt(width));
+       }
+
+       width = Math.max(this.minWidth, width);
+
+       this.width = width;
+       this.widthStyled = width ? width + "px" : "";
+
+       this.element.style.width = this.widthStyled;
+
+       if (!this.isGroup) {
+               this.cells.forEach(function (cell) {
+                       cell.setWidth();
+               });
+       }
+
+       if (this.parent.isGroup) {
+               this.parent.matchChildWidths();
+       }
+
+       //set resizable handles
+       if (this.table.modExists("frozenColumns")) {
+               this.table.modules.frozenColumns.layout();
+       }
+};
+
+Column.prototype.checkCellHeights = function () {
+       var rows = [];
+
+       this.cells.forEach(function (cell) {
+               if (cell.row.heightInitialized) {
+                       if (cell.row.getElement().offsetParent !== null) {
+                               rows.push(cell.row);
+                               cell.row.clearCellHeight();
+                       } else {
+                               cell.row.heightInitialized = false;
+                       }
+               }
+       });
+
+       rows.forEach(function (row) {
+               row.calcHeight();
+       });
+
+       rows.forEach(function (row) {
+               row.setCellHeight();
+       });
+};
+
+Column.prototype.getWidth = function () {
+       var width = 0;
+
+       if (this.isGroup) {
+               this.columns.forEach(function (column) {
+                       if (column.visible) {
+                               width += column.getWidth();
+                       }
+               });
+       } else {
+               width = this.width;
+       }
+
+       return width;
+};
+
+Column.prototype.getHeight = function () {
+       return this.element.offsetHeight;
+};
+
+Column.prototype.setMinWidth = function (minWidth) {
+       this.minWidth = minWidth;
+       this.minWidthStyled = minWidth ? minWidth + "px" : "";
+
+       this.element.style.minWidth = this.minWidthStyled;
+
+       this.cells.forEach(function (cell) {
+               cell.setMinWidth();
+       });
+};
+
+Column.prototype.delete = function () {
+       var _this7 = this;
+
+       return new Promise(function (resolve, reject) {
+
+               if (_this7.isGroup) {
+                       _this7.columns.forEach(function (column) {
+                               column.delete();
+                       });
+               }
+
+               //cancel edit if column is currently being edited
+               if (_this7.table.modExists("edit")) {
+                       if (_this7.table.modules.edit.currentCell.column === _this7) {
+                               _this7.table.modules.edit.cancelEdit();
+                       }
+               }
+
+               var cellCount = _this7.cells.length;
+
+               for (var i = 0; i < cellCount; i++) {
+                       _this7.cells[0].delete();
+               }
+
+               _this7.element.parentNode.removeChild(_this7.element);
+
+               _this7.table.columnManager.deregisterColumn(_this7);
+
+               resolve();
+       });
+};
+
+Column.prototype.columnRendered = function () {
+       if (this.titleFormatterRendered) {
+               this.titleFormatterRendered();
+       }
+};
+
+Column.prototype.validate = function () {
+       var invalid = [];
+
+       this.cells.forEach(function (cell) {
+               if (!cell.validate()) {
+                       invalid.push(cell.getComponent());
+               }
+       });
+
+       return invalid.length ? invalid : true;
+};
+
+//////////////// Cell Management /////////////////
+
+//generate cell for this column
+Column.prototype.generateCell = function (row) {
+       var self = this;
+
+       var cell = new Cell(self, row);
+
+       this.cells.push(cell);
+
+       return cell;
+};
+
+Column.prototype.nextColumn = function () {
+       var index = this.table.columnManager.findColumnIndex(this);
+       return index > -1 ? this._nextVisibleColumn(index + 1) : false;
+};
+
+Column.prototype._nextVisibleColumn = function (index) {
+       var column = this.table.columnManager.getColumnByIndex(index);
+       return !column || column.visible ? column : this._nextVisibleColumn(index + 1);
+};
+
+Column.prototype.prevColumn = function () {
+       var index = this.table.columnManager.findColumnIndex(this);
+       return index > -1 ? this._prevVisibleColumn(index - 1) : false;
+};
+
+Column.prototype._prevVisibleColumn = function (index) {
+       var column = this.table.columnManager.getColumnByIndex(index);
+       return !column || column.visible ? column : this._prevVisibleColumn(index - 1);
+};
+
+Column.prototype.reinitializeWidth = function (force) {
+       this.widthFixed = false;
+
+       //set width if present
+       if (typeof this.definition.width !== "undefined" && !force) {
+               this.setWidth(this.definition.width);
+       }
+
+       //hide header filters to prevent them altering column width
+       if (this.table.modExists("filter")) {
+               this.table.modules.filter.hideHeaderFilterElements();
+       }
+
+       this.fitToData();
+
+       //show header filters again after layout is complete
+       if (this.table.modExists("filter")) {
+               this.table.modules.filter.showHeaderFilterElements();
+       }
+};
+
+//set column width to maximum cell width
+Column.prototype.fitToData = function () {
+       var self = this;
+
+       if (!this.widthFixed) {
+               this.element.style.width = "";
+
+               self.cells.forEach(function (cell) {
+                       cell.clearWidth();
+               });
+       }
+
+       var maxWidth = this.element.offsetWidth;
+
+       if (!self.width || !this.widthFixed) {
+               self.cells.forEach(function (cell) {
+                       var width = cell.getWidth();
+
+                       if (width > maxWidth) {
+                               maxWidth = width;
+                       }
+               });
+
+               if (maxWidth) {
+                       self.setWidthActual(maxWidth + 1);
+               }
+       }
+};
+
+Column.prototype.updateDefinition = function (updates) {
+       var _this8 = this;
+
+       return new Promise(function (resolve, reject) {
+               var definition;
+
+               if (!_this8.isGroup) {
+                       definition = Object.assign({}, _this8.getDefinition());
+                       definition = Object.assign(definition, updates);
+
+                       _this8.table.columnManager.addColumn(definition, false, _this8).then(function (column) {
+
+                               if (definition.field == _this8.field) {
+                                       _this8.field = false; //cleair field name to prevent deletion of duplicate column from arrays
+                               }
+
+                               _this8.delete().then(function () {
+                                       resolve(column.getComponent());
+                               }).catch(function (err) {
+                                       reject(err);
+                               });
+                       }).catch(function (err) {
+                               reject(err);
+                       });
+               } else {
+                       console.warn("Column Update Error - The updateDefintion function is only available on columns, not column groups");
+                       reject("Column Update Error - The updateDefintion function is only available on columns, not column groups");
+               }
+       });
+};
+
+Column.prototype.deleteCell = function (cell) {
+       var index = this.cells.indexOf(cell);
+
+       if (index > -1) {
+               this.cells.splice(index, 1);
+       }
+};
+
+Column.prototype.defaultOptionList = ["title", "field", "columns", "visible", "align", "hozAlign", "vertAlign", "width", "minWidth", "widthGrow", "widthShrink", "resizable", "frozen", "responsive", "tooltip", "cssClass", "rowHandle", "hideInHtml", "print", "htmlOutput", "sorter", "sorterParams", "formatter", "formatterParams", "variableHeight", "editable", "editor", "editorParams", "validator", "mutator", "mutatorParams", "mutatorData", "mutatorDataParams", "mutatorEdit", "mutatorEditParams", "mutatorClipboard", "mutatorClipboardParams", "accessor", "accessorParams", "accessorData", "accessorDataParams", "accessorDownload", "accessorDownloadParams", "accessorClipboard", "accessorClipboardParams", "accessorPrint", "accessorPrintParams", "accessorHtmlOutput", "accessorHtmlOutputParams", "clipboard", "download", "downloadTitle", "topCalc", "topCalcParams", "topCalcFormatter", "topCalcFormatterParams", "bottomCalc", "bottomCalcParams", "bottomCalcFormatter", "bottomCalcFormatterParams", "cellClick", "cellDblClick", "cellContext", "cellTap", "cellDblTap", "cellTapHold", "cellMouseEnter", "cellMouseLeave", "cellMouseOver", "cellMouseOut", "cellMouseMove", "cellEditing", "cellEdited", "cellEditCancelled", "headerSort", "headerSortStartingDir", "headerSortTristate", "headerClick", "headerDblClick", "headerContext", "headerTap", "headerDblTap", "headerTapHold", "headerTooltip", "headerVertical", "editableTitle", "titleFormatter", "titleFormatterParams", "headerFilter", "headerFilterPlaceholder", "headerFilterParams", "headerFilterEmptyCheck", "headerFilterFunc", "headerFilterFuncParams", "headerFilterLiveFilter", "print", "headerContextMenu", "headerMenu", "contextMenu", "formatterPrint", "formatterPrintParams", "formatterClipboard", "formatterClipboardParams", "formatterHtmlOutput", "formatterHtmlOutputParams", "titlePrint", "titleClipboard", "titleHtmlOutput", "titleDownload"];
+
+//////////////// Event Bindings /////////////////
+
+//////////////// Object Generation /////////////////
+Column.prototype.getComponent = function () {
+       if (!this.component) {
+               this.component = new ColumnComponent(this);
+       }
+
+       return this.component;
+};
+
+var RowManager = function RowManager(table) {
+
+       this.table = table;
+       this.element = this.createHolderElement(); //containing element
+       this.tableElement = this.createTableElement(); //table element
+       this.heightFixer = this.createTableElement(); //table element
+       this.columnManager = null; //hold column manager object
+       this.height = 0; //hold height of table element
+
+       this.firstRender = false; //handle first render
+       this.renderMode = "virtual"; //current rendering mode
+       this.fixedHeight = false; //current rendering mode
+
+       this.rows = []; //hold row data objects
+       this.activeRows = []; //rows currently available to on display in the table
+       this.activeRowsCount = 0; //count of active rows
+
+       this.displayRows = []; //rows currently on display in the table
+       this.displayRowsCount = 0; //count of display rows
+
+       this.scrollTop = 0;
+       this.scrollLeft = 0;
+
+       this.vDomRowHeight = 20; //approximation of row heights for padding
+
+       this.vDomTop = 0; //hold position for first rendered row in the virtual DOM
+       this.vDomBottom = 0; //hold possition for last rendered row in the virtual DOM
+
+       this.vDomScrollPosTop = 0; //last scroll position of the vDom top;
+       this.vDomScrollPosBottom = 0; //last scroll position of the vDom bottom;
+
+       this.vDomTopPad = 0; //hold value of padding for top of virtual DOM
+       this.vDomBottomPad = 0; //hold value of padding for bottom of virtual DOM
+
+       this.vDomMaxRenderChain = 90; //the maximum number of dom elements that can be rendered in 1 go
+
+       this.vDomWindowBuffer = 0; //window row buffer before removing elements, to smooth scrolling
+
+       this.vDomWindowMinTotalRows = 20; //minimum number of rows to be generated in virtual dom (prevent buffering issues on tables with tall rows)
+       this.vDomWindowMinMarginRows = 5; //minimum number of rows to be generated in virtual dom margin
+
+       this.vDomTopNewRows = []; //rows to normalize after appending to optimize render speed
+       this.vDomBottomNewRows = []; //rows to normalize after appending to optimize render speed
+
+       this.rowNumColumn = false; //hold column component for row number column
+
+       this.redrawBlock = false; //prevent redraws to allow multiple data manipulations becore continuing
+       this.redrawBlockRestoreConfig = false; //store latest redraw function calls for when redraw is needed
+       this.redrawBlockRederInPosition = false; //store latest redraw function calls for when redraw is needed
+};
+
+//////////////// Setup Functions /////////////////
+
+RowManager.prototype.createHolderElement = function () {
+       var el = document.createElement("div");
+
+       el.classList.add("tabulator-tableHolder");
+       el.setAttribute("tabindex", 0);
+
+       return el;
+};
+
+RowManager.prototype.createTableElement = function () {
+       var el = document.createElement("div");
+
+       el.classList.add("tabulator-table");
+
+       return el;
+};
+
+//return containing element
+RowManager.prototype.getElement = function () {
+       return this.element;
+};
+
+//return table element
+RowManager.prototype.getTableElement = function () {
+       return this.tableElement;
+};
+
+//return position of row in table
+RowManager.prototype.getRowPosition = function (row, active) {
+       if (active) {
+               return this.activeRows.indexOf(row);
+       } else {
+               return this.rows.indexOf(row);
+       }
+};
+
+//link to column manager
+RowManager.prototype.setColumnManager = function (manager) {
+       this.columnManager = manager;
+};
+
+RowManager.prototype.initialize = function () {
+       var self = this;
+
+       self.setRenderMode();
+
+       //initialize manager
+       self.element.appendChild(self.tableElement);
+
+       self.firstRender = true;
+
+       //scroll header along with table body
+       self.element.addEventListener("scroll", function () {
+               var left = self.element.scrollLeft;
+
+               //handle horizontal scrolling
+               if (self.scrollLeft != left) {
+                       self.columnManager.scrollHorizontal(left);
+
+                       if (self.table.options.groupBy) {
+                               self.table.modules.groupRows.scrollHeaders(left);
+                       }
+
+                       if (self.table.modExists("columnCalcs")) {
+                               self.table.modules.columnCalcs.scrollHorizontal(left);
+                       }
+
+                       self.table.options.scrollHorizontal(left);
+               }
+
+               self.scrollLeft = left;
+       });
+
+       //handle virtual dom scrolling
+       if (this.renderMode === "virtual") {
+
+               self.element.addEventListener("scroll", function () {
+                       var top = self.element.scrollTop;
+                       var dir = self.scrollTop > top;
+
+                       //handle verical scrolling
+                       if (self.scrollTop != top) {
+                               self.scrollTop = top;
+                               self.scrollVertical(dir);
+
+                               if (self.table.options.ajaxProgressiveLoad == "scroll") {
+                                       self.table.modules.ajax.nextPage(self.element.scrollHeight - self.element.clientHeight - top);
+                               }
+
+                               self.table.options.scrollVertical(top);
+                       } else {
+                               self.scrollTop = top;
+                       }
+               });
+       }
+};
+
+////////////////// Row Manipulation //////////////////
+
+RowManager.prototype.findRow = function (subject) {
+       var self = this;
+
+       if ((typeof subject === 'undefined' ? 'undefined' : _typeof(subject)) == "object") {
+
+               if (subject instanceof Row) {
+                       //subject is row element
+                       return subject;
+               } else if (subject instanceof RowComponent) {
+                       //subject is public row component
+                       return subject._getSelf() || false;
+               } else if (typeof HTMLElement !== "undefined" && subject instanceof HTMLElement) {
+                       //subject is a HTML element of the row
+                       var match = self.rows.find(function (row) {
+                               return row.element === subject;
+                       });
+
+                       return match || false;
+               }
+       } else if (typeof subject == "undefined" || subject === null) {
+               return false;
+       } else {
+               //subject should be treated as the index of the row
+               var _match = self.rows.find(function (row) {
+                       return row.data[self.table.options.index] == subject;
+               });
+
+               return _match || false;
+       }
+
+       //catch all for any other type of input
+
+       return false;
+};
+
+RowManager.prototype.getRowFromDataObject = function (data) {
+       var match = this.rows.find(function (row) {
+               return row.data === data;
+       });
+
+       return match || false;
+};
+
+RowManager.prototype.getRowFromPosition = function (position, active) {
+       if (active) {
+               return this.activeRows[position];
+       } else {
+               return this.rows[position];
+       }
+};
+
+RowManager.prototype.scrollToRow = function (row, position, ifVisible) {
+       var _this9 = this;
+
+       var rowIndex = this.getDisplayRows().indexOf(row),
+           rowEl = row.getElement(),
+           rowTop,
+           offset = 0;
+
+       return new Promise(function (resolve, reject) {
+               if (rowIndex > -1) {
+
+                       if (typeof position === "undefined") {
+                               position = _this9.table.options.scrollToRowPosition;
+                       }
+
+                       if (typeof ifVisible === "undefined") {
+                               ifVisible = _this9.table.options.scrollToRowIfVisible;
+                       }
+
+                       if (position === "nearest") {
+                               switch (_this9.renderMode) {
+                                       case "classic":
+                                               rowTop = Tabulator.prototype.helpers.elOffset(rowEl).top;
+                                               position = Math.abs(_this9.element.scrollTop - rowTop) > Math.abs(_this9.element.scrollTop + _this9.element.clientHeight - rowTop) ? "bottom" : "top";
+                                               break;
+                                       case "virtual":
+                                               position = Math.abs(_this9.vDomTop - rowIndex) > Math.abs(_this9.vDomBottom - rowIndex) ? "bottom" : "top";
+                                               break;
+                               }
+                       }
+
+                       //check row visibility
+                       if (!ifVisible) {
+                               if (Tabulator.prototype.helpers.elVisible(rowEl)) {
+                                       offset = Tabulator.prototype.helpers.elOffset(rowEl).top - Tabulator.prototype.helpers.elOffset(_this9.element).top;
+
+                                       if (offset > 0 && offset < _this9.element.clientHeight - rowEl.offsetHeight) {
+                                               return false;
+                                       }
+                               }
+                       }
+
+                       //scroll to row
+                       switch (_this9.renderMode) {
+                               case "classic":
+                                       _this9.element.scrollTop = Tabulator.prototype.helpers.elOffset(rowEl).top - Tabulator.prototype.helpers.elOffset(_this9.element).top + _this9.element.scrollTop;
+                                       break;
+                               case "virtual":
+                                       _this9._virtualRenderFill(rowIndex, true);
+                                       break;
+                       }
+
+                       //align to correct position
+                       switch (position) {
+                               case "middle":
+                               case "center":
+
+                                       if (_this9.element.scrollHeight - _this9.element.scrollTop == _this9.element.clientHeight) {
+                                               _this9.element.scrollTop = _this9.element.scrollTop + (rowEl.offsetTop - _this9.element.scrollTop) - (_this9.element.scrollHeight - rowEl.offsetTop) / 2;
+                                       } else {
+                                               _this9.element.scrollTop = _this9.element.scrollTop - _this9.element.clientHeight / 2;
+                                       }
+
+                                       break;
+
+                               case "bottom":
+
+                                       if (_this9.element.scrollHeight - _this9.element.scrollTop == _this9.element.clientHeight) {
+                                               _this9.element.scrollTop = _this9.element.scrollTop - (_this9.element.scrollHeight - rowEl.offsetTop) + rowEl.offsetHeight;
+                                       } else {
+                                               _this9.element.scrollTop = _this9.element.scrollTop - _this9.element.clientHeight + rowEl.offsetHeight;
+                                       }
+
+                                       break;
+                       }
+
+                       resolve();
+               } else {
+                       console.warn("Scroll Error - Row not visible");
+                       reject("Scroll Error - Row not visible");
+               }
+       });
+};
+
+////////////////// Data Handling //////////////////
+
+RowManager.prototype.setData = function (data, renderInPosition, columnsChanged) {
+       var _this10 = this;
+
+       var self = this;
+
+       return new Promise(function (resolve, reject) {
+               if (renderInPosition && _this10.getDisplayRows().length) {
+                       if (self.table.options.pagination) {
+                               self._setDataActual(data, true);
+                       } else {
+                               _this10.reRenderInPosition(function () {
+                                       self._setDataActual(data);
+                               });
+                       }
+               } else {
+                       if (_this10.table.options.autoColumns && columnsChanged) {
+                               _this10.table.columnManager.generateColumnsFromRowData(data);
+                       }
+                       _this10.resetScroll();
+                       _this10._setDataActual(data);
+               }
+
+               resolve();
+       });
+};
+
+RowManager.prototype._setDataActual = function (data, renderInPosition) {
+       var self = this;
+
+       self.table.options.dataLoading.call(this.table, data);
+
+       this._wipeElements();
+
+       if (this.table.options.history && this.table.modExists("history")) {
+               this.table.modules.history.clear();
+       }
+
+       if (Array.isArray(data)) {
+
+               if (this.table.modExists("selectRow")) {
+                       this.table.modules.selectRow.clearSelectionData();
+               }
+
+               if (this.table.options.reactiveData && this.table.modExists("reactiveData", true)) {
+                       this.table.modules.reactiveData.watchData(data);
+               }
+
+               data.forEach(function (def, i) {
+                       if (def && (typeof def === 'undefined' ? 'undefined' : _typeof(def)) === "object") {
+                               var row = new Row(def, self);
+                               self.rows.push(row);
+                       } else {
+                               console.warn("Data Loading Warning - Invalid row data detected and ignored, expecting object but received:", def);
+                       }
+               });
+
+               self.table.options.dataLoaded.call(this.table, data);
+
+               self.refreshActiveData(false, false, renderInPosition);
+       } else {
+               console.error("Data Loading Error - Unable to process data due to invalid data type \nExpecting: array \nReceived: ", typeof data === 'undefined' ? 'undefined' : _typeof(data), "\nData:     ", data);
+       }
+};
+
+RowManager.prototype._wipeElements = function () {
+       this.rows.forEach(function (row) {
+               row.wipe();
+       });
+
+       if (this.table.options.groupBy && this.table.modExists("groupRows")) {
+               this.table.modules.groupRows.wipe();
+       }
+
+       this.rows = [];
+};
+
+RowManager.prototype.deleteRow = function (row, blockRedraw) {
+       var allIndex = this.rows.indexOf(row),
+           activeIndex = this.activeRows.indexOf(row);
+
+       if (activeIndex > -1) {
+               this.activeRows.splice(activeIndex, 1);
+       }
+
+       if (allIndex > -1) {
+               this.rows.splice(allIndex, 1);
+       }
+
+       this.setActiveRows(this.activeRows);
+
+       this.displayRowIterator(function (rows) {
+               var displayIndex = rows.indexOf(row);
+
+               if (displayIndex > -1) {
+                       rows.splice(displayIndex, 1);
+               }
+       });
+
+       if (!blockRedraw) {
+               this.reRenderInPosition();
+       }
+
+       this.regenerateRowNumbers();
+
+       this.table.options.rowDeleted.call(this.table, row.getComponent());
+
+       this.table.options.dataEdited.call(this.table, this.getData());
+
+       if (this.table.options.groupBy && this.table.modExists("groupRows")) {
+               this.table.modules.groupRows.updateGroupRows(true);
+       } else if (this.table.options.pagination && this.table.modExists("page")) {
+               this.refreshActiveData(false, false, true);
+       } else {
+               if (this.table.options.pagination && this.table.modExists("page")) {
+                       this.refreshActiveData("page");
+               }
+       }
+};
+
+RowManager.prototype.addRow = function (data, pos, index, blockRedraw) {
+
+       var row = this.addRowActual(data, pos, index, blockRedraw);
+
+       if (this.table.options.history && this.table.modExists("history")) {
+               this.table.modules.history.action("rowAdd", row, { data: data, pos: pos, index: index });
+       }
+
+       return row;
+};
+
+//add multiple rows
+RowManager.prototype.addRows = function (data, pos, index) {
+       var _this11 = this;
+
+       var self = this,
+           length = 0,
+           rows = [];
+
+       return new Promise(function (resolve, reject) {
+               pos = _this11.findAddRowPos(pos);
+
+               if (!Array.isArray(data)) {
+                       data = [data];
+               }
+
+               length = data.length - 1;
+
+               if (typeof index == "undefined" && pos || typeof index !== "undefined" && !pos) {
+                       data.reverse();
+               }
+
+               data.forEach(function (item, i) {
+                       var row = self.addRow(item, pos, index, true);
+                       rows.push(row);
+               });
+
+               if (_this11.table.options.groupBy && _this11.table.modExists("groupRows")) {
+                       _this11.table.modules.groupRows.updateGroupRows(true);
+               } else if (_this11.table.options.pagination && _this11.table.modExists("page")) {
+                       _this11.refreshActiveData(false, false, true);
+               } else {
+                       _this11.reRenderInPosition();
+               }
+
+               //recalc column calculations if present
+               if (_this11.table.modExists("columnCalcs")) {
+                       _this11.table.modules.columnCalcs.recalc(_this11.table.rowManager.activeRows);
+               }
+
+               _this11.regenerateRowNumbers();
+               resolve(rows);
+       });
+};
+
+RowManager.prototype.findAddRowPos = function (pos) {
+       if (typeof pos === "undefined") {
+               pos = this.table.options.addRowPos;
+       }
+
+       if (pos === "pos") {
+               pos = true;
+       }
+
+       if (pos === "bottom") {
+               pos = false;
+       }
+
+       return pos;
+};
+
+RowManager.prototype.addRowActual = function (data, pos, index, blockRedraw) {
+       var row = data instanceof Row ? data : new Row(data || {}, this),
+           top = this.findAddRowPos(pos),
+           allIndex = -1,
+           activeIndex,
+           dispRows;
+
+       if (!index && this.table.options.pagination && this.table.options.paginationAddRow == "page") {
+               dispRows = this.getDisplayRows();
+
+               if (top) {
+                       if (dispRows.length) {
+                               index = dispRows[0];
+                       } else {
+                               if (this.activeRows.length) {
+                                       index = this.activeRows[this.activeRows.length - 1];
+                                       top = false;
+                               }
+                       }
+               } else {
+                       if (dispRows.length) {
+                               index = dispRows[dispRows.length - 1];
+                               top = dispRows.length < this.table.modules.page.getPageSize() ? false : true;
+                       }
+               }
+       }
+
+       if (typeof index !== "undefined") {
+               index = this.findRow(index);
+       }
+
+       if (this.table.options.groupBy && this.table.modExists("groupRows")) {
+               this.table.modules.groupRows.assignRowToGroup(row);
+
+               var groupRows = row.getGroup().rows;
+
+               if (groupRows.length > 1) {
+
+                       if (!index || index && groupRows.indexOf(index) == -1) {
+                               if (top) {
+                                       if (groupRows[0] !== row) {
+                                               index = groupRows[0];
+                                               this._moveRowInArray(row.getGroup().rows, row, index, !top);
+                                       }
+                               } else {
+                                       if (groupRows[groupRows.length - 1] !== row) {
+                                               index = groupRows[groupRows.length - 1];
+                                               this._moveRowInArray(row.getGroup().rows, row, index, !top);
+                                       }
+                               }
+                       } else {
+                               this._moveRowInArray(row.getGroup().rows, row, index, !top);
+                       }
+               }
+       }
+
+       if (index) {
+               allIndex = this.rows.indexOf(index);
+       }
+
+       if (index && allIndex > -1) {
+               activeIndex = this.activeRows.indexOf(index);
+
+               this.displayRowIterator(function (rows) {
+                       var displayIndex = rows.indexOf(index);
+
+                       if (displayIndex > -1) {
+                               rows.splice(top ? displayIndex : displayIndex + 1, 0, row);
+                       }
+               });
+
+               if (activeIndex > -1) {
+                       this.activeRows.splice(top ? activeIndex : activeIndex + 1, 0, row);
+               }
+
+               this.rows.splice(top ? allIndex : allIndex + 1, 0, row);
+       } else {
+
+               if (top) {
+
+                       this.displayRowIterator(function (rows) {
+                               rows.unshift(row);
+                       });
+
+                       this.activeRows.unshift(row);
+                       this.rows.unshift(row);
+               } else {
+                       this.displayRowIterator(function (rows) {
+                               rows.push(row);
+                       });
+
+                       this.activeRows.push(row);
+                       this.rows.push(row);
+               }
+       }
+
+       this.setActiveRows(this.activeRows);
+
+       this.table.options.rowAdded.call(this.table, row.getComponent());
+
+       this.table.options.dataEdited.call(this.table, this.getData());
+
+       if (!blockRedraw) {
+               this.reRenderInPosition();
+       }
+
+       return row;
+};
+
+RowManager.prototype.moveRow = function (from, to, after) {
+       if (this.table.options.history && this.table.modExists("history")) {
+               this.table.modules.history.action("rowMove", from, { posFrom: this.getRowPosition(from), posTo: this.getRowPosition(to), to: to, after: after });
+       }
+
+       this.moveRowActual(from, to, after);
+
+       this.regenerateRowNumbers();
+
+       this.table.options.rowMoved.call(this.table, from.getComponent());
+};
+
+RowManager.prototype.moveRowActual = function (from, to, after) {
+       var _this12 = this;
+
+       this._moveRowInArray(this.rows, from, to, after);
+       this._moveRowInArray(this.activeRows, from, to, after);
+
+       this.displayRowIterator(function (rows) {
+               _this12._moveRowInArray(rows, from, to, after);
+       });
+
+       if (this.table.options.groupBy && this.table.modExists("groupRows")) {
+
+               if (!after && to instanceof Group) {
+                       to = this.table.rowManager.prevDisplayRow(from) || to;
+               }
+
+               var toGroup = to.getGroup();
+               var fromGroup = from.getGroup();
+
+               if (toGroup === fromGroup) {
+                       this._moveRowInArray(toGroup.rows, from, to, after);
+               } else {
+                       if (fromGroup) {
+                               fromGroup.removeRow(from);
+                       }
+
+                       toGroup.insertRow(from, to, after);
+               }
+       }
+};
+
+RowManager.prototype._moveRowInArray = function (rows, from, to, after) {
+       var fromIndex, toIndex, start, end;
+
+       if (from !== to) {
+
+               fromIndex = rows.indexOf(from);
+
+               if (fromIndex > -1) {
+
+                       rows.splice(fromIndex, 1);
+
+                       toIndex = rows.indexOf(to);
+
+                       if (toIndex > -1) {
+
+                               if (after) {
+                                       rows.splice(toIndex + 1, 0, from);
+                               } else {
+                                       rows.splice(toIndex, 0, from);
+                               }
+                       } else {
+                               rows.splice(fromIndex, 0, from);
+                       }
+               }
+
+               //restyle rows
+               if (rows === this.getDisplayRows()) {
+
+                       start = fromIndex < toIndex ? fromIndex : toIndex;
+                       end = toIndex > fromIndex ? toIndex : fromIndex + 1;
+
+                       for (var i = start; i <= end; i++) {
+                               if (rows[i]) {
+                                       this.styleRow(rows[i], i);
+                               }
+                       }
+               }
+       }
+};
+
+RowManager.prototype.clearData = function () {
+       this.setData([]);
+};
+
+RowManager.prototype.getRowIndex = function (row) {
+       return this.findRowIndex(row, this.rows);
+};
+
+RowManager.prototype.getDisplayRowIndex = function (row) {
+       var index = this.getDisplayRows().indexOf(row);
+       return index > -1 ? index : false;
+};
+
+RowManager.prototype.nextDisplayRow = function (row, rowOnly) {
+       var index = this.getDisplayRowIndex(row),
+           nextRow = false;
+
+       if (index !== false && index < this.displayRowsCount - 1) {
+               nextRow = this.getDisplayRows()[index + 1];
+       }
+
+       if (nextRow && (!(nextRow instanceof Row) || nextRow.type != "row")) {
+               return this.nextDisplayRow(nextRow, rowOnly);
+       }
+
+       return nextRow;
+};
+
+RowManager.prototype.prevDisplayRow = function (row, rowOnly) {
+       var index = this.getDisplayRowIndex(row),
+           prevRow = false;
+
+       if (index) {
+               prevRow = this.getDisplayRows()[index - 1];
+       }
+
+       if (rowOnly && prevRow && (!(prevRow instanceof Row) || prevRow.type != "row")) {
+               return this.prevDisplayRow(prevRow, rowOnly);
+       }
+
+       return prevRow;
+};
+
+RowManager.prototype.findRowIndex = function (row, list) {
+       var rowIndex;
+
+       row = this.findRow(row);
+
+       if (row) {
+               rowIndex = list.indexOf(row);
+
+               if (rowIndex > -1) {
+                       return rowIndex;
+               }
+       }
+
+       return false;
+};
+
+RowManager.prototype.getData = function (active, transform) {
+       var output = [],
+           rows = this.getRows(active);
+
+       rows.forEach(function (row) {
+               if (row.type == "row") {
+                       output.push(row.getData(transform || "data"));
+               }
+       });
+
+       return output;
+};
+
+RowManager.prototype.getComponents = function (active) {
+       var output = [],
+           rows = this.getRows(active);
+
+       rows.forEach(function (row) {
+               output.push(row.getComponent());
+       });
+
+       return output;
+};
+
+RowManager.prototype.getDataCount = function (active) {
+       var rows = this.getRows(active);
+
+       return rows.length;
+};
+
+RowManager.prototype._genRemoteRequest = function () {
+       var _this13 = this;
+
+       var table = this.table,
+           options = table.options,
+           params = {};
+
+       if (table.modExists("page")) {
+               //set sort data if defined
+               if (options.ajaxSorting) {
+                       var sorters = this.table.modules.sort.getSort();
+
+                       sorters.forEach(function (item) {
+                               delete item.column;
+                       });
+
+                       params[this.table.modules.page.paginationDataSentNames.sorters] = sorters;
+               }
+
+               //set filter data if defined
+               if (options.ajaxFiltering) {
+                       var filters = this.table.modules.filter.getFilters(true, true);
+
+                       params[this.table.modules.page.paginationDataSentNames.filters] = filters;
+               }
+
+               this.table.modules.ajax.setParams(params, true);
+       }
+
+       table.modules.ajax.sendRequest().then(function (data) {
+               _this13._setDataActual(data, true);
+       }).catch(function (e) {});
+};
+
+//choose the path to refresh data after a filter update
+RowManager.prototype.filterRefresh = function () {
+       var table = this.table,
+           options = table.options,
+           left = this.scrollLeft;
+
+       if (options.ajaxFiltering) {
+               if (options.pagination == "remote" && table.modExists("page")) {
+                       table.modules.page.reset(true);
+                       table.modules.page.setPage(1).then(function () {}).catch(function () {});
+               } else if (options.ajaxProgressiveLoad) {
+                       table.modules.ajax.loadData().then(function () {}).catch(function () {});
+               } else {
+                       //assume data is url, make ajax call to url to get data
+                       this._genRemoteRequest();
+               }
+       } else {
+               this.refreshActiveData("filter");
+       }
+
+       this.scrollHorizontal(left);
+};
+
+//choose the path to refresh data after a sorter update
+RowManager.prototype.sorterRefresh = function (loadOrignalData) {
+       var table = this.table,
+           options = this.table.options,
+           left = this.scrollLeft;
+
+       if (options.ajaxSorting) {
+               if ((options.pagination == "remote" || options.progressiveLoad) && table.modExists("page")) {
+                       table.modules.page.reset(true);
+                       table.modules.page.setPage(1).then(function () {}).catch(function () {});
+               } else if (options.ajaxProgressiveLoad) {
+                       table.modules.ajax.loadData().then(function () {}).catch(function () {});
+               } else {
+                       //assume data is url, make ajax call to url to get data
+                       this._genRemoteRequest();
+               }
+       } else {
+               this.refreshActiveData(loadOrignalData ? "filter" : "sort");
+       }
+
+       this.scrollHorizontal(left);
+};
+
+RowManager.prototype.scrollHorizontal = function (left) {
+       this.scrollLeft = left;
+       this.element.scrollLeft = left;
+
+       if (this.table.options.groupBy) {
+               this.table.modules.groupRows.scrollHeaders(left);
+       }
+
+       if (this.table.modExists("columnCalcs")) {
+               this.table.modules.columnCalcs.scrollHorizontal(left);
+       }
+};
+
+//set active data set
+RowManager.prototype.refreshActiveData = function (stage, skipStage, renderInPosition) {
+       var self = this,
+           table = this.table,
+           cascadeOrder = ["all", "filter", "sort", "display", "freeze", "group", "tree", "page"],
+           displayIndex;
+
+       if (this.redrawBlock) {
+
+               if (!this.redrawBlockRestoreConfig || cascadeOrder.indexOf(stage) < cascadeOrder.indexOf(this.redrawBlockRestoreConfig.stage)) {
+                       this.redrawBlockRestoreConfig = {
+                               stage: stage,
+                               skipStage: skipStage,
+                               renderInPosition: renderInPosition
+                       };
+               }
+
+               return;
+       } else {
+
+               if (self.table.modExists("edit")) {
+                       self.table.modules.edit.cancelEdit();
+               }
+
+               if (!stage) {
+                       stage = "all";
+               }
+
+               if (table.options.selectable && !table.options.selectablePersistence && table.modExists("selectRow")) {
+                       table.modules.selectRow.deselectRows();
+               }
+
+               //cascade through data refresh stages
+               switch (stage) {
+                       case "all":
+
+                       case "filter":
+                               if (!skipStage) {
+                                       if (table.modExists("filter")) {
+                                               self.setActiveRows(table.modules.filter.filter(self.rows));
+                                       } else {
+                                               self.setActiveRows(self.rows.slice(0));
+                                       }
+                               } else {
+                                       skipStage = false;
+                               }
+
+                       case "sort":
+                               if (!skipStage) {
+                                       if (table.modExists("sort")) {
+                                               table.modules.sort.sort(this.activeRows);
+                                       }
+                               } else {
+                                       skipStage = false;
+                               }
+
+                               //regenerate row numbers for row number formatter if in use
+                               this.regenerateRowNumbers();
+
+                       //generic stage to allow for pipeline trigger after the data manipulation stage
+                       case "display":
+                               this.resetDisplayRows();
+
+                       case "freeze":
+                               if (!skipStage) {
+                                       if (this.table.modExists("frozenRows")) {
+                                               if (table.modules.frozenRows.isFrozen()) {
+                                                       if (!table.modules.frozenRows.getDisplayIndex()) {
+                                                               table.modules.frozenRows.setDisplayIndex(this.getNextDisplayIndex());
+                                                       }
+
+                                                       displayIndex = table.modules.frozenRows.getDisplayIndex();
+
+                                                       displayIndex = self.setDisplayRows(table.modules.frozenRows.getRows(this.getDisplayRows(displayIndex - 1)), displayIndex);
+
+                                                       if (displayIndex !== true) {
+                                                               table.modules.frozenRows.setDisplayIndex(displayIndex);
+                                                       }
+                                               }
+                                       }
+                               } else {
+                                       skipStage = false;
+                               }
+
+                       case "group":
+                               if (!skipStage) {
+                                       if (table.options.groupBy && table.modExists("groupRows")) {
+
+                                               if (!table.modules.groupRows.getDisplayIndex()) {
+                                                       table.modules.groupRows.setDisplayIndex(this.getNextDisplayIndex());
+                                               }
+
+                                               displayIndex = table.modules.groupRows.getDisplayIndex();
+
+                                               displayIndex = self.setDisplayRows(table.modules.groupRows.getRows(this.getDisplayRows(displayIndex - 1)), displayIndex);
+
+                                               if (displayIndex !== true) {
+                                                       table.modules.groupRows.setDisplayIndex(displayIndex);
+                                               }
+                                       }
+                               } else {
+                                       skipStage = false;
+                               }
+
+                       case "tree":
+
+                               if (!skipStage) {
+                                       if (table.options.dataTree && table.modExists("dataTree")) {
+                                               if (!table.modules.dataTree.getDisplayIndex()) {
+                                                       table.modules.dataTree.setDisplayIndex(this.getNextDisplayIndex());
+                                               }
+
+                                               displayIndex = table.modules.dataTree.getDisplayIndex();
+
+                                               displayIndex = self.setDisplayRows(table.modules.dataTree.getRows(this.getDisplayRows(displayIndex - 1)), displayIndex);
+
+                                               if (displayIndex !== true) {
+                                                       table.modules.dataTree.setDisplayIndex(displayIndex);
+                                               }
+                                       }
+                               } else {
+                                       skipStage = false;
+                               }
+
+                               if (table.options.pagination && table.modExists("page") && !renderInPosition) {
+                                       if (table.modules.page.getMode() == "local") {
+                                               table.modules.page.reset();
+                                       }
+                               }
+
+                       case "page":
+                               if (!skipStage) {
+                                       if (table.options.pagination && table.modExists("page")) {
+
+                                               if (!table.modules.page.getDisplayIndex()) {
+                                                       table.modules.page.setDisplayIndex(this.getNextDisplayIndex());
+                                               }
+
+                                               displayIndex = table.modules.page.getDisplayIndex();
+
+                                               if (table.modules.page.getMode() == "local") {
+                                                       table.modules.page.setMaxRows(this.getDisplayRows(displayIndex - 1).length);
+                                               }
+
+                                               displayIndex = self.setDisplayRows(table.modules.page.getRows(this.getDisplayRows(displayIndex - 1)), displayIndex);
+
+                                               if (displayIndex !== true) {
+                                                       table.modules.page.setDisplayIndex(displayIndex);
+                                               }
+                                       }
+                               } else {
+                                       skipStage = false;
+                               }
+               }
+
+               if (Tabulator.prototype.helpers.elVisible(self.element)) {
+                       if (renderInPosition) {
+                               self.reRenderInPosition();
+                       } else {
+                               self.renderTable();
+                               if (table.options.layoutColumnsOnNewData) {
+                                       self.table.columnManager.redraw(true);
+                               }
+                       }
+               }
+
+               if (table.modExists("columnCalcs")) {
+                       table.modules.columnCalcs.recalc(this.activeRows);
+               }
+       }
+};
+
+//regenerate row numbers for row number formatter if in use
+RowManager.prototype.regenerateRowNumbers = function () {
+       var _this14 = this;
+
+       if (this.rowNumColumn) {
+               this.activeRows.forEach(function (row) {
+                       var cell = row.getCell(_this14.rowNumColumn);
+
+                       if (cell) {
+                               cell._generateContents();
+                       }
+               });
+       }
+};
+
+RowManager.prototype.setActiveRows = function (activeRows) {
+       this.activeRows = activeRows;
+       this.activeRowsCount = this.activeRows.length;
+};
+
+//reset display rows array
+RowManager.prototype.resetDisplayRows = function () {
+       this.displayRows = [];
+
+       this.displayRows.push(this.activeRows.slice(0));
+
+       this.displayRowsCount = this.displayRows[0].length;
+
+       if (this.table.modExists("frozenRows")) {
+               this.table.modules.frozenRows.setDisplayIndex(0);
+       }
+
+       if (this.table.options.groupBy && this.table.modExists("groupRows")) {
+               this.table.modules.groupRows.setDisplayIndex(0);
+       }
+
+       if (this.table.options.pagination && this.table.modExists("page")) {
+               this.table.modules.page.setDisplayIndex(0);
+       }
+};
+
+RowManager.prototype.getNextDisplayIndex = function () {
+       return this.displayRows.length;
+};
+
+//set display row pipeline data
+RowManager.prototype.setDisplayRows = function (displayRows, index) {
+
+       var output = true;
+
+       if (index && typeof this.displayRows[index] != "undefined") {
+               this.displayRows[index] = displayRows;
+               output = true;
+       } else {
+               this.displayRows.push(displayRows);
+               output = index = this.displayRows.length - 1;
+       }
+
+       if (index == this.displayRows.length - 1) {
+               this.displayRowsCount = this.displayRows[this.displayRows.length - 1].length;
+       }
+
+       return output;
+};
+
+RowManager.prototype.getDisplayRows = function (index) {
+       if (typeof index == "undefined") {
+               return this.displayRows.length ? this.displayRows[this.displayRows.length - 1] : [];
+       } else {
+               return this.displayRows[index] || [];
+       }
+};
+
+RowManager.prototype.getVisibleRows = function (viewable) {
+       var topEdge = this.element.scrollTop,
+           bottomEdge = this.element.clientHeight + topEdge,
+           topFound = false,
+           topRow = 0,
+           bottomRow = 0,
+           rows = this.getDisplayRows();
+
+       if (viewable) {
+
+               this.getDisplayRows();
+               for (var i = this.vDomTop; i <= this.vDomBottom; i++) {
+                       if (rows[i]) {
+                               if (!topFound) {
+                                       if (topEdge - rows[i].getElement().offsetTop >= 0) {
+                                               topRow = i;
+                                       } else {
+                                               topFound = true;
+
+                                               if (bottomEdge - rows[i].getElement().offsetTop >= 0) {
+                                                       bottomRow = i;
+                                               } else {
+                                                       break;
+                                               }
+                                       }
+                               } else {
+                                       if (bottomEdge - rows[i].getElement().offsetTop >= 0) {
+                                               bottomRow = i;
+                                       } else {
+                                               break;
+                                       }
+                               }
+                       }
+               }
+       } else {
+               topRow = this.vDomTop;
+               bottomRow = this.vDomBottom;
+       }
+
+       return rows.slice(topRow, bottomRow + 1);
+};
+
+//repeat action accross display rows
+RowManager.prototype.displayRowIterator = function (callback) {
+       this.displayRows.forEach(callback);
+
+       this.displayRowsCount = this.displayRows[this.displayRows.length - 1].length;
+};
+
+//return only actual rows (not group headers etc)
+RowManager.prototype.getRows = function (active) {
+       var rows;
+
+       switch (active) {
+               case "active":
+                       rows = this.activeRows;
+                       break;
+
+               case "display":
+                       rows = this.table.rowManager.getDisplayRows();
+                       break;
+
+               case "visible":
+                       rows = this.getVisibleRows(true);
+                       break;
+
+               default:
+                       rows = this.rows;
+       }
+
+       return rows;
+};
+
+///////////////// Table Rendering /////////////////
+
+//trigger rerender of table in current position
+RowManager.prototype.reRenderInPosition = function (callback) {
+       if (this.getRenderMode() == "virtual") {
+
+               if (this.redrawBlock) {
+                       if (callback) {
+                               callback();
+                       } else {
+                               this.redrawBlockRederInPosition = true;
+                       }
+               } else {
+                       var scrollTop = this.element.scrollTop;
+                       var topRow = false;
+                       var topOffset = false;
+
+                       var left = this.scrollLeft;
+
+                       var rows = this.getDisplayRows();
+
+                       for (var i = this.vDomTop; i <= this.vDomBottom; i++) {
+
+                               if (rows[i]) {
+                                       var diff = scrollTop - rows[i].getElement().offsetTop;
+
+                                       if (topOffset === false || Math.abs(diff) < topOffset) {
+                                               topOffset = diff;
+                                               topRow = i;
+                                       } else {
+                                               break;
+                                       }
+                               }
+                       }
+
+                       if (callback) {
+                               callback();
+                       }
+
+                       this._virtualRenderFill(topRow === false ? this.displayRowsCount - 1 : topRow, true, topOffset || 0);
+
+                       this.scrollHorizontal(left);
+               }
+       } else {
+               this.renderTable();
+
+               if (callback) {
+                       callback();
+               }
+       }
+};
+
+RowManager.prototype.setRenderMode = function () {
+
+       if (this.table.options.virtualDom) {
+
+               this.renderMode = "virtual";
+
+               if (this.table.element.clientHeight || this.table.options.height) {
+                       this.fixedHeight = true;
+               } else {
+                       this.fixedHeight = false;
+               }
+       } else {
+               this.renderMode = "classic";
+       }
+};
+
+RowManager.prototype.getRenderMode = function () {
+       return this.renderMode;
+};
+
+RowManager.prototype.renderTable = function () {
+
+       this.table.options.renderStarted.call(this.table);
+
+       this.element.scrollTop = 0;
+
+       switch (this.renderMode) {
+               case "classic":
+                       this._simpleRender();
+                       break;
+
+               case "virtual":
+                       this._virtualRenderFill();
+                       break;
+       }
+
+       if (this.firstRender) {
+               if (this.displayRowsCount) {
+                       this.firstRender = false;
+                       this.table.modules.layout.layout();
+               } else {
+                       this.renderEmptyScroll();
+               }
+       }
+
+       if (this.table.modExists("frozenColumns")) {
+               this.table.modules.frozenColumns.layout();
+       }
+
+       if (!this.displayRowsCount) {
+               if (this.table.options.placeholder) {
+
+                       this.table.options.placeholder.setAttribute("tabulator-render-mode", this.renderMode);
+
+                       this.getElement().appendChild(this.table.options.placeholder);
+                       this.table.options.placeholder.style.width = this.table.columnManager.getWidth() + "px";
+               }
+       }
+
+       this.table.options.renderComplete.call(this.table);
+};
+
+//simple render on heightless table
+RowManager.prototype._simpleRender = function () {
+       this._clearVirtualDom();
+
+       if (this.displayRowsCount) {
+               this.checkClassicModeGroupHeaderWidth();
+       } else {
+               this.renderEmptyScroll();
+       }
+};
+
+RowManager.prototype.checkClassicModeGroupHeaderWidth = function () {
+       var self = this,
+           element = this.tableElement,
+           onlyGroupHeaders = true;
+
+       self.getDisplayRows().forEach(function (row, index) {
+               self.styleRow(row, index);
+               element.appendChild(row.getElement());
+               row.initialize(true);
+
+               if (row.type !== "group") {
+                       onlyGroupHeaders = false;
+               }
+       });
+
+       if (onlyGroupHeaders) {
+               element.style.minWidth = self.table.columnManager.getWidth() + "px";
+       } else {
+               element.style.minWidth = "";
+       }
+};
+
+//show scrollbars on empty table div
+RowManager.prototype.renderEmptyScroll = function () {
+       if (this.table.options.placeholder) {
+               this.tableElement.style.display = "none";
+       } else {
+               this.tableElement.style.minWidth = this.table.columnManager.getWidth() + "px";
+               this.tableElement.style.minHeight = "1px";
+               this.tableElement.style.visibility = "hidden";
+       }
+};
+
+RowManager.prototype._clearVirtualDom = function () {
+       var element = this.tableElement;
+
+       if (this.table.options.placeholder && this.table.options.placeholder.parentNode) {
+               this.table.options.placeholder.parentNode.removeChild(this.table.options.placeholder);
+       }
+
+       // element.children.detach();
+       while (element.firstChild) {
+               element.removeChild(element.firstChild);
+       }element.style.paddingTop = "";
+       element.style.paddingBottom = "";
+       element.style.minWidth = "";
+       element.style.minHeight = "";
+       element.style.display = "";
+       element.style.visibility = "";
+
+       this.scrollTop = 0;
+       this.scrollLeft = 0;
+       this.vDomTop = 0;
+       this.vDomBottom = 0;
+       this.vDomTopPad = 0;
+       this.vDomBottomPad = 0;
+};
+
+RowManager.prototype.styleRow = function (row, index) {
+       var rowEl = row.getElement();
+
+       if (index % 2) {
+               rowEl.classList.add("tabulator-row-even");
+               rowEl.classList.remove("tabulator-row-odd");
+       } else {
+               rowEl.classList.add("tabulator-row-odd");
+               rowEl.classList.remove("tabulator-row-even");
+       }
+};
+
+//full virtual render
+RowManager.prototype._virtualRenderFill = function (position, forceMove, offset) {
+       var self = this,
+           element = self.tableElement,
+           holder = self.element,
+           topPad = 0,
+           rowsHeight = 0,
+           topPadHeight = 0,
+           i = 0,
+           onlyGroupHeaders = true,
+           rows = self.getDisplayRows();
+
+       position = position || 0;
+
+       offset = offset || 0;
+
+       if (!position) {
+               self._clearVirtualDom();
+       } else {
+               while (element.firstChild) {
+                       element.removeChild(element.firstChild);
+               } //check if position is too close to bottom of table
+               var heightOccupied = (self.displayRowsCount - position + 1) * self.vDomRowHeight;
+
+               if (heightOccupied < self.height) {
+                       position -= Math.ceil((self.height - heightOccupied) / self.vDomRowHeight);
+
+                       if (position < 0) {
+                               position = 0;
+                       }
+               }
+
+               //calculate initial pad
+               topPad = Math.min(Math.max(Math.floor(self.vDomWindowBuffer / self.vDomRowHeight), self.vDomWindowMinMarginRows), position);
+               position -= topPad;
+       }
+
+       if (self.displayRowsCount && Tabulator.prototype.helpers.elVisible(self.element)) {
+
+               self.vDomTop = position;
+
+               self.vDomBottom = position - 1;
+
+               while ((rowsHeight <= self.height + self.vDomWindowBuffer || i < self.vDomWindowMinTotalRows) && self.vDomBottom < self.displayRowsCount - 1) {
+                       var index = self.vDomBottom + 1,
+                           row = rows[index],
+                           rowHeight = 0;
+
+                       self.styleRow(row, index);
+
+                       element.appendChild(row.getElement());
+                       if (!row.initialized) {
+                               row.initialize(true);
+                       } else {
+                               if (!row.heightInitialized) {
+                                       row.normalizeHeight(true);
+                               }
+                       }
+
+                       rowHeight = row.getHeight();
+
+                       if (i < topPad) {
+                               topPadHeight += rowHeight;
+                       } else {
+                               rowsHeight += rowHeight;
+                       }
+
+                       if (rowHeight > this.vDomWindowBuffer) {
+                               this.vDomWindowBuffer = rowHeight * 2;
+                       }
+
+                       if (row.type !== "group") {
+                               onlyGroupHeaders = false;
+                       }
+
+                       self.vDomBottom++;
+                       i++;
+               }
+
+               if (!position) {
+                       this.vDomTopPad = 0;
+                       //adjust rowheight to match average of rendered elements
+                       self.vDomRowHeight = Math.floor((rowsHeight + topPadHeight) / i);
+                       self.vDomBottomPad = self.vDomRowHeight * (self.displayRowsCount - self.vDomBottom - 1);
+
+                       self.vDomScrollHeight = topPadHeight + rowsHeight + self.vDomBottomPad - self.height;
+               } else {
+                       self.vDomTopPad = !forceMove ? self.scrollTop - topPadHeight : self.vDomRowHeight * this.vDomTop + offset;
+                       self.vDomBottomPad = self.vDomBottom == self.displayRowsCount - 1 ? 0 : Math.max(self.vDomScrollHeight - self.vDomTopPad - rowsHeight - topPadHeight, 0);
+               }
+
+               element.style.paddingTop = self.vDomTopPad + "px";
+               element.style.paddingBottom = self.vDomBottomPad + "px";
+
+               if (forceMove) {
+                       this.scrollTop = self.vDomTopPad + topPadHeight + offset - (this.element.scrollWidth > this.element.clientWidth ? this.element.offsetHeight - this.element.clientHeight : 0);
+               }
+
+               this.scrollTop = Math.min(this.scrollTop, this.element.scrollHeight - this.height);
+
+               //adjust for horizontal scrollbar if present (and not at top of table)
+               if (this.element.scrollWidth > this.element.offsetWidth && forceMove) {
+                       this.scrollTop += this.element.offsetHeight - this.element.clientHeight;
+               }
+
+               this.vDomScrollPosTop = this.scrollTop;
+               this.vDomScrollPosBottom = this.scrollTop;
+
+               holder.scrollTop = this.scrollTop;
+
+               element.style.minWidth = onlyGroupHeaders ? self.table.columnManager.getWidth() + "px" : "";
+
+               if (self.table.options.groupBy) {
+                       if (self.table.modules.layout.getMode() != "fitDataFill" && self.displayRowsCount == self.table.modules.groupRows.countGroups()) {
+                               self.tableElement.style.minWidth = self.table.columnManager.getWidth();
+                       }
+               }
+       } else {
+               this.renderEmptyScroll();
+       }
+
+       if (!this.fixedHeight) {
+               this.adjustTableSize();
+       }
+};
+
+//handle vertical scrolling
+RowManager.prototype.scrollVertical = function (dir) {
+       var topDiff = this.scrollTop - this.vDomScrollPosTop;
+       var bottomDiff = this.scrollTop - this.vDomScrollPosBottom;
+       var margin = this.vDomWindowBuffer * 2;
+
+       if (-topDiff > margin || bottomDiff > margin) {
+               //if big scroll redraw table;
+               var left = this.scrollLeft;
+               this._virtualRenderFill(Math.floor(this.element.scrollTop / this.element.scrollHeight * this.displayRowsCount));
+               this.scrollHorizontal(left);
+       } else {
+
+               if (dir) {
+                       //scrolling up
+                       if (topDiff < 0) {
+
+                               this._addTopRow(-topDiff);
+                       }
+
+                       if (bottomDiff < 0) {
+
+                               //hide bottom row if needed
+                               if (this.vDomScrollHeight - this.scrollTop > this.vDomWindowBuffer) {
+                                       this._removeBottomRow(-bottomDiff);
+                               } else {
+                                       this.vDomScrollPosBottom = this.scrollTop;
+                               }
+                       }
+               } else {
+                       //scrolling down
+                       if (topDiff >= 0) {
+
+                               //hide top row if needed
+                               if (this.scrollTop > this.vDomWindowBuffer) {
+
+                                       this._removeTopRow(topDiff);
+                               } else {
+                                       this.vDomScrollPosTop = this.scrollTop;
+                               }
+                       }
+
+                       if (bottomDiff >= 0) {
+
+                               this._addBottomRow(bottomDiff);
+                       }
+               }
+       }
+};
+
+RowManager.prototype._addTopRow = function (topDiff) {
+       var i = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
+
+       var table = this.tableElement,
+           rows = this.getDisplayRows();
+
+       if (this.vDomTop) {
+               var index = this.vDomTop - 1,
+                   topRow = rows[index],
+                   topRowHeight = topRow.getHeight() || this.vDomRowHeight;
+
+               //hide top row if needed
+               if (topDiff >= topRowHeight) {
+                       this.styleRow(topRow, index);
+                       table.insertBefore(topRow.getElement(), table.firstChild);
+                       if (!topRow.initialized || !topRow.heightInitialized) {
+                               this.vDomTopNewRows.push(topRow);
+
+                               if (!topRow.heightInitialized) {
+                                       topRow.clearCellHeight();
+                               }
+                       }
+                       topRow.initialize();
+
+                       this.vDomTopPad -= topRowHeight;
+
+                       if (this.vDomTopPad < 0) {
+                               this.vDomTopPad = index * this.vDomRowHeight;
+                       }
+
+                       if (!index) {
+                               this.vDomTopPad = 0;
+                       }
+
+                       table.style.paddingTop = this.vDomTopPad + "px";
+                       this.vDomScrollPosTop -= topRowHeight;
+                       this.vDomTop--;
+               }
+
+               topDiff = -(this.scrollTop - this.vDomScrollPosTop);
+
+               if (topRow.getHeight() > this.vDomWindowBuffer) {
+                       this.vDomWindowBuffer = topRow.getHeight() * 2;
+               }
+
+               if (i < this.vDomMaxRenderChain && this.vDomTop && topDiff >= (rows[this.vDomTop - 1].getHeight() || this.vDomRowHeight)) {
+                       this._addTopRow(topDiff, i + 1);
+               } else {
+                       this._quickNormalizeRowHeight(this.vDomTopNewRows);
+               }
+       }
+};
+
+RowManager.prototype._removeTopRow = function (topDiff) {
+       var table = this.tableElement,
+           topRow = this.getDisplayRows()[this.vDomTop],
+           topRowHeight = topRow.getHeight() || this.vDomRowHeight;
+
+       if (topDiff >= topRowHeight) {
+
+               var rowEl = topRow.getElement();
+               rowEl.parentNode.removeChild(rowEl);
+
+               this.vDomTopPad += topRowHeight;
+               table.style.paddingTop = this.vDomTopPad + "px";
+               this.vDomScrollPosTop += this.vDomTop ? topRowHeight : topRowHeight + this.vDomWindowBuffer;
+               this.vDomTop++;
+
+               topDiff = this.scrollTop - this.vDomScrollPosTop;
+
+               this._removeTopRow(topDiff);
+       }
+};
+
+RowManager.prototype._addBottomRow = function (bottomDiff) {
+       var i = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
+
+       var table = this.tableElement,
+           rows = this.getDisplayRows();
+
+       if (this.vDomBottom < this.displayRowsCount - 1) {
+               var index = this.vDomBottom + 1,
+                   bottomRow = rows[index],
+                   bottomRowHeight = bottomRow.getHeight() || this.vDomRowHeight;
+
+               //hide bottom row if needed
+               if (bottomDiff >= bottomRowHeight) {
+                       this.styleRow(bottomRow, index);
+                       table.appendChild(bottomRow.getElement());
+
+                       if (!bottomRow.initialized || !bottomRow.heightInitialized) {
+                               this.vDomBottomNewRows.push(bottomRow);
+
+                               if (!bottomRow.heightInitialized) {
+                                       bottomRow.clearCellHeight();
+                               }
+                       }
+
+                       bottomRow.initialize();
+
+                       this.vDomBottomPad -= bottomRowHeight;
+
+                       if (this.vDomBottomPad < 0 || index == this.displayRowsCount - 1) {
+                               this.vDomBottomPad = 0;
+                       }
+
+                       table.style.paddingBottom = this.vDomBottomPad + "px";
+                       this.vDomScrollPosBottom += bottomRowHeight;
+                       this.vDomBottom++;
+               }
+
+               bottomDiff = this.scrollTop - this.vDomScrollPosBottom;
+
+               if (bottomRow.getHeight() > this.vDomWindowBuffer) {
+                       this.vDomWindowBuffer = bottomRow.getHeight() * 2;
+               }
+
+               if (i < this.vDomMaxRenderChain && this.vDomBottom < this.displayRowsCount - 1 && bottomDiff >= (rows[this.vDomBottom + 1].getHeight() || this.vDomRowHeight)) {
+                       this._addBottomRow(bottomDiff, i + 1);
+               } else {
+                       this._quickNormalizeRowHeight(this.vDomBottomNewRows);
+               }
+       }
+};
+
+RowManager.prototype._removeBottomRow = function (bottomDiff) {
+       var table = this.tableElement,
+           bottomRow = this.getDisplayRows()[this.vDomBottom],
+           bottomRowHeight = bottomRow.getHeight() || this.vDomRowHeight;
+
+       if (bottomDiff >= bottomRowHeight) {
+
+               var rowEl = bottomRow.getElement();
+
+               if (rowEl.parentNode) {
+                       rowEl.parentNode.removeChild(rowEl);
+               }
+
+               this.vDomBottomPad += bottomRowHeight;
+
+               if (this.vDomBottomPad < 0) {
+                       this.vDomBottomPad = 0;
+               }
+
+               table.style.paddingBottom = this.vDomBottomPad + "px";
+               this.vDomScrollPosBottom -= bottomRowHeight;
+               this.vDomBottom--;
+
+               bottomDiff = -(this.scrollTop - this.vDomScrollPosBottom);
+
+               this._removeBottomRow(bottomDiff);
+       }
+};
+
+RowManager.prototype._quickNormalizeRowHeight = function (rows) {
+       rows.forEach(function (row) {
+               row.calcHeight();
+       });
+
+       rows.forEach(function (row) {
+               row.setCellHeight();
+       });
+
+       rows.length = 0;
+};
+
+//normalize height of active rows
+RowManager.prototype.normalizeHeight = function () {
+       this.activeRows.forEach(function (row) {
+               row.normalizeHeight();
+       });
+};
+
+//adjust the height of the table holder to fit in the Tabulator element
+RowManager.prototype.adjustTableSize = function () {
+       var initialHeight = this.element.clientHeight,
+           modExists;
+
+       if (this.renderMode === "virtual") {
+               var otherHeight = this.columnManager.getElement().offsetHeight + (this.table.footerManager && !this.table.footerManager.external ? this.table.footerManager.getElement().offsetHeight : 0);
+
+               if (this.fixedHeight) {
+                       this.element.style.minHeight = "calc(100% - " + otherHeight + "px)";
+                       this.element.style.height = "calc(100% - " + otherHeight + "px)";
+                       this.element.style.maxHeight = "calc(100% - " + otherHeight + "px)";
+               } else {
+                       this.element.style.height = "";
+                       this.element.style.height = this.table.element.clientHeight - otherHeight + "px";
+                       this.element.scrollTop = this.scrollTop;
+               }
+
+               this.height = this.element.clientHeight;
+               this.vDomWindowBuffer = this.table.options.virtualDomBuffer || this.height;
+
+               //check if the table has changed size when dealing with variable height tables
+               if (!this.fixedHeight && initialHeight != this.element.clientHeight) {
+                       modExists = this.table.modExists("resizeTable");
+
+                       if (modExists && !this.table.modules.resizeTable.autoResize || !modExists) {
+                               this.redraw();
+                       }
+               }
+       }
+};
+
+//renitialize all rows
+RowManager.prototype.reinitialize = function () {
+       this.rows.forEach(function (row) {
+               row.reinitialize();
+       });
+};
+
+//prevent table from being redrawn
+RowManager.prototype.blockRedraw = function () {
+       this.redrawBlock = true;
+       this.redrawBlockRestoreConfig = false;
+};
+
+//restore table redrawing
+RowManager.prototype.restoreRedraw = function () {
+       this.redrawBlock = false;
+
+       if (this.redrawBlockRestoreConfig) {
+               this.refreshActiveData(this.redrawBlockRestoreConfig.stage, this.redrawBlockRestoreConfig.skipStage, this.redrawBlockRestoreConfig.renderInPosition);
+
+               this.redrawBlockRestoreConfig = false;
+       } else {
+               if (this.redrawBlockRederInPosition) {
+                       this.reRenderInPosition();
+               }
+       }
+
+       this.redrawBlockRederInPosition = false;
+};
+
+//redraw table
+RowManager.prototype.redraw = function (force) {
+       var pos = 0,
+           left = this.scrollLeft;
+
+       this.adjustTableSize();
+
+       this.table.tableWidth = this.table.element.clientWidth;
+
+       if (!force) {
+               if (this.renderMode == "classic") {
+
+                       if (this.table.options.groupBy) {
+                               this.refreshActiveData("group", false, false);
+                       } else {
+                               this._simpleRender();
+                       }
+               } else {
+                       this.reRenderInPosition();
+                       this.scrollHorizontal(left);
+               }
+
+               if (!this.displayRowsCount) {
+                       if (this.table.options.placeholder) {
+                               this.getElement().appendChild(this.table.options.placeholder);
+                       }
+               }
+       } else {
+               this.renderTable();
+       }
+};
+
+RowManager.prototype.resetScroll = function () {
+       this.element.scrollLeft = 0;
+       this.element.scrollTop = 0;
+
+       if (this.table.browser === "ie") {
+               var event = document.createEvent("Event");
+               event.initEvent("scroll", false, true);
+               this.element.dispatchEvent(event);
+       } else {
+               this.element.dispatchEvent(new Event('scroll'));
+       }
+};
+
+//public row object
+var RowComponent = function RowComponent(row) {
+       this._row = row;
+};
+
+RowComponent.prototype.getData = function (transform) {
+       return this._row.getData(transform);
+};
+
+RowComponent.prototype.getElement = function () {
+       return this._row.getElement();
+};
+
+RowComponent.prototype.getCells = function () {
+       var cells = [];
+
+       this._row.getCells().forEach(function (cell) {
+               cells.push(cell.getComponent());
+       });
+
+       return cells;
+};
+
+RowComponent.prototype.getCell = function (column) {
+       var cell = this._row.getCell(column);
+       return cell ? cell.getComponent() : false;
+};
+
+RowComponent.prototype.getIndex = function () {
+       return this._row.getData("data")[this._row.table.options.index];
+};
+
+RowComponent.prototype.getPosition = function (active) {
+       return this._row.table.rowManager.getRowPosition(this._row, active);
+};
+
+RowComponent.prototype.delete = function () {
+       return this._row.delete();
+};
+
+RowComponent.prototype.scrollTo = function () {
+       return this._row.table.rowManager.scrollToRow(this._row);
+};
+
+RowComponent.prototype.pageTo = function () {
+       if (this._row.table.modExists("page", true)) {
+               return this._row.table.modules.page.setPageToRow(this._row);
+       }
+};
+
+RowComponent.prototype.move = function (to, after) {
+       this._row.moveToRow(to, after);
+};
+
+RowComponent.prototype.update = function (data) {
+       return this._row.updateData(data);
+};
+
+RowComponent.prototype.normalizeHeight = function () {
+       this._row.normalizeHeight(true);
+};
+
+RowComponent.prototype.select = function () {
+       this._row.table.modules.selectRow.selectRows(this._row);
+};
+
+RowComponent.prototype.deselect = function () {
+       this._row.table.modules.selectRow.deselectRows(this._row);
+};
+
+RowComponent.prototype.toggleSelect = function () {
+       this._row.table.modules.selectRow.toggleRow(this._row);
+};
+
+RowComponent.prototype.isSelected = function () {
+       return this._row.table.modules.selectRow.isRowSelected(this._row);
+};
+
+RowComponent.prototype._getSelf = function () {
+       return this._row;
+};
+
+RowComponent.prototype.validate = function () {
+       return this._row.validate();
+};
+
+RowComponent.prototype.freeze = function () {
+       if (this._row.table.modExists("frozenRows", true)) {
+               this._row.table.modules.frozenRows.freezeRow(this._row);
+       }
+};
+
+RowComponent.prototype.unfreeze = function () {
+       if (this._row.table.modExists("frozenRows", true)) {
+               this._row.table.modules.frozenRows.unfreezeRow(this._row);
+       }
+};
+
+RowComponent.prototype.isFrozen = function () {
+       if (this._row.table.modExists("frozenRows", true)) {
+               var index = this._row.table.modules.frozenRows.rows.indexOf(this._row);
+               return index > -1;
+       }
+
+       return false;
+};
+
+RowComponent.prototype.treeCollapse = function () {
+       if (this._row.table.modExists("dataTree", true)) {
+               this._row.table.modules.dataTree.collapseRow(this._row);
+       }
+};
+
+RowComponent.prototype.treeExpand = function () {
+       if (this._row.table.modExists("dataTree", true)) {
+               this._row.table.modules.dataTree.expandRow(this._row);
+       }
+};
+
+RowComponent.prototype.treeToggle = function () {
+       if (this._row.table.modExists("dataTree", true)) {
+               this._row.table.modules.dataTree.toggleRow(this._row);
+       }
+};
+
+RowComponent.prototype.getTreeParent = function () {
+       if (this._row.table.modExists("dataTree", true)) {
+               return this._row.table.modules.dataTree.getTreeParent(this._row);
+       }
+
+       return false;
+};
+
+RowComponent.prototype.getTreeChildren = function () {
+       if (this._row.table.modExists("dataTree", true)) {
+               return this._row.table.modules.dataTree.getTreeChildren(this._row);
+       }
+
+       return false;
+};
+
+RowComponent.prototype.addTreeChild = function (data, pos, index) {
+       if (this._row.table.modExists("dataTree", true)) {
+               return this._row.table.modules.dataTree.addTreeChildRow(this._row, data, pos, index);
+       }
+
+       return false;
+};
+
+RowComponent.prototype.reformat = function () {
+       return this._row.reinitialize();
+};
+
+RowComponent.prototype.getGroup = function () {
+       return this._row.getGroup().getComponent();
+};
+
+RowComponent.prototype.getTable = function () {
+       return this._row.table;
+};
+
+RowComponent.prototype.getNextRow = function () {
+       var row = this._row.nextRow();
+       return row ? row.getComponent() : row;
+};
+
+RowComponent.prototype.getPrevRow = function () {
+       var row = this._row.prevRow();
+       return row ? row.getComponent() : row;
+};
+
+var Row = function Row(data, parent) {
+       var type = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : "row";
+
+       this.table = parent.table;
+       this.parent = parent;
+       this.data = {};
+       this.type = type; //type of element
+       this.element = this.createElement();
+       this.modules = {}; //hold module variables;
+       this.cells = [];
+       this.height = 0; //hold element height
+       this.heightStyled = ""; //hold element height prestyled to improve render efficiency
+       this.manualHeight = false; //user has manually set row height
+       this.outerHeight = 0; //holde lements outer height
+       this.initialized = false; //element has been rendered
+       this.heightInitialized = false; //element has resized cells to fit
+
+       this.component = null;
+
+       this.setData(data);
+       this.generateElement();
+};
+
+Row.prototype.createElement = function () {
+       var el = document.createElement("div");
+
+       el.classList.add("tabulator-row");
+       el.setAttribute("role", "row");
+
+       return el;
+};
+
+Row.prototype.getElement = function () {
+       return this.element;
+};
+
+Row.prototype.detachElement = function () {
+       if (this.element && this.element.parentNode) {
+               this.element.parentNode.removeChild(this.element);
+       }
+};
+
+Row.prototype.generateElement = function () {
+       var self = this,
+           dblTap,
+           tapHold,
+           tap;
+
+       //set row selection characteristics
+       if (self.table.options.selectable !== false && self.table.modExists("selectRow")) {
+               self.table.modules.selectRow.initializeRow(this);
+       }
+
+       //setup movable rows
+       if (self.table.options.movableRows !== false && self.table.modExists("moveRow")) {
+               self.table.modules.moveRow.initializeRow(this);
+       }
+
+       //setup data tree
+       if (self.table.options.dataTree !== false && self.table.modExists("dataTree")) {
+               self.table.modules.dataTree.initializeRow(this);
+       }
+
+       //setup column colapse container
+       if (self.table.options.responsiveLayout === "collapse" && self.table.modExists("responsiveLayout")) {
+               self.table.modules.responsiveLayout.initializeRow(this);
+       }
+
+       //set column menu
+       if (self.table.options.rowContextMenu && this.table.modExists("menu")) {
+               self.table.modules.menu.initializeRow(this);
+       }
+
+       //handle row click events
+       if (self.table.options.rowClick) {
+               self.element.addEventListener("click", function (e) {
+                       self.table.options.rowClick(e, self.getComponent());
+               });
+       }
+
+       if (self.table.options.rowDblClick) {
+               self.element.addEventListener("dblclick", function (e) {
+                       self.table.options.rowDblClick(e, self.getComponent());
+               });
+       }
+
+       if (self.table.options.rowContext) {
+               self.element.addEventListener("contextmenu", function (e) {
+                       self.table.options.rowContext(e, self.getComponent());
+               });
+       }
+
+       //handle mouse events
+       if (self.table.options.rowMouseEnter) {
+               self.element.addEventListener("mouseenter", function (e) {
+                       self.table.options.rowMouseEnter(e, self.getComponent());
+               });
+       }
+
+       if (self.table.options.rowMouseLeave) {
+               self.element.addEventListener("mouseleave", function (e) {
+                       self.table.options.rowMouseLeave(e, self.getComponent());
+               });
+       }
+
+       if (self.table.options.rowMouseOver) {
+               self.element.addEventListener("mouseover", function (e) {
+                       self.table.options.rowMouseOver(e, self.getComponent());
+               });
+       }
+
+       if (self.table.options.rowMouseOut) {
+               self.element.addEventListener("mouseout", function (e) {
+                       self.table.options.rowMouseOut(e, self.getComponent());
+               });
+       }
+
+       if (self.table.options.rowMouseMove) {
+               self.element.addEventListener("mousemove", function (e) {
+                       self.table.options.rowMouseMove(e, self.getComponent());
+               });
+       }
+
+       if (self.table.options.rowTap) {
+
+               tap = false;
+
+               self.element.addEventListener("touchstart", function (e) {
+                       tap = true;
+               }, { passive: true });
+
+               self.element.addEventListener("touchend", function (e) {
+                       if (tap) {
+                               self.table.options.rowTap(e, self.getComponent());
+                       }
+
+                       tap = false;
+               });
+       }
+
+       if (self.table.options.rowDblTap) {
+
+               dblTap = null;
+
+               self.element.addEventListener("touchend", function (e) {
+
+                       if (dblTap) {
+                               clearTimeout(dblTap);
+                               dblTap = null;
+
+                               self.table.options.rowDblTap(e, self.getComponent());
+                       } else {
+
+                               dblTap = setTimeout(function () {
+                                       clearTimeout(dblTap);
+                                       dblTap = null;
+                               }, 300);
+                       }
+               });
+       }
+
+       if (self.table.options.rowTapHold) {
+
+               tapHold = null;
+
+               self.element.addEventListener("touchstart", function (e) {
+                       clearTimeout(tapHold);
+
+                       tapHold = setTimeout(function () {
+                               clearTimeout(tapHold);
+                               tapHold = null;
+                               tap = false;
+                               self.table.options.rowTapHold(e, self.getComponent());
+                       }, 1000);
+               }, { passive: true });
+
+               self.element.addEventListener("touchend", function (e) {
+                       clearTimeout(tapHold);
+                       tapHold = null;
+               });
+       }
+};
+
+Row.prototype.generateCells = function () {
+       this.cells = this.table.columnManager.generateCells(this);
+};
+
+//functions to setup on first render
+Row.prototype.initialize = function (force) {
+       var self = this;
+
+       if (!self.initialized || force) {
+
+               self.deleteCells();
+
+               while (self.element.firstChild) {
+                       self.element.removeChild(self.element.firstChild);
+               } //handle frozen cells
+               if (this.table.modExists("frozenColumns")) {
+                       this.table.modules.frozenColumns.layoutRow(this);
+               }
+
+               this.generateCells();
+
+               self.cells.forEach(function (cell) {
+                       self.element.appendChild(cell.getElement());
+                       cell.cellRendered();
+               });
+
+               if (force) {
+                       self.normalizeHeight();
+               }
+
+               //setup movable rows
+               if (self.table.options.dataTree && self.table.modExists("dataTree")) {
+                       self.table.modules.dataTree.layoutRow(this);
+               }
+
+               //setup column colapse container
+               if (self.table.options.responsiveLayout === "collapse" && self.table.modExists("responsiveLayout")) {
+                       self.table.modules.responsiveLayout.layoutRow(this);
+               }
+
+               if (self.table.options.rowFormatter) {
+                       self.table.options.rowFormatter(self.getComponent());
+               }
+
+               //set resizable handles
+               if (self.table.options.resizableRows && self.table.modExists("resizeRows")) {
+                       self.table.modules.resizeRows.initializeRow(self);
+               }
+
+               self.initialized = true;
+       }
+};
+
+Row.prototype.reinitializeHeight = function () {
+       this.heightInitialized = false;
+
+       if (this.element.offsetParent !== null) {
+               this.normalizeHeight(true);
+       }
+};
+
+Row.prototype.reinitialize = function () {
+       this.initialized = false;
+       this.heightInitialized = false;
+
+       if (!this.manualHeight) {
+               this.height = 0;
+               this.heightStyled = "";
+       }
+
+       if (this.element.offsetParent !== null) {
+               this.initialize(true);
+       }
+};
+
+//get heights when doing bulk row style calcs in virtual DOM
+Row.prototype.calcHeight = function (force) {
+
+       var maxHeight = 0,
+           minHeight = this.table.options.resizableRows ? this.element.clientHeight : 0;
+
+       this.cells.forEach(function (cell) {
+               var height = cell.getHeight();
+               if (height > maxHeight) {
+                       maxHeight = height;
+               }
+       });
+
+       if (force) {
+               this.height = Math.max(maxHeight, minHeight);
+       } else {
+               this.height = this.manualHeight ? this.height : Math.max(maxHeight, minHeight);
+       }
+
+       this.heightStyled = this.height ? this.height + "px" : "";
+       this.outerHeight = this.element.offsetHeight;
+};
+
+//set of cells
+Row.prototype.setCellHeight = function () {
+       this.cells.forEach(function (cell) {
+               cell.setHeight();
+       });
+
+       this.heightInitialized = true;
+};
+
+Row.prototype.clearCellHeight = function () {
+       this.cells.forEach(function (cell) {
+               cell.clearHeight();
+       });
+};
+
+//normalize the height of elements in the row
+Row.prototype.normalizeHeight = function (force) {
+
+       if (force) {
+               this.clearCellHeight();
+       }
+
+       this.calcHeight(force);
+
+       this.setCellHeight();
+};
+
+// Row.prototype.setHeight = function(height){
+//     this.height = height;
+
+//     this.setCellHeight();
+// };
+
+//set height of rows
+Row.prototype.setHeight = function (height, force) {
+       if (this.height != height || force) {
+
+               this.manualHeight = true;
+
+               this.height = height;
+               this.heightStyled = height ? height + "px" : "";
+
+               this.setCellHeight();
+
+               // this.outerHeight = this.element.outerHeight();
+               this.outerHeight = this.element.offsetHeight;
+       }
+};
+
+//return rows outer height
+Row.prototype.getHeight = function () {
+       return this.outerHeight;
+};
+
+//return rows outer Width
+Row.prototype.getWidth = function () {
+       return this.element.offsetWidth;
+};
+
+//////////////// Cell Management /////////////////
+
+Row.prototype.deleteCell = function (cell) {
+       var index = this.cells.indexOf(cell);
+
+       if (index > -1) {
+               this.cells.splice(index, 1);
+       }
+};
+
+//////////////// Data Management /////////////////
+
+Row.prototype.setData = function (data) {
+       if (this.table.modExists("mutator")) {
+               data = this.table.modules.mutator.transformRow(data, "data");
+       }
+
+       this.data = data;
+
+       if (this.table.options.reactiveData && this.table.modExists("reactiveData", true)) {
+               this.table.modules.reactiveData.watchRow(this);
+       }
+};
+
+//update the rows data
+Row.prototype.updateData = function (updatedData) {
+       var _this15 = this;
+
+       var visible = Tabulator.prototype.helpers.elVisible(this.element),
+           tempData = {},
+           newRowData;
+
+       return new Promise(function (resolve, reject) {
+
+               if (typeof updatedData === "string") {
+                       updatedData = JSON.parse(updatedData);
+               }
+
+               if (_this15.table.options.reactiveData && _this15.table.modExists("reactiveData", true)) {
+                       _this15.table.modules.reactiveData.block();
+               }
+
+               //mutate incomming data if needed
+               if (_this15.table.modExists("mutator")) {
+
+                       tempData = Object.assign(tempData, _this15.data);
+                       tempData = Object.assign(tempData, updatedData);
+
+                       newRowData = _this15.table.modules.mutator.transformRow(tempData, "data", updatedData);
+               } else {
+                       newRowData = updatedData;
+               }
+
+               //set data
+               for (var attrname in newRowData) {
+                       _this15.data[attrname] = newRowData[attrname];
+               }
+
+               if (_this15.table.options.reactiveData && _this15.table.modExists("reactiveData", true)) {
+                       _this15.table.modules.reactiveData.unblock();
+               }
+
+               //update affected cells only
+               for (var attrname in updatedData) {
+
+                       var columns = _this15.table.columnManager.getColumnsByFieldRoot(attrname);
+
+                       columns.forEach(function (column) {
+                               var cell = _this15.getCell(column.getField());
+
+                               if (cell) {
+                                       var value = column.getFieldValue(newRowData);
+                                       if (cell.getValue() != value) {
+                                               cell.setValueProcessData(value);
+
+                                               if (visible) {
+                                                       cell.cellRendered();
+                                               }
+                                       }
+                               }
+                       });
+               }
+
+               //Partial reinitialization if visible
+               if (visible) {
+                       _this15.normalizeHeight(true);
+
+                       if (_this15.table.options.rowFormatter) {
+                               _this15.table.options.rowFormatter(_this15.getComponent());
+                       }
+               } else {
+                       _this15.initialized = false;
+                       _this15.height = 0;
+                       _this15.heightStyled = "";
+               }
+
+               if (_this15.table.options.dataTree !== false && _this15.table.modExists("dataTree") && _this15.table.modules.dataTree.redrawNeeded(updatedData)) {
+                       _this15.table.modules.dataTree.initializeRow(_this15);
+                       _this15.table.modules.dataTree.layoutRow(_this15);
+                       _this15.table.rowManager.refreshActiveData("tree", false, true);
+               }
+
+               //this.reinitialize();
+
+               _this15.table.options.rowUpdated.call(_this15.table, _this15.getComponent());
+
+               resolve();
+       });
+};
+
+Row.prototype.getData = function (transform) {
+       var self = this;
+
+       if (transform) {
+               if (self.table.modExists("accessor")) {
+                       return self.table.modules.accessor.transformRow(self.data, transform);
+               }
+       } else {
+               return this.data;
+       }
+};
+
+Row.prototype.getCell = function (column) {
+       var match = false;
+
+       column = this.table.columnManager.findColumn(column);
+
+       match = this.cells.find(function (cell) {
+               return cell.column === column;
+       });
+
+       return match;
+};
+
+Row.prototype.getCellIndex = function (findCell) {
+       return this.cells.findIndex(function (cell) {
+               return cell === findCell;
+       });
+};
+
+Row.prototype.findNextEditableCell = function (index) {
+       var nextCell = false;
+
+       if (index < this.cells.length - 1) {
+               for (var i = index + 1; i < this.cells.length; i++) {
+                       var cell = this.cells[i];
+
+                       if (cell.column.modules.edit && Tabulator.prototype.helpers.elVisible(cell.getElement())) {
+                               var allowEdit = true;
+
+                               if (typeof cell.column.modules.edit.check == "function") {
+                                       allowEdit = cell.column.modules.edit.check(cell.getComponent());
+                               }
+
+                               if (allowEdit) {
+                                       nextCell = cell;
+                                       break;
+                               }
+                       }
+               }
+       }
+
+       return nextCell;
+};
+
+Row.prototype.findPrevEditableCell = function (index) {
+       var prevCell = false;
+
+       if (index > 0) {
+               for (var i = index - 1; i >= 0; i--) {
+                       var cell = this.cells[i],
+                           allowEdit = true;
+
+                       if (cell.column.modules.edit && Tabulator.prototype.helpers.elVisible(cell.getElement())) {
+                               if (typeof cell.column.modules.edit.check == "function") {
+                                       allowEdit = cell.column.modules.edit.check(cell.getComponent());
+                               }
+
+                               if (allowEdit) {
+                                       prevCell = cell;
+                                       break;
+                               }
+                       }
+               }
+       }
+
+       return prevCell;
+};
+
+Row.prototype.getCells = function () {
+       return this.cells;
+};
+
+Row.prototype.nextRow = function () {
+       var row = this.table.rowManager.nextDisplayRow(this, true);
+       return row || false;
+};
+
+Row.prototype.prevRow = function () {
+       var row = this.table.rowManager.prevDisplayRow(this, true);
+       return row || false;
+};
+
+Row.prototype.moveToRow = function (to, before) {
+       var toRow = this.table.rowManager.findRow(to);
+
+       if (toRow) {
+               this.table.rowManager.moveRowActual(this, toRow, !before);
+               this.table.rowManager.refreshActiveData("display", false, true);
+       } else {
+               console.warn("Move Error - No matching row found:", to);
+       }
+};
+
+Row.prototype.validate = function () {
+       var invalid = [];
+
+       this.cells.forEach(function (cell) {
+               if (!cell.validate()) {
+                       invalid.push(cell.getComponent());
+               }
+       });
+
+       return invalid.length ? invalid : true;
+};
+
+///////////////////// Actions  /////////////////////
+
+Row.prototype.delete = function () {
+       var _this16 = this;
+
+       return new Promise(function (resolve, reject) {
+               var index, rows;
+
+               if (_this16.table.options.history && _this16.table.modExists("history")) {
+
+                       if (_this16.table.options.groupBy && _this16.table.modExists("groupRows")) {
+                               rows = _this16.getGroup().rows;
+                               index = rows.indexOf(_this16);
+
+                               if (index) {
+                                       index = rows[index - 1];
+                               }
+                       } else {
+                               index = _this16.table.rowManager.getRowIndex(_this16);
+
+                               if (index) {
+                                       index = _this16.table.rowManager.rows[index - 1];
+                               }
+                       }
+
+                       _this16.table.modules.history.action("rowDelete", _this16, { data: _this16.getData(), pos: !index, index: index });
+               }
+
+               _this16.deleteActual();
+
+               resolve();
+       });
+};
+
+Row.prototype.deleteActual = function (blockRedraw) {
+       var index = this.table.rowManager.getRowIndex(this);
+
+       //deselect row if it is selected
+       if (this.table.modExists("selectRow")) {
+               this.table.modules.selectRow._deselectRow(this, true);
+       }
+
+       //cancel edit if row is currently being edited
+       if (this.table.modExists("edit")) {
+               if (this.table.modules.edit.currentCell.row === this) {
+                       this.table.modules.edit.cancelEdit();
+               }
+       }
+
+       // if(this.table.options.dataTree && this.table.modExists("dataTree")){
+       //      this.table.modules.dataTree.collapseRow(this, true);
+       // }
+
+       //remove any reactive data watchers from row object
+       if (this.table.options.reactiveData && this.table.modExists("reactiveData", true)) {}
+       // this.table.modules.reactiveData.unwatchRow(this);
+
+
+       //remove from group
+       if (this.modules.group) {
+               this.modules.group.removeRow(this);
+       }
+
+       this.table.rowManager.deleteRow(this, blockRedraw);
+
+       this.deleteCells();
+
+       this.initialized = false;
+       this.heightInitialized = false;
+
+       if (this.table.options.dataTree && this.table.modExists("dataTree", true)) {
+               this.table.modules.dataTree.rowDelete(this);
+       }
+
+       //recalc column calculations if present
+       if (this.table.modExists("columnCalcs")) {
+               if (this.table.options.groupBy && this.table.modExists("groupRows")) {
+                       this.table.modules.columnCalcs.recalcRowGroup(this);
+               } else {
+                       this.table.modules.columnCalcs.recalc(this.table.rowManager.activeRows);
+               }
+       }
+};
+
+Row.prototype.deleteCells = function () {
+       var cellCount = this.cells.length;
+
+       for (var i = 0; i < cellCount; i++) {
+               this.cells[0].delete();
+       }
+};
+
+Row.prototype.wipe = function () {
+       this.deleteCells();
+
+       while (this.element.firstChild) {
+               this.element.removeChild(this.element.firstChild);
+       }this.element = false;
+       this.modules = {};
+
+       if (this.element.parentNode) {
+               this.element.parentNode.removeChild(this.element);
+       }
+};
+
+Row.prototype.getGroup = function () {
+       return this.modules.group || false;
+};
+
+//////////////// Object Generation /////////////////
+Row.prototype.getComponent = function () {
+       if (!this.component) {
+               this.component = new RowComponent(this);
+       }
+
+       return this.component;
+};
+
+//public row object
+var CellComponent = function CellComponent(cell) {
+       this._cell = cell;
+};
+
+CellComponent.prototype.getValue = function () {
+       return this._cell.getValue();
+};
+
+CellComponent.prototype.getOldValue = function () {
+       return this._cell.getOldValue();
+};
+
+CellComponent.prototype.getElement = function () {
+       return this._cell.getElement();
+};
+
+CellComponent.prototype.getRow = function () {
+       return this._cell.row.getComponent();
+};
+
+CellComponent.prototype.getData = function () {
+       return this._cell.row.getData();
+};
+
+CellComponent.prototype.getField = function () {
+       return this._cell.column.getField();
+};
+
+CellComponent.prototype.getColumn = function () {
+       return this._cell.column.getComponent();
+};
+
+CellComponent.prototype.setValue = function (value, mutate) {
+       if (typeof mutate == "undefined") {
+               mutate = true;
+       }
+
+       this._cell.setValue(value, mutate);
+};
+
+CellComponent.prototype.restoreOldValue = function () {
+       this._cell.setValueActual(this._cell.getOldValue());
+};
+
+CellComponent.prototype.edit = function (force) {
+       return this._cell.edit(force);
+};
+
+CellComponent.prototype.cancelEdit = function () {
+       this._cell.cancelEdit();
+};
+
+CellComponent.prototype.isEdited = function () {
+       return !!this._cell.modules.edit && this._cell.modules.edit.edited;
+};
+
+CellComponent.prototype.clearEdited = function () {
+       if (self.table.modExists("edit", true)) {
+               this._cell.table.modules.edit.clearEdited(this._cell);
+       }
+};
+
+CellComponent.prototype.isValid = function () {
+       return this._cell.modules.validate ? !this._cell.modules.validate.invalid : true;
+};
+
+CellComponent.prototype.validate = function () {
+       return this._cell.validate();
+};
+
+CellComponent.prototype.clearValidation = function () {
+       if (self.table.modExists("validate", true)) {
+               this._cell.table.modules.validate.clearValidation(this._cell);
+       }
+};
+
+CellComponent.prototype.nav = function () {
+       return this._cell.nav();
+};
+
+CellComponent.prototype.checkHeight = function () {
+       this._cell.checkHeight();
+};
+
+CellComponent.prototype.getTable = function () {
+       return this._cell.table;
+};
+
+CellComponent.prototype._getSelf = function () {
+       return this._cell;
+};
+
+var Cell = function Cell(column, row) {
+
+       this.table = column.table;
+       this.column = column;
+       this.row = row;
+       this.element = null;
+       this.value = null;
+       this.oldValue = null;
+       this.modules = {};
+
+       this.height = null;
+       this.width = null;
+       this.minWidth = null;
+
+       this.component = null;
+
+       this.build();
+};
+
+//////////////// Setup Functions /////////////////
+
+//generate element
+Cell.prototype.build = function () {
+       this.generateElement();
+
+       this.setWidth();
+
+       this._configureCell();
+
+       this.setValueActual(this.column.getFieldValue(this.row.data));
+};
+
+Cell.prototype.generateElement = function () {
+       this.element = document.createElement('div');
+       this.element.className = "tabulator-cell";
+       this.element.setAttribute("role", "gridcell");
+       this.element = this.element;
+};
+
+Cell.prototype._configureCell = function () {
+       var self = this,
+           cellEvents = self.column.cellEvents,
+           element = self.element,
+           field = this.column.getField(),
+           vertAligns = {
+               top: "flex-start",
+               bottom: "flex-end",
+               middle: "center"
+       },
+           hozAligns = {
+               left: "flex-start",
+               right: "flex-end",
+               center: "center"
+       };
+
+       //set text alignment
+       element.style.textAlign = self.column.hozAlign;
+
+       if (self.column.vertAlign) {
+               element.style.display = "inline-flex";
+
+               element.style.alignItems = vertAligns[self.column.vertAlign] || "";
+
+               if (self.column.hozAlign) {
+                       element.style.justifyContent = hozAligns[self.column.hozAlign] || "";
+               }
+       }
+
+       if (field) {
+               element.setAttribute("tabulator-field", field);
+       }
+
+       //add class to cell if needed
+       if (self.column.definition.cssClass) {
+               var classNames = self.column.definition.cssClass.split(" ");
+               classNames.forEach(function (className) {
+                       element.classList.add(className);
+               });
+       }
+
+       //update tooltip on mouse enter
+       if (this.table.options.tooltipGenerationMode === "hover") {
+               element.addEventListener("mouseenter", function (e) {
+                       self._generateTooltip();
+               });
+       }
+
+       self._bindClickEvents(cellEvents);
+
+       self._bindTouchEvents(cellEvents);
+
+       self._bindMouseEvents(cellEvents);
+
+       if (self.column.modules.edit) {
+               self.table.modules.edit.bindEditor(self);
+       }
+
+       if (self.column.definition.rowHandle && self.table.options.movableRows !== false && self.table.modExists("moveRow")) {
+               self.table.modules.moveRow.initializeCell(self);
+       }
+
+       //hide cell if not visible
+       if (!self.column.visible) {
+               self.hide();
+       }
+};
+
+Cell.prototype._bindClickEvents = function (cellEvents) {
+       var self = this,
+           element = self.element;
+
+       //set event bindings
+       if (cellEvents.cellClick || self.table.options.cellClick) {
+               element.addEventListener("click", function (e) {
+                       var component = self.getComponent();
+
+                       if (cellEvents.cellClick) {
+                               cellEvents.cellClick.call(self.table, e, component);
+                       }
+
+                       if (self.table.options.cellClick) {
+                               self.table.options.cellClick.call(self.table, e, component);
+                       }
+               });
+       }
+
+       if (cellEvents.cellDblClick || this.table.options.cellDblClick) {
+               element.addEventListener("dblclick", function (e) {
+                       var component = self.getComponent();
+
+                       if (cellEvents.cellDblClick) {
+                               cellEvents.cellDblClick.call(self.table, e, component);
+                       }
+
+                       if (self.table.options.cellDblClick) {
+                               self.table.options.cellDblClick.call(self.table, e, component);
+                       }
+               });
+       } else {
+               element.addEventListener("dblclick", function (e) {
+
+                       if (self.table.modExists("edit")) {
+                               if (self.table.modules.edit.currentCell === self) {
+                                       return; //prevent instant selection of editor content
+                               }
+                       }
+
+                       e.preventDefault();
+
+                       try {
+                               if (document.selection) {
+                                       // IE
+                                       var range = document.body.createTextRange();
+                                       range.moveToElementText(self.element);
+                                       range.select();
+                               } else if (window.getSelection) {
+                                       var range = document.createRange();
+                                       range.selectNode(self.element);
+                                       window.getSelection().removeAllRanges();
+                                       window.getSelection().addRange(range);
+                               }
+                       } catch (e) {}
+               });
+       }
+
+       if (cellEvents.cellContext || this.table.options.cellContext) {
+               element.addEventListener("contextmenu", function (e) {
+                       var component = self.getComponent();
+
+                       if (cellEvents.cellContext) {
+                               cellEvents.cellContext.call(self.table, e, component);
+                       }
+
+                       if (self.table.options.cellContext) {
+                               self.table.options.cellContext.call(self.table, e, component);
+                       }
+               });
+       }
+};
+
+Cell.prototype._bindMouseEvents = function (cellEvents) {
+       var self = this,
+           element = self.element;
+
+       if (cellEvents.cellMouseEnter || self.table.options.cellMouseEnter) {
+               element.addEventListener("mouseenter", function (e) {
+                       var component = self.getComponent();
+
+                       if (cellEvents.cellMouseEnter) {
+                               cellEvents.cellMouseEnter.call(self.table, e, component);
+                       }
+
+                       if (self.table.options.cellMouseEnter) {
+                               self.table.options.cellMouseEnter.call(self.table, e, component);
+                       }
+               });
+       }
+
+       if (cellEvents.cellMouseLeave || self.table.options.cellMouseLeave) {
+               element.addEventListener("mouseleave", function (e) {
+                       var component = self.getComponent();
+
+                       if (cellEvents.cellMouseLeave) {
+                               cellEvents.cellMouseLeave.call(self.table, e, component);
+                       }
+
+                       if (self.table.options.cellMouseLeave) {
+                               self.table.options.cellMouseLeave.call(self.table, e, component);
+                       }
+               });
+       }
+
+       if (cellEvents.cellMouseOver || self.table.options.cellMouseOver) {
+               element.addEventListener("mouseover", function (e) {
+                       var component = self.getComponent();
+
+                       if (cellEvents.cellMouseOver) {
+                               cellEvents.cellMouseOver.call(self.table, e, component);
+                       }
+
+                       if (self.table.options.cellMouseOver) {
+                               self.table.options.cellMouseOver.call(self.table, e, component);
+                       }
+               });
+       }
+
+       if (cellEvents.cellMouseOut || self.table.options.cellMouseOut) {
+               element.addEventListener("mouseout", function (e) {
+                       var component = self.getComponent();
+
+                       if (cellEvents.cellMouseOut) {
+                               cellEvents.cellMouseOut.call(self.table, e, component);
+                       }
+
+                       if (self.table.options.cellMouseOut) {
+                               self.table.options.cellMouseOut.call(self.table, e, component);
+                       }
+               });
+       }
+
+       if (cellEvents.cellMouseMove || self.table.options.cellMouseMove) {
+               element.addEventListener("mousemove", function (e) {
+                       var component = self.getComponent();
+
+                       if (cellEvents.cellMouseMove) {
+                               cellEvents.cellMouseMove.call(self.table, e, component);
+                       }
+
+                       if (self.table.options.cellMouseMove) {
+                               self.table.options.cellMouseMove.call(self.table, e, component);
+                       }
+               });
+       }
+};
+
+Cell.prototype._bindTouchEvents = function (cellEvents) {
+       var self = this,
+           element = self.element,
+           dblTap,
+           tapHold,
+           tap;
+
+       if (cellEvents.cellTap || this.table.options.cellTap) {
+               tap = false;
+
+               element.addEventListener("touchstart", function (e) {
+                       tap = true;
+               }, { passive: true });
+
+               element.addEventListener("touchend", function (e) {
+                       if (tap) {
+                               var component = self.getComponent();
+
+                               if (cellEvents.cellTap) {
+                                       cellEvents.cellTap.call(self.table, e, component);
+                               }
+
+                               if (self.table.options.cellTap) {
+                                       self.table.options.cellTap.call(self.table, e, component);
+                               }
+                       }
+
+                       tap = false;
+               });
+       }
+
+       if (cellEvents.cellDblTap || this.table.options.cellDblTap) {
+               dblTap = null;
+
+               element.addEventListener("touchend", function (e) {
+
+                       if (dblTap) {
+                               clearTimeout(dblTap);
+                               dblTap = null;
+
+                               var component = self.getComponent();
+
+                               if (cellEvents.cellDblTap) {
+                                       cellEvents.cellDblTap.call(self.table, e, component);
+                               }
+
+                               if (self.table.options.cellDblTap) {
+                                       self.table.options.cellDblTap.call(self.table, e, component);
+                               }
+                       } else {
+
+                               dblTap = setTimeout(function () {
+                                       clearTimeout(dblTap);
+                                       dblTap = null;
+                               }, 300);
+                       }
+               });
+       }
+
+       if (cellEvents.cellTapHold || this.table.options.cellTapHold) {
+               tapHold = null;
+
+               element.addEventListener("touchstart", function (e) {
+                       clearTimeout(tapHold);
+
+                       tapHold = setTimeout(function () {
+                               clearTimeout(tapHold);
+                               tapHold = null;
+                               tap = false;
+                               var component = self.getComponent();
+
+                               if (cellEvents.cellTapHold) {
+                                       cellEvents.cellTapHold.call(self.table, e, component);
+                               }
+
+                               if (self.table.options.cellTapHold) {
+                                       self.table.options.cellTapHold.call(self.table, e, component);
+                               }
+                       }, 1000);
+               }, { passive: true });
+
+               element.addEventListener("touchend", function (e) {
+                       clearTimeout(tapHold);
+                       tapHold = null;
+               });
+       }
+};
+
+//generate cell contents
+Cell.prototype._generateContents = function () {
+       var val;
+
+       if (this.table.modExists("format")) {
+               val = this.table.modules.format.formatValue(this);
+       } else {
+               val = this.element.innerHTML = this.value;
+       }
+
+       switch (typeof val === 'undefined' ? 'undefined' : _typeof(val)) {
+               case "object":
+                       if (val instanceof Node) {
+
+                               //clear previous cell contents
+                               while (this.element.firstChild) {
+                                       this.element.removeChild(this.element.firstChild);
+                               }this.element.appendChild(val);
+                       } else {
+                               this.element.innerHTML = "";
+
+                               if (val != null) {
+                                       console.warn("Format Error - Formatter has returned a type of object, the only valid formatter object return is an instance of Node, the formatter returned:", val);
+                               }
+                       }
+                       break;
+               case "undefined":
+               case "null":
+                       this.element.innerHTML = "";
+                       break;
+               default:
+                       this.element.innerHTML = val;
+       }
+};
+
+Cell.prototype.cellRendered = function () {
+       if (this.table.modExists("format") && this.table.modules.format.cellRendered) {
+               this.table.modules.format.cellRendered(this);
+       }
+};
+
+//generate tooltip text
+Cell.prototype._generateTooltip = function () {
+       var tooltip = this.column.tooltip;
+
+       if (tooltip) {
+               if (tooltip === true) {
+                       tooltip = this.value;
+               } else if (typeof tooltip == "function") {
+                       tooltip = tooltip(this.getComponent());
+
+                       if (tooltip === false) {
+                               tooltip = "";
+                       }
+               }
+
+               if (typeof tooltip === "undefined") {
+                       tooltip = "";
+               }
+
+               this.element.setAttribute("title", tooltip);
+       } else {
+               this.element.setAttribute("title", "");
+       }
+};
+
+//////////////////// Getters ////////////////////
+Cell.prototype.getElement = function () {
+       return this.element;
+};
+
+Cell.prototype.getValue = function () {
+       return this.value;
+};
+
+Cell.prototype.getOldValue = function () {
+       return this.oldValue;
+};
+
+//////////////////// Actions ////////////////////
+
+Cell.prototype.setValue = function (value, mutate) {
+
+       var changed = this.setValueProcessData(value, mutate),
+           component;
+
+       if (changed) {
+               if (this.table.options.history && this.table.modExists("history")) {
+                       this.table.modules.history.action("cellEdit", this, { oldValue: this.oldValue, newValue: this.value });
+               }
+
+               component = this.getComponent();
+
+               if (this.column.cellEvents.cellEdited) {
+                       this.column.cellEvents.cellEdited.call(this.table, component);
+               }
+
+               this.cellRendered();
+
+               this.table.options.cellEdited.call(this.table, component);
+
+               this.table.options.dataEdited.call(this.table, this.table.rowManager.getData());
+       }
+};
+
+Cell.prototype.setValueProcessData = function (value, mutate) {
+       var changed = false;
+
+       if (this.value != value) {
+
+               changed = true;
+
+               if (mutate) {
+                       if (this.column.modules.mutate) {
+                               value = this.table.modules.mutator.transformCell(this, value);
+                       }
+               }
+       }
+
+       this.setValueActual(value);
+
+       if (changed && this.table.modExists("columnCalcs")) {
+               if (this.column.definition.topCalc || this.column.definition.bottomCalc) {
+                       if (this.table.options.groupBy && this.table.modExists("groupRows")) {
+
+                               if (this.table.options.columnCalcs == "table" || this.table.options.columnCalcs == "both") {
+                                       this.table.modules.columnCalcs.recalc(this.table.rowManager.activeRows);
+                               }
+
+                               if (this.table.options.columnCalcs != "table") {
+                                       this.table.modules.columnCalcs.recalcRowGroup(this.row);
+                               }
+                       } else {
+                               this.table.modules.columnCalcs.recalc(this.table.rowManager.activeRows);
+                       }
+               }
+       }
+
+       return changed;
+};
+
+Cell.prototype.setValueActual = function (value) {
+       this.oldValue = this.value;
+
+       this.value = value;
+
+       if (this.table.options.reactiveData && this.table.modExists("reactiveData")) {
+               this.table.modules.reactiveData.block();
+       }
+
+       this.column.setFieldValue(this.row.data, value);
+
+       if (this.table.options.reactiveData && this.table.modExists("reactiveData")) {
+               this.table.modules.reactiveData.unblock();
+       }
+
+       this._generateContents();
+       this._generateTooltip();
+
+       //set resizable handles
+       if (this.table.options.resizableColumns && this.table.modExists("resizeColumns")) {
+               this.table.modules.resizeColumns.initializeColumn("cell", this.column, this.element);
+       }
+
+       //set column menu
+       if (this.column.definition.contextMenu && this.table.modExists("menu")) {
+               this.table.modules.menu.initializeCell(this);
+       }
+
+       //handle frozen cells
+       if (this.table.modExists("frozenColumns")) {
+               this.table.modules.frozenColumns.layoutElement(this.element, this.column);
+       }
+};
+
+Cell.prototype.setWidth = function () {
+       this.width = this.column.width;
+       this.element.style.width = this.column.widthStyled;
+};
+
+Cell.prototype.clearWidth = function () {
+       this.width = "";
+       this.element.style.width = "";
+};
+
+Cell.prototype.getWidth = function () {
+       return this.width || this.element.offsetWidth;
+};
+
+Cell.prototype.setMinWidth = function () {
+       this.minWidth = this.column.minWidth;
+       this.element.style.minWidth = this.column.minWidthStyled;
+};
+
+Cell.prototype.checkHeight = function () {
+       // var height = this.element.css("height");
+       this.row.reinitializeHeight();
+};
+
+Cell.prototype.clearHeight = function () {
+       this.element.style.height = "";
+       this.height = null;
+};
+
+Cell.prototype.setHeight = function () {
+       this.height = this.row.height;
+       this.element.style.height = this.row.heightStyled;
+};
+
+Cell.prototype.getHeight = function () {
+       return this.height || this.element.offsetHeight;
+};
+
+Cell.prototype.show = function () {
+       this.element.style.display = "";
+};
+
+Cell.prototype.hide = function () {
+       this.element.style.display = "none";
+};
+
+Cell.prototype.edit = function (force) {
+       if (this.table.modExists("edit", true)) {
+               return this.table.modules.edit.editCell(this, force);
+       }
+};
+
+Cell.prototype.cancelEdit = function () {
+       if (this.table.modExists("edit", true)) {
+               var editing = this.table.modules.edit.getCurrentCell();
+
+               if (editing && editing._getSelf() === this) {
+                       this.table.modules.edit.cancelEdit();
+               } else {
+                       console.warn("Cancel Editor Error - This cell is not currently being edited ");
+               }
+       }
+};
+
+Cell.prototype.validate = function () {
+       if (this.column.modules.validate && this.table.modExists("validate", true)) {
+               var valid = this.table.modules.validate.validate(this.column.modules.validate, this, this.getValue());
+
+               return valid === true;
+       } else {
+               return true;
+       }
+};
+
+Cell.prototype.delete = function () {
+       if (!this.table.rowManager.redrawBlock) {
+               this.element.parentNode.removeChild(this.element);
+       }
+
+       if (this.modules.validate && this.modules.validate.invalid) {
+               this.table.modules.validate.clearValidation(this);
+       }
+
+       if (this.modules.edit && this.modules.edit.edited) {
+               this.table.modules.edit.clearEdited(this);
+       }
+
+       this.element = false;
+       this.column.deleteCell(this);
+       this.row.deleteCell(this);
+       this.calcs = {};
+};
+
+//////////////// Navigation /////////////////
+
+Cell.prototype.nav = function () {
+
+       var self = this,
+           nextCell = false,
+           index = this.row.getCellIndex(this);
+
+       return {
+               next: function next() {
+                       var nextCell = this.right(),
+                           nextRow;
+
+                       if (!nextCell) {
+                               nextRow = self.table.rowManager.nextDisplayRow(self.row, true);
+
+                               if (nextRow) {
+                                       nextCell = nextRow.findNextEditableCell(-1);
+
+                                       if (nextCell) {
+                                               nextCell.edit();
+                                               return true;
+                                       }
+                               }
+                       } else {
+                               return true;
+                       }
+
+                       return false;
+               },
+               prev: function prev() {
+                       var nextCell = this.left(),
+                           prevRow;
+
+                       if (!nextCell) {
+                               prevRow = self.table.rowManager.prevDisplayRow(self.row, true);
+
+                               if (prevRow) {
+                                       nextCell = prevRow.findPrevEditableCell(prevRow.cells.length);
+
+                                       if (nextCell) {
+                                               nextCell.edit();
+                                               return true;
+                                       }
+                               }
+                       } else {
+                               return true;
+                       }
+
+                       return false;
+               },
+               left: function left() {
+
+                       nextCell = self.row.findPrevEditableCell(index);
+
+                       if (nextCell) {
+                               nextCell.edit();
+                               return true;
+                       } else {
+                               return false;
+                       }
+               },
+               right: function right() {
+                       nextCell = self.row.findNextEditableCell(index);
+
+                       if (nextCell) {
+                               nextCell.edit();
+                               return true;
+                       } else {
+                               return false;
+                       }
+               },
+               up: function up() {
+                       var nextRow = self.table.rowManager.prevDisplayRow(self.row, true);
+
+                       if (nextRow) {
+                               nextRow.cells[index].edit();
+                       }
+               },
+               down: function down() {
+                       var nextRow = self.table.rowManager.nextDisplayRow(self.row, true);
+
+                       if (nextRow) {
+                               nextRow.cells[index].edit();
+                       }
+               }
+
+       };
+};
+
+Cell.prototype.getIndex = function () {
+       this.row.getCellIndex(this);
+};
+
+//////////////// Object Generation /////////////////
+Cell.prototype.getComponent = function () {
+
+       if (!this.component) {
+               this.component = new CellComponent(this);
+       }
+
+       return this.component;
+};
+var FooterManager = function FooterManager(table) {
+       this.table = table;
+       this.active = false;
+       this.element = this.createElement(); //containing element
+       this.external = false;
+       this.links = [];
+
+       this._initialize();
+};
+
+FooterManager.prototype.createElement = function () {
+       var el = document.createElement("div");
+
+       el.classList.add("tabulator-footer");
+
+       return el;
+};
+
+FooterManager.prototype._initialize = function (element) {
+       if (this.table.options.footerElement) {
+
+               switch (_typeof(this.table.options.footerElement)) {
+                       case "string":
+
+                               if (this.table.options.footerElement[0] === "<") {
+                                       this.element.innerHTML = this.table.options.footerElement;
+                               } else {
+                                       this.external = true;
+                                       this.element = document.querySelector(this.table.options.footerElement);
+                               }
+                               break;
+                       default:
+                               this.element = this.table.options.footerElement;
+                               break;
+               }
+       }
+};
+
+FooterManager.prototype.getElement = function () {
+       return this.element;
+};
+
+FooterManager.prototype.append = function (element, parent) {
+       this.activate(parent);
+
+       this.element.appendChild(element);
+       this.table.rowManager.adjustTableSize();
+};
+
+FooterManager.prototype.prepend = function (element, parent) {
+       this.activate(parent);
+
+       this.element.insertBefore(element, this.element.firstChild);
+       this.table.rowManager.adjustTableSize();
+};
+
+FooterManager.prototype.remove = function (element) {
+       element.parentNode.removeChild(element);
+       this.deactivate();
+};
+
+FooterManager.prototype.deactivate = function (force) {
+       if (!this.element.firstChild || force) {
+               if (!this.external) {
+                       this.element.parentNode.removeChild(this.element);
+               }
+               this.active = false;
+       }
+
+       // this.table.rowManager.adjustTableSize();
+};
+
+FooterManager.prototype.activate = function (parent) {
+       if (!this.active) {
+               this.active = true;
+               if (!this.external) {
+                       this.table.element.appendChild(this.getElement());
+                       this.table.element.style.display = '';
+               }
+       }
+
+       if (parent) {
+               this.links.push(parent);
+       }
+};
+
+FooterManager.prototype.redraw = function () {
+       this.links.forEach(function (link) {
+               link.footerRedraw();
+       });
+};
+
+var Tabulator = function Tabulator(element, options) {
+
+       this.options = {};
+
+       this.columnManager = null; // hold Column Manager
+       this.rowManager = null; //hold Row Manager
+       this.footerManager = null; //holder Footer Manager
+       this.browser = ""; //hold current browser type
+       this.browserSlow = false; //handle reduced functionality for slower browsers
+       this.browserMobile = false; //check if running on moble, prevent resize cancelling edit on keyboard appearence
+
+       this.modules = {}; //hold all modules bound to this table
+
+       this.initializeElement(element);
+       this.initializeOptions(options || {});
+       this._create();
+
+       Tabulator.prototype.comms.register(this); //register table for inderdevice communication
+};
+
+//default setup options
+Tabulator.prototype.defaultOptions = {
+
+       height: false, //height of tabulator
+       minHeight: false, //minimum height of tabulator
+       maxHeight: false, //maximum height of tabulator
+
+       layout: "fitData", ///layout type "fitColumns" | "fitData"
+       layoutColumnsOnNewData: false, //update column widths on setData
+
+       columnMinWidth: 40, //minimum global width for a column
+       columnHeaderVertAlign: "top", //vertical alignment of column headers
+       columnVertAlign: false, // DEPRECATED - Left to allow warning
+
+       resizableColumns: true, //resizable columns
+       resizableRows: false, //resizable rows
+       autoResize: true, //auto resize table
+
+       columns: [], //store for colum header info
+
+       cellHozAlign: "", //horizontal align columns
+       cellVertAlign: "", //certical align columns
+
+
+       data: [], //default starting data
+
+       autoColumns: false, //build columns from data row structure
+
+       reactiveData: false, //enable data reactivity
+
+       nestedFieldSeparator: ".", //seperatpr for nested data
+
+       tooltips: false, //Tool tip value
+       tooltipsHeader: false, //Tool tip for headers
+       tooltipGenerationMode: "load", //when to generate tooltips
+
+       initialSort: false, //initial sorting criteria
+       initialFilter: false, //initial filtering criteria
+       initialHeaderFilter: false, //initial header filtering criteria
+
+       columnHeaderSortMulti: true, //multiple or single column sorting
+
+       sortOrderReverse: false, //reverse internal sort ordering
+
+       headerSort: true, //set default global header sort
+       headerSortTristate: false, //set default tristate header sorting
+
+       footerElement: false, //hold footer element
+
+       index: "id", //filed for row index
+
+       keybindings: [], //array for keybindings
+
+       tabEndNewRow: false, //create new row when tab to end of table
+
+       invalidOptionWarnings: true, //allow toggling of invalid option warnings
+
+       clipboard: false, //enable clipboard
+       clipboardCopyStyled: true, //formatted table data
+       clipboardCopyConfig: false, //clipboard config
+       clipboardCopyFormatter: false, //DEPRICATED - REMOVE in 5.0
+       clipboardCopyRowRange: "active", //restrict clipboard to visible rows only
+       clipboardPasteParser: "table", //convert pasted clipboard data to rows
+       clipboardPasteAction: "insert", //how to insert pasted data into the table
+
+       clipboardCopied: function clipboardCopied() {}, //data has been copied to the clipboard
+       clipboardPasted: function clipboardPasted() {}, //data has been pasted into the table
+       clipboardPasteError: function clipboardPasteError() {}, //data has not successfully been pasted into the table
+
+       downloadDataFormatter: false, //function to manipulate table data before it is downloaded
+       downloadReady: function downloadReady(data, blob) {
+               return blob;
+       }, //function to manipulate download data
+       downloadComplete: false, //function to manipulate download data
+       downloadConfig: {}, //download config
+       downloadRowRange: "active", //restrict download to active rows only
+
+       dataTree: false, //enable data tree
+       dataTreeElementColumn: false,
+       dataTreeBranchElement: true, //show data tree branch element
+       dataTreeChildIndent: 9, //data tree child indent in px
+       dataTreeChildField: "_children", //data tre column field to look for child rows
+       dataTreeCollapseElement: false, //data tree row collapse element
+       dataTreeExpandElement: false, //data tree row expand element
+       dataTreeStartExpanded: false,
+       dataTreeRowExpanded: function dataTreeRowExpanded() {}, //row has been expanded
+       dataTreeRowCollapsed: function dataTreeRowCollapsed() {}, //row has been collapsed
+       dataTreeChildColumnCalcs: false, //include visible data tree rows in column calculations
+       dataTreeSelectPropagate: false, //seleccting a parent row selects its children
+
+       printAsHtml: false, //enable print as html
+       printFormatter: false, //printing page formatter
+       printHeader: false, //page header contents
+       printFooter: false, //page footer contents
+       printCopyStyle: true, //DEPRICATED - REMOVE in 5.0
+       printStyled: true, //enable print as html styling
+       printVisibleRows: true, //DEPRICATED - REMOVE in 5.0
+       printRowRange: "visible", //restrict print to visible rows only
+       printConfig: {}, //print config options
+
+       addRowPos: "bottom", //position to insert blank rows, top|bottom
+
+       selectable: "highlight", //highlight rows on hover
+       selectableRangeMode: "drag", //highlight rows on hover
+       selectableRollingSelection: true, //roll selection once maximum number of selectable rows is reached
+       selectablePersistence: true, // maintain selection when table view is updated
+       selectableCheck: function selectableCheck(data, row) {
+               return true;
+       }, //check wheather row is selectable
+
+       headerFilterLiveFilterDelay: 300, //delay before updating column after user types in header filter
+       headerFilterPlaceholder: false, //placeholder text to display in header filters
+
+       headerVisible: true, //hide header
+
+       history: false, //enable edit history
+
+       locale: false, //current system language
+       langs: {},
+
+       virtualDom: true, //enable DOM virtualization
+       virtualDomBuffer: 0, // set virtual DOM buffer size
+
+       persistentLayout: false, //DEPRICATED - REMOVE in 5.0
+       persistentSort: false, //DEPRICATED - REMOVE in 5.0
+       persistentFilter: false, //DEPRICATED - REMOVE in 5.0
+       persistenceID: "", //key for persistent storage
+       persistenceMode: true, //mode for storing persistence information
+       persistenceReaderFunc: false, //function for handling persistence data reading
+       persistenceWriterFunc: false, //function for handling persistence data writing
+
+       persistence: false,
+
+       responsiveLayout: false, //responsive layout flags
+       responsiveLayoutCollapseStartOpen: true, //start showing collapsed data
+       responsiveLayoutCollapseUseFormatters: true, //responsive layout collapse formatter
+       responsiveLayoutCollapseFormatter: false, //responsive layout collapse formatter
+
+       pagination: false, //set pagination type
+       paginationSize: false, //set number of rows to a page
+       paginationInitialPage: 1, //initail page to show on load
+       paginationButtonCount: 5, // set count of page button
+       paginationSizeSelector: false, //add pagination size selector element
+       paginationElement: false, //element to hold pagination numbers
+       paginationDataSent: {}, //pagination data sent to the server
+       paginationDataReceived: {}, //pagination data received from the server
+       paginationAddRow: "page", //add rows on table or page
+
+       ajaxURL: false, //url for ajax loading
+       ajaxURLGenerator: false,
+       ajaxParams: {}, //params for ajax loading
+       ajaxConfig: "get", //ajax request type
+       ajaxContentType: "form", //ajax request type
+       ajaxRequestFunc: false, //promise function
+       ajaxLoader: true, //show loader
+       ajaxLoaderLoading: false, //loader element
+       ajaxLoaderError: false, //loader element
+       ajaxFiltering: false,
+       ajaxSorting: false,
+       ajaxProgressiveLoad: false, //progressive loading
+       ajaxProgressiveLoadDelay: 0, //delay between requests
+       ajaxProgressiveLoadScrollMargin: 0, //margin before scroll begins
+
+       groupBy: false, //enable table grouping and set field to group by
+       groupStartOpen: true, //starting state of group
+       groupValues: false,
+
+       groupHeader: false, //header generation function
+       groupHeaderPrint: null,
+       groupHeaderClipboard: null,
+       groupHeaderHtmlOutput: null,
+       groupHeaderDownload: null,
+
+       htmlOutputConfig: false, //html outypu config
+
+       movableColumns: false, //enable movable columns
+
+       movableRows: false, //enable movable rows
+       movableRowsConnectedTables: false, //tables for movable rows to be connected to
+       movableRowsConnectedElements: false, //other elements for movable rows to be connected to
+       movableRowsSender: false,
+       movableRowsReceiver: "insert",
+       movableRowsSendingStart: function movableRowsSendingStart() {},
+       movableRowsSent: function movableRowsSent() {},
+       movableRowsSentFailed: function movableRowsSentFailed() {},
+       movableRowsSendingStop: function movableRowsSendingStop() {},
+       movableRowsReceivingStart: function movableRowsReceivingStart() {},
+       movableRowsReceived: function movableRowsReceived() {},
+       movableRowsReceivedFailed: function movableRowsReceivedFailed() {},
+       movableRowsReceivingStop: function movableRowsReceivingStop() {},
+       movableRowsElementDrop: function movableRowsElementDrop() {},
+
+       scrollToRowPosition: "top",
+       scrollToRowIfVisible: true,
+
+       scrollToColumnPosition: "left",
+       scrollToColumnIfVisible: true,
+
+       rowFormatter: false,
+       rowFormatterPrint: null,
+       rowFormatterClipboard: null,
+       rowFormatterHtmlOutput: null,
+
+       placeholder: false,
+
+       //table building callbacks
+       tableBuilding: function tableBuilding() {},
+       tableBuilt: function tableBuilt() {},
+
+       //render callbacks
+       renderStarted: function renderStarted() {},
+       renderComplete: function renderComplete() {},
+
+       //row callbacks
+       rowClick: false,
+       rowDblClick: false,
+       rowContext: false,
+       rowTap: false,
+       rowDblTap: false,
+       rowTapHold: false,
+       rowMouseEnter: false,
+       rowMouseLeave: false,
+       rowMouseOver: false,
+       rowMouseOut: false,
+       rowMouseMove: false,
+       rowContextMenu: false,
+       rowAdded: function rowAdded() {},
+       rowDeleted: function rowDeleted() {},
+       rowMoved: function rowMoved() {},
+       rowUpdated: function rowUpdated() {},
+       rowSelectionChanged: function rowSelectionChanged() {},
+       rowSelected: function rowSelected() {},
+       rowDeselected: function rowDeselected() {},
+       rowResized: function rowResized() {},
+
+       //cell callbacks
+       //row callbacks
+       cellClick: false,
+       cellDblClick: false,
+       cellContext: false,
+       cellTap: false,
+       cellDblTap: false,
+       cellTapHold: false,
+       cellMouseEnter: false,
+       cellMouseLeave: false,
+       cellMouseOver: false,
+       cellMouseOut: false,
+       cellMouseMove: false,
+       cellEditing: function cellEditing() {},
+       cellEdited: function cellEdited() {},
+       cellEditCancelled: function cellEditCancelled() {},
+
+       //column callbacks
+       columnMoved: false,
+       columnResized: function columnResized() {},
+       columnTitleChanged: function columnTitleChanged() {},
+       columnVisibilityChanged: function columnVisibilityChanged() {},
+
+       //HTML iport callbacks
+       htmlImporting: function htmlImporting() {},
+       htmlImported: function htmlImported() {},
+
+       //data callbacks
+       dataLoading: function dataLoading() {},
+       dataLoaded: function dataLoaded() {},
+       dataEdited: function dataEdited() {},
+
+       //ajax callbacks
+       ajaxRequesting: function ajaxRequesting() {},
+       ajaxResponse: false,
+       ajaxError: function ajaxError() {},
+
+       //filtering callbacks
+       dataFiltering: false,
+       dataFiltered: false,
+
+       //sorting callbacks
+       dataSorting: function dataSorting() {},
+       dataSorted: function dataSorted() {},
+
+       //grouping callbacks
+       groupToggleElement: "arrow",
+       groupClosedShowCalcs: false,
+       dataGrouping: function dataGrouping() {},
+       dataGrouped: false,
+       groupVisibilityChanged: function groupVisibilityChanged() {},
+       groupClick: false,
+       groupDblClick: false,
+       groupContext: false,
+       groupContextMenu: false,
+       groupTap: false,
+       groupDblTap: false,
+       groupTapHold: false,
+
+       columnCalcs: true,
+
+       //pagination callbacks
+       pageLoaded: function pageLoaded() {},
+
+       //localization callbacks
+       localized: function localized() {},
+
+       //validation callbacks
+       validationMode: "blocking",
+       validationFailed: function validationFailed() {},
+
+       //history callbacks
+       historyUndo: function historyUndo() {},
+       historyRedo: function historyRedo() {},
+
+       //scroll callbacks
+       scrollHorizontal: function scrollHorizontal() {},
+       scrollVertical: function scrollVertical() {}
+};
+
+Tabulator.prototype.initializeOptions = function (options) {
+
+       //warn user if option is not available
+       if (options.invalidOptionWarnings !== false) {
+               for (var key in options) {
+                       if (typeof this.defaultOptions[key] === "undefined") {
+                               console.warn("Invalid table constructor option:", key);
+                       }
+               }
+       }
+
+       //assign options to table
+       for (var key in this.defaultOptions) {
+               if (key in options) {
+                       this.options[key] = options[key];
+               } else {
+                       if (Array.isArray(this.defaultOptions[key])) {
+                               this.options[key] = [];
+                       } else if (_typeof(this.defaultOptions[key]) === "object" && this.defaultOptions[key] !== null) {
+                               this.options[key] = {};
+                       } else {
+                               this.options[key] = this.defaultOptions[key];
+                       }
+               }
+       }
+};
+
+Tabulator.prototype.initializeElement = function (element) {
+
+       if (typeof HTMLElement !== "undefined" && element instanceof HTMLElement) {
+               this.element = element;
+               return true;
+       } else if (typeof element === "string") {
+               this.element = document.querySelector(element);
+
+               if (this.element) {
+                       return true;
+               } else {
+                       console.error("Tabulator Creation Error - no element found matching selector: ", element);
+                       return false;
+               }
+       } else {
+               console.error("Tabulator Creation Error - Invalid element provided:", element);
+               return false;
+       }
+};
+
+//convert depricated functionality to new functions
+Tabulator.prototype._mapDepricatedFunctionality = function () {
+
+       //map depricated persistance setup options
+       if (this.options.persistentLayout || this.options.persistentSort || this.options.persistentFilter) {
+               if (!this.options.persistence) {
+                       this.options.persistence = {};
+               }
+       }
+
+       if (this.options.downloadDataFormatter) {
+               console.warn("DEPRECATION WARNING - downloadDataFormatter option has been deprecated");
+       }
+
+       if (typeof this.options.clipboardCopyHeader !== "undefined") {
+               this.options.columnHeaders = this.options.clipboardCopyHeader;
+               console.warn("DEPRECATION WARNING - clipboardCopyHeader option has been deprecated, please use the columnHeaders property on the clipboardCopyConfig option");
+       }
+
+       if (this.options.printVisibleRows !== true) {
+               console.warn("printVisibleRows option is deprecated, you should now use the printRowRange option");
+
+               this.options.persistence.printRowRange = "active";
+       }
+
+       if (this.options.printCopyStyle !== true) {
+               console.warn("printCopyStyle option is deprecated, you should now use the printStyled option");
+
+               this.options.persistence.printStyled = this.options.printCopyStyle;
+       }
+
+       if (this.options.persistentLayout) {
+               console.warn("persistentLayout option is deprecated, you should now use the persistence option");
+
+               if (this.options.persistence !== true && typeof this.options.persistence.columns === "undefined") {
+                       this.options.persistence.columns = true;
+               }
+       }
+
+       if (this.options.persistentSort) {
+               console.warn("persistentSort option is deprecated, you should now use the persistence option");
+
+               if (this.options.persistence !== true && typeof this.options.persistence.sort === "undefined") {
+                       this.options.persistence.sort = true;
+               }
+       }
+
+       if (this.options.persistentFilter) {
+               console.warn("persistentFilter option is deprecated, you should now use the persistence option");
+
+               if (this.options.persistence !== true && typeof this.options.persistence.filter === "undefined") {
+                       this.options.persistence.filter = true;
+               }
+       }
+
+       if (this.options.columnVertAlign) {
+               console.warn("columnVertAlign option is deprecated, you should now use the columnHeaderVertAlign option");
+
+               this.options.columnHeaderVertAlign = this.options.columnVertAlign;
+       }
+};
+
+Tabulator.prototype._clearSelection = function () {
+
+       this.element.classList.add("tabulator-block-select");
+
+       if (window.getSelection) {
+               if (window.getSelection().empty) {
+                       // Chrome
+                       window.getSelection().empty();
+               } else if (window.getSelection().removeAllRanges) {
+                       // Firefox
+                       window.getSelection().removeAllRanges();
+               }
+       } else if (document.selection) {
+               // IE?
+               document.selection.empty();
+       }
+
+       this.element.classList.remove("tabulator-block-select");
+};
+
+//concreate table
+Tabulator.prototype._create = function () {
+       this._clearObjectPointers();
+
+       this._mapDepricatedFunctionality();
+
+       this.bindModules();
+
+       if (this.element.tagName === "TABLE") {
+               if (this.modExists("htmlTableImport", true)) {
+                       this.modules.htmlTableImport.parseTable();
+               }
+       }
+
+       this.columnManager = new ColumnManager(this);
+       this.rowManager = new RowManager(this);
+       this.footerManager = new FooterManager(this);
+
+       this.columnManager.setRowManager(this.rowManager);
+       this.rowManager.setColumnManager(this.columnManager);
+
+       this._buildElement();
+
+       this._loadInitialData();
+};
+
+//clear pointers to objects in default config object
+Tabulator.prototype._clearObjectPointers = function () {
+       this.options.columns = this.options.columns.slice(0);
+
+       if (!this.options.reactiveData) {
+               this.options.data = this.options.data.slice(0);
+       }
+};
+
+//build tabulator element
+Tabulator.prototype._buildElement = function () {
+       var _this17 = this;
+
+       var element = this.element,
+           mod = this.modules,
+           options = this.options;
+
+       options.tableBuilding.call(this);
+
+       element.classList.add("tabulator");
+       element.setAttribute("role", "grid");
+
+       //empty element
+       while (element.firstChild) {
+               element.removeChild(element.firstChild);
+       } //set table height
+       if (options.height) {
+               options.height = isNaN(options.height) ? options.height : options.height + "px";
+               element.style.height = options.height;
+       }
+
+       //set table min height
+       if (options.minHeight !== false) {
+               options.minHeight = isNaN(options.minHeight) ? options.minHeight : options.minHeight + "px";
+               element.style.minHeight = options.minHeight;
+       }
+
+       //set table maxHeight
+       if (options.maxHeight !== false) {
+               options.maxHeight = isNaN(options.maxHeight) ? options.maxHeight : options.maxHeight + "px";
+               element.style.maxHeight = options.maxHeight;
+       }
+
+       this.columnManager.initialize();
+       this.rowManager.initialize();
+
+       this._detectBrowser();
+
+       if (this.modExists("layout", true)) {
+               mod.layout.initialize(options.layout);
+       }
+
+       //set localization
+       if (options.headerFilterPlaceholder !== false) {
+               mod.localize.setHeaderFilterPlaceholder(options.headerFilterPlaceholder);
+       }
+
+       for (var locale in options.langs) {
+               mod.localize.installLang(locale, options.langs[locale]);
+       }
+
+       mod.localize.setLocale(options.locale);
+
+       //configure placeholder element
+       if (typeof options.placeholder == "string") {
+
+               var el = document.createElement("div");
+               el.classList.add("tabulator-placeholder");
+
+               var span = document.createElement("span");
+               span.innerHTML = options.placeholder;
+
+               el.appendChild(span);
+
+               options.placeholder = el;
+       }
+
+       //build table elements
+       element.appendChild(this.columnManager.getElement());
+       element.appendChild(this.rowManager.getElement());
+
+       if (options.footerElement) {
+               this.footerManager.activate();
+       }
+
+       if (options.persistence && this.modExists("persistence", true)) {
+               mod.persistence.initialize();
+       }
+
+       if (options.persistence && this.modExists("persistence", true) && mod.persistence.config.columns) {
+               options.columns = mod.persistence.load("columns", options.columns);
+       }
+
+       if (options.movableRows && this.modExists("moveRow")) {
+               mod.moveRow.initialize();
+       }
+
+       if (options.autoColumns && this.options.data) {
+               this.columnManager.generateColumnsFromRowData(this.options.data);
+       }
+
+       if (this.modExists("columnCalcs")) {
+               mod.columnCalcs.initialize();
+       }
+
+       this.columnManager.setColumns(options.columns);
+
+       if (options.dataTree && this.modExists("dataTree", true)) {
+               mod.dataTree.initialize();
+       }
+
+       if (this.modExists("frozenRows")) {
+               this.modules.frozenRows.initialize();
+       }
+
+       if ((options.persistence && this.modExists("persistence", true) && mod.persistence.config.sort || options.initialSort) && this.modExists("sort", true)) {
+               var sorters = [];
+
+               if (options.persistence && this.modExists("persistence", true) && mod.persistence.config.sort) {
+                       sorters = mod.persistence.load("sort");
+
+                       if (sorters === false && options.initialSort) {
+                               sorters = options.initialSort;
+                       }
+               } else if (options.initialSort) {
+                       sorters = options.initialSort;
+               }
+
+               mod.sort.setSort(sorters);
+       }
+
+       if ((options.persistence && this.modExists("persistence", true) && mod.persistence.config.filter || options.initialFilter) && this.modExists("filter", true)) {
+               var filters = [];
+
+               if (options.persistence && this.modExists("persistence", true) && mod.persistence.config.filter) {
+                       filters = mod.persistence.load("filter");
+
+                       if (filters === false && options.initialFilter) {
+                               filters = options.initialFilter;
+                       }
+               } else if (options.initialFilter) {
+                       filters = options.initialFilter;
+               }
+
+               mod.filter.setFilter(filters);
+       }
+
+       if (options.initialHeaderFilter && this.modExists("filter", true)) {
+               options.initialHeaderFilter.forEach(function (item) {
+
+                       var column = _this17.columnManager.findColumn(item.field);
+
+                       if (column) {
+                               mod.filter.setHeaderFilterValue(column, item.value);
+                       } else {
+                               console.warn("Column Filter Error - No matching column found:", item.field);
+                               return false;
+                       }
+               });
+       }
+
+       if (this.modExists("ajax")) {
+               mod.ajax.initialize();
+       }
+
+       if (options.pagination && this.modExists("page", true)) {
+               mod.page.initialize();
+       }
+
+       if (options.groupBy && this.modExists("groupRows", true)) {
+               mod.groupRows.initialize();
+       }
+
+       if (this.modExists("keybindings")) {
+               mod.keybindings.initialize();
+       }
+
+       if (this.modExists("selectRow")) {
+               mod.selectRow.clearSelectionData(true);
+       }
+
+       if (options.autoResize && this.modExists("resizeTable")) {
+               mod.resizeTable.initialize();
+       }
+
+       if (this.modExists("clipboard")) {
+               mod.clipboard.initialize();
+       }
+
+       if (options.printAsHtml && this.modExists("print")) {
+               mod.print.initialize();
+       }
+
+       options.tableBuilt.call(this);
+};
+
+Tabulator.prototype._loadInitialData = function () {
+       var self = this;
+
+       if (self.options.pagination && self.modExists("page")) {
+               self.modules.page.reset(true, true);
+
+               if (self.options.pagination == "local") {
+                       if (self.options.data.length) {
+                               self.rowManager.setData(self.options.data, false, true);
+                       } else {
+                               if ((self.options.ajaxURL || self.options.ajaxURLGenerator) && self.modExists("ajax")) {
+                                       self.modules.ajax.loadData(false, true).then(function () {}).catch(function () {
+                                               if (self.options.paginationInitialPage) {
+                                                       self.modules.page.setPage(self.options.paginationInitialPage);
+                                               }
+                                       });
+
+                                       return;
+                               } else {
+                                       self.rowManager.setData(self.options.data, false, true);
+                               }
+                       }
+
+                       if (self.options.paginationInitialPage) {
+                               self.modules.page.setPage(self.options.paginationInitialPage);
+                       }
+               } else {
+                       if (self.options.ajaxURL) {
+                               self.modules.page.setPage(self.options.paginationInitialPage).then(function () {}).catch(function () {});
+                       } else {
+                               self.rowManager.setData([], false, true);
+                       }
+               }
+       } else {
+               if (self.options.data.length) {
+                       self.rowManager.setData(self.options.data);
+               } else {
+                       if ((self.options.ajaxURL || self.options.ajaxURLGenerator) && self.modExists("ajax")) {
+                               self.modules.ajax.loadData(false, true).then(function () {}).catch(function () {});
+                       } else {
+                               self.rowManager.setData(self.options.data, false, true);
+                       }
+               }
+       }
+};
+
+//deconstructor
+Tabulator.prototype.destroy = function () {
+       var element = this.element;
+
+       Tabulator.prototype.comms.deregister(this); //deregister table from inderdevice communication
+
+       if (this.options.reactiveData && this.modExists("reactiveData", true)) {
+               this.modules.reactiveData.unwatchData();
+       }
+
+       //clear row data
+       this.rowManager.rows.forEach(function (row) {
+               row.wipe();
+       });
+
+       this.rowManager.rows = [];
+       this.rowManager.activeRows = [];
+       this.rowManager.displayRows = [];
+
+       //clear event bindings
+       if (this.options.autoResize && this.modExists("resizeTable")) {
+               this.modules.resizeTable.clearBindings();
+       }
+
+       if (this.modExists("keybindings")) {
+               this.modules.keybindings.clearBindings();
+       }
+
+       //clear DOM
+       while (element.firstChild) {
+               element.removeChild(element.firstChild);
+       }element.classList.remove("tabulator");
+};
+
+Tabulator.prototype._detectBrowser = function () {
+       var ua = navigator.userAgent || navigator.vendor || window.opera;
+
+       if (ua.indexOf("Trident") > -1) {
+               this.browser = "ie";
+               this.browserSlow = true;
+       } else if (ua.indexOf("Edge") > -1) {
+               this.browser = "edge";
+               this.browserSlow = true;
+       } else if (ua.indexOf("Firefox") > -1) {
+               this.browser = "firefox";
+               this.browserSlow = false;
+       } else {
+               this.browser = "other";
+               this.browserSlow = false;
+       }
+
+       this.browserMobile = /(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino|android|ipad|playbook|silk/i.test(ua) || /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(ua.substr(0, 4));
+};
+
+////////////////// Data Handling //////////////////
+
+//block table redrawing
+Tabulator.prototype.blockRedraw = function () {
+       return this.rowManager.blockRedraw();
+};
+
+//restore table redrawing
+Tabulator.prototype.restoreRedraw = function () {
+       return this.rowManager.restoreRedraw();
+};
+
+//local data from local file
+Tabulator.prototype.setDataFromLocalFile = function (extensions) {
+       var _this18 = this;
+
+       return new Promise(function (resolve, reject) {
+               var input = document.createElement("input");
+               input.type = "file";
+               input.accept = extensions || ".json,application/json";
+
+               input.addEventListener("change", function (e) {
+                       var file = input.files[0],
+                           reader = new FileReader(),
+                           data;
+
+                       reader.readAsText(file);
+
+                       reader.onload = function (e) {
+
+                               try {
+                                       data = JSON.parse(reader.result);
+                               } catch (e) {
+                                       console.warn("File Load Error - File contents is invalid JSON", e);
+                                       reject(e);
+                                       return;
+                               }
+
+                               _this18._setData(data).then(function (data) {
+                                       resolve(data);
+                               }).catch(function (err) {
+                                       resolve(err);
+                               });
+                       };
+
+                       reader.onerror = function (e) {
+                               console.warn("File Load Error - Unable to read file");
+                               reject();
+                       };
+               });
+
+               input.click();
+       });
+};
+
+//load data
+Tabulator.prototype.setData = function (data, params, config) {
+       if (this.modExists("ajax")) {
+               this.modules.ajax.blockActiveRequest();
+       }
+
+       return this._setData(data, params, config, false, true);
+};
+
+Tabulator.prototype._setData = function (data, params, config, inPosition, columnsChanged) {
+       var self = this;
+
+       if (typeof data === "string") {
+               if (data.indexOf("{") == 0 || data.indexOf("[") == 0) {
+                       //data is a json encoded string
+                       return self.rowManager.setData(JSON.parse(data), inPosition, columnsChanged);
+               } else {
+
+                       if (self.modExists("ajax", true)) {
+                               if (params) {
+                                       self.modules.ajax.setParams(params);
+                               }
+
+                               if (config) {
+                                       self.modules.ajax.setConfig(config);
+                               }
+
+                               self.modules.ajax.setUrl(data);
+
+                               if (self.options.pagination == "remote" && self.modExists("page", true)) {
+                                       self.modules.page.reset(true, true);
+                                       return self.modules.page.setPage(1);
+                               } else {
+                                       //assume data is url, make ajax call to url to get data
+                                       return self.modules.ajax.loadData(inPosition, columnsChanged);
+                               }
+                       }
+               }
+       } else {
+               if (data) {
+                       //asume data is already an object
+                       return self.rowManager.setData(data, inPosition, columnsChanged);
+               } else {
+
+                       //no data provided, check if ajaxURL is present;
+                       if (self.modExists("ajax") && (self.modules.ajax.getUrl || self.options.ajaxURLGenerator)) {
+
+                               if (self.options.pagination == "remote" && self.modExists("page", true)) {
+                                       self.modules.page.reset(true, true);
+                                       return self.modules.page.setPage(1);
+                               } else {
+                                       return self.modules.ajax.loadData(inPosition, columnsChanged);
+                               }
+                       } else {
+                               //empty data
+                               return self.rowManager.setData([], inPosition, columnsChanged);
+                       }
+               }
+       }
+};
+
+//clear data
+Tabulator.prototype.clearData = function () {
+       if (this.modExists("ajax")) {
+               this.modules.ajax.blockActiveRequest();
+       }
+
+       this.rowManager.clearData();
+};
+
+//get table data array
+Tabulator.prototype.getData = function (active) {
+
+       if (active === true) {
+               console.warn("passing a boolean to the getData function is deprecated, you should now pass the string 'active'");
+               active = "active";
+       }
+
+       return this.rowManager.getData(active);
+};
+
+//get table data array count
+Tabulator.prototype.getDataCount = function (active) {
+
+       if (active === true) {
+               console.warn("passing a boolean to the getDataCount function is deprecated, you should now pass the string 'active'");
+               active = "active";
+       }
+
+       return this.rowManager.getDataCount(active);
+};
+
+//search for specific row components
+Tabulator.prototype.searchRows = function (field, type, value) {
+       if (this.modExists("filter", true)) {
+               return this.modules.filter.search("rows", field, type, value);
+       }
+};
+
+//search for specific data
+Tabulator.prototype.searchData = function (field, type, value) {
+       if (this.modExists("filter", true)) {
+               return this.modules.filter.search("data", field, type, value);
+       }
+};
+
+//get table html
+Tabulator.prototype.getHtml = function (visible, style, config) {
+       if (this.modExists("export", true)) {
+               return this.modules.export.getHtml(visible, style, config);
+       }
+};
+
+//get print html
+Tabulator.prototype.print = function (visible, style, config) {
+       if (this.modExists("print", true)) {
+               return this.modules.print.printFullscreen(visible, style, config);
+       }
+};
+
+//retrieve Ajax URL
+Tabulator.prototype.getAjaxUrl = function () {
+       if (this.modExists("ajax", true)) {
+               return this.modules.ajax.getUrl();
+       }
+};
+
+//replace data, keeping table in position with same sort
+Tabulator.prototype.replaceData = function (data, params, config) {
+       if (this.modExists("ajax")) {
+               this.modules.ajax.blockActiveRequest();
+       }
+
+       return this._setData(data, params, config, true);
+};
+
+//update table data
+Tabulator.prototype.updateData = function (data) {
+       var _this19 = this;
+
+       var self = this;
+       var responses = 0;
+
+       return new Promise(function (resolve, reject) {
+               if (_this19.modExists("ajax")) {
+                       _this19.modules.ajax.blockActiveRequest();
+               }
+
+               if (typeof data === "string") {
+                       data = JSON.parse(data);
+               }
+
+               if (data) {
+                       data.forEach(function (item) {
+                               var row = self.rowManager.findRow(item[self.options.index]);
+
+                               if (row) {
+                                       responses++;
+
+                                       row.updateData(item).then(function () {
+                                               responses--;
+
+                                               if (!responses) {
+                                                       resolve();
+                                               }
+                                       });
+                               }
+                       });
+               } else {
+                       console.warn("Update Error - No data provided");
+                       reject("Update Error - No data provided");
+               }
+       });
+};
+
+Tabulator.prototype.addData = function (data, pos, index) {
+       var _this20 = this;
+
+       return new Promise(function (resolve, reject) {
+               if (_this20.modExists("ajax")) {
+                       _this20.modules.ajax.blockActiveRequest();
+               }
+
+               if (typeof data === "string") {
+                       data = JSON.parse(data);
+               }
+
+               if (data) {
+                       _this20.rowManager.addRows(data, pos, index).then(function (rows) {
+                               var output = [];
+
+                               rows.forEach(function (row) {
+                                       output.push(row.getComponent());
+                               });
+
+                               resolve(output);
+                       });
+               } else {
+                       console.warn("Update Error - No data provided");
+                       reject("Update Error - No data provided");
+               }
+       });
+};
+
+//update table data
+Tabulator.prototype.updateOrAddData = function (data) {
+       var _this21 = this;
+
+       var self = this,
+           rows = [],
+           responses = 0;
+
+       return new Promise(function (resolve, reject) {
+               if (_this21.modExists("ajax")) {
+                       _this21.modules.ajax.blockActiveRequest();
+               }
+
+               if (typeof data === "string") {
+                       data = JSON.parse(data);
+               }
+
+               if (data) {
+                       data.forEach(function (item) {
+                               var row = self.rowManager.findRow(item[self.options.index]);
+
+                               responses++;
+
+                               if (row) {
+                                       row.updateData(item).then(function () {
+                                               responses--;
+                                               rows.push(row.getComponent());
+
+                                               if (!responses) {
+                                                       resolve(rows);
+                                               }
+                                       });
+                               } else {
+                                       self.rowManager.addRows(item).then(function (newRows) {
+                                               responses--;
+                                               rows.push(newRows[0].getComponent());
+
+                                               if (!responses) {
+                                                       resolve(rows);
+                                               }
+                                       });
+                               }
+                       });
+               } else {
+                       console.warn("Update Error - No data provided");
+                       reject("Update Error - No data provided");
+               }
+       });
+};
+
+//get row object
+Tabulator.prototype.getRow = function (index) {
+       var row = this.rowManager.findRow(index);
+
+       if (row) {
+               return row.getComponent();
+       } else {
+               console.warn("Find Error - No matching row found:", index);
+               return false;
+       }
+};
+
+//get row object
+Tabulator.prototype.getRowFromPosition = function (position, active) {
+       var row = this.rowManager.getRowFromPosition(position, active);
+
+       if (row) {
+               return row.getComponent();
+       } else {
+               console.warn("Find Error - No matching row found:", position);
+               return false;
+       }
+};
+
+//delete row from table
+Tabulator.prototype.deleteRow = function (index) {
+       var _this22 = this;
+
+       return new Promise(function (resolve, reject) {
+               var self = _this22,
+                   count = 0,
+                   successCount = 0,
+                   foundRows = [];
+
+               function doneCheck() {
+                       count++;
+
+                       if (count == index.length) {
+                               if (successCount) {
+                                       self.rowManager.reRenderInPosition();
+                                       resolve();
+                               }
+                       }
+               }
+
+               if (!Array.isArray(index)) {
+                       index = [index];
+               }
+
+               //find matching rows
+               index.forEach(function (item) {
+                       var row = _this22.rowManager.findRow(item, true);
+
+                       if (row) {
+                               foundRows.push(row);
+                       } else {
+                               console.warn("Delete Error - No matching row found:", item);
+                               reject("Delete Error - No matching row found");
+                               doneCheck();
+                       }
+               });
+
+               //sort rows into correct order to ensure smooth delete from table
+               foundRows.sort(function (a, b) {
+                       return _this22.rowManager.rows.indexOf(a) > _this22.rowManager.rows.indexOf(b) ? 1 : -1;
+               });
+
+               foundRows.forEach(function (row) {
+                       row.delete().then(function () {
+                               successCount++;
+                               doneCheck();
+                       }).catch(function (err) {
+                               doneCheck();
+                               reject(err);
+                       });
+               });
+       });
+};
+
+//add row to table
+Tabulator.prototype.addRow = function (data, pos, index) {
+       var _this23 = this;
+
+       return new Promise(function (resolve, reject) {
+               if (typeof data === "string") {
+                       data = JSON.parse(data);
+               }
+
+               _this23.rowManager.addRows(data, pos, index).then(function (rows) {
+                       //recalc column calculations if present
+                       if (_this23.modExists("columnCalcs")) {
+                               _this23.modules.columnCalcs.recalc(_this23.rowManager.activeRows);
+                       }
+
+                       resolve(rows[0].getComponent());
+               });
+       });
+};
+
+//update a row if it exitsts otherwise create it
+Tabulator.prototype.updateOrAddRow = function (index, data) {
+       var _this24 = this;
+
+       return new Promise(function (resolve, reject) {
+               var row = _this24.rowManager.findRow(index);
+
+               if (typeof data === "string") {
+                       data = JSON.parse(data);
+               }
+
+               if (row) {
+                       row.updateData(data).then(function () {
+                               //recalc column calculations if present
+                               if (_this24.modExists("columnCalcs")) {
+                                       _this24.modules.columnCalcs.recalc(_this24.rowManager.activeRows);
+                               }
+
+                               resolve(row.getComponent());
+                       }).catch(function (err) {
+                               reject(err);
+                       });
+               } else {
+                       row = _this24.rowManager.addRows(data).then(function (rows) {
+                               //recalc column calculations if present
+                               if (_this24.modExists("columnCalcs")) {
+                                       _this24.modules.columnCalcs.recalc(_this24.rowManager.activeRows);
+                               }
+
+                               resolve(rows[0].getComponent());
+                       }).catch(function (err) {
+                               reject(err);
+                       });
+               }
+       });
+};
+
+//update row data
+Tabulator.prototype.updateRow = function (index, data) {
+       var _this25 = this;
+
+       return new Promise(function (resolve, reject) {
+               var row = _this25.rowManager.findRow(index);
+
+               if (typeof data === "string") {
+                       data = JSON.parse(data);
+               }
+
+               if (row) {
+                       row.updateData(data).then(function () {
+                               resolve(row.getComponent());
+                       }).catch(function (err) {
+                               reject(err);
+                       });
+               } else {
+                       console.warn("Update Error - No matching row found:", index);
+                       reject("Update Error - No matching row found");
+               }
+       });
+};
+
+//scroll to row in DOM
+Tabulator.prototype.scrollToRow = function (index, position, ifVisible) {
+       var _this26 = this;
+
+       return new Promise(function (resolve, reject) {
+               var row = _this26.rowManager.findRow(index);
+
+               if (row) {
+                       _this26.rowManager.scrollToRow(row, position, ifVisible).then(function () {
+                               resolve();
+                       }).catch(function (err) {
+                               reject(err);
+                       });
+               } else {
+                       console.warn("Scroll Error - No matching row found:", index);
+                       reject("Scroll Error - No matching row found");
+               }
+       });
+};
+
+Tabulator.prototype.moveRow = function (from, to, after) {
+       var fromRow = this.rowManager.findRow(from);
+
+       if (fromRow) {
+               fromRow.moveToRow(to, after);
+       } else {
+               console.warn("Move Error - No matching row found:", from);
+       }
+};
+
+Tabulator.prototype.getRows = function (active) {
+
+       if (active === true) {
+               console.warn("passing a boolean to the getRows function is deprecated, you should now pass the string 'active'");
+               active = "active";
+       }
+
+       return this.rowManager.getComponents(active);
+};
+
+//get position of row in table
+Tabulator.prototype.getRowPosition = function (index, active) {
+       var row = this.rowManager.findRow(index);
+
+       if (row) {
+               return this.rowManager.getRowPosition(row, active);
+       } else {
+               console.warn("Position Error - No matching row found:", index);
+               return false;
+       }
+};
+
+//copy table data to clipboard
+Tabulator.prototype.copyToClipboard = function (selector) {
+       if (this.modExists("clipboard", true)) {
+               this.modules.clipboard.copy(selector);
+       }
+};
+
+/////////////// Column Functions  ///////////////
+
+Tabulator.prototype.setColumns = function (definition) {
+       this.columnManager.setColumns(definition);
+};
+
+Tabulator.prototype.getColumns = function (structured) {
+       return this.columnManager.getComponents(structured);
+};
+
+Tabulator.prototype.getColumn = function (field) {
+       var col = this.columnManager.findColumn(field);
+
+       if (col) {
+               return col.getComponent();
+       } else {
+               console.warn("Find Error - No matching column found:", field);
+               return false;
+       }
+};
+
+Tabulator.prototype.getColumnDefinitions = function () {
+       return this.columnManager.getDefinitionTree();
+};
+
+Tabulator.prototype.getColumnLayout = function () {
+       if (this.modExists("persistence", true)) {
+               return this.modules.persistence.parseColumns(this.columnManager.getColumns());
+       }
+};
+
+Tabulator.prototype.setColumnLayout = function (layout) {
+       if (this.modExists("persistence", true)) {
+               this.columnManager.setColumns(this.modules.persistence.mergeDefinition(this.options.columns, layout));
+               return true;
+       }
+       return false;
+};
+
+Tabulator.prototype.showColumn = function (field) {
+       var column = this.columnManager.findColumn(field);
+
+       if (column) {
+               column.show();
+
+               if (this.options.responsiveLayout && this.modExists("responsiveLayout", true)) {
+                       this.modules.responsiveLayout.update();
+               }
+       } else {
+               console.warn("Column Show Error - No matching column found:", field);
+               return false;
+       }
+};
+
+Tabulator.prototype.hideColumn = function (field) {
+       var column = this.columnManager.findColumn(field);
+
+       if (column) {
+               column.hide();
+
+               if (this.options.responsiveLayout && this.modExists("responsiveLayout", true)) {
+                       this.modules.responsiveLayout.update();
+               }
+       } else {
+               console.warn("Column Hide Error - No matching column found:", field);
+               return false;
+       }
+};
+
+Tabulator.prototype.toggleColumn = function (field) {
+       var column = this.columnManager.findColumn(field);
+
+       if (column) {
+               if (column.visible) {
+                       column.hide();
+               } else {
+                       column.show();
+               }
+       } else {
+               console.warn("Column Visibility Toggle Error - No matching column found:", field);
+               return false;
+       }
+};
+
+Tabulator.prototype.addColumn = function (definition, before, field) {
+       var _this27 = this;
+
+       return new Promise(function (resolve, reject) {
+               var column = _this27.columnManager.findColumn(field);
+
+               _this27.columnManager.addColumn(definition, before, column).then(function (column) {
+                       resolve(column.getComponent());
+               }).catch(function (err) {
+                       reject(err);
+               });
+       });
+};
+
+Tabulator.prototype.deleteColumn = function (field) {
+       var _this28 = this;
+
+       return new Promise(function (resolve, reject) {
+               var column = _this28.columnManager.findColumn(field);
+
+               if (column) {
+                       column.delete().then(function () {
+                               resolve();
+                       }).catch(function (err) {
+                               reject(err);
+                       });
+               } else {
+                       console.warn("Column Delete Error - No matching column found:", field);
+                       reject();
+               }
+       });
+};
+
+Tabulator.prototype.updateColumnDefinition = function (field, definition) {
+       var _this29 = this;
+
+       return new Promise(function (resolve, reject) {
+               var column = _this29.columnManager.findColumn(field);
+
+               if (column) {
+                       column.updateDefinition(definition).then(function (col) {
+                               resolve(col);
+                       }).catch(function (err) {
+                               reject(err);
+                       });
+               } else {
+                       console.warn("Column Update Error - No matching column found:", field);
+                       reject();
+               }
+       });
+};
+
+Tabulator.prototype.moveColumn = function (from, to, after) {
+       var fromColumn = this.columnManager.findColumn(from);
+       var toColumn = this.columnManager.findColumn(to);
+
+       if (fromColumn) {
+               if (toColumn) {
+                       this.columnManager.moveColumn(fromColumn, toColumn, after);
+               } else {
+                       console.warn("Move Error - No matching column found:", toColumn);
+               }
+       } else {
+               console.warn("Move Error - No matching column found:", from);
+       }
+};
+
+//scroll to column in DOM
+Tabulator.prototype.scrollToColumn = function (field, position, ifVisible) {
+       var _this30 = this;
+
+       return new Promise(function (resolve, reject) {
+               var column = _this30.columnManager.findColumn(field);
+
+               if (column) {
+                       _this30.columnManager.scrollToColumn(column, position, ifVisible).then(function () {
+                               resolve();
+                       }).catch(function (err) {
+                               reject(err);
+                       });
+               } else {
+                       console.warn("Scroll Error - No matching column found:", field);
+                       reject("Scroll Error - No matching column found");
+               }
+       });
+};
+
+//////////// Localization Functions  ////////////
+Tabulator.prototype.setLocale = function (locale) {
+       this.modules.localize.setLocale(locale);
+};
+
+Tabulator.prototype.getLocale = function () {
+       return this.modules.localize.getLocale();
+};
+
+Tabulator.prototype.getLang = function (locale) {
+       return this.modules.localize.getLang(locale);
+};
+
+//////////// General Public Functions ////////////
+
+//redraw list without updating data
+Tabulator.prototype.redraw = function (force) {
+       this.columnManager.redraw(force);
+       this.rowManager.redraw(force);
+};
+
+Tabulator.prototype.setHeight = function (height) {
+
+       if (this.rowManager.renderMode !== "classic") {
+               this.options.height = isNaN(height) ? height : height + "px";
+               this.element.style.height = this.options.height;
+               this.rowManager.setRenderMode();
+               this.rowManager.redraw();
+       } else {
+               console.warn("setHeight function is not available in classic render mode");
+       }
+};
+
+///////////////////// Sorting ////////////////////
+
+//trigger sort
+Tabulator.prototype.setSort = function (sortList, dir) {
+       if (this.modExists("sort", true)) {
+               this.modules.sort.setSort(sortList, dir);
+               this.rowManager.sorterRefresh();
+       }
+};
+
+Tabulator.prototype.getSorters = function () {
+       if (this.modExists("sort", true)) {
+               return this.modules.sort.getSort();
+       }
+};
+
+Tabulator.prototype.clearSort = function () {
+       if (this.modExists("sort", true)) {
+               this.modules.sort.clear();
+               this.rowManager.sorterRefresh();
+       }
+};
+
+///////////////////// Filtering ////////////////////
+
+//set standard filters
+Tabulator.prototype.setFilter = function (field, type, value, params) {
+       if (this.modExists("filter", true)) {
+               this.modules.filter.setFilter(field, type, value, params);
+               this.rowManager.filterRefresh();
+       }
+};
+
+//add filter to array
+Tabulator.prototype.addFilter = function (field, type, value, params) {
+       if (this.modExists("filter", true)) {
+               this.modules.filter.addFilter(field, type, value, params);
+               this.rowManager.filterRefresh();
+       }
+};
+
+//get all filters
+Tabulator.prototype.getFilters = function (all) {
+       if (this.modExists("filter", true)) {
+               return this.modules.filter.getFilters(all);
+       }
+};
+
+Tabulator.prototype.setHeaderFilterFocus = function (field) {
+       if (this.modExists("filter", true)) {
+               var column = this.columnManager.findColumn(field);
+
+               if (column) {
+                       this.modules.filter.setHeaderFilterFocus(column);
+               } else {
+                       console.warn("Column Filter Focus Error - No matching column found:", field);
+                       return false;
+               }
+       }
+};
+
+Tabulator.prototype.getHeaderFilterValue = function (field) {
+       if (this.modExists("filter", true)) {
+               var column = this.columnManager.findColumn(field);
+
+               if (column) {
+                       return this.modules.filter.getHeaderFilterValue(column);
+               } else {
+                       console.warn("Column Filter Error - No matching column found:", field);
+               }
+       }
+};
+
+Tabulator.prototype.setHeaderFilterValue = function (field, value) {
+       if (this.modExists("filter", true)) {
+               var column = this.columnManager.findColumn(field);
+
+               if (column) {
+                       this.modules.filter.setHeaderFilterValue(column, value);
+               } else {
+                       console.warn("Column Filter Error - No matching column found:", field);
+                       return false;
+               }
+       }
+};
+
+Tabulator.prototype.getHeaderFilters = function () {
+       if (this.modExists("filter", true)) {
+               return this.modules.filter.getHeaderFilters();
+       }
+};
+
+//remove filter from array
+Tabulator.prototype.removeFilter = function (field, type, value) {
+       if (this.modExists("filter", true)) {
+               this.modules.filter.removeFilter(field, type, value);
+               this.rowManager.filterRefresh();
+       }
+};
+
+//clear filters
+Tabulator.prototype.clearFilter = function (all) {
+       if (this.modExists("filter", true)) {
+               this.modules.filter.clearFilter(all);
+               this.rowManager.filterRefresh();
+       }
+};
+
+//clear header filters
+Tabulator.prototype.clearHeaderFilter = function () {
+       if (this.modExists("filter", true)) {
+               this.modules.filter.clearHeaderFilter();
+               this.rowManager.filterRefresh();
+       }
+};
+
+///////////////////// select ////////////////////
+Tabulator.prototype.selectRow = function (rows) {
+       if (this.modExists("selectRow", true)) {
+               if (rows === true) {
+                       console.warn("passing a boolean to the selectRowselectRow function is deprecated, you should now pass the string 'active'");
+                       rows = "active";
+               }
+               this.modules.selectRow.selectRows(rows);
+       }
+};
+
+Tabulator.prototype.deselectRow = function (rows) {
+       if (this.modExists("selectRow", true)) {
+               this.modules.selectRow.deselectRows(rows);
+       }
+};
+
+Tabulator.prototype.toggleSelectRow = function (row) {
+       if (this.modExists("selectRow", true)) {
+               this.modules.selectRow.toggleRow(row);
+       }
+};
+
+Tabulator.prototype.getSelectedRows = function () {
+       if (this.modExists("selectRow", true)) {
+               return this.modules.selectRow.getSelectedRows();
+       }
+};
+
+Tabulator.prototype.getSelectedData = function () {
+       if (this.modExists("selectRow", true)) {
+               return this.modules.selectRow.getSelectedData();
+       }
+};
+
+///////////////////// validation  ////////////////////
+Tabulator.prototype.getInvalidCells = function () {
+       if (this.modExists("validate", true)) {
+               return this.modules.validate.getInvalidCells();
+       }
+};
+
+Tabulator.prototype.clearCellValidation = function (cells) {
+       var _this31 = this;
+
+       if (this.modExists("validate", true)) {
+
+               if (!cells) {
+                       cells = this.modules.validate.getInvalidCells();
+               }
+
+               if (!Array.isArray(cells)) {
+                       cells = [cells];
+               }
+
+               cells.forEach(function (cell) {
+                       _this31.modules.validate.clearValidation(cell._getSelf());
+               });
+       }
+};
+
+Tabulator.prototype.validate = function (cells) {
+       var output = [];
+
+       //clear row data
+       this.rowManager.rows.forEach(function (row) {
+               var valid = row.validate();
+
+               if (valid !== true) {
+                       output = output.concat(valid);
+               }
+       });
+
+       return output.length ? output : true;
+};
+
+//////////// Pagination Functions  ////////////
+
+Tabulator.prototype.setMaxPage = function (max) {
+       if (this.options.pagination && this.modExists("page")) {
+               this.modules.page.setMaxPage(max);
+       } else {
+               return false;
+       }
+};
+
+Tabulator.prototype.setPage = function (page) {
+       if (this.options.pagination && this.modExists("page")) {
+               return this.modules.page.setPage(page);
+       } else {
+               return new Promise(function (resolve, reject) {
+                       reject();
+               });
+       }
+};
+
+Tabulator.prototype.setPageToRow = function (row) {
+       var _this32 = this;
+
+       return new Promise(function (resolve, reject) {
+               if (_this32.options.pagination && _this32.modExists("page")) {
+                       row = _this32.rowManager.findRow(row);
+
+                       if (row) {
+                               _this32.modules.page.setPageToRow(row).then(function () {
+                                       resolve();
+                               }).catch(function () {
+                                       reject();
+                               });
+                       } else {
+                               reject();
+                       }
+               } else {
+                       reject();
+               }
+       });
+};
+
+Tabulator.prototype.setPageSize = function (size) {
+       if (this.options.pagination && this.modExists("page")) {
+               this.modules.page.setPageSize(size);
+               this.modules.page.setPage(1).then(function () {}).catch(function () {});
+       } else {
+               return false;
+       }
+};
+
+Tabulator.prototype.getPageSize = function () {
+       if (this.options.pagination && this.modExists("page", true)) {
+               return this.modules.page.getPageSize();
+       }
+};
+
+Tabulator.prototype.previousPage = function () {
+       if (this.options.pagination && this.modExists("page")) {
+               this.modules.page.previousPage();
+       } else {
+               return false;
+       }
+};
+
+Tabulator.prototype.nextPage = function () {
+       if (this.options.pagination && this.modExists("page")) {
+               this.modules.page.nextPage();
+       } else {
+               return false;
+       }
+};
+
+Tabulator.prototype.getPage = function () {
+       if (this.options.pagination && this.modExists("page")) {
+               return this.modules.page.getPage();
+       } else {
+               return false;
+       }
+};
+
+Tabulator.prototype.getPageMax = function () {
+       if (this.options.pagination && this.modExists("page")) {
+               return this.modules.page.getPageMax();
+       } else {
+               return false;
+       }
+};
+
+///////////////// Grouping Functions ///////////////
+
+Tabulator.prototype.setGroupBy = function (groups) {
+       if (this.modExists("groupRows", true)) {
+               this.options.groupBy = groups;
+               this.modules.groupRows.initialize();
+               this.rowManager.refreshActiveData("display");
+
+               if (this.options.persistence && this.modExists("persistence", true) && this.modules.persistence.config.group) {
+                       this.modules.persistence.save("group");
+               }
+       } else {
+               return false;
+       }
+};
+
+Tabulator.prototype.setGroupStartOpen = function (values) {
+       if (this.modExists("groupRows", true)) {
+               this.options.groupStartOpen = values;
+               this.modules.groupRows.initialize();
+               if (this.options.groupBy) {
+                       this.rowManager.refreshActiveData("group");
+
+                       if (this.options.persistence && this.modExists("persistence", true) && this.modules.persistence.config.group) {
+                               this.modules.persistence.save("group");
+                       }
+               } else {
+                       console.warn("Grouping Update - cant refresh view, no groups have been set");
+               }
+       } else {
+               return false;
+       }
+};
+
+Tabulator.prototype.setGroupHeader = function (values) {
+       if (this.modExists("groupRows", true)) {
+               this.options.groupHeader = values;
+               this.modules.groupRows.initialize();
+               if (this.options.groupBy) {
+                       this.rowManager.refreshActiveData("group");
+
+                       if (this.options.persistence && this.modExists("persistence", true) && this.modules.persistence.config.group) {
+                               this.modules.persistence.save("group");
+                       }
+               } else {
+                       console.warn("Grouping Update - cant refresh view, no groups have been set");
+               }
+       } else {
+               return false;
+       }
+};
+
+Tabulator.prototype.getGroups = function (values) {
+       if (this.modExists("groupRows", true)) {
+               return this.modules.groupRows.getGroups(true);
+       } else {
+               return false;
+       }
+};
+
+// get grouped table data in the same format as getData()
+Tabulator.prototype.getGroupedData = function () {
+       if (this.modExists("groupRows", true)) {
+               return this.options.groupBy ? this.modules.groupRows.getGroupedData() : this.getData();
+       }
+};
+
+Tabulator.prototype.getEditedCells = function () {
+       if (this.modExists("edit", true)) {
+               return this.modules.edit.getEditedCells();
+       }
+};
+
+Tabulator.prototype.clearCellEdited = function (cells) {
+       var _this33 = this;
+
+       if (this.modExists("edit", true)) {
+
+               if (!cells) {
+                       cells = this.modules.edit.getEditedCells();
+               }
+
+               if (!Array.isArray(cells)) {
+                       cells = [cells];
+               }
+
+               cells.forEach(function (cell) {
+                       _this33.modules.edit.clearEdited(cell._getSelf());
+               });
+       }
+};
+
+///////////////// Column Calculation Functions ///////////////
+Tabulator.prototype.getCalcResults = function () {
+       if (this.modExists("columnCalcs", true)) {
+               return this.modules.columnCalcs.getResults();
+       } else {
+               return false;
+       }
+};
+
+Tabulator.prototype.recalc = function () {
+       if (this.modExists("columnCalcs", true)) {
+               this.modules.columnCalcs.recalcAll(this.rowManager.activeRows);
+       }
+};
+
+/////////////// Navigation Management //////////////
+
+Tabulator.prototype.navigatePrev = function () {
+       var cell = false;
+
+       if (this.modExists("edit", true)) {
+               cell = this.modules.edit.currentCell;
+
+               if (cell) {
+                       return cell.nav().prev();
+               }
+       }
+
+       return false;
+};
+
+Tabulator.prototype.navigateNext = function () {
+       var cell = false;
+
+       if (this.modExists("edit", true)) {
+               cell = this.modules.edit.currentCell;
+
+               if (cell) {
+                       return cell.nav().next();
+               }
+       }
+
+       return false;
+};
+
+Tabulator.prototype.navigateLeft = function () {
+       var cell = false;
+
+       if (this.modExists("edit", true)) {
+               cell = this.modules.edit.currentCell;
+
+               if (cell) {
+                       e.preventDefault();
+                       return cell.nav().left();
+               }
+       }
+
+       return false;
+};
+
+Tabulator.prototype.navigateRight = function () {
+       var cell = false;
+
+       if (this.modExists("edit", true)) {
+               cell = this.modules.edit.currentCell;
+
+               if (cell) {
+                       e.preventDefault();
+                       return cell.nav().right();
+               }
+       }
+
+       return false;
+};
+
+Tabulator.prototype.navigateUp = function () {
+       var cell = false;
+
+       if (this.modExists("edit", true)) {
+               cell = this.modules.edit.currentCell;
+
+               if (cell) {
+                       e.preventDefault();
+                       return cell.nav().up();
+               }
+       }
+
+       return false;
+};
+
+Tabulator.prototype.navigateDown = function () {
+       var cell = false;
+
+       if (this.modExists("edit", true)) {
+               cell = this.modules.edit.currentCell;
+
+               if (cell) {
+                       e.preventDefault();
+                       return cell.nav().down();
+               }
+       }
+
+       return false;
+};
+
+/////////////// History Management //////////////
+Tabulator.prototype.undo = function () {
+       if (this.options.history && this.modExists("history", true)) {
+               return this.modules.history.undo();
+       } else {
+               return false;
+       }
+};
+
+Tabulator.prototype.redo = function () {
+       if (this.options.history && this.modExists("history", true)) {
+               return this.modules.history.redo();
+       } else {
+               return false;
+       }
+};
+
+Tabulator.prototype.getHistoryUndoSize = function () {
+       if (this.options.history && this.modExists("history", true)) {
+               return this.modules.history.getHistoryUndoSize();
+       } else {
+               return false;
+       }
+};
+
+Tabulator.prototype.getHistoryRedoSize = function () {
+       if (this.options.history && this.modExists("history", true)) {
+               return this.modules.history.getHistoryRedoSize();
+       } else {
+               return false;
+       }
+};
+
+/////////////// Download Management //////////////
+
+Tabulator.prototype.download = function (type, filename, options, active) {
+       if (this.modExists("download", true)) {
+               this.modules.download.download(type, filename, options, active);
+       }
+};
+
+Tabulator.prototype.downloadToTab = function (type, filename, options, active) {
+       if (this.modExists("download", true)) {
+               this.modules.download.download(type, filename, options, active, true);
+       }
+};
+
+/////////// Inter Table Communications ///////////
+
+Tabulator.prototype.tableComms = function (table, module, action, data) {
+       this.modules.comms.receive(table, module, action, data);
+};
+
+////////////// Extension Management //////////////
+
+//object to hold module
+Tabulator.prototype.moduleBindings = {};
+
+//extend module
+Tabulator.prototype.extendModule = function (name, property, values) {
+
+       if (Tabulator.prototype.moduleBindings[name]) {
+               var source = Tabulator.prototype.moduleBindings[name].prototype[property];
+
+               if (source) {
+                       if ((typeof values === 'undefined' ? 'undefined' : _typeof(values)) == "object") {
+                               for (var key in values) {
+                                       source[key] = values[key];
+                               }
+                       } else {
+                               console.warn("Module Error - Invalid value type, it must be an object");
+                       }
+               } else {
+                       console.warn("Module Error - property does not exist:", property);
+               }
+       } else {
+               console.warn("Module Error - module does not exist:", name);
+       }
+};
+
+//add module to tabulator
+Tabulator.prototype.registerModule = function (name, module) {
+       var self = this;
+       Tabulator.prototype.moduleBindings[name] = module;
+};
+
+//ensure that module are bound to instantiated function
+Tabulator.prototype.bindModules = function () {
+       this.modules = {};
+
+       for (var name in Tabulator.prototype.moduleBindings) {
+               this.modules[name] = new Tabulator.prototype.moduleBindings[name](this);
+       }
+};
+
+//Check for module
+Tabulator.prototype.modExists = function (plugin, required) {
+       if (this.modules[plugin]) {
+               return true;
+       } else {
+               if (required) {
+                       console.error("Tabulator Module Not Installed: " + plugin);
+               }
+               return false;
+       }
+};
+
+Tabulator.prototype.helpers = {
+
+       elVisible: function elVisible(el) {
+               return !(el.offsetWidth <= 0 && el.offsetHeight <= 0);
+       },
+
+       elOffset: function elOffset(el) {
+               var box = el.getBoundingClientRect();
+
+               return {
+                       top: box.top + window.pageYOffset - document.documentElement.clientTop,
+                       left: box.left + window.pageXOffset - document.documentElement.clientLeft
+               };
+       },
+
+       deepClone: function deepClone(obj) {
+               var clone = Array.isArray(obj) ? [] : {};
+
+               for (var i in obj) {
+                       if (obj[i] != null && _typeof(obj[i]) === "object") {
+                               if (obj[i] instanceof Date) {
+                                       clone[i] = new Date(obj[i]);
+                               } else {
+                                       clone[i] = this.deepClone(obj[i]);
+                               }
+                       } else {
+                               clone[i] = obj[i];
+                       }
+               }
+               return clone;
+       }
+};
+
+Tabulator.prototype.comms = {
+       tables: [],
+       register: function register(table) {
+               Tabulator.prototype.comms.tables.push(table);
+       },
+       deregister: function deregister(table) {
+               var index = Tabulator.prototype.comms.tables.indexOf(table);
+
+               if (index > -1) {
+                       Tabulator.prototype.comms.tables.splice(index, 1);
+               }
+       },
+       lookupTable: function lookupTable(query, silent) {
+               var results = [],
+                   matches,
+                   match;
+
+               if (typeof query === "string") {
+                       matches = document.querySelectorAll(query);
+
+                       if (matches.length) {
+                               for (var i = 0; i < matches.length; i++) {
+                                       match = Tabulator.prototype.comms.matchElement(matches[i]);
+
+                                       if (match) {
+                                               results.push(match);
+                                       }
+                               }
+                       }
+               } else if (typeof HTMLElement !== "undefined" && query instanceof HTMLElement || query instanceof Tabulator) {
+                       match = Tabulator.prototype.comms.matchElement(query);
+
+                       if (match) {
+                               results.push(match);
+                       }
+               } else if (Array.isArray(query)) {
+                       query.forEach(function (item) {
+                               results = results.concat(Tabulator.prototype.comms.lookupTable(item));
+                       });
+               } else {
+                       if (!silent) {
+                               console.warn("Table Connection Error - Invalid Selector", query);
+                       }
+               }
+
+               return results;
+       },
+       matchElement: function matchElement(element) {
+               return Tabulator.prototype.comms.tables.find(function (table) {
+                       return element instanceof Tabulator ? table === element : table.element === element;
+               });
+       }
+};
+
+Tabulator.prototype.findTable = function (query) {
+       var results = Tabulator.prototype.comms.lookupTable(query, true);
+       return Array.isArray(results) && !results.length ? false : results;
+};
+
+var Layout = function Layout(table) {
+
+       this.table = table;
+
+       this.mode = null;
+};
+
+//initialize layout system
+
+Layout.prototype.initialize = function (layout) {
+
+       if (this.modes[layout]) {
+
+               this.mode = layout;
+       } else {
+
+               console.warn("Layout Error - invalid mode set, defaulting to 'fitData' : " + layout);
+
+               this.mode = 'fitData';
+       }
+
+       this.table.element.setAttribute("tabulator-layout", this.mode);
+};
+
+Layout.prototype.getMode = function () {
+
+       return this.mode;
+};
+
+//trigger table layout
+
+Layout.prototype.layout = function () {
+
+       this.modes[this.mode].call(this, this.table.columnManager.columnsByIndex);
+};
+
+//layout render functions
+
+Layout.prototype.modes = {
+
+       //resize columns to fit data they contain
+
+       "fitData": function fitData(columns) {
+
+               columns.forEach(function (column) {
+
+                       column.reinitializeWidth();
+               });
+
+               if (this.table.options.responsiveLayout && this.table.modExists("responsiveLayout", true)) {
+
+                       this.table.modules.responsiveLayout.update();
+               }
+       },
+
+       //resize columns to fit data they contain and stretch row to fill table
+
+       "fitDataFill": function fitDataFill(columns) {
+
+               columns.forEach(function (column) {
+
+                       column.reinitializeWidth();
+               });
+
+               if (this.table.options.responsiveLayout && this.table.modExists("responsiveLayout", true)) {
+
+                       this.table.modules.responsiveLayout.update();
+               }
+       },
+
+       //resize columns to fit data they contain
+
+       "fitDataTable": function fitDataTable(columns) {
+
+               columns.forEach(function (column) {
+
+                       column.reinitializeWidth();
+               });
+
+               if (this.table.options.responsiveLayout && this.table.modExists("responsiveLayout", true)) {
+
+                       this.table.modules.responsiveLayout.update();
+               }
+       },
+
+       //resize columns to fit data the contain and stretch last column to fill table
+
+       "fitDataStretch": function fitDataStretch(columns) {
+               var _this34 = this;
+
+               var colsWidth = 0,
+                   tableWidth = this.table.rowManager.element.clientWidth,
+                   gap = 0,
+                   lastCol = false;
+
+               columns.forEach(function (column, i) {
+
+                       if (!column.widthFixed) {
+
+                               column.reinitializeWidth();
+                       }
+
+                       if (_this34.table.options.responsiveLayout ? column.modules.responsive.visible : column.visible) {
+
+                               lastCol = column;
+                       }
+
+                       if (column.visible) {
+
+                               colsWidth += column.getWidth();
+                       }
+               });
+
+               if (lastCol) {
+
+                       gap = tableWidth - colsWidth + lastCol.getWidth();
+
+                       if (this.table.options.responsiveLayout && this.table.modExists("responsiveLayout", true)) {
+
+                               lastCol.setWidth(0);
+
+                               this.table.modules.responsiveLayout.update();
+                       }
+
+                       if (gap > 0) {
+
+                               lastCol.setWidth(gap);
+                       } else {
+
+                               lastCol.reinitializeWidth();
+                       }
+               } else {
+
+                       if (this.table.options.responsiveLayout && this.table.modExists("responsiveLayout", true)) {
+
+                               this.table.modules.responsiveLayout.update();
+                       }
+               }
+       },
+
+       //resize columns to fit
+
+       "fitColumns": function fitColumns(columns) {
+
+               var self = this;
+
+               var totalWidth = self.table.element.clientWidth; //table element width
+
+               var fixedWidth = 0; //total width of columns with a defined width
+
+               var flexWidth = 0; //total width available to flexible columns
+
+               var flexGrowUnits = 0; //total number of widthGrow blocks accross all columns
+
+               var flexColWidth = 0; //desired width of flexible columns
+
+               var flexColumns = []; //array of flexible width columns
+
+               var fixedShrinkColumns = []; //array of fixed width columns that can shrink
+
+               var flexShrinkUnits = 0; //total number of widthShrink blocks accross all columns
+
+               var overflowWidth = 0; //horizontal overflow width
+
+               var gapFill = 0; //number of pixels to be added to final column to close and half pixel gaps
+
+
+               function calcWidth(width) {
+
+                       var colWidth;
+
+                       if (typeof width == "string") {
+
+                               if (width.indexOf("%") > -1) {
+
+                                       colWidth = totalWidth / 100 * parseInt(width);
+                               } else {
+
+                                       colWidth = parseInt(width);
+                               }
+                       } else {
+
+                               colWidth = width;
+                       }
+
+                       return colWidth;
+               }
+
+               //ensure columns resize to take up the correct amount of space
+
+               function scaleColumns(columns, freeSpace, colWidth, shrinkCols) {
+
+                       var oversizeCols = [],
+                           oversizeSpace = 0,
+                           remainingSpace = 0,
+                           nextColWidth = 0,
+                           gap = 0,
+                           changeUnits = 0,
+                           undersizeCols = [];
+
+                       function calcGrow(col) {
+
+                               return colWidth * (col.column.definition.widthGrow || 1);
+                       }
+
+                       function calcShrink(col) {
+
+                               return calcWidth(col.width) - colWidth * (col.column.definition.widthShrink || 0);
+                       }
+
+                       columns.forEach(function (col, i) {
+
+                               var width = shrinkCols ? calcShrink(col) : calcGrow(col);
+
+                               if (col.column.minWidth >= width) {
+
+                                       oversizeCols.push(col);
+                               } else {
+
+                                       undersizeCols.push(col);
+
+                                       changeUnits += shrinkCols ? col.column.definition.widthShrink || 1 : col.column.definition.widthGrow || 1;
+                               }
+                       });
+
+                       if (oversizeCols.length) {
+
+                               oversizeCols.forEach(function (col) {
+
+                                       oversizeSpace += shrinkCols ? col.width - col.column.minWidth : col.column.minWidth;
+
+                                       col.width = col.column.minWidth;
+                               });
+
+                               remainingSpace = freeSpace - oversizeSpace;
+
+                               nextColWidth = changeUnits ? Math.floor(remainingSpace / changeUnits) : remainingSpace;
+
+                               gap = remainingSpace - nextColWidth * changeUnits;
+
+                               gap += scaleColumns(undersizeCols, remainingSpace, nextColWidth, shrinkCols);
+                       } else {
+
+                               gap = changeUnits ? freeSpace - Math.floor(freeSpace / changeUnits) * changeUnits : freeSpace;
+
+                               undersizeCols.forEach(function (column) {
+
+                                       column.width = shrinkCols ? calcShrink(column) : calcGrow(column);
+                               });
+                       }
+
+                       return gap;
+               }
+
+               if (this.table.options.responsiveLayout && this.table.modExists("responsiveLayout", true)) {
+
+                       this.table.modules.responsiveLayout.update();
+               }
+
+               //adjust for vertical scrollbar if present
+
+               if (this.table.rowManager.element.scrollHeight > this.table.rowManager.element.clientHeight) {
+
+                       totalWidth -= this.table.rowManager.element.offsetWidth - this.table.rowManager.element.clientWidth;
+               }
+
+               columns.forEach(function (column) {
+
+                       var width, minWidth, colWidth;
+
+                       if (column.visible) {
+
+                               width = column.definition.width;
+
+                               minWidth = parseInt(column.minWidth);
+
+                               if (width) {
+
+                                       colWidth = calcWidth(width);
+
+                                       fixedWidth += colWidth > minWidth ? colWidth : minWidth;
+
+                                       if (column.definition.widthShrink) {
+
+                                               fixedShrinkColumns.push({
+
+                                                       column: column,
+
+                                                       width: colWidth > minWidth ? colWidth : minWidth
+
+                                               });
+
+                                               flexShrinkUnits += column.definition.widthShrink;
+                                       }
+                               } else {
+
+                                       flexColumns.push({
+
+                                               column: column,
+
+                                               width: 0
+
+                                       });
+
+                                       flexGrowUnits += column.definition.widthGrow || 1;
+                               }
+                       }
+               });
+
+               //calculate available space
+
+               flexWidth = totalWidth - fixedWidth;
+
+               //calculate correct column size
+
+               flexColWidth = Math.floor(flexWidth / flexGrowUnits);
+
+               //generate column widths
+
+               var gapFill = scaleColumns(flexColumns, flexWidth, flexColWidth, false);
+
+               //increase width of last column to account for rounding errors
+
+               if (flexColumns.length && gapFill > 0) {
+
+                       flexColumns[flexColumns.length - 1].width += +gapFill;
+               }
+
+               //caculate space for columns to be shrunk into
+
+               flexColumns.forEach(function (col) {
+
+                       flexWidth -= col.width;
+               });
+
+               overflowWidth = Math.abs(gapFill) + flexWidth;
+
+               //shrink oversize columns if there is no available space
+
+               if (overflowWidth > 0 && flexShrinkUnits) {
+
+                       gapFill = scaleColumns(fixedShrinkColumns, overflowWidth, Math.floor(overflowWidth / flexShrinkUnits), true);
+               }
+
+               //decrease width of last column to account for rounding errors
+
+               if (fixedShrinkColumns.length) {
+
+                       fixedShrinkColumns[fixedShrinkColumns.length - 1].width -= gapFill;
+               }
+
+               flexColumns.forEach(function (col) {
+
+                       col.column.setWidth(col.width);
+               });
+
+               fixedShrinkColumns.forEach(function (col) {
+
+                       col.column.setWidth(col.width);
+               });
+       }
+
+};
+
+Tabulator.prototype.registerModule("layout", Layout);
+var Localize = function Localize(table) {
+       this.table = table; //hold Tabulator object
+       this.locale = "default"; //current locale
+       this.lang = false; //current language
+       this.bindings = {}; //update events to call when locale is changed
+};
+
+//set header placehoder
+Localize.prototype.setHeaderFilterPlaceholder = function (placeholder) {
+       this.langs.default.headerFilters.default = placeholder;
+};
+
+//set header filter placeholder by column
+Localize.prototype.setHeaderFilterColumnPlaceholder = function (column, placeholder) {
+       this.langs.default.headerFilters.columns[column] = placeholder;
+
+       if (this.lang && !this.lang.headerFilters.columns[column]) {
+               this.lang.headerFilters.columns[column] = placeholder;
+       }
+};
+
+//setup a lang description object
+Localize.prototype.installLang = function (locale, lang) {
+       if (this.langs[locale]) {
+               this._setLangProp(this.langs[locale], lang);
+       } else {
+               this.langs[locale] = lang;
+       }
+};
+
+Localize.prototype._setLangProp = function (lang, values) {
+       for (var key in values) {
+               if (lang[key] && _typeof(lang[key]) == "object") {
+                       this._setLangProp(lang[key], values[key]);
+               } else {
+                       lang[key] = values[key];
+               }
+       }
+};
+
+//set current locale
+Localize.prototype.setLocale = function (desiredLocale) {
+       var self = this;
+
+       desiredLocale = desiredLocale || "default";
+
+       //fill in any matching languge values
+       function traverseLang(trans, path) {
+               for (var prop in trans) {
+
+                       if (_typeof(trans[prop]) == "object") {
+                               if (!path[prop]) {
+                                       path[prop] = {};
+                               }
+                               traverseLang(trans[prop], path[prop]);
+                       } else {
+                               path[prop] = trans[prop];
+                       }
+               }
+       }
+
+       //determing correct locale to load
+       if (desiredLocale === true && navigator.language) {
+               //get local from system
+               desiredLocale = navigator.language.toLowerCase();
+       }
+
+       if (desiredLocale) {
+
+               //if locale is not set, check for matching top level locale else use default
+               if (!self.langs[desiredLocale]) {
+                       var prefix = desiredLocale.split("-")[0];
+
+                       if (self.langs[prefix]) {
+                               console.warn("Localization Error - Exact matching locale not found, using closest match: ", desiredLocale, prefix);
+                               desiredLocale = prefix;
+                       } else {
+                               console.warn("Localization Error - Matching locale not found, using default: ", desiredLocale);
+                               desiredLocale = "default";
+                       }
+               }
+       }
+
+       self.locale = desiredLocale;
+
+       //load default lang template
+       self.lang = Tabulator.prototype.helpers.deepClone(self.langs.default || {});
+
+       if (desiredLocale != "default") {
+               traverseLang(self.langs[desiredLocale], self.lang);
+       }
+
+       self.table.options.localized.call(self.table, self.locale, self.lang);
+
+       self._executeBindings();
+};
+
+//get current locale
+Localize.prototype.getLocale = function (locale) {
+       return self.locale;
+};
+
+//get lang object for given local or current if none provided
+Localize.prototype.getLang = function (locale) {
+       return locale ? this.langs[locale] : this.lang;
+};
+
+//get text for current locale
+Localize.prototype.getText = function (path, value) {
+       var path = value ? path + "|" + value : path,
+           pathArray = path.split("|"),
+           text = this._getLangElement(pathArray, this.locale);
+
+       // if(text === false){
+       //      console.warn("Localization Error - Matching localized text not found for given path: ", path);
+       // }
+
+       return text || "";
+};
+
+//traverse langs object and find localized copy
+Localize.prototype._getLangElement = function (path, locale) {
+       var self = this;
+       var root = self.lang;
+
+       path.forEach(function (level) {
+               var rootPath;
+
+               if (root) {
+                       rootPath = root[level];
+
+                       if (typeof rootPath != "undefined") {
+                               root = rootPath;
+                       } else {
+                               root = false;
+                       }
+               }
+       });
+
+       return root;
+};
+
+//set update binding
+Localize.prototype.bind = function (path, callback) {
+       if (!this.bindings[path]) {
+               this.bindings[path] = [];
+       }
+
+       this.bindings[path].push(callback);
+
+       callback(this.getText(path), this.lang);
+};
+
+//itterate through bindings and trigger updates
+Localize.prototype._executeBindings = function () {
+       var self = this;
+
+       var _loop = function _loop(path) {
+               self.bindings[path].forEach(function (binding) {
+                       binding(self.getText(path), self.lang);
+               });
+       };
+
+       for (var path in self.bindings) {
+               _loop(path);
+       }
+};
+
+//Localized text listings
+Localize.prototype.langs = {
+       "default": { //hold default locale text
+               "groups": {
+                       "item": "item",
+                       "items": "items"
+               },
+               "columns": {},
+               "ajax": {
+                       "loading": "Loading",
+                       "error": "Error"
+               },
+               "pagination": {
+                       "page_size": "Page Size",
+                       "page_title": "Show Page",
+                       "first": "First",
+                       "first_title": "First Page",
+                       "last": "Last",
+                       "last_title": "Last Page",
+                       "prev": "Prev",
+                       "prev_title": "Prev Page",
+                       "next": "Next",
+                       "next_title": "Next Page",
+                       "all": "All"
+               },
+               "headerFilters": {
+                       "default": "filter column...",
+                       "columns": {}
+               }
+       }
+};
+
+Tabulator.prototype.registerModule("localize", Localize);
+var Comms = function Comms(table) {
+       this.table = table;
+};
+
+Comms.prototype.getConnections = function (selectors) {
+       var self = this,
+           connections = [],
+           connection;
+
+       connection = Tabulator.prototype.comms.lookupTable(selectors);
+
+       connection.forEach(function (con) {
+               if (self.table !== con) {
+                       connections.push(con);
+               }
+       });
+
+       return connections;
+};
+
+Comms.prototype.send = function (selectors, module, action, data) {
+       var self = this,
+           connections = this.getConnections(selectors);
+
+       connections.forEach(function (connection) {
+               connection.tableComms(self.table.element, module, action, data);
+       });
+
+       if (!connections.length && selectors) {
+               console.warn("Table Connection Error - No tables matching selector found", selectors);
+       }
+};
+
+Comms.prototype.receive = function (table, module, action, data) {
+       if (this.table.modExists(module)) {
+               return this.table.modules[module].commsReceived(table, action, data);
+       } else {
+               console.warn("Inter-table Comms Error - no such module:", module);
+       }
+};
+
+Tabulator.prototype.registerModule("comms", Comms);
\ No newline at end of file
diff --git a/admin/js/vendors/tabulator/js/tabulator_core.min.js b/admin/js/vendors/tabulator/js/tabulator_core.min.js
new file mode 100644 (file)
index 0000000..92522ab
--- /dev/null
@@ -0,0 +1,6 @@
+/* Tabulator v4.7.0 (c) Oliver Folkerd */
+"use strict";var _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t};Array.prototype.findIndex||Object.defineProperty(Array.prototype,"findIndex",{value:function(t){if(null==this)throw new TypeError('"this" is null or not defined');var e=Object(this),o=e.length>>>0;if("function"!=typeof t)throw new TypeError("predicate must be a function");for(var i=arguments[1],n=0;n<o;){var l=e[n];if(t.call(i,l,n,e))return n;n++}return-1}}),Array.prototype.find||Object.defineProperty(Array.prototype,"find",{value:function(t){if(null==this)throw new TypeError('"this" is null or not defined');var e=Object(this),o=e.length>>>0;if("function"!=typeof t)throw new TypeError("predicate must be a function");for(var i=arguments[1],n=0;n<o;){var l=e[n];if(t.call(i,l,n,e))return l;n++}}}),String.prototype.includes||(String.prototype.includes=function(t,e){if(t instanceof RegExp)throw TypeError("first argument must not be a RegExp");return void 0===e&&(e=0),-1!==this.indexOf(t,e)}),Array.prototype.includes||Object.defineProperty(Array.prototype,"includes",{value:function(t,e){if(null==this)throw new TypeError('"this" is null or not defined');var o=Object(this),i=o.length>>>0;if(0===i)return!1;for(var n=0|e,l=Math.max(n>=0?n:i-Math.abs(n),0);l<i;){if(function(t,e){return t===e||"number"==typeof t&&"number"==typeof e&&isNaN(t)&&isNaN(e)}(o[l],t))return!0;l++}return!1}}),"function"!=typeof Object.assign&&Object.defineProperty(Object,"assign",{value:function(t,e){if(null===t||void 0===t)throw new TypeError("Cannot convert undefined or null to object");for(var o=Object(t),i=1;i<arguments.length;i++){var n=arguments[i];if(null!==n&&void 0!==n)for(var l in n)Object.prototype.hasOwnProperty.call(n,l)&&(o[l]=n[l])}return o},writable:!0,configurable:!0});var ColumnManager=function(t){this.table=t,this.blockHozScrollEvent=!1,this.headersElement=this.createHeadersElement(),this.element=this.createHeaderElement(),this.rowManager=null,this.columns=[],this.columnsByIndex=[],this.columnsByField={},this.scrollLeft=0,this.element.insertBefore(this.headersElement,this.element.firstChild)};ColumnManager.prototype.createHeadersElement=function(){var t=document.createElement("div");return t.classList.add("tabulator-headers"),t},ColumnManager.prototype.createHeaderElement=function(){var t=document.createElement("div");return t.classList.add("tabulator-header"),this.table.options.headerVisible||t.classList.add("tabulator-header-hidden"),t},ColumnManager.prototype.initialize=function(){},ColumnManager.prototype.setRowManager=function(t){this.rowManager=t},ColumnManager.prototype.getElement=function(){return this.element},ColumnManager.prototype.getHeadersElement=function(){return this.headersElement},ColumnManager.prototype.scrollHorizontal=function(t){var e=0,o=this.element.scrollWidth-this.table.element.clientWidth;this.element.scrollLeft=t,t>o?(e=t-o,this.element.style.marginLeft=-e+"px"):this.element.style.marginLeft=0,this.scrollLeft=t,this.table.modExists("frozenColumns")&&this.table.modules.frozenColumns.scrollHorizontal()},ColumnManager.prototype.generateColumnsFromRowData=function(t){var e,o,i=[];if(t&&t.length){e=t[0];for(var n in e){var l={field:n,title:n},s=e[n];switch(void 0===s?"undefined":_typeof(s)){case"undefined":o="string";break;case"boolean":o="boolean";break;case"object":o=Array.isArray(s)?"array":"string";break;default:o=isNaN(s)||""===s?s.match(/((^[0-9]+[a-z]+)|(^[a-z]+[0-9]+))+$/i)?"alphanum":"string":"number"}l.sorter=o,i.push(l)}this.table.options.columns=i,this.setColumns(this.table.options.columns)}},ColumnManager.prototype.setColumns=function(t,e){for(var o=this;o.headersElement.firstChild;)o.headersElement.removeChild(o.headersElement.firstChild);o.columns=[],o.columnsByIndex=[],o.columnsByField={},o.table.modExists("frozenColumns")&&o.table.modules.frozenColumns.reset(),t.forEach(function(t,e){o._addColumn(t)}),o._reIndexColumns(),o.table.options.responsiveLayout&&o.table.modExists("responsiveLayout",!0)&&o.table.modules.responsiveLayout.initialize(),o.redraw(!0)},ColumnManager.prototype._addColumn=function(t,e,o){var i=new Column(t,this),n=i.getElement(),l=o?this.findColumnIndex(o):o;if(o&&l>-1){var s=this.columns.indexOf(o.getTopColumn()),a=o.getElement();e?(this.columns.splice(s,0,i),a.parentNode.insertBefore(n,a)):(this.columns.splice(s+1,0,i),a.parentNode.insertBefore(n,a.nextSibling))}else e?(this.columns.unshift(i),this.headersElement.insertBefore(i.getElement(),this.headersElement.firstChild)):(this.columns.push(i),this.headersElement.appendChild(i.getElement())),i.columnRendered();return i},ColumnManager.prototype.registerColumnField=function(t){t.definition.field&&(this.columnsByField[t.definition.field]=t)},ColumnManager.prototype.registerColumnPosition=function(t){this.columnsByIndex.push(t)},ColumnManager.prototype._reIndexColumns=function(){this.columnsByIndex=[],this.columns.forEach(function(t){t.reRegisterPosition()})},ColumnManager.prototype._verticalAlignHeaders=function(){var t=this,e=0;t.columns.forEach(function(t){var o;t.clearVerticalAlign(),(o=t.getHeight())>e&&(e=o)}),t.columns.forEach(function(o){o.verticalAlign(t.table.options.columnHeaderVertAlign,e)}),t.rowManager.adjustTableSize()},ColumnManager.prototype.findColumn=function(t){var e=this;if("object"!=(void 0===t?"undefined":_typeof(t)))return this.columnsByField[t]||!1;if(t instanceof Column)return t;if(t instanceof ColumnComponent)return t._getSelf()||!1;if("undefined"!=typeof HTMLElement&&t instanceof HTMLElement){return e.columns.find(function(e){return e.element===t})||!1}return!1},ColumnManager.prototype.getColumnByField=function(t){return this.columnsByField[t]},ColumnManager.prototype.getColumnsByFieldRoot=function(t){var e=this,o=[];return Object.keys(this.columnsByField).forEach(function(i){i.split(".")[0]===t&&o.push(e.columnsByField[i])}),o},ColumnManager.prototype.getColumnByIndex=function(t){return this.columnsByIndex[t]},ColumnManager.prototype.getFirstVisibileColumn=function(t){var t=this.columnsByIndex.findIndex(function(t){return t.visible});return t>-1&&this.columnsByIndex[t]},ColumnManager.prototype.getColumns=function(){return this.columns},ColumnManager.prototype.findColumnIndex=function(t){return this.columnsByIndex.findIndex(function(e){return t===e})},ColumnManager.prototype.getRealColumns=function(){return this.columnsByIndex},ColumnManager.prototype.traverse=function(t){this.columnsByIndex.forEach(function(e,o){t(e,o)})},ColumnManager.prototype.getDefinitions=function(t){var e=this,o=[];return e.columnsByIndex.forEach(function(e){(!t||t&&e.visible)&&o.push(e.getDefinition())}),o},ColumnManager.prototype.getDefinitionTree=function(){var t=this,e=[];return t.columns.forEach(function(t){e.push(t.getDefinition(!0))}),e},ColumnManager.prototype.getComponents=function(t){var e=this,o=[];return(t?e.columns:e.columnsByIndex).forEach(function(t){o.push(t.getComponent())}),o},ColumnManager.prototype.getWidth=function(){var t=0;return this.columnsByIndex.forEach(function(e){e.visible&&(t+=e.getWidth())}),t},ColumnManager.prototype.moveColumn=function(t,e,o){this.moveColumnActual(t,e,o),this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.initialize(),this.table.modExists("columnCalcs")&&this.table.modules.columnCalcs.recalc(this.table.rowManager.activeRows),e.element.parentNode.insertBefore(t.element,e.element),o&&e.element.parentNode.insertBefore(e.element,t.element),this._verticalAlignHeaders(),this.table.rowManager.reinitialize()},ColumnManager.prototype.moveColumnActual=function(t,e,o){t.parent.isGroup?this._moveColumnInArray(t.parent.columns,t,e,o):this._moveColumnInArray(this.columns,t,e,o),this._moveColumnInArray(this.columnsByIndex,t,e,o,!0),this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.initialize(),this.table.options.columnMoved&&this.table.options.columnMoved.call(this.table,t.getComponent(),this.table.columnManager.getComponents()),this.table.options.persistence&&this.table.modExists("persistence",!0)&&this.table.modules.persistence.config.columns&&this.table.modules.persistence.save("columns")},ColumnManager.prototype._moveColumnInArray=function(t,e,o,i,n){var l,s=t.indexOf(e);s>-1&&(t.splice(s,1),l=t.indexOf(o),l>-1?i&&(l+=1):l=s,t.splice(l,0,e),n&&this.table.rowManager.rows.forEach(function(t){if(t.cells.length){var e=t.cells.splice(s,1)[0];t.cells.splice(l,0,e)}}))},ColumnManager.prototype.scrollToColumn=function(t,e,o){var i=this,n=0,l=0,s=0,a=t.getElement();return new Promise(function(r,u){if(void 0===e&&(e=i.table.options.scrollToColumnPosition),void 0===o&&(o=i.table.options.scrollToColumnIfVisible),t.visible){switch(e){case"middle":case"center":s=-i.element.clientWidth/2;break;case"right":s=a.clientWidth-i.headersElement.clientWidth}if(!o&&(l=a.offsetLeft)>0&&l+a.offsetWidth<i.element.clientWidth)return!1;n=a.offsetLeft+i.element.scrollLeft+s,n=Math.max(Math.min(n,i.table.rowManager.element.scrollWidth-i.table.rowManager.element.clientWidth),0),i.table.rowManager.scrollHorizontal(n),i.scrollHorizontal(n),r()}else console.warn("Scroll Error - Column not visible"),u("Scroll Error - Column not visible")})},ColumnManager.prototype.generateCells=function(t){var e=this,o=[];return e.columnsByIndex.forEach(function(e){o.push(e.generateCell(t))}),o},ColumnManager.prototype.getFlexBaseWidth=function(){var t=this,e=t.table.element.clientWidth,o=0;return t.rowManager.element.scrollHeight>t.rowManager.element.clientHeight&&(e-=t.rowManager.element.offsetWidth-t.rowManager.element.clientWidth),this.columnsByIndex.forEach(function(i){var n,l,s;i.visible&&(n=i.definition.width||0,l=void 0===i.minWidth?t.table.options.columnMinWidth:parseInt(i.minWidth),s="string"==typeof n?n.indexOf("%")>-1?e/100*parseInt(n):parseInt(n):n,o+=s>l?s:l)}),o},ColumnManager.prototype.addColumn=function(t,e,o){var i=this;return new Promise(function(n,l){var s=i._addColumn(t,e,o);i._reIndexColumns(),i.table.options.responsiveLayout&&i.table.modExists("responsiveLayout",!0)&&i.table.modules.responsiveLayout.initialize(),i.table.modExists("columnCalcs")&&i.table.modules.columnCalcs.recalc(i.table.rowManager.activeRows),i.redraw(),"fitColumns"!=i.table.modules.layout.getMode()&&s.reinitializeWidth(),i._verticalAlignHeaders(),i.table.rowManager.reinitialize(),n(s)})},ColumnManager.prototype.deregisterColumn=function(t){var e,o=t.getField();o&&delete this.columnsByField[o],e=this.columnsByIndex.indexOf(t),e>-1&&this.columnsByIndex.splice(e,1),e=this.columns.indexOf(t),e>-1&&this.columns.splice(e,1),this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.initialize(),this.redraw()},ColumnManager.prototype.redraw=function(t){t&&(Tabulator.prototype.helpers.elVisible(this.element)&&this._verticalAlignHeaders(),this.table.rowManager.resetScroll(),this.table.rowManager.reinitialize()),["fitColumns","fitDataStretch"].indexOf(this.table.modules.layout.getMode())>-1?this.table.modules.layout.layout():t?this.table.modules.layout.layout():this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.update(),this.table.modExists("frozenColumns")&&this.table.modules.frozenColumns.layout(),this.table.modExists("columnCalcs")&&this.table.modules.columnCalcs.recalc(this.table.rowManager.activeRows),t&&(this.table.options.persistence&&this.table.modExists("persistence",!0)&&this.table.modules.persistence.config.columns&&this.table.modules.persistence.save("columns"),this.table.modExists("columnCalcs")&&this.table.modules.columnCalcs.redraw()),this.table.footerManager.redraw()};var ColumnComponent=function(t){this._column=t,this.type="ColumnComponent"};ColumnComponent.prototype.getElement=function(){return this._column.getElement()},ColumnComponent.prototype.getDefinition=function(){return this._column.getDefinition()},ColumnComponent.prototype.getField=function(){return this._column.getField()},ColumnComponent.prototype.getCells=function(){var t=[];return this._column.cells.forEach(function(e){t.push(e.getComponent())}),t},ColumnComponent.prototype.getVisibility=function(){return console.warn("getVisibility function is deprecated, you should now use the isVisible function"),this._column.visible},ColumnComponent.prototype.isVisible=function(){return this._column.visible},ColumnComponent.prototype.show=function(){this._column.isGroup?this._column.columns.forEach(function(t){t.show()}):this._column.show()},ColumnComponent.prototype.hide=function(){this._column.isGroup?this._column.columns.forEach(function(t){t.hide()}):this._column.hide()},ColumnComponent.prototype.toggle=function(){this._column.visible?this.hide():this.show()},ColumnComponent.prototype.delete=function(){return this._column.delete()},ColumnComponent.prototype.getSubColumns=function(){var t=[];return this._column.columns.length&&this._column.columns.forEach(function(e){t.push(e.getComponent())}),t},ColumnComponent.prototype.getParentColumn=function(){return this._column.parent instanceof Column&&this._column.parent.getComponent()},ColumnComponent.prototype._getSelf=function(){return this._column},ColumnComponent.prototype.scrollTo=function(){return this._column.table.columnManager.scrollToColumn(this._column)},ColumnComponent.prototype.getTable=function(){return this._column.table},ColumnComponent.prototype.headerFilterFocus=function(){this._column.table.modExists("filter",!0)&&this._column.table.modules.filter.setHeaderFilterFocus(this._column)},ColumnComponent.prototype.reloadHeaderFilter=function(){this._column.table.modExists("filter",!0)&&this._column.table.modules.filter.reloadHeaderFilter(this._column)},ColumnComponent.prototype.getHeaderFilterValue=function(){if(this._column.table.modExists("filter",!0))return this._column.table.modules.filter.getHeaderFilterValue(this._column)},ColumnComponent.prototype.setHeaderFilterValue=function(t){this._column.table.modExists("filter",!0)&&this._column.table.modules.filter.setHeaderFilterValue(this._column,t)},ColumnComponent.prototype.move=function(t,e){var o=this._column.table.columnManager.findColumn(t);o?this._column.table.columnManager.moveColumn(this._column,o,e):console.warn("Move Error - No matching column found:",o)},ColumnComponent.prototype.getNextColumn=function(){var t=this._column.nextColumn();return!!t&&t.getComponent()},ColumnComponent.prototype.getPrevColumn=function(){var t=this._column.prevColumn();return!!t&&t.getComponent()},ColumnComponent.prototype.updateDefinition=function(t){return this._column.updateDefinition(t)},ColumnComponent.prototype.getWidth=function(){return this._column.getWidth()},ColumnComponent.prototype.setWidth=function(t){return!0===t?this._column.reinitializeWidth(!0):this._column.setWidth(t)},ColumnComponent.prototype.validate=function(){return this._column.validate()};var Column=function t(e,o){var i=this;this.table=o.table,this.definition=e,this.parent=o,this.type="column",this.columns=[],this.cells=[],this.element=this.createElement(),this.contentElement=!1,this.titleElement=!1,this.groupElement=this.createGroupElement(),this.isGroup=!1,this.tooltip=!1,this.hozAlign="",this.vertAlign="",this.field="",this.fieldStructure="",this.getFieldValue="",this.setFieldValue="",this.titleFormatterRendered=!1,this.setField(this.definition.field),this.table.options.invalidOptionWarnings&&this.checkDefinition(),this.modules={},this.cellEvents={cellClick:!1,cellDblClick:!1,cellContext:!1,cellTap:!1,cellDblTap:!1,cellTapHold:!1,cellMouseEnter:!1,cellMouseLeave:!1,cellMouseOver:!1,cellMouseOut:!1,cellMouseMove:!1},this.width=null,this.widthStyled="",this.minWidth=null,this.minWidthStyled="",this.widthFixed=!1,this.visible=!0,this.component=null,this._mapDepricatedFunctionality(),e.columns?(this.isGroup=!0,e.columns.forEach(function(e,o){var n=new t(e,i);i.attachColumn(n)}),i.checkColumnVisibility()):o.registerColumnField(this),e.rowHandle&&!1!==this.table.options.movableRows&&this.table.modExists("moveRow")&&this.table.modules.moveRow.setHandle(!0),this._buildHeader(),this.bindModuleColumns()};Column.prototype.createElement=function(){var t=document.createElement("div");return t.classList.add("tabulator-col"),t.setAttribute("role","columnheader"),t.setAttribute("aria-sort","none"),t},Column.prototype.createGroupElement=function(){var t=document.createElement("div");return t.classList.add("tabulator-col-group-cols"),t},Column.prototype.checkDefinition=function(){var t=this;Object.keys(this.definition).forEach(function(e){-1===t.defaultOptionList.indexOf(e)&&console.warn("Invalid column definition option in '"+(t.field||t.definition.title)+"' column:",e)})},Column.prototype.setField=function(t){this.field=t,this.fieldStructure=t?this.table.options.nestedFieldSeparator?t.split(this.table.options.nestedFieldSeparator):[t]:[],this.getFieldValue=this.fieldStructure.length>1?this._getNestedData:this._getFlatData,this.setFieldValue=this.fieldStructure.length>1?this._setNestedData:this._setFlatData},Column.prototype.registerColumnPosition=function(t){this.parent.registerColumnPosition(t)},Column.prototype.registerColumnField=function(t){this.parent.registerColumnField(t)},Column.prototype.reRegisterPosition=function(){this.isGroup?this.columns.forEach(function(t){t.reRegisterPosition()}):this.registerColumnPosition(this)},Column.prototype._mapDepricatedFunctionality=function(){void 0!==this.definition.hideInHtml&&(this.definition.htmlOutput=!this.definition.hideInHtml,console.warn("hideInHtml column definition property is deprecated, you should now use htmlOutput")),void 0!==this.definition.align&&(this.definition.hozAlign=this.definition.align,console.warn("align column definition property is deprecated, you should now use hozAlign")),void 0!==this.definition.downloadTitle&&(this.definition.titleDownload=this.definition.downloadTitle,console.warn("downloadTitle definition property is deprecated, you should now use titleDownload"))},Column.prototype.setTooltip=function(){var t=this,e=t.definition,o=e.headerTooltip||!1===e.tooltip?e.headerTooltip:t.table.options.tooltipsHeader;o?!0===o?e.field?t.table.modules.localize.bind("columns|"+e.field,function(o){t.element.setAttribute("title",o||e.title)}):t.element.setAttribute("title",e.title):("function"==typeof o&&!1===(o=o(t.getComponent()))&&(o=""),t.element.setAttribute("title",o)):t.element.setAttribute("title","")},Column.prototype._buildHeader=function(){for(var t=this,e=t.definition;t.element.firstChild;)t.element.removeChild(t.element.firstChild);e.headerVertical&&(t.element.classList.add("tabulator-col-vertical"),"flip"===e.headerVertical&&t.element.classList.add("tabulator-col-vertical-flip")),t.contentElement=t._bindEvents(),t.contentElement=t._buildColumnHeaderContent(),t.element.appendChild(t.contentElement),t.isGroup?t._buildGroupHeader():t._buildColumnHeader(),t.setTooltip(),t.table.options.resizableColumns&&t.table.modExists("resizeColumns")&&t.table.modules.resizeColumns.initializeColumn("header",t,t.element),e.headerFilter&&t.table.modExists("filter")&&t.table.modExists("edit")&&(void 0!==e.headerFilterPlaceholder&&e.field&&t.table.modules.localize.setHeaderFilterColumnPlaceholder(e.field,e.headerFilterPlaceholder),t.table.modules.filter.initializeColumn(t)),t.table.modExists("frozenColumns")&&t.table.modules.frozenColumns.initializeColumn(t),t.table.options.movableColumns&&!t.isGroup&&t.table.modExists("moveColumn")&&t.table.modules.moveColumn.initializeColumn(t),(e.topCalc||e.bottomCalc)&&t.table.modExists("columnCalcs")&&t.table.modules.columnCalcs.initializeColumn(t),t.table.modExists("persistence")&&t.table.modules.persistence.config.columns&&t.table.modules.persistence.initializeColumn(t),t.element.addEventListener("mouseenter",function(e){t.setTooltip()})},Column.prototype._bindEvents=function(){var t,e,o,i=this,n=i.definition;"function"==typeof n.headerClick&&i.element.addEventListener("click",function(t){n.headerClick(t,i.getComponent())}),"function"==typeof n.headerDblClick&&i.element.addEventListener("dblclick",function(t){n.headerDblClick(t,i.getComponent())}),"function"==typeof n.headerContext&&i.element.addEventListener("contextmenu",function(t){n.headerContext(t,i.getComponent())}),"function"==typeof n.headerTap&&(o=!1,i.element.addEventListener("touchstart",function(t){o=!0},{passive:!0}),i.element.addEventListener("touchend",function(t){o&&n.headerTap(t,i.getComponent()),o=!1})),"function"==typeof n.headerDblTap&&(t=null,i.element.addEventListener("touchend",function(e){t?(clearTimeout(t),t=null,n.headerDblTap(e,i.getComponent())):t=setTimeout(function(){clearTimeout(t),t=null},300)})),"function"==typeof n.headerTapHold&&(e=null,i.element.addEventListener("touchstart",function(t){clearTimeout(e),e=setTimeout(function(){clearTimeout(e),e=null,o=!1,n.headerTapHold(t,i.getComponent())},1e3)},{passive:!0}),i.element.addEventListener("touchend",function(t){clearTimeout(e),e=null})),"function"==typeof n.cellClick&&(i.cellEvents.cellClick=n.cellClick),"function"==typeof n.cellDblClick&&(i.cellEvents.cellDblClick=n.cellDblClick),"function"==typeof n.cellContext&&(i.cellEvents.cellContext=n.cellContext),"function"==typeof n.cellMouseEnter&&(i.cellEvents.cellMouseEnter=n.cellMouseEnter),"function"==typeof n.cellMouseLeave&&(i.cellEvents.cellMouseLeave=n.cellMouseLeave),"function"==typeof n.cellMouseOver&&(i.cellEvents.cellMouseOver=n.cellMouseOver),"function"==typeof n.cellMouseOut&&(i.cellEvents.cellMouseOut=n.cellMouseOut),"function"==typeof n.cellMouseMove&&(i.cellEvents.cellMouseMove=n.cellMouseMove),"function"==typeof n.cellTap&&(i.cellEvents.cellTap=n.cellTap),"function"==typeof n.cellDblTap&&(i.cellEvents.cellDblTap=n.cellDblTap),"function"==typeof n.cellTapHold&&(i.cellEvents.cellTapHold=n.cellTapHold),"function"==typeof n.cellEdited&&(i.cellEvents.cellEdited=n.cellEdited),"function"==typeof n.cellEditing&&(i.cellEvents.cellEditing=n.cellEditing),"function"==typeof n.cellEditCancelled&&(i.cellEvents.cellEditCancelled=n.cellEditCancelled)},Column.prototype._buildColumnHeader=function(){var t=this,e=t.definition,o=t.table;if(o.modExists("sort")&&o.modules.sort.initializeColumn(t,t.contentElement),(e.headerContextMenu||e.headerMenu)&&o.modExists("menu")&&o.modules.menu.initializeColumnHeader(t),o.modExists("format")&&o.modules.format.initializeColumn(t),void 0!==e.editor&&o.modExists("edit")&&o.modules.edit.initializeColumn(t),void 0!==e.validator&&o.modExists("validate")&&o.modules.validate.initializeColumn(t),o.modExists("mutator")&&o.modules.mutator.initializeColumn(t),o.modExists("accessor")&&o.modules.accessor.initializeColumn(t),_typeof(o.options.responsiveLayout)&&o.modExists("responsiveLayout")&&o.modules.responsiveLayout.initializeColumn(t),void 0!==e.visible&&(e.visible?t.show(!0):t.hide(!0)),e.cssClass){e.cssClass.split(" ").forEach(function(e){t.element.classList.add(e)})}e.field&&this.element.setAttribute("tabulator-field",e.field),t.setMinWidth(void 0===e.minWidth?t.table.options.columnMinWidth:parseInt(e.minWidth)),t.reinitializeWidth(),t.tooltip=t.definition.tooltip||!1===t.definition.tooltip?t.definition.tooltip:t.table.options.tooltips,t.hozAlign=void 0===t.definition.hozAlign?t.table.options.cellHozAlign:t.definition.hozAlign,t.vertAlign=void 0===t.definition.vertAlign?t.table.options.cellVertAlign:t.definition.vertAlign},Column.prototype._buildColumnHeaderContent=function(){var t=(this.definition,this.table,document.createElement("div"));return t.classList.add("tabulator-col-content"),this.titleElement=this._buildColumnHeaderTitle(),t.appendChild(this.titleElement),t},Column.prototype._buildColumnHeaderTitle=function(){var t=this,e=t.definition,o=t.table,i=document.createElement("div");if(i.classList.add("tabulator-col-title"),e.editableTitle){var n=document.createElement("input");n.classList.add("tabulator-title-editor"),n.addEventListener("click",function(t){t.stopPropagation(),n.focus()}),n.addEventListener("change",function(){e.title=n.value,o.options.columnTitleChanged.call(t.table,t.getComponent())}),i.appendChild(n),e.field?o.modules.localize.bind("columns|"+e.field,function(t){n.value=t||e.title||"&nbsp;"}):n.value=e.title||"&nbsp;"}else e.field?o.modules.localize.bind("columns|"+e.field,function(o){t._formatColumnHeaderTitle(i,o||e.title||"&nbsp;")}):t._formatColumnHeaderTitle(i,e.title||"&nbsp;");return i},Column.prototype._formatColumnHeaderTitle=function(t,e){var o,i,n,l,s,a=this;if(this.definition.titleFormatter&&this.table.modExists("format"))switch(o=this.table.modules.format.getFormatter(this.definition.titleFormatter),s=function(t){a.titleFormatterRendered=t},l={getValue:function(){return e},getElement:function(){return t}},n=this.definition.titleFormatterParams||{},n="function"==typeof n?n():n,i=o.call(this.table.modules.format,l,n,s),void 0===i?"undefined":_typeof(i)){case"object":i instanceof Node?t.appendChild(i):(t.innerHTML="",console.warn("Format Error - Title formatter has returned a type of object, the only valid formatter object return is an instance of Node, the formatter returned:",i));break;case"undefined":case"null":t.innerHTML="";break;default:t.innerHTML=i}else t.innerHTML=e},Column.prototype._buildGroupHeader=function(){var t=this;if(this.element.classList.add("tabulator-col-group"),this.element.setAttribute("role","columngroup"),this.element.setAttribute("aria-title",this.definition.title),this.definition.cssClass){this.definition.cssClass.split(" ").forEach(function(e){t.element.classList.add(e)})}(this.definition.headerContextMenu||this.definition.headerMenu)&&this.table.modExists("menu")&&this.table.modules.menu.initializeColumnHeader(this),this.element.appendChild(this.groupElement)},Column.prototype._getFlatData=function(t){return t[this.field]},Column.prototype._getNestedData=function(t){for(var e,o=t,i=this.fieldStructure,n=i.length,l=0;l<n&&(o=o[i[l]],e=o,o);l++);return e},Column.prototype._setFlatData=function(t,e){this.field&&(t[this.field]=e)},Column.prototype._setNestedData=function(t,e){for(var o=t,i=this.fieldStructure,n=i.length,l=0;l<n;l++)if(l==n-1)o[i[l]]=e;else{if(!o[i[l]]){if(void 0===e)break;o[i[l]]={}}o=o[i[l]]}},Column.prototype.attachColumn=function(t){var e=this;e.groupElement?(e.columns.push(t),e.groupElement.appendChild(t.getElement())):console.warn("Column Warning - Column being attached to another column instead of column group")},Column.prototype.verticalAlign=function(t,e){var o=this.parent.isGroup?this.parent.getGroupElement().clientHeight:e||this.parent.getHeadersElement().clientHeight;this.element.style.height=o+"px",this.isGroup&&(this.groupElement.style.minHeight=o-this.contentElement.offsetHeight+"px"),this.isGroup||"top"===t||(this.element.style.paddingTop="bottom"===t?this.element.clientHeight-this.contentElement.offsetHeight+"px":(this.element.clientHeight-this.contentElement.offsetHeight)/2+"px"),this.columns.forEach(function(e){e.verticalAlign(t)})},Column.prototype.clearVerticalAlign=function(){this.element.style.paddingTop="",this.element.style.height="",this.element.style.minHeight="",this.groupElement.style.minHeight="",this.columns.forEach(function(t){t.clearVerticalAlign()})},Column.prototype.bindModuleColumns=function(){"rownum"==this.definition.formatter&&(this.table.rowManager.rowNumColumn=this)},Column.prototype.getElement=function(){return this.element},Column.prototype.getGroupElement=function(){return this.groupElement},Column.prototype.getField=function(){return this.field},Column.prototype.getFirstColumn=function(){return this.isGroup?!!this.columns.length&&this.columns[0].getFirstColumn():this},Column.prototype.getLastColumn=function(){return this.isGroup?!!this.columns.length&&this.columns[this.columns.length-1].getLastColumn():this},Column.prototype.getColumns=function(){return this.columns},Column.prototype.getCells=function(){return this.cells},Column.prototype.getTopColumn=function(){return this.parent.isGroup?this.parent.getTopColumn():this},Column.prototype.getDefinition=function(t){var e=[];return this.isGroup&&t&&(this.columns.forEach(function(t){e.push(t.getDefinition(!0))}),this.definition.columns=e),this.definition},Column.prototype.checkColumnVisibility=function(){var t=!1;this.columns.forEach(function(e){e.visible&&(t=!0)}),t?(this.show(),this.parent.table.options.columnVisibilityChanged.call(this.table,this.getComponent(),!1)):this.hide()},Column.prototype.show=function(t,e){this.visible||(this.visible=!0,this.element.style.display="",this.parent.isGroup&&this.parent.checkColumnVisibility(),this.cells.forEach(function(t){t.show()}),this.isGroup||null!==this.width||this.reinitializeWidth(),this.table.columnManager._verticalAlignHeaders(),this.table.options.persistence&&this.table.modExists("persistence",!0)&&this.table.modules.persistence.config.columns&&this.table.modules.persistence.save("columns"),!e&&this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.updateColumnVisibility(this,this.visible),t||this.table.options.columnVisibilityChanged.call(this.table,this.getComponent(),!0),this.parent.isGroup&&this.parent.matchChildWidths())},Column.prototype.hide=function(t,e){this.visible&&(this.visible=!1,this.element.style.display="none",this.table.columnManager._verticalAlignHeaders(),this.parent.isGroup&&this.parent.checkColumnVisibility(),this.cells.forEach(function(t){t.hide()}),this.table.options.persistence&&this.table.modExists("persistence",!0)&&this.table.modules.persistence.config.columns&&this.table.modules.persistence.save("columns"),!e&&this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.updateColumnVisibility(this,this.visible),t||this.table.options.columnVisibilityChanged.call(this.table,this.getComponent(),!1),this.parent.isGroup&&this.parent.matchChildWidths())},Column.prototype.matchChildWidths=function(){var t=0;this.contentElement&&this.columns.length&&(this.columns.forEach(function(e){e.visible&&(t+=e.getWidth())}),this.contentElement.style.maxWidth=t-1+"px",this.parent.isGroup&&this.parent.matchChildWidths())},Column.prototype.setWidth=function(t){this.widthFixed=!0,this.setWidthActual(t)},Column.prototype.setWidthActual=function(t){isNaN(t)&&(t=Math.floor(this.table.element.clientWidth/100*parseInt(t))),t=Math.max(this.minWidth,t),this.width=t,this.widthStyled=t?t+"px":"",this.element.style.width=this.widthStyled,this.isGroup||this.cells.forEach(function(t){t.setWidth()}),this.parent.isGroup&&this.parent.matchChildWidths(),this.table.modExists("frozenColumns")&&this.table.modules.frozenColumns.layout()},Column.prototype.checkCellHeights=function(){var t=[];this.cells.forEach(function(e){e.row.heightInitialized&&(null!==e.row.getElement().offsetParent?(t.push(e.row),e.row.clearCellHeight()):e.row.heightInitialized=!1)}),t.forEach(function(t){t.calcHeight()}),t.forEach(function(t){t.setCellHeight()})},Column.prototype.getWidth=function(){var t=0;return this.isGroup?this.columns.forEach(function(e){e.visible&&(t+=e.getWidth())}):t=this.width,t},Column.prototype.getHeight=function(){return this.element.offsetHeight},Column.prototype.setMinWidth=function(t){this.minWidth=t,this.minWidthStyled=t?t+"px":"",this.element.style.minWidth=this.minWidthStyled,this.cells.forEach(function(t){t.setMinWidth()})},Column.prototype.delete=function(){var t=this;return new Promise(function(e,o){t.isGroup&&t.columns.forEach(function(t){t.delete()}),t.table.modExists("edit")&&t.table.modules.edit.currentCell.column===t&&t.table.modules.edit.cancelEdit();for(var i=t.cells.length,n=0;n<i;n++)t.cells[0].delete();t.element.parentNode.removeChild(t.element),t.table.columnManager.deregisterColumn(t),e()})},Column.prototype.columnRendered=function(){
+this.titleFormatterRendered&&this.titleFormatterRendered()},Column.prototype.validate=function(){var t=[];return this.cells.forEach(function(e){e.validate()||t.push(e.getComponent())}),!t.length||t},Column.prototype.generateCell=function(t){var e=this,o=new Cell(e,t);return this.cells.push(o),o},Column.prototype.nextColumn=function(){var t=this.table.columnManager.findColumnIndex(this);return t>-1&&this._nextVisibleColumn(t+1)},Column.prototype._nextVisibleColumn=function(t){var e=this.table.columnManager.getColumnByIndex(t);return!e||e.visible?e:this._nextVisibleColumn(t+1)},Column.prototype.prevColumn=function(){var t=this.table.columnManager.findColumnIndex(this);return t>-1&&this._prevVisibleColumn(t-1)},Column.prototype._prevVisibleColumn=function(t){var e=this.table.columnManager.getColumnByIndex(t);return!e||e.visible?e:this._prevVisibleColumn(t-1)},Column.prototype.reinitializeWidth=function(t){this.widthFixed=!1,void 0===this.definition.width||t||this.setWidth(this.definition.width),this.table.modExists("filter")&&this.table.modules.filter.hideHeaderFilterElements(),this.fitToData(),this.table.modExists("filter")&&this.table.modules.filter.showHeaderFilterElements()},Column.prototype.fitToData=function(){var t=this;this.widthFixed||(this.element.style.width="",t.cells.forEach(function(t){t.clearWidth()}));var e=this.element.offsetWidth;t.width&&this.widthFixed||(t.cells.forEach(function(t){var o=t.getWidth();o>e&&(e=o)}),e&&t.setWidthActual(e+1))},Column.prototype.updateDefinition=function(t){var e=this;return new Promise(function(o,i){var n;e.isGroup?(console.warn("Column Update Error - The updateDefintion function is only available on columns, not column groups"),i("Column Update Error - The updateDefintion function is only available on columns, not column groups")):(n=Object.assign({},e.getDefinition()),n=Object.assign(n,t),e.table.columnManager.addColumn(n,!1,e).then(function(t){n.field==e.field&&(e.field=!1),e.delete().then(function(){o(t.getComponent())}).catch(function(t){i(t)})}).catch(function(t){i(t)}))})},Column.prototype.deleteCell=function(t){var e=this.cells.indexOf(t);e>-1&&this.cells.splice(e,1)},Column.prototype.defaultOptionList=["title","field","columns","visible","align","hozAlign","vertAlign","width","minWidth","widthGrow","widthShrink","resizable","frozen","responsive","tooltip","cssClass","rowHandle","hideInHtml","print","htmlOutput","sorter","sorterParams","formatter","formatterParams","variableHeight","editable","editor","editorParams","validator","mutator","mutatorParams","mutatorData","mutatorDataParams","mutatorEdit","mutatorEditParams","mutatorClipboard","mutatorClipboardParams","accessor","accessorParams","accessorData","accessorDataParams","accessorDownload","accessorDownloadParams","accessorClipboard","accessorClipboardParams","accessorPrint","accessorPrintParams","accessorHtmlOutput","accessorHtmlOutputParams","clipboard","download","downloadTitle","topCalc","topCalcParams","topCalcFormatter","topCalcFormatterParams","bottomCalc","bottomCalcParams","bottomCalcFormatter","bottomCalcFormatterParams","cellClick","cellDblClick","cellContext","cellTap","cellDblTap","cellTapHold","cellMouseEnter","cellMouseLeave","cellMouseOver","cellMouseOut","cellMouseMove","cellEditing","cellEdited","cellEditCancelled","headerSort","headerSortStartingDir","headerSortTristate","headerClick","headerDblClick","headerContext","headerTap","headerDblTap","headerTapHold","headerTooltip","headerVertical","editableTitle","titleFormatter","titleFormatterParams","headerFilter","headerFilterPlaceholder","headerFilterParams","headerFilterEmptyCheck","headerFilterFunc","headerFilterFuncParams","headerFilterLiveFilter","print","headerContextMenu","headerMenu","contextMenu","formatterPrint","formatterPrintParams","formatterClipboard","formatterClipboardParams","formatterHtmlOutput","formatterHtmlOutputParams","titlePrint","titleClipboard","titleHtmlOutput","titleDownload"],Column.prototype.getComponent=function(){return this.component||(this.component=new ColumnComponent(this)),this.component};var RowManager=function(t){this.table=t,this.element=this.createHolderElement(),this.tableElement=this.createTableElement(),this.heightFixer=this.createTableElement(),this.columnManager=null,this.height=0,this.firstRender=!1,this.renderMode="virtual",this.fixedHeight=!1,this.rows=[],this.activeRows=[],this.activeRowsCount=0,this.displayRows=[],this.displayRowsCount=0,this.scrollTop=0,this.scrollLeft=0,this.vDomRowHeight=20,this.vDomTop=0,this.vDomBottom=0,this.vDomScrollPosTop=0,this.vDomScrollPosBottom=0,this.vDomTopPad=0,this.vDomBottomPad=0,this.vDomMaxRenderChain=90,this.vDomWindowBuffer=0,this.vDomWindowMinTotalRows=20,this.vDomWindowMinMarginRows=5,this.vDomTopNewRows=[],this.vDomBottomNewRows=[],this.rowNumColumn=!1,this.redrawBlock=!1,this.redrawBlockRestoreConfig=!1,this.redrawBlockRederInPosition=!1};RowManager.prototype.createHolderElement=function(){var t=document.createElement("div");return t.classList.add("tabulator-tableHolder"),t.setAttribute("tabindex",0),t},RowManager.prototype.createTableElement=function(){var t=document.createElement("div");return t.classList.add("tabulator-table"),t},RowManager.prototype.getElement=function(){return this.element},RowManager.prototype.getTableElement=function(){return this.tableElement},RowManager.prototype.getRowPosition=function(t,e){return e?this.activeRows.indexOf(t):this.rows.indexOf(t)},RowManager.prototype.setColumnManager=function(t){this.columnManager=t},RowManager.prototype.initialize=function(){var t=this;t.setRenderMode(),t.element.appendChild(t.tableElement),t.firstRender=!0,t.element.addEventListener("scroll",function(){var e=t.element.scrollLeft;t.scrollLeft!=e&&(t.columnManager.scrollHorizontal(e),t.table.options.groupBy&&t.table.modules.groupRows.scrollHeaders(e),t.table.modExists("columnCalcs")&&t.table.modules.columnCalcs.scrollHorizontal(e),t.table.options.scrollHorizontal(e)),t.scrollLeft=e}),"virtual"===this.renderMode&&t.element.addEventListener("scroll",function(){var e=t.element.scrollTop,o=t.scrollTop>e;t.scrollTop!=e?(t.scrollTop=e,t.scrollVertical(o),"scroll"==t.table.options.ajaxProgressiveLoad&&t.table.modules.ajax.nextPage(t.element.scrollHeight-t.element.clientHeight-e),t.table.options.scrollVertical(e)):t.scrollTop=e})},RowManager.prototype.findRow=function(t){var e=this;if("object"!=(void 0===t?"undefined":_typeof(t))){if(void 0===t||null===t)return!1;return e.rows.find(function(o){return o.data[e.table.options.index]==t})||!1}if(t instanceof Row)return t;if(t instanceof RowComponent)return t._getSelf()||!1;if("undefined"!=typeof HTMLElement&&t instanceof HTMLElement){return e.rows.find(function(e){return e.element===t})||!1}return!1},RowManager.prototype.getRowFromDataObject=function(t){return this.rows.find(function(e){return e.data===t})||!1},RowManager.prototype.getRowFromPosition=function(t,e){return e?this.activeRows[t]:this.rows[t]},RowManager.prototype.scrollToRow=function(t,e,o){var i,n=this,l=this.getDisplayRows().indexOf(t),s=t.getElement(),a=0;return new Promise(function(t,r){if(l>-1){if(void 0===e&&(e=n.table.options.scrollToRowPosition),void 0===o&&(o=n.table.options.scrollToRowIfVisible),"nearest"===e)switch(n.renderMode){case"classic":i=Tabulator.prototype.helpers.elOffset(s).top,e=Math.abs(n.element.scrollTop-i)>Math.abs(n.element.scrollTop+n.element.clientHeight-i)?"bottom":"top";break;case"virtual":e=Math.abs(n.vDomTop-l)>Math.abs(n.vDomBottom-l)?"bottom":"top"}if(!o&&Tabulator.prototype.helpers.elVisible(s)&&(a=Tabulator.prototype.helpers.elOffset(s).top-Tabulator.prototype.helpers.elOffset(n.element).top)>0&&a<n.element.clientHeight-s.offsetHeight)return!1;switch(n.renderMode){case"classic":n.element.scrollTop=Tabulator.prototype.helpers.elOffset(s).top-Tabulator.prototype.helpers.elOffset(n.element).top+n.element.scrollTop;break;case"virtual":n._virtualRenderFill(l,!0)}switch(e){case"middle":case"center":n.element.scrollHeight-n.element.scrollTop==n.element.clientHeight?n.element.scrollTop=n.element.scrollTop+(s.offsetTop-n.element.scrollTop)-(n.element.scrollHeight-s.offsetTop)/2:n.element.scrollTop=n.element.scrollTop-n.element.clientHeight/2;break;case"bottom":n.element.scrollHeight-n.element.scrollTop==n.element.clientHeight?n.element.scrollTop=n.element.scrollTop-(n.element.scrollHeight-s.offsetTop)+s.offsetHeight:n.element.scrollTop=n.element.scrollTop-n.element.clientHeight+s.offsetHeight}t()}else console.warn("Scroll Error - Row not visible"),r("Scroll Error - Row not visible")})},RowManager.prototype.setData=function(t,e,o){var i=this,n=this;return new Promise(function(l,s){e&&i.getDisplayRows().length?n.table.options.pagination?n._setDataActual(t,!0):i.reRenderInPosition(function(){n._setDataActual(t)}):(i.table.options.autoColumns&&o&&i.table.columnManager.generateColumnsFromRowData(t),i.resetScroll(),i._setDataActual(t)),l()})},RowManager.prototype._setDataActual=function(t,e){var o=this;o.table.options.dataLoading.call(this.table,t),this._wipeElements(),this.table.options.history&&this.table.modExists("history")&&this.table.modules.history.clear(),Array.isArray(t)?(this.table.modExists("selectRow")&&this.table.modules.selectRow.clearSelectionData(),this.table.options.reactiveData&&this.table.modExists("reactiveData",!0)&&this.table.modules.reactiveData.watchData(t),t.forEach(function(t,e){if(t&&"object"===(void 0===t?"undefined":_typeof(t))){var i=new Row(t,o);o.rows.push(i)}else console.warn("Data Loading Warning - Invalid row data detected and ignored, expecting object but received:",t)}),o.table.options.dataLoaded.call(this.table,t),o.refreshActiveData(!1,!1,e)):console.error("Data Loading Error - Unable to process data due to invalid data type \nExpecting: array \nReceived: ",void 0===t?"undefined":_typeof(t),"\nData:     ",t)},RowManager.prototype._wipeElements=function(){this.rows.forEach(function(t){t.wipe()}),this.table.options.groupBy&&this.table.modExists("groupRows")&&this.table.modules.groupRows.wipe(),this.rows=[]},RowManager.prototype.deleteRow=function(t,e){var o=this.rows.indexOf(t),i=this.activeRows.indexOf(t);i>-1&&this.activeRows.splice(i,1),o>-1&&this.rows.splice(o,1),this.setActiveRows(this.activeRows),this.displayRowIterator(function(e){var o=e.indexOf(t);o>-1&&e.splice(o,1)}),e||this.reRenderInPosition(),this.regenerateRowNumbers(),this.table.options.rowDeleted.call(this.table,t.getComponent()),this.table.options.dataEdited.call(this.table,this.getData()),this.table.options.groupBy&&this.table.modExists("groupRows")?this.table.modules.groupRows.updateGroupRows(!0):this.table.options.pagination&&this.table.modExists("page")?this.refreshActiveData(!1,!1,!0):this.table.options.pagination&&this.table.modExists("page")&&this.refreshActiveData("page")},RowManager.prototype.addRow=function(t,e,o,i){var n=this.addRowActual(t,e,o,i);return this.table.options.history&&this.table.modExists("history")&&this.table.modules.history.action("rowAdd",n,{data:t,pos:e,index:o}),n},RowManager.prototype.addRows=function(t,e,o){var i=this,n=this,l=0,s=[];return new Promise(function(a,r){e=i.findAddRowPos(e),Array.isArray(t)||(t=[t]),l=t.length-1,(void 0===o&&e||void 0!==o&&!e)&&t.reverse(),t.forEach(function(t,i){var l=n.addRow(t,e,o,!0);s.push(l)}),i.table.options.groupBy&&i.table.modExists("groupRows")?i.table.modules.groupRows.updateGroupRows(!0):i.table.options.pagination&&i.table.modExists("page")?i.refreshActiveData(!1,!1,!0):i.reRenderInPosition(),i.table.modExists("columnCalcs")&&i.table.modules.columnCalcs.recalc(i.table.rowManager.activeRows),i.regenerateRowNumbers(),a(s)})},RowManager.prototype.findAddRowPos=function(t){return void 0===t&&(t=this.table.options.addRowPos),"pos"===t&&(t=!0),"bottom"===t&&(t=!1),t},RowManager.prototype.addRowActual=function(t,e,o,i){var n,l,s=t instanceof Row?t:new Row(t||{},this),a=this.findAddRowPos(e),r=-1;if(!o&&this.table.options.pagination&&"page"==this.table.options.paginationAddRow&&(l=this.getDisplayRows(),a?l.length?o=l[0]:this.activeRows.length&&(o=this.activeRows[this.activeRows.length-1],a=!1):l.length&&(o=l[l.length-1],a=!(l.length<this.table.modules.page.getPageSize()))),void 0!==o&&(o=this.findRow(o)),this.table.options.groupBy&&this.table.modExists("groupRows")){this.table.modules.groupRows.assignRowToGroup(s);var u=s.getGroup().rows;u.length>1&&(!o||o&&-1==u.indexOf(o)?a?u[0]!==s&&(o=u[0],this._moveRowInArray(s.getGroup().rows,s,o,!a)):u[u.length-1]!==s&&(o=u[u.length-1],this._moveRowInArray(s.getGroup().rows,s,o,!a)):this._moveRowInArray(s.getGroup().rows,s,o,!a))}return o&&(r=this.rows.indexOf(o)),o&&r>-1?(n=this.activeRows.indexOf(o),this.displayRowIterator(function(t){var e=t.indexOf(o);e>-1&&t.splice(a?e:e+1,0,s)}),n>-1&&this.activeRows.splice(a?n:n+1,0,s),this.rows.splice(a?r:r+1,0,s)):a?(this.displayRowIterator(function(t){t.unshift(s)}),this.activeRows.unshift(s),this.rows.unshift(s)):(this.displayRowIterator(function(t){t.push(s)}),this.activeRows.push(s),this.rows.push(s)),this.setActiveRows(this.activeRows),this.table.options.rowAdded.call(this.table,s.getComponent()),this.table.options.dataEdited.call(this.table,this.getData()),i||this.reRenderInPosition(),s},RowManager.prototype.moveRow=function(t,e,o){this.table.options.history&&this.table.modExists("history")&&this.table.modules.history.action("rowMove",t,{posFrom:this.getRowPosition(t),posTo:this.getRowPosition(e),to:e,after:o}),this.moveRowActual(t,e,o),this.regenerateRowNumbers(),this.table.options.rowMoved.call(this.table,t.getComponent())},RowManager.prototype.moveRowActual=function(t,e,o){var i=this;if(this._moveRowInArray(this.rows,t,e,o),this._moveRowInArray(this.activeRows,t,e,o),this.displayRowIterator(function(n){i._moveRowInArray(n,t,e,o)}),this.table.options.groupBy&&this.table.modExists("groupRows")){!o&&e instanceof Group&&(e=this.table.rowManager.prevDisplayRow(t)||e);var n=e.getGroup(),l=t.getGroup();n===l?this._moveRowInArray(n.rows,t,e,o):(l&&l.removeRow(t),n.insertRow(t,e,o))}},RowManager.prototype._moveRowInArray=function(t,e,o,i){var n,l,s,a;if(e!==o&&(n=t.indexOf(e),n>-1&&(t.splice(n,1),l=t.indexOf(o),l>-1?i?t.splice(l+1,0,e):t.splice(l,0,e):t.splice(n,0,e)),t===this.getDisplayRows())){s=n<l?n:l,a=l>n?l:n+1;for(var r=s;r<=a;r++)t[r]&&this.styleRow(t[r],r)}},RowManager.prototype.clearData=function(){this.setData([])},RowManager.prototype.getRowIndex=function(t){return this.findRowIndex(t,this.rows)},RowManager.prototype.getDisplayRowIndex=function(t){var e=this.getDisplayRows().indexOf(t);return e>-1&&e},RowManager.prototype.nextDisplayRow=function(t,e){var o=this.getDisplayRowIndex(t),i=!1;return!1!==o&&o<this.displayRowsCount-1&&(i=this.getDisplayRows()[o+1]),!i||i instanceof Row&&"row"==i.type?i:this.nextDisplayRow(i,e)},RowManager.prototype.prevDisplayRow=function(t,e){var o=this.getDisplayRowIndex(t),i=!1;return o&&(i=this.getDisplayRows()[o-1]),!e||!i||i instanceof Row&&"row"==i.type?i:this.prevDisplayRow(i,e)},RowManager.prototype.findRowIndex=function(t,e){var o;return!!((t=this.findRow(t))&&(o=e.indexOf(t))>-1)&&o},RowManager.prototype.getData=function(t,e){var o=[];return this.getRows(t).forEach(function(t){"row"==t.type&&o.push(t.getData(e||"data"))}),o},RowManager.prototype.getComponents=function(t){var e=[];return this.getRows(t).forEach(function(t){e.push(t.getComponent())}),e},RowManager.prototype.getDataCount=function(t){return this.getRows(t).length},RowManager.prototype._genRemoteRequest=function(){var t=this,e=this.table,o=e.options,i={};if(e.modExists("page")){if(o.ajaxSorting){var n=this.table.modules.sort.getSort();n.forEach(function(t){delete t.column}),i[this.table.modules.page.paginationDataSentNames.sorters]=n}if(o.ajaxFiltering){var l=this.table.modules.filter.getFilters(!0,!0);i[this.table.modules.page.paginationDataSentNames.filters]=l}this.table.modules.ajax.setParams(i,!0)}e.modules.ajax.sendRequest().then(function(e){t._setDataActual(e,!0)}).catch(function(t){})},RowManager.prototype.filterRefresh=function(){var t=this.table,e=t.options,o=this.scrollLeft;e.ajaxFiltering?"remote"==e.pagination&&t.modExists("page")?(t.modules.page.reset(!0),t.modules.page.setPage(1).then(function(){}).catch(function(){})):e.ajaxProgressiveLoad?t.modules.ajax.loadData().then(function(){}).catch(function(){}):this._genRemoteRequest():this.refreshActiveData("filter"),this.scrollHorizontal(o)},RowManager.prototype.sorterRefresh=function(t){var e=this.table,o=this.table.options,i=this.scrollLeft;o.ajaxSorting?("remote"==o.pagination||o.progressiveLoad)&&e.modExists("page")?(e.modules.page.reset(!0),e.modules.page.setPage(1).then(function(){}).catch(function(){})):o.ajaxProgressiveLoad?e.modules.ajax.loadData().then(function(){}).catch(function(){}):this._genRemoteRequest():this.refreshActiveData(t?"filter":"sort"),this.scrollHorizontal(i)},RowManager.prototype.scrollHorizontal=function(t){this.scrollLeft=t,this.element.scrollLeft=t,this.table.options.groupBy&&this.table.modules.groupRows.scrollHeaders(t),this.table.modExists("columnCalcs")&&this.table.modules.columnCalcs.scrollHorizontal(t)},RowManager.prototype.refreshActiveData=function(t,e,o){var i,n=this,l=this.table,s=["all","filter","sort","display","freeze","group","tree","page"];if(this.redrawBlock)return void((!this.redrawBlockRestoreConfig||s.indexOf(t)<s.indexOf(this.redrawBlockRestoreConfig.stage))&&(this.redrawBlockRestoreConfig={stage:t,skipStage:e,renderInPosition:o}));switch(n.table.modExists("edit")&&n.table.modules.edit.cancelEdit(),t||(t="all"),l.options.selectable&&!l.options.selectablePersistence&&l.modExists("selectRow")&&l.modules.selectRow.deselectRows(),t){case"all":case"filter":e?e=!1:l.modExists("filter")?n.setActiveRows(l.modules.filter.filter(n.rows)):n.setActiveRows(n.rows.slice(0));case"sort":e?e=!1:l.modExists("sort")&&l.modules.sort.sort(this.activeRows),this.regenerateRowNumbers();case"display":this.resetDisplayRows();case"freeze":e?e=!1:this.table.modExists("frozenRows")&&l.modules.frozenRows.isFrozen()&&(l.modules.frozenRows.getDisplayIndex()||l.modules.frozenRows.setDisplayIndex(this.getNextDisplayIndex()),i=l.modules.frozenRows.getDisplayIndex(),!0!==(i=n.setDisplayRows(l.modules.frozenRows.getRows(this.getDisplayRows(i-1)),i))&&l.modules.frozenRows.setDisplayIndex(i));case"group":e?e=!1:l.options.groupBy&&l.modExists("groupRows")&&(l.modules.groupRows.getDisplayIndex()||l.modules.groupRows.setDisplayIndex(this.getNextDisplayIndex()),i=l.modules.groupRows.getDisplayIndex(),!0!==(i=n.setDisplayRows(l.modules.groupRows.getRows(this.getDisplayRows(i-1)),i))&&l.modules.groupRows.setDisplayIndex(i));case"tree":e?e=!1:l.options.dataTree&&l.modExists("dataTree")&&(l.modules.dataTree.getDisplayIndex()||l.modules.dataTree.setDisplayIndex(this.getNextDisplayIndex()),i=l.modules.dataTree.getDisplayIndex(),!0!==(i=n.setDisplayRows(l.modules.dataTree.getRows(this.getDisplayRows(i-1)),i))&&l.modules.dataTree.setDisplayIndex(i)),l.options.pagination&&l.modExists("page")&&!o&&"local"==l.modules.page.getMode()&&l.modules.page.reset();case"page":e?e=!1:l.options.pagination&&l.modExists("page")&&(l.modules.page.getDisplayIndex()||l.modules.page.setDisplayIndex(this.getNextDisplayIndex()),i=l.modules.page.getDisplayIndex(),"local"==l.modules.page.getMode()&&l.modules.page.setMaxRows(this.getDisplayRows(i-1).length),!0!==(i=n.setDisplayRows(l.modules.page.getRows(this.getDisplayRows(i-1)),i))&&l.modules.page.setDisplayIndex(i))}Tabulator.prototype.helpers.elVisible(n.element)&&(o?n.reRenderInPosition():(n.renderTable(),l.options.layoutColumnsOnNewData&&n.table.columnManager.redraw(!0))),l.modExists("columnCalcs")&&l.modules.columnCalcs.recalc(this.activeRows)},RowManager.prototype.regenerateRowNumbers=function(){var t=this;this.rowNumColumn&&this.activeRows.forEach(function(e){var o=e.getCell(t.rowNumColumn);o&&o._generateContents()})},RowManager.prototype.setActiveRows=function(t){this.activeRows=t,this.activeRowsCount=this.activeRows.length},RowManager.prototype.resetDisplayRows=function(){this.displayRows=[],this.displayRows.push(this.activeRows.slice(0)),this.displayRowsCount=this.displayRows[0].length,this.table.modExists("frozenRows")&&this.table.modules.frozenRows.setDisplayIndex(0),this.table.options.groupBy&&this.table.modExists("groupRows")&&this.table.modules.groupRows.setDisplayIndex(0),this.table.options.pagination&&this.table.modExists("page")&&this.table.modules.page.setDisplayIndex(0)},RowManager.prototype.getNextDisplayIndex=function(){return this.displayRows.length},RowManager.prototype.setDisplayRows=function(t,e){var o=!0;return e&&void 0!==this.displayRows[e]?(this.displayRows[e]=t,o=!0):(this.displayRows.push(t),o=e=this.displayRows.length-1),e==this.displayRows.length-1&&(this.displayRowsCount=this.displayRows[this.displayRows.length-1].length),o},RowManager.prototype.getDisplayRows=function(t){return void 0===t?this.displayRows.length?this.displayRows[this.displayRows.length-1]:[]:this.displayRows[t]||[]},RowManager.prototype.getVisibleRows=function(t){var e=this.element.scrollTop,o=this.element.clientHeight+e,i=!1,n=0,l=0,s=this.getDisplayRows();if(t){this.getDisplayRows();for(var a=this.vDomTop;a<=this.vDomBottom;a++)if(s[a])if(i){if(!(o-s[a].getElement().offsetTop>=0))break;l=a}else if(e-s[a].getElement().offsetTop>=0)n=a;else{if(i=!0,!(o-s[a].getElement().offsetTop>=0))break;l=a}}else n=this.vDomTop,l=this.vDomBottom;return s.slice(n,l+1)},RowManager.prototype.displayRowIterator=function(t){this.displayRows.forEach(t),this.displayRowsCount=this.displayRows[this.displayRows.length-1].length},RowManager.prototype.getRows=function(t){var e;switch(t){case"active":e=this.activeRows;break;case"display":e=this.table.rowManager.getDisplayRows();break;case"visible":e=this.getVisibleRows(!0);break;default:e=this.rows}return e},RowManager.prototype.reRenderInPosition=function(t){if("virtual"==this.getRenderMode())if(this.redrawBlock)t?t():this.redrawBlockRederInPosition=!0;else{for(var e=this.element.scrollTop,o=!1,i=!1,n=this.scrollLeft,l=this.getDisplayRows(),s=this.vDomTop;s<=this.vDomBottom;s++)if(l[s]){var a=e-l[s].getElement().offsetTop;if(!(!1===i||Math.abs(a)<i))break;i=a,o=s}t&&t(),this._virtualRenderFill(!1===o?this.displayRowsCount-1:o,!0,i||0),this.scrollHorizontal(n)}else this.renderTable(),t&&t()},RowManager.prototype.setRenderMode=function(){this.table.options.virtualDom?(this.renderMode="virtual",this.table.element.clientHeight||this.table.options.height?this.fixedHeight=!0:this.fixedHeight=!1):this.renderMode="classic"},RowManager.prototype.getRenderMode=function(){return this.renderMode},RowManager.prototype.renderTable=function(){switch(this.table.options.renderStarted.call(this.table),this.element.scrollTop=0,this.renderMode){case"classic":this._simpleRender();break;case"virtual":this._virtualRenderFill()}this.firstRender&&(this.displayRowsCount?(this.firstRender=!1,this.table.modules.layout.layout()):this.renderEmptyScroll()),this.table.modExists("frozenColumns")&&this.table.modules.frozenColumns.layout(),this.displayRowsCount||this.table.options.placeholder&&(this.table.options.placeholder.setAttribute("tabulator-render-mode",this.renderMode),this.getElement().appendChild(this.table.options.placeholder),this.table.options.placeholder.style.width=this.table.columnManager.getWidth()+"px"),this.table.options.renderComplete.call(this.table)},RowManager.prototype._simpleRender=function(){this._clearVirtualDom(),this.displayRowsCount?this.checkClassicModeGroupHeaderWidth():this.renderEmptyScroll()},RowManager.prototype.checkClassicModeGroupHeaderWidth=function(){var t=this,e=this.tableElement,o=!0;t.getDisplayRows().forEach(function(i,n){t.styleRow(i,n),e.appendChild(i.getElement()),i.initialize(!0),"group"!==i.type&&(o=!1)}),e.style.minWidth=o?t.table.columnManager.getWidth()+"px":""},RowManager.prototype.renderEmptyScroll=function(){this.table.options.placeholder?this.tableElement.style.display="none":(this.tableElement.style.minWidth=this.table.columnManager.getWidth()+"px",this.tableElement.style.minHeight="1px",this.tableElement.style.visibility="hidden")},RowManager.prototype._clearVirtualDom=function(){var t=this.tableElement;for(this.table.options.placeholder&&this.table.options.placeholder.parentNode&&this.table.options.placeholder.parentNode.removeChild(this.table.options.placeholder);t.firstChild;)t.removeChild(t.firstChild);t.style.paddingTop="",t.style.paddingBottom="",t.style.minWidth="",t.style.minHeight="",t.style.display="",t.style.visibility="",this.scrollTop=0,this.scrollLeft=0,this.vDomTop=0,this.vDomBottom=0,this.vDomTopPad=0,this.vDomBottomPad=0},RowManager.prototype.styleRow=function(t,e){var o=t.getElement();e%2?(o.classList.add("tabulator-row-even"),o.classList.remove("tabulator-row-odd")):(o.classList.add("tabulator-row-odd"),o.classList.remove("tabulator-row-even"))},RowManager.prototype._virtualRenderFill=function(t,e,o){var i=this,n=i.tableElement,l=i.element,s=0,a=0,r=0,u=0,c=!0,h=i.getDisplayRows();if(t=t||0,o=o||0,t){for(;n.firstChild;)n.removeChild(n.firstChild);var d=(i.displayRowsCount-t+1)*i.vDomRowHeight;d<i.height&&(t-=Math.ceil((i.height-d)/i.vDomRowHeight))<0&&(t=0),s=Math.min(Math.max(Math.floor(i.vDomWindowBuffer/i.vDomRowHeight),i.vDomWindowMinMarginRows),t),t-=s}else i._clearVirtualDom();if(i.displayRowsCount&&Tabulator.prototype.helpers.elVisible(i.element)){for(i.vDomTop=t,i.vDomBottom=t-1;(a<=i.height+i.vDomWindowBuffer||u<i.vDomWindowMinTotalRows)&&i.vDomBottom<i.displayRowsCount-1;){var p=i.vDomBottom+1,m=h[p],f=0;i.styleRow(m,p),n.appendChild(m.getElement()),m.initialized?m.heightInitialized||m.normalizeHeight(!0):m.initialize(!0),f=m.getHeight(),u<s?r+=f:a+=f,f>this.vDomWindowBuffer&&(this.vDomWindowBuffer=2*f),"group"!==m.type&&(c=!1),i.vDomBottom++,u++}t?(i.vDomTopPad=e?i.vDomRowHeight*this.vDomTop+o:i.scrollTop-r,i.vDomBottomPad=i.vDomBottom==i.displayRowsCount-1?0:Math.max(i.vDomScrollHeight-i.vDomTopPad-a-r,0)):(this.vDomTopPad=0,i.vDomRowHeight=Math.floor((a+r)/u),i.vDomBottomPad=i.vDomRowHeight*(i.displayRowsCount-i.vDomBottom-1),i.vDomScrollHeight=r+a+i.vDomBottomPad-i.height),n.style.paddingTop=i.vDomTopPad+"px",n.style.paddingBottom=i.vDomBottomPad+"px",e&&(this.scrollTop=i.vDomTopPad+r+o-(this.element.scrollWidth>this.element.clientWidth?this.element.offsetHeight-this.element.clientHeight:0)),this.scrollTop=Math.min(this.scrollTop,this.element.scrollHeight-this.height),this.element.scrollWidth>this.element.offsetWidth&&e&&(this.scrollTop+=this.element.offsetHeight-this.element.clientHeight),this.vDomScrollPosTop=this.scrollTop,this.vDomScrollPosBottom=this.scrollTop,l.scrollTop=this.scrollTop,n.style.minWidth=c?i.table.columnManager.getWidth()+"px":"",i.table.options.groupBy&&"fitDataFill"!=i.table.modules.layout.getMode()&&i.displayRowsCount==i.table.modules.groupRows.countGroups()&&(i.tableElement.style.minWidth=i.table.columnManager.getWidth())}else this.renderEmptyScroll();this.fixedHeight||this.adjustTableSize()},RowManager.prototype.scrollVertical=function(t){var e=this.scrollTop-this.vDomScrollPosTop,o=this.scrollTop-this.vDomScrollPosBottom,i=2*this.vDomWindowBuffer;if(-e>i||o>i){var n=this.scrollLeft;this._virtualRenderFill(Math.floor(this.element.scrollTop/this.element.scrollHeight*this.displayRowsCount)),this.scrollHorizontal(n)}else t?(e<0&&this._addTopRow(-e),o<0&&(this.vDomScrollHeight-this.scrollTop>this.vDomWindowBuffer?this._removeBottomRow(-o):this.vDomScrollPosBottom=this.scrollTop)):(e>=0&&(this.scrollTop>this.vDomWindowBuffer?this._removeTopRow(e):this.vDomScrollPosTop=this.scrollTop),o>=0&&this._addBottomRow(o))},RowManager.prototype._addTopRow=function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,o=this.tableElement,i=this.getDisplayRows();if(this.vDomTop){var n=this.vDomTop-1,l=i[n],s=l.getHeight()||this.vDomRowHeight;t>=s&&(this.styleRow(l,n),o.insertBefore(l.getElement(),o.firstChild),l.initialized&&l.heightInitialized||(this.vDomTopNewRows.push(l),l.heightInitialized||l.clearCellHeight()),l.initialize(),this.vDomTopPad-=s,this.vDomTopPad<0&&(this.vDomTopPad=n*this.vDomRowHeight),n||(this.vDomTopPad=0),o.style.paddingTop=this.vDomTopPad+"px",this.vDomScrollPosTop-=s,this.vDomTop--),t=-(this.scrollTop-this.vDomScrollPosTop),l.getHeight()>this.vDomWindowBuffer&&(this.vDomWindowBuffer=2*l.getHeight()),e<this.vDomMaxRenderChain&&this.vDomTop&&t>=(i[this.vDomTop-1].getHeight()||this.vDomRowHeight)?this._addTopRow(t,e+1):this._quickNormalizeRowHeight(this.vDomTopNewRows)}},RowManager.prototype._removeTopRow=function(t){var e=this.tableElement,o=this.getDisplayRows()[this.vDomTop],i=o.getHeight()||this.vDomRowHeight;if(t>=i){var n=o.getElement();n.parentNode.removeChild(n),this.vDomTopPad+=i,e.style.paddingTop=this.vDomTopPad+"px",this.vDomScrollPosTop+=this.vDomTop?i:i+this.vDomWindowBuffer,this.vDomTop++,t=this.scrollTop-this.vDomScrollPosTop,this._removeTopRow(t)}},RowManager.prototype._addBottomRow=function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,o=this.tableElement,i=this.getDisplayRows();if(this.vDomBottom<this.displayRowsCount-1){var n=this.vDomBottom+1,l=i[n],s=l.getHeight()||this.vDomRowHeight;t>=s&&(this.styleRow(l,n),o.appendChild(l.getElement()),l.initialized&&l.heightInitialized||(this.vDomBottomNewRows.push(l),l.heightInitialized||l.clearCellHeight()),l.initialize(),this.vDomBottomPad-=s,(this.vDomBottomPad<0||n==this.displayRowsCount-1)&&(this.vDomBottomPad=0),o.style.paddingBottom=this.vDomBottomPad+"px",this.vDomScrollPosBottom+=s,this.vDomBottom++),t=this.scrollTop-this.vDomScrollPosBottom,l.getHeight()>this.vDomWindowBuffer&&(this.vDomWindowBuffer=2*l.getHeight()),e<this.vDomMaxRenderChain&&this.vDomBottom<this.displayRowsCount-1&&t>=(i[this.vDomBottom+1].getHeight()||this.vDomRowHeight)?this._addBottomRow(t,e+1):this._quickNormalizeRowHeight(this.vDomBottomNewRows)}},RowManager.prototype._removeBottomRow=function(t){var e=this.tableElement,o=this.getDisplayRows()[this.vDomBottom],i=o.getHeight()||this.vDomRowHeight;if(t>=i){var n=o.getElement();n.parentNode&&n.parentNode.removeChild(n),this.vDomBottomPad+=i,this.vDomBottomPad<0&&(this.vDomBottomPad=0),e.style.paddingBottom=this.vDomBottomPad+"px",this.vDomScrollPosBottom-=i,this.vDomBottom--,t=-(this.scrollTop-this.vDomScrollPosBottom),this._removeBottomRow(t)}},RowManager.prototype._quickNormalizeRowHeight=function(t){t.forEach(function(t){t.calcHeight()}),t.forEach(function(t){t.setCellHeight()}),t.length=0},RowManager.prototype.normalizeHeight=function(){this.activeRows.forEach(function(t){t.normalizeHeight()})},RowManager.prototype.adjustTableSize=function(){var t,e=this.element.clientHeight;if("virtual"===this.renderMode){var o=this.columnManager.getElement().offsetHeight+(this.table.footerManager&&!this.table.footerManager.external?this.table.footerManager.getElement().offsetHeight:0);this.fixedHeight?(this.element.style.minHeight="calc(100% - "+o+"px)",this.element.style.height="calc(100% - "+o+"px)",this.element.style.maxHeight="calc(100% - "+o+"px)"):(this.element.style.height="",this.element.style.height=this.table.element.clientHeight-o+"px",this.element.scrollTop=this.scrollTop),this.height=this.element.clientHeight,this.vDomWindowBuffer=this.table.options.virtualDomBuffer||this.height,this.fixedHeight||e==this.element.clientHeight||((t=this.table.modExists("resizeTable"))&&!this.table.modules.resizeTable.autoResize||!t)&&this.redraw()}},RowManager.prototype.reinitialize=function(){this.rows.forEach(function(t){t.reinitialize()})},RowManager.prototype.blockRedraw=function(){this.redrawBlock=!0,this.redrawBlockRestoreConfig=!1},RowManager.prototype.restoreRedraw=function(){this.redrawBlock=!1,this.redrawBlockRestoreConfig?(this.refreshActiveData(this.redrawBlockRestoreConfig.stage,this.redrawBlockRestoreConfig.skipStage,this.redrawBlockRestoreConfig.renderInPosition),this.redrawBlockRestoreConfig=!1):this.redrawBlockRederInPosition&&this.reRenderInPosition(),this.redrawBlockRederInPosition=!1},
+RowManager.prototype.redraw=function(t){var e=this.scrollLeft;this.adjustTableSize(),this.table.tableWidth=this.table.element.clientWidth,t?this.renderTable():("classic"==this.renderMode?this.table.options.groupBy?this.refreshActiveData("group",!1,!1):this._simpleRender():(this.reRenderInPosition(),this.scrollHorizontal(e)),this.displayRowsCount||this.table.options.placeholder&&this.getElement().appendChild(this.table.options.placeholder))},RowManager.prototype.resetScroll=function(){if(this.element.scrollLeft=0,this.element.scrollTop=0,"ie"===this.table.browser){var t=document.createEvent("Event");t.initEvent("scroll",!1,!0),this.element.dispatchEvent(t)}else this.element.dispatchEvent(new Event("scroll"))};var RowComponent=function(t){this._row=t};RowComponent.prototype.getData=function(t){return this._row.getData(t)},RowComponent.prototype.getElement=function(){return this._row.getElement()},RowComponent.prototype.getCells=function(){var t=[];return this._row.getCells().forEach(function(e){t.push(e.getComponent())}),t},RowComponent.prototype.getCell=function(t){var e=this._row.getCell(t);return!!e&&e.getComponent()},RowComponent.prototype.getIndex=function(){return this._row.getData("data")[this._row.table.options.index]},RowComponent.prototype.getPosition=function(t){return this._row.table.rowManager.getRowPosition(this._row,t)},RowComponent.prototype.delete=function(){return this._row.delete()},RowComponent.prototype.scrollTo=function(){return this._row.table.rowManager.scrollToRow(this._row)},RowComponent.prototype.pageTo=function(){if(this._row.table.modExists("page",!0))return this._row.table.modules.page.setPageToRow(this._row)},RowComponent.prototype.move=function(t,e){this._row.moveToRow(t,e)},RowComponent.prototype.update=function(t){return this._row.updateData(t)},RowComponent.prototype.normalizeHeight=function(){this._row.normalizeHeight(!0)},RowComponent.prototype.select=function(){this._row.table.modules.selectRow.selectRows(this._row)},RowComponent.prototype.deselect=function(){this._row.table.modules.selectRow.deselectRows(this._row)},RowComponent.prototype.toggleSelect=function(){this._row.table.modules.selectRow.toggleRow(this._row)},RowComponent.prototype.isSelected=function(){return this._row.table.modules.selectRow.isRowSelected(this._row)},RowComponent.prototype._getSelf=function(){return this._row},RowComponent.prototype.validate=function(){return this._row.validate()},RowComponent.prototype.freeze=function(){this._row.table.modExists("frozenRows",!0)&&this._row.table.modules.frozenRows.freezeRow(this._row)},RowComponent.prototype.unfreeze=function(){this._row.table.modExists("frozenRows",!0)&&this._row.table.modules.frozenRows.unfreezeRow(this._row)},RowComponent.prototype.isFrozen=function(){if(this._row.table.modExists("frozenRows",!0)){return this._row.table.modules.frozenRows.rows.indexOf(this._row)>-1}return!1},RowComponent.prototype.treeCollapse=function(){this._row.table.modExists("dataTree",!0)&&this._row.table.modules.dataTree.collapseRow(this._row)},RowComponent.prototype.treeExpand=function(){this._row.table.modExists("dataTree",!0)&&this._row.table.modules.dataTree.expandRow(this._row)},RowComponent.prototype.treeToggle=function(){this._row.table.modExists("dataTree",!0)&&this._row.table.modules.dataTree.toggleRow(this._row)},RowComponent.prototype.getTreeParent=function(){return!!this._row.table.modExists("dataTree",!0)&&this._row.table.modules.dataTree.getTreeParent(this._row)},RowComponent.prototype.getTreeChildren=function(){return!!this._row.table.modExists("dataTree",!0)&&this._row.table.modules.dataTree.getTreeChildren(this._row)},RowComponent.prototype.addTreeChild=function(t,e,o){return!!this._row.table.modExists("dataTree",!0)&&this._row.table.modules.dataTree.addTreeChildRow(this._row,t,e,o)},RowComponent.prototype.reformat=function(){return this._row.reinitialize()},RowComponent.prototype.getGroup=function(){return this._row.getGroup().getComponent()},RowComponent.prototype.getTable=function(){return this._row.table},RowComponent.prototype.getNextRow=function(){var t=this._row.nextRow();return t?t.getComponent():t},RowComponent.prototype.getPrevRow=function(){var t=this._row.prevRow();return t?t.getComponent():t};var Row=function(t,e){var o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"row";this.table=e.table,this.parent=e,this.data={},this.type=o,this.element=this.createElement(),this.modules={},this.cells=[],this.height=0,this.heightStyled="",this.manualHeight=!1,this.outerHeight=0,this.initialized=!1,this.heightInitialized=!1,this.component=null,this.setData(t),this.generateElement()};Row.prototype.createElement=function(){var t=document.createElement("div");return t.classList.add("tabulator-row"),t.setAttribute("role","row"),t},Row.prototype.getElement=function(){return this.element},Row.prototype.detachElement=function(){this.element&&this.element.parentNode&&this.element.parentNode.removeChild(this.element)},Row.prototype.generateElement=function(){var t,e,o,i=this;!1!==i.table.options.selectable&&i.table.modExists("selectRow")&&i.table.modules.selectRow.initializeRow(this),!1!==i.table.options.movableRows&&i.table.modExists("moveRow")&&i.table.modules.moveRow.initializeRow(this),!1!==i.table.options.dataTree&&i.table.modExists("dataTree")&&i.table.modules.dataTree.initializeRow(this),"collapse"===i.table.options.responsiveLayout&&i.table.modExists("responsiveLayout")&&i.table.modules.responsiveLayout.initializeRow(this),i.table.options.rowContextMenu&&this.table.modExists("menu")&&i.table.modules.menu.initializeRow(this),i.table.options.rowClick&&i.element.addEventListener("click",function(t){i.table.options.rowClick(t,i.getComponent())}),i.table.options.rowDblClick&&i.element.addEventListener("dblclick",function(t){i.table.options.rowDblClick(t,i.getComponent())}),i.table.options.rowContext&&i.element.addEventListener("contextmenu",function(t){i.table.options.rowContext(t,i.getComponent())}),i.table.options.rowMouseEnter&&i.element.addEventListener("mouseenter",function(t){i.table.options.rowMouseEnter(t,i.getComponent())}),i.table.options.rowMouseLeave&&i.element.addEventListener("mouseleave",function(t){i.table.options.rowMouseLeave(t,i.getComponent())}),i.table.options.rowMouseOver&&i.element.addEventListener("mouseover",function(t){i.table.options.rowMouseOver(t,i.getComponent())}),i.table.options.rowMouseOut&&i.element.addEventListener("mouseout",function(t){i.table.options.rowMouseOut(t,i.getComponent())}),i.table.options.rowMouseMove&&i.element.addEventListener("mousemove",function(t){i.table.options.rowMouseMove(t,i.getComponent())}),i.table.options.rowTap&&(o=!1,i.element.addEventListener("touchstart",function(t){o=!0},{passive:!0}),i.element.addEventListener("touchend",function(t){o&&i.table.options.rowTap(t,i.getComponent()),o=!1})),i.table.options.rowDblTap&&(t=null,i.element.addEventListener("touchend",function(e){t?(clearTimeout(t),t=null,i.table.options.rowDblTap(e,i.getComponent())):t=setTimeout(function(){clearTimeout(t),t=null},300)})),i.table.options.rowTapHold&&(e=null,i.element.addEventListener("touchstart",function(t){clearTimeout(e),e=setTimeout(function(){clearTimeout(e),e=null,o=!1,i.table.options.rowTapHold(t,i.getComponent())},1e3)},{passive:!0}),i.element.addEventListener("touchend",function(t){clearTimeout(e),e=null}))},Row.prototype.generateCells=function(){this.cells=this.table.columnManager.generateCells(this)},Row.prototype.initialize=function(t){var e=this;if(!e.initialized||t){for(e.deleteCells();e.element.firstChild;)e.element.removeChild(e.element.firstChild);this.table.modExists("frozenColumns")&&this.table.modules.frozenColumns.layoutRow(this),this.generateCells(),e.cells.forEach(function(t){e.element.appendChild(t.getElement()),t.cellRendered()}),t&&e.normalizeHeight(),e.table.options.dataTree&&e.table.modExists("dataTree")&&e.table.modules.dataTree.layoutRow(this),"collapse"===e.table.options.responsiveLayout&&e.table.modExists("responsiveLayout")&&e.table.modules.responsiveLayout.layoutRow(this),e.table.options.rowFormatter&&e.table.options.rowFormatter(e.getComponent()),e.table.options.resizableRows&&e.table.modExists("resizeRows")&&e.table.modules.resizeRows.initializeRow(e),e.initialized=!0}},Row.prototype.reinitializeHeight=function(){this.heightInitialized=!1,null!==this.element.offsetParent&&this.normalizeHeight(!0)},Row.prototype.reinitialize=function(){this.initialized=!1,this.heightInitialized=!1,this.manualHeight||(this.height=0,this.heightStyled=""),null!==this.element.offsetParent&&this.initialize(!0)},Row.prototype.calcHeight=function(t){var e=0,o=this.table.options.resizableRows?this.element.clientHeight:0;this.cells.forEach(function(t){var o=t.getHeight();o>e&&(e=o)}),this.height=t?Math.max(e,o):this.manualHeight?this.height:Math.max(e,o),this.heightStyled=this.height?this.height+"px":"",this.outerHeight=this.element.offsetHeight},Row.prototype.setCellHeight=function(){this.cells.forEach(function(t){t.setHeight()}),this.heightInitialized=!0},Row.prototype.clearCellHeight=function(){this.cells.forEach(function(t){t.clearHeight()})},Row.prototype.normalizeHeight=function(t){t&&this.clearCellHeight(),this.calcHeight(t),this.setCellHeight()},Row.prototype.setHeight=function(t,e){(this.height!=t||e)&&(this.manualHeight=!0,this.height=t,this.heightStyled=t?t+"px":"",this.setCellHeight(),this.outerHeight=this.element.offsetHeight)},Row.prototype.getHeight=function(){return this.outerHeight},Row.prototype.getWidth=function(){return this.element.offsetWidth},Row.prototype.deleteCell=function(t){var e=this.cells.indexOf(t);e>-1&&this.cells.splice(e,1)},Row.prototype.setData=function(t){this.table.modExists("mutator")&&(t=this.table.modules.mutator.transformRow(t,"data")),this.data=t,this.table.options.reactiveData&&this.table.modExists("reactiveData",!0)&&this.table.modules.reactiveData.watchRow(this)},Row.prototype.updateData=function(t){var e,o=this,i=Tabulator.prototype.helpers.elVisible(this.element),n={};return new Promise(function(l,s){"string"==typeof t&&(t=JSON.parse(t)),o.table.options.reactiveData&&o.table.modExists("reactiveData",!0)&&o.table.modules.reactiveData.block(),o.table.modExists("mutator")?(n=Object.assign(n,o.data),n=Object.assign(n,t),e=o.table.modules.mutator.transformRow(n,"data",t)):e=t;for(var a in e)o.data[a]=e[a];o.table.options.reactiveData&&o.table.modExists("reactiveData",!0)&&o.table.modules.reactiveData.unblock();for(var a in t){o.table.columnManager.getColumnsByFieldRoot(a).forEach(function(t){var n=o.getCell(t.getField());if(n){var l=t.getFieldValue(e);n.getValue()!=l&&(n.setValueProcessData(l),i&&n.cellRendered())}})}i?(o.normalizeHeight(!0),o.table.options.rowFormatter&&o.table.options.rowFormatter(o.getComponent())):(o.initialized=!1,o.height=0,o.heightStyled=""),!1!==o.table.options.dataTree&&o.table.modExists("dataTree")&&o.table.modules.dataTree.redrawNeeded(t)&&(o.table.modules.dataTree.initializeRow(o),o.table.modules.dataTree.layoutRow(o),o.table.rowManager.refreshActiveData("tree",!1,!0)),o.table.options.rowUpdated.call(o.table,o.getComponent()),l()})},Row.prototype.getData=function(t){var e=this;return t?e.table.modExists("accessor")?e.table.modules.accessor.transformRow(e.data,t):void 0:this.data},Row.prototype.getCell=function(t){return t=this.table.columnManager.findColumn(t),this.cells.find(function(e){return e.column===t})},Row.prototype.getCellIndex=function(t){return this.cells.findIndex(function(e){return e===t})},Row.prototype.findNextEditableCell=function(t){var e=!1;if(t<this.cells.length-1)for(var o=t+1;o<this.cells.length;o++){var i=this.cells[o];if(i.column.modules.edit&&Tabulator.prototype.helpers.elVisible(i.getElement())){var n=!0;if("function"==typeof i.column.modules.edit.check&&(n=i.column.modules.edit.check(i.getComponent())),n){e=i;break}}}return e},Row.prototype.findPrevEditableCell=function(t){var e=!1;if(t>0)for(var o=t-1;o>=0;o--){var i=this.cells[o],n=!0;if(i.column.modules.edit&&Tabulator.prototype.helpers.elVisible(i.getElement())&&("function"==typeof i.column.modules.edit.check&&(n=i.column.modules.edit.check(i.getComponent())),n)){e=i;break}}return e},Row.prototype.getCells=function(){return this.cells},Row.prototype.nextRow=function(){return this.table.rowManager.nextDisplayRow(this,!0)||!1},Row.prototype.prevRow=function(){return this.table.rowManager.prevDisplayRow(this,!0)||!1},Row.prototype.moveToRow=function(t,e){var o=this.table.rowManager.findRow(t);o?(this.table.rowManager.moveRowActual(this,o,!e),this.table.rowManager.refreshActiveData("display",!1,!0)):console.warn("Move Error - No matching row found:",t)},Row.prototype.validate=function(){var t=[];return this.cells.forEach(function(e){e.validate()||t.push(e.getComponent())}),!t.length||t},Row.prototype.delete=function(){var t=this;return new Promise(function(e,o){var i,n;t.table.options.history&&t.table.modExists("history")&&(t.table.options.groupBy&&t.table.modExists("groupRows")?(n=t.getGroup().rows,(i=n.indexOf(t))&&(i=n[i-1])):(i=t.table.rowManager.getRowIndex(t))&&(i=t.table.rowManager.rows[i-1]),t.table.modules.history.action("rowDelete",t,{data:t.getData(),pos:!i,index:i})),t.deleteActual(),e()})},Row.prototype.deleteActual=function(t){this.table.rowManager.getRowIndex(this);this.table.modExists("selectRow")&&this.table.modules.selectRow._deselectRow(this,!0),this.table.modExists("edit")&&this.table.modules.edit.currentCell.row===this&&this.table.modules.edit.cancelEdit(),this.table.options.reactiveData&&this.table.modExists("reactiveData",!0),this.modules.group&&this.modules.group.removeRow(this),this.table.rowManager.deleteRow(this,t),this.deleteCells(),this.initialized=!1,this.heightInitialized=!1,this.table.options.dataTree&&this.table.modExists("dataTree",!0)&&this.table.modules.dataTree.rowDelete(this),this.table.modExists("columnCalcs")&&(this.table.options.groupBy&&this.table.modExists("groupRows")?this.table.modules.columnCalcs.recalcRowGroup(this):this.table.modules.columnCalcs.recalc(this.table.rowManager.activeRows))},Row.prototype.deleteCells=function(){for(var t=this.cells.length,e=0;e<t;e++)this.cells[0].delete()},Row.prototype.wipe=function(){for(this.deleteCells();this.element.firstChild;)this.element.removeChild(this.element.firstChild);this.element=!1,this.modules={},this.element.parentNode&&this.element.parentNode.removeChild(this.element)},Row.prototype.getGroup=function(){return this.modules.group||!1},Row.prototype.getComponent=function(){return this.component||(this.component=new RowComponent(this)),this.component};var CellComponent=function(t){this._cell=t};CellComponent.prototype.getValue=function(){return this._cell.getValue()},CellComponent.prototype.getOldValue=function(){return this._cell.getOldValue()},CellComponent.prototype.getElement=function(){return this._cell.getElement()},CellComponent.prototype.getRow=function(){return this._cell.row.getComponent()},CellComponent.prototype.getData=function(){return this._cell.row.getData()},CellComponent.prototype.getField=function(){return this._cell.column.getField()},CellComponent.prototype.getColumn=function(){return this._cell.column.getComponent()},CellComponent.prototype.setValue=function(t,e){void 0===e&&(e=!0),this._cell.setValue(t,e)},CellComponent.prototype.restoreOldValue=function(){this._cell.setValueActual(this._cell.getOldValue())},CellComponent.prototype.edit=function(t){return this._cell.edit(t)},CellComponent.prototype.cancelEdit=function(){this._cell.cancelEdit()},CellComponent.prototype.isEdited=function(){return!!this._cell.modules.edit&&this._cell.modules.edit.edited},CellComponent.prototype.clearEdited=function(){self.table.modExists("edit",!0)&&this._cell.table.modules.edit.clearEdited(this._cell)},CellComponent.prototype.isValid=function(){return!this._cell.modules.validate||!this._cell.modules.validate.invalid},CellComponent.prototype.validate=function(){return this._cell.validate()},CellComponent.prototype.clearValidation=function(){self.table.modExists("validate",!0)&&this._cell.table.modules.validate.clearValidation(this._cell)},CellComponent.prototype.nav=function(){return this._cell.nav()},CellComponent.prototype.checkHeight=function(){this._cell.checkHeight()},CellComponent.prototype.getTable=function(){return this._cell.table},CellComponent.prototype._getSelf=function(){return this._cell};var Cell=function(t,e){this.table=t.table,this.column=t,this.row=e,this.element=null,this.value=null,this.oldValue=null,this.modules={},this.height=null,this.width=null,this.minWidth=null,this.component=null,this.build()};Cell.prototype.build=function(){this.generateElement(),this.setWidth(),this._configureCell(),this.setValueActual(this.column.getFieldValue(this.row.data))},Cell.prototype.generateElement=function(){this.element=document.createElement("div"),this.element.className="tabulator-cell",this.element.setAttribute("role","gridcell"),this.element=this.element},Cell.prototype._configureCell=function(){var t=this,e=t.column.cellEvents,o=t.element,i=this.column.getField(),n={top:"flex-start",bottom:"flex-end",middle:"center"},l={left:"flex-start",right:"flex-end",center:"center"};if(o.style.textAlign=t.column.hozAlign,t.column.vertAlign&&(o.style.display="inline-flex",o.style.alignItems=n[t.column.vertAlign]||"",t.column.hozAlign&&(o.style.justifyContent=l[t.column.hozAlign]||"")),i&&o.setAttribute("tabulator-field",i),t.column.definition.cssClass){t.column.definition.cssClass.split(" ").forEach(function(t){o.classList.add(t)})}"hover"===this.table.options.tooltipGenerationMode&&o.addEventListener("mouseenter",function(e){t._generateTooltip()}),t._bindClickEvents(e),t._bindTouchEvents(e),t._bindMouseEvents(e),t.column.modules.edit&&t.table.modules.edit.bindEditor(t),t.column.definition.rowHandle&&!1!==t.table.options.movableRows&&t.table.modExists("moveRow")&&t.table.modules.moveRow.initializeCell(t),t.column.visible||t.hide()},Cell.prototype._bindClickEvents=function(t){var e=this,o=e.element;(t.cellClick||e.table.options.cellClick)&&o.addEventListener("click",function(o){var i=e.getComponent();t.cellClick&&t.cellClick.call(e.table,o,i),e.table.options.cellClick&&e.table.options.cellClick.call(e.table,o,i)}),t.cellDblClick||this.table.options.cellDblClick?o.addEventListener("dblclick",function(o){var i=e.getComponent();t.cellDblClick&&t.cellDblClick.call(e.table,o,i),e.table.options.cellDblClick&&e.table.options.cellDblClick.call(e.table,o,i)}):o.addEventListener("dblclick",function(t){if(!e.table.modExists("edit")||e.table.modules.edit.currentCell!==e){t.preventDefault();try{if(document.selection){var o=document.body.createTextRange();o.moveToElementText(e.element),o.select()}else if(window.getSelection){var o=document.createRange();o.selectNode(e.element),window.getSelection().removeAllRanges(),window.getSelection().addRange(o)}}catch(t){}}}),(t.cellContext||this.table.options.cellContext)&&o.addEventListener("contextmenu",function(o){var i=e.getComponent();t.cellContext&&t.cellContext.call(e.table,o,i),e.table.options.cellContext&&e.table.options.cellContext.call(e.table,o,i)})},Cell.prototype._bindMouseEvents=function(t){var e=this,o=e.element;(t.cellMouseEnter||e.table.options.cellMouseEnter)&&o.addEventListener("mouseenter",function(o){var i=e.getComponent();t.cellMouseEnter&&t.cellMouseEnter.call(e.table,o,i),e.table.options.cellMouseEnter&&e.table.options.cellMouseEnter.call(e.table,o,i)}),(t.cellMouseLeave||e.table.options.cellMouseLeave)&&o.addEventListener("mouseleave",function(o){var i=e.getComponent();t.cellMouseLeave&&t.cellMouseLeave.call(e.table,o,i),e.table.options.cellMouseLeave&&e.table.options.cellMouseLeave.call(e.table,o,i)}),(t.cellMouseOver||e.table.options.cellMouseOver)&&o.addEventListener("mouseover",function(o){var i=e.getComponent();t.cellMouseOver&&t.cellMouseOver.call(e.table,o,i),e.table.options.cellMouseOver&&e.table.options.cellMouseOver.call(e.table,o,i)}),(t.cellMouseOut||e.table.options.cellMouseOut)&&o.addEventListener("mouseout",function(o){var i=e.getComponent();t.cellMouseOut&&t.cellMouseOut.call(e.table,o,i),e.table.options.cellMouseOut&&e.table.options.cellMouseOut.call(e.table,o,i)}),(t.cellMouseMove||e.table.options.cellMouseMove)&&o.addEventListener("mousemove",function(o){var i=e.getComponent();t.cellMouseMove&&t.cellMouseMove.call(e.table,o,i),e.table.options.cellMouseMove&&e.table.options.cellMouseMove.call(e.table,o,i)})},Cell.prototype._bindTouchEvents=function(t){var e,o,i,n=this,l=n.element;(t.cellTap||this.table.options.cellTap)&&(i=!1,l.addEventListener("touchstart",function(t){i=!0},{passive:!0}),l.addEventListener("touchend",function(e){if(i){var o=n.getComponent();t.cellTap&&t.cellTap.call(n.table,e,o),n.table.options.cellTap&&n.table.options.cellTap.call(n.table,e,o)}i=!1})),(t.cellDblTap||this.table.options.cellDblTap)&&(e=null,l.addEventListener("touchend",function(o){if(e){clearTimeout(e),e=null;var i=n.getComponent();t.cellDblTap&&t.cellDblTap.call(n.table,o,i),n.table.options.cellDblTap&&n.table.options.cellDblTap.call(n.table,o,i)}else e=setTimeout(function(){clearTimeout(e),e=null},300)})),(t.cellTapHold||this.table.options.cellTapHold)&&(o=null,l.addEventListener("touchstart",function(e){clearTimeout(o),o=setTimeout(function(){clearTimeout(o),o=null,i=!1;var l=n.getComponent();t.cellTapHold&&t.cellTapHold.call(n.table,e,l),n.table.options.cellTapHold&&n.table.options.cellTapHold.call(n.table,e,l)},1e3)},{passive:!0}),l.addEventListener("touchend",function(t){clearTimeout(o),o=null}))},Cell.prototype._generateContents=function(){var t;switch(t=this.table.modExists("format")?this.table.modules.format.formatValue(this):this.element.innerHTML=this.value,void 0===t?"undefined":_typeof(t)){case"object":if(t instanceof Node){for(;this.element.firstChild;)this.element.removeChild(this.element.firstChild);this.element.appendChild(t)}else this.element.innerHTML="",null!=t&&console.warn("Format Error - Formatter has returned a type of object, the only valid formatter object return is an instance of Node, the formatter returned:",t);break;case"undefined":case"null":this.element.innerHTML="";break;default:this.element.innerHTML=t}},Cell.prototype.cellRendered=function(){this.table.modExists("format")&&this.table.modules.format.cellRendered&&this.table.modules.format.cellRendered(this)},Cell.prototype._generateTooltip=function(){var t=this.column.tooltip;t?(!0===t?t=this.value:"function"==typeof t&&!1===(t=t(this.getComponent()))&&(t=""),void 0===t&&(t=""),this.element.setAttribute("title",t)):this.element.setAttribute("title","")},Cell.prototype.getElement=function(){return this.element},Cell.prototype.getValue=function(){return this.value},Cell.prototype.getOldValue=function(){return this.oldValue},Cell.prototype.setValue=function(t,e){var o,i=this.setValueProcessData(t,e);i&&(this.table.options.history&&this.table.modExists("history")&&this.table.modules.history.action("cellEdit",this,{oldValue:this.oldValue,newValue:this.value}),o=this.getComponent(),this.column.cellEvents.cellEdited&&this.column.cellEvents.cellEdited.call(this.table,o),this.cellRendered(),this.table.options.cellEdited.call(this.table,o),this.table.options.dataEdited.call(this.table,this.table.rowManager.getData()))},Cell.prototype.setValueProcessData=function(t,e){var o=!1;return this.value!=t&&(o=!0,e&&this.column.modules.mutate&&(t=this.table.modules.mutator.transformCell(this,t))),this.setValueActual(t),o&&this.table.modExists("columnCalcs")&&(this.column.definition.topCalc||this.column.definition.bottomCalc)&&(this.table.options.groupBy&&this.table.modExists("groupRows")?("table"!=this.table.options.columnCalcs&&"both"!=this.table.options.columnCalcs||this.table.modules.columnCalcs.recalc(this.table.rowManager.activeRows),"table"!=this.table.options.columnCalcs&&this.table.modules.columnCalcs.recalcRowGroup(this.row)):this.table.modules.columnCalcs.recalc(this.table.rowManager.activeRows)),o},Cell.prototype.setValueActual=function(t){this.oldValue=this.value,this.value=t,this.table.options.reactiveData&&this.table.modExists("reactiveData")&&this.table.modules.reactiveData.block(),this.column.setFieldValue(this.row.data,t),this.table.options.reactiveData&&this.table.modExists("reactiveData")&&this.table.modules.reactiveData.unblock(),this._generateContents(),this._generateTooltip(),this.table.options.resizableColumns&&this.table.modExists("resizeColumns")&&this.table.modules.resizeColumns.initializeColumn("cell",this.column,this.element),this.column.definition.contextMenu&&this.table.modExists("menu")&&this.table.modules.menu.initializeCell(this),this.table.modExists("frozenColumns")&&this.table.modules.frozenColumns.layoutElement(this.element,this.column)},Cell.prototype.setWidth=function(){this.width=this.column.width,this.element.style.width=this.column.widthStyled},Cell.prototype.clearWidth=function(){this.width="",this.element.style.width=""},Cell.prototype.getWidth=function(){return this.width||this.element.offsetWidth},Cell.prototype.setMinWidth=function(){this.minWidth=this.column.minWidth,this.element.style.minWidth=this.column.minWidthStyled},Cell.prototype.checkHeight=function(){this.row.reinitializeHeight()},Cell.prototype.clearHeight=function(){this.element.style.height="",this.height=null},Cell.prototype.setHeight=function(){this.height=this.row.height,this.element.style.height=this.row.heightStyled},Cell.prototype.getHeight=function(){return this.height||this.element.offsetHeight},Cell.prototype.show=function(){this.element.style.display=""},Cell.prototype.hide=function(){this.element.style.display="none"},Cell.prototype.edit=function(t){if(this.table.modExists("edit",!0))return this.table.modules.edit.editCell(this,t)},Cell.prototype.cancelEdit=function(){if(this.table.modExists("edit",!0)){var t=this.table.modules.edit.getCurrentCell();t&&t._getSelf()===this?this.table.modules.edit.cancelEdit():console.warn("Cancel Editor Error - This cell is not currently being edited ")}},Cell.prototype.validate=function(){if(this.column.modules.validate&&this.table.modExists("validate",!0)){return!0===this.table.modules.validate.validate(this.column.modules.validate,this,this.getValue())}return!0},Cell.prototype.delete=function(){this.table.rowManager.redrawBlock||this.element.parentNode.removeChild(this.element),this.modules.validate&&this.modules.validate.invalid&&this.table.modules.validate.clearValidation(this),this.modules.edit&&this.modules.edit.edited&&this.table.modules.edit.clearEdited(this),this.element=!1,this.column.deleteCell(this),this.row.deleteCell(this),this.calcs={}},Cell.prototype.nav=function(){var t=this,e=!1,o=this.row.getCellIndex(this);return{next:function(){var e,o=this.right();return!!o||!(!(e=t.table.rowManager.nextDisplayRow(t.row,!0))||!(o=e.findNextEditableCell(-1)))&&(o.edit(),!0)},prev:function(){var e,o=this.left();return!!o||!(!(e=t.table.rowManager.prevDisplayRow(t.row,!0))||!(o=e.findPrevEditableCell(e.cells.length)))&&(o.edit(),!0)},left:function(){return!!(e=t.row.findPrevEditableCell(o))&&(e.edit(),!0)},right:function(){return!!(e=t.row.findNextEditableCell(o))&&(e.edit(),!0)},up:function(){var e=t.table.rowManager.prevDisplayRow(t.row,!0);e&&e.cells[o].edit()},down:function(){var e=t.table.rowManager.nextDisplayRow(t.row,!0);e&&e.cells[o].edit()}}},Cell.prototype.getIndex=function(){this.row.getCellIndex(this)},Cell.prototype.getComponent=function(){return this.component||(this.component=new CellComponent(this)),this.component};var FooterManager=function(t){this.table=t,this.active=!1,this.element=this.createElement(),this.external=!1,this.links=[],this._initialize()};FooterManager.prototype.createElement=function(){var t=document.createElement("div");return t.classList.add("tabulator-footer"),t},FooterManager.prototype._initialize=function(t){if(this.table.options.footerElement)switch(_typeof(this.table.options.footerElement)){case"string":"<"===this.table.options.footerElement[0]?this.element.innerHTML=this.table.options.footerElement:(this.external=!0,this.element=document.querySelector(this.table.options.footerElement));break;default:this.element=this.table.options.footerElement}},FooterManager.prototype.getElement=function(){return this.element},FooterManager.prototype.append=function(t,e){this.activate(e),this.element.appendChild(t),this.table.rowManager.adjustTableSize()},FooterManager.prototype.prepend=function(t,e){this.activate(e),this.element.insertBefore(t,this.element.firstChild),this.table.rowManager.adjustTableSize()},FooterManager.prototype.remove=function(t){t.parentNode.removeChild(t),this.deactivate()},FooterManager.prototype.deactivate=function(t){this.element.firstChild&&!t||(this.external||this.element.parentNode.removeChild(this.element),this.active=!1)},FooterManager.prototype.activate=function(t){this.active||(this.active=!0,this.external||(this.table.element.appendChild(this.getElement()),this.table.element.style.display="")),t&&this.links.push(t)},FooterManager.prototype.redraw=function(){this.links.forEach(function(t){t.footerRedraw()})};var Tabulator=function t(e,o){this.options={},this.columnManager=null,this.rowManager=null,this.footerManager=null,this.browser="",this.browserSlow=!1,this.browserMobile=!1,this.modules={},this.initializeElement(e),this.initializeOptions(o||{}),this._create(),t.prototype.comms.register(this)};Tabulator.prototype.defaultOptions={height:!1,minHeight:!1,maxHeight:!1,layout:"fitData",layoutColumnsOnNewData:!1,columnMinWidth:40,columnHeaderVertAlign:"top",columnVertAlign:!1,resizableColumns:!0,resizableRows:!1,autoResize:!0,columns:[],cellHozAlign:"",cellVertAlign:"",data:[],autoColumns:!1,reactiveData:!1,nestedFieldSeparator:".",tooltips:!1,tooltipsHeader:!1,tooltipGenerationMode:"load",initialSort:!1,initialFilter:!1,initialHeaderFilter:!1,columnHeaderSortMulti:!0,sortOrderReverse:!1,headerSort:!0,headerSortTristate:!1,footerElement:!1,index:"id",keybindings:[],tabEndNewRow:!1,invalidOptionWarnings:!0,clipboard:!1,clipboardCopyStyled:!0,clipboardCopyConfig:!1,clipboardCopyFormatter:!1,clipboardCopyRowRange:"active",clipboardPasteParser:"table",clipboardPasteAction:"insert",clipboardCopied:function(){},clipboardPasted:function(){},clipboardPasteError:function(){},downloadDataFormatter:!1,downloadReady:function(t,e){return e},downloadComplete:!1,downloadConfig:{},downloadRowRange:"active",dataTree:!1,dataTreeElementColumn:!1,dataTreeBranchElement:!0,dataTreeChildIndent:9,dataTreeChildField:"_children",dataTreeCollapseElement:!1,dataTreeExpandElement:!1,dataTreeStartExpanded:!1,dataTreeRowExpanded:function(){},dataTreeRowCollapsed:function(){},dataTreeChildColumnCalcs:!1,dataTreeSelectPropagate:!1,printAsHtml:!1,printFormatter:!1,printHeader:!1,printFooter:!1,printCopyStyle:!0,printStyled:!0,printVisibleRows:!0,printRowRange:"visible",printConfig:{},addRowPos:"bottom",selectable:"highlight",selectableRangeMode:"drag",selectableRollingSelection:!0,selectablePersistence:!0,selectableCheck:function(t,e){return!0},headerFilterLiveFilterDelay:300,headerFilterPlaceholder:!1,headerVisible:!0,history:!1,locale:!1,langs:{},virtualDom:!0,virtualDomBuffer:0,persistentLayout:!1,persistentSort:!1,persistentFilter:!1,persistenceID:"",persistenceMode:!0,persistenceReaderFunc:!1,persistenceWriterFunc:!1,persistence:!1,responsiveLayout:!1,responsiveLayoutCollapseStartOpen:!0,responsiveLayoutCollapseUseFormatters:!0,responsiveLayoutCollapseFormatter:!1,pagination:!1,paginationSize:!1,paginationInitialPage:1,paginationButtonCount:5,paginationSizeSelector:!1,paginationElement:!1,paginationDataSent:{},paginationDataReceived:{},paginationAddRow:"page",ajaxURL:!1,ajaxURLGenerator:!1,ajaxParams:{},ajaxConfig:"get",ajaxContentType:"form",ajaxRequestFunc:!1,ajaxLoader:!0,ajaxLoaderLoading:!1,ajaxLoaderError:!1,ajaxFiltering:!1,ajaxSorting:!1,ajaxProgressiveLoad:!1,ajaxProgressiveLoadDelay:0,ajaxProgressiveLoadScrollMargin:0,groupBy:!1,groupStartOpen:!0,groupValues:!1,groupHeader:!1,groupHeaderPrint:null,
+groupHeaderClipboard:null,groupHeaderHtmlOutput:null,groupHeaderDownload:null,htmlOutputConfig:!1,movableColumns:!1,movableRows:!1,movableRowsConnectedTables:!1,movableRowsConnectedElements:!1,movableRowsSender:!1,movableRowsReceiver:"insert",movableRowsSendingStart:function(){},movableRowsSent:function(){},movableRowsSentFailed:function(){},movableRowsSendingStop:function(){},movableRowsReceivingStart:function(){},movableRowsReceived:function(){},movableRowsReceivedFailed:function(){},movableRowsReceivingStop:function(){},movableRowsElementDrop:function(){},scrollToRowPosition:"top",scrollToRowIfVisible:!0,scrollToColumnPosition:"left",scrollToColumnIfVisible:!0,rowFormatter:!1,rowFormatterPrint:null,rowFormatterClipboard:null,rowFormatterHtmlOutput:null,placeholder:!1,tableBuilding:function(){},tableBuilt:function(){},renderStarted:function(){},renderComplete:function(){},rowClick:!1,rowDblClick:!1,rowContext:!1,rowTap:!1,rowDblTap:!1,rowTapHold:!1,rowMouseEnter:!1,rowMouseLeave:!1,rowMouseOver:!1,rowMouseOut:!1,rowMouseMove:!1,rowContextMenu:!1,rowAdded:function(){},rowDeleted:function(){},rowMoved:function(){},rowUpdated:function(){},rowSelectionChanged:function(){},rowSelected:function(){},rowDeselected:function(){},rowResized:function(){},cellClick:!1,cellDblClick:!1,cellContext:!1,cellTap:!1,cellDblTap:!1,cellTapHold:!1,cellMouseEnter:!1,cellMouseLeave:!1,cellMouseOver:!1,cellMouseOut:!1,cellMouseMove:!1,cellEditing:function(){},cellEdited:function(){},cellEditCancelled:function(){},columnMoved:!1,columnResized:function(){},columnTitleChanged:function(){},columnVisibilityChanged:function(){},htmlImporting:function(){},htmlImported:function(){},dataLoading:function(){},dataLoaded:function(){},dataEdited:function(){},ajaxRequesting:function(){},ajaxResponse:!1,ajaxError:function(){},dataFiltering:!1,dataFiltered:!1,dataSorting:function(){},dataSorted:function(){},groupToggleElement:"arrow",groupClosedShowCalcs:!1,dataGrouping:function(){},dataGrouped:!1,groupVisibilityChanged:function(){},groupClick:!1,groupDblClick:!1,groupContext:!1,groupContextMenu:!1,groupTap:!1,groupDblTap:!1,groupTapHold:!1,columnCalcs:!0,pageLoaded:function(){},localized:function(){},validationMode:"blocking",validationFailed:function(){},historyUndo:function(){},historyRedo:function(){},scrollHorizontal:function(){},scrollVertical:function(){}},Tabulator.prototype.initializeOptions=function(t){if(!1!==t.invalidOptionWarnings)for(var e in t)void 0===this.defaultOptions[e]&&console.warn("Invalid table constructor option:",e);for(var e in this.defaultOptions)e in t?this.options[e]=t[e]:Array.isArray(this.defaultOptions[e])?this.options[e]=[]:"object"===_typeof(this.defaultOptions[e])&&null!==this.defaultOptions[e]?this.options[e]={}:this.options[e]=this.defaultOptions[e]},Tabulator.prototype.initializeElement=function(t){return"undefined"!=typeof HTMLElement&&t instanceof HTMLElement?(this.element=t,!0):"string"==typeof t?(this.element=document.querySelector(t),!!this.element||(console.error("Tabulator Creation Error - no element found matching selector: ",t),!1)):(console.error("Tabulator Creation Error - Invalid element provided:",t),!1)},Tabulator.prototype._mapDepricatedFunctionality=function(){(this.options.persistentLayout||this.options.persistentSort||this.options.persistentFilter)&&(this.options.persistence||(this.options.persistence={})),this.options.downloadDataFormatter&&console.warn("DEPRECATION WARNING - downloadDataFormatter option has been deprecated"),void 0!==this.options.clipboardCopyHeader&&(this.options.columnHeaders=this.options.clipboardCopyHeader,console.warn("DEPRECATION WARNING - clipboardCopyHeader option has been deprecated, please use the columnHeaders property on the clipboardCopyConfig option")),!0!==this.options.printVisibleRows&&(console.warn("printVisibleRows option is deprecated, you should now use the printRowRange option"),this.options.persistence.printRowRange="active"),!0!==this.options.printCopyStyle&&(console.warn("printCopyStyle option is deprecated, you should now use the printStyled option"),this.options.persistence.printStyled=this.options.printCopyStyle),this.options.persistentLayout&&(console.warn("persistentLayout option is deprecated, you should now use the persistence option"),!0!==this.options.persistence&&void 0===this.options.persistence.columns&&(this.options.persistence.columns=!0)),this.options.persistentSort&&(console.warn("persistentSort option is deprecated, you should now use the persistence option"),!0!==this.options.persistence&&void 0===this.options.persistence.sort&&(this.options.persistence.sort=!0)),this.options.persistentFilter&&(console.warn("persistentFilter option is deprecated, you should now use the persistence option"),!0!==this.options.persistence&&void 0===this.options.persistence.filter&&(this.options.persistence.filter=!0)),this.options.columnVertAlign&&(console.warn("columnVertAlign option is deprecated, you should now use the columnHeaderVertAlign option"),this.options.columnHeaderVertAlign=this.options.columnVertAlign)},Tabulator.prototype._clearSelection=function(){this.element.classList.add("tabulator-block-select"),window.getSelection?window.getSelection().empty?window.getSelection().empty():window.getSelection().removeAllRanges&&window.getSelection().removeAllRanges():document.selection&&document.selection.empty(),this.element.classList.remove("tabulator-block-select")},Tabulator.prototype._create=function(){this._clearObjectPointers(),this._mapDepricatedFunctionality(),this.bindModules(),"TABLE"===this.element.tagName&&this.modExists("htmlTableImport",!0)&&this.modules.htmlTableImport.parseTable(),this.columnManager=new ColumnManager(this),this.rowManager=new RowManager(this),this.footerManager=new FooterManager(this),this.columnManager.setRowManager(this.rowManager),this.rowManager.setColumnManager(this.columnManager),this._buildElement(),this._loadInitialData()},Tabulator.prototype._clearObjectPointers=function(){this.options.columns=this.options.columns.slice(0),this.options.reactiveData||(this.options.data=this.options.data.slice(0))},Tabulator.prototype._buildElement=function(){var t=this,e=this.element,o=this.modules,i=this.options;for(i.tableBuilding.call(this),e.classList.add("tabulator"),e.setAttribute("role","grid");e.firstChild;)e.removeChild(e.firstChild);i.height&&(i.height=isNaN(i.height)?i.height:i.height+"px",e.style.height=i.height),!1!==i.minHeight&&(i.minHeight=isNaN(i.minHeight)?i.minHeight:i.minHeight+"px",e.style.minHeight=i.minHeight),!1!==i.maxHeight&&(i.maxHeight=isNaN(i.maxHeight)?i.maxHeight:i.maxHeight+"px",e.style.maxHeight=i.maxHeight),this.columnManager.initialize(),this.rowManager.initialize(),this._detectBrowser(),this.modExists("layout",!0)&&o.layout.initialize(i.layout),!1!==i.headerFilterPlaceholder&&o.localize.setHeaderFilterPlaceholder(i.headerFilterPlaceholder);for(var n in i.langs)o.localize.installLang(n,i.langs[n]);if(o.localize.setLocale(i.locale),"string"==typeof i.placeholder){var l=document.createElement("div");l.classList.add("tabulator-placeholder");var s=document.createElement("span");s.innerHTML=i.placeholder,l.appendChild(s),i.placeholder=l}if(e.appendChild(this.columnManager.getElement()),e.appendChild(this.rowManager.getElement()),i.footerElement&&this.footerManager.activate(),i.persistence&&this.modExists("persistence",!0)&&o.persistence.initialize(),i.persistence&&this.modExists("persistence",!0)&&o.persistence.config.columns&&(i.columns=o.persistence.load("columns",i.columns)),i.movableRows&&this.modExists("moveRow")&&o.moveRow.initialize(),i.autoColumns&&this.options.data&&this.columnManager.generateColumnsFromRowData(this.options.data),this.modExists("columnCalcs")&&o.columnCalcs.initialize(),this.columnManager.setColumns(i.columns),i.dataTree&&this.modExists("dataTree",!0)&&o.dataTree.initialize(),this.modExists("frozenRows")&&this.modules.frozenRows.initialize(),(i.persistence&&this.modExists("persistence",!0)&&o.persistence.config.sort||i.initialSort)&&this.modExists("sort",!0)){var a=[];i.persistence&&this.modExists("persistence",!0)&&o.persistence.config.sort?!1===(a=o.persistence.load("sort"))&&i.initialSort&&(a=i.initialSort):i.initialSort&&(a=i.initialSort),o.sort.setSort(a)}if((i.persistence&&this.modExists("persistence",!0)&&o.persistence.config.filter||i.initialFilter)&&this.modExists("filter",!0)){var r=[];i.persistence&&this.modExists("persistence",!0)&&o.persistence.config.filter?!1===(r=o.persistence.load("filter"))&&i.initialFilter&&(r=i.initialFilter):i.initialFilter&&(r=i.initialFilter),o.filter.setFilter(r)}i.initialHeaderFilter&&this.modExists("filter",!0)&&i.initialHeaderFilter.forEach(function(e){var i=t.columnManager.findColumn(e.field);if(!i)return console.warn("Column Filter Error - No matching column found:",e.field),!1;o.filter.setHeaderFilterValue(i,e.value)}),this.modExists("ajax")&&o.ajax.initialize(),i.pagination&&this.modExists("page",!0)&&o.page.initialize(),i.groupBy&&this.modExists("groupRows",!0)&&o.groupRows.initialize(),this.modExists("keybindings")&&o.keybindings.initialize(),this.modExists("selectRow")&&o.selectRow.clearSelectionData(!0),i.autoResize&&this.modExists("resizeTable")&&o.resizeTable.initialize(),this.modExists("clipboard")&&o.clipboard.initialize(),i.printAsHtml&&this.modExists("print")&&o.print.initialize(),i.tableBuilt.call(this)},Tabulator.prototype._loadInitialData=function(){var t=this;if(t.options.pagination&&t.modExists("page"))if(t.modules.page.reset(!0,!0),"local"==t.options.pagination){if(t.options.data.length)t.rowManager.setData(t.options.data,!1,!0);else{if((t.options.ajaxURL||t.options.ajaxURLGenerator)&&t.modExists("ajax"))return void t.modules.ajax.loadData(!1,!0).then(function(){}).catch(function(){t.options.paginationInitialPage&&t.modules.page.setPage(t.options.paginationInitialPage)});t.rowManager.setData(t.options.data,!1,!0)}t.options.paginationInitialPage&&t.modules.page.setPage(t.options.paginationInitialPage)}else t.options.ajaxURL?t.modules.page.setPage(t.options.paginationInitialPage).then(function(){}).catch(function(){}):t.rowManager.setData([],!1,!0);else t.options.data.length?t.rowManager.setData(t.options.data):(t.options.ajaxURL||t.options.ajaxURLGenerator)&&t.modExists("ajax")?t.modules.ajax.loadData(!1,!0).then(function(){}).catch(function(){}):t.rowManager.setData(t.options.data,!1,!0)},Tabulator.prototype.destroy=function(){var t=this.element;for(Tabulator.prototype.comms.deregister(this),this.options.reactiveData&&this.modExists("reactiveData",!0)&&this.modules.reactiveData.unwatchData(),this.rowManager.rows.forEach(function(t){t.wipe()}),this.rowManager.rows=[],this.rowManager.activeRows=[],this.rowManager.displayRows=[],this.options.autoResize&&this.modExists("resizeTable")&&this.modules.resizeTable.clearBindings(),this.modExists("keybindings")&&this.modules.keybindings.clearBindings();t.firstChild;)t.removeChild(t.firstChild);t.classList.remove("tabulator")},Tabulator.prototype._detectBrowser=function(){var t=navigator.userAgent||navigator.vendor||window.opera;t.indexOf("Trident")>-1?(this.browser="ie",this.browserSlow=!0):t.indexOf("Edge")>-1?(this.browser="edge",this.browserSlow=!0):t.indexOf("Firefox")>-1?(this.browser="firefox",this.browserSlow=!1):(this.browser="other",this.browserSlow=!1),this.browserMobile=/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino|android|ipad|playbook|silk/i.test(t)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(t.substr(0,4))},Tabulator.prototype.blockRedraw=function(){return this.rowManager.blockRedraw()},Tabulator.prototype.restoreRedraw=function(){return this.rowManager.restoreRedraw()},Tabulator.prototype.setDataFromLocalFile=function(t){var e=this;return new Promise(function(o,i){var n=document.createElement("input");n.type="file",n.accept=t||".json,application/json",n.addEventListener("change",function(t){var l,s=n.files[0],a=new FileReader;a.readAsText(s),a.onload=function(t){try{l=JSON.parse(a.result)}catch(t){return console.warn("File Load Error - File contents is invalid JSON",t),void i(t)}e._setData(l).then(function(t){o(t)}).catch(function(t){o(t)})},a.onerror=function(t){console.warn("File Load Error - Unable to read file"),i()}}),n.click()})},Tabulator.prototype.setData=function(t,e,o){return this.modExists("ajax")&&this.modules.ajax.blockActiveRequest(),this._setData(t,e,o,!1,!0)},Tabulator.prototype._setData=function(t,e,o,i,n){var l=this;return"string"!=typeof t?t?l.rowManager.setData(t,i,n):l.modExists("ajax")&&(l.modules.ajax.getUrl||l.options.ajaxURLGenerator)?"remote"==l.options.pagination&&l.modExists("page",!0)?(l.modules.page.reset(!0,!0),l.modules.page.setPage(1)):l.modules.ajax.loadData(i,n):l.rowManager.setData([],i,n):0==t.indexOf("{")||0==t.indexOf("[")?l.rowManager.setData(JSON.parse(t),i,n):l.modExists("ajax",!0)?(e&&l.modules.ajax.setParams(e),o&&l.modules.ajax.setConfig(o),l.modules.ajax.setUrl(t),"remote"==l.options.pagination&&l.modExists("page",!0)?(l.modules.page.reset(!0,!0),l.modules.page.setPage(1)):l.modules.ajax.loadData(i,n)):void 0},Tabulator.prototype.clearData=function(){this.modExists("ajax")&&this.modules.ajax.blockActiveRequest(),this.rowManager.clearData()},Tabulator.prototype.getData=function(t){return!0===t&&(console.warn("passing a boolean to the getData function is deprecated, you should now pass the string 'active'"),t="active"),this.rowManager.getData(t)},Tabulator.prototype.getDataCount=function(t){return!0===t&&(console.warn("passing a boolean to the getDataCount function is deprecated, you should now pass the string 'active'"),t="active"),this.rowManager.getDataCount(t)},Tabulator.prototype.searchRows=function(t,e,o){if(this.modExists("filter",!0))return this.modules.filter.search("rows",t,e,o)},Tabulator.prototype.searchData=function(t,e,o){if(this.modExists("filter",!0))return this.modules.filter.search("data",t,e,o)},Tabulator.prototype.getHtml=function(t,e,o){if(this.modExists("export",!0))return this.modules.export.getHtml(t,e,o)},Tabulator.prototype.print=function(t,e,o){if(this.modExists("print",!0))return this.modules.print.printFullscreen(t,e,o)},Tabulator.prototype.getAjaxUrl=function(){if(this.modExists("ajax",!0))return this.modules.ajax.getUrl()},Tabulator.prototype.replaceData=function(t,e,o){return this.modExists("ajax")&&this.modules.ajax.blockActiveRequest(),this._setData(t,e,o,!0)},Tabulator.prototype.updateData=function(t){var e=this,o=this,i=0;return new Promise(function(n,l){e.modExists("ajax")&&e.modules.ajax.blockActiveRequest(),"string"==typeof t&&(t=JSON.parse(t)),t?t.forEach(function(t){var e=o.rowManager.findRow(t[o.options.index]);e&&(i++,e.updateData(t).then(function(){--i||n()}))}):(console.warn("Update Error - No data provided"),l("Update Error - No data provided"))})},Tabulator.prototype.addData=function(t,e,o){var i=this;return new Promise(function(n,l){i.modExists("ajax")&&i.modules.ajax.blockActiveRequest(),"string"==typeof t&&(t=JSON.parse(t)),t?i.rowManager.addRows(t,e,o).then(function(t){var e=[];t.forEach(function(t){e.push(t.getComponent())}),n(e)}):(console.warn("Update Error - No data provided"),l("Update Error - No data provided"))})},Tabulator.prototype.updateOrAddData=function(t){var e=this,o=this,i=[],n=0;return new Promise(function(l,s){e.modExists("ajax")&&e.modules.ajax.blockActiveRequest(),"string"==typeof t&&(t=JSON.parse(t)),t?t.forEach(function(t){var e=o.rowManager.findRow(t[o.options.index]);n++,e?e.updateData(t).then(function(){n--,i.push(e.getComponent()),n||l(i)}):o.rowManager.addRows(t).then(function(t){n--,i.push(t[0].getComponent()),n||l(i)})}):(console.warn("Update Error - No data provided"),s("Update Error - No data provided"))})},Tabulator.prototype.getRow=function(t){var e=this.rowManager.findRow(t);return e?e.getComponent():(console.warn("Find Error - No matching row found:",t),!1)},Tabulator.prototype.getRowFromPosition=function(t,e){var o=this.rowManager.getRowFromPosition(t,e);return o?o.getComponent():(console.warn("Find Error - No matching row found:",t),!1)},Tabulator.prototype.deleteRow=function(t){var e=this;return new Promise(function(o,i){function n(){++s==t.length&&a&&(l.rowManager.reRenderInPosition(),o())}var l=e,s=0,a=0,r=[];Array.isArray(t)||(t=[t]),t.forEach(function(t){var o=e.rowManager.findRow(t,!0);o?r.push(o):(console.warn("Delete Error - No matching row found:",t),i("Delete Error - No matching row found"),n())}),r.sort(function(t,o){return e.rowManager.rows.indexOf(t)>e.rowManager.rows.indexOf(o)?1:-1}),r.forEach(function(t){t.delete().then(function(){a++,n()}).catch(function(t){n(),i(t)})})})},Tabulator.prototype.addRow=function(t,e,o){var i=this;return new Promise(function(n,l){"string"==typeof t&&(t=JSON.parse(t)),i.rowManager.addRows(t,e,o).then(function(t){i.modExists("columnCalcs")&&i.modules.columnCalcs.recalc(i.rowManager.activeRows),n(t[0].getComponent())})})},Tabulator.prototype.updateOrAddRow=function(t,e){var o=this;return new Promise(function(i,n){var l=o.rowManager.findRow(t);"string"==typeof e&&(e=JSON.parse(e)),l?l.updateData(e).then(function(){o.modExists("columnCalcs")&&o.modules.columnCalcs.recalc(o.rowManager.activeRows),i(l.getComponent())}).catch(function(t){n(t)}):l=o.rowManager.addRows(e).then(function(t){o.modExists("columnCalcs")&&o.modules.columnCalcs.recalc(o.rowManager.activeRows),i(t[0].getComponent())}).catch(function(t){n(t)})})},Tabulator.prototype.updateRow=function(t,e){var o=this;return new Promise(function(i,n){var l=o.rowManager.findRow(t);"string"==typeof e&&(e=JSON.parse(e)),l?l.updateData(e).then(function(){i(l.getComponent())}).catch(function(t){n(t)}):(console.warn("Update Error - No matching row found:",t),n("Update Error - No matching row found"))})},Tabulator.prototype.scrollToRow=function(t,e,o){var i=this;return new Promise(function(n,l){var s=i.rowManager.findRow(t);s?i.rowManager.scrollToRow(s,e,o).then(function(){n()}).catch(function(t){l(t)}):(console.warn("Scroll Error - No matching row found:",t),l("Scroll Error - No matching row found"))})},Tabulator.prototype.moveRow=function(t,e,o){var i=this.rowManager.findRow(t);i?i.moveToRow(e,o):console.warn("Move Error - No matching row found:",t)},Tabulator.prototype.getRows=function(t){return!0===t&&(console.warn("passing a boolean to the getRows function is deprecated, you should now pass the string 'active'"),t="active"),this.rowManager.getComponents(t)},Tabulator.prototype.getRowPosition=function(t,e){var o=this.rowManager.findRow(t);return o?this.rowManager.getRowPosition(o,e):(console.warn("Position Error - No matching row found:",t),!1)},Tabulator.prototype.copyToClipboard=function(t){this.modExists("clipboard",!0)&&this.modules.clipboard.copy(t)},Tabulator.prototype.setColumns=function(t){this.columnManager.setColumns(t)},Tabulator.prototype.getColumns=function(t){return this.columnManager.getComponents(t)},Tabulator.prototype.getColumn=function(t){var e=this.columnManager.findColumn(t);return e?e.getComponent():(console.warn("Find Error - No matching column found:",t),!1)},Tabulator.prototype.getColumnDefinitions=function(){return this.columnManager.getDefinitionTree()},Tabulator.prototype.getColumnLayout=function(){if(this.modExists("persistence",!0))return this.modules.persistence.parseColumns(this.columnManager.getColumns())},Tabulator.prototype.setColumnLayout=function(t){return!!this.modExists("persistence",!0)&&(this.columnManager.setColumns(this.modules.persistence.mergeDefinition(this.options.columns,t)),!0)},Tabulator.prototype.showColumn=function(t){var e=this.columnManager.findColumn(t);if(!e)return console.warn("Column Show Error - No matching column found:",t),!1;e.show(),this.options.responsiveLayout&&this.modExists("responsiveLayout",!0)&&this.modules.responsiveLayout.update()},Tabulator.prototype.hideColumn=function(t){var e=this.columnManager.findColumn(t);if(!e)return console.warn("Column Hide Error - No matching column found:",t),!1;e.hide(),this.options.responsiveLayout&&this.modExists("responsiveLayout",!0)&&this.modules.responsiveLayout.update()},Tabulator.prototype.toggleColumn=function(t){var e=this.columnManager.findColumn(t);if(!e)return console.warn("Column Visibility Toggle Error - No matching column found:",t),!1;e.visible?e.hide():e.show()},Tabulator.prototype.addColumn=function(t,e,o){var i=this;return new Promise(function(n,l){var s=i.columnManager.findColumn(o);i.columnManager.addColumn(t,e,s).then(function(t){n(t.getComponent())}).catch(function(t){l(t)})})},Tabulator.prototype.deleteColumn=function(t){var e=this;return new Promise(function(o,i){var n=e.columnManager.findColumn(t);n?n.delete().then(function(){o()}).catch(function(t){i(t)}):(console.warn("Column Delete Error - No matching column found:",t),i())})},Tabulator.prototype.updateColumnDefinition=function(t,e){var o=this;return new Promise(function(i,n){var l=o.columnManager.findColumn(t);l?l.updateDefinition(e).then(function(t){i(t)}).catch(function(t){n(t)}):(console.warn("Column Update Error - No matching column found:",t),n())})},Tabulator.prototype.moveColumn=function(t,e,o){var i=this.columnManager.findColumn(t),n=this.columnManager.findColumn(e);i?n?this.columnManager.moveColumn(i,n,o):console.warn("Move Error - No matching column found:",n):console.warn("Move Error - No matching column found:",t)},Tabulator.prototype.scrollToColumn=function(t,e,o){var i=this;return new Promise(function(n,l){var s=i.columnManager.findColumn(t);s?i.columnManager.scrollToColumn(s,e,o).then(function(){n()}).catch(function(t){l(t)}):(console.warn("Scroll Error - No matching column found:",t),l("Scroll Error - No matching column found"))})},Tabulator.prototype.setLocale=function(t){this.modules.localize.setLocale(t)},Tabulator.prototype.getLocale=function(){return this.modules.localize.getLocale()},Tabulator.prototype.getLang=function(t){return this.modules.localize.getLang(t)},Tabulator.prototype.redraw=function(t){this.columnManager.redraw(t),this.rowManager.redraw(t)},Tabulator.prototype.setHeight=function(t){"classic"!==this.rowManager.renderMode?(this.options.height=isNaN(t)?t:t+"px",this.element.style.height=this.options.height,this.rowManager.setRenderMode(),this.rowManager.redraw()):console.warn("setHeight function is not available in classic render mode")},Tabulator.prototype.setSort=function(t,e){this.modExists("sort",!0)&&(this.modules.sort.setSort(t,e),this.rowManager.sorterRefresh())},Tabulator.prototype.getSorters=function(){if(this.modExists("sort",!0))return this.modules.sort.getSort()},Tabulator.prototype.clearSort=function(){this.modExists("sort",!0)&&(this.modules.sort.clear(),this.rowManager.sorterRefresh())},Tabulator.prototype.setFilter=function(t,e,o,i){this.modExists("filter",!0)&&(this.modules.filter.setFilter(t,e,o,i),this.rowManager.filterRefresh())},Tabulator.prototype.addFilter=function(t,e,o,i){this.modExists("filter",!0)&&(this.modules.filter.addFilter(t,e,o,i),this.rowManager.filterRefresh())},Tabulator.prototype.getFilters=function(t){if(this.modExists("filter",!0))return this.modules.filter.getFilters(t)},Tabulator.prototype.setHeaderFilterFocus=function(t){if(this.modExists("filter",!0)){var e=this.columnManager.findColumn(t);if(!e)return console.warn("Column Filter Focus Error - No matching column found:",t),!1;this.modules.filter.setHeaderFilterFocus(e)}},Tabulator.prototype.getHeaderFilterValue=function(t){if(this.modExists("filter",!0)){var e=this.columnManager.findColumn(t);if(e)return this.modules.filter.getHeaderFilterValue(e);console.warn("Column Filter Error - No matching column found:",t)}},Tabulator.prototype.setHeaderFilterValue=function(t,e){if(this.modExists("filter",!0)){var o=this.columnManager.findColumn(t);if(!o)return console.warn("Column Filter Error - No matching column found:",t),!1;this.modules.filter.setHeaderFilterValue(o,e)}},Tabulator.prototype.getHeaderFilters=function(){if(this.modExists("filter",!0))return this.modules.filter.getHeaderFilters()},Tabulator.prototype.removeFilter=function(t,e,o){this.modExists("filter",!0)&&(this.modules.filter.removeFilter(t,e,o),this.rowManager.filterRefresh())},Tabulator.prototype.clearFilter=function(t){this.modExists("filter",!0)&&(this.modules.filter.clearFilter(t),this.rowManager.filterRefresh())},Tabulator.prototype.clearHeaderFilter=function(){this.modExists("filter",!0)&&(this.modules.filter.clearHeaderFilter(),this.rowManager.filterRefresh())},Tabulator.prototype.selectRow=function(t){this.modExists("selectRow",!0)&&(!0===t&&(console.warn("passing a boolean to the selectRowselectRow function is deprecated, you should now pass the string 'active'"),t="active"),this.modules.selectRow.selectRows(t))},Tabulator.prototype.deselectRow=function(t){this.modExists("selectRow",!0)&&this.modules.selectRow.deselectRows(t)},Tabulator.prototype.toggleSelectRow=function(t){this.modExists("selectRow",!0)&&this.modules.selectRow.toggleRow(t)},Tabulator.prototype.getSelectedRows=function(){if(this.modExists("selectRow",!0))return this.modules.selectRow.getSelectedRows()},Tabulator.prototype.getSelectedData=function(){if(this.modExists("selectRow",!0))return this.modules.selectRow.getSelectedData()},Tabulator.prototype.getInvalidCells=function(){if(this.modExists("validate",!0))return this.modules.validate.getInvalidCells()},Tabulator.prototype.clearCellValidation=function(t){var e=this;this.modExists("validate",!0)&&(t||(t=this.modules.validate.getInvalidCells()),Array.isArray(t)||(t=[t]),t.forEach(function(t){e.modules.validate.clearValidation(t._getSelf())}))},Tabulator.prototype.validate=function(t){var e=[];return this.rowManager.rows.forEach(function(t){var o=t.validate();!0!==o&&(e=e.concat(o))}),!e.length||e},Tabulator.prototype.setMaxPage=function(t){if(!this.options.pagination||!this.modExists("page"))return!1;this.modules.page.setMaxPage(t)},Tabulator.prototype.setPage=function(t){return this.options.pagination&&this.modExists("page")?this.modules.page.setPage(t):new Promise(function(t,e){e()})},Tabulator.prototype.setPageToRow=function(t){var e=this;return new Promise(function(o,i){e.options.pagination&&e.modExists("page")?(t=e.rowManager.findRow(t),t?e.modules.page.setPageToRow(t).then(function(){o()}).catch(function(){i()}):i()):i()})},Tabulator.prototype.setPageSize=function(t){if(!this.options.pagination||!this.modExists("page"))return!1;this.modules.page.setPageSize(t),this.modules.page.setPage(1).then(function(){}).catch(function(){})},Tabulator.prototype.getPageSize=function(){if(this.options.pagination&&this.modExists("page",!0))return this.modules.page.getPageSize()},Tabulator.prototype.previousPage=function(){if(!this.options.pagination||!this.modExists("page"))return!1;this.modules.page.previousPage()},Tabulator.prototype.nextPage=function(){if(!this.options.pagination||!this.modExists("page"))return!1;this.modules.page.nextPage()},Tabulator.prototype.getPage=function(){return!(!this.options.pagination||!this.modExists("page"))&&this.modules.page.getPage()},Tabulator.prototype.getPageMax=function(){return!(!this.options.pagination||!this.modExists("page"))&&this.modules.page.getPageMax()},Tabulator.prototype.setGroupBy=function(t){if(!this.modExists("groupRows",!0))return!1;this.options.groupBy=t,this.modules.groupRows.initialize(),this.rowManager.refreshActiveData("display"),this.options.persistence&&this.modExists("persistence",!0)&&this.modules.persistence.config.group&&this.modules.persistence.save("group")},Tabulator.prototype.setGroupStartOpen=function(t){if(!this.modExists("groupRows",!0))return!1;this.options.groupStartOpen=t,this.modules.groupRows.initialize(),this.options.groupBy?(this.rowManager.refreshActiveData("group"),this.options.persistence&&this.modExists("persistence",!0)&&this.modules.persistence.config.group&&this.modules.persistence.save("group")):console.warn("Grouping Update - cant refresh view, no groups have been set")},Tabulator.prototype.setGroupHeader=function(t){if(!this.modExists("groupRows",!0))return!1;this.options.groupHeader=t,this.modules.groupRows.initialize(),this.options.groupBy?(this.rowManager.refreshActiveData("group"),this.options.persistence&&this.modExists("persistence",!0)&&this.modules.persistence.config.group&&this.modules.persistence.save("group")):console.warn("Grouping Update - cant refresh view, no groups have been set")},Tabulator.prototype.getGroups=function(t){return!!this.modExists("groupRows",!0)&&this.modules.groupRows.getGroups(!0)},Tabulator.prototype.getGroupedData=function(){if(this.modExists("groupRows",!0))return this.options.groupBy?this.modules.groupRows.getGroupedData():this.getData()},Tabulator.prototype.getEditedCells=function(){if(this.modExists("edit",!0))return this.modules.edit.getEditedCells()},Tabulator.prototype.clearCellEdited=function(t){var e=this;this.modExists("edit",!0)&&(t||(t=this.modules.edit.getEditedCells()),Array.isArray(t)||(t=[t]),t.forEach(function(t){e.modules.edit.clearEdited(t._getSelf())}))},Tabulator.prototype.getCalcResults=function(){return!!this.modExists("columnCalcs",!0)&&this.modules.columnCalcs.getResults()},Tabulator.prototype.recalc=function(){this.modExists("columnCalcs",!0)&&this.modules.columnCalcs.recalcAll(this.rowManager.activeRows)},Tabulator.prototype.navigatePrev=function(){var t=!1;return!(!this.modExists("edit",!0)||!(t=this.modules.edit.currentCell))&&t.nav().prev()},Tabulator.prototype.navigateNext=function(){var t=!1;return!(!this.modExists("edit",!0)||!(t=this.modules.edit.currentCell))&&t.nav().next()},Tabulator.prototype.navigateLeft=function(){var t=!1;return!(!this.modExists("edit",!0)||!(t=this.modules.edit.currentCell))&&(e.preventDefault(),t.nav().left())},Tabulator.prototype.navigateRight=function(){var t=!1;return!(!this.modExists("edit",!0)||!(t=this.modules.edit.currentCell))&&(e.preventDefault(),t.nav().right())},Tabulator.prototype.navigateUp=function(){var t=!1;return!(!this.modExists("edit",!0)||!(t=this.modules.edit.currentCell))&&(e.preventDefault(),t.nav().up())},Tabulator.prototype.navigateDown=function(){var t=!1;return!(!this.modExists("edit",!0)||!(t=this.modules.edit.currentCell))&&(e.preventDefault(),t.nav().down())},Tabulator.prototype.undo=function(){
+return!(!this.options.history||!this.modExists("history",!0))&&this.modules.history.undo()},Tabulator.prototype.redo=function(){return!(!this.options.history||!this.modExists("history",!0))&&this.modules.history.redo()},Tabulator.prototype.getHistoryUndoSize=function(){return!(!this.options.history||!this.modExists("history",!0))&&this.modules.history.getHistoryUndoSize()},Tabulator.prototype.getHistoryRedoSize=function(){return!(!this.options.history||!this.modExists("history",!0))&&this.modules.history.getHistoryRedoSize()},Tabulator.prototype.download=function(t,e,o,i){this.modExists("download",!0)&&this.modules.download.download(t,e,o,i)},Tabulator.prototype.downloadToTab=function(t,e,o,i){this.modExists("download",!0)&&this.modules.download.download(t,e,o,i,!0)},Tabulator.prototype.tableComms=function(t,e,o,i){this.modules.comms.receive(t,e,o,i)},Tabulator.prototype.moduleBindings={},Tabulator.prototype.extendModule=function(t,e,o){if(Tabulator.prototype.moduleBindings[t]){var i=Tabulator.prototype.moduleBindings[t].prototype[e];if(i)if("object"==(void 0===o?"undefined":_typeof(o)))for(var n in o)i[n]=o[n];else console.warn("Module Error - Invalid value type, it must be an object");else console.warn("Module Error - property does not exist:",e)}else console.warn("Module Error - module does not exist:",t)},Tabulator.prototype.registerModule=function(t,e){Tabulator.prototype.moduleBindings[t]=e},Tabulator.prototype.bindModules=function(){this.modules={};for(var t in Tabulator.prototype.moduleBindings)this.modules[t]=new Tabulator.prototype.moduleBindings[t](this)},Tabulator.prototype.modExists=function(t,e){return!!this.modules[t]||(e&&console.error("Tabulator Module Not Installed: "+t),!1)},Tabulator.prototype.helpers={elVisible:function(t){return!(t.offsetWidth<=0&&t.offsetHeight<=0)},elOffset:function(t){var e=t.getBoundingClientRect();return{top:e.top+window.pageYOffset-document.documentElement.clientTop,left:e.left+window.pageXOffset-document.documentElement.clientLeft}},deepClone:function(t){var e=Array.isArray(t)?[]:{};for(var o in t)null!=t[o]&&"object"===_typeof(t[o])?t[o]instanceof Date?e[o]=new Date(t[o]):e[o]=this.deepClone(t[o]):e[o]=t[o];return e}},Tabulator.prototype.comms={tables:[],register:function(t){Tabulator.prototype.comms.tables.push(t)},deregister:function(t){var e=Tabulator.prototype.comms.tables.indexOf(t);e>-1&&Tabulator.prototype.comms.tables.splice(e,1)},lookupTable:function(t,e){var o,i,n=[];if("string"==typeof t){if(o=document.querySelectorAll(t),o.length)for(var l=0;l<o.length;l++)(i=Tabulator.prototype.comms.matchElement(o[l]))&&n.push(i)}else"undefined"!=typeof HTMLElement&&t instanceof HTMLElement||t instanceof Tabulator?(i=Tabulator.prototype.comms.matchElement(t))&&n.push(i):Array.isArray(t)?t.forEach(function(t){n=n.concat(Tabulator.prototype.comms.lookupTable(t))}):e||console.warn("Table Connection Error - Invalid Selector",t);return n},matchElement:function(t){return Tabulator.prototype.comms.tables.find(function(e){return t instanceof Tabulator?e===t:e.element===t})}},Tabulator.prototype.findTable=function(t){var e=Tabulator.prototype.comms.lookupTable(t,!0);return!(Array.isArray(e)&&!e.length)&&e};var Layout=function(t){this.table=t,this.mode=null};Layout.prototype.initialize=function(t){this.modes[t]?this.mode=t:(console.warn("Layout Error - invalid mode set, defaulting to 'fitData' : "+t),this.mode="fitData"),this.table.element.setAttribute("tabulator-layout",this.mode)},Layout.prototype.getMode=function(){return this.mode},Layout.prototype.layout=function(){this.modes[this.mode].call(this,this.table.columnManager.columnsByIndex)},Layout.prototype.modes={fitData:function(t){t.forEach(function(t){t.reinitializeWidth()}),this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.update()},fitDataFill:function(t){t.forEach(function(t){t.reinitializeWidth()}),this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.update()},fitDataTable:function(t){t.forEach(function(t){t.reinitializeWidth()}),this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.update()},fitDataStretch:function(t){var e=this,o=0,i=this.table.rowManager.element.clientWidth,n=0,l=!1;t.forEach(function(t,i){t.widthFixed||t.reinitializeWidth(),(e.table.options.responsiveLayout?t.modules.responsive.visible:t.visible)&&(l=t),t.visible&&(o+=t.getWidth())}),l?(n=i-o+l.getWidth(),this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&(l.setWidth(0),this.table.modules.responsiveLayout.update()),n>0?l.setWidth(n):l.reinitializeWidth()):this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.update()},fitColumns:function(t){function e(t){return"string"==typeof t?t.indexOf("%")>-1?n/100*parseInt(t):parseInt(t):t}function o(t,i,n,l){function s(t){return n*(t.column.definition.widthGrow||1)}function a(t){return e(t.width)-n*(t.column.definition.widthShrink||0)}var r=[],u=0,c=0,h=0,d=0,p=0,m=[];return t.forEach(function(t,e){var o=l?a(t):s(t);t.column.minWidth>=o?r.push(t):(m.push(t),p+=l?t.column.definition.widthShrink||1:t.column.definition.widthGrow||1)}),r.length?(r.forEach(function(t){u+=l?t.width-t.column.minWidth:t.column.minWidth,t.width=t.column.minWidth}),c=i-u,h=p?Math.floor(c/p):c,d=c-h*p,d+=o(m,c,h,l)):(d=p?i-Math.floor(i/p)*p:i,m.forEach(function(t){t.width=l?a(t):s(t)})),d}var i=this,n=i.table.element.clientWidth,l=0,s=0,a=0,r=0,u=[],c=[],h=0,d=0,p=0;this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.update(),this.table.rowManager.element.scrollHeight>this.table.rowManager.element.clientHeight&&(n-=this.table.rowManager.element.offsetWidth-this.table.rowManager.element.clientWidth),t.forEach(function(t){var o,i,n;t.visible&&(o=t.definition.width,i=parseInt(t.minWidth),o?(n=e(o),l+=n>i?n:i,t.definition.widthShrink&&(c.push({column:t,width:n>i?n:i}),h+=t.definition.widthShrink)):(u.push({column:t,width:0}),a+=t.definition.widthGrow||1))}),s=n-l,r=Math.floor(s/a);var p=o(u,s,r,!1);u.length&&p>0&&(u[u.length-1].width+=+p),u.forEach(function(t){s-=t.width}),d=Math.abs(p)+s,d>0&&h&&(p=o(c,d,Math.floor(d/h),!0)),c.length&&(c[c.length-1].width-=p),u.forEach(function(t){t.column.setWidth(t.width)}),c.forEach(function(t){t.column.setWidth(t.width)})}},Tabulator.prototype.registerModule("layout",Layout);var Localize=function(t){this.table=t,this.locale="default",this.lang=!1,this.bindings={}};Localize.prototype.setHeaderFilterPlaceholder=function(t){this.langs.default.headerFilters.default=t},Localize.prototype.setHeaderFilterColumnPlaceholder=function(t,e){this.langs.default.headerFilters.columns[t]=e,this.lang&&!this.lang.headerFilters.columns[t]&&(this.lang.headerFilters.columns[t]=e)},Localize.prototype.installLang=function(t,e){this.langs[t]?this._setLangProp(this.langs[t],e):this.langs[t]=e},Localize.prototype._setLangProp=function(t,e){for(var o in e)t[o]&&"object"==_typeof(t[o])?this._setLangProp(t[o],e[o]):t[o]=e[o]},Localize.prototype.setLocale=function(t){function e(t,o){for(var i in t)"object"==_typeof(t[i])?(o[i]||(o[i]={}),e(t[i],o[i])):o[i]=t[i]}var o=this;if(t=t||"default",!0===t&&navigator.language&&(t=navigator.language.toLowerCase()),t&&!o.langs[t]){var i=t.split("-")[0];o.langs[i]?(console.warn("Localization Error - Exact matching locale not found, using closest match: ",t,i),t=i):(console.warn("Localization Error - Matching locale not found, using default: ",t),t="default")}o.locale=t,o.lang=Tabulator.prototype.helpers.deepClone(o.langs.default||{}),"default"!=t&&e(o.langs[t],o.lang),o.table.options.localized.call(o.table,o.locale,o.lang),o._executeBindings()},Localize.prototype.getLocale=function(t){return self.locale},Localize.prototype.getLang=function(t){return t?this.langs[t]:this.lang},Localize.prototype.getText=function(t,e){var t=e?t+"|"+e:t,o=t.split("|");return this._getLangElement(o,this.locale)||""},Localize.prototype._getLangElement=function(t,e){var o=this,i=o.lang;return t.forEach(function(t){var e;i&&(e=i[t],i=void 0!==e&&e)}),i},Localize.prototype.bind=function(t,e){this.bindings[t]||(this.bindings[t]=[]),this.bindings[t].push(e),e(this.getText(t),this.lang)},Localize.prototype._executeBindings=function(){var t=this;for(var e in t.bindings)!function(e){t.bindings[e].forEach(function(o){o(t.getText(e),t.lang)})}(e)},Localize.prototype.langs={default:{groups:{item:"item",items:"items"},columns:{},ajax:{loading:"Loading",error:"Error"},pagination:{page_size:"Page Size",page_title:"Show Page",first:"First",first_title:"First Page",last:"Last",last_title:"Last Page",prev:"Prev",prev_title:"Prev Page",next:"Next",next_title:"Next Page",all:"All"},headerFilters:{default:"filter column...",columns:{}}}},Tabulator.prototype.registerModule("localize",Localize);var Comms=function(t){this.table=t};Comms.prototype.getConnections=function(t){var e,o=this,i=[];return e=Tabulator.prototype.comms.lookupTable(t),e.forEach(function(t){o.table!==t&&i.push(t)}),i},Comms.prototype.send=function(t,e,o,i){var n=this,l=this.getConnections(t);l.forEach(function(t){t.tableComms(n.table.element,e,o,i)}),!l.length&&t&&console.warn("Table Connection Error - No tables matching selector found",t)},Comms.prototype.receive=function(t,e,o,i){if(this.table.modExists(e))return this.table.modules[e].commsReceived(t,o,i);console.warn("Inter-table Comms Error - no such module:",e)},Tabulator.prototype.registerModule("comms",Comms);
\ No newline at end of file
diff --git a/admin/lib/composer.json b/admin/lib/composer.json
new file mode 100644 (file)
index 0000000..d40c2ef
--- /dev/null
@@ -0,0 +1,5 @@
+{
+  "require":{
+    "mustache/mustache":"2.13.0"
+  }
+}
\ No newline at end of file
diff --git a/admin/lib/composer.lock b/admin/lib/composer.lock
new file mode 100644 (file)
index 0000000..0b1a613
--- /dev/null
@@ -0,0 +1,65 @@
+{
+    "_readme": [
+        "This file locks the dependencies of your project to a known state",
+        "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
+        "This file is @generated automatically"
+    ],
+    "content-hash": "92525a9a1d7680bb4e3111b321d46087",
+    "packages": [
+        {
+            "name": "mustache/mustache",
+            "version": "v2.13.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/bobthecow/mustache.php.git",
+                "reference": "e95c5a008c23d3151d59ea72484d4f72049ab7f4"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/bobthecow/mustache.php/zipball/e95c5a008c23d3151d59ea72484d4f72049ab7f4",
+                "reference": "e95c5a008c23d3151d59ea72484d4f72049ab7f4",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.2.4"
+            },
+            "require-dev": {
+                "friendsofphp/php-cs-fixer": "~1.11",
+                "phpunit/phpunit": "~3.7|~4.0|~5.0"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-0": {
+                    "Mustache": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Justin Hileman",
+                    "email": "justin@justinhileman.info",
+                    "homepage": "http://justinhileman.com"
+                }
+            ],
+            "description": "A Mustache implementation in PHP.",
+            "homepage": "https://github.com/bobthecow/mustache.php",
+            "keywords": [
+                "mustache",
+                "templating"
+            ],
+            "time": "2019-11-23T21:40:31+00:00"
+        }
+    ],
+    "packages-dev": [],
+    "aliases": [],
+    "minimum-stability": "stable",
+    "stability-flags": [],
+    "prefer-stable": false,
+    "prefer-lowest": false,
+    "platform": [],
+    "platform-dev": [],
+    "plugin-api-version": "1.1.0"
+}
diff --git a/admin/lib/config.php b/admin/lib/config.php
new file mode 100644 (file)
index 0000000..9d3b7d3
--- /dev/null
@@ -0,0 +1,29 @@
+<?php
+  $cfg = array(
+    "basepath" => "/oldbelladmin/",
+    "cookie" => "oldbell_lu",
+    "templatepath" => "tmpl/",
+    "db"=> array(
+      "type" => "pgsql",
+      "host" => "dedi1781.your-server.de",
+      "dbname" => "oldbell_db",
+      "user" =>  "oldbell_user",
+      "password" => "reLH2MgvEsnWNHcy",
+    ),
+    "appversion" => "1",
+    "minify" => ""
+  );
+
+  function getparams(){
+    $get_arr = array();
+    $xar = explode("&", $_SERVER['QUERY_STRING']);
+    print_r($xar);
+    if (count($xar) > 0){
+      foreach (explode("&", $_SERVER['QUERY_STRING']) as $tmp_arr_param) {
+        $split_param = explode("=", $tmp_arr_param);
+        $get_arr[$split_param[0]] = urldecode($split_param[1]);
+      }
+    }
+    return $get_arr; 
+  }
+?>
\ No newline at end of file
diff --git a/admin/lib/database.php b/admin/lib/database.php
new file mode 100644 (file)
index 0000000..3d5cb18
--- /dev/null
@@ -0,0 +1,74 @@
+<?php
+class database {
+  private $conn;
+  private $dbconf;
+  public function __construct($pdbconf){
+    $this->dbconf = $pdbconf;
+    try {
+      //'mysql:host=<localhost>;dbname=<database>', $user, password
+      //'sqlite:/opt/databases/mydb.sq3
+      //pgsql:host=localhost;port=5432;dbname=testdb;user=bruce;password=mypass
+      $this->conn = new PDO($this->dbconf["type"].':host='.$this->dbconf["host"].';port=5432;dbname='.$this->dbconf["dbname"],$this->dbconf["user"],$this->dbconf["password"]);
+    } catch(PDOException $e){
+      // fwrite(STDERR, "Connectio Error: ".$e->getMessage()."\n");
+    }
+  }
+  
+  public function securetext($text){
+    return str_replace("'","''",$text);
+  }
+  public function value($text){
+    if (($text == "") || ($text == null)){
+      return 'null';
+    }
+    return "'".$text."'";
+  }
+
+  public function query($sql){
+    try {
+      // fwrite(STDERR, "QUERY: ".$sql."\n");
+      if ($this->conn){
+        return $this->conn->query($sql);
+      }
+    } catch(PDOException $e){
+      // fwrite(STDERR, "QUERY ERROR: ".$sql."\n");
+    }
+    return null;
+  }
+
+  public function queryarray($sql){
+    $result = null;
+    try {
+      if ($this->conn){
+                         $sth = $this->link->prepare($sql);
+                         $sth->execute();
+        $result = $sth->fetchAll(PDO::FETCH_ASSOC);
+        return $result;
+      }
+    } catch (PDOException $e){
+      // fwrite(STDERR, "QUERYARRAY ERROR: ".$sql."\n");
+    }
+               return $result;
+  }
+
+  public function exec($sql){
+    try {
+      if ($this->conn){
+        return  $this->exec($sql);
+      }
+    } catch (PDOException $e){
+      // fwrite(STDERR, "EXEC ERROR: ".$sql."\n");
+    }
+               return -1;
+  }
+
+  public function newuuid(){
+    $nid = $this->query("SELECT uuid_in(md5(random()::text || clock_timestamp()::text)::cstring) as id");
+    return $nid["id"];
+  }
+
+  public function __destruct(){
+    $this->conn = null;
+  }
+}
+?>
\ No newline at end of file
diff --git a/admin/lib/session.php b/admin/lib/session.php
new file mode 100644 (file)
index 0000000..1092b79
--- /dev/null
@@ -0,0 +1,35 @@
+<?php
+class session {
+  private $session;
+  private $dbh;
+  public function __construct($dblink){
+    $this->dbh = $dblink;
+  }
+
+  public function getSession($sid){
+    if (($sid !== null) && ($sid != "")){
+      $this->session = $this->dbh->query("select * from public.sessions where id='".$sid."' and remote_addr='".$_SERVER["REMOTE_ADDR"]."';");
+    }
+    return $this->session;
+  }
+  
+  public function checkLogin($username,$password,$cookiename){
+    $encpwd = hash('sha256', trim($password));
+    //echo "select id,username,usergroup from public.users where username='".$username."' and password='".$encpwd."';\n";
+    $auth = $this->dbh->query("select id,username,usergroup from public.users where username='".$username."' and password='".$encpwd."';");
+    
+    if ($auth){
+      $nuuid = $this->dbh->newuuid();
+      
+      $this->dbh->exec("INSERT INTO public.sessions (id,id_user,remote_addr,user_agent) VALUES ('".$nuuid."','".$auth['id']."','".$_SERVER["REMOTE_ADDR"]."','".$_SERVER["HTTP_USER_AGENT"]."');");
+      setcookie($cookiename,$nuuid,0,"/",null,0,1);
+      return $this->getSession($nuuid);
+    }
+    return null;
+  }
+
+  public function __destruct(){
+    $this->conn = null;
+  }
+}
+?>
\ No newline at end of file
diff --git a/admin/lib/web/galleries.php b/admin/lib/web/galleries.php
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/admin/lib/web/rendezvous.php b/admin/lib/web/rendezvous.php
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/admin/lib/web/websites.php b/admin/lib/web/websites.php
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/admin/tmpl/.htaccess b/admin/tmpl/.htaccess
new file mode 100644 (file)
index 0000000..908fc52
--- /dev/null
@@ -0,0 +1,5 @@
+#RewriteEngine On
+#RewriteBase /
+#RewriteCond %{HTTP_COOKIE} !potlu= [NC]
+#RewriteRule .* "%{REQUEST_SCHEME}://%{HTTP_HOST}/backoffice/login.html" [L]
+Require all denied
\ No newline at end of file
diff --git a/admin/tmpl/index.html.mustache b/admin/tmpl/index.html.mustache
new file mode 100644 (file)
index 0000000..26a9788
--- /dev/null
@@ -0,0 +1,55 @@
+<!DOCTYPE html>
+<html lang="fr">
+<head>
+  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+  <meta name="viewport" content="width=device-width, initial-scale=1.0, shrink-to-fit=no">
+  <title>Website Admin</title>
+  <meta name="language" content="fr">
+    <meta name="robots" content="noindex,nofollow">
+    <!-- <meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate" />
+  <meta http-equiv="Pragma" content="no-cache" />
+  <meta http-equiv="Expires" content="0" /> -->
+<link rel="apple-touch-icon" sizes="57x57" href="img/favicon/apple-icon-57x57.png?v={{config.appversion}}">
+<link rel="apple-touch-icon" sizes="60x60" href="img/favicon/apple-icon-60x60.png?v={{config.appversion}}">
+<link rel="apple-touch-icon" sizes="72x72" href="img/favicon/apple-icon-72x72.png?v={{config.appversion}}">
+<link rel="apple-touch-icon" sizes="76x76" href="img/favicon/apple-icon-76x76.png?v={{config.appversion}}">
+<link rel="apple-touch-icon" sizes="114x114" href="img/favicon/apple-icon-114x114.png?v={{config.appversion}}">
+<link rel="apple-touch-icon" sizes="120x120" href="img/favicon/apple-icon-120x120.png?v={{config.appversion}}">
+<link rel="apple-touch-icon" sizes="144x144" href="img/favicon/apple-icon-144x144.png?v={{config.appversion}}">
+<link rel="apple-touch-icon" sizes="152x152" href="img/favicon/apple-icon-152x152.png?v={{config.appversion}}">
+<link rel="apple-touch-icon" sizes="180x180" href="img/favicon/apple-icon-180x180.png?v={{config.appversion}}">
+<link rel="icon" type="image/png" sizes="192x192"  href="img/favicon/android-icon-192x192.png?v={{config.appversion}}">
+<link rel="icon" type="image/png" sizes="32x32" href="img/favicon/favicon-32x32.png?v={{config.appversion}}">
+<link rel="icon" type="image/png" sizes="96x96" href="img/favicon/favicon-96x96.png?v={{config.appversion}}">
+<link rel="icon" type="image/png" sizes="16x16" href="img/favicon/favicon-16x16.png?v={{config.appversion}}">
+
+<link rel="stylesheet" href="css/icons{{minify}}.css?v={{config.appversion}}">
+<link rel="stylesheet" href="css/theme{{minify}}.css?v={{config.appversion}}">
+
+<link rel="stylesheet" href="vendors/tabulator/css/tabulator_site{{minify}}.css?v={{config.appversion}}">
+<link rel="stylesheet" href="vendors/slimselect/slimselect{{minify}}.css?v={{config.appversion}}">
+<link rel="stylesheet" href="vendors/flatpickr/flatpickr{{minify}}.css?v={{config.appversion}}">
+<link rel="stylesheet" href="vendors/flatpickr/themes/airbnb{{minify}}.css?v={{config.appversion}}">
+</head>
+<body>
+<div class="main">
+  {{ pagedata }}
+    </div> 
+  <script>
+    let schemata = "[% session.sessiondata.schemata %]"; 
+  </script>
+  <script type="text/javascript" src="vendors/tabulator/js/tabulator{{minify}}.js?v={{config.appversion}}"></script>
+  <script type="text/javascript" src="vendors/moment/moment-with-locales{{minify}}.js?v={{config.appversion}}"></script>
+  <script type="text/javascript" src="vendors/slimselect/slimselect.min.js?v={{config.appversion}}"></script>
+  <script type="text/javascript" src="vendors/flatpickr/flatpickr{{minify}}.js?v={{config.appversion}}"></script>
+  <script type="text/javascript" src="vendors/flatpickr/l10n/fr{{minify}}.js?v={{config.appversion}}"></script>
+  <script type="text/javascript" src="vendors/flatpickr/plugins/weekSelect/weekSelect.js?v={{config.appversion}}"></script>
+  <script type="text/javascript" src="js/request{{minify}}.js?v={{config.appversion}}"></script>
+  <script type="text/javascript" src="js/app{{minify}}.js?v={{config.appversion}}"></script>
+  <script type="text/javascript" src="js/timecalc{{minify}}.js?v={{config.appversion}}"></script>
+  <script type="text/javascript" src="js/dataform{{minify}}.js?v={{config.appversion}}"></script>
+  <script type="text/javascript" src="js/report{{minify}}.js?v={{config.appversion}}"></script>
+  
+</body>
+
+</html>
\ No newline at end of file
diff --git a/admin/tmpl/login.html.mustache b/admin/tmpl/login.html.mustache
new file mode 100644 (file)
index 0000000..2c812f2
--- /dev/null
@@ -0,0 +1,66 @@
+
+
+<!DOCTYPE html>
+<html lang="fr">
+<head>
+
+  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+  <meta name="viewport" content="width=device-width, initial-scale=1.0, shrink-to-fit=no">
+  <title>POT - Plan d'organisation du travail</title>
+  <meta name="language" content="fr">
+    <meta name="robots" content="noindex,nofollow">
+    <link rel="apple-touch-icon" sizes="57x57" href="{{abspath}}img/favicon/apple-icon-57x57.png?v={{config.appversion}}">
+<link rel="apple-touch-icon" sizes="60x60" href="{{abspath}}img/favicon/apple-icon-60x60.png?v={{config.appversion}}">
+<link rel="apple-touch-icon" sizes="72x72" href="{{abspath}}img/favicon/apple-icon-72x72.png?v={{config.appversion}}">
+<link rel="apple-touch-icon" sizes="76x76" href="{{abspath}}img/favicon/apple-icon-76x76.png?v={{config.appversion}}">
+<link rel="apple-touch-icon" sizes="114x114" href="{{abspath}}img/favicon/apple-icon-114x114.png?v={{config.appversion}}">
+<link rel="apple-touch-icon" sizes="120x120" href="{{abspath}}img/favicon/apple-icon-120x120.png?v={{config.appversion}}">
+<link rel="apple-touch-icon" sizes="144x144" href="{{abspath}}img/favicon/apple-icon-144x144.png?v={{config.appversion}}">
+<link rel="apple-touch-icon" sizes="152x152" href="{{abspath}}img/favicon/apple-icon-152x152.png?v={{config.appversion}}">
+<link rel="apple-touch-icon" sizes="180x180" href="{{abspath}}img/favicon/apple-icon-180x180.png?v={{config.appversion}}">
+<link rel="icon" type="image/png" sizes="192x192"  href="{{abspath}}img/favicon/android-icon-192x192.png?v={{config.appversion}}">
+<link rel="icon" type="image/png" sizes="32x32" href="{{abspath}}img/favicon/favicon-32x32.png?v={{config.appversion}}">
+<link rel="icon" type="image/png" sizes="96x96" href="{{abspath}}img/favicon/favicon-96x96.png?v={{config.appversion}}">
+<link rel="icon" type="image/png" sizes="16x16" href="{{abspath}}img/favicon/favicon-16x16.png?v={{config.appversion}}">
+<link rel="stylesheet" href="{{abspath}}css/theme{{ config.minify }}.css?v={{config.appversion}}">
+<style>
+body, html {height: 100%; background-color: #c6c6c6;}
+
+</style>
+</head>
+<body>
+  
+  <div class="display-container DKS bgimg" style="padding-top: 100px; ">
+
+    <div class="row" >
+    <div class="col l4 m2 hide-small">&nbsp;
+    </div>
+    <div class="col l4 m8 s12 border round">  
+    <div class="container center white padding">
+        <img src="{{abspath}}img/toplogo.png?v={{config.appversion}}" style="height: 60px;" alt="logo">
+    </div>
+    <div class="container white" id="pnllogin" >
+        {{pagedata}}
+    </div>
+    <div class="container padding-24">
+                  <a href="{{abspath}}login/forgotpassword.html" class="text-primary">Mot de passe oublié?</a>
+                </div>
+  </div>
+  <div class="col l4 m2  hide-small">&nbsp;
+  </div>
+  </div>
+  <noscript>
+  <div class="row">
+    <div class="col l4 m2 hide-small">&nbsp;
+    </div>
+    <div class="col l4 m8 s12 border round white"> 
+      <div class="container text-red large">Javascript doit être activé pour travailler avec POT!</div>
+    </div>
+    <div class="col l4 m2  hide-small">&nbsp;
+    </div>
+  </div>
+  </noscript>
+  </div>
+</body>
+
+</html>
diff --git a/admin/tmpl/pages/error.html.mustache b/admin/tmpl/pages/error.html.mustache
new file mode 100644 (file)
index 0000000..31ab5ed
--- /dev/null
@@ -0,0 +1,2 @@
+<h2>Cette page  n'existe pas!</h2>
+<pre>{{config}}</pre>
\ No newline at end of file
diff --git a/admin/tmpl/pages/galleries.html.mustache b/admin/tmpl/pages/galleries.html.mustache
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/admin/tmpl/pages/home.html.mustache b/admin/tmpl/pages/home.html.mustache
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/admin/tmpl/pages/login/forgotpassword.html.mustache b/admin/tmpl/pages/login/forgotpassword.html.mustache
new file mode 100644 (file)
index 0000000..3205836
--- /dev/null
@@ -0,0 +1,20 @@
+<div class="container">
+        <h4>Mot de passe oublié?</h4>
+              <h6 >Demander un nouveau mot de passe</h6>
+        </div>     
+              <form  method="POST">
+                <div class="container">
+                    <label for="email" class="label">E-mail</label>
+            
+                    <input type="text" class="input border" id="email" name="email"  required>
+                    
+                </div>
+                
+                <div class="container padding-16">
+                  <button type="submit" name="btnforgotpassword" class="button theme" >Envoyer</button>
+                </div>
+                <div class="container padding-24">
+                  <a href="{{abspath}}login.html" class="text-primary">se Connecter</a>
+                </div>
+                
+              </form>
\ No newline at end of file
diff --git a/admin/tmpl/pages/login/login.html.mustache b/admin/tmpl/pages/login/login.html.mustache
new file mode 100644 (file)
index 0000000..3ab8836
--- /dev/null
@@ -0,0 +1,23 @@
+<div class="container">
+            <h4>Accès Client</h4>
+        </div>
+        <form name="frmlogin"  method="POST" id="frmlogin">
+          <div class="container">
+              <label for="username" class="label">Login</label>
+              <input class="input border" type="text" id="login" name="login">
+          </div>
+          <div class="container">
+            <label for="password" class="label">Mot de passe</label>
+              <input class="input border" type="password" id="password" name="password">
+          </div>
+          <div class="container padding-16">
+              <button type="submit" name="btnlogin" class="theme-dark button" >Connecter</button>
+          </div>
+          <!--<div class="container padding-16">
+             <a href="[% abspath %]forgotpassword.html">mot de passe oublié?</a>
+          </div>-->
+
+          <div class="container padding-16">
+
+          </div>
+        </form>
\ No newline at end of file
diff --git a/admin/tmpl/pages/login/message.html.mustache b/admin/tmpl/pages/login/message.html.mustache
new file mode 100644 (file)
index 0000000..e9d05ec
--- /dev/null
@@ -0,0 +1,7 @@
+<div class="panel [% messagetype %]">[% message %]</div>  
+<div class="container">
+  <a href="login.html" class="text-primary">Se connecter</a>
+</div>
+<div class="container">
+  <!--<a href="forgotpassword.html" class="text-primary">Mot de passe oublié?</a>-->
+</div>
\ No newline at end of file
diff --git a/admin/tmpl/pages/orders.html.mustache b/admin/tmpl/pages/orders.html.mustache
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/admin/tmpl/pages/rdvconfig.html.mustache b/admin/tmpl/pages/rdvconfig.html.mustache
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/admin/tmpl/pages/rendezvous.html.mustache b/admin/tmpl/pages/rendezvous.html.mustache
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/admin/tmpl/pages/shop.html.mustache b/admin/tmpl/pages/shop.html.mustache
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/admin/upload.php b/admin/upload.php
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/oldwebsite/img/logo1.png b/oldwebsite/img/logo1.png
new file mode 100644 (file)
index 0000000..a8516a4
Binary files /dev/null and b/oldwebsite/img/logo1.png differ
diff --git a/website/css/fonts/ledf.svg b/website/css/fonts/ledf.svg
deleted file mode 100644 (file)
index 30121bb..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-<?xml version="1.0" standalone="no"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
-<svg xmlns="http://www.w3.org/2000/svg">
-<metadata>Generated by IcoMoon</metadata>
-<defs>
-<font id="ledf" horiz-adv-x="1024">
-<font-face units-per-em="1024" ascent="960" descent="-64" />
-<missing-glyph horiz-adv-x="1024" />
-<glyph unicode="&#x20;" horiz-adv-x="512" d="" />
-<glyph unicode="&#xe945;" glyph-name="envelop" d="M928 832h-832c-52.8 0-96-43.2-96-96v-640c0-52.8 43.2-96 96-96h832c52.8 0 96 43.2 96 96v640c0 52.8-43.2 96-96 96zM398.74 409.628l-270.74-210.892v501.642l270.74-290.75zM176.38 704h671.24l-335.62-252-335.62 252zM409.288 398.302l102.712-110.302 102.71 110.302 210.554-270.302h-626.528l210.552 270.302zM625.26 409.628l270.74 290.75v-501.642l-270.74 210.892z" />
-<glyph unicode="&#xe947;" glyph-name="location" d="M512 960c-176.732 0-320-143.268-320-320 0-320 320-704 320-704s320 384 320 704c0 176.732-143.27 320-320 320zM512 448c-106.040 0-192 85.96-192 192s85.96 192 192 192 192-85.96 192-192-85.96-192-192-192z" />
-<glyph unicode="&#xe94c;" glyph-name="map2" d="M672 768l-320 128-352-128v-768l352 128 320-128 352 128v768l-352-128zM384 814.27l256-102.4v-630.138l-256 102.398v630.14zM64 723.172l256 93.090v-631.8l-256-93.088v631.798zM960 172.828l-256-93.092v631.8l256 93.090v-631.798z" />
-<glyph unicode="&#xe953;" glyph-name="calendar" d="M320 576h128v-128h-128zM512 576h128v-128h-128zM704 576h128v-128h-128zM128 192h128v-128h-128zM320 192h128v-128h-128zM512 192h128v-128h-128zM320 384h128v-128h-128zM512 384h128v-128h-128zM704 384h128v-128h-128zM128 384h128v-128h-128zM832 960v-64h-128v64h-448v-64h-128v64h-128v-1024h960v1024h-128zM896 0h-832v704h832v-704z" />
-<glyph unicode="&#xe9bd;" glyph-name="menu" d="M64 768h896v-192h-896zM64 512h896v-192h-896zM64 256h896v-192h-896z" />
-</font></defs></svg>
\ No newline at end of file
diff --git a/website/css/fonts/ledf.ttf b/website/css/fonts/ledf.ttf
deleted file mode 100644 (file)
index ac8e4b1..0000000
Binary files a/website/css/fonts/ledf.ttf and /dev/null differ
diff --git a/website/css/fonts/ledf.woff b/website/css/fonts/ledf.woff
deleted file mode 100644 (file)
index ba03696..0000000
Binary files a/website/css/fonts/ledf.woff and /dev/null differ
diff --git a/website/css/fonts/siteicons.svg b/website/css/fonts/siteicons.svg
new file mode 100644 (file)
index 0000000..5c2d6d6
--- /dev/null
@@ -0,0 +1,70 @@
+<?xml version="1.0" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
+<svg xmlns="http://www.w3.org/2000/svg">
+<metadata>
+<json>
+<![CDATA[
+{
+       "fontFamily": "siteicons",
+       "majorVersion": 1,
+       "minorVersion": 0,
+       "version": "Version 1.0",
+       "fontId": "siteicons",
+       "psName": "siteicons",
+       "subFamily": "Regular",
+       "fullName": "siteicons",
+       "description": "Font generated by IcoMoon."
+}
+]]>
+</json>
+</metadata>
+<defs>
+<font id="siteicons" horiz-adv-x="1024">
+<font-face units-per-em="1024" ascent="960" descent="-64" />
+<missing-glyph horiz-adv-x="1024" />
+<glyph unicode="&#x20;" horiz-adv-x="512" d="" />
+<glyph unicode="&#xe900;" glyph-name="home" data-tags="home, house" d="M1024 369.556l-512 397.426-512-397.428v162.038l512 397.426 512-397.428zM896 384v-384h-256v256h-256v-256h-256v384l384 288z" />
+<glyph unicode="&#xe90d;" glyph-name="image" data-tags="image, picture, photo, graphic" d="M959.884 832c0.040-0.034 0.082-0.076 0.116-0.116v-767.77c-0.034-0.040-0.076-0.082-0.116-0.116h-895.77c-0.040 0.034-0.082 0.076-0.114 0.116v767.772c0.034 0.040 0.076 0.082 0.114 0.114h895.77zM960 896h-896c-35.2 0-64-28.8-64-64v-768c0-35.2 28.8-64 64-64h896c35.2 0 64 28.8 64 64v768c0 35.2-28.8 64-64 64v0zM832 672c0-53.020-42.98-96-96-96s-96 42.98-96 96 42.98 96 96 96 96-42.98 96-96zM896 128h-768v128l224 384 256-320h64l224 192z" />
+<glyph unicode="&#xe90e;" glyph-name="images" data-tags="images, pictures, photos, graphics" horiz-adv-x="1152" d="M1088 832h-64v64c0 35.2-28.8 64-64 64h-896c-35.2 0-64-28.8-64-64v-768c0-35.2 28.8-64 64-64h64v-64c0-35.2 28.8-64 64-64h896c35.2 0 64 28.8 64 64v768c0 35.2-28.8 64-64 64zM128 768v-640h-63.886c-0.040 0.034-0.082 0.076-0.114 0.116v767.77c0.034 0.040 0.076 0.082 0.114 0.114h895.77c0.040-0.034 0.082-0.076 0.116-0.116v-63.884h-768c-35.2 0-64-28.8-64-64v0zM1088 0.116c-0.034-0.040-0.076-0.082-0.116-0.116h-895.77c-0.040 0.034-0.082 0.076-0.114 0.116v767.77c0.034 0.040 0.076 0.082 0.114 0.114h895.77c0.040-0.034 0.082-0.076 0.116-0.116v-767.768zM960 608c0-53.020-42.98-96-96-96s-96 42.98-96 96 42.98 96 96 96 96-42.98 96-96zM1024 64h-768v128l224 384 256-320h64l224 192z" />
+<glyph unicode="&#xe90f;" glyph-name="camera" data-tags="camera, photo, picture, image" d="M304 352c0-114.876 93.124-208 208-208s208 93.124 208 208-93.124 208-208 208-208-93.124-208-208zM960 704h-224c-16 64-32 128-96 128h-256c-64 0-80-64-96-128h-224c-35.2 0-64-28.8-64-64v-576c0-35.2 28.8-64 64-64h896c35.2 0 64 28.8 64 64v576c0 35.2-28.8 64-64 64zM512 68c-156.85 0-284 127.148-284 284 0 156.85 127.15 284 284 284 156.852 0 284-127.15 284-284 0-156.852-127.146-284-284-284zM960 512h-128v64h128v-64z" />
+<glyph unicode="&#xe912;" glyph-name="play" data-tags="play, video, movie" d="M981.188 799.892c-143.632 20.65-302.332 32.108-469.186 32.108-166.86 0-325.556-11.458-469.194-32.108-27.53-107.726-42.808-226.75-42.808-351.892 0-125.14 15.278-244.166 42.808-351.89 143.638-20.652 302.336-32.11 469.194-32.11 166.854 0 325.552 11.458 469.186 32.11 27.532 107.724 42.812 226.75 42.812 351.89 0 125.142-15.28 244.166-42.812 351.892zM384.002 256v384l320-192-320-192z" />
+<glyph unicode="&#xe913;" glyph-name="film" data-tags="film, video, movie, tape, play" d="M0 832v-768h1024v768h-1024zM192 128h-128v128h128v-128zM192 384h-128v128h128v-128zM192 640h-128v128h128v-128zM768 128h-512v640h512v-640zM960 128h-128v128h128v-128zM960 384h-128v128h128v-128zM960 640h-128v128h128v-128zM384 640v-384l256 192z" />
+<glyph unicode="&#xe923;" glyph-name="profile" data-tags="profile, file, document, page, user, paper" d="M864 960h-768c-52.8 0-96-43.2-96-96v-832c0-52.8 43.2-96 96-96h768c52.8 0 96 43.2 96 96v832c0 52.8-43.2 96-96 96zM832 64h-704v768h704v-768zM256 384h448v-64h-448zM256 256h448v-64h-448zM320 672c0 53.019 42.981 96 96 96s96-42.981 96-96c0-53.019-42.981-96-96-96s-96 42.981-96 96zM480 576h-128c-52.8 0-96-28.8-96-64v-64h320v64c0 35.2-43.2 64-96 64z" />
+<glyph unicode="&#xe927;" glyph-name="file-picture" data-tags="file-picture, file, document, file-image" d="M832 64h-640v128l192 320 263-320 185 128v-256zM832 480c0-53.020-42.98-96-96-96-53.022 0-96 42.98-96 96s42.978 96 96 96c53.020 0 96-42.98 96-96zM917.806 730.924c-22.212 30.292-53.174 65.7-87.178 99.704s-69.412 64.964-99.704 87.178c-51.574 37.82-76.592 42.194-90.924 42.194h-496c-44.112 0-80-35.888-80-80v-864c0-44.112 35.888-80 80-80h736c44.112 0 80 35.888 80 80v624c0 14.332-4.372 39.35-42.194 90.924zM785.374 785.374c30.7-30.7 54.8-58.398 72.58-81.374h-153.954v153.946c22.984-17.78 50.678-41.878 81.374-72.572zM896 16c0-8.672-7.328-16-16-16h-736c-8.672 0-16 7.328-16 16v864c0 8.672 7.328 16 16 16 0 0 495.956 0.002 496 0v-224c0-17.672 14.326-32 32-32h224v-624z" />
+<glyph unicode="&#xe929;" glyph-name="file-play" data-tags="file-play, file, document, file-media, file-video" d="M384 576l320-224-320-224v448zM917.806 730.924c-22.212 30.292-53.174 65.7-87.178 99.704s-69.412 64.964-99.704 87.178c-51.574 37.82-76.592 42.194-90.924 42.194h-496c-44.112 0-80-35.888-80-80v-864c0-44.112 35.888-80 80-80h736c44.112 0 80 35.888 80 80v624c0 14.332-4.372 39.35-42.194 90.924zM785.374 785.374c30.7-30.7 54.8-58.398 72.58-81.374h-153.954v153.946c22.984-17.78 50.678-41.878 81.374-72.572zM896 16c0-8.672-7.328-16-16-16h-736c-8.672 0-16 7.328-16 16v864c0 8.672 7.328 16 16 16 0 0 495.956 0.002 496 0v-224c0-17.672 14.326-32 32-32h224v-624z" />
+<glyph unicode="&#xe92c;" glyph-name="copy" data-tags="copy, duplicate, files, pages, papers, documents" d="M640 704v256h-448l-192-192v-576h384v-256h640v768h-384zM192 869.49v-101.49h-101.49l101.49 101.49zM64 256v448h192v192h320v-192l-192-192v-256h-320zM576 613.49v-101.49h-101.49l101.49 101.49zM960 0h-512v448h192v192h320v-640z" />
+<glyph unicode="&#xe92d;" glyph-name="paste" data-tags="paste, clipboard-file" d="M704 832h-128v64c0 35.2-28.8 64-64 64h-128c-35.204 0-64-28.8-64-64v-64h-128v-128h512v128zM512 832h-128v63.886c0.034 0.038 0.072 0.078 0.114 0.114h127.768c0.042-0.036 0.082-0.076 0.118-0.114v-63.886zM832 640v160c0 17.6-14.4 32-32 32h-64v-64h32v-128h-192l-192-192v-256h-256v576h32v64h-64c-17.602 0-32-14.4-32-32v-640c0-17.6 14.398-32 32-32h288v-192h640v704h-192zM576 549.49v-101.49h-101.49l101.49 101.49zM960 0h-512v384h192v192h320v-576z" />
+<glyph unicode="&#xe93a;" glyph-name="cart" data-tags="cart, purchase, ecommerce, shopping" d="M384 32c0-53.019-42.981-96-96-96s-96 42.981-96 96c0 53.019 42.981 96 96 96s96-42.981 96-96zM1024 32c0-53.019-42.981-96-96-96s-96 42.981-96 96c0 53.019 42.981 96 96 96s96-42.981 96-96zM1024 448v384h-768c0 35.346-28.654 64-64 64h-192v-64h128l48.074-412.054c-29.294-23.458-48.074-59.5-48.074-99.946 0-70.696 57.308-128 128-128h768v64h-768c-35.346 0-64 28.654-64 64 0 0.218 0.014 0.436 0.016 0.656l831.984 127.344z" />
+<glyph unicode="&#xe93c;" glyph-name="coin-euro" data-tags="coin-euro, money, cash, currency-euro" d="M480 896c-265.096 0-480-214.904-480-480s214.904-480 480-480c265.098 0 480 214.902 480 480s-214.902 480-480 480zM480 32c-212.078 0-384 171.922-384 384s171.922 384 384 384c212.076 0 384-171.922 384-384s-171.924-384-384-384zM670.824 315.66c-15.27 8.884-34.862 3.708-43.75-11.57-17.256-29.662-49.088-48.090-83.074-48.090h-128c-41.716 0-77.286 26.754-90.496 64h154.496c17.672 0 32 14.326 32 32s-14.328 32-32 32h-160v64h160c17.672 0 32 14.328 32 32s-14.328 32-32 32h-154.496c13.21 37.246 48.78 64 90.496 64h128c33.986 0 65.818-18.426 83.074-48.090 8.888-15.276 28.478-20.456 43.752-11.568 15.276 8.888 20.456 28.476 11.568 43.752-28.672 49.288-81.702 79.906-138.394 79.906h-128c-77.268 0-141.914-55.056-156.78-128h-35.22c-17.672 0-32-14.328-32-32s14.328-32 32-32h32v-64h-32c-17.672 0-32-14.326-32-32s14.328-32 32-32h35.22c14.866-72.944 79.512-128 156.78-128h128c56.692 0 109.72 30.62 138.394 79.91 8.888 15.276 3.708 34.864-11.57 43.75z" />
+<glyph unicode="&#xe93f;" glyph-name="credit-card" data-tags="credit-card, money, payment, ecommerce" d="M928 832h-832c-52.8 0-96-43.2-96-96v-576c0-52.8 43.2-96 96-96h832c52.8 0 96 43.2 96 96v576c0 52.8-43.2 96-96 96zM96 768h832c17.346 0 32-14.654 32-32v-96h-896v96c0 17.346 14.654 32 32 32zM928 128h-832c-17.346 0-32 14.654-32 32v288h896v-288c0-17.346-14.654-32-32-32zM128 320h64v-128h-64zM256 320h64v-128h-64zM384 320h64v-128h-64z" />
+<glyph unicode="&#xe942;" glyph-name="phone" data-tags="phone, telephone, contact, support, call" d="M704 320c-64-64-64-128-128-128s-128 64-192 128-128 128-128 192 64 64 128 128-128 256-192 256-192-192-192-192c0-128 131.5-387.5 256-512s384-256 512-256c0 0 192 128 192 192s-192 256-256 192z" />
+<glyph unicode="&#xe945;" glyph-name="envelop" data-tags="envelop, mail, email, contact, letter" d="M928 832h-832c-52.8 0-96-43.2-96-96v-640c0-52.8 43.2-96 96-96h832c52.8 0 96 43.2 96 96v640c0 52.8-43.2 96-96 96zM398.74 409.628l-270.74-210.892v501.642l270.74-290.75zM176.38 704h671.24l-335.62-252-335.62 252zM409.288 398.302l102.712-110.302 102.71 110.302 210.554-270.302h-626.528l210.552 270.302zM625.26 409.628l270.74 290.75v-501.642l-270.74 210.892z" />
+<glyph unicode="&#xe946;" glyph-name="pushpin" data-tags="pushpin, pin" d="M544 960l-96-96 96-96-224-256h-224l176-176-272-360.616v-39.384h39.384l360.616 272 176-176v224l256 224 96-96 96 96-480 480zM448 416l-64 64 224 224 64-64-224-224z" />
+<glyph unicode="&#xe947;" glyph-name="location" data-tags="location, map-marker, pin" d="M512 960c-176.732 0-320-143.268-320-320 0-320 320-704 320-704s320 384 320 704c0 176.732-143.27 320-320 320zM512 448c-106.040 0-192 85.96-192 192s85.96 192 192 192 192-85.96 192-192-85.96-192-192-192z" />
+<glyph unicode="&#xe94c;" glyph-name="map2" data-tags="map, guide" d="M672 768l-320 128-352-128v-768l352 128 320-128 352 128v768l-352-128zM384 814.27l256-102.4v-630.138l-256 102.398v630.14zM64 723.172l256 93.090v-631.8l-256-93.088v631.798zM960 172.828l-256-93.092v631.8l256 93.090v-631.798z" />
+<glyph unicode="&#xe94e;" glyph-name="clock" data-tags="clock, time, schedule" d="M658.744 210.744l-210.744 210.746v282.51h128v-229.49l173.256-173.254zM512 960c-282.77 0-512-229.23-512-512s229.23-512 512-512 512 229.23 512 512-229.23 512-512 512zM512 64c-212.078 0-384 171.922-384 384s171.922 384 384 384c212.078 0 384-171.922 384-384s-171.922-384-384-384z" />
+<glyph unicode="&#xe953;" glyph-name="calendar" data-tags="calendar, date, schedule, time, day" d="M320 576h128v-128h-128zM512 576h128v-128h-128zM704 576h128v-128h-128zM128 192h128v-128h-128zM320 192h128v-128h-128zM512 192h128v-128h-128zM320 384h128v-128h-128zM512 384h128v-128h-128zM704 384h128v-128h-128zM128 384h128v-128h-128zM832 960v-64h-128v64h-448v-64h-128v64h-128v-1024h960v1024h-128zM896 0h-832v704h832v-704z" />
+<glyph unicode="&#xe95e;" glyph-name="box-add" data-tags="box-add, box, download, storage, inbox, archive" d="M832 896h-640l-192-192v-672c0-17.674 14.326-32 32-32h960c17.672 0 32 14.326 32 32v672l-192 192zM512 128l-320 256h192v192h256v-192h192l-320-256zM154.51 768l64 64h586.978l64-64h-714.978z" />
+<glyph unicode="&#xe960;" glyph-name="download" data-tags="download, save, store, arrow" d="M512 384l256 256h-192v256h-128v-256h-192zM744.726 488.728l-71.74-71.742 260.080-96.986-421.066-157.018-421.066 157.018 260.080 96.986-71.742 71.742-279.272-104.728v-256l512-192 512 192v256z" />
+<glyph unicode="&#xe9bd;" glyph-name="menu" data-tags="menu, list, options, lines, hamburger" d="M64 768h896v-192h-896zM64 512h896v-192h-896zM64 256h896v-192h-896z" />
+<glyph unicode="&#xea0f;" glyph-name="cross" data-tags="cross, cancel, close, quit, remove" d="M1014.662 137.34c-0.004 0.004-0.008 0.008-0.012 0.010l-310.644 310.65 310.644 310.65c0.004 0.004 0.008 0.006 0.012 0.010 3.344 3.346 5.762 7.254 7.312 11.416 4.246 11.376 1.824 24.682-7.324 33.83l-146.746 146.746c-9.148 9.146-22.45 11.566-33.828 7.32-4.16-1.55-8.070-3.968-11.418-7.31 0-0.004-0.004-0.006-0.008-0.010l-310.648-310.652-310.648 310.65c-0.004 0.004-0.006 0.006-0.010 0.010-3.346 3.342-7.254 5.76-11.414 7.31-11.38 4.248-24.682 1.826-33.83-7.32l-146.748-146.748c-9.148-9.148-11.568-22.452-7.322-33.828 1.552-4.16 3.97-8.072 7.312-11.416 0.004-0.002 0.006-0.006 0.010-0.010l310.65-310.648-310.65-310.652c-0.002-0.004-0.006-0.006-0.008-0.010-3.342-3.346-5.76-7.254-7.314-11.414-4.248-11.376-1.826-24.682 7.322-33.83l146.748-146.746c9.15-9.148 22.452-11.568 33.83-7.322 4.16 1.552 8.070 3.97 11.416 7.312 0.002 0.004 0.006 0.006 0.010 0.010l310.648 310.65 310.648-310.65c0.004-0.002 0.008-0.006 0.012-0.008 3.348-3.344 7.254-5.762 11.414-7.314 11.378-4.246 24.684-1.826 33.828 7.322l146.746 146.748c9.148 9.148 11.57 22.454 7.324 33.83-1.552 4.16-3.97 8.068-7.314 11.414z" />
+<glyph unicode="&#xea10;" glyph-name="checkmark" data-tags="checkmark, tick, correct, accept, ok" d="M864 832l-480-480-224 224-160-160 384-384 640 640z" />
+<glyph unicode="&#xea34;" glyph-name="arrow-right" data-tags="arrow-right, right, next" d="M992 448l-480 480v-288h-512v-384h512v-288z" />
+<glyph unicode="&#xea36;" glyph-name="arrow-down" data-tags="arrow-down, down, download, bottom" d="M512-32l480 480h-288v512h-384v-512h-288z" />
+<glyph unicode="&#xea38;" glyph-name="arrow-left" data-tags="arrow-left, left, previous" d="M32 448l480-480v288h512v384h-512v288z" />
+<glyph unicode="&#xea3c;" glyph-name="arrow-right2" data-tags="arrow-right, right, next" d="M621.254 82.746l320 320c24.994 24.992 24.994 65.516 0 90.51l-320 320c-24.994 24.992-65.516 24.992-90.51 0-24.994-24.994-24.994-65.516 0-90.51l210.746-210.746h-613.49c-35.346 0-64-28.654-64-64s28.654-64 64-64h613.49l-210.746-210.746c-12.496-12.496-18.744-28.876-18.744-45.254s6.248-32.758 18.744-45.254c24.994-24.994 65.516-24.994 90.51 0z" />
+<glyph unicode="&#xea40;" glyph-name="arrow-left2" data-tags="arrow-left, left, previous" d="M402.746 82.746l-320 320c-24.994 24.992-24.994 65.516 0 90.51l320 320c24.994 24.992 65.516 24.992 90.51 0 24.994-24.994 24.994-65.516 0-90.51l-210.746-210.746h613.49c35.346 0 64-28.654 64-64s-28.654-64-64-64h-613.49l210.746-210.746c12.496-12.496 18.744-28.876 18.744-45.254s-6.248-32.758-18.744-45.254c-24.994-24.994-65.516-24.994-90.51 0z" />
+<glyph unicode="&#xea42;" glyph-name="circle-right" data-tags="circle-right, right, circle-next, arrow" d="M512 960c-282.77 0-512-229.23-512-512s229.23-512 512-512 512 229.23 512 512-229.23 512-512 512zM512 32c-229.75 0-416 186.25-416 416s186.25 416 416 416 416-186.25 416-416-186.25-416-416-416zM354.744 253.256l90.512-90.512 285.254 285.256-285.256 285.254-90.508-90.508 194.744-194.746z" />
+<glyph unicode="&#xea44;" glyph-name="circle-left" data-tags="circle-left, left, circle-previous, arrow" d="M512-64c282.77 0 512 229.23 512 512s-229.23 512-512 512-512-229.23-512-512 229.23-512 512-512zM512 864c229.75 0 416-186.25 416-416s-186.25-416-416-416-416 186.25-416 416 186.25 416 416 416zM669.256 642.744l-90.512 90.512-285.254-285.256 285.256-285.254 90.508 90.508-194.744 194.746z" />
+<glyph unicode="&#xea52;" glyph-name="checkbox-checked" data-tags="checkbox-checked, checkbox, tick, checked, selected" d="M896 960h-768c-70.4 0-128-57.6-128-128v-768c0-70.4 57.6-128 128-128h768c70.4 0 128 57.6 128 128v768c0 70.4-57.6 128-128 128zM448 165.49l-237.254 237.256 90.51 90.508 146.744-146.744 306.746 306.746 90.508-90.51-397.254-397.256z" />
+<glyph unicode="&#xea53;" glyph-name="checkbox-unchecked" data-tags="checkbox-unchecked, checkbox, unchecked, square" d="M896 960h-768c-70.4 0-128-57.6-128-128v-768c0-70.4 57.6-128 128-128h768c70.4 0 128 57.6 128 128v768c0 70.4-57.6 128-128 128zM896 64h-768v768h768v-768z" />
+<glyph unicode="&#xea76;" glyph-name="section" data-tags="section, wysiwyg" d="M495.964-64c-49.36 0-91.116 14.406-124.104 42.82-33.224 28.614-50.068 62.038-50.068 99.344 0 18.128 6.6 33.756 19.622 46.458 13.232 12.914 29.782 19.744 47.85 19.744 18.002 0 34.194-6.41 46.826-18.542 12.472-11.972 18.796-27.824 18.796-47.104 0-11.318-1.85-23.818-5.494-37.146-3.616-13.178-4.376-19.938-4.376-23.292 0-3.682 0.924-8.076 7.774-12.756 12.76-8.824 28.066-13.084 46.876-13.084 22.576 0 42.718 7.858 61.574 24.022 18.578 15.942 27.612 32.318 27.612 50.056 0 19.736-5.27 36.826-16.12 52.242-18.336 25.758-52.878 55.954-102.612 89.668-79.858 53.454-133.070 99.766-162.58 141.52-22.89 32.684-34.476 67.89-34.476 104.704 0 37.062 12.142 73.948 36.092 109.63 20.508 30.554 50.8 58.12 90.228 82.138-21.096 22.7-36.896 44.064-47.094 63.688-12.872 24.76-19.398 50.372-19.398 76.122 0 47.814 18.91 89.16 56.206 122.89 37.32 33.76 83.86 50.878 138.322 50.878 50.086 0 92.206-14.082 125.182-41.852 33.328-28.082 50.222-60.898 50.222-97.54 0-18.656-6.986-35.364-20.766-49.66l-0.276-0.282c-7.976-7.924-22.618-17.37-47.046-17.37-19.148 0-35.934 6.272-48.54 18.136-12.558 11.794-18.93 25.918-18.93 41.966 0 6.934 1.702 17.416 5.352 32.98 1.778 7.364 2.668 14.142 2.668 20.25 0 10.338-3.726 18.272-11.724 24.966-8.282 6.93-20.108 10.302-36.142 10.302-24.868 0-45.282-7.562-62.41-23.118-17.19-15.606-25.544-34.088-25.544-56.508 0-20.156 4.568-36.762 13.58-49.362 17.112-23.938 46.796-49.79 88.22-76.836 84.17-54.588 142.902-104.672 174.518-148.826 23.35-33.12 35.152-68.34 35.152-104.792 0-36.598-11.882-73.496-35.318-109.676-20.208-31.18-50.722-59.276-90.884-83.71 22.178-23.466 37.812-44.042 47.554-62.538 12.082-22.97 18.208-48.048 18.208-74.542 0-49.664-18.926-91.862-56.244-125.422-37.34-33.554-83.866-50.566-138.288-50.566zM446.416 603.654c-48.222-28.952-71.712-62.19-71.712-101.314 0-22.756 6.498-43.13 19.86-62.278 19.936-27.926 59.27-62.054 116.804-101.288 24.358-16.586 46.36-32.712 65.592-48.060 49.060 29.504 72.956 62.366 72.956 100.178 0 20.598-8.142 42.774-24.204 65.916-16.808 24.196-52.85 55.796-107.128 93.914-28.328 19.562-52.558 37.334-72.168 52.932z" />
+<glyph unicode="&#xea7d;" glyph-name="share" data-tags="share, out, external, outside" d="M256 320c0 0 58.824 192 384 192v-192l384 256-384 256v-192c-256 0-384-159.672-384-320zM704 192h-576v384h125.876c10.094 11.918 20.912 23.334 32.488 34.18 43.964 41.19 96.562 72.652 156.114 93.82h-442.478v-640h832v268.624l-128-85.334v-55.29z" />
+<glyph unicode="&#xea7e;" glyph-name="new-tab" data-tags="new-tab, out, external, outside, popout, link, blank" d="M192 896v-768h768v768h-768zM896 192h-640v640h640v-640zM128 64v672l-64 64v-800h800l-64 64h-672zM352 704l160-160-192-192 96-96 192 192 160-160v416z" />
+<glyph unicode="&#xea83;" glyph-name="mail" data-tags="mail, contact, support, newsletter, letter, email, envelop, social" d="M853.31 960h-682.62c-93.88 0-170.69-76.784-170.69-170.658v-682.656c0-93.876 76.81-170.686 170.69-170.686h682.622c93.938 0 170.688 76.81 170.688 170.686v682.656c0 93.874-76.75 170.658-170.69 170.658zM256 704h512c9.138 0 18.004-1.962 26.144-5.662l-282.144-329.168-282.144 329.17c8.14 3.696 17.006 5.66 26.144 5.66zM192 256v384c0 1.34 0.056 2.672 0.14 4l187.664-218.94-185.598-185.6c-1.444 5.338-2.206 10.886-2.206 16.54zM768 192h-512c-5.654 0-11.202 0.762-16.54 2.206l182.118 182.118 90.422-105.496 90.424 105.494 182.116-182.118c-5.34-1.442-10.886-2.204-16.54-2.204zM832 256c0-5.654-0.762-11.2-2.206-16.54l-185.598 185.598 187.664 218.942c0.084-1.328 0.14-2.66 0.14-4v-384z" />
+<glyph unicode="&#xea91;" glyph-name="facebook2" data-tags="facebook, brand, social" d="M928 960h-832c-52.8 0-96-43.2-96-96v-832c0-52.8 43.2-96 96-96h416v448h-128v128h128v64c0 105.8 86.2 192 192 192h128v-128h-128c-35.2 0-64-28.8-64-64v-64h192l-32-128h-160v-448h288c52.8 0 96 43.2 96 96v832c0 52.8-43.2 96-96 96z" />
+<glyph unicode="&#xea92;" glyph-name="instagram" data-tags="instagram, brand, social" d="M512 867.8c136.8 0 153-0.6 206.8-3 50-2.2 77-10.6 95-17.6 23.8-9.2 41-20.4 58.8-38.2 18-18 29-35 38.4-58.8 7-18 15.4-45.2 17.6-95 2.4-54 3-70.2 3-206.8s-0.6-153-3-206.8c-2.2-50-10.6-77-17.6-95-9.2-23.8-20.4-41-38.2-58.8-18-18-35-29-58.8-38.4-18-7-45.2-15.4-95-17.6-54-2.4-70.2-3-206.8-3s-153 0.6-206.8 3c-50 2.2-77 10.6-95 17.6-23.8 9.2-41 20.4-58.8 38.2-18 18-29 35-38.4 58.8-7 18-15.4 45.2-17.6 95-2.4 54-3 70.2-3 206.8s0.6 153 3 206.8c2.2 50 10.6 77 17.6 95 9.2 23.8 20.4 41 38.2 58.8 18 18 35 29 58.8 38.4 18 7 45.2 15.4 95 17.6 53.8 2.4 70 3 206.8 3zM512 960c-139 0-156.4-0.6-211-3-54.4-2.4-91.8-11.2-124.2-23.8-33.8-13.2-62.4-30.6-90.8-59.2-28.6-28.4-46-57-59.2-90.6-12.6-32.6-21.4-69.8-23.8-124.2-2.4-54.8-3-72.2-3-211.2s0.6-156.4 3-211c2.4-54.4 11.2-91.8 23.8-124.2 13.2-33.8 30.6-62.4 59.2-90.8 28.4-28.4 57-46 90.6-59 32.6-12.6 69.8-21.4 124.2-23.8 54.6-2.4 72-3 211-3s156.4 0.6 211 3c54.4 2.4 91.8 11.2 124.2 23.8 33.6 13 62.2 30.6 90.6 59s46 57 59 90.6c12.6 32.6 21.4 69.8 23.8 124.2 2.4 54.6 3 72 3 211s-0.6 156.4-3 211c-2.4 54.4-11.2 91.8-23.8 124.2-12.6 34-30 62.6-58.6 91-28.4 28.4-57 46-90.6 59-32.6 12.6-69.8 21.4-124.2 23.8-54.8 2.6-72.2 3.2-211.2 3.2v0zM512 711c-145.2 0-263-117.8-263-263s117.8-263 263-263 263 117.8 263 263c0 145.2-117.8 263-263 263zM512 277.4c-94.2 0-170.6 76.4-170.6 170.6s76.4 170.6 170.6 170.6c94.2 0 170.6-76.4 170.6-170.6s-76.4-170.6-170.6-170.6zM846.8 721.4c0-33.91-27.49-61.4-61.4-61.4s-61.4 27.49-61.4 61.4c0 33.91 27.49 61.4 61.4 61.4s61.4-27.49 61.4-61.4z" />
+<glyph unicode="&#xea93;" glyph-name="whatsapp" data-tags="whatsapp, brand, social" d="M873 811.2c-95.8 96-223.2 148.8-359 148.8-279.6 0-507.2-227.6-507.2-507.4 0-89.4 23.4-176.8 67.8-253.6l-72-263 269 70.6c74.2-40.4 157.6-61.8 242.4-61.8h0.2c0 0 0 0 0 0 279.6 0 507.4 227.6 507.4 507.4 0 135.6-52.8 263-148.6 359zM514.2 30.4v0c-75.8 0-150 20.4-214.8 58.8l-15.4 9.2-159.6-41.8 42.6 155.6-10 16c-42.4 67-64.6 144.6-64.6 224.4 0 232.6 189.2 421.8 422 421.8 112.6 0 218.6-44 298.2-123.6 79.6-79.8 123.4-185.6 123.4-298.4-0.2-232.8-189.4-422-421.8-422zM745.4 346.4c-12.6 6.4-75 37-86.6 41.2s-20 6.4-28.6-6.4c-8.4-12.6-32.8-41.2-40.2-49.8-7.4-8.4-14.8-9.6-27.4-3.2s-53.6 19.8-102 63c-37.6 33.6-63.2 75.2-70.6 87.8s-0.8 19.6 5.6 25.8c5.8 5.6 12.6 14.8 19 22.2s8.4 12.6 12.6 21.2c4.2 8.4 2.2 15.8-1 22.2s-28.6 68.8-39 94.2c-10.2 24.8-20.8 21.4-28.6 21.8-7.4 0.4-15.8 0.4-24.2 0.4s-22.2-3.2-33.8-15.8c-11.6-12.6-44.4-43.4-44.4-105.8s45.4-122.6 51.8-131.2c6.4-8.4 89.4-136.6 216.6-191.4 30.2-13 53.8-20.8 72.2-26.8 30.4-9.6 58-8.2 79.8-5 24.4 3.6 75 30.6 85.6 60.2s10.6 55 7.4 60.2c-3 5.6-11.4 8.8-24.2 15.2z" />
+<glyph unicode="&#xea96;" glyph-name="twitter" data-tags="twitter, brand, tweet, social" d="M1024 733.6c-37.6-16.8-78.2-28-120.6-33 43.4 26 76.6 67.2 92.4 116.2-40.6-24-85.6-41.6-133.4-51-38.4 40.8-93 66.2-153.4 66.2-116 0-210-94-210-210 0-16.4 1.8-32.4 5.4-47.8-174.6 8.8-329.4 92.4-433 219.6-18-31-28.4-67.2-28.4-105.6 0-72.8 37-137.2 93.4-174.8-34.4 1-66.8 10.6-95.2 26.2 0-0.8 0-1.8 0-2.6 0-101.8 72.4-186.8 168.6-206-17.6-4.8-36.2-7.4-55.4-7.4-13.6 0-26.6 1.4-39.6 3.8 26.8-83.4 104.4-144.2 196.2-146-72-56.4-162.4-90-261-90-17 0-33.6 1-50.2 3 93.2-59.8 203.6-94.4 322.2-94.4 386.4 0 597.8 320.2 597.8 597.8 0 9.2-0.2 18.2-0.6 27.2 41 29.4 76.6 66.4 104.8 108.6z" />
+<glyph unicode="&#xea9d;" glyph-name="youtube" data-tags="youtube, brand, social" d="M1013.8 652.8c0 0-10 70.6-40.8 101.6-39 40.8-82.6 41-102.6 43.4-143.2 10.4-358.2 10.4-358.2 10.4h-0.4c0 0-215 0-358.2-10.4-20-2.4-63.6-2.6-102.6-43.4-30.8-31-40.6-101.6-40.6-101.6s-10.2-82.8-10.2-165.8v-77.6c0-82.8 10.2-165.8 10.2-165.8s10-70.6 40.6-101.6c39-40.8 90.2-39.4 113-43.8 82-7.8 348.2-10.2 348.2-10.2s215.2 0.4 358.4 10.6c20 2.4 63.6 2.6 102.6 43.4 30.8 31 40.8 101.6 40.8 101.6s10.2 82.8 10.2 165.8v77.6c-0.2 82.8-10.4 165.8-10.4 165.8zM406.2 315.2v287.8l276.6-144.4-276.6-143.4z" />
+</font></defs></svg>
\ No newline at end of file
diff --git a/website/css/fonts/siteicons.ttf b/website/css/fonts/siteicons.ttf
new file mode 100644 (file)
index 0000000..0b612cc
Binary files /dev/null and b/website/css/fonts/siteicons.ttf differ
diff --git a/website/css/fonts/siteicons.woff b/website/css/fonts/siteicons.woff
new file mode 100644 (file)
index 0000000..3089162
Binary files /dev/null and b/website/css/fonts/siteicons.woff differ
index 787a144..4a08fb1 100644 (file)
@@ -1,9 +1,9 @@
 @font-face {
-  font-family: 'ledf';
+  font-family: 'siteicons';
   src:
-    url('fonts/ledf.ttf?d9kavb') format('truetype'),
-    url('fonts/ledf.woff?d9kavb') format('woff'),
-    url('fonts/ledf.svg?d9kavb#ledf') format('svg');
+    url('fonts/siteicons.ttf?2p3ux7') format('truetype'),
+    url('fonts/siteicons.woff?2p3ux7') format('woff'),
+    url('fonts/siteicons.svg?2p3ux7#siteicons') format('svg');
   font-weight: normal;
   font-style: normal;
   font-display: block;
@@ -11,7 +11,7 @@
 
 [class^="icon-"], [class*=" icon-"] {
   /* use !important to prevent issues with browser extensions that change fonts */
-  font-family: 'ledf' !important;
+  font-family: 'siteicons' !important;
   speak: never;
   font-style: normal;
   font-weight: normal;
   -moz-osx-font-smoothing: grayscale;
 }
 
+.icon-home:before {
+  content: "\e900";
+}
+.icon-image:before {
+  content: "\e90d";
+}
+.icon-images:before {
+  content: "\e90e";
+}
+.icon-camera:before {
+  content: "\e90f";
+}
+.icon-play:before {
+  content: "\e912";
+}
+.icon-film:before {
+  content: "\e913";
+}
+.icon-profile:before {
+  content: "\e923";
+}
+.icon-file-picture:before {
+  content: "\e927";
+}
+.icon-file-play:before {
+  content: "\e929";
+}
+.icon-copy:before {
+  content: "\e92c";
+}
+.icon-paste:before {
+  content: "\e92d";
+}
+.icon-cart:before {
+  content: "\e93a";
+}
+.icon-coin-euro:before {
+  content: "\e93c";
+}
+.icon-credit-card:before {
+  content: "\e93f";
+}
+.icon-phone:before {
+  content: "\e942";
+}
 .icon-envelop:before {
   content: "\e945";
 }
+.icon-pushpin:before {
+  content: "\e946";
+}
 .icon-location:before {
   content: "\e947";
 }
 .icon-map2:before {
   content: "\e94c";
 }
+.icon-clock:before {
+  content: "\e94e";
+}
 .icon-calendar:before {
   content: "\e953";
 }
+.icon-box-add:before {
+  content: "\e95e";
+}
+.icon-download:before {
+  content: "\e960";
+}
 .icon-menu:before {
   content: "\e9bd";
 }
+.icon-cross:before {
+  content: "\ea0f";
+}
+.icon-checkmark:before {
+  content: "\ea10";
+}
+.icon-arrow-right:before {
+  content: "\ea34";
+}
+.icon-arrow-down:before {
+  content: "\ea36";
+}
+.icon-arrow-left:before {
+  content: "\ea38";
+}
+.icon-arrow-right2:before {
+  content: "\ea3c";
+}
+.icon-arrow-left2:before {
+  content: "\ea40";
+}
+.icon-circle-right:before {
+  content: "\ea42";
+}
+.icon-circle-left:before {
+  content: "\ea44";
+}
+.icon-checkbox-checked:before {
+  content: "\ea52";
+}
+.icon-checkbox-unchecked:before {
+  content: "\ea53";
+}
+.icon-section:before {
+  content: "\ea76";
+}
+.icon-share:before {
+  content: "\ea7d";
+}
+.icon-new-tab:before {
+  content: "\ea7e";
+}
+.icon-mail:before {
+  content: "\ea83";
+}
+.icon-facebook2:before {
+  content: "\ea91";
+}
+.icon-instagram:before {
+  content: "\ea92";
+}
+.icon-whatsapp:before {
+  content: "\ea93";
+}
+.icon-twitter:before {
+  content: "\ea96";
+}
+.icon-youtube:before {
+  content: "\ea9d";
+}
index 959e755..93157a5 100644 (file)
@@ -1,6 +1,6 @@
-body {
+/* body {
   font-family: sans-serif;
-}
+} */
 
 /* Make content area fill the entire browser window */
 html,
@@ -12,7 +12,7 @@ html,
   width: 100%;
 }
 
-/* Center the content in the browser window */
+/* Center the content in the browser window
 .container {
   margin: auto;
   text-align: center;
@@ -20,4 +20,4 @@ html,
 
 .title {
   font-size: 3rem;
-}
+} */
index 2b61b8b..e1e6f53 100644 (file)
@@ -25,9 +25,9 @@ legend{color:inherit;display:table;max-width:100%;padding:0;white-space:normal}t
 [type=search]::-webkit-search-decoration{-webkit-appearance:none}
 ::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}
 /* End extract */
-/* html,body {
-       background-color: #52638e;
-} */
+html ,body {
+       background-color: #faeddd;
+} 
 html,body{font-family:Verdana,sans-serif;font-size:9pt;line-height:1.5}html{overflow-x:hidden}
 h1{font-size:36px}h2{font-size:30px}h3{font-size:24px}h4{font-size:20px}h5{font-size:18px}h6{font-size:16px}.serif{font-family:serif}
 h1,h2,h3,h4,h5,h6{font-family:"Segoe UI",Arial,sans-serif;font-weight:400;margin: 0}.wide{letter-spacing:4px}
@@ -50,16 +50,26 @@ hr{border:0;border-top:1px solid #eee;margin:20px 0}
 .ripple:active{opacity:0.5}.ripple{transition:opacity 0s}
 .input{padding:2px;display:block;border: 0;border-bottom: 1px solid #ccc;width:100%;background-color: #fff;}/*#e8f0fe*/
 .select{padding:2px 0; display:block;width:100%;border:1px solid #ccc;background-color: #fff;}
+.check,.radio{width:24px;height:24px;position:relative;top:6px}
+.sidebar{height:100%;width:160px;background-color:#fff;position:fixed!important;z-index:1;overflow:auto}
 .dropdown-click,.dropdown-hover{position:relative;display:inline-block;cursor:pointer}
 .dropdown-hover:hover .dropdown-content{display:block; }
 .dropdown-hover:first-child,.dropdown-click:hover{background-color:#ccc;color:#000}
 .dropdown-hover:hover > .button:first-child,.dropdown-click:hover > .button:first-child{background-color:#ccc;color:#000}
 .dropdown-content{cursor:auto;color:#000;background-color:#fff;display:none;position:absolute;min-width:160px;margin:0;padding:0;z-index:1}
-.check,.radio{width:24px;height:24px;position:relative;top:6px}
-.sidebar{height:100%;width:160px;background-color:#fff;position:fixed!important;z-index:1;overflow:auto}
 .bar-block .dropdown-hover,.bar-block .dropdown-click{width:100%}
 .bar-block .dropdown-hover .dropdown-content,.bar-block .dropdown-click .dropdown-content{min-width:100%}
 .bar-block .dropdown-hover .button,.bar-block .dropdown-click .button{width:100%;text-align:left;padding:8px 16px}
+
+.dropup-click,.dropup-hover{position:relative;display:inline-block;cursor:pointer}
+.dropup-hover:hover .dropup-content{display:block; }
+.dropup-hover:first-child,.dropup-click:hover{background-color:#ccc;color:#000}
+.dropup-hover:hover > .button:first-child,.dropup-click:hover > .button:first-child{background-color:#ccc;color:#000}
+.dropup-content{cursor:auto;color:#000;background-color:#fff;display:none;position:absolute;min-width:160px;bottom:70px;padding:0;z-index:1}
+.bar-block .dropup-hover,.bar-block .dropup-click{width:100%}
+.bar-block .dropup-hover .dropup-content,.bar-block .dropup-click .dropup-content{min-width:100%}
+.bar-block .dropup-hover .button,.bar-block .dropup-click .button{width:100%;text-align:left;padding:8px 16px}
+
 .main,#main{transition:margin-left .4s}
 .modal{z-index:3;display:none;padding-top:100px;position:fixed;left:0;top:0;width:100%;height:100%;overflow:auto;background-color:rgb(0,0,0);background-color:rgba(0,0,0,0.4)}
 .modal-content{margin:auto;background-color:#fff;position:relative;padding:0;outline:0;width:600px}
@@ -70,6 +80,7 @@ hr{border:0;border-top:1px solid #eee;margin:20px 0}
 .bar-block .bar-item{width:100%;display:block;padding:8px 16px;text-align:left;border:none;white-space:normal;float:none;outline:0}
 .bar-block.center .bar-item{text-align:center}.block{display:block;width:100%}
 .responsive{display:block;overflow-x:auto}
+.panel{ width: 100%;}
 .container:after,.container:before,.datapanel:after,.datapanel:before,.row:after,.row:before,.row-padding:after,.row-padding:before,
 .cell-row:before,.cell-row:after,.clear:after,.clear:before,.bar:before,.bar:after{content:"";display:table;clear:both}
 .col,.half,.third,.twothird,.threequarter,.quarter,.fifth,.twofifth,.threefifth,.fourfifth{float:left;width:100%}
@@ -146,117 +157,13 @@ hr{border:0;border-top:1px solid #eee;margin:20px 0}
 .padding-32{padding-top:32px!important;padding-bottom:32px!important}.padding-48{padding-top:48px!important;padding-bottom:48px!important}
 .padding-64{padding-top:64px!important;padding-bottom:64px!important}
 .left{float:left!important}.right{float:right!important}
-.button:hover{color:#fff!important;background-color:#343434!important}
+.button:hover{color:#fff!important;background-color:#ca050f!important}
 .transparent,.hover-none:hover{background-color:transparent!important}
 .hover-none:hover{box-shadow:none!important}
 /* DEFAULT COLORS */
-.amber,.hover-amber:hover{color:#000!important;background-color:#ffc107!important}
-.aqua,.hover-aqua:hover{color:#000!important;background-color:#00ffff!important}
-.blue,.hover-blue:hover{color:#fff!important;background-color:#2196F3!important}
-.light-blue,.hover-light-blue:hover{color:#000!important;background-color:#87CEEB!important}
-.brown,.hover-brown:hover{color:#fff!important;background-color:#795548!important}
-.cyan,.hover-cyan:hover{color:#000!important;background-color:#00bcd4!important}
-.blue-grey,.hover-blue-grey:hover{color:#fff!important;background-color:#607d8b!important}
-.green,.hover-green:hover{color:#fff!important;background-color:#4CAF50!important}
-.light-green,.hover-light-green:hover{color:#000!important;background-color:#8bc34a!important}
-.indigo,.hover-indigo:hover{color:#fff!important;background-color:#3f51b5!important}
-.khaki,.hover-khaki:hover{color:#000!important;background-color:#f0e68c!important}
-.lime,.hover-lime:hover{color:#000!important;background-color:#cddc39!important}
-.orange,.hover-orange:hover{color:#000!important;background-color:#ff9800!important}
-.deep-orange,.hover-deep-orange:hover{color:#fff!important;background-color:#ff5722!important}
-.pink,.hover-pink:hover{color:#fff!important;background-color:#e91e63!important}
-.purple,.hover-purple:hover{color:#fff!important;background-color:#9c27b0!important}
-.deep-purple,.hover-deep-purple:hover{color:#fff!important;background-color:#673ab7!important}
-.red,.hover-red:hover{color:#fff!important;background-color:#f44336!important}
-.sand,.hover-sand:hover{color:#000!important;background-color:#fdf5e6!important}
-.teal,.hover-teal:hover{color:#fff!important;background-color:#009688!important}
-.yellow,.hover-yellow:hover{color:#000!important;background-color:#ffeb3b!important}
-.white,.hover-white:hover{color:#000!important;background-color:#fff!important}
-.black,.hover-black:hover{color:#fff!important;background-color:#000!important}
-.grey,.hover-grey:hover{color:#000!important;background-color:#c6c6c6!important}
-.light-grey,.hover-light-grey:hover{color:#000!important;background-color:#f1f1f1!important}
-.dark-grey,.hover-dark-grey:hover{color:#fff!important;background-color:#616161!important}
-.pale-red,.hover-pale-red:hover{color:#000!important;background-color:#ffe7e7!important}.pale-green,.hover-pale-green:hover{color:#000!important;background-color:#e7ffe7!important}
-.pale-yellow,.hover-pale-yellow:hover{color:#000!important;background-color:#ffffd7!important}.pale-blue,.hover-pale-blue:hover{color:#000!important;background-color:#e7ffff!important}
-.text-align-right { text-align: right;}
-.text-amber,.hover-text-amber:hover{color:#ffc107!important}
-.text-aqua,.hover-text-aqua:hover{color:#00ffff!important}
-.text-blue,.hover-text-blue:hover{color:#2196F3!important}
-.text-light-blue,.hover-text-light-blue:hover{color:#87CEEB!important}
-.text-brown,.hover-text-brown:hover{color:#795548!important}
-.text-cyan,.hover-text-cyan:hover{color:#00bcd4!important}
-.text-blue-grey,.hover-text-blue-grey:hover{color:#607d8b!important}
-.text-green,.hover-text-green:hover{color:#4CAF50!important}
-.text-light-green,.hover-text-light-green:hover{color:#8bc34a!important}
-.text-indigo,.hover-text-indigo:hover{color:#3f51b5!important}
-.text-khaki,.hover-text-khaki:hover{color:#b4aa50!important}
-.text-lime,.hover-text-lime:hover{color:#cddc39!important}
-.text-orange,.hover-text-orange:hover{color:#ff9800!important}
-.text-deep-orange,.hover-text-deep-orange:hover{color:#ff5722!important}
-.text-pink,.hover-text-pink:hover{color:#e91e63!important}
-.text-purple,.hover-text-purple:hover{color:#9c27b0!important}
-.text-deep-purple,.hover-text-deep-purple:hover{color:#673ab7!important}
-.text-red,.hover-text-red:hover{color:#f44336!important}
-.text-sand,.hover-text-sand:hover{color:#fdf5e6!important}
-.text-teal,.hover-text-teal:hover{color:#009688!important}
-.text-yellow,.hover-text-yellow:hover{color:#d2be0e!important}
-.text-white,.hover-text-white:hover{color:#fff!important}
-.text-black,.hover-text-black:hover{color:#000!important}
-.text-grey,.hover-text-grey:hover{color:#757575!important}
-.text-light-grey,.hover-text-light-grey:hover{color:#f1f1f1!important}
-.text-dark-grey,.hover-text-dark-grey:hover{color:#3a3a3a!important}
-.border-amber,.hover-border-amber:hover{border-color:#ffc107!important}
-.border-aqua,.hover-border-aqua:hover{border-color:#00ffff!important}
-.border-blue,.hover-border-blue:hover{border-color:#2196F3!important}
-.border-light-blue,.hover-border-light-blue:hover{border-color:#87CEEB!important}
-.border-brown,.hover-border-brown:hover{border-color:#795548!important}
-.border-cyan,.hover-border-cyan:hover{border-color:#00bcd4!important}
-.border-blue-grey,.hover-blue-grey:hover{border-color:#607d8b!important}
-.border-green,.hover-border-green:hover{border-color:#4CAF50!important}
-.border-light-green,.hover-border-light-green:hover{border-color:#8bc34a!important}
-.border-indigo,.hover-border-indigo:hover{border-color:#3f51b5!important}
-.border-khaki,.hover-border-khaki:hover{border-color:#f0e68c!important}
-.border-lime,.hover-border-lime:hover{border-color:#cddc39!important}
-.border-orange,.hover-border-orange:hover{border-color:#ff9800!important}
-.border-deep-orange,.hover-border-deep-orange:hover{border-color:#ff5722!important}
-.border-pink,.hover-border-pink:hover{border-color:#e91e63!important}
-.border-purple,.hover-border-purple:hover{border-color:#9c27b0!important}
-.border-deep-purple,.hover-border-deep-purple:hover{border-color:#673ab7!important}
-.border-red,.hover-border-red:hover{border-color:#f44336!important}
-.border-sand,.hover-border-sand:hover{border-color:#fdf5e6!important}
-.border-teal,.hover-border-teal:hover{border-color:#009688!important}
-.border-yellow,.hover-border-yellow:hover{border-color:#ffeb3b!important}
-.border-white,.hover-border-white:hover{border-color:#fff!important}
-.border-black,.hover-border-black:hover{border-color:#000!important}
-.border-grey,.hover-border-grey:hover{border-color:#9e9e9e!important}
-.border-light-grey,.hover-border-light-grey:hover{border-color:#f1f1f1!important}
-.border-dark-grey,.hover-border-dark-grey:hover{border-color:#616161!important}
-.border-pale-red,.hover-border-pale-red:hover{border-color:#ffe7e7!important}.border-pale-green,.hover-border-pale-green:hover{border-color:#e7ffe7!important}
-.border-pale-yellow,.hover-border-pale-yellow:hover{border-color:#ffffd7!important}.border-pale-blue,.hover-border-pale-blue:hover{border-color:#e7ffff!important}
-/* DEFAULT THEME */
-.theme-l5 {color:#000 !important; background-color:#f6f8fc !important}
-.theme-l4 {color:#000 !important; background-color:#e1e9f6 !important}
-.theme-l3 {color:#000 !important; background-color:#c3d3ed !important}
-.theme-l2 {color:#000 !important; background-color:#a5bee4 !important}
-.theme-l1 {color:#fff !important; background-color:#88a8db !important}
-.theme-d1 {color:#fff !important; background-color:#5180cb !important}
-.theme-d2 {color:#fff !important; background-color:#3a6fc3 !important}
-.theme-d3 {color:#fff !important; background-color:#3361aa !important}
-.theme-d4 {color:#fff !important; background-color:#2c5392 !important}
-.theme-d5 {color:#fff !important; background-color:#24457a !important}
-
-.theme-light {color:#000 !important; background-color:#f6f8fc !important}
-.theme-dark {color:#fff !important; background-color:#24457a !important}
-.theme-action {color:#fff !important; background-color:#24457a !important}
-
-.theme {color:#fff !important; background-color:#6a92d3 !important}
-.text-theme {color:#6a92d3 !important}
-.border-theme {border-color:#6a92d3 !important}
-
-.hover-theme:hover {color:#fff !important; background-color:#6a92d3 !important}
-.hover-text-theme:hover {color:#6a92d3 !important}
-.hover-border-theme:hover {border-color:#6a92d3 !important}
-
+.red-gold,.hover-red-gold{color: #b0834c;background-color: #c42027;}
+.gold-white,.hover-gold-white{background-color: #b0834c;color: #fff;}
+.text-white { color: #fff;}
 /* .label { color: #000; font-size: 8pt;} */
 /* #main {margin-left: 210px;} */
 /* @media (max-width:768px){
@@ -561,7 +468,7 @@ button.Button_ImgPlacer .inner_border
 div.PageHeadTitle
 {
        font-size: 18pt;
-       color: #fff;
+       color: #b0834c;
 }
 
 div.ListView_SectionHeader
@@ -987,4 +894,13 @@ input[type="time"]::-webkit-calendar-picker-indicator {
 
 .border-bottom {
   border-bottom: 2px solid #00bcd4;
+}
+
+html,
+.fullscreen {
+  display: flex;
+  height: 100%;
+  margin: 0;
+  padding: 0;
+  width: 100%;
 }
\ No newline at end of file
diff --git a/website/img/IMG_20201029_105226.jpg b/website/img/IMG_20201029_105226.jpg
new file mode 100644 (file)
index 0000000..cefd546
Binary files /dev/null and b/website/img/IMG_20201029_105226.jpg differ
diff --git a/website/img/dose.jpg b/website/img/dose.jpg
new file mode 100644 (file)
index 0000000..d858075
Binary files /dev/null and b/website/img/dose.jpg differ
index 013d4a6..dd3947d 100644 (file)
@@ -1,41 +1,40 @@
 {
- "name": "App",
+ "name": "OldBell",
  "icons": [
   {
-   "src": "\/android-icon-36x36.png",
+   "src": "android-icon-36x36.png",
    "sizes": "36x36",
-   "type": "image\/png",
-   "density": "0.75"
+   "type": "image/png"
   },
   {
-   "src": "\/android-icon-48x48.png",
+   "src": "android-icon-48x48.png",
    "sizes": "48x48",
-   "type": "image\/png",
-   "density": "1.0"
+   "type": "image/png"
   },
   {
-   "src": "\/android-icon-72x72.png",
+   "src": "android-icon-72x72.png",
    "sizes": "72x72",
-   "type": "image\/png",
-   "density": "1.5"
+   "type": "image/png"
   },
   {
-   "src": "\/android-icon-96x96.png",
+   "src": "android-icon-96x96.png",
    "sizes": "96x96",
-   "type": "image\/png",
-   "density": "2.0"
+   "type": "image/png"
   },
   {
-   "src": "\/android-icon-144x144.png",
+   "src": "android-icon-144x144.png",
    "sizes": "144x144",
-   "type": "image\/png",
-   "density": "3.0"
+   "type": "image/png"
   },
   {
-   "src": "\/android-icon-192x192.png",
+   "src": "android-icon-192x192.png",
    "sizes": "192x192",
-   "type": "image\/png",
-   "density": "4.0"
+   "type": "image/png"
   }
- ]
+ ],
+ "lang": "fr-FR",
+  "start_url": "http://dks-laptop/oldbell_lu/index.html",
+  "display": "standalone",
+  "background_color": "white",
+  "theme_color": "white"
 }
\ No newline at end of file
diff --git a/website/img/logo.png b/website/img/logo.png
new file mode 100644 (file)
index 0000000..a0061fd
Binary files /dev/null and b/website/img/logo.png differ
diff --git a/website/img/logo1.png b/website/img/logo1.png
new file mode 100644 (file)
index 0000000..5570514
Binary files /dev/null and b/website/img/logo1.png differ
diff --git a/website/img/thumb.jpg b/website/img/thumb.jpg
new file mode 100644 (file)
index 0000000..0813018
Binary files /dev/null and b/website/img/thumb.jpg differ
diff --git a/website/img/wood-pattern.jpg b/website/img/wood-pattern.jpg
new file mode 100644 (file)
index 0000000..9be9efe
Binary files /dev/null and b/website/img/wood-pattern.jpg differ
index 0feadc8..8255193 100644 (file)
@@ -8,7 +8,13 @@
   $vars = array();
   $vars["page"] = 'home.html';
   if ($_SERVER["REQUEST_URI"] != $cfg["basepath"]){
-    $vars["filepath"] = $_SERVER["REQUEST_URI"];
+    if (strpos($_SERVER["REQUEST_URI"], ".html?") === false){
+      $vars["filepath"] = $_SERVER["REQUEST_URI"];
+    }else {
+      $vars["filepath"] = substr($_SERVER["REQUEST_URI"],0,strpos($_SERVER["REQUEST_URI"],".html?")).".html";
+    }
+    
+    $vars["params"] = getparams();
     $vars["page"] = substr($vars["filepath"],strlen($cfg["basepath"]));
   }
   $vars["contenttype"] = "text/html";
@@ -23,9 +29,9 @@
   {
     $vars["page"] = 'error.html';
   }
-  if (file_exists($cfg["templatepath"].'/pages/'.$vars["page"].'json')){
+  if (file_exists($cfg["templatepath"].'/pages/'.$vars["page"].'.json')){
     $db = new database($cfg["db"]);    
-    $tmpdata = file_get_contents($cfg["templatepath"].'/pages/'.$vars["page"].'json');
+    $tmpdata = file_get_contents($cfg["templatepath"].'/pages/'.$vars["page"].'.json');
     try {
       $vars["data"] = json_decode($tmpdata,true);
       foreach ($vars["data"] as $key => $value) {
@@ -57,5 +63,5 @@
 
   $mainsite = $m->render('index.html',$vars);
   echo $mainsite;
-  // echo "<pre>".print_r($vars).print_r($_SERVER["REQUEST_URI"])."</pre>";
+  //echo "<pre>".print_r($vars).print_r($_SERVER["REQUEST_URI"]).print_r($vars)."</pre>";
 ?>
\ No newline at end of file
diff --git a/website/info.php b/website/info.php
new file mode 100644 (file)
index 0000000..3c256a4
--- /dev/null
@@ -0,0 +1,4 @@
+<?php 
+  phpinfo();
+  // echo "<pre>".print_r($vars).print_r($_SERVER["REQUEST_URI"])."</pre>";
+?>
\ No newline at end of file
diff --git a/website/js/gallery.js b/website/js/gallery.js
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/website/js/rendezvous.js b/website/js/rendezvous.js
new file mode 100644 (file)
index 0000000..ec2700f
--- /dev/null
@@ -0,0 +1,11 @@
+let rendezvous = {
+  tblproducts: null,
+  tbldates: null,
+  tblhours:null,
+  viewpanel: function(id){
+
+  },
+  init: function(){
+    
+  }
+}
\ No newline at end of file
diff --git a/website/js/shop.js b/website/js/shop.js
new file mode 100644 (file)
index 0000000..e69de29
index 952426e..d3b454a 100644 (file)
@@ -1,8 +1,43 @@
-function togglemenu(){
-  var mnu = document.getElementById("mobilemenu");
-  if (mnu.style.display == 'none'){
-    mnu.style.display = 'block';
-  } else {
-    mnu.style.display = 'none';
+// function togglemenu(){
+//   var mnu = document.getElementById("mobilemenu");
+//   if (mnu.style.display == 'none'){
+//     mnu.style.display = 'block';
+//   } else {
+//     mnu.style.display = 'none';
+//   }
+// }
+
+function hideAddressBar(){
+  if(document.documentElement.scrollHeight<window.outerHeight/window.devicePixelRatio)
+    document.documentElement.style.height=(window.outerHeight/window.devicePixelRatio)+'px';
+  setTimeout(window.scrollTo(1,1),0);
+}
+window.addEventListener("load",function(){hideAddressBar();});
+window.addEventListener("orientationchange",function(){hideAddressBar();});
+
+window.onload = () => {
+  'use strict';
+
+  if ('serviceWorker' in navigator) {
+    navigator.serviceWorker
+             .register('./js/sw.js');
+  }
+}
+
+function dropdown(drdid){
+  var x = document.getElementById(drdid);
+  if (x.className.indexOf("show") == -1) {
+    x.className += " show";
+  } else { 
+    x.className = x.className.replace(" show", "");
+  }
+}
+
+function dropup(drdid){
+  var x = document.getElementById(drdid);
+  if (x.className.indexOf("show") == -1) {
+    x.className += " show";
+  } else { 
+    x.className = x.className.replace(" show", "");
   }
 }
\ No newline at end of file
index 6730c5d..872158d 100644 (file)
@@ -1,9 +1,14 @@
-var cacheName = 'hello-pwa';
+var cacheName = 'oldbell-pwa';
 var filesToCache = [
-  '/',
-  '/index.html',
-  '/css/style.css',
-  '/js/main.js'
+  '/oldbell_lu/',
+  '/oldbell_lu/index.html',
+  '/oldbell_lu/css/theme.css',
+  '/oldbell_lu/css/icons.css',
+  '/oldbell_lu/css/fonts/siteicons.svg',
+  '/oldbell_lu/css/fonts/siteicons.ttf',
+  '/oldbell_lu/css/fonts/siteicons.woff',
+  '/oldbell_lu/css/theme.css',
+  '/oldbell_lu/js/site.js'
 ];
 
 /* Start the service worker and cache all of the app's content */
diff --git a/website/js/vendor/flatpickr/flatpickr.css b/website/js/vendor/flatpickr/flatpickr.css
new file mode 100644 (file)
index 0000000..4c58f46
--- /dev/null
@@ -0,0 +1,791 @@
+.flatpickr-calendar {
+  background: transparent;
+  opacity: 0;
+  display: none;
+  text-align: center;
+  visibility: hidden;
+  padding: 0;
+  -webkit-animation: none;
+          animation: none;
+  direction: ltr;
+  border: 0;
+  font-size: 14px;
+  line-height: 24px;
+  border-radius: 5px;
+  position: absolute;
+  width: 307.875px;
+  -webkit-box-sizing: border-box;
+          box-sizing: border-box;
+  -ms-touch-action: manipulation;
+      touch-action: manipulation;
+  background: #fff;
+  -webkit-box-shadow: 1px 0 0 #e6e6e6, -1px 0 0 #e6e6e6, 0 1px 0 #e6e6e6, 0 -1px 0 #e6e6e6, 0 3px 13px rgba(0,0,0,0.08);
+          box-shadow: 1px 0 0 #e6e6e6, -1px 0 0 #e6e6e6, 0 1px 0 #e6e6e6, 0 -1px 0 #e6e6e6, 0 3px 13px rgba(0,0,0,0.08);
+}
+.flatpickr-calendar.open,
+.flatpickr-calendar.inline {
+  opacity: 1;
+  max-height: 640px;
+  visibility: visible;
+}
+.flatpickr-calendar.open {
+  display: inline-block;
+  z-index: 99999;
+}
+.flatpickr-calendar.animate.open {
+  -webkit-animation: fpFadeInDown 300ms cubic-bezier(0.23, 1, 0.32, 1);
+          animation: fpFadeInDown 300ms cubic-bezier(0.23, 1, 0.32, 1);
+}
+.flatpickr-calendar.inline {
+  display: block;
+  position: relative;
+  top: 2px;
+}
+.flatpickr-calendar.static {
+  position: absolute;
+  top: calc(100% + 2px);
+}
+.flatpickr-calendar.static.open {
+  z-index: 999;
+  display: block;
+}
+.flatpickr-calendar.multiMonth .flatpickr-days .dayContainer:nth-child(n+1) .flatpickr-day.inRange:nth-child(7n+7) {
+  -webkit-box-shadow: none !important;
+          box-shadow: none !important;
+}
+.flatpickr-calendar.multiMonth .flatpickr-days .dayContainer:nth-child(n+2) .flatpickr-day.inRange:nth-child(7n+1) {
+  -webkit-box-shadow: -2px 0 0 #e6e6e6, 5px 0 0 #e6e6e6;
+          box-shadow: -2px 0 0 #e6e6e6, 5px 0 0 #e6e6e6;
+}
+.flatpickr-calendar .hasWeeks .dayContainer,
+.flatpickr-calendar .hasTime .dayContainer {
+  border-bottom: 0;
+  border-bottom-right-radius: 0;
+  border-bottom-left-radius: 0;
+}
+.flatpickr-calendar .hasWeeks .dayContainer {
+  border-left: 0;
+}
+.flatpickr-calendar.hasTime .flatpickr-time {
+  height: 40px;
+  border-top: 1px solid #e6e6e6;
+}
+.flatpickr-calendar.noCalendar.hasTime .flatpickr-time {
+  height: auto;
+}
+.flatpickr-calendar:before,
+.flatpickr-calendar:after {
+  position: absolute;
+  display: block;
+  pointer-events: none;
+  border: solid transparent;
+  content: '';
+  height: 0;
+  width: 0;
+  left: 22px;
+}
+.flatpickr-calendar.rightMost:before,
+.flatpickr-calendar.arrowRight:before,
+.flatpickr-calendar.rightMost:after,
+.flatpickr-calendar.arrowRight:after {
+  left: auto;
+  right: 22px;
+}
+.flatpickr-calendar.arrowCenter:before,
+.flatpickr-calendar.arrowCenter:after {
+  left: 50%;
+  right: 50%;
+}
+.flatpickr-calendar:before {
+  border-width: 5px;
+  margin: 0 -5px;
+}
+.flatpickr-calendar:after {
+  border-width: 4px;
+  margin: 0 -4px;
+}
+.flatpickr-calendar.arrowTop:before,
+.flatpickr-calendar.arrowTop:after {
+  bottom: 100%;
+}
+.flatpickr-calendar.arrowTop:before {
+  border-bottom-color: #e6e6e6;
+}
+.flatpickr-calendar.arrowTop:after {
+  border-bottom-color: #fff;
+}
+.flatpickr-calendar.arrowBottom:before,
+.flatpickr-calendar.arrowBottom:after {
+  top: 100%;
+}
+.flatpickr-calendar.arrowBottom:before {
+  border-top-color: #e6e6e6;
+}
+.flatpickr-calendar.arrowBottom:after {
+  border-top-color: #fff;
+}
+.flatpickr-calendar:focus {
+  outline: 0;
+}
+.flatpickr-wrapper {
+  position: relative;
+  display: inline-block;
+}
+.flatpickr-months {
+  display: -webkit-box;
+  display: -webkit-flex;
+  display: -ms-flexbox;
+  display: flex;
+}
+.flatpickr-months .flatpickr-month {
+  background: transparent;
+  color: rgba(0,0,0,0.9);
+  fill: rgba(0,0,0,0.9);
+  height: 34px;
+  line-height: 1;
+  text-align: center;
+  position: relative;
+  -webkit-user-select: none;
+     -moz-user-select: none;
+      -ms-user-select: none;
+          user-select: none;
+  overflow: hidden;
+  -webkit-box-flex: 1;
+  -webkit-flex: 1;
+      -ms-flex: 1;
+          flex: 1;
+}
+.flatpickr-months .flatpickr-prev-month,
+.flatpickr-months .flatpickr-next-month {
+  text-decoration: none;
+  cursor: pointer;
+  position: absolute;
+  top: 0;
+  height: 34px;
+  padding: 10px;
+  z-index: 3;
+  color: rgba(0,0,0,0.9);
+  fill: rgba(0,0,0,0.9);
+}
+.flatpickr-months .flatpickr-prev-month.flatpickr-disabled,
+.flatpickr-months .flatpickr-next-month.flatpickr-disabled {
+  display: none;
+}
+.flatpickr-months .flatpickr-prev-month i,
+.flatpickr-months .flatpickr-next-month i {
+  position: relative;
+}
+.flatpickr-months .flatpickr-prev-month.flatpickr-prev-month,
+.flatpickr-months .flatpickr-next-month.flatpickr-prev-month {
+/*
+      /*rtl:begin:ignore*/
+/*
+      */
+  left: 0;
+/*
+      /*rtl:end:ignore*/
+/*
+      */
+}
+/*
+      /*rtl:begin:ignore*/
+/*
+      /*rtl:end:ignore*/
+.flatpickr-months .flatpickr-prev-month.flatpickr-next-month,
+.flatpickr-months .flatpickr-next-month.flatpickr-next-month {
+/*
+      /*rtl:begin:ignore*/
+/*
+      */
+  right: 0;
+/*
+      /*rtl:end:ignore*/
+/*
+      */
+}
+/*
+      /*rtl:begin:ignore*/
+/*
+      /*rtl:end:ignore*/
+.flatpickr-months .flatpickr-prev-month:hover,
+.flatpickr-months .flatpickr-next-month:hover {
+  color: #959ea9;
+}
+.flatpickr-months .flatpickr-prev-month:hover svg,
+.flatpickr-months .flatpickr-next-month:hover svg {
+  fill: #f64747;
+}
+.flatpickr-months .flatpickr-prev-month svg,
+.flatpickr-months .flatpickr-next-month svg {
+  width: 14px;
+  height: 14px;
+}
+.flatpickr-months .flatpickr-prev-month svg path,
+.flatpickr-months .flatpickr-next-month svg path {
+  -webkit-transition: fill 0.1s;
+  transition: fill 0.1s;
+  fill: inherit;
+}
+.numInputWrapper {
+  position: relative;
+  height: auto;
+}
+.numInputWrapper input,
+.numInputWrapper span {
+  display: inline-block;
+}
+.numInputWrapper input {
+  width: 100%;
+}
+.numInputWrapper input::-ms-clear {
+  display: none;
+}
+.numInputWrapper input::-webkit-outer-spin-button,
+.numInputWrapper input::-webkit-inner-spin-button {
+  margin: 0;
+  -webkit-appearance: none;
+}
+.numInputWrapper span {
+  position: absolute;
+  right: 0;
+  width: 14px;
+  padding: 0 4px 0 2px;
+  height: 50%;
+  line-height: 50%;
+  opacity: 0;
+  cursor: pointer;
+  border: 1px solid rgba(57,57,57,0.15);
+  -webkit-box-sizing: border-box;
+          box-sizing: border-box;
+}
+.numInputWrapper span:hover {
+  background: rgba(0,0,0,0.1);
+}
+.numInputWrapper span:active {
+  background: rgba(0,0,0,0.2);
+}
+.numInputWrapper span:after {
+  display: block;
+  content: "";
+  position: absolute;
+}
+.numInputWrapper span.arrowUp {
+  top: 0;
+  border-bottom: 0;
+}
+.numInputWrapper span.arrowUp:after {
+  border-left: 4px solid transparent;
+  border-right: 4px solid transparent;
+  border-bottom: 4px solid rgba(57,57,57,0.6);
+  top: 26%;
+}
+.numInputWrapper span.arrowDown {
+  top: 50%;
+}
+.numInputWrapper span.arrowDown:after {
+  border-left: 4px solid transparent;
+  border-right: 4px solid transparent;
+  border-top: 4px solid rgba(57,57,57,0.6);
+  top: 40%;
+}
+.numInputWrapper span svg {
+  width: inherit;
+  height: auto;
+}
+.numInputWrapper span svg path {
+  fill: rgba(0,0,0,0.5);
+}
+.numInputWrapper:hover {
+  background: rgba(0,0,0,0.05);
+}
+.numInputWrapper:hover span {
+  opacity: 1;
+}
+.flatpickr-current-month {
+  font-size: 135%;
+  line-height: inherit;
+  font-weight: 300;
+  color: inherit;
+  position: absolute;
+  width: 75%;
+  left: 12.5%;
+  padding: 7.48px 0 0 0;
+  line-height: 1;
+  height: 34px;
+  display: inline-block;
+  text-align: center;
+  -webkit-transform: translate3d(0px, 0px, 0px);
+          transform: translate3d(0px, 0px, 0px);
+}
+.flatpickr-current-month span.cur-month {
+  font-family: inherit;
+  font-weight: 700;
+  color: inherit;
+  display: inline-block;
+  margin-left: 0.5ch;
+  padding: 0;
+}
+.flatpickr-current-month span.cur-month:hover {
+  background: rgba(0,0,0,0.05);
+}
+.flatpickr-current-month .numInputWrapper {
+  width: 6ch;
+  width: 7ch\0;
+  display: inline-block;
+}
+.flatpickr-current-month .numInputWrapper span.arrowUp:after {
+  border-bottom-color: rgba(0,0,0,0.9);
+}
+.flatpickr-current-month .numInputWrapper span.arrowDown:after {
+  border-top-color: rgba(0,0,0,0.9);
+}
+.flatpickr-current-month input.cur-year {
+  background: transparent;
+  -webkit-box-sizing: border-box;
+          box-sizing: border-box;
+  color: inherit;
+  cursor: text;
+  padding: 0 0 0 0.5ch;
+  margin: 0;
+  display: inline-block;
+  font-size: inherit;
+  font-family: inherit;
+  font-weight: 300;
+  line-height: inherit;
+  height: auto;
+  border: 0;
+  border-radius: 0;
+  vertical-align: initial;
+  -webkit-appearance: textfield;
+  -moz-appearance: textfield;
+  appearance: textfield;
+}
+.flatpickr-current-month input.cur-year:focus {
+  outline: 0;
+}
+.flatpickr-current-month input.cur-year[disabled],
+.flatpickr-current-month input.cur-year[disabled]:hover {
+  font-size: 100%;
+  color: rgba(0,0,0,0.5);
+  background: transparent;
+  pointer-events: none;
+}
+.flatpickr-current-month .flatpickr-monthDropdown-months {
+  appearance: menulist;
+  background: transparent;
+  border: none;
+  border-radius: 0;
+  box-sizing: border-box;
+  color: inherit;
+  cursor: pointer;
+  font-size: inherit;
+  font-family: inherit;
+  font-weight: 300;
+  height: auto;
+  line-height: inherit;
+  margin: -1px 0 0 0;
+  outline: none;
+  padding: 0 0 0 0.5ch;
+  position: relative;
+  vertical-align: initial;
+  -webkit-box-sizing: border-box;
+  -webkit-appearance: menulist;
+  -moz-appearance: menulist;
+  width: auto;
+}
+.flatpickr-current-month .flatpickr-monthDropdown-months:focus,
+.flatpickr-current-month .flatpickr-monthDropdown-months:active {
+  outline: none;
+}
+.flatpickr-current-month .flatpickr-monthDropdown-months:hover {
+  background: rgba(0,0,0,0.05);
+}
+.flatpickr-current-month .flatpickr-monthDropdown-months .flatpickr-monthDropdown-month {
+  background-color: transparent;
+  outline: none;
+  padding: 0;
+}
+.flatpickr-weekdays {
+  background: transparent;
+  text-align: center;
+  overflow: hidden;
+  width: 100%;
+  display: -webkit-box;
+  display: -webkit-flex;
+  display: -ms-flexbox;
+  display: flex;
+  -webkit-box-align: center;
+  -webkit-align-items: center;
+      -ms-flex-align: center;
+          align-items: center;
+  height: 28px;
+}
+.flatpickr-weekdays .flatpickr-weekdaycontainer {
+  display: -webkit-box;
+  display: -webkit-flex;
+  display: -ms-flexbox;
+  display: flex;
+  -webkit-box-flex: 1;
+  -webkit-flex: 1;
+      -ms-flex: 1;
+          flex: 1;
+}
+span.flatpickr-weekday {
+  cursor: default;
+  font-size: 90%;
+  background: transparent;
+  color: rgba(0,0,0,0.54);
+  line-height: 1;
+  margin: 0;
+  text-align: center;
+  display: block;
+  -webkit-box-flex: 1;
+  -webkit-flex: 1;
+      -ms-flex: 1;
+          flex: 1;
+  font-weight: bolder;
+}
+.dayContainer,
+.flatpickr-weeks {
+  padding: 1px 0 0 0;
+}
+.flatpickr-days {
+  position: relative;
+  overflow: hidden;
+  display: -webkit-box;
+  display: -webkit-flex;
+  display: -ms-flexbox;
+  display: flex;
+  -webkit-box-align: start;
+  -webkit-align-items: flex-start;
+      -ms-flex-align: start;
+          align-items: flex-start;
+  width: 307.875px;
+}
+.flatpickr-days:focus {
+  outline: 0;
+}
+.dayContainer {
+  padding: 0;
+  outline: 0;
+  text-align: left;
+  width: 307.875px;
+  min-width: 307.875px;
+  max-width: 307.875px;
+  -webkit-box-sizing: border-box;
+          box-sizing: border-box;
+  display: inline-block;
+  display: -ms-flexbox;
+  display: -webkit-box;
+  display: -webkit-flex;
+  display: flex;
+  -webkit-flex-wrap: wrap;
+          flex-wrap: wrap;
+  -ms-flex-wrap: wrap;
+  -ms-flex-pack: justify;
+  -webkit-justify-content: space-around;
+          justify-content: space-around;
+  -webkit-transform: translate3d(0px, 0px, 0px);
+          transform: translate3d(0px, 0px, 0px);
+  opacity: 1;
+}
+.dayContainer + .dayContainer {
+  -webkit-box-shadow: -1px 0 0 #e6e6e6;
+          box-shadow: -1px 0 0 #e6e6e6;
+}
+.flatpickr-day {
+  background: none;
+  border: 1px solid transparent;
+  border-radius: 150px;
+  -webkit-box-sizing: border-box;
+          box-sizing: border-box;
+  color: #393939;
+  cursor: pointer;
+  font-weight: 400;
+  width: 14.2857143%;
+  -webkit-flex-basis: 14.2857143%;
+      -ms-flex-preferred-size: 14.2857143%;
+          flex-basis: 14.2857143%;
+  max-width: 39px;
+  height: 39px;
+  line-height: 39px;
+  margin: 0;
+  display: inline-block;
+  position: relative;
+  -webkit-box-pack: center;
+  -webkit-justify-content: center;
+      -ms-flex-pack: center;
+          justify-content: center;
+  text-align: center;
+}
+.flatpickr-day.inRange,
+.flatpickr-day.prevMonthDay.inRange,
+.flatpickr-day.nextMonthDay.inRange,
+.flatpickr-day.today.inRange,
+.flatpickr-day.prevMonthDay.today.inRange,
+.flatpickr-day.nextMonthDay.today.inRange,
+.flatpickr-day:hover,
+.flatpickr-day.prevMonthDay:hover,
+.flatpickr-day.nextMonthDay:hover,
+.flatpickr-day:focus,
+.flatpickr-day.prevMonthDay:focus,
+.flatpickr-day.nextMonthDay:focus {
+  cursor: pointer;
+  outline: 0;
+  background: #e6e6e6;
+  border-color: #e6e6e6;
+}
+.flatpickr-day.today {
+  border-color: #959ea9;
+}
+.flatpickr-day.today:hover,
+.flatpickr-day.today:focus {
+  border-color: #959ea9;
+  background: #959ea9;
+  color: #fff;
+}
+.flatpickr-day.selected,
+.flatpickr-day.startRange,
+.flatpickr-day.endRange,
+.flatpickr-day.selected.inRange,
+.flatpickr-day.startRange.inRange,
+.flatpickr-day.endRange.inRange,
+.flatpickr-day.selected:focus,
+.flatpickr-day.startRange:focus,
+.flatpickr-day.endRange:focus,
+.flatpickr-day.selected:hover,
+.flatpickr-day.startRange:hover,
+.flatpickr-day.endRange:hover,
+.flatpickr-day.selected.prevMonthDay,
+.flatpickr-day.startRange.prevMonthDay,
+.flatpickr-day.endRange.prevMonthDay,
+.flatpickr-day.selected.nextMonthDay,
+.flatpickr-day.startRange.nextMonthDay,
+.flatpickr-day.endRange.nextMonthDay {
+  background: #569ff7;
+  -webkit-box-shadow: none;
+          box-shadow: none;
+  color: #fff;
+  border-color: #569ff7;
+}
+.flatpickr-day.selected.startRange,
+.flatpickr-day.startRange.startRange,
+.flatpickr-day.endRange.startRange {
+  border-radius: 50px 0 0 50px;
+}
+.flatpickr-day.selected.endRange,
+.flatpickr-day.startRange.endRange,
+.flatpickr-day.endRange.endRange {
+  border-radius: 0 50px 50px 0;
+}
+.flatpickr-day.selected.startRange + .endRange:not(:nth-child(7n+1)),
+.flatpickr-day.startRange.startRange + .endRange:not(:nth-child(7n+1)),
+.flatpickr-day.endRange.startRange + .endRange:not(:nth-child(7n+1)) {
+  -webkit-box-shadow: -10px 0 0 #569ff7;
+          box-shadow: -10px 0 0 #569ff7;
+}
+.flatpickr-day.selected.startRange.endRange,
+.flatpickr-day.startRange.startRange.endRange,
+.flatpickr-day.endRange.startRange.endRange {
+  border-radius: 50px;
+}
+.flatpickr-day.inRange {
+  border-radius: 0;
+  -webkit-box-shadow: -5px 0 0 #e6e6e6, 5px 0 0 #e6e6e6;
+          box-shadow: -5px 0 0 #e6e6e6, 5px 0 0 #e6e6e6;
+}
+.flatpickr-day.flatpickr-disabled,
+.flatpickr-day.flatpickr-disabled:hover,
+.flatpickr-day.prevMonthDay,
+.flatpickr-day.nextMonthDay,
+.flatpickr-day.notAllowed,
+.flatpickr-day.notAllowed.prevMonthDay,
+.flatpickr-day.notAllowed.nextMonthDay {
+  color: rgba(57,57,57,0.3);
+  background: transparent;
+  border-color: transparent;
+  cursor: default;
+}
+.flatpickr-day.flatpickr-disabled,
+.flatpickr-day.flatpickr-disabled:hover {
+  cursor: not-allowed;
+  color: rgba(57,57,57,0.1);
+}
+.flatpickr-day.week.selected {
+  border-radius: 0;
+  -webkit-box-shadow: -5px 0 0 #569ff7, 5px 0 0 #569ff7;
+          box-shadow: -5px 0 0 #569ff7, 5px 0 0 #569ff7;
+}
+.flatpickr-day.hidden {
+  visibility: hidden;
+}
+.rangeMode .flatpickr-day {
+  margin-top: 1px;
+}
+.flatpickr-weekwrapper {
+  float: left;
+}
+.flatpickr-weekwrapper .flatpickr-weeks {
+  padding: 0 12px;
+  -webkit-box-shadow: 1px 0 0 #e6e6e6;
+          box-shadow: 1px 0 0 #e6e6e6;
+}
+.flatpickr-weekwrapper .flatpickr-weekday {
+  float: none;
+  width: 100%;
+  line-height: 28px;
+}
+.flatpickr-weekwrapper span.flatpickr-day,
+.flatpickr-weekwrapper span.flatpickr-day:hover {
+  display: block;
+  width: 100%;
+  max-width: none;
+  color: rgba(57,57,57,0.3);
+  background: transparent;
+  cursor: default;
+  border: none;
+}
+.flatpickr-innerContainer {
+  display: block;
+  display: -webkit-box;
+  display: -webkit-flex;
+  display: -ms-flexbox;
+  display: flex;
+  -webkit-box-sizing: border-box;
+          box-sizing: border-box;
+  overflow: hidden;
+}
+.flatpickr-rContainer {
+  display: inline-block;
+  padding: 0;
+  -webkit-box-sizing: border-box;
+          box-sizing: border-box;
+}
+.flatpickr-time {
+  text-align: center;
+  outline: 0;
+  display: block;
+  height: 0;
+  line-height: 40px;
+  max-height: 40px;
+  -webkit-box-sizing: border-box;
+          box-sizing: border-box;
+  overflow: hidden;
+  display: -webkit-box;
+  display: -webkit-flex;
+  display: -ms-flexbox;
+  display: flex;
+}
+.flatpickr-time:after {
+  content: "";
+  display: table;
+  clear: both;
+}
+.flatpickr-time .numInputWrapper {
+  -webkit-box-flex: 1;
+  -webkit-flex: 1;
+      -ms-flex: 1;
+          flex: 1;
+  width: 40%;
+  height: 40px;
+  float: left;
+}
+.flatpickr-time .numInputWrapper span.arrowUp:after {
+  border-bottom-color: #393939;
+}
+.flatpickr-time .numInputWrapper span.arrowDown:after {
+  border-top-color: #393939;
+}
+.flatpickr-time.hasSeconds .numInputWrapper {
+  width: 26%;
+}
+.flatpickr-time.time24hr .numInputWrapper {
+  width: 49%;
+}
+.flatpickr-time input {
+  background: transparent;
+  -webkit-box-shadow: none;
+          box-shadow: none;
+  border: 0;
+  border-radius: 0;
+  text-align: center;
+  margin: 0;
+  padding: 0;
+  height: inherit;
+  line-height: inherit;
+  color: #393939;
+  font-size: 14px;
+  position: relative;
+  -webkit-box-sizing: border-box;
+          box-sizing: border-box;
+  -webkit-appearance: textfield;
+  -moz-appearance: textfield;
+  appearance: textfield;
+}
+.flatpickr-time input.flatpickr-hour {
+  font-weight: bold;
+}
+.flatpickr-time input.flatpickr-minute,
+.flatpickr-time input.flatpickr-second {
+  font-weight: 400;
+}
+.flatpickr-time input:focus {
+  outline: 0;
+  border: 0;
+}
+.flatpickr-time .flatpickr-time-separator,
+.flatpickr-time .flatpickr-am-pm {
+  height: inherit;
+  float: left;
+  line-height: inherit;
+  color: #393939;
+  font-weight: bold;
+  width: 2%;
+  -webkit-user-select: none;
+     -moz-user-select: none;
+      -ms-user-select: none;
+          user-select: none;
+  -webkit-align-self: center;
+      -ms-flex-item-align: center;
+          align-self: center;
+}
+.flatpickr-time .flatpickr-am-pm {
+  outline: 0;
+  width: 18%;
+  cursor: pointer;
+  text-align: center;
+  font-weight: 400;
+}
+.flatpickr-time input:hover,
+.flatpickr-time .flatpickr-am-pm:hover,
+.flatpickr-time input:focus,
+.flatpickr-time .flatpickr-am-pm:focus {
+  background: #eee;
+}
+.flatpickr-input[readonly] {
+  cursor: pointer;
+}
+@-webkit-keyframes fpFadeInDown {
+  from {
+    opacity: 0;
+    -webkit-transform: translate3d(0, -20px, 0);
+            transform: translate3d(0, -20px, 0);
+  }
+  to {
+    opacity: 1;
+    -webkit-transform: translate3d(0, 0, 0);
+            transform: translate3d(0, 0, 0);
+  }
+}
+@keyframes fpFadeInDown {
+  from {
+    opacity: 0;
+    -webkit-transform: translate3d(0, -20px, 0);
+            transform: translate3d(0, -20px, 0);
+  }
+  to {
+    opacity: 1;
+    -webkit-transform: translate3d(0, 0, 0);
+            transform: translate3d(0, 0, 0);
+  }
+}
diff --git a/website/js/vendor/flatpickr/flatpickr.js b/website/js/vendor/flatpickr/flatpickr.js
new file mode 100644 (file)
index 0000000..a94e6ac
--- /dev/null
@@ -0,0 +1,2658 @@
+/* flatpickr v4.6.6, @license MIT */
+(function (global, factory) {
+    typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
+    typeof define === 'function' && define.amd ? define(factory) :
+    (global = global || self, global.flatpickr = factory());
+}(this, (function () { 'use strict';
+
+    /*! *****************************************************************************
+    Copyright (c) Microsoft Corporation.
+
+    Permission to use, copy, modify, and/or distribute this software for any
+    purpose with or without fee is hereby granted.
+
+    THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
+    REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+    AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
+    INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+    LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
+    OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+    PERFORMANCE OF THIS SOFTWARE.
+    ***************************************************************************** */
+
+    var __assign = function() {
+        __assign = Object.assign || function __assign(t) {
+            for (var s, i = 1, n = arguments.length; i < n; i++) {
+                s = arguments[i];
+                for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
+            }
+            return t;
+        };
+        return __assign.apply(this, arguments);
+    };
+
+    function __spreadArrays() {
+        for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;
+        for (var r = Array(s), k = 0, i = 0; i < il; i++)
+            for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)
+                r[k] = a[j];
+        return r;
+    }
+
+    var HOOKS = [
+        "onChange",
+        "onClose",
+        "onDayCreate",
+        "onDestroy",
+        "onKeyDown",
+        "onMonthChange",
+        "onOpen",
+        "onParseConfig",
+        "onReady",
+        "onValueUpdate",
+        "onYearChange",
+        "onPreCalendarPosition",
+    ];
+    var defaults = {
+        _disable: [],
+        _enable: [],
+        allowInput: false,
+        allowInvalidPreload: false,
+        altFormat: "F j, Y",
+        altInput: false,
+        altInputClass: "form-control input",
+        animate: typeof window === "object" &&
+            window.navigator.userAgent.indexOf("MSIE") === -1,
+        ariaDateFormat: "F j, Y",
+        autoFillDefaultTime: true,
+        clickOpens: true,
+        closeOnSelect: true,
+        conjunction: ", ",
+        dateFormat: "Y-m-d",
+        defaultHour: 12,
+        defaultMinute: 0,
+        defaultSeconds: 0,
+        disable: [],
+        disableMobile: false,
+        enable: [],
+        enableSeconds: false,
+        enableTime: false,
+        errorHandler: function (err) {
+            return typeof console !== "undefined" && console.warn(err);
+        },
+        getWeek: function (givenDate) {
+            var date = new Date(givenDate.getTime());
+            date.setHours(0, 0, 0, 0);
+            // Thursday in current week decides the year.
+            date.setDate(date.getDate() + 3 - ((date.getDay() + 6) % 7));
+            // January 4 is always in week 1.
+            var week1 = new Date(date.getFullYear(), 0, 4);
+            // Adjust to Thursday in week 1 and count number of weeks from date to week1.
+            return (1 +
+                Math.round(((date.getTime() - week1.getTime()) / 86400000 -
+                    3 +
+                    ((week1.getDay() + 6) % 7)) /
+                    7));
+        },
+        hourIncrement: 1,
+        ignoredFocusElements: [],
+        inline: false,
+        locale: "default",
+        minuteIncrement: 5,
+        mode: "single",
+        monthSelectorType: "dropdown",
+        nextArrow: "<svg version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 17 17'><g></g><path d='M13.207 8.472l-7.854 7.854-0.707-0.707 7.146-7.146-7.146-7.148 0.707-0.707 7.854 7.854z' /></svg>",
+        noCalendar: false,
+        now: new Date(),
+        onChange: [],
+        onClose: [],
+        onDayCreate: [],
+        onDestroy: [],
+        onKeyDown: [],
+        onMonthChange: [],
+        onOpen: [],
+        onParseConfig: [],
+        onReady: [],
+        onValueUpdate: [],
+        onYearChange: [],
+        onPreCalendarPosition: [],
+        plugins: [],
+        position: "auto",
+        positionElement: undefined,
+        prevArrow: "<svg version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 17 17'><g></g><path d='M5.207 8.471l7.146 7.147-0.707 0.707-7.853-7.854 7.854-7.853 0.707 0.707-7.147 7.146z' /></svg>",
+        shorthandCurrentMonth: false,
+        showMonths: 1,
+        static: false,
+        time_24hr: false,
+        weekNumbers: false,
+        wrap: false,
+    };
+
+    var english = {
+        weekdays: {
+            shorthand: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"],
+            longhand: [
+                "Sunday",
+                "Monday",
+                "Tuesday",
+                "Wednesday",
+                "Thursday",
+                "Friday",
+                "Saturday",
+            ],
+        },
+        months: {
+            shorthand: [
+                "Jan",
+                "Feb",
+                "Mar",
+                "Apr",
+                "May",
+                "Jun",
+                "Jul",
+                "Aug",
+                "Sep",
+                "Oct",
+                "Nov",
+                "Dec",
+            ],
+            longhand: [
+                "January",
+                "February",
+                "March",
+                "April",
+                "May",
+                "June",
+                "July",
+                "August",
+                "September",
+                "October",
+                "November",
+                "December",
+            ],
+        },
+        daysInMonth: [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31],
+        firstDayOfWeek: 0,
+        ordinal: function (nth) {
+            var s = nth % 100;
+            if (s > 3 && s < 21)
+                return "th";
+            switch (s % 10) {
+                case 1:
+                    return "st";
+                case 2:
+                    return "nd";
+                case 3:
+                    return "rd";
+                default:
+                    return "th";
+            }
+        },
+        rangeSeparator: " to ",
+        weekAbbreviation: "Wk",
+        scrollTitle: "Scroll to increment",
+        toggleTitle: "Click to toggle",
+        amPM: ["AM", "PM"],
+        yearAriaLabel: "Year",
+        monthAriaLabel: "Month",
+        hourAriaLabel: "Hour",
+        minuteAriaLabel: "Minute",
+        time_24hr: false,
+    };
+
+    var pad = function (number, length) {
+        if (length === void 0) { length = 2; }
+        return ("000" + number).slice(length * -1);
+    };
+    var int = function (bool) { return (bool === true ? 1 : 0); };
+    /* istanbul ignore next */
+    function debounce(func, wait, immediate) {
+        if (immediate === void 0) { immediate = false; }
+        var timeout;
+        return function () {
+            var context = this, args = arguments;
+            timeout !== null && clearTimeout(timeout);
+            timeout = window.setTimeout(function () {
+                timeout = null;
+                if (!immediate)
+                    func.apply(context, args);
+            }, wait);
+            if (immediate && !timeout)
+                func.apply(context, args);
+        };
+    }
+    var arrayify = function (obj) {
+        return obj instanceof Array ? obj : [obj];
+    };
+
+    function toggleClass(elem, className, bool) {
+        if (bool === true)
+            return elem.classList.add(className);
+        elem.classList.remove(className);
+    }
+    function createElement(tag, className, content) {
+        var e = window.document.createElement(tag);
+        className = className || "";
+        content = content || "";
+        e.className = className;
+        if (content !== undefined)
+            e.textContent = content;
+        return e;
+    }
+    function clearNode(node) {
+        while (node.firstChild)
+            node.removeChild(node.firstChild);
+    }
+    function findParent(node, condition) {
+        if (condition(node))
+            return node;
+        else if (node.parentNode)
+            return findParent(node.parentNode, condition);
+        return undefined; // nothing found
+    }
+    function createNumberInput(inputClassName, opts) {
+        var wrapper = createElement("div", "numInputWrapper"), numInput = createElement("input", "numInput " + inputClassName), arrowUp = createElement("span", "arrowUp"), arrowDown = createElement("span", "arrowDown");
+        if (navigator.userAgent.indexOf("MSIE 9.0") === -1) {
+            numInput.type = "number";
+        }
+        else {
+            numInput.type = "text";
+            numInput.pattern = "\\d*";
+        }
+        if (opts !== undefined)
+            for (var key in opts)
+                numInput.setAttribute(key, opts[key]);
+        wrapper.appendChild(numInput);
+        wrapper.appendChild(arrowUp);
+        wrapper.appendChild(arrowDown);
+        return wrapper;
+    }
+    function getEventTarget(event) {
+        try {
+            if (typeof event.composedPath === "function") {
+                var path = event.composedPath();
+                return path[0];
+            }
+            return event.target;
+        }
+        catch (error) {
+            return event.target;
+        }
+    }
+
+    var doNothing = function () { return undefined; };
+    var monthToStr = function (monthNumber, shorthand, locale) { return locale.months[shorthand ? "shorthand" : "longhand"][monthNumber]; };
+    var revFormat = {
+        D: doNothing,
+        F: function (dateObj, monthName, locale) {
+            dateObj.setMonth(locale.months.longhand.indexOf(monthName));
+        },
+        G: function (dateObj, hour) {
+            dateObj.setHours(parseFloat(hour));
+        },
+        H: function (dateObj, hour) {
+            dateObj.setHours(parseFloat(hour));
+        },
+        J: function (dateObj, day) {
+            dateObj.setDate(parseFloat(day));
+        },
+        K: function (dateObj, amPM, locale) {
+            dateObj.setHours((dateObj.getHours() % 12) +
+                12 * int(new RegExp(locale.amPM[1], "i").test(amPM)));
+        },
+        M: function (dateObj, shortMonth, locale) {
+            dateObj.setMonth(locale.months.shorthand.indexOf(shortMonth));
+        },
+        S: function (dateObj, seconds) {
+            dateObj.setSeconds(parseFloat(seconds));
+        },
+        U: function (_, unixSeconds) { return new Date(parseFloat(unixSeconds) * 1000); },
+        W: function (dateObj, weekNum, locale) {
+            var weekNumber = parseInt(weekNum);
+            var date = new Date(dateObj.getFullYear(), 0, 2 + (weekNumber - 1) * 7, 0, 0, 0, 0);
+            date.setDate(date.getDate() - date.getDay() + locale.firstDayOfWeek);
+            return date;
+        },
+        Y: function (dateObj, year) {
+            dateObj.setFullYear(parseFloat(year));
+        },
+        Z: function (_, ISODate) { return new Date(ISODate); },
+        d: function (dateObj, day) {
+            dateObj.setDate(parseFloat(day));
+        },
+        h: function (dateObj, hour) {
+            dateObj.setHours(parseFloat(hour));
+        },
+        i: function (dateObj, minutes) {
+            dateObj.setMinutes(parseFloat(minutes));
+        },
+        j: function (dateObj, day) {
+            dateObj.setDate(parseFloat(day));
+        },
+        l: doNothing,
+        m: function (dateObj, month) {
+            dateObj.setMonth(parseFloat(month) - 1);
+        },
+        n: function (dateObj, month) {
+            dateObj.setMonth(parseFloat(month) - 1);
+        },
+        s: function (dateObj, seconds) {
+            dateObj.setSeconds(parseFloat(seconds));
+        },
+        u: function (_, unixMillSeconds) {
+            return new Date(parseFloat(unixMillSeconds));
+        },
+        w: doNothing,
+        y: function (dateObj, year) {
+            dateObj.setFullYear(2000 + parseFloat(year));
+        },
+    };
+    var tokenRegex = {
+        D: "(\\w+)",
+        F: "(\\w+)",
+        G: "(\\d\\d|\\d)",
+        H: "(\\d\\d|\\d)",
+        J: "(\\d\\d|\\d)\\w+",
+        K: "",
+        M: "(\\w+)",
+        S: "(\\d\\d|\\d)",
+        U: "(.+)",
+        W: "(\\d\\d|\\d)",
+        Y: "(\\d{4})",
+        Z: "(.+)",
+        d: "(\\d\\d|\\d)",
+        h: "(\\d\\d|\\d)",
+        i: "(\\d\\d|\\d)",
+        j: "(\\d\\d|\\d)",
+        l: "(\\w+)",
+        m: "(\\d\\d|\\d)",
+        n: "(\\d\\d|\\d)",
+        s: "(\\d\\d|\\d)",
+        u: "(.+)",
+        w: "(\\d\\d|\\d)",
+        y: "(\\d{2})",
+    };
+    var formats = {
+        // get the date in UTC
+        Z: function (date) { return date.toISOString(); },
+        // weekday name, short, e.g. Thu
+        D: function (date, locale, options) {
+            return locale.weekdays.shorthand[formats.w(date, locale, options)];
+        },
+        // full month name e.g. January
+        F: function (date, locale, options) {
+            return monthToStr(formats.n(date, locale, options) - 1, false, locale);
+        },
+        // padded hour 1-12
+        G: function (date, locale, options) {
+            return pad(formats.h(date, locale, options));
+        },
+        // hours with leading zero e.g. 03
+        H: function (date) { return pad(date.getHours()); },
+        // day (1-30) with ordinal suffix e.g. 1st, 2nd
+        J: function (date, locale) {
+            return locale.ordinal !== undefined
+                ? date.getDate() + locale.ordinal(date.getDate())
+                : date.getDate();
+        },
+        // AM/PM
+        K: function (date, locale) { return locale.amPM[int(date.getHours() > 11)]; },
+        // shorthand month e.g. Jan, Sep, Oct, etc
+        M: function (date, locale) {
+            return monthToStr(date.getMonth(), true, locale);
+        },
+        // seconds 00-59
+        S: function (date) { return pad(date.getSeconds()); },
+        // unix timestamp
+        U: function (date) { return date.getTime() / 1000; },
+        W: function (date, _, options) {
+            return options.getWeek(date);
+        },
+        // full year e.g. 2016, padded (0001-9999)
+        Y: function (date) { return pad(date.getFullYear(), 4); },
+        // day in month, padded (01-30)
+        d: function (date) { return pad(date.getDate()); },
+        // hour from 1-12 (am/pm)
+        h: function (date) { return (date.getHours() % 12 ? date.getHours() % 12 : 12); },
+        // minutes, padded with leading zero e.g. 09
+        i: function (date) { return pad(date.getMinutes()); },
+        // day in month (1-30)
+        j: function (date) { return date.getDate(); },
+        // weekday name, full, e.g. Thursday
+        l: function (date, locale) {
+            return locale.weekdays.longhand[date.getDay()];
+        },
+        // padded month number (01-12)
+        m: function (date) { return pad(date.getMonth() + 1); },
+        // the month number (1-12)
+        n: function (date) { return date.getMonth() + 1; },
+        // seconds 0-59
+        s: function (date) { return date.getSeconds(); },
+        // Unix Milliseconds
+        u: function (date) { return date.getTime(); },
+        // number of the day of the week
+        w: function (date) { return date.getDay(); },
+        // last two digits of year e.g. 16 for 2016
+        y: function (date) { return String(date.getFullYear()).substring(2); },
+    };
+
+    var createDateFormatter = function (_a) {
+        var _b = _a.config, config = _b === void 0 ? defaults : _b, _c = _a.l10n, l10n = _c === void 0 ? english : _c, _d = _a.isMobile, isMobile = _d === void 0 ? false : _d;
+        return function (dateObj, frmt, overrideLocale) {
+            var locale = overrideLocale || l10n;
+            if (config.formatDate !== undefined && !isMobile) {
+                return config.formatDate(dateObj, frmt, locale);
+            }
+            return frmt
+                .split("")
+                .map(function (c, i, arr) {
+                return formats[c] && arr[i - 1] !== "\\"
+                    ? formats[c](dateObj, locale, config)
+                    : c !== "\\"
+                        ? c
+                        : "";
+            })
+                .join("");
+        };
+    };
+    var createDateParser = function (_a) {
+        var _b = _a.config, config = _b === void 0 ? defaults : _b, _c = _a.l10n, l10n = _c === void 0 ? english : _c;
+        return function (date, givenFormat, timeless, customLocale) {
+            if (date !== 0 && !date)
+                return undefined;
+            var locale = customLocale || l10n;
+            var parsedDate;
+            var dateOrig = date;
+            if (date instanceof Date)
+                parsedDate = new Date(date.getTime());
+            else if (typeof date !== "string" &&
+                date.toFixed !== undefined // timestamp
+            )
+                // create a copy
+                parsedDate = new Date(date);
+            else if (typeof date === "string") {
+                // date string
+                var format = givenFormat || (config || defaults).dateFormat;
+                var datestr = String(date).trim();
+                if (datestr === "today") {
+                    parsedDate = new Date();
+                    timeless = true;
+                }
+                else if (/Z$/.test(datestr) ||
+                    /GMT$/.test(datestr) // datestrings w/ timezone
+                )
+                    parsedDate = new Date(date);
+                else if (config && config.parseDate)
+                    parsedDate = config.parseDate(date, format);
+                else {
+                    parsedDate =
+                        !config || !config.noCalendar
+                            ? new Date(new Date().getFullYear(), 0, 1, 0, 0, 0, 0)
+                            : new Date(new Date().setHours(0, 0, 0, 0));
+                    var matched = void 0, ops = [];
+                    for (var i = 0, matchIndex = 0, regexStr = ""; i < format.length; i++) {
+                        var token_1 = format[i];
+                        var isBackSlash = token_1 === "\\";
+                        var escaped = format[i - 1] === "\\" || isBackSlash;
+                        if (tokenRegex[token_1] && !escaped) {
+                            regexStr += tokenRegex[token_1];
+                            var match = new RegExp(regexStr).exec(date);
+                            if (match && (matched = true)) {
+                                ops[token_1 !== "Y" ? "push" : "unshift"]({
+                                    fn: revFormat[token_1],
+                                    val: match[++matchIndex],
+                                });
+                            }
+                        }
+                        else if (!isBackSlash)
+                            regexStr += "."; // don't really care
+                        ops.forEach(function (_a) {
+                            var fn = _a.fn, val = _a.val;
+                            return (parsedDate = fn(parsedDate, val, locale) || parsedDate);
+                        });
+                    }
+                    parsedDate = matched ? parsedDate : undefined;
+                }
+            }
+            /* istanbul ignore next */
+            if (!(parsedDate instanceof Date && !isNaN(parsedDate.getTime()))) {
+                config.errorHandler(new Error("Invalid date provided: " + dateOrig));
+                return undefined;
+            }
+            if (timeless === true)
+                parsedDate.setHours(0, 0, 0, 0);
+            return parsedDate;
+        };
+    };
+    /**
+     * Compute the difference in dates, measured in ms
+     */
+    function compareDates(date1, date2, timeless) {
+        if (timeless === void 0) { timeless = true; }
+        if (timeless !== false) {
+            return (new Date(date1.getTime()).setHours(0, 0, 0, 0) -
+                new Date(date2.getTime()).setHours(0, 0, 0, 0));
+        }
+        return date1.getTime() - date2.getTime();
+    }
+    var isBetween = function (ts, ts1, ts2) {
+        return ts > Math.min(ts1, ts2) && ts < Math.max(ts1, ts2);
+    };
+    var duration = {
+        DAY: 86400000,
+    };
+
+    if (typeof Object.assign !== "function") {
+        Object.assign = function (target) {
+            var args = [];
+            for (var _i = 1; _i < arguments.length; _i++) {
+                args[_i - 1] = arguments[_i];
+            }
+            if (!target) {
+                throw TypeError("Cannot convert undefined or null to object");
+            }
+            var _loop_1 = function (source) {
+                if (source) {
+                    Object.keys(source).forEach(function (key) { return (target[key] = source[key]); });
+                }
+            };
+            for (var _a = 0, args_1 = args; _a < args_1.length; _a++) {
+                var source = args_1[_a];
+                _loop_1(source);
+            }
+            return target;
+        };
+    }
+
+    var DEBOUNCED_CHANGE_MS = 300;
+    function FlatpickrInstance(element, instanceConfig) {
+        var self = {
+            config: __assign(__assign({}, defaults), flatpickr.defaultConfig),
+            l10n: english,
+        };
+        self.parseDate = createDateParser({ config: self.config, l10n: self.l10n });
+        self._handlers = [];
+        self.pluginElements = [];
+        self.loadedPlugins = [];
+        self._bind = bind;
+        self._setHoursFromDate = setHoursFromDate;
+        self._positionCalendar = positionCalendar;
+        self.changeMonth = changeMonth;
+        self.changeYear = changeYear;
+        self.clear = clear;
+        self.close = close;
+        self._createElement = createElement;
+        self.destroy = destroy;
+        self.isEnabled = isEnabled;
+        self.jumpToDate = jumpToDate;
+        self.open = open;
+        self.redraw = redraw;
+        self.set = set;
+        self.setDate = setDate;
+        self.toggle = toggle;
+        function setupHelperFunctions() {
+            self.utils = {
+                getDaysInMonth: function (month, yr) {
+                    if (month === void 0) { month = self.currentMonth; }
+                    if (yr === void 0) { yr = self.currentYear; }
+                    if (month === 1 && ((yr % 4 === 0 && yr % 100 !== 0) || yr % 400 === 0))
+                        return 29;
+                    return self.l10n.daysInMonth[month];
+                },
+            };
+        }
+        function init() {
+            self.element = self.input = element;
+            self.isOpen = false;
+            parseConfig();
+            setupLocale();
+            setupInputs();
+            setupDates();
+            setupHelperFunctions();
+            if (!self.isMobile)
+                build();
+            bindEvents();
+            if (self.selectedDates.length || self.config.noCalendar) {
+                if (self.config.enableTime) {
+                    setHoursFromDate(self.config.noCalendar
+                        ? self.latestSelectedDateObj || self.config.minDate
+                        : undefined);
+                }
+                updateValue(false);
+            }
+            setCalendarWidth();
+            var isSafari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent);
+            /* TODO: investigate this further
+        
+              Currently, there is weird positioning behavior in safari causing pages
+              to scroll up. https://github.com/chmln/flatpickr/issues/563
+        
+              However, most browsers are not Safari and positioning is expensive when used
+              in scale. https://github.com/chmln/flatpickr/issues/1096
+            */
+            if (!self.isMobile && isSafari) {
+                positionCalendar();
+            }
+            triggerEvent("onReady");
+        }
+        function bindToInstance(fn) {
+            return fn.bind(self);
+        }
+        function setCalendarWidth() {
+            var config = self.config;
+            if (config.weekNumbers === false && config.showMonths === 1) {
+                return;
+            }
+            else if (config.noCalendar !== true) {
+                window.requestAnimationFrame(function () {
+                    if (self.calendarContainer !== undefined) {
+                        self.calendarContainer.style.visibility = "hidden";
+                        self.calendarContainer.style.display = "block";
+                    }
+                    if (self.daysContainer !== undefined) {
+                        var daysWidth = (self.days.offsetWidth + 1) * config.showMonths;
+                        self.daysContainer.style.width = daysWidth + "px";
+                        self.calendarContainer.style.width =
+                            daysWidth +
+                                (self.weekWrapper !== undefined
+                                    ? self.weekWrapper.offsetWidth
+                                    : 0) +
+                                "px";
+                        self.calendarContainer.style.removeProperty("visibility");
+                        self.calendarContainer.style.removeProperty("display");
+                    }
+                });
+            }
+        }
+        /**
+         * The handler for all events targeting the time inputs
+         */
+        function updateTime(e) {
+            if (self.selectedDates.length === 0) {
+                var defaultDate = self.config.minDate !== undefined
+                    ? new Date(self.config.minDate.getTime())
+                    : new Date();
+                var _a = getDefaultHours(), hours = _a.hours, minutes = _a.minutes, seconds = _a.seconds;
+                defaultDate.setHours(hours, minutes, seconds, 0);
+                self.setDate(defaultDate, false);
+            }
+            if (e !== undefined && e.type !== "blur") {
+                timeWrapper(e);
+            }
+            var prevValue = self._input.value;
+            setHoursFromInputs();
+            updateValue();
+            if (self._input.value !== prevValue) {
+                self._debouncedChange();
+            }
+        }
+        function ampm2military(hour, amPM) {
+            return (hour % 12) + 12 * int(amPM === self.l10n.amPM[1]);
+        }
+        function military2ampm(hour) {
+            switch (hour % 24) {
+                case 0:
+                case 12:
+                    return 12;
+                default:
+                    return hour % 12;
+            }
+        }
+        /**
+         * Syncs the selected date object time with user's time input
+         */
+        function setHoursFromInputs() {
+            if (self.hourElement === undefined || self.minuteElement === undefined)
+                return;
+            var hours = (parseInt(self.hourElement.value.slice(-2), 10) || 0) % 24, minutes = (parseInt(self.minuteElement.value, 10) || 0) % 60, seconds = self.secondElement !== undefined
+                ? (parseInt(self.secondElement.value, 10) || 0) % 60
+                : 0;
+            if (self.amPM !== undefined) {
+                hours = ampm2military(hours, self.amPM.textContent);
+            }
+            var limitMinHours = self.config.minTime !== undefined ||
+                (self.config.minDate &&
+                    self.minDateHasTime &&
+                    self.latestSelectedDateObj &&
+                    compareDates(self.latestSelectedDateObj, self.config.minDate, true) ===
+                        0);
+            var limitMaxHours = self.config.maxTime !== undefined ||
+                (self.config.maxDate &&
+                    self.maxDateHasTime &&
+                    self.latestSelectedDateObj &&
+                    compareDates(self.latestSelectedDateObj, self.config.maxDate, true) ===
+                        0);
+            if (limitMaxHours) {
+                var maxTime = self.config.maxTime !== undefined
+                    ? self.config.maxTime
+                    : self.config.maxDate;
+                hours = Math.min(hours, maxTime.getHours());
+                if (hours === maxTime.getHours())
+                    minutes = Math.min(minutes, maxTime.getMinutes());
+                if (minutes === maxTime.getMinutes())
+                    seconds = Math.min(seconds, maxTime.getSeconds());
+            }
+            if (limitMinHours) {
+                var minTime = self.config.minTime !== undefined
+                    ? self.config.minTime
+                    : self.config.minDate;
+                hours = Math.max(hours, minTime.getHours());
+                if (hours === minTime.getHours())
+                    minutes = Math.max(minutes, minTime.getMinutes());
+                if (minutes === minTime.getMinutes())
+                    seconds = Math.max(seconds, minTime.getSeconds());
+            }
+            setHours(hours, minutes, seconds);
+        }
+        /**
+         * Syncs time input values with a date
+         */
+        function setHoursFromDate(dateObj) {
+            var date = dateObj || self.latestSelectedDateObj;
+            if (date) {
+                setHours(date.getHours(), date.getMinutes(), date.getSeconds());
+            }
+        }
+        function getDefaultHours() {
+            var hours = self.config.defaultHour;
+            var minutes = self.config.defaultMinute;
+            var seconds = self.config.defaultSeconds;
+            if (self.config.minDate !== undefined) {
+                var minHr = self.config.minDate.getHours();
+                var minMinutes = self.config.minDate.getMinutes();
+                hours = Math.max(hours, minHr);
+                if (hours === minHr)
+                    minutes = Math.max(minMinutes, minutes);
+                if (hours === minHr && minutes === minMinutes)
+                    seconds = self.config.minDate.getSeconds();
+            }
+            if (self.config.maxDate !== undefined) {
+                var maxHr = self.config.maxDate.getHours();
+                var maxMinutes = self.config.maxDate.getMinutes();
+                hours = Math.min(hours, maxHr);
+                if (hours === maxHr)
+                    minutes = Math.min(maxMinutes, minutes);
+                if (hours === maxHr && minutes === maxMinutes)
+                    seconds = self.config.maxDate.getSeconds();
+            }
+            return { hours: hours, minutes: minutes, seconds: seconds };
+        }
+        /**
+         * Sets the hours, minutes, and optionally seconds
+         * of the latest selected date object and the
+         * corresponding time inputs
+         * @param {Number} hours the hour. whether its military
+         *                 or am-pm gets inferred from config
+         * @param {Number} minutes the minutes
+         * @param {Number} seconds the seconds (optional)
+         */
+        function setHours(hours, minutes, seconds) {
+            if (self.latestSelectedDateObj !== undefined) {
+                self.latestSelectedDateObj.setHours(hours % 24, minutes, seconds || 0, 0);
+            }
+            if (!self.hourElement || !self.minuteElement || self.isMobile)
+                return;
+            self.hourElement.value = pad(!self.config.time_24hr
+                ? ((12 + hours) % 12) + 12 * int(hours % 12 === 0)
+                : hours);
+            self.minuteElement.value = pad(minutes);
+            if (self.amPM !== undefined)
+                self.amPM.textContent = self.l10n.amPM[int(hours >= 12)];
+            if (self.secondElement !== undefined)
+                self.secondElement.value = pad(seconds);
+        }
+        /**
+         * Handles the year input and incrementing events
+         * @param {Event} event the keyup or increment event
+         */
+        function onYearInput(event) {
+            var eventTarget = getEventTarget(event);
+            var year = parseInt(eventTarget.value) + (event.delta || 0);
+            if (year / 1000 > 1 ||
+                (event.key === "Enter" && !/[^\d]/.test(year.toString()))) {
+                changeYear(year);
+            }
+        }
+        /**
+         * Essentially addEventListener + tracking
+         * @param {Element} element the element to addEventListener to
+         * @param {String} event the event name
+         * @param {Function} handler the event handler
+         */
+        function bind(element, event, handler, options) {
+            if (event instanceof Array)
+                return event.forEach(function (ev) { return bind(element, ev, handler, options); });
+            if (element instanceof Array)
+                return element.forEach(function (el) { return bind(el, event, handler, options); });
+            element.addEventListener(event, handler, options);
+            self._handlers.push({
+                element: element,
+                event: event,
+                handler: handler,
+                options: options,
+            });
+        }
+        function triggerChange() {
+            triggerEvent("onChange");
+        }
+        /**
+         * Adds all the necessary event listeners
+         */
+        function bindEvents() {
+            if (self.config.wrap) {
+                ["open", "close", "toggle", "clear"].forEach(function (evt) {
+                    Array.prototype.forEach.call(self.element.querySelectorAll("[data-" + evt + "]"), function (el) {
+                        return bind(el, "click", self[evt]);
+                    });
+                });
+            }
+            if (self.isMobile) {
+                setupMobile();
+                return;
+            }
+            var debouncedResize = debounce(onResize, 50);
+            self._debouncedChange = debounce(triggerChange, DEBOUNCED_CHANGE_MS);
+            if (self.daysContainer && !/iPhone|iPad|iPod/i.test(navigator.userAgent))
+                bind(self.daysContainer, "mouseover", function (e) {
+                    if (self.config.mode === "range")
+                        onMouseOver(getEventTarget(e));
+                });
+            bind(window.document.body, "keydown", onKeyDown);
+            if (!self.config.inline && !self.config.static)
+                bind(window, "resize", debouncedResize);
+            if (window.ontouchstart !== undefined)
+                bind(window.document, "touchstart", documentClick);
+            else
+                bind(window.document, "click", documentClick);
+            bind(window.document, "focus", documentClick, { capture: true });
+            if (self.config.clickOpens === true) {
+                bind(self._input, "focus", self.open);
+                bind(self._input, "click", self.open);
+            }
+            if (self.daysContainer !== undefined) {
+                bind(self.monthNav, "click", onMonthNavClick);
+                bind(self.monthNav, ["keyup", "increment"], onYearInput);
+                bind(self.daysContainer, "click", selectDate);
+            }
+            if (self.timeContainer !== undefined &&
+                self.minuteElement !== undefined &&
+                self.hourElement !== undefined) {
+                var selText = function (e) {
+                    return getEventTarget(e).select();
+                };
+                bind(self.timeContainer, ["increment"], updateTime);
+                bind(self.timeContainer, "blur", updateTime, { capture: true });
+                bind(self.timeContainer, "click", timeIncrement);
+                bind([self.hourElement, self.minuteElement], ["focus", "click"], selText);
+                if (self.secondElement !== undefined)
+                    bind(self.secondElement, "focus", function () { return self.secondElement && self.secondElement.select(); });
+                if (self.amPM !== undefined) {
+                    bind(self.amPM, "click", function (e) {
+                        updateTime(e);
+                        triggerChange();
+                    });
+                }
+            }
+            if (self.config.allowInput)
+                bind(self._input, "blur", onBlur);
+        }
+        /**
+         * Set the calendar view to a particular date.
+         * @param {Date} jumpDate the date to set the view to
+         * @param {boolean} triggerChange if change events should be triggered
+         */
+        function jumpToDate(jumpDate, triggerChange) {
+            var jumpTo = jumpDate !== undefined
+                ? self.parseDate(jumpDate)
+                : self.latestSelectedDateObj ||
+                    (self.config.minDate && self.config.minDate > self.now
+                        ? self.config.minDate
+                        : self.config.maxDate && self.config.maxDate < self.now
+                            ? self.config.maxDate
+                            : self.now);
+            var oldYear = self.currentYear;
+            var oldMonth = self.currentMonth;
+            try {
+                if (jumpTo !== undefined) {
+                    self.currentYear = jumpTo.getFullYear();
+                    self.currentMonth = jumpTo.getMonth();
+                }
+            }
+            catch (e) {
+                /* istanbul ignore next */
+                e.message = "Invalid date supplied: " + jumpTo;
+                self.config.errorHandler(e);
+            }
+            if (triggerChange && self.currentYear !== oldYear) {
+                triggerEvent("onYearChange");
+                buildMonthSwitch();
+            }
+            if (triggerChange &&
+                (self.currentYear !== oldYear || self.currentMonth !== oldMonth)) {
+                triggerEvent("onMonthChange");
+            }
+            self.redraw();
+        }
+        /**
+         * The up/down arrow handler for time inputs
+         * @param {Event} e the click event
+         */
+        function timeIncrement(e) {
+            var eventTarget = getEventTarget(e);
+            if (~eventTarget.className.indexOf("arrow"))
+                incrementNumInput(e, eventTarget.classList.contains("arrowUp") ? 1 : -1);
+        }
+        /**
+         * Increments/decrements the value of input associ-
+         * ated with the up/down arrow by dispatching an
+         * "increment" event on the input.
+         *
+         * @param {Event} e the click event
+         * @param {Number} delta the diff (usually 1 or -1)
+         * @param {Element} inputElem the input element
+         */
+        function incrementNumInput(e, delta, inputElem) {
+            var target = e && getEventTarget(e);
+            var input = inputElem ||
+                (target && target.parentNode && target.parentNode.firstChild);
+            var event = createEvent("increment");
+            event.delta = delta;
+            input && input.dispatchEvent(event);
+        }
+        function build() {
+            var fragment = window.document.createDocumentFragment();
+            self.calendarContainer = createElement("div", "flatpickr-calendar");
+            self.calendarContainer.tabIndex = -1;
+            if (!self.config.noCalendar) {
+                fragment.appendChild(buildMonthNav());
+                self.innerContainer = createElement("div", "flatpickr-innerContainer");
+                if (self.config.weekNumbers) {
+                    var _a = buildWeeks(), weekWrapper = _a.weekWrapper, weekNumbers = _a.weekNumbers;
+                    self.innerContainer.appendChild(weekWrapper);
+                    self.weekNumbers = weekNumbers;
+                    self.weekWrapper = weekWrapper;
+                }
+                self.rContainer = createElement("div", "flatpickr-rContainer");
+                self.rContainer.appendChild(buildWeekdays());
+                if (!self.daysContainer) {
+                    self.daysContainer = createElement("div", "flatpickr-days");
+                    self.daysContainer.tabIndex = -1;
+                }
+                buildDays();
+                self.rContainer.appendChild(self.daysContainer);
+                self.innerContainer.appendChild(self.rContainer);
+                fragment.appendChild(self.innerContainer);
+            }
+            if (self.config.enableTime) {
+                fragment.appendChild(buildTime());
+            }
+            toggleClass(self.calendarContainer, "rangeMode", self.config.mode === "range");
+            toggleClass(self.calendarContainer, "animate", self.config.animate === true);
+            toggleClass(self.calendarContainer, "multiMonth", self.config.showMonths > 1);
+            self.calendarContainer.appendChild(fragment);
+            var customAppend = self.config.appendTo !== undefined &&
+                self.config.appendTo.nodeType !== undefined;
+            if (self.config.inline || self.config.static) {
+                self.calendarContainer.classList.add(self.config.inline ? "inline" : "static");
+                if (self.config.inline) {
+                    if (!customAppend && self.element.parentNode)
+                        self.element.parentNode.insertBefore(self.calendarContainer, self._input.nextSibling);
+                    else if (self.config.appendTo !== undefined)
+                        self.config.appendTo.appendChild(self.calendarContainer);
+                }
+                if (self.config.static) {
+                    var wrapper = createElement("div", "flatpickr-wrapper");
+                    if (self.element.parentNode)
+                        self.element.parentNode.insertBefore(wrapper, self.element);
+                    wrapper.appendChild(self.element);
+                    if (self.altInput)
+                        wrapper.appendChild(self.altInput);
+                    wrapper.appendChild(self.calendarContainer);
+                }
+            }
+            if (!self.config.static && !self.config.inline)
+                (self.config.appendTo !== undefined
+                    ? self.config.appendTo
+                    : window.document.body).appendChild(self.calendarContainer);
+        }
+        function createDay(className, date, dayNumber, i) {
+            var dateIsEnabled = isEnabled(date, true), dayElement = createElement("span", "flatpickr-day " + className, date.getDate().toString());
+            dayElement.dateObj = date;
+            dayElement.$i = i;
+            dayElement.setAttribute("aria-label", self.formatDate(date, self.config.ariaDateFormat));
+            if (className.indexOf("hidden") === -1 &&
+                compareDates(date, self.now) === 0) {
+                self.todayDateElem = dayElement;
+                dayElement.classList.add("today");
+                dayElement.setAttribute("aria-current", "date");
+            }
+            if (dateIsEnabled) {
+                dayElement.tabIndex = -1;
+                if (isDateSelected(date)) {
+                    dayElement.classList.add("selected");
+                    self.selectedDateElem = dayElement;
+                    if (self.config.mode === "range") {
+                        toggleClass(dayElement, "startRange", self.selectedDates[0] &&
+                            compareDates(date, self.selectedDates[0], true) === 0);
+                        toggleClass(dayElement, "endRange", self.selectedDates[1] &&
+                            compareDates(date, self.selectedDates[1], true) === 0);
+                        if (className === "nextMonthDay")
+                            dayElement.classList.add("inRange");
+                    }
+                }
+            }
+            else {
+                dayElement.classList.add("flatpickr-disabled");
+            }
+            if (self.config.mode === "range") {
+                if (isDateInRange(date) && !isDateSelected(date))
+                    dayElement.classList.add("inRange");
+            }
+            if (self.weekNumbers &&
+                self.config.showMonths === 1 &&
+                className !== "prevMonthDay" &&
+                dayNumber % 7 === 1) {
+                self.weekNumbers.insertAdjacentHTML("beforeend", "<span class='flatpickr-day'>" + self.config.getWeek(date) + "</span>");
+            }
+            triggerEvent("onDayCreate", dayElement);
+            return dayElement;
+        }
+        function focusOnDayElem(targetNode) {
+            targetNode.focus();
+            if (self.config.mode === "range")
+                onMouseOver(targetNode);
+        }
+        function getFirstAvailableDay(delta) {
+            var startMonth = delta > 0 ? 0 : self.config.showMonths - 1;
+            var endMonth = delta > 0 ? self.config.showMonths : -1;
+            for (var m = startMonth; m != endMonth; m += delta) {
+                var month = self.daysContainer.children[m];
+                var startIndex = delta > 0 ? 0 : month.children.length - 1;
+                var endIndex = delta > 0 ? month.children.length : -1;
+                for (var i = startIndex; i != endIndex; i += delta) {
+                    var c = month.children[i];
+                    if (c.className.indexOf("hidden") === -1 && isEnabled(c.dateObj))
+                        return c;
+                }
+            }
+            return undefined;
+        }
+        function getNextAvailableDay(current, delta) {
+            var givenMonth = current.className.indexOf("Month") === -1
+                ? current.dateObj.getMonth()
+                : self.currentMonth;
+            var endMonth = delta > 0 ? self.config.showMonths : -1;
+            var loopDelta = delta > 0 ? 1 : -1;
+            for (var m = givenMonth - self.currentMonth; m != endMonth; m += loopDelta) {
+                var month = self.daysContainer.children[m];
+                var startIndex = givenMonth - self.currentMonth === m
+                    ? current.$i + delta
+                    : delta < 0
+                        ? month.children.length - 1
+                        : 0;
+                var numMonthDays = month.children.length;
+                for (var i = startIndex; i >= 0 && i < numMonthDays && i != (delta > 0 ? numMonthDays : -1); i += loopDelta) {
+                    var c = month.children[i];
+                    if (c.className.indexOf("hidden") === -1 &&
+                        isEnabled(c.dateObj) &&
+                        Math.abs(current.$i - i) >= Math.abs(delta))
+                        return focusOnDayElem(c);
+                }
+            }
+            self.changeMonth(loopDelta);
+            focusOnDay(getFirstAvailableDay(loopDelta), 0);
+            return undefined;
+        }
+        function focusOnDay(current, offset) {
+            var dayFocused = isInView(document.activeElement || document.body);
+            var startElem = current !== undefined
+                ? current
+                : dayFocused
+                    ? document.activeElement
+                    : self.selectedDateElem !== undefined && isInView(self.selectedDateElem)
+                        ? self.selectedDateElem
+                        : self.todayDateElem !== undefined && isInView(self.todayDateElem)
+                            ? self.todayDateElem
+                            : getFirstAvailableDay(offset > 0 ? 1 : -1);
+            if (startElem === undefined) {
+                self._input.focus();
+            }
+            else if (!dayFocused) {
+                focusOnDayElem(startElem);
+            }
+            else {
+                getNextAvailableDay(startElem, offset);
+            }
+        }
+        function buildMonthDays(year, month) {
+            var firstOfMonth = (new Date(year, month, 1).getDay() - self.l10n.firstDayOfWeek + 7) % 7;
+            var prevMonthDays = self.utils.getDaysInMonth((month - 1 + 12) % 12, year);
+            var daysInMonth = self.utils.getDaysInMonth(month, year), days = window.document.createDocumentFragment(), isMultiMonth = self.config.showMonths > 1, prevMonthDayClass = isMultiMonth ? "prevMonthDay hidden" : "prevMonthDay", nextMonthDayClass = isMultiMonth ? "nextMonthDay hidden" : "nextMonthDay";
+            var dayNumber = prevMonthDays + 1 - firstOfMonth, dayIndex = 0;
+            // prepend days from the ending of previous month
+            for (; dayNumber <= prevMonthDays; dayNumber++, dayIndex++) {
+                days.appendChild(createDay(prevMonthDayClass, new Date(year, month - 1, dayNumber), dayNumber, dayIndex));
+            }
+            // Start at 1 since there is no 0th day
+            for (dayNumber = 1; dayNumber <= daysInMonth; dayNumber++, dayIndex++) {
+                days.appendChild(createDay("", new Date(year, month, dayNumber), dayNumber, dayIndex));
+            }
+            // append days from the next month
+            for (var dayNum = daysInMonth + 1; dayNum <= 42 - firstOfMonth &&
+                (self.config.showMonths === 1 || dayIndex % 7 !== 0); dayNum++, dayIndex++) {
+                days.appendChild(createDay(nextMonthDayClass, new Date(year, month + 1, dayNum % daysInMonth), dayNum, dayIndex));
+            }
+            //updateNavigationCurrentMonth();
+            var dayContainer = createElement("div", "dayContainer");
+            dayContainer.appendChild(days);
+            return dayContainer;
+        }
+        function buildDays() {
+            if (self.daysContainer === undefined) {
+                return;
+            }
+            clearNode(self.daysContainer);
+            // TODO: week numbers for each month
+            if (self.weekNumbers)
+                clearNode(self.weekNumbers);
+            var frag = document.createDocumentFragment();
+            for (var i = 0; i < self.config.showMonths; i++) {
+                var d = new Date(self.currentYear, self.currentMonth, 1);
+                d.setMonth(self.currentMonth + i);
+                frag.appendChild(buildMonthDays(d.getFullYear(), d.getMonth()));
+            }
+            self.daysContainer.appendChild(frag);
+            self.days = self.daysContainer.firstChild;
+            if (self.config.mode === "range" && self.selectedDates.length === 1) {
+                onMouseOver();
+            }
+        }
+        function buildMonthSwitch() {
+            if (self.config.showMonths > 1 ||
+                self.config.monthSelectorType !== "dropdown")
+                return;
+            var shouldBuildMonth = function (month) {
+                if (self.config.minDate !== undefined &&
+                    self.currentYear === self.config.minDate.getFullYear() &&
+                    month < self.config.minDate.getMonth()) {
+                    return false;
+                }
+                return !(self.config.maxDate !== undefined &&
+                    self.currentYear === self.config.maxDate.getFullYear() &&
+                    month > self.config.maxDate.getMonth());
+            };
+            self.monthsDropdownContainer.tabIndex = -1;
+            self.monthsDropdownContainer.innerHTML = "";
+            for (var i = 0; i < 12; i++) {
+                if (!shouldBuildMonth(i))
+                    continue;
+                var month = createElement("option", "flatpickr-monthDropdown-month");
+                month.value = new Date(self.currentYear, i).getMonth().toString();
+                month.textContent = monthToStr(i, self.config.shorthandCurrentMonth, self.l10n);
+                month.tabIndex = -1;
+                if (self.currentMonth === i) {
+                    month.selected = true;
+                }
+                self.monthsDropdownContainer.appendChild(month);
+            }
+        }
+        function buildMonth() {
+            var container = createElement("div", "flatpickr-month");
+            var monthNavFragment = window.document.createDocumentFragment();
+            var monthElement;
+            if (self.config.showMonths > 1 ||
+                self.config.monthSelectorType === "static") {
+                monthElement = createElement("span", "cur-month");
+            }
+            else {
+                self.monthsDropdownContainer = createElement("select", "flatpickr-monthDropdown-months");
+                self.monthsDropdownContainer.setAttribute("aria-label", self.l10n.monthAriaLabel);
+                bind(self.monthsDropdownContainer, "change", function (e) {
+                    var target = getEventTarget(e);
+                    var selectedMonth = parseInt(target.value, 10);
+                    self.changeMonth(selectedMonth - self.currentMonth);
+                    triggerEvent("onMonthChange");
+                });
+                buildMonthSwitch();
+                monthElement = self.monthsDropdownContainer;
+            }
+            var yearInput = createNumberInput("cur-year", { tabindex: "-1" });
+            var yearElement = yearInput.getElementsByTagName("input")[0];
+            yearElement.setAttribute("aria-label", self.l10n.yearAriaLabel);
+            if (self.config.minDate) {
+                yearElement.setAttribute("min", self.config.minDate.getFullYear().toString());
+            }
+            if (self.config.maxDate) {
+                yearElement.setAttribute("max", self.config.maxDate.getFullYear().toString());
+                yearElement.disabled =
+                    !!self.config.minDate &&
+                        self.config.minDate.getFullYear() === self.config.maxDate.getFullYear();
+            }
+            var currentMonth = createElement("div", "flatpickr-current-month");
+            currentMonth.appendChild(monthElement);
+            currentMonth.appendChild(yearInput);
+            monthNavFragment.appendChild(currentMonth);
+            container.appendChild(monthNavFragment);
+            return {
+                container: container,
+                yearElement: yearElement,
+                monthElement: monthElement,
+            };
+        }
+        function buildMonths() {
+            clearNode(self.monthNav);
+            self.monthNav.appendChild(self.prevMonthNav);
+            if (self.config.showMonths) {
+                self.yearElements = [];
+                self.monthElements = [];
+            }
+            for (var m = self.config.showMonths; m--;) {
+                var month = buildMonth();
+                self.yearElements.push(month.yearElement);
+                self.monthElements.push(month.monthElement);
+                self.monthNav.appendChild(month.container);
+            }
+            self.monthNav.appendChild(self.nextMonthNav);
+        }
+        function buildMonthNav() {
+            self.monthNav = createElement("div", "flatpickr-months");
+            self.yearElements = [];
+            self.monthElements = [];
+            self.prevMonthNav = createElement("span", "flatpickr-prev-month");
+            self.prevMonthNav.innerHTML = self.config.prevArrow;
+            self.nextMonthNav = createElement("span", "flatpickr-next-month");
+            self.nextMonthNav.innerHTML = self.config.nextArrow;
+            buildMonths();
+            Object.defineProperty(self, "_hidePrevMonthArrow", {
+                get: function () { return self.__hidePrevMonthArrow; },
+                set: function (bool) {
+                    if (self.__hidePrevMonthArrow !== bool) {
+                        toggleClass(self.prevMonthNav, "flatpickr-disabled", bool);
+                        self.__hidePrevMonthArrow = bool;
+                    }
+                },
+            });
+            Object.defineProperty(self, "_hideNextMonthArrow", {
+                get: function () { return self.__hideNextMonthArrow; },
+                set: function (bool) {
+                    if (self.__hideNextMonthArrow !== bool) {
+                        toggleClass(self.nextMonthNav, "flatpickr-disabled", bool);
+                        self.__hideNextMonthArrow = bool;
+                    }
+                },
+            });
+            self.currentYearElement = self.yearElements[0];
+            updateNavigationCurrentMonth();
+            return self.monthNav;
+        }
+        function buildTime() {
+            self.calendarContainer.classList.add("hasTime");
+            if (self.config.noCalendar)
+                self.calendarContainer.classList.add("noCalendar");
+            self.timeContainer = createElement("div", "flatpickr-time");
+            self.timeContainer.tabIndex = -1;
+            var separator = createElement("span", "flatpickr-time-separator", ":");
+            var hourInput = createNumberInput("flatpickr-hour", {
+                "aria-label": self.l10n.hourAriaLabel,
+            });
+            self.hourElement = hourInput.getElementsByTagName("input")[0];
+            var minuteInput = createNumberInput("flatpickr-minute", {
+                "aria-label": self.l10n.minuteAriaLabel,
+            });
+            self.minuteElement = minuteInput.getElementsByTagName("input")[0];
+            self.hourElement.tabIndex = self.minuteElement.tabIndex = -1;
+            self.hourElement.value = pad(self.latestSelectedDateObj
+                ? self.latestSelectedDateObj.getHours()
+                : self.config.time_24hr
+                    ? self.config.defaultHour
+                    : military2ampm(self.config.defaultHour));
+            self.minuteElement.value = pad(self.latestSelectedDateObj
+                ? self.latestSelectedDateObj.getMinutes()
+                : self.config.defaultMinute);
+            self.hourElement.setAttribute("step", self.config.hourIncrement.toString());
+            self.minuteElement.setAttribute("step", self.config.minuteIncrement.toString());
+            self.hourElement.setAttribute("min", self.config.time_24hr ? "0" : "1");
+            self.hourElement.setAttribute("max", self.config.time_24hr ? "23" : "12");
+            self.minuteElement.setAttribute("min", "0");
+            self.minuteElement.setAttribute("max", "59");
+            self.timeContainer.appendChild(hourInput);
+            self.timeContainer.appendChild(separator);
+            self.timeContainer.appendChild(minuteInput);
+            if (self.config.time_24hr)
+                self.timeContainer.classList.add("time24hr");
+            if (self.config.enableSeconds) {
+                self.timeContainer.classList.add("hasSeconds");
+                var secondInput = createNumberInput("flatpickr-second");
+                self.secondElement = secondInput.getElementsByTagName("input")[0];
+                self.secondElement.value = pad(self.latestSelectedDateObj
+                    ? self.latestSelectedDateObj.getSeconds()
+                    : self.config.defaultSeconds);
+                self.secondElement.setAttribute("step", self.minuteElement.getAttribute("step"));
+                self.secondElement.setAttribute("min", "0");
+                self.secondElement.setAttribute("max", "59");
+                self.timeContainer.appendChild(createElement("span", "flatpickr-time-separator", ":"));
+                self.timeContainer.appendChild(secondInput);
+            }
+            if (!self.config.time_24hr) {
+                // add self.amPM if appropriate
+                self.amPM = createElement("span", "flatpickr-am-pm", self.l10n.amPM[int((self.latestSelectedDateObj
+                    ? self.hourElement.value
+                    : self.config.defaultHour) > 11)]);
+                self.amPM.title = self.l10n.toggleTitle;
+                self.amPM.tabIndex = -1;
+                self.timeContainer.appendChild(self.amPM);
+            }
+            return self.timeContainer;
+        }
+        function buildWeekdays() {
+            if (!self.weekdayContainer)
+                self.weekdayContainer = createElement("div", "flatpickr-weekdays");
+            else
+                clearNode(self.weekdayContainer);
+            for (var i = self.config.showMonths; i--;) {
+                var container = createElement("div", "flatpickr-weekdaycontainer");
+                self.weekdayContainer.appendChild(container);
+            }
+            updateWeekdays();
+            return self.weekdayContainer;
+        }
+        function updateWeekdays() {
+            if (!self.weekdayContainer) {
+                return;
+            }
+            var firstDayOfWeek = self.l10n.firstDayOfWeek;
+            var weekdays = __spreadArrays(self.l10n.weekdays.shorthand);
+            if (firstDayOfWeek > 0 && firstDayOfWeek < weekdays.length) {
+                weekdays = __spreadArrays(weekdays.splice(firstDayOfWeek, weekdays.length), weekdays.splice(0, firstDayOfWeek));
+            }
+            for (var i = self.config.showMonths; i--;) {
+                self.weekdayContainer.children[i].innerHTML = "\n      <span class='flatpickr-weekday'>\n        " + weekdays.join("</span><span class='flatpickr-weekday'>") + "\n      </span>\n      ";
+            }
+        }
+        /* istanbul ignore next */
+        function buildWeeks() {
+            self.calendarContainer.classList.add("hasWeeks");
+            var weekWrapper = createElement("div", "flatpickr-weekwrapper");
+            weekWrapper.appendChild(createElement("span", "flatpickr-weekday", self.l10n.weekAbbreviation));
+            var weekNumbers = createElement("div", "flatpickr-weeks");
+            weekWrapper.appendChild(weekNumbers);
+            return {
+                weekWrapper: weekWrapper,
+                weekNumbers: weekNumbers,
+            };
+        }
+        function changeMonth(value, isOffset) {
+            if (isOffset === void 0) { isOffset = true; }
+            var delta = isOffset ? value : value - self.currentMonth;
+            if ((delta < 0 && self._hidePrevMonthArrow === true) ||
+                (delta > 0 && self._hideNextMonthArrow === true))
+                return;
+            self.currentMonth += delta;
+            if (self.currentMonth < 0 || self.currentMonth > 11) {
+                self.currentYear += self.currentMonth > 11 ? 1 : -1;
+                self.currentMonth = (self.currentMonth + 12) % 12;
+                triggerEvent("onYearChange");
+                buildMonthSwitch();
+            }
+            buildDays();
+            triggerEvent("onMonthChange");
+            updateNavigationCurrentMonth();
+        }
+        function clear(triggerChangeEvent, toInitial) {
+            if (triggerChangeEvent === void 0) { triggerChangeEvent = true; }
+            if (toInitial === void 0) { toInitial = true; }
+            self.input.value = "";
+            if (self.altInput !== undefined)
+                self.altInput.value = "";
+            if (self.mobileInput !== undefined)
+                self.mobileInput.value = "";
+            self.selectedDates = [];
+            self.latestSelectedDateObj = undefined;
+            if (toInitial === true) {
+                self.currentYear = self._initialDate.getFullYear();
+                self.currentMonth = self._initialDate.getMonth();
+            }
+            if (self.config.enableTime === true) {
+                var _a = getDefaultHours(), hours = _a.hours, minutes = _a.minutes, seconds = _a.seconds;
+                setHours(hours, minutes, seconds);
+            }
+            self.redraw();
+            if (triggerChangeEvent)
+                // triggerChangeEvent is true (default) or an Event
+                triggerEvent("onChange");
+        }
+        function close() {
+            self.isOpen = false;
+            if (!self.isMobile) {
+                if (self.calendarContainer !== undefined) {
+                    self.calendarContainer.classList.remove("open");
+                }
+                if (self._input !== undefined) {
+                    self._input.classList.remove("active");
+                }
+            }
+            triggerEvent("onClose");
+        }
+        function destroy() {
+            if (self.config !== undefined)
+                triggerEvent("onDestroy");
+            for (var i = self._handlers.length; i--;) {
+                var h = self._handlers[i];
+                h.element.removeEventListener(h.event, h.handler, h.options);
+            }
+            self._handlers = [];
+            if (self.mobileInput) {
+                if (self.mobileInput.parentNode)
+                    self.mobileInput.parentNode.removeChild(self.mobileInput);
+                self.mobileInput = undefined;
+            }
+            else if (self.calendarContainer && self.calendarContainer.parentNode) {
+                if (self.config.static && self.calendarContainer.parentNode) {
+                    var wrapper = self.calendarContainer.parentNode;
+                    wrapper.lastChild && wrapper.removeChild(wrapper.lastChild);
+                    if (wrapper.parentNode) {
+                        while (wrapper.firstChild)
+                            wrapper.parentNode.insertBefore(wrapper.firstChild, wrapper);
+                        wrapper.parentNode.removeChild(wrapper);
+                    }
+                }
+                else
+                    self.calendarContainer.parentNode.removeChild(self.calendarContainer);
+            }
+            if (self.altInput) {
+                self.input.type = "text";
+                if (self.altInput.parentNode)
+                    self.altInput.parentNode.removeChild(self.altInput);
+                delete self.altInput;
+            }
+            if (self.input) {
+                self.input.type = self.input._type;
+                self.input.classList.remove("flatpickr-input");
+                self.input.removeAttribute("readonly");
+            }
+            [
+                "_showTimeInput",
+                "latestSelectedDateObj",
+                "_hideNextMonthArrow",
+                "_hidePrevMonthArrow",
+                "__hideNextMonthArrow",
+                "__hidePrevMonthArrow",
+                "isMobile",
+                "isOpen",
+                "selectedDateElem",
+                "minDateHasTime",
+                "maxDateHasTime",
+                "days",
+                "daysContainer",
+                "_input",
+                "_positionElement",
+                "innerContainer",
+                "rContainer",
+                "monthNav",
+                "todayDateElem",
+                "calendarContainer",
+                "weekdayContainer",
+                "prevMonthNav",
+                "nextMonthNav",
+                "monthsDropdownContainer",
+                "currentMonthElement",
+                "currentYearElement",
+                "navigationCurrentMonth",
+                "selectedDateElem",
+                "config",
+            ].forEach(function (k) {
+                try {
+                    delete self[k];
+                }
+                catch (_) { }
+            });
+        }
+        function isCalendarElem(elem) {
+            if (self.config.appendTo && self.config.appendTo.contains(elem))
+                return true;
+            return self.calendarContainer.contains(elem);
+        }
+        function documentClick(e) {
+            if (self.isOpen && !self.config.inline) {
+                var eventTarget_1 = getEventTarget(e);
+                var isCalendarElement = isCalendarElem(eventTarget_1);
+                var isInput = eventTarget_1 === self.input ||
+                    eventTarget_1 === self.altInput ||
+                    self.element.contains(eventTarget_1) ||
+                    // web components
+                    // e.path is not present in all browsers. circumventing typechecks
+                    (e.path &&
+                        e.path.indexOf &&
+                        (~e.path.indexOf(self.input) ||
+                            ~e.path.indexOf(self.altInput)));
+                var lostFocus = e.type === "blur"
+                    ? isInput &&
+                        e.relatedTarget &&
+                        !isCalendarElem(e.relatedTarget)
+                    : !isInput &&
+                        !isCalendarElement &&
+                        !isCalendarElem(e.relatedTarget);
+                var isIgnored = !self.config.ignoredFocusElements.some(function (elem) {
+                    return elem.contains(eventTarget_1);
+                });
+                if (lostFocus && isIgnored) {
+                    if (self.timeContainer !== undefined &&
+                        self.minuteElement !== undefined &&
+                        self.hourElement !== undefined &&
+                        self.input.value !== "" &&
+                        self.input.value !== undefined) {
+                        updateTime();
+                    }
+                    self.close();
+                    if (self.config &&
+                        self.config.mode === "range" &&
+                        self.selectedDates.length === 1) {
+                        self.clear(false);
+                        self.redraw();
+                    }
+                }
+            }
+        }
+        function changeYear(newYear) {
+            if (!newYear ||
+                (self.config.minDate && newYear < self.config.minDate.getFullYear()) ||
+                (self.config.maxDate && newYear > self.config.maxDate.getFullYear()))
+                return;
+            var newYearNum = newYear, isNewYear = self.currentYear !== newYearNum;
+            self.currentYear = newYearNum || self.currentYear;
+            if (self.config.maxDate &&
+                self.currentYear === self.config.maxDate.getFullYear()) {
+                self.currentMonth = Math.min(self.config.maxDate.getMonth(), self.currentMonth);
+            }
+            else if (self.config.minDate &&
+                self.currentYear === self.config.minDate.getFullYear()) {
+                self.currentMonth = Math.max(self.config.minDate.getMonth(), self.currentMonth);
+            }
+            if (isNewYear) {
+                self.redraw();
+                triggerEvent("onYearChange");
+                buildMonthSwitch();
+            }
+        }
+        function isEnabled(date, timeless) {
+            if (timeless === void 0) { timeless = true; }
+            var dateToCheck = self.parseDate(date, undefined, timeless); // timeless
+            if ((self.config.minDate &&
+                dateToCheck &&
+                compareDates(dateToCheck, self.config.minDate, timeless !== undefined ? timeless : !self.minDateHasTime) < 0) ||
+                (self.config.maxDate &&
+                    dateToCheck &&
+                    compareDates(dateToCheck, self.config.maxDate, timeless !== undefined ? timeless : !self.maxDateHasTime) > 0))
+                return false;
+            if (self.config.enable.length === 0 && self.config.disable.length === 0)
+                return true;
+            if (dateToCheck === undefined)
+                return false;
+            var bool = self.config.enable.length > 0, array = bool ? self.config.enable : self.config.disable;
+            for (var i = 0, d = void 0; i < array.length; i++) {
+                d = array[i];
+                if (typeof d === "function" &&
+                    d(dateToCheck) // disabled by function
+                )
+                    return bool;
+                else if (d instanceof Date &&
+                    dateToCheck !== undefined &&
+                    d.getTime() === dateToCheck.getTime())
+                    // disabled by date
+                    return bool;
+                else if (typeof d === "string" && dateToCheck !== undefined) {
+                    // disabled by date string
+                    var parsed = self.parseDate(d, undefined, true);
+                    return parsed && parsed.getTime() === dateToCheck.getTime()
+                        ? bool
+                        : !bool;
+                }
+                else if (
+                // disabled by range
+                typeof d === "object" &&
+                    dateToCheck !== undefined &&
+                    d.from &&
+                    d.to &&
+                    dateToCheck.getTime() >= d.from.getTime() &&
+                    dateToCheck.getTime() <= d.to.getTime())
+                    return bool;
+            }
+            return !bool;
+        }
+        function isInView(elem) {
+            if (self.daysContainer !== undefined)
+                return (elem.className.indexOf("hidden") === -1 &&
+                    elem.className.indexOf("flatpickr-disabled") === -1 &&
+                    self.daysContainer.contains(elem));
+            return false;
+        }
+        function onBlur(e) {
+            var isInput = e.target === self._input;
+            if (isInput &&
+                !(e.relatedTarget && isCalendarElem(e.relatedTarget))) {
+                self.setDate(self._input.value, true, e.target === self.altInput
+                    ? self.config.altFormat
+                    : self.config.dateFormat);
+            }
+        }
+        function onKeyDown(e) {
+            // e.key                      e.keyCode
+            // "Backspace"                        8
+            // "Tab"                              9
+            // "Enter"                           13
+            // "Escape"     (IE "Esc")           27
+            // "ArrowLeft"  (IE "Left")          37
+            // "ArrowUp"    (IE "Up")            38
+            // "ArrowRight" (IE "Right")         39
+            // "ArrowDown"  (IE "Down")          40
+            // "Delete"     (IE "Del")           46
+            var eventTarget = getEventTarget(e);
+            var isInput = self.config.wrap
+                ? element.contains(eventTarget)
+                : eventTarget === self._input;
+            var allowInput = self.config.allowInput;
+            var allowKeydown = self.isOpen && (!allowInput || !isInput);
+            var allowInlineKeydown = self.config.inline && isInput && !allowInput;
+            if (e.keyCode === 13 && isInput) {
+                if (allowInput) {
+                    self.setDate(self._input.value, true, eventTarget === self.altInput
+                        ? self.config.altFormat
+                        : self.config.dateFormat);
+                    return eventTarget.blur();
+                }
+                else {
+                    self.open();
+                }
+            }
+            else if (isCalendarElem(eventTarget) ||
+                allowKeydown ||
+                allowInlineKeydown) {
+                var isTimeObj = !!self.timeContainer &&
+                    self.timeContainer.contains(eventTarget);
+                switch (e.keyCode) {
+                    case 13:
+                        if (isTimeObj) {
+                            e.preventDefault();
+                            updateTime();
+                            focusAndClose();
+                        }
+                        else
+                            selectDate(e);
+                        break;
+                    case 27: // escape
+                        e.preventDefault();
+                        focusAndClose();
+                        break;
+                    case 8:
+                    case 46:
+                        if (isInput && !self.config.allowInput) {
+                            e.preventDefault();
+                            self.clear();
+                        }
+                        break;
+                    case 37:
+                    case 39:
+                        if (!isTimeObj && !isInput) {
+                            e.preventDefault();
+                            if (self.daysContainer !== undefined &&
+                                (allowInput === false ||
+                                    (document.activeElement && isInView(document.activeElement)))) {
+                                var delta_1 = e.keyCode === 39 ? 1 : -1;
+                                if (!e.ctrlKey)
+                                    focusOnDay(undefined, delta_1);
+                                else {
+                                    e.stopPropagation();
+                                    changeMonth(delta_1);
+                                    focusOnDay(getFirstAvailableDay(1), 0);
+                                }
+                            }
+                        }
+                        else if (self.hourElement)
+                            self.hourElement.focus();
+                        break;
+                    case 38:
+                    case 40:
+                        e.preventDefault();
+                        var delta = e.keyCode === 40 ? 1 : -1;
+                        if ((self.daysContainer &&
+                            eventTarget.$i !== undefined) ||
+                            eventTarget === self.input ||
+                            eventTarget === self.altInput) {
+                            if (e.ctrlKey) {
+                                e.stopPropagation();
+                                changeYear(self.currentYear - delta);
+                                focusOnDay(getFirstAvailableDay(1), 0);
+                            }
+                            else if (!isTimeObj)
+                                focusOnDay(undefined, delta * 7);
+                        }
+                        else if (eventTarget === self.currentYearElement) {
+                            changeYear(self.currentYear - delta);
+                        }
+                        else if (self.config.enableTime) {
+                            if (!isTimeObj && self.hourElement)
+                                self.hourElement.focus();
+                            updateTime(e);
+                            self._debouncedChange();
+                        }
+                        break;
+                    case 9:
+                        if (isTimeObj) {
+                            var elems = [
+                                self.hourElement,
+                                self.minuteElement,
+                                self.secondElement,
+                                self.amPM,
+                            ]
+                                .concat(self.pluginElements)
+                                .filter(function (x) { return x; });
+                            var i = elems.indexOf(eventTarget);
+                            if (i !== -1) {
+                                var target = elems[i + (e.shiftKey ? -1 : 1)];
+                                e.preventDefault();
+                                (target || self._input).focus();
+                            }
+                        }
+                        else if (!self.config.noCalendar &&
+                            self.daysContainer &&
+                            self.daysContainer.contains(eventTarget) &&
+                            e.shiftKey) {
+                            e.preventDefault();
+                            self._input.focus();
+                        }
+                        break;
+                }
+            }
+            if (self.amPM !== undefined && eventTarget === self.amPM) {
+                switch (e.key) {
+                    case self.l10n.amPM[0].charAt(0):
+                    case self.l10n.amPM[0].charAt(0).toLowerCase():
+                        self.amPM.textContent = self.l10n.amPM[0];
+                        setHoursFromInputs();
+                        updateValue();
+                        break;
+                    case self.l10n.amPM[1].charAt(0):
+                    case self.l10n.amPM[1].charAt(0).toLowerCase():
+                        self.amPM.textContent = self.l10n.amPM[1];
+                        setHoursFromInputs();
+                        updateValue();
+                        break;
+                }
+            }
+            if (isInput || isCalendarElem(eventTarget)) {
+                triggerEvent("onKeyDown", e);
+            }
+        }
+        function onMouseOver(elem) {
+            if (self.selectedDates.length !== 1 ||
+                (elem &&
+                    (!elem.classList.contains("flatpickr-day") ||
+                        elem.classList.contains("flatpickr-disabled"))))
+                return;
+            var hoverDate = elem
+                ? elem.dateObj.getTime()
+                : self.days.firstElementChild.dateObj.getTime(), initialDate = self.parseDate(self.selectedDates[0], undefined, true).getTime(), rangeStartDate = Math.min(hoverDate, self.selectedDates[0].getTime()), rangeEndDate = Math.max(hoverDate, self.selectedDates[0].getTime());
+            var containsDisabled = false;
+            var minRange = 0, maxRange = 0;
+            for (var t = rangeStartDate; t < rangeEndDate; t += duration.DAY) {
+                if (!isEnabled(new Date(t), true)) {
+                    containsDisabled =
+                        containsDisabled || (t > rangeStartDate && t < rangeEndDate);
+                    if (t < initialDate && (!minRange || t > minRange))
+                        minRange = t;
+                    else if (t > initialDate && (!maxRange || t < maxRange))
+                        maxRange = t;
+                }
+            }
+            for (var m = 0; m < self.config.showMonths; m++) {
+                var month = self.daysContainer.children[m];
+                var _loop_1 = function (i, l) {
+                    var dayElem = month.children[i], date = dayElem.dateObj;
+                    var timestamp = date.getTime();
+                    var outOfRange = (minRange > 0 && timestamp < minRange) ||
+                        (maxRange > 0 && timestamp > maxRange);
+                    if (outOfRange) {
+                        dayElem.classList.add("notAllowed");
+                        ["inRange", "startRange", "endRange"].forEach(function (c) {
+                            dayElem.classList.remove(c);
+                        });
+                        return "continue";
+                    }
+                    else if (containsDisabled && !outOfRange)
+                        return "continue";
+                    ["startRange", "inRange", "endRange", "notAllowed"].forEach(function (c) {
+                        dayElem.classList.remove(c);
+                    });
+                    if (elem !== undefined) {
+                        elem.classList.add(hoverDate <= self.selectedDates[0].getTime()
+                            ? "startRange"
+                            : "endRange");
+                        if (initialDate < hoverDate && timestamp === initialDate)
+                            dayElem.classList.add("startRange");
+                        else if (initialDate > hoverDate && timestamp === initialDate)
+                            dayElem.classList.add("endRange");
+                        if (timestamp >= minRange &&
+                            (maxRange === 0 || timestamp <= maxRange) &&
+                            isBetween(timestamp, initialDate, hoverDate))
+                            dayElem.classList.add("inRange");
+                    }
+                };
+                for (var i = 0, l = month.children.length; i < l; i++) {
+                    _loop_1(i, l);
+                }
+            }
+        }
+        function onResize() {
+            if (self.isOpen && !self.config.static && !self.config.inline)
+                positionCalendar();
+        }
+        function open(e, positionElement) {
+            if (positionElement === void 0) { positionElement = self._positionElement; }
+            if (self.isMobile === true) {
+                if (e) {
+                    e.preventDefault();
+                    var eventTarget = getEventTarget(e);
+                    eventTarget && eventTarget.blur();
+                }
+                if (self.mobileInput !== undefined) {
+                    self.mobileInput.focus();
+                    self.mobileInput.click();
+                }
+                triggerEvent("onOpen");
+                return;
+            }
+            if (self._input.disabled || self.config.inline)
+                return;
+            var wasOpen = self.isOpen;
+            self.isOpen = true;
+            if (!wasOpen) {
+                self.calendarContainer.classList.add("open");
+                self._input.classList.add("active");
+                triggerEvent("onOpen");
+                positionCalendar(positionElement);
+            }
+            if (self.config.enableTime === true && self.config.noCalendar === true) {
+                if (self.config.allowInput === false &&
+                    (e === undefined ||
+                        !self.timeContainer.contains(e.relatedTarget))) {
+                    setTimeout(function () { return self.hourElement.select(); }, 50);
+                }
+            }
+        }
+        function minMaxDateSetter(type) {
+            return function (date) {
+                var dateObj = (self.config["_" + type + "Date"] = self.parseDate(date, self.config.dateFormat));
+                var inverseDateObj = self.config["_" + (type === "min" ? "max" : "min") + "Date"];
+                if (dateObj !== undefined) {
+                    self[type === "min" ? "minDateHasTime" : "maxDateHasTime"] =
+                        dateObj.getHours() > 0 ||
+                            dateObj.getMinutes() > 0 ||
+                            dateObj.getSeconds() > 0;
+                }
+                if (self.selectedDates) {
+                    self.selectedDates = self.selectedDates.filter(function (d) { return isEnabled(d); });
+                    if (!self.selectedDates.length && type === "min")
+                        setHoursFromDate(dateObj);
+                    updateValue();
+                }
+                if (self.daysContainer) {
+                    redraw();
+                    if (dateObj !== undefined)
+                        self.currentYearElement[type] = dateObj.getFullYear().toString();
+                    else
+                        self.currentYearElement.removeAttribute(type);
+                    self.currentYearElement.disabled =
+                        !!inverseDateObj &&
+                            dateObj !== undefined &&
+                            inverseDateObj.getFullYear() === dateObj.getFullYear();
+                }
+            };
+        }
+        function parseConfig() {
+            var boolOpts = [
+                "wrap",
+                "weekNumbers",
+                "allowInput",
+                "allowInvalidPreload",
+                "clickOpens",
+                "time_24hr",
+                "enableTime",
+                "noCalendar",
+                "altInput",
+                "shorthandCurrentMonth",
+                "inline",
+                "static",
+                "enableSeconds",
+                "disableMobile",
+            ];
+            var userConfig = __assign(__assign({}, JSON.parse(JSON.stringify(element.dataset || {}))), instanceConfig);
+            var formats = {};
+            self.config.parseDate = userConfig.parseDate;
+            self.config.formatDate = userConfig.formatDate;
+            Object.defineProperty(self.config, "enable", {
+                get: function () { return self.config._enable; },
+                set: function (dates) {
+                    self.config._enable = parseDateRules(dates);
+                },
+            });
+            Object.defineProperty(self.config, "disable", {
+                get: function () { return self.config._disable; },
+                set: function (dates) {
+                    self.config._disable = parseDateRules(dates);
+                },
+            });
+            var timeMode = userConfig.mode === "time";
+            if (!userConfig.dateFormat && (userConfig.enableTime || timeMode)) {
+                var defaultDateFormat = flatpickr.defaultConfig.dateFormat || defaults.dateFormat;
+                formats.dateFormat =
+                    userConfig.noCalendar || timeMode
+                        ? "H:i" + (userConfig.enableSeconds ? ":S" : "")
+                        : defaultDateFormat + " H:i" + (userConfig.enableSeconds ? ":S" : "");
+            }
+            if (userConfig.altInput &&
+                (userConfig.enableTime || timeMode) &&
+                !userConfig.altFormat) {
+                var defaultAltFormat = flatpickr.defaultConfig.altFormat || defaults.altFormat;
+                formats.altFormat =
+                    userConfig.noCalendar || timeMode
+                        ? "h:i" + (userConfig.enableSeconds ? ":S K" : " K")
+                        : defaultAltFormat + (" h:i" + (userConfig.enableSeconds ? ":S" : "") + " K");
+            }
+            Object.defineProperty(self.config, "minDate", {
+                get: function () { return self.config._minDate; },
+                set: minMaxDateSetter("min"),
+            });
+            Object.defineProperty(self.config, "maxDate", {
+                get: function () { return self.config._maxDate; },
+                set: minMaxDateSetter("max"),
+            });
+            var minMaxTimeSetter = function (type) { return function (val) {
+                self.config[type === "min" ? "_minTime" : "_maxTime"] = self.parseDate(val, "H:i:S");
+            }; };
+            Object.defineProperty(self.config, "minTime", {
+                get: function () { return self.config._minTime; },
+                set: minMaxTimeSetter("min"),
+            });
+            Object.defineProperty(self.config, "maxTime", {
+                get: function () { return self.config._maxTime; },
+                set: minMaxTimeSetter("max"),
+            });
+            if (userConfig.mode === "time") {
+                self.config.noCalendar = true;
+                self.config.enableTime = true;
+            }
+            Object.assign(self.config, formats, userConfig);
+            for (var i = 0; i < boolOpts.length; i++)
+                // https://github.com/microsoft/TypeScript/issues/31663
+                self.config[boolOpts[i]] =
+                    self.config[boolOpts[i]] === true ||
+                        self.config[boolOpts[i]] === "true";
+            HOOKS.filter(function (hook) { return self.config[hook] !== undefined; }).forEach(function (hook) {
+                self.config[hook] = arrayify(self.config[hook] || []).map(bindToInstance);
+            });
+            self.isMobile =
+                !self.config.disableMobile &&
+                    !self.config.inline &&
+                    self.config.mode === "single" &&
+                    !self.config.disable.length &&
+                    !self.config.enable.length &&
+                    !self.config.weekNumbers &&
+                    /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);
+            for (var i = 0; i < self.config.plugins.length; i++) {
+                var pluginConf = self.config.plugins[i](self) || {};
+                for (var key in pluginConf) {
+                    if (HOOKS.indexOf(key) > -1) {
+                        self.config[key] = arrayify(pluginConf[key])
+                            .map(bindToInstance)
+                            .concat(self.config[key]);
+                    }
+                    else if (typeof userConfig[key] === "undefined")
+                        self.config[key] = pluginConf[key];
+                }
+            }
+            if (!userConfig.altInputClass) {
+                self.config.altInputClass =
+                    getInputElem().className + " " + self.config.altInputClass;
+            }
+            triggerEvent("onParseConfig");
+        }
+        function getInputElem() {
+            return self.config.wrap
+                ? element.querySelector("[data-input]")
+                : element;
+        }
+        function setupLocale() {
+            if (typeof self.config.locale !== "object" &&
+                typeof flatpickr.l10ns[self.config.locale] === "undefined")
+                self.config.errorHandler(new Error("flatpickr: invalid locale " + self.config.locale));
+            self.l10n = __assign(__assign({}, flatpickr.l10ns.default), (typeof self.config.locale === "object"
+                ? self.config.locale
+                : self.config.locale !== "default"
+                    ? flatpickr.l10ns[self.config.locale]
+                    : undefined));
+            tokenRegex.K = "(" + self.l10n.amPM[0] + "|" + self.l10n.amPM[1] + "|" + self.l10n.amPM[0].toLowerCase() + "|" + self.l10n.amPM[1].toLowerCase() + ")";
+            var userConfig = __assign(__assign({}, instanceConfig), JSON.parse(JSON.stringify(element.dataset || {})));
+            if (userConfig.time_24hr === undefined &&
+                flatpickr.defaultConfig.time_24hr === undefined) {
+                self.config.time_24hr = self.l10n.time_24hr;
+            }
+            self.formatDate = createDateFormatter(self);
+            self.parseDate = createDateParser({ config: self.config, l10n: self.l10n });
+        }
+        function positionCalendar(customPositionElement) {
+            if (self.calendarContainer === undefined)
+                return;
+            triggerEvent("onPreCalendarPosition");
+            var positionElement = customPositionElement || self._positionElement;
+            var calendarHeight = Array.prototype.reduce.call(self.calendarContainer.children, (function (acc, child) { return acc + child.offsetHeight; }), 0), calendarWidth = self.calendarContainer.offsetWidth, configPos = self.config.position.split(" "), configPosVertical = configPos[0], configPosHorizontal = configPos.length > 1 ? configPos[1] : null, inputBounds = positionElement.getBoundingClientRect(), distanceFromBottom = window.innerHeight - inputBounds.bottom, showOnTop = configPosVertical === "above" ||
+                (configPosVertical !== "below" &&
+                    distanceFromBottom < calendarHeight &&
+                    inputBounds.top > calendarHeight);
+            var top = window.pageYOffset +
+                inputBounds.top +
+                (!showOnTop ? positionElement.offsetHeight + 2 : -calendarHeight - 2);
+            toggleClass(self.calendarContainer, "arrowTop", !showOnTop);
+            toggleClass(self.calendarContainer, "arrowBottom", showOnTop);
+            if (self.config.inline)
+                return;
+            var left = window.pageXOffset + inputBounds.left;
+            var isCenter = false;
+            var isRight = false;
+            if (configPosHorizontal === "center") {
+                left -= (calendarWidth - inputBounds.width) / 2;
+                isCenter = true;
+            }
+            else if (configPosHorizontal === "right") {
+                left -= calendarWidth - inputBounds.width;
+                isRight = true;
+            }
+            toggleClass(self.calendarContainer, "arrowLeft", !isCenter && !isRight);
+            toggleClass(self.calendarContainer, "arrowCenter", isCenter);
+            toggleClass(self.calendarContainer, "arrowRight", isRight);
+            var right = window.document.body.offsetWidth -
+                (window.pageXOffset + inputBounds.right);
+            var rightMost = left + calendarWidth > window.document.body.offsetWidth;
+            var centerMost = right + calendarWidth > window.document.body.offsetWidth;
+            toggleClass(self.calendarContainer, "rightMost", rightMost);
+            if (self.config.static)
+                return;
+            self.calendarContainer.style.top = top + "px";
+            if (!rightMost) {
+                self.calendarContainer.style.left = left + "px";
+                self.calendarContainer.style.right = "auto";
+            }
+            else if (!centerMost) {
+                self.calendarContainer.style.left = "auto";
+                self.calendarContainer.style.right = right + "px";
+            }
+            else {
+                var doc = getDocumentStyleSheet();
+                // some testing environments don't have css support
+                if (doc === undefined)
+                    return;
+                var bodyWidth = window.document.body.offsetWidth;
+                var centerLeft = Math.max(0, bodyWidth / 2 - calendarWidth / 2);
+                var centerBefore = ".flatpickr-calendar.centerMost:before";
+                var centerAfter = ".flatpickr-calendar.centerMost:after";
+                var centerIndex = doc.cssRules.length;
+                var centerStyle = "{left:" + inputBounds.left + "px;right:auto;}";
+                toggleClass(self.calendarContainer, "rightMost", false);
+                toggleClass(self.calendarContainer, "centerMost", true);
+                doc.insertRule(centerBefore + "," + centerAfter + centerStyle, centerIndex);
+                self.calendarContainer.style.left = centerLeft + "px";
+                self.calendarContainer.style.right = "auto";
+            }
+        }
+        function getDocumentStyleSheet() {
+            var editableSheet = null;
+            for (var i = 0; i < document.styleSheets.length; i++) {
+                var sheet = document.styleSheets[i];
+                try {
+                    sheet.cssRules;
+                }
+                catch (err) {
+                    continue;
+                }
+                editableSheet = sheet;
+                break;
+            }
+            return editableSheet != null ? editableSheet : createStyleSheet();
+        }
+        function createStyleSheet() {
+            var style = document.createElement("style");
+            document.head.appendChild(style);
+            return style.sheet;
+        }
+        function redraw() {
+            if (self.config.noCalendar || self.isMobile)
+                return;
+            buildMonthSwitch();
+            updateNavigationCurrentMonth();
+            buildDays();
+        }
+        function focusAndClose() {
+            self._input.focus();
+            if (window.navigator.userAgent.indexOf("MSIE") !== -1 ||
+                navigator.msMaxTouchPoints !== undefined) {
+                // hack - bugs in the way IE handles focus keeps the calendar open
+                setTimeout(self.close, 0);
+            }
+            else {
+                self.close();
+            }
+        }
+        function selectDate(e) {
+            e.preventDefault();
+            e.stopPropagation();
+            var isSelectable = function (day) {
+                return day.classList &&
+                    day.classList.contains("flatpickr-day") &&
+                    !day.classList.contains("flatpickr-disabled") &&
+                    !day.classList.contains("notAllowed");
+            };
+            var t = findParent(getEventTarget(e), isSelectable);
+            if (t === undefined)
+                return;
+            var target = t;
+            var selectedDate = (self.latestSelectedDateObj = new Date(target.dateObj.getTime()));
+            var shouldChangeMonth = (selectedDate.getMonth() < self.currentMonth ||
+                selectedDate.getMonth() >
+                    self.currentMonth + self.config.showMonths - 1) &&
+                self.config.mode !== "range";
+            self.selectedDateElem = target;
+            if (self.config.mode === "single")
+                self.selectedDates = [selectedDate];
+            else if (self.config.mode === "multiple") {
+                var selectedIndex = isDateSelected(selectedDate);
+                if (selectedIndex)
+                    self.selectedDates.splice(parseInt(selectedIndex), 1);
+                else
+                    self.selectedDates.push(selectedDate);
+            }
+            else if (self.config.mode === "range") {
+                if (self.selectedDates.length === 2) {
+                    self.clear(false, false);
+                }
+                self.latestSelectedDateObj = selectedDate;
+                self.selectedDates.push(selectedDate);
+                // unless selecting same date twice, sort ascendingly
+                if (compareDates(selectedDate, self.selectedDates[0], true) !== 0)
+                    self.selectedDates.sort(function (a, b) { return a.getTime() - b.getTime(); });
+            }
+            setHoursFromInputs();
+            if (shouldChangeMonth) {
+                var isNewYear = self.currentYear !== selectedDate.getFullYear();
+                self.currentYear = selectedDate.getFullYear();
+                self.currentMonth = selectedDate.getMonth();
+                if (isNewYear) {
+                    triggerEvent("onYearChange");
+                    buildMonthSwitch();
+                }
+                triggerEvent("onMonthChange");
+            }
+            updateNavigationCurrentMonth();
+            buildDays();
+            updateValue();
+            // maintain focus
+            if (!shouldChangeMonth &&
+                self.config.mode !== "range" &&
+                self.config.showMonths === 1)
+                focusOnDayElem(target);
+            else if (self.selectedDateElem !== undefined &&
+                self.hourElement === undefined) {
+                self.selectedDateElem && self.selectedDateElem.focus();
+            }
+            if (self.hourElement !== undefined)
+                self.hourElement !== undefined && self.hourElement.focus();
+            if (self.config.closeOnSelect) {
+                var single = self.config.mode === "single" && !self.config.enableTime;
+                var range = self.config.mode === "range" &&
+                    self.selectedDates.length === 2 &&
+                    !self.config.enableTime;
+                if (single || range) {
+                    focusAndClose();
+                }
+            }
+            triggerChange();
+        }
+        var CALLBACKS = {
+            locale: [setupLocale, updateWeekdays],
+            showMonths: [buildMonths, setCalendarWidth, buildWeekdays],
+            minDate: [jumpToDate],
+            maxDate: [jumpToDate],
+        };
+        function set(option, value) {
+            if (option !== null && typeof option === "object") {
+                Object.assign(self.config, option);
+                for (var key in option) {
+                    if (CALLBACKS[key] !== undefined)
+                        CALLBACKS[key].forEach(function (x) { return x(); });
+                }
+            }
+            else {
+                self.config[option] = value;
+                if (CALLBACKS[option] !== undefined)
+                    CALLBACKS[option].forEach(function (x) { return x(); });
+                else if (HOOKS.indexOf(option) > -1)
+                    self.config[option] = arrayify(value);
+            }
+            self.redraw();
+            updateValue(true);
+        }
+        function setSelectedDate(inputDate, format) {
+            var dates = [];
+            if (inputDate instanceof Array)
+                dates = inputDate.map(function (d) { return self.parseDate(d, format); });
+            else if (inputDate instanceof Date || typeof inputDate === "number")
+                dates = [self.parseDate(inputDate, format)];
+            else if (typeof inputDate === "string") {
+                switch (self.config.mode) {
+                    case "single":
+                    case "time":
+                        dates = [self.parseDate(inputDate, format)];
+                        break;
+                    case "multiple":
+                        dates = inputDate
+                            .split(self.config.conjunction)
+                            .map(function (date) { return self.parseDate(date, format); });
+                        break;
+                    case "range":
+                        dates = inputDate
+                            .split(self.l10n.rangeSeparator)
+                            .map(function (date) { return self.parseDate(date, format); });
+                        break;
+                }
+            }
+            else
+                self.config.errorHandler(new Error("Invalid date supplied: " + JSON.stringify(inputDate)));
+            self.selectedDates = (self.config.allowInvalidPreload
+                ? dates
+                : dates.filter(function (d) { return d instanceof Date && isEnabled(d, false); }));
+            if (self.config.mode === "range")
+                self.selectedDates.sort(function (a, b) { return a.getTime() - b.getTime(); });
+        }
+        function setDate(date, triggerChange, format) {
+            if (triggerChange === void 0) { triggerChange = false; }
+            if (format === void 0) { format = self.config.dateFormat; }
+            if ((date !== 0 && !date) || (date instanceof Array && date.length === 0))
+                return self.clear(triggerChange);
+            setSelectedDate(date, format);
+            self.latestSelectedDateObj =
+                self.selectedDates[self.selectedDates.length - 1];
+            self.redraw();
+            jumpToDate(undefined, triggerChange);
+            setHoursFromDate();
+            if (self.selectedDates.length === 0) {
+                self.clear(false);
+            }
+            updateValue(triggerChange);
+            if (triggerChange)
+                triggerEvent("onChange");
+        }
+        function parseDateRules(arr) {
+            return arr
+                .slice()
+                .map(function (rule) {
+                if (typeof rule === "string" ||
+                    typeof rule === "number" ||
+                    rule instanceof Date) {
+                    return self.parseDate(rule, undefined, true);
+                }
+                else if (rule &&
+                    typeof rule === "object" &&
+                    rule.from &&
+                    rule.to)
+                    return {
+                        from: self.parseDate(rule.from, undefined),
+                        to: self.parseDate(rule.to, undefined),
+                    };
+                return rule;
+            })
+                .filter(function (x) { return x; }); // remove falsy values
+        }
+        function setupDates() {
+            self.selectedDates = [];
+            self.now = self.parseDate(self.config.now) || new Date();
+            // Workaround IE11 setting placeholder as the input's value
+            var preloadedDate = self.config.defaultDate ||
+                ((self.input.nodeName === "INPUT" ||
+                    self.input.nodeName === "TEXTAREA") &&
+                    self.input.placeholder &&
+                    self.input.value === self.input.placeholder
+                    ? null
+                    : self.input.value);
+            if (preloadedDate)
+                setSelectedDate(preloadedDate, self.config.dateFormat);
+            self._initialDate =
+                self.selectedDates.length > 0
+                    ? self.selectedDates[0]
+                    : self.config.minDate &&
+                        self.config.minDate.getTime() > self.now.getTime()
+                        ? self.config.minDate
+                        : self.config.maxDate &&
+                            self.config.maxDate.getTime() < self.now.getTime()
+                            ? self.config.maxDate
+                            : self.now;
+            self.currentYear = self._initialDate.getFullYear();
+            self.currentMonth = self._initialDate.getMonth();
+            if (self.selectedDates.length > 0)
+                self.latestSelectedDateObj = self.selectedDates[0];
+            if (self.config.minTime !== undefined)
+                self.config.minTime = self.parseDate(self.config.minTime, "H:i");
+            if (self.config.maxTime !== undefined)
+                self.config.maxTime = self.parseDate(self.config.maxTime, "H:i");
+            self.minDateHasTime =
+                !!self.config.minDate &&
+                    (self.config.minDate.getHours() > 0 ||
+                        self.config.minDate.getMinutes() > 0 ||
+                        self.config.minDate.getSeconds() > 0);
+            self.maxDateHasTime =
+                !!self.config.maxDate &&
+                    (self.config.maxDate.getHours() > 0 ||
+                        self.config.maxDate.getMinutes() > 0 ||
+                        self.config.maxDate.getSeconds() > 0);
+        }
+        function setupInputs() {
+            self.input = getInputElem();
+            /* istanbul ignore next */
+            if (!self.input) {
+                self.config.errorHandler(new Error("Invalid input element specified"));
+                return;
+            }
+            // hack: store previous type to restore it after destroy()
+            self.input._type = self.input.type;
+            self.input.type = "text";
+            self.input.classList.add("flatpickr-input");
+            self._input = self.input;
+            if (self.config.altInput) {
+                // replicate self.element
+                self.altInput = createElement(self.input.nodeName, self.config.altInputClass);
+                self._input = self.altInput;
+                self.altInput.placeholder = self.input.placeholder;
+                self.altInput.disabled = self.input.disabled;
+                self.altInput.required = self.input.required;
+                self.altInput.tabIndex = self.input.tabIndex;
+                self.altInput.type = "text";
+                self.input.setAttribute("type", "hidden");
+                if (!self.config.static && self.input.parentNode)
+                    self.input.parentNode.insertBefore(self.altInput, self.input.nextSibling);
+            }
+            if (!self.config.allowInput)
+                self._input.setAttribute("readonly", "readonly");
+            self._positionElement = self.config.positionElement || self._input;
+        }
+        function setupMobile() {
+            var inputType = self.config.enableTime
+                ? self.config.noCalendar
+                    ? "time"
+                    : "datetime-local"
+                : "date";
+            self.mobileInput = createElement("input", self.input.className + " flatpickr-mobile");
+            self.mobileInput.tabIndex = 1;
+            self.mobileInput.type = inputType;
+            self.mobileInput.disabled = self.input.disabled;
+            self.mobileInput.required = self.input.required;
+            self.mobileInput.placeholder = self.input.placeholder;
+            self.mobileFormatStr =
+                inputType === "datetime-local"
+                    ? "Y-m-d\\TH:i:S"
+                    : inputType === "date"
+                        ? "Y-m-d"
+                        : "H:i:S";
+            if (self.selectedDates.length > 0) {
+                self.mobileInput.defaultValue = self.mobileInput.value = self.formatDate(self.selectedDates[0], self.mobileFormatStr);
+            }
+            if (self.config.minDate)
+                self.mobileInput.min = self.formatDate(self.config.minDate, "Y-m-d");
+            if (self.config.maxDate)
+                self.mobileInput.max = self.formatDate(self.config.maxDate, "Y-m-d");
+            if (self.input.getAttribute("step"))
+                self.mobileInput.step = String(self.input.getAttribute("step"));
+            self.input.type = "hidden";
+            if (self.altInput !== undefined)
+                self.altInput.type = "hidden";
+            try {
+                if (self.input.parentNode)
+                    self.input.parentNode.insertBefore(self.mobileInput, self.input.nextSibling);
+            }
+            catch (_a) { }
+            bind(self.mobileInput, "change", function (e) {
+                self.setDate(getEventTarget(e).value, false, self.mobileFormatStr);
+                triggerEvent("onChange");
+                triggerEvent("onClose");
+            });
+        }
+        function toggle(e) {
+            if (self.isOpen === true)
+                return self.close();
+            self.open(e);
+        }
+        function triggerEvent(event, data) {
+            // If the instance has been destroyed already, all hooks have been removed
+            if (self.config === undefined)
+                return;
+            var hooks = self.config[event];
+            if (hooks !== undefined && hooks.length > 0) {
+                for (var i = 0; hooks[i] && i < hooks.length; i++)
+                    hooks[i](self.selectedDates, self.input.value, self, data);
+            }
+            if (event === "onChange") {
+                self.input.dispatchEvent(createEvent("change"));
+                // many front-end frameworks bind to the input event
+                self.input.dispatchEvent(createEvent("input"));
+            }
+        }
+        function createEvent(name) {
+            var e = document.createEvent("Event");
+            e.initEvent(name, true, true);
+            return e;
+        }
+        function isDateSelected(date) {
+            for (var i = 0; i < self.selectedDates.length; i++) {
+                if (compareDates(self.selectedDates[i], date) === 0)
+                    return "" + i;
+            }
+            return false;
+        }
+        function isDateInRange(date) {
+            if (self.config.mode !== "range" || self.selectedDates.length < 2)
+                return false;
+            return (compareDates(date, self.selectedDates[0]) >= 0 &&
+                compareDates(date, self.selectedDates[1]) <= 0);
+        }
+        function updateNavigationCurrentMonth() {
+            if (self.config.noCalendar || self.isMobile || !self.monthNav)
+                return;
+            self.yearElements.forEach(function (yearElement, i) {
+                var d = new Date(self.currentYear, self.currentMonth, 1);
+                d.setMonth(self.currentMonth + i);
+                if (self.config.showMonths > 1 ||
+                    self.config.monthSelectorType === "static") {
+                    self.monthElements[i].textContent =
+                        monthToStr(d.getMonth(), self.config.shorthandCurrentMonth, self.l10n) + " ";
+                }
+                else {
+                    self.monthsDropdownContainer.value = d.getMonth().toString();
+                }
+                yearElement.value = d.getFullYear().toString();
+            });
+            self._hidePrevMonthArrow =
+                self.config.minDate !== undefined &&
+                    (self.currentYear === self.config.minDate.getFullYear()
+                        ? self.currentMonth <= self.config.minDate.getMonth()
+                        : self.currentYear < self.config.minDate.getFullYear());
+            self._hideNextMonthArrow =
+                self.config.maxDate !== undefined &&
+                    (self.currentYear === self.config.maxDate.getFullYear()
+                        ? self.currentMonth + 1 > self.config.maxDate.getMonth()
+                        : self.currentYear > self.config.maxDate.getFullYear());
+        }
+        function getDateStr(format) {
+            return self.selectedDates
+                .map(function (dObj) { return self.formatDate(dObj, format); })
+                .filter(function (d, i, arr) {
+                return self.config.mode !== "range" ||
+                    self.config.enableTime ||
+                    arr.indexOf(d) === i;
+            })
+                .join(self.config.mode !== "range"
+                ? self.config.conjunction
+                : self.l10n.rangeSeparator);
+        }
+        /**
+         * Updates the values of inputs associated with the calendar
+         */
+        function updateValue(triggerChange) {
+            if (triggerChange === void 0) { triggerChange = true; }
+            if (self.mobileInput !== undefined && self.mobileFormatStr) {
+                self.mobileInput.value =
+                    self.latestSelectedDateObj !== undefined
+                        ? self.formatDate(self.latestSelectedDateObj, self.mobileFormatStr)
+                        : "";
+            }
+            self.input.value = getDateStr(self.config.dateFormat);
+            if (self.altInput !== undefined) {
+                self.altInput.value = getDateStr(self.config.altFormat);
+            }
+            if (triggerChange !== false)
+                triggerEvent("onValueUpdate");
+        }
+        function onMonthNavClick(e) {
+            var eventTarget = getEventTarget(e);
+            var isPrevMonth = self.prevMonthNav.contains(eventTarget);
+            var isNextMonth = self.nextMonthNav.contains(eventTarget);
+            if (isPrevMonth || isNextMonth) {
+                changeMonth(isPrevMonth ? -1 : 1);
+            }
+            else if (self.yearElements.indexOf(eventTarget) >= 0) {
+                eventTarget.select();
+            }
+            else if (eventTarget.classList.contains("arrowUp")) {
+                self.changeYear(self.currentYear + 1);
+            }
+            else if (eventTarget.classList.contains("arrowDown")) {
+                self.changeYear(self.currentYear - 1);
+            }
+        }
+        function timeWrapper(e) {
+            e.preventDefault();
+            var isKeyDown = e.type === "keydown", eventTarget = getEventTarget(e), input = eventTarget;
+            if (self.amPM !== undefined && eventTarget === self.amPM) {
+                self.amPM.textContent =
+                    self.l10n.amPM[int(self.amPM.textContent === self.l10n.amPM[0])];
+            }
+            var min = parseFloat(input.getAttribute("min")), max = parseFloat(input.getAttribute("max")), step = parseFloat(input.getAttribute("step")), curValue = parseInt(input.value, 10), delta = e.delta ||
+                (isKeyDown ? (e.which === 38 ? 1 : -1) : 0);
+            var newValue = curValue + step * delta;
+            if (typeof input.value !== "undefined" && input.value.length === 2) {
+                var isHourElem = input === self.hourElement, isMinuteElem = input === self.minuteElement;
+                if (newValue < min) {
+                    newValue =
+                        max +
+                            newValue +
+                            int(!isHourElem) +
+                            (int(isHourElem) && int(!self.amPM));
+                    if (isMinuteElem)
+                        incrementNumInput(undefined, -1, self.hourElement);
+                }
+                else if (newValue > max) {
+                    newValue =
+                        input === self.hourElement ? newValue - max - int(!self.amPM) : min;
+                    if (isMinuteElem)
+                        incrementNumInput(undefined, 1, self.hourElement);
+                }
+                if (self.amPM &&
+                    isHourElem &&
+                    (step === 1
+                        ? newValue + curValue === 23
+                        : Math.abs(newValue - curValue) > step)) {
+                    self.amPM.textContent =
+                        self.l10n.amPM[int(self.amPM.textContent === self.l10n.amPM[0])];
+                }
+                input.value = pad(newValue);
+            }
+        }
+        init();
+        return self;
+    }
+    /* istanbul ignore next */
+    function _flatpickr(nodeList, config) {
+        // static list
+        var nodes = Array.prototype.slice
+            .call(nodeList)
+            .filter(function (x) { return x instanceof HTMLElement; });
+        var instances = [];
+        for (var i = 0; i < nodes.length; i++) {
+            var node = nodes[i];
+            try {
+                if (node.getAttribute("data-fp-omit") !== null)
+                    continue;
+                if (node._flatpickr !== undefined) {
+                    node._flatpickr.destroy();
+                    node._flatpickr = undefined;
+                }
+                node._flatpickr = FlatpickrInstance(node, config || {});
+                instances.push(node._flatpickr);
+            }
+            catch (e) {
+                console.error(e);
+            }
+        }
+        return instances.length === 1 ? instances[0] : instances;
+    }
+    /* istanbul ignore next */
+    if (typeof HTMLElement !== "undefined" &&
+        typeof HTMLCollection !== "undefined" &&
+        typeof NodeList !== "undefined") {
+        // browser env
+        HTMLCollection.prototype.flatpickr = NodeList.prototype.flatpickr = function (config) {
+            return _flatpickr(this, config);
+        };
+        HTMLElement.prototype.flatpickr = function (config) {
+            return _flatpickr([this], config);
+        };
+    }
+    /* istanbul ignore next */
+    var flatpickr = function (selector, config) {
+        if (typeof selector === "string") {
+            return _flatpickr(window.document.querySelectorAll(selector), config);
+        }
+        else if (selector instanceof Node) {
+            return _flatpickr([selector], config);
+        }
+        else {
+            return _flatpickr(selector, config);
+        }
+    };
+    /* istanbul ignore next */
+    flatpickr.defaultConfig = {};
+    flatpickr.l10ns = {
+        en: __assign({}, english),
+        default: __assign({}, english),
+    };
+    flatpickr.localize = function (l10n) {
+        flatpickr.l10ns.default = __assign(__assign({}, flatpickr.l10ns.default), l10n);
+    };
+    flatpickr.setDefaults = function (config) {
+        flatpickr.defaultConfig = __assign(__assign({}, flatpickr.defaultConfig), config);
+    };
+    flatpickr.parseDate = createDateParser({});
+    flatpickr.formatDate = createDateFormatter({});
+    flatpickr.compareDates = compareDates;
+    /* istanbul ignore next */
+    if (typeof jQuery !== "undefined" && typeof jQuery.fn !== "undefined") {
+        jQuery.fn.flatpickr = function (config) {
+            return _flatpickr(this, config);
+        };
+    }
+    // eslint-disable-next-line @typescript-eslint/camelcase
+    Date.prototype.fp_incr = function (days) {
+        return new Date(this.getFullYear(), this.getMonth(), this.getDate() + (typeof days === "string" ? parseInt(days, 10) : days));
+    };
+    if (typeof window !== "undefined") {
+        window.flatpickr = flatpickr;
+    }
+
+    return flatpickr;
+
+})));
diff --git a/website/js/vendor/flatpickr/flatpickr.min.css b/website/js/vendor/flatpickr/flatpickr.min.css
new file mode 100644 (file)
index 0000000..2b5da59
--- /dev/null
@@ -0,0 +1,13 @@
+.flatpickr-calendar{background:transparent;opacity:0;display:none;text-align:center;visibility:hidden;padding:0;-webkit-animation:none;animation:none;direction:ltr;border:0;font-size:14px;line-height:24px;border-radius:5px;position:absolute;width:307.875px;-webkit-box-sizing:border-box;box-sizing:border-box;-ms-touch-action:manipulation;touch-action:manipulation;background:#fff;-webkit-box-shadow:1px 0 0 #e6e6e6,-1px 0 0 #e6e6e6,0 1px 0 #e6e6e6,0 -1px 0 #e6e6e6,0 3px 13px rgba(0,0,0,0.08);box-shadow:1px 0 0 #e6e6e6,-1px 0 0 #e6e6e6,0 1px 0 #e6e6e6,0 -1px 0 #e6e6e6,0 3px 13px rgba(0,0,0,0.08)}.flatpickr-calendar.open,.flatpickr-calendar.inline{opacity:1;max-height:640px;visibility:visible}.flatpickr-calendar.open{display:inline-block;z-index:99999}.flatpickr-calendar.animate.open{-webkit-animation:fpFadeInDown 300ms cubic-bezier(.23,1,.32,1);animation:fpFadeInDown 300ms cubic-bezier(.23,1,.32,1)}.flatpickr-calendar.inline{display:block;position:relative;top:2px}.flatpickr-calendar.static{position:absolute;top:calc(100% + 2px)}.flatpickr-calendar.static.open{z-index:999;display:block}.flatpickr-calendar.multiMonth .flatpickr-days .dayContainer:nth-child(n+1) .flatpickr-day.inRange:nth-child(7n+7){-webkit-box-shadow:none !important;box-shadow:none !important}.flatpickr-calendar.multiMonth .flatpickr-days .dayContainer:nth-child(n+2) .flatpickr-day.inRange:nth-child(7n+1){-webkit-box-shadow:-2px 0 0 #e6e6e6,5px 0 0 #e6e6e6;box-shadow:-2px 0 0 #e6e6e6,5px 0 0 #e6e6e6}.flatpickr-calendar .hasWeeks .dayContainer,.flatpickr-calendar .hasTime .dayContainer{border-bottom:0;border-bottom-right-radius:0;border-bottom-left-radius:0}.flatpickr-calendar .hasWeeks .dayContainer{border-left:0}.flatpickr-calendar.hasTime .flatpickr-time{height:40px;border-top:1px solid #e6e6e6}.flatpickr-calendar.noCalendar.hasTime .flatpickr-time{height:auto}.flatpickr-calendar:before,.flatpickr-calendar:after{position:absolute;display:block;pointer-events:none;border:solid transparent;content:'';height:0;width:0;left:22px}.flatpickr-calendar.rightMost:before,.flatpickr-calendar.arrowRight:before,.flatpickr-calendar.rightMost:after,.flatpickr-calendar.arrowRight:after{left:auto;right:22px}.flatpickr-calendar.arrowCenter:before,.flatpickr-calendar.arrowCenter:after{left:50%;right:50%}.flatpickr-calendar:before{border-width:5px;margin:0 -5px}.flatpickr-calendar:after{border-width:4px;margin:0 -4px}.flatpickr-calendar.arrowTop:before,.flatpickr-calendar.arrowTop:after{bottom:100%}.flatpickr-calendar.arrowTop:before{border-bottom-color:#e6e6e6}.flatpickr-calendar.arrowTop:after{border-bottom-color:#fff}.flatpickr-calendar.arrowBottom:before,.flatpickr-calendar.arrowBottom:after{top:100%}.flatpickr-calendar.arrowBottom:before{border-top-color:#e6e6e6}.flatpickr-calendar.arrowBottom:after{border-top-color:#fff}.flatpickr-calendar:focus{outline:0}.flatpickr-wrapper{position:relative;display:inline-block}.flatpickr-months{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.flatpickr-months .flatpickr-month{background:transparent;color:rgba(0,0,0,0.9);fill:rgba(0,0,0,0.9);height:34px;line-height:1;text-align:center;position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;overflow:hidden;-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1}.flatpickr-months .flatpickr-prev-month,.flatpickr-months .flatpickr-next-month{text-decoration:none;cursor:pointer;position:absolute;top:0;height:34px;padding:10px;z-index:3;color:rgba(0,0,0,0.9);fill:rgba(0,0,0,0.9)}.flatpickr-months .flatpickr-prev-month.flatpickr-disabled,.flatpickr-months .flatpickr-next-month.flatpickr-disabled{display:none}.flatpickr-months .flatpickr-prev-month i,.flatpickr-months .flatpickr-next-month i{position:relative}.flatpickr-months .flatpickr-prev-month.flatpickr-prev-month,.flatpickr-months .flatpickr-next-month.flatpickr-prev-month{/*
+      /*rtl:begin:ignore*/left:0/*
+      /*rtl:end:ignore*/}/*
+      /*rtl:begin:ignore*/
+/*
+      /*rtl:end:ignore*/
+.flatpickr-months .flatpickr-prev-month.flatpickr-next-month,.flatpickr-months .flatpickr-next-month.flatpickr-next-month{/*
+      /*rtl:begin:ignore*/right:0/*
+      /*rtl:end:ignore*/}/*
+      /*rtl:begin:ignore*/
+/*
+      /*rtl:end:ignore*/
+.flatpickr-months .flatpickr-prev-month:hover,.flatpickr-months .flatpickr-next-month:hover{color:#959ea9}.flatpickr-months .flatpickr-prev-month:hover svg,.flatpickr-months .flatpickr-next-month:hover svg{fill:#f64747}.flatpickr-months .flatpickr-prev-month svg,.flatpickr-months .flatpickr-next-month svg{width:14px;height:14px}.flatpickr-months .flatpickr-prev-month svg path,.flatpickr-months .flatpickr-next-month svg path{-webkit-transition:fill .1s;transition:fill .1s;fill:inherit}.numInputWrapper{position:relative;height:auto}.numInputWrapper input,.numInputWrapper span{display:inline-block}.numInputWrapper input{width:100%}.numInputWrapper input::-ms-clear{display:none}.numInputWrapper input::-webkit-outer-spin-button,.numInputWrapper input::-webkit-inner-spin-button{margin:0;-webkit-appearance:none}.numInputWrapper span{position:absolute;right:0;width:14px;padding:0 4px 0 2px;height:50%;line-height:50%;opacity:0;cursor:pointer;border:1px solid rgba(57,57,57,0.15);-webkit-box-sizing:border-box;box-sizing:border-box}.numInputWrapper span:hover{background:rgba(0,0,0,0.1)}.numInputWrapper span:active{background:rgba(0,0,0,0.2)}.numInputWrapper span:after{display:block;content:"";position:absolute}.numInputWrapper span.arrowUp{top:0;border-bottom:0}.numInputWrapper span.arrowUp:after{border-left:4px solid transparent;border-right:4px solid transparent;border-bottom:4px solid rgba(57,57,57,0.6);top:26%}.numInputWrapper span.arrowDown{top:50%}.numInputWrapper span.arrowDown:after{border-left:4px solid transparent;border-right:4px solid transparent;border-top:4px solid rgba(57,57,57,0.6);top:40%}.numInputWrapper span svg{width:inherit;height:auto}.numInputWrapper span svg path{fill:rgba(0,0,0,0.5)}.numInputWrapper:hover{background:rgba(0,0,0,0.05)}.numInputWrapper:hover span{opacity:1}.flatpickr-current-month{font-size:135%;line-height:inherit;font-weight:300;color:inherit;position:absolute;width:75%;left:12.5%;padding:7.48px 0 0 0;line-height:1;height:34px;display:inline-block;text-align:center;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}.flatpickr-current-month span.cur-month{font-family:inherit;font-weight:700;color:inherit;display:inline-block;margin-left:.5ch;padding:0}.flatpickr-current-month span.cur-month:hover{background:rgba(0,0,0,0.05)}.flatpickr-current-month .numInputWrapper{width:6ch;width:7ch\0;display:inline-block}.flatpickr-current-month .numInputWrapper span.arrowUp:after{border-bottom-color:rgba(0,0,0,0.9)}.flatpickr-current-month .numInputWrapper span.arrowDown:after{border-top-color:rgba(0,0,0,0.9)}.flatpickr-current-month input.cur-year{background:transparent;-webkit-box-sizing:border-box;box-sizing:border-box;color:inherit;cursor:text;padding:0 0 0 .5ch;margin:0;display:inline-block;font-size:inherit;font-family:inherit;font-weight:300;line-height:inherit;height:auto;border:0;border-radius:0;vertical-align:initial;-webkit-appearance:textfield;-moz-appearance:textfield;appearance:textfield}.flatpickr-current-month input.cur-year:focus{outline:0}.flatpickr-current-month input.cur-year[disabled],.flatpickr-current-month input.cur-year[disabled]:hover{font-size:100%;color:rgba(0,0,0,0.5);background:transparent;pointer-events:none}.flatpickr-current-month .flatpickr-monthDropdown-months{appearance:menulist;background:transparent;border:none;border-radius:0;box-sizing:border-box;color:inherit;cursor:pointer;font-size:inherit;font-family:inherit;font-weight:300;height:auto;line-height:inherit;margin:-1px 0 0 0;outline:none;padding:0 0 0 .5ch;position:relative;vertical-align:initial;-webkit-box-sizing:border-box;-webkit-appearance:menulist;-moz-appearance:menulist;width:auto}.flatpickr-current-month .flatpickr-monthDropdown-months:focus,.flatpickr-current-month .flatpickr-monthDropdown-months:active{outline:none}.flatpickr-current-month .flatpickr-monthDropdown-months:hover{background:rgba(0,0,0,0.05)}.flatpickr-current-month .flatpickr-monthDropdown-months .flatpickr-monthDropdown-month{background-color:transparent;outline:none;padding:0}.flatpickr-weekdays{background:transparent;text-align:center;overflow:hidden;width:100%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;height:28px}.flatpickr-weekdays .flatpickr-weekdaycontainer{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1}span.flatpickr-weekday{cursor:default;font-size:90%;background:transparent;color:rgba(0,0,0,0.54);line-height:1;margin:0;text-align:center;display:block;-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;font-weight:bolder}.dayContainer,.flatpickr-weeks{padding:1px 0 0 0}.flatpickr-days{position:relative;overflow:hidden;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:start;-webkit-align-items:flex-start;-ms-flex-align:start;align-items:flex-start;width:307.875px}.flatpickr-days:focus{outline:0}.dayContainer{padding:0;outline:0;text-align:left;width:307.875px;min-width:307.875px;max-width:307.875px;-webkit-box-sizing:border-box;box-sizing:border-box;display:inline-block;display:-ms-flexbox;display:-webkit-box;display:-webkit-flex;display:flex;-webkit-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-wrap:wrap;-ms-flex-pack:justify;-webkit-justify-content:space-around;justify-content:space-around;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);opacity:1}.dayContainer + .dayContainer{-webkit-box-shadow:-1px 0 0 #e6e6e6;box-shadow:-1px 0 0 #e6e6e6}.flatpickr-day{background:none;border:1px solid transparent;border-radius:150px;-webkit-box-sizing:border-box;box-sizing:border-box;color:#393939;cursor:pointer;font-weight:400;width:14.2857143%;-webkit-flex-basis:14.2857143%;-ms-flex-preferred-size:14.2857143%;flex-basis:14.2857143%;max-width:39px;height:39px;line-height:39px;margin:0;display:inline-block;position:relative;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;text-align:center}.flatpickr-day.inRange,.flatpickr-day.prevMonthDay.inRange,.flatpickr-day.nextMonthDay.inRange,.flatpickr-day.today.inRange,.flatpickr-day.prevMonthDay.today.inRange,.flatpickr-day.nextMonthDay.today.inRange,.flatpickr-day:hover,.flatpickr-day.prevMonthDay:hover,.flatpickr-day.nextMonthDay:hover,.flatpickr-day:focus,.flatpickr-day.prevMonthDay:focus,.flatpickr-day.nextMonthDay:focus{cursor:pointer;outline:0;background:#e6e6e6;border-color:#e6e6e6}.flatpickr-day.today{border-color:#959ea9}.flatpickr-day.today:hover,.flatpickr-day.today:focus{border-color:#959ea9;background:#959ea9;color:#fff}.flatpickr-day.selected,.flatpickr-day.startRange,.flatpickr-day.endRange,.flatpickr-day.selected.inRange,.flatpickr-day.startRange.inRange,.flatpickr-day.endRange.inRange,.flatpickr-day.selected:focus,.flatpickr-day.startRange:focus,.flatpickr-day.endRange:focus,.flatpickr-day.selected:hover,.flatpickr-day.startRange:hover,.flatpickr-day.endRange:hover,.flatpickr-day.selected.prevMonthDay,.flatpickr-day.startRange.prevMonthDay,.flatpickr-day.endRange.prevMonthDay,.flatpickr-day.selected.nextMonthDay,.flatpickr-day.startRange.nextMonthDay,.flatpickr-day.endRange.nextMonthDay{background:#569ff7;-webkit-box-shadow:none;box-shadow:none;color:#fff;border-color:#569ff7}.flatpickr-day.selected.startRange,.flatpickr-day.startRange.startRange,.flatpickr-day.endRange.startRange{border-radius:50px 0 0 50px}.flatpickr-day.selected.endRange,.flatpickr-day.startRange.endRange,.flatpickr-day.endRange.endRange{border-radius:0 50px 50px 0}.flatpickr-day.selected.startRange + .endRange:not(:nth-child(7n+1)),.flatpickr-day.startRange.startRange + .endRange:not(:nth-child(7n+1)),.flatpickr-day.endRange.startRange + .endRange:not(:nth-child(7n+1)){-webkit-box-shadow:-10px 0 0 #569ff7;box-shadow:-10px 0 0 #569ff7}.flatpickr-day.selected.startRange.endRange,.flatpickr-day.startRange.startRange.endRange,.flatpickr-day.endRange.startRange.endRange{border-radius:50px}.flatpickr-day.inRange{border-radius:0;-webkit-box-shadow:-5px 0 0 #e6e6e6,5px 0 0 #e6e6e6;box-shadow:-5px 0 0 #e6e6e6,5px 0 0 #e6e6e6}.flatpickr-day.flatpickr-disabled,.flatpickr-day.flatpickr-disabled:hover,.flatpickr-day.prevMonthDay,.flatpickr-day.nextMonthDay,.flatpickr-day.notAllowed,.flatpickr-day.notAllowed.prevMonthDay,.flatpickr-day.notAllowed.nextMonthDay{color:rgba(57,57,57,0.3);background:transparent;border-color:transparent;cursor:default}.flatpickr-day.flatpickr-disabled,.flatpickr-day.flatpickr-disabled:hover{cursor:not-allowed;color:rgba(57,57,57,0.1)}.flatpickr-day.week.selected{border-radius:0;-webkit-box-shadow:-5px 0 0 #569ff7,5px 0 0 #569ff7;box-shadow:-5px 0 0 #569ff7,5px 0 0 #569ff7}.flatpickr-day.hidden{visibility:hidden}.rangeMode .flatpickr-day{margin-top:1px}.flatpickr-weekwrapper{float:left}.flatpickr-weekwrapper .flatpickr-weeks{padding:0 12px;-webkit-box-shadow:1px 0 0 #e6e6e6;box-shadow:1px 0 0 #e6e6e6}.flatpickr-weekwrapper .flatpickr-weekday{float:none;width:100%;line-height:28px}.flatpickr-weekwrapper span.flatpickr-day,.flatpickr-weekwrapper span.flatpickr-day:hover{display:block;width:100%;max-width:none;color:rgba(57,57,57,0.3);background:transparent;cursor:default;border:none}.flatpickr-innerContainer{display:block;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-sizing:border-box;box-sizing:border-box;overflow:hidden}.flatpickr-rContainer{display:inline-block;padding:0;-webkit-box-sizing:border-box;box-sizing:border-box}.flatpickr-time{text-align:center;outline:0;display:block;height:0;line-height:40px;max-height:40px;-webkit-box-sizing:border-box;box-sizing:border-box;overflow:hidden;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.flatpickr-time:after{content:"";display:table;clear:both}.flatpickr-time .numInputWrapper{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;width:40%;height:40px;float:left}.flatpickr-time .numInputWrapper span.arrowUp:after{border-bottom-color:#393939}.flatpickr-time .numInputWrapper span.arrowDown:after{border-top-color:#393939}.flatpickr-time.hasSeconds .numInputWrapper{width:26%}.flatpickr-time.time24hr .numInputWrapper{width:49%}.flatpickr-time input{background:transparent;-webkit-box-shadow:none;box-shadow:none;border:0;border-radius:0;text-align:center;margin:0;padding:0;height:inherit;line-height:inherit;color:#393939;font-size:14px;position:relative;-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-appearance:textfield;-moz-appearance:textfield;appearance:textfield}.flatpickr-time input.flatpickr-hour{font-weight:bold}.flatpickr-time input.flatpickr-minute,.flatpickr-time input.flatpickr-second{font-weight:400}.flatpickr-time input:focus{outline:0;border:0}.flatpickr-time .flatpickr-time-separator,.flatpickr-time .flatpickr-am-pm{height:inherit;float:left;line-height:inherit;color:#393939;font-weight:bold;width:2%;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-align-self:center;-ms-flex-item-align:center;align-self:center}.flatpickr-time .flatpickr-am-pm{outline:0;width:18%;cursor:pointer;text-align:center;font-weight:400}.flatpickr-time input:hover,.flatpickr-time .flatpickr-am-pm:hover,.flatpickr-time input:focus,.flatpickr-time .flatpickr-am-pm:focus{background:#eee}.flatpickr-input[readonly]{cursor:pointer}@-webkit-keyframes fpFadeInDown{from{opacity:0;-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}to{opacity:1;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}@keyframes fpFadeInDown{from{opacity:0;-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}to{opacity:1;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}
\ No newline at end of file
diff --git a/website/js/vendor/flatpickr/flatpickr.min.js b/website/js/vendor/flatpickr/flatpickr.min.js
new file mode 100644 (file)
index 0000000..bded21e
--- /dev/null
@@ -0,0 +1,2 @@
+/* flatpickr v4.6.6,, @license MIT */
+!function(e,n){"object"==typeof exports&&"undefined"!=typeof module?module.exports=n():"function"==typeof define&&define.amd?define(n):(e=e||self).flatpickr=n()}(this,(function(){"use strict";var e=function(){return(e=Object.assign||function(e){for(var n,t=1,a=arguments.length;t<a;t++)for(var i in n=arguments[t])Object.prototype.hasOwnProperty.call(n,i)&&(e[i]=n[i]);return e}).apply(this,arguments)};function n(){for(var e=0,n=0,t=arguments.length;n<t;n++)e+=arguments[n].length;var a=Array(e),i=0;for(n=0;n<t;n++)for(var o=arguments[n],r=0,l=o.length;r<l;r++,i++)a[i]=o[r];return a}var t=["onChange","onClose","onDayCreate","onDestroy","onKeyDown","onMonthChange","onOpen","onParseConfig","onReady","onValueUpdate","onYearChange","onPreCalendarPosition"],a={_disable:[],_enable:[],allowInput:!1,allowInvalidPreload:!1,altFormat:"F j, Y",altInput:!1,altInputClass:"form-control input",animate:"object"==typeof window&&-1===window.navigator.userAgent.indexOf("MSIE"),ariaDateFormat:"F j, Y",autoFillDefaultTime:!0,clickOpens:!0,closeOnSelect:!0,conjunction:", ",dateFormat:"Y-m-d",defaultHour:12,defaultMinute:0,defaultSeconds:0,disable:[],disableMobile:!1,enable:[],enableSeconds:!1,enableTime:!1,errorHandler:function(e){return"undefined"!=typeof console&&console.warn(e)},getWeek:function(e){var n=new Date(e.getTime());n.setHours(0,0,0,0),n.setDate(n.getDate()+3-(n.getDay()+6)%7);var t=new Date(n.getFullYear(),0,4);return 1+Math.round(((n.getTime()-t.getTime())/864e5-3+(t.getDay()+6)%7)/7)},hourIncrement:1,ignoredFocusElements:[],inline:!1,locale:"default",minuteIncrement:5,mode:"single",monthSelectorType:"dropdown",nextArrow:"<svg version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 17 17'><g></g><path d='M13.207 8.472l-7.854 7.854-0.707-0.707 7.146-7.146-7.146-7.148 0.707-0.707 7.854 7.854z' /></svg>",noCalendar:!1,now:new Date,onChange:[],onClose:[],onDayCreate:[],onDestroy:[],onKeyDown:[],onMonthChange:[],onOpen:[],onParseConfig:[],onReady:[],onValueUpdate:[],onYearChange:[],onPreCalendarPosition:[],plugins:[],position:"auto",positionElement:void 0,prevArrow:"<svg version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 17 17'><g></g><path d='M5.207 8.471l7.146 7.147-0.707 0.707-7.853-7.854 7.854-7.853 0.707 0.707-7.147 7.146z' /></svg>",shorthandCurrentMonth:!1,showMonths:1,static:!1,time_24hr:!1,weekNumbers:!1,wrap:!1},i={weekdays:{shorthand:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],longhand:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"]},months:{shorthand:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],longhand:["January","February","March","April","May","June","July","August","September","October","November","December"]},daysInMonth:[31,28,31,30,31,30,31,31,30,31,30,31],firstDayOfWeek:0,ordinal:function(e){var n=e%100;if(n>3&&n<21)return"th";switch(n%10){case 1:return"st";case 2:return"nd";case 3:return"rd";default:return"th"}},rangeSeparator:" to ",weekAbbreviation:"Wk",scrollTitle:"Scroll to increment",toggleTitle:"Click to toggle",amPM:["AM","PM"],yearAriaLabel:"Year",monthAriaLabel:"Month",hourAriaLabel:"Hour",minuteAriaLabel:"Minute",time_24hr:!1},o=function(e,n){return void 0===n&&(n=2),("000"+e).slice(-1*n)},r=function(e){return!0===e?1:0};function l(e,n,t){var a;return void 0===t&&(t=!1),function(){var i=this,o=arguments;null!==a&&clearTimeout(a),a=window.setTimeout((function(){a=null,t||e.apply(i,o)}),n),t&&!a&&e.apply(i,o)}}var c=function(e){return e instanceof Array?e:[e]};function d(e,n,t){if(!0===t)return e.classList.add(n);e.classList.remove(n)}function s(e,n,t){var a=window.document.createElement(e);return n=n||"",t=t||"",a.className=n,void 0!==t&&(a.textContent=t),a}function u(e){for(;e.firstChild;)e.removeChild(e.firstChild)}function f(e,n){var t=s("div","numInputWrapper"),a=s("input","numInput "+e),i=s("span","arrowUp"),o=s("span","arrowDown");if(-1===navigator.userAgent.indexOf("MSIE 9.0")?a.type="number":(a.type="text",a.pattern="\\d*"),void 0!==n)for(var r in n)a.setAttribute(r,n[r]);return t.appendChild(a),t.appendChild(i),t.appendChild(o),t}function m(e){try{return"function"==typeof e.composedPath?e.composedPath()[0]:e.target}catch(n){return e.target}}var g=function(){},p=function(e,n,t){return t.months[n?"shorthand":"longhand"][e]},h={D:g,F:function(e,n,t){e.setMonth(t.months.longhand.indexOf(n))},G:function(e,n){e.setHours(parseFloat(n))},H:function(e,n){e.setHours(parseFloat(n))},J:function(e,n){e.setDate(parseFloat(n))},K:function(e,n,t){e.setHours(e.getHours()%12+12*r(new RegExp(t.amPM[1],"i").test(n)))},M:function(e,n,t){e.setMonth(t.months.shorthand.indexOf(n))},S:function(e,n){e.setSeconds(parseFloat(n))},U:function(e,n){return new Date(1e3*parseFloat(n))},W:function(e,n,t){var a=parseInt(n),i=new Date(e.getFullYear(),0,2+7*(a-1),0,0,0,0);return i.setDate(i.getDate()-i.getDay()+t.firstDayOfWeek),i},Y:function(e,n){e.setFullYear(parseFloat(n))},Z:function(e,n){return new Date(n)},d:function(e,n){e.setDate(parseFloat(n))},h:function(e,n){e.setHours(parseFloat(n))},i:function(e,n){e.setMinutes(parseFloat(n))},j:function(e,n){e.setDate(parseFloat(n))},l:g,m:function(e,n){e.setMonth(parseFloat(n)-1)},n:function(e,n){e.setMonth(parseFloat(n)-1)},s:function(e,n){e.setSeconds(parseFloat(n))},u:function(e,n){return new Date(parseFloat(n))},w:g,y:function(e,n){e.setFullYear(2e3+parseFloat(n))}},v={D:"(\\w+)",F:"(\\w+)",G:"(\\d\\d|\\d)",H:"(\\d\\d|\\d)",J:"(\\d\\d|\\d)\\w+",K:"",M:"(\\w+)",S:"(\\d\\d|\\d)",U:"(.+)",W:"(\\d\\d|\\d)",Y:"(\\d{4})",Z:"(.+)",d:"(\\d\\d|\\d)",h:"(\\d\\d|\\d)",i:"(\\d\\d|\\d)",j:"(\\d\\d|\\d)",l:"(\\w+)",m:"(\\d\\d|\\d)",n:"(\\d\\d|\\d)",s:"(\\d\\d|\\d)",u:"(.+)",w:"(\\d\\d|\\d)",y:"(\\d{2})"},D={Z:function(e){return e.toISOString()},D:function(e,n,t){return n.weekdays.shorthand[D.w(e,n,t)]},F:function(e,n,t){return p(D.n(e,n,t)-1,!1,n)},G:function(e,n,t){return o(D.h(e,n,t))},H:function(e){return o(e.getHours())},J:function(e,n){return void 0!==n.ordinal?e.getDate()+n.ordinal(e.getDate()):e.getDate()},K:function(e,n){return n.amPM[r(e.getHours()>11)]},M:function(e,n){return p(e.getMonth(),!0,n)},S:function(e){return o(e.getSeconds())},U:function(e){return e.getTime()/1e3},W:function(e,n,t){return t.getWeek(e)},Y:function(e){return o(e.getFullYear(),4)},d:function(e){return o(e.getDate())},h:function(e){return e.getHours()%12?e.getHours()%12:12},i:function(e){return o(e.getMinutes())},j:function(e){return e.getDate()},l:function(e,n){return n.weekdays.longhand[e.getDay()]},m:function(e){return o(e.getMonth()+1)},n:function(e){return e.getMonth()+1},s:function(e){return e.getSeconds()},u:function(e){return e.getTime()},w:function(e){return e.getDay()},y:function(e){return String(e.getFullYear()).substring(2)}},w=function(e){var n=e.config,t=void 0===n?a:n,o=e.l10n,r=void 0===o?i:o,l=e.isMobile,c=void 0!==l&&l;return function(e,n,a){var i=a||r;return void 0===t.formatDate||c?n.split("").map((function(n,a,o){return D[n]&&"\\"!==o[a-1]?D[n](e,i,t):"\\"!==n?n:""})).join(""):t.formatDate(e,n,i)}},b=function(e){var n=e.config,t=void 0===n?a:n,o=e.l10n,r=void 0===o?i:o;return function(e,n,i,o){if(0===e||e){var l,c=o||r,d=e;if(e instanceof Date)l=new Date(e.getTime());else if("string"!=typeof e&&void 0!==e.toFixed)l=new Date(e);else if("string"==typeof e){var s=n||(t||a).dateFormat,u=String(e).trim();if("today"===u)l=new Date,i=!0;else if(/Z$/.test(u)||/GMT$/.test(u))l=new Date(e);else if(t&&t.parseDate)l=t.parseDate(e,s);else{l=t&&t.noCalendar?new Date((new Date).setHours(0,0,0,0)):new Date((new Date).getFullYear(),0,1,0,0,0,0);for(var f=void 0,m=[],g=0,p=0,D="";g<s.length;g++){var w=s[g],b="\\"===w,C="\\"===s[g-1]||b;if(v[w]&&!C){D+=v[w];var M=new RegExp(D).exec(e);M&&(f=!0)&&m["Y"!==w?"push":"unshift"]({fn:h[w],val:M[++p]})}else b||(D+=".");m.forEach((function(e){var n=e.fn,t=e.val;return l=n(l,t,c)||l}))}l=f?l:void 0}}if(l instanceof Date&&!isNaN(l.getTime()))return!0===i&&l.setHours(0,0,0,0),l;t.errorHandler(new Error("Invalid date provided: "+d))}}};function C(e,n,t){return void 0===t&&(t=!0),!1!==t?new Date(e.getTime()).setHours(0,0,0,0)-new Date(n.getTime()).setHours(0,0,0,0):e.getTime()-n.getTime()}var M=864e5;"function"!=typeof Object.assign&&(Object.assign=function(e){for(var n=[],t=1;t<arguments.length;t++)n[t-1]=arguments[t];if(!e)throw TypeError("Cannot convert undefined or null to object");for(var a=function(n){n&&Object.keys(n).forEach((function(t){return e[t]=n[t]}))},i=0,o=n;i<o.length;i++){var r=o[i];a(r)}return e});function y(g,h){var D={config:e(e({},a),E.defaultConfig),l10n:i};function y(e){return e.bind(D)}function x(){var e=D.config;!1===e.weekNumbers&&1===e.showMonths||!0!==e.noCalendar&&window.requestAnimationFrame((function(){if(void 0!==D.calendarContainer&&(D.calendarContainer.style.visibility="hidden",D.calendarContainer.style.display="block"),void 0!==D.daysContainer){var n=(D.days.offsetWidth+1)*e.showMonths;D.daysContainer.style.width=n+"px",D.calendarContainer.style.width=n+(void 0!==D.weekWrapper?D.weekWrapper.offsetWidth:0)+"px",D.calendarContainer.style.removeProperty("visibility"),D.calendarContainer.style.removeProperty("display")}}))}function k(e){if(0===D.selectedDates.length){var n=void 0!==D.config.minDate?new Date(D.config.minDate.getTime()):new Date,t=S(),a=t.hours,i=t.minutes,l=t.seconds;n.setHours(a,i,l,0),D.setDate(n,!1)}void 0!==e&&"blur"!==e.type&&function(e){e.preventDefault();var n="keydown"===e.type,t=m(e),a=t;void 0!==D.amPM&&t===D.amPM&&(D.amPM.textContent=D.l10n.amPM[r(D.amPM.textContent===D.l10n.amPM[0])]);var i=parseFloat(a.getAttribute("min")),l=parseFloat(a.getAttribute("max")),c=parseFloat(a.getAttribute("step")),d=parseInt(a.value,10),s=e.delta||(n?38===e.which?1:-1:0),u=d+c*s;if(void 0!==a.value&&2===a.value.length){var f=a===D.hourElement,g=a===D.minuteElement;u<i?(u=l+u+r(!f)+(r(f)&&r(!D.amPM)),g&&Y(void 0,-1,D.hourElement)):u>l&&(u=a===D.hourElement?u-l-r(!D.amPM):i,g&&Y(void 0,1,D.hourElement)),D.amPM&&f&&(1===c?u+d===23:Math.abs(u-d)>c)&&(D.amPM.textContent=D.l10n.amPM[r(D.amPM.textContent===D.l10n.amPM[0])]),a.value=o(u)}}(e);var c=D._input.value;T(),we(),D._input.value!==c&&D._debouncedChange()}function T(){if(void 0!==D.hourElement&&void 0!==D.minuteElement){var e,n,t=(parseInt(D.hourElement.value.slice(-2),10)||0)%24,a=(parseInt(D.minuteElement.value,10)||0)%60,i=void 0!==D.secondElement?(parseInt(D.secondElement.value,10)||0)%60:0;void 0!==D.amPM&&(e=t,n=D.amPM.textContent,t=e%12+12*r(n===D.l10n.amPM[1]));var o=void 0!==D.config.minTime||D.config.minDate&&D.minDateHasTime&&D.latestSelectedDateObj&&0===C(D.latestSelectedDateObj,D.config.minDate,!0);if(void 0!==D.config.maxTime||D.config.maxDate&&D.maxDateHasTime&&D.latestSelectedDateObj&&0===C(D.latestSelectedDateObj,D.config.maxDate,!0)){var l=void 0!==D.config.maxTime?D.config.maxTime:D.config.maxDate;(t=Math.min(t,l.getHours()))===l.getHours()&&(a=Math.min(a,l.getMinutes())),a===l.getMinutes()&&(i=Math.min(i,l.getSeconds()))}if(o){var c=void 0!==D.config.minTime?D.config.minTime:D.config.minDate;(t=Math.max(t,c.getHours()))===c.getHours()&&(a=Math.max(a,c.getMinutes())),a===c.getMinutes()&&(i=Math.max(i,c.getSeconds()))}_(t,a,i)}}function I(e){var n=e||D.latestSelectedDateObj;n&&_(n.getHours(),n.getMinutes(),n.getSeconds())}function S(){var e=D.config.defaultHour,n=D.config.defaultMinute,t=D.config.defaultSeconds;if(void 0!==D.config.minDate){var a=D.config.minDate.getHours(),i=D.config.minDate.getMinutes();(e=Math.max(e,a))===a&&(n=Math.max(i,n)),e===a&&n===i&&(t=D.config.minDate.getSeconds())}if(void 0!==D.config.maxDate){var o=D.config.maxDate.getHours(),r=D.config.maxDate.getMinutes();(e=Math.min(e,o))===o&&(n=Math.min(r,n)),e===o&&n===r&&(t=D.config.maxDate.getSeconds())}return{hours:e,minutes:n,seconds:t}}function _(e,n,t){void 0!==D.latestSelectedDateObj&&D.latestSelectedDateObj.setHours(e%24,n,t||0,0),D.hourElement&&D.minuteElement&&!D.isMobile&&(D.hourElement.value=o(D.config.time_24hr?e:(12+e)%12+12*r(e%12==0)),D.minuteElement.value=o(n),void 0!==D.amPM&&(D.amPM.textContent=D.l10n.amPM[r(e>=12)]),void 0!==D.secondElement&&(D.secondElement.value=o(t)))}function O(e){var n=m(e),t=parseInt(n.value)+(e.delta||0);(t/1e3>1||"Enter"===e.key&&!/[^\d]/.test(t.toString()))&&Z(t)}function F(e,n,t,a){return n instanceof Array?n.forEach((function(n){return F(e,n,t,a)})):e instanceof Array?e.forEach((function(e){return F(e,n,t,a)})):(e.addEventListener(n,t,a),void D._handlers.push({element:e,event:n,handler:t,options:a}))}function N(){ge("onChange")}function A(e,n){var t=void 0!==e?D.parseDate(e):D.latestSelectedDateObj||(D.config.minDate&&D.config.minDate>D.now?D.config.minDate:D.config.maxDate&&D.config.maxDate<D.now?D.config.maxDate:D.now),a=D.currentYear,i=D.currentMonth;try{void 0!==t&&(D.currentYear=t.getFullYear(),D.currentMonth=t.getMonth())}catch(e){e.message="Invalid date supplied: "+t,D.config.errorHandler(e)}n&&D.currentYear!==a&&(ge("onYearChange"),J()),!n||D.currentYear===a&&D.currentMonth===i||ge("onMonthChange"),D.redraw()}function P(e){var n=m(e);~n.className.indexOf("arrow")&&Y(e,n.classList.contains("arrowUp")?1:-1)}function Y(e,n,t){var a=e&&m(e),i=t||a&&a.parentNode&&a.parentNode.firstChild,o=pe("increment");o.delta=n,i&&i.dispatchEvent(o)}function H(e,n,t,a){var i=Q(n,!0),o=s("span","flatpickr-day "+e,n.getDate().toString());return o.dateObj=n,o.$i=a,o.setAttribute("aria-label",D.formatDate(n,D.config.ariaDateFormat)),-1===e.indexOf("hidden")&&0===C(n,D.now)&&(D.todayDateElem=o,o.classList.add("today"),o.setAttribute("aria-current","date")),i?(o.tabIndex=-1,he(n)&&(o.classList.add("selected"),D.selectedDateElem=o,"range"===D.config.mode&&(d(o,"startRange",D.selectedDates[0]&&0===C(n,D.selectedDates[0],!0)),d(o,"endRange",D.selectedDates[1]&&0===C(n,D.selectedDates[1],!0)),"nextMonthDay"===e&&o.classList.add("inRange")))):o.classList.add("flatpickr-disabled"),"range"===D.config.mode&&function(e){return!("range"!==D.config.mode||D.selectedDates.length<2)&&(C(e,D.selectedDates[0])>=0&&C(e,D.selectedDates[1])<=0)}(n)&&!he(n)&&o.classList.add("inRange"),D.weekNumbers&&1===D.config.showMonths&&"prevMonthDay"!==e&&t%7==1&&D.weekNumbers.insertAdjacentHTML("beforeend","<span class='flatpickr-day'>"+D.config.getWeek(n)+"</span>"),ge("onDayCreate",o),o}function j(e){e.focus(),"range"===D.config.mode&&te(e)}function L(e){for(var n=e>0?0:D.config.showMonths-1,t=e>0?D.config.showMonths:-1,a=n;a!=t;a+=e)for(var i=D.daysContainer.children[a],o=e>0?0:i.children.length-1,r=e>0?i.children.length:-1,l=o;l!=r;l+=e){var c=i.children[l];if(-1===c.className.indexOf("hidden")&&Q(c.dateObj))return c}}function W(e,n){var t=X(document.activeElement||document.body),a=void 0!==e?e:t?document.activeElement:void 0!==D.selectedDateElem&&X(D.selectedDateElem)?D.selectedDateElem:void 0!==D.todayDateElem&&X(D.todayDateElem)?D.todayDateElem:L(n>0?1:-1);void 0===a?D._input.focus():t?function(e,n){for(var t=-1===e.className.indexOf("Month")?e.dateObj.getMonth():D.currentMonth,a=n>0?D.config.showMonths:-1,i=n>0?1:-1,o=t-D.currentMonth;o!=a;o+=i)for(var r=D.daysContainer.children[o],l=t-D.currentMonth===o?e.$i+n:n<0?r.children.length-1:0,c=r.children.length,d=l;d>=0&&d<c&&d!=(n>0?c:-1);d+=i){var s=r.children[d];if(-1===s.className.indexOf("hidden")&&Q(s.dateObj)&&Math.abs(e.$i-d)>=Math.abs(n))return j(s)}D.changeMonth(i),W(L(i),0)}(a,n):j(a)}function R(e,n){for(var t=(new Date(e,n,1).getDay()-D.l10n.firstDayOfWeek+7)%7,a=D.utils.getDaysInMonth((n-1+12)%12,e),i=D.utils.getDaysInMonth(n,e),o=window.document.createDocumentFragment(),r=D.config.showMonths>1,l=r?"prevMonthDay hidden":"prevMonthDay",c=r?"nextMonthDay hidden":"nextMonthDay",d=a+1-t,u=0;d<=a;d++,u++)o.appendChild(H(l,new Date(e,n-1,d),d,u));for(d=1;d<=i;d++,u++)o.appendChild(H("",new Date(e,n,d),d,u));for(var f=i+1;f<=42-t&&(1===D.config.showMonths||u%7!=0);f++,u++)o.appendChild(H(c,new Date(e,n+1,f%i),f,u));var m=s("div","dayContainer");return m.appendChild(o),m}function B(){if(void 0!==D.daysContainer){u(D.daysContainer),D.weekNumbers&&u(D.weekNumbers);for(var e=document.createDocumentFragment(),n=0;n<D.config.showMonths;n++){var t=new Date(D.currentYear,D.currentMonth,1);t.setMonth(D.currentMonth+n),e.appendChild(R(t.getFullYear(),t.getMonth()))}D.daysContainer.appendChild(e),D.days=D.daysContainer.firstChild,"range"===D.config.mode&&1===D.selectedDates.length&&te()}}function J(){if(!(D.config.showMonths>1||"dropdown"!==D.config.monthSelectorType)){var e=function(e){return!(void 0!==D.config.minDate&&D.currentYear===D.config.minDate.getFullYear()&&e<D.config.minDate.getMonth())&&!(void 0!==D.config.maxDate&&D.currentYear===D.config.maxDate.getFullYear()&&e>D.config.maxDate.getMonth())};D.monthsDropdownContainer.tabIndex=-1,D.monthsDropdownContainer.innerHTML="";for(var n=0;n<12;n++)if(e(n)){var t=s("option","flatpickr-monthDropdown-month");t.value=new Date(D.currentYear,n).getMonth().toString(),t.textContent=p(n,D.config.shorthandCurrentMonth,D.l10n),t.tabIndex=-1,D.currentMonth===n&&(t.selected=!0),D.monthsDropdownContainer.appendChild(t)}}}function K(){var e,n=s("div","flatpickr-month"),t=window.document.createDocumentFragment();D.config.showMonths>1||"static"===D.config.monthSelectorType?e=s("span","cur-month"):(D.monthsDropdownContainer=s("select","flatpickr-monthDropdown-months"),D.monthsDropdownContainer.setAttribute("aria-label",D.l10n.monthAriaLabel),F(D.monthsDropdownContainer,"change",(function(e){var n=m(e),t=parseInt(n.value,10);D.changeMonth(t-D.currentMonth),ge("onMonthChange")})),J(),e=D.monthsDropdownContainer);var a=f("cur-year",{tabindex:"-1"}),i=a.getElementsByTagName("input")[0];i.setAttribute("aria-label",D.l10n.yearAriaLabel),D.config.minDate&&i.setAttribute("min",D.config.minDate.getFullYear().toString()),D.config.maxDate&&(i.setAttribute("max",D.config.maxDate.getFullYear().toString()),i.disabled=!!D.config.minDate&&D.config.minDate.getFullYear()===D.config.maxDate.getFullYear());var o=s("div","flatpickr-current-month");return o.appendChild(e),o.appendChild(a),t.appendChild(o),n.appendChild(t),{container:n,yearElement:i,monthElement:e}}function U(){u(D.monthNav),D.monthNav.appendChild(D.prevMonthNav),D.config.showMonths&&(D.yearElements=[],D.monthElements=[]);for(var e=D.config.showMonths;e--;){var n=K();D.yearElements.push(n.yearElement),D.monthElements.push(n.monthElement),D.monthNav.appendChild(n.container)}D.monthNav.appendChild(D.nextMonthNav)}function q(){D.weekdayContainer?u(D.weekdayContainer):D.weekdayContainer=s("div","flatpickr-weekdays");for(var e=D.config.showMonths;e--;){var n=s("div","flatpickr-weekdaycontainer");D.weekdayContainer.appendChild(n)}return $(),D.weekdayContainer}function $(){if(D.weekdayContainer){var e=D.l10n.firstDayOfWeek,t=n(D.l10n.weekdays.shorthand);e>0&&e<t.length&&(t=n(t.splice(e,t.length),t.splice(0,e)));for(var a=D.config.showMonths;a--;)D.weekdayContainer.children[a].innerHTML="\n      <span class='flatpickr-weekday'>\n        "+t.join("</span><span class='flatpickr-weekday'>")+"\n      </span>\n      "}}function z(e,n){void 0===n&&(n=!0);var t=n?e:e-D.currentMonth;t<0&&!0===D._hidePrevMonthArrow||t>0&&!0===D._hideNextMonthArrow||(D.currentMonth+=t,(D.currentMonth<0||D.currentMonth>11)&&(D.currentYear+=D.currentMonth>11?1:-1,D.currentMonth=(D.currentMonth+12)%12,ge("onYearChange"),J()),B(),ge("onMonthChange"),ve())}function G(e){return!(!D.config.appendTo||!D.config.appendTo.contains(e))||D.calendarContainer.contains(e)}function V(e){if(D.isOpen&&!D.config.inline){var n=m(e),t=G(n),a=n===D.input||n===D.altInput||D.element.contains(n)||e.path&&e.path.indexOf&&(~e.path.indexOf(D.input)||~e.path.indexOf(D.altInput)),i="blur"===e.type?a&&e.relatedTarget&&!G(e.relatedTarget):!a&&!t&&!G(e.relatedTarget),o=!D.config.ignoredFocusElements.some((function(e){return e.contains(n)}));i&&o&&(void 0!==D.timeContainer&&void 0!==D.minuteElement&&void 0!==D.hourElement&&""!==D.input.value&&void 0!==D.input.value&&k(),D.close(),D.config&&"range"===D.config.mode&&1===D.selectedDates.length&&(D.clear(!1),D.redraw()))}}function Z(e){if(!(!e||D.config.minDate&&e<D.config.minDate.getFullYear()||D.config.maxDate&&e>D.config.maxDate.getFullYear())){var n=e,t=D.currentYear!==n;D.currentYear=n||D.currentYear,D.config.maxDate&&D.currentYear===D.config.maxDate.getFullYear()?D.currentMonth=Math.min(D.config.maxDate.getMonth(),D.currentMonth):D.config.minDate&&D.currentYear===D.config.minDate.getFullYear()&&(D.currentMonth=Math.max(D.config.minDate.getMonth(),D.currentMonth)),t&&(D.redraw(),ge("onYearChange"),J())}}function Q(e,n){void 0===n&&(n=!0);var t=D.parseDate(e,void 0,n);if(D.config.minDate&&t&&C(t,D.config.minDate,void 0!==n?n:!D.minDateHasTime)<0||D.config.maxDate&&t&&C(t,D.config.maxDate,void 0!==n?n:!D.maxDateHasTime)>0)return!1;if(0===D.config.enable.length&&0===D.config.disable.length)return!0;if(void 0===t)return!1;for(var a=D.config.enable.length>0,i=a?D.config.enable:D.config.disable,o=0,r=void 0;o<i.length;o++){if("function"==typeof(r=i[o])&&r(t))return a;if(r instanceof Date&&void 0!==t&&r.getTime()===t.getTime())return a;if("string"==typeof r&&void 0!==t){var l=D.parseDate(r,void 0,!0);return l&&l.getTime()===t.getTime()?a:!a}if("object"==typeof r&&void 0!==t&&r.from&&r.to&&t.getTime()>=r.from.getTime()&&t.getTime()<=r.to.getTime())return a}return!a}function X(e){return void 0!==D.daysContainer&&(-1===e.className.indexOf("hidden")&&-1===e.className.indexOf("flatpickr-disabled")&&D.daysContainer.contains(e))}function ee(e){!(e.target===D._input)||e.relatedTarget&&G(e.relatedTarget)||D.setDate(D._input.value,!0,e.target===D.altInput?D.config.altFormat:D.config.dateFormat)}function ne(e){var n=m(e),t=D.config.wrap?g.contains(n):n===D._input,a=D.config.allowInput,i=D.isOpen&&(!a||!t),o=D.config.inline&&t&&!a;if(13===e.keyCode&&t){if(a)return D.setDate(D._input.value,!0,n===D.altInput?D.config.altFormat:D.config.dateFormat),n.blur();D.open()}else if(G(n)||i||o){var r=!!D.timeContainer&&D.timeContainer.contains(n);switch(e.keyCode){case 13:r?(e.preventDefault(),k(),de()):se(e);break;case 27:e.preventDefault(),de();break;case 8:case 46:t&&!D.config.allowInput&&(e.preventDefault(),D.clear());break;case 37:case 39:if(r||t)D.hourElement&&D.hourElement.focus();else if(e.preventDefault(),void 0!==D.daysContainer&&(!1===a||document.activeElement&&X(document.activeElement))){var l=39===e.keyCode?1:-1;e.ctrlKey?(e.stopPropagation(),z(l),W(L(1),0)):W(void 0,l)}break;case 38:case 40:e.preventDefault();var c=40===e.keyCode?1:-1;D.daysContainer&&void 0!==n.$i||n===D.input||n===D.altInput?e.ctrlKey?(e.stopPropagation(),Z(D.currentYear-c),W(L(1),0)):r||W(void 0,7*c):n===D.currentYearElement?Z(D.currentYear-c):D.config.enableTime&&(!r&&D.hourElement&&D.hourElement.focus(),k(e),D._debouncedChange());break;case 9:if(r){var d=[D.hourElement,D.minuteElement,D.secondElement,D.amPM].concat(D.pluginElements).filter((function(e){return e})),s=d.indexOf(n);if(-1!==s){var u=d[s+(e.shiftKey?-1:1)];e.preventDefault(),(u||D._input).focus()}}else!D.config.noCalendar&&D.daysContainer&&D.daysContainer.contains(n)&&e.shiftKey&&(e.preventDefault(),D._input.focus())}}if(void 0!==D.amPM&&n===D.amPM)switch(e.key){case D.l10n.amPM[0].charAt(0):case D.l10n.amPM[0].charAt(0).toLowerCase():D.amPM.textContent=D.l10n.amPM[0],T(),we();break;case D.l10n.amPM[1].charAt(0):case D.l10n.amPM[1].charAt(0).toLowerCase():D.amPM.textContent=D.l10n.amPM[1],T(),we()}(t||G(n))&&ge("onKeyDown",e)}function te(e){if(1===D.selectedDates.length&&(!e||e.classList.contains("flatpickr-day")&&!e.classList.contains("flatpickr-disabled"))){for(var n=e?e.dateObj.getTime():D.days.firstElementChild.dateObj.getTime(),t=D.parseDate(D.selectedDates[0],void 0,!0).getTime(),a=Math.min(n,D.selectedDates[0].getTime()),i=Math.max(n,D.selectedDates[0].getTime()),o=!1,r=0,l=0,c=a;c<i;c+=M)Q(new Date(c),!0)||(o=o||c>a&&c<i,c<t&&(!r||c>r)?r=c:c>t&&(!l||c<l)&&(l=c));for(var d=0;d<D.config.showMonths;d++)for(var s=D.daysContainer.children[d],u=function(a,i){var c,d,u,f=s.children[a],m=f.dateObj.getTime(),g=r>0&&m<r||l>0&&m>l;return g?(f.classList.add("notAllowed"),["inRange","startRange","endRange"].forEach((function(e){f.classList.remove(e)})),"continue"):o&&!g?"continue":(["startRange","inRange","endRange","notAllowed"].forEach((function(e){f.classList.remove(e)})),void(void 0!==e&&(e.classList.add(n<=D.selectedDates[0].getTime()?"startRange":"endRange"),t<n&&m===t?f.classList.add("startRange"):t>n&&m===t&&f.classList.add("endRange"),m>=r&&(0===l||m<=l)&&(d=t,u=n,(c=m)>Math.min(d,u)&&c<Math.max(d,u))&&f.classList.add("inRange"))))},f=0,m=s.children.length;f<m;f++)u(f)}}function ae(){!D.isOpen||D.config.static||D.config.inline||le()}function ie(e){return function(n){var t=D.config["_"+e+"Date"]=D.parseDate(n,D.config.dateFormat),a=D.config["_"+("min"===e?"max":"min")+"Date"];void 0!==t&&(D["min"===e?"minDateHasTime":"maxDateHasTime"]=t.getHours()>0||t.getMinutes()>0||t.getSeconds()>0),D.selectedDates&&(D.selectedDates=D.selectedDates.filter((function(e){return Q(e)})),D.selectedDates.length||"min"!==e||I(t),we()),D.daysContainer&&(ce(),void 0!==t?D.currentYearElement[e]=t.getFullYear().toString():D.currentYearElement.removeAttribute(e),D.currentYearElement.disabled=!!a&&void 0!==t&&a.getFullYear()===t.getFullYear())}}function oe(){return D.config.wrap?g.querySelector("[data-input]"):g}function re(){"object"!=typeof D.config.locale&&void 0===E.l10ns[D.config.locale]&&D.config.errorHandler(new Error("flatpickr: invalid locale "+D.config.locale)),D.l10n=e(e({},E.l10ns.default),"object"==typeof D.config.locale?D.config.locale:"default"!==D.config.locale?E.l10ns[D.config.locale]:void 0),v.K="("+D.l10n.amPM[0]+"|"+D.l10n.amPM[1]+"|"+D.l10n.amPM[0].toLowerCase()+"|"+D.l10n.amPM[1].toLowerCase()+")",void 0===e(e({},h),JSON.parse(JSON.stringify(g.dataset||{}))).time_24hr&&void 0===E.defaultConfig.time_24hr&&(D.config.time_24hr=D.l10n.time_24hr),D.formatDate=w(D),D.parseDate=b({config:D.config,l10n:D.l10n})}function le(e){if(void 0!==D.calendarContainer){ge("onPreCalendarPosition");var n=e||D._positionElement,t=Array.prototype.reduce.call(D.calendarContainer.children,(function(e,n){return e+n.offsetHeight}),0),a=D.calendarContainer.offsetWidth,i=D.config.position.split(" "),o=i[0],r=i.length>1?i[1]:null,l=n.getBoundingClientRect(),c=window.innerHeight-l.bottom,s="above"===o||"below"!==o&&c<t&&l.top>t,u=window.pageYOffset+l.top+(s?-t-2:n.offsetHeight+2);if(d(D.calendarContainer,"arrowTop",!s),d(D.calendarContainer,"arrowBottom",s),!D.config.inline){var f=window.pageXOffset+l.left,m=!1,g=!1;"center"===r?(f-=(a-l.width)/2,m=!0):"right"===r&&(f-=a-l.width,g=!0),d(D.calendarContainer,"arrowLeft",!m&&!g),d(D.calendarContainer,"arrowCenter",m),d(D.calendarContainer,"arrowRight",g);var p=window.document.body.offsetWidth-(window.pageXOffset+l.right),h=f+a>window.document.body.offsetWidth,v=p+a>window.document.body.offsetWidth;if(d(D.calendarContainer,"rightMost",h),!D.config.static)if(D.calendarContainer.style.top=u+"px",h)if(v){var w=function(){for(var e=null,n=0;n<document.styleSheets.length;n++){var t=document.styleSheets[n];try{t.cssRules}catch(e){continue}e=t;break}return null!=e?e:(a=document.createElement("style"),document.head.appendChild(a),a.sheet);var a}();if(void 0===w)return;var b=window.document.body.offsetWidth,C=Math.max(0,b/2-a/2),M=w.cssRules.length,y="{left:"+l.left+"px;right:auto;}";d(D.calendarContainer,"rightMost",!1),d(D.calendarContainer,"centerMost",!0),w.insertRule(".flatpickr-calendar.centerMost:before,.flatpickr-calendar.centerMost:after"+y,M),D.calendarContainer.style.left=C+"px",D.calendarContainer.style.right="auto"}else D.calendarContainer.style.left="auto",D.calendarContainer.style.right=p+"px";else D.calendarContainer.style.left=f+"px",D.calendarContainer.style.right="auto"}}}function ce(){D.config.noCalendar||D.isMobile||(J(),ve(),B())}function de(){D._input.focus(),-1!==window.navigator.userAgent.indexOf("MSIE")||void 0!==navigator.msMaxTouchPoints?setTimeout(D.close,0):D.close()}function se(e){e.preventDefault(),e.stopPropagation();var n=function e(n,t){return t(n)?n:n.parentNode?e(n.parentNode,t):void 0}(m(e),(function(e){return e.classList&&e.classList.contains("flatpickr-day")&&!e.classList.contains("flatpickr-disabled")&&!e.classList.contains("notAllowed")}));if(void 0!==n){var t=n,a=D.latestSelectedDateObj=new Date(t.dateObj.getTime()),i=(a.getMonth()<D.currentMonth||a.getMonth()>D.currentMonth+D.config.showMonths-1)&&"range"!==D.config.mode;if(D.selectedDateElem=t,"single"===D.config.mode)D.selectedDates=[a];else if("multiple"===D.config.mode){var o=he(a);o?D.selectedDates.splice(parseInt(o),1):D.selectedDates.push(a)}else"range"===D.config.mode&&(2===D.selectedDates.length&&D.clear(!1,!1),D.latestSelectedDateObj=a,D.selectedDates.push(a),0!==C(a,D.selectedDates[0],!0)&&D.selectedDates.sort((function(e,n){return e.getTime()-n.getTime()})));if(T(),i){var r=D.currentYear!==a.getFullYear();D.currentYear=a.getFullYear(),D.currentMonth=a.getMonth(),r&&(ge("onYearChange"),J()),ge("onMonthChange")}if(ve(),B(),we(),i||"range"===D.config.mode||1!==D.config.showMonths?void 0!==D.selectedDateElem&&void 0===D.hourElement&&D.selectedDateElem&&D.selectedDateElem.focus():j(t),void 0!==D.hourElement&&void 0!==D.hourElement&&D.hourElement.focus(),D.config.closeOnSelect){var l="single"===D.config.mode&&!D.config.enableTime,c="range"===D.config.mode&&2===D.selectedDates.length&&!D.config.enableTime;(l||c)&&de()}N()}}D.parseDate=b({config:D.config,l10n:D.l10n}),D._handlers=[],D.pluginElements=[],D.loadedPlugins=[],D._bind=F,D._setHoursFromDate=I,D._positionCalendar=le,D.changeMonth=z,D.changeYear=Z,D.clear=function(e,n){void 0===e&&(e=!0);void 0===n&&(n=!0);D.input.value="",void 0!==D.altInput&&(D.altInput.value="");void 0!==D.mobileInput&&(D.mobileInput.value="");D.selectedDates=[],D.latestSelectedDateObj=void 0,!0===n&&(D.currentYear=D._initialDate.getFullYear(),D.currentMonth=D._initialDate.getMonth());if(!0===D.config.enableTime){var t=S(),a=t.hours,i=t.minutes,o=t.seconds;_(a,i,o)}D.redraw(),e&&ge("onChange")},D.close=function(){D.isOpen=!1,D.isMobile||(void 0!==D.calendarContainer&&D.calendarContainer.classList.remove("open"),void 0!==D._input&&D._input.classList.remove("active"));ge("onClose")},D._createElement=s,D.destroy=function(){void 0!==D.config&&ge("onDestroy");for(var e=D._handlers.length;e--;){var n=D._handlers[e];n.element.removeEventListener(n.event,n.handler,n.options)}if(D._handlers=[],D.mobileInput)D.mobileInput.parentNode&&D.mobileInput.parentNode.removeChild(D.mobileInput),D.mobileInput=void 0;else if(D.calendarContainer&&D.calendarContainer.parentNode)if(D.config.static&&D.calendarContainer.parentNode){var t=D.calendarContainer.parentNode;if(t.lastChild&&t.removeChild(t.lastChild),t.parentNode){for(;t.firstChild;)t.parentNode.insertBefore(t.firstChild,t);t.parentNode.removeChild(t)}}else D.calendarContainer.parentNode.removeChild(D.calendarContainer);D.altInput&&(D.input.type="text",D.altInput.parentNode&&D.altInput.parentNode.removeChild(D.altInput),delete D.altInput);D.input&&(D.input.type=D.input._type,D.input.classList.remove("flatpickr-input"),D.input.removeAttribute("readonly"));["_showTimeInput","latestSelectedDateObj","_hideNextMonthArrow","_hidePrevMonthArrow","__hideNextMonthArrow","__hidePrevMonthArrow","isMobile","isOpen","selectedDateElem","minDateHasTime","maxDateHasTime","days","daysContainer","_input","_positionElement","innerContainer","rContainer","monthNav","todayDateElem","calendarContainer","weekdayContainer","prevMonthNav","nextMonthNav","monthsDropdownContainer","currentMonthElement","currentYearElement","navigationCurrentMonth","selectedDateElem","config"].forEach((function(e){try{delete D[e]}catch(e){}}))},D.isEnabled=Q,D.jumpToDate=A,D.open=function(e,n){void 0===n&&(n=D._positionElement);if(!0===D.isMobile){if(e){e.preventDefault();var t=m(e);t&&t.blur()}return void 0!==D.mobileInput&&(D.mobileInput.focus(),D.mobileInput.click()),void ge("onOpen")}if(D._input.disabled||D.config.inline)return;var a=D.isOpen;D.isOpen=!0,a||(D.calendarContainer.classList.add("open"),D._input.classList.add("active"),ge("onOpen"),le(n));!0===D.config.enableTime&&!0===D.config.noCalendar&&(!1!==D.config.allowInput||void 0!==e&&D.timeContainer.contains(e.relatedTarget)||setTimeout((function(){return D.hourElement.select()}),50))},D.redraw=ce,D.set=function(e,n){if(null!==e&&"object"==typeof e)for(var a in Object.assign(D.config,e),e)void 0!==ue[a]&&ue[a].forEach((function(e){return e()}));else D.config[e]=n,void 0!==ue[e]?ue[e].forEach((function(e){return e()})):t.indexOf(e)>-1&&(D.config[e]=c(n));D.redraw(),we(!0)},D.setDate=function(e,n,t){void 0===n&&(n=!1);void 0===t&&(t=D.config.dateFormat);if(0!==e&&!e||e instanceof Array&&0===e.length)return D.clear(n);fe(e,t),D.latestSelectedDateObj=D.selectedDates[D.selectedDates.length-1],D.redraw(),A(void 0,n),I(),0===D.selectedDates.length&&D.clear(!1);we(n),n&&ge("onChange")},D.toggle=function(e){if(!0===D.isOpen)return D.close();D.open(e)};var ue={locale:[re,$],showMonths:[U,x,q],minDate:[A],maxDate:[A]};function fe(e,n){var t=[];if(e instanceof Array)t=e.map((function(e){return D.parseDate(e,n)}));else if(e instanceof Date||"number"==typeof e)t=[D.parseDate(e,n)];else if("string"==typeof e)switch(D.config.mode){case"single":case"time":t=[D.parseDate(e,n)];break;case"multiple":t=e.split(D.config.conjunction).map((function(e){return D.parseDate(e,n)}));break;case"range":t=e.split(D.l10n.rangeSeparator).map((function(e){return D.parseDate(e,n)}))}else D.config.errorHandler(new Error("Invalid date supplied: "+JSON.stringify(e)));D.selectedDates=D.config.allowInvalidPreload?t:t.filter((function(e){return e instanceof Date&&Q(e,!1)})),"range"===D.config.mode&&D.selectedDates.sort((function(e,n){return e.getTime()-n.getTime()}))}function me(e){return e.slice().map((function(e){return"string"==typeof e||"number"==typeof e||e instanceof Date?D.parseDate(e,void 0,!0):e&&"object"==typeof e&&e.from&&e.to?{from:D.parseDate(e.from,void 0),to:D.parseDate(e.to,void 0)}:e})).filter((function(e){return e}))}function ge(e,n){if(void 0!==D.config){var t=D.config[e];if(void 0!==t&&t.length>0)for(var a=0;t[a]&&a<t.length;a++)t[a](D.selectedDates,D.input.value,D,n);"onChange"===e&&(D.input.dispatchEvent(pe("change")),D.input.dispatchEvent(pe("input")))}}function pe(e){var n=document.createEvent("Event");return n.initEvent(e,!0,!0),n}function he(e){for(var n=0;n<D.selectedDates.length;n++)if(0===C(D.selectedDates[n],e))return""+n;return!1}function ve(){D.config.noCalendar||D.isMobile||!D.monthNav||(D.yearElements.forEach((function(e,n){var t=new Date(D.currentYear,D.currentMonth,1);t.setMonth(D.currentMonth+n),D.config.showMonths>1||"static"===D.config.monthSelectorType?D.monthElements[n].textContent=p(t.getMonth(),D.config.shorthandCurrentMonth,D.l10n)+" ":D.monthsDropdownContainer.value=t.getMonth().toString(),e.value=t.getFullYear().toString()})),D._hidePrevMonthArrow=void 0!==D.config.minDate&&(D.currentYear===D.config.minDate.getFullYear()?D.currentMonth<=D.config.minDate.getMonth():D.currentYear<D.config.minDate.getFullYear()),D._hideNextMonthArrow=void 0!==D.config.maxDate&&(D.currentYear===D.config.maxDate.getFullYear()?D.currentMonth+1>D.config.maxDate.getMonth():D.currentYear>D.config.maxDate.getFullYear()))}function De(e){return D.selectedDates.map((function(n){return D.formatDate(n,e)})).filter((function(e,n,t){return"range"!==D.config.mode||D.config.enableTime||t.indexOf(e)===n})).join("range"!==D.config.mode?D.config.conjunction:D.l10n.rangeSeparator)}function we(e){void 0===e&&(e=!0),void 0!==D.mobileInput&&D.mobileFormatStr&&(D.mobileInput.value=void 0!==D.latestSelectedDateObj?D.formatDate(D.latestSelectedDateObj,D.mobileFormatStr):""),D.input.value=De(D.config.dateFormat),void 0!==D.altInput&&(D.altInput.value=De(D.config.altFormat)),!1!==e&&ge("onValueUpdate")}function be(e){var n=m(e),t=D.prevMonthNav.contains(n),a=D.nextMonthNav.contains(n);t||a?z(t?-1:1):D.yearElements.indexOf(n)>=0?n.select():n.classList.contains("arrowUp")?D.changeYear(D.currentYear+1):n.classList.contains("arrowDown")&&D.changeYear(D.currentYear-1)}return function(){D.element=D.input=g,D.isOpen=!1,function(){var n=["wrap","weekNumbers","allowInput","allowInvalidPreload","clickOpens","time_24hr","enableTime","noCalendar","altInput","shorthandCurrentMonth","inline","static","enableSeconds","disableMobile"],i=e(e({},JSON.parse(JSON.stringify(g.dataset||{}))),h),o={};D.config.parseDate=i.parseDate,D.config.formatDate=i.formatDate,Object.defineProperty(D.config,"enable",{get:function(){return D.config._enable},set:function(e){D.config._enable=me(e)}}),Object.defineProperty(D.config,"disable",{get:function(){return D.config._disable},set:function(e){D.config._disable=me(e)}});var r="time"===i.mode;if(!i.dateFormat&&(i.enableTime||r)){var l=E.defaultConfig.dateFormat||a.dateFormat;o.dateFormat=i.noCalendar||r?"H:i"+(i.enableSeconds?":S":""):l+" H:i"+(i.enableSeconds?":S":"")}if(i.altInput&&(i.enableTime||r)&&!i.altFormat){var d=E.defaultConfig.altFormat||a.altFormat;o.altFormat=i.noCalendar||r?"h:i"+(i.enableSeconds?":S K":" K"):d+" h:i"+(i.enableSeconds?":S":"")+" K"}Object.defineProperty(D.config,"minDate",{get:function(){return D.config._minDate},set:ie("min")}),Object.defineProperty(D.config,"maxDate",{get:function(){return D.config._maxDate},set:ie("max")});var s=function(e){return function(n){D.config["min"===e?"_minTime":"_maxTime"]=D.parseDate(n,"H:i:S")}};Object.defineProperty(D.config,"minTime",{get:function(){return D.config._minTime},set:s("min")}),Object.defineProperty(D.config,"maxTime",{get:function(){return D.config._maxTime},set:s("max")}),"time"===i.mode&&(D.config.noCalendar=!0,D.config.enableTime=!0);Object.assign(D.config,o,i);for(var u=0;u<n.length;u++)D.config[n[u]]=!0===D.config[n[u]]||"true"===D.config[n[u]];t.filter((function(e){return void 0!==D.config[e]})).forEach((function(e){D.config[e]=c(D.config[e]||[]).map(y)})),D.isMobile=!D.config.disableMobile&&!D.config.inline&&"single"===D.config.mode&&!D.config.disable.length&&!D.config.enable.length&&!D.config.weekNumbers&&/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);for(u=0;u<D.config.plugins.length;u++){var f=D.config.plugins[u](D)||{};for(var m in f)t.indexOf(m)>-1?D.config[m]=c(f[m]).map(y).concat(D.config[m]):void 0===i[m]&&(D.config[m]=f[m])}i.altInputClass||(D.config.altInputClass=oe().className+" "+D.config.altInputClass);ge("onParseConfig")}(),re(),function(){if(D.input=oe(),!D.input)return void D.config.errorHandler(new Error("Invalid input element specified"));D.input._type=D.input.type,D.input.type="text",D.input.classList.add("flatpickr-input"),D._input=D.input,D.config.altInput&&(D.altInput=s(D.input.nodeName,D.config.altInputClass),D._input=D.altInput,D.altInput.placeholder=D.input.placeholder,D.altInput.disabled=D.input.disabled,D.altInput.required=D.input.required,D.altInput.tabIndex=D.input.tabIndex,D.altInput.type="text",D.input.setAttribute("type","hidden"),!D.config.static&&D.input.parentNode&&D.input.parentNode.insertBefore(D.altInput,D.input.nextSibling));D.config.allowInput||D._input.setAttribute("readonly","readonly");D._positionElement=D.config.positionElement||D._input}(),function(){D.selectedDates=[],D.now=D.parseDate(D.config.now)||new Date;var e=D.config.defaultDate||("INPUT"!==D.input.nodeName&&"TEXTAREA"!==D.input.nodeName||!D.input.placeholder||D.input.value!==D.input.placeholder?D.input.value:null);e&&fe(e,D.config.dateFormat);D._initialDate=D.selectedDates.length>0?D.selectedDates[0]:D.config.minDate&&D.config.minDate.getTime()>D.now.getTime()?D.config.minDate:D.config.maxDate&&D.config.maxDate.getTime()<D.now.getTime()?D.config.maxDate:D.now,D.currentYear=D._initialDate.getFullYear(),D.currentMonth=D._initialDate.getMonth(),D.selectedDates.length>0&&(D.latestSelectedDateObj=D.selectedDates[0]);void 0!==D.config.minTime&&(D.config.minTime=D.parseDate(D.config.minTime,"H:i"));void 0!==D.config.maxTime&&(D.config.maxTime=D.parseDate(D.config.maxTime,"H:i"));D.minDateHasTime=!!D.config.minDate&&(D.config.minDate.getHours()>0||D.config.minDate.getMinutes()>0||D.config.minDate.getSeconds()>0),D.maxDateHasTime=!!D.config.maxDate&&(D.config.maxDate.getHours()>0||D.config.maxDate.getMinutes()>0||D.config.maxDate.getSeconds()>0)}(),D.utils={getDaysInMonth:function(e,n){return void 0===e&&(e=D.currentMonth),void 0===n&&(n=D.currentYear),1===e&&(n%4==0&&n%100!=0||n%400==0)?29:D.l10n.daysInMonth[e]}},D.isMobile||function(){var e=window.document.createDocumentFragment();if(D.calendarContainer=s("div","flatpickr-calendar"),D.calendarContainer.tabIndex=-1,!D.config.noCalendar){if(e.appendChild((D.monthNav=s("div","flatpickr-months"),D.yearElements=[],D.monthElements=[],D.prevMonthNav=s("span","flatpickr-prev-month"),D.prevMonthNav.innerHTML=D.config.prevArrow,D.nextMonthNav=s("span","flatpickr-next-month"),D.nextMonthNav.innerHTML=D.config.nextArrow,U(),Object.defineProperty(D,"_hidePrevMonthArrow",{get:function(){return D.__hidePrevMonthArrow},set:function(e){D.__hidePrevMonthArrow!==e&&(d(D.prevMonthNav,"flatpickr-disabled",e),D.__hidePrevMonthArrow=e)}}),Object.defineProperty(D,"_hideNextMonthArrow",{get:function(){return D.__hideNextMonthArrow},set:function(e){D.__hideNextMonthArrow!==e&&(d(D.nextMonthNav,"flatpickr-disabled",e),D.__hideNextMonthArrow=e)}}),D.currentYearElement=D.yearElements[0],ve(),D.monthNav)),D.innerContainer=s("div","flatpickr-innerContainer"),D.config.weekNumbers){var n=function(){D.calendarContainer.classList.add("hasWeeks");var e=s("div","flatpickr-weekwrapper");e.appendChild(s("span","flatpickr-weekday",D.l10n.weekAbbreviation));var n=s("div","flatpickr-weeks");return e.appendChild(n),{weekWrapper:e,weekNumbers:n}}(),t=n.weekWrapper,a=n.weekNumbers;D.innerContainer.appendChild(t),D.weekNumbers=a,D.weekWrapper=t}D.rContainer=s("div","flatpickr-rContainer"),D.rContainer.appendChild(q()),D.daysContainer||(D.daysContainer=s("div","flatpickr-days"),D.daysContainer.tabIndex=-1),B(),D.rContainer.appendChild(D.daysContainer),D.innerContainer.appendChild(D.rContainer),e.appendChild(D.innerContainer)}D.config.enableTime&&e.appendChild(function(){D.calendarContainer.classList.add("hasTime"),D.config.noCalendar&&D.calendarContainer.classList.add("noCalendar");D.timeContainer=s("div","flatpickr-time"),D.timeContainer.tabIndex=-1;var e=s("span","flatpickr-time-separator",":"),n=f("flatpickr-hour",{"aria-label":D.l10n.hourAriaLabel});D.hourElement=n.getElementsByTagName("input")[0];var t=f("flatpickr-minute",{"aria-label":D.l10n.minuteAriaLabel});D.minuteElement=t.getElementsByTagName("input")[0],D.hourElement.tabIndex=D.minuteElement.tabIndex=-1,D.hourElement.value=o(D.latestSelectedDateObj?D.latestSelectedDateObj.getHours():D.config.time_24hr?D.config.defaultHour:function(e){switch(e%24){case 0:case 12:return 12;default:return e%12}}(D.config.defaultHour)),D.minuteElement.value=o(D.latestSelectedDateObj?D.latestSelectedDateObj.getMinutes():D.config.defaultMinute),D.hourElement.setAttribute("step",D.config.hourIncrement.toString()),D.minuteElement.setAttribute("step",D.config.minuteIncrement.toString()),D.hourElement.setAttribute("min",D.config.time_24hr?"0":"1"),D.hourElement.setAttribute("max",D.config.time_24hr?"23":"12"),D.minuteElement.setAttribute("min","0"),D.minuteElement.setAttribute("max","59"),D.timeContainer.appendChild(n),D.timeContainer.appendChild(e),D.timeContainer.appendChild(t),D.config.time_24hr&&D.timeContainer.classList.add("time24hr");if(D.config.enableSeconds){D.timeContainer.classList.add("hasSeconds");var a=f("flatpickr-second");D.secondElement=a.getElementsByTagName("input")[0],D.secondElement.value=o(D.latestSelectedDateObj?D.latestSelectedDateObj.getSeconds():D.config.defaultSeconds),D.secondElement.setAttribute("step",D.minuteElement.getAttribute("step")),D.secondElement.setAttribute("min","0"),D.secondElement.setAttribute("max","59"),D.timeContainer.appendChild(s("span","flatpickr-time-separator",":")),D.timeContainer.appendChild(a)}D.config.time_24hr||(D.amPM=s("span","flatpickr-am-pm",D.l10n.amPM[r((D.latestSelectedDateObj?D.hourElement.value:D.config.defaultHour)>11)]),D.amPM.title=D.l10n.toggleTitle,D.amPM.tabIndex=-1,D.timeContainer.appendChild(D.amPM));return D.timeContainer}());d(D.calendarContainer,"rangeMode","range"===D.config.mode),d(D.calendarContainer,"animate",!0===D.config.animate),d(D.calendarContainer,"multiMonth",D.config.showMonths>1),D.calendarContainer.appendChild(e);var i=void 0!==D.config.appendTo&&void 0!==D.config.appendTo.nodeType;if((D.config.inline||D.config.static)&&(D.calendarContainer.classList.add(D.config.inline?"inline":"static"),D.config.inline&&(!i&&D.element.parentNode?D.element.parentNode.insertBefore(D.calendarContainer,D._input.nextSibling):void 0!==D.config.appendTo&&D.config.appendTo.appendChild(D.calendarContainer)),D.config.static)){var l=s("div","flatpickr-wrapper");D.element.parentNode&&D.element.parentNode.insertBefore(l,D.element),l.appendChild(D.element),D.altInput&&l.appendChild(D.altInput),l.appendChild(D.calendarContainer)}D.config.static||D.config.inline||(void 0!==D.config.appendTo?D.config.appendTo:window.document.body).appendChild(D.calendarContainer)}(),function(){D.config.wrap&&["open","close","toggle","clear"].forEach((function(e){Array.prototype.forEach.call(D.element.querySelectorAll("[data-"+e+"]"),(function(n){return F(n,"click",D[e])}))}));if(D.isMobile)return void function(){var e=D.config.enableTime?D.config.noCalendar?"time":"datetime-local":"date";D.mobileInput=s("input",D.input.className+" flatpickr-mobile"),D.mobileInput.tabIndex=1,D.mobileInput.type=e,D.mobileInput.disabled=D.input.disabled,D.mobileInput.required=D.input.required,D.mobileInput.placeholder=D.input.placeholder,D.mobileFormatStr="datetime-local"===e?"Y-m-d\\TH:i:S":"date"===e?"Y-m-d":"H:i:S",D.selectedDates.length>0&&(D.mobileInput.defaultValue=D.mobileInput.value=D.formatDate(D.selectedDates[0],D.mobileFormatStr));D.config.minDate&&(D.mobileInput.min=D.formatDate(D.config.minDate,"Y-m-d"));D.config.maxDate&&(D.mobileInput.max=D.formatDate(D.config.maxDate,"Y-m-d"));D.input.getAttribute("step")&&(D.mobileInput.step=String(D.input.getAttribute("step")));D.input.type="hidden",void 0!==D.altInput&&(D.altInput.type="hidden");try{D.input.parentNode&&D.input.parentNode.insertBefore(D.mobileInput,D.input.nextSibling)}catch(e){}F(D.mobileInput,"change",(function(e){D.setDate(m(e).value,!1,D.mobileFormatStr),ge("onChange"),ge("onClose")}))}();var e=l(ae,50);D._debouncedChange=l(N,300),D.daysContainer&&!/iPhone|iPad|iPod/i.test(navigator.userAgent)&&F(D.daysContainer,"mouseover",(function(e){"range"===D.config.mode&&te(m(e))}));F(window.document.body,"keydown",ne),D.config.inline||D.config.static||F(window,"resize",e);void 0!==window.ontouchstart?F(window.document,"touchstart",V):F(window.document,"click",V);F(window.document,"focus",V,{capture:!0}),!0===D.config.clickOpens&&(F(D._input,"focus",D.open),F(D._input,"click",D.open));void 0!==D.daysContainer&&(F(D.monthNav,"click",be),F(D.monthNav,["keyup","increment"],O),F(D.daysContainer,"click",se));if(void 0!==D.timeContainer&&void 0!==D.minuteElement&&void 0!==D.hourElement){F(D.timeContainer,["increment"],k),F(D.timeContainer,"blur",k,{capture:!0}),F(D.timeContainer,"click",P),F([D.hourElement,D.minuteElement],["focus","click"],(function(e){return m(e).select()})),void 0!==D.secondElement&&F(D.secondElement,"focus",(function(){return D.secondElement&&D.secondElement.select()})),void 0!==D.amPM&&F(D.amPM,"click",(function(e){k(e),N()}))}D.config.allowInput&&F(D._input,"blur",ee)}(),(D.selectedDates.length||D.config.noCalendar)&&(D.config.enableTime&&I(D.config.noCalendar?D.latestSelectedDateObj||D.config.minDate:void 0),we(!1)),x();var n=/^((?!chrome|android).)*safari/i.test(navigator.userAgent);!D.isMobile&&n&&le(),ge("onReady")}(),D}function x(e,n){for(var t=Array.prototype.slice.call(e).filter((function(e){return e instanceof HTMLElement})),a=[],i=0;i<t.length;i++){var o=t[i];try{if(null!==o.getAttribute("data-fp-omit"))continue;void 0!==o._flatpickr&&(o._flatpickr.destroy(),o._flatpickr=void 0),o._flatpickr=y(o,n||{}),a.push(o._flatpickr)}catch(e){console.error(e)}}return 1===a.length?a[0]:a}"undefined"!=typeof HTMLElement&&"undefined"!=typeof HTMLCollection&&"undefined"!=typeof NodeList&&(HTMLCollection.prototype.flatpickr=NodeList.prototype.flatpickr=function(e){return x(this,e)},HTMLElement.prototype.flatpickr=function(e){return x([this],e)});var E=function(e,n){return"string"==typeof e?x(window.document.querySelectorAll(e),n):e instanceof Node?x([e],n):x(e,n)};return E.defaultConfig={},E.l10ns={en:e({},i),default:e({},i)},E.localize=function(n){E.l10ns.default=e(e({},E.l10ns.default),n)},E.setDefaults=function(n){E.defaultConfig=e(e({},E.defaultConfig),n)},E.parseDate=b({}),E.formatDate=w({}),E.compareDates=C,"undefined"!=typeof jQuery&&void 0!==jQuery.fn&&(jQuery.fn.flatpickr=function(e){return x(this,e)}),Date.prototype.fp_incr=function(e){return new Date(this.getFullYear(),this.getMonth(),this.getDate()+("string"==typeof e?parseInt(e,10):e))},"undefined"!=typeof window&&(window.flatpickr=E),E}));
\ No newline at end of file
diff --git a/website/js/vendor/flatpickr/ie.css b/website/js/vendor/flatpickr/ie.css
new file mode 100644 (file)
index 0000000..30d7f76
--- /dev/null
@@ -0,0 +1,13 @@
+span.flatpickr-weekday {
+  display: inline-block;
+  width: 14.2857143%;
+}
+span.flatpickr-day {
+  width: 14.2857143%;
+  margin: 0 2.491071428571428px;
+}
+@media screen and (min-width: 0\0) {
+  div.flatpickr-current-month {
+    padding-top: 0px !important;
+  }
+}
diff --git a/website/js/vendor/flatpickr/index.d.ts b/website/js/vendor/flatpickr/index.d.ts
new file mode 100644 (file)
index 0000000..a3893d5
--- /dev/null
@@ -0,0 +1,4 @@
+import { FlatpickrFn } from "./types/instance";
+import "./utils/polyfills";
+declare var flatpickr: FlatpickrFn;
+export default flatpickr;
diff --git a/website/js/vendor/flatpickr/l10n/de.d.ts b/website/js/vendor/flatpickr/l10n/de.d.ts
new file mode 100644 (file)
index 0000000..a0b30b4
--- /dev/null
@@ -0,0 +1,69 @@
+import { CustomLocale } from "../types/locale";
+export declare const German: CustomLocale;
+declare const _default: {
+    default?: CustomLocale | undefined;
+    hr?: CustomLocale | undefined;
+    th?: CustomLocale | undefined;
+    tr?: CustomLocale | undefined;
+    ar?: CustomLocale | undefined;
+    at?: CustomLocale | undefined;
+    az?: CustomLocale | undefined;
+    be?: CustomLocale | undefined;
+    bg?: CustomLocale | undefined;
+    bn?: CustomLocale | undefined;
+    bs?: CustomLocale | undefined;
+    ca?: CustomLocale | undefined;
+    cat?: CustomLocale | undefined;
+    cs?: CustomLocale | undefined;
+    cy?: CustomLocale | undefined;
+    da?: CustomLocale | undefined;
+    de?: CustomLocale | undefined;
+    en?: CustomLocale | undefined;
+    eo?: CustomLocale | undefined;
+    es?: CustomLocale | undefined;
+    et?: CustomLocale | undefined;
+    fa?: CustomLocale | undefined;
+    fi?: CustomLocale | undefined;
+    fo?: CustomLocale | undefined;
+    fr?: CustomLocale | undefined;
+    gr?: CustomLocale | undefined;
+    he?: CustomLocale | undefined;
+    hi?: CustomLocale | undefined;
+    hu?: CustomLocale | undefined;
+    id?: CustomLocale | undefined;
+    is?: CustomLocale | undefined;
+    it?: CustomLocale | undefined;
+    ja?: CustomLocale | undefined;
+    ka?: CustomLocale | undefined;
+    ko?: CustomLocale | undefined;
+    km?: CustomLocale | undefined;
+    kz?: CustomLocale | undefined;
+    lt?: CustomLocale | undefined;
+    lv?: CustomLocale | undefined;
+    mk?: CustomLocale | undefined;
+    mn?: CustomLocale | undefined;
+    ms?: CustomLocale | undefined;
+    my?: CustomLocale | undefined;
+    nl?: CustomLocale | undefined;
+    no?: CustomLocale | undefined;
+    pa?: CustomLocale | undefined;
+    pl?: CustomLocale | undefined;
+    pt?: CustomLocale | undefined;
+    ro?: CustomLocale | undefined;
+    ru?: CustomLocale | undefined;
+    si?: CustomLocale | undefined;
+    sk?: CustomLocale | undefined;
+    sl?: CustomLocale | undefined;
+    sq?: CustomLocale | undefined;
+    sr?: CustomLocale | undefined;
+    sv?: CustomLocale | undefined;
+    uk?: CustomLocale | undefined;
+    vn?: CustomLocale | undefined;
+    zh?: CustomLocale | undefined;
+    uz?: CustomLocale | undefined;
+    uz_latn?: CustomLocale | undefined;
+    zh_tw?: CustomLocale | undefined;
+} & {
+    default: import("../types/locale").Locale;
+};
+export default _default;
diff --git a/website/js/vendor/flatpickr/l10n/de.js b/website/js/vendor/flatpickr/l10n/de.js
new file mode 100644 (file)
index 0000000..75cd041
--- /dev/null
@@ -0,0 +1,70 @@
+(function (global, factory) {
+  typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
+  typeof define === 'function' && define.amd ? define(['exports'], factory) :
+  (global = global || self, factory(global.de = {}));
+}(this, (function (exports) { 'use strict';
+
+  var fp = typeof window !== "undefined" && window.flatpickr !== undefined
+      ? window.flatpickr
+      : {
+          l10ns: {},
+      };
+  var German = {
+      weekdays: {
+          shorthand: ["So", "Mo", "Di", "Mi", "Do", "Fr", "Sa"],
+          longhand: [
+              "Sonntag",
+              "Montag",
+              "Dienstag",
+              "Mittwoch",
+              "Donnerstag",
+              "Freitag",
+              "Samstag",
+          ],
+      },
+      months: {
+          shorthand: [
+              "Jan",
+              "Feb",
+              "Mär",
+              "Apr",
+              "Mai",
+              "Jun",
+              "Jul",
+              "Aug",
+              "Sep",
+              "Okt",
+              "Nov",
+              "Dez",
+          ],
+          longhand: [
+              "Januar",
+              "Februar",
+              "März",
+              "April",
+              "Mai",
+              "Juni",
+              "Juli",
+              "August",
+              "September",
+              "Oktober",
+              "November",
+              "Dezember",
+          ],
+      },
+      firstDayOfWeek: 1,
+      weekAbbreviation: "KW",
+      rangeSeparator: " bis ",
+      scrollTitle: "Zum Ändern scrollen",
+      toggleTitle: "Zum Umschalten klicken",
+      time_24hr: true,
+  };
+  fp.l10ns.de = German;
+  var de = fp.l10ns;
+
+  exports.German = German;
+  exports.default = de;
+
+  Object.defineProperty(exports, '__esModule', { value: true });
+
+})));
diff --git a/website/js/vendor/flatpickr/l10n/default.d.ts b/website/js/vendor/flatpickr/l10n/default.d.ts
new file mode 100644 (file)
index 0000000..ba7d9bb
--- /dev/null
@@ -0,0 +1,3 @@
+import { Locale } from "../types/locale";
+export declare const english: Locale;
+export default english;
diff --git a/website/js/vendor/flatpickr/l10n/default.js b/website/js/vendor/flatpickr/l10n/default.js
new file mode 100644 (file)
index 0000000..5a92478
--- /dev/null
@@ -0,0 +1,84 @@
+(function (global, factory) {
+  typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
+  typeof define === 'function' && define.amd ? define(['exports'], factory) :
+  (global = global || self, factory(global.default = {}));
+}(this, (function (exports) { 'use strict';
+
+  var english = {
+      weekdays: {
+          shorthand: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"],
+          longhand: [
+              "Sunday",
+              "Monday",
+              "Tuesday",
+              "Wednesday",
+              "Thursday",
+              "Friday",
+              "Saturday",
+          ],
+      },
+      months: {
+          shorthand: [
+              "Jan",
+              "Feb",
+              "Mar",
+              "Apr",
+              "May",
+              "Jun",
+              "Jul",
+              "Aug",
+              "Sep",
+              "Oct",
+              "Nov",
+              "Dec",
+          ],
+          longhand: [
+              "January",
+              "February",
+              "March",
+              "April",
+              "May",
+              "June",
+              "July",
+              "August",
+              "September",
+              "October",
+              "November",
+              "December",
+          ],
+      },
+      daysInMonth: [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31],
+      firstDayOfWeek: 0,
+      ordinal: function (nth) {
+          var s = nth % 100;
+          if (s > 3 && s < 21)
+              return "th";
+          switch (s % 10) {
+              case 1:
+                  return "st";
+              case 2:
+                  return "nd";
+              case 3:
+                  return "rd";
+              default:
+                  return "th";
+          }
+      },
+      rangeSeparator: " to ",
+      weekAbbreviation: "Wk",
+      scrollTitle: "Scroll to increment",
+      toggleTitle: "Click to toggle",
+      amPM: ["AM", "PM"],
+      yearAriaLabel: "Year",
+      monthAriaLabel: "Month",
+      hourAriaLabel: "Hour",
+      minuteAriaLabel: "Minute",
+      time_24hr: false,
+  };
+
+  exports.default = english;
+  exports.english = english;
+
+  Object.defineProperty(exports, '__esModule', { value: true });
+
+})));
diff --git a/website/js/vendor/flatpickr/l10n/fr.d.ts b/website/js/vendor/flatpickr/l10n/fr.d.ts
new file mode 100644 (file)
index 0000000..6fcd191
--- /dev/null
@@ -0,0 +1,69 @@
+import { CustomLocale } from "../types/locale";
+export declare const French: CustomLocale;
+declare const _default: {
+    default?: CustomLocale | undefined;
+    hr?: CustomLocale | undefined;
+    th?: CustomLocale | undefined;
+    tr?: CustomLocale | undefined;
+    ar?: CustomLocale | undefined;
+    at?: CustomLocale | undefined;
+    az?: CustomLocale | undefined;
+    be?: CustomLocale | undefined;
+    bg?: CustomLocale | undefined;
+    bn?: CustomLocale | undefined;
+    bs?: CustomLocale | undefined;
+    ca?: CustomLocale | undefined;
+    cat?: CustomLocale | undefined;
+    cs?: CustomLocale | undefined;
+    cy?: CustomLocale | undefined;
+    da?: CustomLocale | undefined;
+    de?: CustomLocale | undefined;
+    en?: CustomLocale | undefined;
+    eo?: CustomLocale | undefined;
+    es?: CustomLocale | undefined;
+    et?: CustomLocale | undefined;
+    fa?: CustomLocale | undefined;
+    fi?: CustomLocale | undefined;
+    fo?: CustomLocale | undefined;
+    fr?: CustomLocale | undefined;
+    gr?: CustomLocale | undefined;
+    he?: CustomLocale | undefined;
+    hi?: CustomLocale | undefined;
+    hu?: CustomLocale | undefined;
+    id?: CustomLocale | undefined;
+    is?: CustomLocale | undefined;
+    it?: CustomLocale | undefined;
+    ja?: CustomLocale | undefined;
+    ka?: CustomLocale | undefined;
+    ko?: CustomLocale | undefined;
+    km?: CustomLocale | undefined;
+    kz?: CustomLocale | undefined;
+    lt?: CustomLocale | undefined;
+    lv?: CustomLocale | undefined;
+    mk?: CustomLocale | undefined;
+    mn?: CustomLocale | undefined;
+    ms?: CustomLocale | undefined;
+    my?: CustomLocale | undefined;
+    nl?: CustomLocale | undefined;
+    no?: CustomLocale | undefined;
+    pa?: CustomLocale | undefined;
+    pl?: CustomLocale | undefined;
+    pt?: CustomLocale | undefined;
+    ro?: CustomLocale | undefined;
+    ru?: CustomLocale | undefined;
+    si?: CustomLocale | undefined;
+    sk?: CustomLocale | undefined;
+    sl?: CustomLocale | undefined;
+    sq?: CustomLocale | undefined;
+    sr?: CustomLocale | undefined;
+    sv?: CustomLocale | undefined;
+    uk?: CustomLocale | undefined;
+    vn?: CustomLocale | undefined;
+    zh?: CustomLocale | undefined;
+    uz?: CustomLocale | undefined;
+    uz_latn?: CustomLocale | undefined;
+    zh_tw?: CustomLocale | undefined;
+} & {
+    default: import("../types/locale").Locale;
+};
+export default _default;
diff --git a/website/js/vendor/flatpickr/l10n/fr.js b/website/js/vendor/flatpickr/l10n/fr.js
new file mode 100644 (file)
index 0000000..4a63cfe
--- /dev/null
@@ -0,0 +1,75 @@
+(function (global, factory) {
+  typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
+  typeof define === 'function' && define.amd ? define(['exports'], factory) :
+  (global = global || self, factory(global.fr = {}));
+}(this, (function (exports) { 'use strict';
+
+  var fp = typeof window !== "undefined" && window.flatpickr !== undefined
+      ? window.flatpickr
+      : {
+          l10ns: {},
+      };
+  var French = {
+      firstDayOfWeek: 1,
+      weekdays: {
+          shorthand: ["dim", "lun", "mar", "mer", "jeu", "ven", "sam"],
+          longhand: [
+              "dimanche",
+              "lundi",
+              "mardi",
+              "mercredi",
+              "jeudi",
+              "vendredi",
+              "samedi",
+          ],
+      },
+      months: {
+          shorthand: [
+              "janv",
+              "févr",
+              "mars",
+              "avr",
+              "mai",
+              "juin",
+              "juil",
+              "août",
+              "sept",
+              "oct",
+              "nov",
+              "déc",
+          ],
+          longhand: [
+              "janvier",
+              "février",
+              "mars",
+              "avril",
+              "mai",
+              "juin",
+              "juillet",
+              "août",
+              "septembre",
+              "octobre",
+              "novembre",
+              "décembre",
+          ],
+      },
+      ordinal: function (nth) {
+          if (nth > 1)
+              return "";
+          return "er";
+      },
+      rangeSeparator: " au ",
+      weekAbbreviation: "Sem",
+      scrollTitle: "Défiler pour augmenter la valeur",
+      toggleTitle: "Cliquer pour basculer",
+      time_24hr: true,
+  };
+  fp.l10ns.fr = French;
+  var fr = fp.l10ns;
+
+  exports.French = French;
+  exports.default = fr;
+
+  Object.defineProperty(exports, '__esModule', { value: true });
+
+})));
diff --git a/website/js/vendor/flatpickr/l10n/index.d.ts b/website/js/vendor/flatpickr/l10n/index.d.ts
new file mode 100644 (file)
index 0000000..8b2ef7d
--- /dev/null
@@ -0,0 +1,3 @@
+import { key, CustomLocale } from "../types/locale";
+declare const l10n: Record<key, CustomLocale>;
+export default l10n;
diff --git a/website/js/vendor/flatpickr/l10n/index.js b/website/js/vendor/flatpickr/l10n/index.js
new file mode 100644 (file)
index 0000000..c197ead
--- /dev/null
@@ -0,0 +1,3594 @@
+(function (global, factory) {
+    typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
+    typeof define === 'function' && define.amd ? define(['exports'], factory) :
+    (global = global || self, factory(global.index = {}));
+}(this, (function (exports) { 'use strict';
+
+    /*! *****************************************************************************
+    Copyright (c) Microsoft Corporation.
+
+    Permission to use, copy, modify, and/or distribute this software for any
+    purpose with or without fee is hereby granted.
+
+    THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
+    REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+    AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
+    INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+    LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
+    OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+    PERFORMANCE OF THIS SOFTWARE.
+    ***************************************************************************** */
+
+    var __assign = function() {
+        __assign = Object.assign || function __assign(t) {
+            for (var s, i = 1, n = arguments.length; i < n; i++) {
+                s = arguments[i];
+                for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
+            }
+            return t;
+        };
+        return __assign.apply(this, arguments);
+    };
+
+    var fp = typeof window !== "undefined" && window.flatpickr !== undefined
+        ? window.flatpickr
+        : {
+            l10ns: {},
+        };
+    var Arabic = {
+        weekdays: {
+            shorthand: ["أحد", "اثنين", "ثلاثاء", "أربعاء", "خميس", "جمعة", "سبت"],
+            longhand: [
+                "الأحد",
+                "الاثنين",
+                "الثلاثاء",
+                "الأربعاء",
+                "الخميس",
+                "الجمعة",
+                "السبت",
+            ],
+        },
+        months: {
+            shorthand: ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"],
+            longhand: [
+                "يناير",
+                "فبراير",
+                "مارس",
+                "أبريل",
+                "مايو",
+                "يونيو",
+                "يوليو",
+                "أغسطس",
+                "سبتمبر",
+                "أكتوبر",
+                "نوفمبر",
+                "ديسمبر",
+            ],
+        },
+        rangeSeparator: " - ",
+    };
+    fp.l10ns.ar = Arabic;
+    fp.l10ns;
+
+    var fp$1 = typeof window !== "undefined" && window.flatpickr !== undefined
+        ? window.flatpickr
+        : {
+            l10ns: {},
+        };
+    var Austria = {
+        weekdays: {
+            shorthand: ["So", "Mo", "Di", "Mi", "Do", "Fr", "Sa"],
+            longhand: [
+                "Sonntag",
+                "Montag",
+                "Dienstag",
+                "Mittwoch",
+                "Donnerstag",
+                "Freitag",
+                "Samstag",
+            ],
+        },
+        months: {
+            shorthand: [
+                "Jän",
+                "Feb",
+                "Mär",
+                "Apr",
+                "Mai",
+                "Jun",
+                "Jul",
+                "Aug",
+                "Sep",
+                "Okt",
+                "Nov",
+                "Dez",
+            ],
+            longhand: [
+                "Jänner",
+                "Februar",
+                "März",
+                "April",
+                "Mai",
+                "Juni",
+                "Juli",
+                "August",
+                "September",
+                "Oktober",
+                "November",
+                "Dezember",
+            ],
+        },
+        firstDayOfWeek: 1,
+        weekAbbreviation: "KW",
+        rangeSeparator: " bis ",
+        scrollTitle: "Zum Ändern scrollen",
+        toggleTitle: "Zum Umschalten klicken",
+    };
+    fp$1.l10ns.at = Austria;
+    fp$1.l10ns;
+
+    var fp$2 = typeof window !== "undefined" && window.flatpickr !== undefined
+        ? window.flatpickr
+        : {
+            l10ns: {},
+        };
+    var Azerbaijan = {
+        weekdays: {
+            shorthand: ["B.", "B.e.", "Ç.a.", "Ç.", "C.a.", "C.", "Ş."],
+            longhand: [
+                "Bazar",
+                "Bazar ertəsi",
+                "Çərşənbə axşamı",
+                "Çərşənbə",
+                "Cümə axşamı",
+                "Cümə",
+                "Şənbə",
+            ],
+        },
+        months: {
+            shorthand: [
+                "Yan",
+                "Fev",
+                "Mar",
+                "Apr",
+                "May",
+                "İyn",
+                "İyl",
+                "Avq",
+                "Sen",
+                "Okt",
+                "Noy",
+                "Dek",
+            ],
+            longhand: [
+                "Yanvar",
+                "Fevral",
+                "Mart",
+                "Aprel",
+                "May",
+                "İyun",
+                "İyul",
+                "Avqust",
+                "Sentyabr",
+                "Oktyabr",
+                "Noyabr",
+                "Dekabr",
+            ],
+        },
+        firstDayOfWeek: 1,
+        ordinal: function () {
+            return ".";
+        },
+        rangeSeparator: " - ",
+        weekAbbreviation: "Hf",
+        scrollTitle: "Artırmaq üçün sürüşdürün",
+        toggleTitle: "Aç / Bağla",
+        amPM: ["GƏ", "GS"],
+        time_24hr: true,
+    };
+    fp$2.l10ns.az = Azerbaijan;
+    fp$2.l10ns;
+
+    var fp$3 = typeof window !== "undefined" && window.flatpickr !== undefined
+        ? window.flatpickr
+        : {
+            l10ns: {},
+        };
+    var Belarusian = {
+        weekdays: {
+            shorthand: ["Нд", "Пн", "Аў", "Ср", "Чц", "Пт", "Сб"],
+            longhand: [
+                "Нядзеля",
+                "Панядзелак",
+                "Аўторак",
+                "Серада",
+                "Чацвер",
+                "Пятніца",
+                "Субота",
+            ],
+        },
+        months: {
+            shorthand: [
+                "Сту",
+                "Лют",
+                "Сак",
+                "Кра",
+                "Тра",
+                "Чэр",
+                "Ліп",
+                "Жні",
+                "Вер",
+                "Кас",
+                "Ліс",
+                "Сне",
+            ],
+            longhand: [
+                "Студзень",
+                "Люты",
+                "Сакавік",
+                "Красавік",
+                "Травень",
+                "Чэрвень",
+                "Ліпень",
+                "Жнівень",
+                "Верасень",
+                "Кастрычнік",
+                "Лістапад",
+                "Снежань",
+            ],
+        },
+        firstDayOfWeek: 1,
+        ordinal: function () {
+            return "";
+        },
+        rangeSeparator: " — ",
+        weekAbbreviation: "Тыд.",
+        scrollTitle: "Пракруціце для павелічэння",
+        toggleTitle: "Націсніце для пераключэння",
+        amPM: ["ДП", "ПП"],
+        yearAriaLabel: "Год",
+        time_24hr: true,
+    };
+    fp$3.l10ns.be = Belarusian;
+    fp$3.l10ns;
+
+    var fp$4 = typeof window !== "undefined" && window.flatpickr !== undefined
+        ? window.flatpickr
+        : {
+            l10ns: {},
+        };
+    var Bosnian = {
+        firstDayOfWeek: 1,
+        weekdays: {
+            shorthand: ["Ned", "Pon", "Uto", "Sri", "Čet", "Pet", "Sub"],
+            longhand: [
+                "Nedjelja",
+                "Ponedjeljak",
+                "Utorak",
+                "Srijeda",
+                "Četvrtak",
+                "Petak",
+                "Subota",
+            ],
+        },
+        months: {
+            shorthand: [
+                "Jan",
+                "Feb",
+                "Mar",
+                "Apr",
+                "Maj",
+                "Jun",
+                "Jul",
+                "Avg",
+                "Sep",
+                "Okt",
+                "Nov",
+                "Dec",
+            ],
+            longhand: [
+                "Januar",
+                "Februar",
+                "Mart",
+                "April",
+                "Maj",
+                "Juni",
+                "Juli",
+                "Avgust",
+                "Septembar",
+                "Oktobar",
+                "Novembar",
+                "Decembar",
+            ],
+        },
+        time_24hr: true,
+    };
+    fp$4.l10ns.bs = Bosnian;
+    fp$4.l10ns;
+
+    var fp$5 = typeof window !== "undefined" && window.flatpickr !== undefined
+        ? window.flatpickr
+        : {
+            l10ns: {},
+        };
+    var Bulgarian = {
+        weekdays: {
+            shorthand: ["Нд", "Пн", "Вт", "Ср", "Чт", "Пт", "Сб"],
+            longhand: [
+                "Неделя",
+                "Понеделник",
+                "Вторник",
+                "Сряда",
+                "Четвъртък",
+                "Петък",
+                "Събота",
+            ],
+        },
+        months: {
+            shorthand: [
+                "Яну",
+                "Фев",
+                "Март",
+                "Апр",
+                "Май",
+                "Юни",
+                "Юли",
+                "Авг",
+                "Сеп",
+                "Окт",
+                "Ное",
+                "Дек",
+            ],
+            longhand: [
+                "Януари",
+                "Февруари",
+                "Март",
+                "Април",
+                "Май",
+                "Юни",
+                "Юли",
+                "Август",
+                "Септември",
+                "Октомври",
+                "Ноември",
+                "Декември",
+            ],
+        },
+        time_24hr: true,
+        firstDayOfWeek: 1,
+    };
+    fp$5.l10ns.bg = Bulgarian;
+    fp$5.l10ns;
+
+    var fp$6 = typeof window !== "undefined" && window.flatpickr !== undefined
+        ? window.flatpickr
+        : {
+            l10ns: {},
+        };
+    var Bangla = {
+        weekdays: {
+            shorthand: ["রবি", "সোম", "মঙ্গল", "বুধ", "বৃহস্পতি", "শুক্র", "শনি"],
+            longhand: [
+                "রবিবার",
+                "সোমবার",
+                "মঙ্গলবার",
+                "বুধবার",
+                "বৃহস্পতিবার",
+                "শুক্রবার",
+                "শনিবার",
+            ],
+        },
+        months: {
+            shorthand: [
+                "জানু",
+                "ফেব্রু",
+                "মার্চ",
+                "এপ্রিল",
+                "মে",
+                "জুন",
+                "জুলাই",
+                "আগ",
+                "সেপ্টে",
+                "অক্টো",
+                "নভে",
+                "ডিসে",
+            ],
+            longhand: [
+                "জানুয়ারী",
+                "ফেব্রুয়ারী",
+                "মার্চ",
+                "এপ্রিল",
+                "মে",
+                "জুন",
+                "জুলাই",
+                "আগস্ট",
+                "সেপ্টেম্বর",
+                "অক্টোবর",
+                "নভেম্বর",
+                "ডিসেম্বর",
+            ],
+        },
+    };
+    fp$6.l10ns.bn = Bangla;
+    fp$6.l10ns;
+
+    var fp$7 = typeof window !== "undefined" && window.flatpickr !== undefined
+        ? window.flatpickr
+        : {
+            l10ns: {},
+        };
+    var Catalan = {
+        weekdays: {
+            shorthand: ["Dg", "Dl", "Dt", "Dc", "Dj", "Dv", "Ds"],
+            longhand: [
+                "Diumenge",
+                "Dilluns",
+                "Dimarts",
+                "Dimecres",
+                "Dijous",
+                "Divendres",
+                "Dissabte",
+            ],
+        },
+        months: {
+            shorthand: [
+                "Gen",
+                "Febr",
+                "Març",
+                "Abr",
+                "Maig",
+                "Juny",
+                "Jul",
+                "Ag",
+                "Set",
+                "Oct",
+                "Nov",
+                "Des",
+            ],
+            longhand: [
+                "Gener",
+                "Febrer",
+                "Març",
+                "Abril",
+                "Maig",
+                "Juny",
+                "Juliol",
+                "Agost",
+                "Setembre",
+                "Octubre",
+                "Novembre",
+                "Desembre",
+            ],
+        },
+        ordinal: function (nth) {
+            var s = nth % 100;
+            if (s > 3 && s < 21)
+                return "è";
+            switch (s % 10) {
+                case 1:
+                    return "r";
+                case 2:
+                    return "n";
+                case 3:
+                    return "r";
+                case 4:
+                    return "t";
+                default:
+                    return "è";
+            }
+        },
+        firstDayOfWeek: 1,
+        time_24hr: true,
+    };
+    fp$7.l10ns.cat = fp$7.l10ns.ca = Catalan;
+    fp$7.l10ns;
+
+    var fp$8 = typeof window !== "undefined" && window.flatpickr !== undefined
+        ? window.flatpickr
+        : {
+            l10ns: {},
+        };
+    var Czech = {
+        weekdays: {
+            shorthand: ["Ne", "Po", "Út", "St", "Čt", "Pá", "So"],
+            longhand: [
+                "Neděle",
+                "Pondělí",
+                "Úterý",
+                "Středa",
+                "Čtvrtek",
+                "Pátek",
+                "Sobota",
+            ],
+        },
+        months: {
+            shorthand: [
+                "Led",
+                "Ún",
+                "Bře",
+                "Dub",
+                "Kvě",
+                "Čer",
+                "Čvc",
+                "Srp",
+                "Zář",
+                "Říj",
+                "Lis",
+                "Pro",
+            ],
+            longhand: [
+                "Leden",
+                "Únor",
+                "Březen",
+                "Duben",
+                "Květen",
+                "Červen",
+                "Červenec",
+                "Srpen",
+                "Září",
+                "Říjen",
+                "Listopad",
+                "Prosinec",
+            ],
+        },
+        firstDayOfWeek: 1,
+        ordinal: function () {
+            return ".";
+        },
+        rangeSeparator: " do ",
+        weekAbbreviation: "Týd.",
+        scrollTitle: "Rolujte pro změnu",
+        toggleTitle: "Přepnout dopoledne/odpoledne",
+        amPM: ["dop.", "odp."],
+        yearAriaLabel: "Rok",
+        time_24hr: true,
+    };
+    fp$8.l10ns.cs = Czech;
+    fp$8.l10ns;
+
+    var fp$9 = typeof window !== "undefined" && window.flatpickr !== undefined
+        ? window.flatpickr
+        : {
+            l10ns: {},
+        };
+    var Welsh = {
+        weekdays: {
+            shorthand: ["Sul", "Llun", "Maw", "Mer", "Iau", "Gwe", "Sad"],
+            longhand: [
+                "Dydd Sul",
+                "Dydd Llun",
+                "Dydd Mawrth",
+                "Dydd Mercher",
+                "Dydd Iau",
+                "Dydd Gwener",
+                "Dydd Sadwrn",
+            ],
+        },
+        months: {
+            shorthand: [
+                "Ion",
+                "Chwef",
+                "Maw",
+                "Ebr",
+                "Mai",
+                "Meh",
+                "Gorff",
+                "Awst",
+                "Medi",
+                "Hyd",
+                "Tach",
+                "Rhag",
+            ],
+            longhand: [
+                "Ionawr",
+                "Chwefror",
+                "Mawrth",
+                "Ebrill",
+                "Mai",
+                "Mehefin",
+                "Gorffennaf",
+                "Awst",
+                "Medi",
+                "Hydref",
+                "Tachwedd",
+                "Rhagfyr",
+            ],
+        },
+        firstDayOfWeek: 1,
+        ordinal: function (nth) {
+            if (nth === 1)
+                return "af";
+            if (nth === 2)
+                return "ail";
+            if (nth === 3 || nth === 4)
+                return "ydd";
+            if (nth === 5 || nth === 6)
+                return "ed";
+            if ((nth >= 7 && nth <= 10) ||
+                nth == 12 ||
+                nth == 15 ||
+                nth == 18 ||
+                nth == 20)
+                return "fed";
+            if (nth == 11 ||
+                nth == 13 ||
+                nth == 14 ||
+                nth == 16 ||
+                nth == 17 ||
+                nth == 19)
+                return "eg";
+            if (nth >= 21 && nth <= 39)
+                return "ain";
+            // Inconclusive.
+            return "";
+        },
+        time_24hr: true,
+    };
+    fp$9.l10ns.cy = Welsh;
+    fp$9.l10ns;
+
+    var fp$a = typeof window !== "undefined" && window.flatpickr !== undefined
+        ? window.flatpickr
+        : {
+            l10ns: {},
+        };
+    var Danish = {
+        weekdays: {
+            shorthand: ["søn", "man", "tir", "ons", "tors", "fre", "lør"],
+            longhand: [
+                "søndag",
+                "mandag",
+                "tirsdag",
+                "onsdag",
+                "torsdag",
+                "fredag",
+                "lørdag",
+            ],
+        },
+        months: {
+            shorthand: [
+                "jan",
+                "feb",
+                "mar",
+                "apr",
+                "maj",
+                "jun",
+                "jul",
+                "aug",
+                "sep",
+                "okt",
+                "nov",
+                "dec",
+            ],
+            longhand: [
+                "januar",
+                "februar",
+                "marts",
+                "april",
+                "maj",
+                "juni",
+                "juli",
+                "august",
+                "september",
+                "oktober",
+                "november",
+                "december",
+            ],
+        },
+        ordinal: function () {
+            return ".";
+        },
+        firstDayOfWeek: 1,
+        rangeSeparator: " til ",
+        weekAbbreviation: "uge",
+        time_24hr: true,
+    };
+    fp$a.l10ns.da = Danish;
+    fp$a.l10ns;
+
+    var fp$b = typeof window !== "undefined" && window.flatpickr !== undefined
+        ? window.flatpickr
+        : {
+            l10ns: {},
+        };
+    var German = {
+        weekdays: {
+            shorthand: ["So", "Mo", "Di", "Mi", "Do", "Fr", "Sa"],
+            longhand: [
+                "Sonntag",
+                "Montag",
+                "Dienstag",
+                "Mittwoch",
+                "Donnerstag",
+                "Freitag",
+                "Samstag",
+            ],
+        },
+        months: {
+            shorthand: [
+                "Jan",
+                "Feb",
+                "Mär",
+                "Apr",
+                "Mai",
+                "Jun",
+                "Jul",
+                "Aug",
+                "Sep",
+                "Okt",
+                "Nov",
+                "Dez",
+            ],
+            longhand: [
+                "Januar",
+                "Februar",
+                "März",
+                "April",
+                "Mai",
+                "Juni",
+                "Juli",
+                "August",
+                "September",
+                "Oktober",
+                "November",
+                "Dezember",
+            ],
+        },
+        firstDayOfWeek: 1,
+        weekAbbreviation: "KW",
+        rangeSeparator: " bis ",
+        scrollTitle: "Zum Ändern scrollen",
+        toggleTitle: "Zum Umschalten klicken",
+        time_24hr: true,
+    };
+    fp$b.l10ns.de = German;
+    fp$b.l10ns;
+
+    var english = {
+        weekdays: {
+            shorthand: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"],
+            longhand: [
+                "Sunday",
+                "Monday",
+                "Tuesday",
+                "Wednesday",
+                "Thursday",
+                "Friday",
+                "Saturday",
+            ],
+        },
+        months: {
+            shorthand: [
+                "Jan",
+                "Feb",
+                "Mar",
+                "Apr",
+                "May",
+                "Jun",
+                "Jul",
+                "Aug",
+                "Sep",
+                "Oct",
+                "Nov",
+                "Dec",
+            ],
+            longhand: [
+                "January",
+                "February",
+                "March",
+                "April",
+                "May",
+                "June",
+                "July",
+                "August",
+                "September",
+                "October",
+                "November",
+                "December",
+            ],
+        },
+        daysInMonth: [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31],
+        firstDayOfWeek: 0,
+        ordinal: function (nth) {
+            var s = nth % 100;
+            if (s > 3 && s < 21)
+                return "th";
+            switch (s % 10) {
+                case 1:
+                    return "st";
+                case 2:
+                    return "nd";
+                case 3:
+                    return "rd";
+                default:
+                    return "th";
+            }
+        },
+        rangeSeparator: " to ",
+        weekAbbreviation: "Wk",
+        scrollTitle: "Scroll to increment",
+        toggleTitle: "Click to toggle",
+        amPM: ["AM", "PM"],
+        yearAriaLabel: "Year",
+        monthAriaLabel: "Month",
+        hourAriaLabel: "Hour",
+        minuteAriaLabel: "Minute",
+        time_24hr: false,
+    };
+
+    var fp$c = typeof window !== "undefined" && window.flatpickr !== undefined
+        ? window.flatpickr
+        : {
+            l10ns: {},
+        };
+    var Esperanto = {
+        firstDayOfWeek: 1,
+        rangeSeparator: " ĝis ",
+        weekAbbreviation: "Sem",
+        scrollTitle: "Rulumu por pligrandigi la valoron",
+        toggleTitle: "Klaku por ŝalti",
+        weekdays: {
+            shorthand: ["Dim", "Lun", "Mar", "Mer", "Ĵaŭ", "Ven", "Sab"],
+            longhand: [
+                "dimanĉo",
+                "lundo",
+                "mardo",
+                "merkredo",
+                "ĵaŭdo",
+                "vendredo",
+                "sabato",
+            ],
+        },
+        months: {
+            shorthand: [
+                "Jan",
+                "Feb",
+                "Mar",
+                "Apr",
+                "Maj",
+                "Jun",
+                "Jul",
+                "Aŭg",
+                "Sep",
+                "Okt",
+                "Nov",
+                "Dec",
+            ],
+            longhand: [
+                "januaro",
+                "februaro",
+                "marto",
+                "aprilo",
+                "majo",
+                "junio",
+                "julio",
+                "aŭgusto",
+                "septembro",
+                "oktobro",
+                "novembro",
+                "decembro",
+            ],
+        },
+        ordinal: function () {
+            return "-a";
+        },
+        time_24hr: true,
+    };
+    fp$c.l10ns.eo = Esperanto;
+    fp$c.l10ns;
+
+    var fp$d = typeof window !== "undefined" && window.flatpickr !== undefined
+        ? window.flatpickr
+        : {
+            l10ns: {},
+        };
+    var Spanish = {
+        weekdays: {
+            shorthand: ["Dom", "Lun", "Mar", "Mié", "Jue", "Vie", "Sáb"],
+            longhand: [
+                "Domingo",
+                "Lunes",
+                "Martes",
+                "Miércoles",
+                "Jueves",
+                "Viernes",
+                "Sábado",
+            ],
+        },
+        months: {
+            shorthand: [
+                "Ene",
+                "Feb",
+                "Mar",
+                "Abr",
+                "May",
+                "Jun",
+                "Jul",
+                "Ago",
+                "Sep",
+                "Oct",
+                "Nov",
+                "Dic",
+            ],
+            longhand: [
+                "Enero",
+                "Febrero",
+                "Marzo",
+                "Abril",
+                "Mayo",
+                "Junio",
+                "Julio",
+                "Agosto",
+                "Septiembre",
+                "Octubre",
+                "Noviembre",
+                "Diciembre",
+            ],
+        },
+        ordinal: function () {
+            return "º";
+        },
+        firstDayOfWeek: 1,
+        rangeSeparator: " a ",
+        time_24hr: true,
+    };
+    fp$d.l10ns.es = Spanish;
+    fp$d.l10ns;
+
+    var fp$e = typeof window !== "undefined" && window.flatpickr !== undefined
+        ? window.flatpickr
+        : {
+            l10ns: {},
+        };
+    var Estonian = {
+        weekdays: {
+            shorthand: ["P", "E", "T", "K", "N", "R", "L"],
+            longhand: [
+                "Pühapäev",
+                "Esmaspäev",
+                "Teisipäev",
+                "Kolmapäev",
+                "Neljapäev",
+                "Reede",
+                "Laupäev",
+            ],
+        },
+        months: {
+            shorthand: [
+                "Jaan",
+                "Veebr",
+                "Märts",
+                "Apr",
+                "Mai",
+                "Juuni",
+                "Juuli",
+                "Aug",
+                "Sept",
+                "Okt",
+                "Nov",
+                "Dets",
+            ],
+            longhand: [
+                "Jaanuar",
+                "Veebruar",
+                "Märts",
+                "Aprill",
+                "Mai",
+                "Juuni",
+                "Juuli",
+                "August",
+                "September",
+                "Oktoober",
+                "November",
+                "Detsember",
+            ],
+        },
+        firstDayOfWeek: 1,
+        ordinal: function () {
+            return ".";
+        },
+        weekAbbreviation: "Näd",
+        rangeSeparator: " kuni ",
+        scrollTitle: "Keri, et suurendada",
+        toggleTitle: "Klõpsa, et vahetada",
+        time_24hr: true,
+    };
+    fp$e.l10ns.et = Estonian;
+    fp$e.l10ns;
+
+    var fp$f = typeof window !== "undefined" && window.flatpickr !== undefined
+        ? window.flatpickr
+        : {
+            l10ns: {},
+        };
+    var Persian = {
+        weekdays: {
+            shorthand: ["یک", "دو", "سه", "چهار", "پنج", "جمعه", "شنبه"],
+            longhand: [
+                "یک‌شنبه",
+                "دوشنبه",
+                "سه‌شنبه",
+                "چهارشنبه",
+                "پنچ‌شنبه",
+                "جمعه",
+                "شنبه",
+            ],
+        },
+        months: {
+            shorthand: [
+                "ژانویه",
+                "فوریه",
+                "مارس",
+                "آوریل",
+                "مه",
+                "ژوئن",
+                "ژوئیه",
+                "اوت",
+                "سپتامبر",
+                "اکتبر",
+                "نوامبر",
+                "دسامبر",
+            ],
+            longhand: [
+                "ژانویه",
+                "فوریه",
+                "مارس",
+                "آوریل",
+                "مه",
+                "ژوئن",
+                "ژوئیه",
+                "اوت",
+                "سپتامبر",
+                "اکتبر",
+                "نوامبر",
+                "دسامبر",
+            ],
+        },
+        firstDayOfWeek: 6,
+        ordinal: function () {
+            return "";
+        },
+    };
+    fp$f.l10ns.fa = Persian;
+    fp$f.l10ns;
+
+    var fp$g = typeof window !== "undefined" && window.flatpickr !== undefined
+        ? window.flatpickr
+        : {
+            l10ns: {},
+        };
+    var Finnish = {
+        firstDayOfWeek: 1,
+        weekdays: {
+            shorthand: ["Su", "Ma", "Ti", "Ke", "To", "Pe", "La"],
+            longhand: [
+                "Sunnuntai",
+                "Maanantai",
+                "Tiistai",
+                "Keskiviikko",
+                "Torstai",
+                "Perjantai",
+                "Lauantai",
+            ],
+        },
+        months: {
+            shorthand: [
+                "Tammi",
+                "Helmi",
+                "Maalis",
+                "Huhti",
+                "Touko",
+                "Kesä",
+                "Heinä",
+                "Elo",
+                "Syys",
+                "Loka",
+                "Marras",
+                "Joulu",
+            ],
+            longhand: [
+                "Tammikuu",
+                "Helmikuu",
+                "Maaliskuu",
+                "Huhtikuu",
+                "Toukokuu",
+                "Kesäkuu",
+                "Heinäkuu",
+                "Elokuu",
+                "Syyskuu",
+                "Lokakuu",
+                "Marraskuu",
+                "Joulukuu",
+            ],
+        },
+        ordinal: function () {
+            return ".";
+        },
+        time_24hr: true,
+    };
+    fp$g.l10ns.fi = Finnish;
+    fp$g.l10ns;
+
+    var fp$h = typeof window !== "undefined" && window.flatpickr !== undefined
+        ? window.flatpickr
+        : {
+            l10ns: {},
+        };
+    var Faroese = {
+        weekdays: {
+            shorthand: ["Sun", "Mán", "Týs", "Mik", "Hós", "Frí", "Ley"],
+            longhand: [
+                "Sunnudagur",
+                "Mánadagur",
+                "Týsdagur",
+                "Mikudagur",
+                "Hósdagur",
+                "Fríggjadagur",
+                "Leygardagur",
+            ],
+        },
+        months: {
+            shorthand: [
+                "Jan",
+                "Feb",
+                "Mar",
+                "Apr",
+                "Mai",
+                "Jun",
+                "Jul",
+                "Aug",
+                "Sep",
+                "Okt",
+                "Nov",
+                "Des",
+            ],
+            longhand: [
+                "Januar",
+                "Februar",
+                "Mars",
+                "Apríl",
+                "Mai",
+                "Juni",
+                "Juli",
+                "August",
+                "Septembur",
+                "Oktobur",
+                "Novembur",
+                "Desembur",
+            ],
+        },
+        ordinal: function () {
+            return ".";
+        },
+        firstDayOfWeek: 1,
+        rangeSeparator: " til ",
+        weekAbbreviation: "vika",
+        scrollTitle: "Rulla fyri at broyta",
+        toggleTitle: "Trýst fyri at skifta",
+        yearAriaLabel: "Ár",
+        time_24hr: true,
+    };
+    fp$h.l10ns.fo = Faroese;
+    fp$h.l10ns;
+
+    var fp$i = typeof window !== "undefined" && window.flatpickr !== undefined
+        ? window.flatpickr
+        : {
+            l10ns: {},
+        };
+    var French = {
+        firstDayOfWeek: 1,
+        weekdays: {
+            shorthand: ["dim", "lun", "mar", "mer", "jeu", "ven", "sam"],
+            longhand: [
+                "dimanche",
+                "lundi",
+                "mardi",
+                "mercredi",
+                "jeudi",
+                "vendredi",
+                "samedi",
+            ],
+        },
+        months: {
+            shorthand: [
+                "janv",
+                "févr",
+                "mars",
+                "avr",
+                "mai",
+                "juin",
+                "juil",
+                "août",
+                "sept",
+                "oct",
+                "nov",
+                "déc",
+            ],
+            longhand: [
+                "janvier",
+                "février",
+                "mars",
+                "avril",
+                "mai",
+                "juin",
+                "juillet",
+                "août",
+                "septembre",
+                "octobre",
+                "novembre",
+                "décembre",
+            ],
+        },
+        ordinal: function (nth) {
+            if (nth > 1)
+                return "";
+            return "er";
+        },
+        rangeSeparator: " au ",
+        weekAbbreviation: "Sem",
+        scrollTitle: "Défiler pour augmenter la valeur",
+        toggleTitle: "Cliquer pour basculer",
+        time_24hr: true,
+    };
+    fp$i.l10ns.fr = French;
+    fp$i.l10ns;
+
+    var fp$j = typeof window !== "undefined" && window.flatpickr !== undefined
+        ? window.flatpickr
+        : {
+            l10ns: {},
+        };
+    var Greek = {
+        weekdays: {
+            shorthand: ["Κυ", "Δε", "Τρ", "Τε", "Πέ", "Πα", "Σά"],
+            longhand: [
+                "Κυριακή",
+                "Δευτέρα",
+                "Τρίτη",
+                "Τετάρτη",
+                "Πέμπτη",
+                "Παρασκευή",
+                "Σάββατο",
+            ],
+        },
+        months: {
+            shorthand: [
+                "Ιαν",
+                "Φεβ",
+                "Μάρ",
+                "Απρ",
+                "Μάι",
+                "Ιού",
+                "Ιού",
+                "Αύγ",
+                "Σεπ",
+                "Οκτ",
+                "Νοέ",
+                "Δεκ",
+            ],
+            longhand: [
+                "Ιανουάριος",
+                "Φεβρουάριος",
+                "Μάρτιος",
+                "Απρίλιος",
+                "Μάιος",
+                "Ιούνιος",
+                "Ιούλιος",
+                "Αύγουστος",
+                "Σεπτέμβριος",
+                "Οκτώβριος",
+                "Νοέμβριος",
+                "Δεκέμβριος",
+            ],
+        },
+        firstDayOfWeek: 1,
+        ordinal: function () {
+            return "";
+        },
+        weekAbbreviation: "Εβδ",
+        rangeSeparator: " έως ",
+        scrollTitle: "Μετακυλήστε για προσαύξηση",
+        toggleTitle: "Κάντε κλικ για αλλαγή",
+        amPM: ["ΠΜ", "ΜΜ"],
+    };
+    fp$j.l10ns.gr = Greek;
+    fp$j.l10ns;
+
+    var fp$k = typeof window !== "undefined" && window.flatpickr !== undefined
+        ? window.flatpickr
+        : {
+            l10ns: {},
+        };
+    var Hebrew = {
+        weekdays: {
+            shorthand: ["א", "ב", "ג", "ד", "ה", "ו", "ש"],
+            longhand: ["ראשון", "שני", "שלישי", "רביעי", "חמישי", "שישי", "שבת"],
+        },
+        months: {
+            shorthand: [
+                "ינו׳",
+                "פבר׳",
+                "מרץ",
+                "אפר׳",
+                "מאי",
+                "יוני",
+                "יולי",
+                "אוג׳",
+                "ספט׳",
+                "אוק׳",
+                "נוב׳",
+                "דצמ׳",
+            ],
+            longhand: [
+                "ינואר",
+                "פברואר",
+                "מרץ",
+                "אפריל",
+                "מאי",
+                "יוני",
+                "יולי",
+                "אוגוסט",
+                "ספטמבר",
+                "אוקטובר",
+                "נובמבר",
+                "דצמבר",
+            ],
+        },
+        rangeSeparator: " אל ",
+        time_24hr: true,
+    };
+    fp$k.l10ns.he = Hebrew;
+    fp$k.l10ns;
+
+    var fp$l = typeof window !== "undefined" && window.flatpickr !== undefined
+        ? window.flatpickr
+        : {
+            l10ns: {},
+        };
+    var Hindi = {
+        weekdays: {
+            shorthand: ["रवि", "सोम", "मंगल", "बुध", "गुरु", "शुक्र", "शनि"],
+            longhand: [
+                "रविवार",
+                "सोमवार",
+                "मंगलवार",
+                "बुधवार",
+                "गुरुवार",
+                "शुक्रवार",
+                "शनिवार",
+            ],
+        },
+        months: {
+            shorthand: [
+                "जन",
+                "फर",
+                "मार्च",
+                "अप्रेल",
+                "मई",
+                "जून",
+                "जूलाई",
+                "अग",
+                "सित",
+                "अक्ट",
+                "नव",
+                "दि",
+            ],
+            longhand: [
+                "जनवरी ",
+                "फरवरी",
+                "मार्च",
+                "अप्रेल",
+                "मई",
+                "जून",
+                "जूलाई",
+                "अगस्त ",
+                "सितम्बर",
+                "अक्टूबर",
+                "नवम्बर",
+                "दिसम्बर",
+            ],
+        },
+    };
+    fp$l.l10ns.hi = Hindi;
+    fp$l.l10ns;
+
+    var fp$m = typeof window !== "undefined" && window.flatpickr !== undefined
+        ? window.flatpickr
+        : {
+            l10ns: {},
+        };
+    var Croatian = {
+        firstDayOfWeek: 1,
+        weekdays: {
+            shorthand: ["Ned", "Pon", "Uto", "Sri", "Čet", "Pet", "Sub"],
+            longhand: [
+                "Nedjelja",
+                "Ponedjeljak",
+                "Utorak",
+                "Srijeda",
+                "Četvrtak",
+                "Petak",
+                "Subota",
+            ],
+        },
+        months: {
+            shorthand: [
+                "Sij",
+                "Velj",
+                "Ožu",
+                "Tra",
+                "Svi",
+                "Lip",
+                "Srp",
+                "Kol",
+                "Ruj",
+                "Lis",
+                "Stu",
+                "Pro",
+            ],
+            longhand: [
+                "Siječanj",
+                "Veljača",
+                "Ožujak",
+                "Travanj",
+                "Svibanj",
+                "Lipanj",
+                "Srpanj",
+                "Kolovoz",
+                "Rujan",
+                "Listopad",
+                "Studeni",
+                "Prosinac",
+            ],
+        },
+        time_24hr: true,
+    };
+    fp$m.l10ns.hr = Croatian;
+    fp$m.l10ns;
+
+    var fp$n = typeof window !== "undefined" && window.flatpickr !== undefined
+        ? window.flatpickr
+        : {
+            l10ns: {},
+        };
+    var Hungarian = {
+        firstDayOfWeek: 1,
+        weekdays: {
+            shorthand: ["V", "H", "K", "Sz", "Cs", "P", "Szo"],
+            longhand: [
+                "Vasárnap",
+                "Hétfő",
+                "Kedd",
+                "Szerda",
+                "Csütörtök",
+                "Péntek",
+                "Szombat",
+            ],
+        },
+        months: {
+            shorthand: [
+                "Jan",
+                "Feb",
+                "Már",
+                "Ápr",
+                "Máj",
+                "Jún",
+                "Júl",
+                "Aug",
+                "Szep",
+                "Okt",
+                "Nov",
+                "Dec",
+            ],
+            longhand: [
+                "Január",
+                "Február",
+                "Március",
+                "Április",
+                "Május",
+                "Június",
+                "Július",
+                "Augusztus",
+                "Szeptember",
+                "Október",
+                "November",
+                "December",
+            ],
+        },
+        ordinal: function () {
+            return ".";
+        },
+        weekAbbreviation: "Hét",
+        scrollTitle: "Görgessen",
+        toggleTitle: "Kattintson a váltáshoz",
+        rangeSeparator: " - ",
+        time_24hr: true,
+    };
+    fp$n.l10ns.hu = Hungarian;
+    fp$n.l10ns;
+
+    var fp$o = typeof window !== "undefined" && window.flatpickr !== undefined
+        ? window.flatpickr
+        : {
+            l10ns: {},
+        };
+    var Indonesian = {
+        weekdays: {
+            shorthand: ["Min", "Sen", "Sel", "Rab", "Kam", "Jum", "Sab"],
+            longhand: ["Minggu", "Senin", "Selasa", "Rabu", "Kamis", "Jumat", "Sabtu"],
+        },
+        months: {
+            shorthand: [
+                "Jan",
+                "Feb",
+                "Mar",
+                "Apr",
+                "Mei",
+                "Jun",
+                "Jul",
+                "Agu",
+                "Sep",
+                "Okt",
+                "Nov",
+                "Des",
+            ],
+            longhand: [
+                "Januari",
+                "Februari",
+                "Maret",
+                "April",
+                "Mei",
+                "Juni",
+                "Juli",
+                "Agustus",
+                "September",
+                "Oktober",
+                "November",
+                "Desember",
+            ],
+        },
+        firstDayOfWeek: 1,
+        ordinal: function () {
+            return "";
+        },
+        time_24hr: true,
+        rangeSeparator: " - ",
+    };
+    fp$o.l10ns.id = Indonesian;
+    fp$o.l10ns;
+
+    var fp$p = typeof window !== "undefined" && window.flatpickr !== undefined
+        ? window.flatpickr
+        : {
+            l10ns: {},
+        };
+    var Icelandic = {
+        weekdays: {
+            shorthand: ["Sun", "Mán", "Þri", "Mið", "Fim", "Fös", "Lau"],
+            longhand: [
+                "Sunnudagur",
+                "Mánudagur",
+                "Þriðjudagur",
+                "Miðvikudagur",
+                "Fimmtudagur",
+                "Föstudagur",
+                "Laugardagur",
+            ],
+        },
+        months: {
+            shorthand: [
+                "Jan",
+                "Feb",
+                "Mar",
+                "Apr",
+                "Maí",
+                "Jún",
+                "Júl",
+                "Ágú",
+                "Sep",
+                "Okt",
+                "Nóv",
+                "Des",
+            ],
+            longhand: [
+                "Janúar",
+                "Febrúar",
+                "Mars",
+                "Apríl",
+                "Maí",
+                "Júní",
+                "Júlí",
+                "Ágúst",
+                "September",
+                "Október",
+                "Nóvember",
+                "Desember",
+            ],
+        },
+        ordinal: function () {
+            return ".";
+        },
+        firstDayOfWeek: 1,
+        rangeSeparator: " til ",
+        weekAbbreviation: "vika",
+        yearAriaLabel: "Ár",
+        time_24hr: true,
+    };
+    fp$p.l10ns.is = Icelandic;
+    fp$p.l10ns;
+
+    var fp$q = typeof window !== "undefined" && window.flatpickr !== undefined
+        ? window.flatpickr
+        : {
+            l10ns: {},
+        };
+    var Italian = {
+        weekdays: {
+            shorthand: ["Dom", "Lun", "Mar", "Mer", "Gio", "Ven", "Sab"],
+            longhand: [
+                "Domenica",
+                "Lunedì",
+                "Martedì",
+                "Mercoledì",
+                "Giovedì",
+                "Venerdì",
+                "Sabato",
+            ],
+        },
+        months: {
+            shorthand: [
+                "Gen",
+                "Feb",
+                "Mar",
+                "Apr",
+                "Mag",
+                "Giu",
+                "Lug",
+                "Ago",
+                "Set",
+                "Ott",
+                "Nov",
+                "Dic",
+            ],
+            longhand: [
+                "Gennaio",
+                "Febbraio",
+                "Marzo",
+                "Aprile",
+                "Maggio",
+                "Giugno",
+                "Luglio",
+                "Agosto",
+                "Settembre",
+                "Ottobre",
+                "Novembre",
+                "Dicembre",
+            ],
+        },
+        firstDayOfWeek: 1,
+        ordinal: function () { return "°"; },
+        rangeSeparator: " al ",
+        weekAbbreviation: "Se",
+        scrollTitle: "Scrolla per aumentare",
+        toggleTitle: "Clicca per cambiare",
+        time_24hr: true,
+    };
+    fp$q.l10ns.it = Italian;
+    fp$q.l10ns;
+
+    var fp$r = typeof window !== "undefined" && window.flatpickr !== undefined
+        ? window.flatpickr
+        : {
+            l10ns: {},
+        };
+    var Japanese = {
+        weekdays: {
+            shorthand: ["日", "月", "火", "水", "木", "金", "土"],
+            longhand: [
+                "日曜日",
+                "月曜日",
+                "火曜日",
+                "水曜日",
+                "木曜日",
+                "金曜日",
+                "土曜日",
+            ],
+        },
+        months: {
+            shorthand: [
+                "1月",
+                "2月",
+                "3月",
+                "4月",
+                "5月",
+                "6月",
+                "7月",
+                "8月",
+                "9月",
+                "10月",
+                "11月",
+                "12月",
+            ],
+            longhand: [
+                "1月",
+                "2月",
+                "3月",
+                "4月",
+                "5月",
+                "6月",
+                "7月",
+                "8月",
+                "9月",
+                "10月",
+                "11月",
+                "12月",
+            ],
+        },
+        time_24hr: true,
+        rangeSeparator: " から ",
+        firstDayOfWeek: 1,
+    };
+    fp$r.l10ns.ja = Japanese;
+    fp$r.l10ns;
+
+    var fp$s = typeof window !== "undefined" && window.flatpickr !== undefined
+        ? window.flatpickr
+        : {
+            l10ns: {},
+        };
+    var Georgian = {
+        weekdays: {
+            shorthand: ["კვ", "ორ", "სა", "ოთ", "ხუ", "პა", "შა"],
+            longhand: [
+                "კვირა",
+                "ორშაბათი",
+                "სამშაბათი",
+                "ოთხშაბათი",
+                "ხუთშაბათი",
+                "პარასკევი",
+                "შაბათი",
+            ],
+        },
+        months: {
+            shorthand: [
+                "იან",
+                "თებ",
+                "მარ",
+                "აპრ",
+                "მაი",
+                "ივნ",
+                "ივლ",
+                "აგვ",
+                "სექ",
+                "ოქტ",
+                "ნოე",
+                "დეკ",
+            ],
+            longhand: [
+                "იანვარი",
+                "თებერვალი",
+                "მარტი",
+                "აპრილი",
+                "მაისი",
+                "ივნისი",
+                "ივლისი",
+                "აგვისტო",
+                "სექტემბერი",
+                "ოქტომბერი",
+                "ნოემბერი",
+                "დეკემბერი",
+            ],
+        },
+        firstDayOfWeek: 1,
+        ordinal: function () {
+            return "";
+        },
+        rangeSeparator: " — ",
+        weekAbbreviation: "კვ.",
+        scrollTitle: "დასქროლეთ გასადიდებლად",
+        toggleTitle: "დააკლიკეთ გადართვისთვის",
+        amPM: ["AM", "PM"],
+        yearAriaLabel: "წელი",
+        time_24hr: true,
+    };
+    fp$s.l10ns.ka = Georgian;
+    fp$s.l10ns;
+
+    var fp$t = typeof window !== "undefined" && window.flatpickr !== undefined
+        ? window.flatpickr
+        : {
+            l10ns: {},
+        };
+    var Korean = {
+        weekdays: {
+            shorthand: ["일", "월", "화", "수", "목", "금", "토"],
+            longhand: [
+                "일요일",
+                "월요일",
+                "화요일",
+                "수요일",
+                "목요일",
+                "금요일",
+                "토요일",
+            ],
+        },
+        months: {
+            shorthand: [
+                "1월",
+                "2월",
+                "3월",
+                "4월",
+                "5월",
+                "6월",
+                "7월",
+                "8월",
+                "9월",
+                "10월",
+                "11월",
+                "12월",
+            ],
+            longhand: [
+                "1월",
+                "2월",
+                "3월",
+                "4월",
+                "5월",
+                "6월",
+                "7월",
+                "8월",
+                "9월",
+                "10월",
+                "11월",
+                "12월",
+            ],
+        },
+        ordinal: function () {
+            return "일";
+        },
+        rangeSeparator: " ~ ",
+    };
+    fp$t.l10ns.ko = Korean;
+    fp$t.l10ns;
+
+    var fp$u = typeof window !== "undefined" && window.flatpickr !== undefined
+        ? window.flatpickr
+        : {
+            l10ns: {},
+        };
+    var Khmer = {
+        weekdays: {
+            shorthand: ["អាទិត្យ", "ចន្ទ", "អង្គារ", "ពុធ", "ព្រហស.", "សុក្រ", "សៅរ៍"],
+            longhand: [
+                "អាទិត្យ",
+                "ចន្ទ",
+                "អង្គារ",
+                "ពុធ",
+                "ព្រហស្បតិ៍",
+                "សុក្រ",
+                "សៅរ៍",
+            ],
+        },
+        months: {
+            shorthand: [
+                "មករា",
+                "កុម្ភះ",
+                "មីនា",
+                "មេសា",
+                "ឧសភា",
+                "មិថុនា",
+                "កក្កដា",
+                "សីហា",
+                "កញ្ញា",
+                "តុលា",
+                "វិច្ឆិកា",
+                "ធ្នូ",
+            ],
+            longhand: [
+                "មករា",
+                "កុម្ភះ",
+                "មីនា",
+                "មេសា",
+                "ឧសភា",
+                "មិថុនា",
+                "កក្កដា",
+                "សីហា",
+                "កញ្ញា",
+                "តុលា",
+                "វិច្ឆិកា",
+                "ធ្នូ",
+            ],
+        },
+        ordinal: function () {
+            return "";
+        },
+        firstDayOfWeek: 1,
+        rangeSeparator: " ដល់ ",
+        weekAbbreviation: "សប្តាហ៍",
+        scrollTitle: "រំកិលដើម្បីបង្កើន",
+        toggleTitle: "ចុចដើម្បីផ្លាស់ប្ដូរ",
+        yearAriaLabel: "ឆ្នាំ",
+        time_24hr: true,
+    };
+    fp$u.l10ns.km = Khmer;
+    fp$u.l10ns;
+
+    var fp$v = typeof window !== "undefined" && window.flatpickr !== undefined
+        ? window.flatpickr
+        : {
+            l10ns: {},
+        };
+    var Kazakh = {
+        weekdays: {
+            shorthand: ["Жс", "Дс", "Сc", "Ср", "Бс", "Жм", "Сб"],
+            longhand: [
+                "Жексенбi",
+                "Дүйсенбi",
+                "Сейсенбi",
+                "Сәрсенбi",
+                "Бейсенбi",
+                "Жұма",
+                "Сенбi",
+            ],
+        },
+        months: {
+            shorthand: [
+                "Қаң",
+                "Ақп",
+                "Нау",
+                "Сәу",
+                "Мам",
+                "Мау",
+                "Шiл",
+                "Там",
+                "Қыр",
+                "Қаз",
+                "Қар",
+                "Жел",
+            ],
+            longhand: [
+                "Қаңтар",
+                "Ақпан",
+                "Наурыз",
+                "Сәуiр",
+                "Мамыр",
+                "Маусым",
+                "Шiлде",
+                "Тамыз",
+                "Қыркүйек",
+                "Қазан",
+                "Қараша",
+                "Желтоқсан",
+            ],
+        },
+        firstDayOfWeek: 1,
+        ordinal: function () {
+            return "";
+        },
+        rangeSeparator: " — ",
+        weekAbbreviation: "Апта",
+        scrollTitle: "Үлкейту үшін айналдырыңыз",
+        toggleTitle: "Ауыстыру үшін басыңыз",
+        amPM: ["ТД", "ТК"],
+        yearAriaLabel: "Жыл",
+    };
+    fp$v.l10ns.kz = Kazakh;
+    fp$v.l10ns;
+
+    var fp$w = typeof window !== "undefined" && window.flatpickr !== undefined
+        ? window.flatpickr
+        : {
+            l10ns: {},
+        };
+    var Lithuanian = {
+        weekdays: {
+            shorthand: ["S", "Pr", "A", "T", "K", "Pn", "Š"],
+            longhand: [
+                "Sekmadienis",
+                "Pirmadienis",
+                "Antradienis",
+                "Trečiadienis",
+                "Ketvirtadienis",
+                "Penktadienis",
+                "Šeštadienis",
+            ],
+        },
+        months: {
+            shorthand: [
+                "Sau",
+                "Vas",
+                "Kov",
+                "Bal",
+                "Geg",
+                "Bir",
+                "Lie",
+                "Rgp",
+                "Rgs",
+                "Spl",
+                "Lap",
+                "Grd",
+            ],
+            longhand: [
+                "Sausis",
+                "Vasaris",
+                "Kovas",
+                "Balandis",
+                "Gegužė",
+                "Birželis",
+                "Liepa",
+                "Rugpjūtis",
+                "Rugsėjis",
+                "Spalis",
+                "Lapkritis",
+                "Gruodis",
+            ],
+        },
+        firstDayOfWeek: 1,
+        ordinal: function () {
+            return "-a";
+        },
+        rangeSeparator: " iki ",
+        weekAbbreviation: "Sav",
+        scrollTitle: "Keisti laiką pelės rateliu",
+        toggleTitle: "Perjungti laiko formatą",
+        time_24hr: true,
+    };
+    fp$w.l10ns.lt = Lithuanian;
+    fp$w.l10ns;
+
+    var fp$x = typeof window !== "undefined" && window.flatpickr !== undefined
+        ? window.flatpickr
+        : {
+            l10ns: {},
+        };
+    var Latvian = {
+        firstDayOfWeek: 1,
+        weekdays: {
+            shorthand: ["Sv", "Pr", "Ot", "Tr", "Ce", "Pk", "Se"],
+            longhand: [
+                "Svētdiena",
+                "Pirmdiena",
+                "Otrdiena",
+                "Trešdiena",
+                "Ceturtdiena",
+                "Piektdiena",
+                "Sestdiena",
+            ],
+        },
+        months: {
+            shorthand: [
+                "Jan",
+                "Feb",
+                "Mar",
+                "Apr",
+                "Mai",
+                "Jūn",
+                "Jūl",
+                "Aug",
+                "Sep",
+                "Okt",
+                "Nov",
+                "Dec",
+            ],
+            longhand: [
+                "Janvāris",
+                "Februāris",
+                "Marts",
+                "Aprīlis",
+                "Maijs",
+                "Jūnijs",
+                "Jūlijs",
+                "Augusts",
+                "Septembris",
+                "Oktobris",
+                "Novembris",
+                "Decembris",
+            ],
+        },
+        rangeSeparator: " līdz ",
+        time_24hr: true,
+    };
+    fp$x.l10ns.lv = Latvian;
+    fp$x.l10ns;
+
+    var fp$y = typeof window !== "undefined" && window.flatpickr !== undefined
+        ? window.flatpickr
+        : {
+            l10ns: {},
+        };
+    var Macedonian = {
+        weekdays: {
+            shorthand: ["Не", "По", "Вт", "Ср", "Че", "Пе", "Са"],
+            longhand: [
+                "Недела",
+                "Понеделник",
+                "Вторник",
+                "Среда",
+                "Четврток",
+                "Петок",
+                "Сабота",
+            ],
+        },
+        months: {
+            shorthand: [
+                "Јан",
+                "Фев",
+                "Мар",
+                "Апр",
+                "Мај",
+                "Јун",
+                "Јул",
+                "Авг",
+                "Сеп",
+                "Окт",
+                "Ное",
+                "Дек",
+            ],
+            longhand: [
+                "Јануари",
+                "Февруари",
+                "Март",
+                "Април",
+                "Мај",
+                "Јуни",
+                "Јули",
+                "Август",
+                "Септември",
+                "Октомври",
+                "Ноември",
+                "Декември",
+            ],
+        },
+        firstDayOfWeek: 1,
+        weekAbbreviation: "Нед.",
+        rangeSeparator: " до ",
+        time_24hr: true,
+    };
+    fp$y.l10ns.mk = Macedonian;
+    fp$y.l10ns;
+
+    var fp$z = typeof window !== "undefined" && window.flatpickr !== undefined
+        ? window.flatpickr
+        : {
+            l10ns: {},
+        };
+    var Mongolian = {
+        firstDayOfWeek: 1,
+        weekdays: {
+            shorthand: ["Да", "Мя", "Лх", "Пү", "Ба", "Бя", "Ня"],
+            longhand: ["Даваа", "Мягмар", "Лхагва", "Пүрэв", "Баасан", "Бямба", "Ням"],
+        },
+        months: {
+            shorthand: [
+                "1-р сар",
+                "2-р сар",
+                "3-р сар",
+                "4-р сар",
+                "5-р сар",
+                "6-р сар",
+                "7-р сар",
+                "8-р сар",
+                "9-р сар",
+                "10-р сар",
+                "11-р сар",
+                "12-р сар",
+            ],
+            longhand: [
+                "Нэгдүгээр сар",
+                "Хоёрдугаар сар",
+                "Гуравдугаар сар",
+                "Дөрөвдүгээр сар",
+                "Тавдугаар сар",
+                "Зургаадугаар сар",
+                "Долдугаар сар",
+                "Наймдугаар сар",
+                "Есдүгээр сар",
+                "Аравдугаар сар",
+                "Арваннэгдүгээр сар",
+                "Арванхоёрдугаар сар",
+            ],
+        },
+        rangeSeparator: "-с ",
+        time_24hr: true,
+    };
+    fp$z.l10ns.mn = Mongolian;
+    fp$z.l10ns;
+
+    var fp$A = typeof window !== "undefined" && window.flatpickr !== undefined
+        ? window.flatpickr
+        : {
+            l10ns: {},
+        };
+    var Malaysian = {
+        weekdays: {
+            shorthand: ["Min", "Isn", "Sel", "Rab", "Kha", "Jum", "Sab"],
+            longhand: [
+                "Minggu",
+                "Isnin",
+                "Selasa",
+                "Rabu",
+                "Khamis",
+                "Jumaat",
+                "Sabtu",
+            ],
+        },
+        months: {
+            shorthand: [
+                "Jan",
+                "Feb",
+                "Mac",
+                "Apr",
+                "Mei",
+                "Jun",
+                "Jul",
+                "Ogo",
+                "Sep",
+                "Okt",
+                "Nov",
+                "Dis",
+            ],
+            longhand: [
+                "Januari",
+                "Februari",
+                "Mac",
+                "April",
+                "Mei",
+                "Jun",
+                "Julai",
+                "Ogos",
+                "September",
+                "Oktober",
+                "November",
+                "Disember",
+            ],
+        },
+        firstDayOfWeek: 1,
+        ordinal: function () {
+            return "";
+        },
+    };
+    fp$A.l10ns;
+
+    var fp$B = typeof window !== "undefined" && window.flatpickr !== undefined
+        ? window.flatpickr
+        : {
+            l10ns: {},
+        };
+    var Burmese = {
+        weekdays: {
+            shorthand: ["နွေ", "လာ", "ဂါ", "ဟူး", "ကြာ", "သော", "နေ"],
+            longhand: [
+                "တနင်္ဂနွေ",
+                "တနင်္လာ",
+                "အင်္ဂါ",
+                "ဗုဒ္ဓဟူး",
+                "ကြာသပတေး",
+                "သောကြာ",
+                "စနေ",
+            ],
+        },
+        months: {
+            shorthand: [
+                "ဇန်",
+                "ဖေ",
+                "မတ်",
+                "ပြီ",
+                "မေ",
+                "ဇွန်",
+                "လိုင်",
+                "သြ",
+                "စက်",
+                "အောက်",
+                "နို",
+                "ဒီ",
+            ],
+            longhand: [
+                "ဇန်နဝါရီ",
+                "ဖေဖော်ဝါရီ",
+                "မတ်",
+                "ဧပြီ",
+                "မေ",
+                "ဇွန်",
+                "ဇူလိုင်",
+                "သြဂုတ်",
+                "စက်တင်ဘာ",
+                "အောက်တိုဘာ",
+                "နိုဝင်ဘာ",
+                "ဒီဇင်ဘာ",
+            ],
+        },
+        firstDayOfWeek: 1,
+        ordinal: function () {
+            return "";
+        },
+        time_24hr: true,
+    };
+    fp$B.l10ns.my = Burmese;
+    fp$B.l10ns;
+
+    var fp$C = typeof window !== "undefined" && window.flatpickr !== undefined
+        ? window.flatpickr
+        : {
+            l10ns: {},
+        };
+    var Dutch = {
+        weekdays: {
+            shorthand: ["zo", "ma", "di", "wo", "do", "vr", "za"],
+            longhand: [
+                "zondag",
+                "maandag",
+                "dinsdag",
+                "woensdag",
+                "donderdag",
+                "vrijdag",
+                "zaterdag",
+            ],
+        },
+        months: {
+            shorthand: [
+                "jan",
+                "feb",
+                "mrt",
+                "apr",
+                "mei",
+                "jun",
+                "jul",
+                "aug",
+                "sept",
+                "okt",
+                "nov",
+                "dec",
+            ],
+            longhand: [
+                "januari",
+                "februari",
+                "maart",
+                "april",
+                "mei",
+                "juni",
+                "juli",
+                "augustus",
+                "september",
+                "oktober",
+                "november",
+                "december",
+            ],
+        },
+        firstDayOfWeek: 1,
+        weekAbbreviation: "wk",
+        rangeSeparator: " t/m ",
+        scrollTitle: "Scroll voor volgende / vorige",
+        toggleTitle: "Klik om te wisselen",
+        time_24hr: true,
+        ordinal: function (nth) {
+            if (nth === 1 || nth === 8 || nth >= 20)
+                return "ste";
+            return "de";
+        },
+    };
+    fp$C.l10ns.nl = Dutch;
+    fp$C.l10ns;
+
+    var fp$D = typeof window !== "undefined" && window.flatpickr !== undefined
+        ? window.flatpickr
+        : {
+            l10ns: {},
+        };
+    var Norwegian = {
+        weekdays: {
+            shorthand: ["Søn", "Man", "Tir", "Ons", "Tor", "Fre", "Lør"],
+            longhand: [
+                "Søndag",
+                "Mandag",
+                "Tirsdag",
+                "Onsdag",
+                "Torsdag",
+                "Fredag",
+                "Lørdag",
+            ],
+        },
+        months: {
+            shorthand: [
+                "Jan",
+                "Feb",
+                "Mar",
+                "Apr",
+                "Mai",
+                "Jun",
+                "Jul",
+                "Aug",
+                "Sep",
+                "Okt",
+                "Nov",
+                "Des",
+            ],
+            longhand: [
+                "Januar",
+                "Februar",
+                "Mars",
+                "April",
+                "Mai",
+                "Juni",
+                "Juli",
+                "August",
+                "September",
+                "Oktober",
+                "November",
+                "Desember",
+            ],
+        },
+        firstDayOfWeek: 1,
+        rangeSeparator: " til ",
+        weekAbbreviation: "Uke",
+        scrollTitle: "Scroll for å endre",
+        toggleTitle: "Klikk for å veksle",
+        time_24hr: true,
+        ordinal: function () {
+            return ".";
+        },
+    };
+    fp$D.l10ns.no = Norwegian;
+    fp$D.l10ns;
+
+    var fp$E = typeof window !== "undefined" && window.flatpickr !== undefined
+        ? window.flatpickr
+        : {
+            l10ns: {},
+        };
+    var Punjabi = {
+        weekdays: {
+            shorthand: ["ਐਤ", "ਸੋਮ", "ਮੰਗਲ", "ਬੁੱਧ", "ਵੀਰ", "ਸ਼ੁੱਕਰ", "ਸ਼ਨਿੱਚਰ"],
+            longhand: [
+                "ਐਤਵਾਰ",
+                "ਸੋਮਵਾਰ",
+                "ਮੰਗਲਵਾਰ",
+                "ਬੁੱਧਵਾਰ",
+                "ਵੀਰਵਾਰ",
+                "ਸ਼ੁੱਕਰਵਾਰ",
+                "ਸ਼ਨਿੱਚਰਵਾਰ",
+            ],
+        },
+        months: {
+            shorthand: [
+                "ਜਨ",
+                "ਫ਼ਰ",
+                "ਮਾਰ",
+                "ਅਪ੍ਰੈ",
+                "ਮਈ",
+                "ਜੂਨ",
+                "ਜੁਲਾ",
+                "ਅਗ",
+                "ਸਤੰ",
+                "ਅਕ",
+                "ਨਵੰ",
+                "ਦਸੰ",
+            ],
+            longhand: [
+                "ਜਨਵਰੀ",
+                "ਫ਼ਰਵਰੀ",
+                "ਮਾਰਚ",
+                "ਅਪ੍ਰੈਲ",
+                "ਮਈ",
+                "ਜੂਨ",
+                "ਜੁਲਾਈ",
+                "ਅਗਸਤ",
+                "ਸਤੰਬਰ",
+                "ਅਕਤੂਬਰ",
+                "ਨਵੰਬਰ",
+                "ਦਸੰਬਰ",
+            ],
+        },
+        time_24hr: true,
+    };
+    fp$E.l10ns.pa = Punjabi;
+    fp$E.l10ns;
+
+    var fp$F = typeof window !== "undefined" && window.flatpickr !== undefined
+        ? window.flatpickr
+        : {
+            l10ns: {},
+        };
+    var Polish = {
+        weekdays: {
+            shorthand: ["Nd", "Pn", "Wt", "Śr", "Cz", "Pt", "So"],
+            longhand: [
+                "Niedziela",
+                "Poniedziałek",
+                "Wtorek",
+                "Środa",
+                "Czwartek",
+                "Piątek",
+                "Sobota",
+            ],
+        },
+        months: {
+            shorthand: [
+                "Sty",
+                "Lut",
+                "Mar",
+                "Kwi",
+                "Maj",
+                "Cze",
+                "Lip",
+                "Sie",
+                "Wrz",
+                "Paź",
+                "Lis",
+                "Gru",
+            ],
+            longhand: [
+                "Styczeń",
+                "Luty",
+                "Marzec",
+                "Kwiecień",
+                "Maj",
+                "Czerwiec",
+                "Lipiec",
+                "Sierpień",
+                "Wrzesień",
+                "Październik",
+                "Listopad",
+                "Grudzień",
+            ],
+        },
+        rangeSeparator: " do ",
+        weekAbbreviation: "tydz.",
+        scrollTitle: "Przewiń, aby zwiększyć",
+        toggleTitle: "Kliknij, aby przełączyć",
+        firstDayOfWeek: 1,
+        time_24hr: true,
+        ordinal: function () {
+            return ".";
+        },
+    };
+    fp$F.l10ns.pl = Polish;
+    fp$F.l10ns;
+
+    var fp$G = typeof window !== "undefined" && window.flatpickr !== undefined
+        ? window.flatpickr
+        : {
+            l10ns: {},
+        };
+    var Portuguese = {
+        weekdays: {
+            shorthand: ["Dom", "Seg", "Ter", "Qua", "Qui", "Sex", "Sáb"],
+            longhand: [
+                "Domingo",
+                "Segunda-feira",
+                "Terça-feira",
+                "Quarta-feira",
+                "Quinta-feira",
+                "Sexta-feira",
+                "Sábado",
+            ],
+        },
+        months: {
+            shorthand: [
+                "Jan",
+                "Fev",
+                "Mar",
+                "Abr",
+                "Mai",
+                "Jun",
+                "Jul",
+                "Ago",
+                "Set",
+                "Out",
+                "Nov",
+                "Dez",
+            ],
+            longhand: [
+                "Janeiro",
+                "Fevereiro",
+                "Março",
+                "Abril",
+                "Maio",
+                "Junho",
+                "Julho",
+                "Agosto",
+                "Setembro",
+                "Outubro",
+                "Novembro",
+                "Dezembro",
+            ],
+        },
+        rangeSeparator: " até ",
+        time_24hr: true,
+    };
+    fp$G.l10ns.pt = Portuguese;
+    fp$G.l10ns;
+
+    var fp$H = typeof window !== "undefined" && window.flatpickr !== undefined
+        ? window.flatpickr
+        : {
+            l10ns: {},
+        };
+    var Romanian = {
+        weekdays: {
+            shorthand: ["Dum", "Lun", "Mar", "Mie", "Joi", "Vin", "Sâm"],
+            longhand: [
+                "Duminică",
+                "Luni",
+                "Marți",
+                "Miercuri",
+                "Joi",
+                "Vineri",
+                "Sâmbătă",
+            ],
+        },
+        months: {
+            shorthand: [
+                "Ian",
+                "Feb",
+                "Mar",
+                "Apr",
+                "Mai",
+                "Iun",
+                "Iul",
+                "Aug",
+                "Sep",
+                "Oct",
+                "Noi",
+                "Dec",
+            ],
+            longhand: [
+                "Ianuarie",
+                "Februarie",
+                "Martie",
+                "Aprilie",
+                "Mai",
+                "Iunie",
+                "Iulie",
+                "August",
+                "Septembrie",
+                "Octombrie",
+                "Noiembrie",
+                "Decembrie",
+            ],
+        },
+        firstDayOfWeek: 1,
+        time_24hr: true,
+        ordinal: function () {
+            return "";
+        },
+    };
+    fp$H.l10ns.ro = Romanian;
+    fp$H.l10ns;
+
+    var fp$I = typeof window !== "undefined" && window.flatpickr !== undefined
+        ? window.flatpickr
+        : {
+            l10ns: {},
+        };
+    var Russian = {
+        weekdays: {
+            shorthand: ["Вс", "Пн", "Вт", "Ср", "Чт", "Пт", "Сб"],
+            longhand: [
+                "Воскресенье",
+                "Понедельник",
+                "Вторник",
+                "Среда",
+                "Четверг",
+                "Пятница",
+                "Суббота",
+            ],
+        },
+        months: {
+            shorthand: [
+                "Янв",
+                "Фев",
+                "Март",
+                "Апр",
+                "Май",
+                "Июнь",
+                "Июль",
+                "Авг",
+                "Сен",
+                "Окт",
+                "Ноя",
+                "Дек",
+            ],
+            longhand: [
+                "Январь",
+                "Февраль",
+                "Март",
+                "Апрель",
+                "Май",
+                "Июнь",
+                "Июль",
+                "Август",
+                "Сентябрь",
+                "Октябрь",
+                "Ноябрь",
+                "Декабрь",
+            ],
+        },
+        firstDayOfWeek: 1,
+        ordinal: function () {
+            return "";
+        },
+        rangeSeparator: " — ",
+        weekAbbreviation: "Нед.",
+        scrollTitle: "Прокрутите для увеличения",
+        toggleTitle: "Нажмите для переключения",
+        amPM: ["ДП", "ПП"],
+        yearAriaLabel: "Год",
+        time_24hr: true,
+    };
+    fp$I.l10ns.ru = Russian;
+    fp$I.l10ns;
+
+    var fp$J = typeof window !== "undefined" && window.flatpickr !== undefined
+        ? window.flatpickr
+        : {
+            l10ns: {},
+        };
+    var Sinhala = {
+        weekdays: {
+            shorthand: ["ඉ", "ස", "අ", "බ", "බ්‍ර", "සි", "සෙ"],
+            longhand: [
+                "ඉරිදා",
+                "සඳුදා",
+                "අඟහරුවාදා",
+                "බදාදා",
+                "බ්‍රහස්පතින්දා",
+                "සිකුරාදා",
+                "සෙනසුරාදා",
+            ],
+        },
+        months: {
+            shorthand: [
+                "ජන",
+                "පෙබ",
+                "මාර්",
+                "අප්‍රේ",
+                "මැයි",
+                "ජුනි",
+                "ජූලි",
+                "අගෝ",
+                "සැප්",
+                "ඔක්",
+                "නොවැ",
+                "දෙසැ",
+            ],
+            longhand: [
+                "ජනවාරි",
+                "පෙබරවාරි",
+                "මාර්තු",
+                "අප්‍රේල්",
+                "මැයි",
+                "ජුනි",
+                "ජූලි",
+                "අගෝස්තු",
+                "සැප්තැම්බර්",
+                "ඔක්තෝබර්",
+                "නොවැම්බර්",
+                "දෙසැම්බර්",
+            ],
+        },
+        time_24hr: true,
+    };
+    fp$J.l10ns.si = Sinhala;
+    fp$J.l10ns;
+
+    var fp$K = typeof window !== "undefined" && window.flatpickr !== undefined
+        ? window.flatpickr
+        : {
+            l10ns: {},
+        };
+    var Slovak = {
+        weekdays: {
+            shorthand: ["Ned", "Pon", "Ut", "Str", "Štv", "Pia", "Sob"],
+            longhand: [
+                "Nedeľa",
+                "Pondelok",
+                "Utorok",
+                "Streda",
+                "Štvrtok",
+                "Piatok",
+                "Sobota",
+            ],
+        },
+        months: {
+            shorthand: [
+                "Jan",
+                "Feb",
+                "Mar",
+                "Apr",
+                "Máj",
+                "Jún",
+                "Júl",
+                "Aug",
+                "Sep",
+                "Okt",
+                "Nov",
+                "Dec",
+            ],
+            longhand: [
+                "Január",
+                "Február",
+                "Marec",
+                "Apríl",
+                "Máj",
+                "Jún",
+                "Júl",
+                "August",
+                "September",
+                "Október",
+                "November",
+                "December",
+            ],
+        },
+        firstDayOfWeek: 1,
+        rangeSeparator: " do ",
+        time_24hr: true,
+        ordinal: function () {
+            return ".";
+        },
+    };
+    fp$K.l10ns.sk = Slovak;
+    fp$K.l10ns;
+
+    var fp$L = typeof window !== "undefined" && window.flatpickr !== undefined
+        ? window.flatpickr
+        : {
+            l10ns: {},
+        };
+    var Slovenian = {
+        weekdays: {
+            shorthand: ["Ned", "Pon", "Tor", "Sre", "Čet", "Pet", "Sob"],
+            longhand: [
+                "Nedelja",
+                "Ponedeljek",
+                "Torek",
+                "Sreda",
+                "Četrtek",
+                "Petek",
+                "Sobota",
+            ],
+        },
+        months: {
+            shorthand: [
+                "Jan",
+                "Feb",
+                "Mar",
+                "Apr",
+                "Maj",
+                "Jun",
+                "Jul",
+                "Avg",
+                "Sep",
+                "Okt",
+                "Nov",
+                "Dec",
+            ],
+            longhand: [
+                "Januar",
+                "Februar",
+                "Marec",
+                "April",
+                "Maj",
+                "Junij",
+                "Julij",
+                "Avgust",
+                "September",
+                "Oktober",
+                "November",
+                "December",
+            ],
+        },
+        firstDayOfWeek: 1,
+        rangeSeparator: " do ",
+        time_24hr: true,
+        ordinal: function () {
+            return ".";
+        },
+    };
+    fp$L.l10ns.sl = Slovenian;
+    fp$L.l10ns;
+
+    var fp$M = typeof window !== "undefined" && window.flatpickr !== undefined
+        ? window.flatpickr
+        : {
+            l10ns: {},
+        };
+    var Albanian = {
+        weekdays: {
+            shorthand: ["Di", "Hë", "Ma", "Më", "En", "Pr", "Sh"],
+            longhand: [
+                "E Diel",
+                "E Hënë",
+                "E Martë",
+                "E Mërkurë",
+                "E Enjte",
+                "E Premte",
+                "E Shtunë",
+            ],
+        },
+        months: {
+            shorthand: [
+                "Jan",
+                "Shk",
+                "Mar",
+                "Pri",
+                "Maj",
+                "Qer",
+                "Kor",
+                "Gus",
+                "Sht",
+                "Tet",
+                "Nën",
+                "Dhj",
+            ],
+            longhand: [
+                "Janar",
+                "Shkurt",
+                "Mars",
+                "Prill",
+                "Maj",
+                "Qershor",
+                "Korrik",
+                "Gusht",
+                "Shtator",
+                "Tetor",
+                "Nëntor",
+                "Dhjetor",
+            ],
+        },
+        time_24hr: true,
+    };
+    fp$M.l10ns.sq = Albanian;
+    fp$M.l10ns;
+
+    var fp$N = typeof window !== "undefined" && window.flatpickr !== undefined
+        ? window.flatpickr
+        : {
+            l10ns: {},
+        };
+    var Serbian = {
+        weekdays: {
+            shorthand: ["Ned", "Pon", "Uto", "Sre", "Čet", "Pet", "Sub"],
+            longhand: [
+                "Nedelja",
+                "Ponedeljak",
+                "Utorak",
+                "Sreda",
+                "Četvrtak",
+                "Petak",
+                "Subota",
+            ],
+        },
+        months: {
+            shorthand: [
+                "Jan",
+                "Feb",
+                "Mar",
+                "Apr",
+                "Maj",
+                "Jun",
+                "Jul",
+                "Avg",
+                "Sep",
+                "Okt",
+                "Nov",
+                "Dec",
+            ],
+            longhand: [
+                "Januar",
+                "Februar",
+                "Mart",
+                "April",
+                "Maj",
+                "Jun",
+                "Jul",
+                "Avgust",
+                "Septembar",
+                "Oktobar",
+                "Novembar",
+                "Decembar",
+            ],
+        },
+        firstDayOfWeek: 1,
+        weekAbbreviation: "Ned.",
+        rangeSeparator: " do ",
+        time_24hr: true,
+    };
+    fp$N.l10ns.sr = Serbian;
+    fp$N.l10ns;
+
+    var fp$O = typeof window !== "undefined" && window.flatpickr !== undefined
+        ? window.flatpickr
+        : {
+            l10ns: {},
+        };
+    var Swedish = {
+        firstDayOfWeek: 1,
+        weekAbbreviation: "v",
+        weekdays: {
+            shorthand: ["Sön", "Mån", "Tis", "Ons", "Tor", "Fre", "Lör"],
+            longhand: [
+                "Söndag",
+                "Måndag",
+                "Tisdag",
+                "Onsdag",
+                "Torsdag",
+                "Fredag",
+                "Lördag",
+            ],
+        },
+        months: {
+            shorthand: [
+                "Jan",
+                "Feb",
+                "Mar",
+                "Apr",
+                "Maj",
+                "Jun",
+                "Jul",
+                "Aug",
+                "Sep",
+                "Okt",
+                "Nov",
+                "Dec",
+            ],
+            longhand: [
+                "Januari",
+                "Februari",
+                "Mars",
+                "April",
+                "Maj",
+                "Juni",
+                "Juli",
+                "Augusti",
+                "September",
+                "Oktober",
+                "November",
+                "December",
+            ],
+        },
+        time_24hr: true,
+        ordinal: function () {
+            return ".";
+        },
+    };
+    fp$O.l10ns.sv = Swedish;
+    fp$O.l10ns;
+
+    var fp$P = typeof window !== "undefined" && window.flatpickr !== undefined
+        ? window.flatpickr
+        : {
+            l10ns: {},
+        };
+    var Thai = {
+        weekdays: {
+            shorthand: ["อา", "จ", "อ", "พ", "พฤ", "ศ", "ส"],
+            longhand: [
+                "อาทิตย์",
+                "จันทร์",
+                "อังคาร",
+                "พุธ",
+                "พฤหัสบดี",
+                "ศุกร์",
+                "เสาร์",
+            ],
+        },
+        months: {
+            shorthand: [
+                "ม.ค.",
+                "ก.พ.",
+                "มี.ค.",
+                "เม.ย.",
+                "พ.ค.",
+                "มิ.ย.",
+                "ก.ค.",
+                "ส.ค.",
+                "ก.ย.",
+                "ต.ค.",
+                "พ.ย.",
+                "ธ.ค.",
+            ],
+            longhand: [
+                "มกราคม",
+                "กุมภาพันธ์",
+                "มีนาคม",
+                "เมษายน",
+                "พฤษภาคม",
+                "มิถุนายน",
+                "กรกฎาคม",
+                "สิงหาคม",
+                "กันยายน",
+                "ตุลาคม",
+                "พฤศจิกายน",
+                "ธันวาคม",
+            ],
+        },
+        firstDayOfWeek: 1,
+        rangeSeparator: " ถึง ",
+        scrollTitle: "เลื่อนเพื่อเพิ่มหรือลด",
+        toggleTitle: "คลิกเพื่อเปลี่ยน",
+        time_24hr: true,
+        ordinal: function () {
+            return "";
+        },
+    };
+    fp$P.l10ns.th = Thai;
+    fp$P.l10ns;
+
+    var fp$Q = typeof window !== "undefined" && window.flatpickr !== undefined
+        ? window.flatpickr
+        : {
+            l10ns: {},
+        };
+    var Turkish = {
+        weekdays: {
+            shorthand: ["Paz", "Pzt", "Sal", "Çar", "Per", "Cum", "Cmt"],
+            longhand: [
+                "Pazar",
+                "Pazartesi",
+                "Salı",
+                "Çarşamba",
+                "Perşembe",
+                "Cuma",
+                "Cumartesi",
+            ],
+        },
+        months: {
+            shorthand: [
+                "Oca",
+                "Şub",
+                "Mar",
+                "Nis",
+                "May",
+                "Haz",
+                "Tem",
+                "Ağu",
+                "Eyl",
+                "Eki",
+                "Kas",
+                "Ara",
+            ],
+            longhand: [
+                "Ocak",
+                "Şubat",
+                "Mart",
+                "Nisan",
+                "Mayıs",
+                "Haziran",
+                "Temmuz",
+                "Ağustos",
+                "Eylül",
+                "Ekim",
+                "Kasım",
+                "Aralık",
+            ],
+        },
+        firstDayOfWeek: 1,
+        ordinal: function () {
+            return ".";
+        },
+        rangeSeparator: " - ",
+        weekAbbreviation: "Hf",
+        scrollTitle: "Artırmak için kaydırın",
+        toggleTitle: "Aç/Kapa",
+        amPM: ["ÖÖ", "ÖS"],
+        time_24hr: true,
+    };
+    fp$Q.l10ns.tr = Turkish;
+    fp$Q.l10ns;
+
+    var fp$R = typeof window !== "undefined" && window.flatpickr !== undefined
+        ? window.flatpickr
+        : {
+            l10ns: {},
+        };
+    var Ukrainian = {
+        firstDayOfWeek: 1,
+        weekdays: {
+            shorthand: ["Нд", "Пн", "Вт", "Ср", "Чт", "Пт", "Сб"],
+            longhand: [
+                "Неділя",
+                "Понеділок",
+                "Вівторок",
+                "Середа",
+                "Четвер",
+                "П'ятниця",
+                "Субота",
+            ],
+        },
+        months: {
+            shorthand: [
+                "Січ",
+                "Лют",
+                "Бер",
+                "Кві",
+                "Тра",
+                "Чер",
+                "Лип",
+                "Сер",
+                "Вер",
+                "Жов",
+                "Лис",
+                "Гру",
+            ],
+            longhand: [
+                "Січень",
+                "Лютий",
+                "Березень",
+                "Квітень",
+                "Травень",
+                "Червень",
+                "Липень",
+                "Серпень",
+                "Вересень",
+                "Жовтень",
+                "Листопад",
+                "Грудень",
+            ],
+        },
+        time_24hr: true,
+    };
+    fp$R.l10ns.uk = Ukrainian;
+    fp$R.l10ns;
+
+    var fp$S = typeof window !== "undefined" && window.flatpickr !== undefined
+        ? window.flatpickr
+        : {
+            l10ns: {},
+        };
+    var Uzbek = {
+        weekdays: {
+            shorthand: ["Якш", "Душ", "Сеш", "Чор", "Пай", "Жум", "Шан"],
+            longhand: [
+                "Якшанба",
+                "Душанба",
+                "Сешанба",
+                "Чоршанба",
+                "Пайшанба",
+                "Жума",
+                "Шанба",
+            ],
+        },
+        months: {
+            shorthand: [
+                "Янв",
+                "Фев",
+                "Мар",
+                "Апр",
+                "Май",
+                "Июн",
+                "Июл",
+                "Авг",
+                "Сен",
+                "Окт",
+                "Ноя",
+                "Дек",
+            ],
+            longhand: [
+                "Январ",
+                "Феврал",
+                "Март",
+                "Апрел",
+                "Май",
+                "Июн",
+                "Июл",
+                "Август",
+                "Сентябр",
+                "Октябр",
+                "Ноябр",
+                "Декабр",
+            ],
+        },
+        firstDayOfWeek: 1,
+        ordinal: function () {
+            return "";
+        },
+        rangeSeparator: " — ",
+        weekAbbreviation: "Ҳафта",
+        scrollTitle: "Катталаштириш учун айлантиринг",
+        toggleTitle: "Ўтиш учун босинг",
+        amPM: ["AM", "PM"],
+        yearAriaLabel: "Йил",
+        time_24hr: true,
+    };
+    fp$S.l10ns.uz = Uzbek;
+    fp$S.l10ns;
+
+    var fp$T = typeof window !== "undefined" && window.flatpickr !== undefined
+        ? window.flatpickr
+        : {
+            l10ns: {},
+        };
+    var UzbekLatin = {
+        weekdays: {
+            shorthand: ["Ya", "Du", "Se", "Cho", "Pa", "Ju", "Sha"],
+            longhand: [
+                "Yakshanba",
+                "Dushanba",
+                "Seshanba",
+                "Chorshanba",
+                "Payshanba",
+                "Juma",
+                "Shanba",
+            ],
+        },
+        months: {
+            shorthand: [
+                "Yan",
+                "Fev",
+                "Mar",
+                "Apr",
+                "May",
+                "Iyun",
+                "Iyul",
+                "Avg",
+                "Sen",
+                "Okt",
+                "Noy",
+                "Dek",
+            ],
+            longhand: [
+                "Yanvar",
+                "Fevral",
+                "Mart",
+                "Aprel",
+                "May",
+                "Iyun",
+                "Iyul",
+                "Avgust",
+                "Sentabr",
+                "Oktabr",
+                "Noyabr",
+                "Dekabr",
+            ],
+        },
+        firstDayOfWeek: 1,
+        ordinal: function () {
+            return "";
+        },
+        rangeSeparator: " — ",
+        weekAbbreviation: "Hafta",
+        scrollTitle: "Kattalashtirish uchun aylantiring",
+        toggleTitle: "O‘tish uchun bosing",
+        amPM: ["AM", "PM"],
+        yearAriaLabel: "Yil",
+        time_24hr: true,
+    };
+    fp$T.l10ns["uz_latn"] = UzbekLatin;
+    fp$T.l10ns;
+
+    var fp$U = typeof window !== "undefined" && window.flatpickr !== undefined
+        ? window.flatpickr
+        : {
+            l10ns: {},
+        };
+    var Vietnamese = {
+        weekdays: {
+            shorthand: ["CN", "T2", "T3", "T4", "T5", "T6", "T7"],
+            longhand: [
+                "Chủ nhật",
+                "Thứ hai",
+                "Thứ ba",
+                "Thứ tư",
+                "Thứ năm",
+                "Thứ sáu",
+                "Thứ bảy",
+            ],
+        },
+        months: {
+            shorthand: [
+                "Th1",
+                "Th2",
+                "Th3",
+                "Th4",
+                "Th5",
+                "Th6",
+                "Th7",
+                "Th8",
+                "Th9",
+                "Th10",
+                "Th11",
+                "Th12",
+            ],
+            longhand: [
+                "Tháng một",
+                "Tháng hai",
+                "Tháng ba",
+                "Tháng tư",
+                "Tháng năm",
+                "Tháng sáu",
+                "Tháng bảy",
+                "Tháng tám",
+                "Tháng chín",
+                "Tháng mười",
+                "Tháng 11",
+                "Tháng 12",
+            ],
+        },
+        firstDayOfWeek: 1,
+        rangeSeparator: " đến ",
+    };
+    fp$U.l10ns.vn = Vietnamese;
+    fp$U.l10ns;
+
+    var fp$V = typeof window !== "undefined" && window.flatpickr !== undefined
+        ? window.flatpickr
+        : {
+            l10ns: {},
+        };
+    var Mandarin = {
+        weekdays: {
+            shorthand: ["周日", "周一", "周二", "周三", "周四", "周五", "周六"],
+            longhand: [
+                "星期日",
+                "星期一",
+                "星期二",
+                "星期三",
+                "星期四",
+                "星期五",
+                "星期六",
+            ],
+        },
+        months: {
+            shorthand: [
+                "一月",
+                "二月",
+                "三月",
+                "四月",
+                "五月",
+                "六月",
+                "七月",
+                "八月",
+                "九月",
+                "十月",
+                "十一月",
+                "十二月",
+            ],
+            longhand: [
+                "一月",
+                "二月",
+                "三月",
+                "四月",
+                "五月",
+                "六月",
+                "七月",
+                "八月",
+                "九月",
+                "十月",
+                "十一月",
+                "十二月",
+            ],
+        },
+        rangeSeparator: " 至 ",
+        weekAbbreviation: "周",
+        scrollTitle: "滚动切换",
+        toggleTitle: "点击切换 12/24 小时时制",
+    };
+    fp$V.l10ns.zh = Mandarin;
+    fp$V.l10ns;
+
+    var fp$W = typeof window !== "undefined" && window.flatpickr !== undefined
+        ? window.flatpickr
+        : {
+            l10ns: {},
+        };
+    var MandarinTraditional = {
+        weekdays: {
+            shorthand: ["週日", "週一", "週二", "週三", "週四", "週五", "週六"],
+            longhand: [
+                "星期日",
+                "星期一",
+                "星期二",
+                "星期三",
+                "星期四",
+                "星期五",
+                "星期六",
+            ],
+        },
+        months: {
+            shorthand: [
+                "一月",
+                "二月",
+                "三月",
+                "四月",
+                "五月",
+                "六月",
+                "七月",
+                "八月",
+                "九月",
+                "十月",
+                "十一月",
+                "十二月",
+            ],
+            longhand: [
+                "一月",
+                "二月",
+                "三月",
+                "四月",
+                "五月",
+                "六月",
+                "七月",
+                "八月",
+                "九月",
+                "十月",
+                "十一月",
+                "十二月",
+            ],
+        },
+        rangeSeparator: " 至 ",
+        weekAbbreviation: "週",
+        scrollTitle: "滾動切換",
+        toggleTitle: "點擊切換 12/24 小時時制",
+    };
+    fp$W.l10ns.zh_tw = MandarinTraditional;
+    fp$W.l10ns;
+
+    var l10n = {
+        ar: Arabic,
+        at: Austria,
+        az: Azerbaijan,
+        be: Belarusian,
+        bg: Bulgarian,
+        bn: Bangla,
+        bs: Bosnian,
+        ca: Catalan,
+        cat: Catalan,
+        cs: Czech,
+        cy: Welsh,
+        da: Danish,
+        de: German,
+        default: __assign({}, english),
+        en: english,
+        eo: Esperanto,
+        es: Spanish,
+        et: Estonian,
+        fa: Persian,
+        fi: Finnish,
+        fo: Faroese,
+        fr: French,
+        gr: Greek,
+        he: Hebrew,
+        hi: Hindi,
+        hr: Croatian,
+        hu: Hungarian,
+        id: Indonesian,
+        is: Icelandic,
+        it: Italian,
+        ja: Japanese,
+        ka: Georgian,
+        ko: Korean,
+        km: Khmer,
+        kz: Kazakh,
+        lt: Lithuanian,
+        lv: Latvian,
+        mk: Macedonian,
+        mn: Mongolian,
+        ms: Malaysian,
+        my: Burmese,
+        nl: Dutch,
+        no: Norwegian,
+        pa: Punjabi,
+        pl: Polish,
+        pt: Portuguese,
+        ro: Romanian,
+        ru: Russian,
+        si: Sinhala,
+        sk: Slovak,
+        sl: Slovenian,
+        sq: Albanian,
+        sr: Serbian,
+        sv: Swedish,
+        th: Thai,
+        tr: Turkish,
+        uk: Ukrainian,
+        vn: Vietnamese,
+        zh: Mandarin,
+        zh_tw: MandarinTraditional,
+        uz: Uzbek,
+        uz_latn: UzbekLatin,
+    };
+
+    exports.default = l10n;
+
+    Object.defineProperty(exports, '__esModule', { value: true });
+
+})));
diff --git a/website/js/vendor/flatpickr/plugins/confirmDate/confirmDate.css b/website/js/vendor/flatpickr/plugins/confirmDate/confirmDate.css
new file mode 100644 (file)
index 0000000..9508ea9
--- /dev/null
@@ -0,0 +1,24 @@
+.flatpickr-confirm {
+       height: 40px;
+       max-height: 0px;
+       visibility: hidden;
+       display: flex;
+       justify-content: center;
+       align-items: center;
+       cursor: pointer;
+       background: rgba(0,0,0,0.06)
+}
+
+.flatpickr-confirm svg path {
+       fill: inherit;
+}
+
+.flatpickr-confirm.darkTheme {
+       color: white;
+       fill: white;
+}
+
+.flatpickr-confirm.visible {
+       max-height: 40px;
+       visibility: visible
+}
diff --git a/website/js/vendor/flatpickr/plugins/confirmDate/confirmDate.d.ts b/website/js/vendor/flatpickr/plugins/confirmDate/confirmDate.d.ts
new file mode 100644 (file)
index 0000000..a4ddf39
--- /dev/null
@@ -0,0 +1,9 @@
+import { Plugin } from "../../types/options";
+export interface Config {
+    confirmIcon?: string;
+    confirmText?: string;
+    showAlways?: boolean;
+    theme?: string;
+}
+declare function confirmDatePlugin(pluginConfig: Config): Plugin;
+export default confirmDatePlugin;
diff --git a/website/js/vendor/flatpickr/plugins/confirmDate/confirmDate.js b/website/js/vendor/flatpickr/plugins/confirmDate/confirmDate.js
new file mode 100644 (file)
index 0000000..8c55a4e
--- /dev/null
@@ -0,0 +1,100 @@
+(function (global, factory) {
+    typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
+    typeof define === 'function' && define.amd ? define(factory) :
+    (global = global || self, global.confirmDatePlugin = factory());
+}(this, (function () { 'use strict';
+
+    /*! *****************************************************************************
+    Copyright (c) Microsoft Corporation.
+
+    Permission to use, copy, modify, and/or distribute this software for any
+    purpose with or without fee is hereby granted.
+
+    THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
+    REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+    AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
+    INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+    LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
+    OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+    PERFORMANCE OF THIS SOFTWARE.
+    ***************************************************************************** */
+
+    var __assign = function() {
+        __assign = Object.assign || function __assign(t) {
+            for (var s, i = 1, n = arguments.length; i < n; i++) {
+                s = arguments[i];
+                for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
+            }
+            return t;
+        };
+        return __assign.apply(this, arguments);
+    };
+
+    function getEventTarget(event) {
+        try {
+            if (typeof event.composedPath === "function") {
+                var path = event.composedPath();
+                return path[0];
+            }
+            return event.target;
+        }
+        catch (error) {
+            return event.target;
+        }
+    }
+
+    var defaultConfig = {
+        confirmIcon: "<svg version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' width='17' height='17' viewBox='0 0 17 17'> <g> </g> <path d='M15.418 1.774l-8.833 13.485-4.918-4.386 0.666-0.746 4.051 3.614 8.198-12.515 0.836 0.548z' fill='#000000' /> </svg>",
+        confirmText: "OK ",
+        showAlways: false,
+        theme: "light",
+    };
+    function confirmDatePlugin(pluginConfig) {
+        var config = __assign(__assign({}, defaultConfig), pluginConfig);
+        var confirmContainer;
+        var confirmButtonCSSClass = "flatpickr-confirm";
+        return function (fp) {
+            if (fp.config.noCalendar || fp.isMobile)
+                return {};
+            return __assign({ onKeyDown: function (_, __, ___, e) {
+                    var eventTarget = getEventTarget(e);
+                    if (fp.config.enableTime &&
+                        e.key === "Tab" &&
+                        eventTarget === fp.amPM) {
+                        e.preventDefault();
+                        confirmContainer.focus();
+                    }
+                    else if (e.key === "Enter" && eventTarget === confirmContainer)
+                        fp.close();
+                },
+                onReady: function () {
+                    confirmContainer = fp._createElement("div", confirmButtonCSSClass + " " + (config.showAlways ? "visible" : "") + " " + config.theme + "Theme", config.confirmText);
+                    confirmContainer.tabIndex = -1;
+                    confirmContainer.innerHTML += config.confirmIcon;
+                    confirmContainer.addEventListener("click", fp.close);
+                    fp.calendarContainer.appendChild(confirmContainer);
+                    fp.loadedPlugins.push("confirmDate");
+                } }, (!config.showAlways
+                ? {
+                    onChange: function (_, dateStr) {
+                        var showCondition = fp.config.enableTime ||
+                            fp.config.mode === "multiple" ||
+                            fp.loadedPlugins.indexOf("monthSelect") !== -1;
+                        var localConfirmContainer = fp.calendarContainer.querySelector("." + confirmButtonCSSClass);
+                        if (!localConfirmContainer)
+                            return;
+                        if (dateStr &&
+                            !fp.config.inline &&
+                            showCondition &&
+                            localConfirmContainer)
+                            return localConfirmContainer.classList.add("visible");
+                        localConfirmContainer.classList.remove("visible");
+                    },
+                }
+                : {}));
+        };
+    }
+
+    return confirmDatePlugin;
+
+})));
diff --git a/website/js/vendor/flatpickr/plugins/labelPlugin/labelPlugin.d.ts b/website/js/vendor/flatpickr/plugins/labelPlugin/labelPlugin.d.ts
new file mode 100644 (file)
index 0000000..1a9cbce
--- /dev/null
@@ -0,0 +1,3 @@
+import { Plugin } from "../../types/options";
+declare function labelPlugin(): Plugin;
+export default labelPlugin;
diff --git a/website/js/vendor/flatpickr/plugins/labelPlugin/labelPlugin.js b/website/js/vendor/flatpickr/plugins/labelPlugin/labelPlugin.js
new file mode 100644 (file)
index 0000000..1d8f0b0
--- /dev/null
@@ -0,0 +1,31 @@
+(function (global, factory) {
+  typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
+  typeof define === 'function' && define.amd ? define(factory) :
+  (global = global || self, global.labelPlugin = factory());
+}(this, (function () { 'use strict';
+
+  function labelPlugin() {
+      return function (fp) {
+          return {
+              onReady: function () {
+                  var id = fp.input.id;
+                  if (!id) {
+                      return;
+                  }
+                  if (fp.mobileInput) {
+                      fp.input.removeAttribute("id");
+                      fp.mobileInput.id = id;
+                  }
+                  else if (fp.altInput) {
+                      fp.input.removeAttribute("id");
+                      fp.altInput.id = id;
+                  }
+                  fp.loadedPlugins.push("labelPlugin");
+              },
+          };
+      };
+  }
+
+  return labelPlugin;
+
+})));
diff --git a/website/js/vendor/flatpickr/plugins/minMaxTimePlugin.d.ts b/website/js/vendor/flatpickr/plugins/minMaxTimePlugin.d.ts
new file mode 100644 (file)
index 0000000..4fe2e5c
--- /dev/null
@@ -0,0 +1,17 @@
+import { Plugin } from "../types/options";
+export interface MinMaxTime {
+    minTime?: string;
+    maxTime?: string;
+}
+export interface Config {
+    table?: Record<string, MinMaxTime>;
+    getTimeLimits?: (date: Date) => MinMaxTime;
+    tableDateFormat?: string;
+}
+export interface State {
+    formatDate: (date: Date, f: string) => string;
+    tableDateFormat: string;
+    defaults: MinMaxTime;
+}
+declare function minMaxTimePlugin(config?: Config): Plugin;
+export default minMaxTimePlugin;
diff --git a/website/js/vendor/flatpickr/plugins/minMaxTimePlugin.js b/website/js/vendor/flatpickr/plugins/minMaxTimePlugin.js
new file mode 100644 (file)
index 0000000..cfc485f
--- /dev/null
@@ -0,0 +1,332 @@
+(function (global, factory) {
+  typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
+  typeof define === 'function' && define.amd ? define(factory) :
+  (global = global || self, global.minMaxTimePlugin = factory());
+}(this, (function () { 'use strict';
+
+  var pad = function (number, length) {
+      if (length === void 0) { length = 2; }
+      return ("000" + number).slice(length * -1);
+  };
+  var int = function (bool) { return (bool === true ? 1 : 0); };
+
+  var monthToStr = function (monthNumber, shorthand, locale) { return locale.months[shorthand ? "shorthand" : "longhand"][monthNumber]; };
+  var formats = {
+      // get the date in UTC
+      Z: function (date) { return date.toISOString(); },
+      // weekday name, short, e.g. Thu
+      D: function (date, locale, options) {
+          return locale.weekdays.shorthand[formats.w(date, locale, options)];
+      },
+      // full month name e.g. January
+      F: function (date, locale, options) {
+          return monthToStr(formats.n(date, locale, options) - 1, false, locale);
+      },
+      // padded hour 1-12
+      G: function (date, locale, options) {
+          return pad(formats.h(date, locale, options));
+      },
+      // hours with leading zero e.g. 03
+      H: function (date) { return pad(date.getHours()); },
+      // day (1-30) with ordinal suffix e.g. 1st, 2nd
+      J: function (date, locale) {
+          return locale.ordinal !== undefined
+              ? date.getDate() + locale.ordinal(date.getDate())
+              : date.getDate();
+      },
+      // AM/PM
+      K: function (date, locale) { return locale.amPM[int(date.getHours() > 11)]; },
+      // shorthand month e.g. Jan, Sep, Oct, etc
+      M: function (date, locale) {
+          return monthToStr(date.getMonth(), true, locale);
+      },
+      // seconds 00-59
+      S: function (date) { return pad(date.getSeconds()); },
+      // unix timestamp
+      U: function (date) { return date.getTime() / 1000; },
+      W: function (date, _, options) {
+          return options.getWeek(date);
+      },
+      // full year e.g. 2016, padded (0001-9999)
+      Y: function (date) { return pad(date.getFullYear(), 4); },
+      // day in month, padded (01-30)
+      d: function (date) { return pad(date.getDate()); },
+      // hour from 1-12 (am/pm)
+      h: function (date) { return (date.getHours() % 12 ? date.getHours() % 12 : 12); },
+      // minutes, padded with leading zero e.g. 09
+      i: function (date) { return pad(date.getMinutes()); },
+      // day in month (1-30)
+      j: function (date) { return date.getDate(); },
+      // weekday name, full, e.g. Thursday
+      l: function (date, locale) {
+          return locale.weekdays.longhand[date.getDay()];
+      },
+      // padded month number (01-12)
+      m: function (date) { return pad(date.getMonth() + 1); },
+      // the month number (1-12)
+      n: function (date) { return date.getMonth() + 1; },
+      // seconds 0-59
+      s: function (date) { return date.getSeconds(); },
+      // Unix Milliseconds
+      u: function (date) { return date.getTime(); },
+      // number of the day of the week
+      w: function (date) { return date.getDay(); },
+      // last two digits of year e.g. 16 for 2016
+      y: function (date) { return String(date.getFullYear()).substring(2); },
+  };
+
+  var defaults = {
+      _disable: [],
+      _enable: [],
+      allowInput: false,
+      allowInvalidPreload: false,
+      altFormat: "F j, Y",
+      altInput: false,
+      altInputClass: "form-control input",
+      animate: typeof window === "object" &&
+          window.navigator.userAgent.indexOf("MSIE") === -1,
+      ariaDateFormat: "F j, Y",
+      autoFillDefaultTime: true,
+      clickOpens: true,
+      closeOnSelect: true,
+      conjunction: ", ",
+      dateFormat: "Y-m-d",
+      defaultHour: 12,
+      defaultMinute: 0,
+      defaultSeconds: 0,
+      disable: [],
+      disableMobile: false,
+      enable: [],
+      enableSeconds: false,
+      enableTime: false,
+      errorHandler: function (err) {
+          return typeof console !== "undefined" && console.warn(err);
+      },
+      getWeek: function (givenDate) {
+          var date = new Date(givenDate.getTime());
+          date.setHours(0, 0, 0, 0);
+          // Thursday in current week decides the year.
+          date.setDate(date.getDate() + 3 - ((date.getDay() + 6) % 7));
+          // January 4 is always in week 1.
+          var week1 = new Date(date.getFullYear(), 0, 4);
+          // Adjust to Thursday in week 1 and count number of weeks from date to week1.
+          return (1 +
+              Math.round(((date.getTime() - week1.getTime()) / 86400000 -
+                  3 +
+                  ((week1.getDay() + 6) % 7)) /
+                  7));
+      },
+      hourIncrement: 1,
+      ignoredFocusElements: [],
+      inline: false,
+      locale: "default",
+      minuteIncrement: 5,
+      mode: "single",
+      monthSelectorType: "dropdown",
+      nextArrow: "<svg version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 17 17'><g></g><path d='M13.207 8.472l-7.854 7.854-0.707-0.707 7.146-7.146-7.146-7.148 0.707-0.707 7.854 7.854z' /></svg>",
+      noCalendar: false,
+      now: new Date(),
+      onChange: [],
+      onClose: [],
+      onDayCreate: [],
+      onDestroy: [],
+      onKeyDown: [],
+      onMonthChange: [],
+      onOpen: [],
+      onParseConfig: [],
+      onReady: [],
+      onValueUpdate: [],
+      onYearChange: [],
+      onPreCalendarPosition: [],
+      plugins: [],
+      position: "auto",
+      positionElement: undefined,
+      prevArrow: "<svg version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 17 17'><g></g><path d='M5.207 8.471l7.146 7.147-0.707 0.707-7.853-7.854 7.854-7.853 0.707 0.707-7.147 7.146z' /></svg>",
+      shorthandCurrentMonth: false,
+      showMonths: 1,
+      static: false,
+      time_24hr: false,
+      weekNumbers: false,
+      wrap: false,
+  };
+
+  var english = {
+      weekdays: {
+          shorthand: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"],
+          longhand: [
+              "Sunday",
+              "Monday",
+              "Tuesday",
+              "Wednesday",
+              "Thursday",
+              "Friday",
+              "Saturday",
+          ],
+      },
+      months: {
+          shorthand: [
+              "Jan",
+              "Feb",
+              "Mar",
+              "Apr",
+              "May",
+              "Jun",
+              "Jul",
+              "Aug",
+              "Sep",
+              "Oct",
+              "Nov",
+              "Dec",
+          ],
+          longhand: [
+              "January",
+              "February",
+              "March",
+              "April",
+              "May",
+              "June",
+              "July",
+              "August",
+              "September",
+              "October",
+              "November",
+              "December",
+          ],
+      },
+      daysInMonth: [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31],
+      firstDayOfWeek: 0,
+      ordinal: function (nth) {
+          var s = nth % 100;
+          if (s > 3 && s < 21)
+              return "th";
+          switch (s % 10) {
+              case 1:
+                  return "st";
+              case 2:
+                  return "nd";
+              case 3:
+                  return "rd";
+              default:
+                  return "th";
+          }
+      },
+      rangeSeparator: " to ",
+      weekAbbreviation: "Wk",
+      scrollTitle: "Scroll to increment",
+      toggleTitle: "Click to toggle",
+      amPM: ["AM", "PM"],
+      yearAriaLabel: "Year",
+      monthAriaLabel: "Month",
+      hourAriaLabel: "Hour",
+      minuteAriaLabel: "Minute",
+      time_24hr: false,
+  };
+
+  var createDateFormatter = function (_a) {
+      var _b = _a.config, config = _b === void 0 ? defaults : _b, _c = _a.l10n, l10n = _c === void 0 ? english : _c, _d = _a.isMobile, isMobile = _d === void 0 ? false : _d;
+      return function (dateObj, frmt, overrideLocale) {
+          var locale = overrideLocale || l10n;
+          if (config.formatDate !== undefined && !isMobile) {
+              return config.formatDate(dateObj, frmt, locale);
+          }
+          return frmt
+              .split("")
+              .map(function (c, i, arr) {
+              return formats[c] && arr[i - 1] !== "\\"
+                  ? formats[c](dateObj, locale, config)
+                  : c !== "\\"
+                      ? c
+                      : "";
+          })
+              .join("");
+      };
+  };
+  /**
+   * Compute the difference in dates, measured in ms
+   */
+  function compareDates(date1, date2, timeless) {
+      if (timeless === void 0) { timeless = true; }
+      if (timeless !== false) {
+          return (new Date(date1.getTime()).setHours(0, 0, 0, 0) -
+              new Date(date2.getTime()).setHours(0, 0, 0, 0));
+      }
+      return date1.getTime() - date2.getTime();
+  }
+  /**
+   * Compute the difference in times, measured in ms
+   */
+  function compareTimes(date1, date2) {
+      return (3600 * (date1.getHours() - date2.getHours()) +
+          60 * (date1.getMinutes() - date2.getMinutes()) +
+          date1.getSeconds() -
+          date2.getSeconds());
+  }
+
+  function minMaxTimePlugin(config) {
+      if (config === void 0) { config = {}; }
+      var state = {
+          formatDate: createDateFormatter({}),
+          tableDateFormat: config.tableDateFormat || "Y-m-d",
+          defaults: {
+              minTime: undefined,
+              maxTime: undefined,
+          },
+      };
+      function findDateTimeLimit(date) {
+          if (config.table !== undefined) {
+              return config.table[state.formatDate(date, state.tableDateFormat)];
+          }
+          return config.getTimeLimits && config.getTimeLimits(date);
+      }
+      return function (fp) {
+          return {
+              onReady: function () {
+                  state.formatDate = this.formatDate;
+                  state.defaults = {
+                      minTime: this.config.minTime && state.formatDate(this.config.minTime, "H:i"),
+                      maxTime: this.config.maxTime && state.formatDate(this.config.maxTime, "H:i"),
+                  };
+                  fp.loadedPlugins.push("minMaxTime");
+              },
+              onChange: function () {
+                  var latest = this.latestSelectedDateObj;
+                  var matchingTimeLimit = latest && findDateTimeLimit(latest);
+                  if (latest && matchingTimeLimit !== undefined) {
+                      this.set(matchingTimeLimit);
+                      fp.config.minTime.setFullYear(latest.getFullYear());
+                      fp.config.maxTime.setFullYear(latest.getFullYear());
+                      fp.config.minTime.setMonth(latest.getMonth());
+                      fp.config.maxTime.setMonth(latest.getMonth());
+                      fp.config.minTime.setDate(latest.getDate());
+                      fp.config.maxTime.setDate(latest.getDate());
+                      if (compareDates(latest, fp.config.maxTime, false) > 0) {
+                          fp.setDate(new Date(latest.getTime()).setHours(fp.config.maxTime.getHours(), fp.config.maxTime.getMinutes(), fp.config.maxTime.getSeconds(), fp.config.maxTime.getMilliseconds()), false);
+                      }
+                      else if (compareDates(latest, fp.config.minTime, false) < 0)
+                          fp.setDate(new Date(latest.getTime()).setHours(fp.config.minTime.getHours(), fp.config.minTime.getMinutes(), fp.config.minTime.getSeconds(), fp.config.minTime.getMilliseconds()), false);
+                  }
+                  else {
+                      var newMinMax = state.defaults || {
+                          minTime: undefined,
+                          maxTime: undefined,
+                      };
+                      this.set(newMinMax);
+                      if (!latest)
+                          return;
+                      var _a = fp.config, minTime = _a.minTime, maxTime = _a.maxTime;
+                      if (minTime && compareTimes(latest, minTime) < 0) {
+                          fp.setDate(new Date(latest.getTime()).setHours(minTime.getHours(), minTime.getMinutes(), minTime.getSeconds(), minTime.getMilliseconds()), false);
+                      }
+                      else if (maxTime && compareTimes(latest, maxTime) > 0) {
+                          fp.setDate(new Date(latest.getTime()).setHours(maxTime.getHours(), maxTime.getMinutes(), maxTime.getSeconds(), maxTime.getMilliseconds()));
+                      }
+                      //
+                  }
+              },
+          };
+      };
+  }
+
+  return minMaxTimePlugin;
+
+})));
diff --git a/website/js/vendor/flatpickr/plugins/momentPlugin.d.ts b/website/js/vendor/flatpickr/plugins/momentPlugin.d.ts
new file mode 100644 (file)
index 0000000..c0ed5aa
--- /dev/null
@@ -0,0 +1,6 @@
+import { Plugin } from "../types/options";
+export interface Config {
+    moment: Function;
+}
+declare function momentPlugin(config: Config): Plugin;
+export default momentPlugin;
diff --git a/website/js/vendor/flatpickr/plugins/momentPlugin.js b/website/js/vendor/flatpickr/plugins/momentPlugin.js
new file mode 100644 (file)
index 0000000..777ef3a
--- /dev/null
@@ -0,0 +1,69 @@
+(function (global, factory) {
+  typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
+  typeof define === 'function' && define.amd ? define(factory) :
+  (global = global || self, global.momentPlugin = factory());
+}(this, (function () { 'use strict';
+
+  function getEventTarget(event) {
+      try {
+          if (typeof event.composedPath === "function") {
+              var path = event.composedPath();
+              return path[0];
+          }
+          return event.target;
+      }
+      catch (error) {
+          return event.target;
+      }
+  }
+
+  function momentPlugin(config) {
+      var moment = config.moment;
+      return function (fp) {
+          function captureIncrement(e) {
+              var event = e;
+              event.stopPropagation();
+              var date = moment(fp.selectedDates[0]);
+              var input = getEventTarget(event);
+              var unit = Array.from(input.classList)
+                  .filter(function (name) { return name.startsWith("flatpickr-"); })
+                  .map(function (name) { return name.substring(10); })[0];
+              var step = parseFloat(input.getAttribute("step"));
+              date.add(step * event.delta, unit);
+              fp.setDate(date.toDate());
+          }
+          return {
+              parseDate: function (datestr, format) {
+                  return moment(datestr, format, true).toDate();
+              },
+              formatDate: function (date, format) {
+                  // locale can also be used
+                  var momentDate = moment(date);
+                  if (typeof fp.config.locale === "string") {
+                      momentDate.locale(fp.config.locale);
+                  }
+                  return momentDate.format(format);
+              },
+              onReady: function () {
+                  [fp.hourElement, fp.minuteElement, fp.secondElement].forEach(function (element) {
+                      return element &&
+                          element.addEventListener("increment", captureIncrement, {
+                              capture: true,
+                          });
+                  });
+              },
+              onDestroy: function () {
+                  [fp.hourElement, fp.minuteElement, fp.secondElement].forEach(function (element) {
+                      return element &&
+                          element.removeEventListener("increment", captureIncrement, {
+                              capture: true,
+                          });
+                  });
+              },
+          };
+      };
+  }
+
+  return momentPlugin;
+
+})));
diff --git a/website/js/vendor/flatpickr/plugins/monthSelect/index.d.ts b/website/js/vendor/flatpickr/plugins/monthSelect/index.d.ts
new file mode 100644 (file)
index 0000000..78d5c52
--- /dev/null
@@ -0,0 +1,16 @@
+import { Plugin } from "../../types/options";
+export interface Config {
+    shorthand: boolean;
+    dateFormat: string;
+    altFormat: string;
+    theme: string;
+}
+export interface ElementDate extends Element {
+    dateObj: Date;
+}
+export declare type MonthElement = HTMLSpanElement & {
+    dateObj: Date;
+    $i: number;
+};
+declare function monthSelectPlugin(pluginConfig?: Partial<Config>): Plugin;
+export default monthSelectPlugin;
diff --git a/website/js/vendor/flatpickr/plugins/monthSelect/index.js b/website/js/vendor/flatpickr/plugins/monthSelect/index.js
new file mode 100644 (file)
index 0000000..87f7629
--- /dev/null
@@ -0,0 +1,233 @@
+(function (global, factory) {
+    typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
+    typeof define === 'function' && define.amd ? define(factory) :
+    (global = global || self, global.monthSelectPlugin = factory());
+}(this, (function () { 'use strict';
+
+    /*! *****************************************************************************
+    Copyright (c) Microsoft Corporation.
+
+    Permission to use, copy, modify, and/or distribute this software for any
+    purpose with or without fee is hereby granted.
+
+    THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
+    REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+    AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
+    INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+    LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
+    OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+    PERFORMANCE OF THIS SOFTWARE.
+    ***************************************************************************** */
+
+    var __assign = function() {
+        __assign = Object.assign || function __assign(t) {
+            for (var s, i = 1, n = arguments.length; i < n; i++) {
+                s = arguments[i];
+                for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
+            }
+            return t;
+        };
+        return __assign.apply(this, arguments);
+    };
+
+    var monthToStr = function (monthNumber, shorthand, locale) { return locale.months[shorthand ? "shorthand" : "longhand"][monthNumber]; };
+
+    function getEventTarget(event) {
+        try {
+            if (typeof event.composedPath === "function") {
+                var path = event.composedPath();
+                return path[0];
+            }
+            return event.target;
+        }
+        catch (error) {
+            return event.target;
+        }
+    }
+
+    var defaultConfig = {
+        shorthand: false,
+        dateFormat: "F Y",
+        altFormat: "F Y",
+        theme: "light",
+    };
+    function monthSelectPlugin(pluginConfig) {
+        var config = __assign(__assign({}, defaultConfig), pluginConfig);
+        return function (fp) {
+            fp.config.dateFormat = config.dateFormat;
+            fp.config.altFormat = config.altFormat;
+            var self = { monthsContainer: null };
+            function clearUnnecessaryDOMElements() {
+                if (!fp.rContainer || !fp.daysContainer || !fp.weekdayContainer)
+                    return;
+                fp.rContainer.removeChild(fp.daysContainer);
+                fp.rContainer.removeChild(fp.weekdayContainer);
+                for (var index = 0; index < fp.monthElements.length; index++) {
+                    var element = fp.monthElements[index];
+                    if (!element.parentNode)
+                        continue;
+                    element.parentNode.removeChild(element);
+                }
+            }
+            function addListeners() {
+                fp._bind(fp.prevMonthNav, "click", function (e) {
+                    var _a;
+                    e.preventDefault();
+                    e.stopPropagation();
+                    var selectedMonth = (_a = fp.rContainer) === null || _a === void 0 ? void 0 : _a.querySelector(".flatpickr-monthSelect-month.selected").dateObj.getMonth();
+                    if (selectedMonth === 0) {
+                        fp.currentYear--;
+                    }
+                    selectYear();
+                });
+                fp._bind(fp.nextMonthNav, "click", function (e) {
+                    var _a;
+                    e.preventDefault();
+                    e.stopPropagation();
+                    var selectedMonth = (_a = fp.rContainer) === null || _a === void 0 ? void 0 : _a.querySelector(".flatpickr-monthSelect-month.selected").dateObj.getMonth();
+                    if (selectedMonth === 11) {
+                        fp.currentYear++;
+                    }
+                    selectYear();
+                });
+            }
+            function addMonths() {
+                if (!fp.rContainer)
+                    return;
+                self.monthsContainer = fp._createElement("div", "flatpickr-monthSelect-months");
+                self.monthsContainer.tabIndex = -1;
+                fp.calendarContainer.classList.add("flatpickr-monthSelect-theme-" + config.theme);
+                for (var i = 0; i < 12; i++) {
+                    var month = fp._createElement("span", "flatpickr-monthSelect-month");
+                    month.dateObj = new Date(fp.currentYear, i);
+                    month.$i = i;
+                    month.textContent = monthToStr(i, config.shorthand, fp.l10n);
+                    month.tabIndex = -1;
+                    month.addEventListener("click", selectMonth);
+                    self.monthsContainer.appendChild(month);
+                    if ((fp.config.minDate && month.dateObj < fp.config.minDate) ||
+                        (fp.config.maxDate && month.dateObj > fp.config.maxDate)) {
+                        month.classList.add("disabled");
+                    }
+                }
+                fp.rContainer.appendChild(self.monthsContainer);
+            }
+            function setCurrentlySelected() {
+                if (!fp.rContainer)
+                    return;
+                var currentlySelected = fp.rContainer.querySelectorAll(".flatpickr-monthSelect-month.selected");
+                for (var index = 0; index < currentlySelected.length; index++) {
+                    currentlySelected[index].classList.remove("selected");
+                }
+                var month = fp.rContainer.querySelector(".flatpickr-monthSelect-month:nth-child(" + (fp.currentMonth + 1) + ")");
+                if (month) {
+                    month.classList.add("selected");
+                }
+            }
+            function selectYear() {
+                var selectedDate = fp.selectedDates[0];
+                if (selectedDate) {
+                    selectedDate = new Date(selectedDate);
+                    selectedDate.setFullYear(fp.currentYear);
+                    if (fp.config.minDate && selectedDate < fp.config.minDate) {
+                        selectedDate = fp.config.minDate;
+                    }
+                    if (fp.config.maxDate && selectedDate > fp.config.maxDate) {
+                        selectedDate = fp.config.maxDate;
+                    }
+                    fp.currentYear = selectedDate.getFullYear();
+                    fp.currentYearElement.value = String(fp.currentYear);
+                    fp.currentMonth = selectedDate.getMonth();
+                }
+                if (fp.rContainer) {
+                    var months = fp.rContainer.querySelectorAll(".flatpickr-monthSelect-month");
+                    months.forEach(function (month) {
+                        month.dateObj.setFullYear(fp.currentYear);
+                        if ((fp.config.minDate && month.dateObj < fp.config.minDate) ||
+                            (fp.config.maxDate && month.dateObj > fp.config.maxDate)) {
+                            month.classList.add("disabled");
+                        }
+                        else {
+                            month.classList.remove("disabled");
+                        }
+                    });
+                }
+                setCurrentlySelected();
+            }
+            function selectMonth(e) {
+                e.preventDefault();
+                e.stopPropagation();
+                var eventTarget = getEventTarget(e);
+                if (eventTarget instanceof Element &&
+                    !eventTarget.classList.contains("disabled")) {
+                    setMonth(eventTarget.dateObj);
+                    fp.close();
+                }
+            }
+            function setMonth(date) {
+                var selectedDate = new Date(date);
+                selectedDate.setFullYear(fp.currentYear);
+                fp.currentMonth = selectedDate.getMonth();
+                fp.setDate(selectedDate, true);
+                setCurrentlySelected();
+            }
+            var shifts = {
+                37: -1,
+                39: 1,
+                40: 3,
+                38: -3,
+            };
+            function onKeyDown(_, __, ___, e) {
+                var shouldMove = shifts[e.keyCode] !== undefined;
+                if (!shouldMove && e.keyCode !== 13) {
+                    return;
+                }
+                if (!fp.rContainer || !self.monthsContainer)
+                    return;
+                var currentlySelected = fp.rContainer.querySelector(".flatpickr-monthSelect-month.selected");
+                var index = Array.prototype.indexOf.call(self.monthsContainer.children, document.activeElement);
+                if (index === -1) {
+                    var target = currentlySelected || self.monthsContainer.firstElementChild;
+                    target.focus();
+                    index = target.$i;
+                }
+                if (shouldMove) {
+                    self.monthsContainer.children[(12 + index + shifts[e.keyCode]) % 12].focus();
+                }
+                else if (e.keyCode === 13 &&
+                    self.monthsContainer.contains(document.activeElement)) {
+                    setMonth(document.activeElement.dateObj);
+                }
+            }
+            function destroyPluginInstance() {
+                if (self.monthsContainer !== null) {
+                    var months = self.monthsContainer.querySelectorAll(".flatpickr-monthSelect-month");
+                    for (var index = 0; index < months.length; index++) {
+                        months[index].removeEventListener("click", selectMonth);
+                    }
+                }
+            }
+            return {
+                onParseConfig: function () {
+                    fp.config.mode = "single";
+                    fp.config.enableTime = false;
+                },
+                onValueUpdate: setCurrentlySelected,
+                onKeyDown: onKeyDown,
+                onReady: [
+                    clearUnnecessaryDOMElements,
+                    addListeners,
+                    addMonths,
+                    setCurrentlySelected,
+                    function () {
+                        fp.loadedPlugins.push("monthSelect");
+                    },
+                ],
+                onDestroy: destroyPluginInstance,
+            };
+        };
+    }
+
+    return monthSelectPlugin;
+
+})));
diff --git a/website/js/vendor/flatpickr/plugins/monthSelect/style.css b/website/js/vendor/flatpickr/plugins/monthSelect/style.css
new file mode 100644 (file)
index 0000000..f49a9ec
--- /dev/null
@@ -0,0 +1,79 @@
+.flatpickr-monthSelect-months {
+  margin: 10px 1px 3px 1px;
+  flex-wrap: wrap;
+}
+
+.flatpickr-monthSelect-month {
+  background: none;
+  border: 0;
+  border-radius: 2px;
+  -webkit-box-sizing: border-box;
+  box-sizing: border-box;
+  color: #393939;
+  cursor: pointer;
+  display: inline-block;
+  font-weight: 400;
+  margin: 0.5px;
+  justify-content: center;
+  padding: 10px;
+  position: relative;
+  -webkit-box-pack: center;
+  -webkit-justify-content: center;
+  -ms-flex-pack: center;
+  text-align: center;
+  width: 33%;
+}
+
+.flatpickr-monthSelect-month.disabled {
+       color: #eee;
+}
+
+.flatpickr-monthSelect-month.disabled:hover,
+.flatpickr-monthSelect-month.disabled:focus {
+       cursor: not-allowed;
+       background: none !important;
+}
+
+.flatpickr-monthSelect-theme-dark {
+  background: #3f4458;
+}
+
+.flatpickr-monthSelect-theme-dark .flatpickr-current-month input.cur-year {
+  color: #fff;
+}
+
+.flatpickr-monthSelect-theme-dark .flatpickr-months .flatpickr-prev-month,
+.flatpickr-monthSelect-theme-dark .flatpickr-months .flatpickr-next-month {
+  color: #fff;
+  fill: #fff;
+}
+
+.flatpickr-monthSelect-theme-dark .flatpickr-monthSelect-month {
+  color: rgba(255, 255, 255, 0.95);
+}
+
+.flatpickr-monthSelect-month:hover,
+.flatpickr-monthSelect-month:focus {
+  background: #e6e6e6;
+  cursor: pointer;
+  outline: 0;
+}
+
+.flatpickr-monthSelect-theme-dark .flatpickr-monthSelect-month:hover,
+.flatpickr-monthSelect-theme-dark .flatpickr-monthSelect-month:focus {
+  background: #646c8c;
+  border-color: #646c8c;
+}
+
+.flatpickr-monthSelect-month.selected {
+  background-color: #569ff7;
+  color: #fff;
+}
+
+.flatpickr-monthSelect-theme-dark .flatpickr-monthSelect-month.selected {
+  background: #80cbc4;
+  -webkit-box-shadow: none;
+  box-shadow: none;
+  color: #fff;
+  border-color: #80cbc4;
+}
diff --git a/website/js/vendor/flatpickr/plugins/monthSelect/tests.spec.d.ts b/website/js/vendor/flatpickr/plugins/monthSelect/tests.spec.d.ts
new file mode 100644 (file)
index 0000000..cb0ff5c
--- /dev/null
@@ -0,0 +1 @@
+export {};
diff --git a/website/js/vendor/flatpickr/plugins/rangePlugin.d.ts b/website/js/vendor/flatpickr/plugins/rangePlugin.d.ts
new file mode 100644 (file)
index 0000000..960a834
--- /dev/null
@@ -0,0 +1,12 @@
+import { Plugin } from "../types/options";
+export interface Config {
+    input?: string | HTMLInputElement;
+    position?: "left";
+}
+declare global {
+    interface Window {
+        rangePlugin: (config?: Config) => void;
+    }
+}
+declare function rangePlugin(config?: Config): Plugin;
+export default rangePlugin;
diff --git a/website/js/vendor/flatpickr/plugins/rangePlugin.js b/website/js/vendor/flatpickr/plugins/rangePlugin.js
new file mode 100644 (file)
index 0000000..8413ca8
--- /dev/null
@@ -0,0 +1,169 @@
+(function (global, factory) {
+    typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
+    typeof define === 'function' && define.amd ? define(factory) :
+    (global = global || self, global.rangePlugin = factory());
+}(this, (function () { 'use strict';
+
+    /*! *****************************************************************************
+    Copyright (c) Microsoft Corporation.
+
+    Permission to use, copy, modify, and/or distribute this software for any
+    purpose with or without fee is hereby granted.
+
+    THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
+    REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+    AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
+    INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+    LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
+    OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+    PERFORMANCE OF THIS SOFTWARE.
+    ***************************************************************************** */
+
+    function __spreadArrays() {
+        for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;
+        for (var r = Array(s), k = 0, i = 0; i < il; i++)
+            for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)
+                r[k] = a[j];
+        return r;
+    }
+
+    function rangePlugin(config) {
+        if (config === void 0) { config = {}; }
+        return function (fp) {
+            var dateFormat = "", secondInput, _secondInputFocused, _prevDates;
+            var createSecondInput = function () {
+                if (config.input) {
+                    secondInput =
+                        config.input instanceof Element
+                            ? config.input
+                            : window.document.querySelector(config.input);
+                    if (!secondInput) {
+                        fp.config.errorHandler(new Error("Invalid input element specified"));
+                        return;
+                    }
+                    if (fp.config.wrap) {
+                        secondInput = secondInput.querySelector("[data-input]");
+                    }
+                }
+                else {
+                    secondInput = fp._input.cloneNode();
+                    secondInput.removeAttribute("id");
+                    secondInput._flatpickr = undefined;
+                }
+                if (secondInput.value) {
+                    var parsedDate = fp.parseDate(secondInput.value);
+                    if (parsedDate)
+                        fp.selectedDates.push(parsedDate);
+                }
+                secondInput.setAttribute("data-fp-omit", "");
+                fp._bind(secondInput, ["focus", "click"], function () {
+                    if (fp.selectedDates[1]) {
+                        fp.latestSelectedDateObj = fp.selectedDates[1];
+                        fp._setHoursFromDate(fp.selectedDates[1]);
+                        fp.jumpToDate(fp.selectedDates[1]);
+                    }
+                    _secondInputFocused = true;
+                    fp.isOpen = false;
+                    fp.open(undefined, config.position === "left" ? fp._input : secondInput);
+                });
+                fp._bind(fp._input, ["focus", "click"], function (e) {
+                    e.preventDefault();
+                    fp.isOpen = false;
+                    fp.open();
+                });
+                if (fp.config.allowInput)
+                    fp._bind(secondInput, "keydown", function (e) {
+                        if (e.key === "Enter") {
+                            fp.setDate([fp.selectedDates[0], secondInput.value], true, dateFormat);
+                            secondInput.click();
+                        }
+                    });
+                if (!config.input)
+                    fp._input.parentNode &&
+                        fp._input.parentNode.insertBefore(secondInput, fp._input.nextSibling);
+            };
+            var plugin = {
+                onParseConfig: function () {
+                    fp.config.mode = "range";
+                    dateFormat = fp.config.altInput
+                        ? fp.config.altFormat
+                        : fp.config.dateFormat;
+                },
+                onReady: function () {
+                    createSecondInput();
+                    fp.config.ignoredFocusElements.push(secondInput);
+                    if (fp.config.allowInput) {
+                        fp._input.removeAttribute("readonly");
+                        secondInput.removeAttribute("readonly");
+                    }
+                    else {
+                        secondInput.setAttribute("readonly", "readonly");
+                    }
+                    fp._bind(fp._input, "focus", function () {
+                        fp.latestSelectedDateObj = fp.selectedDates[0];
+                        fp._setHoursFromDate(fp.selectedDates[0]);
+                        _secondInputFocused = false;
+                        fp.jumpToDate(fp.selectedDates[0]);
+                    });
+                    if (fp.config.allowInput)
+                        fp._bind(fp._input, "keydown", function (e) {
+                            if (e.key === "Enter")
+                                fp.setDate([fp._input.value, fp.selectedDates[1]], true, dateFormat);
+                        });
+                    fp.setDate(fp.selectedDates, false);
+                    plugin.onValueUpdate(fp.selectedDates);
+                    fp.loadedPlugins.push("range");
+                },
+                onPreCalendarPosition: function () {
+                    if (_secondInputFocused) {
+                        fp._positionElement = secondInput;
+                        setTimeout(function () {
+                            fp._positionElement = fp._input;
+                        }, 0);
+                    }
+                },
+                onChange: function () {
+                    if (!fp.selectedDates.length) {
+                        setTimeout(function () {
+                            if (fp.selectedDates.length)
+                                return;
+                            secondInput.value = "";
+                            _prevDates = [];
+                        }, 10);
+                    }
+                    if (_secondInputFocused) {
+                        setTimeout(function () {
+                            secondInput.focus();
+                        }, 0);
+                    }
+                },
+                onDestroy: function () {
+                    if (!config.input)
+                        secondInput.parentNode &&
+                            secondInput.parentNode.removeChild(secondInput);
+                },
+                onValueUpdate: function (selDates) {
+                    var _a, _b, _c;
+                    if (!secondInput)
+                        return;
+                    _prevDates =
+                        !_prevDates || selDates.length >= _prevDates.length
+                            ? __spreadArrays(selDates) : _prevDates;
+                    if (_prevDates.length > selDates.length) {
+                        var newSelectedDate = selDates[0];
+                        var newDates = _secondInputFocused
+                            ? [_prevDates[0], newSelectedDate]
+                            : [newSelectedDate, _prevDates[1]];
+                        fp.setDate(newDates, false);
+                        _prevDates = __spreadArrays(newDates);
+                    }
+                    _a = fp.selectedDates.map(function (d) { return fp.formatDate(d, dateFormat); }), _b = _a[0], fp._input.value = _b === void 0 ? "" : _b, _c = _a[1], secondInput.value = _c === void 0 ? "" : _c;
+                },
+            };
+            return plugin;
+        };
+    }
+
+    return rangePlugin;
+
+})));
diff --git a/website/js/vendor/flatpickr/plugins/scrollPlugin.d.ts b/website/js/vendor/flatpickr/plugins/scrollPlugin.d.ts
new file mode 100644 (file)
index 0000000..a367428
--- /dev/null
@@ -0,0 +1,3 @@
+import { Plugin } from "../types/options";
+declare function scrollPlugin(): Plugin;
+export default scrollPlugin;
diff --git a/website/js/vendor/flatpickr/plugins/scrollPlugin.js b/website/js/vendor/flatpickr/plugins/scrollPlugin.js
new file mode 100644 (file)
index 0000000..0e50f95
--- /dev/null
@@ -0,0 +1,85 @@
+(function (global, factory) {
+  typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
+  typeof define === 'function' && define.amd ? define(factory) :
+  (global = global || self, global.scrollPlugin = factory());
+}(this, (function () { 'use strict';
+
+  function getEventTarget(event) {
+      try {
+          if (typeof event.composedPath === "function") {
+              var path = event.composedPath();
+              return path[0];
+          }
+          return event.target;
+      }
+      catch (error) {
+          return event.target;
+      }
+  }
+
+  if (typeof window.CustomEvent !== "function") {
+      function CustomEvent(typeArg, eventInitDict) {
+          eventInitDict = eventInitDict || {
+              bubbles: false,
+              cancelable: false,
+              detail: undefined,
+          };
+          var evt = document.createEvent("CustomEvent");
+          evt.initCustomEvent(typeArg, eventInitDict.bubbles, eventInitDict.cancelable, eventInitDict.detail);
+          return evt;
+      }
+      CustomEvent.prototype = window.Event.prototype;
+      window.CustomEvent = CustomEvent;
+  }
+  function delta(e) {
+      return Math.max(-1, Math.min(1, e.wheelDelta || -e.deltaY));
+  }
+  var scroll = function (e) {
+      e.preventDefault();
+      var ev = new CustomEvent("increment", {
+          bubbles: true,
+      });
+      ev.delta = delta(e);
+      getEventTarget(e).dispatchEvent(ev);
+  };
+  function scrollMonth(fp) {
+      return function (e) {
+          e.preventDefault();
+          var mDelta = delta(e);
+          fp.changeMonth(mDelta);
+      };
+  }
+  function scrollPlugin() {
+      return function (fp) {
+          var monthScroller = scrollMonth(fp);
+          return {
+              onReady: function () {
+                  if (fp.timeContainer) {
+                      fp.timeContainer.addEventListener("wheel", scroll);
+                  }
+                  fp.yearElements.forEach(function (yearElem) {
+                      return yearElem.addEventListener("wheel", scroll);
+                  });
+                  fp.monthElements.forEach(function (monthElem) {
+                      return monthElem.addEventListener("wheel", monthScroller);
+                  });
+                  fp.loadedPlugins.push("scroll");
+              },
+              onDestroy: function () {
+                  if (fp.timeContainer) {
+                      fp.timeContainer.removeEventListener("wheel", scroll);
+                  }
+                  fp.yearElements.forEach(function (yearElem) {
+                      return yearElem.removeEventListener("wheel", scroll);
+                  });
+                  fp.monthElements.forEach(function (monthElem) {
+                      return monthElem.removeEventListener("wheel", monthScroller);
+                  });
+              },
+          };
+      };
+  }
+
+  return scrollPlugin;
+
+})));
diff --git a/website/js/vendor/flatpickr/plugins/weekSelect/weekSelect.d.ts b/website/js/vendor/flatpickr/plugins/weekSelect/weekSelect.d.ts
new file mode 100644 (file)
index 0000000..88cc964
--- /dev/null
@@ -0,0 +1,7 @@
+import { Plugin } from "../../types/options";
+export declare type PlusWeeks = {
+    weekStartDay: Date;
+    weekEndDay: Date;
+};
+declare function weekSelectPlugin(): Plugin<PlusWeeks>;
+export default weekSelectPlugin;
diff --git a/website/js/vendor/flatpickr/plugins/weekSelect/weekSelect.js b/website/js/vendor/flatpickr/plugins/weekSelect/weekSelect.js
new file mode 100644 (file)
index 0000000..d72fd8a
--- /dev/null
@@ -0,0 +1,99 @@
+(function (global, factory) {
+  typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
+  typeof define === 'function' && define.amd ? define(factory) :
+  (global = global || self, global.weekSelect = factory());
+}(this, (function () { 'use strict';
+
+  function getEventTarget(event) {
+      try {
+          if (typeof event.composedPath === "function") {
+              var path = event.composedPath();
+              return path[0];
+          }
+          return event.target;
+      }
+      catch (error) {
+          return event.target;
+      }
+  }
+
+  function weekSelectPlugin() {
+      return function (fp) {
+          function onDayHover(event) {
+              var day = getEventTarget(event);
+              if (!day.classList.contains("flatpickr-day"))
+                  return;
+              var days = fp.days.childNodes;
+              var dayIndex = day.$i;
+              var dayIndSeven = dayIndex / 7;
+              var weekStartDay = days[7 * Math.floor(dayIndSeven)]
+                  .dateObj;
+              var weekEndDay = days[7 * Math.ceil(dayIndSeven + 0.01) - 1].dateObj;
+              for (var i = days.length; i--;) {
+                  var day_1 = days[i];
+                  var date = day_1.dateObj;
+                  if (date > weekEndDay || date < weekStartDay)
+                      day_1.classList.remove("inRange");
+                  else
+                      day_1.classList.add("inRange");
+              }
+          }
+          function highlightWeek() {
+              var selDate = fp.latestSelectedDateObj;
+              if (selDate !== undefined &&
+                  selDate.getMonth() === fp.currentMonth &&
+                  selDate.getFullYear() === fp.currentYear) {
+                  fp.weekStartDay = fp.days.childNodes[7 * Math.floor(fp.selectedDateElem.$i / 7)].dateObj;
+                  fp.weekEndDay = fp.days.childNodes[7 * Math.ceil(fp.selectedDateElem.$i / 7 + 0.01) - 1].dateObj;
+              }
+              var days = fp.days.childNodes;
+              for (var i = days.length; i--;) {
+                  var date = days[i].dateObj;
+                  if (date >= fp.weekStartDay && date <= fp.weekEndDay)
+                      days[i].classList.add("week", "selected");
+              }
+          }
+          function clearHover() {
+              var days = fp.days.childNodes;
+              for (var i = days.length; i--;)
+                  days[i].classList.remove("inRange");
+          }
+          function onReady() {
+              if (fp.daysContainer !== undefined)
+                  fp.daysContainer.addEventListener("mouseover", onDayHover);
+          }
+          function onDestroy() {
+              if (fp.daysContainer !== undefined)
+                  fp.daysContainer.removeEventListener("mouseover", onDayHover);
+          }
+          return {
+              onValueUpdate: highlightWeek,
+              onMonthChange: highlightWeek,
+              onYearChange: highlightWeek,
+              onOpen: highlightWeek,
+              onClose: clearHover,
+              onParseConfig: function () {
+                  fp.config.mode = "single";
+                  fp.config.enableTime = false;
+                  fp.config.dateFormat = fp.config.dateFormat
+                      ? fp.config.dateFormat
+                      : "\\W\\e\\e\\k #W, Y";
+                  fp.config.altFormat = fp.config.altFormat
+                      ? fp.config.altFormat
+                      : "\\W\\e\\e\\k #W, Y";
+              },
+              onReady: [
+                  onReady,
+                  highlightWeek,
+                  function () {
+                      fp.loadedPlugins.push("weekSelect");
+                  },
+              ],
+              onDestroy: onDestroy,
+          };
+      };
+  }
+
+  return weekSelectPlugin;
+
+})));
diff --git a/website/js/vendor/flatpickr/themes/airbnb.css b/website/js/vendor/flatpickr/themes/airbnb.css
new file mode 100644 (file)
index 0000000..ad55e5a
--- /dev/null
@@ -0,0 +1,880 @@
+.flatpickr-calendar {
+  background: transparent;
+  opacity: 0;
+  display: none;
+  text-align: center;
+  visibility: hidden;
+  padding: 0;
+  -webkit-animation: none;
+          animation: none;
+  direction: ltr;
+  border: 0;
+  font-size: 14px;
+  line-height: 24px;
+  border-radius: 5px;
+  position: absolute;
+  width: 307.875px;
+  -webkit-box-sizing: border-box;
+          box-sizing: border-box;
+  -ms-touch-action: manipulation;
+      touch-action: manipulation;
+  background: #fff;
+  -webkit-box-shadow: 1px 0 0 #eee, -1px 0 0 #eee, 0 1px 0 #eee, 0 -1px 0 #eee, 0 3px 13px rgba(0,0,0,0.08);
+          box-shadow: 1px 0 0 #eee, -1px 0 0 #eee, 0 1px 0 #eee, 0 -1px 0 #eee, 0 3px 13px rgba(0,0,0,0.08);
+}
+.flatpickr-calendar.open,
+.flatpickr-calendar.inline {
+  opacity: 1;
+  max-height: 640px;
+  visibility: visible;
+}
+.flatpickr-calendar.open {
+  display: inline-block;
+  z-index: 99999;
+}
+.flatpickr-calendar.animate.open {
+  -webkit-animation: fpFadeInDown 300ms cubic-bezier(0.23, 1, 0.32, 1);
+          animation: fpFadeInDown 300ms cubic-bezier(0.23, 1, 0.32, 1);
+}
+.flatpickr-calendar.inline {
+  display: block;
+  position: relative;
+  top: 2px;
+}
+.flatpickr-calendar.static {
+  position: absolute;
+  top: calc(100% + 2px);
+}
+.flatpickr-calendar.static.open {
+  z-index: 999;
+  display: block;
+}
+.flatpickr-calendar.multiMonth .flatpickr-days .dayContainer:nth-child(n+1) .flatpickr-day.inRange:nth-child(7n+7) {
+  -webkit-box-shadow: none !important;
+          box-shadow: none !important;
+}
+.flatpickr-calendar.multiMonth .flatpickr-days .dayContainer:nth-child(n+2) .flatpickr-day.inRange:nth-child(7n+1) {
+  -webkit-box-shadow: -2px 0 0 #e6e6e6, 5px 0 0 #e6e6e6;
+          box-shadow: -2px 0 0 #e6e6e6, 5px 0 0 #e6e6e6;
+}
+.flatpickr-calendar .hasWeeks .dayContainer,
+.flatpickr-calendar .hasTime .dayContainer {
+  border-bottom: 0;
+  border-bottom-right-radius: 0;
+  border-bottom-left-radius: 0;
+}
+.flatpickr-calendar .hasWeeks .dayContainer {
+  border-left: 0;
+}
+.flatpickr-calendar.hasTime .flatpickr-time {
+  height: 40px;
+  border-top: 1px solid #eee;
+}
+.flatpickr-calendar.noCalendar.hasTime .flatpickr-time {
+  height: auto;
+}
+.flatpickr-calendar:before,
+.flatpickr-calendar:after {
+  position: absolute;
+  display: block;
+  pointer-events: none;
+  border: solid transparent;
+  content: '';
+  height: 0;
+  width: 0;
+  left: 22px;
+}
+.flatpickr-calendar.rightMost:before,
+.flatpickr-calendar.arrowRight:before,
+.flatpickr-calendar.rightMost:after,
+.flatpickr-calendar.arrowRight:after {
+  left: auto;
+  right: 22px;
+}
+.flatpickr-calendar.arrowCenter:before,
+.flatpickr-calendar.arrowCenter:after {
+  left: 50%;
+  right: 50%;
+}
+.flatpickr-calendar:before {
+  border-width: 5px;
+  margin: 0 -5px;
+}
+.flatpickr-calendar:after {
+  border-width: 4px;
+  margin: 0 -4px;
+}
+.flatpickr-calendar.arrowTop:before,
+.flatpickr-calendar.arrowTop:after {
+  bottom: 100%;
+}
+.flatpickr-calendar.arrowTop:before {
+  border-bottom-color: #eee;
+}
+.flatpickr-calendar.arrowTop:after {
+  border-bottom-color: #fff;
+}
+.flatpickr-calendar.arrowBottom:before,
+.flatpickr-calendar.arrowBottom:after {
+  top: 100%;
+}
+.flatpickr-calendar.arrowBottom:before {
+  border-top-color: #eee;
+}
+.flatpickr-calendar.arrowBottom:after {
+  border-top-color: #fff;
+}
+.flatpickr-calendar:focus {
+  outline: 0;
+}
+.flatpickr-wrapper {
+  position: relative;
+  display: inline-block;
+}
+.flatpickr-months {
+  display: -webkit-box;
+  display: -webkit-flex;
+  display: -ms-flexbox;
+  display: flex;
+}
+.flatpickr-months .flatpickr-month {
+  background: transparent;
+  color: #3c3f40;
+  fill: #3c3f40;
+  height: 34px;
+  line-height: 1;
+  text-align: center;
+  position: relative;
+  -webkit-user-select: none;
+     -moz-user-select: none;
+      -ms-user-select: none;
+          user-select: none;
+  overflow: hidden;
+  -webkit-box-flex: 1;
+  -webkit-flex: 1;
+      -ms-flex: 1;
+          flex: 1;
+}
+.flatpickr-months .flatpickr-prev-month,
+.flatpickr-months .flatpickr-next-month {
+  text-decoration: none;
+  cursor: pointer;
+  position: absolute;
+  top: 0;
+  height: 34px;
+  padding: 10px;
+  z-index: 3;
+  color: #3c3f40;
+  fill: #3c3f40;
+}
+.flatpickr-months .flatpickr-prev-month.flatpickr-disabled,
+.flatpickr-months .flatpickr-next-month.flatpickr-disabled {
+  display: none;
+}
+.flatpickr-months .flatpickr-prev-month i,
+.flatpickr-months .flatpickr-next-month i {
+  position: relative;
+}
+.flatpickr-months .flatpickr-prev-month.flatpickr-prev-month,
+.flatpickr-months .flatpickr-next-month.flatpickr-prev-month {
+/*
+      /*rtl:begin:ignore*/
+/*
+      */
+  left: 0;
+/*
+      /*rtl:end:ignore*/
+/*
+      */
+}
+/*
+      /*rtl:begin:ignore*/
+/*
+      /*rtl:end:ignore*/
+.flatpickr-months .flatpickr-prev-month.flatpickr-next-month,
+.flatpickr-months .flatpickr-next-month.flatpickr-next-month {
+/*
+      /*rtl:begin:ignore*/
+/*
+      */
+  right: 0;
+/*
+      /*rtl:end:ignore*/
+/*
+      */
+}
+/*
+      /*rtl:begin:ignore*/
+/*
+      /*rtl:end:ignore*/
+.flatpickr-months .flatpickr-prev-month:hover,
+.flatpickr-months .flatpickr-next-month:hover {
+  color: #3a6fc3;
+}
+.flatpickr-months .flatpickr-prev-month:hover svg,
+.flatpickr-months .flatpickr-next-month:hover svg {
+  fill: #3a6fc3;;
+}
+.flatpickr-months .flatpickr-prev-month svg,
+.flatpickr-months .flatpickr-next-month svg {
+  width: 14px;
+  height: 14px;
+}
+.flatpickr-months .flatpickr-prev-month svg path,
+.flatpickr-months .flatpickr-next-month svg path {
+  -webkit-transition: fill 0.1s;
+  transition: fill 0.1s;
+  fill: inherit;
+}
+.numInputWrapper {
+  position: relative;
+  height: auto;
+}
+.numInputWrapper input,
+.numInputWrapper span {
+  display: inline-block;
+}
+.numInputWrapper input {
+  width: 100%;
+}
+.numInputWrapper input::-ms-clear {
+  display: none;
+}
+.numInputWrapper input::-webkit-outer-spin-button,
+.numInputWrapper input::-webkit-inner-spin-button {
+  margin: 0;
+  -webkit-appearance: none;
+}
+.numInputWrapper span {
+  position: absolute;
+  right: 0;
+  width: 14px;
+  padding: 0 4px 0 2px;
+  height: 50%;
+  line-height: 50%;
+  opacity: 0;
+  cursor: pointer;
+  border: 1px solid rgba(64,72,72,0.15);
+  -webkit-box-sizing: border-box;
+          box-sizing: border-box;
+}
+.numInputWrapper span:hover {
+  background: rgba(0,0,0,0.1);
+}
+.numInputWrapper span:active {
+  background: rgba(0,0,0,0.2);
+}
+.numInputWrapper span:after {
+  display: block;
+  content: "";
+  position: absolute;
+}
+.numInputWrapper span.arrowUp {
+  top: 0;
+  border-bottom: 0;
+}
+.numInputWrapper span.arrowUp:after {
+  border-left: 4px solid transparent;
+  border-right: 4px solid transparent;
+  border-bottom: 4px solid rgba(64,72,72,0.6);
+  top: 26%;
+}
+.numInputWrapper span.arrowDown {
+  top: 50%;
+}
+.numInputWrapper span.arrowDown:after {
+  border-left: 4px solid transparent;
+  border-right: 4px solid transparent;
+  border-top: 4px solid rgba(64,72,72,0.6);
+  top: 40%;
+}
+.numInputWrapper span svg {
+  width: inherit;
+  height: auto;
+}
+.numInputWrapper span svg path {
+  fill: rgba(60,63,64,0.5);
+}
+.numInputWrapper:hover {
+  background: rgba(0,0,0,0.05);
+}
+.numInputWrapper:hover span {
+  opacity: 1;
+}
+.flatpickr-current-month {
+  font-size: 135%;
+  line-height: inherit;
+  font-weight: 300;
+  color: inherit;
+  position: absolute;
+  width: 75%;
+  left: 12.5%;
+  padding: 7.48px 0 0 0;
+  line-height: 1;
+  height: 34px;
+  display: inline-block;
+  text-align: center;
+  -webkit-transform: translate3d(0px, 0px, 0px);
+          transform: translate3d(0px, 0px, 0px);
+}
+.flatpickr-current-month span.cur-month {
+  font-family: inherit;
+  font-weight: 700;
+  color: inherit;
+  display: inline-block;
+  margin-left: 0.5ch;
+  padding: 0;
+}
+.flatpickr-current-month span.cur-month:hover {
+  background: rgba(0,0,0,0.05);
+}
+.flatpickr-current-month .numInputWrapper {
+  top: -27px;
+  width: 6ch;
+  left: 53px;
+  display: inline-block;
+}
+.flatpickr-current-month .numInputWrapper span.arrowUp:after {
+  border-bottom-color: #3c3f40;
+}
+.flatpickr-current-month .numInputWrapper span.arrowDown:after {
+  border-top-color: #3c3f40;
+}
+.flatpickr-current-month input.cur-year {
+  background: transparent;
+  -webkit-box-sizing: border-box;
+          box-sizing: border-box;
+  color: inherit;
+  cursor: text;
+  padding: 0 0 0 0.5ch;
+  margin: 0;
+  display: inline-block;
+  font-size: inherit;
+  font-family: inherit;
+  font-weight: 300;
+  line-height: inherit;
+  height: 27px;
+  border: 1px solid #ccc;
+  border-radius: 0;
+  vertical-align: initial;
+  -webkit-appearance: textfield;
+  -moz-appearance: textfield;
+  appearance: textfield;
+}
+.flatpickr-current-month input.cur-year:focus {
+  outline: 0;
+}
+.flatpickr-current-month input.cur-year[disabled],
+.flatpickr-current-month input.cur-year[disabled]:hover {
+  font-size: 100%;
+  color: rgba(60,63,64,0.5);
+  background: transparent;
+  pointer-events: none;
+}
+.flatpickr-current-month .flatpickr-monthDropdown-months {
+  appearance: menulist;
+  background: transparent;
+  border: 1px solid #ccc;
+  border-radius: 0;
+  box-sizing: border-box;
+  color: inherit;
+  cursor: pointer;
+  font-size: inherit;
+  font-family: inherit;
+  font-weight: 300;
+  height: auto;
+  line-height: inherit;
+  margin: -1px 0 0 0;
+  outline: none;
+  padding: 0 0 0 0.5ch;
+  position: relative;
+  vertical-align: initial;
+  -webkit-box-sizing: border-box;
+  -webkit-appearance: menulist;
+  -moz-appearance: menulist;
+  width: auto;
+}
+.flatpickr-current-month .flatpickr-monthDropdown-months:focus,
+.flatpickr-current-month .flatpickr-monthDropdown-months:active {
+  outline: none;
+}
+.flatpickr-current-month .flatpickr-monthDropdown-months:hover {
+  background: rgba(0,0,0,0.05);
+}
+.flatpickr-current-month .flatpickr-monthDropdown-months .flatpickr-monthDropdown-month {
+  background-color: transparent;
+  outline: none;
+  padding: 0;
+}
+.flatpickr-weekdays {
+  background: transparent;
+  text-align: center;
+  overflow: hidden;
+  width: 100%;
+  display: -webkit-box;
+  display: -webkit-flex;
+  display: -ms-flexbox;
+  display: flex;
+  -webkit-box-align: center;
+  -webkit-align-items: center;
+      -ms-flex-align: center;
+          align-items: center;
+  height: 28px;
+}
+.flatpickr-weekdays .flatpickr-weekdaycontainer {
+  display: -webkit-box;
+  display: -webkit-flex;
+  display: -ms-flexbox;
+  display: flex;
+  -webkit-box-flex: 1;
+  -webkit-flex: 1;
+      -ms-flex: 1;
+          flex: 1;
+}
+span.flatpickr-weekday {
+  cursor: default;
+  font-size: 90%;
+  background: transparent;
+  color: rgba(0,0,0,0.54);
+  line-height: 1;
+  margin: 0;
+  text-align: center;
+  display: block;
+  -webkit-box-flex: 1;
+  -webkit-flex: 1;
+      -ms-flex: 1;
+          flex: 1;
+  font-weight: bolder;
+}
+.dayContainer,
+.flatpickr-weeks {
+  padding: 1px 0 0 0;
+}
+.flatpickr-days {
+  position: relative;
+  overflow: hidden;
+  display: -webkit-box;
+  display: -webkit-flex;
+  display: -ms-flexbox;
+  display: flex;
+  -webkit-box-align: start;
+  -webkit-align-items: flex-start;
+      -ms-flex-align: start;
+          align-items: flex-start;
+  width: 307.875px;
+}
+.flatpickr-days:focus {
+  outline: 0;
+}
+.dayContainer {
+  padding: 0;
+  outline: 0;
+  text-align: left;
+  width: 307.875px;
+  min-width: 307.875px;
+  max-width: 307.875px;
+  -webkit-box-sizing: border-box;
+          box-sizing: border-box;
+  display: inline-block;
+  display: -ms-flexbox;
+  display: -webkit-box;
+  display: -webkit-flex;
+  display: flex;
+  -webkit-flex-wrap: wrap;
+          flex-wrap: wrap;
+  -ms-flex-wrap: wrap;
+  -ms-flex-pack: justify;
+  -webkit-justify-content: space-around;
+          justify-content: space-around;
+  -webkit-transform: translate3d(0px, 0px, 0px);
+          transform: translate3d(0px, 0px, 0px);
+  opacity: 1;
+}
+.dayContainer + .dayContainer {
+  -webkit-box-shadow: -1px 0 0 #eee;
+          box-shadow: -1px 0 0 #eee;
+}
+.flatpickr-day {
+  background: none;
+  border: 1px solid transparent;
+  border-radius: 150px;
+  -webkit-box-sizing: border-box;
+          box-sizing: border-box;
+  color: #404848;
+  cursor: pointer;
+  font-weight: 400;
+  width: 14.2857143%;
+  -webkit-flex-basis: 14.2857143%;
+      -ms-flex-preferred-size: 14.2857143%;
+          flex-basis: 14.2857143%;
+  max-width: 39px;
+  height: 39px;
+  line-height: 39px;
+  margin: 0;
+  display: inline-block;
+  position: relative;
+  -webkit-box-pack: center;
+  -webkit-justify-content: center;
+      -ms-flex-pack: center;
+          justify-content: center;
+  text-align: center;
+}
+.flatpickr-day.inRange,
+.flatpickr-day.prevMonthDay.inRange,
+.flatpickr-day.nextMonthDay.inRange,
+.flatpickr-day.today.inRange,
+.flatpickr-day.prevMonthDay.today.inRange,
+.flatpickr-day.nextMonthDay.today.inRange,
+.flatpickr-day:hover,
+.flatpickr-day.prevMonthDay:hover,
+.flatpickr-day.nextMonthDay:hover,
+.flatpickr-day:focus,
+.flatpickr-day.prevMonthDay:focus,
+.flatpickr-day.nextMonthDay:focus {
+  cursor: pointer;
+  outline: 0;
+  background: #e9e9e9;
+  border-color: #e9e9e9;
+}
+.flatpickr-day.today {
+  border-color: #f64747;
+}
+.flatpickr-day.today:hover,
+.flatpickr-day.today:focus {
+  border-color: #f64747;
+  background: #f64747;
+  color: #fff;
+}
+.flatpickr-day.selected,
+.flatpickr-day.startRange,
+.flatpickr-day.endRange,
+.flatpickr-day.selected.inRange,
+.flatpickr-day.startRange.inRange,
+.flatpickr-day.endRange.inRange,
+.flatpickr-day.selected:focus,
+.flatpickr-day.startRange:focus,
+.flatpickr-day.endRange:focus,
+.flatpickr-day.selected:hover,
+.flatpickr-day.startRange:hover,
+.flatpickr-day.endRange:hover,
+.flatpickr-day.selected.prevMonthDay,
+.flatpickr-day.startRange.prevMonthDay,
+.flatpickr-day.endRange.prevMonthDay,
+.flatpickr-day.selected.nextMonthDay,
+.flatpickr-day.startRange.nextMonthDay,
+.flatpickr-day.endRange.nextMonthDay {
+  background: #4f99ff;
+  -webkit-box-shadow: none;
+          box-shadow: none;
+  color: #fff;
+  border-color: #4f99ff;
+}
+.flatpickr-day.selected.startRange,
+.flatpickr-day.startRange.startRange,
+.flatpickr-day.endRange.startRange {
+  border-radius: 50px 0 0 50px;
+}
+.flatpickr-day.selected.endRange,
+.flatpickr-day.startRange.endRange,
+.flatpickr-day.endRange.endRange {
+  border-radius: 0 50px 50px 0;
+}
+.flatpickr-day.selected.startRange + .endRange:not(:nth-child(7n+1)),
+.flatpickr-day.startRange.startRange + .endRange:not(:nth-child(7n+1)),
+.flatpickr-day.endRange.startRange + .endRange:not(:nth-child(7n+1)) {
+  -webkit-box-shadow: -10px 0 0 #4f99ff;
+          box-shadow: -10px 0 0 #4f99ff;
+}
+.flatpickr-day.selected.startRange.endRange,
+.flatpickr-day.startRange.startRange.endRange,
+.flatpickr-day.endRange.startRange.endRange {
+  border-radius: 50px;
+}
+.flatpickr-day.inRange {
+  border-radius: 0;
+  -webkit-box-shadow: -5px 0 0 #e9e9e9, 5px 0 0 #e9e9e9;
+          box-shadow: -5px 0 0 #e9e9e9, 5px 0 0 #e9e9e9;
+}
+.flatpickr-day.flatpickr-disabled,
+.flatpickr-day.flatpickr-disabled:hover,
+.flatpickr-day.prevMonthDay,
+.flatpickr-day.nextMonthDay,
+.flatpickr-day.notAllowed,
+.flatpickr-day.notAllowed.prevMonthDay,
+.flatpickr-day.notAllowed.nextMonthDay {
+  color: rgba(64,72,72,0.3);
+  background: transparent;
+  border-color: #e9e9e9;
+  cursor: default;
+}
+.flatpickr-day.flatpickr-disabled,
+.flatpickr-day.flatpickr-disabled:hover {
+  cursor: not-allowed;
+  color: rgba(64,72,72,0.1);
+}
+.flatpickr-day.week.selected {
+  border-radius: 0;
+  -webkit-box-shadow: -5px 0 0 #4f99ff, 5px 0 0 #4f99ff;
+          box-shadow: -5px 0 0 #4f99ff, 5px 0 0 #4f99ff;
+}
+.flatpickr-day.hidden {
+  visibility: hidden;
+}
+.rangeMode .flatpickr-day {
+  margin-top: 1px;
+}
+.flatpickr-weekwrapper {
+  float: left;
+}
+.flatpickr-weekwrapper .flatpickr-weeks {
+  padding: 0 12px;
+  -webkit-box-shadow: 1px 0 0 #eee;
+          box-shadow: 1px 0 0 #eee;
+}
+.flatpickr-weekwrapper .flatpickr-weekday {
+  float: none;
+  width: 100%;
+  line-height: 28px;
+}
+.flatpickr-weekwrapper span.flatpickr-day,
+.flatpickr-weekwrapper span.flatpickr-day:hover {
+  display: block;
+  width: 100%;
+  max-width: none;
+  color: rgba(64,72,72,0.3);
+  background: transparent;
+  cursor: default;
+  border: none;
+}
+.flatpickr-innerContainer {
+  display: block;
+  display: -webkit-box;
+  display: -webkit-flex;
+  display: -ms-flexbox;
+  display: flex;
+  -webkit-box-sizing: border-box;
+          box-sizing: border-box;
+  overflow: hidden;
+}
+.flatpickr-rContainer {
+  display: inline-block;
+  padding: 0;
+  -webkit-box-sizing: border-box;
+          box-sizing: border-box;
+}
+.flatpickr-time {
+  text-align: center;
+  outline: 0;
+  display: block;
+  height: 0;
+  line-height: 40px;
+  max-height: 40px;
+  -webkit-box-sizing: border-box;
+          box-sizing: border-box;
+  overflow: hidden;
+  display: -webkit-box;
+  display: -webkit-flex;
+  display: -ms-flexbox;
+  display: flex;
+}
+.flatpickr-time:after {
+  content: "";
+  display: table;
+  clear: both;
+}
+.flatpickr-time .numInputWrapper {
+  -webkit-box-flex: 1;
+  -webkit-flex: 1;
+      -ms-flex: 1;
+          flex: 1;
+  width: 40%;
+  height: 40px;
+  float: left;
+}
+.flatpickr-time .numInputWrapper span.arrowUp:after {
+  border-bottom-color: #404848;
+}
+.flatpickr-time .numInputWrapper span.arrowDown:after {
+  border-top-color: #404848;
+}
+.flatpickr-time.hasSeconds .numInputWrapper {
+  width: 26%;
+}
+.flatpickr-time.time24hr .numInputWrapper {
+  width: 49%;
+}
+.flatpickr-time input {
+  background: transparent;
+  -webkit-box-shadow: none;
+          box-shadow: none;
+  border: 0;
+  border-radius: 0;
+  text-align: center;
+  margin: 0;
+  padding: 0;
+  height: inherit;
+  line-height: inherit;
+  color: #404848;
+  font-size: 14px;
+  position: relative;
+  -webkit-box-sizing: border-box;
+          box-sizing: border-box;
+  -webkit-appearance: textfield;
+  -moz-appearance: textfield;
+  appearance: textfield;
+}
+.flatpickr-time input.flatpickr-hour {
+  font-weight: bold;
+}
+.flatpickr-time input.flatpickr-minute,
+.flatpickr-time input.flatpickr-second {
+  font-weight: 400;
+}
+.flatpickr-time input:focus {
+  outline: 0;
+  border: 0;
+}
+.flatpickr-time .flatpickr-time-separator,
+.flatpickr-time .flatpickr-am-pm {
+  height: inherit;
+  float: left;
+  line-height: inherit;
+  color: #404848;
+  font-weight: bold;
+  width: 2%;
+  -webkit-user-select: none;
+     -moz-user-select: none;
+      -ms-user-select: none;
+          user-select: none;
+  -webkit-align-self: center;
+      -ms-flex-item-align: center;
+          align-self: center;
+}
+.flatpickr-time .flatpickr-am-pm {
+  outline: 0;
+  width: 18%;
+  cursor: pointer;
+  text-align: center;
+  font-weight: 400;
+}
+.flatpickr-time input:hover,
+.flatpickr-time .flatpickr-am-pm:hover,
+.flatpickr-time input:focus,
+.flatpickr-time .flatpickr-am-pm:focus {
+  background: #f1f1f1;
+}
+.flatpickr-input[readonly] {
+  cursor: pointer;
+}
+@-webkit-keyframes fpFadeInDown {
+  from {
+    opacity: 0;
+    -webkit-transform: translate3d(0, -20px, 0);
+            transform: translate3d(0, -20px, 0);
+  }
+  to {
+    opacity: 1;
+    -webkit-transform: translate3d(0, 0, 0);
+            transform: translate3d(0, 0, 0);
+  }
+}
+@keyframes fpFadeInDown {
+  from {
+    opacity: 0;
+    -webkit-transform: translate3d(0, -20px, 0);
+            transform: translate3d(0, -20px, 0);
+  }
+  to {
+    opacity: 1;
+    -webkit-transform: translate3d(0, 0, 0);
+            transform: translate3d(0, 0, 0);
+  }
+}
+.flatpickr-calendar {
+  width: 310px;
+}
+.dayContainer {
+  padding: 0;
+  border-right: 0;
+}
+span.flatpickr-day,
+span.flatpickr-day.prevMonthDay,
+span.flatpickr-day.nextMonthDay {
+  border-radius: 0 !important;
+  border: 1px solid #e9e9e9;
+  max-width: none;
+  border-right-color: transparent;
+}
+span.flatpickr-day:nth-child(n+8),
+span.flatpickr-day.prevMonthDay:nth-child(n+8),
+span.flatpickr-day.nextMonthDay:nth-child(n+8) {
+  border-top-color: transparent;
+}
+span.flatpickr-day:nth-child(7n-6),
+span.flatpickr-day.prevMonthDay:nth-child(7n-6),
+span.flatpickr-day.nextMonthDay:nth-child(7n-6) {
+  border-left: 0;
+}
+span.flatpickr-day:nth-child(n+36),
+span.flatpickr-day.prevMonthDay:nth-child(n+36),
+span.flatpickr-day.nextMonthDay:nth-child(n+36) {
+  border-bottom: 0;
+}
+span.flatpickr-day:nth-child(-n+7),
+span.flatpickr-day.prevMonthDay:nth-child(-n+7),
+span.flatpickr-day.nextMonthDay:nth-child(-n+7) {
+  margin-top: 0;
+}
+span.flatpickr-day.today:not(.selected),
+span.flatpickr-day.prevMonthDay.today:not(.selected),
+span.flatpickr-day.nextMonthDay.today:not(.selected) {
+  border-color: #e9e9e9;
+  border-right-color: transparent;
+  border-top-color: transparent;
+  border-bottom-color: #f64747;
+}
+span.flatpickr-day.today:not(.selected):hover,
+span.flatpickr-day.prevMonthDay.today:not(.selected):hover,
+span.flatpickr-day.nextMonthDay.today:not(.selected):hover {
+  border: 1px solid #f64747;
+}
+span.flatpickr-day.startRange,
+span.flatpickr-day.prevMonthDay.startRange,
+span.flatpickr-day.nextMonthDay.startRange,
+span.flatpickr-day.endRange,
+span.flatpickr-day.prevMonthDay.endRange,
+span.flatpickr-day.nextMonthDay.endRange {
+  border-color: #4f99ff;
+}
+span.flatpickr-day.today,
+span.flatpickr-day.prevMonthDay.today,
+span.flatpickr-day.nextMonthDay.today,
+span.flatpickr-day.selected,
+span.flatpickr-day.prevMonthDay.selected,
+span.flatpickr-day.nextMonthDay.selected {
+  z-index: 2;
+}
+.rangeMode .flatpickr-day {
+  margin-top: -1px;
+}
+.flatpickr-weekwrapper .flatpickr-weeks {
+  -webkit-box-shadow: none;
+          box-shadow: none;
+}
+.flatpickr-weekwrapper span.flatpickr-day {
+  border: 0;
+  margin: -1px 0 0 -1px;
+}
+.hasWeeks .flatpickr-days {
+  border-right: 0;
+}
+
+       @media screen and (min-width:0\0) and (min-resolution: +72dpi) {
+               span.flatpickr-day {
+                       display: block;
+                       -webkit-box-flex: 1;
+                       -webkit-flex: 1 0 auto;
+                           -ms-flex: 1 0 auto;
+                               flex: 1 0 auto;
+               }
+       }
diff --git a/website/js/vendor/flatpickr/types/globals.d.ts b/website/js/vendor/flatpickr/types/globals.d.ts
new file mode 100644 (file)
index 0000000..a36e45b
--- /dev/null
@@ -0,0 +1,20 @@
+import { Options } from "./options";
+import { Instance, FlatpickrFn } from "./instance";
+declare global {
+    interface HTMLElement {
+        flatpickr: (config?: Options) => Instance;
+        _flatpickr?: Instance;
+    }
+    interface NodeList {
+        flatpickr: (config?: Options) => Instance | Instance[];
+    }
+    interface HTMLCollection {
+        flatpickr: (config?: Options) => Instance | Instance[];
+    }
+    interface Window {
+        flatpickr: FlatpickrFn;
+    }
+    interface Date {
+        fp_incr: (n: number) => Date;
+    }
+}
diff --git a/website/js/vendor/flatpickr/types/instance.d.ts b/website/js/vendor/flatpickr/types/instance.d.ts
new file mode 100644 (file)
index 0000000..e274274
--- /dev/null
@@ -0,0 +1,116 @@
+import { DateOption, Options, ParsedOptions } from "./options";
+import { Locale, CustomLocale, key as LocaleKey } from "./locale";
+import { RevFormat, Formats, TokenRegex } from "../utils/formatting";
+export interface Elements {
+    element: HTMLElement;
+    input: HTMLInputElement;
+    altInput?: HTMLInputElement;
+    _input: HTMLInputElement;
+    mobileInput?: HTMLInputElement;
+    mobileFormatStr?: string;
+    selectedDateElem?: DayElement;
+    todayDateElem?: DayElement;
+    _positionElement: HTMLElement;
+    weekdayContainer: HTMLDivElement;
+    calendarContainer: HTMLDivElement;
+    innerContainer?: HTMLDivElement;
+    rContainer?: HTMLDivElement;
+    daysContainer?: HTMLDivElement;
+    days: HTMLDivElement;
+    weekWrapper?: HTMLDivElement;
+    weekNumbers?: HTMLDivElement;
+    monthNav: HTMLDivElement;
+    monthsDropdownContainer: HTMLSelectElement;
+    yearElements: HTMLInputElement[];
+    monthElements: HTMLSpanElement[];
+    currentYearElement: HTMLInputElement;
+    currentMonthElement: HTMLSpanElement;
+    _hidePrevMonthArrow: boolean;
+    _hideNextMonthArrow: boolean;
+    prevMonthNav: HTMLElement;
+    nextMonthNav: HTMLElement;
+    timeContainer?: HTMLDivElement;
+    hourElement?: HTMLInputElement;
+    minuteElement?: HTMLInputElement;
+    secondElement?: HTMLInputElement;
+    amPM?: HTMLSpanElement;
+    pluginElements: Node[];
+}
+export interface Formatting {
+    revFormat: RevFormat;
+    formats: Formats;
+    tokenRegex: TokenRegex;
+}
+export declare type Instance = Elements & Formatting & {
+    minRangeDate?: Date;
+    maxRangeDate?: Date;
+    now: Date;
+    latestSelectedDateObj?: Date;
+    _selectedDateObj?: Date;
+    selectedDates: Date[];
+    _initialDate: Date;
+    config: ParsedOptions;
+    loadedPlugins: string[];
+    l10n: Locale;
+    currentYear: number;
+    currentMonth: number;
+    isOpen: boolean;
+    isMobile: boolean;
+    minDateHasTime: boolean;
+    maxDateHasTime: boolean;
+    changeMonth: (value: number, isOffset?: boolean, fromKeyboard?: boolean) => void;
+    changeYear: (year: number) => void;
+    clear: (emitChangeEvent?: boolean, toInitial?: boolean) => void;
+    close: () => void;
+    destroy: () => void;
+    isEnabled: (date: DateOption, timeless?: boolean) => boolean;
+    jumpToDate: (date?: DateOption, triggerChange?: boolean) => void;
+    open: (e?: FocusEvent | MouseEvent, positionElement?: HTMLElement) => void;
+    redraw: () => void;
+    set: (option: keyof Options | {
+        [k in keyof Options]?: Options[k];
+    }, value?: any) => void;
+    setDate: (date: DateOption | DateOption[], triggerChange?: boolean, format?: string) => void;
+    toggle: () => void;
+    pad: (num: string | number) => string;
+    parseDate: (date: Date | string | number, givenFormat?: string, timeless?: boolean) => Date | undefined;
+    formatDate: (dateObj: Date, frmt: string) => string;
+    _handlers: {
+        event: string;
+        element: Element;
+        handler: (e?: Event) => void;
+        options?: {
+            capture?: boolean;
+        };
+    }[];
+    _bind: <E extends Element>(element: E | E[], event: string | string[], handler: (e?: any) => void) => void;
+    _createElement: <E extends HTMLElement>(tag: keyof HTMLElementTagNameMap, className: string, content?: string) => E;
+    _setHoursFromDate: (date: Date) => void;
+    _debouncedChange: () => void;
+    __hideNextMonthArrow: boolean;
+    __hidePrevMonthArrow: boolean;
+    _positionCalendar: (customPositionElement?: HTMLElement) => void;
+    utils: {
+        getDaysInMonth: (month?: number, year?: number) => number;
+    };
+};
+export interface FlatpickrFn {
+    (selector: Node, config?: Options): Instance;
+    (selector: ArrayLike<Node>, config?: Options): Instance[];
+    (selector: string, config?: Options): Instance | Instance[];
+    defaultConfig: Partial<ParsedOptions>;
+    l10ns: {
+        [k in LocaleKey]?: CustomLocale;
+    } & {
+        default: Locale;
+    };
+    localize: (l10n: CustomLocale) => void;
+    setDefaults: (config: Options) => void;
+    parseDate: (date: DateOption, format?: string, timeless?: boolean) => Date | undefined;
+    formatDate: (date: Date, format: string) => string;
+    compareDates: (date1: Date, date2: Date, timeless?: boolean) => number;
+}
+export declare type DayElement = HTMLSpanElement & {
+    dateObj: Date;
+    $i: number;
+};
diff --git a/website/js/vendor/flatpickr/types/locale.d.ts b/website/js/vendor/flatpickr/types/locale.d.ts
new file mode 100644 (file)
index 0000000..86ad582
--- /dev/null
@@ -0,0 +1,46 @@
+export declare type Locale = {
+    weekdays: {
+        shorthand: [string, string, string, string, string, string, string];
+        longhand: [string, string, string, string, string, string, string];
+    };
+    months: {
+        shorthand: [string, string, string, string, string, string, string, string, string, string, string, string];
+        longhand: [string, string, string, string, string, string, string, string, string, string, string, string];
+    };
+    daysInMonth: [number, number, number, number, number, number, number, number, number, number, number, number];
+    firstDayOfWeek: number;
+    ordinal: (nth: number) => string;
+    rangeSeparator: string;
+    weekAbbreviation: string;
+    scrollTitle: string;
+    toggleTitle: string;
+    amPM: [string, string];
+    yearAriaLabel: string;
+    monthAriaLabel: string;
+    hourAriaLabel: string;
+    minuteAriaLabel: string;
+    time_24hr: boolean;
+};
+export declare type CustomLocale = {
+    ordinal?: Locale["ordinal"];
+    daysInMonth?: Locale["daysInMonth"];
+    firstDayOfWeek?: Locale["firstDayOfWeek"];
+    rangeSeparator?: Locale["rangeSeparator"];
+    weekAbbreviation?: Locale["weekAbbreviation"];
+    toggleTitle?: Locale["toggleTitle"];
+    scrollTitle?: Locale["scrollTitle"];
+    yearAriaLabel?: string;
+    hourAriaLabel?: string;
+    minuteAriaLabel?: string;
+    amPM?: Locale["amPM"];
+    time_24hr?: Locale["time_24hr"];
+    weekdays: {
+        shorthand: [string, string, string, string, string, string, string];
+        longhand: [string, string, string, string, string, string, string];
+    };
+    months: {
+        shorthand: [string, string, string, string, string, string, string, string, string, string, string, string];
+        longhand: [string, string, string, string, string, string, string, string, string, string, string, string];
+    };
+};
+export declare type key = "ar" | "at" | "az" | "be" | "bg" | "bn" | "bs" | "ca" | "cat" | "cs" | "cy" | "da" | "de" | "default" | "en" | "eo" | "es" | "et" | "fa" | "fi" | "fo" | "fr" | "gr" | "he" | "hi" | "hr" | "hu" | "id" | "is" | "it" | "ja" | "ka" | "ko" | "km" | "kz" | "lt" | "lv" | "mk" | "mn" | "ms" | "my" | "nl" | "no" | "pa" | "pl" | "pt" | "ro" | "ru" | "si" | "sk" | "sl" | "sq" | "sr" | "sv" | "th" | "tr" | "uk" | "vn" | "zh" | "uz" | "uz_latn" | "zh_tw";
diff --git a/website/js/vendor/flatpickr/types/options.d.ts b/website/js/vendor/flatpickr/types/options.d.ts
new file mode 100644 (file)
index 0000000..f62d10e
--- /dev/null
@@ -0,0 +1,148 @@
+import { Instance } from "./instance";
+import { CustomLocale, key as LocaleKey, Locale } from "./locale";
+export declare type DateOption = Date | string | number;
+export declare type DateRangeLimit<D = DateOption> = {
+    from: D;
+    to: D;
+};
+export declare type DateLimit<D = DateOption> = D | DateRangeLimit<D> | ((date: Date) => boolean);
+export declare type Hook = (dates: Date[], currentDateString: string, self: Instance, data?: any) => void;
+export declare type HookKey = "onChange" | "onClose" | "onDayCreate" | "onDestroy" | "onKeyDown" | "onMonthChange" | "onOpen" | "onParseConfig" | "onReady" | "onValueUpdate" | "onYearChange" | "onPreCalendarPosition";
+export declare const HOOKS: HookKey[];
+export declare type Plugin<E = {}> = (fp: Instance & E) => Options;
+export interface BaseOptions {
+    allowInput: boolean;
+    allowInvalidPreload: boolean;
+    altFormat: string;
+    altInput: boolean;
+    altInputClass: string;
+    animate: boolean;
+    appendTo: HTMLElement;
+    ariaDateFormat: string;
+    autoFillDefaultTime: boolean;
+    clickOpens: boolean;
+    closeOnSelect: boolean;
+    conjunction: string;
+    dateFormat: string;
+    defaultDate: DateOption | DateOption[];
+    defaultHour: number;
+    defaultMinute: number;
+    defaultSeconds: number;
+    disable: DateLimit<DateOption>[];
+    disableMobile: boolean;
+    enable: DateLimit<DateOption>[];
+    enableSeconds: boolean;
+    enableTime: boolean;
+    errorHandler: (e: Error) => void;
+    formatDate: (date: Date, format: string, locale: Locale) => string;
+    getWeek: (date: Date) => string | number;
+    hourIncrement: number;
+    ignoredFocusElements: HTMLElement[];
+    inline: boolean;
+    locale: LocaleKey | CustomLocale;
+    maxDate: DateOption;
+    maxTime: DateOption;
+    minDate: DateOption;
+    minTime: DateOption;
+    minuteIncrement: number;
+    mode: "single" | "multiple" | "range" | "time";
+    monthSelectorType: "dropdown" | "static";
+    nextArrow: string;
+    noCalendar: boolean;
+    now?: DateOption;
+    onChange: Hook | Hook[];
+    onClose: Hook | Hook[];
+    onDayCreate: Hook | Hook[];
+    onDestroy: Hook | Hook[];
+    onKeyDown: Hook | Hook[];
+    onMonthChange: Hook | Hook[];
+    onOpen: Hook | Hook[];
+    onParseConfig: Hook | Hook[];
+    onReady: Hook | Hook[];
+    onValueUpdate: Hook | Hook[];
+    onYearChange: Hook | Hook[];
+    onPreCalendarPosition: Hook | Hook[];
+    parseDate: (date: string, format: string) => Date;
+    plugins: Plugin[];
+    position: "auto" | "above" | "below";
+    positionElement: Element;
+    prevArrow: string;
+    shorthandCurrentMonth: boolean;
+    static: boolean;
+    showMonths?: number;
+    time_24hr: boolean;
+    weekNumbers: boolean;
+    wrap: boolean;
+}
+export declare type Options = Partial<BaseOptions>;
+export interface ParsedOptions {
+    _disable: DateLimit<Date>[];
+    _enable: DateLimit<Date>[];
+    _maxDate?: Date;
+    _maxTime?: Date;
+    _minDate?: Date;
+    _minTime?: Date;
+    allowInput: boolean;
+    allowInvalidPreload: boolean;
+    altFormat: string;
+    altInput: boolean;
+    altInputClass: string;
+    animate: boolean;
+    appendTo?: HTMLElement;
+    ariaDateFormat: string;
+    autoFillDefaultTime: boolean;
+    clickOpens: boolean;
+    closeOnSelect: boolean;
+    conjunction: string;
+    dateFormat: string;
+    defaultDate?: Date | Date[];
+    defaultHour: number;
+    defaultMinute: number;
+    defaultSeconds: number;
+    disable: DateLimit<Date>[];
+    disableMobile: boolean;
+    enable: DateLimit<Date>[];
+    enableSeconds: boolean;
+    enableTime: boolean;
+    errorHandler: (err: Error) => void;
+    formatDate?: Options["formatDate"];
+    getWeek: (date: Date) => string | number;
+    hourIncrement: number;
+    ignoredFocusElements: HTMLElement[];
+    inline: boolean;
+    locale: LocaleKey | CustomLocale;
+    maxDate?: Date;
+    maxTime?: Date;
+    minDate?: Date;
+    minTime?: Date;
+    minuteIncrement: number;
+    mode: BaseOptions["mode"];
+    monthSelectorType: string;
+    nextArrow: string;
+    noCalendar: boolean;
+    now: Date;
+    onChange: Hook[];
+    onClose: Hook[];
+    onDayCreate: Hook[];
+    onDestroy: Hook[];
+    onKeyDown: Hook[];
+    onMonthChange: Hook[];
+    onOpen: Hook[];
+    onParseConfig: Hook[];
+    onReady: Hook[];
+    onValueUpdate: Hook[];
+    onYearChange: Hook[];
+    onPreCalendarPosition: Hook[];
+    parseDate?: BaseOptions["parseDate"];
+    plugins: Plugin[];
+    position: BaseOptions["position"];
+    positionElement?: HTMLElement;
+    prevArrow: string;
+    shorthandCurrentMonth: boolean;
+    showMonths: number;
+    static: boolean;
+    time_24hr: boolean;
+    weekNumbers: boolean;
+    wrap: boolean;
+}
+export declare const defaults: ParsedOptions;
diff --git a/website/js/vendor/flatpickr/typings.d.ts b/website/js/vendor/flatpickr/typings.d.ts
new file mode 100644 (file)
index 0000000..2c9c27d
--- /dev/null
@@ -0,0 +1,40 @@
+import { FlatpickrFn } from "./types/instance";
+import { Instance as _Instance } from "./types/instance";
+import {
+  Options as _Options,
+  Hook as _Hook,
+  HookKey as _HookKey,
+  ParsedOptions as _ParsedOptions,
+  DateLimit as _DateLimit,
+  DateOption as _DateOption,
+  DateRangeLimit as _DateRangeLimit,
+  Plugin as _Plugin,
+} from "./types/options";
+
+import {
+  Locale as _Locale,
+  CustomLocale as _CustomLocale,
+  key as _LocaleKey,
+} from "./types/locale";
+
+declare var flatpickr: FlatpickrFn;
+
+declare namespace flatpickr {
+  export type Instance = _Instance;
+  export type CustomLocale = _CustomLocale;
+  export type Locale = _Locale;
+
+  export namespace Options {
+    export type Options = _Options;
+    export type Hook = _Hook;
+    export type HookKey = _HookKey;
+    export type ParsedOptions = _ParsedOptions;
+    export type DateLimit = _DateLimit;
+    export type DateOption = _DateOption;
+    export type DateRangeLimit = _DateRangeLimit;
+    export type Plugin = _Plugin;
+    export type LocaleKey = _LocaleKey;
+  }
+}
+
+export default flatpickr;
diff --git a/website/js/vendor/flatpickr/utils/dates.d.ts b/website/js/vendor/flatpickr/utils/dates.d.ts
new file mode 100644 (file)
index 0000000..fc30798
--- /dev/null
@@ -0,0 +1,18 @@
+import { Locale } from "../types/locale";
+import { ParsedOptions } from "../types/options";
+export interface FormatterArgs {
+    config?: ParsedOptions;
+    l10n?: Locale;
+    isMobile?: boolean;
+}
+export declare const createDateFormatter: ({ config, l10n, isMobile, }: FormatterArgs) => (dateObj: Date, frmt: string, overrideLocale?: Locale | undefined) => string;
+export declare const createDateParser: ({ config, l10n }: {
+    config?: ParsedOptions | undefined;
+    l10n?: Locale | undefined;
+}) => (date: Date | string | number, givenFormat?: string | undefined, timeless?: boolean | undefined, customLocale?: Locale | undefined) => Date | undefined;
+export declare function compareDates(date1: Date, date2: Date, timeless?: boolean): number;
+export declare function compareTimes(date1: Date, date2: Date): number;
+export declare const isBetween: (ts: number, ts1: number, ts2: number) => boolean;
+export declare const duration: {
+    DAY: number;
+};
diff --git a/website/js/vendor/flatpickr/utils/dom.d.ts b/website/js/vendor/flatpickr/utils/dom.d.ts
new file mode 100644 (file)
index 0000000..b15f309
--- /dev/null
@@ -0,0 +1,6 @@
+export declare function toggleClass(elem: HTMLElement, className: string, bool: boolean): void;
+export declare function createElement<T extends HTMLElement>(tag: keyof HTMLElementTagNameMap, className: string, content?: string): T;
+export declare function clearNode(node: HTMLElement): void;
+export declare function findParent(node: Element, condition: (n: Element) => boolean): Element | undefined;
+export declare function createNumberInput(inputClassName: string, opts?: Record<string, any>): HTMLDivElement;
+export declare function getEventTarget(event: Event): EventTarget | null;
diff --git a/website/js/vendor/flatpickr/utils/formatting.d.ts b/website/js/vendor/flatpickr/utils/formatting.d.ts
new file mode 100644 (file)
index 0000000..b430324
--- /dev/null
@@ -0,0 +1,13 @@
+import { Locale } from "../types/locale";
+import { ParsedOptions } from "../types/options";
+export declare type token = "D" | "F" | "G" | "H" | "J" | "K" | "M" | "S" | "U" | "W" | "Y" | "Z" | "d" | "h" | "i" | "j" | "l" | "m" | "n" | "s" | "u" | "w" | "y";
+export declare const monthToStr: (monthNumber: number, shorthand: boolean, locale: Locale) => string;
+export declare type RevFormatFn = (date: Date, data: string, locale: Locale) => Date | void | undefined;
+export declare type RevFormat = Record<string, RevFormatFn>;
+export declare const revFormat: RevFormat;
+export declare type TokenRegex = {
+    [k in token]: string;
+};
+export declare const tokenRegex: TokenRegex;
+export declare type Formats = Record<token, (date: Date, locale: Locale, options: ParsedOptions) => string | number>;
+export declare const formats: Formats;
diff --git a/website/js/vendor/flatpickr/utils/index.d.ts b/website/js/vendor/flatpickr/utils/index.d.ts
new file mode 100644 (file)
index 0000000..113069e
--- /dev/null
@@ -0,0 +1,8 @@
+export declare const pad: (number: string | number, length?: number) => string;
+export declare const int: (bool: boolean) => 1 | 0;
+export declare function debounce<F extends Function>(func: F, wait: number, immediate?: boolean): (this: Function) => void;
+export declare const arrayify: <T>(obj: T | T[]) => T[];
+export declare type IncrementEvent = MouseEvent & {
+    delta: number;
+    type: "increment";
+};
diff --git a/website/js/vendor/flatpickr/utils/polyfills.d.ts b/website/js/vendor/flatpickr/utils/polyfills.d.ts
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/website/js/vendor/moment/moment-with-locales.min.js b/website/js/vendor/moment/moment-with-locales.min.js
new file mode 100644 (file)
index 0000000..02cd72b
--- /dev/null
@@ -0,0 +1 @@
+!function(e,a){"object"==typeof exports&&"undefined"!=typeof module?module.exports=a():"function"==typeof define&&define.amd?define(a):e.moment=a()}(this,function(){"use strict";var e,n;function l(){return e.apply(null,arguments)}function _(e){return e instanceof Array||"[object Array]"===Object.prototype.toString.call(e)}function i(e){return null!=e&&"[object Object]"===Object.prototype.toString.call(e)}function o(e){return void 0===e}function m(e){return"number"==typeof e||"[object Number]"===Object.prototype.toString.call(e)}function u(e){return e instanceof Date||"[object Date]"===Object.prototype.toString.call(e)}function M(e,a){var t,s=[];for(t=0;t<e.length;++t)s.push(a(e[t],t));return s}function h(e,a){return Object.prototype.hasOwnProperty.call(e,a)}function L(e,a){for(var t in a)h(a,t)&&(e[t]=a[t]);return h(a,"toString")&&(e.toString=a.toString),h(a,"valueOf")&&(e.valueOf=a.valueOf),e}function c(e,a,t,s){return va(e,a,t,s,!0).utc()}function Y(e){return null==e._pf&&(e._pf={empty:!1,unusedTokens:[],unusedInput:[],overflow:-2,charsLeftOver:0,nullInput:!1,invalidMonth:null,invalidFormat:!1,userInvalidated:!1,iso:!1,parsedDateParts:[],meridiem:null,rfc2822:!1,weekdayMismatch:!1}),e._pf}function y(e){if(null==e._isValid){var a=Y(e),t=n.call(a.parsedDateParts,function(e){return null!=e}),s=!isNaN(e._d.getTime())&&a.overflow<0&&!a.empty&&!a.invalidMonth&&!a.invalidWeekday&&!a.weekdayMismatch&&!a.nullInput&&!a.invalidFormat&&!a.userInvalidated&&(!a.meridiem||a.meridiem&&t);if(e._strict&&(s=s&&0===a.charsLeftOver&&0===a.unusedTokens.length&&void 0===a.bigHour),null!=Object.isFrozen&&Object.isFrozen(e))return s;e._isValid=s}return e._isValid}function f(e){var a=c(NaN);return null!=e?L(Y(a),e):Y(a).userInvalidated=!0,a}n=Array.prototype.some?Array.prototype.some:function(e){for(var a=Object(this),t=a.length>>>0,s=0;s<t;s++)if(s in a&&e.call(this,a[s],s,a))return!0;return!1};var d=l.momentProperties=[];function k(e,a){var t,s,n;if(o(a._isAMomentObject)||(e._isAMomentObject=a._isAMomentObject),o(a._i)||(e._i=a._i),o(a._f)||(e._f=a._f),o(a._l)||(e._l=a._l),o(a._strict)||(e._strict=a._strict),o(a._tzm)||(e._tzm=a._tzm),o(a._isUTC)||(e._isUTC=a._isUTC),o(a._offset)||(e._offset=a._offset),o(a._pf)||(e._pf=Y(a)),o(a._locale)||(e._locale=a._locale),0<d.length)for(t=0;t<d.length;t++)o(n=a[s=d[t]])||(e[s]=n);return e}var a=!1;function p(e){k(this,e),this._d=new Date(null!=e._d?e._d.getTime():NaN),this.isValid()||(this._d=new Date(NaN)),!1===a&&(a=!0,l.updateOffset(this),a=!1)}function D(e){return e instanceof p||null!=e&&null!=e._isAMomentObject}function T(e){return e<0?Math.ceil(e)||0:Math.floor(e)}function g(e){var a=+e,t=0;return 0!==a&&isFinite(a)&&(t=T(a)),t}function r(e,a,t){var s,n=Math.min(e.length,a.length),d=Math.abs(e.length-a.length),r=0;for(s=0;s<n;s++)(t&&e[s]!==a[s]||!t&&g(e[s])!==g(a[s]))&&r++;return r+d}function w(e){!1===l.suppressDeprecationWarnings&&"undefined"!=typeof console&&console.warn&&console.warn("Deprecation warning: "+e)}function t(n,d){var r=!0;return L(function(){if(null!=l.deprecationHandler&&l.deprecationHandler(null,n),r){for(var e,a=[],t=0;t<arguments.length;t++){if(e="","object"==typeof arguments[t]){for(var s in e+="\n["+t+"] ",arguments[0])e+=s+": "+arguments[0][s]+", ";e=e.slice(0,-2)}else e=arguments[t];a.push(e)}w(n+"\nArguments: "+Array.prototype.slice.call(a).join("")+"\n"+(new Error).stack),r=!1}return d.apply(this,arguments)},d)}var s,v={};function H(e,a){null!=l.deprecationHandler&&l.deprecationHandler(e,a),v[e]||(w(a),v[e]=!0)}function S(e){return e instanceof Function||"[object Function]"===Object.prototype.toString.call(e)}function b(e,a){var t,s=L({},e);for(t in a)h(a,t)&&(i(e[t])&&i(a[t])?(s[t]={},L(s[t],e[t]),L(s[t],a[t])):null!=a[t]?s[t]=a[t]:delete s[t]);for(t in e)h(e,t)&&!h(a,t)&&i(e[t])&&(s[t]=L({},s[t]));return s}function j(e){null!=e&&this.set(e)}l.suppressDeprecationWarnings=!1,l.deprecationHandler=null,s=Object.keys?Object.keys:function(e){var a,t=[];for(a in e)h(e,a)&&t.push(a);return t};var x={};function P(e,a){var t=e.toLowerCase();x[t]=x[t+"s"]=x[a]=e}function O(e){return"string"==typeof e?x[e]||x[e.toLowerCase()]:void 0}function W(e){var a,t,s={};for(t in e)h(e,t)&&(a=O(t))&&(s[a]=e[t]);return s}var E={};function A(e,a){E[e]=a}function F(e,a,t){var s=""+Math.abs(e),n=a-s.length;return(0<=e?t?"+":"":"-")+Math.pow(10,Math.max(0,n)).toString().substr(1)+s}var z=/(\[[^\[]*\])|(\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|YYYYYY|YYYYY|YYYY|YY|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,J=/(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g,N={},R={};function I(e,a,t,s){var n=s;"string"==typeof s&&(n=function(){return this[s]()}),e&&(R[e]=n),a&&(R[a[0]]=function(){return F(n.apply(this,arguments),a[1],a[2])}),t&&(R[t]=function(){return this.localeData().ordinal(n.apply(this,arguments),e)})}function C(e,a){return e.isValid()?(a=G(a,e.localeData()),N[a]=N[a]||function(s){var e,n,a,d=s.match(z);for(e=0,n=d.length;e<n;e++)R[d[e]]?d[e]=R[d[e]]:d[e]=(a=d[e]).match(/\[[\s\S]/)?a.replace(/^\[|\]$/g,""):a.replace(/\\/g,"");return function(e){var a,t="";for(a=0;a<n;a++)t+=S(d[a])?d[a].call(e,s):d[a];return t}}(a),N[a](e)):e.localeData().invalidDate()}function G(e,a){var t=5;function s(e){return a.longDateFormat(e)||e}for(J.lastIndex=0;0<=t&&J.test(e);)e=e.replace(J,s),J.lastIndex=0,t-=1;return e}var U=/\d/,V=/\d\d/,K=/\d{3}/,$=/\d{4}/,Z=/[+-]?\d{6}/,B=/\d\d?/,q=/\d\d\d\d?/,Q=/\d\d\d\d\d\d?/,X=/\d{1,3}/,ee=/\d{1,4}/,ae=/[+-]?\d{1,6}/,te=/\d+/,se=/[+-]?\d+/,ne=/Z|[+-]\d\d:?\d\d/gi,de=/Z|[+-]\d\d(?::?\d\d)?/gi,re=/[0-9]{0,256}['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFF07\uFF10-\uFFEF]{1,256}|[\u0600-\u06FF\/]{1,256}(\s*?[\u0600-\u06FF]{1,256}){1,2}/i,_e={};function ie(e,t,s){_e[e]=S(t)?t:function(e,a){return e&&s?s:t}}function oe(e,a){return h(_e,e)?_e[e](a._strict,a._locale):new RegExp(me(e.replace("\\","").replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g,function(e,a,t,s,n){return a||t||s||n})))}function me(e){return e.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")}var ue={};function le(e,t){var a,s=t;for("string"==typeof e&&(e=[e]),m(t)&&(s=function(e,a){a[t]=g(e)}),a=0;a<e.length;a++)ue[e[a]]=s}function Me(e,n){le(e,function(e,a,t,s){t._w=t._w||{},n(e,t._w,t,s)})}var he=0,Le=1,ce=2,Ye=3,ye=4,fe=5,ke=6,pe=7,De=8;function Te(e){return ge(e)?366:365}function ge(e){return e%4==0&&e%100!=0||e%400==0}I("Y",0,0,function(){var e=this.year();return e<=9999?""+e:"+"+e}),I(0,["YY",2],0,function(){return this.year()%100}),I(0,["YYYY",4],0,"year"),I(0,["YYYYY",5],0,"year"),I(0,["YYYYYY",6,!0],0,"year"),P("year","y"),A("year",1),ie("Y",se),ie("YY",B,V),ie("YYYY",ee,$),ie("YYYYY",ae,Z),ie("YYYYYY",ae,Z),le(["YYYYY","YYYYYY"],he),le("YYYY",function(e,a){a[he]=2===e.length?l.parseTwoDigitYear(e):g(e)}),le("YY",function(e,a){a[he]=l.parseTwoDigitYear(e)}),le("Y",function(e,a){a[he]=parseInt(e,10)}),l.parseTwoDigitYear=function(e){return g(e)+(68<g(e)?1900:2e3)};var we,ve=He("FullYear",!0);function He(a,t){return function(e){return null!=e?(be(this,a,e),l.updateOffset(this,t),this):Se(this,a)}}function Se(e,a){return e.isValid()?e._d["get"+(e._isUTC?"UTC":"")+a]():NaN}function be(e,a,t){e.isValid()&&!isNaN(t)&&("FullYear"===a&&ge(e.year())&&1===e.month()&&29===e.date()?e._d["set"+(e._isUTC?"UTC":"")+a](t,e.month(),je(t,e.month())):e._d["set"+(e._isUTC?"UTC":"")+a](t))}function je(e,a){if(isNaN(e)||isNaN(a))return NaN;var t,s=(a%(t=12)+t)%t;return e+=(a-s)/12,1===s?ge(e)?29:28:31-s%7%2}we=Array.prototype.indexOf?Array.prototype.indexOf:function(e){var a;for(a=0;a<this.length;++a)if(this[a]===e)return a;return-1},I("M",["MM",2],"Mo",function(){return this.month()+1}),I("MMM",0,0,function(e){return this.localeData().monthsShort(this,e)}),I("MMMM",0,0,function(e){return this.localeData().months(this,e)}),P("month","M"),A("month",8),ie("M",B),ie("MM",B,V),ie("MMM",function(e,a){return a.monthsShortRegex(e)}),ie("MMMM",function(e,a){return a.monthsRegex(e)}),le(["M","MM"],function(e,a){a[Le]=g(e)-1}),le(["MMM","MMMM"],function(e,a,t,s){var n=t._locale.monthsParse(e,s,t._strict);null!=n?a[Le]=n:Y(t).invalidMonth=e});var xe=/D[oD]?(\[[^\[\]]*\]|\s)+MMMM?/,Pe="January_February_March_April_May_June_July_August_September_October_November_December".split("_");var Oe="Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_");function We(e,a){var t;if(!e.isValid())return e;if("string"==typeof a)if(/^\d+$/.test(a))a=g(a);else if(!m(a=e.localeData().monthsParse(a)))return e;return t=Math.min(e.date(),je(e.year(),a)),e._d["set"+(e._isUTC?"UTC":"")+"Month"](a,t),e}function Ee(e){return null!=e?(We(this,e),l.updateOffset(this,!0),this):Se(this,"Month")}var Ae=re;var Fe=re;function ze(){function e(e,a){return a.length-e.length}var a,t,s=[],n=[],d=[];for(a=0;a<12;a++)t=c([2e3,a]),s.push(this.monthsShort(t,"")),n.push(this.months(t,"")),d.push(this.months(t,"")),d.push(this.monthsShort(t,""));for(s.sort(e),n.sort(e),d.sort(e),a=0;a<12;a++)s[a]=me(s[a]),n[a]=me(n[a]);for(a=0;a<24;a++)d[a]=me(d[a]);this._monthsRegex=new RegExp("^("+d.join("|")+")","i"),this._monthsShortRegex=this._monthsRegex,this._monthsStrictRegex=new RegExp("^("+n.join("|")+")","i"),this._monthsShortStrictRegex=new RegExp("^("+s.join("|")+")","i")}function Je(e){var a=new Date(Date.UTC.apply(null,arguments));return e<100&&0<=e&&isFinite(a.getUTCFullYear())&&a.setUTCFullYear(e),a}function Ne(e,a,t){var s=7+a-t;return-((7+Je(e,0,s).getUTCDay()-a)%7)+s-1}function Re(e,a,t,s,n){var d,r,_=1+7*(a-1)+(7+t-s)%7+Ne(e,s,n);return r=_<=0?Te(d=e-1)+_:_>Te(e)?(d=e+1,_-Te(e)):(d=e,_),{year:d,dayOfYear:r}}function Ie(e,a,t){var s,n,d=Ne(e.year(),a,t),r=Math.floor((e.dayOfYear()-d-1)/7)+1;return r<1?s=r+Ce(n=e.year()-1,a,t):r>Ce(e.year(),a,t)?(s=r-Ce(e.year(),a,t),n=e.year()+1):(n=e.year(),s=r),{week:s,year:n}}function Ce(e,a,t){var s=Ne(e,a,t),n=Ne(e+1,a,t);return(Te(e)-s+n)/7}I("w",["ww",2],"wo","week"),I("W",["WW",2],"Wo","isoWeek"),P("week","w"),P("isoWeek","W"),A("week",5),A("isoWeek",5),ie("w",B),ie("ww",B,V),ie("W",B),ie("WW",B,V),Me(["w","ww","W","WW"],function(e,a,t,s){a[s.substr(0,1)]=g(e)});I("d",0,"do","day"),I("dd",0,0,function(e){return this.localeData().weekdaysMin(this,e)}),I("ddd",0,0,function(e){return this.localeData().weekdaysShort(this,e)}),I("dddd",0,0,function(e){return this.localeData().weekdays(this,e)}),I("e",0,0,"weekday"),I("E",0,0,"isoWeekday"),P("day","d"),P("weekday","e"),P("isoWeekday","E"),A("day",11),A("weekday",11),A("isoWeekday",11),ie("d",B),ie("e",B),ie("E",B),ie("dd",function(e,a){return a.weekdaysMinRegex(e)}),ie("ddd",function(e,a){return a.weekdaysShortRegex(e)}),ie("dddd",function(e,a){return a.weekdaysRegex(e)}),Me(["dd","ddd","dddd"],function(e,a,t,s){var n=t._locale.weekdaysParse(e,s,t._strict);null!=n?a.d=n:Y(t).invalidWeekday=e}),Me(["d","e","E"],function(e,a,t,s){a[s]=g(e)});var Ge="Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_");var Ue="Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_");var Ve="Su_Mo_Tu_We_Th_Fr_Sa".split("_");var Ke=re;var $e=re;var Ze=re;function Be(){function e(e,a){return a.length-e.length}var a,t,s,n,d,r=[],_=[],i=[],o=[];for(a=0;a<7;a++)t=c([2e3,1]).day(a),s=this.weekdaysMin(t,""),n=this.weekdaysShort(t,""),d=this.weekdays(t,""),r.push(s),_.push(n),i.push(d),o.push(s),o.push(n),o.push(d);for(r.sort(e),_.sort(e),i.sort(e),o.sort(e),a=0;a<7;a++)_[a]=me(_[a]),i[a]=me(i[a]),o[a]=me(o[a]);this._weekdaysRegex=new RegExp("^("+o.join("|")+")","i"),this._weekdaysShortRegex=this._weekdaysRegex,this._weekdaysMinRegex=this._weekdaysRegex,this._weekdaysStrictRegex=new RegExp("^("+i.join("|")+")","i"),this._weekdaysShortStrictRegex=new RegExp("^("+_.join("|")+")","i"),this._weekdaysMinStrictRegex=new RegExp("^("+r.join("|")+")","i")}function qe(){return this.hours()%12||12}function Qe(e,a){I(e,0,0,function(){return this.localeData().meridiem(this.hours(),this.minutes(),a)})}function Xe(e,a){return a._meridiemParse}I("H",["HH",2],0,"hour"),I("h",["hh",2],0,qe),I("k",["kk",2],0,function(){return this.hours()||24}),I("hmm",0,0,function(){return""+qe.apply(this)+F(this.minutes(),2)}),I("hmmss",0,0,function(){return""+qe.apply(this)+F(this.minutes(),2)+F(this.seconds(),2)}),I("Hmm",0,0,function(){return""+this.hours()+F(this.minutes(),2)}),I("Hmmss",0,0,function(){return""+this.hours()+F(this.minutes(),2)+F(this.seconds(),2)}),Qe("a",!0),Qe("A",!1),P("hour","h"),A("hour",13),ie("a",Xe),ie("A",Xe),ie("H",B),ie("h",B),ie("k",B),ie("HH",B,V),ie("hh",B,V),ie("kk",B,V),ie("hmm",q),ie("hmmss",Q),ie("Hmm",q),ie("Hmmss",Q),le(["H","HH"],Ye),le(["k","kk"],function(e,a,t){var s=g(e);a[Ye]=24===s?0:s}),le(["a","A"],function(e,a,t){t._isPm=t._locale.isPM(e),t._meridiem=e}),le(["h","hh"],function(e,a,t){a[Ye]=g(e),Y(t).bigHour=!0}),le("hmm",function(e,a,t){var s=e.length-2;a[Ye]=g(e.substr(0,s)),a[ye]=g(e.substr(s)),Y(t).bigHour=!0}),le("hmmss",function(e,a,t){var s=e.length-4,n=e.length-2;a[Ye]=g(e.substr(0,s)),a[ye]=g(e.substr(s,2)),a[fe]=g(e.substr(n)),Y(t).bigHour=!0}),le("Hmm",function(e,a,t){var s=e.length-2;a[Ye]=g(e.substr(0,s)),a[ye]=g(e.substr(s))}),le("Hmmss",function(e,a,t){var s=e.length-4,n=e.length-2;a[Ye]=g(e.substr(0,s)),a[ye]=g(e.substr(s,2)),a[fe]=g(e.substr(n))});var ea,aa=He("Hours",!0),ta={calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},longDateFormat:{LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"},invalidDate:"Invalid date",ordinal:"%d",dayOfMonthOrdinalParse:/\d{1,2}/,relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},months:Pe,monthsShort:Oe,week:{dow:0,doy:6},weekdays:Ge,weekdaysMin:Ve,weekdaysShort:Ue,meridiemParse:/[ap]\.?m?\.?/i},sa={},na={};function da(e){return e?e.toLowerCase().replace("_","-"):e}function ra(e){var a=null;if(!sa[e]&&"undefined"!=typeof module&&module&&module.exports)try{a=ea._abbr,require("./locale/"+e),_a(a)}catch(e){}return sa[e]}function _a(e,a){var t;return e&&((t=o(a)?oa(e):ia(e,a))?ea=t:"undefined"!=typeof console&&console.warn&&console.warn("Locale "+e+" not found. Did you forget to load it?")),ea._abbr}function ia(e,a){if(null===a)return delete sa[e],null;var t,s=ta;if(a.abbr=e,null!=sa[e])H("defineLocaleOverride","use moment.updateLocale(localeName, config) to change an existing locale. moment.defineLocale(localeName, config) should only be used for creating a new locale See http://momentjs.com/guides/#/warnings/define-locale/ for more info."),s=sa[e]._config;else if(null!=a.parentLocale)if(null!=sa[a.parentLocale])s=sa[a.parentLocale]._config;else{if(null==(t=ra(a.parentLocale)))return na[a.parentLocale]||(na[a.parentLocale]=[]),na[a.parentLocale].push({name:e,config:a}),null;s=t._config}return sa[e]=new j(b(s,a)),na[e]&&na[e].forEach(function(e){ia(e.name,e.config)}),_a(e),sa[e]}function oa(e){var a;if(e&&e._locale&&e._locale._abbr&&(e=e._locale._abbr),!e)return ea;if(!_(e)){if(a=ra(e))return a;e=[e]}return function(e){for(var a,t,s,n,d=0;d<e.length;){for(a=(n=da(e[d]).split("-")).length,t=(t=da(e[d+1]))?t.split("-"):null;0<a;){if(s=ra(n.slice(0,a).join("-")))return s;if(t&&t.length>=a&&r(n,t,!0)>=a-1)break;a--}d++}return ea}(e)}function ma(e){var a,t=e._a;return t&&-2===Y(e).overflow&&(a=t[Le]<0||11<t[Le]?Le:t[ce]<1||t[ce]>je(t[he],t[Le])?ce:t[Ye]<0||24<t[Ye]||24===t[Ye]&&(0!==t[ye]||0!==t[fe]||0!==t[ke])?Ye:t[ye]<0||59<t[ye]?ye:t[fe]<0||59<t[fe]?fe:t[ke]<0||999<t[ke]?ke:-1,Y(e)._overflowDayOfYear&&(a<he||ce<a)&&(a=ce),Y(e)._overflowWeeks&&-1===a&&(a=pe),Y(e)._overflowWeekday&&-1===a&&(a=De),Y(e).overflow=a),e}function ua(e,a,t){return null!=e?e:null!=a?a:t}function la(e){var a,t,s,n,d,r=[];if(!e._d){var _,i;for(_=e,i=new Date(l.now()),s=_._useUTC?[i.getUTCFullYear(),i.getUTCMonth(),i.getUTCDate()]:[i.getFullYear(),i.getMonth(),i.getDate()],e._w&&null==e._a[ce]&&null==e._a[Le]&&function(e){var a,t,s,n,d,r,_,i;if(null!=(a=e._w).GG||null!=a.W||null!=a.E)d=1,r=4,t=ua(a.GG,e._a[he],Ie(Ha(),1,4).year),s=ua(a.W,1),((n=ua(a.E,1))<1||7<n)&&(i=!0);else{d=e._locale._week.dow,r=e._locale._week.doy;var o=Ie(Ha(),d,r);t=ua(a.gg,e._a[he],o.year),s=ua(a.w,o.week),null!=a.d?((n=a.d)<0||6<n)&&(i=!0):null!=a.e?(n=a.e+d,(a.e<0||6<a.e)&&(i=!0)):n=d}s<1||s>Ce(t,d,r)?Y(e)._overflowWeeks=!0:null!=i?Y(e)._overflowWeekday=!0:(_=Re(t,s,n,d,r),e._a[he]=_.year,e._dayOfYear=_.dayOfYear)}(e),null!=e._dayOfYear&&(d=ua(e._a[he],s[he]),(e._dayOfYear>Te(d)||0===e._dayOfYear)&&(Y(e)._overflowDayOfYear=!0),t=Je(d,0,e._dayOfYear),e._a[Le]=t.getUTCMonth(),e._a[ce]=t.getUTCDate()),a=0;a<3&&null==e._a[a];++a)e._a[a]=r[a]=s[a];for(;a<7;a++)e._a[a]=r[a]=null==e._a[a]?2===a?1:0:e._a[a];24===e._a[Ye]&&0===e._a[ye]&&0===e._a[fe]&&0===e._a[ke]&&(e._nextDay=!0,e._a[Ye]=0),e._d=(e._useUTC?Je:function(e,a,t,s,n,d,r){var _=new Date(e,a,t,s,n,d,r);return e<100&&0<=e&&isFinite(_.getFullYear())&&_.setFullYear(e),_}).apply(null,r),n=e._useUTC?e._d.getUTCDay():e._d.getDay(),null!=e._tzm&&e._d.setUTCMinutes(e._d.getUTCMinutes()-e._tzm),e._nextDay&&(e._a[Ye]=24),e._w&&void 0!==e._w.d&&e._w.d!==n&&(Y(e).weekdayMismatch=!0)}}var Ma=/^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/,ha=/^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/,La=/Z|[+-]\d\d(?::?\d\d)?/,ca=[["YYYYYY-MM-DD",/[+-]\d{6}-\d\d-\d\d/],["YYYY-MM-DD",/\d{4}-\d\d-\d\d/],["GGGG-[W]WW-E",/\d{4}-W\d\d-\d/],["GGGG-[W]WW",/\d{4}-W\d\d/,!1],["YYYY-DDD",/\d{4}-\d{3}/],["YYYY-MM",/\d{4}-\d\d/,!1],["YYYYYYMMDD",/[+-]\d{10}/],["YYYYMMDD",/\d{8}/],["GGGG[W]WWE",/\d{4}W\d{3}/],["GGGG[W]WW",/\d{4}W\d{2}/,!1],["YYYYDDD",/\d{7}/]],Ya=[["HH:mm:ss.SSSS",/\d\d:\d\d:\d\d\.\d+/],["HH:mm:ss,SSSS",/\d\d:\d\d:\d\d,\d+/],["HH:mm:ss",/\d\d:\d\d:\d\d/],["HH:mm",/\d\d:\d\d/],["HHmmss.SSSS",/\d\d\d\d\d\d\.\d+/],["HHmmss,SSSS",/\d\d\d\d\d\d,\d+/],["HHmmss",/\d\d\d\d\d\d/],["HHmm",/\d\d\d\d/],["HH",/\d\d/]],ya=/^\/?Date\((\-?\d+)/i;function fa(e){var a,t,s,n,d,r,_=e._i,i=Ma.exec(_)||ha.exec(_);if(i){for(Y(e).iso=!0,a=0,t=ca.length;a<t;a++)if(ca[a][1].exec(i[1])){n=ca[a][0],s=!1!==ca[a][2];break}if(null==n)return void(e._isValid=!1);if(i[3]){for(a=0,t=Ya.length;a<t;a++)if(Ya[a][1].exec(i[3])){d=(i[2]||" ")+Ya[a][0];break}if(null==d)return void(e._isValid=!1)}if(!s&&null!=d)return void(e._isValid=!1);if(i[4]){if(!La.exec(i[4]))return void(e._isValid=!1);r="Z"}e._f=n+(d||"")+(r||""),ga(e)}else e._isValid=!1}var ka=/^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\s)?(\d{1,2})\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s(\d{2,4})\s(\d\d):(\d\d)(?::(\d\d))?\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\d{4}))$/;function pa(e,a,t,s,n,d){var r=[function(e){var a=parseInt(e,10);{if(a<=49)return 2e3+a;if(a<=999)return 1900+a}return a}(e),Oe.indexOf(a),parseInt(t,10),parseInt(s,10),parseInt(n,10)];return d&&r.push(parseInt(d,10)),r}var Da={UT:0,GMT:0,EDT:-240,EST:-300,CDT:-300,CST:-360,MDT:-360,MST:-420,PDT:-420,PST:-480};function Ta(e){var a,t,s,n=ka.exec(e._i.replace(/\([^)]*\)|[\n\t]/g," ").replace(/(\s\s+)/g," ").replace(/^\s\s*/,"").replace(/\s\s*$/,""));if(n){var d=pa(n[4],n[3],n[2],n[5],n[6],n[7]);if(a=n[1],t=d,s=e,a&&Ue.indexOf(a)!==new Date(t[0],t[1],t[2]).getDay()&&(Y(s).weekdayMismatch=!0,!(s._isValid=!1)))return;e._a=d,e._tzm=function(e,a,t){if(e)return Da[e];if(a)return 0;var s=parseInt(t,10),n=s%100;return(s-n)/100*60+n}(n[8],n[9],n[10]),e._d=Je.apply(null,e._a),e._d.setUTCMinutes(e._d.getUTCMinutes()-e._tzm),Y(e).rfc2822=!0}else e._isValid=!1}function ga(e){if(e._f!==l.ISO_8601)if(e._f!==l.RFC_2822){e._a=[],Y(e).empty=!0;var a,t,s,n,d,r,_,i,o=""+e._i,m=o.length,u=0;for(s=G(e._f,e._locale).match(z)||[],a=0;a<s.length;a++)n=s[a],(t=(o.match(oe(n,e))||[])[0])&&(0<(d=o.substr(0,o.indexOf(t))).length&&Y(e).unusedInput.push(d),o=o.slice(o.indexOf(t)+t.length),u+=t.length),R[n]?(t?Y(e).empty=!1:Y(e).unusedTokens.push(n),r=n,i=e,null!=(_=t)&&h(ue,r)&&ue[r](_,i._a,i,r)):e._strict&&!t&&Y(e).unusedTokens.push(n);Y(e).charsLeftOver=m-u,0<o.length&&Y(e).unusedInput.push(o),e._a[Ye]<=12&&!0===Y(e).bigHour&&0<e._a[Ye]&&(Y(e).bigHour=void 0),Y(e).parsedDateParts=e._a.slice(0),Y(e).meridiem=e._meridiem,e._a[Ye]=function(e,a,t){var s;if(null==t)return a;return null!=e.meridiemHour?e.meridiemHour(a,t):(null!=e.isPM&&((s=e.isPM(t))&&a<12&&(a+=12),s||12!==a||(a=0)),a)}(e._locale,e._a[Ye],e._meridiem),la(e),ma(e)}else Ta(e);else fa(e)}function wa(e){var a,t,s,n,d=e._i,r=e._f;return e._locale=e._locale||oa(e._l),null===d||void 0===r&&""===d?f({nullInput:!0}):("string"==typeof d&&(e._i=d=e._locale.preparse(d)),D(d)?new p(ma(d)):(u(d)?e._d=d:_(r)?function(e){var a,t,s,n,d;if(0===e._f.length)return Y(e).invalidFormat=!0,e._d=new Date(NaN);for(n=0;n<e._f.length;n++)d=0,a=k({},e),null!=e._useUTC&&(a._useUTC=e._useUTC),a._f=e._f[n],ga(a),y(a)&&(d+=Y(a).charsLeftOver,d+=10*Y(a).unusedTokens.length,Y(a).score=d,(null==s||d<s)&&(s=d,t=a));L(e,t||a)}(e):r?ga(e):o(t=(a=e)._i)?a._d=new Date(l.now()):u(t)?a._d=new Date(t.valueOf()):"string"==typeof t?(s=a,null===(n=ya.exec(s._i))?(fa(s),!1===s._isValid&&(delete s._isValid,Ta(s),!1===s._isValid&&(delete s._isValid,l.createFromInputFallback(s)))):s._d=new Date(+n[1])):_(t)?(a._a=M(t.slice(0),function(e){return parseInt(e,10)}),la(a)):i(t)?function(e){if(!e._d){var a=W(e._i);e._a=M([a.year,a.month,a.day||a.date,a.hour,a.minute,a.second,a.millisecond],function(e){return e&&parseInt(e,10)}),la(e)}}(a):m(t)?a._d=new Date(t):l.createFromInputFallback(a),y(e)||(e._d=null),e))}function va(e,a,t,s,n){var d,r={};return!0!==t&&!1!==t||(s=t,t=void 0),(i(e)&&function(e){if(Object.getOwnPropertyNames)return 0===Object.getOwnPropertyNames(e).length;var a;for(a in e)if(e.hasOwnProperty(a))return!1;return!0}(e)||_(e)&&0===e.length)&&(e=void 0),r._isAMomentObject=!0,r._useUTC=r._isUTC=n,r._l=t,r._i=e,r._f=a,r._strict=s,(d=new p(ma(wa(r))))._nextDay&&(d.add(1,"d"),d._nextDay=void 0),d}function Ha(e,a,t,s){return va(e,a,t,s,!1)}l.createFromInputFallback=t("value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are discouraged and will be removed in an upcoming major release. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.",function(e){e._d=new Date(e._i+(e._useUTC?" UTC":""))}),l.ISO_8601=function(){},l.RFC_2822=function(){};var Sa=t("moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/",function(){var e=Ha.apply(null,arguments);return this.isValid()&&e.isValid()?e<this?this:e:f()}),ba=t("moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/",function(){var e=Ha.apply(null,arguments);return this.isValid()&&e.isValid()?this<e?this:e:f()});function ja(e,a){var t,s;if(1===a.length&&_(a[0])&&(a=a[0]),!a.length)return Ha();for(t=a[0],s=1;s<a.length;++s)a[s].isValid()&&!a[s][e](t)||(t=a[s]);return t}var xa=["year","quarter","month","week","day","hour","minute","second","millisecond"];function Pa(e){var a=W(e),t=a.year||0,s=a.quarter||0,n=a.month||0,d=a.week||a.isoWeek||0,r=a.day||0,_=a.hour||0,i=a.minute||0,o=a.second||0,m=a.millisecond||0;this._isValid=function(e){for(var a in e)if(-1===we.call(xa,a)||null!=e[a]&&isNaN(e[a]))return!1;for(var t=!1,s=0;s<xa.length;++s)if(e[xa[s]]){if(t)return!1;parseFloat(e[xa[s]])!==g(e[xa[s]])&&(t=!0)}return!0}(a),this._milliseconds=+m+1e3*o+6e4*i+1e3*_*60*60,this._days=+r+7*d,this._months=+n+3*s+12*t,this._data={},this._locale=oa(),this._bubble()}function Oa(e){return e instanceof Pa}function Wa(e){return e<0?-1*Math.round(-1*e):Math.round(e)}function Ea(e,t){I(e,0,0,function(){var e=this.utcOffset(),a="+";return e<0&&(e=-e,a="-"),a+F(~~(e/60),2)+t+F(~~e%60,2)})}Ea("Z",":"),Ea("ZZ",""),ie("Z",de),ie("ZZ",de),le(["Z","ZZ"],function(e,a,t){t._useUTC=!0,t._tzm=Fa(de,e)});var Aa=/([\+\-]|\d\d)/gi;function Fa(e,a){var t=(a||"").match(e);if(null===t)return null;var s=((t[t.length-1]||[])+"").match(Aa)||["-",0,0],n=60*s[1]+g(s[2]);return 0===n?0:"+"===s[0]?n:-n}function za(e,a){var t,s;return a._isUTC?(t=a.clone(),s=(D(e)||u(e)?e.valueOf():Ha(e).valueOf())-t.valueOf(),t._d.setTime(t._d.valueOf()+s),l.updateOffset(t,!1),t):Ha(e).local()}function Ja(e){return 15*-Math.round(e._d.getTimezoneOffset()/15)}function Na(){return!!this.isValid()&&(this._isUTC&&0===this._offset)}l.updateOffset=function(){};var Ra=/^(\-|\+)?(?:(\d*)[. ])?(\d+)\:(\d+)(?:\:(\d+)(\.\d*)?)?$/,Ia=/^(-|\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;function Ca(e,a){var t,s,n,d=e,r=null;return Oa(e)?d={ms:e._milliseconds,d:e._days,M:e._months}:m(e)?(d={},a?d[a]=e:d.milliseconds=e):(r=Ra.exec(e))?(t="-"===r[1]?-1:1,d={y:0,d:g(r[ce])*t,h:g(r[Ye])*t,m:g(r[ye])*t,s:g(r[fe])*t,ms:g(Wa(1e3*r[ke]))*t}):(r=Ia.exec(e))?(t="-"===r[1]?-1:1,d={y:Ga(r[2],t),M:Ga(r[3],t),w:Ga(r[4],t),d:Ga(r[5],t),h:Ga(r[6],t),m:Ga(r[7],t),s:Ga(r[8],t)}):null==d?d={}:"object"==typeof d&&("from"in d||"to"in d)&&(n=function(e,a){var t;if(!e.isValid()||!a.isValid())return{milliseconds:0,months:0};a=za(a,e),e.isBefore(a)?t=Ua(e,a):((t=Ua(a,e)).milliseconds=-t.milliseconds,t.months=-t.months);return t}(Ha(d.from),Ha(d.to)),(d={}).ms=n.milliseconds,d.M=n.months),s=new Pa(d),Oa(e)&&h(e,"_locale")&&(s._locale=e._locale),s}function Ga(e,a){var t=e&&parseFloat(e.replace(",","."));return(isNaN(t)?0:t)*a}function Ua(e,a){var t={milliseconds:0,months:0};return t.months=a.month()-e.month()+12*(a.year()-e.year()),e.clone().add(t.months,"M").isAfter(a)&&--t.months,t.milliseconds=+a-+e.clone().add(t.months,"M"),t}function Va(s,n){return function(e,a){var t;return null===a||isNaN(+a)||(H(n,"moment()."+n+"(period, number) is deprecated. Please use moment()."+n+"(number, period). See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info."),t=e,e=a,a=t),Ka(this,Ca(e="string"==typeof e?+e:e,a),s),this}}function Ka(e,a,t,s){var n=a._milliseconds,d=Wa(a._days),r=Wa(a._months);e.isValid()&&(s=null==s||s,r&&We(e,Se(e,"Month")+r*t),d&&be(e,"Date",Se(e,"Date")+d*t),n&&e._d.setTime(e._d.valueOf()+n*t),s&&l.updateOffset(e,d||r))}Ca.fn=Pa.prototype,Ca.invalid=function(){return Ca(NaN)};var $a=Va(1,"add"),Za=Va(-1,"subtract");function Ba(e,a){var t=12*(a.year()-e.year())+(a.month()-e.month()),s=e.clone().add(t,"months");return-(t+(a-s<0?(a-s)/(s-e.clone().add(t-1,"months")):(a-s)/(e.clone().add(t+1,"months")-s)))||0}function qa(e){var a;return void 0===e?this._locale._abbr:(null!=(a=oa(e))&&(this._locale=a),this)}l.defaultFormat="YYYY-MM-DDTHH:mm:ssZ",l.defaultFormatUtc="YYYY-MM-DDTHH:mm:ss[Z]";var Qa=t("moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.",function(e){return void 0===e?this.localeData():this.locale(e)});function Xa(){return this._locale}function et(e,a){I(0,[e,e.length],0,a)}function at(e,a,t,s,n){var d;return null==e?Ie(this,s,n).year:((d=Ce(e,s,n))<a&&(a=d),function(e,a,t,s,n){var d=Re(e,a,t,s,n),r=Je(d.year,0,d.dayOfYear);return this.year(r.getUTCFullYear()),this.month(r.getUTCMonth()),this.date(r.getUTCDate()),this}.call(this,e,a,t,s,n))}I(0,["gg",2],0,function(){return this.weekYear()%100}),I(0,["GG",2],0,function(){return this.isoWeekYear()%100}),et("gggg","weekYear"),et("ggggg","weekYear"),et("GGGG","isoWeekYear"),et("GGGGG","isoWeekYear"),P("weekYear","gg"),P("isoWeekYear","GG"),A("weekYear",1),A("isoWeekYear",1),ie("G",se),ie("g",se),ie("GG",B,V),ie("gg",B,V),ie("GGGG",ee,$),ie("gggg",ee,$),ie("GGGGG",ae,Z),ie("ggggg",ae,Z),Me(["gggg","ggggg","GGGG","GGGGG"],function(e,a,t,s){a[s.substr(0,2)]=g(e)}),Me(["gg","GG"],function(e,a,t,s){a[s]=l.parseTwoDigitYear(e)}),I("Q",0,"Qo","quarter"),P("quarter","Q"),A("quarter",7),ie("Q",U),le("Q",function(e,a){a[Le]=3*(g(e)-1)}),I("D",["DD",2],"Do","date"),P("date","D"),A("date",9),ie("D",B),ie("DD",B,V),ie("Do",function(e,a){return e?a._dayOfMonthOrdinalParse||a._ordinalParse:a._dayOfMonthOrdinalParseLenient}),le(["D","DD"],ce),le("Do",function(e,a){a[ce]=g(e.match(B)[0])});var tt=He("Date",!0);I("DDD",["DDDD",3],"DDDo","dayOfYear"),P("dayOfYear","DDD"),A("dayOfYear",4),ie("DDD",X),ie("DDDD",K),le(["DDD","DDDD"],function(e,a,t){t._dayOfYear=g(e)}),I("m",["mm",2],0,"minute"),P("minute","m"),A("minute",14),ie("m",B),ie("mm",B,V),le(["m","mm"],ye);var st=He("Minutes",!1);I("s",["ss",2],0,"second"),P("second","s"),A("second",15),ie("s",B),ie("ss",B,V),le(["s","ss"],fe);var nt,dt=He("Seconds",!1);for(I("S",0,0,function(){return~~(this.millisecond()/100)}),I(0,["SS",2],0,function(){return~~(this.millisecond()/10)}),I(0,["SSS",3],0,"millisecond"),I(0,["SSSS",4],0,function(){return 10*this.millisecond()}),I(0,["SSSSS",5],0,function(){return 100*this.millisecond()}),I(0,["SSSSSS",6],0,function(){return 1e3*this.millisecond()}),I(0,["SSSSSSS",7],0,function(){return 1e4*this.millisecond()}),I(0,["SSSSSSSS",8],0,function(){return 1e5*this.millisecond()}),I(0,["SSSSSSSSS",9],0,function(){return 1e6*this.millisecond()}),P("millisecond","ms"),A("millisecond",16),ie("S",X,U),ie("SS",X,V),ie("SSS",X,K),nt="SSSS";nt.length<=9;nt+="S")ie(nt,te);function rt(e,a){a[ke]=g(1e3*("0."+e))}for(nt="S";nt.length<=9;nt+="S")le(nt,rt);var _t=He("Milliseconds",!1);I("z",0,0,"zoneAbbr"),I("zz",0,0,"zoneName");var it=p.prototype;function ot(e){return e}it.add=$a,it.calendar=function(e,a){var t=e||Ha(),s=za(t,this).startOf("day"),n=l.calendarFormat(this,s)||"sameElse",d=a&&(S(a[n])?a[n].call(this,t):a[n]);return this.format(d||this.localeData().calendar(n,this,Ha(t)))},it.clone=function(){return new p(this)},it.diff=function(e,a,t){var s,n,d;if(!this.isValid())return NaN;if(!(s=za(e,this)).isValid())return NaN;switch(n=6e4*(s.utcOffset()-this.utcOffset()),a=O(a)){case"year":d=Ba(this,s)/12;break;case"month":d=Ba(this,s);break;case"quarter":d=Ba(this,s)/3;break;case"second":d=(this-s)/1e3;break;case"minute":d=(this-s)/6e4;break;case"hour":d=(this-s)/36e5;break;case"day":d=(this-s-n)/864e5;break;case"week":d=(this-s-n)/6048e5;break;default:d=this-s}return t?d:T(d)},it.endOf=function(e){return void 0===(e=O(e))||"millisecond"===e?this:("date"===e&&(e="day"),this.startOf(e).add(1,"isoWeek"===e?"week":e).subtract(1,"ms"))},it.format=function(e){e||(e=this.isUtc()?l.defaultFormatUtc:l.defaultFormat);var a=C(this,e);return this.localeData().postformat(a)},it.from=function(e,a){return this.isValid()&&(D(e)&&e.isValid()||Ha(e).isValid())?Ca({to:this,from:e}).locale(this.locale()).humanize(!a):this.localeData().invalidDate()},it.fromNow=function(e){return this.from(Ha(),e)},it.to=function(e,a){return this.isValid()&&(D(e)&&e.isValid()||Ha(e).isValid())?Ca({from:this,to:e}).locale(this.locale()).humanize(!a):this.localeData().invalidDate()},it.toNow=function(e){return this.to(Ha(),e)},it.get=function(e){return S(this[e=O(e)])?this[e]():this},it.invalidAt=function(){return Y(this).overflow},it.isAfter=function(e,a){var t=D(e)?e:Ha(e);return!(!this.isValid()||!t.isValid())&&("millisecond"===(a=O(a)||"millisecond")?this.valueOf()>t.valueOf():t.valueOf()<this.clone().startOf(a).valueOf())},it.isBefore=function(e,a){var t=D(e)?e:Ha(e);return!(!this.isValid()||!t.isValid())&&("millisecond"===(a=O(a)||"millisecond")?this.valueOf()<t.valueOf():this.clone().endOf(a).valueOf()<t.valueOf())},it.isBetween=function(e,a,t,s){var n=D(e)?e:Ha(e),d=D(a)?a:Ha(a);return!!(this.isValid()&&n.isValid()&&d.isValid())&&("("===(s=s||"()")[0]?this.isAfter(n,t):!this.isBefore(n,t))&&(")"===s[1]?this.isBefore(d,t):!this.isAfter(d,t))},it.isSame=function(e,a){var t,s=D(e)?e:Ha(e);return!(!this.isValid()||!s.isValid())&&("millisecond"===(a=O(a)||"millisecond")?this.valueOf()===s.valueOf():(t=s.valueOf(),this.clone().startOf(a).valueOf()<=t&&t<=this.clone().endOf(a).valueOf()))},it.isSameOrAfter=function(e,a){return this.isSame(e,a)||this.isAfter(e,a)},it.isSameOrBefore=function(e,a){return this.isSame(e,a)||this.isBefore(e,a)},it.isValid=function(){return y(this)},it.lang=Qa,it.locale=qa,it.localeData=Xa,it.max=ba,it.min=Sa,it.parsingFlags=function(){return L({},Y(this))},it.set=function(e,a){if("object"==typeof e)for(var t=function(e){var a=[];for(var t in e)a.push({unit:t,priority:E[t]});return a.sort(function(e,a){return e.priority-a.priority}),a}(e=W(e)),s=0;s<t.length;s++)this[t[s].unit](e[t[s].unit]);else if(S(this[e=O(e)]))return this[e](a);return this},it.startOf=function(e){switch(e=O(e)){case"year":this.month(0);case"quarter":case"month":this.date(1);case"week":case"isoWeek":case"day":case"date":this.hours(0);case"hour":this.minutes(0);case"minute":this.seconds(0);case"second":this.milliseconds(0)}return"week"===e&&this.weekday(0),"isoWeek"===e&&this.isoWeekday(1),"quarter"===e&&this.month(3*Math.floor(this.month()/3)),this},it.subtract=Za,it.toArray=function(){var e=this;return[e.year(),e.month(),e.date(),e.hour(),e.minute(),e.second(),e.millisecond()]},it.toObject=function(){var e=this;return{years:e.year(),months:e.month(),date:e.date(),hours:e.hours(),minutes:e.minutes(),seconds:e.seconds(),milliseconds:e.milliseconds()}},it.toDate=function(){return new Date(this.valueOf())},it.toISOString=function(e){if(!this.isValid())return null;var a=!0!==e,t=a?this.clone().utc():this;return t.year()<0||9999<t.year()?C(t,a?"YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]":"YYYYYY-MM-DD[T]HH:mm:ss.SSSZ"):S(Date.prototype.toISOString)?a?this.toDate().toISOString():new Date(this.valueOf()+60*this.utcOffset()*1e3).toISOString().replace("Z",C(t,"Z")):C(t,a?"YYYY-MM-DD[T]HH:mm:ss.SSS[Z]":"YYYY-MM-DD[T]HH:mm:ss.SSSZ")},it.inspect=function(){if(!this.isValid())return"moment.invalid(/* "+this._i+" */)";var e="moment",a="";this.isLocal()||(e=0===this.utcOffset()?"moment.utc":"moment.parseZone",a="Z");var t="["+e+'("]',s=0<=this.year()&&this.year()<=9999?"YYYY":"YYYYYY",n=a+'[")]';return this.format(t+s+"-MM-DD[T]HH:mm:ss.SSS"+n)},it.toJSON=function(){return this.isValid()?this.toISOString():null},it.toString=function(){return this.clone().locale("en").format("ddd MMM DD YYYY HH:mm:ss [GMT]ZZ")},it.unix=function(){return Math.floor(this.valueOf()/1e3)},it.valueOf=function(){return this._d.valueOf()-6e4*(this._offset||0)},it.creationData=function(){return{input:this._i,format:this._f,locale:this._locale,isUTC:this._isUTC,strict:this._strict}},it.year=ve,it.isLeapYear=function(){return ge(this.year())},it.weekYear=function(e){return at.call(this,e,this.week(),this.weekday(),this.localeData()._week.dow,this.localeData()._week.doy)},it.isoWeekYear=function(e){return at.call(this,e,this.isoWeek(),this.isoWeekday(),1,4)},it.quarter=it.quarters=function(e){return null==e?Math.ceil((this.month()+1)/3):this.month(3*(e-1)+this.month()%3)},it.month=Ee,it.daysInMonth=function(){return je(this.year(),this.month())},it.week=it.weeks=function(e){var a=this.localeData().week(this);return null==e?a:this.add(7*(e-a),"d")},it.isoWeek=it.isoWeeks=function(e){var a=Ie(this,1,4).week;return null==e?a:this.add(7*(e-a),"d")},it.weeksInYear=function(){var e=this.localeData()._week;return Ce(this.year(),e.dow,e.doy)},it.isoWeeksInYear=function(){return Ce(this.year(),1,4)},it.date=tt,it.day=it.days=function(e){if(!this.isValid())return null!=e?this:NaN;var a,t,s=this._isUTC?this._d.getUTCDay():this._d.getDay();return null!=e?(a=e,t=this.localeData(),e="string"!=typeof a?a:isNaN(a)?"number"==typeof(a=t.weekdaysParse(a))?a:null:parseInt(a,10),this.add(e-s,"d")):s},it.weekday=function(e){if(!this.isValid())return null!=e?this:NaN;var a=(this.day()+7-this.localeData()._week.dow)%7;return null==e?a:this.add(e-a,"d")},it.isoWeekday=function(e){if(!this.isValid())return null!=e?this:NaN;if(null==e)return this.day()||7;var a,t,s=(a=e,t=this.localeData(),"string"==typeof a?t.weekdaysParse(a)%7||7:isNaN(a)?null:a);return this.day(this.day()%7?s:s-7)},it.dayOfYear=function(e){var a=Math.round((this.clone().startOf("day")-this.clone().startOf("year"))/864e5)+1;return null==e?a:this.add(e-a,"d")},it.hour=it.hours=aa,it.minute=it.minutes=st,it.second=it.seconds=dt,it.millisecond=it.milliseconds=_t,it.utcOffset=function(e,a,t){var s,n=this._offset||0;if(!this.isValid())return null!=e?this:NaN;if(null==e)return this._isUTC?n:Ja(this);if("string"==typeof e){if(null===(e=Fa(de,e)))return this}else Math.abs(e)<16&&!t&&(e*=60);return!this._isUTC&&a&&(s=Ja(this)),this._offset=e,this._isUTC=!0,null!=s&&this.add(s,"m"),n!==e&&(!a||this._changeInProgress?Ka(this,Ca(e-n,"m"),1,!1):this._changeInProgress||(this._changeInProgress=!0,l.updateOffset(this,!0),this._changeInProgress=null)),this},it.utc=function(e){return this.utcOffset(0,e)},it.local=function(e){return this._isUTC&&(this.utcOffset(0,e),this._isUTC=!1,e&&this.subtract(Ja(this),"m")),this},it.parseZone=function(){if(null!=this._tzm)this.utcOffset(this._tzm,!1,!0);else if("string"==typeof this._i){var e=Fa(ne,this._i);null!=e?this.utcOffset(e):this.utcOffset(0,!0)}return this},it.hasAlignedHourOffset=function(e){return!!this.isValid()&&(e=e?Ha(e).utcOffset():0,(this.utcOffset()-e)%60==0)},it.isDST=function(){return this.utcOffset()>this.clone().month(0).utcOffset()||this.utcOffset()>this.clone().month(5).utcOffset()},it.isLocal=function(){return!!this.isValid()&&!this._isUTC},it.isUtcOffset=function(){return!!this.isValid()&&this._isUTC},it.isUtc=Na,it.isUTC=Na,it.zoneAbbr=function(){return this._isUTC?"UTC":""},it.zoneName=function(){return this._isUTC?"Coordinated Universal Time":""},it.dates=t("dates accessor is deprecated. Use date instead.",tt),it.months=t("months accessor is deprecated. Use month instead",Ee),it.years=t("years accessor is deprecated. Use year instead",ve),it.zone=t("moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/",function(e,a){return null!=e?("string"!=typeof e&&(e=-e),this.utcOffset(e,a),this):-this.utcOffset()}),it.isDSTShifted=t("isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information",function(){if(!o(this._isDSTShifted))return this._isDSTShifted;var e={};if(k(e,this),(e=wa(e))._a){var a=e._isUTC?c(e._a):Ha(e._a);this._isDSTShifted=this.isValid()&&0<r(e._a,a.toArray())}else this._isDSTShifted=!1;return this._isDSTShifted});var mt=j.prototype;function ut(e,a,t,s){var n=oa(),d=c().set(s,a);return n[t](d,e)}function lt(e,a,t){if(m(e)&&(a=e,e=void 0),e=e||"",null!=a)return ut(e,a,t,"month");var s,n=[];for(s=0;s<12;s++)n[s]=ut(e,s,t,"month");return n}function Mt(e,a,t,s){a=("boolean"==typeof e?m(a)&&(t=a,a=void 0):(a=e,e=!1,m(t=a)&&(t=a,a=void 0)),a||"");var n,d=oa(),r=e?d._week.dow:0;if(null!=t)return ut(a,(t+r)%7,s,"day");var _=[];for(n=0;n<7;n++)_[n]=ut(a,(n+r)%7,s,"day");return _}mt.calendar=function(e,a,t){var s=this._calendar[e]||this._calendar.sameElse;return S(s)?s.call(a,t):s},mt.longDateFormat=function(e){var a=this._longDateFormat[e],t=this._longDateFormat[e.toUpperCase()];return a||!t?a:(this._longDateFormat[e]=t.replace(/MMMM|MM|DD|dddd/g,function(e){return e.slice(1)}),this._longDateFormat[e])},mt.invalidDate=function(){return this._invalidDate},mt.ordinal=function(e){return this._ordinal.replace("%d",e)},mt.preparse=ot,mt.postformat=ot,mt.relativeTime=function(e,a,t,s){var n=this._relativeTime[t];return S(n)?n(e,a,t,s):n.replace(/%d/i,e)},mt.pastFuture=function(e,a){var t=this._relativeTime[0<e?"future":"past"];return S(t)?t(a):t.replace(/%s/i,a)},mt.set=function(e){var a,t;for(t in e)S(a=e[t])?this[t]=a:this["_"+t]=a;this._config=e,this._dayOfMonthOrdinalParseLenient=new RegExp((this._dayOfMonthOrdinalParse.source||this._ordinalParse.source)+"|"+/\d{1,2}/.source)},mt.months=function(e,a){return e?_(this._months)?this._months[e.month()]:this._months[(this._months.isFormat||xe).test(a)?"format":"standalone"][e.month()]:_(this._months)?this._months:this._months.standalone},mt.monthsShort=function(e,a){return e?_(this._monthsShort)?this._monthsShort[e.month()]:this._monthsShort[xe.test(a)?"format":"standalone"][e.month()]:_(this._monthsShort)?this._monthsShort:this._monthsShort.standalone},mt.monthsParse=function(e,a,t){var s,n,d;if(this._monthsParseExact)return function(e,a,t){var s,n,d,r=e.toLocaleLowerCase();if(!this._monthsParse)for(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[],s=0;s<12;++s)d=c([2e3,s]),this._shortMonthsParse[s]=this.monthsShort(d,"").toLocaleLowerCase(),this._longMonthsParse[s]=this.months(d,"").toLocaleLowerCase();return t?"MMM"===a?-1!==(n=we.call(this._shortMonthsParse,r))?n:null:-1!==(n=we.call(this._longMonthsParse,r))?n:null:"MMM"===a?-1!==(n=we.call(this._shortMonthsParse,r))?n:-1!==(n=we.call(this._longMonthsParse,r))?n:null:-1!==(n=we.call(this._longMonthsParse,r))?n:-1!==(n=we.call(this._shortMonthsParse,r))?n:null}.call(this,e,a,t);for(this._monthsParse||(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[]),s=0;s<12;s++){if(n=c([2e3,s]),t&&!this._longMonthsParse[s]&&(this._longMonthsParse[s]=new RegExp("^"+this.months(n,"").replace(".","")+"$","i"),this._shortMonthsParse[s]=new RegExp("^"+this.monthsShort(n,"").replace(".","")+"$","i")),t||this._monthsParse[s]||(d="^"+this.months(n,"")+"|^"+this.monthsShort(n,""),this._monthsParse[s]=new RegExp(d.replace(".",""),"i")),t&&"MMMM"===a&&this._longMonthsParse[s].test(e))return s;if(t&&"MMM"===a&&this._shortMonthsParse[s].test(e))return s;if(!t&&this._monthsParse[s].test(e))return s}},mt.monthsRegex=function(e){return this._monthsParseExact?(h(this,"_monthsRegex")||ze.call(this),e?this._monthsStrictRegex:this._monthsRegex):(h(this,"_monthsRegex")||(this._monthsRegex=Fe),this._monthsStrictRegex&&e?this._monthsStrictRegex:this._monthsRegex)},mt.monthsShortRegex=function(e){return this._monthsParseExact?(h(this,"_monthsRegex")||ze.call(this),e?this._monthsShortStrictRegex:this._monthsShortRegex):(h(this,"_monthsShortRegex")||(this._monthsShortRegex=Ae),this._monthsShortStrictRegex&&e?this._monthsShortStrictRegex:this._monthsShortRegex)},mt.week=function(e){return Ie(e,this._week.dow,this._week.doy).week},mt.firstDayOfYear=function(){return this._week.doy},mt.firstDayOfWeek=function(){return this._week.dow},mt.weekdays=function(e,a){return e?_(this._weekdays)?this._weekdays[e.day()]:this._weekdays[this._weekdays.isFormat.test(a)?"format":"standalone"][e.day()]:_(this._weekdays)?this._weekdays:this._weekdays.standalone},mt.weekdaysMin=function(e){return e?this._weekdaysMin[e.day()]:this._weekdaysMin},mt.weekdaysShort=function(e){return e?this._weekdaysShort[e.day()]:this._weekdaysShort},mt.weekdaysParse=function(e,a,t){var s,n,d;if(this._weekdaysParseExact)return function(e,a,t){var s,n,d,r=e.toLocaleLowerCase();if(!this._weekdaysParse)for(this._weekdaysParse=[],this._shortWeekdaysParse=[],this._minWeekdaysParse=[],s=0;s<7;++s)d=c([2e3,1]).day(s),this._minWeekdaysParse[s]=this.weekdaysMin(d,"").toLocaleLowerCase(),this._shortWeekdaysParse[s]=this.weekdaysShort(d,"").toLocaleLowerCase(),this._weekdaysParse[s]=this.weekdays(d,"").toLocaleLowerCase();return t?"dddd"===a?-1!==(n=we.call(this._weekdaysParse,r))?n:null:"ddd"===a?-1!==(n=we.call(this._shortWeekdaysParse,r))?n:null:-1!==(n=we.call(this._minWeekdaysParse,r))?n:null:"dddd"===a?-1!==(n=we.call(this._weekdaysParse,r))?n:-1!==(n=we.call(this._shortWeekdaysParse,r))?n:-1!==(n=we.call(this._minWeekdaysParse,r))?n:null:"ddd"===a?-1!==(n=we.call(this._shortWeekdaysParse,r))?n:-1!==(n=we.call(this._weekdaysParse,r))?n:-1!==(n=we.call(this._minWeekdaysParse,r))?n:null:-1!==(n=we.call(this._minWeekdaysParse,r))?n:-1!==(n=we.call(this._weekdaysParse,r))?n:-1!==(n=we.call(this._shortWeekdaysParse,r))?n:null}.call(this,e,a,t);for(this._weekdaysParse||(this._weekdaysParse=[],this._minWeekdaysParse=[],this._shortWeekdaysParse=[],this._fullWeekdaysParse=[]),s=0;s<7;s++){if(n=c([2e3,1]).day(s),t&&!this._fullWeekdaysParse[s]&&(this._fullWeekdaysParse[s]=new RegExp("^"+this.weekdays(n,"").replace(".","\\.?")+"$","i"),this._shortWeekdaysParse[s]=new RegExp("^"+this.weekdaysShort(n,"").replace(".","\\.?")+"$","i"),this._minWeekdaysParse[s]=new RegExp("^"+this.weekdaysMin(n,"").replace(".","\\.?")+"$","i")),this._weekdaysParse[s]||(d="^"+this.weekdays(n,"")+"|^"+this.weekdaysShort(n,"")+"|^"+this.weekdaysMin(n,""),this._weekdaysParse[s]=new RegExp(d.replace(".",""),"i")),t&&"dddd"===a&&this._fullWeekdaysParse[s].test(e))return s;if(t&&"ddd"===a&&this._shortWeekdaysParse[s].test(e))return s;if(t&&"dd"===a&&this._minWeekdaysParse[s].test(e))return s;if(!t&&this._weekdaysParse[s].test(e))return s}},mt.weekdaysRegex=function(e){return this._weekdaysParseExact?(h(this,"_weekdaysRegex")||Be.call(this),e?this._weekdaysStrictRegex:this._weekdaysRegex):(h(this,"_weekdaysRegex")||(this._weekdaysRegex=Ke),this._weekdaysStrictRegex&&e?this._weekdaysStrictRegex:this._weekdaysRegex)},mt.weekdaysShortRegex=function(e){return this._weekdaysParseExact?(h(this,"_weekdaysRegex")||Be.call(this),e?this._weekdaysShortStrictRegex:this._weekdaysShortRegex):(h(this,"_weekdaysShortRegex")||(this._weekdaysShortRegex=$e),this._weekdaysShortStrictRegex&&e?this._weekdaysShortStrictRegex:this._weekdaysShortRegex)},mt.weekdaysMinRegex=function(e){return this._weekdaysParseExact?(h(this,"_weekdaysRegex")||Be.call(this),e?this._weekdaysMinStrictRegex:this._weekdaysMinRegex):(h(this,"_weekdaysMinRegex")||(this._weekdaysMinRegex=Ze),this._weekdaysMinStrictRegex&&e?this._weekdaysMinStrictRegex:this._weekdaysMinRegex)},mt.isPM=function(e){return"p"===(e+"").toLowerCase().charAt(0)},mt.meridiem=function(e,a,t){return 11<e?t?"pm":"PM":t?"am":"AM"},_a("en",{dayOfMonthOrdinalParse:/\d{1,2}(th|st|nd|rd)/,ordinal:function(e){var a=e%10;return e+(1===g(e%100/10)?"th":1===a?"st":2===a?"nd":3===a?"rd":"th")}}),l.lang=t("moment.lang is deprecated. Use moment.locale instead.",_a),l.langData=t("moment.langData is deprecated. Use moment.localeData instead.",oa);var ht=Math.abs;function Lt(e,a,t,s){var n=Ca(a,t);return e._milliseconds+=s*n._milliseconds,e._days+=s*n._days,e._months+=s*n._months,e._bubble()}function ct(e){return e<0?Math.floor(e):Math.ceil(e)}function Yt(e){return 4800*e/146097}function yt(e){return 146097*e/4800}function ft(e){return function(){return this.as(e)}}var kt=ft("ms"),pt=ft("s"),Dt=ft("m"),Tt=ft("h"),gt=ft("d"),wt=ft("w"),vt=ft("M"),Ht=ft("y");function St(e){return function(){return this.isValid()?this._data[e]:NaN}}var bt=St("milliseconds"),jt=St("seconds"),xt=St("minutes"),Pt=St("hours"),Ot=St("days"),Wt=St("months"),Et=St("years");var At=Math.round,Ft={ss:44,s:45,m:45,h:22,d:26,M:11};var zt=Math.abs;function Jt(e){return(0<e)-(e<0)||+e}function Nt(){if(!this.isValid())return this.localeData().invalidDate();var e,a,t=zt(this._milliseconds)/1e3,s=zt(this._days),n=zt(this._months);a=T((e=T(t/60))/60),t%=60,e%=60;var d=T(n/12),r=n%=12,_=s,i=a,o=e,m=t?t.toFixed(3).replace(/\.?0+$/,""):"",u=this.asSeconds();if(!u)return"P0D";var l=u<0?"-":"",M=Jt(this._months)!==Jt(u)?"-":"",h=Jt(this._days)!==Jt(u)?"-":"",L=Jt(this._milliseconds)!==Jt(u)?"-":"";return l+"P"+(d?M+d+"Y":"")+(r?M+r+"M":"")+(_?h+_+"D":"")+(i||o||m?"T":"")+(i?L+i+"H":"")+(o?L+o+"M":"")+(m?L+m+"S":"")}var Rt=Pa.prototype;Rt.isValid=function(){return this._isValid},Rt.abs=function(){var e=this._data;return this._milliseconds=ht(this._milliseconds),this._days=ht(this._days),this._months=ht(this._months),e.milliseconds=ht(e.milliseconds),e.seconds=ht(e.seconds),e.minutes=ht(e.minutes),e.hours=ht(e.hours),e.months=ht(e.months),e.years=ht(e.years),this},Rt.add=function(e,a){return Lt(this,e,a,1)},Rt.subtract=function(e,a){return Lt(this,e,a,-1)},Rt.as=function(e){if(!this.isValid())return NaN;var a,t,s=this._milliseconds;if("month"===(e=O(e))||"year"===e)return a=this._days+s/864e5,t=this._months+Yt(a),"month"===e?t:t/12;switch(a=this._days+Math.round(yt(this._months)),e){case"week":return a/7+s/6048e5;case"day":return a+s/864e5;case"hour":return 24*a+s/36e5;case"minute":return 1440*a+s/6e4;case"second":return 86400*a+s/1e3;case"millisecond":return Math.floor(864e5*a)+s;default:throw new Error("Unknown unit "+e)}},Rt.asMilliseconds=kt,Rt.asSeconds=pt,Rt.asMinutes=Dt,Rt.asHours=Tt,Rt.asDays=gt,Rt.asWeeks=wt,Rt.asMonths=vt,Rt.asYears=Ht,Rt.valueOf=function(){return this.isValid()?this._milliseconds+864e5*this._days+this._months%12*2592e6+31536e6*g(this._months/12):NaN},Rt._bubble=function(){var e,a,t,s,n,d=this._milliseconds,r=this._days,_=this._months,i=this._data;return 0<=d&&0<=r&&0<=_||d<=0&&r<=0&&_<=0||(d+=864e5*ct(yt(_)+r),_=r=0),i.milliseconds=d%1e3,e=T(d/1e3),i.seconds=e%60,a=T(e/60),i.minutes=a%60,t=T(a/60),i.hours=t%24,_+=n=T(Yt(r+=T(t/24))),r-=ct(yt(n)),s=T(_/12),_%=12,i.days=r,i.months=_,i.years=s,this},Rt.clone=function(){return Ca(this)},Rt.get=function(e){return e=O(e),this.isValid()?this[e+"s"]():NaN},Rt.milliseconds=bt,Rt.seconds=jt,Rt.minutes=xt,Rt.hours=Pt,Rt.days=Ot,Rt.weeks=function(){return T(this.days()/7)},Rt.months=Wt,Rt.years=Et,Rt.humanize=function(e){if(!this.isValid())return this.localeData().invalidDate();var a,t,s,n,d,r,_,i,o,m,u,l=this.localeData(),M=(t=!e,s=l,n=Ca(a=this).abs(),d=At(n.as("s")),r=At(n.as("m")),_=At(n.as("h")),i=At(n.as("d")),o=At(n.as("M")),m=At(n.as("y")),(u=d<=Ft.ss&&["s",d]||d<Ft.s&&["ss",d]||r<=1&&["m"]||r<Ft.m&&["mm",r]||_<=1&&["h"]||_<Ft.h&&["hh",_]||i<=1&&["d"]||i<Ft.d&&["dd",i]||o<=1&&["M"]||o<Ft.M&&["MM",o]||m<=1&&["y"]||["yy",m])[2]=t,u[3]=0<+a,u[4]=s,function(e,a,t,s,n){return n.relativeTime(a||1,!!t,e,s)}.apply(null,u));return e&&(M=l.pastFuture(+this,M)),l.postformat(M)},Rt.toISOString=Nt,Rt.toString=Nt,Rt.toJSON=Nt,Rt.locale=qa,Rt.localeData=Xa,Rt.toIsoString=t("toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)",Nt),Rt.lang=Qa,I("X",0,0,"unix"),I("x",0,0,"valueOf"),ie("x",se),ie("X",/[+-]?\d+(\.\d{1,3})?/),le("X",function(e,a,t){t._d=new Date(1e3*parseFloat(e,10))}),le("x",function(e,a,t){t._d=new Date(g(e))}),l.version="2.23.0",e=Ha,l.fn=it,l.min=function(){return ja("isBefore",[].slice.call(arguments,0))},l.max=function(){return ja("isAfter",[].slice.call(arguments,0))},l.now=function(){return Date.now?Date.now():+new Date},l.utc=c,l.unix=function(e){return Ha(1e3*e)},l.months=function(e,a){return lt(e,a,"months")},l.isDate=u,l.locale=_a,l.invalid=f,l.duration=Ca,l.isMoment=D,l.weekdays=function(e,a,t){return Mt(e,a,t,"weekdays")},l.parseZone=function(){return Ha.apply(null,arguments).parseZone()},l.localeData=oa,l.isDuration=Oa,l.monthsShort=function(e,a){return lt(e,a,"monthsShort")},l.weekdaysMin=function(e,a,t){return Mt(e,a,t,"weekdaysMin")},l.defineLocale=ia,l.updateLocale=function(e,a){if(null!=a){var t,s,n=ta;null!=(s=ra(e))&&(n=s._config),(t=new j(a=b(n,a))).parentLocale=sa[e],sa[e]=t,_a(e)}else null!=sa[e]&&(null!=sa[e].parentLocale?sa[e]=sa[e].parentLocale:null!=sa[e]&&delete sa[e]);return sa[e]},l.locales=function(){return s(sa)},l.weekdaysShort=function(e,a,t){return Mt(e,a,t,"weekdaysShort")},l.normalizeUnits=O,l.relativeTimeRounding=function(e){return void 0===e?At:"function"==typeof e&&(At=e,!0)},l.relativeTimeThreshold=function(e,a){return void 0!==Ft[e]&&(void 0===a?Ft[e]:(Ft[e]=a,"s"===e&&(Ft.ss=a-1),!0))},l.calendarFormat=function(e,a){var t=e.diff(a,"days",!0);return t<-6?"sameElse":t<-1?"lastWeek":t<0?"lastDay":t<1?"sameDay":t<2?"nextDay":t<7?"nextWeek":"sameElse"},l.prototype=it,l.HTML5_FMT={DATETIME_LOCAL:"YYYY-MM-DDTHH:mm",DATETIME_LOCAL_SECONDS:"YYYY-MM-DDTHH:mm:ss",DATETIME_LOCAL_MS:"YYYY-MM-DDTHH:mm:ss.SSS",DATE:"YYYY-MM-DD",TIME:"HH:mm",TIME_SECONDS:"HH:mm:ss",TIME_MS:"HH:mm:ss.SSS",WEEK:"GGGG-[W]WW",MONTH:"YYYY-MM"},l.defineLocale("af",{months:"Januarie_Februarie_Maart_April_Mei_Junie_Julie_Augustus_September_Oktober_November_Desember".split("_"),monthsShort:"Jan_Feb_Mrt_Apr_Mei_Jun_Jul_Aug_Sep_Okt_Nov_Des".split("_"),weekdays:"Sondag_Maandag_Dinsdag_Woensdag_Donderdag_Vrydag_Saterdag".split("_"),weekdaysShort:"Son_Maa_Din_Woe_Don_Vry_Sat".split("_"),weekdaysMin:"So_Ma_Di_Wo_Do_Vr_Sa".split("_"),meridiemParse:/vm|nm/i,isPM:function(e){return/^nm$/i.test(e)},meridiem:function(e,a,t){return e<12?t?"vm":"VM":t?"nm":"NM"},longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Vandag om] LT",nextDay:"[M\xf4re om] LT",nextWeek:"dddd [om] LT",lastDay:"[Gister om] LT",lastWeek:"[Laas] dddd [om] LT",sameElse:"L"},relativeTime:{future:"oor %s",past:"%s gelede",s:"'n paar sekondes",ss:"%d sekondes",m:"'n minuut",mm:"%d minute",h:"'n uur",hh:"%d ure",d:"'n dag",dd:"%d dae",M:"'n maand",MM:"%d maande",y:"'n jaar",yy:"%d jaar"},dayOfMonthOrdinalParse:/\d{1,2}(ste|de)/,ordinal:function(e){return e+(1===e||8===e||20<=e?"ste":"de")},week:{dow:1,doy:4}}),l.defineLocale("ar-dz",{months:"\u062c\u0627\u0646\u0641\u064a_\u0641\u064a\u0641\u0631\u064a_\u0645\u0627\u0631\u0633_\u0623\u0641\u0631\u064a\u0644_\u0645\u0627\u064a_\u062c\u0648\u0627\u0646_\u062c\u0648\u064a\u0644\u064a\u0629_\u0623\u0648\u062a_\u0633\u0628\u062a\u0645\u0628\u0631_\u0623\u0643\u062a\u0648\u0628\u0631_\u0646\u0648\u0641\u0645\u0628\u0631_\u062f\u064a\u0633\u0645\u0628\u0631".split("_"),monthsShort:"\u062c\u0627\u0646\u0641\u064a_\u0641\u064a\u0641\u0631\u064a_\u0645\u0627\u0631\u0633_\u0623\u0641\u0631\u064a\u0644_\u0645\u0627\u064a_\u062c\u0648\u0627\u0646_\u062c\u0648\u064a\u0644\u064a\u0629_\u0623\u0648\u062a_\u0633\u0628\u062a\u0645\u0628\u0631_\u0623\u0643\u062a\u0648\u0628\u0631_\u0646\u0648\u0641\u0645\u0628\u0631_\u062f\u064a\u0633\u0645\u0628\u0631".split("_"),weekdays:"\u0627\u0644\u0623\u062d\u062f_\u0627\u0644\u0625\u062b\u0646\u064a\u0646_\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621_\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621_\u0627\u0644\u062e\u0645\u064a\u0633_\u0627\u0644\u062c\u0645\u0639\u0629_\u0627\u0644\u0633\u0628\u062a".split("_"),weekdaysShort:"\u0627\u062d\u062f_\u0627\u062b\u0646\u064a\u0646_\u062b\u0644\u0627\u062b\u0627\u0621_\u0627\u0631\u0628\u0639\u0627\u0621_\u062e\u0645\u064a\u0633_\u062c\u0645\u0639\u0629_\u0633\u0628\u062a".split("_"),weekdaysMin:"\u0623\u062d_\u0625\u062b_\u062b\u0644\u0627_\u0623\u0631_\u062e\u0645_\u062c\u0645_\u0633\u0628".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[\u0627\u0644\u064a\u0648\u0645 \u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",nextDay:"[\u063a\u062f\u0627 \u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",nextWeek:"dddd [\u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",lastDay:"[\u0623\u0645\u0633 \u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",lastWeek:"dddd [\u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",sameElse:"L"},relativeTime:{future:"\u0641\u064a %s",past:"\u0645\u0646\u0630 %s",s:"\u062b\u0648\u0627\u0646",ss:"%d \u062b\u0627\u0646\u064a\u0629",m:"\u062f\u0642\u064a\u0642\u0629",mm:"%d \u062f\u0642\u0627\u0626\u0642",h:"\u0633\u0627\u0639\u0629",hh:"%d \u0633\u0627\u0639\u0627\u062a",d:"\u064a\u0648\u0645",dd:"%d \u0623\u064a\u0627\u0645",M:"\u0634\u0647\u0631",MM:"%d \u0623\u0634\u0647\u0631",y:"\u0633\u0646\u0629",yy:"%d \u0633\u0646\u0648\u0627\u062a"},week:{dow:0,doy:4}}),l.defineLocale("ar-kw",{months:"\u064a\u0646\u0627\u064a\u0631_\u0641\u0628\u0631\u0627\u064a\u0631_\u0645\u0627\u0631\u0633_\u0623\u0628\u0631\u064a\u0644_\u0645\u0627\u064a_\u064a\u0648\u0646\u064a\u0648_\u064a\u0648\u0644\u064a\u0648\u0632_\u063a\u0634\u062a_\u0634\u062a\u0646\u0628\u0631_\u0623\u0643\u062a\u0648\u0628\u0631_\u0646\u0648\u0646\u0628\u0631_\u062f\u062c\u0646\u0628\u0631".split("_"),monthsShort:"\u064a\u0646\u0627\u064a\u0631_\u0641\u0628\u0631\u0627\u064a\u0631_\u0645\u0627\u0631\u0633_\u0623\u0628\u0631\u064a\u0644_\u0645\u0627\u064a_\u064a\u0648\u0646\u064a\u0648_\u064a\u0648\u0644\u064a\u0648\u0632_\u063a\u0634\u062a_\u0634\u062a\u0646\u0628\u0631_\u0623\u0643\u062a\u0648\u0628\u0631_\u0646\u0648\u0646\u0628\u0631_\u062f\u062c\u0646\u0628\u0631".split("_"),weekdays:"\u0627\u0644\u0623\u062d\u062f_\u0627\u0644\u0625\u062a\u0646\u064a\u0646_\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621_\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621_\u0627\u0644\u062e\u0645\u064a\u0633_\u0627\u0644\u062c\u0645\u0639\u0629_\u0627\u0644\u0633\u0628\u062a".split("_"),weekdaysShort:"\u0627\u062d\u062f_\u0627\u062a\u0646\u064a\u0646_\u062b\u0644\u0627\u062b\u0627\u0621_\u0627\u0631\u0628\u0639\u0627\u0621_\u062e\u0645\u064a\u0633_\u062c\u0645\u0639\u0629_\u0633\u0628\u062a".split("_"),weekdaysMin:"\u062d_\u0646_\u062b_\u0631_\u062e_\u062c_\u0633".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[\u0627\u0644\u064a\u0648\u0645 \u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",nextDay:"[\u063a\u062f\u0627 \u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",nextWeek:"dddd [\u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",lastDay:"[\u0623\u0645\u0633 \u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",lastWeek:"dddd [\u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",sameElse:"L"},relativeTime:{future:"\u0641\u064a %s",past:"\u0645\u0646\u0630 %s",s:"\u062b\u0648\u0627\u0646",ss:"%d \u062b\u0627\u0646\u064a\u0629",m:"\u062f\u0642\u064a\u0642\u0629",mm:"%d \u062f\u0642\u0627\u0626\u0642",h:"\u0633\u0627\u0639\u0629",hh:"%d \u0633\u0627\u0639\u0627\u062a",d:"\u064a\u0648\u0645",dd:"%d \u0623\u064a\u0627\u0645",M:"\u0634\u0647\u0631",MM:"%d \u0623\u0634\u0647\u0631",y:"\u0633\u0646\u0629",yy:"%d \u0633\u0646\u0648\u0627\u062a"},week:{dow:0,doy:12}});var It={1:"1",2:"2",3:"3",4:"4",5:"5",6:"6",7:"7",8:"8",9:"9",0:"0"},Ct=function(e){return 0===e?0:1===e?1:2===e?2:3<=e%100&&e%100<=10?3:11<=e%100?4:5},Gt={s:["\u0623\u0642\u0644 \u0645\u0646 \u062b\u0627\u0646\u064a\u0629","\u062b\u0627\u0646\u064a\u0629 \u0648\u0627\u062d\u062f\u0629",["\u062b\u0627\u0646\u064a\u062a\u0627\u0646","\u062b\u0627\u0646\u064a\u062a\u064a\u0646"],"%d \u062b\u0648\u0627\u0646","%d \u062b\u0627\u0646\u064a\u0629","%d \u062b\u0627\u0646\u064a\u0629"],m:["\u0623\u0642\u0644 \u0645\u0646 \u062f\u0642\u064a\u0642\u0629","\u062f\u0642\u064a\u0642\u0629 \u0648\u0627\u062d\u062f\u0629",["\u062f\u0642\u064a\u0642\u062a\u0627\u0646","\u062f\u0642\u064a\u0642\u062a\u064a\u0646"],"%d \u062f\u0642\u0627\u0626\u0642","%d \u062f\u0642\u064a\u0642\u0629","%d \u062f\u0642\u064a\u0642\u0629"],h:["\u0623\u0642\u0644 \u0645\u0646 \u0633\u0627\u0639\u0629","\u0633\u0627\u0639\u0629 \u0648\u0627\u062d\u062f\u0629",["\u0633\u0627\u0639\u062a\u0627\u0646","\u0633\u0627\u0639\u062a\u064a\u0646"],"%d \u0633\u0627\u0639\u0627\u062a","%d \u0633\u0627\u0639\u0629","%d \u0633\u0627\u0639\u0629"],d:["\u0623\u0642\u0644 \u0645\u0646 \u064a\u0648\u0645","\u064a\u0648\u0645 \u0648\u0627\u062d\u062f",["\u064a\u0648\u0645\u0627\u0646","\u064a\u0648\u0645\u064a\u0646"],"%d \u0623\u064a\u0627\u0645","%d \u064a\u0648\u0645\u064b\u0627","%d \u064a\u0648\u0645"],M:["\u0623\u0642\u0644 \u0645\u0646 \u0634\u0647\u0631","\u0634\u0647\u0631 \u0648\u0627\u062d\u062f",["\u0634\u0647\u0631\u0627\u0646","\u0634\u0647\u0631\u064a\u0646"],"%d \u0623\u0634\u0647\u0631","%d \u0634\u0647\u0631\u0627","%d \u0634\u0647\u0631"],y:["\u0623\u0642\u0644 \u0645\u0646 \u0639\u0627\u0645","\u0639\u0627\u0645 \u0648\u0627\u062d\u062f",["\u0639\u0627\u0645\u0627\u0646","\u0639\u0627\u0645\u064a\u0646"],"%d \u0623\u0639\u0648\u0627\u0645","%d \u0639\u0627\u0645\u064b\u0627","%d \u0639\u0627\u0645"]},Ut=function(r){return function(e,a,t,s){var n=Ct(e),d=Gt[r][Ct(e)];return 2===n&&(d=d[a?0:1]),d.replace(/%d/i,e)}},Vt=["\u064a\u0646\u0627\u064a\u0631","\u0641\u0628\u0631\u0627\u064a\u0631","\u0645\u0627\u0631\u0633","\u0623\u0628\u0631\u064a\u0644","\u0645\u0627\u064a\u0648","\u064a\u0648\u0646\u064a\u0648","\u064a\u0648\u0644\u064a\u0648","\u0623\u063a\u0633\u0637\u0633","\u0633\u0628\u062a\u0645\u0628\u0631","\u0623\u0643\u062a\u0648\u0628\u0631","\u0646\u0648\u0641\u0645\u0628\u0631","\u062f\u064a\u0633\u0645\u0628\u0631"];l.defineLocale("ar-ly",{months:Vt,monthsShort:Vt,weekdays:"\u0627\u0644\u0623\u062d\u062f_\u0627\u0644\u0625\u062b\u0646\u064a\u0646_\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621_\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621_\u0627\u0644\u062e\u0645\u064a\u0633_\u0627\u0644\u062c\u0645\u0639\u0629_\u0627\u0644\u0633\u0628\u062a".split("_"),weekdaysShort:"\u0623\u062d\u062f_\u0625\u062b\u0646\u064a\u0646_\u062b\u0644\u0627\u062b\u0627\u0621_\u0623\u0631\u0628\u0639\u0627\u0621_\u062e\u0645\u064a\u0633_\u062c\u0645\u0639\u0629_\u0633\u0628\u062a".split("_"),weekdaysMin:"\u062d_\u0646_\u062b_\u0631_\u062e_\u062c_\u0633".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"D/\u200fM/\u200fYYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},meridiemParse:/\u0635|\u0645/,isPM:function(e){return"\u0645"===e},meridiem:function(e,a,t){return e<12?"\u0635":"\u0645"},calendar:{sameDay:"[\u0627\u0644\u064a\u0648\u0645 \u0639\u0646\u062f \u0627\u0644\u0633\u0627\u0639\u0629] LT",nextDay:"[\u063a\u062f\u064b\u0627 \u0639\u0646\u062f \u0627\u0644\u0633\u0627\u0639\u0629] LT",nextWeek:"dddd [\u0639\u0646\u062f \u0627\u0644\u0633\u0627\u0639\u0629] LT",lastDay:"[\u0623\u0645\u0633 \u0639\u0646\u062f \u0627\u0644\u0633\u0627\u0639\u0629] LT",lastWeek:"dddd [\u0639\u0646\u062f \u0627\u0644\u0633\u0627\u0639\u0629] LT",sameElse:"L"},relativeTime:{future:"\u0628\u0639\u062f %s",past:"\u0645\u0646\u0630 %s",s:Ut("s"),ss:Ut("s"),m:Ut("m"),mm:Ut("m"),h:Ut("h"),hh:Ut("h"),d:Ut("d"),dd:Ut("d"),M:Ut("M"),MM:Ut("M"),y:Ut("y"),yy:Ut("y")},preparse:function(e){return e.replace(/\u060c/g,",")},postformat:function(e){return e.replace(/\d/g,function(e){return It[e]}).replace(/,/g,"\u060c")},week:{dow:6,doy:12}}),l.defineLocale("ar-ma",{months:"\u064a\u0646\u0627\u064a\u0631_\u0641\u0628\u0631\u0627\u064a\u0631_\u0645\u0627\u0631\u0633_\u0623\u0628\u0631\u064a\u0644_\u0645\u0627\u064a_\u064a\u0648\u0646\u064a\u0648_\u064a\u0648\u0644\u064a\u0648\u0632_\u063a\u0634\u062a_\u0634\u062a\u0646\u0628\u0631_\u0623\u0643\u062a\u0648\u0628\u0631_\u0646\u0648\u0646\u0628\u0631_\u062f\u062c\u0646\u0628\u0631".split("_"),monthsShort:"\u064a\u0646\u0627\u064a\u0631_\u0641\u0628\u0631\u0627\u064a\u0631_\u0645\u0627\u0631\u0633_\u0623\u0628\u0631\u064a\u0644_\u0645\u0627\u064a_\u064a\u0648\u0646\u064a\u0648_\u064a\u0648\u0644\u064a\u0648\u0632_\u063a\u0634\u062a_\u0634\u062a\u0646\u0628\u0631_\u0623\u0643\u062a\u0648\u0628\u0631_\u0646\u0648\u0646\u0628\u0631_\u062f\u062c\u0646\u0628\u0631".split("_"),weekdays:"\u0627\u0644\u0623\u062d\u062f_\u0627\u0644\u0625\u062a\u0646\u064a\u0646_\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621_\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621_\u0627\u0644\u062e\u0645\u064a\u0633_\u0627\u0644\u062c\u0645\u0639\u0629_\u0627\u0644\u0633\u0628\u062a".split("_"),weekdaysShort:"\u0627\u062d\u062f_\u0627\u062a\u0646\u064a\u0646_\u062b\u0644\u0627\u062b\u0627\u0621_\u0627\u0631\u0628\u0639\u0627\u0621_\u062e\u0645\u064a\u0633_\u062c\u0645\u0639\u0629_\u0633\u0628\u062a".split("_"),weekdaysMin:"\u062d_\u0646_\u062b_\u0631_\u062e_\u062c_\u0633".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[\u0627\u0644\u064a\u0648\u0645 \u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",nextDay:"[\u063a\u062f\u0627 \u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",nextWeek:"dddd [\u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",lastDay:"[\u0623\u0645\u0633 \u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",lastWeek:"dddd [\u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",sameElse:"L"},relativeTime:{future:"\u0641\u064a %s",past:"\u0645\u0646\u0630 %s",s:"\u062b\u0648\u0627\u0646",ss:"%d \u062b\u0627\u0646\u064a\u0629",m:"\u062f\u0642\u064a\u0642\u0629",mm:"%d \u062f\u0642\u0627\u0626\u0642",h:"\u0633\u0627\u0639\u0629",hh:"%d \u0633\u0627\u0639\u0627\u062a",d:"\u064a\u0648\u0645",dd:"%d \u0623\u064a\u0627\u0645",M:"\u0634\u0647\u0631",MM:"%d \u0623\u0634\u0647\u0631",y:"\u0633\u0646\u0629",yy:"%d \u0633\u0646\u0648\u0627\u062a"},week:{dow:6,doy:12}});var Kt={1:"\u0661",2:"\u0662",3:"\u0663",4:"\u0664",5:"\u0665",6:"\u0666",7:"\u0667",8:"\u0668",9:"\u0669",0:"\u0660"},$t={"\u0661":"1","\u0662":"2","\u0663":"3","\u0664":"4","\u0665":"5","\u0666":"6","\u0667":"7","\u0668":"8","\u0669":"9","\u0660":"0"};l.defineLocale("ar-sa",{months:"\u064a\u0646\u0627\u064a\u0631_\u0641\u0628\u0631\u0627\u064a\u0631_\u0645\u0627\u0631\u0633_\u0623\u0628\u0631\u064a\u0644_\u0645\u0627\u064a\u0648_\u064a\u0648\u0646\u064a\u0648_\u064a\u0648\u0644\u064a\u0648_\u0623\u063a\u0633\u0637\u0633_\u0633\u0628\u062a\u0645\u0628\u0631_\u0623\u0643\u062a\u0648\u0628\u0631_\u0646\u0648\u0641\u0645\u0628\u0631_\u062f\u064a\u0633\u0645\u0628\u0631".split("_"),monthsShort:"\u064a\u0646\u0627\u064a\u0631_\u0641\u0628\u0631\u0627\u064a\u0631_\u0645\u0627\u0631\u0633_\u0623\u0628\u0631\u064a\u0644_\u0645\u0627\u064a\u0648_\u064a\u0648\u0646\u064a\u0648_\u064a\u0648\u0644\u064a\u0648_\u0623\u063a\u0633\u0637\u0633_\u0633\u0628\u062a\u0645\u0628\u0631_\u0623\u0643\u062a\u0648\u0628\u0631_\u0646\u0648\u0641\u0645\u0628\u0631_\u062f\u064a\u0633\u0645\u0628\u0631".split("_"),weekdays:"\u0627\u0644\u0623\u062d\u062f_\u0627\u0644\u0625\u062b\u0646\u064a\u0646_\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621_\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621_\u0627\u0644\u062e\u0645\u064a\u0633_\u0627\u0644\u062c\u0645\u0639\u0629_\u0627\u0644\u0633\u0628\u062a".split("_"),weekdaysShort:"\u0623\u062d\u062f_\u0625\u062b\u0646\u064a\u0646_\u062b\u0644\u0627\u062b\u0627\u0621_\u0623\u0631\u0628\u0639\u0627\u0621_\u062e\u0645\u064a\u0633_\u062c\u0645\u0639\u0629_\u0633\u0628\u062a".split("_"),weekdaysMin:"\u062d_\u0646_\u062b_\u0631_\u062e_\u062c_\u0633".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},meridiemParse:/\u0635|\u0645/,isPM:function(e){return"\u0645"===e},meridiem:function(e,a,t){return e<12?"\u0635":"\u0645"},calendar:{sameDay:"[\u0627\u0644\u064a\u0648\u0645 \u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",nextDay:"[\u063a\u062f\u0627 \u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",nextWeek:"dddd [\u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",lastDay:"[\u0623\u0645\u0633 \u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",lastWeek:"dddd [\u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",sameElse:"L"},relativeTime:{future:"\u0641\u064a %s",past:"\u0645\u0646\u0630 %s",s:"\u062b\u0648\u0627\u0646",ss:"%d \u062b\u0627\u0646\u064a\u0629",m:"\u062f\u0642\u064a\u0642\u0629",mm:"%d \u062f\u0642\u0627\u0626\u0642",h:"\u0633\u0627\u0639\u0629",hh:"%d \u0633\u0627\u0639\u0627\u062a",d:"\u064a\u0648\u0645",dd:"%d \u0623\u064a\u0627\u0645",M:"\u0634\u0647\u0631",MM:"%d \u0623\u0634\u0647\u0631",y:"\u0633\u0646\u0629",yy:"%d \u0633\u0646\u0648\u0627\u062a"},preparse:function(e){return e.replace(/[\u0661\u0662\u0663\u0664\u0665\u0666\u0667\u0668\u0669\u0660]/g,function(e){return $t[e]}).replace(/\u060c/g,",")},postformat:function(e){return e.replace(/\d/g,function(e){return Kt[e]}).replace(/,/g,"\u060c")},week:{dow:0,doy:6}}),l.defineLocale("ar-tn",{months:"\u062c\u0627\u0646\u0641\u064a_\u0641\u064a\u0641\u0631\u064a_\u0645\u0627\u0631\u0633_\u0623\u0641\u0631\u064a\u0644_\u0645\u0627\u064a_\u062c\u0648\u0627\u0646_\u062c\u0648\u064a\u0644\u064a\u0629_\u0623\u0648\u062a_\u0633\u0628\u062a\u0645\u0628\u0631_\u0623\u0643\u062a\u0648\u0628\u0631_\u0646\u0648\u0641\u0645\u0628\u0631_\u062f\u064a\u0633\u0645\u0628\u0631".split("_"),monthsShort:"\u062c\u0627\u0646\u0641\u064a_\u0641\u064a\u0641\u0631\u064a_\u0645\u0627\u0631\u0633_\u0623\u0641\u0631\u064a\u0644_\u0645\u0627\u064a_\u062c\u0648\u0627\u0646_\u062c\u0648\u064a\u0644\u064a\u0629_\u0623\u0648\u062a_\u0633\u0628\u062a\u0645\u0628\u0631_\u0623\u0643\u062a\u0648\u0628\u0631_\u0646\u0648\u0641\u0645\u0628\u0631_\u062f\u064a\u0633\u0645\u0628\u0631".split("_"),weekdays:"\u0627\u0644\u0623\u062d\u062f_\u0627\u0644\u0625\u062b\u0646\u064a\u0646_\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621_\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621_\u0627\u0644\u062e\u0645\u064a\u0633_\u0627\u0644\u062c\u0645\u0639\u0629_\u0627\u0644\u0633\u0628\u062a".split("_"),weekdaysShort:"\u0623\u062d\u062f_\u0625\u062b\u0646\u064a\u0646_\u062b\u0644\u0627\u062b\u0627\u0621_\u0623\u0631\u0628\u0639\u0627\u0621_\u062e\u0645\u064a\u0633_\u062c\u0645\u0639\u0629_\u0633\u0628\u062a".split("_"),weekdaysMin:"\u062d_\u0646_\u062b_\u0631_\u062e_\u062c_\u0633".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[\u0627\u0644\u064a\u0648\u0645 \u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",nextDay:"[\u063a\u062f\u0627 \u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",nextWeek:"dddd [\u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",lastDay:"[\u0623\u0645\u0633 \u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",lastWeek:"dddd [\u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",sameElse:"L"},relativeTime:{future:"\u0641\u064a %s",past:"\u0645\u0646\u0630 %s",s:"\u062b\u0648\u0627\u0646",ss:"%d \u062b\u0627\u0646\u064a\u0629",m:"\u062f\u0642\u064a\u0642\u0629",mm:"%d \u062f\u0642\u0627\u0626\u0642",h:"\u0633\u0627\u0639\u0629",hh:"%d \u0633\u0627\u0639\u0627\u062a",d:"\u064a\u0648\u0645",dd:"%d \u0623\u064a\u0627\u0645",M:"\u0634\u0647\u0631",MM:"%d \u0623\u0634\u0647\u0631",y:"\u0633\u0646\u0629",yy:"%d \u0633\u0646\u0648\u0627\u062a"},week:{dow:1,doy:4}});var Zt={1:"\u0661",2:"\u0662",3:"\u0663",4:"\u0664",5:"\u0665",6:"\u0666",7:"\u0667",8:"\u0668",9:"\u0669",0:"\u0660"},Bt={"\u0661":"1","\u0662":"2","\u0663":"3","\u0664":"4","\u0665":"5","\u0666":"6","\u0667":"7","\u0668":"8","\u0669":"9","\u0660":"0"},qt=function(e){return 0===e?0:1===e?1:2===e?2:3<=e%100&&e%100<=10?3:11<=e%100?4:5},Qt={s:["\u0623\u0642\u0644 \u0645\u0646 \u062b\u0627\u0646\u064a\u0629","\u062b\u0627\u0646\u064a\u0629 \u0648\u0627\u062d\u062f\u0629",["\u062b\u0627\u0646\u064a\u062a\u0627\u0646","\u062b\u0627\u0646\u064a\u062a\u064a\u0646"],"%d \u062b\u0648\u0627\u0646","%d \u062b\u0627\u0646\u064a\u0629","%d \u062b\u0627\u0646\u064a\u0629"],m:["\u0623\u0642\u0644 \u0645\u0646 \u062f\u0642\u064a\u0642\u0629","\u062f\u0642\u064a\u0642\u0629 \u0648\u0627\u062d\u062f\u0629",["\u062f\u0642\u064a\u0642\u062a\u0627\u0646","\u062f\u0642\u064a\u0642\u062a\u064a\u0646"],"%d \u062f\u0642\u0627\u0626\u0642","%d \u062f\u0642\u064a\u0642\u0629","%d \u062f\u0642\u064a\u0642\u0629"],h:["\u0623\u0642\u0644 \u0645\u0646 \u0633\u0627\u0639\u0629","\u0633\u0627\u0639\u0629 \u0648\u0627\u062d\u062f\u0629",["\u0633\u0627\u0639\u062a\u0627\u0646","\u0633\u0627\u0639\u062a\u064a\u0646"],"%d \u0633\u0627\u0639\u0627\u062a","%d \u0633\u0627\u0639\u0629","%d \u0633\u0627\u0639\u0629"],d:["\u0623\u0642\u0644 \u0645\u0646 \u064a\u0648\u0645","\u064a\u0648\u0645 \u0648\u0627\u062d\u062f",["\u064a\u0648\u0645\u0627\u0646","\u064a\u0648\u0645\u064a\u0646"],"%d \u0623\u064a\u0627\u0645","%d \u064a\u0648\u0645\u064b\u0627","%d \u064a\u0648\u0645"],M:["\u0623\u0642\u0644 \u0645\u0646 \u0634\u0647\u0631","\u0634\u0647\u0631 \u0648\u0627\u062d\u062f",["\u0634\u0647\u0631\u0627\u0646","\u0634\u0647\u0631\u064a\u0646"],"%d \u0623\u0634\u0647\u0631","%d \u0634\u0647\u0631\u0627","%d \u0634\u0647\u0631"],y:["\u0623\u0642\u0644 \u0645\u0646 \u0639\u0627\u0645","\u0639\u0627\u0645 \u0648\u0627\u062d\u062f",["\u0639\u0627\u0645\u0627\u0646","\u0639\u0627\u0645\u064a\u0646"],"%d \u0623\u0639\u0648\u0627\u0645","%d \u0639\u0627\u0645\u064b\u0627","%d \u0639\u0627\u0645"]},Xt=function(r){return function(e,a,t,s){var n=qt(e),d=Qt[r][qt(e)];return 2===n&&(d=d[a?0:1]),d.replace(/%d/i,e)}},es=["\u064a\u0646\u0627\u064a\u0631","\u0641\u0628\u0631\u0627\u064a\u0631","\u0645\u0627\u0631\u0633","\u0623\u0628\u0631\u064a\u0644","\u0645\u0627\u064a\u0648","\u064a\u0648\u0646\u064a\u0648","\u064a\u0648\u0644\u064a\u0648","\u0623\u063a\u0633\u0637\u0633","\u0633\u0628\u062a\u0645\u0628\u0631","\u0623\u0643\u062a\u0648\u0628\u0631","\u0646\u0648\u0641\u0645\u0628\u0631","\u062f\u064a\u0633\u0645\u0628\u0631"];l.defineLocale("ar",{months:es,monthsShort:es,weekdays:"\u0627\u0644\u0623\u062d\u062f_\u0627\u0644\u0625\u062b\u0646\u064a\u0646_\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621_\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621_\u0627\u0644\u062e\u0645\u064a\u0633_\u0627\u0644\u062c\u0645\u0639\u0629_\u0627\u0644\u0633\u0628\u062a".split("_"),weekdaysShort:"\u0623\u062d\u062f_\u0625\u062b\u0646\u064a\u0646_\u062b\u0644\u0627\u062b\u0627\u0621_\u0623\u0631\u0628\u0639\u0627\u0621_\u062e\u0645\u064a\u0633_\u062c\u0645\u0639\u0629_\u0633\u0628\u062a".split("_"),weekdaysMin:"\u062d_\u0646_\u062b_\u0631_\u062e_\u062c_\u0633".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"D/\u200fM/\u200fYYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},meridiemParse:/\u0635|\u0645/,isPM:function(e){return"\u0645"===e},meridiem:function(e,a,t){return e<12?"\u0635":"\u0645"},calendar:{sameDay:"[\u0627\u0644\u064a\u0648\u0645 \u0639\u0646\u062f \u0627\u0644\u0633\u0627\u0639\u0629] LT",nextDay:"[\u063a\u062f\u064b\u0627 \u0639\u0646\u062f \u0627\u0644\u0633\u0627\u0639\u0629] LT",nextWeek:"dddd [\u0639\u0646\u062f \u0627\u0644\u0633\u0627\u0639\u0629] LT",lastDay:"[\u0623\u0645\u0633 \u0639\u0646\u062f \u0627\u0644\u0633\u0627\u0639\u0629] LT",lastWeek:"dddd [\u0639\u0646\u062f \u0627\u0644\u0633\u0627\u0639\u0629] LT",sameElse:"L"},relativeTime:{future:"\u0628\u0639\u062f %s",past:"\u0645\u0646\u0630 %s",s:Xt("s"),ss:Xt("s"),m:Xt("m"),mm:Xt("m"),h:Xt("h"),hh:Xt("h"),d:Xt("d"),dd:Xt("d"),M:Xt("M"),MM:Xt("M"),y:Xt("y"),yy:Xt("y")},preparse:function(e){return e.replace(/[\u0661\u0662\u0663\u0664\u0665\u0666\u0667\u0668\u0669\u0660]/g,function(e){return Bt[e]}).replace(/\u060c/g,",")},postformat:function(e){return e.replace(/\d/g,function(e){return Zt[e]}).replace(/,/g,"\u060c")},week:{dow:6,doy:12}});var as={1:"-inci",5:"-inci",8:"-inci",70:"-inci",80:"-inci",2:"-nci",7:"-nci",20:"-nci",50:"-nci",3:"-\xfcnc\xfc",4:"-\xfcnc\xfc",100:"-\xfcnc\xfc",6:"-nc\u0131",9:"-uncu",10:"-uncu",30:"-uncu",60:"-\u0131nc\u0131",90:"-\u0131nc\u0131"};function ts(e,a,t){var s,n;return"m"===t?a?"\u0445\u0432\u0456\u043b\u0456\u043d\u0430":"\u0445\u0432\u0456\u043b\u0456\u043d\u0443":"h"===t?a?"\u0433\u0430\u0434\u0437\u0456\u043d\u0430":"\u0433\u0430\u0434\u0437\u0456\u043d\u0443":e+" "+(s=+e,n={ss:a?"\u0441\u0435\u043a\u0443\u043d\u0434\u0430_\u0441\u0435\u043a\u0443\u043d\u0434\u044b_\u0441\u0435\u043a\u0443\u043d\u0434":"\u0441\u0435\u043a\u0443\u043d\u0434\u0443_\u0441\u0435\u043a\u0443\u043d\u0434\u044b_\u0441\u0435\u043a\u0443\u043d\u0434",mm:a?"\u0445\u0432\u0456\u043b\u0456\u043d\u0430_\u0445\u0432\u0456\u043b\u0456\u043d\u044b_\u0445\u0432\u0456\u043b\u0456\u043d":"\u0445\u0432\u0456\u043b\u0456\u043d\u0443_\u0445\u0432\u0456\u043b\u0456\u043d\u044b_\u0445\u0432\u0456\u043b\u0456\u043d",hh:a?"\u0433\u0430\u0434\u0437\u0456\u043d\u0430_\u0433\u0430\u0434\u0437\u0456\u043d\u044b_\u0433\u0430\u0434\u0437\u0456\u043d":"\u0433\u0430\u0434\u0437\u0456\u043d\u0443_\u0433\u0430\u0434\u0437\u0456\u043d\u044b_\u0433\u0430\u0434\u0437\u0456\u043d",dd:"\u0434\u0437\u0435\u043d\u044c_\u0434\u043d\u0456_\u0434\u0437\u0451\u043d",MM:"\u043c\u0435\u0441\u044f\u0446_\u043c\u0435\u0441\u044f\u0446\u044b_\u043c\u0435\u0441\u044f\u0446\u0430\u045e",yy:"\u0433\u043e\u0434_\u0433\u0430\u0434\u044b_\u0433\u0430\u0434\u043e\u045e"}[t].split("_"),s%10==1&&s%100!=11?n[0]:2<=s%10&&s%10<=4&&(s%100<10||20<=s%100)?n[1]:n[2])}l.defineLocale("az",{months:"yanvar_fevral_mart_aprel_may_iyun_iyul_avqust_sentyabr_oktyabr_noyabr_dekabr".split("_"),monthsShort:"yan_fev_mar_apr_may_iyn_iyl_avq_sen_okt_noy_dek".split("_"),weekdays:"Bazar_Bazar ert\u0259si_\xc7\u0259r\u015f\u0259nb\u0259 ax\u015fam\u0131_\xc7\u0259r\u015f\u0259nb\u0259_C\xfcm\u0259 ax\u015fam\u0131_C\xfcm\u0259_\u015e\u0259nb\u0259".split("_"),weekdaysShort:"Baz_BzE_\xc7Ax_\xc7\u0259r_CAx_C\xfcm_\u015e\u0259n".split("_"),weekdaysMin:"Bz_BE_\xc7A_\xc7\u0259_CA_C\xfc_\u015e\u0259".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[bug\xfcn saat] LT",nextDay:"[sabah saat] LT",nextWeek:"[g\u0259l\u0259n h\u0259ft\u0259] dddd [saat] LT",lastDay:"[d\xfcn\u0259n] LT",lastWeek:"[ke\xe7\u0259n h\u0259ft\u0259] dddd [saat] LT",sameElse:"L"},relativeTime:{future:"%s sonra",past:"%s \u0259vv\u0259l",s:"birne\xe7\u0259 saniy\u0259",ss:"%d saniy\u0259",m:"bir d\u0259qiq\u0259",mm:"%d d\u0259qiq\u0259",h:"bir saat",hh:"%d saat",d:"bir g\xfcn",dd:"%d g\xfcn",M:"bir ay",MM:"%d ay",y:"bir il",yy:"%d il"},meridiemParse:/gec\u0259|s\u0259h\u0259r|g\xfcnd\xfcz|ax\u015fam/,isPM:function(e){return/^(g\xfcnd\xfcz|ax\u015fam)$/.test(e)},meridiem:function(e,a,t){return e<4?"gec\u0259":e<12?"s\u0259h\u0259r":e<17?"g\xfcnd\xfcz":"ax\u015fam"},dayOfMonthOrdinalParse:/\d{1,2}-(\u0131nc\u0131|inci|nci|\xfcnc\xfc|nc\u0131|uncu)/,ordinal:function(e){if(0===e)return e+"-\u0131nc\u0131";var a=e%10;return e+(as[a]||as[e%100-a]||as[100<=e?100:null])},week:{dow:1,doy:7}}),l.defineLocale("be",{months:{format:"\u0441\u0442\u0443\u0434\u0437\u0435\u043d\u044f_\u043b\u044e\u0442\u0430\u0433\u0430_\u0441\u0430\u043a\u0430\u0432\u0456\u043a\u0430_\u043a\u0440\u0430\u0441\u0430\u0432\u0456\u043a\u0430_\u0442\u0440\u0430\u045e\u043d\u044f_\u0447\u044d\u0440\u0432\u0435\u043d\u044f_\u043b\u0456\u043f\u0435\u043d\u044f_\u0436\u043d\u0456\u045e\u043d\u044f_\u0432\u0435\u0440\u0430\u0441\u043d\u044f_\u043a\u0430\u0441\u0442\u0440\u044b\u0447\u043d\u0456\u043a\u0430_\u043b\u0456\u0441\u0442\u0430\u043f\u0430\u0434\u0430_\u0441\u043d\u0435\u0436\u043d\u044f".split("_"),standalone:"\u0441\u0442\u0443\u0434\u0437\u0435\u043d\u044c_\u043b\u044e\u0442\u044b_\u0441\u0430\u043a\u0430\u0432\u0456\u043a_\u043a\u0440\u0430\u0441\u0430\u0432\u0456\u043a_\u0442\u0440\u0430\u0432\u0435\u043d\u044c_\u0447\u044d\u0440\u0432\u0435\u043d\u044c_\u043b\u0456\u043f\u0435\u043d\u044c_\u0436\u043d\u0456\u0432\u0435\u043d\u044c_\u0432\u0435\u0440\u0430\u0441\u0435\u043d\u044c_\u043a\u0430\u0441\u0442\u0440\u044b\u0447\u043d\u0456\u043a_\u043b\u0456\u0441\u0442\u0430\u043f\u0430\u0434_\u0441\u043d\u0435\u0436\u0430\u043d\u044c".split("_")},monthsShort:"\u0441\u0442\u0443\u0434_\u043b\u044e\u0442_\u0441\u0430\u043a_\u043a\u0440\u0430\u0441_\u0442\u0440\u0430\u0432_\u0447\u044d\u0440\u0432_\u043b\u0456\u043f_\u0436\u043d\u0456\u0432_\u0432\u0435\u0440_\u043a\u0430\u0441\u0442_\u043b\u0456\u0441\u0442_\u0441\u043d\u0435\u0436".split("_"),weekdays:{format:"\u043d\u044f\u0434\u0437\u0435\u043b\u044e_\u043f\u0430\u043d\u044f\u0434\u0437\u0435\u043b\u0430\u043a_\u0430\u045e\u0442\u043e\u0440\u0430\u043a_\u0441\u0435\u0440\u0430\u0434\u0443_\u0447\u0430\u0446\u0432\u0435\u0440_\u043f\u044f\u0442\u043d\u0456\u0446\u0443_\u0441\u0443\u0431\u043e\u0442\u0443".split("_"),standalone:"\u043d\u044f\u0434\u0437\u0435\u043b\u044f_\u043f\u0430\u043d\u044f\u0434\u0437\u0435\u043b\u0430\u043a_\u0430\u045e\u0442\u043e\u0440\u0430\u043a_\u0441\u0435\u0440\u0430\u0434\u0430_\u0447\u0430\u0446\u0432\u0435\u0440_\u043f\u044f\u0442\u043d\u0456\u0446\u0430_\u0441\u0443\u0431\u043e\u0442\u0430".split("_"),isFormat:/\[ ?[\u0423\u0443\u045e] ?(?:\u043c\u0456\u043d\u0443\u043b\u0443\u044e|\u043d\u0430\u0441\u0442\u0443\u043f\u043d\u0443\u044e)? ?\] ?dddd/},weekdaysShort:"\u043d\u0434_\u043f\u043d_\u0430\u0442_\u0441\u0440_\u0447\u0446_\u043f\u0442_\u0441\u0431".split("_"),weekdaysMin:"\u043d\u0434_\u043f\u043d_\u0430\u0442_\u0441\u0440_\u0447\u0446_\u043f\u0442_\u0441\u0431".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY \u0433.",LLL:"D MMMM YYYY \u0433., HH:mm",LLLL:"dddd, D MMMM YYYY \u0433., HH:mm"},calendar:{sameDay:"[\u0421\u0451\u043d\u043d\u044f \u045e] LT",nextDay:"[\u0417\u0430\u045e\u0442\u0440\u0430 \u045e] LT",lastDay:"[\u0423\u0447\u043e\u0440\u0430 \u045e] LT",nextWeek:function(){return"[\u0423] dddd [\u045e] LT"},lastWeek:function(){switch(this.day()){case 0:case 3:case 5:case 6:return"[\u0423 \u043c\u0456\u043d\u0443\u043b\u0443\u044e] dddd [\u045e] LT";case 1:case 2:case 4:return"[\u0423 \u043c\u0456\u043d\u0443\u043b\u044b] dddd [\u045e] LT"}},sameElse:"L"},relativeTime:{future:"\u043f\u0440\u0430\u0437 %s",past:"%s \u0442\u0430\u043c\u0443",s:"\u043d\u0435\u043a\u0430\u043b\u044c\u043a\u0456 \u0441\u0435\u043a\u0443\u043d\u0434",m:ts,mm:ts,h:ts,hh:ts,d:"\u0434\u0437\u0435\u043d\u044c",dd:ts,M:"\u043c\u0435\u0441\u044f\u0446",MM:ts,y:"\u0433\u043e\u0434",yy:ts},meridiemParse:/\u043d\u043e\u0447\u044b|\u0440\u0430\u043d\u0456\u0446\u044b|\u0434\u043d\u044f|\u0432\u0435\u0447\u0430\u0440\u0430/,isPM:function(e){return/^(\u0434\u043d\u044f|\u0432\u0435\u0447\u0430\u0440\u0430)$/.test(e)},meridiem:function(e,a,t){return e<4?"\u043d\u043e\u0447\u044b":e<12?"\u0440\u0430\u043d\u0456\u0446\u044b":e<17?"\u0434\u043d\u044f":"\u0432\u0435\u0447\u0430\u0440\u0430"},dayOfMonthOrdinalParse:/\d{1,2}-(\u0456|\u044b|\u0433\u0430)/,ordinal:function(e,a){switch(a){case"M":case"d":case"DDD":case"w":case"W":return e%10!=2&&e%10!=3||e%100==12||e%100==13?e+"-\u044b":e+"-\u0456";case"D":return e+"-\u0433\u0430";default:return e}},week:{dow:1,doy:7}}),l.defineLocale("bg",{months:"\u044f\u043d\u0443\u0430\u0440\u0438_\u0444\u0435\u0432\u0440\u0443\u0430\u0440\u0438_\u043c\u0430\u0440\u0442_\u0430\u043f\u0440\u0438\u043b_\u043c\u0430\u0439_\u044e\u043d\u0438_\u044e\u043b\u0438_\u0430\u0432\u0433\u0443\u0441\u0442_\u0441\u0435\u043f\u0442\u0435\u043c\u0432\u0440\u0438_\u043e\u043a\u0442\u043e\u043c\u0432\u0440\u0438_\u043d\u043e\u0435\u043c\u0432\u0440\u0438_\u0434\u0435\u043a\u0435\u043c\u0432\u0440\u0438".split("_"),monthsShort:"\u044f\u043d\u0440_\u0444\u0435\u0432_\u043c\u0430\u0440_\u0430\u043f\u0440_\u043c\u0430\u0439_\u044e\u043d\u0438_\u044e\u043b\u0438_\u0430\u0432\u0433_\u0441\u0435\u043f_\u043e\u043a\u0442_\u043d\u043e\u0435_\u0434\u0435\u043a".split("_"),weekdays:"\u043d\u0435\u0434\u0435\u043b\u044f_\u043f\u043e\u043d\u0435\u0434\u0435\u043b\u043d\u0438\u043a_\u0432\u0442\u043e\u0440\u043d\u0438\u043a_\u0441\u0440\u044f\u0434\u0430_\u0447\u0435\u0442\u0432\u044a\u0440\u0442\u044a\u043a_\u043f\u0435\u0442\u044a\u043a_\u0441\u044a\u0431\u043e\u0442\u0430".split("_"),weekdaysShort:"\u043d\u0435\u0434_\u043f\u043e\u043d_\u0432\u0442\u043e_\u0441\u0440\u044f_\u0447\u0435\u0442_\u043f\u0435\u0442_\u0441\u044a\u0431".split("_"),weekdaysMin:"\u043d\u0434_\u043f\u043d_\u0432\u0442_\u0441\u0440_\u0447\u0442_\u043f\u0442_\u0441\u0431".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"D.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY H:mm",LLLL:"dddd, D MMMM YYYY H:mm"},calendar:{sameDay:"[\u0414\u043d\u0435\u0441 \u0432] LT",nextDay:"[\u0423\u0442\u0440\u0435 \u0432] LT",nextWeek:"dddd [\u0432] LT",lastDay:"[\u0412\u0447\u0435\u0440\u0430 \u0432] LT",lastWeek:function(){switch(this.day()){case 0:case 3:case 6:return"[\u0412 \u0438\u0437\u043c\u0438\u043d\u0430\u043b\u0430\u0442\u0430] dddd [\u0432] LT";case 1:case 2:case 4:case 5:return"[\u0412 \u0438\u0437\u043c\u0438\u043d\u0430\u043b\u0438\u044f] dddd [\u0432] LT"}},sameElse:"L"},relativeTime:{future:"\u0441\u043b\u0435\u0434 %s",past:"\u043f\u0440\u0435\u0434\u0438 %s",s:"\u043d\u044f\u043a\u043e\u043b\u043a\u043e \u0441\u0435\u043a\u0443\u043d\u0434\u0438",ss:"%d \u0441\u0435\u043a\u0443\u043d\u0434\u0438",m:"\u043c\u0438\u043d\u0443\u0442\u0430",mm:"%d \u043c\u0438\u043d\u0443\u0442\u0438",h:"\u0447\u0430\u0441",hh:"%d \u0447\u0430\u0441\u0430",d:"\u0434\u0435\u043d",dd:"%d \u0434\u043d\u0438",M:"\u043c\u0435\u0441\u0435\u0446",MM:"%d \u043c\u0435\u0441\u0435\u0446\u0430",y:"\u0433\u043e\u0434\u0438\u043d\u0430",yy:"%d \u0433\u043e\u0434\u0438\u043d\u0438"},dayOfMonthOrdinalParse:/\d{1,2}-(\u0435\u0432|\u0435\u043d|\u0442\u0438|\u0432\u0438|\u0440\u0438|\u043c\u0438)/,ordinal:function(e){var a=e%10,t=e%100;return 0===e?e+"-\u0435\u0432":0===t?e+"-\u0435\u043d":10<t&&t<20?e+"-\u0442\u0438":1===a?e+"-\u0432\u0438":2===a?e+"-\u0440\u0438":7===a||8===a?e+"-\u043c\u0438":e+"-\u0442\u0438"},week:{dow:1,doy:7}}),l.defineLocale("bm",{months:"Zanwuyekalo_Fewuruyekalo_Marisikalo_Awirilikalo_M\u025bkalo_Zuw\u025bnkalo_Zuluyekalo_Utikalo_S\u025btanburukalo_\u0254kut\u0254burukalo_Nowanburukalo_Desanburukalo".split("_"),monthsShort:"Zan_Few_Mar_Awi_M\u025b_Zuw_Zul_Uti_S\u025bt_\u0254ku_Now_Des".split("_"),weekdays:"Kari_Nt\u025bn\u025bn_Tarata_Araba_Alamisa_Juma_Sibiri".split("_"),weekdaysShort:"Kar_Nt\u025b_Tar_Ara_Ala_Jum_Sib".split("_"),weekdaysMin:"Ka_Nt_Ta_Ar_Al_Ju_Si".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"MMMM [tile] D [san] YYYY",LLL:"MMMM [tile] D [san] YYYY [l\u025br\u025b] HH:mm",LLLL:"dddd MMMM [tile] D [san] YYYY [l\u025br\u025b] HH:mm"},calendar:{sameDay:"[Bi l\u025br\u025b] LT",nextDay:"[Sini l\u025br\u025b] LT",nextWeek:"dddd [don l\u025br\u025b] LT",lastDay:"[Kunu l\u025br\u025b] LT",lastWeek:"dddd [t\u025bm\u025bnen l\u025br\u025b] LT",sameElse:"L"},relativeTime:{future:"%s k\u0254n\u0254",past:"a b\u025b %s b\u0254",s:"sanga dama dama",ss:"sekondi %d",m:"miniti kelen",mm:"miniti %d",h:"l\u025br\u025b kelen",hh:"l\u025br\u025b %d",d:"tile kelen",dd:"tile %d",M:"kalo kelen",MM:"kalo %d",y:"san kelen",yy:"san %d"},week:{dow:1,doy:4}});var ss={1:"\u09e7",2:"\u09e8",3:"\u09e9",4:"\u09ea",5:"\u09eb",6:"\u09ec",7:"\u09ed",8:"\u09ee",9:"\u09ef",0:"\u09e6"},ns={"\u09e7":"1","\u09e8":"2","\u09e9":"3","\u09ea":"4","\u09eb":"5","\u09ec":"6","\u09ed":"7","\u09ee":"8","\u09ef":"9","\u09e6":"0"};l.defineLocale("bn",{months:"\u099c\u09be\u09a8\u09c1\u09df\u09be\u09b0\u09c0_\u09ab\u09c7\u09ac\u09cd\u09b0\u09c1\u09df\u09be\u09b0\u09bf_\u09ae\u09be\u09b0\u09cd\u099a_\u098f\u09aa\u09cd\u09b0\u09bf\u09b2_\u09ae\u09c7_\u099c\u09c1\u09a8_\u099c\u09c1\u09b2\u09be\u0987_\u0986\u0997\u09b8\u09cd\u099f_\u09b8\u09c7\u09aa\u09cd\u099f\u09c7\u09ae\u09cd\u09ac\u09b0_\u0985\u0995\u09cd\u099f\u09cb\u09ac\u09b0_\u09a8\u09ad\u09c7\u09ae\u09cd\u09ac\u09b0_\u09a1\u09bf\u09b8\u09c7\u09ae\u09cd\u09ac\u09b0".split("_"),monthsShort:"\u099c\u09be\u09a8\u09c1_\u09ab\u09c7\u09ac_\u09ae\u09be\u09b0\u09cd\u099a_\u098f\u09aa\u09cd\u09b0_\u09ae\u09c7_\u099c\u09c1\u09a8_\u099c\u09c1\u09b2_\u0986\u0997_\u09b8\u09c7\u09aa\u09cd\u099f_\u0985\u0995\u09cd\u099f\u09cb_\u09a8\u09ad\u09c7_\u09a1\u09bf\u09b8\u09c7".split("_"),weekdays:"\u09b0\u09ac\u09bf\u09ac\u09be\u09b0_\u09b8\u09cb\u09ae\u09ac\u09be\u09b0_\u09ae\u0999\u09cd\u0997\u09b2\u09ac\u09be\u09b0_\u09ac\u09c1\u09a7\u09ac\u09be\u09b0_\u09ac\u09c3\u09b9\u09b8\u09cd\u09aa\u09a4\u09bf\u09ac\u09be\u09b0_\u09b6\u09c1\u0995\u09cd\u09b0\u09ac\u09be\u09b0_\u09b6\u09a8\u09bf\u09ac\u09be\u09b0".split("_"),weekdaysShort:"\u09b0\u09ac\u09bf_\u09b8\u09cb\u09ae_\u09ae\u0999\u09cd\u0997\u09b2_\u09ac\u09c1\u09a7_\u09ac\u09c3\u09b9\u09b8\u09cd\u09aa\u09a4\u09bf_\u09b6\u09c1\u0995\u09cd\u09b0_\u09b6\u09a8\u09bf".split("_"),weekdaysMin:"\u09b0\u09ac\u09bf_\u09b8\u09cb\u09ae_\u09ae\u0999\u09cd\u0997_\u09ac\u09c1\u09a7_\u09ac\u09c3\u09b9\u0983_\u09b6\u09c1\u0995\u09cd\u09b0_\u09b6\u09a8\u09bf".split("_"),longDateFormat:{LT:"A h:mm \u09b8\u09ae\u09df",LTS:"A h:mm:ss \u09b8\u09ae\u09df",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm \u09b8\u09ae\u09df",LLLL:"dddd, D MMMM YYYY, A h:mm \u09b8\u09ae\u09df"},calendar:{sameDay:"[\u0986\u099c] LT",nextDay:"[\u0986\u0997\u09be\u09ae\u09c0\u0995\u09be\u09b2] LT",nextWeek:"dddd, LT",lastDay:"[\u0997\u09a4\u0995\u09be\u09b2] LT",lastWeek:"[\u0997\u09a4] dddd, LT",sameElse:"L"},relativeTime:{future:"%s \u09aa\u09b0\u09c7",past:"%s \u0986\u0997\u09c7",s:"\u0995\u09df\u09c7\u0995 \u09b8\u09c7\u0995\u09c7\u09a8\u09cd\u09a1",ss:"%d \u09b8\u09c7\u0995\u09c7\u09a8\u09cd\u09a1",m:"\u098f\u0995 \u09ae\u09bf\u09a8\u09bf\u099f",mm:"%d \u09ae\u09bf\u09a8\u09bf\u099f",h:"\u098f\u0995 \u0998\u09a8\u09cd\u099f\u09be",hh:"%d \u0998\u09a8\u09cd\u099f\u09be",d:"\u098f\u0995 \u09a6\u09bf\u09a8",dd:"%d \u09a6\u09bf\u09a8",M:"\u098f\u0995 \u09ae\u09be\u09b8",MM:"%d \u09ae\u09be\u09b8",y:"\u098f\u0995 \u09ac\u099b\u09b0",yy:"%d \u09ac\u099b\u09b0"},preparse:function(e){return e.replace(/[\u09e7\u09e8\u09e9\u09ea\u09eb\u09ec\u09ed\u09ee\u09ef\u09e6]/g,function(e){return ns[e]})},postformat:function(e){return e.replace(/\d/g,function(e){return ss[e]})},meridiemParse:/\u09b0\u09be\u09a4|\u09b8\u0995\u09be\u09b2|\u09a6\u09c1\u09aa\u09c1\u09b0|\u09ac\u09bf\u0995\u09be\u09b2|\u09b0\u09be\u09a4/,meridiemHour:function(e,a){return 12===e&&(e=0),"\u09b0\u09be\u09a4"===a&&4<=e||"\u09a6\u09c1\u09aa\u09c1\u09b0"===a&&e<5||"\u09ac\u09bf\u0995\u09be\u09b2"===a?e+12:e},meridiem:function(e,a,t){return e<4?"\u09b0\u09be\u09a4":e<10?"\u09b8\u0995\u09be\u09b2":e<17?"\u09a6\u09c1\u09aa\u09c1\u09b0":e<20?"\u09ac\u09bf\u0995\u09be\u09b2":"\u09b0\u09be\u09a4"},week:{dow:0,doy:6}});var ds={1:"\u0f21",2:"\u0f22",3:"\u0f23",4:"\u0f24",5:"\u0f25",6:"\u0f26",7:"\u0f27",8:"\u0f28",9:"\u0f29",0:"\u0f20"},rs={"\u0f21":"1","\u0f22":"2","\u0f23":"3","\u0f24":"4","\u0f25":"5","\u0f26":"6","\u0f27":"7","\u0f28":"8","\u0f29":"9","\u0f20":"0"};function _s(e,a,t){var s,n,d;return e+" "+(s={mm:"munutenn",MM:"miz",dd:"devezh"}[t],2!==e?s:void 0!==(d={m:"v",b:"v",d:"z"})[(n=s).charAt(0)]?d[n.charAt(0)]+n.substring(1):n)}function is(e,a,t){var s=e+" ";switch(t){case"ss":return s+=1===e?"sekunda":2===e||3===e||4===e?"sekunde":"sekundi";case"m":return a?"jedna minuta":"jedne minute";case"mm":return s+=1===e?"minuta":2===e||3===e||4===e?"minute":"minuta";case"h":return a?"jedan sat":"jednog sata";case"hh":return s+=1===e?"sat":2===e||3===e||4===e?"sata":"sati";case"dd":return s+=1===e?"dan":"dana";case"MM":return s+=1===e?"mjesec":2===e||3===e||4===e?"mjeseca":"mjeseci";case"yy":return s+=1===e?"godina":2===e||3===e||4===e?"godine":"godina"}}l.defineLocale("bo",{months:"\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f51\u0f44\u0f0b\u0f54\u0f7c_\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f42\u0f49\u0f72\u0f66\u0f0b\u0f54_\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f42\u0f66\u0f74\u0f58\u0f0b\u0f54_\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f56\u0f5e\u0f72\u0f0b\u0f54_\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f63\u0f94\u0f0b\u0f54_\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f51\u0fb2\u0f74\u0f42\u0f0b\u0f54_\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f56\u0f51\u0f74\u0f53\u0f0b\u0f54_\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f56\u0f62\u0f92\u0fb1\u0f51\u0f0b\u0f54_\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f51\u0f42\u0f74\u0f0b\u0f54_\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f56\u0f45\u0f74\u0f0b\u0f54_\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f56\u0f45\u0f74\u0f0b\u0f42\u0f45\u0f72\u0f42\u0f0b\u0f54_\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f56\u0f45\u0f74\u0f0b\u0f42\u0f49\u0f72\u0f66\u0f0b\u0f54".split("_"),monthsShort:"\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f51\u0f44\u0f0b\u0f54\u0f7c_\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f42\u0f49\u0f72\u0f66\u0f0b\u0f54_\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f42\u0f66\u0f74\u0f58\u0f0b\u0f54_\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f56\u0f5e\u0f72\u0f0b\u0f54_\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f63\u0f94\u0f0b\u0f54_\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f51\u0fb2\u0f74\u0f42\u0f0b\u0f54_\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f56\u0f51\u0f74\u0f53\u0f0b\u0f54_\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f56\u0f62\u0f92\u0fb1\u0f51\u0f0b\u0f54_\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f51\u0f42\u0f74\u0f0b\u0f54_\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f56\u0f45\u0f74\u0f0b\u0f54_\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f56\u0f45\u0f74\u0f0b\u0f42\u0f45\u0f72\u0f42\u0f0b\u0f54_\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f56\u0f45\u0f74\u0f0b\u0f42\u0f49\u0f72\u0f66\u0f0b\u0f54".split("_"),weekdays:"\u0f42\u0f5f\u0f60\u0f0b\u0f49\u0f72\u0f0b\u0f58\u0f0b_\u0f42\u0f5f\u0f60\u0f0b\u0f5f\u0fb3\u0f0b\u0f56\u0f0b_\u0f42\u0f5f\u0f60\u0f0b\u0f58\u0f72\u0f42\u0f0b\u0f51\u0f58\u0f62\u0f0b_\u0f42\u0f5f\u0f60\u0f0b\u0f63\u0fb7\u0f42\u0f0b\u0f54\u0f0b_\u0f42\u0f5f\u0f60\u0f0b\u0f55\u0f74\u0f62\u0f0b\u0f56\u0f74_\u0f42\u0f5f\u0f60\u0f0b\u0f54\u0f0b\u0f66\u0f44\u0f66\u0f0b_\u0f42\u0f5f\u0f60\u0f0b\u0f66\u0fa4\u0f7a\u0f53\u0f0b\u0f54\u0f0b".split("_"),weekdaysShort:"\u0f49\u0f72\u0f0b\u0f58\u0f0b_\u0f5f\u0fb3\u0f0b\u0f56\u0f0b_\u0f58\u0f72\u0f42\u0f0b\u0f51\u0f58\u0f62\u0f0b_\u0f63\u0fb7\u0f42\u0f0b\u0f54\u0f0b_\u0f55\u0f74\u0f62\u0f0b\u0f56\u0f74_\u0f54\u0f0b\u0f66\u0f44\u0f66\u0f0b_\u0f66\u0fa4\u0f7a\u0f53\u0f0b\u0f54\u0f0b".split("_"),weekdaysMin:"\u0f49\u0f72\u0f0b\u0f58\u0f0b_\u0f5f\u0fb3\u0f0b\u0f56\u0f0b_\u0f58\u0f72\u0f42\u0f0b\u0f51\u0f58\u0f62\u0f0b_\u0f63\u0fb7\u0f42\u0f0b\u0f54\u0f0b_\u0f55\u0f74\u0f62\u0f0b\u0f56\u0f74_\u0f54\u0f0b\u0f66\u0f44\u0f66\u0f0b_\u0f66\u0fa4\u0f7a\u0f53\u0f0b\u0f54\u0f0b".split("_"),longDateFormat:{LT:"A h:mm",LTS:"A h:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm",LLLL:"dddd, D MMMM YYYY, A h:mm"},calendar:{sameDay:"[\u0f51\u0f72\u0f0b\u0f62\u0f72\u0f44] LT",nextDay:"[\u0f66\u0f44\u0f0b\u0f49\u0f72\u0f53] LT",nextWeek:"[\u0f56\u0f51\u0f74\u0f53\u0f0b\u0f55\u0fb2\u0f42\u0f0b\u0f62\u0f97\u0f7a\u0f66\u0f0b\u0f58], LT",lastDay:"[\u0f41\u0f0b\u0f66\u0f44] LT",lastWeek:"[\u0f56\u0f51\u0f74\u0f53\u0f0b\u0f55\u0fb2\u0f42\u0f0b\u0f58\u0f50\u0f60\u0f0b\u0f58] dddd, LT",sameElse:"L"},relativeTime:{future:"%s \u0f63\u0f0b",past:"%s \u0f66\u0f94\u0f53\u0f0b\u0f63",s:"\u0f63\u0f58\u0f0b\u0f66\u0f44",ss:"%d \u0f66\u0f90\u0f62\u0f0b\u0f46\u0f0d",m:"\u0f66\u0f90\u0f62\u0f0b\u0f58\u0f0b\u0f42\u0f45\u0f72\u0f42",mm:"%d \u0f66\u0f90\u0f62\u0f0b\u0f58",h:"\u0f46\u0f74\u0f0b\u0f5a\u0f7c\u0f51\u0f0b\u0f42\u0f45\u0f72\u0f42",hh:"%d \u0f46\u0f74\u0f0b\u0f5a\u0f7c\u0f51",d:"\u0f49\u0f72\u0f53\u0f0b\u0f42\u0f45\u0f72\u0f42",dd:"%d \u0f49\u0f72\u0f53\u0f0b",M:"\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f42\u0f45\u0f72\u0f42",MM:"%d \u0f5f\u0fb3\u0f0b\u0f56",y:"\u0f63\u0f7c\u0f0b\u0f42\u0f45\u0f72\u0f42",yy:"%d \u0f63\u0f7c"},preparse:function(e){return e.replace(/[\u0f21\u0f22\u0f23\u0f24\u0f25\u0f26\u0f27\u0f28\u0f29\u0f20]/g,function(e){return rs[e]})},postformat:function(e){return e.replace(/\d/g,function(e){return ds[e]})},meridiemParse:/\u0f58\u0f5a\u0f53\u0f0b\u0f58\u0f7c|\u0f5e\u0f7c\u0f42\u0f66\u0f0b\u0f40\u0f66|\u0f49\u0f72\u0f53\u0f0b\u0f42\u0f74\u0f44|\u0f51\u0f42\u0f7c\u0f44\u0f0b\u0f51\u0f42|\u0f58\u0f5a\u0f53\u0f0b\u0f58\u0f7c/,meridiemHour:function(e,a){return 12===e&&(e=0),"\u0f58\u0f5a\u0f53\u0f0b\u0f58\u0f7c"===a&&4<=e||"\u0f49\u0f72\u0f53\u0f0b\u0f42\u0f74\u0f44"===a&&e<5||"\u0f51\u0f42\u0f7c\u0f44\u0f0b\u0f51\u0f42"===a?e+12:e},meridiem:function(e,a,t){return e<4?"\u0f58\u0f5a\u0f53\u0f0b\u0f58\u0f7c":e<10?"\u0f5e\u0f7c\u0f42\u0f66\u0f0b\u0f40\u0f66":e<17?"\u0f49\u0f72\u0f53\u0f0b\u0f42\u0f74\u0f44":e<20?"\u0f51\u0f42\u0f7c\u0f44\u0f0b\u0f51\u0f42":"\u0f58\u0f5a\u0f53\u0f0b\u0f58\u0f7c"},week:{dow:0,doy:6}}),l.defineLocale("br",{months:"Genver_C'hwevrer_Meurzh_Ebrel_Mae_Mezheven_Gouere_Eost_Gwengolo_Here_Du_Kerzu".split("_"),monthsShort:"Gen_C'hwe_Meu_Ebr_Mae_Eve_Gou_Eos_Gwe_Her_Du_Ker".split("_"),weekdays:"Sul_Lun_Meurzh_Merc'her_Yaou_Gwener_Sadorn".split("_"),weekdaysShort:"Sul_Lun_Meu_Mer_Yao_Gwe_Sad".split("_"),weekdaysMin:"Su_Lu_Me_Mer_Ya_Gw_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"h[e]mm A",LTS:"h[e]mm:ss A",L:"DD/MM/YYYY",LL:"D [a viz] MMMM YYYY",LLL:"D [a viz] MMMM YYYY h[e]mm A",LLLL:"dddd, D [a viz] MMMM YYYY h[e]mm A"},calendar:{sameDay:"[Hiziv da] LT",nextDay:"[Warc'hoazh da] LT",nextWeek:"dddd [da] LT",lastDay:"[Dec'h da] LT",lastWeek:"dddd [paset da] LT",sameElse:"L"},relativeTime:{future:"a-benn %s",past:"%s 'zo",s:"un nebeud segondenno\xf9",ss:"%d eilenn",m:"ur vunutenn",mm:_s,h:"un eur",hh:"%d eur",d:"un devezh",dd:_s,M:"ur miz",MM:_s,y:"ur bloaz",yy:function(e){switch(function e(a){return 9<a?e(a%10):a}(e)){case 1:case 3:case 4:case 5:case 9:return e+" bloaz";default:return e+" vloaz"}}},dayOfMonthOrdinalParse:/\d{1,2}(a\xf1|vet)/,ordinal:function(e){return e+(1===e?"a\xf1":"vet")},week:{dow:1,doy:4}}),l.defineLocale("bs",{months:"januar_februar_mart_april_maj_juni_juli_august_septembar_oktobar_novembar_decembar".split("_"),monthsShort:"jan._feb._mar._apr._maj._jun._jul._aug._sep._okt._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"nedjelja_ponedjeljak_utorak_srijeda_\u010detvrtak_petak_subota".split("_"),weekdaysShort:"ned._pon._uto._sri._\u010det._pet._sub.".split("_"),weekdaysMin:"ne_po_ut_sr_\u010de_pe_su".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[danas u] LT",nextDay:"[sutra u] LT",nextWeek:function(){switch(this.day()){case 0:return"[u] [nedjelju] [u] LT";case 3:return"[u] [srijedu] [u] LT";case 6:return"[u] [subotu] [u] LT";case 1:case 2:case 4:case 5:return"[u] dddd [u] LT"}},lastDay:"[ju\u010der u] LT",lastWeek:function(){switch(this.day()){case 0:case 3:return"[pro\u0161lu] dddd [u] LT";case 6:return"[pro\u0161le] [subote] [u] LT";case 1:case 2:case 4:case 5:return"[pro\u0161li] dddd [u] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"prije %s",s:"par sekundi",ss:is,m:is,mm:is,h:is,hh:is,d:"dan",dd:is,M:"mjesec",MM:is,y:"godinu",yy:is},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}}),l.defineLocale("ca",{months:{standalone:"gener_febrer_mar\xe7_abril_maig_juny_juliol_agost_setembre_octubre_novembre_desembre".split("_"),format:"de gener_de febrer_de mar\xe7_d'abril_de maig_de juny_de juliol_d'agost_de setembre_d'octubre_de novembre_de desembre".split("_"),isFormat:/D[oD]?(\s)+MMMM/},monthsShort:"gen._febr._mar\xe7_abr._maig_juny_jul._ag._set._oct._nov._des.".split("_"),monthsParseExact:!0,weekdays:"diumenge_dilluns_dimarts_dimecres_dijous_divendres_dissabte".split("_"),weekdaysShort:"dg._dl._dt._dc._dj._dv._ds.".split("_"),weekdaysMin:"dg_dl_dt_dc_dj_dv_ds".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM [de] YYYY",ll:"D MMM YYYY",LLL:"D MMMM [de] YYYY [a les] H:mm",lll:"D MMM YYYY, H:mm",LLLL:"dddd D MMMM [de] YYYY [a les] H:mm",llll:"ddd D MMM YYYY, H:mm"},calendar:{sameDay:function(){return"[avui a "+(1!==this.hours()?"les":"la")+"] LT"},nextDay:function(){return"[dem\xe0 a "+(1!==this.hours()?"les":"la")+"] LT"},nextWeek:function(){return"dddd [a "+(1!==this.hours()?"les":"la")+"] LT"},lastDay:function(){return"[ahir a "+(1!==this.hours()?"les":"la")+"] LT"},lastWeek:function(){return"[el] dddd [passat a "+(1!==this.hours()?"les":"la")+"] LT"},sameElse:"L"},relativeTime:{future:"d'aqu\xed %s",past:"fa %s",s:"uns segons",ss:"%d segons",m:"un minut",mm:"%d minuts",h:"una hora",hh:"%d hores",d:"un dia",dd:"%d dies",M:"un mes",MM:"%d mesos",y:"un any",yy:"%d anys"},dayOfMonthOrdinalParse:/\d{1,2}(r|n|t|\xe8|a)/,ordinal:function(e,a){var t=1===e?"r":2===e?"n":3===e?"r":4===e?"t":"\xe8";return"w"!==a&&"W"!==a||(t="a"),e+t},week:{dow:1,doy:4}});var os="leden_\xfanor_b\u0159ezen_duben_kv\u011bten_\u010derven_\u010dervenec_srpen_z\xe1\u0159\xed_\u0159\xedjen_listopad_prosinec".split("_"),ms="led_\xfano_b\u0159e_dub_kv\u011b_\u010dvn_\u010dvc_srp_z\xe1\u0159_\u0159\xedj_lis_pro".split("_");function us(e){return 1<e&&e<5&&1!=~~(e/10)}function ls(e,a,t,s){var n=e+" ";switch(t){case"s":return a||s?"p\xe1r sekund":"p\xe1r sekundami";case"ss":return a||s?n+(us(e)?"sekundy":"sekund"):n+"sekundami";break;case"m":return a?"minuta":s?"minutu":"minutou";case"mm":return a||s?n+(us(e)?"minuty":"minut"):n+"minutami";break;case"h":return a?"hodina":s?"hodinu":"hodinou";case"hh":return a||s?n+(us(e)?"hodiny":"hodin"):n+"hodinami";break;case"d":return a||s?"den":"dnem";case"dd":return a||s?n+(us(e)?"dny":"dn\xed"):n+"dny";break;case"M":return a||s?"m\u011bs\xedc":"m\u011bs\xedcem";case"MM":return a||s?n+(us(e)?"m\u011bs\xedce":"m\u011bs\xedc\u016f"):n+"m\u011bs\xedci";break;case"y":return a||s?"rok":"rokem";case"yy":return a||s?n+(us(e)?"roky":"let"):n+"lety";break}}function Ms(e,a,t,s){var n={m:["eine Minute","einer Minute"],h:["eine Stunde","einer Stunde"],d:["ein Tag","einem Tag"],dd:[e+" Tage",e+" Tagen"],M:["ein Monat","einem Monat"],MM:[e+" Monate",e+" Monaten"],y:["ein Jahr","einem Jahr"],yy:[e+" Jahre",e+" Jahren"]};return a?n[t][0]:n[t][1]}function hs(e,a,t,s){var n={m:["eine Minute","einer Minute"],h:["eine Stunde","einer Stunde"],d:["ein Tag","einem Tag"],dd:[e+" Tage",e+" Tagen"],M:["ein Monat","einem Monat"],MM:[e+" Monate",e+" Monaten"],y:["ein Jahr","einem Jahr"],yy:[e+" Jahre",e+" Jahren"]};return a?n[t][0]:n[t][1]}function Ls(e,a,t,s){var n={m:["eine Minute","einer Minute"],h:["eine Stunde","einer Stunde"],d:["ein Tag","einem Tag"],dd:[e+" Tage",e+" Tagen"],M:["ein Monat","einem Monat"],MM:[e+" Monate",e+" Monaten"],y:["ein Jahr","einem Jahr"],yy:[e+" Jahre",e+" Jahren"]};return a?n[t][0]:n[t][1]}l.defineLocale("cs",{months:os,monthsShort:ms,monthsParse:function(e,a){var t,s=[];for(t=0;t<12;t++)s[t]=new RegExp("^"+e[t]+"$|^"+a[t]+"$","i");return s}(os,ms),shortMonthsParse:function(e){var a,t=[];for(a=0;a<12;a++)t[a]=new RegExp("^"+e[a]+"$","i");return t}(ms),longMonthsParse:function(e){var a,t=[];for(a=0;a<12;a++)t[a]=new RegExp("^"+e[a]+"$","i");return t}(os),weekdays:"ned\u011ble_pond\u011bl\xed_\xfater\xfd_st\u0159eda_\u010dtvrtek_p\xe1tek_sobota".split("_"),weekdaysShort:"ne_po_\xfat_st_\u010dt_p\xe1_so".split("_"),weekdaysMin:"ne_po_\xfat_st_\u010dt_p\xe1_so".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd D. MMMM YYYY H:mm",l:"D. M. YYYY"},calendar:{sameDay:"[dnes v] LT",nextDay:"[z\xedtra v] LT",nextWeek:function(){switch(this.day()){case 0:return"[v ned\u011bli v] LT";case 1:case 2:return"[v] dddd [v] LT";case 3:return"[ve st\u0159edu v] LT";case 4:return"[ve \u010dtvrtek v] LT";case 5:return"[v p\xe1tek v] LT";case 6:return"[v sobotu v] LT"}},lastDay:"[v\u010dera v] LT",lastWeek:function(){switch(this.day()){case 0:return"[minulou ned\u011bli v] LT";case 1:case 2:return"[minul\xe9] dddd [v] LT";case 3:return"[minulou st\u0159edu v] LT";case 4:case 5:return"[minul\xfd] dddd [v] LT";case 6:return"[minulou sobotu v] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"p\u0159ed %s",s:ls,ss:ls,m:ls,mm:ls,h:ls,hh:ls,d:ls,dd:ls,M:ls,MM:ls,y:ls,yy:ls},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}}),l.defineLocale("cv",{months:"\u043a\u04d1\u0440\u043b\u0430\u0447_\u043d\u0430\u0440\u04d1\u0441_\u043f\u0443\u0448_\u0430\u043a\u0430_\u043c\u0430\u0439_\u04ab\u04d7\u0440\u0442\u043c\u0435_\u0443\u0442\u04d1_\u04ab\u0443\u0440\u043b\u0430_\u0430\u0432\u04d1\u043d_\u044e\u043f\u0430_\u0447\u04f3\u043a_\u0440\u0430\u0448\u0442\u0430\u0432".split("_"),monthsShort:"\u043a\u04d1\u0440_\u043d\u0430\u0440_\u043f\u0443\u0448_\u0430\u043a\u0430_\u043c\u0430\u0439_\u04ab\u04d7\u0440_\u0443\u0442\u04d1_\u04ab\u0443\u0440_\u0430\u0432\u043d_\u044e\u043f\u0430_\u0447\u04f3\u043a_\u0440\u0430\u0448".split("_"),weekdays:"\u0432\u044b\u0440\u0441\u0430\u0440\u043d\u0438\u043a\u0443\u043d_\u0442\u0443\u043d\u0442\u0438\u043a\u0443\u043d_\u044b\u0442\u043b\u0430\u0440\u0438\u043a\u0443\u043d_\u044e\u043d\u043a\u0443\u043d_\u043a\u04d7\u04ab\u043d\u0435\u0440\u043d\u0438\u043a\u0443\u043d_\u044d\u0440\u043d\u0435\u043a\u0443\u043d_\u0448\u04d1\u043c\u0430\u0442\u043a\u0443\u043d".split("_"),weekdaysShort:"\u0432\u044b\u0440_\u0442\u0443\u043d_\u044b\u0442\u043b_\u044e\u043d_\u043a\u04d7\u04ab_\u044d\u0440\u043d_\u0448\u04d1\u043c".split("_"),weekdaysMin:"\u0432\u0440_\u0442\u043d_\u044b\u0442_\u044e\u043d_\u043a\u04ab_\u044d\u0440_\u0448\u043c".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD-MM-YYYY",LL:"YYYY [\u04ab\u0443\u043b\u0445\u0438] MMMM [\u0443\u0439\u04d1\u0445\u04d7\u043d] D[-\u043c\u04d7\u0448\u04d7]",LLL:"YYYY [\u04ab\u0443\u043b\u0445\u0438] MMMM [\u0443\u0439\u04d1\u0445\u04d7\u043d] D[-\u043c\u04d7\u0448\u04d7], HH:mm",LLLL:"dddd, YYYY [\u04ab\u0443\u043b\u0445\u0438] MMMM [\u0443\u0439\u04d1\u0445\u04d7\u043d] D[-\u043c\u04d7\u0448\u04d7], HH:mm"},calendar:{sameDay:"[\u041f\u0430\u044f\u043d] LT [\u0441\u0435\u0445\u0435\u0442\u0440\u0435]",nextDay:"[\u042b\u0440\u0430\u043d] LT [\u0441\u0435\u0445\u0435\u0442\u0440\u0435]",lastDay:"[\u04d6\u043d\u0435\u0440] LT [\u0441\u0435\u0445\u0435\u0442\u0440\u0435]",nextWeek:"[\u04aa\u0438\u0442\u0435\u0441] dddd LT [\u0441\u0435\u0445\u0435\u0442\u0440\u0435]",lastWeek:"[\u0418\u0440\u0442\u043d\u04d7] dddd LT [\u0441\u0435\u0445\u0435\u0442\u0440\u0435]",sameElse:"L"},relativeTime:{future:function(e){return e+(/\u0441\u0435\u0445\u0435\u0442$/i.exec(e)?"\u0440\u0435\u043d":/\u04ab\u0443\u043b$/i.exec(e)?"\u0442\u0430\u043d":"\u0440\u0430\u043d")},past:"%s \u043a\u0430\u044f\u043b\u043b\u0430",s:"\u043f\u04d7\u0440-\u0438\u043a \u04ab\u0435\u043a\u043a\u0443\u043d\u0442",ss:"%d \u04ab\u0435\u043a\u043a\u0443\u043d\u0442",m:"\u043f\u04d7\u0440 \u043c\u0438\u043d\u0443\u0442",mm:"%d \u043c\u0438\u043d\u0443\u0442",h:"\u043f\u04d7\u0440 \u0441\u0435\u0445\u0435\u0442",hh:"%d \u0441\u0435\u0445\u0435\u0442",d:"\u043f\u04d7\u0440 \u043a\u0443\u043d",dd:"%d \u043a\u0443\u043d",M:"\u043f\u04d7\u0440 \u0443\u0439\u04d1\u0445",MM:"%d \u0443\u0439\u04d1\u0445",y:"\u043f\u04d7\u0440 \u04ab\u0443\u043b",yy:"%d \u04ab\u0443\u043b"},dayOfMonthOrdinalParse:/\d{1,2}-\u043c\u04d7\u0448/,ordinal:"%d-\u043c\u04d7\u0448",week:{dow:1,doy:7}}),l.defineLocale("cy",{months:"Ionawr_Chwefror_Mawrth_Ebrill_Mai_Mehefin_Gorffennaf_Awst_Medi_Hydref_Tachwedd_Rhagfyr".split("_"),monthsShort:"Ion_Chwe_Maw_Ebr_Mai_Meh_Gor_Aws_Med_Hyd_Tach_Rhag".split("_"),weekdays:"Dydd Sul_Dydd Llun_Dydd Mawrth_Dydd Mercher_Dydd Iau_Dydd Gwener_Dydd Sadwrn".split("_"),weekdaysShort:"Sul_Llun_Maw_Mer_Iau_Gwe_Sad".split("_"),weekdaysMin:"Su_Ll_Ma_Me_Ia_Gw_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Heddiw am] LT",nextDay:"[Yfory am] LT",nextWeek:"dddd [am] LT",lastDay:"[Ddoe am] LT",lastWeek:"dddd [diwethaf am] LT",sameElse:"L"},relativeTime:{future:"mewn %s",past:"%s yn \xf4l",s:"ychydig eiliadau",ss:"%d eiliad",m:"munud",mm:"%d munud",h:"awr",hh:"%d awr",d:"diwrnod",dd:"%d diwrnod",M:"mis",MM:"%d mis",y:"blwyddyn",yy:"%d flynedd"},dayOfMonthOrdinalParse:/\d{1,2}(fed|ain|af|il|ydd|ed|eg)/,ordinal:function(e){var a="";return 20<e?a=40===e||50===e||60===e||80===e||100===e?"fed":"ain":0<e&&(a=["","af","il","ydd","ydd","ed","ed","ed","fed","fed","fed","eg","fed","eg","eg","fed","eg","eg","fed","eg","fed"][e]),e+a},week:{dow:1,doy:4}}),l.defineLocale("da",{months:"januar_februar_marts_april_maj_juni_juli_august_september_oktober_november_december".split("_"),monthsShort:"jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec".split("_"),weekdays:"s\xf8ndag_mandag_tirsdag_onsdag_torsdag_fredag_l\xf8rdag".split("_"),weekdaysShort:"s\xf8n_man_tir_ons_tor_fre_l\xf8r".split("_"),weekdaysMin:"s\xf8_ma_ti_on_to_fr_l\xf8".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY HH:mm",LLLL:"dddd [d.] D. MMMM YYYY [kl.] HH:mm"},calendar:{sameDay:"[i dag kl.] LT",nextDay:"[i morgen kl.] LT",nextWeek:"p\xe5 dddd [kl.] LT",lastDay:"[i g\xe5r kl.] LT",lastWeek:"[i] dddd[s kl.] LT",sameElse:"L"},relativeTime:{future:"om %s",past:"%s siden",s:"f\xe5 sekunder",ss:"%d sekunder",m:"et minut",mm:"%d minutter",h:"en time",hh:"%d timer",d:"en dag",dd:"%d dage",M:"en m\xe5ned",MM:"%d m\xe5neder",y:"et \xe5r",yy:"%d \xe5r"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}}),l.defineLocale("de-at",{months:"J\xe4nner_Februar_M\xe4rz_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember".split("_"),monthsShort:"J\xe4n._Feb._M\xe4rz_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.".split("_"),monthsParseExact:!0,weekdays:"Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag".split("_"),weekdaysShort:"So._Mo._Di._Mi._Do._Fr._Sa.".split("_"),weekdaysMin:"So_Mo_Di_Mi_Do_Fr_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY HH:mm",LLLL:"dddd, D. MMMM YYYY HH:mm"},calendar:{sameDay:"[heute um] LT [Uhr]",sameElse:"L",nextDay:"[morgen um] LT [Uhr]",nextWeek:"dddd [um] LT [Uhr]",lastDay:"[gestern um] LT [Uhr]",lastWeek:"[letzten] dddd [um] LT [Uhr]"},relativeTime:{future:"in %s",past:"vor %s",s:"ein paar Sekunden",ss:"%d Sekunden",m:Ms,mm:"%d Minuten",h:Ms,hh:"%d Stunden",d:Ms,dd:Ms,M:Ms,MM:Ms,y:Ms,yy:Ms},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}}),l.defineLocale("de-ch",{months:"Januar_Februar_M\xe4rz_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember".split("_"),monthsShort:"Jan._Feb._M\xe4rz_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.".split("_"),monthsParseExact:!0,weekdays:"Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag".split("_"),weekdaysShort:"So_Mo_Di_Mi_Do_Fr_Sa".split("_"),weekdaysMin:"So_Mo_Di_Mi_Do_Fr_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY HH:mm",LLLL:"dddd, D. MMMM YYYY HH:mm"},calendar:{sameDay:"[heute um] LT [Uhr]",sameElse:"L",nextDay:"[morgen um] LT [Uhr]",nextWeek:"dddd [um] LT [Uhr]",lastDay:"[gestern um] LT [Uhr]",lastWeek:"[letzten] dddd [um] LT [Uhr]"},relativeTime:{future:"in %s",past:"vor %s",s:"ein paar Sekunden",ss:"%d Sekunden",m:hs,mm:"%d Minuten",h:hs,hh:"%d Stunden",d:hs,dd:hs,M:hs,MM:hs,y:hs,yy:hs},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}}),l.defineLocale("de",{months:"Januar_Februar_M\xe4rz_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember".split("_"),monthsShort:"Jan._Feb._M\xe4rz_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.".split("_"),monthsParseExact:!0,weekdays:"Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag".split("_"),weekdaysShort:"So._Mo._Di._Mi._Do._Fr._Sa.".split("_"),weekdaysMin:"So_Mo_Di_Mi_Do_Fr_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY HH:mm",LLLL:"dddd, D. MMMM YYYY HH:mm"},calendar:{sameDay:"[heute um] LT [Uhr]",sameElse:"L",nextDay:"[morgen um] LT [Uhr]",nextWeek:"dddd [um] LT [Uhr]",lastDay:"[gestern um] LT [Uhr]",lastWeek:"[letzten] dddd [um] LT [Uhr]"},relativeTime:{future:"in %s",past:"vor %s",s:"ein paar Sekunden",ss:"%d Sekunden",m:Ls,mm:"%d Minuten",h:Ls,hh:"%d Stunden",d:Ls,dd:Ls,M:Ls,MM:Ls,y:Ls,yy:Ls},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}});var cs=["\u0796\u07ac\u0782\u07aa\u0787\u07a6\u0783\u07a9","\u078a\u07ac\u0784\u07b0\u0783\u07aa\u0787\u07a6\u0783\u07a9","\u0789\u07a7\u0783\u07a8\u0797\u07aa","\u0787\u07ad\u0795\u07b0\u0783\u07a9\u078d\u07aa","\u0789\u07ad","\u0796\u07ab\u0782\u07b0","\u0796\u07aa\u078d\u07a6\u0787\u07a8","\u0787\u07af\u078e\u07a6\u0790\u07b0\u0793\u07aa","\u0790\u07ac\u0795\u07b0\u0793\u07ac\u0789\u07b0\u0784\u07a6\u0783\u07aa","\u0787\u07ae\u0786\u07b0\u0793\u07af\u0784\u07a6\u0783\u07aa","\u0782\u07ae\u0788\u07ac\u0789\u07b0\u0784\u07a6\u0783\u07aa","\u0791\u07a8\u0790\u07ac\u0789\u07b0\u0784\u07a6\u0783\u07aa"],Ys=["\u0787\u07a7\u078b\u07a8\u0787\u07b0\u078c\u07a6","\u0780\u07af\u0789\u07a6","\u0787\u07a6\u0782\u07b0\u078e\u07a7\u0783\u07a6","\u0784\u07aa\u078b\u07a6","\u0784\u07aa\u0783\u07a7\u0790\u07b0\u078a\u07a6\u078c\u07a8","\u0780\u07aa\u0786\u07aa\u0783\u07aa","\u0780\u07ae\u0782\u07a8\u0780\u07a8\u0783\u07aa"];l.defineLocale("dv",{months:cs,monthsShort:cs,weekdays:Ys,weekdaysShort:Ys,weekdaysMin:"\u0787\u07a7\u078b\u07a8_\u0780\u07af\u0789\u07a6_\u0787\u07a6\u0782\u07b0_\u0784\u07aa\u078b\u07a6_\u0784\u07aa\u0783\u07a7_\u0780\u07aa\u0786\u07aa_\u0780\u07ae\u0782\u07a8".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"D/M/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},meridiemParse:/\u0789\u0786|\u0789\u078a/,isPM:function(e){return"\u0789\u078a"===e},meridiem:function(e,a,t){return e<12?"\u0789\u0786":"\u0789\u078a"},calendar:{sameDay:"[\u0789\u07a8\u0787\u07a6\u078b\u07aa] LT",nextDay:"[\u0789\u07a7\u078b\u07a6\u0789\u07a7] LT",nextWeek:"dddd LT",lastDay:"[\u0787\u07a8\u0787\u07b0\u0794\u07ac] LT",lastWeek:"[\u078a\u07a7\u0787\u07a8\u078c\u07aa\u0788\u07a8] dddd LT",sameElse:"L"},relativeTime:{future:"\u078c\u07ac\u0783\u07ad\u078e\u07a6\u0787\u07a8 %s",past:"\u0786\u07aa\u0783\u07a8\u0782\u07b0 %s",s:"\u0790\u07a8\u0786\u07aa\u0782\u07b0\u078c\u07aa\u0786\u07ae\u0785\u07ac\u0787\u07b0",ss:"d% \u0790\u07a8\u0786\u07aa\u0782\u07b0\u078c\u07aa",m:"\u0789\u07a8\u0782\u07a8\u0793\u07ac\u0787\u07b0",mm:"\u0789\u07a8\u0782\u07a8\u0793\u07aa %d",h:"\u078e\u07a6\u0791\u07a8\u0787\u07a8\u0783\u07ac\u0787\u07b0",hh:"\u078e\u07a6\u0791\u07a8\u0787\u07a8\u0783\u07aa %d",d:"\u078b\u07aa\u0788\u07a6\u0780\u07ac\u0787\u07b0",dd:"\u078b\u07aa\u0788\u07a6\u0790\u07b0 %d",M:"\u0789\u07a6\u0780\u07ac\u0787\u07b0",MM:"\u0789\u07a6\u0790\u07b0 %d",y:"\u0787\u07a6\u0780\u07a6\u0783\u07ac\u0787\u07b0",yy:"\u0787\u07a6\u0780\u07a6\u0783\u07aa %d"},preparse:function(e){return e.replace(/\u060c/g,",")},postformat:function(e){return e.replace(/,/g,"\u060c")},week:{dow:7,doy:12}}),l.defineLocale("el",{monthsNominativeEl:"\u0399\u03b1\u03bd\u03bf\u03c5\u03ac\u03c1\u03b9\u03bf\u03c2_\u03a6\u03b5\u03b2\u03c1\u03bf\u03c5\u03ac\u03c1\u03b9\u03bf\u03c2_\u039c\u03ac\u03c1\u03c4\u03b9\u03bf\u03c2_\u0391\u03c0\u03c1\u03af\u03bb\u03b9\u03bf\u03c2_\u039c\u03ac\u03b9\u03bf\u03c2_\u0399\u03bf\u03cd\u03bd\u03b9\u03bf\u03c2_\u0399\u03bf\u03cd\u03bb\u03b9\u03bf\u03c2_\u0391\u03cd\u03b3\u03bf\u03c5\u03c3\u03c4\u03bf\u03c2_\u03a3\u03b5\u03c0\u03c4\u03ad\u03bc\u03b2\u03c1\u03b9\u03bf\u03c2_\u039f\u03ba\u03c4\u03ce\u03b2\u03c1\u03b9\u03bf\u03c2_\u039d\u03bf\u03ad\u03bc\u03b2\u03c1\u03b9\u03bf\u03c2_\u0394\u03b5\u03ba\u03ad\u03bc\u03b2\u03c1\u03b9\u03bf\u03c2".split("_"),monthsGenitiveEl:"\u0399\u03b1\u03bd\u03bf\u03c5\u03b1\u03c1\u03af\u03bf\u03c5_\u03a6\u03b5\u03b2\u03c1\u03bf\u03c5\u03b1\u03c1\u03af\u03bf\u03c5_\u039c\u03b1\u03c1\u03c4\u03af\u03bf\u03c5_\u0391\u03c0\u03c1\u03b9\u03bb\u03af\u03bf\u03c5_\u039c\u03b1\u0390\u03bf\u03c5_\u0399\u03bf\u03c5\u03bd\u03af\u03bf\u03c5_\u0399\u03bf\u03c5\u03bb\u03af\u03bf\u03c5_\u0391\u03c5\u03b3\u03bf\u03cd\u03c3\u03c4\u03bf\u03c5_\u03a3\u03b5\u03c0\u03c4\u03b5\u03bc\u03b2\u03c1\u03af\u03bf\u03c5_\u039f\u03ba\u03c4\u03c9\u03b2\u03c1\u03af\u03bf\u03c5_\u039d\u03bf\u03b5\u03bc\u03b2\u03c1\u03af\u03bf\u03c5_\u0394\u03b5\u03ba\u03b5\u03bc\u03b2\u03c1\u03af\u03bf\u03c5".split("_"),months:function(e,a){return e?"string"==typeof a&&/D/.test(a.substring(0,a.indexOf("MMMM")))?this._monthsGenitiveEl[e.month()]:this._monthsNominativeEl[e.month()]:this._monthsNominativeEl},monthsShort:"\u0399\u03b1\u03bd_\u03a6\u03b5\u03b2_\u039c\u03b1\u03c1_\u0391\u03c0\u03c1_\u039c\u03b1\u03ca_\u0399\u03bf\u03c5\u03bd_\u0399\u03bf\u03c5\u03bb_\u0391\u03c5\u03b3_\u03a3\u03b5\u03c0_\u039f\u03ba\u03c4_\u039d\u03bf\u03b5_\u0394\u03b5\u03ba".split("_"),weekdays:"\u039a\u03c5\u03c1\u03b9\u03b1\u03ba\u03ae_\u0394\u03b5\u03c5\u03c4\u03ad\u03c1\u03b1_\u03a4\u03c1\u03af\u03c4\u03b7_\u03a4\u03b5\u03c4\u03ac\u03c1\u03c4\u03b7_\u03a0\u03ad\u03bc\u03c0\u03c4\u03b7_\u03a0\u03b1\u03c1\u03b1\u03c3\u03ba\u03b5\u03c5\u03ae_\u03a3\u03ac\u03b2\u03b2\u03b1\u03c4\u03bf".split("_"),weekdaysShort:"\u039a\u03c5\u03c1_\u0394\u03b5\u03c5_\u03a4\u03c1\u03b9_\u03a4\u03b5\u03c4_\u03a0\u03b5\u03bc_\u03a0\u03b1\u03c1_\u03a3\u03b1\u03b2".split("_"),weekdaysMin:"\u039a\u03c5_\u0394\u03b5_\u03a4\u03c1_\u03a4\u03b5_\u03a0\u03b5_\u03a0\u03b1_\u03a3\u03b1".split("_"),meridiem:function(e,a,t){return 11<e?t?"\u03bc\u03bc":"\u039c\u039c":t?"\u03c0\u03bc":"\u03a0\u039c"},isPM:function(e){return"\u03bc"===(e+"").toLowerCase()[0]},meridiemParse:/[\u03a0\u039c]\.?\u039c?\.?/i,longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendarEl:{sameDay:"[\u03a3\u03ae\u03bc\u03b5\u03c1\u03b1 {}] LT",nextDay:"[\u0391\u03cd\u03c1\u03b9\u03bf {}] LT",nextWeek:"dddd [{}] LT",lastDay:"[\u03a7\u03b8\u03b5\u03c2 {}] LT",lastWeek:function(){switch(this.day()){case 6:return"[\u03c4\u03bf \u03c0\u03c1\u03bf\u03b7\u03b3\u03bf\u03cd\u03bc\u03b5\u03bd\u03bf] dddd [{}] LT";default:return"[\u03c4\u03b7\u03bd \u03c0\u03c1\u03bf\u03b7\u03b3\u03bf\u03cd\u03bc\u03b5\u03bd\u03b7] dddd [{}] LT"}},sameElse:"L"},calendar:function(e,a){var t=this._calendarEl[e],s=a&&a.hours();return S(t)&&(t=t.apply(a)),t.replace("{}",s%12==1?"\u03c3\u03c4\u03b7":"\u03c3\u03c4\u03b9\u03c2")},relativeTime:{future:"\u03c3\u03b5 %s",past:"%s \u03c0\u03c1\u03b9\u03bd",s:"\u03bb\u03af\u03b3\u03b1 \u03b4\u03b5\u03c5\u03c4\u03b5\u03c1\u03cc\u03bb\u03b5\u03c0\u03c4\u03b1",ss:"%d \u03b4\u03b5\u03c5\u03c4\u03b5\u03c1\u03cc\u03bb\u03b5\u03c0\u03c4\u03b1",m:"\u03ad\u03bd\u03b1 \u03bb\u03b5\u03c0\u03c4\u03cc",mm:"%d \u03bb\u03b5\u03c0\u03c4\u03ac",h:"\u03bc\u03af\u03b1 \u03ce\u03c1\u03b1",hh:"%d \u03ce\u03c1\u03b5\u03c2",d:"\u03bc\u03af\u03b1 \u03bc\u03ad\u03c1\u03b1",dd:"%d \u03bc\u03ad\u03c1\u03b5\u03c2",M:"\u03ad\u03bd\u03b1\u03c2 \u03bc\u03ae\u03bd\u03b1\u03c2",MM:"%d \u03bc\u03ae\u03bd\u03b5\u03c2",y:"\u03ad\u03bd\u03b1\u03c2 \u03c7\u03c1\u03cc\u03bd\u03bf\u03c2",yy:"%d \u03c7\u03c1\u03cc\u03bd\u03b9\u03b1"},dayOfMonthOrdinalParse:/\d{1,2}\u03b7/,ordinal:"%d\u03b7",week:{dow:1,doy:4}}),l.defineLocale("en-au",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(e){var a=e%10;return e+(1==~~(e%100/10)?"th":1===a?"st":2===a?"nd":3===a?"rd":"th")},week:{dow:1,doy:4}}),l.defineLocale("en-ca",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"YYYY-MM-DD",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(e){var a=e%10;return e+(1==~~(e%100/10)?"th":1===a?"st":2===a?"nd":3===a?"rd":"th")}}),l.defineLocale("en-gb",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(e){var a=e%10;return e+(1==~~(e%100/10)?"th":1===a?"st":2===a?"nd":3===a?"rd":"th")},week:{dow:1,doy:4}}),l.defineLocale("en-ie",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD-MM-YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(e){var a=e%10;return e+(1==~~(e%100/10)?"th":1===a?"st":2===a?"nd":3===a?"rd":"th")},week:{dow:1,doy:4}}),l.defineLocale("en-il",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(e){var a=e%10;return e+(1==~~(e%100/10)?"th":1===a?"st":2===a?"nd":3===a?"rd":"th")}}),l.defineLocale("en-nz",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(e){var a=e%10;return e+(1==~~(e%100/10)?"th":1===a?"st":2===a?"nd":3===a?"rd":"th")},week:{dow:1,doy:4}}),l.defineLocale("eo",{months:"januaro_februaro_marto_aprilo_majo_junio_julio_a\u016dgusto_septembro_oktobro_novembro_decembro".split("_"),monthsShort:"jan_feb_mar_apr_maj_jun_jul_a\u016dg_sep_okt_nov_dec".split("_"),weekdays:"diman\u0109o_lundo_mardo_merkredo_\u0135a\u016ddo_vendredo_sabato".split("_"),weekdaysShort:"dim_lun_mard_merk_\u0135a\u016d_ven_sab".split("_"),weekdaysMin:"di_lu_ma_me_\u0135a_ve_sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"D[-a de] MMMM, YYYY",LLL:"D[-a de] MMMM, YYYY HH:mm",LLLL:"dddd, [la] D[-a de] MMMM, YYYY HH:mm"},meridiemParse:/[ap]\.t\.m/i,isPM:function(e){return"p"===e.charAt(0).toLowerCase()},meridiem:function(e,a,t){return 11<e?t?"p.t.m.":"P.T.M.":t?"a.t.m.":"A.T.M."},calendar:{sameDay:"[Hodia\u016d je] LT",nextDay:"[Morga\u016d je] LT",nextWeek:"dddd [je] LT",lastDay:"[Hiera\u016d je] LT",lastWeek:"[pasinta] dddd [je] LT",sameElse:"L"},relativeTime:{future:"post %s",past:"anta\u016d %s",s:"sekundoj",ss:"%d sekundoj",m:"minuto",mm:"%d minutoj",h:"horo",hh:"%d horoj",d:"tago",dd:"%d tagoj",M:"monato",MM:"%d monatoj",y:"jaro",yy:"%d jaroj"},dayOfMonthOrdinalParse:/\d{1,2}a/,ordinal:"%da",week:{dow:1,doy:7}});var ys="ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.".split("_"),fs="ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic".split("_"),ks=[/^ene/i,/^feb/i,/^mar/i,/^abr/i,/^may/i,/^jun/i,/^jul/i,/^ago/i,/^sep/i,/^oct/i,/^nov/i,/^dic/i],ps=/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i;l.defineLocale("es-do",{months:"enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre".split("_"),monthsShort:function(e,a){return e?/-MMM-/.test(a)?fs[e.month()]:ys[e.month()]:ys},monthsRegex:ps,monthsShortRegex:ps,monthsStrictRegex:/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,monthsShortStrictRegex:/^(ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i,monthsParse:ks,longMonthsParse:ks,shortMonthsParse:ks,weekdays:"domingo_lunes_martes_mi\xe9rcoles_jueves_viernes_s\xe1bado".split("_"),weekdaysShort:"dom._lun._mar._mi\xe9._jue._vie._s\xe1b.".split("_"),weekdaysMin:"do_lu_ma_mi_ju_vi_s\xe1".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY h:mm A",LLLL:"dddd, D [de] MMMM [de] YYYY h:mm A"},calendar:{sameDay:function(){return"[hoy a la"+(1!==this.hours()?"s":"")+"] LT"},nextDay:function(){return"[ma\xf1ana a la"+(1!==this.hours()?"s":"")+"] LT"},nextWeek:function(){return"dddd [a la"+(1!==this.hours()?"s":"")+"] LT"},lastDay:function(){return"[ayer a la"+(1!==this.hours()?"s":"")+"] LT"},lastWeek:function(){return"[el] dddd [pasado a la"+(1!==this.hours()?"s":"")+"] LT"},sameElse:"L"},relativeTime:{future:"en %s",past:"hace %s",s:"unos segundos",ss:"%d segundos",m:"un minuto",mm:"%d minutos",h:"una hora",hh:"%d horas",d:"un d\xeda",dd:"%d d\xedas",M:"un mes",MM:"%d meses",y:"un a\xf1o",yy:"%d a\xf1os"},dayOfMonthOrdinalParse:/\d{1,2}\xba/,ordinal:"%d\xba",week:{dow:1,doy:4}});var Ds="ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.".split("_"),Ts="ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic".split("_");l.defineLocale("es-us",{months:"enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre".split("_"),monthsShort:function(e,a){return e?/-MMM-/.test(a)?Ts[e.month()]:Ds[e.month()]:Ds},monthsParseExact:!0,weekdays:"domingo_lunes_martes_mi\xe9rcoles_jueves_viernes_s\xe1bado".split("_"),weekdaysShort:"dom._lun._mar._mi\xe9._jue._vie._s\xe1b.".split("_"),weekdaysMin:"do_lu_ma_mi_ju_vi_s\xe1".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"MM/DD/YYYY",LL:"MMMM [de] D [de] YYYY",LLL:"MMMM [de] D [de] YYYY h:mm A",LLLL:"dddd, MMMM [de] D [de] YYYY h:mm A"},calendar:{sameDay:function(){return"[hoy a la"+(1!==this.hours()?"s":"")+"] LT"},nextDay:function(){return"[ma\xf1ana a la"+(1!==this.hours()?"s":"")+"] LT"},nextWeek:function(){return"dddd [a la"+(1!==this.hours()?"s":"")+"] LT"},lastDay:function(){return"[ayer a la"+(1!==this.hours()?"s":"")+"] LT"},lastWeek:function(){return"[el] dddd [pasado a la"+(1!==this.hours()?"s":"")+"] LT"},sameElse:"L"},relativeTime:{future:"en %s",past:"hace %s",s:"unos segundos",ss:"%d segundos",m:"un minuto",mm:"%d minutos",h:"una hora",hh:"%d horas",d:"un d\xeda",dd:"%d d\xedas",M:"un mes",MM:"%d meses",y:"un a\xf1o",yy:"%d a\xf1os"},dayOfMonthOrdinalParse:/\d{1,2}\xba/,ordinal:"%d\xba",week:{dow:0,doy:6}});var gs="ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.".split("_"),ws="ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic".split("_"),vs=[/^ene/i,/^feb/i,/^mar/i,/^abr/i,/^may/i,/^jun/i,/^jul/i,/^ago/i,/^sep/i,/^oct/i,/^nov/i,/^dic/i],Hs=/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i;function Ss(e,a,t,s){var n={s:["m\xf5ne sekundi","m\xf5ni sekund","paar sekundit"],ss:[e+"sekundi",e+"sekundit"],m:["\xfche minuti","\xfcks minut"],mm:[e+" minuti",e+" minutit"],h:["\xfche tunni","tund aega","\xfcks tund"],hh:[e+" tunni",e+" tundi"],d:["\xfche p\xe4eva","\xfcks p\xe4ev"],M:["kuu aja","kuu aega","\xfcks kuu"],MM:[e+" kuu",e+" kuud"],y:["\xfche aasta","aasta","\xfcks aasta"],yy:[e+" aasta",e+" aastat"]};return a?n[t][2]?n[t][2]:n[t][1]:s?n[t][0]:n[t][1]}l.defineLocale("es",{months:"enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre".split("_"),monthsShort:function(e,a){return e?/-MMM-/.test(a)?ws[e.month()]:gs[e.month()]:gs},monthsRegex:Hs,monthsShortRegex:Hs,monthsStrictRegex:/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,monthsShortStrictRegex:/^(ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i,monthsParse:vs,longMonthsParse:vs,shortMonthsParse:vs,weekdays:"domingo_lunes_martes_mi\xe9rcoles_jueves_viernes_s\xe1bado".split("_"),weekdaysShort:"dom._lun._mar._mi\xe9._jue._vie._s\xe1b.".split("_"),weekdaysMin:"do_lu_ma_mi_ju_vi_s\xe1".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY H:mm",LLLL:"dddd, D [de] MMMM [de] YYYY H:mm"},calendar:{sameDay:function(){return"[hoy a la"+(1!==this.hours()?"s":"")+"] LT"},nextDay:function(){return"[ma\xf1ana a la"+(1!==this.hours()?"s":"")+"] LT"},nextWeek:function(){return"dddd [a la"+(1!==this.hours()?"s":"")+"] LT"},lastDay:function(){return"[ayer a la"+(1!==this.hours()?"s":"")+"] LT"},lastWeek:function(){return"[el] dddd [pasado a la"+(1!==this.hours()?"s":"")+"] LT"},sameElse:"L"},relativeTime:{future:"en %s",past:"hace %s",s:"unos segundos",ss:"%d segundos",m:"un minuto",mm:"%d minutos",h:"una hora",hh:"%d horas",d:"un d\xeda",dd:"%d d\xedas",M:"un mes",MM:"%d meses",y:"un a\xf1o",yy:"%d a\xf1os"},dayOfMonthOrdinalParse:/\d{1,2}\xba/,ordinal:"%d\xba",week:{dow:1,doy:4}}),l.defineLocale("et",{months:"jaanuar_veebruar_m\xe4rts_aprill_mai_juuni_juuli_august_september_oktoober_november_detsember".split("_"),monthsShort:"jaan_veebr_m\xe4rts_apr_mai_juuni_juuli_aug_sept_okt_nov_dets".split("_"),weekdays:"p\xfchap\xe4ev_esmasp\xe4ev_teisip\xe4ev_kolmap\xe4ev_neljap\xe4ev_reede_laup\xe4ev".split("_"),weekdaysShort:"P_E_T_K_N_R_L".split("_"),weekdaysMin:"P_E_T_K_N_R_L".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[T\xe4na,] LT",nextDay:"[Homme,] LT",nextWeek:"[J\xe4rgmine] dddd LT",lastDay:"[Eile,] LT",lastWeek:"[Eelmine] dddd LT",sameElse:"L"},relativeTime:{future:"%s p\xe4rast",past:"%s tagasi",s:Ss,ss:Ss,m:Ss,mm:Ss,h:Ss,hh:Ss,d:Ss,dd:"%d p\xe4eva",M:Ss,MM:Ss,y:Ss,yy:Ss},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}}),l.defineLocale("eu",{months:"urtarrila_otsaila_martxoa_apirila_maiatza_ekaina_uztaila_abuztua_iraila_urria_azaroa_abendua".split("_"),monthsShort:"urt._ots._mar._api._mai._eka._uzt._abu._ira._urr._aza._abe.".split("_"),monthsParseExact:!0,weekdays:"igandea_astelehena_asteartea_asteazkena_osteguna_ostirala_larunbata".split("_"),weekdaysShort:"ig._al._ar._az._og._ol._lr.".split("_"),weekdaysMin:"ig_al_ar_az_og_ol_lr".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"YYYY[ko] MMMM[ren] D[a]",LLL:"YYYY[ko] MMMM[ren] D[a] HH:mm",LLLL:"dddd, YYYY[ko] MMMM[ren] D[a] HH:mm",l:"YYYY-M-D",ll:"YYYY[ko] MMM D[a]",lll:"YYYY[ko] MMM D[a] HH:mm",llll:"ddd, YYYY[ko] MMM D[a] HH:mm"},calendar:{sameDay:"[gaur] LT[etan]",nextDay:"[bihar] LT[etan]",nextWeek:"dddd LT[etan]",lastDay:"[atzo] LT[etan]",lastWeek:"[aurreko] dddd LT[etan]",sameElse:"L"},relativeTime:{future:"%s barru",past:"duela %s",s:"segundo batzuk",ss:"%d segundo",m:"minutu bat",mm:"%d minutu",h:"ordu bat",hh:"%d ordu",d:"egun bat",dd:"%d egun",M:"hilabete bat",MM:"%d hilabete",y:"urte bat",yy:"%d urte"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}});var bs={1:"\u06f1",2:"\u06f2",3:"\u06f3",4:"\u06f4",5:"\u06f5",6:"\u06f6",7:"\u06f7",8:"\u06f8",9:"\u06f9",0:"\u06f0"},js={"\u06f1":"1","\u06f2":"2","\u06f3":"3","\u06f4":"4","\u06f5":"5","\u06f6":"6","\u06f7":"7","\u06f8":"8","\u06f9":"9","\u06f0":"0"};l.defineLocale("fa",{months:"\u0698\u0627\u0646\u0648\u06cc\u0647_\u0641\u0648\u0631\u06cc\u0647_\u0645\u0627\u0631\u0633_\u0622\u0648\u0631\u06cc\u0644_\u0645\u0647_\u0698\u0648\u0626\u0646_\u0698\u0648\u0626\u06cc\u0647_\u0627\u0648\u062a_\u0633\u067e\u062a\u0627\u0645\u0628\u0631_\u0627\u06a9\u062a\u0628\u0631_\u0646\u0648\u0627\u0645\u0628\u0631_\u062f\u0633\u0627\u0645\u0628\u0631".split("_"),monthsShort:"\u0698\u0627\u0646\u0648\u06cc\u0647_\u0641\u0648\u0631\u06cc\u0647_\u0645\u0627\u0631\u0633_\u0622\u0648\u0631\u06cc\u0644_\u0645\u0647_\u0698\u0648\u0626\u0646_\u0698\u0648\u0626\u06cc\u0647_\u0627\u0648\u062a_\u0633\u067e\u062a\u0627\u0645\u0628\u0631_\u0627\u06a9\u062a\u0628\u0631_\u0646\u0648\u0627\u0645\u0628\u0631_\u062f\u0633\u0627\u0645\u0628\u0631".split("_"),weekdays:"\u06cc\u06a9\u200c\u0634\u0646\u0628\u0647_\u062f\u0648\u0634\u0646\u0628\u0647_\u0633\u0647\u200c\u0634\u0646\u0628\u0647_\u0686\u0647\u0627\u0631\u0634\u0646\u0628\u0647_\u067e\u0646\u062c\u200c\u0634\u0646\u0628\u0647_\u062c\u0645\u0639\u0647_\u0634\u0646\u0628\u0647".split("_"),weekdaysShort:"\u06cc\u06a9\u200c\u0634\u0646\u0628\u0647_\u062f\u0648\u0634\u0646\u0628\u0647_\u0633\u0647\u200c\u0634\u0646\u0628\u0647_\u0686\u0647\u0627\u0631\u0634\u0646\u0628\u0647_\u067e\u0646\u062c\u200c\u0634\u0646\u0628\u0647_\u062c\u0645\u0639\u0647_\u0634\u0646\u0628\u0647".split("_"),weekdaysMin:"\u06cc_\u062f_\u0633_\u0686_\u067e_\u062c_\u0634".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},meridiemParse:/\u0642\u0628\u0644 \u0627\u0632 \u0638\u0647\u0631|\u0628\u0639\u062f \u0627\u0632 \u0638\u0647\u0631/,isPM:function(e){return/\u0628\u0639\u062f \u0627\u0632 \u0638\u0647\u0631/.test(e)},meridiem:function(e,a,t){return e<12?"\u0642\u0628\u0644 \u0627\u0632 \u0638\u0647\u0631":"\u0628\u0639\u062f \u0627\u0632 \u0638\u0647\u0631"},calendar:{sameDay:"[\u0627\u0645\u0631\u0648\u0632 \u0633\u0627\u0639\u062a] LT",nextDay:"[\u0641\u0631\u062f\u0627 \u0633\u0627\u0639\u062a] LT",nextWeek:"dddd [\u0633\u0627\u0639\u062a] LT",lastDay:"[\u062f\u06cc\u0631\u0648\u0632 \u0633\u0627\u0639\u062a] LT",lastWeek:"dddd [\u067e\u06cc\u0634] [\u0633\u0627\u0639\u062a] LT",sameElse:"L"},relativeTime:{future:"\u062f\u0631 %s",past:"%s \u067e\u06cc\u0634",s:"\u0686\u0646\u062f \u062b\u0627\u0646\u06cc\u0647",ss:"\u062b\u0627\u0646\u06cc\u0647 d%",m:"\u06cc\u06a9 \u062f\u0642\u06cc\u0642\u0647",mm:"%d \u062f\u0642\u06cc\u0642\u0647",h:"\u06cc\u06a9 \u0633\u0627\u0639\u062a",hh:"%d \u0633\u0627\u0639\u062a",d:"\u06cc\u06a9 \u0631\u0648\u0632",dd:"%d \u0631\u0648\u0632",M:"\u06cc\u06a9 \u0645\u0627\u0647",MM:"%d \u0645\u0627\u0647",y:"\u06cc\u06a9 \u0633\u0627\u0644",yy:"%d \u0633\u0627\u0644"},preparse:function(e){return e.replace(/[\u06f0-\u06f9]/g,function(e){return js[e]}).replace(/\u060c/g,",")},postformat:function(e){return e.replace(/\d/g,function(e){return bs[e]}).replace(/,/g,"\u060c")},dayOfMonthOrdinalParse:/\d{1,2}\u0645/,ordinal:"%d\u0645",week:{dow:6,doy:12}});var xs="nolla yksi kaksi kolme nelj\xe4 viisi kuusi seitsem\xe4n kahdeksan yhdeks\xe4n".split(" "),Ps=["nolla","yhden","kahden","kolmen","nelj\xe4n","viiden","kuuden",xs[7],xs[8],xs[9]];function Os(e,a,t,s){var n,d,r="";switch(t){case"s":return s?"muutaman sekunnin":"muutama sekunti";case"ss":return s?"sekunnin":"sekuntia";case"m":return s?"minuutin":"minuutti";case"mm":r=s?"minuutin":"minuuttia";break;case"h":return s?"tunnin":"tunti";case"hh":r=s?"tunnin":"tuntia";break;case"d":return s?"p\xe4iv\xe4n":"p\xe4iv\xe4";case"dd":r=s?"p\xe4iv\xe4n":"p\xe4iv\xe4\xe4";break;case"M":return s?"kuukauden":"kuukausi";case"MM":r=s?"kuukauden":"kuukautta";break;case"y":return s?"vuoden":"vuosi";case"yy":r=s?"vuoden":"vuotta";break}return d=s,r=((n=e)<10?d?Ps[n]:xs[n]:n)+" "+r}l.defineLocale("fi",{months:"tammikuu_helmikuu_maaliskuu_huhtikuu_toukokuu_kes\xe4kuu_hein\xe4kuu_elokuu_syyskuu_lokakuu_marraskuu_joulukuu".split("_"),monthsShort:"tammi_helmi_maalis_huhti_touko_kes\xe4_hein\xe4_elo_syys_loka_marras_joulu".split("_"),weekdays:"sunnuntai_maanantai_tiistai_keskiviikko_torstai_perjantai_lauantai".split("_"),weekdaysShort:"su_ma_ti_ke_to_pe_la".split("_"),weekdaysMin:"su_ma_ti_ke_to_pe_la".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD.MM.YYYY",LL:"Do MMMM[ta] YYYY",LLL:"Do MMMM[ta] YYYY, [klo] HH.mm",LLLL:"dddd, Do MMMM[ta] YYYY, [klo] HH.mm",l:"D.M.YYYY",ll:"Do MMM YYYY",lll:"Do MMM YYYY, [klo] HH.mm",llll:"ddd, Do MMM YYYY, [klo] HH.mm"},calendar:{sameDay:"[t\xe4n\xe4\xe4n] [klo] LT",nextDay:"[huomenna] [klo] LT",nextWeek:"dddd [klo] LT",lastDay:"[eilen] [klo] LT",lastWeek:"[viime] dddd[na] [klo] LT",sameElse:"L"},relativeTime:{future:"%s p\xe4\xe4st\xe4",past:"%s sitten",s:Os,ss:Os,m:Os,mm:Os,h:Os,hh:Os,d:Os,dd:Os,M:Os,MM:Os,y:Os,yy:Os},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}}),l.defineLocale("fo",{months:"januar_februar_mars_apr\xedl_mai_juni_juli_august_september_oktober_november_desember".split("_"),monthsShort:"jan_feb_mar_apr_mai_jun_jul_aug_sep_okt_nov_des".split("_"),weekdays:"sunnudagur_m\xe1nadagur_t\xfdsdagur_mikudagur_h\xf3sdagur_fr\xedggjadagur_leygardagur".split("_"),weekdaysShort:"sun_m\xe1n_t\xfds_mik_h\xf3s_fr\xed_ley".split("_"),weekdaysMin:"su_m\xe1_t\xfd_mi_h\xf3_fr_le".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D. MMMM, YYYY HH:mm"},calendar:{sameDay:"[\xcd dag kl.] LT",nextDay:"[\xcd morgin kl.] LT",nextWeek:"dddd [kl.] LT",lastDay:"[\xcd gj\xe1r kl.] LT",lastWeek:"[s\xed\xf0stu] dddd [kl] LT",sameElse:"L"},relativeTime:{future:"um %s",past:"%s s\xed\xf0ani",s:"f\xe1 sekund",ss:"%d sekundir",m:"ein minutt",mm:"%d minuttir",h:"ein t\xedmi",hh:"%d t\xedmar",d:"ein dagur",dd:"%d dagar",M:"ein m\xe1na\xf0i",MM:"%d m\xe1na\xf0ir",y:"eitt \xe1r",yy:"%d \xe1r"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}}),l.defineLocale("fr-ca",{months:"janvier_f\xe9vrier_mars_avril_mai_juin_juillet_ao\xfbt_septembre_octobre_novembre_d\xe9cembre".split("_"),monthsShort:"janv._f\xe9vr._mars_avr._mai_juin_juil._ao\xfbt_sept._oct._nov._d\xe9c.".split("_"),monthsParseExact:!0,weekdays:"dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi".split("_"),weekdaysShort:"dim._lun._mar._mer._jeu._ven._sam.".split("_"),weekdaysMin:"di_lu_ma_me_je_ve_sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[Aujourd\u2019hui \xe0] LT",nextDay:"[Demain \xe0] LT",nextWeek:"dddd [\xe0] LT",lastDay:"[Hier \xe0] LT",lastWeek:"dddd [dernier \xe0] LT",sameElse:"L"},relativeTime:{future:"dans %s",past:"il y a %s",s:"quelques secondes",ss:"%d secondes",m:"une minute",mm:"%d minutes",h:"une heure",hh:"%d heures",d:"un jour",dd:"%d jours",M:"un mois",MM:"%d mois",y:"un an",yy:"%d ans"},dayOfMonthOrdinalParse:/\d{1,2}(er|e)/,ordinal:function(e,a){switch(a){default:case"M":case"Q":case"D":case"DDD":case"d":return e+(1===e?"er":"e");case"w":case"W":return e+(1===e?"re":"e")}}}),l.defineLocale("fr-ch",{months:"janvier_f\xe9vrier_mars_avril_mai_juin_juillet_ao\xfbt_septembre_octobre_novembre_d\xe9cembre".split("_"),monthsShort:"janv._f\xe9vr._mars_avr._mai_juin_juil._ao\xfbt_sept._oct._nov._d\xe9c.".split("_"),monthsParseExact:!0,weekdays:"dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi".split("_"),weekdaysShort:"dim._lun._mar._mer._jeu._ven._sam.".split("_"),weekdaysMin:"di_lu_ma_me_je_ve_sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[Aujourd\u2019hui \xe0] LT",nextDay:"[Demain \xe0] LT",nextWeek:"dddd [\xe0] LT",lastDay:"[Hier \xe0] LT",lastWeek:"dddd [dernier \xe0] LT",sameElse:"L"},relativeTime:{future:"dans %s",past:"il y a %s",s:"quelques secondes",ss:"%d secondes",m:"une minute",mm:"%d minutes",h:"une heure",hh:"%d heures",d:"un jour",dd:"%d jours",M:"un mois",MM:"%d mois",y:"un an",yy:"%d ans"},dayOfMonthOrdinalParse:/\d{1,2}(er|e)/,ordinal:function(e,a){switch(a){default:case"M":case"Q":case"D":case"DDD":case"d":return e+(1===e?"er":"e");case"w":case"W":return e+(1===e?"re":"e")}},week:{dow:1,doy:4}}),l.defineLocale("fr",{months:"janvier_f\xe9vrier_mars_avril_mai_juin_juillet_ao\xfbt_septembre_octobre_novembre_d\xe9cembre".split("_"),monthsShort:"janv._f\xe9vr._mars_avr._mai_juin_juil._ao\xfbt_sept._oct._nov._d\xe9c.".split("_"),monthsParseExact:!0,weekdays:"dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi".split("_"),weekdaysShort:"dim._lun._mar._mer._jeu._ven._sam.".split("_"),weekdaysMin:"di_lu_ma_me_je_ve_sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[Aujourd\u2019hui \xe0] LT",nextDay:"[Demain \xe0] LT",nextWeek:"dddd [\xe0] LT",lastDay:"[Hier \xe0] LT",lastWeek:"dddd [dernier \xe0] LT",sameElse:"L"},relativeTime:{future:"dans %s",past:"il y a %s",s:"quelques secondes",ss:"%d secondes",m:"une minute",mm:"%d minutes",h:"une heure",hh:"%d heures",d:"un jour",dd:"%d jours",M:"un mois",MM:"%d mois",y:"un an",yy:"%d ans"},dayOfMonthOrdinalParse:/\d{1,2}(er|)/,ordinal:function(e,a){switch(a){case"D":return e+(1===e?"er":"");default:case"M":case"Q":case"DDD":case"d":return e+(1===e?"er":"e");case"w":case"W":return e+(1===e?"re":"e")}},week:{dow:1,doy:4}});var Ws="jan._feb._mrt._apr._mai_jun._jul._aug._sep._okt._nov._des.".split("_"),Es="jan_feb_mrt_apr_mai_jun_jul_aug_sep_okt_nov_des".split("_");l.defineLocale("fy",{months:"jannewaris_febrewaris_maart_april_maaie_juny_july_augustus_septimber_oktober_novimber_desimber".split("_"),monthsShort:function(e,a){return e?/-MMM-/.test(a)?Es[e.month()]:Ws[e.month()]:Ws},monthsParseExact:!0,weekdays:"snein_moandei_tiisdei_woansdei_tongersdei_freed_sneon".split("_"),weekdaysShort:"si._mo._ti._wo._to._fr._so.".split("_"),weekdaysMin:"Si_Mo_Ti_Wo_To_Fr_So".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD-MM-YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[hjoed om] LT",nextDay:"[moarn om] LT",nextWeek:"dddd [om] LT",lastDay:"[juster om] LT",lastWeek:"[\xf4fr\xfbne] dddd [om] LT",sameElse:"L"},relativeTime:{future:"oer %s",past:"%s lyn",s:"in pear sekonden",ss:"%d sekonden",m:"ien min\xfat",mm:"%d minuten",h:"ien oere",hh:"%d oeren",d:"ien dei",dd:"%d dagen",M:"ien moanne",MM:"%d moannen",y:"ien jier",yy:"%d jierren"},dayOfMonthOrdinalParse:/\d{1,2}(ste|de)/,ordinal:function(e){return e+(1===e||8===e||20<=e?"ste":"de")},week:{dow:1,doy:4}});function As(e,a,t,s){var n={s:["thodde secondanim","thodde second"],ss:[e+" secondanim",e+" second"],m:["eka mintan","ek minute"],mm:[e+" mintanim",e+" mintam"],h:["eka horan","ek hor"],hh:[e+" horanim",e+" horam"],d:["eka disan","ek dis"],dd:[e+" disanim",e+" dis"],M:["eka mhoinean","ek mhoino"],MM:[e+" mhoineanim",e+" mhoine"],y:["eka vorsan","ek voros"],yy:[e+" vorsanim",e+" vorsam"]};return a?n[t][0]:n[t][1]}l.defineLocale("gd",{months:["Am Faoilleach","An Gearran","Am M\xe0rt","An Giblean","An C\xe8itean","An t-\xd2gmhios","An t-Iuchar","An L\xf9nastal","An t-Sultain","An D\xe0mhair","An t-Samhain","An D\xf9bhlachd"],monthsShort:["Faoi","Gear","M\xe0rt","Gibl","C\xe8it","\xd2gmh","Iuch","L\xf9n","Sult","D\xe0mh","Samh","D\xf9bh"],monthsParseExact:!0,weekdays:["Did\xf2mhnaich","Diluain","Dim\xe0irt","Diciadain","Diardaoin","Dihaoine","Disathairne"],weekdaysShort:["Did","Dil","Dim","Dic","Dia","Dih","Dis"],weekdaysMin:["D\xf2","Lu","M\xe0","Ci","Ar","Ha","Sa"],longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[An-diugh aig] LT",nextDay:"[A-m\xe0ireach aig] LT",nextWeek:"dddd [aig] LT",lastDay:"[An-d\xe8 aig] LT",lastWeek:"dddd [seo chaidh] [aig] LT",sameElse:"L"},relativeTime:{future:"ann an %s",past:"bho chionn %s",s:"beagan diogan",ss:"%d diogan",m:"mionaid",mm:"%d mionaidean",h:"uair",hh:"%d uairean",d:"latha",dd:"%d latha",M:"m\xecos",MM:"%d m\xecosan",y:"bliadhna",yy:"%d bliadhna"},dayOfMonthOrdinalParse:/\d{1,2}(d|na|mh)/,ordinal:function(e){return e+(1===e?"d":e%10==2?"na":"mh")},week:{dow:1,doy:4}}),l.defineLocale("gl",{months:"xaneiro_febreiro_marzo_abril_maio_xu\xf1o_xullo_agosto_setembro_outubro_novembro_decembro".split("_"),monthsShort:"xan._feb._mar._abr._mai._xu\xf1._xul._ago._set._out._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"domingo_luns_martes_m\xe9rcores_xoves_venres_s\xe1bado".split("_"),weekdaysShort:"dom._lun._mar._m\xe9r._xov._ven._s\xe1b.".split("_"),weekdaysMin:"do_lu_ma_m\xe9_xo_ve_s\xe1".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY H:mm",LLLL:"dddd, D [de] MMMM [de] YYYY H:mm"},calendar:{sameDay:function(){return"[hoxe "+(1!==this.hours()?"\xe1s":"\xe1")+"] LT"},nextDay:function(){return"[ma\xf1\xe1 "+(1!==this.hours()?"\xe1s":"\xe1")+"] LT"},nextWeek:function(){return"dddd ["+(1!==this.hours()?"\xe1s":"a")+"] LT"},lastDay:function(){return"[onte "+(1!==this.hours()?"\xe1":"a")+"] LT"},lastWeek:function(){return"[o] dddd [pasado "+(1!==this.hours()?"\xe1s":"a")+"] LT"},sameElse:"L"},relativeTime:{future:function(e){return 0===e.indexOf("un")?"n"+e:"en "+e},past:"hai %s",s:"uns segundos",ss:"%d segundos",m:"un minuto",mm:"%d minutos",h:"unha hora",hh:"%d horas",d:"un d\xeda",dd:"%d d\xedas",M:"un mes",MM:"%d meses",y:"un ano",yy:"%d anos"},dayOfMonthOrdinalParse:/\d{1,2}\xba/,ordinal:"%d\xba",week:{dow:1,doy:4}}),l.defineLocale("gom-latn",{months:"Janer_Febrer_Mars_Abril_Mai_Jun_Julai_Agost_Setembr_Otubr_Novembr_Dezembr".split("_"),monthsShort:"Jan._Feb._Mars_Abr._Mai_Jun_Jul._Ago._Set._Otu._Nov._Dez.".split("_"),monthsParseExact:!0,weekdays:"Aitar_Somar_Mongllar_Budvar_Brestar_Sukrar_Son'var".split("_"),weekdaysShort:"Ait._Som._Mon._Bud._Bre._Suk._Son.".split("_"),weekdaysMin:"Ai_Sm_Mo_Bu_Br_Su_Sn".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"A h:mm [vazta]",LTS:"A h:mm:ss [vazta]",L:"DD-MM-YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY A h:mm [vazta]",LLLL:"dddd, MMMM[achea] Do, YYYY, A h:mm [vazta]",llll:"ddd, D MMM YYYY, A h:mm [vazta]"},calendar:{sameDay:"[Aiz] LT",nextDay:"[Faleam] LT",nextWeek:"[Ieta to] dddd[,] LT",lastDay:"[Kal] LT",lastWeek:"[Fatlo] dddd[,] LT",sameElse:"L"},relativeTime:{future:"%s",past:"%s adim",s:As,ss:As,m:As,mm:As,h:As,hh:As,d:As,dd:As,M:As,MM:As,y:As,yy:As},dayOfMonthOrdinalParse:/\d{1,2}(er)/,ordinal:function(e,a){switch(a){case"D":return e+"er";default:case"M":case"Q":case"DDD":case"d":case"w":case"W":return e}},week:{dow:1,doy:4},meridiemParse:/rati|sokalli|donparam|sanje/,meridiemHour:function(e,a){return 12===e&&(e=0),"rati"===a?e<4?e:e+12:"sokalli"===a?e:"donparam"===a?12<e?e:e+12:"sanje"===a?e+12:void 0},meridiem:function(e,a,t){return e<4?"rati":e<12?"sokalli":e<16?"donparam":e<20?"sanje":"rati"}});var Fs={1:"\u0ae7",2:"\u0ae8",3:"\u0ae9",4:"\u0aea",5:"\u0aeb",6:"\u0aec",7:"\u0aed",8:"\u0aee",9:"\u0aef",0:"\u0ae6"},zs={"\u0ae7":"1","\u0ae8":"2","\u0ae9":"3","\u0aea":"4","\u0aeb":"5","\u0aec":"6","\u0aed":"7","\u0aee":"8","\u0aef":"9","\u0ae6":"0"};l.defineLocale("gu",{months:"\u0a9c\u0abe\u0aa8\u0acd\u0aaf\u0ac1\u0a86\u0ab0\u0ac0_\u0aab\u0ac7\u0aac\u0acd\u0ab0\u0ac1\u0a86\u0ab0\u0ac0_\u0aae\u0abe\u0ab0\u0acd\u0a9a_\u0a8f\u0aaa\u0acd\u0ab0\u0abf\u0ab2_\u0aae\u0ac7_\u0a9c\u0ac2\u0aa8_\u0a9c\u0ac1\u0ab2\u0abe\u0a88_\u0a91\u0a97\u0ab8\u0acd\u0a9f_\u0ab8\u0aaa\u0acd\u0a9f\u0ac7\u0aae\u0acd\u0aac\u0ab0_\u0a91\u0a95\u0acd\u0a9f\u0acd\u0aac\u0ab0_\u0aa8\u0ab5\u0ac7\u0aae\u0acd\u0aac\u0ab0_\u0aa1\u0abf\u0ab8\u0ac7\u0aae\u0acd\u0aac\u0ab0".split("_"),monthsShort:"\u0a9c\u0abe\u0aa8\u0acd\u0aaf\u0ac1._\u0aab\u0ac7\u0aac\u0acd\u0ab0\u0ac1._\u0aae\u0abe\u0ab0\u0acd\u0a9a_\u0a8f\u0aaa\u0acd\u0ab0\u0abf._\u0aae\u0ac7_\u0a9c\u0ac2\u0aa8_\u0a9c\u0ac1\u0ab2\u0abe._\u0a91\u0a97._\u0ab8\u0aaa\u0acd\u0a9f\u0ac7._\u0a91\u0a95\u0acd\u0a9f\u0acd._\u0aa8\u0ab5\u0ac7._\u0aa1\u0abf\u0ab8\u0ac7.".split("_"),monthsParseExact:!0,weekdays:"\u0ab0\u0ab5\u0abf\u0ab5\u0abe\u0ab0_\u0ab8\u0acb\u0aae\u0ab5\u0abe\u0ab0_\u0aae\u0a82\u0a97\u0ab3\u0ab5\u0abe\u0ab0_\u0aac\u0ac1\u0aa7\u0acd\u0ab5\u0abe\u0ab0_\u0a97\u0ac1\u0ab0\u0ac1\u0ab5\u0abe\u0ab0_\u0ab6\u0ac1\u0a95\u0acd\u0ab0\u0ab5\u0abe\u0ab0_\u0ab6\u0aa8\u0abf\u0ab5\u0abe\u0ab0".split("_"),weekdaysShort:"\u0ab0\u0ab5\u0abf_\u0ab8\u0acb\u0aae_\u0aae\u0a82\u0a97\u0ab3_\u0aac\u0ac1\u0aa7\u0acd_\u0a97\u0ac1\u0ab0\u0ac1_\u0ab6\u0ac1\u0a95\u0acd\u0ab0_\u0ab6\u0aa8\u0abf".split("_"),weekdaysMin:"\u0ab0_\u0ab8\u0acb_\u0aae\u0a82_\u0aac\u0ac1_\u0a97\u0ac1_\u0ab6\u0ac1_\u0ab6".split("_"),longDateFormat:{LT:"A h:mm \u0ab5\u0abe\u0a97\u0acd\u0aaf\u0ac7",LTS:"A h:mm:ss \u0ab5\u0abe\u0a97\u0acd\u0aaf\u0ac7",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm \u0ab5\u0abe\u0a97\u0acd\u0aaf\u0ac7",LLLL:"dddd, D MMMM YYYY, A h:mm \u0ab5\u0abe\u0a97\u0acd\u0aaf\u0ac7"},calendar:{sameDay:"[\u0a86\u0a9c] LT",nextDay:"[\u0a95\u0abe\u0ab2\u0ac7] LT",nextWeek:"dddd, LT",lastDay:"[\u0a97\u0a87\u0a95\u0abe\u0ab2\u0ac7] LT",lastWeek:"[\u0aaa\u0abe\u0a9b\u0ab2\u0abe] dddd, LT",sameElse:"L"},relativeTime:{future:"%s \u0aae\u0abe",past:"%s \u0aaa\u0ac7\u0ab9\u0ab2\u0abe",s:"\u0a85\u0aae\u0ac1\u0a95 \u0aaa\u0ab3\u0acb",ss:"%d \u0ab8\u0ac7\u0a95\u0a82\u0aa1",m:"\u0a8f\u0a95 \u0aae\u0abf\u0aa8\u0abf\u0a9f",mm:"%d \u0aae\u0abf\u0aa8\u0abf\u0a9f",h:"\u0a8f\u0a95 \u0a95\u0ab2\u0abe\u0a95",hh:"%d \u0a95\u0ab2\u0abe\u0a95",d:"\u0a8f\u0a95 \u0aa6\u0abf\u0ab5\u0ab8",dd:"%d \u0aa6\u0abf\u0ab5\u0ab8",M:"\u0a8f\u0a95 \u0aae\u0ab9\u0abf\u0aa8\u0acb",MM:"%d \u0aae\u0ab9\u0abf\u0aa8\u0acb",y:"\u0a8f\u0a95 \u0ab5\u0ab0\u0acd\u0ab7",yy:"%d \u0ab5\u0ab0\u0acd\u0ab7"},preparse:function(e){return e.replace(/[\u0ae7\u0ae8\u0ae9\u0aea\u0aeb\u0aec\u0aed\u0aee\u0aef\u0ae6]/g,function(e){return zs[e]})},postformat:function(e){return e.replace(/\d/g,function(e){return Fs[e]})},meridiemParse:/\u0ab0\u0abe\u0aa4|\u0aac\u0aaa\u0acb\u0ab0|\u0ab8\u0ab5\u0abe\u0ab0|\u0ab8\u0abe\u0a82\u0a9c/,meridiemHour:function(e,a){return 12===e&&(e=0),"\u0ab0\u0abe\u0aa4"===a?e<4?e:e+12:"\u0ab8\u0ab5\u0abe\u0ab0"===a?e:"\u0aac\u0aaa\u0acb\u0ab0"===a?10<=e?e:e+12:"\u0ab8\u0abe\u0a82\u0a9c"===a?e+12:void 0},meridiem:function(e,a,t){return e<4?"\u0ab0\u0abe\u0aa4":e<10?"\u0ab8\u0ab5\u0abe\u0ab0":e<17?"\u0aac\u0aaa\u0acb\u0ab0":e<20?"\u0ab8\u0abe\u0a82\u0a9c":"\u0ab0\u0abe\u0aa4"},week:{dow:0,doy:6}}),l.defineLocale("he",{months:"\u05d9\u05e0\u05d5\u05d0\u05e8_\u05e4\u05d1\u05e8\u05d5\u05d0\u05e8_\u05de\u05e8\u05e5_\u05d0\u05e4\u05e8\u05d9\u05dc_\u05de\u05d0\u05d9_\u05d9\u05d5\u05e0\u05d9_\u05d9\u05d5\u05dc\u05d9_\u05d0\u05d5\u05d2\u05d5\u05e1\u05d8_\u05e1\u05e4\u05d8\u05de\u05d1\u05e8_\u05d0\u05d5\u05e7\u05d8\u05d5\u05d1\u05e8_\u05e0\u05d5\u05d1\u05de\u05d1\u05e8_\u05d3\u05e6\u05de\u05d1\u05e8".split("_"),monthsShort:"\u05d9\u05e0\u05d5\u05f3_\u05e4\u05d1\u05e8\u05f3_\u05de\u05e8\u05e5_\u05d0\u05e4\u05e8\u05f3_\u05de\u05d0\u05d9_\u05d9\u05d5\u05e0\u05d9_\u05d9\u05d5\u05dc\u05d9_\u05d0\u05d5\u05d2\u05f3_\u05e1\u05e4\u05d8\u05f3_\u05d0\u05d5\u05e7\u05f3_\u05e0\u05d5\u05d1\u05f3_\u05d3\u05e6\u05de\u05f3".split("_"),weekdays:"\u05e8\u05d0\u05e9\u05d5\u05df_\u05e9\u05e0\u05d9_\u05e9\u05dc\u05d9\u05e9\u05d9_\u05e8\u05d1\u05d9\u05e2\u05d9_\u05d7\u05de\u05d9\u05e9\u05d9_\u05e9\u05d9\u05e9\u05d9_\u05e9\u05d1\u05ea".split("_"),weekdaysShort:"\u05d0\u05f3_\u05d1\u05f3_\u05d2\u05f3_\u05d3\u05f3_\u05d4\u05f3_\u05d5\u05f3_\u05e9\u05f3".split("_"),weekdaysMin:"\u05d0_\u05d1_\u05d2_\u05d3_\u05d4_\u05d5_\u05e9".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D [\u05d1]MMMM YYYY",LLL:"D [\u05d1]MMMM YYYY HH:mm",LLLL:"dddd, D [\u05d1]MMMM YYYY HH:mm",l:"D/M/YYYY",ll:"D MMM YYYY",lll:"D MMM YYYY HH:mm",llll:"ddd, D MMM YYYY HH:mm"},calendar:{sameDay:"[\u05d4\u05d9\u05d5\u05dd \u05d1\u05be]LT",nextDay:"[\u05de\u05d7\u05e8 \u05d1\u05be]LT",nextWeek:"dddd [\u05d1\u05e9\u05e2\u05d4] LT",lastDay:"[\u05d0\u05ea\u05de\u05d5\u05dc \u05d1\u05be]LT",lastWeek:"[\u05d1\u05d9\u05d5\u05dd] dddd [\u05d4\u05d0\u05d7\u05e8\u05d5\u05df \u05d1\u05e9\u05e2\u05d4] LT",sameElse:"L"},relativeTime:{future:"\u05d1\u05e2\u05d5\u05d3 %s",past:"\u05dc\u05e4\u05e0\u05d9 %s",s:"\u05de\u05e1\u05e4\u05e8 \u05e9\u05e0\u05d9\u05d5\u05ea",ss:"%d \u05e9\u05e0\u05d9\u05d5\u05ea",m:"\u05d3\u05e7\u05d4",mm:"%d \u05d3\u05e7\u05d5\u05ea",h:"\u05e9\u05e2\u05d4",hh:function(e){return 2===e?"\u05e9\u05e2\u05ea\u05d9\u05d9\u05dd":e+" \u05e9\u05e2\u05d5\u05ea"},d:"\u05d9\u05d5\u05dd",dd:function(e){return 2===e?"\u05d9\u05d5\u05de\u05d9\u05d9\u05dd":e+" \u05d9\u05de\u05d9\u05dd"},M:"\u05d7\u05d5\u05d3\u05e9",MM:function(e){return 2===e?"\u05d7\u05d5\u05d3\u05e9\u05d9\u05d9\u05dd":e+" \u05d7\u05d5\u05d3\u05e9\u05d9\u05dd"},y:"\u05e9\u05e0\u05d4",yy:function(e){return 2===e?"\u05e9\u05e0\u05ea\u05d9\u05d9\u05dd":e%10==0&&10!==e?e+" \u05e9\u05e0\u05d4":e+" \u05e9\u05e0\u05d9\u05dd"}},meridiemParse:/\u05d0\u05d7\u05d4"\u05e6|\u05dc\u05e4\u05e0\u05d4"\u05e6|\u05d0\u05d7\u05e8\u05d9 \u05d4\u05e6\u05d4\u05e8\u05d9\u05d9\u05dd|\u05dc\u05e4\u05e0\u05d9 \u05d4\u05e6\u05d4\u05e8\u05d9\u05d9\u05dd|\u05dc\u05e4\u05e0\u05d5\u05ea \u05d1\u05d5\u05e7\u05e8|\u05d1\u05d1\u05d5\u05e7\u05e8|\u05d1\u05e2\u05e8\u05d1/i,isPM:function(e){return/^(\u05d0\u05d7\u05d4"\u05e6|\u05d0\u05d7\u05e8\u05d9 \u05d4\u05e6\u05d4\u05e8\u05d9\u05d9\u05dd|\u05d1\u05e2\u05e8\u05d1)$/.test(e)},meridiem:function(e,a,t){return e<5?"\u05dc\u05e4\u05e0\u05d5\u05ea \u05d1\u05d5\u05e7\u05e8":e<10?"\u05d1\u05d1\u05d5\u05e7\u05e8":e<12?t?'\u05dc\u05e4\u05e0\u05d4"\u05e6':"\u05dc\u05e4\u05e0\u05d9 \u05d4\u05e6\u05d4\u05e8\u05d9\u05d9\u05dd":e<18?t?'\u05d0\u05d7\u05d4"\u05e6':"\u05d0\u05d7\u05e8\u05d9 \u05d4\u05e6\u05d4\u05e8\u05d9\u05d9\u05dd":"\u05d1\u05e2\u05e8\u05d1"}});var Js={1:"\u0967",2:"\u0968",3:"\u0969",4:"\u096a",5:"\u096b",6:"\u096c",7:"\u096d",8:"\u096e",9:"\u096f",0:"\u0966"},Ns={"\u0967":"1","\u0968":"2","\u0969":"3","\u096a":"4","\u096b":"5","\u096c":"6","\u096d":"7","\u096e":"8","\u096f":"9","\u0966":"0"};function Rs(e,a,t){var s=e+" ";switch(t){case"ss":return s+=1===e?"sekunda":2===e||3===e||4===e?"sekunde":"sekundi";case"m":return a?"jedna minuta":"jedne minute";case"mm":return s+=1===e?"minuta":2===e||3===e||4===e?"minute":"minuta";case"h":return a?"jedan sat":"jednog sata";case"hh":return s+=1===e?"sat":2===e||3===e||4===e?"sata":"sati";case"dd":return s+=1===e?"dan":"dana";case"MM":return s+=1===e?"mjesec":2===e||3===e||4===e?"mjeseca":"mjeseci";case"yy":return s+=1===e?"godina":2===e||3===e||4===e?"godine":"godina"}}l.defineLocale("hi",{months:"\u091c\u0928\u0935\u0930\u0940_\u092b\u093c\u0930\u0935\u0930\u0940_\u092e\u093e\u0930\u094d\u091a_\u0905\u092a\u094d\u0930\u0948\u0932_\u092e\u0908_\u091c\u0942\u0928_\u091c\u0941\u0932\u093e\u0908_\u0905\u0917\u0938\u094d\u0924_\u0938\u093f\u0924\u092e\u094d\u092c\u0930_\u0905\u0915\u094d\u091f\u0942\u092c\u0930_\u0928\u0935\u092e\u094d\u092c\u0930_\u0926\u093f\u0938\u092e\u094d\u092c\u0930".split("_"),monthsShort:"\u091c\u0928._\u092b\u093c\u0930._\u092e\u093e\u0930\u094d\u091a_\u0905\u092a\u094d\u0930\u0948._\u092e\u0908_\u091c\u0942\u0928_\u091c\u0941\u0932._\u0905\u0917._\u0938\u093f\u0924._\u0905\u0915\u094d\u091f\u0942._\u0928\u0935._\u0926\u093f\u0938.".split("_"),monthsParseExact:!0,weekdays:"\u0930\u0935\u093f\u0935\u093e\u0930_\u0938\u094b\u092e\u0935\u093e\u0930_\u092e\u0902\u0917\u0932\u0935\u093e\u0930_\u092c\u0941\u0927\u0935\u093e\u0930_\u0917\u0941\u0930\u0942\u0935\u093e\u0930_\u0936\u0941\u0915\u094d\u0930\u0935\u093e\u0930_\u0936\u0928\u093f\u0935\u093e\u0930".split("_"),weekdaysShort:"\u0930\u0935\u093f_\u0938\u094b\u092e_\u092e\u0902\u0917\u0932_\u092c\u0941\u0927_\u0917\u0941\u0930\u0942_\u0936\u0941\u0915\u094d\u0930_\u0936\u0928\u093f".split("_"),weekdaysMin:"\u0930_\u0938\u094b_\u092e\u0902_\u092c\u0941_\u0917\u0941_\u0936\u0941_\u0936".split("_"),longDateFormat:{LT:"A h:mm \u092c\u091c\u0947",LTS:"A h:mm:ss \u092c\u091c\u0947",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm \u092c\u091c\u0947",LLLL:"dddd, D MMMM YYYY, A h:mm \u092c\u091c\u0947"},calendar:{sameDay:"[\u0906\u091c] LT",nextDay:"[\u0915\u0932] LT",nextWeek:"dddd, LT",lastDay:"[\u0915\u0932] LT",lastWeek:"[\u092a\u093f\u091b\u0932\u0947] dddd, LT",sameElse:"L"},relativeTime:{future:"%s \u092e\u0947\u0902",past:"%s \u092a\u0939\u0932\u0947",s:"\u0915\u0941\u091b \u0939\u0940 \u0915\u094d\u0937\u0923",ss:"%d \u0938\u0947\u0915\u0902\u0921",m:"\u090f\u0915 \u092e\u093f\u0928\u091f",mm:"%d \u092e\u093f\u0928\u091f",h:"\u090f\u0915 \u0918\u0902\u091f\u093e",hh:"%d \u0918\u0902\u091f\u0947",d:"\u090f\u0915 \u0926\u093f\u0928",dd:"%d \u0926\u093f\u0928",M:"\u090f\u0915 \u092e\u0939\u0940\u0928\u0947",MM:"%d \u092e\u0939\u0940\u0928\u0947",y:"\u090f\u0915 \u0935\u0930\u094d\u0937",yy:"%d \u0935\u0930\u094d\u0937"},preparse:function(e){return e.replace(/[\u0967\u0968\u0969\u096a\u096b\u096c\u096d\u096e\u096f\u0966]/g,function(e){return Ns[e]})},postformat:function(e){return e.replace(/\d/g,function(e){return Js[e]})},meridiemParse:/\u0930\u093e\u0924|\u0938\u0941\u092c\u0939|\u0926\u094b\u092a\u0939\u0930|\u0936\u093e\u092e/,meridiemHour:function(e,a){return 12===e&&(e=0),"\u0930\u093e\u0924"===a?e<4?e:e+12:"\u0938\u0941\u092c\u0939"===a?e:"\u0926\u094b\u092a\u0939\u0930"===a?10<=e?e:e+12:"\u0936\u093e\u092e"===a?e+12:void 0},meridiem:function(e,a,t){return e<4?"\u0930\u093e\u0924":e<10?"\u0938\u0941\u092c\u0939":e<17?"\u0926\u094b\u092a\u0939\u0930":e<20?"\u0936\u093e\u092e":"\u0930\u093e\u0924"},week:{dow:0,doy:6}}),l.defineLocale("hr",{months:{format:"sije\u010dnja_velja\u010de_o\u017eujka_travnja_svibnja_lipnja_srpnja_kolovoza_rujna_listopada_studenoga_prosinca".split("_"),standalone:"sije\u010danj_velja\u010da_o\u017eujak_travanj_svibanj_lipanj_srpanj_kolovoz_rujan_listopad_studeni_prosinac".split("_")},monthsShort:"sij._velj._o\u017eu._tra._svi._lip._srp._kol._ruj._lis._stu._pro.".split("_"),monthsParseExact:!0,weekdays:"nedjelja_ponedjeljak_utorak_srijeda_\u010detvrtak_petak_subota".split("_"),weekdaysShort:"ned._pon._uto._sri._\u010det._pet._sub.".split("_"),weekdaysMin:"ne_po_ut_sr_\u010de_pe_su".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[danas u] LT",nextDay:"[sutra u] LT",nextWeek:function(){switch(this.day()){case 0:return"[u] [nedjelju] [u] LT";case 3:return"[u] [srijedu] [u] LT";case 6:return"[u] [subotu] [u] LT";case 1:case 2:case 4:case 5:return"[u] dddd [u] LT"}},lastDay:"[ju\u010der u] LT",lastWeek:function(){switch(this.day()){case 0:case 3:return"[pro\u0161lu] dddd [u] LT";case 6:return"[pro\u0161le] [subote] [u] LT";case 1:case 2:case 4:case 5:return"[pro\u0161li] dddd [u] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"prije %s",s:"par sekundi",ss:Rs,m:Rs,mm:Rs,h:Rs,hh:Rs,d:"dan",dd:Rs,M:"mjesec",MM:Rs,y:"godinu",yy:Rs},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}});var Is="vas\xe1rnap h\xe9tf\u0151n kedden szerd\xe1n cs\xfct\xf6rt\xf6k\xf6n p\xe9nteken szombaton".split(" ");function Cs(e,a,t,s){var n=e;switch(t){case"s":return s||a?"n\xe9h\xe1ny m\xe1sodperc":"n\xe9h\xe1ny m\xe1sodperce";case"ss":return n+(s||a)?" m\xe1sodperc":" m\xe1sodperce";case"m":return"egy"+(s||a?" perc":" perce");case"mm":return n+(s||a?" perc":" perce");case"h":return"egy"+(s||a?" \xf3ra":" \xf3r\xe1ja");case"hh":return n+(s||a?" \xf3ra":" \xf3r\xe1ja");case"d":return"egy"+(s||a?" nap":" napja");case"dd":return n+(s||a?" nap":" napja");case"M":return"egy"+(s||a?" h\xf3nap":" h\xf3napja");case"MM":return n+(s||a?" h\xf3nap":" h\xf3napja");case"y":return"egy"+(s||a?" \xe9v":" \xe9ve");case"yy":return n+(s||a?" \xe9v":" \xe9ve")}return""}function Gs(e){return(e?"":"[m\xfalt] ")+"["+Is[this.day()]+"] LT[-kor]"}function Us(e){return e%100==11||e%10!=1}function Vs(e,a,t,s){var n=e+" ";switch(t){case"s":return a||s?"nokkrar sek\xfandur":"nokkrum sek\xfandum";case"ss":return Us(e)?n+(a||s?"sek\xfandur":"sek\xfandum"):n+"sek\xfanda";case"m":return a?"m\xedn\xfata":"m\xedn\xfatu";case"mm":return Us(e)?n+(a||s?"m\xedn\xfatur":"m\xedn\xfatum"):a?n+"m\xedn\xfata":n+"m\xedn\xfatu";case"hh":return Us(e)?n+(a||s?"klukkustundir":"klukkustundum"):n+"klukkustund";case"d":return a?"dagur":s?"dag":"degi";case"dd":return Us(e)?a?n+"dagar":n+(s?"daga":"d\xf6gum"):a?n+"dagur":n+(s?"dag":"degi");case"M":return a?"m\xe1nu\xf0ur":s?"m\xe1nu\xf0":"m\xe1nu\xf0i";case"MM":return Us(e)?a?n+"m\xe1nu\xf0ir":n+(s?"m\xe1nu\xf0i":"m\xe1nu\xf0um"):a?n+"m\xe1nu\xf0ur":n+(s?"m\xe1nu\xf0":"m\xe1nu\xf0i");case"y":return a||s?"\xe1r":"\xe1ri";case"yy":return Us(e)?n+(a||s?"\xe1r":"\xe1rum"):n+(a||s?"\xe1r":"\xe1ri")}}l.defineLocale("hu",{months:"janu\xe1r_febru\xe1r_m\xe1rcius_\xe1prilis_m\xe1jus_j\xfanius_j\xfalius_augusztus_szeptember_okt\xf3ber_november_december".split("_"),monthsShort:"jan_feb_m\xe1rc_\xe1pr_m\xe1j_j\xfan_j\xfal_aug_szept_okt_nov_dec".split("_"),weekdays:"vas\xe1rnap_h\xe9tf\u0151_kedd_szerda_cs\xfct\xf6rt\xf6k_p\xe9ntek_szombat".split("_"),weekdaysShort:"vas_h\xe9t_kedd_sze_cs\xfct_p\xe9n_szo".split("_"),weekdaysMin:"v_h_k_sze_cs_p_szo".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"YYYY.MM.DD.",LL:"YYYY. MMMM D.",LLL:"YYYY. MMMM D. H:mm",LLLL:"YYYY. MMMM D., dddd H:mm"},meridiemParse:/de|du/i,isPM:function(e){return"u"===e.charAt(1).toLowerCase()},meridiem:function(e,a,t){return e<12?!0===t?"de":"DE":!0===t?"du":"DU"},calendar:{sameDay:"[ma] LT[-kor]",nextDay:"[holnap] LT[-kor]",nextWeek:function(){return Gs.call(this,!0)},lastDay:"[tegnap] LT[-kor]",lastWeek:function(){return Gs.call(this,!1)},sameElse:"L"},relativeTime:{future:"%s m\xfalva",past:"%s",s:Cs,ss:Cs,m:Cs,mm:Cs,h:Cs,hh:Cs,d:Cs,dd:Cs,M:Cs,MM:Cs,y:Cs,yy:Cs},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}}),l.defineLocale("hy-am",{months:{format:"\u0570\u0578\u0582\u0576\u057e\u0561\u0580\u056b_\u0583\u0565\u057f\u0580\u057e\u0561\u0580\u056b_\u0574\u0561\u0580\u057f\u056b_\u0561\u057a\u0580\u056b\u056c\u056b_\u0574\u0561\u0575\u056b\u057d\u056b_\u0570\u0578\u0582\u0576\u056b\u057d\u056b_\u0570\u0578\u0582\u056c\u056b\u057d\u056b_\u0585\u0563\u0578\u057d\u057f\u0578\u057d\u056b_\u057d\u0565\u057a\u057f\u0565\u0574\u0562\u0565\u0580\u056b_\u0570\u0578\u056f\u057f\u0565\u0574\u0562\u0565\u0580\u056b_\u0576\u0578\u0575\u0565\u0574\u0562\u0565\u0580\u056b_\u0564\u0565\u056f\u057f\u0565\u0574\u0562\u0565\u0580\u056b".split("_"),standalone:"\u0570\u0578\u0582\u0576\u057e\u0561\u0580_\u0583\u0565\u057f\u0580\u057e\u0561\u0580_\u0574\u0561\u0580\u057f_\u0561\u057a\u0580\u056b\u056c_\u0574\u0561\u0575\u056b\u057d_\u0570\u0578\u0582\u0576\u056b\u057d_\u0570\u0578\u0582\u056c\u056b\u057d_\u0585\u0563\u0578\u057d\u057f\u0578\u057d_\u057d\u0565\u057a\u057f\u0565\u0574\u0562\u0565\u0580_\u0570\u0578\u056f\u057f\u0565\u0574\u0562\u0565\u0580_\u0576\u0578\u0575\u0565\u0574\u0562\u0565\u0580_\u0564\u0565\u056f\u057f\u0565\u0574\u0562\u0565\u0580".split("_")},monthsShort:"\u0570\u0576\u057e_\u0583\u057f\u0580_\u0574\u0580\u057f_\u0561\u057a\u0580_\u0574\u0575\u057d_\u0570\u0576\u057d_\u0570\u056c\u057d_\u0585\u0563\u057d_\u057d\u057a\u057f_\u0570\u056f\u057f_\u0576\u0574\u0562_\u0564\u056f\u057f".split("_"),weekdays:"\u056f\u056b\u0580\u0561\u056f\u056b_\u0565\u0580\u056f\u0578\u0582\u0577\u0561\u0562\u0569\u056b_\u0565\u0580\u0565\u0584\u0577\u0561\u0562\u0569\u056b_\u0579\u0578\u0580\u0565\u0584\u0577\u0561\u0562\u0569\u056b_\u0570\u056b\u0576\u0563\u0577\u0561\u0562\u0569\u056b_\u0578\u0582\u0580\u0562\u0561\u0569_\u0577\u0561\u0562\u0561\u0569".split("_"),weekdaysShort:"\u056f\u0580\u056f_\u0565\u0580\u056f_\u0565\u0580\u0584_\u0579\u0580\u0584_\u0570\u0576\u0563_\u0578\u0582\u0580\u0562_\u0577\u0562\u0569".split("_"),weekdaysMin:"\u056f\u0580\u056f_\u0565\u0580\u056f_\u0565\u0580\u0584_\u0579\u0580\u0584_\u0570\u0576\u0563_\u0578\u0582\u0580\u0562_\u0577\u0562\u0569".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY \u0569.",LLL:"D MMMM YYYY \u0569., HH:mm",LLLL:"dddd, D MMMM YYYY \u0569., HH:mm"},calendar:{sameDay:"[\u0561\u0575\u057d\u0585\u0580] LT",nextDay:"[\u057e\u0561\u0572\u0568] LT",lastDay:"[\u0565\u0580\u0565\u056f] LT",nextWeek:function(){return"dddd [\u0585\u0580\u0568 \u056a\u0561\u0574\u0568] LT"},lastWeek:function(){return"[\u0561\u0576\u0581\u0561\u056e] dddd [\u0585\u0580\u0568 \u056a\u0561\u0574\u0568] LT"},sameElse:"L"},relativeTime:{future:"%s \u0570\u0565\u057f\u0578",past:"%s \u0561\u057c\u0561\u057b",s:"\u0574\u056b \u0584\u0561\u0576\u056b \u057e\u0561\u0575\u0580\u056f\u0575\u0561\u0576",ss:"%d \u057e\u0561\u0575\u0580\u056f\u0575\u0561\u0576",m:"\u0580\u0578\u057a\u0565",mm:"%d \u0580\u0578\u057a\u0565",h:"\u056a\u0561\u0574",hh:"%d \u056a\u0561\u0574",d:"\u0585\u0580",dd:"%d \u0585\u0580",M:"\u0561\u0574\u056b\u057d",MM:"%d \u0561\u0574\u056b\u057d",y:"\u057f\u0561\u0580\u056b",yy:"%d \u057f\u0561\u0580\u056b"},meridiemParse:/\u0563\u056b\u0577\u0565\u0580\u057e\u0561|\u0561\u057c\u0561\u057e\u0578\u057f\u057e\u0561|\u0581\u0565\u0580\u0565\u056f\u057e\u0561|\u0565\u0580\u0565\u056f\u0578\u0575\u0561\u0576/,isPM:function(e){return/^(\u0581\u0565\u0580\u0565\u056f\u057e\u0561|\u0565\u0580\u0565\u056f\u0578\u0575\u0561\u0576)$/.test(e)},meridiem:function(e){return e<4?"\u0563\u056b\u0577\u0565\u0580\u057e\u0561":e<12?"\u0561\u057c\u0561\u057e\u0578\u057f\u057e\u0561":e<17?"\u0581\u0565\u0580\u0565\u056f\u057e\u0561":"\u0565\u0580\u0565\u056f\u0578\u0575\u0561\u0576"},dayOfMonthOrdinalParse:/\d{1,2}|\d{1,2}-(\u056b\u0576|\u0580\u0564)/,ordinal:function(e,a){switch(a){case"DDD":case"w":case"W":case"DDDo":return 1===e?e+"-\u056b\u0576":e+"-\u0580\u0564";default:return e}},week:{dow:1,doy:7}}),l.defineLocale("id",{months:"Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_November_Desember".split("_"),monthsShort:"Jan_Feb_Mar_Apr_Mei_Jun_Jul_Agt_Sep_Okt_Nov_Des".split("_"),weekdays:"Minggu_Senin_Selasa_Rabu_Kamis_Jumat_Sabtu".split("_"),weekdaysShort:"Min_Sen_Sel_Rab_Kam_Jum_Sab".split("_"),weekdaysMin:"Mg_Sn_Sl_Rb_Km_Jm_Sb".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [pukul] HH.mm",LLLL:"dddd, D MMMM YYYY [pukul] HH.mm"},meridiemParse:/pagi|siang|sore|malam/,meridiemHour:function(e,a){return 12===e&&(e=0),"pagi"===a?e:"siang"===a?11<=e?e:e+12:"sore"===a||"malam"===a?e+12:void 0},meridiem:function(e,a,t){return e<11?"pagi":e<15?"siang":e<19?"sore":"malam"},calendar:{sameDay:"[Hari ini pukul] LT",nextDay:"[Besok pukul] LT",nextWeek:"dddd [pukul] LT",lastDay:"[Kemarin pukul] LT",lastWeek:"dddd [lalu pukul] LT",sameElse:"L"},relativeTime:{future:"dalam %s",past:"%s yang lalu",s:"beberapa detik",ss:"%d detik",m:"semenit",mm:"%d menit",h:"sejam",hh:"%d jam",d:"sehari",dd:"%d hari",M:"sebulan",MM:"%d bulan",y:"setahun",yy:"%d tahun"},week:{dow:1,doy:7}}),l.defineLocale("is",{months:"jan\xfaar_febr\xfaar_mars_apr\xedl_ma\xed_j\xfan\xed_j\xfal\xed_\xe1g\xfast_september_okt\xf3ber_n\xf3vember_desember".split("_"),monthsShort:"jan_feb_mar_apr_ma\xed_j\xfan_j\xfal_\xe1g\xfa_sep_okt_n\xf3v_des".split("_"),weekdays:"sunnudagur_m\xe1nudagur_\xferi\xf0judagur_mi\xf0vikudagur_fimmtudagur_f\xf6studagur_laugardagur".split("_"),weekdaysShort:"sun_m\xe1n_\xferi_mi\xf0_fim_f\xf6s_lau".split("_"),weekdaysMin:"Su_M\xe1_\xder_Mi_Fi_F\xf6_La".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY [kl.] H:mm",LLLL:"dddd, D. MMMM YYYY [kl.] H:mm"},calendar:{sameDay:"[\xed dag kl.] LT",nextDay:"[\xe1 morgun kl.] LT",nextWeek:"dddd [kl.] LT",lastDay:"[\xed g\xe6r kl.] LT",lastWeek:"[s\xed\xf0asta] dddd [kl.] LT",sameElse:"L"},relativeTime:{future:"eftir %s",past:"fyrir %s s\xed\xf0an",s:Vs,ss:Vs,m:Vs,mm:Vs,h:"klukkustund",hh:Vs,d:Vs,dd:Vs,M:Vs,MM:Vs,y:Vs,yy:Vs},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}}),l.defineLocale("it",{months:"gennaio_febbraio_marzo_aprile_maggio_giugno_luglio_agosto_settembre_ottobre_novembre_dicembre".split("_"),monthsShort:"gen_feb_mar_apr_mag_giu_lug_ago_set_ott_nov_dic".split("_"),weekdays:"domenica_luned\xec_marted\xec_mercoled\xec_gioved\xec_venerd\xec_sabato".split("_"),weekdaysShort:"dom_lun_mar_mer_gio_ven_sab".split("_"),weekdaysMin:"do_lu_ma_me_gi_ve_sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[Oggi alle] LT",nextDay:"[Domani alle] LT",nextWeek:"dddd [alle] LT",lastDay:"[Ieri alle] LT",lastWeek:function(){switch(this.day()){case 0:return"[la scorsa] dddd [alle] LT";default:return"[lo scorso] dddd [alle] LT"}},sameElse:"L"},relativeTime:{future:function(e){return(/^[0-9].+$/.test(e)?"tra":"in")+" "+e},past:"%s fa",s:"alcuni secondi",ss:"%d secondi",m:"un minuto",mm:"%d minuti",h:"un'ora",hh:"%d ore",d:"un giorno",dd:"%d giorni",M:"un mese",MM:"%d mesi",y:"un anno",yy:"%d anni"},dayOfMonthOrdinalParse:/\d{1,2}\xba/,ordinal:"%d\xba",week:{dow:1,doy:4}}),l.defineLocale("ja",{months:"1\u6708_2\u6708_3\u6708_4\u6708_5\u6708_6\u6708_7\u6708_8\u6708_9\u6708_10\u6708_11\u6708_12\u6708".split("_"),monthsShort:"1\u6708_2\u6708_3\u6708_4\u6708_5\u6708_6\u6708_7\u6708_8\u6708_9\u6708_10\u6708_11\u6708_12\u6708".split("_"),weekdays:"\u65e5\u66dc\u65e5_\u6708\u66dc\u65e5_\u706b\u66dc\u65e5_\u6c34\u66dc\u65e5_\u6728\u66dc\u65e5_\u91d1\u66dc\u65e5_\u571f\u66dc\u65e5".split("_"),weekdaysShort:"\u65e5_\u6708_\u706b_\u6c34_\u6728_\u91d1_\u571f".split("_"),weekdaysMin:"\u65e5_\u6708_\u706b_\u6c34_\u6728_\u91d1_\u571f".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY/MM/DD",LL:"YYYY\u5e74M\u6708D\u65e5",LLL:"YYYY\u5e74M\u6708D\u65e5 HH:mm",LLLL:"YYYY\u5e74M\u6708D\u65e5 dddd HH:mm",l:"YYYY/MM/DD",ll:"YYYY\u5e74M\u6708D\u65e5",lll:"YYYY\u5e74M\u6708D\u65e5 HH:mm",llll:"YYYY\u5e74M\u6708D\u65e5(ddd) HH:mm"},meridiemParse:/\u5348\u524d|\u5348\u5f8c/i,isPM:function(e){return"\u5348\u5f8c"===e},meridiem:function(e,a,t){return e<12?"\u5348\u524d":"\u5348\u5f8c"},calendar:{sameDay:"[\u4eca\u65e5] LT",nextDay:"[\u660e\u65e5] LT",nextWeek:function(e){return e.week()<this.week()?"[\u6765\u9031]dddd LT":"dddd LT"},lastDay:"[\u6628\u65e5] LT",lastWeek:function(e){return this.week()<e.week()?"[\u5148\u9031]dddd LT":"dddd LT"},sameElse:"L"},dayOfMonthOrdinalParse:/\d{1,2}\u65e5/,ordinal:function(e,a){switch(a){case"d":case"D":case"DDD":return e+"\u65e5";default:return e}},relativeTime:{future:"%s\u5f8c",past:"%s\u524d",s:"\u6570\u79d2",ss:"%d\u79d2",m:"1\u5206",mm:"%d\u5206",h:"1\u6642\u9593",hh:"%d\u6642\u9593",d:"1\u65e5",dd:"%d\u65e5",M:"1\u30f6\u6708",MM:"%d\u30f6\u6708",y:"1\u5e74",yy:"%d\u5e74"}}),l.defineLocale("jv",{months:"Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_Nopember_Desember".split("_"),monthsShort:"Jan_Feb_Mar_Apr_Mei_Jun_Jul_Ags_Sep_Okt_Nop_Des".split("_"),weekdays:"Minggu_Senen_Seloso_Rebu_Kemis_Jemuwah_Septu".split("_"),weekdaysShort:"Min_Sen_Sel_Reb_Kem_Jem_Sep".split("_"),weekdaysMin:"Mg_Sn_Sl_Rb_Km_Jm_Sp".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [pukul] HH.mm",LLLL:"dddd, D MMMM YYYY [pukul] HH.mm"},meridiemParse:/enjing|siyang|sonten|ndalu/,meridiemHour:function(e,a){return 12===e&&(e=0),"enjing"===a?e:"siyang"===a?11<=e?e:e+12:"sonten"===a||"ndalu"===a?e+12:void 0},meridiem:function(e,a,t){return e<11?"enjing":e<15?"siyang":e<19?"sonten":"ndalu"},calendar:{sameDay:"[Dinten puniko pukul] LT",nextDay:"[Mbenjang pukul] LT",nextWeek:"dddd [pukul] LT",lastDay:"[Kala wingi pukul] LT",lastWeek:"dddd [kepengker pukul] LT",sameElse:"L"},relativeTime:{future:"wonten ing %s",past:"%s ingkang kepengker",s:"sawetawis detik",ss:"%d detik",m:"setunggal menit",mm:"%d menit",h:"setunggal jam",hh:"%d jam",d:"sedinten",dd:"%d dinten",M:"sewulan",MM:"%d wulan",y:"setaun",yy:"%d taun"},week:{dow:1,doy:7}}),l.defineLocale("ka",{months:{standalone:"\u10d8\u10d0\u10dc\u10d5\u10d0\u10e0\u10d8_\u10d7\u10d4\u10d1\u10d4\u10e0\u10d5\u10d0\u10da\u10d8_\u10db\u10d0\u10e0\u10e2\u10d8_\u10d0\u10de\u10e0\u10d8\u10da\u10d8_\u10db\u10d0\u10d8\u10e1\u10d8_\u10d8\u10d5\u10dc\u10d8\u10e1\u10d8_\u10d8\u10d5\u10da\u10d8\u10e1\u10d8_\u10d0\u10d2\u10d5\u10d8\u10e1\u10e2\u10dd_\u10e1\u10d4\u10e5\u10e2\u10d4\u10db\u10d1\u10d4\u10e0\u10d8_\u10dd\u10e5\u10e2\u10dd\u10db\u10d1\u10d4\u10e0\u10d8_\u10dc\u10dd\u10d4\u10db\u10d1\u10d4\u10e0\u10d8_\u10d3\u10d4\u10d9\u10d4\u10db\u10d1\u10d4\u10e0\u10d8".split("_"),format:"\u10d8\u10d0\u10dc\u10d5\u10d0\u10e0\u10e1_\u10d7\u10d4\u10d1\u10d4\u10e0\u10d5\u10d0\u10da\u10e1_\u10db\u10d0\u10e0\u10e2\u10e1_\u10d0\u10de\u10e0\u10d8\u10da\u10d8\u10e1_\u10db\u10d0\u10d8\u10e1\u10e1_\u10d8\u10d5\u10dc\u10d8\u10e1\u10e1_\u10d8\u10d5\u10da\u10d8\u10e1\u10e1_\u10d0\u10d2\u10d5\u10d8\u10e1\u10e2\u10e1_\u10e1\u10d4\u10e5\u10e2\u10d4\u10db\u10d1\u10d4\u10e0\u10e1_\u10dd\u10e5\u10e2\u10dd\u10db\u10d1\u10d4\u10e0\u10e1_\u10dc\u10dd\u10d4\u10db\u10d1\u10d4\u10e0\u10e1_\u10d3\u10d4\u10d9\u10d4\u10db\u10d1\u10d4\u10e0\u10e1".split("_")},monthsShort:"\u10d8\u10d0\u10dc_\u10d7\u10d4\u10d1_\u10db\u10d0\u10e0_\u10d0\u10de\u10e0_\u10db\u10d0\u10d8_\u10d8\u10d5\u10dc_\u10d8\u10d5\u10da_\u10d0\u10d2\u10d5_\u10e1\u10d4\u10e5_\u10dd\u10e5\u10e2_\u10dc\u10dd\u10d4_\u10d3\u10d4\u10d9".split("_"),weekdays:{standalone:"\u10d9\u10d5\u10d8\u10e0\u10d0_\u10dd\u10e0\u10e8\u10d0\u10d1\u10d0\u10d7\u10d8_\u10e1\u10d0\u10db\u10e8\u10d0\u10d1\u10d0\u10d7\u10d8_\u10dd\u10d7\u10ee\u10e8\u10d0\u10d1\u10d0\u10d7\u10d8_\u10ee\u10e3\u10d7\u10e8\u10d0\u10d1\u10d0\u10d7\u10d8_\u10de\u10d0\u10e0\u10d0\u10e1\u10d9\u10d4\u10d5\u10d8_\u10e8\u10d0\u10d1\u10d0\u10d7\u10d8".split("_"),format:"\u10d9\u10d5\u10d8\u10e0\u10d0\u10e1_\u10dd\u10e0\u10e8\u10d0\u10d1\u10d0\u10d7\u10e1_\u10e1\u10d0\u10db\u10e8\u10d0\u10d1\u10d0\u10d7\u10e1_\u10dd\u10d7\u10ee\u10e8\u10d0\u10d1\u10d0\u10d7\u10e1_\u10ee\u10e3\u10d7\u10e8\u10d0\u10d1\u10d0\u10d7\u10e1_\u10de\u10d0\u10e0\u10d0\u10e1\u10d9\u10d4\u10d5\u10e1_\u10e8\u10d0\u10d1\u10d0\u10d7\u10e1".split("_"),isFormat:/(\u10ec\u10d8\u10dc\u10d0|\u10e8\u10d4\u10db\u10d3\u10d4\u10d2)/},weekdaysShort:"\u10d9\u10d5\u10d8_\u10dd\u10e0\u10e8_\u10e1\u10d0\u10db_\u10dd\u10d7\u10ee_\u10ee\u10e3\u10d7_\u10de\u10d0\u10e0_\u10e8\u10d0\u10d1".split("_"),weekdaysMin:"\u10d9\u10d5_\u10dd\u10e0_\u10e1\u10d0_\u10dd\u10d7_\u10ee\u10e3_\u10de\u10d0_\u10e8\u10d0".split("_"),longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendar:{sameDay:"[\u10d3\u10e6\u10d4\u10e1] LT[-\u10d6\u10d4]",nextDay:"[\u10ee\u10d5\u10d0\u10da] LT[-\u10d6\u10d4]",lastDay:"[\u10d2\u10e3\u10e8\u10d8\u10dc] LT[-\u10d6\u10d4]",nextWeek:"[\u10e8\u10d4\u10db\u10d3\u10d4\u10d2] dddd LT[-\u10d6\u10d4]",lastWeek:"[\u10ec\u10d8\u10dc\u10d0] dddd LT-\u10d6\u10d4",sameElse:"L"},relativeTime:{future:function(e){return/(\u10ec\u10d0\u10db\u10d8|\u10ec\u10e3\u10d7\u10d8|\u10e1\u10d0\u10d0\u10d7\u10d8|\u10ec\u10d4\u10da\u10d8)/.test(e)?e.replace(/\u10d8$/,"\u10e8\u10d8"):e+"\u10e8\u10d8"},past:function(e){return/(\u10ec\u10d0\u10db\u10d8|\u10ec\u10e3\u10d7\u10d8|\u10e1\u10d0\u10d0\u10d7\u10d8|\u10d3\u10e6\u10d4|\u10d7\u10d5\u10d4)/.test(e)?e.replace(/(\u10d8|\u10d4)$/,"\u10d8\u10e1 \u10ec\u10d8\u10dc"):/\u10ec\u10d4\u10da\u10d8/.test(e)?e.replace(/\u10ec\u10d4\u10da\u10d8$/,"\u10ec\u10da\u10d8\u10e1 \u10ec\u10d8\u10dc"):void 0},s:"\u10e0\u10d0\u10db\u10d3\u10d4\u10dc\u10d8\u10db\u10d4 \u10ec\u10d0\u10db\u10d8",ss:"%d \u10ec\u10d0\u10db\u10d8",m:"\u10ec\u10e3\u10d7\u10d8",mm:"%d \u10ec\u10e3\u10d7\u10d8",h:"\u10e1\u10d0\u10d0\u10d7\u10d8",hh:"%d \u10e1\u10d0\u10d0\u10d7\u10d8",d:"\u10d3\u10e6\u10d4",dd:"%d \u10d3\u10e6\u10d4",M:"\u10d7\u10d5\u10d4",MM:"%d \u10d7\u10d5\u10d4",y:"\u10ec\u10d4\u10da\u10d8",yy:"%d \u10ec\u10d4\u10da\u10d8"},dayOfMonthOrdinalParse:/0|1-\u10da\u10d8|\u10db\u10d4-\d{1,2}|\d{1,2}-\u10d4/,ordinal:function(e){return 0===e?e:1===e?e+"-\u10da\u10d8":e<20||e<=100&&e%20==0||e%100==0?"\u10db\u10d4-"+e:e+"-\u10d4"},week:{dow:1,doy:7}});var Ks={0:"-\u0448\u0456",1:"-\u0448\u0456",2:"-\u0448\u0456",3:"-\u0448\u0456",4:"-\u0448\u0456",5:"-\u0448\u0456",6:"-\u0448\u044b",7:"-\u0448\u0456",8:"-\u0448\u0456",9:"-\u0448\u044b",10:"-\u0448\u044b",20:"-\u0448\u044b",30:"-\u0448\u044b",40:"-\u0448\u044b",50:"-\u0448\u0456",60:"-\u0448\u044b",70:"-\u0448\u0456",80:"-\u0448\u0456",90:"-\u0448\u044b",100:"-\u0448\u0456"};l.defineLocale("kk",{months:"\u049b\u0430\u04a3\u0442\u0430\u0440_\u0430\u049b\u043f\u0430\u043d_\u043d\u0430\u0443\u0440\u044b\u0437_\u0441\u04d9\u0443\u0456\u0440_\u043c\u0430\u043c\u044b\u0440_\u043c\u0430\u0443\u0441\u044b\u043c_\u0448\u0456\u043b\u0434\u0435_\u0442\u0430\u043c\u044b\u0437_\u049b\u044b\u0440\u043a\u04af\u0439\u0435\u043a_\u049b\u0430\u0437\u0430\u043d_\u049b\u0430\u0440\u0430\u0448\u0430_\u0436\u0435\u043b\u0442\u043e\u049b\u0441\u0430\u043d".split("_"),monthsShort:"\u049b\u0430\u04a3_\u0430\u049b\u043f_\u043d\u0430\u0443_\u0441\u04d9\u0443_\u043c\u0430\u043c_\u043c\u0430\u0443_\u0448\u0456\u043b_\u0442\u0430\u043c_\u049b\u044b\u0440_\u049b\u0430\u0437_\u049b\u0430\u0440_\u0436\u0435\u043b".split("_"),weekdays:"\u0436\u0435\u043a\u0441\u0435\u043d\u0431\u0456_\u0434\u04af\u0439\u0441\u0435\u043d\u0431\u0456_\u0441\u0435\u0439\u0441\u0435\u043d\u0431\u0456_\u0441\u04d9\u0440\u0441\u0435\u043d\u0431\u0456_\u0431\u0435\u0439\u0441\u0435\u043d\u0431\u0456_\u0436\u04b1\u043c\u0430_\u0441\u0435\u043d\u0431\u0456".split("_"),weekdaysShort:"\u0436\u0435\u043a_\u0434\u04af\u0439_\u0441\u0435\u0439_\u0441\u04d9\u0440_\u0431\u0435\u0439_\u0436\u04b1\u043c_\u0441\u0435\u043d".split("_"),weekdaysMin:"\u0436\u043a_\u0434\u0439_\u0441\u0439_\u0441\u0440_\u0431\u0439_\u0436\u043c_\u0441\u043d".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[\u0411\u04af\u0433\u0456\u043d \u0441\u0430\u0493\u0430\u0442] LT",nextDay:"[\u0415\u0440\u0442\u0435\u04a3 \u0441\u0430\u0493\u0430\u0442] LT",nextWeek:"dddd [\u0441\u0430\u0493\u0430\u0442] LT",lastDay:"[\u041a\u0435\u0448\u0435 \u0441\u0430\u0493\u0430\u0442] LT",lastWeek:"[\u04e8\u0442\u043a\u0435\u043d \u0430\u043f\u0442\u0430\u043d\u044b\u04a3] dddd [\u0441\u0430\u0493\u0430\u0442] LT",sameElse:"L"},relativeTime:{future:"%s \u0456\u0448\u0456\u043d\u0434\u0435",past:"%s \u0431\u04b1\u0440\u044b\u043d",s:"\u0431\u0456\u0440\u043d\u0435\u0448\u0435 \u0441\u0435\u043a\u0443\u043d\u0434",ss:"%d \u0441\u0435\u043a\u0443\u043d\u0434",m:"\u0431\u0456\u0440 \u043c\u0438\u043d\u0443\u0442",mm:"%d \u043c\u0438\u043d\u0443\u0442",h:"\u0431\u0456\u0440 \u0441\u0430\u0493\u0430\u0442",hh:"%d \u0441\u0430\u0493\u0430\u0442",d:"\u0431\u0456\u0440 \u043a\u04af\u043d",dd:"%d \u043a\u04af\u043d",M:"\u0431\u0456\u0440 \u0430\u0439",MM:"%d \u0430\u0439",y:"\u0431\u0456\u0440 \u0436\u044b\u043b",yy:"%d \u0436\u044b\u043b"},dayOfMonthOrdinalParse:/\d{1,2}-(\u0448\u0456|\u0448\u044b)/,ordinal:function(e){return e+(Ks[e]||Ks[e%10]||Ks[100<=e?100:null])},week:{dow:1,doy:7}});var $s={1:"\u17e1",2:"\u17e2",3:"\u17e3",4:"\u17e4",5:"\u17e5",6:"\u17e6",7:"\u17e7",8:"\u17e8",9:"\u17e9",0:"\u17e0"},Zs={"\u17e1":"1","\u17e2":"2","\u17e3":"3","\u17e4":"4","\u17e5":"5","\u17e6":"6","\u17e7":"7","\u17e8":"8","\u17e9":"9","\u17e0":"0"};l.defineLocale("km",{months:"\u1798\u1780\u179a\u17b6_\u1780\u17bb\u1798\u17d2\u1797\u17c8_\u1798\u17b8\u1793\u17b6_\u1798\u17c1\u179f\u17b6_\u17a7\u179f\u1797\u17b6_\u1798\u17b7\u1790\u17bb\u1793\u17b6_\u1780\u1780\u17d2\u1780\u178a\u17b6_\u179f\u17b8\u17a0\u17b6_\u1780\u1789\u17d2\u1789\u17b6_\u178f\u17bb\u179b\u17b6_\u179c\u17b7\u1785\u17d2\u1786\u17b7\u1780\u17b6_\u1792\u17d2\u1793\u17bc".split("_"),monthsShort:"\u1798\u1780\u179a\u17b6_\u1780\u17bb\u1798\u17d2\u1797\u17c8_\u1798\u17b8\u1793\u17b6_\u1798\u17c1\u179f\u17b6_\u17a7\u179f\u1797\u17b6_\u1798\u17b7\u1790\u17bb\u1793\u17b6_\u1780\u1780\u17d2\u1780\u178a\u17b6_\u179f\u17b8\u17a0\u17b6_\u1780\u1789\u17d2\u1789\u17b6_\u178f\u17bb\u179b\u17b6_\u179c\u17b7\u1785\u17d2\u1786\u17b7\u1780\u17b6_\u1792\u17d2\u1793\u17bc".split("_"),weekdays:"\u17a2\u17b6\u1791\u17b7\u178f\u17d2\u1799_\u1785\u17d0\u1793\u17d2\u1791_\u17a2\u1784\u17d2\u1782\u17b6\u179a_\u1796\u17bb\u1792_\u1796\u17d2\u179a\u17a0\u179f\u17d2\u1794\u178f\u17b7\u17cd_\u179f\u17bb\u1780\u17d2\u179a_\u179f\u17c5\u179a\u17cd".split("_"),weekdaysShort:"\u17a2\u17b6_\u1785_\u17a2_\u1796_\u1796\u17d2\u179a_\u179f\u17bb_\u179f".split("_"),weekdaysMin:"\u17a2\u17b6_\u1785_\u17a2_\u1796_\u1796\u17d2\u179a_\u179f\u17bb_\u179f".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},meridiemParse:/\u1796\u17d2\u179a\u17b9\u1780|\u179b\u17d2\u1784\u17b6\u1785/,isPM:function(e){return"\u179b\u17d2\u1784\u17b6\u1785"===e},meridiem:function(e,a,t){return e<12?"\u1796\u17d2\u179a\u17b9\u1780":"\u179b\u17d2\u1784\u17b6\u1785"},calendar:{sameDay:"[\u1790\u17d2\u1784\u17c3\u1793\u17c1\u17c7 \u1798\u17c9\u17c4\u1784] LT",nextDay:"[\u179f\u17d2\u17a2\u17c2\u1780 \u1798\u17c9\u17c4\u1784] LT",nextWeek:"dddd [\u1798\u17c9\u17c4\u1784] LT",lastDay:"[\u1798\u17d2\u179f\u17b7\u179b\u1798\u17b7\u1789 \u1798\u17c9\u17c4\u1784] LT",lastWeek:"dddd [\u179f\u1794\u17d2\u178f\u17b6\u17a0\u17cd\u1798\u17bb\u1793] [\u1798\u17c9\u17c4\u1784] LT",sameElse:"L"},relativeTime:{future:"%s\u1791\u17c0\u178f",past:"%s\u1798\u17bb\u1793",s:"\u1794\u17c9\u17bb\u1793\u17d2\u1798\u17b6\u1793\u179c\u17b7\u1793\u17b6\u1791\u17b8",ss:"%d \u179c\u17b7\u1793\u17b6\u1791\u17b8",m:"\u1798\u17bd\u1799\u1793\u17b6\u1791\u17b8",mm:"%d \u1793\u17b6\u1791\u17b8",h:"\u1798\u17bd\u1799\u1798\u17c9\u17c4\u1784",hh:"%d \u1798\u17c9\u17c4\u1784",d:"\u1798\u17bd\u1799\u1790\u17d2\u1784\u17c3",dd:"%d \u1790\u17d2\u1784\u17c3",M:"\u1798\u17bd\u1799\u1781\u17c2",MM:"%d \u1781\u17c2",y:"\u1798\u17bd\u1799\u1786\u17d2\u1793\u17b6\u17c6",yy:"%d \u1786\u17d2\u1793\u17b6\u17c6"},dayOfMonthOrdinalParse:/\u1791\u17b8\d{1,2}/,ordinal:"\u1791\u17b8%d",preparse:function(e){return e.replace(/[\u17e1\u17e2\u17e3\u17e4\u17e5\u17e6\u17e7\u17e8\u17e9\u17e0]/g,function(e){return Zs[e]})},postformat:function(e){return e.replace(/\d/g,function(e){return $s[e]})},week:{dow:1,doy:4}});var Bs={1:"\u0ce7",2:"\u0ce8",3:"\u0ce9",4:"\u0cea",5:"\u0ceb",6:"\u0cec",7:"\u0ced",8:"\u0cee",9:"\u0cef",0:"\u0ce6"},qs={"\u0ce7":"1","\u0ce8":"2","\u0ce9":"3","\u0cea":"4","\u0ceb":"5","\u0cec":"6","\u0ced":"7","\u0cee":"8","\u0cef":"9","\u0ce6":"0"};l.defineLocale("kn",{months:"\u0c9c\u0ca8\u0cb5\u0cb0\u0cbf_\u0cab\u0cc6\u0cac\u0ccd\u0cb0\u0cb5\u0cb0\u0cbf_\u0cae\u0cbe\u0cb0\u0ccd\u0c9a\u0ccd_\u0c8f\u0caa\u0ccd\u0cb0\u0cbf\u0cb2\u0ccd_\u0cae\u0cc6\u0cd5_\u0c9c\u0cc2\u0ca8\u0ccd_\u0c9c\u0cc1\u0cb2\u0cc6\u0cd6_\u0c86\u0c97\u0cb8\u0ccd\u0c9f\u0ccd_\u0cb8\u0cc6\u0caa\u0ccd\u0c9f\u0cc6\u0c82\u0cac\u0cb0\u0ccd_\u0c85\u0c95\u0ccd\u0c9f\u0cc6\u0cc2\u0cd5\u0cac\u0cb0\u0ccd_\u0ca8\u0cb5\u0cc6\u0c82\u0cac\u0cb0\u0ccd_\u0ca1\u0cbf\u0cb8\u0cc6\u0c82\u0cac\u0cb0\u0ccd".split("_"),monthsShort:"\u0c9c\u0ca8_\u0cab\u0cc6\u0cac\u0ccd\u0cb0_\u0cae\u0cbe\u0cb0\u0ccd\u0c9a\u0ccd_\u0c8f\u0caa\u0ccd\u0cb0\u0cbf\u0cb2\u0ccd_\u0cae\u0cc6\u0cd5_\u0c9c\u0cc2\u0ca8\u0ccd_\u0c9c\u0cc1\u0cb2\u0cc6\u0cd6_\u0c86\u0c97\u0cb8\u0ccd\u0c9f\u0ccd_\u0cb8\u0cc6\u0caa\u0ccd\u0c9f\u0cc6\u0c82_\u0c85\u0c95\u0ccd\u0c9f\u0cc6\u0cc2\u0cd5_\u0ca8\u0cb5\u0cc6\u0c82_\u0ca1\u0cbf\u0cb8\u0cc6\u0c82".split("_"),monthsParseExact:!0,weekdays:"\u0cad\u0cbe\u0ca8\u0cc1\u0cb5\u0cbe\u0cb0_\u0cb8\u0cc6\u0cc2\u0cd5\u0cae\u0cb5\u0cbe\u0cb0_\u0cae\u0c82\u0c97\u0cb3\u0cb5\u0cbe\u0cb0_\u0cac\u0cc1\u0ca7\u0cb5\u0cbe\u0cb0_\u0c97\u0cc1\u0cb0\u0cc1\u0cb5\u0cbe\u0cb0_\u0cb6\u0cc1\u0c95\u0ccd\u0cb0\u0cb5\u0cbe\u0cb0_\u0cb6\u0ca8\u0cbf\u0cb5\u0cbe\u0cb0".split("_"),weekdaysShort:"\u0cad\u0cbe\u0ca8\u0cc1_\u0cb8\u0cc6\u0cc2\u0cd5\u0cae_\u0cae\u0c82\u0c97\u0cb3_\u0cac\u0cc1\u0ca7_\u0c97\u0cc1\u0cb0\u0cc1_\u0cb6\u0cc1\u0c95\u0ccd\u0cb0_\u0cb6\u0ca8\u0cbf".split("_"),weekdaysMin:"\u0cad\u0cbe_\u0cb8\u0cc6\u0cc2\u0cd5_\u0cae\u0c82_\u0cac\u0cc1_\u0c97\u0cc1_\u0cb6\u0cc1_\u0cb6".split("_"),longDateFormat:{LT:"A h:mm",LTS:"A h:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm",LLLL:"dddd, D MMMM YYYY, A h:mm"},calendar:{sameDay:"[\u0c87\u0c82\u0ca6\u0cc1] LT",nextDay:"[\u0ca8\u0cbe\u0cb3\u0cc6] LT",nextWeek:"dddd, LT",lastDay:"[\u0ca8\u0cbf\u0ca8\u0ccd\u0ca8\u0cc6] LT",lastWeek:"[\u0c95\u0cc6\u0cc2\u0ca8\u0cc6\u0caf] dddd, LT",sameElse:"L"},relativeTime:{future:"%s \u0ca8\u0c82\u0ca4\u0cb0",past:"%s \u0cb9\u0cbf\u0c82\u0ca6\u0cc6",s:"\u0c95\u0cc6\u0cb2\u0cb5\u0cc1 \u0c95\u0ccd\u0cb7\u0ca3\u0c97\u0cb3\u0cc1",ss:"%d \u0cb8\u0cc6\u0c95\u0cc6\u0c82\u0ca1\u0cc1\u0c97\u0cb3\u0cc1",m:"\u0c92\u0c82\u0ca6\u0cc1 \u0ca8\u0cbf\u0cae\u0cbf\u0cb7",mm:"%d \u0ca8\u0cbf\u0cae\u0cbf\u0cb7",h:"\u0c92\u0c82\u0ca6\u0cc1 \u0c97\u0c82\u0c9f\u0cc6",hh:"%d \u0c97\u0c82\u0c9f\u0cc6",d:"\u0c92\u0c82\u0ca6\u0cc1 \u0ca6\u0cbf\u0ca8",dd:"%d \u0ca6\u0cbf\u0ca8",M:"\u0c92\u0c82\u0ca6\u0cc1 \u0ca4\u0cbf\u0c82\u0c97\u0cb3\u0cc1",MM:"%d \u0ca4\u0cbf\u0c82\u0c97\u0cb3\u0cc1",y:"\u0c92\u0c82\u0ca6\u0cc1 \u0cb5\u0cb0\u0ccd\u0cb7",yy:"%d \u0cb5\u0cb0\u0ccd\u0cb7"},preparse:function(e){return e.replace(/[\u0ce7\u0ce8\u0ce9\u0cea\u0ceb\u0cec\u0ced\u0cee\u0cef\u0ce6]/g,function(e){return qs[e]})},postformat:function(e){return e.replace(/\d/g,function(e){return Bs[e]})},meridiemParse:/\u0cb0\u0cbe\u0ca4\u0ccd\u0cb0\u0cbf|\u0cac\u0cc6\u0cb3\u0cbf\u0c97\u0ccd\u0c97\u0cc6|\u0cae\u0ca7\u0ccd\u0caf\u0cbe\u0cb9\u0ccd\u0ca8|\u0cb8\u0c82\u0c9c\u0cc6/,meridiemHour:function(e,a){return 12===e&&(e=0),"\u0cb0\u0cbe\u0ca4\u0ccd\u0cb0\u0cbf"===a?e<4?e:e+12:"\u0cac\u0cc6\u0cb3\u0cbf\u0c97\u0ccd\u0c97\u0cc6"===a?e:"\u0cae\u0ca7\u0ccd\u0caf\u0cbe\u0cb9\u0ccd\u0ca8"===a?10<=e?e:e+12:"\u0cb8\u0c82\u0c9c\u0cc6"===a?e+12:void 0},meridiem:function(e,a,t){return e<4?"\u0cb0\u0cbe\u0ca4\u0ccd\u0cb0\u0cbf":e<10?"\u0cac\u0cc6\u0cb3\u0cbf\u0c97\u0ccd\u0c97\u0cc6":e<17?"\u0cae\u0ca7\u0ccd\u0caf\u0cbe\u0cb9\u0ccd\u0ca8":e<20?"\u0cb8\u0c82\u0c9c\u0cc6":"\u0cb0\u0cbe\u0ca4\u0ccd\u0cb0\u0cbf"},dayOfMonthOrdinalParse:/\d{1,2}(\u0ca8\u0cc6\u0cd5)/,ordinal:function(e){return e+"\u0ca8\u0cc6\u0cd5"},week:{dow:0,doy:6}}),l.defineLocale("ko",{months:"1\uc6d4_2\uc6d4_3\uc6d4_4\uc6d4_5\uc6d4_6\uc6d4_7\uc6d4_8\uc6d4_9\uc6d4_10\uc6d4_11\uc6d4_12\uc6d4".split("_"),monthsShort:"1\uc6d4_2\uc6d4_3\uc6d4_4\uc6d4_5\uc6d4_6\uc6d4_7\uc6d4_8\uc6d4_9\uc6d4_10\uc6d4_11\uc6d4_12\uc6d4".split("_"),weekdays:"\uc77c\uc694\uc77c_\uc6d4\uc694\uc77c_\ud654\uc694\uc77c_\uc218\uc694\uc77c_\ubaa9\uc694\uc77c_\uae08\uc694\uc77c_\ud1a0\uc694\uc77c".split("_"),weekdaysShort:"\uc77c_\uc6d4_\ud654_\uc218_\ubaa9_\uae08_\ud1a0".split("_"),weekdaysMin:"\uc77c_\uc6d4_\ud654_\uc218_\ubaa9_\uae08_\ud1a0".split("_"),longDateFormat:{LT:"A h:mm",LTS:"A h:mm:ss",L:"YYYY.MM.DD.",LL:"YYYY\ub144 MMMM D\uc77c",LLL:"YYYY\ub144 MMMM D\uc77c A h:mm",LLLL:"YYYY\ub144 MMMM D\uc77c dddd A h:mm",l:"YYYY.MM.DD.",ll:"YYYY\ub144 MMMM D\uc77c",lll:"YYYY\ub144 MMMM D\uc77c A h:mm",llll:"YYYY\ub144 MMMM D\uc77c dddd A h:mm"},calendar:{sameDay:"\uc624\ub298 LT",nextDay:"\ub0b4\uc77c LT",nextWeek:"dddd LT",lastDay:"\uc5b4\uc81c LT",lastWeek:"\uc9c0\ub09c\uc8fc dddd LT",sameElse:"L"},relativeTime:{future:"%s \ud6c4",past:"%s \uc804",s:"\uba87 \ucd08",ss:"%d\ucd08",m:"1\ubd84",mm:"%d\ubd84",h:"\ud55c \uc2dc\uac04",hh:"%d\uc2dc\uac04",d:"\ud558\ub8e8",dd:"%d\uc77c",M:"\ud55c \ub2ec",MM:"%d\ub2ec",y:"\uc77c \ub144",yy:"%d\ub144"},dayOfMonthOrdinalParse:/\d{1,2}(\uc77c|\uc6d4|\uc8fc)/,ordinal:function(e,a){switch(a){case"d":case"D":case"DDD":return e+"\uc77c";case"M":return e+"\uc6d4";case"w":case"W":return e+"\uc8fc";default:return e}},meridiemParse:/\uc624\uc804|\uc624\ud6c4/,isPM:function(e){return"\uc624\ud6c4"===e},meridiem:function(e,a,t){return e<12?"\uc624\uc804":"\uc624\ud6c4"}});var Qs={1:"\u0661",2:"\u0662",3:"\u0663",4:"\u0664",5:"\u0665",6:"\u0666",7:"\u0667",8:"\u0668",9:"\u0669",0:"\u0660"},Xs={"\u0661":"1","\u0662":"2","\u0663":"3","\u0664":"4","\u0665":"5","\u0666":"6","\u0667":"7","\u0668":"8","\u0669":"9","\u0660":"0"},en=["\u06a9\u0627\u0646\u0648\u0646\u06cc \u062f\u0648\u0648\u06d5\u0645","\u0634\u0648\u0628\u0627\u062a","\u0626\u0627\u0632\u0627\u0631","\u0646\u06cc\u0633\u0627\u0646","\u0626\u0627\u06cc\u0627\u0631","\u062d\u0648\u0632\u06d5\u06cc\u0631\u0627\u0646","\u062a\u06d5\u0645\u0645\u0648\u0632","\u0626\u0627\u0628","\u0626\u06d5\u06cc\u0644\u0648\u0648\u0644","\u062a\u0634\u0631\u06cc\u0646\u06cc \u06cc\u06d5\u0643\u06d5\u0645","\u062a\u0634\u0631\u06cc\u0646\u06cc \u062f\u0648\u0648\u06d5\u0645","\u0643\u0627\u0646\u0648\u0646\u06cc \u06cc\u06d5\u06a9\u06d5\u0645"];l.defineLocale("ku",{months:en,monthsShort:en,weekdays:"\u06cc\u0647\u200c\u0643\u0634\u0647\u200c\u0645\u0645\u0647\u200c_\u062f\u0648\u0648\u0634\u0647\u200c\u0645\u0645\u0647\u200c_\u0633\u06ce\u0634\u0647\u200c\u0645\u0645\u0647\u200c_\u0686\u0648\u0627\u0631\u0634\u0647\u200c\u0645\u0645\u0647\u200c_\u067e\u06ce\u0646\u062c\u0634\u0647\u200c\u0645\u0645\u0647\u200c_\u0647\u0647\u200c\u06cc\u0646\u06cc_\u0634\u0647\u200c\u0645\u0645\u0647\u200c".split("_"),weekdaysShort:"\u06cc\u0647\u200c\u0643\u0634\u0647\u200c\u0645_\u062f\u0648\u0648\u0634\u0647\u200c\u0645_\u0633\u06ce\u0634\u0647\u200c\u0645_\u0686\u0648\u0627\u0631\u0634\u0647\u200c\u0645_\u067e\u06ce\u0646\u062c\u0634\u0647\u200c\u0645_\u0647\u0647\u200c\u06cc\u0646\u06cc_\u0634\u0647\u200c\u0645\u0645\u0647\u200c".split("_"),weekdaysMin:"\u06cc_\u062f_\u0633_\u0686_\u067e_\u0647_\u0634".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},meridiemParse:/\u0626\u06ce\u0648\u0627\u0631\u0647\u200c|\u0628\u0647\u200c\u06cc\u0627\u0646\u06cc/,isPM:function(e){return/\u0626\u06ce\u0648\u0627\u0631\u0647\u200c/.test(e)},meridiem:function(e,a,t){return e<12?"\u0628\u0647\u200c\u06cc\u0627\u0646\u06cc":"\u0626\u06ce\u0648\u0627\u0631\u0647\u200c"},calendar:{sameDay:"[\u0626\u0647\u200c\u0645\u0631\u06c6 \u0643\u0627\u062a\u0698\u0645\u06ce\u0631] LT",nextDay:"[\u0628\u0647\u200c\u06cc\u0627\u0646\u06cc \u0643\u0627\u062a\u0698\u0645\u06ce\u0631] LT",nextWeek:"dddd [\u0643\u0627\u062a\u0698\u0645\u06ce\u0631] LT",lastDay:"[\u062f\u0648\u06ce\u0646\u06ce \u0643\u0627\u062a\u0698\u0645\u06ce\u0631] LT",lastWeek:"dddd [\u0643\u0627\u062a\u0698\u0645\u06ce\u0631] LT",sameElse:"L"},relativeTime:{future:"\u0644\u0647\u200c %s",past:"%s",s:"\u0686\u0647\u200c\u0646\u062f \u0686\u0631\u0643\u0647\u200c\u06cc\u0647\u200c\u0643",ss:"\u0686\u0631\u0643\u0647\u200c %d",m:"\u06cc\u0647\u200c\u0643 \u062e\u0648\u0644\u0647\u200c\u0643",mm:"%d \u062e\u0648\u0644\u0647\u200c\u0643",h:"\u06cc\u0647\u200c\u0643 \u0643\u0627\u062a\u0698\u0645\u06ce\u0631",hh:"%d \u0643\u0627\u062a\u0698\u0645\u06ce\u0631",d:"\u06cc\u0647\u200c\u0643 \u0695\u06c6\u0698",dd:"%d \u0695\u06c6\u0698",M:"\u06cc\u0647\u200c\u0643 \u0645\u0627\u0646\u06af",MM:"%d \u0645\u0627\u0646\u06af",y:"\u06cc\u0647\u200c\u0643 \u0633\u0627\u06b5",yy:"%d \u0633\u0627\u06b5"},preparse:function(e){return e.replace(/[\u0661\u0662\u0663\u0664\u0665\u0666\u0667\u0668\u0669\u0660]/g,function(e){return Xs[e]}).replace(/\u060c/g,",")},postformat:function(e){return e.replace(/\d/g,function(e){return Qs[e]}).replace(/,/g,"\u060c")},week:{dow:6,doy:12}});var an={0:"-\u0447\u04af",1:"-\u0447\u0438",2:"-\u0447\u0438",3:"-\u0447\u04af",4:"-\u0447\u04af",5:"-\u0447\u0438",6:"-\u0447\u044b",7:"-\u0447\u0438",8:"-\u0447\u0438",9:"-\u0447\u0443",10:"-\u0447\u0443",20:"-\u0447\u044b",30:"-\u0447\u0443",40:"-\u0447\u044b",50:"-\u0447\u04af",60:"-\u0447\u044b",70:"-\u0447\u0438",80:"-\u0447\u0438",90:"-\u0447\u0443",100:"-\u0447\u04af"};function tn(e,a,t,s){var n={m:["eng Minutt","enger Minutt"],h:["eng Stonn","enger Stonn"],d:["een Dag","engem Dag"],M:["ee Mount","engem Mount"],y:["ee Joer","engem Joer"]};return a?n[t][0]:n[t][1]}function sn(e){if(e=parseInt(e,10),isNaN(e))return!1;if(e<0)return!0;if(e<10)return 4<=e&&e<=7;if(e<100){var a=e%10;return sn(0===a?e/10:a)}if(e<1e4){for(;10<=e;)e/=10;return sn(e)}return sn(e/=1e3)}l.defineLocale("ky",{months:"\u044f\u043d\u0432\u0430\u0440\u044c_\u0444\u0435\u0432\u0440\u0430\u043b\u044c_\u043c\u0430\u0440\u0442_\u0430\u043f\u0440\u0435\u043b\u044c_\u043c\u0430\u0439_\u0438\u044e\u043d\u044c_\u0438\u044e\u043b\u044c_\u0430\u0432\u0433\u0443\u0441\u0442_\u0441\u0435\u043d\u0442\u044f\u0431\u0440\u044c_\u043e\u043a\u0442\u044f\u0431\u0440\u044c_\u043d\u043e\u044f\u0431\u0440\u044c_\u0434\u0435\u043a\u0430\u0431\u0440\u044c".split("_"),monthsShort:"\u044f\u043d\u0432_\u0444\u0435\u0432_\u043c\u0430\u0440\u0442_\u0430\u043f\u0440_\u043c\u0430\u0439_\u0438\u044e\u043d\u044c_\u0438\u044e\u043b\u044c_\u0430\u0432\u0433_\u0441\u0435\u043d_\u043e\u043a\u0442_\u043d\u043e\u044f_\u0434\u0435\u043a".split("_"),weekdays:"\u0416\u0435\u043a\u0448\u0435\u043c\u0431\u0438_\u0414\u04af\u0439\u0448\u04e9\u043c\u0431\u04af_\u0428\u0435\u0439\u0448\u0435\u043c\u0431\u0438_\u0428\u0430\u0440\u0448\u0435\u043c\u0431\u0438_\u0411\u0435\u0439\u0448\u0435\u043c\u0431\u0438_\u0416\u0443\u043c\u0430_\u0418\u0448\u0435\u043c\u0431\u0438".split("_"),weekdaysShort:"\u0416\u0435\u043a_\u0414\u04af\u0439_\u0428\u0435\u0439_\u0428\u0430\u0440_\u0411\u0435\u0439_\u0416\u0443\u043c_\u0418\u0448\u0435".split("_"),weekdaysMin:"\u0416\u043a_\u0414\u0439_\u0428\u0439_\u0428\u0440_\u0411\u0439_\u0416\u043c_\u0418\u0448".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[\u0411\u04af\u0433\u04af\u043d \u0441\u0430\u0430\u0442] LT",nextDay:"[\u042d\u0440\u0442\u0435\u04a3 \u0441\u0430\u0430\u0442] LT",nextWeek:"dddd [\u0441\u0430\u0430\u0442] LT",lastDay:"[\u041a\u0435\u0447\u044d\u044d \u0441\u0430\u0430\u0442] LT",lastWeek:"[\u04e8\u0442\u043a\u04e9\u043d \u0430\u043f\u0442\u0430\u043d\u044b\u043d] dddd [\u043a\u04af\u043d\u04af] [\u0441\u0430\u0430\u0442] LT",sameElse:"L"},relativeTime:{future:"%s \u0438\u0447\u0438\u043d\u0434\u0435",past:"%s \u043c\u0443\u0440\u0443\u043d",s:"\u0431\u0438\u0440\u043d\u0435\u0447\u0435 \u0441\u0435\u043a\u0443\u043d\u0434",ss:"%d \u0441\u0435\u043a\u0443\u043d\u0434",m:"\u0431\u0438\u0440 \u043c\u04af\u043d\u04e9\u0442",mm:"%d \u043c\u04af\u043d\u04e9\u0442",h:"\u0431\u0438\u0440 \u0441\u0430\u0430\u0442",hh:"%d \u0441\u0430\u0430\u0442",d:"\u0431\u0438\u0440 \u043a\u04af\u043d",dd:"%d \u043a\u04af\u043d",M:"\u0431\u0438\u0440 \u0430\u0439",MM:"%d \u0430\u0439",y:"\u0431\u0438\u0440 \u0436\u044b\u043b",yy:"%d \u0436\u044b\u043b"},dayOfMonthOrdinalParse:/\d{1,2}-(\u0447\u0438|\u0447\u044b|\u0447\u04af|\u0447\u0443)/,ordinal:function(e){return e+(an[e]||an[e%10]||an[100<=e?100:null])},week:{dow:1,doy:7}}),l.defineLocale("lb",{months:"Januar_Februar_M\xe4erz_Abr\xebll_Mee_Juni_Juli_August_September_Oktober_November_Dezember".split("_"),monthsShort:"Jan._Febr._Mrz._Abr._Mee_Jun._Jul._Aug._Sept._Okt._Nov._Dez.".split("_"),monthsParseExact:!0,weekdays:"Sonndeg_M\xe9indeg_D\xebnschdeg_M\xebttwoch_Donneschdeg_Freideg_Samschdeg".split("_"),weekdaysShort:"So._M\xe9._D\xeb._M\xeb._Do._Fr._Sa.".split("_"),weekdaysMin:"So_M\xe9_D\xeb_M\xeb_Do_Fr_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm [Auer]",LTS:"H:mm:ss [Auer]",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm [Auer]",LLLL:"dddd, D. MMMM YYYY H:mm [Auer]"},calendar:{sameDay:"[Haut um] LT",sameElse:"L",nextDay:"[Muer um] LT",nextWeek:"dddd [um] LT",lastDay:"[G\xebschter um] LT",lastWeek:function(){switch(this.day()){case 2:case 4:return"[Leschten] dddd [um] LT";default:return"[Leschte] dddd [um] LT"}}},relativeTime:{future:function(e){return sn(e.substr(0,e.indexOf(" ")))?"a "+e:"an "+e},past:function(e){return sn(e.substr(0,e.indexOf(" ")))?"viru "+e:"virun "+e},s:"e puer Sekonnen",ss:"%d Sekonnen",m:tn,mm:"%d Minutten",h:tn,hh:"%d Stonnen",d:tn,dd:"%d Deeg",M:tn,MM:"%d M\xe9int",y:tn,yy:"%d Joer"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}}),l.defineLocale("lo",{months:"\u0ea1\u0eb1\u0e87\u0e81\u0ead\u0e99_\u0e81\u0eb8\u0ea1\u0e9e\u0eb2_\u0ea1\u0eb5\u0e99\u0eb2_\u0ec0\u0ea1\u0eaa\u0eb2_\u0e9e\u0eb6\u0e94\u0eaa\u0eb0\u0e9e\u0eb2_\u0ea1\u0eb4\u0e96\u0eb8\u0e99\u0eb2_\u0e81\u0ecd\u0ea5\u0eb0\u0e81\u0ebb\u0e94_\u0eaa\u0eb4\u0e87\u0eab\u0eb2_\u0e81\u0eb1\u0e99\u0e8d\u0eb2_\u0e95\u0eb8\u0ea5\u0eb2_\u0e9e\u0eb0\u0e88\u0eb4\u0e81_\u0e97\u0eb1\u0e99\u0ea7\u0eb2".split("_"),monthsShort:"\u0ea1\u0eb1\u0e87\u0e81\u0ead\u0e99_\u0e81\u0eb8\u0ea1\u0e9e\u0eb2_\u0ea1\u0eb5\u0e99\u0eb2_\u0ec0\u0ea1\u0eaa\u0eb2_\u0e9e\u0eb6\u0e94\u0eaa\u0eb0\u0e9e\u0eb2_\u0ea1\u0eb4\u0e96\u0eb8\u0e99\u0eb2_\u0e81\u0ecd\u0ea5\u0eb0\u0e81\u0ebb\u0e94_\u0eaa\u0eb4\u0e87\u0eab\u0eb2_\u0e81\u0eb1\u0e99\u0e8d\u0eb2_\u0e95\u0eb8\u0ea5\u0eb2_\u0e9e\u0eb0\u0e88\u0eb4\u0e81_\u0e97\u0eb1\u0e99\u0ea7\u0eb2".split("_"),weekdays:"\u0ead\u0eb2\u0e97\u0eb4\u0e94_\u0e88\u0eb1\u0e99_\u0ead\u0eb1\u0e87\u0e84\u0eb2\u0e99_\u0e9e\u0eb8\u0e94_\u0e9e\u0eb0\u0eab\u0eb1\u0e94_\u0eaa\u0eb8\u0e81_\u0ec0\u0eaa\u0ebb\u0eb2".split("_"),weekdaysShort:"\u0e97\u0eb4\u0e94_\u0e88\u0eb1\u0e99_\u0ead\u0eb1\u0e87\u0e84\u0eb2\u0e99_\u0e9e\u0eb8\u0e94_\u0e9e\u0eb0\u0eab\u0eb1\u0e94_\u0eaa\u0eb8\u0e81_\u0ec0\u0eaa\u0ebb\u0eb2".split("_"),weekdaysMin:"\u0e97_\u0e88_\u0ead\u0e84_\u0e9e_\u0e9e\u0eab_\u0eaa\u0e81_\u0eaa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"\u0ea7\u0eb1\u0e99dddd D MMMM YYYY HH:mm"},meridiemParse:/\u0e95\u0ead\u0e99\u0ec0\u0e8a\u0ebb\u0ec9\u0eb2|\u0e95\u0ead\u0e99\u0ec1\u0ea5\u0e87/,isPM:function(e){return"\u0e95\u0ead\u0e99\u0ec1\u0ea5\u0e87"===e},meridiem:function(e,a,t){return e<12?"\u0e95\u0ead\u0e99\u0ec0\u0e8a\u0ebb\u0ec9\u0eb2":"\u0e95\u0ead\u0e99\u0ec1\u0ea5\u0e87"},calendar:{sameDay:"[\u0ea1\u0eb7\u0ec9\u0e99\u0eb5\u0ec9\u0ec0\u0ea7\u0ea5\u0eb2] LT",nextDay:"[\u0ea1\u0eb7\u0ec9\u0ead\u0eb7\u0ec8\u0e99\u0ec0\u0ea7\u0ea5\u0eb2] LT",nextWeek:"[\u0ea7\u0eb1\u0e99]dddd[\u0edc\u0ec9\u0eb2\u0ec0\u0ea7\u0ea5\u0eb2] LT",lastDay:"[\u0ea1\u0eb7\u0ec9\u0ea7\u0eb2\u0e99\u0e99\u0eb5\u0ec9\u0ec0\u0ea7\u0ea5\u0eb2] LT",lastWeek:"[\u0ea7\u0eb1\u0e99]dddd[\u0ec1\u0ea5\u0ec9\u0ea7\u0e99\u0eb5\u0ec9\u0ec0\u0ea7\u0ea5\u0eb2] LT",sameElse:"L"},relativeTime:{future:"\u0ead\u0eb5\u0e81 %s",past:"%s\u0e9c\u0ec8\u0eb2\u0e99\u0ea1\u0eb2",s:"\u0e9a\u0ecd\u0ec8\u0ec0\u0e97\u0ebb\u0ec8\u0eb2\u0ec3\u0e94\u0ea7\u0eb4\u0e99\u0eb2\u0e97\u0eb5",ss:"%d \u0ea7\u0eb4\u0e99\u0eb2\u0e97\u0eb5",m:"1 \u0e99\u0eb2\u0e97\u0eb5",mm:"%d \u0e99\u0eb2\u0e97\u0eb5",h:"1 \u0e8a\u0ebb\u0ec8\u0ea7\u0ec2\u0ea1\u0e87",hh:"%d \u0e8a\u0ebb\u0ec8\u0ea7\u0ec2\u0ea1\u0e87",d:"1 \u0ea1\u0eb7\u0ec9",dd:"%d \u0ea1\u0eb7\u0ec9",M:"1 \u0ec0\u0e94\u0eb7\u0ead\u0e99",MM:"%d \u0ec0\u0e94\u0eb7\u0ead\u0e99",y:"1 \u0e9b\u0eb5",yy:"%d \u0e9b\u0eb5"},dayOfMonthOrdinalParse:/(\u0e97\u0eb5\u0ec8)\d{1,2}/,ordinal:function(e){return"\u0e97\u0eb5\u0ec8"+e}});var nn={ss:"sekund\u0117_sekund\u017ei\u0173_sekundes",m:"minut\u0117_minut\u0117s_minut\u0119",mm:"minut\u0117s_minu\u010di\u0173_minutes",h:"valanda_valandos_valand\u0105",hh:"valandos_valand\u0173_valandas",d:"diena_dienos_dien\u0105",dd:"dienos_dien\u0173_dienas",M:"m\u0117nuo_m\u0117nesio_m\u0117nes\u012f",MM:"m\u0117nesiai_m\u0117nesi\u0173_m\u0117nesius",y:"metai_met\u0173_metus",yy:"metai_met\u0173_metus"};function dn(e,a,t,s){return a?_n(t)[0]:s?_n(t)[1]:_n(t)[2]}function rn(e){return e%10==0||10<e&&e<20}function _n(e){return nn[e].split("_")}function on(e,a,t,s){var n=e+" ";return 1===e?n+dn(0,a,t[0],s):a?n+(rn(e)?_n(t)[1]:_n(t)[0]):s?n+_n(t)[1]:n+(rn(e)?_n(t)[1]:_n(t)[2])}l.defineLocale("lt",{months:{format:"sausio_vasario_kovo_baland\u017eio_gegu\u017e\u0117s_bir\u017eelio_liepos_rugpj\u016b\u010dio_rugs\u0117jo_spalio_lapkri\u010dio_gruod\u017eio".split("_"),standalone:"sausis_vasaris_kovas_balandis_gegu\u017e\u0117_bir\u017eelis_liepa_rugpj\u016btis_rugs\u0117jis_spalis_lapkritis_gruodis".split("_"),isFormat:/D[oD]?(\[[^\[\]]*\]|\s)+MMMM?|MMMM?(\[[^\[\]]*\]|\s)+D[oD]?/},monthsShort:"sau_vas_kov_bal_geg_bir_lie_rgp_rgs_spa_lap_grd".split("_"),weekdays:{format:"sekmadien\u012f_pirmadien\u012f_antradien\u012f_tre\u010diadien\u012f_ketvirtadien\u012f_penktadien\u012f_\u0161e\u0161tadien\u012f".split("_"),standalone:"sekmadienis_pirmadienis_antradienis_tre\u010diadienis_ketvirtadienis_penktadienis_\u0161e\u0161tadienis".split("_"),isFormat:/dddd HH:mm/},weekdaysShort:"Sek_Pir_Ant_Tre_Ket_Pen_\u0160e\u0161".split("_"),weekdaysMin:"S_P_A_T_K_Pn_\u0160".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"YYYY [m.] MMMM D [d.]",LLL:"YYYY [m.] MMMM D [d.], HH:mm [val.]",LLLL:"YYYY [m.] MMMM D [d.], dddd, HH:mm [val.]",l:"YYYY-MM-DD",ll:"YYYY [m.] MMMM D [d.]",lll:"YYYY [m.] MMMM D [d.], HH:mm [val.]",llll:"YYYY [m.] MMMM D [d.], ddd, HH:mm [val.]"},calendar:{sameDay:"[\u0160iandien] LT",nextDay:"[Rytoj] LT",nextWeek:"dddd LT",lastDay:"[Vakar] LT",lastWeek:"[Pra\u0117jus\u012f] dddd LT",sameElse:"L"},relativeTime:{future:"po %s",past:"prie\u0161 %s",s:function(e,a,t,s){return a?"kelios sekund\u0117s":s?"keli\u0173 sekund\u017ei\u0173":"kelias sekundes"},ss:on,m:dn,mm:on,h:dn,hh:on,d:dn,dd:on,M:dn,MM:on,y:dn,yy:on},dayOfMonthOrdinalParse:/\d{1,2}-oji/,ordinal:function(e){return e+"-oji"},week:{dow:1,doy:4}});var mn={ss:"sekundes_sekund\u0113m_sekunde_sekundes".split("_"),m:"min\u016btes_min\u016bt\u0113m_min\u016bte_min\u016btes".split("_"),mm:"min\u016btes_min\u016bt\u0113m_min\u016bte_min\u016btes".split("_"),h:"stundas_stund\u0101m_stunda_stundas".split("_"),hh:"stundas_stund\u0101m_stunda_stundas".split("_"),d:"dienas_dien\u0101m_diena_dienas".split("_"),dd:"dienas_dien\u0101m_diena_dienas".split("_"),M:"m\u0113ne\u0161a_m\u0113ne\u0161iem_m\u0113nesis_m\u0113ne\u0161i".split("_"),MM:"m\u0113ne\u0161a_m\u0113ne\u0161iem_m\u0113nesis_m\u0113ne\u0161i".split("_"),y:"gada_gadiem_gads_gadi".split("_"),yy:"gada_gadiem_gads_gadi".split("_")};function un(e,a,t){return t?a%10==1&&a%100!=11?e[2]:e[3]:a%10==1&&a%100!=11?e[0]:e[1]}function ln(e,a,t){return e+" "+un(mn[t],e,a)}function Mn(e,a,t){return un(mn[t],e,a)}l.defineLocale("lv",{months:"janv\u0101ris_febru\u0101ris_marts_apr\u012blis_maijs_j\u016bnijs_j\u016blijs_augusts_septembris_oktobris_novembris_decembris".split("_"),monthsShort:"jan_feb_mar_apr_mai_j\u016bn_j\u016bl_aug_sep_okt_nov_dec".split("_"),weekdays:"sv\u0113tdiena_pirmdiena_otrdiena_tre\u0161diena_ceturtdiena_piektdiena_sestdiena".split("_"),weekdaysShort:"Sv_P_O_T_C_Pk_S".split("_"),weekdaysMin:"Sv_P_O_T_C_Pk_S".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY.",LL:"YYYY. [gada] D. MMMM",LLL:"YYYY. [gada] D. MMMM, HH:mm",LLLL:"YYYY. [gada] D. MMMM, dddd, HH:mm"},calendar:{sameDay:"[\u0160odien pulksten] LT",nextDay:"[R\u012bt pulksten] LT",nextWeek:"dddd [pulksten] LT",lastDay:"[Vakar pulksten] LT",lastWeek:"[Pag\u0101ju\u0161\u0101] dddd [pulksten] LT",sameElse:"L"},relativeTime:{future:"p\u0113c %s",past:"pirms %s",s:function(e,a){return a?"da\u017eas sekundes":"da\u017e\u0101m sekund\u0113m"},ss:ln,m:Mn,mm:ln,h:Mn,hh:ln,d:Mn,dd:ln,M:Mn,MM:ln,y:Mn,yy:ln},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}});var hn={words:{ss:["sekund","sekunda","sekundi"],m:["jedan minut","jednog minuta"],mm:["minut","minuta","minuta"],h:["jedan sat","jednog sata"],hh:["sat","sata","sati"],dd:["dan","dana","dana"],MM:["mjesec","mjeseca","mjeseci"],yy:["godina","godine","godina"]},correctGrammaticalCase:function(e,a){return 1===e?a[0]:2<=e&&e<=4?a[1]:a[2]},translate:function(e,a,t){var s=hn.words[t];return 1===t.length?a?s[0]:s[1]:e+" "+hn.correctGrammaticalCase(e,s)}};function Ln(e,a,t,s){switch(t){case"s":return a?"\u0445\u044d\u0434\u0445\u044d\u043d \u0441\u0435\u043a\u0443\u043d\u0434":"\u0445\u044d\u0434\u0445\u044d\u043d \u0441\u0435\u043a\u0443\u043d\u0434\u044b\u043d";case"ss":return e+(a?" \u0441\u0435\u043a\u0443\u043d\u0434":" \u0441\u0435\u043a\u0443\u043d\u0434\u044b\u043d");case"m":case"mm":return e+(a?" \u043c\u0438\u043d\u0443\u0442":" \u043c\u0438\u043d\u0443\u0442\u044b\u043d");case"h":case"hh":return e+(a?" \u0446\u0430\u0433":" \u0446\u0430\u0433\u0438\u0439\u043d");case"d":case"dd":return e+(a?" \u04e9\u0434\u04e9\u0440":" \u04e9\u0434\u0440\u0438\u0439\u043d");case"M":case"MM":return e+(a?" \u0441\u0430\u0440":" \u0441\u0430\u0440\u044b\u043d");case"y":case"yy":return e+(a?" \u0436\u0438\u043b":" \u0436\u0438\u043b\u0438\u0439\u043d");default:return e}}l.defineLocale("me",{months:"januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar".split("_"),monthsShort:"jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"nedjelja_ponedjeljak_utorak_srijeda_\u010detvrtak_petak_subota".split("_"),weekdaysShort:"ned._pon._uto._sri._\u010det._pet._sub.".split("_"),weekdaysMin:"ne_po_ut_sr_\u010de_pe_su".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[danas u] LT",nextDay:"[sjutra u] LT",nextWeek:function(){switch(this.day()){case 0:return"[u] [nedjelju] [u] LT";case 3:return"[u] [srijedu] [u] LT";case 6:return"[u] [subotu] [u] LT";case 1:case 2:case 4:case 5:return"[u] dddd [u] LT"}},lastDay:"[ju\u010de u] LT",lastWeek:function(){return["[pro\u0161le] [nedjelje] [u] LT","[pro\u0161log] [ponedjeljka] [u] LT","[pro\u0161log] [utorka] [u] LT","[pro\u0161le] [srijede] [u] LT","[pro\u0161log] [\u010detvrtka] [u] LT","[pro\u0161log] [petka] [u] LT","[pro\u0161le] [subote] [u] LT"][this.day()]},sameElse:"L"},relativeTime:{future:"za %s",past:"prije %s",s:"nekoliko sekundi",ss:hn.translate,m:hn.translate,mm:hn.translate,h:hn.translate,hh:hn.translate,d:"dan",dd:hn.translate,M:"mjesec",MM:hn.translate,y:"godinu",yy:hn.translate},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}}),l.defineLocale("mi",{months:"Kohi-t\u0101te_Hui-tanguru_Pout\u016b-te-rangi_Paenga-wh\u0101wh\u0101_Haratua_Pipiri_H\u014dngoingoi_Here-turi-k\u014dk\u0101_Mahuru_Whiringa-\u0101-nuku_Whiringa-\u0101-rangi_Hakihea".split("_"),monthsShort:"Kohi_Hui_Pou_Pae_Hara_Pipi_H\u014dngoi_Here_Mahu_Whi-nu_Whi-ra_Haki".split("_"),monthsRegex:/(?:['a-z\u0101\u014D\u016B]+\-?){1,3}/i,monthsStrictRegex:/(?:['a-z\u0101\u014D\u016B]+\-?){1,3}/i,monthsShortRegex:/(?:['a-z\u0101\u014D\u016B]+\-?){1,3}/i,monthsShortStrictRegex:/(?:['a-z\u0101\u014D\u016B]+\-?){1,2}/i,weekdays:"R\u0101tapu_Mane_T\u016brei_Wenerei_T\u0101ite_Paraire_H\u0101tarei".split("_"),weekdaysShort:"Ta_Ma_T\u016b_We_T\u0101i_Pa_H\u0101".split("_"),weekdaysMin:"Ta_Ma_T\u016b_We_T\u0101i_Pa_H\u0101".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [i] HH:mm",LLLL:"dddd, D MMMM YYYY [i] HH:mm"},calendar:{sameDay:"[i teie mahana, i] LT",nextDay:"[apopo i] LT",nextWeek:"dddd [i] LT",lastDay:"[inanahi i] LT",lastWeek:"dddd [whakamutunga i] LT",sameElse:"L"},relativeTime:{future:"i roto i %s",past:"%s i mua",s:"te h\u0113kona ruarua",ss:"%d h\u0113kona",m:"he meneti",mm:"%d meneti",h:"te haora",hh:"%d haora",d:"he ra",dd:"%d ra",M:"he marama",MM:"%d marama",y:"he tau",yy:"%d tau"},dayOfMonthOrdinalParse:/\d{1,2}\xba/,ordinal:"%d\xba",week:{dow:1,doy:4}}),l.defineLocale("mk",{months:"\u0458\u0430\u043d\u0443\u0430\u0440\u0438_\u0444\u0435\u0432\u0440\u0443\u0430\u0440\u0438_\u043c\u0430\u0440\u0442_\u0430\u043f\u0440\u0438\u043b_\u043c\u0430\u0458_\u0458\u0443\u043d\u0438_\u0458\u0443\u043b\u0438_\u0430\u0432\u0433\u0443\u0441\u0442_\u0441\u0435\u043f\u0442\u0435\u043c\u0432\u0440\u0438_\u043e\u043a\u0442\u043e\u043c\u0432\u0440\u0438_\u043d\u043e\u0435\u043c\u0432\u0440\u0438_\u0434\u0435\u043a\u0435\u043c\u0432\u0440\u0438".split("_"),monthsShort:"\u0458\u0430\u043d_\u0444\u0435\u0432_\u043c\u0430\u0440_\u0430\u043f\u0440_\u043c\u0430\u0458_\u0458\u0443\u043d_\u0458\u0443\u043b_\u0430\u0432\u0433_\u0441\u0435\u043f_\u043e\u043a\u0442_\u043d\u043e\u0435_\u0434\u0435\u043a".split("_"),weekdays:"\u043d\u0435\u0434\u0435\u043b\u0430_\u043f\u043e\u043d\u0435\u0434\u0435\u043b\u043d\u0438\u043a_\u0432\u0442\u043e\u0440\u043d\u0438\u043a_\u0441\u0440\u0435\u0434\u0430_\u0447\u0435\u0442\u0432\u0440\u0442\u043e\u043a_\u043f\u0435\u0442\u043e\u043a_\u0441\u0430\u0431\u043e\u0442\u0430".split("_"),weekdaysShort:"\u043d\u0435\u0434_\u043f\u043e\u043d_\u0432\u0442\u043e_\u0441\u0440\u0435_\u0447\u0435\u0442_\u043f\u0435\u0442_\u0441\u0430\u0431".split("_"),weekdaysMin:"\u043de_\u043fo_\u0432\u0442_\u0441\u0440_\u0447\u0435_\u043f\u0435_\u0441a".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"D.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY H:mm",LLLL:"dddd, D MMMM YYYY H:mm"},calendar:{sameDay:"[\u0414\u0435\u043d\u0435\u0441 \u0432\u043e] LT",nextDay:"[\u0423\u0442\u0440\u0435 \u0432\u043e] LT",nextWeek:"[\u0412\u043e] dddd [\u0432\u043e] LT",lastDay:"[\u0412\u0447\u0435\u0440\u0430 \u0432\u043e] LT",lastWeek:function(){switch(this.day()){case 0:case 3:case 6:return"[\u0418\u0437\u043c\u0438\u043d\u0430\u0442\u0430\u0442\u0430] dddd [\u0432\u043e] LT";case 1:case 2:case 4:case 5:return"[\u0418\u0437\u043c\u0438\u043d\u0430\u0442\u0438\u043e\u0442] dddd [\u0432\u043e] LT"}},sameElse:"L"},relativeTime:{future:"\u043f\u043e\u0441\u043b\u0435 %s",past:"\u043f\u0440\u0435\u0434 %s",s:"\u043d\u0435\u043a\u043e\u043b\u043a\u0443 \u0441\u0435\u043a\u0443\u043d\u0434\u0438",ss:"%d \u0441\u0435\u043a\u0443\u043d\u0434\u0438",m:"\u043c\u0438\u043d\u0443\u0442\u0430",mm:"%d \u043c\u0438\u043d\u0443\u0442\u0438",h:"\u0447\u0430\u0441",hh:"%d \u0447\u0430\u0441\u0430",d:"\u0434\u0435\u043d",dd:"%d \u0434\u0435\u043d\u0430",M:"\u043c\u0435\u0441\u0435\u0446",MM:"%d \u043c\u0435\u0441\u0435\u0446\u0438",y:"\u0433\u043e\u0434\u0438\u043d\u0430",yy:"%d \u0433\u043e\u0434\u0438\u043d\u0438"},dayOfMonthOrdinalParse:/\d{1,2}-(\u0435\u0432|\u0435\u043d|\u0442\u0438|\u0432\u0438|\u0440\u0438|\u043c\u0438)/,ordinal:function(e){var a=e%10,t=e%100;return 0===e?e+"-\u0435\u0432":0===t?e+"-\u0435\u043d":10<t&&t<20?e+"-\u0442\u0438":1===a?e+"-\u0432\u0438":2===a?e+"-\u0440\u0438":7===a||8===a?e+"-\u043c\u0438":e+"-\u0442\u0438"},week:{dow:1,doy:7}}),l.defineLocale("ml",{months:"\u0d1c\u0d28\u0d41\u0d35\u0d30\u0d3f_\u0d2b\u0d46\u0d2c\u0d4d\u0d30\u0d41\u0d35\u0d30\u0d3f_\u0d2e\u0d3e\u0d7c\u0d1a\u0d4d\u0d1a\u0d4d_\u0d0f\u0d2a\u0d4d\u0d30\u0d3f\u0d7d_\u0d2e\u0d47\u0d2f\u0d4d_\u0d1c\u0d42\u0d7a_\u0d1c\u0d42\u0d32\u0d48_\u0d13\u0d17\u0d38\u0d4d\u0d31\u0d4d\u0d31\u0d4d_\u0d38\u0d46\u0d2a\u0d4d\u0d31\u0d4d\u0d31\u0d02\u0d2c\u0d7c_\u0d12\u0d15\u0d4d\u0d1f\u0d4b\u0d2c\u0d7c_\u0d28\u0d35\u0d02\u0d2c\u0d7c_\u0d21\u0d3f\u0d38\u0d02\u0d2c\u0d7c".split("_"),monthsShort:"\u0d1c\u0d28\u0d41._\u0d2b\u0d46\u0d2c\u0d4d\u0d30\u0d41._\u0d2e\u0d3e\u0d7c._\u0d0f\u0d2a\u0d4d\u0d30\u0d3f._\u0d2e\u0d47\u0d2f\u0d4d_\u0d1c\u0d42\u0d7a_\u0d1c\u0d42\u0d32\u0d48._\u0d13\u0d17._\u0d38\u0d46\u0d2a\u0d4d\u0d31\u0d4d\u0d31._\u0d12\u0d15\u0d4d\u0d1f\u0d4b._\u0d28\u0d35\u0d02._\u0d21\u0d3f\u0d38\u0d02.".split("_"),monthsParseExact:!0,weekdays:"\u0d1e\u0d3e\u0d2f\u0d31\u0d3e\u0d34\u0d4d\u0d1a_\u0d24\u0d3f\u0d19\u0d4d\u0d15\u0d33\u0d3e\u0d34\u0d4d\u0d1a_\u0d1a\u0d4a\u0d35\u0d4d\u0d35\u0d3e\u0d34\u0d4d\u0d1a_\u0d2c\u0d41\u0d27\u0d28\u0d3e\u0d34\u0d4d\u0d1a_\u0d35\u0d4d\u0d2f\u0d3e\u0d34\u0d3e\u0d34\u0d4d\u0d1a_\u0d35\u0d46\u0d33\u0d4d\u0d33\u0d3f\u0d2f\u0d3e\u0d34\u0d4d\u0d1a_\u0d36\u0d28\u0d3f\u0d2f\u0d3e\u0d34\u0d4d\u0d1a".split("_"),weekdaysShort:"\u0d1e\u0d3e\u0d2f\u0d7c_\u0d24\u0d3f\u0d19\u0d4d\u0d15\u0d7e_\u0d1a\u0d4a\u0d35\u0d4d\u0d35_\u0d2c\u0d41\u0d27\u0d7b_\u0d35\u0d4d\u0d2f\u0d3e\u0d34\u0d02_\u0d35\u0d46\u0d33\u0d4d\u0d33\u0d3f_\u0d36\u0d28\u0d3f".split("_"),weekdaysMin:"\u0d1e\u0d3e_\u0d24\u0d3f_\u0d1a\u0d4a_\u0d2c\u0d41_\u0d35\u0d4d\u0d2f\u0d3e_\u0d35\u0d46_\u0d36".split("_"),longDateFormat:{LT:"A h:mm -\u0d28\u0d41",LTS:"A h:mm:ss -\u0d28\u0d41",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm -\u0d28\u0d41",LLLL:"dddd, D MMMM YYYY, A h:mm -\u0d28\u0d41"},calendar:{sameDay:"[\u0d07\u0d28\u0d4d\u0d28\u0d4d] LT",nextDay:"[\u0d28\u0d3e\u0d33\u0d46] LT",nextWeek:"dddd, LT",lastDay:"[\u0d07\u0d28\u0d4d\u0d28\u0d32\u0d46] LT",lastWeek:"[\u0d15\u0d34\u0d3f\u0d1e\u0d4d\u0d1e] dddd, LT",sameElse:"L"},relativeTime:{future:"%s \u0d15\u0d34\u0d3f\u0d1e\u0d4d\u0d1e\u0d4d",past:"%s \u0d2e\u0d41\u0d7b\u0d2a\u0d4d",s:"\u0d05\u0d7d\u0d2a \u0d28\u0d3f\u0d2e\u0d3f\u0d37\u0d19\u0d4d\u0d19\u0d7e",ss:"%d \u0d38\u0d46\u0d15\u0d4d\u0d15\u0d7b\u0d21\u0d4d",m:"\u0d12\u0d30\u0d41 \u0d2e\u0d3f\u0d28\u0d3f\u0d31\u0d4d\u0d31\u0d4d",mm:"%d \u0d2e\u0d3f\u0d28\u0d3f\u0d31\u0d4d\u0d31\u0d4d",h:"\u0d12\u0d30\u0d41 \u0d2e\u0d23\u0d3f\u0d15\u0d4d\u0d15\u0d42\u0d7c",hh:"%d \u0d2e\u0d23\u0d3f\u0d15\u0d4d\u0d15\u0d42\u0d7c",d:"\u0d12\u0d30\u0d41 \u0d26\u0d3f\u0d35\u0d38\u0d02",dd:"%d \u0d26\u0d3f\u0d35\u0d38\u0d02",M:"\u0d12\u0d30\u0d41 \u0d2e\u0d3e\u0d38\u0d02",MM:"%d \u0d2e\u0d3e\u0d38\u0d02",y:"\u0d12\u0d30\u0d41 \u0d35\u0d7c\u0d37\u0d02",yy:"%d \u0d35\u0d7c\u0d37\u0d02"},meridiemParse:/\u0d30\u0d3e\u0d24\u0d4d\u0d30\u0d3f|\u0d30\u0d3e\u0d35\u0d3f\u0d32\u0d46|\u0d09\u0d1a\u0d4d\u0d1a \u0d15\u0d34\u0d3f\u0d1e\u0d4d\u0d1e\u0d4d|\u0d35\u0d48\u0d15\u0d41\u0d28\u0d4d\u0d28\u0d47\u0d30\u0d02|\u0d30\u0d3e\u0d24\u0d4d\u0d30\u0d3f/i,meridiemHour:function(e,a){return 12===e&&(e=0),"\u0d30\u0d3e\u0d24\u0d4d\u0d30\u0d3f"===a&&4<=e||"\u0d09\u0d1a\u0d4d\u0d1a \u0d15\u0d34\u0d3f\u0d1e\u0d4d\u0d1e\u0d4d"===a||"\u0d35\u0d48\u0d15\u0d41\u0d28\u0d4d\u0d28\u0d47\u0d30\u0d02"===a?e+12:e},meridiem:function(e,a,t){return e<4?"\u0d30\u0d3e\u0d24\u0d4d\u0d30\u0d3f":e<12?"\u0d30\u0d3e\u0d35\u0d3f\u0d32\u0d46":e<17?"\u0d09\u0d1a\u0d4d\u0d1a \u0d15\u0d34\u0d3f\u0d1e\u0d4d\u0d1e\u0d4d":e<20?"\u0d35\u0d48\u0d15\u0d41\u0d28\u0d4d\u0d28\u0d47\u0d30\u0d02":"\u0d30\u0d3e\u0d24\u0d4d\u0d30\u0d3f"}}),l.defineLocale("mn",{months:"\u041d\u044d\u0433\u0434\u04af\u0433\u044d\u044d\u0440 \u0441\u0430\u0440_\u0425\u043e\u0451\u0440\u0434\u0443\u0433\u0430\u0430\u0440 \u0441\u0430\u0440_\u0413\u0443\u0440\u0430\u0432\u0434\u0443\u0433\u0430\u0430\u0440 \u0441\u0430\u0440_\u0414\u04e9\u0440\u04e9\u0432\u0434\u04af\u0433\u044d\u044d\u0440 \u0441\u0430\u0440_\u0422\u0430\u0432\u0434\u0443\u0433\u0430\u0430\u0440 \u0441\u0430\u0440_\u0417\u0443\u0440\u0433\u0430\u0434\u0443\u0433\u0430\u0430\u0440 \u0441\u0430\u0440_\u0414\u043e\u043b\u0434\u0443\u0433\u0430\u0430\u0440 \u0441\u0430\u0440_\u041d\u0430\u0439\u043c\u0434\u0443\u0433\u0430\u0430\u0440 \u0441\u0430\u0440_\u0415\u0441\u0434\u04af\u0433\u044d\u044d\u0440 \u0441\u0430\u0440_\u0410\u0440\u0430\u0432\u0434\u0443\u0433\u0430\u0430\u0440 \u0441\u0430\u0440_\u0410\u0440\u0432\u0430\u043d \u043d\u044d\u0433\u0434\u04af\u0433\u044d\u044d\u0440 \u0441\u0430\u0440_\u0410\u0440\u0432\u0430\u043d \u0445\u043e\u0451\u0440\u0434\u0443\u0433\u0430\u0430\u0440 \u0441\u0430\u0440".split("_"),monthsShort:"1 \u0441\u0430\u0440_2 \u0441\u0430\u0440_3 \u0441\u0430\u0440_4 \u0441\u0430\u0440_5 \u0441\u0430\u0440_6 \u0441\u0430\u0440_7 \u0441\u0430\u0440_8 \u0441\u0430\u0440_9 \u0441\u0430\u0440_10 \u0441\u0430\u0440_11 \u0441\u0430\u0440_12 \u0441\u0430\u0440".split("_"),monthsParseExact:!0,weekdays:"\u041d\u044f\u043c_\u0414\u0430\u0432\u0430\u0430_\u041c\u044f\u0433\u043c\u0430\u0440_\u041b\u0445\u0430\u0433\u0432\u0430_\u041f\u04af\u0440\u044d\u0432_\u0411\u0430\u0430\u0441\u0430\u043d_\u0411\u044f\u043c\u0431\u0430".split("_"),weekdaysShort:"\u041d\u044f\u043c_\u0414\u0430\u0432_\u041c\u044f\u0433_\u041b\u0445\u0430_\u041f\u04af\u0440_\u0411\u0430\u0430_\u0411\u044f\u043c".split("_"),weekdaysMin:"\u041d\u044f_\u0414\u0430_\u041c\u044f_\u041b\u0445_\u041f\u04af_\u0411\u0430_\u0411\u044f".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"YYYY \u043e\u043d\u044b MMMM\u044b\u043d D",LLL:"YYYY \u043e\u043d\u044b MMMM\u044b\u043d D HH:mm",LLLL:"dddd, YYYY \u043e\u043d\u044b MMMM\u044b\u043d D HH:mm"},meridiemParse:/\u04ae\u04e8|\u04ae\u0425/i,isPM:function(e){return"\u04ae\u0425"===e},meridiem:function(e,a,t){return e<12?"\u04ae\u04e8":"\u04ae\u0425"},calendar:{sameDay:"[\u04e8\u043d\u04e9\u04e9\u0434\u04e9\u0440] LT",nextDay:"[\u041c\u0430\u0440\u0433\u0430\u0430\u0448] LT",nextWeek:"[\u0418\u0440\u044d\u0445] dddd LT",lastDay:"[\u04e8\u0447\u0438\u0433\u0434\u04e9\u0440] LT",lastWeek:"[\u04e8\u043d\u0433\u04e9\u0440\u0441\u04e9\u043d] dddd LT",sameElse:"L"},relativeTime:{future:"%s \u0434\u0430\u0440\u0430\u0430",past:"%s \u04e9\u043c\u043d\u04e9",s:Ln,ss:Ln,m:Ln,mm:Ln,h:Ln,hh:Ln,d:Ln,dd:Ln,M:Ln,MM:Ln,y:Ln,yy:Ln},dayOfMonthOrdinalParse:/\d{1,2} \u04e9\u0434\u04e9\u0440/,ordinal:function(e,a){switch(a){case"d":case"D":case"DDD":return e+" \u04e9\u0434\u04e9\u0440";default:return e}}});var cn={1:"\u0967",2:"\u0968",3:"\u0969",4:"\u096a",5:"\u096b",6:"\u096c",7:"\u096d",8:"\u096e",9:"\u096f",0:"\u0966"},Yn={"\u0967":"1","\u0968":"2","\u0969":"3","\u096a":"4","\u096b":"5","\u096c":"6","\u096d":"7","\u096e":"8","\u096f":"9","\u0966":"0"};function yn(e,a,t,s){var n="";if(a)switch(t){case"s":n="\u0915\u093e\u0939\u0940 \u0938\u0947\u0915\u0902\u0926";break;case"ss":n="%d \u0938\u0947\u0915\u0902\u0926";break;case"m":n="\u090f\u0915 \u092e\u093f\u0928\u093f\u091f";break;case"mm":n="%d \u092e\u093f\u0928\u093f\u091f\u0947";break;case"h":n="\u090f\u0915 \u0924\u093e\u0938";break;case"hh":n="%d \u0924\u093e\u0938";break;case"d":n="\u090f\u0915 \u0926\u093f\u0935\u0938";break;case"dd":n="%d \u0926\u093f\u0935\u0938";break;case"M":n="\u090f\u0915 \u092e\u0939\u093f\u0928\u093e";break;case"MM":n="%d \u092e\u0939\u093f\u0928\u0947";break;case"y":n="\u090f\u0915 \u0935\u0930\u094d\u0937";break;case"yy":n="%d \u0935\u0930\u094d\u0937\u0947";break}else switch(t){case"s":n="\u0915\u093e\u0939\u0940 \u0938\u0947\u0915\u0902\u0926\u093e\u0902";break;case"ss":n="%d \u0938\u0947\u0915\u0902\u0926\u093e\u0902";break;case"m":n="\u090f\u0915\u093e \u092e\u093f\u0928\u093f\u091f\u093e";break;case"mm":n="%d \u092e\u093f\u0928\u093f\u091f\u093e\u0902";break;case"h":n="\u090f\u0915\u093e \u0924\u093e\u0938\u093e";break;case"hh":n="%d \u0924\u093e\u0938\u093e\u0902";break;case"d":n="\u090f\u0915\u093e \u0926\u093f\u0935\u0938\u093e";break;case"dd":n="%d \u0926\u093f\u0935\u0938\u093e\u0902";break;case"M":n="\u090f\u0915\u093e \u092e\u0939\u093f\u0928\u094d\u092f\u093e";break;case"MM":n="%d \u092e\u0939\u093f\u0928\u094d\u092f\u093e\u0902";break;case"y":n="\u090f\u0915\u093e \u0935\u0930\u094d\u0937\u093e";break;case"yy":n="%d \u0935\u0930\u094d\u0937\u093e\u0902";break}return n.replace(/%d/i,e)}l.defineLocale("mr",{months:"\u091c\u093e\u0928\u0947\u0935\u093e\u0930\u0940_\u092b\u0947\u092c\u094d\u0930\u0941\u0935\u093e\u0930\u0940_\u092e\u093e\u0930\u094d\u091a_\u090f\u092a\u094d\u0930\u093f\u0932_\u092e\u0947_\u091c\u0942\u0928_\u091c\u0941\u0932\u0948_\u0911\u0917\u0938\u094d\u091f_\u0938\u092a\u094d\u091f\u0947\u0902\u092c\u0930_\u0911\u0915\u094d\u091f\u094b\u092c\u0930_\u0928\u094b\u0935\u094d\u0939\u0947\u0902\u092c\u0930_\u0921\u093f\u0938\u0947\u0902\u092c\u0930".split("_"),monthsShort:"\u091c\u093e\u0928\u0947._\u092b\u0947\u092c\u094d\u0930\u0941._\u092e\u093e\u0930\u094d\u091a._\u090f\u092a\u094d\u0930\u093f._\u092e\u0947._\u091c\u0942\u0928._\u091c\u0941\u0932\u0948._\u0911\u0917._\u0938\u092a\u094d\u091f\u0947\u0902._\u0911\u0915\u094d\u091f\u094b._\u0928\u094b\u0935\u094d\u0939\u0947\u0902._\u0921\u093f\u0938\u0947\u0902.".split("_"),monthsParseExact:!0,weekdays:"\u0930\u0935\u093f\u0935\u093e\u0930_\u0938\u094b\u092e\u0935\u093e\u0930_\u092e\u0902\u0917\u0933\u0935\u093e\u0930_\u092c\u0941\u0927\u0935\u093e\u0930_\u0917\u0941\u0930\u0942\u0935\u093e\u0930_\u0936\u0941\u0915\u094d\u0930\u0935\u093e\u0930_\u0936\u0928\u093f\u0935\u093e\u0930".split("_"),weekdaysShort:"\u0930\u0935\u093f_\u0938\u094b\u092e_\u092e\u0902\u0917\u0933_\u092c\u0941\u0927_\u0917\u0941\u0930\u0942_\u0936\u0941\u0915\u094d\u0930_\u0936\u0928\u093f".split("_"),weekdaysMin:"\u0930_\u0938\u094b_\u092e\u0902_\u092c\u0941_\u0917\u0941_\u0936\u0941_\u0936".split("_"),longDateFormat:{LT:"A h:mm \u0935\u093e\u091c\u0924\u093e",LTS:"A h:mm:ss \u0935\u093e\u091c\u0924\u093e",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm \u0935\u093e\u091c\u0924\u093e",LLLL:"dddd, D MMMM YYYY, A h:mm \u0935\u093e\u091c\u0924\u093e"},calendar:{sameDay:"[\u0906\u091c] LT",nextDay:"[\u0909\u0926\u094d\u092f\u093e] LT",nextWeek:"dddd, LT",lastDay:"[\u0915\u093e\u0932] LT",lastWeek:"[\u092e\u093e\u0917\u0940\u0932] dddd, LT",sameElse:"L"},relativeTime:{future:"%s\u092e\u0927\u094d\u092f\u0947",past:"%s\u092a\u0942\u0930\u094d\u0935\u0940",s:yn,ss:yn,m:yn,mm:yn,h:yn,hh:yn,d:yn,dd:yn,M:yn,MM:yn,y:yn,yy:yn},preparse:function(e){return e.replace(/[\u0967\u0968\u0969\u096a\u096b\u096c\u096d\u096e\u096f\u0966]/g,function(e){return Yn[e]})},postformat:function(e){return e.replace(/\d/g,function(e){return cn[e]})},meridiemParse:/\u0930\u093e\u0924\u094d\u0930\u0940|\u0938\u0915\u093e\u0933\u0940|\u0926\u0941\u092a\u093e\u0930\u0940|\u0938\u093e\u092f\u0902\u0915\u093e\u0933\u0940/,meridiemHour:function(e,a){return 12===e&&(e=0),"\u0930\u093e\u0924\u094d\u0930\u0940"===a?e<4?e:e+12:"\u0938\u0915\u093e\u0933\u0940"===a?e:"\u0926\u0941\u092a\u093e\u0930\u0940"===a?10<=e?e:e+12:"\u0938\u093e\u092f\u0902\u0915\u093e\u0933\u0940"===a?e+12:void 0},meridiem:function(e,a,t){return e<4?"\u0930\u093e\u0924\u094d\u0930\u0940":e<10?"\u0938\u0915\u093e\u0933\u0940":e<17?"\u0926\u0941\u092a\u093e\u0930\u0940":e<20?"\u0938\u093e\u092f\u0902\u0915\u093e\u0933\u0940":"\u0930\u093e\u0924\u094d\u0930\u0940"},week:{dow:0,doy:6}}),l.defineLocale("ms-my",{months:"Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember".split("_"),monthsShort:"Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis".split("_"),weekdays:"Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu".split("_"),weekdaysShort:"Ahd_Isn_Sel_Rab_Kha_Jum_Sab".split("_"),weekdaysMin:"Ah_Is_Sl_Rb_Km_Jm_Sb".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [pukul] HH.mm",LLLL:"dddd, D MMMM YYYY [pukul] HH.mm"},meridiemParse:/pagi|tengahari|petang|malam/,meridiemHour:function(e,a){return 12===e&&(e=0),"pagi"===a?e:"tengahari"===a?11<=e?e:e+12:"petang"===a||"malam"===a?e+12:void 0},meridiem:function(e,a,t){return e<11?"pagi":e<15?"tengahari":e<19?"petang":"malam"},calendar:{sameDay:"[Hari ini pukul] LT",nextDay:"[Esok pukul] LT",nextWeek:"dddd [pukul] LT",lastDay:"[Kelmarin pukul] LT",lastWeek:"dddd [lepas pukul] LT",sameElse:"L"},relativeTime:{future:"dalam %s",past:"%s yang lepas",s:"beberapa saat",ss:"%d saat",m:"seminit",mm:"%d minit",h:"sejam",hh:"%d jam",d:"sehari",dd:"%d hari",M:"sebulan",MM:"%d bulan",y:"setahun",yy:"%d tahun"},week:{dow:1,doy:7}}),l.defineLocale("ms",{months:"Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember".split("_"),monthsShort:"Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis".split("_"),weekdays:"Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu".split("_"),weekdaysShort:"Ahd_Isn_Sel_Rab_Kha_Jum_Sab".split("_"),weekdaysMin:"Ah_Is_Sl_Rb_Km_Jm_Sb".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [pukul] HH.mm",LLLL:"dddd, D MMMM YYYY [pukul] HH.mm"},meridiemParse:/pagi|tengahari|petang|malam/,meridiemHour:function(e,a){return 12===e&&(e=0),"pagi"===a?e:"tengahari"===a?11<=e?e:e+12:"petang"===a||"malam"===a?e+12:void 0},meridiem:function(e,a,t){return e<11?"pagi":e<15?"tengahari":e<19?"petang":"malam"},calendar:{sameDay:"[Hari ini pukul] LT",nextDay:"[Esok pukul] LT",nextWeek:"dddd [pukul] LT",lastDay:"[Kelmarin pukul] LT",lastWeek:"dddd [lepas pukul] LT",sameElse:"L"},relativeTime:{future:"dalam %s",past:"%s yang lepas",s:"beberapa saat",ss:"%d saat",m:"seminit",mm:"%d minit",h:"sejam",hh:"%d jam",d:"sehari",dd:"%d hari",M:"sebulan",MM:"%d bulan",y:"setahun",yy:"%d tahun"},week:{dow:1,doy:7}}),l.defineLocale("mt",{months:"Jannar_Frar_Marzu_April_Mejju_\u0120unju_Lulju_Awwissu_Settembru_Ottubru_Novembru_Di\u010bembru".split("_"),monthsShort:"Jan_Fra_Mar_Apr_Mej_\u0120un_Lul_Aww_Set_Ott_Nov_Di\u010b".split("_"),weekdays:"Il-\u0126add_It-Tnejn_It-Tlieta_L-Erbg\u0127a_Il-\u0126amis_Il-\u0120img\u0127a_Is-Sibt".split("_"),weekdaysShort:"\u0126ad_Tne_Tli_Erb_\u0126am_\u0120im_Sib".split("_"),weekdaysMin:"\u0126a_Tn_Tl_Er_\u0126a_\u0120i_Si".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Illum fil-]LT",nextDay:"[G\u0127ada fil-]LT",nextWeek:"dddd [fil-]LT",lastDay:"[Il-biera\u0127 fil-]LT",lastWeek:"dddd [li g\u0127adda] [fil-]LT",sameElse:"L"},relativeTime:{future:"f\u2019 %s",past:"%s ilu",s:"ftit sekondi",ss:"%d sekondi",m:"minuta",mm:"%d minuti",h:"sieg\u0127a",hh:"%d sieg\u0127at",d:"\u0121urnata",dd:"%d \u0121ranet",M:"xahar",MM:"%d xhur",y:"sena",yy:"%d sni"},dayOfMonthOrdinalParse:/\d{1,2}\xba/,ordinal:"%d\xba",week:{dow:1,doy:4}});var fn={1:"\u1041",2:"\u1042",3:"\u1043",4:"\u1044",5:"\u1045",6:"\u1046",7:"\u1047",8:"\u1048",9:"\u1049",0:"\u1040"},kn={"\u1041":"1","\u1042":"2","\u1043":"3","\u1044":"4","\u1045":"5","\u1046":"6","\u1047":"7","\u1048":"8","\u1049":"9","\u1040":"0"};l.defineLocale("my",{months:"\u1007\u1014\u103a\u1014\u101d\u102b\u101b\u102e_\u1016\u1031\u1016\u1031\u102c\u103a\u101d\u102b\u101b\u102e_\u1019\u1010\u103a_\u1027\u1015\u103c\u102e_\u1019\u1031_\u1007\u103d\u1014\u103a_\u1007\u1030\u101c\u102d\u102f\u1004\u103a_\u101e\u103c\u1002\u102f\u1010\u103a_\u1005\u1000\u103a\u1010\u1004\u103a\u1018\u102c_\u1021\u1031\u102c\u1000\u103a\u1010\u102d\u102f\u1018\u102c_\u1014\u102d\u102f\u101d\u1004\u103a\u1018\u102c_\u1012\u102e\u1007\u1004\u103a\u1018\u102c".split("_"),monthsShort:"\u1007\u1014\u103a_\u1016\u1031_\u1019\u1010\u103a_\u1015\u103c\u102e_\u1019\u1031_\u1007\u103d\u1014\u103a_\u101c\u102d\u102f\u1004\u103a_\u101e\u103c_\u1005\u1000\u103a_\u1021\u1031\u102c\u1000\u103a_\u1014\u102d\u102f_\u1012\u102e".split("_"),weekdays:"\u1010\u1014\u1004\u103a\u1039\u1002\u1014\u103d\u1031_\u1010\u1014\u1004\u103a\u1039\u101c\u102c_\u1021\u1004\u103a\u1039\u1002\u102b_\u1017\u102f\u1012\u1039\u1013\u101f\u1030\u1038_\u1000\u103c\u102c\u101e\u1015\u1010\u1031\u1038_\u101e\u1031\u102c\u1000\u103c\u102c_\u1005\u1014\u1031".split("_"),weekdaysShort:"\u1014\u103d\u1031_\u101c\u102c_\u1002\u102b_\u101f\u1030\u1038_\u1000\u103c\u102c_\u101e\u1031\u102c_\u1014\u1031".split("_"),weekdaysMin:"\u1014\u103d\u1031_\u101c\u102c_\u1002\u102b_\u101f\u1030\u1038_\u1000\u103c\u102c_\u101e\u1031\u102c_\u1014\u1031".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[\u101a\u1014\u1031.] LT [\u1019\u103e\u102c]",nextDay:"[\u1019\u1014\u1000\u103a\u1016\u103c\u1014\u103a] LT [\u1019\u103e\u102c]",nextWeek:"dddd LT [\u1019\u103e\u102c]",lastDay:"[\u1019\u1014\u1031.\u1000] LT [\u1019\u103e\u102c]",lastWeek:"[\u1015\u103c\u102e\u1038\u1001\u1032\u1037\u101e\u1031\u102c] dddd LT [\u1019\u103e\u102c]",sameElse:"L"},relativeTime:{future:"\u101c\u102c\u1019\u100a\u103a\u1037 %s \u1019\u103e\u102c",past:"\u101c\u103d\u1014\u103a\u1001\u1032\u1037\u101e\u1031\u102c %s \u1000",s:"\u1005\u1000\u1039\u1000\u1014\u103a.\u1021\u1014\u100a\u103a\u1038\u1004\u101a\u103a",ss:"%d \u1005\u1000\u1039\u1000\u1014\u1037\u103a",m:"\u1010\u1005\u103a\u1019\u102d\u1014\u1005\u103a",mm:"%d \u1019\u102d\u1014\u1005\u103a",h:"\u1010\u1005\u103a\u1014\u102c\u101b\u102e",hh:"%d \u1014\u102c\u101b\u102e",d:"\u1010\u1005\u103a\u101b\u1000\u103a",dd:"%d \u101b\u1000\u103a",M:"\u1010\u1005\u103a\u101c",MM:"%d \u101c",y:"\u1010\u1005\u103a\u1014\u103e\u1005\u103a",yy:"%d \u1014\u103e\u1005\u103a"},preparse:function(e){return e.replace(/[\u1041\u1042\u1043\u1044\u1045\u1046\u1047\u1048\u1049\u1040]/g,function(e){return kn[e]})},postformat:function(e){return e.replace(/\d/g,function(e){return fn[e]})},week:{dow:1,doy:4}}),l.defineLocale("nb",{months:"januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember".split("_"),monthsShort:"jan._feb._mars_april_mai_juni_juli_aug._sep._okt._nov._des.".split("_"),monthsParseExact:!0,weekdays:"s\xf8ndag_mandag_tirsdag_onsdag_torsdag_fredag_l\xf8rdag".split("_"),weekdaysShort:"s\xf8._ma._ti._on._to._fr._l\xf8.".split("_"),weekdaysMin:"s\xf8_ma_ti_on_to_fr_l\xf8".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY [kl.] HH:mm",LLLL:"dddd D. MMMM YYYY [kl.] HH:mm"},calendar:{sameDay:"[i dag kl.] LT",nextDay:"[i morgen kl.] LT",nextWeek:"dddd [kl.] LT",lastDay:"[i g\xe5r kl.] LT",lastWeek:"[forrige] dddd [kl.] LT",sameElse:"L"},relativeTime:{future:"om %s",past:"%s siden",s:"noen sekunder",ss:"%d sekunder",m:"ett minutt",mm:"%d minutter",h:"en time",hh:"%d timer",d:"en dag",dd:"%d dager",M:"en m\xe5ned",MM:"%d m\xe5neder",y:"ett \xe5r",yy:"%d \xe5r"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}});var pn={1:"\u0967",2:"\u0968",3:"\u0969",4:"\u096a",5:"\u096b",6:"\u096c",7:"\u096d",8:"\u096e",9:"\u096f",0:"\u0966"},Dn={"\u0967":"1","\u0968":"2","\u0969":"3","\u096a":"4","\u096b":"5","\u096c":"6","\u096d":"7","\u096e":"8","\u096f":"9","\u0966":"0"};l.defineLocale("ne",{months:"\u091c\u0928\u0935\u0930\u0940_\u092b\u0947\u092c\u094d\u0930\u0941\u0935\u0930\u0940_\u092e\u093e\u0930\u094d\u091a_\u0905\u092a\u094d\u0930\u093f\u0932_\u092e\u0908_\u091c\u0941\u0928_\u091c\u0941\u0932\u093e\u0908_\u0905\u0917\u0937\u094d\u091f_\u0938\u0947\u092a\u094d\u091f\u0947\u092e\u094d\u092c\u0930_\u0905\u0915\u094d\u091f\u094b\u092c\u0930_\u0928\u094b\u092d\u0947\u092e\u094d\u092c\u0930_\u0921\u093f\u0938\u0947\u092e\u094d\u092c\u0930".split("_"),monthsShort:"\u091c\u0928._\u092b\u0947\u092c\u094d\u0930\u0941._\u092e\u093e\u0930\u094d\u091a_\u0905\u092a\u094d\u0930\u093f._\u092e\u0908_\u091c\u0941\u0928_\u091c\u0941\u0932\u093e\u0908._\u0905\u0917._\u0938\u0947\u092a\u094d\u091f._\u0905\u0915\u094d\u091f\u094b._\u0928\u094b\u092d\u0947._\u0921\u093f\u0938\u0947.".split("_"),monthsParseExact:!0,weekdays:"\u0906\u0907\u0924\u092c\u093e\u0930_\u0938\u094b\u092e\u092c\u093e\u0930_\u092e\u0919\u094d\u0917\u0932\u092c\u093e\u0930_\u092c\u0941\u0927\u092c\u093e\u0930_\u092c\u093f\u0939\u093f\u092c\u093e\u0930_\u0936\u0941\u0915\u094d\u0930\u092c\u093e\u0930_\u0936\u0928\u093f\u092c\u093e\u0930".split("_"),weekdaysShort:"\u0906\u0907\u0924._\u0938\u094b\u092e._\u092e\u0919\u094d\u0917\u0932._\u092c\u0941\u0927._\u092c\u093f\u0939\u093f._\u0936\u0941\u0915\u094d\u0930._\u0936\u0928\u093f.".split("_"),weekdaysMin:"\u0906._\u0938\u094b._\u092e\u0902._\u092c\u0941._\u092c\u093f._\u0936\u0941._\u0936.".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"A\u0915\u094b h:mm \u092c\u091c\u0947",LTS:"A\u0915\u094b h:mm:ss \u092c\u091c\u0947",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A\u0915\u094b h:mm \u092c\u091c\u0947",LLLL:"dddd, D MMMM YYYY, A\u0915\u094b h:mm \u092c\u091c\u0947"},preparse:function(e){return e.replace(/[\u0967\u0968\u0969\u096a\u096b\u096c\u096d\u096e\u096f\u0966]/g,function(e){return Dn[e]})},postformat:function(e){return e.replace(/\d/g,function(e){return pn[e]})},meridiemParse:/\u0930\u093e\u0924\u093f|\u092c\u093f\u0939\u093e\u0928|\u0926\u093f\u0909\u0901\u0938\u094b|\u0938\u093e\u0901\u091d/,meridiemHour:function(e,a){return 12===e&&(e=0),"\u0930\u093e\u0924\u093f"===a?e<4?e:e+12:"\u092c\u093f\u0939\u093e\u0928"===a?e:"\u0926\u093f\u0909\u0901\u0938\u094b"===a?10<=e?e:e+12:"\u0938\u093e\u0901\u091d"===a?e+12:void 0},meridiem:function(e,a,t){return e<3?"\u0930\u093e\u0924\u093f":e<12?"\u092c\u093f\u0939\u093e\u0928":e<16?"\u0926\u093f\u0909\u0901\u0938\u094b":e<20?"\u0938\u093e\u0901\u091d":"\u0930\u093e\u0924\u093f"},calendar:{sameDay:"[\u0906\u091c] LT",nextDay:"[\u092d\u094b\u0932\u093f] LT",nextWeek:"[\u0906\u0909\u0901\u0926\u094b] dddd[,] LT",lastDay:"[\u0939\u093f\u091c\u094b] LT",lastWeek:"[\u0917\u090f\u0915\u094b] dddd[,] LT",sameElse:"L"},relativeTime:{future:"%s\u092e\u093e",past:"%s \u0905\u0917\u093e\u0921\u093f",s:"\u0915\u0947\u0939\u0940 \u0915\u094d\u0937\u0923",ss:"%d \u0938\u0947\u0915\u0947\u0923\u094d\u0921",m:"\u090f\u0915 \u092e\u093f\u0928\u0947\u091f",mm:"%d \u092e\u093f\u0928\u0947\u091f",h:"\u090f\u0915 \u0918\u0923\u094d\u091f\u093e",hh:"%d \u0918\u0923\u094d\u091f\u093e",d:"\u090f\u0915 \u0926\u093f\u0928",dd:"%d \u0926\u093f\u0928",M:"\u090f\u0915 \u092e\u0939\u093f\u0928\u093e",MM:"%d \u092e\u0939\u093f\u0928\u093e",y:"\u090f\u0915 \u092c\u0930\u094d\u0937",yy:"%d \u092c\u0930\u094d\u0937"},week:{dow:0,doy:6}});var Tn="jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.".split("_"),gn="jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec".split("_"),wn=[/^jan/i,/^feb/i,/^maart|mrt.?$/i,/^apr/i,/^mei$/i,/^jun[i.]?$/i,/^jul[i.]?$/i,/^aug/i,/^sep/i,/^okt/i,/^nov/i,/^dec/i],vn=/^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december|jan\.?|feb\.?|mrt\.?|apr\.?|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i;l.defineLocale("nl-be",{months:"januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december".split("_"),monthsShort:function(e,a){return e?/-MMM-/.test(a)?gn[e.month()]:Tn[e.month()]:Tn},monthsRegex:vn,monthsShortRegex:vn,monthsStrictRegex:/^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december)/i,monthsShortStrictRegex:/^(jan\.?|feb\.?|mrt\.?|apr\.?|mei|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i,monthsParse:wn,longMonthsParse:wn,shortMonthsParse:wn,weekdays:"zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag".split("_"),weekdaysShort:"zo._ma._di._wo._do._vr._za.".split("_"),weekdaysMin:"zo_ma_di_wo_do_vr_za".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[vandaag om] LT",nextDay:"[morgen om] LT",nextWeek:"dddd [om] LT",lastDay:"[gisteren om] LT",lastWeek:"[afgelopen] dddd [om] LT",sameElse:"L"},relativeTime:{future:"over %s",past:"%s geleden",s:"een paar seconden",ss:"%d seconden",m:"\xe9\xe9n minuut",mm:"%d minuten",h:"\xe9\xe9n uur",hh:"%d uur",d:"\xe9\xe9n dag",dd:"%d dagen",M:"\xe9\xe9n maand",MM:"%d maanden",y:"\xe9\xe9n jaar",yy:"%d jaar"},dayOfMonthOrdinalParse:/\d{1,2}(ste|de)/,ordinal:function(e){return e+(1===e||8===e||20<=e?"ste":"de")},week:{dow:1,doy:4}});var Hn="jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.".split("_"),Sn="jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec".split("_"),bn=[/^jan/i,/^feb/i,/^maart|mrt.?$/i,/^apr/i,/^mei$/i,/^jun[i.]?$/i,/^jul[i.]?$/i,/^aug/i,/^sep/i,/^okt/i,/^nov/i,/^dec/i],jn=/^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december|jan\.?|feb\.?|mrt\.?|apr\.?|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i;l.defineLocale("nl",{months:"januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december".split("_"),monthsShort:function(e,a){return e?/-MMM-/.test(a)?Sn[e.month()]:Hn[e.month()]:Hn},monthsRegex:jn,monthsShortRegex:jn,monthsStrictRegex:/^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december)/i,monthsShortStrictRegex:/^(jan\.?|feb\.?|mrt\.?|apr\.?|mei|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i,monthsParse:bn,longMonthsParse:bn,shortMonthsParse:bn,weekdays:"zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag".split("_"),weekdaysShort:"zo._ma._di._wo._do._vr._za.".split("_"),weekdaysMin:"zo_ma_di_wo_do_vr_za".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD-MM-YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[vandaag om] LT",nextDay:"[morgen om] LT",nextWeek:"dddd [om] LT",lastDay:"[gisteren om] LT",lastWeek:"[afgelopen] dddd [om] LT",sameElse:"L"},relativeTime:{future:"over %s",past:"%s geleden",s:"een paar seconden",ss:"%d seconden",m:"\xe9\xe9n minuut",mm:"%d minuten",h:"\xe9\xe9n uur",hh:"%d uur",d:"\xe9\xe9n dag",dd:"%d dagen",M:"\xe9\xe9n maand",MM:"%d maanden",y:"\xe9\xe9n jaar",yy:"%d jaar"},dayOfMonthOrdinalParse:/\d{1,2}(ste|de)/,ordinal:function(e){return e+(1===e||8===e||20<=e?"ste":"de")},week:{dow:1,doy:4}}),l.defineLocale("nn",{months:"januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember".split("_"),monthsShort:"jan_feb_mar_apr_mai_jun_jul_aug_sep_okt_nov_des".split("_"),weekdays:"sundag_m\xe5ndag_tysdag_onsdag_torsdag_fredag_laurdag".split("_"),weekdaysShort:"sun_m\xe5n_tys_ons_tor_fre_lau".split("_"),weekdaysMin:"su_m\xe5_ty_on_to_fr_l\xf8".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY [kl.] H:mm",LLLL:"dddd D. MMMM YYYY [kl.] HH:mm"},calendar:{sameDay:"[I dag klokka] LT",nextDay:"[I morgon klokka] LT",nextWeek:"dddd [klokka] LT",lastDay:"[I g\xe5r klokka] LT",lastWeek:"[F\xf8reg\xe5ande] dddd [klokka] LT",sameElse:"L"},relativeTime:{future:"om %s",past:"%s sidan",s:"nokre sekund",ss:"%d sekund",m:"eit minutt",mm:"%d minutt",h:"ein time",hh:"%d timar",d:"ein dag",dd:"%d dagar",M:"ein m\xe5nad",MM:"%d m\xe5nader",y:"eit \xe5r",yy:"%d \xe5r"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}});var xn={1:"\u0a67",2:"\u0a68",3:"\u0a69",4:"\u0a6a",5:"\u0a6b",6:"\u0a6c",7:"\u0a6d",8:"\u0a6e",9:"\u0a6f",0:"\u0a66"},Pn={"\u0a67":"1","\u0a68":"2","\u0a69":"3","\u0a6a":"4","\u0a6b":"5","\u0a6c":"6","\u0a6d":"7","\u0a6e":"8","\u0a6f":"9","\u0a66":"0"};l.defineLocale("pa-in",{months:"\u0a1c\u0a28\u0a35\u0a30\u0a40_\u0a2b\u0a3c\u0a30\u0a35\u0a30\u0a40_\u0a2e\u0a3e\u0a30\u0a1a_\u0a05\u0a2a\u0a4d\u0a30\u0a48\u0a32_\u0a2e\u0a08_\u0a1c\u0a42\u0a28_\u0a1c\u0a41\u0a32\u0a3e\u0a08_\u0a05\u0a17\u0a38\u0a24_\u0a38\u0a24\u0a70\u0a2c\u0a30_\u0a05\u0a15\u0a24\u0a42\u0a2c\u0a30_\u0a28\u0a35\u0a70\u0a2c\u0a30_\u0a26\u0a38\u0a70\u0a2c\u0a30".split("_"),monthsShort:"\u0a1c\u0a28\u0a35\u0a30\u0a40_\u0a2b\u0a3c\u0a30\u0a35\u0a30\u0a40_\u0a2e\u0a3e\u0a30\u0a1a_\u0a05\u0a2a\u0a4d\u0a30\u0a48\u0a32_\u0a2e\u0a08_\u0a1c\u0a42\u0a28_\u0a1c\u0a41\u0a32\u0a3e\u0a08_\u0a05\u0a17\u0a38\u0a24_\u0a38\u0a24\u0a70\u0a2c\u0a30_\u0a05\u0a15\u0a24\u0a42\u0a2c\u0a30_\u0a28\u0a35\u0a70\u0a2c\u0a30_\u0a26\u0a38\u0a70\u0a2c\u0a30".split("_"),weekdays:"\u0a10\u0a24\u0a35\u0a3e\u0a30_\u0a38\u0a4b\u0a2e\u0a35\u0a3e\u0a30_\u0a2e\u0a70\u0a17\u0a32\u0a35\u0a3e\u0a30_\u0a2c\u0a41\u0a27\u0a35\u0a3e\u0a30_\u0a35\u0a40\u0a30\u0a35\u0a3e\u0a30_\u0a38\u0a3c\u0a41\u0a71\u0a15\u0a30\u0a35\u0a3e\u0a30_\u0a38\u0a3c\u0a28\u0a40\u0a1a\u0a30\u0a35\u0a3e\u0a30".split("_"),weekdaysShort:"\u0a10\u0a24_\u0a38\u0a4b\u0a2e_\u0a2e\u0a70\u0a17\u0a32_\u0a2c\u0a41\u0a27_\u0a35\u0a40\u0a30_\u0a38\u0a3c\u0a41\u0a15\u0a30_\u0a38\u0a3c\u0a28\u0a40".split("_"),weekdaysMin:"\u0a10\u0a24_\u0a38\u0a4b\u0a2e_\u0a2e\u0a70\u0a17\u0a32_\u0a2c\u0a41\u0a27_\u0a35\u0a40\u0a30_\u0a38\u0a3c\u0a41\u0a15\u0a30_\u0a38\u0a3c\u0a28\u0a40".split("_"),longDateFormat:{LT:"A h:mm \u0a35\u0a1c\u0a47",LTS:"A h:mm:ss \u0a35\u0a1c\u0a47",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm \u0a35\u0a1c\u0a47",LLLL:"dddd, D MMMM YYYY, A h:mm \u0a35\u0a1c\u0a47"},calendar:{sameDay:"[\u0a05\u0a1c] LT",nextDay:"[\u0a15\u0a32] LT",nextWeek:"[\u0a05\u0a17\u0a32\u0a3e] dddd, LT",lastDay:"[\u0a15\u0a32] LT",lastWeek:"[\u0a2a\u0a3f\u0a1b\u0a32\u0a47] dddd, LT",sameElse:"L"},relativeTime:{future:"%s \u0a35\u0a3f\u0a71\u0a1a",past:"%s \u0a2a\u0a3f\u0a1b\u0a32\u0a47",s:"\u0a15\u0a41\u0a1d \u0a38\u0a15\u0a3f\u0a70\u0a1f",ss:"%d \u0a38\u0a15\u0a3f\u0a70\u0a1f",m:"\u0a07\u0a15 \u0a2e\u0a3f\u0a70\u0a1f",mm:"%d \u0a2e\u0a3f\u0a70\u0a1f",h:"\u0a07\u0a71\u0a15 \u0a18\u0a70\u0a1f\u0a3e",hh:"%d \u0a18\u0a70\u0a1f\u0a47",d:"\u0a07\u0a71\u0a15 \u0a26\u0a3f\u0a28",dd:"%d \u0a26\u0a3f\u0a28",M:"\u0a07\u0a71\u0a15 \u0a2e\u0a39\u0a40\u0a28\u0a3e",MM:"%d \u0a2e\u0a39\u0a40\u0a28\u0a47",y:"\u0a07\u0a71\u0a15 \u0a38\u0a3e\u0a32",yy:"%d \u0a38\u0a3e\u0a32"},preparse:function(e){return e.replace(/[\u0a67\u0a68\u0a69\u0a6a\u0a6b\u0a6c\u0a6d\u0a6e\u0a6f\u0a66]/g,function(e){return Pn[e]})},postformat:function(e){return e.replace(/\d/g,function(e){return xn[e]})},meridiemParse:/\u0a30\u0a3e\u0a24|\u0a38\u0a35\u0a47\u0a30|\u0a26\u0a41\u0a2a\u0a39\u0a3f\u0a30|\u0a38\u0a3c\u0a3e\u0a2e/,meridiemHour:function(e,a){return 12===e&&(e=0),"\u0a30\u0a3e\u0a24"===a?e<4?e:e+12:"\u0a38\u0a35\u0a47\u0a30"===a?e:"\u0a26\u0a41\u0a2a\u0a39\u0a3f\u0a30"===a?10<=e?e:e+12:"\u0a38\u0a3c\u0a3e\u0a2e"===a?e+12:void 0},meridiem:function(e,a,t){return e<4?"\u0a30\u0a3e\u0a24":e<10?"\u0a38\u0a35\u0a47\u0a30":e<17?"\u0a26\u0a41\u0a2a\u0a39\u0a3f\u0a30":e<20?"\u0a38\u0a3c\u0a3e\u0a2e":"\u0a30\u0a3e\u0a24"},week:{dow:0,doy:6}});var On="stycze\u0144_luty_marzec_kwiecie\u0144_maj_czerwiec_lipiec_sierpie\u0144_wrzesie\u0144_pa\u017adziernik_listopad_grudzie\u0144".split("_"),Wn="stycznia_lutego_marca_kwietnia_maja_czerwca_lipca_sierpnia_wrze\u015bnia_pa\u017adziernika_listopada_grudnia".split("_");function En(e){return e%10<5&&1<e%10&&~~(e/10)%10!=1}function An(e,a,t){var s=e+" ";switch(t){case"ss":return s+(En(e)?"sekundy":"sekund");case"m":return a?"minuta":"minut\u0119";case"mm":return s+(En(e)?"minuty":"minut");case"h":return a?"godzina":"godzin\u0119";case"hh":return s+(En(e)?"godziny":"godzin");case"MM":return s+(En(e)?"miesi\u0105ce":"miesi\u0119cy");case"yy":return s+(En(e)?"lata":"lat")}}function Fn(e,a,t){var s=" ";return(20<=e%100||100<=e&&e%100==0)&&(s=" de "),e+s+{ss:"secunde",mm:"minute",hh:"ore",dd:"zile",MM:"luni",yy:"ani"}[t]}function zn(e,a,t){var s,n;return"m"===t?a?"\u043c\u0438\u043d\u0443\u0442\u0430":"\u043c\u0438\u043d\u0443\u0442\u0443":e+" "+(s=+e,n={ss:a?"\u0441\u0435\u043a\u0443\u043d\u0434\u0430_\u0441\u0435\u043a\u0443\u043d\u0434\u044b_\u0441\u0435\u043a\u0443\u043d\u0434":"\u0441\u0435\u043a\u0443\u043d\u0434\u0443_\u0441\u0435\u043a\u0443\u043d\u0434\u044b_\u0441\u0435\u043a\u0443\u043d\u0434",mm:a?"\u043c\u0438\u043d\u0443\u0442\u0430_\u043c\u0438\u043d\u0443\u0442\u044b_\u043c\u0438\u043d\u0443\u0442":"\u043c\u0438\u043d\u0443\u0442\u0443_\u043c\u0438\u043d\u0443\u0442\u044b_\u043c\u0438\u043d\u0443\u0442",hh:"\u0447\u0430\u0441_\u0447\u0430\u0441\u0430_\u0447\u0430\u0441\u043e\u0432",dd:"\u0434\u0435\u043d\u044c_\u0434\u043d\u044f_\u0434\u043d\u0435\u0439",MM:"\u043c\u0435\u0441\u044f\u0446_\u043c\u0435\u0441\u044f\u0446\u0430_\u043c\u0435\u0441\u044f\u0446\u0435\u0432",yy:"\u0433\u043e\u0434_\u0433\u043e\u0434\u0430_\u043b\u0435\u0442"}[t].split("_"),s%10==1&&s%100!=11?n[0]:2<=s%10&&s%10<=4&&(s%100<10||20<=s%100)?n[1]:n[2])}l.defineLocale("pl",{months:function(e,a){return e?""===a?"("+Wn[e.month()]+"|"+On[e.month()]+")":/D MMMM/.test(a)?Wn[e.month()]:On[e.month()]:On},monthsShort:"sty_lut_mar_kwi_maj_cze_lip_sie_wrz_pa\u017a_lis_gru".split("_"),weekdays:"niedziela_poniedzia\u0142ek_wtorek_\u015broda_czwartek_pi\u0105tek_sobota".split("_"),weekdaysShort:"ndz_pon_wt_\u015br_czw_pt_sob".split("_"),weekdaysMin:"Nd_Pn_Wt_\u015ar_Cz_Pt_So".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Dzi\u015b o] LT",nextDay:"[Jutro o] LT",nextWeek:function(){switch(this.day()){case 0:return"[W niedziel\u0119 o] LT";case 2:return"[We wtorek o] LT";case 3:return"[W \u015brod\u0119 o] LT";case 6:return"[W sobot\u0119 o] LT";default:return"[W] dddd [o] LT"}},lastDay:"[Wczoraj o] LT",lastWeek:function(){switch(this.day()){case 0:return"[W zesz\u0142\u0105 niedziel\u0119 o] LT";case 3:return"[W zesz\u0142\u0105 \u015brod\u0119 o] LT";case 6:return"[W zesz\u0142\u0105 sobot\u0119 o] LT";default:return"[W zesz\u0142y] dddd [o] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"%s temu",s:"kilka sekund",ss:An,m:An,mm:An,h:An,hh:An,d:"1 dzie\u0144",dd:"%d dni",M:"miesi\u0105c",MM:An,y:"rok",yy:An},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}}),l.defineLocale("pt-br",{months:"janeiro_fevereiro_mar\xe7o_abril_maio_junho_julho_agosto_setembro_outubro_novembro_dezembro".split("_"),monthsShort:"jan_fev_mar_abr_mai_jun_jul_ago_set_out_nov_dez".split("_"),weekdays:"Domingo_Segunda-feira_Ter\xe7a-feira_Quarta-feira_Quinta-feira_Sexta-feira_S\xe1bado".split("_"),weekdaysShort:"Dom_Seg_Ter_Qua_Qui_Sex_S\xe1b".split("_"),weekdaysMin:"Do_2\xaa_3\xaa_4\xaa_5\xaa_6\xaa_S\xe1".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY [\xe0s] HH:mm",LLLL:"dddd, D [de] MMMM [de] YYYY [\xe0s] HH:mm"},calendar:{sameDay:"[Hoje \xe0s] LT",nextDay:"[Amanh\xe3 \xe0s] LT",nextWeek:"dddd [\xe0s] LT",lastDay:"[Ontem \xe0s] LT",lastWeek:function(){return 0===this.day()||6===this.day()?"[\xdaltimo] dddd [\xe0s] LT":"[\xdaltima] dddd [\xe0s] LT"},sameElse:"L"},relativeTime:{future:"em %s",past:"h\xe1 %s",s:"poucos segundos",ss:"%d segundos",m:"um minuto",mm:"%d minutos",h:"uma hora",hh:"%d horas",d:"um dia",dd:"%d dias",M:"um m\xeas",MM:"%d meses",y:"um ano",yy:"%d anos"},dayOfMonthOrdinalParse:/\d{1,2}\xba/,ordinal:"%d\xba"}),l.defineLocale("pt",{months:"janeiro_fevereiro_mar\xe7o_abril_maio_junho_julho_agosto_setembro_outubro_novembro_dezembro".split("_"),monthsShort:"jan_fev_mar_abr_mai_jun_jul_ago_set_out_nov_dez".split("_"),weekdays:"Domingo_Segunda-feira_Ter\xe7a-feira_Quarta-feira_Quinta-feira_Sexta-feira_S\xe1bado".split("_"),weekdaysShort:"Dom_Seg_Ter_Qua_Qui_Sex_S\xe1b".split("_"),weekdaysMin:"Do_2\xaa_3\xaa_4\xaa_5\xaa_6\xaa_S\xe1".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY HH:mm",LLLL:"dddd, D [de] MMMM [de] YYYY HH:mm"},calendar:{sameDay:"[Hoje \xe0s] LT",nextDay:"[Amanh\xe3 \xe0s] LT",nextWeek:"dddd [\xe0s] LT",lastDay:"[Ontem \xe0s] LT",lastWeek:function(){return 0===this.day()||6===this.day()?"[\xdaltimo] dddd [\xe0s] LT":"[\xdaltima] dddd [\xe0s] LT"},sameElse:"L"},relativeTime:{future:"em %s",past:"h\xe1 %s",s:"segundos",ss:"%d segundos",m:"um minuto",mm:"%d minutos",h:"uma hora",hh:"%d horas",d:"um dia",dd:"%d dias",M:"um m\xeas",MM:"%d meses",y:"um ano",yy:"%d anos"},dayOfMonthOrdinalParse:/\d{1,2}\xba/,ordinal:"%d\xba",week:{dow:1,doy:4}}),l.defineLocale("ro",{months:"ianuarie_februarie_martie_aprilie_mai_iunie_iulie_august_septembrie_octombrie_noiembrie_decembrie".split("_"),monthsShort:"ian._febr._mart._apr._mai_iun._iul._aug._sept._oct._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"duminic\u0103_luni_mar\u021bi_miercuri_joi_vineri_s\xe2mb\u0103t\u0103".split("_"),weekdaysShort:"Dum_Lun_Mar_Mie_Joi_Vin_S\xe2m".split("_"),weekdaysMin:"Du_Lu_Ma_Mi_Jo_Vi_S\xe2".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY H:mm",LLLL:"dddd, D MMMM YYYY H:mm"},calendar:{sameDay:"[azi la] LT",nextDay:"[m\xe2ine la] LT",nextWeek:"dddd [la] LT",lastDay:"[ieri la] LT",lastWeek:"[fosta] dddd [la] LT",sameElse:"L"},relativeTime:{future:"peste %s",past:"%s \xeen urm\u0103",s:"c\xe2teva secunde",ss:Fn,m:"un minut",mm:Fn,h:"o or\u0103",hh:Fn,d:"o zi",dd:Fn,M:"o lun\u0103",MM:Fn,y:"un an",yy:Fn},week:{dow:1,doy:7}});var Jn=[/^\u044f\u043d\u0432/i,/^\u0444\u0435\u0432/i,/^\u043c\u0430\u0440/i,/^\u0430\u043f\u0440/i,/^\u043c\u0430[\u0439\u044f]/i,/^\u0438\u044e\u043d/i,/^\u0438\u044e\u043b/i,/^\u0430\u0432\u0433/i,/^\u0441\u0435\u043d/i,/^\u043e\u043a\u0442/i,/^\u043d\u043e\u044f/i,/^\u0434\u0435\u043a/i];l.defineLocale("ru",{months:{format:"\u044f\u043d\u0432\u0430\u0440\u044f_\u0444\u0435\u0432\u0440\u0430\u043b\u044f_\u043c\u0430\u0440\u0442\u0430_\u0430\u043f\u0440\u0435\u043b\u044f_\u043c\u0430\u044f_\u0438\u044e\u043d\u044f_\u0438\u044e\u043b\u044f_\u0430\u0432\u0433\u0443\u0441\u0442\u0430_\u0441\u0435\u043d\u0442\u044f\u0431\u0440\u044f_\u043e\u043a\u0442\u044f\u0431\u0440\u044f_\u043d\u043e\u044f\u0431\u0440\u044f_\u0434\u0435\u043a\u0430\u0431\u0440\u044f".split("_"),standalone:"\u044f\u043d\u0432\u0430\u0440\u044c_\u0444\u0435\u0432\u0440\u0430\u043b\u044c_\u043c\u0430\u0440\u0442_\u0430\u043f\u0440\u0435\u043b\u044c_\u043c\u0430\u0439_\u0438\u044e\u043d\u044c_\u0438\u044e\u043b\u044c_\u0430\u0432\u0433\u0443\u0441\u0442_\u0441\u0435\u043d\u0442\u044f\u0431\u0440\u044c_\u043e\u043a\u0442\u044f\u0431\u0440\u044c_\u043d\u043e\u044f\u0431\u0440\u044c_\u0434\u0435\u043a\u0430\u0431\u0440\u044c".split("_")},monthsShort:{format:"\u044f\u043d\u0432._\u0444\u0435\u0432\u0440._\u043c\u0430\u0440._\u0430\u043f\u0440._\u043c\u0430\u044f_\u0438\u044e\u043d\u044f_\u0438\u044e\u043b\u044f_\u0430\u0432\u0433._\u0441\u0435\u043d\u0442._\u043e\u043a\u0442._\u043d\u043e\u044f\u0431._\u0434\u0435\u043a.".split("_"),standalone:"\u044f\u043d\u0432._\u0444\u0435\u0432\u0440._\u043c\u0430\u0440\u0442_\u0430\u043f\u0440._\u043c\u0430\u0439_\u0438\u044e\u043d\u044c_\u0438\u044e\u043b\u044c_\u0430\u0432\u0433._\u0441\u0435\u043d\u0442._\u043e\u043a\u0442._\u043d\u043e\u044f\u0431._\u0434\u0435\u043a.".split("_")},weekdays:{standalone:"\u0432\u043e\u0441\u043a\u0440\u0435\u0441\u0435\u043d\u044c\u0435_\u043f\u043e\u043d\u0435\u0434\u0435\u043b\u044c\u043d\u0438\u043a_\u0432\u0442\u043e\u0440\u043d\u0438\u043a_\u0441\u0440\u0435\u0434\u0430_\u0447\u0435\u0442\u0432\u0435\u0440\u0433_\u043f\u044f\u0442\u043d\u0438\u0446\u0430_\u0441\u0443\u0431\u0431\u043e\u0442\u0430".split("_"),format:"\u0432\u043e\u0441\u043a\u0440\u0435\u0441\u0435\u043d\u044c\u0435_\u043f\u043e\u043d\u0435\u0434\u0435\u043b\u044c\u043d\u0438\u043a_\u0432\u0442\u043e\u0440\u043d\u0438\u043a_\u0441\u0440\u0435\u0434\u0443_\u0447\u0435\u0442\u0432\u0435\u0440\u0433_\u043f\u044f\u0442\u043d\u0438\u0446\u0443_\u0441\u0443\u0431\u0431\u043e\u0442\u0443".split("_"),isFormat:/\[ ?[\u0412\u0432] ?(?:\u043f\u0440\u043e\u0448\u043b\u0443\u044e|\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0443\u044e|\u044d\u0442\u0443)? ?\] ?dddd/},weekdaysShort:"\u0432\u0441_\u043f\u043d_\u0432\u0442_\u0441\u0440_\u0447\u0442_\u043f\u0442_\u0441\u0431".split("_"),weekdaysMin:"\u0432\u0441_\u043f\u043d_\u0432\u0442_\u0441\u0440_\u0447\u0442_\u043f\u0442_\u0441\u0431".split("_"),monthsParse:Jn,longMonthsParse:Jn,shortMonthsParse:Jn,monthsRegex:/^(\u044f\u043d\u0432\u0430\u0440[\u044c\u044f]|\u044f\u043d\u0432\.?|\u0444\u0435\u0432\u0440\u0430\u043b[\u044c\u044f]|\u0444\u0435\u0432\u0440?\.?|\u043c\u0430\u0440\u0442\u0430?|\u043c\u0430\u0440\.?|\u0430\u043f\u0440\u0435\u043b[\u044c\u044f]|\u0430\u043f\u0440\.?|\u043c\u0430[\u0439\u044f]|\u0438\u044e\u043d[\u044c\u044f]|\u0438\u044e\u043d\.?|\u0438\u044e\u043b[\u044c\u044f]|\u0438\u044e\u043b\.?|\u0430\u0432\u0433\u0443\u0441\u0442\u0430?|\u0430\u0432\u0433\.?|\u0441\u0435\u043d\u0442\u044f\u0431\u0440[\u044c\u044f]|\u0441\u0435\u043d\u0442?\.?|\u043e\u043a\u0442\u044f\u0431\u0440[\u044c\u044f]|\u043e\u043a\u0442\.?|\u043d\u043e\u044f\u0431\u0440[\u044c\u044f]|\u043d\u043e\u044f\u0431?\.?|\u0434\u0435\u043a\u0430\u0431\u0440[\u044c\u044f]|\u0434\u0435\u043a\.?)/i,monthsShortRegex:/^(\u044f\u043d\u0432\u0430\u0440[\u044c\u044f]|\u044f\u043d\u0432\.?|\u0444\u0435\u0432\u0440\u0430\u043b[\u044c\u044f]|\u0444\u0435\u0432\u0440?\.?|\u043c\u0430\u0440\u0442\u0430?|\u043c\u0430\u0440\.?|\u0430\u043f\u0440\u0435\u043b[\u044c\u044f]|\u0430\u043f\u0440\.?|\u043c\u0430[\u0439\u044f]|\u0438\u044e\u043d[\u044c\u044f]|\u0438\u044e\u043d\.?|\u0438\u044e\u043b[\u044c\u044f]|\u0438\u044e\u043b\.?|\u0430\u0432\u0433\u0443\u0441\u0442\u0430?|\u0430\u0432\u0433\.?|\u0441\u0435\u043d\u0442\u044f\u0431\u0440[\u044c\u044f]|\u0441\u0435\u043d\u0442?\.?|\u043e\u043a\u0442\u044f\u0431\u0440[\u044c\u044f]|\u043e\u043a\u0442\.?|\u043d\u043e\u044f\u0431\u0440[\u044c\u044f]|\u043d\u043e\u044f\u0431?\.?|\u0434\u0435\u043a\u0430\u0431\u0440[\u044c\u044f]|\u0434\u0435\u043a\.?)/i,monthsStrictRegex:/^(\u044f\u043d\u0432\u0430\u0440[\u044f\u044c]|\u0444\u0435\u0432\u0440\u0430\u043b[\u044f\u044c]|\u043c\u0430\u0440\u0442\u0430?|\u0430\u043f\u0440\u0435\u043b[\u044f\u044c]|\u043c\u0430[\u044f\u0439]|\u0438\u044e\u043d[\u044f\u044c]|\u0438\u044e\u043b[\u044f\u044c]|\u0430\u0432\u0433\u0443\u0441\u0442\u0430?|\u0441\u0435\u043d\u0442\u044f\u0431\u0440[\u044f\u044c]|\u043e\u043a\u0442\u044f\u0431\u0440[\u044f\u044c]|\u043d\u043e\u044f\u0431\u0440[\u044f\u044c]|\u0434\u0435\u043a\u0430\u0431\u0440[\u044f\u044c])/i,monthsShortStrictRegex:/^(\u044f\u043d\u0432\.|\u0444\u0435\u0432\u0440?\.|\u043c\u0430\u0440[\u0442.]|\u0430\u043f\u0440\.|\u043c\u0430[\u044f\u0439]|\u0438\u044e\u043d[\u044c\u044f.]|\u0438\u044e\u043b[\u044c\u044f.]|\u0430\u0432\u0433\.|\u0441\u0435\u043d\u0442?\.|\u043e\u043a\u0442\.|\u043d\u043e\u044f\u0431?\.|\u0434\u0435\u043a\.)/i,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY \u0433.",LLL:"D MMMM YYYY \u0433., H:mm",LLLL:"dddd, D MMMM YYYY \u0433., H:mm"},calendar:{sameDay:"[\u0421\u0435\u0433\u043e\u0434\u043d\u044f, \u0432] LT",nextDay:"[\u0417\u0430\u0432\u0442\u0440\u0430, \u0432] LT",lastDay:"[\u0412\u0447\u0435\u0440\u0430, \u0432] LT",nextWeek:function(e){if(e.week()===this.week())return 2===this.day()?"[\u0412\u043e] dddd, [\u0432] LT":"[\u0412] dddd, [\u0432] LT";switch(this.day()){case 0:return"[\u0412 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435] dddd, [\u0432] LT";case 1:case 2:case 4:return"[\u0412 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439] dddd, [\u0432] LT";case 3:case 5:case 6:return"[\u0412 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0443\u044e] dddd, [\u0432] LT"}},lastWeek:function(e){if(e.week()===this.week())return 2===this.day()?"[\u0412\u043e] dddd, [\u0432] LT":"[\u0412] dddd, [\u0432] LT";switch(this.day()){case 0:return"[\u0412 \u043f\u0440\u043e\u0448\u043b\u043e\u0435] dddd, [\u0432] LT";case 1:case 2:case 4:return"[\u0412 \u043f\u0440\u043e\u0448\u043b\u044b\u0439] dddd, [\u0432] LT";case 3:case 5:case 6:return"[\u0412 \u043f\u0440\u043e\u0448\u043b\u0443\u044e] dddd, [\u0432] LT"}},sameElse:"L"},relativeTime:{future:"\u0447\u0435\u0440\u0435\u0437 %s",past:"%s \u043d\u0430\u0437\u0430\u0434",s:"\u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u0435\u043a\u0443\u043d\u0434",ss:zn,m:zn,mm:zn,h:"\u0447\u0430\u0441",hh:zn,d:"\u0434\u0435\u043d\u044c",dd:zn,M:"\u043c\u0435\u0441\u044f\u0446",MM:zn,y:"\u0433\u043e\u0434",yy:zn},meridiemParse:/\u043d\u043e\u0447\u0438|\u0443\u0442\u0440\u0430|\u0434\u043d\u044f|\u0432\u0435\u0447\u0435\u0440\u0430/i,isPM:function(e){return/^(\u0434\u043d\u044f|\u0432\u0435\u0447\u0435\u0440\u0430)$/.test(e)},meridiem:function(e,a,t){return e<4?"\u043d\u043e\u0447\u0438":e<12?"\u0443\u0442\u0440\u0430":e<17?"\u0434\u043d\u044f":"\u0432\u0435\u0447\u0435\u0440\u0430"},dayOfMonthOrdinalParse:/\d{1,2}-(\u0439|\u0433\u043e|\u044f)/,ordinal:function(e,a){switch(a){case"M":case"d":case"DDD":return e+"-\u0439";case"D":return e+"-\u0433\u043e";case"w":case"W":return e+"-\u044f";default:return e}},week:{dow:1,doy:4}});var Nn=["\u062c\u0646\u0648\u0631\u064a","\u0641\u064a\u0628\u0631\u0648\u0631\u064a","\u0645\u0627\u0631\u0686","\u0627\u067e\u0631\u064a\u0644","\u0645\u0626\u064a","\u062c\u0648\u0646","\u062c\u0648\u0644\u0627\u0621\u0650","\u0622\u06af\u0633\u067d","\u0633\u064a\u067e\u067d\u0645\u0628\u0631","\u0622\u06aa\u067d\u0648\u0628\u0631","\u0646\u0648\u0645\u0628\u0631","\u068a\u0633\u0645\u0628\u0631"],Rn=["\u0622\u0686\u0631","\u0633\u0648\u0645\u0631","\u0627\u06b1\u0627\u0631\u0648","\u0627\u0631\u0628\u0639","\u062e\u0645\u064a\u0633","\u062c\u0645\u0639","\u0687\u0646\u0687\u0631"];l.defineLocale("sd",{months:Nn,monthsShort:Nn,weekdays:Rn,weekdaysShort:Rn,weekdaysMin:Rn,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd\u060c D MMMM YYYY HH:mm"},meridiemParse:/\u0635\u0628\u062d|\u0634\u0627\u0645/,isPM:function(e){return"\u0634\u0627\u0645"===e},meridiem:function(e,a,t){return e<12?"\u0635\u0628\u062d":"\u0634\u0627\u0645"},calendar:{sameDay:"[\u0627\u0684] LT",nextDay:"[\u0633\u0680\u0627\u06bb\u064a] LT",nextWeek:"dddd [\u0627\u06b3\u064a\u0646 \u0647\u0641\u062a\u064a \u062a\u064a] LT",lastDay:"[\u06aa\u0627\u0644\u0647\u0647] LT",lastWeek:"[\u06af\u0632\u0631\u064a\u0644 \u0647\u0641\u062a\u064a] dddd [\u062a\u064a] LT",sameElse:"L"},relativeTime:{future:"%s \u067e\u0648\u0621",past:"%s \u0627\u06b3",s:"\u0686\u0646\u062f \u0633\u064a\u06aa\u0646\u068a",ss:"%d \u0633\u064a\u06aa\u0646\u068a",m:"\u0647\u06aa \u0645\u0646\u067d",mm:"%d \u0645\u0646\u067d",h:"\u0647\u06aa \u06aa\u0644\u0627\u06aa",hh:"%d \u06aa\u0644\u0627\u06aa",d:"\u0647\u06aa \u068f\u064a\u0646\u0647\u0646",dd:"%d \u068f\u064a\u0646\u0647\u0646",M:"\u0647\u06aa \u0645\u0647\u064a\u0646\u0648",MM:"%d \u0645\u0647\u064a\u0646\u0627",y:"\u0647\u06aa \u0633\u0627\u0644",yy:"%d \u0633\u0627\u0644"},preparse:function(e){return e.replace(/\u060c/g,",")},postformat:function(e){return e.replace(/,/g,"\u060c")},week:{dow:1,doy:4}}),l.defineLocale("se",{months:"o\u0111\u0111ajagem\xe1nnu_guovvam\xe1nnu_njuk\u010dam\xe1nnu_cuo\u014bom\xe1nnu_miessem\xe1nnu_geassem\xe1nnu_suoidnem\xe1nnu_borgem\xe1nnu_\u010dak\u010dam\xe1nnu_golggotm\xe1nnu_sk\xe1bmam\xe1nnu_juovlam\xe1nnu".split("_"),monthsShort:"o\u0111\u0111j_guov_njuk_cuo_mies_geas_suoi_borg_\u010dak\u010d_golg_sk\xe1b_juov".split("_"),weekdays:"sotnabeaivi_vuoss\xe1rga_ma\u014b\u014beb\xe1rga_gaskavahkku_duorastat_bearjadat_l\xe1vvardat".split("_"),weekdaysShort:"sotn_vuos_ma\u014b_gask_duor_bear_l\xe1v".split("_"),weekdaysMin:"s_v_m_g_d_b_L".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"MMMM D. [b.] YYYY",LLL:"MMMM D. [b.] YYYY [ti.] HH:mm",LLLL:"dddd, MMMM D. [b.] YYYY [ti.] HH:mm"},calendar:{sameDay:"[otne ti] LT",nextDay:"[ihttin ti] LT",nextWeek:"dddd [ti] LT",lastDay:"[ikte ti] LT",lastWeek:"[ovddit] dddd [ti] LT",sameElse:"L"},relativeTime:{future:"%s gea\u017ees",past:"ma\u014bit %s",s:"moadde sekunddat",ss:"%d sekunddat",m:"okta minuhta",mm:"%d minuhtat",h:"okta diimmu",hh:"%d diimmut",d:"okta beaivi",dd:"%d beaivvit",M:"okta m\xe1nnu",MM:"%d m\xe1nut",y:"okta jahki",yy:"%d jagit"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}}),l.defineLocale("si",{months:"\u0da2\u0db1\u0dc0\u0dcf\u0dbb\u0dd2_\u0db4\u0dd9\u0db6\u0dbb\u0dc0\u0dcf\u0dbb\u0dd2_\u0db8\u0dcf\u0dbb\u0dca\u0dad\u0dd4_\u0d85\u0db4\u0dca\u200d\u0dbb\u0dda\u0dbd\u0dca_\u0db8\u0dd0\u0dba\u0dd2_\u0da2\u0dd6\u0db1\u0dd2_\u0da2\u0dd6\u0dbd\u0dd2_\u0d85\u0d9c\u0ddd\u0dc3\u0dca\u0dad\u0dd4_\u0dc3\u0dd0\u0db4\u0dca\u0dad\u0dd0\u0db8\u0dca\u0db6\u0dbb\u0dca_\u0d94\u0d9a\u0dca\u0dad\u0ddd\u0db6\u0dbb\u0dca_\u0db1\u0ddc\u0dc0\u0dd0\u0db8\u0dca\u0db6\u0dbb\u0dca_\u0daf\u0dd9\u0dc3\u0dd0\u0db8\u0dca\u0db6\u0dbb\u0dca".split("_"),monthsShort:"\u0da2\u0db1_\u0db4\u0dd9\u0db6_\u0db8\u0dcf\u0dbb\u0dca_\u0d85\u0db4\u0dca_\u0db8\u0dd0\u0dba\u0dd2_\u0da2\u0dd6\u0db1\u0dd2_\u0da2\u0dd6\u0dbd\u0dd2_\u0d85\u0d9c\u0ddd_\u0dc3\u0dd0\u0db4\u0dca_\u0d94\u0d9a\u0dca_\u0db1\u0ddc\u0dc0\u0dd0_\u0daf\u0dd9\u0dc3\u0dd0".split("_"),weekdays:"\u0d89\u0dbb\u0dd2\u0daf\u0dcf_\u0dc3\u0db3\u0dd4\u0daf\u0dcf_\u0d85\u0d9f\u0dc4\u0dbb\u0dd4\u0dc0\u0dcf\u0daf\u0dcf_\u0db6\u0daf\u0dcf\u0daf\u0dcf_\u0db6\u0dca\u200d\u0dbb\u0dc4\u0dc3\u0dca\u0db4\u0dad\u0dd2\u0db1\u0dca\u0daf\u0dcf_\u0dc3\u0dd2\u0d9a\u0dd4\u0dbb\u0dcf\u0daf\u0dcf_\u0dc3\u0dd9\u0db1\u0dc3\u0dd4\u0dbb\u0dcf\u0daf\u0dcf".split("_"),weekdaysShort:"\u0d89\u0dbb\u0dd2_\u0dc3\u0db3\u0dd4_\u0d85\u0d9f_\u0db6\u0daf\u0dcf_\u0db6\u0dca\u200d\u0dbb\u0dc4_\u0dc3\u0dd2\u0d9a\u0dd4_\u0dc3\u0dd9\u0db1".split("_"),weekdaysMin:"\u0d89_\u0dc3_\u0d85_\u0db6_\u0db6\u0dca\u200d\u0dbb_\u0dc3\u0dd2_\u0dc3\u0dd9".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"a h:mm",LTS:"a h:mm:ss",L:"YYYY/MM/DD",LL:"YYYY MMMM D",LLL:"YYYY MMMM D, a h:mm",LLLL:"YYYY MMMM D [\u0dc0\u0dd0\u0db1\u0dd2] dddd, a h:mm:ss"},calendar:{sameDay:"[\u0d85\u0daf] LT[\u0da7]",nextDay:"[\u0dc4\u0dd9\u0da7] LT[\u0da7]",nextWeek:"dddd LT[\u0da7]",lastDay:"[\u0d8a\u0dba\u0dda] LT[\u0da7]",lastWeek:"[\u0db4\u0dc3\u0dd4\u0d9c\u0dd2\u0dba] dddd LT[\u0da7]",sameElse:"L"},relativeTime:{future:"%s\u0d9a\u0dd2\u0db1\u0dca",past:"%s\u0d9a\u0da7 \u0db4\u0dd9\u0dbb",s:"\u0dad\u0dad\u0dca\u0db4\u0dbb \u0d9a\u0dd2\u0dc4\u0dd2\u0db4\u0dba",ss:"\u0dad\u0dad\u0dca\u0db4\u0dbb %d",m:"\u0db8\u0dd2\u0db1\u0dd2\u0dad\u0dca\u0dad\u0dd4\u0dc0",mm:"\u0db8\u0dd2\u0db1\u0dd2\u0dad\u0dca\u0dad\u0dd4 %d",h:"\u0db4\u0dd0\u0dba",hh:"\u0db4\u0dd0\u0dba %d",d:"\u0daf\u0dd2\u0db1\u0dba",dd:"\u0daf\u0dd2\u0db1 %d",M:"\u0db8\u0dcf\u0dc3\u0dba",MM:"\u0db8\u0dcf\u0dc3 %d",y:"\u0dc0\u0dc3\u0dbb",yy:"\u0dc0\u0dc3\u0dbb %d"},dayOfMonthOrdinalParse:/\d{1,2} \u0dc0\u0dd0\u0db1\u0dd2/,ordinal:function(e){return e+" \u0dc0\u0dd0\u0db1\u0dd2"},meridiemParse:/\u0db4\u0dd9\u0dbb \u0dc0\u0dbb\u0dd4|\u0db4\u0dc3\u0dca \u0dc0\u0dbb\u0dd4|\u0db4\u0dd9.\u0dc0|\u0db4.\u0dc0./,isPM:function(e){return"\u0db4.\u0dc0."===e||"\u0db4\u0dc3\u0dca \u0dc0\u0dbb\u0dd4"===e},meridiem:function(e,a,t){return 11<e?t?"\u0db4.\u0dc0.":"\u0db4\u0dc3\u0dca \u0dc0\u0dbb\u0dd4":t?"\u0db4\u0dd9.\u0dc0.":"\u0db4\u0dd9\u0dbb \u0dc0\u0dbb\u0dd4"}});var In="janu\xe1r_febru\xe1r_marec_apr\xedl_m\xe1j_j\xfan_j\xfal_august_september_okt\xf3ber_november_december".split("_"),Cn="jan_feb_mar_apr_m\xe1j_j\xfan_j\xfal_aug_sep_okt_nov_dec".split("_");function Gn(e){return 1<e&&e<5}function Un(e,a,t,s){var n=e+" ";switch(t){case"s":return a||s?"p\xe1r sek\xfand":"p\xe1r sekundami";case"ss":return a||s?n+(Gn(e)?"sekundy":"sek\xfand"):n+"sekundami";break;case"m":return a?"min\xfata":s?"min\xfatu":"min\xfatou";case"mm":return a||s?n+(Gn(e)?"min\xfaty":"min\xfat"):n+"min\xfatami";break;case"h":return a?"hodina":s?"hodinu":"hodinou";case"hh":return a||s?n+(Gn(e)?"hodiny":"hod\xedn"):n+"hodinami";break;case"d":return a||s?"de\u0148":"d\u0148om";case"dd":return a||s?n+(Gn(e)?"dni":"dn\xed"):n+"d\u0148ami";break;case"M":return a||s?"mesiac":"mesiacom";case"MM":return a||s?n+(Gn(e)?"mesiace":"mesiacov"):n+"mesiacmi";break;case"y":return a||s?"rok":"rokom";case"yy":return a||s?n+(Gn(e)?"roky":"rokov"):n+"rokmi";break}}function Vn(e,a,t,s){var n=e+" ";switch(t){case"s":return a||s?"nekaj sekund":"nekaj sekundami";case"ss":return n+=1===e?a?"sekundo":"sekundi":2===e?a||s?"sekundi":"sekundah":e<5?a||s?"sekunde":"sekundah":"sekund";case"m":return a?"ena minuta":"eno minuto";case"mm":return n+=1===e?a?"minuta":"minuto":2===e?a||s?"minuti":"minutama":e<5?a||s?"minute":"minutami":a||s?"minut":"minutami";case"h":return a?"ena ura":"eno uro";case"hh":return n+=1===e?a?"ura":"uro":2===e?a||s?"uri":"urama":e<5?a||s?"ure":"urami":a||s?"ur":"urami";case"d":return a||s?"en dan":"enim dnem";case"dd":return n+=1===e?a||s?"dan":"dnem":2===e?a||s?"dni":"dnevoma":a||s?"dni":"dnevi";case"M":return a||s?"en mesec":"enim mesecem";case"MM":return n+=1===e?a||s?"mesec":"mesecem":2===e?a||s?"meseca":"mesecema":e<5?a||s?"mesece":"meseci":a||s?"mesecev":"meseci";case"y":return a||s?"eno leto":"enim letom";case"yy":return n+=1===e?a||s?"leto":"letom":2===e?a||s?"leti":"letoma":e<5?a||s?"leta":"leti":a||s?"let":"leti"}}l.defineLocale("sk",{months:In,monthsShort:Cn,weekdays:"nede\u013ea_pondelok_utorok_streda_\u0161tvrtok_piatok_sobota".split("_"),weekdaysShort:"ne_po_ut_st_\u0161t_pi_so".split("_"),weekdaysMin:"ne_po_ut_st_\u0161t_pi_so".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd D. MMMM YYYY H:mm"},calendar:{sameDay:"[dnes o] LT",nextDay:"[zajtra o] LT",nextWeek:function(){switch(this.day()){case 0:return"[v nede\u013eu o] LT";case 1:case 2:return"[v] dddd [o] LT";case 3:return"[v stredu o] LT";case 4:return"[vo \u0161tvrtok o] LT";case 5:return"[v piatok o] LT";case 6:return"[v sobotu o] LT"}},lastDay:"[v\u010dera o] LT",lastWeek:function(){switch(this.day()){case 0:return"[minul\xfa nede\u013eu o] LT";case 1:case 2:return"[minul\xfd] dddd [o] LT";case 3:return"[minul\xfa stredu o] LT";case 4:case 5:return"[minul\xfd] dddd [o] LT";case 6:return"[minul\xfa sobotu o] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"pred %s",s:Un,ss:Un,m:Un,mm:Un,h:Un,hh:Un,d:Un,dd:Un,M:Un,MM:Un,y:Un,yy:Un},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}}),l.defineLocale("sl",{months:"januar_februar_marec_april_maj_junij_julij_avgust_september_oktober_november_december".split("_"),monthsShort:"jan._feb._mar._apr._maj._jun._jul._avg._sep._okt._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"nedelja_ponedeljek_torek_sreda_\u010detrtek_petek_sobota".split("_"),weekdaysShort:"ned._pon._tor._sre._\u010det._pet._sob.".split("_"),weekdaysMin:"ne_po_to_sr_\u010de_pe_so".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[danes ob] LT",nextDay:"[jutri ob] LT",nextWeek:function(){switch(this.day()){case 0:return"[v] [nedeljo] [ob] LT";case 3:return"[v] [sredo] [ob] LT";case 6:return"[v] [soboto] [ob] LT";case 1:case 2:case 4:case 5:return"[v] dddd [ob] LT"}},lastDay:"[v\u010deraj ob] LT",lastWeek:function(){switch(this.day()){case 0:return"[prej\u0161njo] [nedeljo] [ob] LT";case 3:return"[prej\u0161njo] [sredo] [ob] LT";case 6:return"[prej\u0161njo] [soboto] [ob] LT";case 1:case 2:case 4:case 5:return"[prej\u0161nji] dddd [ob] LT"}},sameElse:"L"},relativeTime:{future:"\u010dez %s",past:"pred %s",s:Vn,ss:Vn,m:Vn,mm:Vn,h:Vn,hh:Vn,d:Vn,dd:Vn,M:Vn,MM:Vn,y:Vn,yy:Vn},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}}),l.defineLocale("sq",{months:"Janar_Shkurt_Mars_Prill_Maj_Qershor_Korrik_Gusht_Shtator_Tetor_N\xebntor_Dhjetor".split("_"),monthsShort:"Jan_Shk_Mar_Pri_Maj_Qer_Kor_Gus_Sht_Tet_N\xebn_Dhj".split("_"),weekdays:"E Diel_E H\xebn\xeb_E Mart\xeb_E M\xebrkur\xeb_E Enjte_E Premte_E Shtun\xeb".split("_"),weekdaysShort:"Die_H\xebn_Mar_M\xebr_Enj_Pre_Sht".split("_"),weekdaysMin:"D_H_Ma_M\xeb_E_P_Sh".split("_"),weekdaysParseExact:!0,meridiemParse:/PD|MD/,isPM:function(e){return"M"===e.charAt(0)},meridiem:function(e,a,t){return e<12?"PD":"MD"},longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Sot n\xeb] LT",nextDay:"[Nes\xebr n\xeb] LT",nextWeek:"dddd [n\xeb] LT",lastDay:"[Dje n\xeb] LT",lastWeek:"dddd [e kaluar n\xeb] LT",sameElse:"L"},relativeTime:{future:"n\xeb %s",past:"%s m\xeb par\xeb",s:"disa sekonda",ss:"%d sekonda",m:"nj\xeb minut\xeb",mm:"%d minuta",h:"nj\xeb or\xeb",hh:"%d or\xeb",d:"nj\xeb dit\xeb",dd:"%d dit\xeb",M:"nj\xeb muaj",MM:"%d muaj",y:"nj\xeb vit",yy:"%d vite"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}});var Kn={words:{ss:["\u0441\u0435\u043a\u0443\u043d\u0434\u0430","\u0441\u0435\u043a\u0443\u043d\u0434\u0435","\u0441\u0435\u043a\u0443\u043d\u0434\u0438"],m:["\u0458\u0435\u0434\u0430\u043d \u043c\u0438\u043d\u0443\u0442","\u0458\u0435\u0434\u043d\u0435 \u043c\u0438\u043d\u0443\u0442\u0435"],mm:["\u043c\u0438\u043d\u0443\u0442","\u043c\u0438\u043d\u0443\u0442\u0435","\u043c\u0438\u043d\u0443\u0442\u0430"],h:["\u0458\u0435\u0434\u0430\u043d \u0441\u0430\u0442","\u0458\u0435\u0434\u043d\u043e\u0433 \u0441\u0430\u0442\u0430"],hh:["\u0441\u0430\u0442","\u0441\u0430\u0442\u0430","\u0441\u0430\u0442\u0438"],dd:["\u0434\u0430\u043d","\u0434\u0430\u043d\u0430","\u0434\u0430\u043d\u0430"],MM:["\u043c\u0435\u0441\u0435\u0446","\u043c\u0435\u0441\u0435\u0446\u0430","\u043c\u0435\u0441\u0435\u0446\u0438"],yy:["\u0433\u043e\u0434\u0438\u043d\u0430","\u0433\u043e\u0434\u0438\u043d\u0435","\u0433\u043e\u0434\u0438\u043d\u0430"]},correctGrammaticalCase:function(e,a){return 1===e?a[0]:2<=e&&e<=4?a[1]:a[2]},translate:function(e,a,t){var s=Kn.words[t];return 1===t.length?a?s[0]:s[1]:e+" "+Kn.correctGrammaticalCase(e,s)}};l.defineLocale("sr-cyrl",{months:"\u0458\u0430\u043d\u0443\u0430\u0440_\u0444\u0435\u0431\u0440\u0443\u0430\u0440_\u043c\u0430\u0440\u0442_\u0430\u043f\u0440\u0438\u043b_\u043c\u0430\u0458_\u0458\u0443\u043d_\u0458\u0443\u043b_\u0430\u0432\u0433\u0443\u0441\u0442_\u0441\u0435\u043f\u0442\u0435\u043c\u0431\u0430\u0440_\u043e\u043a\u0442\u043e\u0431\u0430\u0440_\u043d\u043e\u0432\u0435\u043c\u0431\u0430\u0440_\u0434\u0435\u0446\u0435\u043c\u0431\u0430\u0440".split("_"),monthsShort:"\u0458\u0430\u043d._\u0444\u0435\u0431._\u043c\u0430\u0440._\u0430\u043f\u0440._\u043c\u0430\u0458_\u0458\u0443\u043d_\u0458\u0443\u043b_\u0430\u0432\u0433._\u0441\u0435\u043f._\u043e\u043a\u0442._\u043d\u043e\u0432._\u0434\u0435\u0446.".split("_"),monthsParseExact:!0,weekdays:"\u043d\u0435\u0434\u0435\u0459\u0430_\u043f\u043e\u043d\u0435\u0434\u0435\u0459\u0430\u043a_\u0443\u0442\u043e\u0440\u0430\u043a_\u0441\u0440\u0435\u0434\u0430_\u0447\u0435\u0442\u0432\u0440\u0442\u0430\u043a_\u043f\u0435\u0442\u0430\u043a_\u0441\u0443\u0431\u043e\u0442\u0430".split("_"),weekdaysShort:"\u043d\u0435\u0434._\u043f\u043e\u043d._\u0443\u0442\u043e._\u0441\u0440\u0435._\u0447\u0435\u0442._\u043f\u0435\u0442._\u0441\u0443\u0431.".split("_"),weekdaysMin:"\u043d\u0435_\u043f\u043e_\u0443\u0442_\u0441\u0440_\u0447\u0435_\u043f\u0435_\u0441\u0443".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[\u0434\u0430\u043d\u0430\u0441 \u0443] LT",nextDay:"[\u0441\u0443\u0442\u0440\u0430 \u0443] LT",nextWeek:function(){switch(this.day()){case 0:return"[\u0443] [\u043d\u0435\u0434\u0435\u0459\u0443] [\u0443] LT";case 3:return"[\u0443] [\u0441\u0440\u0435\u0434\u0443] [\u0443] LT";case 6:return"[\u0443] [\u0441\u0443\u0431\u043e\u0442\u0443] [\u0443] LT";case 1:case 2:case 4:case 5:return"[\u0443] dddd [\u0443] LT"}},lastDay:"[\u0458\u0443\u0447\u0435 \u0443] LT",lastWeek:function(){return["[\u043f\u0440\u043e\u0448\u043b\u0435] [\u043d\u0435\u0434\u0435\u0459\u0435] [\u0443] LT","[\u043f\u0440\u043e\u0448\u043b\u043e\u0433] [\u043f\u043e\u043d\u0435\u0434\u0435\u0459\u043a\u0430] [\u0443] LT","[\u043f\u0440\u043e\u0448\u043b\u043e\u0433] [\u0443\u0442\u043e\u0440\u043a\u0430] [\u0443] LT","[\u043f\u0440\u043e\u0448\u043b\u0435] [\u0441\u0440\u0435\u0434\u0435] [\u0443] LT","[\u043f\u0440\u043e\u0448\u043b\u043e\u0433] [\u0447\u0435\u0442\u0432\u0440\u0442\u043a\u0430] [\u0443] LT","[\u043f\u0440\u043e\u0448\u043b\u043e\u0433] [\u043f\u0435\u0442\u043a\u0430] [\u0443] LT","[\u043f\u0440\u043e\u0448\u043b\u0435] [\u0441\u0443\u0431\u043e\u0442\u0435] [\u0443] LT"][this.day()]},sameElse:"L"},relativeTime:{future:"\u0437\u0430 %s",past:"\u043f\u0440\u0435 %s",s:"\u043d\u0435\u043a\u043e\u043b\u0438\u043a\u043e \u0441\u0435\u043a\u0443\u043d\u0434\u0438",ss:Kn.translate,m:Kn.translate,mm:Kn.translate,h:Kn.translate,hh:Kn.translate,d:"\u0434\u0430\u043d",dd:Kn.translate,M:"\u043c\u0435\u0441\u0435\u0446",MM:Kn.translate,y:"\u0433\u043e\u0434\u0438\u043d\u0443",yy:Kn.translate},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}});var $n={words:{ss:["sekunda","sekunde","sekundi"],m:["jedan minut","jedne minute"],mm:["minut","minute","minuta"],h:["jedan sat","jednog sata"],hh:["sat","sata","sati"],dd:["dan","dana","dana"],MM:["mesec","meseca","meseci"],yy:["godina","godine","godina"]},correctGrammaticalCase:function(e,a){return 1===e?a[0]:2<=e&&e<=4?a[1]:a[2]},translate:function(e,a,t){var s=$n.words[t];return 1===t.length?a?s[0]:s[1]:e+" "+$n.correctGrammaticalCase(e,s)}};l.defineLocale("sr",{months:"januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar".split("_"),monthsShort:"jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"nedelja_ponedeljak_utorak_sreda_\u010detvrtak_petak_subota".split("_"),weekdaysShort:"ned._pon._uto._sre._\u010det._pet._sub.".split("_"),weekdaysMin:"ne_po_ut_sr_\u010de_pe_su".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[danas u] LT",nextDay:"[sutra u] LT",nextWeek:function(){switch(this.day()){case 0:return"[u] [nedelju] [u] LT";case 3:return"[u] [sredu] [u] LT";case 6:return"[u] [subotu] [u] LT";case 1:case 2:case 4:case 5:return"[u] dddd [u] LT"}},lastDay:"[ju\u010de u] LT",lastWeek:function(){return["[pro\u0161le] [nedelje] [u] LT","[pro\u0161log] [ponedeljka] [u] LT","[pro\u0161log] [utorka] [u] LT","[pro\u0161le] [srede] [u] LT","[pro\u0161log] [\u010detvrtka] [u] LT","[pro\u0161log] [petka] [u] LT","[pro\u0161le] [subote] [u] LT"][this.day()]},sameElse:"L"},relativeTime:{future:"za %s",past:"pre %s",s:"nekoliko sekundi",ss:$n.translate,m:$n.translate,mm:$n.translate,h:$n.translate,hh:$n.translate,d:"dan",dd:$n.translate,M:"mesec",MM:$n.translate,y:"godinu",yy:$n.translate},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}}),l.defineLocale("ss",{months:"Bhimbidvwane_Indlovana_Indlov'lenkhulu_Mabasa_Inkhwekhweti_Inhlaba_Kholwane_Ingci_Inyoni_Imphala_Lweti_Ingongoni".split("_"),monthsShort:"Bhi_Ina_Inu_Mab_Ink_Inh_Kho_Igc_Iny_Imp_Lwe_Igo".split("_"),weekdays:"Lisontfo_Umsombuluko_Lesibili_Lesitsatfu_Lesine_Lesihlanu_Umgcibelo".split("_"),weekdaysShort:"Lis_Umb_Lsb_Les_Lsi_Lsh_Umg".split("_"),weekdaysMin:"Li_Us_Lb_Lt_Ls_Lh_Ug".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendar:{sameDay:"[Namuhla nga] LT",nextDay:"[Kusasa nga] LT",nextWeek:"dddd [nga] LT",lastDay:"[Itolo nga] LT",lastWeek:"dddd [leliphelile] [nga] LT",sameElse:"L"},relativeTime:{future:"nga %s",past:"wenteka nga %s",s:"emizuzwana lomcane",ss:"%d mzuzwana",m:"umzuzu",mm:"%d emizuzu",h:"lihora",hh:"%d emahora",d:"lilanga",dd:"%d emalanga",M:"inyanga",MM:"%d tinyanga",y:"umnyaka",yy:"%d iminyaka"},meridiemParse:/ekuseni|emini|entsambama|ebusuku/,meridiem:function(e,a,t){return e<11?"ekuseni":e<15?"emini":e<19?"entsambama":"ebusuku"},meridiemHour:function(e,a){return 12===e&&(e=0),"ekuseni"===a?e:"emini"===a?11<=e?e:e+12:"entsambama"===a||"ebusuku"===a?0===e?0:e+12:void 0},dayOfMonthOrdinalParse:/\d{1,2}/,ordinal:"%d",week:{dow:1,doy:4}}),l.defineLocale("sv",{months:"januari_februari_mars_april_maj_juni_juli_augusti_september_oktober_november_december".split("_"),monthsShort:"jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec".split("_"),weekdays:"s\xf6ndag_m\xe5ndag_tisdag_onsdag_torsdag_fredag_l\xf6rdag".split("_"),weekdaysShort:"s\xf6n_m\xe5n_tis_ons_tor_fre_l\xf6r".split("_"),weekdaysMin:"s\xf6_m\xe5_ti_on_to_fr_l\xf6".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [kl.] HH:mm",LLLL:"dddd D MMMM YYYY [kl.] HH:mm",lll:"D MMM YYYY HH:mm",llll:"ddd D MMM YYYY HH:mm"},calendar:{sameDay:"[Idag] LT",nextDay:"[Imorgon] LT",lastDay:"[Ig\xe5r] LT",nextWeek:"[P\xe5] dddd LT",lastWeek:"[I] dddd[s] LT",sameElse:"L"},relativeTime:{future:"om %s",past:"f\xf6r %s sedan",s:"n\xe5gra sekunder",ss:"%d sekunder",m:"en minut",mm:"%d minuter",h:"en timme",hh:"%d timmar",d:"en dag",dd:"%d dagar",M:"en m\xe5nad",MM:"%d m\xe5nader",y:"ett \xe5r",yy:"%d \xe5r"},dayOfMonthOrdinalParse:/\d{1,2}(e|a)/,ordinal:function(e){var a=e%10;return e+(1==~~(e%100/10)?"e":1===a?"a":2===a?"a":"e")},week:{dow:1,doy:4}}),l.defineLocale("sw",{months:"Januari_Februari_Machi_Aprili_Mei_Juni_Julai_Agosti_Septemba_Oktoba_Novemba_Desemba".split("_"),monthsShort:"Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ago_Sep_Okt_Nov_Des".split("_"),weekdays:"Jumapili_Jumatatu_Jumanne_Jumatano_Alhamisi_Ijumaa_Jumamosi".split("_"),weekdaysShort:"Jpl_Jtat_Jnne_Jtan_Alh_Ijm_Jmos".split("_"),weekdaysMin:"J2_J3_J4_J5_Al_Ij_J1".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[leo saa] LT",nextDay:"[kesho saa] LT",nextWeek:"[wiki ijayo] dddd [saat] LT",lastDay:"[jana] LT",lastWeek:"[wiki iliyopita] dddd [saat] LT",sameElse:"L"},relativeTime:{future:"%s baadaye",past:"tokea %s",s:"hivi punde",ss:"sekunde %d",m:"dakika moja",mm:"dakika %d",h:"saa limoja",hh:"masaa %d",d:"siku moja",dd:"masiku %d",M:"mwezi mmoja",MM:"miezi %d",y:"mwaka mmoja",yy:"miaka %d"},week:{dow:1,doy:7}});var Zn={1:"\u0be7",2:"\u0be8",3:"\u0be9",4:"\u0bea",5:"\u0beb",6:"\u0bec",7:"\u0bed",8:"\u0bee",9:"\u0bef",0:"\u0be6"},Bn={"\u0be7":"1","\u0be8":"2","\u0be9":"3","\u0bea":"4","\u0beb":"5","\u0bec":"6","\u0bed":"7","\u0bee":"8","\u0bef":"9","\u0be6":"0"};l.defineLocale("ta",{months:"\u0b9c\u0ba9\u0bb5\u0bb0\u0bbf_\u0baa\u0bbf\u0baa\u0bcd\u0bb0\u0bb5\u0bb0\u0bbf_\u0bae\u0bbe\u0bb0\u0bcd\u0b9a\u0bcd_\u0b8f\u0baa\u0bcd\u0bb0\u0bb2\u0bcd_\u0bae\u0bc7_\u0b9c\u0bc2\u0ba9\u0bcd_\u0b9c\u0bc2\u0bb2\u0bc8_\u0b86\u0b95\u0bb8\u0bcd\u0b9f\u0bcd_\u0b9a\u0bc6\u0baa\u0bcd\u0b9f\u0bc6\u0bae\u0bcd\u0baa\u0bb0\u0bcd_\u0b85\u0b95\u0bcd\u0b9f\u0bc7\u0bbe\u0baa\u0bb0\u0bcd_\u0ba8\u0bb5\u0bae\u0bcd\u0baa\u0bb0\u0bcd_\u0b9f\u0bbf\u0b9a\u0bae\u0bcd\u0baa\u0bb0\u0bcd".split("_"),monthsShort:"\u0b9c\u0ba9\u0bb5\u0bb0\u0bbf_\u0baa\u0bbf\u0baa\u0bcd\u0bb0\u0bb5\u0bb0\u0bbf_\u0bae\u0bbe\u0bb0\u0bcd\u0b9a\u0bcd_\u0b8f\u0baa\u0bcd\u0bb0\u0bb2\u0bcd_\u0bae\u0bc7_\u0b9c\u0bc2\u0ba9\u0bcd_\u0b9c\u0bc2\u0bb2\u0bc8_\u0b86\u0b95\u0bb8\u0bcd\u0b9f\u0bcd_\u0b9a\u0bc6\u0baa\u0bcd\u0b9f\u0bc6\u0bae\u0bcd\u0baa\u0bb0\u0bcd_\u0b85\u0b95\u0bcd\u0b9f\u0bc7\u0bbe\u0baa\u0bb0\u0bcd_\u0ba8\u0bb5\u0bae\u0bcd\u0baa\u0bb0\u0bcd_\u0b9f\u0bbf\u0b9a\u0bae\u0bcd\u0baa\u0bb0\u0bcd".split("_"),weekdays:"\u0b9e\u0bbe\u0baf\u0bbf\u0bb1\u0bcd\u0bb1\u0bc1\u0b95\u0bcd\u0b95\u0bbf\u0bb4\u0bae\u0bc8_\u0ba4\u0bbf\u0b99\u0bcd\u0b95\u0b9f\u0bcd\u0b95\u0bbf\u0bb4\u0bae\u0bc8_\u0b9a\u0bc6\u0bb5\u0bcd\u0bb5\u0bbe\u0baf\u0bcd\u0b95\u0bbf\u0bb4\u0bae\u0bc8_\u0baa\u0bc1\u0ba4\u0ba9\u0bcd\u0b95\u0bbf\u0bb4\u0bae\u0bc8_\u0bb5\u0bbf\u0baf\u0bbe\u0bb4\u0b95\u0bcd\u0b95\u0bbf\u0bb4\u0bae\u0bc8_\u0bb5\u0bc6\u0bb3\u0bcd\u0bb3\u0bbf\u0b95\u0bcd\u0b95\u0bbf\u0bb4\u0bae\u0bc8_\u0b9a\u0ba9\u0bbf\u0b95\u0bcd\u0b95\u0bbf\u0bb4\u0bae\u0bc8".split("_"),weekdaysShort:"\u0b9e\u0bbe\u0baf\u0bbf\u0bb1\u0bc1_\u0ba4\u0bbf\u0b99\u0bcd\u0b95\u0bb3\u0bcd_\u0b9a\u0bc6\u0bb5\u0bcd\u0bb5\u0bbe\u0baf\u0bcd_\u0baa\u0bc1\u0ba4\u0ba9\u0bcd_\u0bb5\u0bbf\u0baf\u0bbe\u0bb4\u0ba9\u0bcd_\u0bb5\u0bc6\u0bb3\u0bcd\u0bb3\u0bbf_\u0b9a\u0ba9\u0bbf".split("_"),weekdaysMin:"\u0b9e\u0bbe_\u0ba4\u0bbf_\u0b9a\u0bc6_\u0baa\u0bc1_\u0bb5\u0bbf_\u0bb5\u0bc6_\u0b9a".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, HH:mm",LLLL:"dddd, D MMMM YYYY, HH:mm"},calendar:{sameDay:"[\u0b87\u0ba9\u0bcd\u0bb1\u0bc1] LT",nextDay:"[\u0ba8\u0bbe\u0bb3\u0bc8] LT",nextWeek:"dddd, LT",lastDay:"[\u0ba8\u0bc7\u0bb1\u0bcd\u0bb1\u0bc1] LT",lastWeek:"[\u0b95\u0b9f\u0ba8\u0bcd\u0ba4 \u0bb5\u0bbe\u0bb0\u0bae\u0bcd] dddd, LT",sameElse:"L"},relativeTime:{future:"%s \u0b87\u0bb2\u0bcd",past:"%s \u0bae\u0bc1\u0ba9\u0bcd",s:"\u0b92\u0bb0\u0bc1 \u0b9a\u0bbf\u0bb2 \u0bb5\u0bbf\u0ba8\u0bbe\u0b9f\u0bbf\u0b95\u0bb3\u0bcd",ss:"%d \u0bb5\u0bbf\u0ba8\u0bbe\u0b9f\u0bbf\u0b95\u0bb3\u0bcd",m:"\u0b92\u0bb0\u0bc1 \u0ba8\u0bbf\u0bae\u0bbf\u0b9f\u0bae\u0bcd",mm:"%d \u0ba8\u0bbf\u0bae\u0bbf\u0b9f\u0b99\u0bcd\u0b95\u0bb3\u0bcd",h:"\u0b92\u0bb0\u0bc1 \u0bae\u0ba3\u0bbf \u0ba8\u0bc7\u0bb0\u0bae\u0bcd",hh:"%d \u0bae\u0ba3\u0bbf \u0ba8\u0bc7\u0bb0\u0bae\u0bcd",d:"\u0b92\u0bb0\u0bc1 \u0ba8\u0bbe\u0bb3\u0bcd",dd:"%d \u0ba8\u0bbe\u0b9f\u0bcd\u0b95\u0bb3\u0bcd",M:"\u0b92\u0bb0\u0bc1 \u0bae\u0bbe\u0ba4\u0bae\u0bcd",MM:"%d \u0bae\u0bbe\u0ba4\u0b99\u0bcd\u0b95\u0bb3\u0bcd",y:"\u0b92\u0bb0\u0bc1 \u0bb5\u0bb0\u0bc1\u0b9f\u0bae\u0bcd",yy:"%d \u0b86\u0ba3\u0bcd\u0b9f\u0bc1\u0b95\u0bb3\u0bcd"},dayOfMonthOrdinalParse:/\d{1,2}\u0bb5\u0ba4\u0bc1/,ordinal:function(e){return e+"\u0bb5\u0ba4\u0bc1"},preparse:function(e){return e.replace(/[\u0be7\u0be8\u0be9\u0bea\u0beb\u0bec\u0bed\u0bee\u0bef\u0be6]/g,function(e){return Bn[e]})},postformat:function(e){return e.replace(/\d/g,function(e){return Zn[e]})},meridiemParse:/\u0baf\u0bbe\u0bae\u0bae\u0bcd|\u0bb5\u0bc8\u0b95\u0bb1\u0bc8|\u0b95\u0bbe\u0bb2\u0bc8|\u0ba8\u0ba3\u0bcd\u0baa\u0b95\u0bb2\u0bcd|\u0b8e\u0bb1\u0bcd\u0baa\u0bbe\u0b9f\u0bc1|\u0bae\u0bbe\u0bb2\u0bc8/,meridiem:function(e,a,t){return e<2?" \u0baf\u0bbe\u0bae\u0bae\u0bcd":e<6?" \u0bb5\u0bc8\u0b95\u0bb1\u0bc8":e<10?" \u0b95\u0bbe\u0bb2\u0bc8":e<14?" \u0ba8\u0ba3\u0bcd\u0baa\u0b95\u0bb2\u0bcd":e<18?" \u0b8e\u0bb1\u0bcd\u0baa\u0bbe\u0b9f\u0bc1":e<22?" \u0bae\u0bbe\u0bb2\u0bc8":" \u0baf\u0bbe\u0bae\u0bae\u0bcd"},meridiemHour:function(e,a){return 12===e&&(e=0),"\u0baf\u0bbe\u0bae\u0bae\u0bcd"===a?e<2?e:e+12:"\u0bb5\u0bc8\u0b95\u0bb1\u0bc8"===a||"\u0b95\u0bbe\u0bb2\u0bc8"===a?e:"\u0ba8\u0ba3\u0bcd\u0baa\u0b95\u0bb2\u0bcd"===a&&10<=e?e:e+12},week:{dow:0,doy:6}}),l.defineLocale("te",{months:"\u0c1c\u0c28\u0c35\u0c30\u0c3f_\u0c2b\u0c3f\u0c2c\u0c4d\u0c30\u0c35\u0c30\u0c3f_\u0c2e\u0c3e\u0c30\u0c4d\u0c1a\u0c3f_\u0c0f\u0c2a\u0c4d\u0c30\u0c3f\u0c32\u0c4d_\u0c2e\u0c47_\u0c1c\u0c42\u0c28\u0c4d_\u0c1c\u0c42\u0c32\u0c46\u0c56_\u0c06\u0c17\u0c38\u0c4d\u0c1f\u0c41_\u0c38\u0c46\u0c2a\u0c4d\u0c1f\u0c46\u0c02\u0c2c\u0c30\u0c4d_\u0c05\u0c15\u0c4d\u0c1f\u0c4b\u0c2c\u0c30\u0c4d_\u0c28\u0c35\u0c02\u0c2c\u0c30\u0c4d_\u0c21\u0c3f\u0c38\u0c46\u0c02\u0c2c\u0c30\u0c4d".split("_"),monthsShort:"\u0c1c\u0c28._\u0c2b\u0c3f\u0c2c\u0c4d\u0c30._\u0c2e\u0c3e\u0c30\u0c4d\u0c1a\u0c3f_\u0c0f\u0c2a\u0c4d\u0c30\u0c3f._\u0c2e\u0c47_\u0c1c\u0c42\u0c28\u0c4d_\u0c1c\u0c42\u0c32\u0c46\u0c56_\u0c06\u0c17._\u0c38\u0c46\u0c2a\u0c4d._\u0c05\u0c15\u0c4d\u0c1f\u0c4b._\u0c28\u0c35._\u0c21\u0c3f\u0c38\u0c46.".split("_"),monthsParseExact:!0,weekdays:"\u0c06\u0c26\u0c3f\u0c35\u0c3e\u0c30\u0c02_\u0c38\u0c4b\u0c2e\u0c35\u0c3e\u0c30\u0c02_\u0c2e\u0c02\u0c17\u0c33\u0c35\u0c3e\u0c30\u0c02_\u0c2c\u0c41\u0c27\u0c35\u0c3e\u0c30\u0c02_\u0c17\u0c41\u0c30\u0c41\u0c35\u0c3e\u0c30\u0c02_\u0c36\u0c41\u0c15\u0c4d\u0c30\u0c35\u0c3e\u0c30\u0c02_\u0c36\u0c28\u0c3f\u0c35\u0c3e\u0c30\u0c02".split("_"),weekdaysShort:"\u0c06\u0c26\u0c3f_\u0c38\u0c4b\u0c2e_\u0c2e\u0c02\u0c17\u0c33_\u0c2c\u0c41\u0c27_\u0c17\u0c41\u0c30\u0c41_\u0c36\u0c41\u0c15\u0c4d\u0c30_\u0c36\u0c28\u0c3f".split("_"),weekdaysMin:"\u0c06_\u0c38\u0c4b_\u0c2e\u0c02_\u0c2c\u0c41_\u0c17\u0c41_\u0c36\u0c41_\u0c36".split("_"),longDateFormat:{LT:"A h:mm",LTS:"A h:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm",LLLL:"dddd, D MMMM YYYY, A h:mm"},calendar:{sameDay:"[\u0c28\u0c47\u0c21\u0c41] LT",nextDay:"[\u0c30\u0c47\u0c2a\u0c41] LT",nextWeek:"dddd, LT",lastDay:"[\u0c28\u0c3f\u0c28\u0c4d\u0c28] LT",lastWeek:"[\u0c17\u0c24] dddd, LT",sameElse:"L"},relativeTime:{future:"%s \u0c32\u0c4b",past:"%s \u0c15\u0c4d\u0c30\u0c3f\u0c24\u0c02",s:"\u0c15\u0c4a\u0c28\u0c4d\u0c28\u0c3f \u0c15\u0c4d\u0c37\u0c23\u0c3e\u0c32\u0c41",ss:"%d \u0c38\u0c46\u0c15\u0c28\u0c4d\u0c32\u0c41",m:"\u0c12\u0c15 \u0c28\u0c3f\u0c2e\u0c3f\u0c37\u0c02",mm:"%d \u0c28\u0c3f\u0c2e\u0c3f\u0c37\u0c3e\u0c32\u0c41",h:"\u0c12\u0c15 \u0c17\u0c02\u0c1f",hh:"%d \u0c17\u0c02\u0c1f\u0c32\u0c41",d:"\u0c12\u0c15 \u0c30\u0c4b\u0c1c\u0c41",dd:"%d \u0c30\u0c4b\u0c1c\u0c41\u0c32\u0c41",M:"\u0c12\u0c15 \u0c28\u0c46\u0c32",MM:"%d \u0c28\u0c46\u0c32\u0c32\u0c41",y:"\u0c12\u0c15 \u0c38\u0c02\u0c35\u0c24\u0c4d\u0c38\u0c30\u0c02",yy:"%d \u0c38\u0c02\u0c35\u0c24\u0c4d\u0c38\u0c30\u0c3e\u0c32\u0c41"},dayOfMonthOrdinalParse:/\d{1,2}\u0c35/,ordinal:"%d\u0c35",meridiemParse:/\u0c30\u0c3e\u0c24\u0c4d\u0c30\u0c3f|\u0c09\u0c26\u0c2f\u0c02|\u0c2e\u0c27\u0c4d\u0c2f\u0c3e\u0c39\u0c4d\u0c28\u0c02|\u0c38\u0c3e\u0c2f\u0c02\u0c24\u0c4d\u0c30\u0c02/,meridiemHour:function(e,a){return 12===e&&(e=0),"\u0c30\u0c3e\u0c24\u0c4d\u0c30\u0c3f"===a?e<4?e:e+12:"\u0c09\u0c26\u0c2f\u0c02"===a?e:"\u0c2e\u0c27\u0c4d\u0c2f\u0c3e\u0c39\u0c4d\u0c28\u0c02"===a?10<=e?e:e+12:"\u0c38\u0c3e\u0c2f\u0c02\u0c24\u0c4d\u0c30\u0c02"===a?e+12:void 0},meridiem:function(e,a,t){return e<4?"\u0c30\u0c3e\u0c24\u0c4d\u0c30\u0c3f":e<10?"\u0c09\u0c26\u0c2f\u0c02":e<17?"\u0c2e\u0c27\u0c4d\u0c2f\u0c3e\u0c39\u0c4d\u0c28\u0c02":e<20?"\u0c38\u0c3e\u0c2f\u0c02\u0c24\u0c4d\u0c30\u0c02":"\u0c30\u0c3e\u0c24\u0c4d\u0c30\u0c3f"},week:{dow:0,doy:6}}),l.defineLocale("tet",{months:"Janeiru_Fevereiru_Marsu_Abril_Maiu_Ju\xf1u_Jullu_Agustu_Setembru_Outubru_Novembru_Dezembru".split("_"),monthsShort:"Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez".split("_"),weekdays:"Domingu_Segunda_Tersa_Kuarta_Kinta_Sesta_Sabadu".split("_"),weekdaysShort:"Dom_Seg_Ters_Kua_Kint_Sest_Sab".split("_"),weekdaysMin:"Do_Seg_Te_Ku_Ki_Ses_Sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Ohin iha] LT",nextDay:"[Aban iha] LT",nextWeek:"dddd [iha] LT",lastDay:"[Horiseik iha] LT",lastWeek:"dddd [semana kotuk] [iha] LT",sameElse:"L"},relativeTime:{future:"iha %s",past:"%s liuba",s:"minutu balun",ss:"minutu %d",m:"minutu ida",mm:"minutu %d",h:"oras ida",hh:"oras %d",d:"loron ida",dd:"loron %d",M:"fulan ida",MM:"fulan %d",y:"tinan ida",yy:"tinan %d"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(e){var a=e%10;return e+(1==~~(e%100/10)?"th":1===a?"st":2===a?"nd":3===a?"rd":"th")},week:{dow:1,doy:4}});var qn={0:"-\u0443\u043c",1:"-\u0443\u043c",2:"-\u044e\u043c",3:"-\u044e\u043c",4:"-\u0443\u043c",5:"-\u0443\u043c",6:"-\u0443\u043c",7:"-\u0443\u043c",8:"-\u0443\u043c",9:"-\u0443\u043c",10:"-\u0443\u043c",12:"-\u0443\u043c",13:"-\u0443\u043c",20:"-\u0443\u043c",30:"-\u044e\u043c",40:"-\u0443\u043c",50:"-\u0443\u043c",60:"-\u0443\u043c",70:"-\u0443\u043c",80:"-\u0443\u043c",90:"-\u0443\u043c",100:"-\u0443\u043c"};l.defineLocale("tg",{months:"\u044f\u043d\u0432\u0430\u0440_\u0444\u0435\u0432\u0440\u0430\u043b_\u043c\u0430\u0440\u0442_\u0430\u043f\u0440\u0435\u043b_\u043c\u0430\u0439_\u0438\u044e\u043d_\u0438\u044e\u043b_\u0430\u0432\u0433\u0443\u0441\u0442_\u0441\u0435\u043d\u0442\u044f\u0431\u0440_\u043e\u043a\u0442\u044f\u0431\u0440_\u043d\u043e\u044f\u0431\u0440_\u0434\u0435\u043a\u0430\u0431\u0440".split("_"),monthsShort:"\u044f\u043d\u0432_\u0444\u0435\u0432_\u043c\u0430\u0440_\u0430\u043f\u0440_\u043c\u0430\u0439_\u0438\u044e\u043d_\u0438\u044e\u043b_\u0430\u0432\u0433_\u0441\u0435\u043d_\u043e\u043a\u0442_\u043d\u043e\u044f_\u0434\u0435\u043a".split("_"),weekdays:"\u044f\u043a\u0448\u0430\u043d\u0431\u0435_\u0434\u0443\u0448\u0430\u043d\u0431\u0435_\u0441\u0435\u0448\u0430\u043d\u0431\u0435_\u0447\u043e\u0440\u0448\u0430\u043d\u0431\u0435_\u043f\u0430\u043d\u04b7\u0448\u0430\u043d\u0431\u0435_\u04b7\u0443\u043c\u044a\u0430_\u0448\u0430\u043d\u0431\u0435".split("_"),weekdaysShort:"\u044f\u0448\u0431_\u0434\u0448\u0431_\u0441\u0448\u0431_\u0447\u0448\u0431_\u043f\u0448\u0431_\u04b7\u0443\u043c_\u0448\u043d\u0431".split("_"),weekdaysMin:"\u044f\u0448_\u0434\u0448_\u0441\u0448_\u0447\u0448_\u043f\u0448_\u04b7\u043c_\u0448\u0431".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[\u0418\u043c\u0440\u04ef\u0437 \u0441\u043e\u0430\u0442\u0438] LT",nextDay:"[\u041f\u0430\u0433\u043e\u04b3 \u0441\u043e\u0430\u0442\u0438] LT",lastDay:"[\u0414\u0438\u0440\u04ef\u0437 \u0441\u043e\u0430\u0442\u0438] LT",nextWeek:"dddd[\u0438] [\u04b3\u0430\u0444\u0442\u0430\u0438 \u043e\u044f\u043d\u0434\u0430 \u0441\u043e\u0430\u0442\u0438] LT",lastWeek:"dddd[\u0438] [\u04b3\u0430\u0444\u0442\u0430\u0438 \u0433\u0443\u0437\u0430\u0448\u0442\u0430 \u0441\u043e\u0430\u0442\u0438] LT",sameElse:"L"},relativeTime:{future:"\u0431\u0430\u044a\u0434\u0438 %s",past:"%s \u043f\u0435\u0448",s:"\u044f\u043a\u0447\u0430\u043d\u0434 \u0441\u043e\u043d\u0438\u044f",m:"\u044f\u043a \u0434\u0430\u049b\u0438\u049b\u0430",mm:"%d \u0434\u0430\u049b\u0438\u049b\u0430",h:"\u044f\u043a \u0441\u043e\u0430\u0442",hh:"%d \u0441\u043e\u0430\u0442",d:"\u044f\u043a \u0440\u04ef\u0437",dd:"%d \u0440\u04ef\u0437",M:"\u044f\u043a \u043c\u043e\u04b3",MM:"%d \u043c\u043e\u04b3",y:"\u044f\u043a \u0441\u043e\u043b",yy:"%d \u0441\u043e\u043b"},meridiemParse:/\u0448\u0430\u0431|\u0441\u0443\u0431\u04b3|\u0440\u04ef\u0437|\u0431\u0435\u0433\u043e\u04b3/,meridiemHour:function(e,a){return 12===e&&(e=0),"\u0448\u0430\u0431"===a?e<4?e:e+12:"\u0441\u0443\u0431\u04b3"===a?e:"\u0440\u04ef\u0437"===a?11<=e?e:e+12:"\u0431\u0435\u0433\u043e\u04b3"===a?e+12:void 0},meridiem:function(e,a,t){return e<4?"\u0448\u0430\u0431":e<11?"\u0441\u0443\u0431\u04b3":e<16?"\u0440\u04ef\u0437":e<19?"\u0431\u0435\u0433\u043e\u04b3":"\u0448\u0430\u0431"},dayOfMonthOrdinalParse:/\d{1,2}-(\u0443\u043c|\u044e\u043c)/,ordinal:function(e){return e+(qn[e]||qn[e%10]||qn[100<=e?100:null])},week:{dow:1,doy:7}}),l.defineLocale("th",{months:"\u0e21\u0e01\u0e23\u0e32\u0e04\u0e21_\u0e01\u0e38\u0e21\u0e20\u0e32\u0e1e\u0e31\u0e19\u0e18\u0e4c_\u0e21\u0e35\u0e19\u0e32\u0e04\u0e21_\u0e40\u0e21\u0e29\u0e32\u0e22\u0e19_\u0e1e\u0e24\u0e29\u0e20\u0e32\u0e04\u0e21_\u0e21\u0e34\u0e16\u0e38\u0e19\u0e32\u0e22\u0e19_\u0e01\u0e23\u0e01\u0e0e\u0e32\u0e04\u0e21_\u0e2a\u0e34\u0e07\u0e2b\u0e32\u0e04\u0e21_\u0e01\u0e31\u0e19\u0e22\u0e32\u0e22\u0e19_\u0e15\u0e38\u0e25\u0e32\u0e04\u0e21_\u0e1e\u0e24\u0e28\u0e08\u0e34\u0e01\u0e32\u0e22\u0e19_\u0e18\u0e31\u0e19\u0e27\u0e32\u0e04\u0e21".split("_"),monthsShort:"\u0e21.\u0e04._\u0e01.\u0e1e._\u0e21\u0e35.\u0e04._\u0e40\u0e21.\u0e22._\u0e1e.\u0e04._\u0e21\u0e34.\u0e22._\u0e01.\u0e04._\u0e2a.\u0e04._\u0e01.\u0e22._\u0e15.\u0e04._\u0e1e.\u0e22._\u0e18.\u0e04.".split("_"),monthsParseExact:!0,weekdays:"\u0e2d\u0e32\u0e17\u0e34\u0e15\u0e22\u0e4c_\u0e08\u0e31\u0e19\u0e17\u0e23\u0e4c_\u0e2d\u0e31\u0e07\u0e04\u0e32\u0e23_\u0e1e\u0e38\u0e18_\u0e1e\u0e24\u0e2b\u0e31\u0e2a\u0e1a\u0e14\u0e35_\u0e28\u0e38\u0e01\u0e23\u0e4c_\u0e40\u0e2a\u0e32\u0e23\u0e4c".split("_"),weekdaysShort:"\u0e2d\u0e32\u0e17\u0e34\u0e15\u0e22\u0e4c_\u0e08\u0e31\u0e19\u0e17\u0e23\u0e4c_\u0e2d\u0e31\u0e07\u0e04\u0e32\u0e23_\u0e1e\u0e38\u0e18_\u0e1e\u0e24\u0e2b\u0e31\u0e2a_\u0e28\u0e38\u0e01\u0e23\u0e4c_\u0e40\u0e2a\u0e32\u0e23\u0e4c".split("_"),weekdaysMin:"\u0e2d\u0e32._\u0e08._\u0e2d._\u0e1e._\u0e1e\u0e24._\u0e28._\u0e2a.".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY \u0e40\u0e27\u0e25\u0e32 H:mm",LLLL:"\u0e27\u0e31\u0e19dddd\u0e17\u0e35\u0e48 D MMMM YYYY \u0e40\u0e27\u0e25\u0e32 H:mm"},meridiemParse:/\u0e01\u0e48\u0e2d\u0e19\u0e40\u0e17\u0e35\u0e48\u0e22\u0e07|\u0e2b\u0e25\u0e31\u0e07\u0e40\u0e17\u0e35\u0e48\u0e22\u0e07/,isPM:function(e){return"\u0e2b\u0e25\u0e31\u0e07\u0e40\u0e17\u0e35\u0e48\u0e22\u0e07"===e},meridiem:function(e,a,t){return e<12?"\u0e01\u0e48\u0e2d\u0e19\u0e40\u0e17\u0e35\u0e48\u0e22\u0e07":"\u0e2b\u0e25\u0e31\u0e07\u0e40\u0e17\u0e35\u0e48\u0e22\u0e07"},calendar:{sameDay:"[\u0e27\u0e31\u0e19\u0e19\u0e35\u0e49 \u0e40\u0e27\u0e25\u0e32] LT",nextDay:"[\u0e1e\u0e23\u0e38\u0e48\u0e07\u0e19\u0e35\u0e49 \u0e40\u0e27\u0e25\u0e32] LT",nextWeek:"dddd[\u0e2b\u0e19\u0e49\u0e32 \u0e40\u0e27\u0e25\u0e32] LT",lastDay:"[\u0e40\u0e21\u0e37\u0e48\u0e2d\u0e27\u0e32\u0e19\u0e19\u0e35\u0e49 \u0e40\u0e27\u0e25\u0e32] LT",lastWeek:"[\u0e27\u0e31\u0e19]dddd[\u0e17\u0e35\u0e48\u0e41\u0e25\u0e49\u0e27 \u0e40\u0e27\u0e25\u0e32] LT",sameElse:"L"},relativeTime:{future:"\u0e2d\u0e35\u0e01 %s",past:"%s\u0e17\u0e35\u0e48\u0e41\u0e25\u0e49\u0e27",s:"\u0e44\u0e21\u0e48\u0e01\u0e35\u0e48\u0e27\u0e34\u0e19\u0e32\u0e17\u0e35",ss:"%d \u0e27\u0e34\u0e19\u0e32\u0e17\u0e35",m:"1 \u0e19\u0e32\u0e17\u0e35",mm:"%d \u0e19\u0e32\u0e17\u0e35",h:"1 \u0e0a\u0e31\u0e48\u0e27\u0e42\u0e21\u0e07",hh:"%d \u0e0a\u0e31\u0e48\u0e27\u0e42\u0e21\u0e07",d:"1 \u0e27\u0e31\u0e19",dd:"%d \u0e27\u0e31\u0e19",M:"1 \u0e40\u0e14\u0e37\u0e2d\u0e19",MM:"%d \u0e40\u0e14\u0e37\u0e2d\u0e19",y:"1 \u0e1b\u0e35",yy:"%d \u0e1b\u0e35"}}),l.defineLocale("tl-ph",{months:"Enero_Pebrero_Marso_Abril_Mayo_Hunyo_Hulyo_Agosto_Setyembre_Oktubre_Nobyembre_Disyembre".split("_"),monthsShort:"Ene_Peb_Mar_Abr_May_Hun_Hul_Ago_Set_Okt_Nob_Dis".split("_"),weekdays:"Linggo_Lunes_Martes_Miyerkules_Huwebes_Biyernes_Sabado".split("_"),weekdaysShort:"Lin_Lun_Mar_Miy_Huw_Biy_Sab".split("_"),weekdaysMin:"Li_Lu_Ma_Mi_Hu_Bi_Sab".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"MM/D/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY HH:mm",LLLL:"dddd, MMMM DD, YYYY HH:mm"},calendar:{sameDay:"LT [ngayong araw]",nextDay:"[Bukas ng] LT",nextWeek:"LT [sa susunod na] dddd",lastDay:"LT [kahapon]",lastWeek:"LT [noong nakaraang] dddd",sameElse:"L"},relativeTime:{future:"sa loob ng %s",past:"%s ang nakalipas",s:"ilang segundo",ss:"%d segundo",m:"isang minuto",mm:"%d minuto",h:"isang oras",hh:"%d oras",d:"isang araw",dd:"%d araw",M:"isang buwan",MM:"%d buwan",y:"isang taon",yy:"%d taon"},dayOfMonthOrdinalParse:/\d{1,2}/,ordinal:function(e){return e},week:{dow:1,doy:4}});var Qn="pagh_wa\u2019_cha\u2019_wej_loS_vagh_jav_Soch_chorgh_Hut".split("_");function Xn(e,a,t,s){var n=function(e){var a=Math.floor(e%1e3/100),t=Math.floor(e%100/10),s=e%10,n="";0<a&&(n+=Qn[a]+"vatlh");0<t&&(n+=(""!==n?" ":"")+Qn[t]+"maH");0<s&&(n+=(""!==n?" ":"")+Qn[s]);return""===n?"pagh":n}(e);switch(t){case"ss":return n+" lup";case"mm":return n+" tup";case"hh":return n+" rep";case"dd":return n+" jaj";case"MM":return n+" jar";case"yy":return n+" DIS"}}l.defineLocale("tlh",{months:"tera\u2019 jar wa\u2019_tera\u2019 jar cha\u2019_tera\u2019 jar wej_tera\u2019 jar loS_tera\u2019 jar vagh_tera\u2019 jar jav_tera\u2019 jar Soch_tera\u2019 jar chorgh_tera\u2019 jar Hut_tera\u2019 jar wa\u2019maH_tera\u2019 jar wa\u2019maH wa\u2019_tera\u2019 jar wa\u2019maH cha\u2019".split("_"),monthsShort:"jar wa\u2019_jar cha\u2019_jar wej_jar loS_jar vagh_jar jav_jar Soch_jar chorgh_jar Hut_jar wa\u2019maH_jar wa\u2019maH wa\u2019_jar wa\u2019maH cha\u2019".split("_"),monthsParseExact:!0,weekdays:"lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj".split("_"),weekdaysShort:"lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj".split("_"),weekdaysMin:"lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[DaHjaj] LT",nextDay:"[wa\u2019leS] LT",nextWeek:"LLL",lastDay:"[wa\u2019Hu\u2019] LT",lastWeek:"LLL",sameElse:"L"},relativeTime:{future:function(e){var a=e;return a=-1!==e.indexOf("jaj")?a.slice(0,-3)+"leS":-1!==e.indexOf("jar")?a.slice(0,-3)+"waQ":-1!==e.indexOf("DIS")?a.slice(0,-3)+"nem":a+" pIq"},past:function(e){var a=e;return a=-1!==e.indexOf("jaj")?a.slice(0,-3)+"Hu\u2019":-1!==e.indexOf("jar")?a.slice(0,-3)+"wen":-1!==e.indexOf("DIS")?a.slice(0,-3)+"ben":a+" ret"},s:"puS lup",ss:Xn,m:"wa\u2019 tup",mm:Xn,h:"wa\u2019 rep",hh:Xn,d:"wa\u2019 jaj",dd:Xn,M:"wa\u2019 jar",MM:Xn,y:"wa\u2019 DIS",yy:Xn},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}});var ed={1:"'inci",5:"'inci",8:"'inci",70:"'inci",80:"'inci",2:"'nci",7:"'nci",20:"'nci",50:"'nci",3:"'\xfcnc\xfc",4:"'\xfcnc\xfc",100:"'\xfcnc\xfc",6:"'nc\u0131",9:"'uncu",10:"'uncu",30:"'uncu",60:"'\u0131nc\u0131",90:"'\u0131nc\u0131"};function ad(e,a,t,s){var n={s:["viensas secunds","'iensas secunds"],ss:[e+" secunds",e+" secunds"],m:["'n m\xedut","'iens m\xedut"],mm:[e+" m\xeduts",e+" m\xeduts"],h:["'n \xfeora","'iensa \xfeora"],hh:[e+" \xfeoras",e+" \xfeoras"],d:["'n ziua","'iensa ziua"],dd:[e+" ziuas",e+" ziuas"],M:["'n mes","'iens mes"],MM:[e+" mesen",e+" mesen"],y:["'n ar","'iens ar"],yy:[e+" ars",e+" ars"]};return s?n[t][0]:a?n[t][0]:n[t][1]}function td(e,a,t){var s,n;return"m"===t?a?"\u0445\u0432\u0438\u043b\u0438\u043d\u0430":"\u0445\u0432\u0438\u043b\u0438\u043d\u0443":"h"===t?a?"\u0433\u043e\u0434\u0438\u043d\u0430":"\u0433\u043e\u0434\u0438\u043d\u0443":e+" "+(s=+e,n={ss:a?"\u0441\u0435\u043a\u0443\u043d\u0434\u0430_\u0441\u0435\u043a\u0443\u043d\u0434\u0438_\u0441\u0435\u043a\u0443\u043d\u0434":"\u0441\u0435\u043a\u0443\u043d\u0434\u0443_\u0441\u0435\u043a\u0443\u043d\u0434\u0438_\u0441\u0435\u043a\u0443\u043d\u0434",mm:a?"\u0445\u0432\u0438\u043b\u0438\u043d\u0430_\u0445\u0432\u0438\u043b\u0438\u043d\u0438_\u0445\u0432\u0438\u043b\u0438\u043d":"\u0445\u0432\u0438\u043b\u0438\u043d\u0443_\u0445\u0432\u0438\u043b\u0438\u043d\u0438_\u0445\u0432\u0438\u043b\u0438\u043d",hh:a?"\u0433\u043e\u0434\u0438\u043d\u0430_\u0433\u043e\u0434\u0438\u043d\u0438_\u0433\u043e\u0434\u0438\u043d":"\u0433\u043e\u0434\u0438\u043d\u0443_\u0433\u043e\u0434\u0438\u043d\u0438_\u0433\u043e\u0434\u0438\u043d",dd:"\u0434\u0435\u043d\u044c_\u0434\u043d\u0456_\u0434\u043d\u0456\u0432",MM:"\u043c\u0456\u0441\u044f\u0446\u044c_\u043c\u0456\u0441\u044f\u0446\u0456_\u043c\u0456\u0441\u044f\u0446\u0456\u0432",yy:"\u0440\u0456\u043a_\u0440\u043e\u043a\u0438_\u0440\u043e\u043a\u0456\u0432"}[t].split("_"),s%10==1&&s%100!=11?n[0]:2<=s%10&&s%10<=4&&(s%100<10||20<=s%100)?n[1]:n[2])}function sd(e){return function(){return e+"\u043e"+(11===this.hours()?"\u0431":"")+"] LT"}}l.defineLocale("tr",{months:"Ocak_\u015eubat_Mart_Nisan_May\u0131s_Haziran_Temmuz_A\u011fustos_Eyl\xfcl_Ekim_Kas\u0131m_Aral\u0131k".split("_"),monthsShort:"Oca_\u015eub_Mar_Nis_May_Haz_Tem_A\u011fu_Eyl_Eki_Kas_Ara".split("_"),weekdays:"Pazar_Pazartesi_Sal\u0131_\xc7ar\u015famba_Per\u015fembe_Cuma_Cumartesi".split("_"),weekdaysShort:"Paz_Pts_Sal_\xc7ar_Per_Cum_Cts".split("_"),weekdaysMin:"Pz_Pt_Sa_\xc7a_Pe_Cu_Ct".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[bug\xfcn saat] LT",nextDay:"[yar\u0131n saat] LT",nextWeek:"[gelecek] dddd [saat] LT",lastDay:"[d\xfcn] LT",lastWeek:"[ge\xe7en] dddd [saat] LT",sameElse:"L"},relativeTime:{future:"%s sonra",past:"%s \xf6nce",s:"birka\xe7 saniye",ss:"%d saniye",m:"bir dakika",mm:"%d dakika",h:"bir saat",hh:"%d saat",d:"bir g\xfcn",dd:"%d g\xfcn",M:"bir ay",MM:"%d ay",y:"bir y\u0131l",yy:"%d y\u0131l"},ordinal:function(e,a){switch(a){case"d":case"D":case"Do":case"DD":return e;default:if(0===e)return e+"'\u0131nc\u0131";var t=e%10;return e+(ed[t]||ed[e%100-t]||ed[100<=e?100:null])}},week:{dow:1,doy:7}}),l.defineLocale("tzl",{months:"Januar_Fevraglh_Mar\xe7_Avr\xefu_Mai_G\xfcn_Julia_Guscht_Setemvar_Listop\xe4ts_Noemvar_Zecemvar".split("_"),monthsShort:"Jan_Fev_Mar_Avr_Mai_G\xfcn_Jul_Gus_Set_Lis_Noe_Zec".split("_"),weekdays:"S\xfaladi_L\xfane\xe7i_Maitzi_M\xe1rcuri_Xh\xfaadi_Vi\xe9ner\xe7i_S\xe1turi".split("_"),weekdaysShort:"S\xfal_L\xfan_Mai_M\xe1r_Xh\xfa_Vi\xe9_S\xe1t".split("_"),weekdaysMin:"S\xfa_L\xfa_Ma_M\xe1_Xh_Vi_S\xe1".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD.MM.YYYY",LL:"D. MMMM [dallas] YYYY",LLL:"D. MMMM [dallas] YYYY HH.mm",LLLL:"dddd, [li] D. MMMM [dallas] YYYY HH.mm"},meridiemParse:/d\'o|d\'a/i,isPM:function(e){return"d'o"===e.toLowerCase()},meridiem:function(e,a,t){return 11<e?t?"d'o":"D'O":t?"d'a":"D'A"},calendar:{sameDay:"[oxhi \xe0] LT",nextDay:"[dem\xe0 \xe0] LT",nextWeek:"dddd [\xe0] LT",lastDay:"[ieiri \xe0] LT",lastWeek:"[s\xfcr el] dddd [lasteu \xe0] LT",sameElse:"L"},relativeTime:{future:"osprei %s",past:"ja%s",s:ad,ss:ad,m:ad,mm:ad,h:ad,hh:ad,d:ad,dd:ad,M:ad,MM:ad,y:ad,yy:ad},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}}),l.defineLocale("tzm-latn",{months:"innayr_br\u02e4ayr\u02e4_mar\u02e4s\u02e4_ibrir_mayyw_ywnyw_ywlywz_\u0263w\u0161t_\u0161wtanbir_kt\u02e4wbr\u02e4_nwwanbir_dwjnbir".split("_"),monthsShort:"innayr_br\u02e4ayr\u02e4_mar\u02e4s\u02e4_ibrir_mayyw_ywnyw_ywlywz_\u0263w\u0161t_\u0161wtanbir_kt\u02e4wbr\u02e4_nwwanbir_dwjnbir".split("_"),weekdays:"asamas_aynas_asinas_akras_akwas_asimwas_asi\u1e0dyas".split("_"),weekdaysShort:"asamas_aynas_asinas_akras_akwas_asimwas_asi\u1e0dyas".split("_"),weekdaysMin:"asamas_aynas_asinas_akras_akwas_asimwas_asi\u1e0dyas".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[asdkh g] LT",nextDay:"[aska g] LT",nextWeek:"dddd [g] LT",lastDay:"[assant g] LT",lastWeek:"dddd [g] LT",sameElse:"L"},relativeTime:{future:"dadkh s yan %s",past:"yan %s",s:"imik",ss:"%d imik",m:"minu\u1e0d",mm:"%d minu\u1e0d",h:"sa\u025ba",hh:"%d tassa\u025bin",d:"ass",dd:"%d ossan",M:"ayowr",MM:"%d iyyirn",y:"asgas",yy:"%d isgasn"},week:{dow:6,doy:12}}),l.defineLocale("tzm",{months:"\u2d49\u2d4f\u2d4f\u2d30\u2d62\u2d54_\u2d31\u2d55\u2d30\u2d62\u2d55_\u2d4e\u2d30\u2d55\u2d5a_\u2d49\u2d31\u2d54\u2d49\u2d54_\u2d4e\u2d30\u2d62\u2d62\u2d53_\u2d62\u2d53\u2d4f\u2d62\u2d53_\u2d62\u2d53\u2d4d\u2d62\u2d53\u2d63_\u2d56\u2d53\u2d5b\u2d5c_\u2d5b\u2d53\u2d5c\u2d30\u2d4f\u2d31\u2d49\u2d54_\u2d3d\u2d5f\u2d53\u2d31\u2d55_\u2d4f\u2d53\u2d61\u2d30\u2d4f\u2d31\u2d49\u2d54_\u2d37\u2d53\u2d4a\u2d4f\u2d31\u2d49\u2d54".split("_"),monthsShort:"\u2d49\u2d4f\u2d4f\u2d30\u2d62\u2d54_\u2d31\u2d55\u2d30\u2d62\u2d55_\u2d4e\u2d30\u2d55\u2d5a_\u2d49\u2d31\u2d54\u2d49\u2d54_\u2d4e\u2d30\u2d62\u2d62\u2d53_\u2d62\u2d53\u2d4f\u2d62\u2d53_\u2d62\u2d53\u2d4d\u2d62\u2d53\u2d63_\u2d56\u2d53\u2d5b\u2d5c_\u2d5b\u2d53\u2d5c\u2d30\u2d4f\u2d31\u2d49\u2d54_\u2d3d\u2d5f\u2d53\u2d31\u2d55_\u2d4f\u2d53\u2d61\u2d30\u2d4f\u2d31\u2d49\u2d54_\u2d37\u2d53\u2d4a\u2d4f\u2d31\u2d49\u2d54".split("_"),weekdays:"\u2d30\u2d59\u2d30\u2d4e\u2d30\u2d59_\u2d30\u2d62\u2d4f\u2d30\u2d59_\u2d30\u2d59\u2d49\u2d4f\u2d30\u2d59_\u2d30\u2d3d\u2d54\u2d30\u2d59_\u2d30\u2d3d\u2d61\u2d30\u2d59_\u2d30\u2d59\u2d49\u2d4e\u2d61\u2d30\u2d59_\u2d30\u2d59\u2d49\u2d39\u2d62\u2d30\u2d59".split("_"),weekdaysShort:"\u2d30\u2d59\u2d30\u2d4e\u2d30\u2d59_\u2d30\u2d62\u2d4f\u2d30\u2d59_\u2d30\u2d59\u2d49\u2d4f\u2d30\u2d59_\u2d30\u2d3d\u2d54\u2d30\u2d59_\u2d30\u2d3d\u2d61\u2d30\u2d59_\u2d30\u2d59\u2d49\u2d4e\u2d61\u2d30\u2d59_\u2d30\u2d59\u2d49\u2d39\u2d62\u2d30\u2d59".split("_"),weekdaysMin:"\u2d30\u2d59\u2d30\u2d4e\u2d30\u2d59_\u2d30\u2d62\u2d4f\u2d30\u2d59_\u2d30\u2d59\u2d49\u2d4f\u2d30\u2d59_\u2d30\u2d3d\u2d54\u2d30\u2d59_\u2d30\u2d3d\u2d61\u2d30\u2d59_\u2d30\u2d59\u2d49\u2d4e\u2d61\u2d30\u2d59_\u2d30\u2d59\u2d49\u2d39\u2d62\u2d30\u2d59".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[\u2d30\u2d59\u2d37\u2d45 \u2d34] LT",nextDay:"[\u2d30\u2d59\u2d3d\u2d30 \u2d34] LT",nextWeek:"dddd [\u2d34] LT",lastDay:"[\u2d30\u2d5a\u2d30\u2d4f\u2d5c \u2d34] LT",lastWeek:"dddd [\u2d34] LT",sameElse:"L"},relativeTime:{future:"\u2d37\u2d30\u2d37\u2d45 \u2d59 \u2d62\u2d30\u2d4f %s",past:"\u2d62\u2d30\u2d4f %s",s:"\u2d49\u2d4e\u2d49\u2d3d",ss:"%d \u2d49\u2d4e\u2d49\u2d3d",m:"\u2d4e\u2d49\u2d4f\u2d53\u2d3a",mm:"%d \u2d4e\u2d49\u2d4f\u2d53\u2d3a",h:"\u2d59\u2d30\u2d44\u2d30",hh:"%d \u2d5c\u2d30\u2d59\u2d59\u2d30\u2d44\u2d49\u2d4f",d:"\u2d30\u2d59\u2d59",dd:"%d o\u2d59\u2d59\u2d30\u2d4f",M:"\u2d30\u2d62o\u2d53\u2d54",MM:"%d \u2d49\u2d62\u2d62\u2d49\u2d54\u2d4f",y:"\u2d30\u2d59\u2d33\u2d30\u2d59",yy:"%d \u2d49\u2d59\u2d33\u2d30\u2d59\u2d4f"},week:{dow:6,doy:12}}),l.defineLocale("ug-cn",{months:"\u064a\u0627\u0646\u06cb\u0627\u0631_\u0641\u06d0\u06cb\u0631\u0627\u0644_\u0645\u0627\u0631\u062a_\u0626\u0627\u067e\u0631\u06d0\u0644_\u0645\u0627\u064a_\u0626\u0649\u064a\u06c7\u0646_\u0626\u0649\u064a\u06c7\u0644_\u0626\u0627\u06cb\u063a\u06c7\u0633\u062a_\u0633\u06d0\u0646\u062a\u06d5\u0628\u0649\u0631_\u0626\u06c6\u0643\u062a\u06d5\u0628\u0649\u0631_\u0646\u0648\u064a\u0627\u0628\u0649\u0631_\u062f\u06d0\u0643\u0627\u0628\u0649\u0631".split("_"),monthsShort:"\u064a\u0627\u0646\u06cb\u0627\u0631_\u0641\u06d0\u06cb\u0631\u0627\u0644_\u0645\u0627\u0631\u062a_\u0626\u0627\u067e\u0631\u06d0\u0644_\u0645\u0627\u064a_\u0626\u0649\u064a\u06c7\u0646_\u0626\u0649\u064a\u06c7\u0644_\u0626\u0627\u06cb\u063a\u06c7\u0633\u062a_\u0633\u06d0\u0646\u062a\u06d5\u0628\u0649\u0631_\u0626\u06c6\u0643\u062a\u06d5\u0628\u0649\u0631_\u0646\u0648\u064a\u0627\u0628\u0649\u0631_\u062f\u06d0\u0643\u0627\u0628\u0649\u0631".split("_"),weekdays:"\u064a\u06d5\u0643\u0634\u06d5\u0646\u0628\u06d5_\u062f\u06c8\u0634\u06d5\u0646\u0628\u06d5_\u0633\u06d5\u064a\u0634\u06d5\u0646\u0628\u06d5_\u0686\u0627\u0631\u0634\u06d5\u0646\u0628\u06d5_\u067e\u06d5\u064a\u0634\u06d5\u0646\u0628\u06d5_\u062c\u06c8\u0645\u06d5_\u0634\u06d5\u0646\u0628\u06d5".split("_"),weekdaysShort:"\u064a\u06d5_\u062f\u06c8_\u0633\u06d5_\u0686\u0627_\u067e\u06d5_\u062c\u06c8_\u0634\u06d5".split("_"),weekdaysMin:"\u064a\u06d5_\u062f\u06c8_\u0633\u06d5_\u0686\u0627_\u067e\u06d5_\u062c\u06c8_\u0634\u06d5".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"YYYY-\u064a\u0649\u0644\u0649M-\u0626\u0627\u064a\u0646\u0649\u06adD-\u0643\u06c8\u0646\u0649",LLL:"YYYY-\u064a\u0649\u0644\u0649M-\u0626\u0627\u064a\u0646\u0649\u06adD-\u0643\u06c8\u0646\u0649\u060c HH:mm",LLLL:"dddd\u060c YYYY-\u064a\u0649\u0644\u0649M-\u0626\u0627\u064a\u0646\u0649\u06adD-\u0643\u06c8\u0646\u0649\u060c HH:mm"},meridiemParse:/\u064a\u06d0\u0631\u0649\u0645 \u0643\u06d0\u0686\u06d5|\u0633\u06d5\u06be\u06d5\u0631|\u0686\u06c8\u0634\u062a\u0649\u0646 \u0628\u06c7\u0631\u06c7\u0646|\u0686\u06c8\u0634|\u0686\u06c8\u0634\u062a\u0649\u0646 \u0643\u06d0\u064a\u0649\u0646|\u0643\u06d5\u0686/,meridiemHour:function(e,a){return 12===e&&(e=0),"\u064a\u06d0\u0631\u0649\u0645 \u0643\u06d0\u0686\u06d5"===a||"\u0633\u06d5\u06be\u06d5\u0631"===a||"\u0686\u06c8\u0634\u062a\u0649\u0646 \u0628\u06c7\u0631\u06c7\u0646"===a?e:"\u0686\u06c8\u0634\u062a\u0649\u0646 \u0643\u06d0\u064a\u0649\u0646"===a||"\u0643\u06d5\u0686"===a?e+12:11<=e?e:e+12},meridiem:function(e,a,t){var s=100*e+a;return s<600?"\u064a\u06d0\u0631\u0649\u0645 \u0643\u06d0\u0686\u06d5":s<900?"\u0633\u06d5\u06be\u06d5\u0631":s<1130?"\u0686\u06c8\u0634\u062a\u0649\u0646 \u0628\u06c7\u0631\u06c7\u0646":s<1230?"\u0686\u06c8\u0634":s<1800?"\u0686\u06c8\u0634\u062a\u0649\u0646 \u0643\u06d0\u064a\u0649\u0646":"\u0643\u06d5\u0686"},calendar:{sameDay:"[\u0628\u06c8\u06af\u06c8\u0646 \u0633\u0627\u0626\u06d5\u062a] LT",nextDay:"[\u0626\u06d5\u062a\u06d5 \u0633\u0627\u0626\u06d5\u062a] LT",nextWeek:"[\u0643\u06d0\u0644\u06d5\u0631\u0643\u0649] dddd [\u0633\u0627\u0626\u06d5\u062a] LT",lastDay:"[\u062a\u06c6\u0646\u06c8\u06af\u06c8\u0646] LT",lastWeek:"[\u0626\u0627\u0644\u062f\u0649\u0646\u0642\u0649] dddd [\u0633\u0627\u0626\u06d5\u062a] LT",sameElse:"L"},relativeTime:{future:"%s \u0643\u06d0\u064a\u0649\u0646",past:"%s \u0628\u06c7\u0631\u06c7\u0646",s:"\u0646\u06d5\u0686\u0686\u06d5 \u0633\u06d0\u0643\u0648\u0646\u062a",ss:"%d \u0633\u06d0\u0643\u0648\u0646\u062a",m:"\u0628\u0649\u0631 \u0645\u0649\u0646\u06c7\u062a",mm:"%d \u0645\u0649\u0646\u06c7\u062a",h:"\u0628\u0649\u0631 \u0633\u0627\u0626\u06d5\u062a",hh:"%d \u0633\u0627\u0626\u06d5\u062a",d:"\u0628\u0649\u0631 \u0643\u06c8\u0646",dd:"%d \u0643\u06c8\u0646",M:"\u0628\u0649\u0631 \u0626\u0627\u064a",MM:"%d \u0626\u0627\u064a",y:"\u0628\u0649\u0631 \u064a\u0649\u0644",yy:"%d \u064a\u0649\u0644"},dayOfMonthOrdinalParse:/\d{1,2}(-\u0643\u06c8\u0646\u0649|-\u0626\u0627\u064a|-\u06be\u06d5\u067e\u062a\u06d5)/,ordinal:function(e,a){switch(a){case"d":case"D":case"DDD":return e+"-\u0643\u06c8\u0646\u0649";case"w":case"W":return e+"-\u06be\u06d5\u067e\u062a\u06d5";default:return e}},preparse:function(e){return e.replace(/\u060c/g,",")},postformat:function(e){return e.replace(/,/g,"\u060c")},week:{dow:1,doy:7}}),l.defineLocale("uk",{months:{format:"\u0441\u0456\u0447\u043d\u044f_\u043b\u044e\u0442\u043e\u0433\u043e_\u0431\u0435\u0440\u0435\u0437\u043d\u044f_\u043a\u0432\u0456\u0442\u043d\u044f_\u0442\u0440\u0430\u0432\u043d\u044f_\u0447\u0435\u0440\u0432\u043d\u044f_\u043b\u0438\u043f\u043d\u044f_\u0441\u0435\u0440\u043f\u043d\u044f_\u0432\u0435\u0440\u0435\u0441\u043d\u044f_\u0436\u043e\u0432\u0442\u043d\u044f_\u043b\u0438\u0441\u0442\u043e\u043f\u0430\u0434\u0430_\u0433\u0440\u0443\u0434\u043d\u044f".split("_"),standalone:"\u0441\u0456\u0447\u0435\u043d\u044c_\u043b\u044e\u0442\u0438\u0439_\u0431\u0435\u0440\u0435\u0437\u0435\u043d\u044c_\u043a\u0432\u0456\u0442\u0435\u043d\u044c_\u0442\u0440\u0430\u0432\u0435\u043d\u044c_\u0447\u0435\u0440\u0432\u0435\u043d\u044c_\u043b\u0438\u043f\u0435\u043d\u044c_\u0441\u0435\u0440\u043f\u0435\u043d\u044c_\u0432\u0435\u0440\u0435\u0441\u0435\u043d\u044c_\u0436\u043e\u0432\u0442\u0435\u043d\u044c_\u043b\u0438\u0441\u0442\u043e\u043f\u0430\u0434_\u0433\u0440\u0443\u0434\u0435\u043d\u044c".split("_")},monthsShort:"\u0441\u0456\u0447_\u043b\u044e\u0442_\u0431\u0435\u0440_\u043a\u0432\u0456\u0442_\u0442\u0440\u0430\u0432_\u0447\u0435\u0440\u0432_\u043b\u0438\u043f_\u0441\u0435\u0440\u043f_\u0432\u0435\u0440_\u0436\u043e\u0432\u0442_\u043b\u0438\u0441\u0442_\u0433\u0440\u0443\u0434".split("_"),weekdays:function(e,a){var t={nominative:"\u043d\u0435\u0434\u0456\u043b\u044f_\u043f\u043e\u043d\u0435\u0434\u0456\u043b\u043e\u043a_\u0432\u0456\u0432\u0442\u043e\u0440\u043e\u043a_\u0441\u0435\u0440\u0435\u0434\u0430_\u0447\u0435\u0442\u0432\u0435\u0440_\u043f\u2019\u044f\u0442\u043d\u0438\u0446\u044f_\u0441\u0443\u0431\u043e\u0442\u0430".split("_"),accusative:"\u043d\u0435\u0434\u0456\u043b\u044e_\u043f\u043e\u043d\u0435\u0434\u0456\u043b\u043e\u043a_\u0432\u0456\u0432\u0442\u043e\u0440\u043e\u043a_\u0441\u0435\u0440\u0435\u0434\u0443_\u0447\u0435\u0442\u0432\u0435\u0440_\u043f\u2019\u044f\u0442\u043d\u0438\u0446\u044e_\u0441\u0443\u0431\u043e\u0442\u0443".split("_"),genitive:"\u043d\u0435\u0434\u0456\u043b\u0456_\u043f\u043e\u043d\u0435\u0434\u0456\u043b\u043a\u0430_\u0432\u0456\u0432\u0442\u043e\u0440\u043a\u0430_\u0441\u0435\u0440\u0435\u0434\u0438_\u0447\u0435\u0442\u0432\u0435\u0440\u0433\u0430_\u043f\u2019\u044f\u0442\u043d\u0438\u0446\u0456_\u0441\u0443\u0431\u043e\u0442\u0438".split("_")};return e?t[/(\[[\u0412\u0432\u0423\u0443]\]) ?dddd/.test(a)?"accusative":/\[?(?:\u043c\u0438\u043d\u0443\u043b\u043e\u0457|\u043d\u0430\u0441\u0442\u0443\u043f\u043d\u043e\u0457)? ?\] ?dddd/.test(a)?"genitive":"nominative"][e.day()]:t.nominative},weekdaysShort:"\u043d\u0434_\u043f\u043d_\u0432\u0442_\u0441\u0440_\u0447\u0442_\u043f\u0442_\u0441\u0431".split("_"),weekdaysMin:"\u043d\u0434_\u043f\u043d_\u0432\u0442_\u0441\u0440_\u0447\u0442_\u043f\u0442_\u0441\u0431".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY \u0440.",LLL:"D MMMM YYYY \u0440., HH:mm",LLLL:"dddd, D MMMM YYYY \u0440., HH:mm"},calendar:{sameDay:sd("[\u0421\u044c\u043e\u0433\u043e\u0434\u043d\u0456 "),nextDay:sd("[\u0417\u0430\u0432\u0442\u0440\u0430 "),lastDay:sd("[\u0412\u0447\u043e\u0440\u0430 "),nextWeek:sd("[\u0423] dddd ["),lastWeek:function(){switch(this.day()){case 0:case 3:case 5:case 6:return sd("[\u041c\u0438\u043d\u0443\u043b\u043e\u0457] dddd [").call(this);case 1:case 2:case 4:return sd("[\u041c\u0438\u043d\u0443\u043b\u043e\u0433\u043e] dddd [").call(this)}},sameElse:"L"},relativeTime:{future:"\u0437\u0430 %s",past:"%s \u0442\u043e\u043c\u0443",s:"\u0434\u0435\u043a\u0456\u043b\u044c\u043a\u0430 \u0441\u0435\u043a\u0443\u043d\u0434",ss:td,m:td,mm:td,h:"\u0433\u043e\u0434\u0438\u043d\u0443",hh:td,d:"\u0434\u0435\u043d\u044c",dd:td,M:"\u043c\u0456\u0441\u044f\u0446\u044c",MM:td,y:"\u0440\u0456\u043a",yy:td},meridiemParse:/\u043d\u043e\u0447\u0456|\u0440\u0430\u043d\u043a\u0443|\u0434\u043d\u044f|\u0432\u0435\u0447\u043e\u0440\u0430/,isPM:function(e){return/^(\u0434\u043d\u044f|\u0432\u0435\u0447\u043e\u0440\u0430)$/.test(e)},meridiem:function(e,a,t){return e<4?"\u043d\u043e\u0447\u0456":e<12?"\u0440\u0430\u043d\u043a\u0443":e<17?"\u0434\u043d\u044f":"\u0432\u0435\u0447\u043e\u0440\u0430"},dayOfMonthOrdinalParse:/\d{1,2}-(\u0439|\u0433\u043e)/,ordinal:function(e,a){switch(a){case"M":case"d":case"DDD":case"w":case"W":return e+"-\u0439";case"D":return e+"-\u0433\u043e";default:return e}},week:{dow:1,doy:7}});var nd=["\u062c\u0646\u0648\u0631\u06cc","\u0641\u0631\u0648\u0631\u06cc","\u0645\u0627\u0631\u0686","\u0627\u067e\u0631\u06cc\u0644","\u0645\u0626\u06cc","\u062c\u0648\u0646","\u062c\u0648\u0644\u0627\u0626\u06cc","\u0627\u06af\u0633\u062a","\u0633\u062a\u0645\u0628\u0631","\u0627\u06a9\u062a\u0648\u0628\u0631","\u0646\u0648\u0645\u0628\u0631","\u062f\u0633\u0645\u0628\u0631"],dd=["\u0627\u062a\u0648\u0627\u0631","\u067e\u06cc\u0631","\u0645\u0646\u06af\u0644","\u0628\u062f\u06be","\u062c\u0645\u0639\u0631\u0627\u062a","\u062c\u0645\u0639\u06c1","\u06c1\u0641\u062a\u06c1"];return l.defineLocale("ur",{months:nd,monthsShort:nd,weekdays:dd,weekdaysShort:dd,weekdaysMin:dd,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd\u060c D MMMM YYYY HH:mm"},meridiemParse:/\u0635\u0628\u062d|\u0634\u0627\u0645/,isPM:function(e){return"\u0634\u0627\u0645"===e},meridiem:function(e,a,t){return e<12?"\u0635\u0628\u062d":"\u0634\u0627\u0645"},calendar:{sameDay:"[\u0622\u062c \u0628\u0648\u0642\u062a] LT",nextDay:"[\u06a9\u0644 \u0628\u0648\u0642\u062a] LT",nextWeek:"dddd [\u0628\u0648\u0642\u062a] LT",lastDay:"[\u06af\u0630\u0634\u062a\u06c1 \u0631\u0648\u0632 \u0628\u0648\u0642\u062a] LT",lastWeek:"[\u06af\u0630\u0634\u062a\u06c1] dddd [\u0628\u0648\u0642\u062a] LT",sameElse:"L"},relativeTime:{future:"%s \u0628\u0639\u062f",past:"%s \u0642\u0628\u0644",s:"\u0686\u0646\u062f \u0633\u06cc\u06a9\u0646\u0688",ss:"%d \u0633\u06cc\u06a9\u0646\u0688",m:"\u0627\u06cc\u06a9 \u0645\u0646\u0679",mm:"%d \u0645\u0646\u0679",h:"\u0627\u06cc\u06a9 \u06af\u06be\u0646\u0679\u06c1",hh:"%d \u06af\u06be\u0646\u0679\u06d2",d:"\u0627\u06cc\u06a9 \u062f\u0646",dd:"%d \u062f\u0646",M:"\u0627\u06cc\u06a9 \u0645\u0627\u06c1",MM:"%d \u0645\u0627\u06c1",y:"\u0627\u06cc\u06a9 \u0633\u0627\u0644",yy:"%d \u0633\u0627\u0644"},preparse:function(e){return e.replace(/\u060c/g,",")},postformat:function(e){return e.replace(/,/g,"\u060c")},week:{dow:1,doy:4}}),l.defineLocale("uz-latn",{months:"Yanvar_Fevral_Mart_Aprel_May_Iyun_Iyul_Avgust_Sentabr_Oktabr_Noyabr_Dekabr".split("_"),monthsShort:"Yan_Fev_Mar_Apr_May_Iyun_Iyul_Avg_Sen_Okt_Noy_Dek".split("_"),weekdays:"Yakshanba_Dushanba_Seshanba_Chorshanba_Payshanba_Juma_Shanba".split("_"),weekdaysShort:"Yak_Dush_Sesh_Chor_Pay_Jum_Shan".split("_"),weekdaysMin:"Ya_Du_Se_Cho_Pa_Ju_Sha".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"D MMMM YYYY, dddd HH:mm"},calendar:{sameDay:"[Bugun soat] LT [da]",nextDay:"[Ertaga] LT [da]",nextWeek:"dddd [kuni soat] LT [da]",lastDay:"[Kecha soat] LT [da]",lastWeek:"[O'tgan] dddd [kuni soat] LT [da]",sameElse:"L"},relativeTime:{future:"Yaqin %s ichida",past:"Bir necha %s oldin",s:"soniya",ss:"%d soniya",m:"bir daqiqa",mm:"%d daqiqa",h:"bir soat",hh:"%d soat",d:"bir kun",dd:"%d kun",M:"bir oy",MM:"%d oy",y:"bir yil",yy:"%d yil"},week:{dow:1,doy:7}}),l.defineLocale("uz",{months:"\u044f\u043d\u0432\u0430\u0440_\u0444\u0435\u0432\u0440\u0430\u043b_\u043c\u0430\u0440\u0442_\u0430\u043f\u0440\u0435\u043b_\u043c\u0430\u0439_\u0438\u044e\u043d_\u0438\u044e\u043b_\u0430\u0432\u0433\u0443\u0441\u0442_\u0441\u0435\u043d\u0442\u044f\u0431\u0440_\u043e\u043a\u0442\u044f\u0431\u0440_\u043d\u043e\u044f\u0431\u0440_\u0434\u0435\u043a\u0430\u0431\u0440".split("_"),monthsShort:"\u044f\u043d\u0432_\u0444\u0435\u0432_\u043c\u0430\u0440_\u0430\u043f\u0440_\u043c\u0430\u0439_\u0438\u044e\u043d_\u0438\u044e\u043b_\u0430\u0432\u0433_\u0441\u0435\u043d_\u043e\u043a\u0442_\u043d\u043e\u044f_\u0434\u0435\u043a".split("_"),weekdays:"\u042f\u043a\u0448\u0430\u043d\u0431\u0430_\u0414\u0443\u0448\u0430\u043d\u0431\u0430_\u0421\u0435\u0448\u0430\u043d\u0431\u0430_\u0427\u043e\u0440\u0448\u0430\u043d\u0431\u0430_\u041f\u0430\u0439\u0448\u0430\u043d\u0431\u0430_\u0416\u0443\u043c\u0430_\u0428\u0430\u043d\u0431\u0430".split("_"),weekdaysShort:"\u042f\u043a\u0448_\u0414\u0443\u0448_\u0421\u0435\u0448_\u0427\u043e\u0440_\u041f\u0430\u0439_\u0416\u0443\u043c_\u0428\u0430\u043d".split("_"),weekdaysMin:"\u042f\u043a_\u0414\u0443_\u0421\u0435_\u0427\u043e_\u041f\u0430_\u0416\u0443_\u0428\u0430".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"D MMMM YYYY, dddd HH:mm"},calendar:{sameDay:"[\u0411\u0443\u0433\u0443\u043d \u0441\u043e\u0430\u0442] LT [\u0434\u0430]",nextDay:"[\u042d\u0440\u0442\u0430\u0433\u0430] LT [\u0434\u0430]",nextWeek:"dddd [\u043a\u0443\u043d\u0438 \u0441\u043e\u0430\u0442] LT [\u0434\u0430]",lastDay:"[\u041a\u0435\u0447\u0430 \u0441\u043e\u0430\u0442] LT [\u0434\u0430]",lastWeek:"[\u0423\u0442\u0433\u0430\u043d] dddd [\u043a\u0443\u043d\u0438 \u0441\u043e\u0430\u0442] LT [\u0434\u0430]",sameElse:"L"},relativeTime:{future:"\u042f\u043a\u0438\u043d %s \u0438\u0447\u0438\u0434\u0430",past:"\u0411\u0438\u0440 \u043d\u0435\u0447\u0430 %s \u043e\u043b\u0434\u0438\u043d",s:"\u0444\u0443\u0440\u0441\u0430\u0442",ss:"%d \u0444\u0443\u0440\u0441\u0430\u0442",m:"\u0431\u0438\u0440 \u0434\u0430\u043a\u0438\u043a\u0430",mm:"%d \u0434\u0430\u043a\u0438\u043a\u0430",h:"\u0431\u0438\u0440 \u0441\u043e\u0430\u0442",hh:"%d \u0441\u043e\u0430\u0442",d:"\u0431\u0438\u0440 \u043a\u0443\u043d",dd:"%d \u043a\u0443\u043d",M:"\u0431\u0438\u0440 \u043e\u0439",MM:"%d \u043e\u0439",y:"\u0431\u0438\u0440 \u0439\u0438\u043b",yy:"%d \u0439\u0438\u043b"},week:{dow:1,doy:7}}),l.defineLocale("vi",{months:"th\xe1ng 1_th\xe1ng 2_th\xe1ng 3_th\xe1ng 4_th\xe1ng 5_th\xe1ng 6_th\xe1ng 7_th\xe1ng 8_th\xe1ng 9_th\xe1ng 10_th\xe1ng 11_th\xe1ng 12".split("_"),monthsShort:"Th01_Th02_Th03_Th04_Th05_Th06_Th07_Th08_Th09_Th10_Th11_Th12".split("_"),monthsParseExact:!0,weekdays:"ch\u1ee7 nh\u1eadt_th\u1ee9 hai_th\u1ee9 ba_th\u1ee9 t\u01b0_th\u1ee9 n\u0103m_th\u1ee9 s\xe1u_th\u1ee9 b\u1ea3y".split("_"),weekdaysShort:"CN_T2_T3_T4_T5_T6_T7".split("_"),weekdaysMin:"CN_T2_T3_T4_T5_T6_T7".split("_"),weekdaysParseExact:!0,meridiemParse:/sa|ch/i,isPM:function(e){return/^ch$/i.test(e)},meridiem:function(e,a,t){return e<12?t?"sa":"SA":t?"ch":"CH"},longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM [n\u0103m] YYYY",LLL:"D MMMM [n\u0103m] YYYY HH:mm",LLLL:"dddd, D MMMM [n\u0103m] YYYY HH:mm",l:"DD/M/YYYY",ll:"D MMM YYYY",lll:"D MMM YYYY HH:mm",llll:"ddd, D MMM YYYY HH:mm"},calendar:{sameDay:"[H\xf4m nay l\xfac] LT",nextDay:"[Ng\xe0y mai l\xfac] LT",nextWeek:"dddd [tu\u1ea7n t\u1edbi l\xfac] LT",lastDay:"[H\xf4m qua l\xfac] LT",lastWeek:"dddd [tu\u1ea7n r\u1ed3i l\xfac] LT",sameElse:"L"},relativeTime:{future:"%s t\u1edbi",past:"%s tr\u01b0\u1edbc",s:"v\xe0i gi\xe2y",ss:"%d gi\xe2y",m:"m\u1ed9t ph\xfat",mm:"%d ph\xfat",h:"m\u1ed9t gi\u1edd",hh:"%d gi\u1edd",d:"m\u1ed9t ng\xe0y",dd:"%d ng\xe0y",M:"m\u1ed9t th\xe1ng",MM:"%d th\xe1ng",y:"m\u1ed9t n\u0103m",yy:"%d n\u0103m"},dayOfMonthOrdinalParse:/\d{1,2}/,ordinal:function(e){return e},week:{dow:1,doy:4}}),l.defineLocale("x-pseudo",{months:"J~\xe1\xf1\xfa\xe1~r\xfd_F~\xe9br\xfa~\xe1r\xfd_~M\xe1rc~h_\xc1p~r\xedl_~M\xe1\xfd_~J\xfa\xf1\xe9~_J\xfal~\xfd_\xc1\xfa~g\xfast~_S\xe9p~t\xe9mb~\xe9r_\xd3~ct\xf3b~\xe9r_\xd1~\xf3v\xe9m~b\xe9r_~D\xe9c\xe9~mb\xe9r".split("_"),monthsShort:"J~\xe1\xf1_~F\xe9b_~M\xe1r_~\xc1pr_~M\xe1\xfd_~J\xfa\xf1_~J\xfal_~\xc1\xfag_~S\xe9p_~\xd3ct_~\xd1\xf3v_~D\xe9c".split("_"),monthsParseExact:!0,weekdays:"S~\xfa\xf1d\xe1~\xfd_M\xf3~\xf1d\xe1\xfd~_T\xfa\xe9~sd\xe1\xfd~_W\xe9d~\xf1\xe9sd~\xe1\xfd_T~h\xfars~d\xe1\xfd_~Fr\xedd~\xe1\xfd_S~\xe1t\xfar~d\xe1\xfd".split("_"),weekdaysShort:"S~\xfa\xf1_~M\xf3\xf1_~T\xfa\xe9_~W\xe9d_~Th\xfa_~Fr\xed_~S\xe1t".split("_"),weekdaysMin:"S~\xfa_M\xf3~_T\xfa_~W\xe9_T~h_Fr~_S\xe1".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[T~\xf3d\xe1~\xfd \xe1t] LT",nextDay:"[T~\xf3m\xf3~rr\xf3~w \xe1t] LT",nextWeek:"dddd [\xe1t] LT",lastDay:"[\xdd~\xe9st~\xe9rd\xe1~\xfd \xe1t] LT",lastWeek:"[L~\xe1st] dddd [\xe1t] LT",sameElse:"L"},relativeTime:{future:"\xed~\xf1 %s",past:"%s \xe1~g\xf3",s:"\xe1 ~f\xe9w ~s\xe9c\xf3~\xf1ds",ss:"%d s~\xe9c\xf3\xf1~ds",m:"\xe1 ~m\xed\xf1~\xfat\xe9",mm:"%d m~\xed\xf1\xfa~t\xe9s",h:"\xe1~\xf1 h\xf3~\xfar",hh:"%d h~\xf3\xfars",d:"\xe1 ~d\xe1\xfd",dd:"%d d~\xe1\xfds",M:"\xe1 ~m\xf3\xf1~th",MM:"%d m~\xf3\xf1t~hs",y:"\xe1 ~\xfd\xe9\xe1r",yy:"%d \xfd~\xe9\xe1rs"},dayOfMonthOrdinalParse:/\d{1,2}(th|st|nd|rd)/,ordinal:function(e){var a=e%10;return e+(1==~~(e%100/10)?"th":1===a?"st":2===a?"nd":3===a?"rd":"th")},week:{dow:1,doy:4}}),l.defineLocale("yo",{months:"S\u1eb9\u0301r\u1eb9\u0301_E\u0300re\u0300le\u0300_\u1eb8r\u1eb9\u0300na\u0300_I\u0300gbe\u0301_E\u0300bibi_O\u0300ku\u0300du_Ag\u1eb9mo_O\u0300gu\u0301n_Owewe_\u1ecc\u0300wa\u0300ra\u0300_Be\u0301lu\u0301_\u1ecc\u0300p\u1eb9\u0300\u0300".split("_"),monthsShort:"S\u1eb9\u0301r_E\u0300rl_\u1eb8rn_I\u0300gb_E\u0300bi_O\u0300ku\u0300_Ag\u1eb9_O\u0300gu\u0301_Owe_\u1ecc\u0300wa\u0300_Be\u0301l_\u1ecc\u0300p\u1eb9\u0300\u0300".split("_"),weekdays:"A\u0300i\u0300ku\u0301_Aje\u0301_I\u0300s\u1eb9\u0301gun_\u1eccj\u1ecd\u0301ru\u0301_\u1eccj\u1ecd\u0301b\u1ecd_\u1eb8ti\u0300_A\u0300ba\u0301m\u1eb9\u0301ta".split("_"),weekdaysShort:"A\u0300i\u0300k_Aje\u0301_I\u0300s\u1eb9\u0301_\u1eccjr_\u1eccjb_\u1eb8ti\u0300_A\u0300ba\u0301".split("_"),weekdaysMin:"A\u0300i\u0300_Aj_I\u0300s_\u1eccr_\u1eccb_\u1eb8t_A\u0300b".split("_"),longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendar:{sameDay:"[O\u0300ni\u0300 ni] LT",nextDay:"[\u1ecc\u0300la ni] LT",nextWeek:"dddd [\u1eccs\u1eb9\u0300 to\u0301n'b\u1ecd] [ni] LT",lastDay:"[A\u0300na ni] LT",lastWeek:"dddd [\u1eccs\u1eb9\u0300 to\u0301l\u1ecd\u0301] [ni] LT",sameElse:"L"},relativeTime:{future:"ni\u0301 %s",past:"%s k\u1ecdja\u0301",s:"i\u0300s\u1eb9ju\u0301 aaya\u0301 die",ss:"aaya\u0301 %d",m:"i\u0300s\u1eb9ju\u0301 kan",mm:"i\u0300s\u1eb9ju\u0301 %d",h:"wa\u0301kati kan",hh:"wa\u0301kati %d",d:"\u1ecdj\u1ecd\u0301 kan",dd:"\u1ecdj\u1ecd\u0301 %d",M:"osu\u0300 kan",MM:"osu\u0300 %d",y:"\u1ecddu\u0301n kan",yy:"\u1ecddu\u0301n %d"},dayOfMonthOrdinalParse:/\u1ecdj\u1ecd\u0301\s\d{1,2}/,ordinal:"\u1ecdj\u1ecd\u0301 %d",week:{dow:1,doy:4}}),l.defineLocale("zh-cn",{months:"\u4e00\u6708_\u4e8c\u6708_\u4e09\u6708_\u56db\u6708_\u4e94\u6708_\u516d\u6708_\u4e03\u6708_\u516b\u6708_\u4e5d\u6708_\u5341\u6708_\u5341\u4e00\u6708_\u5341\u4e8c\u6708".split("_"),monthsShort:"1\u6708_2\u6708_3\u6708_4\u6708_5\u6708_6\u6708_7\u6708_8\u6708_9\u6708_10\u6708_11\u6708_12\u6708".split("_"),weekdays:"\u661f\u671f\u65e5_\u661f\u671f\u4e00_\u661f\u671f\u4e8c_\u661f\u671f\u4e09_\u661f\u671f\u56db_\u661f\u671f\u4e94_\u661f\u671f\u516d".split("_"),weekdaysShort:"\u5468\u65e5_\u5468\u4e00_\u5468\u4e8c_\u5468\u4e09_\u5468\u56db_\u5468\u4e94_\u5468\u516d".split("_"),weekdaysMin:"\u65e5_\u4e00_\u4e8c_\u4e09_\u56db_\u4e94_\u516d".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY/MM/DD",LL:"YYYY\u5e74M\u6708D\u65e5",LLL:"YYYY\u5e74M\u6708D\u65e5Ah\u70b9mm\u5206",LLLL:"YYYY\u5e74M\u6708D\u65e5ddddAh\u70b9mm\u5206",l:"YYYY/M/D",ll:"YYYY\u5e74M\u6708D\u65e5",lll:"YYYY\u5e74M\u6708D\u65e5 HH:mm",llll:"YYYY\u5e74M\u6708D\u65e5dddd HH:mm"},meridiemParse:/\u51cc\u6668|\u65e9\u4e0a|\u4e0a\u5348|\u4e2d\u5348|\u4e0b\u5348|\u665a\u4e0a/,meridiemHour:function(e,a){return 12===e&&(e=0),"\u51cc\u6668"===a||"\u65e9\u4e0a"===a||"\u4e0a\u5348"===a?e:"\u4e0b\u5348"===a||"\u665a\u4e0a"===a?e+12:11<=e?e:e+12},meridiem:function(e,a,t){var s=100*e+a;return s<600?"\u51cc\u6668":s<900?"\u65e9\u4e0a":s<1130?"\u4e0a\u5348":s<1230?"\u4e2d\u5348":s<1800?"\u4e0b\u5348":"\u665a\u4e0a"},calendar:{sameDay:"[\u4eca\u5929]LT",nextDay:"[\u660e\u5929]LT",nextWeek:"[\u4e0b]ddddLT",lastDay:"[\u6628\u5929]LT",lastWeek:"[\u4e0a]ddddLT",sameElse:"L"},dayOfMonthOrdinalParse:/\d{1,2}(\u65e5|\u6708|\u5468)/,ordinal:function(e,a){switch(a){case"d":case"D":case"DDD":return e+"\u65e5";case"M":return e+"\u6708";case"w":case"W":return e+"\u5468";default:return e}},relativeTime:{future:"%s\u5185",past:"%s\u524d",s:"\u51e0\u79d2",ss:"%d \u79d2",m:"1 \u5206\u949f",mm:"%d \u5206\u949f",h:"1 \u5c0f\u65f6",hh:"%d \u5c0f\u65f6",d:"1 \u5929",dd:"%d \u5929",M:"1 \u4e2a\u6708",MM:"%d \u4e2a\u6708",y:"1 \u5e74",yy:"%d \u5e74"},week:{dow:1,doy:4}}),l.defineLocale("zh-hk",{months:"\u4e00\u6708_\u4e8c\u6708_\u4e09\u6708_\u56db\u6708_\u4e94\u6708_\u516d\u6708_\u4e03\u6708_\u516b\u6708_\u4e5d\u6708_\u5341\u6708_\u5341\u4e00\u6708_\u5341\u4e8c\u6708".split("_"),monthsShort:"1\u6708_2\u6708_3\u6708_4\u6708_5\u6708_6\u6708_7\u6708_8\u6708_9\u6708_10\u6708_11\u6708_12\u6708".split("_"),weekdays:"\u661f\u671f\u65e5_\u661f\u671f\u4e00_\u661f\u671f\u4e8c_\u661f\u671f\u4e09_\u661f\u671f\u56db_\u661f\u671f\u4e94_\u661f\u671f\u516d".split("_"),weekdaysShort:"\u9031\u65e5_\u9031\u4e00_\u9031\u4e8c_\u9031\u4e09_\u9031\u56db_\u9031\u4e94_\u9031\u516d".split("_"),weekdaysMin:"\u65e5_\u4e00_\u4e8c_\u4e09_\u56db_\u4e94_\u516d".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY/MM/DD",LL:"YYYY\u5e74M\u6708D\u65e5",LLL:"YYYY\u5e74M\u6708D\u65e5 HH:mm",LLLL:"YYYY\u5e74M\u6708D\u65e5dddd HH:mm",l:"YYYY/M/D",ll:"YYYY\u5e74M\u6708D\u65e5",lll:"YYYY\u5e74M\u6708D\u65e5 HH:mm",llll:"YYYY\u5e74M\u6708D\u65e5dddd HH:mm"},meridiemParse:/\u51cc\u6668|\u65e9\u4e0a|\u4e0a\u5348|\u4e2d\u5348|\u4e0b\u5348|\u665a\u4e0a/,meridiemHour:function(e,a){return 12===e&&(e=0),"\u51cc\u6668"===a||"\u65e9\u4e0a"===a||"\u4e0a\u5348"===a?e:"\u4e2d\u5348"===a?11<=e?e:e+12:"\u4e0b\u5348"===a||"\u665a\u4e0a"===a?e+12:void 0},meridiem:function(e,a,t){var s=100*e+a;return s<600?"\u51cc\u6668":s<900?"\u65e9\u4e0a":s<1130?"\u4e0a\u5348":s<1230?"\u4e2d\u5348":s<1800?"\u4e0b\u5348":"\u665a\u4e0a"},calendar:{sameDay:"[\u4eca\u5929]LT",nextDay:"[\u660e\u5929]LT",nextWeek:"[\u4e0b]ddddLT",lastDay:"[\u6628\u5929]LT",lastWeek:"[\u4e0a]ddddLT",sameElse:"L"},dayOfMonthOrdinalParse:/\d{1,2}(\u65e5|\u6708|\u9031)/,ordinal:function(e,a){switch(a){case"d":case"D":case"DDD":return e+"\u65e5";case"M":return e+"\u6708";case"w":case"W":return e+"\u9031";default:return e}},relativeTime:{future:"%s\u5167",past:"%s\u524d",s:"\u5e7e\u79d2",ss:"%d \u79d2",m:"1 \u5206\u9418",mm:"%d \u5206\u9418",h:"1 \u5c0f\u6642",hh:"%d \u5c0f\u6642",d:"1 \u5929",dd:"%d \u5929",M:"1 \u500b\u6708",MM:"%d \u500b\u6708",y:"1 \u5e74",yy:"%d \u5e74"}}),l.defineLocale("zh-tw",{months:"\u4e00\u6708_\u4e8c\u6708_\u4e09\u6708_\u56db\u6708_\u4e94\u6708_\u516d\u6708_\u4e03\u6708_\u516b\u6708_\u4e5d\u6708_\u5341\u6708_\u5341\u4e00\u6708_\u5341\u4e8c\u6708".split("_"),monthsShort:"1\u6708_2\u6708_3\u6708_4\u6708_5\u6708_6\u6708_7\u6708_8\u6708_9\u6708_10\u6708_11\u6708_12\u6708".split("_"),weekdays:"\u661f\u671f\u65e5_\u661f\u671f\u4e00_\u661f\u671f\u4e8c_\u661f\u671f\u4e09_\u661f\u671f\u56db_\u661f\u671f\u4e94_\u661f\u671f\u516d".split("_"),weekdaysShort:"\u9031\u65e5_\u9031\u4e00_\u9031\u4e8c_\u9031\u4e09_\u9031\u56db_\u9031\u4e94_\u9031\u516d".split("_"),weekdaysMin:"\u65e5_\u4e00_\u4e8c_\u4e09_\u56db_\u4e94_\u516d".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY/MM/DD",LL:"YYYY\u5e74M\u6708D\u65e5",LLL:"YYYY\u5e74M\u6708D\u65e5 HH:mm",LLLL:"YYYY\u5e74M\u6708D\u65e5dddd HH:mm",l:"YYYY/M/D",ll:"YYYY\u5e74M\u6708D\u65e5",lll:"YYYY\u5e74M\u6708D\u65e5 HH:mm",llll:"YYYY\u5e74M\u6708D\u65e5dddd HH:mm"},meridiemParse:/\u51cc\u6668|\u65e9\u4e0a|\u4e0a\u5348|\u4e2d\u5348|\u4e0b\u5348|\u665a\u4e0a/,meridiemHour:function(e,a){return 12===e&&(e=0),"\u51cc\u6668"===a||"\u65e9\u4e0a"===a||"\u4e0a\u5348"===a?e:"\u4e2d\u5348"===a?11<=e?e:e+12:"\u4e0b\u5348"===a||"\u665a\u4e0a"===a?e+12:void 0},meridiem:function(e,a,t){var s=100*e+a;return s<600?"\u51cc\u6668":s<900?"\u65e9\u4e0a":s<1130?"\u4e0a\u5348":s<1230?"\u4e2d\u5348":s<1800?"\u4e0b\u5348":"\u665a\u4e0a"},calendar:{sameDay:"[\u4eca\u5929] LT",nextDay:"[\u660e\u5929] LT",nextWeek:"[\u4e0b]dddd LT",lastDay:"[\u6628\u5929] LT",lastWeek:"[\u4e0a]dddd LT",sameElse:"L"},dayOfMonthOrdinalParse:/\d{1,2}(\u65e5|\u6708|\u9031)/,ordinal:function(e,a){switch(a){case"d":case"D":case"DDD":return e+"\u65e5";case"M":return e+"\u6708";case"w":case"W":return e+"\u9031";default:return e}},relativeTime:{future:"%s\u5167",past:"%s\u524d",s:"\u5e7e\u79d2",ss:"%d \u79d2",m:"1 \u5206\u9418",mm:"%d \u5206\u9418",h:"1 \u5c0f\u6642",hh:"%d \u5c0f\u6642",d:"1 \u5929",dd:"%d \u5929",M:"1 \u500b\u6708",MM:"%d \u500b\u6708",y:"1 \u5e74",yy:"%d \u5e74"}}),l.locale("en"),l});
\ No newline at end of file
diff --git a/website/js/vendor/moment/moment.min.js b/website/js/vendor/moment/moment.min.js
new file mode 100644 (file)
index 0000000..2a3358f
--- /dev/null
@@ -0,0 +1 @@
+!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):e.moment=t()}(this,function(){"use strict";var e,i;function c(){return e.apply(null,arguments)}function o(e){return e instanceof Array||"[object Array]"===Object.prototype.toString.call(e)}function u(e){return null!=e&&"[object Object]"===Object.prototype.toString.call(e)}function l(e){return void 0===e}function d(e){return"number"==typeof e||"[object Number]"===Object.prototype.toString.call(e)}function h(e){return e instanceof Date||"[object Date]"===Object.prototype.toString.call(e)}function f(e,t){var n,s=[];for(n=0;n<e.length;++n)s.push(t(e[n],n));return s}function m(e,t){return Object.prototype.hasOwnProperty.call(e,t)}function _(e,t){for(var n in t)m(t,n)&&(e[n]=t[n]);return m(t,"toString")&&(e.toString=t.toString),m(t,"valueOf")&&(e.valueOf=t.valueOf),e}function y(e,t,n,s){return Ot(e,t,n,s,!0).utc()}function g(e){return null==e._pf&&(e._pf={empty:!1,unusedTokens:[],unusedInput:[],overflow:-2,charsLeftOver:0,nullInput:!1,invalidMonth:null,invalidFormat:!1,userInvalidated:!1,iso:!1,parsedDateParts:[],meridiem:null,rfc2822:!1,weekdayMismatch:!1}),e._pf}function p(e){if(null==e._isValid){var t=g(e),n=i.call(t.parsedDateParts,function(e){return null!=e}),s=!isNaN(e._d.getTime())&&t.overflow<0&&!t.empty&&!t.invalidMonth&&!t.invalidWeekday&&!t.weekdayMismatch&&!t.nullInput&&!t.invalidFormat&&!t.userInvalidated&&(!t.meridiem||t.meridiem&&n);if(e._strict&&(s=s&&0===t.charsLeftOver&&0===t.unusedTokens.length&&void 0===t.bigHour),null!=Object.isFrozen&&Object.isFrozen(e))return s;e._isValid=s}return e._isValid}function v(e){var t=y(NaN);return null!=e?_(g(t),e):g(t).userInvalidated=!0,t}i=Array.prototype.some?Array.prototype.some:function(e){for(var t=Object(this),n=t.length>>>0,s=0;s<n;s++)if(s in t&&e.call(this,t[s],s,t))return!0;return!1};var r=c.momentProperties=[];function w(e,t){var n,s,i;if(l(t._isAMomentObject)||(e._isAMomentObject=t._isAMomentObject),l(t._i)||(e._i=t._i),l(t._f)||(e._f=t._f),l(t._l)||(e._l=t._l),l(t._strict)||(e._strict=t._strict),l(t._tzm)||(e._tzm=t._tzm),l(t._isUTC)||(e._isUTC=t._isUTC),l(t._offset)||(e._offset=t._offset),l(t._pf)||(e._pf=g(t)),l(t._locale)||(e._locale=t._locale),0<r.length)for(n=0;n<r.length;n++)l(i=t[s=r[n]])||(e[s]=i);return e}var t=!1;function M(e){w(this,e),this._d=new Date(null!=e._d?e._d.getTime():NaN),this.isValid()||(this._d=new Date(NaN)),!1===t&&(t=!0,c.updateOffset(this),t=!1)}function S(e){return e instanceof M||null!=e&&null!=e._isAMomentObject}function D(e){return e<0?Math.ceil(e)||0:Math.floor(e)}function k(e){var t=+e,n=0;return 0!==t&&isFinite(t)&&(n=D(t)),n}function a(e,t,n){var s,i=Math.min(e.length,t.length),r=Math.abs(e.length-t.length),a=0;for(s=0;s<i;s++)(n&&e[s]!==t[s]||!n&&k(e[s])!==k(t[s]))&&a++;return a+r}function Y(e){!1===c.suppressDeprecationWarnings&&"undefined"!=typeof console&&console.warn&&console.warn("Deprecation warning: "+e)}function n(i,r){var a=!0;return _(function(){if(null!=c.deprecationHandler&&c.deprecationHandler(null,i),a){for(var e,t=[],n=0;n<arguments.length;n++){if(e="","object"==typeof arguments[n]){for(var s in e+="\n["+n+"] ",arguments[0])e+=s+": "+arguments[0][s]+", ";e=e.slice(0,-2)}else e=arguments[n];t.push(e)}Y(i+"\nArguments: "+Array.prototype.slice.call(t).join("")+"\n"+(new Error).stack),a=!1}return r.apply(this,arguments)},r)}var s,O={};function T(e,t){null!=c.deprecationHandler&&c.deprecationHandler(e,t),O[e]||(Y(t),O[e]=!0)}function x(e){return e instanceof Function||"[object Function]"===Object.prototype.toString.call(e)}function b(e,t){var n,s=_({},e);for(n in t)m(t,n)&&(u(e[n])&&u(t[n])?(s[n]={},_(s[n],e[n]),_(s[n],t[n])):null!=t[n]?s[n]=t[n]:delete s[n]);for(n in e)m(e,n)&&!m(t,n)&&u(e[n])&&(s[n]=_({},s[n]));return s}function P(e){null!=e&&this.set(e)}c.suppressDeprecationWarnings=!1,c.deprecationHandler=null,s=Object.keys?Object.keys:function(e){var t,n=[];for(t in e)m(e,t)&&n.push(t);return n};var W={};function H(e,t){var n=e.toLowerCase();W[n]=W[n+"s"]=W[t]=e}function R(e){return"string"==typeof e?W[e]||W[e.toLowerCase()]:void 0}function C(e){var t,n,s={};for(n in e)m(e,n)&&(t=R(n))&&(s[t]=e[n]);return s}var F={};function L(e,t){F[e]=t}function U(e,t,n){var s=""+Math.abs(e),i=t-s.length;return(0<=e?n?"+":"":"-")+Math.pow(10,Math.max(0,i)).toString().substr(1)+s}var N=/(\[[^\[]*\])|(\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|YYYYYY|YYYYY|YYYY|YY|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,G=/(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g,V={},E={};function I(e,t,n,s){var i=s;"string"==typeof s&&(i=function(){return this[s]()}),e&&(E[e]=i),t&&(E[t[0]]=function(){return U(i.apply(this,arguments),t[1],t[2])}),n&&(E[n]=function(){return this.localeData().ordinal(i.apply(this,arguments),e)})}function A(e,t){return e.isValid()?(t=j(t,e.localeData()),V[t]=V[t]||function(s){var e,i,t,r=s.match(N);for(e=0,i=r.length;e<i;e++)E[r[e]]?r[e]=E[r[e]]:r[e]=(t=r[e]).match(/\[[\s\S]/)?t.replace(/^\[|\]$/g,""):t.replace(/\\/g,"");return function(e){var t,n="";for(t=0;t<i;t++)n+=x(r[t])?r[t].call(e,s):r[t];return n}}(t),V[t](e)):e.localeData().invalidDate()}function j(e,t){var n=5;function s(e){return t.longDateFormat(e)||e}for(G.lastIndex=0;0<=n&&G.test(e);)e=e.replace(G,s),G.lastIndex=0,n-=1;return e}var Z=/\d/,z=/\d\d/,$=/\d{3}/,q=/\d{4}/,J=/[+-]?\d{6}/,B=/\d\d?/,Q=/\d\d\d\d?/,X=/\d\d\d\d\d\d?/,K=/\d{1,3}/,ee=/\d{1,4}/,te=/[+-]?\d{1,6}/,ne=/\d+/,se=/[+-]?\d+/,ie=/Z|[+-]\d\d:?\d\d/gi,re=/Z|[+-]\d\d(?::?\d\d)?/gi,ae=/[0-9]{0,256}['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFF07\uFF10-\uFFEF]{1,256}|[\u0600-\u06FF\/]{1,256}(\s*?[\u0600-\u06FF]{1,256}){1,2}/i,oe={};function ue(e,n,s){oe[e]=x(n)?n:function(e,t){return e&&s?s:n}}function le(e,t){return m(oe,e)?oe[e](t._strict,t._locale):new RegExp(de(e.replace("\\","").replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g,function(e,t,n,s,i){return t||n||s||i})))}function de(e){return e.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")}var he={};function ce(e,n){var t,s=n;for("string"==typeof e&&(e=[e]),d(n)&&(s=function(e,t){t[n]=k(e)}),t=0;t<e.length;t++)he[e[t]]=s}function fe(e,i){ce(e,function(e,t,n,s){n._w=n._w||{},i(e,n._w,n,s)})}var me=0,_e=1,ye=2,ge=3,pe=4,ve=5,we=6,Me=7,Se=8;function De(e){return ke(e)?366:365}function ke(e){return e%4==0&&e%100!=0||e%400==0}I("Y",0,0,function(){var e=this.year();return e<=9999?""+e:"+"+e}),I(0,["YY",2],0,function(){return this.year()%100}),I(0,["YYYY",4],0,"year"),I(0,["YYYYY",5],0,"year"),I(0,["YYYYYY",6,!0],0,"year"),H("year","y"),L("year",1),ue("Y",se),ue("YY",B,z),ue("YYYY",ee,q),ue("YYYYY",te,J),ue("YYYYYY",te,J),ce(["YYYYY","YYYYYY"],me),ce("YYYY",function(e,t){t[me]=2===e.length?c.parseTwoDigitYear(e):k(e)}),ce("YY",function(e,t){t[me]=c.parseTwoDigitYear(e)}),ce("Y",function(e,t){t[me]=parseInt(e,10)}),c.parseTwoDigitYear=function(e){return k(e)+(68<k(e)?1900:2e3)};var Ye,Oe=Te("FullYear",!0);function Te(t,n){return function(e){return null!=e?(be(this,t,e),c.updateOffset(this,n),this):xe(this,t)}}function xe(e,t){return e.isValid()?e._d["get"+(e._isUTC?"UTC":"")+t]():NaN}function be(e,t,n){e.isValid()&&!isNaN(n)&&("FullYear"===t&&ke(e.year())&&1===e.month()&&29===e.date()?e._d["set"+(e._isUTC?"UTC":"")+t](n,e.month(),Pe(n,e.month())):e._d["set"+(e._isUTC?"UTC":"")+t](n))}function Pe(e,t){if(isNaN(e)||isNaN(t))return NaN;var n,s=(t%(n=12)+n)%n;return e+=(t-s)/12,1===s?ke(e)?29:28:31-s%7%2}Ye=Array.prototype.indexOf?Array.prototype.indexOf:function(e){var t;for(t=0;t<this.length;++t)if(this[t]===e)return t;return-1},I("M",["MM",2],"Mo",function(){return this.month()+1}),I("MMM",0,0,function(e){return this.localeData().monthsShort(this,e)}),I("MMMM",0,0,function(e){return this.localeData().months(this,e)}),H("month","M"),L("month",8),ue("M",B),ue("MM",B,z),ue("MMM",function(e,t){return t.monthsShortRegex(e)}),ue("MMMM",function(e,t){return t.monthsRegex(e)}),ce(["M","MM"],function(e,t){t[_e]=k(e)-1}),ce(["MMM","MMMM"],function(e,t,n,s){var i=n._locale.monthsParse(e,s,n._strict);null!=i?t[_e]=i:g(n).invalidMonth=e});var We=/D[oD]?(\[[^\[\]]*\]|\s)+MMMM?/,He="January_February_March_April_May_June_July_August_September_October_November_December".split("_");var Re="Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_");function Ce(e,t){var n;if(!e.isValid())return e;if("string"==typeof t)if(/^\d+$/.test(t))t=k(t);else if(!d(t=e.localeData().monthsParse(t)))return e;return n=Math.min(e.date(),Pe(e.year(),t)),e._d["set"+(e._isUTC?"UTC":"")+"Month"](t,n),e}function Fe(e){return null!=e?(Ce(this,e),c.updateOffset(this,!0),this):xe(this,"Month")}var Le=ae;var Ue=ae;function Ne(){function e(e,t){return t.length-e.length}var t,n,s=[],i=[],r=[];for(t=0;t<12;t++)n=y([2e3,t]),s.push(this.monthsShort(n,"")),i.push(this.months(n,"")),r.push(this.months(n,"")),r.push(this.monthsShort(n,""));for(s.sort(e),i.sort(e),r.sort(e),t=0;t<12;t++)s[t]=de(s[t]),i[t]=de(i[t]);for(t=0;t<24;t++)r[t]=de(r[t]);this._monthsRegex=new RegExp("^("+r.join("|")+")","i"),this._monthsShortRegex=this._monthsRegex,this._monthsStrictRegex=new RegExp("^("+i.join("|")+")","i"),this._monthsShortStrictRegex=new RegExp("^("+s.join("|")+")","i")}function Ge(e){var t=new Date(Date.UTC.apply(null,arguments));return e<100&&0<=e&&isFinite(t.getUTCFullYear())&&t.setUTCFullYear(e),t}function Ve(e,t,n){var s=7+t-n;return-((7+Ge(e,0,s).getUTCDay()-t)%7)+s-1}function Ee(e,t,n,s,i){var r,a,o=1+7*(t-1)+(7+n-s)%7+Ve(e,s,i);return a=o<=0?De(r=e-1)+o:o>De(e)?(r=e+1,o-De(e)):(r=e,o),{year:r,dayOfYear:a}}function Ie(e,t,n){var s,i,r=Ve(e.year(),t,n),a=Math.floor((e.dayOfYear()-r-1)/7)+1;return a<1?s=a+Ae(i=e.year()-1,t,n):a>Ae(e.year(),t,n)?(s=a-Ae(e.year(),t,n),i=e.year()+1):(i=e.year(),s=a),{week:s,year:i}}function Ae(e,t,n){var s=Ve(e,t,n),i=Ve(e+1,t,n);return(De(e)-s+i)/7}I("w",["ww",2],"wo","week"),I("W",["WW",2],"Wo","isoWeek"),H("week","w"),H("isoWeek","W"),L("week",5),L("isoWeek",5),ue("w",B),ue("ww",B,z),ue("W",B),ue("WW",B,z),fe(["w","ww","W","WW"],function(e,t,n,s){t[s.substr(0,1)]=k(e)});I("d",0,"do","day"),I("dd",0,0,function(e){return this.localeData().weekdaysMin(this,e)}),I("ddd",0,0,function(e){return this.localeData().weekdaysShort(this,e)}),I("dddd",0,0,function(e){return this.localeData().weekdays(this,e)}),I("e",0,0,"weekday"),I("E",0,0,"isoWeekday"),H("day","d"),H("weekday","e"),H("isoWeekday","E"),L("day",11),L("weekday",11),L("isoWeekday",11),ue("d",B),ue("e",B),ue("E",B),ue("dd",function(e,t){return t.weekdaysMinRegex(e)}),ue("ddd",function(e,t){return t.weekdaysShortRegex(e)}),ue("dddd",function(e,t){return t.weekdaysRegex(e)}),fe(["dd","ddd","dddd"],function(e,t,n,s){var i=n._locale.weekdaysParse(e,s,n._strict);null!=i?t.d=i:g(n).invalidWeekday=e}),fe(["d","e","E"],function(e,t,n,s){t[s]=k(e)});var je="Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_");var Ze="Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_");var ze="Su_Mo_Tu_We_Th_Fr_Sa".split("_");var $e=ae;var qe=ae;var Je=ae;function Be(){function e(e,t){return t.length-e.length}var t,n,s,i,r,a=[],o=[],u=[],l=[];for(t=0;t<7;t++)n=y([2e3,1]).day(t),s=this.weekdaysMin(n,""),i=this.weekdaysShort(n,""),r=this.weekdays(n,""),a.push(s),o.push(i),u.push(r),l.push(s),l.push(i),l.push(r);for(a.sort(e),o.sort(e),u.sort(e),l.sort(e),t=0;t<7;t++)o[t]=de(o[t]),u[t]=de(u[t]),l[t]=de(l[t]);this._weekdaysRegex=new RegExp("^("+l.join("|")+")","i"),this._weekdaysShortRegex=this._weekdaysRegex,this._weekdaysMinRegex=this._weekdaysRegex,this._weekdaysStrictRegex=new RegExp("^("+u.join("|")+")","i"),this._weekdaysShortStrictRegex=new RegExp("^("+o.join("|")+")","i"),this._weekdaysMinStrictRegex=new RegExp("^("+a.join("|")+")","i")}function Qe(){return this.hours()%12||12}function Xe(e,t){I(e,0,0,function(){return this.localeData().meridiem(this.hours(),this.minutes(),t)})}function Ke(e,t){return t._meridiemParse}I("H",["HH",2],0,"hour"),I("h",["hh",2],0,Qe),I("k",["kk",2],0,function(){return this.hours()||24}),I("hmm",0,0,function(){return""+Qe.apply(this)+U(this.minutes(),2)}),I("hmmss",0,0,function(){return""+Qe.apply(this)+U(this.minutes(),2)+U(this.seconds(),2)}),I("Hmm",0,0,function(){return""+this.hours()+U(this.minutes(),2)}),I("Hmmss",0,0,function(){return""+this.hours()+U(this.minutes(),2)+U(this.seconds(),2)}),Xe("a",!0),Xe("A",!1),H("hour","h"),L("hour",13),ue("a",Ke),ue("A",Ke),ue("H",B),ue("h",B),ue("k",B),ue("HH",B,z),ue("hh",B,z),ue("kk",B,z),ue("hmm",Q),ue("hmmss",X),ue("Hmm",Q),ue("Hmmss",X),ce(["H","HH"],ge),ce(["k","kk"],function(e,t,n){var s=k(e);t[ge]=24===s?0:s}),ce(["a","A"],function(e,t,n){n._isPm=n._locale.isPM(e),n._meridiem=e}),ce(["h","hh"],function(e,t,n){t[ge]=k(e),g(n).bigHour=!0}),ce("hmm",function(e,t,n){var s=e.length-2;t[ge]=k(e.substr(0,s)),t[pe]=k(e.substr(s)),g(n).bigHour=!0}),ce("hmmss",function(e,t,n){var s=e.length-4,i=e.length-2;t[ge]=k(e.substr(0,s)),t[pe]=k(e.substr(s,2)),t[ve]=k(e.substr(i)),g(n).bigHour=!0}),ce("Hmm",function(e,t,n){var s=e.length-2;t[ge]=k(e.substr(0,s)),t[pe]=k(e.substr(s))}),ce("Hmmss",function(e,t,n){var s=e.length-4,i=e.length-2;t[ge]=k(e.substr(0,s)),t[pe]=k(e.substr(s,2)),t[ve]=k(e.substr(i))});var et,tt=Te("Hours",!0),nt={calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},longDateFormat:{LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"},invalidDate:"Invalid date",ordinal:"%d",dayOfMonthOrdinalParse:/\d{1,2}/,relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},months:He,monthsShort:Re,week:{dow:0,doy:6},weekdays:je,weekdaysMin:ze,weekdaysShort:Ze,meridiemParse:/[ap]\.?m?\.?/i},st={},it={};function rt(e){return e?e.toLowerCase().replace("_","-"):e}function at(e){var t=null;if(!st[e]&&"undefined"!=typeof module&&module&&module.exports)try{t=et._abbr,require("./locale/"+e),ot(t)}catch(e){}return st[e]}function ot(e,t){var n;return e&&((n=l(t)?lt(e):ut(e,t))?et=n:"undefined"!=typeof console&&console.warn&&console.warn("Locale "+e+" not found. Did you forget to load it?")),et._abbr}function ut(e,t){if(null===t)return delete st[e],null;var n,s=nt;if(t.abbr=e,null!=st[e])T("defineLocaleOverride","use moment.updateLocale(localeName, config) to change an existing locale. moment.defineLocale(localeName, config) should only be used for creating a new locale See http://momentjs.com/guides/#/warnings/define-locale/ for more info."),s=st[e]._config;else if(null!=t.parentLocale)if(null!=st[t.parentLocale])s=st[t.parentLocale]._config;else{if(null==(n=at(t.parentLocale)))return it[t.parentLocale]||(it[t.parentLocale]=[]),it[t.parentLocale].push({name:e,config:t}),null;s=n._config}return st[e]=new P(b(s,t)),it[e]&&it[e].forEach(function(e){ut(e.name,e.config)}),ot(e),st[e]}function lt(e){var t;if(e&&e._locale&&e._locale._abbr&&(e=e._locale._abbr),!e)return et;if(!o(e)){if(t=at(e))return t;e=[e]}return function(e){for(var t,n,s,i,r=0;r<e.length;){for(t=(i=rt(e[r]).split("-")).length,n=(n=rt(e[r+1]))?n.split("-"):null;0<t;){if(s=at(i.slice(0,t).join("-")))return s;if(n&&n.length>=t&&a(i,n,!0)>=t-1)break;t--}r++}return et}(e)}function dt(e){var t,n=e._a;return n&&-2===g(e).overflow&&(t=n[_e]<0||11<n[_e]?_e:n[ye]<1||n[ye]>Pe(n[me],n[_e])?ye:n[ge]<0||24<n[ge]||24===n[ge]&&(0!==n[pe]||0!==n[ve]||0!==n[we])?ge:n[pe]<0||59<n[pe]?pe:n[ve]<0||59<n[ve]?ve:n[we]<0||999<n[we]?we:-1,g(e)._overflowDayOfYear&&(t<me||ye<t)&&(t=ye),g(e)._overflowWeeks&&-1===t&&(t=Me),g(e)._overflowWeekday&&-1===t&&(t=Se),g(e).overflow=t),e}function ht(e,t,n){return null!=e?e:null!=t?t:n}function ct(e){var t,n,s,i,r,a=[];if(!e._d){var o,u;for(o=e,u=new Date(c.now()),s=o._useUTC?[u.getUTCFullYear(),u.getUTCMonth(),u.getUTCDate()]:[u.getFullYear(),u.getMonth(),u.getDate()],e._w&&null==e._a[ye]&&null==e._a[_e]&&function(e){var t,n,s,i,r,a,o,u;if(null!=(t=e._w).GG||null!=t.W||null!=t.E)r=1,a=4,n=ht(t.GG,e._a[me],Ie(Tt(),1,4).year),s=ht(t.W,1),((i=ht(t.E,1))<1||7<i)&&(u=!0);else{r=e._locale._week.dow,a=e._locale._week.doy;var l=Ie(Tt(),r,a);n=ht(t.gg,e._a[me],l.year),s=ht(t.w,l.week),null!=t.d?((i=t.d)<0||6<i)&&(u=!0):null!=t.e?(i=t.e+r,(t.e<0||6<t.e)&&(u=!0)):i=r}s<1||s>Ae(n,r,a)?g(e)._overflowWeeks=!0:null!=u?g(e)._overflowWeekday=!0:(o=Ee(n,s,i,r,a),e._a[me]=o.year,e._dayOfYear=o.dayOfYear)}(e),null!=e._dayOfYear&&(r=ht(e._a[me],s[me]),(e._dayOfYear>De(r)||0===e._dayOfYear)&&(g(e)._overflowDayOfYear=!0),n=Ge(r,0,e._dayOfYear),e._a[_e]=n.getUTCMonth(),e._a[ye]=n.getUTCDate()),t=0;t<3&&null==e._a[t];++t)e._a[t]=a[t]=s[t];for(;t<7;t++)e._a[t]=a[t]=null==e._a[t]?2===t?1:0:e._a[t];24===e._a[ge]&&0===e._a[pe]&&0===e._a[ve]&&0===e._a[we]&&(e._nextDay=!0,e._a[ge]=0),e._d=(e._useUTC?Ge:function(e,t,n,s,i,r,a){var o=new Date(e,t,n,s,i,r,a);return e<100&&0<=e&&isFinite(o.getFullYear())&&o.setFullYear(e),o}).apply(null,a),i=e._useUTC?e._d.getUTCDay():e._d.getDay(),null!=e._tzm&&e._d.setUTCMinutes(e._d.getUTCMinutes()-e._tzm),e._nextDay&&(e._a[ge]=24),e._w&&void 0!==e._w.d&&e._w.d!==i&&(g(e).weekdayMismatch=!0)}}var ft=/^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/,mt=/^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/,_t=/Z|[+-]\d\d(?::?\d\d)?/,yt=[["YYYYYY-MM-DD",/[+-]\d{6}-\d\d-\d\d/],["YYYY-MM-DD",/\d{4}-\d\d-\d\d/],["GGGG-[W]WW-E",/\d{4}-W\d\d-\d/],["GGGG-[W]WW",/\d{4}-W\d\d/,!1],["YYYY-DDD",/\d{4}-\d{3}/],["YYYY-MM",/\d{4}-\d\d/,!1],["YYYYYYMMDD",/[+-]\d{10}/],["YYYYMMDD",/\d{8}/],["GGGG[W]WWE",/\d{4}W\d{3}/],["GGGG[W]WW",/\d{4}W\d{2}/,!1],["YYYYDDD",/\d{7}/]],gt=[["HH:mm:ss.SSSS",/\d\d:\d\d:\d\d\.\d+/],["HH:mm:ss,SSSS",/\d\d:\d\d:\d\d,\d+/],["HH:mm:ss",/\d\d:\d\d:\d\d/],["HH:mm",/\d\d:\d\d/],["HHmmss.SSSS",/\d\d\d\d\d\d\.\d+/],["HHmmss,SSSS",/\d\d\d\d\d\d,\d+/],["HHmmss",/\d\d\d\d\d\d/],["HHmm",/\d\d\d\d/],["HH",/\d\d/]],pt=/^\/?Date\((\-?\d+)/i;function vt(e){var t,n,s,i,r,a,o=e._i,u=ft.exec(o)||mt.exec(o);if(u){for(g(e).iso=!0,t=0,n=yt.length;t<n;t++)if(yt[t][1].exec(u[1])){i=yt[t][0],s=!1!==yt[t][2];break}if(null==i)return void(e._isValid=!1);if(u[3]){for(t=0,n=gt.length;t<n;t++)if(gt[t][1].exec(u[3])){r=(u[2]||" ")+gt[t][0];break}if(null==r)return void(e._isValid=!1)}if(!s&&null!=r)return void(e._isValid=!1);if(u[4]){if(!_t.exec(u[4]))return void(e._isValid=!1);a="Z"}e._f=i+(r||"")+(a||""),kt(e)}else e._isValid=!1}var wt=/^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\s)?(\d{1,2})\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s(\d{2,4})\s(\d\d):(\d\d)(?::(\d\d))?\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\d{4}))$/;function Mt(e,t,n,s,i,r){var a=[function(e){var t=parseInt(e,10);{if(t<=49)return 2e3+t;if(t<=999)return 1900+t}return t}(e),Re.indexOf(t),parseInt(n,10),parseInt(s,10),parseInt(i,10)];return r&&a.push(parseInt(r,10)),a}var St={UT:0,GMT:0,EDT:-240,EST:-300,CDT:-300,CST:-360,MDT:-360,MST:-420,PDT:-420,PST:-480};function Dt(e){var t,n,s,i=wt.exec(e._i.replace(/\([^)]*\)|[\n\t]/g," ").replace(/(\s\s+)/g," ").replace(/^\s\s*/,"").replace(/\s\s*$/,""));if(i){var r=Mt(i[4],i[3],i[2],i[5],i[6],i[7]);if(t=i[1],n=r,s=e,t&&Ze.indexOf(t)!==new Date(n[0],n[1],n[2]).getDay()&&(g(s).weekdayMismatch=!0,!(s._isValid=!1)))return;e._a=r,e._tzm=function(e,t,n){if(e)return St[e];if(t)return 0;var s=parseInt(n,10),i=s%100;return(s-i)/100*60+i}(i[8],i[9],i[10]),e._d=Ge.apply(null,e._a),e._d.setUTCMinutes(e._d.getUTCMinutes()-e._tzm),g(e).rfc2822=!0}else e._isValid=!1}function kt(e){if(e._f!==c.ISO_8601)if(e._f!==c.RFC_2822){e._a=[],g(e).empty=!0;var t,n,s,i,r,a,o,u,l=""+e._i,d=l.length,h=0;for(s=j(e._f,e._locale).match(N)||[],t=0;t<s.length;t++)i=s[t],(n=(l.match(le(i,e))||[])[0])&&(0<(r=l.substr(0,l.indexOf(n))).length&&g(e).unusedInput.push(r),l=l.slice(l.indexOf(n)+n.length),h+=n.length),E[i]?(n?g(e).empty=!1:g(e).unusedTokens.push(i),a=i,u=e,null!=(o=n)&&m(he,a)&&he[a](o,u._a,u,a)):e._strict&&!n&&g(e).unusedTokens.push(i);g(e).charsLeftOver=d-h,0<l.length&&g(e).unusedInput.push(l),e._a[ge]<=12&&!0===g(e).bigHour&&0<e._a[ge]&&(g(e).bigHour=void 0),g(e).parsedDateParts=e._a.slice(0),g(e).meridiem=e._meridiem,e._a[ge]=function(e,t,n){var s;if(null==n)return t;return null!=e.meridiemHour?e.meridiemHour(t,n):(null!=e.isPM&&((s=e.isPM(n))&&t<12&&(t+=12),s||12!==t||(t=0)),t)}(e._locale,e._a[ge],e._meridiem),ct(e),dt(e)}else Dt(e);else vt(e)}function Yt(e){var t,n,s,i,r=e._i,a=e._f;return e._locale=e._locale||lt(e._l),null===r||void 0===a&&""===r?v({nullInput:!0}):("string"==typeof r&&(e._i=r=e._locale.preparse(r)),S(r)?new M(dt(r)):(h(r)?e._d=r:o(a)?function(e){var t,n,s,i,r;if(0===e._f.length)return g(e).invalidFormat=!0,e._d=new Date(NaN);for(i=0;i<e._f.length;i++)r=0,t=w({},e),null!=e._useUTC&&(t._useUTC=e._useUTC),t._f=e._f[i],kt(t),p(t)&&(r+=g(t).charsLeftOver,r+=10*g(t).unusedTokens.length,g(t).score=r,(null==s||r<s)&&(s=r,n=t));_(e,n||t)}(e):a?kt(e):l(n=(t=e)._i)?t._d=new Date(c.now()):h(n)?t._d=new Date(n.valueOf()):"string"==typeof n?(s=t,null===(i=pt.exec(s._i))?(vt(s),!1===s._isValid&&(delete s._isValid,Dt(s),!1===s._isValid&&(delete s._isValid,c.createFromInputFallback(s)))):s._d=new Date(+i[1])):o(n)?(t._a=f(n.slice(0),function(e){return parseInt(e,10)}),ct(t)):u(n)?function(e){if(!e._d){var t=C(e._i);e._a=f([t.year,t.month,t.day||t.date,t.hour,t.minute,t.second,t.millisecond],function(e){return e&&parseInt(e,10)}),ct(e)}}(t):d(n)?t._d=new Date(n):c.createFromInputFallback(t),p(e)||(e._d=null),e))}function Ot(e,t,n,s,i){var r,a={};return!0!==n&&!1!==n||(s=n,n=void 0),(u(e)&&function(e){if(Object.getOwnPropertyNames)return 0===Object.getOwnPropertyNames(e).length;var t;for(t in e)if(e.hasOwnProperty(t))return!1;return!0}(e)||o(e)&&0===e.length)&&(e=void 0),a._isAMomentObject=!0,a._useUTC=a._isUTC=i,a._l=n,a._i=e,a._f=t,a._strict=s,(r=new M(dt(Yt(a))))._nextDay&&(r.add(1,"d"),r._nextDay=void 0),r}function Tt(e,t,n,s){return Ot(e,t,n,s,!1)}c.createFromInputFallback=n("value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are discouraged and will be removed in an upcoming major release. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.",function(e){e._d=new Date(e._i+(e._useUTC?" UTC":""))}),c.ISO_8601=function(){},c.RFC_2822=function(){};var xt=n("moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/",function(){var e=Tt.apply(null,arguments);return this.isValid()&&e.isValid()?e<this?this:e:v()}),bt=n("moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/",function(){var e=Tt.apply(null,arguments);return this.isValid()&&e.isValid()?this<e?this:e:v()});function Pt(e,t){var n,s;if(1===t.length&&o(t[0])&&(t=t[0]),!t.length)return Tt();for(n=t[0],s=1;s<t.length;++s)t[s].isValid()&&!t[s][e](n)||(n=t[s]);return n}var Wt=["year","quarter","month","week","day","hour","minute","second","millisecond"];function Ht(e){var t=C(e),n=t.year||0,s=t.quarter||0,i=t.month||0,r=t.week||t.isoWeek||0,a=t.day||0,o=t.hour||0,u=t.minute||0,l=t.second||0,d=t.millisecond||0;this._isValid=function(e){for(var t in e)if(-1===Ye.call(Wt,t)||null!=e[t]&&isNaN(e[t]))return!1;for(var n=!1,s=0;s<Wt.length;++s)if(e[Wt[s]]){if(n)return!1;parseFloat(e[Wt[s]])!==k(e[Wt[s]])&&(n=!0)}return!0}(t),this._milliseconds=+d+1e3*l+6e4*u+1e3*o*60*60,this._days=+a+7*r,this._months=+i+3*s+12*n,this._data={},this._locale=lt(),this._bubble()}function Rt(e){return e instanceof Ht}function Ct(e){return e<0?-1*Math.round(-1*e):Math.round(e)}function Ft(e,n){I(e,0,0,function(){var e=this.utcOffset(),t="+";return e<0&&(e=-e,t="-"),t+U(~~(e/60),2)+n+U(~~e%60,2)})}Ft("Z",":"),Ft("ZZ",""),ue("Z",re),ue("ZZ",re),ce(["Z","ZZ"],function(e,t,n){n._useUTC=!0,n._tzm=Ut(re,e)});var Lt=/([\+\-]|\d\d)/gi;function Ut(e,t){var n=(t||"").match(e);if(null===n)return null;var s=((n[n.length-1]||[])+"").match(Lt)||["-",0,0],i=60*s[1]+k(s[2]);return 0===i?0:"+"===s[0]?i:-i}function Nt(e,t){var n,s;return t._isUTC?(n=t.clone(),s=(S(e)||h(e)?e.valueOf():Tt(e).valueOf())-n.valueOf(),n._d.setTime(n._d.valueOf()+s),c.updateOffset(n,!1),n):Tt(e).local()}function Gt(e){return 15*-Math.round(e._d.getTimezoneOffset()/15)}function Vt(){return!!this.isValid()&&(this._isUTC&&0===this._offset)}c.updateOffset=function(){};var Et=/^(\-|\+)?(?:(\d*)[. ])?(\d+)\:(\d+)(?:\:(\d+)(\.\d*)?)?$/,It=/^(-|\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;function At(e,t){var n,s,i,r=e,a=null;return Rt(e)?r={ms:e._milliseconds,d:e._days,M:e._months}:d(e)?(r={},t?r[t]=e:r.milliseconds=e):(a=Et.exec(e))?(n="-"===a[1]?-1:1,r={y:0,d:k(a[ye])*n,h:k(a[ge])*n,m:k(a[pe])*n,s:k(a[ve])*n,ms:k(Ct(1e3*a[we]))*n}):(a=It.exec(e))?(n="-"===a[1]?-1:1,r={y:jt(a[2],n),M:jt(a[3],n),w:jt(a[4],n),d:jt(a[5],n),h:jt(a[6],n),m:jt(a[7],n),s:jt(a[8],n)}):null==r?r={}:"object"==typeof r&&("from"in r||"to"in r)&&(i=function(e,t){var n;if(!e.isValid()||!t.isValid())return{milliseconds:0,months:0};t=Nt(t,e),e.isBefore(t)?n=Zt(e,t):((n=Zt(t,e)).milliseconds=-n.milliseconds,n.months=-n.months);return n}(Tt(r.from),Tt(r.to)),(r={}).ms=i.milliseconds,r.M=i.months),s=new Ht(r),Rt(e)&&m(e,"_locale")&&(s._locale=e._locale),s}function jt(e,t){var n=e&&parseFloat(e.replace(",","."));return(isNaN(n)?0:n)*t}function Zt(e,t){var n={milliseconds:0,months:0};return n.months=t.month()-e.month()+12*(t.year()-e.year()),e.clone().add(n.months,"M").isAfter(t)&&--n.months,n.milliseconds=+t-+e.clone().add(n.months,"M"),n}function zt(s,i){return function(e,t){var n;return null===t||isNaN(+t)||(T(i,"moment()."+i+"(period, number) is deprecated. Please use moment()."+i+"(number, period). See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info."),n=e,e=t,t=n),$t(this,At(e="string"==typeof e?+e:e,t),s),this}}function $t(e,t,n,s){var i=t._milliseconds,r=Ct(t._days),a=Ct(t._months);e.isValid()&&(s=null==s||s,a&&Ce(e,xe(e,"Month")+a*n),r&&be(e,"Date",xe(e,"Date")+r*n),i&&e._d.setTime(e._d.valueOf()+i*n),s&&c.updateOffset(e,r||a))}At.fn=Ht.prototype,At.invalid=function(){return At(NaN)};var qt=zt(1,"add"),Jt=zt(-1,"subtract");function Bt(e,t){var n=12*(t.year()-e.year())+(t.month()-e.month()),s=e.clone().add(n,"months");return-(n+(t-s<0?(t-s)/(s-e.clone().add(n-1,"months")):(t-s)/(e.clone().add(n+1,"months")-s)))||0}function Qt(e){var t;return void 0===e?this._locale._abbr:(null!=(t=lt(e))&&(this._locale=t),this)}c.defaultFormat="YYYY-MM-DDTHH:mm:ssZ",c.defaultFormatUtc="YYYY-MM-DDTHH:mm:ss[Z]";var Xt=n("moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.",function(e){return void 0===e?this.localeData():this.locale(e)});function Kt(){return this._locale}function en(e,t){I(0,[e,e.length],0,t)}function tn(e,t,n,s,i){var r;return null==e?Ie(this,s,i).year:((r=Ae(e,s,i))<t&&(t=r),function(e,t,n,s,i){var r=Ee(e,t,n,s,i),a=Ge(r.year,0,r.dayOfYear);return this.year(a.getUTCFullYear()),this.month(a.getUTCMonth()),this.date(a.getUTCDate()),this}.call(this,e,t,n,s,i))}I(0,["gg",2],0,function(){return this.weekYear()%100}),I(0,["GG",2],0,function(){return this.isoWeekYear()%100}),en("gggg","weekYear"),en("ggggg","weekYear"),en("GGGG","isoWeekYear"),en("GGGGG","isoWeekYear"),H("weekYear","gg"),H("isoWeekYear","GG"),L("weekYear",1),L("isoWeekYear",1),ue("G",se),ue("g",se),ue("GG",B,z),ue("gg",B,z),ue("GGGG",ee,q),ue("gggg",ee,q),ue("GGGGG",te,J),ue("ggggg",te,J),fe(["gggg","ggggg","GGGG","GGGGG"],function(e,t,n,s){t[s.substr(0,2)]=k(e)}),fe(["gg","GG"],function(e,t,n,s){t[s]=c.parseTwoDigitYear(e)}),I("Q",0,"Qo","quarter"),H("quarter","Q"),L("quarter",7),ue("Q",Z),ce("Q",function(e,t){t[_e]=3*(k(e)-1)}),I("D",["DD",2],"Do","date"),H("date","D"),L("date",9),ue("D",B),ue("DD",B,z),ue("Do",function(e,t){return e?t._dayOfMonthOrdinalParse||t._ordinalParse:t._dayOfMonthOrdinalParseLenient}),ce(["D","DD"],ye),ce("Do",function(e,t){t[ye]=k(e.match(B)[0])});var nn=Te("Date",!0);I("DDD",["DDDD",3],"DDDo","dayOfYear"),H("dayOfYear","DDD"),L("dayOfYear",4),ue("DDD",K),ue("DDDD",$),ce(["DDD","DDDD"],function(e,t,n){n._dayOfYear=k(e)}),I("m",["mm",2],0,"minute"),H("minute","m"),L("minute",14),ue("m",B),ue("mm",B,z),ce(["m","mm"],pe);var sn=Te("Minutes",!1);I("s",["ss",2],0,"second"),H("second","s"),L("second",15),ue("s",B),ue("ss",B,z),ce(["s","ss"],ve);var rn,an=Te("Seconds",!1);for(I("S",0,0,function(){return~~(this.millisecond()/100)}),I(0,["SS",2],0,function(){return~~(this.millisecond()/10)}),I(0,["SSS",3],0,"millisecond"),I(0,["SSSS",4],0,function(){return 10*this.millisecond()}),I(0,["SSSSS",5],0,function(){return 100*this.millisecond()}),I(0,["SSSSSS",6],0,function(){return 1e3*this.millisecond()}),I(0,["SSSSSSS",7],0,function(){return 1e4*this.millisecond()}),I(0,["SSSSSSSS",8],0,function(){return 1e5*this.millisecond()}),I(0,["SSSSSSSSS",9],0,function(){return 1e6*this.millisecond()}),H("millisecond","ms"),L("millisecond",16),ue("S",K,Z),ue("SS",K,z),ue("SSS",K,$),rn="SSSS";rn.length<=9;rn+="S")ue(rn,ne);function on(e,t){t[we]=k(1e3*("0."+e))}for(rn="S";rn.length<=9;rn+="S")ce(rn,on);var un=Te("Milliseconds",!1);I("z",0,0,"zoneAbbr"),I("zz",0,0,"zoneName");var ln=M.prototype;function dn(e){return e}ln.add=qt,ln.calendar=function(e,t){var n=e||Tt(),s=Nt(n,this).startOf("day"),i=c.calendarFormat(this,s)||"sameElse",r=t&&(x(t[i])?t[i].call(this,n):t[i]);return this.format(r||this.localeData().calendar(i,this,Tt(n)))},ln.clone=function(){return new M(this)},ln.diff=function(e,t,n){var s,i,r;if(!this.isValid())return NaN;if(!(s=Nt(e,this)).isValid())return NaN;switch(i=6e4*(s.utcOffset()-this.utcOffset()),t=R(t)){case"year":r=Bt(this,s)/12;break;case"month":r=Bt(this,s);break;case"quarter":r=Bt(this,s)/3;break;case"second":r=(this-s)/1e3;break;case"minute":r=(this-s)/6e4;break;case"hour":r=(this-s)/36e5;break;case"day":r=(this-s-i)/864e5;break;case"week":r=(this-s-i)/6048e5;break;default:r=this-s}return n?r:D(r)},ln.endOf=function(e){return void 0===(e=R(e))||"millisecond"===e?this:("date"===e&&(e="day"),this.startOf(e).add(1,"isoWeek"===e?"week":e).subtract(1,"ms"))},ln.format=function(e){e||(e=this.isUtc()?c.defaultFormatUtc:c.defaultFormat);var t=A(this,e);return this.localeData().postformat(t)},ln.from=function(e,t){return this.isValid()&&(S(e)&&e.isValid()||Tt(e).isValid())?At({to:this,from:e}).locale(this.locale()).humanize(!t):this.localeData().invalidDate()},ln.fromNow=function(e){return this.from(Tt(),e)},ln.to=function(e,t){return this.isValid()&&(S(e)&&e.isValid()||Tt(e).isValid())?At({from:this,to:e}).locale(this.locale()).humanize(!t):this.localeData().invalidDate()},ln.toNow=function(e){return this.to(Tt(),e)},ln.get=function(e){return x(this[e=R(e)])?this[e]():this},ln.invalidAt=function(){return g(this).overflow},ln.isAfter=function(e,t){var n=S(e)?e:Tt(e);return!(!this.isValid()||!n.isValid())&&("millisecond"===(t=R(t)||"millisecond")?this.valueOf()>n.valueOf():n.valueOf()<this.clone().startOf(t).valueOf())},ln.isBefore=function(e,t){var n=S(e)?e:Tt(e);return!(!this.isValid()||!n.isValid())&&("millisecond"===(t=R(t)||"millisecond")?this.valueOf()<n.valueOf():this.clone().endOf(t).valueOf()<n.valueOf())},ln.isBetween=function(e,t,n,s){var i=S(e)?e:Tt(e),r=S(t)?t:Tt(t);return!!(this.isValid()&&i.isValid()&&r.isValid())&&("("===(s=s||"()")[0]?this.isAfter(i,n):!this.isBefore(i,n))&&(")"===s[1]?this.isBefore(r,n):!this.isAfter(r,n))},ln.isSame=function(e,t){var n,s=S(e)?e:Tt(e);return!(!this.isValid()||!s.isValid())&&("millisecond"===(t=R(t)||"millisecond")?this.valueOf()===s.valueOf():(n=s.valueOf(),this.clone().startOf(t).valueOf()<=n&&n<=this.clone().endOf(t).valueOf()))},ln.isSameOrAfter=function(e,t){return this.isSame(e,t)||this.isAfter(e,t)},ln.isSameOrBefore=function(e,t){return this.isSame(e,t)||this.isBefore(e,t)},ln.isValid=function(){return p(this)},ln.lang=Xt,ln.locale=Qt,ln.localeData=Kt,ln.max=bt,ln.min=xt,ln.parsingFlags=function(){return _({},g(this))},ln.set=function(e,t){if("object"==typeof e)for(var n=function(e){var t=[];for(var n in e)t.push({unit:n,priority:F[n]});return t.sort(function(e,t){return e.priority-t.priority}),t}(e=C(e)),s=0;s<n.length;s++)this[n[s].unit](e[n[s].unit]);else if(x(this[e=R(e)]))return this[e](t);return this},ln.startOf=function(e){switch(e=R(e)){case"year":this.month(0);case"quarter":case"month":this.date(1);case"week":case"isoWeek":case"day":case"date":this.hours(0);case"hour":this.minutes(0);case"minute":this.seconds(0);case"second":this.milliseconds(0)}return"week"===e&&this.weekday(0),"isoWeek"===e&&this.isoWeekday(1),"quarter"===e&&this.month(3*Math.floor(this.month()/3)),this},ln.subtract=Jt,ln.toArray=function(){var e=this;return[e.year(),e.month(),e.date(),e.hour(),e.minute(),e.second(),e.millisecond()]},ln.toObject=function(){var e=this;return{years:e.year(),months:e.month(),date:e.date(),hours:e.hours(),minutes:e.minutes(),seconds:e.seconds(),milliseconds:e.milliseconds()}},ln.toDate=function(){return new Date(this.valueOf())},ln.toISOString=function(e){if(!this.isValid())return null;var t=!0!==e,n=t?this.clone().utc():this;return n.year()<0||9999<n.year()?A(n,t?"YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]":"YYYYYY-MM-DD[T]HH:mm:ss.SSSZ"):x(Date.prototype.toISOString)?t?this.toDate().toISOString():new Date(this.valueOf()+60*this.utcOffset()*1e3).toISOString().replace("Z",A(n,"Z")):A(n,t?"YYYY-MM-DD[T]HH:mm:ss.SSS[Z]":"YYYY-MM-DD[T]HH:mm:ss.SSSZ")},ln.inspect=function(){if(!this.isValid())return"moment.invalid(/* "+this._i+" */)";var e="moment",t="";this.isLocal()||(e=0===this.utcOffset()?"moment.utc":"moment.parseZone",t="Z");var n="["+e+'("]',s=0<=this.year()&&this.year()<=9999?"YYYY":"YYYYYY",i=t+'[")]';return this.format(n+s+"-MM-DD[T]HH:mm:ss.SSS"+i)},ln.toJSON=function(){return this.isValid()?this.toISOString():null},ln.toString=function(){return this.clone().locale("en").format("ddd MMM DD YYYY HH:mm:ss [GMT]ZZ")},ln.unix=function(){return Math.floor(this.valueOf()/1e3)},ln.valueOf=function(){return this._d.valueOf()-6e4*(this._offset||0)},ln.creationData=function(){return{input:this._i,format:this._f,locale:this._locale,isUTC:this._isUTC,strict:this._strict}},ln.year=Oe,ln.isLeapYear=function(){return ke(this.year())},ln.weekYear=function(e){return tn.call(this,e,this.week(),this.weekday(),this.localeData()._week.dow,this.localeData()._week.doy)},ln.isoWeekYear=function(e){return tn.call(this,e,this.isoWeek(),this.isoWeekday(),1,4)},ln.quarter=ln.quarters=function(e){return null==e?Math.ceil((this.month()+1)/3):this.month(3*(e-1)+this.month()%3)},ln.month=Fe,ln.daysInMonth=function(){return Pe(this.year(),this.month())},ln.week=ln.weeks=function(e){var t=this.localeData().week(this);return null==e?t:this.add(7*(e-t),"d")},ln.isoWeek=ln.isoWeeks=function(e){var t=Ie(this,1,4).week;return null==e?t:this.add(7*(e-t),"d")},ln.weeksInYear=function(){var e=this.localeData()._week;return Ae(this.year(),e.dow,e.doy)},ln.isoWeeksInYear=function(){return Ae(this.year(),1,4)},ln.date=nn,ln.day=ln.days=function(e){if(!this.isValid())return null!=e?this:NaN;var t,n,s=this._isUTC?this._d.getUTCDay():this._d.getDay();return null!=e?(t=e,n=this.localeData(),e="string"!=typeof t?t:isNaN(t)?"number"==typeof(t=n.weekdaysParse(t))?t:null:parseInt(t,10),this.add(e-s,"d")):s},ln.weekday=function(e){if(!this.isValid())return null!=e?this:NaN;var t=(this.day()+7-this.localeData()._week.dow)%7;return null==e?t:this.add(e-t,"d")},ln.isoWeekday=function(e){if(!this.isValid())return null!=e?this:NaN;if(null==e)return this.day()||7;var t,n,s=(t=e,n=this.localeData(),"string"==typeof t?n.weekdaysParse(t)%7||7:isNaN(t)?null:t);return this.day(this.day()%7?s:s-7)},ln.dayOfYear=function(e){var t=Math.round((this.clone().startOf("day")-this.clone().startOf("year"))/864e5)+1;return null==e?t:this.add(e-t,"d")},ln.hour=ln.hours=tt,ln.minute=ln.minutes=sn,ln.second=ln.seconds=an,ln.millisecond=ln.milliseconds=un,ln.utcOffset=function(e,t,n){var s,i=this._offset||0;if(!this.isValid())return null!=e?this:NaN;if(null==e)return this._isUTC?i:Gt(this);if("string"==typeof e){if(null===(e=Ut(re,e)))return this}else Math.abs(e)<16&&!n&&(e*=60);return!this._isUTC&&t&&(s=Gt(this)),this._offset=e,this._isUTC=!0,null!=s&&this.add(s,"m"),i!==e&&(!t||this._changeInProgress?$t(this,At(e-i,"m"),1,!1):this._changeInProgress||(this._changeInProgress=!0,c.updateOffset(this,!0),this._changeInProgress=null)),this},ln.utc=function(e){return this.utcOffset(0,e)},ln.local=function(e){return this._isUTC&&(this.utcOffset(0,e),this._isUTC=!1,e&&this.subtract(Gt(this),"m")),this},ln.parseZone=function(){if(null!=this._tzm)this.utcOffset(this._tzm,!1,!0);else if("string"==typeof this._i){var e=Ut(ie,this._i);null!=e?this.utcOffset(e):this.utcOffset(0,!0)}return this},ln.hasAlignedHourOffset=function(e){return!!this.isValid()&&(e=e?Tt(e).utcOffset():0,(this.utcOffset()-e)%60==0)},ln.isDST=function(){return this.utcOffset()>this.clone().month(0).utcOffset()||this.utcOffset()>this.clone().month(5).utcOffset()},ln.isLocal=function(){return!!this.isValid()&&!this._isUTC},ln.isUtcOffset=function(){return!!this.isValid()&&this._isUTC},ln.isUtc=Vt,ln.isUTC=Vt,ln.zoneAbbr=function(){return this._isUTC?"UTC":""},ln.zoneName=function(){return this._isUTC?"Coordinated Universal Time":""},ln.dates=n("dates accessor is deprecated. Use date instead.",nn),ln.months=n("months accessor is deprecated. Use month instead",Fe),ln.years=n("years accessor is deprecated. Use year instead",Oe),ln.zone=n("moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/",function(e,t){return null!=e?("string"!=typeof e&&(e=-e),this.utcOffset(e,t),this):-this.utcOffset()}),ln.isDSTShifted=n("isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information",function(){if(!l(this._isDSTShifted))return this._isDSTShifted;var e={};if(w(e,this),(e=Yt(e))._a){var t=e._isUTC?y(e._a):Tt(e._a);this._isDSTShifted=this.isValid()&&0<a(e._a,t.toArray())}else this._isDSTShifted=!1;return this._isDSTShifted});var hn=P.prototype;function cn(e,t,n,s){var i=lt(),r=y().set(s,t);return i[n](r,e)}function fn(e,t,n){if(d(e)&&(t=e,e=void 0),e=e||"",null!=t)return cn(e,t,n,"month");var s,i=[];for(s=0;s<12;s++)i[s]=cn(e,s,n,"month");return i}function mn(e,t,n,s){t=("boolean"==typeof e?d(t)&&(n=t,t=void 0):(t=e,e=!1,d(n=t)&&(n=t,t=void 0)),t||"");var i,r=lt(),a=e?r._week.dow:0;if(null!=n)return cn(t,(n+a)%7,s,"day");var o=[];for(i=0;i<7;i++)o[i]=cn(t,(i+a)%7,s,"day");return o}hn.calendar=function(e,t,n){var s=this._calendar[e]||this._calendar.sameElse;return x(s)?s.call(t,n):s},hn.longDateFormat=function(e){var t=this._longDateFormat[e],n=this._longDateFormat[e.toUpperCase()];return t||!n?t:(this._longDateFormat[e]=n.replace(/MMMM|MM|DD|dddd/g,function(e){return e.slice(1)}),this._longDateFormat[e])},hn.invalidDate=function(){return this._invalidDate},hn.ordinal=function(e){return this._ordinal.replace("%d",e)},hn.preparse=dn,hn.postformat=dn,hn.relativeTime=function(e,t,n,s){var i=this._relativeTime[n];return x(i)?i(e,t,n,s):i.replace(/%d/i,e)},hn.pastFuture=function(e,t){var n=this._relativeTime[0<e?"future":"past"];return x(n)?n(t):n.replace(/%s/i,t)},hn.set=function(e){var t,n;for(n in e)x(t=e[n])?this[n]=t:this["_"+n]=t;this._config=e,this._dayOfMonthOrdinalParseLenient=new RegExp((this._dayOfMonthOrdinalParse.source||this._ordinalParse.source)+"|"+/\d{1,2}/.source)},hn.months=function(e,t){return e?o(this._months)?this._months[e.month()]:this._months[(this._months.isFormat||We).test(t)?"format":"standalone"][e.month()]:o(this._months)?this._months:this._months.standalone},hn.monthsShort=function(e,t){return e?o(this._monthsShort)?this._monthsShort[e.month()]:this._monthsShort[We.test(t)?"format":"standalone"][e.month()]:o(this._monthsShort)?this._monthsShort:this._monthsShort.standalone},hn.monthsParse=function(e,t,n){var s,i,r;if(this._monthsParseExact)return function(e,t,n){var s,i,r,a=e.toLocaleLowerCase();if(!this._monthsParse)for(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[],s=0;s<12;++s)r=y([2e3,s]),this._shortMonthsParse[s]=this.monthsShort(r,"").toLocaleLowerCase(),this._longMonthsParse[s]=this.months(r,"").toLocaleLowerCase();return n?"MMM"===t?-1!==(i=Ye.call(this._shortMonthsParse,a))?i:null:-1!==(i=Ye.call(this._longMonthsParse,a))?i:null:"MMM"===t?-1!==(i=Ye.call(this._shortMonthsParse,a))?i:-1!==(i=Ye.call(this._longMonthsParse,a))?i:null:-1!==(i=Ye.call(this._longMonthsParse,a))?i:-1!==(i=Ye.call(this._shortMonthsParse,a))?i:null}.call(this,e,t,n);for(this._monthsParse||(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[]),s=0;s<12;s++){if(i=y([2e3,s]),n&&!this._longMonthsParse[s]&&(this._longMonthsParse[s]=new RegExp("^"+this.months(i,"").replace(".","")+"$","i"),this._shortMonthsParse[s]=new RegExp("^"+this.monthsShort(i,"").replace(".","")+"$","i")),n||this._monthsParse[s]||(r="^"+this.months(i,"")+"|^"+this.monthsShort(i,""),this._monthsParse[s]=new RegExp(r.replace(".",""),"i")),n&&"MMMM"===t&&this._longMonthsParse[s].test(e))return s;if(n&&"MMM"===t&&this._shortMonthsParse[s].test(e))return s;if(!n&&this._monthsParse[s].test(e))return s}},hn.monthsRegex=function(e){return this._monthsParseExact?(m(this,"_monthsRegex")||Ne.call(this),e?this._monthsStrictRegex:this._monthsRegex):(m(this,"_monthsRegex")||(this._monthsRegex=Ue),this._monthsStrictRegex&&e?this._monthsStrictRegex:this._monthsRegex)},hn.monthsShortRegex=function(e){return this._monthsParseExact?(m(this,"_monthsRegex")||Ne.call(this),e?this._monthsShortStrictRegex:this._monthsShortRegex):(m(this,"_monthsShortRegex")||(this._monthsShortRegex=Le),this._monthsShortStrictRegex&&e?this._monthsShortStrictRegex:this._monthsShortRegex)},hn.week=function(e){return Ie(e,this._week.dow,this._week.doy).week},hn.firstDayOfYear=function(){return this._week.doy},hn.firstDayOfWeek=function(){return this._week.dow},hn.weekdays=function(e,t){return e?o(this._weekdays)?this._weekdays[e.day()]:this._weekdays[this._weekdays.isFormat.test(t)?"format":"standalone"][e.day()]:o(this._weekdays)?this._weekdays:this._weekdays.standalone},hn.weekdaysMin=function(e){return e?this._weekdaysMin[e.day()]:this._weekdaysMin},hn.weekdaysShort=function(e){return e?this._weekdaysShort[e.day()]:this._weekdaysShort},hn.weekdaysParse=function(e,t,n){var s,i,r;if(this._weekdaysParseExact)return function(e,t,n){var s,i,r,a=e.toLocaleLowerCase();if(!this._weekdaysParse)for(this._weekdaysParse=[],this._shortWeekdaysParse=[],this._minWeekdaysParse=[],s=0;s<7;++s)r=y([2e3,1]).day(s),this._minWeekdaysParse[s]=this.weekdaysMin(r,"").toLocaleLowerCase(),this._shortWeekdaysParse[s]=this.weekdaysShort(r,"").toLocaleLowerCase(),this._weekdaysParse[s]=this.weekdays(r,"").toLocaleLowerCase();return n?"dddd"===t?-1!==(i=Ye.call(this._weekdaysParse,a))?i:null:"ddd"===t?-1!==(i=Ye.call(this._shortWeekdaysParse,a))?i:null:-1!==(i=Ye.call(this._minWeekdaysParse,a))?i:null:"dddd"===t?-1!==(i=Ye.call(this._weekdaysParse,a))?i:-1!==(i=Ye.call(this._shortWeekdaysParse,a))?i:-1!==(i=Ye.call(this._minWeekdaysParse,a))?i:null:"ddd"===t?-1!==(i=Ye.call(this._shortWeekdaysParse,a))?i:-1!==(i=Ye.call(this._weekdaysParse,a))?i:-1!==(i=Ye.call(this._minWeekdaysParse,a))?i:null:-1!==(i=Ye.call(this._minWeekdaysParse,a))?i:-1!==(i=Ye.call(this._weekdaysParse,a))?i:-1!==(i=Ye.call(this._shortWeekdaysParse,a))?i:null}.call(this,e,t,n);for(this._weekdaysParse||(this._weekdaysParse=[],this._minWeekdaysParse=[],this._shortWeekdaysParse=[],this._fullWeekdaysParse=[]),s=0;s<7;s++){if(i=y([2e3,1]).day(s),n&&!this._fullWeekdaysParse[s]&&(this._fullWeekdaysParse[s]=new RegExp("^"+this.weekdays(i,"").replace(".","\\.?")+"$","i"),this._shortWeekdaysParse[s]=new RegExp("^"+this.weekdaysShort(i,"").replace(".","\\.?")+"$","i"),this._minWeekdaysParse[s]=new RegExp("^"+this.weekdaysMin(i,"").replace(".","\\.?")+"$","i")),this._weekdaysParse[s]||(r="^"+this.weekdays(i,"")+"|^"+this.weekdaysShort(i,"")+"|^"+this.weekdaysMin(i,""),this._weekdaysParse[s]=new RegExp(r.replace(".",""),"i")),n&&"dddd"===t&&this._fullWeekdaysParse[s].test(e))return s;if(n&&"ddd"===t&&this._shortWeekdaysParse[s].test(e))return s;if(n&&"dd"===t&&this._minWeekdaysParse[s].test(e))return s;if(!n&&this._weekdaysParse[s].test(e))return s}},hn.weekdaysRegex=function(e){return this._weekdaysParseExact?(m(this,"_weekdaysRegex")||Be.call(this),e?this._weekdaysStrictRegex:this._weekdaysRegex):(m(this,"_weekdaysRegex")||(this._weekdaysRegex=$e),this._weekdaysStrictRegex&&e?this._weekdaysStrictRegex:this._weekdaysRegex)},hn.weekdaysShortRegex=function(e){return this._weekdaysParseExact?(m(this,"_weekdaysRegex")||Be.call(this),e?this._weekdaysShortStrictRegex:this._weekdaysShortRegex):(m(this,"_weekdaysShortRegex")||(this._weekdaysShortRegex=qe),this._weekdaysShortStrictRegex&&e?this._weekdaysShortStrictRegex:this._weekdaysShortRegex)},hn.weekdaysMinRegex=function(e){return this._weekdaysParseExact?(m(this,"_weekdaysRegex")||Be.call(this),e?this._weekdaysMinStrictRegex:this._weekdaysMinRegex):(m(this,"_weekdaysMinRegex")||(this._weekdaysMinRegex=Je),this._weekdaysMinStrictRegex&&e?this._weekdaysMinStrictRegex:this._weekdaysMinRegex)},hn.isPM=function(e){return"p"===(e+"").toLowerCase().charAt(0)},hn.meridiem=function(e,t,n){return 11<e?n?"pm":"PM":n?"am":"AM"},ot("en",{dayOfMonthOrdinalParse:/\d{1,2}(th|st|nd|rd)/,ordinal:function(e){var t=e%10;return e+(1===k(e%100/10)?"th":1===t?"st":2===t?"nd":3===t?"rd":"th")}}),c.lang=n("moment.lang is deprecated. Use moment.locale instead.",ot),c.langData=n("moment.langData is deprecated. Use moment.localeData instead.",lt);var _n=Math.abs;function yn(e,t,n,s){var i=At(t,n);return e._milliseconds+=s*i._milliseconds,e._days+=s*i._days,e._months+=s*i._months,e._bubble()}function gn(e){return e<0?Math.floor(e):Math.ceil(e)}function pn(e){return 4800*e/146097}function vn(e){return 146097*e/4800}function wn(e){return function(){return this.as(e)}}var Mn=wn("ms"),Sn=wn("s"),Dn=wn("m"),kn=wn("h"),Yn=wn("d"),On=wn("w"),Tn=wn("M"),xn=wn("y");function bn(e){return function(){return this.isValid()?this._data[e]:NaN}}var Pn=bn("milliseconds"),Wn=bn("seconds"),Hn=bn("minutes"),Rn=bn("hours"),Cn=bn("days"),Fn=bn("months"),Ln=bn("years");var Un=Math.round,Nn={ss:44,s:45,m:45,h:22,d:26,M:11};var Gn=Math.abs;function Vn(e){return(0<e)-(e<0)||+e}function En(){if(!this.isValid())return this.localeData().invalidDate();var e,t,n=Gn(this._milliseconds)/1e3,s=Gn(this._days),i=Gn(this._months);t=D((e=D(n/60))/60),n%=60,e%=60;var r=D(i/12),a=i%=12,o=s,u=t,l=e,d=n?n.toFixed(3).replace(/\.?0+$/,""):"",h=this.asSeconds();if(!h)return"P0D";var c=h<0?"-":"",f=Vn(this._months)!==Vn(h)?"-":"",m=Vn(this._days)!==Vn(h)?"-":"",_=Vn(this._milliseconds)!==Vn(h)?"-":"";return c+"P"+(r?f+r+"Y":"")+(a?f+a+"M":"")+(o?m+o+"D":"")+(u||l||d?"T":"")+(u?_+u+"H":"")+(l?_+l+"M":"")+(d?_+d+"S":"")}var In=Ht.prototype;return In.isValid=function(){return this._isValid},In.abs=function(){var e=this._data;return this._milliseconds=_n(this._milliseconds),this._days=_n(this._days),this._months=_n(this._months),e.milliseconds=_n(e.milliseconds),e.seconds=_n(e.seconds),e.minutes=_n(e.minutes),e.hours=_n(e.hours),e.months=_n(e.months),e.years=_n(e.years),this},In.add=function(e,t){return yn(this,e,t,1)},In.subtract=function(e,t){return yn(this,e,t,-1)},In.as=function(e){if(!this.isValid())return NaN;var t,n,s=this._milliseconds;if("month"===(e=R(e))||"year"===e)return t=this._days+s/864e5,n=this._months+pn(t),"month"===e?n:n/12;switch(t=this._days+Math.round(vn(this._months)),e){case"week":return t/7+s/6048e5;case"day":return t+s/864e5;case"hour":return 24*t+s/36e5;case"minute":return 1440*t+s/6e4;case"second":return 86400*t+s/1e3;case"millisecond":return Math.floor(864e5*t)+s;default:throw new Error("Unknown unit "+e)}},In.asMilliseconds=Mn,In.asSeconds=Sn,In.asMinutes=Dn,In.asHours=kn,In.asDays=Yn,In.asWeeks=On,In.asMonths=Tn,In.asYears=xn,In.valueOf=function(){return this.isValid()?this._milliseconds+864e5*this._days+this._months%12*2592e6+31536e6*k(this._months/12):NaN},In._bubble=function(){var e,t,n,s,i,r=this._milliseconds,a=this._days,o=this._months,u=this._data;return 0<=r&&0<=a&&0<=o||r<=0&&a<=0&&o<=0||(r+=864e5*gn(vn(o)+a),o=a=0),u.milliseconds=r%1e3,e=D(r/1e3),u.seconds=e%60,t=D(e/60),u.minutes=t%60,n=D(t/60),u.hours=n%24,o+=i=D(pn(a+=D(n/24))),a-=gn(vn(i)),s=D(o/12),o%=12,u.days=a,u.months=o,u.years=s,this},In.clone=function(){return At(this)},In.get=function(e){return e=R(e),this.isValid()?this[e+"s"]():NaN},In.milliseconds=Pn,In.seconds=Wn,In.minutes=Hn,In.hours=Rn,In.days=Cn,In.weeks=function(){return D(this.days()/7)},In.months=Fn,In.years=Ln,In.humanize=function(e){if(!this.isValid())return this.localeData().invalidDate();var t,n,s,i,r,a,o,u,l,d,h,c=this.localeData(),f=(n=!e,s=c,i=At(t=this).abs(),r=Un(i.as("s")),a=Un(i.as("m")),o=Un(i.as("h")),u=Un(i.as("d")),l=Un(i.as("M")),d=Un(i.as("y")),(h=r<=Nn.ss&&["s",r]||r<Nn.s&&["ss",r]||a<=1&&["m"]||a<Nn.m&&["mm",a]||o<=1&&["h"]||o<Nn.h&&["hh",o]||u<=1&&["d"]||u<Nn.d&&["dd",u]||l<=1&&["M"]||l<Nn.M&&["MM",l]||d<=1&&["y"]||["yy",d])[2]=n,h[3]=0<+t,h[4]=s,function(e,t,n,s,i){return i.relativeTime(t||1,!!n,e,s)}.apply(null,h));return e&&(f=c.pastFuture(+this,f)),c.postformat(f)},In.toISOString=En,In.toString=En,In.toJSON=En,In.locale=Qt,In.localeData=Kt,In.toIsoString=n("toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)",En),In.lang=Xt,I("X",0,0,"unix"),I("x",0,0,"valueOf"),ue("x",se),ue("X",/[+-]?\d+(\.\d{1,3})?/),ce("X",function(e,t,n){n._d=new Date(1e3*parseFloat(e,10))}),ce("x",function(e,t,n){n._d=new Date(k(e))}),c.version="2.23.0",e=Tt,c.fn=ln,c.min=function(){return Pt("isBefore",[].slice.call(arguments,0))},c.max=function(){return Pt("isAfter",[].slice.call(arguments,0))},c.now=function(){return Date.now?Date.now():+new Date},c.utc=y,c.unix=function(e){return Tt(1e3*e)},c.months=function(e,t){return fn(e,t,"months")},c.isDate=h,c.locale=ot,c.invalid=v,c.duration=At,c.isMoment=S,c.weekdays=function(e,t,n){return mn(e,t,n,"weekdays")},c.parseZone=function(){return Tt.apply(null,arguments).parseZone()},c.localeData=lt,c.isDuration=Rt,c.monthsShort=function(e,t){return fn(e,t,"monthsShort")},c.weekdaysMin=function(e,t,n){return mn(e,t,n,"weekdaysMin")},c.defineLocale=ut,c.updateLocale=function(e,t){if(null!=t){var n,s,i=nt;null!=(s=at(e))&&(i=s._config),(n=new P(t=b(i,t))).parentLocale=st[e],st[e]=n,ot(e)}else null!=st[e]&&(null!=st[e].parentLocale?st[e]=st[e].parentLocale:null!=st[e]&&delete st[e]);return st[e]},c.locales=function(){return s(st)},c.weekdaysShort=function(e,t,n){return mn(e,t,n,"weekdaysShort")},c.normalizeUnits=R,c.relativeTimeRounding=function(e){return void 0===e?Un:"function"==typeof e&&(Un=e,!0)},c.relativeTimeThreshold=function(e,t){return void 0!==Nn[e]&&(void 0===t?Nn[e]:(Nn[e]=t,"s"===e&&(Nn.ss=t-1),!0))},c.calendarFormat=function(e,t){var n=e.diff(t,"days",!0);return n<-6?"sameElse":n<-1?"lastWeek":n<0?"lastDay":n<1?"sameDay":n<2?"nextDay":n<7?"nextWeek":"sameElse"},c.prototype=ln,c.HTML5_FMT={DATETIME_LOCAL:"YYYY-MM-DDTHH:mm",DATETIME_LOCAL_SECONDS:"YYYY-MM-DDTHH:mm:ss",DATETIME_LOCAL_MS:"YYYY-MM-DDTHH:mm:ss.SSS",DATE:"YYYY-MM-DD",TIME:"HH:mm",TIME_SECONDS:"HH:mm:ss",TIME_MS:"HH:mm:ss.SSS",WEEK:"GGGG-[W]WW",MONTH:"YYYY-MM"},c});
\ No newline at end of file
diff --git a/website/js/vendor/mustache/mustache.js b/website/js/vendor/mustache/mustache.js
new file mode 100644 (file)
index 0000000..6ed26c7
--- /dev/null
@@ -0,0 +1,740 @@
+// This file has been generated from mustache.mjs
+(function (global, factory) {
+  typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
+  typeof define === 'function' && define.amd ? define(factory) :
+  (global = global || self, global.Mustache = factory());
+}(this, (function () { 'use strict';
+
+  /*!
+   * mustache.js - Logic-less {{mustache}} templates with JavaScript
+   * http://github.com/janl/mustache.js
+   */
+
+  var objectToString = Object.prototype.toString;
+  var isArray = Array.isArray || function isArrayPolyfill (object) {
+    return objectToString.call(object) === '[object Array]';
+  };
+
+  function isFunction (object) {
+    return typeof object === 'function';
+  }
+
+  /**
+   * More correct typeof string handling array
+   * which normally returns typeof 'object'
+   */
+  function typeStr (obj) {
+    return isArray(obj) ? 'array' : typeof obj;
+  }
+
+  function escapeRegExp (string) {
+    return string.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g, '\\$&');
+  }
+
+  /**
+   * Null safe way of checking whether or not an object,
+   * including its prototype, has a given property
+   */
+  function hasProperty (obj, propName) {
+    return obj != null && typeof obj === 'object' && (propName in obj);
+  }
+
+  /**
+   * Safe way of detecting whether or not the given thing is a primitive and
+   * whether it has the given property
+   */
+  function primitiveHasOwnProperty (primitive, propName) {
+    return (
+      primitive != null
+      && typeof primitive !== 'object'
+      && primitive.hasOwnProperty
+      && primitive.hasOwnProperty(propName)
+    );
+  }
+
+  // Workaround for https://issues.apache.org/jira/browse/COUCHDB-577
+  // See https://github.com/janl/mustache.js/issues/189
+  var regExpTest = RegExp.prototype.test;
+  function testRegExp (re, string) {
+    return regExpTest.call(re, string);
+  }
+
+  var nonSpaceRe = /\S/;
+  function isWhitespace (string) {
+    return !testRegExp(nonSpaceRe, string);
+  }
+
+  var entityMap = {
+    '&': '&amp;',
+    '<': '&lt;',
+    '>': '&gt;',
+    '"': '&quot;',
+    "'": '&#39;',
+    '/': '&#x2F;',
+    '`': '&#x60;',
+    '=': '&#x3D;'
+  };
+
+  function escapeHtml (string) {
+    return String(string).replace(/[&<>"'`=\/]/g, function fromEntityMap (s) {
+      return entityMap[s];
+    });
+  }
+
+  var whiteRe = /\s*/;
+  var spaceRe = /\s+/;
+  var equalsRe = /\s*=/;
+  var curlyRe = /\s*\}/;
+  var tagRe = /#|\^|\/|>|\{|&|=|!/;
+
+  /**
+   * Breaks up the given `template` string into a tree of tokens. If the `tags`
+   * argument is given here it must be an array with two string values: the
+   * opening and closing tags used in the template (e.g. [ "<%", "%>" ]). Of
+   * course, the default is to use mustaches (i.e. mustache.tags).
+   *
+   * A token is an array with at least 4 elements. The first element is the
+   * mustache symbol that was used inside the tag, e.g. "#" or "&". If the tag
+   * did not contain a symbol (i.e. {{myValue}}) this element is "name". For
+   * all text that appears outside a symbol this element is "text".
+   *
+   * The second element of a token is its "value". For mustache tags this is
+   * whatever else was inside the tag besides the opening symbol. For text tokens
+   * this is the text itself.
+   *
+   * The third and fourth elements of the token are the start and end indices,
+   * respectively, of the token in the original template.
+   *
+   * Tokens that are the root node of a subtree contain two more elements: 1) an
+   * array of tokens in the subtree and 2) the index in the original template at
+   * which the closing tag for that section begins.
+   *
+   * Tokens for partials also contain two more elements: 1) a string value of
+   * indendation prior to that tag and 2) the index of that tag on that line -
+   * eg a value of 2 indicates the partial is the third tag on this line.
+   */
+  function parseTemplate (template, tags) {
+    if (!template)
+      return [];
+    var lineHasNonSpace = false;
+    var sections = [];     // Stack to hold section tokens
+    var tokens = [];       // Buffer to hold the tokens
+    var spaces = [];       // Indices of whitespace tokens on the current line
+    var hasTag = false;    // Is there a {{tag}} on the current line?
+    var nonSpace = false;  // Is there a non-space char on the current line?
+    var indentation = '';  // Tracks indentation for tags that use it
+    var tagIndex = 0;      // Stores a count of number of tags encountered on a line
+
+    // Strips all whitespace tokens array for the current line
+    // if there was a {{#tag}} on it and otherwise only space.
+    function stripSpace () {
+      if (hasTag && !nonSpace) {
+        while (spaces.length)
+          delete tokens[spaces.pop()];
+      } else {
+        spaces = [];
+      }
+
+      hasTag = false;
+      nonSpace = false;
+    }
+
+    var openingTagRe, closingTagRe, closingCurlyRe;
+    function compileTags (tagsToCompile) {
+      if (typeof tagsToCompile === 'string')
+        tagsToCompile = tagsToCompile.split(spaceRe, 2);
+
+      if (!isArray(tagsToCompile) || tagsToCompile.length !== 2)
+        throw new Error('Invalid tags: ' + tagsToCompile);
+
+      openingTagRe = new RegExp(escapeRegExp(tagsToCompile[0]) + '\\s*');
+      closingTagRe = new RegExp('\\s*' + escapeRegExp(tagsToCompile[1]));
+      closingCurlyRe = new RegExp('\\s*' + escapeRegExp('}' + tagsToCompile[1]));
+    }
+
+    compileTags(tags || mustache.tags);
+
+    var scanner = new Scanner(template);
+
+    var start, type, value, chr, token, openSection;
+    while (!scanner.eos()) {
+      start = scanner.pos;
+
+      // Match any text between tags.
+      value = scanner.scanUntil(openingTagRe);
+
+      if (value) {
+        for (var i = 0, valueLength = value.length; i < valueLength; ++i) {
+          chr = value.charAt(i);
+
+          if (isWhitespace(chr)) {
+            spaces.push(tokens.length);
+            indentation += chr;
+          } else {
+            nonSpace = true;
+            lineHasNonSpace = true;
+            indentation += ' ';
+          }
+
+          tokens.push([ 'text', chr, start, start + 1 ]);
+          start += 1;
+
+          // Check for whitespace on the current line.
+          if (chr === '\n') {
+            stripSpace();
+            indentation = '';
+            tagIndex = 0;
+            lineHasNonSpace = false;
+          }
+        }
+      }
+
+      // Match the opening tag.
+      if (!scanner.scan(openingTagRe))
+        break;
+
+      hasTag = true;
+
+      // Get the tag type.
+      type = scanner.scan(tagRe) || 'name';
+      scanner.scan(whiteRe);
+
+      // Get the tag value.
+      if (type === '=') {
+        value = scanner.scanUntil(equalsRe);
+        scanner.scan(equalsRe);
+        scanner.scanUntil(closingTagRe);
+      } else if (type === '{') {
+        value = scanner.scanUntil(closingCurlyRe);
+        scanner.scan(curlyRe);
+        scanner.scanUntil(closingTagRe);
+        type = '&';
+      } else {
+        value = scanner.scanUntil(closingTagRe);
+      }
+
+      // Match the closing tag.
+      if (!scanner.scan(closingTagRe))
+        throw new Error('Unclosed tag at ' + scanner.pos);
+
+      if (type == '>') {
+        token = [ type, value, start, scanner.pos, indentation, tagIndex, lineHasNonSpace ];
+      } else {
+        token = [ type, value, start, scanner.pos ];
+      }
+      tagIndex++;
+      tokens.push(token);
+
+      if (type === '#' || type === '^') {
+        sections.push(token);
+      } else if (type === '/') {
+        // Check section nesting.
+        openSection = sections.pop();
+
+        if (!openSection)
+          throw new Error('Unopened section "' + value + '" at ' + start);
+
+        if (openSection[1] !== value)
+          throw new Error('Unclosed section "' + openSection[1] + '" at ' + start);
+      } else if (type === 'name' || type === '{' || type === '&') {
+        nonSpace = true;
+      } else if (type === '=') {
+        // Set the tags for the next time around.
+        compileTags(value);
+      }
+    }
+
+    stripSpace();
+
+    // Make sure there are no open sections when we're done.
+    openSection = sections.pop();
+
+    if (openSection)
+      throw new Error('Unclosed section "' + openSection[1] + '" at ' + scanner.pos);
+
+    return nestTokens(squashTokens(tokens));
+  }
+
+  /**
+   * Combines the values of consecutive text tokens in the given `tokens` array
+   * to a single token.
+   */
+  function squashTokens (tokens) {
+    var squashedTokens = [];
+
+    var token, lastToken;
+    for (var i = 0, numTokens = tokens.length; i < numTokens; ++i) {
+      token = tokens[i];
+
+      if (token) {
+        if (token[0] === 'text' && lastToken && lastToken[0] === 'text') {
+          lastToken[1] += token[1];
+          lastToken[3] = token[3];
+        } else {
+          squashedTokens.push(token);
+          lastToken = token;
+        }
+      }
+    }
+
+    return squashedTokens;
+  }
+
+  /**
+   * Forms the given array of `tokens` into a nested tree structure where
+   * tokens that represent a section have two additional items: 1) an array of
+   * all tokens that appear in that section and 2) the index in the original
+   * template that represents the end of that section.
+   */
+  function nestTokens (tokens) {
+    var nestedTokens = [];
+    var collector = nestedTokens;
+    var sections = [];
+
+    var token, section;
+    for (var i = 0, numTokens = tokens.length; i < numTokens; ++i) {
+      token = tokens[i];
+
+      switch (token[0]) {
+        case '#':
+        case '^':
+          collector.push(token);
+          sections.push(token);
+          collector = token[4] = [];
+          break;
+        case '/':
+          section = sections.pop();
+          section[5] = token[2];
+          collector = sections.length > 0 ? sections[sections.length - 1][4] : nestedTokens;
+          break;
+        default:
+          collector.push(token);
+      }
+    }
+
+    return nestedTokens;
+  }
+
+  /**
+   * A simple string scanner that is used by the template parser to find
+   * tokens in template strings.
+   */
+  function Scanner (string) {
+    this.string = string;
+    this.tail = string;
+    this.pos = 0;
+  }
+
+  /**
+   * Returns `true` if the tail is empty (end of string).
+   */
+  Scanner.prototype.eos = function eos () {
+    return this.tail === '';
+  };
+
+  /**
+   * Tries to match the given regular expression at the current position.
+   * Returns the matched text if it can match, the empty string otherwise.
+   */
+  Scanner.prototype.scan = function scan (re) {
+    var match = this.tail.match(re);
+
+    if (!match || match.index !== 0)
+      return '';
+
+    var string = match[0];
+
+    this.tail = this.tail.substring(string.length);
+    this.pos += string.length;
+
+    return string;
+  };
+
+  /**
+   * Skips all text until the given regular expression can be matched. Returns
+   * the skipped string, which is the entire tail if no match can be made.
+   */
+  Scanner.prototype.scanUntil = function scanUntil (re) {
+    var index = this.tail.search(re), match;
+
+    switch (index) {
+      case -1:
+        match = this.tail;
+        this.tail = '';
+        break;
+      case 0:
+        match = '';
+        break;
+      default:
+        match = this.tail.substring(0, index);
+        this.tail = this.tail.substring(index);
+    }
+
+    this.pos += match.length;
+
+    return match;
+  };
+
+  /**
+   * Represents a rendering context by wrapping a view object and
+   * maintaining a reference to the parent context.
+   */
+  function Context (view, parentContext) {
+    this.view = view;
+    this.cache = { '.': this.view };
+    this.parent = parentContext;
+  }
+
+  /**
+   * Creates a new context using the given view with this context
+   * as the parent.
+   */
+  Context.prototype.push = function push (view) {
+    return new Context(view, this);
+  };
+
+  /**
+   * Returns the value of the given name in this context, traversing
+   * up the context hierarchy if the value is absent in this context's view.
+   */
+  Context.prototype.lookup = function lookup (name) {
+    var cache = this.cache;
+
+    var value;
+    if (cache.hasOwnProperty(name)) {
+      value = cache[name];
+    } else {
+      var context = this, intermediateValue, names, index, lookupHit = false;
+
+      while (context) {
+        if (name.indexOf('.') > 0) {
+          intermediateValue = context.view;
+          names = name.split('.');
+          index = 0;
+
+          /**
+           * Using the dot notion path in `name`, we descend through the
+           * nested objects.
+           *
+           * To be certain that the lookup has been successful, we have to
+           * check if the last object in the path actually has the property
+           * we are looking for. We store the result in `lookupHit`.
+           *
+           * This is specially necessary for when the value has been set to
+           * `undefined` and we want to avoid looking up parent contexts.
+           *
+           * In the case where dot notation is used, we consider the lookup
+           * to be successful even if the last "object" in the path is
+           * not actually an object but a primitive (e.g., a string, or an
+           * integer), because it is sometimes useful to access a property
+           * of an autoboxed primitive, such as the length of a string.
+           **/
+          while (intermediateValue != null && index < names.length) {
+            if (index === names.length - 1)
+              lookupHit = (
+                hasProperty(intermediateValue, names[index])
+                || primitiveHasOwnProperty(intermediateValue, names[index])
+              );
+
+            intermediateValue = intermediateValue[names[index++]];
+          }
+        } else {
+          intermediateValue = context.view[name];
+
+          /**
+           * Only checking against `hasProperty`, which always returns `false` if
+           * `context.view` is not an object. Deliberately omitting the check
+           * against `primitiveHasOwnProperty` if dot notation is not used.
+           *
+           * Consider this example:
+           * ```
+           * Mustache.render("The length of a football field is {{#length}}{{length}}{{/length}}.", {length: "100 yards"})
+           * ```
+           *
+           * If we were to check also against `primitiveHasOwnProperty`, as we do
+           * in the dot notation case, then render call would return:
+           *
+           * "The length of a football field is 9."
+           *
+           * rather than the expected:
+           *
+           * "The length of a football field is 100 yards."
+           **/
+          lookupHit = hasProperty(context.view, name);
+        }
+
+        if (lookupHit) {
+          value = intermediateValue;
+          break;
+        }
+
+        context = context.parent;
+      }
+
+      cache[name] = value;
+    }
+
+    if (isFunction(value))
+      value = value.call(this.view);
+
+    return value;
+  };
+
+  /**
+   * A Writer knows how to take a stream of tokens and render them to a
+   * string, given a context. It also maintains a cache of templates to
+   * avoid the need to parse the same template twice.
+   */
+  function Writer () {
+    this.templateCache = {
+      _cache: {},
+      set: function set (key, value) {
+        this._cache[key] = value;
+      },
+      get: function get (key) {
+        return this._cache[key];
+      },
+      clear: function clear () {
+        this._cache = {};
+      }
+    };
+  }
+
+  /**
+   * Clears all cached templates in this writer.
+   */
+  Writer.prototype.clearCache = function clearCache () {
+    if (typeof this.templateCache !== 'undefined') {
+      this.templateCache.clear();
+    }
+  };
+
+  /**
+   * Parses and caches the given `template` according to the given `tags` or
+   * `mustache.tags` if `tags` is omitted,  and returns the array of tokens
+   * that is generated from the parse.
+   */
+  Writer.prototype.parse = function parse (template, tags) {
+    var cache = this.templateCache;
+    var cacheKey = template + ':' + (tags || mustache.tags).join(':');
+    var isCacheEnabled = typeof cache !== 'undefined';
+    var tokens = isCacheEnabled ? cache.get(cacheKey) : undefined;
+
+    if (tokens == undefined) {
+      tokens = parseTemplate(template, tags);
+      isCacheEnabled && cache.set(cacheKey, tokens);
+    }
+    return tokens;
+  };
+
+  /**
+   * High-level method that is used to render the given `template` with
+   * the given `view`.
+   *
+   * The optional `partials` argument may be an object that contains the
+   * names and templates of partials that are used in the template. It may
+   * also be a function that is used to load partial templates on the fly
+   * that takes a single argument: the name of the partial.
+   *
+   * If the optional `tags` argument is given here it must be an array with two
+   * string values: the opening and closing tags used in the template (e.g.
+   * [ "<%", "%>" ]). The default is to mustache.tags.
+   */
+  Writer.prototype.render = function render (template, view, partials, tags) {
+    var tokens = this.parse(template, tags);
+    var context = (view instanceof Context) ? view : new Context(view, undefined);
+    return this.renderTokens(tokens, context, partials, template, tags);
+  };
+
+  /**
+   * Low-level method that renders the given array of `tokens` using
+   * the given `context` and `partials`.
+   *
+   * Note: The `originalTemplate` is only ever used to extract the portion
+   * of the original template that was contained in a higher-order section.
+   * If the template doesn't use higher-order sections, this argument may
+   * be omitted.
+   */
+  Writer.prototype.renderTokens = function renderTokens (tokens, context, partials, originalTemplate, tags) {
+    var buffer = '';
+
+    var token, symbol, value;
+    for (var i = 0, numTokens = tokens.length; i < numTokens; ++i) {
+      value = undefined;
+      token = tokens[i];
+      symbol = token[0];
+
+      if (symbol === '#') value = this.renderSection(token, context, partials, originalTemplate);
+      else if (symbol === '^') value = this.renderInverted(token, context, partials, originalTemplate);
+      else if (symbol === '>') value = this.renderPartial(token, context, partials, tags);
+      else if (symbol === '&') value = this.unescapedValue(token, context);
+      else if (symbol === 'name') value = this.escapedValue(token, context);
+      else if (symbol === 'text') value = this.rawValue(token);
+
+      if (value !== undefined)
+        buffer += value;
+    }
+
+    return buffer;
+  };
+
+  Writer.prototype.renderSection = function renderSection (token, context, partials, originalTemplate) {
+    var self = this;
+    var buffer = '';
+    var value = context.lookup(token[1]);
+
+    // This function is used to render an arbitrary template
+    // in the current context by higher-order sections.
+    function subRender (template) {
+      return self.render(template, context, partials);
+    }
+
+    if (!value) return;
+
+    if (isArray(value)) {
+      for (var j = 0, valueLength = value.length; j < valueLength; ++j) {
+        buffer += this.renderTokens(token[4], context.push(value[j]), partials, originalTemplate);
+      }
+    } else if (typeof value === 'object' || typeof value === 'string' || typeof value === 'number') {
+      buffer += this.renderTokens(token[4], context.push(value), partials, originalTemplate);
+    } else if (isFunction(value)) {
+      if (typeof originalTemplate !== 'string')
+        throw new Error('Cannot use higher-order sections without the original template');
+
+      // Extract the portion of the original template that the section contains.
+      value = value.call(context.view, originalTemplate.slice(token[3], token[5]), subRender);
+
+      if (value != null)
+        buffer += value;
+    } else {
+      buffer += this.renderTokens(token[4], context, partials, originalTemplate);
+    }
+    return buffer;
+  };
+
+  Writer.prototype.renderInverted = function renderInverted (token, context, partials, originalTemplate) {
+    var value = context.lookup(token[1]);
+
+    // Use JavaScript's definition of falsy. Include empty arrays.
+    // See https://github.com/janl/mustache.js/issues/186
+    if (!value || (isArray(value) && value.length === 0))
+      return this.renderTokens(token[4], context, partials, originalTemplate);
+  };
+
+  Writer.prototype.indentPartial = function indentPartial (partial, indentation, lineHasNonSpace) {
+    var filteredIndentation = indentation.replace(/[^ \t]/g, '');
+    var partialByNl = partial.split('\n');
+    for (var i = 0; i < partialByNl.length; i++) {
+      if (partialByNl[i].length && (i > 0 || !lineHasNonSpace)) {
+        partialByNl[i] = filteredIndentation + partialByNl[i];
+      }
+    }
+    return partialByNl.join('\n');
+  };
+
+  Writer.prototype.renderPartial = function renderPartial (token, context, partials, tags) {
+    if (!partials) return;
+
+    var value = isFunction(partials) ? partials(token[1]) : partials[token[1]];
+    if (value != null) {
+      var lineHasNonSpace = token[6];
+      var tagIndex = token[5];
+      var indentation = token[4];
+      var indentedValue = value;
+      if (tagIndex == 0 && indentation) {
+        indentedValue = this.indentPartial(value, indentation, lineHasNonSpace);
+      }
+      return this.renderTokens(this.parse(indentedValue, tags), context, partials, indentedValue, tags);
+    }
+  };
+
+  Writer.prototype.unescapedValue = function unescapedValue (token, context) {
+    var value = context.lookup(token[1]);
+    if (value != null)
+      return value;
+  };
+
+  Writer.prototype.escapedValue = function escapedValue (token, context) {
+    var value = context.lookup(token[1]);
+    if (value != null)
+      return mustache.escape(value);
+  };
+
+  Writer.prototype.rawValue = function rawValue (token) {
+    return token[1];
+  };
+
+  var mustache = {
+    name: 'mustache.js',
+    version: '4.0.1',
+    tags: [ '{{', '}}' ],
+    clearCache: undefined,
+    escape: undefined,
+    parse: undefined,
+    render: undefined,
+    Scanner: undefined,
+    Context: undefined,
+    Writer: undefined,
+    /**
+     * Allows a user to override the default caching strategy, by providing an
+     * object with set, get and clear methods. This can also be used to disable
+     * the cache by setting it to the literal `undefined`.
+     */
+    set templateCache (cache) {
+      defaultWriter.templateCache = cache;
+    },
+    /**
+     * Gets the default or overridden caching object from the default writer.
+     */
+    get templateCache () {
+      return defaultWriter.templateCache;
+    }
+  };
+
+  // All high-level mustache.* functions use this writer.
+  var defaultWriter = new Writer();
+
+  /**
+   * Clears all cached templates in the default writer.
+   */
+  mustache.clearCache = function clearCache () {
+    return defaultWriter.clearCache();
+  };
+
+  /**
+   * Parses and caches the given template in the default writer and returns the
+   * array of tokens it contains. Doing this ahead of time avoids the need to
+   * parse templates on the fly as they are rendered.
+   */
+  mustache.parse = function parse (template, tags) {
+    return defaultWriter.parse(template, tags);
+  };
+
+  /**
+   * Renders the `template` with the given `view` and `partials` using the
+   * default writer. If the optional `tags` argument is given here it must be an
+   * array with two string values: the opening and closing tags used in the
+   * template (e.g. [ "<%", "%>" ]). The default is to mustache.tags.
+   */
+  mustache.render = function render (template, view, partials, tags) {
+    if (typeof template !== 'string') {
+      throw new TypeError('Invalid template! Template should be a "string" ' +
+                          'but "' + typeStr(template) + '" was given as the first ' +
+                          'argument for mustache#render(template, view, partials)');
+    }
+
+    return defaultWriter.render(template, view, partials, tags);
+  };
+
+  // Export the escaping function so that the user may override it.
+  // See https://github.com/janl/mustache.js/issues/244
+  mustache.escape = escapeHtml;
+
+  // Export these mainly for testing, but also for advanced usage.
+  mustache.Scanner = Scanner;
+  mustache.Context = Context;
+  mustache.Writer = Writer;
+
+  return mustache;
+
+})));
diff --git a/website/js/vendor/mustache/mustache.min.js b/website/js/vendor/mustache/mustache.min.js
new file mode 100644 (file)
index 0000000..173c85a
--- /dev/null
@@ -0,0 +1 @@
+(function(global,factory){typeof exports==="object"&&typeof module!=="undefined"?module.exports=factory():typeof define==="function"&&define.amd?define(factory):(global=global||self,global.Mustache=factory())})(this,function(){"use strict";var objectToString=Object.prototype.toString;var isArray=Array.isArray||function isArrayPolyfill(object){return objectToString.call(object)==="[object Array]"};function isFunction(object){return typeof object==="function"}function typeStr(obj){return isArray(obj)?"array":typeof obj}function escapeRegExp(string){return string.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g,"\\$&")}function hasProperty(obj,propName){return obj!=null&&typeof obj==="object"&&propName in obj}function primitiveHasOwnProperty(primitive,propName){return primitive!=null&&typeof primitive!=="object"&&primitive.hasOwnProperty&&primitive.hasOwnProperty(propName)}var regExpTest=RegExp.prototype.test;function testRegExp(re,string){return regExpTest.call(re,string)}var nonSpaceRe=/\S/;function isWhitespace(string){return!testRegExp(nonSpaceRe,string)}var entityMap={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;","/":"&#x2F;","`":"&#x60;","=":"&#x3D;"};function escapeHtml(string){return String(string).replace(/[&<>"'`=\/]/g,function fromEntityMap(s){return entityMap[s]})}var whiteRe=/\s*/;var spaceRe=/\s+/;var equalsRe=/\s*=/;var curlyRe=/\s*\}/;var tagRe=/#|\^|\/|>|\{|&|=|!/;function parseTemplate(template,tags){if(!template)return[];var lineHasNonSpace=false;var sections=[];var tokens=[];var spaces=[];var hasTag=false;var nonSpace=false;var indentation="";var tagIndex=0;function stripSpace(){if(hasTag&&!nonSpace){while(spaces.length)delete tokens[spaces.pop()]}else{spaces=[]}hasTag=false;nonSpace=false}var openingTagRe,closingTagRe,closingCurlyRe;function compileTags(tagsToCompile){if(typeof tagsToCompile==="string")tagsToCompile=tagsToCompile.split(spaceRe,2);if(!isArray(tagsToCompile)||tagsToCompile.length!==2)throw new Error("Invalid tags: "+tagsToCompile);openingTagRe=new RegExp(escapeRegExp(tagsToCompile[0])+"\\s*");closingTagRe=new RegExp("\\s*"+escapeRegExp(tagsToCompile[1]));closingCurlyRe=new RegExp("\\s*"+escapeRegExp("}"+tagsToCompile[1]))}compileTags(tags||mustache.tags);var scanner=new Scanner(template);var start,type,value,chr,token,openSection;while(!scanner.eos()){start=scanner.pos;value=scanner.scanUntil(openingTagRe);if(value){for(var i=0,valueLength=value.length;i<valueLength;++i){chr=value.charAt(i);if(isWhitespace(chr)){spaces.push(tokens.length);indentation+=chr}else{nonSpace=true;lineHasNonSpace=true;indentation+=" "}tokens.push(["text",chr,start,start+1]);start+=1;if(chr==="\n"){stripSpace();indentation="";tagIndex=0;lineHasNonSpace=false}}}if(!scanner.scan(openingTagRe))break;hasTag=true;type=scanner.scan(tagRe)||"name";scanner.scan(whiteRe);if(type==="="){value=scanner.scanUntil(equalsRe);scanner.scan(equalsRe);scanner.scanUntil(closingTagRe)}else if(type==="{"){value=scanner.scanUntil(closingCurlyRe);scanner.scan(curlyRe);scanner.scanUntil(closingTagRe);type="&"}else{value=scanner.scanUntil(closingTagRe)}if(!scanner.scan(closingTagRe))throw new Error("Unclosed tag at "+scanner.pos);if(type==">"){token=[type,value,start,scanner.pos,indentation,tagIndex,lineHasNonSpace]}else{token=[type,value,start,scanner.pos]}tagIndex++;tokens.push(token);if(type==="#"||type==="^"){sections.push(token)}else if(type==="/"){openSection=sections.pop();if(!openSection)throw new Error('Unopened section "'+value+'" at '+start);if(openSection[1]!==value)throw new Error('Unclosed section "'+openSection[1]+'" at '+start)}else if(type==="name"||type==="{"||type==="&"){nonSpace=true}else if(type==="="){compileTags(value)}}stripSpace();openSection=sections.pop();if(openSection)throw new Error('Unclosed section "'+openSection[1]+'" at '+scanner.pos);return nestTokens(squashTokens(tokens))}function squashTokens(tokens){var squashedTokens=[];var token,lastToken;for(var i=0,numTokens=tokens.length;i<numTokens;++i){token=tokens[i];if(token){if(token[0]==="text"&&lastToken&&lastToken[0]==="text"){lastToken[1]+=token[1];lastToken[3]=token[3]}else{squashedTokens.push(token);lastToken=token}}}return squashedTokens}function nestTokens(tokens){var nestedTokens=[];var collector=nestedTokens;var sections=[];var token,section;for(var i=0,numTokens=tokens.length;i<numTokens;++i){token=tokens[i];switch(token[0]){case"#":case"^":collector.push(token);sections.push(token);collector=token[4]=[];break;case"/":section=sections.pop();section[5]=token[2];collector=sections.length>0?sections[sections.length-1][4]:nestedTokens;break;default:collector.push(token)}}return nestedTokens}function Scanner(string){this.string=string;this.tail=string;this.pos=0}Scanner.prototype.eos=function eos(){return this.tail===""};Scanner.prototype.scan=function scan(re){var match=this.tail.match(re);if(!match||match.index!==0)return"";var string=match[0];this.tail=this.tail.substring(string.length);this.pos+=string.length;return string};Scanner.prototype.scanUntil=function scanUntil(re){var index=this.tail.search(re),match;switch(index){case-1:match=this.tail;this.tail="";break;case 0:match="";break;default:match=this.tail.substring(0,index);this.tail=this.tail.substring(index)}this.pos+=match.length;return match};function Context(view,parentContext){this.view=view;this.cache={".":this.view};this.parent=parentContext}Context.prototype.push=function push(view){return new Context(view,this)};Context.prototype.lookup=function lookup(name){var cache=this.cache;var value;if(cache.hasOwnProperty(name)){value=cache[name]}else{var context=this,intermediateValue,names,index,lookupHit=false;while(context){if(name.indexOf(".")>0){intermediateValue=context.view;names=name.split(".");index=0;while(intermediateValue!=null&&index<names.length){if(index===names.length-1)lookupHit=hasProperty(intermediateValue,names[index])||primitiveHasOwnProperty(intermediateValue,names[index]);intermediateValue=intermediateValue[names[index++]]}}else{intermediateValue=context.view[name];lookupHit=hasProperty(context.view,name)}if(lookupHit){value=intermediateValue;break}context=context.parent}cache[name]=value}if(isFunction(value))value=value.call(this.view);return value};function Writer(){this.templateCache={_cache:{},set:function set(key,value){this._cache[key]=value},get:function get(key){return this._cache[key]},clear:function clear(){this._cache={}}}}Writer.prototype.clearCache=function clearCache(){if(typeof this.templateCache!=="undefined"){this.templateCache.clear()}};Writer.prototype.parse=function parse(template,tags){var cache=this.templateCache;var cacheKey=template+":"+(tags||mustache.tags).join(":");var isCacheEnabled=typeof cache!=="undefined";var tokens=isCacheEnabled?cache.get(cacheKey):undefined;if(tokens==undefined){tokens=parseTemplate(template,tags);isCacheEnabled&&cache.set(cacheKey,tokens)}return tokens};Writer.prototype.render=function render(template,view,partials,tags){var tokens=this.parse(template,tags);var context=view instanceof Context?view:new Context(view,undefined);return this.renderTokens(tokens,context,partials,template,tags)};Writer.prototype.renderTokens=function renderTokens(tokens,context,partials,originalTemplate,tags){var buffer="";var token,symbol,value;for(var i=0,numTokens=tokens.length;i<numTokens;++i){value=undefined;token=tokens[i];symbol=token[0];if(symbol==="#")value=this.renderSection(token,context,partials,originalTemplate);else if(symbol==="^")value=this.renderInverted(token,context,partials,originalTemplate);else if(symbol===">")value=this.renderPartial(token,context,partials,tags);else if(symbol==="&")value=this.unescapedValue(token,context);else if(symbol==="name")value=this.escapedValue(token,context);else if(symbol==="text")value=this.rawValue(token);if(value!==undefined)buffer+=value}return buffer};Writer.prototype.renderSection=function renderSection(token,context,partials,originalTemplate){var self=this;var buffer="";var value=context.lookup(token[1]);function subRender(template){return self.render(template,context,partials)}if(!value)return;if(isArray(value)){for(var j=0,valueLength=value.length;j<valueLength;++j){buffer+=this.renderTokens(token[4],context.push(value[j]),partials,originalTemplate)}}else if(typeof value==="object"||typeof value==="string"||typeof value==="number"){buffer+=this.renderTokens(token[4],context.push(value),partials,originalTemplate)}else if(isFunction(value)){if(typeof originalTemplate!=="string")throw new Error("Cannot use higher-order sections without the original template");value=value.call(context.view,originalTemplate.slice(token[3],token[5]),subRender);if(value!=null)buffer+=value}else{buffer+=this.renderTokens(token[4],context,partials,originalTemplate)}return buffer};Writer.prototype.renderInverted=function renderInverted(token,context,partials,originalTemplate){var value=context.lookup(token[1]);if(!value||isArray(value)&&value.length===0)return this.renderTokens(token[4],context,partials,originalTemplate)};Writer.prototype.indentPartial=function indentPartial(partial,indentation,lineHasNonSpace){var filteredIndentation=indentation.replace(/[^ \t]/g,"");var partialByNl=partial.split("\n");for(var i=0;i<partialByNl.length;i++){if(partialByNl[i].length&&(i>0||!lineHasNonSpace)){partialByNl[i]=filteredIndentation+partialByNl[i]}}return partialByNl.join("\n")};Writer.prototype.renderPartial=function renderPartial(token,context,partials,tags){if(!partials)return;var value=isFunction(partials)?partials(token[1]):partials[token[1]];if(value!=null){var lineHasNonSpace=token[6];var tagIndex=token[5];var indentation=token[4];var indentedValue=value;if(tagIndex==0&&indentation){indentedValue=this.indentPartial(value,indentation,lineHasNonSpace)}return this.renderTokens(this.parse(indentedValue,tags),context,partials,indentedValue,tags)}};Writer.prototype.unescapedValue=function unescapedValue(token,context){var value=context.lookup(token[1]);if(value!=null)return value};Writer.prototype.escapedValue=function escapedValue(token,context){var value=context.lookup(token[1]);if(value!=null)return mustache.escape(value)};Writer.prototype.rawValue=function rawValue(token){return token[1]};var mustache={name:"mustache.js",version:"4.0.1",tags:["{{","}}"],clearCache:undefined,escape:undefined,parse:undefined,render:undefined,Scanner:undefined,Context:undefined,Writer:undefined,set templateCache(cache){defaultWriter.templateCache=cache},get templateCache(){return defaultWriter.templateCache}};var defaultWriter=new Writer;mustache.clearCache=function clearCache(){return defaultWriter.clearCache()};mustache.parse=function parse(template,tags){return defaultWriter.parse(template,tags)};mustache.render=function render(template,view,partials,tags){if(typeof template!=="string"){throw new TypeError('Invalid template! Template should be a "string" '+'but "'+typeStr(template)+'" was given as the first '+"argument for mustache#render(template, view, partials)")}return defaultWriter.render(template,view,partials,tags)};mustache.escape=escapeHtml;mustache.Scanner=Scanner;mustache.Context=Context;mustache.Writer=Writer;return mustache});
diff --git a/website/js/vendor/slimselect/slimselect.css b/website/js/vendor/slimselect/slimselect.css
new file mode 100644 (file)
index 0000000..f7ca569
--- /dev/null
@@ -0,0 +1,394 @@
+.ss-main {
+  position   : relative;
+  display    : inline-block;
+  user-select: none;
+  color      : #000;
+  width      : 100%
+}
+
+.ss-main .ss-single-selected {
+  display         : flex;
+  cursor          : pointer;
+  width           : 100%;
+  /* height          : 30px; */
+  padding         : 6px;
+  /* border          : 1px solid #dcdee2; */
+  /* border-radius   : 4px; */
+  background-color: #fff;
+  font-size: 11pt;
+  outline         : 0;
+  box-sizing      : border-box;
+  /* transition      : background-color .2s */
+}
+
+.ss-main .ss-single-selected.ss-disabled {
+  background-color: #dcdee2;
+  cursor          : not-allowed
+}
+
+.ss-main .ss-single-selected.ss-open-above {
+  border-top-left-radius : 0px;
+  border-top-right-radius: 0px
+}
+
+.ss-main .ss-single-selected.ss-open-below {
+  border-bottom-left-radius : 0px;
+  border-bottom-right-radius: 0px
+}
+
+.ss-main .ss-single-selected .placeholder {
+  display            : flex;
+  flex               : 1 1 100%;
+  align-items        : center;
+  overflow           : hidden;
+  text-overflow      : ellipsis;
+  white-space        : nowrap;
+  text-align         : left;
+  width              : calc(100% - 30px);
+  line-height        : 1em;
+  -webkit-user-select: none;
+  -moz-user-select   : none;
+  -ms-user-select    : none;
+  user-select        : none
+}
+
+.ss-main .ss-single-selected .placeholder * {
+  display      : flex;
+  align-items  : center;
+  overflow     : hidden;
+  text-overflow: ellipsis;
+  white-space  : nowrap;
+  width        : auto
+}
+
+.ss-main .ss-single-selected .placeholder .ss-disabled {
+  color: #dedede
+}
+
+.ss-main .ss-single-selected .ss-deselect {
+  display        : flex;
+  align-items    : center;
+  justify-content: flex-end;
+  flex           : 0 1 auto;
+  margin         : 0 6px 0 6px;
+  font-weight    : bold
+}
+
+.ss-main .ss-single-selected .ss-deselect.ss-hide {
+  display: none
+}
+
+.ss-main .ss-single-selected .ss-arrow {
+  display        : flex;
+  align-items    : center;
+  justify-content: flex-end;
+  flex           : 0 1 auto;
+  margin         : 0 6px 0 6px
+}
+
+.ss-main .ss-single-selected .ss-arrow span {
+  border      : solid #666;
+  border-width: 0 2px 2px 0;
+  display     : inline-block;
+  padding     : 3px;
+  transition  : transform .2s, margin .2s
+}
+
+.ss-main .ss-single-selected .ss-arrow span.arrow-up {
+  transform: rotate(-135deg);
+  margin   : 3px 0 0 0
+}
+
+.ss-main .ss-single-selected .ss-arrow span.arrow-down {
+  transform: rotate(45deg);
+  margin   : -3px 0 0 0
+}
+
+.ss-main .ss-multi-selected {
+  display         : flex;
+  flex-direction  : row;
+  cursor          : pointer;
+  min-height      : 30px;
+  width           : 100%;
+  padding         : 0 0 0 3px;
+  border          : 1px solid #dcdee2;
+  border-radius   : 2px;
+  background-color: #fff;
+  outline         : 0;
+  box-sizing      : border-box;
+  transition      : background-color .2s
+}
+
+.ss-main .ss-multi-selected.ss-disabled {
+  background-color: #dcdee2;
+  cursor          : not-allowed
+}
+
+.ss-main .ss-multi-selected.ss-disabled .ss-values .ss-disabled {
+  color: #666
+}
+
+.ss-main .ss-multi-selected.ss-disabled .ss-values .ss-value .ss-value-delete {
+  cursor: not-allowed
+}
+
+.ss-main .ss-multi-selected.ss-open-above {
+  border-top-left-radius : 0px;
+  border-top-right-radius: 0px
+}
+
+.ss-main .ss-multi-selected.ss-open-below {
+  border-bottom-left-radius : 0px;
+  border-bottom-right-radius: 0px
+}
+
+.ss-main .ss-multi-selected .ss-values {
+  display        : flex;
+  flex-wrap      : wrap;
+  justify-content: flex-start;
+  flex           : 1 1 100%;
+  width          : calc(100% - 30px)
+}
+
+.ss-main .ss-multi-selected .ss-values .ss-disabled {
+  display      : flex;
+  padding      : 4px 5px;
+  margin       : 2px 0px;
+  line-height  : 1em;
+  align-items  : center;
+  width        : 100%;
+  color        : #dedede;
+  overflow     : hidden;
+  text-overflow: ellipsis;
+  white-space  : nowrap
+}
+
+@keyframes scaleIn {
+  0% {
+    transform: scale(0);
+    opacity  : 0
+  }
+
+  100% {
+    transform: scale(1);
+    opacity  : 1
+  }
+}
+
+@keyframes scaleOut {
+  0% {
+    transform: scale(1);
+    opacity  : 1
+  }
+
+  100% {
+    transform: scale(0);
+    opacity  : 0
+  }
+}
+
+.ss-main .ss-multi-selected .ss-values .ss-value {
+  display                  : flex;
+  user-select              : none;
+  align-items              : center;
+  font-size                : 12px;
+  padding                  : 3px 5px;
+  margin                   : 3px 5px 3px 0px;
+  color                    : #fff;
+  background-color         : #bbb;
+  /* border-radius            : 4px; */
+  animation-name           : scaleIn;
+  animation-duration       : .2s;
+  animation-timing-function: ease-out;
+  animation-fill-mode      : both
+}
+
+.ss-main .ss-multi-selected .ss-values .ss-value.ss-out {
+  animation-name           : scaleOut;
+  animation-duration       : .2s;
+  animation-timing-function: ease-out
+}
+
+.ss-main .ss-multi-selected .ss-values .ss-value .ss-value-delete {
+  margin: 0 0 0 5px;
+  cursor: pointer
+}
+
+.ss-main .ss-multi-selected .ss-add {
+  display: flex;
+  flex   : 0 1 3px;
+  margin : 9px 12px 0 5px
+}
+
+.ss-main .ss-multi-selected .ss-add .ss-plus {
+  display        : flex;
+  justify-content: center;
+  align-items    : center;
+  background     : #666;
+  position       : relative;
+  height         : 10px;
+  width          : 2px;
+  transition     : transform .2s
+}
+
+.ss-main .ss-multi-selected .ss-add .ss-plus:after {
+  background: #666;
+  content   : "";
+  position  : absolute;
+  height    : 2px;
+  width     : 10px;
+  left      : -4px;
+  top       : 4px
+}
+
+.ss-main .ss-multi-selected .ss-add .ss-plus.ss-cross {
+  transform: rotate(45deg)
+}
+
+.ss-content {
+  position        : absolute;
+  width           : 100%;
+  margin          : -1px 0 0 0;
+  box-sizing      : border-box;
+  border          : solid 1px #dcdee2;
+  z-index         : 1010;
+  background-color: #fff;
+  transform-origin: center top;
+  transition      : transform .2s, opacity .2s;
+  opacity         : 0;
+  transform       : scaleY(0)
+}
+
+.ss-content.ss-open {
+  display  : block;
+  opacity  : 1;
+  transform: scaleY(1)
+}
+
+.ss-content .ss-search {
+  display       : flex;
+  flex-direction: row;
+  padding       : 8px 8px 6px 8px
+}
+
+.ss-content .ss-search.ss-hide {
+  height : 0px;
+  opacity: 0;
+  padding: 0px 0px 0px 0px;
+  margin : 0px 0px 0px 0px
+}
+
+.ss-content .ss-search.ss-hide input {
+  height : 0px;
+  opacity: 0;
+  padding: 0px 0px 0px 0px;
+  margin : 0px 0px 0px 0px
+}
+
+.ss-content .ss-search input {
+  display           : inline-flex;
+  font-size         : inherit;
+  line-height       : inherit;
+  flex              : 1 1 auto;
+  width             : 100%;
+  min-width         : 0px;
+  height            : 30px;
+  padding           : 6px 8px;
+  margin            : 0;
+  border            : 1px solid #dcdee2;
+  border-radius     : 4px;
+  background-color  : #fff;
+  outline           : 0;
+  text-align        : left;
+  box-sizing        : border-box;
+  -webkit-box-sizing: border-box;
+  -webkit-appearance: textfield
+}
+
+.ss-content .ss-search input::placeholder {
+  color         : #8a8a8a;
+  vertical-align: middle
+}
+
+.ss-content .ss-search input:focus {
+  box-shadow: 0 0 5px #bbb;
+}
+
+.ss-content .ss-search .ss-addable {
+  display        : inline-flex;
+  justify-content: center;
+  align-items    : center;
+  cursor         : pointer;
+  font-size      : 22px;
+  font-weight    : bold;
+  flex           : 0 0 30px;
+  height         : 30px;
+  margin         : 0 0 0 8px;
+  border         : 1px solid #dcdee2;
+  border-radius  : 4px;
+  box-sizing     : border-box
+}
+
+.ss-content .ss-addable {
+  padding-top: 0px
+}
+
+.ss-content .ss-list {
+  max-height: 200px;
+  overflow-x: hidden;
+  overflow-y: auto;
+  text-align: left
+}
+
+.ss-content .ss-list .ss-optgroup .ss-optgroup-label {
+  padding    : 6px 10px 6px 10px;
+  font-weight: bold
+}
+
+.ss-content .ss-list .ss-optgroup .ss-option {
+  padding: 6px 6px 6px 25px
+}
+
+.ss-content .ss-list .ss-optgroup-label-selectable {
+  cursor: pointer
+}
+
+.ss-content .ss-list .ss-optgroup-label-selectable:hover {
+  color           : #fff;
+  background-color: #bbb;
+}
+
+.ss-content .ss-list .ss-option {
+  padding    : 6px 10px 6px 10px;
+  cursor     : pointer;
+  user-select: none
+}
+
+.ss-content .ss-list .ss-option * {
+  display: inline-block
+}
+
+.ss-content .ss-list .ss-option:hover,
+.ss-content .ss-list .ss-option.ss-highlighted {
+  color           : #fff;
+  background-color: #bbb;
+}
+
+.ss-content .ss-list .ss-option.ss-disabled {
+  cursor          : not-allowed;
+  color           : #dedede;
+  background-color: #fff
+}
+
+.ss-content .ss-list .ss-option:not(.ss-disabled).ss-option-selected {
+  color           : #666;
+  background-color: rgba(88, 151, 251, 0.1)
+}
+
+.ss-content .ss-list .ss-option.ss-hide {
+  display: none
+}
+
+.ss-content .ss-list .ss-option .ss-search-highlight {
+  background-color: #fffb8c
+}
diff --git a/website/js/vendor/slimselect/slimselect.js b/website/js/vendor/slimselect/slimselect.js
new file mode 100644 (file)
index 0000000..2b0ce4b
--- /dev/null
@@ -0,0 +1,1931 @@
+(function webpackUniversalModuleDefinition(root, factory) {
+       if(typeof exports === 'object' && typeof module === 'object')
+               module.exports = factory();
+       else if(typeof define === 'function' && define.amd)
+               define([], factory);
+       else if(typeof exports === 'object')
+               exports["SlimSelect"] = factory();
+       else
+               root["SlimSelect"] = factory();
+})(window, function() {
+return /******/ (function(modules) { // webpackBootstrap
+/******/       // The module cache
+/******/       var installedModules = {};
+/******/
+/******/       // The require function
+/******/       function __webpack_require__(moduleId) {
+/******/
+/******/               // Check if module is in cache
+/******/               if(installedModules[moduleId]) {
+/******/                       return installedModules[moduleId].exports;
+/******/               }
+/******/               // Create a new module (and put it into the cache)
+/******/               var module = installedModules[moduleId] = {
+/******/                       i: moduleId,
+/******/                       l: false,
+/******/                       exports: {}
+/******/               };
+/******/
+/******/               // Execute the module function
+/******/               modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+/******/
+/******/               // Flag the module as loaded
+/******/               module.l = true;
+/******/
+/******/               // Return the exports of the module
+/******/               return module.exports;
+/******/       }
+/******/
+/******/
+/******/       // expose the modules object (__webpack_modules__)
+/******/       __webpack_require__.m = modules;
+/******/
+/******/       // expose the module cache
+/******/       __webpack_require__.c = installedModules;
+/******/
+/******/       // define getter function for harmony exports
+/******/       __webpack_require__.d = function(exports, name, getter) {
+/******/               if(!__webpack_require__.o(exports, name)) {
+/******/                       Object.defineProperty(exports, name, { enumerable: true, get: getter });
+/******/               }
+/******/       };
+/******/
+/******/       // define __esModule on exports
+/******/       __webpack_require__.r = function(exports) {
+/******/               if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
+/******/                       Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+/******/               }
+/******/               Object.defineProperty(exports, '__esModule', { value: true });
+/******/       };
+/******/
+/******/       // create a fake namespace object
+/******/       // mode & 1: value is a module id, require it
+/******/       // mode & 2: merge all properties of value into the ns
+/******/       // mode & 4: return value when already ns object
+/******/       // mode & 8|1: behave like require
+/******/       __webpack_require__.t = function(value, mode) {
+/******/               if(mode & 1) value = __webpack_require__(value);
+/******/               if(mode & 8) return value;
+/******/               if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
+/******/               var ns = Object.create(null);
+/******/               __webpack_require__.r(ns);
+/******/               Object.defineProperty(ns, 'default', { enumerable: true, value: value });
+/******/               if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
+/******/               return ns;
+/******/       };
+/******/
+/******/       // getDefaultExport function for compatibility with non-harmony modules
+/******/       __webpack_require__.n = function(module) {
+/******/               var getter = module && module.__esModule ?
+/******/                       function getDefault() { return module['default']; } :
+/******/                       function getModuleExports() { return module; };
+/******/               __webpack_require__.d(getter, 'a', getter);
+/******/               return getter;
+/******/       };
+/******/
+/******/       // Object.prototype.hasOwnProperty.call
+/******/       __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
+/******/
+/******/       // __webpack_public_path__
+/******/       __webpack_require__.p = "";
+/******/
+/******/
+/******/       // Load entry module and return exports
+/******/       return __webpack_require__(__webpack_require__.s = 2);
+/******/ })
+/************************************************************************/
+/******/ ([
+/* 0 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+exports.__esModule = true;
+function hasClassInTree(element, className) {
+    function hasClass(e, c) {
+        if (!(!c || !e || !e.classList || !e.classList.contains(c))) {
+            return e;
+        }
+        return null;
+    }
+    function parentByClass(e, c) {
+        if (!e || e === document) {
+            return null;
+        }
+        else if (hasClass(e, c)) {
+            return e;
+        }
+        else {
+            return parentByClass(e.parentNode, c);
+        }
+    }
+    return hasClass(element, className) || parentByClass(element, className);
+}
+exports.hasClassInTree = hasClassInTree;
+function ensureElementInView(container, element) {
+    var cTop = container.scrollTop + container.offsetTop;
+    var cBottom = cTop + container.clientHeight;
+    var eTop = element.offsetTop;
+    var eBottom = eTop + element.clientHeight;
+    if (eTop < cTop) {
+        container.scrollTop -= (cTop - eTop);
+    }
+    else if (eBottom > cBottom) {
+        container.scrollTop += (eBottom - cBottom);
+    }
+}
+exports.ensureElementInView = ensureElementInView;
+function putContent(el, currentPosition, isOpen) {
+    var height = el.offsetHeight;
+    var rect = el.getBoundingClientRect();
+    var elemTop = (isOpen ? rect.top : rect.top - height);
+    var elemBottom = (isOpen ? rect.bottom : rect.bottom + height);
+    if (elemTop <= 0) {
+        return 'below';
+    }
+    if (elemBottom >= window.innerHeight) {
+        return 'above';
+    }
+    return (isOpen ? currentPosition : 'below');
+}
+exports.putContent = putContent;
+function debounce(func, wait, immediate) {
+    if (wait === void 0) { wait = 100; }
+    if (immediate === void 0) { immediate = false; }
+    var timeout;
+    return function () {
+        var args = [];
+        for (var _i = 0; _i < arguments.length; _i++) {
+            args[_i] = arguments[_i];
+        }
+        var context = self;
+        var later = function () {
+            timeout = null;
+            if (!immediate) {
+                func.apply(context, args);
+            }
+        };
+        var callNow = immediate && !timeout;
+        clearTimeout(timeout);
+        timeout = setTimeout(later, wait);
+        if (callNow) {
+            func.apply(context, args);
+        }
+    };
+}
+exports.debounce = debounce;
+function isValueInArrayOfObjects(selected, key, value) {
+    if (!Array.isArray(selected)) {
+        return selected[key] === value;
+    }
+    for (var _i = 0, selected_1 = selected; _i < selected_1.length; _i++) {
+        var s = selected_1[_i];
+        if (s && s[key] && s[key] === value) {
+            return true;
+        }
+    }
+    return false;
+}
+exports.isValueInArrayOfObjects = isValueInArrayOfObjects;
+function highlight(str, search, className) {
+    var completedString = str;
+    var regex = new RegExp('(' + search.trim() + ')(?![^<]*>[^<>]*</)', 'i');
+    if (!str.match(regex)) {
+        return str;
+    }
+    var matchStartPosition = str.match(regex).index;
+    var matchEndPosition = matchStartPosition + str.match(regex)[0].toString().length;
+    var originalTextFoundByRegex = str.substring(matchStartPosition, matchEndPosition);
+    completedString = completedString.replace(regex, "<mark class=\"" + className + "\">" + originalTextFoundByRegex + "</mark>");
+    return completedString;
+}
+exports.highlight = highlight;
+function kebabCase(str) {
+    var result = str.replace(/[A-Z\u00C0-\u00D6\u00D8-\u00DE]/g, function (match) { return '-' + match.toLowerCase(); });
+    return (str[0] === str[0].toUpperCase())
+        ? result.substring(1)
+        : result;
+}
+exports.kebabCase = kebabCase;
+(function () {
+    var w = window;
+    if (typeof w.CustomEvent === 'function') {
+        return;
+    }
+    function CustomEvent(event, params) {
+        params = params || { bubbles: false, cancelable: false, detail: undefined };
+        var evt = document.createEvent('CustomEvent');
+        evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail);
+        return evt;
+    }
+    CustomEvent.prototype = w.Event.prototype;
+    w.CustomEvent = CustomEvent;
+})();
+
+
+/***/ }),
+/* 1 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+exports.__esModule = true;
+var Data = (function () {
+    function Data(info) {
+        this.contentOpen = false;
+        this.contentPosition = 'below';
+        this.isOnChangeEnabled = true;
+        this.main = info.main;
+        this.searchValue = '';
+        this.data = [];
+        this.filtered = null;
+        this.parseSelectData();
+        this.setSelectedFromSelect();
+    }
+    Data.prototype.newOption = function (info) {
+        return {
+            id: (info.id ? info.id : String(Math.floor(Math.random() * 100000000))),
+            value: (info.value ? info.value : ''),
+            text: (info.text ? info.text : ''),
+            innerHTML: (info.innerHTML ? info.innerHTML : ''),
+            selected: (info.selected ? info.selected : false),
+            display: (info.display !== undefined ? info.display : true),
+            disabled: (info.disabled ? info.disabled : false),
+            placeholder: (info.placeholder ? info.placeholder : false),
+            "class": (info["class"] ? info["class"] : undefined),
+            data: (info.data ? info.data : {}),
+            mandatory: (info.mandatory ? info.mandatory : false)
+        };
+    };
+    Data.prototype.add = function (data) {
+        this.data.push({
+            id: String(Math.floor(Math.random() * 100000000)),
+            value: data.value,
+            text: data.text,
+            innerHTML: '',
+            selected: false,
+            display: true,
+            disabled: false,
+            placeholder: false,
+            "class": undefined,
+            mandatory: data.mandatory,
+            data: {}
+        });
+    };
+    Data.prototype.parseSelectData = function () {
+        this.data = [];
+        var nodes = this.main.select.element.childNodes;
+        for (var _i = 0, nodes_1 = nodes; _i < nodes_1.length; _i++) {
+            var n = nodes_1[_i];
+            if (n.nodeName === 'OPTGROUP') {
+                var node = n;
+                var optgroup = {
+                    label: node.label,
+                    options: []
+                };
+                var options = n.childNodes;
+                for (var _a = 0, options_1 = options; _a < options_1.length; _a++) {
+                    var o = options_1[_a];
+                    if (o.nodeName === 'OPTION') {
+                        var option = this.pullOptionData(o);
+                        optgroup.options.push(option);
+                        if (option.placeholder && option.text.trim() !== '') {
+                            this.main.config.placeholderText = option.text;
+                        }
+                    }
+                }
+                this.data.push(optgroup);
+            }
+            else if (n.nodeName === 'OPTION') {
+                var option = this.pullOptionData(n);
+                this.data.push(option);
+                if (option.placeholder && option.text.trim() !== '') {
+                    this.main.config.placeholderText = option.text;
+                }
+            }
+        }
+    };
+    Data.prototype.pullOptionData = function (option) {
+        return {
+            id: (option.dataset ? option.dataset.id : false) || String(Math.floor(Math.random() * 100000000)),
+            value: option.value,
+            text: option.text,
+            innerHTML: option.innerHTML,
+            selected: option.selected,
+            disabled: option.disabled,
+            placeholder: option.dataset.placeholder === 'true',
+            "class": option.className,
+            style: option.style.cssText,
+            data: option.dataset,
+            mandatory: (option.dataset ? option.dataset.mandatory === 'true' : false)
+        };
+    };
+    Data.prototype.setSelectedFromSelect = function () {
+        if (this.main.config.isMultiple) {
+            var options = this.main.select.element.options;
+            var newSelected = [];
+            for (var _i = 0, options_2 = options; _i < options_2.length; _i++) {
+                var o = options_2[_i];
+                if (o.selected) {
+                    var newOption = this.getObjectFromData(o.value, 'value');
+                    if (newOption && newOption.id) {
+                        newSelected.push(newOption.id);
+                    }
+                }
+            }
+            this.setSelected(newSelected, 'id');
+        }
+        else {
+            var element = this.main.select.element;
+            if (element.selectedIndex !== -1) {
+                var option = element.options[element.selectedIndex];
+                var value = option.value;
+                this.setSelected(value, 'value');
+            }
+        }
+    };
+    Data.prototype.setSelected = function (value, type) {
+        if (type === void 0) { type = 'id'; }
+        for (var _i = 0, _a = this.data; _i < _a.length; _i++) {
+            var d = _a[_i];
+            if (d.hasOwnProperty('label')) {
+                if (d.hasOwnProperty('options')) {
+                    var options = d.options;
+                    if (options) {
+                        for (var _b = 0, options_3 = options; _b < options_3.length; _b++) {
+                            var o = options_3[_b];
+                            if (o.placeholder) {
+                                continue;
+                            }
+                            o.selected = this.shouldBeSelected(o, value, type);
+                        }
+                    }
+                }
+            }
+            else {
+                d.selected = this.shouldBeSelected(d, value, type);
+            }
+        }
+    };
+    Data.prototype.shouldBeSelected = function (option, value, type) {
+        if (type === void 0) { type = 'id'; }
+        if (Array.isArray(value)) {
+            for (var _i = 0, value_1 = value; _i < value_1.length; _i++) {
+                var v = value_1[_i];
+                if (type in option && String(option[type]) === String(v)) {
+                    return true;
+                }
+            }
+        }
+        else {
+            if (type in option && String(option[type]) === String(value)) {
+                return true;
+            }
+        }
+        return false;
+    };
+    Data.prototype.getSelected = function () {
+        var value = { text: '', placeholder: this.main.config.placeholderText };
+        var values = [];
+        for (var _i = 0, _a = this.data; _i < _a.length; _i++) {
+            var d = _a[_i];
+            if (d.hasOwnProperty('label')) {
+                if (d.hasOwnProperty('options')) {
+                    var options = d.options;
+                    if (options) {
+                        for (var _b = 0, options_4 = options; _b < options_4.length; _b++) {
+                            var o = options_4[_b];
+                            if (o.selected) {
+                                if (!this.main.config.isMultiple) {
+                                    value = o;
+                                }
+                                else {
+                                    values.push(o);
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+            else {
+                if (d.selected) {
+                    if (!this.main.config.isMultiple) {
+                        value = d;
+                    }
+                    else {
+                        values.push(d);
+                    }
+                }
+            }
+        }
+        if (this.main.config.isMultiple) {
+            return values;
+        }
+        return value;
+    };
+    Data.prototype.addToSelected = function (value, type) {
+        if (type === void 0) { type = 'id'; }
+        if (this.main.config.isMultiple) {
+            var values = [];
+            var selected = this.getSelected();
+            if (Array.isArray(selected)) {
+                for (var _i = 0, selected_1 = selected; _i < selected_1.length; _i++) {
+                    var s = selected_1[_i];
+                    values.push(s[type]);
+                }
+            }
+            values.push(value);
+            this.setSelected(values, type);
+        }
+    };
+    Data.prototype.removeFromSelected = function (value, type) {
+        if (type === void 0) { type = 'id'; }
+        if (this.main.config.isMultiple) {
+            var values = [];
+            var selected = this.getSelected();
+            for (var _i = 0, selected_2 = selected; _i < selected_2.length; _i++) {
+                var s = selected_2[_i];
+                if (String(s[type]) !== String(value)) {
+                    values.push(s[type]);
+                }
+            }
+            this.setSelected(values, type);
+        }
+    };
+    Data.prototype.onDataChange = function () {
+        if (this.main.onChange && this.isOnChangeEnabled) {
+            this.main.onChange(JSON.parse(JSON.stringify(this.getSelected())));
+        }
+    };
+    Data.prototype.getObjectFromData = function (value, type) {
+        if (type === void 0) { type = 'id'; }
+        for (var _i = 0, _a = this.data; _i < _a.length; _i++) {
+            var d = _a[_i];
+            if (type in d && String(d[type]) === String(value)) {
+                return d;
+            }
+            if (d.hasOwnProperty('options')) {
+                var optgroupObject = d;
+                if (optgroupObject.options) {
+                    for (var _b = 0, _c = optgroupObject.options; _b < _c.length; _b++) {
+                        var oo = _c[_b];
+                        if (String(oo[type]) === String(value)) {
+                            return oo;
+                        }
+                    }
+                }
+            }
+        }
+        return null;
+    };
+    Data.prototype.search = function (search) {
+        this.searchValue = search;
+        if (search.trim() === '') {
+            this.filtered = null;
+            return;
+        }
+        var searchFilter = this.main.config.searchFilter;
+        var valuesArray = this.data.slice(0);
+        search = search.trim();
+        var filtered = valuesArray.map(function (obj) {
+            if (obj.hasOwnProperty('options')) {
+                var optgroupObj = obj;
+                var options = [];
+                if (optgroupObj.options) {
+                    options = optgroupObj.options.filter(function (opt) {
+                        return searchFilter(opt, search);
+                    });
+                }
+                if (options.length !== 0) {
+                    var optgroup = Object.assign({}, optgroupObj);
+                    optgroup.options = options;
+                    return optgroup;
+                }
+            }
+            if (obj.hasOwnProperty('text')) {
+                var optionObj = obj;
+                if (searchFilter(optionObj, search)) {
+                    return obj;
+                }
+            }
+            return null;
+        });
+        this.filtered = filtered.filter(function (info) { return info; });
+    };
+    return Data;
+}());
+exports.Data = Data;
+function validateData(data) {
+    if (!data) {
+        console.error('Data must be an array of objects');
+        return false;
+    }
+    var isValid = false;
+    var errorCount = 0;
+    for (var _i = 0, data_1 = data; _i < data_1.length; _i++) {
+        var d = data_1[_i];
+        if (d.hasOwnProperty('label')) {
+            if (d.hasOwnProperty('options')) {
+                var optgroup = d;
+                var options = optgroup.options;
+                if (options) {
+                    for (var _a = 0, options_5 = options; _a < options_5.length; _a++) {
+                        var o = options_5[_a];
+                        isValid = validateOption(o);
+                        if (!isValid) {
+                            errorCount++;
+                        }
+                    }
+                }
+            }
+        }
+        else {
+            var option = d;
+            isValid = validateOption(option);
+            if (!isValid) {
+                errorCount++;
+            }
+        }
+    }
+    return errorCount === 0;
+}
+exports.validateData = validateData;
+function validateOption(option) {
+    if (option.text === undefined) {
+        console.error('Data object option must have at least have a text value. Check object: ' + JSON.stringify(option));
+        return false;
+    }
+    return true;
+}
+exports.validateOption = validateOption;
+
+
+/***/ }),
+/* 2 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+exports.__esModule = true;
+var config_1 = __webpack_require__(3);
+var select_1 = __webpack_require__(4);
+var slim_1 = __webpack_require__(5);
+var data_1 = __webpack_require__(1);
+var helper_1 = __webpack_require__(0);
+var SlimSelect = (function () {
+    function SlimSelect(info) {
+        var _this = this;
+        this.ajax = null;
+        this.addable = null;
+        this.beforeOnChange = null;
+        this.onChange = null;
+        this.beforeOpen = null;
+        this.afterOpen = null;
+        this.beforeClose = null;
+        this.afterClose = null;
+        var selectElement = this.validate(info);
+        if (selectElement.dataset.ssid) {
+            this.destroy(selectElement.dataset.ssid);
+        }
+        if (info.ajax) {
+            this.ajax = info.ajax;
+        }
+        if (info.addable) {
+            this.addable = info.addable;
+        }
+        this.config = new config_1.Config({
+            select: selectElement,
+            isAjax: (info.ajax ? true : false),
+            showSearch: info.showSearch,
+            searchPlaceholder: info.searchPlaceholder,
+            searchText: info.searchText,
+            searchingText: info.searchingText,
+            searchFocus: info.searchFocus,
+            searchHighlight: info.searchHighlight,
+            searchFilter: info.searchFilter,
+            closeOnSelect: info.closeOnSelect,
+            showContent: info.showContent,
+            placeholderText: info.placeholder,
+            allowDeselect: info.allowDeselect,
+            allowDeselectOption: info.allowDeselectOption,
+            hideSelectedOption: info.hideSelectedOption,
+            deselectLabel: info.deselectLabel,
+            isEnabled: info.isEnabled,
+            valuesUseText: info.valuesUseText,
+            showOptionTooltips: info.showOptionTooltips,
+            selectByGroup: info.selectByGroup,
+            limit: info.limit,
+            timeoutDelay: info.timeoutDelay,
+            addToBody: info.addToBody
+        });
+        this.select = new select_1.Select({
+            select: selectElement,
+            main: this
+        });
+        this.data = new data_1.Data({ main: this });
+        this.slim = new slim_1.Slim({ main: this });
+        if (this.select.element.parentNode) {
+            this.select.element.parentNode.insertBefore(this.slim.container, this.select.element.nextSibling);
+        }
+        if (info.data) {
+            this.setData(info.data);
+        }
+        else {
+            this.render();
+        }
+        document.addEventListener('click', function (e) {
+            if (e.target && !helper_1.hasClassInTree(e.target, _this.config.id)) {
+                _this.close();
+            }
+        });
+        if (this.config.showContent === 'auto') {
+            window.addEventListener('scroll', helper_1.debounce(function (e) {
+                if (_this.data.contentOpen) {
+                    if (helper_1.putContent(_this.slim.content, _this.data.contentPosition, _this.data.contentOpen) === 'above') {
+                        _this.moveContentAbove();
+                    }
+                    else {
+                        _this.moveContentBelow();
+                    }
+                }
+            }), false);
+        }
+        if (info.beforeOnChange) {
+            this.beforeOnChange = info.beforeOnChange;
+        }
+        if (info.onChange) {
+            this.onChange = info.onChange;
+        }
+        if (info.beforeOpen) {
+            this.beforeOpen = info.beforeOpen;
+        }
+        if (info.afterOpen) {
+            this.afterOpen = info.afterOpen;
+        }
+        if (info.beforeClose) {
+            this.beforeClose = info.beforeClose;
+        }
+        if (info.afterClose) {
+            this.afterClose = info.afterClose;
+        }
+        if (!this.config.isEnabled) {
+            this.disable();
+        }
+    }
+    SlimSelect.prototype.validate = function (info) {
+        var select = (typeof info.select === 'string' ? document.querySelector(info.select) : info.select);
+        if (!select) {
+            throw new Error('Could not find select element');
+        }
+        if (select.tagName !== 'SELECT') {
+            throw new Error('Element isnt of type select');
+        }
+        return select;
+    };
+    SlimSelect.prototype.selected = function () {
+        if (this.config.isMultiple) {
+            var selected = this.data.getSelected();
+            var outputSelected = [];
+            for (var _i = 0, selected_1 = selected; _i < selected_1.length; _i++) {
+                var s = selected_1[_i];
+                outputSelected.push(s.value);
+            }
+            return outputSelected;
+        }
+        else {
+            var selected = this.data.getSelected();
+            return (selected ? selected.value : '');
+        }
+    };
+    SlimSelect.prototype.set = function (value, type, close, render) {
+        if (type === void 0) { type = 'value'; }
+        if (close === void 0) { close = true; }
+        if (render === void 0) { render = true; }
+        if (this.config.isMultiple && !Array.isArray(value)) {
+            this.data.addToSelected(value, type);
+        }
+        else {
+            this.data.setSelected(value, type);
+        }
+        this.select.setValue();
+        this.data.onDataChange();
+        this.render();
+        if (close) {
+            this.close();
+        }
+    };
+    SlimSelect.prototype.setSelected = function (value, type, close, render) {
+        if (type === void 0) { type = 'value'; }
+        if (close === void 0) { close = true; }
+        if (render === void 0) { render = true; }
+        this.set(value, type, close, render);
+    };
+    SlimSelect.prototype.setData = function (data) {
+        var isValid = data_1.validateData(data);
+        if (!isValid) {
+            console.error('Validation problem on: #' + this.select.element.id);
+            return;
+        }
+        var newData = JSON.parse(JSON.stringify(data));
+        var selected = this.data.getSelected();
+        if (this.config.isAjax && selected) {
+            if (this.config.isMultiple) {
+                var reverseSelected = selected.reverse();
+                for (var _i = 0, reverseSelected_1 = reverseSelected; _i < reverseSelected_1.length; _i++) {
+                    var r = reverseSelected_1[_i];
+                    newData.unshift(r);
+                }
+            }
+            else {
+                newData.unshift(this.data.getSelected());
+                newData.unshift({ text: '', placeholder: true });
+            }
+        }
+        this.select.create(newData);
+        this.data.parseSelectData();
+        this.data.setSelectedFromSelect();
+    };
+    SlimSelect.prototype.addData = function (data) {
+        var isValid = data_1.validateData([data]);
+        if (!isValid) {
+            console.error('Validation problem on: #' + this.select.element.id);
+            return;
+        }
+        this.data.add(this.data.newOption(data));
+        this.select.create(this.data.data);
+        this.data.parseSelectData();
+        this.data.setSelectedFromSelect();
+        this.render();
+    };
+    SlimSelect.prototype.open = function () {
+        var _this = this;
+        if (!this.config.isEnabled) {
+            return;
+        }
+        if (this.data.contentOpen) {
+            return;
+        }
+        if (this.beforeOpen) {
+            this.beforeOpen();
+        }
+        if (this.config.isMultiple && this.slim.multiSelected) {
+            this.slim.multiSelected.plus.classList.add('ss-cross');
+        }
+        else if (this.slim.singleSelected) {
+            this.slim.singleSelected.arrowIcon.arrow.classList.remove('arrow-down');
+            this.slim.singleSelected.arrowIcon.arrow.classList.add('arrow-up');
+        }
+        this.slim[(this.config.isMultiple ? 'multiSelected' : 'singleSelected')].container.classList.add((this.data.contentPosition === 'above' ? this.config.openAbove : this.config.openBelow));
+        if (this.config.addToBody) {
+            var containerRect = this.slim.container.getBoundingClientRect();
+            this.slim.content.style.top = (containerRect.top + containerRect.height + window.scrollY) + 'px';
+            this.slim.content.style.left = (containerRect.left + window.scrollX) + 'px';
+            this.slim.content.style.width = containerRect.width + 'px';
+        }
+        this.slim.content.classList.add(this.config.open);
+        if (this.config.showContent.toLowerCase() === 'up') {
+            this.moveContentAbove();
+        }
+        else if (this.config.showContent.toLowerCase() === 'down') {
+            this.moveContentBelow();
+        }
+        else {
+            if (helper_1.putContent(this.slim.content, this.data.contentPosition, this.data.contentOpen) === 'above') {
+                this.moveContentAbove();
+            }
+            else {
+                this.moveContentBelow();
+            }
+        }
+        if (!this.config.isMultiple) {
+            var selected = this.data.getSelected();
+            if (selected) {
+                var selectedId = selected.id;
+                var selectedOption = this.slim.list.querySelector('[data-id="' + selectedId + '"]');
+                if (selectedOption) {
+                    helper_1.ensureElementInView(this.slim.list, selectedOption);
+                }
+            }
+        }
+        setTimeout(function () {
+            _this.data.contentOpen = true;
+            if (_this.config.searchFocus) {
+                _this.slim.search.input.focus();
+            }
+            if (_this.afterOpen) {
+                _this.afterOpen();
+            }
+        }, this.config.timeoutDelay);
+    };
+    SlimSelect.prototype.close = function () {
+        var _this = this;
+        if (!this.data.contentOpen) {
+            return;
+        }
+        if (this.beforeClose) {
+            this.beforeClose();
+        }
+        if (this.config.isMultiple && this.slim.multiSelected) {
+            this.slim.multiSelected.container.classList.remove(this.config.openAbove);
+            this.slim.multiSelected.container.classList.remove(this.config.openBelow);
+            this.slim.multiSelected.plus.classList.remove('ss-cross');
+        }
+        else if (this.slim.singleSelected) {
+            this.slim.singleSelected.container.classList.remove(this.config.openAbove);
+            this.slim.singleSelected.container.classList.remove(this.config.openBelow);
+            this.slim.singleSelected.arrowIcon.arrow.classList.add('arrow-down');
+            this.slim.singleSelected.arrowIcon.arrow.classList.remove('arrow-up');
+        }
+        this.slim.content.classList.remove(this.config.open);
+        this.data.contentOpen = false;
+        this.search('');
+        setTimeout(function () {
+            _this.slim.content.removeAttribute('style');
+            _this.data.contentPosition = 'below';
+            if (_this.config.isMultiple && _this.slim.multiSelected) {
+                _this.slim.multiSelected.container.classList.remove(_this.config.openAbove);
+                _this.slim.multiSelected.container.classList.remove(_this.config.openBelow);
+            }
+            else if (_this.slim.singleSelected) {
+                _this.slim.singleSelected.container.classList.remove(_this.config.openAbove);
+                _this.slim.singleSelected.container.classList.remove(_this.config.openBelow);
+            }
+            _this.slim.search.input.blur();
+            if (_this.afterClose) {
+                _this.afterClose();
+            }
+        }, this.config.timeoutDelay);
+    };
+    SlimSelect.prototype.moveContentAbove = function () {
+        var selectHeight = 0;
+        if (this.config.isMultiple && this.slim.multiSelected) {
+            selectHeight = this.slim.multiSelected.container.offsetHeight;
+        }
+        else if (this.slim.singleSelected) {
+            selectHeight = this.slim.singleSelected.container.offsetHeight;
+        }
+        var contentHeight = this.slim.content.offsetHeight;
+        var height = selectHeight + contentHeight - 1;
+        this.slim.content.style.margin = '-' + height + 'px 0 0 0';
+        this.slim.content.style.height = (height - selectHeight + 1) + 'px';
+        this.slim.content.style.transformOrigin = 'center bottom';
+        this.data.contentPosition = 'above';
+        if (this.config.isMultiple && this.slim.multiSelected) {
+            this.slim.multiSelected.container.classList.remove(this.config.openBelow);
+            this.slim.multiSelected.container.classList.add(this.config.openAbove);
+        }
+        else if (this.slim.singleSelected) {
+            this.slim.singleSelected.container.classList.remove(this.config.openBelow);
+            this.slim.singleSelected.container.classList.add(this.config.openAbove);
+        }
+    };
+    SlimSelect.prototype.moveContentBelow = function () {
+        this.data.contentPosition = 'below';
+        if (this.config.isMultiple && this.slim.multiSelected) {
+            this.slim.multiSelected.container.classList.remove(this.config.openAbove);
+            this.slim.multiSelected.container.classList.add(this.config.openBelow);
+        }
+        else if (this.slim.singleSelected) {
+            this.slim.singleSelected.container.classList.remove(this.config.openAbove);
+            this.slim.singleSelected.container.classList.add(this.config.openBelow);
+        }
+    };
+    SlimSelect.prototype.enable = function () {
+        this.config.isEnabled = true;
+        if (this.config.isMultiple && this.slim.multiSelected) {
+            this.slim.multiSelected.container.classList.remove(this.config.disabled);
+        }
+        else if (this.slim.singleSelected) {
+            this.slim.singleSelected.container.classList.remove(this.config.disabled);
+        }
+        this.select.triggerMutationObserver = false;
+        this.select.element.disabled = false;
+        this.slim.search.input.disabled = false;
+        this.select.triggerMutationObserver = true;
+    };
+    SlimSelect.prototype.disable = function () {
+        this.config.isEnabled = false;
+        if (this.config.isMultiple && this.slim.multiSelected) {
+            this.slim.multiSelected.container.classList.add(this.config.disabled);
+        }
+        else if (this.slim.singleSelected) {
+            this.slim.singleSelected.container.classList.add(this.config.disabled);
+        }
+        this.select.triggerMutationObserver = false;
+        this.select.element.disabled = true;
+        this.slim.search.input.disabled = true;
+        this.select.triggerMutationObserver = true;
+    };
+    SlimSelect.prototype.search = function (value) {
+        if (this.data.searchValue !== value) {
+            this.slim.search.input.value = value;
+            if (this.config.isAjax) {
+                var master_1 = this;
+                this.config.isSearching = true;
+                this.render();
+                if (this.ajax) {
+                    this.ajax(value, function (info) {
+                        master_1.config.isSearching = false;
+                        if (Array.isArray(info)) {
+                            info.unshift({ text: '', placeholder: true });
+                            master_1.setData(info);
+                            master_1.data.search(value);
+                            master_1.render();
+                        }
+                        else if (typeof info === 'string') {
+                            master_1.slim.options(info);
+                        }
+                        else {
+                            master_1.render();
+                        }
+                    });
+                }
+            }
+            else {
+                this.data.search(value);
+                this.render();
+            }
+        }
+    };
+    SlimSelect.prototype.setSearchText = function (text) {
+        this.config.searchText = text;
+    };
+    SlimSelect.prototype.render = function () {
+        if (this.config.isMultiple) {
+            this.slim.values();
+        }
+        else {
+            this.slim.placeholder();
+            this.slim.deselect();
+        }
+        this.slim.options();
+    };
+    SlimSelect.prototype.destroy = function (id) {
+        if (id === void 0) { id = null; }
+        var slim = (id ? document.querySelector('.' + id + '.ss-main') : this.slim.container);
+        var select = (id ? document.querySelector("[data-ssid=" + id + "]") : this.select.element);
+        if (!slim || !select) {
+            return;
+        }
+        select.style.display = '';
+        delete select.dataset.ssid;
+        var el = select;
+        el.slim = null;
+        if (slim.parentElement) {
+            slim.parentElement.removeChild(slim);
+        }
+        if (this.config.addToBody) {
+            var slimContent = (id ? document.querySelector('.' + id + '.ss-content') : this.slim.content);
+            if (!slimContent) {
+                return;
+            }
+            document.body.removeChild(slimContent);
+        }
+    };
+    return SlimSelect;
+}());
+exports["default"] = SlimSelect;
+
+
+/***/ }),
+/* 3 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+exports.__esModule = true;
+var Config = (function () {
+    function Config(info) {
+        this.id = '';
+        this.isMultiple = false;
+        this.isAjax = false;
+        this.isSearching = false;
+        this.showSearch = true;
+        this.searchFocus = true;
+        this.searchHighlight = false;
+        this.closeOnSelect = true;
+        this.showContent = 'auto';
+        this.searchPlaceholder = 'Search';
+        this.searchText = 'No Results';
+        this.searchingText = 'Searching...';
+        this.placeholderText = 'Select Value';
+        this.allowDeselect = false;
+        this.allowDeselectOption = false;
+        this.hideSelectedOption = false;
+        this.deselectLabel = 'x';
+        this.isEnabled = true;
+        this.valuesUseText = false;
+        this.showOptionTooltips = false;
+        this.selectByGroup = false;
+        this.limit = 0;
+        this.timeoutDelay = 200;
+        this.addToBody = false;
+        this.main = 'ss-main';
+        this.singleSelected = 'ss-single-selected';
+        this.arrow = 'ss-arrow';
+        this.multiSelected = 'ss-multi-selected';
+        this.add = 'ss-add';
+        this.plus = 'ss-plus';
+        this.values = 'ss-values';
+        this.value = 'ss-value';
+        this.valueText = 'ss-value-text';
+        this.valueDelete = 'ss-value-delete';
+        this.content = 'ss-content';
+        this.open = 'ss-open';
+        this.openAbove = 'ss-open-above';
+        this.openBelow = 'ss-open-below';
+        this.search = 'ss-search';
+        this.searchHighlighter = 'ss-search-highlight';
+        this.addable = 'ss-addable';
+        this.list = 'ss-list';
+        this.optgroup = 'ss-optgroup';
+        this.optgroupLabel = 'ss-optgroup-label';
+        this.optgroupLabelSelectable = 'ss-optgroup-label-selectable';
+        this.option = 'ss-option';
+        this.optionSelected = 'ss-option-selected';
+        this.highlighted = 'ss-highlighted';
+        this.disabled = 'ss-disabled';
+        this.hide = 'ss-hide';
+        this.id = 'ss-' + Math.floor(Math.random() * 100000);
+        this.style = info.select.style.cssText;
+        this["class"] = info.select.className.split(' ');
+        this.isMultiple = info.select.multiple;
+        this.isAjax = info.isAjax;
+        this.showSearch = (info.showSearch === false ? false : true);
+        this.searchFocus = (info.searchFocus === false ? false : true);
+        this.searchHighlight = (info.searchHighlight === true ? true : false);
+        this.closeOnSelect = (info.closeOnSelect === false ? false : true);
+        if (info.showContent) {
+            this.showContent = info.showContent;
+        }
+        this.isEnabled = (info.isEnabled === false ? false : true);
+        if (info.searchPlaceholder) {
+            this.searchPlaceholder = info.searchPlaceholder;
+        }
+        if (info.searchText) {
+            this.searchText = info.searchText;
+        }
+        if (info.searchingText) {
+            this.searchingText = info.searchingText;
+        }
+        if (info.placeholderText) {
+            this.placeholderText = info.placeholderText;
+        }
+        this.allowDeselect = (info.allowDeselect === true ? true : false);
+        this.allowDeselectOption = (info.allowDeselectOption === true ? true : false);
+        this.hideSelectedOption = (info.hideSelectedOption === true ? true : false);
+        if (info.deselectLabel) {
+            this.deselectLabel = info.deselectLabel;
+        }
+        if (info.valuesUseText) {
+            this.valuesUseText = info.valuesUseText;
+        }
+        if (info.showOptionTooltips) {
+            this.showOptionTooltips = info.showOptionTooltips;
+        }
+        if (info.selectByGroup) {
+            this.selectByGroup = info.selectByGroup;
+        }
+        if (info.limit) {
+            this.limit = info.limit;
+        }
+        if (info.searchFilter) {
+            this.searchFilter = info.searchFilter;
+        }
+        if (info.timeoutDelay != null) {
+            this.timeoutDelay = info.timeoutDelay;
+        }
+        this.addToBody = (info.addToBody === true ? true : false);
+    }
+    Config.prototype.searchFilter = function (opt, search) {
+        return opt.text.toLowerCase().indexOf(search.toLowerCase()) !== -1;
+    };
+    return Config;
+}());
+exports.Config = Config;
+
+
+/***/ }),
+/* 4 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+exports.__esModule = true;
+var helper_1 = __webpack_require__(0);
+var Select = (function () {
+    function Select(info) {
+        this.triggerMutationObserver = true;
+        this.element = info.select;
+        this.main = info.main;
+        if (this.element.disabled) {
+            this.main.config.isEnabled = false;
+        }
+        this.addAttributes();
+        this.addEventListeners();
+        this.mutationObserver = null;
+        this.addMutationObserver();
+        var el = this.element;
+        el.slim = info.main;
+    }
+    Select.prototype.setValue = function () {
+        if (!this.main.data.getSelected()) {
+            return;
+        }
+        if (this.main.config.isMultiple) {
+            var selected = this.main.data.getSelected();
+            var options = this.element.options;
+            for (var _i = 0, options_1 = options; _i < options_1.length; _i++) {
+                var o = options_1[_i];
+                o.selected = false;
+                for (var _a = 0, selected_1 = selected; _a < selected_1.length; _a++) {
+                    var s = selected_1[_a];
+                    if (s.value === o.value) {
+                        o.selected = true;
+                    }
+                }
+            }
+        }
+        else {
+            var selected = this.main.data.getSelected();
+            this.element.value = (selected ? selected.value : '');
+        }
+        this.main.data.isOnChangeEnabled = false;
+        this.element.dispatchEvent(new CustomEvent('change', { bubbles: true }));
+        this.main.data.isOnChangeEnabled = true;
+    };
+    Select.prototype.addAttributes = function () {
+        this.element.tabIndex = -1;
+        this.element.style.display = 'none';
+        this.element.dataset.ssid = this.main.config.id;
+    };
+    Select.prototype.addEventListeners = function () {
+        var _this = this;
+        this.element.addEventListener('change', function (e) {
+            _this.main.data.setSelectedFromSelect();
+            _this.main.render();
+        });
+    };
+    Select.prototype.addMutationObserver = function () {
+        var _this = this;
+        if (this.main.config.isAjax) {
+            return;
+        }
+        this.mutationObserver = new MutationObserver(function (mutations) {
+            if (!_this.triggerMutationObserver) {
+                return;
+            }
+            _this.main.data.parseSelectData();
+            _this.main.data.setSelectedFromSelect();
+            _this.main.render();
+            mutations.forEach(function (mutation) {
+                if (mutation.attributeName === 'class') {
+                    _this.main.slim.updateContainerDivClass(_this.main.slim.container);
+                }
+            });
+        });
+        this.observeMutationObserver();
+    };
+    Select.prototype.observeMutationObserver = function () {
+        if (!this.mutationObserver) {
+            return;
+        }
+        this.mutationObserver.observe(this.element, {
+            attributes: true,
+            childList: true,
+            characterData: true
+        });
+    };
+    Select.prototype.disconnectMutationObserver = function () {
+        if (this.mutationObserver) {
+            this.mutationObserver.disconnect();
+        }
+    };
+    Select.prototype.create = function (data) {
+        this.element.innerHTML = '';
+        for (var _i = 0, data_1 = data; _i < data_1.length; _i++) {
+            var d = data_1[_i];
+            if (d.hasOwnProperty('options')) {
+                var optgroupObject = d;
+                var optgroupEl = document.createElement('optgroup');
+                optgroupEl.label = optgroupObject.label;
+                if (optgroupObject.options) {
+                    for (var _a = 0, _b = optgroupObject.options; _a < _b.length; _a++) {
+                        var oo = _b[_a];
+                        optgroupEl.appendChild(this.createOption(oo));
+                    }
+                }
+                this.element.appendChild(optgroupEl);
+            }
+            else {
+                this.element.appendChild(this.createOption(d));
+            }
+        }
+    };
+    Select.prototype.createOption = function (info) {
+        var optionEl = document.createElement('option');
+        optionEl.value = info.value !== '' ? info.value : info.text;
+        optionEl.innerHTML = info.innerHTML || info.text;
+        if (info.selected) {
+            optionEl.selected = info.selected;
+        }
+        if (info.display === false) {
+            optionEl.style.display = 'none';
+        }
+        if (info.disabled) {
+            optionEl.disabled = true;
+        }
+        if (info.placeholder) {
+            optionEl.setAttribute('data-placeholder', 'true');
+        }
+        if (info.mandatory) {
+            optionEl.setAttribute('data-mandatory', 'true');
+        }
+        if (info["class"]) {
+            info["class"].split(' ').forEach(function (optionClass) {
+                optionEl.classList.add(optionClass);
+            });
+        }
+        if (info.data && typeof info.data === 'object') {
+            Object.keys(info.data).forEach(function (key) {
+                optionEl.setAttribute('data-' + helper_1.kebabCase(key), info.data[key]);
+            });
+        }
+        return optionEl;
+    };
+    return Select;
+}());
+exports.Select = Select;
+
+
+/***/ }),
+/* 5 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+exports.__esModule = true;
+var helper_1 = __webpack_require__(0);
+var data_1 = __webpack_require__(1);
+var Slim = (function () {
+    function Slim(info) {
+        this.main = info.main;
+        this.container = this.containerDiv();
+        this.content = this.contentDiv();
+        this.search = this.searchDiv();
+        this.list = this.listDiv();
+        this.options();
+        this.singleSelected = null;
+        this.multiSelected = null;
+        if (this.main.config.isMultiple) {
+            this.multiSelected = this.multiSelectedDiv();
+            if (this.multiSelected) {
+                this.container.appendChild(this.multiSelected.container);
+            }
+        }
+        else {
+            this.singleSelected = this.singleSelectedDiv();
+            this.container.appendChild(this.singleSelected.container);
+        }
+        if (this.main.config.addToBody) {
+            this.content.classList.add(this.main.config.id);
+            document.body.appendChild(this.content);
+        }
+        else {
+            this.container.appendChild(this.content);
+        }
+        this.content.appendChild(this.search.container);
+        this.content.appendChild(this.list);
+    }
+    Slim.prototype.containerDiv = function () {
+        var container = document.createElement('div');
+        container.style.cssText = this.main.config.style;
+        this.updateContainerDivClass(container);
+        return container;
+    };
+    Slim.prototype.updateContainerDivClass = function (container) {
+        this.main.config["class"] = this.main.select.element.className.split(' ');
+        container.className = '';
+        container.classList.add(this.main.config.id);
+        container.classList.add(this.main.config.main);
+        for (var _i = 0, _a = this.main.config["class"]; _i < _a.length; _i++) {
+            var c = _a[_i];
+            if (c.trim() !== '') {
+                container.classList.add(c);
+            }
+        }
+    };
+    Slim.prototype.singleSelectedDiv = function () {
+        var _this = this;
+        var container = document.createElement('div');
+        container.classList.add(this.main.config.singleSelected);
+        var placeholder = document.createElement('span');
+        placeholder.classList.add('placeholder');
+        container.appendChild(placeholder);
+        var deselect = document.createElement('span');
+        deselect.innerHTML = this.main.config.deselectLabel;
+        deselect.classList.add('ss-deselect');
+        deselect.onclick = function (e) {
+            e.stopPropagation();
+            if (!_this.main.config.isEnabled) {
+                return;
+            }
+            _this.main.set('');
+        };
+        container.appendChild(deselect);
+        var arrowContainer = document.createElement('span');
+        arrowContainer.classList.add(this.main.config.arrow);
+        var arrowIcon = document.createElement('span');
+        arrowIcon.classList.add('arrow-down');
+        arrowContainer.appendChild(arrowIcon);
+        container.appendChild(arrowContainer);
+        container.onclick = function () {
+            if (!_this.main.config.isEnabled) {
+                return;
+            }
+            _this.main.data.contentOpen ? _this.main.close() : _this.main.open();
+        };
+        return {
+            container: container,
+            placeholder: placeholder,
+            deselect: deselect,
+            arrowIcon: {
+                container: arrowContainer,
+                arrow: arrowIcon
+            }
+        };
+    };
+    Slim.prototype.placeholder = function () {
+        var selected = this.main.data.getSelected();
+        if (selected === null || (selected && selected.placeholder)) {
+            var placeholder = document.createElement('span');
+            placeholder.classList.add(this.main.config.disabled);
+            placeholder.innerHTML = this.main.config.placeholderText;
+            if (this.singleSelected) {
+                this.singleSelected.placeholder.innerHTML = placeholder.outerHTML;
+            }
+        }
+        else {
+            var selectedValue = '';
+            if (selected) {
+                selectedValue = selected.innerHTML && this.main.config.valuesUseText !== true ? selected.innerHTML : selected.text;
+            }
+            if (this.singleSelected) {
+                this.singleSelected.placeholder.innerHTML = (selected ? selectedValue : '');
+            }
+        }
+    };
+    Slim.prototype.deselect = function () {
+        if (this.singleSelected) {
+            if (!this.main.config.allowDeselect) {
+                this.singleSelected.deselect.classList.add('ss-hide');
+                return;
+            }
+            if (this.main.selected() === '') {
+                this.singleSelected.deselect.classList.add('ss-hide');
+            }
+            else {
+                this.singleSelected.deselect.classList.remove('ss-hide');
+            }
+        }
+    };
+    Slim.prototype.multiSelectedDiv = function () {
+        var _this = this;
+        var container = document.createElement('div');
+        container.classList.add(this.main.config.multiSelected);
+        var values = document.createElement('div');
+        values.classList.add(this.main.config.values);
+        container.appendChild(values);
+        var add = document.createElement('div');
+        add.classList.add(this.main.config.add);
+        var plus = document.createElement('span');
+        plus.classList.add(this.main.config.plus);
+        plus.onclick = function (e) {
+            if (_this.main.data.contentOpen) {
+                _this.main.close();
+                e.stopPropagation();
+            }
+        };
+        add.appendChild(plus);
+        container.appendChild(add);
+        container.onclick = function (e) {
+            if (!_this.main.config.isEnabled) {
+                return;
+            }
+            var target = e.target;
+            if (!target.classList.contains(_this.main.config.valueDelete)) {
+                _this.main.data.contentOpen ? _this.main.close() : _this.main.open();
+            }
+        };
+        return {
+            container: container,
+            values: values,
+            add: add,
+            plus: plus
+        };
+    };
+    Slim.prototype.values = function () {
+        if (!this.multiSelected) {
+            return;
+        }
+        var currentNodes = this.multiSelected.values.childNodes;
+        var selected = this.main.data.getSelected();
+        var exists;
+        var nodesToRemove = [];
+        for (var _i = 0, currentNodes_1 = currentNodes; _i < currentNodes_1.length; _i++) {
+            var c = currentNodes_1[_i];
+            exists = true;
+            for (var _a = 0, selected_1 = selected; _a < selected_1.length; _a++) {
+                var s = selected_1[_a];
+                if (String(s.id) === String(c.dataset.id)) {
+                    exists = false;
+                }
+            }
+            if (exists) {
+                nodesToRemove.push(c);
+            }
+        }
+        for (var _b = 0, nodesToRemove_1 = nodesToRemove; _b < nodesToRemove_1.length; _b++) {
+            var n = nodesToRemove_1[_b];
+            n.classList.add('ss-out');
+            this.multiSelected.values.removeChild(n);
+        }
+        currentNodes = this.multiSelected.values.childNodes;
+        for (var s = 0; s < selected.length; s++) {
+            exists = false;
+            for (var _c = 0, currentNodes_2 = currentNodes; _c < currentNodes_2.length; _c++) {
+                var c = currentNodes_2[_c];
+                if (String(selected[s].id) === String(c.dataset.id)) {
+                    exists = true;
+                }
+            }
+            if (!exists) {
+                if (currentNodes.length === 0 || !HTMLElement.prototype.insertAdjacentElement) {
+                    this.multiSelected.values.appendChild(this.valueDiv(selected[s]));
+                }
+                else if (s === 0) {
+                    this.multiSelected.values.insertBefore(this.valueDiv(selected[s]), currentNodes[s]);
+                }
+                else {
+                    currentNodes[s - 1].insertAdjacentElement('afterend', this.valueDiv(selected[s]));
+                }
+            }
+        }
+        if (selected.length === 0) {
+            var placeholder = document.createElement('span');
+            placeholder.classList.add(this.main.config.disabled);
+            placeholder.innerHTML = this.main.config.placeholderText;
+            this.multiSelected.values.innerHTML = placeholder.outerHTML;
+        }
+    };
+    Slim.prototype.valueDiv = function (optionObj) {
+        var _this = this;
+        var value = document.createElement('div');
+        value.classList.add(this.main.config.value);
+        value.dataset.id = optionObj.id;
+        var text = document.createElement('span');
+        text.classList.add(this.main.config.valueText);
+        text.innerHTML = (optionObj.innerHTML && this.main.config.valuesUseText !== true ? optionObj.innerHTML : optionObj.text);
+        value.appendChild(text);
+        if (!optionObj.mandatory) {
+            var deleteSpan = document.createElement('span');
+            deleteSpan.classList.add(this.main.config.valueDelete);
+            deleteSpan.innerHTML = this.main.config.deselectLabel;
+            deleteSpan.onclick = function (e) {
+                e.preventDefault();
+                e.stopPropagation();
+                var shouldUpdate = false;
+                if (!_this.main.beforeOnChange) {
+                    shouldUpdate = true;
+                }
+                if (_this.main.beforeOnChange) {
+                    var selected = _this.main.data.getSelected();
+                    var currentValues = JSON.parse(JSON.stringify(selected));
+                    for (var i = 0; i < currentValues.length; i++) {
+                        if (currentValues[i].id === optionObj.id) {
+                            currentValues.splice(i, 1);
+                        }
+                    }
+                    var beforeOnchange = _this.main.beforeOnChange(currentValues);
+                    if (beforeOnchange !== false) {
+                        shouldUpdate = true;
+                    }
+                }
+                if (shouldUpdate) {
+                    _this.main.data.removeFromSelected(optionObj.id, 'id');
+                    _this.main.render();
+                    _this.main.select.setValue();
+                    _this.main.data.onDataChange();
+                }
+            };
+            value.appendChild(deleteSpan);
+        }
+        return value;
+    };
+    Slim.prototype.contentDiv = function () {
+        var container = document.createElement('div');
+        container.classList.add(this.main.config.content);
+        return container;
+    };
+    Slim.prototype.searchDiv = function () {
+        var _this = this;
+        var container = document.createElement('div');
+        var input = document.createElement('input');
+        var addable = document.createElement('div');
+        container.classList.add(this.main.config.search);
+        var searchReturn = {
+            container: container,
+            input: input
+        };
+        if (!this.main.config.showSearch) {
+            container.classList.add(this.main.config.hide);
+            input.readOnly = true;
+        }
+        input.type = 'search';
+        input.placeholder = this.main.config.searchPlaceholder;
+        input.tabIndex = 0;
+        input.setAttribute('aria-label', this.main.config.searchPlaceholder);
+        input.setAttribute('autocapitalize', 'off');
+        input.setAttribute('autocomplete', 'off');
+        input.setAttribute('autocorrect', 'off');
+        input.onclick = function (e) {
+            setTimeout(function () {
+                var target = e.target;
+                if (target.value === '') {
+                    _this.main.search('');
+                }
+            }, 10);
+        };
+        input.onkeydown = function (e) {
+            if (e.key === 'ArrowUp') {
+                _this.main.open();
+                _this.highlightUp();
+                e.preventDefault();
+            }
+            else if (e.key === 'ArrowDown') {
+                _this.main.open();
+                _this.highlightDown();
+                e.preventDefault();
+            }
+            else if (e.key === 'Tab') {
+                if (!_this.main.data.contentOpen) {
+                    setTimeout(function () { _this.main.close(); }, _this.main.config.timeoutDelay);
+                }
+                else {
+                    _this.main.close();
+                }
+            }
+            else if (e.key === 'Enter') {
+                e.preventDefault();
+            }
+        };
+        input.onkeyup = function (e) {
+            var target = e.target;
+            if (e.key === 'Enter') {
+                if (_this.main.addable && e.ctrlKey) {
+                    addable.click();
+                    e.preventDefault();
+                    e.stopPropagation();
+                    return;
+                }
+                var highlighted = _this.list.querySelector('.' + _this.main.config.highlighted);
+                if (highlighted) {
+                    highlighted.click();
+                }
+            }
+            else if (e.key === 'ArrowUp' || e.key === 'ArrowDown') {
+            }
+            else if (e.key === 'Escape') {
+                _this.main.close();
+            }
+            else {
+                if (_this.main.config.showSearch && _this.main.data.contentOpen) {
+                    _this.main.search(target.value);
+                }
+                else {
+                    input.value = '';
+                }
+            }
+            e.preventDefault();
+            e.stopPropagation();
+        };
+        input.onfocus = function () { _this.main.open(); };
+        container.appendChild(input);
+        if (this.main.addable) {
+            addable.classList.add(this.main.config.addable);
+            addable.innerHTML = '+';
+            addable.onclick = function (e) {
+                if (_this.main.addable) {
+                    e.preventDefault();
+                    e.stopPropagation();
+                    var inputValue = _this.search.input.value;
+                    if (inputValue.trim() === '') {
+                        _this.search.input.focus();
+                        return;
+                    }
+                    var addableValue = _this.main.addable(inputValue);
+                    var addableValueStr_1 = '';
+                    if (!addableValue) {
+                        return;
+                    }
+                    if (typeof addableValue === 'object') {
+                        var validValue = data_1.validateOption(addableValue);
+                        if (validValue) {
+                            _this.main.addData(addableValue);
+                            addableValueStr_1 = (addableValue.value ? addableValue.value : addableValue.text);
+                        }
+                    }
+                    else {
+                        _this.main.addData(_this.main.data.newOption({
+                            text: addableValue,
+                            value: addableValue
+                        }));
+                        addableValueStr_1 = addableValue;
+                    }
+                    _this.main.search('');
+                    setTimeout(function () {
+                        _this.main.set(addableValueStr_1, 'value', false, false);
+                    }, 100);
+                    if (_this.main.config.closeOnSelect) {
+                        setTimeout(function () {
+                            _this.main.close();
+                        }, 100);
+                    }
+                }
+            };
+            container.appendChild(addable);
+            searchReturn.addable = addable;
+        }
+        return searchReturn;
+    };
+    Slim.prototype.highlightUp = function () {
+        var highlighted = this.list.querySelector('.' + this.main.config.highlighted);
+        var prev = null;
+        if (highlighted) {
+            prev = highlighted.previousSibling;
+            while (prev !== null) {
+                if (prev.classList.contains(this.main.config.disabled)) {
+                    prev = prev.previousSibling;
+                    continue;
+                }
+                else {
+                    break;
+                }
+            }
+        }
+        else {
+            var allOptions = this.list.querySelectorAll('.' + this.main.config.option + ':not(.' + this.main.config.disabled + ')');
+            prev = allOptions[allOptions.length - 1];
+        }
+        if (prev && prev.classList.contains(this.main.config.optgroupLabel)) {
+            prev = null;
+        }
+        if (prev === null) {
+            var parent_1 = highlighted.parentNode;
+            if (parent_1.classList.contains(this.main.config.optgroup)) {
+                if (parent_1.previousSibling) {
+                    var prevNodes = parent_1.previousSibling.querySelectorAll('.' + this.main.config.option + ':not(.' + this.main.config.disabled + ')');
+                    if (prevNodes.length) {
+                        prev = prevNodes[prevNodes.length - 1];
+                    }
+                }
+            }
+        }
+        if (prev) {
+            if (highlighted) {
+                highlighted.classList.remove(this.main.config.highlighted);
+            }
+            prev.classList.add(this.main.config.highlighted);
+            helper_1.ensureElementInView(this.list, prev);
+        }
+    };
+    Slim.prototype.highlightDown = function () {
+        var highlighted = this.list.querySelector('.' + this.main.config.highlighted);
+        var next = null;
+        if (highlighted) {
+            next = highlighted.nextSibling;
+            while (next !== null) {
+                if (next.classList.contains(this.main.config.disabled)) {
+                    next = next.nextSibling;
+                    continue;
+                }
+                else {
+                    break;
+                }
+            }
+        }
+        else {
+            next = this.list.querySelector('.' + this.main.config.option + ':not(.' + this.main.config.disabled + ')');
+        }
+        if (next === null && highlighted !== null) {
+            var parent_2 = highlighted.parentNode;
+            if (parent_2.classList.contains(this.main.config.optgroup)) {
+                if (parent_2.nextSibling) {
+                    var sibling = parent_2.nextSibling;
+                    next = sibling.querySelector('.' + this.main.config.option + ':not(.' + this.main.config.disabled + ')');
+                }
+            }
+        }
+        if (next) {
+            if (highlighted) {
+                highlighted.classList.remove(this.main.config.highlighted);
+            }
+            next.classList.add(this.main.config.highlighted);
+            helper_1.ensureElementInView(this.list, next);
+        }
+    };
+    Slim.prototype.listDiv = function () {
+        var list = document.createElement('div');
+        list.classList.add(this.main.config.list);
+        return list;
+    };
+    Slim.prototype.options = function (content) {
+        if (content === void 0) { content = ''; }
+        var data = this.main.data.filtered || this.main.data.data;
+        this.list.innerHTML = '';
+        if (content !== '') {
+            var searching = document.createElement('div');
+            searching.classList.add(this.main.config.option);
+            searching.classList.add(this.main.config.disabled);
+            searching.innerHTML = content;
+            this.list.appendChild(searching);
+            return;
+        }
+        if (this.main.config.isAjax && this.main.config.isSearching) {
+            var searching = document.createElement('div');
+            searching.classList.add(this.main.config.option);
+            searching.classList.add(this.main.config.disabled);
+            searching.innerHTML = this.main.config.searchingText;
+            this.list.appendChild(searching);
+            return;
+        }
+        if (data.length === 0) {
+            var noResults = document.createElement('div');
+            noResults.classList.add(this.main.config.option);
+            noResults.classList.add(this.main.config.disabled);
+            noResults.innerHTML = this.main.config.searchText;
+            this.list.appendChild(noResults);
+            return;
+        }
+        var _loop_1 = function (d) {
+            if (d.hasOwnProperty('label')) {
+                var item = d;
+                var optgroupEl_1 = document.createElement('div');
+                optgroupEl_1.classList.add(this_1.main.config.optgroup);
+                var optgroupLabel = document.createElement('div');
+                optgroupLabel.classList.add(this_1.main.config.optgroupLabel);
+                if (this_1.main.config.selectByGroup && this_1.main.config.isMultiple) {
+                    optgroupLabel.classList.add(this_1.main.config.optgroupLabelSelectable);
+                }
+                optgroupLabel.innerHTML = item.label;
+                optgroupEl_1.appendChild(optgroupLabel);
+                var options = item.options;
+                if (options) {
+                    for (var _i = 0, options_1 = options; _i < options_1.length; _i++) {
+                        var o = options_1[_i];
+                        optgroupEl_1.appendChild(this_1.option(o));
+                    }
+                    if (this_1.main.config.selectByGroup && this_1.main.config.isMultiple) {
+                        var master_1 = this_1;
+                        optgroupLabel.addEventListener('click', function (e) {
+                            e.preventDefault();
+                            e.stopPropagation();
+                            for (var _i = 0, _a = optgroupEl_1.children; _i < _a.length; _i++) {
+                                var childEl = _a[_i];
+                                if (childEl.className.indexOf(master_1.main.config.option) !== -1) {
+                                    childEl.click();
+                                }
+                            }
+                        });
+                    }
+                }
+                this_1.list.appendChild(optgroupEl_1);
+            }
+            else {
+                this_1.list.appendChild(this_1.option(d));
+            }
+        };
+        var this_1 = this;
+        for (var _i = 0, data_2 = data; _i < data_2.length; _i++) {
+            var d = data_2[_i];
+            _loop_1(d);
+        }
+    };
+    Slim.prototype.option = function (data) {
+        if (data.placeholder) {
+            var placeholder = document.createElement('div');
+            placeholder.classList.add(this.main.config.option);
+            placeholder.classList.add(this.main.config.hide);
+            return placeholder;
+        }
+        var optionEl = document.createElement('div');
+        optionEl.classList.add(this.main.config.option);
+        if (data["class"]) {
+            data["class"].split(' ').forEach(function (dataClass) {
+                optionEl.classList.add(dataClass);
+            });
+        }
+        if (data.style) {
+            optionEl.style.cssText = data.style;
+        }
+        var selected = this.main.data.getSelected();
+        optionEl.dataset.id = data.id;
+        if (this.main.config.searchHighlight && this.main.slim && data.innerHTML && this.main.slim.search.input.value.trim() !== '') {
+            optionEl.innerHTML = helper_1.highlight(data.innerHTML, this.main.slim.search.input.value, this.main.config.searchHighlighter);
+        }
+        else if (data.innerHTML) {
+            optionEl.innerHTML = data.innerHTML;
+        }
+        if (this.main.config.showOptionTooltips && optionEl.textContent) {
+            optionEl.setAttribute('title', optionEl.textContent);
+        }
+        var master = this;
+        optionEl.addEventListener('click', function (e) {
+            e.preventDefault();
+            e.stopPropagation();
+            var element = this;
+            var elementID = element.dataset.id;
+            if (data.selected === true && master.main.config.allowDeselectOption) {
+                var shouldUpdate = false;
+                if (!master.main.beforeOnChange || !master.main.config.isMultiple) {
+                    shouldUpdate = true;
+                }
+                if (master.main.beforeOnChange && master.main.config.isMultiple) {
+                    var selectedValues = master.main.data.getSelected();
+                    var currentValues = JSON.parse(JSON.stringify(selectedValues));
+                    for (var i = 0; i < currentValues.length; i++) {
+                        if (currentValues[i].id === elementID) {
+                            currentValues.splice(i, 1);
+                        }
+                    }
+                    var beforeOnchange = master.main.beforeOnChange(currentValues);
+                    if (beforeOnchange !== false) {
+                        shouldUpdate = true;
+                    }
+                }
+                if (shouldUpdate) {
+                    if (master.main.config.isMultiple) {
+                        master.main.data.removeFromSelected(elementID, 'id');
+                        master.main.render();
+                        master.main.select.setValue();
+                        master.main.data.onDataChange();
+                    }
+                    else {
+                        master.main.set('');
+                    }
+                }
+            }
+            else {
+                if (data.disabled || data.selected) {
+                    return;
+                }
+                if (master.main.config.limit && Array.isArray(selected) && master.main.config.limit <= selected.length) {
+                    return;
+                }
+                if (master.main.beforeOnChange) {
+                    var value = void 0;
+                    var objectInfo = JSON.parse(JSON.stringify(master.main.data.getObjectFromData(elementID)));
+                    objectInfo.selected = true;
+                    if (master.main.config.isMultiple) {
+                        value = JSON.parse(JSON.stringify(selected));
+                        value.push(objectInfo);
+                    }
+                    else {
+                        value = JSON.parse(JSON.stringify(objectInfo));
+                    }
+                    var beforeOnchange = master.main.beforeOnChange(value);
+                    if (beforeOnchange !== false) {
+                        master.main.set(elementID, 'id', master.main.config.closeOnSelect);
+                    }
+                }
+                else {
+                    master.main.set(elementID, 'id', master.main.config.closeOnSelect);
+                }
+            }
+        });
+        var isSelected = selected && helper_1.isValueInArrayOfObjects(selected, 'id', data.id);
+        if (data.disabled || isSelected) {
+            optionEl.onclick = null;
+            if (!master.main.config.allowDeselectOption) {
+                optionEl.classList.add(this.main.config.disabled);
+            }
+            if (master.main.config.hideSelectedOption) {
+                optionEl.classList.add(this.main.config.hide);
+            }
+        }
+        if (isSelected) {
+            optionEl.classList.add(this.main.config.optionSelected);
+        }
+        else {
+            optionEl.classList.remove(this.main.config.optionSelected);
+        }
+        return optionEl;
+    };
+    return Slim;
+}());
+exports.Slim = Slim;
+
+
+/***/ })
+/******/ ])["default"];
+});
\ No newline at end of file
diff --git a/website/js/vendor/slimselect/slimselect.min.css b/website/js/vendor/slimselect/slimselect.min.css
new file mode 100644 (file)
index 0000000..753635a
--- /dev/null
@@ -0,0 +1 @@
+.ss-main{position:relative;display:inline-block;user-select:none;color:#666;width:100%}.ss-main .ss-single-selected{display:flex;cursor:pointer;width:100%;height:30px;padding:6px;border:1px solid #dcdee2;border-radius:4px;background-color:#fff;outline:0;box-sizing:border-box;transition:background-color .2s}.ss-main .ss-single-selected.ss-disabled{background-color:#dcdee2;cursor:not-allowed}.ss-main .ss-single-selected.ss-open-above{border-top-left-radius:0;border-top-right-radius:0}.ss-main .ss-single-selected.ss-open-below{border-bottom-left-radius:0;border-bottom-right-radius:0}.ss-main .ss-single-selected .placeholder{display:flex;flex:1 1 100%;align-items:center;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;text-align:left;width:calc(100% - 30px);line-height:1em;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.ss-main .ss-single-selected .placeholder *{display:flex;align-items:center;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;width:auto}.ss-main .ss-single-selected .placeholder .ss-disabled{color:#dedede}.ss-main .ss-single-selected .ss-deselect{display:flex;align-items:center;justify-content:flex-end;flex:0 1 auto;margin:0 6px 0 6px;font-weight:700}.ss-main .ss-single-selected .ss-deselect.ss-hide{display:none}.ss-main .ss-single-selected .ss-arrow{display:flex;align-items:center;justify-content:flex-end;flex:0 1 auto;margin:0 6px 0 6px}.ss-main .ss-single-selected .ss-arrow span{border:solid #666;border-width:0 2px 2px 0;display:inline-block;padding:3px;transition:transform .2s,margin .2s}.ss-main .ss-single-selected .ss-arrow span.arrow-up{transform:rotate(-135deg);margin:3px 0 0 0}.ss-main .ss-single-selected .ss-arrow span.arrow-down{transform:rotate(45deg);margin:-3px 0 0 0}.ss-main .ss-multi-selected{display:flex;flex-direction:row;cursor:pointer;min-height:30px;width:100%;padding:0 0 0 3px;border:1px solid #dcdee2;border-radius:4px;background-color:#fff;outline:0;box-sizing:border-box;transition:background-color .2s}.ss-main .ss-multi-selected.ss-disabled{background-color:#dcdee2;cursor:not-allowed}.ss-main .ss-multi-selected.ss-disabled .ss-values .ss-disabled{color:#666}.ss-main .ss-multi-selected.ss-disabled .ss-values .ss-value .ss-value-delete{cursor:not-allowed}.ss-main .ss-multi-selected.ss-open-above{border-top-left-radius:0;border-top-right-radius:0}.ss-main .ss-multi-selected.ss-open-below{border-bottom-left-radius:0;border-bottom-right-radius:0}.ss-main .ss-multi-selected .ss-values{display:flex;flex-wrap:wrap;justify-content:flex-start;flex:1 1 100%;width:calc(100% - 30px)}.ss-main .ss-multi-selected .ss-values .ss-disabled{display:flex;padding:4px 5px;margin:2px 0;line-height:1em;align-items:center;width:100%;color:#dedede;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}@keyframes scaleIn{0%{transform:scale(0);opacity:0}100%{transform:scale(1);opacity:1}}@keyframes scaleOut{0%{transform:scale(1);opacity:1}100%{transform:scale(0);opacity:0}}.ss-main .ss-multi-selected .ss-values .ss-value{display:flex;user-select:none;align-items:center;font-size:12px;padding:3px 5px;margin:3px 5px 3px 0;color:#fff;background-color:#5897fb;border-radius:4px;animation-name:scaleIn;animation-duration:.2s;animation-timing-function:ease-out;animation-fill-mode:both}.ss-main .ss-multi-selected .ss-values .ss-value.ss-out{animation-name:scaleOut;animation-duration:.2s;animation-timing-function:ease-out}.ss-main .ss-multi-selected .ss-values .ss-value .ss-value-delete{margin:0 0 0 5px;cursor:pointer}.ss-main .ss-multi-selected .ss-add{display:flex;flex:0 1 3px;margin:9px 12px 0 5px}.ss-main .ss-multi-selected .ss-add .ss-plus{display:flex;justify-content:center;align-items:center;background:#666;position:relative;height:10px;width:2px;transition:transform .2s}.ss-main .ss-multi-selected .ss-add .ss-plus:after{background:#666;content:"";position:absolute;height:2px;width:10px;left:-4px;top:4px}.ss-main .ss-multi-selected .ss-add .ss-plus.ss-cross{transform:rotate(45deg)}.ss-content{position:absolute;width:100%;margin:-1px 0 0 0;box-sizing:border-box;border:solid 1px #dcdee2;z-index:1010;background-color:#fff;transform-origin:center top;transition:transform .2s,opacity .2s;opacity:0;transform:scaleY(0)}.ss-content.ss-open{display:block;opacity:1;transform:scaleY(1)}.ss-content .ss-search{display:flex;flex-direction:row;padding:8px 8px 6px 8px}.ss-content .ss-search.ss-hide{height:0;opacity:0;padding:0;margin:0}.ss-content .ss-search.ss-hide input{height:0;opacity:0;padding:0;margin:0}.ss-content .ss-search input{display:inline-flex;font-size:inherit;line-height:inherit;flex:1 1 auto;width:100%;min-width:0;height:30px;padding:6px 8px;margin:0;border:1px solid #dcdee2;border-radius:4px;background-color:#fff;outline:0;text-align:left;box-sizing:border-box;-webkit-box-sizing:border-box;-webkit-appearance:textfield}.ss-content .ss-search input::placeholder{color:#8a8a8a;vertical-align:middle}.ss-content .ss-search input:focus{box-shadow:0 0 5px #5897fb}.ss-content .ss-search .ss-addable{display:inline-flex;justify-content:center;align-items:center;cursor:pointer;font-size:22px;font-weight:700;flex:0 0 30px;height:30px;margin:0 0 0 8px;border:1px solid #dcdee2;border-radius:4px;box-sizing:border-box}.ss-content .ss-addable{padding-top:0}.ss-content .ss-list{max-height:200px;overflow-x:hidden;overflow-y:auto;text-align:left}.ss-content .ss-list .ss-optgroup .ss-optgroup-label{padding:6px 10px 6px 10px;font-weight:700}.ss-content .ss-list .ss-optgroup .ss-option{padding:6px 6px 6px 25px}.ss-content .ss-list .ss-optgroup-label-selectable{cursor:pointer}.ss-content .ss-list .ss-optgroup-label-selectable:hover{color:#fff;background-color:#5897fb}.ss-content .ss-list .ss-option{padding:6px 10px 6px 10px;cursor:pointer;user-select:none}.ss-content .ss-list .ss-option *{display:inline-block}.ss-content .ss-list .ss-option.ss-highlighted,.ss-content .ss-list .ss-option:hover{color:#fff;background-color:#5897fb}.ss-content .ss-list .ss-option.ss-disabled{cursor:not-allowed;color:#dedede;background-color:#fff}.ss-content .ss-list .ss-option:not(.ss-disabled).ss-option-selected{color:#666;background-color:rgba(88,151,251,.1)}.ss-content .ss-list .ss-option.ss-hide{display:none}.ss-content .ss-list .ss-option .ss-search-highlight{background-color:#fffb8c}
\ No newline at end of file
diff --git a/website/js/vendor/slimselect/slimselect.min.js b/website/js/vendor/slimselect/slimselect.min.js
new file mode 100644 (file)
index 0000000..8638634
--- /dev/null
@@ -0,0 +1 @@
+!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.SlimSelect=t():e.SlimSelect=t()}(window,function(){return s={},n.m=i=[function(e,t,i){"use strict";function s(e,t){t=t||{bubbles:!1,cancelable:!1,detail:void 0};var i=document.createEvent("CustomEvent");return i.initCustomEvent(e,t.bubbles,t.cancelable,t.detail),i}var n;t.__esModule=!0,t.hasClassInTree=function(e,t){function s(e,t){return t&&e&&e.classList&&e.classList.contains(t)?e:null}return s(e,t)||function e(t,i){return t&&t!==document?s(t,i)?t:e(t.parentNode,i):null}(e,t)},t.ensureElementInView=function(e,t){var i=e.scrollTop+e.offsetTop,s=i+e.clientHeight,n=t.offsetTop,a=n+t.clientHeight;n<i?e.scrollTop-=i-n:s<a&&(e.scrollTop+=a-s)},t.putContent=function(e,t,i){var s=e.offsetHeight,n=e.getBoundingClientRect(),a=i?n.top:n.top-s,o=i?n.bottom:n.bottom+s;return a<=0?"below":o>=window.innerHeight?"above":i?t:"below"},t.debounce=function(n,a,o){var l;return void 0===a&&(a=100),void 0===o&&(o=!1),function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];var i=self,s=o&&!l;clearTimeout(l),l=setTimeout(function(){l=null,o||n.apply(i,e)},a),s&&n.apply(i,e)}},t.isValueInArrayOfObjects=function(e,t,i){if(!Array.isArray(e))return e[t]===i;for(var s=0,n=e;s<n.length;s++){var a=n[s];if(a&&a[t]&&a[t]===i)return!0}return!1},t.highlight=function(e,t,i){var s=e,n=new RegExp("("+t.trim()+")(?![^<]*>[^<>]*</)","i");if(!e.match(n))return e;var a=e.match(n).index,o=a+e.match(n)[0].toString().length,l=e.substring(a,o);return s=s.replace(n,'<mark class="'+i+'">'+l+"</mark>")},t.kebabCase=function(e){var t=e.replace(/[A-Z\u00C0-\u00D6\u00D8-\u00DE]/g,function(e){return"-"+e.toLowerCase()});return e[0]===e[0].toUpperCase()?t.substring(1):t},"function"!=typeof(n=window).CustomEvent&&(s.prototype=n.Event.prototype,n.CustomEvent=s)},function(e,t,i){"use strict";t.__esModule=!0;var s=(n.prototype.newOption=function(e){return{id:e.id?e.id:String(Math.floor(1e8*Math.random())),value:e.value?e.value:"",text:e.text?e.text:"",innerHTML:e.innerHTML?e.innerHTML:"",selected:!!e.selected&&e.selected,display:void 0===e.display||e.display,disabled:!!e.disabled&&e.disabled,placeholder:!!e.placeholder&&e.placeholder,class:e.class?e.class:void 0,data:e.data?e.data:{},mandatory:!!e.mandatory&&e.mandatory}},n.prototype.add=function(e){this.data.push({id:String(Math.floor(1e8*Math.random())),value:e.value,text:e.text,innerHTML:"",selected:!1,display:!0,disabled:!1,placeholder:!1,class:void 0,mandatory:e.mandatory,data:{}})},n.prototype.parseSelectData=function(){this.data=[];for(var e=0,t=this.main.select.element.childNodes;e<t.length;e++){var i=t[e];if("OPTGROUP"===i.nodeName){for(var s={label:i.label,options:[]},n=0,a=i.childNodes;n<a.length;n++){var o=a[n];if("OPTION"===o.nodeName){var l=this.pullOptionData(o);s.options.push(l),l.placeholder&&""!==l.text.trim()&&(this.main.config.placeholderText=l.text)}}this.data.push(s)}else"OPTION"===i.nodeName&&(l=this.pullOptionData(i),this.data.push(l),l.placeholder&&""!==l.text.trim()&&(this.main.config.placeholderText=l.text))}},n.prototype.pullOptionData=function(e){return{id:!!e.dataset&&e.dataset.id||String(Math.floor(1e8*Math.random())),value:e.value,text:e.text,innerHTML:e.innerHTML,selected:e.selected,disabled:e.disabled,placeholder:"true"===e.dataset.placeholder,class:e.className,style:e.style.cssText,data:e.dataset,mandatory:!!e.dataset&&"true"===e.dataset.mandatory}},n.prototype.setSelectedFromSelect=function(){if(this.main.config.isMultiple){for(var e=[],t=0,i=this.main.select.element.options;t<i.length;t++){var s=i[t];if(s.selected){var n=this.getObjectFromData(s.value,"value");n&&n.id&&e.push(n.id)}}this.setSelected(e,"id")}else{var a=this.main.select.element;if(-1!==a.selectedIndex){var o=a.options[a.selectedIndex].value;this.setSelected(o,"value")}}},n.prototype.setSelected=function(e,t){void 0===t&&(t="id");for(var i=0,s=this.data;i<s.length;i++){var n=s[i];if(n.hasOwnProperty("label")){if(n.hasOwnProperty("options")){var a=n.options;if(a)for(var o=0,l=a;o<l.length;o++){var r=l[o];r.placeholder||(r.selected=this.shouldBeSelected(r,e,t))}}}else n.selected=this.shouldBeSelected(n,e,t)}},n.prototype.shouldBeSelected=function(e,t,i){if(void 0===i&&(i="id"),Array.isArray(t))for(var s=0,n=t;s<n.length;s++){var a=n[s];if(i in e&&String(e[i])===String(a))return!0}else if(i in e&&String(e[i])===String(t))return!0;return!1},n.prototype.getSelected=function(){for(var e={text:"",placeholder:this.main.config.placeholderText},t=[],i=0,s=this.data;i<s.length;i++){var n=s[i];if(n.hasOwnProperty("label")){if(n.hasOwnProperty("options")){var a=n.options;if(a)for(var o=0,l=a;o<l.length;o++){var r=l[o];r.selected&&(this.main.config.isMultiple?t.push(r):e=r)}}}else n.selected&&(this.main.config.isMultiple?t.push(n):e=n)}return this.main.config.isMultiple?t:e},n.prototype.addToSelected=function(e,t){if(void 0===t&&(t="id"),this.main.config.isMultiple){var i=[],s=this.getSelected();if(Array.isArray(s))for(var n=0,a=s;n<a.length;n++){var o=a[n];i.push(o[t])}i.push(e),this.setSelected(i,t)}},n.prototype.removeFromSelected=function(e,t){if(void 0===t&&(t="id"),this.main.config.isMultiple){for(var i=[],s=0,n=this.getSelected();s<n.length;s++){var a=n[s];String(a[t])!==String(e)&&i.push(a[t])}this.setSelected(i,t)}},n.prototype.onDataChange=function(){this.main.onChange&&this.isOnChangeEnabled&&this.main.onChange(JSON.parse(JSON.stringify(this.getSelected())))},n.prototype.getObjectFromData=function(e,t){void 0===t&&(t="id");for(var i=0,s=this.data;i<s.length;i++){var n=s[i];if(t in n&&String(n[t])===String(e))return n;if(n.hasOwnProperty("options")&&n.options)for(var a=0,o=n.options;a<o.length;a++){var l=o[a];if(String(l[t])===String(e))return l}}return null},n.prototype.search=function(n){if(""!==(this.searchValue=n).trim()){var a=this.main.config.searchFilter,e=this.data.slice(0);n=n.trim();var t=e.map(function(e){if(e.hasOwnProperty("options")){var t=e,i=[];if(t.options&&(i=t.options.filter(function(e){return a(e,n)})),0!==i.length){var s=Object.assign({},t);return s.options=i,s}}return e.hasOwnProperty("text")&&a(e,n)?e:null});this.filtered=t.filter(function(e){return e})}else this.filtered=null},n);function n(e){this.contentOpen=!1,this.contentPosition="below",this.isOnChangeEnabled=!0,this.main=e.main,this.searchValue="",this.data=[],this.filtered=null,this.parseSelectData(),this.setSelectedFromSelect()}function r(e){return void 0!==e.text||(console.error("Data object option must have at least have a text value. Check object: "+JSON.stringify(e)),!1)}t.Data=s,t.validateData=function(e){if(!e)return console.error("Data must be an array of objects"),!1;for(var t=0,i=0,s=e;i<s.length;i++){var n=s[i];if(n.hasOwnProperty("label")){if(n.hasOwnProperty("options")){var a=n.options;if(a)for(var o=0,l=a;o<l.length;o++){r(l[o])||t++}}}else r(n)||t++}return 0===t},t.validateOption=r},function(e,t,i){"use strict";t.__esModule=!0;var s=i(3),n=i(4),a=i(5),o=i(1),l=i(0),r=(c.prototype.validate=function(e){var t="string"==typeof e.select?document.querySelector(e.select):e.select;if(!t)throw new Error("Could not find select element");if("SELECT"!==t.tagName)throw new Error("Element isnt of type select");return t},c.prototype.selected=function(){if(this.config.isMultiple){for(var e=[],t=0,i=n=this.data.getSelected();t<i.length;t++){var s=i[t];e.push(s.value)}return e}var n;return(n=this.data.getSelected())?n.value:""},c.prototype.set=function(e,t,i,s){void 0===t&&(t="value"),void 0===i&&(i=!0),void 0===s&&(s=!0),this.config.isMultiple&&!Array.isArray(e)?this.data.addToSelected(e,t):this.data.setSelected(e,t),this.select.setValue(),this.data.onDataChange(),this.render(),i&&this.close()},c.prototype.setSelected=function(e,t,i,s){void 0===t&&(t="value"),void 0===i&&(i=!0),void 0===s&&(s=!0),this.set(e,t,i,s)},c.prototype.setData=function(e){if(o.validateData(e)){var t=JSON.parse(JSON.stringify(e)),i=this.data.getSelected();if(this.config.isAjax&&i)if(this.config.isMultiple)for(var s=0,n=i.reverse();s<n.length;s++){var a=n[s];t.unshift(a)}else t.unshift(this.data.getSelected()),t.unshift({text:"",placeholder:!0});this.select.create(t),this.data.parseSelectData(),this.data.setSelectedFromSelect()}else console.error("Validation problem on: #"+this.select.element.id)},c.prototype.addData=function(e){o.validateData([e])?(this.data.add(this.data.newOption(e)),this.select.create(this.data.data),this.data.parseSelectData(),this.data.setSelectedFromSelect(),this.render()):console.error("Validation problem on: #"+this.select.element.id)},c.prototype.open=function(){var e=this;if(this.config.isEnabled&&!this.data.contentOpen){if(this.beforeOpen&&this.beforeOpen(),this.config.isMultiple&&this.slim.multiSelected?this.slim.multiSelected.plus.classList.add("ss-cross"):this.slim.singleSelected&&(this.slim.singleSelected.arrowIcon.arrow.classList.remove("arrow-down"),this.slim.singleSelected.arrowIcon.arrow.classList.add("arrow-up")),this.slim[this.config.isMultiple?"multiSelected":"singleSelected"].container.classList.add("above"===this.data.contentPosition?this.config.openAbove:this.config.openBelow),this.config.addToBody){var t=this.slim.container.getBoundingClientRect();this.slim.content.style.top=t.top+t.height+window.scrollY+"px",this.slim.content.style.left=t.left+window.scrollX+"px",this.slim.content.style.width=t.width+"px"}if(this.slim.content.classList.add(this.config.open),"up"===this.config.showContent.toLowerCase()||"down"!==this.config.showContent.toLowerCase()&&"above"===l.putContent(this.slim.content,this.data.contentPosition,this.data.contentOpen)?this.moveContentAbove():this.moveContentBelow(),!this.config.isMultiple){var i=this.data.getSelected();if(i){var s=i.id,n=this.slim.list.querySelector('[data-id="'+s+'"]');n&&l.ensureElementInView(this.slim.list,n)}}setTimeout(function(){e.data.contentOpen=!0,e.config.searchFocus&&e.slim.search.input.focus(),e.afterOpen&&e.afterOpen()},this.config.timeoutDelay)}},c.prototype.close=function(){var e=this;this.data.contentOpen&&(this.beforeClose&&this.beforeClose(),this.config.isMultiple&&this.slim.multiSelected?(this.slim.multiSelected.container.classList.remove(this.config.openAbove),this.slim.multiSelected.container.classList.remove(this.config.openBelow),this.slim.multiSelected.plus.classList.remove("ss-cross")):this.slim.singleSelected&&(this.slim.singleSelected.container.classList.remove(this.config.openAbove),this.slim.singleSelected.container.classList.remove(this.config.openBelow),this.slim.singleSelected.arrowIcon.arrow.classList.add("arrow-down"),this.slim.singleSelected.arrowIcon.arrow.classList.remove("arrow-up")),this.slim.content.classList.remove(this.config.open),this.data.contentOpen=!1,this.search(""),setTimeout(function(){e.slim.content.removeAttribute("style"),e.data.contentPosition="below",e.config.isMultiple&&e.slim.multiSelected?(e.slim.multiSelected.container.classList.remove(e.config.openAbove),e.slim.multiSelected.container.classList.remove(e.config.openBelow)):e.slim.singleSelected&&(e.slim.singleSelected.container.classList.remove(e.config.openAbove),e.slim.singleSelected.container.classList.remove(e.config.openBelow)),e.slim.search.input.blur(),e.afterClose&&e.afterClose()},this.config.timeoutDelay))},c.prototype.moveContentAbove=function(){var e=0;this.config.isMultiple&&this.slim.multiSelected?e=this.slim.multiSelected.container.offsetHeight:this.slim.singleSelected&&(e=this.slim.singleSelected.container.offsetHeight);var t=e+this.slim.content.offsetHeight-1;this.slim.content.style.margin="-"+t+"px 0 0 0",this.slim.content.style.height=t-e+1+"px",this.slim.content.style.transformOrigin="center bottom",this.data.contentPosition="above",this.config.isMultiple&&this.slim.multiSelected?(this.slim.multiSelected.container.classList.remove(this.config.openBelow),this.slim.multiSelected.container.classList.add(this.config.openAbove)):this.slim.singleSelected&&(this.slim.singleSelected.container.classList.remove(this.config.openBelow),this.slim.singleSelected.container.classList.add(this.config.openAbove))},c.prototype.moveContentBelow=function(){this.data.contentPosition="below",this.config.isMultiple&&this.slim.multiSelected?(this.slim.multiSelected.container.classList.remove(this.config.openAbove),this.slim.multiSelected.container.classList.add(this.config.openBelow)):this.slim.singleSelected&&(this.slim.singleSelected.container.classList.remove(this.config.openAbove),this.slim.singleSelected.container.classList.add(this.config.openBelow))},c.prototype.enable=function(){this.config.isEnabled=!0,this.config.isMultiple&&this.slim.multiSelected?this.slim.multiSelected.container.classList.remove(this.config.disabled):this.slim.singleSelected&&this.slim.singleSelected.container.classList.remove(this.config.disabled),this.select.triggerMutationObserver=!1,this.select.element.disabled=!1,this.slim.search.input.disabled=!1,this.select.triggerMutationObserver=!0},c.prototype.disable=function(){this.config.isEnabled=!1,this.config.isMultiple&&this.slim.multiSelected?this.slim.multiSelected.container.classList.add(this.config.disabled):this.slim.singleSelected&&this.slim.singleSelected.container.classList.add(this.config.disabled),this.select.triggerMutationObserver=!1,this.select.element.disabled=!0,this.slim.search.input.disabled=!0,this.select.triggerMutationObserver=!0},c.prototype.search=function(t){if(this.data.searchValue!==t)if(this.slim.search.input.value=t,this.config.isAjax){var i=this;this.config.isSearching=!0,this.render(),this.ajax&&this.ajax(t,function(e){i.config.isSearching=!1,Array.isArray(e)?(e.unshift({text:"",placeholder:!0}),i.setData(e),i.data.search(t),i.render()):"string"==typeof e?i.slim.options(e):i.render()})}else this.data.search(t),this.render()},c.prototype.setSearchText=function(e){this.config.searchText=e},c.prototype.render=function(){this.config.isMultiple?this.slim.values():(this.slim.placeholder(),this.slim.deselect()),this.slim.options()},c.prototype.destroy=function(e){void 0===e&&(e=null);var t=e?document.querySelector("."+e+".ss-main"):this.slim.container,i=e?document.querySelector("[data-ssid="+e+"]"):this.select.element;if(t&&i&&(i.style.display="",delete i.dataset.ssid,i.slim=null,t.parentElement&&t.parentElement.removeChild(t),this.config.addToBody)){var s=e?document.querySelector("."+e+".ss-content"):this.slim.content;if(!s)return;document.body.removeChild(s)}},c);function c(e){var t=this;this.ajax=null,this.addable=null,this.beforeOnChange=null,this.onChange=null,this.beforeOpen=null,this.afterOpen=null,this.beforeClose=null,this.afterClose=null;var i=this.validate(e);i.dataset.ssid&&this.destroy(i.dataset.ssid),e.ajax&&(this.ajax=e.ajax),e.addable&&(this.addable=e.addable),this.config=new s.Config({select:i,isAjax:!!e.ajax,showSearch:e.showSearch,searchPlaceholder:e.searchPlaceholder,searchText:e.searchText,searchingText:e.searchingText,searchFocus:e.searchFocus,searchHighlight:e.searchHighlight,searchFilter:e.searchFilter,closeOnSelect:e.closeOnSelect,showContent:e.showContent,placeholderText:e.placeholder,allowDeselect:e.allowDeselect,allowDeselectOption:e.allowDeselectOption,hideSelectedOption:e.hideSelectedOption,deselectLabel:e.deselectLabel,isEnabled:e.isEnabled,valuesUseText:e.valuesUseText,showOptionTooltips:e.showOptionTooltips,selectByGroup:e.selectByGroup,limit:e.limit,timeoutDelay:e.timeoutDelay,addToBody:e.addToBody}),this.select=new n.Select({select:i,main:this}),this.data=new o.Data({main:this}),this.slim=new a.Slim({main:this}),this.select.element.parentNode&&this.select.element.parentNode.insertBefore(this.slim.container,this.select.element.nextSibling),e.data?this.setData(e.data):this.render(),document.addEventListener("click",function(e){e.target&&!l.hasClassInTree(e.target,t.config.id)&&t.close()}),"auto"===this.config.showContent&&window.addEventListener("scroll",l.debounce(function(e){t.data.contentOpen&&("above"===l.putContent(t.slim.content,t.data.contentPosition,t.data.contentOpen)?t.moveContentAbove():t.moveContentBelow())}),!1),e.beforeOnChange&&(this.beforeOnChange=e.beforeOnChange),e.onChange&&(this.onChange=e.onChange),e.beforeOpen&&(this.beforeOpen=e.beforeOpen),e.afterOpen&&(this.afterOpen=e.afterOpen),e.beforeClose&&(this.beforeClose=e.beforeClose),e.afterClose&&(this.afterClose=e.afterClose),this.config.isEnabled||this.disable()}t.default=r},function(e,t,i){"use strict";t.__esModule=!0;var s=(n.prototype.searchFilter=function(e,t){return-1!==e.text.toLowerCase().indexOf(t.toLowerCase())},n);function n(e){this.id="",this.isMultiple=!1,this.isAjax=!1,this.isSearching=!1,this.showSearch=!0,this.searchFocus=!0,this.searchHighlight=!1,this.closeOnSelect=!0,this.showContent="auto",this.searchPlaceholder="Search",this.searchText="No Results",this.searchingText="Searching...",this.placeholderText="Select Value",this.allowDeselect=!1,this.allowDeselectOption=!1,this.hideSelectedOption=!1,this.deselectLabel="x",this.isEnabled=!0,this.valuesUseText=!1,this.showOptionTooltips=!1,this.selectByGroup=!1,this.limit=0,this.timeoutDelay=200,this.addToBody=!1,this.main="ss-main",this.singleSelected="ss-single-selected",this.arrow="ss-arrow",this.multiSelected="ss-multi-selected",this.add="ss-add",this.plus="ss-plus",this.values="ss-values",this.value="ss-value",this.valueText="ss-value-text",this.valueDelete="ss-value-delete",this.content="ss-content",this.open="ss-open",this.openAbove="ss-open-above",this.openBelow="ss-open-below",this.search="ss-search",this.searchHighlighter="ss-search-highlight",this.addable="ss-addable",this.list="ss-list",this.optgroup="ss-optgroup",this.optgroupLabel="ss-optgroup-label",this.optgroupLabelSelectable="ss-optgroup-label-selectable",this.option="ss-option",this.optionSelected="ss-option-selected",this.highlighted="ss-highlighted",this.disabled="ss-disabled",this.hide="ss-hide",this.id="ss-"+Math.floor(1e5*Math.random()),this.style=e.select.style.cssText,this.class=e.select.className.split(" "),this.isMultiple=e.select.multiple,this.isAjax=e.isAjax,this.showSearch=!1!==e.showSearch,this.searchFocus=!1!==e.searchFocus,this.searchHighlight=!0===e.searchHighlight,this.closeOnSelect=!1!==e.closeOnSelect,e.showContent&&(this.showContent=e.showContent),this.isEnabled=!1!==e.isEnabled,e.searchPlaceholder&&(this.searchPlaceholder=e.searchPlaceholder),e.searchText&&(this.searchText=e.searchText),e.searchingText&&(this.searchingText=e.searchingText),e.placeholderText&&(this.placeholderText=e.placeholderText),this.allowDeselect=!0===e.allowDeselect,this.allowDeselectOption=!0===e.allowDeselectOption,this.hideSelectedOption=!0===e.hideSelectedOption,e.deselectLabel&&(this.deselectLabel=e.deselectLabel),e.valuesUseText&&(this.valuesUseText=e.valuesUseText),e.showOptionTooltips&&(this.showOptionTooltips=e.showOptionTooltips),e.selectByGroup&&(this.selectByGroup=e.selectByGroup),e.limit&&(this.limit=e.limit),e.searchFilter&&(this.searchFilter=e.searchFilter),null!=e.timeoutDelay&&(this.timeoutDelay=e.timeoutDelay),this.addToBody=!0===e.addToBody}t.Config=s},function(e,t,i){"use strict";t.__esModule=!0;var s=i(0),n=(a.prototype.setValue=function(){if(this.main.data.getSelected()){if(this.main.config.isMultiple)for(var e=this.main.data.getSelected(),t=0,i=this.element.options;t<i.length;t++){var s=i[t];s.selected=!1;for(var n=0,a=e;n<a.length;n++)a[n].value===s.value&&(s.selected=!0)}else e=this.main.data.getSelected(),this.element.value=e?e.value:"";this.main.data.isOnChangeEnabled=!1,this.element.dispatchEvent(new CustomEvent("change",{bubbles:!0})),this.main.data.isOnChangeEnabled=!0}},a.prototype.addAttributes=function(){this.element.tabIndex=-1,this.element.style.display="none",this.element.dataset.ssid=this.main.config.id},a.prototype.addEventListeners=function(){var t=this;this.element.addEventListener("change",function(e){t.main.data.setSelectedFromSelect(),t.main.render()})},a.prototype.addMutationObserver=function(){var t=this;this.main.config.isAjax||(this.mutationObserver=new MutationObserver(function(e){t.triggerMutationObserver&&(t.main.data.parseSelectData(),t.main.data.setSelectedFromSelect(),t.main.render(),e.forEach(function(e){"class"===e.attributeName&&t.main.slim.updateContainerDivClass(t.main.slim.container)}))}),this.observeMutationObserver())},a.prototype.observeMutationObserver=function(){this.mutationObserver&&this.mutationObserver.observe(this.element,{attributes:!0,childList:!0,characterData:!0})},a.prototype.disconnectMutationObserver=function(){this.mutationObserver&&this.mutationObserver.disconnect()},a.prototype.create=function(e){this.element.innerHTML="";for(var t=0,i=e;t<i.length;t++){var s=i[t];if(s.hasOwnProperty("options")){var n=s,a=document.createElement("optgroup");if(a.label=n.label,n.options)for(var o=0,l=n.options;o<l.length;o++){var r=l[o];a.appendChild(this.createOption(r))}this.element.appendChild(a)}else this.element.appendChild(this.createOption(s))}},a.prototype.createOption=function(t){var i=document.createElement("option");return i.value=""!==t.value?t.value:t.text,i.innerHTML=t.innerHTML||t.text,t.selected&&(i.selected=t.selected),!1===t.display&&(i.style.display="none"),t.disabled&&(i.disabled=!0),t.placeholder&&i.setAttribute("data-placeholder","true"),t.mandatory&&i.setAttribute("data-mandatory","true"),t.class&&t.class.split(" ").forEach(function(e){i.classList.add(e)}),t.data&&"object"==typeof t.data&&Object.keys(t.data).forEach(function(e){i.setAttribute("data-"+s.kebabCase(e),t.data[e])}),i},a);function a(e){this.triggerMutationObserver=!0,this.element=e.select,this.main=e.main,this.element.disabled&&(this.main.config.isEnabled=!1),this.addAttributes(),this.addEventListeners(),this.mutationObserver=null,this.addMutationObserver(),this.element.slim=e.main}t.Select=n},function(e,t,i){"use strict";t.__esModule=!0;var a=i(0),o=i(1),s=(n.prototype.containerDiv=function(){var e=document.createElement("div");return e.style.cssText=this.main.config.style,this.updateContainerDivClass(e),e},n.prototype.updateContainerDivClass=function(e){this.main.config.class=this.main.select.element.className.split(" "),e.className="",e.classList.add(this.main.config.id),e.classList.add(this.main.config.main);for(var t=0,i=this.main.config.class;t<i.length;t++){var s=i[t];""!==s.trim()&&e.classList.add(s)}},n.prototype.singleSelectedDiv=function(){var t=this,e=document.createElement("div");e.classList.add(this.main.config.singleSelected);var i=document.createElement("span");i.classList.add("placeholder"),e.appendChild(i);var s=document.createElement("span");s.innerHTML=this.main.config.deselectLabel,s.classList.add("ss-deselect"),s.onclick=function(e){e.stopPropagation(),t.main.config.isEnabled&&t.main.set("")},e.appendChild(s);var n=document.createElement("span");n.classList.add(this.main.config.arrow);var a=document.createElement("span");return a.classList.add("arrow-down"),n.appendChild(a),e.appendChild(n),e.onclick=function(){t.main.config.isEnabled&&(t.main.data.contentOpen?t.main.close():t.main.open())},{container:e,placeholder:i,deselect:s,arrowIcon:{container:n,arrow:a}}},n.prototype.placeholder=function(){var e=this.main.data.getSelected();if(null===e||e&&e.placeholder){var t=document.createElement("span");t.classList.add(this.main.config.disabled),t.innerHTML=this.main.config.placeholderText,this.singleSelected&&(this.singleSelected.placeholder.innerHTML=t.outerHTML)}else{var i="";e&&(i=e.innerHTML&&!0!==this.main.config.valuesUseText?e.innerHTML:e.text),this.singleSelected&&(this.singleSelected.placeholder.innerHTML=e?i:"")}},n.prototype.deselect=function(){if(this.singleSelected){if(!this.main.config.allowDeselect)return void this.singleSelected.deselect.classList.add("ss-hide");""===this.main.selected()?this.singleSelected.deselect.classList.add("ss-hide"):this.singleSelected.deselect.classList.remove("ss-hide")}},n.prototype.multiSelectedDiv=function(){var t=this,e=document.createElement("div");e.classList.add(this.main.config.multiSelected);var i=document.createElement("div");i.classList.add(this.main.config.values),e.appendChild(i);var s=document.createElement("div");s.classList.add(this.main.config.add);var n=document.createElement("span");return n.classList.add(this.main.config.plus),n.onclick=function(e){t.main.data.contentOpen&&(t.main.close(),e.stopPropagation())},s.appendChild(n),e.appendChild(s),e.onclick=function(e){t.main.config.isEnabled&&(e.target.classList.contains(t.main.config.valueDelete)||(t.main.data.contentOpen?t.main.close():t.main.open()))},{container:e,values:i,add:s,plus:n}},n.prototype.values=function(){if(this.multiSelected){for(var e,t=this.multiSelected.values.childNodes,i=this.main.data.getSelected(),s=[],n=0,a=t;n<a.length;n++){var o=a[n];e=!0;for(var l=0,r=i;l<r.length;l++){var c=r[l];String(c.id)===String(o.dataset.id)&&(e=!1)}e&&s.push(o)}for(var d=0,h=s;d<h.length;d++){var u=h[d];u.classList.add("ss-out"),this.multiSelected.values.removeChild(u)}for(t=this.multiSelected.values.childNodes,c=0;c<i.length;c++){e=!1;for(var p=0,m=t;p<m.length;p++)o=m[p],String(i[c].id)===String(o.dataset.id)&&(e=!0);e||(0!==t.length&&HTMLElement.prototype.insertAdjacentElement?0===c?this.multiSelected.values.insertBefore(this.valueDiv(i[c]),t[c]):t[c-1].insertAdjacentElement("afterend",this.valueDiv(i[c])):this.multiSelected.values.appendChild(this.valueDiv(i[c])))}if(0===i.length){var f=document.createElement("span");f.classList.add(this.main.config.disabled),f.innerHTML=this.main.config.placeholderText,this.multiSelected.values.innerHTML=f.outerHTML}}},n.prototype.valueDiv=function(a){var o=this,e=document.createElement("div");e.classList.add(this.main.config.value),e.dataset.id=a.id;var t=document.createElement("span");if(t.classList.add(this.main.config.valueText),t.innerHTML=a.innerHTML&&!0!==this.main.config.valuesUseText?a.innerHTML:a.text,e.appendChild(t),!a.mandatory){var i=document.createElement("span");i.classList.add(this.main.config.valueDelete),i.innerHTML=this.main.config.deselectLabel,i.onclick=function(e){e.preventDefault(),e.stopPropagation();var t=!1;if(o.main.beforeOnChange||(t=!0),o.main.beforeOnChange){for(var i=o.main.data.getSelected(),s=JSON.parse(JSON.stringify(i)),n=0;n<s.length;n++)s[n].id===a.id&&s.splice(n,1);!1!==o.main.beforeOnChange(s)&&(t=!0)}t&&(o.main.data.removeFromSelected(a.id,"id"),o.main.render(),o.main.select.setValue(),o.main.data.onDataChange())},e.appendChild(i)}return e},n.prototype.contentDiv=function(){var e=document.createElement("div");return e.classList.add(this.main.config.content),e},n.prototype.searchDiv=function(){var n=this,e=document.createElement("div"),s=document.createElement("input"),a=document.createElement("div");e.classList.add(this.main.config.search);var t={container:e,input:s};return this.main.config.showSearch||(e.classList.add(this.main.config.hide),s.readOnly=!0),s.type="search",s.placeholder=this.main.config.searchPlaceholder,s.tabIndex=0,s.setAttribute("aria-label",this.main.config.searchPlaceholder),s.setAttribute("autocapitalize","off"),s.setAttribute("autocomplete","off"),s.setAttribute("autocorrect","off"),s.onclick=function(e){setTimeout(function(){""===e.target.value&&n.main.search("")},10)},s.onkeydown=function(e){"ArrowUp"===e.key?(n.main.open(),n.highlightUp(),e.preventDefault()):"ArrowDown"===e.key?(n.main.open(),n.highlightDown(),e.preventDefault()):"Tab"===e.key?n.main.data.contentOpen?n.main.close():setTimeout(function(){n.main.close()},n.main.config.timeoutDelay):"Enter"===e.key&&e.preventDefault()},s.onkeyup=function(e){var t=e.target;if("Enter"===e.key){if(n.main.addable&&e.ctrlKey)return a.click(),e.preventDefault(),void e.stopPropagation();var i=n.list.querySelector("."+n.main.config.highlighted);i&&i.click()}else"ArrowUp"===e.key||"ArrowDown"===e.key||("Escape"===e.key?n.main.close():n.main.config.showSearch&&n.main.data.contentOpen?n.main.search(t.value):s.value="");e.preventDefault(),e.stopPropagation()},s.onfocus=function(){n.main.open()},e.appendChild(s),this.main.addable&&(a.classList.add(this.main.config.addable),a.innerHTML="+",a.onclick=function(e){if(n.main.addable){e.preventDefault(),e.stopPropagation();var t=n.search.input.value;if(""===t.trim())return void n.search.input.focus();var i=n.main.addable(t),s="";if(!i)return;"object"==typeof i?o.validateOption(i)&&(n.main.addData(i),s=i.value?i.value:i.text):(n.main.addData(n.main.data.newOption({text:i,value:i})),s=i),n.main.search(""),setTimeout(function(){n.main.set(s,"value",!1,!1)},100),n.main.config.closeOnSelect&&setTimeout(function(){n.main.close()},100)}},e.appendChild(a),t.addable=a),t},n.prototype.highlightUp=function(){var e=this.list.querySelector("."+this.main.config.highlighted),t=null;if(e)for(t=e.previousSibling;null!==t&&t.classList.contains(this.main.config.disabled);)t=t.previousSibling;else{var i=this.list.querySelectorAll("."+this.main.config.option+":not(."+this.main.config.disabled+")");t=i[i.length-1]}if(t&&t.classList.contains(this.main.config.optgroupLabel)&&(t=null),null===t){var s=e.parentNode;if(s.classList.contains(this.main.config.optgroup)&&s.previousSibling){var n=s.previousSibling.querySelectorAll("."+this.main.config.option+":not(."+this.main.config.disabled+")");n.length&&(t=n[n.length-1])}}t&&(e&&e.classList.remove(this.main.config.highlighted),t.classList.add(this.main.config.highlighted),a.ensureElementInView(this.list,t))},n.prototype.highlightDown=function(){var e=this.list.querySelector("."+this.main.config.highlighted),t=null;if(e)for(t=e.nextSibling;null!==t&&t.classList.contains(this.main.config.disabled);)t=t.nextSibling;else t=this.list.querySelector("."+this.main.config.option+":not(."+this.main.config.disabled+")");if(null===t&&null!==e){var i=e.parentNode;i.classList.contains(this.main.config.optgroup)&&i.nextSibling&&(t=i.nextSibling.querySelector("."+this.main.config.option+":not(."+this.main.config.disabled+")"))}t&&(e&&e.classList.remove(this.main.config.highlighted),t.classList.add(this.main.config.highlighted),a.ensureElementInView(this.list,t))},n.prototype.listDiv=function(){var e=document.createElement("div");return e.classList.add(this.main.config.list),e},n.prototype.options=function(e){void 0===e&&(e="");var t,i=this.main.data.filtered||this.main.data.data;if((this.list.innerHTML="")!==e)return(t=document.createElement("div")).classList.add(this.main.config.option),t.classList.add(this.main.config.disabled),t.innerHTML=e,void this.list.appendChild(t);if(this.main.config.isAjax&&this.main.config.isSearching)return(t=document.createElement("div")).classList.add(this.main.config.option),t.classList.add(this.main.config.disabled),t.innerHTML=this.main.config.searchingText,void this.list.appendChild(t);if(0===i.length){var s=document.createElement("div");return s.classList.add(this.main.config.option),s.classList.add(this.main.config.disabled),s.innerHTML=this.main.config.searchText,void this.list.appendChild(s)}for(var n=function(e){if(e.hasOwnProperty("label")){var t=e,n=document.createElement("div");n.classList.add(c.main.config.optgroup);var i=document.createElement("div");i.classList.add(c.main.config.optgroupLabel),c.main.config.selectByGroup&&c.main.config.isMultiple&&i.classList.add(c.main.config.optgroupLabelSelectable),i.innerHTML=t.label,n.appendChild(i);var s=t.options;if(s){for(var a=0,o=s;a<o.length;a++){var l=o[a];n.appendChild(c.option(l))}if(c.main.config.selectByGroup&&c.main.config.isMultiple){var r=c;i.addEventListener("click",function(e){e.preventDefault(),e.stopPropagation();for(var t=0,i=n.children;t<i.length;t++){var s=i[t];-1!==s.className.indexOf(r.main.config.option)&&s.click()}})}}c.list.appendChild(n)}else c.list.appendChild(c.option(e))},c=this,a=0,o=i;a<o.length;a++)n(o[a])},n.prototype.option=function(r){if(r.placeholder){var e=document.createElement("div");return e.classList.add(this.main.config.option),e.classList.add(this.main.config.hide),e}var t=document.createElement("div");t.classList.add(this.main.config.option),r.class&&r.class.split(" ").forEach(function(e){t.classList.add(e)}),r.style&&(t.style.cssText=r.style);var c=this.main.data.getSelected();t.dataset.id=r.id,this.main.config.searchHighlight&&this.main.slim&&r.innerHTML&&""!==this.main.slim.search.input.value.trim()?t.innerHTML=a.highlight(r.innerHTML,this.main.slim.search.input.value,this.main.config.searchHighlighter):r.innerHTML&&(t.innerHTML=r.innerHTML),this.main.config.showOptionTooltips&&t.textContent&&t.setAttribute("title",t.textContent);var d=this;t.addEventListener("click",function(e){e.preventDefault(),e.stopPropagation();var t=this.dataset.id;if(!0===r.selected&&d.main.config.allowDeselectOption){var i=!1;if(d.main.beforeOnChange&&d.main.config.isMultiple||(i=!0),d.main.beforeOnChange&&d.main.config.isMultiple){for(var s=d.main.data.getSelected(),n=JSON.parse(JSON.stringify(s)),a=0;a<n.length;a++)n[a].id===t&&n.splice(a,1);!1!==d.main.beforeOnChange(n)&&(i=!0)}i&&(d.main.config.isMultiple?(d.main.data.removeFromSelected(t,"id"),d.main.render(),d.main.select.setValue(),d.main.data.onDataChange()):d.main.set(""))}else{if(r.disabled||r.selected)return;if(d.main.config.limit&&Array.isArray(c)&&d.main.config.limit<=c.length)return;if(d.main.beforeOnChange){var o=void 0,l=JSON.parse(JSON.stringify(d.main.data.getObjectFromData(t)));l.selected=!0,d.main.config.isMultiple?(o=JSON.parse(JSON.stringify(c))).push(l):o=JSON.parse(JSON.stringify(l)),!1!==d.main.beforeOnChange(o)&&d.main.set(t,"id",d.main.config.closeOnSelect)}else d.main.set(t,"id",d.main.config.closeOnSelect)}});var i=c&&a.isValueInArrayOfObjects(c,"id",r.id);return(r.disabled||i)&&(t.onclick=null,d.main.config.allowDeselectOption||t.classList.add(this.main.config.disabled),d.main.config.hideSelectedOption&&t.classList.add(this.main.config.hide)),i?t.classList.add(this.main.config.optionSelected):t.classList.remove(this.main.config.optionSelected),t},n);function n(e){this.main=e.main,this.container=this.containerDiv(),this.content=this.contentDiv(),this.search=this.searchDiv(),this.list=this.listDiv(),this.options(),this.singleSelected=null,this.multiSelected=null,this.main.config.isMultiple?(this.multiSelected=this.multiSelectedDiv(),this.multiSelected&&this.container.appendChild(this.multiSelected.container)):(this.singleSelected=this.singleSelectedDiv(),this.container.appendChild(this.singleSelected.container)),this.main.config.addToBody?(this.content.classList.add(this.main.config.id),document.body.appendChild(this.content)):this.container.appendChild(this.content),this.content.appendChild(this.search.container),this.content.appendChild(this.list)}t.Slim=s}],n.c=s,n.d=function(e,t,i){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:i})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(t,e){if(1&e&&(t=n(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var i=Object.create(null);if(n.r(i),Object.defineProperty(i,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var s in t)n.d(i,s,function(e){return t[e]}.bind(null,s));return i},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=2).default;function n(e){if(s[e])return s[e].exports;var t=s[e]={i:e,l:!1,exports:{}};return i[e].call(t.exports,t,t.exports,n),t.l=!0,t.exports}var i,s});
\ No newline at end of file
diff --git a/website/js/vendor/slimselect/slimselect.scss b/website/js/vendor/slimselect/slimselect.scss
new file mode 100644 (file)
index 0000000..705bb30
--- /dev/null
@@ -0,0 +1,391 @@
+$height: 30px !default;
+$white: #ffffff !default;
+$font-color: #666666 !default;
+$font-placeholder-color: #8a8a8a !default;
+$font-disabled-color: #dedede !default;
+$primary-color: #5897fb !default;
+$border-color: #dcdee2 !default;
+$search-highlight-color: #fffb8c !default;
+$border-radius: 4px !default;
+$spacing-l: 8px !default;
+$spacing-m: 6px !default;
+$spacing-s: 4px !default;
+
+.ss-main {
+  position: relative;
+  display: inline-block;
+  user-select: none;
+  color: $font-color;
+  width: 100%;
+
+  .ss-single-selected {
+    display: flex;
+    cursor: pointer;
+    width: 100%;
+    height: $height;
+    padding: $spacing-m;
+    border: 1px solid $border-color;
+    border-radius: $border-radius;
+    background-color: $white;
+    outline: 0;
+    box-sizing: border-box;
+    transition: background-color .2s;
+
+    &.ss-disabled {
+      background-color: $border-color;
+      cursor: not-allowed;
+    }
+
+    &.ss-open-above {
+      border-top-left-radius: 0px;
+      border-top-right-radius: 0px;
+    }
+    &.ss-open-below {
+      border-bottom-left-radius: 0px;
+      border-bottom-right-radius: 0px;
+    }
+
+    .placeholder {
+      display: flex;
+      flex: 1 1 100%;
+      align-items: center;
+      overflow: hidden;
+      text-overflow: ellipsis;
+      white-space: nowrap;
+      text-align: left;
+      width: calc(100% - 30px);
+      line-height: 1em;
+      -webkit-user-select: none;  
+      -moz-user-select: none;    
+      -ms-user-select: none;      
+      user-select: none;
+
+      * {
+        display: flex;
+        align-items: center;
+        overflow: hidden;
+        text-overflow: ellipsis;
+        white-space: nowrap;
+        width: auto;
+      }
+
+      .ss-disabled {
+        color: $font-disabled-color;
+      }
+    }
+
+    .ss-deselect {
+      display: flex;
+      align-items: center;
+      justify-content: flex-end;
+      flex: 0 1 auto;
+      margin: 0 $spacing-m 0 $spacing-m;
+      font-weight: bold;
+
+      &.ss-hide {
+        display: none;
+      }
+    }
+
+    .ss-arrow {
+      display: flex;
+      align-items: center;
+      justify-content: flex-end;
+      flex: 0 1 auto;
+      margin: 0 $spacing-m 0 $spacing-m;
+
+      span {
+        border: solid $font-color;
+        border-width: 0 2px 2px 0;
+        display: inline-block;
+        padding: 3px;
+        transition: transform .2s, margin .2s;
+
+        &.arrow-up {
+          transform: rotate(-135deg);
+          margin: 3px 0 0 0;
+        }
+        &.arrow-down {
+          transform: rotate(45deg);
+          margin: -3px 0 0 0;
+        }
+      }
+    }
+  }
+
+  .ss-multi-selected {
+    display: flex;
+    flex-direction: row;
+    cursor: pointer;
+    min-height: $height;
+    width: 100%;
+    padding: 0 0 0 3px;
+    border: 1px solid $border-color;
+    border-radius: $border-radius;
+    background-color: $white;
+    outline: 0;
+    box-sizing: border-box;
+    transition: background-color .2s;
+
+    &.ss-disabled {
+      background-color: $border-color;
+      cursor: not-allowed;
+
+      .ss-values {
+        .ss-disabled {
+          color: $font-color;
+        }
+
+        .ss-value {
+          .ss-value-delete {
+            cursor: not-allowed;
+          }
+        }
+      }
+    }
+
+    &.ss-open-above {
+      border-top-left-radius: 0px;
+      border-top-right-radius: 0px;
+    }
+    &.ss-open-below {
+      border-bottom-left-radius: 0px;
+      border-bottom-right-radius: 0px;
+    }
+
+    .ss-values {
+      display: flex;
+      flex-wrap: wrap;
+      justify-content: flex-start;
+      flex: 1 1 100%;
+      width: calc(100% - 30px);
+
+      .ss-disabled {
+        display: flex;
+        padding: 4px 5px;
+        margin: 2px 0px;
+        line-height: 1em;
+        align-items: center;
+        width: 100%;
+        color: $font-disabled-color;
+        overflow: hidden;
+        text-overflow: ellipsis;
+        white-space: nowrap;
+      }
+
+      @keyframes scaleIn {
+        0% {transform: scale(0); opacity: 0;}
+        100% {transform: scale(1); opacity: 1;}
+      }
+      @keyframes scaleOut {
+        0% {transform: scale(1); opacity: 1;}
+        100% {transform: scale(0); opacity: 0;}
+      }
+
+      .ss-value {
+        display: flex;
+        user-select: none;
+        align-items: center;
+        font-size: 12px;
+        padding: 3px 5px;
+        margin: 3px 5px 3px 0px;
+        color: $white;
+        background-color: $primary-color;
+        border-radius: $border-radius;
+        animation-name: scaleIn;
+        animation-duration: .2s;
+        animation-timing-function: ease-out;
+        animation-fill-mode: both;
+
+        &.ss-out {
+          animation-name: scaleOut;
+          animation-duration: .2s;
+          animation-timing-function: ease-out;
+        }
+
+        .ss-value-delete {
+          margin: 0 0 0 5px;
+          cursor: pointer;
+        }
+      }
+    }
+
+    .ss-add {
+      display: flex;
+      flex: 0 1 3px;
+      margin: 9px 12px 0 5px;
+
+      .ss-plus {
+        display: flex;
+        justify-content: center;
+        align-items: center;
+        background: $font-color;
+        position: relative;
+        height: 10px;
+        width: 2px;
+        transition: transform .2s;
+
+        &:after {
+          background: $font-color;
+          content: "";
+          position: absolute;
+          height: 2px;
+          width: 10px;
+          left: -4px;
+          top: 4px;
+        }
+
+        &.ss-cross {
+          transform: rotate(45deg);
+        }
+      }
+    }
+
+  }
+}
+.ss-content {
+  position: absolute;
+  width: 100%;
+  margin: -1px 0 0 0;
+  box-sizing: border-box;
+  border: solid 1px $border-color;
+  z-index: 1010;
+  background-color: $white;
+  transform-origin: center top;
+  transition: transform .2s, opacity .2s;
+  opacity: 0;
+  transform: scaleY(0);
+
+  &.ss-open {
+    display: block;
+    opacity: 1;
+    transform: scaleY(1);
+  }
+
+  .ss-search {
+    display: flex;
+    flex-direction: row;
+    padding: $spacing-l $spacing-l $spacing-m $spacing-l;
+
+    &.ss-hide {
+      height: 0px;
+      opacity: 0;
+      padding: 0px 0px 0px 0px;
+      margin: 0px 0px 0px 0px;
+
+      input {
+        height: 0px;
+        opacity: 0;
+        padding: 0px 0px 0px 0px;
+        margin: 0px 0px 0px 0px;
+      }
+    }
+
+    input {
+      display: inline-flex;
+      font-size: inherit;
+      line-height: inherit;
+      flex: 1 1 auto;
+      width: 100%;
+      min-width: 0px;
+      height: 30px;
+      padding: $spacing-m $spacing-l;
+      margin: 0;
+      border: 1px solid $border-color;
+      border-radius: $border-radius;
+      background-color: $white;
+      outline: 0;
+      text-align: left;
+      box-sizing: border-box;
+      -webkit-box-sizing: border-box;
+      -webkit-appearance: textfield;
+      
+      &::placeholder {
+        color: $font-placeholder-color;
+        vertical-align: middle;
+      }
+
+      &:focus {
+        box-shadow: 0 0 5px $primary-color;
+      }
+    }
+
+    .ss-addable {
+      display: inline-flex;
+      justify-content: center;
+      align-items: center;
+      cursor: pointer;
+      font-size: 22px;
+      font-weight: bold;
+      flex: 0 0 30px;
+      height: 30px;
+      margin: 0 0 0 8px;
+      border: 1px solid $border-color;
+      border-radius: $border-radius;
+      box-sizing: border-box;
+    }
+  }
+
+  .ss-addable {
+    padding-top: 0px;
+  }
+
+  .ss-list {
+    max-height: 200px;
+    overflow-x: hidden;
+    overflow-y: auto;
+    text-align: left;
+
+    .ss-optgroup {
+      .ss-optgroup-label {
+        padding: 6px 10px 6px 10px;
+        font-weight: bold;
+      }
+
+      .ss-option {
+        padding: 6px 6px 6px 25px;
+      }
+    }
+
+    .ss-optgroup-label-selectable {
+      cursor: pointer;
+      
+      &:hover {
+        color: $white;
+        background-color: $primary-color;
+      }
+    }
+
+    .ss-option {
+      padding: 6px 10px 6px 10px;
+      cursor: pointer;
+      user-select: none;
+
+      * {
+        display: inline-block;
+      }
+
+      &:hover, &.ss-highlighted {
+        color: $white;
+        background-color: $primary-color;
+      }
+
+      &.ss-disabled {
+        cursor: not-allowed;
+        color: $font-disabled-color;
+        background-color: $white;
+      }
+
+      &:not(.ss-disabled).ss-option-selected {
+        color: $font-color;
+        background-color: rgba($primary-color, .1);
+      }
+
+      &.ss-hide { display: none; }
+
+      .ss-search-highlight {
+        background-color: $search-highlight-color;
+      }
+    }
+  }
+}
diff --git a/website/js/vendor/tabulator/css/tabulator.css b/website/js/vendor/tabulator/css/tabulator.css
new file mode 100644 (file)
index 0000000..c254bb6
--- /dev/null
@@ -0,0 +1,1088 @@
+/* Tabulator v4.8.3 (c) Oliver Folkerd */
+.tabulator {
+  position: relative;
+  border: 1px solid #999;
+  background-color: #888;
+  font-size: 14px;
+  text-align: left;
+  overflow: hidden;
+  -ms-transform: translatez(0);
+  transform: translatez(0);
+}
+
+.tabulator[tabulator-layout="fitDataFill"] .tabulator-tableHolder .tabulator-table {
+  min-width: 100%;
+}
+
+.tabulator[tabulator-layout="fitDataTable"] {
+  display: inline-block;
+}
+
+.tabulator.tabulator-block-select {
+  -webkit-user-select: none;
+      -ms-user-select: none;
+          user-select: none;
+}
+
+.tabulator .tabulator-header {
+  position: relative;
+  box-sizing: border-box;
+  width: 100%;
+  border-bottom: 1px solid #999;
+  background-color: #e6e6e6;
+  color: #555;
+  font-weight: bold;
+  white-space: nowrap;
+  overflow: hidden;
+  -moz-user-select: none;
+  -khtml-user-select: none;
+  -webkit-user-select: none;
+  -o-user-select: none;
+}
+
+.tabulator .tabulator-header.tabulator-header-hidden {
+  display: none;
+}
+
+.tabulator .tabulator-header .tabulator-col {
+  display: inline-block;
+  position: relative;
+  box-sizing: border-box;
+  border-right: 1px solid #aaa;
+  background: #e6e6e6;
+  text-align: left;
+  vertical-align: bottom;
+  overflow: hidden;
+}
+
+.tabulator .tabulator-header .tabulator-col.tabulator-moving {
+  position: absolute;
+  border: 1px solid #999;
+  background: #cdcdcd;
+  pointer-events: none;
+}
+
+.tabulator .tabulator-header .tabulator-col .tabulator-col-content {
+  box-sizing: border-box;
+  position: relative;
+  padding: 4px;
+}
+
+.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-header-menu-button {
+  padding: 0 8px;
+}
+
+.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-header-menu-button:hover {
+  cursor: pointer;
+  opacity: .6;
+}
+
+.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title-holder {
+  position: relative;
+}
+
+.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title {
+  box-sizing: border-box;
+  width: 100%;
+  white-space: nowrap;
+  overflow: hidden;
+  text-overflow: ellipsis;
+  vertical-align: bottom;
+}
+
+.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title .tabulator-title-editor {
+  box-sizing: border-box;
+  width: 100%;
+  border: 1px solid #999;
+  padding: 1px;
+  background: #fff;
+}
+
+.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title .tabulator-header-menu-button + .tabulator-title-editor {
+  width: calc(100% - 22px);
+}
+
+.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-sorter {
+  display: -ms-flexbox;
+  display: flex;
+  -ms-flex-align: center;
+      align-items: center;
+  position: absolute;
+  top: 0;
+  bottom: 0;
+  right: 4px;
+}
+
+.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-sorter .tabulator-arrow {
+  width: 0;
+  height: 0;
+  border-left: 6px solid transparent;
+  border-right: 6px solid transparent;
+  border-bottom: 6px solid #bbb;
+}
+
+.tabulator .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols {
+  position: relative;
+  display: -ms-flexbox;
+  display: flex;
+  border-top: 1px solid #aaa;
+  overflow: hidden;
+  margin-right: -1px;
+}
+
+.tabulator .tabulator-header .tabulator-col:first-child .tabulator-col-resize-handle.prev {
+  display: none;
+}
+
+.tabulator .tabulator-header .tabulator-col .tabulator-header-filter {
+  position: relative;
+  box-sizing: border-box;
+  margin-top: 2px;
+  width: 100%;
+  text-align: center;
+}
+
+.tabulator .tabulator-header .tabulator-col .tabulator-header-filter textarea {
+  height: auto !important;
+}
+
+.tabulator .tabulator-header .tabulator-col .tabulator-header-filter svg {
+  margin-top: 3px;
+}
+
+.tabulator .tabulator-header .tabulator-col .tabulator-header-filter input::-ms-clear {
+  width: 0;
+  height: 0;
+}
+
+.tabulator .tabulator-header .tabulator-col.tabulator-sortable .tabulator-col-title {
+  padding-right: 25px;
+}
+
+.tabulator .tabulator-header .tabulator-col.tabulator-sortable:hover {
+  cursor: pointer;
+  background-color: #cdcdcd;
+}
+
+.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort="none"] .tabulator-col-content .tabulator-col-sorter {
+  color: #bbb;
+}
+
+.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort="none"] .tabulator-col-content .tabulator-col-sorter .tabulator-arrow {
+  border-top: none;
+  border-bottom: 6px solid #bbb;
+}
+
+.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort="asc"] .tabulator-col-content .tabulator-col-sorter {
+  color: #666;
+}
+
+.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort="asc"] .tabulator-col-content .tabulator-col-sorter .tabulator-arrow {
+  border-top: none;
+  border-bottom: 6px solid #666;
+}
+
+.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort="desc"] .tabulator-col-content .tabulator-col-sorter {
+  color: #666;
+}
+
+.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort="desc"] .tabulator-col-content .tabulator-col-sorter .tabulator-arrow {
+  border-bottom: none;
+  border-top: 6px solid #666;
+  color: #666;
+}
+
+.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical .tabulator-col-content .tabulator-col-title {
+  -ms-writing-mode: tb-rl;
+      writing-mode: vertical-rl;
+  text-orientation: mixed;
+  display: -ms-flexbox;
+  display: flex;
+  -ms-flex-align: center;
+      align-items: center;
+  -ms-flex-pack: center;
+      justify-content: center;
+}
+
+.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-col-vertical-flip .tabulator-col-title {
+  -ms-transform: rotate(180deg);
+      transform: rotate(180deg);
+}
+
+.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable .tabulator-col-title {
+  padding-right: 0;
+  padding-top: 20px;
+}
+
+.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable.tabulator-col-vertical-flip .tabulator-col-title {
+  padding-right: 0;
+  padding-bottom: 20px;
+}
+
+.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable .tabulator-col-sorter {
+  -ms-flex-pack: center;
+      justify-content: center;
+  left: 0;
+  right: 0;
+  top: 4px;
+  bottom: auto;
+}
+
+.tabulator .tabulator-header .tabulator-frozen {
+  display: inline-block;
+  position: absolute;
+  z-index: 10;
+}
+
+.tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-left {
+  border-right: 2px solid #aaa;
+}
+
+.tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-right {
+  border-left: 2px solid #aaa;
+}
+
+.tabulator .tabulator-header .tabulator-calcs-holder {
+  box-sizing: border-box;
+  min-width: 600%;
+  background: #f3f3f3 !important;
+  border-top: 1px solid #aaa;
+  border-bottom: 1px solid #aaa;
+  overflow: hidden;
+}
+
+.tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row {
+  background: #f3f3f3 !important;
+}
+
+.tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row .tabulator-col-resize-handle {
+  display: none;
+}
+
+.tabulator .tabulator-header .tabulator-frozen-rows-holder {
+  min-width: 600%;
+}
+
+.tabulator .tabulator-header .tabulator-frozen-rows-holder:empty {
+  display: none;
+}
+
+.tabulator .tabulator-tableHolder {
+  position: relative;
+  width: 100%;
+  white-space: nowrap;
+  overflow: auto;
+  -webkit-overflow-scrolling: touch;
+}
+
+.tabulator .tabulator-tableHolder:focus {
+  outline: none;
+}
+
+.tabulator .tabulator-tableHolder .tabulator-placeholder {
+  box-sizing: border-box;
+  display: -ms-flexbox;
+  display: flex;
+  -ms-flex-align: center;
+      align-items: center;
+  width: 100%;
+}
+
+.tabulator .tabulator-tableHolder .tabulator-placeholder[tabulator-render-mode="virtual"] {
+  min-height: 100%;
+  min-width: 100%;
+}
+
+.tabulator .tabulator-tableHolder .tabulator-placeholder span {
+  display: inline-block;
+  margin: 0 auto;
+  padding: 10px;
+  color: #ccc;
+  font-weight: bold;
+  font-size: 20px;
+}
+
+.tabulator .tabulator-tableHolder .tabulator-table {
+  position: relative;
+  display: inline-block;
+  background-color: #fff;
+  white-space: nowrap;
+  overflow: visible;
+  color: #333;
+}
+
+.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.tabulator-calcs {
+  font-weight: bold;
+  background: #e2e2e2 !important;
+}
+
+.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.tabulator-calcs.tabulator-calcs-top {
+  border-bottom: 2px solid #aaa;
+}
+
+.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.tabulator-calcs.tabulator-calcs-bottom {
+  border-top: 2px solid #aaa;
+}
+
+.tabulator .tabulator-footer {
+  padding: 5px 10px;
+  border-top: 1px solid #999;
+  background-color: #e6e6e6;
+  text-align: right;
+  color: #555;
+  font-weight: bold;
+  white-space: nowrap;
+  -ms-user-select: none;
+      user-select: none;
+  -moz-user-select: none;
+  -khtml-user-select: none;
+  -webkit-user-select: none;
+  -o-user-select: none;
+}
+
+.tabulator .tabulator-footer .tabulator-calcs-holder {
+  box-sizing: border-box;
+  width: calc(100% + 20px);
+  margin: -5px -10px 5px -10px;
+  text-align: left;
+  background: #f3f3f3 !important;
+  border-bottom: 1px solid #aaa;
+  border-top: 1px solid #aaa;
+  overflow: hidden;
+}
+
+.tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row {
+  background: #f3f3f3 !important;
+}
+
+.tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row .tabulator-col-resize-handle {
+  display: none;
+}
+
+.tabulator .tabulator-footer .tabulator-calcs-holder:only-child {
+  margin-bottom: -5px;
+  border-bottom: none;
+}
+
+.tabulator .tabulator-footer .tabulator-paginator {
+  color: #555;
+  font-family: inherit;
+  font-weight: inherit;
+  font-size: inherit;
+}
+
+.tabulator .tabulator-footer .tabulator-page-size {
+  display: inline-block;
+  margin: 0 5px;
+  padding: 2px 5px;
+  border: 1px solid #aaa;
+  border-radius: 3px;
+}
+
+.tabulator .tabulator-footer .tabulator-pages {
+  margin: 0 7px;
+}
+
+.tabulator .tabulator-footer .tabulator-page {
+  display: inline-block;
+  margin: 0 2px;
+  padding: 2px 5px;
+  border: 1px solid #aaa;
+  border-radius: 3px;
+  background: rgba(255, 255, 255, 0.2);
+}
+
+.tabulator .tabulator-footer .tabulator-page.active {
+  color: #d00;
+}
+
+.tabulator .tabulator-footer .tabulator-page:disabled {
+  opacity: .5;
+}
+
+.tabulator .tabulator-footer .tabulator-page:not(.disabled):hover {
+  cursor: pointer;
+  background: rgba(0, 0, 0, 0.2);
+  color: #fff;
+}
+
+.tabulator .tabulator-col-resize-handle {
+  position: absolute;
+  right: 0;
+  top: 0;
+  bottom: 0;
+  width: 5px;
+}
+
+.tabulator .tabulator-col-resize-handle.prev {
+  left: 0;
+  right: auto;
+}
+
+.tabulator .tabulator-col-resize-handle:hover {
+  cursor: ew-resize;
+}
+
+.tabulator .tabulator-loader {
+  position: absolute;
+  display: -ms-flexbox;
+  display: flex;
+  -ms-flex-align: center;
+      align-items: center;
+  top: 0;
+  left: 0;
+  z-index: 100;
+  height: 100%;
+  width: 100%;
+  background: rgba(0, 0, 0, 0.4);
+  text-align: center;
+}
+
+.tabulator .tabulator-loader .tabulator-loader-msg {
+  display: inline-block;
+  margin: 0 auto;
+  padding: 10px 20px;
+  border-radius: 10px;
+  background: #fff;
+  font-weight: bold;
+  font-size: 16px;
+}
+
+.tabulator .tabulator-loader .tabulator-loader-msg.tabulator-loading {
+  border: 4px solid #333;
+  color: #000;
+}
+
+.tabulator .tabulator-loader .tabulator-loader-msg.tabulator-error {
+  border: 4px solid #D00;
+  color: #590000;
+}
+
+.tabulator-row {
+  position: relative;
+  box-sizing: border-box;
+  min-height: 22px;
+  background-color: #fff;
+}
+
+.tabulator-row.tabulator-row-even {
+  background-color: #EFEFEF;
+}
+
+.tabulator-row.tabulator-selectable:hover {
+  background-color: #bbb;
+  cursor: pointer;
+}
+
+.tabulator-row.tabulator-selected {
+  background-color: #9ABCEA;
+}
+
+.tabulator-row.tabulator-selected:hover {
+  background-color: #769BCC;
+  cursor: pointer;
+}
+
+.tabulator-row.tabulator-row-moving {
+  border: 1px solid #000;
+  background: #fff;
+}
+
+.tabulator-row.tabulator-moving {
+  position: absolute;
+  border-top: 1px solid #aaa;
+  border-bottom: 1px solid #aaa;
+  pointer-events: none;
+  z-index: 15;
+}
+
+.tabulator-row .tabulator-row-resize-handle {
+  position: absolute;
+  right: 0;
+  bottom: 0;
+  left: 0;
+  height: 5px;
+}
+
+.tabulator-row .tabulator-row-resize-handle.prev {
+  top: 0;
+  bottom: auto;
+}
+
+.tabulator-row .tabulator-row-resize-handle:hover {
+  cursor: ns-resize;
+}
+
+.tabulator-row .tabulator-frozen {
+  display: inline-block;
+  position: absolute;
+  background-color: inherit;
+  z-index: 10;
+}
+
+.tabulator-row .tabulator-frozen.tabulator-frozen-left {
+  border-right: 2px solid #aaa;
+}
+
+.tabulator-row .tabulator-frozen.tabulator-frozen-right {
+  border-left: 2px solid #aaa;
+}
+
+.tabulator-row .tabulator-responsive-collapse {
+  box-sizing: border-box;
+  padding: 5px;
+  border-top: 1px solid #aaa;
+  border-bottom: 1px solid #aaa;
+}
+
+.tabulator-row .tabulator-responsive-collapse:empty {
+  display: none;
+}
+
+.tabulator-row .tabulator-responsive-collapse table {
+  font-size: 14px;
+}
+
+.tabulator-row .tabulator-responsive-collapse table tr td {
+  position: relative;
+}
+
+.tabulator-row .tabulator-responsive-collapse table tr td:first-of-type {
+  padding-right: 10px;
+}
+
+.tabulator-row .tabulator-cell {
+  display: inline-block;
+  position: relative;
+  box-sizing: border-box;
+  padding: 4px;
+  border-right: 1px solid #aaa;
+  vertical-align: middle;
+  white-space: nowrap;
+  overflow: hidden;
+  text-overflow: ellipsis;
+}
+
+.tabulator-row .tabulator-cell.tabulator-editing {
+  border: 1px solid #1D68CD;
+  padding: 0;
+}
+
+.tabulator-row .tabulator-cell.tabulator-editing input, .tabulator-row .tabulator-cell.tabulator-editing select {
+  border: 1px;
+  background: transparent;
+}
+
+.tabulator-row .tabulator-cell.tabulator-validation-fail {
+  border: 1px solid #dd0000;
+}
+
+.tabulator-row .tabulator-cell.tabulator-validation-fail input, .tabulator-row .tabulator-cell.tabulator-validation-fail select {
+  border: 1px;
+  background: transparent;
+  color: #dd0000;
+}
+
+.tabulator-row .tabulator-cell:first-child .tabulator-col-resize-handle.prev {
+  display: none;
+}
+
+.tabulator-row .tabulator-cell.tabulator-row-handle {
+  display: -ms-inline-flexbox;
+  display: inline-flex;
+  -ms-flex-align: center;
+      align-items: center;
+  -ms-flex-pack: center;
+      justify-content: center;
+  -moz-user-select: none;
+  -khtml-user-select: none;
+  -webkit-user-select: none;
+  -o-user-select: none;
+}
+
+.tabulator-row .tabulator-cell.tabulator-row-handle .tabulator-row-handle-box {
+  width: 80%;
+}
+
+.tabulator-row .tabulator-cell.tabulator-row-handle .tabulator-row-handle-box .tabulator-row-handle-bar {
+  width: 100%;
+  height: 3px;
+  margin-top: 2px;
+  background: #666;
+}
+
+.tabulator-row .tabulator-cell .tabulator-data-tree-branch {
+  display: inline-block;
+  vertical-align: middle;
+  height: 9px;
+  width: 7px;
+  margin-top: -9px;
+  margin-right: 5px;
+  border-bottom-left-radius: 1px;
+  border-left: 2px solid #aaa;
+  border-bottom: 2px solid #aaa;
+}
+
+.tabulator-row .tabulator-cell .tabulator-data-tree-control {
+  display: -ms-inline-flexbox;
+  display: inline-flex;
+  -ms-flex-pack: center;
+      justify-content: center;
+  -ms-flex-align: center;
+      align-items: center;
+  vertical-align: middle;
+  height: 11px;
+  width: 11px;
+  margin-right: 5px;
+  border: 1px solid #333;
+  border-radius: 2px;
+  background: rgba(0, 0, 0, 0.1);
+  overflow: hidden;
+}
+
+.tabulator-row .tabulator-cell .tabulator-data-tree-control:hover {
+  cursor: pointer;
+  background: rgba(0, 0, 0, 0.2);
+}
+
+.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-collapse {
+  display: inline-block;
+  position: relative;
+  height: 7px;
+  width: 1px;
+  background: transparent;
+}
+
+.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-collapse:after {
+  position: absolute;
+  content: "";
+  left: -3px;
+  top: 3px;
+  height: 1px;
+  width: 7px;
+  background: #333;
+}
+
+.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand {
+  display: inline-block;
+  position: relative;
+  height: 7px;
+  width: 1px;
+  background: #333;
+}
+
+.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand:after {
+  position: absolute;
+  content: "";
+  left: -3px;
+  top: 3px;
+  height: 1px;
+  width: 7px;
+  background: #333;
+}
+
+.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle {
+  display: -ms-inline-flexbox;
+  display: inline-flex;
+  -ms-flex-align: center;
+      align-items: center;
+  -ms-flex-pack: center;
+      justify-content: center;
+  -moz-user-select: none;
+  -khtml-user-select: none;
+  -webkit-user-select: none;
+  -o-user-select: none;
+  height: 15px;
+  width: 15px;
+  border-radius: 20px;
+  background: #666;
+  color: #fff;
+  font-weight: bold;
+  font-size: 1.1em;
+}
+
+.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle:hover {
+  opacity: .7;
+}
+
+.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle.open .tabulator-responsive-collapse-toggle-close {
+  display: initial;
+}
+
+.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle.open .tabulator-responsive-collapse-toggle-open {
+  display: none;
+}
+
+.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle .tabulator-responsive-collapse-toggle-close {
+  display: none;
+}
+
+.tabulator-row .tabulator-cell .tabulator-traffic-light {
+  display: inline-block;
+  height: 14px;
+  width: 14px;
+  border-radius: 14px;
+}
+
+.tabulator-row.tabulator-group {
+  box-sizing: border-box;
+  border-bottom: 1px solid #999;
+  border-right: 1px solid #aaa;
+  border-top: 1px solid #999;
+  padding: 5px;
+  padding-left: 10px;
+  background: #ccc;
+  font-weight: bold;
+  min-width: 100%;
+}
+
+.tabulator-row.tabulator-group:hover {
+  cursor: pointer;
+  background-color: rgba(0, 0, 0, 0.1);
+}
+
+.tabulator-row.tabulator-group.tabulator-group-visible .tabulator-arrow {
+  margin-right: 10px;
+  border-left: 6px solid transparent;
+  border-right: 6px solid transparent;
+  border-top: 6px solid #666;
+  border-bottom: 0;
+}
+
+.tabulator-row.tabulator-group.tabulator-group-level-1 {
+  padding-left: 30px;
+}
+
+.tabulator-row.tabulator-group.tabulator-group-level-2 {
+  padding-left: 50px;
+}
+
+.tabulator-row.tabulator-group.tabulator-group-level-3 {
+  padding-left: 70px;
+}
+
+.tabulator-row.tabulator-group.tabulator-group-level-4 {
+  padding-left: 90px;
+}
+
+.tabulator-row.tabulator-group.tabulator-group-level-5 {
+  padding-left: 110px;
+}
+
+.tabulator-row.tabulator-group .tabulator-group-toggle {
+  display: inline-block;
+}
+
+.tabulator-row.tabulator-group .tabulator-arrow {
+  display: inline-block;
+  width: 0;
+  height: 0;
+  margin-right: 16px;
+  border-top: 6px solid transparent;
+  border-bottom: 6px solid transparent;
+  border-right: 0;
+  border-left: 6px solid #666;
+  vertical-align: middle;
+}
+
+.tabulator-row.tabulator-group span {
+  margin-left: 10px;
+  color: #d00;
+}
+
+.tabulator-menu {
+  position: absolute;
+  display: inline-block;
+  box-sizing: border-box;
+  background: #fff;
+  border: 1px solid #aaa;
+  box-shadow: 0 0 5px 0 rgba(0, 0, 0, 0.2);
+  font-size: 14px;
+  overflow-y: auto;
+  -webkit-overflow-scrolling: touch;
+  z-index: 10000;
+}
+
+.tabulator-menu .tabulator-menu-item {
+  padding: 5px 10px;
+  -webkit-user-select: none;
+      -ms-user-select: none;
+          user-select: none;
+}
+
+.tabulator-menu .tabulator-menu-item.tabulator-menu-item-disabled {
+  opacity: .5;
+}
+
+.tabulator-menu .tabulator-menu-item:not(.tabulator-menu-item-disabled):hover {
+  cursor: pointer;
+  background: #EFEFEF;
+}
+
+.tabulator-menu .tabulator-menu-separator {
+  border-top: 1px solid #aaa;
+}
+
+.tabulator-edit-select-list {
+  position: absolute;
+  display: inline-block;
+  box-sizing: border-box;
+  max-height: 200px;
+  background: #fff;
+  border: 1px solid #aaa;
+  font-size: 14px;
+  overflow-y: auto;
+  -webkit-overflow-scrolling: touch;
+  z-index: 10000;
+}
+
+.tabulator-edit-select-list .tabulator-edit-select-list-item {
+  padding: 4px;
+  color: #333;
+}
+
+.tabulator-edit-select-list .tabulator-edit-select-list-item.active {
+  color: #fff;
+  background: #1D68CD;
+}
+
+.tabulator-edit-select-list .tabulator-edit-select-list-item.active.focused {
+  outline: 1px solid rgba(255, 255, 255, 0.5);
+}
+
+.tabulator-edit-select-list .tabulator-edit-select-list-item.focused {
+  outline: 1px solid #1D68CD;
+}
+
+.tabulator-edit-select-list .tabulator-edit-select-list-item:hover {
+  cursor: pointer;
+  color: #fff;
+  background: #1D68CD;
+}
+
+.tabulator-edit-select-list .tabulator-edit-select-list-notice {
+  padding: 4px;
+  color: #333;
+  text-align: center;
+}
+
+.tabulator-edit-select-list .tabulator-edit-select-list-group {
+  border-bottom: 1px solid #aaa;
+  padding: 4px;
+  padding-top: 6px;
+  color: #333;
+  font-weight: bold;
+}
+
+.tabulator.tabulator-ltr {
+  direction: ltr;
+}
+
+.tabulator.tabulator-rtl {
+  text-align: initial;
+  direction: rtl;
+}
+
+.tabulator.tabulator-rtl .tabulator-header .tabulator-col {
+  text-align: initial;
+  border-left: 1px solid #aaa;
+  border-right: initial;
+}
+
+.tabulator.tabulator-rtl .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols {
+  margin-right: initial;
+  margin-left: -1px;
+}
+
+.tabulator.tabulator-rtl .tabulator-header .tabulator-col.tabulator-sortable .tabulator-col-title {
+  padding-right: 0;
+  padding-left: 25px;
+}
+
+.tabulator.tabulator-rtl .tabulator-header .tabulator-col .tabulator-col-content .tabulator-arrow {
+  left: 8px;
+  right: initial;
+}
+
+.tabulator.tabulator-rtl .tabulator-row .tabulator-cell {
+  border-right: initial;
+  border-left: 1px solid #aaa;
+}
+
+.tabulator.tabulator-rtl .tabulator-row .tabulator-cell .tabulator-data-tree-branch {
+  margin-right: initial;
+  margin-left: 5px;
+  border-bottom-left-radius: initial;
+  border-bottom-right-radius: 1px;
+  border-left: initial;
+  border-right: 2px solid #aaa;
+}
+
+.tabulator.tabulator-rtl .tabulator-row .tabulator-cell .tabulator-data-tree-control {
+  margin-right: initial;
+  margin-left: 5px;
+}
+
+.tabulator.tabulator-rtl .tabulator-col-resize-handle {
+  position: absolute;
+  left: 0;
+  right: auto;
+}
+
+.tabulator.tabulator-rtl .tabulator-col-resize-handle.prev {
+  right: 0;
+  left: auto;
+}
+
+.tabulator-print-fullscreen {
+  position: absolute;
+  top: 0;
+  bottom: 0;
+  left: 0;
+  right: 0;
+  z-index: 10000;
+}
+
+body.tabulator-print-fullscreen-hide > *:not(.tabulator-print-fullscreen) {
+  display: none !important;
+}
+
+.tabulator-print-table {
+  border-collapse: collapse;
+}
+
+.tabulator-print-table .tabulator-data-tree-branch {
+  display: inline-block;
+  vertical-align: middle;
+  height: 9px;
+  width: 7px;
+  margin-top: -9px;
+  margin-right: 5px;
+  border-bottom-left-radius: 1px;
+  border-left: 2px solid #aaa;
+  border-bottom: 2px solid #aaa;
+}
+
+.tabulator-print-table .tabulator-print-table-group {
+  box-sizing: border-box;
+  border-bottom: 1px solid #999;
+  border-right: 1px solid #aaa;
+  border-top: 1px solid #999;
+  padding: 5px;
+  padding-left: 10px;
+  background: #ccc;
+  font-weight: bold;
+  min-width: 100%;
+}
+
+.tabulator-print-table .tabulator-print-table-group:hover {
+  cursor: pointer;
+  background-color: rgba(0, 0, 0, 0.1);
+}
+
+.tabulator-print-table .tabulator-print-table-group.tabulator-group-visible .tabulator-arrow {
+  margin-right: 10px;
+  border-left: 6px solid transparent;
+  border-right: 6px solid transparent;
+  border-top: 6px solid #666;
+  border-bottom: 0;
+}
+
+.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-1 td {
+  padding-left: 30px !important;
+}
+
+.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-2 td {
+  padding-left: 50px !important;
+}
+
+.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-3 td {
+  padding-left: 70px !important;
+}
+
+.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-4 td {
+  padding-left: 90px !important;
+}
+
+.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-5 td {
+  padding-left: 110px !important;
+}
+
+.tabulator-print-table .tabulator-print-table-group .tabulator-group-toggle {
+  display: inline-block;
+}
+
+.tabulator-print-table .tabulator-print-table-group .tabulator-arrow {
+  display: inline-block;
+  width: 0;
+  height: 0;
+  margin-right: 16px;
+  border-top: 6px solid transparent;
+  border-bottom: 6px solid transparent;
+  border-right: 0;
+  border-left: 6px solid #666;
+  vertical-align: middle;
+}
+
+.tabulator-print-table .tabulator-print-table-group span {
+  margin-left: 10px;
+  color: #d00;
+}
+
+.tabulator-print-table .tabulator-data-tree-control {
+  display: -ms-inline-flexbox;
+  display: inline-flex;
+  -ms-flex-pack: center;
+      justify-content: center;
+  -ms-flex-align: center;
+      align-items: center;
+  vertical-align: middle;
+  height: 11px;
+  width: 11px;
+  margin-right: 5px;
+  border: 1px solid #333;
+  border-radius: 2px;
+  background: rgba(0, 0, 0, 0.1);
+  overflow: hidden;
+}
+
+.tabulator-print-table .tabulator-data-tree-control:hover {
+  cursor: pointer;
+  background: rgba(0, 0, 0, 0.2);
+}
+
+.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-collapse {
+  display: inline-block;
+  position: relative;
+  height: 7px;
+  width: 1px;
+  background: transparent;
+}
+
+.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-collapse:after {
+  position: absolute;
+  content: "";
+  left: -3px;
+  top: 3px;
+  height: 1px;
+  width: 7px;
+  background: #333;
+}
+
+.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-expand {
+  display: inline-block;
+  position: relative;
+  height: 7px;
+  width: 1px;
+  background: #333;
+}
+
+.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-expand:after {
+  position: absolute;
+  content: "";
+  left: -3px;
+  top: 3px;
+  height: 1px;
+  width: 7px;
+  background: #333;
+}
diff --git a/website/js/vendor/tabulator/css/tabulator.min.css b/website/js/vendor/tabulator/css/tabulator.min.css
new file mode 100644 (file)
index 0000000..92a0dd0
--- /dev/null
@@ -0,0 +1,3 @@
+/* Tabulator v4.8.3 (c) Oliver Folkerd */
+.tabulator{position:relative;border:1px solid #999;background-color:#888;font-size:14px;text-align:left;overflow:hidden;transform:translatez(0)}.tabulator[tabulator-layout=fitDataFill] .tabulator-tableHolder .tabulator-table{min-width:100%}.tabulator[tabulator-layout=fitDataTable]{display:inline-block}.tabulator.tabulator-block-select{-webkit-user-select:none;-ms-user-select:none;user-select:none}.tabulator .tabulator-header{position:relative;box-sizing:border-box;width:100%;border-bottom:1px solid #999;background-color:#e6e6e6;color:#555;font-weight:700;white-space:nowrap;overflow:hidden;-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-o-user-select:none}.tabulator .tabulator-header.tabulator-header-hidden{display:none}.tabulator .tabulator-header .tabulator-col{display:inline-block;position:relative;box-sizing:border-box;border-right:1px solid #aaa;background:#e6e6e6;text-align:left;vertical-align:bottom;overflow:hidden}.tabulator .tabulator-header .tabulator-col.tabulator-moving{position:absolute;border:1px solid #999;background:#cdcdcd;pointer-events:none}.tabulator .tabulator-header .tabulator-col .tabulator-col-content{box-sizing:border-box;position:relative;padding:4px}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-header-menu-button{padding:0 8px}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-header-menu-button:hover{cursor:pointer;opacity:.6}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title-holder{position:relative}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title{box-sizing:border-box;width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;vertical-align:bottom}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title .tabulator-title-editor{box-sizing:border-box;width:100%;border:1px solid #999;padding:1px;background:#fff}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title .tabulator-header-menu-button+.tabulator-title-editor{width:calc(100% - 22px)}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-sorter{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;position:absolute;top:0;bottom:0;right:4px}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-sorter .tabulator-arrow{width:0;height:0;border-left:6px solid transparent;border-right:6px solid transparent;border-bottom:6px solid #bbb}.tabulator .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols{position:relative;display:-ms-flexbox;display:flex;border-top:1px solid #aaa;overflow:hidden;margin-right:-1px}.tabulator .tabulator-header .tabulator-col:first-child .tabulator-col-resize-handle.prev{display:none}.tabulator .tabulator-header .tabulator-col .tabulator-header-filter{position:relative;box-sizing:border-box;margin-top:2px;width:100%;text-align:center}.tabulator .tabulator-header .tabulator-col .tabulator-header-filter textarea{height:auto!important}.tabulator .tabulator-header .tabulator-col .tabulator-header-filter svg{margin-top:3px}.tabulator .tabulator-header .tabulator-col .tabulator-header-filter input::-ms-clear{width:0;height:0}.tabulator .tabulator-header .tabulator-col.tabulator-sortable .tabulator-col-title{padding-right:25px}.tabulator .tabulator-header .tabulator-col.tabulator-sortable:hover{cursor:pointer;background-color:#cdcdcd}.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=none] .tabulator-col-content .tabulator-col-sorter{color:#bbb}.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=none] .tabulator-col-content .tabulator-col-sorter .tabulator-arrow{border-top:none;border-bottom:6px solid #bbb}.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=asc] .tabulator-col-content .tabulator-col-sorter{color:#666}.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=asc] .tabulator-col-content .tabulator-col-sorter .tabulator-arrow{border-top:none;border-bottom:6px solid #666}.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=desc] .tabulator-col-content .tabulator-col-sorter{color:#666}.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=desc] .tabulator-col-content .tabulator-col-sorter .tabulator-arrow{border-bottom:none;border-top:6px solid #666;color:#666}.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical .tabulator-col-content .tabulator-col-title{-ms-writing-mode:tb-rl;writing-mode:vertical-rl;text-orientation:mixed;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center}.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-col-vertical-flip .tabulator-col-title{transform:rotate(180deg)}.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable .tabulator-col-title{padding-right:0;padding-top:20px}.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable.tabulator-col-vertical-flip .tabulator-col-title{padding-right:0;padding-bottom:20px}.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable .tabulator-col-sorter{-ms-flex-pack:center;justify-content:center;left:0;right:0;top:4px;bottom:auto}.tabulator .tabulator-header .tabulator-frozen{display:inline-block;position:absolute;z-index:10}.tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-left{border-right:2px solid #aaa}.tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-right{border-left:2px solid #aaa}.tabulator .tabulator-header .tabulator-calcs-holder{box-sizing:border-box;min-width:600%;background:#f3f3f3!important;border-top:1px solid #aaa;border-bottom:1px solid #aaa;overflow:hidden}.tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row{background:#f3f3f3!important}.tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row .tabulator-col-resize-handle{display:none}.tabulator .tabulator-header .tabulator-frozen-rows-holder{min-width:600%}.tabulator .tabulator-header .tabulator-frozen-rows-holder:empty{display:none}.tabulator .tabulator-tableHolder{position:relative;width:100%;white-space:nowrap;overflow:auto;-webkit-overflow-scrolling:touch}.tabulator .tabulator-tableHolder:focus{outline:none}.tabulator .tabulator-tableHolder .tabulator-placeholder{box-sizing:border-box;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;width:100%}.tabulator .tabulator-tableHolder .tabulator-placeholder[tabulator-render-mode=virtual]{min-height:100%;min-width:100%}.tabulator .tabulator-tableHolder .tabulator-placeholder span{display:inline-block;margin:0 auto;padding:10px;color:#ccc;font-weight:700;font-size:20px}.tabulator .tabulator-tableHolder .tabulator-table{position:relative;display:inline-block;background-color:#fff;white-space:nowrap;overflow:visible;color:#333}.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.tabulator-calcs{font-weight:700;background:#e2e2e2!important}.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.tabulator-calcs.tabulator-calcs-top{border-bottom:2px solid #aaa}.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.tabulator-calcs.tabulator-calcs-bottom{border-top:2px solid #aaa}.tabulator .tabulator-footer{padding:5px 10px;border-top:1px solid #999;background-color:#e6e6e6;text-align:right;color:#555;font-weight:700;white-space:nowrap;-ms-user-select:none;user-select:none;-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-o-user-select:none}.tabulator .tabulator-footer .tabulator-calcs-holder{box-sizing:border-box;width:calc(100% + 20px);margin:-5px -10px 5px;text-align:left;background:#f3f3f3!important;border-bottom:1px solid #aaa;border-top:1px solid #aaa;overflow:hidden}.tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row{background:#f3f3f3!important}.tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row .tabulator-col-resize-handle{display:none}.tabulator .tabulator-footer .tabulator-calcs-holder:only-child{margin-bottom:-5px;border-bottom:none}.tabulator .tabulator-footer .tabulator-paginator{color:#555;font-family:inherit;font-weight:inherit;font-size:inherit}.tabulator .tabulator-footer .tabulator-page-size{display:inline-block;margin:0 5px;padding:2px 5px;border:1px solid #aaa;border-radius:3px}.tabulator .tabulator-footer .tabulator-pages{margin:0 7px}.tabulator .tabulator-footer .tabulator-page{display:inline-block;margin:0 2px;padding:2px 5px;border:1px solid #aaa;border-radius:3px;background:hsla(0,0%,100%,.2)}.tabulator .tabulator-footer .tabulator-page.active{color:#d00}.tabulator .tabulator-footer .tabulator-page:disabled{opacity:.5}.tabulator .tabulator-footer .tabulator-page:not(.disabled):hover{cursor:pointer;background:rgba(0,0,0,.2);color:#fff}.tabulator .tabulator-col-resize-handle{position:absolute;right:0;top:0;bottom:0;width:5px}.tabulator .tabulator-col-resize-handle.prev{left:0;right:auto}.tabulator .tabulator-col-resize-handle:hover{cursor:ew-resize}.tabulator .tabulator-loader{position:absolute;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;top:0;left:0;z-index:100;height:100%;width:100%;background:rgba(0,0,0,.4);text-align:center}.tabulator .tabulator-loader .tabulator-loader-msg{display:inline-block;margin:0 auto;padding:10px 20px;border-radius:10px;background:#fff;font-weight:700;font-size:16px}.tabulator .tabulator-loader .tabulator-loader-msg.tabulator-loading{border:4px solid #333;color:#000}.tabulator .tabulator-loader .tabulator-loader-msg.tabulator-error{border:4px solid #d00;color:#590000}.tabulator-row{position:relative;box-sizing:border-box;min-height:22px;background-color:#fff}.tabulator-row.tabulator-row-even{background-color:#efefef}.tabulator-row.tabulator-selectable:hover{background-color:#bbb;cursor:pointer}.tabulator-row.tabulator-selected{background-color:#9abcea}.tabulator-row.tabulator-selected:hover{background-color:#769bcc;cursor:pointer}.tabulator-row.tabulator-row-moving{border:1px solid #000;background:#fff}.tabulator-row.tabulator-moving{position:absolute;border-top:1px solid #aaa;border-bottom:1px solid #aaa;pointer-events:none;z-index:15}.tabulator-row .tabulator-row-resize-handle{position:absolute;right:0;bottom:0;left:0;height:5px}.tabulator-row .tabulator-row-resize-handle.prev{top:0;bottom:auto}.tabulator-row .tabulator-row-resize-handle:hover{cursor:ns-resize}.tabulator-row .tabulator-frozen{display:inline-block;position:absolute;background-color:inherit;z-index:10}.tabulator-row .tabulator-frozen.tabulator-frozen-left{border-right:2px solid #aaa}.tabulator-row .tabulator-frozen.tabulator-frozen-right{border-left:2px solid #aaa}.tabulator-row .tabulator-responsive-collapse{box-sizing:border-box;padding:5px;border-top:1px solid #aaa;border-bottom:1px solid #aaa}.tabulator-row .tabulator-responsive-collapse:empty{display:none}.tabulator-row .tabulator-responsive-collapse table{font-size:14px}.tabulator-row .tabulator-responsive-collapse table tr td{position:relative}.tabulator-row .tabulator-responsive-collapse table tr td:first-of-type{padding-right:10px}.tabulator-row .tabulator-cell{display:inline-block;position:relative;box-sizing:border-box;padding:4px;border-right:1px solid #aaa;vertical-align:middle;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.tabulator-row .tabulator-cell.tabulator-editing{border:1px solid #1d68cd;padding:0}.tabulator-row .tabulator-cell.tabulator-editing input,.tabulator-row .tabulator-cell.tabulator-editing select{border:1px;background:transparent}.tabulator-row .tabulator-cell.tabulator-validation-fail{border:1px solid #d00}.tabulator-row .tabulator-cell.tabulator-validation-fail input,.tabulator-row .tabulator-cell.tabulator-validation-fail select{border:1px;background:transparent;color:#d00}.tabulator-row .tabulator-cell:first-child .tabulator-col-resize-handle.prev{display:none}.tabulator-row .tabulator-cell.tabulator-row-handle{display:-ms-inline-flexbox;display:inline-flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-o-user-select:none}.tabulator-row .tabulator-cell.tabulator-row-handle .tabulator-row-handle-box{width:80%}.tabulator-row .tabulator-cell.tabulator-row-handle .tabulator-row-handle-box .tabulator-row-handle-bar{width:100%;height:3px;margin-top:2px;background:#666}.tabulator-row .tabulator-cell .tabulator-data-tree-branch{display:inline-block;vertical-align:middle;height:9px;width:7px;margin-top:-9px;margin-right:5px;border-bottom-left-radius:1px;border-left:2px solid #aaa;border-bottom:2px solid #aaa}.tabulator-row .tabulator-cell .tabulator-data-tree-control{display:-ms-inline-flexbox;display:inline-flex;-ms-flex-pack:center;justify-content:center;-ms-flex-align:center;align-items:center;vertical-align:middle;height:11px;width:11px;margin-right:5px;border:1px solid #333;border-radius:2px;background:rgba(0,0,0,.1);overflow:hidden}.tabulator-row .tabulator-cell .tabulator-data-tree-control:hover{cursor:pointer;background:rgba(0,0,0,.2)}.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-collapse{display:inline-block;position:relative;height:7px;width:1px;background:transparent}.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-collapse:after{position:absolute;content:"";left:-3px;top:3px;height:1px;width:7px;background:#333}.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand{display:inline-block;position:relative;height:7px;width:1px;background:#333}.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand:after{position:absolute;content:"";left:-3px;top:3px;height:1px;width:7px;background:#333}.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle{display:-ms-inline-flexbox;display:inline-flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-o-user-select:none;height:15px;width:15px;border-radius:20px;background:#666;color:#fff;font-weight:700;font-size:1.1em}.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle:hover{opacity:.7}.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle.open .tabulator-responsive-collapse-toggle-close{display:initial}.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle.open .tabulator-responsive-collapse-toggle-open,.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle .tabulator-responsive-collapse-toggle-close{display:none}.tabulator-row .tabulator-cell .tabulator-traffic-light{display:inline-block;height:14px;width:14px;border-radius:14px}.tabulator-row.tabulator-group{box-sizing:border-box;border-bottom:1px solid #999;border-right:1px solid #aaa;border-top:1px solid #999;padding:5px;padding-left:10px;background:#ccc;font-weight:700;min-width:100%}.tabulator-row.tabulator-group:hover{cursor:pointer;background-color:rgba(0,0,0,.1)}.tabulator-row.tabulator-group.tabulator-group-visible .tabulator-arrow{margin-right:10px;border-left:6px solid transparent;border-right:6px solid transparent;border-top:6px solid #666;border-bottom:0}.tabulator-row.tabulator-group.tabulator-group-level-1{padding-left:30px}.tabulator-row.tabulator-group.tabulator-group-level-2{padding-left:50px}.tabulator-row.tabulator-group.tabulator-group-level-3{padding-left:70px}.tabulator-row.tabulator-group.tabulator-group-level-4{padding-left:90px}.tabulator-row.tabulator-group.tabulator-group-level-5{padding-left:110px}.tabulator-row.tabulator-group .tabulator-group-toggle{display:inline-block}.tabulator-row.tabulator-group .tabulator-arrow{display:inline-block;width:0;height:0;margin-right:16px;border-top:6px solid transparent;border-bottom:6px solid transparent;border-right:0;border-left:6px solid #666;vertical-align:middle}.tabulator-row.tabulator-group span{margin-left:10px;color:#d00}.tabulator-menu{position:absolute;display:inline-block;box-sizing:border-box;background:#fff;border:1px solid #aaa;box-shadow:0 0 5px 0 rgba(0,0,0,.2);font-size:14px;overflow-y:auto;-webkit-overflow-scrolling:touch;z-index:10000}.tabulator-menu .tabulator-menu-item{padding:5px 10px;-webkit-user-select:none;-ms-user-select:none;user-select:none}.tabulator-menu .tabulator-menu-item.tabulator-menu-item-disabled{opacity:.5}.tabulator-menu .tabulator-menu-item:not(.tabulator-menu-item-disabled):hover{cursor:pointer;background:#efefef}.tabulator-menu .tabulator-menu-separator{border-top:1px solid #aaa}.tabulator-edit-select-list{position:absolute;display:inline-block;box-sizing:border-box;max-height:200px;background:#fff;border:1px solid #aaa;font-size:14px;overflow-y:auto;-webkit-overflow-scrolling:touch;z-index:10000}.tabulator-edit-select-list .tabulator-edit-select-list-item{padding:4px;color:#333}.tabulator-edit-select-list .tabulator-edit-select-list-item.active{color:#fff;background:#1d68cd}.tabulator-edit-select-list .tabulator-edit-select-list-item.active.focused{outline:1px solid hsla(0,0%,100%,.5)}.tabulator-edit-select-list .tabulator-edit-select-list-item.focused{outline:1px solid #1d68cd}.tabulator-edit-select-list .tabulator-edit-select-list-item:hover{cursor:pointer;color:#fff;background:#1d68cd}.tabulator-edit-select-list .tabulator-edit-select-list-notice{padding:4px;color:#333;text-align:center}.tabulator-edit-select-list .tabulator-edit-select-list-group{border-bottom:1px solid #aaa;padding:4px;padding-top:6px;color:#333;font-weight:700}.tabulator.tabulator-ltr{direction:ltr}.tabulator.tabulator-rtl{text-align:initial;direction:rtl}.tabulator.tabulator-rtl .tabulator-header .tabulator-col{text-align:initial;border-left:1px solid #aaa;border-right:initial}.tabulator.tabulator-rtl .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols{margin-right:0;margin-left:-1px}.tabulator.tabulator-rtl .tabulator-header .tabulator-col.tabulator-sortable .tabulator-col-title{padding-right:0;padding-left:25px}.tabulator.tabulator-rtl .tabulator-header .tabulator-col .tabulator-col-content .tabulator-arrow{left:8px;right:auto}.tabulator.tabulator-rtl .tabulator-row .tabulator-cell{border-right:initial;border-left:1px solid #aaa}.tabulator.tabulator-rtl .tabulator-row .tabulator-cell .tabulator-data-tree-branch{margin-right:0;margin-left:5px;border-bottom-left-radius:0;border-bottom-right-radius:1px;border-left:initial;border-right:2px solid #aaa}.tabulator.tabulator-rtl .tabulator-row .tabulator-cell .tabulator-data-tree-control{margin-right:0;margin-left:5px}.tabulator.tabulator-rtl .tabulator-col-resize-handle{position:absolute;left:0;right:auto}.tabulator.tabulator-rtl .tabulator-col-resize-handle.prev{right:0;left:auto}.tabulator-print-fullscreen{position:absolute;top:0;bottom:0;left:0;right:0;z-index:10000}body.tabulator-print-fullscreen-hide>:not(.tabulator-print-fullscreen){display:none!important}.tabulator-print-table{border-collapse:collapse}.tabulator-print-table .tabulator-data-tree-branch{display:inline-block;vertical-align:middle;height:9px;width:7px;margin-top:-9px;margin-right:5px;border-bottom-left-radius:1px;border-left:2px solid #aaa;border-bottom:2px solid #aaa}.tabulator-print-table .tabulator-print-table-group{box-sizing:border-box;border-bottom:1px solid #999;border-right:1px solid #aaa;border-top:1px solid #999;padding:5px;padding-left:10px;background:#ccc;font-weight:700;min-width:100%}.tabulator-print-table .tabulator-print-table-group:hover{cursor:pointer;background-color:rgba(0,0,0,.1)}.tabulator-print-table .tabulator-print-table-group.tabulator-group-visible .tabulator-arrow{margin-right:10px;border-left:6px solid transparent;border-right:6px solid transparent;border-top:6px solid #666;border-bottom:0}.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-1 td{padding-left:30px!important}.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-2 td{padding-left:50px!important}.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-3 td{padding-left:70px!important}.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-4 td{padding-left:90px!important}.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-5 td{padding-left:110px!important}.tabulator-print-table .tabulator-print-table-group .tabulator-group-toggle{display:inline-block}.tabulator-print-table .tabulator-print-table-group .tabulator-arrow{display:inline-block;width:0;height:0;margin-right:16px;border-top:6px solid transparent;border-bottom:6px solid transparent;border-right:0;border-left:6px solid #666;vertical-align:middle}.tabulator-print-table .tabulator-print-table-group span{margin-left:10px;color:#d00}.tabulator-print-table .tabulator-data-tree-control{display:-ms-inline-flexbox;display:inline-flex;-ms-flex-pack:center;justify-content:center;-ms-flex-align:center;align-items:center;vertical-align:middle;height:11px;width:11px;margin-right:5px;border:1px solid #333;border-radius:2px;background:rgba(0,0,0,.1);overflow:hidden}.tabulator-print-table .tabulator-data-tree-control:hover{cursor:pointer;background:rgba(0,0,0,.2)}.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-collapse{display:inline-block;position:relative;height:7px;width:1px;background:transparent}.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-collapse:after{position:absolute;content:"";left:-3px;top:3px;height:1px;width:7px;background:#333}.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-expand{display:inline-block;position:relative;height:7px;width:1px;background:#333}.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-expand:after{position:absolute;content:"";left:-3px;top:3px;height:1px;width:7px;background:#333}
+/*# sourceMappingURL=tabulator.min.css.map */
diff --git a/website/js/vendor/tabulator/css/tabulator.min.css.map b/website/js/vendor/tabulator/css/tabulator.min.css.map
new file mode 100644 (file)
index 0000000..8924b90
--- /dev/null
@@ -0,0 +1 @@
+{"version":3,"sources":["tabulator.scss"],"names":[],"mappings":"AA0CA,WACC,kBAAkB,AAElB,sBAxCgB,AA0ChB,sBA3CqB,AA6CrB,eA3Ca,AA4Cb,gBAAgB,AAChB,gBAAe,AAMf,uBAAwB,CAyhBxB,AAxiBD,iFAoBI,cAAc,CACd,AArBJ,0CA0BE,oBAAqB,CACrB,AA3BF,kCA8BE,yBAAiB,AAAjB,qBAAiB,AAAjB,gBAAiB,CACjB,AA/BF,6BAmCE,kBAAiB,AACjB,sBAAsB,AAEtB,WAAU,AAEV,6BAtEwB,AAuExB,yBA1E4B,AA2E5B,WA1EmB,AA2EnB,gBAAgB,AAEhB,mBAAmB,AACnB,gBAAe,AAEf,sBAAsB,AACtB,wBAAwB,AACxB,yBAAyB,AACzB,mBAAoB,CAoRpB,AAvUF,qDAsDG,YAAY,CACZ,AAvDH,4CA2DG,qBAAoB,AACpB,kBAAiB,AACjB,sBAAqB,AACrB,4BA7FoB,AA8FpB,mBAhG2B,AAiG3B,gBAAe,AACf,sBAAsB,AACtB,eAAgB,CAsNhB,AAxRH,6DAqEI,kBAAkB,AAClB,sBApGsB,AAqGtB,mBAA8C,AAC9C,mBAAoB,CACpB,AAzEJ,mEA6EI,sBAAqB,AACrB,kBAAkB,AAClB,WAAW,CA+DX,AA9IJ,iGAmFK,aAAc,CAMd,AAzFL,uGAsFM,eAAe,AACf,UAAW,CACX,AAxFN,+FA6FK,iBAAkB,CAClB,AA9FL,wFAkGK,sBAAqB,AACrB,WAAW,AAEX,mBAAmB,AACnB,gBAAgB,AAChB,uBAAuB,AACvB,qBAAqB,CAiBrB,AAzHL,gHA4GM,sBAAsB,AACtB,WAAW,AAEX,sBAAqB,AAErB,YAAW,AAEX,eAAgB,CAChB,AApHN,8IAuHM,uBAAuB,CACvB,AAxHN,yFA6HK,oBAAa,AAAb,aAAa,AACb,sBAAmB,AAAnB,mBAAmB,AAEnB,kBAAkB,AAClB,MAAK,AACL,SAAQ,AACR,SAAS,CAST,AA5IL,0GAsIM,QAAQ,AACR,SAAS,AACT,kCAAkC,AAClC,mCAAmC,AACnC,4BAnKkB,CAoKlB,AA3IN,0FAqJK,kBAAiB,AACjB,oBAAa,AAAb,aAAa,AAEb,0BAvLkB,AAwLlB,gBAAgB,AAEhB,iBAAiB,CACjB,AA5JL,0FAkKK,YAAa,CACb,AAnKL,qEAwKI,kBAAkB,AAClB,sBAAsB,AACtB,eAAc,AACd,WAAU,AACV,iBAAkB,CAiBlB,AA7LJ,8EAgLK,qBAAsB,CACtB,AAjLL,yEAoLK,cAAe,CACf,AArLL,sFAyLM,QAAS,AACT,QAAS,CACT,AA3LN,oFAkMK,kBAAkB,CAClB,AAnML,qEAsMK,eAAc,AACd,wBAAoD,CACpD,AAxML,4HA4MM,UArOkB,CA2OlB,AAlNN,6IA+MO,gBAAgB,AAChB,4BAzOiB,CA0OjB,AAjNP,2HAuNM,UAjPgB,CAwPhB,AA9NN,4IA0NO,gBAAgB,AAChB,4BArPe,CAuPf,AA7NP,4HAmOM,UA7PgB,CAoQhB,AA1ON,6IAsOO,mBAAmB,AACnB,0BAjQe,AAkQf,UAlQe,CAmQf,AAzOP,+GAkPM,uBAAyB,AAAzB,yBAAyB,AACzB,uBAAuB,AAEvB,oBAAY,AAAZ,aAAY,AACZ,sBAAkB,AAAlB,mBAAkB,AAClB,qBAAsB,AAAtB,sBAAsB,CACtB,AAxPN,oHA6PM,wBAAyB,CACzB,AA9PN,2GAmQM,gBAAe,AACf,gBAAgB,CAChB,AArQN,uIAyQO,gBAAe,AACf,mBAAmB,CACnB,AA3QP,4GAgRM,qBAAuB,AAAvB,uBAAuB,AACvB,OAAM,AACN,QAAO,AACP,QAAO,AACP,WAAW,CACX,AArRN,+CA2RG,qBAAqB,AACrB,kBAAkB,AAIlB,UAAW,CASX,AAzSH,qEAmSI,2BAvTgB,CAwThB,AApSJ,sEAuSI,0BA3TgB,CA4ThB,AAxSJ,qDA6SG,sBAAqB,AACrB,eAAc,AAEd,6BAAyD,AAUzD,0BA9UiB,AA+UjB,6BA1VoB,AA4VpB,eAAgB,CAChB,AA9TH,oEAmTI,4BAAyD,CAKzD,AAxTJ,iGAsTK,YAAa,CACb,AAvTL,2DAiUG,cAAc,CAKd,AAtUH,iEAoUI,YAAa,CACb,AArUJ,kCA2UE,kBAAiB,AACjB,WAAU,AACV,mBAAmB,AACnB,cAAa,AACb,gCAAiC,CAyDjC,AAxYF,wCAkVG,YAAa,CACb,AAnVH,yDAuVG,sBAAqB,AACrB,oBAAa,AAAb,aAAa,AACb,sBAAkB,AAAlB,mBAAkB,AAOlB,UAAU,CAYV,AA5WH,wFA4VI,gBAAe,AACf,cAAc,CACd,AA9VJ,8DAmWI,qBAAqB,AAErB,cAAa,AACb,aAAY,AAEZ,WAAU,AACV,gBAAiB,AACjB,cAAe,CACf,AA3WJ,mDAgXG,kBAAiB,AACjB,qBAAoB,AACpB,sBAxYqB,AAyYrB,mBAAmB,AACnB,iBAAgB,AAChB,UAxYe,CA0Zf,AAvYH,kFA0XK,gBAAiB,AACjB,4BAAwD,CASxD,AApYL,sGA8XM,4BAlZc,CAmZd,AA/XN,yGAkYM,yBAtZc,CAuZd,AAnYN,6BA8YE,iBAAgB,AAChB,0BArZwB,AAsZxB,yBAzZ4B,AA0Z5B,iBAAiB,AACjB,WA1ZmB,AA2ZnB,gBAAgB,AAChB,mBAAkB,AAClB,qBAAgB,AAAhB,iBAAgB,AAEhB,sBAAsB,AACtB,wBAAwB,AACxB,yBAAyB,AACzB,mBAAoB,CAgFpB,AA1eF,qDA6ZG,sBAAqB,AACrB,wBAAuB,AACvB,sBAA2B,AAE3B,gBAAgB,AAEhB,6BAAyD,AAUzD,6BAjciB,AAkcjB,0BAlciB,AAocjB,eAAgB,CAMhB,AAtbH,oEAsaI,4BAAyD,CAKzD,AA3aJ,iGAyaK,YAAa,CACb,AA1aL,gEAmbI,mBAAkB,AAClB,kBAAkB,CAClB,AArbJ,kDAybG,WAjckB,AAkclB,oBAAmB,AACnB,oBAAmB,AACnB,iBAAiB,CACjB,AA7bH,kDAicG,qBAAoB,AAEpB,aAAY,AACZ,gBAAe,AAEf,sBA7coB,AA8cpB,iBAAiB,CACjB,AAxcH,8CA2cG,YAAY,CACZ,AA5cH,6CAgdG,qBAAoB,AAEpB,aAAY,AACZ,gBAAe,AAEf,sBA5doB,AA6dpB,kBAAiB,AAEjB,6BAA+B,CAiB/B,AAzeH,oDA2dI,UAhemB,CAienB,AA5dJ,sDA+dI,UAAU,CACV,AAheJ,kEAoeK,eAAc,AACd,0BAAyB,AACzB,UAAU,CACV,AAveL,wCA8eE,kBAAiB,AACjB,QAAO,AACP,MAAK,AACL,SAAQ,AACR,SAAS,CAUT,AA5fF,6CAqfG,OAAM,AACN,UAAU,CACV,AAvfH,8CA0fG,gBAAgB,CAChB,AA3fH,6BAigBE,kBAAiB,AACjB,oBAAa,AAAb,aAAa,AACb,sBAAkB,AAAlB,mBAAkB,AAElB,MAAK,AACL,OAAM,AACN,YAAW,AAEX,YAAW,AACX,WAAU,AACV,0BAAyB,AACzB,iBAAiB,CA2BjB,AAviBF,mDAghBG,qBAAoB,AAEpB,cAAa,AACb,kBAAiB,AAEjB,mBAAkB,AAElB,gBAAe,AACf,gBAAgB,AAChB,cAAc,CAad,AAtiBH,qEA6hBI,sBAAqB,AACrB,UAAU,CACV,AA/hBJ,mEAmiBI,sBAAqB,AACrB,aAAa,CACb,AAMJ,eACC,kBAAkB,AAClB,sBAAsB,AACtB,gBAA0C,AAC1C,qBArkBuB,CAq7BvB,AApXD,kCAQE,wBAxkB4B,CAykB5B,AATF,0CAYE,sBAzkBsB,AA0kBtB,cAAe,CACf,AAdF,kCAiBE,wBA5kB6B,CA6kB7B,AAlBF,wCAqBE,yBA/kBkC,AAglBlC,cAAe,CACf,AAvBF,oCA0BE,sBAAqB,AACrB,eAAe,CACf,AA5BF,gCA+BE,kBAAkB,AAElB,0BAhmBkB,AAimBlB,6BAjmBkB,AAmmBlB,oBAAoB,AACpB,UAAU,CACV,AAtCF,4CA0CE,kBAAiB,AACjB,QAAO,AACP,SAAQ,AACR,OAAM,AACN,UAAU,CAUV,AAxDF,iDAiDG,MAAK,AACL,WAAW,CACX,AAnDH,kDAsDG,gBAAgB,CAChB,AAvDH,iCA2DE,qBAAqB,AACrB,kBAAkB,AAElB,yBAAyB,AAEzB,UAAW,CASX,AAzEF,uDAmEG,2BAloBiB,CAmoBjB,AApEH,wDAuEG,0BAtoBiB,CAuoBjB,AAxEH,8CA4EE,sBAAqB,AAErB,YAAW,AAEX,0BA/oBkB,AAgpBlB,4BAhpBkB,CAmqBlB,AApGF,oDAoFG,YAAY,CACZ,AArFH,oDAwFG,cAvqBW,CAkrBX,AAnGH,0DA4FK,iBAAkB,CAKlB,AAjGL,wEA+FM,kBAAkB,CAClB,AAhGN,+BAwGE,qBAAoB,AACpB,kBAAkB,AAClB,sBAAqB,AACrB,YAAW,AACX,4BA3qBkB,AA4qBlB,sBAAqB,AACrB,mBAAkB,AAClB,gBAAe,AACf,sBAAsB,CAyLtB,AAzSF,iDAmHG,yBA3qBkB,AA4qBlB,SAAU,CAMV,AA1HH,+GAuHI,WAAU,AACV,sBAAsB,CACtB,AAzHJ,yDA6HG,qBAprBgB,CA2rBhB,AApIH,+HA+HI,WAAU,AACV,uBAAsB,AAEtB,UAzrBe,CA0rBf,AAnIJ,6EAyII,YAAa,CACb,AA1IJ,oDA+IG,2BAAoB,AAApB,oBAAoB,AACpB,sBAAkB,AAAlB,mBAAkB,AAClB,qBAAsB,AAAtB,uBAAsB,AAEtB,sBAAsB,AACtB,wBAAwB,AACxB,yBAAyB,AACzB,mBAAoB,CAcpB,AApKH,8EA0JI,SAAS,CAST,AAnKJ,wGA8JK,WAAU,AACV,WAAU,AACV,eAAc,AACd,eAAe,CACf,AAlKL,2DAuKG,qBAAoB,AACpB,sBAAqB,AAErB,WAAU,AACV,UAAS,AAET,gBAAe,AACf,iBAAgB,AAEhB,8BAA6B,AAE7B,2BAjvBiB,AAkvBjB,4BAlvBiB,CAmvBjB,AApLH,4DAwLG,2BAAmB,AAAnB,oBAAmB,AACnB,qBAAsB,AAAtB,uBAAsB,AACtB,sBAAkB,AAAlB,mBAAkB,AAClB,sBAAqB,AAErB,YAAW,AACX,WAAU,AAEV,iBAAgB,AAEhB,sBAhwBe,AAiwBf,kBAAiB,AACjB,0BAA4B,AAE5B,eAAe,CAmDf,AAzPH,kEAyMI,eAAc,AACd,yBAA4B,CAC5B,AA3MJ,kGA8MI,qBAAoB,AACpB,kBAAkB,AAElB,WAAW,AACX,UAAU,AAEV,sBAAuB,CAavB,AAjOJ,wGAuNK,kBAAkB,AAClB,WAAW,AACX,UAAU,AACV,QAAQ,AAER,WAAW,AACX,UAAU,AAEV,eA7xBa,CA8xBb,AAhOL,gGAoOI,qBAAoB,AACpB,kBAAkB,AAElB,WAAW,AACX,UAAU,AAEV,eAxyBc,CAqzBd,AAvPJ,sGA6OK,kBAAkB,AAClB,WAAW,AACX,UAAU,AACV,QAAQ,AAER,WAAW,AACX,UAAU,AAEV,eAnzBa,CAozBb,AAtPL,qEA4PG,2BAAoB,AAApB,oBAAoB,AACpB,sBAAkB,AAAlB,mBAAkB,AAClB,qBAAsB,AAAtB,uBAAsB,AAEtB,sBAAsB,AACtB,wBAAwB,AACxB,yBAAyB,AACzB,oBAAoB,AAEpB,YAAW,AACX,WAAU,AAEV,mBAAkB,AAClB,gBAAe,AAEf,WA50BqB,AA60BrB,gBAAgB,AAChB,eAAe,CAmBf,AAhSH,2EAgRI,UAAU,CACV,AAjRJ,sHAqRK,eAAe,CACf,AAtRL,sOA8RI,YAAY,CACZ,AA/RJ,wDAmSG,qBAAqB,AACrB,YAAW,AACX,WAAU,AAEV,kBAAkB,CAClB,AAxSH,+BA6SE,sBAAqB,AACrB,6BAA4B,AAC5B,4BA92BkB,AA+2BlB,0BAAyB,AACzB,YAAW,AACX,kBAAiB,AACjB,gBAAe,AACf,gBAAgB,AAEhB,cAAe,CA4Df,AAlXF,qCAyTG,eAAc,AACd,+BAA+B,CAC/B,AA3TH,wEAgUI,kBAAiB,AACjB,kCAAkC,AAClC,mCAAmC,AACnC,0BAx4BkB,AAy4BlB,eAAgB,CAChB,AArUJ,uDA0UG,iBAAiB,CACjB,AA3UH,uDA8UG,iBAAiB,CACjB,AA/UH,uDAkVG,iBAAiB,CACjB,AAnVH,uDAsVG,iBAAiB,CACjB,AAvVH,uDA0VG,kBAAkB,CAClB,AA3VH,uDA8VG,oBAAqB,CACrB,AA/VH,gDAmWG,qBAAqB,AACrB,QAAQ,AACR,SAAS,AACT,kBAAiB,AACjB,iCAAiC,AACjC,oCAAoC,AACpC,eAAe,AACf,2BA/6BmB,AAg7BnB,qBAAqB,CACrB,AA5WH,oCA+WG,iBAAgB,AAChB,UAAU,CACV,AAKH,gBACC,kBAAkB,AAClB,qBAAoB,AACpB,sBAAqB,AAErB,gBA57BuB,AA67BvB,sBA37BmB,AA47BnB,oCAAuC,AAEvC,eA98Ba,AAg9Bb,gBAAe,AACf,iCAAiC,AAEjC,aAAc,CAqBd,AAnCD,qCAkBE,iBAAgB,AAEhB,yBAAiB,AAAjB,qBAAiB,AAAjB,gBAAiB,CAUjB,AA9BF,kEAuBG,UAAW,CACX,AAxBH,8EA2BG,eAAe,AACf,kBAl9B2B,CAm9B3B,AA7BH,0CAiCE,yBAt9BkB,CAu9BlB,AAGF,4BACC,kBAAkB,AAClB,qBAAoB,AACpB,sBAAqB,AAErB,iBAAgB,AAEhB,gBAn+BuB,AAo+BvB,sBAl+BmB,AAo+BnB,eAp/Ba,AAs/Bb,gBAAe,AACf,iCAAiC,AAEjC,aAAc,CA4Cd,AA3DD,6DAkBE,YAAW,AAEX,UA7+BgB,CAkgChB,AAzCF,oEAuBG,WAn/BqB,AAo/BrB,kBA3+BkB,CAg/BlB,AA7BH,4EA2BI,oCAv/BoB,CAw/BpB,AA5BJ,qEAgCG,yBAn/BkB,CAo/BlB,AAjCH,mEAoCG,eAAc,AAEd,WAlgCqB,AAmgCrB,kBA1/BkB,CA2/BlB,AAxCH,+DA4CE,YAAW,AAEX,WAvgCgB,AAwgChB,iBAAkB,CAClB,AAhDF,8DAmDE,6BA7gCkB,AA+gClB,YAAW,AACX,gBAAe,AAEf,WAjhCgB,AAkhChB,eAAgB,CAChB,AAMF,yBACC,aAAc,CACd,AAED,yBACC,mBAAmB,AACnB,aAAc,CAwEd,AA1ED,0DAMG,mBAAmB,AACnB,2BAhjCoB,AAijCpB,oBAAoB,CAsBpB,AA9BH,wGAYK,eAAoB,AACpB,gBAAgB,CAChB,AAdL,kGAmBK,gBAAe,AACf,iBAAiB,CACjB,AArBL,kGA0BK,SAAQ,AACR,UAAa,CACb,AA5BL,wDAmCG,qBAAoB,AACpB,0BAlkCiB,CA0lCjB,AA5DH,oFA8CI,eAAoB,AACpB,gBAAe,AAEf,4BAAiC,AACjC,+BAA8B,AAE9B,oBAAmB,AACnB,2BAnlCgB,CAolChB,AAtDJ,qFAyDI,eAAoB,AACpB,eAAe,CACf,AA3DJ,sDAiEE,kBAAiB,AACjB,OAAM,AACN,UAAU,CAMV,AAzEF,2DAsEG,QAAO,AACP,SAAS,CACT,AAOH,4BACC,kBAAkB,AAClB,MAAK,AACL,SAAQ,AACR,OAAM,AACN,QAAO,AAEP,aAAc,CACd,AAED,uEACC,sBAAuB,CACvB,AAED,uBACC,wBAAyB,CAwKzB,AAzKD,mDAIE,qBAAoB,AACpB,sBAAqB,AAErB,WAAU,AACV,UAAS,AAET,gBAAe,AACf,iBAAgB,AAEhB,8BAA6B,AAE7B,2BA1oCkB,AA2oClB,4BA3oCkB,CA4oClB,AAjBF,oDAqBE,sBAAqB,AACrB,6BAA4B,AAC5B,4BAlpCkB,AAmpClB,0BAAyB,AACzB,YAAW,AACX,kBAAiB,AACjB,gBAAe,AACf,gBAAgB,AAEhB,cAAe,CAsEf,AApGF,0DAiCG,eAAc,AACd,+BAA+B,CAC/B,AAnCH,6FAwCI,kBAAiB,AACjB,kCAAkC,AAClC,mCAAmC,AACnC,0BA5qCkB,AA6qClB,eAAgB,CAChB,AA7CJ,+EAmDI,2BAA4B,CAC5B,AApDJ,+EAyDI,2BAA4B,CAC5B,AA1DJ,+EA+DI,2BAA4B,CAC5B,AAhEJ,+EAqEI,2BAA4B,CAC5B,AAtEJ,+EA2EI,4BAA6B,CAC7B,AA5EJ,4EAgFG,oBAAqB,CACrB,AAjFH,qEAqFG,qBAAqB,AACrB,QAAQ,AACR,SAAS,AACT,kBAAiB,AACjB,iCAAiC,AACjC,oCAAoC,AACpC,eAAe,AACf,2BA7tCmB,AA8tCnB,qBAAqB,CACrB,AA9FH,yDAiGG,iBAAgB,AAChB,UAAU,CACV,AAnGH,oDAwGE,2BAAmB,AAAnB,oBAAmB,AACnB,qBAAsB,AAAtB,uBAAsB,AACtB,sBAAkB,AAAlB,mBAAkB,AAClB,sBAAqB,AAErB,YAAW,AACX,WAAU,AAEV,iBAAgB,AAEhB,sBA5uCgB,AA6uChB,kBAAiB,AACjB,0BAA4B,AAE5B,eAAe,CAkDf,AAxKF,0DAyHG,eAAc,AACd,yBAA4B,CAC5B,AA3HH,0FA8HG,qBAAoB,AACpB,kBAAkB,AAElB,WAAW,AACX,UAAU,AAEV,sBAAuB,CAavB,AAjJH,gGAuII,kBAAkB,AAClB,WAAW,AACX,UAAU,AACV,QAAQ,AAER,WAAW,AACX,UAAU,AAEV,eAzwCc,CA0wCd,AAhJJ,wFAoJG,qBAAoB,AACpB,kBAAkB,AAElB,WAAW,AACX,UAAU,AAEV,eApxCe,CAiyCf,AAvKH,8FA6JI,kBAAkB,AAClB,WAAW,AACX,UAAU,AACV,QAAQ,AAER,WAAW,AACX,UAAU,AAEV,eA/xCc,CAgyCd","file":"tabulator.min.css","sourcesContent":["/* Tabulator v4.8.3 (c) Oliver Folkerd */\n\n\r\n//Main Theme Variables\r\n$backgroundColor: #888 !default; //background color of tabulator\r\n$borderColor:#999 !default; //border to tabulator\r\n$textSize:14px !default; //table text size\r\n\r\n//header themeing\r\n$headerBackgroundColor:#e6e6e6 !default; //border to tabulator\r\n$headerTextColor:#555 !default; //header text colour\r\n$headerBorderColor:#aaa !default;  //header border color\r\n$headerSeperatorColor:#999 !default; //header bottom seperator color\r\n$headerMargin:4px !default; //padding round header\r\n\r\n//column header arrows\r\n$sortArrowActive: #666 !default;\r\n$sortArrowInactive: #bbb !default;\r\n\r\n//row themeing\r\n$rowBackgroundColor:#fff !default; //table row background color\r\n$rowAltBackgroundColor:#EFEFEF !default; //table row background color\r\n$rowBorderColor:#aaa !default; //table border color\r\n$rowTextColor:#333 !default; //table text color\r\n$rowHoverBackground:#bbb !default; //row background color on hover\r\n\r\n$rowSelectedBackground: #9ABCEA !default; //row background color when selected\r\n$rowSelectedBackgroundHover: #769BCC !default;//row background color when selected and hovered\r\n\r\n$editBoxColor:#1D68CD !default; //border color for edit boxes\r\n$errorColor:#dd0000 !default; //error indication\r\n\r\n//footer themeing\r\n$footerBackgroundColor:#e6e6e6 !default; //border to tabulator\r\n$footerTextColor:#555 !default; //footer text colour\r\n$footerBorderColor:#aaa !default; //footer border color\r\n$footerSeperatorColor:#999 !default; //footer bottom seperator color\r\n$footerActiveColor:#d00 !default; //footer bottom active text color\r\n\r\n\r\n\r\n//Tabulator Containing Element\r\n.tabulator{\r\n\tposition: relative;\r\n\r\n\tborder: 1px solid $borderColor;\r\n\r\n\tbackground-color: $backgroundColor;\r\n\r\n\tfont-size:$textSize;\r\n\ttext-align: left;\r\n\toverflow:hidden;\r\n\r\n\t-webkit-transform: translatez(0);\r\n\t-moz-transform: translatez(0);\r\n\t-ms-transform: translatez(0);\r\n\t-o-transform: translatez(0);\r\n\ttransform: translatez(0);\r\n\r\n\t&[tabulator-layout=\"fitDataFill\"]{\r\n\t\t.tabulator-tableHolder{\r\n\t\t\t.tabulator-table{\r\n\t\t\t\tmin-width:100%;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t&[tabulator-layout=\"fitDataTable\"]{\r\n\t\tdisplay: inline-block;\r\n\t}\r\n\r\n\t&.tabulator-block-select{\r\n\t\tuser-select: none;\r\n\t}\r\n\r\n\t//column header containing element\r\n\t.tabulator-header{\r\n\t\tposition:relative;\r\n\t\tbox-sizing: border-box;\r\n\r\n\t\twidth:100%;\r\n\r\n\t\tborder-bottom:1px solid $headerSeperatorColor;\r\n\t\tbackground-color: $headerBackgroundColor;\r\n\t\tcolor: $headerTextColor;\r\n\t\tfont-weight:bold;\r\n\r\n\t\twhite-space: nowrap;\r\n\t\toverflow:hidden;\r\n\r\n\t\t-moz-user-select: none;\r\n\t\t-khtml-user-select: none;\r\n\t\t-webkit-user-select: none;\r\n\t\t-o-user-select: none;\r\n\r\n\t\t&.tabulator-header-hidden{\r\n\t\t\tdisplay:none;\r\n\t\t}\r\n\r\n\t\t//individual column header element\r\n\t\t.tabulator-col{\r\n\t\t\tdisplay:inline-block;\r\n\t\t\tposition:relative;\r\n\t\t\tbox-sizing:border-box;\r\n\t\t\tborder-right:1px solid $headerBorderColor;\r\n\t\t\tbackground:$headerBackgroundColor;\r\n\t\t\ttext-align:left;\r\n\t\t\tvertical-align: bottom;\r\n\t\t\toverflow: hidden;\r\n\r\n\t\t\t&.tabulator-moving{\r\n\t\t\t\tposition: absolute;\r\n\t\t\t\tborder:1px solid  $headerSeperatorColor;\r\n\t\t\t\tbackground:darken($headerBackgroundColor, 10%);\r\n\t\t\t\tpointer-events: none;\r\n\t\t\t}\r\n\r\n\t\t\t//hold content of column header\r\n\t\t\t.tabulator-col-content{\r\n\t\t\t\tbox-sizing:border-box;\r\n\t\t\t\tposition: relative;\r\n\t\t\t\tpadding:4px;\r\n\r\n\t\t\t\t//header menu button\r\n\t\t\t\t.tabulator-header-menu-button{\r\n\t\t\t\t\tpadding: 0 8px;\r\n\r\n\t\t\t\t\t&:hover{\r\n\t\t\t\t\t\tcursor: pointer;\r\n\t\t\t\t\t\topacity: .6;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t//hold title and sort arrow\r\n\t\t\t\t.tabulator-col-title-holder{\r\n\t\t\t\t\tposition: relative;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t//hold title of column header\r\n\t\t\t\t.tabulator-col-title{\r\n\t\t\t\t\tbox-sizing:border-box;\r\n\t\t\t\t\twidth: 100%;\r\n\r\n\t\t\t\t\twhite-space: nowrap;\r\n\t\t\t\t\toverflow: hidden;\r\n\t\t\t\t\ttext-overflow: ellipsis;\r\n\t\t\t\t\tvertical-align:bottom;\r\n\r\n\t\t\t\t\t//element to hold title editor\r\n\t\t\t\t\t.tabulator-title-editor{\r\n\t\t\t\t\t\tbox-sizing: border-box;\r\n\t\t\t\t\t\twidth: 100%;\r\n\r\n\t\t\t\t\t\tborder:1px solid #999;\r\n\r\n\t\t\t\t\t\tpadding:1px;\r\n\r\n\t\t\t\t\t\tbackground: #fff;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t.tabulator-header-menu-button + .tabulator-title-editor{\r\n\t\t\t\t\t\twidth:calc(100% - 22px);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t//column sorter arrow\r\n\t\t\t\t.tabulator-col-sorter{\r\n\t\t\t\t\tdisplay: flex;\r\n\t\t\t\t\talign-items: center;\r\n\r\n\t\t\t\t\tposition: absolute;\r\n\t\t\t\t\ttop:0;\r\n\t\t\t\t\tbottom:0;\r\n\t\t\t\t\tright:4px;\r\n\r\n\t\t\t\t\t.tabulator-arrow{\r\n\t\t\t\t\t\twidth: 0;\r\n\t\t\t\t\t\theight: 0;\r\n\t\t\t\t\t\tborder-left: 6px solid transparent;\r\n\t\t\t\t\t\tborder-right: 6px solid transparent;\r\n\t\t\t\t\t\tborder-bottom: 6px solid $sortArrowInactive;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t\t//complex header column group\r\n\t\t\t&.tabulator-col-group{\r\n\r\n\t\t\t\t//gelement to hold sub columns in column group\r\n\t\t\t\t.tabulator-col-group-cols{\r\n\t\t\t\t\tposition:relative;\r\n\t\t\t\t\tdisplay: flex;\r\n\r\n\t\t\t\t\tborder-top:1px solid $headerBorderColor;\r\n\t\t\t\t\toverflow: hidden;\r\n\r\n\t\t\t\t\tmargin-right:-1px;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t//hide left resize handle on first column\r\n\t\t\t&:first-child{\r\n\t\t\t\t.tabulator-col-resize-handle.prev{\r\n\t\t\t\t\tdisplay: none;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t//header filter containing element\r\n\t\t\t.tabulator-header-filter{\r\n\t\t\t\tposition: relative;\r\n\t\t\t\tbox-sizing: border-box;\r\n\t\t\t\tmargin-top:2px;\r\n\t\t\t\twidth:100%;\r\n\t\t\t\ttext-align: center;\r\n\r\n\t\t\t\t//styling adjustment for inbuilt editors\r\n\t\t\t\ttextarea{\r\n\t\t\t\t\theight:auto !important;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tsvg{\r\n\t\t\t\t\tmargin-top: 3px;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tinput{\r\n\t\t\t\t\t&::-ms-clear {\r\n\t\t\t\t\t\twidth : 0;\r\n\t\t\t\t\t\theight: 0;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t//styling child elements for sortable columns\r\n\t\t\t&.tabulator-sortable{\r\n\t\t\t\t.tabulator-col-title{\r\n\t\t\t\t\tpadding-right:25px;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t&:hover{\r\n\t\t\t\t\tcursor:pointer;\r\n\t\t\t\t\tbackground-color:darken($headerBackgroundColor, 10%);\r\n\t\t\t\t}\r\n\r\n\t\t\t\t&[aria-sort=\"none\"]{\r\n\t\t\t\t\t.tabulator-col-content .tabulator-col-sorter{\r\n\t\t\t\t\t\tcolor: $sortArrowInactive;\r\n\r\n\t\t\t\t\t\t.tabulator-arrow{\r\n\t\t\t\t\t\t\tborder-top: none;\r\n\t\t\t\t\t\t\tborder-bottom: 6px solid $sortArrowInactive;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t&[aria-sort=\"asc\"]{\r\n\t\t\t\t\t.tabulator-col-content .tabulator-col-sorter{\r\n\t\t\t\t\t\tcolor: $sortArrowActive;\r\n\r\n\t\t\t\t\t\t.tabulator-arrow{\r\n\t\t\t\t\t\t\tborder-top: none;\r\n\t\t\t\t\t\t\tborder-bottom: 6px solid $sortArrowActive;\r\n\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t&[aria-sort=\"desc\"]{\r\n\t\t\t\t\t.tabulator-col-content .tabulator-col-sorter{\r\n\t\t\t\t\t\tcolor: $sortArrowActive;\r\n\r\n\t\t\t\t\t\t.tabulator-arrow{\r\n\t\t\t\t\t\t\tborder-bottom: none;\r\n\t\t\t\t\t\t\tborder-top: 6px solid $sortArrowActive;\r\n\t\t\t\t\t\t\tcolor: $sortArrowActive;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\r\n\t\t\t&.tabulator-col-vertical{\r\n\t\t\t\t.tabulator-col-content{\r\n\t\t\t\t\t.tabulator-col-title{\r\n\t\t\t\t\t\twriting-mode: vertical-rl;\r\n\t\t\t\t\t\ttext-orientation: mixed;\r\n\r\n\t\t\t\t\t\tdisplay:flex;\r\n\t\t\t\t\t\talign-items:center;\r\n\t\t\t\t\t\tjustify-content:center;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t&.tabulator-col-vertical-flip{\r\n\t\t\t\t\t.tabulator-col-title{\r\n\t\t\t\t\t\ttransform: rotate(180deg);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t&.tabulator-sortable{\r\n\t\t\t\t\t.tabulator-col-title{\r\n\t\t\t\t\t\tpadding-right:0;\r\n\t\t\t\t\t\tpadding-top:20px;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t&.tabulator-col-vertical-flip{\r\n\t\t\t\t\t\t.tabulator-col-title{\r\n\t\t\t\t\t\t\tpadding-right:0;\r\n\t\t\t\t\t\t\tpadding-bottom:20px;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t.tabulator-col-sorter{\r\n\t\t\t\t\t\tjustify-content: center;\r\n\t\t\t\t\t\tleft:0;\r\n\t\t\t\t\t\tright:0;\r\n\t\t\t\t\t\ttop:4px;\r\n\t\t\t\t\t\tbottom:auto;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t.tabulator-frozen{\r\n\t\t\tdisplay: inline-block;\r\n\t\t\tposition: absolute;\r\n\r\n\t\t\t// background-color: inherit;\r\n\r\n\t\t\tz-index: 10;\r\n\r\n\t\t\t&.tabulator-frozen-left{\r\n\t\t\t\tborder-right:2px solid $rowBorderColor;\r\n\t\t\t}\r\n\r\n\t\t\t&.tabulator-frozen-right{\r\n\t\t\t\tborder-left:2px solid $rowBorderColor;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\r\n\t\t.tabulator-calcs-holder{\r\n\t\t\tbox-sizing:border-box;\r\n\t\t\tmin-width:600%;\r\n\r\n\t\t\tbackground:lighten($headerBackgroundColor, 5%) !important;\r\n\r\n\t\t\t.tabulator-row{\r\n\t\t\t\tbackground:lighten($headerBackgroundColor, 5%) !important;\r\n\r\n\t\t\t\t.tabulator-col-resize-handle{\r\n\t\t\t\t\tdisplay: none;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tborder-top:1px solid $rowBorderColor;\r\n\t\t\tborder-bottom:1px solid $headerBorderColor;\r\n\r\n\t\t\toverflow: hidden;\r\n\t\t}\r\n\r\n\t\t.tabulator-frozen-rows-holder{\r\n\t\t\tmin-width:600%;\r\n\r\n\t\t\t&:empty{\r\n\t\t\t\tdisplay: none;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//scrolling element to hold table\r\n\t.tabulator-tableHolder{\r\n\t\tposition:relative;\r\n\t\twidth:100%;\r\n\t\twhite-space: nowrap;\r\n\t\toverflow:auto;\r\n\t\t-webkit-overflow-scrolling: touch;\r\n\r\n\t\t&:focus{\r\n\t\t\toutline: none;\r\n\t\t}\r\n\r\n\t\t//default placeholder element\r\n\t\t.tabulator-placeholder{\r\n\t\t\tbox-sizing:border-box;\r\n\t\t\tdisplay: flex;\r\n\t\t\talign-items:center;\r\n\r\n\t\t\t&[tabulator-render-mode=\"virtual\"]{\r\n\t\t\t\tmin-height:100%;\r\n\t\t\t\tmin-width:100%;\r\n\t\t\t}\r\n\r\n\t\t\twidth:100%;\r\n\r\n\t\t\tspan{\r\n\t\t\t\tdisplay: inline-block;\r\n\r\n\t\t\t\tmargin:0 auto;\r\n\t\t\t\tpadding:10px;\r\n\r\n\t\t\t\tcolor:#ccc;\r\n\t\t\t\tfont-weight: bold;\r\n\t\t\t\tfont-size: 20px;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t//element to hold table rows\r\n\t\t.tabulator-table{\r\n\t\t\tposition:relative;\r\n\t\t\tdisplay:inline-block;\r\n\t\t\tbackground-color:$rowBackgroundColor;\r\n\t\t\twhite-space: nowrap;\r\n\t\t\toverflow:visible;\r\n\t\t\tcolor:$rowTextColor;\r\n\r\n\t\t\t//row element\r\n\t\t\t.tabulator-row{\r\n\t\t\t\t&.tabulator-calcs{\r\n\t\t\t\t\tfont-weight: bold;\r\n\t\t\t\t\tbackground:darken($rowAltBackgroundColor, 5%) !important;\r\n\r\n\t\t\t\t\t&.tabulator-calcs-top{\r\n\t\t\t\t\t\tborder-bottom:2px solid $rowBorderColor;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t&.tabulator-calcs-bottom{\r\n\t\t\t\t\t\tborder-top:2px solid $rowBorderColor;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t}\r\n\t}\r\n\r\n\r\n\r\n\t//footer element\r\n\t.tabulator-footer{\r\n\t\tpadding:5px 10px;\r\n\t\tborder-top:1px solid $footerSeperatorColor;\r\n\t\tbackground-color: $footerBackgroundColor;\r\n\t\ttext-align: right;\r\n\t\tcolor: $footerTextColor;\r\n\t\tfont-weight:bold;\r\n\t\twhite-space:nowrap;\r\n\t\tuser-select:none;\r\n\r\n\t\t-moz-user-select: none;\r\n\t\t-khtml-user-select: none;\r\n\t\t-webkit-user-select: none;\r\n\t\t-o-user-select: none;\r\n\r\n\t\t.tabulator-calcs-holder{\r\n\t\t\tbox-sizing:border-box;\r\n\t\t\twidth:calc(100% + 20px);\r\n\t\t\tmargin:-5px -10px 5px -10px;\r\n\r\n\t\t\ttext-align: left;\r\n\r\n\t\t\tbackground:lighten($footerBackgroundColor, 5%) !important;\r\n\r\n\t\t\t.tabulator-row{\r\n\t\t\t\tbackground:lighten($footerBackgroundColor, 5%) !important;\r\n\r\n\t\t\t\t.tabulator-col-resize-handle{\r\n\t\t\t\t\tdisplay: none;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tborder-bottom:1px solid $rowBorderColor;\r\n\t\t\tborder-top:1px solid $rowBorderColor;\r\n\r\n\t\t\toverflow: hidden;\r\n\r\n\t\t\t&:only-child{\r\n\t\t\t\tmargin-bottom:-5px;\r\n\t\t\t\tborder-bottom:none;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t.tabulator-paginator{\r\n\t\t\tcolor: $footerTextColor;\r\n\t\t\tfont-family:inherit;\r\n\t\t\tfont-weight:inherit;\r\n\t\t\tfont-size:inherit;\r\n\t\t}\r\n\r\n\t\t//pagination container element\r\n\t\t.tabulator-page-size{\r\n\t\t\tdisplay:inline-block;\r\n\r\n\t\t\tmargin:0 5px;\r\n\t\t\tpadding:2px 5px;\r\n\r\n\t\t\tborder:1px solid $footerBorderColor;\r\n\t\t\tborder-radius:3px;\r\n\t\t}\r\n\r\n\t\t.tabulator-pages{\r\n\t\t\tmargin:0 7px;\r\n\t\t}\r\n\r\n\t\t//pagination button\r\n\t\t.tabulator-page{\r\n\t\t\tdisplay:inline-block;\r\n\r\n\t\t\tmargin:0 2px;\r\n\t\t\tpadding:2px 5px;\r\n\r\n\t\t\tborder:1px solid $footerBorderColor;\r\n\t\t\tborder-radius:3px;\r\n\r\n\t\t\tbackground:rgba(255,255,255,.2);\r\n\r\n\t\t\t&.active{\r\n\t\t\t\tcolor:$footerActiveColor;\r\n\t\t\t}\r\n\r\n\t\t\t&:disabled{\r\n\t\t\t\topacity:.5;\r\n\t\t\t}\r\n\r\n\t\t\t&:not(.disabled){\r\n\t\t\t\t&:hover{\r\n\t\t\t\t\tcursor:pointer;\r\n\t\t\t\t\tbackground:rgba(0,0,0,.2);\r\n\t\t\t\t\tcolor:#fff;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//column resize handles\r\n\t.tabulator-col-resize-handle{\r\n\t\tposition:absolute;\r\n\t\tright:0;\r\n\t\ttop:0;\r\n\t\tbottom:0;\r\n\t\twidth:5px;\r\n\r\n\t\t&.prev{\r\n\t\t\tleft:0;\r\n\t\t\tright:auto;\r\n\t\t}\r\n\r\n\t\t&:hover{\r\n\t\t\tcursor:ew-resize;\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t//holding div that contains loader and covers tabulator element to prevent interaction\r\n\t.tabulator-loader{\r\n\t\tposition:absolute;\r\n\t\tdisplay: flex;\r\n\t\talign-items:center;\r\n\r\n\t\ttop:0;\r\n\t\tleft:0;\r\n\t\tz-index:100;\r\n\r\n\t\theight:100%;\r\n\t\twidth:100%;\r\n\t\tbackground:rgba(0,0,0,.4);\r\n\t\ttext-align:center;\r\n\r\n\t\t//loading message element\r\n\t\t.tabulator-loader-msg{\r\n\t\t\tdisplay:inline-block;\r\n\r\n\t\t\tmargin:0 auto;\r\n\t\t\tpadding:10px 20px;\r\n\r\n\t\t\tborder-radius:10px;\r\n\r\n\t\t\tbackground:#fff;\r\n\t\t\tfont-weight:bold;\r\n\t\t\tfont-size:16px;\r\n\r\n\t\t\t//loading message\r\n\t\t\t&.tabulator-loading{\r\n\t\t\t\tborder:4px solid #333;\r\n\t\t\t\tcolor:#000;\r\n\t\t\t}\r\n\r\n\t\t\t//error message\r\n\t\t\t&.tabulator-error{\r\n\t\t\t\tborder:4px solid #D00;\r\n\t\t\t\tcolor:#590000;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n\r\n//row element\r\n.tabulator-row{\r\n\tposition: relative;\r\n\tbox-sizing: border-box;\r\n\tmin-height:$textSize + ($headerMargin * 2);\r\n\tbackground-color: $rowBackgroundColor;\r\n\r\n\r\n\t&.tabulator-row-even{\r\n\t\tbackground-color: $rowAltBackgroundColor;\r\n\t}\r\n\r\n\t&.tabulator-selectable:hover{\r\n\t\tbackground-color:$rowHoverBackground;\r\n\t\tcursor: pointer;\r\n\t}\r\n\r\n\t&.tabulator-selected{\r\n\t\tbackground-color:$rowSelectedBackground;\r\n\t}\r\n\r\n\t&.tabulator-selected:hover{\r\n\t\tbackground-color:$rowSelectedBackgroundHover;\r\n\t\tcursor: pointer;\r\n\t}\r\n\r\n\t&.tabulator-row-moving{\r\n\t\tborder:1px solid #000;\r\n\t\tbackground:#fff;\r\n\t}\r\n\r\n\t&.tabulator-moving{\r\n\t\tposition: absolute;\r\n\r\n\t\tborder-top:1px solid  $rowBorderColor;\r\n\t\tborder-bottom:1px solid  $rowBorderColor;\r\n\r\n\t\tpointer-events: none;\r\n\t\tz-index:15;\r\n\t}\r\n\r\n\t//row resize handles\r\n\t.tabulator-row-resize-handle{\r\n\t\tposition:absolute;\r\n\t\tright:0;\r\n\t\tbottom:0;\r\n\t\tleft:0;\r\n\t\theight:5px;\r\n\r\n\t\t&.prev{\r\n\t\t\ttop:0;\r\n\t\t\tbottom:auto;\r\n\t\t}\r\n\r\n\t\t&:hover{\r\n\t\t\tcursor:ns-resize;\r\n\t\t}\r\n\t}\r\n\r\n\t.tabulator-frozen{\r\n\t\tdisplay: inline-block;\r\n\t\tposition: absolute;\r\n\r\n\t\tbackground-color: inherit;\r\n\r\n\t\tz-index: 10;\r\n\r\n\t\t&.tabulator-frozen-left{\r\n\t\t\tborder-right:2px solid $rowBorderColor;\r\n\t\t}\r\n\r\n\t\t&.tabulator-frozen-right{\r\n\t\t\tborder-left:2px solid $rowBorderColor;\r\n\t\t}\r\n\t}\r\n\r\n\t.tabulator-responsive-collapse{\r\n\t\tbox-sizing:border-box;\r\n\r\n\t\tpadding:5px;\r\n\r\n\t\tborder-top:1px solid $rowBorderColor;\r\n\t\tborder-bottom:1px solid $rowBorderColor;\r\n\r\n\t\t&:empty{\r\n\t\t\tdisplay:none;\r\n\t\t}\r\n\r\n\t\ttable{\r\n\t\t\tfont-size:$textSize;\r\n\r\n\t\t\ttr{\r\n\t\t\t\ttd{\r\n\t\t\t\t\tposition: relative;\r\n\r\n\t\t\t\t\t&:first-of-type{\r\n\t\t\t\t\t\tpadding-right:10px;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//cell element\r\n\t.tabulator-cell{\r\n\t\tdisplay:inline-block;\r\n\t\tposition: relative;\r\n\t\tbox-sizing:border-box;\r\n\t\tpadding:4px;\r\n\t\tborder-right:1px solid $rowBorderColor;\r\n\t\tvertical-align:middle;\r\n\t\twhite-space:nowrap;\r\n\t\toverflow:hidden;\r\n\t\ttext-overflow:ellipsis;\r\n\r\n\t\t&.tabulator-editing{\r\n\t\t\tborder:1px solid  $editBoxColor;\r\n\t\t\tpadding: 0;\r\n\r\n\t\t\tinput, select{\r\n\t\t\t\tborder:1px;\r\n\t\t\t\tbackground:transparent;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t&.tabulator-validation-fail{\r\n\t\t\tborder:1px solid $errorColor;\r\n\t\t\tinput, select{\r\n\t\t\t\tborder:1px;\r\n\t\t\t\tbackground:transparent;\r\n\r\n\t\t\t\tcolor: $errorColor;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t//hide left resize handle on first column\r\n\t\t&:first-child{\r\n\t\t\t.tabulator-col-resize-handle.prev{\r\n\t\t\t\tdisplay: none;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t//movable row handle\r\n\t\t&.tabulator-row-handle{\r\n\t\t\tdisplay: inline-flex;\r\n\t\t\talign-items:center;\r\n\t\t\tjustify-content:center;\r\n\r\n\t\t\t-moz-user-select: none;\r\n\t\t\t-khtml-user-select: none;\r\n\t\t\t-webkit-user-select: none;\r\n\t\t\t-o-user-select: none;\r\n\r\n\t\t\t//handle holder\r\n\t\t\t.tabulator-row-handle-box{\r\n\t\t\t\twidth:80%;\r\n\r\n\t\t\t\t//Hamburger element\r\n\t\t\t\t.tabulator-row-handle-bar{\r\n\t\t\t\t\twidth:100%;\r\n\t\t\t\t\theight:3px;\r\n\t\t\t\t\tmargin-top:2px;\r\n\t\t\t\t\tbackground:#666;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t.tabulator-data-tree-branch{\r\n\t\t\tdisplay:inline-block;\r\n\t\t\tvertical-align:middle;\r\n\r\n\t\t\theight:9px;\r\n\t\t\twidth:7px;\r\n\r\n\t\t\tmargin-top:-9px;\r\n\t\t\tmargin-right:5px;\r\n\r\n\t\t\tborder-bottom-left-radius:1px;\r\n\r\n\t\t\tborder-left:2px solid $rowBorderColor;\r\n\t\t\tborder-bottom:2px solid $rowBorderColor;\r\n\t\t}\r\n\r\n\t\t.tabulator-data-tree-control{\r\n\r\n\t\t\tdisplay:inline-flex;\r\n\t\t\tjustify-content:center;\r\n\t\t\talign-items:center;\r\n\t\t\tvertical-align:middle;\r\n\r\n\t\t\theight:11px;\r\n\t\t\twidth:11px;\r\n\r\n\t\t\tmargin-right:5px;\r\n\r\n\t\t\tborder:1px solid $rowTextColor;\r\n\t\t\tborder-radius:2px;\r\n\t\t\tbackground:rgba(0, 0, 0, .1);\r\n\r\n\t\t\toverflow:hidden;\r\n\r\n\t\t\t&:hover{\r\n\t\t\t\tcursor:pointer;\r\n\t\t\t\tbackground:rgba(0, 0, 0, .2);\r\n\t\t\t}\r\n\r\n\t\t\t.tabulator-data-tree-control-collapse{\r\n\t\t\t\tdisplay:inline-block;\r\n\t\t\t\tposition: relative;\r\n\r\n\t\t\t\theight: 7px;\r\n\t\t\t\twidth: 1px;\r\n\r\n\t\t\t\tbackground: transparent;\r\n\r\n\t\t\t\t&:after {\r\n\t\t\t\t\tposition: absolute;\r\n\t\t\t\t\tcontent: \"\";\r\n\t\t\t\t\tleft: -3px;\r\n\t\t\t\t\ttop: 3px;\r\n\r\n\t\t\t\t\theight: 1px;\r\n\t\t\t\t\twidth: 7px;\r\n\r\n\t\t\t\t\tbackground: $rowTextColor;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t.tabulator-data-tree-control-expand{\r\n\t\t\t\tdisplay:inline-block;\r\n\t\t\t\tposition: relative;\r\n\r\n\t\t\t\theight: 7px;\r\n\t\t\t\twidth: 1px;\r\n\r\n\t\t\t\tbackground: $rowTextColor;\r\n\r\n\t\t\t\t&:after {\r\n\t\t\t\t\tposition: absolute;\r\n\t\t\t\t\tcontent: \"\";\r\n\t\t\t\t\tleft: -3px;\r\n\t\t\t\t\ttop: 3px;\r\n\r\n\t\t\t\t\theight: 1px;\r\n\t\t\t\t\twidth: 7px;\r\n\r\n\t\t\t\t\tbackground: $rowTextColor;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\t.tabulator-responsive-collapse-toggle{\r\n\t\t\tdisplay: inline-flex;\r\n\t\t\talign-items:center;\r\n\t\t\tjustify-content:center;\r\n\r\n\t\t\t-moz-user-select: none;\r\n\t\t\t-khtml-user-select: none;\r\n\t\t\t-webkit-user-select: none;\r\n\t\t\t-o-user-select: none;\r\n\r\n\t\t\theight:15px;\r\n\t\t\twidth:15px;\r\n\r\n\t\t\tborder-radius:20px;\r\n\t\t\tbackground:#666;\r\n\r\n\t\t\tcolor:$rowBackgroundColor;\r\n\t\t\tfont-weight:bold;\r\n\t\t\tfont-size:1.1em;\r\n\r\n\t\t\t&:hover{\r\n\t\t\t\topacity:.7;\r\n\t\t\t}\r\n\r\n\t\t\t&.open{\r\n\t\t\t\t.tabulator-responsive-collapse-toggle-close{\r\n\t\t\t\t\tdisplay:initial;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t.tabulator-responsive-collapse-toggle-open{\r\n\t\t\t\t\tdisplay:none;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t.tabulator-responsive-collapse-toggle-close{\r\n\t\t\t\tdisplay:none;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t.tabulator-traffic-light{\r\n\t\t\tdisplay: inline-block;\r\n\t\t\theight:14px;\r\n\t\t\twidth:14px;\r\n\r\n\t\t\tborder-radius:14px;\r\n\t\t}\r\n\t}\r\n\r\n\t//row grouping element\r\n\t&.tabulator-group{\r\n\t\tbox-sizing:border-box;\r\n\t\tborder-bottom:1px solid #999;\r\n\t\tborder-right:1px solid $rowBorderColor;\r\n\t\tborder-top:1px solid #999;\r\n\t\tpadding:5px;\r\n\t\tpadding-left:10px;\r\n\t\tbackground:#ccc;\r\n\t\tfont-weight:bold;\r\n\r\n\t\tmin-width: 100%;\r\n\r\n\t\t&:hover{\r\n\t\t\tcursor:pointer;\r\n\t\t\tbackground-color:rgba(0,0,0,.1);\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-visible{\r\n\r\n\t\t\t.tabulator-arrow{\r\n\t\t\t\tmargin-right:10px;\r\n\t\t\t\tborder-left: 6px solid transparent;\r\n\t\t\t\tborder-right: 6px solid transparent;\r\n\t\t\t\tborder-top: 6px solid $sortArrowActive;\r\n\t\t\t\tborder-bottom: 0;\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-1{\r\n\t\t\tpadding-left:30px;\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-2{\r\n\t\t\tpadding-left:50px;\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-3{\r\n\t\t\tpadding-left:70px;\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-4{\r\n\t\t\tpadding-left:90px;\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-5{\r\n\t\t\tpadding-left:110px;\r\n\t\t}\r\n\r\n\t\t.tabulator-group-toggle{\r\n\t\t\tdisplay: inline-block;\r\n\t\t}\r\n\r\n\t\t//sorting arrow\r\n\t\t.tabulator-arrow{\r\n\t\t\tdisplay: inline-block;\r\n\t\t\twidth: 0;\r\n\t\t\theight: 0;\r\n\t\t\tmargin-right:16px;\r\n\t\t\tborder-top: 6px solid transparent;\r\n\t\t\tborder-bottom: 6px solid transparent;\r\n\t\t\tborder-right: 0;\r\n\t\t\tborder-left: 6px solid $sortArrowActive;\r\n\t\t\tvertical-align:middle;\r\n\t\t}\r\n\r\n\t\tspan{\r\n\t\t\tmargin-left:10px;\r\n\t\t\tcolor:#d00;\r\n\t\t}\r\n\t}\r\n\r\n}\r\n\r\n.tabulator-menu{\r\n\tposition: absolute;\r\n\tdisplay:inline-block;\r\n\tbox-sizing:border-box;\r\n\r\n\tbackground:$rowBackgroundColor;\r\n\tborder:1px solid $rowBorderColor;\r\n\tbox-shadow: 0 0 5px 0 rgba(0, 0, 0, .2);\r\n\r\n\tfont-size:$textSize;\r\n\r\n\toverflow-y:auto;\r\n\t-webkit-overflow-scrolling: touch;\r\n\r\n\tz-index: 10000;\r\n\r\n\t.tabulator-menu-item{\r\n\r\n\t\tpadding:5px 10px;\r\n\r\n\t\tuser-select: none;\r\n\r\n\t\t&.tabulator-menu-item-disabled{\r\n\t\t\topacity: .5;\r\n\t\t}\r\n\r\n\t\t&:not(.tabulator-menu-item-disabled):hover{\r\n\t\t\tcursor: pointer;\r\n\t\t\tbackground: $rowAltBackgroundColor;\r\n\t\t}\r\n\t}\r\n\r\n\t.tabulator-menu-separator{\r\n\t\tborder-top:1px solid $rowBorderColor;\r\n\t}\r\n}\r\n\r\n.tabulator-edit-select-list{\r\n\tposition: absolute;\r\n\tdisplay:inline-block;\r\n\tbox-sizing:border-box;\r\n\r\n\tmax-height:200px;\r\n\r\n\tbackground:$rowBackgroundColor;\r\n\tborder:1px solid $rowBorderColor;\r\n\r\n\tfont-size:$textSize;\r\n\r\n\toverflow-y:auto;\r\n\t-webkit-overflow-scrolling: touch;\r\n\r\n\tz-index: 10000;\r\n\r\n\t.tabulator-edit-select-list-item{\r\n\t\tpadding:4px;\r\n\r\n\t\tcolor:$rowTextColor;\r\n\r\n\t\t&.active{\r\n\t\t\tcolor:$rowBackgroundColor;\r\n\t\t\tbackground:$editBoxColor;\r\n\r\n\t\t\t&.focused{\r\n\t\t\t\toutline:1px solid rgba($rowBackgroundColor, .5);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t&.focused{\r\n\t\t\toutline:1px solid $editBoxColor;\r\n\t\t}\r\n\r\n\t\t&:hover{\r\n\t\t\tcursor:pointer;\r\n\r\n\t\t\tcolor:$rowBackgroundColor;\r\n\t\t\tbackground:$editBoxColor;\r\n\t\t}\r\n\t}\r\n\r\n\t.tabulator-edit-select-list-notice{\r\n\t\tpadding:4px;\r\n\r\n\t\tcolor:$rowTextColor;\r\n\t\ttext-align: center;\r\n\t}\r\n\r\n\t.tabulator-edit-select-list-group{\r\n\t\tborder-bottom:1px solid $rowBorderColor;\r\n\r\n\t\tpadding:4px;\r\n\t\tpadding-top:6px;\r\n\r\n\t\tcolor:$rowTextColor;\r\n\t\tfont-weight:bold;\r\n\t}\r\n}\r\n\r\n\r\n//RTL Styling\r\n\r\n.tabulator.tabulator-ltr{\r\n\tdirection: ltr;\r\n}\r\n\r\n.tabulator.tabulator-rtl{\r\n\ttext-align: initial;\r\n\tdirection: rtl;\r\n\r\n\t.tabulator-header {\r\n\t\t.tabulator-col{\r\n\t\t\ttext-align: initial;\r\n\t\t\tborder-left:1px solid $headerBorderColor;\r\n\t\t\tborder-right:initial;\r\n\r\n\t\t\t&.tabulator-col-group{\r\n\t\t\t\t.tabulator-col-group-cols{\r\n\t\t\t\t\tmargin-right:initial;\r\n\t\t\t\t\tmargin-left:-1px;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t&.tabulator-sortable{\r\n\t\t\t\t.tabulator-col-title{\r\n\t\t\t\t\tpadding-right:0;\r\n\t\t\t\t\tpadding-left:25px;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t.tabulator-col-content{\r\n\t\t\t\t.tabulator-arrow{\r\n\t\t\t\t\tleft:8px;\r\n\t\t\t\t\tright:initial;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t.tabulator-row{\r\n\t\t.tabulator-cell{\r\n\t\t\tborder-right:initial;\r\n\t\t\tborder-left:1px solid $rowBorderColor;\r\n\r\n\t\t\t//hide left resize handle on first column\r\n\t\t\t// &:first-child{\r\n\t\t\t// \t.tabulator-col-resize-handle.prev{\r\n\t\t\t// \t\tdisplay: none;\r\n\t\t\t// \t}\r\n\t\t\t// }\r\n\r\n\t\t\t.tabulator-data-tree-branch{\r\n\t\t\t\tmargin-right:initial;\r\n\t\t\t\tmargin-left:5px;\r\n\r\n\t\t\t\tborder-bottom-left-radius:initial;\r\n\t\t\t\tborder-bottom-right-radius:1px;\r\n\r\n\t\t\t\tborder-left:initial;\r\n\t\t\t\tborder-right:2px solid $rowBorderColor;\r\n\t\t\t}\r\n\r\n\t\t\t.tabulator-data-tree-control{\r\n\t\t\t\tmargin-right:initial;\r\n\t\t\t\tmargin-left:5px;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//column resize handles\r\n\t.tabulator-col-resize-handle{\r\n\t\tposition:absolute;\r\n\t\tleft:0;\r\n\t\tright:auto;\r\n\r\n\t\t&.prev{\r\n\t\t\tright:0;\r\n\t\t\tleft:auto;\r\n\t\t}\r\n\t}\r\n}\r\n\r\n\r\n// Table print styling\r\n\r\n.tabulator-print-fullscreen{\r\n\tposition: absolute;\r\n\ttop:0;\r\n\tbottom:0;\r\n\tleft:0;\r\n\tright:0;\r\n\r\n\tz-index: 10000;\r\n}\r\n\r\nbody.tabulator-print-fullscreen-hide>*:not(.tabulator-print-fullscreen){\r\n\tdisplay:none !important;\r\n}\r\n\r\n.tabulator-print-table{\r\n\tborder-collapse: collapse;\r\n\r\n\t.tabulator-data-tree-branch{\r\n\t\tdisplay:inline-block;\r\n\t\tvertical-align:middle;\r\n\r\n\t\theight:9px;\r\n\t\twidth:7px;\r\n\r\n\t\tmargin-top:-9px;\r\n\t\tmargin-right:5px;\r\n\r\n\t\tborder-bottom-left-radius:1px;\r\n\r\n\t\tborder-left:2px solid $rowBorderColor;\r\n\t\tborder-bottom:2px solid $rowBorderColor;\r\n\t}\r\n\r\n\t//row grouping element\r\n\t.tabulator-print-table-group{\r\n\t\tbox-sizing:border-box;\r\n\t\tborder-bottom:1px solid #999;\r\n\t\tborder-right:1px solid $rowBorderColor;\r\n\t\tborder-top:1px solid #999;\r\n\t\tpadding:5px;\r\n\t\tpadding-left:10px;\r\n\t\tbackground:#ccc;\r\n\t\tfont-weight:bold;\r\n\r\n\t\tmin-width: 100%;\r\n\r\n\t\t&:hover{\r\n\t\t\tcursor:pointer;\r\n\t\t\tbackground-color:rgba(0,0,0,.1);\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-visible{\r\n\r\n\t\t\t.tabulator-arrow{\r\n\t\t\t\tmargin-right:10px;\r\n\t\t\t\tborder-left: 6px solid transparent;\r\n\t\t\t\tborder-right: 6px solid transparent;\r\n\t\t\t\tborder-top: 6px solid $sortArrowActive;\r\n\t\t\t\tborder-bottom: 0;\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-1{\r\n\t\t\ttd{\r\n\t\t\t\tpadding-left:30px !important;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-2{\r\n\t\t\ttd{\r\n\t\t\t\tpadding-left:50px !important;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-3{\r\n\t\t\ttd{\r\n\t\t\t\tpadding-left:70px !important;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-4{\r\n\t\t\ttd{\r\n\t\t\t\tpadding-left:90px !important;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-5{\r\n\t\t\ttd{\r\n\t\t\t\tpadding-left:110px !important;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t.tabulator-group-toggle{\r\n\t\t\tdisplay: inline-block;\r\n\t\t}\r\n\r\n\t\t//sorting arrow\r\n\t\t.tabulator-arrow{\r\n\t\t\tdisplay: inline-block;\r\n\t\t\twidth: 0;\r\n\t\t\theight: 0;\r\n\t\t\tmargin-right:16px;\r\n\t\t\tborder-top: 6px solid transparent;\r\n\t\t\tborder-bottom: 6px solid transparent;\r\n\t\t\tborder-right: 0;\r\n\t\t\tborder-left: 6px solid $sortArrowActive;\r\n\t\t\tvertical-align:middle;\r\n\t\t}\r\n\r\n\t\tspan{\r\n\t\t\tmargin-left:10px;\r\n\t\t\tcolor:#d00;\r\n\t\t}\r\n\t}\r\n\r\n\t.tabulator-data-tree-control{\r\n\r\n\t\tdisplay:inline-flex;\r\n\t\tjustify-content:center;\r\n\t\talign-items:center;\r\n\t\tvertical-align:middle;\r\n\r\n\t\theight:11px;\r\n\t\twidth:11px;\r\n\r\n\t\tmargin-right:5px;\r\n\r\n\t\tborder:1px solid $rowTextColor;\r\n\t\tborder-radius:2px;\r\n\t\tbackground:rgba(0, 0, 0, .1);\r\n\r\n\t\toverflow:hidden;\r\n\r\n\t\t&:hover{\r\n\t\t\tcursor:pointer;\r\n\t\t\tbackground:rgba(0, 0, 0, .2);\r\n\t\t}\r\n\r\n\t\t.tabulator-data-tree-control-collapse{\r\n\t\t\tdisplay:inline-block;\r\n\t\t\tposition: relative;\r\n\r\n\t\t\theight: 7px;\r\n\t\t\twidth: 1px;\r\n\r\n\t\t\tbackground: transparent;\r\n\r\n\t\t\t&:after {\r\n\t\t\t\tposition: absolute;\r\n\t\t\t\tcontent: \"\";\r\n\t\t\t\tleft: -3px;\r\n\t\t\t\ttop: 3px;\r\n\r\n\t\t\t\theight: 1px;\r\n\t\t\t\twidth: 7px;\r\n\r\n\t\t\t\tbackground: $rowTextColor;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t.tabulator-data-tree-control-expand{\r\n\t\t\tdisplay:inline-block;\r\n\t\t\tposition: relative;\r\n\r\n\t\t\theight: 7px;\r\n\t\t\twidth: 1px;\r\n\r\n\t\t\tbackground: $rowTextColor;\r\n\r\n\t\t\t&:after {\r\n\t\t\t\tposition: absolute;\r\n\t\t\t\tcontent: \"\";\r\n\t\t\t\tleft: -3px;\r\n\t\t\t\ttop: 3px;\r\n\r\n\t\t\t\theight: 1px;\r\n\t\t\t\twidth: 7px;\r\n\r\n\t\t\t\tbackground: $rowTextColor;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n\r\n"]}
\ No newline at end of file
diff --git a/website/js/vendor/tabulator/css/tabulator_site.css b/website/js/vendor/tabulator/css/tabulator_site.css
new file mode 100644 (file)
index 0000000..fc14e20
--- /dev/null
@@ -0,0 +1,1086 @@
+/* Tabulator v4.8.3 (c) Oliver Folkerd */
+.tabulator {
+  position: relative;
+  border-bottom: 5px solid #222;
+  background-color: #fff;
+  font-size: 14px;
+  text-align: left;
+  overflow: hidden;
+  -ms-transform: translatez(0);
+  transform: translatez(0);
+}
+
+.tabulator[tabulator-layout="fitDataFill"] .tabulator-tableHolder .tabulator-table {
+  min-width: 100%;
+}
+
+.tabulator[tabulator-layout="fitDataTable"] {
+  display: inline-block;
+}
+
+.tabulator[tabulator-layout="fitColumns"] .tabulator-row .tabulator-cell:last-of-type {
+  border-right: none;
+}
+
+.tabulator.tabulator-block-select {
+  -webkit-user-select: none;
+      -ms-user-select: none;
+          user-select: none;
+}
+
+.tabulator .tabulator-header {
+  position: relative;
+  box-sizing: border-box;
+  width: 100%;
+  border-bottom: 3px solid rgba(32.1569%,38.8235%,55.6863%,1);
+  background-color: #222;
+  color: #fff;
+  font-weight: bold;
+  white-space: nowrap;
+  overflow: hidden;
+  -moz-user-select: none;
+  -khtml-user-select: none;
+  -webkit-user-select: none;
+  -o-user-select: none;
+}
+
+.tabulator .tabulator-header.tabulator-header-hidden {
+  display: none;
+}
+
+.tabulator .tabulator-header .tabulator-col {
+  display: inline-block;
+  position: relative;
+  box-sizing: border-box;
+  border-right: 1px solid #aaa;
+  background-color: #222;
+  text-align: left;
+  vertical-align: bottom;
+  overflow: hidden;
+}
+
+.tabulator .tabulator-header .tabulator-col.tabulator-moving {
+  position: absolute;
+  border: 1px solid rgba(32.1569%,38.8235%,55.6863%,1);
+  background: #090909;
+  pointer-events: none;
+}
+
+.tabulator .tabulator-header .tabulator-col .tabulator-col-content {
+  box-sizing: border-box;
+  position: relative;
+  padding: 8px;
+}
+
+.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-header-menu-button {
+  padding: 0 8px;
+}
+
+.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-header-menu-button:hover {
+  cursor: pointer;
+  opacity: .6;
+}
+
+.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title-holder {
+  position: relative;
+}
+
+.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title {
+  box-sizing: border-box;
+  width: 100%;
+  white-space: nowrap;
+  overflow: hidden;
+  text-overflow: ellipsis;
+  vertical-align: bottom;
+}
+
+.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title .tabulator-title-editor {
+  box-sizing: border-box;
+  width: 100%;
+  border: 1px solid #999;
+  padding: 1px;
+  background: #fff;
+}
+
+.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title .tabulator-header-menu-button + .tabulator-title-editor {
+  width: calc(100% - 22px);
+}
+
+.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-sorter {
+  display: -ms-flexbox;
+  display: flex;
+  -ms-flex-align: center;
+      align-items: center;
+  position: absolute;
+  top: 0;
+  bottom: 0;
+  right: 4px;
+}
+
+.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-sorter .tabulator-arrow {
+  width: 0;
+  height: 0;
+  border-left: 6px solid transparent;
+  border-right: 6px solid transparent;
+  border-bottom: 6px solid #bbb;
+}
+
+.tabulator .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols {
+  position: relative;
+  display: -ms-flexbox;
+  display: flex;
+  border-top: 1px solid #aaa;
+  overflow: hidden;
+  margin-right: -1px;
+}
+
+.tabulator .tabulator-header .tabulator-col:first-child .tabulator-col-resize-handle.prev {
+  display: none;
+}
+
+.tabulator .tabulator-header .tabulator-col .tabulator-header-filter {
+  position: relative;
+  box-sizing: border-box;
+  margin-top: 2px;
+  width: 100%;
+  text-align: center;
+}
+
+.tabulator .tabulator-header .tabulator-col .tabulator-header-filter textarea {
+  height: auto !important;
+}
+
+.tabulator .tabulator-header .tabulator-col .tabulator-header-filter svg {
+  margin-top: 3px;
+}
+
+.tabulator .tabulator-header .tabulator-col .tabulator-header-filter input::-ms-clear {
+  width: 0;
+  height: 0;
+}
+
+.tabulator .tabulator-header .tabulator-col.tabulator-sortable .tabulator-col-title {
+  padding-right: 25px;
+}
+
+.tabulator .tabulator-header .tabulator-col.tabulator-sortable:hover {
+  cursor: pointer;
+  background-color: #090909;
+}
+
+.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort="none"] .tabulator-col-content .tabulator-col-sorter {
+  color: #bbb;
+}
+
+.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort="none"] .tabulator-col-content .tabulator-col-sorter .tabulator-arrow {
+  border-top: none;
+  border-bottom: 6px solid #bbb;
+}
+
+.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort="asc"] .tabulator-col-content .tabulator-col-sorter {
+  color: rgba(32.1569%,38.8235%,55.6863%,1);
+}
+
+.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort="asc"] .tabulator-col-content .tabulator-col-sorter .tabulator-arrow {
+  border-top: none;
+  border-bottom: 6px solid rgba(32.1569%,38.8235%,55.6863%,1);
+}
+
+.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort="desc"] .tabulator-col-content .tabulator-col-sorter {
+  color: rgba(32.1569%,38.8235%,55.6863%,1);
+}
+
+.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort="desc"] .tabulator-col-content .tabulator-col-sorter .tabulator-arrow {
+  border-bottom: none;
+  border-top: 6px solid rgba(32.1569%,38.8235%,55.6863%,1);
+  color: rgba(32.1569%,38.8235%,55.6863%,1);
+}
+
+.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical .tabulator-col-content .tabulator-col-title {
+  -ms-writing-mode: tb-rl;
+      writing-mode: vertical-rl;
+  text-orientation: mixed;
+  display: -ms-flexbox;
+  display: flex;
+  -ms-flex-align: center;
+      align-items: center;
+  -ms-flex-pack: center;
+      justify-content: center;
+}
+
+.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-col-vertical-flip .tabulator-col-title {
+  -ms-transform: rotate(180deg);
+      transform: rotate(180deg);
+}
+
+.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable .tabulator-col-title {
+  padding-right: 0;
+  padding-top: 20px;
+}
+
+.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable.tabulator-col-vertical-flip .tabulator-col-title {
+  padding-right: 0;
+  padding-bottom: 20px;
+}
+
+.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable .tabulator-col-sorter {
+  -ms-flex-pack: center;
+      justify-content: center;
+  left: 0;
+  right: 0;
+  top: 4px;
+  bottom: auto;
+}
+
+.tabulator .tabulator-header .tabulator-frozen {
+  display: inline-block;
+  position: absolute;
+  z-index: 10;
+}
+
+.tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-left {
+  border-right: 2px solid #aaa;
+}
+
+.tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-right {
+  border-left: 2px solid #aaa;
+}
+
+.tabulator .tabulator-header .tabulator-calcs-holder {
+  box-sizing: border-box;
+  min-width: 600%;
+  background: #3c3c3c !important;
+  border-top: 1px solid #aaa;
+  overflow: hidden;
+}
+
+.tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row {
+  background: #3c3c3c !important;
+}
+
+.tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row .tabulator-col-resize-handle {
+  display: none;
+}
+
+.tabulator .tabulator-header .tabulator-frozen-rows-holder {
+  min-width: 600%;
+}
+
+.tabulator .tabulator-header .tabulator-frozen-rows-holder:empty {
+  display: none;
+}
+
+.tabulator .tabulator-tableHolder {
+  position: relative;
+  width: 100%;
+  white-space: nowrap;
+  overflow: auto;
+  -webkit-overflow-scrolling: touch;
+}
+
+.tabulator .tabulator-tableHolder:focus {
+  outline: none;
+}
+
+.tabulator .tabulator-tableHolder .tabulator-placeholder {
+  box-sizing: border-box;
+  display: -ms-flexbox;
+  display: flex;
+  -ms-flex-align: center;
+      align-items: center;
+  width: 100%;
+}
+
+.tabulator .tabulator-tableHolder .tabulator-placeholder[tabulator-render-mode="virtual"] {
+  min-height: 100%;
+  min-width: 100%;
+}
+
+.tabulator .tabulator-tableHolder .tabulator-placeholder span {
+  display: inline-block;
+  margin: 0 auto;
+  padding: 10px;
+  color: rgba(32.1569%,38.8235%,55.6863%,1);
+  font-weight: bold;
+  font-size: 20px;
+}
+
+.tabulator .tabulator-tableHolder .tabulator-table {
+  position: relative;
+  display: inline-block;
+  background-color: #fff;
+  white-space: nowrap;
+  overflow: visible;
+  color: #333;
+}
+
+.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.tabulator-calcs {
+  font-weight: bold;
+  background: #484848 !important;
+  color: #fff;
+}
+
+.tabulator .tabulator-footer {
+  padding: 5px 10px;
+  padding-top: 8px;
+  border-top: 3px solid rgba(32.1569%,38.8235%,55.6863%,1);
+  background-color: #222;
+  text-align: right;
+  color: #222;
+  font-weight: bold;
+  white-space: nowrap;
+  -ms-user-select: none;
+      user-select: none;
+  -moz-user-select: none;
+  -khtml-user-select: none;
+  -webkit-user-select: none;
+  -o-user-select: none;
+}
+
+.tabulator .tabulator-footer .tabulator-calcs-holder {
+  box-sizing: border-box;
+  width: calc(100% + 20px);
+  margin: -8px -10px 8px -10px;
+  text-align: left;
+  background: #3c3c3c !important;
+  border-bottom: 1px solid #aaa;
+  overflow: hidden;
+}
+
+.tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row {
+  background: #3c3c3c !important;
+  color: #fff !important;
+}
+
+.tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row .tabulator-col-resize-handle {
+  display: none;
+}
+
+.tabulator .tabulator-footer .tabulator-calcs-holder:only-child {
+  margin-bottom: -5px;
+  border-bottom: none;
+}
+
+.tabulator .tabulator-footer .tabulator-paginator label {
+  color: #fff;
+}
+
+.tabulator .tabulator-footer .tabulator-page-size {
+  display: inline-block;
+  margin: 0 5px;
+  padding: 2px 5px;
+  border: 1px solid #aaa;
+  border-radius: 3px;
+}
+
+.tabulator .tabulator-footer .tabulator-pages {
+  margin: 0 7px;
+}
+
+.tabulator .tabulator-footer .tabulator-page {
+  display: inline-block;
+  margin: 0 2px;
+  padding: 2px 5px;
+  border: 1px solid #aaa;
+  border-radius: 3px;
+  background: #fff;
+  color: #222;
+  font-family: inherit;
+  font-weight: inherit;
+  font-size: inherit;
+}
+
+.tabulator .tabulator-footer .tabulator-page.active {
+  color: rgba(32.1569%,38.8235%,55.6863%,1);
+}
+
+.tabulator .tabulator-footer .tabulator-page:disabled {
+  opacity: .5;
+}
+
+.tabulator .tabulator-footer .tabulator-page:not(.disabled):hover {
+  cursor: pointer;
+  background: rgba(0, 0, 0, 0.2);
+  color: #fff;
+}
+
+.tabulator .tabulator-col-resize-handle {
+  position: absolute;
+  right: 0;
+  top: 0;
+  bottom: 0;
+  width: 5px;
+}
+
+.tabulator .tabulator-col-resize-handle.prev {
+  left: 0;
+  right: auto;
+}
+
+.tabulator .tabulator-col-resize-handle:hover {
+  cursor: ew-resize;
+}
+
+.tabulator .tabulator-loader {
+  position: absolute;
+  display: -ms-flexbox;
+  display: flex;
+  -ms-flex-align: center;
+      align-items: center;
+  top: 0;
+  left: 0;
+  z-index: 100;
+  height: 100%;
+  width: 100%;
+  background: rgba(0, 0, 0, 0.4);
+  text-align: center;
+}
+
+.tabulator .tabulator-loader .tabulator-loader-msg {
+  display: inline-block;
+  margin: 0 auto;
+  padding: 10px 20px;
+  border-radius: 10px;
+  background: #fff;
+  font-weight: bold;
+  font-size: 16px;
+}
+
+.tabulator .tabulator-loader .tabulator-loader-msg.tabulator-loading {
+  border: 4px solid #333;
+  color: #000;
+}
+
+.tabulator .tabulator-loader .tabulator-loader-msg.tabulator-error {
+  border: 4px solid #D00;
+  color: #590000;
+}
+
+.tabulator-row {
+  position: relative;
+  box-sizing: border-box;
+  min-height: 22px;
+  background-color: #fff;
+}
+
+.tabulator-row.tabulator-row-even {
+  background-color: #EFEFEF;
+}
+
+.tabulator-row.tabulator-selectable:hover {
+  background-color: #bbb;
+  cursor: pointer;
+}
+
+.tabulator-row.tabulator-selected {
+  background-color: #9ABCEA;
+}
+
+.tabulator-row.tabulator-selected:hover {
+  background-color: #769BCC;
+  cursor: pointer;
+}
+
+.tabulator-row.tabulator-row-moving {
+  border: 1px solid #000;
+  background: #fff;
+}
+
+.tabulator-row.tabulator-moving {
+  position: absolute;
+  border-top: 1px solid #aaa;
+  border-bottom: 1px solid #aaa;
+  pointer-events: none !important;
+  z-index: 15;
+}
+
+.tabulator-row .tabulator-row-resize-handle {
+  position: absolute;
+  right: 0;
+  bottom: 0;
+  left: 0;
+  height: 5px;
+}
+
+.tabulator-row .tabulator-row-resize-handle.prev {
+  top: 0;
+  bottom: auto;
+}
+
+.tabulator-row .tabulator-row-resize-handle:hover {
+  cursor: ns-resize;
+}
+
+.tabulator-row .tabulator-frozen {
+  display: inline-block;
+  position: absolute;
+  background-color: inherit;
+  z-index: 10;
+}
+
+.tabulator-row .tabulator-frozen.tabulator-frozen-left {
+  border-right: 2px solid #aaa;
+}
+
+.tabulator-row .tabulator-frozen.tabulator-frozen-right {
+  border-left: 2px solid #aaa;
+}
+
+.tabulator-row .tabulator-responsive-collapse {
+  box-sizing: border-box;
+  padding: 5px;
+  border-top: 1px solid #aaa;
+  border-bottom: 1px solid #aaa;
+}
+
+.tabulator-row .tabulator-responsive-collapse:empty {
+  display: none;
+}
+
+.tabulator-row .tabulator-responsive-collapse table {
+  font-size: 14px;
+}
+
+.tabulator-row .tabulator-responsive-collapse table tr td {
+  position: relative;
+}
+
+.tabulator-row .tabulator-responsive-collapse table tr td:first-of-type {
+  padding-right: 10px;
+}
+
+.tabulator-row .tabulator-cell {
+  display: inline-block;
+  position: relative;
+  box-sizing: border-box;
+  padding: 6px;
+  border-right: 1px solid #aaa;
+  vertical-align: middle;
+  white-space: nowrap;
+  overflow: hidden;
+  text-overflow: ellipsis;
+}
+
+.tabulator-row .tabulator-cell.tabulator-editing {
+  border: 1px solid #1D68CD;
+  padding: 0;
+}
+
+.tabulator-row .tabulator-cell.tabulator-editing input, .tabulator-row .tabulator-cell.tabulator-editing select {
+  border: 1px;
+  background: transparent;
+}
+
+.tabulator-row .tabulator-cell.tabulator-validation-fail {
+  border: 1px solid #dd0000;
+}
+
+.tabulator-row .tabulator-cell.tabulator-validation-fail input, .tabulator-row .tabulator-cell.tabulator-validation-fail select {
+  border: 1px;
+  background: transparent;
+  color: #dd0000;
+}
+
+.tabulator-row .tabulator-cell:first-child .tabulator-col-resize-handle.prev {
+  display: none;
+}
+
+.tabulator-row .tabulator-cell.tabulator-row-handle {
+  display: -ms-inline-flexbox;
+  display: inline-flex;
+  -ms-flex-align: center;
+      align-items: center;
+  -moz-user-select: none;
+  -khtml-user-select: none;
+  -webkit-user-select: none;
+  -o-user-select: none;
+}
+
+.tabulator-row .tabulator-cell.tabulator-row-handle .tabulator-row-handle-box {
+  width: 80%;
+}
+
+.tabulator-row .tabulator-cell.tabulator-row-handle .tabulator-row-handle-box .tabulator-row-handle-bar {
+  width: 100%;
+  height: 3px;
+  margin-top: 2px;
+  background: rgba(32.1569%,38.8235%,55.6863%,1);
+}
+
+.tabulator-row .tabulator-cell .tabulator-data-tree-branch {
+  display: inline-block;
+  vertical-align: middle;
+  height: 9px;
+  width: 7px;
+  margin-top: -9px;
+  margin-right: 5px;
+  border-bottom-left-radius: 1px;
+  border-left: 2px solid #aaa;
+  border-bottom: 2px solid #aaa;
+}
+
+.tabulator-row .tabulator-cell .tabulator-data-tree-control {
+  display: -ms-inline-flexbox;
+  display: inline-flex;
+  -ms-flex-pack: center;
+      justify-content: center;
+  -ms-flex-align: center;
+      align-items: center;
+  vertical-align: middle;
+  height: 11px;
+  width: 11px;
+  margin-right: 5px;
+  border: 1px solid #333;
+  border-radius: 2px;
+  background: rgba(0, 0, 0, 0.1);
+  overflow: hidden;
+}
+
+.tabulator-row .tabulator-cell .tabulator-data-tree-control:hover {
+  cursor: pointer;
+  background: rgba(0, 0, 0, 0.2);
+}
+
+.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-collapse {
+  display: inline-block;
+  position: relative;
+  height: 7px;
+  width: 1px;
+  background: transparent;
+}
+
+.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-collapse:after {
+  position: absolute;
+  content: "";
+  left: -3px;
+  top: 3px;
+  height: 1px;
+  width: 7px;
+  background: #333;
+}
+
+.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand {
+  display: inline-block;
+  position: relative;
+  height: 7px;
+  width: 1px;
+  background: #333;
+}
+
+.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand:after {
+  position: absolute;
+  content: "";
+  left: -3px;
+  top: 3px;
+  height: 1px;
+  width: 7px;
+  background: #333;
+}
+
+.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle {
+  display: -ms-inline-flexbox;
+  display: inline-flex;
+  -ms-flex-align: center;
+      align-items: center;
+  -ms-flex-pack: center;
+      justify-content: center;
+  -moz-user-select: none;
+  -khtml-user-select: none;
+  -webkit-user-select: none;
+  -o-user-select: none;
+  height: 15px;
+  width: 15px;
+  border-radius: 20px;
+  background: #666;
+  color: #fff;
+  font-weight: bold;
+  font-size: 1.1em;
+}
+
+.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle:hover {
+  opacity: .7;
+}
+
+.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle.open .tabulator-responsive-collapse-toggle-close {
+  display: initial;
+}
+
+.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle.open .tabulator-responsive-collapse-toggle-open {
+  display: none;
+}
+
+.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle .tabulator-responsive-collapse-toggle-close {
+  display: none;
+}
+
+.tabulator-row .tabulator-cell .tabulator-traffic-light {
+  display: inline-block;
+  height: 14px;
+  width: 14px;
+  border-radius: 14px;
+}
+
+.tabulator-row.tabulator-group {
+  box-sizing: border-box;
+  border-right: 1px solid #aaa;
+  border-top: 1px solid #000;
+  border-bottom: 2px solid rgba(32.1569%,38.8235%,55.6863%,1);
+  padding: 5px;
+  padding-left: 10px;
+  background: #222;
+  color: #fff;
+  font-weight: bold;
+  min-width: 100%;
+}
+
+.tabulator-row.tabulator-group:hover {
+  cursor: pointer;
+  background-color: #090909;
+}
+
+.tabulator-row.tabulator-group.tabulator-group-visible .tabulator-arrow {
+  margin-right: 10px;
+  border-left: 6px solid transparent;
+  border-right: 6px solid transparent;
+  border-top: 6px solid rgba(32.1569%,38.8235%,55.6863%,1);
+  border-bottom: 0;
+}
+
+.tabulator-row.tabulator-group.tabulator-group-level-1 {
+  padding-left: 30px;
+}
+
+.tabulator-row.tabulator-group.tabulator-group-level-2 {
+  padding-left: 50px;
+}
+
+.tabulator-row.tabulator-group.tabulator-group-level-3 {
+  padding-left: 70px;
+}
+
+.tabulator-row.tabulator-group.tabulator-group-level-4 {
+  padding-left: 90px;
+}
+
+.tabulator-row.tabulator-group.tabulator-group-level-5 {
+  padding-left: 110px;
+}
+
+.tabulator-row.tabulator-group .tabulator-group-toggle {
+  display: inline-block;
+}
+
+.tabulator-row.tabulator-group .tabulator-arrow {
+  display: inline-block;
+  width: 0;
+  height: 0;
+  margin-right: 16px;
+  border-top: 6px solid transparent;
+  border-bottom: 6px solid transparent;
+  border-right: 0;
+  border-left: 6px solid rgba(32.1569%,38.8235%,55.6863%,1);
+  vertical-align: middle;
+}
+
+.tabulator-row.tabulator-group span {
+  margin-left: 10px;
+  color: rgba(32.1569%,38.8235%,55.6863%,1);
+}
+
+.tabulator-menu {
+  position: absolute;
+  display: inline-block;
+  box-sizing: border-box;
+  background: #fff;
+  border: 1px solid #aaa;
+  box-shadow: 0 0 5px 0 rgba(0, 0, 0, 0.2);
+  font-size: 14px;
+  overflow-y: auto;
+  -webkit-overflow-scrolling: touch;
+  z-index: 10000;
+}
+
+.tabulator-menu .tabulator-menu-item {
+  padding: 5px 10px;
+  -webkit-user-select: none;
+      -ms-user-select: none;
+          user-select: none;
+}
+
+.tabulator-menu .tabulator-menu-item.tabulator-menu-item-disabled {
+  opacity: .5;
+}
+
+.tabulator-menu .tabulator-menu-item:not(.tabulator-menu-item-disabled):hover {
+  cursor: pointer;
+  background: #EFEFEF;
+}
+
+.tabulator-menu .tabulator-menu-separator {
+  border-top: 1px solid #aaa;
+}
+
+.tabulator-edit-select-list {
+  position: absolute;
+  display: inline-block;
+  box-sizing: border-box;
+  max-height: 200px;
+  background: #fff;
+  border: 1px solid #aaa;
+  font-size: 14px;
+  overflow-y: auto;
+  -webkit-overflow-scrolling: touch;
+  z-index: 10000;
+}
+
+.tabulator-edit-select-list .tabulator-edit-select-list-item {
+  padding: 4px;
+  color: #333;
+}
+
+.tabulator-edit-select-list .tabulator-edit-select-list-item.active {
+  color: #fff;
+  background: #1D68CD;
+}
+
+.tabulator-edit-select-list .tabulator-edit-select-list-item.active.focused {
+  outline: 1px solid rgba(255, 255, 255, 0.5);
+}
+
+.tabulator-edit-select-list .tabulator-edit-select-list-item.focused {
+  outline: 1px solid #1D68CD;
+}
+
+.tabulator-edit-select-list .tabulator-edit-select-list-item:hover {
+  cursor: pointer;
+  color: #fff;
+  background: #1D68CD;
+}
+
+.tabulator-edit-select-list .tabulator-edit-select-list-notice {
+  padding: 4px;
+  color: #333;
+  text-align: center;
+}
+
+.tabulator-edit-select-list .tabulator-edit-select-list-group {
+  border-bottom: 1px solid #aaa;
+  padding: 4px;
+  padding-top: 6px;
+  color: #333;
+  font-weight: bold;
+}
+
+.tabulator.tabulator-ltr {
+  direction: ltr;
+}
+
+.tabulator.tabulator-rtl {
+  text-align: initial;
+  direction: rtl;
+}
+
+.tabulator.tabulator-rtl .tabulator-header .tabulator-col {
+  text-align: initial;
+  border-left: 1px solid #aaa;
+  border-right: initial;
+}
+
+.tabulator.tabulator-rtl .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols {
+  margin-right: initial;
+  margin-left: -1px;
+}
+
+.tabulator.tabulator-rtl .tabulator-header .tabulator-col.tabulator-sortable .tabulator-col-title {
+  padding-right: 0;
+  padding-left: 25px;
+}
+
+.tabulator.tabulator-rtl .tabulator-header .tabulator-col .tabulator-col-content .tabulator-arrow {
+  left: 8px;
+  right: initial;
+}
+
+.tabulator.tabulator-rtl .tabulator-row .tabulator-cell {
+  border-right: initial;
+  border-left: 1px solid #aaa;
+}
+
+.tabulator.tabulator-rtl .tabulator-row .tabulator-cell .tabulator-data-tree-branch {
+  margin-right: initial;
+  margin-left: 5px;
+  border-bottom-left-radius: initial;
+  border-bottom-right-radius: 1px;
+  border-left: initial;
+  border-right: 2px solid #aaa;
+}
+
+.tabulator.tabulator-rtl .tabulator-row .tabulator-cell .tabulator-data-tree-control {
+  margin-right: initial;
+  margin-left: 5px;
+}
+
+.tabulator.tabulator-rtl .tabulator-col-resize-handle {
+  position: absolute;
+  left: 0;
+  right: auto;
+}
+
+.tabulator.tabulator-rtl .tabulator-col-resize-handle.prev {
+  right: 0;
+  left: auto;
+}
+
+.tabulator-print-fullscreen {
+  position: absolute;
+  top: 0;
+  bottom: 0;
+  left: 0;
+  right: 0;
+  z-index: 10000;
+}
+
+body.tabulator-print-fullscreen-hide > *:not(.tabulator-print-fullscreen) {
+  display: none !important;
+}
+
+.tabulator-print-table {
+  border-collapse: collapse;
+}
+
+.tabulator-print-table .tabulator-print-table-group {
+  box-sizing: border-box;
+  border-right: 1px solid #aaa;
+  border-top: 1px solid #000;
+  border-bottom: 2px solid rgba(32.1569%,38.8235%,55.6863%,1);
+  padding: 5px;
+  padding-left: 10px;
+  background: #222;
+  color: #fff;
+  font-weight: bold;
+  min-width: 100%;
+}
+
+.tabulator-print-table .tabulator-print-table-group:hover {
+  cursor: pointer;
+  background-color: #090909;
+}
+
+.tabulator-print-table .tabulator-print-table-group.tabulator-group-visible .tabulator-arrow {
+  margin-right: 10px;
+  border-left: 6px solid transparent;
+  border-right: 6px solid transparent;
+  border-top: 6px solid rgba(32.1569%,38.8235%,55.6863%,1);
+  border-bottom: 0;
+}
+
+.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-1 td {
+  padding-left: 30px !important;
+}
+
+.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-2 td {
+  padding-left: 50px !important;
+}
+
+.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-3 td {
+  padding-left: 70px !important;
+}
+
+.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-4 td {
+  padding-left: 90px !important;
+}
+
+.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-5 td {
+  padding-left: 110px !important;
+}
+
+.tabulator-print-table .tabulator-print-table-group .tabulator-group-toggle {
+  display: inline-block;
+}
+
+.tabulator-print-table .tabulator-print-table-group .tabulator-arrow {
+  display: inline-block;
+  width: 0;
+  height: 0;
+  margin-right: 16px;
+  border-top: 6px solid transparent;
+  border-bottom: 6px solid transparent;
+  border-right: 0;
+  border-left: 6px solid rgba(32.1569%,38.8235%,55.6863%,1);
+  vertical-align: middle;
+}
+
+.tabulator-print-table .tabulator-print-table-group span {
+  margin-left: 10px;
+  color: rgba(32.1569%,38.8235%,55.6863%,1);
+}
+
+.tabulator-print-table .tabulator-data-tree-branch {
+  display: inline-block;
+  vertical-align: middle;
+  height: 9px;
+  width: 7px;
+  margin-top: -9px;
+  margin-right: 5px;
+  border-bottom-left-radius: 1px;
+  border-left: 2px solid #aaa;
+  border-bottom: 2px solid #aaa;
+}
+
+.tabulator-print-table .tabulator-data-tree-control {
+  display: -ms-inline-flexbox;
+  display: inline-flex;
+  -ms-flex-pack: center;
+      justify-content: center;
+  -ms-flex-align: center;
+      align-items: center;
+  vertical-align: middle;
+  height: 11px;
+  width: 11px;
+  margin-right: 5px;
+  border: 1px solid #333;
+  border-radius: 2px;
+  background: rgba(0, 0, 0, 0.1);
+  overflow: hidden;
+}
+
+.tabulator-print-table .tabulator-data-tree-control:hover {
+  cursor: pointer;
+  background: rgba(0, 0, 0, 0.2);
+}
+
+.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-collapse {
+  display: inline-block;
+  position: relative;
+  height: 7px;
+  width: 1px;
+  background: transparent;
+}
+
+.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-collapse:after {
+  position: absolute;
+  content: "";
+  left: -3px;
+  top: 3px;
+  height: 1px;
+  width: 7px;
+  background: #333;
+}
+
+.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-expand {
+  display: inline-block;
+  position: relative;
+  height: 7px;
+  width: 1px;
+  background: #333;
+}
+
+.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-expand:after {
+  position: absolute;
+  content: "";
+  left: -3px;
+  top: 3px;
+  height: 1px;
+  width: 7px;
+  background: #333;
+}
diff --git a/website/js/vendor/tabulator/css/tabulator_site.min.css b/website/js/vendor/tabulator/css/tabulator_site.min.css
new file mode 100644 (file)
index 0000000..3b32a79
--- /dev/null
@@ -0,0 +1 @@
+.tabulator{position:relative;border-bottom:5px solid #222;background-color:#fff;font-size:14px;text-align:left;overflow:hidden;-ms-transform:translatez(0);transform:translatez(0)}.tabulator[tabulator-layout=fitDataFill] .tabulator-tableHolder .tabulator-table{min-width:100%}.tabulator[tabulator-layout=fitDataTable]{display:inline-block}.tabulator[tabulator-layout=fitColumns] .tabulator-row .tabulator-cell:last-of-type{border-right:none}.tabulator.tabulator-block-select{-webkit-user-select:none;-ms-user-select:none;user-select:none}.tabulator .tabulator-header{position:relative;box-sizing:border-box;width:100%;border-bottom:3px solid rgba(32.1569%,38.8235%,55.6863%,1);background-color:#222;color:#fff;font-weight:700;white-space:nowrap;overflow:hidden;-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-o-user-select:none}.tabulator .tabulator-header.tabulator-header-hidden{display:none}.tabulator .tabulator-header .tabulator-col{display:inline-block;position:relative;box-sizing:border-box;border-right:1px solid #aaa;background-color:#222;text-align:left;vertical-align:bottom;overflow:hidden}.tabulator .tabulator-header .tabulator-col.tabulator-moving{position:absolute;border:1px solid rgba(32.1569%,38.8235%,55.6863%,1);background:#090909;pointer-events:none}.tabulator .tabulator-header .tabulator-col .tabulator-col-content{box-sizing:border-box;position:relative;padding:8px}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-header-menu-button{padding:0 8px}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-header-menu-button:hover{cursor:pointer;opacity:.6}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title-holder{position:relative}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title{box-sizing:border-box;width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;vertical-align:bottom}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title .tabulator-title-editor{box-sizing:border-box;width:100%;border:1px solid #999;padding:1px;background:#fff}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title .tabulator-header-menu-button+.tabulator-title-editor{width:calc(100% - 22px)}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-sorter{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;position:absolute;top:0;bottom:0;right:4px}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-sorter .tabulator-arrow{width:0;height:0;border-left:6px solid transparent;border-right:6px solid transparent;border-bottom:6px solid #bbb}.tabulator .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols{position:relative;display:-ms-flexbox;display:flex;border-top:1px solid #aaa;overflow:hidden;margin-right:-1px}.tabulator .tabulator-header .tabulator-col:first-child .tabulator-col-resize-handle.prev{display:none}.tabulator .tabulator-header .tabulator-col .tabulator-header-filter{position:relative;box-sizing:border-box;margin-top:2px;width:100%;text-align:center}.tabulator .tabulator-header .tabulator-col .tabulator-header-filter textarea{height:auto!important}.tabulator .tabulator-header .tabulator-col .tabulator-header-filter svg{margin-top:3px}.tabulator .tabulator-header .tabulator-col .tabulator-header-filter input::-ms-clear{width:0;height:0}.tabulator .tabulator-header .tabulator-col.tabulator-sortable .tabulator-col-title{padding-right:25px}.tabulator .tabulator-header .tabulator-col.tabulator-sortable:hover{cursor:pointer;background-color:#090909}.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=none] .tabulator-col-content .tabulator-col-sorter{color:#bbb}.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=none] .tabulator-col-content .tabulator-col-sorter .tabulator-arrow{border-top:none;border-bottom:6px solid #bbb}.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=asc] .tabulator-col-content .tabulator-col-sorter{color:rgba(32.1569%,38.8235%,55.6863%,1)}.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=asc] .tabulator-col-content .tabulator-col-sorter .tabulator-arrow{border-top:none;border-bottom:6px solid rgba(32.1569%,38.8235%,55.6863%,1)}.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=desc] .tabulator-col-content .tabulator-col-sorter{color:rgba(32.1569%,38.8235%,55.6863%,1)}.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=desc] .tabulator-col-content .tabulator-col-sorter .tabulator-arrow{border-bottom:none;border-top:6px solid rgba(32.1569%,38.8235%,55.6863%,1);color:rgba(32.1569%,38.8235%,55.6863%,1)}.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical .tabulator-col-content .tabulator-col-title{-ms-writing-mode:tb-rl;writing-mode:vertical-rl;text-orientation:mixed;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center}.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-col-vertical-flip .tabulator-col-title{-ms-transform:rotate(180deg);transform:rotate(180deg)}.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable .tabulator-col-title{padding-right:0;padding-top:20px}.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable.tabulator-col-vertical-flip .tabulator-col-title{padding-right:0;padding-bottom:20px}.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable .tabulator-col-sorter{-ms-flex-pack:center;justify-content:center;left:0;right:0;top:4px;bottom:auto}.tabulator .tabulator-header .tabulator-frozen{display:inline-block;position:absolute;z-index:10}.tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-left{border-right:2px solid #aaa}.tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-right{border-left:2px solid #aaa}.tabulator .tabulator-header .tabulator-calcs-holder{box-sizing:border-box;min-width:600%;background:#3c3c3c!important;border-top:1px solid #aaa;overflow:hidden}.tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row{background:#3c3c3c!important}.tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row .tabulator-col-resize-handle{display:none}.tabulator .tabulator-header .tabulator-frozen-rows-holder{min-width:600%}.tabulator .tabulator-header .tabulator-frozen-rows-holder:empty{display:none}.tabulator .tabulator-tableHolder{position:relative;width:100%;white-space:nowrap;overflow:auto;-webkit-overflow-scrolling:touch}.tabulator .tabulator-tableHolder:focus{outline:0}.tabulator .tabulator-tableHolder .tabulator-placeholder{box-sizing:border-box;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;width:100%}.tabulator .tabulator-tableHolder .tabulator-placeholder[tabulator-render-mode=virtual]{min-height:100%;min-width:100%}.tabulator .tabulator-tableHolder .tabulator-placeholder span{display:inline-block;margin:0 auto;padding:10px;color:rgba(32.1569%,38.8235%,55.6863%,1);font-weight:700;font-size:20px}.tabulator .tabulator-tableHolder .tabulator-table{position:relative;display:inline-block;background-color:#fff;white-space:nowrap;overflow:visible;color:#333}.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.tabulator-calcs{font-weight:700;background:#484848!important;color:#fff}.tabulator .tabulator-footer{padding:5px 10px;padding-top:8px;border-top:3px solid rgba(32.1569%,38.8235%,55.6863%,1);background-color:#222;text-align:right;color:#222;font-weight:700;white-space:nowrap;-ms-user-select:none;user-select:none;-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-o-user-select:none}.tabulator .tabulator-footer .tabulator-calcs-holder{box-sizing:border-box;width:calc(100% + 20px);margin:-8px -10px 8px -10px;text-align:left;background:#3c3c3c!important;border-bottom:1px solid #aaa;overflow:hidden}.tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row{background:#3c3c3c!important;color:#fff!important}.tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row .tabulator-col-resize-handle{display:none}.tabulator .tabulator-footer .tabulator-calcs-holder:only-child{margin-bottom:-5px;border-bottom:none}.tabulator .tabulator-footer .tabulator-paginator label{color:#fff}.tabulator .tabulator-footer .tabulator-page-size{display:inline-block;margin:0 5px;padding:2px 5px;border:1px solid #aaa;border-radius:3px}.tabulator .tabulator-footer .tabulator-pages{margin:0 7px}.tabulator .tabulator-footer .tabulator-page{display:inline-block;margin:0 2px;padding:2px 5px;border:1px solid #aaa;border-radius:3px;background:#fff;color:#222;font-family:inherit;font-weight:inherit;font-size:inherit}.tabulator .tabulator-footer .tabulator-page.active{color:rgba(32.1569%,38.8235%,55.6863%,1)}.tabulator .tabulator-footer .tabulator-page:disabled{opacity:.5}.tabulator .tabulator-footer .tabulator-page:not(.disabled):hover{cursor:pointer;background:rgba(0,0,0,.2);color:#fff}.tabulator .tabulator-col-resize-handle{position:absolute;right:0;top:0;bottom:0;width:5px}.tabulator .tabulator-col-resize-handle.prev{left:0;right:auto}.tabulator .tabulator-col-resize-handle:hover{cursor:ew-resize}.tabulator .tabulator-loader{position:absolute;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;top:0;left:0;z-index:100;height:100%;width:100%;background:rgba(0,0,0,.4);text-align:center}.tabulator .tabulator-loader .tabulator-loader-msg{display:inline-block;margin:0 auto;padding:10px 20px;border-radius:10px;background:#fff;font-weight:700;font-size:16px}.tabulator .tabulator-loader .tabulator-loader-msg.tabulator-loading{border:4px solid #333;color:#000}.tabulator .tabulator-loader .tabulator-loader-msg.tabulator-error{border:4px solid #d00;color:#590000}.tabulator-row{position:relative;box-sizing:border-box;min-height:22px;background-color:#fff}.tabulator-row.tabulator-row-even{background-color:#efefef}.tabulator-row.tabulator-selectable:hover{background-color:#bbb;cursor:pointer}.tabulator-row.tabulator-selected{background-color:#9abcea}.tabulator-row.tabulator-selected:hover{background-color:#769bcc;cursor:pointer}.tabulator-row.tabulator-row-moving{border:1px solid #000;background:#fff}.tabulator-row.tabulator-moving{position:absolute;border-top:1px solid #aaa;border-bottom:1px solid #aaa;pointer-events:none!important;z-index:15}.tabulator-row .tabulator-row-resize-handle{position:absolute;right:0;bottom:0;left:0;height:5px}.tabulator-row .tabulator-row-resize-handle.prev{top:0;bottom:auto}.tabulator-row .tabulator-row-resize-handle:hover{cursor:ns-resize}.tabulator-row .tabulator-frozen{display:inline-block;position:absolute;background-color:inherit;z-index:10}.tabulator-row .tabulator-frozen.tabulator-frozen-left{border-right:2px solid #aaa}.tabulator-row .tabulator-frozen.tabulator-frozen-right{border-left:2px solid #aaa}.tabulator-row .tabulator-responsive-collapse{box-sizing:border-box;padding:5px;border-top:1px solid #aaa;border-bottom:1px solid #aaa}.tabulator-row .tabulator-responsive-collapse:empty{display:none}.tabulator-row .tabulator-responsive-collapse table{font-size:14px}.tabulator-row .tabulator-responsive-collapse table tr td{position:relative}.tabulator-row .tabulator-responsive-collapse table tr td:first-of-type{padding-right:10px}.tabulator-row .tabulator-cell{display:inline-block;position:relative;box-sizing:border-box;padding:6px;border-right:1px solid #aaa;vertical-align:middle;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.tabulator-row .tabulator-cell.tabulator-editing{border:1px solid #1d68cd;padding:0}.tabulator-row .tabulator-cell.tabulator-editing input,.tabulator-row .tabulator-cell.tabulator-editing select{border:1px;background:0 0}.tabulator-row .tabulator-cell.tabulator-validation-fail{border:1px solid #d00}.tabulator-row .tabulator-cell.tabulator-validation-fail input,.tabulator-row .tabulator-cell.tabulator-validation-fail select{border:1px;background:0 0;color:#d00}.tabulator-row .tabulator-cell:first-child .tabulator-col-resize-handle.prev{display:none}.tabulator-row .tabulator-cell.tabulator-row-handle{display:-ms-inline-flexbox;display:inline-flex;-ms-flex-align:center;align-items:center;-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-o-user-select:none}.tabulator-row .tabulator-cell.tabulator-row-handle .tabulator-row-handle-box{width:80%}.tabulator-row .tabulator-cell.tabulator-row-handle .tabulator-row-handle-box .tabulator-row-handle-bar{width:100%;height:3px;margin-top:2px;background:rgba(32.1569%,38.8235%,55.6863%,1)}.tabulator-row .tabulator-cell .tabulator-data-tree-branch{display:inline-block;vertical-align:middle;height:9px;width:7px;margin-top:-9px;margin-right:5px;border-bottom-left-radius:1px;border-left:2px solid #aaa;border-bottom:2px solid #aaa}.tabulator-row .tabulator-cell .tabulator-data-tree-control{display:-ms-inline-flexbox;display:inline-flex;-ms-flex-pack:center;justify-content:center;-ms-flex-align:center;align-items:center;vertical-align:middle;height:11px;width:11px;margin-right:5px;border:1px solid #333;border-radius:2px;background:rgba(0,0,0,.1);overflow:hidden}.tabulator-row .tabulator-cell .tabulator-data-tree-control:hover{cursor:pointer;background:rgba(0,0,0,.2)}.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-collapse{display:inline-block;position:relative;height:7px;width:1px;background:0 0}.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-collapse:after{position:absolute;content:"";left:-3px;top:3px;height:1px;width:7px;background:#333}.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand{display:inline-block;position:relative;height:7px;width:1px;background:#333}.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand:after{position:absolute;content:"";left:-3px;top:3px;height:1px;width:7px;background:#333}.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle{display:-ms-inline-flexbox;display:inline-flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-o-user-select:none;height:15px;width:15px;border-radius:20px;background:#666;color:#fff;font-weight:700;font-size:1.1em}.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle:hover{opacity:.7}.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle.open .tabulator-responsive-collapse-toggle-close{display:initial}.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle.open .tabulator-responsive-collapse-toggle-open{display:none}.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle .tabulator-responsive-collapse-toggle-close{display:none}.tabulator-row .tabulator-cell .tabulator-traffic-light{display:inline-block;height:14px;width:14px;border-radius:14px}.tabulator-row.tabulator-group{box-sizing:border-box;border-right:1px solid #aaa;border-top:1px solid #000;border-bottom:2px solid rgba(32.1569%,38.8235%,55.6863%,1);padding:5px;padding-left:10px;background:#222;color:#fff;font-weight:700;min-width:100%}.tabulator-row.tabulator-group:hover{cursor:pointer;background-color:#090909}.tabulator-row.tabulator-group.tabulator-group-visible .tabulator-arrow{margin-right:10px;border-left:6px solid transparent;border-right:6px solid transparent;border-top:6px solid rgba(32.1569%,38.8235%,55.6863%,1);border-bottom:0}.tabulator-row.tabulator-group.tabulator-group-level-1{padding-left:30px}.tabulator-row.tabulator-group.tabulator-group-level-2{padding-left:50px}.tabulator-row.tabulator-group.tabulator-group-level-3{padding-left:70px}.tabulator-row.tabulator-group.tabulator-group-level-4{padding-left:90px}.tabulator-row.tabulator-group.tabulator-group-level-5{padding-left:110px}.tabulator-row.tabulator-group .tabulator-group-toggle{display:inline-block}.tabulator-row.tabulator-group .tabulator-arrow{display:inline-block;width:0;height:0;margin-right:16px;border-top:6px solid transparent;border-bottom:6px solid transparent;border-right:0;border-left:6px solid rgba(32.1569%,38.8235%,55.6863%,1);vertical-align:middle}.tabulator-row.tabulator-group span{margin-left:10px;color:rgba(32.1569%,38.8235%,55.6863%,1)}.tabulator-menu{position:absolute;display:inline-block;box-sizing:border-box;background:#fff;border:1px solid #aaa;box-shadow:0 0 5px 0 rgba(0,0,0,.2);font-size:14px;overflow-y:auto;-webkit-overflow-scrolling:touch;z-index:10000}.tabulator-menu .tabulator-menu-item{padding:5px 10px;-webkit-user-select:none;-ms-user-select:none;user-select:none}.tabulator-menu .tabulator-menu-item.tabulator-menu-item-disabled{opacity:.5}.tabulator-menu .tabulator-menu-item:not(.tabulator-menu-item-disabled):hover{cursor:pointer;background:#efefef}.tabulator-menu .tabulator-menu-separator{border-top:1px solid #aaa}.tabulator-edit-select-list{position:absolute;display:inline-block;box-sizing:border-box;max-height:200px;background:#fff;border:1px solid #aaa;font-size:14px;overflow-y:auto;-webkit-overflow-scrolling:touch;z-index:10000}.tabulator-edit-select-list .tabulator-edit-select-list-item{padding:4px;color:#333}.tabulator-edit-select-list .tabulator-edit-select-list-item.active{color:#fff;background:#1d68cd}.tabulator-edit-select-list .tabulator-edit-select-list-item.active.focused{outline:1px solid rgba(255,255,255,.5)}.tabulator-edit-select-list .tabulator-edit-select-list-item.focused{outline:1px solid #1d68cd}.tabulator-edit-select-list .tabulator-edit-select-list-item:hover{cursor:pointer;color:#fff;background:#1d68cd}.tabulator-edit-select-list .tabulator-edit-select-list-notice{padding:4px;color:#333;text-align:center}.tabulator-edit-select-list .tabulator-edit-select-list-group{border-bottom:1px solid #aaa;padding:4px;padding-top:6px;color:#333;font-weight:700}.tabulator.tabulator-ltr{direction:ltr}.tabulator.tabulator-rtl{text-align:initial;direction:rtl}.tabulator.tabulator-rtl .tabulator-header .tabulator-col{text-align:initial;border-left:1px solid #aaa;border-right:initial}.tabulator.tabulator-rtl .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols{margin-right:initial;margin-left:-1px}.tabulator.tabulator-rtl .tabulator-header .tabulator-col.tabulator-sortable .tabulator-col-title{padding-right:0;padding-left:25px}.tabulator.tabulator-rtl .tabulator-header .tabulator-col .tabulator-col-content .tabulator-arrow{left:8px;right:initial}.tabulator.tabulator-rtl .tabulator-row .tabulator-cell{border-right:initial;border-left:1px solid #aaa}.tabulator.tabulator-rtl .tabulator-row .tabulator-cell .tabulator-data-tree-branch{margin-right:initial;margin-left:5px;border-bottom-left-radius:initial;border-bottom-right-radius:1px;border-left:initial;border-right:2px solid #aaa}.tabulator.tabulator-rtl .tabulator-row .tabulator-cell .tabulator-data-tree-control{margin-right:initial;margin-left:5px}.tabulator.tabulator-rtl .tabulator-col-resize-handle{position:absolute;left:0;right:auto}.tabulator.tabulator-rtl .tabulator-col-resize-handle.prev{right:0;left:auto}.tabulator-print-fullscreen{position:absolute;top:0;bottom:0;left:0;right:0;z-index:10000}body.tabulator-print-fullscreen-hide>:not(.tabulator-print-fullscreen){display:none!important}.tabulator-print-table{border-collapse:collapse}.tabulator-print-table .tabulator-print-table-group{box-sizing:border-box;border-right:1px solid #aaa;border-top:1px solid #000;border-bottom:2px solid rgba(32.1569%,38.8235%,55.6863%,1);padding:5px;padding-left:10px;background:#222;color:#fff;font-weight:700;min-width:100%}.tabulator-print-table .tabulator-print-table-group:hover{cursor:pointer;background-color:#090909}.tabulator-print-table .tabulator-print-table-group.tabulator-group-visible .tabulator-arrow{margin-right:10px;border-left:6px solid transparent;border-right:6px solid transparent;border-top:6px solid rgba(32.1569%,38.8235%,55.6863%,1);border-bottom:0}.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-1 td{padding-left:30px!important}.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-2 td{padding-left:50px!important}.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-3 td{padding-left:70px!important}.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-4 td{padding-left:90px!important}.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-5 td{padding-left:110px!important}.tabulator-print-table .tabulator-print-table-group .tabulator-group-toggle{display:inline-block}.tabulator-print-table .tabulator-print-table-group .tabulator-arrow{display:inline-block;width:0;height:0;margin-right:16px;border-top:6px solid transparent;border-bottom:6px solid transparent;border-right:0;border-left:6px solid rgba(32.1569%,38.8235%,55.6863%,1);vertical-align:middle}.tabulator-print-table .tabulator-print-table-group span{margin-left:10px;color:rgba(32.1569%,38.8235%,55.6863%,1)}.tabulator-print-table .tabulator-data-tree-branch{display:inline-block;vertical-align:middle;height:9px;width:7px;margin-top:-9px;margin-right:5px;border-bottom-left-radius:1px;border-left:2px solid #aaa;border-bottom:2px solid #aaa}.tabulator-print-table .tabulator-data-tree-control{display:-ms-inline-flexbox;display:inline-flex;-ms-flex-pack:center;justify-content:center;-ms-flex-align:center;align-items:center;vertical-align:middle;height:11px;width:11px;margin-right:5px;border:1px solid #333;border-radius:2px;background:rgba(0,0,0,.1);overflow:hidden}.tabulator-print-table .tabulator-data-tree-control:hover{cursor:pointer;background:rgba(0,0,0,.2)}.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-collapse{display:inline-block;position:relative;height:7px;width:1px;background:0 0}.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-collapse:after{position:absolute;content:"";left:-3px;top:3px;height:1px;width:7px;background:#333}.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-expand{display:inline-block;position:relative;height:7px;width:1px;background:#333}.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-expand:after{position:absolute;content:"";left:-3px;top:3px;height:1px;width:7px;background:#333}
\ No newline at end of file
diff --git a/website/js/vendor/tabulator/css/tabulator_site.min.css.map b/website/js/vendor/tabulator/css/tabulator_site.min.css.map
new file mode 100644 (file)
index 0000000..5ca4e22
--- /dev/null
@@ -0,0 +1 @@
+{"version":3,"sources":["tabulator_site.scss"],"names":[],"mappings":"AAyCA,WACC,kBAAkB,AAElB,6BAvCgB,AAyChB,sBA1CqB,AA4CrB,eA1Ca,AA2Cb,gBAAgB,AAChB,gBAAe,AAMf,uBAAwB,CAiiBxB,AAhjBD,iFAoBI,cAAc,CACd,AArBJ,0CA0BE,oBAAqB,CACrB,AA3BF,oFAiCK,iBAAkB,CAClB,AAlCL,kCAyCE,yBAAiB,AAAjB,qBAAiB,AAAjB,gBAAiB,CACjB,AA1CF,6BA8CE,kBAAiB,AACjB,sBAAsB,AAEtB,WAAU,AAEV,gCAhF2B,AAiF3B,sBApFyB,AAqFzB,WApFmB,AAqFnB,gBAAgB,AAEhB,mBAAmB,AACnB,gBAAe,AAEf,sBAAsB,AACtB,wBAAwB,AACxB,yBAAyB,AACzB,mBAAoB,CAmRpB,AAjVF,qDAiEG,YAAY,CACZ,AAlEH,4CAsEG,qBAAoB,AAEpB,kBAAiB,AACjB,sBAAqB,AACrB,4BAxGoB,AAyGpB,sBA3GwB,AA4GxB,gBAAe,AACf,sBAAsB,AACtB,eAAgB,CAqNhB,AAnSH,6DAiFI,kBAAkB,AAClB,yBA/GyB,AAgHzB,mBAA8C,AAC9C,mBAAoB,CACpB,AArFJ,mEAyFI,sBAAqB,AACrB,kBAAkB,AAClB,WAAW,CA8DX,AAzJJ,iGA+FK,aAAc,CAMd,AArGL,uGAkGM,eAAe,AACf,UAAW,CACX,AApGN,+FAyGK,iBAAkB,CAClB,AA1GL,wFA8GK,sBAAqB,AACrB,WAAW,AAEX,mBAAmB,AACnB,gBAAgB,AAChB,uBAAuB,AACvB,qBAAqB,CAiBrB,AArIL,gHAwHM,sBAAsB,AACtB,WAAW,AAEX,sBAAqB,AAErB,YAAW,AAEX,eAAgB,CAChB,AAhIN,8IAmIM,uBAAuB,CACvB,AApIN,yFAyIK,oBAAa,AAAb,aAAa,AACb,sBAAmB,AAAnB,mBAAmB,AAEnB,kBAAkB,AAClB,MAAK,AACL,SAAQ,AACR,SAAS,CAST,AAxJL,0GAkJM,QAAQ,AACR,SAAS,AACT,kCAAkC,AAClC,mCAAmC,AACnC,4BA9KkB,CA+KlB,AAvJN,0FAgKK,kBAAiB,AACjB,oBAAa,AAAb,aAAa,AAEb,0BAjMkB,AAkMlB,gBAAgB,AAEhB,iBAAiB,CACjB,AAvKL,0FA6KK,YAAa,CACb,AA9KL,qEAmLI,kBAAkB,AAClB,sBAAsB,AACtB,eAAc,AACd,WAAU,AACV,iBAAkB,CAiBlB,AAxMJ,8EA2LK,qBAAsB,CACtB,AA5LL,yEA+LK,cAAe,CACf,AAhML,sFAoMM,QAAS,AACT,QAAS,CACT,AAtMN,oFA6MK,kBAAkB,CAClB,AA9ML,qEAiNK,eAAc,AACd,wBAAoD,CACpD,AAnNL,4HAuNM,UA/OkB,CAqPlB,AA7NN,6IA0NO,gBAAgB,AAChB,4BAnPiB,CAoPjB,AA5NP,2HAkOM,aA3PmB,CAkQnB,AAzON,4IAqOO,gBAAgB,AAChB,+BA/PkB,CAiQlB,AAxOP,4HA8OM,aAvQmB,CA8QnB,AArPN,6IAiPO,mBAAmB,AACnB,6BA3QkB,AA4QlB,aA5QkB,CA6QlB,AApPP,+GA4PM,uBAAyB,AAAzB,yBAAyB,AACzB,uBAAuB,AAEvB,oBAAY,AAAZ,aAAY,AACZ,sBAAkB,AAAlB,mBAAkB,AAClB,qBAAsB,AAAtB,sBAAsB,CACtB,AAlQN,oHAuQM,wBAAyB,CACzB,AAxQN,2GA6QM,gBAAe,AACf,gBAAgB,CAChB,AA/QN,uIAmRO,gBAAe,AACf,mBAAmB,CACnB,AArRP,4GA0RM,qBAAuB,AAAvB,uBAAuB,AACvB,OAAM,AACN,QAAO,AACP,QAAO,AACP,WAAW,CACX,AA/RN,+CAsSG,qBAAqB,AACrB,kBAAkB,AAIlB,UAAW,CASX,AApTH,qEA8SI,2BAjUgB,CAkUhB,AA/SJ,sEAkTI,0BArUgB,CAsUhB,AAnTJ,qDAuTG,sBAAqB,AACrB,eAAc,AAEd,6BAA0D,AAU1D,0BAvViB,AA0VjB,eAAgB,CAChB,AAxUH,oEA6TI,4BAA0D,CAK1D,AAlUJ,iGAgUK,YAAa,CACb,AAjUL,2DA2UG,cAAc,CAKd,AAhVH,iEA8UI,YAAa,CACb,AA/UJ,kCAqVE,kBAAiB,AACjB,WAAU,AACV,mBAAmB,AACnB,cAAa,AACb,gCAAiC,CAgDjC,AAzYF,wCA4VG,YAAa,CACb,AA7VH,yDAiWG,sBAAqB,AACrB,oBAAa,AAAb,aAAa,AACb,sBAAkB,AAAlB,mBAAkB,AAOlB,UAAU,CAYV,AAtXH,wFAsWI,gBAAe,AACf,cAAc,CACd,AAxWJ,8DA6WI,qBAAqB,AAErB,cAAa,AACb,aAAY,AAEZ,cA/YyB,AAgZzB,gBAAiB,AACjB,cAAe,CACf,AArXJ,mDA0XG,kBAAiB,AACjB,qBAAoB,AACpB,sBAjZqB,AAkZrB,mBAAmB,AACnB,iBAAgB,AAChB,UAjZe,CA0Zf,AAxYH,kFAmYK,gBAAiB,AACjB,6BAA0D,AAC1D,UApagB,CAqahB,AAtYL,6BA8YE,iBAAgB,AAChB,gBAAe,AACf,6BArZ2B,AAsZ3B,sBAzZyB,AA0ZzB,iBAAgB,AAChB,WA1ZmB,AA2ZnB,gBAAgB,AAChB,mBAAkB,AAClB,qBAAgB,AAAhB,iBAAgB,AAEhB,sBAAsB,AACtB,wBAAwB,AACxB,yBAAyB,AACzB,mBAAoB,CAuFpB,AAlfF,qDA8ZG,sBAAqB,AACrB,wBAAuB,AACvB,sBAA2B,AAE3B,gBAAgB,AAEhB,6BAA0D,AAY1D,6BAnciB,AAqcjB,eAAgB,CAMhB,AAxbH,oEAuaI,6BAA0D,AAC1D,oBAAiC,CAKjC,AA7aJ,iGA2aK,YAAa,CACb,AA5aL,gEAqbI,mBAAkB,AAClB,kBAAkB,CAClB,AAvbJ,wDA6bI,UAAU,CACV,AA9bJ,kDAmcG,qBAAoB,AAEpB,aAAY,AACZ,gBAAe,AAEf,sBA9coB,AA+cpB,iBAAiB,CACjB,AA1cH,8CA8cG,YAAY,CACZ,AA/cH,6CAmdG,qBAAoB,AAEpB,aAAY,AACZ,gBAAe,AAEf,sBA9doB,AA+dpB,kBAAiB,AAEjB,gBAAe,AAEf,WApekB,AAqelB,oBAAmB,AACnB,oBAAmB,AACnB,iBAAiB,CAiBjB,AAjfH,oDAmeI,aAxeyB,CAyezB,AApeJ,sDAueI,UAAU,CACV,AAxeJ,kEA4eK,eAAc,AACd,0BAAyB,AACzB,UAAU,CACV,AA/eL,wCAsfE,kBAAiB,AACjB,QAAO,AACP,MAAK,AACL,SAAQ,AACR,SAAS,CAUT,AApgBF,6CA6fG,OAAM,AACN,UAAU,CACV,AA/fH,8CAkgBG,gBAAgB,CAChB,AAngBH,6BAygBE,kBAAiB,AACjB,oBAAa,AAAb,aAAa,AACb,sBAAkB,AAAlB,mBAAkB,AAElB,MAAK,AACL,OAAM,AACN,YAAW,AAEX,YAAW,AACX,WAAU,AACV,0BAAyB,AACzB,iBAAiB,CA2BjB,AA/iBF,mDAwhBG,qBAAoB,AAEpB,cAAa,AACb,kBAAiB,AAEjB,mBAAkB,AAElB,gBAAe,AACf,gBAAgB,AAChB,cAAc,CAad,AA9iBH,qEAqiBI,sBAAqB,AACrB,UAAU,CACV,AAviBJ,mEA2iBI,sBAAqB,AACrB,aAAa,CACb,AAMJ,eACC,kBAAkB,AAClB,sBAAsB,AACtB,gBAA0C,AAC1C,qBA5kBuB,CA47BvB,AApXD,kCAQE,wBA/kB4B,CAglB5B,AATF,0CAYE,sBAhlBsB,AAilBtB,cAAe,CACf,AAdF,kCAiBE,wBAnlB6B,CAolB7B,AAlBF,wCAqBE,yBAtlBkC,AAulBlC,cAAe,CACf,AAvBF,oCA0BE,sBAAqB,AACrB,eAAe,CACf,AA5BF,gCA+BE,kBAAkB,AAElB,0BAvmBkB,AAwmBlB,6BAxmBkB,AA0mBlB,8BAA+B,AAC/B,UAAU,CACV,AAtCF,4CA0CE,kBAAiB,AACjB,QAAO,AACP,SAAQ,AACR,OAAM,AACN,UAAU,CAUV,AAxDF,iDAiDG,MAAK,AACL,WAAW,CACX,AAnDH,kDAsDG,gBAAgB,CAChB,AAvDH,iCA2DE,qBAAqB,AACrB,kBAAkB,AAElB,yBAAyB,AAEzB,UAAW,CASX,AAzEF,uDAmEG,2BAzoBiB,CA0oBjB,AApEH,wDAuEG,0BA7oBiB,CA8oBjB,AAxEH,8CA4EE,sBAAqB,AAErB,YAAW,AAEX,0BAtpBkB,AAupBlB,4BAvpBkB,CA0qBlB,AApGF,oDAoFG,YAAY,CACZ,AArFH,oDAwFG,cA9qBW,CAyrBX,AAnGH,0DA4FK,iBAAkB,CAKlB,AAjGL,wEA+FM,kBAAkB,CAClB,AAhGN,+BAwGE,qBAAoB,AACpB,kBAAkB,AAClB,sBAAqB,AACrB,YAAW,AACX,4BAlrBkB,AAmrBlB,sBAAqB,AACrB,mBAAkB,AAClB,gBAAe,AACf,sBAAsB,CA0LtB,AA1SF,iDAoHG,yBAnrBkB,AAorBlB,SAAU,CAMV,AA3HH,+GAwHI,WAAU,AACV,sBAAsB,CACtB,AA1HJ,yDA8HG,qBA5rBgB,CAmsBhB,AArIH,+HAgII,WAAU,AACV,uBAAsB,AAEtB,UAjsBe,CAksBf,AApIJ,6EA0II,YAAa,CACb,AA3IJ,oDAiJG,2BAAoB,AAApB,oBAAoB,AACpB,sBAAkB,AAAlB,mBAAkB,AAElB,sBAAsB,AACtB,wBAAwB,AACxB,yBAAyB,AACzB,mBAAoB,CAcpB,AArKH,8EA2JI,SAAS,CAST,AApKJ,wGA+JK,WAAU,AACV,WAAU,AACV,eAAc,AACd,kBA9uBoB,CA+uBpB,AAnKL,2DAwKG,qBAAoB,AACpB,sBAAqB,AAErB,WAAU,AACV,UAAS,AAET,gBAAe,AACf,iBAAgB,AAEhB,8BAA6B,AAE7B,2BAzvBiB,AA0vBjB,4BA1vBiB,CA2vBjB,AArLH,4DAyLG,2BAAmB,AAAnB,oBAAmB,AACnB,qBAAsB,AAAtB,uBAAsB,AACtB,sBAAkB,AAAlB,mBAAkB,AAClB,sBAAqB,AAErB,YAAW,AACX,WAAU,AAEV,iBAAgB,AAEhB,sBAxwBe,AAywBf,kBAAiB,AACjB,0BAA4B,AAE5B,eAAe,CAmDf,AA1PH,kEA0MI,eAAc,AACd,yBAA4B,CAC5B,AA5MJ,kGA+MI,qBAAoB,AACpB,kBAAkB,AAElB,WAAW,AACX,UAAU,AAEV,sBAAuB,CAavB,AAlOJ,wGAwNK,kBAAkB,AAClB,WAAW,AACX,UAAU,AACV,QAAQ,AAER,WAAW,AACX,UAAU,AAEV,eAryBa,CAsyBb,AAjOL,gGAqOI,qBAAoB,AACpB,kBAAkB,AAElB,WAAW,AACX,UAAU,AAEV,eAhzBc,CA6zBd,AAxPJ,sGA8OK,kBAAkB,AAClB,WAAW,AACX,UAAU,AACV,QAAQ,AAER,WAAW,AACX,UAAU,AAEV,eA3zBa,CA4zBb,AAvPL,qEA6PG,2BAAoB,AAApB,oBAAoB,AACpB,sBAAkB,AAAlB,mBAAkB,AAClB,qBAAsB,AAAtB,uBAAsB,AAEtB,sBAAsB,AACtB,wBAAwB,AACxB,yBAAyB,AACzB,oBAAoB,AAEpB,YAAW,AACX,WAAU,AAEV,mBAAkB,AAClB,gBAAe,AAEf,WAp1BqB,AAq1BrB,gBAAgB,AAChB,eAAe,CAmBf,AAjSH,2EAiRI,UAAU,CACV,AAlRJ,sHAsRK,eAAe,CACf,AAvRL,sOA+RI,YAAY,CACZ,AAhSJ,wDAoSG,qBAAqB,AACrB,YAAW,AACX,WAAU,AAEV,kBAAkB,CAClB,AAzSH,+BA8SE,sBAAqB,AACrB,4BAr3BkB,AAs3BlB,0BAAyB,AACzB,gCAj4B2B,AAk4B3B,YAAW,AACX,kBAAiB,AACjB,gBAv4ByB,AAw4BzB,WAv4BmB,AAw4BnB,gBAAgB,AAEhB,cAAe,CA0Df,AAlXF,qCA2TG,eAAc,AACd,wBAAoD,CACpD,AA7TH,wEAiUI,kBAAiB,AACjB,kCAAkC,AAClC,mCAAmC,AACnC,6BAh5BqB,AAi5BrB,eAAgB,CAChB,AAtUJ,uDA0UG,iBAAiB,CACjB,AA3UH,uDA8UG,iBAAiB,CACjB,AA/UH,uDAkVG,iBAAiB,CACjB,AAnVH,uDAsVG,iBAAiB,CACjB,AAvVH,uDA0VG,kBAAkB,CAClB,AA3VH,uDA8VG,oBAAqB,CACrB,AA/VH,gDAmWG,qBAAqB,AACrB,QAAQ,AACR,SAAS,AACT,kBAAiB,AACjB,iCAAiC,AACjC,oCAAoC,AACpC,eAAe,AACf,8BAt7BsB,AAu7BtB,qBAAqB,CACrB,AA5WH,oCA+WG,iBAAgB,AAChB,aAh8B0B,CAi8B1B,AAKH,gBACC,kBAAkB,AAClB,qBAAoB,AACpB,sBAAqB,AAErB,gBAn8BuB,AAo8BvB,sBAl8BmB,AAm8BnB,oCAAuC,AAEvC,eAr9Ba,AAu9Bb,gBAAe,AACf,iCAAiC,AAEjC,aAAc,CAqBd,AAnCD,qCAkBE,iBAAgB,AAEhB,yBAAiB,AAAjB,qBAAiB,AAAjB,gBAAiB,CAUjB,AA9BF,kEAuBG,UAAW,CACX,AAxBH,8EA2BG,eAAe,AACf,kBAz9B2B,CA09B3B,AA7BH,0CAiCE,yBA79BkB,CA89BlB,AAGF,4BACC,kBAAkB,AAClB,qBAAoB,AACpB,sBAAqB,AAErB,iBAAgB,AAEhB,gBA1+BuB,AA2+BvB,sBAz+BmB,AA2+BnB,eA3/Ba,AA6/Bb,gBAAe,AACf,iCAAiC,AAEjC,aAAc,CA6Cd,AA5DD,6DAkBE,YAAW,AAEX,UAp/BgB,CA0gChB,AA1CF,oEAuBG,WA1/BqB,AA2/BrB,kBAl/BkB,CAu/BlB,AA7BH,4EA2BI,oCA9/BoB,CA+/BpB,AA5BJ,qEAgCG,yBA1/BkB,CA2/BlB,AAjCH,mEAqCG,eAAc,AAEd,WA1gCqB,AA2gCrB,kBAlgCkB,CAmgClB,AAzCH,+DA6CE,YAAW,AAEX,WA/gCgB,AAghChB,iBAAkB,CAClB,AAjDF,8DAoDE,6BArhCkB,AAuhClB,YAAW,AACX,gBAAe,AAEf,WAzhCgB,AA0hChB,eAAgB,CAChB,AAMF,yBACC,aAAc,CACd,AAGD,yBACC,mBAAmB,AACnB,aAAc,CAwEd,AA1ED,0DAMG,mBAAmB,AACnB,2BAzjCoB,AA0jCpB,oBAAoB,CAsBpB,AA9BH,wGAYK,eAAoB,AACpB,gBAAgB,CAChB,AAdL,kGAmBK,gBAAe,AACf,iBAAiB,CACjB,AArBL,kGA0BK,SAAQ,AACR,UAAa,CACb,AA5BL,wDAmCG,qBAAoB,AACpB,0BA3kCiB,CAmmCjB,AA5DH,oFA8CI,eAAoB,AACpB,gBAAe,AAEf,4BAAiC,AACjC,+BAA8B,AAE9B,oBAAmB,AACnB,2BA5lCgB,CA6lChB,AAtDJ,qFAyDI,eAAoB,AACpB,eAAe,CACf,AA3DJ,sDAiEE,kBAAiB,AACjB,OAAM,AACN,UAAU,CAMV,AAzEF,2DAsEG,QAAO,AACP,SAAS,CACT,AAOH,4BACC,kBAAkB,AAClB,MAAK,AACL,SAAQ,AACR,OAAM,AACN,QAAO,AAEP,aAAc,CACd,AAED,uEACC,sBAAuB,CACvB,AAED,uBACC,wBAAyB,CAsKzB,AAvKD,oDAKE,sBAAqB,AACrB,4BA1oCkB,AA2oClB,0BAAyB,AACzB,gCAtpC2B,AAupC3B,YAAW,AACX,kBAAiB,AACjB,gBA5pCyB,AA6pCzB,WA5pCmB,AA6pCnB,gBAAgB,AAEhB,cAAe,CAmEf,AAlFF,0DAkBG,eAAc,AACd,wBAAoD,CACpD,AApBH,6FAwBI,kBAAiB,AACjB,kCAAkC,AAClC,mCAAmC,AACnC,6BArqCqB,AAsqCrB,eAAgB,CAChB,AA7BJ,+EAkCI,2BAA4B,CAC5B,AAnCJ,+EAwCI,2BAA4B,CAC5B,AAzCJ,+EA8CI,2BAA4B,CAC5B,AA/CJ,+EAoDI,2BAA4B,CAC5B,AArDJ,+EA0DI,4BAA6B,CAC7B,AA3DJ,4EA8DG,oBAAqB,CACrB,AA/DH,qEAmEG,qBAAqB,AACrB,QAAQ,AACR,SAAS,AACT,kBAAiB,AACjB,iCAAiC,AACjC,oCAAoC,AACpC,eAAe,AACf,8BAptCsB,AAqtCtB,qBAAqB,CACrB,AA5EH,yDA+EG,iBAAgB,AAChB,aA9tC0B,CA+tC1B,AAjFH,mDAqFE,qBAAoB,AACpB,sBAAqB,AAErB,WAAU,AACV,UAAS,AAET,gBAAe,AACf,iBAAgB,AAEhB,8BAA6B,AAE7B,2BApuCkB,AAquClB,4BAruCkB,CAsuClB,AAlGF,oDAsGE,2BAAmB,AAAnB,oBAAmB,AACnB,qBAAsB,AAAtB,uBAAsB,AACtB,sBAAkB,AAAlB,mBAAkB,AAClB,sBAAqB,AAErB,YAAW,AACX,WAAU,AAEV,iBAAgB,AAEhB,sBAnvCgB,AAovChB,kBAAiB,AACjB,0BAA4B,AAE5B,eAAe,CAkDf,AAtKF,0DAuHG,eAAc,AACd,yBAA4B,CAC5B,AAzHH,0FA4HG,qBAAoB,AACpB,kBAAkB,AAElB,WAAW,AACX,UAAU,AAEV,sBAAuB,CAavB,AA/IH,gGAqII,kBAAkB,AAClB,WAAW,AACX,UAAU,AACV,QAAQ,AAER,WAAW,AACX,UAAU,AAEV,eAhxCc,CAixCd,AA9IJ,wFAkJG,qBAAoB,AACpB,kBAAkB,AAElB,WAAW,AACX,UAAU,AAEV,eA3xCe,CAwyCf,AArKH,8FA2JI,kBAAkB,AAClB,WAAW,AACX,UAAU,AACV,QAAQ,AAER,WAAW,AACX,UAAU,AAEV,eAtyCc,CAuyCd","file":"tabulator_site.min.css","sourcesContent":["/* Tabulator v4.8.3 (c) Oliver Folkerd */\n\n\r\n//Main Theme Variables\r\n$backgroundColor: #fff !default; //background color of tabulator\r\n$borderColor:#222 !default; //border to tabulator\r\n$textSize:14px !default; //table text size\r\n\r\n//header themeing\r\n$headerBackgroundColor:#222 !default; //border to tabulator\r\n$headerTextColor:#fff !default; //header text colour\r\n$headerBorderColor:#aaa !default;  //header border color\r\n$headerSeperatorColor:#3FB449 !default; //header bottom seperator color\r\n$headerMargin:4px !default; //padding round header\r\n\r\n//column header arrows\r\n$sortArrowActive: #3FB449 !default;\r\n$sortArrowInactive: #bbb !default;\r\n\r\n//row themeing\r\n$rowBackgroundColor:#fff !default; //table row background color\r\n$rowAltBackgroundColor:#EFEFEF !default; //table row background color\r\n$rowBorderColor:#aaa !default; //table border color\r\n$rowTextColor:#333 !default; //table text color\r\n$rowHoverBackground:#bbb !default; //row background color on hover\r\n\r\n$rowSelectedBackground: #9ABCEA !default; //row background color when selected\r\n$rowSelectedBackgroundHover: #769BCC !default;//row background color when selected and hovered\r\n\r\n$editBoxColor:#1D68CD !default; //border color for edit boxes\r\n$errorColor:#dd0000 !default; //error indication\r\n\r\n//footer themeing\r\n$footerBackgroundColor:#222 !default; //border to tabulator\r\n$footerTextColor:#222 !default; //footer text colour\r\n$footerBorderColor:#aaa !default; //footer border color\r\n$footerSeperatorColor:#3FB449 !default; //footer bottom seperator color\r\n$footerActiveColor:$footerSeperatorColor !default; //footer bottom active text color\r\n\r\n\r\n//Tabulator Containing Element\r\n.tabulator{\r\n\tposition: relative;\r\n\r\n\tborder-bottom: 5px solid $borderColor;\r\n\r\n\tbackground-color: $backgroundColor;\r\n\r\n\tfont-size:$textSize;\r\n\ttext-align: left;\r\n\toverflow:hidden;\r\n\r\n\t-webkit-transform: translatez(0);\r\n\t-moz-transform: translatez(0);\r\n\t-ms-transform: translatez(0);\r\n\t-o-transform: translatez(0);\r\n\ttransform: translatez(0);\r\n\r\n\t&[tabulator-layout=\"fitDataFill\"]{\r\n\t\t.tabulator-tableHolder{\r\n\t\t\t.tabulator-table{\r\n\t\t\t\tmin-width:100%;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t&[tabulator-layout=\"fitDataTable\"]{\r\n\t\tdisplay: inline-block;\r\n\t}\r\n\r\n\t&[tabulator-layout=\"fitColumns\"]{\r\n\t\t.tabulator-row{\r\n\t\t\t.tabulator-cell{\r\n\t\t\t\t&:last-of-type{\r\n\t\t\t\t\tborder-right: none;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t&.tabulator-block-select{\r\n\t\tuser-select: none;\r\n\t}\r\n\r\n\t//column header containing element\r\n\t.tabulator-header{\r\n\t\tposition:relative;\r\n\t\tbox-sizing: border-box;\r\n\r\n\t\twidth:100%;\r\n\r\n\t\tborder-bottom:3px solid $headerSeperatorColor;\r\n\t\tbackground-color: $headerBackgroundColor;\r\n\t\tcolor: $headerTextColor;\r\n\t\tfont-weight:bold;\r\n\r\n\t\twhite-space: nowrap;\r\n\t\toverflow:hidden;\r\n\r\n\t\t-moz-user-select: none;\r\n\t\t-khtml-user-select: none;\r\n\t\t-webkit-user-select: none;\r\n\t\t-o-user-select: none;\r\n\r\n\t\t&.tabulator-header-hidden{\r\n\t\t\tdisplay:none;\r\n\t\t}\r\n\r\n\t\t//individual column header element\r\n\t\t.tabulator-col{\r\n\t\t\tdisplay:inline-block;\r\n\r\n\t\t\tposition:relative;\r\n\t\t\tbox-sizing:border-box;\r\n\t\t\tborder-right:1px solid $headerBorderColor;\r\n\t\t\tbackground-color: $headerBackgroundColor;\r\n\t\t\ttext-align:left;\r\n\t\t\tvertical-align: bottom;\r\n\t\t\toverflow: hidden;\r\n\r\n\t\t\t&.tabulator-moving{\r\n\t\t\t\tposition: absolute;\r\n\t\t\t\tborder:1px solid  $headerSeperatorColor;\r\n\t\t\t\tbackground:darken($headerBackgroundColor, 10%);\r\n\t\t\t\tpointer-events: none;\r\n\t\t\t}\r\n\r\n\t\t\t//hold content of column header\r\n\t\t\t.tabulator-col-content{\r\n\t\t\t\tbox-sizing:border-box;\r\n\t\t\t\tposition: relative;\r\n\t\t\t\tpadding:8px;\r\n\r\n\t\t\t\t//header menu button\r\n\t\t\t\t.tabulator-header-menu-button{\r\n\t\t\t\t\tpadding: 0 8px;\r\n\r\n\t\t\t\t\t&:hover{\r\n\t\t\t\t\t\tcursor: pointer;\r\n\t\t\t\t\t\topacity: .6;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t//hold title and sort arrow\r\n\t\t\t\t.tabulator-col-title-holder{\r\n\t\t\t\t\tposition: relative;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t//hold title of column header\r\n\t\t\t\t.tabulator-col-title{\r\n\t\t\t\t\tbox-sizing:border-box;\r\n\t\t\t\t\twidth: 100%;\r\n\r\n\t\t\t\t\twhite-space: nowrap;\r\n\t\t\t\t\toverflow: hidden;\r\n\t\t\t\t\ttext-overflow: ellipsis;\r\n\t\t\t\t\tvertical-align:bottom;\r\n\r\n\t\t\t\t\t//element to hold title editor\r\n\t\t\t\t\t.tabulator-title-editor{\r\n\t\t\t\t\t\tbox-sizing: border-box;\r\n\t\t\t\t\t\twidth: 100%;\r\n\r\n\t\t\t\t\t\tborder:1px solid #999;\r\n\r\n\t\t\t\t\t\tpadding:1px;\r\n\r\n\t\t\t\t\t\tbackground: #fff;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t.tabulator-header-menu-button + .tabulator-title-editor{\r\n\t\t\t\t\t\twidth:calc(100% - 22px);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t//column sorter arrow\r\n\t\t\t\t.tabulator-col-sorter{\r\n\t\t\t\t\tdisplay: flex;\r\n\t\t\t\t\talign-items: center;\r\n\r\n\t\t\t\t\tposition: absolute;\r\n\t\t\t\t\ttop:0;\r\n\t\t\t\t\tbottom:0;\r\n\t\t\t\t\tright:4px;\r\n\r\n\t\t\t\t\t.tabulator-arrow{\r\n\t\t\t\t\t\twidth: 0;\r\n\t\t\t\t\t\theight: 0;\r\n\t\t\t\t\t\tborder-left: 6px solid transparent;\r\n\t\t\t\t\t\tborder-right: 6px solid transparent;\r\n\t\t\t\t\t\tborder-bottom: 6px solid $sortArrowInactive;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t//complex header column group\r\n\t\t\t&.tabulator-col-group{\r\n\r\n\t\t\t\t//gelement to hold sub columns in column group\r\n\t\t\t\t.tabulator-col-group-cols{\r\n\t\t\t\t\tposition:relative;\r\n\t\t\t\t\tdisplay: flex;\r\n\r\n\t\t\t\t\tborder-top:1px solid $headerBorderColor;\r\n\t\t\t\t\toverflow: hidden;\r\n\r\n\t\t\t\t\tmargin-right:-1px;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t//hide left resize handle on first column\r\n\t\t\t&:first-child{\r\n\t\t\t\t.tabulator-col-resize-handle.prev{\r\n\t\t\t\t\tdisplay: none;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t//header filter containing element\r\n\t\t\t.tabulator-header-filter{\r\n\t\t\t\tposition: relative;\r\n\t\t\t\tbox-sizing: border-box;\r\n\t\t\t\tmargin-top:2px;\r\n\t\t\t\twidth:100%;\r\n\t\t\t\ttext-align: center;\r\n\r\n\t\t\t\t//styling adjustment for inbuilt editors\r\n\t\t\t\ttextarea{\r\n\t\t\t\t\theight:auto !important;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tsvg{\r\n\t\t\t\t\tmargin-top: 3px;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tinput{\r\n\t\t\t\t\t&::-ms-clear {\r\n\t\t\t\t\t\twidth : 0;\r\n\t\t\t\t\t\theight: 0;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t//styling child elements for sortable columns\r\n\t\t\t&.tabulator-sortable{\r\n\t\t\t\t.tabulator-col-title{\r\n\t\t\t\t\tpadding-right:25px;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t&:hover{\r\n\t\t\t\t\tcursor:pointer;\r\n\t\t\t\t\tbackground-color:darken($headerBackgroundColor, 10%);\r\n\t\t\t\t}\r\n\r\n\t\t\t\t&[aria-sort=\"none\"]{\r\n\t\t\t\t\t.tabulator-col-content .tabulator-col-sorter{\r\n\t\t\t\t\t\tcolor: $sortArrowInactive;\r\n\r\n\t\t\t\t\t\t.tabulator-arrow{\r\n\t\t\t\t\t\t\tborder-top: none;\r\n\t\t\t\t\t\t\tborder-bottom: 6px solid $sortArrowInactive;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t&[aria-sort=\"asc\"]{\r\n\t\t\t\t\t.tabulator-col-content .tabulator-col-sorter{\r\n\t\t\t\t\t\tcolor: $sortArrowActive;\r\n\r\n\t\t\t\t\t\t.tabulator-arrow{\r\n\t\t\t\t\t\t\tborder-top: none;\r\n\t\t\t\t\t\t\tborder-bottom: 6px solid $sortArrowActive;\r\n\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t&[aria-sort=\"desc\"]{\r\n\t\t\t\t\t.tabulator-col-content .tabulator-col-sorter{\r\n\t\t\t\t\t\tcolor: $sortArrowActive;\r\n\r\n\t\t\t\t\t\t.tabulator-arrow{\r\n\t\t\t\t\t\t\tborder-bottom: none;\r\n\t\t\t\t\t\t\tborder-top: 6px solid $sortArrowActive;\r\n\t\t\t\t\t\t\tcolor: $sortArrowActive;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t&.tabulator-col-vertical{\r\n\t\t\t\t.tabulator-col-content{\r\n\t\t\t\t\t.tabulator-col-title{\r\n\t\t\t\t\t\twriting-mode: vertical-rl;\r\n\t\t\t\t\t\ttext-orientation: mixed;\r\n\r\n\t\t\t\t\t\tdisplay:flex;\r\n\t\t\t\t\t\talign-items:center;\r\n\t\t\t\t\t\tjustify-content:center;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t&.tabulator-col-vertical-flip{\r\n\t\t\t\t\t.tabulator-col-title{\r\n\t\t\t\t\t\ttransform: rotate(180deg);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t&.tabulator-sortable{\r\n\t\t\t\t\t.tabulator-col-title{\r\n\t\t\t\t\t\tpadding-right:0;\r\n\t\t\t\t\t\tpadding-top:20px;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t&.tabulator-col-vertical-flip{\r\n\t\t\t\t\t\t.tabulator-col-title{\r\n\t\t\t\t\t\t\tpadding-right:0;\r\n\t\t\t\t\t\t\tpadding-bottom:20px;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t.tabulator-col-sorter{\r\n\t\t\t\t\t\tjustify-content: center;\r\n\t\t\t\t\t\tleft:0;\r\n\t\t\t\t\t\tright:0;\r\n\t\t\t\t\t\ttop:4px;\r\n\t\t\t\t\t\tbottom:auto;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\t.tabulator-frozen{\r\n\t\t\tdisplay: inline-block;\r\n\t\t\tposition: absolute;\r\n\r\n\t\t\t// background-color: inherit;\r\n\r\n\t\t\tz-index: 10;\r\n\r\n\t\t\t&.tabulator-frozen-left{\r\n\t\t\t\tborder-right:2px solid $rowBorderColor;\r\n\t\t\t}\r\n\r\n\t\t\t&.tabulator-frozen-right{\r\n\t\t\t\tborder-left:2px solid $rowBorderColor;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t.tabulator-calcs-holder{\r\n\t\t\tbox-sizing:border-box;\r\n\t\t\tmin-width:600%;\r\n\r\n\t\t\tbackground:lighten($headerBackgroundColor, 10%) !important;\r\n\r\n\t\t\t.tabulator-row{\r\n\t\t\t\tbackground:lighten($headerBackgroundColor, 10%) !important;\r\n\r\n\t\t\t\t.tabulator-col-resize-handle{\r\n\t\t\t\t\tdisplay: none;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tborder-top:1px solid $rowBorderColor;\r\n\t\t\t// border-bottom:1px solid $headerBorderColor;\r\n\r\n\t\t\toverflow: hidden;\r\n\t\t}\r\n\r\n\t\t.tabulator-frozen-rows-holder{\r\n\t\t\tmin-width:600%;\r\n\r\n\t\t\t&:empty{\r\n\t\t\t\tdisplay: none;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//scrolling element to hold table\r\n\t.tabulator-tableHolder{\r\n\t\tposition:relative;\r\n\t\twidth:100%;\r\n\t\twhite-space: nowrap;\r\n\t\toverflow:auto;\r\n\t\t-webkit-overflow-scrolling: touch;\r\n\r\n\t\t&:focus{\r\n\t\t\toutline: none;\r\n\t\t}\r\n\r\n\t\t//default placeholder element\r\n\t\t.tabulator-placeholder{\r\n\t\t\tbox-sizing:border-box;\r\n\t\t\tdisplay: flex;\r\n\t\t\talign-items:center;\r\n\r\n\t\t\t&[tabulator-render-mode=\"virtual\"]{\r\n\t\t\t\tmin-height:100%;\r\n\t\t\t\tmin-width:100%;\r\n\t\t\t}\r\n\r\n\t\t\twidth:100%;\r\n\r\n\t\t\tspan{\r\n\t\t\t\tdisplay: inline-block;\r\n\r\n\t\t\t\tmargin:0 auto;\r\n\t\t\t\tpadding:10px;\r\n\r\n\t\t\t\tcolor:$headerSeperatorColor;\r\n\t\t\t\tfont-weight: bold;\r\n\t\t\t\tfont-size: 20px;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t//element to hold table rows\r\n\t\t.tabulator-table{\r\n\t\t\tposition:relative;\r\n\t\t\tdisplay:inline-block;\r\n\t\t\tbackground-color:$rowBackgroundColor;\r\n\t\t\twhite-space: nowrap;\r\n\t\t\toverflow:visible;\r\n\t\t\tcolor:$rowTextColor;\r\n\r\n\t\t\t.tabulator-row{\r\n\t\t\t\t&.tabulator-calcs{\r\n\t\t\t\t\tfont-weight: bold;\r\n\t\t\t\t\tbackground:lighten($headerBackgroundColor, 15%) !important;\r\n\t\t\t\t\tcolor:$headerTextColor;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t//footer element\r\n\t.tabulator-footer{\r\n\t\tpadding:5px 10px;\r\n\t\tpadding-top:8px;\r\n\t\tborder-top:3px solid $footerSeperatorColor;\r\n\t\tbackground-color: $footerBackgroundColor;\r\n\t\ttext-align:right;\r\n\t\tcolor: $footerTextColor;\r\n\t\tfont-weight:bold;\r\n\t\twhite-space:nowrap;\r\n\t\tuser-select:none;\r\n\r\n\t\t-moz-user-select: none;\r\n\t\t-khtml-user-select: none;\r\n\t\t-webkit-user-select: none;\r\n\t\t-o-user-select: none;\r\n\r\n\t\t.tabulator-calcs-holder{\r\n\t\t\tbox-sizing:border-box;\r\n\t\t\twidth:calc(100% + 20px);\r\n\t\t\tmargin:-8px -10px 8px -10px;\r\n\r\n\t\t\ttext-align: left;\r\n\r\n\t\t\tbackground:lighten($footerBackgroundColor, 10%) !important;\r\n\r\n\t\t\t.tabulator-row{\r\n\t\t\t\tbackground:lighten($footerBackgroundColor, 10%) !important;\r\n\t\t\t\tcolor:$headerTextColor !important;\r\n\r\n\t\t\t\t.tabulator-col-resize-handle{\r\n\t\t\t\t\tdisplay: none;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// border-top:1px solid $rowBorderColor;\r\n\t\t\tborder-bottom:1px solid $rowBorderColor;\r\n\r\n\t\t\toverflow: hidden;\r\n\r\n\t\t\t&:only-child{\r\n\t\t\t\tmargin-bottom:-5px;\r\n\t\t\t\tborder-bottom:none;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t//pagination container element\r\n\t\t.tabulator-paginator{\r\n\t\t\tlabel{\r\n\t\t\t\tcolor:#fff;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t//page size select element\r\n\t\t.tabulator-page-size{\r\n\t\t\tdisplay:inline-block;\r\n\r\n\t\t\tmargin:0 5px;\r\n\t\t\tpadding:2px 5px;\r\n\r\n\t\t\tborder:1px solid $footerBorderColor;\r\n\t\t\tborder-radius:3px;\r\n\t\t}\r\n\r\n\t\t//pagination container element\r\n\t\t.tabulator-pages{\r\n\t\t\tmargin:0 7px;\r\n\t\t}\r\n\r\n\t\t//pagination button\r\n\t\t.tabulator-page{\r\n\t\t\tdisplay:inline-block;\r\n\r\n\t\t\tmargin:0 2px;\r\n\t\t\tpadding:2px 5px;\r\n\r\n\t\t\tborder:1px solid $footerBorderColor;\r\n\t\t\tborder-radius:3px;\r\n\r\n\t\t\tbackground:#fff;\r\n\r\n\t\t\tcolor: $footerTextColor;\r\n\t\t\tfont-family:inherit;\r\n\t\t\tfont-weight:inherit;\r\n\t\t\tfont-size:inherit;\r\n\r\n\t\t\t&.active{\r\n\t\t\t\tcolor:$footerActiveColor;\r\n\t\t\t}\r\n\r\n\t\t\t&:disabled{\r\n\t\t\t\topacity:.5;\r\n\t\t\t}\r\n\r\n\t\t\t&:not(.disabled){\r\n\t\t\t\t&:hover{\r\n\t\t\t\t\tcursor:pointer;\r\n\t\t\t\t\tbackground:rgba(0,0,0,.2);\r\n\t\t\t\t\tcolor:#fff;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//column resize handles\r\n\t.tabulator-col-resize-handle{\r\n\t\tposition:absolute;\r\n\t\tright:0;\r\n\t\ttop:0;\r\n\t\tbottom:0;\r\n\t\twidth:5px;\r\n\r\n\t\t&.prev{\r\n\t\t\tleft:0;\r\n\t\t\tright:auto;\r\n\t\t}\r\n\r\n\t\t&:hover{\r\n\t\t\tcursor:ew-resize;\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t//holding div that contains loader and covers tabulator element to prevent interaction\r\n\t.tabulator-loader{\r\n\t\tposition:absolute;\r\n\t\tdisplay: flex;\r\n\t\talign-items:center;\r\n\r\n\t\ttop:0;\r\n\t\tleft:0;\r\n\t\tz-index:100;\r\n\r\n\t\theight:100%;\r\n\t\twidth:100%;\r\n\t\tbackground:rgba(0,0,0,.4);\r\n\t\ttext-align:center;\r\n\r\n\t\t//loading message element\r\n\t\t.tabulator-loader-msg{\r\n\t\t\tdisplay:inline-block;\r\n\r\n\t\t\tmargin:0 auto;\r\n\t\t\tpadding:10px 20px;\r\n\r\n\t\t\tborder-radius:10px;\r\n\r\n\t\t\tbackground:#fff;\r\n\t\t\tfont-weight:bold;\r\n\t\t\tfont-size:16px;\r\n\r\n\t\t\t//loading message\r\n\t\t\t&.tabulator-loading{\r\n\t\t\t\tborder:4px solid #333;\r\n\t\t\t\tcolor:#000;\r\n\t\t\t}\r\n\r\n\t\t\t//error message\r\n\t\t\t&.tabulator-error{\r\n\t\t\t\tborder:4px solid #D00;\r\n\t\t\t\tcolor:#590000;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n\r\n//row element\r\n.tabulator-row{\r\n\tposition: relative;\r\n\tbox-sizing: border-box;\r\n\tmin-height:$textSize + ($headerMargin * 2);\r\n\tbackground-color: $rowBackgroundColor;\r\n\r\n\r\n\t&.tabulator-row-even{\r\n\t\tbackground-color: $rowAltBackgroundColor;\r\n\t}\r\n\r\n\t&.tabulator-selectable:hover{\r\n\t\tbackground-color:$rowHoverBackground;\r\n\t\tcursor: pointer;\r\n\t}\r\n\r\n\t&.tabulator-selected{\r\n\t\tbackground-color:$rowSelectedBackground;\r\n\t}\r\n\r\n\t&.tabulator-selected:hover{\r\n\t\tbackground-color:$rowSelectedBackgroundHover;\r\n\t\tcursor: pointer;\r\n\t}\r\n\r\n\t&.tabulator-row-moving{\r\n\t\tborder:1px solid #000;\r\n\t\tbackground:#fff;\r\n\t}\r\n\r\n\t&.tabulator-moving{\r\n\t\tposition: absolute;\r\n\r\n\t\tborder-top:1px solid  $rowBorderColor;\r\n\t\tborder-bottom:1px solid  $rowBorderColor;\r\n\r\n\t\tpointer-events: none !important;\r\n\t\tz-index:15;\r\n\t}\r\n\r\n\t//row resize handles\r\n\t.tabulator-row-resize-handle{\r\n\t\tposition:absolute;\r\n\t\tright:0;\r\n\t\tbottom:0;\r\n\t\tleft:0;\r\n\t\theight:5px;\r\n\r\n\t\t&.prev{\r\n\t\t\ttop:0;\r\n\t\t\tbottom:auto;\r\n\t\t}\r\n\r\n\t\t&:hover{\r\n\t\t\tcursor:ns-resize;\r\n\t\t}\r\n\t}\r\n\r\n\t.tabulator-frozen{\r\n\t\tdisplay: inline-block;\r\n\t\tposition: absolute;\r\n\r\n\t\tbackground-color: inherit;\r\n\r\n\t\tz-index: 10;\r\n\r\n\t\t&.tabulator-frozen-left{\r\n\t\t\tborder-right:2px solid $rowBorderColor;\r\n\t\t}\r\n\r\n\t\t&.tabulator-frozen-right{\r\n\t\t\tborder-left:2px solid $rowBorderColor;\r\n\t\t}\r\n\t}\r\n\r\n\t.tabulator-responsive-collapse{\r\n\t\tbox-sizing:border-box;\r\n\r\n\t\tpadding:5px;\r\n\r\n\t\tborder-top:1px solid $rowBorderColor;\r\n\t\tborder-bottom:1px solid $rowBorderColor;\r\n\r\n\t\t&:empty{\r\n\t\t\tdisplay:none;\r\n\t\t}\r\n\r\n\t\ttable{\r\n\t\t\tfont-size:$textSize;\r\n\r\n\t\t\ttr{\r\n\t\t\t\ttd{\r\n\t\t\t\t\tposition: relative;\r\n\r\n\t\t\t\t\t&:first-of-type{\r\n\t\t\t\t\t\tpadding-right:10px;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//cell element\r\n\t.tabulator-cell{\r\n\t\tdisplay:inline-block;\r\n\t\tposition: relative;\r\n\t\tbox-sizing:border-box;\r\n\t\tpadding:6px;\r\n\t\tborder-right:1px solid $rowBorderColor;\r\n\t\tvertical-align:middle;\r\n\t\twhite-space:nowrap;\r\n\t\toverflow:hidden;\r\n\t\ttext-overflow:ellipsis;\r\n\r\n\r\n\t\t&.tabulator-editing{\r\n\t\t\tborder:1px solid  $editBoxColor;\r\n\t\t\tpadding: 0;\r\n\r\n\t\t\tinput, select{\r\n\t\t\t\tborder:1px;\r\n\t\t\t\tbackground:transparent;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t&.tabulator-validation-fail{\r\n\t\t\tborder:1px solid $errorColor;\r\n\t\t\tinput, select{\r\n\t\t\t\tborder:1px;\r\n\t\t\t\tbackground:transparent;\r\n\r\n\t\t\t\tcolor: $errorColor;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t//hide left resize handle on first column\r\n\t\t&:first-child{\r\n\t\t\t.tabulator-col-resize-handle.prev{\r\n\t\t\t\tdisplay: none;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t//movable row handle\r\n\t\t&.tabulator-row-handle{\r\n\r\n\t\t\tdisplay: inline-flex;\r\n\t\t\talign-items:center;\r\n\r\n\t\t\t-moz-user-select: none;\r\n\t\t\t-khtml-user-select: none;\r\n\t\t\t-webkit-user-select: none;\r\n\t\t\t-o-user-select: none;\r\n\r\n\t\t\t//handle holder\r\n\t\t\t.tabulator-row-handle-box{\r\n\t\t\t\twidth:80%;\r\n\r\n\t\t\t\t//Hamburger element\r\n\t\t\t\t.tabulator-row-handle-bar{\r\n\t\t\t\t\twidth:100%;\r\n\t\t\t\t\theight:3px;\r\n\t\t\t\t\tmargin-top:2px;\r\n\t\t\t\t\tbackground:$sortArrowActive;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t.tabulator-data-tree-branch{\r\n\t\t\tdisplay:inline-block;\r\n\t\t\tvertical-align:middle;\r\n\r\n\t\t\theight:9px;\r\n\t\t\twidth:7px;\r\n\r\n\t\t\tmargin-top:-9px;\r\n\t\t\tmargin-right:5px;\r\n\r\n\t\t\tborder-bottom-left-radius:1px;\r\n\r\n\t\t\tborder-left:2px solid $rowBorderColor;\r\n\t\t\tborder-bottom:2px solid $rowBorderColor;\r\n\t\t}\r\n\r\n\t\t.tabulator-data-tree-control{\r\n\r\n\t\t\tdisplay:inline-flex;\r\n\t\t\tjustify-content:center;\r\n\t\t\talign-items:center;\r\n\t\t\tvertical-align:middle;\r\n\r\n\t\t\theight:11px;\r\n\t\t\twidth:11px;\r\n\r\n\t\t\tmargin-right:5px;\r\n\r\n\t\t\tborder:1px solid $rowTextColor;\r\n\t\t\tborder-radius:2px;\r\n\t\t\tbackground:rgba(0, 0, 0, .1);\r\n\r\n\t\t\toverflow:hidden;\r\n\r\n\t\t\t&:hover{\r\n\t\t\t\tcursor:pointer;\r\n\t\t\t\tbackground:rgba(0, 0, 0, .2);\r\n\t\t\t}\r\n\r\n\t\t\t.tabulator-data-tree-control-collapse{\r\n\t\t\t\tdisplay:inline-block;\r\n\t\t\t\tposition: relative;\r\n\r\n\t\t\t\theight: 7px;\r\n\t\t\t\twidth: 1px;\r\n\r\n\t\t\t\tbackground: transparent;\r\n\r\n\t\t\t\t&:after {\r\n\t\t\t\t\tposition: absolute;\r\n\t\t\t\t\tcontent: \"\";\r\n\t\t\t\t\tleft: -3px;\r\n\t\t\t\t\ttop: 3px;\r\n\r\n\t\t\t\t\theight: 1px;\r\n\t\t\t\t\twidth: 7px;\r\n\r\n\t\t\t\t\tbackground: $rowTextColor;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t.tabulator-data-tree-control-expand{\r\n\t\t\t\tdisplay:inline-block;\r\n\t\t\t\tposition: relative;\r\n\r\n\t\t\t\theight: 7px;\r\n\t\t\t\twidth: 1px;\r\n\r\n\t\t\t\tbackground: $rowTextColor;\r\n\r\n\t\t\t\t&:after {\r\n\t\t\t\t\tposition: absolute;\r\n\t\t\t\t\tcontent: \"\";\r\n\t\t\t\t\tleft: -3px;\r\n\t\t\t\t\ttop: 3px;\r\n\r\n\t\t\t\t\theight: 1px;\r\n\t\t\t\t\twidth: 7px;\r\n\r\n\t\t\t\t\tbackground: $rowTextColor;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\t.tabulator-responsive-collapse-toggle{\r\n\t\t\tdisplay: inline-flex;\r\n\t\t\talign-items:center;\r\n\t\t\tjustify-content:center;\r\n\r\n\t\t\t-moz-user-select: none;\r\n\t\t\t-khtml-user-select: none;\r\n\t\t\t-webkit-user-select: none;\r\n\t\t\t-o-user-select: none;\r\n\r\n\t\t\theight:15px;\r\n\t\t\twidth:15px;\r\n\r\n\t\t\tborder-radius:20px;\r\n\t\t\tbackground:#666;\r\n\r\n\t\t\tcolor:$rowBackgroundColor;\r\n\t\t\tfont-weight:bold;\r\n\t\t\tfont-size:1.1em;\r\n\r\n\t\t\t&:hover{\r\n\t\t\t\topacity:.7;\r\n\t\t\t}\r\n\r\n\t\t\t&.open{\r\n\t\t\t\t.tabulator-responsive-collapse-toggle-close{\r\n\t\t\t\t\tdisplay:initial;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t.tabulator-responsive-collapse-toggle-open{\r\n\t\t\t\t\tdisplay:none;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t.tabulator-responsive-collapse-toggle-close{\r\n\t\t\t\tdisplay:none;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t.tabulator-traffic-light{\r\n\t\t\tdisplay: inline-block;\r\n\t\t\theight:14px;\r\n\t\t\twidth:14px;\r\n\r\n\t\t\tborder-radius:14px;\r\n\t\t}\r\n\t}\r\n\r\n\t//row grouping element\r\n\t&.tabulator-group{\r\n\t\tbox-sizing:border-box;\r\n\t\tborder-right:1px solid $rowBorderColor;\r\n\t\tborder-top:1px solid #000;\r\n\t\tborder-bottom:2px solid $headerSeperatorColor;\r\n\t\tpadding:5px;\r\n\t\tpadding-left:10px;\r\n\t\tbackground:$headerBackgroundColor;\r\n\t\tcolor:$headerTextColor;\r\n\t\tfont-weight:bold;\r\n\r\n\t\tmin-width: 100%;\r\n\r\n\t\t&:hover{\r\n\t\t\tcursor:pointer;\r\n\t\t\tbackground-color:darken($headerBackgroundColor, 10%);\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-visible{\r\n\t\t\t.tabulator-arrow{\r\n\t\t\t\tmargin-right:10px;\r\n\t\t\t\tborder-left: 6px solid transparent;\r\n\t\t\t\tborder-right: 6px solid transparent;\r\n\t\t\t\tborder-top: 6px solid $sortArrowActive;\r\n\t\t\t\tborder-bottom: 0;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-1{\r\n\t\t\tpadding-left:30px;\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-2{\r\n\t\t\tpadding-left:50px;\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-3{\r\n\t\t\tpadding-left:70px;\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-4{\r\n\t\t\tpadding-left:90px;\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-5{\r\n\t\t\tpadding-left:110px;\r\n\t\t}\r\n\r\n\t\t.tabulator-group-toggle{\r\n\t\t\tdisplay: inline-block;\r\n\t\t}\r\n\r\n\t\t//sorting arrow\r\n\t\t.tabulator-arrow{\r\n\t\t\tdisplay: inline-block;\r\n\t\t\twidth: 0;\r\n\t\t\theight: 0;\r\n\t\t\tmargin-right:16px;\r\n\t\t\tborder-top: 6px solid transparent;\r\n\t\t\tborder-bottom: 6px solid transparent;\r\n\t\t\tborder-right: 0;\r\n\t\t\tborder-left: 6px solid $sortArrowActive;\r\n\t\t\tvertical-align:middle;\r\n\t\t}\r\n\r\n\t\tspan{\r\n\t\t\tmargin-left:10px;\r\n\t\t\tcolor:$headerSeperatorColor;\r\n\t\t}\r\n\t}\r\n\r\n}\r\n\r\n.tabulator-menu{\r\n\tposition: absolute;\r\n\tdisplay:inline-block;\r\n\tbox-sizing:border-box;\r\n\r\n\tbackground:$rowBackgroundColor;\r\n\tborder:1px solid $rowBorderColor;\r\n\tbox-shadow: 0 0 5px 0 rgba(0, 0, 0, .2);\r\n\r\n\tfont-size:$textSize;\r\n\r\n\toverflow-y:auto;\r\n\t-webkit-overflow-scrolling: touch;\r\n\r\n\tz-index: 10000;\r\n\r\n\t.tabulator-menu-item{\r\n\r\n\t\tpadding:5px 10px;\r\n\r\n\t\tuser-select: none;\r\n\r\n\t\t&.tabulator-menu-item-disabled{\r\n\t\t\topacity: .5;\r\n\t\t}\r\n\r\n\t\t&:not(.tabulator-menu-item-disabled):hover{\r\n\t\t\tcursor: pointer;\r\n\t\t\tbackground: $rowAltBackgroundColor;\r\n\t\t}\r\n\t}\r\n\r\n\t.tabulator-menu-separator{\r\n\t\tborder-top:1px solid $rowBorderColor;\r\n\t}\r\n}\r\n\r\n.tabulator-edit-select-list{\r\n\tposition: absolute;\r\n\tdisplay:inline-block;\r\n\tbox-sizing:border-box;\r\n\r\n\tmax-height:200px;\r\n\r\n\tbackground:$rowBackgroundColor;\r\n\tborder:1px solid $rowBorderColor;\r\n\r\n\tfont-size:$textSize;\r\n\r\n\toverflow-y:auto;\r\n\t-webkit-overflow-scrolling: touch;\r\n\r\n\tz-index: 10000;\r\n\r\n\t.tabulator-edit-select-list-item{\r\n\t\tpadding:4px;\r\n\r\n\t\tcolor:$rowTextColor;\r\n\r\n\t\t&.active{\r\n\t\t\tcolor:$rowBackgroundColor;\r\n\t\t\tbackground:$editBoxColor;\r\n\r\n\t\t\t&.focused{\r\n\t\t\t\toutline:1px solid rgba($rowBackgroundColor, .5);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t&.focused{\r\n\t\t\toutline:1px solid $editBoxColor;\r\n\t\t}\r\n\r\n\r\n\t\t&:hover{\r\n\t\t\tcursor:pointer;\r\n\r\n\t\t\tcolor:$rowBackgroundColor;\r\n\t\t\tbackground:$editBoxColor;\r\n\t\t}\r\n\t}\r\n\r\n\t.tabulator-edit-select-list-notice{\r\n\t\tpadding:4px;\r\n\r\n\t\tcolor:$rowTextColor;\r\n\t\ttext-align: center;\r\n\t}\r\n\r\n\t.tabulator-edit-select-list-group{\r\n\t\tborder-bottom:1px solid $rowBorderColor;\r\n\r\n\t\tpadding:4px;\r\n\t\tpadding-top:6px;\r\n\r\n\t\tcolor:$rowTextColor;\r\n\t\tfont-weight:bold;\r\n\t}\r\n}\r\n\r\n\r\n//RTL Styling\r\n\r\n.tabulator.tabulator-ltr{\r\n\tdirection: ltr;\r\n}\r\n\r\n\r\n.tabulator.tabulator-rtl{\r\n\ttext-align: initial;\r\n\tdirection: rtl;\r\n\r\n\t.tabulator-header {\r\n\t\t.tabulator-col{\r\n\t\t\ttext-align: initial;\r\n\t\t\tborder-left:1px solid $headerBorderColor;\r\n\t\t\tborder-right:initial;\r\n\r\n\t\t\t&.tabulator-col-group{\r\n\t\t\t\t.tabulator-col-group-cols{\r\n\t\t\t\t\tmargin-right:initial;\r\n\t\t\t\t\tmargin-left:-1px;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t&.tabulator-sortable{\r\n\t\t\t\t.tabulator-col-title{\r\n\t\t\t\t\tpadding-right:0;\r\n\t\t\t\t\tpadding-left:25px;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t.tabulator-col-content{\r\n\t\t\t\t.tabulator-arrow{\r\n\t\t\t\t\tleft:8px;\r\n\t\t\t\t\tright:initial;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t.tabulator-row{\r\n\t\t.tabulator-cell{\r\n\t\t\tborder-right:initial;\r\n\t\t\tborder-left:1px solid $rowBorderColor;\r\n\r\n\t\t\t//hide left resize handle on first column\r\n\t\t\t// &:first-child{\r\n\t\t\t// \t.tabulator-col-resize-handle.prev{\r\n\t\t\t// \t\tdisplay: none;\r\n\t\t\t// \t}\r\n\t\t\t// }\r\n\r\n\t\t\t.tabulator-data-tree-branch{\r\n\t\t\t\tmargin-right:initial;\r\n\t\t\t\tmargin-left:5px;\r\n\r\n\t\t\t\tborder-bottom-left-radius:initial;\r\n\t\t\t\tborder-bottom-right-radius:1px;\r\n\r\n\t\t\t\tborder-left:initial;\r\n\t\t\t\tborder-right:2px solid $rowBorderColor;\r\n\t\t\t}\r\n\r\n\t\t\t.tabulator-data-tree-control{\r\n\t\t\t\tmargin-right:initial;\r\n\t\t\t\tmargin-left:5px;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//column resize handles\r\n\t.tabulator-col-resize-handle{\r\n\t\tposition:absolute;\r\n\t\tleft:0;\r\n\t\tright:auto;\r\n\r\n\t\t&.prev{\r\n\t\t\tright:0;\r\n\t\t\tleft:auto;\r\n\t\t}\r\n\t}\r\n}\r\n\r\n\r\n// Table print styling\r\n\r\n.tabulator-print-fullscreen{\r\n\tposition: absolute;\r\n\ttop:0;\r\n\tbottom:0;\r\n\tleft:0;\r\n\tright:0;\r\n\r\n\tz-index: 10000;\r\n}\r\n\r\nbody.tabulator-print-fullscreen-hide>*:not(.tabulator-print-fullscreen){\r\n\tdisplay:none !important;\r\n}\r\n\r\n.tabulator-print-table{\r\n\tborder-collapse: collapse;\r\n\r\n\t//row grouping element\r\n\t.tabulator-print-table-group{\r\n\t\tbox-sizing:border-box;\r\n\t\tborder-right:1px solid $rowBorderColor;\r\n\t\tborder-top:1px solid #000;\r\n\t\tborder-bottom:2px solid $headerSeperatorColor;\r\n\t\tpadding:5px;\r\n\t\tpadding-left:10px;\r\n\t\tbackground:$headerBackgroundColor;\r\n\t\tcolor:$headerTextColor;\r\n\t\tfont-weight:bold;\r\n\r\n\t\tmin-width: 100%;\r\n\r\n\t\t&:hover{\r\n\t\t\tcursor:pointer;\r\n\t\t\tbackground-color:darken($headerBackgroundColor, 10%);\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-visible{\r\n\t\t\t.tabulator-arrow{\r\n\t\t\t\tmargin-right:10px;\r\n\t\t\t\tborder-left: 6px solid transparent;\r\n\t\t\t\tborder-right: 6px solid transparent;\r\n\t\t\t\tborder-top: 6px solid $sortArrowActive;\r\n\t\t\t\tborder-bottom: 0;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-1{\r\n\t\t\ttd{\r\n\t\t\t\tpadding-left:30px !important;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-2{\r\n\t\t\ttd{\r\n\t\t\t\tpadding-left:50px !important;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-3{\r\n\t\t\ttd{\r\n\t\t\t\tpadding-left:70px !important;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-4{\r\n\t\t\ttd{\r\n\t\t\t\tpadding-left:90px !important;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-5{\r\n\t\t\ttd{\r\n\t\t\t\tpadding-left:110px !important;\r\n\t\t\t}\r\n\t\t}\r\n\t\t.tabulator-group-toggle{\r\n\t\t\tdisplay: inline-block;\r\n\t\t}\r\n\r\n\t\t//sorting arrow\r\n\t\t.tabulator-arrow{\r\n\t\t\tdisplay: inline-block;\r\n\t\t\twidth: 0;\r\n\t\t\theight: 0;\r\n\t\t\tmargin-right:16px;\r\n\t\t\tborder-top: 6px solid transparent;\r\n\t\t\tborder-bottom: 6px solid transparent;\r\n\t\t\tborder-right: 0;\r\n\t\t\tborder-left: 6px solid $sortArrowActive;\r\n\t\t\tvertical-align:middle;\r\n\t\t}\r\n\r\n\t\tspan{\r\n\t\t\tmargin-left:10px;\r\n\t\t\tcolor:$headerSeperatorColor;\r\n\t\t}\r\n\t}\r\n\r\n\t.tabulator-data-tree-branch{\r\n\t\tdisplay:inline-block;\r\n\t\tvertical-align:middle;\r\n\r\n\t\theight:9px;\r\n\t\twidth:7px;\r\n\r\n\t\tmargin-top:-9px;\r\n\t\tmargin-right:5px;\r\n\r\n\t\tborder-bottom-left-radius:1px;\r\n\r\n\t\tborder-left:2px solid $rowBorderColor;\r\n\t\tborder-bottom:2px solid $rowBorderColor;\r\n\t}\r\n\r\n\t.tabulator-data-tree-control{\r\n\r\n\t\tdisplay:inline-flex;\r\n\t\tjustify-content:center;\r\n\t\talign-items:center;\r\n\t\tvertical-align:middle;\r\n\r\n\t\theight:11px;\r\n\t\twidth:11px;\r\n\r\n\t\tmargin-right:5px;\r\n\r\n\t\tborder:1px solid $rowTextColor;\r\n\t\tborder-radius:2px;\r\n\t\tbackground:rgba(0, 0, 0, .1);\r\n\r\n\t\toverflow:hidden;\r\n\r\n\t\t&:hover{\r\n\t\t\tcursor:pointer;\r\n\t\t\tbackground:rgba(0, 0, 0, .2);\r\n\t\t}\r\n\r\n\t\t.tabulator-data-tree-control-collapse{\r\n\t\t\tdisplay:inline-block;\r\n\t\t\tposition: relative;\r\n\r\n\t\t\theight: 7px;\r\n\t\t\twidth: 1px;\r\n\r\n\t\t\tbackground: transparent;\r\n\r\n\t\t\t&:after {\r\n\t\t\t\tposition: absolute;\r\n\t\t\t\tcontent: \"\";\r\n\t\t\t\tleft: -3px;\r\n\t\t\t\ttop: 3px;\r\n\r\n\t\t\t\theight: 1px;\r\n\t\t\t\twidth: 7px;\r\n\r\n\t\t\t\tbackground: $rowTextColor;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t.tabulator-data-tree-control-expand{\r\n\t\t\tdisplay:inline-block;\r\n\t\t\tposition: relative;\r\n\r\n\t\t\theight: 7px;\r\n\t\t\twidth: 1px;\r\n\r\n\t\t\tbackground: $rowTextColor;\r\n\r\n\t\t\t&:after {\r\n\t\t\t\tposition: absolute;\r\n\t\t\t\tcontent: \"\";\r\n\t\t\t\tleft: -3px;\r\n\t\t\t\ttop: 3px;\r\n\r\n\t\t\t\theight: 1px;\r\n\t\t\t\twidth: 7px;\r\n\r\n\t\t\t\tbackground: $rowTextColor;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n\r\n"]}
\ No newline at end of file
diff --git a/website/js/vendor/tabulator/js/modules/accessor.js b/website/js/vendor/tabulator/js/modules/accessor.js
new file mode 100644 (file)
index 0000000..192c6de
--- /dev/null
@@ -0,0 +1,93 @@
+var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
+
+/* Tabulator v4.8.3 (c) Oliver Folkerd */
+
+var Accessor = function Accessor(table) {
+       this.table = table; //hold Tabulator object
+       this.allowedTypes = ["", "data", "download", "clipboard", "print", "htmlOutput"]; //list of accessor types
+};
+
+//initialize column accessor
+Accessor.prototype.initializeColumn = function (column) {
+       var self = this,
+           match = false,
+           config = {};
+
+       this.allowedTypes.forEach(function (type) {
+               var key = "accessor" + (type.charAt(0).toUpperCase() + type.slice(1)),
+                   accessor;
+
+               if (column.definition[key]) {
+                       accessor = self.lookupAccessor(column.definition[key]);
+
+                       if (accessor) {
+                               match = true;
+
+                               config[key] = {
+                                       accessor: accessor,
+                                       params: column.definition[key + "Params"] || {}
+                               };
+                       }
+               }
+       });
+
+       if (match) {
+               column.modules.accessor = config;
+       }
+};
+
+Accessor.prototype.lookupAccessor = function (value) {
+       var accessor = false;
+
+       //set column accessor
+       switch (typeof value === "undefined" ? "undefined" : _typeof(value)) {
+               case "string":
+                       if (this.accessors[value]) {
+                               accessor = this.accessors[value];
+                       } else {
+                               console.warn("Accessor Error - No such accessor found, ignoring: ", value);
+                       }
+                       break;
+
+               case "function":
+                       accessor = value;
+                       break;
+       }
+
+       return accessor;
+};
+
+//apply accessor to row
+Accessor.prototype.transformRow = function (row, type) {
+       var key = "accessor" + (type.charAt(0).toUpperCase() + type.slice(1)),
+           rowComponent = row.getComponent();
+
+       //clone data object with deep copy to isolate internal data from returned result
+       var data = Tabulator.prototype.helpers.deepClone(row.data || {});
+
+       this.table.columnManager.traverse(function (column) {
+               var value, accessor, params, colCompnent;
+
+               if (column.modules.accessor) {
+
+                       accessor = column.modules.accessor[key] || column.modules.accessor.accessor || false;
+
+                       if (accessor) {
+                               value = column.getFieldValue(data);
+
+                               if (value != "undefined") {
+                                       colCompnent = column.getComponent();
+                                       params = typeof accessor.params === "function" ? accessor.params(value, data, type, colCompnent, rowComponent) : accessor.params;
+                                       column.setFieldValue(data, accessor.accessor(value, data, type, params, colCompnent, rowComponent));
+                               }
+                       }
+               }
+       });
+
+       return data;
+},
+
+//default accessors
+Accessor.prototype.accessors = {};
+
+Tabulator.prototype.registerModule("accessor", Accessor);
\ No newline at end of file
diff --git a/website/js/vendor/tabulator/js/modules/accessor.min.js b/website/js/vendor/tabulator/js/modules/accessor.min.js
new file mode 100644 (file)
index 0000000..901db09
--- /dev/null
@@ -0,0 +1,2 @@
+/* Tabulator v4.8.3 (c) Oliver Folkerd */
+var _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(o){return typeof o}:function(o){return o&&"function"==typeof Symbol&&o.constructor===Symbol&&o!==Symbol.prototype?"symbol":typeof o},Accessor=function(o){this.table=o,this.allowedTypes=["","data","download","clipboard","print","htmlOutput"]};Accessor.prototype.initializeColumn=function(o){var e=this,s=!1,t={};this.allowedTypes.forEach(function(r){var c,a="accessor"+(r.charAt(0).toUpperCase()+r.slice(1));o.definition[a]&&(c=e.lookupAccessor(o.definition[a]))&&(s=!0,t[a]={accessor:c,params:o.definition[a+"Params"]||{}})}),s&&(o.modules.accessor=t)},Accessor.prototype.lookupAccessor=function(o){var e=!1;switch(void 0===o?"undefined":_typeof(o)){case"string":this.accessors[o]?e=this.accessors[o]:console.warn("Accessor Error - No such accessor found, ignoring: ",o);break;case"function":e=o}return e},Accessor.prototype.transformRow=function(o,e){var s="accessor"+(e.charAt(0).toUpperCase()+e.slice(1)),t=o.getComponent(),r=Tabulator.prototype.helpers.deepClone(o.data||{});return this.table.columnManager.traverse(function(o){var c,a,n,i;o.modules.accessor&&(a=o.modules.accessor[s]||o.modules.accessor.accessor||!1)&&"undefined"!=(c=o.getFieldValue(r))&&(i=o.getComponent(),n="function"==typeof a.params?a.params(c,r,e,i,t):a.params,o.setFieldValue(r,a.accessor(c,r,e,n,i,t)))}),r},Accessor.prototype.accessors={},Tabulator.prototype.registerModule("accessor",Accessor);
\ No newline at end of file
diff --git a/website/js/vendor/tabulator/js/modules/ajax.js b/website/js/vendor/tabulator/js/modules/ajax.js
new file mode 100644 (file)
index 0000000..d81cbb6
--- /dev/null
@@ -0,0 +1,465 @@
+var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
+
+/* Tabulator v4.8.3 (c) Oliver Folkerd */
+
+var Ajax = function Ajax(table) {
+
+       this.table = table; //hold Tabulator object
+       this.config = false; //hold config object for ajax request
+       this.url = ""; //request URL
+       this.urlGenerator = false;
+       this.params = false; //request parameters
+
+       this.loaderElement = this.createLoaderElement(); //loader message div
+       this.msgElement = this.createMsgElement(); //message element
+       this.loadingElement = false;
+       this.errorElement = false;
+       this.loaderPromise = false;
+
+       this.progressiveLoad = false;
+       this.loading = false;
+
+       this.requestOrder = 0; //prevent requests comming out of sequence if overridden by another load request
+};
+
+//initialize setup options
+Ajax.prototype.initialize = function () {
+       var template;
+
+       this.loaderElement.appendChild(this.msgElement);
+
+       if (this.table.options.ajaxLoaderLoading) {
+               if (typeof this.table.options.ajaxLoaderLoading == "string") {
+                       template = document.createElement('template');
+                       template.innerHTML = this.table.options.ajaxLoaderLoading.trim();
+                       this.loadingElement = template.content.firstChild;
+               } else {
+                       this.loadingElement = this.table.options.ajaxLoaderLoading;
+               }
+       }
+
+       this.loaderPromise = this.table.options.ajaxRequestFunc || this.defaultLoaderPromise;
+
+       this.urlGenerator = this.table.options.ajaxURLGenerator || this.defaultURLGenerator;
+
+       if (this.table.options.ajaxLoaderError) {
+               if (typeof this.table.options.ajaxLoaderError == "string") {
+                       template = document.createElement('template');
+                       template.innerHTML = this.table.options.ajaxLoaderError.trim();
+                       this.errorElement = template.content.firstChild;
+               } else {
+                       this.errorElement = this.table.options.ajaxLoaderError;
+               }
+       }
+
+       if (this.table.options.ajaxParams) {
+               this.setParams(this.table.options.ajaxParams);
+       }
+
+       if (this.table.options.ajaxConfig) {
+               this.setConfig(this.table.options.ajaxConfig);
+       }
+
+       if (this.table.options.ajaxURL) {
+               this.setUrl(this.table.options.ajaxURL);
+       }
+
+       if (this.table.options.ajaxProgressiveLoad) {
+               if (this.table.options.pagination) {
+                       this.progressiveLoad = false;
+                       console.error("Progressive Load Error - Pagination and progressive load cannot be used at the same time");
+               } else {
+                       if (this.table.modExists("page")) {
+                               this.progressiveLoad = this.table.options.ajaxProgressiveLoad;
+                               this.table.modules.page.initializeProgressive(this.progressiveLoad);
+                       } else {
+                               console.error("Pagination plugin is required for progressive ajax loading");
+                       }
+               }
+       }
+};
+
+Ajax.prototype.createLoaderElement = function () {
+       var el = document.createElement("div");
+       el.classList.add("tabulator-loader");
+       return el;
+};
+
+Ajax.prototype.createMsgElement = function () {
+       var el = document.createElement("div");
+
+       el.classList.add("tabulator-loader-msg");
+       el.setAttribute("role", "alert");
+
+       return el;
+};
+
+//set ajax params
+Ajax.prototype.setParams = function (params, update) {
+       if (update) {
+               this.params = this.params || {};
+
+               for (var key in params) {
+                       this.params[key] = params[key];
+               }
+       } else {
+               this.params = params;
+       }
+};
+
+Ajax.prototype.getParams = function () {
+       return this.params || {};
+};
+
+//load config object
+Ajax.prototype.setConfig = function (config) {
+       this._loadDefaultConfig();
+
+       if (typeof config == "string") {
+               this.config.method = config;
+       } else {
+               for (var key in config) {
+                       this.config[key] = config[key];
+               }
+       }
+};
+
+//create config object from default
+Ajax.prototype._loadDefaultConfig = function (force) {
+       var self = this;
+       if (!self.config || force) {
+
+               self.config = {};
+
+               //load base config from defaults
+               for (var key in self.defaultConfig) {
+                       self.config[key] = self.defaultConfig[key];
+               }
+       }
+};
+
+//set request url
+Ajax.prototype.setUrl = function (url) {
+       this.url = url;
+};
+
+//get request url
+Ajax.prototype.getUrl = function () {
+       return this.url;
+};
+
+//lstandard loading function
+Ajax.prototype.loadData = function (inPosition, columnsChanged) {
+       var self = this;
+
+       if (this.progressiveLoad) {
+               return this._loadDataProgressive();
+       } else {
+               return this._loadDataStandard(inPosition, columnsChanged);
+       }
+};
+
+Ajax.prototype.nextPage = function (diff) {
+       var margin;
+
+       if (!this.loading) {
+
+               margin = this.table.options.ajaxProgressiveLoadScrollMargin || this.table.rowManager.getElement().clientHeight * 2;
+
+               if (diff < margin) {
+                       this.table.modules.page.nextPage().then(function () {}).catch(function () {});
+               }
+       }
+};
+
+Ajax.prototype.blockActiveRequest = function () {
+       this.requestOrder++;
+};
+
+Ajax.prototype._loadDataProgressive = function () {
+       this.table.rowManager.setData([]);
+       return this.table.modules.page.setPage(1);
+};
+
+Ajax.prototype._loadDataStandard = function (inPosition, columnsChanged) {
+       var _this = this;
+
+       return new Promise(function (resolve, reject) {
+               _this.sendRequest(inPosition).then(function (data) {
+                       _this.table.rowManager.setData(data, inPosition, columnsChanged).then(function () {
+                               resolve();
+                       }).catch(function (e) {
+                               reject(e);
+                       });
+               }).catch(function (e) {
+                       reject(e);
+               });
+       });
+};
+
+Ajax.prototype.generateParamsList = function (data, prefix) {
+       var self = this,
+           output = [];
+
+       prefix = prefix || "";
+
+       if (Array.isArray(data)) {
+               data.forEach(function (item, i) {
+                       output = output.concat(self.generateParamsList(item, prefix ? prefix + "[" + i + "]" : i));
+               });
+       } else if ((typeof data === "undefined" ? "undefined" : _typeof(data)) === "object") {
+               for (var key in data) {
+                       output = output.concat(self.generateParamsList(data[key], prefix ? prefix + "[" + key + "]" : key));
+               }
+       } else {
+               output.push({ key: prefix, value: data });
+       }
+
+       return output;
+};
+
+Ajax.prototype.serializeParams = function (params) {
+       var output = this.generateParamsList(params),
+           encoded = [];
+
+       output.forEach(function (item) {
+               encoded.push(encodeURIComponent(item.key) + "=" + encodeURIComponent(item.value));
+       });
+
+       return encoded.join("&");
+};
+
+//send ajax request
+Ajax.prototype.sendRequest = function (silent) {
+       var _this2 = this;
+
+       var self = this,
+           url = self.url,
+           requestNo,
+           esc,
+           query;
+
+       self.requestOrder++;
+       requestNo = self.requestOrder;
+
+       self._loadDefaultConfig();
+
+       return new Promise(function (resolve, reject) {
+               if (self.table.options.ajaxRequesting.call(_this2.table, self.url, self.params) !== false) {
+
+                       self.loading = true;
+
+                       if (!silent) {
+                               self.showLoader();
+                       }
+
+                       _this2.loaderPromise(url, self.config, self.params).then(function (data) {
+                               if (requestNo === self.requestOrder) {
+                                       if (self.table.options.ajaxResponse) {
+                                               data = self.table.options.ajaxResponse.call(self.table, self.url, self.params, data);
+                                       }
+                                       resolve(data);
+
+                                       self.hideLoader();
+                                       self.loading = false;
+                               } else {
+                                       console.warn("Ajax Response Blocked - An active ajax request was blocked by an attempt to change table data while the request was being made");
+                               }
+                       }).catch(function (error) {
+                               console.error("Ajax Load Error: ", error);
+                               self.table.options.ajaxError.call(self.table, error);
+
+                               self.showError();
+
+                               setTimeout(function () {
+                                       self.hideLoader();
+                               }, 3000);
+
+                               self.loading = false;
+
+                               reject();
+                       });
+               } else {
+                       reject();
+               }
+       });
+};
+
+Ajax.prototype.showLoader = function () {
+       var shouldLoad = typeof this.table.options.ajaxLoader === "function" ? this.table.options.ajaxLoader() : this.table.options.ajaxLoader;
+
+       if (shouldLoad) {
+
+               this.hideLoader();
+
+               while (this.msgElement.firstChild) {
+                       this.msgElement.removeChild(this.msgElement.firstChild);
+               }this.msgElement.classList.remove("tabulator-error");
+               this.msgElement.classList.add("tabulator-loading");
+
+               if (this.loadingElement) {
+                       this.msgElement.appendChild(this.loadingElement);
+               } else {
+                       this.msgElement.innerHTML = this.table.modules.localize.getText("ajax|loading");
+               }
+
+               this.table.element.appendChild(this.loaderElement);
+       }
+};
+
+Ajax.prototype.showError = function () {
+       this.hideLoader();
+
+       while (this.msgElement.firstChild) {
+               this.msgElement.removeChild(this.msgElement.firstChild);
+       }this.msgElement.classList.remove("tabulator-loading");
+       this.msgElement.classList.add("tabulator-error");
+
+       if (this.errorElement) {
+               this.msgElement.appendChild(this.errorElement);
+       } else {
+               this.msgElement.innerHTML = this.table.modules.localize.getText("ajax|error");
+       }
+
+       this.table.element.appendChild(this.loaderElement);
+};
+
+Ajax.prototype.hideLoader = function () {
+       if (this.loaderElement.parentNode) {
+               this.loaderElement.parentNode.removeChild(this.loaderElement);
+       }
+};
+
+//default ajax config object
+Ajax.prototype.defaultConfig = {
+       method: "GET"
+};
+
+Ajax.prototype.defaultURLGenerator = function (url, config, params) {
+
+       if (url) {
+               if (params && Object.keys(params).length) {
+                       if (!config.method || config.method.toLowerCase() == "get") {
+                               config.method = "get";
+
+                               url += (url.includes("?") ? "&" : "?") + this.serializeParams(params);
+                       }
+               }
+       }
+
+       return url;
+};
+
+Ajax.prototype.defaultLoaderPromise = function (url, config, params) {
+       var self = this,
+           contentType;
+
+       return new Promise(function (resolve, reject) {
+
+               //set url
+               url = self.urlGenerator(url, config, params);
+
+               //set body content if not GET request
+               if (config.method.toUpperCase() != "GET") {
+                       contentType = _typeof(self.table.options.ajaxContentType) === "object" ? self.table.options.ajaxContentType : self.contentTypeFormatters[self.table.options.ajaxContentType];
+                       if (contentType) {
+
+                               for (var key in contentType.headers) {
+                                       if (!config.headers) {
+                                               config.headers = {};
+                                       }
+
+                                       if (typeof config.headers[key] === "undefined") {
+                                               config.headers[key] = contentType.headers[key];
+                                       }
+                               }
+
+                               config.body = contentType.body.call(self, url, config, params);
+                       } else {
+                               console.warn("Ajax Error - Invalid ajaxContentType value:", self.table.options.ajaxContentType);
+                       }
+               }
+
+               if (url) {
+
+                       //configure headers
+                       if (typeof config.headers === "undefined") {
+                               config.headers = {};
+                       }
+
+                       if (typeof config.headers.Accept === "undefined") {
+                               config.headers.Accept = "application/json";
+                       }
+
+                       if (typeof config.headers["X-Requested-With"] === "undefined") {
+                               config.headers["X-Requested-With"] = "XMLHttpRequest";
+                       }
+
+                       if (typeof config.mode === "undefined") {
+                               config.mode = "cors";
+                       }
+
+                       if (config.mode == "cors") {
+
+                               if (typeof config.headers["Access-Control-Allow-Origin"] === "undefined") {
+                                       config.headers["Access-Control-Allow-Origin"] = window.location.origin;
+                               }
+
+                               if (typeof config.credentials === "undefined") {
+                                       config.credentials = 'same-origin';
+                               }
+                       } else {
+                               if (typeof config.credentials === "undefined") {
+                                       config.credentials = 'include';
+                               }
+                       }
+
+                       //send request
+                       fetch(url, config).then(function (response) {
+                               if (response.ok) {
+                                       response.json().then(function (data) {
+                                               resolve(data);
+                                       }).catch(function (error) {
+                                               reject(error);
+                                               console.warn("Ajax Load Error - Invalid JSON returned", error);
+                                       });
+                               } else {
+                                       console.error("Ajax Load Error - Connection Error: " + response.status, response.statusText);
+                                       reject(response);
+                               }
+                       }).catch(function (error) {
+                               console.error("Ajax Load Error - Connection Error: ", error);
+                               reject(error);
+                       });
+               } else {
+                       console.warn("Ajax Load Error - No URL Set");
+                       resolve([]);
+               }
+       });
+};
+
+Ajax.prototype.contentTypeFormatters = {
+       "json": {
+               headers: {
+                       'Content-Type': 'application/json'
+               },
+               body: function body(url, config, params) {
+                       return JSON.stringify(params);
+               }
+       },
+       "form": {
+               headers: {},
+               body: function body(url, config, params) {
+                       var output = this.generateParamsList(params),
+                           form = new FormData();
+
+                       output.forEach(function (item) {
+                               form.append(item.key, item.value);
+                       });
+
+                       return form;
+               }
+       }
+};
+
+Tabulator.prototype.registerModule("ajax", Ajax);
\ No newline at end of file
diff --git a/website/js/vendor/tabulator/js/modules/ajax.min.js b/website/js/vendor/tabulator/js/modules/ajax.min.js
new file mode 100644 (file)
index 0000000..8a3f0c7
--- /dev/null
@@ -0,0 +1,2 @@
+/* Tabulator v4.8.3 (c) Oliver Folkerd */
+var _typeof="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},Ajax=function(e){this.table=e,this.config=!1,this.url="",this.urlGenerator=!1,this.params=!1,this.loaderElement=this.createLoaderElement(),this.msgElement=this.createMsgElement(),this.loadingElement=!1,this.errorElement=!1,this.loaderPromise=!1,this.progressiveLoad=!1,this.loading=!1,this.requestOrder=0};Ajax.prototype.initialize=function(){var e;this.loaderElement.appendChild(this.msgElement),this.table.options.ajaxLoaderLoading&&("string"==typeof this.table.options.ajaxLoaderLoading?(e=document.createElement("template"),e.innerHTML=this.table.options.ajaxLoaderLoading.trim(),this.loadingElement=e.content.firstChild):this.loadingElement=this.table.options.ajaxLoaderLoading),this.loaderPromise=this.table.options.ajaxRequestFunc||this.defaultLoaderPromise,this.urlGenerator=this.table.options.ajaxURLGenerator||this.defaultURLGenerator,this.table.options.ajaxLoaderError&&("string"==typeof this.table.options.ajaxLoaderError?(e=document.createElement("template"),e.innerHTML=this.table.options.ajaxLoaderError.trim(),this.errorElement=e.content.firstChild):this.errorElement=this.table.options.ajaxLoaderError),this.table.options.ajaxParams&&this.setParams(this.table.options.ajaxParams),this.table.options.ajaxConfig&&this.setConfig(this.table.options.ajaxConfig),this.table.options.ajaxURL&&this.setUrl(this.table.options.ajaxURL),this.table.options.ajaxProgressiveLoad&&(this.table.options.pagination?(this.progressiveLoad=!1,console.error("Progressive Load Error - Pagination and progressive load cannot be used at the same time")):this.table.modExists("page")?(this.progressiveLoad=this.table.options.ajaxProgressiveLoad,this.table.modules.page.initializeProgressive(this.progressiveLoad)):console.error("Pagination plugin is required for progressive ajax loading"))},Ajax.prototype.createLoaderElement=function(){var e=document.createElement("div");return e.classList.add("tabulator-loader"),e},Ajax.prototype.createMsgElement=function(){var e=document.createElement("div");return e.classList.add("tabulator-loader-msg"),e.setAttribute("role","alert"),e},Ajax.prototype.setParams=function(e,t){if(t){this.params=this.params||{};for(var o in e)this.params[o]=e[o]}else this.params=e},Ajax.prototype.getParams=function(){return this.params||{}},Ajax.prototype.setConfig=function(e){if(this._loadDefaultConfig(),"string"==typeof e)this.config.method=e;else for(var t in e)this.config[t]=e[t]},Ajax.prototype._loadDefaultConfig=function(e){var t=this;if(!t.config||e){t.config={};for(var o in t.defaultConfig)t.config[o]=t.defaultConfig[o]}},Ajax.prototype.setUrl=function(e){this.url=e},Ajax.prototype.getUrl=function(){return this.url},Ajax.prototype.loadData=function(e,t){return this.progressiveLoad?this._loadDataProgressive():this._loadDataStandard(e,t)},Ajax.prototype.nextPage=function(e){var t;this.loading||(t=this.table.options.ajaxProgressiveLoadScrollMargin||2*this.table.rowManager.getElement().clientHeight,e<t&&this.table.modules.page.nextPage().then(function(){}).catch(function(){}))},Ajax.prototype.blockActiveRequest=function(){this.requestOrder++},Ajax.prototype._loadDataProgressive=function(){return this.table.rowManager.setData([]),this.table.modules.page.setPage(1)},Ajax.prototype._loadDataStandard=function(e,t){var o=this;return new Promise(function(a,r){o.sendRequest(e).then(function(i){o.table.rowManager.setData(i,e,t).then(function(){a()}).catch(function(e){r(e)})}).catch(function(e){r(e)})})},Ajax.prototype.generateParamsList=function(e,t){var o=this,a=[];if(t=t||"",Array.isArray(e))e.forEach(function(e,r){a=a.concat(o.generateParamsList(e,t?t+"["+r+"]":r))});else if("object"===(void 0===e?"undefined":_typeof(e)))for(var r in e)a=a.concat(o.generateParamsList(e[r],t?t+"["+r+"]":r));else a.push({key:t,value:e});return a},Ajax.prototype.serializeParams=function(e){var t=this.generateParamsList(e),o=[];return t.forEach(function(e){o.push(encodeURIComponent(e.key)+"="+encodeURIComponent(e.value))}),o.join("&")},Ajax.prototype.sendRequest=function(e){var t,o=this,a=this,r=a.url;return a.requestOrder++,t=a.requestOrder,a._loadDefaultConfig(),new Promise(function(i,n){!1!==a.table.options.ajaxRequesting.call(o.table,a.url,a.params)?(a.loading=!0,e||a.showLoader(),o.loaderPromise(r,a.config,a.params).then(function(e){t===a.requestOrder?(a.table.options.ajaxResponse&&(e=a.table.options.ajaxResponse.call(a.table,a.url,a.params,e)),i(e),a.hideLoader(),a.loading=!1):console.warn("Ajax Response Blocked - An active ajax request was blocked by an attempt to change table data while the request was being made")}).catch(function(e){console.error("Ajax Load Error: ",e),a.table.options.ajaxError.call(a.table,e),a.showError(),setTimeout(function(){a.hideLoader()},3e3),a.loading=!1,n()})):n()})},Ajax.prototype.showLoader=function(){if("function"==typeof this.table.options.ajaxLoader?this.table.options.ajaxLoader():this.table.options.ajaxLoader){for(this.hideLoader();this.msgElement.firstChild;)this.msgElement.removeChild(this.msgElement.firstChild);this.msgElement.classList.remove("tabulator-error"),this.msgElement.classList.add("tabulator-loading"),this.loadingElement?this.msgElement.appendChild(this.loadingElement):this.msgElement.innerHTML=this.table.modules.localize.getText("ajax|loading"),this.table.element.appendChild(this.loaderElement)}},Ajax.prototype.showError=function(){for(this.hideLoader();this.msgElement.firstChild;)this.msgElement.removeChild(this.msgElement.firstChild);this.msgElement.classList.remove("tabulator-loading"),this.msgElement.classList.add("tabulator-error"),this.errorElement?this.msgElement.appendChild(this.errorElement):this.msgElement.innerHTML=this.table.modules.localize.getText("ajax|error"),this.table.element.appendChild(this.loaderElement)},Ajax.prototype.hideLoader=function(){this.loaderElement.parentNode&&this.loaderElement.parentNode.removeChild(this.loaderElement)},Ajax.prototype.defaultConfig={method:"GET"},Ajax.prototype.defaultURLGenerator=function(e,t,o){return e&&o&&Object.keys(o).length&&(t.method&&"get"!=t.method.toLowerCase()||(t.method="get",e+=(e.includes("?")?"&":"?")+this.serializeParams(o))),e},Ajax.prototype.defaultLoaderPromise=function(e,t,o){var a,r=this;return new Promise(function(i,n){if(e=r.urlGenerator(e,t,o),"GET"!=t.method.toUpperCase())if(a="object"===_typeof(r.table.options.ajaxContentType)?r.table.options.ajaxContentType:r.contentTypeFormatters[r.table.options.ajaxContentType]){for(var s in a.headers)t.headers||(t.headers={}),void 0===t.headers[s]&&(t.headers[s]=a.headers[s]);t.body=a.body.call(r,e,t,o)}else console.warn("Ajax Error - Invalid ajaxContentType value:",r.table.options.ajaxContentType);e?(void 0===t.headers&&(t.headers={}),void 0===t.headers.Accept&&(t.headers.Accept="application/json"),void 0===t.headers["X-Requested-With"]&&(t.headers["X-Requested-With"]="XMLHttpRequest"),void 0===t.mode&&(t.mode="cors"),"cors"==t.mode?(void 0===t.headers["Access-Control-Allow-Origin"]&&(t.headers["Access-Control-Allow-Origin"]=window.location.origin),void 0===t.credentials&&(t.credentials="same-origin")):void 0===t.credentials&&(t.credentials="include"),fetch(e,t).then(function(e){e.ok?e.json().then(function(e){i(e)}).catch(function(e){n(e),console.warn("Ajax Load Error - Invalid JSON returned",e)}):(console.error("Ajax Load Error - Connection Error: "+e.status,e.statusText),n(e))}).catch(function(e){console.error("Ajax Load Error - Connection Error: ",e),n(e)})):(console.warn("Ajax Load Error - No URL Set"),i([]))})},Ajax.prototype.contentTypeFormatters={json:{headers:{"Content-Type":"application/json"},body:function(e,t,o){return JSON.stringify(o)}},form:{headers:{},body:function(e,t,o){var a=this.generateParamsList(o),r=new FormData;return a.forEach(function(e){r.append(e.key,e.value)}),r}}},Tabulator.prototype.registerModule("ajax",Ajax);
\ No newline at end of file
diff --git a/website/js/vendor/tabulator/js/modules/calculation_colums.js b/website/js/vendor/tabulator/js/modules/calculation_colums.js
new file mode 100644 (file)
index 0000000..5aedce7
--- /dev/null
@@ -0,0 +1,540 @@
+var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
+
+/* Tabulator v4.8.3 (c) Oliver Folkerd */
+
+//public calc object
+var CalcComponent = function CalcComponent(row) {
+       this._row = row;
+};
+
+CalcComponent.prototype.getData = function (transform) {
+       return this._row.getData(transform);
+};
+
+CalcComponent.prototype.getElement = function () {
+       return this._row.getElement();
+};
+
+CalcComponent.prototype.getTable = function () {
+       return this._row.table;
+};
+
+CalcComponent.prototype.getCells = function () {
+       var cells = [];
+
+       this._row.getCells().forEach(function (cell) {
+               cells.push(cell.getComponent());
+       });
+
+       return cells;
+};
+
+CalcComponent.prototype.getCell = function (column) {
+       var cell = this._row.getCell(column);
+       return cell ? cell.getComponent() : false;
+};
+
+CalcComponent.prototype._getSelf = function () {
+       return this._row;
+};
+
+var ColumnCalcs = function ColumnCalcs(table) {
+       this.table = table; //hold Tabulator object
+       this.topCalcs = [];
+       this.botCalcs = [];
+       this.genColumn = false;
+       this.topElement = this.createElement();
+       this.botElement = this.createElement();
+       this.topRow = false;
+       this.botRow = false;
+       this.topInitialized = false;
+       this.botInitialized = false;
+
+       this.initialize();
+};
+
+ColumnCalcs.prototype.createElement = function () {
+       var el = document.createElement("div");
+       el.classList.add("tabulator-calcs-holder");
+       return el;
+};
+
+ColumnCalcs.prototype.initialize = function () {
+       this.genColumn = new Column({ field: "value" }, this);
+};
+
+//dummy functions to handle being mock column manager
+ColumnCalcs.prototype.registerColumnField = function () {};
+
+//initialize column calcs
+ColumnCalcs.prototype.initializeColumn = function (column) {
+       var def = column.definition;
+
+       var config = {
+               topCalcParams: def.topCalcParams || {},
+               botCalcParams: def.bottomCalcParams || {}
+       };
+
+       if (def.topCalc) {
+
+               switch (_typeof(def.topCalc)) {
+                       case "string":
+                               if (this.calculations[def.topCalc]) {
+                                       config.topCalc = this.calculations[def.topCalc];
+                               } else {
+                                       console.warn("Column Calc Error - No such calculation found, ignoring: ", def.topCalc);
+                               }
+                               break;
+
+                       case "function":
+                               config.topCalc = def.topCalc;
+                               break;
+
+               }
+
+               if (config.topCalc) {
+                       column.modules.columnCalcs = config;
+                       this.topCalcs.push(column);
+
+                       if (this.table.options.columnCalcs != "group") {
+                               this.initializeTopRow();
+                       }
+               }
+       }
+
+       if (def.bottomCalc) {
+               switch (_typeof(def.bottomCalc)) {
+                       case "string":
+                               if (this.calculations[def.bottomCalc]) {
+                                       config.botCalc = this.calculations[def.bottomCalc];
+                               } else {
+                                       console.warn("Column Calc Error - No such calculation found, ignoring: ", def.bottomCalc);
+                               }
+                               break;
+
+                       case "function":
+                               config.botCalc = def.bottomCalc;
+                               break;
+
+               }
+
+               if (config.botCalc) {
+                       column.modules.columnCalcs = config;
+                       this.botCalcs.push(column);
+
+                       if (this.table.options.columnCalcs != "group") {
+                               this.initializeBottomRow();
+                       }
+               }
+       }
+};
+
+ColumnCalcs.prototype.removeCalcs = function () {
+       var changed = false;
+
+       if (this.topInitialized) {
+               this.topInitialized = false;
+               this.topElement.parentNode.removeChild(this.topElement);
+               changed = true;
+       }
+
+       if (this.botInitialized) {
+               this.botInitialized = false;
+               this.table.footerManager.remove(this.botElement);
+               changed = true;
+       }
+
+       if (changed) {
+               this.table.rowManager.adjustTableSize();
+       }
+};
+
+ColumnCalcs.prototype.initializeTopRow = function () {
+       if (!this.topInitialized) {
+               // this.table.columnManager.headersElement.after(this.topElement);
+               this.table.columnManager.getElement().insertBefore(this.topElement, this.table.columnManager.headersElement.nextSibling);
+               this.topInitialized = true;
+       }
+};
+
+ColumnCalcs.prototype.initializeBottomRow = function () {
+       if (!this.botInitialized) {
+               this.table.footerManager.prepend(this.botElement);
+               this.botInitialized = true;
+       }
+};
+
+ColumnCalcs.prototype.scrollHorizontal = function (left) {
+       var hozAdjust = 0,
+           scrollWidth = this.table.columnManager.getElement().scrollWidth - this.table.element.clientWidth;
+
+       if (this.botInitialized && this.botRow) {
+               this.botRow.getElement().style.marginLeft = -left + "px";
+       }
+};
+
+ColumnCalcs.prototype.recalc = function (rows) {
+       var data, row;
+
+       if (this.topInitialized || this.botInitialized) {
+               data = this.rowsToData(rows);
+
+               if (this.topInitialized) {
+                       if (this.topRow) {
+                               this.topRow.deleteCells();
+                       }
+
+                       row = this.generateRow("top", this.rowsToData(rows));
+                       this.topRow = row;
+                       while (this.topElement.firstChild) {
+                               this.topElement.removeChild(this.topElement.firstChild);
+                       }this.topElement.appendChild(row.getElement());
+                       row.initialize(true);
+               }
+
+               if (this.botInitialized) {
+                       if (this.botRow) {
+                               this.botRow.deleteCells();
+                       }
+
+                       row = this.generateRow("bottom", this.rowsToData(rows));
+                       this.botRow = row;
+                       while (this.botElement.firstChild) {
+                               this.botElement.removeChild(this.botElement.firstChild);
+                       }this.botElement.appendChild(row.getElement());
+                       row.initialize(true);
+               }
+
+               this.table.rowManager.adjustTableSize();
+
+               //set resizable handles
+               if (this.table.modExists("frozenColumns")) {
+                       this.table.modules.frozenColumns.layout();
+               }
+       }
+};
+
+ColumnCalcs.prototype.recalcRowGroup = function (row) {
+       this.recalcGroup(this.table.modules.groupRows.getRowGroup(row));
+};
+
+ColumnCalcs.prototype.recalcAll = function () {
+       var _this = this;
+
+       if (this.topCalcs.length || this.botCalcs.length) {
+               if (this.table.options.columnCalcs !== "group") {
+                       this.recalc(this.table.rowManager.activeRows);
+               }
+
+               if (this.table.options.groupBy && this.table.options.columnCalcs !== "table") {
+
+                       var groups = table.modules.groupRows.getChildGroups();
+
+                       groups.forEach(function (group) {
+                               _this.recalcGroup(group);
+                       });
+               }
+       }
+};
+
+ColumnCalcs.prototype.recalcGroup = function (group) {
+       var data, rowData;
+
+       if (group) {
+               if (group.calcs) {
+                       if (group.calcs.bottom) {
+                               data = this.rowsToData(group.rows);
+                               rowData = this.generateRowData("bottom", data);
+
+                               group.calcs.bottom.updateData(rowData);
+                               group.calcs.bottom.reinitialize();
+                       }
+
+                       if (group.calcs.top) {
+                               data = this.rowsToData(group.rows);
+                               rowData = this.generateRowData("top", data);
+
+                               group.calcs.top.updateData(rowData);
+                               group.calcs.top.reinitialize();
+                       }
+               }
+       }
+};
+
+//generate top stats row
+ColumnCalcs.prototype.generateTopRow = function (rows) {
+       return this.generateRow("top", this.rowsToData(rows));
+};
+//generate bottom stats row
+ColumnCalcs.prototype.generateBottomRow = function (rows) {
+       return this.generateRow("bottom", this.rowsToData(rows));
+};
+
+ColumnCalcs.prototype.rowsToData = function (rows) {
+       var _this2 = this;
+
+       var data = [];
+
+       rows.forEach(function (row) {
+               data.push(row.getData());
+
+               if (_this2.table.options.dataTree && _this2.table.options.dataTreeChildColumnCalcs) {
+                       if (row.modules.dataTree.open) {
+                               var children = _this2.rowsToData(_this2.table.modules.dataTree.getFilteredTreeChildren(row));
+                               data = data.concat(children);
+                       }
+               }
+       });
+
+       return data;
+};
+
+//generate stats row
+ColumnCalcs.prototype.generateRow = function (pos, data) {
+       var self = this,
+           rowData = this.generateRowData(pos, data),
+           row;
+
+       if (self.table.modExists("mutator")) {
+               self.table.modules.mutator.disable();
+       }
+
+       row = new Row(rowData, this, "calc");
+
+       if (self.table.modExists("mutator")) {
+               self.table.modules.mutator.enable();
+       }
+
+       row.getElement().classList.add("tabulator-calcs", "tabulator-calcs-" + pos);
+
+       row.component = false;
+
+       row.getComponent = function () {
+               if (!this.component) {
+                       this.component = new CalcComponent(this);
+               }
+
+               return this.component;
+       };
+
+       row.generateCells = function () {
+
+               var cells = [];
+
+               self.table.columnManager.columnsByIndex.forEach(function (column) {
+
+                       //set field name of mock column
+                       self.genColumn.setField(column.getField());
+                       self.genColumn.hozAlign = column.hozAlign;
+
+                       if (column.definition[pos + "CalcFormatter"] && self.table.modExists("format")) {
+                               self.genColumn.modules.format = {
+                                       formatter: self.table.modules.format.getFormatter(column.definition[pos + "CalcFormatter"]),
+                                       params: column.definition[pos + "CalcFormatterParams"] || {}
+                               };
+                       } else {
+                               self.genColumn.modules.format = {
+                                       formatter: self.table.modules.format.getFormatter("plaintext"),
+                                       params: {}
+                               };
+                       }
+
+                       //ensure css class defintion is replicated to calculation cell
+                       self.genColumn.definition.cssClass = column.definition.cssClass;
+
+                       //generate cell and assign to correct column
+                       var cell = new Cell(self.genColumn, row);
+                       cell.getElement();
+                       cell.column = column;
+                       cell.setWidth();
+
+                       column.cells.push(cell);
+                       cells.push(cell);
+
+                       if (!column.visible) {
+                               cell.hide();
+                       }
+               });
+
+               this.cells = cells;
+       };
+
+       return row;
+};
+
+//generate stats row
+ColumnCalcs.prototype.generateRowData = function (pos, data) {
+       var rowData = {},
+           calcs = pos == "top" ? this.topCalcs : this.botCalcs,
+           type = pos == "top" ? "topCalc" : "botCalc",
+           params,
+           paramKey;
+
+       calcs.forEach(function (column) {
+               var values = [];
+
+               if (column.modules.columnCalcs && column.modules.columnCalcs[type]) {
+                       data.forEach(function (item) {
+                               values.push(column.getFieldValue(item));
+                       });
+
+                       paramKey = type + "Params";
+                       params = typeof column.modules.columnCalcs[paramKey] === "function" ? column.modules.columnCalcs[paramKey](values, data) : column.modules.columnCalcs[paramKey];
+
+                       column.setFieldValue(rowData, column.modules.columnCalcs[type](values, data, params));
+               }
+       });
+
+       return rowData;
+};
+
+ColumnCalcs.prototype.hasTopCalcs = function () {
+       return !!this.topCalcs.length;
+};
+
+ColumnCalcs.prototype.hasBottomCalcs = function () {
+       return !!this.botCalcs.length;
+};
+
+//handle table redraw
+ColumnCalcs.prototype.redraw = function () {
+       if (this.topRow) {
+               this.topRow.normalizeHeight(true);
+       }
+       if (this.botRow) {
+               this.botRow.normalizeHeight(true);
+       }
+};
+
+//return the calculated
+ColumnCalcs.prototype.getResults = function () {
+       var self = this,
+           results = {},
+           groups;
+
+       if (this.table.options.groupBy && this.table.modExists("groupRows")) {
+               groups = this.table.modules.groupRows.getGroups(true);
+
+               groups.forEach(function (group) {
+                       results[group.getKey()] = self.getGroupResults(group);
+               });
+       } else {
+               results = {
+                       top: this.topRow ? this.topRow.getData() : {},
+                       bottom: this.botRow ? this.botRow.getData() : {}
+               };
+       }
+
+       return results;
+};
+
+//get results from a group
+ColumnCalcs.prototype.getGroupResults = function (group) {
+       var self = this,
+           groupObj = group._getSelf(),
+           subGroups = group.getSubGroups(),
+           subGroupResults = {},
+           results = {};
+
+       subGroups.forEach(function (subgroup) {
+               subGroupResults[subgroup.getKey()] = self.getGroupResults(subgroup);
+       });
+
+       results = {
+               top: groupObj.calcs.top ? groupObj.calcs.top.getData() : {},
+               bottom: groupObj.calcs.bottom ? groupObj.calcs.bottom.getData() : {},
+               groups: subGroupResults
+       };
+
+       return results;
+};
+
+//default calculations
+ColumnCalcs.prototype.calculations = {
+       "avg": function avg(values, data, calcParams) {
+               var output = 0,
+                   precision = typeof calcParams.precision !== "undefined" ? calcParams.precision : 2;
+
+               if (values.length) {
+                       output = values.reduce(function (sum, value) {
+                               return Number(sum) + Number(value);
+                       });
+
+                       output = output / values.length;
+
+                       output = precision !== false ? output.toFixed(precision) : output;
+               }
+
+               return parseFloat(output).toString();
+       },
+       "max": function max(values, data, calcParams) {
+               var output = null,
+                   precision = typeof calcParams.precision !== "undefined" ? calcParams.precision : false;
+
+               values.forEach(function (value) {
+
+                       value = Number(value);
+
+                       if (value > output || output === null) {
+                               output = value;
+                       }
+               });
+
+               return output !== null ? precision !== false ? output.toFixed(precision) : output : "";
+       },
+       "min": function min(values, data, calcParams) {
+               var output = null,
+                   precision = typeof calcParams.precision !== "undefined" ? calcParams.precision : false;
+
+               values.forEach(function (value) {
+
+                       value = Number(value);
+
+                       if (value < output || output === null) {
+                               output = value;
+                       }
+               });
+
+               return output !== null ? precision !== false ? output.toFixed(precision) : output : "";
+       },
+       "sum": function sum(values, data, calcParams) {
+               var output = 0,
+                   precision = typeof calcParams.precision !== "undefined" ? calcParams.precision : false;
+
+               if (values.length) {
+                       values.forEach(function (value) {
+                               value = Number(value);
+
+                               output += !isNaN(value) ? Number(value) : 0;
+                       });
+               }
+
+               return precision !== false ? output.toFixed(precision) : output;
+       },
+       "concat": function concat(values, data, calcParams) {
+               var output = 0;
+
+               if (values.length) {
+                       output = values.reduce(function (sum, value) {
+                               return String(sum) + String(value);
+                       });
+               }
+
+               return output;
+       },
+       "count": function count(values, data, calcParams) {
+               var output = 0;
+
+               if (values.length) {
+                       values.forEach(function (value) {
+                               if (value) {
+                                       output++;
+                               }
+                       });
+               }
+
+               return output;
+       }
+};
+
+Tabulator.prototype.registerModule("columnCalcs", ColumnCalcs);
\ No newline at end of file
diff --git a/website/js/vendor/tabulator/js/modules/calculation_colums.min.js b/website/js/vendor/tabulator/js/modules/calculation_colums.min.js
new file mode 100644 (file)
index 0000000..9b6f56b
--- /dev/null
@@ -0,0 +1,2 @@
+/* Tabulator v4.8.3 (c) Oliver Folkerd */
+var _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},CalcComponent=function(t){this._row=t};CalcComponent.prototype.getData=function(t){return this._row.getData(t)},CalcComponent.prototype.getElement=function(){return this._row.getElement()},CalcComponent.prototype.getTable=function(){return this._row.table},CalcComponent.prototype.getCells=function(){var t=[];return this._row.getCells().forEach(function(o){t.push(o.getComponent())}),t},CalcComponent.prototype.getCell=function(t){var o=this._row.getCell(t);return!!o&&o.getComponent()},CalcComponent.prototype._getSelf=function(){return this._row};var ColumnCalcs=function(t){this.table=t,this.topCalcs=[],this.botCalcs=[],this.genColumn=!1,this.topElement=this.createElement(),this.botElement=this.createElement(),this.topRow=!1,this.botRow=!1,this.topInitialized=!1,this.botInitialized=!1,this.initialize()};ColumnCalcs.prototype.createElement=function(){var t=document.createElement("div");return t.classList.add("tabulator-calcs-holder"),t},ColumnCalcs.prototype.initialize=function(){this.genColumn=new Column({field:"value"},this)},ColumnCalcs.prototype.registerColumnField=function(){},ColumnCalcs.prototype.initializeColumn=function(t){var o=t.definition,e={topCalcParams:o.topCalcParams||{},botCalcParams:o.bottomCalcParams||{}};if(o.topCalc){switch(_typeof(o.topCalc)){case"string":this.calculations[o.topCalc]?e.topCalc=this.calculations[o.topCalc]:console.warn("Column Calc Error - No such calculation found, ignoring: ",o.topCalc);break;case"function":e.topCalc=o.topCalc}e.topCalc&&(t.modules.columnCalcs=e,this.topCalcs.push(t),"group"!=this.table.options.columnCalcs&&this.initializeTopRow())}if(o.bottomCalc){switch(_typeof(o.bottomCalc)){case"string":this.calculations[o.bottomCalc]?e.botCalc=this.calculations[o.bottomCalc]:console.warn("Column Calc Error - No such calculation found, ignoring: ",o.bottomCalc);break;case"function":e.botCalc=o.bottomCalc}e.botCalc&&(t.modules.columnCalcs=e,this.botCalcs.push(t),"group"!=this.table.options.columnCalcs&&this.initializeBottomRow())}},ColumnCalcs.prototype.removeCalcs=function(){var t=!1;this.topInitialized&&(this.topInitialized=!1,this.topElement.parentNode.removeChild(this.topElement),t=!0),this.botInitialized&&(this.botInitialized=!1,this.table.footerManager.remove(this.botElement),t=!0),t&&this.table.rowManager.adjustTableSize()},ColumnCalcs.prototype.initializeTopRow=function(){this.topInitialized||(this.table.columnManager.getElement().insertBefore(this.topElement,this.table.columnManager.headersElement.nextSibling),this.topInitialized=!0)},ColumnCalcs.prototype.initializeBottomRow=function(){this.botInitialized||(this.table.footerManager.prepend(this.botElement),this.botInitialized=!0)},ColumnCalcs.prototype.scrollHorizontal=function(t){this.table.columnManager.getElement().scrollWidth,this.table.element.clientWidth;this.botInitialized&&this.botRow&&(this.botRow.getElement().style.marginLeft=-t+"px")},ColumnCalcs.prototype.recalc=function(t){var o;if(this.topInitialized||this.botInitialized){if(this.rowsToData(t),this.topInitialized){for(this.topRow&&this.topRow.deleteCells(),o=this.generateRow("top",this.rowsToData(t)),this.topRow=o;this.topElement.firstChild;)this.topElement.removeChild(this.topElement.firstChild);this.topElement.appendChild(o.getElement()),o.initialize(!0)}if(this.botInitialized){for(this.botRow&&this.botRow.deleteCells(),o=this.generateRow("bottom",this.rowsToData(t)),this.botRow=o;this.botElement.firstChild;)this.botElement.removeChild(this.botElement.firstChild);this.botElement.appendChild(o.getElement()),o.initialize(!0)}this.table.rowManager.adjustTableSize(),this.table.modExists("frozenColumns")&&this.table.modules.frozenColumns.layout()}},ColumnCalcs.prototype.recalcRowGroup=function(t){this.recalcGroup(this.table.modules.groupRows.getRowGroup(t))},ColumnCalcs.prototype.recalcAll=function(){var t=this;if((this.topCalcs.length||this.botCalcs.length)&&("group"!==this.table.options.columnCalcs&&this.recalc(this.table.rowManager.activeRows),this.table.options.groupBy&&"table"!==this.table.options.columnCalcs)){table.modules.groupRows.getChildGroups().forEach(function(o){t.recalcGroup(o)})}},ColumnCalcs.prototype.recalcGroup=function(t){var o,e;t&&t.calcs&&(t.calcs.bottom&&(o=this.rowsToData(t.rows),e=this.generateRowData("bottom",o),t.calcs.bottom.updateData(e),t.calcs.bottom.reinitialize()),t.calcs.top&&(o=this.rowsToData(t.rows),e=this.generateRowData("top",o),t.calcs.top.updateData(e),t.calcs.top.reinitialize()))},ColumnCalcs.prototype.generateTopRow=function(t){return this.generateRow("top",this.rowsToData(t))},ColumnCalcs.prototype.generateBottomRow=function(t){return this.generateRow("bottom",this.rowsToData(t))},ColumnCalcs.prototype.rowsToData=function(t){var o=this,e=[];return t.forEach(function(t){if(e.push(t.getData()),o.table.options.dataTree&&o.table.options.dataTreeChildColumnCalcs&&t.modules.dataTree.open){var n=o.rowsToData(o.table.modules.dataTree.getFilteredTreeChildren(t));e=e.concat(n)}}),e},ColumnCalcs.prototype.generateRow=function(t,o){var e,n=this,l=this.generateRowData(t,o);return n.table.modExists("mutator")&&n.table.modules.mutator.disable(),e=new Row(l,this,"calc"),n.table.modExists("mutator")&&n.table.modules.mutator.enable(),e.getElement().classList.add("tabulator-calcs","tabulator-calcs-"+t),e.component=!1,e.getComponent=function(){return this.component||(this.component=new CalcComponent(this)),this.component},e.generateCells=function(){var o=[];n.table.columnManager.columnsByIndex.forEach(function(l){n.genColumn.setField(l.getField()),n.genColumn.hozAlign=l.hozAlign,l.definition[t+"CalcFormatter"]&&n.table.modExists("format")?n.genColumn.modules.format={formatter:n.table.modules.format.getFormatter(l.definition[t+"CalcFormatter"]),params:l.definition[t+"CalcFormatterParams"]||{}}:n.genColumn.modules.format={formatter:n.table.modules.format.getFormatter("plaintext"),params:{}},n.genColumn.definition.cssClass=l.definition.cssClass;var i=new Cell(n.genColumn,e);i.getElement(),i.column=l,i.setWidth(),l.cells.push(i),o.push(i),l.visible||i.hide()}),this.cells=o},e},ColumnCalcs.prototype.generateRowData=function(t,o){var e,n,l={},i="top"==t?this.topCalcs:this.botCalcs,a="top"==t?"topCalc":"botCalc";return i.forEach(function(t){var i=[];t.modules.columnCalcs&&t.modules.columnCalcs[a]&&(o.forEach(function(o){i.push(t.getFieldValue(o))}),n=a+"Params",e="function"==typeof t.modules.columnCalcs[n]?t.modules.columnCalcs[n](i,o):t.modules.columnCalcs[n],t.setFieldValue(l,t.modules.columnCalcs[a](i,o,e)))}),l},ColumnCalcs.prototype.hasTopCalcs=function(){return!!this.topCalcs.length},ColumnCalcs.prototype.hasBottomCalcs=function(){return!!this.botCalcs.length},ColumnCalcs.prototype.redraw=function(){this.topRow&&this.topRow.normalizeHeight(!0),this.botRow&&this.botRow.normalizeHeight(!0)},ColumnCalcs.prototype.getResults=function(){var t,o=this,e={};return this.table.options.groupBy&&this.table.modExists("groupRows")?(t=this.table.modules.groupRows.getGroups(!0),t.forEach(function(t){e[t.getKey()]=o.getGroupResults(t)})):e={top:this.topRow?this.topRow.getData():{},bottom:this.botRow?this.botRow.getData():{}},e},ColumnCalcs.prototype.getGroupResults=function(t){var o=this,e=t._getSelf(),n=t.getSubGroups(),l={};return n.forEach(function(t){l[t.getKey()]=o.getGroupResults(t)}),{top:e.calcs.top?e.calcs.top.getData():{},bottom:e.calcs.bottom?e.calcs.bottom.getData():{},groups:l}},ColumnCalcs.prototype.calculations={avg:function(t,o,e){var n=0,l=void 0!==e.precision?e.precision:2;return t.length&&(n=t.reduce(function(t,o){return Number(t)+Number(o)}),n/=t.length,n=!1!==l?n.toFixed(l):n),parseFloat(n).toString()},max:function(t,o,e){var n=null,l=void 0!==e.precision&&e.precision;return t.forEach(function(t){((t=Number(t))>n||null===n)&&(n=t)}),null!==n?!1!==l?n.toFixed(l):n:""},min:function(t,o,e){var n=null,l=void 0!==e.precision&&e.precision;return t.forEach(function(t){((t=Number(t))<n||null===n)&&(n=t)}),null!==n?!1!==l?n.toFixed(l):n:""},sum:function(t,o,e){var n=0,l=void 0!==e.precision&&e.precision;return t.length&&t.forEach(function(t){t=Number(t),n+=isNaN(t)?0:Number(t)}),!1!==l?n.toFixed(l):n},concat:function(t,o,e){var n=0;return t.length&&(n=t.reduce(function(t,o){return String(t)+String(o)})),n},count:function(t,o,e){var n=0;return t.length&&t.forEach(function(t){t&&n++}),n}},Tabulator.prototype.registerModule("columnCalcs",ColumnCalcs);
\ No newline at end of file
diff --git a/website/js/vendor/tabulator/js/modules/clipboard.js b/website/js/vendor/tabulator/js/modules/clipboard.js
new file mode 100644 (file)
index 0000000..90c153f
--- /dev/null
@@ -0,0 +1,349 @@
+var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
+
+/* Tabulator v4.8.3 (c) Oliver Folkerd */
+
+var Clipboard = function Clipboard(table) {
+       this.table = table;
+       this.mode = true;
+
+       this.pasteParser = function () {};
+       this.pasteAction = function () {};
+       this.customSelection = false;
+       this.rowRange = false;
+       this.blocked = true; //block copy actions not originating from this command
+};
+
+Clipboard.prototype.initialize = function () {
+       var _this = this;
+
+       this.mode = this.table.options.clipboard;
+
+       this.rowRange = this.table.options.clipboardCopyRowRange;
+
+       if (this.mode === true || this.mode === "copy") {
+               this.table.element.addEventListener("copy", function (e) {
+                       var plain, html, list;
+
+                       if (!_this.blocked) {
+                               e.preventDefault();
+
+                               if (_this.customSelection) {
+                                       plain = _this.customSelection;
+
+                                       if (_this.table.options.clipboardCopyFormatter) {
+                                               plain = _this.table.options.clipboardCopyFormatter("plain", plain);
+                                       }
+                               } else {
+
+                                       var list = _this.table.modules.export.generateExportList(_this.table.options.clipboardCopyConfig, _this.table.options.clipboardCopyStyled, _this.rowRange, "clipboard");
+
+                                       html = _this.table.modules.export.genereateHTMLTable(list);
+                                       plain = html ? _this.generatePlainContent(list) : "";
+
+                                       if (_this.table.options.clipboardCopyFormatter) {
+                                               plain = _this.table.options.clipboardCopyFormatter("plain", plain);
+                                               html = _this.table.options.clipboardCopyFormatter("html", html);
+                                       }
+                               }
+
+                               if (window.clipboardData && window.clipboardData.setData) {
+                                       window.clipboardData.setData('Text', plain);
+                               } else if (e.clipboardData && e.clipboardData.setData) {
+                                       e.clipboardData.setData('text/plain', plain);
+                                       if (html) {
+                                               e.clipboardData.setData('text/html', html);
+                                       }
+                               } else if (e.originalEvent && e.originalEvent.clipboardData.setData) {
+                                       e.originalEvent.clipboardData.setData('text/plain', plain);
+                                       if (html) {
+                                               e.originalEvent.clipboardData.setData('text/html', html);
+                                       }
+                               }
+
+                               _this.table.options.clipboardCopied.call(_this.table, plain, html);
+
+                               _this.reset();
+                       }
+               });
+       }
+
+       if (this.mode === true || this.mode === "paste") {
+               this.table.element.addEventListener("paste", function (e) {
+                       _this.paste(e);
+               });
+       }
+
+       this.setPasteParser(this.table.options.clipboardPasteParser);
+       this.setPasteAction(this.table.options.clipboardPasteAction);
+};
+
+Clipboard.prototype.reset = function () {
+       this.blocked = true;
+       this.customSelection = false;
+};
+
+Clipboard.prototype.generatePlainContent = function (list) {
+       var output = [];
+
+       list.forEach(function (row) {
+               var rowData = [];
+
+               row.columns.forEach(function (col) {
+                       var value = "";
+
+                       if (col) {
+
+                               if (row.type === "group") {
+                                       col.value = col.component.getKey();
+                               }
+
+                               if (col.value === null) {
+                                       value = "";
+                               } else {
+                                       switch (_typeof(col.value)) {
+                                               case "object":
+                                                       value = JSON.stringify(col.value);
+                                                       break;
+
+                                               case "undefined":
+                                                       value = "";
+                                                       break;
+
+                                               default:
+                                                       value = col.value;
+                                       }
+                               }
+                       }
+
+                       rowData.push(value);
+               });
+
+               output.push(rowData.join("\t"));
+       });
+
+       return output.join("\n");
+};
+
+Clipboard.prototype.copy = function (range, internal) {
+       var range, sel, textRange;
+       this.blocked = false;
+       this.customSelection = false;
+
+       if (this.mode === true || this.mode === "copy") {
+
+               this.rowRange = range || this.table.options.clipboardCopyRowRange;
+
+               if (typeof window.getSelection != "undefined" && typeof document.createRange != "undefined") {
+                       range = document.createRange();
+                       range.selectNodeContents(this.table.element);
+                       sel = window.getSelection();
+
+                       if (sel.toString() && internal) {
+                               this.customSelection = sel.toString();
+                       }
+
+                       sel.removeAllRanges();
+                       sel.addRange(range);
+               } else if (typeof document.selection != "undefined" && typeof document.body.createTextRange != "undefined") {
+                       textRange = document.body.createTextRange();
+                       textRange.moveToElementText(this.table.element);
+                       textRange.select();
+               }
+
+               document.execCommand('copy');
+
+               if (sel) {
+                       sel.removeAllRanges();
+               }
+       }
+};
+
+//PASTE EVENT HANDLING
+
+Clipboard.prototype.setPasteAction = function (action) {
+
+       switch (typeof action === "undefined" ? "undefined" : _typeof(action)) {
+               case "string":
+                       this.pasteAction = this.pasteActions[action];
+
+                       if (!this.pasteAction) {
+                               console.warn("Clipboard Error - No such paste action found:", action);
+                       }
+                       break;
+
+               case "function":
+                       this.pasteAction = action;
+                       break;
+       }
+};
+
+Clipboard.prototype.setPasteParser = function (parser) {
+       switch (typeof parser === "undefined" ? "undefined" : _typeof(parser)) {
+               case "string":
+                       this.pasteParser = this.pasteParsers[parser];
+
+                       if (!this.pasteParser) {
+                               console.warn("Clipboard Error - No such paste parser found:", parser);
+                       }
+                       break;
+
+               case "function":
+                       this.pasteParser = parser;
+                       break;
+       }
+};
+
+Clipboard.prototype.paste = function (e) {
+       var data, rowData, rows;
+
+       if (this.checkPaseOrigin(e)) {
+
+               data = this.getPasteData(e);
+
+               rowData = this.pasteParser.call(this, data);
+
+               if (rowData) {
+                       e.preventDefault();
+
+                       if (this.table.modExists("mutator")) {
+                               rowData = this.mutateData(rowData);
+                       }
+
+                       rows = this.pasteAction.call(this, rowData);
+                       this.table.options.clipboardPasted.call(this.table, data, rowData, rows);
+               } else {
+                       this.table.options.clipboardPasteError.call(this.table, data);
+               }
+       }
+};
+
+Clipboard.prototype.mutateData = function (data) {
+       var self = this,
+           output = [];
+
+       if (Array.isArray(data)) {
+               data.forEach(function (row) {
+                       output.push(self.table.modules.mutator.transformRow(row, "clipboard"));
+               });
+       } else {
+               output = data;
+       }
+
+       return output;
+};
+
+Clipboard.prototype.checkPaseOrigin = function (e) {
+       var valid = true;
+
+       if (e.target.tagName != "DIV" || this.table.modules.edit.currentCell) {
+               valid = false;
+       }
+
+       return valid;
+};
+
+Clipboard.prototype.getPasteData = function (e) {
+       var data;
+
+       if (window.clipboardData && window.clipboardData.getData) {
+               data = window.clipboardData.getData('Text');
+       } else if (e.clipboardData && e.clipboardData.getData) {
+               data = e.clipboardData.getData('text/plain');
+       } else if (e.originalEvent && e.originalEvent.clipboardData.getData) {
+               data = e.originalEvent.clipboardData.getData('text/plain');
+       }
+
+       return data;
+};
+
+Clipboard.prototype.pasteParsers = {
+       table: function table(clipboard) {
+               var data = [],
+                   success = false,
+                   headerFindSuccess = true,
+                   columns = this.table.columnManager.columns,
+                   columnMap = [],
+                   rows = [];
+
+               //get data from clipboard into array of columns and rows.
+               clipboard = clipboard.split("\n");
+
+               clipboard.forEach(function (row) {
+                       data.push(row.split("\t"));
+               });
+
+               if (data.length && !(data.length === 1 && data[0].length < 2)) {
+                       success = true;
+
+                       //check if headers are present by title
+                       data[0].forEach(function (value) {
+                               var column = columns.find(function (column) {
+                                       return value && column.definition.title && value.trim() && column.definition.title.trim() === value.trim();
+                               });
+
+                               if (column) {
+                                       columnMap.push(column);
+                               } else {
+                                       headerFindSuccess = false;
+                               }
+                       });
+
+                       //check if column headers are present by field
+                       if (!headerFindSuccess) {
+                               headerFindSuccess = true;
+                               columnMap = [];
+
+                               data[0].forEach(function (value) {
+                                       var column = columns.find(function (column) {
+                                               return value && column.field && value.trim() && column.field.trim() === value.trim();
+                                       });
+
+                                       if (column) {
+                                               columnMap.push(column);
+                                       } else {
+                                               headerFindSuccess = false;
+                                       }
+                               });
+
+                               if (!headerFindSuccess) {
+                                       columnMap = this.table.columnManager.columnsByIndex;
+                               }
+                       }
+
+                       //remove header row if found
+                       if (headerFindSuccess) {
+                               data.shift();
+                       }
+
+                       data.forEach(function (item) {
+                               var row = {};
+
+                               item.forEach(function (value, i) {
+                                       if (columnMap[i]) {
+                                               row[columnMap[i].field] = value;
+                                       }
+                               });
+
+                               rows.push(row);
+                       });
+
+                       return rows;
+               } else {
+                       return false;
+               }
+       }
+};
+
+Clipboard.prototype.pasteActions = {
+       replace: function replace(rows) {
+               return this.table.setData(rows);
+       },
+       update: function update(rows) {
+               return this.table.updateOrAddData(rows);
+       },
+       insert: function insert(rows) {
+               return this.table.addData(rows);
+       }
+};
+
+Tabulator.prototype.registerModule("clipboard", Clipboard);
\ No newline at end of file
diff --git a/website/js/vendor/tabulator/js/modules/clipboard.min.js b/website/js/vendor/tabulator/js/modules/clipboard.min.js
new file mode 100644 (file)
index 0000000..5bbd436
--- /dev/null
@@ -0,0 +1,2 @@
+/* Tabulator v4.8.3 (c) Oliver Folkerd */
+var _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Clipboard=function(t){this.table=t,this.mode=!0,this.pasteParser=function(){},this.pasteAction=function(){},this.customSelection=!1,this.rowRange=!1,this.blocked=!0};Clipboard.prototype.initialize=function(){var t=this;this.mode=this.table.options.clipboard,this.rowRange=this.table.options.clipboardCopyRowRange,!0!==this.mode&&"copy"!==this.mode||this.table.element.addEventListener("copy",function(e){var a,o,i;if(!t.blocked){if(e.preventDefault(),t.customSelection)a=t.customSelection,t.table.options.clipboardCopyFormatter&&(a=t.table.options.clipboardCopyFormatter("plain",a));else{var i=t.table.modules.export.generateExportList(t.table.options.clipboardCopyConfig,t.table.options.clipboardCopyStyled,t.rowRange,"clipboard");o=t.table.modules.export.genereateHTMLTable(i),a=o?t.generatePlainContent(i):"",t.table.options.clipboardCopyFormatter&&(a=t.table.options.clipboardCopyFormatter("plain",a),o=t.table.options.clipboardCopyFormatter("html",o))}window.clipboardData&&window.clipboardData.setData?window.clipboardData.setData("Text",a):e.clipboardData&&e.clipboardData.setData?(e.clipboardData.setData("text/plain",a),o&&e.clipboardData.setData("text/html",o)):e.originalEvent&&e.originalEvent.clipboardData.setData&&(e.originalEvent.clipboardData.setData("text/plain",a),o&&e.originalEvent.clipboardData.setData("text/html",o)),t.table.options.clipboardCopied.call(t.table,a,o),t.reset()}}),!0!==this.mode&&"paste"!==this.mode||this.table.element.addEventListener("paste",function(e){t.paste(e)}),this.setPasteParser(this.table.options.clipboardPasteParser),this.setPasteAction(this.table.options.clipboardPasteAction)},Clipboard.prototype.reset=function(){this.blocked=!0,this.customSelection=!1},Clipboard.prototype.generatePlainContent=function(t){var e=[];return t.forEach(function(t){var a=[];t.columns.forEach(function(e){var o="";if(e)if("group"===t.type&&(e.value=e.component.getKey()),null===e.value)o="";else switch(_typeof(e.value)){case"object":o=JSON.stringify(e.value);break;case"undefined":o="";break;default:o=e.value}a.push(o)}),e.push(a.join("\t"))}),e.join("\n")},Clipboard.prototype.copy=function(t,e){var t,a,o;this.blocked=!1,this.customSelection=!1,!0!==this.mode&&"copy"!==this.mode||(this.rowRange=t||this.table.options.clipboardCopyRowRange,void 0!==window.getSelection&&void 0!==document.createRange?(t=document.createRange(),t.selectNodeContents(this.table.element),a=window.getSelection(),a.toString()&&e&&(this.customSelection=a.toString()),a.removeAllRanges(),a.addRange(t)):void 0!==document.selection&&void 0!==document.body.createTextRange&&(o=document.body.createTextRange(),o.moveToElementText(this.table.element),o.select()),document.execCommand("copy"),a&&a.removeAllRanges())},Clipboard.prototype.setPasteAction=function(t){switch(void 0===t?"undefined":_typeof(t)){case"string":this.pasteAction=this.pasteActions[t],this.pasteAction||console.warn("Clipboard Error - No such paste action found:",t);break;case"function":this.pasteAction=t}},Clipboard.prototype.setPasteParser=function(t){switch(void 0===t?"undefined":_typeof(t)){case"string":this.pasteParser=this.pasteParsers[t],this.pasteParser||console.warn("Clipboard Error - No such paste parser found:",t);break;case"function":this.pasteParser=t}},Clipboard.prototype.paste=function(t){var e,a,o;this.checkPaseOrigin(t)&&(e=this.getPasteData(t),a=this.pasteParser.call(this,e),a?(t.preventDefault(),this.table.modExists("mutator")&&(a=this.mutateData(a)),o=this.pasteAction.call(this,a),this.table.options.clipboardPasted.call(this.table,e,a,o)):this.table.options.clipboardPasteError.call(this.table,e))},Clipboard.prototype.mutateData=function(t){var e=this,a=[];return Array.isArray(t)?t.forEach(function(t){a.push(e.table.modules.mutator.transformRow(t,"clipboard"))}):a=t,a},Clipboard.prototype.checkPaseOrigin=function(t){var e=!0;return("DIV"!=t.target.tagName||this.table.modules.edit.currentCell)&&(e=!1),e},Clipboard.prototype.getPasteData=function(t){var e;return window.clipboardData&&window.clipboardData.getData?e=window.clipboardData.getData("Text"):t.clipboardData&&t.clipboardData.getData?e=t.clipboardData.getData("text/plain"):t.originalEvent&&t.originalEvent.clipboardData.getData&&(e=t.originalEvent.clipboardData.getData("text/plain")),e},Clipboard.prototype.pasteParsers={table:function(t){var e=[],a=!0,o=this.table.columnManager.columns,i=[],n=[];return t=t.split("\n"),t.forEach(function(t){e.push(t.split("\t"))}),!(!e.length||1===e.length&&e[0].length<2)&&(!0,e[0].forEach(function(t){var e=o.find(function(e){return t&&e.definition.title&&t.trim()&&e.definition.title.trim()===t.trim()});e?i.push(e):a=!1}),a||(a=!0,i=[],e[0].forEach(function(t){var e=o.find(function(e){return t&&e.field&&t.trim()&&e.field.trim()===t.trim()});e?i.push(e):a=!1}),a||(i=this.table.columnManager.columnsByIndex)),a&&e.shift(),e.forEach(function(t){var e={};t.forEach(function(t,a){i[a]&&(e[i[a].field]=t)}),n.push(e)}),n)}},Clipboard.prototype.pasteActions={replace:function(t){return this.table.setData(t)},update:function(t){return this.table.updateOrAddData(t)},insert:function(t){return this.table.addData(t)}},Tabulator.prototype.registerModule("clipboard",Clipboard);
\ No newline at end of file
diff --git a/website/js/vendor/tabulator/js/modules/data_tree.js b/website/js/vendor/tabulator/js/modules/data_tree.js
new file mode 100644 (file)
index 0000000..da51ad6
--- /dev/null
@@ -0,0 +1,508 @@
+var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
+
+/* Tabulator v4.8.3 (c) Oliver Folkerd */
+
+var DataTree = function DataTree(table) {
+       this.table = table;
+       this.indent = 10;
+       this.field = "";
+       this.collapseEl = null;
+       this.expandEl = null;
+       this.branchEl = null;
+       this.elementField = false;
+
+       this.startOpen = function () {};
+
+       this.displayIndex = 0;
+};
+
+DataTree.prototype.initialize = function () {
+       var dummyEl = null,
+           firstCol = this.table.columnManager.getFirstVisibileColumn(),
+           options = this.table.options;
+
+       this.field = options.dataTreeChildField;
+       this.indent = options.dataTreeChildIndent;
+       this.elementField = options.dataTreeElementColumn || (firstCol ? firstCol.field : false);
+
+       if (options.dataTreeBranchElement) {
+
+               if (options.dataTreeBranchElement === true) {
+                       this.branchEl = document.createElement("div");
+                       this.branchEl.classList.add("tabulator-data-tree-branch");
+               } else {
+                       if (typeof options.dataTreeBranchElement === "string") {
+                               dummyEl = document.createElement("div");
+                               dummyEl.innerHTML = options.dataTreeBranchElement;
+                               this.branchEl = dummyEl.firstChild;
+                       } else {
+                               this.branchEl = options.dataTreeBranchElement;
+                       }
+               }
+       }
+
+       if (options.dataTreeCollapseElement) {
+               if (typeof options.dataTreeCollapseElement === "string") {
+                       dummyEl = document.createElement("div");
+                       dummyEl.innerHTML = options.dataTreeCollapseElement;
+                       this.collapseEl = dummyEl.firstChild;
+               } else {
+                       this.collapseEl = options.dataTreeCollapseElement;
+               }
+       } else {
+               this.collapseEl = document.createElement("div");
+               this.collapseEl.classList.add("tabulator-data-tree-control");
+               this.collapseEl.tabIndex = 0;
+               this.collapseEl.innerHTML = "<div class='tabulator-data-tree-control-collapse'></div>";
+       }
+
+       if (options.dataTreeExpandElement) {
+               if (typeof options.dataTreeExpandElement === "string") {
+                       dummyEl = document.createElement("div");
+                       dummyEl.innerHTML = options.dataTreeExpandElement;
+                       this.expandEl = dummyEl.firstChild;
+               } else {
+                       this.expandEl = options.dataTreeExpandElement;
+               }
+       } else {
+               this.expandEl = document.createElement("div");
+               this.expandEl.classList.add("tabulator-data-tree-control");
+               this.expandEl.tabIndex = 0;
+               this.expandEl.innerHTML = "<div class='tabulator-data-tree-control-expand'></div>";
+       }
+
+       switch (_typeof(options.dataTreeStartExpanded)) {
+               case "boolean":
+                       this.startOpen = function (row, index) {
+                               return options.dataTreeStartExpanded;
+                       };
+                       break;
+
+               case "function":
+                       this.startOpen = options.dataTreeStartExpanded;
+                       break;
+
+               default:
+                       this.startOpen = function (row, index) {
+                               return options.dataTreeStartExpanded[index];
+                       };
+                       break;
+       }
+};
+
+DataTree.prototype.initializeRow = function (row) {
+       var childArray = row.getData()[this.field];
+       var isArray = Array.isArray(childArray);
+
+       var children = isArray || !isArray && (typeof childArray === "undefined" ? "undefined" : _typeof(childArray)) === "object" && childArray !== null;
+
+       if (!children && row.modules.dataTree && row.modules.dataTree.branchEl) {
+               row.modules.dataTree.branchEl.parentNode.removeChild(row.modules.dataTree.branchEl);
+       }
+
+       if (!children && row.modules.dataTree && row.modules.dataTree.controlEl) {
+               row.modules.dataTree.controlEl.parentNode.removeChild(row.modules.dataTree.controlEl);
+       }
+
+       row.modules.dataTree = {
+               index: row.modules.dataTree ? row.modules.dataTree.index : 0,
+               open: children ? row.modules.dataTree ? row.modules.dataTree.open : this.startOpen(row.getComponent(), 0) : false,
+               controlEl: row.modules.dataTree && children ? row.modules.dataTree.controlEl : false,
+               branchEl: row.modules.dataTree && children ? row.modules.dataTree.branchEl : false,
+               parent: row.modules.dataTree ? row.modules.dataTree.parent : false,
+               children: children
+       };
+};
+
+DataTree.prototype.layoutRow = function (row) {
+       var cell = this.elementField ? row.getCell(this.elementField) : row.getCells()[0],
+           el = cell.getElement(),
+           config = row.modules.dataTree;
+
+       if (config.branchEl) {
+               if (config.branchEl.parentNode) {
+                       config.branchEl.parentNode.removeChild(config.branchEl);
+               }
+               config.branchEl = false;
+       }
+
+       if (config.controlEl) {
+               if (config.controlEl.parentNode) {
+                       config.controlEl.parentNode.removeChild(config.controlEl);
+               }
+               config.controlEl = false;
+       }
+
+       this.generateControlElement(row, el);
+
+       row.element.classList.add("tabulator-tree-level-" + config.index);
+
+       if (config.index) {
+               if (this.branchEl) {
+                       config.branchEl = this.branchEl.cloneNode(true);
+                       el.insertBefore(config.branchEl, el.firstChild);
+
+                       if (this.table.rtl) {
+                               config.branchEl.style.marginRight = (config.branchEl.offsetWidth + config.branchEl.style.marginLeft) * (config.index - 1) + config.index * this.indent + "px";
+                       } else {
+                               config.branchEl.style.marginLeft = (config.branchEl.offsetWidth + config.branchEl.style.marginRight) * (config.index - 1) + config.index * this.indent + "px";
+                       }
+               } else {
+
+                       if (this.table.rtl) {
+                               el.style.paddingRight = parseInt(window.getComputedStyle(el, null).getPropertyValue('padding-right')) + config.index * this.indent + "px";
+                       } else {
+                               el.style.paddingLeft = parseInt(window.getComputedStyle(el, null).getPropertyValue('padding-left')) + config.index * this.indent + "px";
+                       }
+               }
+       }
+};
+
+DataTree.prototype.generateControlElement = function (row, el) {
+       var _this = this;
+
+       var config = row.modules.dataTree,
+           el = el || row.getCells()[0].getElement(),
+           oldControl = config.controlEl;
+
+       if (config.children !== false) {
+
+               if (config.open) {
+                       config.controlEl = this.collapseEl.cloneNode(true);
+                       config.controlEl.addEventListener("click", function (e) {
+                               e.stopPropagation();
+                               _this.collapseRow(row);
+                       });
+               } else {
+                       config.controlEl = this.expandEl.cloneNode(true);
+                       config.controlEl.addEventListener("click", function (e) {
+                               e.stopPropagation();
+                               _this.expandRow(row);
+                       });
+               }
+
+               config.controlEl.addEventListener("mousedown", function (e) {
+                       e.stopPropagation();
+               });
+
+               if (oldControl && oldControl.parentNode === el) {
+                       oldControl.parentNode.replaceChild(config.controlEl, oldControl);
+               } else {
+                       el.insertBefore(config.controlEl, el.firstChild);
+               }
+       }
+};
+
+DataTree.prototype.setDisplayIndex = function (index) {
+       this.displayIndex = index;
+};
+
+DataTree.prototype.getDisplayIndex = function () {
+       return this.displayIndex;
+};
+
+DataTree.prototype.getRows = function (rows) {
+       var _this2 = this;
+
+       var output = [];
+
+       rows.forEach(function (row, i) {
+               var config, children;
+
+               output.push(row);
+
+               if (row instanceof Row) {
+
+                       config = row.modules.dataTree.children;
+
+                       if (!config.index && config.children !== false) {
+                               children = _this2.getChildren(row);
+
+                               children.forEach(function (child) {
+                                       output.push(child);
+                               });
+                       }
+               }
+       });
+
+       return output;
+};
+
+DataTree.prototype.getChildren = function (row) {
+       var _this3 = this;
+
+       var config = row.modules.dataTree,
+           children = [],
+           output = [];
+
+       if (config.children !== false && config.open) {
+               if (!Array.isArray(config.children)) {
+                       config.children = this.generateChildren(row);
+               }
+
+               if (this.table.modExists("filter") && this.table.options.dataTreeFilter) {
+                       children = this.table.modules.filter.filter(config.children);
+               } else {
+                       children = config.children;
+               }
+
+               if (this.table.modExists("sort") && this.table.options.dataTreeSort) {
+                       this.table.modules.sort.sort(children);
+               }
+
+               children.forEach(function (child) {
+                       output.push(child);
+
+                       var subChildren = _this3.getChildren(child);
+
+                       subChildren.forEach(function (sub) {
+                               output.push(sub);
+                       });
+               });
+       }
+
+       return output;
+};
+
+DataTree.prototype.generateChildren = function (row) {
+       var _this4 = this;
+
+       var children = [];
+
+       var childArray = row.getData()[this.field];
+
+       if (!Array.isArray(childArray)) {
+               childArray = [childArray];
+       }
+
+       childArray.forEach(function (childData) {
+               var childRow = new Row(childData || {}, _this4.table.rowManager);
+               childRow.modules.dataTree.index = row.modules.dataTree.index + 1;
+               childRow.modules.dataTree.parent = row;
+               if (childRow.modules.dataTree.children) {
+                       childRow.modules.dataTree.open = _this4.startOpen(childRow.getComponent(), childRow.modules.dataTree.index);
+               }
+               children.push(childRow);
+       });
+
+       return children;
+};
+
+DataTree.prototype.expandRow = function (row, silent) {
+       var config = row.modules.dataTree;
+
+       if (config.children !== false) {
+               config.open = true;
+
+               row.reinitialize();
+
+               this.table.rowManager.refreshActiveData("tree", false, true);
+
+               this.table.options.dataTreeRowExpanded(row.getComponent(), row.modules.dataTree.index);
+       }
+};
+
+DataTree.prototype.collapseRow = function (row) {
+       var config = row.modules.dataTree;
+
+       if (config.children !== false) {
+               config.open = false;
+
+               row.reinitialize();
+
+               this.table.rowManager.refreshActiveData("tree", false, true);
+
+               this.table.options.dataTreeRowCollapsed(row.getComponent(), row.modules.dataTree.index);
+       }
+};
+
+DataTree.prototype.toggleRow = function (row) {
+       var config = row.modules.dataTree;
+
+       if (config.children !== false) {
+               if (config.open) {
+                       this.collapseRow(row);
+               } else {
+                       this.expandRow(row);
+               }
+       }
+};
+
+DataTree.prototype.getTreeParent = function (row) {
+       return row.modules.dataTree.parent ? row.modules.dataTree.parent.getComponent() : false;
+};
+
+DataTree.prototype.getFilteredTreeChildren = function (row) {
+       var config = row.modules.dataTree,
+           output = [],
+           children;
+
+       if (config.children) {
+
+               if (!Array.isArray(config.children)) {
+                       config.children = this.generateChildren(row);
+               }
+
+               if (this.table.modExists("filter") && this.table.options.dataTreeFilter) {
+                       children = this.table.modules.filter.filter(config.children);
+               } else {
+                       children = config.children;
+               }
+
+               children.forEach(function (childRow) {
+                       if (childRow instanceof Row) {
+                               output.push(childRow);
+                       }
+               });
+       }
+
+       return output;
+};
+
+DataTree.prototype.rowDelete = function (row) {
+       var parent = row.modules.dataTree.parent,
+           childIndex;
+
+       if (parent) {
+               childIndex = this.findChildIndex(row, parent);
+
+               if (childIndex !== false) {
+                       parent.data[this.field].splice(childIndex, 1);
+               }
+
+               if (!parent.data[this.field].length) {
+                       delete parent.data[this.field];
+               }
+
+               this.initializeRow(parent);
+               this.layoutRow(parent);
+       }
+
+       this.table.rowManager.refreshActiveData("tree", false, true);
+};
+
+DataTree.prototype.addTreeChildRow = function (row, data, top, index) {
+       var childIndex = false;
+
+       if (typeof data === "string") {
+               data = JSON.parse(data);
+       }
+
+       if (!Array.isArray(row.data[this.field])) {
+               row.data[this.field] = [];
+
+               row.modules.dataTree.open = this.startOpen(row.getComponent(), row.modules.dataTree.index);
+       }
+
+       if (typeof index !== "undefined") {
+               childIndex = this.findChildIndex(index, row);
+
+               if (childIndex !== false) {
+                       row.data[this.field].splice(top ? childIndex : childIndex + 1, 0, data);
+               }
+       }
+
+       if (childIndex === false) {
+               if (top) {
+                       row.data[this.field].unshift(data);
+               } else {
+                       row.data[this.field].push(data);
+               }
+       }
+
+       this.initializeRow(row);
+       this.layoutRow(row);
+
+       this.table.rowManager.refreshActiveData("tree", false, true);
+};
+
+DataTree.prototype.findChildIndex = function (subject, parent) {
+       var _this5 = this;
+
+       var match = false;
+
+       if ((typeof subject === "undefined" ? "undefined" : _typeof(subject)) == "object") {
+
+               if (subject instanceof Row) {
+                       //subject is row element
+                       match = subject.data;
+               } else if (subject instanceof RowComponent) {
+                       //subject is public row component
+                       match = subject._getSelf().data;
+               } else if (typeof HTMLElement !== "undefined" && subject instanceof HTMLElement) {
+                       if (parent.modules.dataTree) {
+                               match = parent.modules.dataTree.children.find(function (childRow) {
+                                       return childRow instanceof Row ? childRow.element === subject : false;
+                               });
+
+                               if (match) {
+                                       match = match.data;
+                               }
+                       }
+               }
+       } else if (typeof subject == "undefined" || subject === null) {
+               match = false;
+       } else {
+               //subject should be treated as the index of the row
+               match = parent.data[this.field].find(function (row) {
+                       return row.data[_this5.table.options.index] == subject;
+               });
+       }
+
+       if (match) {
+
+               if (Array.isArray(parent.data[this.field])) {
+                       match = parent.data[this.field].indexOf(match);
+               }
+
+               if (match == -1) {
+                       match = false;
+               }
+       }
+
+       //catch all for any other type of input
+
+       return match;
+};
+
+DataTree.prototype.getTreeChildren = function (row, component, recurse) {
+       var _this6 = this;
+
+       var config = row.modules.dataTree,
+           output = [];
+
+       if (config.children) {
+
+               if (!Array.isArray(config.children)) {
+                       config.children = this.generateChildren(row);
+               }
+
+               config.children.forEach(function (childRow) {
+                       if (childRow instanceof Row) {
+                               output.push(component ? childRow.getComponent() : childRow);
+
+                               if (recurse) {
+                                       output = output.concat(_this6.getTreeChildren(childRow, component, recurse));
+                               }
+                       }
+               });
+       }
+
+       return output;
+};
+
+DataTree.prototype.checkForRestyle = function (cell) {
+       if (!cell.row.cells.indexOf(cell)) {
+               cell.row.reinitialize();
+       }
+};
+
+DataTree.prototype.getChildField = function () {
+       return this.field;
+};
+
+DataTree.prototype.redrawNeeded = function (data) {
+       return (this.field ? typeof data[this.field] !== "undefined" : false) || (this.elementField ? typeof data[this.elementField] !== "undefined" : false);
+};
+
+Tabulator.prototype.registerModule("dataTree", DataTree);
\ No newline at end of file
diff --git a/website/js/vendor/tabulator/js/modules/data_tree.min.js b/website/js/vendor/tabulator/js/modules/data_tree.min.js
new file mode 100644 (file)
index 0000000..949ac56
--- /dev/null
@@ -0,0 +1,2 @@
+/* Tabulator v4.8.3 (c) Oliver Folkerd */
+var _typeof="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},DataTree=function(e){this.table=e,this.indent=10,this.field="",this.collapseEl=null,this.expandEl=null,this.branchEl=null,this.elementField=!1,this.startOpen=function(){},this.displayIndex=0};DataTree.prototype.initialize=function(){var e=null,t=this.table.columnManager.getFirstVisibileColumn(),a=this.table.options;switch(this.field=a.dataTreeChildField,this.indent=a.dataTreeChildIndent,this.elementField=a.dataTreeElementColumn||!!t&&t.field,a.dataTreeBranchElement&&(!0===a.dataTreeBranchElement?(this.branchEl=document.createElement("div"),this.branchEl.classList.add("tabulator-data-tree-branch")):"string"==typeof a.dataTreeBranchElement?(e=document.createElement("div"),e.innerHTML=a.dataTreeBranchElement,this.branchEl=e.firstChild):this.branchEl=a.dataTreeBranchElement),a.dataTreeCollapseElement?"string"==typeof a.dataTreeCollapseElement?(e=document.createElement("div"),e.innerHTML=a.dataTreeCollapseElement,this.collapseEl=e.firstChild):this.collapseEl=a.dataTreeCollapseElement:(this.collapseEl=document.createElement("div"),this.collapseEl.classList.add("tabulator-data-tree-control"),this.collapseEl.tabIndex=0,this.collapseEl.innerHTML="<div class='tabulator-data-tree-control-collapse'></div>"),a.dataTreeExpandElement?"string"==typeof a.dataTreeExpandElement?(e=document.createElement("div"),e.innerHTML=a.dataTreeExpandElement,this.expandEl=e.firstChild):this.expandEl=a.dataTreeExpandElement:(this.expandEl=document.createElement("div"),this.expandEl.classList.add("tabulator-data-tree-control"),this.expandEl.tabIndex=0,this.expandEl.innerHTML="<div class='tabulator-data-tree-control-expand'></div>"),_typeof(a.dataTreeStartExpanded)){case"boolean":this.startOpen=function(e,t){return a.dataTreeStartExpanded};break;case"function":this.startOpen=a.dataTreeStartExpanded;break;default:this.startOpen=function(e,t){return a.dataTreeStartExpanded[t]}}},DataTree.prototype.initializeRow=function(e){var t=e.getData()[this.field],a=Array.isArray(t),n=a||!a&&"object"===(void 0===t?"undefined":_typeof(t))&&null!==t;!n&&e.modules.dataTree&&e.modules.dataTree.branchEl&&e.modules.dataTree.branchEl.parentNode.removeChild(e.modules.dataTree.branchEl),!n&&e.modules.dataTree&&e.modules.dataTree.controlEl&&e.modules.dataTree.controlEl.parentNode.removeChild(e.modules.dataTree.controlEl),e.modules.dataTree={index:e.modules.dataTree?e.modules.dataTree.index:0,open:!!n&&(e.modules.dataTree?e.modules.dataTree.open:this.startOpen(e.getComponent(),0)),controlEl:!(!e.modules.dataTree||!n)&&e.modules.dataTree.controlEl,branchEl:!(!e.modules.dataTree||!n)&&e.modules.dataTree.branchEl,parent:!!e.modules.dataTree&&e.modules.dataTree.parent,children:n}},DataTree.prototype.layoutRow=function(e){var t=this.elementField?e.getCell(this.elementField):e.getCells()[0],a=t.getElement(),n=e.modules.dataTree;n.branchEl&&(n.branchEl.parentNode&&n.branchEl.parentNode.removeChild(n.branchEl),n.branchEl=!1),n.controlEl&&(n.controlEl.parentNode&&n.controlEl.parentNode.removeChild(n.controlEl),n.controlEl=!1),this.generateControlElement(e,a),e.element.classList.add("tabulator-tree-level-"+n.index),n.index&&(this.branchEl?(n.branchEl=this.branchEl.cloneNode(!0),a.insertBefore(n.branchEl,a.firstChild),this.table.rtl?n.branchEl.style.marginRight=(n.branchEl.offsetWidth+n.branchEl.style.marginLeft)*(n.index-1)+n.index*this.indent+"px":n.branchEl.style.marginLeft=(n.branchEl.offsetWidth+n.branchEl.style.marginRight)*(n.index-1)+n.index*this.indent+"px"):this.table.rtl?a.style.paddingRight=parseInt(window.getComputedStyle(a,null).getPropertyValue("padding-right"))+n.index*this.indent+"px":a.style.paddingLeft=parseInt(window.getComputedStyle(a,null).getPropertyValue("padding-left"))+n.index*this.indent+"px")},DataTree.prototype.generateControlElement=function(e,t){var a=this,n=e.modules.dataTree,t=t||e.getCells()[0].getElement(),r=n.controlEl;!1!==n.children&&(n.open?(n.controlEl=this.collapseEl.cloneNode(!0),n.controlEl.addEventListener("click",function(t){t.stopPropagation(),a.collapseRow(e)})):(n.controlEl=this.expandEl.cloneNode(!0),n.controlEl.addEventListener("click",function(t){t.stopPropagation(),a.expandRow(e)})),n.controlEl.addEventListener("mousedown",function(e){e.stopPropagation()}),r&&r.parentNode===t?r.parentNode.replaceChild(n.controlEl,r):t.insertBefore(n.controlEl,t.firstChild))},DataTree.prototype.setDisplayIndex=function(e){this.displayIndex=e},DataTree.prototype.getDisplayIndex=function(){return this.displayIndex},DataTree.prototype.getRows=function(e){var t=this,a=[];return e.forEach(function(e,n){var r,l;a.push(e),e instanceof Row&&(r=e.modules.dataTree.children,r.index||!1===r.children||(l=t.getChildren(e),l.forEach(function(e){a.push(e)})))}),a},DataTree.prototype.getChildren=function(e){var t=this,a=e.modules.dataTree,n=[],r=[];return!1!==a.children&&a.open&&(Array.isArray(a.children)||(a.children=this.generateChildren(e)),n=this.table.modExists("filter")&&this.table.options.dataTreeFilter?this.table.modules.filter.filter(a.children):a.children,this.table.modExists("sort")&&this.table.options.dataTreeSort&&this.table.modules.sort.sort(n),n.forEach(function(e){r.push(e),t.getChildren(e).forEach(function(e){r.push(e)})})),r},DataTree.prototype.generateChildren=function(e){var t=this,a=[],n=e.getData()[this.field];return Array.isArray(n)||(n=[n]),n.forEach(function(n){var r=new Row(n||{},t.table.rowManager);r.modules.dataTree.index=e.modules.dataTree.index+1,r.modules.dataTree.parent=e,r.modules.dataTree.children&&(r.modules.dataTree.open=t.startOpen(r.getComponent(),r.modules.dataTree.index)),a.push(r)}),a},DataTree.prototype.expandRow=function(e,t){var a=e.modules.dataTree;!1!==a.children&&(a.open=!0,e.reinitialize(),this.table.rowManager.refreshActiveData("tree",!1,!0),this.table.options.dataTreeRowExpanded(e.getComponent(),e.modules.dataTree.index))},DataTree.prototype.collapseRow=function(e){var t=e.modules.dataTree;!1!==t.children&&(t.open=!1,e.reinitialize(),this.table.rowManager.refreshActiveData("tree",!1,!0),this.table.options.dataTreeRowCollapsed(e.getComponent(),e.modules.dataTree.index))},DataTree.prototype.toggleRow=function(e){var t=e.modules.dataTree;!1!==t.children&&(t.open?this.collapseRow(e):this.expandRow(e))},DataTree.prototype.getTreeParent=function(e){return!!e.modules.dataTree.parent&&e.modules.dataTree.parent.getComponent()},DataTree.prototype.getFilteredTreeChildren=function(e){var t,a=e.modules.dataTree,n=[];return a.children&&(Array.isArray(a.children)||(a.children=this.generateChildren(e)),t=this.table.modExists("filter")&&this.table.options.dataTreeFilter?this.table.modules.filter.filter(a.children):a.children,t.forEach(function(e){e instanceof Row&&n.push(e)})),n},DataTree.prototype.rowDelete=function(e){var t,a=e.modules.dataTree.parent;a&&(t=this.findChildIndex(e,a),!1!==t&&a.data[this.field].splice(t,1),a.data[this.field].length||delete a.data[this.field],this.initializeRow(a),this.layoutRow(a)),this.table.rowManager.refreshActiveData("tree",!1,!0)},DataTree.prototype.addTreeChildRow=function(e,t,a,n){var r=!1;"string"==typeof t&&(t=JSON.parse(t)),Array.isArray(e.data[this.field])||(e.data[this.field]=[],e.modules.dataTree.open=this.startOpen(e.getComponent(),e.modules.dataTree.index)),void 0!==n&&!1!==(r=this.findChildIndex(n,e))&&e.data[this.field].splice(a?r:r+1,0,t),!1===r&&(a?e.data[this.field].unshift(t):e.data[this.field].push(t)),this.initializeRow(e),this.layoutRow(e),this.table.rowManager.refreshActiveData("tree",!1,!0)},DataTree.prototype.findChildIndex=function(e,t){var a=this,n=!1;return"object"==(void 0===e?"undefined":_typeof(e))?e instanceof Row?n=e.data:e instanceof RowComponent?n=e._getSelf().data:"undefined"!=typeof HTMLElement&&e instanceof HTMLElement&&t.modules.dataTree&&(n=t.modules.dataTree.children.find(function(t){return t instanceof Row&&t.element===e}))&&(n=n.data):n=void 0!==e&&null!==e&&t.data[this.field].find(function(t){return t.data[a.table.options.index]==e}),n&&(Array.isArray(t.data[this.field])&&(n=t.data[this.field].indexOf(n)),-1==n&&(n=!1)),n},DataTree.prototype.getTreeChildren=function(e,t,a){var n=this,r=e.modules.dataTree,l=[];return r.children&&(Array.isArray(r.children)||(r.children=this.generateChildren(e)),r.children.forEach(function(e){e instanceof Row&&(l.push(t?e.getComponent():e),a&&(l=l.concat(n.getTreeChildren(e,t,a))))})),l},DataTree.prototype.checkForRestyle=function(e){e.row.cells.indexOf(e)||e.row.reinitialize()},DataTree.prototype.getChildField=function(){return this.field},DataTree.prototype.redrawNeeded=function(e){return!!this.field&&void 0!==e[this.field]||!!this.elementField&&void 0!==e[this.elementField]},Tabulator.prototype.registerModule("dataTree",DataTree);
\ No newline at end of file
diff --git a/website/js/vendor/tabulator/js/modules/download.js b/website/js/vendor/tabulator/js/modules/download.js
new file mode 100644 (file)
index 0000000..ddaec41
--- /dev/null
@@ -0,0 +1,433 @@
+var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
+
+/* Tabulator v4.8.3 (c) Oliver Folkerd */
+
+var Download = function Download(table) {
+       this.table = table; //hold Tabulator object
+};
+
+//trigger file download
+Download.prototype.download = function (type, filename, options, range, interceptCallback) {
+       var self = this,
+           downloadFunc = false;
+
+       function buildLink(data, mime) {
+               if (interceptCallback) {
+                       if (interceptCallback === true) {
+                               self.triggerDownload(data, mime, type, filename, true);
+                       } else {
+                               interceptCallback(data);
+                       }
+               } else {
+                       self.triggerDownload(data, mime, type, filename);
+               }
+       }
+
+       if (typeof type == "function") {
+               downloadFunc = type;
+       } else {
+               if (self.downloaders[type]) {
+                       downloadFunc = self.downloaders[type];
+               } else {
+                       console.warn("Download Error - No such download type found: ", type);
+               }
+       }
+
+       if (downloadFunc) {
+               var list = this.generateExportList(range);
+
+               downloadFunc.call(this.table, list, options || {}, buildLink);
+       }
+};
+
+Download.prototype.generateExportList = function (range) {
+       var list = this.table.modules.export.generateExportList(this.table.options.downloadConfig, false, range || this.table.options.downloadRowRange, "download");
+
+       //assign group header formatter
+       var groupHeader = this.table.options.groupHeaderDownload;
+
+       if (groupHeader && !Array.isArray(groupHeader)) {
+               groupHeader = [groupHeader];
+       }
+
+       list.forEach(function (row) {
+               var group;
+
+               if (row.type === "group") {
+                       group = row.columns[0];
+
+                       if (groupHeader && groupHeader[row.indent]) {
+                               group.value = groupHeader[row.indent](group.value, row.component._group.getRowCount(), row.component._group.getData(), row.component);
+                       }
+               }
+       });
+
+       return list;
+};
+
+Download.prototype.triggerDownload = function (data, mime, type, filename, newTab) {
+       var element = document.createElement('a'),
+           blob = new Blob([data], { type: mime }),
+           filename = filename || "Tabulator." + (typeof type === "function" ? "txt" : type);
+
+       blob = this.table.options.downloadReady.call(this.table, data, blob);
+
+       if (blob) {
+
+               if (newTab) {
+                       window.open(window.URL.createObjectURL(blob));
+               } else {
+                       if (navigator.msSaveOrOpenBlob) {
+                               navigator.msSaveOrOpenBlob(blob, filename);
+                       } else {
+                               element.setAttribute('href', window.URL.createObjectURL(blob));
+
+                               //set file title
+                               element.setAttribute('download', filename);
+
+                               //trigger download
+                               element.style.display = 'none';
+                               document.body.appendChild(element);
+                               element.click();
+
+                               //remove temporary link element
+                               document.body.removeChild(element);
+                       }
+               }
+
+               if (this.table.options.downloadComplete) {
+                       this.table.options.downloadComplete();
+               }
+       }
+};
+
+Download.prototype.commsReceived = function (table, action, data) {
+       switch (action) {
+               case "intercept":
+                       this.download(data.type, "", data.options, data.active, data.intercept);
+                       break;
+       }
+};
+
+//downloaders
+Download.prototype.downloaders = {
+       csv: function csv(list, options, setFileContents) {
+               var delimiter = options && options.delimiter ? options.delimiter : ",",
+                   fileContents = [],
+                   headers = [];
+
+               list.forEach(function (row) {
+                       var item = [];
+
+                       switch (row.type) {
+                               case "group":
+                                       console.warn("Download Warning - CSV downloader cannot process row groups");
+                                       break;
+
+                               case "calc":
+                                       console.warn("Download Warning - CSV downloader cannot process column calculations");
+                                       break;
+
+                               case "header":
+                                       row.columns.forEach(function (col, i) {
+                                               if (col && col.depth === 1) {
+                                                       headers[i] = typeof col.value == "undefined" || col.value === null ? "" : '"' + String(col.value).split('"').join('""') + '"';
+                                               }
+                                       });
+                                       break;
+
+                               case "row":
+                                       row.columns.forEach(function (col) {
+
+                                               if (col) {
+
+                                                       switch (_typeof(col.value)) {
+                                                               case "object":
+                                                                       col.value = JSON.stringify(col.value);
+                                                                       break;
+
+                                                               case "undefined":
+                                                               case "null":
+                                                                       col.value = "";
+                                                                       break;
+                                                       }
+
+                                                       item.push('"' + String(col.value).split('"').join('""') + '"');
+                                               }
+                                       });
+
+                                       fileContents.push(item.join(delimiter));
+                                       break;
+                       }
+               });
+
+               if (headers.length) {
+                       fileContents.unshift(headers.join(delimiter));
+               }
+
+               fileContents = fileContents.join("\n");
+
+               if (options.bom) {
+                       fileContents = "\uFEFF" + fileContents;
+               }
+
+               setFileContents(fileContents, "text/csv");
+       },
+
+       json: function json(list, options, setFileContents) {
+               var fileContents = [];
+
+               list.forEach(function (row) {
+                       var item = {};
+
+                       switch (row.type) {
+                               case "header":
+                                       break;
+
+                               case "group":
+                                       console.warn("Download Warning - JSON downloader cannot process row groups");
+                                       break;
+
+                               case "calc":
+                                       console.warn("Download Warning - JSON downloader cannot process column calculations");
+                                       break;
+
+                               case "row":
+                                       row.columns.forEach(function (col) {
+                                               if (col) {
+                                                       item[col.component.getField()] = col.value;
+                                               }
+                                       });
+
+                                       fileContents.push(item);
+                                       break;
+                       }
+               });
+
+               fileContents = JSON.stringify(fileContents, null, '\t');
+
+               setFileContents(fileContents, "application/json");
+       },
+
+       pdf: function pdf(list, options, setFileContents) {
+               var header = [],
+                   body = [],
+                   autoTableParams = {},
+                   rowGroupStyles = options.rowGroupStyles || {
+                       fontStyle: "bold",
+                       fontSize: 12,
+                       cellPadding: 6,
+                       fillColor: 220
+               },
+                   rowCalcStyles = options.rowCalcStyles || {
+                       fontStyle: "bold",
+                       fontSize: 10,
+                       cellPadding: 4,
+                       fillColor: 232
+               },
+                   jsPDFParams = options.jsPDF || {},
+                   title = options && options.title ? options.title : "";
+
+               if (!jsPDFParams.orientation) {
+                       jsPDFParams.orientation = options.orientation || "landscape";
+               }
+
+               if (!jsPDFParams.unit) {
+                       jsPDFParams.unit = "pt";
+               }
+
+               //parse row list
+               list.forEach(function (row) {
+                       var item = {};
+
+                       switch (row.type) {
+                               case "header":
+                                       header.push(parseRow(row));
+                                       break;
+
+                               case "group":
+                                       body.push(parseRow(row, rowGroupStyles));
+                                       break;
+
+                               case "calc":
+                                       body.push(parseRow(row, rowCalcStyles));
+                                       break;
+
+                               case "row":
+                                       body.push(parseRow(row));
+                                       break;
+                       }
+               });
+
+               function parseRow(row, styles) {
+                       var rowData = [];
+
+                       row.columns.forEach(function (col) {
+                               var cell;
+
+                               if (col) {
+                                       switch (_typeof(col.value)) {
+                                               case "object":
+                                                       col.value = JSON.stringify(col.value);
+                                                       break;
+
+                                               case "undefined":
+                                               case "null":
+                                                       col.value = "";
+                                                       break;
+                                       }
+
+                                       cell = {
+                                               content: col.value,
+                                               colSpan: col.width,
+                                               rowSpan: col.height
+                                       };
+
+                                       if (styles) {
+                                               cell.styles = styles;
+                                       }
+
+                                       rowData.push(cell);
+                               } else {
+                                       rowData.push("");
+                               }
+                       });
+
+                       return rowData;
+               }
+
+               //configure PDF
+               var doc = new jsPDF(jsPDFParams); //set document to landscape, better for most tables
+
+               if (options && options.autoTable) {
+                       if (typeof options.autoTable === "function") {
+                               autoTableParams = options.autoTable(doc) || {};
+                       } else {
+                               autoTableParams = options.autoTable;
+                       }
+               }
+
+               if (title) {
+                       autoTableParams.addPageContent = function (data) {
+                               doc.text(title, 40, 30);
+                       };
+               }
+
+               autoTableParams.head = header;
+               autoTableParams.body = body;
+
+               doc.autoTable(autoTableParams);
+
+               if (options && options.documentProcessing) {
+                       options.documentProcessing(doc);
+               }
+
+               setFileContents(doc.output("arraybuffer"), "application/pdf");
+       },
+
+       xlsx: function xlsx(list, options, setFileContents) {
+               var self = this,
+                   sheetName = options.sheetName || "Sheet1",
+                   workbook = XLSX.utils.book_new(),
+                   output;
+
+               workbook.SheetNames = [];
+               workbook.Sheets = {};
+
+               function generateSheet() {
+                       var rows = [],
+                           merges = [],
+                           worksheet = {},
+                           range = { s: { c: 0, r: 0 }, e: { c: list[0] ? list[0].columns.reduce(function (a, b) {
+                                               return a + (b && b.width ? b.width : 1);
+                                       }, 0) : 0, r: list.length } };
+
+                       //parse row list
+                       list.forEach(function (row, i) {
+                               var rowData = [];
+
+                               row.columns.forEach(function (col, j) {
+
+                                       if (col) {
+                                               rowData.push(!(col.value instanceof Date) && _typeof(col.value) === "object" ? JSON.stringify(col.value) : col.value);
+
+                                               if (col.width > 1 || col.height > -1) {
+                                                       merges.push({ s: { r: i, c: j }, e: { r: i + col.height - 1, c: j + col.width - 1 } });
+                                               }
+                                       } else {
+                                               rowData.push("");
+                                       }
+                               });
+
+                               rows.push(rowData);
+                       });
+
+                       //convert rows to worksheet
+                       XLSX.utils.sheet_add_aoa(worksheet, rows);
+
+                       worksheet['!ref'] = XLSX.utils.encode_range(range);
+
+                       if (merges.length) {
+                               worksheet["!merges"] = merges;
+                       }
+
+                       return worksheet;
+               }
+
+               if (options.sheetOnly) {
+                       setFileContents(generateSheet());
+                       return;
+               }
+
+               if (options.sheets) {
+                       for (var sheet in options.sheets) {
+
+                               if (options.sheets[sheet] === true) {
+                                       workbook.SheetNames.push(sheet);
+                                       workbook.Sheets[sheet] = generateSheet();
+                               } else {
+
+                                       workbook.SheetNames.push(sheet);
+
+                                       this.modules.comms.send(options.sheets[sheet], "download", "intercept", {
+                                               type: "xlsx",
+                                               options: { sheetOnly: true },
+                                               active: self.active,
+                                               intercept: function intercept(data) {
+                                                       workbook.Sheets[sheet] = data;
+                                               }
+                                       });
+                               }
+                       }
+               } else {
+                       workbook.SheetNames.push(sheetName);
+                       workbook.Sheets[sheetName] = generateSheet();
+               }
+
+               if (options.documentProcessing) {
+                       workbook = options.documentProcessing(workbook);
+               }
+
+               //convert workbook to binary array
+               function s2ab(s) {
+                       var buf = new ArrayBuffer(s.length);
+                       var view = new Uint8Array(buf);
+                       for (var i = 0; i != s.length; ++i) {
+                               view[i] = s.charCodeAt(i) & 0xFF;
+                       }return buf;
+               }
+
+               output = XLSX.write(workbook, { bookType: 'xlsx', bookSST: true, type: 'binary' });
+
+               setFileContents(s2ab(output), "application/octet-stream");
+       },
+
+       html: function html(list, options, setFileContents) {
+               if (this.modExists("export", true)) {
+                       setFileContents(this.modules.export.genereateHTMLTable(list), "text/html");
+               }
+       }
+
+};
+
+Tabulator.prototype.registerModule("download", Download);
\ No newline at end of file
diff --git a/website/js/vendor/tabulator/js/modules/download.min.js b/website/js/vendor/tabulator/js/modules/download.min.js
new file mode 100644 (file)
index 0000000..45bceb3
--- /dev/null
@@ -0,0 +1,2 @@
+/* Tabulator v4.8.3 (c) Oliver Folkerd */
+var _typeof="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},Download=function(e){this.table=e};Download.prototype.download=function(e,o,t,n,a){function r(t,n){a?!0===a?i.triggerDownload(t,n,e,o,!0):a(t):i.triggerDownload(t,n,e,o)}var i=this,l=!1;if("function"==typeof e?l=e:i.downloaders[e]?l=i.downloaders[e]:console.warn("Download Error - No such download type found: ",e),l){var s=this.generateExportList(n);l.call(this.table,s,t||{},r)}},Download.prototype.generateExportList=function(e){var o=this.table.modules.export.generateExportList(this.table.options.downloadConfig,!1,e||this.table.options.downloadRowRange,"download"),t=this.table.options.groupHeaderDownload;return t&&!Array.isArray(t)&&(t=[t]),o.forEach(function(e){var o;"group"===e.type&&(o=e.columns[0],t&&t[e.indent]&&(o.value=t[e.indent](o.value,e.component._group.getRowCount(),e.component._group.getData(),e.component)))}),o},Download.prototype.triggerDownload=function(e,o,t,n,a){var r=document.createElement("a"),i=new Blob([e],{type:o}),n=n||"Tabulator."+("function"==typeof t?"txt":t);(i=this.table.options.downloadReady.call(this.table,e,i))&&(a?window.open(window.URL.createObjectURL(i)):navigator.msSaveOrOpenBlob?navigator.msSaveOrOpenBlob(i,n):(r.setAttribute("href",window.URL.createObjectURL(i)),r.setAttribute("download",n),r.style.display="none",document.body.appendChild(r),r.click(),document.body.removeChild(r)),this.table.options.downloadComplete&&this.table.options.downloadComplete())},Download.prototype.commsReceived=function(e,o,t){switch(o){case"intercept":this.download(t.type,"",t.options,t.active,t.intercept)}},Download.prototype.downloaders={csv:function(e,o,t){var n=o&&o.delimiter?o.delimiter:",",a=[],r=[];e.forEach(function(e){var o=[];switch(e.type){case"group":console.warn("Download Warning - CSV downloader cannot process row groups");break;case"calc":console.warn("Download Warning - CSV downloader cannot process column calculations");break;case"header":e.columns.forEach(function(e,o){e&&1===e.depth&&(r[o]=void 0===e.value||null===e.value?"":'"'+String(e.value).split('"').join('""')+'"')});break;case"row":e.columns.forEach(function(e){if(e){switch(_typeof(e.value)){case"object":e.value=JSON.stringify(e.value);break;case"undefined":case"null":e.value=""}o.push('"'+String(e.value).split('"').join('""')+'"')}}),a.push(o.join(n))}}),r.length&&a.unshift(r.join(n)),a=a.join("\n"),o.bom&&(a="\ufeff"+a),t(a,"text/csv")},json:function(e,o,t){var n=[];e.forEach(function(e){var o={};switch(e.type){case"header":break;case"group":console.warn("Download Warning - JSON downloader cannot process row groups");break;case"calc":console.warn("Download Warning - JSON downloader cannot process column calculations");break;case"row":e.columns.forEach(function(e){e&&(o[e.component.getField()]=e.value)}),n.push(o)}}),n=JSON.stringify(n,null,"\t"),t(n,"application/json")},pdf:function(e,o,t){function n(e,o){var t=[];return e.columns.forEach(function(e){var n;if(e){switch(_typeof(e.value)){case"object":e.value=JSON.stringify(e.value);break;case"undefined":case"null":e.value=""}n={content:e.value,colSpan:e.width,rowSpan:e.height},o&&(n.styles=o),t.push(n)}else t.push("")}),t}var a=[],r=[],i={},l=o.rowGroupStyles||{fontStyle:"bold",fontSize:12,cellPadding:6,fillColor:220},s=o.rowCalcStyles||{fontStyle:"bold",fontSize:10,cellPadding:4,fillColor:232},c=o.jsPDF||{},u=o&&o.title?o.title:"";c.orientation||(c.orientation=o.orientation||"landscape"),c.unit||(c.unit="pt"),e.forEach(function(e){switch(e.type){case"header":a.push(n(e));break;case"group":r.push(n(e,l));break;case"calc":r.push(n(e,s));break;case"row":r.push(n(e))}});var d=new jsPDF(c);o&&o.autoTable&&(i="function"==typeof o.autoTable?o.autoTable(d)||{}:o.autoTable),u&&(i.addPageContent=function(e){d.text(u,40,30)}),i.head=a,i.body=r,d.autoTable(i),o&&o.documentProcessing&&o.documentProcessing(d),t(d.output("arraybuffer"),"application/pdf")},xlsx:function(e,o,t){function n(){var o=[],t=[],n={},a={s:{c:0,r:0},e:{c:e[0]?e[0].columns.reduce(function(e,o){return e+(o&&o.width?o.width:1)},0):0,r:e.length}};return e.forEach(function(e,n){var a=[];e.columns.forEach(function(e,o){e?(a.push(e.value instanceof Date||"object"!==_typeof(e.value)?e.value:JSON.stringify(e.value)),(e.width>1||e.height>-1)&&t.push({s:{r:n,c:o},e:{r:n+e.height-1,c:o+e.width-1}})):a.push("")}),o.push(a)}),XLSX.utils.sheet_add_aoa(n,o),n["!ref"]=XLSX.utils.encode_range(a),t.length&&(n["!merges"]=t),n}var a,r=this,i=o.sheetName||"Sheet1",l=XLSX.utils.book_new();if(l.SheetNames=[],l.Sheets={},o.sheetOnly)return void t(n());if(o.sheets)for(var s in o.sheets)!0===o.sheets[s]?(l.SheetNames.push(s),l.Sheets[s]=n()):(l.SheetNames.push(s),this.modules.comms.send(o.sheets[s],"download","intercept",{type:"xlsx",options:{sheetOnly:!0},active:r.active,intercept:function(e){l.Sheets[s]=e}}));else l.SheetNames.push(i),l.Sheets[i]=n();o.documentProcessing&&(l=o.documentProcessing(l)),a=XLSX.write(l,{bookType:"xlsx",bookSST:!0,type:"binary"}),t(function(e){for(var o=new ArrayBuffer(e.length),t=new Uint8Array(o),n=0;n!=e.length;++n)t[n]=255&e.charCodeAt(n);return o}(a),"application/octet-stream")},html:function(e,o,t){this.modExists("export",!0)&&t(this.modules.export.genereateHTMLTable(e),"text/html")}},Tabulator.prototype.registerModule("download",Download);
\ No newline at end of file
diff --git a/website/js/vendor/tabulator/js/modules/edit.js b/website/js/vendor/tabulator/js/modules/edit.js
new file mode 100644 (file)
index 0000000..16240be
--- /dev/null
@@ -0,0 +1,2230 @@
+var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
+
+/* Tabulator v4.8.3 (c) Oliver Folkerd */
+
+var Edit = function Edit(table) {
+       this.table = table; //hold Tabulator object
+       this.currentCell = false; //hold currently editing cell
+       this.mouseClick = false; //hold mousedown state to prevent click binding being overriden by editor opening
+       this.recursionBlock = false; //prevent focus recursion
+       this.invalidEdit = false;
+       this.editedCells = [];
+};
+
+//initialize column editor
+Edit.prototype.initializeColumn = function (column) {
+       var self = this,
+           config = {
+               editor: false,
+               blocked: false,
+               check: column.definition.editable,
+               params: column.definition.editorParams || {}
+       };
+
+       //set column editor
+       switch (_typeof(column.definition.editor)) {
+               case "string":
+
+                       if (column.definition.editor === "tick") {
+                               column.definition.editor = "tickCross";
+                               console.warn("DEPRECATION WARNING - the tick editor has been deprecated, please use the tickCross editor");
+                       }
+
+                       if (self.editors[column.definition.editor]) {
+                               config.editor = self.editors[column.definition.editor];
+                       } else {
+                               console.warn("Editor Error - No such editor found: ", column.definition.editor);
+                       }
+                       break;
+
+               case "function":
+                       config.editor = column.definition.editor;
+                       break;
+
+               case "boolean":
+
+                       if (column.definition.editor === true) {
+
+                               if (typeof column.definition.formatter !== "function") {
+
+                                       if (column.definition.formatter === "tick") {
+                                               column.definition.formatter = "tickCross";
+                                               console.warn("DEPRECATION WARNING - the tick editor has been deprecated, please use the tickCross editor");
+                                       }
+
+                                       if (self.editors[column.definition.formatter]) {
+                                               config.editor = self.editors[column.definition.formatter];
+                                       } else {
+                                               config.editor = self.editors["input"];
+                                       }
+                               } else {
+                                       console.warn("Editor Error - Cannot auto lookup editor for a custom formatter: ", column.definition.formatter);
+                               }
+                       }
+                       break;
+       }
+
+       if (config.editor) {
+               column.modules.edit = config;
+       }
+};
+
+Edit.prototype.getCurrentCell = function () {
+       return this.currentCell ? this.currentCell.getComponent() : false;
+};
+
+Edit.prototype.clearEditor = function (cancel) {
+       var cell = this.currentCell,
+           cellEl;
+
+       this.invalidEdit = false;
+
+       if (cell) {
+               this.currentCell = false;
+
+               cellEl = cell.getElement();
+
+               if (cancel) {
+                       cell.validate();
+               } else {
+                       cellEl.classList.remove("tabulator-validation-fail");
+               }
+
+               cellEl.classList.remove("tabulator-editing");
+               while (cellEl.firstChild) {
+                       cellEl.removeChild(cellEl.firstChild);
+               }cell.row.getElement().classList.remove("tabulator-row-editing");
+       }
+};
+
+Edit.prototype.cancelEdit = function () {
+
+       if (this.currentCell) {
+               var cell = this.currentCell;
+               var component = this.currentCell.getComponent();
+
+               this.clearEditor(true);
+               cell.setValueActual(cell.getValue());
+               cell.cellRendered();
+
+               if (cell.column.definition.editor == "textarea" || cell.column.definition.variableHeight) {
+                       cell.row.normalizeHeight(true);
+               }
+
+               if (cell.column.cellEvents.cellEditCancelled) {
+                       cell.column.cellEvents.cellEditCancelled.call(this.table, component);
+               }
+
+               this.table.options.cellEditCancelled.call(this.table, component);
+       }
+};
+
+//return a formatted value for a cell
+Edit.prototype.bindEditor = function (cell) {
+       var self = this,
+           element = cell.getElement();
+
+       element.setAttribute("tabindex", 0);
+
+       element.addEventListener("click", function (e) {
+               if (!element.classList.contains("tabulator-editing")) {
+                       element.focus({ preventScroll: true });
+               }
+       });
+
+       element.addEventListener("mousedown", function (e) {
+               if (e.button === 2) {
+                       e.preventDefault();
+               } else {
+                       self.mouseClick = true;
+               }
+       });
+
+       element.addEventListener("focus", function (e) {
+               if (!self.recursionBlock) {
+                       self.edit(cell, e, false);
+               }
+       });
+};
+
+Edit.prototype.focusCellNoEvent = function (cell, block) {
+       this.recursionBlock = true;
+       if (!(block && this.table.browser === "ie")) {
+               cell.getElement().focus({ preventScroll: true });
+       }
+       this.recursionBlock = false;
+};
+
+Edit.prototype.editCell = function (cell, forceEdit) {
+       this.focusCellNoEvent(cell);
+       this.edit(cell, false, forceEdit);
+};
+
+Edit.prototype.focusScrollAdjust = function (cell) {
+       if (this.table.rowManager.getRenderMode() == "virtual") {
+               var topEdge = this.table.rowManager.element.scrollTop,
+                   bottomEdge = this.table.rowManager.element.clientHeight + this.table.rowManager.element.scrollTop,
+                   rowEl = cell.row.getElement(),
+                   offset = rowEl.offsetTop;
+
+               if (rowEl.offsetTop < topEdge) {
+                       this.table.rowManager.element.scrollTop -= topEdge - rowEl.offsetTop;
+               } else {
+                       if (rowEl.offsetTop + rowEl.offsetHeight > bottomEdge) {
+                               this.table.rowManager.element.scrollTop += rowEl.offsetTop + rowEl.offsetHeight - bottomEdge;
+                       }
+               }
+
+               var leftEdge = this.table.rowManager.element.scrollLeft,
+                   rightEdge = this.table.rowManager.element.clientWidth + this.table.rowManager.element.scrollLeft,
+                   cellEl = cell.getElement(),
+                   offset = cellEl.offsetLeft;
+
+               if (this.table.modExists("frozenColumns")) {
+                       leftEdge += parseInt(this.table.modules.frozenColumns.leftMargin);
+                       rightEdge -= parseInt(this.table.modules.frozenColumns.rightMargin);
+               }
+
+               if (cellEl.offsetLeft < leftEdge) {
+                       this.table.rowManager.element.scrollLeft -= leftEdge - cellEl.offsetLeft;
+               } else {
+                       if (cellEl.offsetLeft + cellEl.offsetWidth > rightEdge) {
+                               this.table.rowManager.element.scrollLeft += cellEl.offsetLeft + cellEl.offsetWidth - rightEdge;
+                       }
+               }
+       }
+};
+
+Edit.prototype.edit = function (cell, e, forceEdit) {
+       var self = this,
+           allowEdit = true,
+           rendered = function rendered() {},
+           element = cell.getElement(),
+           cellEditor,
+           component,
+           params;
+
+       //prevent editing if another cell is refusing to leave focus (eg. validation fail)
+       if (this.currentCell) {
+               if (!this.invalidEdit) {
+                       this.cancelEdit();
+               }
+               return;
+       }
+
+       //handle successfull value change
+       function success(value) {
+               if (self.currentCell === cell) {
+                       var valid = true;
+
+                       if (cell.column.modules.validate && self.table.modExists("validate") && self.table.options.validationMode != "manual") {
+                               valid = self.table.modules.validate.validate(cell.column.modules.validate, cell, value);
+                       }
+
+                       if (valid === true || self.table.options.validationMode === "highlight") {
+                               self.clearEditor();
+
+                               if (!cell.modules.edit) {
+                                       cell.modules.edit = {};
+                               }
+
+                               cell.modules.edit.edited = true;
+
+                               if (self.editedCells.indexOf(cell) == -1) {
+                                       self.editedCells.push(cell);
+                               }
+
+                               cell.setValue(value, true);
+
+                               if (self.table.options.dataTree && self.table.modExists("dataTree")) {
+                                       self.table.modules.dataTree.checkForRestyle(cell);
+                               }
+
+                               if (valid !== true) {
+                                       element.classList.add("tabulator-validation-fail");
+                                       self.table.options.validationFailed.call(self.table, cell.getComponent(), value, valid);
+                                       return false;
+                               }
+
+                               return true;
+                       } else {
+                               self.invalidEdit = true;
+                               element.classList.add("tabulator-validation-fail");
+                               self.focusCellNoEvent(cell, true);
+                               rendered();
+                               self.table.options.validationFailed.call(self.table, cell.getComponent(), value, valid);
+
+                               return false;
+                       }
+               } else {
+                       // console.warn("Edit Success Error - cannot call success on a cell that is no longer being edited");
+               }
+       }
+
+       //handle aborted edit
+       function cancel() {
+               if (self.currentCell === cell) {
+                       self.cancelEdit();
+
+                       if (self.table.options.dataTree && self.table.modExists("dataTree")) {
+                               self.table.modules.dataTree.checkForRestyle(cell);
+                       }
+               } else {
+                       // console.warn("Edit Success Error - cannot call cancel on a cell that is no longer being edited");
+               }
+       }
+
+       function onRendered(callback) {
+               rendered = callback;
+       }
+
+       if (!cell.column.modules.edit.blocked) {
+               if (e) {
+                       e.stopPropagation();
+               }
+
+               switch (_typeof(cell.column.modules.edit.check)) {
+                       case "function":
+                               allowEdit = cell.column.modules.edit.check(cell.getComponent());
+                               break;
+
+                       case "boolean":
+                               allowEdit = cell.column.modules.edit.check;
+                               break;
+               }
+
+               if (allowEdit || forceEdit) {
+
+                       self.cancelEdit();
+
+                       self.currentCell = cell;
+
+                       this.focusScrollAdjust(cell);
+
+                       component = cell.getComponent();
+
+                       if (this.mouseClick) {
+                               this.mouseClick = false;
+
+                               if (cell.column.cellEvents.cellClick) {
+                                       cell.column.cellEvents.cellClick.call(this.table, e, component);
+                               }
+                       }
+
+                       if (cell.column.cellEvents.cellEditing) {
+                               cell.column.cellEvents.cellEditing.call(this.table, component);
+                       }
+
+                       self.table.options.cellEditing.call(this.table, component);
+
+                       params = typeof cell.column.modules.edit.params === "function" ? cell.column.modules.edit.params(component) : cell.column.modules.edit.params;
+
+                       cellEditor = cell.column.modules.edit.editor.call(self, component, onRendered, success, cancel, params);
+
+                       //if editor returned, add to DOM, if false, abort edit
+                       if (cellEditor !== false) {
+
+                               if (cellEditor instanceof Node) {
+                                       element.classList.add("tabulator-editing");
+                                       cell.row.getElement().classList.add("tabulator-row-editing");
+                                       while (element.firstChild) {
+                                               element.removeChild(element.firstChild);
+                                       }element.appendChild(cellEditor);
+
+                                       //trigger onRendered Callback
+                                       rendered();
+
+                                       //prevent editing from triggering rowClick event
+                                       var children = element.children;
+
+                                       for (var i = 0; i < children.length; i++) {
+                                               children[i].addEventListener("click", function (e) {
+                                                       e.stopPropagation();
+                                               });
+                                       }
+                               } else {
+                                       console.warn("Edit Error - Editor should return an instance of Node, the editor returned:", cellEditor);
+                                       element.blur();
+                                       return false;
+                               }
+                       } else {
+                               element.blur();
+                               return false;
+                       }
+
+                       return true;
+               } else {
+                       this.mouseClick = false;
+                       element.blur();
+                       return false;
+               }
+       } else {
+               this.mouseClick = false;
+               element.blur();
+               return false;
+       }
+};
+
+Edit.prototype.maskInput = function (el, options) {
+       var mask = options.mask,
+           maskLetter = typeof options.maskLetterChar !== "undefined" ? options.maskLetterChar : "A",
+           maskNumber = typeof options.maskNumberChar !== "undefined" ? options.maskNumberChar : "9",
+           maskWildcard = typeof options.maskWildcardChar !== "undefined" ? options.maskWildcardChar : "*",
+           success = false;
+
+       function fillSymbols(index) {
+               var symbol = mask[index];
+               if (typeof symbol !== "undefined" && symbol !== maskWildcard && symbol !== maskLetter && symbol !== maskNumber) {
+                       el.value = el.value + "" + symbol;
+                       fillSymbols(index + 1);
+               }
+       }
+
+       el.addEventListener("keydown", function (e) {
+               var index = el.value.length,
+                   char = e.key;
+
+               if (e.keyCode > 46) {
+                       if (index >= mask.length) {
+                               e.preventDefault();
+                               e.stopPropagation();
+                               success = false;
+                               return false;
+                       } else {
+                               switch (mask[index]) {
+                                       case maskLetter:
+                                               if (char.toUpperCase() == char.toLowerCase()) {
+                                                       e.preventDefault();
+                                                       e.stopPropagation();
+                                                       success = false;
+                                                       return false;
+                                               }
+                                               break;
+
+                                       case maskNumber:
+                                               if (isNaN(char)) {
+                                                       e.preventDefault();
+                                                       e.stopPropagation();
+                                                       success = false;
+                                                       return false;
+                                               }
+                                               break;
+
+                                       case maskWildcard:
+                                               break;
+
+                                       default:
+                                               if (char !== mask[index]) {
+                                                       e.preventDefault();
+                                                       e.stopPropagation();
+                                                       success = false;
+                                                       return false;
+                                               }
+                               }
+                       }
+
+                       success = true;
+               }
+
+               return;
+       });
+
+       el.addEventListener("keyup", function (e) {
+               if (e.keyCode > 46) {
+                       if (options.maskAutoFill) {
+                               fillSymbols(el.value.length);
+                       }
+               }
+       });
+
+       if (!el.placeholder) {
+               el.placeholder = mask;
+       }
+
+       if (options.maskAutoFill) {
+               fillSymbols(el.value.length);
+       }
+};
+
+Edit.prototype.getEditedCells = function () {
+       var output = [];
+
+       this.editedCells.forEach(function (cell) {
+               output.push(cell.getComponent());
+       });
+
+       return output;
+};
+
+Edit.prototype.clearEdited = function (cell) {
+       var editIndex;
+
+       if (cell.modules.edit && cell.modules.edit.edited) {
+               cell.modules.edit.edited = false;
+
+               if (cell.modules.validate) {
+                       cell.modules.validate.invalid = false;
+               }
+       }
+
+       editIndex = this.editedCells.indexOf(cell);
+
+       if (editIndex > -1) {
+               this.editedCells.splice(editIndex, 1);
+       }
+};
+
+//default data editors
+Edit.prototype.editors = {
+
+       //input element
+       input: function input(cell, onRendered, success, cancel, editorParams) {
+
+               //create and style input
+               var cellValue = cell.getValue(),
+                   input = document.createElement("input");
+
+               input.setAttribute("type", editorParams.search ? "search" : "text");
+
+               input.style.padding = "4px";
+               input.style.width = "100%";
+               input.style.boxSizing = "border-box";
+
+               if (editorParams.elementAttributes && _typeof(editorParams.elementAttributes) == "object") {
+                       for (var key in editorParams.elementAttributes) {
+                               if (key.charAt(0) == "+") {
+                                       key = key.slice(1);
+                                       input.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes["+" + key]);
+                               } else {
+                                       input.setAttribute(key, editorParams.elementAttributes[key]);
+                               }
+                       }
+               }
+
+               input.value = typeof cellValue !== "undefined" ? cellValue : "";
+
+               onRendered(function () {
+                       input.focus({ preventScroll: true });
+                       input.style.height = "100%";
+               });
+
+               function onChange(e) {
+                       if ((cellValue === null || typeof cellValue === "undefined") && input.value !== "" || input.value !== cellValue) {
+                               if (success(input.value)) {
+                                       cellValue = input.value; //persist value if successfully validated incase editor is used as header filter
+                               }
+                       } else {
+                               cancel();
+                       }
+               }
+
+               //submit new value on blur or change
+               input.addEventListener("change", onChange);
+               input.addEventListener("blur", onChange);
+
+               //submit new value on enter
+               input.addEventListener("keydown", function (e) {
+                       switch (e.keyCode) {
+                               // case 9:
+                               case 13:
+                                       onChange(e);
+                                       break;
+
+                               case 27:
+                                       cancel();
+                                       break;
+
+                               case 35:
+                               case 36:
+                                       e.stopPropagation();
+                                       break;
+                       }
+               });
+
+               if (editorParams.mask) {
+                       this.table.modules.edit.maskInput(input, editorParams);
+               }
+
+               return input;
+       },
+
+       //resizable text area element
+       textarea: function textarea(cell, onRendered, success, cancel, editorParams) {
+               var self = this,
+                   cellValue = cell.getValue(),
+                   vertNav = editorParams.verticalNavigation || "hybrid",
+                   value = String(cellValue !== null && typeof cellValue !== "undefined" ? cellValue : ""),
+                   count = (value.match(/(?:\r\n|\r|\n)/g) || []).length + 1,
+                   input = document.createElement("textarea"),
+                   scrollHeight = 0;
+
+               //create and style input
+               input.style.display = "block";
+               input.style.padding = "2px";
+               input.style.height = "100%";
+               input.style.width = "100%";
+               input.style.boxSizing = "border-box";
+               input.style.whiteSpace = "pre-wrap";
+               input.style.resize = "none";
+
+               if (editorParams.elementAttributes && _typeof(editorParams.elementAttributes) == "object") {
+                       for (var key in editorParams.elementAttributes) {
+                               if (key.charAt(0) == "+") {
+                                       key = key.slice(1);
+                                       input.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes["+" + key]);
+                               } else {
+                                       input.setAttribute(key, editorParams.elementAttributes[key]);
+                               }
+                       }
+               }
+
+               input.value = value;
+
+               onRendered(function () {
+                       input.focus({ preventScroll: true });
+                       input.style.height = "100%";
+
+                       input.scrollHeight;
+                       input.style.height = input.scrollHeight + "px";
+                       cell.getRow().normalizeHeight();
+               });
+
+               function onChange(e) {
+
+                       if ((cellValue === null || typeof cellValue === "undefined") && input.value !== "" || input.value !== cellValue) {
+
+                               if (success(input.value)) {
+                                       cellValue = input.value; //persist value if successfully validated incase editor is used as header filter
+                               }
+
+                               setTimeout(function () {
+                                       cell.getRow().normalizeHeight();
+                               }, 300);
+                       } else {
+                               cancel();
+                       }
+               }
+
+               //submit new value on blur or change
+               input.addEventListener("change", onChange);
+               input.addEventListener("blur", onChange);
+
+               input.addEventListener("keyup", function () {
+
+                       input.style.height = "";
+
+                       var heightNow = input.scrollHeight;
+
+                       input.style.height = heightNow + "px";
+
+                       if (heightNow != scrollHeight) {
+                               scrollHeight = heightNow;
+                               cell.getRow().normalizeHeight();
+                       }
+               });
+
+               input.addEventListener("keydown", function (e) {
+
+                       switch (e.keyCode) {
+                               case 27:
+                                       cancel();
+                                       break;
+
+                               case 38:
+                                       //up arrow
+                                       if (vertNav == "editor" || vertNav == "hybrid" && input.selectionStart) {
+                                               e.stopImmediatePropagation();
+                                               e.stopPropagation();
+                                       }
+
+                                       break;
+
+                               case 40:
+                                       //down arrow
+                                       if (vertNav == "editor" || vertNav == "hybrid" && input.selectionStart !== input.value.length) {
+                                               e.stopImmediatePropagation();
+                                               e.stopPropagation();
+                                       }
+                                       break;
+
+                               case 35:
+                               case 36:
+                                       e.stopPropagation();
+                                       break;
+                       }
+               });
+
+               if (editorParams.mask) {
+                       this.table.modules.edit.maskInput(input, editorParams);
+               }
+
+               return input;
+       },
+
+       //input element with type of number
+       number: function number(cell, onRendered, success, cancel, editorParams) {
+
+               var cellValue = cell.getValue(),
+                   vertNav = editorParams.verticalNavigation || "editor",
+                   input = document.createElement("input");
+
+               input.setAttribute("type", "number");
+
+               if (typeof editorParams.max != "undefined") {
+                       input.setAttribute("max", editorParams.max);
+               }
+
+               if (typeof editorParams.min != "undefined") {
+                       input.setAttribute("min", editorParams.min);
+               }
+
+               if (typeof editorParams.step != "undefined") {
+                       input.setAttribute("step", editorParams.step);
+               }
+
+               //create and style input
+               input.style.padding = "4px";
+               input.style.width = "100%";
+               input.style.boxSizing = "border-box";
+
+               if (editorParams.elementAttributes && _typeof(editorParams.elementAttributes) == "object") {
+                       for (var key in editorParams.elementAttributes) {
+                               if (key.charAt(0) == "+") {
+                                       key = key.slice(1);
+                                       input.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes["+" + key]);
+                               } else {
+                                       input.setAttribute(key, editorParams.elementAttributes[key]);
+                               }
+                       }
+               }
+
+               input.value = cellValue;
+
+               var blurFunc = function blurFunc(e) {
+                       onChange();
+               };
+
+               onRendered(function () {
+                       //submit new value on blur
+                       input.removeEventListener("blur", blurFunc);
+
+                       input.focus({ preventScroll: true });
+                       input.style.height = "100%";
+
+                       //submit new value on blur
+                       input.addEventListener("blur", blurFunc);
+               });
+
+               function onChange() {
+                       var value = input.value;
+
+                       if (!isNaN(value) && value !== "") {
+                               value = Number(value);
+                       }
+
+                       if (value !== cellValue) {
+                               if (success(value)) {
+                                       cellValue = value; //persist value if successfully validated incase editor is used as header filter
+                               }
+                       } else {
+                               cancel();
+                       }
+               }
+
+               //submit new value on enter
+               input.addEventListener("keydown", function (e) {
+                       switch (e.keyCode) {
+                               case 13:
+                                       // case 9:
+                                       onChange();
+                                       break;
+
+                               case 27:
+                                       cancel();
+                                       break;
+
+                               case 38: //up arrow
+                               case 40:
+                                       //down arrow
+                                       if (vertNav == "editor") {
+                                               e.stopImmediatePropagation();
+                                               e.stopPropagation();
+                                       }
+                                       break;
+
+                               case 35:
+                               case 36:
+                                       e.stopPropagation();
+                                       break;
+                       }
+               });
+
+               if (editorParams.mask) {
+                       this.table.modules.edit.maskInput(input, editorParams);
+               }
+
+               return input;
+       },
+
+       //input element with type of number
+       range: function range(cell, onRendered, success, cancel, editorParams) {
+
+               var cellValue = cell.getValue(),
+                   input = document.createElement("input");
+
+               input.setAttribute("type", "range");
+
+               if (typeof editorParams.max != "undefined") {
+                       input.setAttribute("max", editorParams.max);
+               }
+
+               if (typeof editorParams.min != "undefined") {
+                       input.setAttribute("min", editorParams.min);
+               }
+
+               if (typeof editorParams.step != "undefined") {
+                       input.setAttribute("step", editorParams.step);
+               }
+
+               //create and style input
+               input.style.padding = "4px";
+               input.style.width = "100%";
+               input.style.boxSizing = "border-box";
+
+               if (editorParams.elementAttributes && _typeof(editorParams.elementAttributes) == "object") {
+                       for (var key in editorParams.elementAttributes) {
+                               if (key.charAt(0) == "+") {
+                                       key = key.slice(1);
+                                       input.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes["+" + key]);
+                               } else {
+                                       input.setAttribute(key, editorParams.elementAttributes[key]);
+                               }
+                       }
+               }
+
+               input.value = cellValue;
+
+               onRendered(function () {
+                       input.focus({ preventScroll: true });
+                       input.style.height = "100%";
+               });
+
+               function onChange() {
+                       var value = input.value;
+
+                       if (!isNaN(value) && value !== "") {
+                               value = Number(value);
+                       }
+
+                       if (value != cellValue) {
+                               if (success(value)) {
+                                       cellValue = value; //persist value if successfully validated incase editor is used as header filter
+                               }
+                       } else {
+                               cancel();
+                       }
+               }
+
+               //submit new value on blur
+               input.addEventListener("blur", function (e) {
+                       onChange();
+               });
+
+               //submit new value on enter
+               input.addEventListener("keydown", function (e) {
+                       switch (e.keyCode) {
+                               case 13:
+                                       // case 9:
+                                       onChange();
+                                       break;
+
+                               case 27:
+                                       cancel();
+                                       break;
+                       }
+               });
+
+               return input;
+       },
+
+       //select
+       select: function select(cell, onRendered, success, cancel, editorParams) {
+               var _this = this;
+
+               var self = this,
+                   cellEl = cell.getElement(),
+                   initialValue = cell.getValue(),
+                   vertNav = editorParams.verticalNavigation || "editor",
+                   initialDisplayValue = typeof initialValue !== "undefined" || initialValue === null ? Array.isArray(initialValue) ? initialValue : [initialValue] : typeof editorParams.defaultValue !== "undefined" ? editorParams.defaultValue : [],
+                   input = document.createElement("input"),
+                   listEl = document.createElement("div"),
+                   multiselect = editorParams.multiselect,
+                   dataItems = [],
+                   currentItem = {},
+                   displayItems = [],
+                   currentItems = [],
+                   blurable = true,
+                   blockListShow = false;
+
+               if (Array.isArray(editorParams) || !Array.isArray(editorParams) && (typeof editorParams === "undefined" ? "undefined" : _typeof(editorParams)) === "object" && !editorParams.values) {
+                       console.warn("DEPRECATION WARNING - values for the select editor must now be passed into the values property of the editorParams object, not as the editorParams object");
+                       editorParams = { values: editorParams };
+               }
+
+               function getUniqueColumnValues(field) {
+                       var output = {},
+                           data = self.table.getData(),
+                           column;
+
+                       if (field) {
+                               column = self.table.columnManager.getColumnByField(field);
+                       } else {
+                               column = cell.getColumn()._getSelf();
+                       }
+
+                       if (column) {
+                               data.forEach(function (row) {
+                                       var val = column.getFieldValue(row);
+
+                                       if (val !== null && typeof val !== "undefined" && val !== "") {
+                                               output[val] = true;
+                                       }
+                               });
+
+                               if (editorParams.sortValuesList) {
+                                       if (editorParams.sortValuesList == "asc") {
+                                               output = Object.keys(output).sort();
+                                       } else {
+                                               output = Object.keys(output).sort().reverse();
+                                       }
+                               } else {
+                                       output = Object.keys(output);
+                               }
+                       } else {
+                               console.warn("unable to find matching column to create select lookup list:", field);
+                       }
+
+                       return output;
+               }
+
+               function parseItems(inputValues, curentValues) {
+                       var dataList = [];
+                       var displayList = [];
+
+                       function processComplexListItem(item) {
+                               var item = {
+                                       label: item.label,
+                                       value: item.value,
+                                       itemParams: item.itemParams,
+                                       elementAttributes: item.elementAttributes,
+                                       element: false
+                               };
+
+                               // if(item.value === curentValue || (!isNaN(parseFloat(item.value)) && !isNaN(parseFloat(item.value)) && parseFloat(item.value) === parseFloat(curentValue))){
+                               //      setCurrentItem(item);
+                               // }
+
+                               if (curentValues.indexOf(item.value) > -1) {
+                                       setItem(item);
+                               }
+
+                               dataList.push(item);
+                               displayList.push(item);
+
+                               return item;
+                       }
+
+                       if (typeof inputValues == "function") {
+                               inputValues = inputValues(cell);
+                       }
+
+                       if (Array.isArray(inputValues)) {
+                               inputValues.forEach(function (value) {
+                                       var item;
+
+                                       if ((typeof value === "undefined" ? "undefined" : _typeof(value)) === "object") {
+
+                                               if (value.options) {
+                                                       item = {
+                                                               label: value.label,
+                                                               group: true,
+                                                               itemParams: value.itemParams,
+                                                               elementAttributes: value.elementAttributes,
+                                                               element: false
+                                                       };
+
+                                                       displayList.push(item);
+
+                                                       value.options.forEach(function (item) {
+                                                               processComplexListItem(item);
+                                                       });
+                                               } else {
+                                                       processComplexListItem(value);
+                                               }
+                                       } else {
+
+                                               item = {
+                                                       label: value,
+                                                       value: value,
+                                                       element: false
+                                               };
+
+                                               // if(item.value === curentValue || (!isNaN(parseFloat(item.value)) && !isNaN(parseFloat(item.value)) && parseFloat(item.value) === parseFloat(curentValue))){
+                                               //      setCurrentItem(item);
+                                               // }
+
+                                               if (curentValues.indexOf(item.value) > -1) {
+                                                       setItem(item);
+                                               }
+
+                                               dataList.push(item);
+                                               displayList.push(item);
+                                       }
+                               });
+                       } else {
+                               for (var key in inputValues) {
+                                       var item = {
+                                               label: inputValues[key],
+                                               value: key,
+                                               element: false
+                                       };
+
+                                       // if(item.value === curentValue || (!isNaN(parseFloat(item.value)) && !isNaN(parseFloat(item.value)) && parseFloat(item.value) === parseFloat(curentValue))){
+                                       //      setCurrentItem(item);
+                                       // }
+
+                                       if (curentValues.indexOf(item.value) > -1) {
+                                               setItem(item);
+                                       }
+
+                                       dataList.push(item);
+                                       displayList.push(item);
+                               }
+                       }
+
+                       dataItems = dataList;
+                       displayItems = displayList;
+
+                       fillList();
+               }
+
+               function fillList() {
+                       while (listEl.firstChild) {
+                               listEl.removeChild(listEl.firstChild);
+                       }displayItems.forEach(function (item) {
+
+                               var el = item.element;
+
+                               if (!el) {
+                                       el = document.createElement("div");
+                                       item.label = editorParams.listItemFormatter ? editorParams.listItemFormatter(item.value, item.label, cell, el, item.itemParams) : item.label;
+                                       if (item.group) {
+                                               el.classList.add("tabulator-edit-select-list-group");
+                                               el.tabIndex = 0;
+                                               el.innerHTML = item.label === "" ? "&nbsp;" : item.label;
+                                       } else {
+                                               el.classList.add("tabulator-edit-select-list-item");
+                                               el.tabIndex = 0;
+                                               el.innerHTML = item.label === "" ? "&nbsp;" : item.label;
+
+                                               el.addEventListener("click", function () {
+                                                       blockListShow = true;
+
+                                                       setTimeout(function () {
+                                                               blockListShow = false;
+                                                       }, 10);
+
+                                                       // setCurrentItem(item);
+                                                       // chooseItem();
+                                                       if (multiselect) {
+                                                               toggleItem(item);
+                                                               input.focus();
+                                                       } else {
+                                                               chooseItem(item);
+                                                       }
+                                               });
+
+                                               // if(item === currentItem){
+                                               //      el.classList.add("active");
+                                               // }
+
+                                               if (currentItems.indexOf(item) > -1) {
+                                                       el.classList.add("active");
+                                               }
+                                       }
+
+                                       if (item.elementAttributes && _typeof(item.elementAttributes) == "object") {
+                                               for (var key in item.elementAttributes) {
+                                                       if (key.charAt(0) == "+") {
+                                                               key = key.slice(1);
+                                                               el.setAttribute(key, input.getAttribute(key) + item.elementAttributes["+" + key]);
+                                                       } else {
+                                                               el.setAttribute(key, item.elementAttributes[key]);
+                                                       }
+                                               }
+                                       }
+                                       el.addEventListener("mousedown", function () {
+                                               blurable = false;
+
+                                               setTimeout(function () {
+                                                       blurable = true;
+                                               }, 10);
+                                       });
+
+                                       item.element = el;
+                               }
+
+                               listEl.appendChild(el);
+                       });
+               }
+
+               function setCurrentItem(item, active) {
+
+                       if (!multiselect && currentItem && currentItem.element) {
+                               currentItem.element.classList.remove("active");
+                       }
+
+                       if (currentItem && currentItem.element) {
+                               currentItem.element.classList.remove("focused");
+                       }
+
+                       currentItem = item;
+
+                       if (item.element) {
+                               item.element.classList.add("focused");
+                               if (active) {
+                                       item.element.classList.add("active");
+                               }
+                       }
+
+                       if (item && item.element && item.element.scrollIntoView) {
+                               item.element.scrollIntoView({ behavior: 'smooth', block: 'nearest', inline: 'start' });
+                       }
+               }
+
+               // function chooseItem(){
+               //      hideList();
+
+               //      if(initialValue !== currentItem.value){
+               //              initialValue = currentItem.value;
+               //              success(currentItem.value);
+               //      }else{
+               //              cancel();
+               //      }
+               // }
+
+               function setItem(item) {
+                       var index = currentItems.indexOf(item);
+
+                       if (index == -1) {
+                               currentItems.push(item);
+                               setCurrentItem(item, true);
+                       }
+
+                       fillInput();
+               }
+
+               function unsetItem(index) {
+                       var item = currentItems[index];
+
+                       if (index > -1) {
+                               currentItems.splice(index, 1);
+                               if (item.element) {
+                                       item.element.classList.remove("active");
+                               }
+                       }
+               }
+
+               function toggleItem(item) {
+                       if (!item) {
+                               item = currentItem;
+                       }
+
+                       var index = currentItems.indexOf(item);
+
+                       if (index > -1) {
+                               unsetItem(index);
+                       } else {
+                               if (multiselect !== true && currentItems.length >= multiselect) {
+                                       unsetItem(0);
+                               }
+
+                               setItem(item);
+                       }
+
+                       fillInput();
+               }
+
+               function chooseItem(item) {
+                       hideList();
+
+                       if (!item) {
+                               item = currentItem;
+                       }
+
+                       if (item) {
+                               input.value = item.label;
+                               success(item.value);
+                       }
+
+                       initialDisplayValue = input.value;
+               }
+
+               function chooseItems(silent) {
+                       if (!silent) {
+                               hideList();
+                       }
+
+                       var output = [];
+
+                       currentItems.forEach(function (item) {
+                               output.push(item.value);
+                       });
+
+                       initialDisplayValue = input.value;
+
+                       success(output);
+               }
+
+               function fillInput() {
+                       var output = [];
+
+                       currentItems.forEach(function (item) {
+                               output.push(item.label);
+                       });
+
+                       input.value = output.join(", ");
+
+                       if (self.currentCell === false) {
+                               chooseItems(true);
+                       }
+               }
+
+               function unsetItems() {
+
+                       var len = currentItems.length;
+
+                       for (var i = 0; i < len; i++) {
+                               unsetItem(0);
+                       }
+               }
+
+               function cancelItem() {
+                       hideList();
+                       cancel();
+               }
+
+               function showList() {
+                       currentItems = [];
+
+                       if (!listEl.parentNode) {
+                               if (editorParams.values === true) {
+                                       parseItems(getUniqueColumnValues(), initialDisplayValue);
+                               } else if (typeof editorParams.values === "string") {
+                                       parseItems(getUniqueColumnValues(editorParams.values), initialDisplayValue);
+                               } else {
+                                       parseItems(editorParams.values || [], initialDisplayValue);
+                               }
+
+                               var offset = Tabulator.prototype.helpers.elOffset(cellEl);
+
+                               listEl.style.minWidth = cellEl.offsetWidth + "px";
+
+                               listEl.style.top = offset.top + cellEl.offsetHeight + "px";
+                               listEl.style.left = offset.left + "px";
+
+                               listEl.addEventListener("mousedown", function (e) {
+                                       blurable = false;
+
+                                       setTimeout(function () {
+                                               blurable = true;
+                                       }, 10);
+                               });
+
+                               document.body.appendChild(listEl);
+                       }
+               }
+
+               function hideList() {
+                       if (listEl.parentNode) {
+                               listEl.parentNode.removeChild(listEl);
+                       }
+
+                       removeScrollListener();
+               }
+
+               function removeScrollListener() {
+                       self.table.rowManager.element.removeEventListener("scroll", cancelItem);
+               }
+
+               //style input
+               input.setAttribute("type", "text");
+
+               input.style.padding = "4px";
+               input.style.width = "100%";
+               input.style.boxSizing = "border-box";
+               input.style.cursor = "default";
+               input.readOnly = this.currentCell != false;
+
+               if (editorParams.elementAttributes && _typeof(editorParams.elementAttributes) == "object") {
+                       for (var key in editorParams.elementAttributes) {
+                               if (key.charAt(0) == "+") {
+                                       key = key.slice(1);
+                                       input.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes["+" + key]);
+                               } else {
+                                       input.setAttribute(key, editorParams.elementAttributes[key]);
+                               }
+                       }
+               }
+
+               input.value = typeof initialValue !== "undefined" || initialValue === null ? initialValue : "";
+
+               // if(editorParams.values === true){
+               //      parseItems(getUniqueColumnValues(), initialValue);
+               // }else if(typeof editorParams.values === "string"){
+               //      parseItems(getUniqueColumnValues(editorParams.values), initialValue);
+               // }else{
+               //      parseItems(editorParams.values || [], initialValue);
+               // }
+
+               input.addEventListener("search", function (e) {
+                       if (!input.value) {
+                               unsetItems();
+                               chooseItems();
+                       }
+               });
+
+               //allow key based navigation
+               input.addEventListener("keydown", function (e) {
+                       var index;
+
+                       switch (e.keyCode) {
+                               case 38:
+                                       //up arrow
+                                       index = dataItems.indexOf(currentItem);
+
+                                       if (vertNav == "editor" || vertNav == "hybrid" && index) {
+                                               e.stopImmediatePropagation();
+                                               e.stopPropagation();
+                                               e.preventDefault();
+
+                                               if (index > 0) {
+                                                       setCurrentItem(dataItems[index - 1], !multiselect);
+                                               }
+                                       }
+                                       break;
+
+                               case 40:
+                                       //down arrow
+                                       index = dataItems.indexOf(currentItem);
+
+                                       if (vertNav == "editor" || vertNav == "hybrid" && index < dataItems.length - 1) {
+                                               e.stopImmediatePropagation();
+                                               e.stopPropagation();
+                                               e.preventDefault();
+
+                                               if (index < dataItems.length - 1) {
+                                                       if (index == -1) {
+                                                               setCurrentItem(dataItems[0], !multiselect);
+                                                       } else {
+                                                               setCurrentItem(dataItems[index + 1], !multiselect);
+                                                       }
+                                               }
+                                       }
+                                       break;
+
+                               case 37: //left arrow
+                               case 39:
+                                       //right arrow
+                                       e.stopImmediatePropagation();
+                                       e.stopPropagation();
+                                       e.preventDefault();
+                                       break;
+
+                               case 13:
+                                       //enter
+                                       // chooseItem();
+
+                                       if (multiselect) {
+                                               toggleItem();
+                                       } else {
+                                               chooseItem();
+                                       }
+
+                                       break;
+
+                               case 27:
+                                       //escape
+                                       cancelItem();
+                                       break;
+
+                               case 9:
+                                       //tab
+                                       break;
+
+                               default:
+                                       if (self.currentCell === false) {
+                                               e.preventDefault();
+                                       }
+                       }
+               });
+
+               input.addEventListener("blur", function (e) {
+                       if (blurable) {
+                               if (multiselect) {
+                                       chooseItems();
+                               } else {
+                                       cancelItem();
+                               }
+                       }
+               });
+
+               input.addEventListener("focus", function (e) {
+                       if (!blockListShow) {
+                               showList();
+                       }
+               });
+
+               //style list element
+               listEl = document.createElement("div");
+               listEl.classList.add("tabulator-edit-select-list");
+
+               onRendered(function () {
+                       input.style.height = "100%";
+                       input.focus({ preventScroll: true });
+               });
+
+               setTimeout(function () {
+                       _this.table.rowManager.element.addEventListener("scroll", cancelItem);
+               }, 10);
+
+               return input;
+       },
+
+       //autocomplete
+       autocomplete: function autocomplete(cell, onRendered, success, cancel, editorParams) {
+               var _this2 = this;
+
+               var self = this,
+                   cellEl = cell.getElement(),
+                   initialValue = cell.getValue(),
+                   vertNav = editorParams.verticalNavigation || "editor",
+                   initialDisplayValue = typeof initialValue !== "undefined" || initialValue === null ? initialValue : typeof editorParams.defaultValue !== "undefined" ? editorParams.defaultValue : "",
+                   input = document.createElement("input"),
+                   listEl = document.createElement("div"),
+                   allItems = [],
+                   displayItems = [],
+                   values = [],
+                   currentItem = false,
+                   blurable = true,
+                   uniqueColumnValues = false;
+
+               //style input
+               input.setAttribute("type", "search");
+
+               input.style.padding = "4px";
+               input.style.width = "100%";
+               input.style.boxSizing = "border-box";
+
+               if (editorParams.elementAttributes && _typeof(editorParams.elementAttributes) == "object") {
+                       for (var key in editorParams.elementAttributes) {
+                               if (key.charAt(0) == "+") {
+                                       key = key.slice(1);
+                                       input.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes["+" + key]);
+                               } else {
+                                       input.setAttribute(key, editorParams.elementAttributes[key]);
+                               }
+                       }
+               }
+
+               //style list element
+               listEl.classList.add("tabulator-edit-select-list");
+
+               listEl.addEventListener("mousedown", function (e) {
+                       blurable = false;
+
+                       setTimeout(function () {
+                               blurable = true;
+                       }, 10);
+               });
+
+               function genUniqueColumnValues() {
+                       if (editorParams.values === true) {
+                               uniqueColumnValues = getUniqueColumnValues();
+                       } else if (typeof editorParams.values === "string") {
+                               uniqueColumnValues = getUniqueColumnValues(editorParams.values);
+                       }
+               }
+
+               function getUniqueColumnValues(field) {
+                       var output = {},
+                           data = self.table.getData(),
+                           column;
+
+                       if (field) {
+                               column = self.table.columnManager.getColumnByField(field);
+                       } else {
+                               column = cell.getColumn()._getSelf();
+                       }
+
+                       if (column) {
+                               data.forEach(function (row) {
+                                       var val = column.getFieldValue(row);
+
+                                       if (val !== null && typeof val !== "undefined" && val !== "") {
+                                               output[val] = true;
+                                       }
+                               });
+
+                               if (editorParams.sortValuesList) {
+                                       if (editorParams.sortValuesList == "asc") {
+                                               output = Object.keys(output).sort();
+                                       } else {
+                                               output = Object.keys(output).sort().reverse();
+                                       }
+                               } else {
+                                       output = Object.keys(output);
+                               }
+                       } else {
+                               console.warn("unable to find matching column to create autocomplete lookup list:", field);
+                       }
+
+                       return output;
+               }
+
+               function filterList(term, intialLoad) {
+                       var matches = [],
+                           values,
+                           items,
+                           searchEl;
+
+                       //lookup base values list
+                       if (uniqueColumnValues) {
+                               values = uniqueColumnValues;
+                       } else {
+                               values = editorParams.values || [];
+                       }
+
+                       if (editorParams.searchFunc) {
+                               matches = editorParams.searchFunc(term, values);
+
+                               if (matches instanceof Promise) {
+
+                                       addNotice(typeof editorParams.searchingPlaceholder !== "undefined" ? editorParams.searchingPlaceholder : "Searching...");
+
+                                       matches.then(function (result) {
+                                               fillListIfNotEmpty(parseItems(result), intialLoad);
+                                       }).catch(function (err) {
+                                               console.err("error in autocomplete search promise:", err);
+                                       });
+                               } else {
+                                       fillListIfNotEmpty(parseItems(matches), intialLoad);
+                               }
+                       } else {
+                               items = parseItems(values);
+
+                               if (term === "") {
+                                       if (editorParams.showListOnEmpty) {
+                                               matches = items;
+                                       }
+                               } else {
+                                       items.forEach(function (item) {
+                                               if (item.value !== null || typeof item.value !== "undefined") {
+                                                       if (String(item.value).toLowerCase().indexOf(String(term).toLowerCase()) > -1 || String(item.title).toLowerCase().indexOf(String(term).toLowerCase()) > -1) {
+                                                               matches.push(item);
+                                                       }
+                                               }
+                                       });
+                               }
+
+                               fillListIfNotEmpty(matches, intialLoad);
+                       }
+               }
+
+               function addNotice(notice) {
+                       var searchEl = document.createElement("div");
+
+                       clearList();
+
+                       if (notice !== false) {
+                               searchEl.classList.add("tabulator-edit-select-list-notice");
+                               searchEl.tabIndex = 0;
+
+                               if (notice instanceof Node) {
+                                       searchEl.appendChild(notice);
+                               } else {
+                                       searchEl.innerHTML = notice;
+                               }
+
+                               listEl.appendChild(searchEl);
+                       }
+               }
+
+               function parseItems(inputValues) {
+                       var itemList = [];
+
+                       if (Array.isArray(inputValues)) {
+                               inputValues.forEach(function (value) {
+
+                                       var item = {};
+
+                                       if ((typeof value === "undefined" ? "undefined" : _typeof(value)) === "object") {
+                                               item.title = editorParams.listItemFormatter ? editorParams.listItemFormatter(value.value, value.label) : value.label;
+                                               item.value = value.value;
+                                       } else {
+                                               item.title = editorParams.listItemFormatter ? editorParams.listItemFormatter(value, value) : value;
+                                               item.value = value;
+                                       }
+
+                                       itemList.push(item);
+                               });
+                       } else {
+                               for (var key in inputValues) {
+                                       var item = {
+                                               title: editorParams.listItemFormatter ? editorParams.listItemFormatter(key, inputValues[key]) : inputValues[key],
+                                               value: key
+                                       };
+
+                                       itemList.push(item);
+                               }
+                       }
+
+                       return itemList;
+               }
+
+               function clearList() {
+                       while (listEl.firstChild) {
+                               listEl.removeChild(listEl.firstChild);
+                       }
+               }
+
+               function fillListIfNotEmpty(items, intialLoad) {
+                       if (items.length) {
+                               fillList(items, intialLoad);
+                       } else {
+                               if (editorParams.emptyPlaceholder) {
+                                       addNotice(editorParams.emptyPlaceholder);
+                               }
+                       }
+               }
+
+               function fillList(items, intialLoad) {
+                       var current = false;
+
+                       clearList();
+
+                       displayItems = items;
+
+                       displayItems.forEach(function (item) {
+                               var el = item.element;
+
+                               if (!el) {
+                                       el = document.createElement("div");
+                                       el.classList.add("tabulator-edit-select-list-item");
+                                       el.tabIndex = 0;
+                                       el.innerHTML = item.title;
+
+                                       el.addEventListener("click", function (e) {
+                                               setCurrentItem(item);
+                                               chooseItem();
+                                       });
+
+                                       el.addEventListener("mousedown", function (e) {
+                                               blurable = false;
+
+                                               setTimeout(function () {
+                                                       blurable = true;
+                                               }, 10);
+                                       });
+
+                                       item.element = el;
+
+                                       if (intialLoad && item.value == initialValue) {
+                                               input.value = item.title;
+                                               item.element.classList.add("active");
+                                               current = true;
+                                       }
+
+                                       if (item === currentItem) {
+                                               item.element.classList.add("active");
+                                               current = true;
+                                       }
+                               }
+
+                               listEl.appendChild(el);
+                       });
+
+                       if (!current) {
+                               setCurrentItem(false);
+                       }
+               }
+
+               function chooseItem() {
+                       hideList();
+
+                       if (currentItem) {
+                               if (initialValue !== currentItem.value) {
+                                       initialValue = currentItem.value;
+                                       input.value = currentItem.title;
+                                       success(currentItem.value);
+                               } else {
+                                       cancel();
+                               }
+                       } else {
+                               if (editorParams.freetext) {
+                                       initialValue = input.value;
+                                       success(input.value);
+                               } else {
+                                       if (editorParams.allowEmpty && input.value === "") {
+                                               initialValue = input.value;
+                                               success(input.value);
+                                       } else {
+                                               cancel();
+                                       }
+                               }
+                       }
+               }
+
+               function showList() {
+                       if (!listEl.parentNode) {
+                               while (listEl.firstChild) {
+                                       listEl.removeChild(listEl.firstChild);
+                               }var offset = Tabulator.prototype.helpers.elOffset(cellEl);
+
+                               listEl.style.minWidth = cellEl.offsetWidth + "px";
+
+                               listEl.style.top = offset.top + cellEl.offsetHeight + "px";
+                               listEl.style.left = offset.left + "px";
+                               document.body.appendChild(listEl);
+                       }
+               }
+
+               function setCurrentItem(item, showInputValue) {
+                       if (currentItem && currentItem.element) {
+                               currentItem.element.classList.remove("active");
+                       }
+
+                       currentItem = item;
+
+                       if (item && item.element) {
+                               item.element.classList.add("active");
+                       }
+
+                       if (item && item.element && item.element.scrollIntoView) {
+                               item.element.scrollIntoView({ behavior: 'smooth', block: 'nearest', inline: 'start' });
+                       }
+               }
+
+               function hideList() {
+                       if (listEl.parentNode) {
+                               listEl.parentNode.removeChild(listEl);
+                       }
+
+                       removeScrollListener();
+               }
+
+               function cancelItem() {
+                       hideList();
+                       cancel();
+               }
+
+               function removeScrollListener() {
+                       self.table.rowManager.element.removeEventListener("scroll", cancelItem);
+               }
+
+               //allow key based navigation
+               input.addEventListener("keydown", function (e) {
+                       var index;
+
+                       switch (e.keyCode) {
+                               case 38:
+                                       //up arrow
+                                       index = displayItems.indexOf(currentItem);
+
+                                       if (vertNav == "editor" || vertNav == "hybrid" && index) {
+                                               e.stopImmediatePropagation();
+                                               e.stopPropagation();
+                                               e.preventDefault();
+
+                                               if (index > 0) {
+                                                       setCurrentItem(displayItems[index - 1]);
+                                               } else {
+                                                       setCurrentItem(false);
+                                               }
+                                       }
+                                       break;
+
+                               case 40:
+                                       //down arrow
+
+                                       index = displayItems.indexOf(currentItem);
+
+                                       if (vertNav == "editor" || vertNav == "hybrid" && index < displayItems.length - 1) {
+
+                                               e.stopImmediatePropagation();
+                                               e.stopPropagation();
+                                               e.preventDefault();
+
+                                               if (index < displayItems.length - 1) {
+                                                       if (index == -1) {
+                                                               setCurrentItem(displayItems[0]);
+                                                       } else {
+                                                               setCurrentItem(displayItems[index + 1]);
+                                                       }
+                                               }
+                                       }
+                                       break;
+
+                               case 37: //left arrow
+                               case 39:
+                                       //right arrow
+                                       e.stopImmediatePropagation();
+                                       e.stopPropagation();
+                                       // e.preventDefault();
+                                       break;
+
+                               case 13:
+                                       //enter
+                                       chooseItem();
+                                       break;
+
+                               case 27:
+                                       //escape
+                                       cancelItem();
+                                       break;
+
+                               case 36: //home
+                               case 35:
+                                       //end
+                                       //prevent table navigation while using input element
+                                       e.stopImmediatePropagation();
+                                       break;
+                       }
+               });
+
+               input.addEventListener("keyup", function (e) {
+
+                       switch (e.keyCode) {
+                               case 38: //up arrow
+                               case 37: //left arrow
+                               case 39: //up arrow
+                               case 40: //right arrow
+                               case 13: //enter
+                               case 27:
+                                       //escape
+                                       break;
+
+                               default:
+                                       filterList(input.value);
+                       }
+               });
+
+               input.addEventListener("search", function (e) {
+                       filterList(input.value);
+               });
+
+               input.addEventListener("blur", function (e) {
+                       if (blurable) {
+                               chooseItem();
+                       }
+               });
+
+               input.addEventListener("focus", function (e) {
+                       var value = initialDisplayValue;
+                       genUniqueColumnValues();
+                       showList();
+                       input.value = value;
+                       filterList(value, true);
+               });
+
+               onRendered(function () {
+                       input.style.height = "100%";
+                       input.focus({ preventScroll: true });
+               });
+
+               if (editorParams.mask) {
+                       this.table.modules.edit.maskInput(input, editorParams);
+               }
+
+               setTimeout(function () {
+                       _this2.table.rowManager.element.addEventListener("scroll", cancelItem);
+               }, 10);
+
+               genUniqueColumnValues();
+               input.value = initialDisplayValue;
+               filterList(initialDisplayValue, true);
+
+               return input;
+       },
+
+       //star rating
+       star: function star(cell, onRendered, success, cancel, editorParams) {
+               var self = this,
+                   element = cell.getElement(),
+                   value = cell.getValue(),
+                   maxStars = element.getElementsByTagName("svg").length || 5,
+                   size = element.getElementsByTagName("svg")[0] ? element.getElementsByTagName("svg")[0].getAttribute("width") : 14,
+                   stars = [],
+                   starsHolder = document.createElement("div"),
+                   star = document.createElementNS('http://www.w3.org/2000/svg', "svg");
+
+               //change star type
+               function starChange(val) {
+                       stars.forEach(function (star, i) {
+                               if (i < val) {
+                                       if (self.table.browser == "ie") {
+                                               star.setAttribute("class", "tabulator-star-active");
+                                       } else {
+                                               star.classList.replace("tabulator-star-inactive", "tabulator-star-active");
+                                       }
+
+                                       star.innerHTML = '<polygon fill="#488CE9" stroke="#014AAE" stroke-width="37.6152" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" points="259.216,29.942 330.27,173.919 489.16,197.007 374.185,309.08 401.33,467.31 259.216,392.612 117.104,467.31 144.25,309.08 29.274,197.007 188.165,173.919 "/>';
+                               } else {
+                                       if (self.table.browser == "ie") {
+                                               star.setAttribute("class", "tabulator-star-inactive");
+                                       } else {
+                                               star.classList.replace("tabulator-star-active", "tabulator-star-inactive");
+                                       }
+
+                                       star.innerHTML = '<polygon fill="#010155" stroke="#686868" stroke-width="37.6152" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" points="259.216,29.942 330.27,173.919 489.16,197.007 374.185,309.08 401.33,467.31 259.216,392.612 117.104,467.31 144.25,309.08 29.274,197.007 188.165,173.919 "/>';
+                               }
+                       });
+               }
+
+               //build stars
+               function buildStar(i) {
+
+                       var starHolder = document.createElement("span");
+                       var nextStar = star.cloneNode(true);
+
+                       stars.push(nextStar);
+
+                       starHolder.addEventListener("mouseenter", function (e) {
+                               e.stopPropagation();
+                               e.stopImmediatePropagation();
+                               starChange(i);
+                       });
+
+                       starHolder.addEventListener("mousemove", function (e) {
+                               e.stopPropagation();
+                               e.stopImmediatePropagation();
+                       });
+
+                       starHolder.addEventListener("click", function (e) {
+                               e.stopPropagation();
+                               e.stopImmediatePropagation();
+                               success(i);
+                               element.blur();
+                       });
+
+                       starHolder.appendChild(nextStar);
+                       starsHolder.appendChild(starHolder);
+               }
+
+               //handle keyboard navigation value change
+               function changeValue(val) {
+                       value = val;
+                       starChange(val);
+               }
+
+               //style cell
+               element.style.whiteSpace = "nowrap";
+               element.style.overflow = "hidden";
+               element.style.textOverflow = "ellipsis";
+
+               //style holding element
+               starsHolder.style.verticalAlign = "middle";
+               starsHolder.style.display = "inline-block";
+               starsHolder.style.padding = "4px";
+
+               //style star
+               star.setAttribute("width", size);
+               star.setAttribute("height", size);
+               star.setAttribute("viewBox", "0 0 512 512");
+               star.setAttribute("xml:space", "preserve");
+               star.style.padding = "0 1px";
+
+               if (editorParams.elementAttributes && _typeof(editorParams.elementAttributes) == "object") {
+                       for (var key in editorParams.elementAttributes) {
+                               if (key.charAt(0) == "+") {
+                                       key = key.slice(1);
+                                       starsHolder.setAttribute(key, starsHolder.getAttribute(key) + editorParams.elementAttributes["+" + key]);
+                               } else {
+                                       starsHolder.setAttribute(key, editorParams.elementAttributes[key]);
+                               }
+                       }
+               }
+
+               //create correct number of stars
+               for (var i = 1; i <= maxStars; i++) {
+                       buildStar(i);
+               }
+
+               //ensure value does not exceed number of stars
+               value = Math.min(parseInt(value), maxStars);
+
+               // set initial styling of stars
+               starChange(value);
+
+               starsHolder.addEventListener("mousemove", function (e) {
+                       starChange(0);
+               });
+
+               starsHolder.addEventListener("click", function (e) {
+                       success(0);
+               });
+
+               element.addEventListener("blur", function (e) {
+                       cancel();
+               });
+
+               //allow key based navigation
+               element.addEventListener("keydown", function (e) {
+                       switch (e.keyCode) {
+                               case 39:
+                                       //right arrow
+                                       changeValue(value + 1);
+                                       break;
+
+                               case 37:
+                                       //left arrow
+                                       changeValue(value - 1);
+                                       break;
+
+                               case 13:
+                                       //enter
+                                       success(value);
+                                       break;
+
+                               case 27:
+                                       //escape
+                                       cancel();
+                                       break;
+                       }
+               });
+
+               return starsHolder;
+       },
+
+       //draggable progress bar
+       progress: function progress(cell, onRendered, success, cancel, editorParams) {
+               var element = cell.getElement(),
+                   max = typeof editorParams.max === "undefined" ? element.getElementsByTagName("div")[0].getAttribute("max") || 100 : editorParams.max,
+                   min = typeof editorParams.min === "undefined" ? element.getElementsByTagName("div")[0].getAttribute("min") || 0 : editorParams.min,
+                   percent = (max - min) / 100,
+                   value = cell.getValue() || 0,
+                   handle = document.createElement("div"),
+                   bar = document.createElement("div"),
+                   mouseDrag,
+                   mouseDragWidth;
+
+               //set new value
+               function updateValue() {
+                       var calcVal = percent * Math.round(bar.offsetWidth / (element.clientWidth / 100)) + min;
+                       success(calcVal);
+                       element.setAttribute("aria-valuenow", calcVal);
+                       element.setAttribute("aria-label", value);
+               }
+
+               //style handle
+               handle.style.position = "absolute";
+               handle.style.right = "0";
+               handle.style.top = "0";
+               handle.style.bottom = "0";
+               handle.style.width = "5px";
+               handle.classList.add("tabulator-progress-handle");
+
+               //style bar
+               bar.style.display = "inline-block";
+               bar.style.position = "relative";
+               // bar.style.top = "8px";
+               // bar.style.bottom = "8px";
+               // bar.style.left = "4px";
+               // bar.style.marginRight = "4px";
+               bar.style.height = "100%";
+               bar.style.backgroundColor = "#488CE9";
+               bar.style.maxWidth = "100%";
+               bar.style.minWidth = "0%";
+
+               if (editorParams.elementAttributes && _typeof(editorParams.elementAttributes) == "object") {
+                       for (var key in editorParams.elementAttributes) {
+                               if (key.charAt(0) == "+") {
+                                       key = key.slice(1);
+                                       bar.setAttribute(key, bar.getAttribute(key) + editorParams.elementAttributes["+" + key]);
+                               } else {
+                                       bar.setAttribute(key, editorParams.elementAttributes[key]);
+                               }
+                       }
+               }
+
+               //style cell
+               element.style.padding = "4px 4px";
+
+               //make sure value is in range
+               value = Math.min(parseFloat(value), max);
+               value = Math.max(parseFloat(value), min);
+
+               //workout percentage
+               value = Math.round((value - min) / percent);
+               // bar.style.right = value + "%";
+               bar.style.width = value + "%";
+
+               element.setAttribute("aria-valuemin", min);
+               element.setAttribute("aria-valuemax", max);
+
+               bar.appendChild(handle);
+
+               handle.addEventListener("mousedown", function (e) {
+                       mouseDrag = e.screenX;
+                       mouseDragWidth = bar.offsetWidth;
+               });
+
+               handle.addEventListener("mouseover", function () {
+                       handle.style.cursor = "ew-resize";
+               });
+
+               element.addEventListener("mousemove", function (e) {
+                       if (mouseDrag) {
+                               bar.style.width = mouseDragWidth + e.screenX - mouseDrag + "px";
+                       }
+               });
+
+               element.addEventListener("mouseup", function (e) {
+                       if (mouseDrag) {
+                               e.stopPropagation();
+                               e.stopImmediatePropagation();
+
+                               mouseDrag = false;
+                               mouseDragWidth = false;
+
+                               updateValue();
+                       }
+               });
+
+               //allow key based navigation
+               element.addEventListener("keydown", function (e) {
+                       switch (e.keyCode) {
+                               case 39:
+                                       //right arrow
+                                       e.preventDefault();
+                                       bar.style.width = bar.clientWidth + element.clientWidth / 100 + "px";
+                                       break;
+
+                               case 37:
+                                       //left arrow
+                                       e.preventDefault();
+                                       bar.style.width = bar.clientWidth - element.clientWidth / 100 + "px";
+                                       break;
+
+                               case 9: //tab
+                               case 13:
+                                       //enter
+                                       updateValue();
+                                       break;
+
+                               case 27:
+                                       //escape
+                                       cancel();
+                                       break;
+
+                       }
+               });
+
+               element.addEventListener("blur", function () {
+                       cancel();
+               });
+
+               return bar;
+       },
+
+       //checkbox
+       tickCross: function tickCross(cell, onRendered, success, cancel, editorParams) {
+               var value = cell.getValue(),
+                   input = document.createElement("input"),
+                   tristate = editorParams.tristate,
+                   indetermValue = typeof editorParams.indeterminateValue === "undefined" ? null : editorParams.indeterminateValue,
+                   indetermState = false;
+
+               input.setAttribute("type", "checkbox");
+               input.style.marginTop = "5px";
+               input.style.boxSizing = "border-box";
+
+               if (editorParams.elementAttributes && _typeof(editorParams.elementAttributes) == "object") {
+                       for (var key in editorParams.elementAttributes) {
+                               if (key.charAt(0) == "+") {
+                                       key = key.slice(1);
+                                       input.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes["+" + key]);
+                               } else {
+                                       input.setAttribute(key, editorParams.elementAttributes[key]);
+                               }
+                       }
+               }
+
+               input.value = value;
+
+               if (tristate && (typeof value === "undefined" || value === indetermValue || value === "")) {
+                       indetermState = true;
+                       input.indeterminate = true;
+               }
+
+               if (this.table.browser != "firefox") {
+                       //prevent blur issue on mac firefox
+                       onRendered(function () {
+                               input.focus({ preventScroll: true });
+                       });
+               }
+
+               input.checked = value === true || value === "true" || value === "True" || value === 1;
+
+               onRendered(function () {
+                       input.focus();
+               });
+
+               function setValue(blur) {
+                       if (tristate) {
+                               if (!blur) {
+                                       if (input.checked && !indetermState) {
+                                               input.checked = false;
+                                               input.indeterminate = true;
+                                               indetermState = true;
+                                               return indetermValue;
+                                       } else {
+                                               indetermState = false;
+                                               return input.checked;
+                                       }
+                               } else {
+                                       if (indetermState) {
+                                               return indetermValue;
+                                       } else {
+                                               return input.checked;
+                                       }
+                               }
+                       } else {
+                               return input.checked;
+                       }
+               }
+
+               //submit new value on blur
+               input.addEventListener("change", function (e) {
+                       success(setValue());
+               });
+
+               input.addEventListener("blur", function (e) {
+                       success(setValue(true));
+               });
+
+               //submit new value on enter
+               input.addEventListener("keydown", function (e) {
+                       if (e.keyCode == 13) {
+                               success(setValue());
+                       }
+                       if (e.keyCode == 27) {
+                               cancel();
+                       }
+               });
+
+               return input;
+       }
+};
+
+Tabulator.prototype.registerModule("edit", Edit);
\ No newline at end of file
diff --git a/website/js/vendor/tabulator/js/modules/edit.min.js b/website/js/vendor/tabulator/js/modules/edit.min.js
new file mode 100644 (file)
index 0000000..9d9073b
--- /dev/null
@@ -0,0 +1,2 @@
+/* Tabulator v4.8.3 (c) Oliver Folkerd */
+var _typeof="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},Edit=function(e){this.table=e,this.currentCell=!1,this.mouseClick=!1,this.recursionBlock=!1,this.invalidEdit=!1,this.editedCells=[]};Edit.prototype.initializeColumn=function(e){var t=this,i={editor:!1,blocked:!1,check:e.definition.editable,params:e.definition.editorParams||{}};switch(_typeof(e.definition.editor)){case"string":"tick"===e.definition.editor&&(e.definition.editor="tickCross",console.warn("DEPRECATION WARNING - the tick editor has been deprecated, please use the tickCross editor")),t.editors[e.definition.editor]?i.editor=t.editors[e.definition.editor]:console.warn("Editor Error - No such editor found: ",e.definition.editor);break;case"function":i.editor=e.definition.editor;break;case"boolean":!0===e.definition.editor&&("function"!=typeof e.definition.formatter?("tick"===e.definition.formatter&&(e.definition.formatter="tickCross",console.warn("DEPRECATION WARNING - the tick editor has been deprecated, please use the tickCross editor")),t.editors[e.definition.formatter]?i.editor=t.editors[e.definition.formatter]:i.editor=t.editors.input):console.warn("Editor Error - Cannot auto lookup editor for a custom formatter: ",e.definition.formatter))}i.editor&&(e.modules.edit=i)},Edit.prototype.getCurrentCell=function(){return!!this.currentCell&&this.currentCell.getComponent()},Edit.prototype.clearEditor=function(e){var t,i=this.currentCell;if(this.invalidEdit=!1,i){for(this.currentCell=!1,t=i.getElement(),e?i.validate():t.classList.remove("tabulator-validation-fail"),t.classList.remove("tabulator-editing");t.firstChild;)t.removeChild(t.firstChild);i.row.getElement().classList.remove("tabulator-row-editing")}},Edit.prototype.cancelEdit=function(){if(this.currentCell){var e=this.currentCell,t=this.currentCell.getComponent();this.clearEditor(!0),e.setValueActual(e.getValue()),e.cellRendered(),("textarea"==e.column.definition.editor||e.column.definition.variableHeight)&&e.row.normalizeHeight(!0),e.column.cellEvents.cellEditCancelled&&e.column.cellEvents.cellEditCancelled.call(this.table,t),this.table.options.cellEditCancelled.call(this.table,t)}},Edit.prototype.bindEditor=function(e){var t=this,i=e.getElement();i.setAttribute("tabindex",0),i.addEventListener("click",function(e){i.classList.contains("tabulator-editing")||i.focus({preventScroll:!0})}),i.addEventListener("mousedown",function(e){2===e.button?e.preventDefault():t.mouseClick=!0}),i.addEventListener("focus",function(i){t.recursionBlock||t.edit(e,i,!1)})},Edit.prototype.focusCellNoEvent=function(e,t){this.recursionBlock=!0,t&&"ie"===this.table.browser||e.getElement().focus({preventScroll:!0}),this.recursionBlock=!1},Edit.prototype.editCell=function(e,t){this.focusCellNoEvent(e),this.edit(e,!1,t)},Edit.prototype.focusScrollAdjust=function(e){if("virtual"==this.table.rowManager.getRenderMode()){var t=this.table.rowManager.element.scrollTop,i=this.table.rowManager.element.clientHeight+this.table.rowManager.element.scrollTop,n=e.row.getElement();n.offsetTop;n.offsetTop<t?this.table.rowManager.element.scrollTop-=t-n.offsetTop:n.offsetTop+n.offsetHeight>i&&(this.table.rowManager.element.scrollTop+=n.offsetTop+n.offsetHeight-i);var o=this.table.rowManager.element.scrollLeft,a=this.table.rowManager.element.clientWidth+this.table.rowManager.element.scrollLeft,r=e.getElement();r.offsetLeft;this.table.modExists("frozenColumns")&&(o+=parseInt(this.table.modules.frozenColumns.leftMargin),a-=parseInt(this.table.modules.frozenColumns.rightMargin)),r.offsetLeft<o?this.table.rowManager.element.scrollLeft-=o-r.offsetLeft:r.offsetLeft+r.offsetWidth>a&&(this.table.rowManager.element.scrollLeft+=r.offsetLeft+r.offsetWidth-a)}},Edit.prototype.edit=function(e,t,i){function n(t){if(u.currentCell===e){var i=!0;return e.column.modules.validate&&u.table.modExists("validate")&&"manual"!=u.table.options.validationMode&&(i=u.table.modules.validate.validate(e.column.modules.validate,e,t)),!0===i||"highlight"===u.table.options.validationMode?(u.clearEditor(),e.modules.edit||(e.modules.edit={}),e.modules.edit.edited=!0,-1==u.editedCells.indexOf(e)&&u.editedCells.push(e),e.setValue(t,!0),u.table.options.dataTree&&u.table.modExists("dataTree")&&u.table.modules.dataTree.checkForRestyle(e),!0===i||(m.classList.add("tabulator-validation-fail"),u.table.options.validationFailed.call(u.table,e.getComponent(),t,i),!1)):(u.invalidEdit=!0,m.classList.add("tabulator-validation-fail"),u.focusCellNoEvent(e,!0),c(),u.table.options.validationFailed.call(u.table,e.getComponent(),t,i),!1)}}function o(){u.currentCell===e&&(u.cancelEdit(),u.table.options.dataTree&&u.table.modExists("dataTree")&&u.table.modules.dataTree.checkForRestyle(e))}function a(e){c=e}var r,l,s,u=this,d=!0,c=function(){},m=e.getElement();if(this.currentCell)return void(this.invalidEdit||this.cancelEdit());if(e.column.modules.edit.blocked)return this.mouseClick=!1,m.blur(),!1;switch(t&&t.stopPropagation(),_typeof(e.column.modules.edit.check)){case"function":d=e.column.modules.edit.check(e.getComponent());break;case"boolean":d=e.column.modules.edit.check}if(d||i){if(u.cancelEdit(),u.currentCell=e,this.focusScrollAdjust(e),l=e.getComponent(),this.mouseClick&&(this.mouseClick=!1,e.column.cellEvents.cellClick&&e.column.cellEvents.cellClick.call(this.table,t,l)),e.column.cellEvents.cellEditing&&e.column.cellEvents.cellEditing.call(this.table,l),u.table.options.cellEditing.call(this.table,l),s="function"==typeof e.column.modules.edit.params?e.column.modules.edit.params(l):e.column.modules.edit.params,!1===(r=e.column.modules.edit.editor.call(u,l,a,n,o,s)))return m.blur(),!1;if(!(r instanceof Node))return console.warn("Edit Error - Editor should return an instance of Node, the editor returned:",r),m.blur(),!1;for(m.classList.add("tabulator-editing"),e.row.getElement().classList.add("tabulator-row-editing");m.firstChild;)m.removeChild(m.firstChild);m.appendChild(r),c();for(var f=m.children,p=0;p<f.length;p++)f[p].addEventListener("click",function(e){e.stopPropagation()});return!0}return this.mouseClick=!1,m.blur(),!1},Edit.prototype.maskInput=function(e,t){function i(t){var l=n[t];void 0!==l&&l!==r&&l!==o&&l!==a&&(e.value=e.value+""+l,i(t+1))}var n=t.mask,o=void 0!==t.maskLetterChar?t.maskLetterChar:"A",a=void 0!==t.maskNumberChar?t.maskNumberChar:"9",r=void 0!==t.maskWildcardChar?t.maskWildcardChar:"*",l=!1;e.addEventListener("keydown",function(t){var i=e.value.length,s=t.key;if(t.keyCode>46){if(i>=n.length)return t.preventDefault(),t.stopPropagation(),l=!1,!1;switch(n[i]){case o:if(s.toUpperCase()==s.toLowerCase())return t.preventDefault(),t.stopPropagation(),l=!1,!1;break;case a:if(isNaN(s))return t.preventDefault(),t.stopPropagation(),l=!1,!1;break;case r:break;default:if(s!==n[i])return t.preventDefault(),t.stopPropagation(),l=!1,!1}l=!0}}),e.addEventListener("keyup",function(n){n.keyCode>46&&t.maskAutoFill&&i(e.value.length)}),e.placeholder||(e.placeholder=n),t.maskAutoFill&&i(e.value.length)},Edit.prototype.getEditedCells=function(){var e=[];return this.editedCells.forEach(function(t){e.push(t.getComponent())}),e},Edit.prototype.clearEdited=function(e){var t;e.modules.edit&&e.modules.edit.edited&&(e.modules.edit.edited=!1,e.modules.validate&&(e.modules.validate.invalid=!1)),(t=this.editedCells.indexOf(e))>-1&&this.editedCells.splice(t,1)},Edit.prototype.editors={input:function(e,t,i,n,o){function a(e){(null===r||void 0===r)&&""!==l.value||l.value!==r?i(l.value)&&(r=l.value):n()}var r=e.getValue(),l=document.createElement("input");if(l.setAttribute("type",o.search?"search":"text"),l.style.padding="4px",l.style.width="100%",l.style.boxSizing="border-box",o.elementAttributes&&"object"==_typeof(o.elementAttributes))for(var s in o.elementAttributes)"+"==s.charAt(0)?(s=s.slice(1),l.setAttribute(s,l.getAttribute(s)+o.elementAttributes["+"+s])):l.setAttribute(s,o.elementAttributes[s]);return l.value=void 0!==r?r:"",t(function(){l.focus({preventScroll:!0}),l.style.height="100%"}),l.addEventListener("change",a),l.addEventListener("blur",a),l.addEventListener("keydown",function(e){switch(e.keyCode){case 13:a(e);break;case 27:n();break;case 35:case 36:e.stopPropagation()}}),o.mask&&this.table.modules.edit.maskInput(l,o),l},textarea:function(e,t,i,n,o){function a(t){(null===r||void 0===r)&&""!==u.value||u.value!==r?(i(u.value)&&(r=u.value),setTimeout(function(){e.getRow().normalizeHeight()},300)):n()}var r=e.getValue(),l=o.verticalNavigation||"hybrid",s=String(null!==r&&void 0!==r?r:""),u=(s.match(/(?:\r\n|\r|\n)/g),document.createElement("textarea")),d=0;if(u.style.display="block",u.style.padding="2px",u.style.height="100%",u.style.width="100%",u.style.boxSizing="border-box",u.style.whiteSpace="pre-wrap",u.style.resize="none",o.elementAttributes&&"object"==_typeof(o.elementAttributes))for(var c in o.elementAttributes)"+"==c.charAt(0)?(c=c.slice(1),u.setAttribute(c,u.getAttribute(c)+o.elementAttributes["+"+c])):u.setAttribute(c,o.elementAttributes[c]);return u.value=s,t(function(){u.focus({preventScroll:!0}),u.style.height="100%",u.scrollHeight,u.style.height=u.scrollHeight+"px",e.getRow().normalizeHeight()}),u.addEventListener("change",a),u.addEventListener("blur",a),u.addEventListener("keyup",function(){u.style.height="";var t=u.scrollHeight;u.style.height=t+"px",t!=d&&(d=t,e.getRow().normalizeHeight())}),u.addEventListener("keydown",function(e){switch(e.keyCode){case 27:n();break;case 38:("editor"==l||"hybrid"==l&&u.selectionStart)&&(e.stopImmediatePropagation(),e.stopPropagation());break;case 40:("editor"==l||"hybrid"==l&&u.selectionStart!==u.value.length)&&(e.stopImmediatePropagation(),e.stopPropagation());break;case 35:case 36:e.stopPropagation()}}),o.mask&&this.table.modules.edit.maskInput(u,o),u},number:function(e,t,i,n,o){function a(){var e=s.value;isNaN(e)||""===e||(e=Number(e)),e!==r?i(e)&&(r=e):n()}var r=e.getValue(),l=o.verticalNavigation||"editor",s=document.createElement("input");if(s.setAttribute("type","number"),void 0!==o.max&&s.setAttribute("max",o.max),void 0!==o.min&&s.setAttribute("min",o.min),void 0!==o.step&&s.setAttribute("step",o.step),s.style.padding="4px",s.style.width="100%",s.style.boxSizing="border-box",o.elementAttributes&&"object"==_typeof(o.elementAttributes))for(var u in o.elementAttributes)"+"==u.charAt(0)?(u=u.slice(1),s.setAttribute(u,s.getAttribute(u)+o.elementAttributes["+"+u])):s.setAttribute(u,o.elementAttributes[u]);s.value=r;var d=function(e){a()};return t(function(){s.removeEventListener("blur",d),s.focus({preventScroll:!0}),s.style.height="100%",s.addEventListener("blur",d)}),s.addEventListener("keydown",function(e){switch(e.keyCode){case 13:a();break;case 27:n();break;case 38:case 40:"editor"==l&&(e.stopImmediatePropagation(),e.stopPropagation());break;case 35:case 36:e.stopPropagation()}}),o.mask&&this.table.modules.edit.maskInput(s,o),s},range:function(e,t,i,n,o){function a(){var e=l.value;isNaN(e)||""===e||(e=Number(e)),e!=r?i(e)&&(r=e):n()}var r=e.getValue(),l=document.createElement("input");if(l.setAttribute("type","range"),void 0!==o.max&&l.setAttribute("max",o.max),void 0!==o.min&&l.setAttribute("min",o.min),void 0!==o.step&&l.setAttribute("step",o.step),l.style.padding="4px",l.style.width="100%",l.style.boxSizing="border-box",o.elementAttributes&&"object"==_typeof(o.elementAttributes))for(var s in o.elementAttributes)"+"==s.charAt(0)?(s=s.slice(1),l.setAttribute(s,l.getAttribute(s)+o.elementAttributes["+"+s])):l.setAttribute(s,o.elementAttributes[s]);return l.value=r,t(function(){l.focus({preventScroll:!0}),l.style.height="100%"}),l.addEventListener("blur",function(e){a()}),l.addEventListener("keydown",function(e){switch(e.keyCode){case 13:a();break;case 27:n()}}),l},select:function(e,t,i,n,o){function a(t){var i,n={},a=k.table.getData();return i=t?k.table.columnManager.getColumnByField(t):e.getColumn()._getSelf(),i?(a.forEach(function(e){var t=i.getFieldValue(e);null!==t&&void 0!==t&&""!==t&&(n[t]=!0)}),n=o.sortValuesList?"asc"==o.sortValuesList?Object.keys(n).sort():Object.keys(n).sort().reverse():Object.keys(n)):console.warn("unable to find matching column to create select lookup list:",t),n}function r(t,i){function n(e){var e={label:e.label,value:e.value,itemParams:e.itemParams,elementAttributes:e.elementAttributes,element:!1};return i.indexOf(e.value)>-1&&u(e),o.push(e),a.push(e),e}var o=[],a=[];if("function"==typeof t&&(t=t(e)),Array.isArray(t))t.forEach(function(e){var t;"object"===(void 0===e?"undefined":_typeof(e))?e.options?(t={label:e.label,group:!0,itemParams:e.itemParams,elementAttributes:e.elementAttributes,element:!1},a.push(t),e.options.forEach(function(e){n(e)})):n(e):(t={label:e,value:e,element:!1},i.indexOf(t.value)>-1&&u(t),o.push(t),a.push(t))});else for(var r in t){var s={label:t[r],value:r,element:!1};i.indexOf(s.value)>-1&&u(s),o.push(s),a.push(s)}N=o,S=a,l()}function l(){for(;P.firstChild;)P.removeChild(P.firstChild);S.forEach(function(t){var i=t.element;if(!i){if(i=document.createElement("div"),t.label=o.listItemFormatter?o.listItemFormatter(t.value,t.label,e,i,t.itemParams):t.label,t.group?(i.classList.add("tabulator-edit-select-list-group"),i.tabIndex=0,i.innerHTML=""===t.label?"&nbsp;":t.label):(i.classList.add("tabulator-edit-select-list-item"),i.tabIndex=0,i.innerHTML=""===t.label?"&nbsp;":t.label,i.addEventListener("click",function(){V=!0,setTimeout(function(){V=!1},10),I?(c(t),x.focus()):m(t)}),M.indexOf(t)>-1&&i.classList.add("active")),t.elementAttributes&&"object"==_typeof(t.elementAttributes))for(var n in t.elementAttributes)"+"==n.charAt(0)?(n=n.slice(1),i.setAttribute(n,x.getAttribute(n)+t.elementAttributes["+"+n])):i.setAttribute(n,t.elementAttributes[n]);i.addEventListener("mousedown",function(){O=!1,setTimeout(function(){O=!0},10)}),t.element=i}P.appendChild(i)})}function s(e,t){!I&&T&&T.element&&T.element.classList.remove("active"),T&&T.element&&T.element.classList.remove("focused"),T=e,e.element&&(e.element.classList.add("focused"),t&&e.element.classList.add("active")),e&&e.element&&e.element.scrollIntoView&&e.element.scrollIntoView({behavior:"smooth",block:"nearest",inline:"start"})}function u(e){-1==M.indexOf(e)&&(M.push(e),s(e,!0)),p()}function d(e){var t=M[e];e>-1&&(M.splice(e,1),t.element&&t.element.classList.remove("active"))}function c(e){e||(e=T);var t=M.indexOf(e);t>-1?d(t):(!0!==I&&M.length>=I&&d(0),u(e)),p()}function m(e){g(),e||(e=T),e&&(x.value=e.label,i(e.value)),w=x.value}function f(e){e||g();var t=[];M.forEach(function(e){t.push(e.value)}),w=x.value,i(t)}function p(){var e=[];M.forEach(function(t){e.push(t.label)}),x.value=e.join(", "),!1===k.currentCell&&f(!0)}function b(){for(var e=M.length,t=0;t<e;t++)d(0)}function v(){g(),n()}function h(){if(M=[],!P.parentNode){!0===o.values?r(a(),w):"string"==typeof o.values?r(a(o.values),w):r(o.values||[],w);var e=Tabulator.prototype.helpers.elOffset(A);P.style.minWidth=A.offsetWidth+"px",P.style.top=e.top+A.offsetHeight+"px",P.style.left=e.left+"px",P.addEventListener("mousedown",function(e){O=!1,setTimeout(function(){O=!0},10)}),document.body.appendChild(P)}}function g(){P.parentNode&&P.parentNode.removeChild(P),y()}function y(){k.table.rowManager.element.removeEventListener("scroll",v)}var E=this,k=this,A=e.getElement(),C=e.getValue(),L=o.verticalNavigation||"editor",w=void 0!==C||null===C?Array.isArray(C)?C:[C]:void 0!==o.defaultValue?o.defaultValue:[],x=document.createElement("input"),P=document.createElement("div"),I=o.multiselect,N=[],T={},S=[],M=[],O=!0,V=!1;if((Array.isArray(o)||!Array.isArray(o)&&"object"===(void 0===o?"undefined":_typeof(o))&&!o.values)&&(console.warn("DEPRECATION WARNING - values for the select editor must now be passed into the values property of the editorParams object, not as the editorParams object"),o={values:o}),x.setAttribute("type","text"),x.style.padding="4px",x.style.width="100%",x.style.boxSizing="border-box",x.style.cursor="default",x.readOnly=0!=this.currentCell,o.elementAttributes&&"object"==_typeof(o.elementAttributes))for(var j in o.elementAttributes)"+"==j.charAt(0)?(j=j.slice(1),x.setAttribute(j,x.getAttribute(j)+o.elementAttributes["+"+j])):x.setAttribute(j,o.elementAttributes[j]);return x.value=void 0!==C||null===C?C:"",x.addEventListener("search",function(e){x.value||(b(),f())}),x.addEventListener("keydown",function(e){var t;switch(e.keyCode){case 38:t=N.indexOf(T),("editor"==L||"hybrid"==L&&t)&&(e.stopImmediatePropagation(),e.stopPropagation(),e.preventDefault(),t>0&&s(N[t-1],!I));break;case 40:t=N.indexOf(T),("editor"==L||"hybrid"==L&&t<N.length-1)&&(e.stopImmediatePropagation(),e.stopPropagation(),e.preventDefault(),t<N.length-1&&(-1==t?s(N[0],!I):s(N[t+1],!I)));break;case 37:case 39:e.stopImmediatePropagation(),e.stopPropagation(),e.preventDefault();break;case 13:I?c():m();break;case 27:v();break;case 9:break;default:!1===k.currentCell&&e.preventDefault()}}),x.addEventListener("blur",function(e){O&&(I?f():v())}),x.addEventListener("focus",function(e){V||h()}),P=document.createElement("div"),P.classList.add("tabulator-edit-select-list"),t(function(){x.style.height="100%",x.focus({preventScroll:!0})}),setTimeout(function(){E.table.rowManager.element.addEventListener("scroll",v)},10),x},autocomplete:function(e,t,i,n,o){function a(){!0===o.values?T=r():"string"==typeof o.values&&(T=r(o.values))}function r(t){var i,n={},a=E.table.getData();return i=t?E.table.columnManager.getColumnByField(t):e.getColumn()._getSelf(),i?(a.forEach(function(e){var t=i.getFieldValue(e);null!==t&&void 0!==t&&""!==t&&(n[t]=!0)}),n=o.sortValuesList?"asc"==o.sortValuesList?Object.keys(n).sort():Object.keys(n).sort().reverse():Object.keys(n)):console.warn("unable to find matching column to create autocomplete lookup list:",t),n}function l(e,t){var i,n,a=[];i=T||(o.values||[]),o.searchFunc?(a=o.searchFunc(e,i),a instanceof Promise?(s(void 0!==o.searchingPlaceholder?o.searchingPlaceholder:"Searching..."),a.then(function(e){c(u(e),t)}).catch(function(e){console.err("error in autocomplete search promise:",e)})):c(u(a),t)):(n=u(i),""===e?o.showListOnEmpty&&(a=n):n.forEach(function(t){null===t.value&&void 0===t.value||(String(t.value).toLowerCase().indexOf(String(e).toLowerCase())>-1||String(t.title).toLowerCase().indexOf(String(e).toLowerCase())>-1)&&a.push(t)}),c(a,t))}function s(e){var t=document.createElement("div");d(),!1!==e&&(t.classList.add("tabulator-edit-select-list-notice"),t.tabIndex=0,e instanceof Node?t.appendChild(e):t.innerHTML=e,x.appendChild(t))}function u(e){var t=[];if(Array.isArray(e))e.forEach(function(e){var i={};"object"===(void 0===e?"undefined":_typeof(e))?(i.title=o.listItemFormatter?o.listItemFormatter(e.value,e.label):e.label,i.value=e.value):(i.title=o.listItemFormatter?o.listItemFormatter(e,e):e,i.value=e),t.push(i)});else for(var i in e){var n={title:o.listItemFormatter?o.listItemFormatter(i,e[i]):e[i],value:i};t.push(n)}return t}function d(){for(;x.firstChild;)x.removeChild(x.firstChild)}function c(e,t){e.length?m(e,t):o.emptyPlaceholder&&s(o.emptyPlaceholder)}function m(e,t){var i=!1;d(),P=e,P.forEach(function(e){var n=e.element;n||(n=document.createElement("div"),n.classList.add("tabulator-edit-select-list-item"),n.tabIndex=0,n.innerHTML=e.title,n.addEventListener("click",function(t){b(e),f()}),n.addEventListener("mousedown",function(e){N=!1,setTimeout(function(){N=!0},10)}),e.element=n,t&&e.value==A&&(w.value=e.title,e.element.classList.add("active"),i=!0),e===I&&(e.element.classList.add("active"),i=!0)),x.appendChild(n)}),i||b(!1)}function f(){v(),I?A!==I.value?(A=I.value,w.value=I.title,i(I.value)):n():o.freetext?(A=w.value,i(w.value)):o.allowEmpty&&""===w.value?(A=w.value,i(w.value)):n()}function p(){if(!x.parentNode){for(;x.firstChild;)x.removeChild(x.firstChild);var e=Tabulator.prototype.helpers.elOffset(k);x.style.minWidth=k.offsetWidth+"px",x.style.top=e.top+k.offsetHeight+"px",x.style.left=e.left+"px",document.body.appendChild(x)}}function b(e,t){I&&I.element&&I.element.classList.remove("active"),I=e,e&&e.element&&e.element.classList.add("active"),e&&e.element&&e.element.scrollIntoView&&e.element.scrollIntoView({behavior:"smooth",block:"nearest",inline:"start"})}function v(){x.parentNode&&x.parentNode.removeChild(x),g()}function h(){v(),n()}function g(){E.table.rowManager.element.removeEventListener("scroll",h)}var y=this,E=this,k=e.getElement(),A=e.getValue(),C=o.verticalNavigation||"editor",L=void 0!==A||null===A?A:void 0!==o.defaultValue?o.defaultValue:"",w=document.createElement("input"),x=document.createElement("div"),P=[],I=!1,N=!0,T=!1;if(w.setAttribute("type","search"),w.style.padding="4px",w.style.width="100%",w.style.boxSizing="border-box",o.elementAttributes&&"object"==_typeof(o.elementAttributes))for(var S in o.elementAttributes)"+"==S.charAt(0)?(S=S.slice(1),w.setAttribute(S,w.getAttribute(S)+o.elementAttributes["+"+S])):w.setAttribute(S,o.elementAttributes[S]);return x.classList.add("tabulator-edit-select-list"),x.addEventListener("mousedown",function(e){N=!1,setTimeout(function(){N=!0},10)}),w.addEventListener("keydown",function(e){var t;switch(e.keyCode){case 38:t=P.indexOf(I),("editor"==C||"hybrid"==C&&t)&&(e.stopImmediatePropagation(),e.stopPropagation(),e.preventDefault(),b(t>0?P[t-1]:!1));break;case 40:t=P.indexOf(I),("editor"==C||"hybrid"==C&&t<P.length-1)&&(e.stopImmediatePropagation(),e.stopPropagation(),e.preventDefault(),t<P.length-1&&b(-1==t?P[0]:P[t+1]));break;case 37:case 39:e.stopImmediatePropagation(),e.stopPropagation();break;case 13:f();break;case 27:h();break;case 36:case 35:e.stopImmediatePropagation()}}),w.addEventListener("keyup",function(e){switch(e.keyCode){case 38:case 37:case 39:case 40:case 13:case 27:break;default:l(w.value)}}),w.addEventListener("search",function(e){l(w.value)}),w.addEventListener("blur",function(e){N&&f()}),w.addEventListener("focus",function(e){var t=L;a(),p(),w.value=t,l(t,!0)}),t(function(){w.style.height="100%",w.focus({preventScroll:!0})}),o.mask&&this.table.modules.edit.maskInput(w,o),setTimeout(function(){y.table.rowManager.element.addEventListener("scroll",h)},10),a(),w.value=L,l(L,!0),w},star:function(e,t,i,n,o){function a(e){m.forEach(function(t,i){i<e?("ie"==l.table.browser?t.setAttribute("class","tabulator-star-active"):t.classList.replace("tabulator-star-inactive","tabulator-star-active"),t.innerHTML='<polygon fill="#488CE9" stroke="#014AAE" stroke-width="37.6152" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" points="259.216,29.942 330.27,173.919 489.16,197.007 374.185,309.08 401.33,467.31 259.216,392.612 117.104,467.31 144.25,309.08 29.274,197.007 188.165,173.919 "/>'):("ie"==l.table.browser?t.setAttribute("class","tabulator-star-inactive"):t.classList.replace("tabulator-star-active","tabulator-star-inactive"),t.innerHTML='<polygon fill="#010155" stroke="#686868" stroke-width="37.6152" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" points="259.216,29.942 330.27,173.919 489.16,197.007 374.185,309.08 401.33,467.31 259.216,392.612 117.104,467.31 144.25,309.08 29.274,197.007 188.165,173.919 "/>')})}function r(e){u=e,a(e)}var l=this,s=e.getElement(),u=e.getValue(),d=s.getElementsByTagName("svg").length||5,c=s.getElementsByTagName("svg")[0]?s.getElementsByTagName("svg")[0].getAttribute("width"):14,m=[],f=document.createElement("div"),p=document.createElementNS("http://www.w3.org/2000/svg","svg");if(s.style.whiteSpace="nowrap",s.style.overflow="hidden",s.style.textOverflow="ellipsis",f.style.verticalAlign="middle",f.style.display="inline-block",f.style.padding="4px",p.setAttribute("width",c),p.setAttribute("height",c),p.setAttribute("viewBox","0 0 512 512"),p.setAttribute("xml:space","preserve"),p.style.padding="0 1px",o.elementAttributes&&"object"==_typeof(o.elementAttributes))for(var b in o.elementAttributes)"+"==b.charAt(0)?(b=b.slice(1),f.setAttribute(b,f.getAttribute(b)+o.elementAttributes["+"+b])):f.setAttribute(b,o.elementAttributes[b]);for(var v=1;v<=d;v++)!function(e){var t=document.createElement("span"),n=p.cloneNode(!0);m.push(n),t.addEventListener("mouseenter",function(t){t.stopPropagation(),t.stopImmediatePropagation(),a(e)}),t.addEventListener("mousemove",function(e){e.stopPropagation(),e.stopImmediatePropagation()}),t.addEventListener("click",function(t){t.stopPropagation(),t.stopImmediatePropagation(),i(e),s.blur()}),t.appendChild(n),f.appendChild(t)}(v);return u=Math.min(parseInt(u),d),a(u),f.addEventListener("mousemove",function(e){a(0)}),f.addEventListener("click",function(e){i(0)}),s.addEventListener("blur",function(e){n()}),s.addEventListener("keydown",function(e){switch(e.keyCode){case 39:r(u+1);break;case 37:r(u-1);break;case 13:i(u);break;case 27:n()}}),f},progress:function(e,t,i,n,o){function a(){var e=c*Math.round(p.offsetWidth/(s.clientWidth/100))+d;i(e),s.setAttribute("aria-valuenow",e),s.setAttribute("aria-label",m)}var r,l,s=e.getElement(),u=void 0===o.max?s.getElementsByTagName("div")[0].getAttribute("max")||100:o.max,d=void 0===o.min?s.getElementsByTagName("div")[0].getAttribute("min")||0:o.min,c=(u-d)/100,m=e.getValue()||0,f=document.createElement("div"),p=document.createElement("div");if(f.style.position="absolute",f.style.right="0",f.style.top="0",f.style.bottom="0",f.style.width="5px",f.classList.add("tabulator-progress-handle"),p.style.display="inline-block",p.style.position="relative",p.style.height="100%",p.style.backgroundColor="#488CE9",p.style.maxWidth="100%",p.style.minWidth="0%",o.elementAttributes&&"object"==_typeof(o.elementAttributes))for(var b in o.elementAttributes)"+"==b.charAt(0)?(b=b.slice(1),p.setAttribute(b,p.getAttribute(b)+o.elementAttributes["+"+b])):p.setAttribute(b,o.elementAttributes[b]);return s.style.padding="4px 4px",m=Math.min(parseFloat(m),u),m=Math.max(parseFloat(m),d),m=Math.round((m-d)/c),p.style.width=m+"%",s.setAttribute("aria-valuemin",d),s.setAttribute("aria-valuemax",u),p.appendChild(f),f.addEventListener("mousedown",function(e){r=e.screenX,l=p.offsetWidth}),f.addEventListener("mouseover",function(){f.style.cursor="ew-resize"}),s.addEventListener("mousemove",function(e){r&&(p.style.width=l+e.screenX-r+"px")}),s.addEventListener("mouseup",function(e){r&&(e.stopPropagation(),e.stopImmediatePropagation(),r=!1,l=!1,a())}),s.addEventListener("keydown",function(e){switch(e.keyCode){case 39:e.preventDefault(),p.style.width=p.clientWidth+s.clientWidth/100+"px";break;case 37:e.preventDefault(),p.style.width=p.clientWidth-s.clientWidth/100+"px";break;case 9:case 13:a();break;case 27:n()}}),s.addEventListener("blur",function(){n()}),p},tickCross:function(e,t,i,n,o){function a(e){return s?e?d?u:l.checked:l.checked&&!d?(l.checked=!1,l.indeterminate=!0,d=!0,u):(d=!1,l.checked):l.checked}var r=e.getValue(),l=document.createElement("input"),s=o.tristate,u=void 0===o.indeterminateValue?null:o.indeterminateValue,d=!1;if(l.setAttribute("type","checkbox"),l.style.marginTop="5px",l.style.boxSizing="border-box",o.elementAttributes&&"object"==_typeof(o.elementAttributes))for(var c in o.elementAttributes)"+"==c.charAt(0)?(c=c.slice(1),l.setAttribute(c,l.getAttribute(c)+o.elementAttributes["+"+c])):l.setAttribute(c,o.elementAttributes[c]);return l.value=r,!s||void 0!==r&&r!==u&&""!==r||(d=!0,l.indeterminate=!0),"firefox"!=this.table.browser&&t(function(){l.focus({preventScroll:!0})}),l.checked=!0===r||"true"===r||"True"===r||1===r,t(function(){l.focus()}),l.addEventListener("change",function(e){i(a())}),l.addEventListener("blur",function(e){i(a(!0))}),l.addEventListener("keydown",function(e){13==e.keyCode&&i(a()),27==e.keyCode&&n()}),l}},Tabulator.prototype.registerModule("edit",Edit);
\ No newline at end of file
diff --git a/website/js/vendor/tabulator/js/modules/export.js b/website/js/vendor/tabulator/js/modules/export.js
new file mode 100644 (file)
index 0000000..9f9806d
--- /dev/null
@@ -0,0 +1,614 @@
+var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
+
+/* Tabulator v4.8.3 (c) Oliver Folkerd */
+
+var ExportRow = function ExportRow(type, columns, component, indent) {
+       this.type = type;
+       this.columns = columns;
+       this.component = component || false;
+       this.indent = indent || 0;
+};
+
+var ExportColumn = function ExportColumn(value, component, width, height, depth) {
+       this.value = value;
+       this.component = component || false;
+       this.width = width;
+       this.height = height;
+       this.depth = depth;
+};
+
+var Export = function Export(table) {
+       this.table = table; //hold Tabulator object
+       this.config = {};
+       this.cloneTableStyle = true;
+       this.colVisProp = "";
+};
+
+Export.prototype.generateExportList = function (config, style, range, colVisProp) {
+       this.cloneTableStyle = style;
+       this.config = config || {};
+       this.colVisProp = colVisProp;
+
+       var headers = this.config.columnHeaders !== false ? this.headersToExportRows(this.generateColumnGroupHeaders()) : [];
+       var body = this.bodyToExportRows(this.rowLookup(range));
+
+       return headers.concat(body);
+};
+
+Export.prototype.genereateTable = function (config, style, range, colVisProp) {
+       var list = this.generateExportList(config, style, range, colVisProp);
+
+       return this.genereateTableElement(list);
+};
+
+Export.prototype.rowLookup = function (range) {
+       var _this = this;
+
+       var rows = [];
+
+       if (typeof range == "function") {
+               range.call(this.table).forEach(function (row) {
+                       row = _this.table.rowManager.findRow(row);
+
+                       if (row) {
+                               rows.push(row);
+                       }
+               });
+       } else {
+               switch (range) {
+                       case true:
+                       case "visible":
+                               rows = this.table.rowManager.getVisibleRows(true);
+                               break;
+
+                       case "all":
+                               rows = this.table.rowManager.rows;
+                               break;
+
+                       case "selected":
+                               rows = this.table.modules.selectRow.selectedRows;
+                               break;
+
+                       case "active":
+                       default:
+                               if (this.table.options.pagination) {
+                                       rows = this.table.rowManager.getDisplayRows(this.table.rowManager.displayRows.length - 2);
+                               } else {
+                                       rows = this.table.rowManager.getDisplayRows();
+                               }
+               }
+       }
+
+       return Object.assign([], rows);
+};
+
+Export.prototype.generateColumnGroupHeaders = function () {
+       var _this2 = this;
+
+       var output = [];
+
+       var columns = this.config.columnGroups !== false ? this.table.columnManager.columns : this.table.columnManager.columnsByIndex;
+
+       columns.forEach(function (column) {
+               var colData = _this2.processColumnGroup(column);
+
+               if (colData) {
+                       output.push(colData);
+               }
+       });
+
+       return output;
+};
+
+Export.prototype.processColumnGroup = function (column) {
+       var _this3 = this;
+
+       var subGroups = column.columns,
+           maxDepth = 0,
+           title = column.definition["title" + (this.colVisProp.charAt(0).toUpperCase() + this.colVisProp.slice(1))] || column.definition.title;
+
+       var groupData = {
+               title: title,
+               column: column,
+               depth: 1
+       };
+
+       if (subGroups.length) {
+               groupData.subGroups = [];
+               groupData.width = 0;
+
+               subGroups.forEach(function (subGroup) {
+                       var subGroupData = _this3.processColumnGroup(subGroup);
+
+                       if (subGroupData) {
+                               groupData.width += subGroupData.width;
+                               groupData.subGroups.push(subGroupData);
+
+                               if (subGroupData.depth > maxDepth) {
+                                       maxDepth = subGroupData.depth;
+                               }
+                       }
+               });
+
+               groupData.depth += maxDepth;
+
+               if (!groupData.width) {
+                       return false;
+               }
+       } else {
+               if (this.columnVisCheck(column)) {
+                       groupData.width = 1;
+               } else {
+                       return false;
+               }
+       }
+
+       return groupData;
+};
+
+Export.prototype.columnVisCheck = function (column) {
+       return column.definition[this.colVisProp] !== false && (column.visible || !column.visible && column.definition[this.colVisProp]);
+};
+
+Export.prototype.headersToExportRows = function (columns) {
+       var headers = [],
+           headerDepth = 0,
+           exportRows = [];
+
+       function parseColumnGroup(column, level) {
+
+               var depth = headerDepth - level;
+
+               if (typeof headers[level] === "undefined") {
+                       headers[level] = [];
+               }
+
+               column.height = column.subGroups ? 1 : depth - column.depth + 1;
+
+               headers[level].push(column);
+
+               if (column.height > 1) {
+                       for (var _i = 1; _i < column.height; _i++) {
+
+                               if (typeof headers[level + _i] === "undefined") {
+                                       headers[level + _i] = [];
+                               }
+
+                               headers[level + _i].push(false);
+                       }
+               }
+
+               if (column.width > 1) {
+                       for (var _i2 = 1; _i2 < column.width; _i2++) {
+                               headers[level].push(false);
+                       }
+               }
+
+               if (column.subGroups) {
+                       column.subGroups.forEach(function (subGroup) {
+                               parseColumnGroup(subGroup, level + 1);
+                       });
+               }
+       }
+
+       //calculate maximum header debth
+       columns.forEach(function (column) {
+               if (column.depth > headerDepth) {
+                       headerDepth = column.depth;
+               }
+       });
+
+       columns.forEach(function (column) {
+               parseColumnGroup(column, 0);
+       });
+
+       headers.forEach(function (header) {
+               var columns = [];
+
+               header.forEach(function (col) {
+                       if (col) {
+                               columns.push(new ExportColumn(col.title, col.column.getComponent(), col.width, col.height, col.depth));
+                       } else {
+                               columns.push(null);
+                       }
+               });
+
+               exportRows.push(new ExportRow("header", columns));
+       });
+
+       return exportRows;
+};
+
+Export.prototype.bodyToExportRows = function (rows) {
+       var _this4 = this;
+
+       var columns = [];
+       var exportRows = [];
+
+       this.table.columnManager.columnsByIndex.forEach(function (column) {
+               if (_this4.columnVisCheck(column)) {
+                       columns.push(column.getComponent());
+               }
+       });
+
+       if (this.config.columnCalcs !== false && this.table.modExists("columnCalcs")) {
+               if (this.table.modules.columnCalcs.topInitialized) {
+                       rows.unshift(this.table.modules.columnCalcs.topRow);
+               }
+
+               if (this.table.modules.columnCalcs.botInitialized) {
+                       rows.push(this.table.modules.columnCalcs.botRow);
+               }
+       }
+
+       rows = rows.filter(function (row) {
+               switch (row.type) {
+                       case "group":
+                               return _this4.config.rowGroups !== false;
+                               break;
+
+                       case "calc":
+                               return _this4.config.columnCalcs !== false;
+                               break;
+
+                       case "row":
+                               return !(_this4.table.options.dataTree && _this4.config.dataTree === false && row.modules.dataTree.parent);
+                               break;
+               }
+
+               return true;
+       });
+
+       rows.forEach(function (row, i) {
+               var rowData = row.getData(_this4.colVisProp);
+               var exportCols = [];
+               var indent = 0;
+
+               switch (row.type) {
+                       case "group":
+                               indent = row.level;
+                               exportCols.push(new ExportColumn(row.key, row.getComponent(), columns.length, 1));
+                               break;
+
+                       case "calc":
+                       case "row":
+                               columns.forEach(function (col) {
+                                       exportCols.push(new ExportColumn(col._column.getFieldValue(rowData), col, 1, 1));
+                               });
+
+                               if (_this4.table.options.dataTree && _this4.config.dataTree !== false) {
+                                       indent = row.modules.dataTree.index;
+                               }
+                               break;
+               }
+
+               exportRows.push(new ExportRow(row.type, exportCols, row.getComponent(), indent));
+       });
+
+       return exportRows;
+};
+
+Export.prototype.genereateTableElement = function (list) {
+       var _this5 = this;
+
+       var table = document.createElement("table"),
+           headerEl = document.createElement("thead"),
+           bodyEl = document.createElement("tbody"),
+           styles = this.lookupTableStyles(),
+           rowFormatter = this.table.options["rowFormatter" + (this.colVisProp.charAt(0).toUpperCase() + this.colVisProp.slice(1))],
+           setup = {};
+
+       setup.rowFormatter = rowFormatter !== null ? rowFormatter : this.table.options.rowFormatter;
+
+       if (this.table.options.dataTree && this.config.dataTree !== false && this.table.modExists("columnCalcs")) {
+               setup.treeElementField = this.table.modules.dataTree.elementField;
+       }
+
+       //assign group header formatter
+       setup.groupHeader = this.table.options["groupHeader" + (this.colVisProp.charAt(0).toUpperCase() + this.colVisProp.slice(1))];
+
+       if (setup.groupHeader && !Array.isArray(setup.groupHeader)) {
+               setup.groupHeader = [setup.groupHeader];
+       }
+
+       table.classList.add("tabulator-print-table");
+
+       this.mapElementStyles(this.table.columnManager.getHeadersElement(), headerEl, ["border-top", "border-left", "border-right", "border-bottom", "background-color", "color", "font-weight", "font-family", "font-size"]);
+
+       if (list.length > 1000) {
+               console.warn("It may take a long time to render an HTML table with more than 1000 rows");
+       }
+
+       list.forEach(function (row, i) {
+               switch (row.type) {
+                       case "header":
+                               headerEl.appendChild(_this5.genereateHeaderElement(row, setup, styles));
+                               break;
+
+                       case "group":
+                               bodyEl.appendChild(_this5.genereateGroupElement(row, setup, styles));
+                               break;
+
+                       case "calc":
+                               bodyEl.appendChild(_this5.genereateCalcElement(row, setup, styles));
+                               break;
+
+                       case "row":
+                               var rowEl = _this5.genereateRowElement(row, setup, styles);
+                               _this5.mapElementStyles(i % 2 && styles.evenRow ? styles.evenRow : styles.oddRow, rowEl, ["border-top", "border-left", "border-right", "border-bottom", "color", "font-weight", "font-family", "font-size", "background-color"]);
+                               bodyEl.appendChild(rowEl);
+                               break;
+               }
+       });
+
+       if (headerEl.innerHTML) {
+               table.appendChild(headerEl);
+       }
+
+       table.appendChild(bodyEl);
+
+       this.mapElementStyles(this.table.element, table, ["border-top", "border-left", "border-right", "border-bottom"]);
+       return table;
+};
+
+Export.prototype.lookupTableStyles = function () {
+       var styles = {};
+
+       //lookup row styles
+       if (this.cloneTableStyle && window.getComputedStyle) {
+               styles.oddRow = this.table.element.querySelector(".tabulator-row-odd:not(.tabulator-group):not(.tabulator-calcs)");
+               styles.evenRow = this.table.element.querySelector(".tabulator-row-even:not(.tabulator-group):not(.tabulator-calcs)");
+               styles.calcRow = this.table.element.querySelector(".tabulator-row.tabulator-calcs");
+               styles.firstRow = this.table.element.querySelector(".tabulator-row:not(.tabulator-group):not(.tabulator-calcs)");
+               styles.firstGroup = this.table.element.getElementsByClassName("tabulator-group")[0];
+
+               if (styles.firstRow) {
+                       styles.styleCells = styles.firstRow.getElementsByClassName("tabulator-cell");
+                       styles.firstCell = styles.styleCells[0];
+                       styles.lastCell = styles.styleCells[styles.styleCells.length - 1];
+               }
+       }
+
+       return styles;
+};
+
+Export.prototype.genereateHeaderElement = function (row, setup, styles) {
+       var _this6 = this;
+
+       var rowEl = document.createElement("tr");
+
+       row.columns.forEach(function (column) {
+               if (column) {
+                       var cellEl = document.createElement("th");
+                       var classNames = column.component._column.definition.cssClass ? column.component._column.definition.cssClass.split(" ") : [];
+
+                       cellEl.colSpan = column.width;
+                       cellEl.rowSpan = column.height;
+
+                       cellEl.innerHTML = column.value;
+
+                       if (_this6.cloneTableStyle) {
+                               cellEl.style.boxSizing = "border-box";
+                       }
+
+                       classNames.forEach(function (className) {
+                               cellEl.classList.add(className);
+                       });
+
+                       _this6.mapElementStyles(column.component.getElement(), cellEl, ["text-align", "border-top", "border-left", "border-right", "border-bottom", "background-color", "color", "font-weight", "font-family", "font-size"]);
+                       _this6.mapElementStyles(column.component._column.contentElement, cellEl, ["padding-top", "padding-left", "padding-right", "padding-bottom"]);
+
+                       if (column.component._column.visible) {
+                               _this6.mapElementStyles(column.component.getElement(), cellEl, ["width"]);
+                       } else {
+                               if (column.component._column.definition.width) {
+                                       cellEl.style.width = column.component._column.definition.width + "px";
+                               }
+                       }
+
+                       if (column.component._column.parent) {
+                               _this6.mapElementStyles(column.component._column.parent.groupElement, cellEl, ["border-top"]);
+                       }
+
+                       rowEl.appendChild(cellEl);
+               }
+       });
+
+       return rowEl;
+};
+
+Export.prototype.genereateGroupElement = function (row, setup, styles) {
+
+       var rowEl = document.createElement("tr"),
+           cellEl = document.createElement("td"),
+           group = row.columns[0];
+
+       rowEl.classList.add("tabulator-print-table-row");
+
+       if (setup.groupHeader && setup.groupHeader[row.indent]) {
+               group.value = setup.groupHeader[row.indent](group.value, row.component._group.getRowCount(), row.component._group.getData(), row.component);
+       } else {
+               if (setup.groupHeader === false) {
+                       group.value = group.value;
+               } else {
+                       group.value = row.component._group.generator(group.value, row.component._group.getRowCount(), row.component._group.getData(), row.component);
+               }
+       }
+
+       cellEl.colSpan = group.width;
+       cellEl.innerHTML = group.value;
+
+       rowEl.classList.add("tabulator-print-table-group");
+       rowEl.classList.add("tabulator-group-level-" + row.indent);
+
+       if (group.component.isVisible()) {
+               rowEl.classList.add("tabulator-group-visible");
+       }
+
+       this.mapElementStyles(styles.firstGroup, rowEl, ["border-top", "border-left", "border-right", "border-bottom", "color", "font-weight", "font-family", "font-size", "background-color"]);
+       this.mapElementStyles(styles.firstGroup, cellEl, ["padding-top", "padding-left", "padding-right", "padding-bottom"]);
+
+       rowEl.appendChild(cellEl);
+
+       return rowEl;
+};
+
+Export.prototype.genereateCalcElement = function (row, setup, styles) {
+       var rowEl = this.genereateRowElement(row, setup, styles);
+
+       rowEl.classList.add("tabulator-print-table-calcs");
+       this.mapElementStyles(styles.calcRow, rowEl, ["border-top", "border-left", "border-right", "border-bottom", "color", "font-weight", "font-family", "font-size", "background-color"]);
+
+       return rowEl;
+};
+
+Export.prototype.genereateRowElement = function (row, setup, styles) {
+       var _this7 = this;
+
+       var rowEl = document.createElement("tr");
+
+       rowEl.classList.add("tabulator-print-table-row");
+
+       row.columns.forEach(function (col) {
+
+               if (col) {
+                       var cellEl = document.createElement("td"),
+                           column = col.component._column,
+                           value = col.value;
+
+                       var cellWrapper = {
+                               modules: {},
+                               getValue: function getValue() {
+                                       return value;
+                               },
+                               getField: function getField() {
+                                       return column.definition.field;
+                               },
+                               getElement: function getElement() {
+                                       return cellEl;
+                               },
+                               getColumn: function getColumn() {
+                                       return column.getComponent();
+                               },
+                               getData: function getData() {
+                                       return row.component.getData();
+                               },
+                               getRow: function getRow() {
+                                       return row.component;
+                               },
+                               getComponent: function getComponent() {
+                                       return cellWrapper;
+                               },
+                               column: column
+                       };
+
+                       var classNames = column.definition.cssClass ? column.definition.cssClass.split(" ") : [];
+
+                       classNames.forEach(function (className) {
+                               cellEl.classList.add(className);
+                       });
+
+                       if (_this7.table.modExists("format") && _this7.config.formatCells !== false) {
+                               value = _this7.table.modules.format.formatExportValue(cellWrapper, _this7.colVisProp);
+                       } else {
+                               switch (typeof value === "undefined" ? "undefined" : _typeof(value)) {
+                                       case "object":
+                                               value = JSON.stringify(value);
+                                               break;
+
+                                       case "undefined":
+                                       case "null":
+                                               value = "";
+                                               break;
+
+                                       default:
+                                               value = value;
+                               }
+                       }
+
+                       if (value instanceof Node) {
+                               cellEl.appendChild(value);
+                       } else {
+                               cellEl.innerHTML = value;
+                       }
+
+                       if (styles.firstCell) {
+                               _this7.mapElementStyles(styles.firstCell, cellEl, ["padding-top", "padding-left", "padding-right", "padding-bottom", "border-top", "border-left", "border-right", "border-bottom", "color", "font-weight", "font-family", "font-size"]);
+
+                               if (column.definition.align) {
+                                       cellEl.style.textAlign = column.definition.align;
+                               }
+                       }
+
+                       if (_this7.table.options.dataTree && _this7.config.dataTree !== false) {
+                               if (setup.treeElementField && setup.treeElementField == column.field || !setup.treeElementField && i == 0) {
+                                       if (row.component._row.modules.dataTree.controlEl) {
+                                               cellEl.insertBefore(row.component._row.modules.dataTree.controlEl.cloneNode(true), cellEl.firstChild);
+                                       }
+                                       if (row.component._row.modules.dataTree.branchEl) {
+                                               cellEl.insertBefore(row.component._row.modules.dataTree.branchEl.cloneNode(true), cellEl.firstChild);
+                                       }
+                               }
+                       }
+
+                       rowEl.appendChild(cellEl);
+
+                       if (cellWrapper.modules.format && cellWrapper.modules.format.renderedCallback) {
+                               cellWrapper.modules.format.renderedCallback();
+                       }
+
+                       if (setup.rowFormatter && _this7.config.formatCells !== false) {
+                               setup.rowFormatter(row.component);
+                       }
+               }
+       });
+
+       return rowEl;
+};
+
+Export.prototype.genereateHTMLTable = function (list) {
+       var holder = document.createElement("div");
+
+       holder.appendChild(this.genereateTableElement(list));
+
+       return holder.innerHTML;
+};
+
+Export.prototype.getHtml = function (visible, style, config, colVisProp) {
+       var list = this.generateExportList(config || this.table.options.htmlOutputConfig, style, visible, colVisProp || "htmlOutput");
+
+       return this.genereateHTMLTable(list);
+};
+
+Export.prototype.mapElementStyles = function (from, to, props) {
+       if (this.cloneTableStyle && from && to) {
+
+               var lookup = {
+                       "background-color": "backgroundColor",
+                       "color": "fontColor",
+                       "width": "width",
+                       "font-weight": "fontWeight",
+                       "font-family": "fontFamily",
+                       "font-size": "fontSize",
+                       "text-align": "textAlign",
+                       "border-top": "borderTop",
+                       "border-left": "borderLeft",
+                       "border-right": "borderRight",
+                       "border-bottom": "borderBottom",
+                       "padding-top": "paddingTop",
+                       "padding-left": "paddingLeft",
+                       "padding-right": "paddingRight",
+                       "padding-bottom": "paddingBottom"
+               };
+
+               if (window.getComputedStyle) {
+                       var fromStyle = window.getComputedStyle(from);
+
+                       props.forEach(function (prop) {
+                               to.style[lookup[prop]] = fromStyle.getPropertyValue(prop);
+                       });
+               }
+       }
+};
+
+Tabulator.prototype.registerModule("export", Export);
\ No newline at end of file
diff --git a/website/js/vendor/tabulator/js/modules/export.min.js b/website/js/vendor/tabulator/js/modules/export.min.js
new file mode 100644 (file)
index 0000000..785982a
--- /dev/null
@@ -0,0 +1,2 @@
+/* Tabulator v4.8.3 (c) Oliver Folkerd */
+var _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},ExportRow=function(t,e,o,n){this.type=t,this.columns=e,this.component=o||!1,this.indent=n||0},ExportColumn=function(t,e,o,n,r){this.value=t,this.component=e||!1,this.width=o,this.height=n,this.depth=r},Export=function(t){this.table=t,this.config={},this.cloneTableStyle=!0,this.colVisProp=""};Export.prototype.generateExportList=function(t,e,o,n){this.cloneTableStyle=e,this.config=t||{},this.colVisProp=n;var r=!1!==this.config.columnHeaders?this.headersToExportRows(this.generateColumnGroupHeaders()):[],a=this.bodyToExportRows(this.rowLookup(o));return r.concat(a)},Export.prototype.genereateTable=function(t,e,o,n){var r=this.generateExportList(t,e,o,n);return this.genereateTableElement(r)},Export.prototype.rowLookup=function(t){var e=this,o=[];if("function"==typeof t)t.call(this.table).forEach(function(t){(t=e.table.rowManager.findRow(t))&&o.push(t)});else switch(t){case!0:case"visible":o=this.table.rowManager.getVisibleRows(!0);break;case"all":o=this.table.rowManager.rows;break;case"selected":o=this.table.modules.selectRow.selectedRows;break;case"active":default:o=this.table.options.pagination?this.table.rowManager.getDisplayRows(this.table.rowManager.displayRows.length-2):this.table.rowManager.getDisplayRows()}return Object.assign([],o)},Export.prototype.generateColumnGroupHeaders=function(){var t=this,e=[];return(!1!==this.config.columnGroups?this.table.columnManager.columns:this.table.columnManager.columnsByIndex).forEach(function(o){var n=t.processColumnGroup(o);n&&e.push(n)}),e},Export.prototype.processColumnGroup=function(t){var e=this,o=t.columns,n=0,r=t.definition["title"+(this.colVisProp.charAt(0).toUpperCase()+this.colVisProp.slice(1))]||t.definition.title,a={title:r,column:t,depth:1};if(o.length){if(a.subGroups=[],a.width=0,o.forEach(function(t){var o=e.processColumnGroup(t);o&&(a.width+=o.width,a.subGroups.push(o),o.depth>n&&(n=o.depth))}),a.depth+=n,!a.width)return!1}else{if(!this.columnVisCheck(t))return!1;a.width=1}return a},Export.prototype.columnVisCheck=function(t){return!1!==t.definition[this.colVisProp]&&(t.visible||!t.visible&&t.definition[this.colVisProp])},Export.prototype.headersToExportRows=function(t){function e(t,r){var a=n-r;if(void 0===o[r]&&(o[r]=[]),t.height=t.subGroups?1:a-t.depth+1,o[r].push(t),t.height>1)for(var l=1;l<t.height;l++)void 0===o[r+l]&&(o[r+l]=[]),o[r+l].push(!1);if(t.width>1)for(var i=1;i<t.width;i++)o[r].push(!1);t.subGroups&&t.subGroups.forEach(function(t){e(t,r+1)})}var o=[],n=0,r=[];return t.forEach(function(t){t.depth>n&&(n=t.depth)}),t.forEach(function(t){e(t,0)}),o.forEach(function(t){var e=[];t.forEach(function(t){t?e.push(new ExportColumn(t.title,t.column.getComponent(),t.width,t.height,t.depth)):e.push(null)}),r.push(new ExportRow("header",e))}),r},Export.prototype.bodyToExportRows=function(t){var e=this,o=[],n=[];return this.table.columnManager.columnsByIndex.forEach(function(t){e.columnVisCheck(t)&&o.push(t.getComponent())}),!1!==this.config.columnCalcs&&this.table.modExists("columnCalcs")&&(this.table.modules.columnCalcs.topInitialized&&t.unshift(this.table.modules.columnCalcs.topRow),this.table.modules.columnCalcs.botInitialized&&t.push(this.table.modules.columnCalcs.botRow)),t=t.filter(function(t){switch(t.type){case"group":return!1!==e.config.rowGroups;case"calc":return!1!==e.config.columnCalcs;case"row":return!(e.table.options.dataTree&&!1===e.config.dataTree&&t.modules.dataTree.parent)}return!0}),t.forEach(function(t,r){var a=t.getData(e.colVisProp),l=[],i=0;switch(t.type){case"group":i=t.level,l.push(new ExportColumn(t.key,t.getComponent(),o.length,1));break;case"calc":case"row":o.forEach(function(t){l.push(new ExportColumn(t._column.getFieldValue(a),t,1,1))}),e.table.options.dataTree&&!1!==e.config.dataTree&&(i=t.modules.dataTree.index)}n.push(new ExportRow(t.type,l,t.getComponent(),i))}),n},Export.prototype.genereateTableElement=function(t){var e=this,o=document.createElement("table"),n=document.createElement("thead"),r=document.createElement("tbody"),a=this.lookupTableStyles(),l=this.table.options["rowFormatter"+(this.colVisProp.charAt(0).toUpperCase()+this.colVisProp.slice(1))],i={};return i.rowFormatter=null!==l?l:this.table.options.rowFormatter,this.table.options.dataTree&&!1!==this.config.dataTree&&this.table.modExists("columnCalcs")&&(i.treeElementField=this.table.modules.dataTree.elementField),i.groupHeader=this.table.options["groupHeader"+(this.colVisProp.charAt(0).toUpperCase()+this.colVisProp.slice(1))],i.groupHeader&&!Array.isArray(i.groupHeader)&&(i.groupHeader=[i.groupHeader]),o.classList.add("tabulator-print-table"),this.mapElementStyles(this.table.columnManager.getHeadersElement(),n,["border-top","border-left","border-right","border-bottom","background-color","color","font-weight","font-family","font-size"]),t.length>1e3&&console.warn("It may take a long time to render an HTML table with more than 1000 rows"),t.forEach(function(t,o){switch(t.type){case"header":n.appendChild(e.genereateHeaderElement(t,i,a));break;case"group":r.appendChild(e.genereateGroupElement(t,i,a));break;case"calc":r.appendChild(e.genereateCalcElement(t,i,a));break;case"row":var l=e.genereateRowElement(t,i,a);e.mapElementStyles(o%2&&a.evenRow?a.evenRow:a.oddRow,l,["border-top","border-left","border-right","border-bottom","color","font-weight","font-family","font-size","background-color"]),r.appendChild(l)}}),n.innerHTML&&o.appendChild(n),o.appendChild(r),this.mapElementStyles(this.table.element,o,["border-top","border-left","border-right","border-bottom"]),o},Export.prototype.lookupTableStyles=function(){var t={};return this.cloneTableStyle&&window.getComputedStyle&&(t.oddRow=this.table.element.querySelector(".tabulator-row-odd:not(.tabulator-group):not(.tabulator-calcs)"),t.evenRow=this.table.element.querySelector(".tabulator-row-even:not(.tabulator-group):not(.tabulator-calcs)"),t.calcRow=this.table.element.querySelector(".tabulator-row.tabulator-calcs"),t.firstRow=this.table.element.querySelector(".tabulator-row:not(.tabulator-group):not(.tabulator-calcs)"),t.firstGroup=this.table.element.getElementsByClassName("tabulator-group")[0],t.firstRow&&(t.styleCells=t.firstRow.getElementsByClassName("tabulator-cell"),t.firstCell=t.styleCells[0],t.lastCell=t.styleCells[t.styleCells.length-1])),t},Export.prototype.genereateHeaderElement=function(t,e,o){var n=this,r=document.createElement("tr");return t.columns.forEach(function(t){if(t){var e=document.createElement("th"),o=t.component._column.definition.cssClass?t.component._column.definition.cssClass.split(" "):[];e.colSpan=t.width,e.rowSpan=t.height,e.innerHTML=t.value,n.cloneTableStyle&&(e.style.boxSizing="border-box"),o.forEach(function(t){e.classList.add(t)}),n.mapElementStyles(t.component.getElement(),e,["text-align","border-top","border-left","border-right","border-bottom","background-color","color","font-weight","font-family","font-size"]),n.mapElementStyles(t.component._column.contentElement,e,["padding-top","padding-left","padding-right","padding-bottom"]),t.component._column.visible?n.mapElementStyles(t.component.getElement(),e,["width"]):t.component._column.definition.width&&(e.style.width=t.component._column.definition.width+"px"),t.component._column.parent&&n.mapElementStyles(t.component._column.parent.groupElement,e,["border-top"]),r.appendChild(e)}}),r},Export.prototype.genereateGroupElement=function(t,e,o){var n=document.createElement("tr"),r=document.createElement("td"),a=t.columns[0];return n.classList.add("tabulator-print-table-row"),e.groupHeader&&e.groupHeader[t.indent]?a.value=e.groupHeader[t.indent](a.value,t.component._group.getRowCount(),t.component._group.getData(),t.component):!1===e.groupHeader?a.value=a.value:a.value=t.component._group.generator(a.value,t.component._group.getRowCount(),t.component._group.getData(),t.component),r.colSpan=a.width,r.innerHTML=a.value,n.classList.add("tabulator-print-table-group"),n.classList.add("tabulator-group-level-"+t.indent),a.component.isVisible()&&n.classList.add("tabulator-group-visible"),this.mapElementStyles(o.firstGroup,n,["border-top","border-left","border-right","border-bottom","color","font-weight","font-family","font-size","background-color"]),this.mapElementStyles(o.firstGroup,r,["padding-top","padding-left","padding-right","padding-bottom"]),n.appendChild(r),n},Export.prototype.genereateCalcElement=function(t,e,o){var n=this.genereateRowElement(t,e,o);return n.classList.add("tabulator-print-table-calcs"),this.mapElementStyles(o.calcRow,n,["border-top","border-left","border-right","border-bottom","color","font-weight","font-family","font-size","background-color"]),n},Export.prototype.genereateRowElement=function(t,e,o){var n=this,r=document.createElement("tr");return r.classList.add("tabulator-print-table-row"),t.columns.forEach(function(a){if(a){var l=document.createElement("td"),s=a.component._column,p=a.value,c={modules:{},getValue:function(){return p},getField:function(){return s.definition.field},getElement:function(){return l},getColumn:function(){return s.getComponent()},getData:function(){return t.component.getData()},getRow:function(){return t.component},getComponent:function(){return c},column:s};if((s.definition.cssClass?s.definition.cssClass.split(" "):[]).forEach(function(t){l.classList.add(t)}),n.table.modExists("format")&&!1!==n.config.formatCells)p=n.table.modules.format.formatExportValue(c,n.colVisProp);else switch(void 0===p?"undefined":_typeof(p)){case"object":p=JSON.stringify(p);break;case"undefined":case"null":p="";break;default:p=p}p instanceof Node?l.appendChild(p):l.innerHTML=p,o.firstCell&&(n.mapElementStyles(o.firstCell,l,["padding-top","padding-left","padding-right","padding-bottom","border-top","border-left","border-right","border-bottom","color","font-weight","font-family","font-size"]),s.definition.align&&(l.style.textAlign=s.definition.align)),n.table.options.dataTree&&!1!==n.config.dataTree&&(e.treeElementField&&e.treeElementField==s.field||!e.treeElementField&&0==i)&&(t.component._row.modules.dataTree.controlEl&&l.insertBefore(t.component._row.modules.dataTree.controlEl.cloneNode(!0),l.firstChild),t.component._row.modules.dataTree.branchEl&&l.insertBefore(t.component._row.modules.dataTree.branchEl.cloneNode(!0),l.firstChild)),r.appendChild(l),c.modules.format&&c.modules.format.renderedCallback&&c.modules.format.renderedCallback(),e.rowFormatter&&!1!==n.config.formatCells&&e.rowFormatter(t.component)}}),r},Export.prototype.genereateHTMLTable=function(t){var e=document.createElement("div");return e.appendChild(this.genereateTableElement(t)),e.innerHTML},Export.prototype.getHtml=function(t,e,o,n){var r=this.generateExportList(o||this.table.options.htmlOutputConfig,e,t,n||"htmlOutput");return this.genereateHTMLTable(r)},Export.prototype.mapElementStyles=function(t,e,o){if(this.cloneTableStyle&&t&&e){var n={"background-color":"backgroundColor",color:"fontColor",width:"width","font-weight":"fontWeight","font-family":"fontFamily","font-size":"fontSize","text-align":"textAlign","border-top":"borderTop","border-left":"borderLeft","border-right":"borderRight","border-bottom":"borderBottom","padding-top":"paddingTop","padding-left":"paddingLeft","padding-right":"paddingRight","padding-bottom":"paddingBottom"};if(window.getComputedStyle){var r=window.getComputedStyle(t);o.forEach(function(t){e.style[n[t]]=r.getPropertyValue(t)})}}},Tabulator.prototype.registerModule("export",Export);
\ No newline at end of file
diff --git a/website/js/vendor/tabulator/js/modules/filter.js b/website/js/vendor/tabulator/js/modules/filter.js
new file mode 100644 (file)
index 0000000..7173cd1
--- /dev/null
@@ -0,0 +1,807 @@
+var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
+
+/* Tabulator v4.8.3 (c) Oliver Folkerd */
+
+var Filter = function Filter(table) {
+
+       this.table = table; //hold Tabulator object
+
+       this.filterList = []; //hold filter list
+       this.headerFilters = {}; //hold column filters
+       this.headerFilterColumns = []; //hold columns that use header filters
+
+       this.prevHeaderFilterChangeCheck = "";
+       this.prevHeaderFilterChangeCheck = "{}";
+
+       this.changed = false; //has filtering changed since last render
+};
+
+//initialize column header filter
+Filter.prototype.initializeColumn = function (column, value) {
+       var self = this,
+           field = column.getField(),
+           params;
+
+       //handle successfull value change
+       function success(value) {
+               var filterType = column.modules.filter.tagType == "input" && column.modules.filter.attrType == "text" || column.modules.filter.tagType == "textarea" ? "partial" : "match",
+                   type = "",
+                   filterChangeCheck = "",
+                   filterFunc;
+
+               if (typeof column.modules.filter.prevSuccess === "undefined" || column.modules.filter.prevSuccess !== value) {
+
+                       column.modules.filter.prevSuccess = value;
+
+                       if (!column.modules.filter.emptyFunc(value)) {
+                               column.modules.filter.value = value;
+
+                               switch (_typeof(column.definition.headerFilterFunc)) {
+                                       case "string":
+                                               if (self.filters[column.definition.headerFilterFunc]) {
+                                                       type = column.definition.headerFilterFunc;
+                                                       filterFunc = function filterFunc(data) {
+                                                               var params = column.definition.headerFilterFuncParams || {};
+                                                               var fieldVal = column.getFieldValue(data);
+
+                                                               params = typeof params === "function" ? params(value, fieldVal, data) : params;
+
+                                                               return self.filters[column.definition.headerFilterFunc](value, fieldVal, data, params);
+                                                       };
+                                               } else {
+                                                       console.warn("Header Filter Error - Matching filter function not found: ", column.definition.headerFilterFunc);
+                                               }
+                                               break;
+
+                                       case "function":
+                                               filterFunc = function filterFunc(data) {
+                                                       var params = column.definition.headerFilterFuncParams || {};
+                                                       var fieldVal = column.getFieldValue(data);
+
+                                                       params = typeof params === "function" ? params(value, fieldVal, data) : params;
+
+                                                       return column.definition.headerFilterFunc(value, fieldVal, data, params);
+                                               };
+
+                                               type = filterFunc;
+                                               break;
+                               }
+
+                               if (!filterFunc) {
+                                       switch (filterType) {
+                                               case "partial":
+                                                       filterFunc = function filterFunc(data) {
+                                                               var colVal = column.getFieldValue(data);
+
+                                                               if (typeof colVal !== 'undefined' && colVal !== null) {
+                                                                       return String(colVal).toLowerCase().indexOf(String(value).toLowerCase()) > -1;
+                                                               } else {
+                                                                       return false;
+                                                               }
+                                                       };
+                                                       type = "like";
+                                                       break;
+
+                                               default:
+                                                       filterFunc = function filterFunc(data) {
+                                                               return column.getFieldValue(data) == value;
+                                                       };
+                                                       type = "=";
+                                       }
+                               }
+
+                               self.headerFilters[field] = { value: value, func: filterFunc, type: type, params: params || {} };
+                       } else {
+                               delete self.headerFilters[field];
+                       }
+
+                       filterChangeCheck = JSON.stringify(self.headerFilters);
+
+                       if (self.prevHeaderFilterChangeCheck !== filterChangeCheck) {
+                               self.prevHeaderFilterChangeCheck = filterChangeCheck;
+
+                               self.changed = true;
+                               self.table.rowManager.filterRefresh();
+                       }
+               }
+
+               return true;
+       }
+
+       column.modules.filter = {
+               success: success,
+               attrType: false,
+               tagType: false,
+               emptyFunc: false
+       };
+
+       this.generateHeaderFilterElement(column);
+};
+
+Filter.prototype.generateHeaderFilterElement = function (column, initialValue, reinitialize) {
+       var _this = this;
+
+       var self = this,
+           success = column.modules.filter.success,
+           field = column.getField(),
+           filterElement,
+           editor,
+           editorElement,
+           cellWrapper,
+           typingTimer,
+           searchTrigger,
+           params;
+
+       //handle aborted edit
+       function cancel() {}
+
+       if (column.modules.filter.headerElement && column.modules.filter.headerElement.parentNode) {
+               column.contentElement.removeChild(column.modules.filter.headerElement.parentNode);
+       }
+
+       if (field) {
+
+               //set empty value function
+               column.modules.filter.emptyFunc = column.definition.headerFilterEmptyCheck || function (value) {
+                       return !value && value !== "0";
+               };
+
+               filterElement = document.createElement("div");
+               filterElement.classList.add("tabulator-header-filter");
+
+               //set column editor
+               switch (_typeof(column.definition.headerFilter)) {
+                       case "string":
+                               if (self.table.modules.edit.editors[column.definition.headerFilter]) {
+                                       editor = self.table.modules.edit.editors[column.definition.headerFilter];
+
+                                       if ((column.definition.headerFilter === "tick" || column.definition.headerFilter === "tickCross") && !column.definition.headerFilterEmptyCheck) {
+                                               column.modules.filter.emptyFunc = function (value) {
+                                                       return value !== true && value !== false;
+                                               };
+                                       }
+                               } else {
+                                       console.warn("Filter Error - Cannot build header filter, No such editor found: ", column.definition.editor);
+                               }
+                               break;
+
+                       case "function":
+                               editor = column.definition.headerFilter;
+                               break;
+
+                       case "boolean":
+                               if (column.modules.edit && column.modules.edit.editor) {
+                                       editor = column.modules.edit.editor;
+                               } else {
+                                       if (column.definition.formatter && self.table.modules.edit.editors[column.definition.formatter]) {
+                                               editor = self.table.modules.edit.editors[column.definition.formatter];
+
+                                               if ((column.definition.formatter === "tick" || column.definition.formatter === "tickCross") && !column.definition.headerFilterEmptyCheck) {
+                                                       column.modules.filter.emptyFunc = function (value) {
+                                                               return value !== true && value !== false;
+                                                       };
+                                               }
+                                       } else {
+                                               editor = self.table.modules.edit.editors["input"];
+                                       }
+                               }
+                               break;
+               }
+
+               if (editor) {
+
+                       cellWrapper = {
+                               getValue: function getValue() {
+                                       return typeof initialValue !== "undefined" ? initialValue : "";
+                               },
+                               getField: function getField() {
+                                       return column.definition.field;
+                               },
+                               getElement: function getElement() {
+                                       return filterElement;
+                               },
+                               getColumn: function getColumn() {
+                                       return column.getComponent();
+                               },
+                               getRow: function getRow() {
+                                       return {
+                                               normalizeHeight: function normalizeHeight() {}
+                                       };
+                               }
+                       };
+
+                       params = column.definition.headerFilterParams || {};
+
+                       params = typeof params === "function" ? params.call(self.table) : params;
+
+                       editorElement = editor.call(this.table.modules.edit, cellWrapper, function () {}, success, cancel, params);
+
+                       if (!editorElement) {
+                               console.warn("Filter Error - Cannot add filter to " + field + " column, editor returned a value of false");
+                               return;
+                       }
+
+                       if (!(editorElement instanceof Node)) {
+                               console.warn("Filter Error - Cannot add filter to " + field + " column, editor should return an instance of Node, the editor returned:", editorElement);
+                               return;
+                       }
+
+                       //set Placeholder Text
+                       if (field) {
+                               self.table.modules.localize.bind("headerFilters|columns|" + column.definition.field, function (value) {
+                                       editorElement.setAttribute("placeholder", typeof value !== "undefined" && value ? value : self.table.modules.localize.getText("headerFilters|default"));
+                               });
+                       } else {
+                               self.table.modules.localize.bind("headerFilters|default", function (value) {
+                                       editorElement.setAttribute("placeholder", typeof self.column.definition.headerFilterPlaceholder !== "undefined" && self.column.definition.headerFilterPlaceholder ? self.column.definition.headerFilterPlaceholder : value);
+                               });
+                       }
+
+                       //focus on element on click
+                       editorElement.addEventListener("click", function (e) {
+                               e.stopPropagation();
+                               editorElement.focus();
+                       });
+
+                       editorElement.addEventListener("focus", function (e) {
+                               var left = _this.table.columnManager.element.scrollLeft;
+
+                               if (left !== _this.table.rowManager.element.scrollLeft) {
+                                       _this.table.rowManager.scrollHorizontal(left);
+                                       _this.table.columnManager.scrollHorizontal(left);
+                               }
+                       });
+
+                       //live update filters as user types
+                       typingTimer = false;
+
+                       searchTrigger = function searchTrigger(e) {
+                               if (typingTimer) {
+                                       clearTimeout(typingTimer);
+                               }
+
+                               typingTimer = setTimeout(function () {
+                                       success(editorElement.value);
+                               }, self.table.options.headerFilterLiveFilterDelay);
+                       };
+
+                       column.modules.filter.headerElement = editorElement;
+                       column.modules.filter.attrType = editorElement.hasAttribute("type") ? editorElement.getAttribute("type").toLowerCase() : "";
+                       column.modules.filter.tagType = editorElement.tagName.toLowerCase();
+
+                       if (column.definition.headerFilterLiveFilter !== false) {
+
+                               if (!(column.definition.headerFilter === 'autocomplete' || column.definition.headerFilter === 'tickCross' || (column.definition.editor === 'autocomplete' || column.definition.editor === 'tickCross') && column.definition.headerFilter === true)) {
+                                       editorElement.addEventListener("keyup", searchTrigger);
+                                       editorElement.addEventListener("search", searchTrigger);
+
+                                       //update number filtered columns on change
+                                       if (column.modules.filter.attrType == "number") {
+                                               editorElement.addEventListener("change", function (e) {
+                                                       success(editorElement.value);
+                                               });
+                                       }
+
+                                       //change text inputs to search inputs to allow for clearing of field
+                                       if (column.modules.filter.attrType == "text" && this.table.browser !== "ie") {
+                                               editorElement.setAttribute("type", "search");
+                                               // editorElement.off("change blur"); //prevent blur from triggering filter and preventing selection click
+                                       }
+                               }
+
+                               //prevent input and select elements from propegating click to column sorters etc
+                               if (column.modules.filter.tagType == "input" || column.modules.filter.tagType == "select" || column.modules.filter.tagType == "textarea") {
+                                       editorElement.addEventListener("mousedown", function (e) {
+                                               e.stopPropagation();
+                                       });
+                               }
+                       }
+
+                       filterElement.appendChild(editorElement);
+
+                       column.contentElement.appendChild(filterElement);
+
+                       if (!reinitialize) {
+                               self.headerFilterColumns.push(column);
+                       }
+               }
+       } else {
+               console.warn("Filter Error - Cannot add header filter, column has no field set:", column.definition.title);
+       }
+};
+
+//hide all header filter elements (used to ensure correct column widths in "fitData" layout mode)
+Filter.prototype.hideHeaderFilterElements = function () {
+       this.headerFilterColumns.forEach(function (column) {
+               if (column.modules.filter && column.modules.filter.headerElement) {
+                       column.modules.filter.headerElement.style.display = 'none';
+               }
+       });
+};
+
+//show all header filter elements (used to ensure correct column widths in "fitData" layout mode)
+Filter.prototype.showHeaderFilterElements = function () {
+       this.headerFilterColumns.forEach(function (column) {
+               if (column.modules.filter && column.modules.filter.headerElement) {
+                       column.modules.filter.headerElement.style.display = '';
+               }
+       });
+};
+
+//programatically set focus of header filter
+Filter.prototype.setHeaderFilterFocus = function (column) {
+       if (column.modules.filter && column.modules.filter.headerElement) {
+               column.modules.filter.headerElement.focus();
+       } else {
+               console.warn("Column Filter Focus Error - No header filter set on column:", column.getField());
+       }
+};
+
+//programmatically get value of header filter
+Filter.prototype.getHeaderFilterValue = function (column) {
+       if (column.modules.filter && column.modules.filter.headerElement) {
+               return column.modules.filter.headerElement.value;
+       } else {
+               console.warn("Column Filter Error - No header filter set on column:", column.getField());
+       }
+};
+
+//programatically set value of header filter
+Filter.prototype.setHeaderFilterValue = function (column, value) {
+       if (column) {
+               if (column.modules.filter && column.modules.filter.headerElement) {
+                       this.generateHeaderFilterElement(column, value, true);
+                       column.modules.filter.success(value);
+               } else {
+                       console.warn("Column Filter Error - No header filter set on column:", column.getField());
+               }
+       }
+};
+
+Filter.prototype.reloadHeaderFilter = function (column) {
+       if (column) {
+               if (column.modules.filter && column.modules.filter.headerElement) {
+                       this.generateHeaderFilterElement(column, column.modules.filter.value, true);
+               } else {
+                       console.warn("Column Filter Error - No header filter set on column:", column.getField());
+               }
+       }
+};
+
+//check if the filters has changed since last use
+Filter.prototype.hasChanged = function () {
+       var changed = this.changed;
+       this.changed = false;
+       return changed;
+};
+
+//set standard filters
+Filter.prototype.setFilter = function (field, type, value, params) {
+       var self = this;
+
+       self.filterList = [];
+
+       if (!Array.isArray(field)) {
+               field = [{ field: field, type: type, value: value, params: params }];
+       }
+
+       self.addFilter(field);
+};
+
+//add filter to array
+Filter.prototype.addFilter = function (field, type, value, params) {
+       var self = this;
+
+       if (!Array.isArray(field)) {
+               field = [{ field: field, type: type, value: value, params: params }];
+       }
+
+       field.forEach(function (filter) {
+
+               filter = self.findFilter(filter);
+
+               if (filter) {
+                       self.filterList.push(filter);
+
+                       self.changed = true;
+               }
+       });
+
+       if (this.table.options.persistence && this.table.modExists("persistence", true) && this.table.modules.persistence.config.filter) {
+               this.table.modules.persistence.save("filter");
+       }
+};
+
+Filter.prototype.findFilter = function (filter) {
+       var self = this,
+           column;
+
+       if (Array.isArray(filter)) {
+               return this.findSubFilters(filter);
+       }
+
+       var filterFunc = false;
+
+       if (typeof filter.field == "function") {
+               filterFunc = function filterFunc(data) {
+                       return filter.field(data, filter.type || {}); // pass params to custom filter function
+               };
+       } else {
+
+               if (self.filters[filter.type]) {
+
+                       column = self.table.columnManager.getColumnByField(filter.field);
+
+                       if (column) {
+                               filterFunc = function filterFunc(data) {
+                                       return self.filters[filter.type](filter.value, column.getFieldValue(data), data, filter.params || {});
+                               };
+                       } else {
+                               filterFunc = function filterFunc(data) {
+                                       return self.filters[filter.type](filter.value, data[filter.field], data, filter.params || {});
+                               };
+                       }
+               } else {
+                       console.warn("Filter Error - No such filter type found, ignoring: ", filter.type);
+               }
+       }
+
+       filter.func = filterFunc;
+
+       return filter.func ? filter : false;
+};
+
+Filter.prototype.findSubFilters = function (filters) {
+       var self = this,
+           output = [];
+
+       filters.forEach(function (filter) {
+               filter = self.findFilter(filter);
+
+               if (filter) {
+                       output.push(filter);
+               }
+       });
+
+       return output.length ? output : false;
+};
+
+//get all filters
+Filter.prototype.getFilters = function (all, ajax) {
+       var output = [];
+
+       if (all) {
+               output = this.getHeaderFilters();
+       }
+
+       if (ajax) {
+               output.forEach(function (item) {
+                       if (typeof item.type == "function") {
+                               item.type = "function";
+                       }
+               });
+       }
+
+       output = output.concat(this.filtersToArray(this.filterList, ajax));
+
+       return output;
+};
+
+//filter to Object
+Filter.prototype.filtersToArray = function (filterList, ajax) {
+       var _this2 = this;
+
+       var output = [];
+
+       filterList.forEach(function (filter) {
+               var item;
+
+               if (Array.isArray(filter)) {
+                       output.push(_this2.filtersToArray(filter, ajax));
+               } else {
+                       item = { field: filter.field, type: filter.type, value: filter.value };
+
+                       if (ajax) {
+                               if (typeof item.type == "function") {
+                                       item.type = "function";
+                               }
+                       }
+
+                       output.push(item);
+               }
+       });
+
+       return output;
+};
+
+//get all filters
+Filter.prototype.getHeaderFilters = function () {
+       var self = this,
+           output = [];
+
+       for (var key in this.headerFilters) {
+               output.push({ field: key, type: this.headerFilters[key].type, value: this.headerFilters[key].value });
+       }
+
+       return output;
+};
+
+//remove filter from array
+Filter.prototype.removeFilter = function (field, type, value) {
+       var self = this;
+
+       if (!Array.isArray(field)) {
+               field = [{ field: field, type: type, value: value }];
+       }
+
+       field.forEach(function (filter) {
+               var index = -1;
+
+               if (_typeof(filter.field) == "object") {
+                       index = self.filterList.findIndex(function (element) {
+                               return filter === element;
+                       });
+               } else {
+                       index = self.filterList.findIndex(function (element) {
+                               return filter.field === element.field && filter.type === element.type && filter.value === element.value;
+                       });
+               }
+
+               if (index > -1) {
+                       self.filterList.splice(index, 1);
+                       self.changed = true;
+               } else {
+                       console.warn("Filter Error - No matching filter type found, ignoring: ", filter.type);
+               }
+       });
+
+       if (this.table.options.persistence && this.table.modExists("persistence", true) && this.table.modules.persistence.config.filter) {
+               this.table.modules.persistence.save("filter");
+       }
+};
+
+//clear filters
+Filter.prototype.clearFilter = function (all) {
+       this.filterList = [];
+
+       if (all) {
+               this.clearHeaderFilter();
+       }
+
+       this.changed = true;
+
+       if (this.table.options.persistence && this.table.modExists("persistence", true) && this.table.modules.persistence.config.filter) {
+               this.table.modules.persistence.save("filter");
+       }
+};
+
+//clear header filters
+Filter.prototype.clearHeaderFilter = function () {
+       var self = this;
+
+       this.headerFilters = {};
+       self.prevHeaderFilterChangeCheck = "{}";
+
+       this.headerFilterColumns.forEach(function (column) {
+               column.modules.filter.value = null;
+               column.modules.filter.prevSuccess = undefined;
+               self.reloadHeaderFilter(column);
+       });
+
+       this.changed = true;
+};
+
+//search data and return matching rows
+Filter.prototype.search = function (searchType, field, type, value) {
+       var self = this,
+           activeRows = [],
+           filterList = [];
+
+       if (!Array.isArray(field)) {
+               field = [{ field: field, type: type, value: value }];
+       }
+
+       field.forEach(function (filter) {
+               filter = self.findFilter(filter);
+
+               if (filter) {
+                       filterList.push(filter);
+               }
+       });
+
+       this.table.rowManager.rows.forEach(function (row) {
+               var match = true;
+
+               filterList.forEach(function (filter) {
+                       if (!self.filterRecurse(filter, row.getData())) {
+                               match = false;
+                       }
+               });
+
+               if (match) {
+                       activeRows.push(searchType === "data" ? row.getData("data") : row.getComponent());
+               }
+       });
+
+       return activeRows;
+};
+
+//filter row array
+Filter.prototype.filter = function (rowList, filters) {
+       var self = this,
+           activeRows = [],
+           activeRowComponents = [];
+
+       if (self.table.options.dataFiltering) {
+               self.table.options.dataFiltering.call(self.table, self.getFilters());
+       }
+
+       if (!self.table.options.ajaxFiltering && (self.filterList.length || Object.keys(self.headerFilters).length)) {
+
+               rowList.forEach(function (row) {
+                       if (self.filterRow(row)) {
+                               activeRows.push(row);
+                       }
+               });
+       } else {
+               activeRows = rowList.slice(0);
+       }
+
+       if (self.table.options.dataFiltered) {
+
+               activeRows.forEach(function (row) {
+                       activeRowComponents.push(row.getComponent());
+               });
+
+               self.table.options.dataFiltered.call(self.table, self.getFilters(), activeRowComponents);
+       }
+
+       return activeRows;
+};
+
+//filter individual row
+Filter.prototype.filterRow = function (row, filters) {
+       var self = this,
+           match = true,
+           data = row.getData();
+
+       self.filterList.forEach(function (filter) {
+               if (!self.filterRecurse(filter, data)) {
+                       match = false;
+               }
+       });
+
+       for (var field in self.headerFilters) {
+               if (!self.headerFilters[field].func(data)) {
+                       match = false;
+               }
+       }
+
+       return match;
+};
+
+Filter.prototype.filterRecurse = function (filter, data) {
+       var self = this,
+           match = false;
+
+       if (Array.isArray(filter)) {
+               filter.forEach(function (subFilter) {
+                       if (self.filterRecurse(subFilter, data)) {
+                               match = true;
+                       }
+               });
+       } else {
+               match = filter.func(data);
+       }
+
+       return match;
+};
+
+//list of available filters
+Filter.prototype.filters = {
+
+       //equal to
+       "=": function _(filterVal, rowVal, rowData, filterParams) {
+               return rowVal == filterVal ? true : false;
+       },
+
+       //less than
+       "<": function _(filterVal, rowVal, rowData, filterParams) {
+               return rowVal < filterVal ? true : false;
+       },
+
+       //less than or equal to
+       "<=": function _(filterVal, rowVal, rowData, filterParams) {
+               return rowVal <= filterVal ? true : false;
+       },
+
+       //greater than
+       ">": function _(filterVal, rowVal, rowData, filterParams) {
+               return rowVal > filterVal ? true : false;
+       },
+
+       //greater than or equal to
+       ">=": function _(filterVal, rowVal, rowData, filterParams) {
+               return rowVal >= filterVal ? true : false;
+       },
+
+       //not equal to
+       "!=": function _(filterVal, rowVal, rowData, filterParams) {
+               return rowVal != filterVal ? true : false;
+       },
+
+       "regex": function regex(filterVal, rowVal, rowData, filterParams) {
+
+               if (typeof filterVal == "string") {
+                       filterVal = new RegExp(filterVal);
+               }
+
+               return filterVal.test(rowVal);
+       },
+
+       //contains the string
+       "like": function like(filterVal, rowVal, rowData, filterParams) {
+               if (filterVal === null || typeof filterVal === "undefined") {
+                       return rowVal === filterVal ? true : false;
+               } else {
+                       if (typeof rowVal !== 'undefined' && rowVal !== null) {
+                               return String(rowVal).toLowerCase().indexOf(filterVal.toLowerCase()) > -1;
+                       } else {
+                               return false;
+                       }
+               }
+       },
+
+       //contains the keywords
+       "keywords": function keywords(filterVal, rowVal, rowData, filterParams) {
+               var keywords = filterVal.toLowerCase().split(typeof filterParams.separator === "undefined" ? " " : filterParams.separator),
+                   value = String(rowVal === null || typeof rowVal === "undefined" ? "" : rowVal).toLowerCase(),
+                   matches = [];
+
+               keywords.forEach(function (keyword) {
+                       if (value.includes(keyword)) {
+                               matches.push(true);
+                       }
+               });
+
+               return filterParams.matchAll ? matches.length === keywords.length : !!matches.length;
+       },
+
+       //starts with the string
+       "starts": function starts(filterVal, rowVal, rowData, filterParams) {
+               if (filterVal === null || typeof filterVal === "undefined") {
+                       return rowVal === filterVal ? true : false;
+               } else {
+                       if (typeof rowVal !== 'undefined' && rowVal !== null) {
+                               return String(rowVal).toLowerCase().startsWith(filterVal.toLowerCase());
+                       } else {
+                               return false;
+                       }
+               }
+       },
+
+       //ends with the string
+       "ends": function ends(filterVal, rowVal, rowData, filterParams) {
+               if (filterVal === null || typeof filterVal === "undefined") {
+                       return rowVal === filterVal ? true : false;
+               } else {
+                       if (typeof rowVal !== 'undefined' && rowVal !== null) {
+                               return String(rowVal).toLowerCase().endsWith(filterVal.toLowerCase());
+                       } else {
+                               return false;
+                       }
+               }
+       },
+
+       //in array
+       "in": function _in(filterVal, rowVal, rowData, filterParams) {
+               if (Array.isArray(filterVal)) {
+                       return filterVal.length ? filterVal.indexOf(rowVal) > -1 : true;
+               } else {
+                       console.warn("Filter Error - filter value is not an array:", filterVal);
+                       return false;
+               }
+       }
+};
+
+Tabulator.prototype.registerModule("filter", Filter);
\ No newline at end of file
diff --git a/website/js/vendor/tabulator/js/modules/filter.min.js b/website/js/vendor/tabulator/js/modules/filter.min.js
new file mode 100644 (file)
index 0000000..eace11d
--- /dev/null
@@ -0,0 +1,2 @@
+/* Tabulator v4.8.3 (c) Oliver Folkerd */
+var _typeof="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},Filter=function(e){this.table=e,this.filterList=[],this.headerFilters={},this.headerFilterColumns=[],this.prevHeaderFilterChangeCheck="",this.prevHeaderFilterChangeCheck="{}",this.changed=!1};Filter.prototype.initializeColumn=function(e,t){function r(t){var r,o="input"==e.modules.filter.tagType&&"text"==e.modules.filter.attrType||"textarea"==e.modules.filter.tagType?"partial":"match",a="",s="";if(void 0===e.modules.filter.prevSuccess||e.modules.filter.prevSuccess!==t){if(e.modules.filter.prevSuccess=t,e.modules.filter.emptyFunc(t))delete n.headerFilters[l];else{switch(e.modules.filter.value=t,_typeof(e.definition.headerFilterFunc)){case"string":n.filters[e.definition.headerFilterFunc]?(a=e.definition.headerFilterFunc,r=function(r){var i=e.definition.headerFilterFuncParams||{},l=e.getFieldValue(r);return i="function"==typeof i?i(t,l,r):i,n.filters[e.definition.headerFilterFunc](t,l,r,i)}):console.warn("Header Filter Error - Matching filter function not found: ",e.definition.headerFilterFunc);break;case"function":r=function(r){var i=e.definition.headerFilterFuncParams||{},n=e.getFieldValue(r);return i="function"==typeof i?i(t,n,r):i,e.definition.headerFilterFunc(t,n,r,i)},a=r}if(!r)switch(o){case"partial":r=function(r){var i=e.getFieldValue(r);return void 0!==i&&null!==i&&String(i).toLowerCase().indexOf(String(t).toLowerCase())>-1},a="like";break;default:r=function(r){return e.getFieldValue(r)==t},a="="}n.headerFilters[l]={value:t,func:r,type:a,params:i||{}}}s=JSON.stringify(n.headerFilters),n.prevHeaderFilterChangeCheck!==s&&(n.prevHeaderFilterChangeCheck=s,n.changed=!0,n.table.rowManager.filterRefresh())}return!0}var i,n=this,l=e.getField();e.modules.filter={success:r,attrType:!1,tagType:!1,emptyFunc:!1},this.generateHeaderFilterElement(e)},Filter.prototype.generateHeaderFilterElement=function(e,t,r){function i(){}var n,l,o,a,s,d,u,f=this,c=this,h=e.modules.filter.success,p=e.getField();if(e.modules.filter.headerElement&&e.modules.filter.headerElement.parentNode&&e.contentElement.removeChild(e.modules.filter.headerElement.parentNode),p){switch(e.modules.filter.emptyFunc=e.definition.headerFilterEmptyCheck||function(e){return!e&&"0"!==e},n=document.createElement("div"),n.classList.add("tabulator-header-filter"),_typeof(e.definition.headerFilter)){case"string":c.table.modules.edit.editors[e.definition.headerFilter]?(l=c.table.modules.edit.editors[e.definition.headerFilter],"tick"!==e.definition.headerFilter&&"tickCross"!==e.definition.headerFilter||e.definition.headerFilterEmptyCheck||(e.modules.filter.emptyFunc=function(e){return!0!==e&&!1!==e})):console.warn("Filter Error - Cannot build header filter, No such editor found: ",e.definition.editor);break;case"function":l=e.definition.headerFilter;break;case"boolean":e.modules.edit&&e.modules.edit.editor?l=e.modules.edit.editor:e.definition.formatter&&c.table.modules.edit.editors[e.definition.formatter]?(l=c.table.modules.edit.editors[e.definition.formatter],"tick"!==e.definition.formatter&&"tickCross"!==e.definition.formatter||e.definition.headerFilterEmptyCheck||(e.modules.filter.emptyFunc=function(e){return!0!==e&&!1!==e})):l=c.table.modules.edit.editors.input}if(l){if(a={getValue:function(){return void 0!==t?t:""},getField:function(){return e.definition.field},getElement:function(){return n},getColumn:function(){return e.getComponent()},getRow:function(){return{normalizeHeight:function(){}}}},u=e.definition.headerFilterParams||{},u="function"==typeof u?u.call(c.table):u,!(o=l.call(this.table.modules.edit,a,function(){},h,i,u)))return void console.warn("Filter Error - Cannot add filter to "+p+" column, editor returned a value of false");if(!(o instanceof Node))return void console.warn("Filter Error - Cannot add filter to "+p+" column, editor should return an instance of Node, the editor returned:",o);p?c.table.modules.localize.bind("headerFilters|columns|"+e.definition.field,function(e){o.setAttribute("placeholder",void 0!==e&&e?e:c.table.modules.localize.getText("headerFilters|default"))}):c.table.modules.localize.bind("headerFilters|default",function(e){o.setAttribute("placeholder",void 0!==c.column.definition.headerFilterPlaceholder&&c.column.definition.headerFilterPlaceholder?c.column.definition.headerFilterPlaceholder:e)}),o.addEventListener("click",function(e){e.stopPropagation(),o.focus()}),o.addEventListener("focus",function(e){var t=f.table.columnManager.element.scrollLeft;t!==f.table.rowManager.element.scrollLeft&&(f.table.rowManager.scrollHorizontal(t),f.table.columnManager.scrollHorizontal(t))}),s=!1,d=function(e){s&&clearTimeout(s),s=setTimeout(function(){h(o.value)},c.table.options.headerFilterLiveFilterDelay)},e.modules.filter.headerElement=o,e.modules.filter.attrType=o.hasAttribute("type")?o.getAttribute("type").toLowerCase():"",e.modules.filter.tagType=o.tagName.toLowerCase(),!1!==e.definition.headerFilterLiveFilter&&("autocomplete"!==e.definition.headerFilter&&"tickCross"!==e.definition.headerFilter&&("autocomplete"!==e.definition.editor&&"tickCross"!==e.definition.editor||!0!==e.definition.headerFilter)&&(o.addEventListener("keyup",d),o.addEventListener("search",d),"number"==e.modules.filter.attrType&&o.addEventListener("change",function(e){h(o.value)}),"text"==e.modules.filter.attrType&&"ie"!==this.table.browser&&o.setAttribute("type","search")),"input"!=e.modules.filter.tagType&&"select"!=e.modules.filter.tagType&&"textarea"!=e.modules.filter.tagType||o.addEventListener("mousedown",function(e){e.stopPropagation()})),n.appendChild(o),e.contentElement.appendChild(n),r||c.headerFilterColumns.push(e)}}else console.warn("Filter Error - Cannot add header filter, column has no field set:",e.definition.title)},Filter.prototype.hideHeaderFilterElements=function(){this.headerFilterColumns.forEach(function(e){e.modules.filter&&e.modules.filter.headerElement&&(e.modules.filter.headerElement.style.display="none")})},Filter.prototype.showHeaderFilterElements=function(){this.headerFilterColumns.forEach(function(e){e.modules.filter&&e.modules.filter.headerElement&&(e.modules.filter.headerElement.style.display="")})},Filter.prototype.setHeaderFilterFocus=function(e){e.modules.filter&&e.modules.filter.headerElement?e.modules.filter.headerElement.focus():console.warn("Column Filter Focus Error - No header filter set on column:",e.getField())},Filter.prototype.getHeaderFilterValue=function(e){if(e.modules.filter&&e.modules.filter.headerElement)return e.modules.filter.headerElement.value;console.warn("Column Filter Error - No header filter set on column:",e.getField())},Filter.prototype.setHeaderFilterValue=function(e,t){e&&(e.modules.filter&&e.modules.filter.headerElement?(this.generateHeaderFilterElement(e,t,!0),e.modules.filter.success(t)):console.warn("Column Filter Error - No header filter set on column:",e.getField()))},Filter.prototype.reloadHeaderFilter=function(e){e&&(e.modules.filter&&e.modules.filter.headerElement?this.generateHeaderFilterElement(e,e.modules.filter.value,!0):console.warn("Column Filter Error - No header filter set on column:",e.getField()))},Filter.prototype.hasChanged=function(){var e=this.changed;return this.changed=!1,e},Filter.prototype.setFilter=function(e,t,r,i){var n=this;n.filterList=[],Array.isArray(e)||(e=[{field:e,type:t,value:r,params:i}]),n.addFilter(e)},Filter.prototype.addFilter=function(e,t,r,i){var n=this;Array.isArray(e)||(e=[{field:e,type:t,value:r,params:i}]),e.forEach(function(e){(e=n.findFilter(e))&&(n.filterList.push(e),n.changed=!0)}),this.table.options.persistence&&this.table.modExists("persistence",!0)&&this.table.modules.persistence.config.filter&&this.table.modules.persistence.save("filter")},Filter.prototype.findFilter=function(e){var t,r=this;if(Array.isArray(e))return this.findSubFilters(e);var i=!1;return"function"==typeof e.field?i=function(t){return e.field(t,e.type||{})}:r.filters[e.type]?(t=r.table.columnManager.getColumnByField(e.field),i=t?function(i){return r.filters[e.type](e.value,t.getFieldValue(i),i,e.params||{})}:function(t){return r.filters[e.type](e.value,t[e.field],t,e.params||{})}):console.warn("Filter Error - No such filter type found, ignoring: ",e.type),e.func=i,!!e.func&&e},Filter.prototype.findSubFilters=function(e){var t=this,r=[];return e.forEach(function(e){(e=t.findFilter(e))&&r.push(e)}),!!r.length&&r},Filter.prototype.getFilters=function(e,t){var r=[];return e&&(r=this.getHeaderFilters()),t&&r.forEach(function(e){"function"==typeof e.type&&(e.type="function")}),r=r.concat(this.filtersToArray(this.filterList,t))},Filter.prototype.filtersToArray=function(e,t){var r=this,i=[];return e.forEach(function(e){var n;Array.isArray(e)?i.push(r.filtersToArray(e,t)):(n={field:e.field,type:e.type,value:e.value},t&&"function"==typeof n.type&&(n.type="function"),i.push(n))}),i},Filter.prototype.getHeaderFilters=function(){var e=[];for(var t in this.headerFilters)e.push({field:t,type:this.headerFilters[t].type,value:this.headerFilters[t].value});return e},Filter.prototype.removeFilter=function(e,t,r){var i=this;Array.isArray(e)||(e=[{field:e,type:t,value:r}]),e.forEach(function(e){var t=-1;t="object"==_typeof(e.field)?i.filterList.findIndex(function(t){return e===t}):i.filterList.findIndex(function(t){return e.field===t.field&&e.type===t.type&&e.value===t.value}),t>-1?(i.filterList.splice(t,1),i.changed=!0):console.warn("Filter Error - No matching filter type found, ignoring: ",e.type)}),this.table.options.persistence&&this.table.modExists("persistence",!0)&&this.table.modules.persistence.config.filter&&this.table.modules.persistence.save("filter")},Filter.prototype.clearFilter=function(e){this.filterList=[],e&&this.clearHeaderFilter(),this.changed=!0,this.table.options.persistence&&this.table.modExists("persistence",!0)&&this.table.modules.persistence.config.filter&&this.table.modules.persistence.save("filter")},Filter.prototype.clearHeaderFilter=function(){var e=this;this.headerFilters={},e.prevHeaderFilterChangeCheck="{}",this.headerFilterColumns.forEach(function(t){t.modules.filter.value=null,t.modules.filter.prevSuccess=void 0,e.reloadHeaderFilter(t)}),this.changed=!0},Filter.prototype.search=function(e,t,r,i){var n=this,l=[],o=[];return Array.isArray(t)||(t=[{field:t,type:r,value:i}]),t.forEach(function(e){(e=n.findFilter(e))&&o.push(e)}),this.table.rowManager.rows.forEach(function(t){var r=!0;o.forEach(function(e){n.filterRecurse(e,t.getData())||(r=!1)}),r&&l.push("data"===e?t.getData("data"):t.getComponent())}),l},Filter.prototype.filter=function(e,t){var r=this,i=[],n=[];return r.table.options.dataFiltering&&r.table.options.dataFiltering.call(r.table,r.getFilters()),r.table.options.ajaxFiltering||!r.filterList.length&&!Object.keys(r.headerFilters).length?i=e.slice(0):e.forEach(function(e){r.filterRow(e)&&i.push(e)}),r.table.options.dataFiltered&&(i.forEach(function(e){n.push(e.getComponent())}),r.table.options.dataFiltered.call(r.table,r.getFilters(),n)),i},Filter.prototype.filterRow=function(e,t){var r=this,i=!0,n=e.getData();r.filterList.forEach(function(e){r.filterRecurse(e,n)||(i=!1)});for(var l in r.headerFilters)r.headerFilters[l].func(n)||(i=!1);return i},Filter.prototype.filterRecurse=function(e,t){var r=this,i=!1;return Array.isArray(e)?e.forEach(function(e){r.filterRecurse(e,t)&&(i=!0)}):i=e.func(t),i},Filter.prototype.filters={"=":function(e,t,r,i){return t==e},"<":function(e,t,r,i){return t<e},"<=":function(e,t,r,i){return t<=e},">":function(e,t,r,i){return t>e},">=":function(e,t,r,i){return t>=e},"!=":function(e,t,r,i){return t!=e},regex:function(e,t,r,i){return"string"==typeof e&&(e=new RegExp(e)),e.test(t)},like:function(e,t,r,i){return null===e||void 0===e?t===e:void 0!==t&&null!==t&&String(t).toLowerCase().indexOf(e.toLowerCase())>-1},keywords:function(e,t,r,i){var n=e.toLowerCase().split(void 0===i.separator?" ":i.separator),l=String(null===t||void 0===t?"":t).toLowerCase(),o=[];return n.forEach(function(e){l.includes(e)&&o.push(!0)}),i.matchAll?o.length===n.length:!!o.length},starts:function(e,t,r,i){return null===e||void 0===e?t===e:void 0!==t&&null!==t&&String(t).toLowerCase().startsWith(e.toLowerCase())},ends:function(e,t,r,i){return null===e||void 0===e?t===e:void 0!==t&&null!==t&&String(t).toLowerCase().endsWith(e.toLowerCase())},in:function(e,t,r,i){return Array.isArray(e)?!e.length||e.indexOf(t)>-1:(console.warn("Filter Error - filter value is not an array:",e),!1)}},Tabulator.prototype.registerModule("filter",Filter);
\ No newline at end of file
diff --git a/website/js/vendor/tabulator/js/modules/format.js b/website/js/vendor/tabulator/js/modules/format.js
new file mode 100644 (file)
index 0000000..8c77ec2
--- /dev/null
@@ -0,0 +1,733 @@
+var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
+
+/* Tabulator v4.8.3 (c) Oliver Folkerd */
+
+var Format = function Format(table) {
+       this.table = table; //hold Tabulator object
+};
+
+//initialize column formatter
+Format.prototype.initializeColumn = function (column) {
+       column.modules.format = this.lookupFormatter(column, "");
+
+       if (typeof column.definition.formatterPrint !== "undefined") {
+               column.modules.format.print = this.lookupFormatter(column, "Print");
+       }
+
+       if (typeof column.definition.formatterClipboard !== "undefined") {
+               column.modules.format.clipboard = this.lookupFormatter(column, "Clipboard");
+       }
+
+       if (typeof column.definition.formatterHtmlOutput !== "undefined") {
+               column.modules.format.htmlOutput = this.lookupFormatter(column, "HtmlOutput");
+       }
+};
+
+Format.prototype.lookupFormatter = function (column, type) {
+       var config = { params: column.definition["formatter" + type + "Params"] || {} },
+           formatter = column.definition["formatter" + type];
+
+       //set column formatter
+       switch (typeof formatter === "undefined" ? "undefined" : _typeof(formatter)) {
+               case "string":
+
+                       if (formatter === "tick") {
+                               formatter = "tickCross";
+
+                               if (typeof config.params.crossElement == "undefined") {
+                                       config.params.crossElement = false;
+                               }
+
+                               console.warn("DEPRECATION WARNING - the tick formatter has been deprecated, please use the tickCross formatter with the crossElement param set to false");
+                       }
+
+                       if (this.formatters[formatter]) {
+                               config.formatter = this.formatters[formatter];
+                       } else {
+                               console.warn("Formatter Error - No such formatter found: ", formatter);
+                               config.formatter = this.formatters.plaintext;
+                       }
+                       break;
+
+               case "function":
+                       config.formatter = formatter;
+                       break;
+
+               default:
+                       config.formatter = this.formatters.plaintext;
+                       break;
+       }
+
+       return config;
+};
+
+Format.prototype.cellRendered = function (cell) {
+       if (cell.modules.format && cell.modules.format.renderedCallback && !cell.modules.format.rendered) {
+               cell.modules.format.renderedCallback();
+               cell.modules.format.rendered = true;
+       }
+};
+
+//return a formatted value for a cell
+Format.prototype.formatValue = function (cell) {
+       var component = cell.getComponent(),
+           params = typeof cell.column.modules.format.params === "function" ? cell.column.modules.format.params(component) : cell.column.modules.format.params;
+
+       function onRendered(callback) {
+               if (!cell.modules.format) {
+                       cell.modules.format = {};
+               }
+
+               cell.modules.format.renderedCallback = callback;
+               cell.modules.format.rendered = false;
+       }
+
+       return cell.column.modules.format.formatter.call(this, component, params, onRendered);
+};
+
+Format.prototype.formatExportValue = function (cell, type) {
+       var formatter = cell.column.modules.format[type],
+           params;
+
+       if (formatter) {
+               var onRendered = function onRendered(callback) {
+                       if (!cell.modules.format) {
+                               cell.modules.format = {};
+                       }
+
+                       cell.modules.format.renderedCallback = callback;
+                       cell.modules.format.rendered = false;
+               };
+
+               params = typeof formatter.params === "function" ? formatter.params(component) : formatter.params;
+
+               return formatter.formatter.call(this, cell.getComponent(), params, onRendered);
+       } else {
+               return this.formatValue(cell);
+       }
+};
+
+Format.prototype.sanitizeHTML = function (value) {
+       if (value) {
+               var entityMap = {
+                       '&': '&amp;',
+                       '<': '&lt;',
+                       '>': '&gt;',
+                       '"': '&quot;',
+                       "'": '&#39;',
+                       '/': '&#x2F;',
+                       '`': '&#x60;',
+                       '=': '&#x3D;'
+               };
+
+               return String(value).replace(/[&<>"'`=\/]/g, function (s) {
+                       return entityMap[s];
+               });
+       } else {
+               return value;
+       }
+};
+
+Format.prototype.emptyToSpace = function (value) {
+       return value === null || typeof value === "undefined" || value === "" ? "&nbsp;" : value;
+};
+
+//get formatter for cell
+Format.prototype.getFormatter = function (formatter) {
+       var formatter;
+
+       switch (typeof formatter === "undefined" ? "undefined" : _typeof(formatter)) {
+               case "string":
+                       if (this.formatters[formatter]) {
+                               formatter = this.formatters[formatter];
+                       } else {
+                               console.warn("Formatter Error - No such formatter found: ", formatter);
+                               formatter = this.formatters.plaintext;
+                       }
+                       break;
+
+               case "function":
+                       formatter = formatter;
+                       break;
+
+               default:
+                       formatter = this.formatters.plaintext;
+                       break;
+       }
+
+       return formatter;
+};
+
+//default data formatters
+Format.prototype.formatters = {
+       //plain text value
+       plaintext: function plaintext(cell, formatterParams, onRendered) {
+               return this.emptyToSpace(this.sanitizeHTML(cell.getValue()));
+       },
+
+       //html text value
+       html: function html(cell, formatterParams, onRendered) {
+               return cell.getValue();
+       },
+
+       //multiline text area
+       textarea: function textarea(cell, formatterParams, onRendered) {
+               cell.getElement().style.whiteSpace = "pre-wrap";
+               return this.emptyToSpace(this.sanitizeHTML(cell.getValue()));
+       },
+
+       //currency formatting
+       money: function money(cell, formatterParams, onRendered) {
+               var floatVal = parseFloat(cell.getValue()),
+                   number,
+                   integer,
+                   decimal,
+                   rgx;
+
+               var decimalSym = formatterParams.decimal || ".";
+               var thousandSym = formatterParams.thousand || ",";
+               var symbol = formatterParams.symbol || "";
+               var after = !!formatterParams.symbolAfter;
+               var precision = typeof formatterParams.precision !== "undefined" ? formatterParams.precision : 2;
+
+               if (isNaN(floatVal)) {
+                       return this.emptyToSpace(this.sanitizeHTML(cell.getValue()));
+               }
+
+               number = precision !== false ? floatVal.toFixed(precision) : floatVal;
+               number = String(number).split(".");
+
+               integer = number[0];
+               decimal = number.length > 1 ? decimalSym + number[1] : "";
+
+               rgx = /(\d+)(\d{3})/;
+
+               while (rgx.test(integer)) {
+                       integer = integer.replace(rgx, "$1" + thousandSym + "$2");
+               }
+
+               return after ? integer + decimal + symbol : symbol + integer + decimal;
+       },
+
+       //clickable anchor tag
+       link: function link(cell, formatterParams, onRendered) {
+               var value = cell.getValue(),
+                   urlPrefix = formatterParams.urlPrefix || "",
+                   download = formatterParams.download,
+                   label = value,
+                   el = document.createElement("a"),
+                   data;
+
+               if (formatterParams.labelField) {
+                       data = cell.getData();
+                       label = data[formatterParams.labelField];
+               }
+
+               if (formatterParams.label) {
+                       switch (_typeof(formatterParams.label)) {
+                               case "string":
+                                       label = formatterParams.label;
+                                       break;
+
+                               case "function":
+                                       label = formatterParams.label(cell);
+                                       break;
+                       }
+               }
+
+               if (label) {
+                       if (formatterParams.urlField) {
+                               data = cell.getData();
+                               value = data[formatterParams.urlField];
+                       }
+
+                       if (formatterParams.url) {
+                               switch (_typeof(formatterParams.url)) {
+                                       case "string":
+                                               value = formatterParams.url;
+                                               break;
+
+                                       case "function":
+                                               value = formatterParams.url(cell);
+                                               break;
+                               }
+                       }
+
+                       el.setAttribute("href", urlPrefix + value);
+
+                       if (formatterParams.target) {
+                               el.setAttribute("target", formatterParams.target);
+                       }
+
+                       if (formatterParams.download) {
+
+                               if (typeof download == "function") {
+                                       download = download(cell);
+                               } else {
+                                       download = download === true ? "" : download;
+                               }
+
+                               el.setAttribute("download", download);
+                       }
+
+                       el.innerHTML = this.emptyToSpace(this.sanitizeHTML(label));
+
+                       return el;
+               } else {
+                       return "&nbsp;";
+               }
+       },
+
+       //image element
+       image: function image(cell, formatterParams, onRendered) {
+               var el = document.createElement("img");
+               el.setAttribute("src", cell.getValue());
+
+               switch (_typeof(formatterParams.height)) {
+                       case "number":
+                               el.style.height = formatterParams.height + "px";
+                               break;
+
+                       case "string":
+                               el.style.height = formatterParams.height;
+                               break;
+               }
+
+               switch (_typeof(formatterParams.width)) {
+                       case "number":
+                               el.style.width = formatterParams.width + "px";
+                               break;
+
+                       case "string":
+                               el.style.width = formatterParams.width;
+                               break;
+               }
+
+               el.addEventListener("load", function () {
+                       cell.getRow().normalizeHeight();
+               });
+
+               return el;
+       },
+
+       //tick or cross
+       tickCross: function tickCross(cell, formatterParams, onRendered) {
+               var value = cell.getValue(),
+                   element = cell.getElement(),
+                   empty = formatterParams.allowEmpty,
+                   truthy = formatterParams.allowTruthy,
+                   tick = typeof formatterParams.tickElement !== "undefined" ? formatterParams.tickElement : '<svg enable-background="new 0 0 24 24" height="14" width="14" viewBox="0 0 24 24" xml:space="preserve" ><path fill="#2DC214" clip-rule="evenodd" d="M21.652,3.211c-0.293-0.295-0.77-0.295-1.061,0L9.41,14.34  c-0.293,0.297-0.771,0.297-1.062,0L3.449,9.351C3.304,9.203,3.114,9.13,2.923,9.129C2.73,9.128,2.534,9.201,2.387,9.351  l-2.165,1.946C0.078,11.445,0,11.63,0,11.823c0,0.194,0.078,0.397,0.223,0.544l4.94,5.184c0.292,0.296,0.771,0.776,1.062,1.07  l2.124,2.141c0.292,0.293,0.769,0.293,1.062,0l14.366-14.34c0.293-0.294,0.293-0.777,0-1.071L21.652,3.211z" fill-rule="evenodd"/></svg>',
+                   cross = typeof formatterParams.crossElement !== "undefined" ? formatterParams.crossElement : '<svg enable-background="new 0 0 24 24" height="14" width="14"  viewBox="0 0 24 24" xml:space="preserve" ><path fill="#CE1515" d="M22.245,4.015c0.313,0.313,0.313,0.826,0,1.139l-6.276,6.27c-0.313,0.312-0.313,0.826,0,1.14l6.273,6.272  c0.313,0.313,0.313,0.826,0,1.14l-2.285,2.277c-0.314,0.312-0.828,0.312-1.142,0l-6.271-6.271c-0.313-0.313-0.828-0.313-1.141,0  l-6.276,6.267c-0.313,0.313-0.828,0.313-1.141,0l-2.282-2.28c-0.313-0.313-0.313-0.826,0-1.14l6.278-6.269  c0.313-0.312,0.313-0.826,0-1.14L1.709,5.147c-0.314-0.313-0.314-0.827,0-1.14l2.284-2.278C4.308,1.417,4.821,1.417,5.135,1.73  L11.405,8c0.314,0.314,0.828,0.314,1.141,0.001l6.276-6.267c0.312-0.312,0.826-0.312,1.141,0L22.245,4.015z"/></svg>';
+
+               if (truthy && value || value === true || value === "true" || value === "True" || value === 1 || value === "1") {
+                       element.setAttribute("aria-checked", true);
+                       return tick || "";
+               } else {
+                       if (empty && (value === "null" || value === "" || value === null || typeof value === "undefined")) {
+                               element.setAttribute("aria-checked", "mixed");
+                               return "";
+                       } else {
+                               element.setAttribute("aria-checked", false);
+                               return cross || "";
+                       }
+               }
+       },
+
+       datetime: function datetime(cell, formatterParams, onRendered) {
+               var inputFormat = formatterParams.inputFormat || "YYYY-MM-DD hh:mm:ss";
+               var outputFormat = formatterParams.outputFormat || "DD/MM/YYYY hh:mm:ss";
+               var invalid = typeof formatterParams.invalidPlaceholder !== "undefined" ? formatterParams.invalidPlaceholder : "";
+               var value = cell.getValue();
+
+               var newDatetime = moment(value, inputFormat);
+
+               if (newDatetime.isValid()) {
+                       return formatterParams.timezone ? newDatetime.tz(formatterParams.timezone).format(outputFormat) : newDatetime.format(outputFormat);
+               } else {
+
+                       if (invalid === true) {
+                               return value;
+                       } else if (typeof invalid === "function") {
+                               return invalid(value);
+                       } else {
+                               return invalid;
+                       }
+               }
+       },
+
+       datetimediff: function datetime(cell, formatterParams, onRendered) {
+               var inputFormat = formatterParams.inputFormat || "YYYY-MM-DD hh:mm:ss";
+               var invalid = typeof formatterParams.invalidPlaceholder !== "undefined" ? formatterParams.invalidPlaceholder : "";
+               var suffix = typeof formatterParams.suffix !== "undefined" ? formatterParams.suffix : false;
+               var unit = typeof formatterParams.unit !== "undefined" ? formatterParams.unit : undefined;
+               var humanize = typeof formatterParams.humanize !== "undefined" ? formatterParams.humanize : false;
+               var date = typeof formatterParams.date !== "undefined" ? formatterParams.date : moment();
+               var value = cell.getValue();
+
+               var newDatetime = moment(value, inputFormat);
+
+               if (newDatetime.isValid()) {
+                       if (humanize) {
+                               return moment.duration(newDatetime.diff(date)).humanize(suffix);
+                       } else {
+                               return newDatetime.diff(date, unit) + (suffix ? " " + suffix : "");
+                       }
+               } else {
+
+                       if (invalid === true) {
+                               return value;
+                       } else if (typeof invalid === "function") {
+                               return invalid(value);
+                       } else {
+                               return invalid;
+                       }
+               }
+       },
+
+       //select
+       lookup: function lookup(cell, formatterParams, onRendered) {
+               var value = cell.getValue();
+
+               if (typeof formatterParams[value] === "undefined") {
+                       console.warn('Missing display value for ' + value);
+                       return value;
+               }
+
+               return formatterParams[value];
+       },
+
+       //star rating
+       star: function star(cell, formatterParams, onRendered) {
+               var value = cell.getValue(),
+                   element = cell.getElement(),
+                   maxStars = formatterParams && formatterParams.stars ? formatterParams.stars : 5,
+                   stars = document.createElement("span"),
+                   star = document.createElementNS('http://www.w3.org/2000/svg', "svg"),
+                   starActive = '<polygon fill="#FFEA00" stroke="#C1AB60" stroke-width="37.6152" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" points="259.216,29.942 330.27,173.919 489.16,197.007 374.185,309.08 401.33,467.31 259.216,392.612 117.104,467.31 144.25,309.08 29.274,197.007 188.165,173.919 "/>',
+                   starInactive = '<polygon fill="#D2D2D2" stroke="#686868" stroke-width="37.6152" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" points="259.216,29.942 330.27,173.919 489.16,197.007 374.185,309.08 401.33,467.31 259.216,392.612 117.104,467.31 144.25,309.08 29.274,197.007 188.165,173.919 "/>';
+
+               //style stars holder
+               stars.style.verticalAlign = "middle";
+
+               //style star
+               star.setAttribute("width", "14");
+               star.setAttribute("height", "14");
+               star.setAttribute("viewBox", "0 0 512 512");
+               star.setAttribute("xml:space", "preserve");
+               star.style.padding = "0 1px";
+
+               value = value && !isNaN(value) ? parseInt(value) : 0;
+
+               value = Math.max(0, Math.min(value, maxStars));
+
+               for (var i = 1; i <= maxStars; i++) {
+                       var nextStar = star.cloneNode(true);
+                       nextStar.innerHTML = i <= value ? starActive : starInactive;
+
+                       stars.appendChild(nextStar);
+               }
+
+               element.style.whiteSpace = "nowrap";
+               element.style.overflow = "hidden";
+               element.style.textOverflow = "ellipsis";
+
+               element.setAttribute("aria-label", value);
+
+               return stars;
+       },
+
+       traffic: function traffic(cell, formatterParams, onRendered) {
+               var value = this.sanitizeHTML(cell.getValue()) || 0,
+                   el = document.createElement("span"),
+                   max = formatterParams && formatterParams.max ? formatterParams.max : 100,
+                   min = formatterParams && formatterParams.min ? formatterParams.min : 0,
+                   colors = formatterParams && typeof formatterParams.color !== "undefined" ? formatterParams.color : ["red", "orange", "green"],
+                   color = "#666666",
+                   percent,
+                   percentValue;
+
+               if (isNaN(value) || typeof cell.getValue() === "undefined") {
+                       return;
+               }
+
+               el.classList.add("tabulator-traffic-light");
+
+               //make sure value is in range
+               percentValue = parseFloat(value) <= max ? parseFloat(value) : max;
+               percentValue = parseFloat(percentValue) >= min ? parseFloat(percentValue) : min;
+
+               //workout percentage
+               percent = (max - min) / 100;
+               percentValue = Math.round((percentValue - min) / percent);
+
+               //set color
+               switch (typeof colors === "undefined" ? "undefined" : _typeof(colors)) {
+                       case "string":
+                               color = colors;
+                               break;
+                       case "function":
+                               color = colors(value);
+                               break;
+                       case "object":
+                               if (Array.isArray(colors)) {
+                                       var unit = 100 / colors.length;
+                                       var index = Math.floor(percentValue / unit);
+
+                                       index = Math.min(index, colors.length - 1);
+                                       index = Math.max(index, 0);
+                                       color = colors[index];
+                                       break;
+                               }
+               }
+
+               el.style.backgroundColor = color;
+
+               return el;
+       },
+
+       //progress bar
+       progress: function progress(cell, formatterParams, onRendered) {
+               //progress bar
+               var value = this.sanitizeHTML(cell.getValue()) || 0,
+                   element = cell.getElement(),
+                   max = formatterParams && formatterParams.max ? formatterParams.max : 100,
+                   min = formatterParams && formatterParams.min ? formatterParams.min : 0,
+                   legendAlign = formatterParams && formatterParams.legendAlign ? formatterParams.legendAlign : "center",
+                   percent,
+                   percentValue,
+                   color,
+                   legend,
+                   legendColor,
+                   top,
+                   left,
+                   right,
+                   bottom;
+
+               //make sure value is in range
+               percentValue = parseFloat(value) <= max ? parseFloat(value) : max;
+               percentValue = parseFloat(percentValue) >= min ? parseFloat(percentValue) : min;
+
+               //workout percentage
+               percent = (max - min) / 100;
+               percentValue = Math.round((percentValue - min) / percent);
+
+               //set bar color
+               switch (_typeof(formatterParams.color)) {
+                       case "string":
+                               color = formatterParams.color;
+                               break;
+                       case "function":
+                               color = formatterParams.color(value);
+                               break;
+                       case "object":
+                               if (Array.isArray(formatterParams.color)) {
+                                       var unit = 100 / formatterParams.color.length;
+                                       var index = Math.floor(percentValue / unit);
+
+                                       index = Math.min(index, formatterParams.color.length - 1);
+                                       index = Math.max(index, 0);
+                                       color = formatterParams.color[index];
+                                       break;
+                               }
+                       default:
+                               color = "#2DC214";
+               }
+
+               //generate legend
+               switch (_typeof(formatterParams.legend)) {
+                       case "string":
+                               legend = formatterParams.legend;
+                               break;
+                       case "function":
+                               legend = formatterParams.legend(value);
+                               break;
+                       case "boolean":
+                               legend = value;
+                               break;
+                       default:
+                               legend = false;
+               }
+
+               //set legend color
+               switch (_typeof(formatterParams.legendColor)) {
+                       case "string":
+                               legendColor = formatterParams.legendColor;
+                               break;
+                       case "function":
+                               legendColor = formatterParams.legendColor(value);
+                               break;
+                       case "object":
+                               if (Array.isArray(formatterParams.legendColor)) {
+                                       var unit = 100 / formatterParams.legendColor.length;
+                                       var index = Math.floor(percentValue / unit);
+
+                                       index = Math.min(index, formatterParams.legendColor.length - 1);
+                                       index = Math.max(index, 0);
+                                       legendColor = formatterParams.legendColor[index];
+                               }
+                               break;
+                       default:
+                               legendColor = "#000";
+               }
+
+               element.style.minWidth = "30px";
+               element.style.position = "relative";
+
+               element.setAttribute("aria-label", percentValue);
+
+               var barEl = document.createElement("div");
+               barEl.style.display = "inline-block";
+               barEl.style.position = "relative";
+               barEl.style.width = percentValue + "%";
+               barEl.style.backgroundColor = color;
+               barEl.style.height = "100%";
+
+               barEl.setAttribute('data-max', max);
+               barEl.setAttribute('data-min', min);
+
+               if (legend) {
+                       var legendEl = document.createElement("div");
+                       legendEl.style.position = "absolute";
+                       legendEl.style.top = "4px";
+                       legendEl.style.left = 0;
+                       legendEl.style.textAlign = legendAlign;
+                       legendEl.style.width = "100%";
+                       legendEl.style.color = legendColor;
+                       legendEl.innerHTML = legend;
+               }
+
+               onRendered(function () {
+
+                       //handle custom element needed if formatter is to be included in printed/downloaded output
+                       if (!(cell instanceof CellComponent)) {
+                               var holderEl = document.createElement("div");
+                               holderEl.style.position = "absolute";
+                               holderEl.style.top = "4px";
+                               holderEl.style.bottom = "4px";
+                               holderEl.style.left = "4px";
+                               holderEl.style.right = "4px";
+
+                               element.appendChild(holderEl);
+
+                               element = holderEl;
+                       }
+
+                       element.appendChild(barEl);
+
+                       if (legend) {
+                               element.appendChild(legendEl);
+                       }
+               });
+
+               return "";
+       },
+
+       //background color
+       color: function color(cell, formatterParams, onRendered) {
+               cell.getElement().style.backgroundColor = this.sanitizeHTML(cell.getValue());
+               return "";
+       },
+
+       //tick icon
+       buttonTick: function buttonTick(cell, formatterParams, onRendered) {
+               return '<svg enable-background="new 0 0 24 24" height="14" width="14" viewBox="0 0 24 24" xml:space="preserve" ><path fill="#2DC214" clip-rule="evenodd" d="M21.652,3.211c-0.293-0.295-0.77-0.295-1.061,0L9.41,14.34  c-0.293,0.297-0.771,0.297-1.062,0L3.449,9.351C3.304,9.203,3.114,9.13,2.923,9.129C2.73,9.128,2.534,9.201,2.387,9.351  l-2.165,1.946C0.078,11.445,0,11.63,0,11.823c0,0.194,0.078,0.397,0.223,0.544l4.94,5.184c0.292,0.296,0.771,0.776,1.062,1.07  l2.124,2.141c0.292,0.293,0.769,0.293,1.062,0l14.366-14.34c0.293-0.294,0.293-0.777,0-1.071L21.652,3.211z" fill-rule="evenodd"/></svg>';
+       },
+
+       //cross icon
+       buttonCross: function buttonCross(cell, formatterParams, onRendered) {
+               return '<svg enable-background="new 0 0 24 24" height="14" width="14" viewBox="0 0 24 24" xml:space="preserve" ><path fill="#CE1515" d="M22.245,4.015c0.313,0.313,0.313,0.826,0,1.139l-6.276,6.27c-0.313,0.312-0.313,0.826,0,1.14l6.273,6.272  c0.313,0.313,0.313,0.826,0,1.14l-2.285,2.277c-0.314,0.312-0.828,0.312-1.142,0l-6.271-6.271c-0.313-0.313-0.828-0.313-1.141,0  l-6.276,6.267c-0.313,0.313-0.828,0.313-1.141,0l-2.282-2.28c-0.313-0.313-0.313-0.826,0-1.14l6.278-6.269  c0.313-0.312,0.313-0.826,0-1.14L1.709,5.147c-0.314-0.313-0.314-0.827,0-1.14l2.284-2.278C4.308,1.417,4.821,1.417,5.135,1.73  L11.405,8c0.314,0.314,0.828,0.314,1.141,0.001l6.276-6.267c0.312-0.312,0.826-0.312,1.141,0L22.245,4.015z"/></svg>';
+       },
+
+       //current row number
+       rownum: function rownum(cell, formatterParams, onRendered) {
+               return this.table.rowManager.activeRows.indexOf(cell.getRow()._getSelf()) + 1;
+       },
+
+       //row handle
+       handle: function handle(cell, formatterParams, onRendered) {
+               cell.getElement().classList.add("tabulator-row-handle");
+               return "<div class='tabulator-row-handle-box'><div class='tabulator-row-handle-bar'></div><div class='tabulator-row-handle-bar'></div><div class='tabulator-row-handle-bar'></div></div>";
+       },
+
+       responsiveCollapse: function responsiveCollapse(cell, formatterParams, onRendered) {
+               var self = this,
+                   open = false,
+                   el = document.createElement("div"),
+                   config = cell.getRow()._row.modules.responsiveLayout;
+
+               el.classList.add("tabulator-responsive-collapse-toggle");
+               el.innerHTML = "<span class='tabulator-responsive-collapse-toggle-open'>+</span><span class='tabulator-responsive-collapse-toggle-close'>-</span>";
+
+               cell.getElement().classList.add("tabulator-row-handle");
+
+               function toggleList(isOpen) {
+                       var collapseEl = config.element;
+
+                       config.open = isOpen;
+
+                       if (collapseEl) {
+
+                               if (config.open) {
+                                       el.classList.add("open");
+                                       collapseEl.style.display = '';
+                               } else {
+                                       el.classList.remove("open");
+                                       collapseEl.style.display = 'none';
+                               }
+                       }
+               }
+
+               el.addEventListener("click", function (e) {
+                       e.stopImmediatePropagation();
+                       toggleList(!config.open);
+               });
+
+               toggleList(config.open);
+
+               return el;
+       },
+
+       rowSelection: function rowSelection(cell, formatterParams, onRendered) {
+               var _this = this;
+
+               var checkbox = document.createElement("input");
+
+               checkbox.type = 'checkbox';
+
+               if (this.table.modExists("selectRow", true)) {
+
+                       checkbox.addEventListener("click", function (e) {
+                               e.stopPropagation();
+                       });
+
+                       if (typeof cell.getRow == 'function') {
+                               var row = cell.getRow();
+
+                               if (row instanceof RowComponent) {
+
+                                       checkbox.addEventListener("change", function (e) {
+                                               row.toggleSelect();
+                                       });
+
+                                       checkbox.checked = row.isSelected && row.isSelected();
+                                       this.table.modules.selectRow.registerRowSelectCheckbox(row, checkbox);
+                               } else {
+                                       checkbox = "";
+                               }
+                       } else {
+                               checkbox.addEventListener("change", function (e) {
+                                       if (_this.table.modules.selectRow.selectedRows.length) {
+                                               _this.table.deselectRow();
+                                       } else {
+                                               _this.table.selectRow(formatterParams.rowRange);
+                                       }
+                               });
+
+                               this.table.modules.selectRow.registerHeaderSelectCheckbox(checkbox);
+                       }
+               }
+               return checkbox;
+       }
+};
+
+Tabulator.prototype.registerModule("format", Format);
\ No newline at end of file
diff --git a/website/js/vendor/tabulator/js/modules/format.min.js b/website/js/vendor/tabulator/js/modules/format.min.js
new file mode 100644 (file)
index 0000000..9616969
--- /dev/null
@@ -0,0 +1,2 @@
+/* Tabulator v4.8.3 (c) Oliver Folkerd */
+var _typeof="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},Format=function(e){this.table=e};Format.prototype.initializeColumn=function(e){e.modules.format=this.lookupFormatter(e,""),void 0!==e.definition.formatterPrint&&(e.modules.format.print=this.lookupFormatter(e,"Print")),void 0!==e.definition.formatterClipboard&&(e.modules.format.clipboard=this.lookupFormatter(e,"Clipboard")),void 0!==e.definition.formatterHtmlOutput&&(e.modules.format.htmlOutput=this.lookupFormatter(e,"HtmlOutput"))},Format.prototype.lookupFormatter=function(e,t){var o={params:e.definition["formatter"+t+"Params"]||{}},r=e.definition["formatter"+t];switch(void 0===r?"undefined":_typeof(r)){case"string":"tick"===r&&(r="tickCross",void 0===o.params.crossElement&&(o.params.crossElement=!1),console.warn("DEPRECATION WARNING - the tick formatter has been deprecated, please use the tickCross formatter with the crossElement param set to false")),this.formatters[r]?o.formatter=this.formatters[r]:(console.warn("Formatter Error - No such formatter found: ",r),o.formatter=this.formatters.plaintext);break;case"function":o.formatter=r;break;default:o.formatter=this.formatters.plaintext}return o},Format.prototype.cellRendered=function(e){e.modules.format&&e.modules.format.renderedCallback&&!e.modules.format.rendered&&(e.modules.format.renderedCallback(),e.modules.format.rendered=!0)},Format.prototype.formatValue=function(e){function t(t){e.modules.format||(e.modules.format={}),e.modules.format.renderedCallback=t,e.modules.format.rendered=!1}var o=e.getComponent(),r="function"==typeof e.column.modules.format.params?e.column.modules.format.params(o):e.column.modules.format.params;return e.column.modules.format.formatter.call(this,o,r,t)},Format.prototype.formatExportValue=function(e,t){var o,r=e.column.modules.format[t];if(r){var a=function(t){e.modules.format||(e.modules.format={}),e.modules.format.renderedCallback=t,e.modules.format.rendered=!1};return o="function"==typeof r.params?r.params(component):r.params,r.formatter.call(this,e.getComponent(),o,a)}return this.formatValue(e)},Format.prototype.sanitizeHTML=function(e){if(e){var t={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;","/":"&#x2F;","`":"&#x60;","=":"&#x3D;"};return String(e).replace(/[&<>"'`=\/]/g,function(e){return t[e]})}return e},Format.prototype.emptyToSpace=function(e){return null===e||void 0===e||""===e?"&nbsp;":e},Format.prototype.getFormatter=function(e){var e;switch(void 0===e?"undefined":_typeof(e)){case"string":this.formatters[e]?e=this.formatters[e]:(console.warn("Formatter Error - No such formatter found: ",e),e=this.formatters.plaintext);break;case"function":e=e;break;default:e=this.formatters.plaintext}return e},Format.prototype.formatters={plaintext:function(e,t,o){return this.emptyToSpace(this.sanitizeHTML(e.getValue()))},html:function(e,t,o){return e.getValue()},textarea:function(e,t,o){return e.getElement().style.whiteSpace="pre-wrap",this.emptyToSpace(this.sanitizeHTML(e.getValue()))},money:function(e,t,o){var r,a,n,l,i=parseFloat(e.getValue()),s=t.decimal||".",c=t.thousand||",",d=t.symbol||"",u=!!t.symbolAfter,m=void 0!==t.precision?t.precision:2;if(isNaN(i))return this.emptyToSpace(this.sanitizeHTML(e.getValue()));for(r=!1!==m?i.toFixed(m):i,r=String(r).split("."),a=r[0],n=r.length>1?s+r[1]:"",l=/(\d+)(\d{3})/;l.test(a);)a=a.replace(l,"$1"+c+"$2");return u?a+n+d:d+a+n},link:function(e,t,o){var r,a=e.getValue(),n=t.urlPrefix||"",l=t.download,i=a,s=document.createElement("a");if(t.labelField&&(r=e.getData(),i=r[t.labelField]),t.label)switch(_typeof(t.label)){case"string":i=t.label;break;case"function":i=t.label(e)}if(i){if(t.urlField&&(r=e.getData(),a=r[t.urlField]),t.url)switch(_typeof(t.url)){case"string":a=t.url;break;case"function":a=t.url(e)}return s.setAttribute("href",n+a),t.target&&s.setAttribute("target",t.target),t.download&&(l="function"==typeof l?l(e):!0===l?"":l,s.setAttribute("download",l)),s.innerHTML=this.emptyToSpace(this.sanitizeHTML(i)),s}return"&nbsp;"},image:function(e,t,o){var r=document.createElement("img");switch(r.setAttribute("src",e.getValue()),_typeof(t.height)){case"number":r.style.height=t.height+"px";break;case"string":r.style.height=t.height}switch(_typeof(t.width)){case"number":r.style.width=t.width+"px";break;case"string":r.style.width=t.width}return r.addEventListener("load",function(){e.getRow().normalizeHeight()}),r},tickCross:function(e,t,o){var r=e.getValue(),a=e.getElement(),n=t.allowEmpty,l=t.allowTruthy,i=void 0!==t.tickElement?t.tickElement:'<svg enable-background="new 0 0 24 24" height="14" width="14" viewBox="0 0 24 24" xml:space="preserve" ><path fill="#2DC214" clip-rule="evenodd" d="M21.652,3.211c-0.293-0.295-0.77-0.295-1.061,0L9.41,14.34  c-0.293,0.297-0.771,0.297-1.062,0L3.449,9.351C3.304,9.203,3.114,9.13,2.923,9.129C2.73,9.128,2.534,9.201,2.387,9.351  l-2.165,1.946C0.078,11.445,0,11.63,0,11.823c0,0.194,0.078,0.397,0.223,0.544l4.94,5.184c0.292,0.296,0.771,0.776,1.062,1.07  l2.124,2.141c0.292,0.293,0.769,0.293,1.062,0l14.366-14.34c0.293-0.294,0.293-0.777,0-1.071L21.652,3.211z" fill-rule="evenodd"/></svg>',s=void 0!==t.crossElement?t.crossElement:'<svg enable-background="new 0 0 24 24" height="14" width="14"  viewBox="0 0 24 24" xml:space="preserve" ><path fill="#CE1515" d="M22.245,4.015c0.313,0.313,0.313,0.826,0,1.139l-6.276,6.27c-0.313,0.312-0.313,0.826,0,1.14l6.273,6.272  c0.313,0.313,0.313,0.826,0,1.14l-2.285,2.277c-0.314,0.312-0.828,0.312-1.142,0l-6.271-6.271c-0.313-0.313-0.828-0.313-1.141,0  l-6.276,6.267c-0.313,0.313-0.828,0.313-1.141,0l-2.282-2.28c-0.313-0.313-0.313-0.826,0-1.14l6.278-6.269  c0.313-0.312,0.313-0.826,0-1.14L1.709,5.147c-0.314-0.313-0.314-0.827,0-1.14l2.284-2.278C4.308,1.417,4.821,1.417,5.135,1.73  L11.405,8c0.314,0.314,0.828,0.314,1.141,0.001l6.276-6.267c0.312-0.312,0.826-0.312,1.141,0L22.245,4.015z"/></svg>';return l&&r||!0===r||"true"===r||"True"===r||1===r||"1"===r?(a.setAttribute("aria-checked",!0),i||""):!n||"null"!==r&&""!==r&&null!==r&&void 0!==r?(a.setAttribute("aria-checked",!1),s||""):(a.setAttribute("aria-checked","mixed"),"")},datetime:function(e,t,o){var r=t.inputFormat||"YYYY-MM-DD hh:mm:ss",a=t.outputFormat||"DD/MM/YYYY hh:mm:ss",n=void 0!==t.invalidPlaceholder?t.invalidPlaceholder:"",l=e.getValue(),i=moment(l,r);return i.isValid()?t.timezone?i.tz(t.timezone).format(a):i.format(a):!0===n?l:"function"==typeof n?n(l):n},datetimediff:function(e,t,o){var r=t.inputFormat||"YYYY-MM-DD hh:mm:ss",a=void 0!==t.invalidPlaceholder?t.invalidPlaceholder:"",n=void 0!==t.suffix&&t.suffix,l=void 0!==t.unit?t.unit:void 0,i=void 0!==t.humanize&&t.humanize,s=void 0!==t.date?t.date:moment(),c=e.getValue(),d=moment(c,r);return d.isValid()?i?moment.duration(d.diff(s)).humanize(n):d.diff(s,l)+(n?" "+n:""):!0===a?c:"function"==typeof a?a(c):a},lookup:function(e,t,o){var r=e.getValue();return void 0===t[r]?(console.warn("Missing display value for "+r),r):t[r]},star:function(e,t,o){var r=e.getValue(),a=e.getElement(),n=t&&t.stars?t.stars:5,l=document.createElement("span"),i=document.createElementNS("http://www.w3.org/2000/svg","svg");l.style.verticalAlign="middle",i.setAttribute("width","14"),i.setAttribute("height","14"),i.setAttribute("viewBox","0 0 512 512"),i.setAttribute("xml:space","preserve"),i.style.padding="0 1px",r=r&&!isNaN(r)?parseInt(r):0,r=Math.max(0,Math.min(r,n));for(var s=1;s<=n;s++){var c=i.cloneNode(!0);c.innerHTML=s<=r?'<polygon fill="#FFEA00" stroke="#C1AB60" stroke-width="37.6152" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" points="259.216,29.942 330.27,173.919 489.16,197.007 374.185,309.08 401.33,467.31 259.216,392.612 117.104,467.31 144.25,309.08 29.274,197.007 188.165,173.919 "/>':'<polygon fill="#D2D2D2" stroke="#686868" stroke-width="37.6152" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" points="259.216,29.942 330.27,173.919 489.16,197.007 374.185,309.08 401.33,467.31 259.216,392.612 117.104,467.31 144.25,309.08 29.274,197.007 188.165,173.919 "/>',l.appendChild(c)}return a.style.whiteSpace="nowrap",a.style.overflow="hidden",a.style.textOverflow="ellipsis",a.setAttribute("aria-label",r),l},traffic:function(e,t,o){var r,a,n=this.sanitizeHTML(e.getValue())||0,l=document.createElement("span"),i=t&&t.max?t.max:100,s=t&&t.min?t.min:0,c=t&&void 0!==t.color?t.color:["red","orange","green"],d="#666666";if(!isNaN(n)&&void 0!==e.getValue()){switch(l.classList.add("tabulator-traffic-light"),a=parseFloat(n)<=i?parseFloat(n):i,a=parseFloat(a)>=s?parseFloat(a):s,r=(i-s)/100,a=Math.round((a-s)/r),void 0===c?"undefined":_typeof(c)){case"string":d=c;break;case"function":d=c(n);break;case"object":if(Array.isArray(c)){var u=100/c.length,m=Math.floor(a/u);m=Math.min(m,c.length-1),m=Math.max(m,0),d=c[m];break}}return l.style.backgroundColor=d,l}},progress:function(e,t,o){var r,a,n,l,i,s=this.sanitizeHTML(e.getValue())||0,c=e.getElement(),d=t&&t.max?t.max:100,u=t&&t.min?t.min:0,m=t&&t.legendAlign?t.legendAlign:"center";switch(a=parseFloat(s)<=d?parseFloat(s):d,a=parseFloat(a)>=u?parseFloat(a):u,r=(d-u)/100,a=Math.round((a-u)/r),_typeof(t.color)){case"string":n=t.color;break;case"function":n=t.color(s);break;case"object":if(Array.isArray(t.color)){var f=100/t.color.length,p=Math.floor(a/f);p=Math.min(p,t.color.length-1),p=Math.max(p,0),n=t.color[p];break}default:n="#2DC214"}switch(_typeof(t.legend)){case"string":l=t.legend;break;case"function":l=t.legend(s);break;case"boolean":l=s;break;default:l=!1}switch(_typeof(t.legendColor)){case"string":i=t.legendColor;break;case"function":i=t.legendColor(s);break;case"object":if(Array.isArray(t.legendColor)){var f=100/t.legendColor.length,p=Math.floor(a/f);p=Math.min(p,t.legendColor.length-1),p=Math.max(p,0),i=t.legendColor[p]}break;default:i="#000"}c.style.minWidth="30px",c.style.position="relative",c.setAttribute("aria-label",a);var h=document.createElement("div");if(h.style.display="inline-block",h.style.position="relative",h.style.width=a+"%",h.style.backgroundColor=n,h.style.height="100%",h.setAttribute("data-max",d),h.setAttribute("data-min",u),l){var g=document.createElement("div");g.style.position="absolute",g.style.top="4px",g.style.left=0,g.style.textAlign=m,g.style.width="100%",g.style.color=i,g.innerHTML=l}return o(function(){if(!(e instanceof CellComponent)){var t=document.createElement("div");t.style.position="absolute",t.style.top="4px",t.style.bottom="4px",t.style.left="4px",t.style.right="4px",c.appendChild(t),c=t}c.appendChild(h),l&&c.appendChild(g)}),""},color:function(e,t,o){return e.getElement().style.backgroundColor=this.sanitizeHTML(e.getValue()),""},buttonTick:function(e,t,o){return'<svg enable-background="new 0 0 24 24" height="14" width="14" viewBox="0 0 24 24" xml:space="preserve" ><path fill="#2DC214" clip-rule="evenodd" d="M21.652,3.211c-0.293-0.295-0.77-0.295-1.061,0L9.41,14.34  c-0.293,0.297-0.771,0.297-1.062,0L3.449,9.351C3.304,9.203,3.114,9.13,2.923,9.129C2.73,9.128,2.534,9.201,2.387,9.351  l-2.165,1.946C0.078,11.445,0,11.63,0,11.823c0,0.194,0.078,0.397,0.223,0.544l4.94,5.184c0.292,0.296,0.771,0.776,1.062,1.07  l2.124,2.141c0.292,0.293,0.769,0.293,1.062,0l14.366-14.34c0.293-0.294,0.293-0.777,0-1.071L21.652,3.211z" fill-rule="evenodd"/></svg>'},buttonCross:function(e,t,o){return'<svg enable-background="new 0 0 24 24" height="14" width="14" viewBox="0 0 24 24" xml:space="preserve" ><path fill="#CE1515" d="M22.245,4.015c0.313,0.313,0.313,0.826,0,1.139l-6.276,6.27c-0.313,0.312-0.313,0.826,0,1.14l6.273,6.272  c0.313,0.313,0.313,0.826,0,1.14l-2.285,2.277c-0.314,0.312-0.828,0.312-1.142,0l-6.271-6.271c-0.313-0.313-0.828-0.313-1.141,0  l-6.276,6.267c-0.313,0.313-0.828,0.313-1.141,0l-2.282-2.28c-0.313-0.313-0.313-0.826,0-1.14l6.278-6.269  c0.313-0.312,0.313-0.826,0-1.14L1.709,5.147c-0.314-0.313-0.314-0.827,0-1.14l2.284-2.278C4.308,1.417,4.821,1.417,5.135,1.73  L11.405,8c0.314,0.314,0.828,0.314,1.141,0.001l6.276-6.267c0.312-0.312,0.826-0.312,1.141,0L22.245,4.015z"/></svg>'},rownum:function(e,t,o){return this.table.rowManager.activeRows.indexOf(e.getRow()._getSelf())+1},handle:function(e,t,o){return e.getElement().classList.add("tabulator-row-handle"),"<div class='tabulator-row-handle-box'><div class='tabulator-row-handle-bar'></div><div class='tabulator-row-handle-bar'></div><div class='tabulator-row-handle-bar'></div></div>"},responsiveCollapse:function(e,t,o){function r(e){var t=n.element;n.open=e,t&&(n.open?(a.classList.add("open"),t.style.display=""):(a.classList.remove("open"),t.style.display="none"))}var a=document.createElement("div"),n=e.getRow()._row.modules.responsiveLayout;return a.classList.add("tabulator-responsive-collapse-toggle"),a.innerHTML="<span class='tabulator-responsive-collapse-toggle-open'>+</span><span class='tabulator-responsive-collapse-toggle-close'>-</span>",e.getElement().classList.add("tabulator-row-handle"),a.addEventListener("click",function(e){e.stopImmediatePropagation(),r(!n.open)}),r(n.open),a},rowSelection:function(e,t,o){var r=this,a=document.createElement("input");if(a.type="checkbox",this.table.modExists("selectRow",!0))if(a.addEventListener("click",function(e){e.stopPropagation()}),"function"==typeof e.getRow){var n=e.getRow();n instanceof RowComponent?(a.addEventListener("change",function(e){n.toggleSelect()}),a.checked=n.isSelected&&n.isSelected(),this.table.modules.selectRow.registerRowSelectCheckbox(n,a)):a=""}else a.addEventListener("change",function(e){r.table.modules.selectRow.selectedRows.length?r.table.deselectRow():r.table.selectRow(t.rowRange)}),this.table.modules.selectRow.registerHeaderSelectCheckbox(a);return a}},Tabulator.prototype.registerModule("format",Format);
\ No newline at end of file
diff --git a/website/js/vendor/tabulator/js/modules/frozen_columns.js b/website/js/vendor/tabulator/js/modules/frozen_columns.js
new file mode 100644 (file)
index 0000000..1edd4f7
--- /dev/null
@@ -0,0 +1,275 @@
+/* Tabulator v4.8.3 (c) Oliver Folkerd */
+
+var FrozenColumns = function FrozenColumns(table) {
+       this.table = table; //hold Tabulator object
+       this.leftColumns = [];
+       this.rightColumns = [];
+       this.leftMargin = 0;
+       this.rightMargin = 0;
+       this.rightPadding = 0;
+       this.initializationMode = "left";
+       this.active = false;
+       this.scrollEndTimer = false;
+};
+
+//reset initial state
+FrozenColumns.prototype.reset = function () {
+       this.initializationMode = "left";
+       this.leftColumns = [];
+       this.rightColumns = [];
+       this.leftMargin = 0;
+       this.rightMargin = 0;
+       this.rightMargin = 0;
+       this.active = false;
+
+       this.table.columnManager.headersElement.style.marginLeft = 0;
+       this.table.columnManager.element.style.paddingRight = 0;
+};
+
+//initialize specific column
+FrozenColumns.prototype.initializeColumn = function (column) {
+       var config = { margin: 0, edge: false };
+
+       if (!column.isGroup) {
+
+               if (this.frozenCheck(column)) {
+
+                       config.position = this.initializationMode;
+
+                       if (this.initializationMode == "left") {
+                               this.leftColumns.push(column);
+                       } else {
+                               this.rightColumns.unshift(column);
+                       }
+
+                       this.active = true;
+
+                       column.modules.frozen = config;
+               } else {
+                       this.initializationMode = "right";
+               }
+       }
+};
+
+FrozenColumns.prototype.frozenCheck = function (column) {
+       var frozen = false;
+
+       if (column.parent.isGroup && column.definition.frozen) {
+               console.warn("Frozen Column Error - Parent column group must be frozen, not individual columns or sub column groups");
+       }
+
+       if (column.parent.isGroup) {
+               return this.frozenCheck(column.parent);
+       } else {
+               return column.definition.frozen;
+       }
+
+       return frozen;
+};
+
+//quick layout to smooth horizontal scrolling
+FrozenColumns.prototype.scrollHorizontal = function () {
+       var _this = this;
+
+       var rows;
+
+       if (this.active) {
+               clearTimeout(this.scrollEndTimer);
+
+               //layout all rows after scroll is complete
+               this.scrollEndTimer = setTimeout(function () {
+                       _this.layout();
+               }, 100);
+
+               rows = this.table.rowManager.getVisibleRows();
+
+               this.calcMargins();
+
+               this.layoutColumnPosition();
+
+               this.layoutCalcRows();
+
+               rows.forEach(function (row) {
+                       if (row.type === "row") {
+                               _this.layoutRow(row);
+                       }
+               });
+
+               this.table.rowManager.tableElement.style.marginRight = this.rightMargin;
+       }
+};
+
+//calculate margins for rows
+FrozenColumns.prototype.calcMargins = function () {
+       this.leftMargin = this._calcSpace(this.leftColumns, this.leftColumns.length) + "px";
+       this.table.columnManager.headersElement.style.marginLeft = this.leftMargin;
+
+       this.rightMargin = this._calcSpace(this.rightColumns, this.rightColumns.length) + "px";
+       this.table.columnManager.element.style.paddingRight = this.rightMargin;
+
+       //calculate right frozen columns
+       this.rightPadding = this.table.rowManager.element.clientWidth + this.table.columnManager.scrollLeft;
+};
+
+//layout calculation rows
+FrozenColumns.prototype.layoutCalcRows = function () {
+       if (this.table.modExists("columnCalcs")) {
+               if (this.table.modules.columnCalcs.topInitialized && this.table.modules.columnCalcs.topRow) {
+                       this.layoutRow(this.table.modules.columnCalcs.topRow);
+               }
+               if (this.table.modules.columnCalcs.botInitialized && this.table.modules.columnCalcs.botRow) {
+                       this.layoutRow(this.table.modules.columnCalcs.botRow);
+               }
+       }
+};
+
+//calculate column positions and layout headers
+FrozenColumns.prototype.layoutColumnPosition = function (allCells) {
+       var _this2 = this;
+
+       var leftParents = [];
+
+       this.leftColumns.forEach(function (column, i) {
+               column.modules.frozen.margin = _this2._calcSpace(_this2.leftColumns, i) + _this2.table.columnManager.scrollLeft + "px";
+
+               if (i == _this2.leftColumns.length - 1) {
+                       column.modules.frozen.edge = true;
+               } else {
+                       column.modules.frozen.edge = false;
+               }
+
+               if (column.parent.isGroup) {
+                       var parentEl = _this2.getColGroupParentElement(column);
+                       if (!leftParents.includes(parentEl)) {
+                               _this2.layoutElement(parentEl, column);
+                               leftParents.push(parentEl);
+                       }
+
+                       if (column.modules.frozen.edge) {
+                               parentEl.classList.add("tabulator-frozen-" + column.modules.frozen.position);
+                       }
+               } else {
+                       _this2.layoutElement(column.getElement(), column);
+               }
+
+               if (allCells) {
+                       column.cells.forEach(function (cell) {
+                               _this2.layoutElement(cell.getElement(), column);
+                       });
+               }
+       });
+
+       this.rightColumns.forEach(function (column, i) {
+               column.modules.frozen.margin = _this2.rightPadding - _this2._calcSpace(_this2.rightColumns, i + 1) + "px";
+
+               if (i == _this2.rightColumns.length - 1) {
+                       column.modules.frozen.edge = true;
+               } else {
+                       column.modules.frozen.edge = false;
+               }
+
+               if (column.parent.isGroup) {
+                       _this2.layoutElement(_this2.getColGroupParentElement(column), column);
+               } else {
+                       _this2.layoutElement(column.getElement(), column);
+               }
+
+               if (allCells) {
+                       column.cells.forEach(function (cell) {
+                               _this2.layoutElement(cell.getElement(), column);
+                       });
+               }
+       });
+};
+
+FrozenColumns.prototype.getColGroupParentElement = function (column) {
+       return column.parent.isGroup ? this.getColGroupParentElement(column.parent) : column.getElement();
+};
+
+//layout columns appropropriatly
+FrozenColumns.prototype.layout = function () {
+       var self = this,
+           rightMargin = 0;
+
+       if (self.active) {
+
+               //calculate row padding
+               this.calcMargins();
+
+               // self.table.rowManager.activeRows.forEach(function(row){
+               //      self.layoutRow(row);
+               // });
+
+               // if(self.table.options.dataTree){
+               self.table.rowManager.getDisplayRows().forEach(function (row) {
+                       if (row.type === "row") {
+                               self.layoutRow(row);
+                       }
+               });
+               // }
+
+               this.layoutCalcRows();
+
+               //calculate left columns
+               this.layoutColumnPosition(true);
+
+               // if(tableHolder.scrollHeight > tableHolder.clientHeight){
+               //      rightMargin -= tableHolder.offsetWidth - tableHolder.clientWidth;
+               // }
+
+               this.table.rowManager.tableElement.style.marginRight = this.rightMargin;
+       }
+};
+
+FrozenColumns.prototype.layoutRow = function (row) {
+       var _this3 = this;
+
+       var rowEl = row.getElement();
+
+       rowEl.style.paddingLeft = this.leftMargin;
+       // rowEl.style.paddingRight = this.rightMargin + "px";
+
+       this.leftColumns.forEach(function (column) {
+               var cell = row.getCell(column);
+
+               if (cell) {
+                       _this3.layoutElement(cell.getElement(), column);
+               }
+       });
+
+       this.rightColumns.forEach(function (column) {
+               var cell = row.getCell(column);
+
+               if (cell) {
+                       _this3.layoutElement(cell.getElement(), column);
+               }
+       });
+};
+
+FrozenColumns.prototype.layoutElement = function (element, column) {
+
+       if (column.modules.frozen) {
+               element.style.position = "absolute";
+               element.style.left = column.modules.frozen.margin;
+
+               element.classList.add("tabulator-frozen");
+
+               if (column.modules.frozen.edge) {
+                       element.classList.add("tabulator-frozen-" + column.modules.frozen.position);
+               }
+       }
+};
+
+FrozenColumns.prototype._calcSpace = function (columns, index) {
+       var width = 0;
+
+       for (var i = 0; i < index; i++) {
+               if (columns[i].visible) {
+                       width += columns[i].getWidth();
+               }
+       }
+
+       return width;
+};
+
+Tabulator.prototype.registerModule("frozenColumns", FrozenColumns);
\ No newline at end of file
diff --git a/website/js/vendor/tabulator/js/modules/frozen_columns.min.js b/website/js/vendor/tabulator/js/modules/frozen_columns.min.js
new file mode 100644 (file)
index 0000000..7813e4e
--- /dev/null
@@ -0,0 +1,2 @@
+/* Tabulator v4.8.3 (c) Oliver Folkerd */
+var FrozenColumns=function(t){this.table=t,this.leftColumns=[],this.rightColumns=[],this.leftMargin=0,this.rightMargin=0,this.rightPadding=0,this.initializationMode="left",this.active=!1,this.scrollEndTimer=!1};FrozenColumns.prototype.reset=function(){this.initializationMode="left",this.leftColumns=[],this.rightColumns=[],this.leftMargin=0,this.rightMargin=0,this.rightMargin=0,this.active=!1,this.table.columnManager.headersElement.style.marginLeft=0,this.table.columnManager.element.style.paddingRight=0},FrozenColumns.prototype.initializeColumn=function(t){var e={margin:0,edge:!1};t.isGroup||(this.frozenCheck(t)?(e.position=this.initializationMode,"left"==this.initializationMode?this.leftColumns.push(t):this.rightColumns.unshift(t),this.active=!0,t.modules.frozen=e):this.initializationMode="right")},FrozenColumns.prototype.frozenCheck=function(t){return t.parent.isGroup&&t.definition.frozen&&console.warn("Frozen Column Error - Parent column group must be frozen, not individual columns or sub column groups"),t.parent.isGroup?this.frozenCheck(t.parent):t.definition.frozen},FrozenColumns.prototype.scrollHorizontal=function(){var t,e=this;this.active&&(clearTimeout(this.scrollEndTimer),this.scrollEndTimer=setTimeout(function(){e.layout()},100),t=this.table.rowManager.getVisibleRows(),this.calcMargins(),this.layoutColumnPosition(),this.layoutCalcRows(),t.forEach(function(t){"row"===t.type&&e.layoutRow(t)}),this.table.rowManager.tableElement.style.marginRight=this.rightMargin)},FrozenColumns.prototype.calcMargins=function(){this.leftMargin=this._calcSpace(this.leftColumns,this.leftColumns.length)+"px",this.table.columnManager.headersElement.style.marginLeft=this.leftMargin,this.rightMargin=this._calcSpace(this.rightColumns,this.rightColumns.length)+"px",this.table.columnManager.element.style.paddingRight=this.rightMargin,this.rightPadding=this.table.rowManager.element.clientWidth+this.table.columnManager.scrollLeft},FrozenColumns.prototype.layoutCalcRows=function(){this.table.modExists("columnCalcs")&&(this.table.modules.columnCalcs.topInitialized&&this.table.modules.columnCalcs.topRow&&this.layoutRow(this.table.modules.columnCalcs.topRow),this.table.modules.columnCalcs.botInitialized&&this.table.modules.columnCalcs.botRow&&this.layoutRow(this.table.modules.columnCalcs.botRow))},FrozenColumns.prototype.layoutColumnPosition=function(t){var e=this,o=[];this.leftColumns.forEach(function(n,l){if(n.modules.frozen.margin=e._calcSpace(e.leftColumns,l)+e.table.columnManager.scrollLeft+"px",l==e.leftColumns.length-1?n.modules.frozen.edge=!0:n.modules.frozen.edge=!1,n.parent.isGroup){var i=e.getColGroupParentElement(n);o.includes(i)||(e.layoutElement(i,n),o.push(i)),n.modules.frozen.edge&&i.classList.add("tabulator-frozen-"+n.modules.frozen.position)}else e.layoutElement(n.getElement(),n);t&&n.cells.forEach(function(t){e.layoutElement(t.getElement(),n)})}),this.rightColumns.forEach(function(o,n){o.modules.frozen.margin=e.rightPadding-e._calcSpace(e.rightColumns,n+1)+"px",n==e.rightColumns.length-1?o.modules.frozen.edge=!0:o.modules.frozen.edge=!1,o.parent.isGroup?e.layoutElement(e.getColGroupParentElement(o),o):e.layoutElement(o.getElement(),o),t&&o.cells.forEach(function(t){e.layoutElement(t.getElement(),o)})})},FrozenColumns.prototype.getColGroupParentElement=function(t){return t.parent.isGroup?this.getColGroupParentElement(t.parent):t.getElement()},FrozenColumns.prototype.layout=function(){var t=this;t.active&&(this.calcMargins(),t.table.rowManager.getDisplayRows().forEach(function(e){"row"===e.type&&t.layoutRow(e)}),this.layoutCalcRows(),this.layoutColumnPosition(!0),this.table.rowManager.tableElement.style.marginRight=this.rightMargin)},FrozenColumns.prototype.layoutRow=function(t){var e=this;t.getElement().style.paddingLeft=this.leftMargin,this.leftColumns.forEach(function(o){var n=t.getCell(o);n&&e.layoutElement(n.getElement(),o)}),this.rightColumns.forEach(function(o){var n=t.getCell(o);n&&e.layoutElement(n.getElement(),o)})},FrozenColumns.prototype.layoutElement=function(t,e){e.modules.frozen&&(t.style.position="absolute",t.style.left=e.modules.frozen.margin,t.classList.add("tabulator-frozen"),e.modules.frozen.edge&&t.classList.add("tabulator-frozen-"+e.modules.frozen.position))},FrozenColumns.prototype._calcSpace=function(t,e){for(var o=0,n=0;n<e;n++)t[n].visible&&(o+=t[n].getWidth());return o},Tabulator.prototype.registerModule("frozenColumns",FrozenColumns);
\ No newline at end of file
diff --git a/website/js/vendor/tabulator/js/modules/frozen_rows.js b/website/js/vendor/tabulator/js/modules/frozen_rows.js
new file mode 100644 (file)
index 0000000..a47a1e5
--- /dev/null
@@ -0,0 +1,106 @@
+/* Tabulator v4.8.3 (c) Oliver Folkerd */
+
+var FrozenRows = function FrozenRows(table) {
+       this.table = table; //hold Tabulator object
+       this.topElement = document.createElement("div");
+       this.rows = [];
+       this.displayIndex = 0; //index in display pipeline
+};
+
+FrozenRows.prototype.initialize = function () {
+       this.rows = [];
+
+       this.topElement.classList.add("tabulator-frozen-rows-holder");
+
+       // this.table.columnManager.element.append(this.topElement);
+       this.table.columnManager.getElement().insertBefore(this.topElement, this.table.columnManager.headersElement.nextSibling);
+};
+
+FrozenRows.prototype.setDisplayIndex = function (index) {
+       this.displayIndex = index;
+};
+
+FrozenRows.prototype.getDisplayIndex = function () {
+       return this.displayIndex;
+};
+
+FrozenRows.prototype.isFrozen = function () {
+       return !!this.rows.length;
+};
+
+//filter frozen rows out of display data
+FrozenRows.prototype.getRows = function (rows) {
+       var self = this,
+           frozen = [],
+           output = rows.slice(0);
+
+       this.rows.forEach(function (row) {
+               var index = output.indexOf(row);
+
+               if (index > -1) {
+                       output.splice(index, 1);
+               }
+       });
+
+       return output;
+};
+
+FrozenRows.prototype.freezeRow = function (row) {
+       if (!row.modules.frozen) {
+               row.modules.frozen = true;
+               this.topElement.appendChild(row.getElement());
+               row.initialize();
+               row.normalizeHeight();
+               this.table.rowManager.adjustTableSize();
+
+               this.rows.push(row);
+
+               this.table.rowManager.refreshActiveData("display");
+
+               this.styleRows();
+       } else {
+               console.warn("Freeze Error - Row is already frozen");
+       }
+};
+
+FrozenRows.prototype.unfreezeRow = function (row) {
+       var index = this.rows.indexOf(row);
+
+       if (row.modules.frozen) {
+
+               row.modules.frozen = false;
+
+               this.detachRow(row);
+
+               this.table.rowManager.adjustTableSize();
+
+               this.table.rowManager.refreshActiveData("display");
+
+               if (this.rows.length) {
+                       this.styleRows();
+               }
+       } else {
+               console.warn("Freeze Error - Row is already unfrozen");
+       }
+};
+
+FrozenRows.prototype.detachRow = function (row) {
+       var index = this.rows.indexOf(row);
+
+       if (index > -1) {
+               var rowEl = row.getElement();
+               rowEl.parentNode.removeChild(rowEl);
+
+               this.rows.splice(index, 1);
+       }
+};
+
+FrozenRows.prototype.styleRows = function (row) {
+       var self = this;
+
+       this.rows.forEach(function (row, i) {
+               self.table.rowManager.styleRow(row, i);
+       });
+};
+
+Tabulator.prototype.registerModule("frozenRows", FrozenRows);
\ No newline at end of file
diff --git a/website/js/vendor/tabulator/js/modules/frozen_rows.min.js b/website/js/vendor/tabulator/js/modules/frozen_rows.min.js
new file mode 100644 (file)
index 0000000..13ee75d
--- /dev/null
@@ -0,0 +1,2 @@
+/* Tabulator v4.8.3 (c) Oliver Folkerd */
+var FrozenRows=function(e){this.table=e,this.topElement=document.createElement("div"),this.rows=[],this.displayIndex=0};FrozenRows.prototype.initialize=function(){this.rows=[],this.topElement.classList.add("tabulator-frozen-rows-holder"),this.table.columnManager.getElement().insertBefore(this.topElement,this.table.columnManager.headersElement.nextSibling)},FrozenRows.prototype.setDisplayIndex=function(e){this.displayIndex=e},FrozenRows.prototype.getDisplayIndex=function(){return this.displayIndex},FrozenRows.prototype.isFrozen=function(){return!!this.rows.length},FrozenRows.prototype.getRows=function(e){var o=e.slice(0);return this.rows.forEach(function(e){var t=o.indexOf(e);t>-1&&o.splice(t,1)}),o},FrozenRows.prototype.freezeRow=function(e){e.modules.frozen?console.warn("Freeze Error - Row is already frozen"):(e.modules.frozen=!0,this.topElement.appendChild(e.getElement()),e.initialize(),e.normalizeHeight(),this.table.rowManager.adjustTableSize(),this.rows.push(e),this.table.rowManager.refreshActiveData("display"),this.styleRows())},FrozenRows.prototype.unfreezeRow=function(e){this.rows.indexOf(e);e.modules.frozen?(e.modules.frozen=!1,this.detachRow(e),this.table.rowManager.adjustTableSize(),this.table.rowManager.refreshActiveData("display"),this.rows.length&&this.styleRows()):console.warn("Freeze Error - Row is already unfrozen")},FrozenRows.prototype.detachRow=function(e){var o=this.rows.indexOf(e);if(o>-1){var t=e.getElement();t.parentNode.removeChild(t),this.rows.splice(o,1)}},FrozenRows.prototype.styleRows=function(e){var o=this;this.rows.forEach(function(e,t){o.table.rowManager.styleRow(e,t)})},Tabulator.prototype.registerModule("frozenRows",FrozenRows);
\ No newline at end of file
diff --git a/website/js/vendor/tabulator/js/modules/group_rows.js b/website/js/vendor/tabulator/js/modules/group_rows.js
new file mode 100644 (file)
index 0000000..2e28c2d
--- /dev/null
@@ -0,0 +1,1126 @@
+/* Tabulator v4.8.3 (c) Oliver Folkerd */
+
+//public group object
+var GroupComponent = function GroupComponent(group) {
+       this._group = group;
+       this.type = "GroupComponent";
+};
+
+GroupComponent.prototype.getKey = function () {
+       return this._group.key;
+};
+
+GroupComponent.prototype.getField = function () {
+       return this._group.field;
+};
+
+GroupComponent.prototype.getElement = function () {
+       return this._group.element;
+};
+
+GroupComponent.prototype.getRows = function () {
+       return this._group.getRows(true);
+};
+
+GroupComponent.prototype.getSubGroups = function () {
+       return this._group.getSubGroups(true);
+};
+
+GroupComponent.prototype.getParentGroup = function () {
+       return this._group.parent ? this._group.parent.getComponent() : false;
+};
+
+GroupComponent.prototype.getVisibility = function () {
+       console.warn("getVisibility function is deprecated, you should now use the isVisible function");
+       return this._group.visible;
+};
+
+GroupComponent.prototype.isVisible = function () {
+       return this._group.visible;
+};
+
+GroupComponent.prototype.show = function () {
+       this._group.show();
+};
+
+GroupComponent.prototype.hide = function () {
+       this._group.hide();
+};
+
+GroupComponent.prototype.toggle = function () {
+       this._group.toggleVisibility();
+};
+
+GroupComponent.prototype._getSelf = function () {
+       return this._group;
+};
+
+GroupComponent.prototype.getTable = function () {
+       return this._group.groupManager.table;
+};
+
+//////////////////////////////////////////////////
+//////////////// Group Functions /////////////////
+//////////////////////////////////////////////////
+
+var Group = function Group(groupManager, parent, level, key, field, generator, oldGroup) {
+
+       this.groupManager = groupManager;
+       this.parent = parent;
+       this.key = key;
+       this.level = level;
+       this.field = field;
+       this.hasSubGroups = level < groupManager.groupIDLookups.length - 1;
+       this.addRow = this.hasSubGroups ? this._addRowToGroup : this._addRow;
+       this.type = "group"; //type of element
+       this.old = oldGroup;
+       this.rows = [];
+       this.groups = [];
+       this.groupList = [];
+       this.generator = generator;
+       this.elementContents = false;
+       this.height = 0;
+       this.outerHeight = 0;
+       this.initialized = false;
+       this.calcs = {};
+       this.initialized = false;
+       this.modules = {};
+       this.arrowElement = false;
+
+       this.visible = oldGroup ? oldGroup.visible : typeof groupManager.startOpen[level] !== "undefined" ? groupManager.startOpen[level] : groupManager.startOpen[0];
+
+       this.component = null;
+
+       this.createElements();
+       this.addBindings();
+
+       this.createValueGroups();
+};
+
+Group.prototype.wipe = function () {
+       if (this.groupList.length) {
+               this.groupList.forEach(function (group) {
+                       group.wipe();
+               });
+       } else {
+               this.element = false;
+               this.arrowElement = false;
+               this.elementContents = false;
+       }
+};
+
+Group.prototype.createElements = function () {
+       var arrow = document.createElement("div");
+       arrow.classList.add("tabulator-arrow");
+
+       this.element = document.createElement("div");
+       this.element.classList.add("tabulator-row");
+       this.element.classList.add("tabulator-group");
+       this.element.classList.add("tabulator-group-level-" + this.level);
+       this.element.setAttribute("role", "rowgroup");
+
+       this.arrowElement = document.createElement("div");
+       this.arrowElement.classList.add("tabulator-group-toggle");
+       this.arrowElement.appendChild(arrow);
+
+       //setup movable rows
+       if (this.groupManager.table.options.movableRows !== false && this.groupManager.table.modExists("moveRow")) {
+               this.groupManager.table.modules.moveRow.initializeGroupHeader(this);
+       }
+};
+
+Group.prototype.createValueGroups = function () {
+       var _this = this;
+
+       var level = this.level + 1;
+       if (this.groupManager.allowedValues && this.groupManager.allowedValues[level]) {
+               this.groupManager.allowedValues[level].forEach(function (value) {
+                       _this._createGroup(value, level);
+               });
+       }
+};
+
+Group.prototype.addBindings = function () {
+       var self = this,
+           dblTap,
+           tapHold,
+           tap,
+           toggleElement;
+
+       //handle group click events
+       if (self.groupManager.table.options.groupClick) {
+               self.element.addEventListener("click", function (e) {
+                       self.groupManager.table.options.groupClick.call(self.groupManager.table, e, self.getComponent());
+               });
+       }
+
+       if (self.groupManager.table.options.groupDblClick) {
+               self.element.addEventListener("dblclick", function (e) {
+                       self.groupManager.table.options.groupDblClick.call(self.groupManager.table, e, self.getComponent());
+               });
+       }
+
+       if (self.groupManager.table.options.groupContext) {
+               self.element.addEventListener("contextmenu", function (e) {
+                       self.groupManager.table.options.groupContext.call(self.groupManager.table, e, self.getComponent());
+               });
+       }
+
+       if ((self.groupManager.table.options.groupContextMenu || self.groupManager.table.options.groupClickMenu) && self.groupManager.table.modExists("menu")) {
+               self.groupManager.table.modules.menu.initializeGroup.call(self.groupManager.table.modules.menu, self);
+       }
+
+       if (self.groupManager.table.options.groupTap) {
+
+               tap = false;
+
+               self.element.addEventListener("touchstart", function (e) {
+                       tap = true;
+               }, { passive: true });
+
+               self.element.addEventListener("touchend", function (e) {
+                       if (tap) {
+                               self.groupManager.table.options.groupTap(e, self.getComponent());
+                       }
+
+                       tap = false;
+               });
+       }
+
+       if (self.groupManager.table.options.groupDblTap) {
+
+               dblTap = null;
+
+               self.element.addEventListener("touchend", function (e) {
+
+                       if (dblTap) {
+                               clearTimeout(dblTap);
+                               dblTap = null;
+
+                               self.groupManager.table.options.groupDblTap(e, self.getComponent());
+                       } else {
+
+                               dblTap = setTimeout(function () {
+                                       clearTimeout(dblTap);
+                                       dblTap = null;
+                               }, 300);
+                       }
+               });
+       }
+
+       if (self.groupManager.table.options.groupTapHold) {
+
+               tapHold = null;
+
+               self.element.addEventListener("touchstart", function (e) {
+                       clearTimeout(tapHold);
+
+                       tapHold = setTimeout(function () {
+                               clearTimeout(tapHold);
+                               tapHold = null;
+                               tap = false;
+                               self.groupManager.table.options.groupTapHold(e, self.getComponent());
+                       }, 1000);
+               }, { passive: true });
+
+               self.element.addEventListener("touchend", function (e) {
+                       clearTimeout(tapHold);
+                       tapHold = null;
+               });
+       }
+
+       if (self.groupManager.table.options.groupToggleElement) {
+               toggleElement = self.groupManager.table.options.groupToggleElement == "arrow" ? self.arrowElement : self.element;
+
+               toggleElement.addEventListener("click", function (e) {
+                       e.stopPropagation();
+                       e.stopImmediatePropagation();
+                       self.toggleVisibility();
+               });
+       }
+};
+
+Group.prototype._createGroup = function (groupID, level) {
+       var groupKey = level + "_" + groupID;
+       var group = new Group(this.groupManager, this, level, groupID, this.groupManager.groupIDLookups[level].field, this.groupManager.headerGenerator[level] || this.groupManager.headerGenerator[0], this.old ? this.old.groups[groupKey] : false);
+
+       this.groups[groupKey] = group;
+       this.groupList.push(group);
+};
+
+Group.prototype._addRowToGroup = function (row) {
+
+       var level = this.level + 1;
+
+       if (this.hasSubGroups) {
+               var groupID = this.groupManager.groupIDLookups[level].func(row.getData()),
+                   groupKey = level + "_" + groupID;
+
+               if (this.groupManager.allowedValues && this.groupManager.allowedValues[level]) {
+                       if (this.groups[groupKey]) {
+                               this.groups[groupKey].addRow(row);
+                       }
+               } else {
+                       if (!this.groups[groupKey]) {
+                               this._createGroup(groupID, level);
+                       }
+
+                       this.groups[groupKey].addRow(row);
+               }
+       }
+};
+
+Group.prototype._addRow = function (row) {
+       this.rows.push(row);
+       row.modules.group = this;
+};
+
+Group.prototype.insertRow = function (row, to, after) {
+       var data = this.conformRowData({});
+
+       row.updateData(data);
+
+       var toIndex = this.rows.indexOf(to);
+
+       if (toIndex > -1) {
+               if (after) {
+                       this.rows.splice(toIndex + 1, 0, row);
+               } else {
+                       this.rows.splice(toIndex, 0, row);
+               }
+       } else {
+               if (after) {
+                       this.rows.push(row);
+               } else {
+                       this.rows.unshift(row);
+               }
+       }
+
+       row.modules.group = this;
+
+       this.generateGroupHeaderContents();
+
+       if (this.groupManager.table.modExists("columnCalcs") && this.groupManager.table.options.columnCalcs != "table") {
+               this.groupManager.table.modules.columnCalcs.recalcGroup(this);
+       }
+
+       this.groupManager.updateGroupRows(true);
+};
+
+Group.prototype.scrollHeader = function (left) {
+       this.arrowElement.style.marginLeft = left;
+
+       this.groupList.forEach(function (child) {
+               child.scrollHeader(left);
+       });
+};
+
+Group.prototype.getRowIndex = function (row) {};
+
+//update row data to match grouping contraints
+Group.prototype.conformRowData = function (data) {
+       if (this.field) {
+               data[this.field] = this.key;
+       } else {
+               console.warn("Data Conforming Error - Cannot conform row data to match new group as groupBy is a function");
+       }
+
+       if (this.parent) {
+               data = this.parent.conformRowData(data);
+       }
+
+       return data;
+};
+
+Group.prototype.removeRow = function (row) {
+       var index = this.rows.indexOf(row);
+       var el = row.getElement();
+
+       if (index > -1) {
+               this.rows.splice(index, 1);
+       }
+
+       if (!this.groupManager.table.options.groupValues && !this.rows.length) {
+               if (this.parent) {
+                       this.parent.removeGroup(this);
+               } else {
+                       this.groupManager.removeGroup(this);
+               }
+
+               this.groupManager.updateGroupRows(true);
+       } else {
+
+               if (el.parentNode) {
+                       el.parentNode.removeChild(el);
+               }
+
+               this.generateGroupHeaderContents();
+
+               if (this.groupManager.table.modExists("columnCalcs") && this.groupManager.table.options.columnCalcs != "table") {
+                       this.groupManager.table.modules.columnCalcs.recalcGroup(this);
+               }
+       }
+};
+
+Group.prototype.removeGroup = function (group) {
+       var groupKey = group.level + "_" + group.key,
+           index;
+
+       if (this.groups[groupKey]) {
+               delete this.groups[groupKey];
+
+               index = this.groupList.indexOf(group);
+
+               if (index > -1) {
+                       this.groupList.splice(index, 1);
+               }
+
+               if (!this.groupList.length) {
+                       if (this.parent) {
+                               this.parent.removeGroup(this);
+                       } else {
+                               this.groupManager.removeGroup(this);
+                       }
+               }
+       }
+};
+
+Group.prototype.getHeadersAndRows = function (noCalc) {
+       var output = [];
+
+       output.push(this);
+
+       this._visSet();
+
+       if (this.visible) {
+               if (this.groupList.length) {
+                       this.groupList.forEach(function (group) {
+                               output = output.concat(group.getHeadersAndRows(noCalc));
+                       });
+               } else {
+                       if (!noCalc && this.groupManager.table.options.columnCalcs != "table" && this.groupManager.table.modExists("columnCalcs") && this.groupManager.table.modules.columnCalcs.hasTopCalcs()) {
+                               if (this.calcs.top) {
+                                       this.calcs.top.detachElement();
+                                       this.calcs.top.deleteCells();
+                               }
+
+                               this.calcs.top = this.groupManager.table.modules.columnCalcs.generateTopRow(this.rows);
+                               output.push(this.calcs.top);
+                       }
+
+                       output = output.concat(this.rows);
+
+                       if (!noCalc && this.groupManager.table.options.columnCalcs != "table" && this.groupManager.table.modExists("columnCalcs") && this.groupManager.table.modules.columnCalcs.hasBottomCalcs()) {
+                               if (this.calcs.bottom) {
+                                       this.calcs.bottom.detachElement();
+                                       this.calcs.bottom.deleteCells();
+                               }
+
+                               this.calcs.bottom = this.groupManager.table.modules.columnCalcs.generateBottomRow(this.rows);
+                               output.push(this.calcs.bottom);
+                       }
+               }
+       } else {
+               if (!this.groupList.length && this.groupManager.table.options.columnCalcs != "table") {
+
+                       if (this.groupManager.table.modExists("columnCalcs")) {
+
+                               if (!noCalc && this.groupManager.table.modules.columnCalcs.hasTopCalcs()) {
+                                       if (this.calcs.top) {
+                                               this.calcs.top.detachElement();
+                                               this.calcs.top.deleteCells();
+                                       }
+
+                                       if (this.groupManager.table.options.groupClosedShowCalcs) {
+                                               this.calcs.top = this.groupManager.table.modules.columnCalcs.generateTopRow(this.rows);
+                                               output.push(this.calcs.top);
+                                       }
+                               }
+
+                               if (!noCalc && this.groupManager.table.modules.columnCalcs.hasBottomCalcs()) {
+                                       if (this.calcs.bottom) {
+                                               this.calcs.bottom.detachElement();
+                                               this.calcs.bottom.deleteCells();
+                                       }
+
+                                       if (this.groupManager.table.options.groupClosedShowCalcs) {
+                                               this.calcs.bottom = this.groupManager.table.modules.columnCalcs.generateBottomRow(this.rows);
+                                               output.push(this.calcs.bottom);
+                                       }
+                               }
+                       }
+               }
+       }
+
+       return output;
+};
+
+Group.prototype.getData = function (visible, transform) {
+       var self = this,
+           output = [];
+
+       this._visSet();
+
+       if (!visible || visible && this.visible) {
+               this.rows.forEach(function (row) {
+                       output.push(row.getData(transform || "data"));
+               });
+       }
+
+       return output;
+};
+
+// Group.prototype.getRows = function(){
+//     this._visSet();
+
+//     return this.visible ? this.rows : [];
+// };
+
+Group.prototype.getRowCount = function () {
+       var count = 0;
+
+       if (this.groupList.length) {
+               this.groupList.forEach(function (group) {
+                       count += group.getRowCount();
+               });
+       } else {
+               count = this.rows.length;
+       }
+       return count;
+};
+
+Group.prototype.toggleVisibility = function () {
+       if (this.visible) {
+               this.hide();
+       } else {
+               this.show();
+       }
+};
+
+Group.prototype.hide = function () {
+       this.visible = false;
+
+       if (this.groupManager.table.rowManager.getRenderMode() == "classic" && !this.groupManager.table.options.pagination) {
+
+               this.element.classList.remove("tabulator-group-visible");
+
+               if (this.groupList.length) {
+                       this.groupList.forEach(function (group) {
+
+                               var rows = group.getHeadersAndRows();
+
+                               rows.forEach(function (row) {
+                                       row.detachElement();
+                               });
+                       });
+               } else {
+                       this.rows.forEach(function (row) {
+                               var rowEl = row.getElement();
+                               rowEl.parentNode.removeChild(rowEl);
+                       });
+               }
+
+               this.groupManager.table.rowManager.setDisplayRows(this.groupManager.updateGroupRows(), this.groupManager.getDisplayIndex());
+
+               this.groupManager.table.rowManager.checkClassicModeGroupHeaderWidth();
+       } else {
+               this.groupManager.updateGroupRows(true);
+       }
+
+       this.groupManager.table.options.groupVisibilityChanged.call(this.table, this.getComponent(), false);
+};
+
+Group.prototype.show = function () {
+       var self = this;
+
+       self.visible = true;
+
+       if (this.groupManager.table.rowManager.getRenderMode() == "classic" && !this.groupManager.table.options.pagination) {
+
+               this.element.classList.add("tabulator-group-visible");
+
+               var prev = self.getElement();
+
+               if (this.groupList.length) {
+                       this.groupList.forEach(function (group) {
+                               var rows = group.getHeadersAndRows();
+
+                               rows.forEach(function (row) {
+                                       var rowEl = row.getElement();
+                                       prev.parentNode.insertBefore(rowEl, prev.nextSibling);
+                                       row.initialize();
+                                       prev = rowEl;
+                               });
+                       });
+               } else {
+                       self.rows.forEach(function (row) {
+                               var rowEl = row.getElement();
+                               prev.parentNode.insertBefore(rowEl, prev.nextSibling);
+                               row.initialize();
+                               prev = rowEl;
+                       });
+               }
+
+               this.groupManager.table.rowManager.setDisplayRows(this.groupManager.updateGroupRows(), this.groupManager.getDisplayIndex());
+
+               this.groupManager.table.rowManager.checkClassicModeGroupHeaderWidth();
+       } else {
+               this.groupManager.updateGroupRows(true);
+       }
+
+       this.groupManager.table.options.groupVisibilityChanged.call(this.table, this.getComponent(), true);
+};
+
+Group.prototype._visSet = function () {
+       var data = [];
+
+       if (typeof this.visible == "function") {
+
+               this.rows.forEach(function (row) {
+                       data.push(row.getData());
+               });
+
+               this.visible = this.visible(this.key, this.getRowCount(), data, this.getComponent());
+       }
+};
+
+Group.prototype.getRowGroup = function (row) {
+       var match = false;
+       if (this.groupList.length) {
+               this.groupList.forEach(function (group) {
+                       var result = group.getRowGroup(row);
+
+                       if (result) {
+                               match = result;
+                       }
+               });
+       } else {
+               if (this.rows.find(function (item) {
+                       return item === row;
+               })) {
+                       match = this;
+               }
+       }
+
+       return match;
+};
+
+Group.prototype.getSubGroups = function (component) {
+       var output = [];
+
+       this.groupList.forEach(function (child) {
+               output.push(component ? child.getComponent() : child);
+       });
+
+       return output;
+};
+
+Group.prototype.getRows = function (compoment) {
+       var output = [];
+
+       this.rows.forEach(function (row) {
+               output.push(compoment ? row.getComponent() : row);
+       });
+
+       return output;
+};
+
+Group.prototype.generateGroupHeaderContents = function () {
+       var data = [];
+
+       this.rows.forEach(function (row) {
+               data.push(row.getData());
+       });
+
+       this.elementContents = this.generator(this.key, this.getRowCount(), data, this.getComponent());
+
+       while (this.element.firstChild) {
+               this.element.removeChild(this.element.firstChild);
+       }if (typeof this.elementContents === "string") {
+               this.element.innerHTML = this.elementContents;
+       } else {
+               this.element.appendChild(this.elementContents);
+       }
+
+       this.element.insertBefore(this.arrowElement, this.element.firstChild);
+};
+
+Group.prototype.getPath = function () {
+       var path = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
+
+       path.unshift(this.key);
+       if (this.parent) {
+               this.parent.getPath(path);
+       }
+       return path;
+};
+////////////// Standard Row Functions //////////////
+
+Group.prototype.getElement = function () {
+       this.addBindingsd = false;
+
+       this._visSet();
+
+       if (this.visible) {
+               this.element.classList.add("tabulator-group-visible");
+       } else {
+               this.element.classList.remove("tabulator-group-visible");
+       }
+
+       for (var i = 0; i < this.element.childNodes.length; ++i) {
+               this.element.childNodes[i].parentNode.removeChild(this.element.childNodes[i]);
+       }
+
+       this.generateGroupHeaderContents();
+
+       // this.addBindings();
+
+       return this.element;
+};
+
+Group.prototype.detachElement = function () {
+       if (this.element && this.element.parentNode) {
+               this.element.parentNode.removeChild(this.element);
+       }
+};
+
+//normalize the height of elements in the row
+Group.prototype.normalizeHeight = function () {
+       this.setHeight(this.element.clientHeight);
+};
+
+Group.prototype.initialize = function (force) {
+       if (!this.initialized || force) {
+               this.normalizeHeight();
+               this.initialized = true;
+       }
+};
+
+Group.prototype.reinitialize = function () {
+       this.initialized = false;
+       this.height = 0;
+
+       if (Tabulator.prototype.helpers.elVisible(this.element)) {
+               this.initialize(true);
+       }
+};
+
+Group.prototype.setHeight = function (height) {
+       if (this.height != height) {
+               this.height = height;
+               this.outerHeight = this.element.offsetHeight;
+       }
+};
+
+//return rows outer height
+Group.prototype.getHeight = function () {
+       return this.outerHeight;
+};
+
+Group.prototype.getGroup = function () {
+       return this;
+};
+
+Group.prototype.reinitializeHeight = function () {};
+Group.prototype.calcHeight = function () {};
+Group.prototype.setCellHeight = function () {};
+Group.prototype.clearCellHeight = function () {};
+
+//////////////// Object Generation /////////////////
+Group.prototype.getComponent = function () {
+       if (!this.component) {
+               this.component = new GroupComponent(this);
+       }
+
+       return this.component;
+};
+
+//////////////////////////////////////////////////
+////////////// Group Row Extension ///////////////
+//////////////////////////////////////////////////
+
+var GroupRows = function GroupRows(table) {
+
+       this.table = table; //hold Tabulator object
+
+       this.groupIDLookups = false; //enable table grouping and set field to group by
+       this.startOpen = [function () {
+               return false;
+       }]; //starting state of group
+       this.headerGenerator = [function () {
+               return "";
+       }];
+       this.groupList = []; //ordered list of groups
+       this.allowedValues = false;
+       this.groups = {}; //hold row groups
+       this.displayIndex = 0; //index in display pipeline
+};
+
+//initialize group configuration
+GroupRows.prototype.initialize = function () {
+       var self = this,
+           groupBy = self.table.options.groupBy,
+           startOpen = self.table.options.groupStartOpen,
+           groupHeader = self.table.options.groupHeader;
+
+       this.allowedValues = self.table.options.groupValues;
+
+       if (Array.isArray(groupBy) && Array.isArray(groupHeader) && groupBy.length > groupHeader.length) {
+               console.warn("Error creating group headers, groupHeader array is shorter than groupBy array");
+       }
+
+       self.headerGenerator = [function () {
+               return "";
+       }];
+       this.startOpen = [function () {
+               return false;
+       }]; //starting state of group
+
+       self.table.modules.localize.bind("groups|item", function (langValue, lang) {
+               self.headerGenerator[0] = function (value, count, data) {
+                       //header layout function
+                       return (typeof value === "undefined" ? "" : value) + "<span>(" + count + " " + (count === 1 ? langValue : lang.groups.items) + ")</span>";
+               };
+       });
+
+       this.groupIDLookups = [];
+
+       if (Array.isArray(groupBy) || groupBy) {
+               if (this.table.modExists("columnCalcs") && this.table.options.columnCalcs != "table" && this.table.options.columnCalcs != "both") {
+                       this.table.modules.columnCalcs.removeCalcs();
+               }
+       } else {
+               if (this.table.modExists("columnCalcs") && this.table.options.columnCalcs != "group") {
+
+                       var cols = this.table.columnManager.getRealColumns();
+
+                       cols.forEach(function (col) {
+                               if (col.definition.topCalc) {
+                                       self.table.modules.columnCalcs.initializeTopRow();
+                               }
+
+                               if (col.definition.bottomCalc) {
+                                       self.table.modules.columnCalcs.initializeBottomRow();
+                               }
+                       });
+               }
+       }
+
+       if (!Array.isArray(groupBy)) {
+               groupBy = [groupBy];
+       }
+
+       groupBy.forEach(function (group, i) {
+               var lookupFunc, column;
+
+               if (typeof group == "function") {
+                       lookupFunc = group;
+               } else {
+                       column = self.table.columnManager.getColumnByField(group);
+
+                       if (column) {
+                               lookupFunc = function lookupFunc(data) {
+                                       return column.getFieldValue(data);
+                               };
+                       } else {
+                               lookupFunc = function lookupFunc(data) {
+                                       return data[group];
+                               };
+                       }
+               }
+
+               self.groupIDLookups.push({
+                       field: typeof group === "function" ? false : group,
+                       func: lookupFunc,
+                       values: self.allowedValues ? self.allowedValues[i] : false
+               });
+       });
+
+       if (startOpen) {
+
+               if (!Array.isArray(startOpen)) {
+                       startOpen = [startOpen];
+               }
+
+               startOpen.forEach(function (level) {
+                       level = typeof level == "function" ? level : function () {
+                               return true;
+                       };
+               });
+
+               self.startOpen = startOpen;
+       }
+
+       if (groupHeader) {
+               self.headerGenerator = Array.isArray(groupHeader) ? groupHeader : [groupHeader];
+       }
+
+       this.initialized = true;
+};
+
+GroupRows.prototype.setDisplayIndex = function (index) {
+       this.displayIndex = index;
+};
+
+GroupRows.prototype.getDisplayIndex = function () {
+       return this.displayIndex;
+};
+
+//return appropriate rows with group headers
+GroupRows.prototype.getRows = function (rows) {
+       if (this.groupIDLookups.length) {
+
+               this.table.options.dataGrouping.call(this.table);
+
+               this.generateGroups(rows);
+
+               if (this.table.options.dataGrouped) {
+                       this.table.options.dataGrouped.call(this.table, this.getGroups(true));
+               }
+
+               return this.updateGroupRows();
+       } else {
+               return rows.slice(0);
+       }
+};
+
+GroupRows.prototype.getGroups = function (compoment) {
+       var groupComponents = [];
+
+       this.groupList.forEach(function (group) {
+               groupComponents.push(compoment ? group.getComponent() : group);
+       });
+
+       return groupComponents;
+};
+
+GroupRows.prototype.getChildGroups = function (group) {
+       var _this2 = this;
+
+       var groupComponents = [];
+
+       if (!group) {
+               group = this;
+       }
+
+       group.groupList.forEach(function (child) {
+               if (child.groupList.length) {
+                       groupComponents = groupComponents.concat(_this2.getChildGroups(child));
+               } else {
+                       groupComponents.push(child);
+               }
+       });
+
+       return groupComponents;
+};
+
+GroupRows.prototype.wipe = function () {
+       this.groupList.forEach(function (group) {
+               group.wipe();
+       });
+};
+
+GroupRows.prototype.pullGroupListData = function (groupList) {
+       var self = this;
+       var groupListData = [];
+
+       groupList.forEach(function (group) {
+               var groupHeader = {};
+               groupHeader.level = 0;
+               groupHeader.rowCount = 0;
+               groupHeader.headerContent = "";
+               var childData = [];
+
+               if (group.hasSubGroups) {
+                       childData = self.pullGroupListData(group.groupList);
+
+                       groupHeader.level = group.level;
+                       groupHeader.rowCount = childData.length - group.groupList.length; // data length minus number of sub-headers
+                       groupHeader.headerContent = group.generator(group.key, groupHeader.rowCount, group.rows, group);
+
+                       groupListData.push(groupHeader);
+                       groupListData = groupListData.concat(childData);
+               } else {
+                       groupHeader.level = group.level;
+                       groupHeader.headerContent = group.generator(group.key, group.rows.length, group.rows, group);
+                       groupHeader.rowCount = group.getRows().length;
+
+                       groupListData.push(groupHeader);
+
+                       group.getRows().forEach(function (row) {
+                               groupListData.push(row.getData("data"));
+                       });
+               }
+       });
+
+       return groupListData;
+};
+
+GroupRows.prototype.getGroupedData = function () {
+
+       return this.pullGroupListData(this.groupList);
+};
+
+GroupRows.prototype.getRowGroup = function (row) {
+       var match = false;
+
+       this.groupList.forEach(function (group) {
+               var result = group.getRowGroup(row);
+
+               if (result) {
+                       match = result;
+               }
+       });
+
+       return match;
+};
+
+GroupRows.prototype.countGroups = function () {
+       return this.groupList.length;
+};
+
+GroupRows.prototype.generateGroups = function (rows) {
+       var self = this,
+           oldGroups = self.groups;
+
+       self.groups = {};
+       self.groupList = [];
+
+       if (this.allowedValues && this.allowedValues[0]) {
+               this.allowedValues[0].forEach(function (value) {
+                       self.createGroup(value, 0, oldGroups);
+               });
+
+               rows.forEach(function (row) {
+                       self.assignRowToExistingGroup(row, oldGroups);
+               });
+       } else {
+               rows.forEach(function (row) {
+                       self.assignRowToGroup(row, oldGroups);
+               });
+       }
+};
+
+GroupRows.prototype.createGroup = function (groupID, level, oldGroups) {
+       var groupKey = level + "_" + groupID,
+           group;
+
+       oldGroups = oldGroups || [];
+
+       group = new Group(this, false, level, groupID, this.groupIDLookups[0].field, this.headerGenerator[0], oldGroups[groupKey]);
+
+       this.groups[groupKey] = group;
+       this.groupList.push(group);
+};
+
+// GroupRows.prototype.assignRowToGroup = function(row, oldGroups){
+//     var groupID = this.groupIDLookups[0].func(row.getData()),
+//     groupKey = "0_" + groupID;
+
+//     if(!this.groups[groupKey]){
+//             this.createGroup(groupID, 0, oldGroups);
+//     }
+
+//     this.groups[groupKey].addRow(row);
+// };
+
+GroupRows.prototype.assignRowToExistingGroup = function (row, oldGroups) {
+       var groupID = this.groupIDLookups[0].func(row.getData()),
+           groupKey = "0_" + groupID;
+
+       if (this.groups[groupKey]) {
+               this.groups[groupKey].addRow(row);
+       }
+};
+
+GroupRows.prototype.assignRowToGroup = function (row, oldGroups) {
+       var groupID = this.groupIDLookups[0].func(row.getData()),
+           newGroupNeeded = !this.groups["0_" + groupID];
+
+       if (newGroupNeeded) {
+               this.createGroup(groupID, 0, oldGroups);
+       }
+
+       this.groups["0_" + groupID].addRow(row);
+
+       return !newGroupNeeded;
+};
+
+GroupRows.prototype.reassignRowToGroup = function (row) {
+       var oldRowGroup = row.getGroup(),
+           oldGroupPath = oldRowGroup.getPath(),
+           newGroupPath = this.getExpectedPath(row),
+           samePath = true;
+       // figure out if new group path is the same as old group path
+       var samePath = oldGroupPath.length == newGroupPath.length && oldGroupPath.every(function (element, index) {
+               return element === newGroupPath[index];
+       });
+       // refresh if they new path and old path aren't the same (aka the row's groupings have changed)
+       if (!samePath) {
+               oldRowGroup.removeRow(row);
+               this.assignRowToGroup(row, self.groups);
+               this.table.rowManager.refreshActiveData("group", false, true);
+       }
+};
+
+GroupRows.prototype.getExpectedPath = function (row) {
+       var groupPath = [],
+           rowData = row.getData();
+       this.groupIDLookups.forEach(function (groupId) {
+               groupPath.push(groupId.func(rowData));
+       });
+       return groupPath;
+};
+
+GroupRows.prototype.updateGroupRows = function (force) {
+       var self = this,
+           output = [],
+           oldRowCount;
+
+       self.groupList.forEach(function (group) {
+               output = output.concat(group.getHeadersAndRows());
+       });
+
+       //force update of table display
+       if (force) {
+
+               var displayIndex = self.table.rowManager.setDisplayRows(output, this.getDisplayIndex());
+
+               if (displayIndex !== true) {
+                       this.setDisplayIndex(displayIndex);
+               }
+
+               self.table.rowManager.refreshActiveData("group", true, true);
+       }
+
+       return output;
+};
+
+GroupRows.prototype.scrollHeaders = function (left) {
+       if (this.table.options.virtualDomHoz) {
+               left -= this.table.vdomHoz.vDomPadLeft;
+       }
+
+       left = left + "px";
+
+       this.groupList.forEach(function (group) {
+               group.scrollHeader(left);
+       });
+};
+
+GroupRows.prototype.removeGroup = function (group) {
+       var groupKey = group.level + "_" + group.key,
+           index;
+
+       if (this.groups[groupKey]) {
+               delete this.groups[groupKey];
+
+               index = this.groupList.indexOf(group);
+
+               if (index > -1) {
+                       this.groupList.splice(index, 1);
+               }
+       }
+};
+
+Tabulator.prototype.registerModule("groupRows", GroupRows);
\ No newline at end of file
diff --git a/website/js/vendor/tabulator/js/modules/group_rows.min.js b/website/js/vendor/tabulator/js/modules/group_rows.min.js
new file mode 100644 (file)
index 0000000..f1b6996
--- /dev/null
@@ -0,0 +1,2 @@
+/* Tabulator v4.8.3 (c) Oliver Folkerd */
+var GroupComponent=function(t){this._group=t,this.type="GroupComponent"};GroupComponent.prototype.getKey=function(){return this._group.key},GroupComponent.prototype.getField=function(){return this._group.field},GroupComponent.prototype.getElement=function(){return this._group.element},GroupComponent.prototype.getRows=function(){return this._group.getRows(!0)},GroupComponent.prototype.getSubGroups=function(){return this._group.getSubGroups(!0)},GroupComponent.prototype.getParentGroup=function(){return!!this._group.parent&&this._group.parent.getComponent()},GroupComponent.prototype.getVisibility=function(){return console.warn("getVisibility function is deprecated, you should now use the isVisible function"),this._group.visible},GroupComponent.prototype.isVisible=function(){return this._group.visible},GroupComponent.prototype.show=function(){this._group.show()},GroupComponent.prototype.hide=function(){this._group.hide()},GroupComponent.prototype.toggle=function(){this._group.toggleVisibility()},GroupComponent.prototype._getSelf=function(){return this._group},GroupComponent.prototype.getTable=function(){return this._group.groupManager.table};var Group=function(t,o,e,r,i,s,n){this.groupManager=t,this.parent=o,this.key=r,this.level=e,this.field=i,this.hasSubGroups=e<t.groupIDLookups.length-1,this.addRow=this.hasSubGroups?this._addRowToGroup:this._addRow,this.type="group",this.old=n,this.rows=[],this.groups=[],this.groupList=[],this.generator=s,this.elementContents=!1,this.height=0,this.outerHeight=0,this.initialized=!1,this.calcs={},this.initialized=!1,this.modules={},this.arrowElement=!1,this.visible=n?n.visible:void 0!==t.startOpen[e]?t.startOpen[e]:t.startOpen[0],this.component=null,this.createElements(),this.addBindings(),this.createValueGroups()};Group.prototype.wipe=function(){this.groupList.length?this.groupList.forEach(function(t){t.wipe()}):(this.element=!1,this.arrowElement=!1,this.elementContents=!1)},Group.prototype.createElements=function(){var t=document.createElement("div");t.classList.add("tabulator-arrow"),this.element=document.createElement("div"),this.element.classList.add("tabulator-row"),this.element.classList.add("tabulator-group"),this.element.classList.add("tabulator-group-level-"+this.level),this.element.setAttribute("role","rowgroup"),this.arrowElement=document.createElement("div"),this.arrowElement.classList.add("tabulator-group-toggle"),this.arrowElement.appendChild(t),!1!==this.groupManager.table.options.movableRows&&this.groupManager.table.modExists("moveRow")&&this.groupManager.table.modules.moveRow.initializeGroupHeader(this)},Group.prototype.createValueGroups=function(){var t=this,o=this.level+1;this.groupManager.allowedValues&&this.groupManager.allowedValues[o]&&this.groupManager.allowedValues[o].forEach(function(e){t._createGroup(e,o)})},Group.prototype.addBindings=function(){var t,o,e,r,i=this;i.groupManager.table.options.groupClick&&i.element.addEventListener("click",function(t){i.groupManager.table.options.groupClick.call(i.groupManager.table,t,i.getComponent())}),i.groupManager.table.options.groupDblClick&&i.element.addEventListener("dblclick",function(t){i.groupManager.table.options.groupDblClick.call(i.groupManager.table,t,i.getComponent())}),i.groupManager.table.options.groupContext&&i.element.addEventListener("contextmenu",function(t){i.groupManager.table.options.groupContext.call(i.groupManager.table,t,i.getComponent())}),(i.groupManager.table.options.groupContextMenu||i.groupManager.table.options.groupClickMenu)&&i.groupManager.table.modExists("menu")&&i.groupManager.table.modules.menu.initializeGroup.call(i.groupManager.table.modules.menu,i),i.groupManager.table.options.groupTap&&(e=!1,i.element.addEventListener("touchstart",function(t){e=!0},{passive:!0}),i.element.addEventListener("touchend",function(t){e&&i.groupManager.table.options.groupTap(t,i.getComponent()),e=!1})),i.groupManager.table.options.groupDblTap&&(t=null,i.element.addEventListener("touchend",function(o){t?(clearTimeout(t),t=null,i.groupManager.table.options.groupDblTap(o,i.getComponent())):t=setTimeout(function(){clearTimeout(t),t=null},300)})),i.groupManager.table.options.groupTapHold&&(o=null,i.element.addEventListener("touchstart",function(t){clearTimeout(o),o=setTimeout(function(){clearTimeout(o),o=null,e=!1,i.groupManager.table.options.groupTapHold(t,i.getComponent())},1e3)},{passive:!0}),i.element.addEventListener("touchend",function(t){clearTimeout(o),o=null})),i.groupManager.table.options.groupToggleElement&&(r="arrow"==i.groupManager.table.options.groupToggleElement?i.arrowElement:i.element,r.addEventListener("click",function(t){t.stopPropagation(),t.stopImmediatePropagation(),i.toggleVisibility()}))},Group.prototype._createGroup=function(t,o){var e=o+"_"+t,r=new Group(this.groupManager,this,o,t,this.groupManager.groupIDLookups[o].field,this.groupManager.headerGenerator[o]||this.groupManager.headerGenerator[0],!!this.old&&this.old.groups[e]);this.groups[e]=r,this.groupList.push(r)},Group.prototype._addRowToGroup=function(t){var o=this.level+1;if(this.hasSubGroups){var e=this.groupManager.groupIDLookups[o].func(t.getData()),r=o+"_"+e;this.groupManager.allowedValues&&this.groupManager.allowedValues[o]?this.groups[r]&&this.groups[r].addRow(t):(this.groups[r]||this._createGroup(e,o),this.groups[r].addRow(t))}},Group.prototype._addRow=function(t){this.rows.push(t),t.modules.group=this},Group.prototype.insertRow=function(t,o,e){var r=this.conformRowData({});t.updateData(r);var i=this.rows.indexOf(o);i>-1?e?this.rows.splice(i+1,0,t):this.rows.splice(i,0,t):e?this.rows.push(t):this.rows.unshift(t),t.modules.group=this,this.generateGroupHeaderContents(),this.groupManager.table.modExists("columnCalcs")&&"table"!=this.groupManager.table.options.columnCalcs&&this.groupManager.table.modules.columnCalcs.recalcGroup(this),this.groupManager.updateGroupRows(!0)},Group.prototype.scrollHeader=function(t){this.arrowElement.style.marginLeft=t,this.groupList.forEach(function(o){o.scrollHeader(t)})},Group.prototype.getRowIndex=function(t){},Group.prototype.conformRowData=function(t){return this.field?t[this.field]=this.key:console.warn("Data Conforming Error - Cannot conform row data to match new group as groupBy is a function"),this.parent&&(t=this.parent.conformRowData(t)),t},Group.prototype.removeRow=function(t){var o=this.rows.indexOf(t),e=t.getElement();o>-1&&this.rows.splice(o,1),this.groupManager.table.options.groupValues||this.rows.length?(e.parentNode&&e.parentNode.removeChild(e),this.generateGroupHeaderContents(),this.groupManager.table.modExists("columnCalcs")&&"table"!=this.groupManager.table.options.columnCalcs&&this.groupManager.table.modules.columnCalcs.recalcGroup(this)):(this.parent?this.parent.removeGroup(this):this.groupManager.removeGroup(this),this.groupManager.updateGroupRows(!0))},Group.prototype.removeGroup=function(t){var o,e=t.level+"_"+t.key;this.groups[e]&&(delete this.groups[e],o=this.groupList.indexOf(t),o>-1&&this.groupList.splice(o,1),this.groupList.length||(this.parent?this.parent.removeGroup(this):this.groupManager.removeGroup(this)))},Group.prototype.getHeadersAndRows=function(t){var o=[];return o.push(this),this._visSet(),this.visible?this.groupList.length?this.groupList.forEach(function(e){o=o.concat(e.getHeadersAndRows(t))}):(!t&&"table"!=this.groupManager.table.options.columnCalcs&&this.groupManager.table.modExists("columnCalcs")&&this.groupManager.table.modules.columnCalcs.hasTopCalcs()&&(this.calcs.top&&(this.calcs.top.detachElement(),this.calcs.top.deleteCells()),this.calcs.top=this.groupManager.table.modules.columnCalcs.generateTopRow(this.rows),o.push(this.calcs.top)),o=o.concat(this.rows),!t&&"table"!=this.groupManager.table.options.columnCalcs&&this.groupManager.table.modExists("columnCalcs")&&this.groupManager.table.modules.columnCalcs.hasBottomCalcs()&&(this.calcs.bottom&&(this.calcs.bottom.detachElement(),this.calcs.bottom.deleteCells()),this.calcs.bottom=this.groupManager.table.modules.columnCalcs.generateBottomRow(this.rows),o.push(this.calcs.bottom))):this.groupList.length||"table"==this.groupManager.table.options.columnCalcs||this.groupManager.table.modExists("columnCalcs")&&(!t&&this.groupManager.table.modules.columnCalcs.hasTopCalcs()&&(this.calcs.top&&(this.calcs.top.detachElement(),this.calcs.top.deleteCells()),this.groupManager.table.options.groupClosedShowCalcs&&(this.calcs.top=this.groupManager.table.modules.columnCalcs.generateTopRow(this.rows),o.push(this.calcs.top))),!t&&this.groupManager.table.modules.columnCalcs.hasBottomCalcs()&&(this.calcs.bottom&&(this.calcs.bottom.detachElement(),this.calcs.bottom.deleteCells()),this.groupManager.table.options.groupClosedShowCalcs&&(this.calcs.bottom=this.groupManager.table.modules.columnCalcs.generateBottomRow(this.rows),o.push(this.calcs.bottom)))),o},Group.prototype.getData=function(t,o){var e=[];return this._visSet(),(!t||t&&this.visible)&&this.rows.forEach(function(t){e.push(t.getData(o||"data"))}),e},Group.prototype.getRowCount=function(){var t=0;return this.groupList.length?this.groupList.forEach(function(o){t+=o.getRowCount()}):t=this.rows.length,t},Group.prototype.toggleVisibility=function(){this.visible?this.hide():this.show()},Group.prototype.hide=function(){this.visible=!1,"classic"!=this.groupManager.table.rowManager.getRenderMode()||this.groupManager.table.options.pagination?this.groupManager.updateGroupRows(!0):(this.element.classList.remove("tabulator-group-visible"),this.groupList.length?this.groupList.forEach(function(t){t.getHeadersAndRows().forEach(function(t){t.detachElement()})}):this.rows.forEach(function(t){var o=t.getElement();o.parentNode.removeChild(o)}),this.groupManager.table.rowManager.setDisplayRows(this.groupManager.updateGroupRows(),this.groupManager.getDisplayIndex()),this.groupManager.table.rowManager.checkClassicModeGroupHeaderWidth()),this.groupManager.table.options.groupVisibilityChanged.call(this.table,this.getComponent(),!1)},Group.prototype.show=function(){var t=this;if(t.visible=!0,"classic"!=this.groupManager.table.rowManager.getRenderMode()||this.groupManager.table.options.pagination)this.groupManager.updateGroupRows(!0);else{this.element.classList.add("tabulator-group-visible");var o=t.getElement();this.groupList.length?this.groupList.forEach(function(t){t.getHeadersAndRows().forEach(function(t){var e=t.getElement();o.parentNode.insertBefore(e,o.nextSibling),t.initialize(),o=e})}):t.rows.forEach(function(t){var e=t.getElement();o.parentNode.insertBefore(e,o.nextSibling),t.initialize(),o=e}),this.groupManager.table.rowManager.setDisplayRows(this.groupManager.updateGroupRows(),this.groupManager.getDisplayIndex()),this.groupManager.table.rowManager.checkClassicModeGroupHeaderWidth()}this.groupManager.table.options.groupVisibilityChanged.call(this.table,this.getComponent(),!0)},Group.prototype._visSet=function(){var t=[];"function"==typeof this.visible&&(this.rows.forEach(function(o){t.push(o.getData())}),this.visible=this.visible(this.key,this.getRowCount(),t,this.getComponent()))},Group.prototype.getRowGroup=function(t){var o=!1;return this.groupList.length?this.groupList.forEach(function(e){var r=e.getRowGroup(t);r&&(o=r)}):this.rows.find(function(o){return o===t})&&(o=this),o},Group.prototype.getSubGroups=function(t){var o=[];return this.groupList.forEach(function(e){o.push(t?e.getComponent():e)}),o},Group.prototype.getRows=function(t){var o=[];return this.rows.forEach(function(e){o.push(t?e.getComponent():e)}),o},Group.prototype.generateGroupHeaderContents=function(){var t=[];for(this.rows.forEach(function(o){t.push(o.getData())}),this.elementContents=this.generator(this.key,this.getRowCount(),t,this.getComponent());this.element.firstChild;)this.element.removeChild(this.element.firstChild);"string"==typeof this.elementContents?this.element.innerHTML=this.elementContents:this.element.appendChild(this.elementContents),this.element.insertBefore(this.arrowElement,this.element.firstChild)},Group.prototype.getPath=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];return t.unshift(this.key),this.parent&&this.parent.getPath(t),t},Group.prototype.getElement=function(){this.addBindingsd=!1,this._visSet(),this.visible?this.element.classList.add("tabulator-group-visible"):this.element.classList.remove("tabulator-group-visible");for(var t=0;t<this.element.childNodes.length;++t)this.element.childNodes[t].parentNode.removeChild(this.element.childNodes[t]);return this.generateGroupHeaderContents(),this.element},Group.prototype.detachElement=function(){this.element&&this.element.parentNode&&this.element.parentNode.removeChild(this.element)},Group.prototype.normalizeHeight=function(){this.setHeight(this.element.clientHeight)},Group.prototype.initialize=function(t){this.initialized&&!t||(this.normalizeHeight(),this.initialized=!0)},Group.prototype.reinitialize=function(){this.initialized=!1,this.height=0,Tabulator.prototype.helpers.elVisible(this.element)&&this.initialize(!0)},Group.prototype.setHeight=function(t){this.height!=t&&(this.height=t,this.outerHeight=this.element.offsetHeight)},Group.prototype.getHeight=function(){return this.outerHeight},Group.prototype.getGroup=function(){return this},Group.prototype.reinitializeHeight=function(){},Group.prototype.calcHeight=function(){},Group.prototype.setCellHeight=function(){},Group.prototype.clearCellHeight=function(){},Group.prototype.getComponent=function(){return this.component||(this.component=new GroupComponent(this)),this.component};var GroupRows=function(t){this.table=t,this.groupIDLookups=!1,this.startOpen=[function(){return!1}],this.headerGenerator=[function(){return""}],this.groupList=[],this.allowedValues=!1,this.groups={},this.displayIndex=0};GroupRows.prototype.initialize=function(){var t=this,o=t.table.options.groupBy,e=t.table.options.groupStartOpen,r=t.table.options.groupHeader;if(this.allowedValues=t.table.options.groupValues,Array.isArray(o)&&Array.isArray(r)&&o.length>r.length&&console.warn("Error creating group headers, groupHeader array is shorter than groupBy array"),t.headerGenerator=[function(){return""}],this.startOpen=[function(){return!1}],t.table.modules.localize.bind("groups|item",function(o,e){t.headerGenerator[0]=function(t,r,i){return(void 0===t?"":t)+"<span>("+r+" "+(1===r?o:e.groups.items)+")</span>"}}),this.groupIDLookups=[],Array.isArray(o)||o)this.table.modExists("columnCalcs")&&"table"!=this.table.options.columnCalcs&&"both"!=this.table.options.columnCalcs&&this.table.modules.columnCalcs.removeCalcs();else if(this.table.modExists("columnCalcs")&&"group"!=this.table.options.columnCalcs){var i=this.table.columnManager.getRealColumns();i.forEach(function(o){o.definition.topCalc&&t.table.modules.columnCalcs.initializeTopRow(),o.definition.bottomCalc&&t.table.modules.columnCalcs.initializeBottomRow()})}Array.isArray(o)||(o=[o]),o.forEach(function(o,e){var r,i;"function"==typeof o?r=o:(i=t.table.columnManager.getColumnByField(o),r=i?function(t){return i.getFieldValue(t)}:function(t){return t[o]}),t.groupIDLookups.push({field:"function"!=typeof o&&o,func:r,values:!!t.allowedValues&&t.allowedValues[e]})}),e&&(Array.isArray(e)||(e=[e]),e.forEach(function(t){t="function"==typeof t?t:function(){return!0}}),t.startOpen=e),r&&(t.headerGenerator=Array.isArray(r)?r:[r]),this.initialized=!0},GroupRows.prototype.setDisplayIndex=function(t){this.displayIndex=t},GroupRows.prototype.getDisplayIndex=function(){return this.displayIndex},GroupRows.prototype.getRows=function(t){return this.groupIDLookups.length?(this.table.options.dataGrouping.call(this.table),this.generateGroups(t),this.table.options.dataGrouped&&this.table.options.dataGrouped.call(this.table,this.getGroups(!0)),this.updateGroupRows()):t.slice(0)},GroupRows.prototype.getGroups=function(t){var o=[];return this.groupList.forEach(function(e){o.push(t?e.getComponent():e)}),o},GroupRows.prototype.getChildGroups=function(t){var o=this,e=[];return t||(t=this),t.groupList.forEach(function(t){t.groupList.length?e=e.concat(o.getChildGroups(t)):e.push(t)}),e},GroupRows.prototype.wipe=function(){this.groupList.forEach(function(t){t.wipe()})},GroupRows.prototype.pullGroupListData=function(t){var o=this,e=[];return t.forEach(function(t){var r={};r.level=0,r.rowCount=0,r.headerContent="";var i=[];t.hasSubGroups?(i=o.pullGroupListData(t.groupList),r.level=t.level,r.rowCount=i.length-t.groupList.length,r.headerContent=t.generator(t.key,r.rowCount,t.rows,t),e.push(r),e=e.concat(i)):(r.level=t.level,r.headerContent=t.generator(t.key,t.rows.length,t.rows,t),r.rowCount=t.getRows().length,e.push(r),t.getRows().forEach(function(t){e.push(t.getData("data"))}))}),e},GroupRows.prototype.getGroupedData=function(){return this.pullGroupListData(this.groupList)},GroupRows.prototype.getRowGroup=function(t){var o=!1;return this.groupList.forEach(function(e){var r=e.getRowGroup(t);r&&(o=r)}),o},GroupRows.prototype.countGroups=function(){return this.groupList.length},GroupRows.prototype.generateGroups=function(t){var o=this,e=o.groups;o.groups={},o.groupList=[],this.allowedValues&&this.allowedValues[0]?(this.allowedValues[0].forEach(function(t){o.createGroup(t,0,e)}),t.forEach(function(t){o.assignRowToExistingGroup(t,e)})):t.forEach(function(t){o.assignRowToGroup(t,e)})},GroupRows.prototype.createGroup=function(t,o,e){var r,i=o+"_"+t;e=e||[],r=new Group(this,!1,o,t,this.groupIDLookups[0].field,this.headerGenerator[0],e[i]),this.groups[i]=r,this.groupList.push(r)},GroupRows.prototype.assignRowToExistingGroup=function(t,o){var e=this.groupIDLookups[0].func(t.getData()),r="0_"+e;this.groups[r]&&this.groups[r].addRow(t)},GroupRows.prototype.assignRowToGroup=function(t,o){var e=this.groupIDLookups[0].func(t.getData()),r=!this.groups["0_"+e];return r&&this.createGroup(e,0,o),this.groups["0_"+e].addRow(t),!r},GroupRows.prototype.reassignRowToGroup=function(t){var o=t.getGroup(),e=o.getPath(),r=this.getExpectedPath(t);e.length==r.length&&e.every(function(t,o){return t===r[o]})||(o.removeRow(t),this.assignRowToGroup(t,self.groups),this.table.rowManager.refreshActiveData("group",!1,!0))},GroupRows.prototype.getExpectedPath=function(t){var o=[],e=t.getData();return this.groupIDLookups.forEach(function(t){o.push(t.func(e))}),o},GroupRows.prototype.updateGroupRows=function(t){var o=this,e=[];if(o.groupList.forEach(function(t){e=e.concat(t.getHeadersAndRows())}),t){var r=o.table.rowManager.setDisplayRows(e,this.getDisplayIndex());!0!==r&&this.setDisplayIndex(r),o.table.rowManager.refreshActiveData("group",!0,!0)}return e},GroupRows.prototype.scrollHeaders=function(t){this.table.options.virtualDomHoz&&(t-=this.table.vdomHoz.vDomPadLeft),t+="px",this.groupList.forEach(function(o){o.scrollHeader(t)})},GroupRows.prototype.removeGroup=function(t){var o,e=t.level+"_"+t.key;this.groups[e]&&(delete this.groups[e],(o=this.groupList.indexOf(t))>-1&&this.groupList.splice(o,1))},Tabulator.prototype.registerModule("groupRows",GroupRows);
\ No newline at end of file
diff --git a/website/js/vendor/tabulator/js/modules/history.js b/website/js/vendor/tabulator/js/modules/history.js
new file mode 100644 (file)
index 0000000..87a053d
--- /dev/null
@@ -0,0 +1,156 @@
+/* Tabulator v4.8.3 (c) Oliver Folkerd */
+
+var History = function History(table) {
+       this.table = table; //hold Tabulator object
+
+       this.history = [];
+       this.index = -1;
+};
+
+History.prototype.clear = function () {
+       this.history = [];
+       this.index = -1;
+};
+
+History.prototype.action = function (type, component, data) {
+
+       this.history = this.history.slice(0, this.index + 1);
+
+       this.history.push({
+               type: type,
+               component: component,
+               data: data
+       });
+
+       this.index++;
+};
+
+History.prototype.getHistoryUndoSize = function () {
+       return this.index + 1;
+};
+
+History.prototype.getHistoryRedoSize = function () {
+       return this.history.length - (this.index + 1);
+};
+
+History.prototype.clearComponentHistory = function (component) {
+       var index = this.history.findIndex(function (item) {
+               return item.component === component;
+       });
+
+       if (index > -1) {
+               this.history.splice(index, 1);
+               if (index <= this.index) {
+                       this.index--;
+               }
+
+               this.clearComponentHistory(component);
+       }
+};
+
+History.prototype.undo = function () {
+
+       if (this.index > -1) {
+               var action = this.history[this.index];
+
+               this.undoers[action.type].call(this, action);
+
+               this.index--;
+
+               this.table.options.historyUndo.call(this.table, action.type, action.component.getComponent(), action.data);
+
+               return true;
+       } else {
+               console.warn("History Undo Error - No more history to undo");
+               return false;
+       }
+};
+
+History.prototype.redo = function () {
+       if (this.history.length - 1 > this.index) {
+
+               this.index++;
+
+               var action = this.history[this.index];
+
+               this.redoers[action.type].call(this, action);
+
+               this.table.options.historyRedo.call(this.table, action.type, action.component.getComponent(), action.data);
+
+               return true;
+       } else {
+               console.warn("History Redo Error - No more history to redo");
+               return false;
+       }
+};
+
+History.prototype.undoers = {
+       cellEdit: function cellEdit(action) {
+               action.component.setValueProcessData(action.data.oldValue);
+       },
+
+       rowAdd: function rowAdd(action) {
+               action.component.deleteActual();
+       },
+
+       rowDelete: function rowDelete(action) {
+               var newRow = this.table.rowManager.addRowActual(action.data.data, action.data.pos, action.data.index);
+
+               if (this.table.options.groupBy && this.table.modExists("groupRows")) {
+                       this.table.modules.groupRows.updateGroupRows(true);
+               }
+
+               this._rebindRow(action.component, newRow);
+       },
+
+       rowMove: function rowMove(action) {
+               this.table.rowManager.moveRowActual(action.component, this.table.rowManager.rows[action.data.posFrom], !action.data.after);
+               this.table.rowManager.redraw();
+       }
+};
+
+History.prototype.redoers = {
+       cellEdit: function cellEdit(action) {
+               action.component.setValueProcessData(action.data.newValue);
+       },
+
+       rowAdd: function rowAdd(action) {
+               var newRow = this.table.rowManager.addRowActual(action.data.data, action.data.pos, action.data.index);
+
+               if (this.table.options.groupBy && this.table.modExists("groupRows")) {
+                       this.table.modules.groupRows.updateGroupRows(true);
+               }
+
+               this._rebindRow(action.component, newRow);
+       },
+
+       rowDelete: function rowDelete(action) {
+               action.component.deleteActual();
+       },
+
+       rowMove: function rowMove(action) {
+               this.table.rowManager.moveRowActual(action.component, this.table.rowManager.rows[action.data.posTo], action.data.after);
+               this.table.rowManager.redraw();
+       }
+};
+
+//rebind rows to new element after deletion
+History.prototype._rebindRow = function (oldRow, newRow) {
+       this.history.forEach(function (action) {
+               if (action.component instanceof Row) {
+                       if (action.component === oldRow) {
+                               action.component = newRow;
+                       }
+               } else if (action.component instanceof Cell) {
+                       if (action.component.row === oldRow) {
+                               var field = action.component.column.getField();
+
+                               if (field) {
+                                       action.component = newRow.getCell(field);
+                               }
+                       }
+               }
+       });
+};
+
+Tabulator.prototype.registerModule("history", History);
\ No newline at end of file
diff --git a/website/js/vendor/tabulator/js/modules/history.min.js b/website/js/vendor/tabulator/js/modules/history.min.js
new file mode 100644 (file)
index 0000000..ed4acef
--- /dev/null
@@ -0,0 +1,2 @@
+/* Tabulator v4.8.3 (c) Oliver Folkerd */
+var History=function(t){this.table=t,this.history=[],this.index=-1};History.prototype.clear=function(){this.history=[],this.index=-1},History.prototype.action=function(t,o,e){this.history=this.history.slice(0,this.index+1),this.history.push({type:t,component:o,data:e}),this.index++},History.prototype.getHistoryUndoSize=function(){return this.index+1},History.prototype.getHistoryRedoSize=function(){return this.history.length-(this.index+1)},History.prototype.clearComponentHistory=function(t){var o=this.history.findIndex(function(o){return o.component===t});o>-1&&(this.history.splice(o,1),o<=this.index&&this.index--,this.clearComponentHistory(t))},History.prototype.undo=function(){if(this.index>-1){var t=this.history[this.index];return this.undoers[t.type].call(this,t),this.index--,this.table.options.historyUndo.call(this.table,t.type,t.component.getComponent(),t.data),!0}return console.warn("History Undo Error - No more history to undo"),!1},History.prototype.redo=function(){if(this.history.length-1>this.index){this.index++;var t=this.history[this.index];return this.redoers[t.type].call(this,t),this.table.options.historyRedo.call(this.table,t.type,t.component.getComponent(),t.data),!0}return console.warn("History Redo Error - No more history to redo"),!1},History.prototype.undoers={cellEdit:function(t){t.component.setValueProcessData(t.data.oldValue)},rowAdd:function(t){t.component.deleteActual()},rowDelete:function(t){var o=this.table.rowManager.addRowActual(t.data.data,t.data.pos,t.data.index);this.table.options.groupBy&&this.table.modExists("groupRows")&&this.table.modules.groupRows.updateGroupRows(!0),this._rebindRow(t.component,o)},rowMove:function(t){this.table.rowManager.moveRowActual(t.component,this.table.rowManager.rows[t.data.posFrom],!t.data.after),this.table.rowManager.redraw()}},History.prototype.redoers={cellEdit:function(t){t.component.setValueProcessData(t.data.newValue)},rowAdd:function(t){var o=this.table.rowManager.addRowActual(t.data.data,t.data.pos,t.data.index);this.table.options.groupBy&&this.table.modExists("groupRows")&&this.table.modules.groupRows.updateGroupRows(!0),this._rebindRow(t.component,o)},rowDelete:function(t){t.component.deleteActual()},rowMove:function(t){this.table.rowManager.moveRowActual(t.component,this.table.rowManager.rows[t.data.posTo],t.data.after),this.table.rowManager.redraw()}},History.prototype._rebindRow=function(t,o){this.history.forEach(function(e){if(e.component instanceof Row)e.component===t&&(e.component=o);else if(e.component instanceof Cell&&e.component.row===t){var i=e.component.column.getField();i&&(e.component=o.getCell(i))}})},Tabulator.prototype.registerModule("history",History);
\ No newline at end of file
diff --git a/website/js/vendor/tabulator/js/modules/html_table_import.js b/website/js/vendor/tabulator/js/modules/html_table_import.js
new file mode 100644 (file)
index 0000000..2f5f0fb
--- /dev/null
@@ -0,0 +1,191 @@
+var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
+
+/* Tabulator v4.8.3 (c) Oliver Folkerd */
+
+var HtmlTableImport = function HtmlTableImport(table) {
+       this.table = table; //hold Tabulator object
+       this.fieldIndex = [];
+       this.hasIndex = false;
+};
+
+HtmlTableImport.prototype.parseTable = function () {
+       var self = this,
+           element = self.table.element,
+           options = self.table.options,
+           columns = options.columns,
+           headers = element.getElementsByTagName("th"),
+           rows = element.getElementsByTagName("tbody")[0],
+           data = [],
+           newTable;
+
+       self.hasIndex = false;
+
+       self.table.options.htmlImporting.call(this.table);
+
+       rows = rows ? rows.getElementsByTagName("tr") : [];
+
+       //check for tablator inline options
+       self._extractOptions(element, options);
+
+       if (headers.length) {
+               self._extractHeaders(headers, rows);
+       } else {
+               self._generateBlankHeaders(headers, rows);
+       }
+
+       //iterate through table rows and build data set
+       for (var index = 0; index < rows.length; index++) {
+               var row = rows[index],
+                   cells = row.getElementsByTagName("td"),
+                   item = {};
+
+               //create index if the dont exist in table
+               if (!self.hasIndex) {
+                       item[options.index] = index;
+               }
+
+               for (var i = 0; i < cells.length; i++) {
+                       var cell = cells[i];
+                       if (typeof this.fieldIndex[i] !== "undefined") {
+                               item[this.fieldIndex[i]] = cell.innerHTML;
+                       }
+               }
+
+               //add row data to item
+               data.push(item);
+       }
+
+       //create new element
+       var newElement = document.createElement("div");
+
+       //transfer attributes to new element
+       var attributes = element.attributes;
+
+       // loop through attributes and apply them on div
+
+       for (var i in attributes) {
+               if (_typeof(attributes[i]) == "object") {
+                       newElement.setAttribute(attributes[i].name, attributes[i].value);
+               }
+       }
+
+       // replace table with div element
+       element.parentNode.replaceChild(newElement, element);
+
+       options.data = data;
+
+       self.table.options.htmlImported.call(this.table);
+
+       // // newElement.tabulator(options);
+
+       this.table.element = newElement;
+};
+
+//extract tabulator attribute options
+HtmlTableImport.prototype._extractOptions = function (element, options, defaultOptions) {
+       var attributes = element.attributes;
+       var optionsArr = defaultOptions ? Object.assign([], defaultOptions) : Object.keys(options);
+       var optionsList = {};
+
+       optionsArr.forEach(function (item) {
+               optionsList[item.toLowerCase()] = item;
+       });
+
+       for (var index in attributes) {
+               var attrib = attributes[index];
+               var name;
+
+               if (attrib && (typeof attrib === "undefined" ? "undefined" : _typeof(attrib)) == "object" && attrib.name && attrib.name.indexOf("tabulator-") === 0) {
+                       name = attrib.name.replace("tabulator-", "");
+
+                       if (typeof optionsList[name] !== "undefined") {
+                               options[optionsList[name]] = this._attribValue(attrib.value);
+                       }
+               }
+       }
+};
+
+//get value of attribute
+HtmlTableImport.prototype._attribValue = function (value) {
+       if (value === "true") {
+               return true;
+       }
+
+       if (value === "false") {
+               return false;
+       }
+
+       return value;
+};
+
+//find column if it has already been defined
+HtmlTableImport.prototype._findCol = function (title) {
+       var match = this.table.options.columns.find(function (column) {
+               return column.title === title;
+       });
+
+       return match || false;
+};
+
+//extract column from headers
+HtmlTableImport.prototype._extractHeaders = function (headers, rows) {
+       for (var index = 0; index < headers.length; index++) {
+               var header = headers[index],
+                   exists = false,
+                   col = this._findCol(header.textContent),
+                   width,
+                   attributes;
+
+               if (col) {
+                       exists = true;
+               } else {
+                       col = { title: header.textContent.trim() };
+               }
+
+               if (!col.field) {
+                       col.field = header.textContent.trim().toLowerCase().replace(" ", "_");
+               }
+
+               width = header.getAttribute("width");
+
+               if (width && !col.width) {
+                       col.width = width;
+               }
+
+               //check for tablator inline options
+               attributes = header.attributes;
+
+               // //check for tablator inline options
+               this._extractOptions(header, col, Column.prototype.defaultOptionList);
+
+               this.fieldIndex[index] = col.field;
+
+               if (col.field == this.table.options.index) {
+                       this.hasIndex = true;
+               }
+
+               if (!exists) {
+                       this.table.options.columns.push(col);
+               }
+       }
+};
+
+//generate blank headers
+HtmlTableImport.prototype._generateBlankHeaders = function (headers, rows) {
+       for (var index = 0; index < headers.length; index++) {
+               var header = headers[index],
+                   col = { title: "", field: "col" + index };
+
+               this.fieldIndex[index] = col.field;
+
+               var width = header.getAttribute("width");
+
+               if (width) {
+                       col.width = width;
+               }
+
+               this.table.options.columns.push(col);
+       }
+};
+
+Tabulator.prototype.registerModule("htmlTableImport", HtmlTableImport);
\ No newline at end of file
diff --git a/website/js/vendor/tabulator/js/modules/html_table_import.min.js b/website/js/vendor/tabulator/js/modules/html_table_import.min.js
new file mode 100644 (file)
index 0000000..0076035
--- /dev/null
@@ -0,0 +1,2 @@
+/* Tabulator v4.8.3 (c) Oliver Folkerd */
+var _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},HtmlTableImport=function(t){this.table=t,this.fieldIndex=[],this.hasIndex=!1};HtmlTableImport.prototype.parseTable=function(){var t=this,e=t.table.element,o=t.table.options,a=(o.columns,e.getElementsByTagName("th")),n=e.getElementsByTagName("tbody")[0],l=[];t.hasIndex=!1,t.table.options.htmlImporting.call(this.table),n=n?n.getElementsByTagName("tr"):[],t._extractOptions(e,o),a.length?t._extractHeaders(a,n):t._generateBlankHeaders(a,n);for(var r=0;r<n.length;r++){var i=n[r],s=i.getElementsByTagName("td"),p={};t.hasIndex||(p[o.index]=r);for(var m=0;m<s.length;m++){var d=s[m];void 0!==this.fieldIndex[m]&&(p[this.fieldIndex[m]]=d.innerHTML)}l.push(p)}var f=document.createElement("div"),b=e.attributes;for(var m in b)"object"==_typeof(b[m])&&f.setAttribute(b[m].name,b[m].value);e.parentNode.replaceChild(f,e),o.data=l,t.table.options.htmlImported.call(this.table),this.table.element=f},HtmlTableImport.prototype._extractOptions=function(t,e,o){var a=t.attributes,n=o?Object.assign([],o):Object.keys(e),l={};n.forEach(function(t){l[t.toLowerCase()]=t});for(var r in a){var i,s=a[r];s&&"object"==(void 0===s?"undefined":_typeof(s))&&s.name&&0===s.name.indexOf("tabulator-")&&(i=s.name.replace("tabulator-",""),void 0!==l[i]&&(e[l[i]]=this._attribValue(s.value)))}},HtmlTableImport.prototype._attribValue=function(t){return"true"===t||"false"!==t&&t},HtmlTableImport.prototype._findCol=function(t){return this.table.options.columns.find(function(e){return e.title===t})||!1},HtmlTableImport.prototype._extractHeaders=function(t,e){for(var o=0;o<t.length;o++){var a,n=t[o],l=!1,r=this._findCol(n.textContent);r?l=!0:r={title:n.textContent.trim()},r.field||(r.field=n.textContent.trim().toLowerCase().replace(" ","_")),a=n.getAttribute("width"),a&&!r.width&&(r.width=a),n.attributes,this._extractOptions(n,r,Column.prototype.defaultOptionList),this.fieldIndex[o]=r.field,r.field==this.table.options.index&&(this.hasIndex=!0),l||this.table.options.columns.push(r)}},HtmlTableImport.prototype._generateBlankHeaders=function(t,e){for(var o=0;o<t.length;o++){var a=t[o],n={title:"",field:"col"+o};this.fieldIndex[o]=n.field;var l=a.getAttribute("width");l&&(n.width=l),this.table.options.columns.push(n)}},Tabulator.prototype.registerModule("htmlTableImport",HtmlTableImport);
\ No newline at end of file
diff --git a/website/js/vendor/tabulator/js/modules/keybindings.js b/website/js/vendor/tabulator/js/modules/keybindings.js
new file mode 100644 (file)
index 0000000..cf80223
--- /dev/null
@@ -0,0 +1,392 @@
+var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
+
+/* Tabulator v4.8.3 (c) Oliver Folkerd */
+
+var Keybindings = function Keybindings(table) {
+       this.table = table; //hold Tabulator object
+       this.watchKeys = null;
+       this.pressedKeys = null;
+       this.keyupBinding = false;
+       this.keydownBinding = false;
+};
+
+Keybindings.prototype.initialize = function () {
+       var bindings = this.table.options.keybindings,
+           mergedBindings = {};
+
+       this.watchKeys = {};
+       this.pressedKeys = [];
+
+       if (bindings !== false) {
+
+               for (var key in this.bindings) {
+                       mergedBindings[key] = this.bindings[key];
+               }
+
+               if (Object.keys(bindings).length) {
+
+                       for (var _key in bindings) {
+                               mergedBindings[_key] = bindings[_key];
+                       }
+               }
+
+               this.mapBindings(mergedBindings);
+               this.bindEvents();
+       }
+};
+
+Keybindings.prototype.mapBindings = function (bindings) {
+       var _this = this;
+
+       var self = this;
+
+       var _loop = function _loop(key) {
+
+               if (_this.actions[key]) {
+
+                       if (bindings[key]) {
+
+                               if (_typeof(bindings[key]) !== "object") {
+                                       bindings[key] = [bindings[key]];
+                               }
+
+                               bindings[key].forEach(function (binding) {
+                                       self.mapBinding(key, binding);
+                               });
+                       }
+               } else {
+                       console.warn("Key Binding Error - no such action:", key);
+               }
+       };
+
+       for (var key in bindings) {
+               _loop(key);
+       }
+};
+
+Keybindings.prototype.mapBinding = function (action, symbolsList) {
+       var self = this;
+
+       var binding = {
+               action: this.actions[action],
+               keys: [],
+               ctrl: false,
+               shift: false,
+               meta: false
+       };
+
+       var symbols = symbolsList.toString().toLowerCase().split(" ").join("").split("+");
+
+       symbols.forEach(function (symbol) {
+               switch (symbol) {
+                       case "ctrl":
+                               binding.ctrl = true;
+                               break;
+
+                       case "shift":
+                               binding.shift = true;
+                               break;
+
+                       case "meta":
+                               binding.meta = true;
+                               break;
+
+                       default:
+                               symbol = parseInt(symbol);
+                               binding.keys.push(symbol);
+
+                               if (!self.watchKeys[symbol]) {
+                                       self.watchKeys[symbol] = [];
+                               }
+
+                               self.watchKeys[symbol].push(binding);
+               }
+       });
+};
+
+Keybindings.prototype.bindEvents = function () {
+       var self = this;
+
+       this.keyupBinding = function (e) {
+               var code = e.keyCode;
+               var bindings = self.watchKeys[code];
+
+               if (bindings) {
+
+                       self.pressedKeys.push(code);
+
+                       bindings.forEach(function (binding) {
+                               self.checkBinding(e, binding);
+                       });
+               }
+       };
+
+       this.keydownBinding = function (e) {
+               var code = e.keyCode;
+               var bindings = self.watchKeys[code];
+
+               if (bindings) {
+
+                       var index = self.pressedKeys.indexOf(code);
+
+                       if (index > -1) {
+                               self.pressedKeys.splice(index, 1);
+                       }
+               }
+       };
+
+       this.table.element.addEventListener("keydown", this.keyupBinding);
+
+       this.table.element.addEventListener("keyup", this.keydownBinding);
+};
+
+Keybindings.prototype.clearBindings = function () {
+       if (this.keyupBinding) {
+               this.table.element.removeEventListener("keydown", this.keyupBinding);
+       }
+
+       if (this.keydownBinding) {
+               this.table.element.removeEventListener("keyup", this.keydownBinding);
+       }
+};
+
+Keybindings.prototype.checkBinding = function (e, binding) {
+       var self = this,
+           match = true;
+
+       if (e.ctrlKey == binding.ctrl && e.shiftKey == binding.shift && e.metaKey == binding.meta) {
+               binding.keys.forEach(function (key) {
+                       var index = self.pressedKeys.indexOf(key);
+
+                       if (index == -1) {
+                               match = false;
+                       }
+               });
+
+               if (match) {
+                       binding.action.call(self, e);
+               }
+
+               return true;
+       }
+
+       return false;
+};
+
+//default bindings
+Keybindings.prototype.bindings = {
+       navPrev: "shift + 9",
+       navNext: 9,
+       navUp: 38,
+       navDown: 40,
+       scrollPageUp: 33,
+       scrollPageDown: 34,
+       scrollToStart: 36,
+       scrollToEnd: 35,
+       undo: "ctrl + 90",
+       redo: "ctrl + 89",
+       copyToClipboard: "ctrl + 67"
+};
+
+//default actions
+Keybindings.prototype.actions = {
+       keyBlock: function keyBlock(e) {
+               e.stopPropagation();
+               e.preventDefault();
+       },
+       scrollPageUp: function scrollPageUp(e) {
+               var rowManager = this.table.rowManager,
+                   newPos = rowManager.scrollTop - rowManager.height,
+                   scrollMax = rowManager.element.scrollHeight;
+
+               e.preventDefault();
+
+               if (rowManager.displayRowsCount) {
+                       if (newPos >= 0) {
+                               rowManager.element.scrollTop = newPos;
+                       } else {
+                               rowManager.scrollToRow(rowManager.getDisplayRows()[0]);
+                       }
+               }
+
+               this.table.element.focus();
+       },
+       scrollPageDown: function scrollPageDown(e) {
+               var rowManager = this.table.rowManager,
+                   newPos = rowManager.scrollTop + rowManager.height,
+                   scrollMax = rowManager.element.scrollHeight;
+
+               e.preventDefault();
+
+               if (rowManager.displayRowsCount) {
+                       if (newPos <= scrollMax) {
+                               rowManager.element.scrollTop = newPos;
+                       } else {
+                               rowManager.scrollToRow(rowManager.getDisplayRows()[rowManager.displayRowsCount - 1]);
+                       }
+               }
+
+               this.table.element.focus();
+       },
+       scrollToStart: function scrollToStart(e) {
+               var rowManager = this.table.rowManager;
+
+               e.preventDefault();
+
+               if (rowManager.displayRowsCount) {
+                       rowManager.scrollToRow(rowManager.getDisplayRows()[0]);
+               }
+
+               this.table.element.focus();
+       },
+       scrollToEnd: function scrollToEnd(e) {
+               var rowManager = this.table.rowManager;
+
+               e.preventDefault();
+
+               if (rowManager.displayRowsCount) {
+                       rowManager.scrollToRow(rowManager.getDisplayRows()[rowManager.displayRowsCount - 1]);
+               }
+
+               this.table.element.focus();
+       },
+       navPrev: function navPrev(e) {
+               var cell = false;
+
+               if (this.table.modExists("edit")) {
+                       cell = this.table.modules.edit.currentCell;
+
+                       if (cell) {
+                               e.preventDefault();
+                               cell.nav().prev();
+                       }
+               }
+       },
+
+       navNext: function navNext(e) {
+               var cell = false;
+               var newRow = this.table.options.tabEndNewRow;
+               var nav;
+
+               if (this.table.modExists("edit")) {
+                       cell = this.table.modules.edit.currentCell;
+
+                       if (cell) {
+                               e.preventDefault();
+
+                               nav = cell.nav();
+
+                               if (!nav.next()) {
+                                       if (newRow) {
+
+                                               cell.getElement().firstChild.blur();
+
+                                               if (newRow === true) {
+                                                       newRow = this.table.addRow({});
+                                               } else {
+                                                       if (typeof newRow == "function") {
+                                                               newRow = this.table.addRow(newRow(cell.row.getComponent()));
+                                                       } else {
+                                                               newRow = this.table.addRow(Object.assign({}, newRow));
+                                                       }
+                                               }
+
+                                               newRow.then(function () {
+                                                       setTimeout(function () {
+                                                               nav.next();
+                                                       });
+                                               });
+                                       }
+                               }
+                       }
+               }
+       },
+
+       navLeft: function navLeft(e) {
+               var cell = false;
+
+               if (this.table.modExists("edit")) {
+                       cell = this.table.modules.edit.currentCell;
+
+                       if (cell) {
+                               e.preventDefault();
+                               cell.nav().left();
+                       }
+               }
+       },
+
+       navRight: function navRight(e) {
+               var cell = false;
+
+               if (this.table.modExists("edit")) {
+                       cell = this.table.modules.edit.currentCell;
+
+                       if (cell) {
+                               e.preventDefault();
+                               cell.nav().right();
+                       }
+               }
+       },
+
+       navUp: function navUp(e) {
+               var cell = false;
+
+               if (this.table.modExists("edit")) {
+                       cell = this.table.modules.edit.currentCell;
+
+                       if (cell) {
+                               e.preventDefault();
+                               cell.nav().up();
+                       }
+               }
+       },
+
+       navDown: function navDown(e) {
+               var cell = false;
+
+               if (this.table.modExists("edit")) {
+                       cell = this.table.modules.edit.currentCell;
+
+                       if (cell) {
+                               e.preventDefault();
+                               cell.nav().down();
+                       }
+               }
+       },
+
+       undo: function undo(e) {
+               var cell = false;
+               if (this.table.options.history && this.table.modExists("history") && this.table.modExists("edit")) {
+
+                       cell = this.table.modules.edit.currentCell;
+
+                       if (!cell) {
+                               e.preventDefault();
+                               this.table.modules.history.undo();
+                       }
+               }
+       },
+
+       redo: function redo(e) {
+               var cell = false;
+               if (this.table.options.history && this.table.modExists("history") && this.table.modExists("edit")) {
+
+                       cell = this.table.modules.edit.currentCell;
+
+                       if (!cell) {
+                               e.preventDefault();
+                               this.table.modules.history.redo();
+                       }
+               }
+       },
+
+       copyToClipboard: function copyToClipboard(e) {
+               if (!this.table.modules.edit.currentCell) {
+                       if (this.table.modExists("clipboard", true)) {
+                               this.table.modules.clipboard.copy(false, true);
+                       }
+               }
+       }
+};
+
+Tabulator.prototype.registerModule("keybindings", Keybindings);
\ No newline at end of file
diff --git a/website/js/vendor/tabulator/js/modules/keybindings.min.js b/website/js/vendor/tabulator/js/modules/keybindings.min.js
new file mode 100644 (file)
index 0000000..96f0fcf
--- /dev/null
@@ -0,0 +1,2 @@
+/* Tabulator v4.8.3 (c) Oliver Folkerd */
+var _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Keybindings=function(t){this.table=t,this.watchKeys=null,this.pressedKeys=null,this.keyupBinding=!1,this.keydownBinding=!1};Keybindings.prototype.initialize=function(){var t=this.table.options.keybindings,e={};if(this.watchKeys={},this.pressedKeys=[],!1!==t){for(var i in this.bindings)e[i]=this.bindings[i];if(Object.keys(t).length)for(var n in t)e[n]=t[n];this.mapBindings(e),this.bindEvents()}},Keybindings.prototype.mapBindings=function(t){var e=this,i=this;for(var n in t)!function(n){e.actions[n]?t[n]&&("object"!==_typeof(t[n])&&(t[n]=[t[n]]),t[n].forEach(function(t){i.mapBinding(n,t)})):console.warn("Key Binding Error - no such action:",n)}(n)},Keybindings.prototype.mapBinding=function(t,e){var i=this,n={action:this.actions[t],keys:[],ctrl:!1,shift:!1,meta:!1};e.toString().toLowerCase().split(" ").join("").split("+").forEach(function(t){switch(t){case"ctrl":n.ctrl=!0;break;case"shift":n.shift=!0;break;case"meta":n.meta=!0;break;default:t=parseInt(t),n.keys.push(t),i.watchKeys[t]||(i.watchKeys[t]=[]),i.watchKeys[t].push(n)}})},Keybindings.prototype.bindEvents=function(){var t=this;this.keyupBinding=function(e){var i=e.keyCode,n=t.watchKeys[i];n&&(t.pressedKeys.push(i),n.forEach(function(i){t.checkBinding(e,i)}))},this.keydownBinding=function(e){var i=e.keyCode;if(t.watchKeys[i]){var n=t.pressedKeys.indexOf(i);n>-1&&t.pressedKeys.splice(n,1)}},this.table.element.addEventListener("keydown",this.keyupBinding),this.table.element.addEventListener("keyup",this.keydownBinding)},Keybindings.prototype.clearBindings=function(){this.keyupBinding&&this.table.element.removeEventListener("keydown",this.keyupBinding),this.keydownBinding&&this.table.element.removeEventListener("keyup",this.keydownBinding)},Keybindings.prototype.checkBinding=function(t,e){var i=this,n=!0;return t.ctrlKey==e.ctrl&&t.shiftKey==e.shift&&t.metaKey==e.meta&&(e.keys.forEach(function(t){-1==i.pressedKeys.indexOf(t)&&(n=!1)}),n&&e.action.call(i,t),!0)},Keybindings.prototype.bindings={navPrev:"shift + 9",navNext:9,navUp:38,navDown:40,scrollPageUp:33,scrollPageDown:34,scrollToStart:36,scrollToEnd:35,undo:"ctrl + 90",redo:"ctrl + 89",copyToClipboard:"ctrl + 67"},Keybindings.prototype.actions={keyBlock:function(t){t.stopPropagation(),t.preventDefault()},scrollPageUp:function(t){var e=this.table.rowManager,i=e.scrollTop-e.height;e.element.scrollHeight;t.preventDefault(),e.displayRowsCount&&(i>=0?e.element.scrollTop=i:e.scrollToRow(e.getDisplayRows()[0])),this.table.element.focus()},scrollPageDown:function(t){var e=this.table.rowManager,i=e.scrollTop+e.height,n=e.element.scrollHeight;t.preventDefault(),e.displayRowsCount&&(i<=n?e.element.scrollTop=i:e.scrollToRow(e.getDisplayRows()[e.displayRowsCount-1])),this.table.element.focus()},scrollToStart:function(t){var e=this.table.rowManager;t.preventDefault(),e.displayRowsCount&&e.scrollToRow(e.getDisplayRows()[0]),this.table.element.focus()},scrollToEnd:function(t){var e=this.table.rowManager;t.preventDefault(),e.displayRowsCount&&e.scrollToRow(e.getDisplayRows()[e.displayRowsCount-1]),this.table.element.focus()},navPrev:function(t){var e=!1;this.table.modExists("edit")&&(e=this.table.modules.edit.currentCell)&&(t.preventDefault(),e.nav().prev())},navNext:function(t){var e,i=!1,n=this.table.options.tabEndNewRow;this.table.modExists("edit")&&(i=this.table.modules.edit.currentCell)&&(t.preventDefault(),e=i.nav(),e.next()||n&&(i.getElement().firstChild.blur(),n=!0===n?this.table.addRow({}):"function"==typeof n?this.table.addRow(n(i.row.getComponent())):this.table.addRow(Object.assign({},n)),n.then(function(){setTimeout(function(){e.next()})})))},navLeft:function(t){var e=!1;this.table.modExists("edit")&&(e=this.table.modules.edit.currentCell)&&(t.preventDefault(),e.nav().left())},navRight:function(t){var e=!1;this.table.modExists("edit")&&(e=this.table.modules.edit.currentCell)&&(t.preventDefault(),e.nav().right())},navUp:function(t){var e=!1;this.table.modExists("edit")&&(e=this.table.modules.edit.currentCell)&&(t.preventDefault(),e.nav().up())},navDown:function(t){var e=!1;this.table.modExists("edit")&&(e=this.table.modules.edit.currentCell)&&(t.preventDefault(),e.nav().down())},undo:function(t){this.table.options.history&&this.table.modExists("history")&&this.table.modExists("edit")&&(this.table.modules.edit.currentCell||(t.preventDefault(),this.table.modules.history.undo()))},redo:function(t){this.table.options.history&&this.table.modExists("history")&&this.table.modExists("edit")&&(this.table.modules.edit.currentCell||(t.preventDefault(),this.table.modules.history.redo()))},copyToClipboard:function(t){this.table.modules.edit.currentCell||this.table.modExists("clipboard",!0)&&this.table.modules.clipboard.copy(!1,!0)}},Tabulator.prototype.registerModule("keybindings",Keybindings);
\ No newline at end of file
diff --git a/website/js/vendor/tabulator/js/modules/menu.js b/website/js/vendor/tabulator/js/modules/menu.js
new file mode 100644 (file)
index 0000000..bbcf83d
--- /dev/null
@@ -0,0 +1,241 @@
+/* Tabulator v4.8.3 (c) Oliver Folkerd */
+
+var Menu = function Menu(table) {
+       this.table = table; //hold Tabulator object
+       this.menuEl = false;
+       this.blurEvent = this.hideMenu.bind(this);
+       this.escEvent = this.escMenu.bind(this);
+       this.nestedMenuBlock = false;
+};
+
+Menu.prototype.initializeColumnHeader = function (column) {
+       var _this = this;
+
+       var headerMenuEl;
+
+       if (column.definition.headerContextMenu) {
+               column.getElement().addEventListener("contextmenu", this.LoadMenuEvent.bind(this, column, column.definition.headerContextMenu));
+               this.tapHold(column, column.definition.headerContextMenu);
+       }
+
+       // if(column.definition.headerClickMenu){
+       //      column.getElement().addEventListener("click", this.LoadMenuEvent.bind(this, column, column.definition.headerClickMenu));
+       // }
+
+       if (column.definition.headerMenu) {
+
+               headerMenuEl = document.createElement("span");
+               headerMenuEl.classList.add("tabulator-header-menu-button");
+               headerMenuEl.innerHTML = "&vellip;";
+
+               headerMenuEl.addEventListener("click", function (e) {
+                       var menu = typeof column.definition.headerMenu == "function" ? column.definition.headerMenu(column.getComponent(), e) : column.definition.headerMenu;
+                       e.stopPropagation();
+                       e.preventDefault();
+
+                       _this.loadMenu(e, column, menu);
+               });
+
+               column.titleElement.insertBefore(headerMenuEl, column.titleElement.firstChild);
+       }
+};
+
+Menu.prototype.LoadMenuEvent = function (component, menu, e) {
+       menu = typeof menu == "function" ? menu(component.getComponent(), e) : menu;
+
+       // if(component instanceof Cell){
+       //      e.stopImmediatePropagation();
+       // }
+
+       this.loadMenu(e, component, menu);
+};
+
+Menu.prototype.tapHold = function (component, menu) {
+       var _this2 = this;
+
+       var element = component.getElement(),
+           tapHold = null,
+           loaded = false;
+
+       element.addEventListener("touchstart", function (e) {
+               clearTimeout(tapHold);
+               loaded = false;
+
+               tapHold = setTimeout(function () {
+                       clearTimeout(tapHold);
+                       tapHold = null;
+                       loaded = true;
+
+                       _this2.LoadMenuEvent(component, menu, e);
+               }, 1000);
+       }, { passive: true });
+
+       element.addEventListener("touchend", function (e) {
+               clearTimeout(tapHold);
+               tapHold = null;
+
+               if (loaded) {
+                       e.preventDefault();
+               }
+       });
+};
+
+Menu.prototype.initializeCell = function (cell) {
+       if (cell.column.definition.contextMenu) {
+               cell.getElement().addEventListener("contextmenu", this.LoadMenuEvent.bind(this, cell, cell.column.definition.contextMenu));
+               this.tapHold(cell, cell.column.definition.contextMenu);
+       }
+
+       if (cell.column.definition.clickMenu) {
+               cell.getElement().addEventListener("click", this.LoadMenuEvent.bind(this, cell, cell.column.definition.clickMenu));
+       }
+};
+
+Menu.prototype.initializeRow = function (row) {
+       if (this.table.options.rowContextMenu) {
+               row.getElement().addEventListener("contextmenu", this.LoadMenuEvent.bind(this, row, this.table.options.rowContextMenu));
+               this.tapHold(row, this.table.options.rowContextMenu);
+       }
+
+       if (this.table.options.rowClickMenu) {
+               row.getElement().addEventListener("click", this.LoadMenuEvent.bind(this, row, this.table.options.rowClickMenu));
+       }
+};
+
+Menu.prototype.initializeGroup = function (group) {
+       if (this.table.options.groupContextMenu) {
+               group.getElement().addEventListener("contextmenu", this.LoadMenuEvent.bind(this, group, this.table.options.groupContextMenu));
+               this.tapHold(group, this.table.options.groupContextMenu);
+       }
+
+       if (this.table.options.groupClickMenu) {
+               group.getElement().addEventListener("click", this.LoadMenuEvent.bind(this, group, this.table.options.groupClickMenu));
+       }
+};
+
+Menu.prototype.loadMenu = function (e, component, menu) {
+       var _this3 = this;
+
+       var docHeight = Math.max(document.body.offsetHeight, window.innerHeight),
+           touch = !(e instanceof MouseEvent);
+
+       if (!touch) {
+               e.preventDefault();
+       }
+
+       //abort if no menu set
+       if (!menu || !menu.length) {
+               return;
+       }
+
+       if (this.nestedMenuBlock) {
+               //abort if child menu already open
+               if (this.isOpen()) {
+                       return;
+               }
+       } else {
+               this.nestedMenuBlock = setTimeout(function () {
+                       _this3.nestedMenuBlock = false;
+               }, 100);
+       }
+
+       this.hideMenu();
+
+       this.menuEl = document.createElement("div");
+       this.menuEl.classList.add("tabulator-menu");
+
+       menu.forEach(function (item) {
+               var itemEl = document.createElement("div");
+               var label = item.label;
+               var disabled = item.disabled;
+
+               if (item.separator) {
+                       itemEl.classList.add("tabulator-menu-separator");
+               } else {
+                       itemEl.classList.add("tabulator-menu-item");
+
+                       if (typeof label == "function") {
+                               label = label(component.getComponent());
+                       }
+
+                       if (label instanceof Node) {
+                               itemEl.appendChild(label);
+                       } else {
+                               itemEl.innerHTML = label;
+                       }
+
+                       if (typeof disabled == "function") {
+                               disabled = disabled(component.getComponent());
+                       }
+
+                       if (disabled) {
+                               itemEl.classList.add("tabulator-menu-item-disabled");
+                               itemEl.addEventListener("click", function (e) {
+                                       e.stopPropagation();
+                               });
+                       } else {
+                               itemEl.addEventListener("click", function (e) {
+                                       _this3.hideMenu();
+                                       item.action(e, component.getComponent());
+                               });
+                       }
+               }
+
+               _this3.menuEl.appendChild(itemEl);
+       });
+
+       this.menuEl.style.top = (touch ? e.touches[0].pageY : e.pageY) + "px";
+       this.menuEl.style.left = (touch ? e.touches[0].pageX : e.pageX) + "px";
+
+       setTimeout(function () {
+               _this3.table.rowManager.element.addEventListener("scroll", _this3.blurEvent);
+               document.body.addEventListener("click", _this3.blurEvent);
+               document.body.addEventListener("contextmenu", _this3.blurEvent);
+               document.body.addEventListener("keydown", _this3.escEvent);
+       }, 100);
+
+       document.body.appendChild(this.menuEl);
+
+       //move menu to start on right edge if it is too close to the edge of the screen
+       if (e.pageX + this.menuEl.offsetWidth >= document.body.offsetWidth) {
+               this.menuEl.style.left = "";
+               this.menuEl.style.right = document.body.offsetWidth - e.pageX + "px";
+       }
+
+       //move menu to start on bottom edge if it is too close to the edge of the screen
+       if (e.pageY + this.menuEl.offsetHeight >= docHeight) {
+               this.menuEl.style.top = "";
+               this.menuEl.style.bottom = docHeight - e.pageY + "px";
+       }
+};
+
+Menu.prototype.isOpen = function () {
+       return !!this.menuEl.parentNode;
+};
+
+Menu.prototype.escMenu = function (e) {
+       if (e.keyCode == 27) {
+               this.hideMenu();
+       }
+};
+
+Menu.prototype.hideMenu = function () {
+       if (this.menuEl.parentNode) {
+               this.menuEl.parentNode.removeChild(this.menuEl);
+       }
+
+       if (this.escEvent) {
+               document.body.removeEventListener("keydown", this.escEvent);
+       }
+
+       if (this.blurEvent) {
+               document.body.removeEventListener("click", this.blurEvent);
+               document.body.removeEventListener("contextmenu", this.blurEvent);
+               this.table.rowManager.element.removeEventListener("scroll", this.blurEvent);
+       }
+};
+
+//default accessors
+Menu.prototype.menus = {};
+
+Tabulator.prototype.registerModule("menu", Menu);
\ No newline at end of file
diff --git a/website/js/vendor/tabulator/js/modules/menu.min.js b/website/js/vendor/tabulator/js/modules/menu.min.js
new file mode 100644 (file)
index 0000000..172576e
--- /dev/null
@@ -0,0 +1,2 @@
+/* Tabulator v4.8.3 (c) Oliver Folkerd */
+var Menu=function(e){this.table=e,this.menuEl=!1,this.blurEvent=this.hideMenu.bind(this),this.escEvent=this.escMenu.bind(this),this.nestedMenuBlock=!1};Menu.prototype.initializeColumnHeader=function(e){var t,n=this;e.definition.headerContextMenu&&(e.getElement().addEventListener("contextmenu",this.LoadMenuEvent.bind(this,e,e.definition.headerContextMenu)),this.tapHold(e,e.definition.headerContextMenu)),e.definition.headerMenu&&(t=document.createElement("span"),t.classList.add("tabulator-header-menu-button"),t.innerHTML="&vellip;",t.addEventListener("click",function(t){var i="function"==typeof e.definition.headerMenu?e.definition.headerMenu(e.getComponent(),t):e.definition.headerMenu;t.stopPropagation(),t.preventDefault(),n.loadMenu(t,e,i)}),e.titleElement.insertBefore(t,e.titleElement.firstChild))},Menu.prototype.LoadMenuEvent=function(e,t,n){t="function"==typeof t?t(e.getComponent(),n):t,this.loadMenu(n,e,t)},Menu.prototype.tapHold=function(e,t){var n=this,i=e.getElement(),o=null,u=!1;i.addEventListener("touchstart",function(i){clearTimeout(o),u=!1,o=setTimeout(function(){clearTimeout(o),o=null,u=!0,n.LoadMenuEvent(e,t,i)},1e3)},{passive:!0}),i.addEventListener("touchend",function(e){clearTimeout(o),o=null,u&&e.preventDefault()})},Menu.prototype.initializeCell=function(e){e.column.definition.contextMenu&&(e.getElement().addEventListener("contextmenu",this.LoadMenuEvent.bind(this,e,e.column.definition.contextMenu)),this.tapHold(e,e.column.definition.contextMenu)),e.column.definition.clickMenu&&e.getElement().addEventListener("click",this.LoadMenuEvent.bind(this,e,e.column.definition.clickMenu))},Menu.prototype.initializeRow=function(e){this.table.options.rowContextMenu&&(e.getElement().addEventListener("contextmenu",this.LoadMenuEvent.bind(this,e,this.table.options.rowContextMenu)),this.tapHold(e,this.table.options.rowContextMenu)),this.table.options.rowClickMenu&&e.getElement().addEventListener("click",this.LoadMenuEvent.bind(this,e,this.table.options.rowClickMenu))},Menu.prototype.initializeGroup=function(e){this.table.options.groupContextMenu&&(e.getElement().addEventListener("contextmenu",this.LoadMenuEvent.bind(this,e,this.table.options.groupContextMenu)),this.tapHold(e,this.table.options.groupContextMenu)),this.table.options.groupClickMenu&&e.getElement().addEventListener("click",this.LoadMenuEvent.bind(this,e,this.table.options.groupClickMenu))},Menu.prototype.loadMenu=function(e,t,n){var i=this,o=Math.max(document.body.offsetHeight,window.innerHeight),u=!(e instanceof MouseEvent);if(u||e.preventDefault(),n&&n.length){if(this.nestedMenuBlock){if(this.isOpen())return}else this.nestedMenuBlock=setTimeout(function(){i.nestedMenuBlock=!1},100);this.hideMenu(),this.menuEl=document.createElement("div"),this.menuEl.classList.add("tabulator-menu"),n.forEach(function(e){var n=document.createElement("div"),o=e.label,u=e.disabled;e.separator?n.classList.add("tabulator-menu-separator"):(n.classList.add("tabulator-menu-item"),"function"==typeof o&&(o=o(t.getComponent())),o instanceof Node?n.appendChild(o):n.innerHTML=o,"function"==typeof u&&(u=u(t.getComponent())),u?(n.classList.add("tabulator-menu-item-disabled"),n.addEventListener("click",function(e){e.stopPropagation()})):n.addEventListener("click",function(n){i.hideMenu(),e.action(n,t.getComponent())})),i.menuEl.appendChild(n)}),this.menuEl.style.top=(u?e.touches[0].pageY:e.pageY)+"px",this.menuEl.style.left=(u?e.touches[0].pageX:e.pageX)+"px",setTimeout(function(){i.table.rowManager.element.addEventListener("scroll",i.blurEvent),document.body.addEventListener("click",i.blurEvent),document.body.addEventListener("contextmenu",i.blurEvent),document.body.addEventListener("keydown",i.escEvent)},100),document.body.appendChild(this.menuEl),e.pageX+this.menuEl.offsetWidth>=document.body.offsetWidth&&(this.menuEl.style.left="",this.menuEl.style.right=document.body.offsetWidth-e.pageX+"px"),e.pageY+this.menuEl.offsetHeight>=o&&(this.menuEl.style.top="",this.menuEl.style.bottom=o-e.pageY+"px")}},Menu.prototype.isOpen=function(){return!!this.menuEl.parentNode},Menu.prototype.escMenu=function(e){27==e.keyCode&&this.hideMenu()},Menu.prototype.hideMenu=function(){this.menuEl.parentNode&&this.menuEl.parentNode.removeChild(this.menuEl),this.escEvent&&document.body.removeEventListener("keydown",this.escEvent),this.blurEvent&&(document.body.removeEventListener("click",this.blurEvent),document.body.removeEventListener("contextmenu",this.blurEvent),this.table.rowManager.element.removeEventListener("scroll",this.blurEvent))},Menu.prototype.menus={},Tabulator.prototype.registerModule("menu",Menu);
\ No newline at end of file
diff --git a/website/js/vendor/tabulator/js/modules/moveable_columns.js b/website/js/vendor/tabulator/js/modules/moveable_columns.js
new file mode 100644 (file)
index 0000000..b22faea
--- /dev/null
@@ -0,0 +1,289 @@
+/* Tabulator v4.8.3 (c) Oliver Folkerd */
+
+var MoveColumns = function MoveColumns(table) {
+       this.table = table; //hold Tabulator object
+       this.placeholderElement = this.createPlaceholderElement();
+       this.hoverElement = false; //floating column header element
+       this.checkTimeout = false; //click check timeout holder
+       this.checkPeriod = 250; //period to wait on mousedown to consider this a move and not a click
+       this.moving = false; //currently moving column
+       this.toCol = false; //destination column
+       this.toColAfter = false; //position of moving column relative to the desitnation column
+       this.startX = 0; //starting position within header element
+       this.autoScrollMargin = 40; //auto scroll on edge when within margin
+       this.autoScrollStep = 5; //auto scroll distance in pixels
+       this.autoScrollTimeout = false; //auto scroll timeout
+       this.touchMove = false;
+
+       this.moveHover = this.moveHover.bind(this);
+       this.endMove = this.endMove.bind(this);
+};
+
+MoveColumns.prototype.createPlaceholderElement = function () {
+       var el = document.createElement("div");
+
+       el.classList.add("tabulator-col");
+       el.classList.add("tabulator-col-placeholder");
+
+       return el;
+};
+
+MoveColumns.prototype.initializeColumn = function (column) {
+       var self = this,
+           config = {},
+           colEl;
+
+       if (!column.modules.frozen) {
+
+               colEl = column.getElement();
+
+               config.mousemove = function (e) {
+                       if (column.parent === self.moving.parent) {
+                               if ((self.touchMove ? e.touches[0].pageX : e.pageX) - Tabulator.prototype.helpers.elOffset(colEl).left + self.table.columnManager.element.scrollLeft > column.getWidth() / 2) {
+                                       if (self.toCol !== column || !self.toColAfter) {
+                                               colEl.parentNode.insertBefore(self.placeholderElement, colEl.nextSibling);
+                                               self.moveColumn(column, true);
+                                       }
+                               } else {
+                                       if (self.toCol !== column || self.toColAfter) {
+                                               colEl.parentNode.insertBefore(self.placeholderElement, colEl);
+                                               self.moveColumn(column, false);
+                                       }
+                               }
+                       }
+               }.bind(self);
+
+               colEl.addEventListener("mousedown", function (e) {
+                       self.touchMove = false;
+                       if (e.which === 1) {
+                               self.checkTimeout = setTimeout(function () {
+                                       self.startMove(e, column);
+                               }, self.checkPeriod);
+                       }
+               });
+
+               colEl.addEventListener("mouseup", function (e) {
+                       if (e.which === 1) {
+                               if (self.checkTimeout) {
+                                       clearTimeout(self.checkTimeout);
+                               }
+                       }
+               });
+
+               self.bindTouchEvents(column);
+       }
+
+       column.modules.moveColumn = config;
+};
+
+MoveColumns.prototype.bindTouchEvents = function (column) {
+       var self = this,
+           colEl = column.getElement(),
+           startXMove = false,
+           //shifting center position of the cell
+       dir = false,
+           currentCol,
+           nextCol,
+           prevCol,
+           nextColWidth,
+           prevColWidth,
+           nextColWidthLast,
+           prevColWidthLast;
+
+       colEl.addEventListener("touchstart", function (e) {
+               self.checkTimeout = setTimeout(function () {
+                       self.touchMove = true;
+                       currentCol = column;
+                       nextCol = column.nextColumn();
+                       nextColWidth = nextCol ? nextCol.getWidth() / 2 : 0;
+                       prevCol = column.prevColumn();
+                       prevColWidth = prevCol ? prevCol.getWidth() / 2 : 0;
+                       nextColWidthLast = 0;
+                       prevColWidthLast = 0;
+                       startXMove = false;
+
+                       self.startMove(e, column);
+               }, self.checkPeriod);
+       }, { passive: true });
+
+       colEl.addEventListener("touchmove", function (e) {
+               var halfCol, diff, moveToCol;
+
+               if (self.moving) {
+                       self.moveHover(e);
+
+                       if (!startXMove) {
+                               startXMove = e.touches[0].pageX;
+                       }
+
+                       diff = e.touches[0].pageX - startXMove;
+
+                       if (diff > 0) {
+                               if (nextCol && diff - nextColWidthLast > nextColWidth) {
+                                       moveToCol = nextCol;
+
+                                       if (moveToCol !== column) {
+                                               startXMove = e.touches[0].pageX;
+                                               moveToCol.getElement().parentNode.insertBefore(self.placeholderElement, moveToCol.getElement().nextSibling);
+                                               self.moveColumn(moveToCol, true);
+                                       }
+                               }
+                       } else {
+                               if (prevCol && -diff - prevColWidthLast > prevColWidth) {
+                                       moveToCol = prevCol;
+
+                                       if (moveToCol !== column) {
+                                               startXMove = e.touches[0].pageX;
+                                               moveToCol.getElement().parentNode.insertBefore(self.placeholderElement, moveToCol.getElement());
+                                               self.moveColumn(moveToCol, false);
+                                       }
+                               }
+                       }
+
+                       if (moveToCol) {
+                               currentCol = moveToCol;
+                               nextCol = moveToCol.nextColumn();
+                               nextColWidthLast = nextColWidth;
+                               nextColWidth = nextCol ? nextCol.getWidth() / 2 : 0;
+                               prevCol = moveToCol.prevColumn();
+                               prevColWidthLast = prevColWidth;
+                               prevColWidth = prevCol ? prevCol.getWidth() / 2 : 0;
+                       }
+               }
+       }, { passive: true });
+
+       colEl.addEventListener("touchend", function (e) {
+               if (self.checkTimeout) {
+                       clearTimeout(self.checkTimeout);
+               }
+               if (self.moving) {
+                       self.endMove(e);
+               }
+       });
+};
+
+MoveColumns.prototype.startMove = function (e, column) {
+       var element = column.getElement();
+
+       this.moving = column;
+       this.startX = (this.touchMove ? e.touches[0].pageX : e.pageX) - Tabulator.prototype.helpers.elOffset(element).left;
+
+       this.table.element.classList.add("tabulator-block-select");
+
+       //create placeholder
+       this.placeholderElement.style.width = column.getWidth() + "px";
+       this.placeholderElement.style.height = column.getHeight() + "px";
+
+       element.parentNode.insertBefore(this.placeholderElement, element);
+       element.parentNode.removeChild(element);
+
+       //create hover element
+       this.hoverElement = element.cloneNode(true);
+       this.hoverElement.classList.add("tabulator-moving");
+
+       this.table.columnManager.getElement().appendChild(this.hoverElement);
+
+       this.hoverElement.style.left = "0";
+       this.hoverElement.style.bottom = "0";
+
+       if (!this.touchMove) {
+               this._bindMouseMove();
+
+               document.body.addEventListener("mousemove", this.moveHover);
+               document.body.addEventListener("mouseup", this.endMove);
+       }
+
+       this.moveHover(e);
+};
+
+MoveColumns.prototype._bindMouseMove = function () {
+       this.table.columnManager.columnsByIndex.forEach(function (column) {
+               if (column.modules.moveColumn.mousemove) {
+                       column.getElement().addEventListener("mousemove", column.modules.moveColumn.mousemove);
+               }
+       });
+};
+
+MoveColumns.prototype._unbindMouseMove = function () {
+       this.table.columnManager.columnsByIndex.forEach(function (column) {
+               if (column.modules.moveColumn.mousemove) {
+                       column.getElement().removeEventListener("mousemove", column.modules.moveColumn.mousemove);
+               }
+       });
+};
+
+MoveColumns.prototype.moveColumn = function (column, after) {
+       var movingCells = this.moving.getCells();
+
+       this.toCol = column;
+       this.toColAfter = after;
+
+       if (after) {
+               column.getCells().forEach(function (cell, i) {
+                       var cellEl = cell.getElement();
+                       cellEl.parentNode.insertBefore(movingCells[i].getElement(), cellEl.nextSibling);
+               });
+       } else {
+               column.getCells().forEach(function (cell, i) {
+                       var cellEl = cell.getElement();
+                       cellEl.parentNode.insertBefore(movingCells[i].getElement(), cellEl);
+               });
+       }
+};
+
+MoveColumns.prototype.endMove = function (e) {
+       if (e.which === 1 || this.touchMove) {
+               this._unbindMouseMove();
+
+               this.placeholderElement.parentNode.insertBefore(this.moving.getElement(), this.placeholderElement.nextSibling);
+               this.placeholderElement.parentNode.removeChild(this.placeholderElement);
+               this.hoverElement.parentNode.removeChild(this.hoverElement);
+
+               this.table.element.classList.remove("tabulator-block-select");
+
+               if (this.toCol) {
+                       this.table.columnManager.moveColumnActual(this.moving, this.toCol, this.toColAfter);
+               }
+
+               this.moving = false;
+               this.toCol = false;
+               this.toColAfter = false;
+
+               if (!this.touchMove) {
+                       document.body.removeEventListener("mousemove", this.moveHover);
+                       document.body.removeEventListener("mouseup", this.endMove);
+               }
+       }
+};
+
+MoveColumns.prototype.moveHover = function (e) {
+       var self = this,
+           columnHolder = self.table.columnManager.getElement(),
+           scrollLeft = columnHolder.scrollLeft,
+           xPos = (self.touchMove ? e.touches[0].pageX : e.pageX) - Tabulator.prototype.helpers.elOffset(columnHolder).left + scrollLeft,
+           scrollPos;
+
+       self.hoverElement.style.left = xPos - self.startX + "px";
+
+       if (xPos - scrollLeft < self.autoScrollMargin) {
+               if (!self.autoScrollTimeout) {
+                       self.autoScrollTimeout = setTimeout(function () {
+                               scrollPos = Math.max(0, scrollLeft - 5);
+                               self.table.rowManager.getElement().scrollLeft = scrollPos;
+                               self.autoScrollTimeout = false;
+                       }, 1);
+               }
+       }
+
+       if (scrollLeft + columnHolder.clientWidth - xPos < self.autoScrollMargin) {
+               if (!self.autoScrollTimeout) {
+                       self.autoScrollTimeout = setTimeout(function () {
+                               scrollPos = Math.min(columnHolder.clientWidth, scrollLeft + 5);
+                               self.table.rowManager.getElement().scrollLeft = scrollPos;
+                               self.autoScrollTimeout = false;
+                       }, 1);
+               }
+       }
+};
+
+Tabulator.prototype.registerModule("moveColumn", MoveColumns);
\ No newline at end of file
diff --git a/website/js/vendor/tabulator/js/modules/moveable_columns.min.js b/website/js/vendor/tabulator/js/modules/moveable_columns.min.js
new file mode 100644 (file)
index 0000000..4319932
--- /dev/null
@@ -0,0 +1,2 @@
+/* Tabulator v4.8.3 (c) Oliver Folkerd */
+var MoveColumns=function(e){this.table=e,this.placeholderElement=this.createPlaceholderElement(),this.hoverElement=!1,this.checkTimeout=!1,this.checkPeriod=250,this.moving=!1,this.toCol=!1,this.toColAfter=!1,this.startX=0,this.autoScrollMargin=40,this.autoScrollStep=5,this.autoScrollTimeout=!1,this.touchMove=!1,this.moveHover=this.moveHover.bind(this),this.endMove=this.endMove.bind(this)};MoveColumns.prototype.createPlaceholderElement=function(){var e=document.createElement("div");return e.classList.add("tabulator-col"),e.classList.add("tabulator-col-placeholder"),e},MoveColumns.prototype.initializeColumn=function(e){var t,o=this,n={};e.modules.frozen||(t=e.getElement(),n.mousemove=function(n){e.parent===o.moving.parent&&((o.touchMove?n.touches[0].pageX:n.pageX)-Tabulator.prototype.helpers.elOffset(t).left+o.table.columnManager.element.scrollLeft>e.getWidth()/2?o.toCol===e&&o.toColAfter||(t.parentNode.insertBefore(o.placeholderElement,t.nextSibling),o.moveColumn(e,!0)):(o.toCol!==e||o.toColAfter)&&(t.parentNode.insertBefore(o.placeholderElement,t),o.moveColumn(e,!1)))}.bind(o),t.addEventListener("mousedown",function(t){o.touchMove=!1,1===t.which&&(o.checkTimeout=setTimeout(function(){o.startMove(t,e)},o.checkPeriod))}),t.addEventListener("mouseup",function(e){1===e.which&&o.checkTimeout&&clearTimeout(o.checkTimeout)}),o.bindTouchEvents(e)),e.modules.moveColumn=n},MoveColumns.prototype.bindTouchEvents=function(e){var t,o,n,l,i,s,m,r=this,u=e.getElement(),h=!1;u.addEventListener("touchstart",function(u){r.checkTimeout=setTimeout(function(){r.touchMove=!0,t=e,o=e.nextColumn(),l=o?o.getWidth()/2:0,n=e.prevColumn(),i=n?n.getWidth()/2:0,s=0,m=0,h=!1,r.startMove(u,e)},r.checkPeriod)},{passive:!0}),u.addEventListener("touchmove",function(u){var a,c;r.moving&&(r.moveHover(u),h||(h=u.touches[0].pageX),a=u.touches[0].pageX-h,a>0?o&&a-s>l&&(c=o)!==e&&(h=u.touches[0].pageX,c.getElement().parentNode.insertBefore(r.placeholderElement,c.getElement().nextSibling),r.moveColumn(c,!0)):n&&-a-m>i&&(c=n)!==e&&(h=u.touches[0].pageX,c.getElement().parentNode.insertBefore(r.placeholderElement,c.getElement()),r.moveColumn(c,!1)),c&&(t=c,o=c.nextColumn(),s=l,l=o?o.getWidth()/2:0,n=c.prevColumn(),m=i,i=n?n.getWidth()/2:0))},{passive:!0}),u.addEventListener("touchend",function(e){r.checkTimeout&&clearTimeout(r.checkTimeout),r.moving&&r.endMove(e)})},MoveColumns.prototype.startMove=function(e,t){var o=t.getElement();this.moving=t,this.startX=(this.touchMove?e.touches[0].pageX:e.pageX)-Tabulator.prototype.helpers.elOffset(o).left,this.table.element.classList.add("tabulator-block-select"),this.placeholderElement.style.width=t.getWidth()+"px",this.placeholderElement.style.height=t.getHeight()+"px",o.parentNode.insertBefore(this.placeholderElement,o),o.parentNode.removeChild(o),this.hoverElement=o.cloneNode(!0),this.hoverElement.classList.add("tabulator-moving"),this.table.columnManager.getElement().appendChild(this.hoverElement),this.hoverElement.style.left="0",this.hoverElement.style.bottom="0",this.touchMove||(this._bindMouseMove(),document.body.addEventListener("mousemove",this.moveHover),document.body.addEventListener("mouseup",this.endMove)),this.moveHover(e)},MoveColumns.prototype._bindMouseMove=function(){this.table.columnManager.columnsByIndex.forEach(function(e){e.modules.moveColumn.mousemove&&e.getElement().addEventListener("mousemove",e.modules.moveColumn.mousemove)})},MoveColumns.prototype._unbindMouseMove=function(){this.table.columnManager.columnsByIndex.forEach(function(e){e.modules.moveColumn.mousemove&&e.getElement().removeEventListener("mousemove",e.modules.moveColumn.mousemove)})},MoveColumns.prototype.moveColumn=function(e,t){var o=this.moving.getCells();this.toCol=e,this.toColAfter=t,t?e.getCells().forEach(function(e,t){var n=e.getElement();n.parentNode.insertBefore(o[t].getElement(),n.nextSibling)}):e.getCells().forEach(function(e,t){var n=e.getElement();n.parentNode.insertBefore(o[t].getElement(),n)})},MoveColumns.prototype.endMove=function(e){(1===e.which||this.touchMove)&&(this._unbindMouseMove(),this.placeholderElement.parentNode.insertBefore(this.moving.getElement(),this.placeholderElement.nextSibling),this.placeholderElement.parentNode.removeChild(this.placeholderElement),this.hoverElement.parentNode.removeChild(this.hoverElement),this.table.element.classList.remove("tabulator-block-select"),this.toCol&&this.table.columnManager.moveColumnActual(this.moving,this.toCol,this.toColAfter),this.moving=!1,this.toCol=!1,this.toColAfter=!1,this.touchMove||(document.body.removeEventListener("mousemove",this.moveHover),document.body.removeEventListener("mouseup",this.endMove)))},MoveColumns.prototype.moveHover=function(e){var t,o=this,n=o.table.columnManager.getElement(),l=n.scrollLeft,i=(o.touchMove?e.touches[0].pageX:e.pageX)-Tabulator.prototype.helpers.elOffset(n).left+l;o.hoverElement.style.left=i-o.startX+"px",i-l<o.autoScrollMargin&&(o.autoScrollTimeout||(o.autoScrollTimeout=setTimeout(function(){t=Math.max(0,l-5),o.table.rowManager.getElement().scrollLeft=t,o.autoScrollTimeout=!1},1))),l+n.clientWidth-i<o.autoScrollMargin&&(o.autoScrollTimeout||(o.autoScrollTimeout=setTimeout(function(){t=Math.min(n.clientWidth,l+5),o.table.rowManager.getElement().scrollLeft=t,o.autoScrollTimeout=!1},1)))},Tabulator.prototype.registerModule("moveColumn",MoveColumns);
\ No newline at end of file
diff --git a/website/js/vendor/tabulator/js/modules/moveable_rows.js b/website/js/vendor/tabulator/js/modules/moveable_rows.js
new file mode 100644 (file)
index 0000000..520a785
--- /dev/null
@@ -0,0 +1,636 @@
+var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
+
+/* Tabulator v4.8.3 (c) Oliver Folkerd */
+
+var MoveRows = function MoveRows(table) {
+
+       this.table = table; //hold Tabulator object
+       this.placeholderElement = this.createPlaceholderElement();
+       this.hoverElement = false; //floating row header element
+       this.checkTimeout = false; //click check timeout holder
+       this.checkPeriod = 150; //period to wait on mousedown to consider this a move and not a click
+       this.moving = false; //currently moving row
+       this.toRow = false; //destination row
+       this.toRowAfter = false; //position of moving row relative to the desitnation row
+       this.hasHandle = false; //row has handle instead of fully movable row
+       this.startY = 0; //starting Y position within header element
+       this.startX = 0; //starting X position within header element
+
+       this.moveHover = this.moveHover.bind(this);
+       this.endMove = this.endMove.bind(this);
+       this.tableRowDropEvent = false;
+
+       this.touchMove = false;
+
+       this.connection = false;
+       this.connectionSelectorsTables = false;
+       this.connectionSelectorsElements = false;
+       this.connectionElements = [];
+       this.connections = [];
+
+       this.connectedTable = false;
+       this.connectedRow = false;
+};
+
+MoveRows.prototype.createPlaceholderElement = function () {
+       var el = document.createElement("div");
+
+       el.classList.add("tabulator-row");
+       el.classList.add("tabulator-row-placeholder");
+
+       return el;
+};
+
+MoveRows.prototype.initialize = function (handle) {
+       this.connectionSelectorsTables = this.table.options.movableRowsConnectedTables;
+       this.connectionSelectorsElements = this.table.options.movableRowsConnectedElements;
+
+       this.connection = this.connectionSelectorsTables || this.connectionSelectorsElements;
+};
+
+MoveRows.prototype.setHandle = function (handle) {
+       this.hasHandle = handle;
+};
+
+MoveRows.prototype.initializeGroupHeader = function (group) {
+       var self = this,
+           config = {},
+           rowEl;
+
+       //inter table drag drop
+       config.mouseup = function (e) {
+               self.tableRowDrop(e, row);
+       }.bind(self);
+
+       //same table drag drop
+       config.mousemove = function (e) {
+               if (e.pageY - Tabulator.prototype.helpers.elOffset(group.element).top + self.table.rowManager.element.scrollTop > group.getHeight() / 2) {
+                       if (self.toRow !== group || !self.toRowAfter) {
+                               var rowEl = group.getElement();
+                               rowEl.parentNode.insertBefore(self.placeholderElement, rowEl.nextSibling);
+                               self.moveRow(group, true);
+                       }
+               } else {
+                       if (self.toRow !== group || self.toRowAfter) {
+                               var rowEl = group.getElement();
+                               if (rowEl.previousSibling) {
+                                       rowEl.parentNode.insertBefore(self.placeholderElement, rowEl);
+                                       self.moveRow(group, false);
+                               }
+                       }
+               }
+       }.bind(self);
+
+       group.modules.moveRow = config;
+};
+
+MoveRows.prototype.initializeRow = function (row) {
+       var self = this,
+           config = {},
+           rowEl;
+
+       //inter table drag drop
+       config.mouseup = function (e) {
+               self.tableRowDrop(e, row);
+       }.bind(self);
+
+       //same table drag drop
+       config.mousemove = function (e) {
+               if (e.pageY - Tabulator.prototype.helpers.elOffset(row.element).top + self.table.rowManager.element.scrollTop > row.getHeight() / 2) {
+                       if (self.toRow !== row || !self.toRowAfter) {
+                               var rowEl = row.getElement();
+                               rowEl.parentNode.insertBefore(self.placeholderElement, rowEl.nextSibling);
+                               self.moveRow(row, true);
+                       }
+               } else {
+                       if (self.toRow !== row || self.toRowAfter) {
+                               var rowEl = row.getElement();
+                               rowEl.parentNode.insertBefore(self.placeholderElement, rowEl);
+                               self.moveRow(row, false);
+                       }
+               }
+       }.bind(self);
+
+       if (!this.hasHandle) {
+
+               rowEl = row.getElement();
+
+               rowEl.addEventListener("mousedown", function (e) {
+                       if (e.which === 1) {
+                               self.checkTimeout = setTimeout(function () {
+                                       self.startMove(e, row);
+                               }, self.checkPeriod);
+                       }
+               });
+
+               rowEl.addEventListener("mouseup", function (e) {
+                       if (e.which === 1) {
+                               if (self.checkTimeout) {
+                                       clearTimeout(self.checkTimeout);
+                               }
+                       }
+               });
+
+               this.bindTouchEvents(row, row.getElement());
+       }
+
+       row.modules.moveRow = config;
+};
+
+MoveRows.prototype.initializeCell = function (cell) {
+       var self = this,
+           cellEl = cell.getElement();
+
+       cellEl.addEventListener("mousedown", function (e) {
+               if (e.which === 1) {
+                       self.checkTimeout = setTimeout(function () {
+                               self.startMove(e, cell.row);
+                       }, self.checkPeriod);
+               }
+       });
+
+       cellEl.addEventListener("mouseup", function (e) {
+               if (e.which === 1) {
+                       if (self.checkTimeout) {
+                               clearTimeout(self.checkTimeout);
+                       }
+               }
+       });
+
+       this.bindTouchEvents(cell.row, cell.getElement());
+};
+
+MoveRows.prototype.bindTouchEvents = function (row, element) {
+       var self = this,
+           startYMove = false,
+           //shifting center position of the cell
+       dir = false,
+           currentRow,
+           nextRow,
+           prevRow,
+           nextRowHeight,
+           prevRowHeight,
+           nextRowHeightLast,
+           prevRowHeightLast;
+
+       element.addEventListener("touchstart", function (e) {
+               self.checkTimeout = setTimeout(function () {
+                       self.touchMove = true;
+                       currentRow = row;
+                       nextRow = row.nextRow();
+                       nextRowHeight = nextRow ? nextRow.getHeight() / 2 : 0;
+                       prevRow = row.prevRow();
+                       prevRowHeight = prevRow ? prevRow.getHeight() / 2 : 0;
+                       nextRowHeightLast = 0;
+                       prevRowHeightLast = 0;
+                       startYMove = false;
+
+                       self.startMove(e, row);
+               }, self.checkPeriod);
+       }, { passive: true });
+       this.moving, this.toRow, this.toRowAfter;
+       element.addEventListener("touchmove", function (e) {
+
+               var halfCol, diff, moveToRow;
+
+               if (self.moving) {
+                       e.preventDefault();
+
+                       self.moveHover(e);
+
+                       if (!startYMove) {
+                               startYMove = e.touches[0].pageY;
+                       }
+
+                       diff = e.touches[0].pageY - startYMove;
+
+                       if (diff > 0) {
+                               if (nextRow && diff - nextRowHeightLast > nextRowHeight) {
+                                       moveToRow = nextRow;
+
+                                       if (moveToRow !== row) {
+                                               startYMove = e.touches[0].pageY;
+                                               moveToRow.getElement().parentNode.insertBefore(self.placeholderElement, moveToRow.getElement().nextSibling);
+                                               self.moveRow(moveToRow, true);
+                                       }
+                               }
+                       } else {
+                               if (prevRow && -diff - prevRowHeightLast > prevRowHeight) {
+                                       moveToRow = prevRow;
+
+                                       if (moveToRow !== row) {
+                                               startYMove = e.touches[0].pageY;
+                                               moveToRow.getElement().parentNode.insertBefore(self.placeholderElement, moveToRow.getElement());
+                                               self.moveRow(moveToRow, false);
+                                       }
+                               }
+                       }
+
+                       if (moveToRow) {
+                               currentRow = moveToRow;
+                               nextRow = moveToRow.nextRow();
+                               nextRowHeightLast = nextRowHeight;
+                               nextRowHeight = nextRow ? nextRow.getHeight() / 2 : 0;
+                               prevRow = moveToRow.prevRow();
+                               prevRowHeightLast = prevRowHeight;
+                               prevRowHeight = prevRow ? prevRow.getHeight() / 2 : 0;
+                       }
+               }
+       });
+
+       element.addEventListener("touchend", function (e) {
+               if (self.checkTimeout) {
+                       clearTimeout(self.checkTimeout);
+               }
+               if (self.moving) {
+                       self.endMove(e);
+                       self.touchMove = false;
+               }
+       });
+};
+
+MoveRows.prototype._bindMouseMove = function () {
+       var self = this;
+
+       self.table.rowManager.getDisplayRows().forEach(function (row) {
+               if ((row.type === "row" || row.type === "group") && row.modules.moveRow.mousemove) {
+                       row.getElement().addEventListener("mousemove", row.modules.moveRow.mousemove);
+               }
+       });
+};
+
+MoveRows.prototype._unbindMouseMove = function () {
+       var self = this;
+
+       self.table.rowManager.getDisplayRows().forEach(function (row) {
+               if ((row.type === "row" || row.type === "group") && row.modules.moveRow.mousemove) {
+                       row.getElement().removeEventListener("mousemove", row.modules.moveRow.mousemove);
+               }
+       });
+};
+
+MoveRows.prototype.startMove = function (e, row) {
+       var element = row.getElement();
+
+       this.setStartPosition(e, row);
+
+       this.moving = row;
+
+       this.table.element.classList.add("tabulator-block-select");
+
+       //create placeholder
+       this.placeholderElement.style.width = row.getWidth() + "px";
+       this.placeholderElement.style.height = row.getHeight() + "px";
+
+       if (!this.connection) {
+               element.parentNode.insertBefore(this.placeholderElement, element);
+               element.parentNode.removeChild(element);
+       } else {
+               this.table.element.classList.add("tabulator-movingrow-sending");
+               this.connectToTables(row);
+       }
+
+       //create hover element
+       this.hoverElement = element.cloneNode(true);
+       this.hoverElement.classList.add("tabulator-moving");
+
+       if (this.connection) {
+               document.body.appendChild(this.hoverElement);
+               this.hoverElement.style.left = "0";
+               this.hoverElement.style.top = "0";
+               this.hoverElement.style.width = this.table.element.clientWidth + "px";
+               this.hoverElement.style.whiteSpace = "nowrap";
+               this.hoverElement.style.overflow = "hidden";
+               this.hoverElement.style.pointerEvents = "none";
+       } else {
+               this.table.rowManager.getTableElement().appendChild(this.hoverElement);
+
+               this.hoverElement.style.left = "0";
+               this.hoverElement.style.top = "0";
+
+               this._bindMouseMove();
+       }
+
+       document.body.addEventListener("mousemove", this.moveHover);
+       document.body.addEventListener("mouseup", this.endMove);
+
+       this.moveHover(e);
+};
+
+MoveRows.prototype.setStartPosition = function (e, row) {
+       var pageX = this.touchMove ? e.touches[0].pageX : e.pageX,
+           pageY = this.touchMove ? e.touches[0].pageY : e.pageY,
+           element,
+           position;
+
+       element = row.getElement();
+       if (this.connection) {
+               position = element.getBoundingClientRect();
+
+               this.startX = position.left - pageX + window.pageXOffset;
+               this.startY = position.top - pageY + window.pageYOffset;
+       } else {
+               this.startY = pageY - element.getBoundingClientRect().top;
+       }
+};
+
+MoveRows.prototype.endMove = function (e) {
+       if (!e || e.which === 1 || this.touchMove) {
+               this._unbindMouseMove();
+
+               if (!this.connection) {
+                       this.placeholderElement.parentNode.insertBefore(this.moving.getElement(), this.placeholderElement.nextSibling);
+                       this.placeholderElement.parentNode.removeChild(this.placeholderElement);
+               }
+
+               this.hoverElement.parentNode.removeChild(this.hoverElement);
+
+               this.table.element.classList.remove("tabulator-block-select");
+
+               if (this.toRow) {
+                       this.table.rowManager.moveRow(this.moving, this.toRow, this.toRowAfter);
+               }
+
+               this.moving = false;
+               this.toRow = false;
+               this.toRowAfter = false;
+
+               document.body.removeEventListener("mousemove", this.moveHover);
+               document.body.removeEventListener("mouseup", this.endMove);
+
+               if (this.connection) {
+                       this.table.element.classList.remove("tabulator-movingrow-sending");
+                       this.disconnectFromTables();
+               }
+       }
+};
+
+MoveRows.prototype.moveRow = function (row, after) {
+       this.toRow = row;
+       this.toRowAfter = after;
+};
+
+MoveRows.prototype.moveHover = function (e) {
+       if (this.connection) {
+               this.moveHoverConnections.call(this, e);
+       } else {
+               this.moveHoverTable.call(this, e);
+       }
+};
+
+MoveRows.prototype.moveHoverTable = function (e) {
+       var rowHolder = this.table.rowManager.getElement(),
+           scrollTop = rowHolder.scrollTop,
+           yPos = (this.touchMove ? e.touches[0].pageY : e.pageY) - rowHolder.getBoundingClientRect().top + scrollTop,
+           scrollPos;
+
+       this.hoverElement.style.top = yPos - this.startY + "px";
+};
+
+MoveRows.prototype.moveHoverConnections = function (e) {
+       this.hoverElement.style.left = this.startX + (this.touchMove ? e.touches[0].pageX : e.pageX) + "px";
+       this.hoverElement.style.top = this.startY + (this.touchMove ? e.touches[0].pageY : e.pageY) + "px";
+};
+
+MoveRows.prototype.elementRowDrop = function (e, element, row) {
+       if (this.table.options.movableRowsElementDrop) {
+               this.table.options.movableRowsElementDrop(e, element, row ? row.getComponent() : false);
+       }
+};
+
+//establish connection with other tables
+MoveRows.prototype.connectToTables = function (row) {
+       var _this = this;
+
+       var connectionTables;
+
+       if (this.connectionSelectorsTables) {
+               connectionTables = this.table.modules.comms.getConnections(this.connectionSelectorsTables);
+
+               this.table.options.movableRowsSendingStart.call(this.table, connectionTables);
+
+               this.table.modules.comms.send(this.connectionSelectorsTables, "moveRow", "connect", {
+                       row: row
+               });
+       }
+
+       if (this.connectionSelectorsElements) {
+
+               this.connectionElements = [];
+
+               if (!Array.isArray(this.connectionSelectorsElements)) {
+                       this.connectionSelectorsElements = [this.connectionSelectorsElements];
+               }
+
+               this.connectionSelectorsElements.forEach(function (query) {
+                       if (typeof query === "string") {
+                               _this.connectionElements = _this.connectionElements.concat(Array.prototype.slice.call(document.querySelectorAll(query)));
+                       } else {
+                               _this.connectionElements.push(query);
+                       }
+               });
+
+               this.connectionElements.forEach(function (element) {
+                       var dropEvent = function dropEvent(e) {
+                               _this.elementRowDrop(e, element, _this.moving);
+                       };
+
+                       element.addEventListener("mouseup", dropEvent);
+                       element.tabulatorElementDropEvent = dropEvent;
+
+                       element.classList.add("tabulator-movingrow-receiving");
+               });
+       }
+};
+
+//disconnect from other tables
+MoveRows.prototype.disconnectFromTables = function () {
+       var connectionTables;
+
+       if (this.connectionSelectorsTables) {
+               connectionTables = this.table.modules.comms.getConnections(this.connectionSelectorsTables);
+
+               this.table.options.movableRowsSendingStop.call(this.table, connectionTables);
+
+               this.table.modules.comms.send(this.connectionSelectorsTables, "moveRow", "disconnect");
+       }
+
+       this.connectionElements.forEach(function (element) {
+               element.classList.remove("tabulator-movingrow-receiving");
+               element.removeEventListener("mouseup", element.tabulatorElementDropEvent);
+               delete element.tabulatorElementDropEvent;
+       });
+};
+
+//accept incomming connection
+MoveRows.prototype.connect = function (table, row) {
+       var self = this;
+       if (!this.connectedTable) {
+               this.connectedTable = table;
+               this.connectedRow = row;
+
+               this.table.element.classList.add("tabulator-movingrow-receiving");
+
+               self.table.rowManager.getDisplayRows().forEach(function (row) {
+                       if (row.type === "row" && row.modules.moveRow && row.modules.moveRow.mouseup) {
+                               row.getElement().addEventListener("mouseup", row.modules.moveRow.mouseup);
+                       }
+               });
+
+               self.tableRowDropEvent = self.tableRowDrop.bind(self);
+
+               self.table.element.addEventListener("mouseup", self.tableRowDropEvent);
+
+               this.table.options.movableRowsReceivingStart.call(this.table, row, table);
+
+               return true;
+       } else {
+               console.warn("Move Row Error - Table cannot accept connection, already connected to table:", this.connectedTable);
+               return false;
+       }
+};
+
+//close incomming connection
+MoveRows.prototype.disconnect = function (table) {
+       var self = this;
+       if (table === this.connectedTable) {
+               this.connectedTable = false;
+               this.connectedRow = false;
+
+               this.table.element.classList.remove("tabulator-movingrow-receiving");
+
+               self.table.rowManager.getDisplayRows().forEach(function (row) {
+                       if (row.type === "row" && row.modules.moveRow && row.modules.moveRow.mouseup) {
+                               row.getElement().removeEventListener("mouseup", row.modules.moveRow.mouseup);
+                       }
+               });
+
+               self.table.element.removeEventListener("mouseup", self.tableRowDropEvent);
+
+               this.table.options.movableRowsReceivingStop.call(this.table, table);
+       } else {
+               console.warn("Move Row Error - trying to disconnect from non connected table");
+       }
+};
+
+MoveRows.prototype.dropComplete = function (table, row, success) {
+       var sender = false;
+
+       if (success) {
+
+               switch (_typeof(this.table.options.movableRowsSender)) {
+                       case "string":
+                               sender = this.senders[this.table.options.movableRowsSender];
+                               break;
+
+                       case "function":
+                               sender = this.table.options.movableRowsSender;
+                               break;
+               }
+
+               if (sender) {
+                       sender.call(this, this.moving.getComponent(), row ? row.getComponent() : undefined, table);
+               } else {
+                       if (this.table.options.movableRowsSender) {
+                               console.warn("Mover Row Error - no matching sender found:", this.table.options.movableRowsSender);
+                       }
+               }
+
+               this.table.options.movableRowsSent.call(this.table, this.moving.getComponent(), row ? row.getComponent() : undefined, table);
+       } else {
+               this.table.options.movableRowsSentFailed.call(this.table, this.moving.getComponent(), row ? row.getComponent() : undefined, table);
+       }
+
+       this.endMove();
+};
+
+MoveRows.prototype.tableRowDrop = function (e, row) {
+       var receiver = false,
+           success = false;
+
+       console.trace("drop");
+
+       e.stopImmediatePropagation();
+
+       switch (_typeof(this.table.options.movableRowsReceiver)) {
+               case "string":
+                       receiver = this.receivers[this.table.options.movableRowsReceiver];
+                       break;
+
+               case "function":
+                       receiver = this.table.options.movableRowsReceiver;
+                       break;
+       }
+
+       if (receiver) {
+               success = receiver.call(this, this.connectedRow.getComponent(), row ? row.getComponent() : undefined, this.connectedTable);
+       } else {
+               console.warn("Mover Row Error - no matching receiver found:", this.table.options.movableRowsReceiver);
+       }
+
+       if (success) {
+               this.table.options.movableRowsReceived.call(this.table, this.connectedRow.getComponent(), row ? row.getComponent() : undefined, this.connectedTable);
+       } else {
+               this.table.options.movableRowsReceivedFailed.call(this.table, this.connectedRow.getComponent(), row ? row.getComponent() : undefined, this.connectedTable);
+       }
+
+       this.table.modules.comms.send(this.connectedTable, "moveRow", "dropcomplete", {
+               row: row,
+               success: success
+       });
+};
+
+MoveRows.prototype.receivers = {
+       insert: function insert(fromRow, toRow, fromTable) {
+               this.table.addRow(fromRow.getData(), undefined, toRow);
+               return true;
+       },
+
+       add: function add(fromRow, toRow, fromTable) {
+               this.table.addRow(fromRow.getData());
+               return true;
+       },
+
+       update: function update(fromRow, toRow, fromTable) {
+               if (toRow) {
+                       toRow.update(fromRow.getData());
+                       return true;
+               }
+
+               return false;
+       },
+
+       replace: function replace(fromRow, toRow, fromTable) {
+               if (toRow) {
+                       this.table.addRow(fromRow.getData(), undefined, toRow);
+                       toRow.delete();
+                       return true;
+               }
+
+               return false;
+       }
+};
+
+MoveRows.prototype.senders = {
+       delete: function _delete(fromRow, toRow, toTable) {
+               fromRow.delete();
+       }
+};
+
+MoveRows.prototype.commsReceived = function (table, action, data) {
+       switch (action) {
+               case "connect":
+                       return this.connect(table, data.row);
+                       break;
+
+               case "disconnect":
+                       return this.disconnect(table);
+                       break;
+
+               case "dropcomplete":
+                       return this.dropComplete(table, data.row, data.success);
+                       break;
+       }
+};
+
+Tabulator.prototype.registerModule("moveRow", MoveRows);
\ No newline at end of file
diff --git a/website/js/vendor/tabulator/js/modules/moveable_rows.min.js b/website/js/vendor/tabulator/js/modules/moveable_rows.min.js
new file mode 100644 (file)
index 0000000..7d88d12
--- /dev/null
@@ -0,0 +1,2 @@
+/* Tabulator v4.8.3 (c) Oliver Folkerd */
+var _typeof="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},MoveRows=function(e){this.table=e,this.placeholderElement=this.createPlaceholderElement(),this.hoverElement=!1,this.checkTimeout=!1,this.checkPeriod=150,this.moving=!1,this.toRow=!1,this.toRowAfter=!1,this.hasHandle=!1,this.startY=0,this.startX=0,this.moveHover=this.moveHover.bind(this),this.endMove=this.endMove.bind(this),this.tableRowDropEvent=!1,this.touchMove=!1,this.connection=!1,this.connectionSelectorsTables=!1,this.connectionSelectorsElements=!1,this.connectionElements=[],this.connections=[],this.connectedTable=!1,this.connectedRow=!1};MoveRows.prototype.createPlaceholderElement=function(){var e=document.createElement("div");return e.classList.add("tabulator-row"),e.classList.add("tabulator-row-placeholder"),e},MoveRows.prototype.initialize=function(e){this.connectionSelectorsTables=this.table.options.movableRowsConnectedTables,this.connectionSelectorsElements=this.table.options.movableRowsConnectedElements,this.connection=this.connectionSelectorsTables||this.connectionSelectorsElements},MoveRows.prototype.setHandle=function(e){this.hasHandle=e},MoveRows.prototype.initializeGroupHeader=function(e){var t=this,o={};o.mouseup=function(e){t.tableRowDrop(e,row)}.bind(t),o.mousemove=function(o){if(o.pageY-Tabulator.prototype.helpers.elOffset(e.element).top+t.table.rowManager.element.scrollTop>e.getHeight()/2){if(t.toRow!==e||!t.toRowAfter){var n=e.getElement();n.parentNode.insertBefore(t.placeholderElement,n.nextSibling),t.moveRow(e,!0)}}else if(t.toRow!==e||t.toRowAfter){var n=e.getElement();n.previousSibling&&(n.parentNode.insertBefore(t.placeholderElement,n),t.moveRow(e,!1))}}.bind(t),e.modules.moveRow=o},MoveRows.prototype.initializeRow=function(e){var t,o=this,n={};n.mouseup=function(t){o.tableRowDrop(t,e)}.bind(o),n.mousemove=function(t){if(t.pageY-Tabulator.prototype.helpers.elOffset(e.element).top+o.table.rowManager.element.scrollTop>e.getHeight()/2){if(o.toRow!==e||!o.toRowAfter){var n=e.getElement();n.parentNode.insertBefore(o.placeholderElement,n.nextSibling),o.moveRow(e,!0)}}else if(o.toRow!==e||o.toRowAfter){var n=e.getElement();n.parentNode.insertBefore(o.placeholderElement,n),o.moveRow(e,!1)}}.bind(o),this.hasHandle||(t=e.getElement(),t.addEventListener("mousedown",function(t){1===t.which&&(o.checkTimeout=setTimeout(function(){o.startMove(t,e)},o.checkPeriod))}),t.addEventListener("mouseup",function(e){1===e.which&&o.checkTimeout&&clearTimeout(o.checkTimeout)}),this.bindTouchEvents(e,e.getElement())),e.modules.moveRow=n},MoveRows.prototype.initializeCell=function(e){var t=this,o=e.getElement();o.addEventListener("mousedown",function(o){1===o.which&&(t.checkTimeout=setTimeout(function(){t.startMove(o,e.row)},t.checkPeriod))}),o.addEventListener("mouseup",function(e){1===e.which&&t.checkTimeout&&clearTimeout(t.checkTimeout)}),this.bindTouchEvents(e.row,e.getElement())},MoveRows.prototype.bindTouchEvents=function(e,t){var o,n,s,i,l,c,r,a=this,h=!1;t.addEventListener("touchstart",function(t){a.checkTimeout=setTimeout(function(){a.touchMove=!0,o=e,n=e.nextRow(),i=n?n.getHeight()/2:0,s=e.prevRow(),l=s?s.getHeight()/2:0,c=0,r=0,h=!1,a.startMove(t,e)},a.checkPeriod)},{passive:!0}),this.moving,this.toRow,this.toRowAfter,t.addEventListener("touchmove",function(t){var m,v;a.moving&&(t.preventDefault(),a.moveHover(t),h||(h=t.touches[0].pageY),m=t.touches[0].pageY-h,m>0?n&&m-c>i&&(v=n)!==e&&(h=t.touches[0].pageY,v.getElement().parentNode.insertBefore(a.placeholderElement,v.getElement().nextSibling),a.moveRow(v,!0)):s&&-m-r>l&&(v=s)!==e&&(h=t.touches[0].pageY,v.getElement().parentNode.insertBefore(a.placeholderElement,v.getElement()),a.moveRow(v,!1)),v&&(o=v,n=v.nextRow(),c=i,i=n?n.getHeight()/2:0,s=v.prevRow(),r=l,l=s?s.getHeight()/2:0))}),t.addEventListener("touchend",function(e){a.checkTimeout&&clearTimeout(a.checkTimeout),a.moving&&(a.endMove(e),a.touchMove=!1)})},MoveRows.prototype._bindMouseMove=function(){this.table.rowManager.getDisplayRows().forEach(function(e){"row"!==e.type&&"group"!==e.type||!e.modules.moveRow.mousemove||e.getElement().addEventListener("mousemove",e.modules.moveRow.mousemove)})},MoveRows.prototype._unbindMouseMove=function(){this.table.rowManager.getDisplayRows().forEach(function(e){"row"!==e.type&&"group"!==e.type||!e.modules.moveRow.mousemove||e.getElement().removeEventListener("mousemove",e.modules.moveRow.mousemove)})},MoveRows.prototype.startMove=function(e,t){var o=t.getElement();this.setStartPosition(e,t),this.moving=t,this.table.element.classList.add("tabulator-block-select"),this.placeholderElement.style.width=t.getWidth()+"px",this.placeholderElement.style.height=t.getHeight()+"px",this.connection?(this.table.element.classList.add("tabulator-movingrow-sending"),this.connectToTables(t)):(o.parentNode.insertBefore(this.placeholderElement,o),o.parentNode.removeChild(o)),this.hoverElement=o.cloneNode(!0),this.hoverElement.classList.add("tabulator-moving"),this.connection?(document.body.appendChild(this.hoverElement),this.hoverElement.style.left="0",this.hoverElement.style.top="0",this.hoverElement.style.width=this.table.element.clientWidth+"px",this.hoverElement.style.whiteSpace="nowrap",this.hoverElement.style.overflow="hidden",this.hoverElement.style.pointerEvents="none"):(this.table.rowManager.getTableElement().appendChild(this.hoverElement),this.hoverElement.style.left="0",this.hoverElement.style.top="0",this._bindMouseMove()),document.body.addEventListener("mousemove",this.moveHover),document.body.addEventListener("mouseup",this.endMove),this.moveHover(e)},MoveRows.prototype.setStartPosition=function(e,t){var o,n,s=this.touchMove?e.touches[0].pageX:e.pageX,i=this.touchMove?e.touches[0].pageY:e.pageY;o=t.getElement(),this.connection?(n=o.getBoundingClientRect(),this.startX=n.left-s+window.pageXOffset,this.startY=n.top-i+window.pageYOffset):this.startY=i-o.getBoundingClientRect().top},MoveRows.prototype.endMove=function(e){e&&1!==e.which&&!this.touchMove||(this._unbindMouseMove(),this.connection||(this.placeholderElement.parentNode.insertBefore(this.moving.getElement(),this.placeholderElement.nextSibling),this.placeholderElement.parentNode.removeChild(this.placeholderElement)),this.hoverElement.parentNode.removeChild(this.hoverElement),this.table.element.classList.remove("tabulator-block-select"),this.toRow&&this.table.rowManager.moveRow(this.moving,this.toRow,this.toRowAfter),this.moving=!1,this.toRow=!1,this.toRowAfter=!1,document.body.removeEventListener("mousemove",this.moveHover),document.body.removeEventListener("mouseup",this.endMove),this.connection&&(this.table.element.classList.remove("tabulator-movingrow-sending"),this.disconnectFromTables()))},MoveRows.prototype.moveRow=function(e,t){this.toRow=e,this.toRowAfter=t},MoveRows.prototype.moveHover=function(e){this.connection?this.moveHoverConnections.call(this,e):this.moveHoverTable.call(this,e)},MoveRows.prototype.moveHoverTable=function(e){var t=this.table.rowManager.getElement(),o=t.scrollTop,n=(this.touchMove?e.touches[0].pageY:e.pageY)-t.getBoundingClientRect().top+o;this.hoverElement.style.top=n-this.startY+"px"},MoveRows.prototype.moveHoverConnections=function(e){this.hoverElement.style.left=this.startX+(this.touchMove?e.touches[0].pageX:e.pageX)+"px",this.hoverElement.style.top=this.startY+(this.touchMove?e.touches[0].pageY:e.pageY)+"px"},MoveRows.prototype.elementRowDrop=function(e,t,o){this.table.options.movableRowsElementDrop&&this.table.options.movableRowsElementDrop(e,t,!!o&&o.getComponent())},MoveRows.prototype.connectToTables=function(e){var t,o=this;this.connectionSelectorsTables&&(t=this.table.modules.comms.getConnections(this.connectionSelectorsTables),this.table.options.movableRowsSendingStart.call(this.table,t),this.table.modules.comms.send(this.connectionSelectorsTables,"moveRow","connect",{row:e})),this.connectionSelectorsElements&&(this.connectionElements=[],Array.isArray(this.connectionSelectorsElements)||(this.connectionSelectorsElements=[this.connectionSelectorsElements]),this.connectionSelectorsElements.forEach(function(e){"string"==typeof e?o.connectionElements=o.connectionElements.concat(Array.prototype.slice.call(document.querySelectorAll(e))):o.connectionElements.push(e)}),this.connectionElements.forEach(function(e){var t=function(t){o.elementRowDrop(t,e,o.moving)};e.addEventListener("mouseup",t),e.tabulatorElementDropEvent=t,e.classList.add("tabulator-movingrow-receiving")}))},MoveRows.prototype.disconnectFromTables=function(){var e;this.connectionSelectorsTables&&(e=this.table.modules.comms.getConnections(this.connectionSelectorsTables),this.table.options.movableRowsSendingStop.call(this.table,e),this.table.modules.comms.send(this.connectionSelectorsTables,"moveRow","disconnect")),this.connectionElements.forEach(function(e){e.classList.remove("tabulator-movingrow-receiving"),e.removeEventListener("mouseup",e.tabulatorElementDropEvent),delete e.tabulatorElementDropEvent})},MoveRows.prototype.connect=function(e,t){var o=this;return this.connectedTable?(console.warn("Move Row Error - Table cannot accept connection, already connected to table:",this.connectedTable),!1):(this.connectedTable=e,this.connectedRow=t,this.table.element.classList.add("tabulator-movingrow-receiving"),o.table.rowManager.getDisplayRows().forEach(function(e){"row"===e.type&&e.modules.moveRow&&e.modules.moveRow.mouseup&&e.getElement().addEventListener("mouseup",e.modules.moveRow.mouseup)}),o.tableRowDropEvent=o.tableRowDrop.bind(o),o.table.element.addEventListener("mouseup",o.tableRowDropEvent),this.table.options.movableRowsReceivingStart.call(this.table,t,e),!0)},MoveRows.prototype.disconnect=function(e){var t=this;e===this.connectedTable?(this.connectedTable=!1,this.connectedRow=!1,this.table.element.classList.remove("tabulator-movingrow-receiving"),t.table.rowManager.getDisplayRows().forEach(function(e){"row"===e.type&&e.modules.moveRow&&e.modules.moveRow.mouseup&&e.getElement().removeEventListener("mouseup",e.modules.moveRow.mouseup)}),t.table.element.removeEventListener("mouseup",t.tableRowDropEvent),this.table.options.movableRowsReceivingStop.call(this.table,e)):console.warn("Move Row Error - trying to disconnect from non connected table")},MoveRows.prototype.dropComplete=function(e,t,o){var n=!1;if(o){switch(_typeof(this.table.options.movableRowsSender)){case"string":n=this.senders[this.table.options.movableRowsSender];break;case"function":n=this.table.options.movableRowsSender}n?n.call(this,this.moving.getComponent(),t?t.getComponent():void 0,e):this.table.options.movableRowsSender&&console.warn("Mover Row Error - no matching sender found:",this.table.options.movableRowsSender),this.table.options.movableRowsSent.call(this.table,this.moving.getComponent(),t?t.getComponent():void 0,e)}else this.table.options.movableRowsSentFailed.call(this.table,this.moving.getComponent(),t?t.getComponent():void 0,e);this.endMove()},MoveRows.prototype.tableRowDrop=function(e,t){var o=!1,n=!1;switch(console.trace("drop"),e.stopImmediatePropagation(),_typeof(this.table.options.movableRowsReceiver)){case"string":o=this.receivers[this.table.options.movableRowsReceiver];break;case"function":o=this.table.options.movableRowsReceiver}o?n=o.call(this,this.connectedRow.getComponent(),t?t.getComponent():void 0,this.connectedTable):console.warn("Mover Row Error - no matching receiver found:",this.table.options.movableRowsReceiver),n?this.table.options.movableRowsReceived.call(this.table,this.connectedRow.getComponent(),t?t.getComponent():void 0,this.connectedTable):this.table.options.movableRowsReceivedFailed.call(this.table,this.connectedRow.getComponent(),t?t.getComponent():void 0,this.connectedTable),this.table.modules.comms.send(this.connectedTable,"moveRow","dropcomplete",{row:t,success:n})},MoveRows.prototype.receivers={insert:function(e,t,o){return this.table.addRow(e.getData(),void 0,t),!0},add:function(e,t,o){return this.table.addRow(e.getData()),!0},update:function(e,t,o){return!!t&&(t.update(e.getData()),!0)},replace:function(e,t,o){return!!t&&(this.table.addRow(e.getData(),void 0,t),t.delete(),!0)}},MoveRows.prototype.senders={delete:function(e,t,o){e.delete()}},MoveRows.prototype.commsReceived=function(e,t,o){switch(t){case"connect":return this.connect(e,o.row);case"disconnect":return this.disconnect(e);case"dropcomplete":return this.dropComplete(e,o.row,o.success)}},Tabulator.prototype.registerModule("moveRow",MoveRows);
\ No newline at end of file
diff --git a/website/js/vendor/tabulator/js/modules/mutator.js b/website/js/vendor/tabulator/js/modules/mutator.js
new file mode 100644 (file)
index 0000000..830b891
--- /dev/null
@@ -0,0 +1,116 @@
+var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
+
+/* Tabulator v4.8.3 (c) Oliver Folkerd */
+
+var Mutator = function Mutator(table) {
+       this.table = table; //hold Tabulator object
+       this.allowedTypes = ["", "data", "edit", "clipboard"]; //list of muatation types
+       this.enabled = true;
+};
+
+//initialize column mutator
+Mutator.prototype.initializeColumn = function (column) {
+       var self = this,
+           match = false,
+           config = {};
+
+       this.allowedTypes.forEach(function (type) {
+               var key = "mutator" + (type.charAt(0).toUpperCase() + type.slice(1)),
+                   mutator;
+
+               if (column.definition[key]) {
+                       mutator = self.lookupMutator(column.definition[key]);
+
+                       if (mutator) {
+                               match = true;
+
+                               config[key] = {
+                                       mutator: mutator,
+                                       params: column.definition[key + "Params"] || {}
+                               };
+                       }
+               }
+       });
+
+       if (match) {
+               column.modules.mutate = config;
+       }
+};
+
+Mutator.prototype.lookupMutator = function (value) {
+       var mutator = false;
+
+       //set column mutator
+       switch (typeof value === "undefined" ? "undefined" : _typeof(value)) {
+               case "string":
+                       if (this.mutators[value]) {
+                               mutator = this.mutators[value];
+                       } else {
+                               console.warn("Mutator Error - No such mutator found, ignoring: ", value);
+                       }
+                       break;
+
+               case "function":
+                       mutator = value;
+                       break;
+       }
+
+       return mutator;
+};
+
+//apply mutator to row
+Mutator.prototype.transformRow = function (data, type, updatedData) {
+       var self = this,
+           key = "mutator" + (type.charAt(0).toUpperCase() + type.slice(1)),
+           value;
+
+       if (this.enabled) {
+
+               self.table.columnManager.traverse(function (column) {
+                       var mutator, params, component;
+
+                       if (column.modules.mutate) {
+                               mutator = column.modules.mutate[key] || column.modules.mutate.mutator || false;
+
+                               if (mutator) {
+                                       value = column.getFieldValue(typeof updatedData !== "undefined" ? updatedData : data);
+
+                                       if (type == "data" || typeof value !== "undefined") {
+                                               component = column.getComponent();
+                                               params = typeof mutator.params === "function" ? mutator.params(value, data, type, component) : mutator.params;
+                                               column.setFieldValue(data, mutator.mutator(value, data, type, params, component));
+                                       }
+                               }
+                       }
+               });
+       }
+
+       return data;
+};
+
+//apply mutator to new cell value
+Mutator.prototype.transformCell = function (cell, value) {
+       var mutator = cell.column.modules.mutate.mutatorEdit || cell.column.modules.mutate.mutator || false,
+           tempData = {};
+
+       if (mutator) {
+               tempData = Object.assign(tempData, cell.row.getData());
+               cell.column.setFieldValue(tempData, value);
+               return mutator.mutator(value, tempData, "edit", mutator.params, cell.getComponent());
+       } else {
+               return value;
+       }
+};
+
+Mutator.prototype.enable = function () {
+       this.enabled = true;
+};
+
+Mutator.prototype.disable = function () {
+       this.enabled = false;
+};
+
+//default mutators
+Mutator.prototype.mutators = {};
+
+Tabulator.prototype.registerModule("mutator", Mutator);
\ No newline at end of file
diff --git a/website/js/vendor/tabulator/js/modules/mutator.min.js b/website/js/vendor/tabulator/js/modules/mutator.min.js
new file mode 100644 (file)
index 0000000..8f4f037
--- /dev/null
@@ -0,0 +1,2 @@
+/* Tabulator v4.8.3 (c) Oliver Folkerd */
+var _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Mutator=function(t){this.table=t,this.allowedTypes=["","data","edit","clipboard"],this.enabled=!0};Mutator.prototype.initializeColumn=function(t){var o=this,e=!1,a={};this.allowedTypes.forEach(function(r){var u,n="mutator"+(r.charAt(0).toUpperCase()+r.slice(1));t.definition[n]&&(u=o.lookupMutator(t.definition[n]))&&(e=!0,a[n]={mutator:u,params:t.definition[n+"Params"]||{}})}),e&&(t.modules.mutate=a)},Mutator.prototype.lookupMutator=function(t){var o=!1;switch(void 0===t?"undefined":_typeof(t)){case"string":this.mutators[t]?o=this.mutators[t]:console.warn("Mutator Error - No such mutator found, ignoring: ",t);break;case"function":o=t}return o},Mutator.prototype.transformRow=function(t,o,e){var a,r=this,u="mutator"+(o.charAt(0).toUpperCase()+o.slice(1));return this.enabled&&r.table.columnManager.traverse(function(r){var n,i,s;r.modules.mutate&&(n=r.modules.mutate[u]||r.modules.mutate.mutator||!1)&&(a=r.getFieldValue(void 0!==e?e:t),"data"!=o&&void 0===a||(s=r.getComponent(),i="function"==typeof n.params?n.params(a,t,o,s):n.params,r.setFieldValue(t,n.mutator(a,t,o,i,s))))}),t},Mutator.prototype.transformCell=function(t,o){var e=t.column.modules.mutate.mutatorEdit||t.column.modules.mutate.mutator||!1,a={};return e?(a=Object.assign(a,t.row.getData()),t.column.setFieldValue(a,o),e.mutator(o,a,"edit",e.params,t.getComponent())):o},Mutator.prototype.enable=function(){this.enabled=!0},Mutator.prototype.disable=function(){this.enabled=!1},Mutator.prototype.mutators={},Tabulator.prototype.registerModule("mutator",Mutator);
\ No newline at end of file
diff --git a/website/js/vendor/tabulator/js/modules/page.js b/website/js/vendor/tabulator/js/modules/page.js
new file mode 100644 (file)
index 0000000..81d5e1e
--- /dev/null
@@ -0,0 +1,730 @@
+/* Tabulator v4.8.3 (c) Oliver Folkerd */
+
+var Page = function Page(table) {
+
+       this.table = table; //hold Tabulator object
+
+       this.mode = "local";
+       this.progressiveLoad = false;
+
+       this.size = 0;
+       this.page = 1;
+       this.count = 5;
+       this.max = 1;
+
+       this.displayIndex = 0; //index in display pipeline
+
+       this.initialLoad = true;
+
+       this.pageSizes = [];
+
+       this.dataReceivedNames = {};
+       this.dataSentNames = {};
+
+       this.createElements();
+};
+
+Page.prototype.createElements = function () {
+
+       var button;
+
+       this.element = document.createElement("span");
+       this.element.classList.add("tabulator-paginator");
+
+       this.pagesElement = document.createElement("span");
+       this.pagesElement.classList.add("tabulator-pages");
+
+       button = document.createElement("button");
+       button.classList.add("tabulator-page");
+       button.setAttribute("type", "button");
+       button.setAttribute("role", "button");
+       button.setAttribute("aria-label", "");
+       button.setAttribute("title", "");
+
+       this.firstBut = button.cloneNode(true);
+       this.firstBut.setAttribute("data-page", "first");
+
+       this.prevBut = button.cloneNode(true);
+       this.prevBut.setAttribute("data-page", "prev");
+
+       this.nextBut = button.cloneNode(true);
+       this.nextBut.setAttribute("data-page", "next");
+
+       this.lastBut = button.cloneNode(true);
+       this.lastBut.setAttribute("data-page", "last");
+
+       if (this.table.options.paginationSizeSelector) {
+               this.pageSizeSelect = document.createElement("select");
+               this.pageSizeSelect.classList.add("tabulator-page-size");
+       }
+};
+
+Page.prototype.generatePageSizeSelectList = function () {
+       var _this = this;
+
+       var pageSizes = [];
+
+       if (this.pageSizeSelect) {
+
+               if (Array.isArray(this.table.options.paginationSizeSelector)) {
+                       pageSizes = this.table.options.paginationSizeSelector;
+                       this.pageSizes = pageSizes;
+
+                       if (this.pageSizes.indexOf(this.size) == -1) {
+                               pageSizes.unshift(this.size);
+                       }
+               } else {
+
+                       if (this.pageSizes.indexOf(this.size) == -1) {
+                               pageSizes = [];
+
+                               for (var i = 1; i < 5; i++) {
+                                       pageSizes.push(this.size * i);
+                               }
+
+                               this.pageSizes = pageSizes;
+                       } else {
+                               pageSizes = this.pageSizes;
+                       }
+               }
+
+               while (this.pageSizeSelect.firstChild) {
+                       this.pageSizeSelect.removeChild(this.pageSizeSelect.firstChild);
+               }pageSizes.forEach(function (item) {
+                       var itemEl = document.createElement("option");
+                       itemEl.value = item;
+
+                       if (item === true) {
+                               _this.table.modules.localize.bind("pagination|all", function (value) {
+                                       itemEl.innerHTML = value;
+                               });
+                       } else {
+                               itemEl.innerHTML = item;
+                       }
+
+                       _this.pageSizeSelect.appendChild(itemEl);
+               });
+
+               this.pageSizeSelect.value = this.size;
+       }
+};
+
+//setup pageination
+Page.prototype.initialize = function (hidden) {
+       var self = this,
+           pageSelectLabel,
+           testElRow,
+           testElCell;
+
+       //update param names
+       this.dataSentNames = Object.assign({}, this.paginationDataSentNames);
+       this.dataSentNames = Object.assign(this.dataSentNames, this.table.options.paginationDataSent);
+
+       this.dataReceivedNames = Object.assign({}, this.paginationDataReceivedNames);
+       this.dataReceivedNames = Object.assign(this.dataReceivedNames, this.table.options.paginationDataReceived);
+
+       //build pagination element
+
+       //bind localizations
+       self.table.modules.localize.bind("pagination|first", function (value) {
+               self.firstBut.innerHTML = value;
+       });
+
+       self.table.modules.localize.bind("pagination|first_title", function (value) {
+               self.firstBut.setAttribute("aria-label", value);
+               self.firstBut.setAttribute("title", value);
+       });
+
+       self.table.modules.localize.bind("pagination|prev", function (value) {
+               self.prevBut.innerHTML = value;
+       });
+
+       self.table.modules.localize.bind("pagination|prev_title", function (value) {
+               self.prevBut.setAttribute("aria-label", value);
+               self.prevBut.setAttribute("title", value);
+       });
+
+       self.table.modules.localize.bind("pagination|next", function (value) {
+               self.nextBut.innerHTML = value;
+       });
+
+       self.table.modules.localize.bind("pagination|next_title", function (value) {
+               self.nextBut.setAttribute("aria-label", value);
+               self.nextBut.setAttribute("title", value);
+       });
+
+       self.table.modules.localize.bind("pagination|last", function (value) {
+               self.lastBut.innerHTML = value;
+       });
+
+       self.table.modules.localize.bind("pagination|last_title", function (value) {
+               self.lastBut.setAttribute("aria-label", value);
+               self.lastBut.setAttribute("title", value);
+       });
+
+       //click bindings
+       self.firstBut.addEventListener("click", function () {
+               self.setPage(1).then(function () {}).catch(function () {});
+       });
+
+       self.prevBut.addEventListener("click", function () {
+               self.previousPage().then(function () {}).catch(function () {});
+       });
+
+       self.nextBut.addEventListener("click", function () {
+               self.nextPage().then(function () {}).catch(function () {});
+       });
+
+       self.lastBut.addEventListener("click", function () {
+               self.setPage(self.max).then(function () {}).catch(function () {});
+       });
+
+       if (self.table.options.paginationElement) {
+               self.element = self.table.options.paginationElement;
+       }
+
+       if (this.pageSizeSelect) {
+               pageSelectLabel = document.createElement("label");
+
+               self.table.modules.localize.bind("pagination|page_size", function (value) {
+                       self.pageSizeSelect.setAttribute("aria-label", value);
+                       self.pageSizeSelect.setAttribute("title", value);
+                       pageSelectLabel.innerHTML = value;
+               });
+
+               self.element.appendChild(pageSelectLabel);
+               self.element.appendChild(self.pageSizeSelect);
+
+               self.pageSizeSelect.addEventListener("change", function (e) {
+                       self.setPageSize(self.pageSizeSelect.value == "true" ? true : self.pageSizeSelect.value);
+                       self.setPage(1).then(function () {}).catch(function () {});
+               });
+       }
+
+       //append to DOM
+       self.element.appendChild(self.firstBut);
+       self.element.appendChild(self.prevBut);
+       self.element.appendChild(self.pagesElement);
+       self.element.appendChild(self.nextBut);
+       self.element.appendChild(self.lastBut);
+
+       if (!self.table.options.paginationElement && !hidden) {
+               self.table.footerManager.append(self.element, self);
+       }
+
+       //set default values
+       self.mode = self.table.options.pagination;
+
+       if (self.table.options.paginationSize) {
+               self.size = self.table.options.paginationSize;
+       } else {
+               testElRow = document.createElement("div");
+               testElRow.classList.add("tabulator-row");
+               testElRow.style.visibility = hidden;
+
+               testElCell = document.createElement("div");
+               testElCell.classList.add("tabulator-cell");
+               testElCell.innerHTML = "Page Row Test";
+
+               testElRow.appendChild(testElCell);
+
+               self.table.rowManager.getTableElement().appendChild(testElRow);
+
+               self.size = Math.floor(self.table.rowManager.getElement().clientHeight / testElRow.offsetHeight);
+
+               self.table.rowManager.getTableElement().removeChild(testElRow);
+       }
+
+       // self.page = self.table.options.paginationInitialPage || 1;
+       self.count = self.table.options.paginationButtonCount;
+
+       self.generatePageSizeSelectList();
+};
+
+Page.prototype.initializeProgressive = function (mode) {
+       this.initialize(true);
+       this.mode = "progressive_" + mode;
+       this.progressiveLoad = true;
+};
+
+Page.prototype.setDisplayIndex = function (index) {
+       this.displayIndex = index;
+};
+
+Page.prototype.getDisplayIndex = function () {
+       return this.displayIndex;
+};
+
+//calculate maximum page from number of rows
+Page.prototype.setMaxRows = function (rowCount) {
+       if (!rowCount) {
+               this.max = 1;
+       } else {
+               this.max = this.size === true ? 1 : Math.ceil(rowCount / this.size);
+       }
+
+       if (this.page > this.max) {
+               this.page = this.max;
+       }
+};
+
+//reset to first page without triggering action
+Page.prototype.reset = function (force, columnsChanged) {
+       if (this.mode == "local" || force) {
+               this.page = 1;
+       }
+
+       if (columnsChanged) {
+               this.initialLoad = true;
+       }
+
+       return true;
+};
+
+//set the maxmum page
+Page.prototype.setMaxPage = function (max) {
+
+       max = parseInt(max);
+
+       this.max = max || 1;
+
+       if (this.page > this.max) {
+               this.page = this.max;
+               this.trigger();
+       }
+};
+
+//set current page number
+Page.prototype.setPage = function (page) {
+       var _this2 = this;
+
+       var self = this;
+
+       switch (page) {
+               case "first":
+                       return this.setPage(1);
+                       break;
+
+               case "prev":
+                       return this.previousPage();
+                       break;
+
+               case "next":
+                       return this.nextPage();
+                       break;
+
+               case "last":
+                       return this.setPage(this.max);
+                       break;
+       }
+
+       return new Promise(function (resolve, reject) {
+
+               page = parseInt(page);
+
+               if (page > 0 && page <= _this2.max) {
+                       _this2.page = page;
+                       _this2.trigger().then(function () {
+                               resolve();
+                       }).catch(function () {
+                               reject();
+                       });
+
+                       if (self.table.options.persistence && self.table.modExists("persistence", true) && self.table.modules.persistence.config.page) {
+                               self.table.modules.persistence.save("page");
+                       }
+               } else {
+                       console.warn("Pagination Error - Requested page is out of range of 1 - " + _this2.max + ":", page);
+                       reject();
+               }
+       });
+};
+
+Page.prototype.setPageToRow = function (row) {
+       var _this3 = this;
+
+       return new Promise(function (resolve, reject) {
+
+               var rows = _this3.table.rowManager.getDisplayRows(_this3.displayIndex - 1);
+               var index = rows.indexOf(row);
+
+               if (index > -1) {
+                       var page = _this3.size === true ? 1 : Math.ceil((index + 1) / _this3.size);
+
+                       _this3.setPage(page).then(function () {
+                               resolve();
+                       }).catch(function () {
+                               reject();
+                       });
+               } else {
+                       console.warn("Pagination Error - Requested row is not visible");
+                       reject();
+               }
+       });
+};
+
+Page.prototype.setPageSize = function (size) {
+       if (size !== true) {
+               size = parseInt(size);
+       }
+
+       if (size > 0) {
+               this.size = size;
+       }
+
+       if (this.pageSizeSelect) {
+               // this.pageSizeSelect.value = size;
+               this.generatePageSizeSelectList();
+       }
+
+       if (this.table.options.persistence && this.table.modExists("persistence", true) && this.table.modules.persistence.config.page) {
+               this.table.modules.persistence.save("page");
+       }
+};
+
+//setup the pagination buttons
+Page.prototype._setPageButtons = function () {
+       var self = this;
+
+       var leftSize = Math.floor((this.count - 1) / 2);
+       var rightSize = Math.ceil((this.count - 1) / 2);
+       var min = this.max - this.page + leftSize + 1 < this.count ? this.max - this.count + 1 : Math.max(this.page - leftSize, 1);
+       var max = this.page <= rightSize ? Math.min(this.count, this.max) : Math.min(this.page + rightSize, this.max);
+
+       while (self.pagesElement.firstChild) {
+               self.pagesElement.removeChild(self.pagesElement.firstChild);
+       }if (self.page == 1) {
+               self.firstBut.disabled = true;
+               self.prevBut.disabled = true;
+       } else {
+               self.firstBut.disabled = false;
+               self.prevBut.disabled = false;
+       }
+
+       if (self.page == self.max) {
+               self.lastBut.disabled = true;
+               self.nextBut.disabled = true;
+       } else {
+               self.lastBut.disabled = false;
+               self.nextBut.disabled = false;
+       }
+
+       for (var i = min; i <= max; i++) {
+               if (i > 0 && i <= self.max) {
+                       self.pagesElement.appendChild(self._generatePageButton(i));
+               }
+       }
+
+       this.footerRedraw();
+};
+
+Page.prototype._generatePageButton = function (page) {
+       var self = this,
+           button = document.createElement("button");
+
+       button.classList.add("tabulator-page");
+       if (page == self.page) {
+               button.classList.add("active");
+       }
+
+       button.setAttribute("type", "button");
+       button.setAttribute("role", "button");
+
+       self.table.modules.localize.bind("pagination|page_title", function (value) {
+               button.setAttribute("aria-label", value + " " + page);
+               button.setAttribute("title", value + " " + page);
+       });
+
+       button.setAttribute("data-page", page);
+       button.textContent = page;
+
+       button.addEventListener("click", function (e) {
+               self.setPage(page).then(function () {}).catch(function () {});
+       });
+
+       return button;
+};
+
+//previous page
+Page.prototype.previousPage = function () {
+       var _this4 = this;
+
+       return new Promise(function (resolve, reject) {
+               if (_this4.page > 1) {
+                       _this4.page--;
+                       _this4.trigger().then(function () {
+                               resolve();
+                       }).catch(function () {
+                               reject();
+                       });
+
+                       if (_this4.table.options.persistence && _this4.table.modExists("persistence", true) && _this4.table.modules.persistence.config.page) {
+                               _this4.table.modules.persistence.save("page");
+                       }
+               } else {
+                       console.warn("Pagination Error - Previous page would be less than page 1:", 0);
+                       reject();
+               }
+       });
+};
+
+//next page
+Page.prototype.nextPage = function () {
+       var _this5 = this;
+
+       return new Promise(function (resolve, reject) {
+               if (_this5.page < _this5.max) {
+                       _this5.page++;
+                       _this5.trigger().then(function () {
+                               resolve();
+                       }).catch(function () {
+                               reject();
+                       });
+
+                       if (_this5.table.options.persistence && _this5.table.modExists("persistence", true) && _this5.table.modules.persistence.config.page) {
+                               _this5.table.modules.persistence.save("page");
+                       }
+               } else {
+                       if (!_this5.progressiveLoad) {
+                               console.warn("Pagination Error - Next page would be greater than maximum page of " + _this5.max + ":", _this5.max + 1);
+                       }
+                       reject();
+               }
+       });
+};
+
+//return current page number
+Page.prototype.getPage = function () {
+       return this.page;
+};
+
+//return max page number
+Page.prototype.getPageMax = function () {
+       return this.max;
+};
+
+Page.prototype.getPageSize = function (size) {
+       return this.size;
+};
+
+Page.prototype.getMode = function () {
+       return this.mode;
+};
+
+//return appropriate rows for current page
+Page.prototype.getRows = function (data) {
+       var output, start, end;
+
+       if (this.mode == "local") {
+               output = [];
+
+               if (this.size === true) {
+                       start = 0;
+                       end = data.length;
+               } else {
+                       start = this.size * (this.page - 1);
+                       end = start + parseInt(this.size);
+               }
+
+               this._setPageButtons();
+
+               for (var i = start; i < end; i++) {
+                       if (data[i]) {
+                               output.push(data[i]);
+                       }
+               }
+
+               return output;
+       } else {
+
+               this._setPageButtons();
+
+               return data.slice(0);
+       }
+};
+
+Page.prototype.trigger = function () {
+       var _this6 = this;
+
+       var left;
+
+       return new Promise(function (resolve, reject) {
+
+               switch (_this6.mode) {
+                       case "local":
+                               left = _this6.table.rowManager.scrollLeft;
+
+                               _this6.table.rowManager.refreshActiveData("page");
+                               _this6.table.rowManager.scrollHorizontal(left);
+
+                               _this6.table.options.pageLoaded.call(_this6.table, _this6.getPage());
+                               resolve();
+                               break;
+
+                       case "remote":
+                       case "progressive_load":
+                       case "progressive_scroll":
+                               _this6.table.modules.ajax.blockActiveRequest();
+                               _this6._getRemotePage().then(function () {
+                                       resolve();
+                               }).catch(function () {
+                                       reject();
+                               });
+                               break;
+
+                       default:
+                               console.warn("Pagination Error - no such pagination mode:", _this6.mode);
+                               reject();
+               }
+       });
+};
+
+Page.prototype._getRemotePage = function () {
+       var _this7 = this;
+
+       var self = this,
+           oldParams,
+           pageParams;
+
+       return new Promise(function (resolve, reject) {
+
+               if (!self.table.modExists("ajax", true)) {
+                       reject();
+               }
+
+               //record old params and restore after request has been made
+               oldParams = Tabulator.prototype.helpers.deepClone(self.table.modules.ajax.getParams() || {});
+               pageParams = self.table.modules.ajax.getParams();
+
+               //configure request params
+               pageParams[_this7.dataSentNames.page] = self.page;
+
+               //set page size if defined
+               if (_this7.size) {
+                       pageParams[_this7.dataSentNames.size] = _this7.size;
+               }
+
+               //set sort data if defined
+               if (_this7.table.options.ajaxSorting && _this7.table.modExists("sort")) {
+                       var sorters = self.table.modules.sort.getSort();
+
+                       sorters.forEach(function (item) {
+                               delete item.column;
+                       });
+
+                       pageParams[_this7.dataSentNames.sorters] = sorters;
+               }
+
+               //set filter data if defined
+               if (_this7.table.options.ajaxFiltering && _this7.table.modExists("filter")) {
+                       var filters = self.table.modules.filter.getFilters(true, true);
+                       pageParams[_this7.dataSentNames.filters] = filters;
+               }
+
+               self.table.modules.ajax.setParams(pageParams);
+
+               self.table.modules.ajax.sendRequest(_this7.progressiveLoad).then(function (data) {
+                       self._parseRemoteData(data);
+                       resolve();
+               }).catch(function (e) {
+                       reject();
+               });
+
+               self.table.modules.ajax.setParams(oldParams);
+       });
+};
+
+Page.prototype._parseRemoteData = function (data) {
+       var self = this,
+           left,
+           data,
+           margin;
+
+       if (typeof data[this.dataReceivedNames.last_page] === "undefined") {
+               console.warn("Remote Pagination Error - Server response missing '" + this.dataReceivedNames.last_page + "' property");
+       }
+
+       if (data[this.dataReceivedNames.data]) {
+               this.max = parseInt(data[this.dataReceivedNames.last_page]) || 1;
+
+               if (this.progressiveLoad) {
+                       switch (this.mode) {
+                               case "progressive_load":
+
+                                       if (this.page == 1) {
+                                               this.table.rowManager.setData(data[this.dataReceivedNames.data], false, this.initialLoad && this.page == 1);
+                                       } else {
+                                               this.table.rowManager.addRows(data[this.dataReceivedNames.data]);
+                                       }
+
+                                       if (this.page < this.max) {
+                                               setTimeout(function () {
+                                                       self.nextPage().then(function () {}).catch(function () {});
+                                               }, self.table.options.ajaxProgressiveLoadDelay);
+                                       }
+                                       break;
+
+                               case "progressive_scroll":
+                                       data = this.table.rowManager.getData().concat(data[this.dataReceivedNames.data]);
+
+                                       this.table.rowManager.setData(data, true, this.initialLoad && this.page == 1);
+
+                                       margin = this.table.options.ajaxProgressiveLoadScrollMargin || this.table.rowManager.element.clientHeight * 2;
+
+                                       if (self.table.rowManager.element.scrollHeight <= self.table.rowManager.element.clientHeight + margin) {
+                                               self.nextPage().then(function () {}).catch(function () {});
+                                       }
+                                       break;
+                       }
+               } else {
+                       left = this.table.rowManager.scrollLeft;
+
+                       this.table.rowManager.setData(data[this.dataReceivedNames.data], false, this.initialLoad && this.page == 1);
+
+                       this.table.rowManager.scrollHorizontal(left);
+
+                       this.table.columnManager.scrollHorizontal(left);
+
+                       this.table.options.pageLoaded.call(this.table, this.getPage());
+               }
+
+               this.initialLoad = false;
+       } else {
+               console.warn("Remote Pagination Error - Server response missing '" + this.dataReceivedNames.data + "' property");
+       }
+};
+
+//handle the footer element being redrawn
+Page.prototype.footerRedraw = function () {
+       var footer = this.table.footerManager.element;
+
+       if (Math.ceil(footer.clientWidth) - footer.scrollWidth < 0) {
+               this.pagesElement.style.display = 'none';
+       } else {
+               this.pagesElement.style.display = '';
+
+               if (Math.ceil(footer.clientWidth) - footer.scrollWidth < 0) {
+                       this.pagesElement.style.display = 'none';
+               }
+       }
+};
+
+//set the paramter names for pagination requests
+Page.prototype.paginationDataSentNames = {
+       "page": "page",
+       "size": "size",
+       "sorters": "sorters",
+       // "sort_dir":"sort_dir",
+       "filters": "filters"
+       // "filter_value":"filter_value",
+       // "filter_type":"filter_type",
+};
+
+//set the property names for pagination responses
+Page.prototype.paginationDataReceivedNames = {
+       "current_page": "current_page",
+       "last_page": "last_page",
+       "data": "data"
+};
+
+Tabulator.prototype.registerModule("page", Page);
\ No newline at end of file
diff --git a/website/js/vendor/tabulator/js/modules/page.min.js b/website/js/vendor/tabulator/js/modules/page.min.js
new file mode 100644 (file)
index 0000000..58dbf2b
--- /dev/null
@@ -0,0 +1,2 @@
+/* Tabulator v4.8.3 (c) Oliver Folkerd */
+var Page=function(e){this.table=e,this.mode="local",this.progressiveLoad=!1,this.size=0,this.page=1,this.count=5,this.max=1,this.displayIndex=0,this.initialLoad=!0,this.pageSizes=[],this.dataReceivedNames={},this.dataSentNames={},this.createElements()};Page.prototype.createElements=function(){var e;this.element=document.createElement("span"),this.element.classList.add("tabulator-paginator"),this.pagesElement=document.createElement("span"),this.pagesElement.classList.add("tabulator-pages"),e=document.createElement("button"),e.classList.add("tabulator-page"),e.setAttribute("type","button"),e.setAttribute("role","button"),e.setAttribute("aria-label",""),e.setAttribute("title",""),this.firstBut=e.cloneNode(!0),this.firstBut.setAttribute("data-page","first"),this.prevBut=e.cloneNode(!0),this.prevBut.setAttribute("data-page","prev"),this.nextBut=e.cloneNode(!0),this.nextBut.setAttribute("data-page","next"),this.lastBut=e.cloneNode(!0),this.lastBut.setAttribute("data-page","last"),this.table.options.paginationSizeSelector&&(this.pageSizeSelect=document.createElement("select"),this.pageSizeSelect.classList.add("tabulator-page-size"))},Page.prototype.generatePageSizeSelectList=function(){var e=this,t=[];if(this.pageSizeSelect){if(Array.isArray(this.table.options.paginationSizeSelector))t=this.table.options.paginationSizeSelector,this.pageSizes=t,-1==this.pageSizes.indexOf(this.size)&&t.unshift(this.size);else if(-1==this.pageSizes.indexOf(this.size)){t=[];for(var a=1;a<5;a++)t.push(this.size*a);this.pageSizes=t}else t=this.pageSizes;for(;this.pageSizeSelect.firstChild;)this.pageSizeSelect.removeChild(this.pageSizeSelect.firstChild);t.forEach(function(t){var a=document.createElement("option");a.value=t,!0===t?e.table.modules.localize.bind("pagination|all",function(e){a.innerHTML=e}):a.innerHTML=t,e.pageSizeSelect.appendChild(a)}),this.pageSizeSelect.value=this.size}},Page.prototype.initialize=function(e){var t,a,i,s=this;this.dataSentNames=Object.assign({},this.paginationDataSentNames),this.dataSentNames=Object.assign(this.dataSentNames,this.table.options.paginationDataSent),this.dataReceivedNames=Object.assign({},this.paginationDataReceivedNames),this.dataReceivedNames=Object.assign(this.dataReceivedNames,this.table.options.paginationDataReceived),s.table.modules.localize.bind("pagination|first",function(e){s.firstBut.innerHTML=e}),s.table.modules.localize.bind("pagination|first_title",function(e){s.firstBut.setAttribute("aria-label",e),s.firstBut.setAttribute("title",e)}),s.table.modules.localize.bind("pagination|prev",function(e){s.prevBut.innerHTML=e}),s.table.modules.localize.bind("pagination|prev_title",function(e){s.prevBut.setAttribute("aria-label",e),s.prevBut.setAttribute("title",e)}),s.table.modules.localize.bind("pagination|next",function(e){s.nextBut.innerHTML=e}),s.table.modules.localize.bind("pagination|next_title",function(e){s.nextBut.setAttribute("aria-label",e),s.nextBut.setAttribute("title",e)}),s.table.modules.localize.bind("pagination|last",function(e){s.lastBut.innerHTML=e}),s.table.modules.localize.bind("pagination|last_title",function(e){s.lastBut.setAttribute("aria-label",e),s.lastBut.setAttribute("title",e)}),s.firstBut.addEventListener("click",function(){s.setPage(1).then(function(){}).catch(function(){})}),s.prevBut.addEventListener("click",function(){s.previousPage().then(function(){}).catch(function(){})}),s.nextBut.addEventListener("click",function(){s.nextPage().then(function(){}).catch(function(){})}),s.lastBut.addEventListener("click",function(){s.setPage(s.max).then(function(){}).catch(function(){})}),s.table.options.paginationElement&&(s.element=s.table.options.paginationElement),this.pageSizeSelect&&(t=document.createElement("label"),s.table.modules.localize.bind("pagination|page_size",function(e){s.pageSizeSelect.setAttribute("aria-label",e),s.pageSizeSelect.setAttribute("title",e),t.innerHTML=e}),s.element.appendChild(t),s.element.appendChild(s.pageSizeSelect),s.pageSizeSelect.addEventListener("change",function(e){s.setPageSize("true"==s.pageSizeSelect.value||s.pageSizeSelect.value),s.setPage(1).then(function(){}).catch(function(){})})),s.element.appendChild(s.firstBut),s.element.appendChild(s.prevBut),s.element.appendChild(s.pagesElement),s.element.appendChild(s.nextBut),s.element.appendChild(s.lastBut),s.table.options.paginationElement||e||s.table.footerManager.append(s.element,s),s.mode=s.table.options.pagination,s.table.options.paginationSize?s.size=s.table.options.paginationSize:(a=document.createElement("div"),a.classList.add("tabulator-row"),a.style.visibility=e,i=document.createElement("div"),i.classList.add("tabulator-cell"),i.innerHTML="Page Row Test",a.appendChild(i),s.table.rowManager.getTableElement().appendChild(a),s.size=Math.floor(s.table.rowManager.getElement().clientHeight/a.offsetHeight),s.table.rowManager.getTableElement().removeChild(a)),s.count=s.table.options.paginationButtonCount,s.generatePageSizeSelectList()},Page.prototype.initializeProgressive=function(e){this.initialize(!0),this.mode="progressive_"+e,this.progressiveLoad=!0},Page.prototype.setDisplayIndex=function(e){this.displayIndex=e},Page.prototype.getDisplayIndex=function(){return this.displayIndex},Page.prototype.setMaxRows=function(e){this.max=e?!0===this.size?1:Math.ceil(e/this.size):1,this.page>this.max&&(this.page=this.max)},Page.prototype.reset=function(e,t){return("local"==this.mode||e)&&(this.page=1),t&&(this.initialLoad=!0),!0},Page.prototype.setMaxPage=function(e){e=parseInt(e),this.max=e||1,this.page>this.max&&(this.page=this.max,this.trigger())},Page.prototype.setPage=function(e){var t=this,a=this;switch(e){case"first":return this.setPage(1);case"prev":return this.previousPage();case"next":return this.nextPage();case"last":return this.setPage(this.max)}return new Promise(function(i,s){e=parseInt(e),e>0&&e<=t.max?(t.page=e,t.trigger().then(function(){i()}).catch(function(){s()}),a.table.options.persistence&&a.table.modExists("persistence",!0)&&a.table.modules.persistence.config.page&&a.table.modules.persistence.save("page")):(console.warn("Pagination Error - Requested page is out of range of 1 - "+t.max+":",e),s())})},Page.prototype.setPageToRow=function(e){var t=this;return new Promise(function(a,i){var s=t.table.rowManager.getDisplayRows(t.displayIndex-1),n=s.indexOf(e);if(n>-1){var o=!0===t.size?1:Math.ceil((n+1)/t.size);t.setPage(o).then(function(){a()}).catch(function(){i()})}else console.warn("Pagination Error - Requested row is not visible"),i()})},Page.prototype.setPageSize=function(e){!0!==e&&(e=parseInt(e)),e>0&&(this.size=e),this.pageSizeSelect&&this.generatePageSizeSelectList(),this.table.options.persistence&&this.table.modExists("persistence",!0)&&this.table.modules.persistence.config.page&&this.table.modules.persistence.save("page")},Page.prototype._setPageButtons=function(){for(var e=this,t=Math.floor((this.count-1)/2),a=Math.ceil((this.count-1)/2),i=this.max-this.page+t+1<this.count?this.max-this.count+1:Math.max(this.page-t,1),s=this.page<=a?Math.min(this.count,this.max):Math.min(this.page+a,this.max);e.pagesElement.firstChild;)e.pagesElement.removeChild(e.pagesElement.firstChild);1==e.page?(e.firstBut.disabled=!0,e.prevBut.disabled=!0):(e.firstBut.disabled=!1,e.prevBut.disabled=!1),e.page==e.max?(e.lastBut.disabled=!0,e.nextBut.disabled=!0):(e.lastBut.disabled=!1,e.nextBut.disabled=!1);for(var n=i;n<=s;n++)n>0&&n<=e.max&&e.pagesElement.appendChild(e._generatePageButton(n));this.footerRedraw()},Page.prototype._generatePageButton=function(e){var t=this,a=document.createElement("button");return a.classList.add("tabulator-page"),e==t.page&&a.classList.add("active"),a.setAttribute("type","button"),a.setAttribute("role","button"),t.table.modules.localize.bind("pagination|page_title",function(t){a.setAttribute("aria-label",t+" "+e),a.setAttribute("title",t+" "+e)}),a.setAttribute("data-page",e),a.textContent=e,a.addEventListener("click",function(a){t.setPage(e).then(function(){}).catch(function(){})}),a},Page.prototype.previousPage=function(){var e=this;return new Promise(function(t,a){e.page>1?(e.page--,e.trigger().then(function(){t()}).catch(function(){a()}),e.table.options.persistence&&e.table.modExists("persistence",!0)&&e.table.modules.persistence.config.page&&e.table.modules.persistence.save("page")):(console.warn("Pagination Error - Previous page would be less than page 1:",0),a())})},Page.prototype.nextPage=function(){var e=this;return new Promise(function(t,a){e.page<e.max?(e.page++,e.trigger().then(function(){t()}).catch(function(){a()}),e.table.options.persistence&&e.table.modExists("persistence",!0)&&e.table.modules.persistence.config.page&&e.table.modules.persistence.save("page")):(e.progressiveLoad||console.warn("Pagination Error - Next page would be greater than maximum page of "+e.max+":",e.max+1),a())})},Page.prototype.getPage=function(){return this.page},Page.prototype.getPageMax=function(){return this.max},Page.prototype.getPageSize=function(e){return this.size},Page.prototype.getMode=function(){return this.mode},Page.prototype.getRows=function(e){var t,a,i;if("local"==this.mode){t=[],!0===this.size?(a=0,i=e.length):(a=this.size*(this.page-1),i=a+parseInt(this.size)),this._setPageButtons();for(var s=a;s<i;s++)e[s]&&t.push(e[s]);return t}return this._setPageButtons(),e.slice(0)},Page.prototype.trigger=function(){var e,t=this;return new Promise(function(a,i){switch(t.mode){case"local":e=t.table.rowManager.scrollLeft,t.table.rowManager.refreshActiveData("page"),t.table.rowManager.scrollHorizontal(e),t.table.options.pageLoaded.call(t.table,t.getPage()),a();break;case"remote":case"progressive_load":case"progressive_scroll":t.table.modules.ajax.blockActiveRequest(),t._getRemotePage().then(function(){a()}).catch(function(){i()});break;default:console.warn("Pagination Error - no such pagination mode:",t.mode),i()}})},Page.prototype._getRemotePage=function(){var e,t,a=this,i=this;return new Promise(function(s,n){if(i.table.modExists("ajax",!0)||n(),e=Tabulator.prototype.helpers.deepClone(i.table.modules.ajax.getParams()||{}),t=i.table.modules.ajax.getParams(),t[a.dataSentNames.page]=i.page,a.size&&(t[a.dataSentNames.size]=a.size),a.table.options.ajaxSorting&&a.table.modExists("sort")){var o=i.table.modules.sort.getSort();o.forEach(function(e){delete e.column}),t[a.dataSentNames.sorters]=o}if(a.table.options.ajaxFiltering&&a.table.modExists("filter")){var r=i.table.modules.filter.getFilters(!0,!0);t[a.dataSentNames.filters]=r}i.table.modules.ajax.setParams(t),i.table.modules.ajax.sendRequest(a.progressiveLoad).then(function(e){i._parseRemoteData(e),s()}).catch(function(e){n()}),i.table.modules.ajax.setParams(e)})},Page.prototype._parseRemoteData=function(e){var t,e,a,i=this;if(void 0===e[this.dataReceivedNames.last_page]&&console.warn("Remote Pagination Error - Server response missing '"+this.dataReceivedNames.last_page+"' property"),e[this.dataReceivedNames.data]){if(this.max=parseInt(e[this.dataReceivedNames.last_page])||1,this.progressiveLoad)switch(this.mode){case"progressive_load":1==this.page?this.table.rowManager.setData(e[this.dataReceivedNames.data],!1,this.initialLoad&&1==this.page):this.table.rowManager.addRows(e[this.dataReceivedNames.data]),this.page<this.max&&setTimeout(function(){i.nextPage().then(function(){}).catch(function(){})},i.table.options.ajaxProgressiveLoadDelay);break;case"progressive_scroll":e=this.table.rowManager.getData().concat(e[this.dataReceivedNames.data]),this.table.rowManager.setData(e,!0,this.initialLoad&&1==this.page),a=this.table.options.ajaxProgressiveLoadScrollMargin||2*this.table.rowManager.element.clientHeight,i.table.rowManager.element.scrollHeight<=i.table.rowManager.element.clientHeight+a&&i.nextPage().then(function(){}).catch(function(){})}else t=this.table.rowManager.scrollLeft,this.table.rowManager.setData(e[this.dataReceivedNames.data],!1,this.initialLoad&&1==this.page),this.table.rowManager.scrollHorizontal(t),this.table.columnManager.scrollHorizontal(t),this.table.options.pageLoaded.call(this.table,this.getPage());this.initialLoad=!1}else console.warn("Remote Pagination Error - Server response missing '"+this.dataReceivedNames.data+"' property")},Page.prototype.footerRedraw=function(){var e=this.table.footerManager.element;Math.ceil(e.clientWidth)-e.scrollWidth<0?this.pagesElement.style.display="none":(this.pagesElement.style.display="",Math.ceil(e.clientWidth)-e.scrollWidth<0&&(this.pagesElement.style.display="none"))},Page.prototype.paginationDataSentNames={page:"page",size:"size",sorters:"sorters",filters:"filters"},Page.prototype.paginationDataReceivedNames={current_page:"current_page",last_page:"last_page",data:"data"},Tabulator.prototype.registerModule("page",Page);
\ No newline at end of file
diff --git a/website/js/vendor/tabulator/js/modules/persistence.js b/website/js/vendor/tabulator/js/modules/persistence.js
new file mode 100644 (file)
index 0000000..f7d9f99
--- /dev/null
@@ -0,0 +1,416 @@
+/* Tabulator v4.8.3 (c) Oliver Folkerd */
+
+var Persistence = function Persistence(table) {
+       this.table = table; //hold Tabulator object
+       this.mode = "";
+       this.id = "";
+       // this.persistProps = ["field", "width", "visible"];
+       this.defWatcherBlock = false;
+       this.config = {};
+       this.readFunc = false;
+       this.writeFunc = false;
+};
+
+// Test for whether localStorage is available for use.
+Persistence.prototype.localStorageTest = function () {
+       var testKey = "_tabulator_test";
+
+       try {
+               window.localStorage.setItem(testKey, testKey);
+               window.localStorage.removeItem(testKey);
+               return true;
+       } catch (e) {
+               return false;
+       }
+};
+
+//setup parameters
+Persistence.prototype.initialize = function () {
+       //determine persistent layout storage type
+
+       var mode = this.table.options.persistenceMode,
+           id = this.table.options.persistenceID,
+           retreivedData;
+
+       this.mode = mode !== true ? mode : this.localStorageTest() ? "local" : "cookie";
+
+       if (this.table.options.persistenceReaderFunc) {
+               if (typeof this.table.options.persistenceReaderFunc === "function") {
+                       this.readFunc = this.table.options.persistenceReaderFunc;
+               } else {
+                       if (this.readers[this.table.options.persistenceReaderFunc]) {
+                               this.readFunc = this.readers[this.table.options.persistenceReaderFunc];
+                       } else {
+                               console.warn("Persistence Read Error - invalid reader set", this.table.options.persistenceReaderFunc);
+                       }
+               }
+       } else {
+               if (this.readers[this.mode]) {
+                       this.readFunc = this.readers[this.mode];
+               } else {
+                       console.warn("Persistence Read Error - invalid reader set", this.mode);
+               }
+       }
+
+       if (this.table.options.persistenceWriterFunc) {
+               if (typeof this.table.options.persistenceWriterFunc === "function") {
+                       this.writeFunc = this.table.options.persistenceWriterFunc;
+               } else {
+                       if (this.readers[this.table.options.persistenceWriterFunc]) {
+                               this.writeFunc = this.readers[this.table.options.persistenceWriterFunc];
+                       } else {
+                               console.warn("Persistence Write Error - invalid reader set", this.table.options.persistenceWriterFunc);
+                       }
+               }
+       } else {
+               if (this.writers[this.mode]) {
+                       this.writeFunc = this.writers[this.mode];
+               } else {
+                       console.warn("Persistence Write Error - invalid writer set", this.mode);
+               }
+       }
+
+       //set storage tag
+       this.id = "tabulator-" + (id || this.table.element.getAttribute("id") || "");
+
+       this.config = {
+               sort: this.table.options.persistence === true || this.table.options.persistence.sort,
+               filter: this.table.options.persistence === true || this.table.options.persistence.filter,
+               group: this.table.options.persistence === true || this.table.options.persistence.group,
+               page: this.table.options.persistence === true || this.table.options.persistence.page,
+               columns: this.table.options.persistence === true ? ["title", "width", "visible"] : this.table.options.persistence.columns
+       };
+
+       //load pagination data if needed
+       if (this.config.page) {
+               retreivedData = this.retreiveData("page");
+
+               if (retreivedData) {
+                       if (typeof retreivedData.paginationSize !== "undefined" && (this.config.page === true || this.config.page.size)) {
+                               this.table.options.paginationSize = retreivedData.paginationSize;
+                       }
+
+                       if (typeof retreivedData.paginationInitialPage !== "undefined" && (this.config.page === true || this.config.page.page)) {
+                               this.table.options.paginationInitialPage = retreivedData.paginationInitialPage;
+                       }
+               }
+       }
+
+       //load group data if needed
+       if (this.config.group) {
+               retreivedData = this.retreiveData("group");
+
+               if (retreivedData) {
+                       if (typeof retreivedData.groupBy !== "undefined" && (this.config.group === true || this.config.group.groupBy)) {
+                               this.table.options.groupBy = retreivedData.groupBy;
+                       }
+                       if (typeof retreivedData.groupStartOpen !== "undefined" && (this.config.group === true || this.config.group.groupStartOpen)) {
+                               this.table.options.groupStartOpen = retreivedData.groupStartOpen;
+                       }
+                       if (typeof retreivedData.groupHeader !== "undefined" && (this.config.group === true || this.config.group.groupHeader)) {
+                               this.table.options.groupHeader = retreivedData.groupHeader;
+                       }
+               }
+       }
+};
+
+Persistence.prototype.initializeColumn = function (column) {
+       var self = this,
+           def,
+           keys;
+
+       if (this.config.columns) {
+               this.defWatcherBlock = true;
+
+               def = column.getDefinition();
+
+               keys = this.config.columns === true ? Object.keys(def) : this.config.columns;
+
+               keys.forEach(function (key) {
+                       var props = Object.getOwnPropertyDescriptor(def, key);
+                       var value = def[key];
+                       if (props) {
+                               Object.defineProperty(def, key, {
+                                       set: function set(newValue) {
+                                               value = newValue;
+
+                                               if (!self.defWatcherBlock) {
+                                                       self.save("columns");
+                                               }
+
+                                               if (props.set) {
+                                                       props.set(newValue);
+                                               }
+                                       },
+                                       get: function get() {
+                                               if (props.get) {
+                                                       props.get();
+                                               }
+                                               return value;
+                                       }
+                               });
+                       }
+               });
+
+               this.defWatcherBlock = false;
+       }
+};
+
+//load saved definitions
+Persistence.prototype.load = function (type, current) {
+       var data = this.retreiveData(type);
+
+       if (current) {
+               data = data ? this.mergeDefinition(current, data) : current;
+       }
+
+       return data;
+};
+
+//retreive data from memory
+Persistence.prototype.retreiveData = function (type) {
+       return this.readFunc ? this.readFunc(this.id, type) : false;
+};
+
+//merge old and new column definitions
+Persistence.prototype.mergeDefinition = function (oldCols, newCols) {
+       var self = this,
+           output = [];
+
+       // oldCols = oldCols || [];
+       newCols = newCols || [];
+
+       newCols.forEach(function (column, to) {
+
+               var from = self._findColumn(oldCols, column),
+                   keys;
+
+               if (from) {
+
+                       if (self.config.columns === true || self.config.columns == undefined) {
+                               keys = Object.keys(from);
+                               keys.push("width");
+                       } else {
+                               keys = self.config.columns;
+                       }
+
+                       keys.forEach(function (key) {
+                               if (typeof column[key] !== "undefined") {
+                                       from[key] = column[key];
+                               }
+                       });
+
+                       if (from.columns) {
+                               from.columns = self.mergeDefinition(from.columns, column.columns);
+                       }
+
+                       output.push(from);
+               }
+       });
+
+       oldCols.forEach(function (column, i) {
+               var from = self._findColumn(newCols, column);
+               if (!from) {
+                       if (output.length > i) {
+                               output.splice(i, 0, column);
+                       } else {
+                               output.push(column);
+                       }
+               }
+       });
+
+       return output;
+};
+
+//find matching columns
+Persistence.prototype._findColumn = function (columns, subject) {
+       var type = subject.columns ? "group" : subject.field ? "field" : "object";
+
+       return columns.find(function (col) {
+               switch (type) {
+                       case "group":
+                               return col.title === subject.title && col.columns.length === subject.columns.length;
+                               break;
+
+                       case "field":
+                               return col.field === subject.field;
+                               break;
+
+                       case "object":
+                               return col === subject;
+                               break;
+               }
+       });
+};
+
+//save data
+Persistence.prototype.save = function (type) {
+       var data = {};
+
+       switch (type) {
+               case "columns":
+                       data = this.parseColumns(this.table.columnManager.getColumns());
+                       break;
+
+               case "filter":
+                       data = this.table.modules.filter.getFilters();
+                       break;
+
+               case "sort":
+                       data = this.validateSorters(this.table.modules.sort.getSort());
+                       break;
+
+               case "group":
+                       data = this.getGroupConfig();
+                       break;
+
+               case "page":
+                       data = this.getPageConfig();
+                       break;
+       }
+
+       if (this.writeFunc) {
+               this.writeFunc(this.id, type, data);
+       }
+};
+
+//ensure sorters contain no function data
+Persistence.prototype.validateSorters = function (data) {
+       data.forEach(function (item) {
+               item.column = item.field;
+               delete item.field;
+       });
+
+       return data;
+};
+
+Persistence.prototype.getGroupConfig = function () {
+       var data = {};
+
+       if (this.config.group) {
+               if (this.config.group === true || this.config.group.groupBy) {
+                       data.groupBy = this.table.options.groupBy;
+               }
+
+               if (this.config.group === true || this.config.group.groupStartOpen) {
+                       data.groupStartOpen = this.table.options.groupStartOpen;
+               }
+
+               if (this.config.group === true || this.config.group.groupHeader) {
+                       data.groupHeader = this.table.options.groupHeader;
+               }
+       }
+
+       return data;
+};
+
+Persistence.prototype.getPageConfig = function () {
+       var data = {};
+
+       if (this.config.page) {
+               if (this.config.page === true || this.config.page.size) {
+                       data.paginationSize = this.table.modules.page.getPageSize();
+               }
+
+               if (this.config.page === true || this.config.page.page) {
+                       data.paginationInitialPage = this.table.modules.page.getPage();
+               }
+       }
+
+       return data;
+};
+
+//parse columns for data to store
+Persistence.prototype.parseColumns = function (columns) {
+       var self = this,
+           definitions = [],
+           excludedKeys = ["headerContextMenu", "headerMenu", "contextMenu", "clickMenu"];
+
+       columns.forEach(function (column) {
+               var defStore = {},
+                   colDef = column.getDefinition(),
+                   keys;
+
+               if (column.isGroup) {
+                       defStore.title = colDef.title;
+                       defStore.columns = self.parseColumns(column.getColumns());
+               } else {
+                       defStore.field = column.getField();
+
+                       if (self.config.columns === true || self.config.columns == undefined) {
+                               keys = Object.keys(colDef);
+                               keys.push("width");
+                       } else {
+                               keys = self.config.columns;
+                       }
+
+                       keys.forEach(function (key) {
+
+                               switch (key) {
+                                       case "width":
+                                               defStore.width = column.getWidth();
+                                               break;
+                                       case "visible":
+                                               defStore.visible = column.visible;
+                                               break;
+
+                                       default:
+                                               if (typeof colDef[key] !== "function" && excludedKeys.indexOf(key) === -1) {
+                                                       defStore[key] = colDef[key];
+                                               }
+                               }
+                       });
+               }
+
+               definitions.push(defStore);
+       });
+
+       return definitions;
+};
+
+// read peristence information from storage
+Persistence.prototype.readers = {
+       local: function local(id, type) {
+               var data = localStorage.getItem(id + "-" + type);
+
+               return data ? JSON.parse(data) : false;
+       },
+       cookie: function cookie(id, type) {
+               var cookie = document.cookie,
+                   key = id + "-" + type,
+                   cookiePos = cookie.indexOf(key + "="),
+                   end,
+                   data;
+
+               //if cookie exists, decode and load column data into tabulator
+               if (cookiePos > -1) {
+                       cookie = cookie.substr(cookiePos);
+
+                       end = cookie.indexOf(";");
+
+                       if (end > -1) {
+                               cookie = cookie.substr(0, end);
+                       }
+
+                       data = cookie.replace(key + "=", "");
+               }
+
+               return data ? JSON.parse(data) : false;
+       }
+};
+
+//write persistence information to storage
+Persistence.prototype.writers = {
+       local: function local(id, type, data) {
+               localStorage.setItem(id + "-" + type, JSON.stringify(data));
+       },
+       cookie: function cookie(id, type, data) {
+               var expireDate = new Date();
+
+               expireDate.setDate(expireDate.getDate() + 10000);
+
+               document.cookie = id + "-" + type + "=" + JSON.stringify(data) + "; expires=" + expireDate.toUTCString();
+       }
+};
+
+Tabulator.prototype.registerModule("persistence", Persistence);
\ No newline at end of file
diff --git a/website/js/vendor/tabulator/js/modules/persistence.min.js b/website/js/vendor/tabulator/js/modules/persistence.min.js
new file mode 100644 (file)
index 0000000..13b6e88
--- /dev/null
@@ -0,0 +1,2 @@
+/* Tabulator v4.8.3 (c) Oliver Folkerd */
+var Persistence=function(e){this.table=e,this.mode="",this.id="",this.defWatcherBlock=!1,this.config={},this.readFunc=!1,this.writeFunc=!1};Persistence.prototype.localStorageTest=function(){var e="_tabulator_test";try{return window.localStorage.setItem(e,e),window.localStorage.removeItem(e),!0}catch(e){return!1}},Persistence.prototype.initialize=function(){var e,t=this.table.options.persistenceMode,i=this.table.options.persistenceID;this.mode=!0!==t?t:this.localStorageTest()?"local":"cookie",this.table.options.persistenceReaderFunc?"function"==typeof this.table.options.persistenceReaderFunc?this.readFunc=this.table.options.persistenceReaderFunc:this.readers[this.table.options.persistenceReaderFunc]?this.readFunc=this.readers[this.table.options.persistenceReaderFunc]:console.warn("Persistence Read Error - invalid reader set",this.table.options.persistenceReaderFunc):this.readers[this.mode]?this.readFunc=this.readers[this.mode]:console.warn("Persistence Read Error - invalid reader set",this.mode),this.table.options.persistenceWriterFunc?"function"==typeof this.table.options.persistenceWriterFunc?this.writeFunc=this.table.options.persistenceWriterFunc:this.readers[this.table.options.persistenceWriterFunc]?this.writeFunc=this.readers[this.table.options.persistenceWriterFunc]:console.warn("Persistence Write Error - invalid reader set",this.table.options.persistenceWriterFunc):this.writers[this.mode]?this.writeFunc=this.writers[this.mode]:console.warn("Persistence Write Error - invalid writer set",this.mode),this.id="tabulator-"+(i||this.table.element.getAttribute("id")||""),this.config={sort:!0===this.table.options.persistence||this.table.options.persistence.sort,filter:!0===this.table.options.persistence||this.table.options.persistence.filter,group:!0===this.table.options.persistence||this.table.options.persistence.group,page:!0===this.table.options.persistence||this.table.options.persistence.page,columns:!0===this.table.options.persistence?["title","width","visible"]:this.table.options.persistence.columns},this.config.page&&(e=this.retreiveData("page"))&&(void 0===e.paginationSize||!0!==this.config.page&&!this.config.page.size||(this.table.options.paginationSize=e.paginationSize),void 0===e.paginationInitialPage||!0!==this.config.page&&!this.config.page.page||(this.table.options.paginationInitialPage=e.paginationInitialPage)),this.config.group&&(e=this.retreiveData("group"))&&(void 0===e.groupBy||!0!==this.config.group&&!this.config.group.groupBy||(this.table.options.groupBy=e.groupBy),void 0===e.groupStartOpen||!0!==this.config.group&&!this.config.group.groupStartOpen||(this.table.options.groupStartOpen=e.groupStartOpen),void 0===e.groupHeader||!0!==this.config.group&&!this.config.group.groupHeader||(this.table.options.groupHeader=e.groupHeader))},Persistence.prototype.initializeColumn=function(e){var t,i,o=this;this.config.columns&&(this.defWatcherBlock=!0,t=e.getDefinition(),i=!0===this.config.columns?Object.keys(t):this.config.columns,i.forEach(function(e){var i=Object.getOwnPropertyDescriptor(t,e),s=t[e];i&&Object.defineProperty(t,e,{set:function(e){s=e,o.defWatcherBlock||o.save("columns"),i.set&&i.set(e)},get:function(){return i.get&&i.get(),s}})}),this.defWatcherBlock=!1)},Persistence.prototype.load=function(e,t){var i=this.retreiveData(e);return t&&(i=i?this.mergeDefinition(t,i):t),i},Persistence.prototype.retreiveData=function(e){return!!this.readFunc&&this.readFunc(this.id,e)},Persistence.prototype.mergeDefinition=function(e,t){var i=this,o=[];return t=t||[],t.forEach(function(t,s){var n,r=i._findColumn(e,t);r&&(!0===i.config.columns||void 0==i.config.columns?(n=Object.keys(r),n.push("width")):n=i.config.columns,n.forEach(function(e){void 0!==t[e]&&(r[e]=t[e])}),r.columns&&(r.columns=i.mergeDefinition(r.columns,t.columns)),o.push(r))}),e.forEach(function(e,s){i._findColumn(t,e)||(o.length>s?o.splice(s,0,e):o.push(e))}),o},Persistence.prototype._findColumn=function(e,t){var i=t.columns?"group":t.field?"field":"object";return e.find(function(e){switch(i){case"group":return e.title===t.title&&e.columns.length===t.columns.length;case"field":return e.field===t.field;case"object":return e===t}})},Persistence.prototype.save=function(e){var t={};switch(e){case"columns":t=this.parseColumns(this.table.columnManager.getColumns());break;case"filter":t=this.table.modules.filter.getFilters();break;case"sort":t=this.validateSorters(this.table.modules.sort.getSort());break;case"group":t=this.getGroupConfig();break;case"page":t=this.getPageConfig()}this.writeFunc&&this.writeFunc(this.id,e,t)},Persistence.prototype.validateSorters=function(e){return e.forEach(function(e){e.column=e.field,delete e.field}),e},Persistence.prototype.getGroupConfig=function(){var e={};return this.config.group&&((!0===this.config.group||this.config.group.groupBy)&&(e.groupBy=this.table.options.groupBy),(!0===this.config.group||this.config.group.groupStartOpen)&&(e.groupStartOpen=this.table.options.groupStartOpen),(!0===this.config.group||this.config.group.groupHeader)&&(e.groupHeader=this.table.options.groupHeader)),e},Persistence.prototype.getPageConfig=function(){var e={};return this.config.page&&((!0===this.config.page||this.config.page.size)&&(e.paginationSize=this.table.modules.page.getPageSize()),(!0===this.config.page||this.config.page.page)&&(e.paginationInitialPage=this.table.modules.page.getPage())),e},Persistence.prototype.parseColumns=function(e){var t=this,i=[],o=["headerContextMenu","headerMenu","contextMenu","clickMenu"];return e.forEach(function(e){var s,n={},r=e.getDefinition();e.isGroup?(n.title=r.title,n.columns=t.parseColumns(e.getColumns())):(n.field=e.getField(),!0===t.config.columns||void 0==t.config.columns?(s=Object.keys(r),s.push("width")):s=t.config.columns,s.forEach(function(t){switch(t){case"width":n.width=e.getWidth();break;case"visible":n.visible=e.visible;break;default:"function"!=typeof r[t]&&-1===o.indexOf(t)&&(n[t]=r[t])}})),i.push(n)}),i},Persistence.prototype.readers={local:function(e,t){var i=localStorage.getItem(e+"-"+t);return!!i&&JSON.parse(i)},cookie:function(e,t){var i,o,s=document.cookie,n=e+"-"+t,r=s.indexOf(n+"=");return r>-1&&(s=s.substr(r),i=s.indexOf(";"),i>-1&&(s=s.substr(0,i)),o=s.replace(n+"=","")),!!o&&JSON.parse(o)}},Persistence.prototype.writers={local:function(e,t,i){localStorage.setItem(e+"-"+t,JSON.stringify(i))},cookie:function(e,t,i){var o=new Date;o.setDate(o.getDate()+1e4),document.cookie=e+"-"+t+"="+JSON.stringify(i)+"; expires="+o.toUTCString()}},Tabulator.prototype.registerModule("persistence",Persistence);
\ No newline at end of file
diff --git a/website/js/vendor/tabulator/js/modules/print.js b/website/js/vendor/tabulator/js/modules/print.js
new file mode 100644 (file)
index 0000000..3ed4835
--- /dev/null
@@ -0,0 +1,96 @@
+/* Tabulator v4.8.3 (c) Oliver Folkerd */
+
+var Print = function Print(table) {
+       this.table = table; //hold Tabulator object
+       this.element = false;
+       this.manualBlock = false;
+};
+
+Print.prototype.initialize = function () {
+       window.addEventListener("beforeprint", this.replaceTable.bind(this));
+       window.addEventListener("afterprint", this.cleanup.bind(this));
+};
+
+Print.prototype.replaceTable = function () {
+       if (!this.manualBlock) {
+               this.element = document.createElement("div");
+               this.element.classList.add("tabulator-print-table");
+
+               this.element.appendChild(this.table.modules.export.genereateTable(this.table.options.printConfig, this.table.options.printStyled, this.table.options.printRowRange, "print"));
+
+               this.table.element.style.display = "none";
+
+               this.table.element.parentNode.insertBefore(this.element, this.table.element);
+       }
+};
+
+Print.prototype.cleanup = function () {
+       document.body.classList.remove("tabulator-print-fullscreen-hide");
+
+       if (this.element && this.element.parentNode) {
+               this.element.parentNode.removeChild(this.element);
+               this.table.element.style.display = "";
+       }
+};
+
+Print.prototype.printFullscreen = function (visible, style, config) {
+       var scrollX = window.scrollX,
+           scrollY = window.scrollY,
+           headerEl = document.createElement("div"),
+           footerEl = document.createElement("div"),
+           tableEl = this.table.modules.export.genereateTable(typeof config != "undefined" ? config : this.table.options.printConfig, typeof style != "undefined" ? style : this.table.options.printStyled, visible, "print"),
+           headerContent,
+           footerContent;
+
+       this.manualBlock = true;
+
+       this.element = document.createElement("div");
+       this.element.classList.add("tabulator-print-fullscreen");
+
+       if (this.table.options.printHeader) {
+               headerEl.classList.add("tabulator-print-header");
+
+               headerContent = typeof this.table.options.printHeader == "function" ? this.table.options.printHeader.call(this.table) : this.table.options.printHeader;
+
+               if (typeof headerContent == "string") {
+                       headerEl.innerHTML = headerContent;
+               } else {
+                       headerEl.appendChild(headerContent);
+               }
+
+               this.element.appendChild(headerEl);
+       }
+
+       this.element.appendChild(tableEl);
+
+       if (this.table.options.printFooter) {
+               footerEl.classList.add("tabulator-print-footer");
+
+               footerContent = typeof this.table.options.printFooter == "function" ? this.table.options.printFooter.call(this.table) : this.table.options.printFooter;
+
+               if (typeof footerContent == "string") {
+                       footerEl.innerHTML = footerContent;
+               } else {
+                       footerEl.appendChild(footerContent);
+               }
+
+               this.element.appendChild(footerEl);
+       }
+
+       document.body.classList.add("tabulator-print-fullscreen-hide");
+       document.body.appendChild(this.element);
+
+       if (this.table.options.printFormatter) {
+               this.table.options.printFormatter(this.element, tableEl);
+       }
+
+       window.print();
+
+       this.cleanup();
+
+       window.scrollTo(scrollX, scrollY);
+
+       this.manualBlock = false;
+};
+
+Tabulator.prototype.registerModule("print", Print);
\ No newline at end of file
diff --git a/website/js/vendor/tabulator/js/modules/print.min.js b/website/js/vendor/tabulator/js/modules/print.min.js
new file mode 100644 (file)
index 0000000..ef6d8b1
--- /dev/null
@@ -0,0 +1,2 @@
+/* Tabulator v4.8.3 (c) Oliver Folkerd */
+var Print=function(t){this.table=t,this.element=!1,this.manualBlock=!1};Print.prototype.initialize=function(){window.addEventListener("beforeprint",this.replaceTable.bind(this)),window.addEventListener("afterprint",this.cleanup.bind(this))},Print.prototype.replaceTable=function(){this.manualBlock||(this.element=document.createElement("div"),this.element.classList.add("tabulator-print-table"),this.element.appendChild(this.table.modules.export.genereateTable(this.table.options.printConfig,this.table.options.printStyled,this.table.options.printRowRange,"print")),this.table.element.style.display="none",this.table.element.parentNode.insertBefore(this.element,this.table.element))},Print.prototype.cleanup=function(){document.body.classList.remove("tabulator-print-fullscreen-hide"),this.element&&this.element.parentNode&&(this.element.parentNode.removeChild(this.element),this.table.element.style.display="")},Print.prototype.printFullscreen=function(t,e,i){var n,l,o=window.scrollX,a=window.scrollY,s=document.createElement("div"),r=document.createElement("div"),p=this.table.modules.export.genereateTable(void 0!==i?i:this.table.options.printConfig,void 0!==e?e:this.table.options.printStyled,t,"print");this.manualBlock=!0,this.element=document.createElement("div"),this.element.classList.add("tabulator-print-fullscreen"),this.table.options.printHeader&&(s.classList.add("tabulator-print-header"),n="function"==typeof this.table.options.printHeader?this.table.options.printHeader.call(this.table):this.table.options.printHeader,"string"==typeof n?s.innerHTML=n:s.appendChild(n),this.element.appendChild(s)),this.element.appendChild(p),this.table.options.printFooter&&(r.classList.add("tabulator-print-footer"),l="function"==typeof this.table.options.printFooter?this.table.options.printFooter.call(this.table):this.table.options.printFooter,"string"==typeof l?r.innerHTML=l:r.appendChild(l),this.element.appendChild(r)),document.body.classList.add("tabulator-print-fullscreen-hide"),document.body.appendChild(this.element),this.table.options.printFormatter&&this.table.options.printFormatter(this.element,p),window.print(),this.cleanup(),window.scrollTo(o,a),this.manualBlock=!1},Tabulator.prototype.registerModule("print",Print);
\ No newline at end of file
diff --git a/website/js/vendor/tabulator/js/modules/reactive_data.js b/website/js/vendor/tabulator/js/modules/reactive_data.js
new file mode 100644 (file)
index 0000000..def9edc
--- /dev/null
@@ -0,0 +1,323 @@
+/* Tabulator v4.8.3 (c) Oliver Folkerd */
+
+var ReactiveData = function ReactiveData(table) {
+       this.table = table; //hold Tabulator object
+       this.data = false;
+       this.blocked = false; //block reactivity while performing update
+       this.origFuncs = {}; // hold original data array functions to allow replacement after data is done with
+       this.currentVersion = 0;
+};
+
+ReactiveData.prototype.watchData = function (data) {
+       var self = this,
+           pushFunc,
+           version;
+
+       this.currentVersion++;
+
+       version = this.currentVersion;
+
+       self.unwatchData();
+
+       self.data = data;
+
+       //override array push function
+       self.origFuncs.push = data.push;
+
+       Object.defineProperty(self.data, "push", {
+               enumerable: false,
+               configurable: true,
+               value: function value() {
+                       var args = Array.from(arguments);
+
+                       if (!self.blocked && version === self.currentVersion) {
+                               args.forEach(function (arg) {
+                                       self.table.rowManager.addRowActual(arg, false);
+                               });
+                       }
+
+                       return self.origFuncs.push.apply(data, arguments);
+               }
+       });
+
+       //override array unshift function
+       self.origFuncs.unshift = data.unshift;
+
+       Object.defineProperty(self.data, "unshift", {
+               enumerable: false,
+               configurable: true,
+               value: function value() {
+                       var args = Array.from(arguments);
+
+                       if (!self.blocked && version === self.currentVersion) {
+                               args.forEach(function (arg) {
+                                       self.table.rowManager.addRowActual(arg, true);
+                               });
+                       }
+
+                       return self.origFuncs.unshift.apply(data, arguments);
+               }
+       });
+
+       //override array shift function
+       self.origFuncs.shift = data.shift;
+
+       Object.defineProperty(self.data, "shift", {
+               enumerable: false,
+               configurable: true,
+               value: function value() {
+                       var row;
+
+                       if (!self.blocked && version === self.currentVersion) {
+                               if (self.data.length) {
+                                       row = self.table.rowManager.getRowFromDataObject(self.data[0]);
+
+                                       if (row) {
+                                               row.deleteActual();
+                                       }
+                               }
+                       }
+
+                       return self.origFuncs.shift.call(data);
+               }
+       });
+
+       //override array pop function
+       self.origFuncs.pop = data.pop;
+
+       Object.defineProperty(self.data, "pop", {
+               enumerable: false,
+               configurable: true,
+               value: function value() {
+                       var row;
+                       if (!self.blocked && version === self.currentVersion) {
+                               if (self.data.length) {
+                                       row = self.table.rowManager.getRowFromDataObject(self.data[self.data.length - 1]);
+
+                                       if (row) {
+                                               row.deleteActual();
+                                       }
+                               }
+                       }
+                       return self.origFuncs.pop.call(data);
+               }
+       });
+
+       //override array splice function
+       self.origFuncs.splice = data.splice;
+
+       Object.defineProperty(self.data, "splice", {
+               enumerable: false,
+               configurable: true,
+               value: function value() {
+                       var args = Array.from(arguments),
+                           start = args[0] < 0 ? data.length + args[0] : args[0],
+                           end = args[1],
+                           newRows = args[2] ? args.slice(2) : false,
+                           startRow;
+
+                       if (!self.blocked && version === self.currentVersion) {
+
+                               //add new rows
+                               if (newRows) {
+                                       startRow = data[start] ? self.table.rowManager.getRowFromDataObject(data[start]) : false;
+
+                                       if (startRow) {
+                                               newRows.forEach(function (rowData) {
+                                                       self.table.rowManager.addRowActual(rowData, true, startRow, true);
+                                               });
+                                       } else {
+                                               newRows = newRows.slice().reverse();
+
+                                               newRows.forEach(function (rowData) {
+                                                       self.table.rowManager.addRowActual(rowData, true, false, true);
+                                               });
+                                       }
+                               }
+
+                               //delete removed rows
+                               if (end !== 0) {
+                                       var oldRows = data.slice(start, typeof args[1] === "undefined" ? args[1] : start + end);
+
+                                       oldRows.forEach(function (rowData, i) {
+                                               var row = self.table.rowManager.getRowFromDataObject(rowData);
+
+                                               if (row) {
+                                                       row.deleteActual(i !== oldRows.length - 1);
+                                               }
+                                       });
+                               }
+
+                               if (newRows || end !== 0) {
+                                       self.table.rowManager.reRenderInPosition();
+                               }
+                       }
+
+                       return self.origFuncs.splice.apply(data, arguments);
+               }
+       });
+};
+
+ReactiveData.prototype.unwatchData = function () {
+       if (this.data !== false) {
+               for (var key in this.origFuncs) {
+                       Object.defineProperty(this.data, key, {
+                               enumerable: true,
+                               configurable: true,
+                               writable: true,
+                               value: this.origFuncs.key
+                       });
+               }
+       }
+};
+
+ReactiveData.prototype.watchRow = function (row) {
+       var data = row.getData();
+
+       this.blocked = true;
+
+       for (var key in data) {
+               this.watchKey(row, data, key);
+       }
+
+       if (this.table.options.dataTree) {
+               this.watchTreeChildren(row);
+       }
+
+       this.blocked = false;
+};
+
+ReactiveData.prototype.watchTreeChildren = function (row) {
+       var self = this,
+           childField = row.getData()[this.table.options.dataTreeChildField],
+           origFuncs = {};
+
+       function rebuildTree() {
+               self.table.modules.dataTree.initializeRow(row);
+               self.table.modules.dataTree.layoutRow(row);
+               self.table.rowManager.refreshActiveData("tree", false, true);
+       }
+
+       if (childField) {
+
+               origFuncs.push = childField.push;
+
+               Object.defineProperty(childField, "push", {
+                       enumerable: false,
+                       configurable: true,
+                       value: function value() {
+                               var result = origFuncs.push.apply(childField, arguments);
+
+                               rebuildTree();
+
+                               return result;
+                       }
+               });
+
+               origFuncs.unshift = childField.unshift;
+
+               Object.defineProperty(childField, "unshift", {
+                       enumerable: false,
+                       configurable: true,
+                       value: function value() {
+                               var result = origFuncs.unshift.apply(childField, arguments);
+
+                               rebuildTree();
+
+                               return result;
+                       }
+               });
+
+               origFuncs.shift = childField.shift;
+
+               Object.defineProperty(childField, "shift", {
+                       enumerable: false,
+                       configurable: true,
+                       value: function value() {
+                               var result = origFuncs.shift.call(childField);
+
+                               rebuildTree();
+
+                               return result;
+                       }
+               });
+
+               origFuncs.pop = childField.pop;
+
+               Object.defineProperty(childField, "pop", {
+                       enumerable: false,
+                       configurable: true,
+                       value: function value() {
+                               var result = origFuncs.pop.call(childField);
+
+                               rebuildTree();
+
+                               return result;
+                       }
+               });
+
+               origFuncs.splice = childField.splice;
+
+               Object.defineProperty(childField, "splice", {
+                       enumerable: false,
+                       configurable: true,
+                       value: function value() {
+                               var result = origFuncs.splice.apply(childField, arguments);
+
+                               rebuildTree();
+
+                               return result;
+                       }
+               });
+       }
+};
+
+ReactiveData.prototype.watchKey = function (row, data, key) {
+       var self = this,
+           props = Object.getOwnPropertyDescriptor(data, key),
+           value = data[key],
+           version = this.currentVersion;
+
+       Object.defineProperty(data, key, {
+               set: function set(newValue) {
+                       value = newValue;
+                       if (!self.blocked && version === self.currentVersion) {
+                               var update = {};
+                               update[key] = newValue;
+                               row.updateData(update);
+                       }
+
+                       if (props.set) {
+                               props.set(newValue);
+                       }
+               },
+               get: function get() {
+
+                       if (props.get) {
+                               props.get();
+                       }
+
+                       return value;
+               }
+       });
+};
+
+ReactiveData.prototype.unwatchRow = function (row) {
+       var data = row.getData();
+
+       for (var key in data) {
+               Object.defineProperty(data, key, {
+                       value: data[key]
+               });
+       }
+};
+
+ReactiveData.prototype.block = function () {
+       this.blocked = true;
+};
+
+ReactiveData.prototype.unblock = function () {
+       this.blocked = false;
+};
+
+Tabulator.prototype.registerModule("reactiveData", ReactiveData);
\ No newline at end of file
diff --git a/website/js/vendor/tabulator/js/modules/reactive_data.min.js b/website/js/vendor/tabulator/js/modules/reactive_data.min.js
new file mode 100644 (file)
index 0000000..e97ddd5
--- /dev/null
@@ -0,0 +1,2 @@
+/* Tabulator v4.8.3 (c) Oliver Folkerd */
+var ReactiveData=function(e){this.table=e,this.data=!1,this.blocked=!1,this.origFuncs={},this.currentVersion=0};ReactiveData.prototype.watchData=function(e){var t,a=this;this.currentVersion++,t=this.currentVersion,a.unwatchData(),a.data=e,a.origFuncs.push=e.push,Object.defineProperty(a.data,"push",{enumerable:!1,configurable:!0,value:function(){var r=Array.from(arguments);return a.blocked||t!==a.currentVersion||r.forEach(function(e){a.table.rowManager.addRowActual(e,!1)}),a.origFuncs.push.apply(e,arguments)}}),a.origFuncs.unshift=e.unshift,Object.defineProperty(a.data,"unshift",{enumerable:!1,configurable:!0,value:function(){var r=Array.from(arguments);return a.blocked||t!==a.currentVersion||r.forEach(function(e){a.table.rowManager.addRowActual(e,!0)}),a.origFuncs.unshift.apply(e,arguments)}}),a.origFuncs.shift=e.shift,Object.defineProperty(a.data,"shift",{enumerable:!1,configurable:!0,value:function(){var r;return a.blocked||t!==a.currentVersion||a.data.length&&(r=a.table.rowManager.getRowFromDataObject(a.data[0]))&&r.deleteActual(),a.origFuncs.shift.call(e)}}),a.origFuncs.pop=e.pop,Object.defineProperty(a.data,"pop",{enumerable:!1,configurable:!0,value:function(){var r;return a.blocked||t!==a.currentVersion||a.data.length&&(r=a.table.rowManager.getRowFromDataObject(a.data[a.data.length-1]))&&r.deleteActual(),a.origFuncs.pop.call(e)}}),a.origFuncs.splice=e.splice,Object.defineProperty(a.data,"splice",{enumerable:!1,configurable:!0,value:function(){var r,n=Array.from(arguments),o=n[0]<0?e.length+n[0]:n[0],i=n[1],c=!!n[2]&&n.slice(2);if(!a.blocked&&t===a.currentVersion){if(c&&(r=!!e[o]&&a.table.rowManager.getRowFromDataObject(e[o]),r?c.forEach(function(e){a.table.rowManager.addRowActual(e,!0,r,!0)}):(c=c.slice().reverse(),c.forEach(function(e){a.table.rowManager.addRowActual(e,!0,!1,!0)}))),0!==i){var u=e.slice(o,void 0===n[1]?n[1]:o+i);u.forEach(function(e,t){var r=a.table.rowManager.getRowFromDataObject(e);r&&r.deleteActual(t!==u.length-1)})}(c||0!==i)&&a.table.rowManager.reRenderInPosition()}return a.origFuncs.splice.apply(e,arguments)}})},ReactiveData.prototype.unwatchData=function(){if(!1!==this.data)for(var e in this.origFuncs)Object.defineProperty(this.data,e,{enumerable:!0,configurable:!0,writable:!0,value:this.origFuncs.key})},ReactiveData.prototype.watchRow=function(e){var t=e.getData();this.blocked=!0;for(var a in t)this.watchKey(e,t,a);this.table.options.dataTree&&this.watchTreeChildren(e),this.blocked=!1},ReactiveData.prototype.watchTreeChildren=function(e){function t(){a.table.modules.dataTree.initializeRow(e),a.table.modules.dataTree.layoutRow(e),a.table.rowManager.refreshActiveData("tree",!1,!0)}var a=this,r=e.getData()[this.table.options.dataTreeChildField],n={};r&&(n.push=r.push,Object.defineProperty(r,"push",{enumerable:!1,configurable:!0,value:function(){var e=n.push.apply(r,arguments);return t(),e}}),n.unshift=r.unshift,Object.defineProperty(r,"unshift",{enumerable:!1,configurable:!0,value:function(){var e=n.unshift.apply(r,arguments);return t(),e}}),n.shift=r.shift,Object.defineProperty(r,"shift",{enumerable:!1,configurable:!0,value:function(){var e=n.shift.call(r);return t(),e}}),n.pop=r.pop,Object.defineProperty(r,"pop",{enumerable:!1,configurable:!0,value:function(){var e=n.pop.call(r);return t(),e}}),n.splice=r.splice,Object.defineProperty(r,"splice",{enumerable:!1,configurable:!0,value:function(){var e=n.splice.apply(r,arguments);return t(),e}}))},ReactiveData.prototype.watchKey=function(e,t,a){var r=this,n=Object.getOwnPropertyDescriptor(t,a),o=t[a],i=this.currentVersion;Object.defineProperty(t,a,{set:function(t){if(o=t,!r.blocked&&i===r.currentVersion){var c={};c[a]=t,e.updateData(c)}n.set&&n.set(t)},get:function(){return n.get&&n.get(),o}})},ReactiveData.prototype.unwatchRow=function(e){var t=e.getData();for(var a in t)Object.defineProperty(t,a,{value:t[a]})},ReactiveData.prototype.block=function(){this.blocked=!0},ReactiveData.prototype.unblock=function(){this.blocked=!1},Tabulator.prototype.registerModule("reactiveData",ReactiveData);
\ No newline at end of file
diff --git a/website/js/vendor/tabulator/js/modules/resize_columns.js b/website/js/vendor/tabulator/js/modules/resize_columns.js
new file mode 100644 (file)
index 0000000..bf2b04a
--- /dev/null
@@ -0,0 +1,171 @@
+/* Tabulator v4.8.3 (c) Oliver Folkerd */
+
+var ResizeColumns = function ResizeColumns(table) {
+       this.table = table; //hold Tabulator object
+       this.startColumn = false;
+       this.startX = false;
+       this.startWidth = false;
+       this.handle = null;
+       this.prevHandle = null;
+};
+
+ResizeColumns.prototype.initializeColumn = function (type, column, element) {
+       var self = this,
+           variableHeight = false,
+           mode = this.table.options.resizableColumns;
+
+       //set column resize mode
+       if (type === "header") {
+               variableHeight = column.definition.formatter == "textarea" || column.definition.variableHeight;
+               column.modules.resize = { variableHeight: variableHeight };
+       }
+
+       if (mode === true || mode == type) {
+
+               var handle = document.createElement('div');
+               handle.className = "tabulator-col-resize-handle";
+
+               var prevHandle = document.createElement('div');
+               prevHandle.className = "tabulator-col-resize-handle prev";
+
+               handle.addEventListener("click", function (e) {
+                       e.stopPropagation();
+               });
+
+               var handleDown = function handleDown(e) {
+                       var nearestColumn = column.getLastColumn();
+
+                       if (nearestColumn && self._checkResizability(nearestColumn)) {
+                               self.startColumn = column;
+                               self._mouseDown(e, nearestColumn, handle);
+                       }
+               };
+
+               handle.addEventListener("mousedown", handleDown);
+               handle.addEventListener("touchstart", handleDown, { passive: true });
+
+               //reszie column on  double click
+               handle.addEventListener("dblclick", function (e) {
+                       var col = column.getLastColumn();
+
+                       if (col && self._checkResizability(col)) {
+                               e.stopPropagation();
+                               col.reinitializeWidth(true);
+                       }
+               });
+
+               prevHandle.addEventListener("click", function (e) {
+                       e.stopPropagation();
+               });
+
+               var prevHandleDown = function prevHandleDown(e) {
+                       var nearestColumn, colIndex, prevColumn;
+
+                       nearestColumn = column.getFirstColumn();
+
+                       if (nearestColumn) {
+                               colIndex = self.table.columnManager.findColumnIndex(nearestColumn);
+                               prevColumn = colIndex > 0 ? self.table.columnManager.getColumnByIndex(colIndex - 1) : false;
+
+                               if (prevColumn && self._checkResizability(prevColumn)) {
+                                       self.startColumn = column;
+                                       self._mouseDown(e, prevColumn, prevHandle);
+                               }
+                       }
+               };
+
+               prevHandle.addEventListener("mousedown", prevHandleDown);
+               prevHandle.addEventListener("touchstart", prevHandleDown, { passive: true });
+
+               //resize column on double click
+               prevHandle.addEventListener("dblclick", function (e) {
+                       var nearestColumn, colIndex, prevColumn;
+
+                       nearestColumn = column.getFirstColumn();
+
+                       if (nearestColumn) {
+                               colIndex = self.table.columnManager.findColumnIndex(nearestColumn);
+                               prevColumn = colIndex > 0 ? self.table.columnManager.getColumnByIndex(colIndex - 1) : false;
+
+                               if (prevColumn && self._checkResizability(prevColumn)) {
+                                       e.stopPropagation();
+                                       prevColumn.reinitializeWidth(true);
+                               }
+                       }
+               });
+
+               element.appendChild(handle);
+               element.appendChild(prevHandle);
+       }
+};
+
+ResizeColumns.prototype._checkResizability = function (column) {
+       return typeof column.definition.resizable != "undefined" ? column.definition.resizable : this.table.options.resizableColumns;
+};
+
+ResizeColumns.prototype._mouseDown = function (e, column, handle) {
+       var self = this;
+
+       self.table.element.classList.add("tabulator-block-select");
+
+       function mouseMove(e) {
+               // self.table.columnManager.tempScrollBlock();
+
+               if (self.table.rtl) {
+                       column.setWidth(self.startWidth - ((typeof e.screenX === "undefined" ? e.touches[0].screenX : e.screenX) - self.startX));
+               } else {
+                       column.setWidth(self.startWidth + ((typeof e.screenX === "undefined" ? e.touches[0].screenX : e.screenX) - self.startX));
+               }
+
+               if (self.table.options.virtualDomHoz) {
+                       self.table.vdomHoz.reinitialize(true);
+               }
+
+               if (!self.table.browserSlow && column.modules.resize && column.modules.resize.variableHeight) {
+                       column.checkCellHeights();
+               }
+       }
+
+       function mouseUp(e) {
+
+               //block editor from taking action while resizing is taking place
+               if (self.startColumn.modules.edit) {
+                       self.startColumn.modules.edit.blocked = false;
+               }
+
+               if (self.table.browserSlow && column.modules.resize && column.modules.resize.variableHeight) {
+                       column.checkCellHeights();
+               }
+
+               document.body.removeEventListener("mouseup", mouseUp);
+               document.body.removeEventListener("mousemove", mouseMove);
+
+               handle.removeEventListener("touchmove", mouseMove);
+               handle.removeEventListener("touchend", mouseUp);
+
+               self.table.element.classList.remove("tabulator-block-select");
+
+               if (self.table.options.persistence && self.table.modExists("persistence", true) && self.table.modules.persistence.config.columns) {
+                       self.table.modules.persistence.save("columns");
+               }
+
+               self.table.options.columnResized.call(self.table, column.getComponent());
+       }
+
+       e.stopPropagation(); //prevent resize from interfereing with movable columns
+
+       //block editor from taking action while resizing is taking place
+       if (self.startColumn.modules.edit) {
+               self.startColumn.modules.edit.blocked = true;
+       }
+
+       self.startX = typeof e.screenX === "undefined" ? e.touches[0].screenX : e.screenX;
+       self.startWidth = column.getWidth();
+
+       document.body.addEventListener("mousemove", mouseMove);
+       document.body.addEventListener("mouseup", mouseUp);
+       handle.addEventListener("touchmove", mouseMove, { passive: true });
+       handle.addEventListener("touchend", mouseUp);
+};
+
+Tabulator.prototype.registerModule("resizeColumns", ResizeColumns);
\ No newline at end of file
diff --git a/website/js/vendor/tabulator/js/modules/resize_columns.min.js b/website/js/vendor/tabulator/js/modules/resize_columns.min.js
new file mode 100644 (file)
index 0000000..4987797
--- /dev/null
@@ -0,0 +1,2 @@
+/* Tabulator v4.8.3 (c) Oliver Folkerd */
+var ResizeColumns=function(e){this.table=e,this.startColumn=!1,this.startX=!1,this.startWidth=!1,this.handle=null,this.prevHandle=null};ResizeColumns.prototype.initializeColumn=function(e,t,i){var o=this,n=!1,s=this.table.options.resizableColumns;if("header"===e&&(n="textarea"==t.definition.formatter||t.definition.variableHeight,t.modules.resize={variableHeight:n}),!0===s||s==e){var a=document.createElement("div");a.className="tabulator-col-resize-handle";var l=document.createElement("div");l.className="tabulator-col-resize-handle prev",a.addEventListener("click",function(e){e.stopPropagation()});var r=function(e){var i=t.getLastColumn();i&&o._checkResizability(i)&&(o.startColumn=t,o._mouseDown(e,i,a))};a.addEventListener("mousedown",r),a.addEventListener("touchstart",r,{passive:!0}),a.addEventListener("dblclick",function(e){var i=t.getLastColumn();i&&o._checkResizability(i)&&(e.stopPropagation(),i.reinitializeWidth(!0))}),l.addEventListener("click",function(e){e.stopPropagation()});var d=function(e){var i,n,s;(i=t.getFirstColumn())&&(n=o.table.columnManager.findColumnIndex(i),(s=n>0&&o.table.columnManager.getColumnByIndex(n-1))&&o._checkResizability(s)&&(o.startColumn=t,o._mouseDown(e,s,l)))};l.addEventListener("mousedown",d),l.addEventListener("touchstart",d,{passive:!0}),l.addEventListener("dblclick",function(e){var i,n,s;(i=t.getFirstColumn())&&(n=o.table.columnManager.findColumnIndex(i),(s=n>0&&o.table.columnManager.getColumnByIndex(n-1))&&o._checkResizability(s)&&(e.stopPropagation(),s.reinitializeWidth(!0)))}),i.appendChild(a),i.appendChild(l)}},ResizeColumns.prototype._checkResizability=function(e){return void 0!==e.definition.resizable?e.definition.resizable:this.table.options.resizableColumns},ResizeColumns.prototype._mouseDown=function(e,t,i){function o(e){s.table.rtl?t.setWidth(s.startWidth-((void 0===e.screenX?e.touches[0].screenX:e.screenX)-s.startX)):t.setWidth(s.startWidth+((void 0===e.screenX?e.touches[0].screenX:e.screenX)-s.startX)),s.table.options.virtualDomHoz&&s.table.vdomHoz.reinitialize(!0),!s.table.browserSlow&&t.modules.resize&&t.modules.resize.variableHeight&&t.checkCellHeights()}function n(e){s.startColumn.modules.edit&&(s.startColumn.modules.edit.blocked=!1),s.table.browserSlow&&t.modules.resize&&t.modules.resize.variableHeight&&t.checkCellHeights(),document.body.removeEventListener("mouseup",n),document.body.removeEventListener("mousemove",o),i.removeEventListener("touchmove",o),i.removeEventListener("touchend",n),s.table.element.classList.remove("tabulator-block-select"),s.table.options.persistence&&s.table.modExists("persistence",!0)&&s.table.modules.persistence.config.columns&&s.table.modules.persistence.save("columns"),s.table.options.columnResized.call(s.table,t.getComponent())}var s=this;s.table.element.classList.add("tabulator-block-select"),e.stopPropagation(),s.startColumn.modules.edit&&(s.startColumn.modules.edit.blocked=!0),s.startX=void 0===e.screenX?e.touches[0].screenX:e.screenX,s.startWidth=t.getWidth(),document.body.addEventListener("mousemove",o),document.body.addEventListener("mouseup",n),i.addEventListener("touchmove",o,{passive:!0}),i.addEventListener("touchend",n)},Tabulator.prototype.registerModule("resizeColumns",ResizeColumns);
\ No newline at end of file
diff --git a/website/js/vendor/tabulator/js/modules/resize_rows.js b/website/js/vendor/tabulator/js/modules/resize_rows.js
new file mode 100644 (file)
index 0000000..d00b54a
--- /dev/null
@@ -0,0 +1,98 @@
+/* Tabulator v4.8.3 (c) Oliver Folkerd */
+
+var ResizeRows = function ResizeRows(table) {
+       this.table = table; //hold Tabulator object
+       this.startColumn = false;
+       this.startY = false;
+       this.startHeight = false;
+       this.handle = null;
+       this.prevHandle = null;
+};
+
+ResizeRows.prototype.initializeRow = function (row) {
+       var self = this,
+           rowEl = row.getElement();
+
+       var handle = document.createElement('div');
+       handle.className = "tabulator-row-resize-handle";
+
+       var prevHandle = document.createElement('div');
+       prevHandle.className = "tabulator-row-resize-handle prev";
+
+       handle.addEventListener("click", function (e) {
+               e.stopPropagation();
+       });
+
+       var handleDown = function handleDown(e) {
+               self.startRow = row;
+               self._mouseDown(e, row, handle);
+       };
+
+       handle.addEventListener("mousedown", handleDown);
+       handle.addEventListener("touchstart", handleDown, { passive: true });
+
+       prevHandle.addEventListener("click", function (e) {
+               e.stopPropagation();
+       });
+
+       var prevHandleDown = function prevHandleDown(e) {
+               var prevRow = self.table.rowManager.prevDisplayRow(row);
+
+               if (prevRow) {
+                       self.startRow = prevRow;
+                       self._mouseDown(e, prevRow, prevHandle);
+               }
+       };
+
+       prevHandle.addEventListener("mousedown", prevHandleDown);
+       prevHandle.addEventListener("touchstart", prevHandleDown, { passive: true });
+
+       rowEl.appendChild(handle);
+       rowEl.appendChild(prevHandle);
+};
+
+ResizeRows.prototype._mouseDown = function (e, row, handle) {
+       var self = this;
+
+       self.table.element.classList.add("tabulator-block-select");
+
+       function mouseMove(e) {
+               row.setHeight(self.startHeight + ((typeof e.screenY === "undefined" ? e.touches[0].screenY : e.screenY) - self.startY));
+       }
+
+       function mouseUp(e) {
+
+               // //block editor from taking action while resizing is taking place
+               // if(self.startColumn.modules.edit){
+               //      self.startColumn.modules.edit.blocked = false;
+               // }
+
+               document.body.removeEventListener("mouseup", mouseMove);
+               document.body.removeEventListener("mousemove", mouseMove);
+
+               handle.removeEventListener("touchmove", mouseMove);
+               handle.removeEventListener("touchend", mouseUp);
+
+               self.table.element.classList.remove("tabulator-block-select");
+
+               self.table.options.rowResized.call(this.table, row.getComponent());
+       }
+
+       e.stopPropagation(); //prevent resize from interfereing with movable columns
+
+       //block editor from taking action while resizing is taking place
+       // if(self.startColumn.modules.edit){
+       //      self.startColumn.modules.edit.blocked = true;
+       // }
+
+       self.startY = typeof e.screenY === "undefined" ? e.touches[0].screenY : e.screenY;
+       self.startHeight = row.getHeight();
+
+       document.body.addEventListener("mousemove", mouseMove);
+       document.body.addEventListener("mouseup", mouseUp);
+
+       handle.addEventListener("touchmove", mouseMove, { passive: true });
+       handle.addEventListener("touchend", mouseUp);
+};
+
+Tabulator.prototype.registerModule("resizeRows", ResizeRows);
\ No newline at end of file
diff --git a/website/js/vendor/tabulator/js/modules/resize_rows.min.js b/website/js/vendor/tabulator/js/modules/resize_rows.min.js
new file mode 100644 (file)
index 0000000..9167a11
--- /dev/null
@@ -0,0 +1,2 @@
+/* Tabulator v4.8.3 (c) Oliver Folkerd */
+var ResizeRows=function(e){this.table=e,this.startColumn=!1,this.startY=!1,this.startHeight=!1,this.handle=null,this.prevHandle=null};ResizeRows.prototype.initializeRow=function(e){var t=this,o=e.getElement(),s=document.createElement("div");s.className="tabulator-row-resize-handle";var n=document.createElement("div");n.className="tabulator-row-resize-handle prev",s.addEventListener("click",function(e){e.stopPropagation()});var a=function(o){t.startRow=e,t._mouseDown(o,e,s)};s.addEventListener("mousedown",a),s.addEventListener("touchstart",a,{passive:!0}),n.addEventListener("click",function(e){e.stopPropagation()});var r=function(o){var s=t.table.rowManager.prevDisplayRow(e);s&&(t.startRow=s,t._mouseDown(o,s,n))};n.addEventListener("mousedown",r),n.addEventListener("touchstart",r,{passive:!0}),o.appendChild(s),o.appendChild(n)},ResizeRows.prototype._mouseDown=function(e,t,o){function s(e){t.setHeight(a.startHeight+((void 0===e.screenY?e.touches[0].screenY:e.screenY)-a.startY))}function n(e){document.body.removeEventListener("mouseup",s),document.body.removeEventListener("mousemove",s),o.removeEventListener("touchmove",s),o.removeEventListener("touchend",n),a.table.element.classList.remove("tabulator-block-select"),a.table.options.rowResized.call(this.table,t.getComponent())}var a=this;a.table.element.classList.add("tabulator-block-select"),e.stopPropagation(),a.startY=void 0===e.screenY?e.touches[0].screenY:e.screenY,a.startHeight=t.getHeight(),document.body.addEventListener("mousemove",s),document.body.addEventListener("mouseup",n),o.addEventListener("touchmove",s,{passive:!0}),o.addEventListener("touchend",n)},Tabulator.prototype.registerModule("resizeRows",ResizeRows);
\ No newline at end of file
diff --git a/website/js/vendor/tabulator/js/modules/resize_table.js b/website/js/vendor/tabulator/js/modules/resize_table.js
new file mode 100644 (file)
index 0000000..9f796ca
--- /dev/null
@@ -0,0 +1,117 @@
+/* Tabulator v4.8.3 (c) Oliver Folkerd */
+
+var ResizeTable = function ResizeTable(table) {
+       this.table = table; //hold Tabulator object
+       this.binding = false;
+       this.observer = false;
+       this.containerObserver = false;
+
+       this.tableHeight = 0;
+       this.tableWidth = 0;
+       this.containerHeight = 0;
+       this.containerWidth = 0;
+
+       this.autoResize = false;
+};
+
+ResizeTable.prototype.initialize = function (row) {
+       var _this = this;
+
+       var table = this.table,
+           tableStyle;
+
+       this.tableHeight = table.element.clientHeight;
+       this.tableWidth = table.element.clientWidth;
+
+       if (table.element.parentNode) {
+               this.containerHeight = table.element.parentNode.clientHeight;
+               this.containerWidth = table.element.parentNode.clientWidth;
+       }
+
+       if (typeof ResizeObserver !== "undefined" && table.rowManager.getRenderMode() === "virtual") {
+
+               this.autoResize = true;
+
+               this.observer = new ResizeObserver(function (entry) {
+                       if (!table.browserMobile || table.browserMobile && !table.modules.edit.currentCell) {
+
+                               var nodeHeight = Math.floor(entry[0].contentRect.height);
+                               var nodeWidth = Math.floor(entry[0].contentRect.width);
+
+                               if (_this.tableHeight != nodeHeight || _this.tableWidth != nodeWidth) {
+                                       _this.tableHeight = nodeHeight;
+                                       _this.tableWidth = nodeWidth;
+
+                                       if (table.element.parentNode) {
+                                               _this.containerHeight = table.element.parentNode.clientHeight;
+                                               _this.containerWidth = table.element.parentNode.clientWidth;
+                                       }
+
+                                       if (table.options.virtualDomHoz) {
+                                               table.vdomHoz.reinitialize(true);
+                                       }
+
+                                       table.redraw();
+                               }
+                       }
+               });
+
+               this.observer.observe(table.element);
+
+               tableStyle = window.getComputedStyle(table.element);
+
+               if (this.table.element.parentNode && !this.table.rowManager.fixedHeight && (tableStyle.getPropertyValue("max-height") || tableStyle.getPropertyValue("min-height"))) {
+
+                       this.containerObserver = new ResizeObserver(function (entry) {
+                               if (!table.browserMobile || table.browserMobile && !table.modules.edit.currentCell) {
+
+                                       var nodeHeight = Math.floor(entry[0].contentRect.height);
+                                       var nodeWidth = Math.floor(entry[0].contentRect.width);
+
+                                       if (_this.containerHeight != nodeHeight || _this.containerWidth != nodeWidth) {
+                                               _this.containerHeight = nodeHeight;
+                                               _this.containerWidth = nodeWidth;
+                                               _this.tableHeight = table.element.clientHeight;
+                                               _this.tableWidth = table.element.clientWidth;
+                                       }
+
+                                       if (table.options.virtualDomHoz) {
+                                               table.vdomHoz.reinitialize(true);
+                                       }
+
+                                       table.redraw();
+                               }
+                       });
+
+                       this.containerObserver.observe(this.table.element.parentNode);
+               }
+       } else {
+               this.binding = function () {
+                       if (!table.browserMobile || table.browserMobile && !table.modules.edit.currentCell) {
+                               if (table.options.virtualDomHoz) {
+                                       table.vdomHoz.reinitialize(true);
+                               }
+
+                               table.redraw();
+                       }
+               };
+
+               window.addEventListener("resize", this.binding);
+       }
+};
+
+ResizeTable.prototype.clearBindings = function (row) {
+       if (this.binding) {
+               window.removeEventListener("resize", this.binding);
+       }
+
+       if (this.observer) {
+               this.observer.unobserve(this.table.element);
+       }
+
+       if (this.containerObserver) {
+               this.containerObserver.unobserve(this.table.element.parentNode);
+       }
+};
+
+Tabulator.prototype.registerModule("resizeTable", ResizeTable);
\ No newline at end of file
diff --git a/website/js/vendor/tabulator/js/modules/resize_table.min.js b/website/js/vendor/tabulator/js/modules/resize_table.min.js
new file mode 100644 (file)
index 0000000..3adeed9
--- /dev/null
@@ -0,0 +1,2 @@
+/* Tabulator v4.8.3 (c) Oliver Folkerd */
+var ResizeTable=function(e){this.table=e,this.binding=!1,this.observer=!1,this.containerObserver=!1,this.tableHeight=0,this.tableWidth=0,this.containerHeight=0,this.containerWidth=0,this.autoResize=!1};ResizeTable.prototype.initialize=function(e){var t,i=this,n=this.table;this.tableHeight=n.element.clientHeight,this.tableWidth=n.element.clientWidth,n.element.parentNode&&(this.containerHeight=n.element.parentNode.clientHeight,this.containerWidth=n.element.parentNode.clientWidth),"undefined"!=typeof ResizeObserver&&"virtual"===n.rowManager.getRenderMode()?(this.autoResize=!0,this.observer=new ResizeObserver(function(e){if(!n.browserMobile||n.browserMobile&&!n.modules.edit.currentCell){var t=Math.floor(e[0].contentRect.height),r=Math.floor(e[0].contentRect.width);i.tableHeight==t&&i.tableWidth==r||(i.tableHeight=t,i.tableWidth=r,n.element.parentNode&&(i.containerHeight=n.element.parentNode.clientHeight,i.containerWidth=n.element.parentNode.clientWidth),n.options.virtualDomHoz&&n.vdomHoz.reinitialize(!0),n.redraw())}}),this.observer.observe(n.element),t=window.getComputedStyle(n.element),this.table.element.parentNode&&!this.table.rowManager.fixedHeight&&(t.getPropertyValue("max-height")||t.getPropertyValue("min-height"))&&(this.containerObserver=new ResizeObserver(function(e){if(!n.browserMobile||n.browserMobile&&!n.modules.edit.currentCell){var t=Math.floor(e[0].contentRect.height),r=Math.floor(e[0].contentRect.width);i.containerHeight==t&&i.containerWidth==r||(i.containerHeight=t,i.containerWidth=r,i.tableHeight=n.element.clientHeight,i.tableWidth=n.element.clientWidth),n.options.virtualDomHoz&&n.vdomHoz.reinitialize(!0),n.redraw()}}),this.containerObserver.observe(this.table.element.parentNode))):(this.binding=function(){(!n.browserMobile||n.browserMobile&&!n.modules.edit.currentCell)&&(n.options.virtualDomHoz&&n.vdomHoz.reinitialize(!0),n.redraw())},window.addEventListener("resize",this.binding))},ResizeTable.prototype.clearBindings=function(e){this.binding&&window.removeEventListener("resize",this.binding),this.observer&&this.observer.unobserve(this.table.element),this.containerObserver&&this.containerObserver.unobserve(this.table.element.parentNode)},Tabulator.prototype.registerModule("resizeTable",ResizeTable);
\ No newline at end of file
diff --git a/website/js/vendor/tabulator/js/modules/responsive_layout.js b/website/js/vendor/tabulator/js/modules/responsive_layout.js
new file mode 100644 (file)
index 0000000..67fa6a3
--- /dev/null
@@ -0,0 +1,301 @@
+/* Tabulator v4.8.3 (c) Oliver Folkerd */
+
+var ResponsiveLayout = function ResponsiveLayout(table) {
+       this.table = table; //hold Tabulator object
+       this.columns = [];
+       this.hiddenColumns = [];
+       this.mode = "";
+       this.index = 0;
+       this.collapseFormatter = [];
+       this.collapseStartOpen = true;
+       this.collapseHandleColumn = false;
+};
+
+//generate resposive columns list
+ResponsiveLayout.prototype.initialize = function () {
+       var self = this,
+           columns = [];
+
+       this.mode = this.table.options.responsiveLayout;
+       this.collapseFormatter = this.table.options.responsiveLayoutCollapseFormatter || this.formatCollapsedData;
+       this.collapseStartOpen = this.table.options.responsiveLayoutCollapseStartOpen;
+       this.hiddenColumns = [];
+
+       //detemine level of responsivity for each column
+       this.table.columnManager.columnsByIndex.forEach(function (column, i) {
+               if (column.modules.responsive) {
+                       if (column.modules.responsive.order && column.modules.responsive.visible) {
+                               column.modules.responsive.index = i;
+                               columns.push(column);
+
+                               if (!column.visible && self.mode === "collapse") {
+                                       self.hiddenColumns.push(column);
+                               }
+                       }
+               }
+       });
+
+       //sort list by responsivity
+       columns = columns.reverse();
+       columns = columns.sort(function (a, b) {
+               var diff = b.modules.responsive.order - a.modules.responsive.order;
+               return diff || b.modules.responsive.index - a.modules.responsive.index;
+       });
+
+       this.columns = columns;
+
+       if (this.mode === "collapse") {
+               this.generateCollapsedContent();
+       }
+
+       //assign collapse column
+       for (var _iterator = this.table.columnManager.columnsByIndex, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {
+               var _ref;
+
+               if (_isArray) {
+                       if (_i >= _iterator.length) break;
+                       _ref = _iterator[_i++];
+               } else {
+                       _i = _iterator.next();
+                       if (_i.done) break;
+                       _ref = _i.value;
+               }
+
+               var col = _ref;
+
+               if (col.definition.formatter == "responsiveCollapse") {
+                       this.collapseHandleColumn = col;
+                       break;
+               }
+       }
+
+       if (this.collapseHandleColumn) {
+               if (this.hiddenColumns.length) {
+                       this.collapseHandleColumn.show();
+               } else {
+                       this.collapseHandleColumn.hide();
+               }
+       }
+};
+
+//define layout information
+ResponsiveLayout.prototype.initializeColumn = function (column) {
+       var def = column.getDefinition();
+
+       column.modules.responsive = { order: typeof def.responsive === "undefined" ? 1 : def.responsive, visible: def.visible === false ? false : true };
+};
+
+ResponsiveLayout.prototype.initializeRow = function (row) {
+       var el;
+
+       if (row.type !== "calc") {
+               el = document.createElement("div");
+               el.classList.add("tabulator-responsive-collapse");
+
+               row.modules.responsiveLayout = {
+                       element: el,
+                       open: this.collapseStartOpen
+               };
+
+               if (!this.collapseStartOpen) {
+                       el.style.display = 'none';
+               }
+       }
+};
+
+ResponsiveLayout.prototype.layoutRow = function (row) {
+       var rowEl = row.getElement();
+
+       if (row.modules.responsiveLayout) {
+               rowEl.appendChild(row.modules.responsiveLayout.element);
+               this.generateCollapsedRowContent(row);
+       }
+};
+
+//update column visibility
+ResponsiveLayout.prototype.updateColumnVisibility = function (column, visible) {
+       var index;
+       if (column.modules.responsive) {
+               column.modules.responsive.visible = visible;
+               this.initialize();
+       }
+};
+
+ResponsiveLayout.prototype.hideColumn = function (column) {
+       var colCount = this.hiddenColumns.length;
+
+       column.hide(false, true);
+
+       if (this.mode === "collapse") {
+               this.hiddenColumns.unshift(column);
+               this.generateCollapsedContent();
+
+               if (this.collapseHandleColumn && !colCount) {
+                       this.collapseHandleColumn.show();
+               }
+       }
+};
+
+ResponsiveLayout.prototype.showColumn = function (column) {
+       var index;
+
+       column.show(false, true);
+       //set column width to prevent calculation loops on uninitialized columns
+       column.setWidth(column.getWidth());
+
+       if (this.mode === "collapse") {
+               index = this.hiddenColumns.indexOf(column);
+
+               if (index > -1) {
+                       this.hiddenColumns.splice(index, 1);
+               }
+
+               this.generateCollapsedContent();
+
+               if (this.collapseHandleColumn && !this.hiddenColumns.length) {
+                       this.collapseHandleColumn.hide();
+               }
+       }
+};
+
+//redraw columns to fit space
+ResponsiveLayout.prototype.update = function () {
+       var self = this,
+           working = true;
+
+       while (working) {
+
+               var width = self.table.modules.layout.getMode() == "fitColumns" ? self.table.columnManager.getFlexBaseWidth() : self.table.columnManager.getWidth();
+
+               var diff = (self.table.options.headerVisible ? self.table.columnManager.element.clientWidth : self.table.element.clientWidth) - width;
+
+               if (diff < 0) {
+                       //table is too wide
+                       var column = self.columns[self.index];
+
+                       if (column) {
+                               self.hideColumn(column);
+                               self.index++;
+                       } else {
+                               working = false;
+                       }
+               } else {
+
+                       //table has spare space
+                       var _column = self.columns[self.index - 1];
+
+                       if (_column) {
+                               if (diff > 0) {
+                                       if (diff >= _column.getWidth()) {
+                                               self.showColumn(_column);
+                                               self.index--;
+                                       } else {
+                                               working = false;
+                                       }
+                               } else {
+                                       working = false;
+                               }
+                       } else {
+                               working = false;
+                       }
+               }
+
+               if (!self.table.rowManager.activeRowsCount) {
+                       self.table.rowManager.renderEmptyScroll();
+               }
+       }
+};
+
+ResponsiveLayout.prototype.generateCollapsedContent = function () {
+       var self = this,
+           rows = this.table.rowManager.getDisplayRows();
+
+       rows.forEach(function (row) {
+               self.generateCollapsedRowContent(row);
+       });
+};
+
+ResponsiveLayout.prototype.generateCollapsedRowContent = function (row) {
+       var el, contents;
+
+       if (row.modules.responsiveLayout) {
+               el = row.modules.responsiveLayout.element;
+
+               while (el.firstChild) {
+                       el.removeChild(el.firstChild);
+               }contents = this.collapseFormatter(this.generateCollapsedRowData(row));
+               if (contents) {
+                       el.appendChild(contents);
+               }
+       }
+};
+
+ResponsiveLayout.prototype.generateCollapsedRowData = function (row) {
+       var self = this,
+           data = row.getData(),
+           output = [],
+           mockCellComponent;
+
+       this.hiddenColumns.forEach(function (column) {
+               var value = column.getFieldValue(data);
+
+               if (column.definition.title && column.field) {
+                       if (column.modules.format && self.table.options.responsiveLayoutCollapseUseFormatters) {
+
+                               mockCellComponent = {
+                                       value: false,
+                                       data: {},
+                                       getValue: function getValue() {
+                                               return value;
+                                       },
+                                       getData: function getData() {
+                                               return data;
+                                       },
+                                       getElement: function getElement() {
+                                               return document.createElement("div");
+                                       },
+                                       getRow: function getRow() {
+                                               return row.getComponent();
+                                       },
+                                       getColumn: function getColumn() {
+                                               return column.getComponent();
+                                       }
+                               };
+
+                               output.push({
+                                       title: column.definition.title,
+                                       value: column.modules.format.formatter.call(self.table.modules.format, mockCellComponent, column.modules.format.params)
+                               });
+                       } else {
+                               output.push({
+                                       title: column.definition.title,
+                                       value: value
+                               });
+                       }
+               }
+       });
+
+       return output;
+};
+
+ResponsiveLayout.prototype.formatCollapsedData = function (data) {
+       var list = document.createElement("table"),
+           listContents = "";
+
+       data.forEach(function (item) {
+               var div = document.createElement("div");
+
+               if (item.value instanceof Node) {
+                       div.appendChild(item.value);
+                       item.value = div.innerHTML;
+               }
+
+               listContents += "<tr><td><strong>" + item.title + "</strong></td><td>" + item.value + "</td></tr>";
+       });
+
+       list.innerHTML = listContents;
+
+       return Object.keys(data).length ? list : "";
+};
+
+Tabulator.prototype.registerModule("responsiveLayout", ResponsiveLayout);
\ No newline at end of file
diff --git a/website/js/vendor/tabulator/js/modules/responsive_layout.min.js b/website/js/vendor/tabulator/js/modules/responsive_layout.min.js
new file mode 100644 (file)
index 0000000..661f21a
--- /dev/null
@@ -0,0 +1,2 @@
+/* Tabulator v4.8.3 (c) Oliver Folkerd */
+var ResponsiveLayout=function(e){this.table=e,this.columns=[],this.hiddenColumns=[],this.mode="",this.index=0,this.collapseFormatter=[],this.collapseStartOpen=!0,this.collapseHandleColumn=!1};ResponsiveLayout.prototype.initialize=function(){var e=this,t=[];this.mode=this.table.options.responsiveLayout,this.collapseFormatter=this.table.options.responsiveLayoutCollapseFormatter||this.formatCollapsedData,this.collapseStartOpen=this.table.options.responsiveLayoutCollapseStartOpen,this.hiddenColumns=[],this.table.columnManager.columnsByIndex.forEach(function(o,n){o.modules.responsive&&o.modules.responsive.order&&o.modules.responsive.visible&&(o.modules.responsive.index=n,t.push(o),o.visible||"collapse"!==e.mode||e.hiddenColumns.push(o))}),t=t.reverse(),t=t.sort(function(e,t){return t.modules.responsive.order-e.modules.responsive.order||t.modules.responsive.index-e.modules.responsive.index}),this.columns=t,"collapse"===this.mode&&this.generateCollapsedContent();for(var o=this.table.columnManager.columnsByIndex,n=Array.isArray(o),s=0,o=n?o:o[Symbol.iterator]();;){var i;if(n){if(s>=o.length)break;i=o[s++]}else{if(s=o.next(),s.done)break;i=s.value}var l=i;if("responsiveCollapse"==l.definition.formatter){this.collapseHandleColumn=l;break}}this.collapseHandleColumn&&(this.hiddenColumns.length?this.collapseHandleColumn.show():this.collapseHandleColumn.hide())},ResponsiveLayout.prototype.initializeColumn=function(e){var t=e.getDefinition();e.modules.responsive={order:void 0===t.responsive?1:t.responsive,visible:!1!==t.visible}},ResponsiveLayout.prototype.initializeRow=function(e){var t;"calc"!==e.type&&(t=document.createElement("div"),t.classList.add("tabulator-responsive-collapse"),e.modules.responsiveLayout={element:t,open:this.collapseStartOpen},this.collapseStartOpen||(t.style.display="none"))},ResponsiveLayout.prototype.layoutRow=function(e){var t=e.getElement();e.modules.responsiveLayout&&(t.appendChild(e.modules.responsiveLayout.element),this.generateCollapsedRowContent(e))},ResponsiveLayout.prototype.updateColumnVisibility=function(e,t){e.modules.responsive&&(e.modules.responsive.visible=t,this.initialize())},ResponsiveLayout.prototype.hideColumn=function(e){var t=this.hiddenColumns.length;e.hide(!1,!0),"collapse"===this.mode&&(this.hiddenColumns.unshift(e),this.generateCollapsedContent(),this.collapseHandleColumn&&!t&&this.collapseHandleColumn.show())},ResponsiveLayout.prototype.showColumn=function(e){var t;e.show(!1,!0),e.setWidth(e.getWidth()),"collapse"===this.mode&&(t=this.hiddenColumns.indexOf(e),t>-1&&this.hiddenColumns.splice(t,1),this.generateCollapsedContent(),this.collapseHandleColumn&&!this.hiddenColumns.length&&this.collapseHandleColumn.hide())},ResponsiveLayout.prototype.update=function(){for(var e=this,t=!0;t;){var o="fitColumns"==e.table.modules.layout.getMode()?e.table.columnManager.getFlexBaseWidth():e.table.columnManager.getWidth(),n=(e.table.options.headerVisible?e.table.columnManager.element.clientWidth:e.table.element.clientWidth)-o;if(n<0){var s=e.columns[e.index];s?(e.hideColumn(s),e.index++):t=!1}else{var i=e.columns[e.index-1];i&&n>0&&n>=i.getWidth()?(e.showColumn(i),e.index--):t=!1}e.table.rowManager.activeRowsCount||e.table.rowManager.renderEmptyScroll()}},ResponsiveLayout.prototype.generateCollapsedContent=function(){var e=this;this.table.rowManager.getDisplayRows().forEach(function(t){e.generateCollapsedRowContent(t)})},ResponsiveLayout.prototype.generateCollapsedRowContent=function(e){var t,o;if(e.modules.responsiveLayout){for(t=e.modules.responsiveLayout.element;t.firstChild;)t.removeChild(t.firstChild);o=this.collapseFormatter(this.generateCollapsedRowData(e)),o&&t.appendChild(o)}},ResponsiveLayout.prototype.generateCollapsedRowData=function(e){var t,o=this,n=e.getData(),s=[];return this.hiddenColumns.forEach(function(i){var l=i.getFieldValue(n);i.definition.title&&i.field&&(i.modules.format&&o.table.options.responsiveLayoutCollapseUseFormatters?(t={value:!1,data:{},getValue:function(){return l},getData:function(){return n},getElement:function(){return document.createElement("div")},getRow:function(){return e.getComponent()},getColumn:function(){return i.getComponent()}},s.push({title:i.definition.title,value:i.modules.format.formatter.call(o.table.modules.format,t,i.modules.format.params)})):s.push({title:i.definition.title,value:l}))}),s},ResponsiveLayout.prototype.formatCollapsedData=function(e){var t=document.createElement("table"),o="";return e.forEach(function(e){var t=document.createElement("div");e.value instanceof Node&&(t.appendChild(e.value),e.value=t.innerHTML),o+="<tr><td><strong>"+e.title+"</strong></td><td>"+e.value+"</td></tr>"}),t.innerHTML=o,Object.keys(e).length?t:""},Tabulator.prototype.registerModule("responsiveLayout",ResponsiveLayout);
\ No newline at end of file
diff --git a/website/js/vendor/tabulator/js/modules/select_row.js b/website/js/vendor/tabulator/js/modules/select_row.js
new file mode 100644 (file)
index 0000000..8ddf0b8
--- /dev/null
@@ -0,0 +1,417 @@
+var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
+
+/* Tabulator v4.8.3 (c) Oliver Folkerd */
+
+var SelectRow = function SelectRow(table) {
+       this.table = table; //hold Tabulator object
+       this.selecting = false; //flag selecting in progress
+       this.lastClickedRow = false; //last clicked row
+       this.selectPrev = []; //hold previously selected element for drag drop selection
+       this.selectedRows = []; //hold selected rows
+       this.headerCheckboxElement = null; // hold header select element
+};
+
+SelectRow.prototype.clearSelectionData = function (silent) {
+       this.selecting = false;
+       this.lastClickedRow = false;
+       this.selectPrev = [];
+       this.selectedRows = [];
+
+       if (!silent) {
+               this._rowSelectionChanged();
+       }
+};
+
+SelectRow.prototype.initializeRow = function (row) {
+       var self = this,
+           element = row.getElement();
+
+       // trigger end of row selection
+       var endSelect = function endSelect() {
+
+               setTimeout(function () {
+                       self.selecting = false;
+               }, 50);
+
+               document.body.removeEventListener("mouseup", endSelect);
+       };
+
+       row.modules.select = { selected: false };
+
+       //set row selection class
+       if (self.table.options.selectableCheck.call(this.table, row.getComponent())) {
+               element.classList.add("tabulator-selectable");
+               element.classList.remove("tabulator-unselectable");
+
+               if (self.table.options.selectable && self.table.options.selectable != "highlight") {
+                       if (self.table.options.selectableRangeMode === "click") {
+                               element.addEventListener("click", function (e) {
+                                       if (e.shiftKey) {
+                                               self.table._clearSelection();
+                                               self.lastClickedRow = self.lastClickedRow || row;
+
+                                               var lastClickedRowIdx = self.table.rowManager.getDisplayRowIndex(self.lastClickedRow);
+                                               var rowIdx = self.table.rowManager.getDisplayRowIndex(row);
+
+                                               var fromRowIdx = lastClickedRowIdx <= rowIdx ? lastClickedRowIdx : rowIdx;
+                                               var toRowIdx = lastClickedRowIdx >= rowIdx ? lastClickedRowIdx : rowIdx;
+
+                                               var rows = self.table.rowManager.getDisplayRows().slice(0);
+                                               var toggledRows = rows.splice(fromRowIdx, toRowIdx - fromRowIdx + 1);
+
+                                               if (e.ctrlKey || e.metaKey) {
+                                                       toggledRows.forEach(function (toggledRow) {
+                                                               if (toggledRow !== self.lastClickedRow) {
+
+                                                                       if (self.table.options.selectable !== true && !self.isRowSelected(row)) {
+                                                                               if (self.selectedRows.length < self.table.options.selectable) {
+                                                                                       self.toggleRow(toggledRow);
+                                                                               }
+                                                                       } else {
+                                                                               self.toggleRow(toggledRow);
+                                                                       }
+                                                               }
+                                                       });
+                                                       self.lastClickedRow = row;
+                                               } else {
+                                                       self.deselectRows(undefined, true);
+
+                                                       if (self.table.options.selectable !== true) {
+                                                               if (toggledRows.length > self.table.options.selectable) {
+                                                                       toggledRows = toggledRows.slice(0, self.table.options.selectable);
+                                                               }
+                                                       }
+
+                                                       self.selectRows(toggledRows);
+                                               }
+                                               self.table._clearSelection();
+                                       } else if (e.ctrlKey || e.metaKey) {
+                                               self.toggleRow(row);
+                                               self.lastClickedRow = row;
+                                       } else {
+                                               self.deselectRows(undefined, true);
+                                               self.selectRows(row);
+                                               self.lastClickedRow = row;
+                                       }
+                               });
+                       } else {
+                               element.addEventListener("click", function (e) {
+                                       if (!self.table.modExists("edit") || !self.table.modules.edit.getCurrentCell()) {
+                                               self.table._clearSelection();
+                                       }
+
+                                       if (!self.selecting) {
+                                               self.toggleRow(row);
+                                       }
+                               });
+
+                               element.addEventListener("mousedown", function (e) {
+                                       if (e.shiftKey) {
+                                               self.table._clearSelection();
+
+                                               self.selecting = true;
+
+                                               self.selectPrev = [];
+
+                                               document.body.addEventListener("mouseup", endSelect);
+                                               document.body.addEventListener("keyup", endSelect);
+
+                                               self.toggleRow(row);
+
+                                               return false;
+                                       }
+                               });
+
+                               element.addEventListener("mouseenter", function (e) {
+                                       if (self.selecting) {
+                                               self.table._clearSelection();
+                                               self.toggleRow(row);
+
+                                               if (self.selectPrev[1] == row) {
+                                                       self.toggleRow(self.selectPrev[0]);
+                                               }
+                                       }
+                               });
+
+                               element.addEventListener("mouseout", function (e) {
+                                       if (self.selecting) {
+                                               self.table._clearSelection();
+                                               self.selectPrev.unshift(row);
+                                       }
+                               });
+                       }
+               }
+       } else {
+               element.classList.add("tabulator-unselectable");
+               element.classList.remove("tabulator-selectable");
+       }
+};
+
+//toggle row selection
+SelectRow.prototype.toggleRow = function (row) {
+       if (this.table.options.selectableCheck.call(this.table, row.getComponent())) {
+               if (row.modules.select && row.modules.select.selected) {
+                       this._deselectRow(row);
+               } else {
+                       this._selectRow(row);
+               }
+       }
+};
+
+//select a number of rows
+SelectRow.prototype.selectRows = function (rows) {
+       var _this = this;
+
+       var rowMatch;
+
+       switch (typeof rows === "undefined" ? "undefined" : _typeof(rows)) {
+               case "undefined":
+                       this.table.rowManager.rows.forEach(function (row) {
+                               _this._selectRow(row, true, true);
+                       });
+
+                       this._rowSelectionChanged();
+                       break;
+
+               case "string":
+
+                       rowMatch = this.table.rowManager.findRow(rows);
+
+                       if (rowMatch) {
+                               this._selectRow(rowMatch, true, true);
+                       } else {
+                               this.table.rowManager.getRows(rows).forEach(function (row) {
+                                       _this._selectRow(row, true, true);
+                               });
+                       }
+
+                       this._rowSelectionChanged();
+                       break;
+
+               default:
+                       if (Array.isArray(rows)) {
+                               rows.forEach(function (row) {
+                                       _this._selectRow(row, true, true);
+                               });
+
+                               this._rowSelectionChanged();
+                       } else {
+                               this._selectRow(rows, false, true);
+                       }
+                       break;
+       }
+};
+
+//select an individual row
+SelectRow.prototype._selectRow = function (rowInfo, silent, force) {
+       var index;
+
+       //handle max row count
+       if (!isNaN(this.table.options.selectable) && this.table.options.selectable !== true && !force) {
+               if (this.selectedRows.length >= this.table.options.selectable) {
+                       if (this.table.options.selectableRollingSelection) {
+                               this._deselectRow(this.selectedRows[0]);
+                       } else {
+                               return false;
+                       }
+               }
+       }
+
+       var row = this.table.rowManager.findRow(rowInfo);
+
+       if (row) {
+               if (this.selectedRows.indexOf(row) == -1) {
+                       if (!row.modules.select) {
+                               row.modules.select = {};
+                       }
+
+                       row.modules.select.selected = true;
+                       if (row.modules.select.checkboxEl) {
+                               row.modules.select.checkboxEl.checked = true;
+                       }
+                       row.getElement().classList.add("tabulator-selected");
+
+                       this.selectedRows.push(row);
+
+                       if (this.table.options.dataTreeSelectPropagate) {
+                               this.childRowSelection(row, true);
+                       }
+
+                       if (!silent) {
+                               this.table.options.rowSelected.call(this.table, row.getComponent());
+                       }
+
+                       this._rowSelectionChanged(silent);
+               }
+       } else {
+               if (!silent) {
+                       console.warn("Selection Error - No such row found, ignoring selection:" + rowInfo);
+               }
+       }
+};
+
+SelectRow.prototype.isRowSelected = function (row) {
+       return this.selectedRows.indexOf(row) !== -1;
+};
+
+//deselect a number of rows
+SelectRow.prototype.deselectRows = function (rows, silent) {
+       var self = this,
+           rowCount;
+
+       if (typeof rows == "undefined") {
+
+               rowCount = self.selectedRows.length;
+
+               for (var i = 0; i < rowCount; i++) {
+                       self._deselectRow(self.selectedRows[0], true);
+               }
+
+               self._rowSelectionChanged(silent);
+       } else {
+               if (Array.isArray(rows)) {
+                       rows.forEach(function (row) {
+                               self._deselectRow(row, true);
+                       });
+
+                       self._rowSelectionChanged(silent);
+               } else {
+                       self._deselectRow(rows, silent);
+               }
+       }
+};
+
+//deselect an individual row
+SelectRow.prototype._deselectRow = function (rowInfo, silent) {
+       var self = this,
+           row = self.table.rowManager.findRow(rowInfo),
+           index;
+
+       if (row) {
+               index = self.selectedRows.findIndex(function (selectedRow) {
+                       return selectedRow == row;
+               });
+
+               if (index > -1) {
+
+                       if (!row.modules.select) {
+                               row.modules.select = {};
+                       }
+
+                       row.modules.select.selected = false;
+                       if (row.modules.select.checkboxEl) {
+                               row.modules.select.checkboxEl.checked = false;
+                       }
+                       row.getElement().classList.remove("tabulator-selected");
+                       self.selectedRows.splice(index, 1);
+
+                       if (this.table.options.dataTreeSelectPropagate) {
+                               this.childRowSelection(row, false);
+                       }
+
+                       if (!silent) {
+                               self.table.options.rowDeselected.call(this.table, row.getComponent());
+                       }
+
+                       self._rowSelectionChanged(silent);
+               }
+       } else {
+               if (!silent) {
+                       console.warn("Deselection Error - No such row found, ignoring selection:" + rowInfo);
+               }
+       }
+};
+
+SelectRow.prototype.getSelectedData = function () {
+       var data = [];
+
+       this.selectedRows.forEach(function (row) {
+               data.push(row.getData());
+       });
+
+       return data;
+};
+
+SelectRow.prototype.getSelectedRows = function () {
+
+       var rows = [];
+
+       this.selectedRows.forEach(function (row) {
+               rows.push(row.getComponent());
+       });
+
+       return rows;
+};
+
+SelectRow.prototype._rowSelectionChanged = function (silent) {
+       if (this.headerCheckboxElement) {
+               if (this.selectedRows.length === 0) {
+                       this.headerCheckboxElement.checked = false;
+                       this.headerCheckboxElement.indeterminate = false;
+               } else if (this.table.rowManager.rows.length === this.selectedRows.length) {
+                       this.headerCheckboxElement.checked = true;
+                       this.headerCheckboxElement.indeterminate = false;
+               } else {
+                       this.headerCheckboxElement.indeterminate = true;
+                       this.headerCheckboxElement.checked = false;
+               }
+       }
+
+       if (!silent) {
+               this.table.options.rowSelectionChanged.call(this.table, this.getSelectedData(), this.getSelectedRows());
+       }
+};
+
+SelectRow.prototype.registerRowSelectCheckbox = function (row, element) {
+       if (!row._row.modules.select) {
+               row._row.modules.select = {};
+       }
+
+       row._row.modules.select.checkboxEl = element;
+};
+
+SelectRow.prototype.registerHeaderSelectCheckbox = function (element) {
+       this.headerCheckboxElement = element;
+};
+
+SelectRow.prototype.childRowSelection = function (row, select) {
+       var children = this.table.modules.dataTree.getChildren(row);
+
+       if (select) {
+               for (var _iterator = children, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {
+                       var _ref;
+
+                       if (_isArray) {
+                               if (_i >= _iterator.length) break;
+                               _ref = _iterator[_i++];
+                       } else {
+                               _i = _iterator.next();
+                               if (_i.done) break;
+                               _ref = _i.value;
+                       }
+
+                       var child = _ref;
+
+                       this._selectRow(child, true);
+               }
+       } else {
+               for (var _iterator2 = children, _isArray2 = Array.isArray(_iterator2), _i2 = 0, _iterator2 = _isArray2 ? _iterator2 : _iterator2[Symbol.iterator]();;) {
+                       var _ref2;
+
+                       if (_isArray2) {
+                               if (_i2 >= _iterator2.length) break;
+                               _ref2 = _iterator2[_i2++];
+                       } else {
+                               _i2 = _iterator2.next();
+                               if (_i2.done) break;
+                               _ref2 = _i2.value;
+                       }
+
+                       var _child = _ref2;
+
+                       this._deselectRow(_child, true);
+               }
+       }
+};
+
+Tabulator.prototype.registerModule("selectRow", SelectRow);
\ No newline at end of file
diff --git a/website/js/vendor/tabulator/js/modules/select_row.min.js b/website/js/vendor/tabulator/js/modules/select_row.min.js
new file mode 100644 (file)
index 0000000..9964b56
--- /dev/null
@@ -0,0 +1,2 @@
+/* Tabulator v4.8.3 (c) Oliver Folkerd */
+var _typeof="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},SelectRow=function(e){this.table=e,this.selecting=!1,this.lastClickedRow=!1,this.selectPrev=[],this.selectedRows=[],this.headerCheckboxElement=null};SelectRow.prototype.clearSelectionData=function(e){this.selecting=!1,this.lastClickedRow=!1,this.selectPrev=[],this.selectedRows=[],e||this._rowSelectionChanged()},SelectRow.prototype.initializeRow=function(e){var t=this,o=e.getElement(),l=function e(){setTimeout(function(){t.selecting=!1},50),document.body.removeEventListener("mouseup",e)};e.modules.select={selected:!1},t.table.options.selectableCheck.call(this.table,e.getComponent())?(o.classList.add("tabulator-selectable"),o.classList.remove("tabulator-unselectable"),t.table.options.selectable&&"highlight"!=t.table.options.selectable&&("click"===t.table.options.selectableRangeMode?o.addEventListener("click",function(o){if(o.shiftKey){t.table._clearSelection(),t.lastClickedRow=t.lastClickedRow||e;var l=t.table.rowManager.getDisplayRowIndex(t.lastClickedRow),s=t.table.rowManager.getDisplayRowIndex(e),c=l<=s?l:s,i=l>=s?l:s,n=t.table.rowManager.getDisplayRows().slice(0),a=n.splice(c,i-c+1);o.ctrlKey||o.metaKey?(a.forEach(function(o){o!==t.lastClickedRow&&(!0===t.table.options.selectable||t.isRowSelected(e)?t.toggleRow(o):t.selectedRows.length<t.table.options.selectable&&t.toggleRow(o))}),t.lastClickedRow=e):(t.deselectRows(void 0,!0),!0!==t.table.options.selectable&&a.length>t.table.options.selectable&&(a=a.slice(0,t.table.options.selectable)),t.selectRows(a)),t.table._clearSelection()}else o.ctrlKey||o.metaKey?(t.toggleRow(e),t.lastClickedRow=e):(t.deselectRows(void 0,!0),t.selectRows(e),t.lastClickedRow=e)}):(o.addEventListener("click",function(o){t.table.modExists("edit")&&t.table.modules.edit.getCurrentCell()||t.table._clearSelection(),t.selecting||t.toggleRow(e)}),o.addEventListener("mousedown",function(o){if(o.shiftKey)return t.table._clearSelection(),t.selecting=!0,t.selectPrev=[],document.body.addEventListener("mouseup",l),document.body.addEventListener("keyup",l),t.toggleRow(e),!1}),o.addEventListener("mouseenter",function(o){t.selecting&&(t.table._clearSelection(),t.toggleRow(e),t.selectPrev[1]==e&&t.toggleRow(t.selectPrev[0]))}),o.addEventListener("mouseout",function(o){t.selecting&&(t.table._clearSelection(),t.selectPrev.unshift(e))})))):(o.classList.add("tabulator-unselectable"),o.classList.remove("tabulator-selectable"))},SelectRow.prototype.toggleRow=function(e){this.table.options.selectableCheck.call(this.table,e.getComponent())&&(e.modules.select&&e.modules.select.selected?this._deselectRow(e):this._selectRow(e))},SelectRow.prototype.selectRows=function(e){var t,o=this;switch(void 0===e?"undefined":_typeof(e)){case"undefined":this.table.rowManager.rows.forEach(function(e){o._selectRow(e,!0,!0)}),this._rowSelectionChanged();break;case"string":t=this.table.rowManager.findRow(e),t?this._selectRow(t,!0,!0):this.table.rowManager.getRows(e).forEach(function(e){o._selectRow(e,!0,!0)}),this._rowSelectionChanged();break;default:Array.isArray(e)?(e.forEach(function(e){o._selectRow(e,!0,!0)}),this._rowSelectionChanged()):this._selectRow(e,!1,!0)}},SelectRow.prototype._selectRow=function(e,t,o){if(!isNaN(this.table.options.selectable)&&!0!==this.table.options.selectable&&!o&&this.selectedRows.length>=this.table.options.selectable){if(!this.table.options.selectableRollingSelection)return!1;this._deselectRow(this.selectedRows[0])}var l=this.table.rowManager.findRow(e);l?-1==this.selectedRows.indexOf(l)&&(l.modules.select||(l.modules.select={}),l.modules.select.selected=!0,l.modules.select.checkboxEl&&(l.modules.select.checkboxEl.checked=!0),l.getElement().classList.add("tabulator-selected"),this.selectedRows.push(l),this.table.options.dataTreeSelectPropagate&&this.childRowSelection(l,!0),t||this.table.options.rowSelected.call(this.table,l.getComponent()),this._rowSelectionChanged(t)):t||console.warn("Selection Error - No such row found, ignoring selection:"+e)},SelectRow.prototype.isRowSelected=function(e){return-1!==this.selectedRows.indexOf(e)},SelectRow.prototype.deselectRows=function(e,t){var o,l=this;if(void 0===e){o=l.selectedRows.length;for(var s=0;s<o;s++)l._deselectRow(l.selectedRows[0],!0);l._rowSelectionChanged(t)}else Array.isArray(e)?(e.forEach(function(e){l._deselectRow(e,!0)}),l._rowSelectionChanged(t)):l._deselectRow(e,t)},SelectRow.prototype._deselectRow=function(e,t){var o,l=this,s=l.table.rowManager.findRow(e);s?(o=l.selectedRows.findIndex(function(e){return e==s}))>-1&&(s.modules.select||(s.modules.select={}),s.modules.select.selected=!1,s.modules.select.checkboxEl&&(s.modules.select.checkboxEl.checked=!1),s.getElement().classList.remove("tabulator-selected"),l.selectedRows.splice(o,1),this.table.options.dataTreeSelectPropagate&&this.childRowSelection(s,!1),t||l.table.options.rowDeselected.call(this.table,s.getComponent()),l._rowSelectionChanged(t)):t||console.warn("Deselection Error - No such row found, ignoring selection:"+e)},SelectRow.prototype.getSelectedData=function(){var e=[];return this.selectedRows.forEach(function(t){e.push(t.getData())}),e},SelectRow.prototype.getSelectedRows=function(){var e=[];return this.selectedRows.forEach(function(t){e.push(t.getComponent())}),e},SelectRow.prototype._rowSelectionChanged=function(e){this.headerCheckboxElement&&(0===this.selectedRows.length?(this.headerCheckboxElement.checked=!1,this.headerCheckboxElement.indeterminate=!1):this.table.rowManager.rows.length===this.selectedRows.length?(this.headerCheckboxElement.checked=!0,this.headerCheckboxElement.indeterminate=!1):(this.headerCheckboxElement.indeterminate=!0,this.headerCheckboxElement.checked=!1)),e||this.table.options.rowSelectionChanged.call(this.table,this.getSelectedData(),this.getSelectedRows())},SelectRow.prototype.registerRowSelectCheckbox=function(e,t){e._row.modules.select||(e._row.modules.select={}),e._row.modules.select.checkboxEl=t},SelectRow.prototype.registerHeaderSelectCheckbox=function(e){this.headerCheckboxElement=e},SelectRow.prototype.childRowSelection=function(e,t){var o=this.table.modules.dataTree.getChildren(e);if(t)for(var l=o,s=Array.isArray(l),c=0,l=s?l:l[Symbol.iterator]();;){var i;if(s){if(c>=l.length)break;i=l[c++]}else{if(c=l.next(),c.done)break;i=c.value}var n=i;this._selectRow(n,!0)}else for(var a=o,r=Array.isArray(a),d=0,a=r?a:a[Symbol.iterator]();;){var h;if(r){if(d>=a.length)break;h=a[d++]}else{if(d=a.next(),d.done)break;h=d.value}var w=h;this._deselectRow(w,!0)}},Tabulator.prototype.registerModule("selectRow",SelectRow);
\ No newline at end of file
diff --git a/website/js/vendor/tabulator/js/modules/sort.js b/website/js/vendor/tabulator/js/modules/sort.js
new file mode 100644 (file)
index 0000000..beba8fa
--- /dev/null
@@ -0,0 +1,580 @@
+var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
+
+/* Tabulator v4.8.3 (c) Oliver Folkerd */
+
+var Sort = function Sort(table) {
+       this.table = table; //hold Tabulator object
+       this.sortList = []; //holder current sort
+       this.changed = false; //has the sort changed since last render
+};
+
+//initialize column header for sorting
+Sort.prototype.initializeColumn = function (column, content) {
+       var self = this,
+           sorter = false,
+           colEl,
+           arrowEl;
+
+       switch (_typeof(column.definition.sorter)) {
+               case "string":
+                       if (self.sorters[column.definition.sorter]) {
+                               sorter = self.sorters[column.definition.sorter];
+                       } else {
+                               console.warn("Sort Error - No such sorter found: ", column.definition.sorter);
+                       }
+                       break;
+
+               case "function":
+                       sorter = column.definition.sorter;
+                       break;
+       }
+
+       column.modules.sort = {
+               sorter: sorter, dir: "none",
+               params: column.definition.sorterParams || {},
+               startingDir: column.definition.headerSortStartingDir || "asc",
+               tristate: typeof column.definition.headerSortTristate !== "undefined" ? column.definition.headerSortTristate : this.table.options.headerSortTristate
+       };
+
+       if (typeof column.definition.headerSort === "undefined" ? this.table.options.headerSort !== false : column.definition.headerSort !== false) {
+
+               colEl = column.getElement();
+
+               colEl.classList.add("tabulator-sortable");
+
+               arrowEl = document.createElement("div");
+               arrowEl.classList.add("tabulator-col-sorter");
+
+               if (_typeof(this.table.options.headerSortElement) == "object") {
+                       arrowEl.appendChild(this.table.options.headerSortElement);
+               } else {
+                       arrowEl.innerHTML = this.table.options.headerSortElement;
+               }
+
+               //create sorter arrow
+               content.appendChild(arrowEl);
+
+               column.modules.sort.element = arrowEl;
+
+               //sort on click
+               colEl.addEventListener("click", function (e) {
+                       var dir = "",
+                           sorters = [],
+                           match = false;
+
+                       if (column.modules.sort) {
+                               if (column.modules.sort.tristate) {
+                                       if (column.modules.sort.dir == "none") {
+                                               dir = column.modules.sort.startingDir;
+                                       } else {
+                                               if (column.modules.sort.dir == column.modules.sort.startingDir) {
+                                                       dir = column.modules.sort.dir == "asc" ? "desc" : "asc";
+                                               } else {
+                                                       dir = "none";
+                                               }
+                                       }
+                               } else {
+                                       switch (column.modules.sort.dir) {
+                                               case "asc":
+                                                       dir = "desc";
+                                                       break;
+
+                                               case "desc":
+                                                       dir = "asc";
+                                                       break;
+
+                                               default:
+                                                       dir = column.modules.sort.startingDir;
+                                       }
+                               }
+
+                               if (self.table.options.columnHeaderSortMulti && (e.shiftKey || e.ctrlKey)) {
+                                       sorters = self.getSort();
+
+                                       match = sorters.findIndex(function (sorter) {
+                                               return sorter.field === column.getField();
+                                       });
+
+                                       if (match > -1) {
+                                               sorters[match].dir = dir;
+
+                                               if (match != sorters.length - 1) {
+                                                       match = sorters.splice(match, 1)[0];
+                                                       if (dir != "none") {
+                                                               sorters.push(match);
+                                                       }
+                                               }
+                                       } else {
+                                               if (dir != "none") {
+                                                       sorters.push({ column: column, dir: dir });
+                                               }
+                                       }
+
+                                       //add to existing sort
+                                       self.setSort(sorters);
+                               } else {
+                                       if (dir == "none") {
+                                               self.clear();
+                                       } else {
+                                               //sort by column only
+                                               self.setSort(column, dir);
+                                       }
+                               }
+
+                               self.table.rowManager.sorterRefresh(!self.sortList.length);
+                       }
+               });
+       }
+};
+
+//check if the sorters have changed since last use
+Sort.prototype.hasChanged = function () {
+       var changed = this.changed;
+       this.changed = false;
+       return changed;
+};
+
+//return current sorters
+Sort.prototype.getSort = function () {
+       var self = this,
+           sorters = [];
+
+       self.sortList.forEach(function (item) {
+               if (item.column) {
+                       sorters.push({ column: item.column.getComponent(), field: item.column.getField(), dir: item.dir });
+               }
+       });
+
+       return sorters;
+};
+
+//change sort list and trigger sort
+Sort.prototype.setSort = function (sortList, dir) {
+       var self = this,
+           newSortList = [];
+
+       if (!Array.isArray(sortList)) {
+               sortList = [{ column: sortList, dir: dir }];
+       }
+
+       sortList.forEach(function (item) {
+               var column;
+
+               column = self.table.columnManager.findColumn(item.column);
+
+               if (column) {
+                       item.column = column;
+                       newSortList.push(item);
+                       self.changed = true;
+               } else {
+                       console.warn("Sort Warning - Sort field does not exist and is being ignored: ", item.column);
+               }
+       });
+
+       self.sortList = newSortList;
+
+       if (this.table.options.persistence && this.table.modExists("persistence", true) && this.table.modules.persistence.config.sort) {
+               this.table.modules.persistence.save("sort");
+       }
+};
+
+//clear sorters
+Sort.prototype.clear = function () {
+       this.setSort([]);
+};
+
+//find appropriate sorter for column
+Sort.prototype.findSorter = function (column) {
+       var row = this.table.rowManager.activeRows[0],
+           sorter = "string",
+           field,
+           value;
+
+       if (row) {
+               row = row.getData();
+               field = column.getField();
+
+               if (field) {
+
+                       value = column.getFieldValue(row);
+
+                       switch (typeof value === "undefined" ? "undefined" : _typeof(value)) {
+                               case "undefined":
+                                       sorter = "string";
+                                       break;
+
+                               case "boolean":
+                                       sorter = "boolean";
+                                       break;
+
+                               default:
+                                       if (!isNaN(value) && value !== "") {
+                                               sorter = "number";
+                                       } else {
+                                               if (value.match(/((^[0-9]+[a-z]+)|(^[a-z]+[0-9]+))+$/i)) {
+                                                       sorter = "alphanum";
+                                               }
+                                       }
+                                       break;
+                       }
+               }
+       }
+
+       return this.sorters[sorter];
+};
+
+//work through sort list sorting data
+Sort.prototype.sort = function (data) {
+       var self = this,
+           sortList = this.table.options.sortOrderReverse ? self.sortList.slice().reverse() : self.sortList,
+           sortListActual = [],
+           rowComponents = [],
+           lastSort;
+
+       if (self.table.options.dataSorting) {
+               self.table.options.dataSorting.call(self.table, self.getSort());
+       }
+
+       self.clearColumnHeaders();
+
+       if (!self.table.options.ajaxSorting) {
+
+               //build list of valid sorters and trigger column specific callbacks before sort begins
+               sortList.forEach(function (item, i) {
+                       var sortObj = item.column.modules.sort;
+
+                       if (item.column && sortObj) {
+
+                               //if no sorter has been defined, take a guess
+                               if (!sortObj.sorter) {
+                                       sortObj.sorter = self.findSorter(item.column);
+                               }
+
+                               item.params = typeof sortObj.params === "function" ? sortObj.params(item.column.getComponent(), item.dir) : sortObj.params;
+
+                               sortListActual.push(item);
+                       }
+
+                       self.setColumnHeader(item.column, item.dir);
+               });
+
+               //sort data
+               if (sortListActual.length) {
+                       self._sortItems(data, sortListActual);
+               }
+       } else {
+               sortList.forEach(function (item, i) {
+                       self.setColumnHeader(item.column, item.dir);
+               });
+       }
+
+       if (self.table.options.dataSorted) {
+               data.forEach(function (row) {
+                       rowComponents.push(row.getComponent());
+               });
+
+               self.table.options.dataSorted.call(self.table, self.getSort(), rowComponents);
+       }
+};
+
+//clear sort arrows on columns
+Sort.prototype.clearColumnHeaders = function () {
+       this.table.columnManager.getRealColumns().forEach(function (column) {
+               if (column.modules.sort) {
+                       column.modules.sort.dir = "none";
+                       column.getElement().setAttribute("aria-sort", "none");
+               }
+       });
+};
+
+//set the column header sort direction
+Sort.prototype.setColumnHeader = function (column, dir) {
+       column.modules.sort.dir = dir;
+       column.getElement().setAttribute("aria-sort", dir);
+};
+
+//sort each item in sort list
+Sort.prototype._sortItems = function (data, sortList) {
+       var _this = this;
+
+       var sorterCount = sortList.length - 1;
+
+       data.sort(function (a, b) {
+               var result;
+
+               for (var i = sorterCount; i >= 0; i--) {
+                       var sortItem = sortList[i];
+
+                       result = _this._sortRow(a, b, sortItem.column, sortItem.dir, sortItem.params);
+
+                       if (result !== 0) {
+                               break;
+                       }
+               }
+
+               return result;
+       });
+};
+
+//process individual rows for a sort function on active data
+Sort.prototype._sortRow = function (a, b, column, dir, params) {
+       var el1Comp, el2Comp, colComp;
+
+       //switch elements depending on search direction
+       var el1 = dir == "asc" ? a : b;
+       var el2 = dir == "asc" ? b : a;
+
+       a = column.getFieldValue(el1.getData());
+       b = column.getFieldValue(el2.getData());
+
+       a = typeof a !== "undefined" ? a : "";
+       b = typeof b !== "undefined" ? b : "";
+
+       el1Comp = el1.getComponent();
+       el2Comp = el2.getComponent();
+
+       return column.modules.sort.sorter.call(this, a, b, el1Comp, el2Comp, column.getComponent(), dir, params);
+};
+
+//default data sorters
+Sort.prototype.sorters = {
+
+       //sort numbers
+       number: function number(a, b, aRow, bRow, column, dir, params) {
+               var alignEmptyValues = params.alignEmptyValues;
+               var decimal = params.decimalSeparator || ".";
+               var thousand = params.thousandSeparator || ",";
+               var emptyAlign = 0;
+
+               a = parseFloat(String(a).split(thousand).join("").split(decimal).join("."));
+               b = parseFloat(String(b).split(thousand).join("").split(decimal).join("."));
+
+               //handle non numeric values
+               if (isNaN(a)) {
+                       emptyAlign = isNaN(b) ? 0 : -1;
+               } else if (isNaN(b)) {
+                       emptyAlign = 1;
+               } else {
+                       //compare valid values
+                       return a - b;
+               }
+
+               //fix empty values in position
+               if (alignEmptyValues === "top" && dir === "desc" || alignEmptyValues === "bottom" && dir === "asc") {
+                       emptyAlign *= -1;
+               }
+
+               return emptyAlign;
+       },
+
+       //sort strings
+       string: function string(a, b, aRow, bRow, column, dir, params) {
+               var alignEmptyValues = params.alignEmptyValues;
+               var emptyAlign = 0;
+               var locale;
+
+               //handle empty values
+               if (!a) {
+                       emptyAlign = !b ? 0 : -1;
+               } else if (!b) {
+                       emptyAlign = 1;
+               } else {
+                       //compare valid values
+                       switch (_typeof(params.locale)) {
+                               case "boolean":
+                                       if (params.locale) {
+                                               locale = this.table.modules.localize.getLocale();
+                                       }
+                                       break;
+                               case "string":
+                                       locale = params.locale;
+                                       break;
+                       }
+
+                       return String(a).toLowerCase().localeCompare(String(b).toLowerCase(), locale);
+               }
+
+               //fix empty values in position
+               if (alignEmptyValues === "top" && dir === "desc" || alignEmptyValues === "bottom" && dir === "asc") {
+                       emptyAlign *= -1;
+               }
+
+               return emptyAlign;
+       },
+
+       //sort date
+       date: function date(a, b, aRow, bRow, column, dir, params) {
+               if (!params.format) {
+                       params.format = "DD/MM/YYYY";
+               }
+
+               return this.sorters.datetime.call(this, a, b, aRow, bRow, column, dir, params);
+       },
+
+       //sort HH:mm formatted times
+       time: function time(a, b, aRow, bRow, column, dir, params) {
+               if (!params.format) {
+                       params.format = "HH:mm";
+               }
+
+               return this.sorters.datetime.call(this, a, b, aRow, bRow, column, dir, params);
+       },
+
+       //sort datetime
+       datetime: function datetime(a, b, aRow, bRow, column, dir, params) {
+               var format = params.format || "DD/MM/YYYY HH:mm:ss",
+                   alignEmptyValues = params.alignEmptyValues,
+                   emptyAlign = 0;
+
+               if (typeof moment != "undefined") {
+                       a = moment(a, format);
+                       b = moment(b, format);
+
+                       if (!a.isValid()) {
+                               emptyAlign = !b.isValid() ? 0 : -1;
+                       } else if (!b.isValid()) {
+                               emptyAlign = 1;
+                       } else {
+                               //compare valid values
+                               return a - b;
+                       }
+
+                       //fix empty values in position
+                       if (alignEmptyValues === "top" && dir === "desc" || alignEmptyValues === "bottom" && dir === "asc") {
+                               emptyAlign *= -1;
+                       }
+
+                       return emptyAlign;
+               } else {
+                       console.error("Sort Error - 'datetime' sorter is dependant on moment.js");
+               }
+       },
+
+       //sort booleans
+       boolean: function boolean(a, b, aRow, bRow, column, dir, params) {
+               var el1 = a === true || a === "true" || a === "True" || a === 1 ? 1 : 0;
+               var el2 = b === true || b === "true" || b === "True" || b === 1 ? 1 : 0;
+
+               return el1 - el2;
+       },
+
+       //sort if element contains any data
+       array: function array(a, b, aRow, bRow, column, dir, params) {
+               var el1 = 0;
+               var el2 = 0;
+               var type = params.type || "length";
+               var alignEmptyValues = params.alignEmptyValues;
+               var emptyAlign = 0;
+
+               function calc(value) {
+
+                       switch (type) {
+                               case "length":
+                                       return value.length;
+                                       break;
+
+                               case "sum":
+                                       return value.reduce(function (c, d) {
+                                               return c + d;
+                                       });
+                                       break;
+
+                               case "max":
+                                       return Math.max.apply(null, value);
+                                       break;
+
+                               case "min":
+                                       return Math.min.apply(null, value);
+                                       break;
+
+                               case "avg":
+                                       return value.reduce(function (c, d) {
+                                               return c + d;
+                                       }) / value.length;
+                                       break;
+                       }
+               }
+
+               //handle non array values
+               if (!Array.isArray(a)) {
+                       alignEmptyValues = !Array.isArray(b) ? 0 : -1;
+               } else if (!Array.isArray(b)) {
+                       alignEmptyValues = 1;
+               } else {
+
+                       //compare valid values
+                       el1 = a ? calc(a) : 0;
+                       el2 = b ? calc(b) : 0;
+
+                       return el1 - el2;
+               }
+
+               //fix empty values in position
+               if (alignEmptyValues === "top" && dir === "desc" || alignEmptyValues === "bottom" && dir === "asc") {
+                       emptyAlign *= -1;
+               }
+
+               return emptyAlign;
+       },
+
+       //sort if element contains any data
+       exists: function exists(a, b, aRow, bRow, column, dir, params) {
+               var el1 = typeof a == "undefined" ? 0 : 1;
+               var el2 = typeof b == "undefined" ? 0 : 1;
+
+               return el1 - el2;
+       },
+
+       //sort alpha numeric strings
+       alphanum: function alphanum(as, bs, aRow, bRow, column, dir, params) {
+               var a,
+                   b,
+                   a1,
+                   b1,
+                   i = 0,
+                   L,
+                   rx = /(\d+)|(\D+)/g,
+                   rd = /\d/;
+               var alignEmptyValues = params.alignEmptyValues;
+               var emptyAlign = 0;
+
+               //handle empty values
+               if (!as && as !== 0) {
+                       emptyAlign = !bs && bs !== 0 ? 0 : -1;
+               } else if (!bs && bs !== 0) {
+                       emptyAlign = 1;
+               } else {
+
+                       if (isFinite(as) && isFinite(bs)) return as - bs;
+                       a = String(as).toLowerCase();
+                       b = String(bs).toLowerCase();
+                       if (a === b) return 0;
+                       if (!(rd.test(a) && rd.test(b))) return a > b ? 1 : -1;
+                       a = a.match(rx);
+                       b = b.match(rx);
+                       L = a.length > b.length ? b.length : a.length;
+                       while (i < L) {
+                               a1 = a[i];
+                               b1 = b[i++];
+                               if (a1 !== b1) {
+                                       if (isFinite(a1) && isFinite(b1)) {
+                                               if (a1.charAt(0) === "0") a1 = "." + a1;
+                                               if (b1.charAt(0) === "0") b1 = "." + b1;
+                                               return a1 - b1;
+                                       } else return a1 > b1 ? 1 : -1;
+                               }
+                       }
+
+                       return a.length > b.length;
+               }
+
+               //fix empty values in position
+               if (alignEmptyValues === "top" && dir === "desc" || alignEmptyValues === "bottom" && dir === "asc") {
+                       emptyAlign *= -1;
+               }
+
+               return emptyAlign;
+       }
+};
+
+Tabulator.prototype.registerModule("sort", Sort);
\ No newline at end of file
diff --git a/website/js/vendor/tabulator/js/modules/sort.min.js b/website/js/vendor/tabulator/js/modules/sort.min.js
new file mode 100644 (file)
index 0000000..e6e73ed
--- /dev/null
@@ -0,0 +1,2 @@
+/* Tabulator v4.8.3 (c) Oliver Folkerd */
+var _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Sort=function(t){this.table=t,this.sortList=[],this.changed=!1};Sort.prototype.initializeColumn=function(t,e){var r,o,n=this,i=!1;switch(_typeof(t.definition.sorter)){case"string":n.sorters[t.definition.sorter]?i=n.sorters[t.definition.sorter]:console.warn("Sort Error - No such sorter found: ",t.definition.sorter);break;case"function":i=t.definition.sorter}t.modules.sort={sorter:i,dir:"none",params:t.definition.sorterParams||{},startingDir:t.definition.headerSortStartingDir||"asc",tristate:void 0!==t.definition.headerSortTristate?t.definition.headerSortTristate:this.table.options.headerSortTristate},(void 0===t.definition.headerSort?!1!==this.table.options.headerSort:!1!==t.definition.headerSort)&&(r=t.getElement(),r.classList.add("tabulator-sortable"),o=document.createElement("div"),o.classList.add("tabulator-col-sorter"),"object"==_typeof(this.table.options.headerSortElement)?o.appendChild(this.table.options.headerSortElement):o.innerHTML=this.table.options.headerSortElement,e.appendChild(o),t.modules.sort.element=o,r.addEventListener("click",function(e){var r="",o=[],i=!1;if(t.modules.sort){if(t.modules.sort.tristate)r="none"==t.modules.sort.dir?t.modules.sort.startingDir:t.modules.sort.dir==t.modules.sort.startingDir?"asc"==t.modules.sort.dir?"desc":"asc":"none";else switch(t.modules.sort.dir){case"asc":r="desc";break;case"desc":r="asc";break;default:r=t.modules.sort.startingDir}n.table.options.columnHeaderSortMulti&&(e.shiftKey||e.ctrlKey)?(o=n.getSort(),i=o.findIndex(function(e){return e.field===t.getField()}),i>-1?(o[i].dir=r,i!=o.length-1&&(i=o.splice(i,1)[0],"none"!=r&&o.push(i))):"none"!=r&&o.push({column:t,dir:r}),n.setSort(o)):"none"==r?n.clear():n.setSort(t,r),n.table.rowManager.sorterRefresh(!n.sortList.length)}}))},Sort.prototype.hasChanged=function(){var t=this.changed;return this.changed=!1,t},Sort.prototype.getSort=function(){var t=this,e=[];return t.sortList.forEach(function(t){t.column&&e.push({column:t.column.getComponent(),field:t.column.getField(),dir:t.dir})}),e},Sort.prototype.setSort=function(t,e){var r=this,o=[];Array.isArray(t)||(t=[{column:t,dir:e}]),t.forEach(function(t){var e;e=r.table.columnManager.findColumn(t.column),e?(t.column=e,o.push(t),r.changed=!0):console.warn("Sort Warning - Sort field does not exist and is being ignored: ",t.column)}),r.sortList=o,this.table.options.persistence&&this.table.modExists("persistence",!0)&&this.table.modules.persistence.config.sort&&this.table.modules.persistence.save("sort")},Sort.prototype.clear=function(){this.setSort([])},Sort.prototype.findSorter=function(t){var e,r=this.table.rowManager.activeRows[0],o="string";if(r&&(r=r.getData(),t.getField()))switch(e=t.getFieldValue(r),void 0===e?"undefined":_typeof(e)){case"undefined":o="string";break;case"boolean":o="boolean";break;default:isNaN(e)||""===e?e.match(/((^[0-9]+[a-z]+)|(^[a-z]+[0-9]+))+$/i)&&(o="alphanum"):o="number"}return this.sorters[o]},Sort.prototype.sort=function(t){var e=this,r=this.table.options.sortOrderReverse?e.sortList.slice().reverse():e.sortList,o=[],n=[];e.table.options.dataSorting&&e.table.options.dataSorting.call(e.table,e.getSort()),e.clearColumnHeaders(),e.table.options.ajaxSorting?r.forEach(function(t,r){e.setColumnHeader(t.column,t.dir)}):(r.forEach(function(t,r){var n=t.column.modules.sort;t.column&&n&&(n.sorter||(n.sorter=e.findSorter(t.column)),t.params="function"==typeof n.params?n.params(t.column.getComponent(),t.dir):n.params,o.push(t)),e.setColumnHeader(t.column,t.dir)}),o.length&&e._sortItems(t,o)),e.table.options.dataSorted&&(t.forEach(function(t){n.push(t.getComponent())}),e.table.options.dataSorted.call(e.table,e.getSort(),n))},Sort.prototype.clearColumnHeaders=function(){this.table.columnManager.getRealColumns().forEach(function(t){t.modules.sort&&(t.modules.sort.dir="none",t.getElement().setAttribute("aria-sort","none"))})},Sort.prototype.setColumnHeader=function(t,e){t.modules.sort.dir=e,t.getElement().setAttribute("aria-sort",e)},Sort.prototype._sortItems=function(t,e){var r=this,o=e.length-1;t.sort(function(t,n){for(var i,s=o;s>=0;s--){var a=e[s];if(0!==(i=r._sortRow(t,n,a.column,a.dir,a.params)))break}return i})},Sort.prototype._sortRow=function(t,e,r,o,n){var i,s,a="asc"==o?t:e,l="asc"==o?e:t;return t=r.getFieldValue(a.getData()),e=r.getFieldValue(l.getData()),t=void 0!==t?t:"",e=void 0!==e?e:"",i=a.getComponent(),s=l.getComponent(),r.modules.sort.sorter.call(this,t,e,i,s,r.getComponent(),o,n)},Sort.prototype.sorters={number:function(t,e,r,o,n,i,s){var a=s.alignEmptyValues,l=s.decimalSeparator||".",u=s.thousandSeparator||",",c=0;if(t=parseFloat(String(t).split(u).join("").split(l).join(".")),e=parseFloat(String(e).split(u).join("").split(l).join(".")),isNaN(t))c=isNaN(e)?0:-1;else{if(!isNaN(e))return t-e;c=1}return("top"===a&&"desc"===i||"bottom"===a&&"asc"===i)&&(c*=-1),c},string:function(t,e,r,o,n,i,s){var a,l=s.alignEmptyValues,u=0;if(t){if(e){switch(_typeof(s.locale)){case"boolean":s.locale&&(a=this.table.modules.localize.getLocale());break;case"string":a=s.locale}return String(t).toLowerCase().localeCompare(String(e).toLowerCase(),a)}u=1}else u=e?-1:0;return("top"===l&&"desc"===i||"bottom"===l&&"asc"===i)&&(u*=-1),u},date:function(t,e,r,o,n,i,s){return s.format||(s.format="DD/MM/YYYY"),this.sorters.datetime.call(this,t,e,r,o,n,i,s)},time:function(t,e,r,o,n,i,s){return s.format||(s.format="HH:mm"),this.sorters.datetime.call(this,t,e,r,o,n,i,s)},datetime:function(t,e,r,o,n,i,s){var a=s.format||"DD/MM/YYYY HH:mm:ss",l=s.alignEmptyValues,u=0;if("undefined"!=typeof moment){if(t=moment(t,a),e=moment(e,a),t.isValid()){if(e.isValid())return t-e;u=1}else u=e.isValid()?-1:0;return("top"===l&&"desc"===i||"bottom"===l&&"asc"===i)&&(u*=-1),u}console.error("Sort Error - 'datetime' sorter is dependant on moment.js")},boolean:function(t,e,r,o,n,i,s){return(!0===t||"true"===t||"True"===t||1===t?1:0)-(!0===e||"true"===e||"True"===e||1===e?1:0)},array:function(t,e,r,o,n,i,s){function a(t){switch(c){case"length":return t.length;case"sum":return t.reduce(function(t,e){return t+e});case"max":return Math.max.apply(null,t);case"min":return Math.min.apply(null,t);case"avg":return t.reduce(function(t,e){return t+e})/t.length}}var l=0,u=0,c=s.type||"length",d=s.alignEmptyValues,m=0;if(Array.isArray(t)){if(Array.isArray(e))return l=t?a(t):0,u=e?a(e):0,l-u;d=1}else d=Array.isArray(e)?-1:0;return("top"===d&&"desc"===i||"bottom"===d&&"asc"===i)&&(m*=-1),m},exists:function(t,e,r,o,n,i,s){return(void 0===t?0:1)-(void 0===e?0:1)},alphanum:function(t,e,r,o,n,i,s){var a,l,u,c,d,m=0,f=/(\d+)|(\D+)/g,p=/\d/,h=s.alignEmptyValues,g=0;if(t||0===t){if(e||0===e){if(isFinite(t)&&isFinite(e))return t-e;if(a=String(t).toLowerCase(),l=String(e).toLowerCase(),a===l)return 0;if(!p.test(a)||!p.test(l))return a>l?1:-1;for(a=a.match(f),l=l.match(f),d=a.length>l.length?l.length:a.length;m<d;)if(u=a[m],c=l[m++],u!==c)return isFinite(u)&&isFinite(c)?("0"===u.charAt(0)&&(u="."+u),"0"===c.charAt(0)&&(c="."+c),u-c):u>c?1:-1;return a.length>l.length}g=1}else g=e||0===e?-1:0;return("top"===h&&"desc"===i||"bottom"===h&&"asc"===i)&&(g*=-1),g}},Tabulator.prototype.registerModule("sort",Sort);
\ No newline at end of file
diff --git a/website/js/vendor/tabulator/js/modules/validate.js b/website/js/vendor/tabulator/js/modules/validate.js
new file mode 100644 (file)
index 0000000..b5708a7
--- /dev/null
@@ -0,0 +1,286 @@
+var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
+
+/* Tabulator v4.8.3 (c) Oliver Folkerd */
+
+var Validate = function Validate(table) {
+       this.table = table;
+       this.invalidCells = [];
+};
+
+//validate
+Validate.prototype.initializeColumn = function (column) {
+       var self = this,
+           config = [],
+           validator;
+
+       if (column.definition.validator) {
+
+               if (Array.isArray(column.definition.validator)) {
+                       column.definition.validator.forEach(function (item) {
+                               validator = self._extractValidator(item);
+
+                               if (validator) {
+                                       config.push(validator);
+                               }
+                       });
+               } else {
+                       validator = this._extractValidator(column.definition.validator);
+
+                       if (validator) {
+                               config.push(validator);
+                       }
+               }
+
+               column.modules.validate = config.length ? config : false;
+       }
+};
+
+Validate.prototype._extractValidator = function (value) {
+       var type, params, pos;
+
+       switch (typeof value === "undefined" ? "undefined" : _typeof(value)) {
+               case "string":
+                       pos = value.indexOf(':');
+
+                       if (pos > -1) {
+                               type = value.substring(0, pos);
+                               params = value.substring(pos + 1);
+                       } else {
+                               type = value;
+                       }
+
+                       return this._buildValidator(type, params);
+                       break;
+
+               case "function":
+                       return this._buildValidator(value);
+                       break;
+
+               case "object":
+                       return this._buildValidator(value.type, value.parameters);
+                       break;
+       }
+};
+
+Validate.prototype._buildValidator = function (type, params) {
+
+       var func = typeof type == "function" ? type : this.validators[type];
+
+       if (!func) {
+               console.warn("Validator Setup Error - No matching validator found:", type);
+               return false;
+       } else {
+               return {
+                       type: typeof type == "function" ? "function" : type,
+                       func: func,
+                       params: params
+               };
+       }
+};
+
+Validate.prototype.validate = function (validators, cell, value) {
+       var self = this,
+           valid = [],
+           invalidIndex = this.invalidCells.indexOf(cell);
+
+       if (validators) {
+               validators.forEach(function (item) {
+                       if (!item.func.call(self, cell.getComponent(), value, item.params)) {
+                               valid.push({
+                                       type: item.type,
+                                       parameters: item.params
+                               });
+                       }
+               });
+       }
+
+       valid = valid.length ? valid : true;
+
+       if (!cell.modules.validate) {
+               cell.modules.validate = {};
+       }
+
+       if (valid === true) {
+               cell.modules.validate.invalid = false;
+               cell.getElement().classList.remove("tabulator-validation-fail");
+
+               if (invalidIndex > -1) {
+                       this.invalidCells.splice(invalidIndex, 1);
+               }
+       } else {
+               cell.modules.validate.invalid = true;
+
+               if (this.table.options.validationMode !== "manual") {
+                       cell.getElement().classList.add("tabulator-validation-fail");
+               }
+
+               if (invalidIndex == -1) {
+                       this.invalidCells.push(cell);
+               }
+       }
+
+       return valid;
+};
+
+Validate.prototype.getInvalidCells = function () {
+       var output = [];
+
+       this.invalidCells.forEach(function (cell) {
+               output.push(cell.getComponent());
+       });
+
+       return output;
+};
+
+Validate.prototype.clearValidation = function (cell) {
+       var invalidIndex;
+
+       if (cell.modules.validate && cell.modules.validate.invalid) {
+
+               cell.getElement().classList.remove("tabulator-validation-fail");
+               cell.modules.validate.invalid = false;
+
+               invalidIndex = this.invalidCells.indexOf(cell);
+
+               if (invalidIndex > -1) {
+                       this.invalidCells.splice(invalidIndex, 1);
+               }
+       }
+};
+
+Validate.prototype.validators = {
+
+       //is integer
+       integer: function integer(cell, value, parameters) {
+               if (value === "" || value === null || typeof value === "undefined") {
+                       return true;
+               }
+               value = Number(value);
+               return typeof value === 'number' && isFinite(value) && Math.floor(value) === value;
+       },
+
+       //is float
+       float: function float(cell, value, parameters) {
+               if (value === "" || value === null || typeof value === "undefined") {
+                       return true;
+               }
+               value = Number(value);
+               return typeof value === 'number' && isFinite(value) && value % 1 !== 0;
+       },
+
+       //must be a number
+       numeric: function numeric(cell, value, parameters) {
+               if (value === "" || value === null || typeof value === "undefined") {
+                       return true;
+               }
+               return !isNaN(value);
+       },
+
+       //must be a string
+       string: function string(cell, value, parameters) {
+               if (value === "" || value === null || typeof value === "undefined") {
+                       return true;
+               }
+               return isNaN(value);
+       },
+
+       //maximum value
+       max: function max(cell, value, parameters) {
+               if (value === "" || value === null || typeof value === "undefined") {
+                       return true;
+               }
+               return parseFloat(value) <= parameters;
+       },
+
+       //minimum value
+       min: function min(cell, value, parameters) {
+               if (value === "" || value === null || typeof value === "undefined") {
+                       return true;
+               }
+               return parseFloat(value) >= parameters;
+       },
+
+       //starts with  value
+       starts: function starts(cell, value, parameters) {
+               if (value === "" || value === null || typeof value === "undefined") {
+                       return true;
+               }
+               return String(value).toLowerCase().startsWith(String(parameters).toLowerCase());
+       },
+
+       //ends with  value
+       ends: function ends(cell, value, parameters) {
+               if (value === "" || value === null || typeof value === "undefined") {
+                       return true;
+               }
+               return String(value).toLowerCase().endsWith(String(parameters).toLowerCase());
+       },
+
+       //minimum string length
+       minLength: function minLength(cell, value, parameters) {
+               if (value === "" || value === null || typeof value === "undefined") {
+                       return true;
+               }
+               return String(value).length >= parameters;
+       },
+
+       //maximum string length
+       maxLength: function maxLength(cell, value, parameters) {
+               if (value === "" || value === null || typeof value === "undefined") {
+                       return true;
+               }
+               return String(value).length <= parameters;
+       },
+
+       //in provided value list
+       in: function _in(cell, value, parameters) {
+               if (value === "" || value === null || typeof value === "undefined") {
+                       return true;
+               }
+               if (typeof parameters == "string") {
+                       parameters = parameters.split("|");
+               }
+
+               return value === "" || parameters.indexOf(value) > -1;
+       },
+
+       //must match provided regex
+       regex: function regex(cell, value, parameters) {
+               if (value === "" || value === null || typeof value === "undefined") {
+                       return true;
+               }
+               var reg = new RegExp(parameters);
+
+               return reg.test(value);
+       },
+
+       //value must be unique in this column
+       unique: function unique(cell, value, parameters) {
+               if (value === "" || value === null || typeof value === "undefined") {
+                       return true;
+               }
+               var unique = true;
+
+               var cellData = cell.getData();
+               var column = cell.getColumn()._getSelf();
+
+               this.table.rowManager.rows.forEach(function (row) {
+                       var data = row.getData();
+
+                       if (data !== cellData) {
+                               if (value == column.getFieldValue(data)) {
+                                       unique = false;
+                               }
+                       }
+               });
+
+               return unique;
+       },
+
+       //must have a value
+       required: function required(cell, value, parameters) {
+               return value !== "" && value !== null && typeof value !== "undefined";
+       }
+};
+
+Tabulator.prototype.registerModule("validate", Validate);
\ No newline at end of file
diff --git a/website/js/vendor/tabulator/js/modules/validate.min.js b/website/js/vendor/tabulator/js/modules/validate.min.js
new file mode 100644 (file)
index 0000000..917be7a
--- /dev/null
@@ -0,0 +1,2 @@
+/* Tabulator v4.8.3 (c) Oliver Folkerd */
+var _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Validate=function(t){this.table=t,this.invalidCells=[]};Validate.prototype.initializeColumn=function(t){var i,n=this,e=[];t.definition.validator&&(Array.isArray(t.definition.validator)?t.definition.validator.forEach(function(t){(i=n._extractValidator(t))&&e.push(i)}):(i=this._extractValidator(t.definition.validator))&&e.push(i),t.modules.validate=!!e.length&&e)},Validate.prototype._extractValidator=function(t){var i,n,e;switch(void 0===t?"undefined":_typeof(t)){case"string":return e=t.indexOf(":"),e>-1?(i=t.substring(0,e),n=t.substring(e+1)):i=t,this._buildValidator(i,n);case"function":return this._buildValidator(t);case"object":return this._buildValidator(t.type,t.parameters)}},Validate.prototype._buildValidator=function(t,i){var n="function"==typeof t?t:this.validators[t];return n?{type:"function"==typeof t?"function":t,func:n,params:i}:(console.warn("Validator Setup Error - No matching validator found:",t),!1)},Validate.prototype.validate=function(t,i,n){var e=this,a=[],o=this.invalidCells.indexOf(i);return t&&t.forEach(function(t){t.func.call(e,i.getComponent(),n,t.params)||a.push({type:t.type,parameters:t.params})}),a=!a.length||a,i.modules.validate||(i.modules.validate={}),!0===a?(i.modules.validate.invalid=!1,i.getElement().classList.remove("tabulator-validation-fail"),o>-1&&this.invalidCells.splice(o,1)):(i.modules.validate.invalid=!0,"manual"!==this.table.options.validationMode&&i.getElement().classList.add("tabulator-validation-fail"),-1==o&&this.invalidCells.push(i)),a},Validate.prototype.getInvalidCells=function(){var t=[];return this.invalidCells.forEach(function(i){t.push(i.getComponent())}),t},Validate.prototype.clearValidation=function(t){var i;t.modules.validate&&t.modules.validate.invalid&&(t.getElement().classList.remove("tabulator-validation-fail"),t.modules.validate.invalid=!1,(i=this.invalidCells.indexOf(t))>-1&&this.invalidCells.splice(i,1))},Validate.prototype.validators={integer:function(t,i,n){return""===i||null===i||void 0===i||"number"==typeof(i=Number(i))&&isFinite(i)&&Math.floor(i)===i},float:function(t,i,n){return""===i||null===i||void 0===i||"number"==typeof(i=Number(i))&&isFinite(i)&&i%1!=0},numeric:function(t,i,n){return""===i||null===i||void 0===i||!isNaN(i)},string:function(t,i,n){return""===i||null===i||void 0===i||isNaN(i)},max:function(t,i,n){return""===i||null===i||void 0===i||parseFloat(i)<=n},min:function(t,i,n){return""===i||null===i||void 0===i||parseFloat(i)>=n},starts:function(t,i,n){return""===i||null===i||void 0===i||String(i).toLowerCase().startsWith(String(n).toLowerCase())},ends:function(t,i,n){return""===i||null===i||void 0===i||String(i).toLowerCase().endsWith(String(n).toLowerCase())},minLength:function(t,i,n){return""===i||null===i||void 0===i||String(i).length>=n},maxLength:function(t,i,n){return""===i||null===i||void 0===i||String(i).length<=n},in:function(t,i,n){return""===i||null===i||void 0===i||("string"==typeof n&&(n=n.split("|")),""===i||n.indexOf(i)>-1)},regex:function(t,i,n){return""===i||null===i||void 0===i||new RegExp(n).test(i)},unique:function(t,i,n){if(""===i||null===i||void 0===i)return!0;var e=!0,a=t.getData(),o=t.getColumn()._getSelf();return this.table.rowManager.rows.forEach(function(t){var n=t.getData();n!==a&&i==o.getFieldValue(n)&&(e=!1)}),e},required:function(t,i,n){return""!==i&&null!==i&&void 0!==i}},Tabulator.prototype.registerModule("validate",Validate);
\ No newline at end of file
diff --git a/website/js/vendor/tabulator/js/tabulator.es2015.js b/website/js/vendor/tabulator/js/tabulator.es2015.js
new file mode 100644 (file)
index 0000000..31daf6c
--- /dev/null
@@ -0,0 +1,23395 @@
+/* Tabulator v4.8.3 (c) Oliver Folkerd */
+
+'use strict';
+
+// https://tc39.github.io/ecma262/#sec-array.prototype.findIndex
+
+var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
+
+if (!Array.prototype.findIndex) {
+
+       Object.defineProperty(Array.prototype, 'findIndex', {
+
+               value: function value(predicate) {
+
+                       // 1. Let O be ? ToObject(this value).
+
+                       if (this == null) {
+
+                               throw new TypeError('"this" is null or not defined');
+                       }
+
+                       var o = Object(this);
+
+                       // 2. Let len be ? ToLength(? Get(O, "length")).
+
+                       var len = o.length >>> 0;
+
+                       // 3. If IsCallable(predicate) is false, throw a TypeError exception.
+
+                       if (typeof predicate !== 'function') {
+
+                               throw new TypeError('predicate must be a function');
+                       }
+
+                       // 4. If thisArg was supplied, let T be thisArg; else let T be undefined.
+
+                       var thisArg = arguments[1];
+
+                       // 5. Let k be 0.
+
+                       var k = 0;
+
+                       // 6. Repeat, while k < len
+
+                       while (k < len) {
+
+                               // a. Let Pk be ! ToString(k).
+
+                               // b. Let kValue be ? Get(O, Pk).
+
+                               // c. Let testResult be ToBoolean(? Call(predicate, T, « kValue, k, O »)).
+
+                               // d. If testResult is true, return k.
+
+                               var kValue = o[k];
+
+                               if (predicate.call(thisArg, kValue, k, o)) {
+
+                                       return k;
+                               }
+
+                               // e. Increase k by 1.
+
+                               k++;
+                       }
+
+                       // 7. Return -1.
+
+                       return -1;
+               }
+
+       });
+}
+
+// https://tc39.github.io/ecma262/#sec-array.prototype.find
+
+if (!Array.prototype.find) {
+
+       Object.defineProperty(Array.prototype, 'find', {
+
+               value: function value(predicate) {
+
+                       // 1. Let O be ? ToObject(this value).
+
+                       if (this == null) {
+
+                               throw new TypeError('"this" is null or not defined');
+                       }
+
+                       var o = Object(this);
+
+                       // 2. Let len be ? ToLength(? Get(O, "length")).
+
+                       var len = o.length >>> 0;
+
+                       // 3. If IsCallable(predicate) is false, throw a TypeError exception.
+
+                       if (typeof predicate !== 'function') {
+
+                               throw new TypeError('predicate must be a function');
+                       }
+
+                       // 4. If thisArg was supplied, let T be thisArg; else let T be undefined.
+
+                       var thisArg = arguments[1];
+
+                       // 5. Let k be 0.
+
+                       var k = 0;
+
+                       // 6. Repeat, while k < len
+
+                       while (k < len) {
+
+                               // a. Let Pk be ! ToString(k).
+
+                               // b. Let kValue be ? Get(O, Pk).
+
+                               // c. Let testResult be ToBoolean(? Call(predicate, T, « kValue, k, O »)).
+
+                               // d. If testResult is true, return kValue.
+
+                               var kValue = o[k];
+
+                               if (predicate.call(thisArg, kValue, k, o)) {
+
+                                       return kValue;
+                               }
+
+                               // e. Increase k by 1.
+
+                               k++;
+                       }
+
+                       // 7. Return undefined.
+
+                       return undefined;
+               }
+
+       });
+}
+
+// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/includes#Polyfill
+
+if (!String.prototype.includes) {
+
+       String.prototype.includes = function (search, start) {
+
+               'use strict';
+
+               if (search instanceof RegExp) {
+
+                       throw TypeError('first argument must not be a RegExp');
+               }
+
+               if (start === undefined) {
+                       start = 0;
+               }
+
+               return this.indexOf(search, start) !== -1;
+       };
+}
+
+// https://tc39.github.io/ecma262/#sec-array.prototype.includes
+
+if (!Array.prototype.includes) {
+
+       Object.defineProperty(Array.prototype, 'includes', {
+
+               value: function value(searchElement, fromIndex) {
+
+                       if (this == null) {
+
+                               throw new TypeError('"this" is null or not defined');
+                       }
+
+                       // 1. Let O be ? ToObject(this value).
+
+                       var o = Object(this);
+
+                       // 2. Let len be ? ToLength(? Get(O, "length")).
+
+                       var len = o.length >>> 0;
+
+                       // 3. If len is 0, return false.
+
+                       if (len === 0) {
+
+                               return false;
+                       }
+
+                       // 4. Let n be ? ToInteger(fromIndex).
+
+                       //    (If fromIndex is undefined, this step produces the value 0.)
+
+                       var n = fromIndex | 0;
+
+                       // 5. If n ≥ 0, then
+
+                       //  a. Let k be n.
+
+                       // 6. Else n < 0,
+
+                       //  a. Let k be len + n.
+
+                       //  b. If k < 0, let k be 0.
+
+                       var k = Math.max(n >= 0 ? n : len - Math.abs(n), 0);
+
+                       function sameValueZero(x, y) {
+
+                               return x === y || typeof x === 'number' && typeof y === 'number' && isNaN(x) && isNaN(y);
+                       }
+
+                       // 7. Repeat, while k < len
+
+                       while (k < len) {
+
+                               // a. Let elementK be the result of ? Get(O, ! ToString(k)).
+
+                               // b. If SameValueZero(searchElement, elementK) is true, return true.
+
+                               if (sameValueZero(o[k], searchElement)) {
+
+                                       return true;
+                               }
+
+                               // c. Increase k by 1.
+
+                               k++;
+                       }
+
+                       // 8. Return false
+
+                       return false;
+               }
+
+       });
+}
+
+// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign#Polyfill
+
+if (typeof Object.assign !== 'function') {
+
+       // Must be writable: true, enumerable: false, configurable: true
+
+       Object.defineProperty(Object, "assign", {
+
+               value: function assign(target, varArgs) {
+                       // .length of function is 2
+
+                       'use strict';
+
+                       if (target === null || target === undefined) {
+
+                               throw new TypeError('Cannot convert undefined or null to object');
+                       }
+
+                       var to = Object(target);
+
+                       for (var index = 1; index < arguments.length; index++) {
+
+                               var nextSource = arguments[index];
+
+                               if (nextSource !== null && nextSource !== undefined) {
+
+                                       for (var nextKey in nextSource) {
+
+                                               // Avoid bugs when hasOwnProperty is shadowed
+
+                                               if (Object.prototype.hasOwnProperty.call(nextSource, nextKey)) {
+
+                                                       to[nextKey] = nextSource[nextKey];
+                                               }
+                                       }
+                               }
+                       }
+
+                       return to;
+               },
+
+               writable: true,
+
+               configurable: true
+
+       });
+}
+
+var ColumnManager = function ColumnManager(table) {
+
+       this.table = table; //hold parent table
+
+       this.blockHozScrollEvent = false;
+
+       this.headersElement = this.createHeadersElement();
+
+       this.element = this.createHeaderElement(); //containing element
+
+       this.rowManager = null; //hold row manager object
+
+       this.columns = []; // column definition object
+
+       this.columnsByIndex = []; //columns by index
+
+       this.columnsByField = {}; //columns by field
+
+       this.scrollLeft = 0;
+
+       this.element.insertBefore(this.headersElement, this.element.firstChild);
+};
+
+////////////// Setup Functions /////////////////
+
+
+ColumnManager.prototype.createHeadersElement = function () {
+
+       var el = document.createElement("div");
+
+       el.classList.add("tabulator-headers");
+
+       return el;
+};
+
+ColumnManager.prototype.createHeaderElement = function () {
+
+       var el = document.createElement("div");
+
+       el.classList.add("tabulator-header");
+
+       if (!this.table.options.headerVisible) {
+
+               el.classList.add("tabulator-header-hidden");
+       }
+
+       return el;
+};
+
+ColumnManager.prototype.initialize = function () {
+
+       var self = this;
+
+       //scroll body along with header
+
+       // self.element.addEventListener("scroll", function(e){
+
+       //      if(!self.blockHozScrollEvent){
+
+       //              self.table.rowManager.scrollHorizontal(self.element.scrollLeft);
+
+       //      }
+
+       // });
+};
+
+//link to row manager
+
+ColumnManager.prototype.setRowManager = function (manager) {
+
+       this.rowManager = manager;
+};
+
+//return containing element
+
+ColumnManager.prototype.getElement = function () {
+
+       return this.element;
+};
+
+//return header containing element
+
+ColumnManager.prototype.getHeadersElement = function () {
+
+       return this.headersElement;
+};
+
+// ColumnManager.prototype.tempScrollBlock = function(){
+
+//     clearTimeout(this.blockHozScrollEvent);
+
+//     this.blockHozScrollEvent = setTimeout(() => {this.blockHozScrollEvent = false;}, 50);
+
+// }
+
+
+//scroll horizontally to match table body
+
+ColumnManager.prototype.scrollHorizontal = function (left) {
+
+       var hozAdjust = 0,
+           scrollWidth = this.element.scrollWidth - this.table.element.clientWidth;
+
+       // this.tempScrollBlock();
+
+       this.element.scrollLeft = left;
+
+       //adjust for vertical scrollbar moving table when present
+
+       if (left > scrollWidth) {
+
+               hozAdjust = left - scrollWidth;
+
+               this.element.style.marginLeft = -hozAdjust + "px";
+       } else {
+
+               this.element.style.marginLeft = 0;
+       }
+
+       //keep frozen columns fixed in position
+
+       //this._calcFrozenColumnsPos(hozAdjust + 3);
+
+
+       this.scrollLeft = left;
+
+       if (this.table.modExists("frozenColumns")) {
+
+               this.table.modules.frozenColumns.scrollHorizontal();
+       }
+};
+
+///////////// Column Setup Functions /////////////
+
+
+ColumnManager.prototype.generateColumnsFromRowData = function (data) {
+
+       var cols = [],
+           definitions = this.table.options.autoColumnsDefinitions,
+           row,
+           sorter;
+
+       if (data && data.length) {
+
+               row = data[0];
+
+               for (var key in row) {
+
+                       var col = {
+
+                               field: key,
+
+                               title: key
+
+                       };
+
+                       var value = row[key];
+
+                       switch (typeof value === 'undefined' ? 'undefined' : _typeof(value)) {
+
+                               case "undefined":
+
+                                       sorter = "string";
+
+                                       break;
+
+                               case "boolean":
+
+                                       sorter = "boolean";
+
+                                       break;
+
+                               case "object":
+
+                                       if (Array.isArray(value)) {
+
+                                               sorter = "array";
+                                       } else {
+
+                                               sorter = "string";
+                                       }
+
+                                       break;
+
+                               default:
+
+                                       if (!isNaN(value) && value !== "") {
+
+                                               sorter = "number";
+                                       } else {
+
+                                               if (value.match(/((^[0-9]+[a-z]+)|(^[a-z]+[0-9]+))+$/i)) {
+
+                                                       sorter = "alphanum";
+                                               } else {
+
+                                                       sorter = "string";
+                                               }
+                                       }
+
+                                       break;
+
+                       }
+
+                       col.sorter = sorter;
+
+                       cols.push(col);
+               }
+
+               if (definitions) {
+
+                       switch (typeof definitions === 'undefined' ? 'undefined' : _typeof(definitions)) {
+
+                               case "function":
+
+                                       this.table.options.columns = definitions.call(this.table, cols);
+
+                                       break;
+
+                               case "object":
+
+                                       if (Array.isArray(definitions)) {
+
+                                               cols.forEach(function (col) {
+
+                                                       var match = definitions.find(function (def) {
+
+                                                               return def.field === col.field;
+                                                       });
+
+                                                       if (match) {
+
+                                                               Object.assign(col, match);
+                                                       }
+                                               });
+                                       } else {
+
+                                               cols.forEach(function (col) {
+
+                                                       if (definitions[col.field]) {
+
+                                                               Object.assign(col, definitions[col.field]);
+                                                       }
+                                               });
+                                       }
+
+                                       this.table.options.columns = cols;
+
+                                       break;
+
+                       }
+               } else {
+
+                       this.table.options.columns = cols;
+               }
+
+               this.setColumns(this.table.options.columns);
+       }
+};
+
+ColumnManager.prototype.setColumns = function (cols, row) {
+
+       var self = this;
+
+       while (self.headersElement.firstChild) {
+               self.headersElement.removeChild(self.headersElement.firstChild);
+       }self.columns = [];
+
+       self.columnsByIndex = [];
+
+       self.columnsByField = {};
+
+       //reset frozen columns
+
+       if (self.table.modExists("frozenColumns")) {
+
+               self.table.modules.frozenColumns.reset();
+       }
+
+       cols.forEach(function (def, i) {
+
+               self._addColumn(def);
+       });
+
+       self._reIndexColumns();
+
+       if (self.table.options.responsiveLayout && self.table.modExists("responsiveLayout", true)) {
+
+               self.table.modules.responsiveLayout.initialize();
+       }
+
+       if (this.table.options.virtualDomHoz) {
+
+               this.table.vdomHoz.reinitialize(false, true);
+       }
+
+       self.redraw(true);
+};
+
+ColumnManager.prototype._addColumn = function (definition, before, nextToColumn) {
+
+       var column = new Column(definition, this),
+           colEl = column.getElement(),
+           index = nextToColumn ? this.findColumnIndex(nextToColumn) : nextToColumn;
+
+       if (nextToColumn && index > -1) {
+
+               var parentIndex = this.columns.indexOf(nextToColumn.getTopColumn());
+
+               var nextEl = nextToColumn.getElement();
+
+               if (before) {
+
+                       this.columns.splice(parentIndex, 0, column);
+
+                       nextEl.parentNode.insertBefore(colEl, nextEl);
+               } else {
+
+                       this.columns.splice(parentIndex + 1, 0, column);
+
+                       nextEl.parentNode.insertBefore(colEl, nextEl.nextSibling);
+               }
+       } else {
+
+               if (before) {
+
+                       this.columns.unshift(column);
+
+                       this.headersElement.insertBefore(column.getElement(), this.headersElement.firstChild);
+               } else {
+
+                       this.columns.push(column);
+
+                       this.headersElement.appendChild(column.getElement());
+               }
+
+               column.columnRendered();
+       }
+
+       return column;
+};
+
+ColumnManager.prototype.registerColumnField = function (col) {
+
+       if (col.definition.field) {
+
+               this.columnsByField[col.definition.field] = col;
+       }
+};
+
+ColumnManager.prototype.registerColumnPosition = function (col) {
+
+       this.columnsByIndex.push(col);
+};
+
+ColumnManager.prototype._reIndexColumns = function () {
+
+       this.columnsByIndex = [];
+
+       this.columns.forEach(function (column) {
+
+               column.reRegisterPosition();
+       });
+};
+
+//ensure column headers take up the correct amount of space in column groups
+
+ColumnManager.prototype._verticalAlignHeaders = function () {
+
+       var self = this,
+           minHeight = 0;
+
+       self.columns.forEach(function (column) {
+
+               var height;
+
+               column.clearVerticalAlign();
+
+               height = column.getHeight();
+
+               if (height > minHeight) {
+
+                       minHeight = height;
+               }
+       });
+
+       self.columns.forEach(function (column) {
+
+               column.verticalAlign(self.table.options.columnHeaderVertAlign, minHeight);
+       });
+
+       self.rowManager.adjustTableSize();
+};
+
+//////////////// Column Details /////////////////
+
+
+ColumnManager.prototype.findColumn = function (subject) {
+
+       var self = this;
+
+       if ((typeof subject === 'undefined' ? 'undefined' : _typeof(subject)) == "object") {
+
+               if (subject instanceof Column) {
+
+                       //subject is column element
+
+                       return subject;
+               } else if (subject instanceof ColumnComponent) {
+
+                       //subject is public column component
+
+                       return subject._getSelf() || false;
+               } else if (typeof HTMLElement !== "undefined" && subject instanceof HTMLElement) {
+
+                       //subject is a HTML element of the column header
+
+                       var match = self.columns.find(function (column) {
+
+                               return column.element === subject;
+                       });
+
+                       return match || false;
+               }
+       } else {
+
+               //subject should be treated as the field name of the column
+
+               return this.columnsByField[subject] || false;
+       }
+
+       //catch all for any other type of input
+
+
+       return false;
+};
+
+ColumnManager.prototype.getColumnByField = function (field) {
+
+       return this.columnsByField[field];
+};
+
+ColumnManager.prototype.getColumnsByFieldRoot = function (root) {
+       var _this = this;
+
+       var matches = [];
+
+       Object.keys(this.columnsByField).forEach(function (field) {
+
+               var fieldRoot = field.split(".")[0];
+
+               if (fieldRoot === root) {
+
+                       matches.push(_this.columnsByField[field]);
+               }
+       });
+
+       return matches;
+};
+
+ColumnManager.prototype.getColumnByIndex = function (index) {
+
+       return this.columnsByIndex[index];
+};
+
+ColumnManager.prototype.getFirstVisibileColumn = function (index) {
+
+       var index = this.columnsByIndex.findIndex(function (col) {
+
+               return col.visible;
+       });
+
+       return index > -1 ? this.columnsByIndex[index] : false;
+};
+
+ColumnManager.prototype.getColumns = function () {
+
+       return this.columns;
+};
+
+ColumnManager.prototype.findColumnIndex = function (column) {
+
+       return this.columnsByIndex.findIndex(function (col) {
+
+               return column === col;
+       });
+};
+
+//return all columns that are not groups
+
+ColumnManager.prototype.getRealColumns = function () {
+
+       return this.columnsByIndex;
+};
+
+//travers across columns and call action
+
+ColumnManager.prototype.traverse = function (callback) {
+
+       var self = this;
+
+       self.columnsByIndex.forEach(function (column, i) {
+
+               callback(column, i);
+       });
+};
+
+//get defintions of actual columns
+
+ColumnManager.prototype.getDefinitions = function (active) {
+
+       var self = this,
+           output = [];
+
+       self.columnsByIndex.forEach(function (column) {
+
+               if (!active || active && column.visible) {
+
+                       output.push(column.getDefinition());
+               }
+       });
+
+       return output;
+};
+
+//get full nested definition tree
+
+ColumnManager.prototype.getDefinitionTree = function () {
+
+       var self = this,
+           output = [];
+
+       self.columns.forEach(function (column) {
+
+               output.push(column.getDefinition(true));
+       });
+
+       return output;
+};
+
+ColumnManager.prototype.getComponents = function (structured) {
+
+       var self = this,
+           output = [],
+           columns = structured ? self.columns : self.columnsByIndex;
+
+       columns.forEach(function (column) {
+
+               output.push(column.getComponent());
+       });
+
+       return output;
+};
+
+ColumnManager.prototype.getWidth = function () {
+
+       var width = 0;
+
+       this.columnsByIndex.forEach(function (column) {
+
+               if (column.visible) {
+
+                       width += column.getWidth();
+               }
+       });
+
+       return width;
+};
+
+ColumnManager.prototype.moveColumn = function (from, to, after) {
+
+       this.moveColumnActual(from, to, after);
+
+       if (this.table.options.responsiveLayout && this.table.modExists("responsiveLayout", true)) {
+
+               this.table.modules.responsiveLayout.initialize();
+       }
+
+       if (this.table.modExists("columnCalcs")) {
+
+               this.table.modules.columnCalcs.recalc(this.table.rowManager.activeRows);
+       }
+
+       to.element.parentNode.insertBefore(from.element, to.element);
+
+       if (after) {
+
+               to.element.parentNode.insertBefore(to.element, from.element);
+       }
+
+       this._verticalAlignHeaders();
+
+       this.table.rowManager.reinitialize();
+};
+
+ColumnManager.prototype.moveColumnActual = function (from, to, after) {
+
+       if (from.parent.isGroup) {
+
+               this._moveColumnInArray(from.parent.columns, from, to, after);
+       } else {
+
+               this._moveColumnInArray(this.columns, from, to, after);
+       }
+
+       this._moveColumnInArray(this.columnsByIndex, from, to, after, true);
+
+       if (this.table.options.responsiveLayout && this.table.modExists("responsiveLayout", true)) {
+
+               this.table.modules.responsiveLayout.initialize();
+       }
+
+       if (this.table.options.virtualDomHoz) {
+
+               this.table.vdomHoz.reinitialize(true);
+       }
+
+       if (this.table.options.columnMoved) {
+
+               this.table.options.columnMoved.call(this.table, from.getComponent(), this.table.columnManager.getComponents());
+       }
+
+       if (this.table.options.persistence && this.table.modExists("persistence", true) && this.table.modules.persistence.config.columns) {
+
+               this.table.modules.persistence.save("columns");
+       }
+};
+
+ColumnManager.prototype._moveColumnInArray = function (columns, from, to, after, updateRows) {
+       var _this2 = this;
+
+       var fromIndex = columns.indexOf(from),
+           toIndex,
+           rows = [];
+
+       if (fromIndex > -1) {
+
+               columns.splice(fromIndex, 1);
+
+               toIndex = columns.indexOf(to);
+
+               if (toIndex > -1) {
+
+                       if (after) {
+
+                               toIndex = toIndex + 1;
+                       }
+               } else {
+
+                       toIndex = fromIndex;
+               }
+
+               columns.splice(toIndex, 0, from);
+
+               if (updateRows) {
+
+                       if (this.table.options.dataTree && this.table.modExists("dataTree", true)) {
+
+                               this.table.rowManager.rows.forEach(function (row) {
+
+                                       rows = rows.concat(_this2.table.modules.dataTree.getTreeChildren(row, false, true));
+                               });
+                       }
+
+                       rows = rows.concat(this.table.rowManager.rows);
+
+                       rows.forEach(function (row) {
+
+                               if (row.cells.length) {
+
+                                       var cell = row.cells.splice(fromIndex, 1)[0];
+
+                                       row.cells.splice(toIndex, 0, cell);
+                               }
+                       });
+               }
+       }
+};
+
+ColumnManager.prototype.scrollToColumn = function (column, position, ifVisible) {
+       var _this3 = this;
+
+       var left = 0,
+           offset = 0,
+           adjust = 0,
+           colEl = column.getElement();
+
+       return new Promise(function (resolve, reject) {
+
+               if (typeof position === "undefined") {
+
+                       position = _this3.table.options.scrollToColumnPosition;
+               }
+
+               if (typeof ifVisible === "undefined") {
+
+                       ifVisible = _this3.table.options.scrollToColumnIfVisible;
+               }
+
+               if (column.visible) {
+
+                       //align to correct position
+
+                       switch (position) {
+
+                               case "middle":
+
+                               case "center":
+
+                                       adjust = -_this3.element.clientWidth / 2;
+
+                                       break;
+
+                               case "right":
+
+                                       adjust = colEl.clientWidth - _this3.headersElement.clientWidth;
+
+                                       break;
+
+                       }
+
+                       //check column visibility
+
+                       if (!ifVisible) {
+
+                               offset = colEl.offsetLeft;
+
+                               if (offset > 0 && offset + colEl.offsetWidth < _this3.element.clientWidth) {
+
+                                       return false;
+                               }
+                       }
+
+                       //calculate scroll position
+
+                       left = colEl.offsetLeft + adjust;
+
+                       left = Math.max(Math.min(left, _this3.table.rowManager.element.scrollWidth - _this3.table.rowManager.element.clientWidth), 0);
+
+                       _this3.table.rowManager.scrollHorizontal(left);
+
+                       _this3.scrollHorizontal(left);
+
+                       resolve();
+               } else {
+
+                       console.warn("Scroll Error - Column not visible");
+
+                       reject("Scroll Error - Column not visible");
+               }
+       });
+};
+
+//////////////// Cell Management /////////////////
+
+
+ColumnManager.prototype.generateCells = function (row) {
+
+       var self = this;
+
+       var cells = [];
+
+       self.columnsByIndex.forEach(function (column) {
+
+               cells.push(column.generateCell(row));
+       });
+
+       return cells;
+};
+
+//////////////// Column Management /////////////////
+
+
+ColumnManager.prototype.getFlexBaseWidth = function () {
+
+       var self = this,
+           totalWidth = self.table.element.clientWidth,
+           //table element width
+
+       fixedWidth = 0;
+
+       //adjust for vertical scrollbar if present
+
+       if (self.rowManager.element.scrollHeight > self.rowManager.element.clientHeight) {
+
+               totalWidth -= self.rowManager.element.offsetWidth - self.rowManager.element.clientWidth;
+       }
+
+       this.columnsByIndex.forEach(function (column) {
+
+               var width, minWidth, colWidth;
+
+               if (column.visible) {
+
+                       width = column.definition.width || 0;
+
+                       minWidth = typeof column.minWidth == "undefined" ? self.table.options.columnMinWidth : parseInt(column.minWidth);
+
+                       if (typeof width == "string") {
+
+                               if (width.indexOf("%") > -1) {
+
+                                       colWidth = totalWidth / 100 * parseInt(width);
+                               } else {
+
+                                       colWidth = parseInt(width);
+                               }
+                       } else {
+
+                               colWidth = width;
+                       }
+
+                       fixedWidth += colWidth > minWidth ? colWidth : minWidth;
+               }
+       });
+
+       return fixedWidth;
+};
+
+ColumnManager.prototype.addColumn = function (definition, before, nextToColumn) {
+       var _this4 = this;
+
+       return new Promise(function (resolve, reject) {
+
+               var column = _this4._addColumn(definition, before, nextToColumn);
+
+               _this4._reIndexColumns();
+
+               if (_this4.table.options.responsiveLayout && _this4.table.modExists("responsiveLayout", true)) {
+
+                       _this4.table.modules.responsiveLayout.initialize();
+               }
+
+               if (_this4.table.modExists("columnCalcs")) {
+
+                       _this4.table.modules.columnCalcs.recalc(_this4.table.rowManager.activeRows);
+               }
+
+               _this4.redraw();
+
+               if (_this4.table.modules.layout.getMode() != "fitColumns") {
+
+                       column.reinitializeWidth();
+               }
+
+               _this4._verticalAlignHeaders();
+
+               _this4.table.rowManager.reinitialize();
+
+               if (_this4.table.options.virtualDomHoz) {
+
+                       _this4.table.vdomHoz.reinitialize();
+               }
+
+               resolve(column);
+       });
+};
+
+//remove column from system
+
+ColumnManager.prototype.deregisterColumn = function (column) {
+
+       var field = column.getField(),
+           index;
+
+       //remove from field list
+
+       if (field) {
+
+               delete this.columnsByField[field];
+       }
+
+       //remove from index list
+
+       index = this.columnsByIndex.indexOf(column);
+
+       if (index > -1) {
+
+               this.columnsByIndex.splice(index, 1);
+       }
+
+       //remove from column list
+
+       index = this.columns.indexOf(column);
+
+       if (index > -1) {
+
+               this.columns.splice(index, 1);
+       }
+
+       if (this.table.options.responsiveLayout && this.table.modExists("responsiveLayout", true)) {
+
+               this.table.modules.responsiveLayout.initialize();
+       }
+
+       this._verticalAlignHeaders();
+
+       this.redraw();
+};
+
+//redraw columns
+
+ColumnManager.prototype.redraw = function (force) {
+
+       if (force) {
+
+               if (Tabulator.prototype.helpers.elVisible(this.element)) {
+
+                       this._verticalAlignHeaders();
+               }
+
+               this.table.rowManager.resetScroll();
+
+               this.table.rowManager.reinitialize();
+       }
+
+       if (["fitColumns", "fitDataStretch"].indexOf(this.table.modules.layout.getMode()) > -1) {
+
+               this.table.modules.layout.layout();
+       } else {
+
+               if (force) {
+
+                       this.table.modules.layout.layout();
+               } else {
+
+                       if (this.table.options.responsiveLayout && this.table.modExists("responsiveLayout", true)) {
+
+                               this.table.modules.responsiveLayout.update();
+                       }
+               }
+       }
+
+       if (this.table.modExists("frozenColumns")) {
+
+               this.table.modules.frozenColumns.layout();
+       }
+
+       if (this.table.modExists("columnCalcs")) {
+
+               this.table.modules.columnCalcs.recalc(this.table.rowManager.activeRows);
+       }
+
+       if (force) {
+
+               if (this.table.options.persistence && this.table.modExists("persistence", true) && this.table.modules.persistence.config.columns) {
+
+                       this.table.modules.persistence.save("columns");
+               }
+
+               if (this.table.modExists("columnCalcs")) {
+
+                       this.table.modules.columnCalcs.redraw();
+               }
+       }
+
+       this.table.footerManager.redraw();
+};
+
+//public column object
+var ColumnComponent = function ColumnComponent(column) {
+       this._column = column;
+       this.type = "ColumnComponent";
+};
+
+ColumnComponent.prototype.getElement = function () {
+       return this._column.getElement();
+};
+
+ColumnComponent.prototype.getDefinition = function () {
+       return this._column.getDefinition();
+};
+
+ColumnComponent.prototype.getField = function () {
+       return this._column.getField();
+};
+
+ColumnComponent.prototype.getCells = function () {
+       var cells = [];
+
+       this._column.cells.forEach(function (cell) {
+               cells.push(cell.getComponent());
+       });
+
+       return cells;
+};
+
+ColumnComponent.prototype.getVisibility = function () {
+       console.warn("getVisibility function is deprecated, you should now use the isVisible function");
+       return this._column.visible;
+};
+
+ColumnComponent.prototype.isVisible = function () {
+       return this._column.visible;
+};
+
+ColumnComponent.prototype.show = function () {
+       if (this._column.isGroup) {
+               this._column.columns.forEach(function (column) {
+                       column.show();
+               });
+       } else {
+               this._column.show();
+       }
+};
+
+ColumnComponent.prototype.hide = function () {
+       if (this._column.isGroup) {
+               this._column.columns.forEach(function (column) {
+                       column.hide();
+               });
+       } else {
+               this._column.hide();
+       }
+};
+
+ColumnComponent.prototype.toggle = function () {
+       if (this._column.visible) {
+               this.hide();
+       } else {
+               this.show();
+       }
+};
+
+ColumnComponent.prototype.delete = function () {
+       return this._column.delete();
+};
+
+ColumnComponent.prototype.getSubColumns = function () {
+       var output = [];
+
+       if (this._column.columns.length) {
+               this._column.columns.forEach(function (column) {
+                       output.push(column.getComponent());
+               });
+       }
+
+       return output;
+};
+
+ColumnComponent.prototype.getParentColumn = function () {
+       return this._column.parent instanceof Column ? this._column.parent.getComponent() : false;
+};
+
+ColumnComponent.prototype._getSelf = function () {
+       return this._column;
+};
+
+ColumnComponent.prototype.scrollTo = function () {
+       return this._column.table.columnManager.scrollToColumn(this._column);
+};
+
+ColumnComponent.prototype.getTable = function () {
+       return this._column.table;
+};
+
+ColumnComponent.prototype.headerFilterFocus = function () {
+       if (this._column.table.modExists("filter", true)) {
+               this._column.table.modules.filter.setHeaderFilterFocus(this._column);
+       }
+};
+
+ColumnComponent.prototype.reloadHeaderFilter = function () {
+       if (this._column.table.modExists("filter", true)) {
+               this._column.table.modules.filter.reloadHeaderFilter(this._column);
+       }
+};
+
+ColumnComponent.prototype.getHeaderFilterValue = function () {
+       if (this._column.table.modExists("filter", true)) {
+               return this._column.table.modules.filter.getHeaderFilterValue(this._column);
+       }
+};
+
+ColumnComponent.prototype.setHeaderFilterValue = function (value) {
+       if (this._column.table.modExists("filter", true)) {
+               this._column.table.modules.filter.setHeaderFilterValue(this._column, value);
+       }
+};
+
+ColumnComponent.prototype.move = function (to, after) {
+       var toColumn = this._column.table.columnManager.findColumn(to);
+
+       if (toColumn) {
+               this._column.table.columnManager.moveColumn(this._column, toColumn, after);
+       } else {
+               console.warn("Move Error - No matching column found:", toColumn);
+       }
+};
+
+ColumnComponent.prototype.getNextColumn = function () {
+       var nextCol = this._column.nextColumn();
+
+       return nextCol ? nextCol.getComponent() : false;
+};
+
+ColumnComponent.prototype.getPrevColumn = function () {
+       var prevCol = this._column.prevColumn();
+
+       return prevCol ? prevCol.getComponent() : false;
+};
+
+ColumnComponent.prototype.updateDefinition = function (updates) {
+       return this._column.updateDefinition(updates);
+};
+
+ColumnComponent.prototype.getWidth = function () {
+       return this._column.getWidth();
+};
+
+ColumnComponent.prototype.setWidth = function (width) {
+       var result;
+
+       if (width === true) {
+               result = this._column.reinitializeWidth(true);
+       } else {
+               result = this._column.setWidth(width);
+       }
+
+       if (this._column.table.options.virtualDomHoz) {
+               this._column.table.vdomHoz.reinitialize(true);
+       }
+
+       return result;
+};
+
+ColumnComponent.prototype.validate = function () {
+       return this._column.validate();
+};
+
+var Column = function Column(def, parent) {
+       var self = this;
+
+       this.table = parent.table;
+       this.definition = def; //column definition
+       this.parent = parent; //hold parent object
+       this.type = "column"; //type of element
+       this.columns = []; //child columns
+       this.cells = []; //cells bound to this column
+       this.element = this.createElement(); //column header element
+       this.contentElement = false;
+       this.titleHolderElement = false;
+       this.titleElement = false;
+       this.groupElement = this.createGroupElement(); //column group holder element
+       this.isGroup = false;
+       this.tooltip = false; //hold column tooltip
+       this.hozAlign = ""; //horizontal text alignment
+       this.vertAlign = ""; //vert text alignment
+
+       //multi dimensional filed handling
+       this.field = "";
+       this.fieldStructure = "";
+       this.getFieldValue = "";
+       this.setFieldValue = "";
+
+       this.titleFormatterRendered = false;
+
+       this.setField(this.definition.field);
+
+       if (this.table.options.invalidOptionWarnings) {
+               this.checkDefinition();
+       }
+
+       this.modules = {}; //hold module variables;
+
+       this.cellEvents = {
+               cellClick: false,
+               cellDblClick: false,
+               cellContext: false,
+               cellTap: false,
+               cellDblTap: false,
+               cellTapHold: false,
+               cellMouseEnter: false,
+               cellMouseLeave: false,
+               cellMouseOver: false,
+               cellMouseOut: false,
+               cellMouseMove: false
+       };
+
+       this.width = null; //column width
+       this.widthStyled = ""; //column width prestyled to improve render efficiency
+       this.minWidth = null; //column minimum width
+       this.minWidthStyled = ""; //column minimum prestyled to improve render efficiency
+       this.widthFixed = false; //user has specified a width for this column
+
+       this.visible = true; //default visible state
+
+       this.component = null;
+
+       this._mapDepricatedFunctionality();
+
+       //initialize column
+       if (def.columns) {
+
+               this.isGroup = true;
+
+               def.columns.forEach(function (def, i) {
+                       var newCol = new Column(def, self);
+                       self.attachColumn(newCol);
+               });
+
+               self.checkColumnVisibility();
+       } else {
+               parent.registerColumnField(this);
+       }
+
+       if (def.rowHandle && this.table.options.movableRows !== false && this.table.modExists("moveRow")) {
+               this.table.modules.moveRow.setHandle(true);
+       }
+
+       this._buildHeader();
+
+       this.bindModuleColumns();
+};
+
+Column.prototype.createElement = function () {
+       var el = document.createElement("div");
+
+       el.classList.add("tabulator-col");
+       el.setAttribute("role", "columnheader");
+       el.setAttribute("aria-sort", "none");
+
+       return el;
+};
+
+Column.prototype.createGroupElement = function () {
+       var el = document.createElement("div");
+
+       el.classList.add("tabulator-col-group-cols");
+
+       return el;
+};
+
+Column.prototype.checkDefinition = function () {
+       var _this5 = this;
+
+       Object.keys(this.definition).forEach(function (key) {
+               if (_this5.defaultOptionList.indexOf(key) === -1) {
+                       console.warn("Invalid column definition option in '" + (_this5.field || _this5.definition.title) + "' column:", key);
+               }
+       });
+};
+
+Column.prototype.setField = function (field) {
+       this.field = field;
+       this.fieldStructure = field ? this.table.options.nestedFieldSeparator ? field.split(this.table.options.nestedFieldSeparator) : [field] : [];
+       this.getFieldValue = this.fieldStructure.length > 1 ? this._getNestedData : this._getFlatData;
+       this.setFieldValue = this.fieldStructure.length > 1 ? this._setNestedData : this._setFlatData;
+};
+
+//register column position with column manager
+Column.prototype.registerColumnPosition = function (column) {
+       this.parent.registerColumnPosition(column);
+};
+
+//register column position with column manager
+Column.prototype.registerColumnField = function (column) {
+       this.parent.registerColumnField(column);
+};
+
+//trigger position registration
+Column.prototype.reRegisterPosition = function () {
+       if (this.isGroup) {
+               this.columns.forEach(function (column) {
+                       column.reRegisterPosition();
+               });
+       } else {
+               this.registerColumnPosition(this);
+       }
+};
+
+Column.prototype._mapDepricatedFunctionality = function () {
+       if (typeof this.definition.hideInHtml !== "undefined") {
+               this.definition.htmlOutput = !this.definition.hideInHtml;
+               console.warn("hideInHtml column definition property is deprecated, you should now use htmlOutput");
+       }
+
+       if (typeof this.definition.align !== "undefined") {
+               this.definition.hozAlign = this.definition.align;
+               console.warn("align column definition property is deprecated, you should now use hozAlign");
+       }
+
+       if (typeof this.definition.downloadTitle !== "undefined") {
+               this.definition.titleDownload = this.definition.downloadTitle;
+               console.warn("downloadTitle definition property is deprecated, you should now use titleDownload");
+       }
+};
+
+Column.prototype.setTooltip = function () {
+       var self = this,
+           def = self.definition;
+
+       //set header tooltips
+       var tooltip = def.headerTooltip || def.tooltip === false ? def.headerTooltip : self.table.options.tooltipsHeader;
+
+       if (tooltip) {
+               if (tooltip === true) {
+                       if (def.field) {
+                               self.table.modules.localize.bind("columns|" + def.field, function (value) {
+                                       self.element.setAttribute("title", value || def.title);
+                               });
+                       } else {
+                               self.element.setAttribute("title", def.title);
+                       }
+               } else {
+                       if (typeof tooltip == "function") {
+                               tooltip = tooltip(self.getComponent());
+
+                               if (tooltip === false) {
+                                       tooltip = "";
+                               }
+                       }
+
+                       self.element.setAttribute("title", tooltip);
+               }
+       } else {
+               self.element.setAttribute("title", "");
+       }
+};
+
+//build header element
+Column.prototype._buildHeader = function () {
+       var self = this,
+           def = self.definition;
+
+       while (self.element.firstChild) {
+               self.element.removeChild(self.element.firstChild);
+       }if (def.headerVertical) {
+               self.element.classList.add("tabulator-col-vertical");
+
+               if (def.headerVertical === "flip") {
+                       self.element.classList.add("tabulator-col-vertical-flip");
+               }
+       }
+
+       self.contentElement = self._bindEvents();
+
+       self.contentElement = self._buildColumnHeaderContent();
+
+       self.element.appendChild(self.contentElement);
+
+       if (self.isGroup) {
+               self._buildGroupHeader();
+       } else {
+               self._buildColumnHeader();
+       }
+
+       self.setTooltip();
+
+       //set resizable handles
+       if (self.table.options.resizableColumns && self.table.modExists("resizeColumns")) {
+               self.table.modules.resizeColumns.initializeColumn("header", self, self.element);
+       }
+
+       //set resizable handles
+       if (def.headerFilter && self.table.modExists("filter") && self.table.modExists("edit")) {
+               if (typeof def.headerFilterPlaceholder !== "undefined" && def.field) {
+                       self.table.modules.localize.setHeaderFilterColumnPlaceholder(def.field, def.headerFilterPlaceholder);
+               }
+
+               self.table.modules.filter.initializeColumn(self);
+       }
+
+       //set resizable handles
+       if (self.table.modExists("frozenColumns")) {
+               self.table.modules.frozenColumns.initializeColumn(self);
+       }
+
+       //set movable column
+       if (self.table.options.movableColumns && !self.isGroup && self.table.modExists("moveColumn")) {
+               self.table.modules.moveColumn.initializeColumn(self);
+       }
+
+       //set calcs column
+       if ((def.topCalc || def.bottomCalc) && self.table.modExists("columnCalcs")) {
+               self.table.modules.columnCalcs.initializeColumn(self);
+       }
+
+       //handle persistence
+       if (self.table.modExists("persistence") && self.table.modules.persistence.config.columns) {
+               self.table.modules.persistence.initializeColumn(self);
+       }
+
+       //update header tooltip on mouse enter
+       self.element.addEventListener("mouseenter", function (e) {
+               self.setTooltip();
+       });
+};
+
+Column.prototype._bindEvents = function () {
+
+       var self = this,
+           def = self.definition,
+           dblTap,
+           tapHold,
+           tap;
+
+       //setup header click event bindings
+       if (typeof def.headerClick == "function") {
+               self.element.addEventListener("click", function (e) {
+                       def.headerClick(e, self.getComponent());
+               });
+       }
+
+       if (typeof def.headerDblClick == "function") {
+               self.element.addEventListener("dblclick", function (e) {
+                       def.headerDblClick(e, self.getComponent());
+               });
+       }
+
+       if (typeof def.headerContext == "function") {
+               self.element.addEventListener("contextmenu", function (e) {
+                       def.headerContext(e, self.getComponent());
+               });
+       }
+
+       //setup header tap event bindings
+       if (typeof def.headerTap == "function") {
+               tap = false;
+
+               self.element.addEventListener("touchstart", function (e) {
+                       tap = true;
+               }, { passive: true });
+
+               self.element.addEventListener("touchend", function (e) {
+                       if (tap) {
+                               def.headerTap(e, self.getComponent());
+                       }
+
+                       tap = false;
+               });
+       }
+
+       if (typeof def.headerDblTap == "function") {
+               dblTap = null;
+
+               self.element.addEventListener("touchend", function (e) {
+
+                       if (dblTap) {
+                               clearTimeout(dblTap);
+                               dblTap = null;
+
+                               def.headerDblTap(e, self.getComponent());
+                       } else {
+
+                               dblTap = setTimeout(function () {
+                                       clearTimeout(dblTap);
+                                       dblTap = null;
+                               }, 300);
+                       }
+               });
+       }
+
+       if (typeof def.headerTapHold == "function") {
+               tapHold = null;
+
+               self.element.addEventListener("touchstart", function (e) {
+                       clearTimeout(tapHold);
+
+                       tapHold = setTimeout(function () {
+                               clearTimeout(tapHold);
+                               tapHold = null;
+                               tap = false;
+                               def.headerTapHold(e, self.getComponent());
+                       }, 1000);
+               }, { passive: true });
+
+               self.element.addEventListener("touchend", function (e) {
+                       clearTimeout(tapHold);
+                       tapHold = null;
+               });
+       }
+
+       //store column cell click event bindings
+       if (typeof def.cellClick == "function") {
+               self.cellEvents.cellClick = def.cellClick;
+       }
+
+       if (typeof def.cellDblClick == "function") {
+               self.cellEvents.cellDblClick = def.cellDblClick;
+       }
+
+       if (typeof def.cellContext == "function") {
+               self.cellEvents.cellContext = def.cellContext;
+       }
+
+       //store column mouse event bindings
+       if (typeof def.cellMouseEnter == "function") {
+               self.cellEvents.cellMouseEnter = def.cellMouseEnter;
+       }
+
+       if (typeof def.cellMouseLeave == "function") {
+               self.cellEvents.cellMouseLeave = def.cellMouseLeave;
+       }
+
+       if (typeof def.cellMouseOver == "function") {
+               self.cellEvents.cellMouseOver = def.cellMouseOver;
+       }
+
+       if (typeof def.cellMouseOut == "function") {
+               self.cellEvents.cellMouseOut = def.cellMouseOut;
+       }
+
+       if (typeof def.cellMouseMove == "function") {
+               self.cellEvents.cellMouseMove = def.cellMouseMove;
+       }
+
+       //setup column cell tap event bindings
+       if (typeof def.cellTap == "function") {
+               self.cellEvents.cellTap = def.cellTap;
+       }
+
+       if (typeof def.cellDblTap == "function") {
+               self.cellEvents.cellDblTap = def.cellDblTap;
+       }
+
+       if (typeof def.cellTapHold == "function") {
+               self.cellEvents.cellTapHold = def.cellTapHold;
+       }
+
+       //setup column cell edit callbacks
+       if (typeof def.cellEdited == "function") {
+               self.cellEvents.cellEdited = def.cellEdited;
+       }
+
+       if (typeof def.cellEditing == "function") {
+               self.cellEvents.cellEditing = def.cellEditing;
+       }
+
+       if (typeof def.cellEditCancelled == "function") {
+               self.cellEvents.cellEditCancelled = def.cellEditCancelled;
+       }
+};
+
+//build header element for header
+Column.prototype._buildColumnHeader = function () {
+       var _this6 = this;
+
+       var def = this.definition,
+           table = this.table,
+           sortable;
+
+       //set column sorter
+       if (table.modExists("sort")) {
+               table.modules.sort.initializeColumn(this, this.titleHolderElement);
+       }
+
+       //set column header context menu
+       if ((def.headerContextMenu || def.headerClickMenu || def.headerMenu) && table.modExists("menu")) {
+               table.modules.menu.initializeColumnHeader(this);
+       }
+
+       //set column formatter
+       if (table.modExists("format")) {
+               table.modules.format.initializeColumn(this);
+       }
+
+       //set column editor
+       if (typeof def.editor != "undefined" && table.modExists("edit")) {
+               table.modules.edit.initializeColumn(this);
+       }
+
+       //set colum validator
+       if (typeof def.validator != "undefined" && table.modExists("validate")) {
+               table.modules.validate.initializeColumn(this);
+       }
+
+       //set column mutator
+       if (table.modExists("mutator")) {
+               table.modules.mutator.initializeColumn(this);
+       }
+
+       //set column accessor
+       if (table.modExists("accessor")) {
+               table.modules.accessor.initializeColumn(this);
+       }
+
+       //set respoviveLayout
+       if (_typeof(table.options.responsiveLayout) && table.modExists("responsiveLayout")) {
+               table.modules.responsiveLayout.initializeColumn(this);
+       }
+
+       //set column visibility
+       if (typeof def.visible != "undefined") {
+               if (def.visible) {
+                       this.show(true);
+               } else {
+                       this.hide(true);
+               }
+       }
+
+       //asign additional css classes to column header
+       if (def.cssClass) {
+               var classeNames = def.cssClass.split(" ");
+               classeNames.forEach(function (className) {
+                       _this6.element.classList.add(className);
+               });
+       }
+
+       if (def.field) {
+               this.element.setAttribute("tabulator-field", def.field);
+       }
+
+       //set min width if present
+       this.setMinWidth(typeof def.minWidth == "undefined" ? this.table.options.columnMinWidth : parseInt(def.minWidth));
+
+       this.reinitializeWidth();
+
+       //set tooltip if present
+       this.tooltip = this.definition.tooltip || this.definition.tooltip === false ? this.definition.tooltip : this.table.options.tooltips;
+
+       //set orizontal text alignment
+       this.hozAlign = typeof this.definition.hozAlign == "undefined" ? this.table.options.cellHozAlign : this.definition.hozAlign;
+       this.vertAlign = typeof this.definition.vertAlign == "undefined" ? this.table.options.cellVertAlign : this.definition.vertAlign;
+
+       this.titleElement.style.textAlign = this.definition.headerHozAlign || this.table.options.headerHozAlign;
+};
+
+Column.prototype._buildColumnHeaderContent = function () {
+       var def = this.definition,
+           table = this.table;
+
+       var contentElement = document.createElement("div");
+       contentElement.classList.add("tabulator-col-content");
+
+       this.titleHolderElement = document.createElement("div");
+       this.titleHolderElement.classList.add("tabulator-col-title-holder");
+
+       contentElement.appendChild(this.titleHolderElement);
+
+       this.titleElement = this._buildColumnHeaderTitle();
+
+       this.titleHolderElement.appendChild(this.titleElement);
+
+       return contentElement;
+};
+
+//build title element of column
+Column.prototype._buildColumnHeaderTitle = function () {
+       var self = this,
+           def = self.definition,
+           table = self.table,
+           title;
+
+       var titleHolderElement = document.createElement("div");
+       titleHolderElement.classList.add("tabulator-col-title");
+
+       if (def.editableTitle) {
+               var titleElement = document.createElement("input");
+               titleElement.classList.add("tabulator-title-editor");
+
+               titleElement.addEventListener("click", function (e) {
+                       e.stopPropagation();
+                       titleElement.focus();
+               });
+
+               titleElement.addEventListener("change", function () {
+                       def.title = titleElement.value;
+                       table.options.columnTitleChanged.call(self.table, self.getComponent());
+               });
+
+               titleHolderElement.appendChild(titleElement);
+
+               if (def.field) {
+                       table.modules.localize.bind("columns|" + def.field, function (text) {
+                               titleElement.value = text || def.title || "&nbsp;";
+                       });
+               } else {
+                       titleElement.value = def.title || "&nbsp;";
+               }
+       } else {
+               if (def.field) {
+                       table.modules.localize.bind("columns|" + def.field, function (text) {
+                               self._formatColumnHeaderTitle(titleHolderElement, text || def.title || "&nbsp;");
+                       });
+               } else {
+                       self._formatColumnHeaderTitle(titleHolderElement, def.title || "&nbsp;");
+               }
+       }
+
+       return titleHolderElement;
+};
+
+Column.prototype._formatColumnHeaderTitle = function (el, title) {
+       var _this7 = this;
+
+       var formatter, contents, params, mockCell, onRendered;
+
+       if (this.definition.titleFormatter && this.table.modExists("format")) {
+
+               formatter = this.table.modules.format.getFormatter(this.definition.titleFormatter);
+
+               onRendered = function onRendered(callback) {
+                       _this7.titleFormatterRendered = callback;
+               };
+
+               mockCell = {
+                       getValue: function getValue() {
+                               return title;
+                       },
+                       getElement: function getElement() {
+                               return el;
+                       }
+               };
+
+               params = this.definition.titleFormatterParams || {};
+
+               params = typeof params === "function" ? params() : params;
+
+               contents = formatter.call(this.table.modules.format, mockCell, params, onRendered);
+
+               switch (typeof contents === 'undefined' ? 'undefined' : _typeof(contents)) {
+                       case "object":
+                               if (contents instanceof Node) {
+                                       el.appendChild(contents);
+                               } else {
+                                       el.innerHTML = "";
+                                       console.warn("Format Error - Title formatter has returned a type of object, the only valid formatter object return is an instance of Node, the formatter returned:", contents);
+                               }
+                               break;
+                       case "undefined":
+                       case "null":
+                               el.innerHTML = "";
+                               break;
+                       default:
+                               el.innerHTML = contents;
+               }
+       } else {
+               el.innerHTML = title;
+       }
+};
+
+//build header element for column group
+Column.prototype._buildGroupHeader = function () {
+       var _this8 = this;
+
+       this.element.classList.add("tabulator-col-group");
+       this.element.setAttribute("role", "columngroup");
+       this.element.setAttribute("aria-title", this.definition.title);
+
+       //asign additional css classes to column header
+       if (this.definition.cssClass) {
+               var classeNames = this.definition.cssClass.split(" ");
+               classeNames.forEach(function (className) {
+                       _this8.element.classList.add(className);
+               });
+       }
+
+       //set column header context menu
+       if ((this.definition.headerContextMenu || this.definition.headerMenu) && this.table.modExists("menu")) {
+               this.table.modules.menu.initializeColumnHeader(this);
+       }
+
+       this.element.appendChild(this.groupElement);
+};
+
+//flat field lookup
+Column.prototype._getFlatData = function (data) {
+       return data[this.field];
+};
+
+//nested field lookup
+Column.prototype._getNestedData = function (data) {
+       var dataObj = data,
+           structure = this.fieldStructure,
+           length = structure.length,
+           output;
+
+       for (var _i = 0; _i < length; _i++) {
+
+               dataObj = dataObj[structure[_i]];
+
+               output = dataObj;
+
+               if (!dataObj) {
+                       break;
+               }
+       }
+
+       return output;
+};
+
+//flat field set
+Column.prototype._setFlatData = function (data, value) {
+       if (this.field) {
+               data[this.field] = value;
+       }
+};
+
+//nested field set
+Column.prototype._setNestedData = function (data, value) {
+       var dataObj = data,
+           structure = this.fieldStructure,
+           length = structure.length;
+
+       for (var _i2 = 0; _i2 < length; _i2++) {
+
+               if (_i2 == length - 1) {
+                       dataObj[structure[_i2]] = value;
+               } else {
+                       if (!dataObj[structure[_i2]]) {
+                               if (typeof value !== "undefined") {
+                                       dataObj[structure[_i2]] = {};
+                               } else {
+                                       break;
+                               }
+                       }
+
+                       dataObj = dataObj[structure[_i2]];
+               }
+       }
+};
+
+//attach column to this group
+Column.prototype.attachColumn = function (column) {
+       var self = this;
+
+       if (self.groupElement) {
+               self.columns.push(column);
+               self.groupElement.appendChild(column.getElement());
+       } else {
+               console.warn("Column Warning - Column being attached to another column instead of column group");
+       }
+};
+
+//vertically align header in column
+Column.prototype.verticalAlign = function (alignment, height) {
+
+       //calculate height of column header and group holder element
+       var parentHeight = this.parent.isGroup ? this.parent.getGroupElement().clientHeight : height || this.parent.getHeadersElement().clientHeight;
+       // var parentHeight = this.parent.isGroup ? this.parent.getGroupElement().clientHeight : this.parent.getHeadersElement().clientHeight;
+
+       this.element.style.height = parentHeight + "px";
+
+       if (this.isGroup) {
+               this.groupElement.style.minHeight = parentHeight - this.contentElement.offsetHeight + "px";
+       }
+
+       //vertically align cell contents
+       if (!this.isGroup && alignment !== "top") {
+               if (alignment === "bottom") {
+                       this.element.style.paddingTop = this.element.clientHeight - this.contentElement.offsetHeight + "px";
+               } else {
+                       this.element.style.paddingTop = (this.element.clientHeight - this.contentElement.offsetHeight) / 2 + "px";
+               }
+       }
+
+       this.columns.forEach(function (column) {
+               column.verticalAlign(alignment);
+       });
+};
+
+//clear vertical alignmenet
+Column.prototype.clearVerticalAlign = function () {
+       this.element.style.paddingTop = "";
+       this.element.style.height = "";
+       this.element.style.minHeight = "";
+       this.groupElement.style.minHeight = "";
+
+       this.columns.forEach(function (column) {
+               column.clearVerticalAlign();
+       });
+};
+
+Column.prototype.bindModuleColumns = function () {
+       //check if rownum formatter is being used on a column
+       if (this.definition.formatter == "rownum") {
+               this.table.rowManager.rowNumColumn = this;
+       }
+};
+
+//// Retreive Column Information ////
+
+//return column header element
+Column.prototype.getElement = function () {
+       return this.element;
+};
+
+//return colunm group element
+Column.prototype.getGroupElement = function () {
+       return this.groupElement;
+};
+
+//return field name
+Column.prototype.getField = function () {
+       return this.field;
+};
+
+//return the first column in a group
+Column.prototype.getFirstColumn = function () {
+       if (!this.isGroup) {
+               return this;
+       } else {
+               if (this.columns.length) {
+                       return this.columns[0].getFirstColumn();
+               } else {
+                       return false;
+               }
+       }
+};
+
+//return the last column in a group
+Column.prototype.getLastColumn = function () {
+       if (!this.isGroup) {
+               return this;
+       } else {
+               if (this.columns.length) {
+                       return this.columns[this.columns.length - 1].getLastColumn();
+               } else {
+                       return false;
+               }
+       }
+};
+
+//return all columns in a group
+Column.prototype.getColumns = function () {
+       return this.columns;
+};
+
+//return all columns in a group
+Column.prototype.getCells = function () {
+       return this.cells;
+};
+
+//retreive the top column in a group of columns
+Column.prototype.getTopColumn = function () {
+       if (this.parent.isGroup) {
+               return this.parent.getTopColumn();
+       } else {
+               return this;
+       }
+};
+
+//return column definition object
+Column.prototype.getDefinition = function (updateBranches) {
+       var colDefs = [];
+
+       if (this.isGroup && updateBranches) {
+               this.columns.forEach(function (column) {
+                       colDefs.push(column.getDefinition(true));
+               });
+
+               this.definition.columns = colDefs;
+       }
+
+       return this.definition;
+};
+
+//////////////////// Actions ////////////////////
+
+Column.prototype.checkColumnVisibility = function () {
+       var visible = false;
+
+       this.columns.forEach(function (column) {
+               if (column.visible) {
+                       visible = true;
+               }
+       });
+
+       if (visible) {
+               this.show();
+               this.parent.table.options.columnVisibilityChanged.call(this.table, this.getComponent(), false);
+       } else {
+               this.hide();
+       }
+};
+
+//show column
+Column.prototype.show = function (silent, responsiveToggle) {
+       if (!this.visible) {
+               this.visible = true;
+
+               this.element.style.display = "";
+
+               if (this.parent.isGroup) {
+                       this.parent.checkColumnVisibility();
+               }
+
+               this.cells.forEach(function (cell) {
+                       cell.show();
+               });
+
+               if (!this.isGroup && this.width === null) {
+                       this.reinitializeWidth();
+               }
+
+               this.table.columnManager._verticalAlignHeaders();
+
+               if (this.table.options.persistence && this.table.modExists("persistence", true) && this.table.modules.persistence.config.columns) {
+                       this.table.modules.persistence.save("columns");
+               }
+
+               if (!responsiveToggle && this.table.options.responsiveLayout && this.table.modExists("responsiveLayout", true)) {
+                       this.table.modules.responsiveLayout.updateColumnVisibility(this, this.visible);
+               }
+
+               if (!silent) {
+                       this.table.options.columnVisibilityChanged.call(this.table, this.getComponent(), true);
+               }
+
+               if (this.parent.isGroup) {
+                       this.parent.matchChildWidths();
+               }
+       }
+};
+
+//hide column
+Column.prototype.hide = function (silent, responsiveToggle) {
+       if (this.visible) {
+               this.visible = false;
+
+               this.element.style.display = "none";
+
+               this.table.columnManager._verticalAlignHeaders();
+
+               if (this.parent.isGroup) {
+                       this.parent.checkColumnVisibility();
+               }
+
+               this.cells.forEach(function (cell) {
+                       cell.hide();
+               });
+
+               if (this.table.options.persistence && this.table.modExists("persistence", true) && this.table.modules.persistence.config.columns) {
+                       this.table.modules.persistence.save("columns");
+               }
+
+               if (!responsiveToggle && this.table.options.responsiveLayout && this.table.modExists("responsiveLayout", true)) {
+                       this.table.modules.responsiveLayout.updateColumnVisibility(this, this.visible);
+               }
+
+               if (!silent) {
+                       this.table.options.columnVisibilityChanged.call(this.table, this.getComponent(), false);
+               }
+
+               if (this.parent.isGroup) {
+                       this.parent.matchChildWidths();
+               }
+       }
+};
+
+Column.prototype.matchChildWidths = function () {
+       var childWidth = 0;
+
+       if (this.contentElement && this.columns.length) {
+               this.columns.forEach(function (column) {
+                       if (column.visible) {
+                               childWidth += column.getWidth();
+                       }
+               });
+
+               this.contentElement.style.maxWidth = childWidth - 1 + "px";
+
+               if (this.parent.isGroup) {
+                       this.parent.matchChildWidths();
+               }
+       }
+};
+
+Column.prototype.setWidth = function (width) {
+       this.widthFixed = true;
+       this.setWidthActual(width);
+};
+
+Column.prototype.setWidthActual = function (width) {
+       if (isNaN(width)) {
+               width = Math.floor(this.table.element.clientWidth / 100 * parseInt(width));
+       }
+
+       width = Math.max(this.minWidth, width);
+
+       this.width = width;
+       this.widthStyled = width ? width + "px" : "";
+
+       this.element.style.width = this.widthStyled;
+
+       if (!this.isGroup) {
+               this.cells.forEach(function (cell) {
+                       cell.setWidth();
+               });
+       }
+
+       if (this.parent.isGroup) {
+               this.parent.matchChildWidths();
+       }
+
+       //set resizable handles
+       if (this.table.modExists("frozenColumns")) {
+               this.table.modules.frozenColumns.layout();
+       }
+};
+
+Column.prototype.checkCellHeights = function () {
+       var rows = [];
+
+       this.cells.forEach(function (cell) {
+               if (cell.row.heightInitialized) {
+                       if (cell.row.getElement().offsetParent !== null) {
+                               rows.push(cell.row);
+                               cell.row.clearCellHeight();
+                       } else {
+                               cell.row.heightInitialized = false;
+                       }
+               }
+       });
+
+       rows.forEach(function (row) {
+               row.calcHeight();
+       });
+
+       rows.forEach(function (row) {
+               row.setCellHeight();
+       });
+};
+
+Column.prototype.getWidth = function () {
+       var width = 0;
+
+       if (this.isGroup) {
+               this.columns.forEach(function (column) {
+                       if (column.visible) {
+                               width += column.getWidth();
+                       }
+               });
+       } else {
+               width = this.width;
+       }
+
+       return width;
+};
+
+Column.prototype.getHeight = function () {
+       return this.element.offsetHeight;
+};
+
+Column.prototype.setMinWidth = function (minWidth) {
+       this.minWidth = minWidth;
+       this.minWidthStyled = minWidth ? minWidth + "px" : "";
+
+       this.element.style.minWidth = this.minWidthStyled;
+
+       this.cells.forEach(function (cell) {
+               cell.setMinWidth();
+       });
+};
+
+Column.prototype.delete = function () {
+       var _this9 = this;
+
+       return new Promise(function (resolve, reject) {
+
+               if (_this9.isGroup) {
+                       _this9.columns.forEach(function (column) {
+                               column.delete();
+                       });
+               }
+
+               //cancel edit if column is currently being edited
+               if (_this9.table.modExists("edit")) {
+                       if (_this9.table.modules.edit.currentCell.column === _this9) {
+                               _this9.table.modules.edit.cancelEdit();
+                       }
+               }
+
+               var cellCount = _this9.cells.length;
+
+               for (var _i3 = 0; _i3 < cellCount; _i3++) {
+                       _this9.cells[0].delete();
+               }
+
+               if (_this9.element.parentNode) {
+                       _this9.element.parentNode.removeChild(_this9.element);
+               }
+
+               _this9.element = false;
+               _this9.contentElement = false;
+               _this9.titleElement = false;
+               _this9.groupElement = false;
+
+               _this9.table.columnManager.deregisterColumn(_this9);
+
+               if (_this9.table.options.virtualDomHoz) {
+                       _this9.table.vdomHoz.reinitialize(true);
+               }
+
+               resolve();
+       });
+};
+
+Column.prototype.columnRendered = function () {
+       if (this.titleFormatterRendered) {
+               this.titleFormatterRendered();
+       }
+};
+
+Column.prototype.validate = function () {
+       var invalid = [];
+
+       this.cells.forEach(function (cell) {
+               if (!cell.validate()) {
+                       invalid.push(cell.getComponent());
+               }
+       });
+
+       return invalid.length ? invalid : true;
+};
+
+//////////////// Cell Management /////////////////
+
+//generate cell for this column
+Column.prototype.generateCell = function (row) {
+       var self = this;
+
+       var cell = new Cell(self, row);
+
+       this.cells.push(cell);
+
+       return cell;
+};
+
+Column.prototype.nextColumn = function () {
+       var index = this.table.columnManager.findColumnIndex(this);
+       return index > -1 ? this._nextVisibleColumn(index + 1) : false;
+};
+
+Column.prototype._nextVisibleColumn = function (index) {
+       var column = this.table.columnManager.getColumnByIndex(index);
+       return !column || column.visible ? column : this._nextVisibleColumn(index + 1);
+};
+
+Column.prototype.prevColumn = function () {
+       var index = this.table.columnManager.findColumnIndex(this);
+       return index > -1 ? this._prevVisibleColumn(index - 1) : false;
+};
+
+Column.prototype._prevVisibleColumn = function (index) {
+       var column = this.table.columnManager.getColumnByIndex(index);
+       return !column || column.visible ? column : this._prevVisibleColumn(index - 1);
+};
+
+Column.prototype.reinitializeWidth = function (force) {
+       this.widthFixed = false;
+
+       //set width if present
+       if (typeof this.definition.width !== "undefined" && !force) {
+               this.setWidth(this.definition.width);
+       }
+
+       //hide header filters to prevent them altering column width
+       if (this.table.modExists("filter")) {
+               this.table.modules.filter.hideHeaderFilterElements();
+       }
+
+       this.fitToData();
+
+       //show header filters again after layout is complete
+       if (this.table.modExists("filter")) {
+               this.table.modules.filter.showHeaderFilterElements();
+       }
+};
+
+//set column width to maximum cell width
+Column.prototype.fitToData = function () {
+       var self = this;
+
+       if (!this.widthFixed) {
+               this.element.style.width = "";
+
+               self.cells.forEach(function (cell) {
+                       cell.clearWidth();
+               });
+       }
+
+       var maxWidth = this.element.offsetWidth;
+
+       if (!self.width || !this.widthFixed) {
+               self.cells.forEach(function (cell) {
+                       var width = cell.getWidth();
+
+                       if (width > maxWidth) {
+                               maxWidth = width;
+                       }
+               });
+
+               if (maxWidth) {
+                       self.setWidthActual(maxWidth + 1);
+               }
+       }
+};
+
+Column.prototype.updateDefinition = function (updates) {
+       var _this10 = this;
+
+       return new Promise(function (resolve, reject) {
+               var definition;
+
+               if (!_this10.isGroup) {
+                       definition = Object.assign({}, _this10.getDefinition());
+                       definition = Object.assign(definition, updates);
+
+                       _this10.table.columnManager.addColumn(definition, false, _this10).then(function (column) {
+
+                               if (definition.field == _this10.field) {
+                                       _this10.field = false; //cleair field name to prevent deletion of duplicate column from arrays
+                               }
+
+                               _this10.delete().then(function () {
+                                       resolve(column.getComponent());
+                               }).catch(function (err) {
+                                       reject(err);
+                               });
+                       }).catch(function (err) {
+                               reject(err);
+                       });
+               } else {
+                       console.warn("Column Update Error - The updateDefinition function is only available on columns, not column groups");
+                       reject("Column Update Error - The updateDefinition function is only available on columns, not column groups");
+               }
+       });
+};
+
+Column.prototype.deleteCell = function (cell) {
+       var index = this.cells.indexOf(cell);
+
+       if (index > -1) {
+               this.cells.splice(index, 1);
+       }
+};
+
+Column.prototype.defaultOptionList = ["title", "field", "columns", "visible", "align", "hozAlign", "vertAlign", "width", "minWidth", "widthGrow", "widthShrink", "resizable", "frozen", "responsive", "tooltip", "cssClass", "rowHandle", "hideInHtml", "print", "htmlOutput", "sorter", "sorterParams", "formatter", "formatterParams", "variableHeight", "editable", "editor", "editorParams", "validator", "mutator", "mutatorParams", "mutatorData", "mutatorDataParams", "mutatorEdit", "mutatorEditParams", "mutatorClipboard", "mutatorClipboardParams", "accessor", "accessorParams", "accessorData", "accessorDataParams", "accessorDownload", "accessorDownloadParams", "accessorClipboard", "accessorClipboardParams", "accessorPrint", "accessorPrintParams", "accessorHtmlOutput", "accessorHtmlOutputParams", "clipboard", "download", "downloadTitle", "topCalc", "topCalcParams", "topCalcFormatter", "topCalcFormatterParams", "bottomCalc", "bottomCalcParams", "bottomCalcFormatter", "bottomCalcFormatterParams", "cellClick", "cellDblClick", "cellContext", "cellTap", "cellDblTap", "cellTapHold", "cellMouseEnter", "cellMouseLeave", "cellMouseOver", "cellMouseOut", "cellMouseMove", "cellEditing", "cellEdited", "cellEditCancelled", "headerSort", "headerSortStartingDir", "headerSortTristate", "headerClick", "headerDblClick", "headerContext", "headerTap", "headerDblTap", "headerTapHold", "headerTooltip", "headerVertical", "headerHozAlign", "editableTitle", "titleFormatter", "titleFormatterParams", "headerFilter", "headerFilterPlaceholder", "headerFilterParams", "headerFilterEmptyCheck", "headerFilterFunc", "headerFilterFuncParams", "headerFilterLiveFilter", "print", "headerContextMenu", "headerMenu", "contextMenu",
+// "headerClickMenu",
+"clickMenu", "formatterPrint", "formatterPrintParams", "formatterClipboard", "formatterClipboardParams", "formatterHtmlOutput", "formatterHtmlOutputParams", "titlePrint", "titleClipboard", "titleHtmlOutput", "titleDownload"];
+
+//////////////// Event Bindings /////////////////
+
+//////////////// Object Generation /////////////////
+Column.prototype.getComponent = function () {
+       if (!this.component) {
+               this.component = new ColumnComponent(this);
+       }
+
+       return this.component;
+};
+
+var RowManager = function RowManager(table) {
+
+       this.table = table;
+       this.element = this.createHolderElement(); //containing element
+       this.tableElement = this.createTableElement(); //table element
+       this.heightFixer = this.createTableElement(); //table element
+       this.columnManager = null; //hold column manager object
+       this.height = 0; //hold height of table element
+
+       this.firstRender = false; //handle first render
+       this.renderMode = "virtual"; //current rendering mode
+       this.fixedHeight = false; //current rendering mode
+
+       this.rows = []; //hold row data objects
+       this.activeRows = []; //rows currently available to on display in the table
+       this.activeRowsCount = 0; //count of active rows
+
+       this.displayRows = []; //rows currently on display in the table
+       this.displayRowsCount = 0; //count of display rows
+
+       this.scrollTop = 0;
+       this.scrollLeft = 0;
+
+       this.vDomRowHeight = 20; //approximation of row heights for padding
+
+       this.vDomTop = 0; //hold position for first rendered row in the virtual DOM
+       this.vDomBottom = 0; //hold possition for last rendered row in the virtual DOM
+
+       this.vDomScrollPosTop = 0; //last scroll position of the vDom top;
+       this.vDomScrollPosBottom = 0; //last scroll position of the vDom bottom;
+
+       this.vDomTopPad = 0; //hold value of padding for top of virtual DOM
+       this.vDomBottomPad = 0; //hold value of padding for bottom of virtual DOM
+
+       this.vDomMaxRenderChain = 90; //the maximum number of dom elements that can be rendered in 1 go
+
+       this.vDomWindowBuffer = 0; //window row buffer before removing elements, to smooth scrolling
+
+       this.vDomWindowMinTotalRows = 20; //minimum number of rows to be generated in virtual dom (prevent buffering issues on tables with tall rows)
+       this.vDomWindowMinMarginRows = 5; //minimum number of rows to be generated in virtual dom margin
+
+       this.vDomTopNewRows = []; //rows to normalize after appending to optimize render speed
+       this.vDomBottomNewRows = []; //rows to normalize after appending to optimize render speed
+
+       this.rowNumColumn = false; //hold column component for row number column
+
+       this.redrawBlock = false; //prevent redraws to allow multiple data manipulations becore continuing
+       this.redrawBlockRestoreConfig = false; //store latest redraw function calls for when redraw is needed
+       this.redrawBlockRederInPosition = false; //store latest redraw function calls for when redraw is needed
+};
+
+//////////////// Setup Functions /////////////////
+
+RowManager.prototype.createHolderElement = function () {
+       var el = document.createElement("div");
+
+       el.classList.add("tabulator-tableHolder");
+       el.setAttribute("tabindex", 0);
+
+       return el;
+};
+
+RowManager.prototype.createTableElement = function () {
+       var el = document.createElement("div");
+
+       el.classList.add("tabulator-table");
+
+       return el;
+};
+
+//return containing element
+RowManager.prototype.getElement = function () {
+       return this.element;
+};
+
+//return table element
+RowManager.prototype.getTableElement = function () {
+       return this.tableElement;
+};
+
+//return position of row in table
+RowManager.prototype.getRowPosition = function (row, active) {
+       if (active) {
+               return this.activeRows.indexOf(row);
+       } else {
+               return this.rows.indexOf(row);
+       }
+};
+
+//link to column manager
+RowManager.prototype.setColumnManager = function (manager) {
+       this.columnManager = manager;
+};
+
+RowManager.prototype.initialize = function () {
+       var self = this;
+
+       self.setRenderMode();
+
+       //initialize manager
+       self.element.appendChild(self.tableElement);
+
+       self.firstRender = true;
+
+       //scroll header along with table body
+       self.element.addEventListener("scroll", function () {
+               var left = self.element.scrollLeft;
+
+               //handle horizontal scrolling
+               if (self.scrollLeft != left) {
+                       self.columnManager.scrollHorizontal(left);
+
+                       if (self.table.options.groupBy) {
+                               self.table.modules.groupRows.scrollHeaders(left);
+                       }
+
+                       if (self.table.modExists("columnCalcs")) {
+                               self.table.modules.columnCalcs.scrollHorizontal(left);
+                       }
+
+                       self.table.options.scrollHorizontal(left);
+               }
+
+               self.scrollLeft = left;
+       });
+
+       //handle virtual dom scrolling
+       if (this.renderMode === "virtual") {
+
+               self.element.addEventListener("scroll", function () {
+                       var top = self.element.scrollTop;
+                       var dir = self.scrollTop > top;
+
+                       //handle verical scrolling
+                       if (self.scrollTop != top) {
+                               self.scrollTop = top;
+                               self.scrollVertical(dir);
+
+                               if (self.table.options.ajaxProgressiveLoad == "scroll") {
+                                       self.table.modules.ajax.nextPage(self.element.scrollHeight - self.element.clientHeight - top);
+                               }
+
+                               self.table.options.scrollVertical(top);
+                       } else {
+                               self.scrollTop = top;
+                       }
+               });
+       }
+};
+
+////////////////// Row Manipulation //////////////////
+
+RowManager.prototype.findRow = function (subject) {
+       var self = this;
+
+       if ((typeof subject === 'undefined' ? 'undefined' : _typeof(subject)) == "object") {
+
+               if (subject instanceof Row) {
+                       //subject is row element
+                       return subject;
+               } else if (subject instanceof RowComponent) {
+                       //subject is public row component
+                       return subject._getSelf() || false;
+               } else if (typeof HTMLElement !== "undefined" && subject instanceof HTMLElement) {
+                       //subject is a HTML element of the row
+                       var match = self.rows.find(function (row) {
+                               return row.element === subject;
+                       });
+
+                       return match || false;
+               }
+       } else if (typeof subject == "undefined" || subject === null) {
+               return false;
+       } else {
+               //subject should be treated as the index of the row
+               var _match = self.rows.find(function (row) {
+                       return row.data[self.table.options.index] == subject;
+               });
+
+               return _match || false;
+       }
+
+       //catch all for any other type of input
+
+       return false;
+};
+
+RowManager.prototype.getRowFromDataObject = function (data) {
+       var match = this.rows.find(function (row) {
+               return row.data === data;
+       });
+
+       return match || false;
+};
+
+RowManager.prototype.getRowFromPosition = function (position, active) {
+       if (active) {
+               return this.activeRows[position];
+       } else {
+               return this.rows[position];
+       }
+};
+
+RowManager.prototype.scrollToRow = function (row, position, ifVisible) {
+       var _this11 = this;
+
+       var rowIndex = this.getDisplayRows().indexOf(row),
+           rowEl = row.getElement(),
+           rowTop,
+           offset = 0;
+
+       return new Promise(function (resolve, reject) {
+               if (rowIndex > -1) {
+
+                       if (typeof position === "undefined") {
+                               position = _this11.table.options.scrollToRowPosition;
+                       }
+
+                       if (typeof ifVisible === "undefined") {
+                               ifVisible = _this11.table.options.scrollToRowIfVisible;
+                       }
+
+                       if (position === "nearest") {
+                               switch (_this11.renderMode) {
+                                       case "classic":
+                                               rowTop = Tabulator.prototype.helpers.elOffset(rowEl).top;
+                                               position = Math.abs(_this11.element.scrollTop - rowTop) > Math.abs(_this11.element.scrollTop + _this11.element.clientHeight - rowTop) ? "bottom" : "top";
+                                               break;
+                                       case "virtual":
+                                               position = Math.abs(_this11.vDomTop - rowIndex) > Math.abs(_this11.vDomBottom - rowIndex) ? "bottom" : "top";
+                                               break;
+                               }
+                       }
+
+                       //check row visibility
+                       if (!ifVisible) {
+                               if (Tabulator.prototype.helpers.elVisible(rowEl)) {
+                                       offset = Tabulator.prototype.helpers.elOffset(rowEl).top - Tabulator.prototype.helpers.elOffset(_this11.element).top;
+
+                                       if (offset > 0 && offset < _this11.element.clientHeight - rowEl.offsetHeight) {
+                                               return false;
+                                       }
+                               }
+                       }
+
+                       //scroll to row
+                       switch (_this11.renderMode) {
+                               case "classic":
+                                       _this11.element.scrollTop = Tabulator.prototype.helpers.elOffset(rowEl).top - Tabulator.prototype.helpers.elOffset(_this11.element).top + _this11.element.scrollTop;
+                                       break;
+                               case "virtual":
+                                       _this11._virtualRenderFill(rowIndex, true);
+                                       break;
+                       }
+
+                       //align to correct position
+                       switch (position) {
+                               case "middle":
+                               case "center":
+
+                                       if (_this11.element.scrollHeight - _this11.element.scrollTop == _this11.element.clientHeight) {
+                                               _this11.element.scrollTop = _this11.element.scrollTop + (rowEl.offsetTop - _this11.element.scrollTop) - (_this11.element.scrollHeight - rowEl.offsetTop) / 2;
+                                       } else {
+                                               _this11.element.scrollTop = _this11.element.scrollTop - _this11.element.clientHeight / 2;
+                                       }
+
+                                       break;
+
+                               case "bottom":
+
+                                       if (_this11.element.scrollHeight - _this11.element.scrollTop == _this11.element.clientHeight) {
+                                               _this11.element.scrollTop = _this11.element.scrollTop - (_this11.element.scrollHeight - rowEl.offsetTop) + rowEl.offsetHeight;
+                                       } else {
+                                               _this11.element.scrollTop = _this11.element.scrollTop - _this11.element.clientHeight + rowEl.offsetHeight;
+                                       }
+
+                                       break;
+                       }
+
+                       resolve();
+               } else {
+                       console.warn("Scroll Error - Row not visible");
+                       reject("Scroll Error - Row not visible");
+               }
+       });
+};
+
+////////////////// Data Handling //////////////////
+
+RowManager.prototype.setData = function (data, renderInPosition, columnsChanged) {
+       var _this12 = this;
+
+       var self = this;
+
+       return new Promise(function (resolve, reject) {
+               if (renderInPosition && _this12.getDisplayRows().length) {
+                       if (self.table.options.pagination) {
+                               self._setDataActual(data, true);
+                       } else {
+                               _this12.reRenderInPosition(function () {
+                                       self._setDataActual(data);
+                               });
+                       }
+               } else {
+                       if (_this12.table.options.autoColumns && columnsChanged) {
+                               _this12.table.columnManager.generateColumnsFromRowData(data);
+                       }
+                       _this12.resetScroll();
+
+                       _this12._setDataActual(data);
+               }
+
+               resolve();
+       });
+};
+
+RowManager.prototype._setDataActual = function (data, renderInPosition) {
+       var self = this;
+
+       self.table.options.dataLoading.call(this.table, data);
+
+       this._wipeElements();
+
+       if (this.table.options.history && this.table.modExists("history")) {
+               this.table.modules.history.clear();
+       }
+
+       if (Array.isArray(data)) {
+
+               if (this.table.modExists("selectRow")) {
+                       this.table.modules.selectRow.clearSelectionData();
+               }
+
+               if (this.table.options.reactiveData && this.table.modExists("reactiveData", true)) {
+                       this.table.modules.reactiveData.watchData(data);
+               }
+
+               data.forEach(function (def, i) {
+                       if (def && (typeof def === 'undefined' ? 'undefined' : _typeof(def)) === "object") {
+                               var row = new Row(def, self);
+                               self.rows.push(row);
+                       } else {
+                               console.warn("Data Loading Warning - Invalid row data detected and ignored, expecting object but received:", def);
+                       }
+               });
+
+               self.refreshActiveData(false, false, renderInPosition);
+
+               self.table.options.dataLoaded.call(this.table, data);
+       } else {
+               console.error("Data Loading Error - Unable to process data due to invalid data type \nExpecting: array \nReceived: ", typeof data === 'undefined' ? 'undefined' : _typeof(data), "\nData:     ", data);
+       }
+};
+
+RowManager.prototype._wipeElements = function () {
+       this.rows.forEach(function (row) {
+               row.wipe();
+       });
+
+       if (this.table.options.groupBy && this.table.modExists("groupRows")) {
+               this.table.modules.groupRows.wipe();
+       }
+
+       this.rows = [];
+       this.activeRows = [];
+       this.activeRowsCount = 0;
+       this.displayRows = [];
+       this.displayRowsCount = 0;
+
+       this.adjustTableSize();
+};
+
+RowManager.prototype.deleteRow = function (row, blockRedraw) {
+       var allIndex = this.rows.indexOf(row),
+           activeIndex = this.activeRows.indexOf(row);
+
+       if (activeIndex > -1) {
+               this.activeRows.splice(activeIndex, 1);
+       }
+
+       if (allIndex > -1) {
+               this.rows.splice(allIndex, 1);
+       }
+
+       this.setActiveRows(this.activeRows);
+
+       this.displayRowIterator(function (rows) {
+               var displayIndex = rows.indexOf(row);
+
+               if (displayIndex > -1) {
+                       rows.splice(displayIndex, 1);
+               }
+       });
+
+       if (!blockRedraw) {
+               this.reRenderInPosition();
+       }
+
+       this.regenerateRowNumbers();
+
+       this.table.options.rowDeleted.call(this.table, row.getComponent());
+
+       if (this.table.options.dataChanged) {
+               this.table.options.dataChanged.call(this.table, this.getData());
+       }
+
+       if (this.table.options.groupBy && this.table.modExists("groupRows")) {
+               this.table.modules.groupRows.updateGroupRows(true);
+       } else if (this.table.options.pagination && this.table.modExists("page")) {
+               this.refreshActiveData(false, false, true);
+       } else {
+               if (this.table.options.pagination && this.table.modExists("page")) {
+                       this.refreshActiveData("page");
+               }
+       }
+};
+
+RowManager.prototype.addRow = function (data, pos, index, blockRedraw) {
+
+       var row = this.addRowActual(data, pos, index, blockRedraw);
+
+       if (this.table.options.history && this.table.modExists("history")) {
+               this.table.modules.history.action("rowAdd", row, { data: data, pos: pos, index: index });
+       }
+
+       return row;
+};
+
+//add multiple rows
+RowManager.prototype.addRows = function (data, pos, index) {
+       var _this13 = this;
+
+       var self = this,
+           length = 0,
+           rows = [];
+
+       return new Promise(function (resolve, reject) {
+               pos = _this13.findAddRowPos(pos);
+
+               if (!Array.isArray(data)) {
+                       data = [data];
+               }
+
+               length = data.length - 1;
+
+               if (typeof index == "undefined" && pos || typeof index !== "undefined" && !pos) {
+                       data.reverse();
+               }
+
+               data.forEach(function (item, i) {
+                       var row = self.addRow(item, pos, index, true);
+                       rows.push(row);
+               });
+
+               if (_this13.table.options.groupBy && _this13.table.modExists("groupRows")) {
+                       _this13.table.modules.groupRows.updateGroupRows(true);
+               } else if (_this13.table.options.pagination && _this13.table.modExists("page")) {
+                       _this13.refreshActiveData(false, false, true);
+               } else {
+                       _this13.reRenderInPosition();
+               }
+
+               //recalc column calculations if present
+               if (_this13.table.modExists("columnCalcs")) {
+                       _this13.table.modules.columnCalcs.recalc(_this13.table.rowManager.activeRows);
+               }
+
+               _this13.regenerateRowNumbers();
+               resolve(rows);
+       });
+};
+
+RowManager.prototype.findAddRowPos = function (pos) {
+       if (typeof pos === "undefined") {
+               pos = this.table.options.addRowPos;
+       }
+
+       if (pos === "pos") {
+               pos = true;
+       }
+
+       if (pos === "bottom") {
+               pos = false;
+       }
+
+       return pos;
+};
+
+RowManager.prototype.addRowActual = function (data, pos, index, blockRedraw) {
+       var row = data instanceof Row ? data : new Row(data || {}, this),
+           top = this.findAddRowPos(pos),
+           allIndex = -1,
+           activeIndex,
+           dispRows;
+
+       if (!index && this.table.options.pagination && this.table.options.paginationAddRow == "page") {
+               dispRows = this.getDisplayRows();
+
+               if (top) {
+                       if (dispRows.length) {
+                               index = dispRows[0];
+                       } else {
+                               if (this.activeRows.length) {
+                                       index = this.activeRows[this.activeRows.length - 1];
+                                       top = false;
+                               }
+                       }
+               } else {
+                       if (dispRows.length) {
+                               index = dispRows[dispRows.length - 1];
+                               top = dispRows.length < this.table.modules.page.getPageSize() ? false : true;
+                       }
+               }
+       }
+
+       if (typeof index !== "undefined") {
+               index = this.findRow(index);
+       }
+
+       if (this.table.options.groupBy && this.table.modExists("groupRows")) {
+               this.table.modules.groupRows.assignRowToGroup(row);
+
+               var groupRows = row.getGroup().rows;
+
+               if (groupRows.length > 1) {
+
+                       if (!index || index && groupRows.indexOf(index) == -1) {
+                               if (top) {
+                                       if (groupRows[0] !== row) {
+                                               index = groupRows[0];
+                                               this._moveRowInArray(row.getGroup().rows, row, index, !top);
+                                       }
+                               } else {
+                                       if (groupRows[groupRows.length - 1] !== row) {
+                                               index = groupRows[groupRows.length - 1];
+                                               this._moveRowInArray(row.getGroup().rows, row, index, !top);
+                                       }
+                               }
+                       } else {
+                               this._moveRowInArray(row.getGroup().rows, row, index, !top);
+                       }
+               }
+       }
+
+       if (index) {
+               allIndex = this.rows.indexOf(index);
+       }
+
+       if (index && allIndex > -1) {
+               activeIndex = this.activeRows.indexOf(index);
+
+               this.displayRowIterator(function (rows) {
+                       var displayIndex = rows.indexOf(index);
+
+                       if (displayIndex > -1) {
+                               rows.splice(top ? displayIndex : displayIndex + 1, 0, row);
+                       }
+               });
+
+               if (activeIndex > -1) {
+                       this.activeRows.splice(top ? activeIndex : activeIndex + 1, 0, row);
+               }
+
+               this.rows.splice(top ? allIndex : allIndex + 1, 0, row);
+       } else {
+
+               if (top) {
+
+                       this.displayRowIterator(function (rows) {
+                               rows.unshift(row);
+                       });
+
+                       this.activeRows.unshift(row);
+                       this.rows.unshift(row);
+               } else {
+                       this.displayRowIterator(function (rows) {
+                               rows.push(row);
+                       });
+
+                       this.activeRows.push(row);
+                       this.rows.push(row);
+               }
+       }
+
+       this.setActiveRows(this.activeRows);
+
+       this.table.options.rowAdded.call(this.table, row.getComponent());
+
+       if (this.table.options.dataChanged) {
+               this.table.options.dataChanged.call(this.table, this.getData());
+       }
+
+       if (!blockRedraw) {
+               this.reRenderInPosition();
+       }
+
+       return row;
+};
+
+RowManager.prototype.moveRow = function (from, to, after) {
+       if (this.table.options.history && this.table.modExists("history")) {
+               this.table.modules.history.action("rowMove", from, { posFrom: this.getRowPosition(from), posTo: this.getRowPosition(to), to: to, after: after });
+       }
+
+       this.moveRowActual(from, to, after);
+
+       this.regenerateRowNumbers();
+
+       this.table.options.rowMoved.call(this.table, from.getComponent());
+};
+
+RowManager.prototype.moveRowActual = function (from, to, after) {
+       var _this14 = this;
+
+       this._moveRowInArray(this.rows, from, to, after);
+       this._moveRowInArray(this.activeRows, from, to, after);
+
+       this.displayRowIterator(function (rows) {
+               _this14._moveRowInArray(rows, from, to, after);
+       });
+
+       if (this.table.options.groupBy && this.table.modExists("groupRows")) {
+
+               if (!after && to instanceof Group) {
+                       to = this.table.rowManager.prevDisplayRow(from) || to;
+               }
+
+               var toGroup = to.getGroup();
+               var fromGroup = from.getGroup();
+
+               if (toGroup === fromGroup) {
+                       this._moveRowInArray(toGroup.rows, from, to, after);
+               } else {
+                       if (fromGroup) {
+                               fromGroup.removeRow(from);
+                       }
+
+                       toGroup.insertRow(from, to, after);
+               }
+       }
+};
+
+RowManager.prototype._moveRowInArray = function (rows, from, to, after) {
+       var fromIndex, toIndex, start, end;
+
+       if (from !== to) {
+
+               fromIndex = rows.indexOf(from);
+
+               if (fromIndex > -1) {
+
+                       rows.splice(fromIndex, 1);
+
+                       toIndex = rows.indexOf(to);
+
+                       if (toIndex > -1) {
+
+                               if (after) {
+                                       rows.splice(toIndex + 1, 0, from);
+                               } else {
+                                       rows.splice(toIndex, 0, from);
+                               }
+                       } else {
+                               rows.splice(fromIndex, 0, from);
+                       }
+               }
+
+               //restyle rows
+               if (rows === this.getDisplayRows()) {
+
+                       start = fromIndex < toIndex ? fromIndex : toIndex;
+                       end = toIndex > fromIndex ? toIndex : fromIndex + 1;
+
+                       for (var _i4 = start; _i4 <= end; _i4++) {
+                               if (rows[_i4]) {
+                                       this.styleRow(rows[_i4], _i4);
+                               }
+                       }
+               }
+       }
+};
+
+RowManager.prototype.clearData = function () {
+       this.setData([]);
+};
+
+RowManager.prototype.getRowIndex = function (row) {
+       return this.findRowIndex(row, this.rows);
+};
+
+RowManager.prototype.getDisplayRowIndex = function (row) {
+       var index = this.getDisplayRows().indexOf(row);
+       return index > -1 ? index : false;
+};
+
+RowManager.prototype.nextDisplayRow = function (row, rowOnly) {
+       var index = this.getDisplayRowIndex(row),
+           nextRow = false;
+
+       if (index !== false && index < this.displayRowsCount - 1) {
+               nextRow = this.getDisplayRows()[index + 1];
+       }
+
+       if (nextRow && (!(nextRow instanceof Row) || nextRow.type != "row")) {
+               return this.nextDisplayRow(nextRow, rowOnly);
+       }
+
+       return nextRow;
+};
+
+RowManager.prototype.prevDisplayRow = function (row, rowOnly) {
+       var index = this.getDisplayRowIndex(row),
+           prevRow = false;
+
+       if (index) {
+               prevRow = this.getDisplayRows()[index - 1];
+       }
+
+       if (rowOnly && prevRow && (!(prevRow instanceof Row) || prevRow.type != "row")) {
+               return this.prevDisplayRow(prevRow, rowOnly);
+       }
+
+       return prevRow;
+};
+
+RowManager.prototype.findRowIndex = function (row, list) {
+       var rowIndex;
+
+       row = this.findRow(row);
+
+       if (row) {
+               rowIndex = list.indexOf(row);
+
+               if (rowIndex > -1) {
+                       return rowIndex;
+               }
+       }
+
+       return false;
+};
+
+RowManager.prototype.getData = function (active, transform) {
+       var output = [],
+           rows = this.getRows(active);
+
+       rows.forEach(function (row) {
+               if (row.type == "row") {
+                       output.push(row.getData(transform || "data"));
+               }
+       });
+
+       return output;
+};
+
+RowManager.prototype.getComponents = function (active) {
+       var output = [],
+           rows = this.getRows(active);
+
+       rows.forEach(function (row) {
+               output.push(row.getComponent());
+       });
+
+       return output;
+};
+
+RowManager.prototype.getDataCount = function (active) {
+       var rows = this.getRows(active);
+
+       return rows.length;
+};
+
+RowManager.prototype._genRemoteRequest = function () {
+       var _this15 = this;
+
+       var table = this.table,
+           options = table.options,
+           params = {};
+
+       if (table.modExists("page")) {
+               //set sort data if defined
+               if (options.ajaxSorting) {
+                       var sorters = this.table.modules.sort.getSort();
+
+                       sorters.forEach(function (item) {
+                               delete item.column;
+                       });
+
+                       params[this.table.modules.page.paginationDataSentNames.sorters] = sorters;
+               }
+
+               //set filter data if defined
+               if (options.ajaxFiltering) {
+                       var filters = this.table.modules.filter.getFilters(true, true);
+
+                       params[this.table.modules.page.paginationDataSentNames.filters] = filters;
+               }
+
+               this.table.modules.ajax.setParams(params, true);
+       }
+
+       table.modules.ajax.sendRequest().then(function (data) {
+               _this15._setDataActual(data, true);
+       }).catch(function (e) {});
+};
+
+//choose the path to refresh data after a filter update
+RowManager.prototype.filterRefresh = function () {
+       var table = this.table,
+           options = table.options,
+           left = this.scrollLeft;
+
+       if (options.ajaxFiltering) {
+               if (options.pagination == "remote" && table.modExists("page")) {
+                       table.modules.page.reset(true);
+                       table.modules.page.setPage(1).then(function () {}).catch(function () {});
+               } else if (options.ajaxProgressiveLoad) {
+                       table.modules.ajax.loadData().then(function () {}).catch(function () {});
+               } else {
+                       //assume data is url, make ajax call to url to get data
+                       this._genRemoteRequest();
+               }
+       } else {
+               this.refreshActiveData("filter");
+       }
+
+       this.scrollHorizontal(left);
+};
+
+//choose the path to refresh data after a sorter update
+RowManager.prototype.sorterRefresh = function (loadOrignalData) {
+       var table = this.table,
+           options = this.table.options,
+           left = this.scrollLeft;
+
+       if (options.ajaxSorting) {
+               if ((options.pagination == "remote" || options.progressiveLoad) && table.modExists("page")) {
+                       table.modules.page.reset(true);
+                       table.modules.page.setPage(1).then(function () {}).catch(function () {});
+               } else if (options.ajaxProgressiveLoad) {
+                       table.modules.ajax.loadData().then(function () {}).catch(function () {});
+               } else {
+                       //assume data is url, make ajax call to url to get data
+                       this._genRemoteRequest();
+               }
+       } else {
+               this.refreshActiveData(loadOrignalData ? "filter" : "sort");
+       }
+
+       this.scrollHorizontal(left);
+};
+
+RowManager.prototype.scrollHorizontal = function (left) {
+       this.scrollLeft = left;
+       this.element.scrollLeft = left;
+
+       if (this.table.options.groupBy) {
+               this.table.modules.groupRows.scrollHeaders(left);
+       }
+
+       if (this.table.modExists("columnCalcs")) {
+               this.table.modules.columnCalcs.scrollHorizontal(left);
+       }
+};
+
+//set active data set
+RowManager.prototype.refreshActiveData = function (stage, skipStage, renderInPosition) {
+       var self = this,
+           table = this.table,
+           cascadeOrder = ["all", "filter", "sort", "display", "freeze", "group", "tree", "page"],
+           displayIndex;
+
+       if (this.redrawBlock) {
+
+               if (!this.redrawBlockRestoreConfig || cascadeOrder.indexOf(stage) < cascadeOrder.indexOf(this.redrawBlockRestoreConfig.stage)) {
+                       this.redrawBlockRestoreConfig = {
+                               stage: stage,
+                               skipStage: skipStage,
+                               renderInPosition: renderInPosition
+                       };
+               }
+
+               return;
+       } else {
+
+               if (self.table.modExists("edit")) {
+                       self.table.modules.edit.cancelEdit();
+               }
+
+               if (!stage) {
+                       stage = "all";
+               }
+
+               if (table.options.selectable && !table.options.selectablePersistence && table.modExists("selectRow")) {
+                       table.modules.selectRow.deselectRows();
+               }
+
+               //cascade through data refresh stages
+               switch (stage) {
+                       case "all":
+
+                       case "filter":
+                               if (!skipStage) {
+                                       if (table.modExists("filter")) {
+                                               self.setActiveRows(table.modules.filter.filter(self.rows));
+                                       } else {
+                                               self.setActiveRows(self.rows.slice(0));
+                                       }
+                               } else {
+                                       skipStage = false;
+                               }
+
+                       case "sort":
+                               if (!skipStage) {
+                                       if (table.modExists("sort")) {
+                                               table.modules.sort.sort(this.activeRows);
+                                       }
+                               } else {
+                                       skipStage = false;
+                               }
+
+                               //regenerate row numbers for row number formatter if in use
+                               this.regenerateRowNumbers();
+
+                       //generic stage to allow for pipeline trigger after the data manipulation stage
+                       case "display":
+                               this.resetDisplayRows();
+
+                       case "freeze":
+                               if (!skipStage) {
+                                       if (this.table.modExists("frozenRows")) {
+                                               if (table.modules.frozenRows.isFrozen()) {
+                                                       if (!table.modules.frozenRows.getDisplayIndex()) {
+                                                               table.modules.frozenRows.setDisplayIndex(this.getNextDisplayIndex());
+                                                       }
+
+                                                       displayIndex = table.modules.frozenRows.getDisplayIndex();
+
+                                                       displayIndex = self.setDisplayRows(table.modules.frozenRows.getRows(this.getDisplayRows(displayIndex - 1)), displayIndex);
+
+                                                       if (displayIndex !== true) {
+                                                               table.modules.frozenRows.setDisplayIndex(displayIndex);
+                                                       }
+                                               }
+                                       }
+                               } else {
+                                       skipStage = false;
+                               }
+
+                       case "group":
+                               if (!skipStage) {
+                                       if (table.options.groupBy && table.modExists("groupRows")) {
+
+                                               if (!table.modules.groupRows.getDisplayIndex()) {
+                                                       table.modules.groupRows.setDisplayIndex(this.getNextDisplayIndex());
+                                               }
+
+                                               displayIndex = table.modules.groupRows.getDisplayIndex();
+
+                                               displayIndex = self.setDisplayRows(table.modules.groupRows.getRows(this.getDisplayRows(displayIndex - 1)), displayIndex);
+
+                                               if (displayIndex !== true) {
+                                                       table.modules.groupRows.setDisplayIndex(displayIndex);
+                                               }
+                                       }
+                               } else {
+                                       skipStage = false;
+                               }
+
+                       case "tree":
+
+                               if (!skipStage) {
+                                       if (table.options.dataTree && table.modExists("dataTree")) {
+                                               if (!table.modules.dataTree.getDisplayIndex()) {
+                                                       table.modules.dataTree.setDisplayIndex(this.getNextDisplayIndex());
+                                               }
+
+                                               displayIndex = table.modules.dataTree.getDisplayIndex();
+
+                                               displayIndex = self.setDisplayRows(table.modules.dataTree.getRows(this.getDisplayRows(displayIndex - 1)), displayIndex);
+
+                                               if (displayIndex !== true) {
+                                                       table.modules.dataTree.setDisplayIndex(displayIndex);
+                                               }
+                                       }
+                               } else {
+                                       skipStage = false;
+                               }
+
+                               if (table.options.pagination && table.modExists("page") && !renderInPosition) {
+                                       if (table.modules.page.getMode() == "local") {
+                                               table.modules.page.reset();
+                                       }
+                               }
+
+                       case "page":
+                               if (!skipStage) {
+                                       if (table.options.pagination && table.modExists("page")) {
+
+                                               if (!table.modules.page.getDisplayIndex()) {
+                                                       table.modules.page.setDisplayIndex(this.getNextDisplayIndex());
+                                               }
+
+                                               displayIndex = table.modules.page.getDisplayIndex();
+
+                                               if (table.modules.page.getMode() == "local") {
+                                                       table.modules.page.setMaxRows(this.getDisplayRows(displayIndex - 1).length);
+                                               }
+
+                                               displayIndex = self.setDisplayRows(table.modules.page.getRows(this.getDisplayRows(displayIndex - 1)), displayIndex);
+
+                                               if (displayIndex !== true) {
+                                                       table.modules.page.setDisplayIndex(displayIndex);
+                                               }
+                                       }
+                               } else {
+                                       skipStage = false;
+                               }
+               }
+
+               if (Tabulator.prototype.helpers.elVisible(self.element)) {
+                       if (renderInPosition) {
+                               self.reRenderInPosition();
+                       } else {
+
+                               if (stage === "all" && this.table.options.virtualDomHoz) {
+                                       this.table.vdomHoz.dataChange();
+                               }
+
+                               self.renderTable();
+
+                               if (table.options.layoutColumnsOnNewData) {
+                                       self.table.columnManager.redraw(true);
+                               }
+                       }
+               }
+
+               if (table.modExists("columnCalcs")) {
+                       table.modules.columnCalcs.recalc(this.activeRows);
+               }
+       }
+};
+
+//regenerate row numbers for row number formatter if in use
+RowManager.prototype.regenerateRowNumbers = function () {
+       var _this16 = this;
+
+       if (this.rowNumColumn) {
+               this.activeRows.forEach(function (row) {
+                       var cell = row.getCell(_this16.rowNumColumn);
+
+                       if (cell) {
+                               cell._generateContents();
+                       }
+               });
+       }
+};
+
+RowManager.prototype.setActiveRows = function (activeRows) {
+       this.activeRows = activeRows;
+       this.activeRowsCount = this.activeRows.length;
+};
+
+//reset display rows array
+RowManager.prototype.resetDisplayRows = function () {
+       this.displayRows = [];
+
+       this.displayRows.push(this.activeRows.slice(0));
+
+       this.displayRowsCount = this.displayRows[0].length;
+
+       if (this.table.modExists("frozenRows")) {
+               this.table.modules.frozenRows.setDisplayIndex(0);
+       }
+
+       if (this.table.options.groupBy && this.table.modExists("groupRows")) {
+               this.table.modules.groupRows.setDisplayIndex(0);
+       }
+
+       if (this.table.options.pagination && this.table.modExists("page")) {
+               this.table.modules.page.setDisplayIndex(0);
+       }
+};
+
+RowManager.prototype.getNextDisplayIndex = function () {
+       return this.displayRows.length;
+};
+
+//set display row pipeline data
+RowManager.prototype.setDisplayRows = function (displayRows, index) {
+
+       var output = true;
+
+       if (index && typeof this.displayRows[index] != "undefined") {
+               this.displayRows[index] = displayRows;
+               output = true;
+       } else {
+               this.displayRows.push(displayRows);
+               output = index = this.displayRows.length - 1;
+       }
+
+       if (index == this.displayRows.length - 1) {
+               this.displayRowsCount = this.displayRows[this.displayRows.length - 1].length;
+       }
+
+       return output;
+};
+
+RowManager.prototype.getDisplayRows = function (index) {
+       if (typeof index == "undefined") {
+               return this.displayRows.length ? this.displayRows[this.displayRows.length - 1] : [];
+       } else {
+               return this.displayRows[index] || [];
+       }
+};
+
+RowManager.prototype.getVisibleRows = function (viewable) {
+       var topEdge = this.element.scrollTop,
+           bottomEdge = this.element.clientHeight + topEdge,
+           topFound = false,
+           topRow = 0,
+           bottomRow = 0,
+           rows = this.getDisplayRows();
+
+       if (viewable) {
+
+               this.getDisplayRows();
+               for (var i = this.vDomTop; i <= this.vDomBottom; i++) {
+                       if (rows[i]) {
+                               if (!topFound) {
+                                       if (topEdge - rows[i].getElement().offsetTop >= 0) {
+                                               topRow = i;
+                                       } else {
+                                               topFound = true;
+
+                                               if (bottomEdge - rows[i].getElement().offsetTop >= 0) {
+                                                       bottomRow = i;
+                                               } else {
+                                                       break;
+                                               }
+                                       }
+                               } else {
+                                       if (bottomEdge - rows[i].getElement().offsetTop >= 0) {
+                                               bottomRow = i;
+                                       } else {
+                                               break;
+                                       }
+                               }
+                       }
+               }
+       } else {
+               topRow = this.vDomTop;
+               bottomRow = this.vDomBottom;
+       }
+
+       return rows.slice(topRow, bottomRow + 1);
+};
+
+//repeat action accross display rows
+RowManager.prototype.displayRowIterator = function (callback) {
+       this.displayRows.forEach(callback);
+
+       this.displayRowsCount = this.displayRows[this.displayRows.length - 1].length;
+};
+
+//return only actual rows (not group headers etc)
+RowManager.prototype.getRows = function (active) {
+       var rows;
+
+       switch (active) {
+               case "active":
+                       rows = this.activeRows;
+                       break;
+
+               case "display":
+                       rows = this.table.rowManager.getDisplayRows();
+                       break;
+
+               case "visible":
+                       rows = this.getVisibleRows(true);
+                       break;
+
+               case "selected":
+                       rows = this.table.modules.selectRow.selectedRows;
+                       break;
+
+               default:
+                       rows = this.rows;
+       }
+
+       return rows;
+};
+
+///////////////// Table Rendering /////////////////
+
+//trigger rerender of table in current position
+RowManager.prototype.reRenderInPosition = function (callback) {
+       if (this.getRenderMode() == "virtual") {
+
+               if (this.redrawBlock) {
+                       if (callback) {
+                               callback();
+                       } else {
+                               this.redrawBlockRederInPosition = true;
+                       }
+               } else {
+                       var scrollTop = this.element.scrollTop;
+                       var topRow = false;
+                       var topOffset = false;
+
+                       var left = this.scrollLeft;
+
+                       var rows = this.getDisplayRows();
+
+                       for (var i = this.vDomTop; i <= this.vDomBottom; i++) {
+
+                               if (rows[i]) {
+                                       var diff = scrollTop - rows[i].getElement().offsetTop;
+
+                                       if (topOffset === false || Math.abs(diff) < topOffset) {
+                                               topOffset = diff;
+                                               topRow = i;
+                                       } else {
+                                               break;
+                                       }
+                               }
+                       }
+
+                       if (callback) {
+                               callback();
+                       }
+
+                       this._virtualRenderFill(topRow === false ? this.displayRowsCount - 1 : topRow, true, topOffset || 0);
+
+                       this.scrollHorizontal(left);
+               }
+       } else {
+               this.renderTable();
+
+               if (callback) {
+                       callback();
+               }
+       }
+};
+
+RowManager.prototype.setRenderMode = function () {
+
+       if (this.table.options.virtualDom) {
+
+               this.renderMode = "virtual";
+
+               if (this.table.element.clientHeight || this.table.options.height) {
+                       this.fixedHeight = true;
+               } else {
+                       this.fixedHeight = false;
+               }
+       } else {
+               this.renderMode = "classic";
+       }
+};
+
+RowManager.prototype.getRenderMode = function () {
+       return this.renderMode;
+};
+
+RowManager.prototype.renderTable = function () {
+
+       this.table.options.renderStarted.call(this.table);
+
+       this.element.scrollTop = 0;
+
+       switch (this.renderMode) {
+               case "classic":
+                       this._simpleRender();
+                       break;
+
+               case "virtual":
+                       this._virtualRenderFill();
+                       break;
+       }
+
+       if (this.firstRender) {
+               if (this.displayRowsCount) {
+                       this.firstRender = false;
+                       this.table.modules.layout.layout();
+               } else {
+                       this.renderEmptyScroll();
+               }
+       }
+
+       if (this.table.modExists("frozenColumns")) {
+               this.table.modules.frozenColumns.layout();
+       }
+
+       if (!this.displayRowsCount) {
+               if (this.table.options.placeholder) {
+
+                       this.table.options.placeholder.setAttribute("tabulator-render-mode", this.renderMode);
+
+                       this.getElement().appendChild(this.table.options.placeholder);
+                       this.table.options.placeholder.style.width = this.table.columnManager.getWidth() + "px";
+               }
+       }
+
+       this.table.options.renderComplete.call(this.table);
+};
+
+//simple render on heightless table
+RowManager.prototype._simpleRender = function () {
+       this._clearVirtualDom();
+
+       if (this.displayRowsCount) {
+               this.checkClassicModeGroupHeaderWidth();
+       } else {
+               this.renderEmptyScroll();
+       }
+};
+
+RowManager.prototype.checkClassicModeGroupHeaderWidth = function () {
+       var self = this,
+           element = this.tableElement,
+           onlyGroupHeaders = true;
+
+       self.getDisplayRows().forEach(function (row, index) {
+               self.styleRow(row, index);
+               element.appendChild(row.getElement());
+               row.initialize(true);
+
+               if (row.type !== "group") {
+                       onlyGroupHeaders = false;
+               }
+       });
+
+       if (onlyGroupHeaders) {
+               element.style.minWidth = self.table.columnManager.getWidth() + "px";
+       } else {
+               element.style.minWidth = "";
+       }
+};
+
+//show scrollbars on empty table div
+RowManager.prototype.renderEmptyScroll = function () {
+       if (this.table.options.placeholder) {
+               this.tableElement.style.display = "none";
+       } else {
+               this.tableElement.style.minWidth = this.table.columnManager.getWidth() + "px";
+               // this.tableElement.style.minHeight = "1px";
+               // this.tableElement.style.visibility = "hidden";
+       }
+};
+
+RowManager.prototype._clearVirtualDom = function () {
+       var element = this.tableElement;
+
+       if (this.table.options.placeholder && this.table.options.placeholder.parentNode) {
+               this.table.options.placeholder.parentNode.removeChild(this.table.options.placeholder);
+       }
+
+       // element.children.detach();
+       while (element.firstChild) {
+               element.removeChild(element.firstChild);
+       }element.style.paddingTop = "";
+       element.style.paddingBottom = "";
+       element.style.minWidth = "";
+       element.style.minHeight = "";
+       element.style.display = "";
+       element.style.visibility = "";
+
+       this.scrollTop = 0;
+       this.scrollLeft = 0;
+       this.vDomTop = 0;
+       this.vDomBottom = 0;
+       this.vDomTopPad = 0;
+       this.vDomBottomPad = 0;
+};
+
+RowManager.prototype.styleRow = function (row, index) {
+       var rowEl = row.getElement();
+
+       if (index % 2) {
+               rowEl.classList.add("tabulator-row-even");
+               rowEl.classList.remove("tabulator-row-odd");
+       } else {
+               rowEl.classList.add("tabulator-row-odd");
+               rowEl.classList.remove("tabulator-row-even");
+       }
+};
+
+//full virtual render
+RowManager.prototype._virtualRenderFill = function (position, forceMove, offset) {
+       var self = this,
+           element = self.tableElement,
+           holder = self.element,
+           topPad = 0,
+           rowsHeight = 0,
+           topPadHeight = 0,
+           i = 0,
+           onlyGroupHeaders = true,
+           rows = self.getDisplayRows();
+
+       position = position || 0;
+
+       offset = offset || 0;
+
+       if (!position) {
+               self._clearVirtualDom();
+       } else {
+               while (element.firstChild) {
+                       element.removeChild(element.firstChild);
+               } //check if position is too close to bottom of table
+               var heightOccupied = (self.displayRowsCount - position + 1) * self.vDomRowHeight;
+
+               if (heightOccupied < self.height) {
+                       position -= Math.ceil((self.height - heightOccupied) / self.vDomRowHeight);
+
+                       if (position < 0) {
+                               position = 0;
+                       }
+               }
+
+               //calculate initial pad
+               topPad = Math.min(Math.max(Math.floor(self.vDomWindowBuffer / self.vDomRowHeight), self.vDomWindowMinMarginRows), position);
+               position -= topPad;
+       }
+
+       if (self.displayRowsCount && Tabulator.prototype.helpers.elVisible(self.element)) {
+
+               self.vDomTop = position;
+
+               self.vDomBottom = position - 1;
+
+               while ((rowsHeight <= self.height + self.vDomWindowBuffer || i < self.vDomWindowMinTotalRows) && self.vDomBottom < self.displayRowsCount - 1) {
+                       var index = self.vDomBottom + 1,
+                           row = rows[index],
+                           rowHeight = 0;
+
+                       self.styleRow(row, index);
+
+                       element.appendChild(row.getElement());
+
+                       row.initialize();
+
+                       if (!row.heightInitialized) {
+                               row.normalizeHeight(true);
+                       }
+
+                       // if(!row.initialized){
+                       //      row.initialize(true);
+                       // }else{
+                       //      if(!row.heightInitialized){
+                       //              row.normalizeHeight(true);
+                       //      }
+                       // }
+
+                       rowHeight = row.getHeight();
+
+                       if (i < topPad) {
+                               topPadHeight += rowHeight;
+                       } else {
+                               rowsHeight += rowHeight;
+                       }
+
+                       if (rowHeight > this.vDomWindowBuffer) {
+                               this.vDomWindowBuffer = rowHeight * 2;
+                       }
+
+                       if (row.type !== "group") {
+                               onlyGroupHeaders = false;
+                       }
+
+                       self.vDomBottom++;
+                       i++;
+               }
+
+               if (!position) {
+                       this.vDomTopPad = 0;
+                       //adjust rowheight to match average of rendered elements
+                       self.vDomRowHeight = Math.floor((rowsHeight + topPadHeight) / i);
+                       self.vDomBottomPad = self.vDomRowHeight * (self.displayRowsCount - self.vDomBottom - 1);
+
+                       self.vDomScrollHeight = topPadHeight + rowsHeight + self.vDomBottomPad - self.height;
+               } else {
+                       self.vDomTopPad = !forceMove ? self.scrollTop - topPadHeight : self.vDomRowHeight * this.vDomTop + offset;
+                       self.vDomBottomPad = self.vDomBottom == self.displayRowsCount - 1 ? 0 : Math.max(self.vDomScrollHeight - self.vDomTopPad - rowsHeight - topPadHeight, 0);
+               }
+
+               element.style.paddingTop = self.vDomTopPad + "px";
+               element.style.paddingBottom = self.vDomBottomPad + "px";
+
+               if (forceMove) {
+                       this.scrollTop = self.vDomTopPad + topPadHeight + offset - (this.element.scrollWidth > this.element.clientWidth ? this.element.offsetHeight - this.element.clientHeight : 0);
+               }
+
+               this.scrollTop = Math.min(this.scrollTop, this.element.scrollHeight - this.height);
+
+               //adjust for horizontal scrollbar if present (and not at top of table)
+               if (this.element.scrollWidth > this.element.offsetWidth && forceMove) {
+                       this.scrollTop += this.element.offsetHeight - this.element.clientHeight;
+               }
+
+               this.vDomScrollPosTop = this.scrollTop;
+               this.vDomScrollPosBottom = this.scrollTop;
+
+               holder.scrollTop = this.scrollTop;
+
+               element.style.minWidth = onlyGroupHeaders ? self.table.columnManager.getWidth() + "px" : "";
+
+               if (self.table.options.groupBy) {
+                       if (self.table.modules.layout.getMode() != "fitDataFill" && self.displayRowsCount == self.table.modules.groupRows.countGroups()) {
+                               self.tableElement.style.minWidth = self.table.columnManager.getWidth();
+                       }
+               }
+       } else {
+               this.renderEmptyScroll();
+       }
+
+       if (!this.fixedHeight) {
+               this.adjustTableSize();
+       }
+};
+
+//handle vertical scrolling
+RowManager.prototype.scrollVertical = function (dir) {
+       var topDiff = this.scrollTop - this.vDomScrollPosTop;
+       var bottomDiff = this.scrollTop - this.vDomScrollPosBottom;
+       var margin = this.vDomWindowBuffer * 2;
+
+       if (-topDiff > margin || bottomDiff > margin) {
+               //if big scroll redraw table;
+               var left = this.scrollLeft;
+               this._virtualRenderFill(Math.floor(this.element.scrollTop / this.element.scrollHeight * this.displayRowsCount));
+               this.scrollHorizontal(left);
+       } else {
+
+               if (dir) {
+                       //scrolling up
+                       if (topDiff < 0) {
+
+                               this._addTopRow(-topDiff);
+                       }
+
+                       if (bottomDiff < 0) {
+
+                               //hide bottom row if needed
+                               if (this.vDomScrollHeight - this.scrollTop > this.vDomWindowBuffer) {
+                                       this._removeBottomRow(-bottomDiff);
+                               } else {
+                                       this.vDomScrollPosBottom = this.scrollTop;
+                               }
+                       }
+               } else {
+                       //scrolling down
+                       if (topDiff >= 0) {
+
+                               //hide top row if needed
+                               if (this.scrollTop > this.vDomWindowBuffer) {
+
+                                       this._removeTopRow(topDiff);
+                               } else {
+                                       this.vDomScrollPosTop = this.scrollTop;
+                               }
+                       }
+
+                       if (bottomDiff >= 0) {
+
+                               this._addBottomRow(bottomDiff);
+                       }
+               }
+       }
+};
+
+RowManager.prototype._addTopRow = function (topDiff) {
+       var i = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
+
+       var table = this.tableElement,
+           rows = this.getDisplayRows();
+
+       if (this.vDomTop) {
+               var index = this.vDomTop - 1,
+                   topRow = rows[index],
+                   topRowHeight = topRow.getHeight() || this.vDomRowHeight;
+
+               //hide top row if needed
+               if (topDiff >= topRowHeight) {
+                       this.styleRow(topRow, index);
+                       table.insertBefore(topRow.getElement(), table.firstChild);
+                       if (!topRow.initialized || !topRow.heightInitialized) {
+                               this.vDomTopNewRows.push(topRow);
+
+                               if (!topRow.heightInitialized) {
+                                       topRow.clearCellHeight();
+                               }
+                       }
+                       topRow.initialize();
+
+                       this.vDomTopPad -= topRowHeight;
+
+                       if (this.vDomTopPad < 0) {
+                               this.vDomTopPad = index * this.vDomRowHeight;
+                       }
+
+                       if (!index) {
+                               this.vDomTopPad = 0;
+                       }
+
+                       table.style.paddingTop = this.vDomTopPad + "px";
+                       this.vDomScrollPosTop -= topRowHeight;
+                       this.vDomTop--;
+               }
+
+               topDiff = -(this.scrollTop - this.vDomScrollPosTop);
+
+               if (topRow.getHeight() > this.vDomWindowBuffer) {
+                       this.vDomWindowBuffer = topRow.getHeight() * 2;
+               }
+
+               if (i < this.vDomMaxRenderChain && this.vDomTop && topDiff >= (rows[this.vDomTop - 1].getHeight() || this.vDomRowHeight)) {
+                       this._addTopRow(topDiff, i + 1);
+               } else {
+                       this._quickNormalizeRowHeight(this.vDomTopNewRows);
+               }
+       }
+};
+
+RowManager.prototype._removeTopRow = function (topDiff) {
+       var table = this.tableElement,
+           topRow = this.getDisplayRows()[this.vDomTop],
+           topRowHeight = topRow.getHeight() || this.vDomRowHeight;
+
+       if (topDiff >= topRowHeight) {
+
+               var rowEl = topRow.getElement();
+               rowEl.parentNode.removeChild(rowEl);
+
+               this.vDomTopPad += topRowHeight;
+               table.style.paddingTop = this.vDomTopPad + "px";
+               this.vDomScrollPosTop += this.vDomTop ? topRowHeight : topRowHeight + this.vDomWindowBuffer;
+               this.vDomTop++;
+
+               topDiff = this.scrollTop - this.vDomScrollPosTop;
+
+               this._removeTopRow(topDiff);
+       }
+};
+
+RowManager.prototype._addBottomRow = function (bottomDiff) {
+       var i = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
+
+       var table = this.tableElement,
+           rows = this.getDisplayRows();
+
+       if (this.vDomBottom < this.displayRowsCount - 1) {
+               var index = this.vDomBottom + 1,
+                   bottomRow = rows[index],
+                   bottomRowHeight = bottomRow.getHeight() || this.vDomRowHeight;
+
+               //hide bottom row if needed
+               if (bottomDiff >= bottomRowHeight) {
+                       this.styleRow(bottomRow, index);
+                       table.appendChild(bottomRow.getElement());
+
+                       if (!bottomRow.initialized || !bottomRow.heightInitialized) {
+                               this.vDomBottomNewRows.push(bottomRow);
+
+                               if (!bottomRow.heightInitialized) {
+                                       bottomRow.clearCellHeight();
+                               }
+                       }
+
+                       bottomRow.initialize();
+
+                       this.vDomBottomPad -= bottomRowHeight;
+
+                       if (this.vDomBottomPad < 0 || index == this.displayRowsCount - 1) {
+                               this.vDomBottomPad = 0;
+                       }
+
+                       table.style.paddingBottom = this.vDomBottomPad + "px";
+                       this.vDomScrollPosBottom += bottomRowHeight;
+                       this.vDomBottom++;
+               }
+
+               bottomDiff = this.scrollTop - this.vDomScrollPosBottom;
+
+               if (bottomRow.getHeight() > this.vDomWindowBuffer) {
+                       this.vDomWindowBuffer = bottomRow.getHeight() * 2;
+               }
+
+               if (i < this.vDomMaxRenderChain && this.vDomBottom < this.displayRowsCount - 1 && bottomDiff >= (rows[this.vDomBottom + 1].getHeight() || this.vDomRowHeight)) {
+                       this._addBottomRow(bottomDiff, i + 1);
+               } else {
+                       this._quickNormalizeRowHeight(this.vDomBottomNewRows);
+               }
+       }
+};
+
+RowManager.prototype._removeBottomRow = function (bottomDiff) {
+       var table = this.tableElement,
+           bottomRow = this.getDisplayRows()[this.vDomBottom],
+           bottomRowHeight = bottomRow.getHeight() || this.vDomRowHeight;
+
+       if (bottomDiff >= bottomRowHeight) {
+
+               var rowEl = bottomRow.getElement();
+
+               if (rowEl.parentNode) {
+                       rowEl.parentNode.removeChild(rowEl);
+               }
+
+               this.vDomBottomPad += bottomRowHeight;
+
+               if (this.vDomBottomPad < 0) {
+                       this.vDomBottomPad = 0;
+               }
+
+               table.style.paddingBottom = this.vDomBottomPad + "px";
+               this.vDomScrollPosBottom -= bottomRowHeight;
+               this.vDomBottom--;
+
+               bottomDiff = -(this.scrollTop - this.vDomScrollPosBottom);
+
+               this._removeBottomRow(bottomDiff);
+       }
+};
+
+RowManager.prototype._quickNormalizeRowHeight = function (rows) {
+       rows.forEach(function (row) {
+               row.calcHeight();
+       });
+
+       rows.forEach(function (row) {
+               row.setCellHeight();
+       });
+
+       rows.length = 0;
+};
+
+//normalize height of active rows
+RowManager.prototype.normalizeHeight = function () {
+       this.activeRows.forEach(function (row) {
+               row.normalizeHeight();
+       });
+};
+
+//adjust the height of the table holder to fit in the Tabulator element
+RowManager.prototype.adjustTableSize = function () {
+       var initialHeight = this.element.clientHeight,
+           modExists;
+
+       if (this.renderMode === "virtual") {
+               var otherHeight = Math.floor(this.columnManager.getElement().offsetHeight + (this.table.footerManager && !this.table.footerManager.external ? this.table.footerManager.getElement().offsetHeight : 0));
+
+               if (this.fixedHeight) {
+                       this.element.style.minHeight = "calc(100% - " + otherHeight + "px)";
+                       this.element.style.height = "calc(100% - " + otherHeight + "px)";
+                       this.element.style.maxHeight = "calc(100% - " + otherHeight + "px)";
+               } else {
+                       this.element.style.height = "";
+                       this.element.style.height = Math.floor(this.table.element.clientHeight) - otherHeight + "px";
+                       this.element.scrollTop = this.scrollTop;
+               }
+
+               this.height = this.element.clientHeight;
+               this.vDomWindowBuffer = this.table.options.virtualDomBuffer || this.height;
+
+               //check if the table has changed size when dealing with variable height tables
+               if (!this.fixedHeight && Math.floor(initialHeight) != Math.floor(this.element.clientHeight)) {
+                       modExists = this.table.modExists("resizeTable");
+
+                       if (modExists && !this.table.modules.resizeTable.autoResize || !modExists) {
+                               this.redraw();
+                       }
+               }
+       }
+};
+
+//renitialize all rows
+RowManager.prototype.reinitialize = function () {
+       this.rows.forEach(function (row) {
+               row.reinitialize(true);
+       });
+};
+
+//prevent table from being redrawn
+RowManager.prototype.blockRedraw = function () {
+       this.redrawBlock = true;
+       this.redrawBlockRestoreConfig = false;
+};
+
+//restore table redrawing
+RowManager.prototype.restoreRedraw = function () {
+       this.redrawBlock = false;
+
+       if (this.redrawBlockRestoreConfig) {
+               this.refreshActiveData(this.redrawBlockRestoreConfig.stage, this.redrawBlockRestoreConfig.skipStage, this.redrawBlockRestoreConfig.renderInPosition);
+
+               this.redrawBlockRestoreConfig = false;
+       } else {
+               if (this.redrawBlockRederInPosition) {
+                       this.reRenderInPosition();
+               }
+       }
+
+       this.redrawBlockRederInPosition = false;
+};
+
+//redraw table
+RowManager.prototype.redraw = function (force) {
+       var pos = 0,
+           left = this.scrollLeft;
+
+       this.adjustTableSize();
+
+       this.table.tableWidth = this.table.element.clientWidth;
+
+       if (!force) {
+               if (this.renderMode == "classic") {
+
+                       if (this.table.options.groupBy) {
+                               this.refreshActiveData("group", false, false);
+                       } else {
+                               this._simpleRender();
+                       }
+               } else {
+                       this.reRenderInPosition();
+                       this.scrollHorizontal(left);
+               }
+
+               if (!this.displayRowsCount) {
+                       if (this.table.options.placeholder) {
+                               this.getElement().appendChild(this.table.options.placeholder);
+                       }
+               }
+       } else {
+               this.renderTable();
+       }
+};
+
+RowManager.prototype.resetScroll = function () {
+       this.element.scrollLeft = 0;
+       this.element.scrollTop = 0;
+
+       if (this.table.browser === "ie") {
+               var event = document.createEvent("Event");
+               event.initEvent("scroll", false, true);
+               this.element.dispatchEvent(event);
+       } else {
+               this.element.dispatchEvent(new Event('scroll'));
+       }
+};
+
+var VDomHoz = function VDomHoz(table) {
+       this.table = table;
+
+       this.element = this.table.rowManager.tableElement;
+       this.holderEl = this.table.rowManager.element;
+
+       this.leftCol = 0;
+       this.rightCol = 0;
+       this.scrollLeft = 0;
+
+       this.vDomScrollPosLeft = 0;
+       this.vDomScrollPosRight = 0;
+
+       this.vDomPadLeft = 0;
+       this.vDomPadRight = 0;
+
+       this.fitDataColAvg = 0;
+
+       this.window = 200; //pixel margin to make column visible before it is shown on screen
+
+       this.initialized = false;
+
+       this.columns = [];
+
+       if (this.compatabilityCheck()) {
+               this.initialize();
+       }
+};
+
+VDomHoz.prototype.compatabilityCheck = function () {
+       var options = this.table.options,
+           frozen = false,
+           ok = true;
+
+       if (options.layout == "fitDataTable") {
+               console.warn("Horizontal Vitrual DOM is not compatible with fitDataTable layout mode");
+               ok = false;
+       }
+
+       if (options.responsiveLayout) {
+               console.warn("Horizontal Vitrual DOM is not compatible with responsive columns");
+               ok = false;
+       }
+
+       if (this.table.rtl) {
+               console.warn("Horizontal Vitrual DOM is not currently compatible with RTL text direction");
+               ok = false;
+       }
+
+       // if(options.rowFormatter){
+       //      console.warn("Horizontal Vitrual DOM is not compatible with row formatters");
+       //      ok = false;
+       // }
+
+       if (options.columns) {
+               frozen = options.columns.find(function (col) {
+                       return col.frozen;
+               });
+
+               if (frozen) {
+                       console.warn("Horizontal Vitrual DOM is not compatible with frozen columns");
+                       ok = false;
+               }
+       }
+
+       if (!ok) {
+               options.virtualDomHoz = false;
+       }
+
+       return ok;
+};
+
+VDomHoz.prototype.initialize = function () {
+       var _this17 = this;
+
+       this.holderEl.addEventListener("scroll", function () {
+               var left = _this17.holderEl.scrollLeft;
+
+               if (_this17.scrollLeft != left) {
+                       _this17.scrollLeft = left;
+                       _this17.scroll(left - (_this17.vDomScrollPosLeft + _this17.window));
+               }
+       });
+};
+
+VDomHoz.prototype.deinitialize = function () {
+       this.initialized = false;
+};
+
+VDomHoz.prototype.clear = function () {
+       this.columns = [];
+
+       this.leftCol = -1;
+       this.rightCol = 0;
+
+       this.vDomScrollPosLeft = 0;
+       this.vDomScrollPosRight = 0;
+       this.vDomPadLeft = 0;
+       this.vDomPadRight = 0;
+};
+
+VDomHoz.prototype.dataChange = function () {
+       var change = false,
+           collsWidth = 0,
+           colEnd = 0,
+           group,
+           row,
+           rowEl;
+
+       if (this.table.options.layout === "fitData") {
+               this.table.columnManager.columnsByIndex.forEach(function (column) {
+                       if (!column.definition.width && column.visible) {
+                               change = true;
+                       }
+               });
+
+               if (change) {
+                       if (change && this.table.rowManager.getDisplayRows().length) {
+                               // this.table.vdomHoz.deinitialize();
+
+                               this.vDomScrollPosRight = this.scrollLeft + this.holderEl.clientWidth + this.window;
+
+                               if (this.table.options.groupBy) {
+                                       group = this.table.modules.groupRows.getGroups(false)[0];
+
+                                       row = group.getRows(false)[0];
+                               } else {
+                                       row = this.table.rowManager.getDisplayRows()[0];
+                               }
+
+                               if (row) {
+
+                                       rowEl = row.getElement();
+
+                                       row.generateCells();
+
+                                       this.element.appendChild(rowEl);
+
+                                       for (var colEnd = 0; colEnd < row.cells.length; colEnd++) {
+                                               var cell = row.cells[colEnd];
+                                               rowEl.appendChild(cell.getElement());
+
+                                               cell.column.reinitializeWidth();
+
+                                               collsWidth += cell.column.getWidth();
+
+                                               if (collsWidth > this.vDomScrollPosRight) {
+                                                       break;
+                                               }
+                                       }
+
+                                       rowEl.parentNode.removeChild(rowEl);
+
+                                       this.fitDataColAvg = Math.floor(collsWidth / (colEnd + 1));
+
+                                       for (colEnd; colEnd < this.table.columnManager.columnsByIndex.length; colEnd++) {
+                                               this.table.columnManager.columnsByIndex[colEnd].setWidth(this.fitDataColAvg);
+                                       }
+
+                                       this.reinitialize(false, true);
+                               }
+                       }
+               }
+       } else {
+               if (this.table.options.layout === "fitColumns") {
+                       this.table.modules.layout.layout();
+                       this.table.vdomHoz.reinitialize(false, true);
+               }
+       }
+};
+
+VDomHoz.prototype.fitDataLayoutOverride = function () {
+       for (var _i5 = this.leftCol; _i5 <= this.rightCol; _i5++) {
+               this.columns[_i5].reinitializeWidth();
+       }
+};
+
+VDomHoz.prototype.reinitialize = function (update, blockRedraw) {
+       var _this18 = this;
+
+       var old = {
+               cols: this.columns,
+               leftCol: this.leftCol,
+               rightCol: this.rightCol
+       };
+
+       if (update && !this.initialized) {
+               return;
+       }
+
+       this.clear();
+
+       this.scrollLeft = this.holderEl.scrollLeft;
+
+       this.vDomScrollPosLeft = this.scrollLeft - this.window;
+       this.vDomScrollPosRight = this.scrollLeft + this.holderEl.clientWidth + this.window;
+
+       var colPos = 0;
+
+       this.table.columnManager.columnsByIndex.forEach(function (column) {
+               var config = {};
+
+               if (column.visible) {
+                       var width = column.getWidth();
+
+                       config.leftPos = colPos;
+                       config.rightPos = colPos + width;
+
+                       if (colPos + width > _this18.vDomScrollPosLeft && colPos < _this18.vDomScrollPosRight) {
+                               //column is visible
+
+                               if (_this18.leftCol == -1) {
+                                       _this18.leftCol = _this18.columns.length;
+                                       _this18.vDomPadLeft = colPos;
+                               }
+
+                               _this18.rightCol = _this18.columns.length;
+                       } else {
+                               // column is hidden
+                               if (_this18.leftCol !== -1) {
+                                       _this18.vDomPadRight += width;
+                               }
+                       }
+
+                       _this18.columns.push(column);
+
+                       column.modules.vdomHoz = config;
+
+                       colPos += width;
+               }
+       });
+
+       this.element.style.paddingLeft = this.vDomPadLeft + "px";
+       this.element.style.paddingRight = this.vDomPadRight + "px";
+
+       this.initialized = true;
+
+       if (!blockRedraw) {
+               if (!update || this.reinitChanged(old)) {
+                       this.renitializeRows();
+               }
+       }
+
+       this.holderEl.scrollLeft = this.scrollLeft;
+};
+
+VDomHoz.prototype.reinitChanged = function (old) {
+       var _this19 = this;
+
+       var match = true;
+
+       if (old.cols.length !== this.columns.length || old.leftCol !== this.leftCol || old.rightCol !== this.rightCol) {
+               return true;
+       }
+
+       old.cols.forEach(function (col, i) {
+               if (col !== _this19.columns[i]) {
+                       match = false;
+               }
+       });
+
+       return !match;
+};
+
+VDomHoz.prototype.renitializeRows = function () {
+       var _this20 = this;
+
+       var rows = this.table.rowManager.getVisibleRows();
+       rows.forEach(function (row) {
+               _this20.reinitializeRow(row, true);
+       });
+};
+
+VDomHoz.prototype.scroll = function (diff) {
+       this.vDomScrollPosLeft += diff;
+       this.vDomScrollPosRight += diff;
+
+       if (diff > this.holderEl.clientWidth * .8) {
+               this.reinitialize();
+       } else {
+               if (diff > 0) {
+                       //scroll right
+                       this.addColRight();
+                       this.removeColLeft();
+               } else {
+                       //scroll left
+                       this.addColLeft();
+                       this.removeColRight();
+               }
+       }
+};
+
+VDomHoz.prototype.colPositionAdjust = function (start, end, diff) {
+       for (var _i6 = start; _i6 < end; _i6++) {
+               var column = this.columns[_i6];
+
+               column.modules.vdomHoz.leftPos -= diff;
+               column.modules.vdomHoz.rightPos -= diff;
+       }
+};
+
+VDomHoz.prototype.addColRight = function () {
+       var column = this.columns[this.rightCol + 1],
+           rows,
+           oldWidth,
+           widthDiff;
+
+       if (column && column.modules.vdomHoz.leftPos <= this.vDomScrollPosRight) {
+
+               rows = this.table.rowManager.getVisibleRows();
+
+               rows.forEach(function (row) {
+                       if (row.type !== "group") {
+                               var cell = row.getCell(column);
+                               row.getElement().appendChild(cell.getElement());
+                               cell.cellRendered();
+                       }
+               });
+
+               if (this.fitDataColAvg) {
+
+                       oldWidth = column.getWidth();
+
+                       if (oldWidth === this.fitDataColAvg) {
+                               column.reinitializeWidth();
+
+                               widthDiff = oldWidth - column.getWidth();
+
+                               if (widthDiff) {
+                                       column.modules.vdomHoz.rightPos -= widthDiff;
+                                       this.colPositionAdjust(this.rightCol + 1, this.columns.length, widthDiff);
+                               }
+                       }
+               }
+
+               this.rightCol++;
+
+               if (this.rightCol >= this.columns.length - 1) {
+                       this.vDomPadRight = 0;
+               } else {
+                       this.vDomPadRight -= column.getWidth();
+               }
+
+               this.element.style.paddingRight = this.vDomPadRight + "px";
+
+               this.addColRight();
+       }
+};
+
+VDomHoz.prototype.addColLeft = function () {
+       var column = this.columns[this.leftCol - 1],
+           rows;
+
+       if (column && column.modules.vdomHoz.rightPos >= this.vDomScrollPosLeft) {
+               var rows = this.table.rowManager.getVisibleRows();
+
+               rows.forEach(function (row) {
+                       if (row.type !== "group") {
+                               var cell = row.getCell(column);
+                               row.getElement().prepend(cell.getElement());
+                               cell.cellRendered();
+                       }
+               });
+
+               if (!this.leftCol) {
+                       this.vDomPadLeft = 0;
+               } else {
+                       this.vDomPadLeft -= column.getWidth();
+               }
+
+               this.element.style.paddingLeft = this.vDomPadLeft + "px";
+
+               this.leftCol--;
+
+               this.addColLeft();
+       }
+};
+
+VDomHoz.prototype.removeColRight = function (column) {
+       var column = this.columns[this.rightCol],
+           rows;
+
+       if (column && column.modules.vdomHoz.leftPos > this.vDomScrollPosRight) {
+               rows = this.table.rowManager.getVisibleRows();
+
+               column.modules.vdomHoz.visible = false;
+
+               rows.forEach(function (row) {
+                       if (row.type !== "group") {
+                               var cell = row.getCell(column);
+                               row.getElement().removeChild(cell.getElement());
+                       }
+               });
+
+               this.vDomPadRight += column.getWidth();
+               this.element.style.paddingRight = this.vDomPadRight + "px";
+
+               this.rightCol--;
+
+               this.removeColRight();
+       }
+};
+
+VDomHoz.prototype.removeColLeft = function () {
+       var column = this.columns[this.leftCol],
+           rows;
+
+       if (column && column.modules.vdomHoz.rightPos < this.vDomScrollPosLeft) {
+
+               rows = this.table.rowManager.getVisibleRows();
+
+               rows.forEach(function (row) {
+                       if (row.type !== "group") {
+                               var cell = row.getCell(column);
+                               row.getElement().removeChild(cell.getElement());
+                       }
+               });
+
+               this.vDomPadLeft += column.getWidth();
+               this.element.style.paddingLeft = this.vDomPadLeft + "px";
+
+               this.leftCol++;
+
+               this.removeColLeft();
+       }
+};
+
+VDomHoz.prototype.initializeRow = function (row) {
+       if (row.type !== "group") {
+               row.modules.vdomHoz = {
+                       leftCol: this.leftCol,
+                       rightCol: this.rightCol
+               };
+
+               for (var _i7 = this.leftCol; _i7 <= this.rightCol; _i7++) {
+                       var column = this.columns[_i7];
+
+                       if (column.visible) {
+                               var cell = row.getCell(column);
+
+                               row.element.appendChild(cell.getElement());
+                               cell.cellRendered();
+                       }
+               }
+       }
+};
+
+VDomHoz.prototype.reinitializeRow = function (row, force) {
+       if (row.type !== "group") {
+               if (force || !row.modules.vdomHoz || row.modules.vdomHoz.leftCol !== this.leftCol || row.modules.vdomHoz.rightCol !== this.rightCol) {
+                       while (row.element.firstChild) {
+                               row.element.removeChild(row.element.firstChild);
+                       }this.initializeRow(row);
+               }
+       }
+};
+//public row object
+var RowComponent = function RowComponent(row) {
+       this._row = row;
+};
+
+RowComponent.prototype.getData = function (transform) {
+       return this._row.getData(transform);
+};
+
+RowComponent.prototype.getElement = function () {
+       return this._row.getElement();
+};
+
+RowComponent.prototype.getCells = function () {
+       var cells = [];
+
+       this._row.getCells().forEach(function (cell) {
+               cells.push(cell.getComponent());
+       });
+
+       return cells;
+};
+
+RowComponent.prototype.getCell = function (column) {
+       var cell = this._row.getCell(column);
+       return cell ? cell.getComponent() : false;
+};
+
+RowComponent.prototype.getIndex = function () {
+       return this._row.getData("data")[this._row.table.options.index];
+};
+
+RowComponent.prototype.getPosition = function (active) {
+       return this._row.table.rowManager.getRowPosition(this._row, active);
+};
+
+RowComponent.prototype.delete = function () {
+       return this._row.delete();
+};
+
+RowComponent.prototype.scrollTo = function () {
+       return this._row.table.rowManager.scrollToRow(this._row);
+};
+
+RowComponent.prototype.pageTo = function () {
+       if (this._row.table.modExists("page", true)) {
+               return this._row.table.modules.page.setPageToRow(this._row);
+       }
+};
+
+RowComponent.prototype.move = function (to, after) {
+       this._row.moveToRow(to, after);
+};
+
+RowComponent.prototype.update = function (data) {
+       return this._row.updateData(data);
+};
+
+RowComponent.prototype.normalizeHeight = function () {
+       this._row.normalizeHeight(true);
+};
+
+RowComponent.prototype.select = function () {
+       this._row.table.modules.selectRow.selectRows(this._row);
+};
+
+RowComponent.prototype.deselect = function () {
+       this._row.table.modules.selectRow.deselectRows(this._row);
+};
+
+RowComponent.prototype.toggleSelect = function () {
+       this._row.table.modules.selectRow.toggleRow(this._row);
+};
+
+RowComponent.prototype.isSelected = function () {
+       return this._row.table.modules.selectRow.isRowSelected(this._row);
+};
+
+RowComponent.prototype._getSelf = function () {
+       return this._row;
+};
+
+RowComponent.prototype.validate = function () {
+       return this._row.validate();
+};
+
+RowComponent.prototype.freeze = function () {
+       if (this._row.table.modExists("frozenRows", true)) {
+               this._row.table.modules.frozenRows.freezeRow(this._row);
+       }
+};
+
+RowComponent.prototype.unfreeze = function () {
+       if (this._row.table.modExists("frozenRows", true)) {
+               this._row.table.modules.frozenRows.unfreezeRow(this._row);
+       }
+};
+
+RowComponent.prototype.isFrozen = function () {
+       if (this._row.table.modExists("frozenRows", true)) {
+               var index = this._row.table.modules.frozenRows.rows.indexOf(this._row);
+               return index > -1;
+       }
+
+       return false;
+};
+
+RowComponent.prototype.treeCollapse = function () {
+       if (this._row.table.modExists("dataTree", true)) {
+               this._row.table.modules.dataTree.collapseRow(this._row);
+       }
+};
+
+RowComponent.prototype.treeExpand = function () {
+       if (this._row.table.modExists("dataTree", true)) {
+               this._row.table.modules.dataTree.expandRow(this._row);
+       }
+};
+
+RowComponent.prototype.treeToggle = function () {
+       if (this._row.table.modExists("dataTree", true)) {
+               this._row.table.modules.dataTree.toggleRow(this._row);
+       }
+};
+
+RowComponent.prototype.getTreeParent = function () {
+       if (this._row.table.modExists("dataTree", true)) {
+               return this._row.table.modules.dataTree.getTreeParent(this._row);
+       }
+
+       return false;
+};
+
+RowComponent.prototype.getTreeChildren = function () {
+       if (this._row.table.modExists("dataTree", true)) {
+               return this._row.table.modules.dataTree.getTreeChildren(this._row, true);
+       }
+
+       return false;
+};
+
+RowComponent.prototype.addTreeChild = function (data, pos, index) {
+       if (this._row.table.modExists("dataTree", true)) {
+               return this._row.table.modules.dataTree.addTreeChildRow(this._row, data, pos, index);
+       }
+
+       return false;
+};
+
+RowComponent.prototype.reformat = function () {
+       return this._row.reinitialize();
+};
+
+RowComponent.prototype.getGroup = function () {
+       return this._row.getGroup().getComponent();
+};
+
+RowComponent.prototype.getTable = function () {
+       return this._row.table;
+};
+
+RowComponent.prototype.getNextRow = function () {
+       var row = this._row.nextRow();
+       return row ? row.getComponent() : row;
+};
+
+RowComponent.prototype.getPrevRow = function () {
+       var row = this._row.prevRow();
+       return row ? row.getComponent() : row;
+};
+
+var Row = function Row(data, parent) {
+       var type = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : "row";
+
+       this.table = parent.table;
+       this.parent = parent;
+       this.data = {};
+       this.type = type; //type of element
+       this.element = this.createElement();
+       this.modules = {}; //hold module variables;
+       this.cells = [];
+       this.height = 0; //hold element height
+       this.heightStyled = ""; //hold element height prestyled to improve render efficiency
+       this.manualHeight = false; //user has manually set row height
+       this.outerHeight = 0; //holde lements outer height
+       this.initialized = false; //element has been rendered
+       this.heightInitialized = false; //element has resized cells to fit
+
+       this.component = null;
+
+       this.setData(data);
+       this.generateElement();
+};
+
+Row.prototype.createElement = function () {
+       var el = document.createElement("div");
+
+       el.classList.add("tabulator-row");
+       el.setAttribute("role", "row");
+
+       return el;
+};
+
+Row.prototype.getElement = function () {
+       return this.element;
+};
+
+Row.prototype.detachElement = function () {
+       if (this.element && this.element.parentNode) {
+               this.element.parentNode.removeChild(this.element);
+       }
+};
+
+Row.prototype.generateElement = function () {
+       var self = this,
+           dblTap,
+           tapHold,
+           tap;
+
+       //set row selection characteristics
+       if (self.table.options.selectable !== false && self.table.modExists("selectRow")) {
+               self.table.modules.selectRow.initializeRow(this);
+       }
+
+       //setup movable rows
+       if (self.table.options.movableRows !== false && self.table.modExists("moveRow")) {
+               self.table.modules.moveRow.initializeRow(this);
+       }
+
+       //setup data tree
+       if (self.table.options.dataTree !== false && self.table.modExists("dataTree")) {
+               self.table.modules.dataTree.initializeRow(this);
+       }
+
+       //setup column colapse container
+       if (self.table.options.responsiveLayout === "collapse" && self.table.modExists("responsiveLayout")) {
+               self.table.modules.responsiveLayout.initializeRow(this);
+       }
+
+       //set column menu
+       if ((self.table.options.rowContextMenu || self.table.options.rowClickMenu) && this.table.modExists("menu")) {
+               self.table.modules.menu.initializeRow(this);
+       }
+
+       //handle row click events
+       if (self.table.options.rowClick) {
+               self.element.addEventListener("click", function (e) {
+                       self.table.options.rowClick(e, self.getComponent());
+               });
+       }
+
+       if (self.table.options.rowDblClick) {
+               self.element.addEventListener("dblclick", function (e) {
+                       self.table.options.rowDblClick(e, self.getComponent());
+               });
+       }
+
+       if (self.table.options.rowContext) {
+               self.element.addEventListener("contextmenu", function (e) {
+                       self.table.options.rowContext(e, self.getComponent());
+               });
+       }
+
+       //handle mouse events
+       if (self.table.options.rowMouseEnter) {
+               self.element.addEventListener("mouseenter", function (e) {
+                       self.table.options.rowMouseEnter(e, self.getComponent());
+               });
+       }
+
+       if (self.table.options.rowMouseLeave) {
+               self.element.addEventListener("mouseleave", function (e) {
+                       self.table.options.rowMouseLeave(e, self.getComponent());
+               });
+       }
+
+       if (self.table.options.rowMouseOver) {
+               self.element.addEventListener("mouseover", function (e) {
+                       self.table.options.rowMouseOver(e, self.getComponent());
+               });
+       }
+
+       if (self.table.options.rowMouseOut) {
+               self.element.addEventListener("mouseout", function (e) {
+                       self.table.options.rowMouseOut(e, self.getComponent());
+               });
+       }
+
+       if (self.table.options.rowMouseMove) {
+               self.element.addEventListener("mousemove", function (e) {
+                       self.table.options.rowMouseMove(e, self.getComponent());
+               });
+       }
+
+       if (self.table.options.rowTap) {
+
+               tap = false;
+
+               self.element.addEventListener("touchstart", function (e) {
+                       tap = true;
+               }, { passive: true });
+
+               self.element.addEventListener("touchend", function (e) {
+                       if (tap) {
+                               self.table.options.rowTap(e, self.getComponent());
+                       }
+
+                       tap = false;
+               });
+       }
+
+       if (self.table.options.rowDblTap) {
+
+               dblTap = null;
+
+               self.element.addEventListener("touchend", function (e) {
+
+                       if (dblTap) {
+                               clearTimeout(dblTap);
+                               dblTap = null;
+
+                               self.table.options.rowDblTap(e, self.getComponent());
+                       } else {
+
+                               dblTap = setTimeout(function () {
+                                       clearTimeout(dblTap);
+                                       dblTap = null;
+                               }, 300);
+                       }
+               });
+       }
+
+       if (self.table.options.rowTapHold) {
+
+               tapHold = null;
+
+               self.element.addEventListener("touchstart", function (e) {
+                       clearTimeout(tapHold);
+
+                       tapHold = setTimeout(function () {
+                               clearTimeout(tapHold);
+                               tapHold = null;
+                               tap = false;
+                               self.table.options.rowTapHold(e, self.getComponent());
+                       }, 1000);
+               }, { passive: true });
+
+               self.element.addEventListener("touchend", function (e) {
+                       clearTimeout(tapHold);
+                       tapHold = null;
+               });
+       }
+};
+
+Row.prototype.generateCells = function () {
+       this.cells = this.table.columnManager.generateCells(this);
+};
+
+//functions to setup on first render
+Row.prototype.initialize = function (force) {
+       var _this21 = this;
+
+       if (!this.initialized || force) {
+
+               this.deleteCells();
+
+               while (this.element.firstChild) {
+                       this.element.removeChild(this.element.firstChild);
+               } //handle frozen cells
+               if (this.table.modExists("frozenColumns")) {
+                       this.table.modules.frozenColumns.layoutRow(this);
+               }
+
+               this.generateCells();
+
+               if (this.table.options.virtualDomHoz && this.table.vdomHoz.initialized) {
+                       this.table.vdomHoz.initializeRow(this);
+               } else {
+                       this.cells.forEach(function (cell) {
+                               _this21.element.appendChild(cell.getElement());
+                               cell.cellRendered();
+                       });
+               }
+
+               if (force) {
+                       this.normalizeHeight();
+               }
+
+               //setup movable rows
+               if (this.table.options.dataTree && this.table.modExists("dataTree")) {
+                       this.table.modules.dataTree.layoutRow(this);
+               }
+
+               //setup column colapse container
+               if (this.table.options.responsiveLayout === "collapse" && this.table.modExists("responsiveLayout")) {
+                       this.table.modules.responsiveLayout.layoutRow(this);
+               }
+
+               if (this.table.options.rowFormatter) {
+                       this.table.options.rowFormatter(this.getComponent());
+               }
+
+               //set resizable handles
+               if (this.table.options.resizableRows && this.table.modExists("resizeRows")) {
+                       this.table.modules.resizeRows.initializeRow(this);
+               }
+
+               this.initialized = true;
+       } else {
+               if (this.table.options.virtualDomHoz) {
+                       this.table.vdomHoz.reinitializeRow(this);
+               }
+       }
+};
+
+Row.prototype.reinitializeHeight = function () {
+       this.heightInitialized = false;
+
+       if (this.element.offsetParent !== null) {
+               this.normalizeHeight(true);
+       }
+};
+
+Row.prototype.reinitialize = function (children) {
+       this.initialized = false;
+       this.heightInitialized = false;
+
+       if (!this.manualHeight) {
+               this.height = 0;
+               this.heightStyled = "";
+       }
+
+       if (this.element.offsetParent !== null) {
+               this.initialize(true);
+       }
+
+       if (this.table.options.dataTree && this.table.modExists("dataTree", true)) {
+               this.table.modules.dataTree.getTreeChildren(this, false, true).forEach(function (child) {
+                       child.reinitialize(true);
+               });
+       }
+};
+
+//get heights when doing bulk row style calcs in virtual DOM
+Row.prototype.calcHeight = function (force) {
+
+       var maxHeight = 0,
+           minHeight = this.table.options.resizableRows ? this.element.clientHeight : 0;
+
+       this.cells.forEach(function (cell) {
+               var height = cell.getHeight();
+               if (height > maxHeight) {
+                       maxHeight = height;
+               }
+       });
+
+       if (force) {
+               this.height = Math.max(maxHeight, minHeight);
+       } else {
+               this.height = this.manualHeight ? this.height : Math.max(maxHeight, minHeight);
+       }
+
+       this.heightStyled = this.height ? this.height + "px" : "";
+       this.outerHeight = this.element.offsetHeight;
+};
+
+//set of cells
+Row.prototype.setCellHeight = function () {
+       this.cells.forEach(function (cell) {
+               cell.setHeight();
+       });
+
+       this.heightInitialized = true;
+};
+
+Row.prototype.clearCellHeight = function () {
+       this.cells.forEach(function (cell) {
+               cell.clearHeight();
+       });
+};
+
+//normalize the height of elements in the row
+Row.prototype.normalizeHeight = function (force) {
+
+       if (force) {
+               this.clearCellHeight();
+       }
+
+       this.calcHeight(force);
+
+       this.setCellHeight();
+};
+
+// Row.prototype.setHeight = function(height){
+//     this.height = height;
+
+//     this.setCellHeight();
+// };
+
+//set height of rows
+Row.prototype.setHeight = function (height, force) {
+       if (this.height != height || force) {
+
+               this.manualHeight = true;
+
+               this.height = height;
+               this.heightStyled = height ? height + "px" : "";
+
+               this.setCellHeight();
+
+               // this.outerHeight = this.element.outerHeight();
+               this.outerHeight = this.element.offsetHeight;
+       }
+};
+
+//return rows outer height
+Row.prototype.getHeight = function () {
+       return this.outerHeight;
+};
+
+//return rows outer Width
+Row.prototype.getWidth = function () {
+       return this.element.offsetWidth;
+};
+
+//////////////// Cell Management /////////////////
+
+Row.prototype.deleteCell = function (cell) {
+       var index = this.cells.indexOf(cell);
+
+       if (index > -1) {
+               this.cells.splice(index, 1);
+       }
+};
+
+//////////////// Data Management /////////////////
+
+Row.prototype.setData = function (data) {
+       if (this.table.modExists("mutator")) {
+               data = this.table.modules.mutator.transformRow(data, "data");
+       }
+
+       this.data = data;
+
+       if (this.table.options.reactiveData && this.table.modExists("reactiveData", true)) {
+               this.table.modules.reactiveData.watchRow(this);
+       }
+};
+
+//update the rows data
+Row.prototype.updateData = function (updatedData) {
+       var _this22 = this;
+
+       var visible = Tabulator.prototype.helpers.elVisible(this.element),
+           tempData = {},
+           newRowData;
+
+       return new Promise(function (resolve, reject) {
+
+               if (typeof updatedData === "string") {
+                       updatedData = JSON.parse(updatedData);
+               }
+
+               if (_this22.table.options.reactiveData && _this22.table.modExists("reactiveData", true)) {
+                       _this22.table.modules.reactiveData.block();
+               }
+
+               //mutate incomming data if needed
+               if (_this22.table.modExists("mutator")) {
+
+                       tempData = Object.assign(tempData, _this22.data);
+                       tempData = Object.assign(tempData, updatedData);
+
+                       newRowData = _this22.table.modules.mutator.transformRow(tempData, "data", updatedData);
+               } else {
+                       newRowData = updatedData;
+               }
+
+               //set data
+               for (var attrname in newRowData) {
+                       _this22.data[attrname] = newRowData[attrname];
+               }
+
+               if (_this22.table.options.reactiveData && _this22.table.modExists("reactiveData", true)) {
+                       _this22.table.modules.reactiveData.unblock();
+               }
+
+               //update affected cells only
+               for (var attrname in updatedData) {
+
+                       var columns = _this22.table.columnManager.getColumnsByFieldRoot(attrname);
+
+                       columns.forEach(function (column) {
+                               var cell = _this22.getCell(column.getField());
+
+                               if (cell) {
+                                       var value = column.getFieldValue(newRowData);
+                                       if (cell.getValue() != value) {
+                                               cell.setValueProcessData(value);
+
+                                               if (visible) {
+                                                       cell.cellRendered();
+                                               }
+                                       }
+                               }
+                       });
+               }
+
+               if (_this22.table.options.groupUpdateOnCellEdit && _this22.table.options.groupBy && _this22.table.modExists("groupRows")) {
+                       _this22.table.modules.groupRows.reassignRowToGroup(_this22.row);
+               }
+
+               //Partial reinitialization if visible
+               if (visible) {
+                       _this22.normalizeHeight(true);
+
+                       if (_this22.table.options.rowFormatter) {
+                               _this22.table.options.rowFormatter(_this22.getComponent());
+                       }
+               } else {
+                       _this22.initialized = false;
+                       _this22.height = 0;
+                       _this22.heightStyled = "";
+               }
+
+               if (_this22.table.options.dataTree !== false && _this22.table.modExists("dataTree") && _this22.table.modules.dataTree.redrawNeeded(updatedData)) {
+                       _this22.table.modules.dataTree.initializeRow(_this22);
+
+                       if (visible) {
+                               _this22.table.modules.dataTree.layoutRow(_this22);
+                               _this22.table.rowManager.refreshActiveData("tree", false, true);
+                       }
+               }
+
+               //this.reinitialize();
+
+               _this22.table.options.rowUpdated.call(_this22.table, _this22.getComponent());
+
+               if (_this22.table.options.dataChanged) {
+                       _this22.table.options.dataChanged.call(_this22.table, _this22.table.rowManager.getData());
+               }
+
+               resolve();
+       });
+};
+
+Row.prototype.getData = function (transform) {
+       if (transform) {
+               if (this.table.modExists("accessor")) {
+                       return this.table.modules.accessor.transformRow(this, transform);
+               }
+       }
+
+       return this.data;
+};
+
+Row.prototype.getCell = function (column) {
+       var match = false;
+
+       column = this.table.columnManager.findColumn(column);
+
+       match = this.cells.find(function (cell) {
+               return cell.column === column;
+       });
+
+       return match;
+};
+
+Row.prototype.getCellIndex = function (findCell) {
+       return this.cells.findIndex(function (cell) {
+               return cell === findCell;
+       });
+};
+
+Row.prototype.findNextEditableCell = function (index) {
+       var nextCell = false;
+
+       if (index < this.cells.length - 1) {
+               for (var i = index + 1; i < this.cells.length; i++) {
+                       var cell = this.cells[i];
+
+                       if (cell.column.modules.edit && Tabulator.prototype.helpers.elVisible(cell.getElement())) {
+                               var allowEdit = true;
+
+                               if (typeof cell.column.modules.edit.check == "function") {
+                                       allowEdit = cell.column.modules.edit.check(cell.getComponent());
+                               }
+
+                               if (allowEdit) {
+                                       nextCell = cell;
+                                       break;
+                               }
+                       }
+               }
+       }
+
+       return nextCell;
+};
+
+Row.prototype.findPrevEditableCell = function (index) {
+       var prevCell = false;
+
+       if (index > 0) {
+               for (var i = index - 1; i >= 0; i--) {
+                       var cell = this.cells[i],
+                           allowEdit = true;
+
+                       if (cell.column.modules.edit && Tabulator.prototype.helpers.elVisible(cell.getElement())) {
+                               if (typeof cell.column.modules.edit.check == "function") {
+                                       allowEdit = cell.column.modules.edit.check(cell.getComponent());
+                               }
+
+                               if (allowEdit) {
+                                       prevCell = cell;
+                                       break;
+                               }
+                       }
+               }
+       }
+
+       return prevCell;
+};
+
+Row.prototype.getCells = function () {
+       return this.cells;
+};
+
+Row.prototype.nextRow = function () {
+       var row = this.table.rowManager.nextDisplayRow(this, true);
+       return row || false;
+};
+
+Row.prototype.prevRow = function () {
+       var row = this.table.rowManager.prevDisplayRow(this, true);
+       return row || false;
+};
+
+Row.prototype.moveToRow = function (to, before) {
+       var toRow = this.table.rowManager.findRow(to);
+
+       if (toRow) {
+               this.table.rowManager.moveRowActual(this, toRow, !before);
+               this.table.rowManager.refreshActiveData("display", false, true);
+       } else {
+               console.warn("Move Error - No matching row found:", to);
+       }
+};
+
+Row.prototype.validate = function () {
+       var invalid = [];
+
+       this.cells.forEach(function (cell) {
+               if (!cell.validate()) {
+                       invalid.push(cell.getComponent());
+               }
+       });
+
+       return invalid.length ? invalid : true;
+};
+
+///////////////////// Actions  /////////////////////
+
+Row.prototype.delete = function () {
+       var _this23 = this;
+
+       return new Promise(function (resolve, reject) {
+               var index, rows;
+
+               if (_this23.table.options.history && _this23.table.modExists("history")) {
+
+                       if (_this23.table.options.groupBy && _this23.table.modExists("groupRows")) {
+                               rows = _this23.getGroup().rows;
+                               index = rows.indexOf(_this23);
+
+                               if (index) {
+                                       index = rows[index - 1];
+                               }
+                       } else {
+                               index = _this23.table.rowManager.getRowIndex(_this23);
+
+                               if (index) {
+                                       index = _this23.table.rowManager.rows[index - 1];
+                               }
+                       }
+
+                       _this23.table.modules.history.action("rowDelete", _this23, { data: _this23.getData(), pos: !index, index: index });
+               }
+
+               _this23.deleteActual();
+
+               resolve();
+       });
+};
+
+Row.prototype.deleteActual = function (blockRedraw) {
+       var index = this.table.rowManager.getRowIndex(this);
+
+       this.detatchModules();
+
+       // if(this.table.options.dataTree && this.table.modExists("dataTree")){
+       //      this.table.modules.dataTree.collapseRow(this, true);
+       // }
+
+       //remove any reactive data watchers from row object
+       if (this.table.options.reactiveData && this.table.modExists("reactiveData", true)) {}
+       // this.table.modules.reactiveData.unwatchRow(this);
+
+
+       //remove from group
+       if (this.modules.group) {
+               this.modules.group.removeRow(this);
+       }
+
+       this.table.rowManager.deleteRow(this, blockRedraw);
+
+       this.deleteCells();
+
+       this.initialized = false;
+       this.heightInitialized = false;
+       this.element = false;
+
+       if (this.table.options.dataTree && this.table.modExists("dataTree", true)) {
+               this.table.modules.dataTree.rowDelete(this);
+       }
+
+       //recalc column calculations if present
+       if (this.table.modExists("columnCalcs")) {
+               if (this.table.options.groupBy && this.table.modExists("groupRows")) {
+                       this.table.modules.columnCalcs.recalcRowGroup(this);
+               } else {
+                       this.table.modules.columnCalcs.recalc(this.table.rowManager.activeRows);
+               }
+       }
+};
+
+Row.prototype.detatchModules = function () {
+       //deselect row if it is selected
+       if (this.table.modExists("selectRow")) {
+               this.table.modules.selectRow._deselectRow(this, true);
+       }
+
+       //cancel edit if row is currently being edited
+       if (this.table.modExists("edit")) {
+               if (this.table.modules.edit.currentCell.row === this) {
+                       this.table.modules.edit.cancelEdit();
+               }
+       }
+
+       if (this.table.modExists("frozenRows")) {
+               this.table.modules.frozenRows.detachRow(this);
+       }
+};
+
+Row.prototype.deleteCells = function () {
+       var cellCount = this.cells.length;
+
+       for (var _i8 = 0; _i8 < cellCount; _i8++) {
+               this.cells[0].delete();
+       }
+};
+
+Row.prototype.wipe = function () {
+       this.detatchModules();
+       this.deleteCells();
+
+       while (this.element.firstChild) {
+               this.element.removeChild(this.element.firstChild);
+       }this.element = false;
+       this.modules = {};
+
+       if (this.element.parentNode) {
+               this.element.parentNode.removeChild(this.element);
+       }
+};
+
+Row.prototype.getGroup = function () {
+       return this.modules.group || false;
+};
+
+//////////////// Object Generation /////////////////
+Row.prototype.getComponent = function () {
+       if (!this.component) {
+               this.component = new RowComponent(this);
+       }
+
+       return this.component;
+};
+
+//public row object
+var CellComponent = function CellComponent(cell) {
+       this._cell = cell;
+};
+
+CellComponent.prototype.getValue = function () {
+       return this._cell.getValue();
+};
+
+CellComponent.prototype.getOldValue = function () {
+       return this._cell.getOldValue();
+};
+
+CellComponent.prototype.getInitialValue = function () {
+       return this._cell.initialValue;
+};
+
+CellComponent.prototype.getElement = function () {
+       return this._cell.getElement();
+};
+
+CellComponent.prototype.getRow = function () {
+       return this._cell.row.getComponent();
+};
+
+CellComponent.prototype.getData = function () {
+       return this._cell.row.getData();
+};
+
+CellComponent.prototype.getField = function () {
+       return this._cell.column.getField();
+};
+
+CellComponent.prototype.getColumn = function () {
+       return this._cell.column.getComponent();
+};
+
+CellComponent.prototype.setValue = function (value, mutate) {
+       if (typeof mutate == "undefined") {
+               mutate = true;
+       }
+
+       this._cell.setValue(value, mutate);
+};
+
+CellComponent.prototype.restoreOldValue = function () {
+       this._cell.setValueActual(this._cell.getOldValue());
+};
+
+CellComponent.prototype.restoreInitialValue = function () {
+       this._cell.setValueActual(this._cell.initialValue);
+};
+
+CellComponent.prototype.edit = function (force) {
+       return this._cell.edit(force);
+};
+
+CellComponent.prototype.cancelEdit = function () {
+       this._cell.cancelEdit();
+};
+
+CellComponent.prototype.isEdited = function () {
+       return !!this._cell.modules.edit && this._cell.modules.edit.edited;
+};
+
+CellComponent.prototype.clearEdited = function () {
+       if (self.table.modExists("edit", true)) {
+               this._cell.table.modules.edit.clearEdited(this._cell);
+       }
+};
+
+CellComponent.prototype.isValid = function () {
+       return this._cell.modules.validate ? !this._cell.modules.validate.invalid : true;
+};
+
+CellComponent.prototype.validate = function () {
+       return this._cell.validate();
+};
+
+CellComponent.prototype.clearValidation = function () {
+       if (this._cell.table.modExists("validate", true)) {
+               this._cell.table.modules.validate.clearValidation(this._cell);
+       }
+};
+
+CellComponent.prototype.nav = function () {
+       return this._cell.nav();
+};
+
+CellComponent.prototype.checkHeight = function () {
+       this._cell.checkHeight();
+};
+
+CellComponent.prototype.getTable = function () {
+       return this._cell.table;
+};
+
+CellComponent.prototype._getSelf = function () {
+       return this._cell;
+};
+
+var Cell = function Cell(column, row) {
+
+       this.table = column.table;
+       this.column = column;
+       this.row = row;
+       this.element = null;
+       this.value = null;
+       this.initialValue;
+       this.oldValue = null;
+       this.modules = {};
+
+       this.height = null;
+       this.width = null;
+       this.minWidth = null;
+
+       this.component = null;
+
+       this.loaded = false; //track if the cell has been added to the DOM yet
+
+       this.build();
+};
+
+//////////////// Setup Functions /////////////////
+
+//generate element
+Cell.prototype.build = function () {
+       this.generateElement();
+
+       this.setWidth();
+
+       this._configureCell();
+
+       this.setValueActual(this.column.getFieldValue(this.row.data));
+
+       this.initialValue = this.value;
+};
+
+Cell.prototype.generateElement = function () {
+       this.element = document.createElement('div');
+       this.element.className = "tabulator-cell";
+       this.element.setAttribute("role", "gridcell");
+       this.element = this.element;
+};
+
+Cell.prototype._configureCell = function () {
+       var self = this,
+           cellEvents = self.column.cellEvents,
+           element = self.element,
+           field = this.column.getField(),
+           vertAligns = {
+               top: "flex-start",
+               bottom: "flex-end",
+               middle: "center"
+       },
+           hozAligns = {
+               left: "flex-start",
+               right: "flex-end",
+               center: "center"
+       };
+
+       //set text alignment
+       element.style.textAlign = self.column.hozAlign;
+
+       if (self.column.vertAlign) {
+               element.style.display = "inline-flex";
+
+               element.style.alignItems = vertAligns[self.column.vertAlign] || "";
+
+               if (self.column.hozAlign) {
+                       element.style.justifyContent = hozAligns[self.column.hozAlign] || "";
+               }
+       }
+
+       if (field) {
+               element.setAttribute("tabulator-field", field);
+       }
+
+       //add class to cell if needed
+       if (self.column.definition.cssClass) {
+               var classNames = self.column.definition.cssClass.split(" ");
+               classNames.forEach(function (className) {
+                       element.classList.add(className);
+               });
+       }
+
+       //update tooltip on mouse enter
+       if (this.table.options.tooltipGenerationMode === "hover") {
+               element.addEventListener("mouseenter", function (e) {
+                       self._generateTooltip();
+               });
+       }
+
+       self._bindClickEvents(cellEvents);
+
+       self._bindTouchEvents(cellEvents);
+
+       self._bindMouseEvents(cellEvents);
+
+       if (self.column.modules.edit) {
+               self.table.modules.edit.bindEditor(self);
+       }
+
+       if (self.column.definition.rowHandle && self.table.options.movableRows !== false && self.table.modExists("moveRow")) {
+               self.table.modules.moveRow.initializeCell(self);
+       }
+
+       //hide cell if not visible
+       if (!self.column.visible) {
+               self.hide();
+       }
+};
+
+Cell.prototype._bindClickEvents = function (cellEvents) {
+       var self = this,
+           element = self.element;
+
+       //set event bindings
+       if (cellEvents.cellClick || self.table.options.cellClick) {
+               element.addEventListener("click", function (e) {
+                       var component = self.getComponent();
+
+                       if (cellEvents.cellClick) {
+                               cellEvents.cellClick.call(self.table, e, component);
+                       }
+
+                       if (self.table.options.cellClick) {
+                               self.table.options.cellClick.call(self.table, e, component);
+                       }
+               });
+       }
+
+       if (cellEvents.cellDblClick || this.table.options.cellDblClick) {
+               element.addEventListener("dblclick", function (e) {
+                       var component = self.getComponent();
+
+                       if (cellEvents.cellDblClick) {
+                               cellEvents.cellDblClick.call(self.table, e, component);
+                       }
+
+                       if (self.table.options.cellDblClick) {
+                               self.table.options.cellDblClick.call(self.table, e, component);
+                       }
+               });
+       } else {
+               element.addEventListener("dblclick", function (e) {
+
+                       if (self.table.modExists("edit")) {
+                               if (self.table.modules.edit.currentCell === self) {
+                                       return; //prevent instant selection of editor content
+                               }
+                       }
+
+                       e.preventDefault();
+
+                       try {
+                               if (document.selection) {
+                                       // IE
+                                       var range = document.body.createTextRange();
+                                       range.moveToElementText(self.element);
+                                       range.select();
+                               } else if (window.getSelection) {
+                                       var range = document.createRange();
+                                       range.selectNode(self.element);
+                                       window.getSelection().removeAllRanges();
+                                       window.getSelection().addRange(range);
+                               }
+                       } catch (e) {}
+               });
+       }
+
+       if (cellEvents.cellContext || this.table.options.cellContext) {
+               element.addEventListener("contextmenu", function (e) {
+                       var component = self.getComponent();
+
+                       if (cellEvents.cellContext) {
+                               cellEvents.cellContext.call(self.table, e, component);
+                       }
+
+                       if (self.table.options.cellContext) {
+                               self.table.options.cellContext.call(self.table, e, component);
+                       }
+               });
+       }
+};
+
+Cell.prototype._bindMouseEvents = function (cellEvents) {
+       var self = this,
+           element = self.element;
+
+       if (cellEvents.cellMouseEnter || self.table.options.cellMouseEnter) {
+               element.addEventListener("mouseenter", function (e) {
+                       var component = self.getComponent();
+
+                       if (cellEvents.cellMouseEnter) {
+                               cellEvents.cellMouseEnter.call(self.table, e, component);
+                       }
+
+                       if (self.table.options.cellMouseEnter) {
+                               self.table.options.cellMouseEnter.call(self.table, e, component);
+                       }
+               });
+       }
+
+       if (cellEvents.cellMouseLeave || self.table.options.cellMouseLeave) {
+               element.addEventListener("mouseleave", function (e) {
+                       var component = self.getComponent();
+
+                       if (cellEvents.cellMouseLeave) {
+                               cellEvents.cellMouseLeave.call(self.table, e, component);
+                       }
+
+                       if (self.table.options.cellMouseLeave) {
+                               self.table.options.cellMouseLeave.call(self.table, e, component);
+                       }
+               });
+       }
+
+       if (cellEvents.cellMouseOver || self.table.options.cellMouseOver) {
+               element.addEventListener("mouseover", function (e) {
+                       var component = self.getComponent();
+
+                       if (cellEvents.cellMouseOver) {
+                               cellEvents.cellMouseOver.call(self.table, e, component);
+                       }
+
+                       if (self.table.options.cellMouseOver) {
+                               self.table.options.cellMouseOver.call(self.table, e, component);
+                       }
+               });
+       }
+
+       if (cellEvents.cellMouseOut || self.table.options.cellMouseOut) {
+               element.addEventListener("mouseout", function (e) {
+                       var component = self.getComponent();
+
+                       if (cellEvents.cellMouseOut) {
+                               cellEvents.cellMouseOut.call(self.table, e, component);
+                       }
+
+                       if (self.table.options.cellMouseOut) {
+                               self.table.options.cellMouseOut.call(self.table, e, component);
+                       }
+               });
+       }
+
+       if (cellEvents.cellMouseMove || self.table.options.cellMouseMove) {
+               element.addEventListener("mousemove", function (e) {
+                       var component = self.getComponent();
+
+                       if (cellEvents.cellMouseMove) {
+                               cellEvents.cellMouseMove.call(self.table, e, component);
+                       }
+
+                       if (self.table.options.cellMouseMove) {
+                               self.table.options.cellMouseMove.call(self.table, e, component);
+                       }
+               });
+       }
+};
+
+Cell.prototype._bindTouchEvents = function (cellEvents) {
+       var self = this,
+           element = self.element,
+           dblTap,
+           tapHold,
+           tap;
+
+       if (cellEvents.cellTap || this.table.options.cellTap) {
+               tap = false;
+
+               element.addEventListener("touchstart", function (e) {
+                       tap = true;
+               }, { passive: true });
+
+               element.addEventListener("touchend", function (e) {
+                       if (tap) {
+                               var component = self.getComponent();
+
+                               if (cellEvents.cellTap) {
+                                       cellEvents.cellTap.call(self.table, e, component);
+                               }
+
+                               if (self.table.options.cellTap) {
+                                       self.table.options.cellTap.call(self.table, e, component);
+                               }
+                       }
+
+                       tap = false;
+               });
+       }
+
+       if (cellEvents.cellDblTap || this.table.options.cellDblTap) {
+               dblTap = null;
+
+               element.addEventListener("touchend", function (e) {
+
+                       if (dblTap) {
+                               clearTimeout(dblTap);
+                               dblTap = null;
+
+                               var component = self.getComponent();
+
+                               if (cellEvents.cellDblTap) {
+                                       cellEvents.cellDblTap.call(self.table, e, component);
+                               }
+
+                               if (self.table.options.cellDblTap) {
+                                       self.table.options.cellDblTap.call(self.table, e, component);
+                               }
+                       } else {
+
+                               dblTap = setTimeout(function () {
+                                       clearTimeout(dblTap);
+                                       dblTap = null;
+                               }, 300);
+                       }
+               });
+       }
+
+       if (cellEvents.cellTapHold || this.table.options.cellTapHold) {
+               tapHold = null;
+
+               element.addEventListener("touchstart", function (e) {
+                       clearTimeout(tapHold);
+
+                       tapHold = setTimeout(function () {
+                               clearTimeout(tapHold);
+                               tapHold = null;
+                               tap = false;
+                               var component = self.getComponent();
+
+                               if (cellEvents.cellTapHold) {
+                                       cellEvents.cellTapHold.call(self.table, e, component);
+                               }
+
+                               if (self.table.options.cellTapHold) {
+                                       self.table.options.cellTapHold.call(self.table, e, component);
+                               }
+                       }, 1000);
+               }, { passive: true });
+
+               element.addEventListener("touchend", function (e) {
+                       clearTimeout(tapHold);
+                       tapHold = null;
+               });
+       }
+};
+
+//generate cell contents
+Cell.prototype._generateContents = function () {
+       var val;
+
+       if (this.table.modExists("format")) {
+               val = this.table.modules.format.formatValue(this);
+       } else {
+               val = this.element.innerHTML = this.value;
+       }
+
+       switch (typeof val === 'undefined' ? 'undefined' : _typeof(val)) {
+               case "object":
+                       if (val instanceof Node) {
+
+                               //clear previous cell contents
+                               while (this.element.firstChild) {
+                                       this.element.removeChild(this.element.firstChild);
+                               }this.element.appendChild(val);
+                       } else {
+                               this.element.innerHTML = "";
+
+                               if (val != null) {
+                                       console.warn("Format Error - Formatter has returned a type of object, the only valid formatter object return is an instance of Node, the formatter returned:", val);
+                               }
+                       }
+                       break;
+               case "undefined":
+               case "null":
+                       this.element.innerHTML = "";
+                       break;
+               default:
+                       this.element.innerHTML = val;
+       }
+};
+
+Cell.prototype.cellRendered = function () {
+       if (this.table.modExists("format") && this.table.modules.format.cellRendered) {
+               this.table.modules.format.cellRendered(this);
+       }
+};
+
+//generate tooltip text
+Cell.prototype._generateTooltip = function () {
+       var tooltip = this.column.tooltip;
+
+       if (tooltip) {
+               if (tooltip === true) {
+                       tooltip = this.value;
+               } else if (typeof tooltip == "function") {
+                       tooltip = tooltip(this.getComponent());
+
+                       if (tooltip === false) {
+                               tooltip = "";
+                       }
+               }
+
+               if (typeof tooltip === "undefined") {
+                       tooltip = "";
+               }
+
+               this.element.setAttribute("title", tooltip);
+       } else {
+               this.element.setAttribute("title", "");
+       }
+};
+
+//////////////////// Getters ////////////////////
+Cell.prototype.getElement = function () {
+       if (!this.loaded) {
+               this.loaded = true;
+               this.layoutElement();
+       }
+
+       return this.element;
+};
+
+Cell.prototype.getValue = function () {
+       return this.value;
+};
+
+Cell.prototype.getOldValue = function () {
+       return this.oldValue;
+};
+
+//////////////////// Actions ////////////////////
+
+Cell.prototype.setValue = function (value, mutate) {
+
+       var changed = this.setValueProcessData(value, mutate),
+           component;
+
+       if (changed) {
+               if (this.table.options.history && this.table.modExists("history")) {
+                       this.table.modules.history.action("cellEdit", this, { oldValue: this.oldValue, newValue: this.value });
+               }
+
+               component = this.getComponent();
+
+               if (this.column.cellEvents.cellEdited) {
+                       this.column.cellEvents.cellEdited.call(this.table, component);
+               }
+
+               if (this.table.options.groupUpdateOnCellEdit && this.table.options.groupBy && this.table.modExists("groupRows")) {
+                       this.table.modules.groupRows.reassignRowToGroup(this.row);
+               }
+
+               this.cellRendered();
+
+               this.table.options.cellEdited.call(this.table, component);
+
+               if (this.table.options.dataChanged) {
+                       this.table.options.dataChanged.call(this.table, this.table.rowManager.getData());
+               }
+       }
+};
+
+Cell.prototype.setValueProcessData = function (value, mutate) {
+       var changed = false;
+
+       if (this.value != value) {
+
+               changed = true;
+
+               if (mutate) {
+                       if (this.column.modules.mutate) {
+                               value = this.table.modules.mutator.transformCell(this, value);
+                       }
+               }
+       }
+
+       this.setValueActual(value);
+
+       if (changed && this.table.modExists("columnCalcs")) {
+               if (this.column.definition.topCalc || this.column.definition.bottomCalc) {
+                       if (this.table.options.groupBy && this.table.modExists("groupRows")) {
+
+                               if (this.table.options.columnCalcs == "table" || this.table.options.columnCalcs == "both") {
+                                       this.table.modules.columnCalcs.recalc(this.table.rowManager.activeRows);
+                               }
+
+                               if (this.table.options.columnCalcs != "table") {
+                                       this.table.modules.columnCalcs.recalcRowGroup(this.row);
+                               }
+                       } else {
+                               this.table.modules.columnCalcs.recalc(this.table.rowManager.activeRows);
+                       }
+               }
+       }
+
+       return changed;
+};
+
+Cell.prototype.setValueActual = function (value) {
+       this.oldValue = this.value;
+
+       this.value = value;
+
+       if (this.table.options.reactiveData && this.table.modExists("reactiveData")) {
+               this.table.modules.reactiveData.block();
+       }
+
+       this.column.setFieldValue(this.row.data, value);
+
+       if (this.table.options.reactiveData && this.table.modExists("reactiveData")) {
+               this.table.modules.reactiveData.unblock();
+       }
+
+       if (this.loaded) {
+               this.layoutElement();
+       }
+};
+
+Cell.prototype.layoutElement = function () {
+       this._generateContents();
+       this._generateTooltip();
+
+       //set resizable handles
+       if (this.table.options.resizableColumns && this.table.modExists("resizeColumns") && this.row.type === "row") {
+               this.table.modules.resizeColumns.initializeColumn("cell", this.column, this.element);
+       }
+
+       if ((this.column.definition.contextMenu || this.column.definition.clickMenu) && this.table.modExists("menu")) {
+               this.table.modules.menu.initializeCell(this);
+       }
+
+       //handle frozen cells
+       if (this.table.modExists("frozenColumns")) {
+               this.table.modules.frozenColumns.layoutElement(this.element, this.column);
+       }
+};
+
+Cell.prototype.setWidth = function () {
+       this.width = this.column.width;
+       this.element.style.width = this.column.widthStyled;
+};
+
+Cell.prototype.clearWidth = function () {
+       this.width = "";
+       this.element.style.width = "";
+};
+
+Cell.prototype.getWidth = function () {
+       return this.width || this.element.offsetWidth;
+};
+
+Cell.prototype.setMinWidth = function () {
+       this.minWidth = this.column.minWidth;
+       this.element.style.minWidth = this.column.minWidthStyled;
+};
+
+Cell.prototype.checkHeight = function () {
+       // var height = this.element.css("height");
+       this.row.reinitializeHeight();
+};
+
+Cell.prototype.clearHeight = function () {
+       this.element.style.height = "";
+       this.height = null;
+};
+
+Cell.prototype.setHeight = function () {
+       this.height = this.row.height;
+       this.element.style.height = this.row.heightStyled;
+};
+
+Cell.prototype.getHeight = function () {
+       return this.height || this.element.offsetHeight;
+};
+
+Cell.prototype.show = function () {
+       this.element.style.display = this.column.vertAlign ? "inline-flex" : "";
+};
+
+Cell.prototype.hide = function () {
+       this.element.style.display = "none";
+};
+
+Cell.prototype.edit = function (force) {
+       if (this.table.modExists("edit", true)) {
+               return this.table.modules.edit.editCell(this, force);
+       }
+};
+
+Cell.prototype.cancelEdit = function () {
+       if (this.table.modExists("edit", true)) {
+               var editing = this.table.modules.edit.getCurrentCell();
+
+               if (editing && editing._getSelf() === this) {
+                       this.table.modules.edit.cancelEdit();
+               } else {
+                       console.warn("Cancel Editor Error - This cell is not currently being edited ");
+               }
+       }
+};
+
+Cell.prototype.validate = function () {
+       if (this.column.modules.validate && this.table.modExists("validate", true)) {
+               var valid = this.table.modules.validate.validate(this.column.modules.validate, this, this.getValue());
+
+               return valid === true;
+       } else {
+               return true;
+       }
+};
+
+Cell.prototype.delete = function () {
+       if (!this.table.rowManager.redrawBlock && this.element.parentNode) {
+               this.element.parentNode.removeChild(this.element);
+       }
+
+       if (this.modules.validate && this.modules.validate.invalid) {
+               this.table.modules.validate.clearValidation(this);
+       }
+
+       if (this.modules.edit && this.modules.edit.edited) {
+               this.table.modules.edit.clearEdited(this);
+       }
+
+       if (this.table.options.history) {
+               this.table.modules.history.clearComponentHistory(this);
+       }
+
+       this.element = false;
+       this.column.deleteCell(this);
+       this.row.deleteCell(this);
+       this.calcs = {};
+};
+
+//////////////// Navigation /////////////////
+
+Cell.prototype.nav = function () {
+
+       var self = this,
+           nextCell = false,
+           index = this.row.getCellIndex(this);
+
+       return {
+               next: function next() {
+                       var nextCell = this.right(),
+                           nextRow;
+
+                       if (!nextCell) {
+                               nextRow = self.table.rowManager.nextDisplayRow(self.row, true);
+
+                               if (nextRow) {
+                                       nextCell = nextRow.findNextEditableCell(-1);
+
+                                       if (nextCell) {
+                                               nextCell.edit();
+                                               return true;
+                                       }
+                               }
+                       } else {
+                               return true;
+                       }
+
+                       return false;
+               },
+               prev: function prev() {
+                       var nextCell = this.left(),
+                           prevRow;
+
+                       if (!nextCell) {
+                               prevRow = self.table.rowManager.prevDisplayRow(self.row, true);
+
+                               if (prevRow) {
+                                       nextCell = prevRow.findPrevEditableCell(prevRow.cells.length);
+
+                                       if (nextCell) {
+                                               nextCell.edit();
+                                               return true;
+                                       }
+                               }
+                       } else {
+                               return true;
+                       }
+
+                       return false;
+               },
+               left: function left() {
+
+                       nextCell = self.row.findPrevEditableCell(index);
+
+                       if (nextCell) {
+                               nextCell.edit();
+                               return true;
+                       } else {
+                               return false;
+                       }
+               },
+               right: function right() {
+                       nextCell = self.row.findNextEditableCell(index);
+
+                       if (nextCell) {
+                               nextCell.edit();
+                               return true;
+                       } else {
+                               return false;
+                       }
+               },
+               up: function up() {
+                       var nextRow = self.table.rowManager.prevDisplayRow(self.row, true);
+
+                       if (nextRow) {
+                               nextRow.cells[index].edit();
+                       }
+               },
+               down: function down() {
+                       var nextRow = self.table.rowManager.nextDisplayRow(self.row, true);
+
+                       if (nextRow) {
+                               nextRow.cells[index].edit();
+                       }
+               }
+
+       };
+};
+
+Cell.prototype.getIndex = function () {
+       this.row.getCellIndex(this);
+};
+
+//////////////// Object Generation /////////////////
+Cell.prototype.getComponent = function () {
+
+       if (!this.component) {
+               this.component = new CellComponent(this);
+       }
+
+       return this.component;
+};
+var FooterManager = function FooterManager(table) {
+       this.table = table;
+       this.active = false;
+       this.element = this.createElement(); //containing element
+       this.external = false;
+       this.links = [];
+
+       this._initialize();
+};
+
+FooterManager.prototype.createElement = function () {
+       var el = document.createElement("div");
+
+       el.classList.add("tabulator-footer");
+
+       return el;
+};
+
+FooterManager.prototype._initialize = function (element) {
+       if (this.table.options.footerElement) {
+
+               switch (_typeof(this.table.options.footerElement)) {
+                       case "string":
+
+                               if (this.table.options.footerElement[0] === "<") {
+                                       this.element.innerHTML = this.table.options.footerElement;
+                               } else {
+                                       this.external = true;
+                                       this.element = document.querySelector(this.table.options.footerElement);
+                               }
+                               break;
+                       default:
+                               this.element = this.table.options.footerElement;
+                               break;
+               }
+       }
+};
+
+FooterManager.prototype.getElement = function () {
+       return this.element;
+};
+
+FooterManager.prototype.append = function (element, parent) {
+       this.activate(parent);
+
+       this.element.appendChild(element);
+       this.table.rowManager.adjustTableSize();
+};
+
+FooterManager.prototype.prepend = function (element, parent) {
+       this.activate(parent);
+
+       this.element.insertBefore(element, this.element.firstChild);
+       this.table.rowManager.adjustTableSize();
+};
+
+FooterManager.prototype.remove = function (element) {
+       element.parentNode.removeChild(element);
+       this.deactivate();
+};
+
+FooterManager.prototype.deactivate = function (force) {
+       if (!this.element.firstChild || force) {
+               if (!this.external) {
+                       this.element.parentNode.removeChild(this.element);
+               }
+               this.active = false;
+       }
+
+       // this.table.rowManager.adjustTableSize();
+};
+
+FooterManager.prototype.activate = function (parent) {
+       if (!this.active) {
+               this.active = true;
+               if (!this.external) {
+                       this.table.element.appendChild(this.getElement());
+                       this.table.element.style.display = '';
+               }
+       }
+
+       if (parent) {
+               this.links.push(parent);
+       }
+};
+
+FooterManager.prototype.redraw = function () {
+       this.links.forEach(function (link) {
+               link.footerRedraw();
+       });
+};
+
+var Tabulator = function Tabulator(element, options) {
+
+       this.options = {};
+
+       this.columnManager = null; // hold Column Manager
+       this.rowManager = null; //hold Row Manager
+       this.footerManager = null; //holder Footer Manager
+       this.vdomHoz = null; //holder horizontal virtual dom
+
+
+       this.browser = ""; //hold current browser type
+       this.browserSlow = false; //handle reduced functionality for slower browsers
+       this.browserMobile = false; //check if running on moble, prevent resize cancelling edit on keyboard appearence
+       this.rtl = false; //check if the table is in RTL mode
+
+       this.modules = {}; //hold all modules bound to this table
+
+       if (this.initializeElement(element)) {
+               this.initializeOptions(options || {});
+               this._create();
+       }
+
+       Tabulator.prototype.comms.register(this); //register table for inderdevice communication
+};
+
+//default setup options
+Tabulator.prototype.defaultOptions = {
+
+       height: false, //height of tabulator
+       minHeight: false, //minimum height of tabulator
+       maxHeight: false, //maximum height of tabulator
+
+       layout: "fitData", ///layout type "fitColumns" | "fitData"
+       layoutColumnsOnNewData: false, //update column widths on setData
+
+       columnMinWidth: 40, //minimum global width for a column
+       columnHeaderVertAlign: "top", //vertical alignment of column headers
+       columnVertAlign: false, // DEPRECATED - Left to allow warning
+
+       resizableColumns: true, //resizable columns
+       resizableRows: false, //resizable rows
+       autoResize: true, //auto resize table
+
+       columns: [], //store for colum header info
+
+       cellHozAlign: "", //horizontal align columns
+       cellVertAlign: "", //vertical align columns
+       headerHozAlign: "", //horizontal header alignment
+
+
+       data: [], //default starting data
+
+       autoColumns: false, //build columns from data row structure
+       autoColumnsDefinitions: false,
+
+       reactiveData: false, //enable data reactivity
+
+       nestedFieldSeparator: ".", //seperatpr for nested data
+
+       tooltips: false, //Tool tip value
+       tooltipsHeader: false, //Tool tip for headers
+       tooltipGenerationMode: "load", //when to generate tooltips
+
+       initialSort: false, //initial sorting criteria
+       initialFilter: false, //initial filtering criteria
+       initialHeaderFilter: false, //initial header filtering criteria
+
+       columnHeaderSortMulti: true, //multiple or single column sorting
+
+       sortOrderReverse: false, //reverse internal sort ordering
+
+       headerSort: true, //set default global header sort
+       headerSortTristate: false, //set default tristate header sorting
+       headerSortElement: "<div class='tabulator-arrow'></div>", //header sort element
+
+       footerElement: false, //hold footer element
+
+       index: "id", //filed for row index
+
+       textDirection: "auto",
+
+       keybindings: [], //array for keybindings
+
+       tabEndNewRow: false, //create new row when tab to end of table
+
+       invalidOptionWarnings: true, //allow toggling of invalid option warnings
+
+       clipboard: false, //enable clipboard
+       clipboardCopyStyled: true, //formatted table data
+       clipboardCopyConfig: false, //clipboard config
+       clipboardCopyFormatter: false, //DEPRICATED - REMOVE in 5.0
+       clipboardCopyRowRange: "active", //restrict clipboard to visible rows only
+       clipboardPasteParser: "table", //convert pasted clipboard data to rows
+       clipboardPasteAction: "insert", //how to insert pasted data into the table
+
+       clipboardCopied: function clipboardCopied() {}, //data has been copied to the clipboard
+       clipboardPasted: function clipboardPasted() {}, //data has been pasted into the table
+       clipboardPasteError: function clipboardPasteError() {}, //data has not successfully been pasted into the table
+
+       downloadDataFormatter: false, //function to manipulate table data before it is downloaded
+       downloadReady: function downloadReady(data, blob) {
+               return blob;
+       }, //function to manipulate download data
+       downloadComplete: false, //function to manipulate download data
+       downloadConfig: {}, //download config
+       downloadRowRange: "active", //restrict download to active rows only
+
+       dataTree: false, //enable data tree
+       dataTreeFilter: true, //filter child rows
+       dataTreeSort: true, //sort child rows
+       dataTreeElementColumn: false,
+       dataTreeBranchElement: true, //show data tree branch element
+       dataTreeChildIndent: 9, //data tree child indent in px
+       dataTreeChildField: "_children", //data tre column field to look for child rows
+       dataTreeCollapseElement: false, //data tree row collapse element
+       dataTreeExpandElement: false, //data tree row expand element
+       dataTreeStartExpanded: false,
+       dataTreeRowExpanded: function dataTreeRowExpanded() {}, //row has been expanded
+       dataTreeRowCollapsed: function dataTreeRowCollapsed() {}, //row has been collapsed
+       dataTreeChildColumnCalcs: false, //include visible data tree rows in column calculations
+       dataTreeSelectPropagate: false, //seleccting a parent row selects its children
+
+       printAsHtml: false, //enable print as html
+       printFormatter: false, //printing page formatter
+       printHeader: false, //page header contents
+       printFooter: false, //page footer contents
+       printCopyStyle: true, //DEPRICATED - REMOVE in 5.0
+       printStyled: true, //enable print as html styling
+       printVisibleRows: true, //DEPRICATED - REMOVE in 5.0
+       printRowRange: "visible", //restrict print to visible rows only
+       printConfig: {}, //print config options
+
+       addRowPos: "bottom", //position to insert blank rows, top|bottom
+
+       selectable: "highlight", //highlight rows on hover
+       selectableRangeMode: "drag", //highlight rows on hover
+       selectableRollingSelection: true, //roll selection once maximum number of selectable rows is reached
+       selectablePersistence: true, // maintain selection when table view is updated
+       selectableCheck: function selectableCheck(data, row) {
+               return true;
+       }, //check wheather row is selectable
+
+       headerFilterLiveFilterDelay: 300, //delay before updating column after user types in header filter
+       headerFilterPlaceholder: false, //placeholder text to display in header filters
+
+       headerVisible: true, //hide header
+
+       history: false, //enable edit history
+
+       locale: false, //current system language
+       langs: {},
+
+       virtualDom: true, //enable DOM virtualization
+       virtualDomBuffer: 0, // set virtual DOM buffer size
+       virtualDomHoz: false, //enable horizontal DOM virtualization
+
+       persistentLayout: false, //DEPRICATED - REMOVE in 5.0
+       persistentSort: false, //DEPRICATED - REMOVE in 5.0
+       persistentFilter: false, //DEPRICATED - REMOVE in 5.0
+       persistenceID: "", //key for persistent storage
+       persistenceMode: true, //mode for storing persistence information
+       persistenceReaderFunc: false, //function for handling persistence data reading
+       persistenceWriterFunc: false, //function for handling persistence data writing
+
+       persistence: false,
+
+       responsiveLayout: false, //responsive layout flags
+       responsiveLayoutCollapseStartOpen: true, //start showing collapsed data
+       responsiveLayoutCollapseUseFormatters: true, //responsive layout collapse formatter
+       responsiveLayoutCollapseFormatter: false, //responsive layout collapse formatter
+
+       pagination: false, //set pagination type
+       paginationSize: false, //set number of rows to a page
+       paginationInitialPage: 1, //initail page to show on load
+       paginationButtonCount: 5, // set count of page button
+       paginationSizeSelector: false, //add pagination size selector element
+       paginationElement: false, //element to hold pagination numbers
+       paginationDataSent: {}, //pagination data sent to the server
+       paginationDataReceived: {}, //pagination data received from the server
+       paginationAddRow: "page", //add rows on table or page
+
+       ajaxURL: false, //url for ajax loading
+       ajaxURLGenerator: false,
+       ajaxParams: {}, //params for ajax loading
+       ajaxConfig: "get", //ajax request type
+       ajaxContentType: "form", //ajax request type
+       ajaxRequestFunc: false, //promise function
+       ajaxLoader: true, //show loader
+       ajaxLoaderLoading: false, //loader element
+       ajaxLoaderError: false, //loader element
+       ajaxFiltering: false,
+       ajaxSorting: false,
+       ajaxProgressiveLoad: false, //progressive loading
+       ajaxProgressiveLoadDelay: 0, //delay between requests
+       ajaxProgressiveLoadScrollMargin: 0, //margin before scroll begins
+
+       groupBy: false, //enable table grouping and set field to group by
+       groupStartOpen: true, //starting state of group
+       groupValues: false,
+       groupUpdateOnCellEdit: false,
+
+       groupHeader: false, //header generation function
+       groupHeaderPrint: null,
+       groupHeaderClipboard: null,
+       groupHeaderHtmlOutput: null,
+       groupHeaderDownload: null,
+
+       htmlOutputConfig: false, //html outypu config
+
+       movableColumns: false, //enable movable columns
+
+       movableRows: false, //enable movable rows
+       movableRowsConnectedTables: false, //tables for movable rows to be connected to
+       movableRowsConnectedElements: false, //other elements for movable rows to be connected to
+       movableRowsSender: false,
+       movableRowsReceiver: "insert",
+       movableRowsSendingStart: function movableRowsSendingStart() {},
+       movableRowsSent: function movableRowsSent() {},
+       movableRowsSentFailed: function movableRowsSentFailed() {},
+       movableRowsSendingStop: function movableRowsSendingStop() {},
+       movableRowsReceivingStart: function movableRowsReceivingStart() {},
+       movableRowsReceived: function movableRowsReceived() {},
+       movableRowsReceivedFailed: function movableRowsReceivedFailed() {},
+       movableRowsReceivingStop: function movableRowsReceivingStop() {},
+       movableRowsElementDrop: function movableRowsElementDrop() {},
+
+       scrollToRowPosition: "top",
+       scrollToRowIfVisible: true,
+
+       scrollToColumnPosition: "left",
+       scrollToColumnIfVisible: true,
+
+       rowFormatter: false,
+       rowFormatterPrint: null,
+       rowFormatterClipboard: null,
+       rowFormatterHtmlOutput: null,
+
+       placeholder: false,
+
+       //table building callbacks
+       tableBuilding: function tableBuilding() {},
+       tableBuilt: function tableBuilt() {},
+
+       //render callbacks
+       renderStarted: function renderStarted() {},
+       renderComplete: function renderComplete() {},
+
+       //row callbacks
+       rowClick: false,
+       rowDblClick: false,
+       rowContext: false,
+       rowTap: false,
+       rowDblTap: false,
+       rowTapHold: false,
+       rowMouseEnter: false,
+       rowMouseLeave: false,
+       rowMouseOver: false,
+       rowMouseOut: false,
+       rowMouseMove: false,
+       rowContextMenu: false,
+       rowClickMenu: false,
+       rowAdded: function rowAdded() {},
+       rowDeleted: function rowDeleted() {},
+       rowMoved: function rowMoved() {},
+       rowUpdated: function rowUpdated() {},
+       rowSelectionChanged: function rowSelectionChanged() {},
+       rowSelected: function rowSelected() {},
+       rowDeselected: function rowDeselected() {},
+       rowResized: function rowResized() {},
+
+       //cell callbacks
+       //row callbacks
+       cellClick: false,
+       cellDblClick: false,
+       cellContext: false,
+       cellTap: false,
+       cellDblTap: false,
+       cellTapHold: false,
+       cellMouseEnter: false,
+       cellMouseLeave: false,
+       cellMouseOver: false,
+       cellMouseOut: false,
+       cellMouseMove: false,
+       cellEditing: function cellEditing() {},
+       cellEdited: function cellEdited() {},
+       cellEditCancelled: function cellEditCancelled() {},
+
+       //column callbacks
+       columnMoved: false,
+       columnResized: function columnResized() {},
+       columnTitleChanged: function columnTitleChanged() {},
+       columnVisibilityChanged: function columnVisibilityChanged() {},
+
+       //HTML iport callbacks
+       htmlImporting: function htmlImporting() {},
+       htmlImported: function htmlImported() {},
+
+       //data callbacks
+       dataLoading: function dataLoading() {},
+       dataLoaded: function dataLoaded() {},
+       dataEdited: false, //DEPRECATED
+       dataChanged: false,
+
+       //ajax callbacks
+       ajaxRequesting: function ajaxRequesting() {},
+       ajaxResponse: false,
+       ajaxError: function ajaxError() {},
+
+       //filtering callbacks
+       dataFiltering: false,
+       dataFiltered: false,
+
+       //sorting callbacks
+       dataSorting: function dataSorting() {},
+       dataSorted: function dataSorted() {},
+
+       //grouping callbacks
+       groupToggleElement: "arrow",
+       groupClosedShowCalcs: false,
+       dataGrouping: function dataGrouping() {},
+       dataGrouped: false,
+       groupVisibilityChanged: function groupVisibilityChanged() {},
+       groupClick: false,
+       groupDblClick: false,
+       groupContext: false,
+       groupContextMenu: false,
+       groupClickMenu: false,
+       groupTap: false,
+       groupDblTap: false,
+       groupTapHold: false,
+
+       columnCalcs: true,
+
+       //pagination callbacks
+       pageLoaded: function pageLoaded() {},
+
+       //localization callbacks
+       localized: function localized() {},
+
+       //validation callbacks
+       validationMode: "blocking",
+       validationFailed: function validationFailed() {},
+
+       //history callbacks
+       historyUndo: function historyUndo() {},
+       historyRedo: function historyRedo() {},
+
+       //scroll callbacks
+       scrollHorizontal: function scrollHorizontal() {},
+       scrollVertical: function scrollVertical() {}
+};
+
+Tabulator.prototype.initializeOptions = function (options) {
+
+       //warn user if option is not available
+       if (options.invalidOptionWarnings !== false) {
+               for (var key in options) {
+                       if (typeof this.defaultOptions[key] === "undefined") {
+                               console.warn("Invalid table constructor option:", key);
+                       }
+               }
+       }
+
+       //assign options to table
+       for (var key in this.defaultOptions) {
+               if (key in options) {
+                       this.options[key] = options[key];
+               } else {
+                       if (Array.isArray(this.defaultOptions[key])) {
+                               this.options[key] = Object.assign([], this.defaultOptions[key]);
+                       } else if (_typeof(this.defaultOptions[key]) === "object" && this.defaultOptions[key] !== null) {
+                               this.options[key] = Object.assign({}, this.defaultOptions[key]);
+                       } else {
+                               this.options[key] = this.defaultOptions[key];
+                       }
+               }
+       }
+};
+
+Tabulator.prototype.initializeElement = function (element) {
+
+       if (typeof HTMLElement !== "undefined" && element instanceof HTMLElement) {
+               this.element = element;
+               return true;
+       } else if (typeof element === "string") {
+               this.element = document.querySelector(element);
+
+               if (this.element) {
+                       return true;
+               } else {
+                       console.error("Tabulator Creation Error - no element found matching selector: ", element);
+                       return false;
+               }
+       } else {
+               console.error("Tabulator Creation Error - Invalid element provided:", element);
+               return false;
+       }
+};
+
+Tabulator.prototype.rtlCheck = function () {
+       var style = window.getComputedStyle(this.element);
+
+       switch (this.options.textDirection) {
+               case "auto":
+                       if (style.direction !== "rtl") {
+                               break;
+                       };
+
+               case "rtl":
+                       this.element.classList.add("tabulator-rtl");
+                       this.rtl = true;
+                       break;
+
+               case "ltr":
+                       this.element.classList.add("tabulator-ltr");
+
+               default:
+                       this.rtl = false;
+       }
+};
+
+//convert depricated functionality to new functions
+Tabulator.prototype._mapDepricatedFunctionality = function () {
+
+       //map depricated persistance setup options
+       if (this.options.persistentLayout || this.options.persistentSort || this.options.persistentFilter) {
+               if (!this.options.persistence) {
+                       this.options.persistence = {};
+               }
+       }
+
+       if (this.options.dataEdited) {
+               console.warn("DEPRECATION WARNING - dataEdited option has been deprecated, please use the dataChanged option instead");
+               this.options.dataChanged = this.options.dataEdited;
+       }
+
+       if (this.options.downloadDataFormatter) {
+               console.warn("DEPRECATION WARNING - downloadDataFormatter option has been deprecated");
+       }
+
+       if (typeof this.options.clipboardCopyHeader !== "undefined") {
+               this.options.columnHeaders = this.options.clipboardCopyHeader;
+               console.warn("DEPRECATION WARNING - clipboardCopyHeader option has been deprecated, please use the columnHeaders property on the clipboardCopyConfig option");
+       }
+
+       if (this.options.printVisibleRows !== true) {
+               console.warn("printVisibleRows option is deprecated, you should now use the printRowRange option");
+
+               this.options.persistence.printRowRange = "active";
+       }
+
+       if (this.options.printCopyStyle !== true) {
+               console.warn("printCopyStyle option is deprecated, you should now use the printStyled option");
+
+               this.options.persistence.printStyled = this.options.printCopyStyle;
+       }
+
+       if (this.options.persistentLayout) {
+               console.warn("persistentLayout option is deprecated, you should now use the persistence option");
+
+               if (this.options.persistence !== true && typeof this.options.persistence.columns === "undefined") {
+                       this.options.persistence.columns = true;
+               }
+       }
+
+       if (this.options.persistentSort) {
+               console.warn("persistentSort option is deprecated, you should now use the persistence option");
+
+               if (this.options.persistence !== true && typeof this.options.persistence.sort === "undefined") {
+                       this.options.persistence.sort = true;
+               }
+       }
+
+       if (this.options.persistentFilter) {
+               console.warn("persistentFilter option is deprecated, you should now use the persistence option");
+
+               if (this.options.persistence !== true && typeof this.options.persistence.filter === "undefined") {
+                       this.options.persistence.filter = true;
+               }
+       }
+
+       if (this.options.columnVertAlign) {
+               console.warn("columnVertAlign option is deprecated, you should now use the columnHeaderVertAlign option");
+
+               this.options.columnHeaderVertAlign = this.options.columnVertAlign;
+       }
+};
+
+Tabulator.prototype._clearSelection = function () {
+
+       this.element.classList.add("tabulator-block-select");
+
+       if (window.getSelection) {
+               if (window.getSelection().empty) {
+                       // Chrome
+                       window.getSelection().empty();
+               } else if (window.getSelection().removeAllRanges) {
+                       // Firefox
+                       window.getSelection().removeAllRanges();
+               }
+       } else if (document.selection) {
+               // IE?
+               document.selection.empty();
+       }
+
+       this.element.classList.remove("tabulator-block-select");
+};
+
+//concreate table
+Tabulator.prototype._create = function () {
+       this._clearObjectPointers();
+
+       this._mapDepricatedFunctionality();
+
+       this.bindModules();
+
+       this.rtlCheck();
+
+       if (this.element.tagName === "TABLE") {
+               if (this.modExists("htmlTableImport", true)) {
+                       this.modules.htmlTableImport.parseTable();
+               }
+       }
+
+       this.columnManager = new ColumnManager(this);
+       this.rowManager = new RowManager(this);
+       this.footerManager = new FooterManager(this);
+
+       this.columnManager.setRowManager(this.rowManager);
+       this.rowManager.setColumnManager(this.columnManager);
+
+       if (this.options.virtualDomHoz) {
+               this.vdomHoz = new VDomHoz(this);
+       }
+
+       this._buildElement();
+
+       this._loadInitialData();
+};
+
+//clear pointers to objects in default config object
+Tabulator.prototype._clearObjectPointers = function () {
+       this.options.columns = this.options.columns.slice(0);
+
+       if (!this.options.reactiveData) {
+               this.options.data = this.options.data.slice(0);
+       }
+};
+
+//build tabulator element
+Tabulator.prototype._buildElement = function () {
+       var _this24 = this;
+
+       var element = this.element,
+           mod = this.modules,
+           options = this.options;
+
+       options.tableBuilding.call(this);
+
+       element.classList.add("tabulator");
+       element.setAttribute("role", "grid");
+
+       //empty element
+       while (element.firstChild) {
+               element.removeChild(element.firstChild);
+       } //set table height
+       if (options.height) {
+               options.height = isNaN(options.height) ? options.height : options.height + "px";
+               element.style.height = options.height;
+       }
+
+       //set table min height
+       if (options.minHeight !== false) {
+               options.minHeight = isNaN(options.minHeight) ? options.minHeight : options.minHeight + "px";
+               element.style.minHeight = options.minHeight;
+       }
+
+       //set table maxHeight
+       if (options.maxHeight !== false) {
+               options.maxHeight = isNaN(options.maxHeight) ? options.maxHeight : options.maxHeight + "px";
+               element.style.maxHeight = options.maxHeight;
+       }
+
+       this.columnManager.initialize();
+       this.rowManager.initialize();
+
+       this._detectBrowser();
+
+       if (this.modExists("layout", true)) {
+               mod.layout.initialize(options.layout);
+       }
+
+       //set localization
+
+       mod.localize.initialize();
+
+       if (options.headerFilterPlaceholder !== false) {
+               mod.localize.setHeaderFilterPlaceholder(options.headerFilterPlaceholder);
+       }
+
+       for (var locale in options.langs) {
+               mod.localize.installLang(locale, options.langs[locale]);
+       }
+
+       mod.localize.setLocale(options.locale);
+
+       //configure placeholder element
+       if (typeof options.placeholder == "string") {
+
+               var el = document.createElement("div");
+               el.classList.add("tabulator-placeholder");
+
+               var span = document.createElement("span");
+               span.innerHTML = options.placeholder;
+
+               el.appendChild(span);
+
+               options.placeholder = el;
+       }
+
+       //build table elements
+       element.appendChild(this.columnManager.getElement());
+       element.appendChild(this.rowManager.getElement());
+
+       if (options.footerElement) {
+               this.footerManager.activate();
+       }
+
+       if (options.persistence && this.modExists("persistence", true)) {
+               mod.persistence.initialize();
+       }
+
+       if (options.persistence && this.modExists("persistence", true) && mod.persistence.config.columns) {
+               options.columns = mod.persistence.load("columns", options.columns);
+       }
+
+       if (options.movableRows && this.modExists("moveRow")) {
+               mod.moveRow.initialize();
+       }
+
+       if (options.autoColumns && this.options.data) {
+               this.columnManager.generateColumnsFromRowData(this.options.data);
+       }
+
+       if (this.modExists("columnCalcs")) {
+               mod.columnCalcs.initialize();
+       }
+
+       this.columnManager.setColumns(options.columns);
+
+       if (options.dataTree && this.modExists("dataTree", true)) {
+               mod.dataTree.initialize();
+       }
+
+       if (this.modExists("frozenRows")) {
+               this.modules.frozenRows.initialize();
+       }
+
+       if ((options.persistence && this.modExists("persistence", true) && mod.persistence.config.sort || options.initialSort) && this.modExists("sort", true)) {
+               var sorters = [];
+
+               if (options.persistence && this.modExists("persistence", true) && mod.persistence.config.sort) {
+                       sorters = mod.persistence.load("sort");
+
+                       if (sorters === false && options.initialSort) {
+                               sorters = options.initialSort;
+                       }
+               } else if (options.initialSort) {
+                       sorters = options.initialSort;
+               }
+
+               mod.sort.setSort(sorters);
+       }
+
+       if ((options.persistence && this.modExists("persistence", true) && mod.persistence.config.filter || options.initialFilter) && this.modExists("filter", true)) {
+               var filters = [];
+
+               if (options.persistence && this.modExists("persistence", true) && mod.persistence.config.filter) {
+                       filters = mod.persistence.load("filter");
+
+                       if (filters === false && options.initialFilter) {
+                               filters = options.initialFilter;
+                       }
+               } else if (options.initialFilter) {
+                       filters = options.initialFilter;
+               }
+
+               mod.filter.setFilter(filters);
+       }
+
+       if (options.initialHeaderFilter && this.modExists("filter", true)) {
+               options.initialHeaderFilter.forEach(function (item) {
+
+                       var column = _this24.columnManager.findColumn(item.field);
+
+                       if (column) {
+                               mod.filter.setHeaderFilterValue(column, item.value);
+                       } else {
+                               console.warn("Column Filter Error - No matching column found:", item.field);
+                               return false;
+                       }
+               });
+       }
+
+       if (this.modExists("ajax")) {
+               mod.ajax.initialize();
+       }
+
+       if (options.pagination && this.modExists("page", true)) {
+               mod.page.initialize();
+       }
+
+       if (options.groupBy && this.modExists("groupRows", true)) {
+               mod.groupRows.initialize();
+       }
+
+       if (this.modExists("keybindings")) {
+               mod.keybindings.initialize();
+       }
+
+       if (this.modExists("selectRow")) {
+               mod.selectRow.clearSelectionData(true);
+       }
+
+       if (options.autoResize && this.modExists("resizeTable")) {
+               mod.resizeTable.initialize();
+       }
+
+       if (this.modExists("clipboard")) {
+               mod.clipboard.initialize();
+       }
+
+       if (options.printAsHtml && this.modExists("print")) {
+               mod.print.initialize();
+       }
+
+       options.tableBuilt.call(this);
+};
+
+Tabulator.prototype._loadInitialData = function () {
+       var self = this;
+
+       if (self.options.pagination && self.modExists("page")) {
+               self.modules.page.reset(true, true);
+
+               if (self.options.pagination == "local") {
+                       if (self.options.data.length) {
+                               self.rowManager.setData(self.options.data, false, true);
+                       } else {
+                               if ((self.options.ajaxURL || self.options.ajaxURLGenerator) && self.modExists("ajax")) {
+                                       self.modules.ajax.loadData(false, true).then(function () {}).catch(function () {
+                                               if (self.options.paginationInitialPage) {
+                                                       self.modules.page.setPage(self.options.paginationInitialPage);
+                                               }
+                                       });
+
+                                       return;
+                               } else {
+                                       self.rowManager.setData(self.options.data, false, true);
+                               }
+                       }
+
+                       if (self.options.paginationInitialPage) {
+                               self.modules.page.setPage(self.options.paginationInitialPage);
+                       }
+               } else {
+                       if (self.options.ajaxURL) {
+                               self.modules.page.setPage(self.options.paginationInitialPage).then(function () {}).catch(function () {});
+                       } else {
+                               self.rowManager.setData([], false, true);
+                       }
+               }
+       } else {
+               if (self.options.data.length) {
+                       self.rowManager.setData(self.options.data);
+               } else {
+                       if ((self.options.ajaxURL || self.options.ajaxURLGenerator) && self.modExists("ajax")) {
+                               self.modules.ajax.loadData(false, true).then(function () {}).catch(function () {});
+                       } else {
+                               self.rowManager.setData(self.options.data, false, true);
+                       }
+               }
+       }
+};
+
+//deconstructor
+Tabulator.prototype.destroy = function () {
+       var element = this.element;
+
+       Tabulator.prototype.comms.deregister(this); //deregister table from inderdevice communication
+
+       if (this.options.reactiveData && this.modExists("reactiveData", true)) {
+               this.modules.reactiveData.unwatchData();
+       }
+
+       //clear row data
+       this.rowManager.rows.forEach(function (row) {
+               row.wipe();
+       });
+
+       this.rowManager.rows = [];
+       this.rowManager.activeRows = [];
+       this.rowManager.displayRows = [];
+
+       //clear event bindings
+       if (this.options.autoResize && this.modExists("resizeTable")) {
+               this.modules.resizeTable.clearBindings();
+       }
+
+       if (this.modExists("keybindings")) {
+               this.modules.keybindings.clearBindings();
+       }
+
+       //clear DOM
+       while (element.firstChild) {
+               element.removeChild(element.firstChild);
+       }element.classList.remove("tabulator");
+};
+
+Tabulator.prototype._detectBrowser = function () {
+       var ua = navigator.userAgent || navigator.vendor || window.opera;
+
+       if (ua.indexOf("Trident") > -1) {
+               this.browser = "ie";
+               this.browserSlow = true;
+       } else if (ua.indexOf("Edge") > -1) {
+               this.browser = "edge";
+               this.browserSlow = true;
+       } else if (ua.indexOf("Firefox") > -1) {
+               this.browser = "firefox";
+               this.browserSlow = false;
+       } else {
+               this.browser = "other";
+               this.browserSlow = false;
+       }
+
+       this.browserMobile = /(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino|android|ipad|playbook|silk/i.test(ua) || /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(ua.substr(0, 4));
+};
+
+////////////////// Data Handling //////////////////
+
+//block table redrawing
+Tabulator.prototype.blockRedraw = function () {
+       return this.rowManager.blockRedraw();
+};
+
+//restore table redrawing
+Tabulator.prototype.restoreRedraw = function () {
+       return this.rowManager.restoreRedraw();
+};
+
+//local data from local file
+Tabulator.prototype.setDataFromLocalFile = function (extensions) {
+       var _this25 = this;
+
+       return new Promise(function (resolve, reject) {
+               var input = document.createElement("input");
+               input.type = "file";
+               input.accept = extensions || ".json,application/json";
+
+               input.addEventListener("change", function (e) {
+                       var file = input.files[0],
+                           reader = new FileReader(),
+                           data;
+
+                       reader.readAsText(file);
+
+                       reader.onload = function (e) {
+
+                               try {
+                                       data = JSON.parse(reader.result);
+                               } catch (e) {
+                                       console.warn("File Load Error - File contents is invalid JSON", e);
+                                       reject(e);
+                                       return;
+                               }
+
+                               _this25.setData(data).then(function (data) {
+                                       resolve(data);
+                               }).catch(function (err) {
+                                       resolve(err);
+                               });
+                       };
+
+                       reader.onerror = function (e) {
+                               console.warn("File Load Error - Unable to read file");
+                               reject();
+                       };
+               });
+
+               input.click();
+       });
+};
+
+//load data
+Tabulator.prototype.setData = function (data, params, config) {
+       if (this.modExists("ajax")) {
+               this.modules.ajax.blockActiveRequest();
+       }
+
+       return this._setData(data, params, config, false, true);
+};
+
+Tabulator.prototype._setData = function (data, params, config, inPosition, columnsChanged) {
+       var self = this;
+
+       if (typeof data === "string") {
+               if (data.indexOf("{") == 0 || data.indexOf("[") == 0) {
+                       //data is a json encoded string
+                       return self.rowManager.setData(JSON.parse(data), inPosition, columnsChanged);
+               } else {
+
+                       if (self.modExists("ajax", true)) {
+                               if (params) {
+                                       self.modules.ajax.setParams(params);
+                               }
+
+                               if (config) {
+                                       self.modules.ajax.setConfig(config);
+                               }
+
+                               self.modules.ajax.setUrl(data);
+
+                               if (self.options.pagination == "remote" && self.modExists("page", true)) {
+                                       self.modules.page.reset(true, true);
+                                       return self.modules.page.setPage(1);
+                               } else {
+                                       //assume data is url, make ajax call to url to get data
+                                       return self.modules.ajax.loadData(inPosition, columnsChanged);
+                               }
+                       }
+               }
+       } else {
+               if (data) {
+                       //asume data is already an object
+                       return self.rowManager.setData(data, inPosition, columnsChanged);
+               } else {
+
+                       //no data provided, check if ajaxURL is present;
+                       if (self.modExists("ajax") && (self.modules.ajax.getUrl || self.options.ajaxURLGenerator)) {
+
+                               if (self.options.pagination == "remote" && self.modExists("page", true)) {
+                                       self.modules.page.reset(true, true);
+                                       return self.modules.page.setPage(1);
+                               } else {
+                                       return self.modules.ajax.loadData(inPosition, columnsChanged);
+                               }
+                       } else {
+                               //empty data
+                               return self.rowManager.setData([], inPosition, columnsChanged);
+                       }
+               }
+       }
+};
+
+//clear data
+Tabulator.prototype.clearData = function () {
+       if (this.modExists("ajax")) {
+               this.modules.ajax.blockActiveRequest();
+       }
+
+       this.rowManager.clearData();
+};
+
+//get table data array
+Tabulator.prototype.getData = function (active) {
+
+       if (active === true) {
+               console.warn("passing a boolean to the getData function is deprecated, you should now pass the string 'active'");
+               active = "active";
+       }
+
+       return this.rowManager.getData(active);
+};
+
+//get table data array count
+Tabulator.prototype.getDataCount = function (active) {
+
+       if (active === true) {
+               console.warn("passing a boolean to the getDataCount function is deprecated, you should now pass the string 'active'");
+               active = "active";
+       }
+
+       return this.rowManager.getDataCount(active);
+};
+
+//search for specific row components
+Tabulator.prototype.searchRows = function (field, type, value) {
+       if (this.modExists("filter", true)) {
+               return this.modules.filter.search("rows", field, type, value);
+       }
+};
+
+//search for specific data
+Tabulator.prototype.searchData = function (field, type, value) {
+       if (this.modExists("filter", true)) {
+               return this.modules.filter.search("data", field, type, value);
+       }
+};
+
+//get table html
+Tabulator.prototype.getHtml = function (visible, style, config) {
+       if (this.modExists("export", true)) {
+               return this.modules.export.getHtml(visible, style, config);
+       }
+};
+
+//get print html
+Tabulator.prototype.print = function (visible, style, config) {
+       if (this.modExists("print", true)) {
+               return this.modules.print.printFullscreen(visible, style, config);
+       }
+};
+
+//retrieve Ajax URL
+Tabulator.prototype.getAjaxUrl = function () {
+       if (this.modExists("ajax", true)) {
+               return this.modules.ajax.getUrl();
+       }
+};
+
+//replace data, keeping table in position with same sort
+Tabulator.prototype.replaceData = function (data, params, config) {
+       if (this.modExists("ajax")) {
+               this.modules.ajax.blockActiveRequest();
+       }
+
+       return this._setData(data, params, config, true);
+};
+
+//update table data
+Tabulator.prototype.updateData = function (data) {
+       var _this26 = this;
+
+       var self = this;
+       var responses = 0;
+
+       return new Promise(function (resolve, reject) {
+               if (_this26.modExists("ajax")) {
+                       _this26.modules.ajax.blockActiveRequest();
+               }
+
+               if (typeof data === "string") {
+                       data = JSON.parse(data);
+               }
+
+               if (data) {
+                       data.forEach(function (item) {
+                               var row = self.rowManager.findRow(item[self.options.index]);
+
+                               if (row) {
+                                       responses++;
+
+                                       row.updateData(item).then(function () {
+                                               responses--;
+
+                                               if (!responses) {
+                                                       resolve();
+                                               }
+                                       });
+                               }
+                       });
+               } else {
+                       console.warn("Update Error - No data provided");
+                       reject("Update Error - No data provided");
+               }
+       });
+};
+
+Tabulator.prototype.addData = function (data, pos, index) {
+       var _this27 = this;
+
+       return new Promise(function (resolve, reject) {
+               if (_this27.modExists("ajax")) {
+                       _this27.modules.ajax.blockActiveRequest();
+               }
+
+               if (typeof data === "string") {
+                       data = JSON.parse(data);
+               }
+
+               if (data) {
+                       _this27.rowManager.addRows(data, pos, index).then(function (rows) {
+                               var output = [];
+
+                               rows.forEach(function (row) {
+                                       output.push(row.getComponent());
+                               });
+
+                               resolve(output);
+                       });
+               } else {
+                       console.warn("Update Error - No data provided");
+                       reject("Update Error - No data provided");
+               }
+       });
+};
+
+//update table data
+Tabulator.prototype.updateOrAddData = function (data) {
+       var _this28 = this;
+
+       var self = this,
+           rows = [],
+           responses = 0;
+
+       return new Promise(function (resolve, reject) {
+               if (_this28.modExists("ajax")) {
+                       _this28.modules.ajax.blockActiveRequest();
+               }
+
+               if (typeof data === "string") {
+                       data = JSON.parse(data);
+               }
+
+               if (data) {
+                       data.forEach(function (item) {
+                               var row = self.rowManager.findRow(item[self.options.index]);
+
+                               responses++;
+
+                               if (row) {
+                                       row.updateData(item).then(function () {
+                                               responses--;
+                                               rows.push(row.getComponent());
+
+                                               if (!responses) {
+                                                       resolve(rows);
+                                               }
+                                       });
+                               } else {
+                                       self.rowManager.addRows(item).then(function (newRows) {
+                                               responses--;
+                                               rows.push(newRows[0].getComponent());
+
+                                               if (!responses) {
+                                                       resolve(rows);
+                                               }
+                                       });
+                               }
+                       });
+               } else {
+                       console.warn("Update Error - No data provided");
+                       reject("Update Error - No data provided");
+               }
+       });
+};
+
+//get row object
+Tabulator.prototype.getRow = function (index) {
+       var row = this.rowManager.findRow(index);
+
+       if (row) {
+               return row.getComponent();
+       } else {
+               console.warn("Find Error - No matching row found:", index);
+               return false;
+       }
+};
+
+//get row object
+Tabulator.prototype.getRowFromPosition = function (position, active) {
+       var row = this.rowManager.getRowFromPosition(position, active);
+
+       if (row) {
+               return row.getComponent();
+       } else {
+               console.warn("Find Error - No matching row found:", position);
+               return false;
+       }
+};
+
+//delete row from table
+Tabulator.prototype.deleteRow = function (index) {
+       var _this29 = this;
+
+       return new Promise(function (resolve, reject) {
+               var self = _this29,
+                   count = 0,
+                   successCount = 0,
+                   foundRows = [];
+
+               function doneCheck() {
+                       count++;
+
+                       if (count == index.length) {
+                               if (successCount) {
+                                       self.rowManager.reRenderInPosition();
+                                       resolve();
+                               }
+                       }
+               }
+
+               if (!Array.isArray(index)) {
+                       index = [index];
+               }
+
+               //find matching rows
+               index.forEach(function (item) {
+                       var row = _this29.rowManager.findRow(item, true);
+
+                       if (row) {
+                               foundRows.push(row);
+                       } else {
+                               console.warn("Delete Error - No matching row found:", item);
+                               reject("Delete Error - No matching row found");
+                               doneCheck();
+                       }
+               });
+
+               //sort rows into correct order to ensure smooth delete from table
+               foundRows.sort(function (a, b) {
+                       return _this29.rowManager.rows.indexOf(a) > _this29.rowManager.rows.indexOf(b) ? 1 : -1;
+               });
+
+               foundRows.forEach(function (row) {
+                       row.delete().then(function () {
+                               successCount++;
+                               doneCheck();
+                       }).catch(function (err) {
+                               doneCheck();
+                               reject(err);
+                       });
+               });
+       });
+};
+
+//add row to table
+Tabulator.prototype.addRow = function (data, pos, index) {
+       var _this30 = this;
+
+       return new Promise(function (resolve, reject) {
+               if (typeof data === "string") {
+                       data = JSON.parse(data);
+               }
+
+               _this30.rowManager.addRows(data, pos, index).then(function (rows) {
+                       //recalc column calculations if present
+                       if (_this30.modExists("columnCalcs")) {
+                               _this30.modules.columnCalcs.recalc(_this30.rowManager.activeRows);
+                       }
+
+                       resolve(rows[0].getComponent());
+               });
+       });
+};
+
+//update a row if it exitsts otherwise create it
+Tabulator.prototype.updateOrAddRow = function (index, data) {
+       var _this31 = this;
+
+       return new Promise(function (resolve, reject) {
+               var row = _this31.rowManager.findRow(index);
+
+               if (typeof data === "string") {
+                       data = JSON.parse(data);
+               }
+
+               if (row) {
+                       row.updateData(data).then(function () {
+                               //recalc column calculations if present
+                               if (_this31.modExists("columnCalcs")) {
+                                       _this31.modules.columnCalcs.recalc(_this31.rowManager.activeRows);
+                               }
+
+                               resolve(row.getComponent());
+                       }).catch(function (err) {
+                               reject(err);
+                       });
+               } else {
+                       row = _this31.rowManager.addRows(data).then(function (rows) {
+                               //recalc column calculations if present
+                               if (_this31.modExists("columnCalcs")) {
+                                       _this31.modules.columnCalcs.recalc(_this31.rowManager.activeRows);
+                               }
+
+                               resolve(rows[0].getComponent());
+                       }).catch(function (err) {
+                               reject(err);
+                       });
+               }
+       });
+};
+
+//update row data
+Tabulator.prototype.updateRow = function (index, data) {
+       var _this32 = this;
+
+       return new Promise(function (resolve, reject) {
+               var row = _this32.rowManager.findRow(index);
+
+               if (typeof data === "string") {
+                       data = JSON.parse(data);
+               }
+
+               if (row) {
+                       row.updateData(data).then(function () {
+                               resolve(row.getComponent());
+                       }).catch(function (err) {
+                               reject(err);
+                       });
+               } else {
+                       console.warn("Update Error - No matching row found:", index);
+                       reject("Update Error - No matching row found");
+               }
+       });
+};
+
+//scroll to row in DOM
+Tabulator.prototype.scrollToRow = function (index, position, ifVisible) {
+       var _this33 = this;
+
+       return new Promise(function (resolve, reject) {
+               var row = _this33.rowManager.findRow(index);
+
+               if (row) {
+                       _this33.rowManager.scrollToRow(row, position, ifVisible).then(function () {
+                               resolve();
+                       }).catch(function (err) {
+                               reject(err);
+                       });
+               } else {
+                       console.warn("Scroll Error - No matching row found:", index);
+                       reject("Scroll Error - No matching row found");
+               }
+       });
+};
+
+Tabulator.prototype.moveRow = function (from, to, after) {
+       var fromRow = this.rowManager.findRow(from);
+
+       if (fromRow) {
+               fromRow.moveToRow(to, after);
+       } else {
+               console.warn("Move Error - No matching row found:", from);
+       }
+};
+
+Tabulator.prototype.getRows = function (active) {
+
+       if (active === true) {
+               console.warn("passing a boolean to the getRows function is deprecated, you should now pass the string 'active'");
+               active = "active";
+       }
+
+       return this.rowManager.getComponents(active);
+};
+
+//get position of row in table
+Tabulator.prototype.getRowPosition = function (index, active) {
+       var row = this.rowManager.findRow(index);
+
+       if (row) {
+               return this.rowManager.getRowPosition(row, active);
+       } else {
+               console.warn("Position Error - No matching row found:", index);
+               return false;
+       }
+};
+
+//copy table data to clipboard
+Tabulator.prototype.copyToClipboard = function (selector) {
+       if (this.modExists("clipboard", true)) {
+               this.modules.clipboard.copy(selector);
+       }
+};
+
+/////////////// Column Functions  ///////////////
+
+Tabulator.prototype.setColumns = function (definition) {
+       this.columnManager.setColumns(definition);
+};
+
+Tabulator.prototype.getColumns = function (structured) {
+       return this.columnManager.getComponents(structured);
+};
+
+Tabulator.prototype.getColumn = function (field) {
+       var col = this.columnManager.findColumn(field);
+
+       if (col) {
+               return col.getComponent();
+       } else {
+               console.warn("Find Error - No matching column found:", field);
+               return false;
+       }
+};
+
+Tabulator.prototype.getColumnDefinitions = function () {
+       return this.columnManager.getDefinitionTree();
+};
+
+Tabulator.prototype.getColumnLayout = function () {
+       if (this.modExists("persistence", true)) {
+               return this.modules.persistence.parseColumns(this.columnManager.getColumns());
+       }
+};
+
+Tabulator.prototype.setColumnLayout = function (layout) {
+       if (this.modExists("persistence", true)) {
+               this.columnManager.setColumns(this.modules.persistence.mergeDefinition(this.options.columns, layout));
+               return true;
+       }
+       return false;
+};
+
+Tabulator.prototype.showColumn = function (field) {
+       var column = this.columnManager.findColumn(field);
+
+       if (column) {
+               column.show();
+
+               if (this.options.responsiveLayout && this.modExists("responsiveLayout", true)) {
+                       this.modules.responsiveLayout.update();
+               }
+       } else {
+               console.warn("Column Show Error - No matching column found:", field);
+               return false;
+       }
+};
+
+Tabulator.prototype.hideColumn = function (field) {
+       var column = this.columnManager.findColumn(field);
+
+       if (column) {
+               column.hide();
+
+               if (this.options.responsiveLayout && this.modExists("responsiveLayout", true)) {
+                       this.modules.responsiveLayout.update();
+               }
+       } else {
+               console.warn("Column Hide Error - No matching column found:", field);
+               return false;
+       }
+};
+
+Tabulator.prototype.toggleColumn = function (field) {
+       var column = this.columnManager.findColumn(field);
+
+       if (column) {
+               if (column.visible) {
+                       column.hide();
+               } else {
+                       column.show();
+               }
+       } else {
+               console.warn("Column Visibility Toggle Error - No matching column found:", field);
+               return false;
+       }
+};
+
+Tabulator.prototype.addColumn = function (definition, before, field) {
+       var _this34 = this;
+
+       return new Promise(function (resolve, reject) {
+               var column = _this34.columnManager.findColumn(field);
+
+               _this34.columnManager.addColumn(definition, before, column).then(function (column) {
+                       resolve(column.getComponent());
+               }).catch(function (err) {
+                       reject(err);
+               });
+       });
+};
+
+Tabulator.prototype.deleteColumn = function (field) {
+       var _this35 = this;
+
+       return new Promise(function (resolve, reject) {
+               var column = _this35.columnManager.findColumn(field);
+
+               if (column) {
+                       column.delete().then(function () {
+                               resolve();
+                       }).catch(function (err) {
+                               reject(err);
+                       });
+               } else {
+                       console.warn("Column Delete Error - No matching column found:", field);
+                       reject();
+               }
+       });
+};
+
+Tabulator.prototype.updateColumnDefinition = function (field, definition) {
+       var _this36 = this;
+
+       return new Promise(function (resolve, reject) {
+               var column = _this36.columnManager.findColumn(field);
+
+               if (column) {
+                       column.updateDefinition(definition).then(function (col) {
+                               resolve(col);
+                       }).catch(function (err) {
+                               reject(err);
+                       });
+               } else {
+                       console.warn("Column Update Error - No matching column found:", field);
+                       reject();
+               }
+       });
+};
+
+Tabulator.prototype.moveColumn = function (from, to, after) {
+       var fromColumn = this.columnManager.findColumn(from);
+       var toColumn = this.columnManager.findColumn(to);
+
+       if (fromColumn) {
+               if (toColumn) {
+                       this.columnManager.moveColumn(fromColumn, toColumn, after);
+               } else {
+                       console.warn("Move Error - No matching column found:", toColumn);
+               }
+       } else {
+               console.warn("Move Error - No matching column found:", from);
+       }
+};
+
+//scroll to column in DOM
+Tabulator.prototype.scrollToColumn = function (field, position, ifVisible) {
+       var _this37 = this;
+
+       return new Promise(function (resolve, reject) {
+               var column = _this37.columnManager.findColumn(field);
+
+               if (column) {
+                       _this37.columnManager.scrollToColumn(column, position, ifVisible).then(function () {
+                               resolve();
+                       }).catch(function (err) {
+                               reject(err);
+                       });
+               } else {
+                       console.warn("Scroll Error - No matching column found:", field);
+                       reject("Scroll Error - No matching column found");
+               }
+       });
+};
+
+//////////// Localization Functions  ////////////
+Tabulator.prototype.setLocale = function (locale) {
+       this.modules.localize.setLocale(locale);
+};
+
+Tabulator.prototype.getLocale = function () {
+       return this.modules.localize.getLocale();
+};
+
+Tabulator.prototype.getLang = function (locale) {
+       return this.modules.localize.getLang(locale);
+};
+
+//////////// General Public Functions ////////////
+
+//redraw list without updating data
+Tabulator.prototype.redraw = function (force) {
+       this.columnManager.redraw(force);
+       this.rowManager.redraw(force);
+};
+
+Tabulator.prototype.setHeight = function (height) {
+
+       if (this.rowManager.renderMode !== "classic") {
+               this.options.height = isNaN(height) ? height : height + "px";
+               this.element.style.height = this.options.height;
+               this.rowManager.setRenderMode();
+               this.rowManager.redraw();
+       } else {
+               console.warn("setHeight function is not available in classic render mode");
+       }
+};
+
+///////////////////// Sorting ////////////////////
+
+//trigger sort
+Tabulator.prototype.setSort = function (sortList, dir) {
+       if (this.modExists("sort", true)) {
+               this.modules.sort.setSort(sortList, dir);
+               this.rowManager.sorterRefresh();
+       }
+};
+
+Tabulator.prototype.getSorters = function () {
+       if (this.modExists("sort", true)) {
+               return this.modules.sort.getSort();
+       }
+};
+
+Tabulator.prototype.clearSort = function () {
+       if (this.modExists("sort", true)) {
+               this.modules.sort.clear();
+               this.rowManager.sorterRefresh();
+       }
+};
+
+///////////////////// Filtering ////////////////////
+
+//set standard filters
+Tabulator.prototype.setFilter = function (field, type, value, params) {
+       if (this.modExists("filter", true)) {
+               this.modules.filter.setFilter(field, type, value, params);
+               this.rowManager.filterRefresh();
+       }
+};
+
+//add filter to array
+Tabulator.prototype.addFilter = function (field, type, value, params) {
+       if (this.modExists("filter", true)) {
+               this.modules.filter.addFilter(field, type, value, params);
+               this.rowManager.filterRefresh();
+       }
+};
+
+//get all filters
+Tabulator.prototype.getFilters = function (all) {
+       if (this.modExists("filter", true)) {
+               return this.modules.filter.getFilters(all);
+       }
+};
+
+Tabulator.prototype.setHeaderFilterFocus = function (field) {
+       if (this.modExists("filter", true)) {
+               var column = this.columnManager.findColumn(field);
+
+               if (column) {
+                       this.modules.filter.setHeaderFilterFocus(column);
+               } else {
+                       console.warn("Column Filter Focus Error - No matching column found:", field);
+                       return false;
+               }
+       }
+};
+
+Tabulator.prototype.getHeaderFilterValue = function (field) {
+       if (this.modExists("filter", true)) {
+               var column = this.columnManager.findColumn(field);
+
+               if (column) {
+                       return this.modules.filter.getHeaderFilterValue(column);
+               } else {
+                       console.warn("Column Filter Error - No matching column found:", field);
+               }
+       }
+};
+
+Tabulator.prototype.setHeaderFilterValue = function (field, value) {
+       if (this.modExists("filter", true)) {
+               var column = this.columnManager.findColumn(field);
+
+               if (column) {
+                       this.modules.filter.setHeaderFilterValue(column, value);
+               } else {
+                       console.warn("Column Filter Error - No matching column found:", field);
+                       return false;
+               }
+       }
+};
+
+Tabulator.prototype.getHeaderFilters = function () {
+       if (this.modExists("filter", true)) {
+               return this.modules.filter.getHeaderFilters();
+       }
+};
+
+//remove filter from array
+Tabulator.prototype.removeFilter = function (field, type, value) {
+       if (this.modExists("filter", true)) {
+               this.modules.filter.removeFilter(field, type, value);
+               this.rowManager.filterRefresh();
+       }
+};
+
+//clear filters
+Tabulator.prototype.clearFilter = function (all) {
+       if (this.modExists("filter", true)) {
+               this.modules.filter.clearFilter(all);
+               this.rowManager.filterRefresh();
+       }
+};
+
+//clear header filters
+Tabulator.prototype.clearHeaderFilter = function () {
+       if (this.modExists("filter", true)) {
+               this.modules.filter.clearHeaderFilter();
+               this.rowManager.filterRefresh();
+       }
+};
+
+///////////////////// select ////////////////////
+Tabulator.prototype.selectRow = function (rows) {
+       if (this.modExists("selectRow", true)) {
+               if (rows === true) {
+                       console.warn("passing a boolean to the selectRowselectRow function is deprecated, you should now pass the string 'active'");
+                       rows = "active";
+               }
+               this.modules.selectRow.selectRows(rows);
+       }
+};
+
+Tabulator.prototype.deselectRow = function (rows) {
+       if (this.modExists("selectRow", true)) {
+               this.modules.selectRow.deselectRows(rows);
+       }
+};
+
+Tabulator.prototype.toggleSelectRow = function (row) {
+       if (this.modExists("selectRow", true)) {
+               this.modules.selectRow.toggleRow(row);
+       }
+};
+
+Tabulator.prototype.getSelectedRows = function () {
+       if (this.modExists("selectRow", true)) {
+               return this.modules.selectRow.getSelectedRows();
+       }
+};
+
+Tabulator.prototype.getSelectedData = function () {
+       if (this.modExists("selectRow", true)) {
+               return this.modules.selectRow.getSelectedData();
+       }
+};
+
+///////////////////// validation  ////////////////////
+Tabulator.prototype.getInvalidCells = function () {
+       if (this.modExists("validate", true)) {
+               return this.modules.validate.getInvalidCells();
+       }
+};
+
+Tabulator.prototype.clearCellValidation = function (cells) {
+       var _this38 = this;
+
+       if (this.modExists("validate", true)) {
+
+               if (!cells) {
+                       cells = this.modules.validate.getInvalidCells();
+               }
+
+               if (!Array.isArray(cells)) {
+                       cells = [cells];
+               }
+
+               cells.forEach(function (cell) {
+                       _this38.modules.validate.clearValidation(cell._getSelf());
+               });
+       }
+};
+
+Tabulator.prototype.validate = function (cells) {
+       var output = [];
+
+       //clear row data
+       this.rowManager.rows.forEach(function (row) {
+               var valid = row.validate();
+
+               if (valid !== true) {
+                       output = output.concat(valid);
+               }
+       });
+
+       return output.length ? output : true;
+};
+
+//////////// Pagination Functions  ////////////
+
+Tabulator.prototype.setMaxPage = function (max) {
+       if (this.options.pagination && this.modExists("page")) {
+               this.modules.page.setMaxPage(max);
+       } else {
+               return false;
+       }
+};
+
+Tabulator.prototype.setPage = function (page) {
+       if (this.options.pagination && this.modExists("page")) {
+               return this.modules.page.setPage(page);
+       } else {
+               return new Promise(function (resolve, reject) {
+                       reject();
+               });
+       }
+};
+
+Tabulator.prototype.setPageToRow = function (row) {
+       var _this39 = this;
+
+       return new Promise(function (resolve, reject) {
+               if (_this39.options.pagination && _this39.modExists("page")) {
+                       row = _this39.rowManager.findRow(row);
+
+                       if (row) {
+                               _this39.modules.page.setPageToRow(row).then(function () {
+                                       resolve();
+                               }).catch(function () {
+                                       reject();
+                               });
+                       } else {
+                               reject();
+                       }
+               } else {
+                       reject();
+               }
+       });
+};
+
+Tabulator.prototype.setPageSize = function (size) {
+       if (this.options.pagination && this.modExists("page")) {
+               this.modules.page.setPageSize(size);
+               this.modules.page.setPage(1).then(function () {}).catch(function () {});
+       } else {
+               return false;
+       }
+};
+
+Tabulator.prototype.getPageSize = function () {
+       if (this.options.pagination && this.modExists("page", true)) {
+               return this.modules.page.getPageSize();
+       }
+};
+
+Tabulator.prototype.previousPage = function () {
+       if (this.options.pagination && this.modExists("page")) {
+               this.modules.page.previousPage();
+       } else {
+               return false;
+       }
+};
+
+Tabulator.prototype.nextPage = function () {
+       if (this.options.pagination && this.modExists("page")) {
+               this.modules.page.nextPage();
+       } else {
+               return false;
+       }
+};
+
+Tabulator.prototype.getPage = function () {
+       if (this.options.pagination && this.modExists("page")) {
+               return this.modules.page.getPage();
+       } else {
+               return false;
+       }
+};
+
+Tabulator.prototype.getPageMax = function () {
+       if (this.options.pagination && this.modExists("page")) {
+               return this.modules.page.getPageMax();
+       } else {
+               return false;
+       }
+};
+
+///////////////// Grouping Functions ///////////////
+
+Tabulator.prototype.setGroupBy = function (groups) {
+       if (this.modExists("groupRows", true)) {
+               this.options.groupBy = groups;
+               this.modules.groupRows.initialize();
+               this.rowManager.refreshActiveData("display");
+
+               if (this.options.persistence && this.modExists("persistence", true) && this.modules.persistence.config.group) {
+                       this.modules.persistence.save("group");
+               }
+       } else {
+               return false;
+       }
+};
+
+Tabulator.prototype.setGroupValues = function (groupValues) {
+       if (this.modExists("groupRows", true)) {
+               this.options.groupValues = groupValues;
+               this.modules.groupRows.initialize();
+               this.rowManager.refreshActiveData("display");
+
+               if (this.options.persistence && this.modExists("persistence", true) && this.modules.persistence.config.group) {
+                       this.modules.persistence.save("group");
+               }
+       } else {
+               return false;
+       }
+};
+
+Tabulator.prototype.setGroupStartOpen = function (values) {
+       if (this.modExists("groupRows", true)) {
+               this.options.groupStartOpen = values;
+               this.modules.groupRows.initialize();
+               if (this.options.groupBy) {
+                       this.rowManager.refreshActiveData("group");
+
+                       if (this.options.persistence && this.modExists("persistence", true) && this.modules.persistence.config.group) {
+                               this.modules.persistence.save("group");
+                       }
+               } else {
+                       console.warn("Grouping Update - cant refresh view, no groups have been set");
+               }
+       } else {
+               return false;
+       }
+};
+
+Tabulator.prototype.setGroupHeader = function (values) {
+       if (this.modExists("groupRows", true)) {
+               this.options.groupHeader = values;
+               this.modules.groupRows.initialize();
+               if (this.options.groupBy) {
+                       this.rowManager.refreshActiveData("group");
+
+                       if (this.options.persistence && this.modExists("persistence", true) && this.modules.persistence.config.group) {
+                               this.modules.persistence.save("group");
+                       }
+               } else {
+                       console.warn("Grouping Update - cant refresh view, no groups have been set");
+               }
+       } else {
+               return false;
+       }
+};
+
+Tabulator.prototype.getGroups = function (values) {
+       if (this.modExists("groupRows", true)) {
+               return this.modules.groupRows.getGroups(true);
+       } else {
+               return false;
+       }
+};
+
+// get grouped table data in the same format as getData()
+Tabulator.prototype.getGroupedData = function () {
+       if (this.modExists("groupRows", true)) {
+               return this.options.groupBy ? this.modules.groupRows.getGroupedData() : this.getData();
+       }
+};
+
+Tabulator.prototype.getEditedCells = function () {
+       if (this.modExists("edit", true)) {
+               return this.modules.edit.getEditedCells();
+       }
+};
+
+Tabulator.prototype.clearCellEdited = function (cells) {
+       var _this40 = this;
+
+       if (this.modExists("edit", true)) {
+
+               if (!cells) {
+                       cells = this.modules.edit.getEditedCells();
+               }
+
+               if (!Array.isArray(cells)) {
+                       cells = [cells];
+               }
+
+               cells.forEach(function (cell) {
+                       _this40.modules.edit.clearEdited(cell._getSelf());
+               });
+       }
+};
+
+///////////////// Column Calculation Functions ///////////////
+Tabulator.prototype.getCalcResults = function () {
+       if (this.modExists("columnCalcs", true)) {
+               return this.modules.columnCalcs.getResults();
+       } else {
+               return false;
+       }
+};
+
+Tabulator.prototype.recalc = function () {
+       if (this.modExists("columnCalcs", true)) {
+               this.modules.columnCalcs.recalcAll(this.rowManager.activeRows);
+       }
+};
+
+/////////////// Navigation Management //////////////
+
+Tabulator.prototype.navigatePrev = function () {
+       var cell = false;
+
+       if (this.modExists("edit", true)) {
+               cell = this.modules.edit.currentCell;
+
+               if (cell) {
+                       return cell.nav().prev();
+               }
+       }
+
+       return false;
+};
+
+Tabulator.prototype.navigateNext = function () {
+       var cell = false;
+
+       if (this.modExists("edit", true)) {
+               cell = this.modules.edit.currentCell;
+
+               if (cell) {
+                       return cell.nav().next();
+               }
+       }
+
+       return false;
+};
+
+Tabulator.prototype.navigateLeft = function () {
+       var cell = false;
+
+       if (this.modExists("edit", true)) {
+               cell = this.modules.edit.currentCell;
+
+               if (cell) {
+                       e.preventDefault();
+                       return cell.nav().left();
+               }
+       }
+
+       return false;
+};
+
+Tabulator.prototype.navigateRight = function () {
+       var cell = false;
+
+       if (this.modExists("edit", true)) {
+               cell = this.modules.edit.currentCell;
+
+               if (cell) {
+                       e.preventDefault();
+                       return cell.nav().right();
+               }
+       }
+
+       return false;
+};
+
+Tabulator.prototype.navigateUp = function () {
+       var cell = false;
+
+       if (this.modExists("edit", true)) {
+               cell = this.modules.edit.currentCell;
+
+               if (cell) {
+                       e.preventDefault();
+                       return cell.nav().up();
+               }
+       }
+
+       return false;
+};
+
+Tabulator.prototype.navigateDown = function () {
+       var cell = false;
+
+       if (this.modExists("edit", true)) {
+               cell = this.modules.edit.currentCell;
+
+               if (cell) {
+                       e.preventDefault();
+                       return cell.nav().down();
+               }
+       }
+
+       return false;
+};
+
+/////////////// History Management //////////////
+Tabulator.prototype.undo = function () {
+       if (this.options.history && this.modExists("history", true)) {
+               return this.modules.history.undo();
+       } else {
+               return false;
+       }
+};
+
+Tabulator.prototype.redo = function () {
+       if (this.options.history && this.modExists("history", true)) {
+               return this.modules.history.redo();
+       } else {
+               return false;
+       }
+};
+
+Tabulator.prototype.getHistoryUndoSize = function () {
+       if (this.options.history && this.modExists("history", true)) {
+               return this.modules.history.getHistoryUndoSize();
+       } else {
+               return false;
+       }
+};
+
+Tabulator.prototype.getHistoryRedoSize = function () {
+       if (this.options.history && this.modExists("history", true)) {
+               return this.modules.history.getHistoryRedoSize();
+       } else {
+               return false;
+       }
+};
+
+/////////////// Download Management //////////////
+
+Tabulator.prototype.download = function (type, filename, options, active) {
+       if (this.modExists("download", true)) {
+               this.modules.download.download(type, filename, options, active);
+       }
+};
+
+Tabulator.prototype.downloadToTab = function (type, filename, options, active) {
+       if (this.modExists("download", true)) {
+               this.modules.download.download(type, filename, options, active, true);
+       }
+};
+
+/////////// Inter Table Communications ///////////
+
+Tabulator.prototype.tableComms = function (table, module, action, data) {
+       this.modules.comms.receive(table, module, action, data);
+};
+
+////////////// Extension Management //////////////
+
+//object to hold module
+Tabulator.prototype.moduleBindings = {};
+
+//extend module
+Tabulator.prototype.extendModule = function (name, property, values) {
+
+       if (Tabulator.prototype.moduleBindings[name]) {
+               var source = Tabulator.prototype.moduleBindings[name].prototype[property];
+
+               if (source) {
+                       if ((typeof values === 'undefined' ? 'undefined' : _typeof(values)) == "object") {
+                               for (var key in values) {
+                                       source[key] = values[key];
+                               }
+                       } else {
+                               console.warn("Module Error - Invalid value type, it must be an object");
+                       }
+               } else {
+                       console.warn("Module Error - property does not exist:", property);
+               }
+       } else {
+               console.warn("Module Error - module does not exist:", name);
+       }
+};
+
+//add module to tabulator
+Tabulator.prototype.registerModule = function (name, module) {
+       var self = this;
+       Tabulator.prototype.moduleBindings[name] = module;
+};
+
+//ensure that module are bound to instantiated function
+Tabulator.prototype.bindModules = function () {
+       this.modules = {};
+
+       for (var name in Tabulator.prototype.moduleBindings) {
+               this.modules[name] = new Tabulator.prototype.moduleBindings[name](this);
+       }
+};
+
+//Check for module
+Tabulator.prototype.modExists = function (plugin, required) {
+       if (this.modules[plugin]) {
+               return true;
+       } else {
+               if (required) {
+                       console.error("Tabulator Module Not Installed: " + plugin);
+               }
+               return false;
+       }
+};
+
+Tabulator.prototype.helpers = {
+
+       elVisible: function elVisible(el) {
+               return !(el.offsetWidth <= 0 && el.offsetHeight <= 0);
+       },
+
+       elOffset: function elOffset(el) {
+               var box = el.getBoundingClientRect();
+
+               return {
+                       top: box.top + window.pageYOffset - document.documentElement.clientTop,
+                       left: box.left + window.pageXOffset - document.documentElement.clientLeft
+               };
+       },
+
+       deepClone: function deepClone(obj) {
+               var clone = Object.assign(Array.isArray(obj) ? [] : {}, obj);
+
+               for (var i in obj) {
+                       if (obj[i] != null && _typeof(obj[i]) === "object") {
+                               if (obj[i] instanceof Date) {
+                                       clone[i] = new Date(obj[i]);
+                               } else {
+                                       clone[i] = this.deepClone(obj[i]);
+                               }
+                       }
+               }
+               return clone;
+       }
+};
+
+Tabulator.prototype.comms = {
+       tables: [],
+       register: function register(table) {
+               Tabulator.prototype.comms.tables.push(table);
+       },
+       deregister: function deregister(table) {
+               var index = Tabulator.prototype.comms.tables.indexOf(table);
+
+               if (index > -1) {
+                       Tabulator.prototype.comms.tables.splice(index, 1);
+               }
+       },
+       lookupTable: function lookupTable(query, silent) {
+               var results = [],
+                   matches,
+                   match;
+
+               if (typeof query === "string") {
+                       matches = document.querySelectorAll(query);
+
+                       if (matches.length) {
+                               for (var i = 0; i < matches.length; i++) {
+                                       match = Tabulator.prototype.comms.matchElement(matches[i]);
+
+                                       if (match) {
+                                               results.push(match);
+                                       }
+                               }
+                       }
+               } else if (typeof HTMLElement !== "undefined" && query instanceof HTMLElement || query instanceof Tabulator) {
+                       match = Tabulator.prototype.comms.matchElement(query);
+
+                       if (match) {
+                               results.push(match);
+                       }
+               } else if (Array.isArray(query)) {
+                       query.forEach(function (item) {
+                               results = results.concat(Tabulator.prototype.comms.lookupTable(item));
+                       });
+               } else {
+                       if (!silent) {
+                               console.warn("Table Connection Error - Invalid Selector", query);
+                       }
+               }
+
+               return results;
+       },
+       matchElement: function matchElement(element) {
+               return Tabulator.prototype.comms.tables.find(function (table) {
+                       return element instanceof Tabulator ? table === element : table.element === element;
+               });
+       }
+};
+
+Tabulator.prototype.findTable = function (query) {
+       var results = Tabulator.prototype.comms.lookupTable(query, true);
+       return Array.isArray(results) && !results.length ? false : results;
+};
+
+var Layout = function Layout(table) {
+
+       this.table = table;
+
+       this.mode = null;
+};
+
+//initialize layout system
+
+Layout.prototype.initialize = function (layout) {
+
+       if (this.modes[layout]) {
+
+               this.mode = layout;
+       } else {
+
+               console.warn("Layout Error - invalid mode set, defaulting to 'fitData' : " + layout);
+
+               this.mode = 'fitData';
+       }
+
+       this.table.element.setAttribute("tabulator-layout", this.mode);
+};
+
+Layout.prototype.getMode = function () {
+
+       return this.mode;
+};
+
+//trigger table layout
+
+Layout.prototype.layout = function () {
+
+       this.modes[this.mode].call(this, this.table.columnManager.columnsByIndex);
+};
+
+//layout render functions
+
+Layout.prototype.modes = {
+
+       //resize columns to fit data they contain
+
+       "fitData": function fitData(columns) {
+
+               if (this.table.options.virtualDomHoz) {
+
+                       this.table.vdomHoz.fitDataLayoutOverride();
+               } else {
+
+                       columns.forEach(function (column) {
+
+                               column.reinitializeWidth();
+                       });
+               }
+
+               if (this.table.options.responsiveLayout && this.table.modExists("responsiveLayout", true)) {
+
+                       this.table.modules.responsiveLayout.update();
+               }
+       },
+
+       //resize columns to fit data they contain and stretch row to fill table
+
+       "fitDataFill": function fitDataFill(columns) {
+
+               columns.forEach(function (column) {
+
+                       column.reinitializeWidth();
+               });
+
+               if (this.table.options.responsiveLayout && this.table.modExists("responsiveLayout", true)) {
+
+                       this.table.modules.responsiveLayout.update();
+               }
+       },
+
+       //resize columns to fit data they contain
+
+       "fitDataTable": function fitDataTable(columns) {
+
+               columns.forEach(function (column) {
+
+                       column.reinitializeWidth();
+               });
+
+               if (this.table.options.responsiveLayout && this.table.modExists("responsiveLayout", true)) {
+
+                       this.table.modules.responsiveLayout.update();
+               }
+       },
+
+       //resize columns to fit data the contain and stretch last column to fill table
+
+       "fitDataStretch": function fitDataStretch(columns) {
+               var _this41 = this;
+
+               var colsWidth = 0,
+                   tableWidth = this.table.rowManager.element.clientWidth,
+                   gap = 0,
+                   lastCol = false;
+
+               columns.forEach(function (column, i) {
+
+                       if (!column.widthFixed) {
+
+                               column.reinitializeWidth();
+                       }
+
+                       if (_this41.table.options.responsiveLayout ? column.modules.responsive.visible : column.visible) {
+
+                               lastCol = column;
+                       }
+
+                       if (column.visible) {
+
+                               colsWidth += column.getWidth();
+                       }
+               });
+
+               if (lastCol) {
+
+                       gap = tableWidth - colsWidth + lastCol.getWidth();
+
+                       if (this.table.options.responsiveLayout && this.table.modExists("responsiveLayout", true)) {
+
+                               lastCol.setWidth(0);
+
+                               this.table.modules.responsiveLayout.update();
+                       }
+
+                       if (gap > 0) {
+
+                               lastCol.setWidth(gap);
+                       } else {
+
+                               lastCol.reinitializeWidth();
+                       }
+               } else {
+
+                       if (this.table.options.responsiveLayout && this.table.modExists("responsiveLayout", true)) {
+
+                               this.table.modules.responsiveLayout.update();
+                       }
+               }
+       },
+
+       //resize columns to fit
+
+       "fitColumns": function fitColumns(columns) {
+
+               var self = this;
+
+               var totalWidth = self.table.element.clientWidth; //table element width
+
+               var fixedWidth = 0; //total width of columns with a defined width
+
+               var flexWidth = 0; //total width available to flexible columns
+
+               var flexGrowUnits = 0; //total number of widthGrow blocks accross all columns
+
+               var flexColWidth = 0; //desired width of flexible columns
+
+               var flexColumns = []; //array of flexible width columns
+
+               var fixedShrinkColumns = []; //array of fixed width columns that can shrink
+
+               var flexShrinkUnits = 0; //total number of widthShrink blocks accross all columns
+
+               var overflowWidth = 0; //horizontal overflow width
+
+               var gapFill = 0; //number of pixels to be added to final column to close and half pixel gaps
+
+
+               function calcWidth(width) {
+
+                       var colWidth;
+
+                       if (typeof width == "string") {
+
+                               if (width.indexOf("%") > -1) {
+
+                                       colWidth = totalWidth / 100 * parseInt(width);
+                               } else {
+
+                                       colWidth = parseInt(width);
+                               }
+                       } else {
+
+                               colWidth = width;
+                       }
+
+                       return colWidth;
+               }
+
+               //ensure columns resize to take up the correct amount of space
+
+               function scaleColumns(columns, freeSpace, colWidth, shrinkCols) {
+
+                       var oversizeCols = [],
+                           oversizeSpace = 0,
+                           remainingSpace = 0,
+                           nextColWidth = 0,
+                           gap = 0,
+                           changeUnits = 0,
+                           undersizeCols = [];
+
+                       function calcGrow(col) {
+
+                               return colWidth * (col.column.definition.widthGrow || 1);
+                       }
+
+                       function calcShrink(col) {
+
+                               return calcWidth(col.width) - colWidth * (col.column.definition.widthShrink || 0);
+                       }
+
+                       columns.forEach(function (col, i) {
+
+                               var width = shrinkCols ? calcShrink(col) : calcGrow(col);
+
+                               if (col.column.minWidth >= width) {
+
+                                       oversizeCols.push(col);
+                               } else {
+
+                                       undersizeCols.push(col);
+
+                                       changeUnits += shrinkCols ? col.column.definition.widthShrink || 1 : col.column.definition.widthGrow || 1;
+                               }
+                       });
+
+                       if (oversizeCols.length) {
+
+                               oversizeCols.forEach(function (col) {
+
+                                       oversizeSpace += shrinkCols ? col.width - col.column.minWidth : col.column.minWidth;
+
+                                       col.width = col.column.minWidth;
+                               });
+
+                               remainingSpace = freeSpace - oversizeSpace;
+
+                               nextColWidth = changeUnits ? Math.floor(remainingSpace / changeUnits) : remainingSpace;
+
+                               gap = remainingSpace - nextColWidth * changeUnits;
+
+                               gap += scaleColumns(undersizeCols, remainingSpace, nextColWidth, shrinkCols);
+                       } else {
+
+                               gap = changeUnits ? freeSpace - Math.floor(freeSpace / changeUnits) * changeUnits : freeSpace;
+
+                               undersizeCols.forEach(function (column) {
+
+                                       column.width = shrinkCols ? calcShrink(column) : calcGrow(column);
+                               });
+                       }
+
+                       return gap;
+               }
+
+               if (this.table.options.responsiveLayout && this.table.modExists("responsiveLayout", true)) {
+
+                       this.table.modules.responsiveLayout.update();
+               }
+
+               //adjust for vertical scrollbar if present
+
+               if (this.table.rowManager.element.scrollHeight > this.table.rowManager.element.clientHeight) {
+
+                       totalWidth -= this.table.rowManager.element.offsetWidth - this.table.rowManager.element.clientWidth;
+               }
+
+               columns.forEach(function (column) {
+
+                       var width, minWidth, colWidth;
+
+                       if (column.visible) {
+
+                               width = column.definition.width;
+
+                               minWidth = parseInt(column.minWidth);
+
+                               if (width) {
+
+                                       colWidth = calcWidth(width);
+
+                                       fixedWidth += colWidth > minWidth ? colWidth : minWidth;
+
+                                       if (column.definition.widthShrink) {
+
+                                               fixedShrinkColumns.push({
+
+                                                       column: column,
+
+                                                       width: colWidth > minWidth ? colWidth : minWidth
+
+                                               });
+
+                                               flexShrinkUnits += column.definition.widthShrink;
+                                       }
+                               } else {
+
+                                       flexColumns.push({
+
+                                               column: column,
+
+                                               width: 0
+
+                                       });
+
+                                       flexGrowUnits += column.definition.widthGrow || 1;
+                               }
+                       }
+               });
+
+               //calculate available space
+
+               flexWidth = totalWidth - fixedWidth;
+
+               //calculate correct column size
+
+               flexColWidth = Math.floor(flexWidth / flexGrowUnits);
+
+               //generate column widths
+
+               var gapFill = scaleColumns(flexColumns, flexWidth, flexColWidth, false);
+
+               //increase width of last column to account for rounding errors
+
+               if (flexColumns.length && gapFill > 0) {
+
+                       flexColumns[flexColumns.length - 1].width += +gapFill;
+               }
+
+               //caculate space for columns to be shrunk into
+
+               flexColumns.forEach(function (col) {
+
+                       flexWidth -= col.width;
+               });
+
+               overflowWidth = Math.abs(gapFill) + flexWidth;
+
+               //shrink oversize columns if there is no available space
+
+               if (overflowWidth > 0 && flexShrinkUnits) {
+
+                       gapFill = scaleColumns(fixedShrinkColumns, overflowWidth, Math.floor(overflowWidth / flexShrinkUnits), true);
+               }
+
+               //decrease width of last column to account for rounding errors
+
+               if (fixedShrinkColumns.length) {
+
+                       fixedShrinkColumns[fixedShrinkColumns.length - 1].width -= gapFill;
+               }
+
+               flexColumns.forEach(function (col) {
+
+                       col.column.setWidth(col.width);
+               });
+
+               fixedShrinkColumns.forEach(function (col) {
+
+                       col.column.setWidth(col.width);
+               });
+       }
+
+};
+
+Tabulator.prototype.registerModule("layout", Layout);
+var Localize = function Localize(table) {
+       this.table = table; //hold Tabulator object
+       this.locale = "default"; //current locale
+       this.lang = false; //current language
+       this.bindings = {}; //update events to call when locale is changed
+       this.langList = {};
+};
+
+Localize.prototype.initialize = function () {
+       this.langList = Tabulator.prototype.helpers.deepClone(this.langs);
+};
+
+//set header placehoder
+Localize.prototype.setHeaderFilterPlaceholder = function (placeholder) {
+       this.langList.default.headerFilters.default = placeholder;
+};
+
+//set header filter placeholder by column
+Localize.prototype.setHeaderFilterColumnPlaceholder = function (column, placeholder) {
+       this.langList.default.headerFilters.columns[column] = placeholder;
+
+       if (this.lang && !this.lang.headerFilters.columns[column]) {
+               this.lang.headerFilters.columns[column] = placeholder;
+       }
+};
+
+//setup a lang description object
+Localize.prototype.installLang = function (locale, lang) {
+       if (this.langList[locale]) {
+               this._setLangProp(this.langList[locale], lang);
+       } else {
+               this.langList[locale] = lang;
+       }
+};
+
+Localize.prototype._setLangProp = function (lang, values) {
+       for (var key in values) {
+               if (lang[key] && _typeof(lang[key]) == "object") {
+                       this._setLangProp(lang[key], values[key]);
+               } else {
+                       lang[key] = values[key];
+               }
+       }
+};
+
+//set current locale
+Localize.prototype.setLocale = function (desiredLocale) {
+       var self = this;
+
+       desiredLocale = desiredLocale || "default";
+
+       //fill in any matching languge values
+       function traverseLang(trans, path) {
+               for (var prop in trans) {
+                       if (_typeof(trans[prop]) == "object") {
+                               if (!path[prop]) {
+                                       path[prop] = {};
+                               }
+                               traverseLang(trans[prop], path[prop]);
+                       } else {
+                               path[prop] = trans[prop];
+                       }
+               }
+       }
+
+       //determing correct locale to load
+       if (desiredLocale === true && navigator.language) {
+               //get local from system
+               desiredLocale = navigator.language.toLowerCase();
+       }
+
+       if (desiredLocale) {
+
+               //if locale is not set, check for matching top level locale else use default
+               if (!self.langList[desiredLocale]) {
+                       var prefix = desiredLocale.split("-")[0];
+
+                       if (self.langList[prefix]) {
+                               console.warn("Localization Error - Exact matching locale not found, using closest match: ", desiredLocale, prefix);
+                               desiredLocale = prefix;
+                       } else {
+                               console.warn("Localization Error - Matching locale not found, using default: ", desiredLocale);
+                               desiredLocale = "default";
+                       }
+               }
+       }
+
+       self.locale = desiredLocale;
+
+       //load default lang template
+       self.lang = Tabulator.prototype.helpers.deepClone(self.langList.default || {});
+
+       if (desiredLocale != "default") {
+               traverseLang(self.langList[desiredLocale], self.lang);
+       }
+
+       self.table.options.localized.call(self.table, self.locale, self.lang);
+
+       self._executeBindings();
+};
+
+//get current locale
+Localize.prototype.getLocale = function (locale) {
+       return self.locale;
+};
+
+//get lang object for given local or current if none provided
+Localize.prototype.getLang = function (locale) {
+       return locale ? this.langList[locale] : this.lang;
+};
+
+//get text for current locale
+Localize.prototype.getText = function (path, value) {
+       var path = value ? path + "|" + value : path,
+           pathArray = path.split("|"),
+           text = this._getLangElement(pathArray, this.locale);
+
+       // if(text === false){
+       //      console.warn("Localization Error - Matching localized text not found for given path: ", path);
+       // }
+
+       return text || "";
+};
+
+//traverse langs object and find localized copy
+Localize.prototype._getLangElement = function (path, locale) {
+       var self = this;
+       var root = self.lang;
+
+       path.forEach(function (level) {
+               var rootPath;
+
+               if (root) {
+                       rootPath = root[level];
+
+                       if (typeof rootPath != "undefined") {
+                               root = rootPath;
+                       } else {
+                               root = false;
+                       }
+               }
+       });
+
+       return root;
+};
+
+//set update binding
+Localize.prototype.bind = function (path, callback) {
+       if (!this.bindings[path]) {
+               this.bindings[path] = [];
+       }
+
+       this.bindings[path].push(callback);
+
+       callback(this.getText(path), this.lang);
+};
+
+//itterate through bindings and trigger updates
+Localize.prototype._executeBindings = function () {
+       var self = this;
+
+       var _loop = function _loop(path) {
+               self.bindings[path].forEach(function (binding) {
+                       binding(self.getText(path), self.lang);
+               });
+       };
+
+       for (var path in self.bindings) {
+               _loop(path);
+       }
+};
+
+//Localized text listings
+Localize.prototype.langs = {
+       "default": { //hold default locale text
+               "groups": {
+                       "item": "item",
+                       "items": "items"
+               },
+               "columns": {},
+               "ajax": {
+                       "loading": "Loading",
+                       "error": "Error"
+               },
+               "pagination": {
+                       "page_size": "Page Size",
+                       "page_title": "Show Page",
+                       "first": "First",
+                       "first_title": "First Page",
+                       "last": "Last",
+                       "last_title": "Last Page",
+                       "prev": "Prev",
+                       "prev_title": "Prev Page",
+                       "next": "Next",
+                       "next_title": "Next Page",
+                       "all": "All"
+               },
+               "headerFilters": {
+                       "default": "filter column...",
+                       "columns": {}
+               }
+       }
+};
+
+Tabulator.prototype.registerModule("localize", Localize);
+var Comms = function Comms(table) {
+       this.table = table;
+};
+
+Comms.prototype.getConnections = function (selectors) {
+       var self = this,
+           connections = [],
+           connection;
+
+       connection = Tabulator.prototype.comms.lookupTable(selectors);
+
+       connection.forEach(function (con) {
+               if (self.table !== con) {
+                       connections.push(con);
+               }
+       });
+
+       return connections;
+};
+
+Comms.prototype.send = function (selectors, module, action, data) {
+       var self = this,
+           connections = this.getConnections(selectors);
+
+       connections.forEach(function (connection) {
+               connection.tableComms(self.table.element, module, action, data);
+       });
+
+       if (!connections.length && selectors) {
+               console.warn("Table Connection Error - No tables matching selector found", selectors);
+       }
+};
+
+Comms.prototype.receive = function (table, module, action, data) {
+       if (this.table.modExists(module)) {
+               return this.table.modules[module].commsReceived(table, action, data);
+       } else {
+               console.warn("Inter-table Comms Error - no such module:", module);
+       }
+};
+
+Tabulator.prototype.registerModule("comms", Comms);
+
+var Accessor = function Accessor(table) {
+       this.table = table; //hold Tabulator object
+       this.allowedTypes = ["", "data", "download", "clipboard", "print", "htmlOutput"]; //list of accessor types
+};
+
+//initialize column accessor
+Accessor.prototype.initializeColumn = function (column) {
+       var self = this,
+           match = false,
+           config = {};
+
+       this.allowedTypes.forEach(function (type) {
+               var key = "accessor" + (type.charAt(0).toUpperCase() + type.slice(1)),
+                   accessor;
+
+               if (column.definition[key]) {
+                       accessor = self.lookupAccessor(column.definition[key]);
+
+                       if (accessor) {
+                               match = true;
+
+                               config[key] = {
+                                       accessor: accessor,
+                                       params: column.definition[key + "Params"] || {}
+                               };
+                       }
+               }
+       });
+
+       if (match) {
+               column.modules.accessor = config;
+       }
+};
+
+Accessor.prototype.lookupAccessor = function (value) {
+       var accessor = false;
+
+       //set column accessor
+       switch (typeof value === 'undefined' ? 'undefined' : _typeof(value)) {
+               case "string":
+                       if (this.accessors[value]) {
+                               accessor = this.accessors[value];
+                       } else {
+                               console.warn("Accessor Error - No such accessor found, ignoring: ", value);
+                       }
+                       break;
+
+               case "function":
+                       accessor = value;
+                       break;
+       }
+
+       return accessor;
+};
+
+//apply accessor to row
+Accessor.prototype.transformRow = function (row, type) {
+       var key = "accessor" + (type.charAt(0).toUpperCase() + type.slice(1)),
+           rowComponent = row.getComponent();
+
+       //clone data object with deep copy to isolate internal data from returned result
+       var data = Tabulator.prototype.helpers.deepClone(row.data || {});
+
+       this.table.columnManager.traverse(function (column) {
+               var value, accessor, params, colCompnent;
+
+               if (column.modules.accessor) {
+
+                       accessor = column.modules.accessor[key] || column.modules.accessor.accessor || false;
+
+                       if (accessor) {
+                               value = column.getFieldValue(data);
+
+                               if (value != "undefined") {
+                                       colCompnent = column.getComponent();
+                                       params = typeof accessor.params === "function" ? accessor.params(value, data, type, colCompnent, rowComponent) : accessor.params;
+                                       column.setFieldValue(data, accessor.accessor(value, data, type, params, colCompnent, rowComponent));
+                               }
+                       }
+               }
+       });
+
+       return data;
+},
+
+//default accessors
+Accessor.prototype.accessors = {};
+
+Tabulator.prototype.registerModule("accessor", Accessor);
+var Ajax = function Ajax(table) {
+
+       this.table = table; //hold Tabulator object
+       this.config = false; //hold config object for ajax request
+       this.url = ""; //request URL
+       this.urlGenerator = false;
+       this.params = false; //request parameters
+
+       this.loaderElement = this.createLoaderElement(); //loader message div
+       this.msgElement = this.createMsgElement(); //message element
+       this.loadingElement = false;
+       this.errorElement = false;
+       this.loaderPromise = false;
+
+       this.progressiveLoad = false;
+       this.loading = false;
+
+       this.requestOrder = 0; //prevent requests comming out of sequence if overridden by another load request
+};
+
+//initialize setup options
+Ajax.prototype.initialize = function () {
+       var template;
+
+       this.loaderElement.appendChild(this.msgElement);
+
+       if (this.table.options.ajaxLoaderLoading) {
+               if (typeof this.table.options.ajaxLoaderLoading == "string") {
+                       template = document.createElement('template');
+                       template.innerHTML = this.table.options.ajaxLoaderLoading.trim();
+                       this.loadingElement = template.content.firstChild;
+               } else {
+                       this.loadingElement = this.table.options.ajaxLoaderLoading;
+               }
+       }
+
+       this.loaderPromise = this.table.options.ajaxRequestFunc || this.defaultLoaderPromise;
+
+       this.urlGenerator = this.table.options.ajaxURLGenerator || this.defaultURLGenerator;
+
+       if (this.table.options.ajaxLoaderError) {
+               if (typeof this.table.options.ajaxLoaderError == "string") {
+                       template = document.createElement('template');
+                       template.innerHTML = this.table.options.ajaxLoaderError.trim();
+                       this.errorElement = template.content.firstChild;
+               } else {
+                       this.errorElement = this.table.options.ajaxLoaderError;
+               }
+       }
+
+       if (this.table.options.ajaxParams) {
+               this.setParams(this.table.options.ajaxParams);
+       }
+
+       if (this.table.options.ajaxConfig) {
+               this.setConfig(this.table.options.ajaxConfig);
+       }
+
+       if (this.table.options.ajaxURL) {
+               this.setUrl(this.table.options.ajaxURL);
+       }
+
+       if (this.table.options.ajaxProgressiveLoad) {
+               if (this.table.options.pagination) {
+                       this.progressiveLoad = false;
+                       console.error("Progressive Load Error - Pagination and progressive load cannot be used at the same time");
+               } else {
+                       if (this.table.modExists("page")) {
+                               this.progressiveLoad = this.table.options.ajaxProgressiveLoad;
+                               this.table.modules.page.initializeProgressive(this.progressiveLoad);
+                       } else {
+                               console.error("Pagination plugin is required for progressive ajax loading");
+                       }
+               }
+       }
+};
+
+Ajax.prototype.createLoaderElement = function () {
+       var el = document.createElement("div");
+       el.classList.add("tabulator-loader");
+       return el;
+};
+
+Ajax.prototype.createMsgElement = function () {
+       var el = document.createElement("div");
+
+       el.classList.add("tabulator-loader-msg");
+       el.setAttribute("role", "alert");
+
+       return el;
+};
+
+//set ajax params
+Ajax.prototype.setParams = function (params, update) {
+       if (update) {
+               this.params = this.params || {};
+
+               for (var key in params) {
+                       this.params[key] = params[key];
+               }
+       } else {
+               this.params = params;
+       }
+};
+
+Ajax.prototype.getParams = function () {
+       return this.params || {};
+};
+
+//load config object
+Ajax.prototype.setConfig = function (config) {
+       this._loadDefaultConfig();
+
+       if (typeof config == "string") {
+               this.config.method = config;
+       } else {
+               for (var key in config) {
+                       this.config[key] = config[key];
+               }
+       }
+};
+
+//create config object from default
+Ajax.prototype._loadDefaultConfig = function (force) {
+       var self = this;
+       if (!self.config || force) {
+
+               self.config = {};
+
+               //load base config from defaults
+               for (var key in self.defaultConfig) {
+                       self.config[key] = self.defaultConfig[key];
+               }
+       }
+};
+
+//set request url
+Ajax.prototype.setUrl = function (url) {
+       this.url = url;
+};
+
+//get request url
+Ajax.prototype.getUrl = function () {
+       return this.url;
+};
+
+//lstandard loading function
+Ajax.prototype.loadData = function (inPosition, columnsChanged) {
+       var self = this;
+
+       if (this.progressiveLoad) {
+               return this._loadDataProgressive();
+       } else {
+               return this._loadDataStandard(inPosition, columnsChanged);
+       }
+};
+
+Ajax.prototype.nextPage = function (diff) {
+       var margin;
+
+       if (!this.loading) {
+
+               margin = this.table.options.ajaxProgressiveLoadScrollMargin || this.table.rowManager.getElement().clientHeight * 2;
+
+               if (diff < margin) {
+                       this.table.modules.page.nextPage().then(function () {}).catch(function () {});
+               }
+       }
+};
+
+Ajax.prototype.blockActiveRequest = function () {
+       this.requestOrder++;
+};
+
+Ajax.prototype._loadDataProgressive = function () {
+       this.table.rowManager.setData([]);
+       return this.table.modules.page.setPage(1);
+};
+
+Ajax.prototype._loadDataStandard = function (inPosition, columnsChanged) {
+       var _this42 = this;
+
+       return new Promise(function (resolve, reject) {
+               _this42.sendRequest(inPosition).then(function (data) {
+                       _this42.table.rowManager.setData(data, inPosition, columnsChanged).then(function () {
+                               resolve();
+                       }).catch(function (e) {
+                               reject(e);
+                       });
+               }).catch(function (e) {
+                       reject(e);
+               });
+       });
+};
+
+Ajax.prototype.generateParamsList = function (data, prefix) {
+       var self = this,
+           output = [];
+
+       prefix = prefix || "";
+
+       if (Array.isArray(data)) {
+               data.forEach(function (item, i) {
+                       output = output.concat(self.generateParamsList(item, prefix ? prefix + "[" + i + "]" : i));
+               });
+       } else if ((typeof data === 'undefined' ? 'undefined' : _typeof(data)) === "object") {
+               for (var key in data) {
+                       output = output.concat(self.generateParamsList(data[key], prefix ? prefix + "[" + key + "]" : key));
+               }
+       } else {
+               output.push({ key: prefix, value: data });
+       }
+
+       return output;
+};
+
+Ajax.prototype.serializeParams = function (params) {
+       var output = this.generateParamsList(params),
+           encoded = [];
+
+       output.forEach(function (item) {
+               encoded.push(encodeURIComponent(item.key) + "=" + encodeURIComponent(item.value));
+       });
+
+       return encoded.join("&");
+};
+
+//send ajax request
+Ajax.prototype.sendRequest = function (silent) {
+       var _this43 = this;
+
+       var self = this,
+           url = self.url,
+           requestNo,
+           esc,
+           query;
+
+       self.requestOrder++;
+       requestNo = self.requestOrder;
+
+       self._loadDefaultConfig();
+
+       return new Promise(function (resolve, reject) {
+               if (self.table.options.ajaxRequesting.call(_this43.table, self.url, self.params) !== false) {
+
+                       self.loading = true;
+
+                       if (!silent) {
+                               self.showLoader();
+                       }
+
+                       _this43.loaderPromise(url, self.config, self.params).then(function (data) {
+                               if (requestNo === self.requestOrder) {
+                                       if (self.table.options.ajaxResponse) {
+                                               data = self.table.options.ajaxResponse.call(self.table, self.url, self.params, data);
+                                       }
+                                       resolve(data);
+
+                                       self.hideLoader();
+                                       self.loading = false;
+                               } else {
+                                       console.warn("Ajax Response Blocked - An active ajax request was blocked by an attempt to change table data while the request was being made");
+                               }
+                       }).catch(function (error) {
+                               console.error("Ajax Load Error: ", error);
+                               self.table.options.ajaxError.call(self.table, error);
+
+                               self.showError();
+
+                               setTimeout(function () {
+                                       self.hideLoader();
+                               }, 3000);
+
+                               self.loading = false;
+
+                               reject();
+                       });
+               } else {
+                       reject();
+               }
+       });
+};
+
+Ajax.prototype.showLoader = function () {
+       var shouldLoad = typeof this.table.options.ajaxLoader === "function" ? this.table.options.ajaxLoader() : this.table.options.ajaxLoader;
+
+       if (shouldLoad) {
+
+               this.hideLoader();
+
+               while (this.msgElement.firstChild) {
+                       this.msgElement.removeChild(this.msgElement.firstChild);
+               }this.msgElement.classList.remove("tabulator-error");
+               this.msgElement.classList.add("tabulator-loading");
+
+               if (this.loadingElement) {
+                       this.msgElement.appendChild(this.loadingElement);
+               } else {
+                       this.msgElement.innerHTML = this.table.modules.localize.getText("ajax|loading");
+               }
+
+               this.table.element.appendChild(this.loaderElement);
+       }
+};
+
+Ajax.prototype.showError = function () {
+       this.hideLoader();
+
+       while (this.msgElement.firstChild) {
+               this.msgElement.removeChild(this.msgElement.firstChild);
+       }this.msgElement.classList.remove("tabulator-loading");
+       this.msgElement.classList.add("tabulator-error");
+
+       if (this.errorElement) {
+               this.msgElement.appendChild(this.errorElement);
+       } else {
+               this.msgElement.innerHTML = this.table.modules.localize.getText("ajax|error");
+       }
+
+       this.table.element.appendChild(this.loaderElement);
+};
+
+Ajax.prototype.hideLoader = function () {
+       if (this.loaderElement.parentNode) {
+               this.loaderElement.parentNode.removeChild(this.loaderElement);
+       }
+};
+
+//default ajax config object
+Ajax.prototype.defaultConfig = {
+       method: "GET"
+};
+
+Ajax.prototype.defaultURLGenerator = function (url, config, params) {
+
+       if (url) {
+               if (params && Object.keys(params).length) {
+                       if (!config.method || config.method.toLowerCase() == "get") {
+                               config.method = "get";
+
+                               url += (url.includes("?") ? "&" : "?") + this.serializeParams(params);
+                       }
+               }
+       }
+
+       return url;
+};
+
+Ajax.prototype.defaultLoaderPromise = function (url, config, params) {
+       var self = this,
+           contentType;
+
+       return new Promise(function (resolve, reject) {
+
+               //set url
+               url = self.urlGenerator(url, config, params);
+
+               //set body content if not GET request
+               if (config.method.toUpperCase() != "GET") {
+                       contentType = _typeof(self.table.options.ajaxContentType) === "object" ? self.table.options.ajaxContentType : self.contentTypeFormatters[self.table.options.ajaxContentType];
+                       if (contentType) {
+
+                               for (var key in contentType.headers) {
+                                       if (!config.headers) {
+                                               config.headers = {};
+                                       }
+
+                                       if (typeof config.headers[key] === "undefined") {
+                                               config.headers[key] = contentType.headers[key];
+                                       }
+                               }
+
+                               config.body = contentType.body.call(self, url, config, params);
+                       } else {
+                               console.warn("Ajax Error - Invalid ajaxContentType value:", self.table.options.ajaxContentType);
+                       }
+               }
+
+               if (url) {
+
+                       //configure headers
+                       if (typeof config.headers === "undefined") {
+                               config.headers = {};
+                       }
+
+                       if (typeof config.headers.Accept === "undefined") {
+                               config.headers.Accept = "application/json";
+                       }
+
+                       if (typeof config.headers["X-Requested-With"] === "undefined") {
+                               config.headers["X-Requested-With"] = "XMLHttpRequest";
+                       }
+
+                       if (typeof config.mode === "undefined") {
+                               config.mode = "cors";
+                       }
+
+                       if (config.mode == "cors") {
+
+                               if (typeof config.headers["Access-Control-Allow-Origin"] === "undefined") {
+                                       config.headers["Access-Control-Allow-Origin"] = window.location.origin;
+                               }
+
+                               if (typeof config.credentials === "undefined") {
+                                       config.credentials = 'same-origin';
+                               }
+                       } else {
+                               if (typeof config.credentials === "undefined") {
+                                       config.credentials = 'include';
+                               }
+                       }
+
+                       //send request
+                       fetch(url, config).then(function (response) {
+                               if (response.ok) {
+                                       response.json().then(function (data) {
+                                               resolve(data);
+                                       }).catch(function (error) {
+                                               reject(error);
+                                               console.warn("Ajax Load Error - Invalid JSON returned", error);
+                                       });
+                               } else {
+                                       console.error("Ajax Load Error - Connection Error: " + response.status, response.statusText);
+                                       reject(response);
+                               }
+                       }).catch(function (error) {
+                               console.error("Ajax Load Error - Connection Error: ", error);
+                               reject(error);
+                       });
+               } else {
+                       console.warn("Ajax Load Error - No URL Set");
+                       resolve([]);
+               }
+       });
+};
+
+Ajax.prototype.contentTypeFormatters = {
+       "json": {
+               headers: {
+                       'Content-Type': 'application/json'
+               },
+               body: function body(url, config, params) {
+                       return JSON.stringify(params);
+               }
+       },
+       "form": {
+               headers: {},
+               body: function body(url, config, params) {
+                       var output = this.generateParamsList(params),
+                           form = new FormData();
+
+                       output.forEach(function (item) {
+                               form.append(item.key, item.value);
+                       });
+
+                       return form;
+               }
+       }
+};
+
+Tabulator.prototype.registerModule("ajax", Ajax);
+
+//public calc object
+var CalcComponent = function CalcComponent(row) {
+       this._row = row;
+};
+
+CalcComponent.prototype.getData = function (transform) {
+       return this._row.getData(transform);
+};
+
+CalcComponent.prototype.getElement = function () {
+       return this._row.getElement();
+};
+
+CalcComponent.prototype.getTable = function () {
+       return this._row.table;
+};
+
+CalcComponent.prototype.getCells = function () {
+       var cells = [];
+
+       this._row.getCells().forEach(function (cell) {
+               cells.push(cell.getComponent());
+       });
+
+       return cells;
+};
+
+CalcComponent.prototype.getCell = function (column) {
+       var cell = this._row.getCell(column);
+       return cell ? cell.getComponent() : false;
+};
+
+CalcComponent.prototype._getSelf = function () {
+       return this._row;
+};
+
+var ColumnCalcs = function ColumnCalcs(table) {
+       this.table = table; //hold Tabulator object
+       this.topCalcs = [];
+       this.botCalcs = [];
+       this.genColumn = false;
+       this.topElement = this.createElement();
+       this.botElement = this.createElement();
+       this.topRow = false;
+       this.botRow = false;
+       this.topInitialized = false;
+       this.botInitialized = false;
+
+       this.initialize();
+};
+
+ColumnCalcs.prototype.createElement = function () {
+       var el = document.createElement("div");
+       el.classList.add("tabulator-calcs-holder");
+       return el;
+};
+
+ColumnCalcs.prototype.initialize = function () {
+       this.genColumn = new Column({ field: "value" }, this);
+};
+
+//dummy functions to handle being mock column manager
+ColumnCalcs.prototype.registerColumnField = function () {};
+
+//initialize column calcs
+ColumnCalcs.prototype.initializeColumn = function (column) {
+       var def = column.definition;
+
+       var config = {
+               topCalcParams: def.topCalcParams || {},
+               botCalcParams: def.bottomCalcParams || {}
+       };
+
+       if (def.topCalc) {
+
+               switch (_typeof(def.topCalc)) {
+                       case "string":
+                               if (this.calculations[def.topCalc]) {
+                                       config.topCalc = this.calculations[def.topCalc];
+                               } else {
+                                       console.warn("Column Calc Error - No such calculation found, ignoring: ", def.topCalc);
+                               }
+                               break;
+
+                       case "function":
+                               config.topCalc = def.topCalc;
+                               break;
+
+               }
+
+               if (config.topCalc) {
+                       column.modules.columnCalcs = config;
+                       this.topCalcs.push(column);
+
+                       if (this.table.options.columnCalcs != "group") {
+                               this.initializeTopRow();
+                       }
+               }
+       }
+
+       if (def.bottomCalc) {
+               switch (_typeof(def.bottomCalc)) {
+                       case "string":
+                               if (this.calculations[def.bottomCalc]) {
+                                       config.botCalc = this.calculations[def.bottomCalc];
+                               } else {
+                                       console.warn("Column Calc Error - No such calculation found, ignoring: ", def.bottomCalc);
+                               }
+                               break;
+
+                       case "function":
+                               config.botCalc = def.bottomCalc;
+                               break;
+
+               }
+
+               if (config.botCalc) {
+                       column.modules.columnCalcs = config;
+                       this.botCalcs.push(column);
+
+                       if (this.table.options.columnCalcs != "group") {
+                               this.initializeBottomRow();
+                       }
+               }
+       }
+};
+
+ColumnCalcs.prototype.removeCalcs = function () {
+       var changed = false;
+
+       if (this.topInitialized) {
+               this.topInitialized = false;
+               this.topElement.parentNode.removeChild(this.topElement);
+               changed = true;
+       }
+
+       if (this.botInitialized) {
+               this.botInitialized = false;
+               this.table.footerManager.remove(this.botElement);
+               changed = true;
+       }
+
+       if (changed) {
+               this.table.rowManager.adjustTableSize();
+       }
+};
+
+ColumnCalcs.prototype.initializeTopRow = function () {
+       if (!this.topInitialized) {
+               // this.table.columnManager.headersElement.after(this.topElement);
+               this.table.columnManager.getElement().insertBefore(this.topElement, this.table.columnManager.headersElement.nextSibling);
+               this.topInitialized = true;
+       }
+};
+
+ColumnCalcs.prototype.initializeBottomRow = function () {
+       if (!this.botInitialized) {
+               this.table.footerManager.prepend(this.botElement);
+               this.botInitialized = true;
+       }
+};
+
+ColumnCalcs.prototype.scrollHorizontal = function (left) {
+       var hozAdjust = 0,
+           scrollWidth = this.table.columnManager.getElement().scrollWidth - this.table.element.clientWidth;
+
+       if (this.botInitialized && this.botRow) {
+               this.botRow.getElement().style.marginLeft = -left + "px";
+       }
+};
+
+ColumnCalcs.prototype.recalc = function (rows) {
+       var data, row;
+
+       if (this.topInitialized || this.botInitialized) {
+               data = this.rowsToData(rows);
+
+               if (this.topInitialized) {
+                       if (this.topRow) {
+                               this.topRow.deleteCells();
+                       }
+
+                       row = this.generateRow("top", this.rowsToData(rows));
+                       this.topRow = row;
+                       while (this.topElement.firstChild) {
+                               this.topElement.removeChild(this.topElement.firstChild);
+                       }this.topElement.appendChild(row.getElement());
+                       row.initialize(true);
+               }
+
+               if (this.botInitialized) {
+                       if (this.botRow) {
+                               this.botRow.deleteCells();
+                       }
+
+                       row = this.generateRow("bottom", this.rowsToData(rows));
+                       this.botRow = row;
+                       while (this.botElement.firstChild) {
+                               this.botElement.removeChild(this.botElement.firstChild);
+                       }this.botElement.appendChild(row.getElement());
+                       row.initialize(true);
+               }
+
+               this.table.rowManager.adjustTableSize();
+
+               //set resizable handles
+               if (this.table.modExists("frozenColumns")) {
+                       this.table.modules.frozenColumns.layout();
+               }
+       }
+};
+
+ColumnCalcs.prototype.recalcRowGroup = function (row) {
+       this.recalcGroup(this.table.modules.groupRows.getRowGroup(row));
+};
+
+ColumnCalcs.prototype.recalcAll = function () {
+       var _this44 = this;
+
+       if (this.topCalcs.length || this.botCalcs.length) {
+               if (this.table.options.columnCalcs !== "group") {
+                       this.recalc(this.table.rowManager.activeRows);
+               }
+
+               if (this.table.options.groupBy && this.table.options.columnCalcs !== "table") {
+
+                       var groups = table.modules.groupRows.getChildGroups();
+
+                       groups.forEach(function (group) {
+                               _this44.recalcGroup(group);
+                       });
+               }
+       }
+};
+
+ColumnCalcs.prototype.recalcGroup = function (group) {
+       var data, rowData;
+
+       if (group) {
+               if (group.calcs) {
+                       if (group.calcs.bottom) {
+                               data = this.rowsToData(group.rows);
+                               rowData = this.generateRowData("bottom", data);
+
+                               group.calcs.bottom.updateData(rowData);
+                               group.calcs.bottom.reinitialize();
+                       }
+
+                       if (group.calcs.top) {
+                               data = this.rowsToData(group.rows);
+                               rowData = this.generateRowData("top", data);
+
+                               group.calcs.top.updateData(rowData);
+                               group.calcs.top.reinitialize();
+                       }
+               }
+       }
+};
+
+//generate top stats row
+ColumnCalcs.prototype.generateTopRow = function (rows) {
+       return this.generateRow("top", this.rowsToData(rows));
+};
+//generate bottom stats row
+ColumnCalcs.prototype.generateBottomRow = function (rows) {
+       return this.generateRow("bottom", this.rowsToData(rows));
+};
+
+ColumnCalcs.prototype.rowsToData = function (rows) {
+       var _this45 = this;
+
+       var data = [];
+
+       rows.forEach(function (row) {
+               data.push(row.getData());
+
+               if (_this45.table.options.dataTree && _this45.table.options.dataTreeChildColumnCalcs) {
+                       if (row.modules.dataTree.open) {
+                               var children = _this45.rowsToData(_this45.table.modules.dataTree.getFilteredTreeChildren(row));
+                               data = data.concat(children);
+                       }
+               }
+       });
+
+       return data;
+};
+
+//generate stats row
+ColumnCalcs.prototype.generateRow = function (pos, data) {
+       var self = this,
+           rowData = this.generateRowData(pos, data),
+           row;
+
+       if (self.table.modExists("mutator")) {
+               self.table.modules.mutator.disable();
+       }
+
+       row = new Row(rowData, this, "calc");
+
+       if (self.table.modExists("mutator")) {
+               self.table.modules.mutator.enable();
+       }
+
+       row.getElement().classList.add("tabulator-calcs", "tabulator-calcs-" + pos);
+
+       row.component = false;
+
+       row.getComponent = function () {
+               if (!this.component) {
+                       this.component = new CalcComponent(this);
+               }
+
+               return this.component;
+       };
+
+       row.generateCells = function () {
+
+               var cells = [];
+
+               self.table.columnManager.columnsByIndex.forEach(function (column) {
+
+                       //set field name of mock column
+                       self.genColumn.setField(column.getField());
+                       self.genColumn.hozAlign = column.hozAlign;
+
+                       if (column.definition[pos + "CalcFormatter"] && self.table.modExists("format")) {
+                               self.genColumn.modules.format = {
+                                       formatter: self.table.modules.format.getFormatter(column.definition[pos + "CalcFormatter"]),
+                                       params: column.definition[pos + "CalcFormatterParams"] || {}
+                               };
+                       } else {
+                               self.genColumn.modules.format = {
+                                       formatter: self.table.modules.format.getFormatter("plaintext"),
+                                       params: {}
+                               };
+                       }
+
+                       //ensure css class defintion is replicated to calculation cell
+                       self.genColumn.definition.cssClass = column.definition.cssClass;
+
+                       //generate cell and assign to correct column
+                       var cell = new Cell(self.genColumn, row);
+                       cell.getElement();
+                       cell.column = column;
+                       cell.setWidth();
+
+                       column.cells.push(cell);
+                       cells.push(cell);
+
+                       if (!column.visible) {
+                               cell.hide();
+                       }
+               });
+
+               this.cells = cells;
+       };
+
+       return row;
+};
+
+//generate stats row
+ColumnCalcs.prototype.generateRowData = function (pos, data) {
+       var rowData = {},
+           calcs = pos == "top" ? this.topCalcs : this.botCalcs,
+           type = pos == "top" ? "topCalc" : "botCalc",
+           params,
+           paramKey;
+
+       calcs.forEach(function (column) {
+               var values = [];
+
+               if (column.modules.columnCalcs && column.modules.columnCalcs[type]) {
+                       data.forEach(function (item) {
+                               values.push(column.getFieldValue(item));
+                       });
+
+                       paramKey = type + "Params";
+                       params = typeof column.modules.columnCalcs[paramKey] === "function" ? column.modules.columnCalcs[paramKey](values, data) : column.modules.columnCalcs[paramKey];
+
+                       column.setFieldValue(rowData, column.modules.columnCalcs[type](values, data, params));
+               }
+       });
+
+       return rowData;
+};
+
+ColumnCalcs.prototype.hasTopCalcs = function () {
+       return !!this.topCalcs.length;
+};
+
+ColumnCalcs.prototype.hasBottomCalcs = function () {
+       return !!this.botCalcs.length;
+};
+
+//handle table redraw
+ColumnCalcs.prototype.redraw = function () {
+       if (this.topRow) {
+               this.topRow.normalizeHeight(true);
+       }
+       if (this.botRow) {
+               this.botRow.normalizeHeight(true);
+       }
+};
+
+//return the calculated
+ColumnCalcs.prototype.getResults = function () {
+       var self = this,
+           results = {},
+           groups;
+
+       if (this.table.options.groupBy && this.table.modExists("groupRows")) {
+               groups = this.table.modules.groupRows.getGroups(true);
+
+               groups.forEach(function (group) {
+                       results[group.getKey()] = self.getGroupResults(group);
+               });
+       } else {
+               results = {
+                       top: this.topRow ? this.topRow.getData() : {},
+                       bottom: this.botRow ? this.botRow.getData() : {}
+               };
+       }
+
+       return results;
+};
+
+//get results from a group
+ColumnCalcs.prototype.getGroupResults = function (group) {
+       var self = this,
+           groupObj = group._getSelf(),
+           subGroups = group.getSubGroups(),
+           subGroupResults = {},
+           results = {};
+
+       subGroups.forEach(function (subgroup) {
+               subGroupResults[subgroup.getKey()] = self.getGroupResults(subgroup);
+       });
+
+       results = {
+               top: groupObj.calcs.top ? groupObj.calcs.top.getData() : {},
+               bottom: groupObj.calcs.bottom ? groupObj.calcs.bottom.getData() : {},
+               groups: subGroupResults
+       };
+
+       return results;
+};
+
+//default calculations
+ColumnCalcs.prototype.calculations = {
+       "avg": function avg(values, data, calcParams) {
+               var output = 0,
+                   precision = typeof calcParams.precision !== "undefined" ? calcParams.precision : 2;
+
+               if (values.length) {
+                       output = values.reduce(function (sum, value) {
+                               return Number(sum) + Number(value);
+                       });
+
+                       output = output / values.length;
+
+                       output = precision !== false ? output.toFixed(precision) : output;
+               }
+
+               return parseFloat(output).toString();
+       },
+       "max": function max(values, data, calcParams) {
+               var output = null,
+                   precision = typeof calcParams.precision !== "undefined" ? calcParams.precision : false;
+
+               values.forEach(function (value) {
+
+                       value = Number(value);
+
+                       if (value > output || output === null) {
+                               output = value;
+                       }
+               });
+
+               return output !== null ? precision !== false ? output.toFixed(precision) : output : "";
+       },
+       "min": function min(values, data, calcParams) {
+               var output = null,
+                   precision = typeof calcParams.precision !== "undefined" ? calcParams.precision : false;
+
+               values.forEach(function (value) {
+
+                       value = Number(value);
+
+                       if (value < output || output === null) {
+                               output = value;
+                       }
+               });
+
+               return output !== null ? precision !== false ? output.toFixed(precision) : output : "";
+       },
+       "sum": function sum(values, data, calcParams) {
+               var output = 0,
+                   precision = typeof calcParams.precision !== "undefined" ? calcParams.precision : false;
+
+               if (values.length) {
+                       values.forEach(function (value) {
+                               value = Number(value);
+
+                               output += !isNaN(value) ? Number(value) : 0;
+                       });
+               }
+
+               return precision !== false ? output.toFixed(precision) : output;
+       },
+       "concat": function concat(values, data, calcParams) {
+               var output = 0;
+
+               if (values.length) {
+                       output = values.reduce(function (sum, value) {
+                               return String(sum) + String(value);
+                       });
+               }
+
+               return output;
+       },
+       "count": function count(values, data, calcParams) {
+               var output = 0;
+
+               if (values.length) {
+                       values.forEach(function (value) {
+                               if (value) {
+                                       output++;
+                               }
+                       });
+               }
+
+               return output;
+       }
+};
+
+Tabulator.prototype.registerModule("columnCalcs", ColumnCalcs);
+
+var Clipboard = function Clipboard(table) {
+       this.table = table;
+       this.mode = true;
+
+       this.pasteParser = function () {};
+       this.pasteAction = function () {};
+       this.customSelection = false;
+       this.rowRange = false;
+       this.blocked = true; //block copy actions not originating from this command
+};
+
+Clipboard.prototype.initialize = function () {
+       var _this46 = this;
+
+       this.mode = this.table.options.clipboard;
+
+       this.rowRange = this.table.options.clipboardCopyRowRange;
+
+       if (this.mode === true || this.mode === "copy") {
+               this.table.element.addEventListener("copy", function (e) {
+                       var plain, html, list;
+
+                       if (!_this46.blocked) {
+                               e.preventDefault();
+
+                               if (_this46.customSelection) {
+                                       plain = _this46.customSelection;
+
+                                       if (_this46.table.options.clipboardCopyFormatter) {
+                                               plain = _this46.table.options.clipboardCopyFormatter("plain", plain);
+                                       }
+                               } else {
+
+                                       var list = _this46.table.modules.export.generateExportList(_this46.table.options.clipboardCopyConfig, _this46.table.options.clipboardCopyStyled, _this46.rowRange, "clipboard");
+
+                                       html = _this46.table.modules.export.genereateHTMLTable(list);
+                                       plain = html ? _this46.generatePlainContent(list) : "";
+
+                                       if (_this46.table.options.clipboardCopyFormatter) {
+                                               plain = _this46.table.options.clipboardCopyFormatter("plain", plain);
+                                               html = _this46.table.options.clipboardCopyFormatter("html", html);
+                                       }
+                               }
+
+                               if (window.clipboardData && window.clipboardData.setData) {
+                                       window.clipboardData.setData('Text', plain);
+                               } else if (e.clipboardData && e.clipboardData.setData) {
+                                       e.clipboardData.setData('text/plain', plain);
+                                       if (html) {
+                                               e.clipboardData.setData('text/html', html);
+                                       }
+                               } else if (e.originalEvent && e.originalEvent.clipboardData.setData) {
+                                       e.originalEvent.clipboardData.setData('text/plain', plain);
+                                       if (html) {
+                                               e.originalEvent.clipboardData.setData('text/html', html);
+                                       }
+                               }
+
+                               _this46.table.options.clipboardCopied.call(_this46.table, plain, html);
+
+                               _this46.reset();
+                       }
+               });
+       }
+
+       if (this.mode === true || this.mode === "paste") {
+               this.table.element.addEventListener("paste", function (e) {
+                       _this46.paste(e);
+               });
+       }
+
+       this.setPasteParser(this.table.options.clipboardPasteParser);
+       this.setPasteAction(this.table.options.clipboardPasteAction);
+};
+
+Clipboard.prototype.reset = function () {
+       this.blocked = true;
+       this.customSelection = false;
+};
+
+Clipboard.prototype.generatePlainContent = function (list) {
+       var output = [];
+
+       list.forEach(function (row) {
+               var rowData = [];
+
+               row.columns.forEach(function (col) {
+                       var value = "";
+
+                       if (col) {
+
+                               if (row.type === "group") {
+                                       col.value = col.component.getKey();
+                               }
+
+                               if (col.value === null) {
+                                       value = "";
+                               } else {
+                                       switch (_typeof(col.value)) {
+                                               case "object":
+                                                       value = JSON.stringify(col.value);
+                                                       break;
+
+                                               case "undefined":
+                                                       value = "";
+                                                       break;
+
+                                               default:
+                                                       value = col.value;
+                                       }
+                               }
+                       }
+
+                       rowData.push(value);
+               });
+
+               output.push(rowData.join("\t"));
+       });
+
+       return output.join("\n");
+};
+
+Clipboard.prototype.copy = function (range, internal) {
+       var range, sel, textRange;
+       this.blocked = false;
+       this.customSelection = false;
+
+       if (this.mode === true || this.mode === "copy") {
+
+               this.rowRange = range || this.table.options.clipboardCopyRowRange;
+
+               if (typeof window.getSelection != "undefined" && typeof document.createRange != "undefined") {
+                       range = document.createRange();
+                       range.selectNodeContents(this.table.element);
+                       sel = window.getSelection();
+
+                       if (sel.toString() && internal) {
+                               this.customSelection = sel.toString();
+                       }
+
+                       sel.removeAllRanges();
+                       sel.addRange(range);
+               } else if (typeof document.selection != "undefined" && typeof document.body.createTextRange != "undefined") {
+                       textRange = document.body.createTextRange();
+                       textRange.moveToElementText(this.table.element);
+                       textRange.select();
+               }
+
+               document.execCommand('copy');
+
+               if (sel) {
+                       sel.removeAllRanges();
+               }
+       }
+};
+
+//PASTE EVENT HANDLING
+
+Clipboard.prototype.setPasteAction = function (action) {
+
+       switch (typeof action === 'undefined' ? 'undefined' : _typeof(action)) {
+               case "string":
+                       this.pasteAction = this.pasteActions[action];
+
+                       if (!this.pasteAction) {
+                               console.warn("Clipboard Error - No such paste action found:", action);
+                       }
+                       break;
+
+               case "function":
+                       this.pasteAction = action;
+                       break;
+       }
+};
+
+Clipboard.prototype.setPasteParser = function (parser) {
+       switch (typeof parser === 'undefined' ? 'undefined' : _typeof(parser)) {
+               case "string":
+                       this.pasteParser = this.pasteParsers[parser];
+
+                       if (!this.pasteParser) {
+                               console.warn("Clipboard Error - No such paste parser found:", parser);
+                       }
+                       break;
+
+               case "function":
+                       this.pasteParser = parser;
+                       break;
+       }
+};
+
+Clipboard.prototype.paste = function (e) {
+       var data, rowData, rows;
+
+       if (this.checkPaseOrigin(e)) {
+
+               data = this.getPasteData(e);
+
+               rowData = this.pasteParser.call(this, data);
+
+               if (rowData) {
+                       e.preventDefault();
+
+                       if (this.table.modExists("mutator")) {
+                               rowData = this.mutateData(rowData);
+                       }
+
+                       rows = this.pasteAction.call(this, rowData);
+                       this.table.options.clipboardPasted.call(this.table, data, rowData, rows);
+               } else {
+                       this.table.options.clipboardPasteError.call(this.table, data);
+               }
+       }
+};
+
+Clipboard.prototype.mutateData = function (data) {
+       var self = this,
+           output = [];
+
+       if (Array.isArray(data)) {
+               data.forEach(function (row) {
+                       output.push(self.table.modules.mutator.transformRow(row, "clipboard"));
+               });
+       } else {
+               output = data;
+       }
+
+       return output;
+};
+
+Clipboard.prototype.checkPaseOrigin = function (e) {
+       var valid = true;
+
+       if (e.target.tagName != "DIV" || this.table.modules.edit.currentCell) {
+               valid = false;
+       }
+
+       return valid;
+};
+
+Clipboard.prototype.getPasteData = function (e) {
+       var data;
+
+       if (window.clipboardData && window.clipboardData.getData) {
+               data = window.clipboardData.getData('Text');
+       } else if (e.clipboardData && e.clipboardData.getData) {
+               data = e.clipboardData.getData('text/plain');
+       } else if (e.originalEvent && e.originalEvent.clipboardData.getData) {
+               data = e.originalEvent.clipboardData.getData('text/plain');
+       }
+
+       return data;
+};
+
+Clipboard.prototype.pasteParsers = {
+       table: function table(clipboard) {
+               var data = [],
+                   success = false,
+                   headerFindSuccess = true,
+                   columns = this.table.columnManager.columns,
+                   columnMap = [],
+                   rows = [];
+
+               //get data from clipboard into array of columns and rows.
+               clipboard = clipboard.split("\n");
+
+               clipboard.forEach(function (row) {
+                       data.push(row.split("\t"));
+               });
+
+               if (data.length && !(data.length === 1 && data[0].length < 2)) {
+                       success = true;
+
+                       //check if headers are present by title
+                       data[0].forEach(function (value) {
+                               var column = columns.find(function (column) {
+                                       return value && column.definition.title && value.trim() && column.definition.title.trim() === value.trim();
+                               });
+
+                               if (column) {
+                                       columnMap.push(column);
+                               } else {
+                                       headerFindSuccess = false;
+                               }
+                       });
+
+                       //check if column headers are present by field
+                       if (!headerFindSuccess) {
+                               headerFindSuccess = true;
+                               columnMap = [];
+
+                               data[0].forEach(function (value) {
+                                       var column = columns.find(function (column) {
+                                               return value && column.field && value.trim() && column.field.trim() === value.trim();
+                                       });
+
+                                       if (column) {
+                                               columnMap.push(column);
+                                       } else {
+                                               headerFindSuccess = false;
+                                       }
+                               });
+
+                               if (!headerFindSuccess) {
+                                       columnMap = this.table.columnManager.columnsByIndex;
+                               }
+                       }
+
+                       //remove header row if found
+                       if (headerFindSuccess) {
+                               data.shift();
+                       }
+
+                       data.forEach(function (item) {
+                               var row = {};
+
+                               item.forEach(function (value, i) {
+                                       if (columnMap[i]) {
+                                               row[columnMap[i].field] = value;
+                                       }
+                               });
+
+                               rows.push(row);
+                       });
+
+                       return rows;
+               } else {
+                       return false;
+               }
+       }
+};
+
+Clipboard.prototype.pasteActions = {
+       replace: function replace(rows) {
+               return this.table.setData(rows);
+       },
+       update: function update(rows) {
+               return this.table.updateOrAddData(rows);
+       },
+       insert: function insert(rows) {
+               return this.table.addData(rows);
+       }
+};
+
+Tabulator.prototype.registerModule("clipboard", Clipboard);
+
+var DataTree = function DataTree(table) {
+       this.table = table;
+       this.indent = 10;
+       this.field = "";
+       this.collapseEl = null;
+       this.expandEl = null;
+       this.branchEl = null;
+       this.elementField = false;
+
+       this.startOpen = function () {};
+
+       this.displayIndex = 0;
+};
+
+DataTree.prototype.initialize = function () {
+       var dummyEl = null,
+           firstCol = this.table.columnManager.getFirstVisibileColumn(),
+           options = this.table.options;
+
+       this.field = options.dataTreeChildField;
+       this.indent = options.dataTreeChildIndent;
+       this.elementField = options.dataTreeElementColumn || (firstCol ? firstCol.field : false);
+
+       if (options.dataTreeBranchElement) {
+
+               if (options.dataTreeBranchElement === true) {
+                       this.branchEl = document.createElement("div");
+                       this.branchEl.classList.add("tabulator-data-tree-branch");
+               } else {
+                       if (typeof options.dataTreeBranchElement === "string") {
+                               dummyEl = document.createElement("div");
+                               dummyEl.innerHTML = options.dataTreeBranchElement;
+                               this.branchEl = dummyEl.firstChild;
+                       } else {
+                               this.branchEl = options.dataTreeBranchElement;
+                       }
+               }
+       }
+
+       if (options.dataTreeCollapseElement) {
+               if (typeof options.dataTreeCollapseElement === "string") {
+                       dummyEl = document.createElement("div");
+                       dummyEl.innerHTML = options.dataTreeCollapseElement;
+                       this.collapseEl = dummyEl.firstChild;
+               } else {
+                       this.collapseEl = options.dataTreeCollapseElement;
+               }
+       } else {
+               this.collapseEl = document.createElement("div");
+               this.collapseEl.classList.add("tabulator-data-tree-control");
+               this.collapseEl.tabIndex = 0;
+               this.collapseEl.innerHTML = "<div class='tabulator-data-tree-control-collapse'></div>";
+       }
+
+       if (options.dataTreeExpandElement) {
+               if (typeof options.dataTreeExpandElement === "string") {
+                       dummyEl = document.createElement("div");
+                       dummyEl.innerHTML = options.dataTreeExpandElement;
+                       this.expandEl = dummyEl.firstChild;
+               } else {
+                       this.expandEl = options.dataTreeExpandElement;
+               }
+       } else {
+               this.expandEl = document.createElement("div");
+               this.expandEl.classList.add("tabulator-data-tree-control");
+               this.expandEl.tabIndex = 0;
+               this.expandEl.innerHTML = "<div class='tabulator-data-tree-control-expand'></div>";
+       }
+
+       switch (_typeof(options.dataTreeStartExpanded)) {
+               case "boolean":
+                       this.startOpen = function (row, index) {
+                               return options.dataTreeStartExpanded;
+                       };
+                       break;
+
+               case "function":
+                       this.startOpen = options.dataTreeStartExpanded;
+                       break;
+
+               default:
+                       this.startOpen = function (row, index) {
+                               return options.dataTreeStartExpanded[index];
+                       };
+                       break;
+       }
+};
+
+DataTree.prototype.initializeRow = function (row) {
+       var childArray = row.getData()[this.field];
+       var isArray = Array.isArray(childArray);
+
+       var children = isArray || !isArray && (typeof childArray === 'undefined' ? 'undefined' : _typeof(childArray)) === "object" && childArray !== null;
+
+       if (!children && row.modules.dataTree && row.modules.dataTree.branchEl) {
+               row.modules.dataTree.branchEl.parentNode.removeChild(row.modules.dataTree.branchEl);
+       }
+
+       if (!children && row.modules.dataTree && row.modules.dataTree.controlEl) {
+               row.modules.dataTree.controlEl.parentNode.removeChild(row.modules.dataTree.controlEl);
+       }
+
+       row.modules.dataTree = {
+               index: row.modules.dataTree ? row.modules.dataTree.index : 0,
+               open: children ? row.modules.dataTree ? row.modules.dataTree.open : this.startOpen(row.getComponent(), 0) : false,
+               controlEl: row.modules.dataTree && children ? row.modules.dataTree.controlEl : false,
+               branchEl: row.modules.dataTree && children ? row.modules.dataTree.branchEl : false,
+               parent: row.modules.dataTree ? row.modules.dataTree.parent : false,
+               children: children
+       };
+};
+
+DataTree.prototype.layoutRow = function (row) {
+       var cell = this.elementField ? row.getCell(this.elementField) : row.getCells()[0],
+           el = cell.getElement(),
+           config = row.modules.dataTree;
+
+       if (config.branchEl) {
+               if (config.branchEl.parentNode) {
+                       config.branchEl.parentNode.removeChild(config.branchEl);
+               }
+               config.branchEl = false;
+       }
+
+       if (config.controlEl) {
+               if (config.controlEl.parentNode) {
+                       config.controlEl.parentNode.removeChild(config.controlEl);
+               }
+               config.controlEl = false;
+       }
+
+       this.generateControlElement(row, el);
+
+       row.element.classList.add("tabulator-tree-level-" + config.index);
+
+       if (config.index) {
+               if (this.branchEl) {
+                       config.branchEl = this.branchEl.cloneNode(true);
+                       el.insertBefore(config.branchEl, el.firstChild);
+
+                       if (this.table.rtl) {
+                               config.branchEl.style.marginRight = (config.branchEl.offsetWidth + config.branchEl.style.marginLeft) * (config.index - 1) + config.index * this.indent + "px";
+                       } else {
+                               config.branchEl.style.marginLeft = (config.branchEl.offsetWidth + config.branchEl.style.marginRight) * (config.index - 1) + config.index * this.indent + "px";
+                       }
+               } else {
+
+                       if (this.table.rtl) {
+                               el.style.paddingRight = parseInt(window.getComputedStyle(el, null).getPropertyValue('padding-right')) + config.index * this.indent + "px";
+                       } else {
+                               el.style.paddingLeft = parseInt(window.getComputedStyle(el, null).getPropertyValue('padding-left')) + config.index * this.indent + "px";
+                       }
+               }
+       }
+};
+
+DataTree.prototype.generateControlElement = function (row, el) {
+       var _this47 = this;
+
+       var config = row.modules.dataTree,
+           el = el || row.getCells()[0].getElement(),
+           oldControl = config.controlEl;
+
+       if (config.children !== false) {
+
+               if (config.open) {
+                       config.controlEl = this.collapseEl.cloneNode(true);
+                       config.controlEl.addEventListener("click", function (e) {
+                               e.stopPropagation();
+                               _this47.collapseRow(row);
+                       });
+               } else {
+                       config.controlEl = this.expandEl.cloneNode(true);
+                       config.controlEl.addEventListener("click", function (e) {
+                               e.stopPropagation();
+                               _this47.expandRow(row);
+                       });
+               }
+
+               config.controlEl.addEventListener("mousedown", function (e) {
+                       e.stopPropagation();
+               });
+
+               if (oldControl && oldControl.parentNode === el) {
+                       oldControl.parentNode.replaceChild(config.controlEl, oldControl);
+               } else {
+                       el.insertBefore(config.controlEl, el.firstChild);
+               }
+       }
+};
+
+DataTree.prototype.setDisplayIndex = function (index) {
+       this.displayIndex = index;
+};
+
+DataTree.prototype.getDisplayIndex = function () {
+       return this.displayIndex;
+};
+
+DataTree.prototype.getRows = function (rows) {
+       var _this48 = this;
+
+       var output = [];
+
+       rows.forEach(function (row, i) {
+               var config, children;
+
+               output.push(row);
+
+               if (row instanceof Row) {
+
+                       config = row.modules.dataTree.children;
+
+                       if (!config.index && config.children !== false) {
+                               children = _this48.getChildren(row);
+
+                               children.forEach(function (child) {
+                                       output.push(child);
+                               });
+                       }
+               }
+       });
+
+       return output;
+};
+
+DataTree.prototype.getChildren = function (row) {
+       var _this49 = this;
+
+       var config = row.modules.dataTree,
+           children = [],
+           output = [];
+
+       if (config.children !== false && config.open) {
+               if (!Array.isArray(config.children)) {
+                       config.children = this.generateChildren(row);
+               }
+
+               if (this.table.modExists("filter") && this.table.options.dataTreeFilter) {
+                       children = this.table.modules.filter.filter(config.children);
+               } else {
+                       children = config.children;
+               }
+
+               if (this.table.modExists("sort") && this.table.options.dataTreeSort) {
+                       this.table.modules.sort.sort(children);
+               }
+
+               children.forEach(function (child) {
+                       output.push(child);
+
+                       var subChildren = _this49.getChildren(child);
+
+                       subChildren.forEach(function (sub) {
+                               output.push(sub);
+                       });
+               });
+       }
+
+       return output;
+};
+
+DataTree.prototype.generateChildren = function (row) {
+       var _this50 = this;
+
+       var children = [];
+
+       var childArray = row.getData()[this.field];
+
+       if (!Array.isArray(childArray)) {
+               childArray = [childArray];
+       }
+
+       childArray.forEach(function (childData) {
+               var childRow = new Row(childData || {}, _this50.table.rowManager);
+               childRow.modules.dataTree.index = row.modules.dataTree.index + 1;
+               childRow.modules.dataTree.parent = row;
+               if (childRow.modules.dataTree.children) {
+                       childRow.modules.dataTree.open = _this50.startOpen(childRow.getComponent(), childRow.modules.dataTree.index);
+               }
+               children.push(childRow);
+       });
+
+       return children;
+};
+
+DataTree.prototype.expandRow = function (row, silent) {
+       var config = row.modules.dataTree;
+
+       if (config.children !== false) {
+               config.open = true;
+
+               row.reinitialize();
+
+               this.table.rowManager.refreshActiveData("tree", false, true);
+
+               this.table.options.dataTreeRowExpanded(row.getComponent(), row.modules.dataTree.index);
+       }
+};
+
+DataTree.prototype.collapseRow = function (row) {
+       var config = row.modules.dataTree;
+
+       if (config.children !== false) {
+               config.open = false;
+
+               row.reinitialize();
+
+               this.table.rowManager.refreshActiveData("tree", false, true);
+
+               this.table.options.dataTreeRowCollapsed(row.getComponent(), row.modules.dataTree.index);
+       }
+};
+
+DataTree.prototype.toggleRow = function (row) {
+       var config = row.modules.dataTree;
+
+       if (config.children !== false) {
+               if (config.open) {
+                       this.collapseRow(row);
+               } else {
+                       this.expandRow(row);
+               }
+       }
+};
+
+DataTree.prototype.getTreeParent = function (row) {
+       return row.modules.dataTree.parent ? row.modules.dataTree.parent.getComponent() : false;
+};
+
+DataTree.prototype.getFilteredTreeChildren = function (row) {
+       var config = row.modules.dataTree,
+           output = [],
+           children;
+
+       if (config.children) {
+
+               if (!Array.isArray(config.children)) {
+                       config.children = this.generateChildren(row);
+               }
+
+               if (this.table.modExists("filter") && this.table.options.dataTreeFilter) {
+                       children = this.table.modules.filter.filter(config.children);
+               } else {
+                       children = config.children;
+               }
+
+               children.forEach(function (childRow) {
+                       if (childRow instanceof Row) {
+                               output.push(childRow);
+                       }
+               });
+       }
+
+       return output;
+};
+
+DataTree.prototype.rowDelete = function (row) {
+       var parent = row.modules.dataTree.parent,
+           childIndex;
+
+       if (parent) {
+               childIndex = this.findChildIndex(row, parent);
+
+               if (childIndex !== false) {
+                       parent.data[this.field].splice(childIndex, 1);
+               }
+
+               if (!parent.data[this.field].length) {
+                       delete parent.data[this.field];
+               }
+
+               this.initializeRow(parent);
+               this.layoutRow(parent);
+       }
+
+       this.table.rowManager.refreshActiveData("tree", false, true);
+};
+
+DataTree.prototype.addTreeChildRow = function (row, data, top, index) {
+       var childIndex = false;
+
+       if (typeof data === "string") {
+               data = JSON.parse(data);
+       }
+
+       if (!Array.isArray(row.data[this.field])) {
+               row.data[this.field] = [];
+
+               row.modules.dataTree.open = this.startOpen(row.getComponent(), row.modules.dataTree.index);
+       }
+
+       if (typeof index !== "undefined") {
+               childIndex = this.findChildIndex(index, row);
+
+               if (childIndex !== false) {
+                       row.data[this.field].splice(top ? childIndex : childIndex + 1, 0, data);
+               }
+       }
+
+       if (childIndex === false) {
+               if (top) {
+                       row.data[this.field].unshift(data);
+               } else {
+                       row.data[this.field].push(data);
+               }
+       }
+
+       this.initializeRow(row);
+       this.layoutRow(row);
+
+       this.table.rowManager.refreshActiveData("tree", false, true);
+};
+
+DataTree.prototype.findChildIndex = function (subject, parent) {
+       var _this51 = this;
+
+       var match = false;
+
+       if ((typeof subject === 'undefined' ? 'undefined' : _typeof(subject)) == "object") {
+
+               if (subject instanceof Row) {
+                       //subject is row element
+                       match = subject.data;
+               } else if (subject instanceof RowComponent) {
+                       //subject is public row component
+                       match = subject._getSelf().data;
+               } else if (typeof HTMLElement !== "undefined" && subject instanceof HTMLElement) {
+                       if (parent.modules.dataTree) {
+                               match = parent.modules.dataTree.children.find(function (childRow) {
+                                       return childRow instanceof Row ? childRow.element === subject : false;
+                               });
+
+                               if (match) {
+                                       match = match.data;
+                               }
+                       }
+               }
+       } else if (typeof subject == "undefined" || subject === null) {
+               match = false;
+       } else {
+               //subject should be treated as the index of the row
+               match = parent.data[this.field].find(function (row) {
+                       return row.data[_this51.table.options.index] == subject;
+               });
+       }
+
+       if (match) {
+
+               if (Array.isArray(parent.data[this.field])) {
+                       match = parent.data[this.field].indexOf(match);
+               }
+
+               if (match == -1) {
+                       match = false;
+               }
+       }
+
+       //catch all for any other type of input
+
+       return match;
+};
+
+DataTree.prototype.getTreeChildren = function (row, component, recurse) {
+       var _this52 = this;
+
+       var config = row.modules.dataTree,
+           output = [];
+
+       if (config.children) {
+
+               if (!Array.isArray(config.children)) {
+                       config.children = this.generateChildren(row);
+               }
+
+               config.children.forEach(function (childRow) {
+                       if (childRow instanceof Row) {
+                               output.push(component ? childRow.getComponent() : childRow);
+
+                               if (recurse) {
+                                       output = output.concat(_this52.getTreeChildren(childRow, component, recurse));
+                               }
+                       }
+               });
+       }
+
+       return output;
+};
+
+DataTree.prototype.checkForRestyle = function (cell) {
+       if (!cell.row.cells.indexOf(cell)) {
+               cell.row.reinitialize();
+       }
+};
+
+DataTree.prototype.getChildField = function () {
+       return this.field;
+};
+
+DataTree.prototype.redrawNeeded = function (data) {
+       return (this.field ? typeof data[this.field] !== "undefined" : false) || (this.elementField ? typeof data[this.elementField] !== "undefined" : false);
+};
+
+Tabulator.prototype.registerModule("dataTree", DataTree);
+
+var Download = function Download(table) {
+       this.table = table; //hold Tabulator object
+};
+
+//trigger file download
+Download.prototype.download = function (type, filename, options, range, interceptCallback) {
+       var self = this,
+           downloadFunc = false;
+
+       function buildLink(data, mime) {
+               if (interceptCallback) {
+                       if (interceptCallback === true) {
+                               self.triggerDownload(data, mime, type, filename, true);
+                       } else {
+                               interceptCallback(data);
+                       }
+               } else {
+                       self.triggerDownload(data, mime, type, filename);
+               }
+       }
+
+       if (typeof type == "function") {
+               downloadFunc = type;
+       } else {
+               if (self.downloaders[type]) {
+                       downloadFunc = self.downloaders[type];
+               } else {
+                       console.warn("Download Error - No such download type found: ", type);
+               }
+       }
+
+       if (downloadFunc) {
+               var list = this.generateExportList(range);
+
+               downloadFunc.call(this.table, list, options || {}, buildLink);
+       }
+};
+
+Download.prototype.generateExportList = function (range) {
+       var list = this.table.modules.export.generateExportList(this.table.options.downloadConfig, false, range || this.table.options.downloadRowRange, "download");
+
+       //assign group header formatter
+       var groupHeader = this.table.options.groupHeaderDownload;
+
+       if (groupHeader && !Array.isArray(groupHeader)) {
+               groupHeader = [groupHeader];
+       }
+
+       list.forEach(function (row) {
+               var group;
+
+               if (row.type === "group") {
+                       group = row.columns[0];
+
+                       if (groupHeader && groupHeader[row.indent]) {
+                               group.value = groupHeader[row.indent](group.value, row.component._group.getRowCount(), row.component._group.getData(), row.component);
+                       }
+               }
+       });
+
+       return list;
+};
+
+Download.prototype.triggerDownload = function (data, mime, type, filename, newTab) {
+       var element = document.createElement('a'),
+           blob = new Blob([data], { type: mime }),
+           filename = filename || "Tabulator." + (typeof type === "function" ? "txt" : type);
+
+       blob = this.table.options.downloadReady.call(this.table, data, blob);
+
+       if (blob) {
+
+               if (newTab) {
+                       window.open(window.URL.createObjectURL(blob));
+               } else {
+                       if (navigator.msSaveOrOpenBlob) {
+                               navigator.msSaveOrOpenBlob(blob, filename);
+                       } else {
+                               element.setAttribute('href', window.URL.createObjectURL(blob));
+
+                               //set file title
+                               element.setAttribute('download', filename);
+
+                               //trigger download
+                               element.style.display = 'none';
+                               document.body.appendChild(element);
+                               element.click();
+
+                               //remove temporary link element
+                               document.body.removeChild(element);
+                       }
+               }
+
+               if (this.table.options.downloadComplete) {
+                       this.table.options.downloadComplete();
+               }
+       }
+};
+
+Download.prototype.commsReceived = function (table, action, data) {
+       switch (action) {
+               case "intercept":
+                       this.download(data.type, "", data.options, data.active, data.intercept);
+                       break;
+       }
+};
+
+//downloaders
+Download.prototype.downloaders = {
+       csv: function csv(list, options, setFileContents) {
+               var delimiter = options && options.delimiter ? options.delimiter : ",",
+                   fileContents = [],
+                   headers = [];
+
+               list.forEach(function (row) {
+                       var item = [];
+
+                       switch (row.type) {
+                               case "group":
+                                       console.warn("Download Warning - CSV downloader cannot process row groups");
+                                       break;
+
+                               case "calc":
+                                       console.warn("Download Warning - CSV downloader cannot process column calculations");
+                                       break;
+
+                               case "header":
+                                       row.columns.forEach(function (col, i) {
+                                               if (col && col.depth === 1) {
+                                                       headers[i] = typeof col.value == "undefined" || col.value === null ? "" : '"' + String(col.value).split('"').join('""') + '"';
+                                               }
+                                       });
+                                       break;
+
+                               case "row":
+                                       row.columns.forEach(function (col) {
+
+                                               if (col) {
+
+                                                       switch (_typeof(col.value)) {
+                                                               case "object":
+                                                                       col.value = JSON.stringify(col.value);
+                                                                       break;
+
+                                                               case "undefined":
+                                                               case "null":
+                                                                       col.value = "";
+                                                                       break;
+                                                       }
+
+                                                       item.push('"' + String(col.value).split('"').join('""') + '"');
+                                               }
+                                       });
+
+                                       fileContents.push(item.join(delimiter));
+                                       break;
+                       }
+               });
+
+               if (headers.length) {
+                       fileContents.unshift(headers.join(delimiter));
+               }
+
+               fileContents = fileContents.join("\n");
+
+               if (options.bom) {
+                       fileContents = '\uFEFF' + fileContents;
+               }
+
+               setFileContents(fileContents, "text/csv");
+       },
+
+       json: function json(list, options, setFileContents) {
+               var fileContents = [];
+
+               list.forEach(function (row) {
+                       var item = {};
+
+                       switch (row.type) {
+                               case "header":
+                                       break;
+
+                               case "group":
+                                       console.warn("Download Warning - JSON downloader cannot process row groups");
+                                       break;
+
+                               case "calc":
+                                       console.warn("Download Warning - JSON downloader cannot process column calculations");
+                                       break;
+
+                               case "row":
+                                       row.columns.forEach(function (col) {
+                                               if (col) {
+                                                       item[col.component.getField()] = col.value;
+                                               }
+                                       });
+
+                                       fileContents.push(item);
+                                       break;
+                       }
+               });
+
+               fileContents = JSON.stringify(fileContents, null, '\t');
+
+               setFileContents(fileContents, "application/json");
+       },
+
+       pdf: function pdf(list, options, setFileContents) {
+               var header = [],
+                   body = [],
+                   autoTableParams = {},
+                   rowGroupStyles = options.rowGroupStyles || {
+                       fontStyle: "bold",
+                       fontSize: 12,
+                       cellPadding: 6,
+                       fillColor: 220
+               },
+                   rowCalcStyles = options.rowCalcStyles || {
+                       fontStyle: "bold",
+                       fontSize: 10,
+                       cellPadding: 4,
+                       fillColor: 232
+               },
+                   jsPDFParams = options.jsPDF || {},
+                   title = options && options.title ? options.title : "";
+
+               if (!jsPDFParams.orientation) {
+                       jsPDFParams.orientation = options.orientation || "landscape";
+               }
+
+               if (!jsPDFParams.unit) {
+                       jsPDFParams.unit = "pt";
+               }
+
+               //parse row list
+               list.forEach(function (row) {
+                       var item = {};
+
+                       switch (row.type) {
+                               case "header":
+                                       header.push(parseRow(row));
+                                       break;
+
+                               case "group":
+                                       body.push(parseRow(row, rowGroupStyles));
+                                       break;
+
+                               case "calc":
+                                       body.push(parseRow(row, rowCalcStyles));
+                                       break;
+
+                               case "row":
+                                       body.push(parseRow(row));
+                                       break;
+                       }
+               });
+
+               function parseRow(row, styles) {
+                       var rowData = [];
+
+                       row.columns.forEach(function (col) {
+                               var cell;
+
+                               if (col) {
+                                       switch (_typeof(col.value)) {
+                                               case "object":
+                                                       col.value = JSON.stringify(col.value);
+                                                       break;
+
+                                               case "undefined":
+                                               case "null":
+                                                       col.value = "";
+                                                       break;
+                                       }
+
+                                       cell = {
+                                               content: col.value,
+                                               colSpan: col.width,
+                                               rowSpan: col.height
+                                       };
+
+                                       if (styles) {
+                                               cell.styles = styles;
+                                       }
+
+                                       rowData.push(cell);
+                               } else {
+                                       rowData.push("");
+                               }
+                       });
+
+                       return rowData;
+               }
+
+               //configure PDF
+               var doc = new jsPDF(jsPDFParams); //set document to landscape, better for most tables
+
+               if (options && options.autoTable) {
+                       if (typeof options.autoTable === "function") {
+                               autoTableParams = options.autoTable(doc) || {};
+                       } else {
+                               autoTableParams = options.autoTable;
+                       }
+               }
+
+               if (title) {
+                       autoTableParams.addPageContent = function (data) {
+                               doc.text(title, 40, 30);
+                       };
+               }
+
+               autoTableParams.head = header;
+               autoTableParams.body = body;
+
+               doc.autoTable(autoTableParams);
+
+               if (options && options.documentProcessing) {
+                       options.documentProcessing(doc);
+               }
+
+               setFileContents(doc.output("arraybuffer"), "application/pdf");
+       },
+
+       xlsx: function xlsx(list, options, setFileContents) {
+               var self = this,
+                   sheetName = options.sheetName || "Sheet1",
+                   workbook = XLSX.utils.book_new(),
+                   output;
+
+               workbook.SheetNames = [];
+               workbook.Sheets = {};
+
+               function generateSheet() {
+                       var rows = [],
+                           merges = [],
+                           worksheet = {},
+                           range = { s: { c: 0, r: 0 }, e: { c: list[0] ? list[0].columns.reduce(function (a, b) {
+                                               return a + (b && b.width ? b.width : 1);
+                                       }, 0) : 0, r: list.length } };
+
+                       //parse row list
+                       list.forEach(function (row, i) {
+                               var rowData = [];
+
+                               row.columns.forEach(function (col, j) {
+
+                                       if (col) {
+                                               rowData.push(!(col.value instanceof Date) && _typeof(col.value) === "object" ? JSON.stringify(col.value) : col.value);
+
+                                               if (col.width > 1 || col.height > -1) {
+                                                       merges.push({ s: { r: i, c: j }, e: { r: i + col.height - 1, c: j + col.width - 1 } });
+                                               }
+                                       } else {
+                                               rowData.push("");
+                                       }
+                               });
+
+                               rows.push(rowData);
+                       });
+
+                       //convert rows to worksheet
+                       XLSX.utils.sheet_add_aoa(worksheet, rows);
+
+                       worksheet['!ref'] = XLSX.utils.encode_range(range);
+
+                       if (merges.length) {
+                               worksheet["!merges"] = merges;
+                       }
+
+                       return worksheet;
+               }
+
+               if (options.sheetOnly) {
+                       setFileContents(generateSheet());
+                       return;
+               }
+
+               if (options.sheets) {
+                       for (var sheet in options.sheets) {
+
+                               if (options.sheets[sheet] === true) {
+                                       workbook.SheetNames.push(sheet);
+                                       workbook.Sheets[sheet] = generateSheet();
+                               } else {
+
+                                       workbook.SheetNames.push(sheet);
+
+                                       this.modules.comms.send(options.sheets[sheet], "download", "intercept", {
+                                               type: "xlsx",
+                                               options: { sheetOnly: true },
+                                               active: self.active,
+                                               intercept: function intercept(data) {
+                                                       workbook.Sheets[sheet] = data;
+                                               }
+                                       });
+                               }
+                       }
+               } else {
+                       workbook.SheetNames.push(sheetName);
+                       workbook.Sheets[sheetName] = generateSheet();
+               }
+
+               if (options.documentProcessing) {
+                       workbook = options.documentProcessing(workbook);
+               }
+
+               //convert workbook to binary array
+               function s2ab(s) {
+                       var buf = new ArrayBuffer(s.length);
+                       var view = new Uint8Array(buf);
+                       for (var i = 0; i != s.length; ++i) {
+                               view[i] = s.charCodeAt(i) & 0xFF;
+                       }return buf;
+               }
+
+               output = XLSX.write(workbook, { bookType: 'xlsx', bookSST: true, type: 'binary' });
+
+               setFileContents(s2ab(output), "application/octet-stream");
+       },
+
+       html: function html(list, options, setFileContents) {
+               if (this.modExists("export", true)) {
+                       setFileContents(this.modules.export.genereateHTMLTable(list), "text/html");
+               }
+       }
+
+};
+
+Tabulator.prototype.registerModule("download", Download);
+
+var Edit = function Edit(table) {
+       this.table = table; //hold Tabulator object
+       this.currentCell = false; //hold currently editing cell
+       this.mouseClick = false; //hold mousedown state to prevent click binding being overriden by editor opening
+       this.recursionBlock = false; //prevent focus recursion
+       this.invalidEdit = false;
+       this.editedCells = [];
+};
+
+//initialize column editor
+Edit.prototype.initializeColumn = function (column) {
+       var self = this,
+           config = {
+               editor: false,
+               blocked: false,
+               check: column.definition.editable,
+               params: column.definition.editorParams || {}
+       };
+
+       //set column editor
+       switch (_typeof(column.definition.editor)) {
+               case "string":
+
+                       if (column.definition.editor === "tick") {
+                               column.definition.editor = "tickCross";
+                               console.warn("DEPRECATION WARNING - the tick editor has been deprecated, please use the tickCross editor");
+                       }
+
+                       if (self.editors[column.definition.editor]) {
+                               config.editor = self.editors[column.definition.editor];
+                       } else {
+                               console.warn("Editor Error - No such editor found: ", column.definition.editor);
+                       }
+                       break;
+
+               case "function":
+                       config.editor = column.definition.editor;
+                       break;
+
+               case "boolean":
+
+                       if (column.definition.editor === true) {
+
+                               if (typeof column.definition.formatter !== "function") {
+
+                                       if (column.definition.formatter === "tick") {
+                                               column.definition.formatter = "tickCross";
+                                               console.warn("DEPRECATION WARNING - the tick editor has been deprecated, please use the tickCross editor");
+                                       }
+
+                                       if (self.editors[column.definition.formatter]) {
+                                               config.editor = self.editors[column.definition.formatter];
+                                       } else {
+                                               config.editor = self.editors["input"];
+                                       }
+                               } else {
+                                       console.warn("Editor Error - Cannot auto lookup editor for a custom formatter: ", column.definition.formatter);
+                               }
+                       }
+                       break;
+       }
+
+       if (config.editor) {
+               column.modules.edit = config;
+       }
+};
+
+Edit.prototype.getCurrentCell = function () {
+       return this.currentCell ? this.currentCell.getComponent() : false;
+};
+
+Edit.prototype.clearEditor = function (cancel) {
+       var cell = this.currentCell,
+           cellEl;
+
+       this.invalidEdit = false;
+
+       if (cell) {
+               this.currentCell = false;
+
+               cellEl = cell.getElement();
+
+               if (cancel) {
+                       cell.validate();
+               } else {
+                       cellEl.classList.remove("tabulator-validation-fail");
+               }
+
+               cellEl.classList.remove("tabulator-editing");
+               while (cellEl.firstChild) {
+                       cellEl.removeChild(cellEl.firstChild);
+               }cell.row.getElement().classList.remove("tabulator-row-editing");
+       }
+};
+
+Edit.prototype.cancelEdit = function () {
+
+       if (this.currentCell) {
+               var cell = this.currentCell;
+               var component = this.currentCell.getComponent();
+
+               this.clearEditor(true);
+               cell.setValueActual(cell.getValue());
+               cell.cellRendered();
+
+               if (cell.column.definition.editor == "textarea" || cell.column.definition.variableHeight) {
+                       cell.row.normalizeHeight(true);
+               }
+
+               if (cell.column.cellEvents.cellEditCancelled) {
+                       cell.column.cellEvents.cellEditCancelled.call(this.table, component);
+               }
+
+               this.table.options.cellEditCancelled.call(this.table, component);
+       }
+};
+
+//return a formatted value for a cell
+Edit.prototype.bindEditor = function (cell) {
+       var self = this,
+           element = cell.getElement();
+
+       element.setAttribute("tabindex", 0);
+
+       element.addEventListener("click", function (e) {
+               if (!element.classList.contains("tabulator-editing")) {
+                       element.focus({ preventScroll: true });
+               }
+       });
+
+       element.addEventListener("mousedown", function (e) {
+               if (e.button === 2) {
+                       e.preventDefault();
+               } else {
+                       self.mouseClick = true;
+               }
+       });
+
+       element.addEventListener("focus", function (e) {
+               if (!self.recursionBlock) {
+                       self.edit(cell, e, false);
+               }
+       });
+};
+
+Edit.prototype.focusCellNoEvent = function (cell, block) {
+       this.recursionBlock = true;
+       if (!(block && this.table.browser === "ie")) {
+               cell.getElement().focus({ preventScroll: true });
+       }
+       this.recursionBlock = false;
+};
+
+Edit.prototype.editCell = function (cell, forceEdit) {
+       this.focusCellNoEvent(cell);
+       this.edit(cell, false, forceEdit);
+};
+
+Edit.prototype.focusScrollAdjust = function (cell) {
+       if (this.table.rowManager.getRenderMode() == "virtual") {
+               var topEdge = this.table.rowManager.element.scrollTop,
+                   bottomEdge = this.table.rowManager.element.clientHeight + this.table.rowManager.element.scrollTop,
+                   rowEl = cell.row.getElement(),
+                   offset = rowEl.offsetTop;
+
+               if (rowEl.offsetTop < topEdge) {
+                       this.table.rowManager.element.scrollTop -= topEdge - rowEl.offsetTop;
+               } else {
+                       if (rowEl.offsetTop + rowEl.offsetHeight > bottomEdge) {
+                               this.table.rowManager.element.scrollTop += rowEl.offsetTop + rowEl.offsetHeight - bottomEdge;
+                       }
+               }
+
+               var leftEdge = this.table.rowManager.element.scrollLeft,
+                   rightEdge = this.table.rowManager.element.clientWidth + this.table.rowManager.element.scrollLeft,
+                   cellEl = cell.getElement(),
+                   offset = cellEl.offsetLeft;
+
+               if (this.table.modExists("frozenColumns")) {
+                       leftEdge += parseInt(this.table.modules.frozenColumns.leftMargin);
+                       rightEdge -= parseInt(this.table.modules.frozenColumns.rightMargin);
+               }
+
+               if (cellEl.offsetLeft < leftEdge) {
+                       this.table.rowManager.element.scrollLeft -= leftEdge - cellEl.offsetLeft;
+               } else {
+                       if (cellEl.offsetLeft + cellEl.offsetWidth > rightEdge) {
+                               this.table.rowManager.element.scrollLeft += cellEl.offsetLeft + cellEl.offsetWidth - rightEdge;
+                       }
+               }
+       }
+};
+
+Edit.prototype.edit = function (cell, e, forceEdit) {
+       var self = this,
+           allowEdit = true,
+           rendered = function rendered() {},
+           element = cell.getElement(),
+           cellEditor,
+           component,
+           params;
+
+       //prevent editing if another cell is refusing to leave focus (eg. validation fail)
+       if (this.currentCell) {
+               if (!this.invalidEdit) {
+                       this.cancelEdit();
+               }
+               return;
+       }
+
+       //handle successfull value change
+       function success(value) {
+               if (self.currentCell === cell) {
+                       var valid = true;
+
+                       if (cell.column.modules.validate && self.table.modExists("validate") && self.table.options.validationMode != "manual") {
+                               valid = self.table.modules.validate.validate(cell.column.modules.validate, cell, value);
+                       }
+
+                       if (valid === true || self.table.options.validationMode === "highlight") {
+                               self.clearEditor();
+
+                               if (!cell.modules.edit) {
+                                       cell.modules.edit = {};
+                               }
+
+                               cell.modules.edit.edited = true;
+
+                               if (self.editedCells.indexOf(cell) == -1) {
+                                       self.editedCells.push(cell);
+                               }
+
+                               cell.setValue(value, true);
+
+                               if (self.table.options.dataTree && self.table.modExists("dataTree")) {
+                                       self.table.modules.dataTree.checkForRestyle(cell);
+                               }
+
+                               if (valid !== true) {
+                                       element.classList.add("tabulator-validation-fail");
+                                       self.table.options.validationFailed.call(self.table, cell.getComponent(), value, valid);
+                                       return false;
+                               }
+
+                               return true;
+                       } else {
+                               self.invalidEdit = true;
+                               element.classList.add("tabulator-validation-fail");
+                               self.focusCellNoEvent(cell, true);
+                               rendered();
+                               self.table.options.validationFailed.call(self.table, cell.getComponent(), value, valid);
+
+                               return false;
+                       }
+               } else {
+                       // console.warn("Edit Success Error - cannot call success on a cell that is no longer being edited");
+               }
+       }
+
+       //handle aborted edit
+       function cancel() {
+               if (self.currentCell === cell) {
+                       self.cancelEdit();
+
+                       if (self.table.options.dataTree && self.table.modExists("dataTree")) {
+                               self.table.modules.dataTree.checkForRestyle(cell);
+                       }
+               } else {
+                       // console.warn("Edit Success Error - cannot call cancel on a cell that is no longer being edited");
+               }
+       }
+
+       function onRendered(callback) {
+               rendered = callback;
+       }
+
+       if (!cell.column.modules.edit.blocked) {
+               if (e) {
+                       e.stopPropagation();
+               }
+
+               switch (_typeof(cell.column.modules.edit.check)) {
+                       case "function":
+                               allowEdit = cell.column.modules.edit.check(cell.getComponent());
+                               break;
+
+                       case "boolean":
+                               allowEdit = cell.column.modules.edit.check;
+                               break;
+               }
+
+               if (allowEdit || forceEdit) {
+
+                       self.cancelEdit();
+
+                       self.currentCell = cell;
+
+                       this.focusScrollAdjust(cell);
+
+                       component = cell.getComponent();
+
+                       if (this.mouseClick) {
+                               this.mouseClick = false;
+
+                               if (cell.column.cellEvents.cellClick) {
+                                       cell.column.cellEvents.cellClick.call(this.table, e, component);
+                               }
+                       }
+
+                       if (cell.column.cellEvents.cellEditing) {
+                               cell.column.cellEvents.cellEditing.call(this.table, component);
+                       }
+
+                       self.table.options.cellEditing.call(this.table, component);
+
+                       params = typeof cell.column.modules.edit.params === "function" ? cell.column.modules.edit.params(component) : cell.column.modules.edit.params;
+
+                       cellEditor = cell.column.modules.edit.editor.call(self, component, onRendered, success, cancel, params);
+
+                       //if editor returned, add to DOM, if false, abort edit
+                       if (cellEditor !== false) {
+
+                               if (cellEditor instanceof Node) {
+                                       element.classList.add("tabulator-editing");
+                                       cell.row.getElement().classList.add("tabulator-row-editing");
+                                       while (element.firstChild) {
+                                               element.removeChild(element.firstChild);
+                                       }element.appendChild(cellEditor);
+
+                                       //trigger onRendered Callback
+                                       rendered();
+
+                                       //prevent editing from triggering rowClick event
+                                       var children = element.children;
+
+                                       for (var i = 0; i < children.length; i++) {
+                                               children[i].addEventListener("click", function (e) {
+                                                       e.stopPropagation();
+                                               });
+                                       }
+                               } else {
+                                       console.warn("Edit Error - Editor should return an instance of Node, the editor returned:", cellEditor);
+                                       element.blur();
+                                       return false;
+                               }
+                       } else {
+                               element.blur();
+                               return false;
+                       }
+
+                       return true;
+               } else {
+                       this.mouseClick = false;
+                       element.blur();
+                       return false;
+               }
+       } else {
+               this.mouseClick = false;
+               element.blur();
+               return false;
+       }
+};
+
+Edit.prototype.maskInput = function (el, options) {
+       var mask = options.mask,
+           maskLetter = typeof options.maskLetterChar !== "undefined" ? options.maskLetterChar : "A",
+           maskNumber = typeof options.maskNumberChar !== "undefined" ? options.maskNumberChar : "9",
+           maskWildcard = typeof options.maskWildcardChar !== "undefined" ? options.maskWildcardChar : "*",
+           success = false;
+
+       function fillSymbols(index) {
+               var symbol = mask[index];
+               if (typeof symbol !== "undefined" && symbol !== maskWildcard && symbol !== maskLetter && symbol !== maskNumber) {
+                       el.value = el.value + "" + symbol;
+                       fillSymbols(index + 1);
+               }
+       }
+
+       el.addEventListener("keydown", function (e) {
+               var index = el.value.length,
+                   char = e.key;
+
+               if (e.keyCode > 46) {
+                       if (index >= mask.length) {
+                               e.preventDefault();
+                               e.stopPropagation();
+                               success = false;
+                               return false;
+                       } else {
+                               switch (mask[index]) {
+                                       case maskLetter:
+                                               if (char.toUpperCase() == char.toLowerCase()) {
+                                                       e.preventDefault();
+                                                       e.stopPropagation();
+                                                       success = false;
+                                                       return false;
+                                               }
+                                               break;
+
+                                       case maskNumber:
+                                               if (isNaN(char)) {
+                                                       e.preventDefault();
+                                                       e.stopPropagation();
+                                                       success = false;
+                                                       return false;
+                                               }
+                                               break;
+
+                                       case maskWildcard:
+                                               break;
+
+                                       default:
+                                               if (char !== mask[index]) {
+                                                       e.preventDefault();
+                                                       e.stopPropagation();
+                                                       success = false;
+                                                       return false;
+                                               }
+                               }
+                       }
+
+                       success = true;
+               }
+
+               return;
+       });
+
+       el.addEventListener("keyup", function (e) {
+               if (e.keyCode > 46) {
+                       if (options.maskAutoFill) {
+                               fillSymbols(el.value.length);
+                       }
+               }
+       });
+
+       if (!el.placeholder) {
+               el.placeholder = mask;
+       }
+
+       if (options.maskAutoFill) {
+               fillSymbols(el.value.length);
+       }
+};
+
+Edit.prototype.getEditedCells = function () {
+       var output = [];
+
+       this.editedCells.forEach(function (cell) {
+               output.push(cell.getComponent());
+       });
+
+       return output;
+};
+
+Edit.prototype.clearEdited = function (cell) {
+       var editIndex;
+
+       if (cell.modules.edit && cell.modules.edit.edited) {
+               cell.modules.edit.edited = false;
+
+               if (cell.modules.validate) {
+                       cell.modules.validate.invalid = false;
+               }
+       }
+
+       editIndex = this.editedCells.indexOf(cell);
+
+       if (editIndex > -1) {
+               this.editedCells.splice(editIndex, 1);
+       }
+};
+
+//default data editors
+Edit.prototype.editors = {
+
+       //input element
+       input: function input(cell, onRendered, success, cancel, editorParams) {
+
+               //create and style input
+               var cellValue = cell.getValue(),
+                   input = document.createElement("input");
+
+               input.setAttribute("type", editorParams.search ? "search" : "text");
+
+               input.style.padding = "4px";
+               input.style.width = "100%";
+               input.style.boxSizing = "border-box";
+
+               if (editorParams.elementAttributes && _typeof(editorParams.elementAttributes) == "object") {
+                       for (var key in editorParams.elementAttributes) {
+                               if (key.charAt(0) == "+") {
+                                       key = key.slice(1);
+                                       input.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes["+" + key]);
+                               } else {
+                                       input.setAttribute(key, editorParams.elementAttributes[key]);
+                               }
+                       }
+               }
+
+               input.value = typeof cellValue !== "undefined" ? cellValue : "";
+
+               onRendered(function () {
+                       input.focus({ preventScroll: true });
+                       input.style.height = "100%";
+               });
+
+               function onChange(e) {
+                       if ((cellValue === null || typeof cellValue === "undefined") && input.value !== "" || input.value !== cellValue) {
+                               if (success(input.value)) {
+                                       cellValue = input.value; //persist value if successfully validated incase editor is used as header filter
+                               }
+                       } else {
+                               cancel();
+                       }
+               }
+
+               //submit new value on blur or change
+               input.addEventListener("change", onChange);
+               input.addEventListener("blur", onChange);
+
+               //submit new value on enter
+               input.addEventListener("keydown", function (e) {
+                       switch (e.keyCode) {
+                               // case 9:
+                               case 13:
+                                       onChange(e);
+                                       break;
+
+                               case 27:
+                                       cancel();
+                                       break;
+
+                               case 35:
+                               case 36:
+                                       e.stopPropagation();
+                                       break;
+                       }
+               });
+
+               if (editorParams.mask) {
+                       this.table.modules.edit.maskInput(input, editorParams);
+               }
+
+               return input;
+       },
+
+       //resizable text area element
+       textarea: function textarea(cell, onRendered, success, cancel, editorParams) {
+               var self = this,
+                   cellValue = cell.getValue(),
+                   vertNav = editorParams.verticalNavigation || "hybrid",
+                   value = String(cellValue !== null && typeof cellValue !== "undefined" ? cellValue : ""),
+                   count = (value.match(/(?:\r\n|\r|\n)/g) || []).length + 1,
+                   input = document.createElement("textarea"),
+                   scrollHeight = 0;
+
+               //create and style input
+               input.style.display = "block";
+               input.style.padding = "2px";
+               input.style.height = "100%";
+               input.style.width = "100%";
+               input.style.boxSizing = "border-box";
+               input.style.whiteSpace = "pre-wrap";
+               input.style.resize = "none";
+
+               if (editorParams.elementAttributes && _typeof(editorParams.elementAttributes) == "object") {
+                       for (var key in editorParams.elementAttributes) {
+                               if (key.charAt(0) == "+") {
+                                       key = key.slice(1);
+                                       input.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes["+" + key]);
+                               } else {
+                                       input.setAttribute(key, editorParams.elementAttributes[key]);
+                               }
+                       }
+               }
+
+               input.value = value;
+
+               onRendered(function () {
+                       input.focus({ preventScroll: true });
+                       input.style.height = "100%";
+
+                       input.scrollHeight;
+                       input.style.height = input.scrollHeight + "px";
+                       cell.getRow().normalizeHeight();
+               });
+
+               function onChange(e) {
+
+                       if ((cellValue === null || typeof cellValue === "undefined") && input.value !== "" || input.value !== cellValue) {
+
+                               if (success(input.value)) {
+                                       cellValue = input.value; //persist value if successfully validated incase editor is used as header filter
+                               }
+
+                               setTimeout(function () {
+                                       cell.getRow().normalizeHeight();
+                               }, 300);
+                       } else {
+                               cancel();
+                       }
+               }
+
+               //submit new value on blur or change
+               input.addEventListener("change", onChange);
+               input.addEventListener("blur", onChange);
+
+               input.addEventListener("keyup", function () {
+
+                       input.style.height = "";
+
+                       var heightNow = input.scrollHeight;
+
+                       input.style.height = heightNow + "px";
+
+                       if (heightNow != scrollHeight) {
+                               scrollHeight = heightNow;
+                               cell.getRow().normalizeHeight();
+                       }
+               });
+
+               input.addEventListener("keydown", function (e) {
+
+                       switch (e.keyCode) {
+                               case 27:
+                                       cancel();
+                                       break;
+
+                               case 38:
+                                       //up arrow
+                                       if (vertNav == "editor" || vertNav == "hybrid" && input.selectionStart) {
+                                               e.stopImmediatePropagation();
+                                               e.stopPropagation();
+                                       }
+
+                                       break;
+
+                               case 40:
+                                       //down arrow
+                                       if (vertNav == "editor" || vertNav == "hybrid" && input.selectionStart !== input.value.length) {
+                                               e.stopImmediatePropagation();
+                                               e.stopPropagation();
+                                       }
+                                       break;
+
+                               case 35:
+                               case 36:
+                                       e.stopPropagation();
+                                       break;
+                       }
+               });
+
+               if (editorParams.mask) {
+                       this.table.modules.edit.maskInput(input, editorParams);
+               }
+
+               return input;
+       },
+
+       //input element with type of number
+       number: function number(cell, onRendered, success, cancel, editorParams) {
+
+               var cellValue = cell.getValue(),
+                   vertNav = editorParams.verticalNavigation || "editor",
+                   input = document.createElement("input");
+
+               input.setAttribute("type", "number");
+
+               if (typeof editorParams.max != "undefined") {
+                       input.setAttribute("max", editorParams.max);
+               }
+
+               if (typeof editorParams.min != "undefined") {
+                       input.setAttribute("min", editorParams.min);
+               }
+
+               if (typeof editorParams.step != "undefined") {
+                       input.setAttribute("step", editorParams.step);
+               }
+
+               //create and style input
+               input.style.padding = "4px";
+               input.style.width = "100%";
+               input.style.boxSizing = "border-box";
+
+               if (editorParams.elementAttributes && _typeof(editorParams.elementAttributes) == "object") {
+                       for (var key in editorParams.elementAttributes) {
+                               if (key.charAt(0) == "+") {
+                                       key = key.slice(1);
+                                       input.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes["+" + key]);
+                               } else {
+                                       input.setAttribute(key, editorParams.elementAttributes[key]);
+                               }
+                       }
+               }
+
+               input.value = cellValue;
+
+               var blurFunc = function blurFunc(e) {
+                       onChange();
+               };
+
+               onRendered(function () {
+                       //submit new value on blur
+                       input.removeEventListener("blur", blurFunc);
+
+                       input.focus({ preventScroll: true });
+                       input.style.height = "100%";
+
+                       //submit new value on blur
+                       input.addEventListener("blur", blurFunc);
+               });
+
+               function onChange() {
+                       var value = input.value;
+
+                       if (!isNaN(value) && value !== "") {
+                               value = Number(value);
+                       }
+
+                       if (value !== cellValue) {
+                               if (success(value)) {
+                                       cellValue = value; //persist value if successfully validated incase editor is used as header filter
+                               }
+                       } else {
+                               cancel();
+                       }
+               }
+
+               //submit new value on enter
+               input.addEventListener("keydown", function (e) {
+                       switch (e.keyCode) {
+                               case 13:
+                                       // case 9:
+                                       onChange();
+                                       break;
+
+                               case 27:
+                                       cancel();
+                                       break;
+
+                               case 38: //up arrow
+                               case 40:
+                                       //down arrow
+                                       if (vertNav == "editor") {
+                                               e.stopImmediatePropagation();
+                                               e.stopPropagation();
+                                       }
+                                       break;
+
+                               case 35:
+                               case 36:
+                                       e.stopPropagation();
+                                       break;
+                       }
+               });
+
+               if (editorParams.mask) {
+                       this.table.modules.edit.maskInput(input, editorParams);
+               }
+
+               return input;
+       },
+
+       //input element with type of number
+       range: function range(cell, onRendered, success, cancel, editorParams) {
+
+               var cellValue = cell.getValue(),
+                   input = document.createElement("input");
+
+               input.setAttribute("type", "range");
+
+               if (typeof editorParams.max != "undefined") {
+                       input.setAttribute("max", editorParams.max);
+               }
+
+               if (typeof editorParams.min != "undefined") {
+                       input.setAttribute("min", editorParams.min);
+               }
+
+               if (typeof editorParams.step != "undefined") {
+                       input.setAttribute("step", editorParams.step);
+               }
+
+               //create and style input
+               input.style.padding = "4px";
+               input.style.width = "100%";
+               input.style.boxSizing = "border-box";
+
+               if (editorParams.elementAttributes && _typeof(editorParams.elementAttributes) == "object") {
+                       for (var key in editorParams.elementAttributes) {
+                               if (key.charAt(0) == "+") {
+                                       key = key.slice(1);
+                                       input.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes["+" + key]);
+                               } else {
+                                       input.setAttribute(key, editorParams.elementAttributes[key]);
+                               }
+                       }
+               }
+
+               input.value = cellValue;
+
+               onRendered(function () {
+                       input.focus({ preventScroll: true });
+                       input.style.height = "100%";
+               });
+
+               function onChange() {
+                       var value = input.value;
+
+                       if (!isNaN(value) && value !== "") {
+                               value = Number(value);
+                       }
+
+                       if (value != cellValue) {
+                               if (success(value)) {
+                                       cellValue = value; //persist value if successfully validated incase editor is used as header filter
+                               }
+                       } else {
+                               cancel();
+                       }
+               }
+
+               //submit new value on blur
+               input.addEventListener("blur", function (e) {
+                       onChange();
+               });
+
+               //submit new value on enter
+               input.addEventListener("keydown", function (e) {
+                       switch (e.keyCode) {
+                               case 13:
+                                       // case 9:
+                                       onChange();
+                                       break;
+
+                               case 27:
+                                       cancel();
+                                       break;
+                       }
+               });
+
+               return input;
+       },
+
+       //select
+       select: function select(cell, onRendered, success, cancel, editorParams) {
+               var _this53 = this;
+
+               var self = this,
+                   cellEl = cell.getElement(),
+                   initialValue = cell.getValue(),
+                   vertNav = editorParams.verticalNavigation || "editor",
+                   initialDisplayValue = typeof initialValue !== "undefined" || initialValue === null ? Array.isArray(initialValue) ? initialValue : [initialValue] : typeof editorParams.defaultValue !== "undefined" ? editorParams.defaultValue : [],
+                   input = document.createElement("input"),
+                   listEl = document.createElement("div"),
+                   multiselect = editorParams.multiselect,
+                   dataItems = [],
+                   currentItem = {},
+                   displayItems = [],
+                   currentItems = [],
+                   blurable = true,
+                   blockListShow = false;
+
+               if (Array.isArray(editorParams) || !Array.isArray(editorParams) && (typeof editorParams === 'undefined' ? 'undefined' : _typeof(editorParams)) === "object" && !editorParams.values) {
+                       console.warn("DEPRECATION WARNING - values for the select editor must now be passed into the values property of the editorParams object, not as the editorParams object");
+                       editorParams = { values: editorParams };
+               }
+
+               function getUniqueColumnValues(field) {
+                       var output = {},
+                           data = self.table.getData(),
+                           column;
+
+                       if (field) {
+                               column = self.table.columnManager.getColumnByField(field);
+                       } else {
+                               column = cell.getColumn()._getSelf();
+                       }
+
+                       if (column) {
+                               data.forEach(function (row) {
+                                       var val = column.getFieldValue(row);
+
+                                       if (val !== null && typeof val !== "undefined" && val !== "") {
+                                               output[val] = true;
+                                       }
+                               });
+
+                               if (editorParams.sortValuesList) {
+                                       if (editorParams.sortValuesList == "asc") {
+                                               output = Object.keys(output).sort();
+                                       } else {
+                                               output = Object.keys(output).sort().reverse();
+                                       }
+                               } else {
+                                       output = Object.keys(output);
+                               }
+                       } else {
+                               console.warn("unable to find matching column to create select lookup list:", field);
+                       }
+
+                       return output;
+               }
+
+               function parseItems(inputValues, curentValues) {
+                       var dataList = [];
+                       var displayList = [];
+
+                       function processComplexListItem(item) {
+                               var item = {
+                                       label: item.label,
+                                       value: item.value,
+                                       itemParams: item.itemParams,
+                                       elementAttributes: item.elementAttributes,
+                                       element: false
+                               };
+
+                               // if(item.value === curentValue || (!isNaN(parseFloat(item.value)) && !isNaN(parseFloat(item.value)) && parseFloat(item.value) === parseFloat(curentValue))){
+                               //      setCurrentItem(item);
+                               // }
+
+                               if (curentValues.indexOf(item.value) > -1) {
+                                       setItem(item);
+                               }
+
+                               dataList.push(item);
+                               displayList.push(item);
+
+                               return item;
+                       }
+
+                       if (typeof inputValues == "function") {
+                               inputValues = inputValues(cell);
+                       }
+
+                       if (Array.isArray(inputValues)) {
+                               inputValues.forEach(function (value) {
+                                       var item;
+
+                                       if ((typeof value === 'undefined' ? 'undefined' : _typeof(value)) === "object") {
+
+                                               if (value.options) {
+                                                       item = {
+                                                               label: value.label,
+                                                               group: true,
+                                                               itemParams: value.itemParams,
+                                                               elementAttributes: value.elementAttributes,
+                                                               element: false
+                                                       };
+
+                                                       displayList.push(item);
+
+                                                       value.options.forEach(function (item) {
+                                                               processComplexListItem(item);
+                                                       });
+                                               } else {
+                                                       processComplexListItem(value);
+                                               }
+                                       } else {
+
+                                               item = {
+                                                       label: value,
+                                                       value: value,
+                                                       element: false
+                                               };
+
+                                               // if(item.value === curentValue || (!isNaN(parseFloat(item.value)) && !isNaN(parseFloat(item.value)) && parseFloat(item.value) === parseFloat(curentValue))){
+                                               //      setCurrentItem(item);
+                                               // }
+
+                                               if (curentValues.indexOf(item.value) > -1) {
+                                                       setItem(item);
+                                               }
+
+                                               dataList.push(item);
+                                               displayList.push(item);
+                                       }
+                               });
+                       } else {
+                               for (var key in inputValues) {
+                                       var item = {
+                                               label: inputValues[key],
+                                               value: key,
+                                               element: false
+                                       };
+
+                                       // if(item.value === curentValue || (!isNaN(parseFloat(item.value)) && !isNaN(parseFloat(item.value)) && parseFloat(item.value) === parseFloat(curentValue))){
+                                       //      setCurrentItem(item);
+                                       // }
+
+                                       if (curentValues.indexOf(item.value) > -1) {
+                                               setItem(item);
+                                       }
+
+                                       dataList.push(item);
+                                       displayList.push(item);
+                               }
+                       }
+
+                       dataItems = dataList;
+                       displayItems = displayList;
+
+                       fillList();
+               }
+
+               function fillList() {
+                       while (listEl.firstChild) {
+                               listEl.removeChild(listEl.firstChild);
+                       }displayItems.forEach(function (item) {
+
+                               var el = item.element;
+
+                               if (!el) {
+                                       el = document.createElement("div");
+                                       item.label = editorParams.listItemFormatter ? editorParams.listItemFormatter(item.value, item.label, cell, el, item.itemParams) : item.label;
+                                       if (item.group) {
+                                               el.classList.add("tabulator-edit-select-list-group");
+                                               el.tabIndex = 0;
+                                               el.innerHTML = item.label === "" ? "&nbsp;" : item.label;
+                                       } else {
+                                               el.classList.add("tabulator-edit-select-list-item");
+                                               el.tabIndex = 0;
+                                               el.innerHTML = item.label === "" ? "&nbsp;" : item.label;
+
+                                               el.addEventListener("click", function () {
+                                                       blockListShow = true;
+
+                                                       setTimeout(function () {
+                                                               blockListShow = false;
+                                                       }, 10);
+
+                                                       // setCurrentItem(item);
+                                                       // chooseItem();
+                                                       if (multiselect) {
+                                                               toggleItem(item);
+                                                               input.focus();
+                                                       } else {
+                                                               chooseItem(item);
+                                                       }
+                                               });
+
+                                               // if(item === currentItem){
+                                               //      el.classList.add("active");
+                                               // }
+
+                                               if (currentItems.indexOf(item) > -1) {
+                                                       el.classList.add("active");
+                                               }
+                                       }
+
+                                       if (item.elementAttributes && _typeof(item.elementAttributes) == "object") {
+                                               for (var key in item.elementAttributes) {
+                                                       if (key.charAt(0) == "+") {
+                                                               key = key.slice(1);
+                                                               el.setAttribute(key, input.getAttribute(key) + item.elementAttributes["+" + key]);
+                                                       } else {
+                                                               el.setAttribute(key, item.elementAttributes[key]);
+                                                       }
+                                               }
+                                       }
+                                       el.addEventListener("mousedown", function () {
+                                               blurable = false;
+
+                                               setTimeout(function () {
+                                                       blurable = true;
+                                               }, 10);
+                                       });
+
+                                       item.element = el;
+                               }
+
+                               listEl.appendChild(el);
+                       });
+               }
+
+               function setCurrentItem(item, active) {
+
+                       if (!multiselect && currentItem && currentItem.element) {
+                               currentItem.element.classList.remove("active");
+                       }
+
+                       if (currentItem && currentItem.element) {
+                               currentItem.element.classList.remove("focused");
+                       }
+
+                       currentItem = item;
+
+                       if (item.element) {
+                               item.element.classList.add("focused");
+                               if (active) {
+                                       item.element.classList.add("active");
+                               }
+                       }
+
+                       if (item && item.element && item.element.scrollIntoView) {
+                               item.element.scrollIntoView({ behavior: 'smooth', block: 'nearest', inline: 'start' });
+                       }
+               }
+
+               // function chooseItem(){
+               //      hideList();
+
+               //      if(initialValue !== currentItem.value){
+               //              initialValue = currentItem.value;
+               //              success(currentItem.value);
+               //      }else{
+               //              cancel();
+               //      }
+               // }
+
+               function setItem(item) {
+                       var index = currentItems.indexOf(item);
+
+                       if (index == -1) {
+                               currentItems.push(item);
+                               setCurrentItem(item, true);
+                       }
+
+                       fillInput();
+               }
+
+               function unsetItem(index) {
+                       var item = currentItems[index];
+
+                       if (index > -1) {
+                               currentItems.splice(index, 1);
+                               if (item.element) {
+                                       item.element.classList.remove("active");
+                               }
+                       }
+               }
+
+               function toggleItem(item) {
+                       if (!item) {
+                               item = currentItem;
+                       }
+
+                       var index = currentItems.indexOf(item);
+
+                       if (index > -1) {
+                               unsetItem(index);
+                       } else {
+                               if (multiselect !== true && currentItems.length >= multiselect) {
+                                       unsetItem(0);
+                               }
+
+                               setItem(item);
+                       }
+
+                       fillInput();
+               }
+
+               function chooseItem(item) {
+                       hideList();
+
+                       if (!item) {
+                               item = currentItem;
+                       }
+
+                       if (item) {
+                               input.value = item.label;
+                               success(item.value);
+                       }
+
+                       initialDisplayValue = input.value;
+               }
+
+               function chooseItems(silent) {
+                       if (!silent) {
+                               hideList();
+                       }
+
+                       var output = [];
+
+                       currentItems.forEach(function (item) {
+                               output.push(item.value);
+                       });
+
+                       initialDisplayValue = input.value;
+
+                       success(output);
+               }
+
+               function fillInput() {
+                       var output = [];
+
+                       currentItems.forEach(function (item) {
+                               output.push(item.label);
+                       });
+
+                       input.value = output.join(", ");
+
+                       if (self.currentCell === false) {
+                               chooseItems(true);
+                       }
+               }
+
+               function unsetItems() {
+
+                       var len = currentItems.length;
+
+                       for (var _i9 = 0; _i9 < len; _i9++) {
+                               unsetItem(0);
+                       }
+               }
+
+               function cancelItem() {
+                       hideList();
+                       cancel();
+               }
+
+               function showList() {
+                       currentItems = [];
+
+                       if (!listEl.parentNode) {
+                               if (editorParams.values === true) {
+                                       parseItems(getUniqueColumnValues(), initialDisplayValue);
+                               } else if (typeof editorParams.values === "string") {
+                                       parseItems(getUniqueColumnValues(editorParams.values), initialDisplayValue);
+                               } else {
+                                       parseItems(editorParams.values || [], initialDisplayValue);
+                               }
+
+                               var offset = Tabulator.prototype.helpers.elOffset(cellEl);
+
+                               listEl.style.minWidth = cellEl.offsetWidth + "px";
+
+                               listEl.style.top = offset.top + cellEl.offsetHeight + "px";
+                               listEl.style.left = offset.left + "px";
+
+                               listEl.addEventListener("mousedown", function (e) {
+                                       blurable = false;
+
+                                       setTimeout(function () {
+                                               blurable = true;
+                                       }, 10);
+                               });
+
+                               document.body.appendChild(listEl);
+                       }
+               }
+
+               function hideList() {
+                       if (listEl.parentNode) {
+                               listEl.parentNode.removeChild(listEl);
+                       }
+
+                       removeScrollListener();
+               }
+
+               function removeScrollListener() {
+                       self.table.rowManager.element.removeEventListener("scroll", cancelItem);
+               }
+
+               //style input
+               input.setAttribute("type", "text");
+
+               input.style.padding = "4px";
+               input.style.width = "100%";
+               input.style.boxSizing = "border-box";
+               input.style.cursor = "default";
+               input.readOnly = this.currentCell != false;
+
+               if (editorParams.elementAttributes && _typeof(editorParams.elementAttributes) == "object") {
+                       for (var key in editorParams.elementAttributes) {
+                               if (key.charAt(0) == "+") {
+                                       key = key.slice(1);
+                                       input.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes["+" + key]);
+                               } else {
+                                       input.setAttribute(key, editorParams.elementAttributes[key]);
+                               }
+                       }
+               }
+
+               input.value = typeof initialValue !== "undefined" || initialValue === null ? initialValue : "";
+
+               // if(editorParams.values === true){
+               //      parseItems(getUniqueColumnValues(), initialValue);
+               // }else if(typeof editorParams.values === "string"){
+               //      parseItems(getUniqueColumnValues(editorParams.values), initialValue);
+               // }else{
+               //      parseItems(editorParams.values || [], initialValue);
+               // }
+
+               input.addEventListener("search", function (e) {
+                       if (!input.value) {
+                               unsetItems();
+                               chooseItems();
+                       }
+               });
+
+               //allow key based navigation
+               input.addEventListener("keydown", function (e) {
+                       var index;
+
+                       switch (e.keyCode) {
+                               case 38:
+                                       //up arrow
+                                       index = dataItems.indexOf(currentItem);
+
+                                       if (vertNav == "editor" || vertNav == "hybrid" && index) {
+                                               e.stopImmediatePropagation();
+                                               e.stopPropagation();
+                                               e.preventDefault();
+
+                                               if (index > 0) {
+                                                       setCurrentItem(dataItems[index - 1], !multiselect);
+                                               }
+                                       }
+                                       break;
+
+                               case 40:
+                                       //down arrow
+                                       index = dataItems.indexOf(currentItem);
+
+                                       if (vertNav == "editor" || vertNav == "hybrid" && index < dataItems.length - 1) {
+                                               e.stopImmediatePropagation();
+                                               e.stopPropagation();
+                                               e.preventDefault();
+
+                                               if (index < dataItems.length - 1) {
+                                                       if (index == -1) {
+                                                               setCurrentItem(dataItems[0], !multiselect);
+                                                       } else {
+                                                               setCurrentItem(dataItems[index + 1], !multiselect);
+                                                       }
+                                               }
+                                       }
+                                       break;
+
+                               case 37: //left arrow
+                               case 39:
+                                       //right arrow
+                                       e.stopImmediatePropagation();
+                                       e.stopPropagation();
+                                       e.preventDefault();
+                                       break;
+
+                               case 13:
+                                       //enter
+                                       // chooseItem();
+
+                                       if (multiselect) {
+                                               toggleItem();
+                                       } else {
+                                               chooseItem();
+                                       }
+
+                                       break;
+
+                               case 27:
+                                       //escape
+                                       cancelItem();
+                                       break;
+
+                               case 9:
+                                       //tab
+                                       break;
+
+                               default:
+                                       if (self.currentCell === false) {
+                                               e.preventDefault();
+                                       }
+                       }
+               });
+
+               input.addEventListener("blur", function (e) {
+                       if (blurable) {
+                               if (multiselect) {
+                                       chooseItems();
+                               } else {
+                                       cancelItem();
+                               }
+                       }
+               });
+
+               input.addEventListener("focus", function (e) {
+                       if (!blockListShow) {
+                               showList();
+                       }
+               });
+
+               //style list element
+               listEl = document.createElement("div");
+               listEl.classList.add("tabulator-edit-select-list");
+
+               onRendered(function () {
+                       input.style.height = "100%";
+                       input.focus({ preventScroll: true });
+               });
+
+               setTimeout(function () {
+                       _this53.table.rowManager.element.addEventListener("scroll", cancelItem);
+               }, 10);
+
+               return input;
+       },
+
+       //autocomplete
+       autocomplete: function autocomplete(cell, onRendered, success, cancel, editorParams) {
+               var _this54 = this;
+
+               var self = this,
+                   cellEl = cell.getElement(),
+                   initialValue = cell.getValue(),
+                   vertNav = editorParams.verticalNavigation || "editor",
+                   initialDisplayValue = typeof initialValue !== "undefined" || initialValue === null ? initialValue : typeof editorParams.defaultValue !== "undefined" ? editorParams.defaultValue : "",
+                   input = document.createElement("input"),
+                   listEl = document.createElement("div"),
+                   allItems = [],
+                   displayItems = [],
+                   values = [],
+                   currentItem = false,
+                   blurable = true,
+                   uniqueColumnValues = false;
+
+               //style input
+               input.setAttribute("type", "search");
+
+               input.style.padding = "4px";
+               input.style.width = "100%";
+               input.style.boxSizing = "border-box";
+
+               if (editorParams.elementAttributes && _typeof(editorParams.elementAttributes) == "object") {
+                       for (var key in editorParams.elementAttributes) {
+                               if (key.charAt(0) == "+") {
+                                       key = key.slice(1);
+                                       input.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes["+" + key]);
+                               } else {
+                                       input.setAttribute(key, editorParams.elementAttributes[key]);
+                               }
+                       }
+               }
+
+               //style list element
+               listEl.classList.add("tabulator-edit-select-list");
+
+               listEl.addEventListener("mousedown", function (e) {
+                       blurable = false;
+
+                       setTimeout(function () {
+                               blurable = true;
+                       }, 10);
+               });
+
+               function genUniqueColumnValues() {
+                       if (editorParams.values === true) {
+                               uniqueColumnValues = getUniqueColumnValues();
+                       } else if (typeof editorParams.values === "string") {
+                               uniqueColumnValues = getUniqueColumnValues(editorParams.values);
+                       }
+               }
+
+               function getUniqueColumnValues(field) {
+                       var output = {},
+                           data = self.table.getData(),
+                           column;
+
+                       if (field) {
+                               column = self.table.columnManager.getColumnByField(field);
+                       } else {
+                               column = cell.getColumn()._getSelf();
+                       }
+
+                       if (column) {
+                               data.forEach(function (row) {
+                                       var val = column.getFieldValue(row);
+
+                                       if (val !== null && typeof val !== "undefined" && val !== "") {
+                                               output[val] = true;
+                                       }
+                               });
+
+                               if (editorParams.sortValuesList) {
+                                       if (editorParams.sortValuesList == "asc") {
+                                               output = Object.keys(output).sort();
+                                       } else {
+                                               output = Object.keys(output).sort().reverse();
+                                       }
+                               } else {
+                                       output = Object.keys(output);
+                               }
+                       } else {
+                               console.warn("unable to find matching column to create autocomplete lookup list:", field);
+                       }
+
+                       return output;
+               }
+
+               function filterList(term, intialLoad) {
+                       var matches = [],
+                           values,
+                           items,
+                           searchEl;
+
+                       //lookup base values list
+                       if (uniqueColumnValues) {
+                               values = uniqueColumnValues;
+                       } else {
+                               values = editorParams.values || [];
+                       }
+
+                       if (editorParams.searchFunc) {
+                               matches = editorParams.searchFunc(term, values);
+
+                               if (matches instanceof Promise) {
+
+                                       addNotice(typeof editorParams.searchingPlaceholder !== "undefined" ? editorParams.searchingPlaceholder : "Searching...");
+
+                                       matches.then(function (result) {
+                                               fillListIfNotEmpty(parseItems(result), intialLoad);
+                                       }).catch(function (err) {
+                                               console.err("error in autocomplete search promise:", err);
+                                       });
+                               } else {
+                                       fillListIfNotEmpty(parseItems(matches), intialLoad);
+                               }
+                       } else {
+                               items = parseItems(values);
+
+                               if (term === "") {
+                                       if (editorParams.showListOnEmpty) {
+                                               matches = items;
+                                       }
+                               } else {
+                                       items.forEach(function (item) {
+                                               if (item.value !== null || typeof item.value !== "undefined") {
+                                                       if (String(item.value).toLowerCase().indexOf(String(term).toLowerCase()) > -1 || String(item.title).toLowerCase().indexOf(String(term).toLowerCase()) > -1) {
+                                                               matches.push(item);
+                                                       }
+                                               }
+                                       });
+                               }
+
+                               fillListIfNotEmpty(matches, intialLoad);
+                       }
+               }
+
+               function addNotice(notice) {
+                       var searchEl = document.createElement("div");
+
+                       clearList();
+
+                       if (notice !== false) {
+                               searchEl.classList.add("tabulator-edit-select-list-notice");
+                               searchEl.tabIndex = 0;
+
+                               if (notice instanceof Node) {
+                                       searchEl.appendChild(notice);
+                               } else {
+                                       searchEl.innerHTML = notice;
+                               }
+
+                               listEl.appendChild(searchEl);
+                       }
+               }
+
+               function parseItems(inputValues) {
+                       var itemList = [];
+
+                       if (Array.isArray(inputValues)) {
+                               inputValues.forEach(function (value) {
+
+                                       var item = {};
+
+                                       if ((typeof value === 'undefined' ? 'undefined' : _typeof(value)) === "object") {
+                                               item.title = editorParams.listItemFormatter ? editorParams.listItemFormatter(value.value, value.label) : value.label;
+                                               item.value = value.value;
+                                       } else {
+                                               item.title = editorParams.listItemFormatter ? editorParams.listItemFormatter(value, value) : value;
+                                               item.value = value;
+                                       }
+
+                                       itemList.push(item);
+                               });
+                       } else {
+                               for (var key in inputValues) {
+                                       var item = {
+                                               title: editorParams.listItemFormatter ? editorParams.listItemFormatter(key, inputValues[key]) : inputValues[key],
+                                               value: key
+                                       };
+
+                                       itemList.push(item);
+                               }
+                       }
+
+                       return itemList;
+               }
+
+               function clearList() {
+                       while (listEl.firstChild) {
+                               listEl.removeChild(listEl.firstChild);
+                       }
+               }
+
+               function fillListIfNotEmpty(items, intialLoad) {
+                       if (items.length) {
+                               fillList(items, intialLoad);
+                       } else {
+                               if (editorParams.emptyPlaceholder) {
+                                       addNotice(editorParams.emptyPlaceholder);
+                               }
+                       }
+               }
+
+               function fillList(items, intialLoad) {
+                       var current = false;
+
+                       clearList();
+
+                       displayItems = items;
+
+                       displayItems.forEach(function (item) {
+                               var el = item.element;
+
+                               if (!el) {
+                                       el = document.createElement("div");
+                                       el.classList.add("tabulator-edit-select-list-item");
+                                       el.tabIndex = 0;
+                                       el.innerHTML = item.title;
+
+                                       el.addEventListener("click", function (e) {
+                                               setCurrentItem(item);
+                                               chooseItem();
+                                       });
+
+                                       el.addEventListener("mousedown", function (e) {
+                                               blurable = false;
+
+                                               setTimeout(function () {
+                                                       blurable = true;
+                                               }, 10);
+                                       });
+
+                                       item.element = el;
+
+                                       if (intialLoad && item.value == initialValue) {
+                                               input.value = item.title;
+                                               item.element.classList.add("active");
+                                               current = true;
+                                       }
+
+                                       if (item === currentItem) {
+                                               item.element.classList.add("active");
+                                               current = true;
+                                       }
+                               }
+
+                               listEl.appendChild(el);
+                       });
+
+                       if (!current) {
+                               setCurrentItem(false);
+                       }
+               }
+
+               function chooseItem() {
+                       hideList();
+
+                       if (currentItem) {
+                               if (initialValue !== currentItem.value) {
+                                       initialValue = currentItem.value;
+                                       input.value = currentItem.title;
+                                       success(currentItem.value);
+                               } else {
+                                       cancel();
+                               }
+                       } else {
+                               if (editorParams.freetext) {
+                                       initialValue = input.value;
+                                       success(input.value);
+                               } else {
+                                       if (editorParams.allowEmpty && input.value === "") {
+                                               initialValue = input.value;
+                                               success(input.value);
+                                       } else {
+                                               cancel();
+                                       }
+                               }
+                       }
+               }
+
+               function showList() {
+                       if (!listEl.parentNode) {
+                               while (listEl.firstChild) {
+                                       listEl.removeChild(listEl.firstChild);
+                               }var offset = Tabulator.prototype.helpers.elOffset(cellEl);
+
+                               listEl.style.minWidth = cellEl.offsetWidth + "px";
+
+                               listEl.style.top = offset.top + cellEl.offsetHeight + "px";
+                               listEl.style.left = offset.left + "px";
+                               document.body.appendChild(listEl);
+                       }
+               }
+
+               function setCurrentItem(item, showInputValue) {
+                       if (currentItem && currentItem.element) {
+                               currentItem.element.classList.remove("active");
+                       }
+
+                       currentItem = item;
+
+                       if (item && item.element) {
+                               item.element.classList.add("active");
+                       }
+
+                       if (item && item.element && item.element.scrollIntoView) {
+                               item.element.scrollIntoView({ behavior: 'smooth', block: 'nearest', inline: 'start' });
+                       }
+               }
+
+               function hideList() {
+                       if (listEl.parentNode) {
+                               listEl.parentNode.removeChild(listEl);
+                       }
+
+                       removeScrollListener();
+               }
+
+               function cancelItem() {
+                       hideList();
+                       cancel();
+               }
+
+               function removeScrollListener() {
+                       self.table.rowManager.element.removeEventListener("scroll", cancelItem);
+               }
+
+               //allow key based navigation
+               input.addEventListener("keydown", function (e) {
+                       var index;
+
+                       switch (e.keyCode) {
+                               case 38:
+                                       //up arrow
+                                       index = displayItems.indexOf(currentItem);
+
+                                       if (vertNav == "editor" || vertNav == "hybrid" && index) {
+                                               e.stopImmediatePropagation();
+                                               e.stopPropagation();
+                                               e.preventDefault();
+
+                                               if (index > 0) {
+                                                       setCurrentItem(displayItems[index - 1]);
+                                               } else {
+                                                       setCurrentItem(false);
+                                               }
+                                       }
+                                       break;
+
+                               case 40:
+                                       //down arrow
+
+                                       index = displayItems.indexOf(currentItem);
+
+                                       if (vertNav == "editor" || vertNav == "hybrid" && index < displayItems.length - 1) {
+
+                                               e.stopImmediatePropagation();
+                                               e.stopPropagation();
+                                               e.preventDefault();
+
+                                               if (index < displayItems.length - 1) {
+                                                       if (index == -1) {
+                                                               setCurrentItem(displayItems[0]);
+                                                       } else {
+                                                               setCurrentItem(displayItems[index + 1]);
+                                                       }
+                                               }
+                                       }
+                                       break;
+
+                               case 37: //left arrow
+                               case 39:
+                                       //right arrow
+                                       e.stopImmediatePropagation();
+                                       e.stopPropagation();
+                                       // e.preventDefault();
+                                       break;
+
+                               case 13:
+                                       //enter
+                                       chooseItem();
+                                       break;
+
+                               case 27:
+                                       //escape
+                                       cancelItem();
+                                       break;
+
+                               case 36: //home
+                               case 35:
+                                       //end
+                                       //prevent table navigation while using input element
+                                       e.stopImmediatePropagation();
+                                       break;
+                       }
+               });
+
+               input.addEventListener("keyup", function (e) {
+
+                       switch (e.keyCode) {
+                               case 38: //up arrow
+                               case 37: //left arrow
+                               case 39: //up arrow
+                               case 40: //right arrow
+                               case 13: //enter
+                               case 27:
+                                       //escape
+                                       break;
+
+                               default:
+                                       filterList(input.value);
+                       }
+               });
+
+               input.addEventListener("search", function (e) {
+                       filterList(input.value);
+               });
+
+               input.addEventListener("blur", function (e) {
+                       if (blurable) {
+                               chooseItem();
+                       }
+               });
+
+               input.addEventListener("focus", function (e) {
+                       var value = initialDisplayValue;
+                       genUniqueColumnValues();
+                       showList();
+                       input.value = value;
+                       filterList(value, true);
+               });
+
+               onRendered(function () {
+                       input.style.height = "100%";
+                       input.focus({ preventScroll: true });
+               });
+
+               if (editorParams.mask) {
+                       this.table.modules.edit.maskInput(input, editorParams);
+               }
+
+               setTimeout(function () {
+                       _this54.table.rowManager.element.addEventListener("scroll", cancelItem);
+               }, 10);
+
+               genUniqueColumnValues();
+               input.value = initialDisplayValue;
+               filterList(initialDisplayValue, true);
+
+               return input;
+       },
+
+       //star rating
+       star: function star(cell, onRendered, success, cancel, editorParams) {
+               var self = this,
+                   element = cell.getElement(),
+                   value = cell.getValue(),
+                   maxStars = element.getElementsByTagName("svg").length || 5,
+                   size = element.getElementsByTagName("svg")[0] ? element.getElementsByTagName("svg")[0].getAttribute("width") : 14,
+                   stars = [],
+                   starsHolder = document.createElement("div"),
+                   star = document.createElementNS('http://www.w3.org/2000/svg', "svg");
+
+               //change star type
+               function starChange(val) {
+                       stars.forEach(function (star, i) {
+                               if (i < val) {
+                                       if (self.table.browser == "ie") {
+                                               star.setAttribute("class", "tabulator-star-active");
+                                       } else {
+                                               star.classList.replace("tabulator-star-inactive", "tabulator-star-active");
+                                       }
+
+                                       star.innerHTML = '<polygon fill="#488CE9" stroke="#014AAE" stroke-width="37.6152" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" points="259.216,29.942 330.27,173.919 489.16,197.007 374.185,309.08 401.33,467.31 259.216,392.612 117.104,467.31 144.25,309.08 29.274,197.007 188.165,173.919 "/>';
+                               } else {
+                                       if (self.table.browser == "ie") {
+                                               star.setAttribute("class", "tabulator-star-inactive");
+                                       } else {
+                                               star.classList.replace("tabulator-star-active", "tabulator-star-inactive");
+                                       }
+
+                                       star.innerHTML = '<polygon fill="#010155" stroke="#686868" stroke-width="37.6152" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" points="259.216,29.942 330.27,173.919 489.16,197.007 374.185,309.08 401.33,467.31 259.216,392.612 117.104,467.31 144.25,309.08 29.274,197.007 188.165,173.919 "/>';
+                               }
+                       });
+               }
+
+               //build stars
+               function buildStar(i) {
+
+                       var starHolder = document.createElement("span");
+                       var nextStar = star.cloneNode(true);
+
+                       stars.push(nextStar);
+
+                       starHolder.addEventListener("mouseenter", function (e) {
+                               e.stopPropagation();
+                               e.stopImmediatePropagation();
+                               starChange(i);
+                       });
+
+                       starHolder.addEventListener("mousemove", function (e) {
+                               e.stopPropagation();
+                               e.stopImmediatePropagation();
+                       });
+
+                       starHolder.addEventListener("click", function (e) {
+                               e.stopPropagation();
+                               e.stopImmediatePropagation();
+                               success(i);
+                               element.blur();
+                       });
+
+                       starHolder.appendChild(nextStar);
+                       starsHolder.appendChild(starHolder);
+               }
+
+               //handle keyboard navigation value change
+               function changeValue(val) {
+                       value = val;
+                       starChange(val);
+               }
+
+               //style cell
+               element.style.whiteSpace = "nowrap";
+               element.style.overflow = "hidden";
+               element.style.textOverflow = "ellipsis";
+
+               //style holding element
+               starsHolder.style.verticalAlign = "middle";
+               starsHolder.style.display = "inline-block";
+               starsHolder.style.padding = "4px";
+
+               //style star
+               star.setAttribute("width", size);
+               star.setAttribute("height", size);
+               star.setAttribute("viewBox", "0 0 512 512");
+               star.setAttribute("xml:space", "preserve");
+               star.style.padding = "0 1px";
+
+               if (editorParams.elementAttributes && _typeof(editorParams.elementAttributes) == "object") {
+                       for (var key in editorParams.elementAttributes) {
+                               if (key.charAt(0) == "+") {
+                                       key = key.slice(1);
+                                       starsHolder.setAttribute(key, starsHolder.getAttribute(key) + editorParams.elementAttributes["+" + key]);
+                               } else {
+                                       starsHolder.setAttribute(key, editorParams.elementAttributes[key]);
+                               }
+                       }
+               }
+
+               //create correct number of stars
+               for (var i = 1; i <= maxStars; i++) {
+                       buildStar(i);
+               }
+
+               //ensure value does not exceed number of stars
+               value = Math.min(parseInt(value), maxStars);
+
+               // set initial styling of stars
+               starChange(value);
+
+               starsHolder.addEventListener("mousemove", function (e) {
+                       starChange(0);
+               });
+
+               starsHolder.addEventListener("click", function (e) {
+                       success(0);
+               });
+
+               element.addEventListener("blur", function (e) {
+                       cancel();
+               });
+
+               //allow key based navigation
+               element.addEventListener("keydown", function (e) {
+                       switch (e.keyCode) {
+                               case 39:
+                                       //right arrow
+                                       changeValue(value + 1);
+                                       break;
+
+                               case 37:
+                                       //left arrow
+                                       changeValue(value - 1);
+                                       break;
+
+                               case 13:
+                                       //enter
+                                       success(value);
+                                       break;
+
+                               case 27:
+                                       //escape
+                                       cancel();
+                                       break;
+                       }
+               });
+
+               return starsHolder;
+       },
+
+       //draggable progress bar
+       progress: function progress(cell, onRendered, success, cancel, editorParams) {
+               var element = cell.getElement(),
+                   max = typeof editorParams.max === "undefined" ? element.getElementsByTagName("div")[0].getAttribute("max") || 100 : editorParams.max,
+                   min = typeof editorParams.min === "undefined" ? element.getElementsByTagName("div")[0].getAttribute("min") || 0 : editorParams.min,
+                   percent = (max - min) / 100,
+                   value = cell.getValue() || 0,
+                   handle = document.createElement("div"),
+                   bar = document.createElement("div"),
+                   mouseDrag,
+                   mouseDragWidth;
+
+               //set new value
+               function updateValue() {
+                       var calcVal = percent * Math.round(bar.offsetWidth / (element.clientWidth / 100)) + min;
+                       success(calcVal);
+                       element.setAttribute("aria-valuenow", calcVal);
+                       element.setAttribute("aria-label", value);
+               }
+
+               //style handle
+               handle.style.position = "absolute";
+               handle.style.right = "0";
+               handle.style.top = "0";
+               handle.style.bottom = "0";
+               handle.style.width = "5px";
+               handle.classList.add("tabulator-progress-handle");
+
+               //style bar
+               bar.style.display = "inline-block";
+               bar.style.position = "relative";
+               // bar.style.top = "8px";
+               // bar.style.bottom = "8px";
+               // bar.style.left = "4px";
+               // bar.style.marginRight = "4px";
+               bar.style.height = "100%";
+               bar.style.backgroundColor = "#488CE9";
+               bar.style.maxWidth = "100%";
+               bar.style.minWidth = "0%";
+
+               if (editorParams.elementAttributes && _typeof(editorParams.elementAttributes) == "object") {
+                       for (var key in editorParams.elementAttributes) {
+                               if (key.charAt(0) == "+") {
+                                       key = key.slice(1);
+                                       bar.setAttribute(key, bar.getAttribute(key) + editorParams.elementAttributes["+" + key]);
+                               } else {
+                                       bar.setAttribute(key, editorParams.elementAttributes[key]);
+                               }
+                       }
+               }
+
+               //style cell
+               element.style.padding = "4px 4px";
+
+               //make sure value is in range
+               value = Math.min(parseFloat(value), max);
+               value = Math.max(parseFloat(value), min);
+
+               //workout percentage
+               value = Math.round((value - min) / percent);
+               // bar.style.right = value + "%";
+               bar.style.width = value + "%";
+
+               element.setAttribute("aria-valuemin", min);
+               element.setAttribute("aria-valuemax", max);
+
+               bar.appendChild(handle);
+
+               handle.addEventListener("mousedown", function (e) {
+                       mouseDrag = e.screenX;
+                       mouseDragWidth = bar.offsetWidth;
+               });
+
+               handle.addEventListener("mouseover", function () {
+                       handle.style.cursor = "ew-resize";
+               });
+
+               element.addEventListener("mousemove", function (e) {
+                       if (mouseDrag) {
+                               bar.style.width = mouseDragWidth + e.screenX - mouseDrag + "px";
+                       }
+               });
+
+               element.addEventListener("mouseup", function (e) {
+                       if (mouseDrag) {
+                               e.stopPropagation();
+                               e.stopImmediatePropagation();
+
+                               mouseDrag = false;
+                               mouseDragWidth = false;
+
+                               updateValue();
+                       }
+               });
+
+               //allow key based navigation
+               element.addEventListener("keydown", function (e) {
+                       switch (e.keyCode) {
+                               case 39:
+                                       //right arrow
+                                       e.preventDefault();
+                                       bar.style.width = bar.clientWidth + element.clientWidth / 100 + "px";
+                                       break;
+
+                               case 37:
+                                       //left arrow
+                                       e.preventDefault();
+                                       bar.style.width = bar.clientWidth - element.clientWidth / 100 + "px";
+                                       break;
+
+                               case 9: //tab
+                               case 13:
+                                       //enter
+                                       updateValue();
+                                       break;
+
+                               case 27:
+                                       //escape
+                                       cancel();
+                                       break;
+
+                       }
+               });
+
+               element.addEventListener("blur", function () {
+                       cancel();
+               });
+
+               return bar;
+       },
+
+       //checkbox
+       tickCross: function tickCross(cell, onRendered, success, cancel, editorParams) {
+               var value = cell.getValue(),
+                   input = document.createElement("input"),
+                   tristate = editorParams.tristate,
+                   indetermValue = typeof editorParams.indeterminateValue === "undefined" ? null : editorParams.indeterminateValue,
+                   indetermState = false;
+
+               input.setAttribute("type", "checkbox");
+               input.style.marginTop = "5px";
+               input.style.boxSizing = "border-box";
+
+               if (editorParams.elementAttributes && _typeof(editorParams.elementAttributes) == "object") {
+                       for (var key in editorParams.elementAttributes) {
+                               if (key.charAt(0) == "+") {
+                                       key = key.slice(1);
+                                       input.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes["+" + key]);
+                               } else {
+                                       input.setAttribute(key, editorParams.elementAttributes[key]);
+                               }
+                       }
+               }
+
+               input.value = value;
+
+               if (tristate && (typeof value === "undefined" || value === indetermValue || value === "")) {
+                       indetermState = true;
+                       input.indeterminate = true;
+               }
+
+               if (this.table.browser != "firefox") {
+                       //prevent blur issue on mac firefox
+                       onRendered(function () {
+                               input.focus({ preventScroll: true });
+                       });
+               }
+
+               input.checked = value === true || value === "true" || value === "True" || value === 1;
+
+               onRendered(function () {
+                       input.focus();
+               });
+
+               function setValue(blur) {
+                       if (tristate) {
+                               if (!blur) {
+                                       if (input.checked && !indetermState) {
+                                               input.checked = false;
+                                               input.indeterminate = true;
+                                               indetermState = true;
+                                               return indetermValue;
+                                       } else {
+                                               indetermState = false;
+                                               return input.checked;
+                                       }
+                               } else {
+                                       if (indetermState) {
+                                               return indetermValue;
+                                       } else {
+                                               return input.checked;
+                                       }
+                               }
+                       } else {
+                               return input.checked;
+                       }
+               }
+
+               //submit new value on blur
+               input.addEventListener("change", function (e) {
+                       success(setValue());
+               });
+
+               input.addEventListener("blur", function (e) {
+                       success(setValue(true));
+               });
+
+               //submit new value on enter
+               input.addEventListener("keydown", function (e) {
+                       if (e.keyCode == 13) {
+                               success(setValue());
+                       }
+                       if (e.keyCode == 27) {
+                               cancel();
+                       }
+               });
+
+               return input;
+       }
+};
+
+Tabulator.prototype.registerModule("edit", Edit);
+
+var ExportRow = function ExportRow(type, columns, component, indent) {
+       this.type = type;
+       this.columns = columns;
+       this.component = component || false;
+       this.indent = indent || 0;
+};
+
+var ExportColumn = function ExportColumn(value, component, width, height, depth) {
+       this.value = value;
+       this.component = component || false;
+       this.width = width;
+       this.height = height;
+       this.depth = depth;
+};
+
+var Export = function Export(table) {
+       this.table = table; //hold Tabulator object
+       this.config = {};
+       this.cloneTableStyle = true;
+       this.colVisProp = "";
+};
+
+Export.prototype.generateExportList = function (config, style, range, colVisProp) {
+       this.cloneTableStyle = style;
+       this.config = config || {};
+       this.colVisProp = colVisProp;
+
+       var headers = this.config.columnHeaders !== false ? this.headersToExportRows(this.generateColumnGroupHeaders()) : [];
+       var body = this.bodyToExportRows(this.rowLookup(range));
+
+       return headers.concat(body);
+};
+
+Export.prototype.genereateTable = function (config, style, range, colVisProp) {
+       var list = this.generateExportList(config, style, range, colVisProp);
+
+       return this.genereateTableElement(list);
+};
+
+Export.prototype.rowLookup = function (range) {
+       var _this55 = this;
+
+       var rows = [];
+
+       if (typeof range == "function") {
+               range.call(this.table).forEach(function (row) {
+                       row = _this55.table.rowManager.findRow(row);
+
+                       if (row) {
+                               rows.push(row);
+                       }
+               });
+       } else {
+               switch (range) {
+                       case true:
+                       case "visible":
+                               rows = this.table.rowManager.getVisibleRows(true);
+                               break;
+
+                       case "all":
+                               rows = this.table.rowManager.rows;
+                               break;
+
+                       case "selected":
+                               rows = this.table.modules.selectRow.selectedRows;
+                               break;
+
+                       case "active":
+                       default:
+                               if (this.table.options.pagination) {
+                                       rows = this.table.rowManager.getDisplayRows(this.table.rowManager.displayRows.length - 2);
+                               } else {
+                                       rows = this.table.rowManager.getDisplayRows();
+                               }
+               }
+       }
+
+       return Object.assign([], rows);
+};
+
+Export.prototype.generateColumnGroupHeaders = function () {
+       var _this56 = this;
+
+       var output = [];
+
+       var columns = this.config.columnGroups !== false ? this.table.columnManager.columns : this.table.columnManager.columnsByIndex;
+
+       columns.forEach(function (column) {
+               var colData = _this56.processColumnGroup(column);
+
+               if (colData) {
+                       output.push(colData);
+               }
+       });
+
+       return output;
+};
+
+Export.prototype.processColumnGroup = function (column) {
+       var _this57 = this;
+
+       var subGroups = column.columns,
+           maxDepth = 0,
+           title = column.definition["title" + (this.colVisProp.charAt(0).toUpperCase() + this.colVisProp.slice(1))] || column.definition.title;
+
+       var groupData = {
+               title: title,
+               column: column,
+               depth: 1
+       };
+
+       if (subGroups.length) {
+               groupData.subGroups = [];
+               groupData.width = 0;
+
+               subGroups.forEach(function (subGroup) {
+                       var subGroupData = _this57.processColumnGroup(subGroup);
+
+                       if (subGroupData) {
+                               groupData.width += subGroupData.width;
+                               groupData.subGroups.push(subGroupData);
+
+                               if (subGroupData.depth > maxDepth) {
+                                       maxDepth = subGroupData.depth;
+                               }
+                       }
+               });
+
+               groupData.depth += maxDepth;
+
+               if (!groupData.width) {
+                       return false;
+               }
+       } else {
+               if (this.columnVisCheck(column)) {
+                       groupData.width = 1;
+               } else {
+                       return false;
+               }
+       }
+
+       return groupData;
+};
+
+Export.prototype.columnVisCheck = function (column) {
+       return column.definition[this.colVisProp] !== false && (column.visible || !column.visible && column.definition[this.colVisProp]);
+};
+
+Export.prototype.headersToExportRows = function (columns) {
+       var headers = [],
+           headerDepth = 0,
+           exportRows = [];
+
+       function parseColumnGroup(column, level) {
+
+               var depth = headerDepth - level;
+
+               if (typeof headers[level] === "undefined") {
+                       headers[level] = [];
+               }
+
+               column.height = column.subGroups ? 1 : depth - column.depth + 1;
+
+               headers[level].push(column);
+
+               if (column.height > 1) {
+                       for (var _i10 = 1; _i10 < column.height; _i10++) {
+
+                               if (typeof headers[level + _i10] === "undefined") {
+                                       headers[level + _i10] = [];
+                               }
+
+                               headers[level + _i10].push(false);
+                       }
+               }
+
+               if (column.width > 1) {
+                       for (var _i11 = 1; _i11 < column.width; _i11++) {
+                               headers[level].push(false);
+                       }
+               }
+
+               if (column.subGroups) {
+                       column.subGroups.forEach(function (subGroup) {
+                               parseColumnGroup(subGroup, level + 1);
+                       });
+               }
+       }
+
+       //calculate maximum header debth
+       columns.forEach(function (column) {
+               if (column.depth > headerDepth) {
+                       headerDepth = column.depth;
+               }
+       });
+
+       columns.forEach(function (column) {
+               parseColumnGroup(column, 0);
+       });
+
+       headers.forEach(function (header) {
+               var columns = [];
+
+               header.forEach(function (col) {
+                       if (col) {
+                               columns.push(new ExportColumn(col.title, col.column.getComponent(), col.width, col.height, col.depth));
+                       } else {
+                               columns.push(null);
+                       }
+               });
+
+               exportRows.push(new ExportRow("header", columns));
+       });
+
+       return exportRows;
+};
+
+Export.prototype.bodyToExportRows = function (rows) {
+       var _this58 = this;
+
+       var columns = [];
+       var exportRows = [];
+
+       this.table.columnManager.columnsByIndex.forEach(function (column) {
+               if (_this58.columnVisCheck(column)) {
+                       columns.push(column.getComponent());
+               }
+       });
+
+       if (this.config.columnCalcs !== false && this.table.modExists("columnCalcs")) {
+               if (this.table.modules.columnCalcs.topInitialized) {
+                       rows.unshift(this.table.modules.columnCalcs.topRow);
+               }
+
+               if (this.table.modules.columnCalcs.botInitialized) {
+                       rows.push(this.table.modules.columnCalcs.botRow);
+               }
+       }
+
+       rows = rows.filter(function (row) {
+               switch (row.type) {
+                       case "group":
+                               return _this58.config.rowGroups !== false;
+                               break;
+
+                       case "calc":
+                               return _this58.config.columnCalcs !== false;
+                               break;
+
+                       case "row":
+                               return !(_this58.table.options.dataTree && _this58.config.dataTree === false && row.modules.dataTree.parent);
+                               break;
+               }
+
+               return true;
+       });
+
+       rows.forEach(function (row, i) {
+               var rowData = row.getData(_this58.colVisProp);
+               var exportCols = [];
+               var indent = 0;
+
+               switch (row.type) {
+                       case "group":
+                               indent = row.level;
+                               exportCols.push(new ExportColumn(row.key, row.getComponent(), columns.length, 1));
+                               break;
+
+                       case "calc":
+                       case "row":
+                               columns.forEach(function (col) {
+                                       exportCols.push(new ExportColumn(col._column.getFieldValue(rowData), col, 1, 1));
+                               });
+
+                               if (_this58.table.options.dataTree && _this58.config.dataTree !== false) {
+                                       indent = row.modules.dataTree.index;
+                               }
+                               break;
+               }
+
+               exportRows.push(new ExportRow(row.type, exportCols, row.getComponent(), indent));
+       });
+
+       return exportRows;
+};
+
+Export.prototype.genereateTableElement = function (list) {
+       var _this59 = this;
+
+       var table = document.createElement("table"),
+           headerEl = document.createElement("thead"),
+           bodyEl = document.createElement("tbody"),
+           styles = this.lookupTableStyles(),
+           rowFormatter = this.table.options["rowFormatter" + (this.colVisProp.charAt(0).toUpperCase() + this.colVisProp.slice(1))],
+           setup = {};
+
+       setup.rowFormatter = rowFormatter !== null ? rowFormatter : this.table.options.rowFormatter;
+
+       if (this.table.options.dataTree && this.config.dataTree !== false && this.table.modExists("columnCalcs")) {
+               setup.treeElementField = this.table.modules.dataTree.elementField;
+       }
+
+       //assign group header formatter
+       setup.groupHeader = this.table.options["groupHeader" + (this.colVisProp.charAt(0).toUpperCase() + this.colVisProp.slice(1))];
+
+       if (setup.groupHeader && !Array.isArray(setup.groupHeader)) {
+               setup.groupHeader = [setup.groupHeader];
+       }
+
+       table.classList.add("tabulator-print-table");
+
+       this.mapElementStyles(this.table.columnManager.getHeadersElement(), headerEl, ["border-top", "border-left", "border-right", "border-bottom", "background-color", "color", "font-weight", "font-family", "font-size"]);
+
+       if (list.length > 1000) {
+               console.warn("It may take a long time to render an HTML table with more than 1000 rows");
+       }
+
+       list.forEach(function (row, i) {
+               switch (row.type) {
+                       case "header":
+                               headerEl.appendChild(_this59.genereateHeaderElement(row, setup, styles));
+                               break;
+
+                       case "group":
+                               bodyEl.appendChild(_this59.genereateGroupElement(row, setup, styles));
+                               break;
+
+                       case "calc":
+                               bodyEl.appendChild(_this59.genereateCalcElement(row, setup, styles));
+                               break;
+
+                       case "row":
+                               var rowEl = _this59.genereateRowElement(row, setup, styles);
+                               _this59.mapElementStyles(i % 2 && styles.evenRow ? styles.evenRow : styles.oddRow, rowEl, ["border-top", "border-left", "border-right", "border-bottom", "color", "font-weight", "font-family", "font-size", "background-color"]);
+                               bodyEl.appendChild(rowEl);
+                               break;
+               }
+       });
+
+       if (headerEl.innerHTML) {
+               table.appendChild(headerEl);
+       }
+
+       table.appendChild(bodyEl);
+
+       this.mapElementStyles(this.table.element, table, ["border-top", "border-left", "border-right", "border-bottom"]);
+       return table;
+};
+
+Export.prototype.lookupTableStyles = function () {
+       var styles = {};
+
+       //lookup row styles
+       if (this.cloneTableStyle && window.getComputedStyle) {
+               styles.oddRow = this.table.element.querySelector(".tabulator-row-odd:not(.tabulator-group):not(.tabulator-calcs)");
+               styles.evenRow = this.table.element.querySelector(".tabulator-row-even:not(.tabulator-group):not(.tabulator-calcs)");
+               styles.calcRow = this.table.element.querySelector(".tabulator-row.tabulator-calcs");
+               styles.firstRow = this.table.element.querySelector(".tabulator-row:not(.tabulator-group):not(.tabulator-calcs)");
+               styles.firstGroup = this.table.element.getElementsByClassName("tabulator-group")[0];
+
+               if (styles.firstRow) {
+                       styles.styleCells = styles.firstRow.getElementsByClassName("tabulator-cell");
+                       styles.firstCell = styles.styleCells[0];
+                       styles.lastCell = styles.styleCells[styles.styleCells.length - 1];
+               }
+       }
+
+       return styles;
+};
+
+Export.prototype.genereateHeaderElement = function (row, setup, styles) {
+       var _this60 = this;
+
+       var rowEl = document.createElement("tr");
+
+       row.columns.forEach(function (column) {
+               if (column) {
+                       var cellEl = document.createElement("th");
+                       var classNames = column.component._column.definition.cssClass ? column.component._column.definition.cssClass.split(" ") : [];
+
+                       cellEl.colSpan = column.width;
+                       cellEl.rowSpan = column.height;
+
+                       cellEl.innerHTML = column.value;
+
+                       if (_this60.cloneTableStyle) {
+                               cellEl.style.boxSizing = "border-box";
+                       }
+
+                       classNames.forEach(function (className) {
+                               cellEl.classList.add(className);
+                       });
+
+                       _this60.mapElementStyles(column.component.getElement(), cellEl, ["text-align", "border-top", "border-left", "border-right", "border-bottom", "background-color", "color", "font-weight", "font-family", "font-size"]);
+                       _this60.mapElementStyles(column.component._column.contentElement, cellEl, ["padding-top", "padding-left", "padding-right", "padding-bottom"]);
+
+                       if (column.component._column.visible) {
+                               _this60.mapElementStyles(column.component.getElement(), cellEl, ["width"]);
+                       } else {
+                               if (column.component._column.definition.width) {
+                                       cellEl.style.width = column.component._column.definition.width + "px";
+                               }
+                       }
+
+                       if (column.component._column.parent) {
+                               _this60.mapElementStyles(column.component._column.parent.groupElement, cellEl, ["border-top"]);
+                       }
+
+                       rowEl.appendChild(cellEl);
+               }
+       });
+
+       return rowEl;
+};
+
+Export.prototype.genereateGroupElement = function (row, setup, styles) {
+
+       var rowEl = document.createElement("tr"),
+           cellEl = document.createElement("td"),
+           group = row.columns[0];
+
+       rowEl.classList.add("tabulator-print-table-row");
+
+       if (setup.groupHeader && setup.groupHeader[row.indent]) {
+               group.value = setup.groupHeader[row.indent](group.value, row.component._group.getRowCount(), row.component._group.getData(), row.component);
+       } else {
+               if (setup.groupHeader === false) {
+                       group.value = group.value;
+               } else {
+                       group.value = row.component._group.generator(group.value, row.component._group.getRowCount(), row.component._group.getData(), row.component);
+               }
+       }
+
+       cellEl.colSpan = group.width;
+       cellEl.innerHTML = group.value;
+
+       rowEl.classList.add("tabulator-print-table-group");
+       rowEl.classList.add("tabulator-group-level-" + row.indent);
+
+       if (group.component.isVisible()) {
+               rowEl.classList.add("tabulator-group-visible");
+       }
+
+       this.mapElementStyles(styles.firstGroup, rowEl, ["border-top", "border-left", "border-right", "border-bottom", "color", "font-weight", "font-family", "font-size", "background-color"]);
+       this.mapElementStyles(styles.firstGroup, cellEl, ["padding-top", "padding-left", "padding-right", "padding-bottom"]);
+
+       rowEl.appendChild(cellEl);
+
+       return rowEl;
+};
+
+Export.prototype.genereateCalcElement = function (row, setup, styles) {
+       var rowEl = this.genereateRowElement(row, setup, styles);
+
+       rowEl.classList.add("tabulator-print-table-calcs");
+       this.mapElementStyles(styles.calcRow, rowEl, ["border-top", "border-left", "border-right", "border-bottom", "color", "font-weight", "font-family", "font-size", "background-color"]);
+
+       return rowEl;
+};
+
+Export.prototype.genereateRowElement = function (row, setup, styles) {
+       var _this61 = this;
+
+       var rowEl = document.createElement("tr");
+
+       rowEl.classList.add("tabulator-print-table-row");
+
+       row.columns.forEach(function (col) {
+
+               if (col) {
+                       var cellEl = document.createElement("td"),
+                           column = col.component._column,
+                           value = col.value;
+
+                       var cellWrapper = {
+                               modules: {},
+                               getValue: function getValue() {
+                                       return value;
+                               },
+                               getField: function getField() {
+                                       return column.definition.field;
+                               },
+                               getElement: function getElement() {
+                                       return cellEl;
+                               },
+                               getColumn: function getColumn() {
+                                       return column.getComponent();
+                               },
+                               getData: function getData() {
+                                       return row.component.getData();
+                               },
+                               getRow: function getRow() {
+                                       return row.component;
+                               },
+                               getComponent: function getComponent() {
+                                       return cellWrapper;
+                               },
+                               column: column
+                       };
+
+                       var classNames = column.definition.cssClass ? column.definition.cssClass.split(" ") : [];
+
+                       classNames.forEach(function (className) {
+                               cellEl.classList.add(className);
+                       });
+
+                       if (_this61.table.modExists("format") && _this61.config.formatCells !== false) {
+                               value = _this61.table.modules.format.formatExportValue(cellWrapper, _this61.colVisProp);
+                       } else {
+                               switch (typeof value === 'undefined' ? 'undefined' : _typeof(value)) {
+                                       case "object":
+                                               value = JSON.stringify(value);
+                                               break;
+
+                                       case "undefined":
+                                       case "null":
+                                               value = "";
+                                               break;
+
+                                       default:
+                                               value = value;
+                               }
+                       }
+
+                       if (value instanceof Node) {
+                               cellEl.appendChild(value);
+                       } else {
+                               cellEl.innerHTML = value;
+                       }
+
+                       if (styles.firstCell) {
+                               _this61.mapElementStyles(styles.firstCell, cellEl, ["padding-top", "padding-left", "padding-right", "padding-bottom", "border-top", "border-left", "border-right", "border-bottom", "color", "font-weight", "font-family", "font-size"]);
+
+                               if (column.definition.align) {
+                                       cellEl.style.textAlign = column.definition.align;
+                               }
+                       }
+
+                       if (_this61.table.options.dataTree && _this61.config.dataTree !== false) {
+                               if (setup.treeElementField && setup.treeElementField == column.field || !setup.treeElementField && i == 0) {
+                                       if (row.component._row.modules.dataTree.controlEl) {
+                                               cellEl.insertBefore(row.component._row.modules.dataTree.controlEl.cloneNode(true), cellEl.firstChild);
+                                       }
+                                       if (row.component._row.modules.dataTree.branchEl) {
+                                               cellEl.insertBefore(row.component._row.modules.dataTree.branchEl.cloneNode(true), cellEl.firstChild);
+                                       }
+                               }
+                       }
+
+                       rowEl.appendChild(cellEl);
+
+                       if (cellWrapper.modules.format && cellWrapper.modules.format.renderedCallback) {
+                               cellWrapper.modules.format.renderedCallback();
+                       }
+
+                       if (setup.rowFormatter && _this61.config.formatCells !== false) {
+                               setup.rowFormatter(row.component);
+                       }
+               }
+       });
+
+       return rowEl;
+};
+
+Export.prototype.genereateHTMLTable = function (list) {
+       var holder = document.createElement("div");
+
+       holder.appendChild(this.genereateTableElement(list));
+
+       return holder.innerHTML;
+};
+
+Export.prototype.getHtml = function (visible, style, config, colVisProp) {
+       var list = this.generateExportList(config || this.table.options.htmlOutputConfig, style, visible, colVisProp || "htmlOutput");
+
+       return this.genereateHTMLTable(list);
+};
+
+Export.prototype.mapElementStyles = function (from, to, props) {
+       if (this.cloneTableStyle && from && to) {
+
+               var lookup = {
+                       "background-color": "backgroundColor",
+                       "color": "fontColor",
+                       "width": "width",
+                       "font-weight": "fontWeight",
+                       "font-family": "fontFamily",
+                       "font-size": "fontSize",
+                       "text-align": "textAlign",
+                       "border-top": "borderTop",
+                       "border-left": "borderLeft",
+                       "border-right": "borderRight",
+                       "border-bottom": "borderBottom",
+                       "padding-top": "paddingTop",
+                       "padding-left": "paddingLeft",
+                       "padding-right": "paddingRight",
+                       "padding-bottom": "paddingBottom"
+               };
+
+               if (window.getComputedStyle) {
+                       var fromStyle = window.getComputedStyle(from);
+
+                       props.forEach(function (prop) {
+                               to.style[lookup[prop]] = fromStyle.getPropertyValue(prop);
+                       });
+               }
+       }
+};
+
+Tabulator.prototype.registerModule("export", Export);
+
+var Filter = function Filter(table) {
+
+       this.table = table; //hold Tabulator object
+
+       this.filterList = []; //hold filter list
+       this.headerFilters = {}; //hold column filters
+       this.headerFilterColumns = []; //hold columns that use header filters
+
+       this.prevHeaderFilterChangeCheck = "";
+       this.prevHeaderFilterChangeCheck = "{}";
+
+       this.changed = false; //has filtering changed since last render
+};
+
+//initialize column header filter
+Filter.prototype.initializeColumn = function (column, value) {
+       var self = this,
+           field = column.getField(),
+           params;
+
+       //handle successfull value change
+       function success(value) {
+               var filterType = column.modules.filter.tagType == "input" && column.modules.filter.attrType == "text" || column.modules.filter.tagType == "textarea" ? "partial" : "match",
+                   type = "",
+                   filterChangeCheck = "",
+                   filterFunc;
+
+               if (typeof column.modules.filter.prevSuccess === "undefined" || column.modules.filter.prevSuccess !== value) {
+
+                       column.modules.filter.prevSuccess = value;
+
+                       if (!column.modules.filter.emptyFunc(value)) {
+                               column.modules.filter.value = value;
+
+                               switch (_typeof(column.definition.headerFilterFunc)) {
+                                       case "string":
+                                               if (self.filters[column.definition.headerFilterFunc]) {
+                                                       type = column.definition.headerFilterFunc;
+                                                       filterFunc = function filterFunc(data) {
+                                                               var params = column.definition.headerFilterFuncParams || {};
+                                                               var fieldVal = column.getFieldValue(data);
+
+                                                               params = typeof params === "function" ? params(value, fieldVal, data) : params;
+
+                                                               return self.filters[column.definition.headerFilterFunc](value, fieldVal, data, params);
+                                                       };
+                                               } else {
+                                                       console.warn("Header Filter Error - Matching filter function not found: ", column.definition.headerFilterFunc);
+                                               }
+                                               break;
+
+                                       case "function":
+                                               filterFunc = function filterFunc(data) {
+                                                       var params = column.definition.headerFilterFuncParams || {};
+                                                       var fieldVal = column.getFieldValue(data);
+
+                                                       params = typeof params === "function" ? params(value, fieldVal, data) : params;
+
+                                                       return column.definition.headerFilterFunc(value, fieldVal, data, params);
+                                               };
+
+                                               type = filterFunc;
+                                               break;
+                               }
+
+                               if (!filterFunc) {
+                                       switch (filterType) {
+                                               case "partial":
+                                                       filterFunc = function filterFunc(data) {
+                                                               var colVal = column.getFieldValue(data);
+
+                                                               if (typeof colVal !== 'undefined' && colVal !== null) {
+                                                                       return String(colVal).toLowerCase().indexOf(String(value).toLowerCase()) > -1;
+                                                               } else {
+                                                                       return false;
+                                                               }
+                                                       };
+                                                       type = "like";
+                                                       break;
+
+                                               default:
+                                                       filterFunc = function filterFunc(data) {
+                                                               return column.getFieldValue(data) == value;
+                                                       };
+                                                       type = "=";
+                                       }
+                               }
+
+                               self.headerFilters[field] = { value: value, func: filterFunc, type: type, params: params || {} };
+                       } else {
+                               delete self.headerFilters[field];
+                       }
+
+                       filterChangeCheck = JSON.stringify(self.headerFilters);
+
+                       if (self.prevHeaderFilterChangeCheck !== filterChangeCheck) {
+                               self.prevHeaderFilterChangeCheck = filterChangeCheck;
+
+                               self.changed = true;
+                               self.table.rowManager.filterRefresh();
+                       }
+               }
+
+               return true;
+       }
+
+       column.modules.filter = {
+               success: success,
+               attrType: false,
+               tagType: false,
+               emptyFunc: false
+       };
+
+       this.generateHeaderFilterElement(column);
+};
+
+Filter.prototype.generateHeaderFilterElement = function (column, initialValue, reinitialize) {
+       var _this62 = this;
+
+       var self = this,
+           success = column.modules.filter.success,
+           field = column.getField(),
+           filterElement,
+           editor,
+           editorElement,
+           cellWrapper,
+           typingTimer,
+           searchTrigger,
+           params;
+
+       //handle aborted edit
+       function cancel() {}
+
+       if (column.modules.filter.headerElement && column.modules.filter.headerElement.parentNode) {
+               column.contentElement.removeChild(column.modules.filter.headerElement.parentNode);
+       }
+
+       if (field) {
+
+               //set empty value function
+               column.modules.filter.emptyFunc = column.definition.headerFilterEmptyCheck || function (value) {
+                       return !value && value !== "0";
+               };
+
+               filterElement = document.createElement("div");
+               filterElement.classList.add("tabulator-header-filter");
+
+               //set column editor
+               switch (_typeof(column.definition.headerFilter)) {
+                       case "string":
+                               if (self.table.modules.edit.editors[column.definition.headerFilter]) {
+                                       editor = self.table.modules.edit.editors[column.definition.headerFilter];
+
+                                       if ((column.definition.headerFilter === "tick" || column.definition.headerFilter === "tickCross") && !column.definition.headerFilterEmptyCheck) {
+                                               column.modules.filter.emptyFunc = function (value) {
+                                                       return value !== true && value !== false;
+                                               };
+                                       }
+                               } else {
+                                       console.warn("Filter Error - Cannot build header filter, No such editor found: ", column.definition.editor);
+                               }
+                               break;
+
+                       case "function":
+                               editor = column.definition.headerFilter;
+                               break;
+
+                       case "boolean":
+                               if (column.modules.edit && column.modules.edit.editor) {
+                                       editor = column.modules.edit.editor;
+                               } else {
+                                       if (column.definition.formatter && self.table.modules.edit.editors[column.definition.formatter]) {
+                                               editor = self.table.modules.edit.editors[column.definition.formatter];
+
+                                               if ((column.definition.formatter === "tick" || column.definition.formatter === "tickCross") && !column.definition.headerFilterEmptyCheck) {
+                                                       column.modules.filter.emptyFunc = function (value) {
+                                                               return value !== true && value !== false;
+                                                       };
+                                               }
+                                       } else {
+                                               editor = self.table.modules.edit.editors["input"];
+                                       }
+                               }
+                               break;
+               }
+
+               if (editor) {
+
+                       cellWrapper = {
+                               getValue: function getValue() {
+                                       return typeof initialValue !== "undefined" ? initialValue : "";
+                               },
+                               getField: function getField() {
+                                       return column.definition.field;
+                               },
+                               getElement: function getElement() {
+                                       return filterElement;
+                               },
+                               getColumn: function getColumn() {
+                                       return column.getComponent();
+                               },
+                               getRow: function getRow() {
+                                       return {
+                                               normalizeHeight: function normalizeHeight() {}
+                                       };
+                               }
+                       };
+
+                       params = column.definition.headerFilterParams || {};
+
+                       params = typeof params === "function" ? params.call(self.table) : params;
+
+                       editorElement = editor.call(this.table.modules.edit, cellWrapper, function () {}, success, cancel, params);
+
+                       if (!editorElement) {
+                               console.warn("Filter Error - Cannot add filter to " + field + " column, editor returned a value of false");
+                               return;
+                       }
+
+                       if (!(editorElement instanceof Node)) {
+                               console.warn("Filter Error - Cannot add filter to " + field + " column, editor should return an instance of Node, the editor returned:", editorElement);
+                               return;
+                       }
+
+                       //set Placeholder Text
+                       if (field) {
+                               self.table.modules.localize.bind("headerFilters|columns|" + column.definition.field, function (value) {
+                                       editorElement.setAttribute("placeholder", typeof value !== "undefined" && value ? value : self.table.modules.localize.getText("headerFilters|default"));
+                               });
+                       } else {
+                               self.table.modules.localize.bind("headerFilters|default", function (value) {
+                                       editorElement.setAttribute("placeholder", typeof self.column.definition.headerFilterPlaceholder !== "undefined" && self.column.definition.headerFilterPlaceholder ? self.column.definition.headerFilterPlaceholder : value);
+                               });
+                       }
+
+                       //focus on element on click
+                       editorElement.addEventListener("click", function (e) {
+                               e.stopPropagation();
+                               editorElement.focus();
+                       });
+
+                       editorElement.addEventListener("focus", function (e) {
+                               var left = _this62.table.columnManager.element.scrollLeft;
+
+                               if (left !== _this62.table.rowManager.element.scrollLeft) {
+                                       _this62.table.rowManager.scrollHorizontal(left);
+                                       _this62.table.columnManager.scrollHorizontal(left);
+                               }
+                       });
+
+                       //live update filters as user types
+                       typingTimer = false;
+
+                       searchTrigger = function searchTrigger(e) {
+                               if (typingTimer) {
+                                       clearTimeout(typingTimer);
+                               }
+
+                               typingTimer = setTimeout(function () {
+                                       success(editorElement.value);
+                               }, self.table.options.headerFilterLiveFilterDelay);
+                       };
+
+                       column.modules.filter.headerElement = editorElement;
+                       column.modules.filter.attrType = editorElement.hasAttribute("type") ? editorElement.getAttribute("type").toLowerCase() : "";
+                       column.modules.filter.tagType = editorElement.tagName.toLowerCase();
+
+                       if (column.definition.headerFilterLiveFilter !== false) {
+
+                               if (!(column.definition.headerFilter === 'autocomplete' || column.definition.headerFilter === 'tickCross' || (column.definition.editor === 'autocomplete' || column.definition.editor === 'tickCross') && column.definition.headerFilter === true)) {
+                                       editorElement.addEventListener("keyup", searchTrigger);
+                                       editorElement.addEventListener("search", searchTrigger);
+
+                                       //update number filtered columns on change
+                                       if (column.modules.filter.attrType == "number") {
+                                               editorElement.addEventListener("change", function (e) {
+                                                       success(editorElement.value);
+                                               });
+                                       }
+
+                                       //change text inputs to search inputs to allow for clearing of field
+                                       if (column.modules.filter.attrType == "text" && this.table.browser !== "ie") {
+                                               editorElement.setAttribute("type", "search");
+                                               // editorElement.off("change blur"); //prevent blur from triggering filter and preventing selection click
+                                       }
+                               }
+
+                               //prevent input and select elements from propegating click to column sorters etc
+                               if (column.modules.filter.tagType == "input" || column.modules.filter.tagType == "select" || column.modules.filter.tagType == "textarea") {
+                                       editorElement.addEventListener("mousedown", function (e) {
+                                               e.stopPropagation();
+                                       });
+                               }
+                       }
+
+                       filterElement.appendChild(editorElement);
+
+                       column.contentElement.appendChild(filterElement);
+
+                       if (!reinitialize) {
+                               self.headerFilterColumns.push(column);
+                       }
+               }
+       } else {
+               console.warn("Filter Error - Cannot add header filter, column has no field set:", column.definition.title);
+       }
+};
+
+//hide all header filter elements (used to ensure correct column widths in "fitData" layout mode)
+Filter.prototype.hideHeaderFilterElements = function () {
+       this.headerFilterColumns.forEach(function (column) {
+               if (column.modules.filter && column.modules.filter.headerElement) {
+                       column.modules.filter.headerElement.style.display = 'none';
+               }
+       });
+};
+
+//show all header filter elements (used to ensure correct column widths in "fitData" layout mode)
+Filter.prototype.showHeaderFilterElements = function () {
+       this.headerFilterColumns.forEach(function (column) {
+               if (column.modules.filter && column.modules.filter.headerElement) {
+                       column.modules.filter.headerElement.style.display = '';
+               }
+       });
+};
+
+//programatically set focus of header filter
+Filter.prototype.setHeaderFilterFocus = function (column) {
+       if (column.modules.filter && column.modules.filter.headerElement) {
+               column.modules.filter.headerElement.focus();
+       } else {
+               console.warn("Column Filter Focus Error - No header filter set on column:", column.getField());
+       }
+};
+
+//programmatically get value of header filter
+Filter.prototype.getHeaderFilterValue = function (column) {
+       if (column.modules.filter && column.modules.filter.headerElement) {
+               return column.modules.filter.headerElement.value;
+       } else {
+               console.warn("Column Filter Error - No header filter set on column:", column.getField());
+       }
+};
+
+//programatically set value of header filter
+Filter.prototype.setHeaderFilterValue = function (column, value) {
+       if (column) {
+               if (column.modules.filter && column.modules.filter.headerElement) {
+                       this.generateHeaderFilterElement(column, value, true);
+                       column.modules.filter.success(value);
+               } else {
+                       console.warn("Column Filter Error - No header filter set on column:", column.getField());
+               }
+       }
+};
+
+Filter.prototype.reloadHeaderFilter = function (column) {
+       if (column) {
+               if (column.modules.filter && column.modules.filter.headerElement) {
+                       this.generateHeaderFilterElement(column, column.modules.filter.value, true);
+               } else {
+                       console.warn("Column Filter Error - No header filter set on column:", column.getField());
+               }
+       }
+};
+
+//check if the filters has changed since last use
+Filter.prototype.hasChanged = function () {
+       var changed = this.changed;
+       this.changed = false;
+       return changed;
+};
+
+//set standard filters
+Filter.prototype.setFilter = function (field, type, value, params) {
+       var self = this;
+
+       self.filterList = [];
+
+       if (!Array.isArray(field)) {
+               field = [{ field: field, type: type, value: value, params: params }];
+       }
+
+       self.addFilter(field);
+};
+
+//add filter to array
+Filter.prototype.addFilter = function (field, type, value, params) {
+       var self = this;
+
+       if (!Array.isArray(field)) {
+               field = [{ field: field, type: type, value: value, params: params }];
+       }
+
+       field.forEach(function (filter) {
+
+               filter = self.findFilter(filter);
+
+               if (filter) {
+                       self.filterList.push(filter);
+
+                       self.changed = true;
+               }
+       });
+
+       if (this.table.options.persistence && this.table.modExists("persistence", true) && this.table.modules.persistence.config.filter) {
+               this.table.modules.persistence.save("filter");
+       }
+};
+
+Filter.prototype.findFilter = function (filter) {
+       var self = this,
+           column;
+
+       if (Array.isArray(filter)) {
+               return this.findSubFilters(filter);
+       }
+
+       var filterFunc = false;
+
+       if (typeof filter.field == "function") {
+               filterFunc = function filterFunc(data) {
+                       return filter.field(data, filter.type || {}); // pass params to custom filter function
+               };
+       } else {
+
+               if (self.filters[filter.type]) {
+
+                       column = self.table.columnManager.getColumnByField(filter.field);
+
+                       if (column) {
+                               filterFunc = function filterFunc(data) {
+                                       return self.filters[filter.type](filter.value, column.getFieldValue(data), data, filter.params || {});
+                               };
+                       } else {
+                               filterFunc = function filterFunc(data) {
+                                       return self.filters[filter.type](filter.value, data[filter.field], data, filter.params || {});
+                               };
+                       }
+               } else {
+                       console.warn("Filter Error - No such filter type found, ignoring: ", filter.type);
+               }
+       }
+
+       filter.func = filterFunc;
+
+       return filter.func ? filter : false;
+};
+
+Filter.prototype.findSubFilters = function (filters) {
+       var self = this,
+           output = [];
+
+       filters.forEach(function (filter) {
+               filter = self.findFilter(filter);
+
+               if (filter) {
+                       output.push(filter);
+               }
+       });
+
+       return output.length ? output : false;
+};
+
+//get all filters
+Filter.prototype.getFilters = function (all, ajax) {
+       var output = [];
+
+       if (all) {
+               output = this.getHeaderFilters();
+       }
+
+       if (ajax) {
+               output.forEach(function (item) {
+                       if (typeof item.type == "function") {
+                               item.type = "function";
+                       }
+               });
+       }
+
+       output = output.concat(this.filtersToArray(this.filterList, ajax));
+
+       return output;
+};
+
+//filter to Object
+Filter.prototype.filtersToArray = function (filterList, ajax) {
+       var _this63 = this;
+
+       var output = [];
+
+       filterList.forEach(function (filter) {
+               var item;
+
+               if (Array.isArray(filter)) {
+                       output.push(_this63.filtersToArray(filter, ajax));
+               } else {
+                       item = { field: filter.field, type: filter.type, value: filter.value };
+
+                       if (ajax) {
+                               if (typeof item.type == "function") {
+                                       item.type = "function";
+                               }
+                       }
+
+                       output.push(item);
+               }
+       });
+
+       return output;
+};
+
+//get all filters
+Filter.prototype.getHeaderFilters = function () {
+       var self = this,
+           output = [];
+
+       for (var key in this.headerFilters) {
+               output.push({ field: key, type: this.headerFilters[key].type, value: this.headerFilters[key].value });
+       }
+
+       return output;
+};
+
+//remove filter from array
+Filter.prototype.removeFilter = function (field, type, value) {
+       var self = this;
+
+       if (!Array.isArray(field)) {
+               field = [{ field: field, type: type, value: value }];
+       }
+
+       field.forEach(function (filter) {
+               var index = -1;
+
+               if (_typeof(filter.field) == "object") {
+                       index = self.filterList.findIndex(function (element) {
+                               return filter === element;
+                       });
+               } else {
+                       index = self.filterList.findIndex(function (element) {
+                               return filter.field === element.field && filter.type === element.type && filter.value === element.value;
+                       });
+               }
+
+               if (index > -1) {
+                       self.filterList.splice(index, 1);
+                       self.changed = true;
+               } else {
+                       console.warn("Filter Error - No matching filter type found, ignoring: ", filter.type);
+               }
+       });
+
+       if (this.table.options.persistence && this.table.modExists("persistence", true) && this.table.modules.persistence.config.filter) {
+               this.table.modules.persistence.save("filter");
+       }
+};
+
+//clear filters
+Filter.prototype.clearFilter = function (all) {
+       this.filterList = [];
+
+       if (all) {
+               this.clearHeaderFilter();
+       }
+
+       this.changed = true;
+
+       if (this.table.options.persistence && this.table.modExists("persistence", true) && this.table.modules.persistence.config.filter) {
+               this.table.modules.persistence.save("filter");
+       }
+};
+
+//clear header filters
+Filter.prototype.clearHeaderFilter = function () {
+       var self = this;
+
+       this.headerFilters = {};
+       self.prevHeaderFilterChangeCheck = "{}";
+
+       this.headerFilterColumns.forEach(function (column) {
+               column.modules.filter.value = null;
+               column.modules.filter.prevSuccess = undefined;
+               self.reloadHeaderFilter(column);
+       });
+
+       this.changed = true;
+};
+
+//search data and return matching rows
+Filter.prototype.search = function (searchType, field, type, value) {
+       var self = this,
+           activeRows = [],
+           filterList = [];
+
+       if (!Array.isArray(field)) {
+               field = [{ field: field, type: type, value: value }];
+       }
+
+       field.forEach(function (filter) {
+               filter = self.findFilter(filter);
+
+               if (filter) {
+                       filterList.push(filter);
+               }
+       });
+
+       this.table.rowManager.rows.forEach(function (row) {
+               var match = true;
+
+               filterList.forEach(function (filter) {
+                       if (!self.filterRecurse(filter, row.getData())) {
+                               match = false;
+                       }
+               });
+
+               if (match) {
+                       activeRows.push(searchType === "data" ? row.getData("data") : row.getComponent());
+               }
+       });
+
+       return activeRows;
+};
+
+//filter row array
+Filter.prototype.filter = function (rowList, filters) {
+       var self = this,
+           activeRows = [],
+           activeRowComponents = [];
+
+       if (self.table.options.dataFiltering) {
+               self.table.options.dataFiltering.call(self.table, self.getFilters());
+       }
+
+       if (!self.table.options.ajaxFiltering && (self.filterList.length || Object.keys(self.headerFilters).length)) {
+
+               rowList.forEach(function (row) {
+                       if (self.filterRow(row)) {
+                               activeRows.push(row);
+                       }
+               });
+       } else {
+               activeRows = rowList.slice(0);
+       }
+
+       if (self.table.options.dataFiltered) {
+
+               activeRows.forEach(function (row) {
+                       activeRowComponents.push(row.getComponent());
+               });
+
+               self.table.options.dataFiltered.call(self.table, self.getFilters(), activeRowComponents);
+       }
+
+       return activeRows;
+};
+
+//filter individual row
+Filter.prototype.filterRow = function (row, filters) {
+       var self = this,
+           match = true,
+           data = row.getData();
+
+       self.filterList.forEach(function (filter) {
+               if (!self.filterRecurse(filter, data)) {
+                       match = false;
+               }
+       });
+
+       for (var field in self.headerFilters) {
+               if (!self.headerFilters[field].func(data)) {
+                       match = false;
+               }
+       }
+
+       return match;
+};
+
+Filter.prototype.filterRecurse = function (filter, data) {
+       var self = this,
+           match = false;
+
+       if (Array.isArray(filter)) {
+               filter.forEach(function (subFilter) {
+                       if (self.filterRecurse(subFilter, data)) {
+                               match = true;
+                       }
+               });
+       } else {
+               match = filter.func(data);
+       }
+
+       return match;
+};
+
+//list of available filters
+Filter.prototype.filters = {
+
+       //equal to
+       "=": function _(filterVal, rowVal, rowData, filterParams) {
+               return rowVal == filterVal ? true : false;
+       },
+
+       //less than
+       "<": function _(filterVal, rowVal, rowData, filterParams) {
+               return rowVal < filterVal ? true : false;
+       },
+
+       //less than or equal to
+       "<=": function _(filterVal, rowVal, rowData, filterParams) {
+               return rowVal <= filterVal ? true : false;
+       },
+
+       //greater than
+       ">": function _(filterVal, rowVal, rowData, filterParams) {
+               return rowVal > filterVal ? true : false;
+       },
+
+       //greater than or equal to
+       ">=": function _(filterVal, rowVal, rowData, filterParams) {
+               return rowVal >= filterVal ? true : false;
+       },
+
+       //not equal to
+       "!=": function _(filterVal, rowVal, rowData, filterParams) {
+               return rowVal != filterVal ? true : false;
+       },
+
+       "regex": function regex(filterVal, rowVal, rowData, filterParams) {
+
+               if (typeof filterVal == "string") {
+                       filterVal = new RegExp(filterVal);
+               }
+
+               return filterVal.test(rowVal);
+       },
+
+       //contains the string
+       "like": function like(filterVal, rowVal, rowData, filterParams) {
+               if (filterVal === null || typeof filterVal === "undefined") {
+                       return rowVal === filterVal ? true : false;
+               } else {
+                       if (typeof rowVal !== 'undefined' && rowVal !== null) {
+                               return String(rowVal).toLowerCase().indexOf(filterVal.toLowerCase()) > -1;
+                       } else {
+                               return false;
+                       }
+               }
+       },
+
+       //contains the keywords
+       "keywords": function keywords(filterVal, rowVal, rowData, filterParams) {
+               var keywords = filterVal.toLowerCase().split(typeof filterParams.separator === "undefined" ? " " : filterParams.separator),
+                   value = String(rowVal === null || typeof rowVal === "undefined" ? "" : rowVal).toLowerCase(),
+                   matches = [];
+
+               keywords.forEach(function (keyword) {
+                       if (value.includes(keyword)) {
+                               matches.push(true);
+                       }
+               });
+
+               return filterParams.matchAll ? matches.length === keywords.length : !!matches.length;
+       },
+
+       //starts with the string
+       "starts": function starts(filterVal, rowVal, rowData, filterParams) {
+               if (filterVal === null || typeof filterVal === "undefined") {
+                       return rowVal === filterVal ? true : false;
+               } else {
+                       if (typeof rowVal !== 'undefined' && rowVal !== null) {
+                               return String(rowVal).toLowerCase().startsWith(filterVal.toLowerCase());
+                       } else {
+                               return false;
+                       }
+               }
+       },
+
+       //ends with the string
+       "ends": function ends(filterVal, rowVal, rowData, filterParams) {
+               if (filterVal === null || typeof filterVal === "undefined") {
+                       return rowVal === filterVal ? true : false;
+               } else {
+                       if (typeof rowVal !== 'undefined' && rowVal !== null) {
+                               return String(rowVal).toLowerCase().endsWith(filterVal.toLowerCase());
+                       } else {
+                               return false;
+                       }
+               }
+       },
+
+       //in array
+       "in": function _in(filterVal, rowVal, rowData, filterParams) {
+               if (Array.isArray(filterVal)) {
+                       return filterVal.length ? filterVal.indexOf(rowVal) > -1 : true;
+               } else {
+                       console.warn("Filter Error - filter value is not an array:", filterVal);
+                       return false;
+               }
+       }
+};
+
+Tabulator.prototype.registerModule("filter", Filter);
+
+var Format = function Format(table) {
+       this.table = table; //hold Tabulator object
+};
+
+//initialize column formatter
+Format.prototype.initializeColumn = function (column) {
+       column.modules.format = this.lookupFormatter(column, "");
+
+       if (typeof column.definition.formatterPrint !== "undefined") {
+               column.modules.format.print = this.lookupFormatter(column, "Print");
+       }
+
+       if (typeof column.definition.formatterClipboard !== "undefined") {
+               column.modules.format.clipboard = this.lookupFormatter(column, "Clipboard");
+       }
+
+       if (typeof column.definition.formatterHtmlOutput !== "undefined") {
+               column.modules.format.htmlOutput = this.lookupFormatter(column, "HtmlOutput");
+       }
+};
+
+Format.prototype.lookupFormatter = function (column, type) {
+       var config = { params: column.definition["formatter" + type + "Params"] || {} },
+           formatter = column.definition["formatter" + type];
+
+       //set column formatter
+       switch (typeof formatter === 'undefined' ? 'undefined' : _typeof(formatter)) {
+               case "string":
+
+                       if (formatter === "tick") {
+                               formatter = "tickCross";
+
+                               if (typeof config.params.crossElement == "undefined") {
+                                       config.params.crossElement = false;
+                               }
+
+                               console.warn("DEPRECATION WARNING - the tick formatter has been deprecated, please use the tickCross formatter with the crossElement param set to false");
+                       }
+
+                       if (this.formatters[formatter]) {
+                               config.formatter = this.formatters[formatter];
+                       } else {
+                               console.warn("Formatter Error - No such formatter found: ", formatter);
+                               config.formatter = this.formatters.plaintext;
+                       }
+                       break;
+
+               case "function":
+                       config.formatter = formatter;
+                       break;
+
+               default:
+                       config.formatter = this.formatters.plaintext;
+                       break;
+       }
+
+       return config;
+};
+
+Format.prototype.cellRendered = function (cell) {
+       if (cell.modules.format && cell.modules.format.renderedCallback && !cell.modules.format.rendered) {
+               cell.modules.format.renderedCallback();
+               cell.modules.format.rendered = true;
+       }
+};
+
+//return a formatted value for a cell
+Format.prototype.formatValue = function (cell) {
+       var component = cell.getComponent(),
+           params = typeof cell.column.modules.format.params === "function" ? cell.column.modules.format.params(component) : cell.column.modules.format.params;
+
+       function onRendered(callback) {
+               if (!cell.modules.format) {
+                       cell.modules.format = {};
+               }
+
+               cell.modules.format.renderedCallback = callback;
+               cell.modules.format.rendered = false;
+       }
+
+       return cell.column.modules.format.formatter.call(this, component, params, onRendered);
+};
+
+Format.prototype.formatExportValue = function (cell, type) {
+       var formatter = cell.column.modules.format[type],
+           params;
+
+       if (formatter) {
+               var onRendered = function onRendered(callback) {
+                       if (!cell.modules.format) {
+                               cell.modules.format = {};
+                       }
+
+                       cell.modules.format.renderedCallback = callback;
+                       cell.modules.format.rendered = false;
+               };
+
+               params = typeof formatter.params === "function" ? formatter.params(component) : formatter.params;
+
+               return formatter.formatter.call(this, cell.getComponent(), params, onRendered);
+       } else {
+               return this.formatValue(cell);
+       }
+};
+
+Format.prototype.sanitizeHTML = function (value) {
+       if (value) {
+               var entityMap = {
+                       '&': '&amp;',
+                       '<': '&lt;',
+                       '>': '&gt;',
+                       '"': '&quot;',
+                       "'": '&#39;',
+                       '/': '&#x2F;',
+                       '`': '&#x60;',
+                       '=': '&#x3D;'
+               };
+
+               return String(value).replace(/[&<>"'`=\/]/g, function (s) {
+                       return entityMap[s];
+               });
+       } else {
+               return value;
+       }
+};
+
+Format.prototype.emptyToSpace = function (value) {
+       return value === null || typeof value === "undefined" || value === "" ? "&nbsp;" : value;
+};
+
+//get formatter for cell
+Format.prototype.getFormatter = function (formatter) {
+       var formatter;
+
+       switch (typeof formatter === 'undefined' ? 'undefined' : _typeof(formatter)) {
+               case "string":
+                       if (this.formatters[formatter]) {
+                               formatter = this.formatters[formatter];
+                       } else {
+                               console.warn("Formatter Error - No such formatter found: ", formatter);
+                               formatter = this.formatters.plaintext;
+                       }
+                       break;
+
+               case "function":
+                       formatter = formatter;
+                       break;
+
+               default:
+                       formatter = this.formatters.plaintext;
+                       break;
+       }
+
+       return formatter;
+};
+
+//default data formatters
+Format.prototype.formatters = {
+       //plain text value
+       plaintext: function plaintext(cell, formatterParams, onRendered) {
+               return this.emptyToSpace(this.sanitizeHTML(cell.getValue()));
+       },
+
+       //html text value
+       html: function html(cell, formatterParams, onRendered) {
+               return cell.getValue();
+       },
+
+       //multiline text area
+       textarea: function textarea(cell, formatterParams, onRendered) {
+               cell.getElement().style.whiteSpace = "pre-wrap";
+               return this.emptyToSpace(this.sanitizeHTML(cell.getValue()));
+       },
+
+       //currency formatting
+       money: function money(cell, formatterParams, onRendered) {
+               var floatVal = parseFloat(cell.getValue()),
+                   number,
+                   integer,
+                   decimal,
+                   rgx;
+
+               var decimalSym = formatterParams.decimal || ".";
+               var thousandSym = formatterParams.thousand || ",";
+               var symbol = formatterParams.symbol || "";
+               var after = !!formatterParams.symbolAfter;
+               var precision = typeof formatterParams.precision !== "undefined" ? formatterParams.precision : 2;
+
+               if (isNaN(floatVal)) {
+                       return this.emptyToSpace(this.sanitizeHTML(cell.getValue()));
+               }
+
+               number = precision !== false ? floatVal.toFixed(precision) : floatVal;
+               number = String(number).split(".");
+
+               integer = number[0];
+               decimal = number.length > 1 ? decimalSym + number[1] : "";
+
+               rgx = /(\d+)(\d{3})/;
+
+               while (rgx.test(integer)) {
+                       integer = integer.replace(rgx, "$1" + thousandSym + "$2");
+               }
+
+               return after ? integer + decimal + symbol : symbol + integer + decimal;
+       },
+
+       //clickable anchor tag
+       link: function link(cell, formatterParams, onRendered) {
+               var value = cell.getValue(),
+                   urlPrefix = formatterParams.urlPrefix || "",
+                   download = formatterParams.download,
+                   label = value,
+                   el = document.createElement("a"),
+                   data;
+
+               if (formatterParams.labelField) {
+                       data = cell.getData();
+                       label = data[formatterParams.labelField];
+               }
+
+               if (formatterParams.label) {
+                       switch (_typeof(formatterParams.label)) {
+                               case "string":
+                                       label = formatterParams.label;
+                                       break;
+
+                               case "function":
+                                       label = formatterParams.label(cell);
+                                       break;
+                       }
+               }
+
+               if (label) {
+                       if (formatterParams.urlField) {
+                               data = cell.getData();
+                               value = data[formatterParams.urlField];
+                       }
+
+                       if (formatterParams.url) {
+                               switch (_typeof(formatterParams.url)) {
+                                       case "string":
+                                               value = formatterParams.url;
+                                               break;
+
+                                       case "function":
+                                               value = formatterParams.url(cell);
+                                               break;
+                               }
+                       }
+
+                       el.setAttribute("href", urlPrefix + value);
+
+                       if (formatterParams.target) {
+                               el.setAttribute("target", formatterParams.target);
+                       }
+
+                       if (formatterParams.download) {
+
+                               if (typeof download == "function") {
+                                       download = download(cell);
+                               } else {
+                                       download = download === true ? "" : download;
+                               }
+
+                               el.setAttribute("download", download);
+                       }
+
+                       el.innerHTML = this.emptyToSpace(this.sanitizeHTML(label));
+
+                       return el;
+               } else {
+                       return "&nbsp;";
+               }
+       },
+
+       //image element
+       image: function image(cell, formatterParams, onRendered) {
+               var el = document.createElement("img");
+               el.setAttribute("src", cell.getValue());
+
+               switch (_typeof(formatterParams.height)) {
+                       case "number":
+                               el.style.height = formatterParams.height + "px";
+                               break;
+
+                       case "string":
+                               el.style.height = formatterParams.height;
+                               break;
+               }
+
+               switch (_typeof(formatterParams.width)) {
+                       case "number":
+                               el.style.width = formatterParams.width + "px";
+                               break;
+
+                       case "string":
+                               el.style.width = formatterParams.width;
+                               break;
+               }
+
+               el.addEventListener("load", function () {
+                       cell.getRow().normalizeHeight();
+               });
+
+               return el;
+       },
+
+       //tick or cross
+       tickCross: function tickCross(cell, formatterParams, onRendered) {
+               var value = cell.getValue(),
+                   element = cell.getElement(),
+                   empty = formatterParams.allowEmpty,
+                   truthy = formatterParams.allowTruthy,
+                   tick = typeof formatterParams.tickElement !== "undefined" ? formatterParams.tickElement : '<svg enable-background="new 0 0 24 24" height="14" width="14" viewBox="0 0 24 24" xml:space="preserve" ><path fill="#2DC214" clip-rule="evenodd" d="M21.652,3.211c-0.293-0.295-0.77-0.295-1.061,0L9.41,14.34  c-0.293,0.297-0.771,0.297-1.062,0L3.449,9.351C3.304,9.203,3.114,9.13,2.923,9.129C2.73,9.128,2.534,9.201,2.387,9.351  l-2.165,1.946C0.078,11.445,0,11.63,0,11.823c0,0.194,0.078,0.397,0.223,0.544l4.94,5.184c0.292,0.296,0.771,0.776,1.062,1.07  l2.124,2.141c0.292,0.293,0.769,0.293,1.062,0l14.366-14.34c0.293-0.294,0.293-0.777,0-1.071L21.652,3.211z" fill-rule="evenodd"/></svg>',
+                   cross = typeof formatterParams.crossElement !== "undefined" ? formatterParams.crossElement : '<svg enable-background="new 0 0 24 24" height="14" width="14"  viewBox="0 0 24 24" xml:space="preserve" ><path fill="#CE1515" d="M22.245,4.015c0.313,0.313,0.313,0.826,0,1.139l-6.276,6.27c-0.313,0.312-0.313,0.826,0,1.14l6.273,6.272  c0.313,0.313,0.313,0.826,0,1.14l-2.285,2.277c-0.314,0.312-0.828,0.312-1.142,0l-6.271-6.271c-0.313-0.313-0.828-0.313-1.141,0  l-6.276,6.267c-0.313,0.313-0.828,0.313-1.141,0l-2.282-2.28c-0.313-0.313-0.313-0.826,0-1.14l6.278-6.269  c0.313-0.312,0.313-0.826,0-1.14L1.709,5.147c-0.314-0.313-0.314-0.827,0-1.14l2.284-2.278C4.308,1.417,4.821,1.417,5.135,1.73  L11.405,8c0.314,0.314,0.828,0.314,1.141,0.001l6.276-6.267c0.312-0.312,0.826-0.312,1.141,0L22.245,4.015z"/></svg>';
+
+               if (truthy && value || value === true || value === "true" || value === "True" || value === 1 || value === "1") {
+                       element.setAttribute("aria-checked", true);
+                       return tick || "";
+               } else {
+                       if (empty && (value === "null" || value === "" || value === null || typeof value === "undefined")) {
+                               element.setAttribute("aria-checked", "mixed");
+                               return "";
+                       } else {
+                               element.setAttribute("aria-checked", false);
+                               return cross || "";
+                       }
+               }
+       },
+
+       datetime: function datetime(cell, formatterParams, onRendered) {
+               var inputFormat = formatterParams.inputFormat || "YYYY-MM-DD hh:mm:ss";
+               var outputFormat = formatterParams.outputFormat || "DD/MM/YYYY hh:mm:ss";
+               var invalid = typeof formatterParams.invalidPlaceholder !== "undefined" ? formatterParams.invalidPlaceholder : "";
+               var value = cell.getValue();
+
+               var newDatetime = moment(value, inputFormat);
+
+               if (newDatetime.isValid()) {
+                       return formatterParams.timezone ? newDatetime.tz(formatterParams.timezone).format(outputFormat) : newDatetime.format(outputFormat);
+               } else {
+
+                       if (invalid === true) {
+                               return value;
+                       } else if (typeof invalid === "function") {
+                               return invalid(value);
+                       } else {
+                               return invalid;
+                       }
+               }
+       },
+
+       datetimediff: function datetime(cell, formatterParams, onRendered) {
+               var inputFormat = formatterParams.inputFormat || "YYYY-MM-DD hh:mm:ss";
+               var invalid = typeof formatterParams.invalidPlaceholder !== "undefined" ? formatterParams.invalidPlaceholder : "";
+               var suffix = typeof formatterParams.suffix !== "undefined" ? formatterParams.suffix : false;
+               var unit = typeof formatterParams.unit !== "undefined" ? formatterParams.unit : undefined;
+               var humanize = typeof formatterParams.humanize !== "undefined" ? formatterParams.humanize : false;
+               var date = typeof formatterParams.date !== "undefined" ? formatterParams.date : moment();
+               var value = cell.getValue();
+
+               var newDatetime = moment(value, inputFormat);
+
+               if (newDatetime.isValid()) {
+                       if (humanize) {
+                               return moment.duration(newDatetime.diff(date)).humanize(suffix);
+                       } else {
+                               return newDatetime.diff(date, unit) + (suffix ? " " + suffix : "");
+                       }
+               } else {
+
+                       if (invalid === true) {
+                               return value;
+                       } else if (typeof invalid === "function") {
+                               return invalid(value);
+                       } else {
+                               return invalid;
+                       }
+               }
+       },
+
+       //select
+       lookup: function lookup(cell, formatterParams, onRendered) {
+               var value = cell.getValue();
+
+               if (typeof formatterParams[value] === "undefined") {
+                       console.warn('Missing display value for ' + value);
+                       return value;
+               }
+
+               return formatterParams[value];
+       },
+
+       //star rating
+       star: function star(cell, formatterParams, onRendered) {
+               var value = cell.getValue(),
+                   element = cell.getElement(),
+                   maxStars = formatterParams && formatterParams.stars ? formatterParams.stars : 5,
+                   stars = document.createElement("span"),
+                   star = document.createElementNS('http://www.w3.org/2000/svg', "svg"),
+                   starActive = '<polygon fill="#FFEA00" stroke="#C1AB60" stroke-width="37.6152" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" points="259.216,29.942 330.27,173.919 489.16,197.007 374.185,309.08 401.33,467.31 259.216,392.612 117.104,467.31 144.25,309.08 29.274,197.007 188.165,173.919 "/>',
+                   starInactive = '<polygon fill="#D2D2D2" stroke="#686868" stroke-width="37.6152" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" points="259.216,29.942 330.27,173.919 489.16,197.007 374.185,309.08 401.33,467.31 259.216,392.612 117.104,467.31 144.25,309.08 29.274,197.007 188.165,173.919 "/>';
+
+               //style stars holder
+               stars.style.verticalAlign = "middle";
+
+               //style star
+               star.setAttribute("width", "14");
+               star.setAttribute("height", "14");
+               star.setAttribute("viewBox", "0 0 512 512");
+               star.setAttribute("xml:space", "preserve");
+               star.style.padding = "0 1px";
+
+               value = value && !isNaN(value) ? parseInt(value) : 0;
+
+               value = Math.max(0, Math.min(value, maxStars));
+
+               for (var i = 1; i <= maxStars; i++) {
+                       var nextStar = star.cloneNode(true);
+                       nextStar.innerHTML = i <= value ? starActive : starInactive;
+
+                       stars.appendChild(nextStar);
+               }
+
+               element.style.whiteSpace = "nowrap";
+               element.style.overflow = "hidden";
+               element.style.textOverflow = "ellipsis";
+
+               element.setAttribute("aria-label", value);
+
+               return stars;
+       },
+
+       traffic: function traffic(cell, formatterParams, onRendered) {
+               var value = this.sanitizeHTML(cell.getValue()) || 0,
+                   el = document.createElement("span"),
+                   max = formatterParams && formatterParams.max ? formatterParams.max : 100,
+                   min = formatterParams && formatterParams.min ? formatterParams.min : 0,
+                   colors = formatterParams && typeof formatterParams.color !== "undefined" ? formatterParams.color : ["red", "orange", "green"],
+                   color = "#666666",
+                   percent,
+                   percentValue;
+
+               if (isNaN(value) || typeof cell.getValue() === "undefined") {
+                       return;
+               }
+
+               el.classList.add("tabulator-traffic-light");
+
+               //make sure value is in range
+               percentValue = parseFloat(value) <= max ? parseFloat(value) : max;
+               percentValue = parseFloat(percentValue) >= min ? parseFloat(percentValue) : min;
+
+               //workout percentage
+               percent = (max - min) / 100;
+               percentValue = Math.round((percentValue - min) / percent);
+
+               //set color
+               switch (typeof colors === 'undefined' ? 'undefined' : _typeof(colors)) {
+                       case "string":
+                               color = colors;
+                               break;
+                       case "function":
+                               color = colors(value);
+                               break;
+                       case "object":
+                               if (Array.isArray(colors)) {
+                                       var unit = 100 / colors.length;
+                                       var index = Math.floor(percentValue / unit);
+
+                                       index = Math.min(index, colors.length - 1);
+                                       index = Math.max(index, 0);
+                                       color = colors[index];
+                                       break;
+                               }
+               }
+
+               el.style.backgroundColor = color;
+
+               return el;
+       },
+
+       //progress bar
+       progress: function progress(cell, formatterParams, onRendered) {
+               //progress bar
+               var value = this.sanitizeHTML(cell.getValue()) || 0,
+                   element = cell.getElement(),
+                   max = formatterParams && formatterParams.max ? formatterParams.max : 100,
+                   min = formatterParams && formatterParams.min ? formatterParams.min : 0,
+                   legendAlign = formatterParams && formatterParams.legendAlign ? formatterParams.legendAlign : "center",
+                   percent,
+                   percentValue,
+                   color,
+                   legend,
+                   legendColor,
+                   top,
+                   left,
+                   right,
+                   bottom;
+
+               //make sure value is in range
+               percentValue = parseFloat(value) <= max ? parseFloat(value) : max;
+               percentValue = parseFloat(percentValue) >= min ? parseFloat(percentValue) : min;
+
+               //workout percentage
+               percent = (max - min) / 100;
+               percentValue = Math.round((percentValue - min) / percent);
+
+               //set bar color
+               switch (_typeof(formatterParams.color)) {
+                       case "string":
+                               color = formatterParams.color;
+                               break;
+                       case "function":
+                               color = formatterParams.color(value);
+                               break;
+                       case "object":
+                               if (Array.isArray(formatterParams.color)) {
+                                       var unit = 100 / formatterParams.color.length;
+                                       var index = Math.floor(percentValue / unit);
+
+                                       index = Math.min(index, formatterParams.color.length - 1);
+                                       index = Math.max(index, 0);
+                                       color = formatterParams.color[index];
+                                       break;
+                               }
+                       default:
+                               color = "#2DC214";
+               }
+
+               //generate legend
+               switch (_typeof(formatterParams.legend)) {
+                       case "string":
+                               legend = formatterParams.legend;
+                               break;
+                       case "function":
+                               legend = formatterParams.legend(value);
+                               break;
+                       case "boolean":
+                               legend = value;
+                               break;
+                       default:
+                               legend = false;
+               }
+
+               //set legend color
+               switch (_typeof(formatterParams.legendColor)) {
+                       case "string":
+                               legendColor = formatterParams.legendColor;
+                               break;
+                       case "function":
+                               legendColor = formatterParams.legendColor(value);
+                               break;
+                       case "object":
+                               if (Array.isArray(formatterParams.legendColor)) {
+                                       var unit = 100 / formatterParams.legendColor.length;
+                                       var index = Math.floor(percentValue / unit);
+
+                                       index = Math.min(index, formatterParams.legendColor.length - 1);
+                                       index = Math.max(index, 0);
+                                       legendColor = formatterParams.legendColor[index];
+                               }
+                               break;
+                       default:
+                               legendColor = "#000";
+               }
+
+               element.style.minWidth = "30px";
+               element.style.position = "relative";
+
+               element.setAttribute("aria-label", percentValue);
+
+               var barEl = document.createElement("div");
+               barEl.style.display = "inline-block";
+               barEl.style.position = "relative";
+               barEl.style.width = percentValue + "%";
+               barEl.style.backgroundColor = color;
+               barEl.style.height = "100%";
+
+               barEl.setAttribute('data-max', max);
+               barEl.setAttribute('data-min', min);
+
+               if (legend) {
+                       var legendEl = document.createElement("div");
+                       legendEl.style.position = "absolute";
+                       legendEl.style.top = "4px";
+                       legendEl.style.left = 0;
+                       legendEl.style.textAlign = legendAlign;
+                       legendEl.style.width = "100%";
+                       legendEl.style.color = legendColor;
+                       legendEl.innerHTML = legend;
+               }
+
+               onRendered(function () {
+
+                       //handle custom element needed if formatter is to be included in printed/downloaded output
+                       if (!(cell instanceof CellComponent)) {
+                               var holderEl = document.createElement("div");
+                               holderEl.style.position = "absolute";
+                               holderEl.style.top = "4px";
+                               holderEl.style.bottom = "4px";
+                               holderEl.style.left = "4px";
+                               holderEl.style.right = "4px";
+
+                               element.appendChild(holderEl);
+
+                               element = holderEl;
+                       }
+
+                       element.appendChild(barEl);
+
+                       if (legend) {
+                               element.appendChild(legendEl);
+                       }
+               });
+
+               return "";
+       },
+
+       //background color
+       color: function color(cell, formatterParams, onRendered) {
+               cell.getElement().style.backgroundColor = this.sanitizeHTML(cell.getValue());
+               return "";
+       },
+
+       //tick icon
+       buttonTick: function buttonTick(cell, formatterParams, onRendered) {
+               return '<svg enable-background="new 0 0 24 24" height="14" width="14" viewBox="0 0 24 24" xml:space="preserve" ><path fill="#2DC214" clip-rule="evenodd" d="M21.652,3.211c-0.293-0.295-0.77-0.295-1.061,0L9.41,14.34  c-0.293,0.297-0.771,0.297-1.062,0L3.449,9.351C3.304,9.203,3.114,9.13,2.923,9.129C2.73,9.128,2.534,9.201,2.387,9.351  l-2.165,1.946C0.078,11.445,0,11.63,0,11.823c0,0.194,0.078,0.397,0.223,0.544l4.94,5.184c0.292,0.296,0.771,0.776,1.062,1.07  l2.124,2.141c0.292,0.293,0.769,0.293,1.062,0l14.366-14.34c0.293-0.294,0.293-0.777,0-1.071L21.652,3.211z" fill-rule="evenodd"/></svg>';
+       },
+
+       //cross icon
+       buttonCross: function buttonCross(cell, formatterParams, onRendered) {
+               return '<svg enable-background="new 0 0 24 24" height="14" width="14" viewBox="0 0 24 24" xml:space="preserve" ><path fill="#CE1515" d="M22.245,4.015c0.313,0.313,0.313,0.826,0,1.139l-6.276,6.27c-0.313,0.312-0.313,0.826,0,1.14l6.273,6.272  c0.313,0.313,0.313,0.826,0,1.14l-2.285,2.277c-0.314,0.312-0.828,0.312-1.142,0l-6.271-6.271c-0.313-0.313-0.828-0.313-1.141,0  l-6.276,6.267c-0.313,0.313-0.828,0.313-1.141,0l-2.282-2.28c-0.313-0.313-0.313-0.826,0-1.14l6.278-6.269  c0.313-0.312,0.313-0.826,0-1.14L1.709,5.147c-0.314-0.313-0.314-0.827,0-1.14l2.284-2.278C4.308,1.417,4.821,1.417,5.135,1.73  L11.405,8c0.314,0.314,0.828,0.314,1.141,0.001l6.276-6.267c0.312-0.312,0.826-0.312,1.141,0L22.245,4.015z"/></svg>';
+       },
+
+       //current row number
+       rownum: function rownum(cell, formatterParams, onRendered) {
+               return this.table.rowManager.activeRows.indexOf(cell.getRow()._getSelf()) + 1;
+       },
+
+       //row handle
+       handle: function handle(cell, formatterParams, onRendered) {
+               cell.getElement().classList.add("tabulator-row-handle");
+               return "<div class='tabulator-row-handle-box'><div class='tabulator-row-handle-bar'></div><div class='tabulator-row-handle-bar'></div><div class='tabulator-row-handle-bar'></div></div>";
+       },
+
+       responsiveCollapse: function responsiveCollapse(cell, formatterParams, onRendered) {
+               var self = this,
+                   open = false,
+                   el = document.createElement("div"),
+                   config = cell.getRow()._row.modules.responsiveLayout;
+
+               el.classList.add("tabulator-responsive-collapse-toggle");
+               el.innerHTML = "<span class='tabulator-responsive-collapse-toggle-open'>+</span><span class='tabulator-responsive-collapse-toggle-close'>-</span>";
+
+               cell.getElement().classList.add("tabulator-row-handle");
+
+               function toggleList(isOpen) {
+                       var collapseEl = config.element;
+
+                       config.open = isOpen;
+
+                       if (collapseEl) {
+
+                               if (config.open) {
+                                       el.classList.add("open");
+                                       collapseEl.style.display = '';
+                               } else {
+                                       el.classList.remove("open");
+                                       collapseEl.style.display = 'none';
+                               }
+                       }
+               }
+
+               el.addEventListener("click", function (e) {
+                       e.stopImmediatePropagation();
+                       toggleList(!config.open);
+               });
+
+               toggleList(config.open);
+
+               return el;
+       },
+
+       rowSelection: function rowSelection(cell, formatterParams, onRendered) {
+               var _this64 = this;
+
+               var checkbox = document.createElement("input");
+
+               checkbox.type = 'checkbox';
+
+               if (this.table.modExists("selectRow", true)) {
+
+                       checkbox.addEventListener("click", function (e) {
+                               e.stopPropagation();
+                       });
+
+                       if (typeof cell.getRow == 'function') {
+                               var row = cell.getRow();
+
+                               if (row instanceof RowComponent) {
+
+                                       checkbox.addEventListener("change", function (e) {
+                                               row.toggleSelect();
+                                       });
+
+                                       checkbox.checked = row.isSelected && row.isSelected();
+                                       this.table.modules.selectRow.registerRowSelectCheckbox(row, checkbox);
+                               } else {
+                                       checkbox = "";
+                               }
+                       } else {
+                               checkbox.addEventListener("change", function (e) {
+                                       if (_this64.table.modules.selectRow.selectedRows.length) {
+                                               _this64.table.deselectRow();
+                                       } else {
+                                               _this64.table.selectRow(formatterParams.rowRange);
+                                       }
+                               });
+
+                               this.table.modules.selectRow.registerHeaderSelectCheckbox(checkbox);
+                       }
+               }
+               return checkbox;
+       }
+};
+
+Tabulator.prototype.registerModule("format", Format);
+
+var FrozenColumns = function FrozenColumns(table) {
+       this.table = table; //hold Tabulator object
+       this.leftColumns = [];
+       this.rightColumns = [];
+       this.leftMargin = 0;
+       this.rightMargin = 0;
+       this.rightPadding = 0;
+       this.initializationMode = "left";
+       this.active = false;
+       this.scrollEndTimer = false;
+};
+
+//reset initial state
+FrozenColumns.prototype.reset = function () {
+       this.initializationMode = "left";
+       this.leftColumns = [];
+       this.rightColumns = [];
+       this.leftMargin = 0;
+       this.rightMargin = 0;
+       this.rightMargin = 0;
+       this.active = false;
+
+       this.table.columnManager.headersElement.style.marginLeft = 0;
+       this.table.columnManager.element.style.paddingRight = 0;
+};
+
+//initialize specific column
+FrozenColumns.prototype.initializeColumn = function (column) {
+       var config = { margin: 0, edge: false };
+
+       if (!column.isGroup) {
+
+               if (this.frozenCheck(column)) {
+
+                       config.position = this.initializationMode;
+
+                       if (this.initializationMode == "left") {
+                               this.leftColumns.push(column);
+                       } else {
+                               this.rightColumns.unshift(column);
+                       }
+
+                       this.active = true;
+
+                       column.modules.frozen = config;
+               } else {
+                       this.initializationMode = "right";
+               }
+       }
+};
+
+FrozenColumns.prototype.frozenCheck = function (column) {
+       var frozen = false;
+
+       if (column.parent.isGroup && column.definition.frozen) {
+               console.warn("Frozen Column Error - Parent column group must be frozen, not individual columns or sub column groups");
+       }
+
+       if (column.parent.isGroup) {
+               return this.frozenCheck(column.parent);
+       } else {
+               return column.definition.frozen;
+       }
+
+       return frozen;
+};
+
+//quick layout to smooth horizontal scrolling
+FrozenColumns.prototype.scrollHorizontal = function () {
+       var _this65 = this;
+
+       var rows;
+
+       if (this.active) {
+               clearTimeout(this.scrollEndTimer);
+
+               //layout all rows after scroll is complete
+               this.scrollEndTimer = setTimeout(function () {
+                       _this65.layout();
+               }, 100);
+
+               rows = this.table.rowManager.getVisibleRows();
+
+               this.calcMargins();
+
+               this.layoutColumnPosition();
+
+               this.layoutCalcRows();
+
+               rows.forEach(function (row) {
+                       if (row.type === "row") {
+                               _this65.layoutRow(row);
+                       }
+               });
+
+               this.table.rowManager.tableElement.style.marginRight = this.rightMargin;
+       }
+};
+
+//calculate margins for rows
+FrozenColumns.prototype.calcMargins = function () {
+       this.leftMargin = this._calcSpace(this.leftColumns, this.leftColumns.length) + "px";
+       this.table.columnManager.headersElement.style.marginLeft = this.leftMargin;
+
+       this.rightMargin = this._calcSpace(this.rightColumns, this.rightColumns.length) + "px";
+       this.table.columnManager.element.style.paddingRight = this.rightMargin;
+
+       //calculate right frozen columns
+       this.rightPadding = this.table.rowManager.element.clientWidth + this.table.columnManager.scrollLeft;
+};
+
+//layout calculation rows
+FrozenColumns.prototype.layoutCalcRows = function () {
+       if (this.table.modExists("columnCalcs")) {
+               if (this.table.modules.columnCalcs.topInitialized && this.table.modules.columnCalcs.topRow) {
+                       this.layoutRow(this.table.modules.columnCalcs.topRow);
+               }
+               if (this.table.modules.columnCalcs.botInitialized && this.table.modules.columnCalcs.botRow) {
+                       this.layoutRow(this.table.modules.columnCalcs.botRow);
+               }
+       }
+};
+
+//calculate column positions and layout headers
+FrozenColumns.prototype.layoutColumnPosition = function (allCells) {
+       var _this66 = this;
+
+       var leftParents = [];
+
+       this.leftColumns.forEach(function (column, i) {
+               column.modules.frozen.margin = _this66._calcSpace(_this66.leftColumns, i) + _this66.table.columnManager.scrollLeft + "px";
+
+               if (i == _this66.leftColumns.length - 1) {
+                       column.modules.frozen.edge = true;
+               } else {
+                       column.modules.frozen.edge = false;
+               }
+
+               if (column.parent.isGroup) {
+                       var parentEl = _this66.getColGroupParentElement(column);
+                       if (!leftParents.includes(parentEl)) {
+                               _this66.layoutElement(parentEl, column);
+                               leftParents.push(parentEl);
+                       }
+
+                       if (column.modules.frozen.edge) {
+                               parentEl.classList.add("tabulator-frozen-" + column.modules.frozen.position);
+                       }
+               } else {
+                       _this66.layoutElement(column.getElement(), column);
+               }
+
+               if (allCells) {
+                       column.cells.forEach(function (cell) {
+                               _this66.layoutElement(cell.getElement(), column);
+                       });
+               }
+       });
+
+       this.rightColumns.forEach(function (column, i) {
+               column.modules.frozen.margin = _this66.rightPadding - _this66._calcSpace(_this66.rightColumns, i + 1) + "px";
+
+               if (i == _this66.rightColumns.length - 1) {
+                       column.modules.frozen.edge = true;
+               } else {
+                       column.modules.frozen.edge = false;
+               }
+
+               if (column.parent.isGroup) {
+                       _this66.layoutElement(_this66.getColGroupParentElement(column), column);
+               } else {
+                       _this66.layoutElement(column.getElement(), column);
+               }
+
+               if (allCells) {
+                       column.cells.forEach(function (cell) {
+                               _this66.layoutElement(cell.getElement(), column);
+                       });
+               }
+       });
+};
+
+FrozenColumns.prototype.getColGroupParentElement = function (column) {
+       return column.parent.isGroup ? this.getColGroupParentElement(column.parent) : column.getElement();
+};
+
+//layout columns appropropriatly
+FrozenColumns.prototype.layout = function () {
+       var self = this,
+           rightMargin = 0;
+
+       if (self.active) {
+
+               //calculate row padding
+               this.calcMargins();
+
+               // self.table.rowManager.activeRows.forEach(function(row){
+               //      self.layoutRow(row);
+               // });
+
+               // if(self.table.options.dataTree){
+               self.table.rowManager.getDisplayRows().forEach(function (row) {
+                       if (row.type === "row") {
+                               self.layoutRow(row);
+                       }
+               });
+               // }
+
+               this.layoutCalcRows();
+
+               //calculate left columns
+               this.layoutColumnPosition(true);
+
+               // if(tableHolder.scrollHeight > tableHolder.clientHeight){
+               //      rightMargin -= tableHolder.offsetWidth - tableHolder.clientWidth;
+               // }
+
+               this.table.rowManager.tableElement.style.marginRight = this.rightMargin;
+       }
+};
+
+FrozenColumns.prototype.layoutRow = function (row) {
+       var _this67 = this;
+
+       var rowEl = row.getElement();
+
+       rowEl.style.paddingLeft = this.leftMargin;
+       // rowEl.style.paddingRight = this.rightMargin + "px";
+
+       this.leftColumns.forEach(function (column) {
+               var cell = row.getCell(column);
+
+               if (cell) {
+                       _this67.layoutElement(cell.getElement(), column);
+               }
+       });
+
+       this.rightColumns.forEach(function (column) {
+               var cell = row.getCell(column);
+
+               if (cell) {
+                       _this67.layoutElement(cell.getElement(), column);
+               }
+       });
+};
+
+FrozenColumns.prototype.layoutElement = function (element, column) {
+
+       if (column.modules.frozen) {
+               element.style.position = "absolute";
+               element.style.left = column.modules.frozen.margin;
+
+               element.classList.add("tabulator-frozen");
+
+               if (column.modules.frozen.edge) {
+                       element.classList.add("tabulator-frozen-" + column.modules.frozen.position);
+               }
+       }
+};
+
+FrozenColumns.prototype._calcSpace = function (columns, index) {
+       var width = 0;
+
+       for (var _i12 = 0; _i12 < index; _i12++) {
+               if (columns[_i12].visible) {
+                       width += columns[_i12].getWidth();
+               }
+       }
+
+       return width;
+};
+
+Tabulator.prototype.registerModule("frozenColumns", FrozenColumns);
+var FrozenRows = function FrozenRows(table) {
+       this.table = table; //hold Tabulator object
+       this.topElement = document.createElement("div");
+       this.rows = [];
+       this.displayIndex = 0; //index in display pipeline
+};
+
+FrozenRows.prototype.initialize = function () {
+       this.rows = [];
+
+       this.topElement.classList.add("tabulator-frozen-rows-holder");
+
+       // this.table.columnManager.element.append(this.topElement);
+       this.table.columnManager.getElement().insertBefore(this.topElement, this.table.columnManager.headersElement.nextSibling);
+};
+
+FrozenRows.prototype.setDisplayIndex = function (index) {
+       this.displayIndex = index;
+};
+
+FrozenRows.prototype.getDisplayIndex = function () {
+       return this.displayIndex;
+};
+
+FrozenRows.prototype.isFrozen = function () {
+       return !!this.rows.length;
+};
+
+//filter frozen rows out of display data
+FrozenRows.prototype.getRows = function (rows) {
+       var self = this,
+           frozen = [],
+           output = rows.slice(0);
+
+       this.rows.forEach(function (row) {
+               var index = output.indexOf(row);
+
+               if (index > -1) {
+                       output.splice(index, 1);
+               }
+       });
+
+       return output;
+};
+
+FrozenRows.prototype.freezeRow = function (row) {
+       if (!row.modules.frozen) {
+               row.modules.frozen = true;
+               this.topElement.appendChild(row.getElement());
+               row.initialize();
+               row.normalizeHeight();
+               this.table.rowManager.adjustTableSize();
+
+               this.rows.push(row);
+
+               this.table.rowManager.refreshActiveData("display");
+
+               this.styleRows();
+       } else {
+               console.warn("Freeze Error - Row is already frozen");
+       }
+};
+
+FrozenRows.prototype.unfreezeRow = function (row) {
+       var index = this.rows.indexOf(row);
+
+       if (row.modules.frozen) {
+
+               row.modules.frozen = false;
+
+               this.detachRow(row);
+
+               this.table.rowManager.adjustTableSize();
+
+               this.table.rowManager.refreshActiveData("display");
+
+               if (this.rows.length) {
+                       this.styleRows();
+               }
+       } else {
+               console.warn("Freeze Error - Row is already unfrozen");
+       }
+};
+
+FrozenRows.prototype.detachRow = function (row) {
+       var index = this.rows.indexOf(row);
+
+       if (index > -1) {
+               var rowEl = row.getElement();
+               rowEl.parentNode.removeChild(rowEl);
+
+               this.rows.splice(index, 1);
+       }
+};
+
+FrozenRows.prototype.styleRows = function (row) {
+       var self = this;
+
+       this.rows.forEach(function (row, i) {
+               self.table.rowManager.styleRow(row, i);
+       });
+};
+
+Tabulator.prototype.registerModule("frozenRows", FrozenRows);
+
+//public group object
+var GroupComponent = function GroupComponent(group) {
+       this._group = group;
+       this.type = "GroupComponent";
+};
+
+GroupComponent.prototype.getKey = function () {
+       return this._group.key;
+};
+
+GroupComponent.prototype.getField = function () {
+       return this._group.field;
+};
+
+GroupComponent.prototype.getElement = function () {
+       return this._group.element;
+};
+
+GroupComponent.prototype.getRows = function () {
+       return this._group.getRows(true);
+};
+
+GroupComponent.prototype.getSubGroups = function () {
+       return this._group.getSubGroups(true);
+};
+
+GroupComponent.prototype.getParentGroup = function () {
+       return this._group.parent ? this._group.parent.getComponent() : false;
+};
+
+GroupComponent.prototype.getVisibility = function () {
+       console.warn("getVisibility function is deprecated, you should now use the isVisible function");
+       return this._group.visible;
+};
+
+GroupComponent.prototype.isVisible = function () {
+       return this._group.visible;
+};
+
+GroupComponent.prototype.show = function () {
+       this._group.show();
+};
+
+GroupComponent.prototype.hide = function () {
+       this._group.hide();
+};
+
+GroupComponent.prototype.toggle = function () {
+       this._group.toggleVisibility();
+};
+
+GroupComponent.prototype._getSelf = function () {
+       return this._group;
+};
+
+GroupComponent.prototype.getTable = function () {
+       return this._group.groupManager.table;
+};
+
+//////////////////////////////////////////////////
+//////////////// Group Functions /////////////////
+//////////////////////////////////////////////////
+
+var Group = function Group(groupManager, parent, level, key, field, generator, oldGroup) {
+
+       this.groupManager = groupManager;
+       this.parent = parent;
+       this.key = key;
+       this.level = level;
+       this.field = field;
+       this.hasSubGroups = level < groupManager.groupIDLookups.length - 1;
+       this.addRow = this.hasSubGroups ? this._addRowToGroup : this._addRow;
+       this.type = "group"; //type of element
+       this.old = oldGroup;
+       this.rows = [];
+       this.groups = [];
+       this.groupList = [];
+       this.generator = generator;
+       this.elementContents = false;
+       this.height = 0;
+       this.outerHeight = 0;
+       this.initialized = false;
+       this.calcs = {};
+       this.initialized = false;
+       this.modules = {};
+       this.arrowElement = false;
+
+       this.visible = oldGroup ? oldGroup.visible : typeof groupManager.startOpen[level] !== "undefined" ? groupManager.startOpen[level] : groupManager.startOpen[0];
+
+       this.component = null;
+
+       this.createElements();
+       this.addBindings();
+
+       this.createValueGroups();
+};
+
+Group.prototype.wipe = function () {
+       if (this.groupList.length) {
+               this.groupList.forEach(function (group) {
+                       group.wipe();
+               });
+       } else {
+               this.element = false;
+               this.arrowElement = false;
+               this.elementContents = false;
+       }
+};
+
+Group.prototype.createElements = function () {
+       var arrow = document.createElement("div");
+       arrow.classList.add("tabulator-arrow");
+
+       this.element = document.createElement("div");
+       this.element.classList.add("tabulator-row");
+       this.element.classList.add("tabulator-group");
+       this.element.classList.add("tabulator-group-level-" + this.level);
+       this.element.setAttribute("role", "rowgroup");
+
+       this.arrowElement = document.createElement("div");
+       this.arrowElement.classList.add("tabulator-group-toggle");
+       this.arrowElement.appendChild(arrow);
+
+       //setup movable rows
+       if (this.groupManager.table.options.movableRows !== false && this.groupManager.table.modExists("moveRow")) {
+               this.groupManager.table.modules.moveRow.initializeGroupHeader(this);
+       }
+};
+
+Group.prototype.createValueGroups = function () {
+       var _this68 = this;
+
+       var level = this.level + 1;
+       if (this.groupManager.allowedValues && this.groupManager.allowedValues[level]) {
+               this.groupManager.allowedValues[level].forEach(function (value) {
+                       _this68._createGroup(value, level);
+               });
+       }
+};
+
+Group.prototype.addBindings = function () {
+       var self = this,
+           dblTap,
+           tapHold,
+           tap,
+           toggleElement;
+
+       //handle group click events
+       if (self.groupManager.table.options.groupClick) {
+               self.element.addEventListener("click", function (e) {
+                       self.groupManager.table.options.groupClick.call(self.groupManager.table, e, self.getComponent());
+               });
+       }
+
+       if (self.groupManager.table.options.groupDblClick) {
+               self.element.addEventListener("dblclick", function (e) {
+                       self.groupManager.table.options.groupDblClick.call(self.groupManager.table, e, self.getComponent());
+               });
+       }
+
+       if (self.groupManager.table.options.groupContext) {
+               self.element.addEventListener("contextmenu", function (e) {
+                       self.groupManager.table.options.groupContext.call(self.groupManager.table, e, self.getComponent());
+               });
+       }
+
+       if ((self.groupManager.table.options.groupContextMenu || self.groupManager.table.options.groupClickMenu) && self.groupManager.table.modExists("menu")) {
+               self.groupManager.table.modules.menu.initializeGroup.call(self.groupManager.table.modules.menu, self);
+       }
+
+       if (self.groupManager.table.options.groupTap) {
+
+               tap = false;
+
+               self.element.addEventListener("touchstart", function (e) {
+                       tap = true;
+               }, { passive: true });
+
+               self.element.addEventListener("touchend", function (e) {
+                       if (tap) {
+                               self.groupManager.table.options.groupTap(e, self.getComponent());
+                       }
+
+                       tap = false;
+               });
+       }
+
+       if (self.groupManager.table.options.groupDblTap) {
+
+               dblTap = null;
+
+               self.element.addEventListener("touchend", function (e) {
+
+                       if (dblTap) {
+                               clearTimeout(dblTap);
+                               dblTap = null;
+
+                               self.groupManager.table.options.groupDblTap(e, self.getComponent());
+                       } else {
+
+                               dblTap = setTimeout(function () {
+                                       clearTimeout(dblTap);
+                                       dblTap = null;
+                               }, 300);
+                       }
+               });
+       }
+
+       if (self.groupManager.table.options.groupTapHold) {
+
+               tapHold = null;
+
+               self.element.addEventListener("touchstart", function (e) {
+                       clearTimeout(tapHold);
+
+                       tapHold = setTimeout(function () {
+                               clearTimeout(tapHold);
+                               tapHold = null;
+                               tap = false;
+                               self.groupManager.table.options.groupTapHold(e, self.getComponent());
+                       }, 1000);
+               }, { passive: true });
+
+               self.element.addEventListener("touchend", function (e) {
+                       clearTimeout(tapHold);
+                       tapHold = null;
+               });
+       }
+
+       if (self.groupManager.table.options.groupToggleElement) {
+               toggleElement = self.groupManager.table.options.groupToggleElement == "arrow" ? self.arrowElement : self.element;
+
+               toggleElement.addEventListener("click", function (e) {
+                       e.stopPropagation();
+                       e.stopImmediatePropagation();
+                       self.toggleVisibility();
+               });
+       }
+};
+
+Group.prototype._createGroup = function (groupID, level) {
+       var groupKey = level + "_" + groupID;
+       var group = new Group(this.groupManager, this, level, groupID, this.groupManager.groupIDLookups[level].field, this.groupManager.headerGenerator[level] || this.groupManager.headerGenerator[0], this.old ? this.old.groups[groupKey] : false);
+
+       this.groups[groupKey] = group;
+       this.groupList.push(group);
+};
+
+Group.prototype._addRowToGroup = function (row) {
+
+       var level = this.level + 1;
+
+       if (this.hasSubGroups) {
+               var groupID = this.groupManager.groupIDLookups[level].func(row.getData()),
+                   groupKey = level + "_" + groupID;
+
+               if (this.groupManager.allowedValues && this.groupManager.allowedValues[level]) {
+                       if (this.groups[groupKey]) {
+                               this.groups[groupKey].addRow(row);
+                       }
+               } else {
+                       if (!this.groups[groupKey]) {
+                               this._createGroup(groupID, level);
+                       }
+
+                       this.groups[groupKey].addRow(row);
+               }
+       }
+};
+
+Group.prototype._addRow = function (row) {
+       this.rows.push(row);
+       row.modules.group = this;
+};
+
+Group.prototype.insertRow = function (row, to, after) {
+       var data = this.conformRowData({});
+
+       row.updateData(data);
+
+       var toIndex = this.rows.indexOf(to);
+
+       if (toIndex > -1) {
+               if (after) {
+                       this.rows.splice(toIndex + 1, 0, row);
+               } else {
+                       this.rows.splice(toIndex, 0, row);
+               }
+       } else {
+               if (after) {
+                       this.rows.push(row);
+               } else {
+                       this.rows.unshift(row);
+               }
+       }
+
+       row.modules.group = this;
+
+       this.generateGroupHeaderContents();
+
+       if (this.groupManager.table.modExists("columnCalcs") && this.groupManager.table.options.columnCalcs != "table") {
+               this.groupManager.table.modules.columnCalcs.recalcGroup(this);
+       }
+
+       this.groupManager.updateGroupRows(true);
+};
+
+Group.prototype.scrollHeader = function (left) {
+       this.arrowElement.style.marginLeft = left;
+
+       this.groupList.forEach(function (child) {
+               child.scrollHeader(left);
+       });
+};
+
+Group.prototype.getRowIndex = function (row) {};
+
+//update row data to match grouping contraints
+Group.prototype.conformRowData = function (data) {
+       if (this.field) {
+               data[this.field] = this.key;
+       } else {
+               console.warn("Data Conforming Error - Cannot conform row data to match new group as groupBy is a function");
+       }
+
+       if (this.parent) {
+               data = this.parent.conformRowData(data);
+       }
+
+       return data;
+};
+
+Group.prototype.removeRow = function (row) {
+       var index = this.rows.indexOf(row);
+       var el = row.getElement();
+
+       if (index > -1) {
+               this.rows.splice(index, 1);
+       }
+
+       if (!this.groupManager.table.options.groupValues && !this.rows.length) {
+               if (this.parent) {
+                       this.parent.removeGroup(this);
+               } else {
+                       this.groupManager.removeGroup(this);
+               }
+
+               this.groupManager.updateGroupRows(true);
+       } else {
+
+               if (el.parentNode) {
+                       el.parentNode.removeChild(el);
+               }
+
+               this.generateGroupHeaderContents();
+
+               if (this.groupManager.table.modExists("columnCalcs") && this.groupManager.table.options.columnCalcs != "table") {
+                       this.groupManager.table.modules.columnCalcs.recalcGroup(this);
+               }
+       }
+};
+
+Group.prototype.removeGroup = function (group) {
+       var groupKey = group.level + "_" + group.key,
+           index;
+
+       if (this.groups[groupKey]) {
+               delete this.groups[groupKey];
+
+               index = this.groupList.indexOf(group);
+
+               if (index > -1) {
+                       this.groupList.splice(index, 1);
+               }
+
+               if (!this.groupList.length) {
+                       if (this.parent) {
+                               this.parent.removeGroup(this);
+                       } else {
+                               this.groupManager.removeGroup(this);
+                       }
+               }
+       }
+};
+
+Group.prototype.getHeadersAndRows = function (noCalc) {
+       var output = [];
+
+       output.push(this);
+
+       this._visSet();
+
+       if (this.visible) {
+               if (this.groupList.length) {
+                       this.groupList.forEach(function (group) {
+                               output = output.concat(group.getHeadersAndRows(noCalc));
+                       });
+               } else {
+                       if (!noCalc && this.groupManager.table.options.columnCalcs != "table" && this.groupManager.table.modExists("columnCalcs") && this.groupManager.table.modules.columnCalcs.hasTopCalcs()) {
+                               if (this.calcs.top) {
+                                       this.calcs.top.detachElement();
+                                       this.calcs.top.deleteCells();
+                               }
+
+                               this.calcs.top = this.groupManager.table.modules.columnCalcs.generateTopRow(this.rows);
+                               output.push(this.calcs.top);
+                       }
+
+                       output = output.concat(this.rows);
+
+                       if (!noCalc && this.groupManager.table.options.columnCalcs != "table" && this.groupManager.table.modExists("columnCalcs") && this.groupManager.table.modules.columnCalcs.hasBottomCalcs()) {
+                               if (this.calcs.bottom) {
+                                       this.calcs.bottom.detachElement();
+                                       this.calcs.bottom.deleteCells();
+                               }
+
+                               this.calcs.bottom = this.groupManager.table.modules.columnCalcs.generateBottomRow(this.rows);
+                               output.push(this.calcs.bottom);
+                       }
+               }
+       } else {
+               if (!this.groupList.length && this.groupManager.table.options.columnCalcs != "table") {
+
+                       if (this.groupManager.table.modExists("columnCalcs")) {
+
+                               if (!noCalc && this.groupManager.table.modules.columnCalcs.hasTopCalcs()) {
+                                       if (this.calcs.top) {
+                                               this.calcs.top.detachElement();
+                                               this.calcs.top.deleteCells();
+                                       }
+
+                                       if (this.groupManager.table.options.groupClosedShowCalcs) {
+                                               this.calcs.top = this.groupManager.table.modules.columnCalcs.generateTopRow(this.rows);
+                                               output.push(this.calcs.top);
+                                       }
+                               }
+
+                               if (!noCalc && this.groupManager.table.modules.columnCalcs.hasBottomCalcs()) {
+                                       if (this.calcs.bottom) {
+                                               this.calcs.bottom.detachElement();
+                                               this.calcs.bottom.deleteCells();
+                                       }
+
+                                       if (this.groupManager.table.options.groupClosedShowCalcs) {
+                                               this.calcs.bottom = this.groupManager.table.modules.columnCalcs.generateBottomRow(this.rows);
+                                               output.push(this.calcs.bottom);
+                                       }
+                               }
+                       }
+               }
+       }
+
+       return output;
+};
+
+Group.prototype.getData = function (visible, transform) {
+       var self = this,
+           output = [];
+
+       this._visSet();
+
+       if (!visible || visible && this.visible) {
+               this.rows.forEach(function (row) {
+                       output.push(row.getData(transform || "data"));
+               });
+       }
+
+       return output;
+};
+
+// Group.prototype.getRows = function(){
+//     this._visSet();
+
+//     return this.visible ? this.rows : [];
+// };
+
+Group.prototype.getRowCount = function () {
+       var count = 0;
+
+       if (this.groupList.length) {
+               this.groupList.forEach(function (group) {
+                       count += group.getRowCount();
+               });
+       } else {
+               count = this.rows.length;
+       }
+       return count;
+};
+
+Group.prototype.toggleVisibility = function () {
+       if (this.visible) {
+               this.hide();
+       } else {
+               this.show();
+       }
+};
+
+Group.prototype.hide = function () {
+       this.visible = false;
+
+       if (this.groupManager.table.rowManager.getRenderMode() == "classic" && !this.groupManager.table.options.pagination) {
+
+               this.element.classList.remove("tabulator-group-visible");
+
+               if (this.groupList.length) {
+                       this.groupList.forEach(function (group) {
+
+                               var rows = group.getHeadersAndRows();
+
+                               rows.forEach(function (row) {
+                                       row.detachElement();
+                               });
+                       });
+               } else {
+                       this.rows.forEach(function (row) {
+                               var rowEl = row.getElement();
+                               rowEl.parentNode.removeChild(rowEl);
+                       });
+               }
+
+               this.groupManager.table.rowManager.setDisplayRows(this.groupManager.updateGroupRows(), this.groupManager.getDisplayIndex());
+
+               this.groupManager.table.rowManager.checkClassicModeGroupHeaderWidth();
+       } else {
+               this.groupManager.updateGroupRows(true);
+       }
+
+       this.groupManager.table.options.groupVisibilityChanged.call(this.table, this.getComponent(), false);
+};
+
+Group.prototype.show = function () {
+       var self = this;
+
+       self.visible = true;
+
+       if (this.groupManager.table.rowManager.getRenderMode() == "classic" && !this.groupManager.table.options.pagination) {
+
+               this.element.classList.add("tabulator-group-visible");
+
+               var prev = self.getElement();
+
+               if (this.groupList.length) {
+                       this.groupList.forEach(function (group) {
+                               var rows = group.getHeadersAndRows();
+
+                               rows.forEach(function (row) {
+                                       var rowEl = row.getElement();
+                                       prev.parentNode.insertBefore(rowEl, prev.nextSibling);
+                                       row.initialize();
+                                       prev = rowEl;
+                               });
+                       });
+               } else {
+                       self.rows.forEach(function (row) {
+                               var rowEl = row.getElement();
+                               prev.parentNode.insertBefore(rowEl, prev.nextSibling);
+                               row.initialize();
+                               prev = rowEl;
+                       });
+               }
+
+               this.groupManager.table.rowManager.setDisplayRows(this.groupManager.updateGroupRows(), this.groupManager.getDisplayIndex());
+
+               this.groupManager.table.rowManager.checkClassicModeGroupHeaderWidth();
+       } else {
+               this.groupManager.updateGroupRows(true);
+       }
+
+       this.groupManager.table.options.groupVisibilityChanged.call(this.table, this.getComponent(), true);
+};
+
+Group.prototype._visSet = function () {
+       var data = [];
+
+       if (typeof this.visible == "function") {
+
+               this.rows.forEach(function (row) {
+                       data.push(row.getData());
+               });
+
+               this.visible = this.visible(this.key, this.getRowCount(), data, this.getComponent());
+       }
+};
+
+Group.prototype.getRowGroup = function (row) {
+       var match = false;
+       if (this.groupList.length) {
+               this.groupList.forEach(function (group) {
+                       var result = group.getRowGroup(row);
+
+                       if (result) {
+                               match = result;
+                       }
+               });
+       } else {
+               if (this.rows.find(function (item) {
+                       return item === row;
+               })) {
+                       match = this;
+               }
+       }
+
+       return match;
+};
+
+Group.prototype.getSubGroups = function (component) {
+       var output = [];
+
+       this.groupList.forEach(function (child) {
+               output.push(component ? child.getComponent() : child);
+       });
+
+       return output;
+};
+
+Group.prototype.getRows = function (compoment) {
+       var output = [];
+
+       this.rows.forEach(function (row) {
+               output.push(compoment ? row.getComponent() : row);
+       });
+
+       return output;
+};
+
+Group.prototype.generateGroupHeaderContents = function () {
+       var data = [];
+
+       this.rows.forEach(function (row) {
+               data.push(row.getData());
+       });
+
+       this.elementContents = this.generator(this.key, this.getRowCount(), data, this.getComponent());
+
+       while (this.element.firstChild) {
+               this.element.removeChild(this.element.firstChild);
+       }if (typeof this.elementContents === "string") {
+               this.element.innerHTML = this.elementContents;
+       } else {
+               this.element.appendChild(this.elementContents);
+       }
+
+       this.element.insertBefore(this.arrowElement, this.element.firstChild);
+};
+
+Group.prototype.getPath = function () {
+       var path = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
+
+       path.unshift(this.key);
+       if (this.parent) {
+               this.parent.getPath(path);
+       }
+       return path;
+};
+////////////// Standard Row Functions //////////////
+
+Group.prototype.getElement = function () {
+       this.addBindingsd = false;
+
+       this._visSet();
+
+       if (this.visible) {
+               this.element.classList.add("tabulator-group-visible");
+       } else {
+               this.element.classList.remove("tabulator-group-visible");
+       }
+
+       for (var i = 0; i < this.element.childNodes.length; ++i) {
+               this.element.childNodes[i].parentNode.removeChild(this.element.childNodes[i]);
+       }
+
+       this.generateGroupHeaderContents();
+
+       // this.addBindings();
+
+       return this.element;
+};
+
+Group.prototype.detachElement = function () {
+       if (this.element && this.element.parentNode) {
+               this.element.parentNode.removeChild(this.element);
+       }
+};
+
+//normalize the height of elements in the row
+Group.prototype.normalizeHeight = function () {
+       this.setHeight(this.element.clientHeight);
+};
+
+Group.prototype.initialize = function (force) {
+       if (!this.initialized || force) {
+               this.normalizeHeight();
+               this.initialized = true;
+       }
+};
+
+Group.prototype.reinitialize = function () {
+       this.initialized = false;
+       this.height = 0;
+
+       if (Tabulator.prototype.helpers.elVisible(this.element)) {
+               this.initialize(true);
+       }
+};
+
+Group.prototype.setHeight = function (height) {
+       if (this.height != height) {
+               this.height = height;
+               this.outerHeight = this.element.offsetHeight;
+       }
+};
+
+//return rows outer height
+Group.prototype.getHeight = function () {
+       return this.outerHeight;
+};
+
+Group.prototype.getGroup = function () {
+       return this;
+};
+
+Group.prototype.reinitializeHeight = function () {};
+Group.prototype.calcHeight = function () {};
+Group.prototype.setCellHeight = function () {};
+Group.prototype.clearCellHeight = function () {};
+
+//////////////// Object Generation /////////////////
+Group.prototype.getComponent = function () {
+       if (!this.component) {
+               this.component = new GroupComponent(this);
+       }
+
+       return this.component;
+};
+
+//////////////////////////////////////////////////
+////////////// Group Row Extension ///////////////
+//////////////////////////////////////////////////
+
+var GroupRows = function GroupRows(table) {
+
+       this.table = table; //hold Tabulator object
+
+       this.groupIDLookups = false; //enable table grouping and set field to group by
+       this.startOpen = [function () {
+               return false;
+       }]; //starting state of group
+       this.headerGenerator = [function () {
+               return "";
+       }];
+       this.groupList = []; //ordered list of groups
+       this.allowedValues = false;
+       this.groups = {}; //hold row groups
+       this.displayIndex = 0; //index in display pipeline
+};
+
+//initialize group configuration
+GroupRows.prototype.initialize = function () {
+       var self = this,
+           groupBy = self.table.options.groupBy,
+           startOpen = self.table.options.groupStartOpen,
+           groupHeader = self.table.options.groupHeader;
+
+       this.allowedValues = self.table.options.groupValues;
+
+       if (Array.isArray(groupBy) && Array.isArray(groupHeader) && groupBy.length > groupHeader.length) {
+               console.warn("Error creating group headers, groupHeader array is shorter than groupBy array");
+       }
+
+       self.headerGenerator = [function () {
+               return "";
+       }];
+       this.startOpen = [function () {
+               return false;
+       }]; //starting state of group
+
+       self.table.modules.localize.bind("groups|item", function (langValue, lang) {
+               self.headerGenerator[0] = function (value, count, data) {
+                       //header layout function
+                       return (typeof value === "undefined" ? "" : value) + "<span>(" + count + " " + (count === 1 ? langValue : lang.groups.items) + ")</span>";
+               };
+       });
+
+       this.groupIDLookups = [];
+
+       if (Array.isArray(groupBy) || groupBy) {
+               if (this.table.modExists("columnCalcs") && this.table.options.columnCalcs != "table" && this.table.options.columnCalcs != "both") {
+                       this.table.modules.columnCalcs.removeCalcs();
+               }
+       } else {
+               if (this.table.modExists("columnCalcs") && this.table.options.columnCalcs != "group") {
+
+                       var cols = this.table.columnManager.getRealColumns();
+
+                       cols.forEach(function (col) {
+                               if (col.definition.topCalc) {
+                                       self.table.modules.columnCalcs.initializeTopRow();
+                               }
+
+                               if (col.definition.bottomCalc) {
+                                       self.table.modules.columnCalcs.initializeBottomRow();
+                               }
+                       });
+               }
+       }
+
+       if (!Array.isArray(groupBy)) {
+               groupBy = [groupBy];
+       }
+
+       groupBy.forEach(function (group, i) {
+               var lookupFunc, column;
+
+               if (typeof group == "function") {
+                       lookupFunc = group;
+               } else {
+                       column = self.table.columnManager.getColumnByField(group);
+
+                       if (column) {
+                               lookupFunc = function lookupFunc(data) {
+                                       return column.getFieldValue(data);
+                               };
+                       } else {
+                               lookupFunc = function lookupFunc(data) {
+                                       return data[group];
+                               };
+                       }
+               }
+
+               self.groupIDLookups.push({
+                       field: typeof group === "function" ? false : group,
+                       func: lookupFunc,
+                       values: self.allowedValues ? self.allowedValues[i] : false
+               });
+       });
+
+       if (startOpen) {
+
+               if (!Array.isArray(startOpen)) {
+                       startOpen = [startOpen];
+               }
+
+               startOpen.forEach(function (level) {
+                       level = typeof level == "function" ? level : function () {
+                               return true;
+                       };
+               });
+
+               self.startOpen = startOpen;
+       }
+
+       if (groupHeader) {
+               self.headerGenerator = Array.isArray(groupHeader) ? groupHeader : [groupHeader];
+       }
+
+       this.initialized = true;
+};
+
+GroupRows.prototype.setDisplayIndex = function (index) {
+       this.displayIndex = index;
+};
+
+GroupRows.prototype.getDisplayIndex = function () {
+       return this.displayIndex;
+};
+
+//return appropriate rows with group headers
+GroupRows.prototype.getRows = function (rows) {
+       if (this.groupIDLookups.length) {
+
+               this.table.options.dataGrouping.call(this.table);
+
+               this.generateGroups(rows);
+
+               if (this.table.options.dataGrouped) {
+                       this.table.options.dataGrouped.call(this.table, this.getGroups(true));
+               }
+
+               return this.updateGroupRows();
+       } else {
+               return rows.slice(0);
+       }
+};
+
+GroupRows.prototype.getGroups = function (compoment) {
+       var groupComponents = [];
+
+       this.groupList.forEach(function (group) {
+               groupComponents.push(compoment ? group.getComponent() : group);
+       });
+
+       return groupComponents;
+};
+
+GroupRows.prototype.getChildGroups = function (group) {
+       var _this69 = this;
+
+       var groupComponents = [];
+
+       if (!group) {
+               group = this;
+       }
+
+       group.groupList.forEach(function (child) {
+               if (child.groupList.length) {
+                       groupComponents = groupComponents.concat(_this69.getChildGroups(child));
+               } else {
+                       groupComponents.push(child);
+               }
+       });
+
+       return groupComponents;
+};
+
+GroupRows.prototype.wipe = function () {
+       this.groupList.forEach(function (group) {
+               group.wipe();
+       });
+};
+
+GroupRows.prototype.pullGroupListData = function (groupList) {
+       var self = this;
+       var groupListData = [];
+
+       groupList.forEach(function (group) {
+               var groupHeader = {};
+               groupHeader.level = 0;
+               groupHeader.rowCount = 0;
+               groupHeader.headerContent = "";
+               var childData = [];
+
+               if (group.hasSubGroups) {
+                       childData = self.pullGroupListData(group.groupList);
+
+                       groupHeader.level = group.level;
+                       groupHeader.rowCount = childData.length - group.groupList.length; // data length minus number of sub-headers
+                       groupHeader.headerContent = group.generator(group.key, groupHeader.rowCount, group.rows, group);
+
+                       groupListData.push(groupHeader);
+                       groupListData = groupListData.concat(childData);
+               } else {
+                       groupHeader.level = group.level;
+                       groupHeader.headerContent = group.generator(group.key, group.rows.length, group.rows, group);
+                       groupHeader.rowCount = group.getRows().length;
+
+                       groupListData.push(groupHeader);
+
+                       group.getRows().forEach(function (row) {
+                               groupListData.push(row.getData("data"));
+                       });
+               }
+       });
+
+       return groupListData;
+};
+
+GroupRows.prototype.getGroupedData = function () {
+
+       return this.pullGroupListData(this.groupList);
+};
+
+GroupRows.prototype.getRowGroup = function (row) {
+       var match = false;
+
+       this.groupList.forEach(function (group) {
+               var result = group.getRowGroup(row);
+
+               if (result) {
+                       match = result;
+               }
+       });
+
+       return match;
+};
+
+GroupRows.prototype.countGroups = function () {
+       return this.groupList.length;
+};
+
+GroupRows.prototype.generateGroups = function (rows) {
+       var self = this,
+           oldGroups = self.groups;
+
+       self.groups = {};
+       self.groupList = [];
+
+       if (this.allowedValues && this.allowedValues[0]) {
+               this.allowedValues[0].forEach(function (value) {
+                       self.createGroup(value, 0, oldGroups);
+               });
+
+               rows.forEach(function (row) {
+                       self.assignRowToExistingGroup(row, oldGroups);
+               });
+       } else {
+               rows.forEach(function (row) {
+                       self.assignRowToGroup(row, oldGroups);
+               });
+       }
+};
+
+GroupRows.prototype.createGroup = function (groupID, level, oldGroups) {
+       var groupKey = level + "_" + groupID,
+           group;
+
+       oldGroups = oldGroups || [];
+
+       group = new Group(this, false, level, groupID, this.groupIDLookups[0].field, this.headerGenerator[0], oldGroups[groupKey]);
+
+       this.groups[groupKey] = group;
+       this.groupList.push(group);
+};
+
+// GroupRows.prototype.assignRowToGroup = function(row, oldGroups){
+//     var groupID = this.groupIDLookups[0].func(row.getData()),
+//     groupKey = "0_" + groupID;
+
+//     if(!this.groups[groupKey]){
+//             this.createGroup(groupID, 0, oldGroups);
+//     }
+
+//     this.groups[groupKey].addRow(row);
+// };
+
+GroupRows.prototype.assignRowToExistingGroup = function (row, oldGroups) {
+       var groupID = this.groupIDLookups[0].func(row.getData()),
+           groupKey = "0_" + groupID;
+
+       if (this.groups[groupKey]) {
+               this.groups[groupKey].addRow(row);
+       }
+};
+
+GroupRows.prototype.assignRowToGroup = function (row, oldGroups) {
+       var groupID = this.groupIDLookups[0].func(row.getData()),
+           newGroupNeeded = !this.groups["0_" + groupID];
+
+       if (newGroupNeeded) {
+               this.createGroup(groupID, 0, oldGroups);
+       }
+
+       this.groups["0_" + groupID].addRow(row);
+
+       return !newGroupNeeded;
+};
+
+GroupRows.prototype.reassignRowToGroup = function (row) {
+       var oldRowGroup = row.getGroup(),
+           oldGroupPath = oldRowGroup.getPath(),
+           newGroupPath = this.getExpectedPath(row),
+           samePath = true;
+       // figure out if new group path is the same as old group path
+       var samePath = oldGroupPath.length == newGroupPath.length && oldGroupPath.every(function (element, index) {
+               return element === newGroupPath[index];
+       });
+       // refresh if they new path and old path aren't the same (aka the row's groupings have changed)
+       if (!samePath) {
+               oldRowGroup.removeRow(row);
+               this.assignRowToGroup(row, self.groups);
+               this.table.rowManager.refreshActiveData("group", false, true);
+       }
+};
+
+GroupRows.prototype.getExpectedPath = function (row) {
+       var groupPath = [],
+           rowData = row.getData();
+       this.groupIDLookups.forEach(function (groupId) {
+               groupPath.push(groupId.func(rowData));
+       });
+       return groupPath;
+};
+
+GroupRows.prototype.updateGroupRows = function (force) {
+       var self = this,
+           output = [],
+           oldRowCount;
+
+       self.groupList.forEach(function (group) {
+               output = output.concat(group.getHeadersAndRows());
+       });
+
+       //force update of table display
+       if (force) {
+
+               var displayIndex = self.table.rowManager.setDisplayRows(output, this.getDisplayIndex());
+
+               if (displayIndex !== true) {
+                       this.setDisplayIndex(displayIndex);
+               }
+
+               self.table.rowManager.refreshActiveData("group", true, true);
+       }
+
+       return output;
+};
+
+GroupRows.prototype.scrollHeaders = function (left) {
+       if (this.table.options.virtualDomHoz) {
+               left -= this.table.vdomHoz.vDomPadLeft;
+       }
+
+       left = left + "px";
+
+       this.groupList.forEach(function (group) {
+               group.scrollHeader(left);
+       });
+};
+
+GroupRows.prototype.removeGroup = function (group) {
+       var groupKey = group.level + "_" + group.key,
+           index;
+
+       if (this.groups[groupKey]) {
+               delete this.groups[groupKey];
+
+               index = this.groupList.indexOf(group);
+
+               if (index > -1) {
+                       this.groupList.splice(index, 1);
+               }
+       }
+};
+
+Tabulator.prototype.registerModule("groupRows", GroupRows);
+var History = function History(table) {
+       this.table = table; //hold Tabulator object
+
+       this.history = [];
+       this.index = -1;
+};
+
+History.prototype.clear = function () {
+       this.history = [];
+       this.index = -1;
+};
+
+History.prototype.action = function (type, component, data) {
+
+       this.history = this.history.slice(0, this.index + 1);
+
+       this.history.push({
+               type: type,
+               component: component,
+               data: data
+       });
+
+       this.index++;
+};
+
+History.prototype.getHistoryUndoSize = function () {
+       return this.index + 1;
+};
+
+History.prototype.getHistoryRedoSize = function () {
+       return this.history.length - (this.index + 1);
+};
+
+History.prototype.clearComponentHistory = function (component) {
+       var index = this.history.findIndex(function (item) {
+               return item.component === component;
+       });
+
+       if (index > -1) {
+               this.history.splice(index, 1);
+               if (index <= this.index) {
+                       this.index--;
+               }
+
+               this.clearComponentHistory(component);
+       }
+};
+
+History.prototype.undo = function () {
+
+       if (this.index > -1) {
+               var action = this.history[this.index];
+
+               this.undoers[action.type].call(this, action);
+
+               this.index--;
+
+               this.table.options.historyUndo.call(this.table, action.type, action.component.getComponent(), action.data);
+
+               return true;
+       } else {
+               console.warn("History Undo Error - No more history to undo");
+               return false;
+       }
+};
+
+History.prototype.redo = function () {
+       if (this.history.length - 1 > this.index) {
+
+               this.index++;
+
+               var action = this.history[this.index];
+
+               this.redoers[action.type].call(this, action);
+
+               this.table.options.historyRedo.call(this.table, action.type, action.component.getComponent(), action.data);
+
+               return true;
+       } else {
+               console.warn("History Redo Error - No more history to redo");
+               return false;
+       }
+};
+
+History.prototype.undoers = {
+       cellEdit: function cellEdit(action) {
+               action.component.setValueProcessData(action.data.oldValue);
+       },
+
+       rowAdd: function rowAdd(action) {
+               action.component.deleteActual();
+       },
+
+       rowDelete: function rowDelete(action) {
+               var newRow = this.table.rowManager.addRowActual(action.data.data, action.data.pos, action.data.index);
+
+               if (this.table.options.groupBy && this.table.modExists("groupRows")) {
+                       this.table.modules.groupRows.updateGroupRows(true);
+               }
+
+               this._rebindRow(action.component, newRow);
+       },
+
+       rowMove: function rowMove(action) {
+               this.table.rowManager.moveRowActual(action.component, this.table.rowManager.rows[action.data.posFrom], !action.data.after);
+               this.table.rowManager.redraw();
+       }
+};
+
+History.prototype.redoers = {
+       cellEdit: function cellEdit(action) {
+               action.component.setValueProcessData(action.data.newValue);
+       },
+
+       rowAdd: function rowAdd(action) {
+               var newRow = this.table.rowManager.addRowActual(action.data.data, action.data.pos, action.data.index);
+
+               if (this.table.options.groupBy && this.table.modExists("groupRows")) {
+                       this.table.modules.groupRows.updateGroupRows(true);
+               }
+
+               this._rebindRow(action.component, newRow);
+       },
+
+       rowDelete: function rowDelete(action) {
+               action.component.deleteActual();
+       },
+
+       rowMove: function rowMove(action) {
+               this.table.rowManager.moveRowActual(action.component, this.table.rowManager.rows[action.data.posTo], action.data.after);
+               this.table.rowManager.redraw();
+       }
+};
+
+//rebind rows to new element after deletion
+History.prototype._rebindRow = function (oldRow, newRow) {
+       this.history.forEach(function (action) {
+               if (action.component instanceof Row) {
+                       if (action.component === oldRow) {
+                               action.component = newRow;
+                       }
+               } else if (action.component instanceof Cell) {
+                       if (action.component.row === oldRow) {
+                               var field = action.component.column.getField();
+
+                               if (field) {
+                                       action.component = newRow.getCell(field);
+                               }
+                       }
+               }
+       });
+};
+
+Tabulator.prototype.registerModule("history", History);
+var HtmlTableImport = function HtmlTableImport(table) {
+       this.table = table; //hold Tabulator object
+       this.fieldIndex = [];
+       this.hasIndex = false;
+};
+
+HtmlTableImport.prototype.parseTable = function () {
+       var self = this,
+           element = self.table.element,
+           options = self.table.options,
+           columns = options.columns,
+           headers = element.getElementsByTagName("th"),
+           rows = element.getElementsByTagName("tbody")[0],
+           data = [],
+           newTable;
+
+       self.hasIndex = false;
+
+       self.table.options.htmlImporting.call(this.table);
+
+       rows = rows ? rows.getElementsByTagName("tr") : [];
+
+       //check for tablator inline options
+       self._extractOptions(element, options);
+
+       if (headers.length) {
+               self._extractHeaders(headers, rows);
+       } else {
+               self._generateBlankHeaders(headers, rows);
+       }
+
+       //iterate through table rows and build data set
+       for (var index = 0; index < rows.length; index++) {
+               var row = rows[index],
+                   cells = row.getElementsByTagName("td"),
+                   item = {};
+
+               //create index if the dont exist in table
+               if (!self.hasIndex) {
+                       item[options.index] = index;
+               }
+
+               for (var i = 0; i < cells.length; i++) {
+                       var cell = cells[i];
+                       if (typeof this.fieldIndex[i] !== "undefined") {
+                               item[this.fieldIndex[i]] = cell.innerHTML;
+                       }
+               }
+
+               //add row data to item
+               data.push(item);
+       }
+
+       //create new element
+       var newElement = document.createElement("div");
+
+       //transfer attributes to new element
+       var attributes = element.attributes;
+
+       // loop through attributes and apply them on div
+
+       for (var i in attributes) {
+               if (_typeof(attributes[i]) == "object") {
+                       newElement.setAttribute(attributes[i].name, attributes[i].value);
+               }
+       }
+
+       // replace table with div element
+       element.parentNode.replaceChild(newElement, element);
+
+       options.data = data;
+
+       self.table.options.htmlImported.call(this.table);
+
+       // // newElement.tabulator(options);
+
+       this.table.element = newElement;
+};
+
+//extract tabulator attribute options
+HtmlTableImport.prototype._extractOptions = function (element, options, defaultOptions) {
+       var attributes = element.attributes;
+       var optionsArr = defaultOptions ? Object.assign([], defaultOptions) : Object.keys(options);
+       var optionsList = {};
+
+       optionsArr.forEach(function (item) {
+               optionsList[item.toLowerCase()] = item;
+       });
+
+       for (var index in attributes) {
+               var attrib = attributes[index];
+               var name;
+
+               if (attrib && (typeof attrib === 'undefined' ? 'undefined' : _typeof(attrib)) == "object" && attrib.name && attrib.name.indexOf("tabulator-") === 0) {
+                       name = attrib.name.replace("tabulator-", "");
+
+                       if (typeof optionsList[name] !== "undefined") {
+                               options[optionsList[name]] = this._attribValue(attrib.value);
+                       }
+               }
+       }
+};
+
+//get value of attribute
+HtmlTableImport.prototype._attribValue = function (value) {
+       if (value === "true") {
+               return true;
+       }
+
+       if (value === "false") {
+               return false;
+       }
+
+       return value;
+};
+
+//find column if it has already been defined
+HtmlTableImport.prototype._findCol = function (title) {
+       var match = this.table.options.columns.find(function (column) {
+               return column.title === title;
+       });
+
+       return match || false;
+};
+
+//extract column from headers
+HtmlTableImport.prototype._extractHeaders = function (headers, rows) {
+       for (var index = 0; index < headers.length; index++) {
+               var header = headers[index],
+                   exists = false,
+                   col = this._findCol(header.textContent),
+                   width,
+                   attributes;
+
+               if (col) {
+                       exists = true;
+               } else {
+                       col = { title: header.textContent.trim() };
+               }
+
+               if (!col.field) {
+                       col.field = header.textContent.trim().toLowerCase().replace(" ", "_");
+               }
+
+               width = header.getAttribute("width");
+
+               if (width && !col.width) {
+                       col.width = width;
+               }
+
+               //check for tablator inline options
+               attributes = header.attributes;
+
+               // //check for tablator inline options
+               this._extractOptions(header, col, Column.prototype.defaultOptionList);
+
+               this.fieldIndex[index] = col.field;
+
+               if (col.field == this.table.options.index) {
+                       this.hasIndex = true;
+               }
+
+               if (!exists) {
+                       this.table.options.columns.push(col);
+               }
+       }
+};
+
+//generate blank headers
+HtmlTableImport.prototype._generateBlankHeaders = function (headers, rows) {
+       for (var index = 0; index < headers.length; index++) {
+               var header = headers[index],
+                   col = { title: "", field: "col" + index };
+
+               this.fieldIndex[index] = col.field;
+
+               var width = header.getAttribute("width");
+
+               if (width) {
+                       col.width = width;
+               }
+
+               this.table.options.columns.push(col);
+       }
+};
+
+Tabulator.prototype.registerModule("htmlTableImport", HtmlTableImport);
+var Keybindings = function Keybindings(table) {
+       this.table = table; //hold Tabulator object
+       this.watchKeys = null;
+       this.pressedKeys = null;
+       this.keyupBinding = false;
+       this.keydownBinding = false;
+};
+
+Keybindings.prototype.initialize = function () {
+       var bindings = this.table.options.keybindings,
+           mergedBindings = {};
+
+       this.watchKeys = {};
+       this.pressedKeys = [];
+
+       if (bindings !== false) {
+
+               for (var key in this.bindings) {
+                       mergedBindings[key] = this.bindings[key];
+               }
+
+               if (Object.keys(bindings).length) {
+
+                       for (var _key in bindings) {
+                               mergedBindings[_key] = bindings[_key];
+                       }
+               }
+
+               this.mapBindings(mergedBindings);
+               this.bindEvents();
+       }
+};
+
+Keybindings.prototype.mapBindings = function (bindings) {
+       var _this70 = this;
+
+       var self = this;
+
+       var _loop2 = function _loop2(key) {
+
+               if (_this70.actions[key]) {
+
+                       if (bindings[key]) {
+
+                               if (_typeof(bindings[key]) !== "object") {
+                                       bindings[key] = [bindings[key]];
+                               }
+
+                               bindings[key].forEach(function (binding) {
+                                       self.mapBinding(key, binding);
+                               });
+                       }
+               } else {
+                       console.warn("Key Binding Error - no such action:", key);
+               }
+       };
+
+       for (var key in bindings) {
+               _loop2(key);
+       }
+};
+
+Keybindings.prototype.mapBinding = function (action, symbolsList) {
+       var self = this;
+
+       var binding = {
+               action: this.actions[action],
+               keys: [],
+               ctrl: false,
+               shift: false,
+               meta: false
+       };
+
+       var symbols = symbolsList.toString().toLowerCase().split(" ").join("").split("+");
+
+       symbols.forEach(function (symbol) {
+               switch (symbol) {
+                       case "ctrl":
+                               binding.ctrl = true;
+                               break;
+
+                       case "shift":
+                               binding.shift = true;
+                               break;
+
+                       case "meta":
+                               binding.meta = true;
+                               break;
+
+                       default:
+                               symbol = parseInt(symbol);
+                               binding.keys.push(symbol);
+
+                               if (!self.watchKeys[symbol]) {
+                                       self.watchKeys[symbol] = [];
+                               }
+
+                               self.watchKeys[symbol].push(binding);
+               }
+       });
+};
+
+Keybindings.prototype.bindEvents = function () {
+       var self = this;
+
+       this.keyupBinding = function (e) {
+               var code = e.keyCode;
+               var bindings = self.watchKeys[code];
+
+               if (bindings) {
+
+                       self.pressedKeys.push(code);
+
+                       bindings.forEach(function (binding) {
+                               self.checkBinding(e, binding);
+                       });
+               }
+       };
+
+       this.keydownBinding = function (e) {
+               var code = e.keyCode;
+               var bindings = self.watchKeys[code];
+
+               if (bindings) {
+
+                       var index = self.pressedKeys.indexOf(code);
+
+                       if (index > -1) {
+                               self.pressedKeys.splice(index, 1);
+                       }
+               }
+       };
+
+       this.table.element.addEventListener("keydown", this.keyupBinding);
+
+       this.table.element.addEventListener("keyup", this.keydownBinding);
+};
+
+Keybindings.prototype.clearBindings = function () {
+       if (this.keyupBinding) {
+               this.table.element.removeEventListener("keydown", this.keyupBinding);
+       }
+
+       if (this.keydownBinding) {
+               this.table.element.removeEventListener("keyup", this.keydownBinding);
+       }
+};
+
+Keybindings.prototype.checkBinding = function (e, binding) {
+       var self = this,
+           match = true;
+
+       if (e.ctrlKey == binding.ctrl && e.shiftKey == binding.shift && e.metaKey == binding.meta) {
+               binding.keys.forEach(function (key) {
+                       var index = self.pressedKeys.indexOf(key);
+
+                       if (index == -1) {
+                               match = false;
+                       }
+               });
+
+               if (match) {
+                       binding.action.call(self, e);
+               }
+
+               return true;
+       }
+
+       return false;
+};
+
+//default bindings
+Keybindings.prototype.bindings = {
+       navPrev: "shift + 9",
+       navNext: 9,
+       navUp: 38,
+       navDown: 40,
+       scrollPageUp: 33,
+       scrollPageDown: 34,
+       scrollToStart: 36,
+       scrollToEnd: 35,
+       undo: "ctrl + 90",
+       redo: "ctrl + 89",
+       copyToClipboard: "ctrl + 67"
+};
+
+//default actions
+Keybindings.prototype.actions = {
+       keyBlock: function keyBlock(e) {
+               e.stopPropagation();
+               e.preventDefault();
+       },
+       scrollPageUp: function scrollPageUp(e) {
+               var rowManager = this.table.rowManager,
+                   newPos = rowManager.scrollTop - rowManager.height,
+                   scrollMax = rowManager.element.scrollHeight;
+
+               e.preventDefault();
+
+               if (rowManager.displayRowsCount) {
+                       if (newPos >= 0) {
+                               rowManager.element.scrollTop = newPos;
+                       } else {
+                               rowManager.scrollToRow(rowManager.getDisplayRows()[0]);
+                       }
+               }
+
+               this.table.element.focus();
+       },
+       scrollPageDown: function scrollPageDown(e) {
+               var rowManager = this.table.rowManager,
+                   newPos = rowManager.scrollTop + rowManager.height,
+                   scrollMax = rowManager.element.scrollHeight;
+
+               e.preventDefault();
+
+               if (rowManager.displayRowsCount) {
+                       if (newPos <= scrollMax) {
+                               rowManager.element.scrollTop = newPos;
+                       } else {
+                               rowManager.scrollToRow(rowManager.getDisplayRows()[rowManager.displayRowsCount - 1]);
+                       }
+               }
+
+               this.table.element.focus();
+       },
+       scrollToStart: function scrollToStart(e) {
+               var rowManager = this.table.rowManager;
+
+               e.preventDefault();
+
+               if (rowManager.displayRowsCount) {
+                       rowManager.scrollToRow(rowManager.getDisplayRows()[0]);
+               }
+
+               this.table.element.focus();
+       },
+       scrollToEnd: function scrollToEnd(e) {
+               var rowManager = this.table.rowManager;
+
+               e.preventDefault();
+
+               if (rowManager.displayRowsCount) {
+                       rowManager.scrollToRow(rowManager.getDisplayRows()[rowManager.displayRowsCount - 1]);
+               }
+
+               this.table.element.focus();
+       },
+       navPrev: function navPrev(e) {
+               var cell = false;
+
+               if (this.table.modExists("edit")) {
+                       cell = this.table.modules.edit.currentCell;
+
+                       if (cell) {
+                               e.preventDefault();
+                               cell.nav().prev();
+                       }
+               }
+       },
+
+       navNext: function navNext(e) {
+               var cell = false;
+               var newRow = this.table.options.tabEndNewRow;
+               var nav;
+
+               if (this.table.modExists("edit")) {
+                       cell = this.table.modules.edit.currentCell;
+
+                       if (cell) {
+                               e.preventDefault();
+
+                               nav = cell.nav();
+
+                               if (!nav.next()) {
+                                       if (newRow) {
+
+                                               cell.getElement().firstChild.blur();
+
+                                               if (newRow === true) {
+                                                       newRow = this.table.addRow({});
+                                               } else {
+                                                       if (typeof newRow == "function") {
+                                                               newRow = this.table.addRow(newRow(cell.row.getComponent()));
+                                                       } else {
+                                                               newRow = this.table.addRow(Object.assign({}, newRow));
+                                                       }
+                                               }
+
+                                               newRow.then(function () {
+                                                       setTimeout(function () {
+                                                               nav.next();
+                                                       });
+                                               });
+                                       }
+                               }
+                       }
+               }
+       },
+
+       navLeft: function navLeft(e) {
+               var cell = false;
+
+               if (this.table.modExists("edit")) {
+                       cell = this.table.modules.edit.currentCell;
+
+                       if (cell) {
+                               e.preventDefault();
+                               cell.nav().left();
+                       }
+               }
+       },
+
+       navRight: function navRight(e) {
+               var cell = false;
+
+               if (this.table.modExists("edit")) {
+                       cell = this.table.modules.edit.currentCell;
+
+                       if (cell) {
+                               e.preventDefault();
+                               cell.nav().right();
+                       }
+               }
+       },
+
+       navUp: function navUp(e) {
+               var cell = false;
+
+               if (this.table.modExists("edit")) {
+                       cell = this.table.modules.edit.currentCell;
+
+                       if (cell) {
+                               e.preventDefault();
+                               cell.nav().up();
+                       }
+               }
+       },
+
+       navDown: function navDown(e) {
+               var cell = false;
+
+               if (this.table.modExists("edit")) {
+                       cell = this.table.modules.edit.currentCell;
+
+                       if (cell) {
+                               e.preventDefault();
+                               cell.nav().down();
+                       }
+               }
+       },
+
+       undo: function undo(e) {
+               var cell = false;
+               if (this.table.options.history && this.table.modExists("history") && this.table.modExists("edit")) {
+
+                       cell = this.table.modules.edit.currentCell;
+
+                       if (!cell) {
+                               e.preventDefault();
+                               this.table.modules.history.undo();
+                       }
+               }
+       },
+
+       redo: function redo(e) {
+               var cell = false;
+               if (this.table.options.history && this.table.modExists("history") && this.table.modExists("edit")) {
+
+                       cell = this.table.modules.edit.currentCell;
+
+                       if (!cell) {
+                               e.preventDefault();
+                               this.table.modules.history.redo();
+                       }
+               }
+       },
+
+       copyToClipboard: function copyToClipboard(e) {
+               if (!this.table.modules.edit.currentCell) {
+                       if (this.table.modExists("clipboard", true)) {
+                               this.table.modules.clipboard.copy(false, true);
+                       }
+               }
+       }
+};
+
+Tabulator.prototype.registerModule("keybindings", Keybindings);
+var Menu = function Menu(table) {
+       this.table = table; //hold Tabulator object
+       this.menuEl = false;
+       this.blurEvent = this.hideMenu.bind(this);
+       this.escEvent = this.escMenu.bind(this);
+       this.nestedMenuBlock = false;
+};
+
+Menu.prototype.initializeColumnHeader = function (column) {
+       var _this71 = this;
+
+       var headerMenuEl;
+
+       if (column.definition.headerContextMenu) {
+               column.getElement().addEventListener("contextmenu", this.LoadMenuEvent.bind(this, column, column.definition.headerContextMenu));
+               this.tapHold(column, column.definition.headerContextMenu);
+       }
+
+       // if(column.definition.headerClickMenu){
+       //      column.getElement().addEventListener("click", this.LoadMenuEvent.bind(this, column, column.definition.headerClickMenu));
+       // }
+
+       if (column.definition.headerMenu) {
+
+               headerMenuEl = document.createElement("span");
+               headerMenuEl.classList.add("tabulator-header-menu-button");
+               headerMenuEl.innerHTML = "&vellip;";
+
+               headerMenuEl.addEventListener("click", function (e) {
+                       var menu = typeof column.definition.headerMenu == "function" ? column.definition.headerMenu(column.getComponent(), e) : column.definition.headerMenu;
+                       e.stopPropagation();
+                       e.preventDefault();
+
+                       _this71.loadMenu(e, column, menu);
+               });
+
+               column.titleElement.insertBefore(headerMenuEl, column.titleElement.firstChild);
+       }
+};
+
+Menu.prototype.LoadMenuEvent = function (component, menu, e) {
+       menu = typeof menu == "function" ? menu(component.getComponent(), e) : menu;
+
+       // if(component instanceof Cell){
+       //      e.stopImmediatePropagation();
+       // }
+
+       this.loadMenu(e, component, menu);
+};
+
+Menu.prototype.tapHold = function (component, menu) {
+       var _this72 = this;
+
+       var element = component.getElement(),
+           tapHold = null,
+           loaded = false;
+
+       element.addEventListener("touchstart", function (e) {
+               clearTimeout(tapHold);
+               loaded = false;
+
+               tapHold = setTimeout(function () {
+                       clearTimeout(tapHold);
+                       tapHold = null;
+                       loaded = true;
+
+                       _this72.LoadMenuEvent(component, menu, e);
+               }, 1000);
+       }, { passive: true });
+
+       element.addEventListener("touchend", function (e) {
+               clearTimeout(tapHold);
+               tapHold = null;
+
+               if (loaded) {
+                       e.preventDefault();
+               }
+       });
+};
+
+Menu.prototype.initializeCell = function (cell) {
+       if (cell.column.definition.contextMenu) {
+               cell.getElement().addEventListener("contextmenu", this.LoadMenuEvent.bind(this, cell, cell.column.definition.contextMenu));
+               this.tapHold(cell, cell.column.definition.contextMenu);
+       }
+
+       if (cell.column.definition.clickMenu) {
+               cell.getElement().addEventListener("click", this.LoadMenuEvent.bind(this, cell, cell.column.definition.clickMenu));
+       }
+};
+
+Menu.prototype.initializeRow = function (row) {
+       if (this.table.options.rowContextMenu) {
+               row.getElement().addEventListener("contextmenu", this.LoadMenuEvent.bind(this, row, this.table.options.rowContextMenu));
+               this.tapHold(row, this.table.options.rowContextMenu);
+       }
+
+       if (this.table.options.rowClickMenu) {
+               row.getElement().addEventListener("click", this.LoadMenuEvent.bind(this, row, this.table.options.rowClickMenu));
+       }
+};
+
+Menu.prototype.initializeGroup = function (group) {
+       if (this.table.options.groupContextMenu) {
+               group.getElement().addEventListener("contextmenu", this.LoadMenuEvent.bind(this, group, this.table.options.groupContextMenu));
+               this.tapHold(group, this.table.options.groupContextMenu);
+       }
+
+       if (this.table.options.groupClickMenu) {
+               group.getElement().addEventListener("click", this.LoadMenuEvent.bind(this, group, this.table.options.groupClickMenu));
+       }
+};
+
+Menu.prototype.loadMenu = function (e, component, menu) {
+       var _this73 = this;
+
+       var docHeight = Math.max(document.body.offsetHeight, window.innerHeight),
+           touch = !(e instanceof MouseEvent);
+
+       if (!touch) {
+               e.preventDefault();
+       }
+
+       //abort if no menu set
+       if (!menu || !menu.length) {
+               return;
+       }
+
+       if (this.nestedMenuBlock) {
+               //abort if child menu already open
+               if (this.isOpen()) {
+                       return;
+               }
+       } else {
+               this.nestedMenuBlock = setTimeout(function () {
+                       _this73.nestedMenuBlock = false;
+               }, 100);
+       }
+
+       this.hideMenu();
+
+       this.menuEl = document.createElement("div");
+       this.menuEl.classList.add("tabulator-menu");
+
+       menu.forEach(function (item) {
+               var itemEl = document.createElement("div");
+               var label = item.label;
+               var disabled = item.disabled;
+
+               if (item.separator) {
+                       itemEl.classList.add("tabulator-menu-separator");
+               } else {
+                       itemEl.classList.add("tabulator-menu-item");
+
+                       if (typeof label == "function") {
+                               label = label(component.getComponent());
+                       }
+
+                       if (label instanceof Node) {
+                               itemEl.appendChild(label);
+                       } else {
+                               itemEl.innerHTML = label;
+                       }
+
+                       if (typeof disabled == "function") {
+                               disabled = disabled(component.getComponent());
+                       }
+
+                       if (disabled) {
+                               itemEl.classList.add("tabulator-menu-item-disabled");
+                               itemEl.addEventListener("click", function (e) {
+                                       e.stopPropagation();
+                               });
+                       } else {
+                               itemEl.addEventListener("click", function (e) {
+                                       _this73.hideMenu();
+                                       item.action(e, component.getComponent());
+                               });
+                       }
+               }
+
+               _this73.menuEl.appendChild(itemEl);
+       });
+
+       this.menuEl.style.top = (touch ? e.touches[0].pageY : e.pageY) + "px";
+       this.menuEl.style.left = (touch ? e.touches[0].pageX : e.pageX) + "px";
+
+       setTimeout(function () {
+               _this73.table.rowManager.element.addEventListener("scroll", _this73.blurEvent);
+               document.body.addEventListener("click", _this73.blurEvent);
+               document.body.addEventListener("contextmenu", _this73.blurEvent);
+               document.body.addEventListener("keydown", _this73.escEvent);
+       }, 100);
+
+       document.body.appendChild(this.menuEl);
+
+       //move menu to start on right edge if it is too close to the edge of the screen
+       if (e.pageX + this.menuEl.offsetWidth >= document.body.offsetWidth) {
+               this.menuEl.style.left = "";
+               this.menuEl.style.right = document.body.offsetWidth - e.pageX + "px";
+       }
+
+       //move menu to start on bottom edge if it is too close to the edge of the screen
+       if (e.pageY + this.menuEl.offsetHeight >= docHeight) {
+               this.menuEl.style.top = "";
+               this.menuEl.style.bottom = docHeight - e.pageY + "px";
+       }
+};
+
+Menu.prototype.isOpen = function () {
+       return !!this.menuEl.parentNode;
+};
+
+Menu.prototype.escMenu = function (e) {
+       if (e.keyCode == 27) {
+               this.hideMenu();
+       }
+};
+
+Menu.prototype.hideMenu = function () {
+       if (this.menuEl.parentNode) {
+               this.menuEl.parentNode.removeChild(this.menuEl);
+       }
+
+       if (this.escEvent) {
+               document.body.removeEventListener("keydown", this.escEvent);
+       }
+
+       if (this.blurEvent) {
+               document.body.removeEventListener("click", this.blurEvent);
+               document.body.removeEventListener("contextmenu", this.blurEvent);
+               this.table.rowManager.element.removeEventListener("scroll", this.blurEvent);
+       }
+};
+
+//default accessors
+Menu.prototype.menus = {};
+
+Tabulator.prototype.registerModule("menu", Menu);
+var MoveColumns = function MoveColumns(table) {
+       this.table = table; //hold Tabulator object
+       this.placeholderElement = this.createPlaceholderElement();
+       this.hoverElement = false; //floating column header element
+       this.checkTimeout = false; //click check timeout holder
+       this.checkPeriod = 250; //period to wait on mousedown to consider this a move and not a click
+       this.moving = false; //currently moving column
+       this.toCol = false; //destination column
+       this.toColAfter = false; //position of moving column relative to the desitnation column
+       this.startX = 0; //starting position within header element
+       this.autoScrollMargin = 40; //auto scroll on edge when within margin
+       this.autoScrollStep = 5; //auto scroll distance in pixels
+       this.autoScrollTimeout = false; //auto scroll timeout
+       this.touchMove = false;
+
+       this.moveHover = this.moveHover.bind(this);
+       this.endMove = this.endMove.bind(this);
+};
+
+MoveColumns.prototype.createPlaceholderElement = function () {
+       var el = document.createElement("div");
+
+       el.classList.add("tabulator-col");
+       el.classList.add("tabulator-col-placeholder");
+
+       return el;
+};
+
+MoveColumns.prototype.initializeColumn = function (column) {
+       var self = this,
+           config = {},
+           colEl;
+
+       if (!column.modules.frozen) {
+
+               colEl = column.getElement();
+
+               config.mousemove = function (e) {
+                       if (column.parent === self.moving.parent) {
+                               if ((self.touchMove ? e.touches[0].pageX : e.pageX) - Tabulator.prototype.helpers.elOffset(colEl).left + self.table.columnManager.element.scrollLeft > column.getWidth() / 2) {
+                                       if (self.toCol !== column || !self.toColAfter) {
+                                               colEl.parentNode.insertBefore(self.placeholderElement, colEl.nextSibling);
+                                               self.moveColumn(column, true);
+                                       }
+                               } else {
+                                       if (self.toCol !== column || self.toColAfter) {
+                                               colEl.parentNode.insertBefore(self.placeholderElement, colEl);
+                                               self.moveColumn(column, false);
+                                       }
+                               }
+                       }
+               }.bind(self);
+
+               colEl.addEventListener("mousedown", function (e) {
+                       self.touchMove = false;
+                       if (e.which === 1) {
+                               self.checkTimeout = setTimeout(function () {
+                                       self.startMove(e, column);
+                               }, self.checkPeriod);
+                       }
+               });
+
+               colEl.addEventListener("mouseup", function (e) {
+                       if (e.which === 1) {
+                               if (self.checkTimeout) {
+                                       clearTimeout(self.checkTimeout);
+                               }
+                       }
+               });
+
+               self.bindTouchEvents(column);
+       }
+
+       column.modules.moveColumn = config;
+};
+
+MoveColumns.prototype.bindTouchEvents = function (column) {
+       var self = this,
+           colEl = column.getElement(),
+           startXMove = false,
+           //shifting center position of the cell
+       dir = false,
+           currentCol,
+           nextCol,
+           prevCol,
+           nextColWidth,
+           prevColWidth,
+           nextColWidthLast,
+           prevColWidthLast;
+
+       colEl.addEventListener("touchstart", function (e) {
+               self.checkTimeout = setTimeout(function () {
+                       self.touchMove = true;
+                       currentCol = column;
+                       nextCol = column.nextColumn();
+                       nextColWidth = nextCol ? nextCol.getWidth() / 2 : 0;
+                       prevCol = column.prevColumn();
+                       prevColWidth = prevCol ? prevCol.getWidth() / 2 : 0;
+                       nextColWidthLast = 0;
+                       prevColWidthLast = 0;
+                       startXMove = false;
+
+                       self.startMove(e, column);
+               }, self.checkPeriod);
+       }, { passive: true });
+
+       colEl.addEventListener("touchmove", function (e) {
+               var halfCol, diff, moveToCol;
+
+               if (self.moving) {
+                       self.moveHover(e);
+
+                       if (!startXMove) {
+                               startXMove = e.touches[0].pageX;
+                       }
+
+                       diff = e.touches[0].pageX - startXMove;
+
+                       if (diff > 0) {
+                               if (nextCol && diff - nextColWidthLast > nextColWidth) {
+                                       moveToCol = nextCol;
+
+                                       if (moveToCol !== column) {
+                                               startXMove = e.touches[0].pageX;
+                                               moveToCol.getElement().parentNode.insertBefore(self.placeholderElement, moveToCol.getElement().nextSibling);
+                                               self.moveColumn(moveToCol, true);
+                                       }
+                               }
+                       } else {
+                               if (prevCol && -diff - prevColWidthLast > prevColWidth) {
+                                       moveToCol = prevCol;
+
+                                       if (moveToCol !== column) {
+                                               startXMove = e.touches[0].pageX;
+                                               moveToCol.getElement().parentNode.insertBefore(self.placeholderElement, moveToCol.getElement());
+                                               self.moveColumn(moveToCol, false);
+                                       }
+                               }
+                       }
+
+                       if (moveToCol) {
+                               currentCol = moveToCol;
+                               nextCol = moveToCol.nextColumn();
+                               nextColWidthLast = nextColWidth;
+                               nextColWidth = nextCol ? nextCol.getWidth() / 2 : 0;
+                               prevCol = moveToCol.prevColumn();
+                               prevColWidthLast = prevColWidth;
+                               prevColWidth = prevCol ? prevCol.getWidth() / 2 : 0;
+                       }
+               }
+       }, { passive: true });
+
+       colEl.addEventListener("touchend", function (e) {
+               if (self.checkTimeout) {
+                       clearTimeout(self.checkTimeout);
+               }
+               if (self.moving) {
+                       self.endMove(e);
+               }
+       });
+};
+
+MoveColumns.prototype.startMove = function (e, column) {
+       var element = column.getElement();
+
+       this.moving = column;
+       this.startX = (this.touchMove ? e.touches[0].pageX : e.pageX) - Tabulator.prototype.helpers.elOffset(element).left;
+
+       this.table.element.classList.add("tabulator-block-select");
+
+       //create placeholder
+       this.placeholderElement.style.width = column.getWidth() + "px";
+       this.placeholderElement.style.height = column.getHeight() + "px";
+
+       element.parentNode.insertBefore(this.placeholderElement, element);
+       element.parentNode.removeChild(element);
+
+       //create hover element
+       this.hoverElement = element.cloneNode(true);
+       this.hoverElement.classList.add("tabulator-moving");
+
+       this.table.columnManager.getElement().appendChild(this.hoverElement);
+
+       this.hoverElement.style.left = "0";
+       this.hoverElement.style.bottom = "0";
+
+       if (!this.touchMove) {
+               this._bindMouseMove();
+
+               document.body.addEventListener("mousemove", this.moveHover);
+               document.body.addEventListener("mouseup", this.endMove);
+       }
+
+       this.moveHover(e);
+};
+
+MoveColumns.prototype._bindMouseMove = function () {
+       this.table.columnManager.columnsByIndex.forEach(function (column) {
+               if (column.modules.moveColumn.mousemove) {
+                       column.getElement().addEventListener("mousemove", column.modules.moveColumn.mousemove);
+               }
+       });
+};
+
+MoveColumns.prototype._unbindMouseMove = function () {
+       this.table.columnManager.columnsByIndex.forEach(function (column) {
+               if (column.modules.moveColumn.mousemove) {
+                       column.getElement().removeEventListener("mousemove", column.modules.moveColumn.mousemove);
+               }
+       });
+};
+
+MoveColumns.prototype.moveColumn = function (column, after) {
+       var movingCells = this.moving.getCells();
+
+       this.toCol = column;
+       this.toColAfter = after;
+
+       if (after) {
+               column.getCells().forEach(function (cell, i) {
+                       var cellEl = cell.getElement();
+                       cellEl.parentNode.insertBefore(movingCells[i].getElement(), cellEl.nextSibling);
+               });
+       } else {
+               column.getCells().forEach(function (cell, i) {
+                       var cellEl = cell.getElement();
+                       cellEl.parentNode.insertBefore(movingCells[i].getElement(), cellEl);
+               });
+       }
+};
+
+MoveColumns.prototype.endMove = function (e) {
+       if (e.which === 1 || this.touchMove) {
+               this._unbindMouseMove();
+
+               this.placeholderElement.parentNode.insertBefore(this.moving.getElement(), this.placeholderElement.nextSibling);
+               this.placeholderElement.parentNode.removeChild(this.placeholderElement);
+               this.hoverElement.parentNode.removeChild(this.hoverElement);
+
+               this.table.element.classList.remove("tabulator-block-select");
+
+               if (this.toCol) {
+                       this.table.columnManager.moveColumnActual(this.moving, this.toCol, this.toColAfter);
+               }
+
+               this.moving = false;
+               this.toCol = false;
+               this.toColAfter = false;
+
+               if (!this.touchMove) {
+                       document.body.removeEventListener("mousemove", this.moveHover);
+                       document.body.removeEventListener("mouseup", this.endMove);
+               }
+       }
+};
+
+MoveColumns.prototype.moveHover = function (e) {
+       var self = this,
+           columnHolder = self.table.columnManager.getElement(),
+           scrollLeft = columnHolder.scrollLeft,
+           xPos = (self.touchMove ? e.touches[0].pageX : e.pageX) - Tabulator.prototype.helpers.elOffset(columnHolder).left + scrollLeft,
+           scrollPos;
+
+       self.hoverElement.style.left = xPos - self.startX + "px";
+
+       if (xPos - scrollLeft < self.autoScrollMargin) {
+               if (!self.autoScrollTimeout) {
+                       self.autoScrollTimeout = setTimeout(function () {
+                               scrollPos = Math.max(0, scrollLeft - 5);
+                               self.table.rowManager.getElement().scrollLeft = scrollPos;
+                               self.autoScrollTimeout = false;
+                       }, 1);
+               }
+       }
+
+       if (scrollLeft + columnHolder.clientWidth - xPos < self.autoScrollMargin) {
+               if (!self.autoScrollTimeout) {
+                       self.autoScrollTimeout = setTimeout(function () {
+                               scrollPos = Math.min(columnHolder.clientWidth, scrollLeft + 5);
+                               self.table.rowManager.getElement().scrollLeft = scrollPos;
+                               self.autoScrollTimeout = false;
+                       }, 1);
+               }
+       }
+};
+
+Tabulator.prototype.registerModule("moveColumn", MoveColumns);
+
+var MoveRows = function MoveRows(table) {
+
+       this.table = table; //hold Tabulator object
+       this.placeholderElement = this.createPlaceholderElement();
+       this.hoverElement = false; //floating row header element
+       this.checkTimeout = false; //click check timeout holder
+       this.checkPeriod = 150; //period to wait on mousedown to consider this a move and not a click
+       this.moving = false; //currently moving row
+       this.toRow = false; //destination row
+       this.toRowAfter = false; //position of moving row relative to the desitnation row
+       this.hasHandle = false; //row has handle instead of fully movable row
+       this.startY = 0; //starting Y position within header element
+       this.startX = 0; //starting X position within header element
+
+       this.moveHover = this.moveHover.bind(this);
+       this.endMove = this.endMove.bind(this);
+       this.tableRowDropEvent = false;
+
+       this.touchMove = false;
+
+       this.connection = false;
+       this.connectionSelectorsTables = false;
+       this.connectionSelectorsElements = false;
+       this.connectionElements = [];
+       this.connections = [];
+
+       this.connectedTable = false;
+       this.connectedRow = false;
+};
+
+MoveRows.prototype.createPlaceholderElement = function () {
+       var el = document.createElement("div");
+
+       el.classList.add("tabulator-row");
+       el.classList.add("tabulator-row-placeholder");
+
+       return el;
+};
+
+MoveRows.prototype.initialize = function (handle) {
+       this.connectionSelectorsTables = this.table.options.movableRowsConnectedTables;
+       this.connectionSelectorsElements = this.table.options.movableRowsConnectedElements;
+
+       this.connection = this.connectionSelectorsTables || this.connectionSelectorsElements;
+};
+
+MoveRows.prototype.setHandle = function (handle) {
+       this.hasHandle = handle;
+};
+
+MoveRows.prototype.initializeGroupHeader = function (group) {
+       var self = this,
+           config = {},
+           rowEl;
+
+       //inter table drag drop
+       config.mouseup = function (e) {
+               self.tableRowDrop(e, row);
+       }.bind(self);
+
+       //same table drag drop
+       config.mousemove = function (e) {
+               if (e.pageY - Tabulator.prototype.helpers.elOffset(group.element).top + self.table.rowManager.element.scrollTop > group.getHeight() / 2) {
+                       if (self.toRow !== group || !self.toRowAfter) {
+                               var rowEl = group.getElement();
+                               rowEl.parentNode.insertBefore(self.placeholderElement, rowEl.nextSibling);
+                               self.moveRow(group, true);
+                       }
+               } else {
+                       if (self.toRow !== group || self.toRowAfter) {
+                               var rowEl = group.getElement();
+                               if (rowEl.previousSibling) {
+                                       rowEl.parentNode.insertBefore(self.placeholderElement, rowEl);
+                                       self.moveRow(group, false);
+                               }
+                       }
+               }
+       }.bind(self);
+
+       group.modules.moveRow = config;
+};
+
+MoveRows.prototype.initializeRow = function (row) {
+       var self = this,
+           config = {},
+           rowEl;
+
+       //inter table drag drop
+       config.mouseup = function (e) {
+               self.tableRowDrop(e, row);
+       }.bind(self);
+
+       //same table drag drop
+       config.mousemove = function (e) {
+               if (e.pageY - Tabulator.prototype.helpers.elOffset(row.element).top + self.table.rowManager.element.scrollTop > row.getHeight() / 2) {
+                       if (self.toRow !== row || !self.toRowAfter) {
+                               var rowEl = row.getElement();
+                               rowEl.parentNode.insertBefore(self.placeholderElement, rowEl.nextSibling);
+                               self.moveRow(row, true);
+                       }
+               } else {
+                       if (self.toRow !== row || self.toRowAfter) {
+                               var rowEl = row.getElement();
+                               rowEl.parentNode.insertBefore(self.placeholderElement, rowEl);
+                               self.moveRow(row, false);
+                       }
+               }
+       }.bind(self);
+
+       if (!this.hasHandle) {
+
+               rowEl = row.getElement();
+
+               rowEl.addEventListener("mousedown", function (e) {
+                       if (e.which === 1) {
+                               self.checkTimeout = setTimeout(function () {
+                                       self.startMove(e, row);
+                               }, self.checkPeriod);
+                       }
+               });
+
+               rowEl.addEventListener("mouseup", function (e) {
+                       if (e.which === 1) {
+                               if (self.checkTimeout) {
+                                       clearTimeout(self.checkTimeout);
+                               }
+                       }
+               });
+
+               this.bindTouchEvents(row, row.getElement());
+       }
+
+       row.modules.moveRow = config;
+};
+
+MoveRows.prototype.initializeCell = function (cell) {
+       var self = this,
+           cellEl = cell.getElement();
+
+       cellEl.addEventListener("mousedown", function (e) {
+               if (e.which === 1) {
+                       self.checkTimeout = setTimeout(function () {
+                               self.startMove(e, cell.row);
+                       }, self.checkPeriod);
+               }
+       });
+
+       cellEl.addEventListener("mouseup", function (e) {
+               if (e.which === 1) {
+                       if (self.checkTimeout) {
+                               clearTimeout(self.checkTimeout);
+                       }
+               }
+       });
+
+       this.bindTouchEvents(cell.row, cell.getElement());
+};
+
+MoveRows.prototype.bindTouchEvents = function (row, element) {
+       var self = this,
+           startYMove = false,
+           //shifting center position of the cell
+       dir = false,
+           currentRow,
+           nextRow,
+           prevRow,
+           nextRowHeight,
+           prevRowHeight,
+           nextRowHeightLast,
+           prevRowHeightLast;
+
+       element.addEventListener("touchstart", function (e) {
+               self.checkTimeout = setTimeout(function () {
+                       self.touchMove = true;
+                       currentRow = row;
+                       nextRow = row.nextRow();
+                       nextRowHeight = nextRow ? nextRow.getHeight() / 2 : 0;
+                       prevRow = row.prevRow();
+                       prevRowHeight = prevRow ? prevRow.getHeight() / 2 : 0;
+                       nextRowHeightLast = 0;
+                       prevRowHeightLast = 0;
+                       startYMove = false;
+
+                       self.startMove(e, row);
+               }, self.checkPeriod);
+       }, { passive: true });
+       this.moving, this.toRow, this.toRowAfter;
+       element.addEventListener("touchmove", function (e) {
+
+               var halfCol, diff, moveToRow;
+
+               if (self.moving) {
+                       e.preventDefault();
+
+                       self.moveHover(e);
+
+                       if (!startYMove) {
+                               startYMove = e.touches[0].pageY;
+                       }
+
+                       diff = e.touches[0].pageY - startYMove;
+
+                       if (diff > 0) {
+                               if (nextRow && diff - nextRowHeightLast > nextRowHeight) {
+                                       moveToRow = nextRow;
+
+                                       if (moveToRow !== row) {
+                                               startYMove = e.touches[0].pageY;
+                                               moveToRow.getElement().parentNode.insertBefore(self.placeholderElement, moveToRow.getElement().nextSibling);
+                                               self.moveRow(moveToRow, true);
+                                       }
+                               }
+                       } else {
+                               if (prevRow && -diff - prevRowHeightLast > prevRowHeight) {
+                                       moveToRow = prevRow;
+
+                                       if (moveToRow !== row) {
+                                               startYMove = e.touches[0].pageY;
+                                               moveToRow.getElement().parentNode.insertBefore(self.placeholderElement, moveToRow.getElement());
+                                               self.moveRow(moveToRow, false);
+                                       }
+                               }
+                       }
+
+                       if (moveToRow) {
+                               currentRow = moveToRow;
+                               nextRow = moveToRow.nextRow();
+                               nextRowHeightLast = nextRowHeight;
+                               nextRowHeight = nextRow ? nextRow.getHeight() / 2 : 0;
+                               prevRow = moveToRow.prevRow();
+                               prevRowHeightLast = prevRowHeight;
+                               prevRowHeight = prevRow ? prevRow.getHeight() / 2 : 0;
+                       }
+               }
+       });
+
+       element.addEventListener("touchend", function (e) {
+               if (self.checkTimeout) {
+                       clearTimeout(self.checkTimeout);
+               }
+               if (self.moving) {
+                       self.endMove(e);
+                       self.touchMove = false;
+               }
+       });
+};
+
+MoveRows.prototype._bindMouseMove = function () {
+       var self = this;
+
+       self.table.rowManager.getDisplayRows().forEach(function (row) {
+               if ((row.type === "row" || row.type === "group") && row.modules.moveRow.mousemove) {
+                       row.getElement().addEventListener("mousemove", row.modules.moveRow.mousemove);
+               }
+       });
+};
+
+MoveRows.prototype._unbindMouseMove = function () {
+       var self = this;
+
+       self.table.rowManager.getDisplayRows().forEach(function (row) {
+               if ((row.type === "row" || row.type === "group") && row.modules.moveRow.mousemove) {
+                       row.getElement().removeEventListener("mousemove", row.modules.moveRow.mousemove);
+               }
+       });
+};
+
+MoveRows.prototype.startMove = function (e, row) {
+       var element = row.getElement();
+
+       this.setStartPosition(e, row);
+
+       this.moving = row;
+
+       this.table.element.classList.add("tabulator-block-select");
+
+       //create placeholder
+       this.placeholderElement.style.width = row.getWidth() + "px";
+       this.placeholderElement.style.height = row.getHeight() + "px";
+
+       if (!this.connection) {
+               element.parentNode.insertBefore(this.placeholderElement, element);
+               element.parentNode.removeChild(element);
+       } else {
+               this.table.element.classList.add("tabulator-movingrow-sending");
+               this.connectToTables(row);
+       }
+
+       //create hover element
+       this.hoverElement = element.cloneNode(true);
+       this.hoverElement.classList.add("tabulator-moving");
+
+       if (this.connection) {
+               document.body.appendChild(this.hoverElement);
+               this.hoverElement.style.left = "0";
+               this.hoverElement.style.top = "0";
+               this.hoverElement.style.width = this.table.element.clientWidth + "px";
+               this.hoverElement.style.whiteSpace = "nowrap";
+               this.hoverElement.style.overflow = "hidden";
+               this.hoverElement.style.pointerEvents = "none";
+       } else {
+               this.table.rowManager.getTableElement().appendChild(this.hoverElement);
+
+               this.hoverElement.style.left = "0";
+               this.hoverElement.style.top = "0";
+
+               this._bindMouseMove();
+       }
+
+       document.body.addEventListener("mousemove", this.moveHover);
+       document.body.addEventListener("mouseup", this.endMove);
+
+       this.moveHover(e);
+};
+
+MoveRows.prototype.setStartPosition = function (e, row) {
+       var pageX = this.touchMove ? e.touches[0].pageX : e.pageX,
+           pageY = this.touchMove ? e.touches[0].pageY : e.pageY,
+           element,
+           position;
+
+       element = row.getElement();
+       if (this.connection) {
+               position = element.getBoundingClientRect();
+
+               this.startX = position.left - pageX + window.pageXOffset;
+               this.startY = position.top - pageY + window.pageYOffset;
+       } else {
+               this.startY = pageY - element.getBoundingClientRect().top;
+       }
+};
+
+MoveRows.prototype.endMove = function (e) {
+       if (!e || e.which === 1 || this.touchMove) {
+               this._unbindMouseMove();
+
+               if (!this.connection) {
+                       this.placeholderElement.parentNode.insertBefore(this.moving.getElement(), this.placeholderElement.nextSibling);
+                       this.placeholderElement.parentNode.removeChild(this.placeholderElement);
+               }
+
+               this.hoverElement.parentNode.removeChild(this.hoverElement);
+
+               this.table.element.classList.remove("tabulator-block-select");
+
+               if (this.toRow) {
+                       this.table.rowManager.moveRow(this.moving, this.toRow, this.toRowAfter);
+               }
+
+               this.moving = false;
+               this.toRow = false;
+               this.toRowAfter = false;
+
+               document.body.removeEventListener("mousemove", this.moveHover);
+               document.body.removeEventListener("mouseup", this.endMove);
+
+               if (this.connection) {
+                       this.table.element.classList.remove("tabulator-movingrow-sending");
+                       this.disconnectFromTables();
+               }
+       }
+};
+
+MoveRows.prototype.moveRow = function (row, after) {
+       this.toRow = row;
+       this.toRowAfter = after;
+};
+
+MoveRows.prototype.moveHover = function (e) {
+       if (this.connection) {
+               this.moveHoverConnections.call(this, e);
+       } else {
+               this.moveHoverTable.call(this, e);
+       }
+};
+
+MoveRows.prototype.moveHoverTable = function (e) {
+       var rowHolder = this.table.rowManager.getElement(),
+           scrollTop = rowHolder.scrollTop,
+           yPos = (this.touchMove ? e.touches[0].pageY : e.pageY) - rowHolder.getBoundingClientRect().top + scrollTop,
+           scrollPos;
+
+       this.hoverElement.style.top = yPos - this.startY + "px";
+};
+
+MoveRows.prototype.moveHoverConnections = function (e) {
+       this.hoverElement.style.left = this.startX + (this.touchMove ? e.touches[0].pageX : e.pageX) + "px";
+       this.hoverElement.style.top = this.startY + (this.touchMove ? e.touches[0].pageY : e.pageY) + "px";
+};
+
+MoveRows.prototype.elementRowDrop = function (e, element, row) {
+       if (this.table.options.movableRowsElementDrop) {
+               this.table.options.movableRowsElementDrop(e, element, row ? row.getComponent() : false);
+       }
+};
+
+//establish connection with other tables
+MoveRows.prototype.connectToTables = function (row) {
+       var _this74 = this;
+
+       var connectionTables;
+
+       if (this.connectionSelectorsTables) {
+               connectionTables = this.table.modules.comms.getConnections(this.connectionSelectorsTables);
+
+               this.table.options.movableRowsSendingStart.call(this.table, connectionTables);
+
+               this.table.modules.comms.send(this.connectionSelectorsTables, "moveRow", "connect", {
+                       row: row
+               });
+       }
+
+       if (this.connectionSelectorsElements) {
+
+               this.connectionElements = [];
+
+               if (!Array.isArray(this.connectionSelectorsElements)) {
+                       this.connectionSelectorsElements = [this.connectionSelectorsElements];
+               }
+
+               this.connectionSelectorsElements.forEach(function (query) {
+                       if (typeof query === "string") {
+                               _this74.connectionElements = _this74.connectionElements.concat(Array.prototype.slice.call(document.querySelectorAll(query)));
+                       } else {
+                               _this74.connectionElements.push(query);
+                       }
+               });
+
+               this.connectionElements.forEach(function (element) {
+                       var dropEvent = function dropEvent(e) {
+                               _this74.elementRowDrop(e, element, _this74.moving);
+                       };
+
+                       element.addEventListener("mouseup", dropEvent);
+                       element.tabulatorElementDropEvent = dropEvent;
+
+                       element.classList.add("tabulator-movingrow-receiving");
+               });
+       }
+};
+
+//disconnect from other tables
+MoveRows.prototype.disconnectFromTables = function () {
+       var connectionTables;
+
+       if (this.connectionSelectorsTables) {
+               connectionTables = this.table.modules.comms.getConnections(this.connectionSelectorsTables);
+
+               this.table.options.movableRowsSendingStop.call(this.table, connectionTables);
+
+               this.table.modules.comms.send(this.connectionSelectorsTables, "moveRow", "disconnect");
+       }
+
+       this.connectionElements.forEach(function (element) {
+               element.classList.remove("tabulator-movingrow-receiving");
+               element.removeEventListener("mouseup", element.tabulatorElementDropEvent);
+               delete element.tabulatorElementDropEvent;
+       });
+};
+
+//accept incomming connection
+MoveRows.prototype.connect = function (table, row) {
+       var self = this;
+       if (!this.connectedTable) {
+               this.connectedTable = table;
+               this.connectedRow = row;
+
+               this.table.element.classList.add("tabulator-movingrow-receiving");
+
+               self.table.rowManager.getDisplayRows().forEach(function (row) {
+                       if (row.type === "row" && row.modules.moveRow && row.modules.moveRow.mouseup) {
+                               row.getElement().addEventListener("mouseup", row.modules.moveRow.mouseup);
+                       }
+               });
+
+               self.tableRowDropEvent = self.tableRowDrop.bind(self);
+
+               self.table.element.addEventListener("mouseup", self.tableRowDropEvent);
+
+               this.table.options.movableRowsReceivingStart.call(this.table, row, table);
+
+               return true;
+       } else {
+               console.warn("Move Row Error - Table cannot accept connection, already connected to table:", this.connectedTable);
+               return false;
+       }
+};
+
+//close incomming connection
+MoveRows.prototype.disconnect = function (table) {
+       var self = this;
+       if (table === this.connectedTable) {
+               this.connectedTable = false;
+               this.connectedRow = false;
+
+               this.table.element.classList.remove("tabulator-movingrow-receiving");
+
+               self.table.rowManager.getDisplayRows().forEach(function (row) {
+                       if (row.type === "row" && row.modules.moveRow && row.modules.moveRow.mouseup) {
+                               row.getElement().removeEventListener("mouseup", row.modules.moveRow.mouseup);
+                       }
+               });
+
+               self.table.element.removeEventListener("mouseup", self.tableRowDropEvent);
+
+               this.table.options.movableRowsReceivingStop.call(this.table, table);
+       } else {
+               console.warn("Move Row Error - trying to disconnect from non connected table");
+       }
+};
+
+MoveRows.prototype.dropComplete = function (table, row, success) {
+       var sender = false;
+
+       if (success) {
+
+               switch (_typeof(this.table.options.movableRowsSender)) {
+                       case "string":
+                               sender = this.senders[this.table.options.movableRowsSender];
+                               break;
+
+                       case "function":
+                               sender = this.table.options.movableRowsSender;
+                               break;
+               }
+
+               if (sender) {
+                       sender.call(this, this.moving.getComponent(), row ? row.getComponent() : undefined, table);
+               } else {
+                       if (this.table.options.movableRowsSender) {
+                               console.warn("Mover Row Error - no matching sender found:", this.table.options.movableRowsSender);
+                       }
+               }
+
+               this.table.options.movableRowsSent.call(this.table, this.moving.getComponent(), row ? row.getComponent() : undefined, table);
+       } else {
+               this.table.options.movableRowsSentFailed.call(this.table, this.moving.getComponent(), row ? row.getComponent() : undefined, table);
+       }
+
+       this.endMove();
+};
+
+MoveRows.prototype.tableRowDrop = function (e, row) {
+       var receiver = false,
+           success = false;
+
+       console.trace("drop");
+
+       e.stopImmediatePropagation();
+
+       switch (_typeof(this.table.options.movableRowsReceiver)) {
+               case "string":
+                       receiver = this.receivers[this.table.options.movableRowsReceiver];
+                       break;
+
+               case "function":
+                       receiver = this.table.options.movableRowsReceiver;
+                       break;
+       }
+
+       if (receiver) {
+               success = receiver.call(this, this.connectedRow.getComponent(), row ? row.getComponent() : undefined, this.connectedTable);
+       } else {
+               console.warn("Mover Row Error - no matching receiver found:", this.table.options.movableRowsReceiver);
+       }
+
+       if (success) {
+               this.table.options.movableRowsReceived.call(this.table, this.connectedRow.getComponent(), row ? row.getComponent() : undefined, this.connectedTable);
+       } else {
+               this.table.options.movableRowsReceivedFailed.call(this.table, this.connectedRow.getComponent(), row ? row.getComponent() : undefined, this.connectedTable);
+       }
+
+       this.table.modules.comms.send(this.connectedTable, "moveRow", "dropcomplete", {
+               row: row,
+               success: success
+       });
+};
+
+MoveRows.prototype.receivers = {
+       insert: function insert(fromRow, toRow, fromTable) {
+               this.table.addRow(fromRow.getData(), undefined, toRow);
+               return true;
+       },
+
+       add: function add(fromRow, toRow, fromTable) {
+               this.table.addRow(fromRow.getData());
+               return true;
+       },
+
+       update: function update(fromRow, toRow, fromTable) {
+               if (toRow) {
+                       toRow.update(fromRow.getData());
+                       return true;
+               }
+
+               return false;
+       },
+
+       replace: function replace(fromRow, toRow, fromTable) {
+               if (toRow) {
+                       this.table.addRow(fromRow.getData(), undefined, toRow);
+                       toRow.delete();
+                       return true;
+               }
+
+               return false;
+       }
+};
+
+MoveRows.prototype.senders = {
+       delete: function _delete(fromRow, toRow, toTable) {
+               fromRow.delete();
+       }
+};
+
+MoveRows.prototype.commsReceived = function (table, action, data) {
+       switch (action) {
+               case "connect":
+                       return this.connect(table, data.row);
+                       break;
+
+               case "disconnect":
+                       return this.disconnect(table);
+                       break;
+
+               case "dropcomplete":
+                       return this.dropComplete(table, data.row, data.success);
+                       break;
+       }
+};
+
+Tabulator.prototype.registerModule("moveRow", MoveRows);
+var Mutator = function Mutator(table) {
+       this.table = table; //hold Tabulator object
+       this.allowedTypes = ["", "data", "edit", "clipboard"]; //list of muatation types
+       this.enabled = true;
+};
+
+//initialize column mutator
+Mutator.prototype.initializeColumn = function (column) {
+       var self = this,
+           match = false,
+           config = {};
+
+       this.allowedTypes.forEach(function (type) {
+               var key = "mutator" + (type.charAt(0).toUpperCase() + type.slice(1)),
+                   mutator;
+
+               if (column.definition[key]) {
+                       mutator = self.lookupMutator(column.definition[key]);
+
+                       if (mutator) {
+                               match = true;
+
+                               config[key] = {
+                                       mutator: mutator,
+                                       params: column.definition[key + "Params"] || {}
+                               };
+                       }
+               }
+       });
+
+       if (match) {
+               column.modules.mutate = config;
+       }
+};
+
+Mutator.prototype.lookupMutator = function (value) {
+       var mutator = false;
+
+       //set column mutator
+       switch (typeof value === 'undefined' ? 'undefined' : _typeof(value)) {
+               case "string":
+                       if (this.mutators[value]) {
+                               mutator = this.mutators[value];
+                       } else {
+                               console.warn("Mutator Error - No such mutator found, ignoring: ", value);
+                       }
+                       break;
+
+               case "function":
+                       mutator = value;
+                       break;
+       }
+
+       return mutator;
+};
+
+//apply mutator to row
+Mutator.prototype.transformRow = function (data, type, updatedData) {
+       var self = this,
+           key = "mutator" + (type.charAt(0).toUpperCase() + type.slice(1)),
+           value;
+
+       if (this.enabled) {
+
+               self.table.columnManager.traverse(function (column) {
+                       var mutator, params, component;
+
+                       if (column.modules.mutate) {
+                               mutator = column.modules.mutate[key] || column.modules.mutate.mutator || false;
+
+                               if (mutator) {
+                                       value = column.getFieldValue(typeof updatedData !== "undefined" ? updatedData : data);
+
+                                       if (type == "data" || typeof value !== "undefined") {
+                                               component = column.getComponent();
+                                               params = typeof mutator.params === "function" ? mutator.params(value, data, type, component) : mutator.params;
+                                               column.setFieldValue(data, mutator.mutator(value, data, type, params, component));
+                                       }
+                               }
+                       }
+               });
+       }
+
+       return data;
+};
+
+//apply mutator to new cell value
+Mutator.prototype.transformCell = function (cell, value) {
+       var mutator = cell.column.modules.mutate.mutatorEdit || cell.column.modules.mutate.mutator || false,
+           tempData = {};
+
+       if (mutator) {
+               tempData = Object.assign(tempData, cell.row.getData());
+               cell.column.setFieldValue(tempData, value);
+               return mutator.mutator(value, tempData, "edit", mutator.params, cell.getComponent());
+       } else {
+               return value;
+       }
+};
+
+Mutator.prototype.enable = function () {
+       this.enabled = true;
+};
+
+Mutator.prototype.disable = function () {
+       this.enabled = false;
+};
+
+//default mutators
+Mutator.prototype.mutators = {};
+
+Tabulator.prototype.registerModule("mutator", Mutator);
+var Page = function Page(table) {
+
+       this.table = table; //hold Tabulator object
+
+       this.mode = "local";
+       this.progressiveLoad = false;
+
+       this.size = 0;
+       this.page = 1;
+       this.count = 5;
+       this.max = 1;
+
+       this.displayIndex = 0; //index in display pipeline
+
+       this.initialLoad = true;
+
+       this.pageSizes = [];
+
+       this.dataReceivedNames = {};
+       this.dataSentNames = {};
+
+       this.createElements();
+};
+
+Page.prototype.createElements = function () {
+
+       var button;
+
+       this.element = document.createElement("span");
+       this.element.classList.add("tabulator-paginator");
+
+       this.pagesElement = document.createElement("span");
+       this.pagesElement.classList.add("tabulator-pages");
+
+       button = document.createElement("button");
+       button.classList.add("tabulator-page");
+       button.setAttribute("type", "button");
+       button.setAttribute("role", "button");
+       button.setAttribute("aria-label", "");
+       button.setAttribute("title", "");
+
+       this.firstBut = button.cloneNode(true);
+       this.firstBut.setAttribute("data-page", "first");
+
+       this.prevBut = button.cloneNode(true);
+       this.prevBut.setAttribute("data-page", "prev");
+
+       this.nextBut = button.cloneNode(true);
+       this.nextBut.setAttribute("data-page", "next");
+
+       this.lastBut = button.cloneNode(true);
+       this.lastBut.setAttribute("data-page", "last");
+
+       if (this.table.options.paginationSizeSelector) {
+               this.pageSizeSelect = document.createElement("select");
+               this.pageSizeSelect.classList.add("tabulator-page-size");
+       }
+};
+
+Page.prototype.generatePageSizeSelectList = function () {
+       var _this75 = this;
+
+       var pageSizes = [];
+
+       if (this.pageSizeSelect) {
+
+               if (Array.isArray(this.table.options.paginationSizeSelector)) {
+                       pageSizes = this.table.options.paginationSizeSelector;
+                       this.pageSizes = pageSizes;
+
+                       if (this.pageSizes.indexOf(this.size) == -1) {
+                               pageSizes.unshift(this.size);
+                       }
+               } else {
+
+                       if (this.pageSizes.indexOf(this.size) == -1) {
+                               pageSizes = [];
+
+                               for (var _i13 = 1; _i13 < 5; _i13++) {
+                                       pageSizes.push(this.size * _i13);
+                               }
+
+                               this.pageSizes = pageSizes;
+                       } else {
+                               pageSizes = this.pageSizes;
+                       }
+               }
+
+               while (this.pageSizeSelect.firstChild) {
+                       this.pageSizeSelect.removeChild(this.pageSizeSelect.firstChild);
+               }pageSizes.forEach(function (item) {
+                       var itemEl = document.createElement("option");
+                       itemEl.value = item;
+
+                       if (item === true) {
+                               _this75.table.modules.localize.bind("pagination|all", function (value) {
+                                       itemEl.innerHTML = value;
+                               });
+                       } else {
+                               itemEl.innerHTML = item;
+                       }
+
+                       _this75.pageSizeSelect.appendChild(itemEl);
+               });
+
+               this.pageSizeSelect.value = this.size;
+       }
+};
+
+//setup pageination
+Page.prototype.initialize = function (hidden) {
+       var self = this,
+           pageSelectLabel,
+           testElRow,
+           testElCell;
+
+       //update param names
+       this.dataSentNames = Object.assign({}, this.paginationDataSentNames);
+       this.dataSentNames = Object.assign(this.dataSentNames, this.table.options.paginationDataSent);
+
+       this.dataReceivedNames = Object.assign({}, this.paginationDataReceivedNames);
+       this.dataReceivedNames = Object.assign(this.dataReceivedNames, this.table.options.paginationDataReceived);
+
+       //build pagination element
+
+       //bind localizations
+       self.table.modules.localize.bind("pagination|first", function (value) {
+               self.firstBut.innerHTML = value;
+       });
+
+       self.table.modules.localize.bind("pagination|first_title", function (value) {
+               self.firstBut.setAttribute("aria-label", value);
+               self.firstBut.setAttribute("title", value);
+       });
+
+       self.table.modules.localize.bind("pagination|prev", function (value) {
+               self.prevBut.innerHTML = value;
+       });
+
+       self.table.modules.localize.bind("pagination|prev_title", function (value) {
+               self.prevBut.setAttribute("aria-label", value);
+               self.prevBut.setAttribute("title", value);
+       });
+
+       self.table.modules.localize.bind("pagination|next", function (value) {
+               self.nextBut.innerHTML = value;
+       });
+
+       self.table.modules.localize.bind("pagination|next_title", function (value) {
+               self.nextBut.setAttribute("aria-label", value);
+               self.nextBut.setAttribute("title", value);
+       });
+
+       self.table.modules.localize.bind("pagination|last", function (value) {
+               self.lastBut.innerHTML = value;
+       });
+
+       self.table.modules.localize.bind("pagination|last_title", function (value) {
+               self.lastBut.setAttribute("aria-label", value);
+               self.lastBut.setAttribute("title", value);
+       });
+
+       //click bindings
+       self.firstBut.addEventListener("click", function () {
+               self.setPage(1).then(function () {}).catch(function () {});
+       });
+
+       self.prevBut.addEventListener("click", function () {
+               self.previousPage().then(function () {}).catch(function () {});
+       });
+
+       self.nextBut.addEventListener("click", function () {
+               self.nextPage().then(function () {}).catch(function () {});
+       });
+
+       self.lastBut.addEventListener("click", function () {
+               self.setPage(self.max).then(function () {}).catch(function () {});
+       });
+
+       if (self.table.options.paginationElement) {
+               self.element = self.table.options.paginationElement;
+       }
+
+       if (this.pageSizeSelect) {
+               pageSelectLabel = document.createElement("label");
+
+               self.table.modules.localize.bind("pagination|page_size", function (value) {
+                       self.pageSizeSelect.setAttribute("aria-label", value);
+                       self.pageSizeSelect.setAttribute("title", value);
+                       pageSelectLabel.innerHTML = value;
+               });
+
+               self.element.appendChild(pageSelectLabel);
+               self.element.appendChild(self.pageSizeSelect);
+
+               self.pageSizeSelect.addEventListener("change", function (e) {
+                       self.setPageSize(self.pageSizeSelect.value == "true" ? true : self.pageSizeSelect.value);
+                       self.setPage(1).then(function () {}).catch(function () {});
+               });
+       }
+
+       //append to DOM
+       self.element.appendChild(self.firstBut);
+       self.element.appendChild(self.prevBut);
+       self.element.appendChild(self.pagesElement);
+       self.element.appendChild(self.nextBut);
+       self.element.appendChild(self.lastBut);
+
+       if (!self.table.options.paginationElement && !hidden) {
+               self.table.footerManager.append(self.element, self);
+       }
+
+       //set default values
+       self.mode = self.table.options.pagination;
+
+       if (self.table.options.paginationSize) {
+               self.size = self.table.options.paginationSize;
+       } else {
+               testElRow = document.createElement("div");
+               testElRow.classList.add("tabulator-row");
+               testElRow.style.visibility = hidden;
+
+               testElCell = document.createElement("div");
+               testElCell.classList.add("tabulator-cell");
+               testElCell.innerHTML = "Page Row Test";
+
+               testElRow.appendChild(testElCell);
+
+               self.table.rowManager.getTableElement().appendChild(testElRow);
+
+               self.size = Math.floor(self.table.rowManager.getElement().clientHeight / testElRow.offsetHeight);
+
+               self.table.rowManager.getTableElement().removeChild(testElRow);
+       }
+
+       // self.page = self.table.options.paginationInitialPage || 1;
+       self.count = self.table.options.paginationButtonCount;
+
+       self.generatePageSizeSelectList();
+};
+
+Page.prototype.initializeProgressive = function (mode) {
+       this.initialize(true);
+       this.mode = "progressive_" + mode;
+       this.progressiveLoad = true;
+};
+
+Page.prototype.setDisplayIndex = function (index) {
+       this.displayIndex = index;
+};
+
+Page.prototype.getDisplayIndex = function () {
+       return this.displayIndex;
+};
+
+//calculate maximum page from number of rows
+Page.prototype.setMaxRows = function (rowCount) {
+       if (!rowCount) {
+               this.max = 1;
+       } else {
+               this.max = this.size === true ? 1 : Math.ceil(rowCount / this.size);
+       }
+
+       if (this.page > this.max) {
+               this.page = this.max;
+       }
+};
+
+//reset to first page without triggering action
+Page.prototype.reset = function (force, columnsChanged) {
+       if (this.mode == "local" || force) {
+               this.page = 1;
+       }
+
+       if (columnsChanged) {
+               this.initialLoad = true;
+       }
+
+       return true;
+};
+
+//set the maxmum page
+Page.prototype.setMaxPage = function (max) {
+
+       max = parseInt(max);
+
+       this.max = max || 1;
+
+       if (this.page > this.max) {
+               this.page = this.max;
+               this.trigger();
+       }
+};
+
+//set current page number
+Page.prototype.setPage = function (page) {
+       var _this76 = this;
+
+       var self = this;
+
+       switch (page) {
+               case "first":
+                       return this.setPage(1);
+                       break;
+
+               case "prev":
+                       return this.previousPage();
+                       break;
+
+               case "next":
+                       return this.nextPage();
+                       break;
+
+               case "last":
+                       return this.setPage(this.max);
+                       break;
+       }
+
+       return new Promise(function (resolve, reject) {
+
+               page = parseInt(page);
+
+               if (page > 0 && page <= _this76.max) {
+                       _this76.page = page;
+                       _this76.trigger().then(function () {
+                               resolve();
+                       }).catch(function () {
+                               reject();
+                       });
+
+                       if (self.table.options.persistence && self.table.modExists("persistence", true) && self.table.modules.persistence.config.page) {
+                               self.table.modules.persistence.save("page");
+                       }
+               } else {
+                       console.warn("Pagination Error - Requested page is out of range of 1 - " + _this76.max + ":", page);
+                       reject();
+               }
+       });
+};
+
+Page.prototype.setPageToRow = function (row) {
+       var _this77 = this;
+
+       return new Promise(function (resolve, reject) {
+
+               var rows = _this77.table.rowManager.getDisplayRows(_this77.displayIndex - 1);
+               var index = rows.indexOf(row);
+
+               if (index > -1) {
+                       var page = _this77.size === true ? 1 : Math.ceil((index + 1) / _this77.size);
+
+                       _this77.setPage(page).then(function () {
+                               resolve();
+                       }).catch(function () {
+                               reject();
+                       });
+               } else {
+                       console.warn("Pagination Error - Requested row is not visible");
+                       reject();
+               }
+       });
+};
+
+Page.prototype.setPageSize = function (size) {
+       if (size !== true) {
+               size = parseInt(size);
+       }
+
+       if (size > 0) {
+               this.size = size;
+       }
+
+       if (this.pageSizeSelect) {
+               // this.pageSizeSelect.value = size;
+               this.generatePageSizeSelectList();
+       }
+
+       if (this.table.options.persistence && this.table.modExists("persistence", true) && this.table.modules.persistence.config.page) {
+               this.table.modules.persistence.save("page");
+       }
+};
+
+//setup the pagination buttons
+Page.prototype._setPageButtons = function () {
+       var self = this;
+
+       var leftSize = Math.floor((this.count - 1) / 2);
+       var rightSize = Math.ceil((this.count - 1) / 2);
+       var min = this.max - this.page + leftSize + 1 < this.count ? this.max - this.count + 1 : Math.max(this.page - leftSize, 1);
+       var max = this.page <= rightSize ? Math.min(this.count, this.max) : Math.min(this.page + rightSize, this.max);
+
+       while (self.pagesElement.firstChild) {
+               self.pagesElement.removeChild(self.pagesElement.firstChild);
+       }if (self.page == 1) {
+               self.firstBut.disabled = true;
+               self.prevBut.disabled = true;
+       } else {
+               self.firstBut.disabled = false;
+               self.prevBut.disabled = false;
+       }
+
+       if (self.page == self.max) {
+               self.lastBut.disabled = true;
+               self.nextBut.disabled = true;
+       } else {
+               self.lastBut.disabled = false;
+               self.nextBut.disabled = false;
+       }
+
+       for (var _i14 = min; _i14 <= max; _i14++) {
+               if (_i14 > 0 && _i14 <= self.max) {
+                       self.pagesElement.appendChild(self._generatePageButton(_i14));
+               }
+       }
+
+       this.footerRedraw();
+};
+
+Page.prototype._generatePageButton = function (page) {
+       var self = this,
+           button = document.createElement("button");
+
+       button.classList.add("tabulator-page");
+       if (page == self.page) {
+               button.classList.add("active");
+       }
+
+       button.setAttribute("type", "button");
+       button.setAttribute("role", "button");
+
+       self.table.modules.localize.bind("pagination|page_title", function (value) {
+               button.setAttribute("aria-label", value + " " + page);
+               button.setAttribute("title", value + " " + page);
+       });
+
+       button.setAttribute("data-page", page);
+       button.textContent = page;
+
+       button.addEventListener("click", function (e) {
+               self.setPage(page).then(function () {}).catch(function () {});
+       });
+
+       return button;
+};
+
+//previous page
+Page.prototype.previousPage = function () {
+       var _this78 = this;
+
+       return new Promise(function (resolve, reject) {
+               if (_this78.page > 1) {
+                       _this78.page--;
+                       _this78.trigger().then(function () {
+                               resolve();
+                       }).catch(function () {
+                               reject();
+                       });
+
+                       if (_this78.table.options.persistence && _this78.table.modExists("persistence", true) && _this78.table.modules.persistence.config.page) {
+                               _this78.table.modules.persistence.save("page");
+                       }
+               } else {
+                       console.warn("Pagination Error - Previous page would be less than page 1:", 0);
+                       reject();
+               }
+       });
+};
+
+//next page
+Page.prototype.nextPage = function () {
+       var _this79 = this;
+
+       return new Promise(function (resolve, reject) {
+               if (_this79.page < _this79.max) {
+                       _this79.page++;
+                       _this79.trigger().then(function () {
+                               resolve();
+                       }).catch(function () {
+                               reject();
+                       });
+
+                       if (_this79.table.options.persistence && _this79.table.modExists("persistence", true) && _this79.table.modules.persistence.config.page) {
+                               _this79.table.modules.persistence.save("page");
+                       }
+               } else {
+                       if (!_this79.progressiveLoad) {
+                               console.warn("Pagination Error - Next page would be greater than maximum page of " + _this79.max + ":", _this79.max + 1);
+                       }
+                       reject();
+               }
+       });
+};
+
+//return current page number
+Page.prototype.getPage = function () {
+       return this.page;
+};
+
+//return max page number
+Page.prototype.getPageMax = function () {
+       return this.max;
+};
+
+Page.prototype.getPageSize = function (size) {
+       return this.size;
+};
+
+Page.prototype.getMode = function () {
+       return this.mode;
+};
+
+//return appropriate rows for current page
+Page.prototype.getRows = function (data) {
+       var output, start, end;
+
+       if (this.mode == "local") {
+               output = [];
+
+               if (this.size === true) {
+                       start = 0;
+                       end = data.length;
+               } else {
+                       start = this.size * (this.page - 1);
+                       end = start + parseInt(this.size);
+               }
+
+               this._setPageButtons();
+
+               for (var _i15 = start; _i15 < end; _i15++) {
+                       if (data[_i15]) {
+                               output.push(data[_i15]);
+                       }
+               }
+
+               return output;
+       } else {
+
+               this._setPageButtons();
+
+               return data.slice(0);
+       }
+};
+
+Page.prototype.trigger = function () {
+       var _this80 = this;
+
+       var left;
+
+       return new Promise(function (resolve, reject) {
+
+               switch (_this80.mode) {
+                       case "local":
+                               left = _this80.table.rowManager.scrollLeft;
+
+                               _this80.table.rowManager.refreshActiveData("page");
+                               _this80.table.rowManager.scrollHorizontal(left);
+
+                               _this80.table.options.pageLoaded.call(_this80.table, _this80.getPage());
+                               resolve();
+                               break;
+
+                       case "remote":
+                       case "progressive_load":
+                       case "progressive_scroll":
+                               _this80.table.modules.ajax.blockActiveRequest();
+                               _this80._getRemotePage().then(function () {
+                                       resolve();
+                               }).catch(function () {
+                                       reject();
+                               });
+                               break;
+
+                       default:
+                               console.warn("Pagination Error - no such pagination mode:", _this80.mode);
+                               reject();
+               }
+       });
+};
+
+Page.prototype._getRemotePage = function () {
+       var _this81 = this;
+
+       var self = this,
+           oldParams,
+           pageParams;
+
+       return new Promise(function (resolve, reject) {
+
+               if (!self.table.modExists("ajax", true)) {
+                       reject();
+               }
+
+               //record old params and restore after request has been made
+               oldParams = Tabulator.prototype.helpers.deepClone(self.table.modules.ajax.getParams() || {});
+               pageParams = self.table.modules.ajax.getParams();
+
+               //configure request params
+               pageParams[_this81.dataSentNames.page] = self.page;
+
+               //set page size if defined
+               if (_this81.size) {
+                       pageParams[_this81.dataSentNames.size] = _this81.size;
+               }
+
+               //set sort data if defined
+               if (_this81.table.options.ajaxSorting && _this81.table.modExists("sort")) {
+                       var sorters = self.table.modules.sort.getSort();
+
+                       sorters.forEach(function (item) {
+                               delete item.column;
+                       });
+
+                       pageParams[_this81.dataSentNames.sorters] = sorters;
+               }
+
+               //set filter data if defined
+               if (_this81.table.options.ajaxFiltering && _this81.table.modExists("filter")) {
+                       var filters = self.table.modules.filter.getFilters(true, true);
+                       pageParams[_this81.dataSentNames.filters] = filters;
+               }
+
+               self.table.modules.ajax.setParams(pageParams);
+
+               self.table.modules.ajax.sendRequest(_this81.progressiveLoad).then(function (data) {
+                       self._parseRemoteData(data);
+                       resolve();
+               }).catch(function (e) {
+                       reject();
+               });
+
+               self.table.modules.ajax.setParams(oldParams);
+       });
+};
+
+Page.prototype._parseRemoteData = function (data) {
+       var self = this,
+           left,
+           data,
+           margin;
+
+       if (typeof data[this.dataReceivedNames.last_page] === "undefined") {
+               console.warn("Remote Pagination Error - Server response missing '" + this.dataReceivedNames.last_page + "' property");
+       }
+
+       if (data[this.dataReceivedNames.data]) {
+               this.max = parseInt(data[this.dataReceivedNames.last_page]) || 1;
+
+               if (this.progressiveLoad) {
+                       switch (this.mode) {
+                               case "progressive_load":
+
+                                       if (this.page == 1) {
+                                               this.table.rowManager.setData(data[this.dataReceivedNames.data], false, this.initialLoad && this.page == 1);
+                                       } else {
+                                               this.table.rowManager.addRows(data[this.dataReceivedNames.data]);
+                                       }
+
+                                       if (this.page < this.max) {
+                                               setTimeout(function () {
+                                                       self.nextPage().then(function () {}).catch(function () {});
+                                               }, self.table.options.ajaxProgressiveLoadDelay);
+                                       }
+                                       break;
+
+                               case "progressive_scroll":
+                                       data = this.table.rowManager.getData().concat(data[this.dataReceivedNames.data]);
+
+                                       this.table.rowManager.setData(data, true, this.initialLoad && this.page == 1);
+
+                                       margin = this.table.options.ajaxProgressiveLoadScrollMargin || this.table.rowManager.element.clientHeight * 2;
+
+                                       if (self.table.rowManager.element.scrollHeight <= self.table.rowManager.element.clientHeight + margin) {
+                                               self.nextPage().then(function () {}).catch(function () {});
+                                       }
+                                       break;
+                       }
+               } else {
+                       left = this.table.rowManager.scrollLeft;
+
+                       this.table.rowManager.setData(data[this.dataReceivedNames.data], false, this.initialLoad && this.page == 1);
+
+                       this.table.rowManager.scrollHorizontal(left);
+
+                       this.table.columnManager.scrollHorizontal(left);
+
+                       this.table.options.pageLoaded.call(this.table, this.getPage());
+               }
+
+               this.initialLoad = false;
+       } else {
+               console.warn("Remote Pagination Error - Server response missing '" + this.dataReceivedNames.data + "' property");
+       }
+};
+
+//handle the footer element being redrawn
+Page.prototype.footerRedraw = function () {
+       var footer = this.table.footerManager.element;
+
+       if (Math.ceil(footer.clientWidth) - footer.scrollWidth < 0) {
+               this.pagesElement.style.display = 'none';
+       } else {
+               this.pagesElement.style.display = '';
+
+               if (Math.ceil(footer.clientWidth) - footer.scrollWidth < 0) {
+                       this.pagesElement.style.display = 'none';
+               }
+       }
+};
+
+//set the paramter names for pagination requests
+Page.prototype.paginationDataSentNames = {
+       "page": "page",
+       "size": "size",
+       "sorters": "sorters",
+       // "sort_dir":"sort_dir",
+       "filters": "filters"
+       // "filter_value":"filter_value",
+       // "filter_type":"filter_type",
+};
+
+//set the property names for pagination responses
+Page.prototype.paginationDataReceivedNames = {
+       "current_page": "current_page",
+       "last_page": "last_page",
+       "data": "data"
+};
+
+Tabulator.prototype.registerModule("page", Page);
+
+var Persistence = function Persistence(table) {
+       this.table = table; //hold Tabulator object
+       this.mode = "";
+       this.id = "";
+       // this.persistProps = ["field", "width", "visible"];
+       this.defWatcherBlock = false;
+       this.config = {};
+       this.readFunc = false;
+       this.writeFunc = false;
+};
+
+// Test for whether localStorage is available for use.
+Persistence.prototype.localStorageTest = function () {
+       var testKey = "_tabulator_test";
+
+       try {
+               window.localStorage.setItem(testKey, testKey);
+               window.localStorage.removeItem(testKey);
+               return true;
+       } catch (e) {
+               return false;
+       }
+};
+
+//setup parameters
+Persistence.prototype.initialize = function () {
+       //determine persistent layout storage type
+
+       var mode = this.table.options.persistenceMode,
+           id = this.table.options.persistenceID,
+           retreivedData;
+
+       this.mode = mode !== true ? mode : this.localStorageTest() ? "local" : "cookie";
+
+       if (this.table.options.persistenceReaderFunc) {
+               if (typeof this.table.options.persistenceReaderFunc === "function") {
+                       this.readFunc = this.table.options.persistenceReaderFunc;
+               } else {
+                       if (this.readers[this.table.options.persistenceReaderFunc]) {
+                               this.readFunc = this.readers[this.table.options.persistenceReaderFunc];
+                       } else {
+                               console.warn("Persistence Read Error - invalid reader set", this.table.options.persistenceReaderFunc);
+                       }
+               }
+       } else {
+               if (this.readers[this.mode]) {
+                       this.readFunc = this.readers[this.mode];
+               } else {
+                       console.warn("Persistence Read Error - invalid reader set", this.mode);
+               }
+       }
+
+       if (this.table.options.persistenceWriterFunc) {
+               if (typeof this.table.options.persistenceWriterFunc === "function") {
+                       this.writeFunc = this.table.options.persistenceWriterFunc;
+               } else {
+                       if (this.readers[this.table.options.persistenceWriterFunc]) {
+                               this.writeFunc = this.readers[this.table.options.persistenceWriterFunc];
+                       } else {
+                               console.warn("Persistence Write Error - invalid reader set", this.table.options.persistenceWriterFunc);
+                       }
+               }
+       } else {
+               if (this.writers[this.mode]) {
+                       this.writeFunc = this.writers[this.mode];
+               } else {
+                       console.warn("Persistence Write Error - invalid writer set", this.mode);
+               }
+       }
+
+       //set storage tag
+       this.id = "tabulator-" + (id || this.table.element.getAttribute("id") || "");
+
+       this.config = {
+               sort: this.table.options.persistence === true || this.table.options.persistence.sort,
+               filter: this.table.options.persistence === true || this.table.options.persistence.filter,
+               group: this.table.options.persistence === true || this.table.options.persistence.group,
+               page: this.table.options.persistence === true || this.table.options.persistence.page,
+               columns: this.table.options.persistence === true ? ["title", "width", "visible"] : this.table.options.persistence.columns
+       };
+
+       //load pagination data if needed
+       if (this.config.page) {
+               retreivedData = this.retreiveData("page");
+
+               if (retreivedData) {
+                       if (typeof retreivedData.paginationSize !== "undefined" && (this.config.page === true || this.config.page.size)) {
+                               this.table.options.paginationSize = retreivedData.paginationSize;
+                       }
+
+                       if (typeof retreivedData.paginationInitialPage !== "undefined" && (this.config.page === true || this.config.page.page)) {
+                               this.table.options.paginationInitialPage = retreivedData.paginationInitialPage;
+                       }
+               }
+       }
+
+       //load group data if needed
+       if (this.config.group) {
+               retreivedData = this.retreiveData("group");
+
+               if (retreivedData) {
+                       if (typeof retreivedData.groupBy !== "undefined" && (this.config.group === true || this.config.group.groupBy)) {
+                               this.table.options.groupBy = retreivedData.groupBy;
+                       }
+                       if (typeof retreivedData.groupStartOpen !== "undefined" && (this.config.group === true || this.config.group.groupStartOpen)) {
+                               this.table.options.groupStartOpen = retreivedData.groupStartOpen;
+                       }
+                       if (typeof retreivedData.groupHeader !== "undefined" && (this.config.group === true || this.config.group.groupHeader)) {
+                               this.table.options.groupHeader = retreivedData.groupHeader;
+                       }
+               }
+       }
+};
+
+Persistence.prototype.initializeColumn = function (column) {
+       var self = this,
+           def,
+           keys;
+
+       if (this.config.columns) {
+               this.defWatcherBlock = true;
+
+               def = column.getDefinition();
+
+               keys = this.config.columns === true ? Object.keys(def) : this.config.columns;
+
+               keys.forEach(function (key) {
+                       var props = Object.getOwnPropertyDescriptor(def, key);
+                       var value = def[key];
+                       if (props) {
+                               Object.defineProperty(def, key, {
+                                       set: function set(newValue) {
+                                               value = newValue;
+
+                                               if (!self.defWatcherBlock) {
+                                                       self.save("columns");
+                                               }
+
+                                               if (props.set) {
+                                                       props.set(newValue);
+                                               }
+                                       },
+                                       get: function get() {
+                                               if (props.get) {
+                                                       props.get();
+                                               }
+                                               return value;
+                                       }
+                               });
+                       }
+               });
+
+               this.defWatcherBlock = false;
+       }
+};
+
+//load saved definitions
+Persistence.prototype.load = function (type, current) {
+       var data = this.retreiveData(type);
+
+       if (current) {
+               data = data ? this.mergeDefinition(current, data) : current;
+       }
+
+       return data;
+};
+
+//retreive data from memory
+Persistence.prototype.retreiveData = function (type) {
+       return this.readFunc ? this.readFunc(this.id, type) : false;
+};
+
+//merge old and new column definitions
+Persistence.prototype.mergeDefinition = function (oldCols, newCols) {
+       var self = this,
+           output = [];
+
+       // oldCols = oldCols || [];
+       newCols = newCols || [];
+
+       newCols.forEach(function (column, to) {
+
+               var from = self._findColumn(oldCols, column),
+                   keys;
+
+               if (from) {
+
+                       if (self.config.columns === true || self.config.columns == undefined) {
+                               keys = Object.keys(from);
+                               keys.push("width");
+                       } else {
+                               keys = self.config.columns;
+                       }
+
+                       keys.forEach(function (key) {
+                               if (typeof column[key] !== "undefined") {
+                                       from[key] = column[key];
+                               }
+                       });
+
+                       if (from.columns) {
+                               from.columns = self.mergeDefinition(from.columns, column.columns);
+                       }
+
+                       output.push(from);
+               }
+       });
+
+       oldCols.forEach(function (column, i) {
+               var from = self._findColumn(newCols, column);
+               if (!from) {
+                       if (output.length > i) {
+                               output.splice(i, 0, column);
+                       } else {
+                               output.push(column);
+                       }
+               }
+       });
+
+       return output;
+};
+
+//find matching columns
+Persistence.prototype._findColumn = function (columns, subject) {
+       var type = subject.columns ? "group" : subject.field ? "field" : "object";
+
+       return columns.find(function (col) {
+               switch (type) {
+                       case "group":
+                               return col.title === subject.title && col.columns.length === subject.columns.length;
+                               break;
+
+                       case "field":
+                               return col.field === subject.field;
+                               break;
+
+                       case "object":
+                               return col === subject;
+                               break;
+               }
+       });
+};
+
+//save data
+Persistence.prototype.save = function (type) {
+       var data = {};
+
+       switch (type) {
+               case "columns":
+                       data = this.parseColumns(this.table.columnManager.getColumns());
+                       break;
+
+               case "filter":
+                       data = this.table.modules.filter.getFilters();
+                       break;
+
+               case "sort":
+                       data = this.validateSorters(this.table.modules.sort.getSort());
+                       break;
+
+               case "group":
+                       data = this.getGroupConfig();
+                       break;
+
+               case "page":
+                       data = this.getPageConfig();
+                       break;
+       }
+
+       if (this.writeFunc) {
+               this.writeFunc(this.id, type, data);
+       }
+};
+
+//ensure sorters contain no function data
+Persistence.prototype.validateSorters = function (data) {
+       data.forEach(function (item) {
+               item.column = item.field;
+               delete item.field;
+       });
+
+       return data;
+};
+
+Persistence.prototype.getGroupConfig = function () {
+       var data = {};
+
+       if (this.config.group) {
+               if (this.config.group === true || this.config.group.groupBy) {
+                       data.groupBy = this.table.options.groupBy;
+               }
+
+               if (this.config.group === true || this.config.group.groupStartOpen) {
+                       data.groupStartOpen = this.table.options.groupStartOpen;
+               }
+
+               if (this.config.group === true || this.config.group.groupHeader) {
+                       data.groupHeader = this.table.options.groupHeader;
+               }
+       }
+
+       return data;
+};
+
+Persistence.prototype.getPageConfig = function () {
+       var data = {};
+
+       if (this.config.page) {
+               if (this.config.page === true || this.config.page.size) {
+                       data.paginationSize = this.table.modules.page.getPageSize();
+               }
+
+               if (this.config.page === true || this.config.page.page) {
+                       data.paginationInitialPage = this.table.modules.page.getPage();
+               }
+       }
+
+       return data;
+};
+
+//parse columns for data to store
+Persistence.prototype.parseColumns = function (columns) {
+       var self = this,
+           definitions = [],
+           excludedKeys = ["headerContextMenu", "headerMenu", "contextMenu", "clickMenu"];
+
+       columns.forEach(function (column) {
+               var defStore = {},
+                   colDef = column.getDefinition(),
+                   keys;
+
+               if (column.isGroup) {
+                       defStore.title = colDef.title;
+                       defStore.columns = self.parseColumns(column.getColumns());
+               } else {
+                       defStore.field = column.getField();
+
+                       if (self.config.columns === true || self.config.columns == undefined) {
+                               keys = Object.keys(colDef);
+                               keys.push("width");
+                       } else {
+                               keys = self.config.columns;
+                       }
+
+                       keys.forEach(function (key) {
+
+                               switch (key) {
+                                       case "width":
+                                               defStore.width = column.getWidth();
+                                               break;
+                                       case "visible":
+                                               defStore.visible = column.visible;
+                                               break;
+
+                                       default:
+                                               if (typeof colDef[key] !== "function" && excludedKeys.indexOf(key) === -1) {
+                                                       defStore[key] = colDef[key];
+                                               }
+                               }
+                       });
+               }
+
+               definitions.push(defStore);
+       });
+
+       return definitions;
+};
+
+// read peristence information from storage
+Persistence.prototype.readers = {
+       local: function local(id, type) {
+               var data = localStorage.getItem(id + "-" + type);
+
+               return data ? JSON.parse(data) : false;
+       },
+       cookie: function cookie(id, type) {
+               var cookie = document.cookie,
+                   key = id + "-" + type,
+                   cookiePos = cookie.indexOf(key + "="),
+                   end,
+                   data;
+
+               //if cookie exists, decode and load column data into tabulator
+               if (cookiePos > -1) {
+                       cookie = cookie.substr(cookiePos);
+
+                       end = cookie.indexOf(";");
+
+                       if (end > -1) {
+                               cookie = cookie.substr(0, end);
+                       }
+
+                       data = cookie.replace(key + "=", "");
+               }
+
+               return data ? JSON.parse(data) : false;
+       }
+};
+
+//write persistence information to storage
+Persistence.prototype.writers = {
+       local: function local(id, type, data) {
+               localStorage.setItem(id + "-" + type, JSON.stringify(data));
+       },
+       cookie: function cookie(id, type, data) {
+               var expireDate = new Date();
+
+               expireDate.setDate(expireDate.getDate() + 10000);
+
+               document.cookie = id + "-" + type + "=" + JSON.stringify(data) + "; expires=" + expireDate.toUTCString();
+       }
+};
+
+Tabulator.prototype.registerModule("persistence", Persistence);
+
+var Print = function Print(table) {
+       this.table = table; //hold Tabulator object
+       this.element = false;
+       this.manualBlock = false;
+};
+
+Print.prototype.initialize = function () {
+       window.addEventListener("beforeprint", this.replaceTable.bind(this));
+       window.addEventListener("afterprint", this.cleanup.bind(this));
+};
+
+Print.prototype.replaceTable = function () {
+       if (!this.manualBlock) {
+               this.element = document.createElement("div");
+               this.element.classList.add("tabulator-print-table");
+
+               this.element.appendChild(this.table.modules.export.genereateTable(this.table.options.printConfig, this.table.options.printStyled, this.table.options.printRowRange, "print"));
+
+               this.table.element.style.display = "none";
+
+               this.table.element.parentNode.insertBefore(this.element, this.table.element);
+       }
+};
+
+Print.prototype.cleanup = function () {
+       document.body.classList.remove("tabulator-print-fullscreen-hide");
+
+       if (this.element && this.element.parentNode) {
+               this.element.parentNode.removeChild(this.element);
+               this.table.element.style.display = "";
+       }
+};
+
+Print.prototype.printFullscreen = function (visible, style, config) {
+       var scrollX = window.scrollX,
+           scrollY = window.scrollY,
+           headerEl = document.createElement("div"),
+           footerEl = document.createElement("div"),
+           tableEl = this.table.modules.export.genereateTable(typeof config != "undefined" ? config : this.table.options.printConfig, typeof style != "undefined" ? style : this.table.options.printStyled, visible, "print"),
+           headerContent,
+           footerContent;
+
+       this.manualBlock = true;
+
+       this.element = document.createElement("div");
+       this.element.classList.add("tabulator-print-fullscreen");
+
+       if (this.table.options.printHeader) {
+               headerEl.classList.add("tabulator-print-header");
+
+               headerContent = typeof this.table.options.printHeader == "function" ? this.table.options.printHeader.call(this.table) : this.table.options.printHeader;
+
+               if (typeof headerContent == "string") {
+                       headerEl.innerHTML = headerContent;
+               } else {
+                       headerEl.appendChild(headerContent);
+               }
+
+               this.element.appendChild(headerEl);
+       }
+
+       this.element.appendChild(tableEl);
+
+       if (this.table.options.printFooter) {
+               footerEl.classList.add("tabulator-print-footer");
+
+               footerContent = typeof this.table.options.printFooter == "function" ? this.table.options.printFooter.call(this.table) : this.table.options.printFooter;
+
+               if (typeof footerContent == "string") {
+                       footerEl.innerHTML = footerContent;
+               } else {
+                       footerEl.appendChild(footerContent);
+               }
+
+               this.element.appendChild(footerEl);
+       }
+
+       document.body.classList.add("tabulator-print-fullscreen-hide");
+       document.body.appendChild(this.element);
+
+       if (this.table.options.printFormatter) {
+               this.table.options.printFormatter(this.element, tableEl);
+       }
+
+       window.print();
+
+       this.cleanup();
+
+       window.scrollTo(scrollX, scrollY);
+
+       this.manualBlock = false;
+};
+
+Tabulator.prototype.registerModule("print", Print);
+var ReactiveData = function ReactiveData(table) {
+       this.table = table; //hold Tabulator object
+       this.data = false;
+       this.blocked = false; //block reactivity while performing update
+       this.origFuncs = {}; // hold original data array functions to allow replacement after data is done with
+       this.currentVersion = 0;
+};
+
+ReactiveData.prototype.watchData = function (data) {
+       var self = this,
+           pushFunc,
+           version;
+
+       this.currentVersion++;
+
+       version = this.currentVersion;
+
+       self.unwatchData();
+
+       self.data = data;
+
+       //override array push function
+       self.origFuncs.push = data.push;
+
+       Object.defineProperty(self.data, "push", {
+               enumerable: false,
+               configurable: true,
+               value: function value() {
+                       var args = Array.from(arguments);
+
+                       if (!self.blocked && version === self.currentVersion) {
+                               args.forEach(function (arg) {
+                                       self.table.rowManager.addRowActual(arg, false);
+                               });
+                       }
+
+                       return self.origFuncs.push.apply(data, arguments);
+               }
+       });
+
+       //override array unshift function
+       self.origFuncs.unshift = data.unshift;
+
+       Object.defineProperty(self.data, "unshift", {
+               enumerable: false,
+               configurable: true,
+               value: function value() {
+                       var args = Array.from(arguments);
+
+                       if (!self.blocked && version === self.currentVersion) {
+                               args.forEach(function (arg) {
+                                       self.table.rowManager.addRowActual(arg, true);
+                               });
+                       }
+
+                       return self.origFuncs.unshift.apply(data, arguments);
+               }
+       });
+
+       //override array shift function
+       self.origFuncs.shift = data.shift;
+
+       Object.defineProperty(self.data, "shift", {
+               enumerable: false,
+               configurable: true,
+               value: function value() {
+                       var row;
+
+                       if (!self.blocked && version === self.currentVersion) {
+                               if (self.data.length) {
+                                       row = self.table.rowManager.getRowFromDataObject(self.data[0]);
+
+                                       if (row) {
+                                               row.deleteActual();
+                                       }
+                               }
+                       }
+
+                       return self.origFuncs.shift.call(data);
+               }
+       });
+
+       //override array pop function
+       self.origFuncs.pop = data.pop;
+
+       Object.defineProperty(self.data, "pop", {
+               enumerable: false,
+               configurable: true,
+               value: function value() {
+                       var row;
+                       if (!self.blocked && version === self.currentVersion) {
+                               if (self.data.length) {
+                                       row = self.table.rowManager.getRowFromDataObject(self.data[self.data.length - 1]);
+
+                                       if (row) {
+                                               row.deleteActual();
+                                       }
+                               }
+                       }
+                       return self.origFuncs.pop.call(data);
+               }
+       });
+
+       //override array splice function
+       self.origFuncs.splice = data.splice;
+
+       Object.defineProperty(self.data, "splice", {
+               enumerable: false,
+               configurable: true,
+               value: function value() {
+                       var args = Array.from(arguments),
+                           start = args[0] < 0 ? data.length + args[0] : args[0],
+                           end = args[1],
+                           newRows = args[2] ? args.slice(2) : false,
+                           startRow;
+
+                       if (!self.blocked && version === self.currentVersion) {
+
+                               //add new rows
+                               if (newRows) {
+                                       startRow = data[start] ? self.table.rowManager.getRowFromDataObject(data[start]) : false;
+
+                                       if (startRow) {
+                                               newRows.forEach(function (rowData) {
+                                                       self.table.rowManager.addRowActual(rowData, true, startRow, true);
+                                               });
+                                       } else {
+                                               newRows = newRows.slice().reverse();
+
+                                               newRows.forEach(function (rowData) {
+                                                       self.table.rowManager.addRowActual(rowData, true, false, true);
+                                               });
+                                       }
+                               }
+
+                               //delete removed rows
+                               if (end !== 0) {
+                                       var oldRows = data.slice(start, typeof args[1] === "undefined" ? args[1] : start + end);
+
+                                       oldRows.forEach(function (rowData, i) {
+                                               var row = self.table.rowManager.getRowFromDataObject(rowData);
+
+                                               if (row) {
+                                                       row.deleteActual(i !== oldRows.length - 1);
+                                               }
+                                       });
+                               }
+
+                               if (newRows || end !== 0) {
+                                       self.table.rowManager.reRenderInPosition();
+                               }
+                       }
+
+                       return self.origFuncs.splice.apply(data, arguments);
+               }
+       });
+};
+
+ReactiveData.prototype.unwatchData = function () {
+       if (this.data !== false) {
+               for (var key in this.origFuncs) {
+                       Object.defineProperty(this.data, key, {
+                               enumerable: true,
+                               configurable: true,
+                               writable: true,
+                               value: this.origFuncs.key
+                       });
+               }
+       }
+};
+
+ReactiveData.prototype.watchRow = function (row) {
+       var data = row.getData();
+
+       this.blocked = true;
+
+       for (var key in data) {
+               this.watchKey(row, data, key);
+       }
+
+       if (this.table.options.dataTree) {
+               this.watchTreeChildren(row);
+       }
+
+       this.blocked = false;
+};
+
+ReactiveData.prototype.watchTreeChildren = function (row) {
+       var self = this,
+           childField = row.getData()[this.table.options.dataTreeChildField],
+           origFuncs = {};
+
+       function rebuildTree() {
+               self.table.modules.dataTree.initializeRow(row);
+               self.table.modules.dataTree.layoutRow(row);
+               self.table.rowManager.refreshActiveData("tree", false, true);
+       }
+
+       if (childField) {
+
+               origFuncs.push = childField.push;
+
+               Object.defineProperty(childField, "push", {
+                       enumerable: false,
+                       configurable: true,
+                       value: function value() {
+                               var result = origFuncs.push.apply(childField, arguments);
+
+                               rebuildTree();
+
+                               return result;
+                       }
+               });
+
+               origFuncs.unshift = childField.unshift;
+
+               Object.defineProperty(childField, "unshift", {
+                       enumerable: false,
+                       configurable: true,
+                       value: function value() {
+                               var result = origFuncs.unshift.apply(childField, arguments);
+
+                               rebuildTree();
+
+                               return result;
+                       }
+               });
+
+               origFuncs.shift = childField.shift;
+
+               Object.defineProperty(childField, "shift", {
+                       enumerable: false,
+                       configurable: true,
+                       value: function value() {
+                               var result = origFuncs.shift.call(childField);
+
+                               rebuildTree();
+
+                               return result;
+                       }
+               });
+
+               origFuncs.pop = childField.pop;
+
+               Object.defineProperty(childField, "pop", {
+                       enumerable: false,
+                       configurable: true,
+                       value: function value() {
+                               var result = origFuncs.pop.call(childField);
+
+                               rebuildTree();
+
+                               return result;
+                       }
+               });
+
+               origFuncs.splice = childField.splice;
+
+               Object.defineProperty(childField, "splice", {
+                       enumerable: false,
+                       configurable: true,
+                       value: function value() {
+                               var result = origFuncs.splice.apply(childField, arguments);
+
+                               rebuildTree();
+
+                               return result;
+                       }
+               });
+       }
+};
+
+ReactiveData.prototype.watchKey = function (row, data, key) {
+       var self = this,
+           props = Object.getOwnPropertyDescriptor(data, key),
+           value = data[key],
+           version = this.currentVersion;
+
+       Object.defineProperty(data, key, {
+               set: function set(newValue) {
+                       value = newValue;
+                       if (!self.blocked && version === self.currentVersion) {
+                               var update = {};
+                               update[key] = newValue;
+                               row.updateData(update);
+                       }
+
+                       if (props.set) {
+                               props.set(newValue);
+                       }
+               },
+               get: function get() {
+
+                       if (props.get) {
+                               props.get();
+                       }
+
+                       return value;
+               }
+       });
+};
+
+ReactiveData.prototype.unwatchRow = function (row) {
+       var data = row.getData();
+
+       for (var key in data) {
+               Object.defineProperty(data, key, {
+                       value: data[key]
+               });
+       }
+};
+
+ReactiveData.prototype.block = function () {
+       this.blocked = true;
+};
+
+ReactiveData.prototype.unblock = function () {
+       this.blocked = false;
+};
+
+Tabulator.prototype.registerModule("reactiveData", ReactiveData);
+
+var ResizeColumns = function ResizeColumns(table) {
+       this.table = table; //hold Tabulator object
+       this.startColumn = false;
+       this.startX = false;
+       this.startWidth = false;
+       this.handle = null;
+       this.prevHandle = null;
+};
+
+ResizeColumns.prototype.initializeColumn = function (type, column, element) {
+       var self = this,
+           variableHeight = false,
+           mode = this.table.options.resizableColumns;
+
+       //set column resize mode
+       if (type === "header") {
+               variableHeight = column.definition.formatter == "textarea" || column.definition.variableHeight;
+               column.modules.resize = { variableHeight: variableHeight };
+       }
+
+       if (mode === true || mode == type) {
+
+               var handle = document.createElement('div');
+               handle.className = "tabulator-col-resize-handle";
+
+               var prevHandle = document.createElement('div');
+               prevHandle.className = "tabulator-col-resize-handle prev";
+
+               handle.addEventListener("click", function (e) {
+                       e.stopPropagation();
+               });
+
+               var handleDown = function handleDown(e) {
+                       var nearestColumn = column.getLastColumn();
+
+                       if (nearestColumn && self._checkResizability(nearestColumn)) {
+                               self.startColumn = column;
+                               self._mouseDown(e, nearestColumn, handle);
+                       }
+               };
+
+               handle.addEventListener("mousedown", handleDown);
+               handle.addEventListener("touchstart", handleDown, { passive: true });
+
+               //reszie column on  double click
+               handle.addEventListener("dblclick", function (e) {
+                       var col = column.getLastColumn();
+
+                       if (col && self._checkResizability(col)) {
+                               e.stopPropagation();
+                               col.reinitializeWidth(true);
+                       }
+               });
+
+               prevHandle.addEventListener("click", function (e) {
+                       e.stopPropagation();
+               });
+
+               var prevHandleDown = function prevHandleDown(e) {
+                       var nearestColumn, colIndex, prevColumn;
+
+                       nearestColumn = column.getFirstColumn();
+
+                       if (nearestColumn) {
+                               colIndex = self.table.columnManager.findColumnIndex(nearestColumn);
+                               prevColumn = colIndex > 0 ? self.table.columnManager.getColumnByIndex(colIndex - 1) : false;
+
+                               if (prevColumn && self._checkResizability(prevColumn)) {
+                                       self.startColumn = column;
+                                       self._mouseDown(e, prevColumn, prevHandle);
+                               }
+                       }
+               };
+
+               prevHandle.addEventListener("mousedown", prevHandleDown);
+               prevHandle.addEventListener("touchstart", prevHandleDown, { passive: true });
+
+               //resize column on double click
+               prevHandle.addEventListener("dblclick", function (e) {
+                       var nearestColumn, colIndex, prevColumn;
+
+                       nearestColumn = column.getFirstColumn();
+
+                       if (nearestColumn) {
+                               colIndex = self.table.columnManager.findColumnIndex(nearestColumn);
+                               prevColumn = colIndex > 0 ? self.table.columnManager.getColumnByIndex(colIndex - 1) : false;
+
+                               if (prevColumn && self._checkResizability(prevColumn)) {
+                                       e.stopPropagation();
+                                       prevColumn.reinitializeWidth(true);
+                               }
+                       }
+               });
+
+               element.appendChild(handle);
+               element.appendChild(prevHandle);
+       }
+};
+
+ResizeColumns.prototype._checkResizability = function (column) {
+       return typeof column.definition.resizable != "undefined" ? column.definition.resizable : this.table.options.resizableColumns;
+};
+
+ResizeColumns.prototype._mouseDown = function (e, column, handle) {
+       var self = this;
+
+       self.table.element.classList.add("tabulator-block-select");
+
+       function mouseMove(e) {
+               // self.table.columnManager.tempScrollBlock();
+
+               if (self.table.rtl) {
+                       column.setWidth(self.startWidth - ((typeof e.screenX === "undefined" ? e.touches[0].screenX : e.screenX) - self.startX));
+               } else {
+                       column.setWidth(self.startWidth + ((typeof e.screenX === "undefined" ? e.touches[0].screenX : e.screenX) - self.startX));
+               }
+
+               if (self.table.options.virtualDomHoz) {
+                       self.table.vdomHoz.reinitialize(true);
+               }
+
+               if (!self.table.browserSlow && column.modules.resize && column.modules.resize.variableHeight) {
+                       column.checkCellHeights();
+               }
+       }
+
+       function mouseUp(e) {
+
+               //block editor from taking action while resizing is taking place
+               if (self.startColumn.modules.edit) {
+                       self.startColumn.modules.edit.blocked = false;
+               }
+
+               if (self.table.browserSlow && column.modules.resize && column.modules.resize.variableHeight) {
+                       column.checkCellHeights();
+               }
+
+               document.body.removeEventListener("mouseup", mouseUp);
+               document.body.removeEventListener("mousemove", mouseMove);
+
+               handle.removeEventListener("touchmove", mouseMove);
+               handle.removeEventListener("touchend", mouseUp);
+
+               self.table.element.classList.remove("tabulator-block-select");
+
+               if (self.table.options.persistence && self.table.modExists("persistence", true) && self.table.modules.persistence.config.columns) {
+                       self.table.modules.persistence.save("columns");
+               }
+
+               self.table.options.columnResized.call(self.table, column.getComponent());
+       }
+
+       e.stopPropagation(); //prevent resize from interfereing with movable columns
+
+       //block editor from taking action while resizing is taking place
+       if (self.startColumn.modules.edit) {
+               self.startColumn.modules.edit.blocked = true;
+       }
+
+       self.startX = typeof e.screenX === "undefined" ? e.touches[0].screenX : e.screenX;
+       self.startWidth = column.getWidth();
+
+       document.body.addEventListener("mousemove", mouseMove);
+       document.body.addEventListener("mouseup", mouseUp);
+       handle.addEventListener("touchmove", mouseMove, { passive: true });
+       handle.addEventListener("touchend", mouseUp);
+};
+
+Tabulator.prototype.registerModule("resizeColumns", ResizeColumns);
+var ResizeRows = function ResizeRows(table) {
+       this.table = table; //hold Tabulator object
+       this.startColumn = false;
+       this.startY = false;
+       this.startHeight = false;
+       this.handle = null;
+       this.prevHandle = null;
+};
+
+ResizeRows.prototype.initializeRow = function (row) {
+       var self = this,
+           rowEl = row.getElement();
+
+       var handle = document.createElement('div');
+       handle.className = "tabulator-row-resize-handle";
+
+       var prevHandle = document.createElement('div');
+       prevHandle.className = "tabulator-row-resize-handle prev";
+
+       handle.addEventListener("click", function (e) {
+               e.stopPropagation();
+       });
+
+       var handleDown = function handleDown(e) {
+               self.startRow = row;
+               self._mouseDown(e, row, handle);
+       };
+
+       handle.addEventListener("mousedown", handleDown);
+       handle.addEventListener("touchstart", handleDown, { passive: true });
+
+       prevHandle.addEventListener("click", function (e) {
+               e.stopPropagation();
+       });
+
+       var prevHandleDown = function prevHandleDown(e) {
+               var prevRow = self.table.rowManager.prevDisplayRow(row);
+
+               if (prevRow) {
+                       self.startRow = prevRow;
+                       self._mouseDown(e, prevRow, prevHandle);
+               }
+       };
+
+       prevHandle.addEventListener("mousedown", prevHandleDown);
+       prevHandle.addEventListener("touchstart", prevHandleDown, { passive: true });
+
+       rowEl.appendChild(handle);
+       rowEl.appendChild(prevHandle);
+};
+
+ResizeRows.prototype._mouseDown = function (e, row, handle) {
+       var self = this;
+
+       self.table.element.classList.add("tabulator-block-select");
+
+       function mouseMove(e) {
+               row.setHeight(self.startHeight + ((typeof e.screenY === "undefined" ? e.touches[0].screenY : e.screenY) - self.startY));
+       }
+
+       function mouseUp(e) {
+
+               // //block editor from taking action while resizing is taking place
+               // if(self.startColumn.modules.edit){
+               //      self.startColumn.modules.edit.blocked = false;
+               // }
+
+               document.body.removeEventListener("mouseup", mouseMove);
+               document.body.removeEventListener("mousemove", mouseMove);
+
+               handle.removeEventListener("touchmove", mouseMove);
+               handle.removeEventListener("touchend", mouseUp);
+
+               self.table.element.classList.remove("tabulator-block-select");
+
+               self.table.options.rowResized.call(this.table, row.getComponent());
+       }
+
+       e.stopPropagation(); //prevent resize from interfereing with movable columns
+
+       //block editor from taking action while resizing is taking place
+       // if(self.startColumn.modules.edit){
+       //      self.startColumn.modules.edit.blocked = true;
+       // }
+
+       self.startY = typeof e.screenY === "undefined" ? e.touches[0].screenY : e.screenY;
+       self.startHeight = row.getHeight();
+
+       document.body.addEventListener("mousemove", mouseMove);
+       document.body.addEventListener("mouseup", mouseUp);
+
+       handle.addEventListener("touchmove", mouseMove, { passive: true });
+       handle.addEventListener("touchend", mouseUp);
+};
+
+Tabulator.prototype.registerModule("resizeRows", ResizeRows);
+var ResizeTable = function ResizeTable(table) {
+       this.table = table; //hold Tabulator object
+       this.binding = false;
+       this.observer = false;
+       this.containerObserver = false;
+
+       this.tableHeight = 0;
+       this.tableWidth = 0;
+       this.containerHeight = 0;
+       this.containerWidth = 0;
+
+       this.autoResize = false;
+};
+
+ResizeTable.prototype.initialize = function (row) {
+       var _this82 = this;
+
+       var table = this.table,
+           tableStyle;
+
+       this.tableHeight = table.element.clientHeight;
+       this.tableWidth = table.element.clientWidth;
+
+       if (table.element.parentNode) {
+               this.containerHeight = table.element.parentNode.clientHeight;
+               this.containerWidth = table.element.parentNode.clientWidth;
+       }
+
+       if (typeof ResizeObserver !== "undefined" && table.rowManager.getRenderMode() === "virtual") {
+
+               this.autoResize = true;
+
+               this.observer = new ResizeObserver(function (entry) {
+                       if (!table.browserMobile || table.browserMobile && !table.modules.edit.currentCell) {
+
+                               var nodeHeight = Math.floor(entry[0].contentRect.height);
+                               var nodeWidth = Math.floor(entry[0].contentRect.width);
+
+                               if (_this82.tableHeight != nodeHeight || _this82.tableWidth != nodeWidth) {
+                                       _this82.tableHeight = nodeHeight;
+                                       _this82.tableWidth = nodeWidth;
+
+                                       if (table.element.parentNode) {
+                                               _this82.containerHeight = table.element.parentNode.clientHeight;
+                                               _this82.containerWidth = table.element.parentNode.clientWidth;
+                                       }
+
+                                       if (table.options.virtualDomHoz) {
+                                               table.vdomHoz.reinitialize(true);
+                                       }
+
+                                       table.redraw();
+                               }
+                       }
+               });
+
+               this.observer.observe(table.element);
+
+               tableStyle = window.getComputedStyle(table.element);
+
+               if (this.table.element.parentNode && !this.table.rowManager.fixedHeight && (tableStyle.getPropertyValue("max-height") || tableStyle.getPropertyValue("min-height"))) {
+
+                       this.containerObserver = new ResizeObserver(function (entry) {
+                               if (!table.browserMobile || table.browserMobile && !table.modules.edit.currentCell) {
+
+                                       var nodeHeight = Math.floor(entry[0].contentRect.height);
+                                       var nodeWidth = Math.floor(entry[0].contentRect.width);
+
+                                       if (_this82.containerHeight != nodeHeight || _this82.containerWidth != nodeWidth) {
+                                               _this82.containerHeight = nodeHeight;
+                                               _this82.containerWidth = nodeWidth;
+                                               _this82.tableHeight = table.element.clientHeight;
+                                               _this82.tableWidth = table.element.clientWidth;
+                                       }
+
+                                       if (table.options.virtualDomHoz) {
+                                               table.vdomHoz.reinitialize(true);
+                                       }
+
+                                       table.redraw();
+                               }
+                       });
+
+                       this.containerObserver.observe(this.table.element.parentNode);
+               }
+       } else {
+               this.binding = function () {
+                       if (!table.browserMobile || table.browserMobile && !table.modules.edit.currentCell) {
+                               if (table.options.virtualDomHoz) {
+                                       table.vdomHoz.reinitialize(true);
+                               }
+
+                               table.redraw();
+                       }
+               };
+
+               window.addEventListener("resize", this.binding);
+       }
+};
+
+ResizeTable.prototype.clearBindings = function (row) {
+       if (this.binding) {
+               window.removeEventListener("resize", this.binding);
+       }
+
+       if (this.observer) {
+               this.observer.unobserve(this.table.element);
+       }
+
+       if (this.containerObserver) {
+               this.containerObserver.unobserve(this.table.element.parentNode);
+       }
+};
+
+Tabulator.prototype.registerModule("resizeTable", ResizeTable);
+var ResponsiveLayout = function ResponsiveLayout(table) {
+       this.table = table; //hold Tabulator object
+       this.columns = [];
+       this.hiddenColumns = [];
+       this.mode = "";
+       this.index = 0;
+       this.collapseFormatter = [];
+       this.collapseStartOpen = true;
+       this.collapseHandleColumn = false;
+};
+
+//generate resposive columns list
+ResponsiveLayout.prototype.initialize = function () {
+       var self = this,
+           columns = [];
+
+       this.mode = this.table.options.responsiveLayout;
+       this.collapseFormatter = this.table.options.responsiveLayoutCollapseFormatter || this.formatCollapsedData;
+       this.collapseStartOpen = this.table.options.responsiveLayoutCollapseStartOpen;
+       this.hiddenColumns = [];
+
+       //detemine level of responsivity for each column
+       this.table.columnManager.columnsByIndex.forEach(function (column, i) {
+               if (column.modules.responsive) {
+                       if (column.modules.responsive.order && column.modules.responsive.visible) {
+                               column.modules.responsive.index = i;
+                               columns.push(column);
+
+                               if (!column.visible && self.mode === "collapse") {
+                                       self.hiddenColumns.push(column);
+                               }
+                       }
+               }
+       });
+
+       //sort list by responsivity
+       columns = columns.reverse();
+       columns = columns.sort(function (a, b) {
+               var diff = b.modules.responsive.order - a.modules.responsive.order;
+               return diff || b.modules.responsive.index - a.modules.responsive.index;
+       });
+
+       this.columns = columns;
+
+       if (this.mode === "collapse") {
+               this.generateCollapsedContent();
+       }
+
+       //assign collapse column
+       for (var _iterator = this.table.columnManager.columnsByIndex, _isArray = Array.isArray(_iterator), _i16 = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {
+               var _ref;
+
+               if (_isArray) {
+                       if (_i16 >= _iterator.length) break;
+                       _ref = _iterator[_i16++];
+               } else {
+                       _i16 = _iterator.next();
+                       if (_i16.done) break;
+                       _ref = _i16.value;
+               }
+
+               var col = _ref;
+
+               if (col.definition.formatter == "responsiveCollapse") {
+                       this.collapseHandleColumn = col;
+                       break;
+               }
+       }
+
+       if (this.collapseHandleColumn) {
+               if (this.hiddenColumns.length) {
+                       this.collapseHandleColumn.show();
+               } else {
+                       this.collapseHandleColumn.hide();
+               }
+       }
+};
+
+//define layout information
+ResponsiveLayout.prototype.initializeColumn = function (column) {
+       var def = column.getDefinition();
+
+       column.modules.responsive = { order: typeof def.responsive === "undefined" ? 1 : def.responsive, visible: def.visible === false ? false : true };
+};
+
+ResponsiveLayout.prototype.initializeRow = function (row) {
+       var el;
+
+       if (row.type !== "calc") {
+               el = document.createElement("div");
+               el.classList.add("tabulator-responsive-collapse");
+
+               row.modules.responsiveLayout = {
+                       element: el,
+                       open: this.collapseStartOpen
+               };
+
+               if (!this.collapseStartOpen) {
+                       el.style.display = 'none';
+               }
+       }
+};
+
+ResponsiveLayout.prototype.layoutRow = function (row) {
+       var rowEl = row.getElement();
+
+       if (row.modules.responsiveLayout) {
+               rowEl.appendChild(row.modules.responsiveLayout.element);
+               this.generateCollapsedRowContent(row);
+       }
+};
+
+//update column visibility
+ResponsiveLayout.prototype.updateColumnVisibility = function (column, visible) {
+       var index;
+       if (column.modules.responsive) {
+               column.modules.responsive.visible = visible;
+               this.initialize();
+       }
+};
+
+ResponsiveLayout.prototype.hideColumn = function (column) {
+       var colCount = this.hiddenColumns.length;
+
+       column.hide(false, true);
+
+       if (this.mode === "collapse") {
+               this.hiddenColumns.unshift(column);
+               this.generateCollapsedContent();
+
+               if (this.collapseHandleColumn && !colCount) {
+                       this.collapseHandleColumn.show();
+               }
+       }
+};
+
+ResponsiveLayout.prototype.showColumn = function (column) {
+       var index;
+
+       column.show(false, true);
+       //set column width to prevent calculation loops on uninitialized columns
+       column.setWidth(column.getWidth());
+
+       if (this.mode === "collapse") {
+               index = this.hiddenColumns.indexOf(column);
+
+               if (index > -1) {
+                       this.hiddenColumns.splice(index, 1);
+               }
+
+               this.generateCollapsedContent();
+
+               if (this.collapseHandleColumn && !this.hiddenColumns.length) {
+                       this.collapseHandleColumn.hide();
+               }
+       }
+};
+
+//redraw columns to fit space
+ResponsiveLayout.prototype.update = function () {
+       var self = this,
+           working = true;
+
+       while (working) {
+
+               var width = self.table.modules.layout.getMode() == "fitColumns" ? self.table.columnManager.getFlexBaseWidth() : self.table.columnManager.getWidth();
+
+               var diff = (self.table.options.headerVisible ? self.table.columnManager.element.clientWidth : self.table.element.clientWidth) - width;
+
+               if (diff < 0) {
+                       //table is too wide
+                       var column = self.columns[self.index];
+
+                       if (column) {
+                               self.hideColumn(column);
+                               self.index++;
+                       } else {
+                               working = false;
+                       }
+               } else {
+
+                       //table has spare space
+                       var _column = self.columns[self.index - 1];
+
+                       if (_column) {
+                               if (diff > 0) {
+                                       if (diff >= _column.getWidth()) {
+                                               self.showColumn(_column);
+                                               self.index--;
+                                       } else {
+                                               working = false;
+                                       }
+                               } else {
+                                       working = false;
+                               }
+                       } else {
+                               working = false;
+                       }
+               }
+
+               if (!self.table.rowManager.activeRowsCount) {
+                       self.table.rowManager.renderEmptyScroll();
+               }
+       }
+};
+
+ResponsiveLayout.prototype.generateCollapsedContent = function () {
+       var self = this,
+           rows = this.table.rowManager.getDisplayRows();
+
+       rows.forEach(function (row) {
+               self.generateCollapsedRowContent(row);
+       });
+};
+
+ResponsiveLayout.prototype.generateCollapsedRowContent = function (row) {
+       var el, contents;
+
+       if (row.modules.responsiveLayout) {
+               el = row.modules.responsiveLayout.element;
+
+               while (el.firstChild) {
+                       el.removeChild(el.firstChild);
+               }contents = this.collapseFormatter(this.generateCollapsedRowData(row));
+               if (contents) {
+                       el.appendChild(contents);
+               }
+       }
+};
+
+ResponsiveLayout.prototype.generateCollapsedRowData = function (row) {
+       var self = this,
+           data = row.getData(),
+           output = [],
+           mockCellComponent;
+
+       this.hiddenColumns.forEach(function (column) {
+               var value = column.getFieldValue(data);
+
+               if (column.definition.title && column.field) {
+                       if (column.modules.format && self.table.options.responsiveLayoutCollapseUseFormatters) {
+
+                               mockCellComponent = {
+                                       value: false,
+                                       data: {},
+                                       getValue: function getValue() {
+                                               return value;
+                                       },
+                                       getData: function getData() {
+                                               return data;
+                                       },
+                                       getElement: function getElement() {
+                                               return document.createElement("div");
+                                       },
+                                       getRow: function getRow() {
+                                               return row.getComponent();
+                                       },
+                                       getColumn: function getColumn() {
+                                               return column.getComponent();
+                                       }
+                               };
+
+                               output.push({
+                                       title: column.definition.title,
+                                       value: column.modules.format.formatter.call(self.table.modules.format, mockCellComponent, column.modules.format.params)
+                               });
+                       } else {
+                               output.push({
+                                       title: column.definition.title,
+                                       value: value
+                               });
+                       }
+               }
+       });
+
+       return output;
+};
+
+ResponsiveLayout.prototype.formatCollapsedData = function (data) {
+       var list = document.createElement("table"),
+           listContents = "";
+
+       data.forEach(function (item) {
+               var div = document.createElement("div");
+
+               if (item.value instanceof Node) {
+                       div.appendChild(item.value);
+                       item.value = div.innerHTML;
+               }
+
+               listContents += "<tr><td><strong>" + item.title + "</strong></td><td>" + item.value + "</td></tr>";
+       });
+
+       list.innerHTML = listContents;
+
+       return Object.keys(data).length ? list : "";
+};
+
+Tabulator.prototype.registerModule("responsiveLayout", ResponsiveLayout);
+
+var SelectRow = function SelectRow(table) {
+       this.table = table; //hold Tabulator object
+       this.selecting = false; //flag selecting in progress
+       this.lastClickedRow = false; //last clicked row
+       this.selectPrev = []; //hold previously selected element for drag drop selection
+       this.selectedRows = []; //hold selected rows
+       this.headerCheckboxElement = null; // hold header select element
+};
+
+SelectRow.prototype.clearSelectionData = function (silent) {
+       this.selecting = false;
+       this.lastClickedRow = false;
+       this.selectPrev = [];
+       this.selectedRows = [];
+
+       if (!silent) {
+               this._rowSelectionChanged();
+       }
+};
+
+SelectRow.prototype.initializeRow = function (row) {
+       var self = this,
+           element = row.getElement();
+
+       // trigger end of row selection
+       var endSelect = function endSelect() {
+
+               setTimeout(function () {
+                       self.selecting = false;
+               }, 50);
+
+               document.body.removeEventListener("mouseup", endSelect);
+       };
+
+       row.modules.select = { selected: false };
+
+       //set row selection class
+       if (self.table.options.selectableCheck.call(this.table, row.getComponent())) {
+               element.classList.add("tabulator-selectable");
+               element.classList.remove("tabulator-unselectable");
+
+               if (self.table.options.selectable && self.table.options.selectable != "highlight") {
+                       if (self.table.options.selectableRangeMode === "click") {
+                               element.addEventListener("click", function (e) {
+                                       if (e.shiftKey) {
+                                               self.table._clearSelection();
+                                               self.lastClickedRow = self.lastClickedRow || row;
+
+                                               var lastClickedRowIdx = self.table.rowManager.getDisplayRowIndex(self.lastClickedRow);
+                                               var rowIdx = self.table.rowManager.getDisplayRowIndex(row);
+
+                                               var fromRowIdx = lastClickedRowIdx <= rowIdx ? lastClickedRowIdx : rowIdx;
+                                               var toRowIdx = lastClickedRowIdx >= rowIdx ? lastClickedRowIdx : rowIdx;
+
+                                               var rows = self.table.rowManager.getDisplayRows().slice(0);
+                                               var toggledRows = rows.splice(fromRowIdx, toRowIdx - fromRowIdx + 1);
+
+                                               if (e.ctrlKey || e.metaKey) {
+                                                       toggledRows.forEach(function (toggledRow) {
+                                                               if (toggledRow !== self.lastClickedRow) {
+
+                                                                       if (self.table.options.selectable !== true && !self.isRowSelected(row)) {
+                                                                               if (self.selectedRows.length < self.table.options.selectable) {
+                                                                                       self.toggleRow(toggledRow);
+                                                                               }
+                                                                       } else {
+                                                                               self.toggleRow(toggledRow);
+                                                                       }
+                                                               }
+                                                       });
+                                                       self.lastClickedRow = row;
+                                               } else {
+                                                       self.deselectRows(undefined, true);
+
+                                                       if (self.table.options.selectable !== true) {
+                                                               if (toggledRows.length > self.table.options.selectable) {
+                                                                       toggledRows = toggledRows.slice(0, self.table.options.selectable);
+                                                               }
+                                                       }
+
+                                                       self.selectRows(toggledRows);
+                                               }
+                                               self.table._clearSelection();
+                                       } else if (e.ctrlKey || e.metaKey) {
+                                               self.toggleRow(row);
+                                               self.lastClickedRow = row;
+                                       } else {
+                                               self.deselectRows(undefined, true);
+                                               self.selectRows(row);
+                                               self.lastClickedRow = row;
+                                       }
+                               });
+                       } else {
+                               element.addEventListener("click", function (e) {
+                                       if (!self.table.modExists("edit") || !self.table.modules.edit.getCurrentCell()) {
+                                               self.table._clearSelection();
+                                       }
+
+                                       if (!self.selecting) {
+                                               self.toggleRow(row);
+                                       }
+                               });
+
+                               element.addEventListener("mousedown", function (e) {
+                                       if (e.shiftKey) {
+                                               self.table._clearSelection();
+
+                                               self.selecting = true;
+
+                                               self.selectPrev = [];
+
+                                               document.body.addEventListener("mouseup", endSelect);
+                                               document.body.addEventListener("keyup", endSelect);
+
+                                               self.toggleRow(row);
+
+                                               return false;
+                                       }
+                               });
+
+                               element.addEventListener("mouseenter", function (e) {
+                                       if (self.selecting) {
+                                               self.table._clearSelection();
+                                               self.toggleRow(row);
+
+                                               if (self.selectPrev[1] == row) {
+                                                       self.toggleRow(self.selectPrev[0]);
+                                               }
+                                       }
+                               });
+
+                               element.addEventListener("mouseout", function (e) {
+                                       if (self.selecting) {
+                                               self.table._clearSelection();
+                                               self.selectPrev.unshift(row);
+                                       }
+                               });
+                       }
+               }
+       } else {
+               element.classList.add("tabulator-unselectable");
+               element.classList.remove("tabulator-selectable");
+       }
+};
+
+//toggle row selection
+SelectRow.prototype.toggleRow = function (row) {
+       if (this.table.options.selectableCheck.call(this.table, row.getComponent())) {
+               if (row.modules.select && row.modules.select.selected) {
+                       this._deselectRow(row);
+               } else {
+                       this._selectRow(row);
+               }
+       }
+};
+
+//select a number of rows
+SelectRow.prototype.selectRows = function (rows) {
+       var _this83 = this;
+
+       var rowMatch;
+
+       switch (typeof rows === 'undefined' ? 'undefined' : _typeof(rows)) {
+               case "undefined":
+                       this.table.rowManager.rows.forEach(function (row) {
+                               _this83._selectRow(row, true, true);
+                       });
+
+                       this._rowSelectionChanged();
+                       break;
+
+               case "string":
+
+                       rowMatch = this.table.rowManager.findRow(rows);
+
+                       if (rowMatch) {
+                               this._selectRow(rowMatch, true, true);
+                       } else {
+                               this.table.rowManager.getRows(rows).forEach(function (row) {
+                                       _this83._selectRow(row, true, true);
+                               });
+                       }
+
+                       this._rowSelectionChanged();
+                       break;
+
+               default:
+                       if (Array.isArray(rows)) {
+                               rows.forEach(function (row) {
+                                       _this83._selectRow(row, true, true);
+                               });
+
+                               this._rowSelectionChanged();
+                       } else {
+                               this._selectRow(rows, false, true);
+                       }
+                       break;
+       }
+};
+
+//select an individual row
+SelectRow.prototype._selectRow = function (rowInfo, silent, force) {
+       var index;
+
+       //handle max row count
+       if (!isNaN(this.table.options.selectable) && this.table.options.selectable !== true && !force) {
+               if (this.selectedRows.length >= this.table.options.selectable) {
+                       if (this.table.options.selectableRollingSelection) {
+                               this._deselectRow(this.selectedRows[0]);
+                       } else {
+                               return false;
+                       }
+               }
+       }
+
+       var row = this.table.rowManager.findRow(rowInfo);
+
+       if (row) {
+               if (this.selectedRows.indexOf(row) == -1) {
+                       if (!row.modules.select) {
+                               row.modules.select = {};
+                       }
+
+                       row.modules.select.selected = true;
+                       if (row.modules.select.checkboxEl) {
+                               row.modules.select.checkboxEl.checked = true;
+                       }
+                       row.getElement().classList.add("tabulator-selected");
+
+                       this.selectedRows.push(row);
+
+                       if (this.table.options.dataTreeSelectPropagate) {
+                               this.childRowSelection(row, true);
+                       }
+
+                       if (!silent) {
+                               this.table.options.rowSelected.call(this.table, row.getComponent());
+                       }
+
+                       this._rowSelectionChanged(silent);
+               }
+       } else {
+               if (!silent) {
+                       console.warn("Selection Error - No such row found, ignoring selection:" + rowInfo);
+               }
+       }
+};
+
+SelectRow.prototype.isRowSelected = function (row) {
+       return this.selectedRows.indexOf(row) !== -1;
+};
+
+//deselect a number of rows
+SelectRow.prototype.deselectRows = function (rows, silent) {
+       var self = this,
+           rowCount;
+
+       if (typeof rows == "undefined") {
+
+               rowCount = self.selectedRows.length;
+
+               for (var _i17 = 0; _i17 < rowCount; _i17++) {
+                       self._deselectRow(self.selectedRows[0], true);
+               }
+
+               self._rowSelectionChanged(silent);
+       } else {
+               if (Array.isArray(rows)) {
+                       rows.forEach(function (row) {
+                               self._deselectRow(row, true);
+                       });
+
+                       self._rowSelectionChanged(silent);
+               } else {
+                       self._deselectRow(rows, silent);
+               }
+       }
+};
+
+//deselect an individual row
+SelectRow.prototype._deselectRow = function (rowInfo, silent) {
+       var self = this,
+           row = self.table.rowManager.findRow(rowInfo),
+           index;
+
+       if (row) {
+               index = self.selectedRows.findIndex(function (selectedRow) {
+                       return selectedRow == row;
+               });
+
+               if (index > -1) {
+
+                       if (!row.modules.select) {
+                               row.modules.select = {};
+                       }
+
+                       row.modules.select.selected = false;
+                       if (row.modules.select.checkboxEl) {
+                               row.modules.select.checkboxEl.checked = false;
+                       }
+                       row.getElement().classList.remove("tabulator-selected");
+                       self.selectedRows.splice(index, 1);
+
+                       if (this.table.options.dataTreeSelectPropagate) {
+                               this.childRowSelection(row, false);
+                       }
+
+                       if (!silent) {
+                               self.table.options.rowDeselected.call(this.table, row.getComponent());
+                       }
+
+                       self._rowSelectionChanged(silent);
+               }
+       } else {
+               if (!silent) {
+                       console.warn("Deselection Error - No such row found, ignoring selection:" + rowInfo);
+               }
+       }
+};
+
+SelectRow.prototype.getSelectedData = function () {
+       var data = [];
+
+       this.selectedRows.forEach(function (row) {
+               data.push(row.getData());
+       });
+
+       return data;
+};
+
+SelectRow.prototype.getSelectedRows = function () {
+
+       var rows = [];
+
+       this.selectedRows.forEach(function (row) {
+               rows.push(row.getComponent());
+       });
+
+       return rows;
+};
+
+SelectRow.prototype._rowSelectionChanged = function (silent) {
+       if (this.headerCheckboxElement) {
+               if (this.selectedRows.length === 0) {
+                       this.headerCheckboxElement.checked = false;
+                       this.headerCheckboxElement.indeterminate = false;
+               } else if (this.table.rowManager.rows.length === this.selectedRows.length) {
+                       this.headerCheckboxElement.checked = true;
+                       this.headerCheckboxElement.indeterminate = false;
+               } else {
+                       this.headerCheckboxElement.indeterminate = true;
+                       this.headerCheckboxElement.checked = false;
+               }
+       }
+
+       if (!silent) {
+               this.table.options.rowSelectionChanged.call(this.table, this.getSelectedData(), this.getSelectedRows());
+       }
+};
+
+SelectRow.prototype.registerRowSelectCheckbox = function (row, element) {
+       if (!row._row.modules.select) {
+               row._row.modules.select = {};
+       }
+
+       row._row.modules.select.checkboxEl = element;
+};
+
+SelectRow.prototype.registerHeaderSelectCheckbox = function (element) {
+       this.headerCheckboxElement = element;
+};
+
+SelectRow.prototype.childRowSelection = function (row, select) {
+       var children = this.table.modules.dataTree.getChildren(row);
+
+       if (select) {
+               for (var _iterator2 = children, _isArray2 = Array.isArray(_iterator2), _i18 = 0, _iterator2 = _isArray2 ? _iterator2 : _iterator2[Symbol.iterator]();;) {
+                       var _ref2;
+
+                       if (_isArray2) {
+                               if (_i18 >= _iterator2.length) break;
+                               _ref2 = _iterator2[_i18++];
+                       } else {
+                               _i18 = _iterator2.next();
+                               if (_i18.done) break;
+                               _ref2 = _i18.value;
+                       }
+
+                       var child = _ref2;
+
+                       this._selectRow(child, true);
+               }
+       } else {
+               for (var _iterator3 = children, _isArray3 = Array.isArray(_iterator3), _i19 = 0, _iterator3 = _isArray3 ? _iterator3 : _iterator3[Symbol.iterator]();;) {
+                       var _ref3;
+
+                       if (_isArray3) {
+                               if (_i19 >= _iterator3.length) break;
+                               _ref3 = _iterator3[_i19++];
+                       } else {
+                               _i19 = _iterator3.next();
+                               if (_i19.done) break;
+                               _ref3 = _i19.value;
+                       }
+
+                       var _child = _ref3;
+
+                       this._deselectRow(_child, true);
+               }
+       }
+};
+
+Tabulator.prototype.registerModule("selectRow", SelectRow);
+
+var Sort = function Sort(table) {
+       this.table = table; //hold Tabulator object
+       this.sortList = []; //holder current sort
+       this.changed = false; //has the sort changed since last render
+};
+
+//initialize column header for sorting
+Sort.prototype.initializeColumn = function (column, content) {
+       var self = this,
+           sorter = false,
+           colEl,
+           arrowEl;
+
+       switch (_typeof(column.definition.sorter)) {
+               case "string":
+                       if (self.sorters[column.definition.sorter]) {
+                               sorter = self.sorters[column.definition.sorter];
+                       } else {
+                               console.warn("Sort Error - No such sorter found: ", column.definition.sorter);
+                       }
+                       break;
+
+               case "function":
+                       sorter = column.definition.sorter;
+                       break;
+       }
+
+       column.modules.sort = {
+               sorter: sorter, dir: "none",
+               params: column.definition.sorterParams || {},
+               startingDir: column.definition.headerSortStartingDir || "asc",
+               tristate: typeof column.definition.headerSortTristate !== "undefined" ? column.definition.headerSortTristate : this.table.options.headerSortTristate
+       };
+
+       if (typeof column.definition.headerSort === "undefined" ? this.table.options.headerSort !== false : column.definition.headerSort !== false) {
+
+               colEl = column.getElement();
+
+               colEl.classList.add("tabulator-sortable");
+
+               arrowEl = document.createElement("div");
+               arrowEl.classList.add("tabulator-col-sorter");
+
+               if (_typeof(this.table.options.headerSortElement) == "object") {
+                       arrowEl.appendChild(this.table.options.headerSortElement);
+               } else {
+                       arrowEl.innerHTML = this.table.options.headerSortElement;
+               }
+
+               //create sorter arrow
+               content.appendChild(arrowEl);
+
+               column.modules.sort.element = arrowEl;
+
+               //sort on click
+               colEl.addEventListener("click", function (e) {
+                       var dir = "",
+                           sorters = [],
+                           match = false;
+
+                       if (column.modules.sort) {
+                               if (column.modules.sort.tristate) {
+                                       if (column.modules.sort.dir == "none") {
+                                               dir = column.modules.sort.startingDir;
+                                       } else {
+                                               if (column.modules.sort.dir == column.modules.sort.startingDir) {
+                                                       dir = column.modules.sort.dir == "asc" ? "desc" : "asc";
+                                               } else {
+                                                       dir = "none";
+                                               }
+                                       }
+                               } else {
+                                       switch (column.modules.sort.dir) {
+                                               case "asc":
+                                                       dir = "desc";
+                                                       break;
+
+                                               case "desc":
+                                                       dir = "asc";
+                                                       break;
+
+                                               default:
+                                                       dir = column.modules.sort.startingDir;
+                                       }
+                               }
+
+                               if (self.table.options.columnHeaderSortMulti && (e.shiftKey || e.ctrlKey)) {
+                                       sorters = self.getSort();
+
+                                       match = sorters.findIndex(function (sorter) {
+                                               return sorter.field === column.getField();
+                                       });
+
+                                       if (match > -1) {
+                                               sorters[match].dir = dir;
+
+                                               if (match != sorters.length - 1) {
+                                                       match = sorters.splice(match, 1)[0];
+                                                       if (dir != "none") {
+                                                               sorters.push(match);
+                                                       }
+                                               }
+                                       } else {
+                                               if (dir != "none") {
+                                                       sorters.push({ column: column, dir: dir });
+                                               }
+                                       }
+
+                                       //add to existing sort
+                                       self.setSort(sorters);
+                               } else {
+                                       if (dir == "none") {
+                                               self.clear();
+                                       } else {
+                                               //sort by column only
+                                               self.setSort(column, dir);
+                                       }
+                               }
+
+                               self.table.rowManager.sorterRefresh(!self.sortList.length);
+                       }
+               });
+       }
+};
+
+//check if the sorters have changed since last use
+Sort.prototype.hasChanged = function () {
+       var changed = this.changed;
+       this.changed = false;
+       return changed;
+};
+
+//return current sorters
+Sort.prototype.getSort = function () {
+       var self = this,
+           sorters = [];
+
+       self.sortList.forEach(function (item) {
+               if (item.column) {
+                       sorters.push({ column: item.column.getComponent(), field: item.column.getField(), dir: item.dir });
+               }
+       });
+
+       return sorters;
+};
+
+//change sort list and trigger sort
+Sort.prototype.setSort = function (sortList, dir) {
+       var self = this,
+           newSortList = [];
+
+       if (!Array.isArray(sortList)) {
+               sortList = [{ column: sortList, dir: dir }];
+       }
+
+       sortList.forEach(function (item) {
+               var column;
+
+               column = self.table.columnManager.findColumn(item.column);
+
+               if (column) {
+                       item.column = column;
+                       newSortList.push(item);
+                       self.changed = true;
+               } else {
+                       console.warn("Sort Warning - Sort field does not exist and is being ignored: ", item.column);
+               }
+       });
+
+       self.sortList = newSortList;
+
+       if (this.table.options.persistence && this.table.modExists("persistence", true) && this.table.modules.persistence.config.sort) {
+               this.table.modules.persistence.save("sort");
+       }
+};
+
+//clear sorters
+Sort.prototype.clear = function () {
+       this.setSort([]);
+};
+
+//find appropriate sorter for column
+Sort.prototype.findSorter = function (column) {
+       var row = this.table.rowManager.activeRows[0],
+           sorter = "string",
+           field,
+           value;
+
+       if (row) {
+               row = row.getData();
+               field = column.getField();
+
+               if (field) {
+
+                       value = column.getFieldValue(row);
+
+                       switch (typeof value === 'undefined' ? 'undefined' : _typeof(value)) {
+                               case "undefined":
+                                       sorter = "string";
+                                       break;
+
+                               case "boolean":
+                                       sorter = "boolean";
+                                       break;
+
+                               default:
+                                       if (!isNaN(value) && value !== "") {
+                                               sorter = "number";
+                                       } else {
+                                               if (value.match(/((^[0-9]+[a-z]+)|(^[a-z]+[0-9]+))+$/i)) {
+                                                       sorter = "alphanum";
+                                               }
+                                       }
+                                       break;
+                       }
+               }
+       }
+
+       return this.sorters[sorter];
+};
+
+//work through sort list sorting data
+Sort.prototype.sort = function (data) {
+       var self = this,
+           sortList = this.table.options.sortOrderReverse ? self.sortList.slice().reverse() : self.sortList,
+           sortListActual = [],
+           rowComponents = [],
+           lastSort;
+
+       if (self.table.options.dataSorting) {
+               self.table.options.dataSorting.call(self.table, self.getSort());
+       }
+
+       self.clearColumnHeaders();
+
+       if (!self.table.options.ajaxSorting) {
+
+               //build list of valid sorters and trigger column specific callbacks before sort begins
+               sortList.forEach(function (item, i) {
+                       var sortObj = item.column.modules.sort;
+
+                       if (item.column && sortObj) {
+
+                               //if no sorter has been defined, take a guess
+                               if (!sortObj.sorter) {
+                                       sortObj.sorter = self.findSorter(item.column);
+                               }
+
+                               item.params = typeof sortObj.params === "function" ? sortObj.params(item.column.getComponent(), item.dir) : sortObj.params;
+
+                               sortListActual.push(item);
+                       }
+
+                       self.setColumnHeader(item.column, item.dir);
+               });
+
+               //sort data
+               if (sortListActual.length) {
+                       self._sortItems(data, sortListActual);
+               }
+       } else {
+               sortList.forEach(function (item, i) {
+                       self.setColumnHeader(item.column, item.dir);
+               });
+       }
+
+       if (self.table.options.dataSorted) {
+               data.forEach(function (row) {
+                       rowComponents.push(row.getComponent());
+               });
+
+               self.table.options.dataSorted.call(self.table, self.getSort(), rowComponents);
+       }
+};
+
+//clear sort arrows on columns
+Sort.prototype.clearColumnHeaders = function () {
+       this.table.columnManager.getRealColumns().forEach(function (column) {
+               if (column.modules.sort) {
+                       column.modules.sort.dir = "none";
+                       column.getElement().setAttribute("aria-sort", "none");
+               }
+       });
+};
+
+//set the column header sort direction
+Sort.prototype.setColumnHeader = function (column, dir) {
+       column.modules.sort.dir = dir;
+       column.getElement().setAttribute("aria-sort", dir);
+};
+
+//sort each item in sort list
+Sort.prototype._sortItems = function (data, sortList) {
+       var _this84 = this;
+
+       var sorterCount = sortList.length - 1;
+
+       data.sort(function (a, b) {
+               var result;
+
+               for (var i = sorterCount; i >= 0; i--) {
+                       var sortItem = sortList[i];
+
+                       result = _this84._sortRow(a, b, sortItem.column, sortItem.dir, sortItem.params);
+
+                       if (result !== 0) {
+                               break;
+                       }
+               }
+
+               return result;
+       });
+};
+
+//process individual rows for a sort function on active data
+Sort.prototype._sortRow = function (a, b, column, dir, params) {
+       var el1Comp, el2Comp, colComp;
+
+       //switch elements depending on search direction
+       var el1 = dir == "asc" ? a : b;
+       var el2 = dir == "asc" ? b : a;
+
+       a = column.getFieldValue(el1.getData());
+       b = column.getFieldValue(el2.getData());
+
+       a = typeof a !== "undefined" ? a : "";
+       b = typeof b !== "undefined" ? b : "";
+
+       el1Comp = el1.getComponent();
+       el2Comp = el2.getComponent();
+
+       return column.modules.sort.sorter.call(this, a, b, el1Comp, el2Comp, column.getComponent(), dir, params);
+};
+
+//default data sorters
+Sort.prototype.sorters = {
+
+       //sort numbers
+       number: function number(a, b, aRow, bRow, column, dir, params) {
+               var alignEmptyValues = params.alignEmptyValues;
+               var decimal = params.decimalSeparator || ".";
+               var thousand = params.thousandSeparator || ",";
+               var emptyAlign = 0;
+
+               a = parseFloat(String(a).split(thousand).join("").split(decimal).join("."));
+               b = parseFloat(String(b).split(thousand).join("").split(decimal).join("."));
+
+               //handle non numeric values
+               if (isNaN(a)) {
+                       emptyAlign = isNaN(b) ? 0 : -1;
+               } else if (isNaN(b)) {
+                       emptyAlign = 1;
+               } else {
+                       //compare valid values
+                       return a - b;
+               }
+
+               //fix empty values in position
+               if (alignEmptyValues === "top" && dir === "desc" || alignEmptyValues === "bottom" && dir === "asc") {
+                       emptyAlign *= -1;
+               }
+
+               return emptyAlign;
+       },
+
+       //sort strings
+       string: function string(a, b, aRow, bRow, column, dir, params) {
+               var alignEmptyValues = params.alignEmptyValues;
+               var emptyAlign = 0;
+               var locale;
+
+               //handle empty values
+               if (!a) {
+                       emptyAlign = !b ? 0 : -1;
+               } else if (!b) {
+                       emptyAlign = 1;
+               } else {
+                       //compare valid values
+                       switch (_typeof(params.locale)) {
+                               case "boolean":
+                                       if (params.locale) {
+                                               locale = this.table.modules.localize.getLocale();
+                                       }
+                                       break;
+                               case "string":
+                                       locale = params.locale;
+                                       break;
+                       }
+
+                       return String(a).toLowerCase().localeCompare(String(b).toLowerCase(), locale);
+               }
+
+               //fix empty values in position
+               if (alignEmptyValues === "top" && dir === "desc" || alignEmptyValues === "bottom" && dir === "asc") {
+                       emptyAlign *= -1;
+               }
+
+               return emptyAlign;
+       },
+
+       //sort date
+       date: function date(a, b, aRow, bRow, column, dir, params) {
+               if (!params.format) {
+                       params.format = "DD/MM/YYYY";
+               }
+
+               return this.sorters.datetime.call(this, a, b, aRow, bRow, column, dir, params);
+       },
+
+       //sort HH:mm formatted times
+       time: function time(a, b, aRow, bRow, column, dir, params) {
+               if (!params.format) {
+                       params.format = "HH:mm";
+               }
+
+               return this.sorters.datetime.call(this, a, b, aRow, bRow, column, dir, params);
+       },
+
+       //sort datetime
+       datetime: function datetime(a, b, aRow, bRow, column, dir, params) {
+               var format = params.format || "DD/MM/YYYY HH:mm:ss",
+                   alignEmptyValues = params.alignEmptyValues,
+                   emptyAlign = 0;
+
+               if (typeof moment != "undefined") {
+                       a = moment(a, format);
+                       b = moment(b, format);
+
+                       if (!a.isValid()) {
+                               emptyAlign = !b.isValid() ? 0 : -1;
+                       } else if (!b.isValid()) {
+                               emptyAlign = 1;
+                       } else {
+                               //compare valid values
+                               return a - b;
+                       }
+
+                       //fix empty values in position
+                       if (alignEmptyValues === "top" && dir === "desc" || alignEmptyValues === "bottom" && dir === "asc") {
+                               emptyAlign *= -1;
+                       }
+
+                       return emptyAlign;
+               } else {
+                       console.error("Sort Error - 'datetime' sorter is dependant on moment.js");
+               }
+       },
+
+       //sort booleans
+       boolean: function boolean(a, b, aRow, bRow, column, dir, params) {
+               var el1 = a === true || a === "true" || a === "True" || a === 1 ? 1 : 0;
+               var el2 = b === true || b === "true" || b === "True" || b === 1 ? 1 : 0;
+
+               return el1 - el2;
+       },
+
+       //sort if element contains any data
+       array: function array(a, b, aRow, bRow, column, dir, params) {
+               var el1 = 0;
+               var el2 = 0;
+               var type = params.type || "length";
+               var alignEmptyValues = params.alignEmptyValues;
+               var emptyAlign = 0;
+
+               function calc(value) {
+
+                       switch (type) {
+                               case "length":
+                                       return value.length;
+                                       break;
+
+                               case "sum":
+                                       return value.reduce(function (c, d) {
+                                               return c + d;
+                                       });
+                                       break;
+
+                               case "max":
+                                       return Math.max.apply(null, value);
+                                       break;
+
+                               case "min":
+                                       return Math.min.apply(null, value);
+                                       break;
+
+                               case "avg":
+                                       return value.reduce(function (c, d) {
+                                               return c + d;
+                                       }) / value.length;
+                                       break;
+                       }
+               }
+
+               //handle non array values
+               if (!Array.isArray(a)) {
+                       alignEmptyValues = !Array.isArray(b) ? 0 : -1;
+               } else if (!Array.isArray(b)) {
+                       alignEmptyValues = 1;
+               } else {
+
+                       //compare valid values
+                       el1 = a ? calc(a) : 0;
+                       el2 = b ? calc(b) : 0;
+
+                       return el1 - el2;
+               }
+
+               //fix empty values in position
+               if (alignEmptyValues === "top" && dir === "desc" || alignEmptyValues === "bottom" && dir === "asc") {
+                       emptyAlign *= -1;
+               }
+
+               return emptyAlign;
+       },
+
+       //sort if element contains any data
+       exists: function exists(a, b, aRow, bRow, column, dir, params) {
+               var el1 = typeof a == "undefined" ? 0 : 1;
+               var el2 = typeof b == "undefined" ? 0 : 1;
+
+               return el1 - el2;
+       },
+
+       //sort alpha numeric strings
+       alphanum: function alphanum(as, bs, aRow, bRow, column, dir, params) {
+               var a,
+                   b,
+                   a1,
+                   b1,
+                   i = 0,
+                   L,
+                   rx = /(\d+)|(\D+)/g,
+                   rd = /\d/;
+               var alignEmptyValues = params.alignEmptyValues;
+               var emptyAlign = 0;
+
+               //handle empty values
+               if (!as && as !== 0) {
+                       emptyAlign = !bs && bs !== 0 ? 0 : -1;
+               } else if (!bs && bs !== 0) {
+                       emptyAlign = 1;
+               } else {
+
+                       if (isFinite(as) && isFinite(bs)) return as - bs;
+                       a = String(as).toLowerCase();
+                       b = String(bs).toLowerCase();
+                       if (a === b) return 0;
+                       if (!(rd.test(a) && rd.test(b))) return a > b ? 1 : -1;
+                       a = a.match(rx);
+                       b = b.match(rx);
+                       L = a.length > b.length ? b.length : a.length;
+                       while (i < L) {
+                               a1 = a[i];
+                               b1 = b[i++];
+                               if (a1 !== b1) {
+                                       if (isFinite(a1) && isFinite(b1)) {
+                                               if (a1.charAt(0) === "0") a1 = "." + a1;
+                                               if (b1.charAt(0) === "0") b1 = "." + b1;
+                                               return a1 - b1;
+                                       } else return a1 > b1 ? 1 : -1;
+                               }
+                       }
+
+                       return a.length > b.length;
+               }
+
+               //fix empty values in position
+               if (alignEmptyValues === "top" && dir === "desc" || alignEmptyValues === "bottom" && dir === "asc") {
+                       emptyAlign *= -1;
+               }
+
+               return emptyAlign;
+       }
+};
+
+Tabulator.prototype.registerModule("sort", Sort);
+
+var Validate = function Validate(table) {
+       this.table = table;
+       this.invalidCells = [];
+};
+
+//validate
+Validate.prototype.initializeColumn = function (column) {
+       var self = this,
+           config = [],
+           validator;
+
+       if (column.definition.validator) {
+
+               if (Array.isArray(column.definition.validator)) {
+                       column.definition.validator.forEach(function (item) {
+                               validator = self._extractValidator(item);
+
+                               if (validator) {
+                                       config.push(validator);
+                               }
+                       });
+               } else {
+                       validator = this._extractValidator(column.definition.validator);
+
+                       if (validator) {
+                               config.push(validator);
+                       }
+               }
+
+               column.modules.validate = config.length ? config : false;
+       }
+};
+
+Validate.prototype._extractValidator = function (value) {
+       var type, params, pos;
+
+       switch (typeof value === 'undefined' ? 'undefined' : _typeof(value)) {
+               case "string":
+                       pos = value.indexOf(':');
+
+                       if (pos > -1) {
+                               type = value.substring(0, pos);
+                               params = value.substring(pos + 1);
+                       } else {
+                               type = value;
+                       }
+
+                       return this._buildValidator(type, params);
+                       break;
+
+               case "function":
+                       return this._buildValidator(value);
+                       break;
+
+               case "object":
+                       return this._buildValidator(value.type, value.parameters);
+                       break;
+       }
+};
+
+Validate.prototype._buildValidator = function (type, params) {
+
+       var func = typeof type == "function" ? type : this.validators[type];
+
+       if (!func) {
+               console.warn("Validator Setup Error - No matching validator found:", type);
+               return false;
+       } else {
+               return {
+                       type: typeof type == "function" ? "function" : type,
+                       func: func,
+                       params: params
+               };
+       }
+};
+
+Validate.prototype.validate = function (validators, cell, value) {
+       var self = this,
+           valid = [],
+           invalidIndex = this.invalidCells.indexOf(cell);
+
+       if (validators) {
+               validators.forEach(function (item) {
+                       if (!item.func.call(self, cell.getComponent(), value, item.params)) {
+                               valid.push({
+                                       type: item.type,
+                                       parameters: item.params
+                               });
+                       }
+               });
+       }
+
+       valid = valid.length ? valid : true;
+
+       if (!cell.modules.validate) {
+               cell.modules.validate = {};
+       }
+
+       if (valid === true) {
+               cell.modules.validate.invalid = false;
+               cell.getElement().classList.remove("tabulator-validation-fail");
+
+               if (invalidIndex > -1) {
+                       this.invalidCells.splice(invalidIndex, 1);
+               }
+       } else {
+               cell.modules.validate.invalid = true;
+
+               if (this.table.options.validationMode !== "manual") {
+                       cell.getElement().classList.add("tabulator-validation-fail");
+               }
+
+               if (invalidIndex == -1) {
+                       this.invalidCells.push(cell);
+               }
+       }
+
+       return valid;
+};
+
+Validate.prototype.getInvalidCells = function () {
+       var output = [];
+
+       this.invalidCells.forEach(function (cell) {
+               output.push(cell.getComponent());
+       });
+
+       return output;
+};
+
+Validate.prototype.clearValidation = function (cell) {
+       var invalidIndex;
+
+       if (cell.modules.validate && cell.modules.validate.invalid) {
+
+               cell.getElement().classList.remove("tabulator-validation-fail");
+               cell.modules.validate.invalid = false;
+
+               invalidIndex = this.invalidCells.indexOf(cell);
+
+               if (invalidIndex > -1) {
+                       this.invalidCells.splice(invalidIndex, 1);
+               }
+       }
+};
+
+Validate.prototype.validators = {
+
+       //is integer
+       integer: function integer(cell, value, parameters) {
+               if (value === "" || value === null || typeof value === "undefined") {
+                       return true;
+               }
+               value = Number(value);
+               return typeof value === 'number' && isFinite(value) && Math.floor(value) === value;
+       },
+
+       //is float
+       float: function float(cell, value, parameters) {
+               if (value === "" || value === null || typeof value === "undefined") {
+                       return true;
+               }
+               value = Number(value);
+               return typeof value === 'number' && isFinite(value) && value % 1 !== 0;
+       },
+
+       //must be a number
+       numeric: function numeric(cell, value, parameters) {
+               if (value === "" || value === null || typeof value === "undefined") {
+                       return true;
+               }
+               return !isNaN(value);
+       },
+
+       //must be a string
+       string: function string(cell, value, parameters) {
+               if (value === "" || value === null || typeof value === "undefined") {
+                       return true;
+               }
+               return isNaN(value);
+       },
+
+       //maximum value
+       max: function max(cell, value, parameters) {
+               if (value === "" || value === null || typeof value === "undefined") {
+                       return true;
+               }
+               return parseFloat(value) <= parameters;
+       },
+
+       //minimum value
+       min: function min(cell, value, parameters) {
+               if (value === "" || value === null || typeof value === "undefined") {
+                       return true;
+               }
+               return parseFloat(value) >= parameters;
+       },
+
+       //starts with  value
+       starts: function starts(cell, value, parameters) {
+               if (value === "" || value === null || typeof value === "undefined") {
+                       return true;
+               }
+               return String(value).toLowerCase().startsWith(String(parameters).toLowerCase());
+       },
+
+       //ends with  value
+       ends: function ends(cell, value, parameters) {
+               if (value === "" || value === null || typeof value === "undefined") {
+                       return true;
+               }
+               return String(value).toLowerCase().endsWith(String(parameters).toLowerCase());
+       },
+
+       //minimum string length
+       minLength: function minLength(cell, value, parameters) {
+               if (value === "" || value === null || typeof value === "undefined") {
+                       return true;
+               }
+               return String(value).length >= parameters;
+       },
+
+       //maximum string length
+       maxLength: function maxLength(cell, value, parameters) {
+               if (value === "" || value === null || typeof value === "undefined") {
+                       return true;
+               }
+               return String(value).length <= parameters;
+       },
+
+       //in provided value list
+       in: function _in(cell, value, parameters) {
+               if (value === "" || value === null || typeof value === "undefined") {
+                       return true;
+               }
+               if (typeof parameters == "string") {
+                       parameters = parameters.split("|");
+               }
+
+               return value === "" || parameters.indexOf(value) > -1;
+       },
+
+       //must match provided regex
+       regex: function regex(cell, value, parameters) {
+               if (value === "" || value === null || typeof value === "undefined") {
+                       return true;
+               }
+               var reg = new RegExp(parameters);
+
+               return reg.test(value);
+       },
+
+       //value must be unique in this column
+       unique: function unique(cell, value, parameters) {
+               if (value === "" || value === null || typeof value === "undefined") {
+                       return true;
+               }
+               var unique = true;
+
+               var cellData = cell.getData();
+               var column = cell.getColumn()._getSelf();
+
+               this.table.rowManager.rows.forEach(function (row) {
+                       var data = row.getData();
+
+                       if (data !== cellData) {
+                               if (value == column.getFieldValue(data)) {
+                                       unique = false;
+                               }
+                       }
+               });
+
+               return unique;
+       },
+
+       //must have a value
+       required: function required(cell, value, parameters) {
+               return value !== "" && value !== null && typeof value !== "undefined";
+       }
+};
+
+Tabulator.prototype.registerModule("validate", Validate);
+
+export default Tabulator;
\ No newline at end of file
diff --git a/website/js/vendor/tabulator/js/tabulator.js b/website/js/vendor/tabulator/js/tabulator.js
new file mode 100644 (file)
index 0000000..81f6fef
--- /dev/null
@@ -0,0 +1,26250 @@
+var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
+
+/* Tabulator v4.8.3 (c) Oliver Folkerd */
+
+;(function (global, factory) {
+       if ((typeof exports === 'undefined' ? 'undefined' : _typeof(exports)) === 'object' && typeof module !== 'undefined') {
+               module.exports = factory();
+       } else if (typeof define === 'function' && define.amd) {
+               define(factory);
+       } else {
+               global.Tabulator = factory();
+       }
+})(this, function () {
+
+       'use strict';
+
+       // https://tc39.github.io/ecma262/#sec-array.prototype.findIndex
+
+
+       if (!Array.prototype.findIndex) {
+
+               Object.defineProperty(Array.prototype, 'findIndex', {
+
+                       value: function value(predicate) {
+
+                               // 1. Let O be ? ToObject(this value).
+
+
+                               if (this == null) {
+
+                                       throw new TypeError('"this" is null or not defined');
+                               }
+
+                               var o = Object(this);
+
+                               // 2. Let len be ? ToLength(? Get(O, "length")).
+
+
+                               var len = o.length >>> 0;
+
+                               // 3. If IsCallable(predicate) is false, throw a TypeError exception.
+
+
+                               if (typeof predicate !== 'function') {
+
+                                       throw new TypeError('predicate must be a function');
+                               }
+
+                               // 4. If thisArg was supplied, let T be thisArg; else let T be undefined.
+
+
+                               var thisArg = arguments[1];
+
+                               // 5. Let k be 0.
+
+
+                               var k = 0;
+
+                               // 6. Repeat, while k < len
+
+
+                               while (k < len) {
+
+                                       // a. Let Pk be ! ToString(k).
+
+
+                                       // b. Let kValue be ? Get(O, Pk).
+
+
+                                       // c. Let testResult be ToBoolean(? Call(predicate, T, « kValue, k, O »)).
+
+
+                                       // d. If testResult is true, return k.
+
+
+                                       var kValue = o[k];
+
+                                       if (predicate.call(thisArg, kValue, k, o)) {
+
+                                               return k;
+                                       }
+
+                                       // e. Increase k by 1.
+
+
+                                       k++;
+                               }
+
+                               // 7. Return -1.
+
+
+                               return -1;
+                       }
+
+               });
+       }
+
+       // https://tc39.github.io/ecma262/#sec-array.prototype.find
+
+
+       if (!Array.prototype.find) {
+
+               Object.defineProperty(Array.prototype, 'find', {
+
+                       value: function value(predicate) {
+
+                               // 1. Let O be ? ToObject(this value).
+
+
+                               if (this == null) {
+
+                                       throw new TypeError('"this" is null or not defined');
+                               }
+
+                               var o = Object(this);
+
+                               // 2. Let len be ? ToLength(? Get(O, "length")).
+
+
+                               var len = o.length >>> 0;
+
+                               // 3. If IsCallable(predicate) is false, throw a TypeError exception.
+
+
+                               if (typeof predicate !== 'function') {
+
+                                       throw new TypeError('predicate must be a function');
+                               }
+
+                               // 4. If thisArg was supplied, let T be thisArg; else let T be undefined.
+
+
+                               var thisArg = arguments[1];
+
+                               // 5. Let k be 0.
+
+
+                               var k = 0;
+
+                               // 6. Repeat, while k < len
+
+
+                               while (k < len) {
+
+                                       // a. Let Pk be ! ToString(k).
+
+
+                                       // b. Let kValue be ? Get(O, Pk).
+
+
+                                       // c. Let testResult be ToBoolean(? Call(predicate, T, « kValue, k, O »)).
+
+
+                                       // d. If testResult is true, return kValue.
+
+
+                                       var kValue = o[k];
+
+                                       if (predicate.call(thisArg, kValue, k, o)) {
+
+                                               return kValue;
+                                       }
+
+                                       // e. Increase k by 1.
+
+
+                                       k++;
+                               }
+
+                               // 7. Return undefined.
+
+
+                               return undefined;
+                       }
+
+               });
+       }
+
+       // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/includes#Polyfill
+
+
+       if (!String.prototype.includes) {
+
+               String.prototype.includes = function (search, start) {
+
+                       'use strict';
+
+                       if (search instanceof RegExp) {
+
+                               throw TypeError('first argument must not be a RegExp');
+                       }
+
+                       if (start === undefined) {
+                               start = 0;
+                       }
+
+                       return this.indexOf(search, start) !== -1;
+               };
+       }
+
+       // https://tc39.github.io/ecma262/#sec-array.prototype.includes
+
+
+       if (!Array.prototype.includes) {
+
+               Object.defineProperty(Array.prototype, 'includes', {
+
+                       value: function value(searchElement, fromIndex) {
+
+                               if (this == null) {
+
+                                       throw new TypeError('"this" is null or not defined');
+                               }
+
+                               // 1. Let O be ? ToObject(this value).
+
+
+                               var o = Object(this);
+
+                               // 2. Let len be ? ToLength(? Get(O, "length")).
+
+
+                               var len = o.length >>> 0;
+
+                               // 3. If len is 0, return false.
+
+
+                               if (len === 0) {
+
+                                       return false;
+                               }
+
+                               // 4. Let n be ? ToInteger(fromIndex).
+
+
+                               //    (If fromIndex is undefined, this step produces the value 0.)
+
+
+                               var n = fromIndex | 0;
+
+                               // 5. If n ≥ 0, then
+
+
+                               //  a. Let k be n.
+
+
+                               // 6. Else n < 0,
+
+
+                               //  a. Let k be len + n.
+
+
+                               //  b. If k < 0, let k be 0.
+
+
+                               var k = Math.max(n >= 0 ? n : len - Math.abs(n), 0);
+
+                               function sameValueZero(x, y) {
+
+                                       return x === y || typeof x === 'number' && typeof y === 'number' && isNaN(x) && isNaN(y);
+                               }
+
+                               // 7. Repeat, while k < len
+
+
+                               while (k < len) {
+
+                                       // a. Let elementK be the result of ? Get(O, ! ToString(k)).
+
+
+                                       // b. If SameValueZero(searchElement, elementK) is true, return true.
+
+
+                                       if (sameValueZero(o[k], searchElement)) {
+
+                                               return true;
+                                       }
+
+                                       // c. Increase k by 1.
+
+
+                                       k++;
+                               }
+
+                               // 8. Return false
+
+
+                               return false;
+                       }
+
+               });
+       }
+
+       // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign#Polyfill
+
+
+       if (typeof Object.assign !== 'function') {
+
+               // Must be writable: true, enumerable: false, configurable: true
+
+
+               Object.defineProperty(Object, "assign", {
+
+                       value: function assign(target, varArgs) {
+                               // .length of function is 2
+
+
+                               'use strict';
+
+                               if (target === null || target === undefined) {
+
+                                       throw new TypeError('Cannot convert undefined or null to object');
+                               }
+
+                               var to = Object(target);
+
+                               for (var index = 1; index < arguments.length; index++) {
+
+                                       var nextSource = arguments[index];
+
+                                       if (nextSource !== null && nextSource !== undefined) {
+
+                                               for (var nextKey in nextSource) {
+
+                                                       // Avoid bugs when hasOwnProperty is shadowed
+
+
+                                                       if (Object.prototype.hasOwnProperty.call(nextSource, nextKey)) {
+
+                                                               to[nextKey] = nextSource[nextKey];
+                                                       }
+                                               }
+                                       }
+                               }
+
+                               return to;
+                       },
+
+                       writable: true,
+
+                       configurable: true
+
+               });
+       }
+
+       var ColumnManager = function ColumnManager(table) {
+
+               this.table = table; //hold parent table
+
+
+               this.blockHozScrollEvent = false;
+
+               this.headersElement = this.createHeadersElement();
+
+               this.element = this.createHeaderElement(); //containing element
+
+
+               this.rowManager = null; //hold row manager object
+
+
+               this.columns = []; // column definition object
+
+
+               this.columnsByIndex = []; //columns by index
+
+
+               this.columnsByField = {}; //columns by field
+
+
+               this.scrollLeft = 0;
+
+               this.element.insertBefore(this.headersElement, this.element.firstChild);
+       };
+
+       ////////////// Setup Functions /////////////////
+
+
+       ColumnManager.prototype.createHeadersElement = function () {
+
+               var el = document.createElement("div");
+
+               el.classList.add("tabulator-headers");
+
+               return el;
+       };
+
+       ColumnManager.prototype.createHeaderElement = function () {
+
+               var el = document.createElement("div");
+
+               el.classList.add("tabulator-header");
+
+               if (!this.table.options.headerVisible) {
+
+                       el.classList.add("tabulator-header-hidden");
+               }
+
+               return el;
+       };
+
+       ColumnManager.prototype.initialize = function () {
+
+               var self = this;
+
+               //scroll body along with header
+
+
+               // self.element.addEventListener("scroll", function(e){
+
+
+               //      if(!self.blockHozScrollEvent){
+
+
+               //              self.table.rowManager.scrollHorizontal(self.element.scrollLeft);
+
+
+               //      }
+
+
+               // });
+
+       };
+
+       //link to row manager
+
+
+       ColumnManager.prototype.setRowManager = function (manager) {
+
+               this.rowManager = manager;
+       };
+
+       //return containing element
+
+
+       ColumnManager.prototype.getElement = function () {
+
+               return this.element;
+       };
+
+       //return header containing element
+
+
+       ColumnManager.prototype.getHeadersElement = function () {
+
+               return this.headersElement;
+       };
+
+       // ColumnManager.prototype.tempScrollBlock = function(){
+
+
+       //      clearTimeout(this.blockHozScrollEvent);
+
+
+       //      this.blockHozScrollEvent = setTimeout(() => {this.blockHozScrollEvent = false;}, 50);
+
+
+       // }
+
+
+       //scroll horizontally to match table body
+
+
+       ColumnManager.prototype.scrollHorizontal = function (left) {
+
+               var hozAdjust = 0,
+                   scrollWidth = this.element.scrollWidth - this.table.element.clientWidth;
+
+               // this.tempScrollBlock();
+
+
+               this.element.scrollLeft = left;
+
+               //adjust for vertical scrollbar moving table when present
+
+
+               if (left > scrollWidth) {
+
+                       hozAdjust = left - scrollWidth;
+
+                       this.element.style.marginLeft = -hozAdjust + "px";
+               } else {
+
+                       this.element.style.marginLeft = 0;
+               }
+
+               //keep frozen columns fixed in position
+
+
+               //this._calcFrozenColumnsPos(hozAdjust + 3);
+
+
+               this.scrollLeft = left;
+
+               if (this.table.modExists("frozenColumns")) {
+
+                       this.table.modules.frozenColumns.scrollHorizontal();
+               }
+       };
+
+       ///////////// Column Setup Functions /////////////
+
+
+       ColumnManager.prototype.generateColumnsFromRowData = function (data) {
+
+               var cols = [],
+                   definitions = this.table.options.autoColumnsDefinitions,
+                   row,
+                   sorter;
+
+               if (data && data.length) {
+
+                       row = data[0];
+
+                       for (var key in row) {
+
+                               var col = {
+
+                                       field: key,
+
+                                       title: key
+
+                               };
+
+                               var value = row[key];
+
+                               switch (typeof value === 'undefined' ? 'undefined' : _typeof(value)) {
+
+                                       case "undefined":
+
+                                               sorter = "string";
+
+                                               break;
+
+                                       case "boolean":
+
+                                               sorter = "boolean";
+
+                                               break;
+
+                                       case "object":
+
+                                               if (Array.isArray(value)) {
+
+                                                       sorter = "array";
+                                               } else {
+
+                                                       sorter = "string";
+                                               }
+
+                                               break;
+
+                                       default:
+
+                                               if (!isNaN(value) && value !== "") {
+
+                                                       sorter = "number";
+                                               } else {
+
+                                                       if (value.match(/((^[0-9]+[a-z]+)|(^[a-z]+[0-9]+))+$/i)) {
+
+                                                               sorter = "alphanum";
+                                                       } else {
+
+                                                               sorter = "string";
+                                                       }
+                                               }
+
+                                               break;
+
+                               }
+
+                               col.sorter = sorter;
+
+                               cols.push(col);
+                       }
+
+                       if (definitions) {
+
+                               switch (typeof definitions === 'undefined' ? 'undefined' : _typeof(definitions)) {
+
+                                       case "function":
+
+                                               this.table.options.columns = definitions.call(this.table, cols);
+
+                                               break;
+
+                                       case "object":
+
+                                               if (Array.isArray(definitions)) {
+
+                                                       cols.forEach(function (col) {
+
+                                                               var match = definitions.find(function (def) {
+
+                                                                       return def.field === col.field;
+                                                               });
+
+                                                               if (match) {
+
+                                                                       Object.assign(col, match);
+                                                               }
+                                                       });
+                                               } else {
+
+                                                       cols.forEach(function (col) {
+
+                                                               if (definitions[col.field]) {
+
+                                                                       Object.assign(col, definitions[col.field]);
+                                                               }
+                                                       });
+                                               }
+
+                                               this.table.options.columns = cols;
+
+                                               break;
+
+                               }
+                       } else {
+
+                               this.table.options.columns = cols;
+                       }
+
+                       this.setColumns(this.table.options.columns);
+               }
+       };
+
+       ColumnManager.prototype.setColumns = function (cols, row) {
+
+               var self = this;
+
+               while (self.headersElement.firstChild) {
+                       self.headersElement.removeChild(self.headersElement.firstChild);
+               }self.columns = [];
+
+               self.columnsByIndex = [];
+
+               self.columnsByField = {};
+
+               //reset frozen columns
+
+
+               if (self.table.modExists("frozenColumns")) {
+
+                       self.table.modules.frozenColumns.reset();
+               }
+
+               cols.forEach(function (def, i) {
+
+                       self._addColumn(def);
+               });
+
+               self._reIndexColumns();
+
+               if (self.table.options.responsiveLayout && self.table.modExists("responsiveLayout", true)) {
+
+                       self.table.modules.responsiveLayout.initialize();
+               }
+
+               if (this.table.options.virtualDomHoz) {
+
+                       this.table.vdomHoz.reinitialize(false, true);
+               }
+
+               self.redraw(true);
+       };
+
+       ColumnManager.prototype._addColumn = function (definition, before, nextToColumn) {
+
+               var column = new Column(definition, this),
+                   colEl = column.getElement(),
+                   index = nextToColumn ? this.findColumnIndex(nextToColumn) : nextToColumn;
+
+               if (nextToColumn && index > -1) {
+
+                       var parentIndex = this.columns.indexOf(nextToColumn.getTopColumn());
+
+                       var nextEl = nextToColumn.getElement();
+
+                       if (before) {
+
+                               this.columns.splice(parentIndex, 0, column);
+
+                               nextEl.parentNode.insertBefore(colEl, nextEl);
+                       } else {
+
+                               this.columns.splice(parentIndex + 1, 0, column);
+
+                               nextEl.parentNode.insertBefore(colEl, nextEl.nextSibling);
+                       }
+               } else {
+
+                       if (before) {
+
+                               this.columns.unshift(column);
+
+                               this.headersElement.insertBefore(column.getElement(), this.headersElement.firstChild);
+                       } else {
+
+                               this.columns.push(column);
+
+                               this.headersElement.appendChild(column.getElement());
+                       }
+
+                       column.columnRendered();
+               }
+
+               return column;
+       };
+
+       ColumnManager.prototype.registerColumnField = function (col) {
+
+               if (col.definition.field) {
+
+                       this.columnsByField[col.definition.field] = col;
+               }
+       };
+
+       ColumnManager.prototype.registerColumnPosition = function (col) {
+
+               this.columnsByIndex.push(col);
+       };
+
+       ColumnManager.prototype._reIndexColumns = function () {
+
+               this.columnsByIndex = [];
+
+               this.columns.forEach(function (column) {
+
+                       column.reRegisterPosition();
+               });
+       };
+
+       //ensure column headers take up the correct amount of space in column groups
+
+
+       ColumnManager.prototype._verticalAlignHeaders = function () {
+
+               var self = this,
+                   minHeight = 0;
+
+               self.columns.forEach(function (column) {
+
+                       var height;
+
+                       column.clearVerticalAlign();
+
+                       height = column.getHeight();
+
+                       if (height > minHeight) {
+
+                               minHeight = height;
+                       }
+               });
+
+               self.columns.forEach(function (column) {
+
+                       column.verticalAlign(self.table.options.columnHeaderVertAlign, minHeight);
+               });
+
+               self.rowManager.adjustTableSize();
+       };
+
+       //////////////// Column Details /////////////////
+
+
+       ColumnManager.prototype.findColumn = function (subject) {
+
+               var self = this;
+
+               if ((typeof subject === 'undefined' ? 'undefined' : _typeof(subject)) == "object") {
+
+                       if (subject instanceof Column) {
+
+                               //subject is column element
+
+
+                               return subject;
+                       } else if (subject instanceof ColumnComponent) {
+
+                               //subject is public column component
+
+
+                               return subject._getSelf() || false;
+                       } else if (typeof HTMLElement !== "undefined" && subject instanceof HTMLElement) {
+
+                               //subject is a HTML element of the column header
+
+
+                               var match = self.columns.find(function (column) {
+
+                                       return column.element === subject;
+                               });
+
+                               return match || false;
+                       }
+               } else {
+
+                       //subject should be treated as the field name of the column
+
+
+                       return this.columnsByField[subject] || false;
+               }
+
+               //catch all for any other type of input
+
+
+               return false;
+       };
+
+       ColumnManager.prototype.getColumnByField = function (field) {
+
+               return this.columnsByField[field];
+       };
+
+       ColumnManager.prototype.getColumnsByFieldRoot = function (root) {
+               var _this = this;
+
+               var matches = [];
+
+               Object.keys(this.columnsByField).forEach(function (field) {
+
+                       var fieldRoot = field.split(".")[0];
+
+                       if (fieldRoot === root) {
+
+                               matches.push(_this.columnsByField[field]);
+                       }
+               });
+
+               return matches;
+       };
+
+       ColumnManager.prototype.getColumnByIndex = function (index) {
+
+               return this.columnsByIndex[index];
+       };
+
+       ColumnManager.prototype.getFirstVisibileColumn = function (index) {
+
+               var index = this.columnsByIndex.findIndex(function (col) {
+
+                       return col.visible;
+               });
+
+               return index > -1 ? this.columnsByIndex[index] : false;
+       };
+
+       ColumnManager.prototype.getColumns = function () {
+
+               return this.columns;
+       };
+
+       ColumnManager.prototype.findColumnIndex = function (column) {
+
+               return this.columnsByIndex.findIndex(function (col) {
+
+                       return column === col;
+               });
+       };
+
+       //return all columns that are not groups
+
+
+       ColumnManager.prototype.getRealColumns = function () {
+
+               return this.columnsByIndex;
+       };
+
+       //travers across columns and call action
+
+
+       ColumnManager.prototype.traverse = function (callback) {
+
+               var self = this;
+
+               self.columnsByIndex.forEach(function (column, i) {
+
+                       callback(column, i);
+               });
+       };
+
+       //get defintions of actual columns
+
+
+       ColumnManager.prototype.getDefinitions = function (active) {
+
+               var self = this,
+                   output = [];
+
+               self.columnsByIndex.forEach(function (column) {
+
+                       if (!active || active && column.visible) {
+
+                               output.push(column.getDefinition());
+                       }
+               });
+
+               return output;
+       };
+
+       //get full nested definition tree
+
+
+       ColumnManager.prototype.getDefinitionTree = function () {
+
+               var self = this,
+                   output = [];
+
+               self.columns.forEach(function (column) {
+
+                       output.push(column.getDefinition(true));
+               });
+
+               return output;
+       };
+
+       ColumnManager.prototype.getComponents = function (structured) {
+
+               var self = this,
+                   output = [],
+                   columns = structured ? self.columns : self.columnsByIndex;
+
+               columns.forEach(function (column) {
+
+                       output.push(column.getComponent());
+               });
+
+               return output;
+       };
+
+       ColumnManager.prototype.getWidth = function () {
+
+               var width = 0;
+
+               this.columnsByIndex.forEach(function (column) {
+
+                       if (column.visible) {
+
+                               width += column.getWidth();
+                       }
+               });
+
+               return width;
+       };
+
+       ColumnManager.prototype.moveColumn = function (from, to, after) {
+
+               this.moveColumnActual(from, to, after);
+
+               if (this.table.options.responsiveLayout && this.table.modExists("responsiveLayout", true)) {
+
+                       this.table.modules.responsiveLayout.initialize();
+               }
+
+               if (this.table.modExists("columnCalcs")) {
+
+                       this.table.modules.columnCalcs.recalc(this.table.rowManager.activeRows);
+               }
+
+               to.element.parentNode.insertBefore(from.element, to.element);
+
+               if (after) {
+
+                       to.element.parentNode.insertBefore(to.element, from.element);
+               }
+
+               this._verticalAlignHeaders();
+
+               this.table.rowManager.reinitialize();
+       };
+
+       ColumnManager.prototype.moveColumnActual = function (from, to, after) {
+
+               if (from.parent.isGroup) {
+
+                       this._moveColumnInArray(from.parent.columns, from, to, after);
+               } else {
+
+                       this._moveColumnInArray(this.columns, from, to, after);
+               }
+
+               this._moveColumnInArray(this.columnsByIndex, from, to, after, true);
+
+               if (this.table.options.responsiveLayout && this.table.modExists("responsiveLayout", true)) {
+
+                       this.table.modules.responsiveLayout.initialize();
+               }
+
+               if (this.table.options.virtualDomHoz) {
+
+                       this.table.vdomHoz.reinitialize(true);
+               }
+
+               if (this.table.options.columnMoved) {
+
+                       this.table.options.columnMoved.call(this.table, from.getComponent(), this.table.columnManager.getComponents());
+               }
+
+               if (this.table.options.persistence && this.table.modExists("persistence", true) && this.table.modules.persistence.config.columns) {
+
+                       this.table.modules.persistence.save("columns");
+               }
+       };
+
+       ColumnManager.prototype._moveColumnInArray = function (columns, from, to, after, updateRows) {
+               var _this2 = this;
+
+               var fromIndex = columns.indexOf(from),
+                   toIndex,
+                   rows = [];
+
+               if (fromIndex > -1) {
+
+                       columns.splice(fromIndex, 1);
+
+                       toIndex = columns.indexOf(to);
+
+                       if (toIndex > -1) {
+
+                               if (after) {
+
+                                       toIndex = toIndex + 1;
+                               }
+                       } else {
+
+                               toIndex = fromIndex;
+                       }
+
+                       columns.splice(toIndex, 0, from);
+
+                       if (updateRows) {
+
+                               if (this.table.options.dataTree && this.table.modExists("dataTree", true)) {
+
+                                       this.table.rowManager.rows.forEach(function (row) {
+
+                                               rows = rows.concat(_this2.table.modules.dataTree.getTreeChildren(row, false, true));
+                                       });
+                               }
+
+                               rows = rows.concat(this.table.rowManager.rows);
+
+                               rows.forEach(function (row) {
+
+                                       if (row.cells.length) {
+
+                                               var cell = row.cells.splice(fromIndex, 1)[0];
+
+                                               row.cells.splice(toIndex, 0, cell);
+                                       }
+                               });
+                       }
+               }
+       };
+
+       ColumnManager.prototype.scrollToColumn = function (column, position, ifVisible) {
+               var _this3 = this;
+
+               var left = 0,
+                   offset = 0,
+                   adjust = 0,
+                   colEl = column.getElement();
+
+               return new Promise(function (resolve, reject) {
+
+                       if (typeof position === "undefined") {
+
+                               position = _this3.table.options.scrollToColumnPosition;
+                       }
+
+                       if (typeof ifVisible === "undefined") {
+
+                               ifVisible = _this3.table.options.scrollToColumnIfVisible;
+                       }
+
+                       if (column.visible) {
+
+                               //align to correct position
+
+
+                               switch (position) {
+
+                                       case "middle":
+
+                                       case "center":
+
+                                               adjust = -_this3.element.clientWidth / 2;
+
+                                               break;
+
+                                       case "right":
+
+                                               adjust = colEl.clientWidth - _this3.headersElement.clientWidth;
+
+                                               break;
+
+                               }
+
+                               //check column visibility
+
+
+                               if (!ifVisible) {
+
+                                       offset = colEl.offsetLeft;
+
+                                       if (offset > 0 && offset + colEl.offsetWidth < _this3.element.clientWidth) {
+
+                                               return false;
+                                       }
+                               }
+
+                               //calculate scroll position
+
+
+                               left = colEl.offsetLeft + adjust;
+
+                               left = Math.max(Math.min(left, _this3.table.rowManager.element.scrollWidth - _this3.table.rowManager.element.clientWidth), 0);
+
+                               _this3.table.rowManager.scrollHorizontal(left);
+
+                               _this3.scrollHorizontal(left);
+
+                               resolve();
+                       } else {
+
+                               console.warn("Scroll Error - Column not visible");
+
+                               reject("Scroll Error - Column not visible");
+                       }
+               });
+       };
+
+       //////////////// Cell Management /////////////////
+
+
+       ColumnManager.prototype.generateCells = function (row) {
+
+               var self = this;
+
+               var cells = [];
+
+               self.columnsByIndex.forEach(function (column) {
+
+                       cells.push(column.generateCell(row));
+               });
+
+               return cells;
+       };
+
+       //////////////// Column Management /////////////////
+
+
+       ColumnManager.prototype.getFlexBaseWidth = function () {
+
+               var self = this,
+                   totalWidth = self.table.element.clientWidth,
+                   //table element width
+
+
+               fixedWidth = 0;
+
+               //adjust for vertical scrollbar if present
+
+
+               if (self.rowManager.element.scrollHeight > self.rowManager.element.clientHeight) {
+
+                       totalWidth -= self.rowManager.element.offsetWidth - self.rowManager.element.clientWidth;
+               }
+
+               this.columnsByIndex.forEach(function (column) {
+
+                       var width, minWidth, colWidth;
+
+                       if (column.visible) {
+
+                               width = column.definition.width || 0;
+
+                               minWidth = typeof column.minWidth == "undefined" ? self.table.options.columnMinWidth : parseInt(column.minWidth);
+
+                               if (typeof width == "string") {
+
+                                       if (width.indexOf("%") > -1) {
+
+                                               colWidth = totalWidth / 100 * parseInt(width);
+                                       } else {
+
+                                               colWidth = parseInt(width);
+                                       }
+                               } else {
+
+                                       colWidth = width;
+                               }
+
+                               fixedWidth += colWidth > minWidth ? colWidth : minWidth;
+                       }
+               });
+
+               return fixedWidth;
+       };
+
+       ColumnManager.prototype.addColumn = function (definition, before, nextToColumn) {
+               var _this4 = this;
+
+               return new Promise(function (resolve, reject) {
+
+                       var column = _this4._addColumn(definition, before, nextToColumn);
+
+                       _this4._reIndexColumns();
+
+                       if (_this4.table.options.responsiveLayout && _this4.table.modExists("responsiveLayout", true)) {
+
+                               _this4.table.modules.responsiveLayout.initialize();
+                       }
+
+                       if (_this4.table.modExists("columnCalcs")) {
+
+                               _this4.table.modules.columnCalcs.recalc(_this4.table.rowManager.activeRows);
+                       }
+
+                       _this4.redraw();
+
+                       if (_this4.table.modules.layout.getMode() != "fitColumns") {
+
+                               column.reinitializeWidth();
+                       }
+
+                       _this4._verticalAlignHeaders();
+
+                       _this4.table.rowManager.reinitialize();
+
+                       if (_this4.table.options.virtualDomHoz) {
+
+                               _this4.table.vdomHoz.reinitialize();
+                       }
+
+                       resolve(column);
+               });
+       };
+
+       //remove column from system
+
+
+       ColumnManager.prototype.deregisterColumn = function (column) {
+
+               var field = column.getField(),
+                   index;
+
+               //remove from field list
+
+
+               if (field) {
+
+                       delete this.columnsByField[field];
+               }
+
+               //remove from index list
+
+
+               index = this.columnsByIndex.indexOf(column);
+
+               if (index > -1) {
+
+                       this.columnsByIndex.splice(index, 1);
+               }
+
+               //remove from column list
+
+
+               index = this.columns.indexOf(column);
+
+               if (index > -1) {
+
+                       this.columns.splice(index, 1);
+               }
+
+               if (this.table.options.responsiveLayout && this.table.modExists("responsiveLayout", true)) {
+
+                       this.table.modules.responsiveLayout.initialize();
+               }
+
+               this._verticalAlignHeaders();
+
+               this.redraw();
+       };
+
+       //redraw columns
+
+
+       ColumnManager.prototype.redraw = function (force) {
+
+               if (force) {
+
+                       if (Tabulator.prototype.helpers.elVisible(this.element)) {
+
+                               this._verticalAlignHeaders();
+                       }
+
+                       this.table.rowManager.resetScroll();
+
+                       this.table.rowManager.reinitialize();
+               }
+
+               if (["fitColumns", "fitDataStretch"].indexOf(this.table.modules.layout.getMode()) > -1) {
+
+                       this.table.modules.layout.layout();
+               } else {
+
+                       if (force) {
+
+                               this.table.modules.layout.layout();
+                       } else {
+
+                               if (this.table.options.responsiveLayout && this.table.modExists("responsiveLayout", true)) {
+
+                                       this.table.modules.responsiveLayout.update();
+                               }
+                       }
+               }
+
+               if (this.table.modExists("frozenColumns")) {
+
+                       this.table.modules.frozenColumns.layout();
+               }
+
+               if (this.table.modExists("columnCalcs")) {
+
+                       this.table.modules.columnCalcs.recalc(this.table.rowManager.activeRows);
+               }
+
+               if (force) {
+
+                       if (this.table.options.persistence && this.table.modExists("persistence", true) && this.table.modules.persistence.config.columns) {
+
+                               this.table.modules.persistence.save("columns");
+                       }
+
+                       if (this.table.modExists("columnCalcs")) {
+
+                               this.table.modules.columnCalcs.redraw();
+                       }
+               }
+
+               this.table.footerManager.redraw();
+       };
+
+       //public column object
+
+       var ColumnComponent = function ColumnComponent(column) {
+
+               this._column = column;
+
+               this.type = "ColumnComponent";
+       };
+
+       ColumnComponent.prototype.getElement = function () {
+
+               return this._column.getElement();
+       };
+
+       ColumnComponent.prototype.getDefinition = function () {
+
+               return this._column.getDefinition();
+       };
+
+       ColumnComponent.prototype.getField = function () {
+
+               return this._column.getField();
+       };
+
+       ColumnComponent.prototype.getCells = function () {
+
+               var cells = [];
+
+               this._column.cells.forEach(function (cell) {
+
+                       cells.push(cell.getComponent());
+               });
+
+               return cells;
+       };
+
+       ColumnComponent.prototype.getVisibility = function () {
+
+               console.warn("getVisibility function is deprecated, you should now use the isVisible function");
+
+               return this._column.visible;
+       };
+
+       ColumnComponent.prototype.isVisible = function () {
+
+               return this._column.visible;
+       };
+
+       ColumnComponent.prototype.show = function () {
+
+               if (this._column.isGroup) {
+
+                       this._column.columns.forEach(function (column) {
+
+                               column.show();
+                       });
+               } else {
+
+                       this._column.show();
+               }
+       };
+
+       ColumnComponent.prototype.hide = function () {
+
+               if (this._column.isGroup) {
+
+                       this._column.columns.forEach(function (column) {
+
+                               column.hide();
+                       });
+               } else {
+
+                       this._column.hide();
+               }
+       };
+
+       ColumnComponent.prototype.toggle = function () {
+
+               if (this._column.visible) {
+
+                       this.hide();
+               } else {
+
+                       this.show();
+               }
+       };
+
+       ColumnComponent.prototype.delete = function () {
+
+               return this._column.delete();
+       };
+
+       ColumnComponent.prototype.getSubColumns = function () {
+
+               var output = [];
+
+               if (this._column.columns.length) {
+
+                       this._column.columns.forEach(function (column) {
+
+                               output.push(column.getComponent());
+                       });
+               }
+
+               return output;
+       };
+
+       ColumnComponent.prototype.getParentColumn = function () {
+
+               return this._column.parent instanceof Column ? this._column.parent.getComponent() : false;
+       };
+
+       ColumnComponent.prototype._getSelf = function () {
+
+               return this._column;
+       };
+
+       ColumnComponent.prototype.scrollTo = function () {
+
+               return this._column.table.columnManager.scrollToColumn(this._column);
+       };
+
+       ColumnComponent.prototype.getTable = function () {
+
+               return this._column.table;
+       };
+
+       ColumnComponent.prototype.headerFilterFocus = function () {
+
+               if (this._column.table.modExists("filter", true)) {
+
+                       this._column.table.modules.filter.setHeaderFilterFocus(this._column);
+               }
+       };
+
+       ColumnComponent.prototype.reloadHeaderFilter = function () {
+
+               if (this._column.table.modExists("filter", true)) {
+
+                       this._column.table.modules.filter.reloadHeaderFilter(this._column);
+               }
+       };
+
+       ColumnComponent.prototype.getHeaderFilterValue = function () {
+
+               if (this._column.table.modExists("filter", true)) {
+
+                       return this._column.table.modules.filter.getHeaderFilterValue(this._column);
+               }
+       };
+
+       ColumnComponent.prototype.setHeaderFilterValue = function (value) {
+
+               if (this._column.table.modExists("filter", true)) {
+
+                       this._column.table.modules.filter.setHeaderFilterValue(this._column, value);
+               }
+       };
+
+       ColumnComponent.prototype.move = function (to, after) {
+
+               var toColumn = this._column.table.columnManager.findColumn(to);
+
+               if (toColumn) {
+
+                       this._column.table.columnManager.moveColumn(this._column, toColumn, after);
+               } else {
+
+                       console.warn("Move Error - No matching column found:", toColumn);
+               }
+       };
+
+       ColumnComponent.prototype.getNextColumn = function () {
+
+               var nextCol = this._column.nextColumn();
+
+               return nextCol ? nextCol.getComponent() : false;
+       };
+
+       ColumnComponent.prototype.getPrevColumn = function () {
+
+               var prevCol = this._column.prevColumn();
+
+               return prevCol ? prevCol.getComponent() : false;
+       };
+
+       ColumnComponent.prototype.updateDefinition = function (updates) {
+
+               return this._column.updateDefinition(updates);
+       };
+
+       ColumnComponent.prototype.getWidth = function () {
+
+               return this._column.getWidth();
+       };
+
+       ColumnComponent.prototype.setWidth = function (width) {
+
+               var result;
+
+               if (width === true) {
+
+                       result = this._column.reinitializeWidth(true);
+               } else {
+
+                       result = this._column.setWidth(width);
+               }
+
+               if (this._column.table.options.virtualDomHoz) {
+
+                       this._column.table.vdomHoz.reinitialize(true);
+               }
+
+               return result;
+       };
+
+       ColumnComponent.prototype.validate = function () {
+
+               return this._column.validate();
+       };
+
+       var Column = function Column(def, parent) {
+
+               var self = this;
+
+               this.table = parent.table;
+
+               this.definition = def; //column definition
+
+               this.parent = parent; //hold parent object
+
+               this.type = "column"; //type of element
+
+               this.columns = []; //child columns
+
+               this.cells = []; //cells bound to this column
+
+               this.element = this.createElement(); //column header element
+
+               this.contentElement = false;
+
+               this.titleHolderElement = false;
+
+               this.titleElement = false;
+
+               this.groupElement = this.createGroupElement(); //column group holder element
+
+               this.isGroup = false;
+
+               this.tooltip = false; //hold column tooltip
+
+               this.hozAlign = ""; //horizontal text alignment
+
+               this.vertAlign = ""; //vert text alignment
+
+
+               //multi dimensional filed handling
+
+               this.field = "";
+
+               this.fieldStructure = "";
+
+               this.getFieldValue = "";
+
+               this.setFieldValue = "";
+
+               this.titleFormatterRendered = false;
+
+               this.setField(this.definition.field);
+
+               if (this.table.options.invalidOptionWarnings) {
+
+                       this.checkDefinition();
+               }
+
+               this.modules = {}; //hold module variables;
+
+
+               this.cellEvents = {
+
+                       cellClick: false,
+
+                       cellDblClick: false,
+
+                       cellContext: false,
+
+                       cellTap: false,
+
+                       cellDblTap: false,
+
+                       cellTapHold: false,
+
+                       cellMouseEnter: false,
+
+                       cellMouseLeave: false,
+
+                       cellMouseOver: false,
+
+                       cellMouseOut: false,
+
+                       cellMouseMove: false
+
+               };
+
+               this.width = null; //column width
+
+               this.widthStyled = ""; //column width prestyled to improve render efficiency
+
+               this.minWidth = null; //column minimum width
+
+               this.minWidthStyled = ""; //column minimum prestyled to improve render efficiency
+
+               this.widthFixed = false; //user has specified a width for this column
+
+
+               this.visible = true; //default visible state
+
+
+               this.component = null;
+
+               this._mapDepricatedFunctionality();
+
+               //initialize column
+
+               if (def.columns) {
+
+                       this.isGroup = true;
+
+                       def.columns.forEach(function (def, i) {
+
+                               var newCol = new Column(def, self);
+
+                               self.attachColumn(newCol);
+                       });
+
+                       self.checkColumnVisibility();
+               } else {
+
+                       parent.registerColumnField(this);
+               }
+
+               if (def.rowHandle && this.table.options.movableRows !== false && this.table.modExists("moveRow")) {
+
+                       this.table.modules.moveRow.setHandle(true);
+               }
+
+               this._buildHeader();
+
+               this.bindModuleColumns();
+       };
+
+       Column.prototype.createElement = function () {
+
+               var el = document.createElement("div");
+
+               el.classList.add("tabulator-col");
+
+               el.setAttribute("role", "columnheader");
+
+               el.setAttribute("aria-sort", "none");
+
+               return el;
+       };
+
+       Column.prototype.createGroupElement = function () {
+
+               var el = document.createElement("div");
+
+               el.classList.add("tabulator-col-group-cols");
+
+               return el;
+       };
+
+       Column.prototype.checkDefinition = function () {
+               var _this5 = this;
+
+               Object.keys(this.definition).forEach(function (key) {
+
+                       if (_this5.defaultOptionList.indexOf(key) === -1) {
+
+                               console.warn("Invalid column definition option in '" + (_this5.field || _this5.definition.title) + "' column:", key);
+                       }
+               });
+       };
+
+       Column.prototype.setField = function (field) {
+
+               this.field = field;
+
+               this.fieldStructure = field ? this.table.options.nestedFieldSeparator ? field.split(this.table.options.nestedFieldSeparator) : [field] : [];
+
+               this.getFieldValue = this.fieldStructure.length > 1 ? this._getNestedData : this._getFlatData;
+
+               this.setFieldValue = this.fieldStructure.length > 1 ? this._setNestedData : this._setFlatData;
+       };
+
+       //register column position with column manager
+
+       Column.prototype.registerColumnPosition = function (column) {
+
+               this.parent.registerColumnPosition(column);
+       };
+
+       //register column position with column manager
+
+       Column.prototype.registerColumnField = function (column) {
+
+               this.parent.registerColumnField(column);
+       };
+
+       //trigger position registration
+
+       Column.prototype.reRegisterPosition = function () {
+
+               if (this.isGroup) {
+
+                       this.columns.forEach(function (column) {
+
+                               column.reRegisterPosition();
+                       });
+               } else {
+
+                       this.registerColumnPosition(this);
+               }
+       };
+
+       Column.prototype._mapDepricatedFunctionality = function () {
+
+               if (typeof this.definition.hideInHtml !== "undefined") {
+
+                       this.definition.htmlOutput = !this.definition.hideInHtml;
+
+                       console.warn("hideInHtml column definition property is deprecated, you should now use htmlOutput");
+               }
+
+               if (typeof this.definition.align !== "undefined") {
+
+                       this.definition.hozAlign = this.definition.align;
+
+                       console.warn("align column definition property is deprecated, you should now use hozAlign");
+               }
+
+               if (typeof this.definition.downloadTitle !== "undefined") {
+
+                       this.definition.titleDownload = this.definition.downloadTitle;
+
+                       console.warn("downloadTitle definition property is deprecated, you should now use titleDownload");
+               }
+       };
+
+       Column.prototype.setTooltip = function () {
+
+               var self = this,
+                   def = self.definition;
+
+               //set header tooltips
+
+               var tooltip = def.headerTooltip || def.tooltip === false ? def.headerTooltip : self.table.options.tooltipsHeader;
+
+               if (tooltip) {
+
+                       if (tooltip === true) {
+
+                               if (def.field) {
+
+                                       self.table.modules.localize.bind("columns|" + def.field, function (value) {
+
+                                               self.element.setAttribute("title", value || def.title);
+                                       });
+                               } else {
+
+                                       self.element.setAttribute("title", def.title);
+                               }
+                       } else {
+
+                               if (typeof tooltip == "function") {
+
+                                       tooltip = tooltip(self.getComponent());
+
+                                       if (tooltip === false) {
+
+                                               tooltip = "";
+                                       }
+                               }
+
+                               self.element.setAttribute("title", tooltip);
+                       }
+               } else {
+
+                       self.element.setAttribute("title", "");
+               }
+       };
+
+       //build header element
+
+       Column.prototype._buildHeader = function () {
+
+               var self = this,
+                   def = self.definition;
+
+               while (self.element.firstChild) {
+                       self.element.removeChild(self.element.firstChild);
+               }if (def.headerVertical) {
+
+                       self.element.classList.add("tabulator-col-vertical");
+
+                       if (def.headerVertical === "flip") {
+
+                               self.element.classList.add("tabulator-col-vertical-flip");
+                       }
+               }
+
+               self.contentElement = self._bindEvents();
+
+               self.contentElement = self._buildColumnHeaderContent();
+
+               self.element.appendChild(self.contentElement);
+
+               if (self.isGroup) {
+
+                       self._buildGroupHeader();
+               } else {
+
+                       self._buildColumnHeader();
+               }
+
+               self.setTooltip();
+
+               //set resizable handles
+
+               if (self.table.options.resizableColumns && self.table.modExists("resizeColumns")) {
+
+                       self.table.modules.resizeColumns.initializeColumn("header", self, self.element);
+               }
+
+               //set resizable handles
+
+               if (def.headerFilter && self.table.modExists("filter") && self.table.modExists("edit")) {
+
+                       if (typeof def.headerFilterPlaceholder !== "undefined" && def.field) {
+
+                               self.table.modules.localize.setHeaderFilterColumnPlaceholder(def.field, def.headerFilterPlaceholder);
+                       }
+
+                       self.table.modules.filter.initializeColumn(self);
+               }
+
+               //set resizable handles
+
+               if (self.table.modExists("frozenColumns")) {
+
+                       self.table.modules.frozenColumns.initializeColumn(self);
+               }
+
+               //set movable column
+
+               if (self.table.options.movableColumns && !self.isGroup && self.table.modExists("moveColumn")) {
+
+                       self.table.modules.moveColumn.initializeColumn(self);
+               }
+
+               //set calcs column
+
+               if ((def.topCalc || def.bottomCalc) && self.table.modExists("columnCalcs")) {
+
+                       self.table.modules.columnCalcs.initializeColumn(self);
+               }
+
+               //handle persistence
+
+               if (self.table.modExists("persistence") && self.table.modules.persistence.config.columns) {
+
+                       self.table.modules.persistence.initializeColumn(self);
+               }
+
+               //update header tooltip on mouse enter
+
+               self.element.addEventListener("mouseenter", function (e) {
+
+                       self.setTooltip();
+               });
+       };
+
+       Column.prototype._bindEvents = function () {
+
+               var self = this,
+                   def = self.definition,
+                   dblTap,
+                   tapHold,
+                   tap;
+
+               //setup header click event bindings
+
+               if (typeof def.headerClick == "function") {
+
+                       self.element.addEventListener("click", function (e) {
+                               def.headerClick(e, self.getComponent());
+                       });
+               }
+
+               if (typeof def.headerDblClick == "function") {
+
+                       self.element.addEventListener("dblclick", function (e) {
+                               def.headerDblClick(e, self.getComponent());
+                       });
+               }
+
+               if (typeof def.headerContext == "function") {
+
+                       self.element.addEventListener("contextmenu", function (e) {
+                               def.headerContext(e, self.getComponent());
+                       });
+               }
+
+               //setup header tap event bindings
+
+               if (typeof def.headerTap == "function") {
+
+                       tap = false;
+
+                       self.element.addEventListener("touchstart", function (e) {
+
+                               tap = true;
+                       }, { passive: true });
+
+                       self.element.addEventListener("touchend", function (e) {
+
+                               if (tap) {
+
+                                       def.headerTap(e, self.getComponent());
+                               }
+
+                               tap = false;
+                       });
+               }
+
+               if (typeof def.headerDblTap == "function") {
+
+                       dblTap = null;
+
+                       self.element.addEventListener("touchend", function (e) {
+
+                               if (dblTap) {
+
+                                       clearTimeout(dblTap);
+
+                                       dblTap = null;
+
+                                       def.headerDblTap(e, self.getComponent());
+                               } else {
+
+                                       dblTap = setTimeout(function () {
+
+                                               clearTimeout(dblTap);
+
+                                               dblTap = null;
+                                       }, 300);
+                               }
+                       });
+               }
+
+               if (typeof def.headerTapHold == "function") {
+
+                       tapHold = null;
+
+                       self.element.addEventListener("touchstart", function (e) {
+
+                               clearTimeout(tapHold);
+
+                               tapHold = setTimeout(function () {
+
+                                       clearTimeout(tapHold);
+
+                                       tapHold = null;
+
+                                       tap = false;
+
+                                       def.headerTapHold(e, self.getComponent());
+                               }, 1000);
+                       }, { passive: true });
+
+                       self.element.addEventListener("touchend", function (e) {
+
+                               clearTimeout(tapHold);
+
+                               tapHold = null;
+                       });
+               }
+
+               //store column cell click event bindings
+
+               if (typeof def.cellClick == "function") {
+
+                       self.cellEvents.cellClick = def.cellClick;
+               }
+
+               if (typeof def.cellDblClick == "function") {
+
+                       self.cellEvents.cellDblClick = def.cellDblClick;
+               }
+
+               if (typeof def.cellContext == "function") {
+
+                       self.cellEvents.cellContext = def.cellContext;
+               }
+
+               //store column mouse event bindings
+
+               if (typeof def.cellMouseEnter == "function") {
+
+                       self.cellEvents.cellMouseEnter = def.cellMouseEnter;
+               }
+
+               if (typeof def.cellMouseLeave == "function") {
+
+                       self.cellEvents.cellMouseLeave = def.cellMouseLeave;
+               }
+
+               if (typeof def.cellMouseOver == "function") {
+
+                       self.cellEvents.cellMouseOver = def.cellMouseOver;
+               }
+
+               if (typeof def.cellMouseOut == "function") {
+
+                       self.cellEvents.cellMouseOut = def.cellMouseOut;
+               }
+
+               if (typeof def.cellMouseMove == "function") {
+
+                       self.cellEvents.cellMouseMove = def.cellMouseMove;
+               }
+
+               //setup column cell tap event bindings
+
+               if (typeof def.cellTap == "function") {
+
+                       self.cellEvents.cellTap = def.cellTap;
+               }
+
+               if (typeof def.cellDblTap == "function") {
+
+                       self.cellEvents.cellDblTap = def.cellDblTap;
+               }
+
+               if (typeof def.cellTapHold == "function") {
+
+                       self.cellEvents.cellTapHold = def.cellTapHold;
+               }
+
+               //setup column cell edit callbacks
+
+               if (typeof def.cellEdited == "function") {
+
+                       self.cellEvents.cellEdited = def.cellEdited;
+               }
+
+               if (typeof def.cellEditing == "function") {
+
+                       self.cellEvents.cellEditing = def.cellEditing;
+               }
+
+               if (typeof def.cellEditCancelled == "function") {
+
+                       self.cellEvents.cellEditCancelled = def.cellEditCancelled;
+               }
+       };
+
+       //build header element for header
+
+       Column.prototype._buildColumnHeader = function () {
+               var _this6 = this;
+
+               var def = this.definition,
+                   table = this.table,
+                   sortable;
+
+               //set column sorter
+
+               if (table.modExists("sort")) {
+
+                       table.modules.sort.initializeColumn(this, this.titleHolderElement);
+               }
+
+               //set column header context menu
+
+               if ((def.headerContextMenu || def.headerClickMenu || def.headerMenu) && table.modExists("menu")) {
+
+                       table.modules.menu.initializeColumnHeader(this);
+               }
+
+               //set column formatter
+
+               if (table.modExists("format")) {
+
+                       table.modules.format.initializeColumn(this);
+               }
+
+               //set column editor
+
+               if (typeof def.editor != "undefined" && table.modExists("edit")) {
+
+                       table.modules.edit.initializeColumn(this);
+               }
+
+               //set colum validator
+
+               if (typeof def.validator != "undefined" && table.modExists("validate")) {
+
+                       table.modules.validate.initializeColumn(this);
+               }
+
+               //set column mutator
+
+               if (table.modExists("mutator")) {
+
+                       table.modules.mutator.initializeColumn(this);
+               }
+
+               //set column accessor
+
+               if (table.modExists("accessor")) {
+
+                       table.modules.accessor.initializeColumn(this);
+               }
+
+               //set respoviveLayout
+
+               if (_typeof(table.options.responsiveLayout) && table.modExists("responsiveLayout")) {
+
+                       table.modules.responsiveLayout.initializeColumn(this);
+               }
+
+               //set column visibility
+
+               if (typeof def.visible != "undefined") {
+
+                       if (def.visible) {
+
+                               this.show(true);
+                       } else {
+
+                               this.hide(true);
+                       }
+               }
+
+               //asign additional css classes to column header
+
+               if (def.cssClass) {
+
+                       var classeNames = def.cssClass.split(" ");
+
+                       classeNames.forEach(function (className) {
+
+                               _this6.element.classList.add(className);
+                       });
+               }
+
+               if (def.field) {
+
+                       this.element.setAttribute("tabulator-field", def.field);
+               }
+
+               //set min width if present
+
+               this.setMinWidth(typeof def.minWidth == "undefined" ? this.table.options.columnMinWidth : parseInt(def.minWidth));
+
+               this.reinitializeWidth();
+
+               //set tooltip if present
+
+               this.tooltip = this.definition.tooltip || this.definition.tooltip === false ? this.definition.tooltip : this.table.options.tooltips;
+
+               //set orizontal text alignment
+
+               this.hozAlign = typeof this.definition.hozAlign == "undefined" ? this.table.options.cellHozAlign : this.definition.hozAlign;
+
+               this.vertAlign = typeof this.definition.vertAlign == "undefined" ? this.table.options.cellVertAlign : this.definition.vertAlign;
+
+               this.titleElement.style.textAlign = this.definition.headerHozAlign || this.table.options.headerHozAlign;
+       };
+
+       Column.prototype._buildColumnHeaderContent = function () {
+
+               var def = this.definition,
+                   table = this.table;
+
+               var contentElement = document.createElement("div");
+
+               contentElement.classList.add("tabulator-col-content");
+
+               this.titleHolderElement = document.createElement("div");
+
+               this.titleHolderElement.classList.add("tabulator-col-title-holder");
+
+               contentElement.appendChild(this.titleHolderElement);
+
+               this.titleElement = this._buildColumnHeaderTitle();
+
+               this.titleHolderElement.appendChild(this.titleElement);
+
+               return contentElement;
+       };
+
+       //build title element of column
+
+       Column.prototype._buildColumnHeaderTitle = function () {
+
+               var self = this,
+                   def = self.definition,
+                   table = self.table,
+                   title;
+
+               var titleHolderElement = document.createElement("div");
+
+               titleHolderElement.classList.add("tabulator-col-title");
+
+               if (def.editableTitle) {
+
+                       var titleElement = document.createElement("input");
+
+                       titleElement.classList.add("tabulator-title-editor");
+
+                       titleElement.addEventListener("click", function (e) {
+
+                               e.stopPropagation();
+
+                               titleElement.focus();
+                       });
+
+                       titleElement.addEventListener("change", function () {
+
+                               def.title = titleElement.value;
+
+                               table.options.columnTitleChanged.call(self.table, self.getComponent());
+                       });
+
+                       titleHolderElement.appendChild(titleElement);
+
+                       if (def.field) {
+
+                               table.modules.localize.bind("columns|" + def.field, function (text) {
+
+                                       titleElement.value = text || def.title || "&nbsp;";
+                               });
+                       } else {
+
+                               titleElement.value = def.title || "&nbsp;";
+                       }
+               } else {
+
+                       if (def.field) {
+
+                               table.modules.localize.bind("columns|" + def.field, function (text) {
+
+                                       self._formatColumnHeaderTitle(titleHolderElement, text || def.title || "&nbsp;");
+                               });
+                       } else {
+
+                               self._formatColumnHeaderTitle(titleHolderElement, def.title || "&nbsp;");
+                       }
+               }
+
+               return titleHolderElement;
+       };
+
+       Column.prototype._formatColumnHeaderTitle = function (el, title) {
+               var _this7 = this;
+
+               var formatter, contents, params, mockCell, onRendered;
+
+               if (this.definition.titleFormatter && this.table.modExists("format")) {
+
+                       formatter = this.table.modules.format.getFormatter(this.definition.titleFormatter);
+
+                       onRendered = function onRendered(callback) {
+
+                               _this7.titleFormatterRendered = callback;
+                       };
+
+                       mockCell = {
+
+                               getValue: function getValue() {
+
+                                       return title;
+                               },
+
+                               getElement: function getElement() {
+
+                                       return el;
+                               }
+
+                       };
+
+                       params = this.definition.titleFormatterParams || {};
+
+                       params = typeof params === "function" ? params() : params;
+
+                       contents = formatter.call(this.table.modules.format, mockCell, params, onRendered);
+
+                       switch (typeof contents === 'undefined' ? 'undefined' : _typeof(contents)) {
+
+                               case "object":
+
+                                       if (contents instanceof Node) {
+
+                                               el.appendChild(contents);
+                                       } else {
+
+                                               el.innerHTML = "";
+
+                                               console.warn("Format Error - Title formatter has returned a type of object, the only valid formatter object return is an instance of Node, the formatter returned:", contents);
+                                       }
+
+                                       break;
+
+                               case "undefined":
+
+                               case "null":
+
+                                       el.innerHTML = "";
+
+                                       break;
+
+                               default:
+
+                                       el.innerHTML = contents;
+
+                       }
+               } else {
+
+                       el.innerHTML = title;
+               }
+       };
+
+       //build header element for column group
+
+       Column.prototype._buildGroupHeader = function () {
+               var _this8 = this;
+
+               this.element.classList.add("tabulator-col-group");
+
+               this.element.setAttribute("role", "columngroup");
+
+               this.element.setAttribute("aria-title", this.definition.title);
+
+               //asign additional css classes to column header
+
+               if (this.definition.cssClass) {
+
+                       var classeNames = this.definition.cssClass.split(" ");
+
+                       classeNames.forEach(function (className) {
+
+                               _this8.element.classList.add(className);
+                       });
+               }
+
+               //set column header context menu
+
+               if ((this.definition.headerContextMenu || this.definition.headerMenu) && this.table.modExists("menu")) {
+
+                       this.table.modules.menu.initializeColumnHeader(this);
+               }
+
+               this.element.appendChild(this.groupElement);
+       };
+
+       //flat field lookup
+
+       Column.prototype._getFlatData = function (data) {
+
+               return data[this.field];
+       };
+
+       //nested field lookup
+
+       Column.prototype._getNestedData = function (data) {
+
+               var dataObj = data,
+                   structure = this.fieldStructure,
+                   length = structure.length,
+                   output;
+
+               for (var _i = 0; _i < length; _i++) {
+
+                       dataObj = dataObj[structure[_i]];
+
+                       output = dataObj;
+
+                       if (!dataObj) {
+
+                               break;
+                       }
+               }
+
+               return output;
+       };
+
+       //flat field set
+
+       Column.prototype._setFlatData = function (data, value) {
+
+               if (this.field) {
+
+                       data[this.field] = value;
+               }
+       };
+
+       //nested field set
+
+       Column.prototype._setNestedData = function (data, value) {
+
+               var dataObj = data,
+                   structure = this.fieldStructure,
+                   length = structure.length;
+
+               for (var _i2 = 0; _i2 < length; _i2++) {
+
+                       if (_i2 == length - 1) {
+
+                               dataObj[structure[_i2]] = value;
+                       } else {
+
+                               if (!dataObj[structure[_i2]]) {
+
+                                       if (typeof value !== "undefined") {
+
+                                               dataObj[structure[_i2]] = {};
+                                       } else {
+
+                                               break;
+                                       }
+                               }
+
+                               dataObj = dataObj[structure[_i2]];
+                       }
+               }
+       };
+
+       //attach column to this group
+
+       Column.prototype.attachColumn = function (column) {
+
+               var self = this;
+
+               if (self.groupElement) {
+
+                       self.columns.push(column);
+
+                       self.groupElement.appendChild(column.getElement());
+               } else {
+
+                       console.warn("Column Warning - Column being attached to another column instead of column group");
+               }
+       };
+
+       //vertically align header in column
+
+       Column.prototype.verticalAlign = function (alignment, height) {
+
+               //calculate height of column header and group holder element
+
+               var parentHeight = this.parent.isGroup ? this.parent.getGroupElement().clientHeight : height || this.parent.getHeadersElement().clientHeight;
+
+               // var parentHeight = this.parent.isGroup ? this.parent.getGroupElement().clientHeight : this.parent.getHeadersElement().clientHeight;
+
+
+               this.element.style.height = parentHeight + "px";
+
+               if (this.isGroup) {
+
+                       this.groupElement.style.minHeight = parentHeight - this.contentElement.offsetHeight + "px";
+               }
+
+               //vertically align cell contents
+
+               if (!this.isGroup && alignment !== "top") {
+
+                       if (alignment === "bottom") {
+
+                               this.element.style.paddingTop = this.element.clientHeight - this.contentElement.offsetHeight + "px";
+                       } else {
+
+                               this.element.style.paddingTop = (this.element.clientHeight - this.contentElement.offsetHeight) / 2 + "px";
+                       }
+               }
+
+               this.columns.forEach(function (column) {
+
+                       column.verticalAlign(alignment);
+               });
+       };
+
+       //clear vertical alignmenet
+
+       Column.prototype.clearVerticalAlign = function () {
+
+               this.element.style.paddingTop = "";
+
+               this.element.style.height = "";
+
+               this.element.style.minHeight = "";
+
+               this.groupElement.style.minHeight = "";
+
+               this.columns.forEach(function (column) {
+
+                       column.clearVerticalAlign();
+               });
+       };
+
+       Column.prototype.bindModuleColumns = function () {
+
+               //check if rownum formatter is being used on a column
+
+               if (this.definition.formatter == "rownum") {
+
+                       this.table.rowManager.rowNumColumn = this;
+               }
+       };
+
+       //// Retreive Column Information ////
+
+
+       //return column header element
+
+       Column.prototype.getElement = function () {
+
+               return this.element;
+       };
+
+       //return colunm group element
+
+       Column.prototype.getGroupElement = function () {
+
+               return this.groupElement;
+       };
+
+       //return field name
+
+       Column.prototype.getField = function () {
+
+               return this.field;
+       };
+
+       //return the first column in a group
+
+       Column.prototype.getFirstColumn = function () {
+
+               if (!this.isGroup) {
+
+                       return this;
+               } else {
+
+                       if (this.columns.length) {
+
+                               return this.columns[0].getFirstColumn();
+                       } else {
+
+                               return false;
+                       }
+               }
+       };
+
+       //return the last column in a group
+
+       Column.prototype.getLastColumn = function () {
+
+               if (!this.isGroup) {
+
+                       return this;
+               } else {
+
+                       if (this.columns.length) {
+
+                               return this.columns[this.columns.length - 1].getLastColumn();
+                       } else {
+
+                               return false;
+                       }
+               }
+       };
+
+       //return all columns in a group
+
+       Column.prototype.getColumns = function () {
+
+               return this.columns;
+       };
+
+       //return all columns in a group
+
+       Column.prototype.getCells = function () {
+
+               return this.cells;
+       };
+
+       //retreive the top column in a group of columns
+
+       Column.prototype.getTopColumn = function () {
+
+               if (this.parent.isGroup) {
+
+                       return this.parent.getTopColumn();
+               } else {
+
+                       return this;
+               }
+       };
+
+       //return column definition object
+
+       Column.prototype.getDefinition = function (updateBranches) {
+
+               var colDefs = [];
+
+               if (this.isGroup && updateBranches) {
+
+                       this.columns.forEach(function (column) {
+
+                               colDefs.push(column.getDefinition(true));
+                       });
+
+                       this.definition.columns = colDefs;
+               }
+
+               return this.definition;
+       };
+
+       //////////////////// Actions ////////////////////
+
+
+       Column.prototype.checkColumnVisibility = function () {
+
+               var visible = false;
+
+               this.columns.forEach(function (column) {
+
+                       if (column.visible) {
+
+                               visible = true;
+                       }
+               });
+
+               if (visible) {
+
+                       this.show();
+
+                       this.parent.table.options.columnVisibilityChanged.call(this.table, this.getComponent(), false);
+               } else {
+
+                       this.hide();
+               }
+       };
+
+       //show column
+
+       Column.prototype.show = function (silent, responsiveToggle) {
+
+               if (!this.visible) {
+
+                       this.visible = true;
+
+                       this.element.style.display = "";
+
+                       if (this.parent.isGroup) {
+
+                               this.parent.checkColumnVisibility();
+                       }
+
+                       this.cells.forEach(function (cell) {
+
+                               cell.show();
+                       });
+
+                       if (!this.isGroup && this.width === null) {
+
+                               this.reinitializeWidth();
+                       }
+
+                       this.table.columnManager._verticalAlignHeaders();
+
+                       if (this.table.options.persistence && this.table.modExists("persistence", true) && this.table.modules.persistence.config.columns) {
+
+                               this.table.modules.persistence.save("columns");
+                       }
+
+                       if (!responsiveToggle && this.table.options.responsiveLayout && this.table.modExists("responsiveLayout", true)) {
+
+                               this.table.modules.responsiveLayout.updateColumnVisibility(this, this.visible);
+                       }
+
+                       if (!silent) {
+
+                               this.table.options.columnVisibilityChanged.call(this.table, this.getComponent(), true);
+                       }
+
+                       if (this.parent.isGroup) {
+
+                               this.parent.matchChildWidths();
+                       }
+               }
+       };
+
+       //hide column
+
+       Column.prototype.hide = function (silent, responsiveToggle) {
+
+               if (this.visible) {
+
+                       this.visible = false;
+
+                       this.element.style.display = "none";
+
+                       this.table.columnManager._verticalAlignHeaders();
+
+                       if (this.parent.isGroup) {
+
+                               this.parent.checkColumnVisibility();
+                       }
+
+                       this.cells.forEach(function (cell) {
+
+                               cell.hide();
+                       });
+
+                       if (this.table.options.persistence && this.table.modExists("persistence", true) && this.table.modules.persistence.config.columns) {
+
+                               this.table.modules.persistence.save("columns");
+                       }
+
+                       if (!responsiveToggle && this.table.options.responsiveLayout && this.table.modExists("responsiveLayout", true)) {
+
+                               this.table.modules.responsiveLayout.updateColumnVisibility(this, this.visible);
+                       }
+
+                       if (!silent) {
+
+                               this.table.options.columnVisibilityChanged.call(this.table, this.getComponent(), false);
+                       }
+
+                       if (this.parent.isGroup) {
+
+                               this.parent.matchChildWidths();
+                       }
+               }
+       };
+
+       Column.prototype.matchChildWidths = function () {
+
+               var childWidth = 0;
+
+               if (this.contentElement && this.columns.length) {
+
+                       this.columns.forEach(function (column) {
+
+                               if (column.visible) {
+
+                                       childWidth += column.getWidth();
+                               }
+                       });
+
+                       this.contentElement.style.maxWidth = childWidth - 1 + "px";
+
+                       if (this.parent.isGroup) {
+
+                               this.parent.matchChildWidths();
+                       }
+               }
+       };
+
+       Column.prototype.setWidth = function (width) {
+
+               this.widthFixed = true;
+
+               this.setWidthActual(width);
+       };
+
+       Column.prototype.setWidthActual = function (width) {
+
+               if (isNaN(width)) {
+
+                       width = Math.floor(this.table.element.clientWidth / 100 * parseInt(width));
+               }
+
+               width = Math.max(this.minWidth, width);
+
+               this.width = width;
+
+               this.widthStyled = width ? width + "px" : "";
+
+               this.element.style.width = this.widthStyled;
+
+               if (!this.isGroup) {
+
+                       this.cells.forEach(function (cell) {
+
+                               cell.setWidth();
+                       });
+               }
+
+               if (this.parent.isGroup) {
+
+                       this.parent.matchChildWidths();
+               }
+
+               //set resizable handles
+
+               if (this.table.modExists("frozenColumns")) {
+
+                       this.table.modules.frozenColumns.layout();
+               }
+       };
+
+       Column.prototype.checkCellHeights = function () {
+
+               var rows = [];
+
+               this.cells.forEach(function (cell) {
+
+                       if (cell.row.heightInitialized) {
+
+                               if (cell.row.getElement().offsetParent !== null) {
+
+                                       rows.push(cell.row);
+
+                                       cell.row.clearCellHeight();
+                               } else {
+
+                                       cell.row.heightInitialized = false;
+                               }
+                       }
+               });
+
+               rows.forEach(function (row) {
+
+                       row.calcHeight();
+               });
+
+               rows.forEach(function (row) {
+
+                       row.setCellHeight();
+               });
+       };
+
+       Column.prototype.getWidth = function () {
+
+               var width = 0;
+
+               if (this.isGroup) {
+
+                       this.columns.forEach(function (column) {
+
+                               if (column.visible) {
+
+                                       width += column.getWidth();
+                               }
+                       });
+               } else {
+
+                       width = this.width;
+               }
+
+               return width;
+       };
+
+       Column.prototype.getHeight = function () {
+
+               return this.element.offsetHeight;
+       };
+
+       Column.prototype.setMinWidth = function (minWidth) {
+
+               this.minWidth = minWidth;
+
+               this.minWidthStyled = minWidth ? minWidth + "px" : "";
+
+               this.element.style.minWidth = this.minWidthStyled;
+
+               this.cells.forEach(function (cell) {
+
+                       cell.setMinWidth();
+               });
+       };
+
+       Column.prototype.delete = function () {
+               var _this9 = this;
+
+               return new Promise(function (resolve, reject) {
+
+                       if (_this9.isGroup) {
+
+                               _this9.columns.forEach(function (column) {
+
+                                       column.delete();
+                               });
+                       }
+
+                       //cancel edit if column is currently being edited
+
+                       if (_this9.table.modExists("edit")) {
+
+                               if (_this9.table.modules.edit.currentCell.column === _this9) {
+
+                                       _this9.table.modules.edit.cancelEdit();
+                               }
+                       }
+
+                       var cellCount = _this9.cells.length;
+
+                       for (var _i3 = 0; _i3 < cellCount; _i3++) {
+
+                               _this9.cells[0].delete();
+                       }
+
+                       if (_this9.element.parentNode) {
+
+                               _this9.element.parentNode.removeChild(_this9.element);
+                       }
+
+                       _this9.element = false;
+
+                       _this9.contentElement = false;
+
+                       _this9.titleElement = false;
+
+                       _this9.groupElement = false;
+
+                       _this9.table.columnManager.deregisterColumn(_this9);
+
+                       if (_this9.table.options.virtualDomHoz) {
+
+                               _this9.table.vdomHoz.reinitialize(true);
+                       }
+
+                       resolve();
+               });
+       };
+
+       Column.prototype.columnRendered = function () {
+
+               if (this.titleFormatterRendered) {
+
+                       this.titleFormatterRendered();
+               }
+       };
+
+       Column.prototype.validate = function () {
+
+               var invalid = [];
+
+               this.cells.forEach(function (cell) {
+
+                       if (!cell.validate()) {
+
+                               invalid.push(cell.getComponent());
+                       }
+               });
+
+               return invalid.length ? invalid : true;
+       };
+
+       //////////////// Cell Management /////////////////
+
+
+       //generate cell for this column
+
+       Column.prototype.generateCell = function (row) {
+
+               var self = this;
+
+               var cell = new Cell(self, row);
+
+               this.cells.push(cell);
+
+               return cell;
+       };
+
+       Column.prototype.nextColumn = function () {
+
+               var index = this.table.columnManager.findColumnIndex(this);
+
+               return index > -1 ? this._nextVisibleColumn(index + 1) : false;
+       };
+
+       Column.prototype._nextVisibleColumn = function (index) {
+
+               var column = this.table.columnManager.getColumnByIndex(index);
+
+               return !column || column.visible ? column : this._nextVisibleColumn(index + 1);
+       };
+
+       Column.prototype.prevColumn = function () {
+
+               var index = this.table.columnManager.findColumnIndex(this);
+
+               return index > -1 ? this._prevVisibleColumn(index - 1) : false;
+       };
+
+       Column.prototype._prevVisibleColumn = function (index) {
+
+               var column = this.table.columnManager.getColumnByIndex(index);
+
+               return !column || column.visible ? column : this._prevVisibleColumn(index - 1);
+       };
+
+       Column.prototype.reinitializeWidth = function (force) {
+
+               this.widthFixed = false;
+
+               //set width if present
+
+               if (typeof this.definition.width !== "undefined" && !force) {
+
+                       this.setWidth(this.definition.width);
+               }
+
+               //hide header filters to prevent them altering column width
+
+               if (this.table.modExists("filter")) {
+
+                       this.table.modules.filter.hideHeaderFilterElements();
+               }
+
+               this.fitToData();
+
+               //show header filters again after layout is complete
+
+               if (this.table.modExists("filter")) {
+
+                       this.table.modules.filter.showHeaderFilterElements();
+               }
+       };
+
+       //set column width to maximum cell width
+
+       Column.prototype.fitToData = function () {
+
+               var self = this;
+
+               if (!this.widthFixed) {
+
+                       this.element.style.width = "";
+
+                       self.cells.forEach(function (cell) {
+
+                               cell.clearWidth();
+                       });
+               }
+
+               var maxWidth = this.element.offsetWidth;
+
+               if (!self.width || !this.widthFixed) {
+
+                       self.cells.forEach(function (cell) {
+
+                               var width = cell.getWidth();
+
+                               if (width > maxWidth) {
+
+                                       maxWidth = width;
+                               }
+                       });
+
+                       if (maxWidth) {
+
+                               self.setWidthActual(maxWidth + 1);
+                       }
+               }
+       };
+
+       Column.prototype.updateDefinition = function (updates) {
+               var _this10 = this;
+
+               return new Promise(function (resolve, reject) {
+
+                       var definition;
+
+                       if (!_this10.isGroup) {
+
+                               definition = Object.assign({}, _this10.getDefinition());
+
+                               definition = Object.assign(definition, updates);
+
+                               _this10.table.columnManager.addColumn(definition, false, _this10).then(function (column) {
+
+                                       if (definition.field == _this10.field) {
+
+                                               _this10.field = false; //cleair field name to prevent deletion of duplicate column from arrays
+                                       }
+
+                                       _this10.delete().then(function () {
+
+                                               resolve(column.getComponent());
+                                       }).catch(function (err) {
+
+                                               reject(err);
+                                       });
+                               }).catch(function (err) {
+
+                                       reject(err);
+                               });
+                       } else {
+
+                               console.warn("Column Update Error - The updateDefinition function is only available on columns, not column groups");
+
+                               reject("Column Update Error - The updateDefinition function is only available on columns, not column groups");
+                       }
+               });
+       };
+
+       Column.prototype.deleteCell = function (cell) {
+
+               var index = this.cells.indexOf(cell);
+
+               if (index > -1) {
+
+                       this.cells.splice(index, 1);
+               }
+       };
+
+       Column.prototype.defaultOptionList = ["title", "field", "columns", "visible", "align", "hozAlign", "vertAlign", "width", "minWidth", "widthGrow", "widthShrink", "resizable", "frozen", "responsive", "tooltip", "cssClass", "rowHandle", "hideInHtml", "print", "htmlOutput", "sorter", "sorterParams", "formatter", "formatterParams", "variableHeight", "editable", "editor", "editorParams", "validator", "mutator", "mutatorParams", "mutatorData", "mutatorDataParams", "mutatorEdit", "mutatorEditParams", "mutatorClipboard", "mutatorClipboardParams", "accessor", "accessorParams", "accessorData", "accessorDataParams", "accessorDownload", "accessorDownloadParams", "accessorClipboard", "accessorClipboardParams", "accessorPrint", "accessorPrintParams", "accessorHtmlOutput", "accessorHtmlOutputParams", "clipboard", "download", "downloadTitle", "topCalc", "topCalcParams", "topCalcFormatter", "topCalcFormatterParams", "bottomCalc", "bottomCalcParams", "bottomCalcFormatter", "bottomCalcFormatterParams", "cellClick", "cellDblClick", "cellContext", "cellTap", "cellDblTap", "cellTapHold", "cellMouseEnter", "cellMouseLeave", "cellMouseOver", "cellMouseOut", "cellMouseMove", "cellEditing", "cellEdited", "cellEditCancelled", "headerSort", "headerSortStartingDir", "headerSortTristate", "headerClick", "headerDblClick", "headerContext", "headerTap", "headerDblTap", "headerTapHold", "headerTooltip", "headerVertical", "headerHozAlign", "editableTitle", "titleFormatter", "titleFormatterParams", "headerFilter", "headerFilterPlaceholder", "headerFilterParams", "headerFilterEmptyCheck", "headerFilterFunc", "headerFilterFuncParams", "headerFilterLiveFilter", "print", "headerContextMenu", "headerMenu", "contextMenu",
+
+       // "headerClickMenu",
+
+       "clickMenu", "formatterPrint", "formatterPrintParams", "formatterClipboard", "formatterClipboardParams", "formatterHtmlOutput", "formatterHtmlOutputParams", "titlePrint", "titleClipboard", "titleHtmlOutput", "titleDownload"];
+
+       //////////////// Event Bindings /////////////////
+
+
+       //////////////// Object Generation /////////////////
+
+       Column.prototype.getComponent = function () {
+
+               if (!this.component) {
+
+                       this.component = new ColumnComponent(this);
+               }
+
+               return this.component;
+       };
+
+       var RowManager = function RowManager(table) {
+
+               this.table = table;
+
+               this.element = this.createHolderElement(); //containing element
+
+               this.tableElement = this.createTableElement(); //table element
+
+               this.heightFixer = this.createTableElement(); //table element
+
+               this.columnManager = null; //hold column manager object
+
+               this.height = 0; //hold height of table element
+
+
+               this.firstRender = false; //handle first render
+
+               this.renderMode = "virtual"; //current rendering mode
+
+               this.fixedHeight = false; //current rendering mode
+
+
+               this.rows = []; //hold row data objects
+
+               this.activeRows = []; //rows currently available to on display in the table
+
+               this.activeRowsCount = 0; //count of active rows
+
+
+               this.displayRows = []; //rows currently on display in the table
+
+               this.displayRowsCount = 0; //count of display rows
+
+
+               this.scrollTop = 0;
+
+               this.scrollLeft = 0;
+
+               this.vDomRowHeight = 20; //approximation of row heights for padding
+
+
+               this.vDomTop = 0; //hold position for first rendered row in the virtual DOM
+
+               this.vDomBottom = 0; //hold possition for last rendered row in the virtual DOM
+
+
+               this.vDomScrollPosTop = 0; //last scroll position of the vDom top;
+
+               this.vDomScrollPosBottom = 0; //last scroll position of the vDom bottom;
+
+
+               this.vDomTopPad = 0; //hold value of padding for top of virtual DOM
+
+               this.vDomBottomPad = 0; //hold value of padding for bottom of virtual DOM
+
+
+               this.vDomMaxRenderChain = 90; //the maximum number of dom elements that can be rendered in 1 go
+
+
+               this.vDomWindowBuffer = 0; //window row buffer before removing elements, to smooth scrolling
+
+
+               this.vDomWindowMinTotalRows = 20; //minimum number of rows to be generated in virtual dom (prevent buffering issues on tables with tall rows)
+
+               this.vDomWindowMinMarginRows = 5; //minimum number of rows to be generated in virtual dom margin
+
+
+               this.vDomTopNewRows = []; //rows to normalize after appending to optimize render speed
+
+               this.vDomBottomNewRows = []; //rows to normalize after appending to optimize render speed
+
+
+               this.rowNumColumn = false; //hold column component for row number column
+
+
+               this.redrawBlock = false; //prevent redraws to allow multiple data manipulations becore continuing
+
+               this.redrawBlockRestoreConfig = false; //store latest redraw function calls for when redraw is needed
+
+               this.redrawBlockRederInPosition = false; //store latest redraw function calls for when redraw is needed
+       };
+
+       //////////////// Setup Functions /////////////////
+
+
+       RowManager.prototype.createHolderElement = function () {
+
+               var el = document.createElement("div");
+
+               el.classList.add("tabulator-tableHolder");
+
+               el.setAttribute("tabindex", 0);
+
+               return el;
+       };
+
+       RowManager.prototype.createTableElement = function () {
+
+               var el = document.createElement("div");
+
+               el.classList.add("tabulator-table");
+
+               return el;
+       };
+
+       //return containing element
+
+       RowManager.prototype.getElement = function () {
+
+               return this.element;
+       };
+
+       //return table element
+
+       RowManager.prototype.getTableElement = function () {
+
+               return this.tableElement;
+       };
+
+       //return position of row in table
+
+       RowManager.prototype.getRowPosition = function (row, active) {
+
+               if (active) {
+
+                       return this.activeRows.indexOf(row);
+               } else {
+
+                       return this.rows.indexOf(row);
+               }
+       };
+
+       //link to column manager
+
+       RowManager.prototype.setColumnManager = function (manager) {
+
+               this.columnManager = manager;
+       };
+
+       RowManager.prototype.initialize = function () {
+
+               var self = this;
+
+               self.setRenderMode();
+
+               //initialize manager
+
+               self.element.appendChild(self.tableElement);
+
+               self.firstRender = true;
+
+               //scroll header along with table body
+
+               self.element.addEventListener("scroll", function () {
+
+                       var left = self.element.scrollLeft;
+
+                       //handle horizontal scrolling
+
+                       if (self.scrollLeft != left) {
+
+                               self.columnManager.scrollHorizontal(left);
+
+                               if (self.table.options.groupBy) {
+
+                                       self.table.modules.groupRows.scrollHeaders(left);
+                               }
+
+                               if (self.table.modExists("columnCalcs")) {
+
+                                       self.table.modules.columnCalcs.scrollHorizontal(left);
+                               }
+
+                               self.table.options.scrollHorizontal(left);
+                       }
+
+                       self.scrollLeft = left;
+               });
+
+               //handle virtual dom scrolling
+
+               if (this.renderMode === "virtual") {
+
+                       self.element.addEventListener("scroll", function () {
+
+                               var top = self.element.scrollTop;
+
+                               var dir = self.scrollTop > top;
+
+                               //handle verical scrolling
+
+                               if (self.scrollTop != top) {
+
+                                       self.scrollTop = top;
+
+                                       self.scrollVertical(dir);
+
+                                       if (self.table.options.ajaxProgressiveLoad == "scroll") {
+
+                                               self.table.modules.ajax.nextPage(self.element.scrollHeight - self.element.clientHeight - top);
+                                       }
+
+                                       self.table.options.scrollVertical(top);
+                               } else {
+
+                                       self.scrollTop = top;
+                               }
+                       });
+               }
+       };
+
+       ////////////////// Row Manipulation //////////////////
+
+
+       RowManager.prototype.findRow = function (subject) {
+
+               var self = this;
+
+               if ((typeof subject === 'undefined' ? 'undefined' : _typeof(subject)) == "object") {
+
+                       if (subject instanceof Row) {
+
+                               //subject is row element
+
+                               return subject;
+                       } else if (subject instanceof RowComponent) {
+
+                               //subject is public row component
+
+                               return subject._getSelf() || false;
+                       } else if (typeof HTMLElement !== "undefined" && subject instanceof HTMLElement) {
+
+                               //subject is a HTML element of the row
+
+                               var match = self.rows.find(function (row) {
+
+                                       return row.element === subject;
+                               });
+
+                               return match || false;
+                       }
+               } else if (typeof subject == "undefined" || subject === null) {
+
+                       return false;
+               } else {
+
+                       //subject should be treated as the index of the row
+
+                       var _match = self.rows.find(function (row) {
+
+                               return row.data[self.table.options.index] == subject;
+                       });
+
+                       return _match || false;
+               }
+
+               //catch all for any other type of input
+
+
+               return false;
+       };
+
+       RowManager.prototype.getRowFromDataObject = function (data) {
+
+               var match = this.rows.find(function (row) {
+
+                       return row.data === data;
+               });
+
+               return match || false;
+       };
+
+       RowManager.prototype.getRowFromPosition = function (position, active) {
+
+               if (active) {
+
+                       return this.activeRows[position];
+               } else {
+
+                       return this.rows[position];
+               }
+       };
+
+       RowManager.prototype.scrollToRow = function (row, position, ifVisible) {
+               var _this11 = this;
+
+               var rowIndex = this.getDisplayRows().indexOf(row),
+                   rowEl = row.getElement(),
+                   rowTop,
+                   offset = 0;
+
+               return new Promise(function (resolve, reject) {
+
+                       if (rowIndex > -1) {
+
+                               if (typeof position === "undefined") {
+
+                                       position = _this11.table.options.scrollToRowPosition;
+                               }
+
+                               if (typeof ifVisible === "undefined") {
+
+                                       ifVisible = _this11.table.options.scrollToRowIfVisible;
+                               }
+
+                               if (position === "nearest") {
+
+                                       switch (_this11.renderMode) {
+
+                                               case "classic":
+
+                                                       rowTop = Tabulator.prototype.helpers.elOffset(rowEl).top;
+
+                                                       position = Math.abs(_this11.element.scrollTop - rowTop) > Math.abs(_this11.element.scrollTop + _this11.element.clientHeight - rowTop) ? "bottom" : "top";
+
+                                                       break;
+
+                                               case "virtual":
+
+                                                       position = Math.abs(_this11.vDomTop - rowIndex) > Math.abs(_this11.vDomBottom - rowIndex) ? "bottom" : "top";
+
+                                                       break;
+
+                                       }
+                               }
+
+                               //check row visibility
+
+                               if (!ifVisible) {
+
+                                       if (Tabulator.prototype.helpers.elVisible(rowEl)) {
+
+                                               offset = Tabulator.prototype.helpers.elOffset(rowEl).top - Tabulator.prototype.helpers.elOffset(_this11.element).top;
+
+                                               if (offset > 0 && offset < _this11.element.clientHeight - rowEl.offsetHeight) {
+
+                                                       return false;
+                                               }
+                                       }
+                               }
+
+                               //scroll to row
+
+                               switch (_this11.renderMode) {
+
+                                       case "classic":
+
+                                               _this11.element.scrollTop = Tabulator.prototype.helpers.elOffset(rowEl).top - Tabulator.prototype.helpers.elOffset(_this11.element).top + _this11.element.scrollTop;
+
+                                               break;
+
+                                       case "virtual":
+
+                                               _this11._virtualRenderFill(rowIndex, true);
+
+                                               break;
+
+                               }
+
+                               //align to correct position
+
+                               switch (position) {
+
+                                       case "middle":
+
+                                       case "center":
+
+                                               if (_this11.element.scrollHeight - _this11.element.scrollTop == _this11.element.clientHeight) {
+
+                                                       _this11.element.scrollTop = _this11.element.scrollTop + (rowEl.offsetTop - _this11.element.scrollTop) - (_this11.element.scrollHeight - rowEl.offsetTop) / 2;
+                                               } else {
+
+                                                       _this11.element.scrollTop = _this11.element.scrollTop - _this11.element.clientHeight / 2;
+                                               }
+
+                                               break;
+
+                                       case "bottom":
+
+                                               if (_this11.element.scrollHeight - _this11.element.scrollTop == _this11.element.clientHeight) {
+
+                                                       _this11.element.scrollTop = _this11.element.scrollTop - (_this11.element.scrollHeight - rowEl.offsetTop) + rowEl.offsetHeight;
+                                               } else {
+
+                                                       _this11.element.scrollTop = _this11.element.scrollTop - _this11.element.clientHeight + rowEl.offsetHeight;
+                                               }
+
+                                               break;
+
+                               }
+
+                               resolve();
+                       } else {
+
+                               console.warn("Scroll Error - Row not visible");
+
+                               reject("Scroll Error - Row not visible");
+                       }
+               });
+       };
+
+       ////////////////// Data Handling //////////////////
+
+
+       RowManager.prototype.setData = function (data, renderInPosition, columnsChanged) {
+               var _this12 = this;
+
+               var self = this;
+
+               return new Promise(function (resolve, reject) {
+
+                       if (renderInPosition && _this12.getDisplayRows().length) {
+
+                               if (self.table.options.pagination) {
+
+                                       self._setDataActual(data, true);
+                               } else {
+
+                                       _this12.reRenderInPosition(function () {
+
+                                               self._setDataActual(data);
+                                       });
+                               }
+                       } else {
+
+                               if (_this12.table.options.autoColumns && columnsChanged) {
+
+                                       _this12.table.columnManager.generateColumnsFromRowData(data);
+                               }
+
+                               _this12.resetScroll();
+
+                               _this12._setDataActual(data);
+                       }
+
+                       resolve();
+               });
+       };
+
+       RowManager.prototype._setDataActual = function (data, renderInPosition) {
+
+               var self = this;
+
+               self.table.options.dataLoading.call(this.table, data);
+
+               this._wipeElements();
+
+               if (this.table.options.history && this.table.modExists("history")) {
+
+                       this.table.modules.history.clear();
+               }
+
+               if (Array.isArray(data)) {
+
+                       if (this.table.modExists("selectRow")) {
+
+                               this.table.modules.selectRow.clearSelectionData();
+                       }
+
+                       if (this.table.options.reactiveData && this.table.modExists("reactiveData", true)) {
+
+                               this.table.modules.reactiveData.watchData(data);
+                       }
+
+                       data.forEach(function (def, i) {
+
+                               if (def && (typeof def === 'undefined' ? 'undefined' : _typeof(def)) === "object") {
+
+                                       var row = new Row(def, self);
+
+                                       self.rows.push(row);
+                               } else {
+
+                                       console.warn("Data Loading Warning - Invalid row data detected and ignored, expecting object but received:", def);
+                               }
+                       });
+
+                       self.refreshActiveData(false, false, renderInPosition);
+
+                       self.table.options.dataLoaded.call(this.table, data);
+               } else {
+
+                       console.error("Data Loading Error - Unable to process data due to invalid data type \nExpecting: array \nReceived: ", typeof data === 'undefined' ? 'undefined' : _typeof(data), "\nData:     ", data);
+               }
+       };
+
+       RowManager.prototype._wipeElements = function () {
+
+               this.rows.forEach(function (row) {
+
+                       row.wipe();
+               });
+
+               if (this.table.options.groupBy && this.table.modExists("groupRows")) {
+
+                       this.table.modules.groupRows.wipe();
+               }
+
+               this.rows = [];
+
+               this.activeRows = [];
+
+               this.activeRowsCount = 0;
+
+               this.displayRows = [];
+
+               this.displayRowsCount = 0;
+
+               this.adjustTableSize();
+       };
+
+       RowManager.prototype.deleteRow = function (row, blockRedraw) {
+
+               var allIndex = this.rows.indexOf(row),
+                   activeIndex = this.activeRows.indexOf(row);
+
+               if (activeIndex > -1) {
+
+                       this.activeRows.splice(activeIndex, 1);
+               }
+
+               if (allIndex > -1) {
+
+                       this.rows.splice(allIndex, 1);
+               }
+
+               this.setActiveRows(this.activeRows);
+
+               this.displayRowIterator(function (rows) {
+
+                       var displayIndex = rows.indexOf(row);
+
+                       if (displayIndex > -1) {
+
+                               rows.splice(displayIndex, 1);
+                       }
+               });
+
+               if (!blockRedraw) {
+
+                       this.reRenderInPosition();
+               }
+
+               this.regenerateRowNumbers();
+
+               this.table.options.rowDeleted.call(this.table, row.getComponent());
+
+               if (this.table.options.dataChanged) {
+
+                       this.table.options.dataChanged.call(this.table, this.getData());
+               }
+
+               if (this.table.options.groupBy && this.table.modExists("groupRows")) {
+
+                       this.table.modules.groupRows.updateGroupRows(true);
+               } else if (this.table.options.pagination && this.table.modExists("page")) {
+
+                       this.refreshActiveData(false, false, true);
+               } else {
+
+                       if (this.table.options.pagination && this.table.modExists("page")) {
+
+                               this.refreshActiveData("page");
+                       }
+               }
+       };
+
+       RowManager.prototype.addRow = function (data, pos, index, blockRedraw) {
+
+               var row = this.addRowActual(data, pos, index, blockRedraw);
+
+               if (this.table.options.history && this.table.modExists("history")) {
+
+                       this.table.modules.history.action("rowAdd", row, { data: data, pos: pos, index: index });
+               }
+
+               return row;
+       };
+
+       //add multiple rows
+
+       RowManager.prototype.addRows = function (data, pos, index) {
+               var _this13 = this;
+
+               var self = this,
+                   length = 0,
+                   rows = [];
+
+               return new Promise(function (resolve, reject) {
+
+                       pos = _this13.findAddRowPos(pos);
+
+                       if (!Array.isArray(data)) {
+
+                               data = [data];
+                       }
+
+                       length = data.length - 1;
+
+                       if (typeof index == "undefined" && pos || typeof index !== "undefined" && !pos) {
+
+                               data.reverse();
+                       }
+
+                       data.forEach(function (item, i) {
+
+                               var row = self.addRow(item, pos, index, true);
+
+                               rows.push(row);
+                       });
+
+                       if (_this13.table.options.groupBy && _this13.table.modExists("groupRows")) {
+
+                               _this13.table.modules.groupRows.updateGroupRows(true);
+                       } else if (_this13.table.options.pagination && _this13.table.modExists("page")) {
+
+                               _this13.refreshActiveData(false, false, true);
+                       } else {
+
+                               _this13.reRenderInPosition();
+                       }
+
+                       //recalc column calculations if present
+
+                       if (_this13.table.modExists("columnCalcs")) {
+
+                               _this13.table.modules.columnCalcs.recalc(_this13.table.rowManager.activeRows);
+                       }
+
+                       _this13.regenerateRowNumbers();
+
+                       resolve(rows);
+               });
+       };
+
+       RowManager.prototype.findAddRowPos = function (pos) {
+
+               if (typeof pos === "undefined") {
+
+                       pos = this.table.options.addRowPos;
+               }
+
+               if (pos === "pos") {
+
+                       pos = true;
+               }
+
+               if (pos === "bottom") {
+
+                       pos = false;
+               }
+
+               return pos;
+       };
+
+       RowManager.prototype.addRowActual = function (data, pos, index, blockRedraw) {
+
+               var row = data instanceof Row ? data : new Row(data || {}, this),
+                   top = this.findAddRowPos(pos),
+                   allIndex = -1,
+                   activeIndex,
+                   dispRows;
+
+               if (!index && this.table.options.pagination && this.table.options.paginationAddRow == "page") {
+
+                       dispRows = this.getDisplayRows();
+
+                       if (top) {
+
+                               if (dispRows.length) {
+
+                                       index = dispRows[0];
+                               } else {
+
+                                       if (this.activeRows.length) {
+
+                                               index = this.activeRows[this.activeRows.length - 1];
+
+                                               top = false;
+                                       }
+                               }
+                       } else {
+
+                               if (dispRows.length) {
+
+                                       index = dispRows[dispRows.length - 1];
+
+                                       top = dispRows.length < this.table.modules.page.getPageSize() ? false : true;
+                               }
+                       }
+               }
+
+               if (typeof index !== "undefined") {
+
+                       index = this.findRow(index);
+               }
+
+               if (this.table.options.groupBy && this.table.modExists("groupRows")) {
+
+                       this.table.modules.groupRows.assignRowToGroup(row);
+
+                       var groupRows = row.getGroup().rows;
+
+                       if (groupRows.length > 1) {
+
+                               if (!index || index && groupRows.indexOf(index) == -1) {
+
+                                       if (top) {
+
+                                               if (groupRows[0] !== row) {
+
+                                                       index = groupRows[0];
+
+                                                       this._moveRowInArray(row.getGroup().rows, row, index, !top);
+                                               }
+                                       } else {
+
+                                               if (groupRows[groupRows.length - 1] !== row) {
+
+                                                       index = groupRows[groupRows.length - 1];
+
+                                                       this._moveRowInArray(row.getGroup().rows, row, index, !top);
+                                               }
+                                       }
+                               } else {
+
+                                       this._moveRowInArray(row.getGroup().rows, row, index, !top);
+                               }
+                       }
+               }
+
+               if (index) {
+
+                       allIndex = this.rows.indexOf(index);
+               }
+
+               if (index && allIndex > -1) {
+
+                       activeIndex = this.activeRows.indexOf(index);
+
+                       this.displayRowIterator(function (rows) {
+
+                               var displayIndex = rows.indexOf(index);
+
+                               if (displayIndex > -1) {
+
+                                       rows.splice(top ? displayIndex : displayIndex + 1, 0, row);
+                               }
+                       });
+
+                       if (activeIndex > -1) {
+
+                               this.activeRows.splice(top ? activeIndex : activeIndex + 1, 0, row);
+                       }
+
+                       this.rows.splice(top ? allIndex : allIndex + 1, 0, row);
+               } else {
+
+                       if (top) {
+
+                               this.displayRowIterator(function (rows) {
+
+                                       rows.unshift(row);
+                               });
+
+                               this.activeRows.unshift(row);
+
+                               this.rows.unshift(row);
+                       } else {
+
+                               this.displayRowIterator(function (rows) {
+
+                                       rows.push(row);
+                               });
+
+                               this.activeRows.push(row);
+
+                               this.rows.push(row);
+                       }
+               }
+
+               this.setActiveRows(this.activeRows);
+
+               this.table.options.rowAdded.call(this.table, row.getComponent());
+
+               if (this.table.options.dataChanged) {
+
+                       this.table.options.dataChanged.call(this.table, this.getData());
+               }
+
+               if (!blockRedraw) {
+
+                       this.reRenderInPosition();
+               }
+
+               return row;
+       };
+
+       RowManager.prototype.moveRow = function (from, to, after) {
+
+               if (this.table.options.history && this.table.modExists("history")) {
+
+                       this.table.modules.history.action("rowMove", from, { posFrom: this.getRowPosition(from), posTo: this.getRowPosition(to), to: to, after: after });
+               }
+
+               this.moveRowActual(from, to, after);
+
+               this.regenerateRowNumbers();
+
+               this.table.options.rowMoved.call(this.table, from.getComponent());
+       };
+
+       RowManager.prototype.moveRowActual = function (from, to, after) {
+               var _this14 = this;
+
+               this._moveRowInArray(this.rows, from, to, after);
+
+               this._moveRowInArray(this.activeRows, from, to, after);
+
+               this.displayRowIterator(function (rows) {
+
+                       _this14._moveRowInArray(rows, from, to, after);
+               });
+
+               if (this.table.options.groupBy && this.table.modExists("groupRows")) {
+
+                       if (!after && to instanceof Group) {
+
+                               to = this.table.rowManager.prevDisplayRow(from) || to;
+                       }
+
+                       var toGroup = to.getGroup();
+
+                       var fromGroup = from.getGroup();
+
+                       if (toGroup === fromGroup) {
+
+                               this._moveRowInArray(toGroup.rows, from, to, after);
+                       } else {
+
+                               if (fromGroup) {
+
+                                       fromGroup.removeRow(from);
+                               }
+
+                               toGroup.insertRow(from, to, after);
+                       }
+               }
+       };
+
+       RowManager.prototype._moveRowInArray = function (rows, from, to, after) {
+
+               var fromIndex, toIndex, start, end;
+
+               if (from !== to) {
+
+                       fromIndex = rows.indexOf(from);
+
+                       if (fromIndex > -1) {
+
+                               rows.splice(fromIndex, 1);
+
+                               toIndex = rows.indexOf(to);
+
+                               if (toIndex > -1) {
+
+                                       if (after) {
+
+                                               rows.splice(toIndex + 1, 0, from);
+                                       } else {
+
+                                               rows.splice(toIndex, 0, from);
+                                       }
+                               } else {
+
+                                       rows.splice(fromIndex, 0, from);
+                               }
+                       }
+
+                       //restyle rows
+
+                       if (rows === this.getDisplayRows()) {
+
+                               start = fromIndex < toIndex ? fromIndex : toIndex;
+
+                               end = toIndex > fromIndex ? toIndex : fromIndex + 1;
+
+                               for (var _i4 = start; _i4 <= end; _i4++) {
+
+                                       if (rows[_i4]) {
+
+                                               this.styleRow(rows[_i4], _i4);
+                                       }
+                               }
+                       }
+               }
+       };
+
+       RowManager.prototype.clearData = function () {
+
+               this.setData([]);
+       };
+
+       RowManager.prototype.getRowIndex = function (row) {
+
+               return this.findRowIndex(row, this.rows);
+       };
+
+       RowManager.prototype.getDisplayRowIndex = function (row) {
+
+               var index = this.getDisplayRows().indexOf(row);
+
+               return index > -1 ? index : false;
+       };
+
+       RowManager.prototype.nextDisplayRow = function (row, rowOnly) {
+
+               var index = this.getDisplayRowIndex(row),
+                   nextRow = false;
+
+               if (index !== false && index < this.displayRowsCount - 1) {
+
+                       nextRow = this.getDisplayRows()[index + 1];
+               }
+
+               if (nextRow && (!(nextRow instanceof Row) || nextRow.type != "row")) {
+
+                       return this.nextDisplayRow(nextRow, rowOnly);
+               }
+
+               return nextRow;
+       };
+
+       RowManager.prototype.prevDisplayRow = function (row, rowOnly) {
+
+               var index = this.getDisplayRowIndex(row),
+                   prevRow = false;
+
+               if (index) {
+
+                       prevRow = this.getDisplayRows()[index - 1];
+               }
+
+               if (rowOnly && prevRow && (!(prevRow instanceof Row) || prevRow.type != "row")) {
+
+                       return this.prevDisplayRow(prevRow, rowOnly);
+               }
+
+               return prevRow;
+       };
+
+       RowManager.prototype.findRowIndex = function (row, list) {
+
+               var rowIndex;
+
+               row = this.findRow(row);
+
+               if (row) {
+
+                       rowIndex = list.indexOf(row);
+
+                       if (rowIndex > -1) {
+
+                               return rowIndex;
+                       }
+               }
+
+               return false;
+       };
+
+       RowManager.prototype.getData = function (active, transform) {
+
+               var output = [],
+                   rows = this.getRows(active);
+
+               rows.forEach(function (row) {
+
+                       if (row.type == "row") {
+
+                               output.push(row.getData(transform || "data"));
+                       }
+               });
+
+               return output;
+       };
+
+       RowManager.prototype.getComponents = function (active) {
+
+               var output = [],
+                   rows = this.getRows(active);
+
+               rows.forEach(function (row) {
+
+                       output.push(row.getComponent());
+               });
+
+               return output;
+       };
+
+       RowManager.prototype.getDataCount = function (active) {
+
+               var rows = this.getRows(active);
+
+               return rows.length;
+       };
+
+       RowManager.prototype._genRemoteRequest = function () {
+               var _this15 = this;
+
+               var table = this.table,
+                   options = table.options,
+                   params = {};
+
+               if (table.modExists("page")) {
+
+                       //set sort data if defined
+
+                       if (options.ajaxSorting) {
+
+                               var sorters = this.table.modules.sort.getSort();
+
+                               sorters.forEach(function (item) {
+
+                                       delete item.column;
+                               });
+
+                               params[this.table.modules.page.paginationDataSentNames.sorters] = sorters;
+                       }
+
+                       //set filter data if defined
+
+                       if (options.ajaxFiltering) {
+
+                               var filters = this.table.modules.filter.getFilters(true, true);
+
+                               params[this.table.modules.page.paginationDataSentNames.filters] = filters;
+                       }
+
+                       this.table.modules.ajax.setParams(params, true);
+               }
+
+               table.modules.ajax.sendRequest().then(function (data) {
+
+                       _this15._setDataActual(data, true);
+               }).catch(function (e) {});
+       };
+
+       //choose the path to refresh data after a filter update
+
+       RowManager.prototype.filterRefresh = function () {
+
+               var table = this.table,
+                   options = table.options,
+                   left = this.scrollLeft;
+
+               if (options.ajaxFiltering) {
+
+                       if (options.pagination == "remote" && table.modExists("page")) {
+
+                               table.modules.page.reset(true);
+
+                               table.modules.page.setPage(1).then(function () {}).catch(function () {});
+                       } else if (options.ajaxProgressiveLoad) {
+
+                               table.modules.ajax.loadData().then(function () {}).catch(function () {});
+                       } else {
+
+                               //assume data is url, make ajax call to url to get data
+
+                               this._genRemoteRequest();
+                       }
+               } else {
+
+                       this.refreshActiveData("filter");
+               }
+
+               this.scrollHorizontal(left);
+       };
+
+       //choose the path to refresh data after a sorter update
+
+       RowManager.prototype.sorterRefresh = function (loadOrignalData) {
+
+               var table = this.table,
+                   options = this.table.options,
+                   left = this.scrollLeft;
+
+               if (options.ajaxSorting) {
+
+                       if ((options.pagination == "remote" || options.progressiveLoad) && table.modExists("page")) {
+
+                               table.modules.page.reset(true);
+
+                               table.modules.page.setPage(1).then(function () {}).catch(function () {});
+                       } else if (options.ajaxProgressiveLoad) {
+
+                               table.modules.ajax.loadData().then(function () {}).catch(function () {});
+                       } else {
+
+                               //assume data is url, make ajax call to url to get data
+
+                               this._genRemoteRequest();
+                       }
+               } else {
+
+                       this.refreshActiveData(loadOrignalData ? "filter" : "sort");
+               }
+
+               this.scrollHorizontal(left);
+       };
+
+       RowManager.prototype.scrollHorizontal = function (left) {
+
+               this.scrollLeft = left;
+
+               this.element.scrollLeft = left;
+
+               if (this.table.options.groupBy) {
+
+                       this.table.modules.groupRows.scrollHeaders(left);
+               }
+
+               if (this.table.modExists("columnCalcs")) {
+
+                       this.table.modules.columnCalcs.scrollHorizontal(left);
+               }
+       };
+
+       //set active data set
+
+       RowManager.prototype.refreshActiveData = function (stage, skipStage, renderInPosition) {
+
+               var self = this,
+                   table = this.table,
+                   cascadeOrder = ["all", "filter", "sort", "display", "freeze", "group", "tree", "page"],
+                   displayIndex;
+
+               if (this.redrawBlock) {
+
+                       if (!this.redrawBlockRestoreConfig || cascadeOrder.indexOf(stage) < cascadeOrder.indexOf(this.redrawBlockRestoreConfig.stage)) {
+
+                               this.redrawBlockRestoreConfig = {
+
+                                       stage: stage,
+
+                                       skipStage: skipStage,
+
+                                       renderInPosition: renderInPosition
+
+                               };
+                       }
+
+                       return;
+               } else {
+
+                       if (self.table.modExists("edit")) {
+
+                               self.table.modules.edit.cancelEdit();
+                       }
+
+                       if (!stage) {
+
+                               stage = "all";
+                       }
+
+                       if (table.options.selectable && !table.options.selectablePersistence && table.modExists("selectRow")) {
+
+                               table.modules.selectRow.deselectRows();
+                       }
+
+                       //cascade through data refresh stages
+
+                       switch (stage) {
+
+                               case "all":
+
+                               case "filter":
+
+                                       if (!skipStage) {
+
+                                               if (table.modExists("filter")) {
+
+                                                       self.setActiveRows(table.modules.filter.filter(self.rows));
+                                               } else {
+
+                                                       self.setActiveRows(self.rows.slice(0));
+                                               }
+                                       } else {
+
+                                               skipStage = false;
+                                       }
+
+                               case "sort":
+
+                                       if (!skipStage) {
+
+                                               if (table.modExists("sort")) {
+
+                                                       table.modules.sort.sort(this.activeRows);
+                                               }
+                                       } else {
+
+                                               skipStage = false;
+                                       }
+
+                                       //regenerate row numbers for row number formatter if in use
+
+                                       this.regenerateRowNumbers();
+
+                               //generic stage to allow for pipeline trigger after the data manipulation stage
+
+                               case "display":
+
+                                       this.resetDisplayRows();
+
+                               case "freeze":
+
+                                       if (!skipStage) {
+
+                                               if (this.table.modExists("frozenRows")) {
+
+                                                       if (table.modules.frozenRows.isFrozen()) {
+
+                                                               if (!table.modules.frozenRows.getDisplayIndex()) {
+
+                                                                       table.modules.frozenRows.setDisplayIndex(this.getNextDisplayIndex());
+                                                               }
+
+                                                               displayIndex = table.modules.frozenRows.getDisplayIndex();
+
+                                                               displayIndex = self.setDisplayRows(table.modules.frozenRows.getRows(this.getDisplayRows(displayIndex - 1)), displayIndex);
+
+                                                               if (displayIndex !== true) {
+
+                                                                       table.modules.frozenRows.setDisplayIndex(displayIndex);
+                                                               }
+                                                       }
+                                               }
+                                       } else {
+
+                                               skipStage = false;
+                                       }
+
+                               case "group":
+
+                                       if (!skipStage) {
+
+                                               if (table.options.groupBy && table.modExists("groupRows")) {
+
+                                                       if (!table.modules.groupRows.getDisplayIndex()) {
+
+                                                               table.modules.groupRows.setDisplayIndex(this.getNextDisplayIndex());
+                                                       }
+
+                                                       displayIndex = table.modules.groupRows.getDisplayIndex();
+
+                                                       displayIndex = self.setDisplayRows(table.modules.groupRows.getRows(this.getDisplayRows(displayIndex - 1)), displayIndex);
+
+                                                       if (displayIndex !== true) {
+
+                                                               table.modules.groupRows.setDisplayIndex(displayIndex);
+                                                       }
+                                               }
+                                       } else {
+
+                                               skipStage = false;
+                                       }
+
+                               case "tree":
+
+                                       if (!skipStage) {
+
+                                               if (table.options.dataTree && table.modExists("dataTree")) {
+
+                                                       if (!table.modules.dataTree.getDisplayIndex()) {
+
+                                                               table.modules.dataTree.setDisplayIndex(this.getNextDisplayIndex());
+                                                       }
+
+                                                       displayIndex = table.modules.dataTree.getDisplayIndex();
+
+                                                       displayIndex = self.setDisplayRows(table.modules.dataTree.getRows(this.getDisplayRows(displayIndex - 1)), displayIndex);
+
+                                                       if (displayIndex !== true) {
+
+                                                               table.modules.dataTree.setDisplayIndex(displayIndex);
+                                                       }
+                                               }
+                                       } else {
+
+                                               skipStage = false;
+                                       }
+
+                                       if (table.options.pagination && table.modExists("page") && !renderInPosition) {
+
+                                               if (table.modules.page.getMode() == "local") {
+
+                                                       table.modules.page.reset();
+                                               }
+                                       }
+
+                               case "page":
+
+                                       if (!skipStage) {
+
+                                               if (table.options.pagination && table.modExists("page")) {
+
+                                                       if (!table.modules.page.getDisplayIndex()) {
+
+                                                               table.modules.page.setDisplayIndex(this.getNextDisplayIndex());
+                                                       }
+
+                                                       displayIndex = table.modules.page.getDisplayIndex();
+
+                                                       if (table.modules.page.getMode() == "local") {
+
+                                                               table.modules.page.setMaxRows(this.getDisplayRows(displayIndex - 1).length);
+                                                       }
+
+                                                       displayIndex = self.setDisplayRows(table.modules.page.getRows(this.getDisplayRows(displayIndex - 1)), displayIndex);
+
+                                                       if (displayIndex !== true) {
+
+                                                               table.modules.page.setDisplayIndex(displayIndex);
+                                                       }
+                                               }
+                                       } else {
+
+                                               skipStage = false;
+                                       }
+
+                       }
+
+                       if (Tabulator.prototype.helpers.elVisible(self.element)) {
+
+                               if (renderInPosition) {
+
+                                       self.reRenderInPosition();
+                               } else {
+
+                                       if (stage === "all" && this.table.options.virtualDomHoz) {
+
+                                               this.table.vdomHoz.dataChange();
+                                       }
+
+                                       self.renderTable();
+
+                                       if (table.options.layoutColumnsOnNewData) {
+
+                                               self.table.columnManager.redraw(true);
+                                       }
+                               }
+                       }
+
+                       if (table.modExists("columnCalcs")) {
+
+                               table.modules.columnCalcs.recalc(this.activeRows);
+                       }
+               }
+       };
+
+       //regenerate row numbers for row number formatter if in use
+
+       RowManager.prototype.regenerateRowNumbers = function () {
+               var _this16 = this;
+
+               if (this.rowNumColumn) {
+
+                       this.activeRows.forEach(function (row) {
+
+                               var cell = row.getCell(_this16.rowNumColumn);
+
+                               if (cell) {
+
+                                       cell._generateContents();
+                               }
+                       });
+               }
+       };
+
+       RowManager.prototype.setActiveRows = function (activeRows) {
+
+               this.activeRows = activeRows;
+
+               this.activeRowsCount = this.activeRows.length;
+       };
+
+       //reset display rows array
+
+       RowManager.prototype.resetDisplayRows = function () {
+
+               this.displayRows = [];
+
+               this.displayRows.push(this.activeRows.slice(0));
+
+               this.displayRowsCount = this.displayRows[0].length;
+
+               if (this.table.modExists("frozenRows")) {
+
+                       this.table.modules.frozenRows.setDisplayIndex(0);
+               }
+
+               if (this.table.options.groupBy && this.table.modExists("groupRows")) {
+
+                       this.table.modules.groupRows.setDisplayIndex(0);
+               }
+
+               if (this.table.options.pagination && this.table.modExists("page")) {
+
+                       this.table.modules.page.setDisplayIndex(0);
+               }
+       };
+
+       RowManager.prototype.getNextDisplayIndex = function () {
+
+               return this.displayRows.length;
+       };
+
+       //set display row pipeline data
+
+       RowManager.prototype.setDisplayRows = function (displayRows, index) {
+
+               var output = true;
+
+               if (index && typeof this.displayRows[index] != "undefined") {
+
+                       this.displayRows[index] = displayRows;
+
+                       output = true;
+               } else {
+
+                       this.displayRows.push(displayRows);
+
+                       output = index = this.displayRows.length - 1;
+               }
+
+               if (index == this.displayRows.length - 1) {
+
+                       this.displayRowsCount = this.displayRows[this.displayRows.length - 1].length;
+               }
+
+               return output;
+       };
+
+       RowManager.prototype.getDisplayRows = function (index) {
+
+               if (typeof index == "undefined") {
+
+                       return this.displayRows.length ? this.displayRows[this.displayRows.length - 1] : [];
+               } else {
+
+                       return this.displayRows[index] || [];
+               }
+       };
+
+       RowManager.prototype.getVisibleRows = function (viewable) {
+
+               var topEdge = this.element.scrollTop,
+                   bottomEdge = this.element.clientHeight + topEdge,
+                   topFound = false,
+                   topRow = 0,
+                   bottomRow = 0,
+                   rows = this.getDisplayRows();
+
+               if (viewable) {
+
+                       this.getDisplayRows();
+
+                       for (var i = this.vDomTop; i <= this.vDomBottom; i++) {
+
+                               if (rows[i]) {
+
+                                       if (!topFound) {
+
+                                               if (topEdge - rows[i].getElement().offsetTop >= 0) {
+
+                                                       topRow = i;
+                                               } else {
+
+                                                       topFound = true;
+
+                                                       if (bottomEdge - rows[i].getElement().offsetTop >= 0) {
+
+                                                               bottomRow = i;
+                                                       } else {
+
+                                                               break;
+                                                       }
+                                               }
+                                       } else {
+
+                                               if (bottomEdge - rows[i].getElement().offsetTop >= 0) {
+
+                                                       bottomRow = i;
+                                               } else {
+
+                                                       break;
+                                               }
+                                       }
+                               }
+                       }
+               } else {
+
+                       topRow = this.vDomTop;
+
+                       bottomRow = this.vDomBottom;
+               }
+
+               return rows.slice(topRow, bottomRow + 1);
+       };
+
+       //repeat action accross display rows
+
+       RowManager.prototype.displayRowIterator = function (callback) {
+
+               this.displayRows.forEach(callback);
+
+               this.displayRowsCount = this.displayRows[this.displayRows.length - 1].length;
+       };
+
+       //return only actual rows (not group headers etc)
+
+       RowManager.prototype.getRows = function (active) {
+
+               var rows;
+
+               switch (active) {
+
+                       case "active":
+
+                               rows = this.activeRows;
+
+                               break;
+
+                       case "display":
+
+                               rows = this.table.rowManager.getDisplayRows();
+
+                               break;
+
+                       case "visible":
+
+                               rows = this.getVisibleRows(true);
+
+                               break;
+
+                       case "selected":
+
+                               rows = this.table.modules.selectRow.selectedRows;
+
+                               break;
+
+                       default:
+
+                               rows = this.rows;
+
+               }
+
+               return rows;
+       };
+
+       ///////////////// Table Rendering /////////////////
+
+
+       //trigger rerender of table in current position
+
+       RowManager.prototype.reRenderInPosition = function (callback) {
+
+               if (this.getRenderMode() == "virtual") {
+
+                       if (this.redrawBlock) {
+
+                               if (callback) {
+
+                                       callback();
+                               } else {
+
+                                       this.redrawBlockRederInPosition = true;
+                               }
+                       } else {
+
+                               var scrollTop = this.element.scrollTop;
+
+                               var topRow = false;
+
+                               var topOffset = false;
+
+                               var left = this.scrollLeft;
+
+                               var rows = this.getDisplayRows();
+
+                               for (var i = this.vDomTop; i <= this.vDomBottom; i++) {
+
+                                       if (rows[i]) {
+
+                                               var diff = scrollTop - rows[i].getElement().offsetTop;
+
+                                               if (topOffset === false || Math.abs(diff) < topOffset) {
+
+                                                       topOffset = diff;
+
+                                                       topRow = i;
+                                               } else {
+
+                                                       break;
+                                               }
+                                       }
+                               }
+
+                               if (callback) {
+
+                                       callback();
+                               }
+
+                               this._virtualRenderFill(topRow === false ? this.displayRowsCount - 1 : topRow, true, topOffset || 0);
+
+                               this.scrollHorizontal(left);
+                       }
+               } else {
+
+                       this.renderTable();
+
+                       if (callback) {
+
+                               callback();
+                       }
+               }
+       };
+
+       RowManager.prototype.setRenderMode = function () {
+
+               if (this.table.options.virtualDom) {
+
+                       this.renderMode = "virtual";
+
+                       if (this.table.element.clientHeight || this.table.options.height) {
+
+                               this.fixedHeight = true;
+                       } else {
+
+                               this.fixedHeight = false;
+                       }
+               } else {
+
+                       this.renderMode = "classic";
+               }
+       };
+
+       RowManager.prototype.getRenderMode = function () {
+
+               return this.renderMode;
+       };
+
+       RowManager.prototype.renderTable = function () {
+
+               this.table.options.renderStarted.call(this.table);
+
+               this.element.scrollTop = 0;
+
+               switch (this.renderMode) {
+
+                       case "classic":
+
+                               this._simpleRender();
+
+                               break;
+
+                       case "virtual":
+
+                               this._virtualRenderFill();
+
+                               break;
+
+               }
+
+               if (this.firstRender) {
+
+                       if (this.displayRowsCount) {
+
+                               this.firstRender = false;
+
+                               this.table.modules.layout.layout();
+                       } else {
+
+                               this.renderEmptyScroll();
+                       }
+               }
+
+               if (this.table.modExists("frozenColumns")) {
+
+                       this.table.modules.frozenColumns.layout();
+               }
+
+               if (!this.displayRowsCount) {
+
+                       if (this.table.options.placeholder) {
+
+                               this.table.options.placeholder.setAttribute("tabulator-render-mode", this.renderMode);
+
+                               this.getElement().appendChild(this.table.options.placeholder);
+
+                               this.table.options.placeholder.style.width = this.table.columnManager.getWidth() + "px";
+                       }
+               }
+
+               this.table.options.renderComplete.call(this.table);
+       };
+
+       //simple render on heightless table
+
+       RowManager.prototype._simpleRender = function () {
+
+               this._clearVirtualDom();
+
+               if (this.displayRowsCount) {
+
+                       this.checkClassicModeGroupHeaderWidth();
+               } else {
+
+                       this.renderEmptyScroll();
+               }
+       };
+
+       RowManager.prototype.checkClassicModeGroupHeaderWidth = function () {
+
+               var self = this,
+                   element = this.tableElement,
+                   onlyGroupHeaders = true;
+
+               self.getDisplayRows().forEach(function (row, index) {
+
+                       self.styleRow(row, index);
+
+                       element.appendChild(row.getElement());
+
+                       row.initialize(true);
+
+                       if (row.type !== "group") {
+
+                               onlyGroupHeaders = false;
+                       }
+               });
+
+               if (onlyGroupHeaders) {
+
+                       element.style.minWidth = self.table.columnManager.getWidth() + "px";
+               } else {
+
+                       element.style.minWidth = "";
+               }
+       };
+
+       //show scrollbars on empty table div
+
+       RowManager.prototype.renderEmptyScroll = function () {
+
+               if (this.table.options.placeholder) {
+
+                       this.tableElement.style.display = "none";
+               } else {
+
+                       this.tableElement.style.minWidth = this.table.columnManager.getWidth() + "px";
+
+                       // this.tableElement.style.minHeight = "1px";
+
+                       // this.tableElement.style.visibility = "hidden";
+               }
+       };
+
+       RowManager.prototype._clearVirtualDom = function () {
+
+               var element = this.tableElement;
+
+               if (this.table.options.placeholder && this.table.options.placeholder.parentNode) {
+
+                       this.table.options.placeholder.parentNode.removeChild(this.table.options.placeholder);
+               }
+
+               // element.children.detach();
+
+               while (element.firstChild) {
+                       element.removeChild(element.firstChild);
+               }element.style.paddingTop = "";
+
+               element.style.paddingBottom = "";
+
+               element.style.minWidth = "";
+
+               element.style.minHeight = "";
+
+               element.style.display = "";
+
+               element.style.visibility = "";
+
+               this.scrollTop = 0;
+
+               this.scrollLeft = 0;
+
+               this.vDomTop = 0;
+
+               this.vDomBottom = 0;
+
+               this.vDomTopPad = 0;
+
+               this.vDomBottomPad = 0;
+       };
+
+       RowManager.prototype.styleRow = function (row, index) {
+
+               var rowEl = row.getElement();
+
+               if (index % 2) {
+
+                       rowEl.classList.add("tabulator-row-even");
+
+                       rowEl.classList.remove("tabulator-row-odd");
+               } else {
+
+                       rowEl.classList.add("tabulator-row-odd");
+
+                       rowEl.classList.remove("tabulator-row-even");
+               }
+       };
+
+       //full virtual render
+
+       RowManager.prototype._virtualRenderFill = function (position, forceMove, offset) {
+
+               var self = this,
+                   element = self.tableElement,
+                   holder = self.element,
+                   topPad = 0,
+                   rowsHeight = 0,
+                   topPadHeight = 0,
+                   i = 0,
+                   onlyGroupHeaders = true,
+                   rows = self.getDisplayRows();
+
+               position = position || 0;
+
+               offset = offset || 0;
+
+               if (!position) {
+
+                       self._clearVirtualDom();
+               } else {
+
+                       while (element.firstChild) {
+                               element.removeChild(element.firstChild);
+                       } //check if position is too close to bottom of table
+
+                       var heightOccupied = (self.displayRowsCount - position + 1) * self.vDomRowHeight;
+
+                       if (heightOccupied < self.height) {
+
+                               position -= Math.ceil((self.height - heightOccupied) / self.vDomRowHeight);
+
+                               if (position < 0) {
+
+                                       position = 0;
+                               }
+                       }
+
+                       //calculate initial pad
+
+                       topPad = Math.min(Math.max(Math.floor(self.vDomWindowBuffer / self.vDomRowHeight), self.vDomWindowMinMarginRows), position);
+
+                       position -= topPad;
+               }
+
+               if (self.displayRowsCount && Tabulator.prototype.helpers.elVisible(self.element)) {
+
+                       self.vDomTop = position;
+
+                       self.vDomBottom = position - 1;
+
+                       while ((rowsHeight <= self.height + self.vDomWindowBuffer || i < self.vDomWindowMinTotalRows) && self.vDomBottom < self.displayRowsCount - 1) {
+
+                               var index = self.vDomBottom + 1,
+                                   row = rows[index],
+                                   rowHeight = 0;
+
+                               self.styleRow(row, index);
+
+                               element.appendChild(row.getElement());
+
+                               row.initialize();
+
+                               if (!row.heightInitialized) {
+
+                                       row.normalizeHeight(true);
+                               }
+
+                               // if(!row.initialized){
+
+                               //      row.initialize(true);
+
+                               // }else{
+
+                               //      if(!row.heightInitialized){
+
+                               //              row.normalizeHeight(true);
+
+                               //      }
+
+                               // }
+
+
+                               rowHeight = row.getHeight();
+
+                               if (i < topPad) {
+
+                                       topPadHeight += rowHeight;
+                               } else {
+
+                                       rowsHeight += rowHeight;
+                               }
+
+                               if (rowHeight > this.vDomWindowBuffer) {
+
+                                       this.vDomWindowBuffer = rowHeight * 2;
+                               }
+
+                               if (row.type !== "group") {
+
+                                       onlyGroupHeaders = false;
+                               }
+
+                               self.vDomBottom++;
+
+                               i++;
+                       }
+
+                       if (!position) {
+
+                               this.vDomTopPad = 0;
+
+                               //adjust rowheight to match average of rendered elements
+
+                               self.vDomRowHeight = Math.floor((rowsHeight + topPadHeight) / i);
+
+                               self.vDomBottomPad = self.vDomRowHeight * (self.displayRowsCount - self.vDomBottom - 1);
+
+                               self.vDomScrollHeight = topPadHeight + rowsHeight + self.vDomBottomPad - self.height;
+                       } else {
+
+                               self.vDomTopPad = !forceMove ? self.scrollTop - topPadHeight : self.vDomRowHeight * this.vDomTop + offset;
+
+                               self.vDomBottomPad = self.vDomBottom == self.displayRowsCount - 1 ? 0 : Math.max(self.vDomScrollHeight - self.vDomTopPad - rowsHeight - topPadHeight, 0);
+                       }
+
+                       element.style.paddingTop = self.vDomTopPad + "px";
+
+                       element.style.paddingBottom = self.vDomBottomPad + "px";
+
+                       if (forceMove) {
+
+                               this.scrollTop = self.vDomTopPad + topPadHeight + offset - (this.element.scrollWidth > this.element.clientWidth ? this.element.offsetHeight - this.element.clientHeight : 0);
+                       }
+
+                       this.scrollTop = Math.min(this.scrollTop, this.element.scrollHeight - this.height);
+
+                       //adjust for horizontal scrollbar if present (and not at top of table)
+
+                       if (this.element.scrollWidth > this.element.offsetWidth && forceMove) {
+
+                               this.scrollTop += this.element.offsetHeight - this.element.clientHeight;
+                       }
+
+                       this.vDomScrollPosTop = this.scrollTop;
+
+                       this.vDomScrollPosBottom = this.scrollTop;
+
+                       holder.scrollTop = this.scrollTop;
+
+                       element.style.minWidth = onlyGroupHeaders ? self.table.columnManager.getWidth() + "px" : "";
+
+                       if (self.table.options.groupBy) {
+
+                               if (self.table.modules.layout.getMode() != "fitDataFill" && self.displayRowsCount == self.table.modules.groupRows.countGroups()) {
+
+                                       self.tableElement.style.minWidth = self.table.columnManager.getWidth();
+                               }
+                       }
+               } else {
+
+                       this.renderEmptyScroll();
+               }
+
+               if (!this.fixedHeight) {
+
+                       this.adjustTableSize();
+               }
+       };
+
+       //handle vertical scrolling
+
+       RowManager.prototype.scrollVertical = function (dir) {
+
+               var topDiff = this.scrollTop - this.vDomScrollPosTop;
+
+               var bottomDiff = this.scrollTop - this.vDomScrollPosBottom;
+
+               var margin = this.vDomWindowBuffer * 2;
+
+               if (-topDiff > margin || bottomDiff > margin) {
+
+                       //if big scroll redraw table;
+
+                       var left = this.scrollLeft;
+
+                       this._virtualRenderFill(Math.floor(this.element.scrollTop / this.element.scrollHeight * this.displayRowsCount));
+
+                       this.scrollHorizontal(left);
+               } else {
+
+                       if (dir) {
+
+                               //scrolling up
+
+                               if (topDiff < 0) {
+
+                                       this._addTopRow(-topDiff);
+                               }
+
+                               if (bottomDiff < 0) {
+
+                                       //hide bottom row if needed
+
+                                       if (this.vDomScrollHeight - this.scrollTop > this.vDomWindowBuffer) {
+
+                                               this._removeBottomRow(-bottomDiff);
+                                       } else {
+
+                                               this.vDomScrollPosBottom = this.scrollTop;
+                                       }
+                               }
+                       } else {
+
+                               //scrolling down
+
+                               if (topDiff >= 0) {
+
+                                       //hide top row if needed
+
+                                       if (this.scrollTop > this.vDomWindowBuffer) {
+
+                                               this._removeTopRow(topDiff);
+                                       } else {
+
+                                               this.vDomScrollPosTop = this.scrollTop;
+                                       }
+                               }
+
+                               if (bottomDiff >= 0) {
+
+                                       this._addBottomRow(bottomDiff);
+                               }
+                       }
+               }
+       };
+
+       RowManager.prototype._addTopRow = function (topDiff) {
+               var i = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
+
+
+               var table = this.tableElement,
+                   rows = this.getDisplayRows();
+
+               if (this.vDomTop) {
+
+                       var index = this.vDomTop - 1,
+                           topRow = rows[index],
+                           topRowHeight = topRow.getHeight() || this.vDomRowHeight;
+
+                       //hide top row if needed
+
+                       if (topDiff >= topRowHeight) {
+
+                               this.styleRow(topRow, index);
+
+                               table.insertBefore(topRow.getElement(), table.firstChild);
+
+                               if (!topRow.initialized || !topRow.heightInitialized) {
+
+                                       this.vDomTopNewRows.push(topRow);
+
+                                       if (!topRow.heightInitialized) {
+
+                                               topRow.clearCellHeight();
+                                       }
+                               }
+
+                               topRow.initialize();
+
+                               this.vDomTopPad -= topRowHeight;
+
+                               if (this.vDomTopPad < 0) {
+
+                                       this.vDomTopPad = index * this.vDomRowHeight;
+                               }
+
+                               if (!index) {
+
+                                       this.vDomTopPad = 0;
+                               }
+
+                               table.style.paddingTop = this.vDomTopPad + "px";
+
+                               this.vDomScrollPosTop -= topRowHeight;
+
+                               this.vDomTop--;
+                       }
+
+                       topDiff = -(this.scrollTop - this.vDomScrollPosTop);
+
+                       if (topRow.getHeight() > this.vDomWindowBuffer) {
+
+                               this.vDomWindowBuffer = topRow.getHeight() * 2;
+                       }
+
+                       if (i < this.vDomMaxRenderChain && this.vDomTop && topDiff >= (rows[this.vDomTop - 1].getHeight() || this.vDomRowHeight)) {
+
+                               this._addTopRow(topDiff, i + 1);
+                       } else {
+
+                               this._quickNormalizeRowHeight(this.vDomTopNewRows);
+                       }
+               }
+       };
+
+       RowManager.prototype._removeTopRow = function (topDiff) {
+
+               var table = this.tableElement,
+                   topRow = this.getDisplayRows()[this.vDomTop],
+                   topRowHeight = topRow.getHeight() || this.vDomRowHeight;
+
+               if (topDiff >= topRowHeight) {
+
+                       var rowEl = topRow.getElement();
+
+                       rowEl.parentNode.removeChild(rowEl);
+
+                       this.vDomTopPad += topRowHeight;
+
+                       table.style.paddingTop = this.vDomTopPad + "px";
+
+                       this.vDomScrollPosTop += this.vDomTop ? topRowHeight : topRowHeight + this.vDomWindowBuffer;
+
+                       this.vDomTop++;
+
+                       topDiff = this.scrollTop - this.vDomScrollPosTop;
+
+                       this._removeTopRow(topDiff);
+               }
+       };
+
+       RowManager.prototype._addBottomRow = function (bottomDiff) {
+               var i = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
+
+
+               var table = this.tableElement,
+                   rows = this.getDisplayRows();
+
+               if (this.vDomBottom < this.displayRowsCount - 1) {
+
+                       var index = this.vDomBottom + 1,
+                           bottomRow = rows[index],
+                           bottomRowHeight = bottomRow.getHeight() || this.vDomRowHeight;
+
+                       //hide bottom row if needed
+
+                       if (bottomDiff >= bottomRowHeight) {
+
+                               this.styleRow(bottomRow, index);
+
+                               table.appendChild(bottomRow.getElement());
+
+                               if (!bottomRow.initialized || !bottomRow.heightInitialized) {
+
+                                       this.vDomBottomNewRows.push(bottomRow);
+
+                                       if (!bottomRow.heightInitialized) {
+
+                                               bottomRow.clearCellHeight();
+                                       }
+                               }
+
+                               bottomRow.initialize();
+
+                               this.vDomBottomPad -= bottomRowHeight;
+
+                               if (this.vDomBottomPad < 0 || index == this.displayRowsCount - 1) {
+
+                                       this.vDomBottomPad = 0;
+                               }
+
+                               table.style.paddingBottom = this.vDomBottomPad + "px";
+
+                               this.vDomScrollPosBottom += bottomRowHeight;
+
+                               this.vDomBottom++;
+                       }
+
+                       bottomDiff = this.scrollTop - this.vDomScrollPosBottom;
+
+                       if (bottomRow.getHeight() > this.vDomWindowBuffer) {
+
+                               this.vDomWindowBuffer = bottomRow.getHeight() * 2;
+                       }
+
+                       if (i < this.vDomMaxRenderChain && this.vDomBottom < this.displayRowsCount - 1 && bottomDiff >= (rows[this.vDomBottom + 1].getHeight() || this.vDomRowHeight)) {
+
+                               this._addBottomRow(bottomDiff, i + 1);
+                       } else {
+
+                               this._quickNormalizeRowHeight(this.vDomBottomNewRows);
+                       }
+               }
+       };
+
+       RowManager.prototype._removeBottomRow = function (bottomDiff) {
+
+               var table = this.tableElement,
+                   bottomRow = this.getDisplayRows()[this.vDomBottom],
+                   bottomRowHeight = bottomRow.getHeight() || this.vDomRowHeight;
+
+               if (bottomDiff >= bottomRowHeight) {
+
+                       var rowEl = bottomRow.getElement();
+
+                       if (rowEl.parentNode) {
+
+                               rowEl.parentNode.removeChild(rowEl);
+                       }
+
+                       this.vDomBottomPad += bottomRowHeight;
+
+                       if (this.vDomBottomPad < 0) {
+
+                               this.vDomBottomPad = 0;
+                       }
+
+                       table.style.paddingBottom = this.vDomBottomPad + "px";
+
+                       this.vDomScrollPosBottom -= bottomRowHeight;
+
+                       this.vDomBottom--;
+
+                       bottomDiff = -(this.scrollTop - this.vDomScrollPosBottom);
+
+                       this._removeBottomRow(bottomDiff);
+               }
+       };
+
+       RowManager.prototype._quickNormalizeRowHeight = function (rows) {
+
+               rows.forEach(function (row) {
+
+                       row.calcHeight();
+               });
+
+               rows.forEach(function (row) {
+
+                       row.setCellHeight();
+               });
+
+               rows.length = 0;
+       };
+
+       //normalize height of active rows
+
+       RowManager.prototype.normalizeHeight = function () {
+
+               this.activeRows.forEach(function (row) {
+
+                       row.normalizeHeight();
+               });
+       };
+
+       //adjust the height of the table holder to fit in the Tabulator element
+
+       RowManager.prototype.adjustTableSize = function () {
+
+               var initialHeight = this.element.clientHeight,
+                   modExists;
+
+               if (this.renderMode === "virtual") {
+
+                       var otherHeight = Math.floor(this.columnManager.getElement().offsetHeight + (this.table.footerManager && !this.table.footerManager.external ? this.table.footerManager.getElement().offsetHeight : 0));
+
+                       if (this.fixedHeight) {
+
+                               this.element.style.minHeight = "calc(100% - " + otherHeight + "px)";
+
+                               this.element.style.height = "calc(100% - " + otherHeight + "px)";
+
+                               this.element.style.maxHeight = "calc(100% - " + otherHeight + "px)";
+                       } else {
+
+                               this.element.style.height = "";
+
+                               this.element.style.height = Math.floor(this.table.element.clientHeight) - otherHeight + "px";
+
+                               this.element.scrollTop = this.scrollTop;
+                       }
+
+                       this.height = this.element.clientHeight;
+
+                       this.vDomWindowBuffer = this.table.options.virtualDomBuffer || this.height;
+
+                       //check if the table has changed size when dealing with variable height tables
+
+                       if (!this.fixedHeight && Math.floor(initialHeight) != Math.floor(this.element.clientHeight)) {
+
+                               modExists = this.table.modExists("resizeTable");
+
+                               if (modExists && !this.table.modules.resizeTable.autoResize || !modExists) {
+
+                                       this.redraw();
+                               }
+                       }
+               }
+       };
+
+       //renitialize all rows
+
+       RowManager.prototype.reinitialize = function () {
+
+               this.rows.forEach(function (row) {
+
+                       row.reinitialize(true);
+               });
+       };
+
+       //prevent table from being redrawn
+
+       RowManager.prototype.blockRedraw = function () {
+
+               this.redrawBlock = true;
+
+               this.redrawBlockRestoreConfig = false;
+       };
+
+       //restore table redrawing
+
+       RowManager.prototype.restoreRedraw = function () {
+
+               this.redrawBlock = false;
+
+               if (this.redrawBlockRestoreConfig) {
+
+                       this.refreshActiveData(this.redrawBlockRestoreConfig.stage, this.redrawBlockRestoreConfig.skipStage, this.redrawBlockRestoreConfig.renderInPosition);
+
+                       this.redrawBlockRestoreConfig = false;
+               } else {
+
+                       if (this.redrawBlockRederInPosition) {
+
+                               this.reRenderInPosition();
+                       }
+               }
+
+               this.redrawBlockRederInPosition = false;
+       };
+
+       //redraw table
+
+       RowManager.prototype.redraw = function (force) {
+
+               var pos = 0,
+                   left = this.scrollLeft;
+
+               this.adjustTableSize();
+
+               this.table.tableWidth = this.table.element.clientWidth;
+
+               if (!force) {
+
+                       if (this.renderMode == "classic") {
+
+                               if (this.table.options.groupBy) {
+
+                                       this.refreshActiveData("group", false, false);
+                               } else {
+
+                                       this._simpleRender();
+                               }
+                       } else {
+
+                               this.reRenderInPosition();
+
+                               this.scrollHorizontal(left);
+                       }
+
+                       if (!this.displayRowsCount) {
+
+                               if (this.table.options.placeholder) {
+
+                                       this.getElement().appendChild(this.table.options.placeholder);
+                               }
+                       }
+               } else {
+
+                       this.renderTable();
+               }
+       };
+
+       RowManager.prototype.resetScroll = function () {
+
+               this.element.scrollLeft = 0;
+
+               this.element.scrollTop = 0;
+
+               if (this.table.browser === "ie") {
+
+                       var event = document.createEvent("Event");
+
+                       event.initEvent("scroll", false, true);
+
+                       this.element.dispatchEvent(event);
+               } else {
+
+                       this.element.dispatchEvent(new Event('scroll'));
+               }
+       };
+
+       var VDomHoz = function VDomHoz(table) {
+
+               this.table = table;
+
+               this.element = this.table.rowManager.tableElement;
+
+               this.holderEl = this.table.rowManager.element;
+
+               this.leftCol = 0;
+
+               this.rightCol = 0;
+
+               this.scrollLeft = 0;
+
+               this.vDomScrollPosLeft = 0;
+
+               this.vDomScrollPosRight = 0;
+
+               this.vDomPadLeft = 0;
+
+               this.vDomPadRight = 0;
+
+               this.fitDataColAvg = 0;
+
+               this.window = 200; //pixel margin to make column visible before it is shown on screen
+
+
+               this.initialized = false;
+
+               this.columns = [];
+
+               if (this.compatabilityCheck()) {
+
+                       this.initialize();
+               }
+       };
+
+       VDomHoz.prototype.compatabilityCheck = function () {
+
+               var options = this.table.options,
+                   frozen = false,
+                   ok = true;
+
+               if (options.layout == "fitDataTable") {
+
+                       console.warn("Horizontal Vitrual DOM is not compatible with fitDataTable layout mode");
+
+                       ok = false;
+               }
+
+               if (options.responsiveLayout) {
+
+                       console.warn("Horizontal Vitrual DOM is not compatible with responsive columns");
+
+                       ok = false;
+               }
+
+               if (this.table.rtl) {
+
+                       console.warn("Horizontal Vitrual DOM is not currently compatible with RTL text direction");
+
+                       ok = false;
+               }
+
+               // if(options.rowFormatter){
+
+               //      console.warn("Horizontal Vitrual DOM is not compatible with row formatters");
+
+               //      ok = false;
+
+               // }
+
+
+               if (options.columns) {
+
+                       frozen = options.columns.find(function (col) {
+
+                               return col.frozen;
+                       });
+
+                       if (frozen) {
+
+                               console.warn("Horizontal Vitrual DOM is not compatible with frozen columns");
+
+                               ok = false;
+                       }
+               }
+
+               if (!ok) {
+
+                       options.virtualDomHoz = false;
+               }
+
+               return ok;
+       };
+
+       VDomHoz.prototype.initialize = function () {
+               var _this17 = this;
+
+               this.holderEl.addEventListener("scroll", function () {
+
+                       var left = _this17.holderEl.scrollLeft;
+
+                       if (_this17.scrollLeft != left) {
+
+                               _this17.scrollLeft = left;
+
+                               _this17.scroll(left - (_this17.vDomScrollPosLeft + _this17.window));
+                       }
+               });
+       };
+
+       VDomHoz.prototype.deinitialize = function () {
+
+               this.initialized = false;
+       };
+
+       VDomHoz.prototype.clear = function () {
+
+               this.columns = [];
+
+               this.leftCol = -1;
+
+               this.rightCol = 0;
+
+               this.vDomScrollPosLeft = 0;
+
+               this.vDomScrollPosRight = 0;
+
+               this.vDomPadLeft = 0;
+
+               this.vDomPadRight = 0;
+       };
+
+       VDomHoz.prototype.dataChange = function () {
+
+               var change = false,
+                   collsWidth = 0,
+                   colEnd = 0,
+                   group,
+                   row,
+                   rowEl;
+
+               if (this.table.options.layout === "fitData") {
+
+                       this.table.columnManager.columnsByIndex.forEach(function (column) {
+
+                               if (!column.definition.width && column.visible) {
+
+                                       change = true;
+                               }
+                       });
+
+                       if (change) {
+
+                               if (change && this.table.rowManager.getDisplayRows().length) {
+
+                                       // this.table.vdomHoz.deinitialize();
+
+
+                                       this.vDomScrollPosRight = this.scrollLeft + this.holderEl.clientWidth + this.window;
+
+                                       if (this.table.options.groupBy) {
+
+                                               group = this.table.modules.groupRows.getGroups(false)[0];
+
+                                               row = group.getRows(false)[0];
+                                       } else {
+
+                                               row = this.table.rowManager.getDisplayRows()[0];
+                                       }
+
+                                       if (row) {
+
+                                               rowEl = row.getElement();
+
+                                               row.generateCells();
+
+                                               this.element.appendChild(rowEl);
+
+                                               for (var colEnd = 0; colEnd < row.cells.length; colEnd++) {
+
+                                                       var cell = row.cells[colEnd];
+
+                                                       rowEl.appendChild(cell.getElement());
+
+                                                       cell.column.reinitializeWidth();
+
+                                                       collsWidth += cell.column.getWidth();
+
+                                                       if (collsWidth > this.vDomScrollPosRight) {
+
+                                                               break;
+                                                       }
+                                               }
+
+                                               rowEl.parentNode.removeChild(rowEl);
+
+                                               this.fitDataColAvg = Math.floor(collsWidth / (colEnd + 1));
+
+                                               for (colEnd; colEnd < this.table.columnManager.columnsByIndex.length; colEnd++) {
+
+                                                       this.table.columnManager.columnsByIndex[colEnd].setWidth(this.fitDataColAvg);
+                                               }
+
+                                               this.reinitialize(false, true);
+                                       }
+                               }
+                       }
+               } else {
+
+                       if (this.table.options.layout === "fitColumns") {
+
+                               this.table.modules.layout.layout();
+
+                               this.table.vdomHoz.reinitialize(false, true);
+                       }
+               }
+       };
+
+       VDomHoz.prototype.fitDataLayoutOverride = function () {
+
+               for (var _i5 = this.leftCol; _i5 <= this.rightCol; _i5++) {
+
+                       this.columns[_i5].reinitializeWidth();
+               }
+       };
+
+       VDomHoz.prototype.reinitialize = function (update, blockRedraw) {
+               var _this18 = this;
+
+               var old = {
+
+                       cols: this.columns,
+
+                       leftCol: this.leftCol,
+
+                       rightCol: this.rightCol
+
+               };
+
+               if (update && !this.initialized) {
+
+                       return;
+               }
+
+               this.clear();
+
+               this.scrollLeft = this.holderEl.scrollLeft;
+
+               this.vDomScrollPosLeft = this.scrollLeft - this.window;
+
+               this.vDomScrollPosRight = this.scrollLeft + this.holderEl.clientWidth + this.window;
+
+               var colPos = 0;
+
+               this.table.columnManager.columnsByIndex.forEach(function (column) {
+
+                       var config = {};
+
+                       if (column.visible) {
+
+                               var width = column.getWidth();
+
+                               config.leftPos = colPos;
+
+                               config.rightPos = colPos + width;
+
+                               if (colPos + width > _this18.vDomScrollPosLeft && colPos < _this18.vDomScrollPosRight) {
+
+                                       //column is visible
+
+
+                                       if (_this18.leftCol == -1) {
+
+                                               _this18.leftCol = _this18.columns.length;
+
+                                               _this18.vDomPadLeft = colPos;
+                                       }
+
+                                       _this18.rightCol = _this18.columns.length;
+                               } else {
+
+                                       // column is hidden
+
+                                       if (_this18.leftCol !== -1) {
+
+                                               _this18.vDomPadRight += width;
+                                       }
+                               }
+
+                               _this18.columns.push(column);
+
+                               column.modules.vdomHoz = config;
+
+                               colPos += width;
+                       }
+               });
+
+               this.element.style.paddingLeft = this.vDomPadLeft + "px";
+
+               this.element.style.paddingRight = this.vDomPadRight + "px";
+
+               this.initialized = true;
+
+               if (!blockRedraw) {
+
+                       if (!update || this.reinitChanged(old)) {
+
+                               this.renitializeRows();
+                       }
+               }
+
+               this.holderEl.scrollLeft = this.scrollLeft;
+       };
+
+       VDomHoz.prototype.reinitChanged = function (old) {
+               var _this19 = this;
+
+               var match = true;
+
+               if (old.cols.length !== this.columns.length || old.leftCol !== this.leftCol || old.rightCol !== this.rightCol) {
+
+                       return true;
+               }
+
+               old.cols.forEach(function (col, i) {
+
+                       if (col !== _this19.columns[i]) {
+
+                               match = false;
+                       }
+               });
+
+               return !match;
+       };
+
+       VDomHoz.prototype.renitializeRows = function () {
+               var _this20 = this;
+
+               var rows = this.table.rowManager.getVisibleRows();
+
+               rows.forEach(function (row) {
+
+                       _this20.reinitializeRow(row, true);
+               });
+       };
+
+       VDomHoz.prototype.scroll = function (diff) {
+
+               this.vDomScrollPosLeft += diff;
+
+               this.vDomScrollPosRight += diff;
+
+               if (diff > this.holderEl.clientWidth * .8) {
+
+                       this.reinitialize();
+               } else {
+
+                       if (diff > 0) {
+
+                               //scroll right
+
+                               this.addColRight();
+
+                               this.removeColLeft();
+                       } else {
+
+                               //scroll left
+
+                               this.addColLeft();
+
+                               this.removeColRight();
+                       }
+               }
+       };
+
+       VDomHoz.prototype.colPositionAdjust = function (start, end, diff) {
+
+               for (var _i6 = start; _i6 < end; _i6++) {
+
+                       var column = this.columns[_i6];
+
+                       column.modules.vdomHoz.leftPos -= diff;
+
+                       column.modules.vdomHoz.rightPos -= diff;
+               }
+       };
+
+       VDomHoz.prototype.addColRight = function () {
+
+               var column = this.columns[this.rightCol + 1],
+                   rows,
+                   oldWidth,
+                   widthDiff;
+
+               if (column && column.modules.vdomHoz.leftPos <= this.vDomScrollPosRight) {
+
+                       rows = this.table.rowManager.getVisibleRows();
+
+                       rows.forEach(function (row) {
+
+                               if (row.type !== "group") {
+
+                                       var cell = row.getCell(column);
+
+                                       row.getElement().appendChild(cell.getElement());
+
+                                       cell.cellRendered();
+                               }
+                       });
+
+                       if (this.fitDataColAvg) {
+
+                               oldWidth = column.getWidth();
+
+                               if (oldWidth === this.fitDataColAvg) {
+
+                                       column.reinitializeWidth();
+
+                                       widthDiff = oldWidth - column.getWidth();
+
+                                       if (widthDiff) {
+
+                                               column.modules.vdomHoz.rightPos -= widthDiff;
+
+                                               this.colPositionAdjust(this.rightCol + 1, this.columns.length, widthDiff);
+                                       }
+                               }
+                       }
+
+                       this.rightCol++;
+
+                       if (this.rightCol >= this.columns.length - 1) {
+
+                               this.vDomPadRight = 0;
+                       } else {
+
+                               this.vDomPadRight -= column.getWidth();
+                       }
+
+                       this.element.style.paddingRight = this.vDomPadRight + "px";
+
+                       this.addColRight();
+               }
+       };
+
+       VDomHoz.prototype.addColLeft = function () {
+
+               var column = this.columns[this.leftCol - 1],
+                   rows;
+
+               if (column && column.modules.vdomHoz.rightPos >= this.vDomScrollPosLeft) {
+
+                       var rows = this.table.rowManager.getVisibleRows();
+
+                       rows.forEach(function (row) {
+
+                               if (row.type !== "group") {
+
+                                       var cell = row.getCell(column);
+
+                                       row.getElement().prepend(cell.getElement());
+
+                                       cell.cellRendered();
+                               }
+                       });
+
+                       if (!this.leftCol) {
+
+                               this.vDomPadLeft = 0;
+                       } else {
+
+                               this.vDomPadLeft -= column.getWidth();
+                       }
+
+                       this.element.style.paddingLeft = this.vDomPadLeft + "px";
+
+                       this.leftCol--;
+
+                       this.addColLeft();
+               }
+       };
+
+       VDomHoz.prototype.removeColRight = function (column) {
+
+               var column = this.columns[this.rightCol],
+                   rows;
+
+               if (column && column.modules.vdomHoz.leftPos > this.vDomScrollPosRight) {
+
+                       rows = this.table.rowManager.getVisibleRows();
+
+                       column.modules.vdomHoz.visible = false;
+
+                       rows.forEach(function (row) {
+
+                               if (row.type !== "group") {
+
+                                       var cell = row.getCell(column);
+
+                                       row.getElement().removeChild(cell.getElement());
+                               }
+                       });
+
+                       this.vDomPadRight += column.getWidth();
+
+                       this.element.style.paddingRight = this.vDomPadRight + "px";
+
+                       this.rightCol--;
+
+                       this.removeColRight();
+               }
+       };
+
+       VDomHoz.prototype.removeColLeft = function () {
+
+               var column = this.columns[this.leftCol],
+                   rows;
+
+               if (column && column.modules.vdomHoz.rightPos < this.vDomScrollPosLeft) {
+
+                       rows = this.table.rowManager.getVisibleRows();
+
+                       rows.forEach(function (row) {
+
+                               if (row.type !== "group") {
+
+                                       var cell = row.getCell(column);
+
+                                       row.getElement().removeChild(cell.getElement());
+                               }
+                       });
+
+                       this.vDomPadLeft += column.getWidth();
+
+                       this.element.style.paddingLeft = this.vDomPadLeft + "px";
+
+                       this.leftCol++;
+
+                       this.removeColLeft();
+               }
+       };
+
+       VDomHoz.prototype.initializeRow = function (row) {
+
+               if (row.type !== "group") {
+
+                       row.modules.vdomHoz = {
+
+                               leftCol: this.leftCol,
+
+                               rightCol: this.rightCol
+
+                       };
+
+                       for (var _i7 = this.leftCol; _i7 <= this.rightCol; _i7++) {
+
+                               var column = this.columns[_i7];
+
+                               if (column.visible) {
+
+                                       var cell = row.getCell(column);
+
+                                       row.element.appendChild(cell.getElement());
+
+                                       cell.cellRendered();
+                               }
+                       }
+               }
+       };
+
+       VDomHoz.prototype.reinitializeRow = function (row, force) {
+
+               if (row.type !== "group") {
+
+                       if (force || !row.modules.vdomHoz || row.modules.vdomHoz.leftCol !== this.leftCol || row.modules.vdomHoz.rightCol !== this.rightCol) {
+
+                               while (row.element.firstChild) {
+                                       row.element.removeChild(row.element.firstChild);
+                               }this.initializeRow(row);
+                       }
+               }
+       };
+
+       //public row object
+
+       var RowComponent = function RowComponent(row) {
+
+               this._row = row;
+       };
+
+       RowComponent.prototype.getData = function (transform) {
+
+               return this._row.getData(transform);
+       };
+
+       RowComponent.prototype.getElement = function () {
+
+               return this._row.getElement();
+       };
+
+       RowComponent.prototype.getCells = function () {
+
+               var cells = [];
+
+               this._row.getCells().forEach(function (cell) {
+
+                       cells.push(cell.getComponent());
+               });
+
+               return cells;
+       };
+
+       RowComponent.prototype.getCell = function (column) {
+
+               var cell = this._row.getCell(column);
+
+               return cell ? cell.getComponent() : false;
+       };
+
+       RowComponent.prototype.getIndex = function () {
+
+               return this._row.getData("data")[this._row.table.options.index];
+       };
+
+       RowComponent.prototype.getPosition = function (active) {
+
+               return this._row.table.rowManager.getRowPosition(this._row, active);
+       };
+
+       RowComponent.prototype.delete = function () {
+
+               return this._row.delete();
+       };
+
+       RowComponent.prototype.scrollTo = function () {
+
+               return this._row.table.rowManager.scrollToRow(this._row);
+       };
+
+       RowComponent.prototype.pageTo = function () {
+
+               if (this._row.table.modExists("page", true)) {
+
+                       return this._row.table.modules.page.setPageToRow(this._row);
+               }
+       };
+
+       RowComponent.prototype.move = function (to, after) {
+
+               this._row.moveToRow(to, after);
+       };
+
+       RowComponent.prototype.update = function (data) {
+
+               return this._row.updateData(data);
+       };
+
+       RowComponent.prototype.normalizeHeight = function () {
+
+               this._row.normalizeHeight(true);
+       };
+
+       RowComponent.prototype.select = function () {
+
+               this._row.table.modules.selectRow.selectRows(this._row);
+       };
+
+       RowComponent.prototype.deselect = function () {
+
+               this._row.table.modules.selectRow.deselectRows(this._row);
+       };
+
+       RowComponent.prototype.toggleSelect = function () {
+
+               this._row.table.modules.selectRow.toggleRow(this._row);
+       };
+
+       RowComponent.prototype.isSelected = function () {
+
+               return this._row.table.modules.selectRow.isRowSelected(this._row);
+       };
+
+       RowComponent.prototype._getSelf = function () {
+
+               return this._row;
+       };
+
+       RowComponent.prototype.validate = function () {
+
+               return this._row.validate();
+       };
+
+       RowComponent.prototype.freeze = function () {
+
+               if (this._row.table.modExists("frozenRows", true)) {
+
+                       this._row.table.modules.frozenRows.freezeRow(this._row);
+               }
+       };
+
+       RowComponent.prototype.unfreeze = function () {
+
+               if (this._row.table.modExists("frozenRows", true)) {
+
+                       this._row.table.modules.frozenRows.unfreezeRow(this._row);
+               }
+       };
+
+       RowComponent.prototype.isFrozen = function () {
+
+               if (this._row.table.modExists("frozenRows", true)) {
+
+                       var index = this._row.table.modules.frozenRows.rows.indexOf(this._row);
+
+                       return index > -1;
+               }
+
+               return false;
+       };
+
+       RowComponent.prototype.treeCollapse = function () {
+
+               if (this._row.table.modExists("dataTree", true)) {
+
+                       this._row.table.modules.dataTree.collapseRow(this._row);
+               }
+       };
+
+       RowComponent.prototype.treeExpand = function () {
+
+               if (this._row.table.modExists("dataTree", true)) {
+
+                       this._row.table.modules.dataTree.expandRow(this._row);
+               }
+       };
+
+       RowComponent.prototype.treeToggle = function () {
+
+               if (this._row.table.modExists("dataTree", true)) {
+
+                       this._row.table.modules.dataTree.toggleRow(this._row);
+               }
+       };
+
+       RowComponent.prototype.getTreeParent = function () {
+
+               if (this._row.table.modExists("dataTree", true)) {
+
+                       return this._row.table.modules.dataTree.getTreeParent(this._row);
+               }
+
+               return false;
+       };
+
+       RowComponent.prototype.getTreeChildren = function () {
+
+               if (this._row.table.modExists("dataTree", true)) {
+
+                       return this._row.table.modules.dataTree.getTreeChildren(this._row, true);
+               }
+
+               return false;
+       };
+
+       RowComponent.prototype.addTreeChild = function (data, pos, index) {
+
+               if (this._row.table.modExists("dataTree", true)) {
+
+                       return this._row.table.modules.dataTree.addTreeChildRow(this._row, data, pos, index);
+               }
+
+               return false;
+       };
+
+       RowComponent.prototype.reformat = function () {
+
+               return this._row.reinitialize();
+       };
+
+       RowComponent.prototype.getGroup = function () {
+
+               return this._row.getGroup().getComponent();
+       };
+
+       RowComponent.prototype.getTable = function () {
+
+               return this._row.table;
+       };
+
+       RowComponent.prototype.getNextRow = function () {
+
+               var row = this._row.nextRow();
+
+               return row ? row.getComponent() : row;
+       };
+
+       RowComponent.prototype.getPrevRow = function () {
+
+               var row = this._row.prevRow();
+
+               return row ? row.getComponent() : row;
+       };
+
+       var Row = function Row(data, parent) {
+               var type = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : "row";
+
+
+               this.table = parent.table;
+
+               this.parent = parent;
+
+               this.data = {};
+
+               this.type = type; //type of element
+
+               this.element = this.createElement();
+
+               this.modules = {}; //hold module variables;
+
+               this.cells = [];
+
+               this.height = 0; //hold element height
+
+               this.heightStyled = ""; //hold element height prestyled to improve render efficiency
+
+               this.manualHeight = false; //user has manually set row height
+
+               this.outerHeight = 0; //holde lements outer height
+
+               this.initialized = false; //element has been rendered
+
+               this.heightInitialized = false; //element has resized cells to fit
+
+
+               this.component = null;
+
+               this.setData(data);
+
+               this.generateElement();
+       };
+
+       Row.prototype.createElement = function () {
+
+               var el = document.createElement("div");
+
+               el.classList.add("tabulator-row");
+
+               el.setAttribute("role", "row");
+
+               return el;
+       };
+
+       Row.prototype.getElement = function () {
+
+               return this.element;
+       };
+
+       Row.prototype.detachElement = function () {
+
+               if (this.element && this.element.parentNode) {
+
+                       this.element.parentNode.removeChild(this.element);
+               }
+       };
+
+       Row.prototype.generateElement = function () {
+
+               var self = this,
+                   dblTap,
+                   tapHold,
+                   tap;
+
+               //set row selection characteristics
+
+               if (self.table.options.selectable !== false && self.table.modExists("selectRow")) {
+
+                       self.table.modules.selectRow.initializeRow(this);
+               }
+
+               //setup movable rows
+
+               if (self.table.options.movableRows !== false && self.table.modExists("moveRow")) {
+
+                       self.table.modules.moveRow.initializeRow(this);
+               }
+
+               //setup data tree
+
+               if (self.table.options.dataTree !== false && self.table.modExists("dataTree")) {
+
+                       self.table.modules.dataTree.initializeRow(this);
+               }
+
+               //setup column colapse container
+
+               if (self.table.options.responsiveLayout === "collapse" && self.table.modExists("responsiveLayout")) {
+
+                       self.table.modules.responsiveLayout.initializeRow(this);
+               }
+
+               //set column menu
+
+               if ((self.table.options.rowContextMenu || self.table.options.rowClickMenu) && this.table.modExists("menu")) {
+
+                       self.table.modules.menu.initializeRow(this);
+               }
+
+               //handle row click events
+
+               if (self.table.options.rowClick) {
+
+                       self.element.addEventListener("click", function (e) {
+
+                               self.table.options.rowClick(e, self.getComponent());
+                       });
+               }
+
+               if (self.table.options.rowDblClick) {
+
+                       self.element.addEventListener("dblclick", function (e) {
+
+                               self.table.options.rowDblClick(e, self.getComponent());
+                       });
+               }
+
+               if (self.table.options.rowContext) {
+
+                       self.element.addEventListener("contextmenu", function (e) {
+
+                               self.table.options.rowContext(e, self.getComponent());
+                       });
+               }
+
+               //handle mouse events
+
+               if (self.table.options.rowMouseEnter) {
+
+                       self.element.addEventListener("mouseenter", function (e) {
+
+                               self.table.options.rowMouseEnter(e, self.getComponent());
+                       });
+               }
+
+               if (self.table.options.rowMouseLeave) {
+
+                       self.element.addEventListener("mouseleave", function (e) {
+
+                               self.table.options.rowMouseLeave(e, self.getComponent());
+                       });
+               }
+
+               if (self.table.options.rowMouseOver) {
+
+                       self.element.addEventListener("mouseover", function (e) {
+
+                               self.table.options.rowMouseOver(e, self.getComponent());
+                       });
+               }
+
+               if (self.table.options.rowMouseOut) {
+
+                       self.element.addEventListener("mouseout", function (e) {
+
+                               self.table.options.rowMouseOut(e, self.getComponent());
+                       });
+               }
+
+               if (self.table.options.rowMouseMove) {
+
+                       self.element.addEventListener("mousemove", function (e) {
+
+                               self.table.options.rowMouseMove(e, self.getComponent());
+                       });
+               }
+
+               if (self.table.options.rowTap) {
+
+                       tap = false;
+
+                       self.element.addEventListener("touchstart", function (e) {
+
+                               tap = true;
+                       }, { passive: true });
+
+                       self.element.addEventListener("touchend", function (e) {
+
+                               if (tap) {
+
+                                       self.table.options.rowTap(e, self.getComponent());
+                               }
+
+                               tap = false;
+                       });
+               }
+
+               if (self.table.options.rowDblTap) {
+
+                       dblTap = null;
+
+                       self.element.addEventListener("touchend", function (e) {
+
+                               if (dblTap) {
+
+                                       clearTimeout(dblTap);
+
+                                       dblTap = null;
+
+                                       self.table.options.rowDblTap(e, self.getComponent());
+                               } else {
+
+                                       dblTap = setTimeout(function () {
+
+                                               clearTimeout(dblTap);
+
+                                               dblTap = null;
+                                       }, 300);
+                               }
+                       });
+               }
+
+               if (self.table.options.rowTapHold) {
+
+                       tapHold = null;
+
+                       self.element.addEventListener("touchstart", function (e) {
+
+                               clearTimeout(tapHold);
+
+                               tapHold = setTimeout(function () {
+
+                                       clearTimeout(tapHold);
+
+                                       tapHold = null;
+
+                                       tap = false;
+
+                                       self.table.options.rowTapHold(e, self.getComponent());
+                               }, 1000);
+                       }, { passive: true });
+
+                       self.element.addEventListener("touchend", function (e) {
+
+                               clearTimeout(tapHold);
+
+                               tapHold = null;
+                       });
+               }
+       };
+
+       Row.prototype.generateCells = function () {
+
+               this.cells = this.table.columnManager.generateCells(this);
+       };
+
+       //functions to setup on first render
+
+       Row.prototype.initialize = function (force) {
+               var _this21 = this;
+
+               if (!this.initialized || force) {
+
+                       this.deleteCells();
+
+                       while (this.element.firstChild) {
+                               this.element.removeChild(this.element.firstChild);
+                       } //handle frozen cells
+
+                       if (this.table.modExists("frozenColumns")) {
+
+                               this.table.modules.frozenColumns.layoutRow(this);
+                       }
+
+                       this.generateCells();
+
+                       if (this.table.options.virtualDomHoz && this.table.vdomHoz.initialized) {
+
+                               this.table.vdomHoz.initializeRow(this);
+                       } else {
+
+                               this.cells.forEach(function (cell) {
+
+                                       _this21.element.appendChild(cell.getElement());
+
+                                       cell.cellRendered();
+                               });
+                       }
+
+                       if (force) {
+
+                               this.normalizeHeight();
+                       }
+
+                       //setup movable rows
+
+                       if (this.table.options.dataTree && this.table.modExists("dataTree")) {
+
+                               this.table.modules.dataTree.layoutRow(this);
+                       }
+
+                       //setup column colapse container
+
+                       if (this.table.options.responsiveLayout === "collapse" && this.table.modExists("responsiveLayout")) {
+
+                               this.table.modules.responsiveLayout.layoutRow(this);
+                       }
+
+                       if (this.table.options.rowFormatter) {
+
+                               this.table.options.rowFormatter(this.getComponent());
+                       }
+
+                       //set resizable handles
+
+                       if (this.table.options.resizableRows && this.table.modExists("resizeRows")) {
+
+                               this.table.modules.resizeRows.initializeRow(this);
+                       }
+
+                       this.initialized = true;
+               } else {
+
+                       if (this.table.options.virtualDomHoz) {
+
+                               this.table.vdomHoz.reinitializeRow(this);
+                       }
+               }
+       };
+
+       Row.prototype.reinitializeHeight = function () {
+
+               this.heightInitialized = false;
+
+               if (this.element.offsetParent !== null) {
+
+                       this.normalizeHeight(true);
+               }
+       };
+
+       Row.prototype.reinitialize = function (children) {
+
+               this.initialized = false;
+
+               this.heightInitialized = false;
+
+               if (!this.manualHeight) {
+
+                       this.height = 0;
+
+                       this.heightStyled = "";
+               }
+
+               if (this.element.offsetParent !== null) {
+
+                       this.initialize(true);
+               }
+
+               if (this.table.options.dataTree && this.table.modExists("dataTree", true)) {
+
+                       this.table.modules.dataTree.getTreeChildren(this, false, true).forEach(function (child) {
+
+                               child.reinitialize(true);
+                       });
+               }
+       };
+
+       //get heights when doing bulk row style calcs in virtual DOM
+
+       Row.prototype.calcHeight = function (force) {
+
+               var maxHeight = 0,
+                   minHeight = this.table.options.resizableRows ? this.element.clientHeight : 0;
+
+               this.cells.forEach(function (cell) {
+
+                       var height = cell.getHeight();
+
+                       if (height > maxHeight) {
+
+                               maxHeight = height;
+                       }
+               });
+
+               if (force) {
+
+                       this.height = Math.max(maxHeight, minHeight);
+               } else {
+
+                       this.height = this.manualHeight ? this.height : Math.max(maxHeight, minHeight);
+               }
+
+               this.heightStyled = this.height ? this.height + "px" : "";
+
+               this.outerHeight = this.element.offsetHeight;
+       };
+
+       //set of cells
+
+       Row.prototype.setCellHeight = function () {
+
+               this.cells.forEach(function (cell) {
+
+                       cell.setHeight();
+               });
+
+               this.heightInitialized = true;
+       };
+
+       Row.prototype.clearCellHeight = function () {
+
+               this.cells.forEach(function (cell) {
+
+                       cell.clearHeight();
+               });
+       };
+
+       //normalize the height of elements in the row
+
+       Row.prototype.normalizeHeight = function (force) {
+
+               if (force) {
+
+                       this.clearCellHeight();
+               }
+
+               this.calcHeight(force);
+
+               this.setCellHeight();
+       };
+
+       // Row.prototype.setHeight = function(height){
+
+       //      this.height = height;
+
+
+       //      this.setCellHeight();
+
+       // };
+
+
+       //set height of rows
+
+       Row.prototype.setHeight = function (height, force) {
+
+               if (this.height != height || force) {
+
+                       this.manualHeight = true;
+
+                       this.height = height;
+
+                       this.heightStyled = height ? height + "px" : "";
+
+                       this.setCellHeight();
+
+                       // this.outerHeight = this.element.outerHeight();
+
+                       this.outerHeight = this.element.offsetHeight;
+               }
+       };
+
+       //return rows outer height
+
+       Row.prototype.getHeight = function () {
+
+               return this.outerHeight;
+       };
+
+       //return rows outer Width
+
+       Row.prototype.getWidth = function () {
+
+               return this.element.offsetWidth;
+       };
+
+       //////////////// Cell Management /////////////////
+
+
+       Row.prototype.deleteCell = function (cell) {
+
+               var index = this.cells.indexOf(cell);
+
+               if (index > -1) {
+
+                       this.cells.splice(index, 1);
+               }
+       };
+
+       //////////////// Data Management /////////////////
+
+
+       Row.prototype.setData = function (data) {
+
+               if (this.table.modExists("mutator")) {
+
+                       data = this.table.modules.mutator.transformRow(data, "data");
+               }
+
+               this.data = data;
+
+               if (this.table.options.reactiveData && this.table.modExists("reactiveData", true)) {
+
+                       this.table.modules.reactiveData.watchRow(this);
+               }
+       };
+
+       //update the rows data
+
+       Row.prototype.updateData = function (updatedData) {
+               var _this22 = this;
+
+               var visible = Tabulator.prototype.helpers.elVisible(this.element),
+                   tempData = {},
+                   newRowData;
+
+               return new Promise(function (resolve, reject) {
+
+                       if (typeof updatedData === "string") {
+
+                               updatedData = JSON.parse(updatedData);
+                       }
+
+                       if (_this22.table.options.reactiveData && _this22.table.modExists("reactiveData", true)) {
+
+                               _this22.table.modules.reactiveData.block();
+                       }
+
+                       //mutate incomming data if needed
+
+                       if (_this22.table.modExists("mutator")) {
+
+                               tempData = Object.assign(tempData, _this22.data);
+
+                               tempData = Object.assign(tempData, updatedData);
+
+                               newRowData = _this22.table.modules.mutator.transformRow(tempData, "data", updatedData);
+                       } else {
+
+                               newRowData = updatedData;
+                       }
+
+                       //set data
+
+                       for (var attrname in newRowData) {
+
+                               _this22.data[attrname] = newRowData[attrname];
+                       }
+
+                       if (_this22.table.options.reactiveData && _this22.table.modExists("reactiveData", true)) {
+
+                               _this22.table.modules.reactiveData.unblock();
+                       }
+
+                       //update affected cells only
+
+                       for (var attrname in updatedData) {
+
+                               var columns = _this22.table.columnManager.getColumnsByFieldRoot(attrname);
+
+                               columns.forEach(function (column) {
+
+                                       var cell = _this22.getCell(column.getField());
+
+                                       if (cell) {
+
+                                               var value = column.getFieldValue(newRowData);
+
+                                               if (cell.getValue() != value) {
+
+                                                       cell.setValueProcessData(value);
+
+                                                       if (visible) {
+
+                                                               cell.cellRendered();
+                                                       }
+                                               }
+                                       }
+                               });
+                       }
+
+                       if (_this22.table.options.groupUpdateOnCellEdit && _this22.table.options.groupBy && _this22.table.modExists("groupRows")) {
+
+                               _this22.table.modules.groupRows.reassignRowToGroup(_this22.row);
+                       }
+
+                       //Partial reinitialization if visible
+
+                       if (visible) {
+
+                               _this22.normalizeHeight(true);
+
+                               if (_this22.table.options.rowFormatter) {
+
+                                       _this22.table.options.rowFormatter(_this22.getComponent());
+                               }
+                       } else {
+
+                               _this22.initialized = false;
+
+                               _this22.height = 0;
+
+                               _this22.heightStyled = "";
+                       }
+
+                       if (_this22.table.options.dataTree !== false && _this22.table.modExists("dataTree") && _this22.table.modules.dataTree.redrawNeeded(updatedData)) {
+
+                               _this22.table.modules.dataTree.initializeRow(_this22);
+
+                               if (visible) {
+
+                                       _this22.table.modules.dataTree.layoutRow(_this22);
+
+                                       _this22.table.rowManager.refreshActiveData("tree", false, true);
+                               }
+                       }
+
+                       //this.reinitialize();
+
+
+                       _this22.table.options.rowUpdated.call(_this22.table, _this22.getComponent());
+
+                       if (_this22.table.options.dataChanged) {
+
+                               _this22.table.options.dataChanged.call(_this22.table, _this22.table.rowManager.getData());
+                       }
+
+                       resolve();
+               });
+       };
+
+       Row.prototype.getData = function (transform) {
+
+               if (transform) {
+
+                       if (this.table.modExists("accessor")) {
+
+                               return this.table.modules.accessor.transformRow(this, transform);
+                       }
+               }
+
+               return this.data;
+       };
+
+       Row.prototype.getCell = function (column) {
+
+               var match = false;
+
+               column = this.table.columnManager.findColumn(column);
+
+               match = this.cells.find(function (cell) {
+
+                       return cell.column === column;
+               });
+
+               return match;
+       };
+
+       Row.prototype.getCellIndex = function (findCell) {
+
+               return this.cells.findIndex(function (cell) {
+
+                       return cell === findCell;
+               });
+       };
+
+       Row.prototype.findNextEditableCell = function (index) {
+
+               var nextCell = false;
+
+               if (index < this.cells.length - 1) {
+
+                       for (var i = index + 1; i < this.cells.length; i++) {
+
+                               var cell = this.cells[i];
+
+                               if (cell.column.modules.edit && Tabulator.prototype.helpers.elVisible(cell.getElement())) {
+
+                                       var allowEdit = true;
+
+                                       if (typeof cell.column.modules.edit.check == "function") {
+
+                                               allowEdit = cell.column.modules.edit.check(cell.getComponent());
+                                       }
+
+                                       if (allowEdit) {
+
+                                               nextCell = cell;
+
+                                               break;
+                                       }
+                               }
+                       }
+               }
+
+               return nextCell;
+       };
+
+       Row.prototype.findPrevEditableCell = function (index) {
+
+               var prevCell = false;
+
+               if (index > 0) {
+
+                       for (var i = index - 1; i >= 0; i--) {
+
+                               var cell = this.cells[i],
+                                   allowEdit = true;
+
+                               if (cell.column.modules.edit && Tabulator.prototype.helpers.elVisible(cell.getElement())) {
+
+                                       if (typeof cell.column.modules.edit.check == "function") {
+
+                                               allowEdit = cell.column.modules.edit.check(cell.getComponent());
+                                       }
+
+                                       if (allowEdit) {
+
+                                               prevCell = cell;
+
+                                               break;
+                                       }
+                               }
+                       }
+               }
+
+               return prevCell;
+       };
+
+       Row.prototype.getCells = function () {
+
+               return this.cells;
+       };
+
+       Row.prototype.nextRow = function () {
+
+               var row = this.table.rowManager.nextDisplayRow(this, true);
+
+               return row || false;
+       };
+
+       Row.prototype.prevRow = function () {
+
+               var row = this.table.rowManager.prevDisplayRow(this, true);
+
+               return row || false;
+       };
+
+       Row.prototype.moveToRow = function (to, before) {
+
+               var toRow = this.table.rowManager.findRow(to);
+
+               if (toRow) {
+
+                       this.table.rowManager.moveRowActual(this, toRow, !before);
+
+                       this.table.rowManager.refreshActiveData("display", false, true);
+               } else {
+
+                       console.warn("Move Error - No matching row found:", to);
+               }
+       };
+
+       Row.prototype.validate = function () {
+
+               var invalid = [];
+
+               this.cells.forEach(function (cell) {
+
+                       if (!cell.validate()) {
+
+                               invalid.push(cell.getComponent());
+                       }
+               });
+
+               return invalid.length ? invalid : true;
+       };
+
+       ///////////////////// Actions  /////////////////////
+
+
+       Row.prototype.delete = function () {
+               var _this23 = this;
+
+               return new Promise(function (resolve, reject) {
+
+                       var index, rows;
+
+                       if (_this23.table.options.history && _this23.table.modExists("history")) {
+
+                               if (_this23.table.options.groupBy && _this23.table.modExists("groupRows")) {
+
+                                       rows = _this23.getGroup().rows;
+
+                                       index = rows.indexOf(_this23);
+
+                                       if (index) {
+
+                                               index = rows[index - 1];
+                                       }
+                               } else {
+
+                                       index = _this23.table.rowManager.getRowIndex(_this23);
+
+                                       if (index) {
+
+                                               index = _this23.table.rowManager.rows[index - 1];
+                                       }
+                               }
+
+                               _this23.table.modules.history.action("rowDelete", _this23, { data: _this23.getData(), pos: !index, index: index });
+                       }
+
+                       _this23.deleteActual();
+
+                       resolve();
+               });
+       };
+
+       Row.prototype.deleteActual = function (blockRedraw) {
+
+               var index = this.table.rowManager.getRowIndex(this);
+
+               this.detatchModules();
+
+               // if(this.table.options.dataTree && this.table.modExists("dataTree")){
+
+               //      this.table.modules.dataTree.collapseRow(this, true);
+
+               // }
+
+
+               //remove any reactive data watchers from row object
+
+               if (this.table.options.reactiveData && this.table.modExists("reactiveData", true)) {}
+
+               // this.table.modules.reactiveData.unwatchRow(this);
+
+               //remove from group
+
+               if (this.modules.group) {
+
+                       this.modules.group.removeRow(this);
+               }
+
+               this.table.rowManager.deleteRow(this, blockRedraw);
+
+               this.deleteCells();
+
+               this.initialized = false;
+
+               this.heightInitialized = false;
+
+               this.element = false;
+
+               if (this.table.options.dataTree && this.table.modExists("dataTree", true)) {
+
+                       this.table.modules.dataTree.rowDelete(this);
+               }
+
+               //recalc column calculations if present
+
+               if (this.table.modExists("columnCalcs")) {
+
+                       if (this.table.options.groupBy && this.table.modExists("groupRows")) {
+
+                               this.table.modules.columnCalcs.recalcRowGroup(this);
+                       } else {
+
+                               this.table.modules.columnCalcs.recalc(this.table.rowManager.activeRows);
+                       }
+               }
+       };
+
+       Row.prototype.detatchModules = function () {
+
+               //deselect row if it is selected
+
+               if (this.table.modExists("selectRow")) {
+
+                       this.table.modules.selectRow._deselectRow(this, true);
+               }
+
+               //cancel edit if row is currently being edited
+
+               if (this.table.modExists("edit")) {
+
+                       if (this.table.modules.edit.currentCell.row === this) {
+
+                               this.table.modules.edit.cancelEdit();
+                       }
+               }
+
+               if (this.table.modExists("frozenRows")) {
+
+                       this.table.modules.frozenRows.detachRow(this);
+               }
+       };
+
+       Row.prototype.deleteCells = function () {
+
+               var cellCount = this.cells.length;
+
+               for (var _i8 = 0; _i8 < cellCount; _i8++) {
+
+                       this.cells[0].delete();
+               }
+       };
+
+       Row.prototype.wipe = function () {
+
+               this.detatchModules();
+
+               this.deleteCells();
+
+               while (this.element.firstChild) {
+                       this.element.removeChild(this.element.firstChild);
+               }this.element = false;
+
+               this.modules = {};
+
+               if (this.element.parentNode) {
+
+                       this.element.parentNode.removeChild(this.element);
+               }
+       };
+
+       Row.prototype.getGroup = function () {
+
+               return this.modules.group || false;
+       };
+
+       //////////////// Object Generation /////////////////
+
+       Row.prototype.getComponent = function () {
+
+               if (!this.component) {
+
+                       this.component = new RowComponent(this);
+               }
+
+               return this.component;
+       };
+
+       //public row object
+
+       var CellComponent = function CellComponent(cell) {
+
+               this._cell = cell;
+       };
+
+       CellComponent.prototype.getValue = function () {
+
+               return this._cell.getValue();
+       };
+
+       CellComponent.prototype.getOldValue = function () {
+
+               return this._cell.getOldValue();
+       };
+
+       CellComponent.prototype.getInitialValue = function () {
+
+               return this._cell.initialValue;
+       };
+
+       CellComponent.prototype.getElement = function () {
+
+               return this._cell.getElement();
+       };
+
+       CellComponent.prototype.getRow = function () {
+
+               return this._cell.row.getComponent();
+       };
+
+       CellComponent.prototype.getData = function () {
+
+               return this._cell.row.getData();
+       };
+
+       CellComponent.prototype.getField = function () {
+
+               return this._cell.column.getField();
+       };
+
+       CellComponent.prototype.getColumn = function () {
+
+               return this._cell.column.getComponent();
+       };
+
+       CellComponent.prototype.setValue = function (value, mutate) {
+
+               if (typeof mutate == "undefined") {
+
+                       mutate = true;
+               }
+
+               this._cell.setValue(value, mutate);
+       };
+
+       CellComponent.prototype.restoreOldValue = function () {
+
+               this._cell.setValueActual(this._cell.getOldValue());
+       };
+
+       CellComponent.prototype.restoreInitialValue = function () {
+
+               this._cell.setValueActual(this._cell.initialValue);
+       };
+
+       CellComponent.prototype.edit = function (force) {
+
+               return this._cell.edit(force);
+       };
+
+       CellComponent.prototype.cancelEdit = function () {
+
+               this._cell.cancelEdit();
+       };
+
+       CellComponent.prototype.isEdited = function () {
+
+               return !!this._cell.modules.edit && this._cell.modules.edit.edited;
+       };
+
+       CellComponent.prototype.clearEdited = function () {
+
+               if (self.table.modExists("edit", true)) {
+
+                       this._cell.table.modules.edit.clearEdited(this._cell);
+               }
+       };
+
+       CellComponent.prototype.isValid = function () {
+
+               return this._cell.modules.validate ? !this._cell.modules.validate.invalid : true;
+       };
+
+       CellComponent.prototype.validate = function () {
+
+               return this._cell.validate();
+       };
+
+       CellComponent.prototype.clearValidation = function () {
+
+               if (this._cell.table.modExists("validate", true)) {
+
+                       this._cell.table.modules.validate.clearValidation(this._cell);
+               }
+       };
+
+       CellComponent.prototype.nav = function () {
+
+               return this._cell.nav();
+       };
+
+       CellComponent.prototype.checkHeight = function () {
+
+               this._cell.checkHeight();
+       };
+
+       CellComponent.prototype.getTable = function () {
+
+               return this._cell.table;
+       };
+
+       CellComponent.prototype._getSelf = function () {
+
+               return this._cell;
+       };
+
+       var Cell = function Cell(column, row) {
+
+               this.table = column.table;
+
+               this.column = column;
+
+               this.row = row;
+
+               this.element = null;
+
+               this.value = null;
+
+               this.initialValue;
+
+               this.oldValue = null;
+
+               this.modules = {};
+
+               this.height = null;
+
+               this.width = null;
+
+               this.minWidth = null;
+
+               this.component = null;
+
+               this.loaded = false; //track if the cell has been added to the DOM yet
+
+
+               this.build();
+       };
+
+       //////////////// Setup Functions /////////////////
+
+
+       //generate element
+
+       Cell.prototype.build = function () {
+
+               this.generateElement();
+
+               this.setWidth();
+
+               this._configureCell();
+
+               this.setValueActual(this.column.getFieldValue(this.row.data));
+
+               this.initialValue = this.value;
+       };
+
+       Cell.prototype.generateElement = function () {
+
+               this.element = document.createElement('div');
+
+               this.element.className = "tabulator-cell";
+
+               this.element.setAttribute("role", "gridcell");
+
+               this.element = this.element;
+       };
+
+       Cell.prototype._configureCell = function () {
+
+               var self = this,
+                   cellEvents = self.column.cellEvents,
+                   element = self.element,
+                   field = this.column.getField(),
+                   vertAligns = {
+
+                       top: "flex-start",
+
+                       bottom: "flex-end",
+
+                       middle: "center"
+
+               },
+                   hozAligns = {
+
+                       left: "flex-start",
+
+                       right: "flex-end",
+
+                       center: "center"
+
+               };
+
+               //set text alignment
+
+               element.style.textAlign = self.column.hozAlign;
+
+               if (self.column.vertAlign) {
+
+                       element.style.display = "inline-flex";
+
+                       element.style.alignItems = vertAligns[self.column.vertAlign] || "";
+
+                       if (self.column.hozAlign) {
+
+                               element.style.justifyContent = hozAligns[self.column.hozAlign] || "";
+                       }
+               }
+
+               if (field) {
+
+                       element.setAttribute("tabulator-field", field);
+               }
+
+               //add class to cell if needed
+
+               if (self.column.definition.cssClass) {
+
+                       var classNames = self.column.definition.cssClass.split(" ");
+
+                       classNames.forEach(function (className) {
+
+                               element.classList.add(className);
+                       });
+               }
+
+               //update tooltip on mouse enter
+
+               if (this.table.options.tooltipGenerationMode === "hover") {
+
+                       element.addEventListener("mouseenter", function (e) {
+
+                               self._generateTooltip();
+                       });
+               }
+
+               self._bindClickEvents(cellEvents);
+
+               self._bindTouchEvents(cellEvents);
+
+               self._bindMouseEvents(cellEvents);
+
+               if (self.column.modules.edit) {
+
+                       self.table.modules.edit.bindEditor(self);
+               }
+
+               if (self.column.definition.rowHandle && self.table.options.movableRows !== false && self.table.modExists("moveRow")) {
+
+                       self.table.modules.moveRow.initializeCell(self);
+               }
+
+               //hide cell if not visible
+
+               if (!self.column.visible) {
+
+                       self.hide();
+               }
+       };
+
+       Cell.prototype._bindClickEvents = function (cellEvents) {
+
+               var self = this,
+                   element = self.element;
+
+               //set event bindings
+
+               if (cellEvents.cellClick || self.table.options.cellClick) {
+
+                       element.addEventListener("click", function (e) {
+
+                               var component = self.getComponent();
+
+                               if (cellEvents.cellClick) {
+
+                                       cellEvents.cellClick.call(self.table, e, component);
+                               }
+
+                               if (self.table.options.cellClick) {
+
+                                       self.table.options.cellClick.call(self.table, e, component);
+                               }
+                       });
+               }
+
+               if (cellEvents.cellDblClick || this.table.options.cellDblClick) {
+
+                       element.addEventListener("dblclick", function (e) {
+
+                               var component = self.getComponent();
+
+                               if (cellEvents.cellDblClick) {
+
+                                       cellEvents.cellDblClick.call(self.table, e, component);
+                               }
+
+                               if (self.table.options.cellDblClick) {
+
+                                       self.table.options.cellDblClick.call(self.table, e, component);
+                               }
+                       });
+               } else {
+
+                       element.addEventListener("dblclick", function (e) {
+
+                               if (self.table.modExists("edit")) {
+
+                                       if (self.table.modules.edit.currentCell === self) {
+
+                                               return; //prevent instant selection of editor content
+                                       }
+                               }
+
+                               e.preventDefault();
+
+                               try {
+
+                                       if (document.selection) {
+                                               // IE
+
+                                               var range = document.body.createTextRange();
+
+                                               range.moveToElementText(self.element);
+
+                                               range.select();
+                                       } else if (window.getSelection) {
+
+                                               var range = document.createRange();
+
+                                               range.selectNode(self.element);
+
+                                               window.getSelection().removeAllRanges();
+
+                                               window.getSelection().addRange(range);
+                                       }
+                               } catch (e) {}
+                       });
+               }
+
+               if (cellEvents.cellContext || this.table.options.cellContext) {
+
+                       element.addEventListener("contextmenu", function (e) {
+
+                               var component = self.getComponent();
+
+                               if (cellEvents.cellContext) {
+
+                                       cellEvents.cellContext.call(self.table, e, component);
+                               }
+
+                               if (self.table.options.cellContext) {
+
+                                       self.table.options.cellContext.call(self.table, e, component);
+                               }
+                       });
+               }
+       };
+
+       Cell.prototype._bindMouseEvents = function (cellEvents) {
+
+               var self = this,
+                   element = self.element;
+
+               if (cellEvents.cellMouseEnter || self.table.options.cellMouseEnter) {
+
+                       element.addEventListener("mouseenter", function (e) {
+
+                               var component = self.getComponent();
+
+                               if (cellEvents.cellMouseEnter) {
+
+                                       cellEvents.cellMouseEnter.call(self.table, e, component);
+                               }
+
+                               if (self.table.options.cellMouseEnter) {
+
+                                       self.table.options.cellMouseEnter.call(self.table, e, component);
+                               }
+                       });
+               }
+
+               if (cellEvents.cellMouseLeave || self.table.options.cellMouseLeave) {
+
+                       element.addEventListener("mouseleave", function (e) {
+
+                               var component = self.getComponent();
+
+                               if (cellEvents.cellMouseLeave) {
+
+                                       cellEvents.cellMouseLeave.call(self.table, e, component);
+                               }
+
+                               if (self.table.options.cellMouseLeave) {
+
+                                       self.table.options.cellMouseLeave.call(self.table, e, component);
+                               }
+                       });
+               }
+
+               if (cellEvents.cellMouseOver || self.table.options.cellMouseOver) {
+
+                       element.addEventListener("mouseover", function (e) {
+
+                               var component = self.getComponent();
+
+                               if (cellEvents.cellMouseOver) {
+
+                                       cellEvents.cellMouseOver.call(self.table, e, component);
+                               }
+
+                               if (self.table.options.cellMouseOver) {
+
+                                       self.table.options.cellMouseOver.call(self.table, e, component);
+                               }
+                       });
+               }
+
+               if (cellEvents.cellMouseOut || self.table.options.cellMouseOut) {
+
+                       element.addEventListener("mouseout", function (e) {
+
+                               var component = self.getComponent();
+
+                               if (cellEvents.cellMouseOut) {
+
+                                       cellEvents.cellMouseOut.call(self.table, e, component);
+                               }
+
+                               if (self.table.options.cellMouseOut) {
+
+                                       self.table.options.cellMouseOut.call(self.table, e, component);
+                               }
+                       });
+               }
+
+               if (cellEvents.cellMouseMove || self.table.options.cellMouseMove) {
+
+                       element.addEventListener("mousemove", function (e) {
+
+                               var component = self.getComponent();
+
+                               if (cellEvents.cellMouseMove) {
+
+                                       cellEvents.cellMouseMove.call(self.table, e, component);
+                               }
+
+                               if (self.table.options.cellMouseMove) {
+
+                                       self.table.options.cellMouseMove.call(self.table, e, component);
+                               }
+                       });
+               }
+       };
+
+       Cell.prototype._bindTouchEvents = function (cellEvents) {
+
+               var self = this,
+                   element = self.element,
+                   dblTap,
+                   tapHold,
+                   tap;
+
+               if (cellEvents.cellTap || this.table.options.cellTap) {
+
+                       tap = false;
+
+                       element.addEventListener("touchstart", function (e) {
+
+                               tap = true;
+                       }, { passive: true });
+
+                       element.addEventListener("touchend", function (e) {
+
+                               if (tap) {
+
+                                       var component = self.getComponent();
+
+                                       if (cellEvents.cellTap) {
+
+                                               cellEvents.cellTap.call(self.table, e, component);
+                                       }
+
+                                       if (self.table.options.cellTap) {
+
+                                               self.table.options.cellTap.call(self.table, e, component);
+                                       }
+                               }
+
+                               tap = false;
+                       });
+               }
+
+               if (cellEvents.cellDblTap || this.table.options.cellDblTap) {
+
+                       dblTap = null;
+
+                       element.addEventListener("touchend", function (e) {
+
+                               if (dblTap) {
+
+                                       clearTimeout(dblTap);
+
+                                       dblTap = null;
+
+                                       var component = self.getComponent();
+
+                                       if (cellEvents.cellDblTap) {
+
+                                               cellEvents.cellDblTap.call(self.table, e, component);
+                                       }
+
+                                       if (self.table.options.cellDblTap) {
+
+                                               self.table.options.cellDblTap.call(self.table, e, component);
+                                       }
+                               } else {
+
+                                       dblTap = setTimeout(function () {
+
+                                               clearTimeout(dblTap);
+
+                                               dblTap = null;
+                                       }, 300);
+                               }
+                       });
+               }
+
+               if (cellEvents.cellTapHold || this.table.options.cellTapHold) {
+
+                       tapHold = null;
+
+                       element.addEventListener("touchstart", function (e) {
+
+                               clearTimeout(tapHold);
+
+                               tapHold = setTimeout(function () {
+
+                                       clearTimeout(tapHold);
+
+                                       tapHold = null;
+
+                                       tap = false;
+
+                                       var component = self.getComponent();
+
+                                       if (cellEvents.cellTapHold) {
+
+                                               cellEvents.cellTapHold.call(self.table, e, component);
+                                       }
+
+                                       if (self.table.options.cellTapHold) {
+
+                                               self.table.options.cellTapHold.call(self.table, e, component);
+                                       }
+                               }, 1000);
+                       }, { passive: true });
+
+                       element.addEventListener("touchend", function (e) {
+
+                               clearTimeout(tapHold);
+
+                               tapHold = null;
+                       });
+               }
+       };
+
+       //generate cell contents
+
+       Cell.prototype._generateContents = function () {
+
+               var val;
+
+               if (this.table.modExists("format")) {
+
+                       val = this.table.modules.format.formatValue(this);
+               } else {
+
+                       val = this.element.innerHTML = this.value;
+               }
+
+               switch (typeof val === 'undefined' ? 'undefined' : _typeof(val)) {
+
+                       case "object":
+
+                               if (val instanceof Node) {
+
+                                       //clear previous cell contents
+
+                                       while (this.element.firstChild) {
+                                               this.element.removeChild(this.element.firstChild);
+                                       }this.element.appendChild(val);
+                               } else {
+
+                                       this.element.innerHTML = "";
+
+                                       if (val != null) {
+
+                                               console.warn("Format Error - Formatter has returned a type of object, the only valid formatter object return is an instance of Node, the formatter returned:", val);
+                                       }
+                               }
+
+                               break;
+
+                       case "undefined":
+
+                       case "null":
+
+                               this.element.innerHTML = "";
+
+                               break;
+
+                       default:
+
+                               this.element.innerHTML = val;
+
+               }
+       };
+
+       Cell.prototype.cellRendered = function () {
+
+               if (this.table.modExists("format") && this.table.modules.format.cellRendered) {
+
+                       this.table.modules.format.cellRendered(this);
+               }
+       };
+
+       //generate tooltip text
+
+       Cell.prototype._generateTooltip = function () {
+
+               var tooltip = this.column.tooltip;
+
+               if (tooltip) {
+
+                       if (tooltip === true) {
+
+                               tooltip = this.value;
+                       } else if (typeof tooltip == "function") {
+
+                               tooltip = tooltip(this.getComponent());
+
+                               if (tooltip === false) {
+
+                                       tooltip = "";
+                               }
+                       }
+
+                       if (typeof tooltip === "undefined") {
+
+                               tooltip = "";
+                       }
+
+                       this.element.setAttribute("title", tooltip);
+               } else {
+
+                       this.element.setAttribute("title", "");
+               }
+       };
+
+       //////////////////// Getters ////////////////////
+
+       Cell.prototype.getElement = function () {
+
+               if (!this.loaded) {
+
+                       this.loaded = true;
+
+                       this.layoutElement();
+               }
+
+               return this.element;
+       };
+
+       Cell.prototype.getValue = function () {
+
+               return this.value;
+       };
+
+       Cell.prototype.getOldValue = function () {
+
+               return this.oldValue;
+       };
+
+       //////////////////// Actions ////////////////////
+
+
+       Cell.prototype.setValue = function (value, mutate) {
+
+               var changed = this.setValueProcessData(value, mutate),
+                   component;
+
+               if (changed) {
+
+                       if (this.table.options.history && this.table.modExists("history")) {
+
+                               this.table.modules.history.action("cellEdit", this, { oldValue: this.oldValue, newValue: this.value });
+                       }
+
+                       component = this.getComponent();
+
+                       if (this.column.cellEvents.cellEdited) {
+
+                               this.column.cellEvents.cellEdited.call(this.table, component);
+                       }
+
+                       if (this.table.options.groupUpdateOnCellEdit && this.table.options.groupBy && this.table.modExists("groupRows")) {
+
+                               this.table.modules.groupRows.reassignRowToGroup(this.row);
+                       }
+
+                       this.cellRendered();
+
+                       this.table.options.cellEdited.call(this.table, component);
+
+                       if (this.table.options.dataChanged) {
+
+                               this.table.options.dataChanged.call(this.table, this.table.rowManager.getData());
+                       }
+               }
+       };
+
+       Cell.prototype.setValueProcessData = function (value, mutate) {
+
+               var changed = false;
+
+               if (this.value != value) {
+
+                       changed = true;
+
+                       if (mutate) {
+
+                               if (this.column.modules.mutate) {
+
+                                       value = this.table.modules.mutator.transformCell(this, value);
+                               }
+                       }
+               }
+
+               this.setValueActual(value);
+
+               if (changed && this.table.modExists("columnCalcs")) {
+
+                       if (this.column.definition.topCalc || this.column.definition.bottomCalc) {
+
+                               if (this.table.options.groupBy && this.table.modExists("groupRows")) {
+
+                                       if (this.table.options.columnCalcs == "table" || this.table.options.columnCalcs == "both") {
+
+                                               this.table.modules.columnCalcs.recalc(this.table.rowManager.activeRows);
+                                       }
+
+                                       if (this.table.options.columnCalcs != "table") {
+
+                                               this.table.modules.columnCalcs.recalcRowGroup(this.row);
+                                       }
+                               } else {
+
+                                       this.table.modules.columnCalcs.recalc(this.table.rowManager.activeRows);
+                               }
+                       }
+               }
+
+               return changed;
+       };
+
+       Cell.prototype.setValueActual = function (value) {
+
+               this.oldValue = this.value;
+
+               this.value = value;
+
+               if (this.table.options.reactiveData && this.table.modExists("reactiveData")) {
+
+                       this.table.modules.reactiveData.block();
+               }
+
+               this.column.setFieldValue(this.row.data, value);
+
+               if (this.table.options.reactiveData && this.table.modExists("reactiveData")) {
+
+                       this.table.modules.reactiveData.unblock();
+               }
+
+               if (this.loaded) {
+
+                       this.layoutElement();
+               }
+       };
+
+       Cell.prototype.layoutElement = function () {
+
+               this._generateContents();
+
+               this._generateTooltip();
+
+               //set resizable handles
+
+               if (this.table.options.resizableColumns && this.table.modExists("resizeColumns") && this.row.type === "row") {
+
+                       this.table.modules.resizeColumns.initializeColumn("cell", this.column, this.element);
+               }
+
+               if ((this.column.definition.contextMenu || this.column.definition.clickMenu) && this.table.modExists("menu")) {
+
+                       this.table.modules.menu.initializeCell(this);
+               }
+
+               //handle frozen cells
+
+               if (this.table.modExists("frozenColumns")) {
+
+                       this.table.modules.frozenColumns.layoutElement(this.element, this.column);
+               }
+       };
+
+       Cell.prototype.setWidth = function () {
+
+               this.width = this.column.width;
+
+               this.element.style.width = this.column.widthStyled;
+       };
+
+       Cell.prototype.clearWidth = function () {
+
+               this.width = "";
+
+               this.element.style.width = "";
+       };
+
+       Cell.prototype.getWidth = function () {
+
+               return this.width || this.element.offsetWidth;
+       };
+
+       Cell.prototype.setMinWidth = function () {
+
+               this.minWidth = this.column.minWidth;
+
+               this.element.style.minWidth = this.column.minWidthStyled;
+       };
+
+       Cell.prototype.checkHeight = function () {
+
+               // var height = this.element.css("height");
+
+               this.row.reinitializeHeight();
+       };
+
+       Cell.prototype.clearHeight = function () {
+
+               this.element.style.height = "";
+
+               this.height = null;
+       };
+
+       Cell.prototype.setHeight = function () {
+
+               this.height = this.row.height;
+
+               this.element.style.height = this.row.heightStyled;
+       };
+
+       Cell.prototype.getHeight = function () {
+
+               return this.height || this.element.offsetHeight;
+       };
+
+       Cell.prototype.show = function () {
+
+               this.element.style.display = this.column.vertAlign ? "inline-flex" : "";
+       };
+
+       Cell.prototype.hide = function () {
+
+               this.element.style.display = "none";
+       };
+
+       Cell.prototype.edit = function (force) {
+
+               if (this.table.modExists("edit", true)) {
+
+                       return this.table.modules.edit.editCell(this, force);
+               }
+       };
+
+       Cell.prototype.cancelEdit = function () {
+
+               if (this.table.modExists("edit", true)) {
+
+                       var editing = this.table.modules.edit.getCurrentCell();
+
+                       if (editing && editing._getSelf() === this) {
+
+                               this.table.modules.edit.cancelEdit();
+                       } else {
+
+                               console.warn("Cancel Editor Error - This cell is not currently being edited ");
+                       }
+               }
+       };
+
+       Cell.prototype.validate = function () {
+
+               if (this.column.modules.validate && this.table.modExists("validate", true)) {
+
+                       var valid = this.table.modules.validate.validate(this.column.modules.validate, this, this.getValue());
+
+                       return valid === true;
+               } else {
+
+                       return true;
+               }
+       };
+
+       Cell.prototype.delete = function () {
+
+               if (!this.table.rowManager.redrawBlock && this.element.parentNode) {
+
+                       this.element.parentNode.removeChild(this.element);
+               }
+
+               if (this.modules.validate && this.modules.validate.invalid) {
+
+                       this.table.modules.validate.clearValidation(this);
+               }
+
+               if (this.modules.edit && this.modules.edit.edited) {
+
+                       this.table.modules.edit.clearEdited(this);
+               }
+
+               if (this.table.options.history) {
+
+                       this.table.modules.history.clearComponentHistory(this);
+               }
+
+               this.element = false;
+
+               this.column.deleteCell(this);
+
+               this.row.deleteCell(this);
+
+               this.calcs = {};
+       };
+
+       //////////////// Navigation /////////////////
+
+
+       Cell.prototype.nav = function () {
+
+               var self = this,
+                   nextCell = false,
+                   index = this.row.getCellIndex(this);
+
+               return {
+
+                       next: function next() {
+
+                               var nextCell = this.right(),
+                                   nextRow;
+
+                               if (!nextCell) {
+
+                                       nextRow = self.table.rowManager.nextDisplayRow(self.row, true);
+
+                                       if (nextRow) {
+
+                                               nextCell = nextRow.findNextEditableCell(-1);
+
+                                               if (nextCell) {
+
+                                                       nextCell.edit();
+
+                                                       return true;
+                                               }
+                                       }
+                               } else {
+
+                                       return true;
+                               }
+
+                               return false;
+                       },
+
+                       prev: function prev() {
+
+                               var nextCell = this.left(),
+                                   prevRow;
+
+                               if (!nextCell) {
+
+                                       prevRow = self.table.rowManager.prevDisplayRow(self.row, true);
+
+                                       if (prevRow) {
+
+                                               nextCell = prevRow.findPrevEditableCell(prevRow.cells.length);
+
+                                               if (nextCell) {
+
+                                                       nextCell.edit();
+
+                                                       return true;
+                                               }
+                                       }
+                               } else {
+
+                                       return true;
+                               }
+
+                               return false;
+                       },
+
+                       left: function left() {
+
+                               nextCell = self.row.findPrevEditableCell(index);
+
+                               if (nextCell) {
+
+                                       nextCell.edit();
+
+                                       return true;
+                               } else {
+
+                                       return false;
+                               }
+                       },
+
+                       right: function right() {
+
+                               nextCell = self.row.findNextEditableCell(index);
+
+                               if (nextCell) {
+
+                                       nextCell.edit();
+
+                                       return true;
+                               } else {
+
+                                       return false;
+                               }
+                       },
+
+                       up: function up() {
+
+                               var nextRow = self.table.rowManager.prevDisplayRow(self.row, true);
+
+                               if (nextRow) {
+
+                                       nextRow.cells[index].edit();
+                               }
+                       },
+
+                       down: function down() {
+
+                               var nextRow = self.table.rowManager.nextDisplayRow(self.row, true);
+
+                               if (nextRow) {
+
+                                       nextRow.cells[index].edit();
+                               }
+                       }
+
+               };
+       };
+
+       Cell.prototype.getIndex = function () {
+
+               this.row.getCellIndex(this);
+       };
+
+       //////////////// Object Generation /////////////////
+
+       Cell.prototype.getComponent = function () {
+
+               if (!this.component) {
+
+                       this.component = new CellComponent(this);
+               }
+
+               return this.component;
+       };
+
+       var FooterManager = function FooterManager(table) {
+
+               this.table = table;
+
+               this.active = false;
+
+               this.element = this.createElement(); //containing element
+
+               this.external = false;
+
+               this.links = [];
+
+               this._initialize();
+       };
+
+       FooterManager.prototype.createElement = function () {
+
+               var el = document.createElement("div");
+
+               el.classList.add("tabulator-footer");
+
+               return el;
+       };
+
+       FooterManager.prototype._initialize = function (element) {
+
+               if (this.table.options.footerElement) {
+
+                       switch (_typeof(this.table.options.footerElement)) {
+
+                               case "string":
+
+                                       if (this.table.options.footerElement[0] === "<") {
+
+                                               this.element.innerHTML = this.table.options.footerElement;
+                                       } else {
+
+                                               this.external = true;
+
+                                               this.element = document.querySelector(this.table.options.footerElement);
+                                       }
+
+                                       break;
+
+                               default:
+
+                                       this.element = this.table.options.footerElement;
+
+                                       break;
+
+                       }
+               }
+       };
+
+       FooterManager.prototype.getElement = function () {
+
+               return this.element;
+       };
+
+       FooterManager.prototype.append = function (element, parent) {
+
+               this.activate(parent);
+
+               this.element.appendChild(element);
+
+               this.table.rowManager.adjustTableSize();
+       };
+
+       FooterManager.prototype.prepend = function (element, parent) {
+
+               this.activate(parent);
+
+               this.element.insertBefore(element, this.element.firstChild);
+
+               this.table.rowManager.adjustTableSize();
+       };
+
+       FooterManager.prototype.remove = function (element) {
+
+               element.parentNode.removeChild(element);
+
+               this.deactivate();
+       };
+
+       FooterManager.prototype.deactivate = function (force) {
+
+               if (!this.element.firstChild || force) {
+
+                       if (!this.external) {
+
+                               this.element.parentNode.removeChild(this.element);
+                       }
+
+                       this.active = false;
+               }
+
+               // this.table.rowManager.adjustTableSize();
+       };
+
+       FooterManager.prototype.activate = function (parent) {
+
+               if (!this.active) {
+
+                       this.active = true;
+
+                       if (!this.external) {
+
+                               this.table.element.appendChild(this.getElement());
+
+                               this.table.element.style.display = '';
+                       }
+               }
+
+               if (parent) {
+
+                       this.links.push(parent);
+               }
+       };
+
+       FooterManager.prototype.redraw = function () {
+
+               this.links.forEach(function (link) {
+
+                       link.footerRedraw();
+               });
+       };
+
+       var Tabulator = function Tabulator(element, options) {
+
+               this.options = {};
+
+               this.columnManager = null; // hold Column Manager
+
+               this.rowManager = null; //hold Row Manager
+
+               this.footerManager = null; //holder Footer Manager
+
+               this.vdomHoz = null; //holder horizontal virtual dom
+
+
+               this.browser = ""; //hold current browser type
+
+               this.browserSlow = false; //handle reduced functionality for slower browsers
+
+               this.browserMobile = false; //check if running on moble, prevent resize cancelling edit on keyboard appearence
+
+               this.rtl = false; //check if the table is in RTL mode
+
+
+               this.modules = {}; //hold all modules bound to this table
+
+
+               if (this.initializeElement(element)) {
+
+                       this.initializeOptions(options || {});
+
+                       this._create();
+               }
+
+               Tabulator.prototype.comms.register(this); //register table for inderdevice communication
+       };
+
+       //default setup options
+
+       Tabulator.prototype.defaultOptions = {
+
+               height: false, //height of tabulator
+
+               minHeight: false, //minimum height of tabulator
+
+               maxHeight: false, //maximum height of tabulator
+
+
+               layout: "fitData", ///layout type "fitColumns" | "fitData"
+
+               layoutColumnsOnNewData: false, //update column widths on setData
+
+
+               columnMinWidth: 40, //minimum global width for a column
+
+               columnHeaderVertAlign: "top", //vertical alignment of column headers
+
+               columnVertAlign: false, // DEPRECATED - Left to allow warning
+
+
+               resizableColumns: true, //resizable columns
+
+               resizableRows: false, //resizable rows
+
+               autoResize: true, //auto resize table
+
+
+               columns: [], //store for colum header info
+
+
+               cellHozAlign: "", //horizontal align columns
+
+               cellVertAlign: "", //vertical align columns
+
+               headerHozAlign: "", //horizontal header alignment
+
+
+               data: [], //default starting data
+
+
+               autoColumns: false, //build columns from data row structure
+
+               autoColumnsDefinitions: false,
+
+               reactiveData: false, //enable data reactivity
+
+
+               nestedFieldSeparator: ".", //seperatpr for nested data
+
+
+               tooltips: false, //Tool tip value
+
+               tooltipsHeader: false, //Tool tip for headers
+
+               tooltipGenerationMode: "load", //when to generate tooltips
+
+
+               initialSort: false, //initial sorting criteria
+
+               initialFilter: false, //initial filtering criteria
+
+               initialHeaderFilter: false, //initial header filtering criteria
+
+
+               columnHeaderSortMulti: true, //multiple or single column sorting
+
+
+               sortOrderReverse: false, //reverse internal sort ordering
+
+
+               headerSort: true, //set default global header sort
+
+               headerSortTristate: false, //set default tristate header sorting
+
+               headerSortElement: "<div class='tabulator-arrow'></div>", //header sort element
+
+
+               footerElement: false, //hold footer element
+
+
+               index: "id", //filed for row index
+
+
+               textDirection: "auto",
+
+               keybindings: [], //array for keybindings
+
+
+               tabEndNewRow: false, //create new row when tab to end of table
+
+
+               invalidOptionWarnings: true, //allow toggling of invalid option warnings
+
+
+               clipboard: false, //enable clipboard
+
+               clipboardCopyStyled: true, //formatted table data
+
+               clipboardCopyConfig: false, //clipboard config
+
+               clipboardCopyFormatter: false, //DEPRICATED - REMOVE in 5.0
+
+               clipboardCopyRowRange: "active", //restrict clipboard to visible rows only
+
+               clipboardPasteParser: "table", //convert pasted clipboard data to rows
+
+               clipboardPasteAction: "insert", //how to insert pasted data into the table
+
+
+               clipboardCopied: function clipboardCopied() {}, //data has been copied to the clipboard
+
+               clipboardPasted: function clipboardPasted() {}, //data has been pasted into the table
+
+               clipboardPasteError: function clipboardPasteError() {}, //data has not successfully been pasted into the table
+
+
+               downloadDataFormatter: false, //function to manipulate table data before it is downloaded
+
+               downloadReady: function downloadReady(data, blob) {
+                       return blob;
+               }, //function to manipulate download data
+
+               downloadComplete: false, //function to manipulate download data
+
+               downloadConfig: {}, //download config
+
+               downloadRowRange: "active", //restrict download to active rows only
+
+
+               dataTree: false, //enable data tree
+
+               dataTreeFilter: true, //filter child rows
+
+               dataTreeSort: true, //sort child rows
+
+               dataTreeElementColumn: false,
+
+               dataTreeBranchElement: true, //show data tree branch element
+
+               dataTreeChildIndent: 9, //data tree child indent in px
+
+               dataTreeChildField: "_children", //data tre column field to look for child rows
+
+               dataTreeCollapseElement: false, //data tree row collapse element
+
+               dataTreeExpandElement: false, //data tree row expand element
+
+               dataTreeStartExpanded: false,
+
+               dataTreeRowExpanded: function dataTreeRowExpanded() {}, //row has been expanded
+
+               dataTreeRowCollapsed: function dataTreeRowCollapsed() {}, //row has been collapsed
+
+               dataTreeChildColumnCalcs: false, //include visible data tree rows in column calculations
+
+               dataTreeSelectPropagate: false, //seleccting a parent row selects its children
+
+
+               printAsHtml: false, //enable print as html
+
+               printFormatter: false, //printing page formatter
+
+               printHeader: false, //page header contents
+
+               printFooter: false, //page footer contents
+
+               printCopyStyle: true, //DEPRICATED - REMOVE in 5.0
+
+               printStyled: true, //enable print as html styling
+
+               printVisibleRows: true, //DEPRICATED - REMOVE in 5.0
+
+               printRowRange: "visible", //restrict print to visible rows only
+
+               printConfig: {}, //print config options
+
+
+               addRowPos: "bottom", //position to insert blank rows, top|bottom
+
+
+               selectable: "highlight", //highlight rows on hover
+
+               selectableRangeMode: "drag", //highlight rows on hover
+
+               selectableRollingSelection: true, //roll selection once maximum number of selectable rows is reached
+
+               selectablePersistence: true, // maintain selection when table view is updated
+
+               selectableCheck: function selectableCheck(data, row) {
+                       return true;
+               }, //check wheather row is selectable
+
+
+               headerFilterLiveFilterDelay: 300, //delay before updating column after user types in header filter
+
+               headerFilterPlaceholder: false, //placeholder text to display in header filters
+
+
+               headerVisible: true, //hide header
+
+
+               history: false, //enable edit history
+
+
+               locale: false, //current system language
+
+               langs: {},
+
+               virtualDom: true, //enable DOM virtualization
+
+               virtualDomBuffer: 0, // set virtual DOM buffer size
+
+               virtualDomHoz: false, //enable horizontal DOM virtualization
+
+
+               persistentLayout: false, //DEPRICATED - REMOVE in 5.0
+
+               persistentSort: false, //DEPRICATED - REMOVE in 5.0
+
+               persistentFilter: false, //DEPRICATED - REMOVE in 5.0
+
+               persistenceID: "", //key for persistent storage
+
+               persistenceMode: true, //mode for storing persistence information
+
+               persistenceReaderFunc: false, //function for handling persistence data reading
+
+               persistenceWriterFunc: false, //function for handling persistence data writing
+
+
+               persistence: false,
+
+               responsiveLayout: false, //responsive layout flags
+
+               responsiveLayoutCollapseStartOpen: true, //start showing collapsed data
+
+               responsiveLayoutCollapseUseFormatters: true, //responsive layout collapse formatter
+
+               responsiveLayoutCollapseFormatter: false, //responsive layout collapse formatter
+
+
+               pagination: false, //set pagination type
+
+               paginationSize: false, //set number of rows to a page
+
+               paginationInitialPage: 1, //initail page to show on load
+
+               paginationButtonCount: 5, // set count of page button
+
+               paginationSizeSelector: false, //add pagination size selector element
+
+               paginationElement: false, //element to hold pagination numbers
+
+               paginationDataSent: {}, //pagination data sent to the server
+
+               paginationDataReceived: {}, //pagination data received from the server
+
+               paginationAddRow: "page", //add rows on table or page
+
+
+               ajaxURL: false, //url for ajax loading
+
+               ajaxURLGenerator: false,
+
+               ajaxParams: {}, //params for ajax loading
+
+               ajaxConfig: "get", //ajax request type
+
+               ajaxContentType: "form", //ajax request type
+
+               ajaxRequestFunc: false, //promise function
+
+               ajaxLoader: true, //show loader
+
+               ajaxLoaderLoading: false, //loader element
+
+               ajaxLoaderError: false, //loader element
+
+               ajaxFiltering: false,
+
+               ajaxSorting: false,
+
+               ajaxProgressiveLoad: false, //progressive loading
+
+               ajaxProgressiveLoadDelay: 0, //delay between requests
+
+               ajaxProgressiveLoadScrollMargin: 0, //margin before scroll begins
+
+
+               groupBy: false, //enable table grouping and set field to group by
+
+               groupStartOpen: true, //starting state of group
+
+               groupValues: false,
+
+               groupUpdateOnCellEdit: false,
+
+               groupHeader: false, //header generation function
+
+               groupHeaderPrint: null,
+
+               groupHeaderClipboard: null,
+
+               groupHeaderHtmlOutput: null,
+
+               groupHeaderDownload: null,
+
+               htmlOutputConfig: false, //html outypu config
+
+
+               movableColumns: false, //enable movable columns
+
+
+               movableRows: false, //enable movable rows
+
+               movableRowsConnectedTables: false, //tables for movable rows to be connected to
+
+               movableRowsConnectedElements: false, //other elements for movable rows to be connected to
+
+               movableRowsSender: false,
+
+               movableRowsReceiver: "insert",
+
+               movableRowsSendingStart: function movableRowsSendingStart() {},
+
+               movableRowsSent: function movableRowsSent() {},
+
+               movableRowsSentFailed: function movableRowsSentFailed() {},
+
+               movableRowsSendingStop: function movableRowsSendingStop() {},
+
+               movableRowsReceivingStart: function movableRowsReceivingStart() {},
+
+               movableRowsReceived: function movableRowsReceived() {},
+
+               movableRowsReceivedFailed: function movableRowsReceivedFailed() {},
+
+               movableRowsReceivingStop: function movableRowsReceivingStop() {},
+
+               movableRowsElementDrop: function movableRowsElementDrop() {},
+
+               scrollToRowPosition: "top",
+
+               scrollToRowIfVisible: true,
+
+               scrollToColumnPosition: "left",
+
+               scrollToColumnIfVisible: true,
+
+               rowFormatter: false,
+
+               rowFormatterPrint: null,
+
+               rowFormatterClipboard: null,
+
+               rowFormatterHtmlOutput: null,
+
+               placeholder: false,
+
+               //table building callbacks
+
+               tableBuilding: function tableBuilding() {},
+
+               tableBuilt: function tableBuilt() {},
+
+               //render callbacks
+
+               renderStarted: function renderStarted() {},
+
+               renderComplete: function renderComplete() {},
+
+               //row callbacks
+
+               rowClick: false,
+
+               rowDblClick: false,
+
+               rowContext: false,
+
+               rowTap: false,
+
+               rowDblTap: false,
+
+               rowTapHold: false,
+
+               rowMouseEnter: false,
+
+               rowMouseLeave: false,
+
+               rowMouseOver: false,
+
+               rowMouseOut: false,
+
+               rowMouseMove: false,
+
+               rowContextMenu: false,
+
+               rowClickMenu: false,
+
+               rowAdded: function rowAdded() {},
+
+               rowDeleted: function rowDeleted() {},
+
+               rowMoved: function rowMoved() {},
+
+               rowUpdated: function rowUpdated() {},
+
+               rowSelectionChanged: function rowSelectionChanged() {},
+
+               rowSelected: function rowSelected() {},
+
+               rowDeselected: function rowDeselected() {},
+
+               rowResized: function rowResized() {},
+
+               //cell callbacks
+
+               //row callbacks
+
+               cellClick: false,
+
+               cellDblClick: false,
+
+               cellContext: false,
+
+               cellTap: false,
+
+               cellDblTap: false,
+
+               cellTapHold: false,
+
+               cellMouseEnter: false,
+
+               cellMouseLeave: false,
+
+               cellMouseOver: false,
+
+               cellMouseOut: false,
+
+               cellMouseMove: false,
+
+               cellEditing: function cellEditing() {},
+
+               cellEdited: function cellEdited() {},
+
+               cellEditCancelled: function cellEditCancelled() {},
+
+               //column callbacks
+
+               columnMoved: false,
+
+               columnResized: function columnResized() {},
+
+               columnTitleChanged: function columnTitleChanged() {},
+
+               columnVisibilityChanged: function columnVisibilityChanged() {},
+
+               //HTML iport callbacks
+
+               htmlImporting: function htmlImporting() {},
+
+               htmlImported: function htmlImported() {},
+
+               //data callbacks
+
+               dataLoading: function dataLoading() {},
+
+               dataLoaded: function dataLoaded() {},
+
+               dataEdited: false, //DEPRECATED
+
+               dataChanged: false,
+
+               //ajax callbacks
+
+               ajaxRequesting: function ajaxRequesting() {},
+
+               ajaxResponse: false,
+
+               ajaxError: function ajaxError() {},
+
+               //filtering callbacks
+
+               dataFiltering: false,
+
+               dataFiltered: false,
+
+               //sorting callbacks
+
+               dataSorting: function dataSorting() {},
+
+               dataSorted: function dataSorted() {},
+
+               //grouping callbacks
+
+               groupToggleElement: "arrow",
+
+               groupClosedShowCalcs: false,
+
+               dataGrouping: function dataGrouping() {},
+
+               dataGrouped: false,
+
+               groupVisibilityChanged: function groupVisibilityChanged() {},
+
+               groupClick: false,
+
+               groupDblClick: false,
+
+               groupContext: false,
+
+               groupContextMenu: false,
+
+               groupClickMenu: false,
+
+               groupTap: false,
+
+               groupDblTap: false,
+
+               groupTapHold: false,
+
+               columnCalcs: true,
+
+               //pagination callbacks
+
+               pageLoaded: function pageLoaded() {},
+
+               //localization callbacks
+
+               localized: function localized() {},
+
+               //validation callbacks
+
+               validationMode: "blocking",
+
+               validationFailed: function validationFailed() {},
+
+               //history callbacks
+
+               historyUndo: function historyUndo() {},
+
+               historyRedo: function historyRedo() {},
+
+               //scroll callbacks
+
+               scrollHorizontal: function scrollHorizontal() {},
+
+               scrollVertical: function scrollVertical() {}
+
+       };
+
+       Tabulator.prototype.initializeOptions = function (options) {
+
+               //warn user if option is not available
+
+               if (options.invalidOptionWarnings !== false) {
+
+                       for (var key in options) {
+
+                               if (typeof this.defaultOptions[key] === "undefined") {
+
+                                       console.warn("Invalid table constructor option:", key);
+                               }
+                       }
+               }
+
+               //assign options to table
+
+               for (var key in this.defaultOptions) {
+
+                       if (key in options) {
+
+                               this.options[key] = options[key];
+                       } else {
+
+                               if (Array.isArray(this.defaultOptions[key])) {
+
+                                       this.options[key] = Object.assign([], this.defaultOptions[key]);
+                               } else if (_typeof(this.defaultOptions[key]) === "object" && this.defaultOptions[key] !== null) {
+
+                                       this.options[key] = Object.assign({}, this.defaultOptions[key]);
+                               } else {
+
+                                       this.options[key] = this.defaultOptions[key];
+                               }
+                       }
+               }
+       };
+
+       Tabulator.prototype.initializeElement = function (element) {
+
+               if (typeof HTMLElement !== "undefined" && element instanceof HTMLElement) {
+
+                       this.element = element;
+
+                       return true;
+               } else if (typeof element === "string") {
+
+                       this.element = document.querySelector(element);
+
+                       if (this.element) {
+
+                               return true;
+                       } else {
+
+                               console.error("Tabulator Creation Error - no element found matching selector: ", element);
+
+                               return false;
+                       }
+               } else {
+
+                       console.error("Tabulator Creation Error - Invalid element provided:", element);
+
+                       return false;
+               }
+       };
+
+       Tabulator.prototype.rtlCheck = function () {
+
+               var style = window.getComputedStyle(this.element);
+
+               switch (this.options.textDirection) {
+
+                       case "auto":
+
+                               if (style.direction !== "rtl") {
+
+                                       break;
+                               };
+
+                       case "rtl":
+
+                               this.element.classList.add("tabulator-rtl");
+
+                               this.rtl = true;
+
+                               break;
+
+                       case "ltr":
+
+                               this.element.classList.add("tabulator-ltr");
+
+                       default:
+
+                               this.rtl = false;
+
+               }
+       };
+
+       //convert depricated functionality to new functions
+
+       Tabulator.prototype._mapDepricatedFunctionality = function () {
+
+               //map depricated persistance setup options
+
+               if (this.options.persistentLayout || this.options.persistentSort || this.options.persistentFilter) {
+
+                       if (!this.options.persistence) {
+
+                               this.options.persistence = {};
+                       }
+               }
+
+               if (this.options.dataEdited) {
+
+                       console.warn("DEPRECATION WARNING - dataEdited option has been deprecated, please use the dataChanged option instead");
+
+                       this.options.dataChanged = this.options.dataEdited;
+               }
+
+               if (this.options.downloadDataFormatter) {
+
+                       console.warn("DEPRECATION WARNING - downloadDataFormatter option has been deprecated");
+               }
+
+               if (typeof this.options.clipboardCopyHeader !== "undefined") {
+
+                       this.options.columnHeaders = this.options.clipboardCopyHeader;
+
+                       console.warn("DEPRECATION WARNING - clipboardCopyHeader option has been deprecated, please use the columnHeaders property on the clipboardCopyConfig option");
+               }
+
+               if (this.options.printVisibleRows !== true) {
+
+                       console.warn("printVisibleRows option is deprecated, you should now use the printRowRange option");
+
+                       this.options.persistence.printRowRange = "active";
+               }
+
+               if (this.options.printCopyStyle !== true) {
+
+                       console.warn("printCopyStyle option is deprecated, you should now use the printStyled option");
+
+                       this.options.persistence.printStyled = this.options.printCopyStyle;
+               }
+
+               if (this.options.persistentLayout) {
+
+                       console.warn("persistentLayout option is deprecated, you should now use the persistence option");
+
+                       if (this.options.persistence !== true && typeof this.options.persistence.columns === "undefined") {
+
+                               this.options.persistence.columns = true;
+                       }
+               }
+
+               if (this.options.persistentSort) {
+
+                       console.warn("persistentSort option is deprecated, you should now use the persistence option");
+
+                       if (this.options.persistence !== true && typeof this.options.persistence.sort === "undefined") {
+
+                               this.options.persistence.sort = true;
+                       }
+               }
+
+               if (this.options.persistentFilter) {
+
+                       console.warn("persistentFilter option is deprecated, you should now use the persistence option");
+
+                       if (this.options.persistence !== true && typeof this.options.persistence.filter === "undefined") {
+
+                               this.options.persistence.filter = true;
+                       }
+               }
+
+               if (this.options.columnVertAlign) {
+
+                       console.warn("columnVertAlign option is deprecated, you should now use the columnHeaderVertAlign option");
+
+                       this.options.columnHeaderVertAlign = this.options.columnVertAlign;
+               }
+       };
+
+       Tabulator.prototype._clearSelection = function () {
+
+               this.element.classList.add("tabulator-block-select");
+
+               if (window.getSelection) {
+
+                       if (window.getSelection().empty) {
+                               // Chrome
+
+                               window.getSelection().empty();
+                       } else if (window.getSelection().removeAllRanges) {
+                               // Firefox
+
+                               window.getSelection().removeAllRanges();
+                       }
+               } else if (document.selection) {
+                       // IE?
+
+                       document.selection.empty();
+               }
+
+               this.element.classList.remove("tabulator-block-select");
+       };
+
+       //concreate table
+
+       Tabulator.prototype._create = function () {
+
+               this._clearObjectPointers();
+
+               this._mapDepricatedFunctionality();
+
+               this.bindModules();
+
+               this.rtlCheck();
+
+               if (this.element.tagName === "TABLE") {
+
+                       if (this.modExists("htmlTableImport", true)) {
+
+                               this.modules.htmlTableImport.parseTable();
+                       }
+               }
+
+               this.columnManager = new ColumnManager(this);
+
+               this.rowManager = new RowManager(this);
+
+               this.footerManager = new FooterManager(this);
+
+               this.columnManager.setRowManager(this.rowManager);
+
+               this.rowManager.setColumnManager(this.columnManager);
+
+               if (this.options.virtualDomHoz) {
+
+                       this.vdomHoz = new VDomHoz(this);
+               }
+
+               this._buildElement();
+
+               this._loadInitialData();
+       };
+
+       //clear pointers to objects in default config object
+
+       Tabulator.prototype._clearObjectPointers = function () {
+
+               this.options.columns = this.options.columns.slice(0);
+
+               if (!this.options.reactiveData) {
+
+                       this.options.data = this.options.data.slice(0);
+               }
+       };
+
+       //build tabulator element
+
+       Tabulator.prototype._buildElement = function () {
+               var _this24 = this;
+
+               var element = this.element,
+                   mod = this.modules,
+                   options = this.options;
+
+               options.tableBuilding.call(this);
+
+               element.classList.add("tabulator");
+
+               element.setAttribute("role", "grid");
+
+               //empty element
+
+               while (element.firstChild) {
+                       element.removeChild(element.firstChild);
+               } //set table height
+
+               if (options.height) {
+
+                       options.height = isNaN(options.height) ? options.height : options.height + "px";
+
+                       element.style.height = options.height;
+               }
+
+               //set table min height
+
+               if (options.minHeight !== false) {
+
+                       options.minHeight = isNaN(options.minHeight) ? options.minHeight : options.minHeight + "px";
+
+                       element.style.minHeight = options.minHeight;
+               }
+
+               //set table maxHeight
+
+               if (options.maxHeight !== false) {
+
+                       options.maxHeight = isNaN(options.maxHeight) ? options.maxHeight : options.maxHeight + "px";
+
+                       element.style.maxHeight = options.maxHeight;
+               }
+
+               this.columnManager.initialize();
+
+               this.rowManager.initialize();
+
+               this._detectBrowser();
+
+               if (this.modExists("layout", true)) {
+
+                       mod.layout.initialize(options.layout);
+               }
+
+               //set localization
+
+
+               mod.localize.initialize();
+
+               if (options.headerFilterPlaceholder !== false) {
+
+                       mod.localize.setHeaderFilterPlaceholder(options.headerFilterPlaceholder);
+               }
+
+               for (var locale in options.langs) {
+
+                       mod.localize.installLang(locale, options.langs[locale]);
+               }
+
+               mod.localize.setLocale(options.locale);
+
+               //configure placeholder element
+
+               if (typeof options.placeholder == "string") {
+
+                       var el = document.createElement("div");
+
+                       el.classList.add("tabulator-placeholder");
+
+                       var span = document.createElement("span");
+
+                       span.innerHTML = options.placeholder;
+
+                       el.appendChild(span);
+
+                       options.placeholder = el;
+               }
+
+               //build table elements
+
+               element.appendChild(this.columnManager.getElement());
+
+               element.appendChild(this.rowManager.getElement());
+
+               if (options.footerElement) {
+
+                       this.footerManager.activate();
+               }
+
+               if (options.persistence && this.modExists("persistence", true)) {
+
+                       mod.persistence.initialize();
+               }
+
+               if (options.persistence && this.modExists("persistence", true) && mod.persistence.config.columns) {
+
+                       options.columns = mod.persistence.load("columns", options.columns);
+               }
+
+               if (options.movableRows && this.modExists("moveRow")) {
+
+                       mod.moveRow.initialize();
+               }
+
+               if (options.autoColumns && this.options.data) {
+
+                       this.columnManager.generateColumnsFromRowData(this.options.data);
+               }
+
+               if (this.modExists("columnCalcs")) {
+
+                       mod.columnCalcs.initialize();
+               }
+
+               this.columnManager.setColumns(options.columns);
+
+               if (options.dataTree && this.modExists("dataTree", true)) {
+
+                       mod.dataTree.initialize();
+               }
+
+               if (this.modExists("frozenRows")) {
+
+                       this.modules.frozenRows.initialize();
+               }
+
+               if ((options.persistence && this.modExists("persistence", true) && mod.persistence.config.sort || options.initialSort) && this.modExists("sort", true)) {
+
+                       var sorters = [];
+
+                       if (options.persistence && this.modExists("persistence", true) && mod.persistence.config.sort) {
+
+                               sorters = mod.persistence.load("sort");
+
+                               if (sorters === false && options.initialSort) {
+
+                                       sorters = options.initialSort;
+                               }
+                       } else if (options.initialSort) {
+
+                               sorters = options.initialSort;
+                       }
+
+                       mod.sort.setSort(sorters);
+               }
+
+               if ((options.persistence && this.modExists("persistence", true) && mod.persistence.config.filter || options.initialFilter) && this.modExists("filter", true)) {
+
+                       var filters = [];
+
+                       if (options.persistence && this.modExists("persistence", true) && mod.persistence.config.filter) {
+
+                               filters = mod.persistence.load("filter");
+
+                               if (filters === false && options.initialFilter) {
+
+                                       filters = options.initialFilter;
+                               }
+                       } else if (options.initialFilter) {
+
+                               filters = options.initialFilter;
+                       }
+
+                       mod.filter.setFilter(filters);
+               }
+
+               if (options.initialHeaderFilter && this.modExists("filter", true)) {
+
+                       options.initialHeaderFilter.forEach(function (item) {
+
+                               var column = _this24.columnManager.findColumn(item.field);
+
+                               if (column) {
+
+                                       mod.filter.setHeaderFilterValue(column, item.value);
+                               } else {
+
+                                       console.warn("Column Filter Error - No matching column found:", item.field);
+
+                                       return false;
+                               }
+                       });
+               }
+
+               if (this.modExists("ajax")) {
+
+                       mod.ajax.initialize();
+               }
+
+               if (options.pagination && this.modExists("page", true)) {
+
+                       mod.page.initialize();
+               }
+
+               if (options.groupBy && this.modExists("groupRows", true)) {
+
+                       mod.groupRows.initialize();
+               }
+
+               if (this.modExists("keybindings")) {
+
+                       mod.keybindings.initialize();
+               }
+
+               if (this.modExists("selectRow")) {
+
+                       mod.selectRow.clearSelectionData(true);
+               }
+
+               if (options.autoResize && this.modExists("resizeTable")) {
+
+                       mod.resizeTable.initialize();
+               }
+
+               if (this.modExists("clipboard")) {
+
+                       mod.clipboard.initialize();
+               }
+
+               if (options.printAsHtml && this.modExists("print")) {
+
+                       mod.print.initialize();
+               }
+
+               options.tableBuilt.call(this);
+       };
+
+       Tabulator.prototype._loadInitialData = function () {
+
+               var self = this;
+
+               if (self.options.pagination && self.modExists("page")) {
+
+                       self.modules.page.reset(true, true);
+
+                       if (self.options.pagination == "local") {
+
+                               if (self.options.data.length) {
+
+                                       self.rowManager.setData(self.options.data, false, true);
+                               } else {
+
+                                       if ((self.options.ajaxURL || self.options.ajaxURLGenerator) && self.modExists("ajax")) {
+
+                                               self.modules.ajax.loadData(false, true).then(function () {}).catch(function () {
+
+                                                       if (self.options.paginationInitialPage) {
+
+                                                               self.modules.page.setPage(self.options.paginationInitialPage);
+                                                       }
+                                               });
+
+                                               return;
+                                       } else {
+
+                                               self.rowManager.setData(self.options.data, false, true);
+                                       }
+                               }
+
+                               if (self.options.paginationInitialPage) {
+
+                                       self.modules.page.setPage(self.options.paginationInitialPage);
+                               }
+                       } else {
+
+                               if (self.options.ajaxURL) {
+
+                                       self.modules.page.setPage(self.options.paginationInitialPage).then(function () {}).catch(function () {});
+                               } else {
+
+                                       self.rowManager.setData([], false, true);
+                               }
+                       }
+               } else {
+
+                       if (self.options.data.length) {
+
+                               self.rowManager.setData(self.options.data);
+                       } else {
+
+                               if ((self.options.ajaxURL || self.options.ajaxURLGenerator) && self.modExists("ajax")) {
+
+                                       self.modules.ajax.loadData(false, true).then(function () {}).catch(function () {});
+                               } else {
+
+                                       self.rowManager.setData(self.options.data, false, true);
+                               }
+                       }
+               }
+       };
+
+       //deconstructor
+
+       Tabulator.prototype.destroy = function () {
+
+               var element = this.element;
+
+               Tabulator.prototype.comms.deregister(this); //deregister table from inderdevice communication
+
+
+               if (this.options.reactiveData && this.modExists("reactiveData", true)) {
+
+                       this.modules.reactiveData.unwatchData();
+               }
+
+               //clear row data
+
+               this.rowManager.rows.forEach(function (row) {
+
+                       row.wipe();
+               });
+
+               this.rowManager.rows = [];
+
+               this.rowManager.activeRows = [];
+
+               this.rowManager.displayRows = [];
+
+               //clear event bindings
+
+               if (this.options.autoResize && this.modExists("resizeTable")) {
+
+                       this.modules.resizeTable.clearBindings();
+               }
+
+               if (this.modExists("keybindings")) {
+
+                       this.modules.keybindings.clearBindings();
+               }
+
+               //clear DOM
+
+               while (element.firstChild) {
+                       element.removeChild(element.firstChild);
+               }element.classList.remove("tabulator");
+       };
+
+       Tabulator.prototype._detectBrowser = function () {
+
+               var ua = navigator.userAgent || navigator.vendor || window.opera;
+
+               if (ua.indexOf("Trident") > -1) {
+
+                       this.browser = "ie";
+
+                       this.browserSlow = true;
+               } else if (ua.indexOf("Edge") > -1) {
+
+                       this.browser = "edge";
+
+                       this.browserSlow = true;
+               } else if (ua.indexOf("Firefox") > -1) {
+
+                       this.browser = "firefox";
+
+                       this.browserSlow = false;
+               } else {
+
+                       this.browser = "other";
+
+                       this.browserSlow = false;
+               }
+
+               this.browserMobile = /(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino|android|ipad|playbook|silk/i.test(ua) || /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(ua.substr(0, 4));
+       };
+
+       ////////////////// Data Handling //////////////////
+
+
+       //block table redrawing
+
+       Tabulator.prototype.blockRedraw = function () {
+
+               return this.rowManager.blockRedraw();
+       };
+
+       //restore table redrawing
+
+       Tabulator.prototype.restoreRedraw = function () {
+
+               return this.rowManager.restoreRedraw();
+       };
+
+       //local data from local file
+
+       Tabulator.prototype.setDataFromLocalFile = function (extensions) {
+               var _this25 = this;
+
+               return new Promise(function (resolve, reject) {
+
+                       var input = document.createElement("input");
+
+                       input.type = "file";
+
+                       input.accept = extensions || ".json,application/json";
+
+                       input.addEventListener("change", function (e) {
+
+                               var file = input.files[0],
+                                   reader = new FileReader(),
+                                   data;
+
+                               reader.readAsText(file);
+
+                               reader.onload = function (e) {
+
+                                       try {
+
+                                               data = JSON.parse(reader.result);
+                                       } catch (e) {
+
+                                               console.warn("File Load Error - File contents is invalid JSON", e);
+
+                                               reject(e);
+
+                                               return;
+                                       }
+
+                                       _this25.setData(data).then(function (data) {
+
+                                               resolve(data);
+                                       }).catch(function (err) {
+
+                                               resolve(err);
+                                       });
+                               };
+
+                               reader.onerror = function (e) {
+
+                                       console.warn("File Load Error - Unable to read file");
+
+                                       reject();
+                               };
+                       });
+
+                       input.click();
+               });
+       };
+
+       //load data
+
+       Tabulator.prototype.setData = function (data, params, config) {
+
+               if (this.modExists("ajax")) {
+
+                       this.modules.ajax.blockActiveRequest();
+               }
+
+               return this._setData(data, params, config, false, true);
+       };
+
+       Tabulator.prototype._setData = function (data, params, config, inPosition, columnsChanged) {
+
+               var self = this;
+
+               if (typeof data === "string") {
+
+                       if (data.indexOf("{") == 0 || data.indexOf("[") == 0) {
+
+                               //data is a json encoded string
+
+                               return self.rowManager.setData(JSON.parse(data), inPosition, columnsChanged);
+                       } else {
+
+                               if (self.modExists("ajax", true)) {
+
+                                       if (params) {
+
+                                               self.modules.ajax.setParams(params);
+                                       }
+
+                                       if (config) {
+
+                                               self.modules.ajax.setConfig(config);
+                                       }
+
+                                       self.modules.ajax.setUrl(data);
+
+                                       if (self.options.pagination == "remote" && self.modExists("page", true)) {
+
+                                               self.modules.page.reset(true, true);
+
+                                               return self.modules.page.setPage(1);
+                                       } else {
+
+                                               //assume data is url, make ajax call to url to get data
+
+                                               return self.modules.ajax.loadData(inPosition, columnsChanged);
+                                       }
+                               }
+                       }
+               } else {
+
+                       if (data) {
+
+                               //asume data is already an object
+
+                               return self.rowManager.setData(data, inPosition, columnsChanged);
+                       } else {
+
+                               //no data provided, check if ajaxURL is present;
+
+                               if (self.modExists("ajax") && (self.modules.ajax.getUrl || self.options.ajaxURLGenerator)) {
+
+                                       if (self.options.pagination == "remote" && self.modExists("page", true)) {
+
+                                               self.modules.page.reset(true, true);
+
+                                               return self.modules.page.setPage(1);
+                                       } else {
+
+                                               return self.modules.ajax.loadData(inPosition, columnsChanged);
+                                       }
+                               } else {
+
+                                       //empty data
+
+                                       return self.rowManager.setData([], inPosition, columnsChanged);
+                               }
+                       }
+               }
+       };
+
+       //clear data
+
+       Tabulator.prototype.clearData = function () {
+
+               if (this.modExists("ajax")) {
+
+                       this.modules.ajax.blockActiveRequest();
+               }
+
+               this.rowManager.clearData();
+       };
+
+       //get table data array
+
+       Tabulator.prototype.getData = function (active) {
+
+               if (active === true) {
+
+                       console.warn("passing a boolean to the getData function is deprecated, you should now pass the string 'active'");
+
+                       active = "active";
+               }
+
+               return this.rowManager.getData(active);
+       };
+
+       //get table data array count
+
+       Tabulator.prototype.getDataCount = function (active) {
+
+               if (active === true) {
+
+                       console.warn("passing a boolean to the getDataCount function is deprecated, you should now pass the string 'active'");
+
+                       active = "active";
+               }
+
+               return this.rowManager.getDataCount(active);
+       };
+
+       //search for specific row components
+
+       Tabulator.prototype.searchRows = function (field, type, value) {
+
+               if (this.modExists("filter", true)) {
+
+                       return this.modules.filter.search("rows", field, type, value);
+               }
+       };
+
+       //search for specific data
+
+       Tabulator.prototype.searchData = function (field, type, value) {
+
+               if (this.modExists("filter", true)) {
+
+                       return this.modules.filter.search("data", field, type, value);
+               }
+       };
+
+       //get table html
+
+       Tabulator.prototype.getHtml = function (visible, style, config) {
+
+               if (this.modExists("export", true)) {
+
+                       return this.modules.export.getHtml(visible, style, config);
+               }
+       };
+
+       //get print html
+
+       Tabulator.prototype.print = function (visible, style, config) {
+
+               if (this.modExists("print", true)) {
+
+                       return this.modules.print.printFullscreen(visible, style, config);
+               }
+       };
+
+       //retrieve Ajax URL
+
+       Tabulator.prototype.getAjaxUrl = function () {
+
+               if (this.modExists("ajax", true)) {
+
+                       return this.modules.ajax.getUrl();
+               }
+       };
+
+       //replace data, keeping table in position with same sort
+
+       Tabulator.prototype.replaceData = function (data, params, config) {
+
+               if (this.modExists("ajax")) {
+
+                       this.modules.ajax.blockActiveRequest();
+               }
+
+               return this._setData(data, params, config, true);
+       };
+
+       //update table data
+
+       Tabulator.prototype.updateData = function (data) {
+               var _this26 = this;
+
+               var self = this;
+
+               var responses = 0;
+
+               return new Promise(function (resolve, reject) {
+
+                       if (_this26.modExists("ajax")) {
+
+                               _this26.modules.ajax.blockActiveRequest();
+                       }
+
+                       if (typeof data === "string") {
+
+                               data = JSON.parse(data);
+                       }
+
+                       if (data) {
+
+                               data.forEach(function (item) {
+
+                                       var row = self.rowManager.findRow(item[self.options.index]);
+
+                                       if (row) {
+
+                                               responses++;
+
+                                               row.updateData(item).then(function () {
+
+                                                       responses--;
+
+                                                       if (!responses) {
+
+                                                               resolve();
+                                                       }
+                                               });
+                                       }
+                               });
+                       } else {
+
+                               console.warn("Update Error - No data provided");
+
+                               reject("Update Error - No data provided");
+                       }
+               });
+       };
+
+       Tabulator.prototype.addData = function (data, pos, index) {
+               var _this27 = this;
+
+               return new Promise(function (resolve, reject) {
+
+                       if (_this27.modExists("ajax")) {
+
+                               _this27.modules.ajax.blockActiveRequest();
+                       }
+
+                       if (typeof data === "string") {
+
+                               data = JSON.parse(data);
+                       }
+
+                       if (data) {
+
+                               _this27.rowManager.addRows(data, pos, index).then(function (rows) {
+
+                                       var output = [];
+
+                                       rows.forEach(function (row) {
+
+                                               output.push(row.getComponent());
+                                       });
+
+                                       resolve(output);
+                               });
+                       } else {
+
+                               console.warn("Update Error - No data provided");
+
+                               reject("Update Error - No data provided");
+                       }
+               });
+       };
+
+       //update table data
+
+       Tabulator.prototype.updateOrAddData = function (data) {
+               var _this28 = this;
+
+               var self = this,
+                   rows = [],
+                   responses = 0;
+
+               return new Promise(function (resolve, reject) {
+
+                       if (_this28.modExists("ajax")) {
+
+                               _this28.modules.ajax.blockActiveRequest();
+                       }
+
+                       if (typeof data === "string") {
+
+                               data = JSON.parse(data);
+                       }
+
+                       if (data) {
+
+                               data.forEach(function (item) {
+
+                                       var row = self.rowManager.findRow(item[self.options.index]);
+
+                                       responses++;
+
+                                       if (row) {
+
+                                               row.updateData(item).then(function () {
+
+                                                       responses--;
+
+                                                       rows.push(row.getComponent());
+
+                                                       if (!responses) {
+
+                                                               resolve(rows);
+                                                       }
+                                               });
+                                       } else {
+
+                                               self.rowManager.addRows(item).then(function (newRows) {
+
+                                                       responses--;
+
+                                                       rows.push(newRows[0].getComponent());
+
+                                                       if (!responses) {
+
+                                                               resolve(rows);
+                                                       }
+                                               });
+                                       }
+                               });
+                       } else {
+
+                               console.warn("Update Error - No data provided");
+
+                               reject("Update Error - No data provided");
+                       }
+               });
+       };
+
+       //get row object
+
+       Tabulator.prototype.getRow = function (index) {
+
+               var row = this.rowManager.findRow(index);
+
+               if (row) {
+
+                       return row.getComponent();
+               } else {
+
+                       console.warn("Find Error - No matching row found:", index);
+
+                       return false;
+               }
+       };
+
+       //get row object
+
+       Tabulator.prototype.getRowFromPosition = function (position, active) {
+
+               var row = this.rowManager.getRowFromPosition(position, active);
+
+               if (row) {
+
+                       return row.getComponent();
+               } else {
+
+                       console.warn("Find Error - No matching row found:", position);
+
+                       return false;
+               }
+       };
+
+       //delete row from table
+
+       Tabulator.prototype.deleteRow = function (index) {
+               var _this29 = this;
+
+               return new Promise(function (resolve, reject) {
+
+                       var self = _this29,
+                           count = 0,
+                           successCount = 0,
+                           foundRows = [];
+
+                       function doneCheck() {
+
+                               count++;
+
+                               if (count == index.length) {
+
+                                       if (successCount) {
+
+                                               self.rowManager.reRenderInPosition();
+
+                                               resolve();
+                                       }
+                               }
+                       }
+
+                       if (!Array.isArray(index)) {
+
+                               index = [index];
+                       }
+
+                       //find matching rows
+
+                       index.forEach(function (item) {
+
+                               var row = _this29.rowManager.findRow(item, true);
+
+                               if (row) {
+
+                                       foundRows.push(row);
+                               } else {
+
+                                       console.warn("Delete Error - No matching row found:", item);
+
+                                       reject("Delete Error - No matching row found");
+
+                                       doneCheck();
+                               }
+                       });
+
+                       //sort rows into correct order to ensure smooth delete from table
+
+                       foundRows.sort(function (a, b) {
+
+                               return _this29.rowManager.rows.indexOf(a) > _this29.rowManager.rows.indexOf(b) ? 1 : -1;
+                       });
+
+                       foundRows.forEach(function (row) {
+
+                               row.delete().then(function () {
+
+                                       successCount++;
+
+                                       doneCheck();
+                               }).catch(function (err) {
+
+                                       doneCheck();
+
+                                       reject(err);
+                               });
+                       });
+               });
+       };
+
+       //add row to table
+
+       Tabulator.prototype.addRow = function (data, pos, index) {
+               var _this30 = this;
+
+               return new Promise(function (resolve, reject) {
+
+                       if (typeof data === "string") {
+
+                               data = JSON.parse(data);
+                       }
+
+                       _this30.rowManager.addRows(data, pos, index).then(function (rows) {
+
+                               //recalc column calculations if present
+
+                               if (_this30.modExists("columnCalcs")) {
+
+                                       _this30.modules.columnCalcs.recalc(_this30.rowManager.activeRows);
+                               }
+
+                               resolve(rows[0].getComponent());
+                       });
+               });
+       };
+
+       //update a row if it exitsts otherwise create it
+
+       Tabulator.prototype.updateOrAddRow = function (index, data) {
+               var _this31 = this;
+
+               return new Promise(function (resolve, reject) {
+
+                       var row = _this31.rowManager.findRow(index);
+
+                       if (typeof data === "string") {
+
+                               data = JSON.parse(data);
+                       }
+
+                       if (row) {
+
+                               row.updateData(data).then(function () {
+
+                                       //recalc column calculations if present
+
+                                       if (_this31.modExists("columnCalcs")) {
+
+                                               _this31.modules.columnCalcs.recalc(_this31.rowManager.activeRows);
+                                       }
+
+                                       resolve(row.getComponent());
+                               }).catch(function (err) {
+
+                                       reject(err);
+                               });
+                       } else {
+
+                               row = _this31.rowManager.addRows(data).then(function (rows) {
+
+                                       //recalc column calculations if present
+
+                                       if (_this31.modExists("columnCalcs")) {
+
+                                               _this31.modules.columnCalcs.recalc(_this31.rowManager.activeRows);
+                                       }
+
+                                       resolve(rows[0].getComponent());
+                               }).catch(function (err) {
+
+                                       reject(err);
+                               });
+                       }
+               });
+       };
+
+       //update row data
+
+       Tabulator.prototype.updateRow = function (index, data) {
+               var _this32 = this;
+
+               return new Promise(function (resolve, reject) {
+
+                       var row = _this32.rowManager.findRow(index);
+
+                       if (typeof data === "string") {
+
+                               data = JSON.parse(data);
+                       }
+
+                       if (row) {
+
+                               row.updateData(data).then(function () {
+
+                                       resolve(row.getComponent());
+                               }).catch(function (err) {
+
+                                       reject(err);
+                               });
+                       } else {
+
+                               console.warn("Update Error - No matching row found:", index);
+
+                               reject("Update Error - No matching row found");
+                       }
+               });
+       };
+
+       //scroll to row in DOM
+
+       Tabulator.prototype.scrollToRow = function (index, position, ifVisible) {
+               var _this33 = this;
+
+               return new Promise(function (resolve, reject) {
+
+                       var row = _this33.rowManager.findRow(index);
+
+                       if (row) {
+
+                               _this33.rowManager.scrollToRow(row, position, ifVisible).then(function () {
+
+                                       resolve();
+                               }).catch(function (err) {
+
+                                       reject(err);
+                               });
+                       } else {
+
+                               console.warn("Scroll Error - No matching row found:", index);
+
+                               reject("Scroll Error - No matching row found");
+                       }
+               });
+       };
+
+       Tabulator.prototype.moveRow = function (from, to, after) {
+
+               var fromRow = this.rowManager.findRow(from);
+
+               if (fromRow) {
+
+                       fromRow.moveToRow(to, after);
+               } else {
+
+                       console.warn("Move Error - No matching row found:", from);
+               }
+       };
+
+       Tabulator.prototype.getRows = function (active) {
+
+               if (active === true) {
+
+                       console.warn("passing a boolean to the getRows function is deprecated, you should now pass the string 'active'");
+
+                       active = "active";
+               }
+
+               return this.rowManager.getComponents(active);
+       };
+
+       //get position of row in table
+
+       Tabulator.prototype.getRowPosition = function (index, active) {
+
+               var row = this.rowManager.findRow(index);
+
+               if (row) {
+
+                       return this.rowManager.getRowPosition(row, active);
+               } else {
+
+                       console.warn("Position Error - No matching row found:", index);
+
+                       return false;
+               }
+       };
+
+       //copy table data to clipboard
+
+       Tabulator.prototype.copyToClipboard = function (selector) {
+
+               if (this.modExists("clipboard", true)) {
+
+                       this.modules.clipboard.copy(selector);
+               }
+       };
+
+       /////////////// Column Functions  ///////////////
+
+
+       Tabulator.prototype.setColumns = function (definition) {
+
+               this.columnManager.setColumns(definition);
+       };
+
+       Tabulator.prototype.getColumns = function (structured) {
+
+               return this.columnManager.getComponents(structured);
+       };
+
+       Tabulator.prototype.getColumn = function (field) {
+
+               var col = this.columnManager.findColumn(field);
+
+               if (col) {
+
+                       return col.getComponent();
+               } else {
+
+                       console.warn("Find Error - No matching column found:", field);
+
+                       return false;
+               }
+       };
+
+       Tabulator.prototype.getColumnDefinitions = function () {
+
+               return this.columnManager.getDefinitionTree();
+       };
+
+       Tabulator.prototype.getColumnLayout = function () {
+
+               if (this.modExists("persistence", true)) {
+
+                       return this.modules.persistence.parseColumns(this.columnManager.getColumns());
+               }
+       };
+
+       Tabulator.prototype.setColumnLayout = function (layout) {
+
+               if (this.modExists("persistence", true)) {
+
+                       this.columnManager.setColumns(this.modules.persistence.mergeDefinition(this.options.columns, layout));
+
+                       return true;
+               }
+
+               return false;
+       };
+
+       Tabulator.prototype.showColumn = function (field) {
+
+               var column = this.columnManager.findColumn(field);
+
+               if (column) {
+
+                       column.show();
+
+                       if (this.options.responsiveLayout && this.modExists("responsiveLayout", true)) {
+
+                               this.modules.responsiveLayout.update();
+                       }
+               } else {
+
+                       console.warn("Column Show Error - No matching column found:", field);
+
+                       return false;
+               }
+       };
+
+       Tabulator.prototype.hideColumn = function (field) {
+
+               var column = this.columnManager.findColumn(field);
+
+               if (column) {
+
+                       column.hide();
+
+                       if (this.options.responsiveLayout && this.modExists("responsiveLayout", true)) {
+
+                               this.modules.responsiveLayout.update();
+                       }
+               } else {
+
+                       console.warn("Column Hide Error - No matching column found:", field);
+
+                       return false;
+               }
+       };
+
+       Tabulator.prototype.toggleColumn = function (field) {
+
+               var column = this.columnManager.findColumn(field);
+
+               if (column) {
+
+                       if (column.visible) {
+
+                               column.hide();
+                       } else {
+
+                               column.show();
+                       }
+               } else {
+
+                       console.warn("Column Visibility Toggle Error - No matching column found:", field);
+
+                       return false;
+               }
+       };
+
+       Tabulator.prototype.addColumn = function (definition, before, field) {
+               var _this34 = this;
+
+               return new Promise(function (resolve, reject) {
+
+                       var column = _this34.columnManager.findColumn(field);
+
+                       _this34.columnManager.addColumn(definition, before, column).then(function (column) {
+
+                               resolve(column.getComponent());
+                       }).catch(function (err) {
+
+                               reject(err);
+                       });
+               });
+       };
+
+       Tabulator.prototype.deleteColumn = function (field) {
+               var _this35 = this;
+
+               return new Promise(function (resolve, reject) {
+
+                       var column = _this35.columnManager.findColumn(field);
+
+                       if (column) {
+
+                               column.delete().then(function () {
+
+                                       resolve();
+                               }).catch(function (err) {
+
+                                       reject(err);
+                               });
+                       } else {
+
+                               console.warn("Column Delete Error - No matching column found:", field);
+
+                               reject();
+                       }
+               });
+       };
+
+       Tabulator.prototype.updateColumnDefinition = function (field, definition) {
+               var _this36 = this;
+
+               return new Promise(function (resolve, reject) {
+
+                       var column = _this36.columnManager.findColumn(field);
+
+                       if (column) {
+
+                               column.updateDefinition(definition).then(function (col) {
+
+                                       resolve(col);
+                               }).catch(function (err) {
+
+                                       reject(err);
+                               });
+                       } else {
+
+                               console.warn("Column Update Error - No matching column found:", field);
+
+                               reject();
+                       }
+               });
+       };
+
+       Tabulator.prototype.moveColumn = function (from, to, after) {
+
+               var fromColumn = this.columnManager.findColumn(from);
+
+               var toColumn = this.columnManager.findColumn(to);
+
+               if (fromColumn) {
+
+                       if (toColumn) {
+
+                               this.columnManager.moveColumn(fromColumn, toColumn, after);
+                       } else {
+
+                               console.warn("Move Error - No matching column found:", toColumn);
+                       }
+               } else {
+
+                       console.warn("Move Error - No matching column found:", from);
+               }
+       };
+
+       //scroll to column in DOM
+
+       Tabulator.prototype.scrollToColumn = function (field, position, ifVisible) {
+               var _this37 = this;
+
+               return new Promise(function (resolve, reject) {
+
+                       var column = _this37.columnManager.findColumn(field);
+
+                       if (column) {
+
+                               _this37.columnManager.scrollToColumn(column, position, ifVisible).then(function () {
+
+                                       resolve();
+                               }).catch(function (err) {
+
+                                       reject(err);
+                               });
+                       } else {
+
+                               console.warn("Scroll Error - No matching column found:", field);
+
+                               reject("Scroll Error - No matching column found");
+                       }
+               });
+       };
+
+       //////////// Localization Functions  ////////////
+
+       Tabulator.prototype.setLocale = function (locale) {
+
+               this.modules.localize.setLocale(locale);
+       };
+
+       Tabulator.prototype.getLocale = function () {
+
+               return this.modules.localize.getLocale();
+       };
+
+       Tabulator.prototype.getLang = function (locale) {
+
+               return this.modules.localize.getLang(locale);
+       };
+
+       //////////// General Public Functions ////////////
+
+
+       //redraw list without updating data
+
+       Tabulator.prototype.redraw = function (force) {
+
+               this.columnManager.redraw(force);
+
+               this.rowManager.redraw(force);
+       };
+
+       Tabulator.prototype.setHeight = function (height) {
+
+               if (this.rowManager.renderMode !== "classic") {
+
+                       this.options.height = isNaN(height) ? height : height + "px";
+
+                       this.element.style.height = this.options.height;
+
+                       this.rowManager.setRenderMode();
+
+                       this.rowManager.redraw();
+               } else {
+
+                       console.warn("setHeight function is not available in classic render mode");
+               }
+       };
+
+       ///////////////////// Sorting ////////////////////
+
+
+       //trigger sort
+
+       Tabulator.prototype.setSort = function (sortList, dir) {
+
+               if (this.modExists("sort", true)) {
+
+                       this.modules.sort.setSort(sortList, dir);
+
+                       this.rowManager.sorterRefresh();
+               }
+       };
+
+       Tabulator.prototype.getSorters = function () {
+
+               if (this.modExists("sort", true)) {
+
+                       return this.modules.sort.getSort();
+               }
+       };
+
+       Tabulator.prototype.clearSort = function () {
+
+               if (this.modExists("sort", true)) {
+
+                       this.modules.sort.clear();
+
+                       this.rowManager.sorterRefresh();
+               }
+       };
+
+       ///////////////////// Filtering ////////////////////
+
+
+       //set standard filters
+
+       Tabulator.prototype.setFilter = function (field, type, value, params) {
+
+               if (this.modExists("filter", true)) {
+
+                       this.modules.filter.setFilter(field, type, value, params);
+
+                       this.rowManager.filterRefresh();
+               }
+       };
+
+       //add filter to array
+
+       Tabulator.prototype.addFilter = function (field, type, value, params) {
+
+               if (this.modExists("filter", true)) {
+
+                       this.modules.filter.addFilter(field, type, value, params);
+
+                       this.rowManager.filterRefresh();
+               }
+       };
+
+       //get all filters
+
+       Tabulator.prototype.getFilters = function (all) {
+
+               if (this.modExists("filter", true)) {
+
+                       return this.modules.filter.getFilters(all);
+               }
+       };
+
+       Tabulator.prototype.setHeaderFilterFocus = function (field) {
+
+               if (this.modExists("filter", true)) {
+
+                       var column = this.columnManager.findColumn(field);
+
+                       if (column) {
+
+                               this.modules.filter.setHeaderFilterFocus(column);
+                       } else {
+
+                               console.warn("Column Filter Focus Error - No matching column found:", field);
+
+                               return false;
+                       }
+               }
+       };
+
+       Tabulator.prototype.getHeaderFilterValue = function (field) {
+
+               if (this.modExists("filter", true)) {
+
+                       var column = this.columnManager.findColumn(field);
+
+                       if (column) {
+
+                               return this.modules.filter.getHeaderFilterValue(column);
+                       } else {
+
+                               console.warn("Column Filter Error - No matching column found:", field);
+                       }
+               }
+       };
+
+       Tabulator.prototype.setHeaderFilterValue = function (field, value) {
+
+               if (this.modExists("filter", true)) {
+
+                       var column = this.columnManager.findColumn(field);
+
+                       if (column) {
+
+                               this.modules.filter.setHeaderFilterValue(column, value);
+                       } else {
+
+                               console.warn("Column Filter Error - No matching column found:", field);
+
+                               return false;
+                       }
+               }
+       };
+
+       Tabulator.prototype.getHeaderFilters = function () {
+
+               if (this.modExists("filter", true)) {
+
+                       return this.modules.filter.getHeaderFilters();
+               }
+       };
+
+       //remove filter from array
+
+       Tabulator.prototype.removeFilter = function (field, type, value) {
+
+               if (this.modExists("filter", true)) {
+
+                       this.modules.filter.removeFilter(field, type, value);
+
+                       this.rowManager.filterRefresh();
+               }
+       };
+
+       //clear filters
+
+       Tabulator.prototype.clearFilter = function (all) {
+
+               if (this.modExists("filter", true)) {
+
+                       this.modules.filter.clearFilter(all);
+
+                       this.rowManager.filterRefresh();
+               }
+       };
+
+       //clear header filters
+
+       Tabulator.prototype.clearHeaderFilter = function () {
+
+               if (this.modExists("filter", true)) {
+
+                       this.modules.filter.clearHeaderFilter();
+
+                       this.rowManager.filterRefresh();
+               }
+       };
+
+       ///////////////////// select ////////////////////
+
+       Tabulator.prototype.selectRow = function (rows) {
+
+               if (this.modExists("selectRow", true)) {
+
+                       if (rows === true) {
+
+                               console.warn("passing a boolean to the selectRowselectRow function is deprecated, you should now pass the string 'active'");
+
+                               rows = "active";
+                       }
+
+                       this.modules.selectRow.selectRows(rows);
+               }
+       };
+
+       Tabulator.prototype.deselectRow = function (rows) {
+
+               if (this.modExists("selectRow", true)) {
+
+                       this.modules.selectRow.deselectRows(rows);
+               }
+       };
+
+       Tabulator.prototype.toggleSelectRow = function (row) {
+
+               if (this.modExists("selectRow", true)) {
+
+                       this.modules.selectRow.toggleRow(row);
+               }
+       };
+
+       Tabulator.prototype.getSelectedRows = function () {
+
+               if (this.modExists("selectRow", true)) {
+
+                       return this.modules.selectRow.getSelectedRows();
+               }
+       };
+
+       Tabulator.prototype.getSelectedData = function () {
+
+               if (this.modExists("selectRow", true)) {
+
+                       return this.modules.selectRow.getSelectedData();
+               }
+       };
+
+       ///////////////////// validation  ////////////////////
+
+       Tabulator.prototype.getInvalidCells = function () {
+
+               if (this.modExists("validate", true)) {
+
+                       return this.modules.validate.getInvalidCells();
+               }
+       };
+
+       Tabulator.prototype.clearCellValidation = function (cells) {
+               var _this38 = this;
+
+               if (this.modExists("validate", true)) {
+
+                       if (!cells) {
+
+                               cells = this.modules.validate.getInvalidCells();
+                       }
+
+                       if (!Array.isArray(cells)) {
+
+                               cells = [cells];
+                       }
+
+                       cells.forEach(function (cell) {
+
+                               _this38.modules.validate.clearValidation(cell._getSelf());
+                       });
+               }
+       };
+
+       Tabulator.prototype.validate = function (cells) {
+
+               var output = [];
+
+               //clear row data
+
+               this.rowManager.rows.forEach(function (row) {
+
+                       var valid = row.validate();
+
+                       if (valid !== true) {
+
+                               output = output.concat(valid);
+                       }
+               });
+
+               return output.length ? output : true;
+       };
+
+       //////////// Pagination Functions  ////////////
+
+
+       Tabulator.prototype.setMaxPage = function (max) {
+
+               if (this.options.pagination && this.modExists("page")) {
+
+                       this.modules.page.setMaxPage(max);
+               } else {
+
+                       return false;
+               }
+       };
+
+       Tabulator.prototype.setPage = function (page) {
+
+               if (this.options.pagination && this.modExists("page")) {
+
+                       return this.modules.page.setPage(page);
+               } else {
+
+                       return new Promise(function (resolve, reject) {
+                               reject();
+                       });
+               }
+       };
+
+       Tabulator.prototype.setPageToRow = function (row) {
+               var _this39 = this;
+
+               return new Promise(function (resolve, reject) {
+
+                       if (_this39.options.pagination && _this39.modExists("page")) {
+
+                               row = _this39.rowManager.findRow(row);
+
+                               if (row) {
+
+                                       _this39.modules.page.setPageToRow(row).then(function () {
+
+                                               resolve();
+                                       }).catch(function () {
+
+                                               reject();
+                                       });
+                               } else {
+
+                                       reject();
+                               }
+                       } else {
+
+                               reject();
+                       }
+               });
+       };
+
+       Tabulator.prototype.setPageSize = function (size) {
+
+               if (this.options.pagination && this.modExists("page")) {
+
+                       this.modules.page.setPageSize(size);
+
+                       this.modules.page.setPage(1).then(function () {}).catch(function () {});
+               } else {
+
+                       return false;
+               }
+       };
+
+       Tabulator.prototype.getPageSize = function () {
+
+               if (this.options.pagination && this.modExists("page", true)) {
+
+                       return this.modules.page.getPageSize();
+               }
+       };
+
+       Tabulator.prototype.previousPage = function () {
+
+               if (this.options.pagination && this.modExists("page")) {
+
+                       this.modules.page.previousPage();
+               } else {
+
+                       return false;
+               }
+       };
+
+       Tabulator.prototype.nextPage = function () {
+
+               if (this.options.pagination && this.modExists("page")) {
+
+                       this.modules.page.nextPage();
+               } else {
+
+                       return false;
+               }
+       };
+
+       Tabulator.prototype.getPage = function () {
+
+               if (this.options.pagination && this.modExists("page")) {
+
+                       return this.modules.page.getPage();
+               } else {
+
+                       return false;
+               }
+       };
+
+       Tabulator.prototype.getPageMax = function () {
+
+               if (this.options.pagination && this.modExists("page")) {
+
+                       return this.modules.page.getPageMax();
+               } else {
+
+                       return false;
+               }
+       };
+
+       ///////////////// Grouping Functions ///////////////
+
+
+       Tabulator.prototype.setGroupBy = function (groups) {
+
+               if (this.modExists("groupRows", true)) {
+
+                       this.options.groupBy = groups;
+
+                       this.modules.groupRows.initialize();
+
+                       this.rowManager.refreshActiveData("display");
+
+                       if (this.options.persistence && this.modExists("persistence", true) && this.modules.persistence.config.group) {
+
+                               this.modules.persistence.save("group");
+                       }
+               } else {
+
+                       return false;
+               }
+       };
+
+       Tabulator.prototype.setGroupValues = function (groupValues) {
+
+               if (this.modExists("groupRows", true)) {
+
+                       this.options.groupValues = groupValues;
+
+                       this.modules.groupRows.initialize();
+
+                       this.rowManager.refreshActiveData("display");
+
+                       if (this.options.persistence && this.modExists("persistence", true) && this.modules.persistence.config.group) {
+
+                               this.modules.persistence.save("group");
+                       }
+               } else {
+
+                       return false;
+               }
+       };
+
+       Tabulator.prototype.setGroupStartOpen = function (values) {
+
+               if (this.modExists("groupRows", true)) {
+
+                       this.options.groupStartOpen = values;
+
+                       this.modules.groupRows.initialize();
+
+                       if (this.options.groupBy) {
+
+                               this.rowManager.refreshActiveData("group");
+
+                               if (this.options.persistence && this.modExists("persistence", true) && this.modules.persistence.config.group) {
+
+                                       this.modules.persistence.save("group");
+                               }
+                       } else {
+
+                               console.warn("Grouping Update - cant refresh view, no groups have been set");
+                       }
+               } else {
+
+                       return false;
+               }
+       };
+
+       Tabulator.prototype.setGroupHeader = function (values) {
+
+               if (this.modExists("groupRows", true)) {
+
+                       this.options.groupHeader = values;
+
+                       this.modules.groupRows.initialize();
+
+                       if (this.options.groupBy) {
+
+                               this.rowManager.refreshActiveData("group");
+
+                               if (this.options.persistence && this.modExists("persistence", true) && this.modules.persistence.config.group) {
+
+                                       this.modules.persistence.save("group");
+                               }
+                       } else {
+
+                               console.warn("Grouping Update - cant refresh view, no groups have been set");
+                       }
+               } else {
+
+                       return false;
+               }
+       };
+
+       Tabulator.prototype.getGroups = function (values) {
+
+               if (this.modExists("groupRows", true)) {
+
+                       return this.modules.groupRows.getGroups(true);
+               } else {
+
+                       return false;
+               }
+       };
+
+       // get grouped table data in the same format as getData()
+
+       Tabulator.prototype.getGroupedData = function () {
+
+               if (this.modExists("groupRows", true)) {
+
+                       return this.options.groupBy ? this.modules.groupRows.getGroupedData() : this.getData();
+               }
+       };
+
+       Tabulator.prototype.getEditedCells = function () {
+
+               if (this.modExists("edit", true)) {
+
+                       return this.modules.edit.getEditedCells();
+               }
+       };
+
+       Tabulator.prototype.clearCellEdited = function (cells) {
+               var _this40 = this;
+
+               if (this.modExists("edit", true)) {
+
+                       if (!cells) {
+
+                               cells = this.modules.edit.getEditedCells();
+                       }
+
+                       if (!Array.isArray(cells)) {
+
+                               cells = [cells];
+                       }
+
+                       cells.forEach(function (cell) {
+
+                               _this40.modules.edit.clearEdited(cell._getSelf());
+                       });
+               }
+       };
+
+       ///////////////// Column Calculation Functions ///////////////
+
+       Tabulator.prototype.getCalcResults = function () {
+
+               if (this.modExists("columnCalcs", true)) {
+
+                       return this.modules.columnCalcs.getResults();
+               } else {
+
+                       return false;
+               }
+       };
+
+       Tabulator.prototype.recalc = function () {
+
+               if (this.modExists("columnCalcs", true)) {
+
+                       this.modules.columnCalcs.recalcAll(this.rowManager.activeRows);
+               }
+       };
+
+       /////////////// Navigation Management //////////////
+
+
+       Tabulator.prototype.navigatePrev = function () {
+
+               var cell = false;
+
+               if (this.modExists("edit", true)) {
+
+                       cell = this.modules.edit.currentCell;
+
+                       if (cell) {
+
+                               return cell.nav().prev();
+                       }
+               }
+
+               return false;
+       };
+
+       Tabulator.prototype.navigateNext = function () {
+
+               var cell = false;
+
+               if (this.modExists("edit", true)) {
+
+                       cell = this.modules.edit.currentCell;
+
+                       if (cell) {
+
+                               return cell.nav().next();
+                       }
+               }
+
+               return false;
+       };
+
+       Tabulator.prototype.navigateLeft = function () {
+
+               var cell = false;
+
+               if (this.modExists("edit", true)) {
+
+                       cell = this.modules.edit.currentCell;
+
+                       if (cell) {
+
+                               e.preventDefault();
+
+                               return cell.nav().left();
+                       }
+               }
+
+               return false;
+       };
+
+       Tabulator.prototype.navigateRight = function () {
+
+               var cell = false;
+
+               if (this.modExists("edit", true)) {
+
+                       cell = this.modules.edit.currentCell;
+
+                       if (cell) {
+
+                               e.preventDefault();
+
+                               return cell.nav().right();
+                       }
+               }
+
+               return false;
+       };
+
+       Tabulator.prototype.navigateUp = function () {
+
+               var cell = false;
+
+               if (this.modExists("edit", true)) {
+
+                       cell = this.modules.edit.currentCell;
+
+                       if (cell) {
+
+                               e.preventDefault();
+
+                               return cell.nav().up();
+                       }
+               }
+
+               return false;
+       };
+
+       Tabulator.prototype.navigateDown = function () {
+
+               var cell = false;
+
+               if (this.modExists("edit", true)) {
+
+                       cell = this.modules.edit.currentCell;
+
+                       if (cell) {
+
+                               e.preventDefault();
+
+                               return cell.nav().down();
+                       }
+               }
+
+               return false;
+       };
+
+       /////////////// History Management //////////////
+
+       Tabulator.prototype.undo = function () {
+
+               if (this.options.history && this.modExists("history", true)) {
+
+                       return this.modules.history.undo();
+               } else {
+
+                       return false;
+               }
+       };
+
+       Tabulator.prototype.redo = function () {
+
+               if (this.options.history && this.modExists("history", true)) {
+
+                       return this.modules.history.redo();
+               } else {
+
+                       return false;
+               }
+       };
+
+       Tabulator.prototype.getHistoryUndoSize = function () {
+
+               if (this.options.history && this.modExists("history", true)) {
+
+                       return this.modules.history.getHistoryUndoSize();
+               } else {
+
+                       return false;
+               }
+       };
+
+       Tabulator.prototype.getHistoryRedoSize = function () {
+
+               if (this.options.history && this.modExists("history", true)) {
+
+                       return this.modules.history.getHistoryRedoSize();
+               } else {
+
+                       return false;
+               }
+       };
+
+       /////////////// Download Management //////////////
+
+
+       Tabulator.prototype.download = function (type, filename, options, active) {
+
+               if (this.modExists("download", true)) {
+
+                       this.modules.download.download(type, filename, options, active);
+               }
+       };
+
+       Tabulator.prototype.downloadToTab = function (type, filename, options, active) {
+
+               if (this.modExists("download", true)) {
+
+                       this.modules.download.download(type, filename, options, active, true);
+               }
+       };
+
+       /////////// Inter Table Communications ///////////
+
+
+       Tabulator.prototype.tableComms = function (table, module, action, data) {
+
+               this.modules.comms.receive(table, module, action, data);
+       };
+
+       ////////////// Extension Management //////////////
+
+
+       //object to hold module
+
+       Tabulator.prototype.moduleBindings = {};
+
+       //extend module
+
+       Tabulator.prototype.extendModule = function (name, property, values) {
+
+               if (Tabulator.prototype.moduleBindings[name]) {
+
+                       var source = Tabulator.prototype.moduleBindings[name].prototype[property];
+
+                       if (source) {
+
+                               if ((typeof values === 'undefined' ? 'undefined' : _typeof(values)) == "object") {
+
+                                       for (var key in values) {
+
+                                               source[key] = values[key];
+                                       }
+                               } else {
+
+                                       console.warn("Module Error - Invalid value type, it must be an object");
+                               }
+                       } else {
+
+                               console.warn("Module Error - property does not exist:", property);
+                       }
+               } else {
+
+                       console.warn("Module Error - module does not exist:", name);
+               }
+       };
+
+       //add module to tabulator
+
+       Tabulator.prototype.registerModule = function (name, module) {
+
+               var self = this;
+
+               Tabulator.prototype.moduleBindings[name] = module;
+       };
+
+       //ensure that module are bound to instantiated function
+
+       Tabulator.prototype.bindModules = function () {
+
+               this.modules = {};
+
+               for (var name in Tabulator.prototype.moduleBindings) {
+
+                       this.modules[name] = new Tabulator.prototype.moduleBindings[name](this);
+               }
+       };
+
+       //Check for module
+
+       Tabulator.prototype.modExists = function (plugin, required) {
+
+               if (this.modules[plugin]) {
+
+                       return true;
+               } else {
+
+                       if (required) {
+
+                               console.error("Tabulator Module Not Installed: " + plugin);
+                       }
+
+                       return false;
+               }
+       };
+
+       Tabulator.prototype.helpers = {
+
+               elVisible: function elVisible(el) {
+
+                       return !(el.offsetWidth <= 0 && el.offsetHeight <= 0);
+               },
+
+               elOffset: function elOffset(el) {
+
+                       var box = el.getBoundingClientRect();
+
+                       return {
+
+                               top: box.top + window.pageYOffset - document.documentElement.clientTop,
+
+                               left: box.left + window.pageXOffset - document.documentElement.clientLeft
+
+                       };
+               },
+
+               deepClone: function deepClone(obj) {
+
+                       var clone = Object.assign(Array.isArray(obj) ? [] : {}, obj);
+
+                       for (var i in obj) {
+
+                               if (obj[i] != null && _typeof(obj[i]) === "object") {
+
+                                       if (obj[i] instanceof Date) {
+
+                                               clone[i] = new Date(obj[i]);
+                                       } else {
+
+                                               clone[i] = this.deepClone(obj[i]);
+                                       }
+                               }
+                       }
+
+                       return clone;
+               }
+
+       };
+
+       Tabulator.prototype.comms = {
+
+               tables: [],
+
+               register: function register(table) {
+
+                       Tabulator.prototype.comms.tables.push(table);
+               },
+
+               deregister: function deregister(table) {
+
+                       var index = Tabulator.prototype.comms.tables.indexOf(table);
+
+                       if (index > -1) {
+
+                               Tabulator.prototype.comms.tables.splice(index, 1);
+                       }
+               },
+
+               lookupTable: function lookupTable(query, silent) {
+
+                       var results = [],
+                           matches,
+                           match;
+
+                       if (typeof query === "string") {
+
+                               matches = document.querySelectorAll(query);
+
+                               if (matches.length) {
+
+                                       for (var i = 0; i < matches.length; i++) {
+
+                                               match = Tabulator.prototype.comms.matchElement(matches[i]);
+
+                                               if (match) {
+
+                                                       results.push(match);
+                                               }
+                                       }
+                               }
+                       } else if (typeof HTMLElement !== "undefined" && query instanceof HTMLElement || query instanceof Tabulator) {
+
+                               match = Tabulator.prototype.comms.matchElement(query);
+
+                               if (match) {
+
+                                       results.push(match);
+                               }
+                       } else if (Array.isArray(query)) {
+
+                               query.forEach(function (item) {
+
+                                       results = results.concat(Tabulator.prototype.comms.lookupTable(item));
+                               });
+                       } else {
+
+                               if (!silent) {
+
+                                       console.warn("Table Connection Error - Invalid Selector", query);
+                               }
+                       }
+
+                       return results;
+               },
+
+               matchElement: function matchElement(element) {
+
+                       return Tabulator.prototype.comms.tables.find(function (table) {
+
+                               return element instanceof Tabulator ? table === element : table.element === element;
+                       });
+               }
+
+       };
+
+       Tabulator.prototype.findTable = function (query) {
+
+               var results = Tabulator.prototype.comms.lookupTable(query, true);
+
+               return Array.isArray(results) && !results.length ? false : results;
+       };
+
+       var Layout = function Layout(table) {
+
+               this.table = table;
+
+               this.mode = null;
+       };
+
+       //initialize layout system
+
+
+       Layout.prototype.initialize = function (layout) {
+
+               if (this.modes[layout]) {
+
+                       this.mode = layout;
+               } else {
+
+                       console.warn("Layout Error - invalid mode set, defaulting to 'fitData' : " + layout);
+
+                       this.mode = 'fitData';
+               }
+
+               this.table.element.setAttribute("tabulator-layout", this.mode);
+       };
+
+       Layout.prototype.getMode = function () {
+
+               return this.mode;
+       };
+
+       //trigger table layout
+
+
+       Layout.prototype.layout = function () {
+
+               this.modes[this.mode].call(this, this.table.columnManager.columnsByIndex);
+       };
+
+       //layout render functions
+
+
+       Layout.prototype.modes = {
+
+               //resize columns to fit data they contain
+
+
+               "fitData": function fitData(columns) {
+
+                       if (this.table.options.virtualDomHoz) {
+
+                               this.table.vdomHoz.fitDataLayoutOverride();
+                       } else {
+
+                               columns.forEach(function (column) {
+
+                                       column.reinitializeWidth();
+                               });
+                       }
+
+                       if (this.table.options.responsiveLayout && this.table.modExists("responsiveLayout", true)) {
+
+                               this.table.modules.responsiveLayout.update();
+                       }
+               },
+
+               //resize columns to fit data they contain and stretch row to fill table
+
+
+               "fitDataFill": function fitDataFill(columns) {
+
+                       columns.forEach(function (column) {
+
+                               column.reinitializeWidth();
+                       });
+
+                       if (this.table.options.responsiveLayout && this.table.modExists("responsiveLayout", true)) {
+
+                               this.table.modules.responsiveLayout.update();
+                       }
+               },
+
+               //resize columns to fit data they contain
+
+
+               "fitDataTable": function fitDataTable(columns) {
+
+                       columns.forEach(function (column) {
+
+                               column.reinitializeWidth();
+                       });
+
+                       if (this.table.options.responsiveLayout && this.table.modExists("responsiveLayout", true)) {
+
+                               this.table.modules.responsiveLayout.update();
+                       }
+               },
+
+               //resize columns to fit data the contain and stretch last column to fill table
+
+
+               "fitDataStretch": function fitDataStretch(columns) {
+                       var _this41 = this;
+
+                       var colsWidth = 0,
+                           tableWidth = this.table.rowManager.element.clientWidth,
+                           gap = 0,
+                           lastCol = false;
+
+                       columns.forEach(function (column, i) {
+
+                               if (!column.widthFixed) {
+
+                                       column.reinitializeWidth();
+                               }
+
+                               if (_this41.table.options.responsiveLayout ? column.modules.responsive.visible : column.visible) {
+
+                                       lastCol = column;
+                               }
+
+                               if (column.visible) {
+
+                                       colsWidth += column.getWidth();
+                               }
+                       });
+
+                       if (lastCol) {
+
+                               gap = tableWidth - colsWidth + lastCol.getWidth();
+
+                               if (this.table.options.responsiveLayout && this.table.modExists("responsiveLayout", true)) {
+
+                                       lastCol.setWidth(0);
+
+                                       this.table.modules.responsiveLayout.update();
+                               }
+
+                               if (gap > 0) {
+
+                                       lastCol.setWidth(gap);
+                               } else {
+
+                                       lastCol.reinitializeWidth();
+                               }
+                       } else {
+
+                               if (this.table.options.responsiveLayout && this.table.modExists("responsiveLayout", true)) {
+
+                                       this.table.modules.responsiveLayout.update();
+                               }
+                       }
+               },
+
+               //resize columns to fit
+
+
+               "fitColumns": function fitColumns(columns) {
+
+                       var self = this;
+
+                       var totalWidth = self.table.element.clientWidth; //table element width
+
+
+                       var fixedWidth = 0; //total width of columns with a defined width
+
+
+                       var flexWidth = 0; //total width available to flexible columns
+
+
+                       var flexGrowUnits = 0; //total number of widthGrow blocks accross all columns
+
+
+                       var flexColWidth = 0; //desired width of flexible columns
+
+
+                       var flexColumns = []; //array of flexible width columns
+
+
+                       var fixedShrinkColumns = []; //array of fixed width columns that can shrink
+
+
+                       var flexShrinkUnits = 0; //total number of widthShrink blocks accross all columns
+
+
+                       var overflowWidth = 0; //horizontal overflow width
+
+
+                       var gapFill = 0; //number of pixels to be added to final column to close and half pixel gaps
+
+
+                       function calcWidth(width) {
+
+                               var colWidth;
+
+                               if (typeof width == "string") {
+
+                                       if (width.indexOf("%") > -1) {
+
+                                               colWidth = totalWidth / 100 * parseInt(width);
+                                       } else {
+
+                                               colWidth = parseInt(width);
+                                       }
+                               } else {
+
+                                       colWidth = width;
+                               }
+
+                               return colWidth;
+                       }
+
+                       //ensure columns resize to take up the correct amount of space
+
+
+                       function scaleColumns(columns, freeSpace, colWidth, shrinkCols) {
+
+                               var oversizeCols = [],
+                                   oversizeSpace = 0,
+                                   remainingSpace = 0,
+                                   nextColWidth = 0,
+                                   gap = 0,
+                                   changeUnits = 0,
+                                   undersizeCols = [];
+
+                               function calcGrow(col) {
+
+                                       return colWidth * (col.column.definition.widthGrow || 1);
+                               }
+
+                               function calcShrink(col) {
+
+                                       return calcWidth(col.width) - colWidth * (col.column.definition.widthShrink || 0);
+                               }
+
+                               columns.forEach(function (col, i) {
+
+                                       var width = shrinkCols ? calcShrink(col) : calcGrow(col);
+
+                                       if (col.column.minWidth >= width) {
+
+                                               oversizeCols.push(col);
+                                       } else {
+
+                                               undersizeCols.push(col);
+
+                                               changeUnits += shrinkCols ? col.column.definition.widthShrink || 1 : col.column.definition.widthGrow || 1;
+                                       }
+                               });
+
+                               if (oversizeCols.length) {
+
+                                       oversizeCols.forEach(function (col) {
+
+                                               oversizeSpace += shrinkCols ? col.width - col.column.minWidth : col.column.minWidth;
+
+                                               col.width = col.column.minWidth;
+                                       });
+
+                                       remainingSpace = freeSpace - oversizeSpace;
+
+                                       nextColWidth = changeUnits ? Math.floor(remainingSpace / changeUnits) : remainingSpace;
+
+                                       gap = remainingSpace - nextColWidth * changeUnits;
+
+                                       gap += scaleColumns(undersizeCols, remainingSpace, nextColWidth, shrinkCols);
+                               } else {
+
+                                       gap = changeUnits ? freeSpace - Math.floor(freeSpace / changeUnits) * changeUnits : freeSpace;
+
+                                       undersizeCols.forEach(function (column) {
+
+                                               column.width = shrinkCols ? calcShrink(column) : calcGrow(column);
+                                       });
+                               }
+
+                               return gap;
+                       }
+
+                       if (this.table.options.responsiveLayout && this.table.modExists("responsiveLayout", true)) {
+
+                               this.table.modules.responsiveLayout.update();
+                       }
+
+                       //adjust for vertical scrollbar if present
+
+
+                       if (this.table.rowManager.element.scrollHeight > this.table.rowManager.element.clientHeight) {
+
+                               totalWidth -= this.table.rowManager.element.offsetWidth - this.table.rowManager.element.clientWidth;
+                       }
+
+                       columns.forEach(function (column) {
+
+                               var width, minWidth, colWidth;
+
+                               if (column.visible) {
+
+                                       width = column.definition.width;
+
+                                       minWidth = parseInt(column.minWidth);
+
+                                       if (width) {
+
+                                               colWidth = calcWidth(width);
+
+                                               fixedWidth += colWidth > minWidth ? colWidth : minWidth;
+
+                                               if (column.definition.widthShrink) {
+
+                                                       fixedShrinkColumns.push({
+
+                                                               column: column,
+
+                                                               width: colWidth > minWidth ? colWidth : minWidth
+
+                                                       });
+
+                                                       flexShrinkUnits += column.definition.widthShrink;
+                                               }
+                                       } else {
+
+                                               flexColumns.push({
+
+                                                       column: column,
+
+                                                       width: 0
+
+                                               });
+
+                                               flexGrowUnits += column.definition.widthGrow || 1;
+                                       }
+                               }
+                       });
+
+                       //calculate available space
+
+
+                       flexWidth = totalWidth - fixedWidth;
+
+                       //calculate correct column size
+
+
+                       flexColWidth = Math.floor(flexWidth / flexGrowUnits);
+
+                       //generate column widths
+
+
+                       var gapFill = scaleColumns(flexColumns, flexWidth, flexColWidth, false);
+
+                       //increase width of last column to account for rounding errors
+
+
+                       if (flexColumns.length && gapFill > 0) {
+
+                               flexColumns[flexColumns.length - 1].width += +gapFill;
+                       }
+
+                       //caculate space for columns to be shrunk into
+
+
+                       flexColumns.forEach(function (col) {
+
+                               flexWidth -= col.width;
+                       });
+
+                       overflowWidth = Math.abs(gapFill) + flexWidth;
+
+                       //shrink oversize columns if there is no available space
+
+
+                       if (overflowWidth > 0 && flexShrinkUnits) {
+
+                               gapFill = scaleColumns(fixedShrinkColumns, overflowWidth, Math.floor(overflowWidth / flexShrinkUnits), true);
+                       }
+
+                       //decrease width of last column to account for rounding errors
+
+
+                       if (fixedShrinkColumns.length) {
+
+                               fixedShrinkColumns[fixedShrinkColumns.length - 1].width -= gapFill;
+                       }
+
+                       flexColumns.forEach(function (col) {
+
+                               col.column.setWidth(col.width);
+                       });
+
+                       fixedShrinkColumns.forEach(function (col) {
+
+                               col.column.setWidth(col.width);
+                       });
+               }
+
+       };
+
+       Tabulator.prototype.registerModule("layout", Layout);
+
+       var Localize = function Localize(table) {
+
+               this.table = table; //hold Tabulator object
+
+               this.locale = "default"; //current locale
+
+               this.lang = false; //current language
+
+               this.bindings = {}; //update events to call when locale is changed
+
+               this.langList = {};
+       };
+
+       Localize.prototype.initialize = function () {
+
+               this.langList = Tabulator.prototype.helpers.deepClone(this.langs);
+       };
+
+       //set header placehoder
+
+       Localize.prototype.setHeaderFilterPlaceholder = function (placeholder) {
+
+               this.langList.default.headerFilters.default = placeholder;
+       };
+
+       //set header filter placeholder by column
+
+       Localize.prototype.setHeaderFilterColumnPlaceholder = function (column, placeholder) {
+
+               this.langList.default.headerFilters.columns[column] = placeholder;
+
+               if (this.lang && !this.lang.headerFilters.columns[column]) {
+
+                       this.lang.headerFilters.columns[column] = placeholder;
+               }
+       };
+
+       //setup a lang description object
+
+       Localize.prototype.installLang = function (locale, lang) {
+
+               if (this.langList[locale]) {
+
+                       this._setLangProp(this.langList[locale], lang);
+               } else {
+
+                       this.langList[locale] = lang;
+               }
+       };
+
+       Localize.prototype._setLangProp = function (lang, values) {
+
+               for (var key in values) {
+
+                       if (lang[key] && _typeof(lang[key]) == "object") {
+
+                               this._setLangProp(lang[key], values[key]);
+                       } else {
+
+                               lang[key] = values[key];
+                       }
+               }
+       };
+
+       //set current locale
+
+       Localize.prototype.setLocale = function (desiredLocale) {
+
+               var self = this;
+
+               desiredLocale = desiredLocale || "default";
+
+               //fill in any matching languge values
+
+               function traverseLang(trans, path) {
+
+                       for (var prop in trans) {
+
+                               if (_typeof(trans[prop]) == "object") {
+
+                                       if (!path[prop]) {
+
+                                               path[prop] = {};
+                                       }
+
+                                       traverseLang(trans[prop], path[prop]);
+                               } else {
+
+                                       path[prop] = trans[prop];
+                               }
+                       }
+               }
+
+               //determing correct locale to load
+
+               if (desiredLocale === true && navigator.language) {
+
+                       //get local from system
+
+                       desiredLocale = navigator.language.toLowerCase();
+               }
+
+               if (desiredLocale) {
+
+                       //if locale is not set, check for matching top level locale else use default
+
+                       if (!self.langList[desiredLocale]) {
+
+                               var prefix = desiredLocale.split("-")[0];
+
+                               if (self.langList[prefix]) {
+
+                                       console.warn("Localization Error - Exact matching locale not found, using closest match: ", desiredLocale, prefix);
+
+                                       desiredLocale = prefix;
+                               } else {
+
+                                       console.warn("Localization Error - Matching locale not found, using default: ", desiredLocale);
+
+                                       desiredLocale = "default";
+                               }
+                       }
+               }
+
+               self.locale = desiredLocale;
+
+               //load default lang template
+
+               self.lang = Tabulator.prototype.helpers.deepClone(self.langList.default || {});
+
+               if (desiredLocale != "default") {
+
+                       traverseLang(self.langList[desiredLocale], self.lang);
+               }
+
+               self.table.options.localized.call(self.table, self.locale, self.lang);
+
+               self._executeBindings();
+       };
+
+       //get current locale
+
+       Localize.prototype.getLocale = function (locale) {
+
+               return self.locale;
+       };
+
+       //get lang object for given local or current if none provided
+
+       Localize.prototype.getLang = function (locale) {
+
+               return locale ? this.langList[locale] : this.lang;
+       };
+
+       //get text for current locale
+
+       Localize.prototype.getText = function (path, value) {
+
+               var path = value ? path + "|" + value : path,
+                   pathArray = path.split("|"),
+                   text = this._getLangElement(pathArray, this.locale);
+
+               // if(text === false){
+
+               //      console.warn("Localization Error - Matching localized text not found for given path: ", path);
+
+               // }
+
+
+               return text || "";
+       };
+
+       //traverse langs object and find localized copy
+
+       Localize.prototype._getLangElement = function (path, locale) {
+
+               var self = this;
+
+               var root = self.lang;
+
+               path.forEach(function (level) {
+
+                       var rootPath;
+
+                       if (root) {
+
+                               rootPath = root[level];
+
+                               if (typeof rootPath != "undefined") {
+
+                                       root = rootPath;
+                               } else {
+
+                                       root = false;
+                               }
+                       }
+               });
+
+               return root;
+       };
+
+       //set update binding
+
+       Localize.prototype.bind = function (path, callback) {
+
+               if (!this.bindings[path]) {
+
+                       this.bindings[path] = [];
+               }
+
+               this.bindings[path].push(callback);
+
+               callback(this.getText(path), this.lang);
+       };
+
+       //itterate through bindings and trigger updates
+
+       Localize.prototype._executeBindings = function () {
+
+               var self = this;
+
+               var _loop = function _loop(path) {
+
+                       self.bindings[path].forEach(function (binding) {
+
+                               binding(self.getText(path), self.lang);
+                       });
+               };
+
+               for (var path in self.bindings) {
+                       _loop(path);
+               }
+       };
+
+       //Localized text listings
+
+       Localize.prototype.langs = {
+
+               "default": { //hold default locale text
+
+                       "groups": {
+
+                               "item": "item",
+
+                               "items": "items"
+
+                       },
+
+                       "columns": {},
+
+                       "ajax": {
+
+                               "loading": "Loading",
+
+                               "error": "Error"
+
+                       },
+
+                       "pagination": {
+
+                               "page_size": "Page Size",
+
+                               "page_title": "Show Page",
+
+                               "first": "First",
+
+                               "first_title": "First Page",
+
+                               "last": "Last",
+
+                               "last_title": "Last Page",
+
+                               "prev": "Prev",
+
+                               "prev_title": "Prev Page",
+
+                               "next": "Next",
+
+                               "next_title": "Next Page",
+
+                               "all": "All"
+
+                       },
+
+                       "headerFilters": {
+
+                               "default": "filter column...",
+
+                               "columns": {}
+
+                       }
+
+               }
+
+       };
+
+       Tabulator.prototype.registerModule("localize", Localize);
+
+       var Comms = function Comms(table) {
+
+               this.table = table;
+       };
+
+       Comms.prototype.getConnections = function (selectors) {
+
+               var self = this,
+                   connections = [],
+                   connection;
+
+               connection = Tabulator.prototype.comms.lookupTable(selectors);
+
+               connection.forEach(function (con) {
+
+                       if (self.table !== con) {
+
+                               connections.push(con);
+                       }
+               });
+
+               return connections;
+       };
+
+       Comms.prototype.send = function (selectors, module, action, data) {
+
+               var self = this,
+                   connections = this.getConnections(selectors);
+
+               connections.forEach(function (connection) {
+
+                       connection.tableComms(self.table.element, module, action, data);
+               });
+
+               if (!connections.length && selectors) {
+
+                       console.warn("Table Connection Error - No tables matching selector found", selectors);
+               }
+       };
+
+       Comms.prototype.receive = function (table, module, action, data) {
+
+               if (this.table.modExists(module)) {
+
+                       return this.table.modules[module].commsReceived(table, action, data);
+               } else {
+
+                       console.warn("Inter-table Comms Error - no such module:", module);
+               }
+       };
+
+       Tabulator.prototype.registerModule("comms", Comms);
+
+       var Accessor = function Accessor(table) {
+               this.table = table; //hold Tabulator object
+               this.allowedTypes = ["", "data", "download", "clipboard", "print", "htmlOutput"]; //list of accessor types
+       };
+
+       //initialize column accessor
+       Accessor.prototype.initializeColumn = function (column) {
+               var self = this,
+                   match = false,
+                   config = {};
+
+               this.allowedTypes.forEach(function (type) {
+                       var key = "accessor" + (type.charAt(0).toUpperCase() + type.slice(1)),
+                           accessor;
+
+                       if (column.definition[key]) {
+                               accessor = self.lookupAccessor(column.definition[key]);
+
+                               if (accessor) {
+                                       match = true;
+
+                                       config[key] = {
+                                               accessor: accessor,
+                                               params: column.definition[key + "Params"] || {}
+                                       };
+                               }
+                       }
+               });
+
+               if (match) {
+                       column.modules.accessor = config;
+               }
+       };
+
+       Accessor.prototype.lookupAccessor = function (value) {
+               var accessor = false;
+
+               //set column accessor
+               switch (typeof value === 'undefined' ? 'undefined' : _typeof(value)) {
+                       case "string":
+                               if (this.accessors[value]) {
+                                       accessor = this.accessors[value];
+                               } else {
+                                       console.warn("Accessor Error - No such accessor found, ignoring: ", value);
+                               }
+                               break;
+
+                       case "function":
+                               accessor = value;
+                               break;
+               }
+
+               return accessor;
+       };
+
+       //apply accessor to row
+       Accessor.prototype.transformRow = function (row, type) {
+               var key = "accessor" + (type.charAt(0).toUpperCase() + type.slice(1)),
+                   rowComponent = row.getComponent();
+
+               //clone data object with deep copy to isolate internal data from returned result
+               var data = Tabulator.prototype.helpers.deepClone(row.data || {});
+
+               this.table.columnManager.traverse(function (column) {
+                       var value, accessor, params, colCompnent;
+
+                       if (column.modules.accessor) {
+
+                               accessor = column.modules.accessor[key] || column.modules.accessor.accessor || false;
+
+                               if (accessor) {
+                                       value = column.getFieldValue(data);
+
+                                       if (value != "undefined") {
+                                               colCompnent = column.getComponent();
+                                               params = typeof accessor.params === "function" ? accessor.params(value, data, type, colCompnent, rowComponent) : accessor.params;
+                                               column.setFieldValue(data, accessor.accessor(value, data, type, params, colCompnent, rowComponent));
+                                       }
+                               }
+                       }
+               });
+
+               return data;
+       },
+
+       //default accessors
+       Accessor.prototype.accessors = {};
+
+       Tabulator.prototype.registerModule("accessor", Accessor);
+       var Ajax = function Ajax(table) {
+
+               this.table = table; //hold Tabulator object
+               this.config = false; //hold config object for ajax request
+               this.url = ""; //request URL
+               this.urlGenerator = false;
+               this.params = false; //request parameters
+
+               this.loaderElement = this.createLoaderElement(); //loader message div
+               this.msgElement = this.createMsgElement(); //message element
+               this.loadingElement = false;
+               this.errorElement = false;
+               this.loaderPromise = false;
+
+               this.progressiveLoad = false;
+               this.loading = false;
+
+               this.requestOrder = 0; //prevent requests comming out of sequence if overridden by another load request
+       };
+
+       //initialize setup options
+       Ajax.prototype.initialize = function () {
+               var template;
+
+               this.loaderElement.appendChild(this.msgElement);
+
+               if (this.table.options.ajaxLoaderLoading) {
+                       if (typeof this.table.options.ajaxLoaderLoading == "string") {
+                               template = document.createElement('template');
+                               template.innerHTML = this.table.options.ajaxLoaderLoading.trim();
+                               this.loadingElement = template.content.firstChild;
+                       } else {
+                               this.loadingElement = this.table.options.ajaxLoaderLoading;
+                       }
+               }
+
+               this.loaderPromise = this.table.options.ajaxRequestFunc || this.defaultLoaderPromise;
+
+               this.urlGenerator = this.table.options.ajaxURLGenerator || this.defaultURLGenerator;
+
+               if (this.table.options.ajaxLoaderError) {
+                       if (typeof this.table.options.ajaxLoaderError == "string") {
+                               template = document.createElement('template');
+                               template.innerHTML = this.table.options.ajaxLoaderError.trim();
+                               this.errorElement = template.content.firstChild;
+                       } else {
+                               this.errorElement = this.table.options.ajaxLoaderError;
+                       }
+               }
+
+               if (this.table.options.ajaxParams) {
+                       this.setParams(this.table.options.ajaxParams);
+               }
+
+               if (this.table.options.ajaxConfig) {
+                       this.setConfig(this.table.options.ajaxConfig);
+               }
+
+               if (this.table.options.ajaxURL) {
+                       this.setUrl(this.table.options.ajaxURL);
+               }
+
+               if (this.table.options.ajaxProgressiveLoad) {
+                       if (this.table.options.pagination) {
+                               this.progressiveLoad = false;
+                               console.error("Progressive Load Error - Pagination and progressive load cannot be used at the same time");
+                       } else {
+                               if (this.table.modExists("page")) {
+                                       this.progressiveLoad = this.table.options.ajaxProgressiveLoad;
+                                       this.table.modules.page.initializeProgressive(this.progressiveLoad);
+                               } else {
+                                       console.error("Pagination plugin is required for progressive ajax loading");
+                               }
+                       }
+               }
+       };
+
+       Ajax.prototype.createLoaderElement = function () {
+               var el = document.createElement("div");
+               el.classList.add("tabulator-loader");
+               return el;
+       };
+
+       Ajax.prototype.createMsgElement = function () {
+               var el = document.createElement("div");
+
+               el.classList.add("tabulator-loader-msg");
+               el.setAttribute("role", "alert");
+
+               return el;
+       };
+
+       //set ajax params
+       Ajax.prototype.setParams = function (params, update) {
+               if (update) {
+                       this.params = this.params || {};
+
+                       for (var key in params) {
+                               this.params[key] = params[key];
+                       }
+               } else {
+                       this.params = params;
+               }
+       };
+
+       Ajax.prototype.getParams = function () {
+               return this.params || {};
+       };
+
+       //load config object
+       Ajax.prototype.setConfig = function (config) {
+               this._loadDefaultConfig();
+
+               if (typeof config == "string") {
+                       this.config.method = config;
+               } else {
+                       for (var key in config) {
+                               this.config[key] = config[key];
+                       }
+               }
+       };
+
+       //create config object from default
+       Ajax.prototype._loadDefaultConfig = function (force) {
+               var self = this;
+               if (!self.config || force) {
+
+                       self.config = {};
+
+                       //load base config from defaults
+                       for (var key in self.defaultConfig) {
+                               self.config[key] = self.defaultConfig[key];
+                       }
+               }
+       };
+
+       //set request url
+       Ajax.prototype.setUrl = function (url) {
+               this.url = url;
+       };
+
+       //get request url
+       Ajax.prototype.getUrl = function () {
+               return this.url;
+       };
+
+       //lstandard loading function
+       Ajax.prototype.loadData = function (inPosition, columnsChanged) {
+               var self = this;
+
+               if (this.progressiveLoad) {
+                       return this._loadDataProgressive();
+               } else {
+                       return this._loadDataStandard(inPosition, columnsChanged);
+               }
+       };
+
+       Ajax.prototype.nextPage = function (diff) {
+               var margin;
+
+               if (!this.loading) {
+
+                       margin = this.table.options.ajaxProgressiveLoadScrollMargin || this.table.rowManager.getElement().clientHeight * 2;
+
+                       if (diff < margin) {
+                               this.table.modules.page.nextPage().then(function () {}).catch(function () {});
+                       }
+               }
+       };
+
+       Ajax.prototype.blockActiveRequest = function () {
+               this.requestOrder++;
+       };
+
+       Ajax.prototype._loadDataProgressive = function () {
+               this.table.rowManager.setData([]);
+               return this.table.modules.page.setPage(1);
+       };
+
+       Ajax.prototype._loadDataStandard = function (inPosition, columnsChanged) {
+               var _this42 = this;
+
+               return new Promise(function (resolve, reject) {
+                       _this42.sendRequest(inPosition).then(function (data) {
+                               _this42.table.rowManager.setData(data, inPosition, columnsChanged).then(function () {
+                                       resolve();
+                               }).catch(function (e) {
+                                       reject(e);
+                               });
+                       }).catch(function (e) {
+                               reject(e);
+                       });
+               });
+       };
+
+       Ajax.prototype.generateParamsList = function (data, prefix) {
+               var self = this,
+                   output = [];
+
+               prefix = prefix || "";
+
+               if (Array.isArray(data)) {
+                       data.forEach(function (item, i) {
+                               output = output.concat(self.generateParamsList(item, prefix ? prefix + "[" + i + "]" : i));
+                       });
+               } else if ((typeof data === 'undefined' ? 'undefined' : _typeof(data)) === "object") {
+                       for (var key in data) {
+                               output = output.concat(self.generateParamsList(data[key], prefix ? prefix + "[" + key + "]" : key));
+                       }
+               } else {
+                       output.push({ key: prefix, value: data });
+               }
+
+               return output;
+       };
+
+       Ajax.prototype.serializeParams = function (params) {
+               var output = this.generateParamsList(params),
+                   encoded = [];
+
+               output.forEach(function (item) {
+                       encoded.push(encodeURIComponent(item.key) + "=" + encodeURIComponent(item.value));
+               });
+
+               return encoded.join("&");
+       };
+
+       //send ajax request
+       Ajax.prototype.sendRequest = function (silent) {
+               var _this43 = this;
+
+               var self = this,
+                   url = self.url,
+                   requestNo,
+                   esc,
+                   query;
+
+               self.requestOrder++;
+               requestNo = self.requestOrder;
+
+               self._loadDefaultConfig();
+
+               return new Promise(function (resolve, reject) {
+                       if (self.table.options.ajaxRequesting.call(_this43.table, self.url, self.params) !== false) {
+
+                               self.loading = true;
+
+                               if (!silent) {
+                                       self.showLoader();
+                               }
+
+                               _this43.loaderPromise(url, self.config, self.params).then(function (data) {
+                                       if (requestNo === self.requestOrder) {
+                                               if (self.table.options.ajaxResponse) {
+                                                       data = self.table.options.ajaxResponse.call(self.table, self.url, self.params, data);
+                                               }
+                                               resolve(data);
+
+                                               self.hideLoader();
+                                               self.loading = false;
+                                       } else {
+                                               console.warn("Ajax Response Blocked - An active ajax request was blocked by an attempt to change table data while the request was being made");
+                                       }
+                               }).catch(function (error) {
+                                       console.error("Ajax Load Error: ", error);
+                                       self.table.options.ajaxError.call(self.table, error);
+
+                                       self.showError();
+
+                                       setTimeout(function () {
+                                               self.hideLoader();
+                                       }, 3000);
+
+                                       self.loading = false;
+
+                                       reject();
+                               });
+                       } else {
+                               reject();
+                       }
+               });
+       };
+
+       Ajax.prototype.showLoader = function () {
+               var shouldLoad = typeof this.table.options.ajaxLoader === "function" ? this.table.options.ajaxLoader() : this.table.options.ajaxLoader;
+
+               if (shouldLoad) {
+
+                       this.hideLoader();
+
+                       while (this.msgElement.firstChild) {
+                               this.msgElement.removeChild(this.msgElement.firstChild);
+                       }this.msgElement.classList.remove("tabulator-error");
+                       this.msgElement.classList.add("tabulator-loading");
+
+                       if (this.loadingElement) {
+                               this.msgElement.appendChild(this.loadingElement);
+                       } else {
+                               this.msgElement.innerHTML = this.table.modules.localize.getText("ajax|loading");
+                       }
+
+                       this.table.element.appendChild(this.loaderElement);
+               }
+       };
+
+       Ajax.prototype.showError = function () {
+               this.hideLoader();
+
+               while (this.msgElement.firstChild) {
+                       this.msgElement.removeChild(this.msgElement.firstChild);
+               }this.msgElement.classList.remove("tabulator-loading");
+               this.msgElement.classList.add("tabulator-error");
+
+               if (this.errorElement) {
+                       this.msgElement.appendChild(this.errorElement);
+               } else {
+                       this.msgElement.innerHTML = this.table.modules.localize.getText("ajax|error");
+               }
+
+               this.table.element.appendChild(this.loaderElement);
+       };
+
+       Ajax.prototype.hideLoader = function () {
+               if (this.loaderElement.parentNode) {
+                       this.loaderElement.parentNode.removeChild(this.loaderElement);
+               }
+       };
+
+       //default ajax config object
+       Ajax.prototype.defaultConfig = {
+               method: "GET"
+       };
+
+       Ajax.prototype.defaultURLGenerator = function (url, config, params) {
+
+               if (url) {
+                       if (params && Object.keys(params).length) {
+                               if (!config.method || config.method.toLowerCase() == "get") {
+                                       config.method = "get";
+
+                                       url += (url.includes("?") ? "&" : "?") + this.serializeParams(params);
+                               }
+                       }
+               }
+
+               return url;
+       };
+
+       Ajax.prototype.defaultLoaderPromise = function (url, config, params) {
+               var self = this,
+                   contentType;
+
+               return new Promise(function (resolve, reject) {
+
+                       //set url
+                       url = self.urlGenerator(url, config, params);
+
+                       //set body content if not GET request
+                       if (config.method.toUpperCase() != "GET") {
+                               contentType = _typeof(self.table.options.ajaxContentType) === "object" ? self.table.options.ajaxContentType : self.contentTypeFormatters[self.table.options.ajaxContentType];
+                               if (contentType) {
+
+                                       for (var key in contentType.headers) {
+                                               if (!config.headers) {
+                                                       config.headers = {};
+                                               }
+
+                                               if (typeof config.headers[key] === "undefined") {
+                                                       config.headers[key] = contentType.headers[key];
+                                               }
+                                       }
+
+                                       config.body = contentType.body.call(self, url, config, params);
+                               } else {
+                                       console.warn("Ajax Error - Invalid ajaxContentType value:", self.table.options.ajaxContentType);
+                               }
+                       }
+
+                       if (url) {
+
+                               //configure headers
+                               if (typeof config.headers === "undefined") {
+                                       config.headers = {};
+                               }
+
+                               if (typeof config.headers.Accept === "undefined") {
+                                       config.headers.Accept = "application/json";
+                               }
+
+                               if (typeof config.headers["X-Requested-With"] === "undefined") {
+                                       config.headers["X-Requested-With"] = "XMLHttpRequest";
+                               }
+
+                               if (typeof config.mode === "undefined") {
+                                       config.mode = "cors";
+                               }
+
+                               if (config.mode == "cors") {
+
+                                       if (typeof config.headers["Access-Control-Allow-Origin"] === "undefined") {
+                                               config.headers["Access-Control-Allow-Origin"] = window.location.origin;
+                                       }
+
+                                       if (typeof config.credentials === "undefined") {
+                                               config.credentials = 'same-origin';
+                                       }
+                               } else {
+                                       if (typeof config.credentials === "undefined") {
+                                               config.credentials = 'include';
+                                       }
+                               }
+
+                               //send request
+                               fetch(url, config).then(function (response) {
+                                       if (response.ok) {
+                                               response.json().then(function (data) {
+                                                       resolve(data);
+                                               }).catch(function (error) {
+                                                       reject(error);
+                                                       console.warn("Ajax Load Error - Invalid JSON returned", error);
+                                               });
+                                       } else {
+                                               console.error("Ajax Load Error - Connection Error: " + response.status, response.statusText);
+                                               reject(response);
+                                       }
+                               }).catch(function (error) {
+                                       console.error("Ajax Load Error - Connection Error: ", error);
+                                       reject(error);
+                               });
+                       } else {
+                               console.warn("Ajax Load Error - No URL Set");
+                               resolve([]);
+                       }
+               });
+       };
+
+       Ajax.prototype.contentTypeFormatters = {
+               "json": {
+                       headers: {
+                               'Content-Type': 'application/json'
+                       },
+                       body: function body(url, config, params) {
+                               return JSON.stringify(params);
+                       }
+               },
+               "form": {
+                       headers: {},
+                       body: function body(url, config, params) {
+                               var output = this.generateParamsList(params),
+                                   form = new FormData();
+
+                               output.forEach(function (item) {
+                                       form.append(item.key, item.value);
+                               });
+
+                               return form;
+                       }
+               }
+       };
+
+       Tabulator.prototype.registerModule("ajax", Ajax);
+
+       //public calc object
+       var CalcComponent = function CalcComponent(row) {
+               this._row = row;
+       };
+
+       CalcComponent.prototype.getData = function (transform) {
+               return this._row.getData(transform);
+       };
+
+       CalcComponent.prototype.getElement = function () {
+               return this._row.getElement();
+       };
+
+       CalcComponent.prototype.getTable = function () {
+               return this._row.table;
+       };
+
+       CalcComponent.prototype.getCells = function () {
+               var cells = [];
+
+               this._row.getCells().forEach(function (cell) {
+                       cells.push(cell.getComponent());
+               });
+
+               return cells;
+       };
+
+       CalcComponent.prototype.getCell = function (column) {
+               var cell = this._row.getCell(column);
+               return cell ? cell.getComponent() : false;
+       };
+
+       CalcComponent.prototype._getSelf = function () {
+               return this._row;
+       };
+
+       var ColumnCalcs = function ColumnCalcs(table) {
+               this.table = table; //hold Tabulator object
+               this.topCalcs = [];
+               this.botCalcs = [];
+               this.genColumn = false;
+               this.topElement = this.createElement();
+               this.botElement = this.createElement();
+               this.topRow = false;
+               this.botRow = false;
+               this.topInitialized = false;
+               this.botInitialized = false;
+
+               this.initialize();
+       };
+
+       ColumnCalcs.prototype.createElement = function () {
+               var el = document.createElement("div");
+               el.classList.add("tabulator-calcs-holder");
+               return el;
+       };
+
+       ColumnCalcs.prototype.initialize = function () {
+               this.genColumn = new Column({ field: "value" }, this);
+       };
+
+       //dummy functions to handle being mock column manager
+       ColumnCalcs.prototype.registerColumnField = function () {};
+
+       //initialize column calcs
+       ColumnCalcs.prototype.initializeColumn = function (column) {
+               var def = column.definition;
+
+               var config = {
+                       topCalcParams: def.topCalcParams || {},
+                       botCalcParams: def.bottomCalcParams || {}
+               };
+
+               if (def.topCalc) {
+
+                       switch (_typeof(def.topCalc)) {
+                               case "string":
+                                       if (this.calculations[def.topCalc]) {
+                                               config.topCalc = this.calculations[def.topCalc];
+                                       } else {
+                                               console.warn("Column Calc Error - No such calculation found, ignoring: ", def.topCalc);
+                                       }
+                                       break;
+
+                               case "function":
+                                       config.topCalc = def.topCalc;
+                                       break;
+
+                       }
+
+                       if (config.topCalc) {
+                               column.modules.columnCalcs = config;
+                               this.topCalcs.push(column);
+
+                               if (this.table.options.columnCalcs != "group") {
+                                       this.initializeTopRow();
+                               }
+                       }
+               }
+
+               if (def.bottomCalc) {
+                       switch (_typeof(def.bottomCalc)) {
+                               case "string":
+                                       if (this.calculations[def.bottomCalc]) {
+                                               config.botCalc = this.calculations[def.bottomCalc];
+                                       } else {
+                                               console.warn("Column Calc Error - No such calculation found, ignoring: ", def.bottomCalc);
+                                       }
+                                       break;
+
+                               case "function":
+                                       config.botCalc = def.bottomCalc;
+                                       break;
+
+                       }
+
+                       if (config.botCalc) {
+                               column.modules.columnCalcs = config;
+                               this.botCalcs.push(column);
+
+                               if (this.table.options.columnCalcs != "group") {
+                                       this.initializeBottomRow();
+                               }
+                       }
+               }
+       };
+
+       ColumnCalcs.prototype.removeCalcs = function () {
+               var changed = false;
+
+               if (this.topInitialized) {
+                       this.topInitialized = false;
+                       this.topElement.parentNode.removeChild(this.topElement);
+                       changed = true;
+               }
+
+               if (this.botInitialized) {
+                       this.botInitialized = false;
+                       this.table.footerManager.remove(this.botElement);
+                       changed = true;
+               }
+
+               if (changed) {
+                       this.table.rowManager.adjustTableSize();
+               }
+       };
+
+       ColumnCalcs.prototype.initializeTopRow = function () {
+               if (!this.topInitialized) {
+                       // this.table.columnManager.headersElement.after(this.topElement);
+                       this.table.columnManager.getElement().insertBefore(this.topElement, this.table.columnManager.headersElement.nextSibling);
+                       this.topInitialized = true;
+               }
+       };
+
+       ColumnCalcs.prototype.initializeBottomRow = function () {
+               if (!this.botInitialized) {
+                       this.table.footerManager.prepend(this.botElement);
+                       this.botInitialized = true;
+               }
+       };
+
+       ColumnCalcs.prototype.scrollHorizontal = function (left) {
+               var hozAdjust = 0,
+                   scrollWidth = this.table.columnManager.getElement().scrollWidth - this.table.element.clientWidth;
+
+               if (this.botInitialized && this.botRow) {
+                       this.botRow.getElement().style.marginLeft = -left + "px";
+               }
+       };
+
+       ColumnCalcs.prototype.recalc = function (rows) {
+               var data, row;
+
+               if (this.topInitialized || this.botInitialized) {
+                       data = this.rowsToData(rows);
+
+                       if (this.topInitialized) {
+                               if (this.topRow) {
+                                       this.topRow.deleteCells();
+                               }
+
+                               row = this.generateRow("top", this.rowsToData(rows));
+                               this.topRow = row;
+                               while (this.topElement.firstChild) {
+                                       this.topElement.removeChild(this.topElement.firstChild);
+                               }this.topElement.appendChild(row.getElement());
+                               row.initialize(true);
+                       }
+
+                       if (this.botInitialized) {
+                               if (this.botRow) {
+                                       this.botRow.deleteCells();
+                               }
+
+                               row = this.generateRow("bottom", this.rowsToData(rows));
+                               this.botRow = row;
+                               while (this.botElement.firstChild) {
+                                       this.botElement.removeChild(this.botElement.firstChild);
+                               }this.botElement.appendChild(row.getElement());
+                               row.initialize(true);
+                       }
+
+                       this.table.rowManager.adjustTableSize();
+
+                       //set resizable handles
+                       if (this.table.modExists("frozenColumns")) {
+                               this.table.modules.frozenColumns.layout();
+                       }
+               }
+       };
+
+       ColumnCalcs.prototype.recalcRowGroup = function (row) {
+               this.recalcGroup(this.table.modules.groupRows.getRowGroup(row));
+       };
+
+       ColumnCalcs.prototype.recalcAll = function () {
+               var _this44 = this;
+
+               if (this.topCalcs.length || this.botCalcs.length) {
+                       if (this.table.options.columnCalcs !== "group") {
+                               this.recalc(this.table.rowManager.activeRows);
+                       }
+
+                       if (this.table.options.groupBy && this.table.options.columnCalcs !== "table") {
+
+                               var groups = table.modules.groupRows.getChildGroups();
+
+                               groups.forEach(function (group) {
+                                       _this44.recalcGroup(group);
+                               });
+                       }
+               }
+       };
+
+       ColumnCalcs.prototype.recalcGroup = function (group) {
+               var data, rowData;
+
+               if (group) {
+                       if (group.calcs) {
+                               if (group.calcs.bottom) {
+                                       data = this.rowsToData(group.rows);
+                                       rowData = this.generateRowData("bottom", data);
+
+                                       group.calcs.bottom.updateData(rowData);
+                                       group.calcs.bottom.reinitialize();
+                               }
+
+                               if (group.calcs.top) {
+                                       data = this.rowsToData(group.rows);
+                                       rowData = this.generateRowData("top", data);
+
+                                       group.calcs.top.updateData(rowData);
+                                       group.calcs.top.reinitialize();
+                               }
+                       }
+               }
+       };
+
+       //generate top stats row
+       ColumnCalcs.prototype.generateTopRow = function (rows) {
+               return this.generateRow("top", this.rowsToData(rows));
+       };
+       //generate bottom stats row
+       ColumnCalcs.prototype.generateBottomRow = function (rows) {
+               return this.generateRow("bottom", this.rowsToData(rows));
+       };
+
+       ColumnCalcs.prototype.rowsToData = function (rows) {
+               var _this45 = this;
+
+               var data = [];
+
+               rows.forEach(function (row) {
+                       data.push(row.getData());
+
+                       if (_this45.table.options.dataTree && _this45.table.options.dataTreeChildColumnCalcs) {
+                               if (row.modules.dataTree.open) {
+                                       var children = _this45.rowsToData(_this45.table.modules.dataTree.getFilteredTreeChildren(row));
+                                       data = data.concat(children);
+                               }
+                       }
+               });
+
+               return data;
+       };
+
+       //generate stats row
+       ColumnCalcs.prototype.generateRow = function (pos, data) {
+               var self = this,
+                   rowData = this.generateRowData(pos, data),
+                   row;
+
+               if (self.table.modExists("mutator")) {
+                       self.table.modules.mutator.disable();
+               }
+
+               row = new Row(rowData, this, "calc");
+
+               if (self.table.modExists("mutator")) {
+                       self.table.modules.mutator.enable();
+               }
+
+               row.getElement().classList.add("tabulator-calcs", "tabulator-calcs-" + pos);
+
+               row.component = false;
+
+               row.getComponent = function () {
+                       if (!this.component) {
+                               this.component = new CalcComponent(this);
+                       }
+
+                       return this.component;
+               };
+
+               row.generateCells = function () {
+
+                       var cells = [];
+
+                       self.table.columnManager.columnsByIndex.forEach(function (column) {
+
+                               //set field name of mock column
+                               self.genColumn.setField(column.getField());
+                               self.genColumn.hozAlign = column.hozAlign;
+
+                               if (column.definition[pos + "CalcFormatter"] && self.table.modExists("format")) {
+                                       self.genColumn.modules.format = {
+                                               formatter: self.table.modules.format.getFormatter(column.definition[pos + "CalcFormatter"]),
+                                               params: column.definition[pos + "CalcFormatterParams"] || {}
+                                       };
+                               } else {
+                                       self.genColumn.modules.format = {
+                                               formatter: self.table.modules.format.getFormatter("plaintext"),
+                                               params: {}
+                                       };
+                               }
+
+                               //ensure css class defintion is replicated to calculation cell
+                               self.genColumn.definition.cssClass = column.definition.cssClass;
+
+                               //generate cell and assign to correct column
+                               var cell = new Cell(self.genColumn, row);
+                               cell.getElement();
+                               cell.column = column;
+                               cell.setWidth();
+
+                               column.cells.push(cell);
+                               cells.push(cell);
+
+                               if (!column.visible) {
+                                       cell.hide();
+                               }
+                       });
+
+                       this.cells = cells;
+               };
+
+               return row;
+       };
+
+       //generate stats row
+       ColumnCalcs.prototype.generateRowData = function (pos, data) {
+               var rowData = {},
+                   calcs = pos == "top" ? this.topCalcs : this.botCalcs,
+                   type = pos == "top" ? "topCalc" : "botCalc",
+                   params,
+                   paramKey;
+
+               calcs.forEach(function (column) {
+                       var values = [];
+
+                       if (column.modules.columnCalcs && column.modules.columnCalcs[type]) {
+                               data.forEach(function (item) {
+                                       values.push(column.getFieldValue(item));
+                               });
+
+                               paramKey = type + "Params";
+                               params = typeof column.modules.columnCalcs[paramKey] === "function" ? column.modules.columnCalcs[paramKey](values, data) : column.modules.columnCalcs[paramKey];
+
+                               column.setFieldValue(rowData, column.modules.columnCalcs[type](values, data, params));
+                       }
+               });
+
+               return rowData;
+       };
+
+       ColumnCalcs.prototype.hasTopCalcs = function () {
+               return !!this.topCalcs.length;
+       };
+
+       ColumnCalcs.prototype.hasBottomCalcs = function () {
+               return !!this.botCalcs.length;
+       };
+
+       //handle table redraw
+       ColumnCalcs.prototype.redraw = function () {
+               if (this.topRow) {
+                       this.topRow.normalizeHeight(true);
+               }
+               if (this.botRow) {
+                       this.botRow.normalizeHeight(true);
+               }
+       };
+
+       //return the calculated
+       ColumnCalcs.prototype.getResults = function () {
+               var self = this,
+                   results = {},
+                   groups;
+
+               if (this.table.options.groupBy && this.table.modExists("groupRows")) {
+                       groups = this.table.modules.groupRows.getGroups(true);
+
+                       groups.forEach(function (group) {
+                               results[group.getKey()] = self.getGroupResults(group);
+                       });
+               } else {
+                       results = {
+                               top: this.topRow ? this.topRow.getData() : {},
+                               bottom: this.botRow ? this.botRow.getData() : {}
+                       };
+               }
+
+               return results;
+       };
+
+       //get results from a group
+       ColumnCalcs.prototype.getGroupResults = function (group) {
+               var self = this,
+                   groupObj = group._getSelf(),
+                   subGroups = group.getSubGroups(),
+                   subGroupResults = {},
+                   results = {};
+
+               subGroups.forEach(function (subgroup) {
+                       subGroupResults[subgroup.getKey()] = self.getGroupResults(subgroup);
+               });
+
+               results = {
+                       top: groupObj.calcs.top ? groupObj.calcs.top.getData() : {},
+                       bottom: groupObj.calcs.bottom ? groupObj.calcs.bottom.getData() : {},
+                       groups: subGroupResults
+               };
+
+               return results;
+       };
+
+       //default calculations
+       ColumnCalcs.prototype.calculations = {
+               "avg": function avg(values, data, calcParams) {
+                       var output = 0,
+                           precision = typeof calcParams.precision !== "undefined" ? calcParams.precision : 2;
+
+                       if (values.length) {
+                               output = values.reduce(function (sum, value) {
+                                       return Number(sum) + Number(value);
+                               });
+
+                               output = output / values.length;
+
+                               output = precision !== false ? output.toFixed(precision) : output;
+                       }
+
+                       return parseFloat(output).toString();
+               },
+               "max": function max(values, data, calcParams) {
+                       var output = null,
+                           precision = typeof calcParams.precision !== "undefined" ? calcParams.precision : false;
+
+                       values.forEach(function (value) {
+
+                               value = Number(value);
+
+                               if (value > output || output === null) {
+                                       output = value;
+                               }
+                       });
+
+                       return output !== null ? precision !== false ? output.toFixed(precision) : output : "";
+               },
+               "min": function min(values, data, calcParams) {
+                       var output = null,
+                           precision = typeof calcParams.precision !== "undefined" ? calcParams.precision : false;
+
+                       values.forEach(function (value) {
+
+                               value = Number(value);
+
+                               if (value < output || output === null) {
+                                       output = value;
+                               }
+                       });
+
+                       return output !== null ? precision !== false ? output.toFixed(precision) : output : "";
+               },
+               "sum": function sum(values, data, calcParams) {
+                       var output = 0,
+                           precision = typeof calcParams.precision !== "undefined" ? calcParams.precision : false;
+
+                       if (values.length) {
+                               values.forEach(function (value) {
+                                       value = Number(value);
+
+                                       output += !isNaN(value) ? Number(value) : 0;
+                               });
+                       }
+
+                       return precision !== false ? output.toFixed(precision) : output;
+               },
+               "concat": function concat(values, data, calcParams) {
+                       var output = 0;
+
+                       if (values.length) {
+                               output = values.reduce(function (sum, value) {
+                                       return String(sum) + String(value);
+                               });
+                       }
+
+                       return output;
+               },
+               "count": function count(values, data, calcParams) {
+                       var output = 0;
+
+                       if (values.length) {
+                               values.forEach(function (value) {
+                                       if (value) {
+                                               output++;
+                                       }
+                               });
+                       }
+
+                       return output;
+               }
+       };
+
+       Tabulator.prototype.registerModule("columnCalcs", ColumnCalcs);
+
+       var Clipboard = function Clipboard(table) {
+               this.table = table;
+               this.mode = true;
+
+               this.pasteParser = function () {};
+               this.pasteAction = function () {};
+               this.customSelection = false;
+               this.rowRange = false;
+               this.blocked = true; //block copy actions not originating from this command
+       };
+
+       Clipboard.prototype.initialize = function () {
+               var _this46 = this;
+
+               this.mode = this.table.options.clipboard;
+
+               this.rowRange = this.table.options.clipboardCopyRowRange;
+
+               if (this.mode === true || this.mode === "copy") {
+                       this.table.element.addEventListener("copy", function (e) {
+                               var plain, html, list;
+
+                               if (!_this46.blocked) {
+                                       e.preventDefault();
+
+                                       if (_this46.customSelection) {
+                                               plain = _this46.customSelection;
+
+                                               if (_this46.table.options.clipboardCopyFormatter) {
+                                                       plain = _this46.table.options.clipboardCopyFormatter("plain", plain);
+                                               }
+                                       } else {
+
+                                               var list = _this46.table.modules.export.generateExportList(_this46.table.options.clipboardCopyConfig, _this46.table.options.clipboardCopyStyled, _this46.rowRange, "clipboard");
+
+                                               html = _this46.table.modules.export.genereateHTMLTable(list);
+                                               plain = html ? _this46.generatePlainContent(list) : "";
+
+                                               if (_this46.table.options.clipboardCopyFormatter) {
+                                                       plain = _this46.table.options.clipboardCopyFormatter("plain", plain);
+                                                       html = _this46.table.options.clipboardCopyFormatter("html", html);
+                                               }
+                                       }
+
+                                       if (window.clipboardData && window.clipboardData.setData) {
+                                               window.clipboardData.setData('Text', plain);
+                                       } else if (e.clipboardData && e.clipboardData.setData) {
+                                               e.clipboardData.setData('text/plain', plain);
+                                               if (html) {
+                                                       e.clipboardData.setData('text/html', html);
+                                               }
+                                       } else if (e.originalEvent && e.originalEvent.clipboardData.setData) {
+                                               e.originalEvent.clipboardData.setData('text/plain', plain);
+                                               if (html) {
+                                                       e.originalEvent.clipboardData.setData('text/html', html);
+                                               }
+                                       }
+
+                                       _this46.table.options.clipboardCopied.call(_this46.table, plain, html);
+
+                                       _this46.reset();
+                               }
+                       });
+               }
+
+               if (this.mode === true || this.mode === "paste") {
+                       this.table.element.addEventListener("paste", function (e) {
+                               _this46.paste(e);
+                       });
+               }
+
+               this.setPasteParser(this.table.options.clipboardPasteParser);
+               this.setPasteAction(this.table.options.clipboardPasteAction);
+       };
+
+       Clipboard.prototype.reset = function () {
+               this.blocked = true;
+               this.customSelection = false;
+       };
+
+       Clipboard.prototype.generatePlainContent = function (list) {
+               var output = [];
+
+               list.forEach(function (row) {
+                       var rowData = [];
+
+                       row.columns.forEach(function (col) {
+                               var value = "";
+
+                               if (col) {
+
+                                       if (row.type === "group") {
+                                               col.value = col.component.getKey();
+                                       }
+
+                                       if (col.value === null) {
+                                               value = "";
+                                       } else {
+                                               switch (_typeof(col.value)) {
+                                                       case "object":
+                                                               value = JSON.stringify(col.value);
+                                                               break;
+
+                                                       case "undefined":
+                                                               value = "";
+                                                               break;
+
+                                                       default:
+                                                               value = col.value;
+                                               }
+                                       }
+                               }
+
+                               rowData.push(value);
+                       });
+
+                       output.push(rowData.join("\t"));
+               });
+
+               return output.join("\n");
+       };
+
+       Clipboard.prototype.copy = function (range, internal) {
+               var range, sel, textRange;
+               this.blocked = false;
+               this.customSelection = false;
+
+               if (this.mode === true || this.mode === "copy") {
+
+                       this.rowRange = range || this.table.options.clipboardCopyRowRange;
+
+                       if (typeof window.getSelection != "undefined" && typeof document.createRange != "undefined") {
+                               range = document.createRange();
+                               range.selectNodeContents(this.table.element);
+                               sel = window.getSelection();
+
+                               if (sel.toString() && internal) {
+                                       this.customSelection = sel.toString();
+                               }
+
+                               sel.removeAllRanges();
+                               sel.addRange(range);
+                       } else if (typeof document.selection != "undefined" && typeof document.body.createTextRange != "undefined") {
+                               textRange = document.body.createTextRange();
+                               textRange.moveToElementText(this.table.element);
+                               textRange.select();
+                       }
+
+                       document.execCommand('copy');
+
+                       if (sel) {
+                               sel.removeAllRanges();
+                       }
+               }
+       };
+
+       //PASTE EVENT HANDLING
+
+       Clipboard.prototype.setPasteAction = function (action) {
+
+               switch (typeof action === 'undefined' ? 'undefined' : _typeof(action)) {
+                       case "string":
+                               this.pasteAction = this.pasteActions[action];
+
+                               if (!this.pasteAction) {
+                                       console.warn("Clipboard Error - No such paste action found:", action);
+                               }
+                               break;
+
+                       case "function":
+                               this.pasteAction = action;
+                               break;
+               }
+       };
+
+       Clipboard.prototype.setPasteParser = function (parser) {
+               switch (typeof parser === 'undefined' ? 'undefined' : _typeof(parser)) {
+                       case "string":
+                               this.pasteParser = this.pasteParsers[parser];
+
+                               if (!this.pasteParser) {
+                                       console.warn("Clipboard Error - No such paste parser found:", parser);
+                               }
+                               break;
+
+                       case "function":
+                               this.pasteParser = parser;
+                               break;
+               }
+       };
+
+       Clipboard.prototype.paste = function (e) {
+               var data, rowData, rows;
+
+               if (this.checkPaseOrigin(e)) {
+
+                       data = this.getPasteData(e);
+
+                       rowData = this.pasteParser.call(this, data);
+
+                       if (rowData) {
+                               e.preventDefault();
+
+                               if (this.table.modExists("mutator")) {
+                                       rowData = this.mutateData(rowData);
+                               }
+
+                               rows = this.pasteAction.call(this, rowData);
+                               this.table.options.clipboardPasted.call(this.table, data, rowData, rows);
+                       } else {
+                               this.table.options.clipboardPasteError.call(this.table, data);
+                       }
+               }
+       };
+
+       Clipboard.prototype.mutateData = function (data) {
+               var self = this,
+                   output = [];
+
+               if (Array.isArray(data)) {
+                       data.forEach(function (row) {
+                               output.push(self.table.modules.mutator.transformRow(row, "clipboard"));
+                       });
+               } else {
+                       output = data;
+               }
+
+               return output;
+       };
+
+       Clipboard.prototype.checkPaseOrigin = function (e) {
+               var valid = true;
+
+               if (e.target.tagName != "DIV" || this.table.modules.edit.currentCell) {
+                       valid = false;
+               }
+
+               return valid;
+       };
+
+       Clipboard.prototype.getPasteData = function (e) {
+               var data;
+
+               if (window.clipboardData && window.clipboardData.getData) {
+                       data = window.clipboardData.getData('Text');
+               } else if (e.clipboardData && e.clipboardData.getData) {
+                       data = e.clipboardData.getData('text/plain');
+               } else if (e.originalEvent && e.originalEvent.clipboardData.getData) {
+                       data = e.originalEvent.clipboardData.getData('text/plain');
+               }
+
+               return data;
+       };
+
+       Clipboard.prototype.pasteParsers = {
+               table: function table(clipboard) {
+                       var data = [],
+                           success = false,
+                           headerFindSuccess = true,
+                           columns = this.table.columnManager.columns,
+                           columnMap = [],
+                           rows = [];
+
+                       //get data from clipboard into array of columns and rows.
+                       clipboard = clipboard.split("\n");
+
+                       clipboard.forEach(function (row) {
+                               data.push(row.split("\t"));
+                       });
+
+                       if (data.length && !(data.length === 1 && data[0].length < 2)) {
+                               success = true;
+
+                               //check if headers are present by title
+                               data[0].forEach(function (value) {
+                                       var column = columns.find(function (column) {
+                                               return value && column.definition.title && value.trim() && column.definition.title.trim() === value.trim();
+                                       });
+
+                                       if (column) {
+                                               columnMap.push(column);
+                                       } else {
+                                               headerFindSuccess = false;
+                                       }
+                               });
+
+                               //check if column headers are present by field
+                               if (!headerFindSuccess) {
+                                       headerFindSuccess = true;
+                                       columnMap = [];
+
+                                       data[0].forEach(function (value) {
+                                               var column = columns.find(function (column) {
+                                                       return value && column.field && value.trim() && column.field.trim() === value.trim();
+                                               });
+
+                                               if (column) {
+                                                       columnMap.push(column);
+                                               } else {
+                                                       headerFindSuccess = false;
+                                               }
+                                       });
+
+                                       if (!headerFindSuccess) {
+                                               columnMap = this.table.columnManager.columnsByIndex;
+                                       }
+                               }
+
+                               //remove header row if found
+                               if (headerFindSuccess) {
+                                       data.shift();
+                               }
+
+                               data.forEach(function (item) {
+                                       var row = {};
+
+                                       item.forEach(function (value, i) {
+                                               if (columnMap[i]) {
+                                                       row[columnMap[i].field] = value;
+                                               }
+                                       });
+
+                                       rows.push(row);
+                               });
+
+                               return rows;
+                       } else {
+                               return false;
+                       }
+               }
+       };
+
+       Clipboard.prototype.pasteActions = {
+               replace: function replace(rows) {
+                       return this.table.setData(rows);
+               },
+               update: function update(rows) {
+                       return this.table.updateOrAddData(rows);
+               },
+               insert: function insert(rows) {
+                       return this.table.addData(rows);
+               }
+       };
+
+       Tabulator.prototype.registerModule("clipboard", Clipboard);
+
+       var DataTree = function DataTree(table) {
+               this.table = table;
+               this.indent = 10;
+               this.field = "";
+               this.collapseEl = null;
+               this.expandEl = null;
+               this.branchEl = null;
+               this.elementField = false;
+
+               this.startOpen = function () {};
+
+               this.displayIndex = 0;
+       };
+
+       DataTree.prototype.initialize = function () {
+               var dummyEl = null,
+                   firstCol = this.table.columnManager.getFirstVisibileColumn(),
+                   options = this.table.options;
+
+               this.field = options.dataTreeChildField;
+               this.indent = options.dataTreeChildIndent;
+               this.elementField = options.dataTreeElementColumn || (firstCol ? firstCol.field : false);
+
+               if (options.dataTreeBranchElement) {
+
+                       if (options.dataTreeBranchElement === true) {
+                               this.branchEl = document.createElement("div");
+                               this.branchEl.classList.add("tabulator-data-tree-branch");
+                       } else {
+                               if (typeof options.dataTreeBranchElement === "string") {
+                                       dummyEl = document.createElement("div");
+                                       dummyEl.innerHTML = options.dataTreeBranchElement;
+                                       this.branchEl = dummyEl.firstChild;
+                               } else {
+                                       this.branchEl = options.dataTreeBranchElement;
+                               }
+                       }
+               }
+
+               if (options.dataTreeCollapseElement) {
+                       if (typeof options.dataTreeCollapseElement === "string") {
+                               dummyEl = document.createElement("div");
+                               dummyEl.innerHTML = options.dataTreeCollapseElement;
+                               this.collapseEl = dummyEl.firstChild;
+                       } else {
+                               this.collapseEl = options.dataTreeCollapseElement;
+                       }
+               } else {
+                       this.collapseEl = document.createElement("div");
+                       this.collapseEl.classList.add("tabulator-data-tree-control");
+                       this.collapseEl.tabIndex = 0;
+                       this.collapseEl.innerHTML = "<div class='tabulator-data-tree-control-collapse'></div>";
+               }
+
+               if (options.dataTreeExpandElement) {
+                       if (typeof options.dataTreeExpandElement === "string") {
+                               dummyEl = document.createElement("div");
+                               dummyEl.innerHTML = options.dataTreeExpandElement;
+                               this.expandEl = dummyEl.firstChild;
+                       } else {
+                               this.expandEl = options.dataTreeExpandElement;
+                       }
+               } else {
+                       this.expandEl = document.createElement("div");
+                       this.expandEl.classList.add("tabulator-data-tree-control");
+                       this.expandEl.tabIndex = 0;
+                       this.expandEl.innerHTML = "<div class='tabulator-data-tree-control-expand'></div>";
+               }
+
+               switch (_typeof(options.dataTreeStartExpanded)) {
+                       case "boolean":
+                               this.startOpen = function (row, index) {
+                                       return options.dataTreeStartExpanded;
+                               };
+                               break;
+
+                       case "function":
+                               this.startOpen = options.dataTreeStartExpanded;
+                               break;
+
+                       default:
+                               this.startOpen = function (row, index) {
+                                       return options.dataTreeStartExpanded[index];
+                               };
+                               break;
+               }
+       };
+
+       DataTree.prototype.initializeRow = function (row) {
+               var childArray = row.getData()[this.field];
+               var isArray = Array.isArray(childArray);
+
+               var children = isArray || !isArray && (typeof childArray === 'undefined' ? 'undefined' : _typeof(childArray)) === "object" && childArray !== null;
+
+               if (!children && row.modules.dataTree && row.modules.dataTree.branchEl) {
+                       row.modules.dataTree.branchEl.parentNode.removeChild(row.modules.dataTree.branchEl);
+               }
+
+               if (!children && row.modules.dataTree && row.modules.dataTree.controlEl) {
+                       row.modules.dataTree.controlEl.parentNode.removeChild(row.modules.dataTree.controlEl);
+               }
+
+               row.modules.dataTree = {
+                       index: row.modules.dataTree ? row.modules.dataTree.index : 0,
+                       open: children ? row.modules.dataTree ? row.modules.dataTree.open : this.startOpen(row.getComponent(), 0) : false,
+                       controlEl: row.modules.dataTree && children ? row.modules.dataTree.controlEl : false,
+                       branchEl: row.modules.dataTree && children ? row.modules.dataTree.branchEl : false,
+                       parent: row.modules.dataTree ? row.modules.dataTree.parent : false,
+                       children: children
+               };
+       };
+
+       DataTree.prototype.layoutRow = function (row) {
+               var cell = this.elementField ? row.getCell(this.elementField) : row.getCells()[0],
+                   el = cell.getElement(),
+                   config = row.modules.dataTree;
+
+               if (config.branchEl) {
+                       if (config.branchEl.parentNode) {
+                               config.branchEl.parentNode.removeChild(config.branchEl);
+                       }
+                       config.branchEl = false;
+               }
+
+               if (config.controlEl) {
+                       if (config.controlEl.parentNode) {
+                               config.controlEl.parentNode.removeChild(config.controlEl);
+                       }
+                       config.controlEl = false;
+               }
+
+               this.generateControlElement(row, el);
+
+               row.element.classList.add("tabulator-tree-level-" + config.index);
+
+               if (config.index) {
+                       if (this.branchEl) {
+                               config.branchEl = this.branchEl.cloneNode(true);
+                               el.insertBefore(config.branchEl, el.firstChild);
+
+                               if (this.table.rtl) {
+                                       config.branchEl.style.marginRight = (config.branchEl.offsetWidth + config.branchEl.style.marginLeft) * (config.index - 1) + config.index * this.indent + "px";
+                               } else {
+                                       config.branchEl.style.marginLeft = (config.branchEl.offsetWidth + config.branchEl.style.marginRight) * (config.index - 1) + config.index * this.indent + "px";
+                               }
+                       } else {
+
+                               if (this.table.rtl) {
+                                       el.style.paddingRight = parseInt(window.getComputedStyle(el, null).getPropertyValue('padding-right')) + config.index * this.indent + "px";
+                               } else {
+                                       el.style.paddingLeft = parseInt(window.getComputedStyle(el, null).getPropertyValue('padding-left')) + config.index * this.indent + "px";
+                               }
+                       }
+               }
+       };
+
+       DataTree.prototype.generateControlElement = function (row, el) {
+               var _this47 = this;
+
+               var config = row.modules.dataTree,
+                   el = el || row.getCells()[0].getElement(),
+                   oldControl = config.controlEl;
+
+               if (config.children !== false) {
+
+                       if (config.open) {
+                               config.controlEl = this.collapseEl.cloneNode(true);
+                               config.controlEl.addEventListener("click", function (e) {
+                                       e.stopPropagation();
+                                       _this47.collapseRow(row);
+                               });
+                       } else {
+                               config.controlEl = this.expandEl.cloneNode(true);
+                               config.controlEl.addEventListener("click", function (e) {
+                                       e.stopPropagation();
+                                       _this47.expandRow(row);
+                               });
+                       }
+
+                       config.controlEl.addEventListener("mousedown", function (e) {
+                               e.stopPropagation();
+                       });
+
+                       if (oldControl && oldControl.parentNode === el) {
+                               oldControl.parentNode.replaceChild(config.controlEl, oldControl);
+                       } else {
+                               el.insertBefore(config.controlEl, el.firstChild);
+                       }
+               }
+       };
+
+       DataTree.prototype.setDisplayIndex = function (index) {
+               this.displayIndex = index;
+       };
+
+       DataTree.prototype.getDisplayIndex = function () {
+               return this.displayIndex;
+       };
+
+       DataTree.prototype.getRows = function (rows) {
+               var _this48 = this;
+
+               var output = [];
+
+               rows.forEach(function (row, i) {
+                       var config, children;
+
+                       output.push(row);
+
+                       if (row instanceof Row) {
+
+                               config = row.modules.dataTree.children;
+
+                               if (!config.index && config.children !== false) {
+                                       children = _this48.getChildren(row);
+
+                                       children.forEach(function (child) {
+                                               output.push(child);
+                                       });
+                               }
+                       }
+               });
+
+               return output;
+       };
+
+       DataTree.prototype.getChildren = function (row) {
+               var _this49 = this;
+
+               var config = row.modules.dataTree,
+                   children = [],
+                   output = [];
+
+               if (config.children !== false && config.open) {
+                       if (!Array.isArray(config.children)) {
+                               config.children = this.generateChildren(row);
+                       }
+
+                       if (this.table.modExists("filter") && this.table.options.dataTreeFilter) {
+                               children = this.table.modules.filter.filter(config.children);
+                       } else {
+                               children = config.children;
+                       }
+
+                       if (this.table.modExists("sort") && this.table.options.dataTreeSort) {
+                               this.table.modules.sort.sort(children);
+                       }
+
+                       children.forEach(function (child) {
+                               output.push(child);
+
+                               var subChildren = _this49.getChildren(child);
+
+                               subChildren.forEach(function (sub) {
+                                       output.push(sub);
+                               });
+                       });
+               }
+
+               return output;
+       };
+
+       DataTree.prototype.generateChildren = function (row) {
+               var _this50 = this;
+
+               var children = [];
+
+               var childArray = row.getData()[this.field];
+
+               if (!Array.isArray(childArray)) {
+                       childArray = [childArray];
+               }
+
+               childArray.forEach(function (childData) {
+                       var childRow = new Row(childData || {}, _this50.table.rowManager);
+                       childRow.modules.dataTree.index = row.modules.dataTree.index + 1;
+                       childRow.modules.dataTree.parent = row;
+                       if (childRow.modules.dataTree.children) {
+                               childRow.modules.dataTree.open = _this50.startOpen(childRow.getComponent(), childRow.modules.dataTree.index);
+                       }
+                       children.push(childRow);
+               });
+
+               return children;
+       };
+
+       DataTree.prototype.expandRow = function (row, silent) {
+               var config = row.modules.dataTree;
+
+               if (config.children !== false) {
+                       config.open = true;
+
+                       row.reinitialize();
+
+                       this.table.rowManager.refreshActiveData("tree", false, true);
+
+                       this.table.options.dataTreeRowExpanded(row.getComponent(), row.modules.dataTree.index);
+               }
+       };
+
+       DataTree.prototype.collapseRow = function (row) {
+               var config = row.modules.dataTree;
+
+               if (config.children !== false) {
+                       config.open = false;
+
+                       row.reinitialize();
+
+                       this.table.rowManager.refreshActiveData("tree", false, true);
+
+                       this.table.options.dataTreeRowCollapsed(row.getComponent(), row.modules.dataTree.index);
+               }
+       };
+
+       DataTree.prototype.toggleRow = function (row) {
+               var config = row.modules.dataTree;
+
+               if (config.children !== false) {
+                       if (config.open) {
+                               this.collapseRow(row);
+                       } else {
+                               this.expandRow(row);
+                       }
+               }
+       };
+
+       DataTree.prototype.getTreeParent = function (row) {
+               return row.modules.dataTree.parent ? row.modules.dataTree.parent.getComponent() : false;
+       };
+
+       DataTree.prototype.getFilteredTreeChildren = function (row) {
+               var config = row.modules.dataTree,
+                   output = [],
+                   children;
+
+               if (config.children) {
+
+                       if (!Array.isArray(config.children)) {
+                               config.children = this.generateChildren(row);
+                       }
+
+                       if (this.table.modExists("filter") && this.table.options.dataTreeFilter) {
+                               children = this.table.modules.filter.filter(config.children);
+                       } else {
+                               children = config.children;
+                       }
+
+                       children.forEach(function (childRow) {
+                               if (childRow instanceof Row) {
+                                       output.push(childRow);
+                               }
+                       });
+               }
+
+               return output;
+       };
+
+       DataTree.prototype.rowDelete = function (row) {
+               var parent = row.modules.dataTree.parent,
+                   childIndex;
+
+               if (parent) {
+                       childIndex = this.findChildIndex(row, parent);
+
+                       if (childIndex !== false) {
+                               parent.data[this.field].splice(childIndex, 1);
+                       }
+
+                       if (!parent.data[this.field].length) {
+                               delete parent.data[this.field];
+                       }
+
+                       this.initializeRow(parent);
+                       this.layoutRow(parent);
+               }
+
+               this.table.rowManager.refreshActiveData("tree", false, true);
+       };
+
+       DataTree.prototype.addTreeChildRow = function (row, data, top, index) {
+               var childIndex = false;
+
+               if (typeof data === "string") {
+                       data = JSON.parse(data);
+               }
+
+               if (!Array.isArray(row.data[this.field])) {
+                       row.data[this.field] = [];
+
+                       row.modules.dataTree.open = this.startOpen(row.getComponent(), row.modules.dataTree.index);
+               }
+
+               if (typeof index !== "undefined") {
+                       childIndex = this.findChildIndex(index, row);
+
+                       if (childIndex !== false) {
+                               row.data[this.field].splice(top ? childIndex : childIndex + 1, 0, data);
+                       }
+               }
+
+               if (childIndex === false) {
+                       if (top) {
+                               row.data[this.field].unshift(data);
+                       } else {
+                               row.data[this.field].push(data);
+                       }
+               }
+
+               this.initializeRow(row);
+               this.layoutRow(row);
+
+               this.table.rowManager.refreshActiveData("tree", false, true);
+       };
+
+       DataTree.prototype.findChildIndex = function (subject, parent) {
+               var _this51 = this;
+
+               var match = false;
+
+               if ((typeof subject === 'undefined' ? 'undefined' : _typeof(subject)) == "object") {
+
+                       if (subject instanceof Row) {
+                               //subject is row element
+                               match = subject.data;
+                       } else if (subject instanceof RowComponent) {
+                               //subject is public row component
+                               match = subject._getSelf().data;
+                       } else if (typeof HTMLElement !== "undefined" && subject instanceof HTMLElement) {
+                               if (parent.modules.dataTree) {
+                                       match = parent.modules.dataTree.children.find(function (childRow) {
+                                               return childRow instanceof Row ? childRow.element === subject : false;
+                                       });
+
+                                       if (match) {
+                                               match = match.data;
+                                       }
+                               }
+                       }
+               } else if (typeof subject == "undefined" || subject === null) {
+                       match = false;
+               } else {
+                       //subject should be treated as the index of the row
+                       match = parent.data[this.field].find(function (row) {
+                               return row.data[_this51.table.options.index] == subject;
+                       });
+               }
+
+               if (match) {
+
+                       if (Array.isArray(parent.data[this.field])) {
+                               match = parent.data[this.field].indexOf(match);
+                       }
+
+                       if (match == -1) {
+                               match = false;
+                       }
+               }
+
+               //catch all for any other type of input
+
+               return match;
+       };
+
+       DataTree.prototype.getTreeChildren = function (row, component, recurse) {
+               var _this52 = this;
+
+               var config = row.modules.dataTree,
+                   output = [];
+
+               if (config.children) {
+
+                       if (!Array.isArray(config.children)) {
+                               config.children = this.generateChildren(row);
+                       }
+
+                       config.children.forEach(function (childRow) {
+                               if (childRow instanceof Row) {
+                                       output.push(component ? childRow.getComponent() : childRow);
+
+                                       if (recurse) {
+                                               output = output.concat(_this52.getTreeChildren(childRow, component, recurse));
+                                       }
+                               }
+                       });
+               }
+
+               return output;
+       };
+
+       DataTree.prototype.checkForRestyle = function (cell) {
+               if (!cell.row.cells.indexOf(cell)) {
+                       cell.row.reinitialize();
+               }
+       };
+
+       DataTree.prototype.getChildField = function () {
+               return this.field;
+       };
+
+       DataTree.prototype.redrawNeeded = function (data) {
+               return (this.field ? typeof data[this.field] !== "undefined" : false) || (this.elementField ? typeof data[this.elementField] !== "undefined" : false);
+       };
+
+       Tabulator.prototype.registerModule("dataTree", DataTree);
+
+       var Download = function Download(table) {
+               this.table = table; //hold Tabulator object
+       };
+
+       //trigger file download
+       Download.prototype.download = function (type, filename, options, range, interceptCallback) {
+               var self = this,
+                   downloadFunc = false;
+
+               function buildLink(data, mime) {
+                       if (interceptCallback) {
+                               if (interceptCallback === true) {
+                                       self.triggerDownload(data, mime, type, filename, true);
+                               } else {
+                                       interceptCallback(data);
+                               }
+                       } else {
+                               self.triggerDownload(data, mime, type, filename);
+                       }
+               }
+
+               if (typeof type == "function") {
+                       downloadFunc = type;
+               } else {
+                       if (self.downloaders[type]) {
+                               downloadFunc = self.downloaders[type];
+                       } else {
+                               console.warn("Download Error - No such download type found: ", type);
+                       }
+               }
+
+               if (downloadFunc) {
+                       var list = this.generateExportList(range);
+
+                       downloadFunc.call(this.table, list, options || {}, buildLink);
+               }
+       };
+
+       Download.prototype.generateExportList = function (range) {
+               var list = this.table.modules.export.generateExportList(this.table.options.downloadConfig, false, range || this.table.options.downloadRowRange, "download");
+
+               //assign group header formatter
+               var groupHeader = this.table.options.groupHeaderDownload;
+
+               if (groupHeader && !Array.isArray(groupHeader)) {
+                       groupHeader = [groupHeader];
+               }
+
+               list.forEach(function (row) {
+                       var group;
+
+                       if (row.type === "group") {
+                               group = row.columns[0];
+
+                               if (groupHeader && groupHeader[row.indent]) {
+                                       group.value = groupHeader[row.indent](group.value, row.component._group.getRowCount(), row.component._group.getData(), row.component);
+                               }
+                       }
+               });
+
+               return list;
+       };
+
+       Download.prototype.triggerDownload = function (data, mime, type, filename, newTab) {
+               var element = document.createElement('a'),
+                   blob = new Blob([data], { type: mime }),
+                   filename = filename || "Tabulator." + (typeof type === "function" ? "txt" : type);
+
+               blob = this.table.options.downloadReady.call(this.table, data, blob);
+
+               if (blob) {
+
+                       if (newTab) {
+                               window.open(window.URL.createObjectURL(blob));
+                       } else {
+                               if (navigator.msSaveOrOpenBlob) {
+                                       navigator.msSaveOrOpenBlob(blob, filename);
+                               } else {
+                                       element.setAttribute('href', window.URL.createObjectURL(blob));
+
+                                       //set file title
+                                       element.setAttribute('download', filename);
+
+                                       //trigger download
+                                       element.style.display = 'none';
+                                       document.body.appendChild(element);
+                                       element.click();
+
+                                       //remove temporary link element
+                                       document.body.removeChild(element);
+                               }
+                       }
+
+                       if (this.table.options.downloadComplete) {
+                               this.table.options.downloadComplete();
+                       }
+               }
+       };
+
+       Download.prototype.commsReceived = function (table, action, data) {
+               switch (action) {
+                       case "intercept":
+                               this.download(data.type, "", data.options, data.active, data.intercept);
+                               break;
+               }
+       };
+
+       //downloaders
+       Download.prototype.downloaders = {
+               csv: function csv(list, options, setFileContents) {
+                       var delimiter = options && options.delimiter ? options.delimiter : ",",
+                           fileContents = [],
+                           headers = [];
+
+                       list.forEach(function (row) {
+                               var item = [];
+
+                               switch (row.type) {
+                                       case "group":
+                                               console.warn("Download Warning - CSV downloader cannot process row groups");
+                                               break;
+
+                                       case "calc":
+                                               console.warn("Download Warning - CSV downloader cannot process column calculations");
+                                               break;
+
+                                       case "header":
+                                               row.columns.forEach(function (col, i) {
+                                                       if (col && col.depth === 1) {
+                                                               headers[i] = typeof col.value == "undefined" || col.value === null ? "" : '"' + String(col.value).split('"').join('""') + '"';
+                                                       }
+                                               });
+                                               break;
+
+                                       case "row":
+                                               row.columns.forEach(function (col) {
+
+                                                       if (col) {
+
+                                                               switch (_typeof(col.value)) {
+                                                                       case "object":
+                                                                               col.value = JSON.stringify(col.value);
+                                                                               break;
+
+                                                                       case "undefined":
+                                                                       case "null":
+                                                                               col.value = "";
+                                                                               break;
+                                                               }
+
+                                                               item.push('"' + String(col.value).split('"').join('""') + '"');
+                                                       }
+                                               });
+
+                                               fileContents.push(item.join(delimiter));
+                                               break;
+                               }
+                       });
+
+                       if (headers.length) {
+                               fileContents.unshift(headers.join(delimiter));
+                       }
+
+                       fileContents = fileContents.join("\n");
+
+                       if (options.bom) {
+                               fileContents = '\uFEFF' + fileContents;
+                       }
+
+                       setFileContents(fileContents, "text/csv");
+               },
+
+               json: function json(list, options, setFileContents) {
+                       var fileContents = [];
+
+                       list.forEach(function (row) {
+                               var item = {};
+
+                               switch (row.type) {
+                                       case "header":
+                                               break;
+
+                                       case "group":
+                                               console.warn("Download Warning - JSON downloader cannot process row groups");
+                                               break;
+
+                                       case "calc":
+                                               console.warn("Download Warning - JSON downloader cannot process column calculations");
+                                               break;
+
+                                       case "row":
+                                               row.columns.forEach(function (col) {
+                                                       if (col) {
+                                                               item[col.component.getField()] = col.value;
+                                                       }
+                                               });
+
+                                               fileContents.push(item);
+                                               break;
+                               }
+                       });
+
+                       fileContents = JSON.stringify(fileContents, null, '\t');
+
+                       setFileContents(fileContents, "application/json");
+               },
+
+               pdf: function pdf(list, options, setFileContents) {
+                       var header = [],
+                           body = [],
+                           autoTableParams = {},
+                           rowGroupStyles = options.rowGroupStyles || {
+                               fontStyle: "bold",
+                               fontSize: 12,
+                               cellPadding: 6,
+                               fillColor: 220
+                       },
+                           rowCalcStyles = options.rowCalcStyles || {
+                               fontStyle: "bold",
+                               fontSize: 10,
+                               cellPadding: 4,
+                               fillColor: 232
+                       },
+                           jsPDFParams = options.jsPDF || {},
+                           title = options && options.title ? options.title : "";
+
+                       if (!jsPDFParams.orientation) {
+                               jsPDFParams.orientation = options.orientation || "landscape";
+                       }
+
+                       if (!jsPDFParams.unit) {
+                               jsPDFParams.unit = "pt";
+                       }
+
+                       //parse row list
+                       list.forEach(function (row) {
+                               var item = {};
+
+                               switch (row.type) {
+                                       case "header":
+                                               header.push(parseRow(row));
+                                               break;
+
+                                       case "group":
+                                               body.push(parseRow(row, rowGroupStyles));
+                                               break;
+
+                                       case "calc":
+                                               body.push(parseRow(row, rowCalcStyles));
+                                               break;
+
+                                       case "row":
+                                               body.push(parseRow(row));
+                                               break;
+                               }
+                       });
+
+                       function parseRow(row, styles) {
+                               var rowData = [];
+
+                               row.columns.forEach(function (col) {
+                                       var cell;
+
+                                       if (col) {
+                                               switch (_typeof(col.value)) {
+                                                       case "object":
+                                                               col.value = JSON.stringify(col.value);
+                                                               break;
+
+                                                       case "undefined":
+                                                       case "null":
+                                                               col.value = "";
+                                                               break;
+                                               }
+
+                                               cell = {
+                                                       content: col.value,
+                                                       colSpan: col.width,
+                                                       rowSpan: col.height
+                                               };
+
+                                               if (styles) {
+                                                       cell.styles = styles;
+                                               }
+
+                                               rowData.push(cell);
+                                       } else {
+                                               rowData.push("");
+                                       }
+                               });
+
+                               return rowData;
+                       }
+
+                       //configure PDF
+                       var doc = new jsPDF(jsPDFParams); //set document to landscape, better for most tables
+
+                       if (options && options.autoTable) {
+                               if (typeof options.autoTable === "function") {
+                                       autoTableParams = options.autoTable(doc) || {};
+                               } else {
+                                       autoTableParams = options.autoTable;
+                               }
+                       }
+
+                       if (title) {
+                               autoTableParams.addPageContent = function (data) {
+                                       doc.text(title, 40, 30);
+                               };
+                       }
+
+                       autoTableParams.head = header;
+                       autoTableParams.body = body;
+
+                       doc.autoTable(autoTableParams);
+
+                       if (options && options.documentProcessing) {
+                               options.documentProcessing(doc);
+                       }
+
+                       setFileContents(doc.output("arraybuffer"), "application/pdf");
+               },
+
+               xlsx: function xlsx(list, options, setFileContents) {
+                       var self = this,
+                           sheetName = options.sheetName || "Sheet1",
+                           workbook = XLSX.utils.book_new(),
+                           output;
+
+                       workbook.SheetNames = [];
+                       workbook.Sheets = {};
+
+                       function generateSheet() {
+                               var rows = [],
+                                   merges = [],
+                                   worksheet = {},
+                                   range = { s: { c: 0, r: 0 }, e: { c: list[0] ? list[0].columns.reduce(function (a, b) {
+                                                       return a + (b && b.width ? b.width : 1);
+                                               }, 0) : 0, r: list.length } };
+
+                               //parse row list
+                               list.forEach(function (row, i) {
+                                       var rowData = [];
+
+                                       row.columns.forEach(function (col, j) {
+
+                                               if (col) {
+                                                       rowData.push(!(col.value instanceof Date) && _typeof(col.value) === "object" ? JSON.stringify(col.value) : col.value);
+
+                                                       if (col.width > 1 || col.height > -1) {
+                                                               merges.push({ s: { r: i, c: j }, e: { r: i + col.height - 1, c: j + col.width - 1 } });
+                                                       }
+                                               } else {
+                                                       rowData.push("");
+                                               }
+                                       });
+
+                                       rows.push(rowData);
+                               });
+
+                               //convert rows to worksheet
+                               XLSX.utils.sheet_add_aoa(worksheet, rows);
+
+                               worksheet['!ref'] = XLSX.utils.encode_range(range);
+
+                               if (merges.length) {
+                                       worksheet["!merges"] = merges;
+                               }
+
+                               return worksheet;
+                       }
+
+                       if (options.sheetOnly) {
+                               setFileContents(generateSheet());
+                               return;
+                       }
+
+                       if (options.sheets) {
+                               for (var sheet in options.sheets) {
+
+                                       if (options.sheets[sheet] === true) {
+                                               workbook.SheetNames.push(sheet);
+                                               workbook.Sheets[sheet] = generateSheet();
+                                       } else {
+
+                                               workbook.SheetNames.push(sheet);
+
+                                               this.modules.comms.send(options.sheets[sheet], "download", "intercept", {
+                                                       type: "xlsx",
+                                                       options: { sheetOnly: true },
+                                                       active: self.active,
+                                                       intercept: function intercept(data) {
+                                                               workbook.Sheets[sheet] = data;
+                                                       }
+                                               });
+                                       }
+                               }
+                       } else {
+                               workbook.SheetNames.push(sheetName);
+                               workbook.Sheets[sheetName] = generateSheet();
+                       }
+
+                       if (options.documentProcessing) {
+                               workbook = options.documentProcessing(workbook);
+                       }
+
+                       //convert workbook to binary array
+                       function s2ab(s) {
+                               var buf = new ArrayBuffer(s.length);
+                               var view = new Uint8Array(buf);
+                               for (var i = 0; i != s.length; ++i) {
+                                       view[i] = s.charCodeAt(i) & 0xFF;
+                               }return buf;
+                       }
+
+                       output = XLSX.write(workbook, { bookType: 'xlsx', bookSST: true, type: 'binary' });
+
+                       setFileContents(s2ab(output), "application/octet-stream");
+               },
+
+               html: function html(list, options, setFileContents) {
+                       if (this.modExists("export", true)) {
+                               setFileContents(this.modules.export.genereateHTMLTable(list), "text/html");
+                       }
+               }
+
+       };
+
+       Tabulator.prototype.registerModule("download", Download);
+
+       var Edit = function Edit(table) {
+               this.table = table; //hold Tabulator object
+               this.currentCell = false; //hold currently editing cell
+               this.mouseClick = false; //hold mousedown state to prevent click binding being overriden by editor opening
+               this.recursionBlock = false; //prevent focus recursion
+               this.invalidEdit = false;
+               this.editedCells = [];
+       };
+
+       //initialize column editor
+       Edit.prototype.initializeColumn = function (column) {
+               var self = this,
+                   config = {
+                       editor: false,
+                       blocked: false,
+                       check: column.definition.editable,
+                       params: column.definition.editorParams || {}
+               };
+
+               //set column editor
+               switch (_typeof(column.definition.editor)) {
+                       case "string":
+
+                               if (column.definition.editor === "tick") {
+                                       column.definition.editor = "tickCross";
+                                       console.warn("DEPRECATION WARNING - the tick editor has been deprecated, please use the tickCross editor");
+                               }
+
+                               if (self.editors[column.definition.editor]) {
+                                       config.editor = self.editors[column.definition.editor];
+                               } else {
+                                       console.warn("Editor Error - No such editor found: ", column.definition.editor);
+                               }
+                               break;
+
+                       case "function":
+                               config.editor = column.definition.editor;
+                               break;
+
+                       case "boolean":
+
+                               if (column.definition.editor === true) {
+
+                                       if (typeof column.definition.formatter !== "function") {
+
+                                               if (column.definition.formatter === "tick") {
+                                                       column.definition.formatter = "tickCross";
+                                                       console.warn("DEPRECATION WARNING - the tick editor has been deprecated, please use the tickCross editor");
+                                               }
+
+                                               if (self.editors[column.definition.formatter]) {
+                                                       config.editor = self.editors[column.definition.formatter];
+                                               } else {
+                                                       config.editor = self.editors["input"];
+                                               }
+                                       } else {
+                                               console.warn("Editor Error - Cannot auto lookup editor for a custom formatter: ", column.definition.formatter);
+                                       }
+                               }
+                               break;
+               }
+
+               if (config.editor) {
+                       column.modules.edit = config;
+               }
+       };
+
+       Edit.prototype.getCurrentCell = function () {
+               return this.currentCell ? this.currentCell.getComponent() : false;
+       };
+
+       Edit.prototype.clearEditor = function (cancel) {
+               var cell = this.currentCell,
+                   cellEl;
+
+               this.invalidEdit = false;
+
+               if (cell) {
+                       this.currentCell = false;
+
+                       cellEl = cell.getElement();
+
+                       if (cancel) {
+                               cell.validate();
+                       } else {
+                               cellEl.classList.remove("tabulator-validation-fail");
+                       }
+
+                       cellEl.classList.remove("tabulator-editing");
+                       while (cellEl.firstChild) {
+                               cellEl.removeChild(cellEl.firstChild);
+                       }cell.row.getElement().classList.remove("tabulator-row-editing");
+               }
+       };
+
+       Edit.prototype.cancelEdit = function () {
+
+               if (this.currentCell) {
+                       var cell = this.currentCell;
+                       var component = this.currentCell.getComponent();
+
+                       this.clearEditor(true);
+                       cell.setValueActual(cell.getValue());
+                       cell.cellRendered();
+
+                       if (cell.column.definition.editor == "textarea" || cell.column.definition.variableHeight) {
+                               cell.row.normalizeHeight(true);
+                       }
+
+                       if (cell.column.cellEvents.cellEditCancelled) {
+                               cell.column.cellEvents.cellEditCancelled.call(this.table, component);
+                       }
+
+                       this.table.options.cellEditCancelled.call(this.table, component);
+               }
+       };
+
+       //return a formatted value for a cell
+       Edit.prototype.bindEditor = function (cell) {
+               var self = this,
+                   element = cell.getElement();
+
+               element.setAttribute("tabindex", 0);
+
+               element.addEventListener("click", function (e) {
+                       if (!element.classList.contains("tabulator-editing")) {
+                               element.focus({ preventScroll: true });
+                       }
+               });
+
+               element.addEventListener("mousedown", function (e) {
+                       if (e.button === 2) {
+                               e.preventDefault();
+                       } else {
+                               self.mouseClick = true;
+                       }
+               });
+
+               element.addEventListener("focus", function (e) {
+                       if (!self.recursionBlock) {
+                               self.edit(cell, e, false);
+                       }
+               });
+       };
+
+       Edit.prototype.focusCellNoEvent = function (cell, block) {
+               this.recursionBlock = true;
+               if (!(block && this.table.browser === "ie")) {
+                       cell.getElement().focus({ preventScroll: true });
+               }
+               this.recursionBlock = false;
+       };
+
+       Edit.prototype.editCell = function (cell, forceEdit) {
+               this.focusCellNoEvent(cell);
+               this.edit(cell, false, forceEdit);
+       };
+
+       Edit.prototype.focusScrollAdjust = function (cell) {
+               if (this.table.rowManager.getRenderMode() == "virtual") {
+                       var topEdge = this.table.rowManager.element.scrollTop,
+                           bottomEdge = this.table.rowManager.element.clientHeight + this.table.rowManager.element.scrollTop,
+                           rowEl = cell.row.getElement(),
+                           offset = rowEl.offsetTop;
+
+                       if (rowEl.offsetTop < topEdge) {
+                               this.table.rowManager.element.scrollTop -= topEdge - rowEl.offsetTop;
+                       } else {
+                               if (rowEl.offsetTop + rowEl.offsetHeight > bottomEdge) {
+                                       this.table.rowManager.element.scrollTop += rowEl.offsetTop + rowEl.offsetHeight - bottomEdge;
+                               }
+                       }
+
+                       var leftEdge = this.table.rowManager.element.scrollLeft,
+                           rightEdge = this.table.rowManager.element.clientWidth + this.table.rowManager.element.scrollLeft,
+                           cellEl = cell.getElement(),
+                           offset = cellEl.offsetLeft;
+
+                       if (this.table.modExists("frozenColumns")) {
+                               leftEdge += parseInt(this.table.modules.frozenColumns.leftMargin);
+                               rightEdge -= parseInt(this.table.modules.frozenColumns.rightMargin);
+                       }
+
+                       if (cellEl.offsetLeft < leftEdge) {
+                               this.table.rowManager.element.scrollLeft -= leftEdge - cellEl.offsetLeft;
+                       } else {
+                               if (cellEl.offsetLeft + cellEl.offsetWidth > rightEdge) {
+                                       this.table.rowManager.element.scrollLeft += cellEl.offsetLeft + cellEl.offsetWidth - rightEdge;
+                               }
+                       }
+               }
+       };
+
+       Edit.prototype.edit = function (cell, e, forceEdit) {
+               var self = this,
+                   allowEdit = true,
+                   rendered = function rendered() {},
+                   element = cell.getElement(),
+                   cellEditor,
+                   component,
+                   params;
+
+               //prevent editing if another cell is refusing to leave focus (eg. validation fail)
+               if (this.currentCell) {
+                       if (!this.invalidEdit) {
+                               this.cancelEdit();
+                       }
+                       return;
+               }
+
+               //handle successfull value change
+               function success(value) {
+                       if (self.currentCell === cell) {
+                               var valid = true;
+
+                               if (cell.column.modules.validate && self.table.modExists("validate") && self.table.options.validationMode != "manual") {
+                                       valid = self.table.modules.validate.validate(cell.column.modules.validate, cell, value);
+                               }
+
+                               if (valid === true || self.table.options.validationMode === "highlight") {
+                                       self.clearEditor();
+
+                                       if (!cell.modules.edit) {
+                                               cell.modules.edit = {};
+                                       }
+
+                                       cell.modules.edit.edited = true;
+
+                                       if (self.editedCells.indexOf(cell) == -1) {
+                                               self.editedCells.push(cell);
+                                       }
+
+                                       cell.setValue(value, true);
+
+                                       if (self.table.options.dataTree && self.table.modExists("dataTree")) {
+                                               self.table.modules.dataTree.checkForRestyle(cell);
+                                       }
+
+                                       if (valid !== true) {
+                                               element.classList.add("tabulator-validation-fail");
+                                               self.table.options.validationFailed.call(self.table, cell.getComponent(), value, valid);
+                                               return false;
+                                       }
+
+                                       return true;
+                               } else {
+                                       self.invalidEdit = true;
+                                       element.classList.add("tabulator-validation-fail");
+                                       self.focusCellNoEvent(cell, true);
+                                       rendered();
+                                       self.table.options.validationFailed.call(self.table, cell.getComponent(), value, valid);
+
+                                       return false;
+                               }
+                       } else {
+                               // console.warn("Edit Success Error - cannot call success on a cell that is no longer being edited");
+                       }
+               }
+
+               //handle aborted edit
+               function cancel() {
+                       if (self.currentCell === cell) {
+                               self.cancelEdit();
+
+                               if (self.table.options.dataTree && self.table.modExists("dataTree")) {
+                                       self.table.modules.dataTree.checkForRestyle(cell);
+                               }
+                       } else {
+                               // console.warn("Edit Success Error - cannot call cancel on a cell that is no longer being edited");
+                       }
+               }
+
+               function onRendered(callback) {
+                       rendered = callback;
+               }
+
+               if (!cell.column.modules.edit.blocked) {
+                       if (e) {
+                               e.stopPropagation();
+                       }
+
+                       switch (_typeof(cell.column.modules.edit.check)) {
+                               case "function":
+                                       allowEdit = cell.column.modules.edit.check(cell.getComponent());
+                                       break;
+
+                               case "boolean":
+                                       allowEdit = cell.column.modules.edit.check;
+                                       break;
+                       }
+
+                       if (allowEdit || forceEdit) {
+
+                               self.cancelEdit();
+
+                               self.currentCell = cell;
+
+                               this.focusScrollAdjust(cell);
+
+                               component = cell.getComponent();
+
+                               if (this.mouseClick) {
+                                       this.mouseClick = false;
+
+                                       if (cell.column.cellEvents.cellClick) {
+                                               cell.column.cellEvents.cellClick.call(this.table, e, component);
+                                       }
+                               }
+
+                               if (cell.column.cellEvents.cellEditing) {
+                                       cell.column.cellEvents.cellEditing.call(this.table, component);
+                               }
+
+                               self.table.options.cellEditing.call(this.table, component);
+
+                               params = typeof cell.column.modules.edit.params === "function" ? cell.column.modules.edit.params(component) : cell.column.modules.edit.params;
+
+                               cellEditor = cell.column.modules.edit.editor.call(self, component, onRendered, success, cancel, params);
+
+                               //if editor returned, add to DOM, if false, abort edit
+                               if (cellEditor !== false) {
+
+                                       if (cellEditor instanceof Node) {
+                                               element.classList.add("tabulator-editing");
+                                               cell.row.getElement().classList.add("tabulator-row-editing");
+                                               while (element.firstChild) {
+                                                       element.removeChild(element.firstChild);
+                                               }element.appendChild(cellEditor);
+
+                                               //trigger onRendered Callback
+                                               rendered();
+
+                                               //prevent editing from triggering rowClick event
+                                               var children = element.children;
+
+                                               for (var i = 0; i < children.length; i++) {
+                                                       children[i].addEventListener("click", function (e) {
+                                                               e.stopPropagation();
+                                                       });
+                                               }
+                                       } else {
+                                               console.warn("Edit Error - Editor should return an instance of Node, the editor returned:", cellEditor);
+                                               element.blur();
+                                               return false;
+                                       }
+                               } else {
+                                       element.blur();
+                                       return false;
+                               }
+
+                               return true;
+                       } else {
+                               this.mouseClick = false;
+                               element.blur();
+                               return false;
+                       }
+               } else {
+                       this.mouseClick = false;
+                       element.blur();
+                       return false;
+               }
+       };
+
+       Edit.prototype.maskInput = function (el, options) {
+               var mask = options.mask,
+                   maskLetter = typeof options.maskLetterChar !== "undefined" ? options.maskLetterChar : "A",
+                   maskNumber = typeof options.maskNumberChar !== "undefined" ? options.maskNumberChar : "9",
+                   maskWildcard = typeof options.maskWildcardChar !== "undefined" ? options.maskWildcardChar : "*",
+                   success = false;
+
+               function fillSymbols(index) {
+                       var symbol = mask[index];
+                       if (typeof symbol !== "undefined" && symbol !== maskWildcard && symbol !== maskLetter && symbol !== maskNumber) {
+                               el.value = el.value + "" + symbol;
+                               fillSymbols(index + 1);
+                       }
+               }
+
+               el.addEventListener("keydown", function (e) {
+                       var index = el.value.length,
+                           char = e.key;
+
+                       if (e.keyCode > 46) {
+                               if (index >= mask.length) {
+                                       e.preventDefault();
+                                       e.stopPropagation();
+                                       success = false;
+                                       return false;
+                               } else {
+                                       switch (mask[index]) {
+                                               case maskLetter:
+                                                       if (char.toUpperCase() == char.toLowerCase()) {
+                                                               e.preventDefault();
+                                                               e.stopPropagation();
+                                                               success = false;
+                                                               return false;
+                                                       }
+                                                       break;
+
+                                               case maskNumber:
+                                                       if (isNaN(char)) {
+                                                               e.preventDefault();
+                                                               e.stopPropagation();
+                                                               success = false;
+                                                               return false;
+                                                       }
+                                                       break;
+
+                                               case maskWildcard:
+                                                       break;
+
+                                               default:
+                                                       if (char !== mask[index]) {
+                                                               e.preventDefault();
+                                                               e.stopPropagation();
+                                                               success = false;
+                                                               return false;
+                                                       }
+                                       }
+                               }
+
+                               success = true;
+                       }
+
+                       return;
+               });
+
+               el.addEventListener("keyup", function (e) {
+                       if (e.keyCode > 46) {
+                               if (options.maskAutoFill) {
+                                       fillSymbols(el.value.length);
+                               }
+                       }
+               });
+
+               if (!el.placeholder) {
+                       el.placeholder = mask;
+               }
+
+               if (options.maskAutoFill) {
+                       fillSymbols(el.value.length);
+               }
+       };
+
+       Edit.prototype.getEditedCells = function () {
+               var output = [];
+
+               this.editedCells.forEach(function (cell) {
+                       output.push(cell.getComponent());
+               });
+
+               return output;
+       };
+
+       Edit.prototype.clearEdited = function (cell) {
+               var editIndex;
+
+               if (cell.modules.edit && cell.modules.edit.edited) {
+                       cell.modules.edit.edited = false;
+
+                       if (cell.modules.validate) {
+                               cell.modules.validate.invalid = false;
+                       }
+               }
+
+               editIndex = this.editedCells.indexOf(cell);
+
+               if (editIndex > -1) {
+                       this.editedCells.splice(editIndex, 1);
+               }
+       };
+
+       //default data editors
+       Edit.prototype.editors = {
+
+               //input element
+               input: function input(cell, onRendered, success, cancel, editorParams) {
+
+                       //create and style input
+                       var cellValue = cell.getValue(),
+                           input = document.createElement("input");
+
+                       input.setAttribute("type", editorParams.search ? "search" : "text");
+
+                       input.style.padding = "4px";
+                       input.style.width = "100%";
+                       input.style.boxSizing = "border-box";
+
+                       if (editorParams.elementAttributes && _typeof(editorParams.elementAttributes) == "object") {
+                               for (var key in editorParams.elementAttributes) {
+                                       if (key.charAt(0) == "+") {
+                                               key = key.slice(1);
+                                               input.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes["+" + key]);
+                                       } else {
+                                               input.setAttribute(key, editorParams.elementAttributes[key]);
+                                       }
+                               }
+                       }
+
+                       input.value = typeof cellValue !== "undefined" ? cellValue : "";
+
+                       onRendered(function () {
+                               input.focus({ preventScroll: true });
+                               input.style.height = "100%";
+                       });
+
+                       function onChange(e) {
+                               if ((cellValue === null || typeof cellValue === "undefined") && input.value !== "" || input.value !== cellValue) {
+                                       if (success(input.value)) {
+                                               cellValue = input.value; //persist value if successfully validated incase editor is used as header filter
+                                       }
+                               } else {
+                                       cancel();
+                               }
+                       }
+
+                       //submit new value on blur or change
+                       input.addEventListener("change", onChange);
+                       input.addEventListener("blur", onChange);
+
+                       //submit new value on enter
+                       input.addEventListener("keydown", function (e) {
+                               switch (e.keyCode) {
+                                       // case 9:
+                                       case 13:
+                                               onChange(e);
+                                               break;
+
+                                       case 27:
+                                               cancel();
+                                               break;
+
+                                       case 35:
+                                       case 36:
+                                               e.stopPropagation();
+                                               break;
+                               }
+                       });
+
+                       if (editorParams.mask) {
+                               this.table.modules.edit.maskInput(input, editorParams);
+                       }
+
+                       return input;
+               },
+
+               //resizable text area element
+               textarea: function textarea(cell, onRendered, success, cancel, editorParams) {
+                       var self = this,
+                           cellValue = cell.getValue(),
+                           vertNav = editorParams.verticalNavigation || "hybrid",
+                           value = String(cellValue !== null && typeof cellValue !== "undefined" ? cellValue : ""),
+                           count = (value.match(/(?:\r\n|\r|\n)/g) || []).length + 1,
+                           input = document.createElement("textarea"),
+                           scrollHeight = 0;
+
+                       //create and style input
+                       input.style.display = "block";
+                       input.style.padding = "2px";
+                       input.style.height = "100%";
+                       input.style.width = "100%";
+                       input.style.boxSizing = "border-box";
+                       input.style.whiteSpace = "pre-wrap";
+                       input.style.resize = "none";
+
+                       if (editorParams.elementAttributes && _typeof(editorParams.elementAttributes) == "object") {
+                               for (var key in editorParams.elementAttributes) {
+                                       if (key.charAt(0) == "+") {
+                                               key = key.slice(1);
+                                               input.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes["+" + key]);
+                                       } else {
+                                               input.setAttribute(key, editorParams.elementAttributes[key]);
+                                       }
+                               }
+                       }
+
+                       input.value = value;
+
+                       onRendered(function () {
+                               input.focus({ preventScroll: true });
+                               input.style.height = "100%";
+
+                               input.scrollHeight;
+                               input.style.height = input.scrollHeight + "px";
+                               cell.getRow().normalizeHeight();
+                       });
+
+                       function onChange(e) {
+
+                               if ((cellValue === null || typeof cellValue === "undefined") && input.value !== "" || input.value !== cellValue) {
+
+                                       if (success(input.value)) {
+                                               cellValue = input.value; //persist value if successfully validated incase editor is used as header filter
+                                       }
+
+                                       setTimeout(function () {
+                                               cell.getRow().normalizeHeight();
+                                       }, 300);
+                               } else {
+                                       cancel();
+                               }
+                       }
+
+                       //submit new value on blur or change
+                       input.addEventListener("change", onChange);
+                       input.addEventListener("blur", onChange);
+
+                       input.addEventListener("keyup", function () {
+
+                               input.style.height = "";
+
+                               var heightNow = input.scrollHeight;
+
+                               input.style.height = heightNow + "px";
+
+                               if (heightNow != scrollHeight) {
+                                       scrollHeight = heightNow;
+                                       cell.getRow().normalizeHeight();
+                               }
+                       });
+
+                       input.addEventListener("keydown", function (e) {
+
+                               switch (e.keyCode) {
+                                       case 27:
+                                               cancel();
+                                               break;
+
+                                       case 38:
+                                               //up arrow
+                                               if (vertNav == "editor" || vertNav == "hybrid" && input.selectionStart) {
+                                                       e.stopImmediatePropagation();
+                                                       e.stopPropagation();
+                                               }
+
+                                               break;
+
+                                       case 40:
+                                               //down arrow
+                                               if (vertNav == "editor" || vertNav == "hybrid" && input.selectionStart !== input.value.length) {
+                                                       e.stopImmediatePropagation();
+                                                       e.stopPropagation();
+                                               }
+                                               break;
+
+                                       case 35:
+                                       case 36:
+                                               e.stopPropagation();
+                                               break;
+                               }
+                       });
+
+                       if (editorParams.mask) {
+                               this.table.modules.edit.maskInput(input, editorParams);
+                       }
+
+                       return input;
+               },
+
+               //input element with type of number
+               number: function number(cell, onRendered, success, cancel, editorParams) {
+
+                       var cellValue = cell.getValue(),
+                           vertNav = editorParams.verticalNavigation || "editor",
+                           input = document.createElement("input");
+
+                       input.setAttribute("type", "number");
+
+                       if (typeof editorParams.max != "undefined") {
+                               input.setAttribute("max", editorParams.max);
+                       }
+
+                       if (typeof editorParams.min != "undefined") {
+                               input.setAttribute("min", editorParams.min);
+                       }
+
+                       if (typeof editorParams.step != "undefined") {
+                               input.setAttribute("step", editorParams.step);
+                       }
+
+                       //create and style input
+                       input.style.padding = "4px";
+                       input.style.width = "100%";
+                       input.style.boxSizing = "border-box";
+
+                       if (editorParams.elementAttributes && _typeof(editorParams.elementAttributes) == "object") {
+                               for (var key in editorParams.elementAttributes) {
+                                       if (key.charAt(0) == "+") {
+                                               key = key.slice(1);
+                                               input.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes["+" + key]);
+                                       } else {
+                                               input.setAttribute(key, editorParams.elementAttributes[key]);
+                                       }
+                               }
+                       }
+
+                       input.value = cellValue;
+
+                       var blurFunc = function blurFunc(e) {
+                               onChange();
+                       };
+
+                       onRendered(function () {
+                               //submit new value on blur
+                               input.removeEventListener("blur", blurFunc);
+
+                               input.focus({ preventScroll: true });
+                               input.style.height = "100%";
+
+                               //submit new value on blur
+                               input.addEventListener("blur", blurFunc);
+                       });
+
+                       function onChange() {
+                               var value = input.value;
+
+                               if (!isNaN(value) && value !== "") {
+                                       value = Number(value);
+                               }
+
+                               if (value !== cellValue) {
+                                       if (success(value)) {
+                                               cellValue = value; //persist value if successfully validated incase editor is used as header filter
+                                       }
+                               } else {
+                                       cancel();
+                               }
+                       }
+
+                       //submit new value on enter
+                       input.addEventListener("keydown", function (e) {
+                               switch (e.keyCode) {
+                                       case 13:
+                                               // case 9:
+                                               onChange();
+                                               break;
+
+                                       case 27:
+                                               cancel();
+                                               break;
+
+                                       case 38: //up arrow
+                                       case 40:
+                                               //down arrow
+                                               if (vertNav == "editor") {
+                                                       e.stopImmediatePropagation();
+                                                       e.stopPropagation();
+                                               }
+                                               break;
+
+                                       case 35:
+                                       case 36:
+                                               e.stopPropagation();
+                                               break;
+                               }
+                       });
+
+                       if (editorParams.mask) {
+                               this.table.modules.edit.maskInput(input, editorParams);
+                       }
+
+                       return input;
+               },
+
+               //input element with type of number
+               range: function range(cell, onRendered, success, cancel, editorParams) {
+
+                       var cellValue = cell.getValue(),
+                           input = document.createElement("input");
+
+                       input.setAttribute("type", "range");
+
+                       if (typeof editorParams.max != "undefined") {
+                               input.setAttribute("max", editorParams.max);
+                       }
+
+                       if (typeof editorParams.min != "undefined") {
+                               input.setAttribute("min", editorParams.min);
+                       }
+
+                       if (typeof editorParams.step != "undefined") {
+                               input.setAttribute("step", editorParams.step);
+                       }
+
+                       //create and style input
+                       input.style.padding = "4px";
+                       input.style.width = "100%";
+                       input.style.boxSizing = "border-box";
+
+                       if (editorParams.elementAttributes && _typeof(editorParams.elementAttributes) == "object") {
+                               for (var key in editorParams.elementAttributes) {
+                                       if (key.charAt(0) == "+") {
+                                               key = key.slice(1);
+                                               input.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes["+" + key]);
+                                       } else {
+                                               input.setAttribute(key, editorParams.elementAttributes[key]);
+                                       }
+                               }
+                       }
+
+                       input.value = cellValue;
+
+                       onRendered(function () {
+                               input.focus({ preventScroll: true });
+                               input.style.height = "100%";
+                       });
+
+                       function onChange() {
+                               var value = input.value;
+
+                               if (!isNaN(value) && value !== "") {
+                                       value = Number(value);
+                               }
+
+                               if (value != cellValue) {
+                                       if (success(value)) {
+                                               cellValue = value; //persist value if successfully validated incase editor is used as header filter
+                                       }
+                               } else {
+                                       cancel();
+                               }
+                       }
+
+                       //submit new value on blur
+                       input.addEventListener("blur", function (e) {
+                               onChange();
+                       });
+
+                       //submit new value on enter
+                       input.addEventListener("keydown", function (e) {
+                               switch (e.keyCode) {
+                                       case 13:
+                                               // case 9:
+                                               onChange();
+                                               break;
+
+                                       case 27:
+                                               cancel();
+                                               break;
+                               }
+                       });
+
+                       return input;
+               },
+
+               //select
+               select: function select(cell, onRendered, success, cancel, editorParams) {
+                       var _this53 = this;
+
+                       var self = this,
+                           cellEl = cell.getElement(),
+                           initialValue = cell.getValue(),
+                           vertNav = editorParams.verticalNavigation || "editor",
+                           initialDisplayValue = typeof initialValue !== "undefined" || initialValue === null ? Array.isArray(initialValue) ? initialValue : [initialValue] : typeof editorParams.defaultValue !== "undefined" ? editorParams.defaultValue : [],
+                           input = document.createElement("input"),
+                           listEl = document.createElement("div"),
+                           multiselect = editorParams.multiselect,
+                           dataItems = [],
+                           currentItem = {},
+                           displayItems = [],
+                           currentItems = [],
+                           blurable = true,
+                           blockListShow = false;
+
+                       if (Array.isArray(editorParams) || !Array.isArray(editorParams) && (typeof editorParams === 'undefined' ? 'undefined' : _typeof(editorParams)) === "object" && !editorParams.values) {
+                               console.warn("DEPRECATION WARNING - values for the select editor must now be passed into the values property of the editorParams object, not as the editorParams object");
+                               editorParams = { values: editorParams };
+                       }
+
+                       function getUniqueColumnValues(field) {
+                               var output = {},
+                                   data = self.table.getData(),
+                                   column;
+
+                               if (field) {
+                                       column = self.table.columnManager.getColumnByField(field);
+                               } else {
+                                       column = cell.getColumn()._getSelf();
+                               }
+
+                               if (column) {
+                                       data.forEach(function (row) {
+                                               var val = column.getFieldValue(row);
+
+                                               if (val !== null && typeof val !== "undefined" && val !== "") {
+                                                       output[val] = true;
+                                               }
+                                       });
+
+                                       if (editorParams.sortValuesList) {
+                                               if (editorParams.sortValuesList == "asc") {
+                                                       output = Object.keys(output).sort();
+                                               } else {
+                                                       output = Object.keys(output).sort().reverse();
+                                               }
+                                       } else {
+                                               output = Object.keys(output);
+                                       }
+                               } else {
+                                       console.warn("unable to find matching column to create select lookup list:", field);
+                               }
+
+                               return output;
+                       }
+
+                       function parseItems(inputValues, curentValues) {
+                               var dataList = [];
+                               var displayList = [];
+
+                               function processComplexListItem(item) {
+                                       var item = {
+                                               label: item.label,
+                                               value: item.value,
+                                               itemParams: item.itemParams,
+                                               elementAttributes: item.elementAttributes,
+                                               element: false
+                                       };
+
+                                       // if(item.value === curentValue || (!isNaN(parseFloat(item.value)) && !isNaN(parseFloat(item.value)) && parseFloat(item.value) === parseFloat(curentValue))){
+                                       //      setCurrentItem(item);
+                                       // }
+
+                                       if (curentValues.indexOf(item.value) > -1) {
+                                               setItem(item);
+                                       }
+
+                                       dataList.push(item);
+                                       displayList.push(item);
+
+                                       return item;
+                               }
+
+                               if (typeof inputValues == "function") {
+                                       inputValues = inputValues(cell);
+                               }
+
+                               if (Array.isArray(inputValues)) {
+                                       inputValues.forEach(function (value) {
+                                               var item;
+
+                                               if ((typeof value === 'undefined' ? 'undefined' : _typeof(value)) === "object") {
+
+                                                       if (value.options) {
+                                                               item = {
+                                                                       label: value.label,
+                                                                       group: true,
+                                                                       itemParams: value.itemParams,
+                                                                       elementAttributes: value.elementAttributes,
+                                                                       element: false
+                                                               };
+
+                                                               displayList.push(item);
+
+                                                               value.options.forEach(function (item) {
+                                                                       processComplexListItem(item);
+                                                               });
+                                                       } else {
+                                                               processComplexListItem(value);
+                                                       }
+                                               } else {
+
+                                                       item = {
+                                                               label: value,
+                                                               value: value,
+                                                               element: false
+                                                       };
+
+                                                       // if(item.value === curentValue || (!isNaN(parseFloat(item.value)) && !isNaN(parseFloat(item.value)) && parseFloat(item.value) === parseFloat(curentValue))){
+                                                       //      setCurrentItem(item);
+                                                       // }
+
+                                                       if (curentValues.indexOf(item.value) > -1) {
+                                                               setItem(item);
+                                                       }
+
+                                                       dataList.push(item);
+                                                       displayList.push(item);
+                                               }
+                                       });
+                               } else {
+                                       for (var key in inputValues) {
+                                               var item = {
+                                                       label: inputValues[key],
+                                                       value: key,
+                                                       element: false
+                                               };
+
+                                               // if(item.value === curentValue || (!isNaN(parseFloat(item.value)) && !isNaN(parseFloat(item.value)) && parseFloat(item.value) === parseFloat(curentValue))){
+                                               //      setCurrentItem(item);
+                                               // }
+
+                                               if (curentValues.indexOf(item.value) > -1) {
+                                                       setItem(item);
+                                               }
+
+                                               dataList.push(item);
+                                               displayList.push(item);
+                                       }
+                               }
+
+                               dataItems = dataList;
+                               displayItems = displayList;
+
+                               fillList();
+                       }
+
+                       function fillList() {
+                               while (listEl.firstChild) {
+                                       listEl.removeChild(listEl.firstChild);
+                               }displayItems.forEach(function (item) {
+
+                                       var el = item.element;
+
+                                       if (!el) {
+                                               el = document.createElement("div");
+                                               item.label = editorParams.listItemFormatter ? editorParams.listItemFormatter(item.value, item.label, cell, el, item.itemParams) : item.label;
+                                               if (item.group) {
+                                                       el.classList.add("tabulator-edit-select-list-group");
+                                                       el.tabIndex = 0;
+                                                       el.innerHTML = item.label === "" ? "&nbsp;" : item.label;
+                                               } else {
+                                                       el.classList.add("tabulator-edit-select-list-item");
+                                                       el.tabIndex = 0;
+                                                       el.innerHTML = item.label === "" ? "&nbsp;" : item.label;
+
+                                                       el.addEventListener("click", function () {
+                                                               blockListShow = true;
+
+                                                               setTimeout(function () {
+                                                                       blockListShow = false;
+                                                               }, 10);
+
+                                                               // setCurrentItem(item);
+                                                               // chooseItem();
+                                                               if (multiselect) {
+                                                                       toggleItem(item);
+                                                                       input.focus();
+                                                               } else {
+                                                                       chooseItem(item);
+                                                               }
+                                                       });
+
+                                                       // if(item === currentItem){
+                                                       //      el.classList.add("active");
+                                                       // }
+
+                                                       if (currentItems.indexOf(item) > -1) {
+                                                               el.classList.add("active");
+                                                       }
+                                               }
+
+                                               if (item.elementAttributes && _typeof(item.elementAttributes) == "object") {
+                                                       for (var key in item.elementAttributes) {
+                                                               if (key.charAt(0) == "+") {
+                                                                       key = key.slice(1);
+                                                                       el.setAttribute(key, input.getAttribute(key) + item.elementAttributes["+" + key]);
+                                                               } else {
+                                                                       el.setAttribute(key, item.elementAttributes[key]);
+                                                               }
+                                                       }
+                                               }
+                                               el.addEventListener("mousedown", function () {
+                                                       blurable = false;
+
+                                                       setTimeout(function () {
+                                                               blurable = true;
+                                                       }, 10);
+                                               });
+
+                                               item.element = el;
+                                       }
+
+                                       listEl.appendChild(el);
+                               });
+                       }
+
+                       function setCurrentItem(item, active) {
+
+                               if (!multiselect && currentItem && currentItem.element) {
+                                       currentItem.element.classList.remove("active");
+                               }
+
+                               if (currentItem && currentItem.element) {
+                                       currentItem.element.classList.remove("focused");
+                               }
+
+                               currentItem = item;
+
+                               if (item.element) {
+                                       item.element.classList.add("focused");
+                                       if (active) {
+                                               item.element.classList.add("active");
+                                       }
+                               }
+
+                               if (item && item.element && item.element.scrollIntoView) {
+                                       item.element.scrollIntoView({ behavior: 'smooth', block: 'nearest', inline: 'start' });
+                               }
+                       }
+
+                       // function chooseItem(){
+                       //      hideList();
+
+                       //      if(initialValue !== currentItem.value){
+                       //              initialValue = currentItem.value;
+                       //              success(currentItem.value);
+                       //      }else{
+                       //              cancel();
+                       //      }
+                       // }
+
+                       function setItem(item) {
+                               var index = currentItems.indexOf(item);
+
+                               if (index == -1) {
+                                       currentItems.push(item);
+                                       setCurrentItem(item, true);
+                               }
+
+                               fillInput();
+                       }
+
+                       function unsetItem(index) {
+                               var item = currentItems[index];
+
+                               if (index > -1) {
+                                       currentItems.splice(index, 1);
+                                       if (item.element) {
+                                               item.element.classList.remove("active");
+                                       }
+                               }
+                       }
+
+                       function toggleItem(item) {
+                               if (!item) {
+                                       item = currentItem;
+                               }
+
+                               var index = currentItems.indexOf(item);
+
+                               if (index > -1) {
+                                       unsetItem(index);
+                               } else {
+                                       if (multiselect !== true && currentItems.length >= multiselect) {
+                                               unsetItem(0);
+                                       }
+
+                                       setItem(item);
+                               }
+
+                               fillInput();
+                       }
+
+                       function chooseItem(item) {
+                               hideList();
+
+                               if (!item) {
+                                       item = currentItem;
+                               }
+
+                               if (item) {
+                                       input.value = item.label;
+                                       success(item.value);
+                               }
+
+                               initialDisplayValue = input.value;
+                       }
+
+                       function chooseItems(silent) {
+                               if (!silent) {
+                                       hideList();
+                               }
+
+                               var output = [];
+
+                               currentItems.forEach(function (item) {
+                                       output.push(item.value);
+                               });
+
+                               initialDisplayValue = input.value;
+
+                               success(output);
+                       }
+
+                       function fillInput() {
+                               var output = [];
+
+                               currentItems.forEach(function (item) {
+                                       output.push(item.label);
+                               });
+
+                               input.value = output.join(", ");
+
+                               if (self.currentCell === false) {
+                                       chooseItems(true);
+                               }
+                       }
+
+                       function unsetItems() {
+
+                               var len = currentItems.length;
+
+                               for (var _i9 = 0; _i9 < len; _i9++) {
+                                       unsetItem(0);
+                               }
+                       }
+
+                       function cancelItem() {
+                               hideList();
+                               cancel();
+                       }
+
+                       function showList() {
+                               currentItems = [];
+
+                               if (!listEl.parentNode) {
+                                       if (editorParams.values === true) {
+                                               parseItems(getUniqueColumnValues(), initialDisplayValue);
+                                       } else if (typeof editorParams.values === "string") {
+                                               parseItems(getUniqueColumnValues(editorParams.values), initialDisplayValue);
+                                       } else {
+                                               parseItems(editorParams.values || [], initialDisplayValue);
+                                       }
+
+                                       var offset = Tabulator.prototype.helpers.elOffset(cellEl);
+
+                                       listEl.style.minWidth = cellEl.offsetWidth + "px";
+
+                                       listEl.style.top = offset.top + cellEl.offsetHeight + "px";
+                                       listEl.style.left = offset.left + "px";
+
+                                       listEl.addEventListener("mousedown", function (e) {
+                                               blurable = false;
+
+                                               setTimeout(function () {
+                                                       blurable = true;
+                                               }, 10);
+                                       });
+
+                                       document.body.appendChild(listEl);
+                               }
+                       }
+
+                       function hideList() {
+                               if (listEl.parentNode) {
+                                       listEl.parentNode.removeChild(listEl);
+                               }
+
+                               removeScrollListener();
+                       }
+
+                       function removeScrollListener() {
+                               self.table.rowManager.element.removeEventListener("scroll", cancelItem);
+                       }
+
+                       //style input
+                       input.setAttribute("type", "text");
+
+                       input.style.padding = "4px";
+                       input.style.width = "100%";
+                       input.style.boxSizing = "border-box";
+                       input.style.cursor = "default";
+                       input.readOnly = this.currentCell != false;
+
+                       if (editorParams.elementAttributes && _typeof(editorParams.elementAttributes) == "object") {
+                               for (var key in editorParams.elementAttributes) {
+                                       if (key.charAt(0) == "+") {
+                                               key = key.slice(1);
+                                               input.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes["+" + key]);
+                                       } else {
+                                               input.setAttribute(key, editorParams.elementAttributes[key]);
+                                       }
+                               }
+                       }
+
+                       input.value = typeof initialValue !== "undefined" || initialValue === null ? initialValue : "";
+
+                       // if(editorParams.values === true){
+                       //      parseItems(getUniqueColumnValues(), initialValue);
+                       // }else if(typeof editorParams.values === "string"){
+                       //      parseItems(getUniqueColumnValues(editorParams.values), initialValue);
+                       // }else{
+                       //      parseItems(editorParams.values || [], initialValue);
+                       // }
+
+                       input.addEventListener("search", function (e) {
+                               if (!input.value) {
+                                       unsetItems();
+                                       chooseItems();
+                               }
+                       });
+
+                       //allow key based navigation
+                       input.addEventListener("keydown", function (e) {
+                               var index;
+
+                               switch (e.keyCode) {
+                                       case 38:
+                                               //up arrow
+                                               index = dataItems.indexOf(currentItem);
+
+                                               if (vertNav == "editor" || vertNav == "hybrid" && index) {
+                                                       e.stopImmediatePropagation();
+                                                       e.stopPropagation();
+                                                       e.preventDefault();
+
+                                                       if (index > 0) {
+                                                               setCurrentItem(dataItems[index - 1], !multiselect);
+                                                       }
+                                               }
+                                               break;
+
+                                       case 40:
+                                               //down arrow
+                                               index = dataItems.indexOf(currentItem);
+
+                                               if (vertNav == "editor" || vertNav == "hybrid" && index < dataItems.length - 1) {
+                                                       e.stopImmediatePropagation();
+                                                       e.stopPropagation();
+                                                       e.preventDefault();
+
+                                                       if (index < dataItems.length - 1) {
+                                                               if (index == -1) {
+                                                                       setCurrentItem(dataItems[0], !multiselect);
+                                                               } else {
+                                                                       setCurrentItem(dataItems[index + 1], !multiselect);
+                                                               }
+                                                       }
+                                               }
+                                               break;
+
+                                       case 37: //left arrow
+                                       case 39:
+                                               //right arrow
+                                               e.stopImmediatePropagation();
+                                               e.stopPropagation();
+                                               e.preventDefault();
+                                               break;
+
+                                       case 13:
+                                               //enter
+                                               // chooseItem();
+
+                                               if (multiselect) {
+                                                       toggleItem();
+                                               } else {
+                                                       chooseItem();
+                                               }
+
+                                               break;
+
+                                       case 27:
+                                               //escape
+                                               cancelItem();
+                                               break;
+
+                                       case 9:
+                                               //tab
+                                               break;
+
+                                       default:
+                                               if (self.currentCell === false) {
+                                                       e.preventDefault();
+                                               }
+                               }
+                       });
+
+                       input.addEventListener("blur", function (e) {
+                               if (blurable) {
+                                       if (multiselect) {
+                                               chooseItems();
+                                       } else {
+                                               cancelItem();
+                                       }
+                               }
+                       });
+
+                       input.addEventListener("focus", function (e) {
+                               if (!blockListShow) {
+                                       showList();
+                               }
+                       });
+
+                       //style list element
+                       listEl = document.createElement("div");
+                       listEl.classList.add("tabulator-edit-select-list");
+
+                       onRendered(function () {
+                               input.style.height = "100%";
+                               input.focus({ preventScroll: true });
+                       });
+
+                       setTimeout(function () {
+                               _this53.table.rowManager.element.addEventListener("scroll", cancelItem);
+                       }, 10);
+
+                       return input;
+               },
+
+               //autocomplete
+               autocomplete: function autocomplete(cell, onRendered, success, cancel, editorParams) {
+                       var _this54 = this;
+
+                       var self = this,
+                           cellEl = cell.getElement(),
+                           initialValue = cell.getValue(),
+                           vertNav = editorParams.verticalNavigation || "editor",
+                           initialDisplayValue = typeof initialValue !== "undefined" || initialValue === null ? initialValue : typeof editorParams.defaultValue !== "undefined" ? editorParams.defaultValue : "",
+                           input = document.createElement("input"),
+                           listEl = document.createElement("div"),
+                           allItems = [],
+                           displayItems = [],
+                           values = [],
+                           currentItem = false,
+                           blurable = true,
+                           uniqueColumnValues = false;
+
+                       //style input
+                       input.setAttribute("type", "search");
+
+                       input.style.padding = "4px";
+                       input.style.width = "100%";
+                       input.style.boxSizing = "border-box";
+
+                       if (editorParams.elementAttributes && _typeof(editorParams.elementAttributes) == "object") {
+                               for (var key in editorParams.elementAttributes) {
+                                       if (key.charAt(0) == "+") {
+                                               key = key.slice(1);
+                                               input.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes["+" + key]);
+                                       } else {
+                                               input.setAttribute(key, editorParams.elementAttributes[key]);
+                                       }
+                               }
+                       }
+
+                       //style list element
+                       listEl.classList.add("tabulator-edit-select-list");
+
+                       listEl.addEventListener("mousedown", function (e) {
+                               blurable = false;
+
+                               setTimeout(function () {
+                                       blurable = true;
+                               }, 10);
+                       });
+
+                       function genUniqueColumnValues() {
+                               if (editorParams.values === true) {
+                                       uniqueColumnValues = getUniqueColumnValues();
+                               } else if (typeof editorParams.values === "string") {
+                                       uniqueColumnValues = getUniqueColumnValues(editorParams.values);
+                               }
+                       }
+
+                       function getUniqueColumnValues(field) {
+                               var output = {},
+                                   data = self.table.getData(),
+                                   column;
+
+                               if (field) {
+                                       column = self.table.columnManager.getColumnByField(field);
+                               } else {
+                                       column = cell.getColumn()._getSelf();
+                               }
+
+                               if (column) {
+                                       data.forEach(function (row) {
+                                               var val = column.getFieldValue(row);
+
+                                               if (val !== null && typeof val !== "undefined" && val !== "") {
+                                                       output[val] = true;
+                                               }
+                                       });
+
+                                       if (editorParams.sortValuesList) {
+                                               if (editorParams.sortValuesList == "asc") {
+                                                       output = Object.keys(output).sort();
+                                               } else {
+                                                       output = Object.keys(output).sort().reverse();
+                                               }
+                                       } else {
+                                               output = Object.keys(output);
+                                       }
+                               } else {
+                                       console.warn("unable to find matching column to create autocomplete lookup list:", field);
+                               }
+
+                               return output;
+                       }
+
+                       function filterList(term, intialLoad) {
+                               var matches = [],
+                                   values,
+                                   items,
+                                   searchEl;
+
+                               //lookup base values list
+                               if (uniqueColumnValues) {
+                                       values = uniqueColumnValues;
+                               } else {
+                                       values = editorParams.values || [];
+                               }
+
+                               if (editorParams.searchFunc) {
+                                       matches = editorParams.searchFunc(term, values);
+
+                                       if (matches instanceof Promise) {
+
+                                               addNotice(typeof editorParams.searchingPlaceholder !== "undefined" ? editorParams.searchingPlaceholder : "Searching...");
+
+                                               matches.then(function (result) {
+                                                       fillListIfNotEmpty(parseItems(result), intialLoad);
+                                               }).catch(function (err) {
+                                                       console.err("error in autocomplete search promise:", err);
+                                               });
+                                       } else {
+                                               fillListIfNotEmpty(parseItems(matches), intialLoad);
+                                       }
+                               } else {
+                                       items = parseItems(values);
+
+                                       if (term === "") {
+                                               if (editorParams.showListOnEmpty) {
+                                                       matches = items;
+                                               }
+                                       } else {
+                                               items.forEach(function (item) {
+                                                       if (item.value !== null || typeof item.value !== "undefined") {
+                                                               if (String(item.value).toLowerCase().indexOf(String(term).toLowerCase()) > -1 || String(item.title).toLowerCase().indexOf(String(term).toLowerCase()) > -1) {
+                                                                       matches.push(item);
+                                                               }
+                                                       }
+                                               });
+                                       }
+
+                                       fillListIfNotEmpty(matches, intialLoad);
+                               }
+                       }
+
+                       function addNotice(notice) {
+                               var searchEl = document.createElement("div");
+
+                               clearList();
+
+                               if (notice !== false) {
+                                       searchEl.classList.add("tabulator-edit-select-list-notice");
+                                       searchEl.tabIndex = 0;
+
+                                       if (notice instanceof Node) {
+                                               searchEl.appendChild(notice);
+                                       } else {
+                                               searchEl.innerHTML = notice;
+                                       }
+
+                                       listEl.appendChild(searchEl);
+                               }
+                       }
+
+                       function parseItems(inputValues) {
+                               var itemList = [];
+
+                               if (Array.isArray(inputValues)) {
+                                       inputValues.forEach(function (value) {
+
+                                               var item = {};
+
+                                               if ((typeof value === 'undefined' ? 'undefined' : _typeof(value)) === "object") {
+                                                       item.title = editorParams.listItemFormatter ? editorParams.listItemFormatter(value.value, value.label) : value.label;
+                                                       item.value = value.value;
+                                               } else {
+                                                       item.title = editorParams.listItemFormatter ? editorParams.listItemFormatter(value, value) : value;
+                                                       item.value = value;
+                                               }
+
+                                               itemList.push(item);
+                                       });
+                               } else {
+                                       for (var key in inputValues) {
+                                               var item = {
+                                                       title: editorParams.listItemFormatter ? editorParams.listItemFormatter(key, inputValues[key]) : inputValues[key],
+                                                       value: key
+                                               };
+
+                                               itemList.push(item);
+                                       }
+                               }
+
+                               return itemList;
+                       }
+
+                       function clearList() {
+                               while (listEl.firstChild) {
+                                       listEl.removeChild(listEl.firstChild);
+                               }
+                       }
+
+                       function fillListIfNotEmpty(items, intialLoad) {
+                               if (items.length) {
+                                       fillList(items, intialLoad);
+                               } else {
+                                       if (editorParams.emptyPlaceholder) {
+                                               addNotice(editorParams.emptyPlaceholder);
+                                       }
+                               }
+                       }
+
+                       function fillList(items, intialLoad) {
+                               var current = false;
+
+                               clearList();
+
+                               displayItems = items;
+
+                               displayItems.forEach(function (item) {
+                                       var el = item.element;
+
+                                       if (!el) {
+                                               el = document.createElement("div");
+                                               el.classList.add("tabulator-edit-select-list-item");
+                                               el.tabIndex = 0;
+                                               el.innerHTML = item.title;
+
+                                               el.addEventListener("click", function (e) {
+                                                       setCurrentItem(item);
+                                                       chooseItem();
+                                               });
+
+                                               el.addEventListener("mousedown", function (e) {
+                                                       blurable = false;
+
+                                                       setTimeout(function () {
+                                                               blurable = true;
+                                                       }, 10);
+                                               });
+
+                                               item.element = el;
+
+                                               if (intialLoad && item.value == initialValue) {
+                                                       input.value = item.title;
+                                                       item.element.classList.add("active");
+                                                       current = true;
+                                               }
+
+                                               if (item === currentItem) {
+                                                       item.element.classList.add("active");
+                                                       current = true;
+                                               }
+                                       }
+
+                                       listEl.appendChild(el);
+                               });
+
+                               if (!current) {
+                                       setCurrentItem(false);
+                               }
+                       }
+
+                       function chooseItem() {
+                               hideList();
+
+                               if (currentItem) {
+                                       if (initialValue !== currentItem.value) {
+                                               initialValue = currentItem.value;
+                                               input.value = currentItem.title;
+                                               success(currentItem.value);
+                                       } else {
+                                               cancel();
+                                       }
+                               } else {
+                                       if (editorParams.freetext) {
+                                               initialValue = input.value;
+                                               success(input.value);
+                                       } else {
+                                               if (editorParams.allowEmpty && input.value === "") {
+                                                       initialValue = input.value;
+                                                       success(input.value);
+                                               } else {
+                                                       cancel();
+                                               }
+                                       }
+                               }
+                       }
+
+                       function showList() {
+                               if (!listEl.parentNode) {
+                                       while (listEl.firstChild) {
+                                               listEl.removeChild(listEl.firstChild);
+                                       }var offset = Tabulator.prototype.helpers.elOffset(cellEl);
+
+                                       listEl.style.minWidth = cellEl.offsetWidth + "px";
+
+                                       listEl.style.top = offset.top + cellEl.offsetHeight + "px";
+                                       listEl.style.left = offset.left + "px";
+                                       document.body.appendChild(listEl);
+                               }
+                       }
+
+                       function setCurrentItem(item, showInputValue) {
+                               if (currentItem && currentItem.element) {
+                                       currentItem.element.classList.remove("active");
+                               }
+
+                               currentItem = item;
+
+                               if (item && item.element) {
+                                       item.element.classList.add("active");
+                               }
+
+                               if (item && item.element && item.element.scrollIntoView) {
+                                       item.element.scrollIntoView({ behavior: 'smooth', block: 'nearest', inline: 'start' });
+                               }
+                       }
+
+                       function hideList() {
+                               if (listEl.parentNode) {
+                                       listEl.parentNode.removeChild(listEl);
+                               }
+
+                               removeScrollListener();
+                       }
+
+                       function cancelItem() {
+                               hideList();
+                               cancel();
+                       }
+
+                       function removeScrollListener() {
+                               self.table.rowManager.element.removeEventListener("scroll", cancelItem);
+                       }
+
+                       //allow key based navigation
+                       input.addEventListener("keydown", function (e) {
+                               var index;
+
+                               switch (e.keyCode) {
+                                       case 38:
+                                               //up arrow
+                                               index = displayItems.indexOf(currentItem);
+
+                                               if (vertNav == "editor" || vertNav == "hybrid" && index) {
+                                                       e.stopImmediatePropagation();
+                                                       e.stopPropagation();
+                                                       e.preventDefault();
+
+                                                       if (index > 0) {
+                                                               setCurrentItem(displayItems[index - 1]);
+                                                       } else {
+                                                               setCurrentItem(false);
+                                                       }
+                                               }
+                                               break;
+
+                                       case 40:
+                                               //down arrow
+
+                                               index = displayItems.indexOf(currentItem);
+
+                                               if (vertNav == "editor" || vertNav == "hybrid" && index < displayItems.length - 1) {
+
+                                                       e.stopImmediatePropagation();
+                                                       e.stopPropagation();
+                                                       e.preventDefault();
+
+                                                       if (index < displayItems.length - 1) {
+                                                               if (index == -1) {
+                                                                       setCurrentItem(displayItems[0]);
+                                                               } else {
+                                                                       setCurrentItem(displayItems[index + 1]);
+                                                               }
+                                                       }
+                                               }
+                                               break;
+
+                                       case 37: //left arrow
+                                       case 39:
+                                               //right arrow
+                                               e.stopImmediatePropagation();
+                                               e.stopPropagation();
+                                               // e.preventDefault();
+                                               break;
+
+                                       case 13:
+                                               //enter
+                                               chooseItem();
+                                               break;
+
+                                       case 27:
+                                               //escape
+                                               cancelItem();
+                                               break;
+
+                                       case 36: //home
+                                       case 35:
+                                               //end
+                                               //prevent table navigation while using input element
+                                               e.stopImmediatePropagation();
+                                               break;
+                               }
+                       });
+
+                       input.addEventListener("keyup", function (e) {
+
+                               switch (e.keyCode) {
+                                       case 38: //up arrow
+                                       case 37: //left arrow
+                                       case 39: //up arrow
+                                       case 40: //right arrow
+                                       case 13: //enter
+                                       case 27:
+                                               //escape
+                                               break;
+
+                                       default:
+                                               filterList(input.value);
+                               }
+                       });
+
+                       input.addEventListener("search", function (e) {
+                               filterList(input.value);
+                       });
+
+                       input.addEventListener("blur", function (e) {
+                               if (blurable) {
+                                       chooseItem();
+                               }
+                       });
+
+                       input.addEventListener("focus", function (e) {
+                               var value = initialDisplayValue;
+                               genUniqueColumnValues();
+                               showList();
+                               input.value = value;
+                               filterList(value, true);
+                       });
+
+                       onRendered(function () {
+                               input.style.height = "100%";
+                               input.focus({ preventScroll: true });
+                       });
+
+                       if (editorParams.mask) {
+                               this.table.modules.edit.maskInput(input, editorParams);
+                       }
+
+                       setTimeout(function () {
+                               _this54.table.rowManager.element.addEventListener("scroll", cancelItem);
+                       }, 10);
+
+                       genUniqueColumnValues();
+                       input.value = initialDisplayValue;
+                       filterList(initialDisplayValue, true);
+
+                       return input;
+               },
+
+               //star rating
+               star: function star(cell, onRendered, success, cancel, editorParams) {
+                       var self = this,
+                           element = cell.getElement(),
+                           value = cell.getValue(),
+                           maxStars = element.getElementsByTagName("svg").length || 5,
+                           size = element.getElementsByTagName("svg")[0] ? element.getElementsByTagName("svg")[0].getAttribute("width") : 14,
+                           stars = [],
+                           starsHolder = document.createElement("div"),
+                           star = document.createElementNS('http://www.w3.org/2000/svg', "svg");
+
+                       //change star type
+                       function starChange(val) {
+                               stars.forEach(function (star, i) {
+                                       if (i < val) {
+                                               if (self.table.browser == "ie") {
+                                                       star.setAttribute("class", "tabulator-star-active");
+                                               } else {
+                                                       star.classList.replace("tabulator-star-inactive", "tabulator-star-active");
+                                               }
+
+                                               star.innerHTML = '<polygon fill="#488CE9" stroke="#014AAE" stroke-width="37.6152" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" points="259.216,29.942 330.27,173.919 489.16,197.007 374.185,309.08 401.33,467.31 259.216,392.612 117.104,467.31 144.25,309.08 29.274,197.007 188.165,173.919 "/>';
+                                       } else {
+                                               if (self.table.browser == "ie") {
+                                                       star.setAttribute("class", "tabulator-star-inactive");
+                                               } else {
+                                                       star.classList.replace("tabulator-star-active", "tabulator-star-inactive");
+                                               }
+
+                                               star.innerHTML = '<polygon fill="#010155" stroke="#686868" stroke-width="37.6152" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" points="259.216,29.942 330.27,173.919 489.16,197.007 374.185,309.08 401.33,467.31 259.216,392.612 117.104,467.31 144.25,309.08 29.274,197.007 188.165,173.919 "/>';
+                                       }
+                               });
+                       }
+
+                       //build stars
+                       function buildStar(i) {
+
+                               var starHolder = document.createElement("span");
+                               var nextStar = star.cloneNode(true);
+
+                               stars.push(nextStar);
+
+                               starHolder.addEventListener("mouseenter", function (e) {
+                                       e.stopPropagation();
+                                       e.stopImmediatePropagation();
+                                       starChange(i);
+                               });
+
+                               starHolder.addEventListener("mousemove", function (e) {
+                                       e.stopPropagation();
+                                       e.stopImmediatePropagation();
+                               });
+
+                               starHolder.addEventListener("click", function (e) {
+                                       e.stopPropagation();
+                                       e.stopImmediatePropagation();
+                                       success(i);
+                                       element.blur();
+                               });
+
+                               starHolder.appendChild(nextStar);
+                               starsHolder.appendChild(starHolder);
+                       }
+
+                       //handle keyboard navigation value change
+                       function changeValue(val) {
+                               value = val;
+                               starChange(val);
+                       }
+
+                       //style cell
+                       element.style.whiteSpace = "nowrap";
+                       element.style.overflow = "hidden";
+                       element.style.textOverflow = "ellipsis";
+
+                       //style holding element
+                       starsHolder.style.verticalAlign = "middle";
+                       starsHolder.style.display = "inline-block";
+                       starsHolder.style.padding = "4px";
+
+                       //style star
+                       star.setAttribute("width", size);
+                       star.setAttribute("height", size);
+                       star.setAttribute("viewBox", "0 0 512 512");
+                       star.setAttribute("xml:space", "preserve");
+                       star.style.padding = "0 1px";
+
+                       if (editorParams.elementAttributes && _typeof(editorParams.elementAttributes) == "object") {
+                               for (var key in editorParams.elementAttributes) {
+                                       if (key.charAt(0) == "+") {
+                                               key = key.slice(1);
+                                               starsHolder.setAttribute(key, starsHolder.getAttribute(key) + editorParams.elementAttributes["+" + key]);
+                                       } else {
+                                               starsHolder.setAttribute(key, editorParams.elementAttributes[key]);
+                                       }
+                               }
+                       }
+
+                       //create correct number of stars
+                       for (var i = 1; i <= maxStars; i++) {
+                               buildStar(i);
+                       }
+
+                       //ensure value does not exceed number of stars
+                       value = Math.min(parseInt(value), maxStars);
+
+                       // set initial styling of stars
+                       starChange(value);
+
+                       starsHolder.addEventListener("mousemove", function (e) {
+                               starChange(0);
+                       });
+
+                       starsHolder.addEventListener("click", function (e) {
+                               success(0);
+                       });
+
+                       element.addEventListener("blur", function (e) {
+                               cancel();
+                       });
+
+                       //allow key based navigation
+                       element.addEventListener("keydown", function (e) {
+                               switch (e.keyCode) {
+                                       case 39:
+                                               //right arrow
+                                               changeValue(value + 1);
+                                               break;
+
+                                       case 37:
+                                               //left arrow
+                                               changeValue(value - 1);
+                                               break;
+
+                                       case 13:
+                                               //enter
+                                               success(value);
+                                               break;
+
+                                       case 27:
+                                               //escape
+                                               cancel();
+                                               break;
+                               }
+                       });
+
+                       return starsHolder;
+               },
+
+               //draggable progress bar
+               progress: function progress(cell, onRendered, success, cancel, editorParams) {
+                       var element = cell.getElement(),
+                           max = typeof editorParams.max === "undefined" ? element.getElementsByTagName("div")[0].getAttribute("max") || 100 : editorParams.max,
+                           min = typeof editorParams.min === "undefined" ? element.getElementsByTagName("div")[0].getAttribute("min") || 0 : editorParams.min,
+                           percent = (max - min) / 100,
+                           value = cell.getValue() || 0,
+                           handle = document.createElement("div"),
+                           bar = document.createElement("div"),
+                           mouseDrag,
+                           mouseDragWidth;
+
+                       //set new value
+                       function updateValue() {
+                               var calcVal = percent * Math.round(bar.offsetWidth / (element.clientWidth / 100)) + min;
+                               success(calcVal);
+                               element.setAttribute("aria-valuenow", calcVal);
+                               element.setAttribute("aria-label", value);
+                       }
+
+                       //style handle
+                       handle.style.position = "absolute";
+                       handle.style.right = "0";
+                       handle.style.top = "0";
+                       handle.style.bottom = "0";
+                       handle.style.width = "5px";
+                       handle.classList.add("tabulator-progress-handle");
+
+                       //style bar
+                       bar.style.display = "inline-block";
+                       bar.style.position = "relative";
+                       // bar.style.top = "8px";
+                       // bar.style.bottom = "8px";
+                       // bar.style.left = "4px";
+                       // bar.style.marginRight = "4px";
+                       bar.style.height = "100%";
+                       bar.style.backgroundColor = "#488CE9";
+                       bar.style.maxWidth = "100%";
+                       bar.style.minWidth = "0%";
+
+                       if (editorParams.elementAttributes && _typeof(editorParams.elementAttributes) == "object") {
+                               for (var key in editorParams.elementAttributes) {
+                                       if (key.charAt(0) == "+") {
+                                               key = key.slice(1);
+                                               bar.setAttribute(key, bar.getAttribute(key) + editorParams.elementAttributes["+" + key]);
+                                       } else {
+                                               bar.setAttribute(key, editorParams.elementAttributes[key]);
+                                       }
+                               }
+                       }
+
+                       //style cell
+                       element.style.padding = "4px 4px";
+
+                       //make sure value is in range
+                       value = Math.min(parseFloat(value), max);
+                       value = Math.max(parseFloat(value), min);
+
+                       //workout percentage
+                       value = Math.round((value - min) / percent);
+                       // bar.style.right = value + "%";
+                       bar.style.width = value + "%";
+
+                       element.setAttribute("aria-valuemin", min);
+                       element.setAttribute("aria-valuemax", max);
+
+                       bar.appendChild(handle);
+
+                       handle.addEventListener("mousedown", function (e) {
+                               mouseDrag = e.screenX;
+                               mouseDragWidth = bar.offsetWidth;
+                       });
+
+                       handle.addEventListener("mouseover", function () {
+                               handle.style.cursor = "ew-resize";
+                       });
+
+                       element.addEventListener("mousemove", function (e) {
+                               if (mouseDrag) {
+                                       bar.style.width = mouseDragWidth + e.screenX - mouseDrag + "px";
+                               }
+                       });
+
+                       element.addEventListener("mouseup", function (e) {
+                               if (mouseDrag) {
+                                       e.stopPropagation();
+                                       e.stopImmediatePropagation();
+
+                                       mouseDrag = false;
+                                       mouseDragWidth = false;
+
+                                       updateValue();
+                               }
+                       });
+
+                       //allow key based navigation
+                       element.addEventListener("keydown", function (e) {
+                               switch (e.keyCode) {
+                                       case 39:
+                                               //right arrow
+                                               e.preventDefault();
+                                               bar.style.width = bar.clientWidth + element.clientWidth / 100 + "px";
+                                               break;
+
+                                       case 37:
+                                               //left arrow
+                                               e.preventDefault();
+                                               bar.style.width = bar.clientWidth - element.clientWidth / 100 + "px";
+                                               break;
+
+                                       case 9: //tab
+                                       case 13:
+                                               //enter
+                                               updateValue();
+                                               break;
+
+                                       case 27:
+                                               //escape
+                                               cancel();
+                                               break;
+
+                               }
+                       });
+
+                       element.addEventListener("blur", function () {
+                               cancel();
+                       });
+
+                       return bar;
+               },
+
+               //checkbox
+               tickCross: function tickCross(cell, onRendered, success, cancel, editorParams) {
+                       var value = cell.getValue(),
+                           input = document.createElement("input"),
+                           tristate = editorParams.tristate,
+                           indetermValue = typeof editorParams.indeterminateValue === "undefined" ? null : editorParams.indeterminateValue,
+                           indetermState = false;
+
+                       input.setAttribute("type", "checkbox");
+                       input.style.marginTop = "5px";
+                       input.style.boxSizing = "border-box";
+
+                       if (editorParams.elementAttributes && _typeof(editorParams.elementAttributes) == "object") {
+                               for (var key in editorParams.elementAttributes) {
+                                       if (key.charAt(0) == "+") {
+                                               key = key.slice(1);
+                                               input.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes["+" + key]);
+                                       } else {
+                                               input.setAttribute(key, editorParams.elementAttributes[key]);
+                                       }
+                               }
+                       }
+
+                       input.value = value;
+
+                       if (tristate && (typeof value === "undefined" || value === indetermValue || value === "")) {
+                               indetermState = true;
+                               input.indeterminate = true;
+                       }
+
+                       if (this.table.browser != "firefox") {
+                               //prevent blur issue on mac firefox
+                               onRendered(function () {
+                                       input.focus({ preventScroll: true });
+                               });
+                       }
+
+                       input.checked = value === true || value === "true" || value === "True" || value === 1;
+
+                       onRendered(function () {
+                               input.focus();
+                       });
+
+                       function setValue(blur) {
+                               if (tristate) {
+                                       if (!blur) {
+                                               if (input.checked && !indetermState) {
+                                                       input.checked = false;
+                                                       input.indeterminate = true;
+                                                       indetermState = true;
+                                                       return indetermValue;
+                                               } else {
+                                                       indetermState = false;
+                                                       return input.checked;
+                                               }
+                                       } else {
+                                               if (indetermState) {
+                                                       return indetermValue;
+                                               } else {
+                                                       return input.checked;
+                                               }
+                                       }
+                               } else {
+                                       return input.checked;
+                               }
+                       }
+
+                       //submit new value on blur
+                       input.addEventListener("change", function (e) {
+                               success(setValue());
+                       });
+
+                       input.addEventListener("blur", function (e) {
+                               success(setValue(true));
+                       });
+
+                       //submit new value on enter
+                       input.addEventListener("keydown", function (e) {
+                               if (e.keyCode == 13) {
+                                       success(setValue());
+                               }
+                               if (e.keyCode == 27) {
+                                       cancel();
+                               }
+                       });
+
+                       return input;
+               }
+       };
+
+       Tabulator.prototype.registerModule("edit", Edit);
+
+       var ExportRow = function ExportRow(type, columns, component, indent) {
+               this.type = type;
+               this.columns = columns;
+               this.component = component || false;
+               this.indent = indent || 0;
+       };
+
+       var ExportColumn = function ExportColumn(value, component, width, height, depth) {
+               this.value = value;
+               this.component = component || false;
+               this.width = width;
+               this.height = height;
+               this.depth = depth;
+       };
+
+       var Export = function Export(table) {
+               this.table = table; //hold Tabulator object
+               this.config = {};
+               this.cloneTableStyle = true;
+               this.colVisProp = "";
+       };
+
+       Export.prototype.generateExportList = function (config, style, range, colVisProp) {
+               this.cloneTableStyle = style;
+               this.config = config || {};
+               this.colVisProp = colVisProp;
+
+               var headers = this.config.columnHeaders !== false ? this.headersToExportRows(this.generateColumnGroupHeaders()) : [];
+               var body = this.bodyToExportRows(this.rowLookup(range));
+
+               return headers.concat(body);
+       };
+
+       Export.prototype.genereateTable = function (config, style, range, colVisProp) {
+               var list = this.generateExportList(config, style, range, colVisProp);
+
+               return this.genereateTableElement(list);
+       };
+
+       Export.prototype.rowLookup = function (range) {
+               var _this55 = this;
+
+               var rows = [];
+
+               if (typeof range == "function") {
+                       range.call(this.table).forEach(function (row) {
+                               row = _this55.table.rowManager.findRow(row);
+
+                               if (row) {
+                                       rows.push(row);
+                               }
+                       });
+               } else {
+                       switch (range) {
+                               case true:
+                               case "visible":
+                                       rows = this.table.rowManager.getVisibleRows(true);
+                                       break;
+
+                               case "all":
+                                       rows = this.table.rowManager.rows;
+                                       break;
+
+                               case "selected":
+                                       rows = this.table.modules.selectRow.selectedRows;
+                                       break;
+
+                               case "active":
+                               default:
+                                       if (this.table.options.pagination) {
+                                               rows = this.table.rowManager.getDisplayRows(this.table.rowManager.displayRows.length - 2);
+                                       } else {
+                                               rows = this.table.rowManager.getDisplayRows();
+                                       }
+                       }
+               }
+
+               return Object.assign([], rows);
+       };
+
+       Export.prototype.generateColumnGroupHeaders = function () {
+               var _this56 = this;
+
+               var output = [];
+
+               var columns = this.config.columnGroups !== false ? this.table.columnManager.columns : this.table.columnManager.columnsByIndex;
+
+               columns.forEach(function (column) {
+                       var colData = _this56.processColumnGroup(column);
+
+                       if (colData) {
+                               output.push(colData);
+                       }
+               });
+
+               return output;
+       };
+
+       Export.prototype.processColumnGroup = function (column) {
+               var _this57 = this;
+
+               var subGroups = column.columns,
+                   maxDepth = 0,
+                   title = column.definition["title" + (this.colVisProp.charAt(0).toUpperCase() + this.colVisProp.slice(1))] || column.definition.title;
+
+               var groupData = {
+                       title: title,
+                       column: column,
+                       depth: 1
+               };
+
+               if (subGroups.length) {
+                       groupData.subGroups = [];
+                       groupData.width = 0;
+
+                       subGroups.forEach(function (subGroup) {
+                               var subGroupData = _this57.processColumnGroup(subGroup);
+
+                               if (subGroupData) {
+                                       groupData.width += subGroupData.width;
+                                       groupData.subGroups.push(subGroupData);
+
+                                       if (subGroupData.depth > maxDepth) {
+                                               maxDepth = subGroupData.depth;
+                                       }
+                               }
+                       });
+
+                       groupData.depth += maxDepth;
+
+                       if (!groupData.width) {
+                               return false;
+                       }
+               } else {
+                       if (this.columnVisCheck(column)) {
+                               groupData.width = 1;
+                       } else {
+                               return false;
+                       }
+               }
+
+               return groupData;
+       };
+
+       Export.prototype.columnVisCheck = function (column) {
+               return column.definition[this.colVisProp] !== false && (column.visible || !column.visible && column.definition[this.colVisProp]);
+       };
+
+       Export.prototype.headersToExportRows = function (columns) {
+               var headers = [],
+                   headerDepth = 0,
+                   exportRows = [];
+
+               function parseColumnGroup(column, level) {
+
+                       var depth = headerDepth - level;
+
+                       if (typeof headers[level] === "undefined") {
+                               headers[level] = [];
+                       }
+
+                       column.height = column.subGroups ? 1 : depth - column.depth + 1;
+
+                       headers[level].push(column);
+
+                       if (column.height > 1) {
+                               for (var _i10 = 1; _i10 < column.height; _i10++) {
+
+                                       if (typeof headers[level + _i10] === "undefined") {
+                                               headers[level + _i10] = [];
+                                       }
+
+                                       headers[level + _i10].push(false);
+                               }
+                       }
+
+                       if (column.width > 1) {
+                               for (var _i11 = 1; _i11 < column.width; _i11++) {
+                                       headers[level].push(false);
+                               }
+                       }
+
+                       if (column.subGroups) {
+                               column.subGroups.forEach(function (subGroup) {
+                                       parseColumnGroup(subGroup, level + 1);
+                               });
+                       }
+               }
+
+               //calculate maximum header debth
+               columns.forEach(function (column) {
+                       if (column.depth > headerDepth) {
+                               headerDepth = column.depth;
+                       }
+               });
+
+               columns.forEach(function (column) {
+                       parseColumnGroup(column, 0);
+               });
+
+               headers.forEach(function (header) {
+                       var columns = [];
+
+                       header.forEach(function (col) {
+                               if (col) {
+                                       columns.push(new ExportColumn(col.title, col.column.getComponent(), col.width, col.height, col.depth));
+                               } else {
+                                       columns.push(null);
+                               }
+                       });
+
+                       exportRows.push(new ExportRow("header", columns));
+               });
+
+               return exportRows;
+       };
+
+       Export.prototype.bodyToExportRows = function (rows) {
+               var _this58 = this;
+
+               var columns = [];
+               var exportRows = [];
+
+               this.table.columnManager.columnsByIndex.forEach(function (column) {
+                       if (_this58.columnVisCheck(column)) {
+                               columns.push(column.getComponent());
+                       }
+               });
+
+               if (this.config.columnCalcs !== false && this.table.modExists("columnCalcs")) {
+                       if (this.table.modules.columnCalcs.topInitialized) {
+                               rows.unshift(this.table.modules.columnCalcs.topRow);
+                       }
+
+                       if (this.table.modules.columnCalcs.botInitialized) {
+                               rows.push(this.table.modules.columnCalcs.botRow);
+                       }
+               }
+
+               rows = rows.filter(function (row) {
+                       switch (row.type) {
+                               case "group":
+                                       return _this58.config.rowGroups !== false;
+                                       break;
+
+                               case "calc":
+                                       return _this58.config.columnCalcs !== false;
+                                       break;
+
+                               case "row":
+                                       return !(_this58.table.options.dataTree && _this58.config.dataTree === false && row.modules.dataTree.parent);
+                                       break;
+                       }
+
+                       return true;
+               });
+
+               rows.forEach(function (row, i) {
+                       var rowData = row.getData(_this58.colVisProp);
+                       var exportCols = [];
+                       var indent = 0;
+
+                       switch (row.type) {
+                               case "group":
+                                       indent = row.level;
+                                       exportCols.push(new ExportColumn(row.key, row.getComponent(), columns.length, 1));
+                                       break;
+
+                               case "calc":
+                               case "row":
+                                       columns.forEach(function (col) {
+                                               exportCols.push(new ExportColumn(col._column.getFieldValue(rowData), col, 1, 1));
+                                       });
+
+                                       if (_this58.table.options.dataTree && _this58.config.dataTree !== false) {
+                                               indent = row.modules.dataTree.index;
+                                       }
+                                       break;
+                       }
+
+                       exportRows.push(new ExportRow(row.type, exportCols, row.getComponent(), indent));
+               });
+
+               return exportRows;
+       };
+
+       Export.prototype.genereateTableElement = function (list) {
+               var _this59 = this;
+
+               var table = document.createElement("table"),
+                   headerEl = document.createElement("thead"),
+                   bodyEl = document.createElement("tbody"),
+                   styles = this.lookupTableStyles(),
+                   rowFormatter = this.table.options["rowFormatter" + (this.colVisProp.charAt(0).toUpperCase() + this.colVisProp.slice(1))],
+                   setup = {};
+
+               setup.rowFormatter = rowFormatter !== null ? rowFormatter : this.table.options.rowFormatter;
+
+               if (this.table.options.dataTree && this.config.dataTree !== false && this.table.modExists("columnCalcs")) {
+                       setup.treeElementField = this.table.modules.dataTree.elementField;
+               }
+
+               //assign group header formatter
+               setup.groupHeader = this.table.options["groupHeader" + (this.colVisProp.charAt(0).toUpperCase() + this.colVisProp.slice(1))];
+
+               if (setup.groupHeader && !Array.isArray(setup.groupHeader)) {
+                       setup.groupHeader = [setup.groupHeader];
+               }
+
+               table.classList.add("tabulator-print-table");
+
+               this.mapElementStyles(this.table.columnManager.getHeadersElement(), headerEl, ["border-top", "border-left", "border-right", "border-bottom", "background-color", "color", "font-weight", "font-family", "font-size"]);
+
+               if (list.length > 1000) {
+                       console.warn("It may take a long time to render an HTML table with more than 1000 rows");
+               }
+
+               list.forEach(function (row, i) {
+                       switch (row.type) {
+                               case "header":
+                                       headerEl.appendChild(_this59.genereateHeaderElement(row, setup, styles));
+                                       break;
+
+                               case "group":
+                                       bodyEl.appendChild(_this59.genereateGroupElement(row, setup, styles));
+                                       break;
+
+                               case "calc":
+                                       bodyEl.appendChild(_this59.genereateCalcElement(row, setup, styles));
+                                       break;
+
+                               case "row":
+                                       var rowEl = _this59.genereateRowElement(row, setup, styles);
+                                       _this59.mapElementStyles(i % 2 && styles.evenRow ? styles.evenRow : styles.oddRow, rowEl, ["border-top", "border-left", "border-right", "border-bottom", "color", "font-weight", "font-family", "font-size", "background-color"]);
+                                       bodyEl.appendChild(rowEl);
+                                       break;
+                       }
+               });
+
+               if (headerEl.innerHTML) {
+                       table.appendChild(headerEl);
+               }
+
+               table.appendChild(bodyEl);
+
+               this.mapElementStyles(this.table.element, table, ["border-top", "border-left", "border-right", "border-bottom"]);
+               return table;
+       };
+
+       Export.prototype.lookupTableStyles = function () {
+               var styles = {};
+
+               //lookup row styles
+               if (this.cloneTableStyle && window.getComputedStyle) {
+                       styles.oddRow = this.table.element.querySelector(".tabulator-row-odd:not(.tabulator-group):not(.tabulator-calcs)");
+                       styles.evenRow = this.table.element.querySelector(".tabulator-row-even:not(.tabulator-group):not(.tabulator-calcs)");
+                       styles.calcRow = this.table.element.querySelector(".tabulator-row.tabulator-calcs");
+                       styles.firstRow = this.table.element.querySelector(".tabulator-row:not(.tabulator-group):not(.tabulator-calcs)");
+                       styles.firstGroup = this.table.element.getElementsByClassName("tabulator-group")[0];
+
+                       if (styles.firstRow) {
+                               styles.styleCells = styles.firstRow.getElementsByClassName("tabulator-cell");
+                               styles.firstCell = styles.styleCells[0];
+                               styles.lastCell = styles.styleCells[styles.styleCells.length - 1];
+                       }
+               }
+
+               return styles;
+       };
+
+       Export.prototype.genereateHeaderElement = function (row, setup, styles) {
+               var _this60 = this;
+
+               var rowEl = document.createElement("tr");
+
+               row.columns.forEach(function (column) {
+                       if (column) {
+                               var cellEl = document.createElement("th");
+                               var classNames = column.component._column.definition.cssClass ? column.component._column.definition.cssClass.split(" ") : [];
+
+                               cellEl.colSpan = column.width;
+                               cellEl.rowSpan = column.height;
+
+                               cellEl.innerHTML = column.value;
+
+                               if (_this60.cloneTableStyle) {
+                                       cellEl.style.boxSizing = "border-box";
+                               }
+
+                               classNames.forEach(function (className) {
+                                       cellEl.classList.add(className);
+                               });
+
+                               _this60.mapElementStyles(column.component.getElement(), cellEl, ["text-align", "border-top", "border-left", "border-right", "border-bottom", "background-color", "color", "font-weight", "font-family", "font-size"]);
+                               _this60.mapElementStyles(column.component._column.contentElement, cellEl, ["padding-top", "padding-left", "padding-right", "padding-bottom"]);
+
+                               if (column.component._column.visible) {
+                                       _this60.mapElementStyles(column.component.getElement(), cellEl, ["width"]);
+                               } else {
+                                       if (column.component._column.definition.width) {
+                                               cellEl.style.width = column.component._column.definition.width + "px";
+                                       }
+                               }
+
+                               if (column.component._column.parent) {
+                                       _this60.mapElementStyles(column.component._column.parent.groupElement, cellEl, ["border-top"]);
+                               }
+
+                               rowEl.appendChild(cellEl);
+                       }
+               });
+
+               return rowEl;
+       };
+
+       Export.prototype.genereateGroupElement = function (row, setup, styles) {
+
+               var rowEl = document.createElement("tr"),
+                   cellEl = document.createElement("td"),
+                   group = row.columns[0];
+
+               rowEl.classList.add("tabulator-print-table-row");
+
+               if (setup.groupHeader && setup.groupHeader[row.indent]) {
+                       group.value = setup.groupHeader[row.indent](group.value, row.component._group.getRowCount(), row.component._group.getData(), row.component);
+               } else {
+                       if (setup.groupHeader === false) {
+                               group.value = group.value;
+                       } else {
+                               group.value = row.component._group.generator(group.value, row.component._group.getRowCount(), row.component._group.getData(), row.component);
+                       }
+               }
+
+               cellEl.colSpan = group.width;
+               cellEl.innerHTML = group.value;
+
+               rowEl.classList.add("tabulator-print-table-group");
+               rowEl.classList.add("tabulator-group-level-" + row.indent);
+
+               if (group.component.isVisible()) {
+                       rowEl.classList.add("tabulator-group-visible");
+               }
+
+               this.mapElementStyles(styles.firstGroup, rowEl, ["border-top", "border-left", "border-right", "border-bottom", "color", "font-weight", "font-family", "font-size", "background-color"]);
+               this.mapElementStyles(styles.firstGroup, cellEl, ["padding-top", "padding-left", "padding-right", "padding-bottom"]);
+
+               rowEl.appendChild(cellEl);
+
+               return rowEl;
+       };
+
+       Export.prototype.genereateCalcElement = function (row, setup, styles) {
+               var rowEl = this.genereateRowElement(row, setup, styles);
+
+               rowEl.classList.add("tabulator-print-table-calcs");
+               this.mapElementStyles(styles.calcRow, rowEl, ["border-top", "border-left", "border-right", "border-bottom", "color", "font-weight", "font-family", "font-size", "background-color"]);
+
+               return rowEl;
+       };
+
+       Export.prototype.genereateRowElement = function (row, setup, styles) {
+               var _this61 = this;
+
+               var rowEl = document.createElement("tr");
+
+               rowEl.classList.add("tabulator-print-table-row");
+
+               row.columns.forEach(function (col) {
+
+                       if (col) {
+                               var cellEl = document.createElement("td"),
+                                   column = col.component._column,
+                                   value = col.value;
+
+                               var cellWrapper = {
+                                       modules: {},
+                                       getValue: function getValue() {
+                                               return value;
+                                       },
+                                       getField: function getField() {
+                                               return column.definition.field;
+                                       },
+                                       getElement: function getElement() {
+                                               return cellEl;
+                                       },
+                                       getColumn: function getColumn() {
+                                               return column.getComponent();
+                                       },
+                                       getData: function getData() {
+                                               return row.component.getData();
+                                       },
+                                       getRow: function getRow() {
+                                               return row.component;
+                                       },
+                                       getComponent: function getComponent() {
+                                               return cellWrapper;
+                                       },
+                                       column: column
+                               };
+
+                               var classNames = column.definition.cssClass ? column.definition.cssClass.split(" ") : [];
+
+                               classNames.forEach(function (className) {
+                                       cellEl.classList.add(className);
+                               });
+
+                               if (_this61.table.modExists("format") && _this61.config.formatCells !== false) {
+                                       value = _this61.table.modules.format.formatExportValue(cellWrapper, _this61.colVisProp);
+                               } else {
+                                       switch (typeof value === 'undefined' ? 'undefined' : _typeof(value)) {
+                                               case "object":
+                                                       value = JSON.stringify(value);
+                                                       break;
+
+                                               case "undefined":
+                                               case "null":
+                                                       value = "";
+                                                       break;
+
+                                               default:
+                                                       value = value;
+                                       }
+                               }
+
+                               if (value instanceof Node) {
+                                       cellEl.appendChild(value);
+                               } else {
+                                       cellEl.innerHTML = value;
+                               }
+
+                               if (styles.firstCell) {
+                                       _this61.mapElementStyles(styles.firstCell, cellEl, ["padding-top", "padding-left", "padding-right", "padding-bottom", "border-top", "border-left", "border-right", "border-bottom", "color", "font-weight", "font-family", "font-size"]);
+
+                                       if (column.definition.align) {
+                                               cellEl.style.textAlign = column.definition.align;
+                                       }
+                               }
+
+                               if (_this61.table.options.dataTree && _this61.config.dataTree !== false) {
+                                       if (setup.treeElementField && setup.treeElementField == column.field || !setup.treeElementField && i == 0) {
+                                               if (row.component._row.modules.dataTree.controlEl) {
+                                                       cellEl.insertBefore(row.component._row.modules.dataTree.controlEl.cloneNode(true), cellEl.firstChild);
+                                               }
+                                               if (row.component._row.modules.dataTree.branchEl) {
+                                                       cellEl.insertBefore(row.component._row.modules.dataTree.branchEl.cloneNode(true), cellEl.firstChild);
+                                               }
+                                       }
+                               }
+
+                               rowEl.appendChild(cellEl);
+
+                               if (cellWrapper.modules.format && cellWrapper.modules.format.renderedCallback) {
+                                       cellWrapper.modules.format.renderedCallback();
+                               }
+
+                               if (setup.rowFormatter && _this61.config.formatCells !== false) {
+                                       setup.rowFormatter(row.component);
+                               }
+                       }
+               });
+
+               return rowEl;
+       };
+
+       Export.prototype.genereateHTMLTable = function (list) {
+               var holder = document.createElement("div");
+
+               holder.appendChild(this.genereateTableElement(list));
+
+               return holder.innerHTML;
+       };
+
+       Export.prototype.getHtml = function (visible, style, config, colVisProp) {
+               var list = this.generateExportList(config || this.table.options.htmlOutputConfig, style, visible, colVisProp || "htmlOutput");
+
+               return this.genereateHTMLTable(list);
+       };
+
+       Export.prototype.mapElementStyles = function (from, to, props) {
+               if (this.cloneTableStyle && from && to) {
+
+                       var lookup = {
+                               "background-color": "backgroundColor",
+                               "color": "fontColor",
+                               "width": "width",
+                               "font-weight": "fontWeight",
+                               "font-family": "fontFamily",
+                               "font-size": "fontSize",
+                               "text-align": "textAlign",
+                               "border-top": "borderTop",
+                               "border-left": "borderLeft",
+                               "border-right": "borderRight",
+                               "border-bottom": "borderBottom",
+                               "padding-top": "paddingTop",
+                               "padding-left": "paddingLeft",
+                               "padding-right": "paddingRight",
+                               "padding-bottom": "paddingBottom"
+                       };
+
+                       if (window.getComputedStyle) {
+                               var fromStyle = window.getComputedStyle(from);
+
+                               props.forEach(function (prop) {
+                                       to.style[lookup[prop]] = fromStyle.getPropertyValue(prop);
+                               });
+                       }
+               }
+       };
+
+       Tabulator.prototype.registerModule("export", Export);
+
+       var Filter = function Filter(table) {
+
+               this.table = table; //hold Tabulator object
+
+               this.filterList = []; //hold filter list
+               this.headerFilters = {}; //hold column filters
+               this.headerFilterColumns = []; //hold columns that use header filters
+
+               this.prevHeaderFilterChangeCheck = "";
+               this.prevHeaderFilterChangeCheck = "{}";
+
+               this.changed = false; //has filtering changed since last render
+       };
+
+       //initialize column header filter
+       Filter.prototype.initializeColumn = function (column, value) {
+               var self = this,
+                   field = column.getField(),
+                   params;
+
+               //handle successfull value change
+               function success(value) {
+                       var filterType = column.modules.filter.tagType == "input" && column.modules.filter.attrType == "text" || column.modules.filter.tagType == "textarea" ? "partial" : "match",
+                           type = "",
+                           filterChangeCheck = "",
+                           filterFunc;
+
+                       if (typeof column.modules.filter.prevSuccess === "undefined" || column.modules.filter.prevSuccess !== value) {
+
+                               column.modules.filter.prevSuccess = value;
+
+                               if (!column.modules.filter.emptyFunc(value)) {
+                                       column.modules.filter.value = value;
+
+                                       switch (_typeof(column.definition.headerFilterFunc)) {
+                                               case "string":
+                                                       if (self.filters[column.definition.headerFilterFunc]) {
+                                                               type = column.definition.headerFilterFunc;
+                                                               filterFunc = function filterFunc(data) {
+                                                                       var params = column.definition.headerFilterFuncParams || {};
+                                                                       var fieldVal = column.getFieldValue(data);
+
+                                                                       params = typeof params === "function" ? params(value, fieldVal, data) : params;
+
+                                                                       return self.filters[column.definition.headerFilterFunc](value, fieldVal, data, params);
+                                                               };
+                                                       } else {
+                                                               console.warn("Header Filter Error - Matching filter function not found: ", column.definition.headerFilterFunc);
+                                                       }
+                                                       break;
+
+                                               case "function":
+                                                       filterFunc = function filterFunc(data) {
+                                                               var params = column.definition.headerFilterFuncParams || {};
+                                                               var fieldVal = column.getFieldValue(data);
+
+                                                               params = typeof params === "function" ? params(value, fieldVal, data) : params;
+
+                                                               return column.definition.headerFilterFunc(value, fieldVal, data, params);
+                                                       };
+
+                                                       type = filterFunc;
+                                                       break;
+                                       }
+
+                                       if (!filterFunc) {
+                                               switch (filterType) {
+                                                       case "partial":
+                                                               filterFunc = function filterFunc(data) {
+                                                                       var colVal = column.getFieldValue(data);
+
+                                                                       if (typeof colVal !== 'undefined' && colVal !== null) {
+                                                                               return String(colVal).toLowerCase().indexOf(String(value).toLowerCase()) > -1;
+                                                                       } else {
+                                                                               return false;
+                                                                       }
+                                                               };
+                                                               type = "like";
+                                                               break;
+
+                                                       default:
+                                                               filterFunc = function filterFunc(data) {
+                                                                       return column.getFieldValue(data) == value;
+                                                               };
+                                                               type = "=";
+                                               }
+                                       }
+
+                                       self.headerFilters[field] = { value: value, func: filterFunc, type: type, params: params || {} };
+                               } else {
+                                       delete self.headerFilters[field];
+                               }
+
+                               filterChangeCheck = JSON.stringify(self.headerFilters);
+
+                               if (self.prevHeaderFilterChangeCheck !== filterChangeCheck) {
+                                       self.prevHeaderFilterChangeCheck = filterChangeCheck;
+
+                                       self.changed = true;
+                                       self.table.rowManager.filterRefresh();
+                               }
+                       }
+
+                       return true;
+               }
+
+               column.modules.filter = {
+                       success: success,
+                       attrType: false,
+                       tagType: false,
+                       emptyFunc: false
+               };
+
+               this.generateHeaderFilterElement(column);
+       };
+
+       Filter.prototype.generateHeaderFilterElement = function (column, initialValue, reinitialize) {
+               var _this62 = this;
+
+               var self = this,
+                   success = column.modules.filter.success,
+                   field = column.getField(),
+                   filterElement,
+                   editor,
+                   editorElement,
+                   cellWrapper,
+                   typingTimer,
+                   searchTrigger,
+                   params;
+
+               //handle aborted edit
+               function cancel() {}
+
+               if (column.modules.filter.headerElement && column.modules.filter.headerElement.parentNode) {
+                       column.contentElement.removeChild(column.modules.filter.headerElement.parentNode);
+               }
+
+               if (field) {
+
+                       //set empty value function
+                       column.modules.filter.emptyFunc = column.definition.headerFilterEmptyCheck || function (value) {
+                               return !value && value !== "0";
+                       };
+
+                       filterElement = document.createElement("div");
+                       filterElement.classList.add("tabulator-header-filter");
+
+                       //set column editor
+                       switch (_typeof(column.definition.headerFilter)) {
+                               case "string":
+                                       if (self.table.modules.edit.editors[column.definition.headerFilter]) {
+                                               editor = self.table.modules.edit.editors[column.definition.headerFilter];
+
+                                               if ((column.definition.headerFilter === "tick" || column.definition.headerFilter === "tickCross") && !column.definition.headerFilterEmptyCheck) {
+                                                       column.modules.filter.emptyFunc = function (value) {
+                                                               return value !== true && value !== false;
+                                                       };
+                                               }
+                                       } else {
+                                               console.warn("Filter Error - Cannot build header filter, No such editor found: ", column.definition.editor);
+                                       }
+                                       break;
+
+                               case "function":
+                                       editor = column.definition.headerFilter;
+                                       break;
+
+                               case "boolean":
+                                       if (column.modules.edit && column.modules.edit.editor) {
+                                               editor = column.modules.edit.editor;
+                                       } else {
+                                               if (column.definition.formatter && self.table.modules.edit.editors[column.definition.formatter]) {
+                                                       editor = self.table.modules.edit.editors[column.definition.formatter];
+
+                                                       if ((column.definition.formatter === "tick" || column.definition.formatter === "tickCross") && !column.definition.headerFilterEmptyCheck) {
+                                                               column.modules.filter.emptyFunc = function (value) {
+                                                                       return value !== true && value !== false;
+                                                               };
+                                                       }
+                                               } else {
+                                                       editor = self.table.modules.edit.editors["input"];
+                                               }
+                                       }
+                                       break;
+                       }
+
+                       if (editor) {
+
+                               cellWrapper = {
+                                       getValue: function getValue() {
+                                               return typeof initialValue !== "undefined" ? initialValue : "";
+                                       },
+                                       getField: function getField() {
+                                               return column.definition.field;
+                                       },
+                                       getElement: function getElement() {
+                                               return filterElement;
+                                       },
+                                       getColumn: function getColumn() {
+                                               return column.getComponent();
+                                       },
+                                       getRow: function getRow() {
+                                               return {
+                                                       normalizeHeight: function normalizeHeight() {}
+                                               };
+                                       }
+                               };
+
+                               params = column.definition.headerFilterParams || {};
+
+                               params = typeof params === "function" ? params.call(self.table) : params;
+
+                               editorElement = editor.call(this.table.modules.edit, cellWrapper, function () {}, success, cancel, params);
+
+                               if (!editorElement) {
+                                       console.warn("Filter Error - Cannot add filter to " + field + " column, editor returned a value of false");
+                                       return;
+                               }
+
+                               if (!(editorElement instanceof Node)) {
+                                       console.warn("Filter Error - Cannot add filter to " + field + " column, editor should return an instance of Node, the editor returned:", editorElement);
+                                       return;
+                               }
+
+                               //set Placeholder Text
+                               if (field) {
+                                       self.table.modules.localize.bind("headerFilters|columns|" + column.definition.field, function (value) {
+                                               editorElement.setAttribute("placeholder", typeof value !== "undefined" && value ? value : self.table.modules.localize.getText("headerFilters|default"));
+                                       });
+                               } else {
+                                       self.table.modules.localize.bind("headerFilters|default", function (value) {
+                                               editorElement.setAttribute("placeholder", typeof self.column.definition.headerFilterPlaceholder !== "undefined" && self.column.definition.headerFilterPlaceholder ? self.column.definition.headerFilterPlaceholder : value);
+                                       });
+                               }
+
+                               //focus on element on click
+                               editorElement.addEventListener("click", function (e) {
+                                       e.stopPropagation();
+                                       editorElement.focus();
+                               });
+
+                               editorElement.addEventListener("focus", function (e) {
+                                       var left = _this62.table.columnManager.element.scrollLeft;
+
+                                       if (left !== _this62.table.rowManager.element.scrollLeft) {
+                                               _this62.table.rowManager.scrollHorizontal(left);
+                                               _this62.table.columnManager.scrollHorizontal(left);
+                                       }
+                               });
+
+                               //live update filters as user types
+                               typingTimer = false;
+
+                               searchTrigger = function searchTrigger(e) {
+                                       if (typingTimer) {
+                                               clearTimeout(typingTimer);
+                                       }
+
+                                       typingTimer = setTimeout(function () {
+                                               success(editorElement.value);
+                                       }, self.table.options.headerFilterLiveFilterDelay);
+                               };
+
+                               column.modules.filter.headerElement = editorElement;
+                               column.modules.filter.attrType = editorElement.hasAttribute("type") ? editorElement.getAttribute("type").toLowerCase() : "";
+                               column.modules.filter.tagType = editorElement.tagName.toLowerCase();
+
+                               if (column.definition.headerFilterLiveFilter !== false) {
+
+                                       if (!(column.definition.headerFilter === 'autocomplete' || column.definition.headerFilter === 'tickCross' || (column.definition.editor === 'autocomplete' || column.definition.editor === 'tickCross') && column.definition.headerFilter === true)) {
+                                               editorElement.addEventListener("keyup", searchTrigger);
+                                               editorElement.addEventListener("search", searchTrigger);
+
+                                               //update number filtered columns on change
+                                               if (column.modules.filter.attrType == "number") {
+                                                       editorElement.addEventListener("change", function (e) {
+                                                               success(editorElement.value);
+                                                       });
+                                               }
+
+                                               //change text inputs to search inputs to allow for clearing of field
+                                               if (column.modules.filter.attrType == "text" && this.table.browser !== "ie") {
+                                                       editorElement.setAttribute("type", "search");
+                                                       // editorElement.off("change blur"); //prevent blur from triggering filter and preventing selection click
+                                               }
+                                       }
+
+                                       //prevent input and select elements from propegating click to column sorters etc
+                                       if (column.modules.filter.tagType == "input" || column.modules.filter.tagType == "select" || column.modules.filter.tagType == "textarea") {
+                                               editorElement.addEventListener("mousedown", function (e) {
+                                                       e.stopPropagation();
+                                               });
+                                       }
+                               }
+
+                               filterElement.appendChild(editorElement);
+
+                               column.contentElement.appendChild(filterElement);
+
+                               if (!reinitialize) {
+                                       self.headerFilterColumns.push(column);
+                               }
+                       }
+               } else {
+                       console.warn("Filter Error - Cannot add header filter, column has no field set:", column.definition.title);
+               }
+       };
+
+       //hide all header filter elements (used to ensure correct column widths in "fitData" layout mode)
+       Filter.prototype.hideHeaderFilterElements = function () {
+               this.headerFilterColumns.forEach(function (column) {
+                       if (column.modules.filter && column.modules.filter.headerElement) {
+                               column.modules.filter.headerElement.style.display = 'none';
+                       }
+               });
+       };
+
+       //show all header filter elements (used to ensure correct column widths in "fitData" layout mode)
+       Filter.prototype.showHeaderFilterElements = function () {
+               this.headerFilterColumns.forEach(function (column) {
+                       if (column.modules.filter && column.modules.filter.headerElement) {
+                               column.modules.filter.headerElement.style.display = '';
+                       }
+               });
+       };
+
+       //programatically set focus of header filter
+       Filter.prototype.setHeaderFilterFocus = function (column) {
+               if (column.modules.filter && column.modules.filter.headerElement) {
+                       column.modules.filter.headerElement.focus();
+               } else {
+                       console.warn("Column Filter Focus Error - No header filter set on column:", column.getField());
+               }
+       };
+
+       //programmatically get value of header filter
+       Filter.prototype.getHeaderFilterValue = function (column) {
+               if (column.modules.filter && column.modules.filter.headerElement) {
+                       return column.modules.filter.headerElement.value;
+               } else {
+                       console.warn("Column Filter Error - No header filter set on column:", column.getField());
+               }
+       };
+
+       //programatically set value of header filter
+       Filter.prototype.setHeaderFilterValue = function (column, value) {
+               if (column) {
+                       if (column.modules.filter && column.modules.filter.headerElement) {
+                               this.generateHeaderFilterElement(column, value, true);
+                               column.modules.filter.success(value);
+                       } else {
+                               console.warn("Column Filter Error - No header filter set on column:", column.getField());
+                       }
+               }
+       };
+
+       Filter.prototype.reloadHeaderFilter = function (column) {
+               if (column) {
+                       if (column.modules.filter && column.modules.filter.headerElement) {
+                               this.generateHeaderFilterElement(column, column.modules.filter.value, true);
+                       } else {
+                               console.warn("Column Filter Error - No header filter set on column:", column.getField());
+                       }
+               }
+       };
+
+       //check if the filters has changed since last use
+       Filter.prototype.hasChanged = function () {
+               var changed = this.changed;
+               this.changed = false;
+               return changed;
+       };
+
+       //set standard filters
+       Filter.prototype.setFilter = function (field, type, value, params) {
+               var self = this;
+
+               self.filterList = [];
+
+               if (!Array.isArray(field)) {
+                       field = [{ field: field, type: type, value: value, params: params }];
+               }
+
+               self.addFilter(field);
+       };
+
+       //add filter to array
+       Filter.prototype.addFilter = function (field, type, value, params) {
+               var self = this;
+
+               if (!Array.isArray(field)) {
+                       field = [{ field: field, type: type, value: value, params: params }];
+               }
+
+               field.forEach(function (filter) {
+
+                       filter = self.findFilter(filter);
+
+                       if (filter) {
+                               self.filterList.push(filter);
+
+                               self.changed = true;
+                       }
+               });
+
+               if (this.table.options.persistence && this.table.modExists("persistence", true) && this.table.modules.persistence.config.filter) {
+                       this.table.modules.persistence.save("filter");
+               }
+       };
+
+       Filter.prototype.findFilter = function (filter) {
+               var self = this,
+                   column;
+
+               if (Array.isArray(filter)) {
+                       return this.findSubFilters(filter);
+               }
+
+               var filterFunc = false;
+
+               if (typeof filter.field == "function") {
+                       filterFunc = function filterFunc(data) {
+                               return filter.field(data, filter.type || {}); // pass params to custom filter function
+                       };
+               } else {
+
+                       if (self.filters[filter.type]) {
+
+                               column = self.table.columnManager.getColumnByField(filter.field);
+
+                               if (column) {
+                                       filterFunc = function filterFunc(data) {
+                                               return self.filters[filter.type](filter.value, column.getFieldValue(data), data, filter.params || {});
+                                       };
+                               } else {
+                                       filterFunc = function filterFunc(data) {
+                                               return self.filters[filter.type](filter.value, data[filter.field], data, filter.params || {});
+                                       };
+                               }
+                       } else {
+                               console.warn("Filter Error - No such filter type found, ignoring: ", filter.type);
+                       }
+               }
+
+               filter.func = filterFunc;
+
+               return filter.func ? filter : false;
+       };
+
+       Filter.prototype.findSubFilters = function (filters) {
+               var self = this,
+                   output = [];
+
+               filters.forEach(function (filter) {
+                       filter = self.findFilter(filter);
+
+                       if (filter) {
+                               output.push(filter);
+                       }
+               });
+
+               return output.length ? output : false;
+       };
+
+       //get all filters
+       Filter.prototype.getFilters = function (all, ajax) {
+               var output = [];
+
+               if (all) {
+                       output = this.getHeaderFilters();
+               }
+
+               if (ajax) {
+                       output.forEach(function (item) {
+                               if (typeof item.type == "function") {
+                                       item.type = "function";
+                               }
+                       });
+               }
+
+               output = output.concat(this.filtersToArray(this.filterList, ajax));
+
+               return output;
+       };
+
+       //filter to Object
+       Filter.prototype.filtersToArray = function (filterList, ajax) {
+               var _this63 = this;
+
+               var output = [];
+
+               filterList.forEach(function (filter) {
+                       var item;
+
+                       if (Array.isArray(filter)) {
+                               output.push(_this63.filtersToArray(filter, ajax));
+                       } else {
+                               item = { field: filter.field, type: filter.type, value: filter.value };
+
+                               if (ajax) {
+                                       if (typeof item.type == "function") {
+                                               item.type = "function";
+                                       }
+                               }
+
+                               output.push(item);
+                       }
+               });
+
+               return output;
+       };
+
+       //get all filters
+       Filter.prototype.getHeaderFilters = function () {
+               var self = this,
+                   output = [];
+
+               for (var key in this.headerFilters) {
+                       output.push({ field: key, type: this.headerFilters[key].type, value: this.headerFilters[key].value });
+               }
+
+               return output;
+       };
+
+       //remove filter from array
+       Filter.prototype.removeFilter = function (field, type, value) {
+               var self = this;
+
+               if (!Array.isArray(field)) {
+                       field = [{ field: field, type: type, value: value }];
+               }
+
+               field.forEach(function (filter) {
+                       var index = -1;
+
+                       if (_typeof(filter.field) == "object") {
+                               index = self.filterList.findIndex(function (element) {
+                                       return filter === element;
+                               });
+                       } else {
+                               index = self.filterList.findIndex(function (element) {
+                                       return filter.field === element.field && filter.type === element.type && filter.value === element.value;
+                               });
+                       }
+
+                       if (index > -1) {
+                               self.filterList.splice(index, 1);
+                               self.changed = true;
+                       } else {
+                               console.warn("Filter Error - No matching filter type found, ignoring: ", filter.type);
+                       }
+               });
+
+               if (this.table.options.persistence && this.table.modExists("persistence", true) && this.table.modules.persistence.config.filter) {
+                       this.table.modules.persistence.save("filter");
+               }
+       };
+
+       //clear filters
+       Filter.prototype.clearFilter = function (all) {
+               this.filterList = [];
+
+               if (all) {
+                       this.clearHeaderFilter();
+               }
+
+               this.changed = true;
+
+               if (this.table.options.persistence && this.table.modExists("persistence", true) && this.table.modules.persistence.config.filter) {
+                       this.table.modules.persistence.save("filter");
+               }
+       };
+
+       //clear header filters
+       Filter.prototype.clearHeaderFilter = function () {
+               var self = this;
+
+               this.headerFilters = {};
+               self.prevHeaderFilterChangeCheck = "{}";
+
+               this.headerFilterColumns.forEach(function (column) {
+                       column.modules.filter.value = null;
+                       column.modules.filter.prevSuccess = undefined;
+                       self.reloadHeaderFilter(column);
+               });
+
+               this.changed = true;
+       };
+
+       //search data and return matching rows
+       Filter.prototype.search = function (searchType, field, type, value) {
+               var self = this,
+                   activeRows = [],
+                   filterList = [];
+
+               if (!Array.isArray(field)) {
+                       field = [{ field: field, type: type, value: value }];
+               }
+
+               field.forEach(function (filter) {
+                       filter = self.findFilter(filter);
+
+                       if (filter) {
+                               filterList.push(filter);
+                       }
+               });
+
+               this.table.rowManager.rows.forEach(function (row) {
+                       var match = true;
+
+                       filterList.forEach(function (filter) {
+                               if (!self.filterRecurse(filter, row.getData())) {
+                                       match = false;
+                               }
+                       });
+
+                       if (match) {
+                               activeRows.push(searchType === "data" ? row.getData("data") : row.getComponent());
+                       }
+               });
+
+               return activeRows;
+       };
+
+       //filter row array
+       Filter.prototype.filter = function (rowList, filters) {
+               var self = this,
+                   activeRows = [],
+                   activeRowComponents = [];
+
+               if (self.table.options.dataFiltering) {
+                       self.table.options.dataFiltering.call(self.table, self.getFilters());
+               }
+
+               if (!self.table.options.ajaxFiltering && (self.filterList.length || Object.keys(self.headerFilters).length)) {
+
+                       rowList.forEach(function (row) {
+                               if (self.filterRow(row)) {
+                                       activeRows.push(row);
+                               }
+                       });
+               } else {
+                       activeRows = rowList.slice(0);
+               }
+
+               if (self.table.options.dataFiltered) {
+
+                       activeRows.forEach(function (row) {
+                               activeRowComponents.push(row.getComponent());
+                       });
+
+                       self.table.options.dataFiltered.call(self.table, self.getFilters(), activeRowComponents);
+               }
+
+               return activeRows;
+       };
+
+       //filter individual row
+       Filter.prototype.filterRow = function (row, filters) {
+               var self = this,
+                   match = true,
+                   data = row.getData();
+
+               self.filterList.forEach(function (filter) {
+                       if (!self.filterRecurse(filter, data)) {
+                               match = false;
+                       }
+               });
+
+               for (var field in self.headerFilters) {
+                       if (!self.headerFilters[field].func(data)) {
+                               match = false;
+                       }
+               }
+
+               return match;
+       };
+
+       Filter.prototype.filterRecurse = function (filter, data) {
+               var self = this,
+                   match = false;
+
+               if (Array.isArray(filter)) {
+                       filter.forEach(function (subFilter) {
+                               if (self.filterRecurse(subFilter, data)) {
+                                       match = true;
+                               }
+                       });
+               } else {
+                       match = filter.func(data);
+               }
+
+               return match;
+       };
+
+       //list of available filters
+       Filter.prototype.filters = {
+
+               //equal to
+               "=": function _(filterVal, rowVal, rowData, filterParams) {
+                       return rowVal == filterVal ? true : false;
+               },
+
+               //less than
+               "<": function _(filterVal, rowVal, rowData, filterParams) {
+                       return rowVal < filterVal ? true : false;
+               },
+
+               //less than or equal to
+               "<=": function _(filterVal, rowVal, rowData, filterParams) {
+                       return rowVal <= filterVal ? true : false;
+               },
+
+               //greater than
+               ">": function _(filterVal, rowVal, rowData, filterParams) {
+                       return rowVal > filterVal ? true : false;
+               },
+
+               //greater than or equal to
+               ">=": function _(filterVal, rowVal, rowData, filterParams) {
+                       return rowVal >= filterVal ? true : false;
+               },
+
+               //not equal to
+               "!=": function _(filterVal, rowVal, rowData, filterParams) {
+                       return rowVal != filterVal ? true : false;
+               },
+
+               "regex": function regex(filterVal, rowVal, rowData, filterParams) {
+
+                       if (typeof filterVal == "string") {
+                               filterVal = new RegExp(filterVal);
+                       }
+
+                       return filterVal.test(rowVal);
+               },
+
+               //contains the string
+               "like": function like(filterVal, rowVal, rowData, filterParams) {
+                       if (filterVal === null || typeof filterVal === "undefined") {
+                               return rowVal === filterVal ? true : false;
+                       } else {
+                               if (typeof rowVal !== 'undefined' && rowVal !== null) {
+                                       return String(rowVal).toLowerCase().indexOf(filterVal.toLowerCase()) > -1;
+                               } else {
+                                       return false;
+                               }
+                       }
+               },
+
+               //contains the keywords
+               "keywords": function keywords(filterVal, rowVal, rowData, filterParams) {
+                       var keywords = filterVal.toLowerCase().split(typeof filterParams.separator === "undefined" ? " " : filterParams.separator),
+                           value = String(rowVal === null || typeof rowVal === "undefined" ? "" : rowVal).toLowerCase(),
+                           matches = [];
+
+                       keywords.forEach(function (keyword) {
+                               if (value.includes(keyword)) {
+                                       matches.push(true);
+                               }
+                       });
+
+                       return filterParams.matchAll ? matches.length === keywords.length : !!matches.length;
+               },
+
+               //starts with the string
+               "starts": function starts(filterVal, rowVal, rowData, filterParams) {
+                       if (filterVal === null || typeof filterVal === "undefined") {
+                               return rowVal === filterVal ? true : false;
+                       } else {
+                               if (typeof rowVal !== 'undefined' && rowVal !== null) {
+                                       return String(rowVal).toLowerCase().startsWith(filterVal.toLowerCase());
+                               } else {
+                                       return false;
+                               }
+                       }
+               },
+
+               //ends with the string
+               "ends": function ends(filterVal, rowVal, rowData, filterParams) {
+                       if (filterVal === null || typeof filterVal === "undefined") {
+                               return rowVal === filterVal ? true : false;
+                       } else {
+                               if (typeof rowVal !== 'undefined' && rowVal !== null) {
+                                       return String(rowVal).toLowerCase().endsWith(filterVal.toLowerCase());
+                               } else {
+                                       return false;
+                               }
+                       }
+               },
+
+               //in array
+               "in": function _in(filterVal, rowVal, rowData, filterParams) {
+                       if (Array.isArray(filterVal)) {
+                               return filterVal.length ? filterVal.indexOf(rowVal) > -1 : true;
+                       } else {
+                               console.warn("Filter Error - filter value is not an array:", filterVal);
+                               return false;
+                       }
+               }
+       };
+
+       Tabulator.prototype.registerModule("filter", Filter);
+
+       var Format = function Format(table) {
+               this.table = table; //hold Tabulator object
+       };
+
+       //initialize column formatter
+       Format.prototype.initializeColumn = function (column) {
+               column.modules.format = this.lookupFormatter(column, "");
+
+               if (typeof column.definition.formatterPrint !== "undefined") {
+                       column.modules.format.print = this.lookupFormatter(column, "Print");
+               }
+
+               if (typeof column.definition.formatterClipboard !== "undefined") {
+                       column.modules.format.clipboard = this.lookupFormatter(column, "Clipboard");
+               }
+
+               if (typeof column.definition.formatterHtmlOutput !== "undefined") {
+                       column.modules.format.htmlOutput = this.lookupFormatter(column, "HtmlOutput");
+               }
+       };
+
+       Format.prototype.lookupFormatter = function (column, type) {
+               var config = { params: column.definition["formatter" + type + "Params"] || {} },
+                   formatter = column.definition["formatter" + type];
+
+               //set column formatter
+               switch (typeof formatter === 'undefined' ? 'undefined' : _typeof(formatter)) {
+                       case "string":
+
+                               if (formatter === "tick") {
+                                       formatter = "tickCross";
+
+                                       if (typeof config.params.crossElement == "undefined") {
+                                               config.params.crossElement = false;
+                                       }
+
+                                       console.warn("DEPRECATION WARNING - the tick formatter has been deprecated, please use the tickCross formatter with the crossElement param set to false");
+                               }
+
+                               if (this.formatters[formatter]) {
+                                       config.formatter = this.formatters[formatter];
+                               } else {
+                                       console.warn("Formatter Error - No such formatter found: ", formatter);
+                                       config.formatter = this.formatters.plaintext;
+                               }
+                               break;
+
+                       case "function":
+                               config.formatter = formatter;
+                               break;
+
+                       default:
+                               config.formatter = this.formatters.plaintext;
+                               break;
+               }
+
+               return config;
+       };
+
+       Format.prototype.cellRendered = function (cell) {
+               if (cell.modules.format && cell.modules.format.renderedCallback && !cell.modules.format.rendered) {
+                       cell.modules.format.renderedCallback();
+                       cell.modules.format.rendered = true;
+               }
+       };
+
+       //return a formatted value for a cell
+       Format.prototype.formatValue = function (cell) {
+               var component = cell.getComponent(),
+                   params = typeof cell.column.modules.format.params === "function" ? cell.column.modules.format.params(component) : cell.column.modules.format.params;
+
+               function onRendered(callback) {
+                       if (!cell.modules.format) {
+                               cell.modules.format = {};
+                       }
+
+                       cell.modules.format.renderedCallback = callback;
+                       cell.modules.format.rendered = false;
+               }
+
+               return cell.column.modules.format.formatter.call(this, component, params, onRendered);
+       };
+
+       Format.prototype.formatExportValue = function (cell, type) {
+               var formatter = cell.column.modules.format[type],
+                   params;
+
+               if (formatter) {
+                       var onRendered = function onRendered(callback) {
+                               if (!cell.modules.format) {
+                                       cell.modules.format = {};
+                               }
+
+                               cell.modules.format.renderedCallback = callback;
+                               cell.modules.format.rendered = false;
+                       };
+
+                       params = typeof formatter.params === "function" ? formatter.params(component) : formatter.params;
+
+                       return formatter.formatter.call(this, cell.getComponent(), params, onRendered);
+               } else {
+                       return this.formatValue(cell);
+               }
+       };
+
+       Format.prototype.sanitizeHTML = function (value) {
+               if (value) {
+                       var entityMap = {
+                               '&': '&amp;',
+                               '<': '&lt;',
+                               '>': '&gt;',
+                               '"': '&quot;',
+                               "'": '&#39;',
+                               '/': '&#x2F;',
+                               '`': '&#x60;',
+                               '=': '&#x3D;'
+                       };
+
+                       return String(value).replace(/[&<>"'`=\/]/g, function (s) {
+                               return entityMap[s];
+                       });
+               } else {
+                       return value;
+               }
+       };
+
+       Format.prototype.emptyToSpace = function (value) {
+               return value === null || typeof value === "undefined" || value === "" ? "&nbsp;" : value;
+       };
+
+       //get formatter for cell
+       Format.prototype.getFormatter = function (formatter) {
+               var formatter;
+
+               switch (typeof formatter === 'undefined' ? 'undefined' : _typeof(formatter)) {
+                       case "string":
+                               if (this.formatters[formatter]) {
+                                       formatter = this.formatters[formatter];
+                               } else {
+                                       console.warn("Formatter Error - No such formatter found: ", formatter);
+                                       formatter = this.formatters.plaintext;
+                               }
+                               break;
+
+                       case "function":
+                               formatter = formatter;
+                               break;
+
+                       default:
+                               formatter = this.formatters.plaintext;
+                               break;
+               }
+
+               return formatter;
+       };
+
+       //default data formatters
+       Format.prototype.formatters = {
+               //plain text value
+               plaintext: function plaintext(cell, formatterParams, onRendered) {
+                       return this.emptyToSpace(this.sanitizeHTML(cell.getValue()));
+               },
+
+               //html text value
+               html: function html(cell, formatterParams, onRendered) {
+                       return cell.getValue();
+               },
+
+               //multiline text area
+               textarea: function textarea(cell, formatterParams, onRendered) {
+                       cell.getElement().style.whiteSpace = "pre-wrap";
+                       return this.emptyToSpace(this.sanitizeHTML(cell.getValue()));
+               },
+
+               //currency formatting
+               money: function money(cell, formatterParams, onRendered) {
+                       var floatVal = parseFloat(cell.getValue()),
+                           number,
+                           integer,
+                           decimal,
+                           rgx;
+
+                       var decimalSym = formatterParams.decimal || ".";
+                       var thousandSym = formatterParams.thousand || ",";
+                       var symbol = formatterParams.symbol || "";
+                       var after = !!formatterParams.symbolAfter;
+                       var precision = typeof formatterParams.precision !== "undefined" ? formatterParams.precision : 2;
+
+                       if (isNaN(floatVal)) {
+                               return this.emptyToSpace(this.sanitizeHTML(cell.getValue()));
+                       }
+
+                       number = precision !== false ? floatVal.toFixed(precision) : floatVal;
+                       number = String(number).split(".");
+
+                       integer = number[0];
+                       decimal = number.length > 1 ? decimalSym + number[1] : "";
+
+                       rgx = /(\d+)(\d{3})/;
+
+                       while (rgx.test(integer)) {
+                               integer = integer.replace(rgx, "$1" + thousandSym + "$2");
+                       }
+
+                       return after ? integer + decimal + symbol : symbol + integer + decimal;
+               },
+
+               //clickable anchor tag
+               link: function link(cell, formatterParams, onRendered) {
+                       var value = cell.getValue(),
+                           urlPrefix = formatterParams.urlPrefix || "",
+                           download = formatterParams.download,
+                           label = value,
+                           el = document.createElement("a"),
+                           data;
+
+                       if (formatterParams.labelField) {
+                               data = cell.getData();
+                               label = data[formatterParams.labelField];
+                       }
+
+                       if (formatterParams.label) {
+                               switch (_typeof(formatterParams.label)) {
+                                       case "string":
+                                               label = formatterParams.label;
+                                               break;
+
+                                       case "function":
+                                               label = formatterParams.label(cell);
+                                               break;
+                               }
+                       }
+
+                       if (label) {
+                               if (formatterParams.urlField) {
+                                       data = cell.getData();
+                                       value = data[formatterParams.urlField];
+                               }
+
+                               if (formatterParams.url) {
+                                       switch (_typeof(formatterParams.url)) {
+                                               case "string":
+                                                       value = formatterParams.url;
+                                                       break;
+
+                                               case "function":
+                                                       value = formatterParams.url(cell);
+                                                       break;
+                                       }
+                               }
+
+                               el.setAttribute("href", urlPrefix + value);
+
+                               if (formatterParams.target) {
+                                       el.setAttribute("target", formatterParams.target);
+                               }
+
+                               if (formatterParams.download) {
+
+                                       if (typeof download == "function") {
+                                               download = download(cell);
+                                       } else {
+                                               download = download === true ? "" : download;
+                                       }
+
+                                       el.setAttribute("download", download);
+                               }
+
+                               el.innerHTML = this.emptyToSpace(this.sanitizeHTML(label));
+
+                               return el;
+                       } else {
+                               return "&nbsp;";
+                       }
+               },
+
+               //image element
+               image: function image(cell, formatterParams, onRendered) {
+                       var el = document.createElement("img");
+                       el.setAttribute("src", cell.getValue());
+
+                       switch (_typeof(formatterParams.height)) {
+                               case "number":
+                                       el.style.height = formatterParams.height + "px";
+                                       break;
+
+                               case "string":
+                                       el.style.height = formatterParams.height;
+                                       break;
+                       }
+
+                       switch (_typeof(formatterParams.width)) {
+                               case "number":
+                                       el.style.width = formatterParams.width + "px";
+                                       break;
+
+                               case "string":
+                                       el.style.width = formatterParams.width;
+                                       break;
+                       }
+
+                       el.addEventListener("load", function () {
+                               cell.getRow().normalizeHeight();
+                       });
+
+                       return el;
+               },
+
+               //tick or cross
+               tickCross: function tickCross(cell, formatterParams, onRendered) {
+                       var value = cell.getValue(),
+                           element = cell.getElement(),
+                           empty = formatterParams.allowEmpty,
+                           truthy = formatterParams.allowTruthy,
+                           tick = typeof formatterParams.tickElement !== "undefined" ? formatterParams.tickElement : '<svg enable-background="new 0 0 24 24" height="14" width="14" viewBox="0 0 24 24" xml:space="preserve" ><path fill="#2DC214" clip-rule="evenodd" d="M21.652,3.211c-0.293-0.295-0.77-0.295-1.061,0L9.41,14.34  c-0.293,0.297-0.771,0.297-1.062,0L3.449,9.351C3.304,9.203,3.114,9.13,2.923,9.129C2.73,9.128,2.534,9.201,2.387,9.351  l-2.165,1.946C0.078,11.445,0,11.63,0,11.823c0,0.194,0.078,0.397,0.223,0.544l4.94,5.184c0.292,0.296,0.771,0.776,1.062,1.07  l2.124,2.141c0.292,0.293,0.769,0.293,1.062,0l14.366-14.34c0.293-0.294,0.293-0.777,0-1.071L21.652,3.211z" fill-rule="evenodd"/></svg>',
+                           cross = typeof formatterParams.crossElement !== "undefined" ? formatterParams.crossElement : '<svg enable-background="new 0 0 24 24" height="14" width="14"  viewBox="0 0 24 24" xml:space="preserve" ><path fill="#CE1515" d="M22.245,4.015c0.313,0.313,0.313,0.826,0,1.139l-6.276,6.27c-0.313,0.312-0.313,0.826,0,1.14l6.273,6.272  c0.313,0.313,0.313,0.826,0,1.14l-2.285,2.277c-0.314,0.312-0.828,0.312-1.142,0l-6.271-6.271c-0.313-0.313-0.828-0.313-1.141,0  l-6.276,6.267c-0.313,0.313-0.828,0.313-1.141,0l-2.282-2.28c-0.313-0.313-0.313-0.826,0-1.14l6.278-6.269  c0.313-0.312,0.313-0.826,0-1.14L1.709,5.147c-0.314-0.313-0.314-0.827,0-1.14l2.284-2.278C4.308,1.417,4.821,1.417,5.135,1.73  L11.405,8c0.314,0.314,0.828,0.314,1.141,0.001l6.276-6.267c0.312-0.312,0.826-0.312,1.141,0L22.245,4.015z"/></svg>';
+
+                       if (truthy && value || value === true || value === "true" || value === "True" || value === 1 || value === "1") {
+                               element.setAttribute("aria-checked", true);
+                               return tick || "";
+                       } else {
+                               if (empty && (value === "null" || value === "" || value === null || typeof value === "undefined")) {
+                                       element.setAttribute("aria-checked", "mixed");
+                                       return "";
+                               } else {
+                                       element.setAttribute("aria-checked", false);
+                                       return cross || "";
+                               }
+                       }
+               },
+
+               datetime: function datetime(cell, formatterParams, onRendered) {
+                       var inputFormat = formatterParams.inputFormat || "YYYY-MM-DD hh:mm:ss";
+                       var outputFormat = formatterParams.outputFormat || "DD/MM/YYYY hh:mm:ss";
+                       var invalid = typeof formatterParams.invalidPlaceholder !== "undefined" ? formatterParams.invalidPlaceholder : "";
+                       var value = cell.getValue();
+
+                       var newDatetime = moment(value, inputFormat);
+
+                       if (newDatetime.isValid()) {
+                               return formatterParams.timezone ? newDatetime.tz(formatterParams.timezone).format(outputFormat) : newDatetime.format(outputFormat);
+                       } else {
+
+                               if (invalid === true) {
+                                       return value;
+                               } else if (typeof invalid === "function") {
+                                       return invalid(value);
+                               } else {
+                                       return invalid;
+                               }
+                       }
+               },
+
+               datetimediff: function datetime(cell, formatterParams, onRendered) {
+                       var inputFormat = formatterParams.inputFormat || "YYYY-MM-DD hh:mm:ss";
+                       var invalid = typeof formatterParams.invalidPlaceholder !== "undefined" ? formatterParams.invalidPlaceholder : "";
+                       var suffix = typeof formatterParams.suffix !== "undefined" ? formatterParams.suffix : false;
+                       var unit = typeof formatterParams.unit !== "undefined" ? formatterParams.unit : undefined;
+                       var humanize = typeof formatterParams.humanize !== "undefined" ? formatterParams.humanize : false;
+                       var date = typeof formatterParams.date !== "undefined" ? formatterParams.date : moment();
+                       var value = cell.getValue();
+
+                       var newDatetime = moment(value, inputFormat);
+
+                       if (newDatetime.isValid()) {
+                               if (humanize) {
+                                       return moment.duration(newDatetime.diff(date)).humanize(suffix);
+                               } else {
+                                       return newDatetime.diff(date, unit) + (suffix ? " " + suffix : "");
+                               }
+                       } else {
+
+                               if (invalid === true) {
+                                       return value;
+                               } else if (typeof invalid === "function") {
+                                       return invalid(value);
+                               } else {
+                                       return invalid;
+                               }
+                       }
+               },
+
+               //select
+               lookup: function lookup(cell, formatterParams, onRendered) {
+                       var value = cell.getValue();
+
+                       if (typeof formatterParams[value] === "undefined") {
+                               console.warn('Missing display value for ' + value);
+                               return value;
+                       }
+
+                       return formatterParams[value];
+               },
+
+               //star rating
+               star: function star(cell, formatterParams, onRendered) {
+                       var value = cell.getValue(),
+                           element = cell.getElement(),
+                           maxStars = formatterParams && formatterParams.stars ? formatterParams.stars : 5,
+                           stars = document.createElement("span"),
+                           star = document.createElementNS('http://www.w3.org/2000/svg', "svg"),
+                           starActive = '<polygon fill="#FFEA00" stroke="#C1AB60" stroke-width="37.6152" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" points="259.216,29.942 330.27,173.919 489.16,197.007 374.185,309.08 401.33,467.31 259.216,392.612 117.104,467.31 144.25,309.08 29.274,197.007 188.165,173.919 "/>',
+                           starInactive = '<polygon fill="#D2D2D2" stroke="#686868" stroke-width="37.6152" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" points="259.216,29.942 330.27,173.919 489.16,197.007 374.185,309.08 401.33,467.31 259.216,392.612 117.104,467.31 144.25,309.08 29.274,197.007 188.165,173.919 "/>';
+
+                       //style stars holder
+                       stars.style.verticalAlign = "middle";
+
+                       //style star
+                       star.setAttribute("width", "14");
+                       star.setAttribute("height", "14");
+                       star.setAttribute("viewBox", "0 0 512 512");
+                       star.setAttribute("xml:space", "preserve");
+                       star.style.padding = "0 1px";
+
+                       value = value && !isNaN(value) ? parseInt(value) : 0;
+
+                       value = Math.max(0, Math.min(value, maxStars));
+
+                       for (var i = 1; i <= maxStars; i++) {
+                               var nextStar = star.cloneNode(true);
+                               nextStar.innerHTML = i <= value ? starActive : starInactive;
+
+                               stars.appendChild(nextStar);
+                       }
+
+                       element.style.whiteSpace = "nowrap";
+                       element.style.overflow = "hidden";
+                       element.style.textOverflow = "ellipsis";
+
+                       element.setAttribute("aria-label", value);
+
+                       return stars;
+               },
+
+               traffic: function traffic(cell, formatterParams, onRendered) {
+                       var value = this.sanitizeHTML(cell.getValue()) || 0,
+                           el = document.createElement("span"),
+                           max = formatterParams && formatterParams.max ? formatterParams.max : 100,
+                           min = formatterParams && formatterParams.min ? formatterParams.min : 0,
+                           colors = formatterParams && typeof formatterParams.color !== "undefined" ? formatterParams.color : ["red", "orange", "green"],
+                           color = "#666666",
+                           percent,
+                           percentValue;
+
+                       if (isNaN(value) || typeof cell.getValue() === "undefined") {
+                               return;
+                       }
+
+                       el.classList.add("tabulator-traffic-light");
+
+                       //make sure value is in range
+                       percentValue = parseFloat(value) <= max ? parseFloat(value) : max;
+                       percentValue = parseFloat(percentValue) >= min ? parseFloat(percentValue) : min;
+
+                       //workout percentage
+                       percent = (max - min) / 100;
+                       percentValue = Math.round((percentValue - min) / percent);
+
+                       //set color
+                       switch (typeof colors === 'undefined' ? 'undefined' : _typeof(colors)) {
+                               case "string":
+                                       color = colors;
+                                       break;
+                               case "function":
+                                       color = colors(value);
+                                       break;
+                               case "object":
+                                       if (Array.isArray(colors)) {
+                                               var unit = 100 / colors.length;
+                                               var index = Math.floor(percentValue / unit);
+
+                                               index = Math.min(index, colors.length - 1);
+                                               index = Math.max(index, 0);
+                                               color = colors[index];
+                                               break;
+                                       }
+                       }
+
+                       el.style.backgroundColor = color;
+
+                       return el;
+               },
+
+               //progress bar
+               progress: function progress(cell, formatterParams, onRendered) {
+                       //progress bar
+                       var value = this.sanitizeHTML(cell.getValue()) || 0,
+                           element = cell.getElement(),
+                           max = formatterParams && formatterParams.max ? formatterParams.max : 100,
+                           min = formatterParams && formatterParams.min ? formatterParams.min : 0,
+                           legendAlign = formatterParams && formatterParams.legendAlign ? formatterParams.legendAlign : "center",
+                           percent,
+                           percentValue,
+                           color,
+                           legend,
+                           legendColor,
+                           top,
+                           left,
+                           right,
+                           bottom;
+
+                       //make sure value is in range
+                       percentValue = parseFloat(value) <= max ? parseFloat(value) : max;
+                       percentValue = parseFloat(percentValue) >= min ? parseFloat(percentValue) : min;
+
+                       //workout percentage
+                       percent = (max - min) / 100;
+                       percentValue = Math.round((percentValue - min) / percent);
+
+                       //set bar color
+                       switch (_typeof(formatterParams.color)) {
+                               case "string":
+                                       color = formatterParams.color;
+                                       break;
+                               case "function":
+                                       color = formatterParams.color(value);
+                                       break;
+                               case "object":
+                                       if (Array.isArray(formatterParams.color)) {
+                                               var unit = 100 / formatterParams.color.length;
+                                               var index = Math.floor(percentValue / unit);
+
+                                               index = Math.min(index, formatterParams.color.length - 1);
+                                               index = Math.max(index, 0);
+                                               color = formatterParams.color[index];
+                                               break;
+                                       }
+                               default:
+                                       color = "#2DC214";
+                       }
+
+                       //generate legend
+                       switch (_typeof(formatterParams.legend)) {
+                               case "string":
+                                       legend = formatterParams.legend;
+                                       break;
+                               case "function":
+                                       legend = formatterParams.legend(value);
+                                       break;
+                               case "boolean":
+                                       legend = value;
+                                       break;
+                               default:
+                                       legend = false;
+                       }
+
+                       //set legend color
+                       switch (_typeof(formatterParams.legendColor)) {
+                               case "string":
+                                       legendColor = formatterParams.legendColor;
+                                       break;
+                               case "function":
+                                       legendColor = formatterParams.legendColor(value);
+                                       break;
+                               case "object":
+                                       if (Array.isArray(formatterParams.legendColor)) {
+                                               var unit = 100 / formatterParams.legendColor.length;
+                                               var index = Math.floor(percentValue / unit);
+
+                                               index = Math.min(index, formatterParams.legendColor.length - 1);
+                                               index = Math.max(index, 0);
+                                               legendColor = formatterParams.legendColor[index];
+                                       }
+                                       break;
+                               default:
+                                       legendColor = "#000";
+                       }
+
+                       element.style.minWidth = "30px";
+                       element.style.position = "relative";
+
+                       element.setAttribute("aria-label", percentValue);
+
+                       var barEl = document.createElement("div");
+                       barEl.style.display = "inline-block";
+                       barEl.style.position = "relative";
+                       barEl.style.width = percentValue + "%";
+                       barEl.style.backgroundColor = color;
+                       barEl.style.height = "100%";
+
+                       barEl.setAttribute('data-max', max);
+                       barEl.setAttribute('data-min', min);
+
+                       if (legend) {
+                               var legendEl = document.createElement("div");
+                               legendEl.style.position = "absolute";
+                               legendEl.style.top = "4px";
+                               legendEl.style.left = 0;
+                               legendEl.style.textAlign = legendAlign;
+                               legendEl.style.width = "100%";
+                               legendEl.style.color = legendColor;
+                               legendEl.innerHTML = legend;
+                       }
+
+                       onRendered(function () {
+
+                               //handle custom element needed if formatter is to be included in printed/downloaded output
+                               if (!(cell instanceof CellComponent)) {
+                                       var holderEl = document.createElement("div");
+                                       holderEl.style.position = "absolute";
+                                       holderEl.style.top = "4px";
+                                       holderEl.style.bottom = "4px";
+                                       holderEl.style.left = "4px";
+                                       holderEl.style.right = "4px";
+
+                                       element.appendChild(holderEl);
+
+                                       element = holderEl;
+                               }
+
+                               element.appendChild(barEl);
+
+                               if (legend) {
+                                       element.appendChild(legendEl);
+                               }
+                       });
+
+                       return "";
+               },
+
+               //background color
+               color: function color(cell, formatterParams, onRendered) {
+                       cell.getElement().style.backgroundColor = this.sanitizeHTML(cell.getValue());
+                       return "";
+               },
+
+               //tick icon
+               buttonTick: function buttonTick(cell, formatterParams, onRendered) {
+                       return '<svg enable-background="new 0 0 24 24" height="14" width="14" viewBox="0 0 24 24" xml:space="preserve" ><path fill="#2DC214" clip-rule="evenodd" d="M21.652,3.211c-0.293-0.295-0.77-0.295-1.061,0L9.41,14.34  c-0.293,0.297-0.771,0.297-1.062,0L3.449,9.351C3.304,9.203,3.114,9.13,2.923,9.129C2.73,9.128,2.534,9.201,2.387,9.351  l-2.165,1.946C0.078,11.445,0,11.63,0,11.823c0,0.194,0.078,0.397,0.223,0.544l4.94,5.184c0.292,0.296,0.771,0.776,1.062,1.07  l2.124,2.141c0.292,0.293,0.769,0.293,1.062,0l14.366-14.34c0.293-0.294,0.293-0.777,0-1.071L21.652,3.211z" fill-rule="evenodd"/></svg>';
+               },
+
+               //cross icon
+               buttonCross: function buttonCross(cell, formatterParams, onRendered) {
+                       return '<svg enable-background="new 0 0 24 24" height="14" width="14" viewBox="0 0 24 24" xml:space="preserve" ><path fill="#CE1515" d="M22.245,4.015c0.313,0.313,0.313,0.826,0,1.139l-6.276,6.27c-0.313,0.312-0.313,0.826,0,1.14l6.273,6.272  c0.313,0.313,0.313,0.826,0,1.14l-2.285,2.277c-0.314,0.312-0.828,0.312-1.142,0l-6.271-6.271c-0.313-0.313-0.828-0.313-1.141,0  l-6.276,6.267c-0.313,0.313-0.828,0.313-1.141,0l-2.282-2.28c-0.313-0.313-0.313-0.826,0-1.14l6.278-6.269  c0.313-0.312,0.313-0.826,0-1.14L1.709,5.147c-0.314-0.313-0.314-0.827,0-1.14l2.284-2.278C4.308,1.417,4.821,1.417,5.135,1.73  L11.405,8c0.314,0.314,0.828,0.314,1.141,0.001l6.276-6.267c0.312-0.312,0.826-0.312,1.141,0L22.245,4.015z"/></svg>';
+               },
+
+               //current row number
+               rownum: function rownum(cell, formatterParams, onRendered) {
+                       return this.table.rowManager.activeRows.indexOf(cell.getRow()._getSelf()) + 1;
+               },
+
+               //row handle
+               handle: function handle(cell, formatterParams, onRendered) {
+                       cell.getElement().classList.add("tabulator-row-handle");
+                       return "<div class='tabulator-row-handle-box'><div class='tabulator-row-handle-bar'></div><div class='tabulator-row-handle-bar'></div><div class='tabulator-row-handle-bar'></div></div>";
+               },
+
+               responsiveCollapse: function responsiveCollapse(cell, formatterParams, onRendered) {
+                       var self = this,
+                           open = false,
+                           el = document.createElement("div"),
+                           config = cell.getRow()._row.modules.responsiveLayout;
+
+                       el.classList.add("tabulator-responsive-collapse-toggle");
+                       el.innerHTML = "<span class='tabulator-responsive-collapse-toggle-open'>+</span><span class='tabulator-responsive-collapse-toggle-close'>-</span>";
+
+                       cell.getElement().classList.add("tabulator-row-handle");
+
+                       function toggleList(isOpen) {
+                               var collapseEl = config.element;
+
+                               config.open = isOpen;
+
+                               if (collapseEl) {
+
+                                       if (config.open) {
+                                               el.classList.add("open");
+                                               collapseEl.style.display = '';
+                                       } else {
+                                               el.classList.remove("open");
+                                               collapseEl.style.display = 'none';
+                                       }
+                               }
+                       }
+
+                       el.addEventListener("click", function (e) {
+                               e.stopImmediatePropagation();
+                               toggleList(!config.open);
+                       });
+
+                       toggleList(config.open);
+
+                       return el;
+               },
+
+               rowSelection: function rowSelection(cell, formatterParams, onRendered) {
+                       var _this64 = this;
+
+                       var checkbox = document.createElement("input");
+
+                       checkbox.type = 'checkbox';
+
+                       if (this.table.modExists("selectRow", true)) {
+
+                               checkbox.addEventListener("click", function (e) {
+                                       e.stopPropagation();
+                               });
+
+                               if (typeof cell.getRow == 'function') {
+                                       var row = cell.getRow();
+
+                                       if (row instanceof RowComponent) {
+
+                                               checkbox.addEventListener("change", function (e) {
+                                                       row.toggleSelect();
+                                               });
+
+                                               checkbox.checked = row.isSelected && row.isSelected();
+                                               this.table.modules.selectRow.registerRowSelectCheckbox(row, checkbox);
+                                       } else {
+                                               checkbox = "";
+                                       }
+                               } else {
+                                       checkbox.addEventListener("change", function (e) {
+                                               if (_this64.table.modules.selectRow.selectedRows.length) {
+                                                       _this64.table.deselectRow();
+                                               } else {
+                                                       _this64.table.selectRow(formatterParams.rowRange);
+                                               }
+                                       });
+
+                                       this.table.modules.selectRow.registerHeaderSelectCheckbox(checkbox);
+                               }
+                       }
+                       return checkbox;
+               }
+       };
+
+       Tabulator.prototype.registerModule("format", Format);
+
+       var FrozenColumns = function FrozenColumns(table) {
+               this.table = table; //hold Tabulator object
+               this.leftColumns = [];
+               this.rightColumns = [];
+               this.leftMargin = 0;
+               this.rightMargin = 0;
+               this.rightPadding = 0;
+               this.initializationMode = "left";
+               this.active = false;
+               this.scrollEndTimer = false;
+       };
+
+       //reset initial state
+       FrozenColumns.prototype.reset = function () {
+               this.initializationMode = "left";
+               this.leftColumns = [];
+               this.rightColumns = [];
+               this.leftMargin = 0;
+               this.rightMargin = 0;
+               this.rightMargin = 0;
+               this.active = false;
+
+               this.table.columnManager.headersElement.style.marginLeft = 0;
+               this.table.columnManager.element.style.paddingRight = 0;
+       };
+
+       //initialize specific column
+       FrozenColumns.prototype.initializeColumn = function (column) {
+               var config = { margin: 0, edge: false };
+
+               if (!column.isGroup) {
+
+                       if (this.frozenCheck(column)) {
+
+                               config.position = this.initializationMode;
+
+                               if (this.initializationMode == "left") {
+                                       this.leftColumns.push(column);
+                               } else {
+                                       this.rightColumns.unshift(column);
+                               }
+
+                               this.active = true;
+
+                               column.modules.frozen = config;
+                       } else {
+                               this.initializationMode = "right";
+                       }
+               }
+       };
+
+       FrozenColumns.prototype.frozenCheck = function (column) {
+               var frozen = false;
+
+               if (column.parent.isGroup && column.definition.frozen) {
+                       console.warn("Frozen Column Error - Parent column group must be frozen, not individual columns or sub column groups");
+               }
+
+               if (column.parent.isGroup) {
+                       return this.frozenCheck(column.parent);
+               } else {
+                       return column.definition.frozen;
+               }
+
+               return frozen;
+       };
+
+       //quick layout to smooth horizontal scrolling
+       FrozenColumns.prototype.scrollHorizontal = function () {
+               var _this65 = this;
+
+               var rows;
+
+               if (this.active) {
+                       clearTimeout(this.scrollEndTimer);
+
+                       //layout all rows after scroll is complete
+                       this.scrollEndTimer = setTimeout(function () {
+                               _this65.layout();
+                       }, 100);
+
+                       rows = this.table.rowManager.getVisibleRows();
+
+                       this.calcMargins();
+
+                       this.layoutColumnPosition();
+
+                       this.layoutCalcRows();
+
+                       rows.forEach(function (row) {
+                               if (row.type === "row") {
+                                       _this65.layoutRow(row);
+                               }
+                       });
+
+                       this.table.rowManager.tableElement.style.marginRight = this.rightMargin;
+               }
+       };
+
+       //calculate margins for rows
+       FrozenColumns.prototype.calcMargins = function () {
+               this.leftMargin = this._calcSpace(this.leftColumns, this.leftColumns.length) + "px";
+               this.table.columnManager.headersElement.style.marginLeft = this.leftMargin;
+
+               this.rightMargin = this._calcSpace(this.rightColumns, this.rightColumns.length) + "px";
+               this.table.columnManager.element.style.paddingRight = this.rightMargin;
+
+               //calculate right frozen columns
+               this.rightPadding = this.table.rowManager.element.clientWidth + this.table.columnManager.scrollLeft;
+       };
+
+       //layout calculation rows
+       FrozenColumns.prototype.layoutCalcRows = function () {
+               if (this.table.modExists("columnCalcs")) {
+                       if (this.table.modules.columnCalcs.topInitialized && this.table.modules.columnCalcs.topRow) {
+                               this.layoutRow(this.table.modules.columnCalcs.topRow);
+                       }
+                       if (this.table.modules.columnCalcs.botInitialized && this.table.modules.columnCalcs.botRow) {
+                               this.layoutRow(this.table.modules.columnCalcs.botRow);
+                       }
+               }
+       };
+
+       //calculate column positions and layout headers
+       FrozenColumns.prototype.layoutColumnPosition = function (allCells) {
+               var _this66 = this;
+
+               var leftParents = [];
+
+               this.leftColumns.forEach(function (column, i) {
+                       column.modules.frozen.margin = _this66._calcSpace(_this66.leftColumns, i) + _this66.table.columnManager.scrollLeft + "px";
+
+                       if (i == _this66.leftColumns.length - 1) {
+                               column.modules.frozen.edge = true;
+                       } else {
+                               column.modules.frozen.edge = false;
+                       }
+
+                       if (column.parent.isGroup) {
+                               var parentEl = _this66.getColGroupParentElement(column);
+                               if (!leftParents.includes(parentEl)) {
+                                       _this66.layoutElement(parentEl, column);
+                                       leftParents.push(parentEl);
+                               }
+
+                               if (column.modules.frozen.edge) {
+                                       parentEl.classList.add("tabulator-frozen-" + column.modules.frozen.position);
+                               }
+                       } else {
+                               _this66.layoutElement(column.getElement(), column);
+                       }
+
+                       if (allCells) {
+                               column.cells.forEach(function (cell) {
+                                       _this66.layoutElement(cell.getElement(), column);
+                               });
+                       }
+               });
+
+               this.rightColumns.forEach(function (column, i) {
+                       column.modules.frozen.margin = _this66.rightPadding - _this66._calcSpace(_this66.rightColumns, i + 1) + "px";
+
+                       if (i == _this66.rightColumns.length - 1) {
+                               column.modules.frozen.edge = true;
+                       } else {
+                               column.modules.frozen.edge = false;
+                       }
+
+                       if (column.parent.isGroup) {
+                               _this66.layoutElement(_this66.getColGroupParentElement(column), column);
+                       } else {
+                               _this66.layoutElement(column.getElement(), column);
+                       }
+
+                       if (allCells) {
+                               column.cells.forEach(function (cell) {
+                                       _this66.layoutElement(cell.getElement(), column);
+                               });
+                       }
+               });
+       };
+
+       FrozenColumns.prototype.getColGroupParentElement = function (column) {
+               return column.parent.isGroup ? this.getColGroupParentElement(column.parent) : column.getElement();
+       };
+
+       //layout columns appropropriatly
+       FrozenColumns.prototype.layout = function () {
+               var self = this,
+                   rightMargin = 0;
+
+               if (self.active) {
+
+                       //calculate row padding
+                       this.calcMargins();
+
+                       // self.table.rowManager.activeRows.forEach(function(row){
+                       //      self.layoutRow(row);
+                       // });
+
+                       // if(self.table.options.dataTree){
+                       self.table.rowManager.getDisplayRows().forEach(function (row) {
+                               if (row.type === "row") {
+                                       self.layoutRow(row);
+                               }
+                       });
+                       // }
+
+                       this.layoutCalcRows();
+
+                       //calculate left columns
+                       this.layoutColumnPosition(true);
+
+                       // if(tableHolder.scrollHeight > tableHolder.clientHeight){
+                       //      rightMargin -= tableHolder.offsetWidth - tableHolder.clientWidth;
+                       // }
+
+                       this.table.rowManager.tableElement.style.marginRight = this.rightMargin;
+               }
+       };
+
+       FrozenColumns.prototype.layoutRow = function (row) {
+               var _this67 = this;
+
+               var rowEl = row.getElement();
+
+               rowEl.style.paddingLeft = this.leftMargin;
+               // rowEl.style.paddingRight = this.rightMargin + "px";
+
+               this.leftColumns.forEach(function (column) {
+                       var cell = row.getCell(column);
+
+                       if (cell) {
+                               _this67.layoutElement(cell.getElement(), column);
+                       }
+               });
+
+               this.rightColumns.forEach(function (column) {
+                       var cell = row.getCell(column);
+
+                       if (cell) {
+                               _this67.layoutElement(cell.getElement(), column);
+                       }
+               });
+       };
+
+       FrozenColumns.prototype.layoutElement = function (element, column) {
+
+               if (column.modules.frozen) {
+                       element.style.position = "absolute";
+                       element.style.left = column.modules.frozen.margin;
+
+                       element.classList.add("tabulator-frozen");
+
+                       if (column.modules.frozen.edge) {
+                               element.classList.add("tabulator-frozen-" + column.modules.frozen.position);
+                       }
+               }
+       };
+
+       FrozenColumns.prototype._calcSpace = function (columns, index) {
+               var width = 0;
+
+               for (var _i12 = 0; _i12 < index; _i12++) {
+                       if (columns[_i12].visible) {
+                               width += columns[_i12].getWidth();
+                       }
+               }
+
+               return width;
+       };
+
+       Tabulator.prototype.registerModule("frozenColumns", FrozenColumns);
+       var FrozenRows = function FrozenRows(table) {
+               this.table = table; //hold Tabulator object
+               this.topElement = document.createElement("div");
+               this.rows = [];
+               this.displayIndex = 0; //index in display pipeline
+       };
+
+       FrozenRows.prototype.initialize = function () {
+               this.rows = [];
+
+               this.topElement.classList.add("tabulator-frozen-rows-holder");
+
+               // this.table.columnManager.element.append(this.topElement);
+               this.table.columnManager.getElement().insertBefore(this.topElement, this.table.columnManager.headersElement.nextSibling);
+       };
+
+       FrozenRows.prototype.setDisplayIndex = function (index) {
+               this.displayIndex = index;
+       };
+
+       FrozenRows.prototype.getDisplayIndex = function () {
+               return this.displayIndex;
+       };
+
+       FrozenRows.prototype.isFrozen = function () {
+               return !!this.rows.length;
+       };
+
+       //filter frozen rows out of display data
+       FrozenRows.prototype.getRows = function (rows) {
+               var self = this,
+                   frozen = [],
+                   output = rows.slice(0);
+
+               this.rows.forEach(function (row) {
+                       var index = output.indexOf(row);
+
+                       if (index > -1) {
+                               output.splice(index, 1);
+                       }
+               });
+
+               return output;
+       };
+
+       FrozenRows.prototype.freezeRow = function (row) {
+               if (!row.modules.frozen) {
+                       row.modules.frozen = true;
+                       this.topElement.appendChild(row.getElement());
+                       row.initialize();
+                       row.normalizeHeight();
+                       this.table.rowManager.adjustTableSize();
+
+                       this.rows.push(row);
+
+                       this.table.rowManager.refreshActiveData("display");
+
+                       this.styleRows();
+               } else {
+                       console.warn("Freeze Error - Row is already frozen");
+               }
+       };
+
+       FrozenRows.prototype.unfreezeRow = function (row) {
+               var index = this.rows.indexOf(row);
+
+               if (row.modules.frozen) {
+
+                       row.modules.frozen = false;
+
+                       this.detachRow(row);
+
+                       this.table.rowManager.adjustTableSize();
+
+                       this.table.rowManager.refreshActiveData("display");
+
+                       if (this.rows.length) {
+                               this.styleRows();
+                       }
+               } else {
+                       console.warn("Freeze Error - Row is already unfrozen");
+               }
+       };
+
+       FrozenRows.prototype.detachRow = function (row) {
+               var index = this.rows.indexOf(row);
+
+               if (index > -1) {
+                       var rowEl = row.getElement();
+                       rowEl.parentNode.removeChild(rowEl);
+
+                       this.rows.splice(index, 1);
+               }
+       };
+
+       FrozenRows.prototype.styleRows = function (row) {
+               var self = this;
+
+               this.rows.forEach(function (row, i) {
+                       self.table.rowManager.styleRow(row, i);
+               });
+       };
+
+       Tabulator.prototype.registerModule("frozenRows", FrozenRows);
+
+       //public group object
+       var GroupComponent = function GroupComponent(group) {
+               this._group = group;
+               this.type = "GroupComponent";
+       };
+
+       GroupComponent.prototype.getKey = function () {
+               return this._group.key;
+       };
+
+       GroupComponent.prototype.getField = function () {
+               return this._group.field;
+       };
+
+       GroupComponent.prototype.getElement = function () {
+               return this._group.element;
+       };
+
+       GroupComponent.prototype.getRows = function () {
+               return this._group.getRows(true);
+       };
+
+       GroupComponent.prototype.getSubGroups = function () {
+               return this._group.getSubGroups(true);
+       };
+
+       GroupComponent.prototype.getParentGroup = function () {
+               return this._group.parent ? this._group.parent.getComponent() : false;
+       };
+
+       GroupComponent.prototype.getVisibility = function () {
+               console.warn("getVisibility function is deprecated, you should now use the isVisible function");
+               return this._group.visible;
+       };
+
+       GroupComponent.prototype.isVisible = function () {
+               return this._group.visible;
+       };
+
+       GroupComponent.prototype.show = function () {
+               this._group.show();
+       };
+
+       GroupComponent.prototype.hide = function () {
+               this._group.hide();
+       };
+
+       GroupComponent.prototype.toggle = function () {
+               this._group.toggleVisibility();
+       };
+
+       GroupComponent.prototype._getSelf = function () {
+               return this._group;
+       };
+
+       GroupComponent.prototype.getTable = function () {
+               return this._group.groupManager.table;
+       };
+
+       //////////////////////////////////////////////////
+       //////////////// Group Functions /////////////////
+       //////////////////////////////////////////////////
+
+       var Group = function Group(groupManager, parent, level, key, field, generator, oldGroup) {
+
+               this.groupManager = groupManager;
+               this.parent = parent;
+               this.key = key;
+               this.level = level;
+               this.field = field;
+               this.hasSubGroups = level < groupManager.groupIDLookups.length - 1;
+               this.addRow = this.hasSubGroups ? this._addRowToGroup : this._addRow;
+               this.type = "group"; //type of element
+               this.old = oldGroup;
+               this.rows = [];
+               this.groups = [];
+               this.groupList = [];
+               this.generator = generator;
+               this.elementContents = false;
+               this.height = 0;
+               this.outerHeight = 0;
+               this.initialized = false;
+               this.calcs = {};
+               this.initialized = false;
+               this.modules = {};
+               this.arrowElement = false;
+
+               this.visible = oldGroup ? oldGroup.visible : typeof groupManager.startOpen[level] !== "undefined" ? groupManager.startOpen[level] : groupManager.startOpen[0];
+
+               this.component = null;
+
+               this.createElements();
+               this.addBindings();
+
+               this.createValueGroups();
+       };
+
+       Group.prototype.wipe = function () {
+               if (this.groupList.length) {
+                       this.groupList.forEach(function (group) {
+                               group.wipe();
+                       });
+               } else {
+                       this.element = false;
+                       this.arrowElement = false;
+                       this.elementContents = false;
+               }
+       };
+
+       Group.prototype.createElements = function () {
+               var arrow = document.createElement("div");
+               arrow.classList.add("tabulator-arrow");
+
+               this.element = document.createElement("div");
+               this.element.classList.add("tabulator-row");
+               this.element.classList.add("tabulator-group");
+               this.element.classList.add("tabulator-group-level-" + this.level);
+               this.element.setAttribute("role", "rowgroup");
+
+               this.arrowElement = document.createElement("div");
+               this.arrowElement.classList.add("tabulator-group-toggle");
+               this.arrowElement.appendChild(arrow);
+
+               //setup movable rows
+               if (this.groupManager.table.options.movableRows !== false && this.groupManager.table.modExists("moveRow")) {
+                       this.groupManager.table.modules.moveRow.initializeGroupHeader(this);
+               }
+       };
+
+       Group.prototype.createValueGroups = function () {
+               var _this68 = this;
+
+               var level = this.level + 1;
+               if (this.groupManager.allowedValues && this.groupManager.allowedValues[level]) {
+                       this.groupManager.allowedValues[level].forEach(function (value) {
+                               _this68._createGroup(value, level);
+                       });
+               }
+       };
+
+       Group.prototype.addBindings = function () {
+               var self = this,
+                   dblTap,
+                   tapHold,
+                   tap,
+                   toggleElement;
+
+               //handle group click events
+               if (self.groupManager.table.options.groupClick) {
+                       self.element.addEventListener("click", function (e) {
+                               self.groupManager.table.options.groupClick.call(self.groupManager.table, e, self.getComponent());
+                       });
+               }
+
+               if (self.groupManager.table.options.groupDblClick) {
+                       self.element.addEventListener("dblclick", function (e) {
+                               self.groupManager.table.options.groupDblClick.call(self.groupManager.table, e, self.getComponent());
+                       });
+               }
+
+               if (self.groupManager.table.options.groupContext) {
+                       self.element.addEventListener("contextmenu", function (e) {
+                               self.groupManager.table.options.groupContext.call(self.groupManager.table, e, self.getComponent());
+                       });
+               }
+
+               if ((self.groupManager.table.options.groupContextMenu || self.groupManager.table.options.groupClickMenu) && self.groupManager.table.modExists("menu")) {
+                       self.groupManager.table.modules.menu.initializeGroup.call(self.groupManager.table.modules.menu, self);
+               }
+
+               if (self.groupManager.table.options.groupTap) {
+
+                       tap = false;
+
+                       self.element.addEventListener("touchstart", function (e) {
+                               tap = true;
+                       }, { passive: true });
+
+                       self.element.addEventListener("touchend", function (e) {
+                               if (tap) {
+                                       self.groupManager.table.options.groupTap(e, self.getComponent());
+                               }
+
+                               tap = false;
+                       });
+               }
+
+               if (self.groupManager.table.options.groupDblTap) {
+
+                       dblTap = null;
+
+                       self.element.addEventListener("touchend", function (e) {
+
+                               if (dblTap) {
+                                       clearTimeout(dblTap);
+                                       dblTap = null;
+
+                                       self.groupManager.table.options.groupDblTap(e, self.getComponent());
+                               } else {
+
+                                       dblTap = setTimeout(function () {
+                                               clearTimeout(dblTap);
+                                               dblTap = null;
+                                       }, 300);
+                               }
+                       });
+               }
+
+               if (self.groupManager.table.options.groupTapHold) {
+
+                       tapHold = null;
+
+                       self.element.addEventListener("touchstart", function (e) {
+                               clearTimeout(tapHold);
+
+                               tapHold = setTimeout(function () {
+                                       clearTimeout(tapHold);
+                                       tapHold = null;
+                                       tap = false;
+                                       self.groupManager.table.options.groupTapHold(e, self.getComponent());
+                               }, 1000);
+                       }, { passive: true });
+
+                       self.element.addEventListener("touchend", function (e) {
+                               clearTimeout(tapHold);
+                               tapHold = null;
+                       });
+               }
+
+               if (self.groupManager.table.options.groupToggleElement) {
+                       toggleElement = self.groupManager.table.options.groupToggleElement == "arrow" ? self.arrowElement : self.element;
+
+                       toggleElement.addEventListener("click", function (e) {
+                               e.stopPropagation();
+                               e.stopImmediatePropagation();
+                               self.toggleVisibility();
+                       });
+               }
+       };
+
+       Group.prototype._createGroup = function (groupID, level) {
+               var groupKey = level + "_" + groupID;
+               var group = new Group(this.groupManager, this, level, groupID, this.groupManager.groupIDLookups[level].field, this.groupManager.headerGenerator[level] || this.groupManager.headerGenerator[0], this.old ? this.old.groups[groupKey] : false);
+
+               this.groups[groupKey] = group;
+               this.groupList.push(group);
+       };
+
+       Group.prototype._addRowToGroup = function (row) {
+
+               var level = this.level + 1;
+
+               if (this.hasSubGroups) {
+                       var groupID = this.groupManager.groupIDLookups[level].func(row.getData()),
+                           groupKey = level + "_" + groupID;
+
+                       if (this.groupManager.allowedValues && this.groupManager.allowedValues[level]) {
+                               if (this.groups[groupKey]) {
+                                       this.groups[groupKey].addRow(row);
+                               }
+                       } else {
+                               if (!this.groups[groupKey]) {
+                                       this._createGroup(groupID, level);
+                               }
+
+                               this.groups[groupKey].addRow(row);
+                       }
+               }
+       };
+
+       Group.prototype._addRow = function (row) {
+               this.rows.push(row);
+               row.modules.group = this;
+       };
+
+       Group.prototype.insertRow = function (row, to, after) {
+               var data = this.conformRowData({});
+
+               row.updateData(data);
+
+               var toIndex = this.rows.indexOf(to);
+
+               if (toIndex > -1) {
+                       if (after) {
+                               this.rows.splice(toIndex + 1, 0, row);
+                       } else {
+                               this.rows.splice(toIndex, 0, row);
+                       }
+               } else {
+                       if (after) {
+                               this.rows.push(row);
+                       } else {
+                               this.rows.unshift(row);
+                       }
+               }
+
+               row.modules.group = this;
+
+               this.generateGroupHeaderContents();
+
+               if (this.groupManager.table.modExists("columnCalcs") && this.groupManager.table.options.columnCalcs != "table") {
+                       this.groupManager.table.modules.columnCalcs.recalcGroup(this);
+               }
+
+               this.groupManager.updateGroupRows(true);
+       };
+
+       Group.prototype.scrollHeader = function (left) {
+               this.arrowElement.style.marginLeft = left;
+
+               this.groupList.forEach(function (child) {
+                       child.scrollHeader(left);
+               });
+       };
+
+       Group.prototype.getRowIndex = function (row) {};
+
+       //update row data to match grouping contraints
+       Group.prototype.conformRowData = function (data) {
+               if (this.field) {
+                       data[this.field] = this.key;
+               } else {
+                       console.warn("Data Conforming Error - Cannot conform row data to match new group as groupBy is a function");
+               }
+
+               if (this.parent) {
+                       data = this.parent.conformRowData(data);
+               }
+
+               return data;
+       };
+
+       Group.prototype.removeRow = function (row) {
+               var index = this.rows.indexOf(row);
+               var el = row.getElement();
+
+               if (index > -1) {
+                       this.rows.splice(index, 1);
+               }
+
+               if (!this.groupManager.table.options.groupValues && !this.rows.length) {
+                       if (this.parent) {
+                               this.parent.removeGroup(this);
+                       } else {
+                               this.groupManager.removeGroup(this);
+                       }
+
+                       this.groupManager.updateGroupRows(true);
+               } else {
+
+                       if (el.parentNode) {
+                               el.parentNode.removeChild(el);
+                       }
+
+                       this.generateGroupHeaderContents();
+
+                       if (this.groupManager.table.modExists("columnCalcs") && this.groupManager.table.options.columnCalcs != "table") {
+                               this.groupManager.table.modules.columnCalcs.recalcGroup(this);
+                       }
+               }
+       };
+
+       Group.prototype.removeGroup = function (group) {
+               var groupKey = group.level + "_" + group.key,
+                   index;
+
+               if (this.groups[groupKey]) {
+                       delete this.groups[groupKey];
+
+                       index = this.groupList.indexOf(group);
+
+                       if (index > -1) {
+                               this.groupList.splice(index, 1);
+                       }
+
+                       if (!this.groupList.length) {
+                               if (this.parent) {
+                                       this.parent.removeGroup(this);
+                               } else {
+                                       this.groupManager.removeGroup(this);
+                               }
+                       }
+               }
+       };
+
+       Group.prototype.getHeadersAndRows = function (noCalc) {
+               var output = [];
+
+               output.push(this);
+
+               this._visSet();
+
+               if (this.visible) {
+                       if (this.groupList.length) {
+                               this.groupList.forEach(function (group) {
+                                       output = output.concat(group.getHeadersAndRows(noCalc));
+                               });
+                       } else {
+                               if (!noCalc && this.groupManager.table.options.columnCalcs != "table" && this.groupManager.table.modExists("columnCalcs") && this.groupManager.table.modules.columnCalcs.hasTopCalcs()) {
+                                       if (this.calcs.top) {
+                                               this.calcs.top.detachElement();
+                                               this.calcs.top.deleteCells();
+                                       }
+
+                                       this.calcs.top = this.groupManager.table.modules.columnCalcs.generateTopRow(this.rows);
+                                       output.push(this.calcs.top);
+                               }
+
+                               output = output.concat(this.rows);
+
+                               if (!noCalc && this.groupManager.table.options.columnCalcs != "table" && this.groupManager.table.modExists("columnCalcs") && this.groupManager.table.modules.columnCalcs.hasBottomCalcs()) {
+                                       if (this.calcs.bottom) {
+                                               this.calcs.bottom.detachElement();
+                                               this.calcs.bottom.deleteCells();
+                                       }
+
+                                       this.calcs.bottom = this.groupManager.table.modules.columnCalcs.generateBottomRow(this.rows);
+                                       output.push(this.calcs.bottom);
+                               }
+                       }
+               } else {
+                       if (!this.groupList.length && this.groupManager.table.options.columnCalcs != "table") {
+
+                               if (this.groupManager.table.modExists("columnCalcs")) {
+
+                                       if (!noCalc && this.groupManager.table.modules.columnCalcs.hasTopCalcs()) {
+                                               if (this.calcs.top) {
+                                                       this.calcs.top.detachElement();
+                                                       this.calcs.top.deleteCells();
+                                               }
+
+                                               if (this.groupManager.table.options.groupClosedShowCalcs) {
+                                                       this.calcs.top = this.groupManager.table.modules.columnCalcs.generateTopRow(this.rows);
+                                                       output.push(this.calcs.top);
+                                               }
+                                       }
+
+                                       if (!noCalc && this.groupManager.table.modules.columnCalcs.hasBottomCalcs()) {
+                                               if (this.calcs.bottom) {
+                                                       this.calcs.bottom.detachElement();
+                                                       this.calcs.bottom.deleteCells();
+                                               }
+
+                                               if (this.groupManager.table.options.groupClosedShowCalcs) {
+                                                       this.calcs.bottom = this.groupManager.table.modules.columnCalcs.generateBottomRow(this.rows);
+                                                       output.push(this.calcs.bottom);
+                                               }
+                                       }
+                               }
+                       }
+               }
+
+               return output;
+       };
+
+       Group.prototype.getData = function (visible, transform) {
+               var self = this,
+                   output = [];
+
+               this._visSet();
+
+               if (!visible || visible && this.visible) {
+                       this.rows.forEach(function (row) {
+                               output.push(row.getData(transform || "data"));
+                       });
+               }
+
+               return output;
+       };
+
+       // Group.prototype.getRows = function(){
+       //      this._visSet();
+
+       //      return this.visible ? this.rows : [];
+       // };
+
+       Group.prototype.getRowCount = function () {
+               var count = 0;
+
+               if (this.groupList.length) {
+                       this.groupList.forEach(function (group) {
+                               count += group.getRowCount();
+                       });
+               } else {
+                       count = this.rows.length;
+               }
+               return count;
+       };
+
+       Group.prototype.toggleVisibility = function () {
+               if (this.visible) {
+                       this.hide();
+               } else {
+                       this.show();
+               }
+       };
+
+       Group.prototype.hide = function () {
+               this.visible = false;
+
+               if (this.groupManager.table.rowManager.getRenderMode() == "classic" && !this.groupManager.table.options.pagination) {
+
+                       this.element.classList.remove("tabulator-group-visible");
+
+                       if (this.groupList.length) {
+                               this.groupList.forEach(function (group) {
+
+                                       var rows = group.getHeadersAndRows();
+
+                                       rows.forEach(function (row) {
+                                               row.detachElement();
+                                       });
+                               });
+                       } else {
+                               this.rows.forEach(function (row) {
+                                       var rowEl = row.getElement();
+                                       rowEl.parentNode.removeChild(rowEl);
+                               });
+                       }
+
+                       this.groupManager.table.rowManager.setDisplayRows(this.groupManager.updateGroupRows(), this.groupManager.getDisplayIndex());
+
+                       this.groupManager.table.rowManager.checkClassicModeGroupHeaderWidth();
+               } else {
+                       this.groupManager.updateGroupRows(true);
+               }
+
+               this.groupManager.table.options.groupVisibilityChanged.call(this.table, this.getComponent(), false);
+       };
+
+       Group.prototype.show = function () {
+               var self = this;
+
+               self.visible = true;
+
+               if (this.groupManager.table.rowManager.getRenderMode() == "classic" && !this.groupManager.table.options.pagination) {
+
+                       this.element.classList.add("tabulator-group-visible");
+
+                       var prev = self.getElement();
+
+                       if (this.groupList.length) {
+                               this.groupList.forEach(function (group) {
+                                       var rows = group.getHeadersAndRows();
+
+                                       rows.forEach(function (row) {
+                                               var rowEl = row.getElement();
+                                               prev.parentNode.insertBefore(rowEl, prev.nextSibling);
+                                               row.initialize();
+                                               prev = rowEl;
+                                       });
+                               });
+                       } else {
+                               self.rows.forEach(function (row) {
+                                       var rowEl = row.getElement();
+                                       prev.parentNode.insertBefore(rowEl, prev.nextSibling);
+                                       row.initialize();
+                                       prev = rowEl;
+                               });
+                       }
+
+                       this.groupManager.table.rowManager.setDisplayRows(this.groupManager.updateGroupRows(), this.groupManager.getDisplayIndex());
+
+                       this.groupManager.table.rowManager.checkClassicModeGroupHeaderWidth();
+               } else {
+                       this.groupManager.updateGroupRows(true);
+               }
+
+               this.groupManager.table.options.groupVisibilityChanged.call(this.table, this.getComponent(), true);
+       };
+
+       Group.prototype._visSet = function () {
+               var data = [];
+
+               if (typeof this.visible == "function") {
+
+                       this.rows.forEach(function (row) {
+                               data.push(row.getData());
+                       });
+
+                       this.visible = this.visible(this.key, this.getRowCount(), data, this.getComponent());
+               }
+       };
+
+       Group.prototype.getRowGroup = function (row) {
+               var match = false;
+               if (this.groupList.length) {
+                       this.groupList.forEach(function (group) {
+                               var result = group.getRowGroup(row);
+
+                               if (result) {
+                                       match = result;
+                               }
+                       });
+               } else {
+                       if (this.rows.find(function (item) {
+                               return item === row;
+                       })) {
+                               match = this;
+                       }
+               }
+
+               return match;
+       };
+
+       Group.prototype.getSubGroups = function (component) {
+               var output = [];
+
+               this.groupList.forEach(function (child) {
+                       output.push(component ? child.getComponent() : child);
+               });
+
+               return output;
+       };
+
+       Group.prototype.getRows = function (compoment) {
+               var output = [];
+
+               this.rows.forEach(function (row) {
+                       output.push(compoment ? row.getComponent() : row);
+               });
+
+               return output;
+       };
+
+       Group.prototype.generateGroupHeaderContents = function () {
+               var data = [];
+
+               this.rows.forEach(function (row) {
+                       data.push(row.getData());
+               });
+
+               this.elementContents = this.generator(this.key, this.getRowCount(), data, this.getComponent());
+
+               while (this.element.firstChild) {
+                       this.element.removeChild(this.element.firstChild);
+               }if (typeof this.elementContents === "string") {
+                       this.element.innerHTML = this.elementContents;
+               } else {
+                       this.element.appendChild(this.elementContents);
+               }
+
+               this.element.insertBefore(this.arrowElement, this.element.firstChild);
+       };
+
+       Group.prototype.getPath = function () {
+               var path = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
+
+               path.unshift(this.key);
+               if (this.parent) {
+                       this.parent.getPath(path);
+               }
+               return path;
+       };
+       ////////////// Standard Row Functions //////////////
+
+       Group.prototype.getElement = function () {
+               this.addBindingsd = false;
+
+               this._visSet();
+
+               if (this.visible) {
+                       this.element.classList.add("tabulator-group-visible");
+               } else {
+                       this.element.classList.remove("tabulator-group-visible");
+               }
+
+               for (var i = 0; i < this.element.childNodes.length; ++i) {
+                       this.element.childNodes[i].parentNode.removeChild(this.element.childNodes[i]);
+               }
+
+               this.generateGroupHeaderContents();
+
+               // this.addBindings();
+
+               return this.element;
+       };
+
+       Group.prototype.detachElement = function () {
+               if (this.element && this.element.parentNode) {
+                       this.element.parentNode.removeChild(this.element);
+               }
+       };
+
+       //normalize the height of elements in the row
+       Group.prototype.normalizeHeight = function () {
+               this.setHeight(this.element.clientHeight);
+       };
+
+       Group.prototype.initialize = function (force) {
+               if (!this.initialized || force) {
+                       this.normalizeHeight();
+                       this.initialized = true;
+               }
+       };
+
+       Group.prototype.reinitialize = function () {
+               this.initialized = false;
+               this.height = 0;
+
+               if (Tabulator.prototype.helpers.elVisible(this.element)) {
+                       this.initialize(true);
+               }
+       };
+
+       Group.prototype.setHeight = function (height) {
+               if (this.height != height) {
+                       this.height = height;
+                       this.outerHeight = this.element.offsetHeight;
+               }
+       };
+
+       //return rows outer height
+       Group.prototype.getHeight = function () {
+               return this.outerHeight;
+       };
+
+       Group.prototype.getGroup = function () {
+               return this;
+       };
+
+       Group.prototype.reinitializeHeight = function () {};
+       Group.prototype.calcHeight = function () {};
+       Group.prototype.setCellHeight = function () {};
+       Group.prototype.clearCellHeight = function () {};
+
+       //////////////// Object Generation /////////////////
+       Group.prototype.getComponent = function () {
+               if (!this.component) {
+                       this.component = new GroupComponent(this);
+               }
+
+               return this.component;
+       };
+
+       //////////////////////////////////////////////////
+       ////////////// Group Row Extension ///////////////
+       //////////////////////////////////////////////////
+
+       var GroupRows = function GroupRows(table) {
+
+               this.table = table; //hold Tabulator object
+
+               this.groupIDLookups = false; //enable table grouping and set field to group by
+               this.startOpen = [function () {
+                       return false;
+               }]; //starting state of group
+               this.headerGenerator = [function () {
+                       return "";
+               }];
+               this.groupList = []; //ordered list of groups
+               this.allowedValues = false;
+               this.groups = {}; //hold row groups
+               this.displayIndex = 0; //index in display pipeline
+       };
+
+       //initialize group configuration
+       GroupRows.prototype.initialize = function () {
+               var self = this,
+                   groupBy = self.table.options.groupBy,
+                   startOpen = self.table.options.groupStartOpen,
+                   groupHeader = self.table.options.groupHeader;
+
+               this.allowedValues = self.table.options.groupValues;
+
+               if (Array.isArray(groupBy) && Array.isArray(groupHeader) && groupBy.length > groupHeader.length) {
+                       console.warn("Error creating group headers, groupHeader array is shorter than groupBy array");
+               }
+
+               self.headerGenerator = [function () {
+                       return "";
+               }];
+               this.startOpen = [function () {
+                       return false;
+               }]; //starting state of group
+
+               self.table.modules.localize.bind("groups|item", function (langValue, lang) {
+                       self.headerGenerator[0] = function (value, count, data) {
+                               //header layout function
+                               return (typeof value === "undefined" ? "" : value) + "<span>(" + count + " " + (count === 1 ? langValue : lang.groups.items) + ")</span>";
+                       };
+               });
+
+               this.groupIDLookups = [];
+
+               if (Array.isArray(groupBy) || groupBy) {
+                       if (this.table.modExists("columnCalcs") && this.table.options.columnCalcs != "table" && this.table.options.columnCalcs != "both") {
+                               this.table.modules.columnCalcs.removeCalcs();
+                       }
+               } else {
+                       if (this.table.modExists("columnCalcs") && this.table.options.columnCalcs != "group") {
+
+                               var cols = this.table.columnManager.getRealColumns();
+
+                               cols.forEach(function (col) {
+                                       if (col.definition.topCalc) {
+                                               self.table.modules.columnCalcs.initializeTopRow();
+                                       }
+
+                                       if (col.definition.bottomCalc) {
+                                               self.table.modules.columnCalcs.initializeBottomRow();
+                                       }
+                               });
+                       }
+               }
+
+               if (!Array.isArray(groupBy)) {
+                       groupBy = [groupBy];
+               }
+
+               groupBy.forEach(function (group, i) {
+                       var lookupFunc, column;
+
+                       if (typeof group == "function") {
+                               lookupFunc = group;
+                       } else {
+                               column = self.table.columnManager.getColumnByField(group);
+
+                               if (column) {
+                                       lookupFunc = function lookupFunc(data) {
+                                               return column.getFieldValue(data);
+                                       };
+                               } else {
+                                       lookupFunc = function lookupFunc(data) {
+                                               return data[group];
+                                       };
+                               }
+                       }
+
+                       self.groupIDLookups.push({
+                               field: typeof group === "function" ? false : group,
+                               func: lookupFunc,
+                               values: self.allowedValues ? self.allowedValues[i] : false
+                       });
+               });
+
+               if (startOpen) {
+
+                       if (!Array.isArray(startOpen)) {
+                               startOpen = [startOpen];
+                       }
+
+                       startOpen.forEach(function (level) {
+                               level = typeof level == "function" ? level : function () {
+                                       return true;
+                               };
+                       });
+
+                       self.startOpen = startOpen;
+               }
+
+               if (groupHeader) {
+                       self.headerGenerator = Array.isArray(groupHeader) ? groupHeader : [groupHeader];
+               }
+
+               this.initialized = true;
+       };
+
+       GroupRows.prototype.setDisplayIndex = function (index) {
+               this.displayIndex = index;
+       };
+
+       GroupRows.prototype.getDisplayIndex = function () {
+               return this.displayIndex;
+       };
+
+       //return appropriate rows with group headers
+       GroupRows.prototype.getRows = function (rows) {
+               if (this.groupIDLookups.length) {
+
+                       this.table.options.dataGrouping.call(this.table);
+
+                       this.generateGroups(rows);
+
+                       if (this.table.options.dataGrouped) {
+                               this.table.options.dataGrouped.call(this.table, this.getGroups(true));
+                       }
+
+                       return this.updateGroupRows();
+               } else {
+                       return rows.slice(0);
+               }
+       };
+
+       GroupRows.prototype.getGroups = function (compoment) {
+               var groupComponents = [];
+
+               this.groupList.forEach(function (group) {
+                       groupComponents.push(compoment ? group.getComponent() : group);
+               });
+
+               return groupComponents;
+       };
+
+       GroupRows.prototype.getChildGroups = function (group) {
+               var _this69 = this;
+
+               var groupComponents = [];
+
+               if (!group) {
+                       group = this;
+               }
+
+               group.groupList.forEach(function (child) {
+                       if (child.groupList.length) {
+                               groupComponents = groupComponents.concat(_this69.getChildGroups(child));
+                       } else {
+                               groupComponents.push(child);
+                       }
+               });
+
+               return groupComponents;
+       };
+
+       GroupRows.prototype.wipe = function () {
+               this.groupList.forEach(function (group) {
+                       group.wipe();
+               });
+       };
+
+       GroupRows.prototype.pullGroupListData = function (groupList) {
+               var self = this;
+               var groupListData = [];
+
+               groupList.forEach(function (group) {
+                       var groupHeader = {};
+                       groupHeader.level = 0;
+                       groupHeader.rowCount = 0;
+                       groupHeader.headerContent = "";
+                       var childData = [];
+
+                       if (group.hasSubGroups) {
+                               childData = self.pullGroupListData(group.groupList);
+
+                               groupHeader.level = group.level;
+                               groupHeader.rowCount = childData.length - group.groupList.length; // data length minus number of sub-headers
+                               groupHeader.headerContent = group.generator(group.key, groupHeader.rowCount, group.rows, group);
+
+                               groupListData.push(groupHeader);
+                               groupListData = groupListData.concat(childData);
+                       } else {
+                               groupHeader.level = group.level;
+                               groupHeader.headerContent = group.generator(group.key, group.rows.length, group.rows, group);
+                               groupHeader.rowCount = group.getRows().length;
+
+                               groupListData.push(groupHeader);
+
+                               group.getRows().forEach(function (row) {
+                                       groupListData.push(row.getData("data"));
+                               });
+                       }
+               });
+
+               return groupListData;
+       };
+
+       GroupRows.prototype.getGroupedData = function () {
+
+               return this.pullGroupListData(this.groupList);
+       };
+
+       GroupRows.prototype.getRowGroup = function (row) {
+               var match = false;
+
+               this.groupList.forEach(function (group) {
+                       var result = group.getRowGroup(row);
+
+                       if (result) {
+                               match = result;
+                       }
+               });
+
+               return match;
+       };
+
+       GroupRows.prototype.countGroups = function () {
+               return this.groupList.length;
+       };
+
+       GroupRows.prototype.generateGroups = function (rows) {
+               var self = this,
+                   oldGroups = self.groups;
+
+               self.groups = {};
+               self.groupList = [];
+
+               if (this.allowedValues && this.allowedValues[0]) {
+                       this.allowedValues[0].forEach(function (value) {
+                               self.createGroup(value, 0, oldGroups);
+                       });
+
+                       rows.forEach(function (row) {
+                               self.assignRowToExistingGroup(row, oldGroups);
+                       });
+               } else {
+                       rows.forEach(function (row) {
+                               self.assignRowToGroup(row, oldGroups);
+                       });
+               }
+       };
+
+       GroupRows.prototype.createGroup = function (groupID, level, oldGroups) {
+               var groupKey = level + "_" + groupID,
+                   group;
+
+               oldGroups = oldGroups || [];
+
+               group = new Group(this, false, level, groupID, this.groupIDLookups[0].field, this.headerGenerator[0], oldGroups[groupKey]);
+
+               this.groups[groupKey] = group;
+               this.groupList.push(group);
+       };
+
+       // GroupRows.prototype.assignRowToGroup = function(row, oldGroups){
+       //      var groupID = this.groupIDLookups[0].func(row.getData()),
+       //      groupKey = "0_" + groupID;
+
+       //      if(!this.groups[groupKey]){
+       //              this.createGroup(groupID, 0, oldGroups);
+       //      }
+
+       //      this.groups[groupKey].addRow(row);
+       // };
+
+       GroupRows.prototype.assignRowToExistingGroup = function (row, oldGroups) {
+               var groupID = this.groupIDLookups[0].func(row.getData()),
+                   groupKey = "0_" + groupID;
+
+               if (this.groups[groupKey]) {
+                       this.groups[groupKey].addRow(row);
+               }
+       };
+
+       GroupRows.prototype.assignRowToGroup = function (row, oldGroups) {
+               var groupID = this.groupIDLookups[0].func(row.getData()),
+                   newGroupNeeded = !this.groups["0_" + groupID];
+
+               if (newGroupNeeded) {
+                       this.createGroup(groupID, 0, oldGroups);
+               }
+
+               this.groups["0_" + groupID].addRow(row);
+
+               return !newGroupNeeded;
+       };
+
+       GroupRows.prototype.reassignRowToGroup = function (row) {
+               var oldRowGroup = row.getGroup(),
+                   oldGroupPath = oldRowGroup.getPath(),
+                   newGroupPath = this.getExpectedPath(row),
+                   samePath = true;
+               // figure out if new group path is the same as old group path
+               var samePath = oldGroupPath.length == newGroupPath.length && oldGroupPath.every(function (element, index) {
+                       return element === newGroupPath[index];
+               });
+               // refresh if they new path and old path aren't the same (aka the row's groupings have changed)
+               if (!samePath) {
+                       oldRowGroup.removeRow(row);
+                       this.assignRowToGroup(row, self.groups);
+                       this.table.rowManager.refreshActiveData("group", false, true);
+               }
+       };
+
+       GroupRows.prototype.getExpectedPath = function (row) {
+               var groupPath = [],
+                   rowData = row.getData();
+               this.groupIDLookups.forEach(function (groupId) {
+                       groupPath.push(groupId.func(rowData));
+               });
+               return groupPath;
+       };
+
+       GroupRows.prototype.updateGroupRows = function (force) {
+               var self = this,
+                   output = [],
+                   oldRowCount;
+
+               self.groupList.forEach(function (group) {
+                       output = output.concat(group.getHeadersAndRows());
+               });
+
+               //force update of table display
+               if (force) {
+
+                       var displayIndex = self.table.rowManager.setDisplayRows(output, this.getDisplayIndex());
+
+                       if (displayIndex !== true) {
+                               this.setDisplayIndex(displayIndex);
+                       }
+
+                       self.table.rowManager.refreshActiveData("group", true, true);
+               }
+
+               return output;
+       };
+
+       GroupRows.prototype.scrollHeaders = function (left) {
+               if (this.table.options.virtualDomHoz) {
+                       left -= this.table.vdomHoz.vDomPadLeft;
+               }
+
+               left = left + "px";
+
+               this.groupList.forEach(function (group) {
+                       group.scrollHeader(left);
+               });
+       };
+
+       GroupRows.prototype.removeGroup = function (group) {
+               var groupKey = group.level + "_" + group.key,
+                   index;
+
+               if (this.groups[groupKey]) {
+                       delete this.groups[groupKey];
+
+                       index = this.groupList.indexOf(group);
+
+                       if (index > -1) {
+                               this.groupList.splice(index, 1);
+                       }
+               }
+       };
+
+       Tabulator.prototype.registerModule("groupRows", GroupRows);
+       var History = function History(table) {
+               this.table = table; //hold Tabulator object
+
+               this.history = [];
+               this.index = -1;
+       };
+
+       History.prototype.clear = function () {
+               this.history = [];
+               this.index = -1;
+       };
+
+       History.prototype.action = function (type, component, data) {
+
+               this.history = this.history.slice(0, this.index + 1);
+
+               this.history.push({
+                       type: type,
+                       component: component,
+                       data: data
+               });
+
+               this.index++;
+       };
+
+       History.prototype.getHistoryUndoSize = function () {
+               return this.index + 1;
+       };
+
+       History.prototype.getHistoryRedoSize = function () {
+               return this.history.length - (this.index + 1);
+       };
+
+       History.prototype.clearComponentHistory = function (component) {
+               var index = this.history.findIndex(function (item) {
+                       return item.component === component;
+               });
+
+               if (index > -1) {
+                       this.history.splice(index, 1);
+                       if (index <= this.index) {
+                               this.index--;
+                       }
+
+                       this.clearComponentHistory(component);
+               }
+       };
+
+       History.prototype.undo = function () {
+
+               if (this.index > -1) {
+                       var action = this.history[this.index];
+
+                       this.undoers[action.type].call(this, action);
+
+                       this.index--;
+
+                       this.table.options.historyUndo.call(this.table, action.type, action.component.getComponent(), action.data);
+
+                       return true;
+               } else {
+                       console.warn("History Undo Error - No more history to undo");
+                       return false;
+               }
+       };
+
+       History.prototype.redo = function () {
+               if (this.history.length - 1 > this.index) {
+
+                       this.index++;
+
+                       var action = this.history[this.index];
+
+                       this.redoers[action.type].call(this, action);
+
+                       this.table.options.historyRedo.call(this.table, action.type, action.component.getComponent(), action.data);
+
+                       return true;
+               } else {
+                       console.warn("History Redo Error - No more history to redo");
+                       return false;
+               }
+       };
+
+       History.prototype.undoers = {
+               cellEdit: function cellEdit(action) {
+                       action.component.setValueProcessData(action.data.oldValue);
+               },
+
+               rowAdd: function rowAdd(action) {
+                       action.component.deleteActual();
+               },
+
+               rowDelete: function rowDelete(action) {
+                       var newRow = this.table.rowManager.addRowActual(action.data.data, action.data.pos, action.data.index);
+
+                       if (this.table.options.groupBy && this.table.modExists("groupRows")) {
+                               this.table.modules.groupRows.updateGroupRows(true);
+                       }
+
+                       this._rebindRow(action.component, newRow);
+               },
+
+               rowMove: function rowMove(action) {
+                       this.table.rowManager.moveRowActual(action.component, this.table.rowManager.rows[action.data.posFrom], !action.data.after);
+                       this.table.rowManager.redraw();
+               }
+       };
+
+       History.prototype.redoers = {
+               cellEdit: function cellEdit(action) {
+                       action.component.setValueProcessData(action.data.newValue);
+               },
+
+               rowAdd: function rowAdd(action) {
+                       var newRow = this.table.rowManager.addRowActual(action.data.data, action.data.pos, action.data.index);
+
+                       if (this.table.options.groupBy && this.table.modExists("groupRows")) {
+                               this.table.modules.groupRows.updateGroupRows(true);
+                       }
+
+                       this._rebindRow(action.component, newRow);
+               },
+
+               rowDelete: function rowDelete(action) {
+                       action.component.deleteActual();
+               },
+
+               rowMove: function rowMove(action) {
+                       this.table.rowManager.moveRowActual(action.component, this.table.rowManager.rows[action.data.posTo], action.data.after);
+                       this.table.rowManager.redraw();
+               }
+       };
+
+       //rebind rows to new element after deletion
+       History.prototype._rebindRow = function (oldRow, newRow) {
+               this.history.forEach(function (action) {
+                       if (action.component instanceof Row) {
+                               if (action.component === oldRow) {
+                                       action.component = newRow;
+                               }
+                       } else if (action.component instanceof Cell) {
+                               if (action.component.row === oldRow) {
+                                       var field = action.component.column.getField();
+
+                                       if (field) {
+                                               action.component = newRow.getCell(field);
+                                       }
+                               }
+                       }
+               });
+       };
+
+       Tabulator.prototype.registerModule("history", History);
+       var HtmlTableImport = function HtmlTableImport(table) {
+               this.table = table; //hold Tabulator object
+               this.fieldIndex = [];
+               this.hasIndex = false;
+       };
+
+       HtmlTableImport.prototype.parseTable = function () {
+               var self = this,
+                   element = self.table.element,
+                   options = self.table.options,
+                   columns = options.columns,
+                   headers = element.getElementsByTagName("th"),
+                   rows = element.getElementsByTagName("tbody")[0],
+                   data = [],
+                   newTable;
+
+               self.hasIndex = false;
+
+               self.table.options.htmlImporting.call(this.table);
+
+               rows = rows ? rows.getElementsByTagName("tr") : [];
+
+               //check for tablator inline options
+               self._extractOptions(element, options);
+
+               if (headers.length) {
+                       self._extractHeaders(headers, rows);
+               } else {
+                       self._generateBlankHeaders(headers, rows);
+               }
+
+               //iterate through table rows and build data set
+               for (var index = 0; index < rows.length; index++) {
+                       var row = rows[index],
+                           cells = row.getElementsByTagName("td"),
+                           item = {};
+
+                       //create index if the dont exist in table
+                       if (!self.hasIndex) {
+                               item[options.index] = index;
+                       }
+
+                       for (var i = 0; i < cells.length; i++) {
+                               var cell = cells[i];
+                               if (typeof this.fieldIndex[i] !== "undefined") {
+                                       item[this.fieldIndex[i]] = cell.innerHTML;
+                               }
+                       }
+
+                       //add row data to item
+                       data.push(item);
+               }
+
+               //create new element
+               var newElement = document.createElement("div");
+
+               //transfer attributes to new element
+               var attributes = element.attributes;
+
+               // loop through attributes and apply them on div
+
+               for (var i in attributes) {
+                       if (_typeof(attributes[i]) == "object") {
+                               newElement.setAttribute(attributes[i].name, attributes[i].value);
+                       }
+               }
+
+               // replace table with div element
+               element.parentNode.replaceChild(newElement, element);
+
+               options.data = data;
+
+               self.table.options.htmlImported.call(this.table);
+
+               // // newElement.tabulator(options);
+
+               this.table.element = newElement;
+       };
+
+       //extract tabulator attribute options
+       HtmlTableImport.prototype._extractOptions = function (element, options, defaultOptions) {
+               var attributes = element.attributes;
+               var optionsArr = defaultOptions ? Object.assign([], defaultOptions) : Object.keys(options);
+               var optionsList = {};
+
+               optionsArr.forEach(function (item) {
+                       optionsList[item.toLowerCase()] = item;
+               });
+
+               for (var index in attributes) {
+                       var attrib = attributes[index];
+                       var name;
+
+                       if (attrib && (typeof attrib === 'undefined' ? 'undefined' : _typeof(attrib)) == "object" && attrib.name && attrib.name.indexOf("tabulator-") === 0) {
+                               name = attrib.name.replace("tabulator-", "");
+
+                               if (typeof optionsList[name] !== "undefined") {
+                                       options[optionsList[name]] = this._attribValue(attrib.value);
+                               }
+                       }
+               }
+       };
+
+       //get value of attribute
+       HtmlTableImport.prototype._attribValue = function (value) {
+               if (value === "true") {
+                       return true;
+               }
+
+               if (value === "false") {
+                       return false;
+               }
+
+               return value;
+       };
+
+       //find column if it has already been defined
+       HtmlTableImport.prototype._findCol = function (title) {
+               var match = this.table.options.columns.find(function (column) {
+                       return column.title === title;
+               });
+
+               return match || false;
+       };
+
+       //extract column from headers
+       HtmlTableImport.prototype._extractHeaders = function (headers, rows) {
+               for (var index = 0; index < headers.length; index++) {
+                       var header = headers[index],
+                           exists = false,
+                           col = this._findCol(header.textContent),
+                           width,
+                           attributes;
+
+                       if (col) {
+                               exists = true;
+                       } else {
+                               col = { title: header.textContent.trim() };
+                       }
+
+                       if (!col.field) {
+                               col.field = header.textContent.trim().toLowerCase().replace(" ", "_");
+                       }
+
+                       width = header.getAttribute("width");
+
+                       if (width && !col.width) {
+                               col.width = width;
+                       }
+
+                       //check for tablator inline options
+                       attributes = header.attributes;
+
+                       // //check for tablator inline options
+                       this._extractOptions(header, col, Column.prototype.defaultOptionList);
+
+                       this.fieldIndex[index] = col.field;
+
+                       if (col.field == this.table.options.index) {
+                               this.hasIndex = true;
+                       }
+
+                       if (!exists) {
+                               this.table.options.columns.push(col);
+                       }
+               }
+       };
+
+       //generate blank headers
+       HtmlTableImport.prototype._generateBlankHeaders = function (headers, rows) {
+               for (var index = 0; index < headers.length; index++) {
+                       var header = headers[index],
+                           col = { title: "", field: "col" + index };
+
+                       this.fieldIndex[index] = col.field;
+
+                       var width = header.getAttribute("width");
+
+                       if (width) {
+                               col.width = width;
+                       }
+
+                       this.table.options.columns.push(col);
+               }
+       };
+
+       Tabulator.prototype.registerModule("htmlTableImport", HtmlTableImport);
+       var Keybindings = function Keybindings(table) {
+               this.table = table; //hold Tabulator object
+               this.watchKeys = null;
+               this.pressedKeys = null;
+               this.keyupBinding = false;
+               this.keydownBinding = false;
+       };
+
+       Keybindings.prototype.initialize = function () {
+               var bindings = this.table.options.keybindings,
+                   mergedBindings = {};
+
+               this.watchKeys = {};
+               this.pressedKeys = [];
+
+               if (bindings !== false) {
+
+                       for (var key in this.bindings) {
+                               mergedBindings[key] = this.bindings[key];
+                       }
+
+                       if (Object.keys(bindings).length) {
+
+                               for (var _key in bindings) {
+                                       mergedBindings[_key] = bindings[_key];
+                               }
+                       }
+
+                       this.mapBindings(mergedBindings);
+                       this.bindEvents();
+               }
+       };
+
+       Keybindings.prototype.mapBindings = function (bindings) {
+               var _this70 = this;
+
+               var self = this;
+
+               var _loop2 = function _loop2(key) {
+
+                       if (_this70.actions[key]) {
+
+                               if (bindings[key]) {
+
+                                       if (_typeof(bindings[key]) !== "object") {
+                                               bindings[key] = [bindings[key]];
+                                       }
+
+                                       bindings[key].forEach(function (binding) {
+                                               self.mapBinding(key, binding);
+                                       });
+                               }
+                       } else {
+                               console.warn("Key Binding Error - no such action:", key);
+                       }
+               };
+
+               for (var key in bindings) {
+                       _loop2(key);
+               }
+       };
+
+       Keybindings.prototype.mapBinding = function (action, symbolsList) {
+               var self = this;
+
+               var binding = {
+                       action: this.actions[action],
+                       keys: [],
+                       ctrl: false,
+                       shift: false,
+                       meta: false
+               };
+
+               var symbols = symbolsList.toString().toLowerCase().split(" ").join("").split("+");
+
+               symbols.forEach(function (symbol) {
+                       switch (symbol) {
+                               case "ctrl":
+                                       binding.ctrl = true;
+                                       break;
+
+                               case "shift":
+                                       binding.shift = true;
+                                       break;
+
+                               case "meta":
+                                       binding.meta = true;
+                                       break;
+
+                               default:
+                                       symbol = parseInt(symbol);
+                                       binding.keys.push(symbol);
+
+                                       if (!self.watchKeys[symbol]) {
+                                               self.watchKeys[symbol] = [];
+                                       }
+
+                                       self.watchKeys[symbol].push(binding);
+                       }
+               });
+       };
+
+       Keybindings.prototype.bindEvents = function () {
+               var self = this;
+
+               this.keyupBinding = function (e) {
+                       var code = e.keyCode;
+                       var bindings = self.watchKeys[code];
+
+                       if (bindings) {
+
+                               self.pressedKeys.push(code);
+
+                               bindings.forEach(function (binding) {
+                                       self.checkBinding(e, binding);
+                               });
+                       }
+               };
+
+               this.keydownBinding = function (e) {
+                       var code = e.keyCode;
+                       var bindings = self.watchKeys[code];
+
+                       if (bindings) {
+
+                               var index = self.pressedKeys.indexOf(code);
+
+                               if (index > -1) {
+                                       self.pressedKeys.splice(index, 1);
+                               }
+                       }
+               };
+
+               this.table.element.addEventListener("keydown", this.keyupBinding);
+
+               this.table.element.addEventListener("keyup", this.keydownBinding);
+       };
+
+       Keybindings.prototype.clearBindings = function () {
+               if (this.keyupBinding) {
+                       this.table.element.removeEventListener("keydown", this.keyupBinding);
+               }
+
+               if (this.keydownBinding) {
+                       this.table.element.removeEventListener("keyup", this.keydownBinding);
+               }
+       };
+
+       Keybindings.prototype.checkBinding = function (e, binding) {
+               var self = this,
+                   match = true;
+
+               if (e.ctrlKey == binding.ctrl && e.shiftKey == binding.shift && e.metaKey == binding.meta) {
+                       binding.keys.forEach(function (key) {
+                               var index = self.pressedKeys.indexOf(key);
+
+                               if (index == -1) {
+                                       match = false;
+                               }
+                       });
+
+                       if (match) {
+                               binding.action.call(self, e);
+                       }
+
+                       return true;
+               }
+
+               return false;
+       };
+
+       //default bindings
+       Keybindings.prototype.bindings = {
+               navPrev: "shift + 9",
+               navNext: 9,
+               navUp: 38,
+               navDown: 40,
+               scrollPageUp: 33,
+               scrollPageDown: 34,
+               scrollToStart: 36,
+               scrollToEnd: 35,
+               undo: "ctrl + 90",
+               redo: "ctrl + 89",
+               copyToClipboard: "ctrl + 67"
+       };
+
+       //default actions
+       Keybindings.prototype.actions = {
+               keyBlock: function keyBlock(e) {
+                       e.stopPropagation();
+                       e.preventDefault();
+               },
+               scrollPageUp: function scrollPageUp(e) {
+                       var rowManager = this.table.rowManager,
+                           newPos = rowManager.scrollTop - rowManager.height,
+                           scrollMax = rowManager.element.scrollHeight;
+
+                       e.preventDefault();
+
+                       if (rowManager.displayRowsCount) {
+                               if (newPos >= 0) {
+                                       rowManager.element.scrollTop = newPos;
+                               } else {
+                                       rowManager.scrollToRow(rowManager.getDisplayRows()[0]);
+                               }
+                       }
+
+                       this.table.element.focus();
+               },
+               scrollPageDown: function scrollPageDown(e) {
+                       var rowManager = this.table.rowManager,
+                           newPos = rowManager.scrollTop + rowManager.height,
+                           scrollMax = rowManager.element.scrollHeight;
+
+                       e.preventDefault();
+
+                       if (rowManager.displayRowsCount) {
+                               if (newPos <= scrollMax) {
+                                       rowManager.element.scrollTop = newPos;
+                               } else {
+                                       rowManager.scrollToRow(rowManager.getDisplayRows()[rowManager.displayRowsCount - 1]);
+                               }
+                       }
+
+                       this.table.element.focus();
+               },
+               scrollToStart: function scrollToStart(e) {
+                       var rowManager = this.table.rowManager;
+
+                       e.preventDefault();
+
+                       if (rowManager.displayRowsCount) {
+                               rowManager.scrollToRow(rowManager.getDisplayRows()[0]);
+                       }
+
+                       this.table.element.focus();
+               },
+               scrollToEnd: function scrollToEnd(e) {
+                       var rowManager = this.table.rowManager;
+
+                       e.preventDefault();
+
+                       if (rowManager.displayRowsCount) {
+                               rowManager.scrollToRow(rowManager.getDisplayRows()[rowManager.displayRowsCount - 1]);
+                       }
+
+                       this.table.element.focus();
+               },
+               navPrev: function navPrev(e) {
+                       var cell = false;
+
+                       if (this.table.modExists("edit")) {
+                               cell = this.table.modules.edit.currentCell;
+
+                               if (cell) {
+                                       e.preventDefault();
+                                       cell.nav().prev();
+                               }
+                       }
+               },
+
+               navNext: function navNext(e) {
+                       var cell = false;
+                       var newRow = this.table.options.tabEndNewRow;
+                       var nav;
+
+                       if (this.table.modExists("edit")) {
+                               cell = this.table.modules.edit.currentCell;
+
+                               if (cell) {
+                                       e.preventDefault();
+
+                                       nav = cell.nav();
+
+                                       if (!nav.next()) {
+                                               if (newRow) {
+
+                                                       cell.getElement().firstChild.blur();
+
+                                                       if (newRow === true) {
+                                                               newRow = this.table.addRow({});
+                                                       } else {
+                                                               if (typeof newRow == "function") {
+                                                                       newRow = this.table.addRow(newRow(cell.row.getComponent()));
+                                                               } else {
+                                                                       newRow = this.table.addRow(Object.assign({}, newRow));
+                                                               }
+                                                       }
+
+                                                       newRow.then(function () {
+                                                               setTimeout(function () {
+                                                                       nav.next();
+                                                               });
+                                                       });
+                                               }
+                                       }
+                               }
+                       }
+               },
+
+               navLeft: function navLeft(e) {
+                       var cell = false;
+
+                       if (this.table.modExists("edit")) {
+                               cell = this.table.modules.edit.currentCell;
+
+                               if (cell) {
+                                       e.preventDefault();
+                                       cell.nav().left();
+                               }
+                       }
+               },
+
+               navRight: function navRight(e) {
+                       var cell = false;
+
+                       if (this.table.modExists("edit")) {
+                               cell = this.table.modules.edit.currentCell;
+
+                               if (cell) {
+                                       e.preventDefault();
+                                       cell.nav().right();
+                               }
+                       }
+               },
+
+               navUp: function navUp(e) {
+                       var cell = false;
+
+                       if (this.table.modExists("edit")) {
+                               cell = this.table.modules.edit.currentCell;
+
+                               if (cell) {
+                                       e.preventDefault();
+                                       cell.nav().up();
+                               }
+                       }
+               },
+
+               navDown: function navDown(e) {
+                       var cell = false;
+
+                       if (this.table.modExists("edit")) {
+                               cell = this.table.modules.edit.currentCell;
+
+                               if (cell) {
+                                       e.preventDefault();
+                                       cell.nav().down();
+                               }
+                       }
+               },
+
+               undo: function undo(e) {
+                       var cell = false;
+                       if (this.table.options.history && this.table.modExists("history") && this.table.modExists("edit")) {
+
+                               cell = this.table.modules.edit.currentCell;
+
+                               if (!cell) {
+                                       e.preventDefault();
+                                       this.table.modules.history.undo();
+                               }
+                       }
+               },
+
+               redo: function redo(e) {
+                       var cell = false;
+                       if (this.table.options.history && this.table.modExists("history") && this.table.modExists("edit")) {
+
+                               cell = this.table.modules.edit.currentCell;
+
+                               if (!cell) {
+                                       e.preventDefault();
+                                       this.table.modules.history.redo();
+                               }
+                       }
+               },
+
+               copyToClipboard: function copyToClipboard(e) {
+                       if (!this.table.modules.edit.currentCell) {
+                               if (this.table.modExists("clipboard", true)) {
+                                       this.table.modules.clipboard.copy(false, true);
+                               }
+                       }
+               }
+       };
+
+       Tabulator.prototype.registerModule("keybindings", Keybindings);
+       var Menu = function Menu(table) {
+               this.table = table; //hold Tabulator object
+               this.menuEl = false;
+               this.blurEvent = this.hideMenu.bind(this);
+               this.escEvent = this.escMenu.bind(this);
+               this.nestedMenuBlock = false;
+       };
+
+       Menu.prototype.initializeColumnHeader = function (column) {
+               var _this71 = this;
+
+               var headerMenuEl;
+
+               if (column.definition.headerContextMenu) {
+                       column.getElement().addEventListener("contextmenu", this.LoadMenuEvent.bind(this, column, column.definition.headerContextMenu));
+                       this.tapHold(column, column.definition.headerContextMenu);
+               }
+
+               // if(column.definition.headerClickMenu){
+               //      column.getElement().addEventListener("click", this.LoadMenuEvent.bind(this, column, column.definition.headerClickMenu));
+               // }
+
+               if (column.definition.headerMenu) {
+
+                       headerMenuEl = document.createElement("span");
+                       headerMenuEl.classList.add("tabulator-header-menu-button");
+                       headerMenuEl.innerHTML = "&vellip;";
+
+                       headerMenuEl.addEventListener("click", function (e) {
+                               var menu = typeof column.definition.headerMenu == "function" ? column.definition.headerMenu(column.getComponent(), e) : column.definition.headerMenu;
+                               e.stopPropagation();
+                               e.preventDefault();
+
+                               _this71.loadMenu(e, column, menu);
+                       });
+
+                       column.titleElement.insertBefore(headerMenuEl, column.titleElement.firstChild);
+               }
+       };
+
+       Menu.prototype.LoadMenuEvent = function (component, menu, e) {
+               menu = typeof menu == "function" ? menu(component.getComponent(), e) : menu;
+
+               // if(component instanceof Cell){
+               //      e.stopImmediatePropagation();
+               // }
+
+               this.loadMenu(e, component, menu);
+       };
+
+       Menu.prototype.tapHold = function (component, menu) {
+               var _this72 = this;
+
+               var element = component.getElement(),
+                   tapHold = null,
+                   loaded = false;
+
+               element.addEventListener("touchstart", function (e) {
+                       clearTimeout(tapHold);
+                       loaded = false;
+
+                       tapHold = setTimeout(function () {
+                               clearTimeout(tapHold);
+                               tapHold = null;
+                               loaded = true;
+
+                               _this72.LoadMenuEvent(component, menu, e);
+                       }, 1000);
+               }, { passive: true });
+
+               element.addEventListener("touchend", function (e) {
+                       clearTimeout(tapHold);
+                       tapHold = null;
+
+                       if (loaded) {
+                               e.preventDefault();
+                       }
+               });
+       };
+
+       Menu.prototype.initializeCell = function (cell) {
+               if (cell.column.definition.contextMenu) {
+                       cell.getElement().addEventListener("contextmenu", this.LoadMenuEvent.bind(this, cell, cell.column.definition.contextMenu));
+                       this.tapHold(cell, cell.column.definition.contextMenu);
+               }
+
+               if (cell.column.definition.clickMenu) {
+                       cell.getElement().addEventListener("click", this.LoadMenuEvent.bind(this, cell, cell.column.definition.clickMenu));
+               }
+       };
+
+       Menu.prototype.initializeRow = function (row) {
+               if (this.table.options.rowContextMenu) {
+                       row.getElement().addEventListener("contextmenu", this.LoadMenuEvent.bind(this, row, this.table.options.rowContextMenu));
+                       this.tapHold(row, this.table.options.rowContextMenu);
+               }
+
+               if (this.table.options.rowClickMenu) {
+                       row.getElement().addEventListener("click", this.LoadMenuEvent.bind(this, row, this.table.options.rowClickMenu));
+               }
+       };
+
+       Menu.prototype.initializeGroup = function (group) {
+               if (this.table.options.groupContextMenu) {
+                       group.getElement().addEventListener("contextmenu", this.LoadMenuEvent.bind(this, group, this.table.options.groupContextMenu));
+                       this.tapHold(group, this.table.options.groupContextMenu);
+               }
+
+               if (this.table.options.groupClickMenu) {
+                       group.getElement().addEventListener("click", this.LoadMenuEvent.bind(this, group, this.table.options.groupClickMenu));
+               }
+       };
+
+       Menu.prototype.loadMenu = function (e, component, menu) {
+               var _this73 = this;
+
+               var docHeight = Math.max(document.body.offsetHeight, window.innerHeight),
+                   touch = !(e instanceof MouseEvent);
+
+               if (!touch) {
+                       e.preventDefault();
+               }
+
+               //abort if no menu set
+               if (!menu || !menu.length) {
+                       return;
+               }
+
+               if (this.nestedMenuBlock) {
+                       //abort if child menu already open
+                       if (this.isOpen()) {
+                               return;
+                       }
+               } else {
+                       this.nestedMenuBlock = setTimeout(function () {
+                               _this73.nestedMenuBlock = false;
+                       }, 100);
+               }
+
+               this.hideMenu();
+
+               this.menuEl = document.createElement("div");
+               this.menuEl.classList.add("tabulator-menu");
+
+               menu.forEach(function (item) {
+                       var itemEl = document.createElement("div");
+                       var label = item.label;
+                       var disabled = item.disabled;
+
+                       if (item.separator) {
+                               itemEl.classList.add("tabulator-menu-separator");
+                       } else {
+                               itemEl.classList.add("tabulator-menu-item");
+
+                               if (typeof label == "function") {
+                                       label = label(component.getComponent());
+                               }
+
+                               if (label instanceof Node) {
+                                       itemEl.appendChild(label);
+                               } else {
+                                       itemEl.innerHTML = label;
+                               }
+
+                               if (typeof disabled == "function") {
+                                       disabled = disabled(component.getComponent());
+                               }
+
+                               if (disabled) {
+                                       itemEl.classList.add("tabulator-menu-item-disabled");
+                                       itemEl.addEventListener("click", function (e) {
+                                               e.stopPropagation();
+                                       });
+                               } else {
+                                       itemEl.addEventListener("click", function (e) {
+                                               _this73.hideMenu();
+                                               item.action(e, component.getComponent());
+                                       });
+                               }
+                       }
+
+                       _this73.menuEl.appendChild(itemEl);
+               });
+
+               this.menuEl.style.top = (touch ? e.touches[0].pageY : e.pageY) + "px";
+               this.menuEl.style.left = (touch ? e.touches[0].pageX : e.pageX) + "px";
+
+               setTimeout(function () {
+                       _this73.table.rowManager.element.addEventListener("scroll", _this73.blurEvent);
+                       document.body.addEventListener("click", _this73.blurEvent);
+                       document.body.addEventListener("contextmenu", _this73.blurEvent);
+                       document.body.addEventListener("keydown", _this73.escEvent);
+               }, 100);
+
+               document.body.appendChild(this.menuEl);
+
+               //move menu to start on right edge if it is too close to the edge of the screen
+               if (e.pageX + this.menuEl.offsetWidth >= document.body.offsetWidth) {
+                       this.menuEl.style.left = "";
+                       this.menuEl.style.right = document.body.offsetWidth - e.pageX + "px";
+               }
+
+               //move menu to start on bottom edge if it is too close to the edge of the screen
+               if (e.pageY + this.menuEl.offsetHeight >= docHeight) {
+                       this.menuEl.style.top = "";
+                       this.menuEl.style.bottom = docHeight - e.pageY + "px";
+               }
+       };
+
+       Menu.prototype.isOpen = function () {
+               return !!this.menuEl.parentNode;
+       };
+
+       Menu.prototype.escMenu = function (e) {
+               if (e.keyCode == 27) {
+                       this.hideMenu();
+               }
+       };
+
+       Menu.prototype.hideMenu = function () {
+               if (this.menuEl.parentNode) {
+                       this.menuEl.parentNode.removeChild(this.menuEl);
+               }
+
+               if (this.escEvent) {
+                       document.body.removeEventListener("keydown", this.escEvent);
+               }
+
+               if (this.blurEvent) {
+                       document.body.removeEventListener("click", this.blurEvent);
+                       document.body.removeEventListener("contextmenu", this.blurEvent);
+                       this.table.rowManager.element.removeEventListener("scroll", this.blurEvent);
+               }
+       };
+
+       //default accessors
+       Menu.prototype.menus = {};
+
+       Tabulator.prototype.registerModule("menu", Menu);
+       var MoveColumns = function MoveColumns(table) {
+               this.table = table; //hold Tabulator object
+               this.placeholderElement = this.createPlaceholderElement();
+               this.hoverElement = false; //floating column header element
+               this.checkTimeout = false; //click check timeout holder
+               this.checkPeriod = 250; //period to wait on mousedown to consider this a move and not a click
+               this.moving = false; //currently moving column
+               this.toCol = false; //destination column
+               this.toColAfter = false; //position of moving column relative to the desitnation column
+               this.startX = 0; //starting position within header element
+               this.autoScrollMargin = 40; //auto scroll on edge when within margin
+               this.autoScrollStep = 5; //auto scroll distance in pixels
+               this.autoScrollTimeout = false; //auto scroll timeout
+               this.touchMove = false;
+
+               this.moveHover = this.moveHover.bind(this);
+               this.endMove = this.endMove.bind(this);
+       };
+
+       MoveColumns.prototype.createPlaceholderElement = function () {
+               var el = document.createElement("div");
+
+               el.classList.add("tabulator-col");
+               el.classList.add("tabulator-col-placeholder");
+
+               return el;
+       };
+
+       MoveColumns.prototype.initializeColumn = function (column) {
+               var self = this,
+                   config = {},
+                   colEl;
+
+               if (!column.modules.frozen) {
+
+                       colEl = column.getElement();
+
+                       config.mousemove = function (e) {
+                               if (column.parent === self.moving.parent) {
+                                       if ((self.touchMove ? e.touches[0].pageX : e.pageX) - Tabulator.prototype.helpers.elOffset(colEl).left + self.table.columnManager.element.scrollLeft > column.getWidth() / 2) {
+                                               if (self.toCol !== column || !self.toColAfter) {
+                                                       colEl.parentNode.insertBefore(self.placeholderElement, colEl.nextSibling);
+                                                       self.moveColumn(column, true);
+                                               }
+                                       } else {
+                                               if (self.toCol !== column || self.toColAfter) {
+                                                       colEl.parentNode.insertBefore(self.placeholderElement, colEl);
+                                                       self.moveColumn(column, false);
+                                               }
+                                       }
+                               }
+                       }.bind(self);
+
+                       colEl.addEventListener("mousedown", function (e) {
+                               self.touchMove = false;
+                               if (e.which === 1) {
+                                       self.checkTimeout = setTimeout(function () {
+                                               self.startMove(e, column);
+                                       }, self.checkPeriod);
+                               }
+                       });
+
+                       colEl.addEventListener("mouseup", function (e) {
+                               if (e.which === 1) {
+                                       if (self.checkTimeout) {
+                                               clearTimeout(self.checkTimeout);
+                                       }
+                               }
+                       });
+
+                       self.bindTouchEvents(column);
+               }
+
+               column.modules.moveColumn = config;
+       };
+
+       MoveColumns.prototype.bindTouchEvents = function (column) {
+               var self = this,
+                   colEl = column.getElement(),
+                   startXMove = false,
+                   //shifting center position of the cell
+               dir = false,
+                   currentCol,
+                   nextCol,
+                   prevCol,
+                   nextColWidth,
+                   prevColWidth,
+                   nextColWidthLast,
+                   prevColWidthLast;
+
+               colEl.addEventListener("touchstart", function (e) {
+                       self.checkTimeout = setTimeout(function () {
+                               self.touchMove = true;
+                               currentCol = column;
+                               nextCol = column.nextColumn();
+                               nextColWidth = nextCol ? nextCol.getWidth() / 2 : 0;
+                               prevCol = column.prevColumn();
+                               prevColWidth = prevCol ? prevCol.getWidth() / 2 : 0;
+                               nextColWidthLast = 0;
+                               prevColWidthLast = 0;
+                               startXMove = false;
+
+                               self.startMove(e, column);
+                       }, self.checkPeriod);
+               }, { passive: true });
+
+               colEl.addEventListener("touchmove", function (e) {
+                       var halfCol, diff, moveToCol;
+
+                       if (self.moving) {
+                               self.moveHover(e);
+
+                               if (!startXMove) {
+                                       startXMove = e.touches[0].pageX;
+                               }
+
+                               diff = e.touches[0].pageX - startXMove;
+
+                               if (diff > 0) {
+                                       if (nextCol && diff - nextColWidthLast > nextColWidth) {
+                                               moveToCol = nextCol;
+
+                                               if (moveToCol !== column) {
+                                                       startXMove = e.touches[0].pageX;
+                                                       moveToCol.getElement().parentNode.insertBefore(self.placeholderElement, moveToCol.getElement().nextSibling);
+                                                       self.moveColumn(moveToCol, true);
+                                               }
+                                       }
+                               } else {
+                                       if (prevCol && -diff - prevColWidthLast > prevColWidth) {
+                                               moveToCol = prevCol;
+
+                                               if (moveToCol !== column) {
+                                                       startXMove = e.touches[0].pageX;
+                                                       moveToCol.getElement().parentNode.insertBefore(self.placeholderElement, moveToCol.getElement());
+                                                       self.moveColumn(moveToCol, false);
+                                               }
+                                       }
+                               }
+
+                               if (moveToCol) {
+                                       currentCol = moveToCol;
+                                       nextCol = moveToCol.nextColumn();
+                                       nextColWidthLast = nextColWidth;
+                                       nextColWidth = nextCol ? nextCol.getWidth() / 2 : 0;
+                                       prevCol = moveToCol.prevColumn();
+                                       prevColWidthLast = prevColWidth;
+                                       prevColWidth = prevCol ? prevCol.getWidth() / 2 : 0;
+                               }
+                       }
+               }, { passive: true });
+
+               colEl.addEventListener("touchend", function (e) {
+                       if (self.checkTimeout) {
+                               clearTimeout(self.checkTimeout);
+                       }
+                       if (self.moving) {
+                               self.endMove(e);
+                       }
+               });
+       };
+
+       MoveColumns.prototype.startMove = function (e, column) {
+               var element = column.getElement();
+
+               this.moving = column;
+               this.startX = (this.touchMove ? e.touches[0].pageX : e.pageX) - Tabulator.prototype.helpers.elOffset(element).left;
+
+               this.table.element.classList.add("tabulator-block-select");
+
+               //create placeholder
+               this.placeholderElement.style.width = column.getWidth() + "px";
+               this.placeholderElement.style.height = column.getHeight() + "px";
+
+               element.parentNode.insertBefore(this.placeholderElement, element);
+               element.parentNode.removeChild(element);
+
+               //create hover element
+               this.hoverElement = element.cloneNode(true);
+               this.hoverElement.classList.add("tabulator-moving");
+
+               this.table.columnManager.getElement().appendChild(this.hoverElement);
+
+               this.hoverElement.style.left = "0";
+               this.hoverElement.style.bottom = "0";
+
+               if (!this.touchMove) {
+                       this._bindMouseMove();
+
+                       document.body.addEventListener("mousemove", this.moveHover);
+                       document.body.addEventListener("mouseup", this.endMove);
+               }
+
+               this.moveHover(e);
+       };
+
+       MoveColumns.prototype._bindMouseMove = function () {
+               this.table.columnManager.columnsByIndex.forEach(function (column) {
+                       if (column.modules.moveColumn.mousemove) {
+                               column.getElement().addEventListener("mousemove", column.modules.moveColumn.mousemove);
+                       }
+               });
+       };
+
+       MoveColumns.prototype._unbindMouseMove = function () {
+               this.table.columnManager.columnsByIndex.forEach(function (column) {
+                       if (column.modules.moveColumn.mousemove) {
+                               column.getElement().removeEventListener("mousemove", column.modules.moveColumn.mousemove);
+                       }
+               });
+       };
+
+       MoveColumns.prototype.moveColumn = function (column, after) {
+               var movingCells = this.moving.getCells();
+
+               this.toCol = column;
+               this.toColAfter = after;
+
+               if (after) {
+                       column.getCells().forEach(function (cell, i) {
+                               var cellEl = cell.getElement();
+                               cellEl.parentNode.insertBefore(movingCells[i].getElement(), cellEl.nextSibling);
+                       });
+               } else {
+                       column.getCells().forEach(function (cell, i) {
+                               var cellEl = cell.getElement();
+                               cellEl.parentNode.insertBefore(movingCells[i].getElement(), cellEl);
+                       });
+               }
+       };
+
+       MoveColumns.prototype.endMove = function (e) {
+               if (e.which === 1 || this.touchMove) {
+                       this._unbindMouseMove();
+
+                       this.placeholderElement.parentNode.insertBefore(this.moving.getElement(), this.placeholderElement.nextSibling);
+                       this.placeholderElement.parentNode.removeChild(this.placeholderElement);
+                       this.hoverElement.parentNode.removeChild(this.hoverElement);
+
+                       this.table.element.classList.remove("tabulator-block-select");
+
+                       if (this.toCol) {
+                               this.table.columnManager.moveColumnActual(this.moving, this.toCol, this.toColAfter);
+                       }
+
+                       this.moving = false;
+                       this.toCol = false;
+                       this.toColAfter = false;
+
+                       if (!this.touchMove) {
+                               document.body.removeEventListener("mousemove", this.moveHover);
+                               document.body.removeEventListener("mouseup", this.endMove);
+                       }
+               }
+       };
+
+       MoveColumns.prototype.moveHover = function (e) {
+               var self = this,
+                   columnHolder = self.table.columnManager.getElement(),
+                   scrollLeft = columnHolder.scrollLeft,
+                   xPos = (self.touchMove ? e.touches[0].pageX : e.pageX) - Tabulator.prototype.helpers.elOffset(columnHolder).left + scrollLeft,
+                   scrollPos;
+
+               self.hoverElement.style.left = xPos - self.startX + "px";
+
+               if (xPos - scrollLeft < self.autoScrollMargin) {
+                       if (!self.autoScrollTimeout) {
+                               self.autoScrollTimeout = setTimeout(function () {
+                                       scrollPos = Math.max(0, scrollLeft - 5);
+                                       self.table.rowManager.getElement().scrollLeft = scrollPos;
+                                       self.autoScrollTimeout = false;
+                               }, 1);
+                       }
+               }
+
+               if (scrollLeft + columnHolder.clientWidth - xPos < self.autoScrollMargin) {
+                       if (!self.autoScrollTimeout) {
+                               self.autoScrollTimeout = setTimeout(function () {
+                                       scrollPos = Math.min(columnHolder.clientWidth, scrollLeft + 5);
+                                       self.table.rowManager.getElement().scrollLeft = scrollPos;
+                                       self.autoScrollTimeout = false;
+                               }, 1);
+                       }
+               }
+       };
+
+       Tabulator.prototype.registerModule("moveColumn", MoveColumns);
+
+       var MoveRows = function MoveRows(table) {
+
+               this.table = table; //hold Tabulator object
+               this.placeholderElement = this.createPlaceholderElement();
+               this.hoverElement = false; //floating row header element
+               this.checkTimeout = false; //click check timeout holder
+               this.checkPeriod = 150; //period to wait on mousedown to consider this a move and not a click
+               this.moving = false; //currently moving row
+               this.toRow = false; //destination row
+               this.toRowAfter = false; //position of moving row relative to the desitnation row
+               this.hasHandle = false; //row has handle instead of fully movable row
+               this.startY = 0; //starting Y position within header element
+               this.startX = 0; //starting X position within header element
+
+               this.moveHover = this.moveHover.bind(this);
+               this.endMove = this.endMove.bind(this);
+               this.tableRowDropEvent = false;
+
+               this.touchMove = false;
+
+               this.connection = false;
+               this.connectionSelectorsTables = false;
+               this.connectionSelectorsElements = false;
+               this.connectionElements = [];
+               this.connections = [];
+
+               this.connectedTable = false;
+               this.connectedRow = false;
+       };
+
+       MoveRows.prototype.createPlaceholderElement = function () {
+               var el = document.createElement("div");
+
+               el.classList.add("tabulator-row");
+               el.classList.add("tabulator-row-placeholder");
+
+               return el;
+       };
+
+       MoveRows.prototype.initialize = function (handle) {
+               this.connectionSelectorsTables = this.table.options.movableRowsConnectedTables;
+               this.connectionSelectorsElements = this.table.options.movableRowsConnectedElements;
+
+               this.connection = this.connectionSelectorsTables || this.connectionSelectorsElements;
+       };
+
+       MoveRows.prototype.setHandle = function (handle) {
+               this.hasHandle = handle;
+       };
+
+       MoveRows.prototype.initializeGroupHeader = function (group) {
+               var self = this,
+                   config = {},
+                   rowEl;
+
+               //inter table drag drop
+               config.mouseup = function (e) {
+                       self.tableRowDrop(e, row);
+               }.bind(self);
+
+               //same table drag drop
+               config.mousemove = function (e) {
+                       if (e.pageY - Tabulator.prototype.helpers.elOffset(group.element).top + self.table.rowManager.element.scrollTop > group.getHeight() / 2) {
+                               if (self.toRow !== group || !self.toRowAfter) {
+                                       var rowEl = group.getElement();
+                                       rowEl.parentNode.insertBefore(self.placeholderElement, rowEl.nextSibling);
+                                       self.moveRow(group, true);
+                               }
+                       } else {
+                               if (self.toRow !== group || self.toRowAfter) {
+                                       var rowEl = group.getElement();
+                                       if (rowEl.previousSibling) {
+                                               rowEl.parentNode.insertBefore(self.placeholderElement, rowEl);
+                                               self.moveRow(group, false);
+                                       }
+                               }
+                       }
+               }.bind(self);
+
+               group.modules.moveRow = config;
+       };
+
+       MoveRows.prototype.initializeRow = function (row) {
+               var self = this,
+                   config = {},
+                   rowEl;
+
+               //inter table drag drop
+               config.mouseup = function (e) {
+                       self.tableRowDrop(e, row);
+               }.bind(self);
+
+               //same table drag drop
+               config.mousemove = function (e) {
+                       if (e.pageY - Tabulator.prototype.helpers.elOffset(row.element).top + self.table.rowManager.element.scrollTop > row.getHeight() / 2) {
+                               if (self.toRow !== row || !self.toRowAfter) {
+                                       var rowEl = row.getElement();
+                                       rowEl.parentNode.insertBefore(self.placeholderElement, rowEl.nextSibling);
+                                       self.moveRow(row, true);
+                               }
+                       } else {
+                               if (self.toRow !== row || self.toRowAfter) {
+                                       var rowEl = row.getElement();
+                                       rowEl.parentNode.insertBefore(self.placeholderElement, rowEl);
+                                       self.moveRow(row, false);
+                               }
+                       }
+               }.bind(self);
+
+               if (!this.hasHandle) {
+
+                       rowEl = row.getElement();
+
+                       rowEl.addEventListener("mousedown", function (e) {
+                               if (e.which === 1) {
+                                       self.checkTimeout = setTimeout(function () {
+                                               self.startMove(e, row);
+                                       }, self.checkPeriod);
+                               }
+                       });
+
+                       rowEl.addEventListener("mouseup", function (e) {
+                               if (e.which === 1) {
+                                       if (self.checkTimeout) {
+                                               clearTimeout(self.checkTimeout);
+                                       }
+                               }
+                       });
+
+                       this.bindTouchEvents(row, row.getElement());
+               }
+
+               row.modules.moveRow = config;
+       };
+
+       MoveRows.prototype.initializeCell = function (cell) {
+               var self = this,
+                   cellEl = cell.getElement();
+
+               cellEl.addEventListener("mousedown", function (e) {
+                       if (e.which === 1) {
+                               self.checkTimeout = setTimeout(function () {
+                                       self.startMove(e, cell.row);
+                               }, self.checkPeriod);
+                       }
+               });
+
+               cellEl.addEventListener("mouseup", function (e) {
+                       if (e.which === 1) {
+                               if (self.checkTimeout) {
+                                       clearTimeout(self.checkTimeout);
+                               }
+                       }
+               });
+
+               this.bindTouchEvents(cell.row, cell.getElement());
+       };
+
+       MoveRows.prototype.bindTouchEvents = function (row, element) {
+               var self = this,
+                   startYMove = false,
+                   //shifting center position of the cell
+               dir = false,
+                   currentRow,
+                   nextRow,
+                   prevRow,
+                   nextRowHeight,
+                   prevRowHeight,
+                   nextRowHeightLast,
+                   prevRowHeightLast;
+
+               element.addEventListener("touchstart", function (e) {
+                       self.checkTimeout = setTimeout(function () {
+                               self.touchMove = true;
+                               currentRow = row;
+                               nextRow = row.nextRow();
+                               nextRowHeight = nextRow ? nextRow.getHeight() / 2 : 0;
+                               prevRow = row.prevRow();
+                               prevRowHeight = prevRow ? prevRow.getHeight() / 2 : 0;
+                               nextRowHeightLast = 0;
+                               prevRowHeightLast = 0;
+                               startYMove = false;
+
+                               self.startMove(e, row);
+                       }, self.checkPeriod);
+               }, { passive: true });
+               this.moving, this.toRow, this.toRowAfter;
+               element.addEventListener("touchmove", function (e) {
+
+                       var halfCol, diff, moveToRow;
+
+                       if (self.moving) {
+                               e.preventDefault();
+
+                               self.moveHover(e);
+
+                               if (!startYMove) {
+                                       startYMove = e.touches[0].pageY;
+                               }
+
+                               diff = e.touches[0].pageY - startYMove;
+
+                               if (diff > 0) {
+                                       if (nextRow && diff - nextRowHeightLast > nextRowHeight) {
+                                               moveToRow = nextRow;
+
+                                               if (moveToRow !== row) {
+                                                       startYMove = e.touches[0].pageY;
+                                                       moveToRow.getElement().parentNode.insertBefore(self.placeholderElement, moveToRow.getElement().nextSibling);
+                                                       self.moveRow(moveToRow, true);
+                                               }
+                                       }
+                               } else {
+                                       if (prevRow && -diff - prevRowHeightLast > prevRowHeight) {
+                                               moveToRow = prevRow;
+
+                                               if (moveToRow !== row) {
+                                                       startYMove = e.touches[0].pageY;
+                                                       moveToRow.getElement().parentNode.insertBefore(self.placeholderElement, moveToRow.getElement());
+                                                       self.moveRow(moveToRow, false);
+                                               }
+                                       }
+                               }
+
+                               if (moveToRow) {
+                                       currentRow = moveToRow;
+                                       nextRow = moveToRow.nextRow();
+                                       nextRowHeightLast = nextRowHeight;
+                                       nextRowHeight = nextRow ? nextRow.getHeight() / 2 : 0;
+                                       prevRow = moveToRow.prevRow();
+                                       prevRowHeightLast = prevRowHeight;
+                                       prevRowHeight = prevRow ? prevRow.getHeight() / 2 : 0;
+                               }
+                       }
+               });
+
+               element.addEventListener("touchend", function (e) {
+                       if (self.checkTimeout) {
+                               clearTimeout(self.checkTimeout);
+                       }
+                       if (self.moving) {
+                               self.endMove(e);
+                               self.touchMove = false;
+                       }
+               });
+       };
+
+       MoveRows.prototype._bindMouseMove = function () {
+               var self = this;
+
+               self.table.rowManager.getDisplayRows().forEach(function (row) {
+                       if ((row.type === "row" || row.type === "group") && row.modules.moveRow.mousemove) {
+                               row.getElement().addEventListener("mousemove", row.modules.moveRow.mousemove);
+                       }
+               });
+       };
+
+       MoveRows.prototype._unbindMouseMove = function () {
+               var self = this;
+
+               self.table.rowManager.getDisplayRows().forEach(function (row) {
+                       if ((row.type === "row" || row.type === "group") && row.modules.moveRow.mousemove) {
+                               row.getElement().removeEventListener("mousemove", row.modules.moveRow.mousemove);
+                       }
+               });
+       };
+
+       MoveRows.prototype.startMove = function (e, row) {
+               var element = row.getElement();
+
+               this.setStartPosition(e, row);
+
+               this.moving = row;
+
+               this.table.element.classList.add("tabulator-block-select");
+
+               //create placeholder
+               this.placeholderElement.style.width = row.getWidth() + "px";
+               this.placeholderElement.style.height = row.getHeight() + "px";
+
+               if (!this.connection) {
+                       element.parentNode.insertBefore(this.placeholderElement, element);
+                       element.parentNode.removeChild(element);
+               } else {
+                       this.table.element.classList.add("tabulator-movingrow-sending");
+                       this.connectToTables(row);
+               }
+
+               //create hover element
+               this.hoverElement = element.cloneNode(true);
+               this.hoverElement.classList.add("tabulator-moving");
+
+               if (this.connection) {
+                       document.body.appendChild(this.hoverElement);
+                       this.hoverElement.style.left = "0";
+                       this.hoverElement.style.top = "0";
+                       this.hoverElement.style.width = this.table.element.clientWidth + "px";
+                       this.hoverElement.style.whiteSpace = "nowrap";
+                       this.hoverElement.style.overflow = "hidden";
+                       this.hoverElement.style.pointerEvents = "none";
+               } else {
+                       this.table.rowManager.getTableElement().appendChild(this.hoverElement);
+
+                       this.hoverElement.style.left = "0";
+                       this.hoverElement.style.top = "0";
+
+                       this._bindMouseMove();
+               }
+
+               document.body.addEventListener("mousemove", this.moveHover);
+               document.body.addEventListener("mouseup", this.endMove);
+
+               this.moveHover(e);
+       };
+
+       MoveRows.prototype.setStartPosition = function (e, row) {
+               var pageX = this.touchMove ? e.touches[0].pageX : e.pageX,
+                   pageY = this.touchMove ? e.touches[0].pageY : e.pageY,
+                   element,
+                   position;
+
+               element = row.getElement();
+               if (this.connection) {
+                       position = element.getBoundingClientRect();
+
+                       this.startX = position.left - pageX + window.pageXOffset;
+                       this.startY = position.top - pageY + window.pageYOffset;
+               } else {
+                       this.startY = pageY - element.getBoundingClientRect().top;
+               }
+       };
+
+       MoveRows.prototype.endMove = function (e) {
+               if (!e || e.which === 1 || this.touchMove) {
+                       this._unbindMouseMove();
+
+                       if (!this.connection) {
+                               this.placeholderElement.parentNode.insertBefore(this.moving.getElement(), this.placeholderElement.nextSibling);
+                               this.placeholderElement.parentNode.removeChild(this.placeholderElement);
+                       }
+
+                       this.hoverElement.parentNode.removeChild(this.hoverElement);
+
+                       this.table.element.classList.remove("tabulator-block-select");
+
+                       if (this.toRow) {
+                               this.table.rowManager.moveRow(this.moving, this.toRow, this.toRowAfter);
+                       }
+
+                       this.moving = false;
+                       this.toRow = false;
+                       this.toRowAfter = false;
+
+                       document.body.removeEventListener("mousemove", this.moveHover);
+                       document.body.removeEventListener("mouseup", this.endMove);
+
+                       if (this.connection) {
+                               this.table.element.classList.remove("tabulator-movingrow-sending");
+                               this.disconnectFromTables();
+                       }
+               }
+       };
+
+       MoveRows.prototype.moveRow = function (row, after) {
+               this.toRow = row;
+               this.toRowAfter = after;
+       };
+
+       MoveRows.prototype.moveHover = function (e) {
+               if (this.connection) {
+                       this.moveHoverConnections.call(this, e);
+               } else {
+                       this.moveHoverTable.call(this, e);
+               }
+       };
+
+       MoveRows.prototype.moveHoverTable = function (e) {
+               var rowHolder = this.table.rowManager.getElement(),
+                   scrollTop = rowHolder.scrollTop,
+                   yPos = (this.touchMove ? e.touches[0].pageY : e.pageY) - rowHolder.getBoundingClientRect().top + scrollTop,
+                   scrollPos;
+
+               this.hoverElement.style.top = yPos - this.startY + "px";
+       };
+
+       MoveRows.prototype.moveHoverConnections = function (e) {
+               this.hoverElement.style.left = this.startX + (this.touchMove ? e.touches[0].pageX : e.pageX) + "px";
+               this.hoverElement.style.top = this.startY + (this.touchMove ? e.touches[0].pageY : e.pageY) + "px";
+       };
+
+       MoveRows.prototype.elementRowDrop = function (e, element, row) {
+               if (this.table.options.movableRowsElementDrop) {
+                       this.table.options.movableRowsElementDrop(e, element, row ? row.getComponent() : false);
+               }
+       };
+
+       //establish connection with other tables
+       MoveRows.prototype.connectToTables = function (row) {
+               var _this74 = this;
+
+               var connectionTables;
+
+               if (this.connectionSelectorsTables) {
+                       connectionTables = this.table.modules.comms.getConnections(this.connectionSelectorsTables);
+
+                       this.table.options.movableRowsSendingStart.call(this.table, connectionTables);
+
+                       this.table.modules.comms.send(this.connectionSelectorsTables, "moveRow", "connect", {
+                               row: row
+                       });
+               }
+
+               if (this.connectionSelectorsElements) {
+
+                       this.connectionElements = [];
+
+                       if (!Array.isArray(this.connectionSelectorsElements)) {
+                               this.connectionSelectorsElements = [this.connectionSelectorsElements];
+                       }
+
+                       this.connectionSelectorsElements.forEach(function (query) {
+                               if (typeof query === "string") {
+                                       _this74.connectionElements = _this74.connectionElements.concat(Array.prototype.slice.call(document.querySelectorAll(query)));
+                               } else {
+                                       _this74.connectionElements.push(query);
+                               }
+                       });
+
+                       this.connectionElements.forEach(function (element) {
+                               var dropEvent = function dropEvent(e) {
+                                       _this74.elementRowDrop(e, element, _this74.moving);
+                               };
+
+                               element.addEventListener("mouseup", dropEvent);
+                               element.tabulatorElementDropEvent = dropEvent;
+
+                               element.classList.add("tabulator-movingrow-receiving");
+                       });
+               }
+       };
+
+       //disconnect from other tables
+       MoveRows.prototype.disconnectFromTables = function () {
+               var connectionTables;
+
+               if (this.connectionSelectorsTables) {
+                       connectionTables = this.table.modules.comms.getConnections(this.connectionSelectorsTables);
+
+                       this.table.options.movableRowsSendingStop.call(this.table, connectionTables);
+
+                       this.table.modules.comms.send(this.connectionSelectorsTables, "moveRow", "disconnect");
+               }
+
+               this.connectionElements.forEach(function (element) {
+                       element.classList.remove("tabulator-movingrow-receiving");
+                       element.removeEventListener("mouseup", element.tabulatorElementDropEvent);
+                       delete element.tabulatorElementDropEvent;
+               });
+       };
+
+       //accept incomming connection
+       MoveRows.prototype.connect = function (table, row) {
+               var self = this;
+               if (!this.connectedTable) {
+                       this.connectedTable = table;
+                       this.connectedRow = row;
+
+                       this.table.element.classList.add("tabulator-movingrow-receiving");
+
+                       self.table.rowManager.getDisplayRows().forEach(function (row) {
+                               if (row.type === "row" && row.modules.moveRow && row.modules.moveRow.mouseup) {
+                                       row.getElement().addEventListener("mouseup", row.modules.moveRow.mouseup);
+                               }
+                       });
+
+                       self.tableRowDropEvent = self.tableRowDrop.bind(self);
+
+                       self.table.element.addEventListener("mouseup", self.tableRowDropEvent);
+
+                       this.table.options.movableRowsReceivingStart.call(this.table, row, table);
+
+                       return true;
+               } else {
+                       console.warn("Move Row Error - Table cannot accept connection, already connected to table:", this.connectedTable);
+                       return false;
+               }
+       };
+
+       //close incomming connection
+       MoveRows.prototype.disconnect = function (table) {
+               var self = this;
+               if (table === this.connectedTable) {
+                       this.connectedTable = false;
+                       this.connectedRow = false;
+
+                       this.table.element.classList.remove("tabulator-movingrow-receiving");
+
+                       self.table.rowManager.getDisplayRows().forEach(function (row) {
+                               if (row.type === "row" && row.modules.moveRow && row.modules.moveRow.mouseup) {
+                                       row.getElement().removeEventListener("mouseup", row.modules.moveRow.mouseup);
+                               }
+                       });
+
+                       self.table.element.removeEventListener("mouseup", self.tableRowDropEvent);
+
+                       this.table.options.movableRowsReceivingStop.call(this.table, table);
+               } else {
+                       console.warn("Move Row Error - trying to disconnect from non connected table");
+               }
+       };
+
+       MoveRows.prototype.dropComplete = function (table, row, success) {
+               var sender = false;
+
+               if (success) {
+
+                       switch (_typeof(this.table.options.movableRowsSender)) {
+                               case "string":
+                                       sender = this.senders[this.table.options.movableRowsSender];
+                                       break;
+
+                               case "function":
+                                       sender = this.table.options.movableRowsSender;
+                                       break;
+                       }
+
+                       if (sender) {
+                               sender.call(this, this.moving.getComponent(), row ? row.getComponent() : undefined, table);
+                       } else {
+                               if (this.table.options.movableRowsSender) {
+                                       console.warn("Mover Row Error - no matching sender found:", this.table.options.movableRowsSender);
+                               }
+                       }
+
+                       this.table.options.movableRowsSent.call(this.table, this.moving.getComponent(), row ? row.getComponent() : undefined, table);
+               } else {
+                       this.table.options.movableRowsSentFailed.call(this.table, this.moving.getComponent(), row ? row.getComponent() : undefined, table);
+               }
+
+               this.endMove();
+       };
+
+       MoveRows.prototype.tableRowDrop = function (e, row) {
+               var receiver = false,
+                   success = false;
+
+               console.trace("drop");
+
+               e.stopImmediatePropagation();
+
+               switch (_typeof(this.table.options.movableRowsReceiver)) {
+                       case "string":
+                               receiver = this.receivers[this.table.options.movableRowsReceiver];
+                               break;
+
+                       case "function":
+                               receiver = this.table.options.movableRowsReceiver;
+                               break;
+               }
+
+               if (receiver) {
+                       success = receiver.call(this, this.connectedRow.getComponent(), row ? row.getComponent() : undefined, this.connectedTable);
+               } else {
+                       console.warn("Mover Row Error - no matching receiver found:", this.table.options.movableRowsReceiver);
+               }
+
+               if (success) {
+                       this.table.options.movableRowsReceived.call(this.table, this.connectedRow.getComponent(), row ? row.getComponent() : undefined, this.connectedTable);
+               } else {
+                       this.table.options.movableRowsReceivedFailed.call(this.table, this.connectedRow.getComponent(), row ? row.getComponent() : undefined, this.connectedTable);
+               }
+
+               this.table.modules.comms.send(this.connectedTable, "moveRow", "dropcomplete", {
+                       row: row,
+                       success: success
+               });
+       };
+
+       MoveRows.prototype.receivers = {
+               insert: function insert(fromRow, toRow, fromTable) {
+                       this.table.addRow(fromRow.getData(), undefined, toRow);
+                       return true;
+               },
+
+               add: function add(fromRow, toRow, fromTable) {
+                       this.table.addRow(fromRow.getData());
+                       return true;
+               },
+
+               update: function update(fromRow, toRow, fromTable) {
+                       if (toRow) {
+                               toRow.update(fromRow.getData());
+                               return true;
+                       }
+
+                       return false;
+               },
+
+               replace: function replace(fromRow, toRow, fromTable) {
+                       if (toRow) {
+                               this.table.addRow(fromRow.getData(), undefined, toRow);
+                               toRow.delete();
+                               return true;
+                       }
+
+                       return false;
+               }
+       };
+
+       MoveRows.prototype.senders = {
+               delete: function _delete(fromRow, toRow, toTable) {
+                       fromRow.delete();
+               }
+       };
+
+       MoveRows.prototype.commsReceived = function (table, action, data) {
+               switch (action) {
+                       case "connect":
+                               return this.connect(table, data.row);
+                               break;
+
+                       case "disconnect":
+                               return this.disconnect(table);
+                               break;
+
+                       case "dropcomplete":
+                               return this.dropComplete(table, data.row, data.success);
+                               break;
+               }
+       };
+
+       Tabulator.prototype.registerModule("moveRow", MoveRows);
+       var Mutator = function Mutator(table) {
+               this.table = table; //hold Tabulator object
+               this.allowedTypes = ["", "data", "edit", "clipboard"]; //list of muatation types
+               this.enabled = true;
+       };
+
+       //initialize column mutator
+       Mutator.prototype.initializeColumn = function (column) {
+               var self = this,
+                   match = false,
+                   config = {};
+
+               this.allowedTypes.forEach(function (type) {
+                       var key = "mutator" + (type.charAt(0).toUpperCase() + type.slice(1)),
+                           mutator;
+
+                       if (column.definition[key]) {
+                               mutator = self.lookupMutator(column.definition[key]);
+
+                               if (mutator) {
+                                       match = true;
+
+                                       config[key] = {
+                                               mutator: mutator,
+                                               params: column.definition[key + "Params"] || {}
+                                       };
+                               }
+                       }
+               });
+
+               if (match) {
+                       column.modules.mutate = config;
+               }
+       };
+
+       Mutator.prototype.lookupMutator = function (value) {
+               var mutator = false;
+
+               //set column mutator
+               switch (typeof value === 'undefined' ? 'undefined' : _typeof(value)) {
+                       case "string":
+                               if (this.mutators[value]) {
+                                       mutator = this.mutators[value];
+                               } else {
+                                       console.warn("Mutator Error - No such mutator found, ignoring: ", value);
+                               }
+                               break;
+
+                       case "function":
+                               mutator = value;
+                               break;
+               }
+
+               return mutator;
+       };
+
+       //apply mutator to row
+       Mutator.prototype.transformRow = function (data, type, updatedData) {
+               var self = this,
+                   key = "mutator" + (type.charAt(0).toUpperCase() + type.slice(1)),
+                   value;
+
+               if (this.enabled) {
+
+                       self.table.columnManager.traverse(function (column) {
+                               var mutator, params, component;
+
+                               if (column.modules.mutate) {
+                                       mutator = column.modules.mutate[key] || column.modules.mutate.mutator || false;
+
+                                       if (mutator) {
+                                               value = column.getFieldValue(typeof updatedData !== "undefined" ? updatedData : data);
+
+                                               if (type == "data" || typeof value !== "undefined") {
+                                                       component = column.getComponent();
+                                                       params = typeof mutator.params === "function" ? mutator.params(value, data, type, component) : mutator.params;
+                                                       column.setFieldValue(data, mutator.mutator(value, data, type, params, component));
+                                               }
+                                       }
+                               }
+                       });
+               }
+
+               return data;
+       };
+
+       //apply mutator to new cell value
+       Mutator.prototype.transformCell = function (cell, value) {
+               var mutator = cell.column.modules.mutate.mutatorEdit || cell.column.modules.mutate.mutator || false,
+                   tempData = {};
+
+               if (mutator) {
+                       tempData = Object.assign(tempData, cell.row.getData());
+                       cell.column.setFieldValue(tempData, value);
+                       return mutator.mutator(value, tempData, "edit", mutator.params, cell.getComponent());
+               } else {
+                       return value;
+               }
+       };
+
+       Mutator.prototype.enable = function () {
+               this.enabled = true;
+       };
+
+       Mutator.prototype.disable = function () {
+               this.enabled = false;
+       };
+
+       //default mutators
+       Mutator.prototype.mutators = {};
+
+       Tabulator.prototype.registerModule("mutator", Mutator);
+       var Page = function Page(table) {
+
+               this.table = table; //hold Tabulator object
+
+               this.mode = "local";
+               this.progressiveLoad = false;
+
+               this.size = 0;
+               this.page = 1;
+               this.count = 5;
+               this.max = 1;
+
+               this.displayIndex = 0; //index in display pipeline
+
+               this.initialLoad = true;
+
+               this.pageSizes = [];
+
+               this.dataReceivedNames = {};
+               this.dataSentNames = {};
+
+               this.createElements();
+       };
+
+       Page.prototype.createElements = function () {
+
+               var button;
+
+               this.element = document.createElement("span");
+               this.element.classList.add("tabulator-paginator");
+
+               this.pagesElement = document.createElement("span");
+               this.pagesElement.classList.add("tabulator-pages");
+
+               button = document.createElement("button");
+               button.classList.add("tabulator-page");
+               button.setAttribute("type", "button");
+               button.setAttribute("role", "button");
+               button.setAttribute("aria-label", "");
+               button.setAttribute("title", "");
+
+               this.firstBut = button.cloneNode(true);
+               this.firstBut.setAttribute("data-page", "first");
+
+               this.prevBut = button.cloneNode(true);
+               this.prevBut.setAttribute("data-page", "prev");
+
+               this.nextBut = button.cloneNode(true);
+               this.nextBut.setAttribute("data-page", "next");
+
+               this.lastBut = button.cloneNode(true);
+               this.lastBut.setAttribute("data-page", "last");
+
+               if (this.table.options.paginationSizeSelector) {
+                       this.pageSizeSelect = document.createElement("select");
+                       this.pageSizeSelect.classList.add("tabulator-page-size");
+               }
+       };
+
+       Page.prototype.generatePageSizeSelectList = function () {
+               var _this75 = this;
+
+               var pageSizes = [];
+
+               if (this.pageSizeSelect) {
+
+                       if (Array.isArray(this.table.options.paginationSizeSelector)) {
+                               pageSizes = this.table.options.paginationSizeSelector;
+                               this.pageSizes = pageSizes;
+
+                               if (this.pageSizes.indexOf(this.size) == -1) {
+                                       pageSizes.unshift(this.size);
+                               }
+                       } else {
+
+                               if (this.pageSizes.indexOf(this.size) == -1) {
+                                       pageSizes = [];
+
+                                       for (var _i13 = 1; _i13 < 5; _i13++) {
+                                               pageSizes.push(this.size * _i13);
+                                       }
+
+                                       this.pageSizes = pageSizes;
+                               } else {
+                                       pageSizes = this.pageSizes;
+                               }
+                       }
+
+                       while (this.pageSizeSelect.firstChild) {
+                               this.pageSizeSelect.removeChild(this.pageSizeSelect.firstChild);
+                       }pageSizes.forEach(function (item) {
+                               var itemEl = document.createElement("option");
+                               itemEl.value = item;
+
+                               if (item === true) {
+                                       _this75.table.modules.localize.bind("pagination|all", function (value) {
+                                               itemEl.innerHTML = value;
+                                       });
+                               } else {
+                                       itemEl.innerHTML = item;
+                               }
+
+                               _this75.pageSizeSelect.appendChild(itemEl);
+                       });
+
+                       this.pageSizeSelect.value = this.size;
+               }
+       };
+
+       //setup pageination
+       Page.prototype.initialize = function (hidden) {
+               var self = this,
+                   pageSelectLabel,
+                   testElRow,
+                   testElCell;
+
+               //update param names
+               this.dataSentNames = Object.assign({}, this.paginationDataSentNames);
+               this.dataSentNames = Object.assign(this.dataSentNames, this.table.options.paginationDataSent);
+
+               this.dataReceivedNames = Object.assign({}, this.paginationDataReceivedNames);
+               this.dataReceivedNames = Object.assign(this.dataReceivedNames, this.table.options.paginationDataReceived);
+
+               //build pagination element
+
+               //bind localizations
+               self.table.modules.localize.bind("pagination|first", function (value) {
+                       self.firstBut.innerHTML = value;
+               });
+
+               self.table.modules.localize.bind("pagination|first_title", function (value) {
+                       self.firstBut.setAttribute("aria-label", value);
+                       self.firstBut.setAttribute("title", value);
+               });
+
+               self.table.modules.localize.bind("pagination|prev", function (value) {
+                       self.prevBut.innerHTML = value;
+               });
+
+               self.table.modules.localize.bind("pagination|prev_title", function (value) {
+                       self.prevBut.setAttribute("aria-label", value);
+                       self.prevBut.setAttribute("title", value);
+               });
+
+               self.table.modules.localize.bind("pagination|next", function (value) {
+                       self.nextBut.innerHTML = value;
+               });
+
+               self.table.modules.localize.bind("pagination|next_title", function (value) {
+                       self.nextBut.setAttribute("aria-label", value);
+                       self.nextBut.setAttribute("title", value);
+               });
+
+               self.table.modules.localize.bind("pagination|last", function (value) {
+                       self.lastBut.innerHTML = value;
+               });
+
+               self.table.modules.localize.bind("pagination|last_title", function (value) {
+                       self.lastBut.setAttribute("aria-label", value);
+                       self.lastBut.setAttribute("title", value);
+               });
+
+               //click bindings
+               self.firstBut.addEventListener("click", function () {
+                       self.setPage(1).then(function () {}).catch(function () {});
+               });
+
+               self.prevBut.addEventListener("click", function () {
+                       self.previousPage().then(function () {}).catch(function () {});
+               });
+
+               self.nextBut.addEventListener("click", function () {
+                       self.nextPage().then(function () {}).catch(function () {});
+               });
+
+               self.lastBut.addEventListener("click", function () {
+                       self.setPage(self.max).then(function () {}).catch(function () {});
+               });
+
+               if (self.table.options.paginationElement) {
+                       self.element = self.table.options.paginationElement;
+               }
+
+               if (this.pageSizeSelect) {
+                       pageSelectLabel = document.createElement("label");
+
+                       self.table.modules.localize.bind("pagination|page_size", function (value) {
+                               self.pageSizeSelect.setAttribute("aria-label", value);
+                               self.pageSizeSelect.setAttribute("title", value);
+                               pageSelectLabel.innerHTML = value;
+                       });
+
+                       self.element.appendChild(pageSelectLabel);
+                       self.element.appendChild(self.pageSizeSelect);
+
+                       self.pageSizeSelect.addEventListener("change", function (e) {
+                               self.setPageSize(self.pageSizeSelect.value == "true" ? true : self.pageSizeSelect.value);
+                               self.setPage(1).then(function () {}).catch(function () {});
+                       });
+               }
+
+               //append to DOM
+               self.element.appendChild(self.firstBut);
+               self.element.appendChild(self.prevBut);
+               self.element.appendChild(self.pagesElement);
+               self.element.appendChild(self.nextBut);
+               self.element.appendChild(self.lastBut);
+
+               if (!self.table.options.paginationElement && !hidden) {
+                       self.table.footerManager.append(self.element, self);
+               }
+
+               //set default values
+               self.mode = self.table.options.pagination;
+
+               if (self.table.options.paginationSize) {
+                       self.size = self.table.options.paginationSize;
+               } else {
+                       testElRow = document.createElement("div");
+                       testElRow.classList.add("tabulator-row");
+                       testElRow.style.visibility = hidden;
+
+                       testElCell = document.createElement("div");
+                       testElCell.classList.add("tabulator-cell");
+                       testElCell.innerHTML = "Page Row Test";
+
+                       testElRow.appendChild(testElCell);
+
+                       self.table.rowManager.getTableElement().appendChild(testElRow);
+
+                       self.size = Math.floor(self.table.rowManager.getElement().clientHeight / testElRow.offsetHeight);
+
+                       self.table.rowManager.getTableElement().removeChild(testElRow);
+               }
+
+               // self.page = self.table.options.paginationInitialPage || 1;
+               self.count = self.table.options.paginationButtonCount;
+
+               self.generatePageSizeSelectList();
+       };
+
+       Page.prototype.initializeProgressive = function (mode) {
+               this.initialize(true);
+               this.mode = "progressive_" + mode;
+               this.progressiveLoad = true;
+       };
+
+       Page.prototype.setDisplayIndex = function (index) {
+               this.displayIndex = index;
+       };
+
+       Page.prototype.getDisplayIndex = function () {
+               return this.displayIndex;
+       };
+
+       //calculate maximum page from number of rows
+       Page.prototype.setMaxRows = function (rowCount) {
+               if (!rowCount) {
+                       this.max = 1;
+               } else {
+                       this.max = this.size === true ? 1 : Math.ceil(rowCount / this.size);
+               }
+
+               if (this.page > this.max) {
+                       this.page = this.max;
+               }
+       };
+
+       //reset to first page without triggering action
+       Page.prototype.reset = function (force, columnsChanged) {
+               if (this.mode == "local" || force) {
+                       this.page = 1;
+               }
+
+               if (columnsChanged) {
+                       this.initialLoad = true;
+               }
+
+               return true;
+       };
+
+       //set the maxmum page
+       Page.prototype.setMaxPage = function (max) {
+
+               max = parseInt(max);
+
+               this.max = max || 1;
+
+               if (this.page > this.max) {
+                       this.page = this.max;
+                       this.trigger();
+               }
+       };
+
+       //set current page number
+       Page.prototype.setPage = function (page) {
+               var _this76 = this;
+
+               var self = this;
+
+               switch (page) {
+                       case "first":
+                               return this.setPage(1);
+                               break;
+
+                       case "prev":
+                               return this.previousPage();
+                               break;
+
+                       case "next":
+                               return this.nextPage();
+                               break;
+
+                       case "last":
+                               return this.setPage(this.max);
+                               break;
+               }
+
+               return new Promise(function (resolve, reject) {
+
+                       page = parseInt(page);
+
+                       if (page > 0 && page <= _this76.max) {
+                               _this76.page = page;
+                               _this76.trigger().then(function () {
+                                       resolve();
+                               }).catch(function () {
+                                       reject();
+                               });
+
+                               if (self.table.options.persistence && self.table.modExists("persistence", true) && self.table.modules.persistence.config.page) {
+                                       self.table.modules.persistence.save("page");
+                               }
+                       } else {
+                               console.warn("Pagination Error - Requested page is out of range of 1 - " + _this76.max + ":", page);
+                               reject();
+                       }
+               });
+       };
+
+       Page.prototype.setPageToRow = function (row) {
+               var _this77 = this;
+
+               return new Promise(function (resolve, reject) {
+
+                       var rows = _this77.table.rowManager.getDisplayRows(_this77.displayIndex - 1);
+                       var index = rows.indexOf(row);
+
+                       if (index > -1) {
+                               var page = _this77.size === true ? 1 : Math.ceil((index + 1) / _this77.size);
+
+                               _this77.setPage(page).then(function () {
+                                       resolve();
+                               }).catch(function () {
+                                       reject();
+                               });
+                       } else {
+                               console.warn("Pagination Error - Requested row is not visible");
+                               reject();
+                       }
+               });
+       };
+
+       Page.prototype.setPageSize = function (size) {
+               if (size !== true) {
+                       size = parseInt(size);
+               }
+
+               if (size > 0) {
+                       this.size = size;
+               }
+
+               if (this.pageSizeSelect) {
+                       // this.pageSizeSelect.value = size;
+                       this.generatePageSizeSelectList();
+               }
+
+               if (this.table.options.persistence && this.table.modExists("persistence", true) && this.table.modules.persistence.config.page) {
+                       this.table.modules.persistence.save("page");
+               }
+       };
+
+       //setup the pagination buttons
+       Page.prototype._setPageButtons = function () {
+               var self = this;
+
+               var leftSize = Math.floor((this.count - 1) / 2);
+               var rightSize = Math.ceil((this.count - 1) / 2);
+               var min = this.max - this.page + leftSize + 1 < this.count ? this.max - this.count + 1 : Math.max(this.page - leftSize, 1);
+               var max = this.page <= rightSize ? Math.min(this.count, this.max) : Math.min(this.page + rightSize, this.max);
+
+               while (self.pagesElement.firstChild) {
+                       self.pagesElement.removeChild(self.pagesElement.firstChild);
+               }if (self.page == 1) {
+                       self.firstBut.disabled = true;
+                       self.prevBut.disabled = true;
+               } else {
+                       self.firstBut.disabled = false;
+                       self.prevBut.disabled = false;
+               }
+
+               if (self.page == self.max) {
+                       self.lastBut.disabled = true;
+                       self.nextBut.disabled = true;
+               } else {
+                       self.lastBut.disabled = false;
+                       self.nextBut.disabled = false;
+               }
+
+               for (var _i14 = min; _i14 <= max; _i14++) {
+                       if (_i14 > 0 && _i14 <= self.max) {
+                               self.pagesElement.appendChild(self._generatePageButton(_i14));
+                       }
+               }
+
+               this.footerRedraw();
+       };
+
+       Page.prototype._generatePageButton = function (page) {
+               var self = this,
+                   button = document.createElement("button");
+
+               button.classList.add("tabulator-page");
+               if (page == self.page) {
+                       button.classList.add("active");
+               }
+
+               button.setAttribute("type", "button");
+               button.setAttribute("role", "button");
+
+               self.table.modules.localize.bind("pagination|page_title", function (value) {
+                       button.setAttribute("aria-label", value + " " + page);
+                       button.setAttribute("title", value + " " + page);
+               });
+
+               button.setAttribute("data-page", page);
+               button.textContent = page;
+
+               button.addEventListener("click", function (e) {
+                       self.setPage(page).then(function () {}).catch(function () {});
+               });
+
+               return button;
+       };
+
+       //previous page
+       Page.prototype.previousPage = function () {
+               var _this78 = this;
+
+               return new Promise(function (resolve, reject) {
+                       if (_this78.page > 1) {
+                               _this78.page--;
+                               _this78.trigger().then(function () {
+                                       resolve();
+                               }).catch(function () {
+                                       reject();
+                               });
+
+                               if (_this78.table.options.persistence && _this78.table.modExists("persistence", true) && _this78.table.modules.persistence.config.page) {
+                                       _this78.table.modules.persistence.save("page");
+                               }
+                       } else {
+                               console.warn("Pagination Error - Previous page would be less than page 1:", 0);
+                               reject();
+                       }
+               });
+       };
+
+       //next page
+       Page.prototype.nextPage = function () {
+               var _this79 = this;
+
+               return new Promise(function (resolve, reject) {
+                       if (_this79.page < _this79.max) {
+                               _this79.page++;
+                               _this79.trigger().then(function () {
+                                       resolve();
+                               }).catch(function () {
+                                       reject();
+                               });
+
+                               if (_this79.table.options.persistence && _this79.table.modExists("persistence", true) && _this79.table.modules.persistence.config.page) {
+                                       _this79.table.modules.persistence.save("page");
+                               }
+                       } else {
+                               if (!_this79.progressiveLoad) {
+                                       console.warn("Pagination Error - Next page would be greater than maximum page of " + _this79.max + ":", _this79.max + 1);
+                               }
+                               reject();
+                       }
+               });
+       };
+
+       //return current page number
+       Page.prototype.getPage = function () {
+               return this.page;
+       };
+
+       //return max page number
+       Page.prototype.getPageMax = function () {
+               return this.max;
+       };
+
+       Page.prototype.getPageSize = function (size) {
+               return this.size;
+       };
+
+       Page.prototype.getMode = function () {
+               return this.mode;
+       };
+
+       //return appropriate rows for current page
+       Page.prototype.getRows = function (data) {
+               var output, start, end;
+
+               if (this.mode == "local") {
+                       output = [];
+
+                       if (this.size === true) {
+                               start = 0;
+                               end = data.length;
+                       } else {
+                               start = this.size * (this.page - 1);
+                               end = start + parseInt(this.size);
+                       }
+
+                       this._setPageButtons();
+
+                       for (var _i15 = start; _i15 < end; _i15++) {
+                               if (data[_i15]) {
+                                       output.push(data[_i15]);
+                               }
+                       }
+
+                       return output;
+               } else {
+
+                       this._setPageButtons();
+
+                       return data.slice(0);
+               }
+       };
+
+       Page.prototype.trigger = function () {
+               var _this80 = this;
+
+               var left;
+
+               return new Promise(function (resolve, reject) {
+
+                       switch (_this80.mode) {
+                               case "local":
+                                       left = _this80.table.rowManager.scrollLeft;
+
+                                       _this80.table.rowManager.refreshActiveData("page");
+                                       _this80.table.rowManager.scrollHorizontal(left);
+
+                                       _this80.table.options.pageLoaded.call(_this80.table, _this80.getPage());
+                                       resolve();
+                                       break;
+
+                               case "remote":
+                               case "progressive_load":
+                               case "progressive_scroll":
+                                       _this80.table.modules.ajax.blockActiveRequest();
+                                       _this80._getRemotePage().then(function () {
+                                               resolve();
+                                       }).catch(function () {
+                                               reject();
+                                       });
+                                       break;
+
+                               default:
+                                       console.warn("Pagination Error - no such pagination mode:", _this80.mode);
+                                       reject();
+                       }
+               });
+       };
+
+       Page.prototype._getRemotePage = function () {
+               var _this81 = this;
+
+               var self = this,
+                   oldParams,
+                   pageParams;
+
+               return new Promise(function (resolve, reject) {
+
+                       if (!self.table.modExists("ajax", true)) {
+                               reject();
+                       }
+
+                       //record old params and restore after request has been made
+                       oldParams = Tabulator.prototype.helpers.deepClone(self.table.modules.ajax.getParams() || {});
+                       pageParams = self.table.modules.ajax.getParams();
+
+                       //configure request params
+                       pageParams[_this81.dataSentNames.page] = self.page;
+
+                       //set page size if defined
+                       if (_this81.size) {
+                               pageParams[_this81.dataSentNames.size] = _this81.size;
+                       }
+
+                       //set sort data if defined
+                       if (_this81.table.options.ajaxSorting && _this81.table.modExists("sort")) {
+                               var sorters = self.table.modules.sort.getSort();
+
+                               sorters.forEach(function (item) {
+                                       delete item.column;
+                               });
+
+                               pageParams[_this81.dataSentNames.sorters] = sorters;
+                       }
+
+                       //set filter data if defined
+                       if (_this81.table.options.ajaxFiltering && _this81.table.modExists("filter")) {
+                               var filters = self.table.modules.filter.getFilters(true, true);
+                               pageParams[_this81.dataSentNames.filters] = filters;
+                       }
+
+                       self.table.modules.ajax.setParams(pageParams);
+
+                       self.table.modules.ajax.sendRequest(_this81.progressiveLoad).then(function (data) {
+                               self._parseRemoteData(data);
+                               resolve();
+                       }).catch(function (e) {
+                               reject();
+                       });
+
+                       self.table.modules.ajax.setParams(oldParams);
+               });
+       };
+
+       Page.prototype._parseRemoteData = function (data) {
+               var self = this,
+                   left,
+                   data,
+                   margin;
+
+               if (typeof data[this.dataReceivedNames.last_page] === "undefined") {
+                       console.warn("Remote Pagination Error - Server response missing '" + this.dataReceivedNames.last_page + "' property");
+               }
+
+               if (data[this.dataReceivedNames.data]) {
+                       this.max = parseInt(data[this.dataReceivedNames.last_page]) || 1;
+
+                       if (this.progressiveLoad) {
+                               switch (this.mode) {
+                                       case "progressive_load":
+
+                                               if (this.page == 1) {
+                                                       this.table.rowManager.setData(data[this.dataReceivedNames.data], false, this.initialLoad && this.page == 1);
+                                               } else {
+                                                       this.table.rowManager.addRows(data[this.dataReceivedNames.data]);
+                                               }
+
+                                               if (this.page < this.max) {
+                                                       setTimeout(function () {
+                                                               self.nextPage().then(function () {}).catch(function () {});
+                                                       }, self.table.options.ajaxProgressiveLoadDelay);
+                                               }
+                                               break;
+
+                                       case "progressive_scroll":
+                                               data = this.table.rowManager.getData().concat(data[this.dataReceivedNames.data]);
+
+                                               this.table.rowManager.setData(data, true, this.initialLoad && this.page == 1);
+
+                                               margin = this.table.options.ajaxProgressiveLoadScrollMargin || this.table.rowManager.element.clientHeight * 2;
+
+                                               if (self.table.rowManager.element.scrollHeight <= self.table.rowManager.element.clientHeight + margin) {
+                                                       self.nextPage().then(function () {}).catch(function () {});
+                                               }
+                                               break;
+                               }
+                       } else {
+                               left = this.table.rowManager.scrollLeft;
+
+                               this.table.rowManager.setData(data[this.dataReceivedNames.data], false, this.initialLoad && this.page == 1);
+
+                               this.table.rowManager.scrollHorizontal(left);
+
+                               this.table.columnManager.scrollHorizontal(left);
+
+                               this.table.options.pageLoaded.call(this.table, this.getPage());
+                       }
+
+                       this.initialLoad = false;
+               } else {
+                       console.warn("Remote Pagination Error - Server response missing '" + this.dataReceivedNames.data + "' property");
+               }
+       };
+
+       //handle the footer element being redrawn
+       Page.prototype.footerRedraw = function () {
+               var footer = this.table.footerManager.element;
+
+               if (Math.ceil(footer.clientWidth) - footer.scrollWidth < 0) {
+                       this.pagesElement.style.display = 'none';
+               } else {
+                       this.pagesElement.style.display = '';
+
+                       if (Math.ceil(footer.clientWidth) - footer.scrollWidth < 0) {
+                               this.pagesElement.style.display = 'none';
+                       }
+               }
+       };
+
+       //set the paramter names for pagination requests
+       Page.prototype.paginationDataSentNames = {
+               "page": "page",
+               "size": "size",
+               "sorters": "sorters",
+               // "sort_dir":"sort_dir",
+               "filters": "filters"
+               // "filter_value":"filter_value",
+               // "filter_type":"filter_type",
+       };
+
+       //set the property names for pagination responses
+       Page.prototype.paginationDataReceivedNames = {
+               "current_page": "current_page",
+               "last_page": "last_page",
+               "data": "data"
+       };
+
+       Tabulator.prototype.registerModule("page", Page);
+
+       var Persistence = function Persistence(table) {
+               this.table = table; //hold Tabulator object
+               this.mode = "";
+               this.id = "";
+               // this.persistProps = ["field", "width", "visible"];
+               this.defWatcherBlock = false;
+               this.config = {};
+               this.readFunc = false;
+               this.writeFunc = false;
+       };
+
+       // Test for whether localStorage is available for use.
+       Persistence.prototype.localStorageTest = function () {
+               var testKey = "_tabulator_test";
+
+               try {
+                       window.localStorage.setItem(testKey, testKey);
+                       window.localStorage.removeItem(testKey);
+                       return true;
+               } catch (e) {
+                       return false;
+               }
+       };
+
+       //setup parameters
+       Persistence.prototype.initialize = function () {
+               //determine persistent layout storage type
+
+               var mode = this.table.options.persistenceMode,
+                   id = this.table.options.persistenceID,
+                   retreivedData;
+
+               this.mode = mode !== true ? mode : this.localStorageTest() ? "local" : "cookie";
+
+               if (this.table.options.persistenceReaderFunc) {
+                       if (typeof this.table.options.persistenceReaderFunc === "function") {
+                               this.readFunc = this.table.options.persistenceReaderFunc;
+                       } else {
+                               if (this.readers[this.table.options.persistenceReaderFunc]) {
+                                       this.readFunc = this.readers[this.table.options.persistenceReaderFunc];
+                               } else {
+                                       console.warn("Persistence Read Error - invalid reader set", this.table.options.persistenceReaderFunc);
+                               }
+                       }
+               } else {
+                       if (this.readers[this.mode]) {
+                               this.readFunc = this.readers[this.mode];
+                       } else {
+                               console.warn("Persistence Read Error - invalid reader set", this.mode);
+                       }
+               }
+
+               if (this.table.options.persistenceWriterFunc) {
+                       if (typeof this.table.options.persistenceWriterFunc === "function") {
+                               this.writeFunc = this.table.options.persistenceWriterFunc;
+                       } else {
+                               if (this.readers[this.table.options.persistenceWriterFunc]) {
+                                       this.writeFunc = this.readers[this.table.options.persistenceWriterFunc];
+                               } else {
+                                       console.warn("Persistence Write Error - invalid reader set", this.table.options.persistenceWriterFunc);
+                               }
+                       }
+               } else {
+                       if (this.writers[this.mode]) {
+                               this.writeFunc = this.writers[this.mode];
+                       } else {
+                               console.warn("Persistence Write Error - invalid writer set", this.mode);
+                       }
+               }
+
+               //set storage tag
+               this.id = "tabulator-" + (id || this.table.element.getAttribute("id") || "");
+
+               this.config = {
+                       sort: this.table.options.persistence === true || this.table.options.persistence.sort,
+                       filter: this.table.options.persistence === true || this.table.options.persistence.filter,
+                       group: this.table.options.persistence === true || this.table.options.persistence.group,
+                       page: this.table.options.persistence === true || this.table.options.persistence.page,
+                       columns: this.table.options.persistence === true ? ["title", "width", "visible"] : this.table.options.persistence.columns
+               };
+
+               //load pagination data if needed
+               if (this.config.page) {
+                       retreivedData = this.retreiveData("page");
+
+                       if (retreivedData) {
+                               if (typeof retreivedData.paginationSize !== "undefined" && (this.config.page === true || this.config.page.size)) {
+                                       this.table.options.paginationSize = retreivedData.paginationSize;
+                               }
+
+                               if (typeof retreivedData.paginationInitialPage !== "undefined" && (this.config.page === true || this.config.page.page)) {
+                                       this.table.options.paginationInitialPage = retreivedData.paginationInitialPage;
+                               }
+                       }
+               }
+
+               //load group data if needed
+               if (this.config.group) {
+                       retreivedData = this.retreiveData("group");
+
+                       if (retreivedData) {
+                               if (typeof retreivedData.groupBy !== "undefined" && (this.config.group === true || this.config.group.groupBy)) {
+                                       this.table.options.groupBy = retreivedData.groupBy;
+                               }
+                               if (typeof retreivedData.groupStartOpen !== "undefined" && (this.config.group === true || this.config.group.groupStartOpen)) {
+                                       this.table.options.groupStartOpen = retreivedData.groupStartOpen;
+                               }
+                               if (typeof retreivedData.groupHeader !== "undefined" && (this.config.group === true || this.config.group.groupHeader)) {
+                                       this.table.options.groupHeader = retreivedData.groupHeader;
+                               }
+                       }
+               }
+       };
+
+       Persistence.prototype.initializeColumn = function (column) {
+               var self = this,
+                   def,
+                   keys;
+
+               if (this.config.columns) {
+                       this.defWatcherBlock = true;
+
+                       def = column.getDefinition();
+
+                       keys = this.config.columns === true ? Object.keys(def) : this.config.columns;
+
+                       keys.forEach(function (key) {
+                               var props = Object.getOwnPropertyDescriptor(def, key);
+                               var value = def[key];
+                               if (props) {
+                                       Object.defineProperty(def, key, {
+                                               set: function set(newValue) {
+                                                       value = newValue;
+
+                                                       if (!self.defWatcherBlock) {
+                                                               self.save("columns");
+                                                       }
+
+                                                       if (props.set) {
+                                                               props.set(newValue);
+                                                       }
+                                               },
+                                               get: function get() {
+                                                       if (props.get) {
+                                                               props.get();
+                                                       }
+                                                       return value;
+                                               }
+                                       });
+                               }
+                       });
+
+                       this.defWatcherBlock = false;
+               }
+       };
+
+       //load saved definitions
+       Persistence.prototype.load = function (type, current) {
+               var data = this.retreiveData(type);
+
+               if (current) {
+                       data = data ? this.mergeDefinition(current, data) : current;
+               }
+
+               return data;
+       };
+
+       //retreive data from memory
+       Persistence.prototype.retreiveData = function (type) {
+               return this.readFunc ? this.readFunc(this.id, type) : false;
+       };
+
+       //merge old and new column definitions
+       Persistence.prototype.mergeDefinition = function (oldCols, newCols) {
+               var self = this,
+                   output = [];
+
+               // oldCols = oldCols || [];
+               newCols = newCols || [];
+
+               newCols.forEach(function (column, to) {
+
+                       var from = self._findColumn(oldCols, column),
+                           keys;
+
+                       if (from) {
+
+                               if (self.config.columns === true || self.config.columns == undefined) {
+                                       keys = Object.keys(from);
+                                       keys.push("width");
+                               } else {
+                                       keys = self.config.columns;
+                               }
+
+                               keys.forEach(function (key) {
+                                       if (typeof column[key] !== "undefined") {
+                                               from[key] = column[key];
+                                       }
+                               });
+
+                               if (from.columns) {
+                                       from.columns = self.mergeDefinition(from.columns, column.columns);
+                               }
+
+                               output.push(from);
+                       }
+               });
+
+               oldCols.forEach(function (column, i) {
+                       var from = self._findColumn(newCols, column);
+                       if (!from) {
+                               if (output.length > i) {
+                                       output.splice(i, 0, column);
+                               } else {
+                                       output.push(column);
+                               }
+                       }
+               });
+
+               return output;
+       };
+
+       //find matching columns
+       Persistence.prototype._findColumn = function (columns, subject) {
+               var type = subject.columns ? "group" : subject.field ? "field" : "object";
+
+               return columns.find(function (col) {
+                       switch (type) {
+                               case "group":
+                                       return col.title === subject.title && col.columns.length === subject.columns.length;
+                                       break;
+
+                               case "field":
+                                       return col.field === subject.field;
+                                       break;
+
+                               case "object":
+                                       return col === subject;
+                                       break;
+                       }
+               });
+       };
+
+       //save data
+       Persistence.prototype.save = function (type) {
+               var data = {};
+
+               switch (type) {
+                       case "columns":
+                               data = this.parseColumns(this.table.columnManager.getColumns());
+                               break;
+
+                       case "filter":
+                               data = this.table.modules.filter.getFilters();
+                               break;
+
+                       case "sort":
+                               data = this.validateSorters(this.table.modules.sort.getSort());
+                               break;
+
+                       case "group":
+                               data = this.getGroupConfig();
+                               break;
+
+                       case "page":
+                               data = this.getPageConfig();
+                               break;
+               }
+
+               if (this.writeFunc) {
+                       this.writeFunc(this.id, type, data);
+               }
+       };
+
+       //ensure sorters contain no function data
+       Persistence.prototype.validateSorters = function (data) {
+               data.forEach(function (item) {
+                       item.column = item.field;
+                       delete item.field;
+               });
+
+               return data;
+       };
+
+       Persistence.prototype.getGroupConfig = function () {
+               var data = {};
+
+               if (this.config.group) {
+                       if (this.config.group === true || this.config.group.groupBy) {
+                               data.groupBy = this.table.options.groupBy;
+                       }
+
+                       if (this.config.group === true || this.config.group.groupStartOpen) {
+                               data.groupStartOpen = this.table.options.groupStartOpen;
+                       }
+
+                       if (this.config.group === true || this.config.group.groupHeader) {
+                               data.groupHeader = this.table.options.groupHeader;
+                       }
+               }
+
+               return data;
+       };
+
+       Persistence.prototype.getPageConfig = function () {
+               var data = {};
+
+               if (this.config.page) {
+                       if (this.config.page === true || this.config.page.size) {
+                               data.paginationSize = this.table.modules.page.getPageSize();
+                       }
+
+                       if (this.config.page === true || this.config.page.page) {
+                               data.paginationInitialPage = this.table.modules.page.getPage();
+                       }
+               }
+
+               return data;
+       };
+
+       //parse columns for data to store
+       Persistence.prototype.parseColumns = function (columns) {
+               var self = this,
+                   definitions = [],
+                   excludedKeys = ["headerContextMenu", "headerMenu", "contextMenu", "clickMenu"];
+
+               columns.forEach(function (column) {
+                       var defStore = {},
+                           colDef = column.getDefinition(),
+                           keys;
+
+                       if (column.isGroup) {
+                               defStore.title = colDef.title;
+                               defStore.columns = self.parseColumns(column.getColumns());
+                       } else {
+                               defStore.field = column.getField();
+
+                               if (self.config.columns === true || self.config.columns == undefined) {
+                                       keys = Object.keys(colDef);
+                                       keys.push("width");
+                               } else {
+                                       keys = self.config.columns;
+                               }
+
+                               keys.forEach(function (key) {
+
+                                       switch (key) {
+                                               case "width":
+                                                       defStore.width = column.getWidth();
+                                                       break;
+                                               case "visible":
+                                                       defStore.visible = column.visible;
+                                                       break;
+
+                                               default:
+                                                       if (typeof colDef[key] !== "function" && excludedKeys.indexOf(key) === -1) {
+                                                               defStore[key] = colDef[key];
+                                                       }
+                                       }
+                               });
+                       }
+
+                       definitions.push(defStore);
+               });
+
+               return definitions;
+       };
+
+       // read peristence information from storage
+       Persistence.prototype.readers = {
+               local: function local(id, type) {
+                       var data = localStorage.getItem(id + "-" + type);
+
+                       return data ? JSON.parse(data) : false;
+               },
+               cookie: function cookie(id, type) {
+                       var cookie = document.cookie,
+                           key = id + "-" + type,
+                           cookiePos = cookie.indexOf(key + "="),
+                           end,
+                           data;
+
+                       //if cookie exists, decode and load column data into tabulator
+                       if (cookiePos > -1) {
+                               cookie = cookie.substr(cookiePos);
+
+                               end = cookie.indexOf(";");
+
+                               if (end > -1) {
+                                       cookie = cookie.substr(0, end);
+                               }
+
+                               data = cookie.replace(key + "=", "");
+                       }
+
+                       return data ? JSON.parse(data) : false;
+               }
+       };
+
+       //write persistence information to storage
+       Persistence.prototype.writers = {
+               local: function local(id, type, data) {
+                       localStorage.setItem(id + "-" + type, JSON.stringify(data));
+               },
+               cookie: function cookie(id, type, data) {
+                       var expireDate = new Date();
+
+                       expireDate.setDate(expireDate.getDate() + 10000);
+
+                       document.cookie = id + "-" + type + "=" + JSON.stringify(data) + "; expires=" + expireDate.toUTCString();
+               }
+       };
+
+       Tabulator.prototype.registerModule("persistence", Persistence);
+
+       var Print = function Print(table) {
+               this.table = table; //hold Tabulator object
+               this.element = false;
+               this.manualBlock = false;
+       };
+
+       Print.prototype.initialize = function () {
+               window.addEventListener("beforeprint", this.replaceTable.bind(this));
+               window.addEventListener("afterprint", this.cleanup.bind(this));
+       };
+
+       Print.prototype.replaceTable = function () {
+               if (!this.manualBlock) {
+                       this.element = document.createElement("div");
+                       this.element.classList.add("tabulator-print-table");
+
+                       this.element.appendChild(this.table.modules.export.genereateTable(this.table.options.printConfig, this.table.options.printStyled, this.table.options.printRowRange, "print"));
+
+                       this.table.element.style.display = "none";
+
+                       this.table.element.parentNode.insertBefore(this.element, this.table.element);
+               }
+       };
+
+       Print.prototype.cleanup = function () {
+               document.body.classList.remove("tabulator-print-fullscreen-hide");
+
+               if (this.element && this.element.parentNode) {
+                       this.element.parentNode.removeChild(this.element);
+                       this.table.element.style.display = "";
+               }
+       };
+
+       Print.prototype.printFullscreen = function (visible, style, config) {
+               var scrollX = window.scrollX,
+                   scrollY = window.scrollY,
+                   headerEl = document.createElement("div"),
+                   footerEl = document.createElement("div"),
+                   tableEl = this.table.modules.export.genereateTable(typeof config != "undefined" ? config : this.table.options.printConfig, typeof style != "undefined" ? style : this.table.options.printStyled, visible, "print"),
+                   headerContent,
+                   footerContent;
+
+               this.manualBlock = true;
+
+               this.element = document.createElement("div");
+               this.element.classList.add("tabulator-print-fullscreen");
+
+               if (this.table.options.printHeader) {
+                       headerEl.classList.add("tabulator-print-header");
+
+                       headerContent = typeof this.table.options.printHeader == "function" ? this.table.options.printHeader.call(this.table) : this.table.options.printHeader;
+
+                       if (typeof headerContent == "string") {
+                               headerEl.innerHTML = headerContent;
+                       } else {
+                               headerEl.appendChild(headerContent);
+                       }
+
+                       this.element.appendChild(headerEl);
+               }
+
+               this.element.appendChild(tableEl);
+
+               if (this.table.options.printFooter) {
+                       footerEl.classList.add("tabulator-print-footer");
+
+                       footerContent = typeof this.table.options.printFooter == "function" ? this.table.options.printFooter.call(this.table) : this.table.options.printFooter;
+
+                       if (typeof footerContent == "string") {
+                               footerEl.innerHTML = footerContent;
+                       } else {
+                               footerEl.appendChild(footerContent);
+                       }
+
+                       this.element.appendChild(footerEl);
+               }
+
+               document.body.classList.add("tabulator-print-fullscreen-hide");
+               document.body.appendChild(this.element);
+
+               if (this.table.options.printFormatter) {
+                       this.table.options.printFormatter(this.element, tableEl);
+               }
+
+               window.print();
+
+               this.cleanup();
+
+               window.scrollTo(scrollX, scrollY);
+
+               this.manualBlock = false;
+       };
+
+       Tabulator.prototype.registerModule("print", Print);
+       var ReactiveData = function ReactiveData(table) {
+               this.table = table; //hold Tabulator object
+               this.data = false;
+               this.blocked = false; //block reactivity while performing update
+               this.origFuncs = {}; // hold original data array functions to allow replacement after data is done with
+               this.currentVersion = 0;
+       };
+
+       ReactiveData.prototype.watchData = function (data) {
+               var self = this,
+                   pushFunc,
+                   version;
+
+               this.currentVersion++;
+
+               version = this.currentVersion;
+
+               self.unwatchData();
+
+               self.data = data;
+
+               //override array push function
+               self.origFuncs.push = data.push;
+
+               Object.defineProperty(self.data, "push", {
+                       enumerable: false,
+                       configurable: true,
+                       value: function value() {
+                               var args = Array.from(arguments);
+
+                               if (!self.blocked && version === self.currentVersion) {
+                                       args.forEach(function (arg) {
+                                               self.table.rowManager.addRowActual(arg, false);
+                                       });
+                               }
+
+                               return self.origFuncs.push.apply(data, arguments);
+                       }
+               });
+
+               //override array unshift function
+               self.origFuncs.unshift = data.unshift;
+
+               Object.defineProperty(self.data, "unshift", {
+                       enumerable: false,
+                       configurable: true,
+                       value: function value() {
+                               var args = Array.from(arguments);
+
+                               if (!self.blocked && version === self.currentVersion) {
+                                       args.forEach(function (arg) {
+                                               self.table.rowManager.addRowActual(arg, true);
+                                       });
+                               }
+
+                               return self.origFuncs.unshift.apply(data, arguments);
+                       }
+               });
+
+               //override array shift function
+               self.origFuncs.shift = data.shift;
+
+               Object.defineProperty(self.data, "shift", {
+                       enumerable: false,
+                       configurable: true,
+                       value: function value() {
+                               var row;
+
+                               if (!self.blocked && version === self.currentVersion) {
+                                       if (self.data.length) {
+                                               row = self.table.rowManager.getRowFromDataObject(self.data[0]);
+
+                                               if (row) {
+                                                       row.deleteActual();
+                                               }
+                                       }
+                               }
+
+                               return self.origFuncs.shift.call(data);
+                       }
+               });
+
+               //override array pop function
+               self.origFuncs.pop = data.pop;
+
+               Object.defineProperty(self.data, "pop", {
+                       enumerable: false,
+                       configurable: true,
+                       value: function value() {
+                               var row;
+                               if (!self.blocked && version === self.currentVersion) {
+                                       if (self.data.length) {
+                                               row = self.table.rowManager.getRowFromDataObject(self.data[self.data.length - 1]);
+
+                                               if (row) {
+                                                       row.deleteActual();
+                                               }
+                                       }
+                               }
+                               return self.origFuncs.pop.call(data);
+                       }
+               });
+
+               //override array splice function
+               self.origFuncs.splice = data.splice;
+
+               Object.defineProperty(self.data, "splice", {
+                       enumerable: false,
+                       configurable: true,
+                       value: function value() {
+                               var args = Array.from(arguments),
+                                   start = args[0] < 0 ? data.length + args[0] : args[0],
+                                   end = args[1],
+                                   newRows = args[2] ? args.slice(2) : false,
+                                   startRow;
+
+                               if (!self.blocked && version === self.currentVersion) {
+
+                                       //add new rows
+                                       if (newRows) {
+                                               startRow = data[start] ? self.table.rowManager.getRowFromDataObject(data[start]) : false;
+
+                                               if (startRow) {
+                                                       newRows.forEach(function (rowData) {
+                                                               self.table.rowManager.addRowActual(rowData, true, startRow, true);
+                                                       });
+                                               } else {
+                                                       newRows = newRows.slice().reverse();
+
+                                                       newRows.forEach(function (rowData) {
+                                                               self.table.rowManager.addRowActual(rowData, true, false, true);
+                                                       });
+                                               }
+                                       }
+
+                                       //delete removed rows
+                                       if (end !== 0) {
+                                               var oldRows = data.slice(start, typeof args[1] === "undefined" ? args[1] : start + end);
+
+                                               oldRows.forEach(function (rowData, i) {
+                                                       var row = self.table.rowManager.getRowFromDataObject(rowData);
+
+                                                       if (row) {
+                                                               row.deleteActual(i !== oldRows.length - 1);
+                                                       }
+                                               });
+                                       }
+
+                                       if (newRows || end !== 0) {
+                                               self.table.rowManager.reRenderInPosition();
+                                       }
+                               }
+
+                               return self.origFuncs.splice.apply(data, arguments);
+                       }
+               });
+       };
+
+       ReactiveData.prototype.unwatchData = function () {
+               if (this.data !== false) {
+                       for (var key in this.origFuncs) {
+                               Object.defineProperty(this.data, key, {
+                                       enumerable: true,
+                                       configurable: true,
+                                       writable: true,
+                                       value: this.origFuncs.key
+                               });
+                       }
+               }
+       };
+
+       ReactiveData.prototype.watchRow = function (row) {
+               var data = row.getData();
+
+               this.blocked = true;
+
+               for (var key in data) {
+                       this.watchKey(row, data, key);
+               }
+
+               if (this.table.options.dataTree) {
+                       this.watchTreeChildren(row);
+               }
+
+               this.blocked = false;
+       };
+
+       ReactiveData.prototype.watchTreeChildren = function (row) {
+               var self = this,
+                   childField = row.getData()[this.table.options.dataTreeChildField],
+                   origFuncs = {};
+
+               function rebuildTree() {
+                       self.table.modules.dataTree.initializeRow(row);
+                       self.table.modules.dataTree.layoutRow(row);
+                       self.table.rowManager.refreshActiveData("tree", false, true);
+               }
+
+               if (childField) {
+
+                       origFuncs.push = childField.push;
+
+                       Object.defineProperty(childField, "push", {
+                               enumerable: false,
+                               configurable: true,
+                               value: function value() {
+                                       var result = origFuncs.push.apply(childField, arguments);
+
+                                       rebuildTree();
+
+                                       return result;
+                               }
+                       });
+
+                       origFuncs.unshift = childField.unshift;
+
+                       Object.defineProperty(childField, "unshift", {
+                               enumerable: false,
+                               configurable: true,
+                               value: function value() {
+                                       var result = origFuncs.unshift.apply(childField, arguments);
+
+                                       rebuildTree();
+
+                                       return result;
+                               }
+                       });
+
+                       origFuncs.shift = childField.shift;
+
+                       Object.defineProperty(childField, "shift", {
+                               enumerable: false,
+                               configurable: true,
+                               value: function value() {
+                                       var result = origFuncs.shift.call(childField);
+
+                                       rebuildTree();
+
+                                       return result;
+                               }
+                       });
+
+                       origFuncs.pop = childField.pop;
+
+                       Object.defineProperty(childField, "pop", {
+                               enumerable: false,
+                               configurable: true,
+                               value: function value() {
+                                       var result = origFuncs.pop.call(childField);
+
+                                       rebuildTree();
+
+                                       return result;
+                               }
+                       });
+
+                       origFuncs.splice = childField.splice;
+
+                       Object.defineProperty(childField, "splice", {
+                               enumerable: false,
+                               configurable: true,
+                               value: function value() {
+                                       var result = origFuncs.splice.apply(childField, arguments);
+
+                                       rebuildTree();
+
+                                       return result;
+                               }
+                       });
+               }
+       };
+
+       ReactiveData.prototype.watchKey = function (row, data, key) {
+               var self = this,
+                   props = Object.getOwnPropertyDescriptor(data, key),
+                   value = data[key],
+                   version = this.currentVersion;
+
+               Object.defineProperty(data, key, {
+                       set: function set(newValue) {
+                               value = newValue;
+                               if (!self.blocked && version === self.currentVersion) {
+                                       var update = {};
+                                       update[key] = newValue;
+                                       row.updateData(update);
+                               }
+
+                               if (props.set) {
+                                       props.set(newValue);
+                               }
+                       },
+                       get: function get() {
+
+                               if (props.get) {
+                                       props.get();
+                               }
+
+                               return value;
+                       }
+               });
+       };
+
+       ReactiveData.prototype.unwatchRow = function (row) {
+               var data = row.getData();
+
+               for (var key in data) {
+                       Object.defineProperty(data, key, {
+                               value: data[key]
+                       });
+               }
+       };
+
+       ReactiveData.prototype.block = function () {
+               this.blocked = true;
+       };
+
+       ReactiveData.prototype.unblock = function () {
+               this.blocked = false;
+       };
+
+       Tabulator.prototype.registerModule("reactiveData", ReactiveData);
+
+       var ResizeColumns = function ResizeColumns(table) {
+               this.table = table; //hold Tabulator object
+               this.startColumn = false;
+               this.startX = false;
+               this.startWidth = false;
+               this.handle = null;
+               this.prevHandle = null;
+       };
+
+       ResizeColumns.prototype.initializeColumn = function (type, column, element) {
+               var self = this,
+                   variableHeight = false,
+                   mode = this.table.options.resizableColumns;
+
+               //set column resize mode
+               if (type === "header") {
+                       variableHeight = column.definition.formatter == "textarea" || column.definition.variableHeight;
+                       column.modules.resize = { variableHeight: variableHeight };
+               }
+
+               if (mode === true || mode == type) {
+
+                       var handle = document.createElement('div');
+                       handle.className = "tabulator-col-resize-handle";
+
+                       var prevHandle = document.createElement('div');
+                       prevHandle.className = "tabulator-col-resize-handle prev";
+
+                       handle.addEventListener("click", function (e) {
+                               e.stopPropagation();
+                       });
+
+                       var handleDown = function handleDown(e) {
+                               var nearestColumn = column.getLastColumn();
+
+                               if (nearestColumn && self._checkResizability(nearestColumn)) {
+                                       self.startColumn = column;
+                                       self._mouseDown(e, nearestColumn, handle);
+                               }
+                       };
+
+                       handle.addEventListener("mousedown", handleDown);
+                       handle.addEventListener("touchstart", handleDown, { passive: true });
+
+                       //reszie column on  double click
+                       handle.addEventListener("dblclick", function (e) {
+                               var col = column.getLastColumn();
+
+                               if (col && self._checkResizability(col)) {
+                                       e.stopPropagation();
+                                       col.reinitializeWidth(true);
+                               }
+                       });
+
+                       prevHandle.addEventListener("click", function (e) {
+                               e.stopPropagation();
+                       });
+
+                       var prevHandleDown = function prevHandleDown(e) {
+                               var nearestColumn, colIndex, prevColumn;
+
+                               nearestColumn = column.getFirstColumn();
+
+                               if (nearestColumn) {
+                                       colIndex = self.table.columnManager.findColumnIndex(nearestColumn);
+                                       prevColumn = colIndex > 0 ? self.table.columnManager.getColumnByIndex(colIndex - 1) : false;
+
+                                       if (prevColumn && self._checkResizability(prevColumn)) {
+                                               self.startColumn = column;
+                                               self._mouseDown(e, prevColumn, prevHandle);
+                                       }
+                               }
+                       };
+
+                       prevHandle.addEventListener("mousedown", prevHandleDown);
+                       prevHandle.addEventListener("touchstart", prevHandleDown, { passive: true });
+
+                       //resize column on double click
+                       prevHandle.addEventListener("dblclick", function (e) {
+                               var nearestColumn, colIndex, prevColumn;
+
+                               nearestColumn = column.getFirstColumn();
+
+                               if (nearestColumn) {
+                                       colIndex = self.table.columnManager.findColumnIndex(nearestColumn);
+                                       prevColumn = colIndex > 0 ? self.table.columnManager.getColumnByIndex(colIndex - 1) : false;
+
+                                       if (prevColumn && self._checkResizability(prevColumn)) {
+                                               e.stopPropagation();
+                                               prevColumn.reinitializeWidth(true);
+                                       }
+                               }
+                       });
+
+                       element.appendChild(handle);
+                       element.appendChild(prevHandle);
+               }
+       };
+
+       ResizeColumns.prototype._checkResizability = function (column) {
+               return typeof column.definition.resizable != "undefined" ? column.definition.resizable : this.table.options.resizableColumns;
+       };
+
+       ResizeColumns.prototype._mouseDown = function (e, column, handle) {
+               var self = this;
+
+               self.table.element.classList.add("tabulator-block-select");
+
+               function mouseMove(e) {
+                       // self.table.columnManager.tempScrollBlock();
+
+                       if (self.table.rtl) {
+                               column.setWidth(self.startWidth - ((typeof e.screenX === "undefined" ? e.touches[0].screenX : e.screenX) - self.startX));
+                       } else {
+                               column.setWidth(self.startWidth + ((typeof e.screenX === "undefined" ? e.touches[0].screenX : e.screenX) - self.startX));
+                       }
+
+                       if (self.table.options.virtualDomHoz) {
+                               self.table.vdomHoz.reinitialize(true);
+                       }
+
+                       if (!self.table.browserSlow && column.modules.resize && column.modules.resize.variableHeight) {
+                               column.checkCellHeights();
+                       }
+               }
+
+               function mouseUp(e) {
+
+                       //block editor from taking action while resizing is taking place
+                       if (self.startColumn.modules.edit) {
+                               self.startColumn.modules.edit.blocked = false;
+                       }
+
+                       if (self.table.browserSlow && column.modules.resize && column.modules.resize.variableHeight) {
+                               column.checkCellHeights();
+                       }
+
+                       document.body.removeEventListener("mouseup", mouseUp);
+                       document.body.removeEventListener("mousemove", mouseMove);
+
+                       handle.removeEventListener("touchmove", mouseMove);
+                       handle.removeEventListener("touchend", mouseUp);
+
+                       self.table.element.classList.remove("tabulator-block-select");
+
+                       if (self.table.options.persistence && self.table.modExists("persistence", true) && self.table.modules.persistence.config.columns) {
+                               self.table.modules.persistence.save("columns");
+                       }
+
+                       self.table.options.columnResized.call(self.table, column.getComponent());
+               }
+
+               e.stopPropagation(); //prevent resize from interfereing with movable columns
+
+               //block editor from taking action while resizing is taking place
+               if (self.startColumn.modules.edit) {
+                       self.startColumn.modules.edit.blocked = true;
+               }
+
+               self.startX = typeof e.screenX === "undefined" ? e.touches[0].screenX : e.screenX;
+               self.startWidth = column.getWidth();
+
+               document.body.addEventListener("mousemove", mouseMove);
+               document.body.addEventListener("mouseup", mouseUp);
+               handle.addEventListener("touchmove", mouseMove, { passive: true });
+               handle.addEventListener("touchend", mouseUp);
+       };
+
+       Tabulator.prototype.registerModule("resizeColumns", ResizeColumns);
+       var ResizeRows = function ResizeRows(table) {
+               this.table = table; //hold Tabulator object
+               this.startColumn = false;
+               this.startY = false;
+               this.startHeight = false;
+               this.handle = null;
+               this.prevHandle = null;
+       };
+
+       ResizeRows.prototype.initializeRow = function (row) {
+               var self = this,
+                   rowEl = row.getElement();
+
+               var handle = document.createElement('div');
+               handle.className = "tabulator-row-resize-handle";
+
+               var prevHandle = document.createElement('div');
+               prevHandle.className = "tabulator-row-resize-handle prev";
+
+               handle.addEventListener("click", function (e) {
+                       e.stopPropagation();
+               });
+
+               var handleDown = function handleDown(e) {
+                       self.startRow = row;
+                       self._mouseDown(e, row, handle);
+               };
+
+               handle.addEventListener("mousedown", handleDown);
+               handle.addEventListener("touchstart", handleDown, { passive: true });
+
+               prevHandle.addEventListener("click", function (e) {
+                       e.stopPropagation();
+               });
+
+               var prevHandleDown = function prevHandleDown(e) {
+                       var prevRow = self.table.rowManager.prevDisplayRow(row);
+
+                       if (prevRow) {
+                               self.startRow = prevRow;
+                               self._mouseDown(e, prevRow, prevHandle);
+                       }
+               };
+
+               prevHandle.addEventListener("mousedown", prevHandleDown);
+               prevHandle.addEventListener("touchstart", prevHandleDown, { passive: true });
+
+               rowEl.appendChild(handle);
+               rowEl.appendChild(prevHandle);
+       };
+
+       ResizeRows.prototype._mouseDown = function (e, row, handle) {
+               var self = this;
+
+               self.table.element.classList.add("tabulator-block-select");
+
+               function mouseMove(e) {
+                       row.setHeight(self.startHeight + ((typeof e.screenY === "undefined" ? e.touches[0].screenY : e.screenY) - self.startY));
+               }
+
+               function mouseUp(e) {
+
+                       // //block editor from taking action while resizing is taking place
+                       // if(self.startColumn.modules.edit){
+                       //      self.startColumn.modules.edit.blocked = false;
+                       // }
+
+                       document.body.removeEventListener("mouseup", mouseMove);
+                       document.body.removeEventListener("mousemove", mouseMove);
+
+                       handle.removeEventListener("touchmove", mouseMove);
+                       handle.removeEventListener("touchend", mouseUp);
+
+                       self.table.element.classList.remove("tabulator-block-select");
+
+                       self.table.options.rowResized.call(this.table, row.getComponent());
+               }
+
+               e.stopPropagation(); //prevent resize from interfereing with movable columns
+
+               //block editor from taking action while resizing is taking place
+               // if(self.startColumn.modules.edit){
+               //      self.startColumn.modules.edit.blocked = true;
+               // }
+
+               self.startY = typeof e.screenY === "undefined" ? e.touches[0].screenY : e.screenY;
+               self.startHeight = row.getHeight();
+
+               document.body.addEventListener("mousemove", mouseMove);
+               document.body.addEventListener("mouseup", mouseUp);
+
+               handle.addEventListener("touchmove", mouseMove, { passive: true });
+               handle.addEventListener("touchend", mouseUp);
+       };
+
+       Tabulator.prototype.registerModule("resizeRows", ResizeRows);
+       var ResizeTable = function ResizeTable(table) {
+               this.table = table; //hold Tabulator object
+               this.binding = false;
+               this.observer = false;
+               this.containerObserver = false;
+
+               this.tableHeight = 0;
+               this.tableWidth = 0;
+               this.containerHeight = 0;
+               this.containerWidth = 0;
+
+               this.autoResize = false;
+       };
+
+       ResizeTable.prototype.initialize = function (row) {
+               var _this82 = this;
+
+               var table = this.table,
+                   tableStyle;
+
+               this.tableHeight = table.element.clientHeight;
+               this.tableWidth = table.element.clientWidth;
+
+               if (table.element.parentNode) {
+                       this.containerHeight = table.element.parentNode.clientHeight;
+                       this.containerWidth = table.element.parentNode.clientWidth;
+               }
+
+               if (typeof ResizeObserver !== "undefined" && table.rowManager.getRenderMode() === "virtual") {
+
+                       this.autoResize = true;
+
+                       this.observer = new ResizeObserver(function (entry) {
+                               if (!table.browserMobile || table.browserMobile && !table.modules.edit.currentCell) {
+
+                                       var nodeHeight = Math.floor(entry[0].contentRect.height);
+                                       var nodeWidth = Math.floor(entry[0].contentRect.width);
+
+                                       if (_this82.tableHeight != nodeHeight || _this82.tableWidth != nodeWidth) {
+                                               _this82.tableHeight = nodeHeight;
+                                               _this82.tableWidth = nodeWidth;
+
+                                               if (table.element.parentNode) {
+                                                       _this82.containerHeight = table.element.parentNode.clientHeight;
+                                                       _this82.containerWidth = table.element.parentNode.clientWidth;
+                                               }
+
+                                               if (table.options.virtualDomHoz) {
+                                                       table.vdomHoz.reinitialize(true);
+                                               }
+
+                                               table.redraw();
+                                       }
+                               }
+                       });
+
+                       this.observer.observe(table.element);
+
+                       tableStyle = window.getComputedStyle(table.element);
+
+                       if (this.table.element.parentNode && !this.table.rowManager.fixedHeight && (tableStyle.getPropertyValue("max-height") || tableStyle.getPropertyValue("min-height"))) {
+
+                               this.containerObserver = new ResizeObserver(function (entry) {
+                                       if (!table.browserMobile || table.browserMobile && !table.modules.edit.currentCell) {
+
+                                               var nodeHeight = Math.floor(entry[0].contentRect.height);
+                                               var nodeWidth = Math.floor(entry[0].contentRect.width);
+
+                                               if (_this82.containerHeight != nodeHeight || _this82.containerWidth != nodeWidth) {
+                                                       _this82.containerHeight = nodeHeight;
+                                                       _this82.containerWidth = nodeWidth;
+                                                       _this82.tableHeight = table.element.clientHeight;
+                                                       _this82.tableWidth = table.element.clientWidth;
+                                               }
+
+                                               if (table.options.virtualDomHoz) {
+                                                       table.vdomHoz.reinitialize(true);
+                                               }
+
+                                               table.redraw();
+                                       }
+                               });
+
+                               this.containerObserver.observe(this.table.element.parentNode);
+                       }
+               } else {
+                       this.binding = function () {
+                               if (!table.browserMobile || table.browserMobile && !table.modules.edit.currentCell) {
+                                       if (table.options.virtualDomHoz) {
+                                               table.vdomHoz.reinitialize(true);
+                                       }
+
+                                       table.redraw();
+                               }
+                       };
+
+                       window.addEventListener("resize", this.binding);
+               }
+       };
+
+       ResizeTable.prototype.clearBindings = function (row) {
+               if (this.binding) {
+                       window.removeEventListener("resize", this.binding);
+               }
+
+               if (this.observer) {
+                       this.observer.unobserve(this.table.element);
+               }
+
+               if (this.containerObserver) {
+                       this.containerObserver.unobserve(this.table.element.parentNode);
+               }
+       };
+
+       Tabulator.prototype.registerModule("resizeTable", ResizeTable);
+       var ResponsiveLayout = function ResponsiveLayout(table) {
+               this.table = table; //hold Tabulator object
+               this.columns = [];
+               this.hiddenColumns = [];
+               this.mode = "";
+               this.index = 0;
+               this.collapseFormatter = [];
+               this.collapseStartOpen = true;
+               this.collapseHandleColumn = false;
+       };
+
+       //generate resposive columns list
+       ResponsiveLayout.prototype.initialize = function () {
+               var self = this,
+                   columns = [];
+
+               this.mode = this.table.options.responsiveLayout;
+               this.collapseFormatter = this.table.options.responsiveLayoutCollapseFormatter || this.formatCollapsedData;
+               this.collapseStartOpen = this.table.options.responsiveLayoutCollapseStartOpen;
+               this.hiddenColumns = [];
+
+               //detemine level of responsivity for each column
+               this.table.columnManager.columnsByIndex.forEach(function (column, i) {
+                       if (column.modules.responsive) {
+                               if (column.modules.responsive.order && column.modules.responsive.visible) {
+                                       column.modules.responsive.index = i;
+                                       columns.push(column);
+
+                                       if (!column.visible && self.mode === "collapse") {
+                                               self.hiddenColumns.push(column);
+                                       }
+                               }
+                       }
+               });
+
+               //sort list by responsivity
+               columns = columns.reverse();
+               columns = columns.sort(function (a, b) {
+                       var diff = b.modules.responsive.order - a.modules.responsive.order;
+                       return diff || b.modules.responsive.index - a.modules.responsive.index;
+               });
+
+               this.columns = columns;
+
+               if (this.mode === "collapse") {
+                       this.generateCollapsedContent();
+               }
+
+               //assign collapse column
+               for (var _iterator = this.table.columnManager.columnsByIndex, _isArray = Array.isArray(_iterator), _i16 = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {
+                       var _ref;
+
+                       if (_isArray) {
+                               if (_i16 >= _iterator.length) break;
+                               _ref = _iterator[_i16++];
+                       } else {
+                               _i16 = _iterator.next();
+                               if (_i16.done) break;
+                               _ref = _i16.value;
+                       }
+
+                       var col = _ref;
+
+                       if (col.definition.formatter == "responsiveCollapse") {
+                               this.collapseHandleColumn = col;
+                               break;
+                       }
+               }
+
+               if (this.collapseHandleColumn) {
+                       if (this.hiddenColumns.length) {
+                               this.collapseHandleColumn.show();
+                       } else {
+                               this.collapseHandleColumn.hide();
+                       }
+               }
+       };
+
+       //define layout information
+       ResponsiveLayout.prototype.initializeColumn = function (column) {
+               var def = column.getDefinition();
+
+               column.modules.responsive = { order: typeof def.responsive === "undefined" ? 1 : def.responsive, visible: def.visible === false ? false : true };
+       };
+
+       ResponsiveLayout.prototype.initializeRow = function (row) {
+               var el;
+
+               if (row.type !== "calc") {
+                       el = document.createElement("div");
+                       el.classList.add("tabulator-responsive-collapse");
+
+                       row.modules.responsiveLayout = {
+                               element: el,
+                               open: this.collapseStartOpen
+                       };
+
+                       if (!this.collapseStartOpen) {
+                               el.style.display = 'none';
+                       }
+               }
+       };
+
+       ResponsiveLayout.prototype.layoutRow = function (row) {
+               var rowEl = row.getElement();
+
+               if (row.modules.responsiveLayout) {
+                       rowEl.appendChild(row.modules.responsiveLayout.element);
+                       this.generateCollapsedRowContent(row);
+               }
+       };
+
+       //update column visibility
+       ResponsiveLayout.prototype.updateColumnVisibility = function (column, visible) {
+               var index;
+               if (column.modules.responsive) {
+                       column.modules.responsive.visible = visible;
+                       this.initialize();
+               }
+       };
+
+       ResponsiveLayout.prototype.hideColumn = function (column) {
+               var colCount = this.hiddenColumns.length;
+
+               column.hide(false, true);
+
+               if (this.mode === "collapse") {
+                       this.hiddenColumns.unshift(column);
+                       this.generateCollapsedContent();
+
+                       if (this.collapseHandleColumn && !colCount) {
+                               this.collapseHandleColumn.show();
+                       }
+               }
+       };
+
+       ResponsiveLayout.prototype.showColumn = function (column) {
+               var index;
+
+               column.show(false, true);
+               //set column width to prevent calculation loops on uninitialized columns
+               column.setWidth(column.getWidth());
+
+               if (this.mode === "collapse") {
+                       index = this.hiddenColumns.indexOf(column);
+
+                       if (index > -1) {
+                               this.hiddenColumns.splice(index, 1);
+                       }
+
+                       this.generateCollapsedContent();
+
+                       if (this.collapseHandleColumn && !this.hiddenColumns.length) {
+                               this.collapseHandleColumn.hide();
+                       }
+               }
+       };
+
+       //redraw columns to fit space
+       ResponsiveLayout.prototype.update = function () {
+               var self = this,
+                   working = true;
+
+               while (working) {
+
+                       var width = self.table.modules.layout.getMode() == "fitColumns" ? self.table.columnManager.getFlexBaseWidth() : self.table.columnManager.getWidth();
+
+                       var diff = (self.table.options.headerVisible ? self.table.columnManager.element.clientWidth : self.table.element.clientWidth) - width;
+
+                       if (diff < 0) {
+                               //table is too wide
+                               var column = self.columns[self.index];
+
+                               if (column) {
+                                       self.hideColumn(column);
+                                       self.index++;
+                               } else {
+                                       working = false;
+                               }
+                       } else {
+
+                               //table has spare space
+                               var _column = self.columns[self.index - 1];
+
+                               if (_column) {
+                                       if (diff > 0) {
+                                               if (diff >= _column.getWidth()) {
+                                                       self.showColumn(_column);
+                                                       self.index--;
+                                               } else {
+                                                       working = false;
+                                               }
+                                       } else {
+                                               working = false;
+                                       }
+                               } else {
+                                       working = false;
+                               }
+                       }
+
+                       if (!self.table.rowManager.activeRowsCount) {
+                               self.table.rowManager.renderEmptyScroll();
+                       }
+               }
+       };
+
+       ResponsiveLayout.prototype.generateCollapsedContent = function () {
+               var self = this,
+                   rows = this.table.rowManager.getDisplayRows();
+
+               rows.forEach(function (row) {
+                       self.generateCollapsedRowContent(row);
+               });
+       };
+
+       ResponsiveLayout.prototype.generateCollapsedRowContent = function (row) {
+               var el, contents;
+
+               if (row.modules.responsiveLayout) {
+                       el = row.modules.responsiveLayout.element;
+
+                       while (el.firstChild) {
+                               el.removeChild(el.firstChild);
+                       }contents = this.collapseFormatter(this.generateCollapsedRowData(row));
+                       if (contents) {
+                               el.appendChild(contents);
+                       }
+               }
+       };
+
+       ResponsiveLayout.prototype.generateCollapsedRowData = function (row) {
+               var self = this,
+                   data = row.getData(),
+                   output = [],
+                   mockCellComponent;
+
+               this.hiddenColumns.forEach(function (column) {
+                       var value = column.getFieldValue(data);
+
+                       if (column.definition.title && column.field) {
+                               if (column.modules.format && self.table.options.responsiveLayoutCollapseUseFormatters) {
+
+                                       mockCellComponent = {
+                                               value: false,
+                                               data: {},
+                                               getValue: function getValue() {
+                                                       return value;
+                                               },
+                                               getData: function getData() {
+                                                       return data;
+                                               },
+                                               getElement: function getElement() {
+                                                       return document.createElement("div");
+                                               },
+                                               getRow: function getRow() {
+                                                       return row.getComponent();
+                                               },
+                                               getColumn: function getColumn() {
+                                                       return column.getComponent();
+                                               }
+                                       };
+
+                                       output.push({
+                                               title: column.definition.title,
+                                               value: column.modules.format.formatter.call(self.table.modules.format, mockCellComponent, column.modules.format.params)
+                                       });
+                               } else {
+                                       output.push({
+                                               title: column.definition.title,
+                                               value: value
+                                       });
+                               }
+                       }
+               });
+
+               return output;
+       };
+
+       ResponsiveLayout.prototype.formatCollapsedData = function (data) {
+               var list = document.createElement("table"),
+                   listContents = "";
+
+               data.forEach(function (item) {
+                       var div = document.createElement("div");
+
+                       if (item.value instanceof Node) {
+                               div.appendChild(item.value);
+                               item.value = div.innerHTML;
+                       }
+
+                       listContents += "<tr><td><strong>" + item.title + "</strong></td><td>" + item.value + "</td></tr>";
+               });
+
+               list.innerHTML = listContents;
+
+               return Object.keys(data).length ? list : "";
+       };
+
+       Tabulator.prototype.registerModule("responsiveLayout", ResponsiveLayout);
+
+       var SelectRow = function SelectRow(table) {
+               this.table = table; //hold Tabulator object
+               this.selecting = false; //flag selecting in progress
+               this.lastClickedRow = false; //last clicked row
+               this.selectPrev = []; //hold previously selected element for drag drop selection
+               this.selectedRows = []; //hold selected rows
+               this.headerCheckboxElement = null; // hold header select element
+       };
+
+       SelectRow.prototype.clearSelectionData = function (silent) {
+               this.selecting = false;
+               this.lastClickedRow = false;
+               this.selectPrev = [];
+               this.selectedRows = [];
+
+               if (!silent) {
+                       this._rowSelectionChanged();
+               }
+       };
+
+       SelectRow.prototype.initializeRow = function (row) {
+               var self = this,
+                   element = row.getElement();
+
+               // trigger end of row selection
+               var endSelect = function endSelect() {
+
+                       setTimeout(function () {
+                               self.selecting = false;
+                       }, 50);
+
+                       document.body.removeEventListener("mouseup", endSelect);
+               };
+
+               row.modules.select = { selected: false };
+
+               //set row selection class
+               if (self.table.options.selectableCheck.call(this.table, row.getComponent())) {
+                       element.classList.add("tabulator-selectable");
+                       element.classList.remove("tabulator-unselectable");
+
+                       if (self.table.options.selectable && self.table.options.selectable != "highlight") {
+                               if (self.table.options.selectableRangeMode === "click") {
+                                       element.addEventListener("click", function (e) {
+                                               if (e.shiftKey) {
+                                                       self.table._clearSelection();
+                                                       self.lastClickedRow = self.lastClickedRow || row;
+
+                                                       var lastClickedRowIdx = self.table.rowManager.getDisplayRowIndex(self.lastClickedRow);
+                                                       var rowIdx = self.table.rowManager.getDisplayRowIndex(row);
+
+                                                       var fromRowIdx = lastClickedRowIdx <= rowIdx ? lastClickedRowIdx : rowIdx;
+                                                       var toRowIdx = lastClickedRowIdx >= rowIdx ? lastClickedRowIdx : rowIdx;
+
+                                                       var rows = self.table.rowManager.getDisplayRows().slice(0);
+                                                       var toggledRows = rows.splice(fromRowIdx, toRowIdx - fromRowIdx + 1);
+
+                                                       if (e.ctrlKey || e.metaKey) {
+                                                               toggledRows.forEach(function (toggledRow) {
+                                                                       if (toggledRow !== self.lastClickedRow) {
+
+                                                                               if (self.table.options.selectable !== true && !self.isRowSelected(row)) {
+                                                                                       if (self.selectedRows.length < self.table.options.selectable) {
+                                                                                               self.toggleRow(toggledRow);
+                                                                                       }
+                                                                               } else {
+                                                                                       self.toggleRow(toggledRow);
+                                                                               }
+                                                                       }
+                                                               });
+                                                               self.lastClickedRow = row;
+                                                       } else {
+                                                               self.deselectRows(undefined, true);
+
+                                                               if (self.table.options.selectable !== true) {
+                                                                       if (toggledRows.length > self.table.options.selectable) {
+                                                                               toggledRows = toggledRows.slice(0, self.table.options.selectable);
+                                                                       }
+                                                               }
+
+                                                               self.selectRows(toggledRows);
+                                                       }
+                                                       self.table._clearSelection();
+                                               } else if (e.ctrlKey || e.metaKey) {
+                                                       self.toggleRow(row);
+                                                       self.lastClickedRow = row;
+                                               } else {
+                                                       self.deselectRows(undefined, true);
+                                                       self.selectRows(row);
+                                                       self.lastClickedRow = row;
+                                               }
+                                       });
+                               } else {
+                                       element.addEventListener("click", function (e) {
+                                               if (!self.table.modExists("edit") || !self.table.modules.edit.getCurrentCell()) {
+                                                       self.table._clearSelection();
+                                               }
+
+                                               if (!self.selecting) {
+                                                       self.toggleRow(row);
+                                               }
+                                       });
+
+                                       element.addEventListener("mousedown", function (e) {
+                                               if (e.shiftKey) {
+                                                       self.table._clearSelection();
+
+                                                       self.selecting = true;
+
+                                                       self.selectPrev = [];
+
+                                                       document.body.addEventListener("mouseup", endSelect);
+                                                       document.body.addEventListener("keyup", endSelect);
+
+                                                       self.toggleRow(row);
+
+                                                       return false;
+                                               }
+                                       });
+
+                                       element.addEventListener("mouseenter", function (e) {
+                                               if (self.selecting) {
+                                                       self.table._clearSelection();
+                                                       self.toggleRow(row);
+
+                                                       if (self.selectPrev[1] == row) {
+                                                               self.toggleRow(self.selectPrev[0]);
+                                                       }
+                                               }
+                                       });
+
+                                       element.addEventListener("mouseout", function (e) {
+                                               if (self.selecting) {
+                                                       self.table._clearSelection();
+                                                       self.selectPrev.unshift(row);
+                                               }
+                                       });
+                               }
+                       }
+               } else {
+                       element.classList.add("tabulator-unselectable");
+                       element.classList.remove("tabulator-selectable");
+               }
+       };
+
+       //toggle row selection
+       SelectRow.prototype.toggleRow = function (row) {
+               if (this.table.options.selectableCheck.call(this.table, row.getComponent())) {
+                       if (row.modules.select && row.modules.select.selected) {
+                               this._deselectRow(row);
+                       } else {
+                               this._selectRow(row);
+                       }
+               }
+       };
+
+       //select a number of rows
+       SelectRow.prototype.selectRows = function (rows) {
+               var _this83 = this;
+
+               var rowMatch;
+
+               switch (typeof rows === 'undefined' ? 'undefined' : _typeof(rows)) {
+                       case "undefined":
+                               this.table.rowManager.rows.forEach(function (row) {
+                                       _this83._selectRow(row, true, true);
+                               });
+
+                               this._rowSelectionChanged();
+                               break;
+
+                       case "string":
+
+                               rowMatch = this.table.rowManager.findRow(rows);
+
+                               if (rowMatch) {
+                                       this._selectRow(rowMatch, true, true);
+                               } else {
+                                       this.table.rowManager.getRows(rows).forEach(function (row) {
+                                               _this83._selectRow(row, true, true);
+                                       });
+                               }
+
+                               this._rowSelectionChanged();
+                               break;
+
+                       default:
+                               if (Array.isArray(rows)) {
+                                       rows.forEach(function (row) {
+                                               _this83._selectRow(row, true, true);
+                                       });
+
+                                       this._rowSelectionChanged();
+                               } else {
+                                       this._selectRow(rows, false, true);
+                               }
+                               break;
+               }
+       };
+
+       //select an individual row
+       SelectRow.prototype._selectRow = function (rowInfo, silent, force) {
+               var index;
+
+               //handle max row count
+               if (!isNaN(this.table.options.selectable) && this.table.options.selectable !== true && !force) {
+                       if (this.selectedRows.length >= this.table.options.selectable) {
+                               if (this.table.options.selectableRollingSelection) {
+                                       this._deselectRow(this.selectedRows[0]);
+                               } else {
+                                       return false;
+                               }
+                       }
+               }
+
+               var row = this.table.rowManager.findRow(rowInfo);
+
+               if (row) {
+                       if (this.selectedRows.indexOf(row) == -1) {
+                               if (!row.modules.select) {
+                                       row.modules.select = {};
+                               }
+
+                               row.modules.select.selected = true;
+                               if (row.modules.select.checkboxEl) {
+                                       row.modules.select.checkboxEl.checked = true;
+                               }
+                               row.getElement().classList.add("tabulator-selected");
+
+                               this.selectedRows.push(row);
+
+                               if (this.table.options.dataTreeSelectPropagate) {
+                                       this.childRowSelection(row, true);
+                               }
+
+                               if (!silent) {
+                                       this.table.options.rowSelected.call(this.table, row.getComponent());
+                               }
+
+                               this._rowSelectionChanged(silent);
+                       }
+               } else {
+                       if (!silent) {
+                               console.warn("Selection Error - No such row found, ignoring selection:" + rowInfo);
+                       }
+               }
+       };
+
+       SelectRow.prototype.isRowSelected = function (row) {
+               return this.selectedRows.indexOf(row) !== -1;
+       };
+
+       //deselect a number of rows
+       SelectRow.prototype.deselectRows = function (rows, silent) {
+               var self = this,
+                   rowCount;
+
+               if (typeof rows == "undefined") {
+
+                       rowCount = self.selectedRows.length;
+
+                       for (var _i17 = 0; _i17 < rowCount; _i17++) {
+                               self._deselectRow(self.selectedRows[0], true);
+                       }
+
+                       self._rowSelectionChanged(silent);
+               } else {
+                       if (Array.isArray(rows)) {
+                               rows.forEach(function (row) {
+                                       self._deselectRow(row, true);
+                               });
+
+                               self._rowSelectionChanged(silent);
+                       } else {
+                               self._deselectRow(rows, silent);
+                       }
+               }
+       };
+
+       //deselect an individual row
+       SelectRow.prototype._deselectRow = function (rowInfo, silent) {
+               var self = this,
+                   row = self.table.rowManager.findRow(rowInfo),
+                   index;
+
+               if (row) {
+                       index = self.selectedRows.findIndex(function (selectedRow) {
+                               return selectedRow == row;
+                       });
+
+                       if (index > -1) {
+
+                               if (!row.modules.select) {
+                                       row.modules.select = {};
+                               }
+
+                               row.modules.select.selected = false;
+                               if (row.modules.select.checkboxEl) {
+                                       row.modules.select.checkboxEl.checked = false;
+                               }
+                               row.getElement().classList.remove("tabulator-selected");
+                               self.selectedRows.splice(index, 1);
+
+                               if (this.table.options.dataTreeSelectPropagate) {
+                                       this.childRowSelection(row, false);
+                               }
+
+                               if (!silent) {
+                                       self.table.options.rowDeselected.call(this.table, row.getComponent());
+                               }
+
+                               self._rowSelectionChanged(silent);
+                       }
+               } else {
+                       if (!silent) {
+                               console.warn("Deselection Error - No such row found, ignoring selection:" + rowInfo);
+                       }
+               }
+       };
+
+       SelectRow.prototype.getSelectedData = function () {
+               var data = [];
+
+               this.selectedRows.forEach(function (row) {
+                       data.push(row.getData());
+               });
+
+               return data;
+       };
+
+       SelectRow.prototype.getSelectedRows = function () {
+
+               var rows = [];
+
+               this.selectedRows.forEach(function (row) {
+                       rows.push(row.getComponent());
+               });
+
+               return rows;
+       };
+
+       SelectRow.prototype._rowSelectionChanged = function (silent) {
+               if (this.headerCheckboxElement) {
+                       if (this.selectedRows.length === 0) {
+                               this.headerCheckboxElement.checked = false;
+                               this.headerCheckboxElement.indeterminate = false;
+                       } else if (this.table.rowManager.rows.length === this.selectedRows.length) {
+                               this.headerCheckboxElement.checked = true;
+                               this.headerCheckboxElement.indeterminate = false;
+                       } else {
+                               this.headerCheckboxElement.indeterminate = true;
+                               this.headerCheckboxElement.checked = false;
+                       }
+               }
+
+               if (!silent) {
+                       this.table.options.rowSelectionChanged.call(this.table, this.getSelectedData(), this.getSelectedRows());
+               }
+       };
+
+       SelectRow.prototype.registerRowSelectCheckbox = function (row, element) {
+               if (!row._row.modules.select) {
+                       row._row.modules.select = {};
+               }
+
+               row._row.modules.select.checkboxEl = element;
+       };
+
+       SelectRow.prototype.registerHeaderSelectCheckbox = function (element) {
+               this.headerCheckboxElement = element;
+       };
+
+       SelectRow.prototype.childRowSelection = function (row, select) {
+               var children = this.table.modules.dataTree.getChildren(row);
+
+               if (select) {
+                       for (var _iterator2 = children, _isArray2 = Array.isArray(_iterator2), _i18 = 0, _iterator2 = _isArray2 ? _iterator2 : _iterator2[Symbol.iterator]();;) {
+                               var _ref2;
+
+                               if (_isArray2) {
+                                       if (_i18 >= _iterator2.length) break;
+                                       _ref2 = _iterator2[_i18++];
+                               } else {
+                                       _i18 = _iterator2.next();
+                                       if (_i18.done) break;
+                                       _ref2 = _i18.value;
+                               }
+
+                               var child = _ref2;
+
+                               this._selectRow(child, true);
+                       }
+               } else {
+                       for (var _iterator3 = children, _isArray3 = Array.isArray(_iterator3), _i19 = 0, _iterator3 = _isArray3 ? _iterator3 : _iterator3[Symbol.iterator]();;) {
+                               var _ref3;
+
+                               if (_isArray3) {
+                                       if (_i19 >= _iterator3.length) break;
+                                       _ref3 = _iterator3[_i19++];
+                               } else {
+                                       _i19 = _iterator3.next();
+                                       if (_i19.done) break;
+                                       _ref3 = _i19.value;
+                               }
+
+                               var _child = _ref3;
+
+                               this._deselectRow(_child, true);
+                       }
+               }
+       };
+
+       Tabulator.prototype.registerModule("selectRow", SelectRow);
+
+       var Sort = function Sort(table) {
+               this.table = table; //hold Tabulator object
+               this.sortList = []; //holder current sort
+               this.changed = false; //has the sort changed since last render
+       };
+
+       //initialize column header for sorting
+       Sort.prototype.initializeColumn = function (column, content) {
+               var self = this,
+                   sorter = false,
+                   colEl,
+                   arrowEl;
+
+               switch (_typeof(column.definition.sorter)) {
+                       case "string":
+                               if (self.sorters[column.definition.sorter]) {
+                                       sorter = self.sorters[column.definition.sorter];
+                               } else {
+                                       console.warn("Sort Error - No such sorter found: ", column.definition.sorter);
+                               }
+                               break;
+
+                       case "function":
+                               sorter = column.definition.sorter;
+                               break;
+               }
+
+               column.modules.sort = {
+                       sorter: sorter, dir: "none",
+                       params: column.definition.sorterParams || {},
+                       startingDir: column.definition.headerSortStartingDir || "asc",
+                       tristate: typeof column.definition.headerSortTristate !== "undefined" ? column.definition.headerSortTristate : this.table.options.headerSortTristate
+               };
+
+               if (typeof column.definition.headerSort === "undefined" ? this.table.options.headerSort !== false : column.definition.headerSort !== false) {
+
+                       colEl = column.getElement();
+
+                       colEl.classList.add("tabulator-sortable");
+
+                       arrowEl = document.createElement("div");
+                       arrowEl.classList.add("tabulator-col-sorter");
+
+                       if (_typeof(this.table.options.headerSortElement) == "object") {
+                               arrowEl.appendChild(this.table.options.headerSortElement);
+                       } else {
+                               arrowEl.innerHTML = this.table.options.headerSortElement;
+                       }
+
+                       //create sorter arrow
+                       content.appendChild(arrowEl);
+
+                       column.modules.sort.element = arrowEl;
+
+                       //sort on click
+                       colEl.addEventListener("click", function (e) {
+                               var dir = "",
+                                   sorters = [],
+                                   match = false;
+
+                               if (column.modules.sort) {
+                                       if (column.modules.sort.tristate) {
+                                               if (column.modules.sort.dir == "none") {
+                                                       dir = column.modules.sort.startingDir;
+                                               } else {
+                                                       if (column.modules.sort.dir == column.modules.sort.startingDir) {
+                                                               dir = column.modules.sort.dir == "asc" ? "desc" : "asc";
+                                                       } else {
+                                                               dir = "none";
+                                                       }
+                                               }
+                                       } else {
+                                               switch (column.modules.sort.dir) {
+                                                       case "asc":
+                                                               dir = "desc";
+                                                               break;
+
+                                                       case "desc":
+                                                               dir = "asc";
+                                                               break;
+
+                                                       default:
+                                                               dir = column.modules.sort.startingDir;
+                                               }
+                                       }
+
+                                       if (self.table.options.columnHeaderSortMulti && (e.shiftKey || e.ctrlKey)) {
+                                               sorters = self.getSort();
+
+                                               match = sorters.findIndex(function (sorter) {
+                                                       return sorter.field === column.getField();
+                                               });
+
+                                               if (match > -1) {
+                                                       sorters[match].dir = dir;
+
+                                                       if (match != sorters.length - 1) {
+                                                               match = sorters.splice(match, 1)[0];
+                                                               if (dir != "none") {
+                                                                       sorters.push(match);
+                                                               }
+                                                       }
+                                               } else {
+                                                       if (dir != "none") {
+                                                               sorters.push({ column: column, dir: dir });
+                                                       }
+                                               }
+
+                                               //add to existing sort
+                                               self.setSort(sorters);
+                                       } else {
+                                               if (dir == "none") {
+                                                       self.clear();
+                                               } else {
+                                                       //sort by column only
+                                                       self.setSort(column, dir);
+                                               }
+                                       }
+
+                                       self.table.rowManager.sorterRefresh(!self.sortList.length);
+                               }
+                       });
+               }
+       };
+
+       //check if the sorters have changed since last use
+       Sort.prototype.hasChanged = function () {
+               var changed = this.changed;
+               this.changed = false;
+               return changed;
+       };
+
+       //return current sorters
+       Sort.prototype.getSort = function () {
+               var self = this,
+                   sorters = [];
+
+               self.sortList.forEach(function (item) {
+                       if (item.column) {
+                               sorters.push({ column: item.column.getComponent(), field: item.column.getField(), dir: item.dir });
+                       }
+               });
+
+               return sorters;
+       };
+
+       //change sort list and trigger sort
+       Sort.prototype.setSort = function (sortList, dir) {
+               var self = this,
+                   newSortList = [];
+
+               if (!Array.isArray(sortList)) {
+                       sortList = [{ column: sortList, dir: dir }];
+               }
+
+               sortList.forEach(function (item) {
+                       var column;
+
+                       column = self.table.columnManager.findColumn(item.column);
+
+                       if (column) {
+                               item.column = column;
+                               newSortList.push(item);
+                               self.changed = true;
+                       } else {
+                               console.warn("Sort Warning - Sort field does not exist and is being ignored: ", item.column);
+                       }
+               });
+
+               self.sortList = newSortList;
+
+               if (this.table.options.persistence && this.table.modExists("persistence", true) && this.table.modules.persistence.config.sort) {
+                       this.table.modules.persistence.save("sort");
+               }
+       };
+
+       //clear sorters
+       Sort.prototype.clear = function () {
+               this.setSort([]);
+       };
+
+       //find appropriate sorter for column
+       Sort.prototype.findSorter = function (column) {
+               var row = this.table.rowManager.activeRows[0],
+                   sorter = "string",
+                   field,
+                   value;
+
+               if (row) {
+                       row = row.getData();
+                       field = column.getField();
+
+                       if (field) {
+
+                               value = column.getFieldValue(row);
+
+                               switch (typeof value === 'undefined' ? 'undefined' : _typeof(value)) {
+                                       case "undefined":
+                                               sorter = "string";
+                                               break;
+
+                                       case "boolean":
+                                               sorter = "boolean";
+                                               break;
+
+                                       default:
+                                               if (!isNaN(value) && value !== "") {
+                                                       sorter = "number";
+                                               } else {
+                                                       if (value.match(/((^[0-9]+[a-z]+)|(^[a-z]+[0-9]+))+$/i)) {
+                                                               sorter = "alphanum";
+                                                       }
+                                               }
+                                               break;
+                               }
+                       }
+               }
+
+               return this.sorters[sorter];
+       };
+
+       //work through sort list sorting data
+       Sort.prototype.sort = function (data) {
+               var self = this,
+                   sortList = this.table.options.sortOrderReverse ? self.sortList.slice().reverse() : self.sortList,
+                   sortListActual = [],
+                   rowComponents = [],
+                   lastSort;
+
+               if (self.table.options.dataSorting) {
+                       self.table.options.dataSorting.call(self.table, self.getSort());
+               }
+
+               self.clearColumnHeaders();
+
+               if (!self.table.options.ajaxSorting) {
+
+                       //build list of valid sorters and trigger column specific callbacks before sort begins
+                       sortList.forEach(function (item, i) {
+                               var sortObj = item.column.modules.sort;
+
+                               if (item.column && sortObj) {
+
+                                       //if no sorter has been defined, take a guess
+                                       if (!sortObj.sorter) {
+                                               sortObj.sorter = self.findSorter(item.column);
+                                       }
+
+                                       item.params = typeof sortObj.params === "function" ? sortObj.params(item.column.getComponent(), item.dir) : sortObj.params;
+
+                                       sortListActual.push(item);
+                               }
+
+                               self.setColumnHeader(item.column, item.dir);
+                       });
+
+                       //sort data
+                       if (sortListActual.length) {
+                               self._sortItems(data, sortListActual);
+                       }
+               } else {
+                       sortList.forEach(function (item, i) {
+                               self.setColumnHeader(item.column, item.dir);
+                       });
+               }
+
+               if (self.table.options.dataSorted) {
+                       data.forEach(function (row) {
+                               rowComponents.push(row.getComponent());
+                       });
+
+                       self.table.options.dataSorted.call(self.table, self.getSort(), rowComponents);
+               }
+       };
+
+       //clear sort arrows on columns
+       Sort.prototype.clearColumnHeaders = function () {
+               this.table.columnManager.getRealColumns().forEach(function (column) {
+                       if (column.modules.sort) {
+                               column.modules.sort.dir = "none";
+                               column.getElement().setAttribute("aria-sort", "none");
+                       }
+               });
+       };
+
+       //set the column header sort direction
+       Sort.prototype.setColumnHeader = function (column, dir) {
+               column.modules.sort.dir = dir;
+               column.getElement().setAttribute("aria-sort", dir);
+       };
+
+       //sort each item in sort list
+       Sort.prototype._sortItems = function (data, sortList) {
+               var _this84 = this;
+
+               var sorterCount = sortList.length - 1;
+
+               data.sort(function (a, b) {
+                       var result;
+
+                       for (var i = sorterCount; i >= 0; i--) {
+                               var sortItem = sortList[i];
+
+                               result = _this84._sortRow(a, b, sortItem.column, sortItem.dir, sortItem.params);
+
+                               if (result !== 0) {
+                                       break;
+                               }
+                       }
+
+                       return result;
+               });
+       };
+
+       //process individual rows for a sort function on active data
+       Sort.prototype._sortRow = function (a, b, column, dir, params) {
+               var el1Comp, el2Comp, colComp;
+
+               //switch elements depending on search direction
+               var el1 = dir == "asc" ? a : b;
+               var el2 = dir == "asc" ? b : a;
+
+               a = column.getFieldValue(el1.getData());
+               b = column.getFieldValue(el2.getData());
+
+               a = typeof a !== "undefined" ? a : "";
+               b = typeof b !== "undefined" ? b : "";
+
+               el1Comp = el1.getComponent();
+               el2Comp = el2.getComponent();
+
+               return column.modules.sort.sorter.call(this, a, b, el1Comp, el2Comp, column.getComponent(), dir, params);
+       };
+
+       //default data sorters
+       Sort.prototype.sorters = {
+
+               //sort numbers
+               number: function number(a, b, aRow, bRow, column, dir, params) {
+                       var alignEmptyValues = params.alignEmptyValues;
+                       var decimal = params.decimalSeparator || ".";
+                       var thousand = params.thousandSeparator || ",";
+                       var emptyAlign = 0;
+
+                       a = parseFloat(String(a).split(thousand).join("").split(decimal).join("."));
+                       b = parseFloat(String(b).split(thousand).join("").split(decimal).join("."));
+
+                       //handle non numeric values
+                       if (isNaN(a)) {
+                               emptyAlign = isNaN(b) ? 0 : -1;
+                       } else if (isNaN(b)) {
+                               emptyAlign = 1;
+                       } else {
+                               //compare valid values
+                               return a - b;
+                       }
+
+                       //fix empty values in position
+                       if (alignEmptyValues === "top" && dir === "desc" || alignEmptyValues === "bottom" && dir === "asc") {
+                               emptyAlign *= -1;
+                       }
+
+                       return emptyAlign;
+               },
+
+               //sort strings
+               string: function string(a, b, aRow, bRow, column, dir, params) {
+                       var alignEmptyValues = params.alignEmptyValues;
+                       var emptyAlign = 0;
+                       var locale;
+
+                       //handle empty values
+                       if (!a) {
+                               emptyAlign = !b ? 0 : -1;
+                       } else if (!b) {
+                               emptyAlign = 1;
+                       } else {
+                               //compare valid values
+                               switch (_typeof(params.locale)) {
+                                       case "boolean":
+                                               if (params.locale) {
+                                                       locale = this.table.modules.localize.getLocale();
+                                               }
+                                               break;
+                                       case "string":
+                                               locale = params.locale;
+                                               break;
+                               }
+
+                               return String(a).toLowerCase().localeCompare(String(b).toLowerCase(), locale);
+                       }
+
+                       //fix empty values in position
+                       if (alignEmptyValues === "top" && dir === "desc" || alignEmptyValues === "bottom" && dir === "asc") {
+                               emptyAlign *= -1;
+                       }
+
+                       return emptyAlign;
+               },
+
+               //sort date
+               date: function date(a, b, aRow, bRow, column, dir, params) {
+                       if (!params.format) {
+                               params.format = "DD/MM/YYYY";
+                       }
+
+                       return this.sorters.datetime.call(this, a, b, aRow, bRow, column, dir, params);
+               },
+
+               //sort HH:mm formatted times
+               time: function time(a, b, aRow, bRow, column, dir, params) {
+                       if (!params.format) {
+                               params.format = "HH:mm";
+                       }
+
+                       return this.sorters.datetime.call(this, a, b, aRow, bRow, column, dir, params);
+               },
+
+               //sort datetime
+               datetime: function datetime(a, b, aRow, bRow, column, dir, params) {
+                       var format = params.format || "DD/MM/YYYY HH:mm:ss",
+                           alignEmptyValues = params.alignEmptyValues,
+                           emptyAlign = 0;
+
+                       if (typeof moment != "undefined") {
+                               a = moment(a, format);
+                               b = moment(b, format);
+
+                               if (!a.isValid()) {
+                                       emptyAlign = !b.isValid() ? 0 : -1;
+                               } else if (!b.isValid()) {
+                                       emptyAlign = 1;
+                               } else {
+                                       //compare valid values
+                                       return a - b;
+                               }
+
+                               //fix empty values in position
+                               if (alignEmptyValues === "top" && dir === "desc" || alignEmptyValues === "bottom" && dir === "asc") {
+                                       emptyAlign *= -1;
+                               }
+
+                               return emptyAlign;
+                       } else {
+                               console.error("Sort Error - 'datetime' sorter is dependant on moment.js");
+                       }
+               },
+
+               //sort booleans
+               boolean: function boolean(a, b, aRow, bRow, column, dir, params) {
+                       var el1 = a === true || a === "true" || a === "True" || a === 1 ? 1 : 0;
+                       var el2 = b === true || b === "true" || b === "True" || b === 1 ? 1 : 0;
+
+                       return el1 - el2;
+               },
+
+               //sort if element contains any data
+               array: function array(a, b, aRow, bRow, column, dir, params) {
+                       var el1 = 0;
+                       var el2 = 0;
+                       var type = params.type || "length";
+                       var alignEmptyValues = params.alignEmptyValues;
+                       var emptyAlign = 0;
+
+                       function calc(value) {
+
+                               switch (type) {
+                                       case "length":
+                                               return value.length;
+                                               break;
+
+                                       case "sum":
+                                               return value.reduce(function (c, d) {
+                                                       return c + d;
+                                               });
+                                               break;
+
+                                       case "max":
+                                               return Math.max.apply(null, value);
+                                               break;
+
+                                       case "min":
+                                               return Math.min.apply(null, value);
+                                               break;
+
+                                       case "avg":
+                                               return value.reduce(function (c, d) {
+                                                       return c + d;
+                                               }) / value.length;
+                                               break;
+                               }
+                       }
+
+                       //handle non array values
+                       if (!Array.isArray(a)) {
+                               alignEmptyValues = !Array.isArray(b) ? 0 : -1;
+                       } else if (!Array.isArray(b)) {
+                               alignEmptyValues = 1;
+                       } else {
+
+                               //compare valid values
+                               el1 = a ? calc(a) : 0;
+                               el2 = b ? calc(b) : 0;
+
+                               return el1 - el2;
+                       }
+
+                       //fix empty values in position
+                       if (alignEmptyValues === "top" && dir === "desc" || alignEmptyValues === "bottom" && dir === "asc") {
+                               emptyAlign *= -1;
+                       }
+
+                       return emptyAlign;
+               },
+
+               //sort if element contains any data
+               exists: function exists(a, b, aRow, bRow, column, dir, params) {
+                       var el1 = typeof a == "undefined" ? 0 : 1;
+                       var el2 = typeof b == "undefined" ? 0 : 1;
+
+                       return el1 - el2;
+               },
+
+               //sort alpha numeric strings
+               alphanum: function alphanum(as, bs, aRow, bRow, column, dir, params) {
+                       var a,
+                           b,
+                           a1,
+                           b1,
+                           i = 0,
+                           L,
+                           rx = /(\d+)|(\D+)/g,
+                           rd = /\d/;
+                       var alignEmptyValues = params.alignEmptyValues;
+                       var emptyAlign = 0;
+
+                       //handle empty values
+                       if (!as && as !== 0) {
+                               emptyAlign = !bs && bs !== 0 ? 0 : -1;
+                       } else if (!bs && bs !== 0) {
+                               emptyAlign = 1;
+                       } else {
+
+                               if (isFinite(as) && isFinite(bs)) return as - bs;
+                               a = String(as).toLowerCase();
+                               b = String(bs).toLowerCase();
+                               if (a === b) return 0;
+                               if (!(rd.test(a) && rd.test(b))) return a > b ? 1 : -1;
+                               a = a.match(rx);
+                               b = b.match(rx);
+                               L = a.length > b.length ? b.length : a.length;
+                               while (i < L) {
+                                       a1 = a[i];
+                                       b1 = b[i++];
+                                       if (a1 !== b1) {
+                                               if (isFinite(a1) && isFinite(b1)) {
+                                                       if (a1.charAt(0) === "0") a1 = "." + a1;
+                                                       if (b1.charAt(0) === "0") b1 = "." + b1;
+                                                       return a1 - b1;
+                                               } else return a1 > b1 ? 1 : -1;
+                                       }
+                               }
+
+                               return a.length > b.length;
+                       }
+
+                       //fix empty values in position
+                       if (alignEmptyValues === "top" && dir === "desc" || alignEmptyValues === "bottom" && dir === "asc") {
+                               emptyAlign *= -1;
+                       }
+
+                       return emptyAlign;
+               }
+       };
+
+       Tabulator.prototype.registerModule("sort", Sort);
+
+       var Validate = function Validate(table) {
+               this.table = table;
+               this.invalidCells = [];
+       };
+
+       //validate
+       Validate.prototype.initializeColumn = function (column) {
+               var self = this,
+                   config = [],
+                   validator;
+
+               if (column.definition.validator) {
+
+                       if (Array.isArray(column.definition.validator)) {
+                               column.definition.validator.forEach(function (item) {
+                                       validator = self._extractValidator(item);
+
+                                       if (validator) {
+                                               config.push(validator);
+                                       }
+                               });
+                       } else {
+                               validator = this._extractValidator(column.definition.validator);
+
+                               if (validator) {
+                                       config.push(validator);
+                               }
+                       }
+
+                       column.modules.validate = config.length ? config : false;
+               }
+       };
+
+       Validate.prototype._extractValidator = function (value) {
+               var type, params, pos;
+
+               switch (typeof value === 'undefined' ? 'undefined' : _typeof(value)) {
+                       case "string":
+                               pos = value.indexOf(':');
+
+                               if (pos > -1) {
+                                       type = value.substring(0, pos);
+                                       params = value.substring(pos + 1);
+                               } else {
+                                       type = value;
+                               }
+
+                               return this._buildValidator(type, params);
+                               break;
+
+                       case "function":
+                               return this._buildValidator(value);
+                               break;
+
+                       case "object":
+                               return this._buildValidator(value.type, value.parameters);
+                               break;
+               }
+       };
+
+       Validate.prototype._buildValidator = function (type, params) {
+
+               var func = typeof type == "function" ? type : this.validators[type];
+
+               if (!func) {
+                       console.warn("Validator Setup Error - No matching validator found:", type);
+                       return false;
+               } else {
+                       return {
+                               type: typeof type == "function" ? "function" : type,
+                               func: func,
+                               params: params
+                       };
+               }
+       };
+
+       Validate.prototype.validate = function (validators, cell, value) {
+               var self = this,
+                   valid = [],
+                   invalidIndex = this.invalidCells.indexOf(cell);
+
+               if (validators) {
+                       validators.forEach(function (item) {
+                               if (!item.func.call(self, cell.getComponent(), value, item.params)) {
+                                       valid.push({
+                                               type: item.type,
+                                               parameters: item.params
+                                       });
+                               }
+                       });
+               }
+
+               valid = valid.length ? valid : true;
+
+               if (!cell.modules.validate) {
+                       cell.modules.validate = {};
+               }
+
+               if (valid === true) {
+                       cell.modules.validate.invalid = false;
+                       cell.getElement().classList.remove("tabulator-validation-fail");
+
+                       if (invalidIndex > -1) {
+                               this.invalidCells.splice(invalidIndex, 1);
+                       }
+               } else {
+                       cell.modules.validate.invalid = true;
+
+                       if (this.table.options.validationMode !== "manual") {
+                               cell.getElement().classList.add("tabulator-validation-fail");
+                       }
+
+                       if (invalidIndex == -1) {
+                               this.invalidCells.push(cell);
+                       }
+               }
+
+               return valid;
+       };
+
+       Validate.prototype.getInvalidCells = function () {
+               var output = [];
+
+               this.invalidCells.forEach(function (cell) {
+                       output.push(cell.getComponent());
+               });
+
+               return output;
+       };
+
+       Validate.prototype.clearValidation = function (cell) {
+               var invalidIndex;
+
+               if (cell.modules.validate && cell.modules.validate.invalid) {
+
+                       cell.getElement().classList.remove("tabulator-validation-fail");
+                       cell.modules.validate.invalid = false;
+
+                       invalidIndex = this.invalidCells.indexOf(cell);
+
+                       if (invalidIndex > -1) {
+                               this.invalidCells.splice(invalidIndex, 1);
+                       }
+               }
+       };
+
+       Validate.prototype.validators = {
+
+               //is integer
+               integer: function integer(cell, value, parameters) {
+                       if (value === "" || value === null || typeof value === "undefined") {
+                               return true;
+                       }
+                       value = Number(value);
+                       return typeof value === 'number' && isFinite(value) && Math.floor(value) === value;
+               },
+
+               //is float
+               float: function float(cell, value, parameters) {
+                       if (value === "" || value === null || typeof value === "undefined") {
+                               return true;
+                       }
+                       value = Number(value);
+                       return typeof value === 'number' && isFinite(value) && value % 1 !== 0;
+               },
+
+               //must be a number
+               numeric: function numeric(cell, value, parameters) {
+                       if (value === "" || value === null || typeof value === "undefined") {
+                               return true;
+                       }
+                       return !isNaN(value);
+               },
+
+               //must be a string
+               string: function string(cell, value, parameters) {
+                       if (value === "" || value === null || typeof value === "undefined") {
+                               return true;
+                       }
+                       return isNaN(value);
+               },
+
+               //maximum value
+               max: function max(cell, value, parameters) {
+                       if (value === "" || value === null || typeof value === "undefined") {
+                               return true;
+                       }
+                       return parseFloat(value) <= parameters;
+               },
+
+               //minimum value
+               min: function min(cell, value, parameters) {
+                       if (value === "" || value === null || typeof value === "undefined") {
+                               return true;
+                       }
+                       return parseFloat(value) >= parameters;
+               },
+
+               //starts with  value
+               starts: function starts(cell, value, parameters) {
+                       if (value === "" || value === null || typeof value === "undefined") {
+                               return true;
+                       }
+                       return String(value).toLowerCase().startsWith(String(parameters).toLowerCase());
+               },
+
+               //ends with  value
+               ends: function ends(cell, value, parameters) {
+                       if (value === "" || value === null || typeof value === "undefined") {
+                               return true;
+                       }
+                       return String(value).toLowerCase().endsWith(String(parameters).toLowerCase());
+               },
+
+               //minimum string length
+               minLength: function minLength(cell, value, parameters) {
+                       if (value === "" || value === null || typeof value === "undefined") {
+                               return true;
+                       }
+                       return String(value).length >= parameters;
+               },
+
+               //maximum string length
+               maxLength: function maxLength(cell, value, parameters) {
+                       if (value === "" || value === null || typeof value === "undefined") {
+                               return true;
+                       }
+                       return String(value).length <= parameters;
+               },
+
+               //in provided value list
+               in: function _in(cell, value, parameters) {
+                       if (value === "" || value === null || typeof value === "undefined") {
+                               return true;
+                       }
+                       if (typeof parameters == "string") {
+                               parameters = parameters.split("|");
+                       }
+
+                       return value === "" || parameters.indexOf(value) > -1;
+               },
+
+               //must match provided regex
+               regex: function regex(cell, value, parameters) {
+                       if (value === "" || value === null || typeof value === "undefined") {
+                               return true;
+                       }
+                       var reg = new RegExp(parameters);
+
+                       return reg.test(value);
+               },
+
+               //value must be unique in this column
+               unique: function unique(cell, value, parameters) {
+                       if (value === "" || value === null || typeof value === "undefined") {
+                               return true;
+                       }
+                       var unique = true;
+
+                       var cellData = cell.getData();
+                       var column = cell.getColumn()._getSelf();
+
+                       this.table.rowManager.rows.forEach(function (row) {
+                               var data = row.getData();
+
+                               if (data !== cellData) {
+                                       if (value == column.getFieldValue(data)) {
+                                               unique = false;
+                                       }
+                               }
+                       });
+
+                       return unique;
+               },
+
+               //must have a value
+               required: function required(cell, value, parameters) {
+                       return value !== "" && value !== null && typeof value !== "undefined";
+               }
+       };
+
+       Tabulator.prototype.registerModule("validate", Validate);
+
+       return Tabulator;
+});
\ No newline at end of file
diff --git a/website/js/vendor/tabulator/js/tabulator.min.js b/website/js/vendor/tabulator/js/tabulator.min.js
new file mode 100644 (file)
index 0000000..314b978
--- /dev/null
@@ -0,0 +1,13 @@
+/* Tabulator v4.8.3 (c) Oliver Folkerd */
+var _typeof="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};!function(e,t){"object"===("undefined"==typeof exports?"undefined":_typeof(exports))&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):e.Tabulator=t()}(this,function(){"use strict";Array.prototype.findIndex||Object.defineProperty(Array.prototype,"findIndex",{value:function(e){if(null==this)throw new TypeError('"this" is null or not defined');var t=Object(this),o=t.length>>>0;if("function"!=typeof e)throw new TypeError("predicate must be a function");for(var i=arguments[1],n=0;n<o;){var s=t[n];if(e.call(i,s,n,t))return n;n++}return-1}}),Array.prototype.find||Object.defineProperty(Array.prototype,"find",{value:function(e){if(null==this)throw new TypeError('"this" is null or not defined');var t=Object(this),o=t.length>>>0;if("function"!=typeof e)throw new TypeError("predicate must be a function");for(var i=arguments[1],n=0;n<o;){var s=t[n];if(e.call(i,s,n,t))return s;n++}}}),String.prototype.includes||(String.prototype.includes=function(e,t){if(e instanceof RegExp)throw TypeError("first argument must not be a RegExp");return void 0===t&&(t=0),-1!==this.indexOf(e,t)}),Array.prototype.includes||Object.defineProperty(Array.prototype,"includes",{value:function(e,t){if(null==this)throw new TypeError('"this" is null or not defined');var o=Object(this),i=o.length>>>0;if(0===i)return!1;for(var n=0|t,s=Math.max(n>=0?n:i-Math.abs(n),0);s<i;){if(function(e,t){return e===t||"number"==typeof e&&"number"==typeof t&&isNaN(e)&&isNaN(t)}(o[s],e))return!0;s++}return!1}}),"function"!=typeof Object.assign&&Object.defineProperty(Object,"assign",{value:function(e,t){if(null===e||void 0===e)throw new TypeError("Cannot convert undefined or null to object");for(var o=Object(e),i=1;i<arguments.length;i++){var n=arguments[i];if(null!==n&&void 0!==n)for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(o[s]=n[s])}return o},writable:!0,configurable:!0});var t=function(e){this.table=e,this.blockHozScrollEvent=!1,this.headersElement=this.createHeadersElement(),this.element=this.createHeaderElement(),this.rowManager=null,this.columns=[],this.columnsByIndex=[],this.columnsByField={},this.scrollLeft=0,this.element.insertBefore(this.headersElement,this.element.firstChild)};t.prototype.createHeadersElement=function(){var e=document.createElement("div");return e.classList.add("tabulator-headers"),e},t.prototype.createHeaderElement=function(){var e=document.createElement("div");return e.classList.add("tabulator-header"),this.table.options.headerVisible||e.classList.add("tabulator-header-hidden"),e},t.prototype.initialize=function(){},t.prototype.setRowManager=function(e){this.rowManager=e},t.prototype.getElement=function(){return this.element},t.prototype.getHeadersElement=function(){return this.headersElement},t.prototype.scrollHorizontal=function(e){var t=0,o=this.element.scrollWidth-this.table.element.clientWidth;this.element.scrollLeft=e,e>o?(t=e-o,this.element.style.marginLeft=-t+"px"):this.element.style.marginLeft=0,this.scrollLeft=e,this.table.modExists("frozenColumns")&&this.table.modules.frozenColumns.scrollHorizontal()},t.prototype.generateColumnsFromRowData=function(e){var t,o,i=[],n=this.table.options.autoColumnsDefinitions;if(e&&e.length){t=e[0];for(var s in t){var a={field:s,title:s},r=t[s];switch(void 0===r?"undefined":_typeof(r)){case"undefined":o="string";break;case"boolean":o="boolean";break;case"object":o=Array.isArray(r)?"array":"string";break;default:o=isNaN(r)||""===r?r.match(/((^[0-9]+[a-z]+)|(^[a-z]+[0-9]+))+$/i)?"alphanum":"string":"number"}a.sorter=o,i.push(a)}if(n)switch(void 0===n?"undefined":_typeof(n)){case"function":this.table.options.columns=n.call(this.table,i);break;case"object":Array.isArray(n)?i.forEach(function(e){var t=n.find(function(t){return t.field===e.field});t&&Object.assign(e,t)}):i.forEach(function(e){n[e.field]&&Object.assign(e,n[e.field])}),this.table.options.columns=i}else this.table.options.columns=i;this.setColumns(this.table.options.columns)}},t.prototype.setColumns=function(e,t){for(var o=this;o.headersElement.firstChild;)o.headersElement.removeChild(o.headersElement.firstChild);o.columns=[],o.columnsByIndex=[],o.columnsByField={},o.table.modExists("frozenColumns")&&o.table.modules.frozenColumns.reset(),e.forEach(function(e,t){o._addColumn(e)}),o._reIndexColumns(),o.table.options.responsiveLayout&&o.table.modExists("responsiveLayout",!0)&&o.table.modules.responsiveLayout.initialize(),this.table.options.virtualDomHoz&&this.table.vdomHoz.reinitialize(!1,!0),o.redraw(!0)},t.prototype._addColumn=function(e,t,o){var i=new n(e,this),s=i.getElement(),a=o?this.findColumnIndex(o):o;if(o&&a>-1){var r=this.columns.indexOf(o.getTopColumn()),l=o.getElement();t?(this.columns.splice(r,0,i),l.parentNode.insertBefore(s,l)):(this.columns.splice(r+1,0,i),l.parentNode.insertBefore(s,l.nextSibling))}else t?(this.columns.unshift(i),this.headersElement.insertBefore(i.getElement(),this.headersElement.firstChild)):(this.columns.push(i),this.headersElement.appendChild(i.getElement())),i.columnRendered();return i},t.prototype.registerColumnField=function(e){e.definition.field&&(this.columnsByField[e.definition.field]=e)},t.prototype.registerColumnPosition=function(e){this.columnsByIndex.push(e)},t.prototype._reIndexColumns=function(){this.columnsByIndex=[],this.columns.forEach(function(e){e.reRegisterPosition()})},t.prototype._verticalAlignHeaders=function(){var e=this,t=0;e.columns.forEach(function(e){var o;e.clearVerticalAlign(),(o=e.getHeight())>t&&(t=o)}),e.columns.forEach(function(o){o.verticalAlign(e.table.options.columnHeaderVertAlign,t)}),e.rowManager.adjustTableSize()},t.prototype.findColumn=function(e){var t=this;if("object"!=(void 0===e?"undefined":_typeof(e)))return this.columnsByField[e]||!1;if(e instanceof n)return e;if(e instanceof o)return e._getSelf()||!1;if("undefined"!=typeof HTMLElement&&e instanceof HTMLElement){return t.columns.find(function(t){return t.element===e})||!1}return!1},t.prototype.getColumnByField=function(e){return this.columnsByField[e]},t.prototype.getColumnsByFieldRoot=function(e){var t=this,o=[];return Object.keys(this.columnsByField).forEach(function(i){i.split(".")[0]===e&&o.push(t.columnsByField[i])}),o},t.prototype.getColumnByIndex=function(e){return this.columnsByIndex[e]},t.prototype.getFirstVisibileColumn=function(e){var e=this.columnsByIndex.findIndex(function(e){return e.visible});return e>-1&&this.columnsByIndex[e]},t.prototype.getColumns=function(){return this.columns},t.prototype.findColumnIndex=function(e){return this.columnsByIndex.findIndex(function(t){return e===t})},t.prototype.getRealColumns=function(){return this.columnsByIndex},t.prototype.traverse=function(e){this.columnsByIndex.forEach(function(t,o){e(t,o)})},t.prototype.getDefinitions=function(e){var t=this,o=[];return t.columnsByIndex.forEach(function(t){(!e||e&&t.visible)&&o.push(t.getDefinition())}),o},t.prototype.getDefinitionTree=function(){var e=this,t=[];return e.columns.forEach(function(e){t.push(e.getDefinition(!0))}),t},t.prototype.getComponents=function(e){var t=this,o=[];return(e?t.columns:t.columnsByIndex).forEach(function(e){o.push(e.getComponent())}),o},t.prototype.getWidth=function(){var e=0;return this.columnsByIndex.forEach(function(t){t.visible&&(e+=t.getWidth())}),e},t.prototype.moveColumn=function(e,t,o){this.moveColumnActual(e,t,o),this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.initialize(),this.table.modExists("columnCalcs")&&this.table.modules.columnCalcs.recalc(this.table.rowManager.activeRows),t.element.parentNode.insertBefore(e.element,t.element),o&&t.element.parentNode.insertBefore(t.element,e.element),this._verticalAlignHeaders(),this.table.rowManager.reinitialize()},t.prototype.moveColumnActual=function(e,t,o){e.parent.isGroup?this._moveColumnInArray(e.parent.columns,e,t,o):this._moveColumnInArray(this.columns,e,t,o),this._moveColumnInArray(this.columnsByIndex,e,t,o,!0),this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.initialize(),this.table.options.virtualDomHoz&&this.table.vdomHoz.reinitialize(!0),this.table.options.columnMoved&&this.table.options.columnMoved.call(this.table,e.getComponent(),this.table.columnManager.getComponents()),this.table.options.persistence&&this.table.modExists("persistence",!0)&&this.table.modules.persistence.config.columns&&this.table.modules.persistence.save("columns")},t.prototype._moveColumnInArray=function(e,t,o,i,n){var s,a=this,r=e.indexOf(t),l=[];r>-1&&(e.splice(r,1),s=e.indexOf(o),s>-1?i&&(s+=1):s=r,e.splice(s,0,t),n&&(this.table.options.dataTree&&this.table.modExists("dataTree",!0)&&this.table.rowManager.rows.forEach(function(e){l=l.concat(a.table.modules.dataTree.getTreeChildren(e,!1,!0))}),l=l.concat(this.table.rowManager.rows),l.forEach(function(e){if(e.cells.length){var t=e.cells.splice(r,1)[0];e.cells.splice(s,0,t)}})))},t.prototype.scrollToColumn=function(e,t,o){var i=this,n=0,s=0,a=0,r=e.getElement();return new Promise(function(l,c){if(void 0===t&&(t=i.table.options.scrollToColumnPosition),void 0===o&&(o=i.table.options.scrollToColumnIfVisible),e.visible){switch(t){case"middle":case"center":a=-i.element.clientWidth/2;break;case"right":a=r.clientWidth-i.headersElement.clientWidth}if(!o&&(s=r.offsetLeft)>0&&s+r.offsetWidth<i.element.clientWidth)return!1;n=r.offsetLeft+a,n=Math.max(Math.min(n,i.table.rowManager.element.scrollWidth-i.table.rowManager.element.clientWidth),0),i.table.rowManager.scrollHorizontal(n),i.scrollHorizontal(n),l()}else console.warn("Scroll Error - Column not visible"),c("Scroll Error - Column not visible")})},t.prototype.generateCells=function(e){var t=this,o=[];return t.columnsByIndex.forEach(function(t){o.push(t.generateCell(e))}),o},t.prototype.getFlexBaseWidth=function(){var e=this,t=e.table.element.clientWidth,o=0;return e.rowManager.element.scrollHeight>e.rowManager.element.clientHeight&&(t-=e.rowManager.element.offsetWidth-e.rowManager.element.clientWidth),this.columnsByIndex.forEach(function(i){var n,s,a;i.visible&&(n=i.definition.width||0,s=void 0===i.minWidth?e.table.options.columnMinWidth:parseInt(i.minWidth),a="string"==typeof n?n.indexOf("%")>-1?t/100*parseInt(n):parseInt(n):n,o+=a>s?a:s)}),o},t.prototype.addColumn=function(e,t,o){var i=this;return new Promise(function(n,s){var a=i._addColumn(e,t,o);i._reIndexColumns(),i.table.options.responsiveLayout&&i.table.modExists("responsiveLayout",!0)&&i.table.modules.responsiveLayout.initialize(),i.table.modExists("columnCalcs")&&i.table.modules.columnCalcs.recalc(i.table.rowManager.activeRows),i.redraw(),"fitColumns"!=i.table.modules.layout.getMode()&&a.reinitializeWidth(),i._verticalAlignHeaders(),i.table.rowManager.reinitialize(),i.table.options.virtualDomHoz&&i.table.vdomHoz.reinitialize(),n(a)})},t.prototype.deregisterColumn=function(e){var t,o=e.getField();o&&delete this.columnsByField[o],t=this.columnsByIndex.indexOf(e),t>-1&&this.columnsByIndex.splice(t,1),t=this.columns.indexOf(e),t>-1&&this.columns.splice(t,1),this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.initialize(),this._verticalAlignHeaders(),this.redraw()},t.prototype.redraw=function(e){e&&(h.prototype.helpers.elVisible(this.element)&&this._verticalAlignHeaders(),this.table.rowManager.resetScroll(),this.table.rowManager.reinitialize()),["fitColumns","fitDataStretch"].indexOf(this.table.modules.layout.getMode())>-1?this.table.modules.layout.layout():e?this.table.modules.layout.layout():this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.update(),this.table.modExists("frozenColumns")&&this.table.modules.frozenColumns.layout(),this.table.modExists("columnCalcs")&&this.table.modules.columnCalcs.recalc(this.table.rowManager.activeRows),e&&(this.table.options.persistence&&this.table.modExists("persistence",!0)&&this.table.modules.persistence.config.columns&&this.table.modules.persistence.save("columns"),this.table.modExists("columnCalcs")&&this.table.modules.columnCalcs.redraw()),this.table.footerManager.redraw()};var o=function(e){this._column=e,this.type="ColumnComponent"};o.prototype.getElement=function(){return this._column.getElement()},o.prototype.getDefinition=function(){return this._column.getDefinition()},o.prototype.getField=function(){return this._column.getField()},o.prototype.getCells=function(){var e=[];return this._column.cells.forEach(function(t){e.push(t.getComponent())}),e},o.prototype.getVisibility=function(){return console.warn("getVisibility function is deprecated, you should now use the isVisible function"),this._column.visible},o.prototype.isVisible=function(){return this._column.visible},o.prototype.show=function(){this._column.isGroup?this._column.columns.forEach(function(e){e.show()}):this._column.show()},o.prototype.hide=function(){this._column.isGroup?this._column.columns.forEach(function(e){e.hide()}):this._column.hide()},o.prototype.toggle=function(){this._column.visible?this.hide():this.show()},o.prototype.delete=function(){return this._column.delete()},o.prototype.getSubColumns=function(){var e=[];return this._column.columns.length&&this._column.columns.forEach(function(t){e.push(t.getComponent())}),e},o.prototype.getParentColumn=function(){return this._column.parent instanceof n&&this._column.parent.getComponent()},o.prototype._getSelf=function(){return this._column},o.prototype.scrollTo=function(){return this._column.table.columnManager.scrollToColumn(this._column)},o.prototype.getTable=function(){return this._column.table},o.prototype.headerFilterFocus=function(){this._column.table.modExists("filter",!0)&&this._column.table.modules.filter.setHeaderFilterFocus(this._column)},o.prototype.reloadHeaderFilter=function(){this._column.table.modExists("filter",!0)&&this._column.table.modules.filter.reloadHeaderFilter(this._column)},o.prototype.getHeaderFilterValue=function(){if(this._column.table.modExists("filter",!0))return this._column.table.modules.filter.getHeaderFilterValue(this._column)},o.prototype.setHeaderFilterValue=function(e){this._column.table.modExists("filter",!0)&&this._column.table.modules.filter.setHeaderFilterValue(this._column,e)},o.prototype.move=function(e,t){var o=this._column.table.columnManager.findColumn(e);o?this._column.table.columnManager.moveColumn(this._column,o,t):console.warn("Move Error - No matching column found:",o)},o.prototype.getNextColumn=function(){var e=this._column.nextColumn();return!!e&&e.getComponent()},o.prototype.getPrevColumn=function(){var e=this._column.prevColumn();return!!e&&e.getComponent()},o.prototype.updateDefinition=function(e){return this._column.updateDefinition(e)},o.prototype.getWidth=function(){return this._column.getWidth()},o.prototype.setWidth=function(e){var t;return t=!0===e?this._column.reinitializeWidth(!0):this._column.setWidth(e),this._column.table.options.virtualDomHoz&&this._column.table.vdomHoz.reinitialize(!0),t},o.prototype.validate=function(){return this._column.validate()};var n=function e(t,o){var i=this;this.table=o.table,this.definition=t,this.parent=o,this.type="column",this.columns=[],this.cells=[],this.element=this.createElement(),this.contentElement=!1,this.titleHolderElement=!1,this.titleElement=!1,this.groupElement=this.createGroupElement(),this.isGroup=!1,this.tooltip=!1,this.hozAlign="",this.vertAlign="",this.field="",this.fieldStructure="",this.getFieldValue="",this.setFieldValue="",this.titleFormatterRendered=!1,this.setField(this.definition.field),this.table.options.invalidOptionWarnings&&this.checkDefinition(),this.modules={},this.cellEvents={cellClick:!1,cellDblClick:!1,cellContext:!1,cellTap:!1,cellDblTap:!1,cellTapHold:!1,cellMouseEnter:!1,cellMouseLeave:!1,cellMouseOver:!1,cellMouseOut:!1,cellMouseMove:!1},this.width=null,this.widthStyled="",this.minWidth=null,this.minWidthStyled="",this.widthFixed=!1,this.visible=!0,this.component=null,this._mapDepricatedFunctionality(),t.columns?(this.isGroup=!0,t.columns.forEach(function(t,o){var n=new e(t,i);i.attachColumn(n)}),i.checkColumnVisibility()):o.registerColumnField(this),t.rowHandle&&!1!==this.table.options.movableRows&&this.table.modExists("moveRow")&&this.table.modules.moveRow.setHandle(!0),this._buildHeader(),this.bindModuleColumns()};n.prototype.createElement=function(){var e=document.createElement("div");return e.classList.add("tabulator-col"),e.setAttribute("role","columnheader"),e.setAttribute("aria-sort","none"),e},n.prototype.createGroupElement=function(){var e=document.createElement("div");return e.classList.add("tabulator-col-group-cols"),e},n.prototype.checkDefinition=function(){var e=this;Object.keys(this.definition).forEach(function(t){-1===e.defaultOptionList.indexOf(t)&&console.warn("Invalid column definition option in '"+(e.field||e.definition.title)+"' column:",t)})},n.prototype.setField=function(e){this.field=e,this.fieldStructure=e?this.table.options.nestedFieldSeparator?e.split(this.table.options.nestedFieldSeparator):[e]:[],this.getFieldValue=this.fieldStructure.length>1?this._getNestedData:this._getFlatData,this.setFieldValue=this.fieldStructure.length>1?this._setNestedData:this._setFlatData},n.prototype.registerColumnPosition=function(e){this.parent.registerColumnPosition(e)},n.prototype.registerColumnField=function(e){this.parent.registerColumnField(e)},n.prototype.reRegisterPosition=function(){this.isGroup?this.columns.forEach(function(e){e.reRegisterPosition()}):this.registerColumnPosition(this)},n.prototype._mapDepricatedFunctionality=function(){void 0!==this.definition.hideInHtml&&(this.definition.htmlOutput=!this.definition.hideInHtml,console.warn("hideInHtml column definition property is deprecated, you should now use htmlOutput")),void 0!==this.definition.align&&(this.definition.hozAlign=this.definition.align,console.warn("align column definition property is deprecated, you should now use hozAlign")),void 0!==this.definition.downloadTitle&&(this.definition.titleDownload=this.definition.downloadTitle,console.warn("downloadTitle definition property is deprecated, you should now use titleDownload"))},n.prototype.setTooltip=function(){var e=this,t=e.definition,o=t.headerTooltip||!1===t.tooltip?t.headerTooltip:e.table.options.tooltipsHeader;o?!0===o?t.field?e.table.modules.localize.bind("columns|"+t.field,function(o){e.element.setAttribute("title",o||t.title)}):e.element.setAttribute("title",t.title):("function"==typeof o&&!1===(o=o(e.getComponent()))&&(o=""),e.element.setAttribute("title",o)):e.element.setAttribute("title","")},n.prototype._buildHeader=function(){for(var e=this,t=e.definition;e.element.firstChild;)e.element.removeChild(e.element.firstChild);t.headerVertical&&(e.element.classList.add("tabulator-col-vertical"),"flip"===t.headerVertical&&e.element.classList.add("tabulator-col-vertical-flip")),e.contentElement=e._bindEvents(),e.contentElement=e._buildColumnHeaderContent(),e.element.appendChild(e.contentElement),e.isGroup?e._buildGroupHeader():e._buildColumnHeader(),e.setTooltip(),e.table.options.resizableColumns&&e.table.modExists("resizeColumns")&&e.table.modules.resizeColumns.initializeColumn("header",e,e.element),t.headerFilter&&e.table.modExists("filter")&&e.table.modExists("edit")&&(void 0!==t.headerFilterPlaceholder&&t.field&&e.table.modules.localize.setHeaderFilterColumnPlaceholder(t.field,t.headerFilterPlaceholder),e.table.modules.filter.initializeColumn(e)),e.table.modExists("frozenColumns")&&e.table.modules.frozenColumns.initializeColumn(e),e.table.options.movableColumns&&!e.isGroup&&e.table.modExists("moveColumn")&&e.table.modules.moveColumn.initializeColumn(e),(t.topCalc||t.bottomCalc)&&e.table.modExists("columnCalcs")&&e.table.modules.columnCalcs.initializeColumn(e),e.table.modExists("persistence")&&e.table.modules.persistence.config.columns&&e.table.modules.persistence.initializeColumn(e),e.element.addEventListener("mouseenter",function(t){e.setTooltip()})},n.prototype._bindEvents=function(){var e,t,o,i=this,n=i.definition;"function"==typeof n.headerClick&&i.element.addEventListener("click",function(e){n.headerClick(e,i.getComponent())}),"function"==typeof n.headerDblClick&&i.element.addEventListener("dblclick",function(e){n.headerDblClick(e,i.getComponent())}),"function"==typeof n.headerContext&&i.element.addEventListener("contextmenu",function(e){n.headerContext(e,i.getComponent())}),"function"==typeof n.headerTap&&(o=!1,i.element.addEventListener("touchstart",function(e){o=!0},{passive:!0}),i.element.addEventListener("touchend",function(e){o&&n.headerTap(e,i.getComponent()),o=!1})),"function"==typeof n.headerDblTap&&(e=null,i.element.addEventListener("touchend",function(t){e?(clearTimeout(e),e=null,n.headerDblTap(t,i.getComponent())):e=setTimeout(function(){clearTimeout(e),e=null},300)})),"function"==typeof n.headerTapHold&&(t=null,i.element.addEventListener("touchstart",function(e){clearTimeout(t),t=setTimeout(function(){clearTimeout(t),t=null,o=!1,n.headerTapHold(e,i.getComponent())},1e3)},{passive:!0}),i.element.addEventListener("touchend",function(e){clearTimeout(t),t=null})),"function"==typeof n.cellClick&&(i.cellEvents.cellClick=n.cellClick),"function"==typeof n.cellDblClick&&(i.cellEvents.cellDblClick=n.cellDblClick),"function"==typeof n.cellContext&&(i.cellEvents.cellContext=n.cellContext),"function"==typeof n.cellMouseEnter&&(i.cellEvents.cellMouseEnter=n.cellMouseEnter),"function"==typeof n.cellMouseLeave&&(i.cellEvents.cellMouseLeave=n.cellMouseLeave),"function"==typeof n.cellMouseOver&&(i.cellEvents.cellMouseOver=n.cellMouseOver),"function"==typeof n.cellMouseOut&&(i.cellEvents.cellMouseOut=n.cellMouseOut),"function"==typeof n.cellMouseMove&&(i.cellEvents.cellMouseMove=n.cellMouseMove),"function"==typeof n.cellTap&&(i.cellEvents.cellTap=n.cellTap),"function"==typeof n.cellDblTap&&(i.cellEvents.cellDblTap=n.cellDblTap),"function"==typeof n.cellTapHold&&(i.cellEvents.cellTapHold=n.cellTapHold),"function"==typeof n.cellEdited&&(i.cellEvents.cellEdited=n.cellEdited),"function"==typeof n.cellEditing&&(i.cellEvents.cellEditing=n.cellEditing),"function"==typeof n.cellEditCancelled&&(i.cellEvents.cellEditCancelled=n.cellEditCancelled)},n.prototype._buildColumnHeader=function(){var e=this,t=this.definition,o=this.table;if(o.modExists("sort")&&o.modules.sort.initializeColumn(this,this.titleHolderElement),(t.headerContextMenu||t.headerClickMenu||t.headerMenu)&&o.modExists("menu")&&o.modules.menu.initializeColumnHeader(this),o.modExists("format")&&o.modules.format.initializeColumn(this),void 0!==t.editor&&o.modExists("edit")&&o.modules.edit.initializeColumn(this),void 0!==t.validator&&o.modExists("validate")&&o.modules.validate.initializeColumn(this),o.modExists("mutator")&&o.modules.mutator.initializeColumn(this),o.modExists("accessor")&&o.modules.accessor.initializeColumn(this),_typeof(o.options.responsiveLayout)&&o.modExists("responsiveLayout")&&o.modules.responsiveLayout.initializeColumn(this),void 0!==t.visible&&(t.visible?this.show(!0):this.hide(!0)),t.cssClass){t.cssClass.split(" ").forEach(function(t){e.element.classList.add(t)})}t.field&&this.element.setAttribute("tabulator-field",t.field),this.setMinWidth(void 0===t.minWidth?this.table.options.columnMinWidth:parseInt(t.minWidth)),this.reinitializeWidth(),this.tooltip=this.definition.tooltip||!1===this.definition.tooltip?this.definition.tooltip:this.table.options.tooltips,this.hozAlign=void 0===this.definition.hozAlign?this.table.options.cellHozAlign:this.definition.hozAlign,this.vertAlign=void 0===this.definition.vertAlign?this.table.options.cellVertAlign:this.definition.vertAlign,this.titleElement.style.textAlign=this.definition.headerHozAlign||this.table.options.headerHozAlign},n.prototype._buildColumnHeaderContent=function(){var e=(this.definition,this.table,document.createElement("div"));return e.classList.add("tabulator-col-content"),this.titleHolderElement=document.createElement("div"),this.titleHolderElement.classList.add("tabulator-col-title-holder"),e.appendChild(this.titleHolderElement),this.titleElement=this._buildColumnHeaderTitle(),this.titleHolderElement.appendChild(this.titleElement),e},n.prototype._buildColumnHeaderTitle=function(){var e=this,t=e.definition,o=e.table,i=document.createElement("div");if(i.classList.add("tabulator-col-title"),t.editableTitle){var n=document.createElement("input");n.classList.add("tabulator-title-editor"),n.addEventListener("click",function(e){e.stopPropagation(),n.focus()}),n.addEventListener("change",function(){t.title=n.value,o.options.columnTitleChanged.call(e.table,e.getComponent())}),i.appendChild(n),t.field?o.modules.localize.bind("columns|"+t.field,function(e){n.value=e||t.title||"&nbsp;"}):n.value=t.title||"&nbsp;"}else t.field?o.modules.localize.bind("columns|"+t.field,function(o){e._formatColumnHeaderTitle(i,o||t.title||"&nbsp;")}):e._formatColumnHeaderTitle(i,t.title||"&nbsp;");return i},n.prototype._formatColumnHeaderTitle=function(e,t){var o,i,n,s,a,r=this;if(this.definition.titleFormatter&&this.table.modExists("format"))switch(o=this.table.modules.format.getFormatter(this.definition.titleFormatter),a=function(e){r.titleFormatterRendered=e},s={getValue:function(){return t},getElement:function(){return e}},n=this.definition.titleFormatterParams||{},n="function"==typeof n?n():n,i=o.call(this.table.modules.format,s,n,a),void 0===i?"undefined":_typeof(i)){case"object":i instanceof Node?e.appendChild(i):(e.innerHTML="",console.warn("Format Error - Title formatter has returned a type of object, the only valid formatter object return is an instance of Node, the formatter returned:",i));break;case"undefined":case"null":e.innerHTML="";break;default:e.innerHTML=i}else e.innerHTML=t},n.prototype._buildGroupHeader=function(){var e=this;if(this.element.classList.add("tabulator-col-group"),this.element.setAttribute("role","columngroup"),this.element.setAttribute("aria-title",this.definition.title),this.definition.cssClass){this.definition.cssClass.split(" ").forEach(function(t){e.element.classList.add(t)})}(this.definition.headerContextMenu||this.definition.headerMenu)&&this.table.modExists("menu")&&this.table.modules.menu.initializeColumnHeader(this),this.element.appendChild(this.groupElement)},n.prototype._getFlatData=function(e){return e[this.field]},n.prototype._getNestedData=function(e){for(var t,o=e,i=this.fieldStructure,n=i.length,s=0;s<n&&(o=o[i[s]],t=o,o);s++);return t},n.prototype._setFlatData=function(e,t){this.field&&(e[this.field]=t)},n.prototype._setNestedData=function(e,t){for(var o=e,i=this.fieldStructure,n=i.length,s=0;s<n;s++)if(s==n-1)o[i[s]]=t;else{if(!o[i[s]]){if(void 0===t)break;o[i[s]]={}}o=o[i[s]]}},n.prototype.attachColumn=function(e){var t=this;t.groupElement?(t.columns.push(e),t.groupElement.appendChild(e.getElement())):console.warn("Column Warning - Column being attached to another column instead of column group")},n.prototype.verticalAlign=function(e,t){var o=this.parent.isGroup?this.parent.getGroupElement().clientHeight:t||this.parent.getHeadersElement().clientHeight;this.element.style.height=o+"px",this.isGroup&&(this.groupElement.style.minHeight=o-this.contentElement.offsetHeight+"px"),this.isGroup||"top"===e||(this.element.style.paddingTop="bottom"===e?this.element.clientHeight-this.contentElement.offsetHeight+"px":(this.element.clientHeight-this.contentElement.offsetHeight)/2+"px"),this.columns.forEach(function(t){t.verticalAlign(e)})},n.prototype.clearVerticalAlign=function(){this.element.style.paddingTop="",this.element.style.height="",this.element.style.minHeight="",this.groupElement.style.minHeight="",this.columns.forEach(function(e){e.clearVerticalAlign()})},n.prototype.bindModuleColumns=function(){"rownum"==this.definition.formatter&&(this.table.rowManager.rowNumColumn=this)},n.prototype.getElement=function(){return this.element},n.prototype.getGroupElement=function(){return this.groupElement},n.prototype.getField=function(){return this.field},n.prototype.getFirstColumn=function(){return this.isGroup?!!this.columns.length&&this.columns[0].getFirstColumn():this},n.prototype.getLastColumn=function(){return this.isGroup?!!this.columns.length&&this.columns[this.columns.length-1].getLastColumn():this},n.prototype.getColumns=function(){return this.columns},n.prototype.getCells=function(){return this.cells},n.prototype.getTopColumn=function(){return this.parent.isGroup?this.parent.getTopColumn():this},n.prototype.getDefinition=function(e){var t=[];return this.isGroup&&e&&(this.columns.forEach(function(e){t.push(e.getDefinition(!0))}),this.definition.columns=t),this.definition},n.prototype.checkColumnVisibility=function(){var e=!1;this.columns.forEach(function(t){t.visible&&(e=!0)}),e?(this.show(),this.parent.table.options.columnVisibilityChanged.call(this.table,this.getComponent(),!1)):this.hide()},n.prototype.show=function(e,t){this.visible||(this.visible=!0,this.element.style.display="",this.parent.isGroup&&this.parent.checkColumnVisibility(),this.cells.forEach(function(e){e.show()}),this.isGroup||null!==this.width||this.reinitializeWidth(),this.table.columnManager._verticalAlignHeaders(),this.table.options.persistence&&this.table.modExists("persistence",!0)&&this.table.modules.persistence.config.columns&&this.table.modules.persistence.save("columns"),!t&&this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.updateColumnVisibility(this,this.visible),e||this.table.options.columnVisibilityChanged.call(this.table,this.getComponent(),!0),this.parent.isGroup&&this.parent.matchChildWidths())},n.prototype.hide=function(e,t){this.visible&&(this.visible=!1,this.element.style.display="none",this.table.columnManager._verticalAlignHeaders(),this.parent.isGroup&&this.parent.checkColumnVisibility(),this.cells.forEach(function(e){e.hide()}),this.table.options.persistence&&this.table.modExists("persistence",!0)&&this.table.modules.persistence.config.columns&&this.table.modules.persistence.save("columns"),!t&&this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.updateColumnVisibility(this,this.visible),e||this.table.options.columnVisibilityChanged.call(this.table,this.getComponent(),!1),this.parent.isGroup&&this.parent.matchChildWidths())},n.prototype.matchChildWidths=function(){var e=0;this.contentElement&&this.columns.length&&(this.columns.forEach(function(t){t.visible&&(e+=t.getWidth())}),this.contentElement.style.maxWidth=e-1+"px",this.parent.isGroup&&this.parent.matchChildWidths())},n.prototype.setWidth=function(e){this.widthFixed=!0,this.setWidthActual(e)},n.prototype.setWidthActual=function(e){isNaN(e)&&(e=Math.floor(this.table.element.clientWidth/100*parseInt(e))),e=Math.max(this.minWidth,e),this.width=e,this.widthStyled=e?e+"px":"",this.element.style.width=this.widthStyled,this.isGroup||this.cells.forEach(function(e){e.setWidth()}),this.parent.isGroup&&this.parent.matchChildWidths(),this.table.modExists("frozenColumns")&&this.table.modules.frozenColumns.layout()},n.prototype.checkCellHeights=function(){var e=[];this.cells.forEach(function(t){t.row.heightInitialized&&(null!==t.row.getElement().offsetParent?(e.push(t.row),t.row.clearCellHeight()):t.row.heightInitialized=!1)}),e.forEach(function(e){e.calcHeight()}),e.forEach(function(e){e.setCellHeight()})},n.prototype.getWidth=function(){var e=0;return this.isGroup?this.columns.forEach(function(t){t.visible&&(e+=t.getWidth())}):e=this.width,e},n.prototype.getHeight=function(){return this.element.offsetHeight},n.prototype.setMinWidth=function(e){this.minWidth=e,this.minWidthStyled=e?e+"px":"",this.element.style.minWidth=this.minWidthStyled,this.cells.forEach(function(e){e.setMinWidth()})},
+n.prototype.delete=function(){var e=this;return new Promise(function(t,o){e.isGroup&&e.columns.forEach(function(e){e.delete()}),e.table.modExists("edit")&&e.table.modules.edit.currentCell.column===e&&e.table.modules.edit.cancelEdit();for(var i=e.cells.length,n=0;n<i;n++)e.cells[0].delete();e.element.parentNode&&e.element.parentNode.removeChild(e.element),e.element=!1,e.contentElement=!1,e.titleElement=!1,e.groupElement=!1,e.table.columnManager.deregisterColumn(e),e.table.options.virtualDomHoz&&e.table.vdomHoz.reinitialize(!0),t()})},n.prototype.columnRendered=function(){this.titleFormatterRendered&&this.titleFormatterRendered()},n.prototype.validate=function(){var e=[];return this.cells.forEach(function(t){t.validate()||e.push(t.getComponent())}),!e.length||e},n.prototype.generateCell=function(e){var t=this,o=new u(t,e);return this.cells.push(o),o},n.prototype.nextColumn=function(){var e=this.table.columnManager.findColumnIndex(this);return e>-1&&this._nextVisibleColumn(e+1)},n.prototype._nextVisibleColumn=function(e){var t=this.table.columnManager.getColumnByIndex(e);return!t||t.visible?t:this._nextVisibleColumn(e+1)},n.prototype.prevColumn=function(){var e=this.table.columnManager.findColumnIndex(this);return e>-1&&this._prevVisibleColumn(e-1)},n.prototype._prevVisibleColumn=function(e){var t=this.table.columnManager.getColumnByIndex(e);return!t||t.visible?t:this._prevVisibleColumn(e-1)},n.prototype.reinitializeWidth=function(e){this.widthFixed=!1,void 0===this.definition.width||e||this.setWidth(this.definition.width),this.table.modExists("filter")&&this.table.modules.filter.hideHeaderFilterElements(),this.fitToData(),this.table.modExists("filter")&&this.table.modules.filter.showHeaderFilterElements()},n.prototype.fitToData=function(){var e=this;this.widthFixed||(this.element.style.width="",e.cells.forEach(function(e){e.clearWidth()}));var t=this.element.offsetWidth;e.width&&this.widthFixed||(e.cells.forEach(function(e){var o=e.getWidth();o>t&&(t=o)}),t&&e.setWidthActual(t+1))},n.prototype.updateDefinition=function(e){var t=this;return new Promise(function(o,i){var n;t.isGroup?(console.warn("Column Update Error - The updateDefinition function is only available on columns, not column groups"),i("Column Update Error - The updateDefinition function is only available on columns, not column groups")):(n=Object.assign({},t.getDefinition()),n=Object.assign(n,e),t.table.columnManager.addColumn(n,!1,t).then(function(e){n.field==t.field&&(t.field=!1),t.delete().then(function(){o(e.getComponent())}).catch(function(e){i(e)})}).catch(function(e){i(e)}))})},n.prototype.deleteCell=function(e){var t=this.cells.indexOf(e);t>-1&&this.cells.splice(t,1)},n.prototype.defaultOptionList=["title","field","columns","visible","align","hozAlign","vertAlign","width","minWidth","widthGrow","widthShrink","resizable","frozen","responsive","tooltip","cssClass","rowHandle","hideInHtml","print","htmlOutput","sorter","sorterParams","formatter","formatterParams","variableHeight","editable","editor","editorParams","validator","mutator","mutatorParams","mutatorData","mutatorDataParams","mutatorEdit","mutatorEditParams","mutatorClipboard","mutatorClipboardParams","accessor","accessorParams","accessorData","accessorDataParams","accessorDownload","accessorDownloadParams","accessorClipboard","accessorClipboardParams","accessorPrint","accessorPrintParams","accessorHtmlOutput","accessorHtmlOutputParams","clipboard","download","downloadTitle","topCalc","topCalcParams","topCalcFormatter","topCalcFormatterParams","bottomCalc","bottomCalcParams","bottomCalcFormatter","bottomCalcFormatterParams","cellClick","cellDblClick","cellContext","cellTap","cellDblTap","cellTapHold","cellMouseEnter","cellMouseLeave","cellMouseOver","cellMouseOut","cellMouseMove","cellEditing","cellEdited","cellEditCancelled","headerSort","headerSortStartingDir","headerSortTristate","headerClick","headerDblClick","headerContext","headerTap","headerDblTap","headerTapHold","headerTooltip","headerVertical","headerHozAlign","editableTitle","titleFormatter","titleFormatterParams","headerFilter","headerFilterPlaceholder","headerFilterParams","headerFilterEmptyCheck","headerFilterFunc","headerFilterFuncParams","headerFilterLiveFilter","print","headerContextMenu","headerMenu","contextMenu","clickMenu","formatterPrint","formatterPrintParams","formatterClipboard","formatterClipboardParams","formatterHtmlOutput","formatterHtmlOutputParams","titlePrint","titleClipboard","titleHtmlOutput","titleDownload"],n.prototype.getComponent=function(){return this.component||(this.component=new o(this)),this.component};var s=function(e){this.table=e,this.element=this.createHolderElement(),this.tableElement=this.createTableElement(),this.heightFixer=this.createTableElement(),this.columnManager=null,this.height=0,this.firstRender=!1,this.renderMode="virtual",this.fixedHeight=!1,this.rows=[],this.activeRows=[],this.activeRowsCount=0,this.displayRows=[],this.displayRowsCount=0,this.scrollTop=0,this.scrollLeft=0,this.vDomRowHeight=20,this.vDomTop=0,this.vDomBottom=0,this.vDomScrollPosTop=0,this.vDomScrollPosBottom=0,this.vDomTopPad=0,this.vDomBottomPad=0,this.vDomMaxRenderChain=90,this.vDomWindowBuffer=0,this.vDomWindowMinTotalRows=20,this.vDomWindowMinMarginRows=5,this.vDomTopNewRows=[],this.vDomBottomNewRows=[],this.rowNumColumn=!1,this.redrawBlock=!1,this.redrawBlockRestoreConfig=!1,this.redrawBlockRederInPosition=!1};s.prototype.createHolderElement=function(){var e=document.createElement("div");return e.classList.add("tabulator-tableHolder"),e.setAttribute("tabindex",0),e},s.prototype.createTableElement=function(){var e=document.createElement("div");return e.classList.add("tabulator-table"),e},s.prototype.getElement=function(){return this.element},s.prototype.getTableElement=function(){return this.tableElement},s.prototype.getRowPosition=function(e,t){return t?this.activeRows.indexOf(e):this.rows.indexOf(e)},s.prototype.setColumnManager=function(e){this.columnManager=e},s.prototype.initialize=function(){var e=this;e.setRenderMode(),e.element.appendChild(e.tableElement),e.firstRender=!0,e.element.addEventListener("scroll",function(){var t=e.element.scrollLeft;e.scrollLeft!=t&&(e.columnManager.scrollHorizontal(t),e.table.options.groupBy&&e.table.modules.groupRows.scrollHeaders(t),e.table.modExists("columnCalcs")&&e.table.modules.columnCalcs.scrollHorizontal(t),e.table.options.scrollHorizontal(t)),e.scrollLeft=t}),"virtual"===this.renderMode&&e.element.addEventListener("scroll",function(){var t=e.element.scrollTop,o=e.scrollTop>t;e.scrollTop!=t?(e.scrollTop=t,e.scrollVertical(o),"scroll"==e.table.options.ajaxProgressiveLoad&&e.table.modules.ajax.nextPage(e.element.scrollHeight-e.element.clientHeight-t),e.table.options.scrollVertical(t)):e.scrollTop=t})},s.prototype.findRow=function(e){var t=this;if("object"!=(void 0===e?"undefined":_typeof(e))){if(void 0===e||null===e)return!1;return t.rows.find(function(o){return o.data[t.table.options.index]==e})||!1}if(e instanceof l)return e;if(e instanceof r)return e._getSelf()||!1;if("undefined"!=typeof HTMLElement&&e instanceof HTMLElement){return t.rows.find(function(t){return t.element===e})||!1}return!1},s.prototype.getRowFromDataObject=function(e){return this.rows.find(function(t){return t.data===e})||!1},s.prototype.getRowFromPosition=function(e,t){return t?this.activeRows[e]:this.rows[e]},s.prototype.scrollToRow=function(e,t,o){var i,n=this,s=this.getDisplayRows().indexOf(e),a=e.getElement(),r=0;return new Promise(function(e,l){if(s>-1){if(void 0===t&&(t=n.table.options.scrollToRowPosition),void 0===o&&(o=n.table.options.scrollToRowIfVisible),"nearest"===t)switch(n.renderMode){case"classic":i=h.prototype.helpers.elOffset(a).top,t=Math.abs(n.element.scrollTop-i)>Math.abs(n.element.scrollTop+n.element.clientHeight-i)?"bottom":"top";break;case"virtual":t=Math.abs(n.vDomTop-s)>Math.abs(n.vDomBottom-s)?"bottom":"top"}if(!o&&h.prototype.helpers.elVisible(a)&&(r=h.prototype.helpers.elOffset(a).top-h.prototype.helpers.elOffset(n.element).top)>0&&r<n.element.clientHeight-a.offsetHeight)return!1;switch(n.renderMode){case"classic":n.element.scrollTop=h.prototype.helpers.elOffset(a).top-h.prototype.helpers.elOffset(n.element).top+n.element.scrollTop;break;case"virtual":n._virtualRenderFill(s,!0)}switch(t){case"middle":case"center":n.element.scrollHeight-n.element.scrollTop==n.element.clientHeight?n.element.scrollTop=n.element.scrollTop+(a.offsetTop-n.element.scrollTop)-(n.element.scrollHeight-a.offsetTop)/2:n.element.scrollTop=n.element.scrollTop-n.element.clientHeight/2;break;case"bottom":n.element.scrollHeight-n.element.scrollTop==n.element.clientHeight?n.element.scrollTop=n.element.scrollTop-(n.element.scrollHeight-a.offsetTop)+a.offsetHeight:n.element.scrollTop=n.element.scrollTop-n.element.clientHeight+a.offsetHeight}e()}else console.warn("Scroll Error - Row not visible"),l("Scroll Error - Row not visible")})},s.prototype.setData=function(e,t,o){var i=this,n=this;return new Promise(function(s,a){t&&i.getDisplayRows().length?n.table.options.pagination?n._setDataActual(e,!0):i.reRenderInPosition(function(){n._setDataActual(e)}):(i.table.options.autoColumns&&o&&i.table.columnManager.generateColumnsFromRowData(e),i.resetScroll(),i._setDataActual(e)),s()})},s.prototype._setDataActual=function(e,t){var o=this;o.table.options.dataLoading.call(this.table,e),this._wipeElements(),this.table.options.history&&this.table.modExists("history")&&this.table.modules.history.clear(),Array.isArray(e)?(this.table.modExists("selectRow")&&this.table.modules.selectRow.clearSelectionData(),this.table.options.reactiveData&&this.table.modExists("reactiveData",!0)&&this.table.modules.reactiveData.watchData(e),e.forEach(function(e,t){if(e&&"object"===(void 0===e?"undefined":_typeof(e))){var i=new l(e,o);o.rows.push(i)}else console.warn("Data Loading Warning - Invalid row data detected and ignored, expecting object but received:",e)}),o.refreshActiveData(!1,!1,t),o.table.options.dataLoaded.call(this.table,e)):console.error("Data Loading Error - Unable to process data due to invalid data type \nExpecting: array \nReceived: ",void 0===e?"undefined":_typeof(e),"\nData:     ",e)},s.prototype._wipeElements=function(){this.rows.forEach(function(e){e.wipe()}),this.table.options.groupBy&&this.table.modExists("groupRows")&&this.table.modules.groupRows.wipe(),this.rows=[],this.activeRows=[],this.activeRowsCount=0,this.displayRows=[],this.displayRowsCount=0,this.adjustTableSize()},s.prototype.deleteRow=function(e,t){var o=this.rows.indexOf(e),i=this.activeRows.indexOf(e);i>-1&&this.activeRows.splice(i,1),o>-1&&this.rows.splice(o,1),this.setActiveRows(this.activeRows),this.displayRowIterator(function(t){var o=t.indexOf(e);o>-1&&t.splice(o,1)}),t||this.reRenderInPosition(),this.regenerateRowNumbers(),this.table.options.rowDeleted.call(this.table,e.getComponent()),this.table.options.dataChanged&&this.table.options.dataChanged.call(this.table,this.getData()),this.table.options.groupBy&&this.table.modExists("groupRows")?this.table.modules.groupRows.updateGroupRows(!0):this.table.options.pagination&&this.table.modExists("page")?this.refreshActiveData(!1,!1,!0):this.table.options.pagination&&this.table.modExists("page")&&this.refreshActiveData("page")},s.prototype.addRow=function(e,t,o,i){var n=this.addRowActual(e,t,o,i);return this.table.options.history&&this.table.modExists("history")&&this.table.modules.history.action("rowAdd",n,{data:e,pos:t,index:o}),n},s.prototype.addRows=function(e,t,o){var i=this,n=this,s=0,a=[];return new Promise(function(r,l){t=i.findAddRowPos(t),Array.isArray(e)||(e=[e]),s=e.length-1,(void 0===o&&t||void 0!==o&&!t)&&e.reverse(),e.forEach(function(e,i){var s=n.addRow(e,t,o,!0);a.push(s)}),i.table.options.groupBy&&i.table.modExists("groupRows")?i.table.modules.groupRows.updateGroupRows(!0):i.table.options.pagination&&i.table.modExists("page")?i.refreshActiveData(!1,!1,!0):i.reRenderInPosition(),i.table.modExists("columnCalcs")&&i.table.modules.columnCalcs.recalc(i.table.rowManager.activeRows),i.regenerateRowNumbers(),r(a)})},s.prototype.findAddRowPos=function(e){return void 0===e&&(e=this.table.options.addRowPos),"pos"===e&&(e=!0),"bottom"===e&&(e=!1),e},s.prototype.addRowActual=function(e,t,o,i){var n,s,a=e instanceof l?e:new l(e||{},this),r=this.findAddRowPos(t),c=-1;if(!o&&this.table.options.pagination&&"page"==this.table.options.paginationAddRow&&(s=this.getDisplayRows(),r?s.length?o=s[0]:this.activeRows.length&&(o=this.activeRows[this.activeRows.length-1],r=!1):s.length&&(o=s[s.length-1],r=!(s.length<this.table.modules.page.getPageSize()))),void 0!==o&&(o=this.findRow(o)),this.table.options.groupBy&&this.table.modExists("groupRows")){this.table.modules.groupRows.assignRowToGroup(a);var u=a.getGroup().rows;u.length>1&&(!o||o&&-1==u.indexOf(o)?r?u[0]!==a&&(o=u[0],this._moveRowInArray(a.getGroup().rows,a,o,!r)):u[u.length-1]!==a&&(o=u[u.length-1],this._moveRowInArray(a.getGroup().rows,a,o,!r)):this._moveRowInArray(a.getGroup().rows,a,o,!r))}return o&&(c=this.rows.indexOf(o)),o&&c>-1?(n=this.activeRows.indexOf(o),this.displayRowIterator(function(e){var t=e.indexOf(o);t>-1&&e.splice(r?t:t+1,0,a)}),n>-1&&this.activeRows.splice(r?n:n+1,0,a),this.rows.splice(r?c:c+1,0,a)):r?(this.displayRowIterator(function(e){e.unshift(a)}),this.activeRows.unshift(a),this.rows.unshift(a)):(this.displayRowIterator(function(e){e.push(a)}),this.activeRows.push(a),this.rows.push(a)),this.setActiveRows(this.activeRows),this.table.options.rowAdded.call(this.table,a.getComponent()),this.table.options.dataChanged&&this.table.options.dataChanged.call(this.table,this.getData()),i||this.reRenderInPosition(),a},s.prototype.moveRow=function(e,t,o){this.table.options.history&&this.table.modExists("history")&&this.table.modules.history.action("rowMove",e,{posFrom:this.getRowPosition(e),posTo:this.getRowPosition(t),to:t,after:o}),this.moveRowActual(e,t,o),this.regenerateRowNumbers(),this.table.options.rowMoved.call(this.table,e.getComponent())},s.prototype.moveRowActual=function(e,t,o){var i=this;if(this._moveRowInArray(this.rows,e,t,o),this._moveRowInArray(this.activeRows,e,t,o),this.displayRowIterator(function(n){i._moveRowInArray(n,e,t,o)}),this.table.options.groupBy&&this.table.modExists("groupRows")){!o&&t instanceof H&&(t=this.table.rowManager.prevDisplayRow(e)||t);var n=t.getGroup(),s=e.getGroup();n===s?this._moveRowInArray(n.rows,e,t,o):(s&&s.removeRow(e),n.insertRow(e,t,o))}},s.prototype._moveRowInArray=function(e,t,o,i){var n,s,a,r;if(t!==o&&(n=e.indexOf(t),n>-1&&(e.splice(n,1),s=e.indexOf(o),s>-1?i?e.splice(s+1,0,t):e.splice(s,0,t):e.splice(n,0,t)),e===this.getDisplayRows())){a=n<s?n:s,r=s>n?s:n+1;for(var l=a;l<=r;l++)e[l]&&this.styleRow(e[l],l)}},s.prototype.clearData=function(){this.setData([])},s.prototype.getRowIndex=function(e){return this.findRowIndex(e,this.rows)},s.prototype.getDisplayRowIndex=function(e){var t=this.getDisplayRows().indexOf(e);return t>-1&&t},s.prototype.nextDisplayRow=function(e,t){var o=this.getDisplayRowIndex(e),i=!1;return!1!==o&&o<this.displayRowsCount-1&&(i=this.getDisplayRows()[o+1]),!i||i instanceof l&&"row"==i.type?i:this.nextDisplayRow(i,t)},s.prototype.prevDisplayRow=function(e,t){var o=this.getDisplayRowIndex(e),i=!1;return o&&(i=this.getDisplayRows()[o-1]),!t||!i||i instanceof l&&"row"==i.type?i:this.prevDisplayRow(i,t)},s.prototype.findRowIndex=function(e,t){var o;return!!((e=this.findRow(e))&&(o=t.indexOf(e))>-1)&&o},s.prototype.getData=function(e,t){var o=[];return this.getRows(e).forEach(function(e){"row"==e.type&&o.push(e.getData(t||"data"))}),o},s.prototype.getComponents=function(e){var t=[];return this.getRows(e).forEach(function(e){t.push(e.getComponent())}),t},s.prototype.getDataCount=function(e){return this.getRows(e).length},s.prototype._genRemoteRequest=function(){var e=this,t=this.table,o=t.options,i={};if(t.modExists("page")){if(o.ajaxSorting){var n=this.table.modules.sort.getSort();n.forEach(function(e){delete e.column}),i[this.table.modules.page.paginationDataSentNames.sorters]=n}if(o.ajaxFiltering){var s=this.table.modules.filter.getFilters(!0,!0);i[this.table.modules.page.paginationDataSentNames.filters]=s}this.table.modules.ajax.setParams(i,!0)}t.modules.ajax.sendRequest().then(function(t){e._setDataActual(t,!0)}).catch(function(e){})},s.prototype.filterRefresh=function(){var e=this.table,t=e.options,o=this.scrollLeft;t.ajaxFiltering?"remote"==t.pagination&&e.modExists("page")?(e.modules.page.reset(!0),e.modules.page.setPage(1).then(function(){}).catch(function(){})):t.ajaxProgressiveLoad?e.modules.ajax.loadData().then(function(){}).catch(function(){}):this._genRemoteRequest():this.refreshActiveData("filter"),this.scrollHorizontal(o)},s.prototype.sorterRefresh=function(e){var t=this.table,o=this.table.options,i=this.scrollLeft;o.ajaxSorting?("remote"==o.pagination||o.progressiveLoad)&&t.modExists("page")?(t.modules.page.reset(!0),t.modules.page.setPage(1).then(function(){}).catch(function(){})):o.ajaxProgressiveLoad?t.modules.ajax.loadData().then(function(){}).catch(function(){}):this._genRemoteRequest():this.refreshActiveData(e?"filter":"sort"),this.scrollHorizontal(i)},s.prototype.scrollHorizontal=function(e){this.scrollLeft=e,this.element.scrollLeft=e,this.table.options.groupBy&&this.table.modules.groupRows.scrollHeaders(e),this.table.modExists("columnCalcs")&&this.table.modules.columnCalcs.scrollHorizontal(e)},s.prototype.refreshActiveData=function(e,t,o){var i,n=this,s=this.table,a=["all","filter","sort","display","freeze","group","tree","page"];if(this.redrawBlock)return void((!this.redrawBlockRestoreConfig||a.indexOf(e)<a.indexOf(this.redrawBlockRestoreConfig.stage))&&(this.redrawBlockRestoreConfig={stage:e,skipStage:t,renderInPosition:o}));switch(n.table.modExists("edit")&&n.table.modules.edit.cancelEdit(),e||(e="all"),s.options.selectable&&!s.options.selectablePersistence&&s.modExists("selectRow")&&s.modules.selectRow.deselectRows(),e){case"all":case"filter":t?t=!1:s.modExists("filter")?n.setActiveRows(s.modules.filter.filter(n.rows)):n.setActiveRows(n.rows.slice(0));case"sort":t?t=!1:s.modExists("sort")&&s.modules.sort.sort(this.activeRows),this.regenerateRowNumbers();case"display":this.resetDisplayRows();case"freeze":t?t=!1:this.table.modExists("frozenRows")&&s.modules.frozenRows.isFrozen()&&(s.modules.frozenRows.getDisplayIndex()||s.modules.frozenRows.setDisplayIndex(this.getNextDisplayIndex()),i=s.modules.frozenRows.getDisplayIndex(),!0!==(i=n.setDisplayRows(s.modules.frozenRows.getRows(this.getDisplayRows(i-1)),i))&&s.modules.frozenRows.setDisplayIndex(i));case"group":t?t=!1:s.options.groupBy&&s.modExists("groupRows")&&(s.modules.groupRows.getDisplayIndex()||s.modules.groupRows.setDisplayIndex(this.getNextDisplayIndex()),i=s.modules.groupRows.getDisplayIndex(),!0!==(i=n.setDisplayRows(s.modules.groupRows.getRows(this.getDisplayRows(i-1)),i))&&s.modules.groupRows.setDisplayIndex(i));case"tree":t?t=!1:s.options.dataTree&&s.modExists("dataTree")&&(s.modules.dataTree.getDisplayIndex()||s.modules.dataTree.setDisplayIndex(this.getNextDisplayIndex()),i=s.modules.dataTree.getDisplayIndex(),!0!==(i=n.setDisplayRows(s.modules.dataTree.getRows(this.getDisplayRows(i-1)),i))&&s.modules.dataTree.setDisplayIndex(i)),s.options.pagination&&s.modExists("page")&&!o&&"local"==s.modules.page.getMode()&&s.modules.page.reset();case"page":t?t=!1:s.options.pagination&&s.modExists("page")&&(s.modules.page.getDisplayIndex()||s.modules.page.setDisplayIndex(this.getNextDisplayIndex()),i=s.modules.page.getDisplayIndex(),"local"==s.modules.page.getMode()&&s.modules.page.setMaxRows(this.getDisplayRows(i-1).length),!0!==(i=n.setDisplayRows(s.modules.page.getRows(this.getDisplayRows(i-1)),i))&&s.modules.page.setDisplayIndex(i))}h.prototype.helpers.elVisible(n.element)&&(o?n.reRenderInPosition():("all"===e&&this.table.options.virtualDomHoz&&this.table.vdomHoz.dataChange(),n.renderTable(),s.options.layoutColumnsOnNewData&&n.table.columnManager.redraw(!0))),s.modExists("columnCalcs")&&s.modules.columnCalcs.recalc(this.activeRows)},s.prototype.regenerateRowNumbers=function(){var e=this;this.rowNumColumn&&this.activeRows.forEach(function(t){var o=t.getCell(e.rowNumColumn);o&&o._generateContents()})},s.prototype.setActiveRows=function(e){this.activeRows=e,this.activeRowsCount=this.activeRows.length},s.prototype.resetDisplayRows=function(){this.displayRows=[],this.displayRows.push(this.activeRows.slice(0)),this.displayRowsCount=this.displayRows[0].length,this.table.modExists("frozenRows")&&this.table.modules.frozenRows.setDisplayIndex(0),this.table.options.groupBy&&this.table.modExists("groupRows")&&this.table.modules.groupRows.setDisplayIndex(0),this.table.options.pagination&&this.table.modExists("page")&&this.table.modules.page.setDisplayIndex(0)},s.prototype.getNextDisplayIndex=function(){return this.displayRows.length},s.prototype.setDisplayRows=function(e,t){var o=!0;return t&&void 0!==this.displayRows[t]?(this.displayRows[t]=e,o=!0):(this.displayRows.push(e),o=t=this.displayRows.length-1),t==this.displayRows.length-1&&(this.displayRowsCount=this.displayRows[this.displayRows.length-1].length),o},s.prototype.getDisplayRows=function(e){return void 0===e?this.displayRows.length?this.displayRows[this.displayRows.length-1]:[]:this.displayRows[e]||[]},s.prototype.getVisibleRows=function(e){var t=this.element.scrollTop,o=this.element.clientHeight+t,i=!1,n=0,s=0,a=this.getDisplayRows();if(e){this.getDisplayRows();for(var r=this.vDomTop;r<=this.vDomBottom;r++)if(a[r])if(i){if(!(o-a[r].getElement().offsetTop>=0))break;s=r}else if(t-a[r].getElement().offsetTop>=0)n=r;else{if(i=!0,!(o-a[r].getElement().offsetTop>=0))break;s=r}}else n=this.vDomTop,s=this.vDomBottom;return a.slice(n,s+1)},s.prototype.displayRowIterator=function(e){this.displayRows.forEach(e),this.displayRowsCount=this.displayRows[this.displayRows.length-1].length},s.prototype.getRows=function(e){var t;switch(e){case"active":t=this.activeRows;break;case"display":t=this.table.rowManager.getDisplayRows();break;case"visible":t=this.getVisibleRows(!0);break;case"selected":t=this.table.modules.selectRow.selectedRows;break;default:t=this.rows}return t},s.prototype.reRenderInPosition=function(e){if("virtual"==this.getRenderMode())if(this.redrawBlock)e?e():this.redrawBlockRederInPosition=!0;else{for(var t=this.element.scrollTop,o=!1,i=!1,n=this.scrollLeft,s=this.getDisplayRows(),a=this.vDomTop;a<=this.vDomBottom;a++)if(s[a]){var r=t-s[a].getElement().offsetTop;if(!(!1===i||Math.abs(r)<i))break;i=r,o=a}e&&e(),this._virtualRenderFill(!1===o?this.displayRowsCount-1:o,!0,i||0),this.scrollHorizontal(n)}else this.renderTable(),e&&e()},s.prototype.setRenderMode=function(){this.table.options.virtualDom?(this.renderMode="virtual",this.table.element.clientHeight||this.table.options.height?this.fixedHeight=!0:this.fixedHeight=!1):this.renderMode="classic"},s.prototype.getRenderMode=function(){return this.renderMode},s.prototype.renderTable=function(){switch(this.table.options.renderStarted.call(this.table),this.element.scrollTop=0,this.renderMode){case"classic":this._simpleRender();break;case"virtual":this._virtualRenderFill()}this.firstRender&&(this.displayRowsCount?(this.firstRender=!1,this.table.modules.layout.layout()):this.renderEmptyScroll()),this.table.modExists("frozenColumns")&&this.table.modules.frozenColumns.layout(),this.displayRowsCount||this.table.options.placeholder&&(this.table.options.placeholder.setAttribute("tabulator-render-mode",this.renderMode),this.getElement().appendChild(this.table.options.placeholder),this.table.options.placeholder.style.width=this.table.columnManager.getWidth()+"px"),this.table.options.renderComplete.call(this.table)},s.prototype._simpleRender=function(){this._clearVirtualDom(),this.displayRowsCount?this.checkClassicModeGroupHeaderWidth():this.renderEmptyScroll()},s.prototype.checkClassicModeGroupHeaderWidth=function(){var e=this,t=this.tableElement,o=!0;e.getDisplayRows().forEach(function(i,n){e.styleRow(i,n),t.appendChild(i.getElement()),i.initialize(!0),"group"!==i.type&&(o=!1)}),t.style.minWidth=o?e.table.columnManager.getWidth()+"px":""},s.prototype.renderEmptyScroll=function(){this.table.options.placeholder?this.tableElement.style.display="none":this.tableElement.style.minWidth=this.table.columnManager.getWidth()+"px"},s.prototype._clearVirtualDom=function(){var e=this.tableElement;for(this.table.options.placeholder&&this.table.options.placeholder.parentNode&&this.table.options.placeholder.parentNode.removeChild(this.table.options.placeholder);e.firstChild;)e.removeChild(e.firstChild);e.style.paddingTop="",e.style.paddingBottom="",e.style.minWidth="",e.style.minHeight="",e.style.display="",e.style.visibility="",this.scrollTop=0,this.scrollLeft=0,this.vDomTop=0,this.vDomBottom=0,this.vDomTopPad=0,this.vDomBottomPad=0},s.prototype.styleRow=function(e,t){var o=e.getElement();t%2?(o.classList.add("tabulator-row-even"),o.classList.remove("tabulator-row-odd")):(o.classList.add("tabulator-row-odd"),o.classList.remove("tabulator-row-even"))},s.prototype._virtualRenderFill=function(e,t,o){var i=this,n=i.tableElement,s=i.element,a=0,r=0,l=0,c=0,u=!0,d=i.getDisplayRows();if(e=e||0,o=o||0,e){for(;n.firstChild;)n.removeChild(n.firstChild);var p=(i.displayRowsCount-e+1)*i.vDomRowHeight;p<i.height&&(e-=Math.ceil((i.height-p)/i.vDomRowHeight))<0&&(e=0),a=Math.min(Math.max(Math.floor(i.vDomWindowBuffer/i.vDomRowHeight),i.vDomWindowMinMarginRows),e),e-=a}else i._clearVirtualDom();if(i.displayRowsCount&&h.prototype.helpers.elVisible(i.element)){for(i.vDomTop=e,i.vDomBottom=e-1;(r<=i.height+i.vDomWindowBuffer||c<i.vDomWindowMinTotalRows)&&i.vDomBottom<i.displayRowsCount-1;){var m=i.vDomBottom+1,f=d[m],g=0;i.styleRow(f,m),n.appendChild(f.getElement()),f.initialize(),f.heightInitialized||f.normalizeHeight(!0),g=f.getHeight(),c<a?l+=g:r+=g,g>this.vDomWindowBuffer&&(this.vDomWindowBuffer=2*g),"group"!==f.type&&(u=!1),i.vDomBottom++,c++}e?(i.vDomTopPad=t?i.vDomRowHeight*this.vDomTop+o:i.scrollTop-l,i.vDomBottomPad=i.vDomBottom==i.displayRowsCount-1?0:Math.max(i.vDomScrollHeight-i.vDomTopPad-r-l,0)):(this.vDomTopPad=0,i.vDomRowHeight=Math.floor((r+l)/c),i.vDomBottomPad=i.vDomRowHeight*(i.displayRowsCount-i.vDomBottom-1),i.vDomScrollHeight=l+r+i.vDomBottomPad-i.height),n.style.paddingTop=i.vDomTopPad+"px",n.style.paddingBottom=i.vDomBottomPad+"px",t&&(this.scrollTop=i.vDomTopPad+l+o-(this.element.scrollWidth>this.element.clientWidth?this.element.offsetHeight-this.element.clientHeight:0)),this.scrollTop=Math.min(this.scrollTop,this.element.scrollHeight-this.height),this.element.scrollWidth>this.element.offsetWidth&&t&&(this.scrollTop+=this.element.offsetHeight-this.element.clientHeight),this.vDomScrollPosTop=this.scrollTop,this.vDomScrollPosBottom=this.scrollTop,s.scrollTop=this.scrollTop,n.style.minWidth=u?i.table.columnManager.getWidth()+"px":"",i.table.options.groupBy&&"fitDataFill"!=i.table.modules.layout.getMode()&&i.displayRowsCount==i.table.modules.groupRows.countGroups()&&(i.tableElement.style.minWidth=i.table.columnManager.getWidth())}else this.renderEmptyScroll();this.fixedHeight||this.adjustTableSize()},s.prototype.scrollVertical=function(e){var t=this.scrollTop-this.vDomScrollPosTop,o=this.scrollTop-this.vDomScrollPosBottom,i=2*this.vDomWindowBuffer;if(-t>i||o>i){var n=this.scrollLeft;this._virtualRenderFill(Math.floor(this.element.scrollTop/this.element.scrollHeight*this.displayRowsCount)),this.scrollHorizontal(n)}else e?(t<0&&this._addTopRow(-t),o<0&&(this.vDomScrollHeight-this.scrollTop>this.vDomWindowBuffer?this._removeBottomRow(-o):this.vDomScrollPosBottom=this.scrollTop)):(t>=0&&(this.scrollTop>this.vDomWindowBuffer?this._removeTopRow(t):this.vDomScrollPosTop=this.scrollTop),o>=0&&this._addBottomRow(o))},s.prototype._addTopRow=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,o=this.tableElement,i=this.getDisplayRows();if(this.vDomTop){var n=this.vDomTop-1,s=i[n],a=s.getHeight()||this.vDomRowHeight;e>=a&&(this.styleRow(s,n),o.insertBefore(s.getElement(),o.firstChild),s.initialized&&s.heightInitialized||(this.vDomTopNewRows.push(s),s.heightInitialized||s.clearCellHeight()),s.initialize(),this.vDomTopPad-=a,this.vDomTopPad<0&&(this.vDomTopPad=n*this.vDomRowHeight),n||(this.vDomTopPad=0),o.style.paddingTop=this.vDomTopPad+"px",this.vDomScrollPosTop-=a,this.vDomTop--),e=-(this.scrollTop-this.vDomScrollPosTop),s.getHeight()>this.vDomWindowBuffer&&(this.vDomWindowBuffer=2*s.getHeight()),t<this.vDomMaxRenderChain&&this.vDomTop&&e>=(i[this.vDomTop-1].getHeight()||this.vDomRowHeight)?this._addTopRow(e,t+1):this._quickNormalizeRowHeight(this.vDomTopNewRows)}},s.prototype._removeTopRow=function(e){var t=this.tableElement,o=this.getDisplayRows()[this.vDomTop],i=o.getHeight()||this.vDomRowHeight;if(e>=i){var n=o.getElement();n.parentNode.removeChild(n),this.vDomTopPad+=i,t.style.paddingTop=this.vDomTopPad+"px",this.vDomScrollPosTop+=this.vDomTop?i:i+this.vDomWindowBuffer,this.vDomTop++,e=this.scrollTop-this.vDomScrollPosTop,this._removeTopRow(e)}},s.prototype._addBottomRow=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,o=this.tableElement,i=this.getDisplayRows();if(this.vDomBottom<this.displayRowsCount-1){var n=this.vDomBottom+1,s=i[n],a=s.getHeight()||this.vDomRowHeight;e>=a&&(this.styleRow(s,n),o.appendChild(s.getElement()),s.initialized&&s.heightInitialized||(this.vDomBottomNewRows.push(s),s.heightInitialized||s.clearCellHeight()),s.initialize(),this.vDomBottomPad-=a,(this.vDomBottomPad<0||n==this.displayRowsCount-1)&&(this.vDomBottomPad=0),o.style.paddingBottom=this.vDomBottomPad+"px",this.vDomScrollPosBottom+=a,this.vDomBottom++),e=this.scrollTop-this.vDomScrollPosBottom,s.getHeight()>this.vDomWindowBuffer&&(this.vDomWindowBuffer=2*s.getHeight()),t<this.vDomMaxRenderChain&&this.vDomBottom<this.displayRowsCount-1&&e>=(i[this.vDomBottom+1].getHeight()||this.vDomRowHeight)?this._addBottomRow(e,t+1):this._quickNormalizeRowHeight(this.vDomBottomNewRows)}},s.prototype._removeBottomRow=function(e){var t=this.tableElement,o=this.getDisplayRows()[this.vDomBottom],i=o.getHeight()||this.vDomRowHeight;if(e>=i){var n=o.getElement();n.parentNode&&n.parentNode.removeChild(n),this.vDomBottomPad+=i,this.vDomBottomPad<0&&(this.vDomBottomPad=0),t.style.paddingBottom=this.vDomBottomPad+"px",this.vDomScrollPosBottom-=i,this.vDomBottom--,e=-(this.scrollTop-this.vDomScrollPosBottom),this._removeBottomRow(e)}},s.prototype._quickNormalizeRowHeight=function(e){e.forEach(function(e){e.calcHeight()}),e.forEach(function(e){e.setCellHeight()}),e.length=0},s.prototype.normalizeHeight=function(){this.activeRows.forEach(function(e){e.normalizeHeight()})},s.prototype.adjustTableSize=function(){var e,t=this.element.clientHeight;if("virtual"===this.renderMode){var o=Math.floor(this.columnManager.getElement().offsetHeight+(this.table.footerManager&&!this.table.footerManager.external?this.table.footerManager.getElement().offsetHeight:0));this.fixedHeight?(this.element.style.minHeight="calc(100% - "+o+"px)",this.element.style.height="calc(100% - "+o+"px)",this.element.style.maxHeight="calc(100% - "+o+"px)"):(this.element.style.height="",this.element.style.height=Math.floor(this.table.element.clientHeight)-o+"px",this.element.scrollTop=this.scrollTop),this.height=this.element.clientHeight,this.vDomWindowBuffer=this.table.options.virtualDomBuffer||this.height,this.fixedHeight||Math.floor(t)==Math.floor(this.element.clientHeight)||((e=this.table.modExists("resizeTable"))&&!this.table.modules.resizeTable.autoResize||!e)&&this.redraw()}},s.prototype.reinitialize=function(){this.rows.forEach(function(e){e.reinitialize(!0)})},s.prototype.blockRedraw=function(){this.redrawBlock=!0,this.redrawBlockRestoreConfig=!1},s.prototype.restoreRedraw=function(){this.redrawBlock=!1,this.redrawBlockRestoreConfig?(this.refreshActiveData(this.redrawBlockRestoreConfig.stage,this.redrawBlockRestoreConfig.skipStage,this.redrawBlockRestoreConfig.renderInPosition),
+this.redrawBlockRestoreConfig=!1):this.redrawBlockRederInPosition&&this.reRenderInPosition(),this.redrawBlockRederInPosition=!1},s.prototype.redraw=function(e){var t=this.scrollLeft;this.adjustTableSize(),this.table.tableWidth=this.table.element.clientWidth,e?this.renderTable():("classic"==this.renderMode?this.table.options.groupBy?this.refreshActiveData("group",!1,!1):this._simpleRender():(this.reRenderInPosition(),this.scrollHorizontal(t)),this.displayRowsCount||this.table.options.placeholder&&this.getElement().appendChild(this.table.options.placeholder))},s.prototype.resetScroll=function(){if(this.element.scrollLeft=0,this.element.scrollTop=0,"ie"===this.table.browser){var e=document.createEvent("Event");e.initEvent("scroll",!1,!0),this.element.dispatchEvent(e)}else this.element.dispatchEvent(new Event("scroll"))};var a=function(e){this.table=e,this.element=this.table.rowManager.tableElement,this.holderEl=this.table.rowManager.element,this.leftCol=0,this.rightCol=0,this.scrollLeft=0,this.vDomScrollPosLeft=0,this.vDomScrollPosRight=0,this.vDomPadLeft=0,this.vDomPadRight=0,this.fitDataColAvg=0,this.window=200,this.initialized=!1,this.columns=[],this.compatabilityCheck()&&this.initialize()};a.prototype.compatabilityCheck=function(){var e=this.table.options,t=!0;return"fitDataTable"==e.layout&&(console.warn("Horizontal Vitrual DOM is not compatible with fitDataTable layout mode"),t=!1),e.responsiveLayout&&(console.warn("Horizontal Vitrual DOM is not compatible with responsive columns"),t=!1),this.table.rtl&&(console.warn("Horizontal Vitrual DOM is not currently compatible with RTL text direction"),t=!1),e.columns&&e.columns.find(function(e){return e.frozen})&&(console.warn("Horizontal Vitrual DOM is not compatible with frozen columns"),t=!1),t||(e.virtualDomHoz=!1),t},a.prototype.initialize=function(){var e=this;this.holderEl.addEventListener("scroll",function(){var t=e.holderEl.scrollLeft;e.scrollLeft!=t&&(e.scrollLeft=t,e.scroll(t-(e.vDomScrollPosLeft+e.window)))})},a.prototype.deinitialize=function(){this.initialized=!1},a.prototype.clear=function(){this.columns=[],this.leftCol=-1,this.rightCol=0,this.vDomScrollPosLeft=0,this.vDomScrollPosRight=0,this.vDomPadLeft=0,this.vDomPadRight=0},a.prototype.dataChange=function(){var e,t,o,i=!1,n=0,s=0;if("fitData"===this.table.options.layout){if(this.table.columnManager.columnsByIndex.forEach(function(e){!e.definition.width&&e.visible&&(i=!0)}),i&&i&&this.table.rowManager.getDisplayRows().length&&(this.vDomScrollPosRight=this.scrollLeft+this.holderEl.clientWidth+this.window,this.table.options.groupBy?(e=this.table.modules.groupRows.getGroups(!1)[0],t=e.getRows(!1)[0]):t=this.table.rowManager.getDisplayRows()[0],t)){o=t.getElement(),t.generateCells(),this.element.appendChild(o);for(var s=0;s<t.cells.length;s++){var a=t.cells[s];if(o.appendChild(a.getElement()),a.column.reinitializeWidth(),(n+=a.column.getWidth())>this.vDomScrollPosRight)break}for(o.parentNode.removeChild(o),this.fitDataColAvg=Math.floor(n/(s+1)),s;s<this.table.columnManager.columnsByIndex.length;s++)this.table.columnManager.columnsByIndex[s].setWidth(this.fitDataColAvg);this.reinitialize(!1,!0)}}else"fitColumns"===this.table.options.layout&&(this.table.modules.layout.layout(),this.table.vdomHoz.reinitialize(!1,!0))},a.prototype.fitDataLayoutOverride=function(){for(var e=this.leftCol;e<=this.rightCol;e++)this.columns[e].reinitializeWidth()},a.prototype.reinitialize=function(e,t){var o=this,i={cols:this.columns,leftCol:this.leftCol,rightCol:this.rightCol};if(!e||this.initialized){this.clear(),this.scrollLeft=this.holderEl.scrollLeft,this.vDomScrollPosLeft=this.scrollLeft-this.window,this.vDomScrollPosRight=this.scrollLeft+this.holderEl.clientWidth+this.window;var n=0;this.table.columnManager.columnsByIndex.forEach(function(e){var t={};if(e.visible){var i=e.getWidth();t.leftPos=n,t.rightPos=n+i,n+i>o.vDomScrollPosLeft&&n<o.vDomScrollPosRight?(-1==o.leftCol&&(o.leftCol=o.columns.length,o.vDomPadLeft=n),o.rightCol=o.columns.length):-1!==o.leftCol&&(o.vDomPadRight+=i),o.columns.push(e),e.modules.vdomHoz=t,n+=i}}),this.element.style.paddingLeft=this.vDomPadLeft+"px",this.element.style.paddingRight=this.vDomPadRight+"px",this.initialized=!0,t||e&&!this.reinitChanged(i)||this.renitializeRows(),this.holderEl.scrollLeft=this.scrollLeft}},a.prototype.reinitChanged=function(e){var t=this,o=!0;return e.cols.length!==this.columns.length||e.leftCol!==this.leftCol||e.rightCol!==this.rightCol||(e.cols.forEach(function(e,i){e!==t.columns[i]&&(o=!1)}),!o)},a.prototype.renitializeRows=function(){var e=this;this.table.rowManager.getVisibleRows().forEach(function(t){e.reinitializeRow(t,!0)})},a.prototype.scroll=function(e){this.vDomScrollPosLeft+=e,this.vDomScrollPosRight+=e,e>.8*this.holderEl.clientWidth?this.reinitialize():e>0?(this.addColRight(),this.removeColLeft()):(this.addColLeft(),this.removeColRight())},a.prototype.colPositionAdjust=function(e,t,o){for(var i=e;i<t;i++){var n=this.columns[i];n.modules.vdomHoz.leftPos-=o,n.modules.vdomHoz.rightPos-=o}},a.prototype.addColRight=function(){var e,t,o,i=this.columns[this.rightCol+1];i&&i.modules.vdomHoz.leftPos<=this.vDomScrollPosRight&&(e=this.table.rowManager.getVisibleRows(),e.forEach(function(e){if("group"!==e.type){var t=e.getCell(i);e.getElement().appendChild(t.getElement()),t.cellRendered()}}),this.fitDataColAvg&&(t=i.getWidth())===this.fitDataColAvg&&(i.reinitializeWidth(),(o=t-i.getWidth())&&(i.modules.vdomHoz.rightPos-=o,this.colPositionAdjust(this.rightCol+1,this.columns.length,o))),this.rightCol++,this.rightCol>=this.columns.length-1?this.vDomPadRight=0:this.vDomPadRight-=i.getWidth(),this.element.style.paddingRight=this.vDomPadRight+"px",this.addColRight())},a.prototype.addColLeft=function(){var e=this.columns[this.leftCol-1];if(e&&e.modules.vdomHoz.rightPos>=this.vDomScrollPosLeft){this.table.rowManager.getVisibleRows().forEach(function(t){if("group"!==t.type){var o=t.getCell(e);t.getElement().prepend(o.getElement()),o.cellRendered()}}),this.leftCol?this.vDomPadLeft-=e.getWidth():this.vDomPadLeft=0,this.element.style.paddingLeft=this.vDomPadLeft+"px",this.leftCol--,this.addColLeft()}},a.prototype.removeColRight=function(e){var t,e=this.columns[this.rightCol];e&&e.modules.vdomHoz.leftPos>this.vDomScrollPosRight&&(t=this.table.rowManager.getVisibleRows(),e.modules.vdomHoz.visible=!1,t.forEach(function(t){if("group"!==t.type){var o=t.getCell(e);t.getElement().removeChild(o.getElement())}}),this.vDomPadRight+=e.getWidth(),this.element.style.paddingRight=this.vDomPadRight+"px",this.rightCol--,this.removeColRight())},a.prototype.removeColLeft=function(){var e,t=this.columns[this.leftCol];t&&t.modules.vdomHoz.rightPos<this.vDomScrollPosLeft&&(e=this.table.rowManager.getVisibleRows(),e.forEach(function(e){if("group"!==e.type){var o=e.getCell(t);e.getElement().removeChild(o.getElement())}}),this.vDomPadLeft+=t.getWidth(),this.element.style.paddingLeft=this.vDomPadLeft+"px",this.leftCol++,this.removeColLeft())},a.prototype.initializeRow=function(e){if("group"!==e.type){e.modules.vdomHoz={leftCol:this.leftCol,rightCol:this.rightCol};for(var t=this.leftCol;t<=this.rightCol;t++){var o=this.columns[t];if(o.visible){var i=e.getCell(o);e.element.appendChild(i.getElement()),i.cellRendered()}}}},a.prototype.reinitializeRow=function(e,t){if("group"!==e.type&&(t||!e.modules.vdomHoz||e.modules.vdomHoz.leftCol!==this.leftCol||e.modules.vdomHoz.rightCol!==this.rightCol)){for(;e.element.firstChild;)e.element.removeChild(e.element.firstChild);this.initializeRow(e)}};var r=function(e){this._row=e};r.prototype.getData=function(e){return this._row.getData(e)},r.prototype.getElement=function(){return this._row.getElement()},r.prototype.getCells=function(){var e=[];return this._row.getCells().forEach(function(t){e.push(t.getComponent())}),e},r.prototype.getCell=function(e){var t=this._row.getCell(e);return!!t&&t.getComponent()},r.prototype.getIndex=function(){return this._row.getData("data")[this._row.table.options.index]},r.prototype.getPosition=function(e){return this._row.table.rowManager.getRowPosition(this._row,e)},r.prototype.delete=function(){return this._row.delete()},r.prototype.scrollTo=function(){return this._row.table.rowManager.scrollToRow(this._row)},r.prototype.pageTo=function(){if(this._row.table.modExists("page",!0))return this._row.table.modules.page.setPageToRow(this._row)},r.prototype.move=function(e,t){this._row.moveToRow(e,t)},r.prototype.update=function(e){return this._row.updateData(e)},r.prototype.normalizeHeight=function(){this._row.normalizeHeight(!0)},r.prototype.select=function(){this._row.table.modules.selectRow.selectRows(this._row)},r.prototype.deselect=function(){this._row.table.modules.selectRow.deselectRows(this._row)},r.prototype.toggleSelect=function(){this._row.table.modules.selectRow.toggleRow(this._row)},r.prototype.isSelected=function(){return this._row.table.modules.selectRow.isRowSelected(this._row)},r.prototype._getSelf=function(){return this._row},r.prototype.validate=function(){return this._row.validate()},r.prototype.freeze=function(){this._row.table.modExists("frozenRows",!0)&&this._row.table.modules.frozenRows.freezeRow(this._row)},r.prototype.unfreeze=function(){this._row.table.modExists("frozenRows",!0)&&this._row.table.modules.frozenRows.unfreezeRow(this._row)},r.prototype.isFrozen=function(){if(this._row.table.modExists("frozenRows",!0)){return this._row.table.modules.frozenRows.rows.indexOf(this._row)>-1}return!1},r.prototype.treeCollapse=function(){this._row.table.modExists("dataTree",!0)&&this._row.table.modules.dataTree.collapseRow(this._row)},r.prototype.treeExpand=function(){this._row.table.modExists("dataTree",!0)&&this._row.table.modules.dataTree.expandRow(this._row)},r.prototype.treeToggle=function(){this._row.table.modExists("dataTree",!0)&&this._row.table.modules.dataTree.toggleRow(this._row)},r.prototype.getTreeParent=function(){return!!this._row.table.modExists("dataTree",!0)&&this._row.table.modules.dataTree.getTreeParent(this._row)},r.prototype.getTreeChildren=function(){return!!this._row.table.modExists("dataTree",!0)&&this._row.table.modules.dataTree.getTreeChildren(this._row,!0)},r.prototype.addTreeChild=function(e,t,o){return!!this._row.table.modExists("dataTree",!0)&&this._row.table.modules.dataTree.addTreeChildRow(this._row,e,t,o)},r.prototype.reformat=function(){return this._row.reinitialize()},r.prototype.getGroup=function(){return this._row.getGroup().getComponent()},r.prototype.getTable=function(){return this._row.table},r.prototype.getNextRow=function(){var e=this._row.nextRow();return e?e.getComponent():e},r.prototype.getPrevRow=function(){var e=this._row.prevRow();return e?e.getComponent():e};var l=function(e,t){var o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"row";this.table=t.table,this.parent=t,this.data={},this.type=o,this.element=this.createElement(),this.modules={},this.cells=[],this.height=0,this.heightStyled="",this.manualHeight=!1,this.outerHeight=0,this.initialized=!1,this.heightInitialized=!1,this.component=null,this.setData(e),this.generateElement()};l.prototype.createElement=function(){var e=document.createElement("div");return e.classList.add("tabulator-row"),e.setAttribute("role","row"),e},l.prototype.getElement=function(){return this.element},l.prototype.detachElement=function(){this.element&&this.element.parentNode&&this.element.parentNode.removeChild(this.element)},l.prototype.generateElement=function(){var e,t,o,i=this;!1!==i.table.options.selectable&&i.table.modExists("selectRow")&&i.table.modules.selectRow.initializeRow(this),!1!==i.table.options.movableRows&&i.table.modExists("moveRow")&&i.table.modules.moveRow.initializeRow(this),!1!==i.table.options.dataTree&&i.table.modExists("dataTree")&&i.table.modules.dataTree.initializeRow(this),"collapse"===i.table.options.responsiveLayout&&i.table.modExists("responsiveLayout")&&i.table.modules.responsiveLayout.initializeRow(this),(i.table.options.rowContextMenu||i.table.options.rowClickMenu)&&this.table.modExists("menu")&&i.table.modules.menu.initializeRow(this),i.table.options.rowClick&&i.element.addEventListener("click",function(e){i.table.options.rowClick(e,i.getComponent())}),i.table.options.rowDblClick&&i.element.addEventListener("dblclick",function(e){i.table.options.rowDblClick(e,i.getComponent())}),i.table.options.rowContext&&i.element.addEventListener("contextmenu",function(e){i.table.options.rowContext(e,i.getComponent())}),i.table.options.rowMouseEnter&&i.element.addEventListener("mouseenter",function(e){i.table.options.rowMouseEnter(e,i.getComponent())}),i.table.options.rowMouseLeave&&i.element.addEventListener("mouseleave",function(e){i.table.options.rowMouseLeave(e,i.getComponent())}),i.table.options.rowMouseOver&&i.element.addEventListener("mouseover",function(e){i.table.options.rowMouseOver(e,i.getComponent())}),i.table.options.rowMouseOut&&i.element.addEventListener("mouseout",function(e){i.table.options.rowMouseOut(e,i.getComponent())}),i.table.options.rowMouseMove&&i.element.addEventListener("mousemove",function(e){i.table.options.rowMouseMove(e,i.getComponent())}),i.table.options.rowTap&&(o=!1,i.element.addEventListener("touchstart",function(e){o=!0},{passive:!0}),i.element.addEventListener("touchend",function(e){o&&i.table.options.rowTap(e,i.getComponent()),o=!1})),i.table.options.rowDblTap&&(e=null,i.element.addEventListener("touchend",function(t){e?(clearTimeout(e),e=null,i.table.options.rowDblTap(t,i.getComponent())):e=setTimeout(function(){clearTimeout(e),e=null},300)})),i.table.options.rowTapHold&&(t=null,i.element.addEventListener("touchstart",function(e){clearTimeout(t),t=setTimeout(function(){clearTimeout(t),t=null,o=!1,i.table.options.rowTapHold(e,i.getComponent())},1e3)},{passive:!0}),i.element.addEventListener("touchend",function(e){clearTimeout(t),t=null}))},l.prototype.generateCells=function(){this.cells=this.table.columnManager.generateCells(this)},l.prototype.initialize=function(e){var t=this;if(!this.initialized||e){for(this.deleteCells();this.element.firstChild;)this.element.removeChild(this.element.firstChild);this.table.modExists("frozenColumns")&&this.table.modules.frozenColumns.layoutRow(this),this.generateCells(),this.table.options.virtualDomHoz&&this.table.vdomHoz.initialized?this.table.vdomHoz.initializeRow(this):this.cells.forEach(function(e){t.element.appendChild(e.getElement()),e.cellRendered()}),e&&this.normalizeHeight(),this.table.options.dataTree&&this.table.modExists("dataTree")&&this.table.modules.dataTree.layoutRow(this),"collapse"===this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout")&&this.table.modules.responsiveLayout.layoutRow(this),this.table.options.rowFormatter&&this.table.options.rowFormatter(this.getComponent()),this.table.options.resizableRows&&this.table.modExists("resizeRows")&&this.table.modules.resizeRows.initializeRow(this),this.initialized=!0}else this.table.options.virtualDomHoz&&this.table.vdomHoz.reinitializeRow(this)},l.prototype.reinitializeHeight=function(){this.heightInitialized=!1,null!==this.element.offsetParent&&this.normalizeHeight(!0)},l.prototype.reinitialize=function(e){this.initialized=!1,this.heightInitialized=!1,this.manualHeight||(this.height=0,this.heightStyled=""),null!==this.element.offsetParent&&this.initialize(!0),this.table.options.dataTree&&this.table.modExists("dataTree",!0)&&this.table.modules.dataTree.getTreeChildren(this,!1,!0).forEach(function(e){e.reinitialize(!0)})},l.prototype.calcHeight=function(e){var t=0,o=this.table.options.resizableRows?this.element.clientHeight:0;this.cells.forEach(function(e){var o=e.getHeight();o>t&&(t=o)}),this.height=e?Math.max(t,o):this.manualHeight?this.height:Math.max(t,o),this.heightStyled=this.height?this.height+"px":"",this.outerHeight=this.element.offsetHeight},l.prototype.setCellHeight=function(){this.cells.forEach(function(e){e.setHeight()}),this.heightInitialized=!0},l.prototype.clearCellHeight=function(){this.cells.forEach(function(e){e.clearHeight()})},l.prototype.normalizeHeight=function(e){e&&this.clearCellHeight(),this.calcHeight(e),this.setCellHeight()},l.prototype.setHeight=function(e,t){(this.height!=e||t)&&(this.manualHeight=!0,this.height=e,this.heightStyled=e?e+"px":"",this.setCellHeight(),this.outerHeight=this.element.offsetHeight)},l.prototype.getHeight=function(){return this.outerHeight},l.prototype.getWidth=function(){return this.element.offsetWidth},l.prototype.deleteCell=function(e){var t=this.cells.indexOf(e);t>-1&&this.cells.splice(t,1)},l.prototype.setData=function(e){this.table.modExists("mutator")&&(e=this.table.modules.mutator.transformRow(e,"data")),this.data=e,this.table.options.reactiveData&&this.table.modExists("reactiveData",!0)&&this.table.modules.reactiveData.watchRow(this)},l.prototype.updateData=function(e){var t,o=this,i=h.prototype.helpers.elVisible(this.element),n={};return new Promise(function(s,a){"string"==typeof e&&(e=JSON.parse(e)),o.table.options.reactiveData&&o.table.modExists("reactiveData",!0)&&o.table.modules.reactiveData.block(),o.table.modExists("mutator")?(n=Object.assign(n,o.data),n=Object.assign(n,e),t=o.table.modules.mutator.transformRow(n,"data",e)):t=e;for(var r in t)o.data[r]=t[r];o.table.options.reactiveData&&o.table.modExists("reactiveData",!0)&&o.table.modules.reactiveData.unblock();for(var r in e){o.table.columnManager.getColumnsByFieldRoot(r).forEach(function(e){var n=o.getCell(e.getField());if(n){var s=e.getFieldValue(t);n.getValue()!=s&&(n.setValueProcessData(s),i&&n.cellRendered())}})}o.table.options.groupUpdateOnCellEdit&&o.table.options.groupBy&&o.table.modExists("groupRows")&&o.table.modules.groupRows.reassignRowToGroup(o.row),i?(o.normalizeHeight(!0),o.table.options.rowFormatter&&o.table.options.rowFormatter(o.getComponent())):(o.initialized=!1,o.height=0,o.heightStyled=""),!1!==o.table.options.dataTree&&o.table.modExists("dataTree")&&o.table.modules.dataTree.redrawNeeded(e)&&(o.table.modules.dataTree.initializeRow(o),i&&(o.table.modules.dataTree.layoutRow(o),o.table.rowManager.refreshActiveData("tree",!1,!0))),o.table.options.rowUpdated.call(o.table,o.getComponent()),o.table.options.dataChanged&&o.table.options.dataChanged.call(o.table,o.table.rowManager.getData()),s()})},l.prototype.getData=function(e){return e&&this.table.modExists("accessor")?this.table.modules.accessor.transformRow(this,e):this.data},l.prototype.getCell=function(e){return e=this.table.columnManager.findColumn(e),this.cells.find(function(t){return t.column===e})},l.prototype.getCellIndex=function(e){return this.cells.findIndex(function(t){return t===e})},l.prototype.findNextEditableCell=function(e){var t=!1;if(e<this.cells.length-1)for(var o=e+1;o<this.cells.length;o++){var i=this.cells[o];if(i.column.modules.edit&&h.prototype.helpers.elVisible(i.getElement())){var n=!0;if("function"==typeof i.column.modules.edit.check&&(n=i.column.modules.edit.check(i.getComponent())),n){t=i;break}}}return t},l.prototype.findPrevEditableCell=function(e){var t=!1;if(e>0)for(var o=e-1;o>=0;o--){var i=this.cells[o],n=!0;if(i.column.modules.edit&&h.prototype.helpers.elVisible(i.getElement())&&("function"==typeof i.column.modules.edit.check&&(n=i.column.modules.edit.check(i.getComponent())),n)){t=i;break}}return t},l.prototype.getCells=function(){return this.cells},l.prototype.nextRow=function(){return this.table.rowManager.nextDisplayRow(this,!0)||!1},l.prototype.prevRow=function(){return this.table.rowManager.prevDisplayRow(this,!0)||!1},l.prototype.moveToRow=function(e,t){var o=this.table.rowManager.findRow(e);o?(this.table.rowManager.moveRowActual(this,o,!t),this.table.rowManager.refreshActiveData("display",!1,!0)):console.warn("Move Error - No matching row found:",e)},l.prototype.validate=function(){var e=[];return this.cells.forEach(function(t){t.validate()||e.push(t.getComponent())}),!e.length||e},l.prototype.delete=function(){var e=this;return new Promise(function(t,o){var i,n;e.table.options.history&&e.table.modExists("history")&&(e.table.options.groupBy&&e.table.modExists("groupRows")?(n=e.getGroup().rows,(i=n.indexOf(e))&&(i=n[i-1])):(i=e.table.rowManager.getRowIndex(e))&&(i=e.table.rowManager.rows[i-1]),e.table.modules.history.action("rowDelete",e,{data:e.getData(),pos:!i,index:i})),e.deleteActual(),t()})},l.prototype.deleteActual=function(e){this.table.rowManager.getRowIndex(this);this.detatchModules(),this.table.options.reactiveData&&this.table.modExists("reactiveData",!0),this.modules.group&&this.modules.group.removeRow(this),this.table.rowManager.deleteRow(this,e),this.deleteCells(),this.initialized=!1,this.heightInitialized=!1,this.element=!1,this.table.options.dataTree&&this.table.modExists("dataTree",!0)&&this.table.modules.dataTree.rowDelete(this),this.table.modExists("columnCalcs")&&(this.table.options.groupBy&&this.table.modExists("groupRows")?this.table.modules.columnCalcs.recalcRowGroup(this):this.table.modules.columnCalcs.recalc(this.table.rowManager.activeRows))},l.prototype.detatchModules=function(){this.table.modExists("selectRow")&&this.table.modules.selectRow._deselectRow(this,!0),this.table.modExists("edit")&&this.table.modules.edit.currentCell.row===this&&this.table.modules.edit.cancelEdit(),this.table.modExists("frozenRows")&&this.table.modules.frozenRows.detachRow(this)},l.prototype.deleteCells=function(){for(var e=this.cells.length,t=0;t<e;t++)this.cells[0].delete()},l.prototype.wipe=function(){for(this.detatchModules(),this.deleteCells();this.element.firstChild;)this.element.removeChild(this.element.firstChild);this.element=!1,this.modules={},this.element.parentNode&&this.element.parentNode.removeChild(this.element)},l.prototype.getGroup=function(){return this.modules.group||!1},l.prototype.getComponent=function(){return this.component||(this.component=new r(this)),this.component};var c=function(e){this._cell=e};c.prototype.getValue=function(){return this._cell.getValue()},c.prototype.getOldValue=function(){return this._cell.getOldValue()},c.prototype.getInitialValue=function(){return this._cell.initialValue},c.prototype.getElement=function(){return this._cell.getElement()},c.prototype.getRow=function(){return this._cell.row.getComponent()},c.prototype.getData=function(){return this._cell.row.getData()},c.prototype.getField=function(){return this._cell.column.getField()},c.prototype.getColumn=function(){return this._cell.column.getComponent()},c.prototype.setValue=function(e,t){void 0===t&&(t=!0),this._cell.setValue(e,t)},c.prototype.restoreOldValue=function(){this._cell.setValueActual(this._cell.getOldValue())},c.prototype.restoreInitialValue=function(){this._cell.setValueActual(this._cell.initialValue)},c.prototype.edit=function(e){return this._cell.edit(e)},c.prototype.cancelEdit=function(){this._cell.cancelEdit()},c.prototype.isEdited=function(){return!!this._cell.modules.edit&&this._cell.modules.edit.edited},c.prototype.clearEdited=function(){self.table.modExists("edit",!0)&&this._cell.table.modules.edit.clearEdited(this._cell)},c.prototype.isValid=function(){return!this._cell.modules.validate||!this._cell.modules.validate.invalid},c.prototype.validate=function(){return this._cell.validate()},c.prototype.clearValidation=function(){this._cell.table.modExists("validate",!0)&&this._cell.table.modules.validate.clearValidation(this._cell)},c.prototype.nav=function(){return this._cell.nav()},c.prototype.checkHeight=function(){this._cell.checkHeight()},c.prototype.getTable=function(){return this._cell.table},c.prototype._getSelf=function(){return this._cell};var u=function(e,t){this.table=e.table,this.column=e,this.row=t,this.element=null,this.value=null,this.initialValue,this.oldValue=null,this.modules={},this.height=null,this.width=null,this.minWidth=null,this.component=null,this.loaded=!1,this.build()};u.prototype.build=function(){this.generateElement(),this.setWidth(),this._configureCell(),this.setValueActual(this.column.getFieldValue(this.row.data)),this.initialValue=this.value},u.prototype.generateElement=function(){this.element=document.createElement("div"),this.element.className="tabulator-cell",this.element.setAttribute("role","gridcell"),this.element=this.element},u.prototype._configureCell=function(){var e=this,t=e.column.cellEvents,o=e.element,i=this.column.getField(),n={top:"flex-start",bottom:"flex-end",middle:"center"},s={left:"flex-start",right:"flex-end",center:"center"};if(o.style.textAlign=e.column.hozAlign,e.column.vertAlign&&(o.style.display="inline-flex",o.style.alignItems=n[e.column.vertAlign]||"",e.column.hozAlign&&(o.style.justifyContent=s[e.column.hozAlign]||"")),i&&o.setAttribute("tabulator-field",i),e.column.definition.cssClass){e.column.definition.cssClass.split(" ").forEach(function(e){o.classList.add(e)})}"hover"===this.table.options.tooltipGenerationMode&&o.addEventListener("mouseenter",function(t){e._generateTooltip()}),e._bindClickEvents(t),e._bindTouchEvents(t),e._bindMouseEvents(t),e.column.modules.edit&&e.table.modules.edit.bindEditor(e),e.column.definition.rowHandle&&!1!==e.table.options.movableRows&&e.table.modExists("moveRow")&&e.table.modules.moveRow.initializeCell(e),e.column.visible||e.hide()},u.prototype._bindClickEvents=function(e){var t=this,o=t.element;(e.cellClick||t.table.options.cellClick)&&o.addEventListener("click",function(o){var i=t.getComponent();e.cellClick&&e.cellClick.call(t.table,o,i),t.table.options.cellClick&&t.table.options.cellClick.call(t.table,o,i)}),e.cellDblClick||this.table.options.cellDblClick?o.addEventListener("dblclick",function(o){var i=t.getComponent();e.cellDblClick&&e.cellDblClick.call(t.table,o,i),t.table.options.cellDblClick&&t.table.options.cellDblClick.call(t.table,o,i)}):o.addEventListener("dblclick",function(e){if(!t.table.modExists("edit")||t.table.modules.edit.currentCell!==t){e.preventDefault();try{if(document.selection){var o=document.body.createTextRange();o.moveToElementText(t.element),o.select()}else if(window.getSelection){var o=document.createRange();o.selectNode(t.element),window.getSelection().removeAllRanges(),window.getSelection().addRange(o)}}catch(e){}}}),(e.cellContext||this.table.options.cellContext)&&o.addEventListener("contextmenu",function(o){var i=t.getComponent();e.cellContext&&e.cellContext.call(t.table,o,i),t.table.options.cellContext&&t.table.options.cellContext.call(t.table,o,i)})},u.prototype._bindMouseEvents=function(e){var t=this,o=t.element;(e.cellMouseEnter||t.table.options.cellMouseEnter)&&o.addEventListener("mouseenter",function(o){var i=t.getComponent();e.cellMouseEnter&&e.cellMouseEnter.call(t.table,o,i),t.table.options.cellMouseEnter&&t.table.options.cellMouseEnter.call(t.table,o,i)}),(e.cellMouseLeave||t.table.options.cellMouseLeave)&&o.addEventListener("mouseleave",function(o){var i=t.getComponent();e.cellMouseLeave&&e.cellMouseLeave.call(t.table,o,i),t.table.options.cellMouseLeave&&t.table.options.cellMouseLeave.call(t.table,o,i)}),(e.cellMouseOver||t.table.options.cellMouseOver)&&o.addEventListener("mouseover",function(o){var i=t.getComponent();e.cellMouseOver&&e.cellMouseOver.call(t.table,o,i),t.table.options.cellMouseOver&&t.table.options.cellMouseOver.call(t.table,o,i)}),(e.cellMouseOut||t.table.options.cellMouseOut)&&o.addEventListener("mouseout",function(o){var i=t.getComponent();e.cellMouseOut&&e.cellMouseOut.call(t.table,o,i),t.table.options.cellMouseOut&&t.table.options.cellMouseOut.call(t.table,o,i)}),(e.cellMouseMove||t.table.options.cellMouseMove)&&o.addEventListener("mousemove",function(o){var i=t.getComponent();e.cellMouseMove&&e.cellMouseMove.call(t.table,o,i),t.table.options.cellMouseMove&&t.table.options.cellMouseMove.call(t.table,o,i)})},u.prototype._bindTouchEvents=function(e){var t,o,i,n=this,s=n.element;(e.cellTap||this.table.options.cellTap)&&(i=!1,s.addEventListener("touchstart",function(e){i=!0},{passive:!0}),s.addEventListener("touchend",function(t){if(i){var o=n.getComponent();e.cellTap&&e.cellTap.call(n.table,t,o),n.table.options.cellTap&&n.table.options.cellTap.call(n.table,t,o)}i=!1})),(e.cellDblTap||this.table.options.cellDblTap)&&(t=null,s.addEventListener("touchend",function(o){if(t){clearTimeout(t),t=null;var i=n.getComponent();e.cellDblTap&&e.cellDblTap.call(n.table,o,i),n.table.options.cellDblTap&&n.table.options.cellDblTap.call(n.table,o,i)}else t=setTimeout(function(){clearTimeout(t),t=null},300)})),(e.cellTapHold||this.table.options.cellTapHold)&&(o=null,s.addEventListener("touchstart",function(t){clearTimeout(o),o=setTimeout(function(){clearTimeout(o),o=null,i=!1;var s=n.getComponent();e.cellTapHold&&e.cellTapHold.call(n.table,t,s),n.table.options.cellTapHold&&n.table.options.cellTapHold.call(n.table,t,s)},1e3)},{passive:!0}),s.addEventListener("touchend",function(e){clearTimeout(o),o=null}))},u.prototype._generateContents=function(){var e;switch(e=this.table.modExists("format")?this.table.modules.format.formatValue(this):this.element.innerHTML=this.value,void 0===e?"undefined":_typeof(e)){case"object":if(e instanceof Node){for(;this.element.firstChild;)this.element.removeChild(this.element.firstChild);this.element.appendChild(e)}else this.element.innerHTML="",null!=e&&console.warn("Format Error - Formatter has returned a type of object, the only valid formatter object return is an instance of Node, the formatter returned:",e);break;case"undefined":case"null":this.element.innerHTML="";break;default:this.element.innerHTML=e}},u.prototype.cellRendered=function(){this.table.modExists("format")&&this.table.modules.format.cellRendered&&this.table.modules.format.cellRendered(this)},u.prototype._generateTooltip=function(){var e=this.column.tooltip;e?(!0===e?e=this.value:"function"==typeof e&&!1===(e=e(this.getComponent()))&&(e=""),void 0===e&&(e=""),this.element.setAttribute("title",e)):this.element.setAttribute("title","")},u.prototype.getElement=function(){return this.loaded||(this.loaded=!0,this.layoutElement()),this.element},u.prototype.getValue=function(){return this.value},u.prototype.getOldValue=function(){return this.oldValue},u.prototype.setValue=function(e,t){var o,i=this.setValueProcessData(e,t);i&&(this.table.options.history&&this.table.modExists("history")&&this.table.modules.history.action("cellEdit",this,{oldValue:this.oldValue,newValue:this.value}),o=this.getComponent(),this.column.cellEvents.cellEdited&&this.column.cellEvents.cellEdited.call(this.table,o),this.table.options.groupUpdateOnCellEdit&&this.table.options.groupBy&&this.table.modExists("groupRows")&&this.table.modules.groupRows.reassignRowToGroup(this.row),this.cellRendered(),this.table.options.cellEdited.call(this.table,o),this.table.options.dataChanged&&this.table.options.dataChanged.call(this.table,this.table.rowManager.getData()))},u.prototype.setValueProcessData=function(e,t){var o=!1;return this.value!=e&&(o=!0,t&&this.column.modules.mutate&&(e=this.table.modules.mutator.transformCell(this,e))),this.setValueActual(e),o&&this.table.modExists("columnCalcs")&&(this.column.definition.topCalc||this.column.definition.bottomCalc)&&(this.table.options.groupBy&&this.table.modExists("groupRows")?("table"!=this.table.options.columnCalcs&&"both"!=this.table.options.columnCalcs||this.table.modules.columnCalcs.recalc(this.table.rowManager.activeRows),"table"!=this.table.options.columnCalcs&&this.table.modules.columnCalcs.recalcRowGroup(this.row)):this.table.modules.columnCalcs.recalc(this.table.rowManager.activeRows)),o},u.prototype.setValueActual=function(e){this.oldValue=this.value,this.value=e,this.table.options.reactiveData&&this.table.modExists("reactiveData")&&this.table.modules.reactiveData.block(),this.column.setFieldValue(this.row.data,e),this.table.options.reactiveData&&this.table.modExists("reactiveData")&&this.table.modules.reactiveData.unblock(),this.loaded&&this.layoutElement()},u.prototype.layoutElement=function(){this._generateContents(),this._generateTooltip(),this.table.options.resizableColumns&&this.table.modExists("resizeColumns")&&"row"===this.row.type&&this.table.modules.resizeColumns.initializeColumn("cell",this.column,this.element),
+(this.column.definition.contextMenu||this.column.definition.clickMenu)&&this.table.modExists("menu")&&this.table.modules.menu.initializeCell(this),this.table.modExists("frozenColumns")&&this.table.modules.frozenColumns.layoutElement(this.element,this.column)},u.prototype.setWidth=function(){this.width=this.column.width,this.element.style.width=this.column.widthStyled},u.prototype.clearWidth=function(){this.width="",this.element.style.width=""},u.prototype.getWidth=function(){return this.width||this.element.offsetWidth},u.prototype.setMinWidth=function(){this.minWidth=this.column.minWidth,this.element.style.minWidth=this.column.minWidthStyled},u.prototype.checkHeight=function(){this.row.reinitializeHeight()},u.prototype.clearHeight=function(){this.element.style.height="",this.height=null},u.prototype.setHeight=function(){this.height=this.row.height,this.element.style.height=this.row.heightStyled},u.prototype.getHeight=function(){return this.height||this.element.offsetHeight},u.prototype.show=function(){this.element.style.display=this.column.vertAlign?"inline-flex":""},u.prototype.hide=function(){this.element.style.display="none"},u.prototype.edit=function(e){if(this.table.modExists("edit",!0))return this.table.modules.edit.editCell(this,e)},u.prototype.cancelEdit=function(){if(this.table.modExists("edit",!0)){var e=this.table.modules.edit.getCurrentCell();e&&e._getSelf()===this?this.table.modules.edit.cancelEdit():console.warn("Cancel Editor Error - This cell is not currently being edited ")}},u.prototype.validate=function(){if(this.column.modules.validate&&this.table.modExists("validate",!0)){return!0===this.table.modules.validate.validate(this.column.modules.validate,this,this.getValue())}return!0},u.prototype.delete=function(){!this.table.rowManager.redrawBlock&&this.element.parentNode&&this.element.parentNode.removeChild(this.element),this.modules.validate&&this.modules.validate.invalid&&this.table.modules.validate.clearValidation(this),this.modules.edit&&this.modules.edit.edited&&this.table.modules.edit.clearEdited(this),this.table.options.history&&this.table.modules.history.clearComponentHistory(this),this.element=!1,this.column.deleteCell(this),this.row.deleteCell(this),this.calcs={}},u.prototype.nav=function(){var e=this,t=!1,o=this.row.getCellIndex(this);return{next:function(){var t,o=this.right();return!!o||!(!(t=e.table.rowManager.nextDisplayRow(e.row,!0))||!(o=t.findNextEditableCell(-1)))&&(o.edit(),!0)},prev:function(){var t,o=this.left();return!!o||!(!(t=e.table.rowManager.prevDisplayRow(e.row,!0))||!(o=t.findPrevEditableCell(t.cells.length)))&&(o.edit(),!0)},left:function(){return!!(t=e.row.findPrevEditableCell(o))&&(t.edit(),!0)},right:function(){return!!(t=e.row.findNextEditableCell(o))&&(t.edit(),!0)},up:function(){var t=e.table.rowManager.prevDisplayRow(e.row,!0);t&&t.cells[o].edit()},down:function(){var t=e.table.rowManager.nextDisplayRow(e.row,!0);t&&t.cells[o].edit()}}},u.prototype.getIndex=function(){this.row.getCellIndex(this)},u.prototype.getComponent=function(){return this.component||(this.component=new c(this)),this.component};var d=function(e){this.table=e,this.active=!1,this.element=this.createElement(),this.external=!1,this.links=[],this._initialize()};d.prototype.createElement=function(){var e=document.createElement("div");return e.classList.add("tabulator-footer"),e},d.prototype._initialize=function(e){if(this.table.options.footerElement)switch(_typeof(this.table.options.footerElement)){case"string":"<"===this.table.options.footerElement[0]?this.element.innerHTML=this.table.options.footerElement:(this.external=!0,this.element=document.querySelector(this.table.options.footerElement));break;default:this.element=this.table.options.footerElement}},d.prototype.getElement=function(){return this.element},d.prototype.append=function(e,t){this.activate(t),this.element.appendChild(e),this.table.rowManager.adjustTableSize()},d.prototype.prepend=function(e,t){this.activate(t),this.element.insertBefore(e,this.element.firstChild),this.table.rowManager.adjustTableSize()},d.prototype.remove=function(e){e.parentNode.removeChild(e),this.deactivate()},d.prototype.deactivate=function(e){this.element.firstChild&&!e||(this.external||this.element.parentNode.removeChild(this.element),this.active=!1)},d.prototype.activate=function(e){this.active||(this.active=!0,this.external||(this.table.element.appendChild(this.getElement()),this.table.element.style.display="")),e&&this.links.push(e)},d.prototype.redraw=function(){this.links.forEach(function(e){e.footerRedraw()})};var h=function e(t,o){this.options={},this.columnManager=null,this.rowManager=null,this.footerManager=null,this.vdomHoz=null,this.browser="",this.browserSlow=!1,this.browserMobile=!1,this.rtl=!1,this.modules={},this.initializeElement(t)&&(this.initializeOptions(o||{}),this._create()),e.prototype.comms.register(this)};h.prototype.defaultOptions={height:!1,minHeight:!1,maxHeight:!1,layout:"fitData",layoutColumnsOnNewData:!1,columnMinWidth:40,columnHeaderVertAlign:"top",columnVertAlign:!1,resizableColumns:!0,resizableRows:!1,autoResize:!0,columns:[],cellHozAlign:"",cellVertAlign:"",headerHozAlign:"",data:[],autoColumns:!1,autoColumnsDefinitions:!1,reactiveData:!1,nestedFieldSeparator:".",tooltips:!1,tooltipsHeader:!1,tooltipGenerationMode:"load",initialSort:!1,initialFilter:!1,initialHeaderFilter:!1,columnHeaderSortMulti:!0,sortOrderReverse:!1,headerSort:!0,headerSortTristate:!1,headerSortElement:"<div class='tabulator-arrow'></div>",footerElement:!1,index:"id",textDirection:"auto",keybindings:[],tabEndNewRow:!1,invalidOptionWarnings:!0,clipboard:!1,clipboardCopyStyled:!0,clipboardCopyConfig:!1,clipboardCopyFormatter:!1,clipboardCopyRowRange:"active",clipboardPasteParser:"table",clipboardPasteAction:"insert",clipboardCopied:function(){},clipboardPasted:function(){},clipboardPasteError:function(){},downloadDataFormatter:!1,downloadReady:function(e,t){return t},downloadComplete:!1,downloadConfig:{},downloadRowRange:"active",dataTree:!1,dataTreeFilter:!0,dataTreeSort:!0,dataTreeElementColumn:!1,dataTreeBranchElement:!0,dataTreeChildIndent:9,dataTreeChildField:"_children",dataTreeCollapseElement:!1,dataTreeExpandElement:!1,dataTreeStartExpanded:!1,dataTreeRowExpanded:function(){},dataTreeRowCollapsed:function(){},dataTreeChildColumnCalcs:!1,dataTreeSelectPropagate:!1,printAsHtml:!1,printFormatter:!1,printHeader:!1,printFooter:!1,printCopyStyle:!0,printStyled:!0,printVisibleRows:!0,printRowRange:"visible",printConfig:{},addRowPos:"bottom",selectable:"highlight",selectableRangeMode:"drag",selectableRollingSelection:!0,selectablePersistence:!0,selectableCheck:function(e,t){return!0},headerFilterLiveFilterDelay:300,headerFilterPlaceholder:!1,headerVisible:!0,history:!1,locale:!1,langs:{},virtualDom:!0,virtualDomBuffer:0,virtualDomHoz:!1,persistentLayout:!1,persistentSort:!1,persistentFilter:!1,persistenceID:"",persistenceMode:!0,persistenceReaderFunc:!1,persistenceWriterFunc:!1,persistence:!1,responsiveLayout:!1,responsiveLayoutCollapseStartOpen:!0,responsiveLayoutCollapseUseFormatters:!0,responsiveLayoutCollapseFormatter:!1,pagination:!1,paginationSize:!1,paginationInitialPage:1,paginationButtonCount:5,paginationSizeSelector:!1,paginationElement:!1,paginationDataSent:{},paginationDataReceived:{},paginationAddRow:"page",ajaxURL:!1,ajaxURLGenerator:!1,ajaxParams:{},ajaxConfig:"get",ajaxContentType:"form",ajaxRequestFunc:!1,ajaxLoader:!0,ajaxLoaderLoading:!1,ajaxLoaderError:!1,ajaxFiltering:!1,ajaxSorting:!1,ajaxProgressiveLoad:!1,ajaxProgressiveLoadDelay:0,ajaxProgressiveLoadScrollMargin:0,groupBy:!1,groupStartOpen:!0,groupValues:!1,groupUpdateOnCellEdit:!1,groupHeader:!1,groupHeaderPrint:null,groupHeaderClipboard:null,groupHeaderHtmlOutput:null,groupHeaderDownload:null,htmlOutputConfig:!1,movableColumns:!1,movableRows:!1,movableRowsConnectedTables:!1,movableRowsConnectedElements:!1,movableRowsSender:!1,movableRowsReceiver:"insert",movableRowsSendingStart:function(){},movableRowsSent:function(){},movableRowsSentFailed:function(){},movableRowsSendingStop:function(){},movableRowsReceivingStart:function(){},movableRowsReceived:function(){},movableRowsReceivedFailed:function(){},movableRowsReceivingStop:function(){},movableRowsElementDrop:function(){},scrollToRowPosition:"top",scrollToRowIfVisible:!0,scrollToColumnPosition:"left",scrollToColumnIfVisible:!0,rowFormatter:!1,rowFormatterPrint:null,rowFormatterClipboard:null,rowFormatterHtmlOutput:null,placeholder:!1,tableBuilding:function(){},tableBuilt:function(){},renderStarted:function(){},renderComplete:function(){},rowClick:!1,rowDblClick:!1,rowContext:!1,rowTap:!1,rowDblTap:!1,rowTapHold:!1,rowMouseEnter:!1,rowMouseLeave:!1,rowMouseOver:!1,rowMouseOut:!1,rowMouseMove:!1,rowContextMenu:!1,rowClickMenu:!1,rowAdded:function(){},rowDeleted:function(){},rowMoved:function(){},rowUpdated:function(){},rowSelectionChanged:function(){},rowSelected:function(){},rowDeselected:function(){},rowResized:function(){},cellClick:!1,cellDblClick:!1,cellContext:!1,cellTap:!1,cellDblTap:!1,cellTapHold:!1,cellMouseEnter:!1,cellMouseLeave:!1,cellMouseOver:!1,cellMouseOut:!1,cellMouseMove:!1,cellEditing:function(){},cellEdited:function(){},cellEditCancelled:function(){},columnMoved:!1,columnResized:function(){},columnTitleChanged:function(){},columnVisibilityChanged:function(){},htmlImporting:function(){},htmlImported:function(){},dataLoading:function(){},dataLoaded:function(){},dataEdited:!1,dataChanged:!1,ajaxRequesting:function(){},ajaxResponse:!1,ajaxError:function(){},dataFiltering:!1,dataFiltered:!1,dataSorting:function(){},dataSorted:function(){},groupToggleElement:"arrow",groupClosedShowCalcs:!1,dataGrouping:function(){},dataGrouped:!1,groupVisibilityChanged:function(){},groupClick:!1,groupDblClick:!1,groupContext:!1,groupContextMenu:!1,groupClickMenu:!1,groupTap:!1,groupDblTap:!1,groupTapHold:!1,columnCalcs:!0,pageLoaded:function(){},localized:function(){},validationMode:"blocking",validationFailed:function(){},historyUndo:function(){},historyRedo:function(){},scrollHorizontal:function(){},scrollVertical:function(){}},h.prototype.initializeOptions=function(e){if(!1!==e.invalidOptionWarnings)for(var t in e)void 0===this.defaultOptions[t]&&console.warn("Invalid table constructor option:",t);for(var t in this.defaultOptions)t in e?this.options[t]=e[t]:Array.isArray(this.defaultOptions[t])?this.options[t]=Object.assign([],this.defaultOptions[t]):"object"===_typeof(this.defaultOptions[t])&&null!==this.defaultOptions[t]?this.options[t]=Object.assign({},this.defaultOptions[t]):this.options[t]=this.defaultOptions[t]},h.prototype.initializeElement=function(e){return"undefined"!=typeof HTMLElement&&e instanceof HTMLElement?(this.element=e,!0):"string"==typeof e?(this.element=document.querySelector(e),!!this.element||(console.error("Tabulator Creation Error - no element found matching selector: ",e),!1)):(console.error("Tabulator Creation Error - Invalid element provided:",e),!1)},h.prototype.rtlCheck=function(){var e=window.getComputedStyle(this.element);switch(this.options.textDirection){case"auto":if("rtl"!==e.direction)break;case"rtl":this.element.classList.add("tabulator-rtl"),this.rtl=!0;break;case"ltr":this.element.classList.add("tabulator-ltr");default:this.rtl=!1}},h.prototype._mapDepricatedFunctionality=function(){(this.options.persistentLayout||this.options.persistentSort||this.options.persistentFilter)&&(this.options.persistence||(this.options.persistence={})),this.options.dataEdited&&(console.warn("DEPRECATION WARNING - dataEdited option has been deprecated, please use the dataChanged option instead"),this.options.dataChanged=this.options.dataEdited),this.options.downloadDataFormatter&&console.warn("DEPRECATION WARNING - downloadDataFormatter option has been deprecated"),void 0!==this.options.clipboardCopyHeader&&(this.options.columnHeaders=this.options.clipboardCopyHeader,console.warn("DEPRECATION WARNING - clipboardCopyHeader option has been deprecated, please use the columnHeaders property on the clipboardCopyConfig option")),!0!==this.options.printVisibleRows&&(console.warn("printVisibleRows option is deprecated, you should now use the printRowRange option"),this.options.persistence.printRowRange="active"),!0!==this.options.printCopyStyle&&(console.warn("printCopyStyle option is deprecated, you should now use the printStyled option"),this.options.persistence.printStyled=this.options.printCopyStyle),this.options.persistentLayout&&(console.warn("persistentLayout option is deprecated, you should now use the persistence option"),!0!==this.options.persistence&&void 0===this.options.persistence.columns&&(this.options.persistence.columns=!0)),this.options.persistentSort&&(console.warn("persistentSort option is deprecated, you should now use the persistence option"),!0!==this.options.persistence&&void 0===this.options.persistence.sort&&(this.options.persistence.sort=!0)),this.options.persistentFilter&&(console.warn("persistentFilter option is deprecated, you should now use the persistence option"),!0!==this.options.persistence&&void 0===this.options.persistence.filter&&(this.options.persistence.filter=!0)),this.options.columnVertAlign&&(console.warn("columnVertAlign option is deprecated, you should now use the columnHeaderVertAlign option"),this.options.columnHeaderVertAlign=this.options.columnVertAlign)},h.prototype._clearSelection=function(){this.element.classList.add("tabulator-block-select"),window.getSelection?window.getSelection().empty?window.getSelection().empty():window.getSelection().removeAllRanges&&window.getSelection().removeAllRanges():document.selection&&document.selection.empty(),this.element.classList.remove("tabulator-block-select")},h.prototype._create=function(){this._clearObjectPointers(),this._mapDepricatedFunctionality(),this.bindModules(),this.rtlCheck(),"TABLE"===this.element.tagName&&this.modExists("htmlTableImport",!0)&&this.modules.htmlTableImport.parseTable(),this.columnManager=new t(this),this.rowManager=new s(this),this.footerManager=new d(this),this.columnManager.setRowManager(this.rowManager),this.rowManager.setColumnManager(this.columnManager),this.options.virtualDomHoz&&(this.vdomHoz=new a(this)),this._buildElement(),this._loadInitialData()},h.prototype._clearObjectPointers=function(){this.options.columns=this.options.columns.slice(0),this.options.reactiveData||(this.options.data=this.options.data.slice(0))},h.prototype._buildElement=function(){var e=this,t=this.element,o=this.modules,i=this.options;for(i.tableBuilding.call(this),t.classList.add("tabulator"),t.setAttribute("role","grid");t.firstChild;)t.removeChild(t.firstChild);i.height&&(i.height=isNaN(i.height)?i.height:i.height+"px",t.style.height=i.height),!1!==i.minHeight&&(i.minHeight=isNaN(i.minHeight)?i.minHeight:i.minHeight+"px",t.style.minHeight=i.minHeight),!1!==i.maxHeight&&(i.maxHeight=isNaN(i.maxHeight)?i.maxHeight:i.maxHeight+"px",t.style.maxHeight=i.maxHeight),this.columnManager.initialize(),this.rowManager.initialize(),this._detectBrowser(),this.modExists("layout",!0)&&o.layout.initialize(i.layout),o.localize.initialize(),!1!==i.headerFilterPlaceholder&&o.localize.setHeaderFilterPlaceholder(i.headerFilterPlaceholder);for(var n in i.langs)o.localize.installLang(n,i.langs[n]);if(o.localize.setLocale(i.locale),"string"==typeof i.placeholder){var s=document.createElement("div");s.classList.add("tabulator-placeholder");var a=document.createElement("span");a.innerHTML=i.placeholder,s.appendChild(a),i.placeholder=s}if(t.appendChild(this.columnManager.getElement()),t.appendChild(this.rowManager.getElement()),i.footerElement&&this.footerManager.activate(),i.persistence&&this.modExists("persistence",!0)&&o.persistence.initialize(),i.persistence&&this.modExists("persistence",!0)&&o.persistence.config.columns&&(i.columns=o.persistence.load("columns",i.columns)),i.movableRows&&this.modExists("moveRow")&&o.moveRow.initialize(),i.autoColumns&&this.options.data&&this.columnManager.generateColumnsFromRowData(this.options.data),this.modExists("columnCalcs")&&o.columnCalcs.initialize(),this.columnManager.setColumns(i.columns),i.dataTree&&this.modExists("dataTree",!0)&&o.dataTree.initialize(),this.modExists("frozenRows")&&this.modules.frozenRows.initialize(),(i.persistence&&this.modExists("persistence",!0)&&o.persistence.config.sort||i.initialSort)&&this.modExists("sort",!0)){var r=[];i.persistence&&this.modExists("persistence",!0)&&o.persistence.config.sort?!1===(r=o.persistence.load("sort"))&&i.initialSort&&(r=i.initialSort):i.initialSort&&(r=i.initialSort),o.sort.setSort(r)}if((i.persistence&&this.modExists("persistence",!0)&&o.persistence.config.filter||i.initialFilter)&&this.modExists("filter",!0)){var l=[];i.persistence&&this.modExists("persistence",!0)&&o.persistence.config.filter?!1===(l=o.persistence.load("filter"))&&i.initialFilter&&(l=i.initialFilter):i.initialFilter&&(l=i.initialFilter),o.filter.setFilter(l)}i.initialHeaderFilter&&this.modExists("filter",!0)&&i.initialHeaderFilter.forEach(function(t){var i=e.columnManager.findColumn(t.field);if(!i)return console.warn("Column Filter Error - No matching column found:",t.field),!1;o.filter.setHeaderFilterValue(i,t.value)}),this.modExists("ajax")&&o.ajax.initialize(),i.pagination&&this.modExists("page",!0)&&o.page.initialize(),i.groupBy&&this.modExists("groupRows",!0)&&o.groupRows.initialize(),this.modExists("keybindings")&&o.keybindings.initialize(),this.modExists("selectRow")&&o.selectRow.clearSelectionData(!0),i.autoResize&&this.modExists("resizeTable")&&o.resizeTable.initialize(),this.modExists("clipboard")&&o.clipboard.initialize(),i.printAsHtml&&this.modExists("print")&&o.print.initialize(),i.tableBuilt.call(this)},h.prototype._loadInitialData=function(){var e=this;if(e.options.pagination&&e.modExists("page"))if(e.modules.page.reset(!0,!0),"local"==e.options.pagination){if(e.options.data.length)e.rowManager.setData(e.options.data,!1,!0);else{if((e.options.ajaxURL||e.options.ajaxURLGenerator)&&e.modExists("ajax"))return void e.modules.ajax.loadData(!1,!0).then(function(){}).catch(function(){e.options.paginationInitialPage&&e.modules.page.setPage(e.options.paginationInitialPage)});e.rowManager.setData(e.options.data,!1,!0)}e.options.paginationInitialPage&&e.modules.page.setPage(e.options.paginationInitialPage)}else e.options.ajaxURL?e.modules.page.setPage(e.options.paginationInitialPage).then(function(){}).catch(function(){}):e.rowManager.setData([],!1,!0);else e.options.data.length?e.rowManager.setData(e.options.data):(e.options.ajaxURL||e.options.ajaxURLGenerator)&&e.modExists("ajax")?e.modules.ajax.loadData(!1,!0).then(function(){}).catch(function(){}):e.rowManager.setData(e.options.data,!1,!0)},h.prototype.destroy=function(){var e=this.element;for(h.prototype.comms.deregister(this),this.options.reactiveData&&this.modExists("reactiveData",!0)&&this.modules.reactiveData.unwatchData(),this.rowManager.rows.forEach(function(e){e.wipe()}),this.rowManager.rows=[],this.rowManager.activeRows=[],this.rowManager.displayRows=[],this.options.autoResize&&this.modExists("resizeTable")&&this.modules.resizeTable.clearBindings(),this.modExists("keybindings")&&this.modules.keybindings.clearBindings();e.firstChild;)e.removeChild(e.firstChild);e.classList.remove("tabulator")},h.prototype._detectBrowser=function(){var e=navigator.userAgent||navigator.vendor||window.opera;e.indexOf("Trident")>-1?(this.browser="ie",this.browserSlow=!0):e.indexOf("Edge")>-1?(this.browser="edge",this.browserSlow=!0):e.indexOf("Firefox")>-1?(this.browser="firefox",this.browserSlow=!1):(this.browser="other",this.browserSlow=!1),this.browserMobile=/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino|android|ipad|playbook|silk/i.test(e)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(e.substr(0,4))},h.prototype.blockRedraw=function(){return this.rowManager.blockRedraw()},h.prototype.restoreRedraw=function(){return this.rowManager.restoreRedraw()},h.prototype.setDataFromLocalFile=function(e){var t=this;return new Promise(function(o,i){var n=document.createElement("input");n.type="file",n.accept=e||".json,application/json",n.addEventListener("change",function(e){var s,a=n.files[0],r=new FileReader;r.readAsText(a),r.onload=function(e){try{s=JSON.parse(r.result)}catch(e){return console.warn("File Load Error - File contents is invalid JSON",e),void i(e)}t.setData(s).then(function(e){o(e)}).catch(function(e){o(e)})},r.onerror=function(e){console.warn("File Load Error - Unable to read file"),i()}}),n.click()})},h.prototype.setData=function(e,t,o){return this.modExists("ajax")&&this.modules.ajax.blockActiveRequest(),this._setData(e,t,o,!1,!0)},h.prototype._setData=function(e,t,o,i,n){var s=this;return"string"!=typeof e?e?s.rowManager.setData(e,i,n):s.modExists("ajax")&&(s.modules.ajax.getUrl||s.options.ajaxURLGenerator)?"remote"==s.options.pagination&&s.modExists("page",!0)?(s.modules.page.reset(!0,!0),s.modules.page.setPage(1)):s.modules.ajax.loadData(i,n):s.rowManager.setData([],i,n):0==e.indexOf("{")||0==e.indexOf("[")?s.rowManager.setData(JSON.parse(e),i,n):s.modExists("ajax",!0)?(t&&s.modules.ajax.setParams(t),o&&s.modules.ajax.setConfig(o),s.modules.ajax.setUrl(e),"remote"==s.options.pagination&&s.modExists("page",!0)?(s.modules.page.reset(!0,!0),s.modules.page.setPage(1)):s.modules.ajax.loadData(i,n)):void 0},h.prototype.clearData=function(){this.modExists("ajax")&&this.modules.ajax.blockActiveRequest(),this.rowManager.clearData()},h.prototype.getData=function(e){return!0===e&&(console.warn("passing a boolean to the getData function is deprecated, you should now pass the string 'active'"),e="active"),this.rowManager.getData(e)},h.prototype.getDataCount=function(e){return!0===e&&(console.warn("passing a boolean to the getDataCount function is deprecated, you should now pass the string 'active'"),e="active"),this.rowManager.getDataCount(e)},h.prototype.searchRows=function(e,t,o){if(this.modExists("filter",!0))return this.modules.filter.search("rows",e,t,o)},h.prototype.searchData=function(e,t,o){if(this.modExists("filter",!0))return this.modules.filter.search("data",e,t,o)},h.prototype.getHtml=function(e,t,o){if(this.modExists("export",!0))return this.modules.export.getHtml(e,t,o)},h.prototype.print=function(e,t,o){if(this.modExists("print",!0))return this.modules.print.printFullscreen(e,t,o)},h.prototype.getAjaxUrl=function(){if(this.modExists("ajax",!0))return this.modules.ajax.getUrl()},h.prototype.replaceData=function(e,t,o){return this.modExists("ajax")&&this.modules.ajax.blockActiveRequest(),this._setData(e,t,o,!0)},h.prototype.updateData=function(e){var t=this,o=this,i=0;return new Promise(function(n,s){t.modExists("ajax")&&t.modules.ajax.blockActiveRequest(),"string"==typeof e&&(e=JSON.parse(e)),e?e.forEach(function(e){var t=o.rowManager.findRow(e[o.options.index]);t&&(i++,t.updateData(e).then(function(){--i||n()}))}):(console.warn("Update Error - No data provided"),s("Update Error - No data provided"))})},h.prototype.addData=function(e,t,o){var i=this;return new Promise(function(n,s){i.modExists("ajax")&&i.modules.ajax.blockActiveRequest(),"string"==typeof e&&(e=JSON.parse(e)),e?i.rowManager.addRows(e,t,o).then(function(e){var t=[];e.forEach(function(e){t.push(e.getComponent())}),n(t)}):(console.warn("Update Error - No data provided"),s("Update Error - No data provided"))})},h.prototype.updateOrAddData=function(e){var t=this,o=this,i=[],n=0;return new Promise(function(s,a){t.modExists("ajax")&&t.modules.ajax.blockActiveRequest(),"string"==typeof e&&(e=JSON.parse(e)),e?e.forEach(function(e){var t=o.rowManager.findRow(e[o.options.index]);n++,t?t.updateData(e).then(function(){n--,i.push(t.getComponent()),n||s(i)}):o.rowManager.addRows(e).then(function(e){n--,i.push(e[0].getComponent()),n||s(i)})}):(console.warn("Update Error - No data provided"),a("Update Error - No data provided"))})},h.prototype.getRow=function(e){var t=this.rowManager.findRow(e);return t?t.getComponent():(console.warn("Find Error - No matching row found:",e),!1)},h.prototype.getRowFromPosition=function(e,t){var o=this.rowManager.getRowFromPosition(e,t);return o?o.getComponent():(console.warn("Find Error - No matching row found:",e),!1)},h.prototype.deleteRow=function(e){var t=this;return new Promise(function(o,i){function n(){++a==e.length&&r&&(s.rowManager.reRenderInPosition(),o())}var s=t,a=0,r=0,l=[];Array.isArray(e)||(e=[e]),e.forEach(function(e){var o=t.rowManager.findRow(e,!0);o?l.push(o):(console.warn("Delete Error - No matching row found:",e),i("Delete Error - No matching row found"),n())}),l.sort(function(e,o){return t.rowManager.rows.indexOf(e)>t.rowManager.rows.indexOf(o)?1:-1}),l.forEach(function(e){e.delete().then(function(){r++,n()}).catch(function(e){n(),i(e)})})})},h.prototype.addRow=function(e,t,o){var i=this;return new Promise(function(n,s){"string"==typeof e&&(e=JSON.parse(e)),i.rowManager.addRows(e,t,o).then(function(e){i.modExists("columnCalcs")&&i.modules.columnCalcs.recalc(i.rowManager.activeRows),n(e[0].getComponent())})})},h.prototype.updateOrAddRow=function(e,t){var o=this;return new Promise(function(i,n){var s=o.rowManager.findRow(e);"string"==typeof t&&(t=JSON.parse(t)),s?s.updateData(t).then(function(){o.modExists("columnCalcs")&&o.modules.columnCalcs.recalc(o.rowManager.activeRows),i(s.getComponent())}).catch(function(e){n(e)}):s=o.rowManager.addRows(t).then(function(e){o.modExists("columnCalcs")&&o.modules.columnCalcs.recalc(o.rowManager.activeRows),i(e[0].getComponent())}).catch(function(e){n(e)})})},h.prototype.updateRow=function(e,t){var o=this;return new Promise(function(i,n){var s=o.rowManager.findRow(e);"string"==typeof t&&(t=JSON.parse(t)),s?s.updateData(t).then(function(){i(s.getComponent())}).catch(function(e){n(e)}):(console.warn("Update Error - No matching row found:",e),n("Update Error - No matching row found"))})},h.prototype.scrollToRow=function(e,t,o){var i=this;return new Promise(function(n,s){var a=i.rowManager.findRow(e);a?i.rowManager.scrollToRow(a,t,o).then(function(){n()}).catch(function(e){s(e)}):(console.warn("Scroll Error - No matching row found:",e),s("Scroll Error - No matching row found"))})},h.prototype.moveRow=function(e,t,o){var i=this.rowManager.findRow(e);i?i.moveToRow(t,o):console.warn("Move Error - No matching row found:",e)},h.prototype.getRows=function(e){return!0===e&&(console.warn("passing a boolean to the getRows function is deprecated, you should now pass the string 'active'"),e="active"),this.rowManager.getComponents(e)},h.prototype.getRowPosition=function(e,t){var o=this.rowManager.findRow(e);return o?this.rowManager.getRowPosition(o,t):(console.warn("Position Error - No matching row found:",e),!1)},h.prototype.copyToClipboard=function(e){this.modExists("clipboard",!0)&&this.modules.clipboard.copy(e)},h.prototype.setColumns=function(e){this.columnManager.setColumns(e)},h.prototype.getColumns=function(e){return this.columnManager.getComponents(e)},h.prototype.getColumn=function(e){var t=this.columnManager.findColumn(e);return t?t.getComponent():(console.warn("Find Error - No matching column found:",e),!1)},h.prototype.getColumnDefinitions=function(){return this.columnManager.getDefinitionTree()},h.prototype.getColumnLayout=function(){if(this.modExists("persistence",!0))return this.modules.persistence.parseColumns(this.columnManager.getColumns())},h.prototype.setColumnLayout=function(e){return!!this.modExists("persistence",!0)&&(this.columnManager.setColumns(this.modules.persistence.mergeDefinition(this.options.columns,e)),!0)},h.prototype.showColumn=function(e){var t=this.columnManager.findColumn(e);if(!t)return console.warn("Column Show Error - No matching column found:",e),!1;t.show(),this.options.responsiveLayout&&this.modExists("responsiveLayout",!0)&&this.modules.responsiveLayout.update()},h.prototype.hideColumn=function(e){var t=this.columnManager.findColumn(e);if(!t)return console.warn("Column Hide Error - No matching column found:",e),!1;t.hide(),this.options.responsiveLayout&&this.modExists("responsiveLayout",!0)&&this.modules.responsiveLayout.update()},h.prototype.toggleColumn=function(e){var t=this.columnManager.findColumn(e);if(!t)return console.warn("Column Visibility Toggle Error - No matching column found:",e),!1;t.visible?t.hide():t.show()},h.prototype.addColumn=function(e,t,o){var i=this;return new Promise(function(n,s){var a=i.columnManager.findColumn(o);i.columnManager.addColumn(e,t,a).then(function(e){n(e.getComponent())}).catch(function(e){s(e)})})},h.prototype.deleteColumn=function(e){var t=this;return new Promise(function(o,i){var n=t.columnManager.findColumn(e);n?n.delete().then(function(){o()}).catch(function(e){i(e)}):(console.warn("Column Delete Error - No matching column found:",e),i())})},h.prototype.updateColumnDefinition=function(e,t){var o=this;return new Promise(function(i,n){var s=o.columnManager.findColumn(e);s?s.updateDefinition(t).then(function(e){i(e)}).catch(function(e){n(e)}):(console.warn("Column Update Error - No matching column found:",e),n())})},h.prototype.moveColumn=function(e,t,o){var i=this.columnManager.findColumn(e),n=this.columnManager.findColumn(t);i?n?this.columnManager.moveColumn(i,n,o):console.warn("Move Error - No matching column found:",n):console.warn("Move Error - No matching column found:",e)},h.prototype.scrollToColumn=function(e,t,o){var i=this;return new Promise(function(n,s){var a=i.columnManager.findColumn(e);a?i.columnManager.scrollToColumn(a,t,o).then(function(){n()}).catch(function(e){s(e)}):(console.warn("Scroll Error - No matching column found:",e),s("Scroll Error - No matching column found"))})},h.prototype.setLocale=function(e){this.modules.localize.setLocale(e)},h.prototype.getLocale=function(){return this.modules.localize.getLocale()},h.prototype.getLang=function(e){return this.modules.localize.getLang(e)},h.prototype.redraw=function(e){this.columnManager.redraw(e),this.rowManager.redraw(e)},h.prototype.setHeight=function(e){"classic"!==this.rowManager.renderMode?(this.options.height=isNaN(e)?e:e+"px",this.element.style.height=this.options.height,this.rowManager.setRenderMode(),this.rowManager.redraw()):console.warn("setHeight function is not available in classic render mode")},
+h.prototype.setSort=function(e,t){this.modExists("sort",!0)&&(this.modules.sort.setSort(e,t),this.rowManager.sorterRefresh())},h.prototype.getSorters=function(){if(this.modExists("sort",!0))return this.modules.sort.getSort()},h.prototype.clearSort=function(){this.modExists("sort",!0)&&(this.modules.sort.clear(),this.rowManager.sorterRefresh())},h.prototype.setFilter=function(e,t,o,i){this.modExists("filter",!0)&&(this.modules.filter.setFilter(e,t,o,i),this.rowManager.filterRefresh())},h.prototype.addFilter=function(e,t,o,i){this.modExists("filter",!0)&&(this.modules.filter.addFilter(e,t,o,i),this.rowManager.filterRefresh())},h.prototype.getFilters=function(e){if(this.modExists("filter",!0))return this.modules.filter.getFilters(e)},h.prototype.setHeaderFilterFocus=function(e){if(this.modExists("filter",!0)){var t=this.columnManager.findColumn(e);if(!t)return console.warn("Column Filter Focus Error - No matching column found:",e),!1;this.modules.filter.setHeaderFilterFocus(t)}},h.prototype.getHeaderFilterValue=function(e){if(this.modExists("filter",!0)){var t=this.columnManager.findColumn(e);if(t)return this.modules.filter.getHeaderFilterValue(t);console.warn("Column Filter Error - No matching column found:",e)}},h.prototype.setHeaderFilterValue=function(e,t){if(this.modExists("filter",!0)){var o=this.columnManager.findColumn(e);if(!o)return console.warn("Column Filter Error - No matching column found:",e),!1;this.modules.filter.setHeaderFilterValue(o,t)}},h.prototype.getHeaderFilters=function(){if(this.modExists("filter",!0))return this.modules.filter.getHeaderFilters()},h.prototype.removeFilter=function(e,t,o){this.modExists("filter",!0)&&(this.modules.filter.removeFilter(e,t,o),this.rowManager.filterRefresh())},h.prototype.clearFilter=function(e){this.modExists("filter",!0)&&(this.modules.filter.clearFilter(e),this.rowManager.filterRefresh())},h.prototype.clearHeaderFilter=function(){this.modExists("filter",!0)&&(this.modules.filter.clearHeaderFilter(),this.rowManager.filterRefresh())},h.prototype.selectRow=function(e){this.modExists("selectRow",!0)&&(!0===e&&(console.warn("passing a boolean to the selectRowselectRow function is deprecated, you should now pass the string 'active'"),e="active"),this.modules.selectRow.selectRows(e))},h.prototype.deselectRow=function(e){this.modExists("selectRow",!0)&&this.modules.selectRow.deselectRows(e)},h.prototype.toggleSelectRow=function(e){this.modExists("selectRow",!0)&&this.modules.selectRow.toggleRow(e)},h.prototype.getSelectedRows=function(){if(this.modExists("selectRow",!0))return this.modules.selectRow.getSelectedRows()},h.prototype.getSelectedData=function(){if(this.modExists("selectRow",!0))return this.modules.selectRow.getSelectedData()},h.prototype.getInvalidCells=function(){if(this.modExists("validate",!0))return this.modules.validate.getInvalidCells()},h.prototype.clearCellValidation=function(e){var t=this;this.modExists("validate",!0)&&(e||(e=this.modules.validate.getInvalidCells()),Array.isArray(e)||(e=[e]),e.forEach(function(e){t.modules.validate.clearValidation(e._getSelf())}))},h.prototype.validate=function(e){var t=[];return this.rowManager.rows.forEach(function(e){var o=e.validate();!0!==o&&(t=t.concat(o))}),!t.length||t},h.prototype.setMaxPage=function(e){if(!this.options.pagination||!this.modExists("page"))return!1;this.modules.page.setMaxPage(e)},h.prototype.setPage=function(e){return this.options.pagination&&this.modExists("page")?this.modules.page.setPage(e):new Promise(function(e,t){t()})},h.prototype.setPageToRow=function(e){var t=this;return new Promise(function(o,i){t.options.pagination&&t.modExists("page")?(e=t.rowManager.findRow(e),e?t.modules.page.setPageToRow(e).then(function(){o()}).catch(function(){i()}):i()):i()})},h.prototype.setPageSize=function(e){if(!this.options.pagination||!this.modExists("page"))return!1;this.modules.page.setPageSize(e),this.modules.page.setPage(1).then(function(){}).catch(function(){})},h.prototype.getPageSize=function(){if(this.options.pagination&&this.modExists("page",!0))return this.modules.page.getPageSize()},h.prototype.previousPage=function(){if(!this.options.pagination||!this.modExists("page"))return!1;this.modules.page.previousPage()},h.prototype.nextPage=function(){if(!this.options.pagination||!this.modExists("page"))return!1;this.modules.page.nextPage()},h.prototype.getPage=function(){return!(!this.options.pagination||!this.modExists("page"))&&this.modules.page.getPage()},h.prototype.getPageMax=function(){return!(!this.options.pagination||!this.modExists("page"))&&this.modules.page.getPageMax()},h.prototype.setGroupBy=function(e){if(!this.modExists("groupRows",!0))return!1;this.options.groupBy=e,this.modules.groupRows.initialize(),this.rowManager.refreshActiveData("display"),this.options.persistence&&this.modExists("persistence",!0)&&this.modules.persistence.config.group&&this.modules.persistence.save("group")},h.prototype.setGroupValues=function(e){if(!this.modExists("groupRows",!0))return!1;this.options.groupValues=e,this.modules.groupRows.initialize(),this.rowManager.refreshActiveData("display"),this.options.persistence&&this.modExists("persistence",!0)&&this.modules.persistence.config.group&&this.modules.persistence.save("group")},h.prototype.setGroupStartOpen=function(e){if(!this.modExists("groupRows",!0))return!1;this.options.groupStartOpen=e,this.modules.groupRows.initialize(),this.options.groupBy?(this.rowManager.refreshActiveData("group"),this.options.persistence&&this.modExists("persistence",!0)&&this.modules.persistence.config.group&&this.modules.persistence.save("group")):console.warn("Grouping Update - cant refresh view, no groups have been set")},h.prototype.setGroupHeader=function(e){if(!this.modExists("groupRows",!0))return!1;this.options.groupHeader=e,this.modules.groupRows.initialize(),this.options.groupBy?(this.rowManager.refreshActiveData("group"),this.options.persistence&&this.modExists("persistence",!0)&&this.modules.persistence.config.group&&this.modules.persistence.save("group")):console.warn("Grouping Update - cant refresh view, no groups have been set")},h.prototype.getGroups=function(e){return!!this.modExists("groupRows",!0)&&this.modules.groupRows.getGroups(!0)},h.prototype.getGroupedData=function(){if(this.modExists("groupRows",!0))return this.options.groupBy?this.modules.groupRows.getGroupedData():this.getData()},h.prototype.getEditedCells=function(){if(this.modExists("edit",!0))return this.modules.edit.getEditedCells()},h.prototype.clearCellEdited=function(e){var t=this;this.modExists("edit",!0)&&(e||(e=this.modules.edit.getEditedCells()),Array.isArray(e)||(e=[e]),e.forEach(function(e){t.modules.edit.clearEdited(e._getSelf())}))},h.prototype.getCalcResults=function(){return!!this.modExists("columnCalcs",!0)&&this.modules.columnCalcs.getResults()},h.prototype.recalc=function(){this.modExists("columnCalcs",!0)&&this.modules.columnCalcs.recalcAll(this.rowManager.activeRows)},h.prototype.navigatePrev=function(){var e=!1;return!(!this.modExists("edit",!0)||!(e=this.modules.edit.currentCell))&&e.nav().prev()},h.prototype.navigateNext=function(){var e=!1;return!(!this.modExists("edit",!0)||!(e=this.modules.edit.currentCell))&&e.nav().next()},h.prototype.navigateLeft=function(){var t=!1;return!(!this.modExists("edit",!0)||!(t=this.modules.edit.currentCell))&&(e.preventDefault(),t.nav().left())},h.prototype.navigateRight=function(){var t=!1;return!(!this.modExists("edit",!0)||!(t=this.modules.edit.currentCell))&&(e.preventDefault(),t.nav().right())},h.prototype.navigateUp=function(){var t=!1;return!(!this.modExists("edit",!0)||!(t=this.modules.edit.currentCell))&&(e.preventDefault(),t.nav().up())},h.prototype.navigateDown=function(){var t=!1;return!(!this.modExists("edit",!0)||!(t=this.modules.edit.currentCell))&&(e.preventDefault(),t.nav().down())},h.prototype.undo=function(){return!(!this.options.history||!this.modExists("history",!0))&&this.modules.history.undo()},h.prototype.redo=function(){return!(!this.options.history||!this.modExists("history",!0))&&this.modules.history.redo()},h.prototype.getHistoryUndoSize=function(){return!(!this.options.history||!this.modExists("history",!0))&&this.modules.history.getHistoryUndoSize()},h.prototype.getHistoryRedoSize=function(){return!(!this.options.history||!this.modExists("history",!0))&&this.modules.history.getHistoryRedoSize()},h.prototype.download=function(e,t,o,i){this.modExists("download",!0)&&this.modules.download.download(e,t,o,i)},h.prototype.downloadToTab=function(e,t,o,i){this.modExists("download",!0)&&this.modules.download.download(e,t,o,i,!0)},h.prototype.tableComms=function(e,t,o,i){this.modules.comms.receive(e,t,o,i)},h.prototype.moduleBindings={},h.prototype.extendModule=function(e,t,o){if(h.prototype.moduleBindings[e]){var i=h.prototype.moduleBindings[e].prototype[t];if(i)if("object"==(void 0===o?"undefined":_typeof(o)))for(var n in o)i[n]=o[n];else console.warn("Module Error - Invalid value type, it must be an object");else console.warn("Module Error - property does not exist:",t)}else console.warn("Module Error - module does not exist:",e)},h.prototype.registerModule=function(e,t){h.prototype.moduleBindings[e]=t},h.prototype.bindModules=function(){this.modules={};for(var e in h.prototype.moduleBindings)this.modules[e]=new h.prototype.moduleBindings[e](this)},h.prototype.modExists=function(e,t){return!!this.modules[e]||(t&&console.error("Tabulator Module Not Installed: "+e),!1)},h.prototype.helpers={elVisible:function(e){return!(e.offsetWidth<=0&&e.offsetHeight<=0)},elOffset:function(e){var t=e.getBoundingClientRect();return{top:t.top+window.pageYOffset-document.documentElement.clientTop,left:t.left+window.pageXOffset-document.documentElement.clientLeft}},deepClone:function(e){var t=Object.assign(Array.isArray(e)?[]:{},e);for(var o in e)null!=e[o]&&"object"===_typeof(e[o])&&(e[o]instanceof Date?t[o]=new Date(e[o]):t[o]=this.deepClone(e[o]));return t}},h.prototype.comms={tables:[],register:function(e){h.prototype.comms.tables.push(e)},deregister:function(e){var t=h.prototype.comms.tables.indexOf(e);t>-1&&h.prototype.comms.tables.splice(t,1)},lookupTable:function(e,t){var o,i,n=[];if("string"==typeof e){if(o=document.querySelectorAll(e),o.length)for(var s=0;s<o.length;s++)(i=h.prototype.comms.matchElement(o[s]))&&n.push(i)}else"undefined"!=typeof HTMLElement&&e instanceof HTMLElement||e instanceof h?(i=h.prototype.comms.matchElement(e))&&n.push(i):Array.isArray(e)?e.forEach(function(e){n=n.concat(h.prototype.comms.lookupTable(e))}):t||console.warn("Table Connection Error - Invalid Selector",e);return n},matchElement:function(e){return h.prototype.comms.tables.find(function(t){return e instanceof h?t===e:t.element===e})}},h.prototype.findTable=function(e){var t=h.prototype.comms.lookupTable(e,!0);return!(Array.isArray(t)&&!t.length)&&t};var p=function(e){this.table=e,this.mode=null};p.prototype.initialize=function(e){this.modes[e]?this.mode=e:(console.warn("Layout Error - invalid mode set, defaulting to 'fitData' : "+e),this.mode="fitData"),this.table.element.setAttribute("tabulator-layout",this.mode)},p.prototype.getMode=function(){return this.mode},p.prototype.layout=function(){this.modes[this.mode].call(this,this.table.columnManager.columnsByIndex)},p.prototype.modes={fitData:function(e){this.table.options.virtualDomHoz?this.table.vdomHoz.fitDataLayoutOverride():e.forEach(function(e){e.reinitializeWidth()}),this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.update()},fitDataFill:function(e){e.forEach(function(e){e.reinitializeWidth()}),this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.update()},fitDataTable:function(e){e.forEach(function(e){e.reinitializeWidth()}),this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.update()},fitDataStretch:function(e){var t=this,o=0,i=this.table.rowManager.element.clientWidth,n=0,s=!1;e.forEach(function(e,i){e.widthFixed||e.reinitializeWidth(),(t.table.options.responsiveLayout?e.modules.responsive.visible:e.visible)&&(s=e),e.visible&&(o+=e.getWidth())}),s?(n=i-o+s.getWidth(),this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&(s.setWidth(0),this.table.modules.responsiveLayout.update()),n>0?s.setWidth(n):s.reinitializeWidth()):this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.update()},fitColumns:function(e){function t(e){return"string"==typeof e?e.indexOf("%")>-1?n/100*parseInt(e):parseInt(e):e}function o(e,i,n,s){function a(e){return n*(e.column.definition.widthGrow||1)}function r(e){return t(e.width)-n*(e.column.definition.widthShrink||0)}var l=[],c=0,u=0,d=0,h=0,p=0,m=[];return e.forEach(function(e,t){var o=s?r(e):a(e);e.column.minWidth>=o?l.push(e):(m.push(e),p+=s?e.column.definition.widthShrink||1:e.column.definition.widthGrow||1)}),l.length?(l.forEach(function(e){c+=s?e.width-e.column.minWidth:e.column.minWidth,e.width=e.column.minWidth}),u=i-c,d=p?Math.floor(u/p):u,h=u-d*p,h+=o(m,u,d,s)):(h=p?i-Math.floor(i/p)*p:i,m.forEach(function(e){e.width=s?r(e):a(e)})),h}var i=this,n=i.table.element.clientWidth,s=0,a=0,r=0,l=0,c=[],u=[],d=0,h=0,p=0;this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.update(),this.table.rowManager.element.scrollHeight>this.table.rowManager.element.clientHeight&&(n-=this.table.rowManager.element.offsetWidth-this.table.rowManager.element.clientWidth),e.forEach(function(e){var o,i,n;e.visible&&(o=e.definition.width,i=parseInt(e.minWidth),o?(n=t(o),s+=n>i?n:i,e.definition.widthShrink&&(u.push({column:e,width:n>i?n:i}),d+=e.definition.widthShrink)):(c.push({column:e,width:0}),r+=e.definition.widthGrow||1))}),a=n-s,l=Math.floor(a/r);var p=o(c,a,l,!1);c.length&&p>0&&(c[c.length-1].width+=+p),c.forEach(function(e){a-=e.width}),h=Math.abs(p)+a,h>0&&d&&(p=o(u,h,Math.floor(h/d),!0)),u.length&&(u[u.length-1].width-=p),c.forEach(function(e){e.column.setWidth(e.width)}),u.forEach(function(e){e.column.setWidth(e.width)})}},h.prototype.registerModule("layout",p);var m=function(e){this.table=e,this.locale="default",this.lang=!1,this.bindings={},this.langList={}};m.prototype.initialize=function(){this.langList=h.prototype.helpers.deepClone(this.langs)},m.prototype.setHeaderFilterPlaceholder=function(e){this.langList.default.headerFilters.default=e},m.prototype.setHeaderFilterColumnPlaceholder=function(e,t){this.langList.default.headerFilters.columns[e]=t,this.lang&&!this.lang.headerFilters.columns[e]&&(this.lang.headerFilters.columns[e]=t)},m.prototype.installLang=function(e,t){this.langList[e]?this._setLangProp(this.langList[e],t):this.langList[e]=t},m.prototype._setLangProp=function(e,t){for(var o in t)e[o]&&"object"==_typeof(e[o])?this._setLangProp(e[o],t[o]):e[o]=t[o]},m.prototype.setLocale=function(e){function t(e,o){for(var i in e)"object"==_typeof(e[i])?(o[i]||(o[i]={}),t(e[i],o[i])):o[i]=e[i]}var o=this;if(e=e||"default",!0===e&&navigator.language&&(e=navigator.language.toLowerCase()),e&&!o.langList[e]){var i=e.split("-")[0];o.langList[i]?(console.warn("Localization Error - Exact matching locale not found, using closest match: ",e,i),e=i):(console.warn("Localization Error - Matching locale not found, using default: ",e),e="default")}o.locale=e,o.lang=h.prototype.helpers.deepClone(o.langList.default||{}),"default"!=e&&t(o.langList[e],o.lang),o.table.options.localized.call(o.table,o.locale,o.lang),o._executeBindings()},m.prototype.getLocale=function(e){return self.locale},m.prototype.getLang=function(e){return e?this.langList[e]:this.lang},m.prototype.getText=function(e,t){var e=t?e+"|"+t:e,o=e.split("|");return this._getLangElement(o,this.locale)||""},m.prototype._getLangElement=function(e,t){var o=this,i=o.lang;return e.forEach(function(e){var t;i&&(t=i[e],i=void 0!==t&&t)}),i},m.prototype.bind=function(e,t){this.bindings[e]||(this.bindings[e]=[]),this.bindings[e].push(t),t(this.getText(e),this.lang)},m.prototype._executeBindings=function(){var e=this;for(var t in e.bindings)!function(t){e.bindings[t].forEach(function(o){o(e.getText(t),e.lang)})}(t)},m.prototype.langs={default:{groups:{item:"item",items:"items"},columns:{},ajax:{loading:"Loading",error:"Error"},pagination:{page_size:"Page Size",page_title:"Show Page",first:"First",first_title:"First Page",last:"Last",last_title:"Last Page",prev:"Prev",prev_title:"Prev Page",next:"Next",next_title:"Next Page",all:"All"},headerFilters:{default:"filter column...",columns:{}}}},h.prototype.registerModule("localize",m);var f=function(e){this.table=e};f.prototype.getConnections=function(e){var t,o=this,i=[];return t=h.prototype.comms.lookupTable(e),t.forEach(function(e){o.table!==e&&i.push(e)}),i},f.prototype.send=function(e,t,o,i){var n=this,s=this.getConnections(e);s.forEach(function(e){e.tableComms(n.table.element,t,o,i)}),!s.length&&e&&console.warn("Table Connection Error - No tables matching selector found",e)},f.prototype.receive=function(e,t,o,i){if(this.table.modExists(t))return this.table.modules[t].commsReceived(e,o,i);console.warn("Inter-table Comms Error - no such module:",t)},h.prototype.registerModule("comms",f);var g=function(e){this.table=e,this.allowedTypes=["","data","download","clipboard","print","htmlOutput"]};g.prototype.initializeColumn=function(e){var t=this,o=!1,i={};this.allowedTypes.forEach(function(n){var s,a="accessor"+(n.charAt(0).toUpperCase()+n.slice(1));e.definition[a]&&(s=t.lookupAccessor(e.definition[a]))&&(o=!0,i[a]={accessor:s,params:e.definition[a+"Params"]||{}})}),o&&(e.modules.accessor=i)},g.prototype.lookupAccessor=function(e){var t=!1;switch(void 0===e?"undefined":_typeof(e)){case"string":this.accessors[e]?t=this.accessors[e]:console.warn("Accessor Error - No such accessor found, ignoring: ",e);break;case"function":t=e}return t},g.prototype.transformRow=function(e,t){var o="accessor"+(t.charAt(0).toUpperCase()+t.slice(1)),i=e.getComponent(),n=h.prototype.helpers.deepClone(e.data||{});return this.table.columnManager.traverse(function(e){var s,a,r,l;e.modules.accessor&&(a=e.modules.accessor[o]||e.modules.accessor.accessor||!1)&&"undefined"!=(s=e.getFieldValue(n))&&(l=e.getComponent(),r="function"==typeof a.params?a.params(s,n,t,l,i):a.params,e.setFieldValue(n,a.accessor(s,n,t,r,l,i)))}),n},g.prototype.accessors={},h.prototype.registerModule("accessor",g);var b=function(e){this.table=e,this.config=!1,this.url="",this.urlGenerator=!1,this.params=!1,this.loaderElement=this.createLoaderElement(),this.msgElement=this.createMsgElement(),this.loadingElement=!1,this.errorElement=!1,this.loaderPromise=!1,this.progressiveLoad=!1,this.loading=!1,this.requestOrder=0};b.prototype.initialize=function(){var e;this.loaderElement.appendChild(this.msgElement),this.table.options.ajaxLoaderLoading&&("string"==typeof this.table.options.ajaxLoaderLoading?(e=document.createElement("template"),e.innerHTML=this.table.options.ajaxLoaderLoading.trim(),this.loadingElement=e.content.firstChild):this.loadingElement=this.table.options.ajaxLoaderLoading),this.loaderPromise=this.table.options.ajaxRequestFunc||this.defaultLoaderPromise,this.urlGenerator=this.table.options.ajaxURLGenerator||this.defaultURLGenerator,this.table.options.ajaxLoaderError&&("string"==typeof this.table.options.ajaxLoaderError?(e=document.createElement("template"),e.innerHTML=this.table.options.ajaxLoaderError.trim(),this.errorElement=e.content.firstChild):this.errorElement=this.table.options.ajaxLoaderError),this.table.options.ajaxParams&&this.setParams(this.table.options.ajaxParams),this.table.options.ajaxConfig&&this.setConfig(this.table.options.ajaxConfig),this.table.options.ajaxURL&&this.setUrl(this.table.options.ajaxURL),this.table.options.ajaxProgressiveLoad&&(this.table.options.pagination?(this.progressiveLoad=!1,console.error("Progressive Load Error - Pagination and progressive load cannot be used at the same time")):this.table.modExists("page")?(this.progressiveLoad=this.table.options.ajaxProgressiveLoad,this.table.modules.page.initializeProgressive(this.progressiveLoad)):console.error("Pagination plugin is required for progressive ajax loading"))},b.prototype.createLoaderElement=function(){var e=document.createElement("div");return e.classList.add("tabulator-loader"),e},b.prototype.createMsgElement=function(){var e=document.createElement("div");return e.classList.add("tabulator-loader-msg"),e.setAttribute("role","alert"),e},b.prototype.setParams=function(e,t){if(t){this.params=this.params||{};for(var o in e)this.params[o]=e[o]}else this.params=e},b.prototype.getParams=function(){return this.params||{}},b.prototype.setConfig=function(e){if(this._loadDefaultConfig(),"string"==typeof e)this.config.method=e;else for(var t in e)this.config[t]=e[t]},b.prototype._loadDefaultConfig=function(e){var t=this;if(!t.config||e){t.config={};for(var o in t.defaultConfig)t.config[o]=t.defaultConfig[o]}},b.prototype.setUrl=function(e){this.url=e},b.prototype.getUrl=function(){return this.url},b.prototype.loadData=function(e,t){return this.progressiveLoad?this._loadDataProgressive():this._loadDataStandard(e,t)},b.prototype.nextPage=function(e){var t;this.loading||(t=this.table.options.ajaxProgressiveLoadScrollMargin||2*this.table.rowManager.getElement().clientHeight,e<t&&this.table.modules.page.nextPage().then(function(){}).catch(function(){}))},b.prototype.blockActiveRequest=function(){this.requestOrder++},b.prototype._loadDataProgressive=function(){return this.table.rowManager.setData([]),this.table.modules.page.setPage(1)},b.prototype._loadDataStandard=function(e,t){var o=this;return new Promise(function(i,n){o.sendRequest(e).then(function(s){o.table.rowManager.setData(s,e,t).then(function(){i()}).catch(function(e){n(e)})}).catch(function(e){n(e)})})},b.prototype.generateParamsList=function(e,t){var o=this,i=[];if(t=t||"",Array.isArray(e))e.forEach(function(e,n){i=i.concat(o.generateParamsList(e,t?t+"["+n+"]":n))});else if("object"===(void 0===e?"undefined":_typeof(e)))for(var n in e)i=i.concat(o.generateParamsList(e[n],t?t+"["+n+"]":n));else i.push({key:t,value:e});return i},b.prototype.serializeParams=function(e){var t=this.generateParamsList(e),o=[];return t.forEach(function(e){o.push(encodeURIComponent(e.key)+"="+encodeURIComponent(e.value))}),o.join("&")},b.prototype.sendRequest=function(e){var t,o=this,i=this,n=i.url;return i.requestOrder++,t=i.requestOrder,i._loadDefaultConfig(),new Promise(function(s,a){!1!==i.table.options.ajaxRequesting.call(o.table,i.url,i.params)?(i.loading=!0,e||i.showLoader(),o.loaderPromise(n,i.config,i.params).then(function(e){t===i.requestOrder?(i.table.options.ajaxResponse&&(e=i.table.options.ajaxResponse.call(i.table,i.url,i.params,e)),s(e),i.hideLoader(),i.loading=!1):console.warn("Ajax Response Blocked - An active ajax request was blocked by an attempt to change table data while the request was being made")}).catch(function(e){console.error("Ajax Load Error: ",e),i.table.options.ajaxError.call(i.table,e),i.showError(),setTimeout(function(){i.hideLoader()},3e3),i.loading=!1,a()})):a()})},b.prototype.showLoader=function(){if("function"==typeof this.table.options.ajaxLoader?this.table.options.ajaxLoader():this.table.options.ajaxLoader){for(this.hideLoader();this.msgElement.firstChild;)this.msgElement.removeChild(this.msgElement.firstChild);this.msgElement.classList.remove("tabulator-error"),this.msgElement.classList.add("tabulator-loading"),this.loadingElement?this.msgElement.appendChild(this.loadingElement):this.msgElement.innerHTML=this.table.modules.localize.getText("ajax|loading"),this.table.element.appendChild(this.loaderElement)}},b.prototype.showError=function(){for(this.hideLoader();this.msgElement.firstChild;)this.msgElement.removeChild(this.msgElement.firstChild);this.msgElement.classList.remove("tabulator-loading"),this.msgElement.classList.add("tabulator-error"),this.errorElement?this.msgElement.appendChild(this.errorElement):this.msgElement.innerHTML=this.table.modules.localize.getText("ajax|error"),this.table.element.appendChild(this.loaderElement)},b.prototype.hideLoader=function(){this.loaderElement.parentNode&&this.loaderElement.parentNode.removeChild(this.loaderElement)},b.prototype.defaultConfig={method:"GET"},b.prototype.defaultURLGenerator=function(e,t,o){return e&&o&&Object.keys(o).length&&(t.method&&"get"!=t.method.toLowerCase()||(t.method="get",e+=(e.includes("?")?"&":"?")+this.serializeParams(o))),e},b.prototype.defaultLoaderPromise=function(e,t,o){var i,n=this;return new Promise(function(s,a){if(e=n.urlGenerator(e,t,o),"GET"!=t.method.toUpperCase())if(i="object"===_typeof(n.table.options.ajaxContentType)?n.table.options.ajaxContentType:n.contentTypeFormatters[n.table.options.ajaxContentType]){for(var r in i.headers)t.headers||(t.headers={}),void 0===t.headers[r]&&(t.headers[r]=i.headers[r]);t.body=i.body.call(n,e,t,o)}else console.warn("Ajax Error - Invalid ajaxContentType value:",n.table.options.ajaxContentType);e?(void 0===t.headers&&(t.headers={}),void 0===t.headers.Accept&&(t.headers.Accept="application/json"),void 0===t.headers["X-Requested-With"]&&(t.headers["X-Requested-With"]="XMLHttpRequest"),void 0===t.mode&&(t.mode="cors"),"cors"==t.mode?(void 0===t.headers["Access-Control-Allow-Origin"]&&(t.headers["Access-Control-Allow-Origin"]=window.location.origin),void 0===t.credentials&&(t.credentials="same-origin")):void 0===t.credentials&&(t.credentials="include"),fetch(e,t).then(function(e){e.ok?e.json().then(function(e){s(e)}).catch(function(e){a(e),console.warn("Ajax Load Error - Invalid JSON returned",e)}):(console.error("Ajax Load Error - Connection Error: "+e.status,e.statusText),a(e))}).catch(function(e){console.error("Ajax Load Error - Connection Error: ",e),a(e)})):(console.warn("Ajax Load Error - No URL Set"),s([]))})},b.prototype.contentTypeFormatters={json:{headers:{"Content-Type":"application/json"},body:function(e,t,o){return JSON.stringify(o)}},form:{headers:{},body:function(e,t,o){var i=this.generateParamsList(o),n=new FormData;return i.forEach(function(e){n.append(e.key,e.value)}),n}}},h.prototype.registerModule("ajax",b);var v=function(e){this._row=e};v.prototype.getData=function(e){return this._row.getData(e)},v.prototype.getElement=function(){return this._row.getElement()},v.prototype.getTable=function(){return this._row.table},v.prototype.getCells=function(){var e=[];return this._row.getCells().forEach(function(t){e.push(t.getComponent())}),e},v.prototype.getCell=function(e){var t=this._row.getCell(e);return!!t&&t.getComponent()},v.prototype._getSelf=function(){return this._row};var y=function(e){this.table=e,this.topCalcs=[],this.botCalcs=[],this.genColumn=!1,this.topElement=this.createElement(),this.botElement=this.createElement(),this.topRow=!1,this.botRow=!1,this.topInitialized=!1,this.botInitialized=!1,this.initialize()};y.prototype.createElement=function(){var e=document.createElement("div");return e.classList.add("tabulator-calcs-holder"),e},y.prototype.initialize=function(){this.genColumn=new n({field:"value"},this)},y.prototype.registerColumnField=function(){},y.prototype.initializeColumn=function(e){var t=e.definition,o={topCalcParams:t.topCalcParams||{},botCalcParams:t.bottomCalcParams||{}};if(t.topCalc){switch(_typeof(t.topCalc)){case"string":this.calculations[t.topCalc]?o.topCalc=this.calculations[t.topCalc]:console.warn("Column Calc Error - No such calculation found, ignoring: ",t.topCalc);break;case"function":o.topCalc=t.topCalc}o.topCalc&&(e.modules.columnCalcs=o,this.topCalcs.push(e),"group"!=this.table.options.columnCalcs&&this.initializeTopRow())}if(t.bottomCalc){switch(_typeof(t.bottomCalc)){case"string":this.calculations[t.bottomCalc]?o.botCalc=this.calculations[t.bottomCalc]:console.warn("Column Calc Error - No such calculation found, ignoring: ",t.bottomCalc);break;case"function":o.botCalc=t.bottomCalc}o.botCalc&&(e.modules.columnCalcs=o,this.botCalcs.push(e),"group"!=this.table.options.columnCalcs&&this.initializeBottomRow())}},y.prototype.removeCalcs=function(){var e=!1;this.topInitialized&&(this.topInitialized=!1,this.topElement.parentNode.removeChild(this.topElement),e=!0),this.botInitialized&&(this.botInitialized=!1,this.table.footerManager.remove(this.botElement),e=!0),e&&this.table.rowManager.adjustTableSize()},y.prototype.initializeTopRow=function(){this.topInitialized||(this.table.columnManager.getElement().insertBefore(this.topElement,this.table.columnManager.headersElement.nextSibling),this.topInitialized=!0)},y.prototype.initializeBottomRow=function(){this.botInitialized||(this.table.footerManager.prepend(this.botElement),this.botInitialized=!0)},y.prototype.scrollHorizontal=function(e){this.table.columnManager.getElement().scrollWidth,this.table.element.clientWidth;this.botInitialized&&this.botRow&&(this.botRow.getElement().style.marginLeft=-e+"px")},y.prototype.recalc=function(e){var t;if(this.topInitialized||this.botInitialized){if(this.rowsToData(e),this.topInitialized){for(this.topRow&&this.topRow.deleteCells(),t=this.generateRow("top",this.rowsToData(e)),this.topRow=t;this.topElement.firstChild;)this.topElement.removeChild(this.topElement.firstChild);this.topElement.appendChild(t.getElement()),t.initialize(!0)}if(this.botInitialized){for(this.botRow&&this.botRow.deleteCells(),t=this.generateRow("bottom",this.rowsToData(e)),this.botRow=t;this.botElement.firstChild;)this.botElement.removeChild(this.botElement.firstChild);this.botElement.appendChild(t.getElement()),t.initialize(!0)}this.table.rowManager.adjustTableSize(),this.table.modExists("frozenColumns")&&this.table.modules.frozenColumns.layout()}},y.prototype.recalcRowGroup=function(e){this.recalcGroup(this.table.modules.groupRows.getRowGroup(e))},y.prototype.recalcAll=function(){var e=this;if((this.topCalcs.length||this.botCalcs.length)&&("group"!==this.table.options.columnCalcs&&this.recalc(this.table.rowManager.activeRows),this.table.options.groupBy&&"table"!==this.table.options.columnCalcs)){table.modules.groupRows.getChildGroups().forEach(function(t){e.recalcGroup(t)})}},y.prototype.recalcGroup=function(e){var t,o;e&&e.calcs&&(e.calcs.bottom&&(t=this.rowsToData(e.rows),o=this.generateRowData("bottom",t),e.calcs.bottom.updateData(o),e.calcs.bottom.reinitialize()),e.calcs.top&&(t=this.rowsToData(e.rows),o=this.generateRowData("top",t),e.calcs.top.updateData(o),e.calcs.top.reinitialize()))},y.prototype.generateTopRow=function(e){return this.generateRow("top",this.rowsToData(e))},y.prototype.generateBottomRow=function(e){return this.generateRow("bottom",this.rowsToData(e))},y.prototype.rowsToData=function(e){var t=this,o=[];return e.forEach(function(e){if(o.push(e.getData()),t.table.options.dataTree&&t.table.options.dataTreeChildColumnCalcs&&e.modules.dataTree.open){var i=t.rowsToData(t.table.modules.dataTree.getFilteredTreeChildren(e));o=o.concat(i)}}),o},y.prototype.generateRow=function(e,t){var o,i=this,n=this.generateRowData(e,t);return i.table.modExists("mutator")&&i.table.modules.mutator.disable(),o=new l(n,this,"calc"),i.table.modExists("mutator")&&i.table.modules.mutator.enable(),o.getElement().classList.add("tabulator-calcs","tabulator-calcs-"+e),o.component=!1,o.getComponent=function(){return this.component||(this.component=new v(this)),this.component},o.generateCells=function(){var t=[];i.table.columnManager.columnsByIndex.forEach(function(n){i.genColumn.setField(n.getField()),i.genColumn.hozAlign=n.hozAlign,n.definition[e+"CalcFormatter"]&&i.table.modExists("format")?i.genColumn.modules.format={formatter:i.table.modules.format.getFormatter(n.definition[e+"CalcFormatter"]),params:n.definition[e+"CalcFormatterParams"]||{}}:i.genColumn.modules.format={formatter:i.table.modules.format.getFormatter("plaintext"),params:{}},i.genColumn.definition.cssClass=n.definition.cssClass;var s=new u(i.genColumn,o);s.getElement(),s.column=n,s.setWidth(),n.cells.push(s),t.push(s),
+n.visible||s.hide()}),this.cells=t},o},y.prototype.generateRowData=function(e,t){var o,i,n={},s="top"==e?this.topCalcs:this.botCalcs,a="top"==e?"topCalc":"botCalc";return s.forEach(function(e){var s=[];e.modules.columnCalcs&&e.modules.columnCalcs[a]&&(t.forEach(function(t){s.push(e.getFieldValue(t))}),i=a+"Params",o="function"==typeof e.modules.columnCalcs[i]?e.modules.columnCalcs[i](s,t):e.modules.columnCalcs[i],e.setFieldValue(n,e.modules.columnCalcs[a](s,t,o)))}),n},y.prototype.hasTopCalcs=function(){return!!this.topCalcs.length},y.prototype.hasBottomCalcs=function(){return!!this.botCalcs.length},y.prototype.redraw=function(){this.topRow&&this.topRow.normalizeHeight(!0),this.botRow&&this.botRow.normalizeHeight(!0)},y.prototype.getResults=function(){var e,t=this,o={};return this.table.options.groupBy&&this.table.modExists("groupRows")?(e=this.table.modules.groupRows.getGroups(!0),e.forEach(function(e){o[e.getKey()]=t.getGroupResults(e)})):o={top:this.topRow?this.topRow.getData():{},bottom:this.botRow?this.botRow.getData():{}},o},y.prototype.getGroupResults=function(e){var t=this,o=e._getSelf(),i=e.getSubGroups(),n={};return i.forEach(function(e){n[e.getKey()]=t.getGroupResults(e)}),{top:o.calcs.top?o.calcs.top.getData():{},bottom:o.calcs.bottom?o.calcs.bottom.getData():{},groups:n}},y.prototype.calculations={avg:function(e,t,o){var i=0,n=void 0!==o.precision?o.precision:2;return e.length&&(i=e.reduce(function(e,t){return Number(e)+Number(t)}),i/=e.length,i=!1!==n?i.toFixed(n):i),parseFloat(i).toString()},max:function(e,t,o){var i=null,n=void 0!==o.precision&&o.precision;return e.forEach(function(e){((e=Number(e))>i||null===i)&&(i=e)}),null!==i?!1!==n?i.toFixed(n):i:""},min:function(e,t,o){var i=null,n=void 0!==o.precision&&o.precision;return e.forEach(function(e){((e=Number(e))<i||null===i)&&(i=e)}),null!==i?!1!==n?i.toFixed(n):i:""},sum:function(e,t,o){var i=0,n=void 0!==o.precision&&o.precision;return e.length&&e.forEach(function(e){e=Number(e),i+=isNaN(e)?0:Number(e)}),!1!==n?i.toFixed(n):i},concat:function(e,t,o){var i=0;return e.length&&(i=e.reduce(function(e,t){return String(e)+String(t)})),i},count:function(e,t,o){var i=0;return e.length&&e.forEach(function(e){e&&i++}),i}},h.prototype.registerModule("columnCalcs",y);var w=function(e){this.table=e,this.mode=!0,this.pasteParser=function(){},this.pasteAction=function(){},this.customSelection=!1,this.rowRange=!1,this.blocked=!0};w.prototype.initialize=function(){var e=this;this.mode=this.table.options.clipboard,this.rowRange=this.table.options.clipboardCopyRowRange,!0!==this.mode&&"copy"!==this.mode||this.table.element.addEventListener("copy",function(t){var o,i,n;if(!e.blocked){if(t.preventDefault(),e.customSelection)o=e.customSelection,e.table.options.clipboardCopyFormatter&&(o=e.table.options.clipboardCopyFormatter("plain",o));else{var n=e.table.modules.export.generateExportList(e.table.options.clipboardCopyConfig,e.table.options.clipboardCopyStyled,e.rowRange,"clipboard");i=e.table.modules.export.genereateHTMLTable(n),o=i?e.generatePlainContent(n):"",e.table.options.clipboardCopyFormatter&&(o=e.table.options.clipboardCopyFormatter("plain",o),i=e.table.options.clipboardCopyFormatter("html",i))}window.clipboardData&&window.clipboardData.setData?window.clipboardData.setData("Text",o):t.clipboardData&&t.clipboardData.setData?(t.clipboardData.setData("text/plain",o),i&&t.clipboardData.setData("text/html",i)):t.originalEvent&&t.originalEvent.clipboardData.setData&&(t.originalEvent.clipboardData.setData("text/plain",o),i&&t.originalEvent.clipboardData.setData("text/html",i)),e.table.options.clipboardCopied.call(e.table,o,i),e.reset()}}),!0!==this.mode&&"paste"!==this.mode||this.table.element.addEventListener("paste",function(t){e.paste(t)}),this.setPasteParser(this.table.options.clipboardPasteParser),this.setPasteAction(this.table.options.clipboardPasteAction)},w.prototype.reset=function(){this.blocked=!0,this.customSelection=!1},w.prototype.generatePlainContent=function(e){var t=[];return e.forEach(function(e){var o=[];e.columns.forEach(function(t){var i="";if(t)if("group"===e.type&&(t.value=t.component.getKey()),null===t.value)i="";else switch(_typeof(t.value)){case"object":i=JSON.stringify(t.value);break;case"undefined":i="";break;default:i=t.value}o.push(i)}),t.push(o.join("\t"))}),t.join("\n")},w.prototype.copy=function(e,t){var e,o,i;this.blocked=!1,this.customSelection=!1,!0!==this.mode&&"copy"!==this.mode||(this.rowRange=e||this.table.options.clipboardCopyRowRange,void 0!==window.getSelection&&void 0!==document.createRange?(e=document.createRange(),e.selectNodeContents(this.table.element),o=window.getSelection(),o.toString()&&t&&(this.customSelection=o.toString()),o.removeAllRanges(),o.addRange(e)):void 0!==document.selection&&void 0!==document.body.createTextRange&&(i=document.body.createTextRange(),i.moveToElementText(this.table.element),i.select()),document.execCommand("copy"),o&&o.removeAllRanges())},w.prototype.setPasteAction=function(e){switch(void 0===e?"undefined":_typeof(e)){case"string":this.pasteAction=this.pasteActions[e],this.pasteAction||console.warn("Clipboard Error - No such paste action found:",e);break;case"function":this.pasteAction=e}},w.prototype.setPasteParser=function(e){switch(void 0===e?"undefined":_typeof(e)){case"string":this.pasteParser=this.pasteParsers[e],this.pasteParser||console.warn("Clipboard Error - No such paste parser found:",e);break;case"function":this.pasteParser=e}},w.prototype.paste=function(e){var t,o,i;this.checkPaseOrigin(e)&&(t=this.getPasteData(e),o=this.pasteParser.call(this,t),o?(e.preventDefault(),this.table.modExists("mutator")&&(o=this.mutateData(o)),i=this.pasteAction.call(this,o),this.table.options.clipboardPasted.call(this.table,t,o,i)):this.table.options.clipboardPasteError.call(this.table,t))},w.prototype.mutateData=function(e){var t=this,o=[];return Array.isArray(e)?e.forEach(function(e){o.push(t.table.modules.mutator.transformRow(e,"clipboard"))}):o=e,o},w.prototype.checkPaseOrigin=function(e){var t=!0;return("DIV"!=e.target.tagName||this.table.modules.edit.currentCell)&&(t=!1),t},w.prototype.getPasteData=function(e){var t;return window.clipboardData&&window.clipboardData.getData?t=window.clipboardData.getData("Text"):e.clipboardData&&e.clipboardData.getData?t=e.clipboardData.getData("text/plain"):e.originalEvent&&e.originalEvent.clipboardData.getData&&(t=e.originalEvent.clipboardData.getData("text/plain")),t},w.prototype.pasteParsers={table:function(e){var t=[],o=!0,i=this.table.columnManager.columns,n=[],s=[];return e=e.split("\n"),e.forEach(function(e){t.push(e.split("\t"))}),!(!t.length||1===t.length&&t[0].length<2)&&(!0,t[0].forEach(function(e){var t=i.find(function(t){return e&&t.definition.title&&e.trim()&&t.definition.title.trim()===e.trim()});t?n.push(t):o=!1}),o||(o=!0,n=[],t[0].forEach(function(e){var t=i.find(function(t){return e&&t.field&&e.trim()&&t.field.trim()===e.trim()});t?n.push(t):o=!1}),o||(n=this.table.columnManager.columnsByIndex)),o&&t.shift(),t.forEach(function(e){var t={};e.forEach(function(e,o){n[o]&&(t[n[o].field]=e)}),s.push(t)}),s)}},w.prototype.pasteActions={replace:function(e){return this.table.setData(e)},update:function(e){return this.table.updateOrAddData(e)},insert:function(e){return this.table.addData(e)}},h.prototype.registerModule("clipboard",w);var E=function(e){this.table=e,this.indent=10,this.field="",this.collapseEl=null,this.expandEl=null,this.branchEl=null,this.elementField=!1,this.startOpen=function(){},this.displayIndex=0};E.prototype.initialize=function(){var e=null,t=this.table.columnManager.getFirstVisibileColumn(),o=this.table.options;switch(this.field=o.dataTreeChildField,this.indent=o.dataTreeChildIndent,this.elementField=o.dataTreeElementColumn||!!t&&t.field,o.dataTreeBranchElement&&(!0===o.dataTreeBranchElement?(this.branchEl=document.createElement("div"),this.branchEl.classList.add("tabulator-data-tree-branch")):"string"==typeof o.dataTreeBranchElement?(e=document.createElement("div"),e.innerHTML=o.dataTreeBranchElement,this.branchEl=e.firstChild):this.branchEl=o.dataTreeBranchElement),o.dataTreeCollapseElement?"string"==typeof o.dataTreeCollapseElement?(e=document.createElement("div"),e.innerHTML=o.dataTreeCollapseElement,this.collapseEl=e.firstChild):this.collapseEl=o.dataTreeCollapseElement:(this.collapseEl=document.createElement("div"),this.collapseEl.classList.add("tabulator-data-tree-control"),this.collapseEl.tabIndex=0,this.collapseEl.innerHTML="<div class='tabulator-data-tree-control-collapse'></div>"),o.dataTreeExpandElement?"string"==typeof o.dataTreeExpandElement?(e=document.createElement("div"),e.innerHTML=o.dataTreeExpandElement,this.expandEl=e.firstChild):this.expandEl=o.dataTreeExpandElement:(this.expandEl=document.createElement("div"),this.expandEl.classList.add("tabulator-data-tree-control"),this.expandEl.tabIndex=0,this.expandEl.innerHTML="<div class='tabulator-data-tree-control-expand'></div>"),_typeof(o.dataTreeStartExpanded)){case"boolean":this.startOpen=function(e,t){return o.dataTreeStartExpanded};break;case"function":this.startOpen=o.dataTreeStartExpanded;break;default:this.startOpen=function(e,t){return o.dataTreeStartExpanded[t]}}},E.prototype.initializeRow=function(e){var t=e.getData()[this.field],o=Array.isArray(t),i=o||!o&&"object"===(void 0===t?"undefined":_typeof(t))&&null!==t;!i&&e.modules.dataTree&&e.modules.dataTree.branchEl&&e.modules.dataTree.branchEl.parentNode.removeChild(e.modules.dataTree.branchEl),!i&&e.modules.dataTree&&e.modules.dataTree.controlEl&&e.modules.dataTree.controlEl.parentNode.removeChild(e.modules.dataTree.controlEl),e.modules.dataTree={index:e.modules.dataTree?e.modules.dataTree.index:0,open:!!i&&(e.modules.dataTree?e.modules.dataTree.open:this.startOpen(e.getComponent(),0)),controlEl:!(!e.modules.dataTree||!i)&&e.modules.dataTree.controlEl,branchEl:!(!e.modules.dataTree||!i)&&e.modules.dataTree.branchEl,parent:!!e.modules.dataTree&&e.modules.dataTree.parent,children:i}},E.prototype.layoutRow=function(e){var t=this.elementField?e.getCell(this.elementField):e.getCells()[0],o=t.getElement(),i=e.modules.dataTree;i.branchEl&&(i.branchEl.parentNode&&i.branchEl.parentNode.removeChild(i.branchEl),i.branchEl=!1),i.controlEl&&(i.controlEl.parentNode&&i.controlEl.parentNode.removeChild(i.controlEl),i.controlEl=!1),this.generateControlElement(e,o),e.element.classList.add("tabulator-tree-level-"+i.index),i.index&&(this.branchEl?(i.branchEl=this.branchEl.cloneNode(!0),o.insertBefore(i.branchEl,o.firstChild),this.table.rtl?i.branchEl.style.marginRight=(i.branchEl.offsetWidth+i.branchEl.style.marginLeft)*(i.index-1)+i.index*this.indent+"px":i.branchEl.style.marginLeft=(i.branchEl.offsetWidth+i.branchEl.style.marginRight)*(i.index-1)+i.index*this.indent+"px"):this.table.rtl?o.style.paddingRight=parseInt(window.getComputedStyle(o,null).getPropertyValue("padding-right"))+i.index*this.indent+"px":o.style.paddingLeft=parseInt(window.getComputedStyle(o,null).getPropertyValue("padding-left"))+i.index*this.indent+"px")},E.prototype.generateControlElement=function(e,t){var o=this,i=e.modules.dataTree,t=t||e.getCells()[0].getElement(),n=i.controlEl;!1!==i.children&&(i.open?(i.controlEl=this.collapseEl.cloneNode(!0),i.controlEl.addEventListener("click",function(t){t.stopPropagation(),o.collapseRow(e)})):(i.controlEl=this.expandEl.cloneNode(!0),i.controlEl.addEventListener("click",function(t){t.stopPropagation(),o.expandRow(e)})),i.controlEl.addEventListener("mousedown",function(e){e.stopPropagation()}),n&&n.parentNode===t?n.parentNode.replaceChild(i.controlEl,n):t.insertBefore(i.controlEl,t.firstChild))},E.prototype.setDisplayIndex=function(e){this.displayIndex=e},E.prototype.getDisplayIndex=function(){return this.displayIndex},E.prototype.getRows=function(e){var t=this,o=[];return e.forEach(function(e,i){var n,s;o.push(e),e instanceof l&&(n=e.modules.dataTree.children,n.index||!1===n.children||(s=t.getChildren(e),s.forEach(function(e){o.push(e)})))}),o},E.prototype.getChildren=function(e){var t=this,o=e.modules.dataTree,i=[],n=[];return!1!==o.children&&o.open&&(Array.isArray(o.children)||(o.children=this.generateChildren(e)),i=this.table.modExists("filter")&&this.table.options.dataTreeFilter?this.table.modules.filter.filter(o.children):o.children,this.table.modExists("sort")&&this.table.options.dataTreeSort&&this.table.modules.sort.sort(i),i.forEach(function(e){n.push(e),t.getChildren(e).forEach(function(e){n.push(e)})})),n},E.prototype.generateChildren=function(e){var t=this,o=[],i=e.getData()[this.field];return Array.isArray(i)||(i=[i]),i.forEach(function(i){var n=new l(i||{},t.table.rowManager);n.modules.dataTree.index=e.modules.dataTree.index+1,n.modules.dataTree.parent=e,n.modules.dataTree.children&&(n.modules.dataTree.open=t.startOpen(n.getComponent(),n.modules.dataTree.index)),o.push(n)}),o},E.prototype.expandRow=function(e,t){var o=e.modules.dataTree;!1!==o.children&&(o.open=!0,e.reinitialize(),this.table.rowManager.refreshActiveData("tree",!1,!0),this.table.options.dataTreeRowExpanded(e.getComponent(),e.modules.dataTree.index))},E.prototype.collapseRow=function(e){var t=e.modules.dataTree;!1!==t.children&&(t.open=!1,e.reinitialize(),this.table.rowManager.refreshActiveData("tree",!1,!0),this.table.options.dataTreeRowCollapsed(e.getComponent(),e.modules.dataTree.index))},E.prototype.toggleRow=function(e){var t=e.modules.dataTree;!1!==t.children&&(t.open?this.collapseRow(e):this.expandRow(e))},E.prototype.getTreeParent=function(e){return!!e.modules.dataTree.parent&&e.modules.dataTree.parent.getComponent()},E.prototype.getFilteredTreeChildren=function(e){var t,o=e.modules.dataTree,i=[];return o.children&&(Array.isArray(o.children)||(o.children=this.generateChildren(e)),t=this.table.modExists("filter")&&this.table.options.dataTreeFilter?this.table.modules.filter.filter(o.children):o.children,t.forEach(function(e){e instanceof l&&i.push(e)})),i},E.prototype.rowDelete=function(e){var t,o=e.modules.dataTree.parent;o&&(t=this.findChildIndex(e,o),!1!==t&&o.data[this.field].splice(t,1),o.data[this.field].length||delete o.data[this.field],this.initializeRow(o),this.layoutRow(o)),this.table.rowManager.refreshActiveData("tree",!1,!0)},E.prototype.addTreeChildRow=function(e,t,o,i){var n=!1;"string"==typeof t&&(t=JSON.parse(t)),Array.isArray(e.data[this.field])||(e.data[this.field]=[],e.modules.dataTree.open=this.startOpen(e.getComponent(),e.modules.dataTree.index)),void 0!==i&&!1!==(n=this.findChildIndex(i,e))&&e.data[this.field].splice(o?n:n+1,0,t),!1===n&&(o?e.data[this.field].unshift(t):e.data[this.field].push(t)),this.initializeRow(e),this.layoutRow(e),this.table.rowManager.refreshActiveData("tree",!1,!0)},E.prototype.findChildIndex=function(e,t){var o=this,i=!1;return"object"==(void 0===e?"undefined":_typeof(e))?e instanceof l?i=e.data:e instanceof r?i=e._getSelf().data:"undefined"!=typeof HTMLElement&&e instanceof HTMLElement&&t.modules.dataTree&&(i=t.modules.dataTree.children.find(function(t){return t instanceof l&&t.element===e}))&&(i=i.data):i=void 0!==e&&null!==e&&t.data[this.field].find(function(t){return t.data[o.table.options.index]==e}),i&&(Array.isArray(t.data[this.field])&&(i=t.data[this.field].indexOf(i)),-1==i&&(i=!1)),i},E.prototype.getTreeChildren=function(e,t,o){var i=this,n=e.modules.dataTree,s=[];return n.children&&(Array.isArray(n.children)||(n.children=this.generateChildren(e)),n.children.forEach(function(e){e instanceof l&&(s.push(t?e.getComponent():e),o&&(s=s.concat(i.getTreeChildren(e,t,o))))})),s},E.prototype.checkForRestyle=function(e){e.row.cells.indexOf(e)||e.row.reinitialize()},E.prototype.getChildField=function(){return this.field},E.prototype.redrawNeeded=function(e){return!!this.field&&void 0!==e[this.field]||!!this.elementField&&void 0!==e[this.elementField]},h.prototype.registerModule("dataTree",E);var C=function(e){this.table=e};C.prototype.download=function(e,t,o,i,n){function s(o,i){n?!0===n?a.triggerDownload(o,i,e,t,!0):n(o):a.triggerDownload(o,i,e,t)}var a=this,r=!1;if("function"==typeof e?r=e:a.downloaders[e]?r=a.downloaders[e]:console.warn("Download Error - No such download type found: ",e),r){var l=this.generateExportList(i);r.call(this.table,l,o||{},s)}},C.prototype.generateExportList=function(e){var t=this.table.modules.export.generateExportList(this.table.options.downloadConfig,!1,e||this.table.options.downloadRowRange,"download"),o=this.table.options.groupHeaderDownload;return o&&!Array.isArray(o)&&(o=[o]),t.forEach(function(e){var t;"group"===e.type&&(t=e.columns[0],o&&o[e.indent]&&(t.value=o[e.indent](t.value,e.component._group.getRowCount(),e.component._group.getData(),e.component)))}),t},C.prototype.triggerDownload=function(e,t,o,i,n){var s=document.createElement("a"),a=new Blob([e],{type:t}),i=i||"Tabulator."+("function"==typeof o?"txt":o);(a=this.table.options.downloadReady.call(this.table,e,a))&&(n?window.open(window.URL.createObjectURL(a)):navigator.msSaveOrOpenBlob?navigator.msSaveOrOpenBlob(a,i):(s.setAttribute("href",window.URL.createObjectURL(a)),s.setAttribute("download",i),s.style.display="none",document.body.appendChild(s),s.click(),document.body.removeChild(s)),this.table.options.downloadComplete&&this.table.options.downloadComplete())},C.prototype.commsReceived=function(e,t,o){switch(t){case"intercept":this.download(o.type,"",o.options,o.active,o.intercept)}},C.prototype.downloaders={csv:function(e,t,o){var i=t&&t.delimiter?t.delimiter:",",n=[],s=[];e.forEach(function(e){var t=[];switch(e.type){case"group":console.warn("Download Warning - CSV downloader cannot process row groups");break;case"calc":console.warn("Download Warning - CSV downloader cannot process column calculations");break;case"header":e.columns.forEach(function(e,t){e&&1===e.depth&&(s[t]=void 0===e.value||null===e.value?"":'"'+String(e.value).split('"').join('""')+'"')});break;case"row":e.columns.forEach(function(e){if(e){switch(_typeof(e.value)){case"object":e.value=JSON.stringify(e.value);break;case"undefined":case"null":e.value=""}t.push('"'+String(e.value).split('"').join('""')+'"')}}),n.push(t.join(i))}}),s.length&&n.unshift(s.join(i)),n=n.join("\n"),t.bom&&(n="\ufeff"+n),o(n,"text/csv")},json:function(e,t,o){var i=[];e.forEach(function(e){var t={};switch(e.type){case"header":break;case"group":console.warn("Download Warning - JSON downloader cannot process row groups");break;case"calc":console.warn("Download Warning - JSON downloader cannot process column calculations");break;case"row":e.columns.forEach(function(e){e&&(t[e.component.getField()]=e.value)}),i.push(t)}}),i=JSON.stringify(i,null,"\t"),o(i,"application/json")},pdf:function(e,t,o){function i(e,t){var o=[];return e.columns.forEach(function(e){var i;if(e){switch(_typeof(e.value)){case"object":e.value=JSON.stringify(e.value);break;case"undefined":case"null":e.value=""}i={content:e.value,colSpan:e.width,rowSpan:e.height},t&&(i.styles=t),o.push(i)}else o.push("")}),o}var n=[],s=[],a={},r=t.rowGroupStyles||{fontStyle:"bold",fontSize:12,cellPadding:6,fillColor:220},l=t.rowCalcStyles||{fontStyle:"bold",fontSize:10,cellPadding:4,fillColor:232},c=t.jsPDF||{},u=t&&t.title?t.title:"";c.orientation||(c.orientation=t.orientation||"landscape"),c.unit||(c.unit="pt"),e.forEach(function(e){switch(e.type){case"header":n.push(i(e));break;case"group":s.push(i(e,r));break;case"calc":s.push(i(e,l));break;case"row":s.push(i(e))}});var d=new jsPDF(c);t&&t.autoTable&&(a="function"==typeof t.autoTable?t.autoTable(d)||{}:t.autoTable),u&&(a.addPageContent=function(e){d.text(u,40,30)}),a.head=n,a.body=s,d.autoTable(a),t&&t.documentProcessing&&t.documentProcessing(d),o(d.output("arraybuffer"),"application/pdf")},xlsx:function(e,t,o){function i(){var t=[],o=[],i={},n={s:{c:0,r:0},e:{c:e[0]?e[0].columns.reduce(function(e,t){return e+(t&&t.width?t.width:1)},0):0,r:e.length}};return e.forEach(function(e,i){var n=[];e.columns.forEach(function(e,t){e?(n.push(e.value instanceof Date||"object"!==_typeof(e.value)?e.value:JSON.stringify(e.value)),(e.width>1||e.height>-1)&&o.push({s:{r:i,c:t},e:{r:i+e.height-1,c:t+e.width-1}})):n.push("")}),t.push(n)}),XLSX.utils.sheet_add_aoa(i,t),i["!ref"]=XLSX.utils.encode_range(n),o.length&&(i["!merges"]=o),i}var n,s=this,a=t.sheetName||"Sheet1",r=XLSX.utils.book_new();if(r.SheetNames=[],r.Sheets={},t.sheetOnly)return void o(i());if(t.sheets)for(var l in t.sheets)!0===t.sheets[l]?(r.SheetNames.push(l),r.Sheets[l]=i()):(r.SheetNames.push(l),this.modules.comms.send(t.sheets[l],"download","intercept",{type:"xlsx",options:{sheetOnly:!0},active:s.active,intercept:function(e){r.Sheets[l]=e}}));else r.SheetNames.push(a),r.Sheets[a]=i();t.documentProcessing&&(r=t.documentProcessing(r)),n=XLSX.write(r,{bookType:"xlsx",bookSST:!0,type:"binary"}),o(function(e){for(var t=new ArrayBuffer(e.length),o=new Uint8Array(t),i=0;i!=e.length;++i)o[i]=255&e.charCodeAt(i);return t}(n),"application/octet-stream")},html:function(e,t,o){this.modExists("export",!0)&&o(this.modules.export.genereateHTMLTable(e),"text/html")}},h.prototype.registerModule("download",C);var R=function(e){this.table=e,this.currentCell=!1,this.mouseClick=!1,this.recursionBlock=!1,this.invalidEdit=!1,this.editedCells=[]};R.prototype.initializeColumn=function(e){var t=this,o={editor:!1,blocked:!1,check:e.definition.editable,params:e.definition.editorParams||{}};switch(_typeof(e.definition.editor)){case"string":"tick"===e.definition.editor&&(e.definition.editor="tickCross",console.warn("DEPRECATION WARNING - the tick editor has been deprecated, please use the tickCross editor")),t.editors[e.definition.editor]?o.editor=t.editors[e.definition.editor]:console.warn("Editor Error - No such editor found: ",e.definition.editor);break;case"function":o.editor=e.definition.editor;break;case"boolean":!0===e.definition.editor&&("function"!=typeof e.definition.formatter?("tick"===e.definition.formatter&&(e.definition.formatter="tickCross",console.warn("DEPRECATION WARNING - the tick editor has been deprecated, please use the tickCross editor")),t.editors[e.definition.formatter]?o.editor=t.editors[e.definition.formatter]:o.editor=t.editors.input):console.warn("Editor Error - Cannot auto lookup editor for a custom formatter: ",e.definition.formatter))}o.editor&&(e.modules.edit=o)},R.prototype.getCurrentCell=function(){return!!this.currentCell&&this.currentCell.getComponent()},R.prototype.clearEditor=function(e){var t,o=this.currentCell;if(this.invalidEdit=!1,o){for(this.currentCell=!1,t=o.getElement(),e?o.validate():t.classList.remove("tabulator-validation-fail"),t.classList.remove("tabulator-editing");t.firstChild;)t.removeChild(t.firstChild);o.row.getElement().classList.remove("tabulator-row-editing")}},R.prototype.cancelEdit=function(){if(this.currentCell){var e=this.currentCell,t=this.currentCell.getComponent();this.clearEditor(!0),e.setValueActual(e.getValue()),e.cellRendered(),("textarea"==e.column.definition.editor||e.column.definition.variableHeight)&&e.row.normalizeHeight(!0),e.column.cellEvents.cellEditCancelled&&e.column.cellEvents.cellEditCancelled.call(this.table,t),this.table.options.cellEditCancelled.call(this.table,t)}},R.prototype.bindEditor=function(e){var t=this,o=e.getElement();o.setAttribute("tabindex",0),o.addEventListener("click",function(e){o.classList.contains("tabulator-editing")||o.focus({preventScroll:!0})}),o.addEventListener("mousedown",function(e){2===e.button?e.preventDefault():t.mouseClick=!0}),o.addEventListener("focus",function(o){t.recursionBlock||t.edit(e,o,!1)})},R.prototype.focusCellNoEvent=function(e,t){this.recursionBlock=!0,t&&"ie"===this.table.browser||e.getElement().focus({preventScroll:!0}),this.recursionBlock=!1},R.prototype.editCell=function(e,t){this.focusCellNoEvent(e),this.edit(e,!1,t)},R.prototype.focusScrollAdjust=function(e){if("virtual"==this.table.rowManager.getRenderMode()){var t=this.table.rowManager.element.scrollTop,o=this.table.rowManager.element.clientHeight+this.table.rowManager.element.scrollTop,i=e.row.getElement();i.offsetTop;i.offsetTop<t?this.table.rowManager.element.scrollTop-=t-i.offsetTop:i.offsetTop+i.offsetHeight>o&&(this.table.rowManager.element.scrollTop+=i.offsetTop+i.offsetHeight-o);var n=this.table.rowManager.element.scrollLeft,s=this.table.rowManager.element.clientWidth+this.table.rowManager.element.scrollLeft,a=e.getElement();a.offsetLeft;this.table.modExists("frozenColumns")&&(n+=parseInt(this.table.modules.frozenColumns.leftMargin),s-=parseInt(this.table.modules.frozenColumns.rightMargin)),a.offsetLeft<n?this.table.rowManager.element.scrollLeft-=n-a.offsetLeft:a.offsetLeft+a.offsetWidth>s&&(this.table.rowManager.element.scrollLeft+=a.offsetLeft+a.offsetWidth-s)}},R.prototype.edit=function(e,t,o){function i(t){if(c.currentCell===e){var o=!0;return e.column.modules.validate&&c.table.modExists("validate")&&"manual"!=c.table.options.validationMode&&(o=c.table.modules.validate.validate(e.column.modules.validate,e,t)),!0===o||"highlight"===c.table.options.validationMode?(c.clearEditor(),e.modules.edit||(e.modules.edit={}),e.modules.edit.edited=!0,-1==c.editedCells.indexOf(e)&&c.editedCells.push(e),e.setValue(t,!0),c.table.options.dataTree&&c.table.modExists("dataTree")&&c.table.modules.dataTree.checkForRestyle(e),!0===o||(h.classList.add("tabulator-validation-fail"),c.table.options.validationFailed.call(c.table,e.getComponent(),t,o),!1)):(c.invalidEdit=!0,h.classList.add("tabulator-validation-fail"),c.focusCellNoEvent(e,!0),d(),c.table.options.validationFailed.call(c.table,e.getComponent(),t,o),!1)}}function n(){c.currentCell===e&&(c.cancelEdit(),c.table.options.dataTree&&c.table.modExists("dataTree")&&c.table.modules.dataTree.checkForRestyle(e))}function s(e){d=e}var a,r,l,c=this,u=!0,d=function(){},h=e.getElement();if(this.currentCell)return void(this.invalidEdit||this.cancelEdit());if(e.column.modules.edit.blocked)return this.mouseClick=!1,h.blur(),!1;switch(t&&t.stopPropagation(),_typeof(e.column.modules.edit.check)){case"function":u=e.column.modules.edit.check(e.getComponent());break;case"boolean":u=e.column.modules.edit.check}if(u||o){if(c.cancelEdit(),c.currentCell=e,this.focusScrollAdjust(e),r=e.getComponent(),this.mouseClick&&(this.mouseClick=!1,e.column.cellEvents.cellClick&&e.column.cellEvents.cellClick.call(this.table,t,r)),e.column.cellEvents.cellEditing&&e.column.cellEvents.cellEditing.call(this.table,r),c.table.options.cellEditing.call(this.table,r),l="function"==typeof e.column.modules.edit.params?e.column.modules.edit.params(r):e.column.modules.edit.params,!1===(a=e.column.modules.edit.editor.call(c,r,s,i,n,l)))return h.blur(),!1;if(!(a instanceof Node))return console.warn("Edit Error - Editor should return an instance of Node, the editor returned:",a),h.blur(),!1;for(h.classList.add("tabulator-editing"),e.row.getElement().classList.add("tabulator-row-editing");h.firstChild;)h.removeChild(h.firstChild);h.appendChild(a),d();for(var p=h.children,m=0;m<p.length;m++)p[m].addEventListener("click",function(e){e.stopPropagation()});return!0}return this.mouseClick=!1,h.blur(),!1},R.prototype.maskInput=function(e,t){function o(t){var r=i[t];void 0!==r&&r!==a&&r!==n&&r!==s&&(e.value=e.value+""+r,o(t+1))}var i=t.mask,n=void 0!==t.maskLetterChar?t.maskLetterChar:"A",s=void 0!==t.maskNumberChar?t.maskNumberChar:"9",a=void 0!==t.maskWildcardChar?t.maskWildcardChar:"*",r=!1;e.addEventListener("keydown",function(t){var o=e.value.length,l=t.key;if(t.keyCode>46){if(o>=i.length)return t.preventDefault(),t.stopPropagation(),r=!1,!1;switch(i[o]){case n:if(l.toUpperCase()==l.toLowerCase())return t.preventDefault(),t.stopPropagation(),r=!1,!1;break;case s:if(isNaN(l))return t.preventDefault(),t.stopPropagation(),r=!1,!1;break;case a:break;default:if(l!==i[o])return t.preventDefault(),t.stopPropagation(),r=!1,!1}r=!0}}),e.addEventListener("keyup",function(i){i.keyCode>46&&t.maskAutoFill&&o(e.value.length)}),e.placeholder||(e.placeholder=i),t.maskAutoFill&&o(e.value.length)},R.prototype.getEditedCells=function(){var e=[];return this.editedCells.forEach(function(t){e.push(t.getComponent())}),e},R.prototype.clearEdited=function(e){var t;e.modules.edit&&e.modules.edit.edited&&(e.modules.edit.edited=!1,e.modules.validate&&(e.modules.validate.invalid=!1)),(t=this.editedCells.indexOf(e))>-1&&this.editedCells.splice(t,1)},R.prototype.editors={input:function(e,t,o,i,n){function s(e){(null===a||void 0===a)&&""!==r.value||r.value!==a?o(r.value)&&(a=r.value):i()}var a=e.getValue(),r=document.createElement("input");if(r.setAttribute("type",n.search?"search":"text"),r.style.padding="4px",r.style.width="100%",r.style.boxSizing="border-box",n.elementAttributes&&"object"==_typeof(n.elementAttributes))for(var l in n.elementAttributes)"+"==l.charAt(0)?(l=l.slice(1),r.setAttribute(l,r.getAttribute(l)+n.elementAttributes["+"+l])):r.setAttribute(l,n.elementAttributes[l]);return r.value=void 0!==a?a:"",t(function(){r.focus({preventScroll:!0}),r.style.height="100%"}),r.addEventListener("change",s),r.addEventListener("blur",s),r.addEventListener("keydown",function(e){switch(e.keyCode){case 13:s(e);break;case 27:i();break;case 35:case 36:e.stopPropagation()}}),n.mask&&this.table.modules.edit.maskInput(r,n),r},textarea:function(e,t,o,i,n){function s(t){(null===a||void 0===a)&&""!==c.value||c.value!==a?(o(c.value)&&(a=c.value),setTimeout(function(){e.getRow().normalizeHeight()},300)):i()}var a=e.getValue(),r=n.verticalNavigation||"hybrid",l=String(null!==a&&void 0!==a?a:""),c=(l.match(/(?:\r\n|\r|\n)/g),document.createElement("textarea")),u=0;if(c.style.display="block",c.style.padding="2px",c.style.height="100%",c.style.width="100%",c.style.boxSizing="border-box",c.style.whiteSpace="pre-wrap",c.style.resize="none",n.elementAttributes&&"object"==_typeof(n.elementAttributes))for(var d in n.elementAttributes)"+"==d.charAt(0)?(d=d.slice(1),c.setAttribute(d,c.getAttribute(d)+n.elementAttributes["+"+d])):c.setAttribute(d,n.elementAttributes[d]);return c.value=l,t(function(){c.focus({preventScroll:!0}),c.style.height="100%",c.scrollHeight,c.style.height=c.scrollHeight+"px",e.getRow().normalizeHeight()}),c.addEventListener("change",s),c.addEventListener("blur",s),c.addEventListener("keyup",function(){c.style.height="";var t=c.scrollHeight;c.style.height=t+"px",t!=u&&(u=t,e.getRow().normalizeHeight())}),c.addEventListener("keydown",function(e){switch(e.keyCode){case 27:i();break;case 38:("editor"==r||"hybrid"==r&&c.selectionStart)&&(e.stopImmediatePropagation(),e.stopPropagation());break;case 40:("editor"==r||"hybrid"==r&&c.selectionStart!==c.value.length)&&(e.stopImmediatePropagation(),e.stopPropagation());break;case 35:case 36:e.stopPropagation()}}),n.mask&&this.table.modules.edit.maskInput(c,n),c},number:function(e,t,o,i,n){function s(){var e=l.value;isNaN(e)||""===e||(e=Number(e)),e!==a?o(e)&&(a=e):i()}var a=e.getValue(),r=n.verticalNavigation||"editor",l=document.createElement("input");if(l.setAttribute("type","number"),void 0!==n.max&&l.setAttribute("max",n.max),void 0!==n.min&&l.setAttribute("min",n.min),void 0!==n.step&&l.setAttribute("step",n.step),l.style.padding="4px",l.style.width="100%",l.style.boxSizing="border-box",n.elementAttributes&&"object"==_typeof(n.elementAttributes))for(var c in n.elementAttributes)"+"==c.charAt(0)?(c=c.slice(1),l.setAttribute(c,l.getAttribute(c)+n.elementAttributes["+"+c])):l.setAttribute(c,n.elementAttributes[c]);l.value=a;var u=function(e){s()};return t(function(){l.removeEventListener("blur",u),l.focus({preventScroll:!0}),l.style.height="100%",l.addEventListener("blur",u)}),l.addEventListener("keydown",function(e){switch(e.keyCode){case 13:s();break;case 27:i();break;case 38:case 40:"editor"==r&&(e.stopImmediatePropagation(),e.stopPropagation());break;case 35:case 36:e.stopPropagation()}}),n.mask&&this.table.modules.edit.maskInput(l,n),l},range:function(e,t,o,i,n){function s(){var e=r.value;isNaN(e)||""===e||(e=Number(e)),e!=a?o(e)&&(a=e):i()}var a=e.getValue(),r=document.createElement("input");if(r.setAttribute("type","range"),void 0!==n.max&&r.setAttribute("max",n.max),
+void 0!==n.min&&r.setAttribute("min",n.min),void 0!==n.step&&r.setAttribute("step",n.step),r.style.padding="4px",r.style.width="100%",r.style.boxSizing="border-box",n.elementAttributes&&"object"==_typeof(n.elementAttributes))for(var l in n.elementAttributes)"+"==l.charAt(0)?(l=l.slice(1),r.setAttribute(l,r.getAttribute(l)+n.elementAttributes["+"+l])):r.setAttribute(l,n.elementAttributes[l]);return r.value=a,t(function(){r.focus({preventScroll:!0}),r.style.height="100%"}),r.addEventListener("blur",function(e){s()}),r.addEventListener("keydown",function(e){switch(e.keyCode){case 13:s();break;case 27:i()}}),r},select:function(e,t,o,i,n){function s(t){var o,i={},s=C.table.getData();return o=t?C.table.columnManager.getColumnByField(t):e.getColumn()._getSelf(),o?(s.forEach(function(e){var t=o.getFieldValue(e);null!==t&&void 0!==t&&""!==t&&(i[t]=!0)}),i=n.sortValuesList?"asc"==n.sortValuesList?Object.keys(i).sort():Object.keys(i).sort().reverse():Object.keys(i)):console.warn("unable to find matching column to create select lookup list:",t),i}function a(t,o){function i(e){var e={label:e.label,value:e.value,itemParams:e.itemParams,elementAttributes:e.elementAttributes,element:!1};return o.indexOf(e.value)>-1&&c(e),n.push(e),s.push(e),e}var n=[],s=[];if("function"==typeof t&&(t=t(e)),Array.isArray(t))t.forEach(function(e){var t;"object"===(void 0===e?"undefined":_typeof(e))?e.options?(t={label:e.label,group:!0,itemParams:e.itemParams,elementAttributes:e.elementAttributes,element:!1},s.push(t),e.options.forEach(function(e){i(e)})):i(e):(t={label:e,value:e,element:!1},o.indexOf(t.value)>-1&&c(t),n.push(t),s.push(t))});else for(var a in t){var l={label:t[a],value:a,element:!1};o.indexOf(l.value)>-1&&c(l),n.push(l),s.push(l)}z=n,H=s,r()}function r(){for(;D.firstChild;)D.removeChild(D.firstChild);H.forEach(function(t){var o=t.element;if(!o){if(o=document.createElement("div"),t.label=n.listItemFormatter?n.listItemFormatter(t.value,t.label,e,o,t.itemParams):t.label,t.group?(o.classList.add("tabulator-edit-select-list-group"),o.tabIndex=0,o.innerHTML=""===t.label?"&nbsp;":t.label):(o.classList.add("tabulator-edit-select-list-item"),o.tabIndex=0,o.innerHTML=""===t.label?"&nbsp;":t.label,o.addEventListener("click",function(){_=!0,setTimeout(function(){_=!1},10),k?(d(t),T.focus()):p(t)}),P.indexOf(t)>-1&&o.classList.add("active")),t.elementAttributes&&"object"==_typeof(t.elementAttributes))for(var i in t.elementAttributes)"+"==i.charAt(0)?(i=i.slice(1),o.setAttribute(i,T.getAttribute(i)+t.elementAttributes["+"+i])):o.setAttribute(i,t.elementAttributes[i]);o.addEventListener("mousedown",function(){A=!1,setTimeout(function(){A=!0},10)}),t.element=o}D.appendChild(o)})}function l(e,t){!k&&S&&S.element&&S.element.classList.remove("active"),S&&S.element&&S.element.classList.remove("focused"),S=e,e.element&&(e.element.classList.add("focused"),t&&e.element.classList.add("active")),e&&e.element&&e.element.scrollIntoView&&e.element.scrollIntoView({behavior:"smooth",block:"nearest",inline:"start"})}function c(e){-1==P.indexOf(e)&&(P.push(e),l(e,!0)),f()}function u(e){var t=P[e];e>-1&&(P.splice(e,1),t.element&&t.element.classList.remove("active"))}function d(e){e||(e=S);var t=P.indexOf(e);t>-1?u(t):(!0!==k&&P.length>=k&&u(0),c(e)),f()}function p(e){y(),e||(e=S),e&&(T.value=e.label,o(e.value)),L=T.value}function m(e){e||y();var t=[];P.forEach(function(e){t.push(e.value)}),L=T.value,o(t)}function f(){var e=[];P.forEach(function(t){e.push(t.label)}),T.value=e.join(", "),!1===C.currentCell&&m(!0)}function g(){for(var e=P.length,t=0;t<e;t++)u(0)}function b(){y(),i()}function v(){if(P=[],!D.parentNode){!0===n.values?a(s(),L):"string"==typeof n.values?a(s(n.values),L):a(n.values||[],L);var e=h.prototype.helpers.elOffset(R);D.style.minWidth=R.offsetWidth+"px",D.style.top=e.top+R.offsetHeight+"px",D.style.left=e.left+"px",D.addEventListener("mousedown",function(e){A=!1,setTimeout(function(){A=!0},10)}),document.body.appendChild(D)}}function y(){D.parentNode&&D.parentNode.removeChild(D),w()}function w(){C.table.rowManager.element.removeEventListener("scroll",b)}var E=this,C=this,R=e.getElement(),x=e.getValue(),M=n.verticalNavigation||"editor",L=void 0!==x||null===x?Array.isArray(x)?x:[x]:void 0!==n.defaultValue?n.defaultValue:[],T=document.createElement("input"),D=document.createElement("div"),k=n.multiselect,z=[],S={},H=[],P=[],A=!0,_=!1;if((Array.isArray(n)||!Array.isArray(n)&&"object"===(void 0===n?"undefined":_typeof(n))&&!n.values)&&(console.warn("DEPRECATION WARNING - values for the select editor must now be passed into the values property of the editorParams object, not as the editorParams object"),n={values:n}),T.setAttribute("type","text"),T.style.padding="4px",T.style.width="100%",T.style.boxSizing="border-box",T.style.cursor="default",T.readOnly=0!=this.currentCell,n.elementAttributes&&"object"==_typeof(n.elementAttributes))for(var F in n.elementAttributes)"+"==F.charAt(0)?(F=F.slice(1),T.setAttribute(F,T.getAttribute(F)+n.elementAttributes["+"+F])):T.setAttribute(F,n.elementAttributes[F]);return T.value=void 0!==x||null===x?x:"",T.addEventListener("search",function(e){T.value||(g(),m())}),T.addEventListener("keydown",function(e){var t;switch(e.keyCode){case 38:t=z.indexOf(S),("editor"==M||"hybrid"==M&&t)&&(e.stopImmediatePropagation(),e.stopPropagation(),e.preventDefault(),t>0&&l(z[t-1],!k));break;case 40:t=z.indexOf(S),("editor"==M||"hybrid"==M&&t<z.length-1)&&(e.stopImmediatePropagation(),e.stopPropagation(),e.preventDefault(),t<z.length-1&&(-1==t?l(z[0],!k):l(z[t+1],!k)));break;case 37:case 39:e.stopImmediatePropagation(),e.stopPropagation(),e.preventDefault();break;case 13:k?d():p();break;case 27:b();break;case 9:break;default:!1===C.currentCell&&e.preventDefault()}}),T.addEventListener("blur",function(e){A&&(k?m():b())}),T.addEventListener("focus",function(e){_||v()}),D=document.createElement("div"),D.classList.add("tabulator-edit-select-list"),t(function(){T.style.height="100%",T.focus({preventScroll:!0})}),setTimeout(function(){E.table.rowManager.element.addEventListener("scroll",b)},10),T},autocomplete:function(e,t,o,i,n){function s(){!0===n.values?S=a():"string"==typeof n.values&&(S=a(n.values))}function a(t){var o,i={},s=E.table.getData();return o=t?E.table.columnManager.getColumnByField(t):e.getColumn()._getSelf(),o?(s.forEach(function(e){var t=o.getFieldValue(e);null!==t&&void 0!==t&&""!==t&&(i[t]=!0)}),i=n.sortValuesList?"asc"==n.sortValuesList?Object.keys(i).sort():Object.keys(i).sort().reverse():Object.keys(i)):console.warn("unable to find matching column to create autocomplete lookup list:",t),i}function r(e,t){var o,i,s=[];o=S||(n.values||[]),n.searchFunc?(s=n.searchFunc(e,o),s instanceof Promise?(l(void 0!==n.searchingPlaceholder?n.searchingPlaceholder:"Searching..."),s.then(function(e){d(c(e),t)}).catch(function(e){console.err("error in autocomplete search promise:",e)})):d(c(s),t)):(i=c(o),""===e?n.showListOnEmpty&&(s=i):i.forEach(function(t){null===t.value&&void 0===t.value||(String(t.value).toLowerCase().indexOf(String(e).toLowerCase())>-1||String(t.title).toLowerCase().indexOf(String(e).toLowerCase())>-1)&&s.push(t)}),d(s,t))}function l(e){var t=document.createElement("div");u(),!1!==e&&(t.classList.add("tabulator-edit-select-list-notice"),t.tabIndex=0,e instanceof Node?t.appendChild(e):t.innerHTML=e,T.appendChild(t))}function c(e){var t=[];if(Array.isArray(e))e.forEach(function(e){var o={};"object"===(void 0===e?"undefined":_typeof(e))?(o.title=n.listItemFormatter?n.listItemFormatter(e.value,e.label):e.label,o.value=e.value):(o.title=n.listItemFormatter?n.listItemFormatter(e,e):e,o.value=e),t.push(o)});else for(var o in e){var i={title:n.listItemFormatter?n.listItemFormatter(o,e[o]):e[o],value:o};t.push(i)}return t}function u(){for(;T.firstChild;)T.removeChild(T.firstChild)}function d(e,t){e.length?p(e,t):n.emptyPlaceholder&&l(n.emptyPlaceholder)}function p(e,t){var o=!1;u(),D=e,D.forEach(function(e){var i=e.element;i||(i=document.createElement("div"),i.classList.add("tabulator-edit-select-list-item"),i.tabIndex=0,i.innerHTML=e.title,i.addEventListener("click",function(t){g(e),m()}),i.addEventListener("mousedown",function(e){z=!1,setTimeout(function(){z=!0},10)}),e.element=i,t&&e.value==R&&(L.value=e.title,e.element.classList.add("active"),o=!0),e===k&&(e.element.classList.add("active"),o=!0)),T.appendChild(i)}),o||g(!1)}function m(){b(),k?R!==k.value?(R=k.value,L.value=k.title,o(k.value)):i():n.freetext?(R=L.value,o(L.value)):n.allowEmpty&&""===L.value?(R=L.value,o(L.value)):i()}function f(){if(!T.parentNode){for(;T.firstChild;)T.removeChild(T.firstChild);var e=h.prototype.helpers.elOffset(C);T.style.minWidth=C.offsetWidth+"px",T.style.top=e.top+C.offsetHeight+"px",T.style.left=e.left+"px",document.body.appendChild(T)}}function g(e,t){k&&k.element&&k.element.classList.remove("active"),k=e,e&&e.element&&e.element.classList.add("active"),e&&e.element&&e.element.scrollIntoView&&e.element.scrollIntoView({behavior:"smooth",block:"nearest",inline:"start"})}function b(){T.parentNode&&T.parentNode.removeChild(T),y()}function v(){b(),i()}function y(){E.table.rowManager.element.removeEventListener("scroll",v)}var w=this,E=this,C=e.getElement(),R=e.getValue(),x=n.verticalNavigation||"editor",M=void 0!==R||null===R?R:void 0!==n.defaultValue?n.defaultValue:"",L=document.createElement("input"),T=document.createElement("div"),D=[],k=!1,z=!0,S=!1;if(L.setAttribute("type","search"),L.style.padding="4px",L.style.width="100%",L.style.boxSizing="border-box",n.elementAttributes&&"object"==_typeof(n.elementAttributes))for(var H in n.elementAttributes)"+"==H.charAt(0)?(H=H.slice(1),L.setAttribute(H,L.getAttribute(H)+n.elementAttributes["+"+H])):L.setAttribute(H,n.elementAttributes[H]);return T.classList.add("tabulator-edit-select-list"),T.addEventListener("mousedown",function(e){z=!1,setTimeout(function(){z=!0},10)}),L.addEventListener("keydown",function(e){var t;switch(e.keyCode){case 38:t=D.indexOf(k),("editor"==x||"hybrid"==x&&t)&&(e.stopImmediatePropagation(),e.stopPropagation(),e.preventDefault(),g(t>0?D[t-1]:!1));break;case 40:t=D.indexOf(k),("editor"==x||"hybrid"==x&&t<D.length-1)&&(e.stopImmediatePropagation(),e.stopPropagation(),e.preventDefault(),t<D.length-1&&g(-1==t?D[0]:D[t+1]));break;case 37:case 39:e.stopImmediatePropagation(),e.stopPropagation();break;case 13:m();break;case 27:v();break;case 36:case 35:e.stopImmediatePropagation()}}),L.addEventListener("keyup",function(e){switch(e.keyCode){case 38:case 37:case 39:case 40:case 13:case 27:break;default:r(L.value)}}),L.addEventListener("search",function(e){r(L.value)}),L.addEventListener("blur",function(e){z&&m()}),L.addEventListener("focus",function(e){var t=M;s(),f(),L.value=t,r(t,!0)}),t(function(){L.style.height="100%",L.focus({preventScroll:!0})}),n.mask&&this.table.modules.edit.maskInput(L,n),setTimeout(function(){w.table.rowManager.element.addEventListener("scroll",v)},10),s(),L.value=M,r(M,!0),L},star:function(e,t,o,i,n){function s(e){h.forEach(function(t,o){o<e?("ie"==r.table.browser?t.setAttribute("class","tabulator-star-active"):t.classList.replace("tabulator-star-inactive","tabulator-star-active"),t.innerHTML='<polygon fill="#488CE9" stroke="#014AAE" stroke-width="37.6152" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" points="259.216,29.942 330.27,173.919 489.16,197.007 374.185,309.08 401.33,467.31 259.216,392.612 117.104,467.31 144.25,309.08 29.274,197.007 188.165,173.919 "/>'):("ie"==r.table.browser?t.setAttribute("class","tabulator-star-inactive"):t.classList.replace("tabulator-star-active","tabulator-star-inactive"),t.innerHTML='<polygon fill="#010155" stroke="#686868" stroke-width="37.6152" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" points="259.216,29.942 330.27,173.919 489.16,197.007 374.185,309.08 401.33,467.31 259.216,392.612 117.104,467.31 144.25,309.08 29.274,197.007 188.165,173.919 "/>')})}function a(e){c=e,s(e)}var r=this,l=e.getElement(),c=e.getValue(),u=l.getElementsByTagName("svg").length||5,d=l.getElementsByTagName("svg")[0]?l.getElementsByTagName("svg")[0].getAttribute("width"):14,h=[],p=document.createElement("div"),m=document.createElementNS("http://www.w3.org/2000/svg","svg");if(l.style.whiteSpace="nowrap",l.style.overflow="hidden",l.style.textOverflow="ellipsis",p.style.verticalAlign="middle",p.style.display="inline-block",p.style.padding="4px",m.setAttribute("width",d),m.setAttribute("height",d),m.setAttribute("viewBox","0 0 512 512"),m.setAttribute("xml:space","preserve"),m.style.padding="0 1px",n.elementAttributes&&"object"==_typeof(n.elementAttributes))for(var f in n.elementAttributes)"+"==f.charAt(0)?(f=f.slice(1),p.setAttribute(f,p.getAttribute(f)+n.elementAttributes["+"+f])):p.setAttribute(f,n.elementAttributes[f]);for(var g=1;g<=u;g++)!function(e){var t=document.createElement("span"),i=m.cloneNode(!0);h.push(i),t.addEventListener("mouseenter",function(t){t.stopPropagation(),t.stopImmediatePropagation(),s(e)}),t.addEventListener("mousemove",function(e){e.stopPropagation(),e.stopImmediatePropagation()}),t.addEventListener("click",function(t){t.stopPropagation(),t.stopImmediatePropagation(),o(e),l.blur()}),t.appendChild(i),p.appendChild(t)}(g);return c=Math.min(parseInt(c),u),s(c),p.addEventListener("mousemove",function(e){s(0)}),p.addEventListener("click",function(e){o(0)}),l.addEventListener("blur",function(e){i()}),l.addEventListener("keydown",function(e){switch(e.keyCode){case 39:a(c+1);break;case 37:a(c-1);break;case 13:o(c);break;case 27:i()}}),p},progress:function(e,t,o,i,n){function s(){var e=d*Math.round(m.offsetWidth/(l.clientWidth/100))+u;o(e),l.setAttribute("aria-valuenow",e),l.setAttribute("aria-label",h)}var a,r,l=e.getElement(),c=void 0===n.max?l.getElementsByTagName("div")[0].getAttribute("max")||100:n.max,u=void 0===n.min?l.getElementsByTagName("div")[0].getAttribute("min")||0:n.min,d=(c-u)/100,h=e.getValue()||0,p=document.createElement("div"),m=document.createElement("div");if(p.style.position="absolute",p.style.right="0",p.style.top="0",p.style.bottom="0",p.style.width="5px",p.classList.add("tabulator-progress-handle"),m.style.display="inline-block",m.style.position="relative",m.style.height="100%",m.style.backgroundColor="#488CE9",m.style.maxWidth="100%",m.style.minWidth="0%",n.elementAttributes&&"object"==_typeof(n.elementAttributes))for(var f in n.elementAttributes)"+"==f.charAt(0)?(f=f.slice(1),m.setAttribute(f,m.getAttribute(f)+n.elementAttributes["+"+f])):m.setAttribute(f,n.elementAttributes[f]);return l.style.padding="4px 4px",h=Math.min(parseFloat(h),c),h=Math.max(parseFloat(h),u),h=Math.round((h-u)/d),m.style.width=h+"%",l.setAttribute("aria-valuemin",u),l.setAttribute("aria-valuemax",c),m.appendChild(p),p.addEventListener("mousedown",function(e){a=e.screenX,r=m.offsetWidth}),p.addEventListener("mouseover",function(){p.style.cursor="ew-resize"}),l.addEventListener("mousemove",function(e){a&&(m.style.width=r+e.screenX-a+"px")}),l.addEventListener("mouseup",function(e){a&&(e.stopPropagation(),e.stopImmediatePropagation(),a=!1,r=!1,s())}),l.addEventListener("keydown",function(e){switch(e.keyCode){case 39:e.preventDefault(),m.style.width=m.clientWidth+l.clientWidth/100+"px";break;case 37:e.preventDefault(),m.style.width=m.clientWidth-l.clientWidth/100+"px";break;case 9:case 13:s();break;case 27:i()}}),l.addEventListener("blur",function(){i()}),m},tickCross:function(e,t,o,i,n){function s(e){return l?e?u?c:r.checked:r.checked&&!u?(r.checked=!1,r.indeterminate=!0,u=!0,c):(u=!1,r.checked):r.checked}var a=e.getValue(),r=document.createElement("input"),l=n.tristate,c=void 0===n.indeterminateValue?null:n.indeterminateValue,u=!1;if(r.setAttribute("type","checkbox"),r.style.marginTop="5px",r.style.boxSizing="border-box",n.elementAttributes&&"object"==_typeof(n.elementAttributes))for(var d in n.elementAttributes)"+"==d.charAt(0)?(d=d.slice(1),r.setAttribute(d,r.getAttribute(d)+n.elementAttributes["+"+d])):r.setAttribute(d,n.elementAttributes[d]);return r.value=a,!l||void 0!==a&&a!==c&&""!==a||(u=!0,r.indeterminate=!0),"firefox"!=this.table.browser&&t(function(){r.focus({preventScroll:!0})}),r.checked=!0===a||"true"===a||"True"===a||1===a,t(function(){r.focus()}),r.addEventListener("change",function(e){o(s())}),r.addEventListener("blur",function(e){o(s(!0))}),r.addEventListener("keydown",function(e){13==e.keyCode&&o(s()),27==e.keyCode&&i()}),r}},h.prototype.registerModule("edit",R);var x=function(e,t,o,i){this.type=e,this.columns=t,this.component=o||!1,this.indent=i||0},M=function(e,t,o,i,n){this.value=e,this.component=t||!1,this.width=o,this.height=i,this.depth=n},L=function(e){this.table=e,this.config={},this.cloneTableStyle=!0,this.colVisProp=""};L.prototype.generateExportList=function(e,t,o,i){this.cloneTableStyle=t,this.config=e||{},this.colVisProp=i;var n=!1!==this.config.columnHeaders?this.headersToExportRows(this.generateColumnGroupHeaders()):[],s=this.bodyToExportRows(this.rowLookup(o));return n.concat(s)},L.prototype.genereateTable=function(e,t,o,i){var n=this.generateExportList(e,t,o,i);return this.genereateTableElement(n)},L.prototype.rowLookup=function(e){var t=this,o=[];if("function"==typeof e)e.call(this.table).forEach(function(e){(e=t.table.rowManager.findRow(e))&&o.push(e)});else switch(e){case!0:case"visible":o=this.table.rowManager.getVisibleRows(!0);break;case"all":o=this.table.rowManager.rows;break;case"selected":o=this.table.modules.selectRow.selectedRows;break;case"active":default:o=this.table.options.pagination?this.table.rowManager.getDisplayRows(this.table.rowManager.displayRows.length-2):this.table.rowManager.getDisplayRows()}return Object.assign([],o)},L.prototype.generateColumnGroupHeaders=function(){var e=this,t=[];return(!1!==this.config.columnGroups?this.table.columnManager.columns:this.table.columnManager.columnsByIndex).forEach(function(o){var i=e.processColumnGroup(o);i&&t.push(i)}),t},L.prototype.processColumnGroup=function(e){var t=this,o=e.columns,i=0,n=e.definition["title"+(this.colVisProp.charAt(0).toUpperCase()+this.colVisProp.slice(1))]||e.definition.title,s={title:n,column:e,depth:1};if(o.length){if(s.subGroups=[],s.width=0,o.forEach(function(e){var o=t.processColumnGroup(e);o&&(s.width+=o.width,s.subGroups.push(o),o.depth>i&&(i=o.depth))}),s.depth+=i,!s.width)return!1}else{if(!this.columnVisCheck(e))return!1;s.width=1}return s},L.prototype.columnVisCheck=function(e){return!1!==e.definition[this.colVisProp]&&(e.visible||!e.visible&&e.definition[this.colVisProp])},L.prototype.headersToExportRows=function(e){function t(e,n){var s=i-n;if(void 0===o[n]&&(o[n]=[]),e.height=e.subGroups?1:s-e.depth+1,o[n].push(e),e.height>1)for(var a=1;a<e.height;a++)void 0===o[n+a]&&(o[n+a]=[]),o[n+a].push(!1);if(e.width>1)for(var r=1;r<e.width;r++)o[n].push(!1);e.subGroups&&e.subGroups.forEach(function(e){t(e,n+1)})}var o=[],i=0,n=[];return e.forEach(function(e){e.depth>i&&(i=e.depth)}),e.forEach(function(e){t(e,0)}),o.forEach(function(e){var t=[];e.forEach(function(e){e?t.push(new M(e.title,e.column.getComponent(),e.width,e.height,e.depth)):t.push(null)}),n.push(new x("header",t))}),n},L.prototype.bodyToExportRows=function(e){var t=this,o=[],i=[];return this.table.columnManager.columnsByIndex.forEach(function(e){t.columnVisCheck(e)&&o.push(e.getComponent())}),!1!==this.config.columnCalcs&&this.table.modExists("columnCalcs")&&(this.table.modules.columnCalcs.topInitialized&&e.unshift(this.table.modules.columnCalcs.topRow),this.table.modules.columnCalcs.botInitialized&&e.push(this.table.modules.columnCalcs.botRow)),e=e.filter(function(e){switch(e.type){case"group":return!1!==t.config.rowGroups;case"calc":return!1!==t.config.columnCalcs;case"row":return!(t.table.options.dataTree&&!1===t.config.dataTree&&e.modules.dataTree.parent)}return!0}),e.forEach(function(e,n){var s=e.getData(t.colVisProp),a=[],r=0;switch(e.type){case"group":r=e.level,a.push(new M(e.key,e.getComponent(),o.length,1));break;case"calc":case"row":o.forEach(function(e){a.push(new M(e._column.getFieldValue(s),e,1,1))}),t.table.options.dataTree&&!1!==t.config.dataTree&&(r=e.modules.dataTree.index)}i.push(new x(e.type,a,e.getComponent(),r))}),i},L.prototype.genereateTableElement=function(e){var t=this,o=document.createElement("table"),i=document.createElement("thead"),n=document.createElement("tbody"),s=this.lookupTableStyles(),a=this.table.options["rowFormatter"+(this.colVisProp.charAt(0).toUpperCase()+this.colVisProp.slice(1))],r={};return r.rowFormatter=null!==a?a:this.table.options.rowFormatter,this.table.options.dataTree&&!1!==this.config.dataTree&&this.table.modExists("columnCalcs")&&(r.treeElementField=this.table.modules.dataTree.elementField),r.groupHeader=this.table.options["groupHeader"+(this.colVisProp.charAt(0).toUpperCase()+this.colVisProp.slice(1))],r.groupHeader&&!Array.isArray(r.groupHeader)&&(r.groupHeader=[r.groupHeader]),o.classList.add("tabulator-print-table"),this.mapElementStyles(this.table.columnManager.getHeadersElement(),i,["border-top","border-left","border-right","border-bottom","background-color","color","font-weight","font-family","font-size"]),e.length>1e3&&console.warn("It may take a long time to render an HTML table with more than 1000 rows"),e.forEach(function(e,o){switch(e.type){case"header":i.appendChild(t.genereateHeaderElement(e,r,s));break;case"group":n.appendChild(t.genereateGroupElement(e,r,s));break;case"calc":n.appendChild(t.genereateCalcElement(e,r,s));break;case"row":var a=t.genereateRowElement(e,r,s);t.mapElementStyles(o%2&&s.evenRow?s.evenRow:s.oddRow,a,["border-top","border-left","border-right","border-bottom","color","font-weight","font-family","font-size","background-color"]),n.appendChild(a)}}),i.innerHTML&&o.appendChild(i),o.appendChild(n),this.mapElementStyles(this.table.element,o,["border-top","border-left","border-right","border-bottom"]),o},L.prototype.lookupTableStyles=function(){var e={};return this.cloneTableStyle&&window.getComputedStyle&&(e.oddRow=this.table.element.querySelector(".tabulator-row-odd:not(.tabulator-group):not(.tabulator-calcs)"),e.evenRow=this.table.element.querySelector(".tabulator-row-even:not(.tabulator-group):not(.tabulator-calcs)"),e.calcRow=this.table.element.querySelector(".tabulator-row.tabulator-calcs"),e.firstRow=this.table.element.querySelector(".tabulator-row:not(.tabulator-group):not(.tabulator-calcs)"),e.firstGroup=this.table.element.getElementsByClassName("tabulator-group")[0],e.firstRow&&(e.styleCells=e.firstRow.getElementsByClassName("tabulator-cell"),e.firstCell=e.styleCells[0],e.lastCell=e.styleCells[e.styleCells.length-1])),e},L.prototype.genereateHeaderElement=function(e,t,o){var i=this,n=document.createElement("tr");return e.columns.forEach(function(e){if(e){var t=document.createElement("th"),o=e.component._column.definition.cssClass?e.component._column.definition.cssClass.split(" "):[];t.colSpan=e.width,t.rowSpan=e.height,t.innerHTML=e.value,i.cloneTableStyle&&(t.style.boxSizing="border-box"),o.forEach(function(e){t.classList.add(e)}),i.mapElementStyles(e.component.getElement(),t,["text-align","border-top","border-left","border-right","border-bottom","background-color","color","font-weight","font-family","font-size"]),i.mapElementStyles(e.component._column.contentElement,t,["padding-top","padding-left","padding-right","padding-bottom"]),e.component._column.visible?i.mapElementStyles(e.component.getElement(),t,["width"]):e.component._column.definition.width&&(t.style.width=e.component._column.definition.width+"px"),e.component._column.parent&&i.mapElementStyles(e.component._column.parent.groupElement,t,["border-top"]),n.appendChild(t)}}),n},L.prototype.genereateGroupElement=function(e,t,o){var i=document.createElement("tr"),n=document.createElement("td"),s=e.columns[0];return i.classList.add("tabulator-print-table-row"),t.groupHeader&&t.groupHeader[e.indent]?s.value=t.groupHeader[e.indent](s.value,e.component._group.getRowCount(),e.component._group.getData(),e.component):!1===t.groupHeader?s.value=s.value:s.value=e.component._group.generator(s.value,e.component._group.getRowCount(),e.component._group.getData(),e.component),n.colSpan=s.width,n.innerHTML=s.value,i.classList.add("tabulator-print-table-group"),i.classList.add("tabulator-group-level-"+e.indent),s.component.isVisible()&&i.classList.add("tabulator-group-visible"),this.mapElementStyles(o.firstGroup,i,["border-top","border-left","border-right","border-bottom","color","font-weight","font-family","font-size","background-color"]),this.mapElementStyles(o.firstGroup,n,["padding-top","padding-left","padding-right","padding-bottom"]),i.appendChild(n),i},L.prototype.genereateCalcElement=function(e,t,o){var i=this.genereateRowElement(e,t,o);return i.classList.add("tabulator-print-table-calcs"),this.mapElementStyles(o.calcRow,i,["border-top","border-left","border-right","border-bottom","color","font-weight","font-family","font-size","background-color"]),i},L.prototype.genereateRowElement=function(e,t,o){var n=this,s=document.createElement("tr");return s.classList.add("tabulator-print-table-row"),e.columns.forEach(function(a){if(a){var r=document.createElement("td"),l=a.component._column,c=a.value,u={modules:{},getValue:function(){return c},getField:function(){return l.definition.field},getElement:function(){return r},getColumn:function(){return l.getComponent()},getData:function(){return e.component.getData()},getRow:function(){return e.component},getComponent:function(){return u},column:l};if((l.definition.cssClass?l.definition.cssClass.split(" "):[]).forEach(function(e){r.classList.add(e)}),n.table.modExists("format")&&!1!==n.config.formatCells)c=n.table.modules.format.formatExportValue(u,n.colVisProp);else switch(void 0===c?"undefined":_typeof(c)){case"object":c=JSON.stringify(c);break;case"undefined":case"null":c="";break;default:c=c}c instanceof Node?r.appendChild(c):r.innerHTML=c,o.firstCell&&(n.mapElementStyles(o.firstCell,r,["padding-top","padding-left","padding-right","padding-bottom","border-top","border-left","border-right","border-bottom","color","font-weight","font-family","font-size"]),l.definition.align&&(r.style.textAlign=l.definition.align)),n.table.options.dataTree&&!1!==n.config.dataTree&&(t.treeElementField&&t.treeElementField==l.field||!t.treeElementField&&0==i)&&(e.component._row.modules.dataTree.controlEl&&r.insertBefore(e.component._row.modules.dataTree.controlEl.cloneNode(!0),r.firstChild),e.component._row.modules.dataTree.branchEl&&r.insertBefore(e.component._row.modules.dataTree.branchEl.cloneNode(!0),r.firstChild)),s.appendChild(r),u.modules.format&&u.modules.format.renderedCallback&&u.modules.format.renderedCallback(),t.rowFormatter&&!1!==n.config.formatCells&&t.rowFormatter(e.component)}}),s},L.prototype.genereateHTMLTable=function(e){var t=document.createElement("div");return t.appendChild(this.genereateTableElement(e)),t.innerHTML},L.prototype.getHtml=function(e,t,o,i){var n=this.generateExportList(o||this.table.options.htmlOutputConfig,t,e,i||"htmlOutput");return this.genereateHTMLTable(n)},L.prototype.mapElementStyles=function(e,t,o){if(this.cloneTableStyle&&e&&t){var i={"background-color":"backgroundColor",color:"fontColor",width:"width","font-weight":"fontWeight","font-family":"fontFamily","font-size":"fontSize","text-align":"textAlign","border-top":"borderTop","border-left":"borderLeft","border-right":"borderRight","border-bottom":"borderBottom","padding-top":"paddingTop","padding-left":"paddingLeft","padding-right":"paddingRight","padding-bottom":"paddingBottom"};if(window.getComputedStyle){var n=window.getComputedStyle(e);o.forEach(function(e){t.style[i[e]]=n.getPropertyValue(e)})}}},h.prototype.registerModule("export",L);var T=function(e){this.table=e,this.filterList=[],this.headerFilters={},this.headerFilterColumns=[],this.prevHeaderFilterChangeCheck="",this.prevHeaderFilterChangeCheck="{}",this.changed=!1};T.prototype.initializeColumn=function(e,t){function o(t){var o,a="input"==e.modules.filter.tagType&&"text"==e.modules.filter.attrType||"textarea"==e.modules.filter.tagType?"partial":"match",r="",l="";if(void 0===e.modules.filter.prevSuccess||e.modules.filter.prevSuccess!==t){if(e.modules.filter.prevSuccess=t,e.modules.filter.emptyFunc(t))delete n.headerFilters[s];else{switch(e.modules.filter.value=t,_typeof(e.definition.headerFilterFunc)){case"string":n.filters[e.definition.headerFilterFunc]?(r=e.definition.headerFilterFunc,o=function(o){var i=e.definition.headerFilterFuncParams||{},s=e.getFieldValue(o);return i="function"==typeof i?i(t,s,o):i,n.filters[e.definition.headerFilterFunc](t,s,o,i)}):console.warn("Header Filter Error - Matching filter function not found: ",e.definition.headerFilterFunc);break;case"function":o=function(o){var i=e.definition.headerFilterFuncParams||{},n=e.getFieldValue(o);return i="function"==typeof i?i(t,n,o):i,e.definition.headerFilterFunc(t,n,o,i)},r=o}if(!o)switch(a){case"partial":o=function(o){var i=e.getFieldValue(o);return void 0!==i&&null!==i&&String(i).toLowerCase().indexOf(String(t).toLowerCase())>-1},r="like";break;default:o=function(o){return e.getFieldValue(o)==t},r="="}n.headerFilters[s]={value:t,func:o,type:r,params:i||{}}}l=JSON.stringify(n.headerFilters),n.prevHeaderFilterChangeCheck!==l&&(n.prevHeaderFilterChangeCheck=l,n.changed=!0,n.table.rowManager.filterRefresh())}return!0}var i,n=this,s=e.getField();e.modules.filter={success:o,attrType:!1,tagType:!1,emptyFunc:!1},this.generateHeaderFilterElement(e)},T.prototype.generateHeaderFilterElement=function(e,t,o){function i(){}var n,s,a,r,l,c,u,d=this,h=this,p=e.modules.filter.success,m=e.getField();if(e.modules.filter.headerElement&&e.modules.filter.headerElement.parentNode&&e.contentElement.removeChild(e.modules.filter.headerElement.parentNode),m){switch(e.modules.filter.emptyFunc=e.definition.headerFilterEmptyCheck||function(e){return!e&&"0"!==e},n=document.createElement("div"),n.classList.add("tabulator-header-filter"),_typeof(e.definition.headerFilter)){case"string":h.table.modules.edit.editors[e.definition.headerFilter]?(s=h.table.modules.edit.editors[e.definition.headerFilter],"tick"!==e.definition.headerFilter&&"tickCross"!==e.definition.headerFilter||e.definition.headerFilterEmptyCheck||(e.modules.filter.emptyFunc=function(e){return!0!==e&&!1!==e})):console.warn("Filter Error - Cannot build header filter, No such editor found: ",e.definition.editor);break;case"function":s=e.definition.headerFilter;break;case"boolean":e.modules.edit&&e.modules.edit.editor?s=e.modules.edit.editor:e.definition.formatter&&h.table.modules.edit.editors[e.definition.formatter]?(s=h.table.modules.edit.editors[e.definition.formatter],"tick"!==e.definition.formatter&&"tickCross"!==e.definition.formatter||e.definition.headerFilterEmptyCheck||(e.modules.filter.emptyFunc=function(e){return!0!==e&&!1!==e})):s=h.table.modules.edit.editors.input}if(s){if(r={getValue:function(){return void 0!==t?t:""},getField:function(){return e.definition.field},getElement:function(){return n},getColumn:function(){return e.getComponent()},getRow:function(){return{normalizeHeight:function(){}}}},u=e.definition.headerFilterParams||{},u="function"==typeof u?u.call(h.table):u,!(a=s.call(this.table.modules.edit,r,function(){},p,i,u)))return void console.warn("Filter Error - Cannot add filter to "+m+" column, editor returned a value of false");if(!(a instanceof Node))return void console.warn("Filter Error - Cannot add filter to "+m+" column, editor should return an instance of Node, the editor returned:",a);m?h.table.modules.localize.bind("headerFilters|columns|"+e.definition.field,function(e){a.setAttribute("placeholder",void 0!==e&&e?e:h.table.modules.localize.getText("headerFilters|default"))}):h.table.modules.localize.bind("headerFilters|default",function(e){a.setAttribute("placeholder",void 0!==h.column.definition.headerFilterPlaceholder&&h.column.definition.headerFilterPlaceholder?h.column.definition.headerFilterPlaceholder:e)}),a.addEventListener("click",function(e){e.stopPropagation(),a.focus()}),
+a.addEventListener("focus",function(e){var t=d.table.columnManager.element.scrollLeft;t!==d.table.rowManager.element.scrollLeft&&(d.table.rowManager.scrollHorizontal(t),d.table.columnManager.scrollHorizontal(t))}),l=!1,c=function(e){l&&clearTimeout(l),l=setTimeout(function(){p(a.value)},h.table.options.headerFilterLiveFilterDelay)},e.modules.filter.headerElement=a,e.modules.filter.attrType=a.hasAttribute("type")?a.getAttribute("type").toLowerCase():"",e.modules.filter.tagType=a.tagName.toLowerCase(),!1!==e.definition.headerFilterLiveFilter&&("autocomplete"!==e.definition.headerFilter&&"tickCross"!==e.definition.headerFilter&&("autocomplete"!==e.definition.editor&&"tickCross"!==e.definition.editor||!0!==e.definition.headerFilter)&&(a.addEventListener("keyup",c),a.addEventListener("search",c),"number"==e.modules.filter.attrType&&a.addEventListener("change",function(e){p(a.value)}),"text"==e.modules.filter.attrType&&"ie"!==this.table.browser&&a.setAttribute("type","search")),"input"!=e.modules.filter.tagType&&"select"!=e.modules.filter.tagType&&"textarea"!=e.modules.filter.tagType||a.addEventListener("mousedown",function(e){e.stopPropagation()})),n.appendChild(a),e.contentElement.appendChild(n),o||h.headerFilterColumns.push(e)}}else console.warn("Filter Error - Cannot add header filter, column has no field set:",e.definition.title)},T.prototype.hideHeaderFilterElements=function(){this.headerFilterColumns.forEach(function(e){e.modules.filter&&e.modules.filter.headerElement&&(e.modules.filter.headerElement.style.display="none")})},T.prototype.showHeaderFilterElements=function(){this.headerFilterColumns.forEach(function(e){e.modules.filter&&e.modules.filter.headerElement&&(e.modules.filter.headerElement.style.display="")})},T.prototype.setHeaderFilterFocus=function(e){e.modules.filter&&e.modules.filter.headerElement?e.modules.filter.headerElement.focus():console.warn("Column Filter Focus Error - No header filter set on column:",e.getField())},T.prototype.getHeaderFilterValue=function(e){if(e.modules.filter&&e.modules.filter.headerElement)return e.modules.filter.headerElement.value;console.warn("Column Filter Error - No header filter set on column:",e.getField())},T.prototype.setHeaderFilterValue=function(e,t){e&&(e.modules.filter&&e.modules.filter.headerElement?(this.generateHeaderFilterElement(e,t,!0),e.modules.filter.success(t)):console.warn("Column Filter Error - No header filter set on column:",e.getField()))},T.prototype.reloadHeaderFilter=function(e){e&&(e.modules.filter&&e.modules.filter.headerElement?this.generateHeaderFilterElement(e,e.modules.filter.value,!0):console.warn("Column Filter Error - No header filter set on column:",e.getField()))},T.prototype.hasChanged=function(){var e=this.changed;return this.changed=!1,e},T.prototype.setFilter=function(e,t,o,i){var n=this;n.filterList=[],Array.isArray(e)||(e=[{field:e,type:t,value:o,params:i}]),n.addFilter(e)},T.prototype.addFilter=function(e,t,o,i){var n=this;Array.isArray(e)||(e=[{field:e,type:t,value:o,params:i}]),e.forEach(function(e){(e=n.findFilter(e))&&(n.filterList.push(e),n.changed=!0)}),this.table.options.persistence&&this.table.modExists("persistence",!0)&&this.table.modules.persistence.config.filter&&this.table.modules.persistence.save("filter")},T.prototype.findFilter=function(e){var t,o=this;if(Array.isArray(e))return this.findSubFilters(e);var i=!1;return"function"==typeof e.field?i=function(t){return e.field(t,e.type||{})}:o.filters[e.type]?(t=o.table.columnManager.getColumnByField(e.field),i=t?function(i){return o.filters[e.type](e.value,t.getFieldValue(i),i,e.params||{})}:function(t){return o.filters[e.type](e.value,t[e.field],t,e.params||{})}):console.warn("Filter Error - No such filter type found, ignoring: ",e.type),e.func=i,!!e.func&&e},T.prototype.findSubFilters=function(e){var t=this,o=[];return e.forEach(function(e){(e=t.findFilter(e))&&o.push(e)}),!!o.length&&o},T.prototype.getFilters=function(e,t){var o=[];return e&&(o=this.getHeaderFilters()),t&&o.forEach(function(e){"function"==typeof e.type&&(e.type="function")}),o=o.concat(this.filtersToArray(this.filterList,t))},T.prototype.filtersToArray=function(e,t){var o=this,i=[];return e.forEach(function(e){var n;Array.isArray(e)?i.push(o.filtersToArray(e,t)):(n={field:e.field,type:e.type,value:e.value},t&&"function"==typeof n.type&&(n.type="function"),i.push(n))}),i},T.prototype.getHeaderFilters=function(){var e=[];for(var t in this.headerFilters)e.push({field:t,type:this.headerFilters[t].type,value:this.headerFilters[t].value});return e},T.prototype.removeFilter=function(e,t,o){var i=this;Array.isArray(e)||(e=[{field:e,type:t,value:o}]),e.forEach(function(e){var t=-1;t="object"==_typeof(e.field)?i.filterList.findIndex(function(t){return e===t}):i.filterList.findIndex(function(t){return e.field===t.field&&e.type===t.type&&e.value===t.value}),t>-1?(i.filterList.splice(t,1),i.changed=!0):console.warn("Filter Error - No matching filter type found, ignoring: ",e.type)}),this.table.options.persistence&&this.table.modExists("persistence",!0)&&this.table.modules.persistence.config.filter&&this.table.modules.persistence.save("filter")},T.prototype.clearFilter=function(e){this.filterList=[],e&&this.clearHeaderFilter(),this.changed=!0,this.table.options.persistence&&this.table.modExists("persistence",!0)&&this.table.modules.persistence.config.filter&&this.table.modules.persistence.save("filter")},T.prototype.clearHeaderFilter=function(){var e=this;this.headerFilters={},e.prevHeaderFilterChangeCheck="{}",this.headerFilterColumns.forEach(function(t){t.modules.filter.value=null,t.modules.filter.prevSuccess=void 0,e.reloadHeaderFilter(t)}),this.changed=!0},T.prototype.search=function(e,t,o,i){var n=this,s=[],a=[];return Array.isArray(t)||(t=[{field:t,type:o,value:i}]),t.forEach(function(e){(e=n.findFilter(e))&&a.push(e)}),this.table.rowManager.rows.forEach(function(t){var o=!0;a.forEach(function(e){n.filterRecurse(e,t.getData())||(o=!1)}),o&&s.push("data"===e?t.getData("data"):t.getComponent())}),s},T.prototype.filter=function(e,t){var o=this,i=[],n=[];return o.table.options.dataFiltering&&o.table.options.dataFiltering.call(o.table,o.getFilters()),o.table.options.ajaxFiltering||!o.filterList.length&&!Object.keys(o.headerFilters).length?i=e.slice(0):e.forEach(function(e){o.filterRow(e)&&i.push(e)}),o.table.options.dataFiltered&&(i.forEach(function(e){n.push(e.getComponent())}),o.table.options.dataFiltered.call(o.table,o.getFilters(),n)),i},T.prototype.filterRow=function(e,t){var o=this,i=!0,n=e.getData();o.filterList.forEach(function(e){o.filterRecurse(e,n)||(i=!1)});for(var s in o.headerFilters)o.headerFilters[s].func(n)||(i=!1);return i},T.prototype.filterRecurse=function(e,t){var o=this,i=!1;return Array.isArray(e)?e.forEach(function(e){o.filterRecurse(e,t)&&(i=!0)}):i=e.func(t),i},T.prototype.filters={"=":function(e,t,o,i){return t==e},"<":function(e,t,o,i){return t<e},"<=":function(e,t,o,i){return t<=e},">":function(e,t,o,i){return t>e},">=":function(e,t,o,i){return t>=e},"!=":function(e,t,o,i){return t!=e},regex:function(e,t,o,i){return"string"==typeof e&&(e=new RegExp(e)),e.test(t)},like:function(e,t,o,i){return null===e||void 0===e?t===e:void 0!==t&&null!==t&&String(t).toLowerCase().indexOf(e.toLowerCase())>-1},keywords:function(e,t,o,i){var n=e.toLowerCase().split(void 0===i.separator?" ":i.separator),s=String(null===t||void 0===t?"":t).toLowerCase(),a=[];return n.forEach(function(e){s.includes(e)&&a.push(!0)}),i.matchAll?a.length===n.length:!!a.length},starts:function(e,t,o,i){return null===e||void 0===e?t===e:void 0!==t&&null!==t&&String(t).toLowerCase().startsWith(e.toLowerCase())},ends:function(e,t,o,i){return null===e||void 0===e?t===e:void 0!==t&&null!==t&&String(t).toLowerCase().endsWith(e.toLowerCase())},in:function(e,t,o,i){return Array.isArray(e)?!e.length||e.indexOf(t)>-1:(console.warn("Filter Error - filter value is not an array:",e),!1)}},h.prototype.registerModule("filter",T);var D=function(e){this.table=e};D.prototype.initializeColumn=function(e){e.modules.format=this.lookupFormatter(e,""),void 0!==e.definition.formatterPrint&&(e.modules.format.print=this.lookupFormatter(e,"Print")),void 0!==e.definition.formatterClipboard&&(e.modules.format.clipboard=this.lookupFormatter(e,"Clipboard")),void 0!==e.definition.formatterHtmlOutput&&(e.modules.format.htmlOutput=this.lookupFormatter(e,"HtmlOutput"))},D.prototype.lookupFormatter=function(e,t){var o={params:e.definition["formatter"+t+"Params"]||{}},i=e.definition["formatter"+t];switch(void 0===i?"undefined":_typeof(i)){case"string":"tick"===i&&(i="tickCross",void 0===o.params.crossElement&&(o.params.crossElement=!1),console.warn("DEPRECATION WARNING - the tick formatter has been deprecated, please use the tickCross formatter with the crossElement param set to false")),this.formatters[i]?o.formatter=this.formatters[i]:(console.warn("Formatter Error - No such formatter found: ",i),o.formatter=this.formatters.plaintext);break;case"function":o.formatter=i;break;default:o.formatter=this.formatters.plaintext}return o},D.prototype.cellRendered=function(e){e.modules.format&&e.modules.format.renderedCallback&&!e.modules.format.rendered&&(e.modules.format.renderedCallback(),e.modules.format.rendered=!0)},D.prototype.formatValue=function(e){function t(t){e.modules.format||(e.modules.format={}),e.modules.format.renderedCallback=t,e.modules.format.rendered=!1}var o=e.getComponent(),i="function"==typeof e.column.modules.format.params?e.column.modules.format.params(o):e.column.modules.format.params;return e.column.modules.format.formatter.call(this,o,i,t)},D.prototype.formatExportValue=function(e,t){var o,i=e.column.modules.format[t];if(i){var n=function(t){e.modules.format||(e.modules.format={}),e.modules.format.renderedCallback=t,e.modules.format.rendered=!1};return o="function"==typeof i.params?i.params(component):i.params,i.formatter.call(this,e.getComponent(),o,n)}return this.formatValue(e)},D.prototype.sanitizeHTML=function(e){if(e){var t={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;","/":"&#x2F;","`":"&#x60;","=":"&#x3D;"};return String(e).replace(/[&<>"'`=\/]/g,function(e){return t[e]})}return e},D.prototype.emptyToSpace=function(e){return null===e||void 0===e||""===e?"&nbsp;":e},D.prototype.getFormatter=function(e){var e;switch(void 0===e?"undefined":_typeof(e)){case"string":this.formatters[e]?e=this.formatters[e]:(console.warn("Formatter Error - No such formatter found: ",e),e=this.formatters.plaintext);break;case"function":e=e;break;default:e=this.formatters.plaintext}return e},D.prototype.formatters={plaintext:function(e,t,o){return this.emptyToSpace(this.sanitizeHTML(e.getValue()))},html:function(e,t,o){return e.getValue()},textarea:function(e,t,o){return e.getElement().style.whiteSpace="pre-wrap",this.emptyToSpace(this.sanitizeHTML(e.getValue()))},money:function(e,t,o){var i,n,s,a,r=parseFloat(e.getValue()),l=t.decimal||".",c=t.thousand||",",u=t.symbol||"",d=!!t.symbolAfter,h=void 0!==t.precision?t.precision:2;if(isNaN(r))return this.emptyToSpace(this.sanitizeHTML(e.getValue()));for(i=!1!==h?r.toFixed(h):r,i=String(i).split("."),n=i[0],s=i.length>1?l+i[1]:"",a=/(\d+)(\d{3})/;a.test(n);)n=n.replace(a,"$1"+c+"$2");return d?n+s+u:u+n+s},link:function(e,t,o){var i,n=e.getValue(),s=t.urlPrefix||"",a=t.download,r=n,l=document.createElement("a");if(t.labelField&&(i=e.getData(),r=i[t.labelField]),t.label)switch(_typeof(t.label)){case"string":r=t.label;break;case"function":r=t.label(e)}if(r){if(t.urlField&&(i=e.getData(),n=i[t.urlField]),t.url)switch(_typeof(t.url)){case"string":n=t.url;break;case"function":n=t.url(e)}return l.setAttribute("href",s+n),t.target&&l.setAttribute("target",t.target),t.download&&(a="function"==typeof a?a(e):!0===a?"":a,l.setAttribute("download",a)),l.innerHTML=this.emptyToSpace(this.sanitizeHTML(r)),l}return"&nbsp;"},image:function(e,t,o){var i=document.createElement("img");switch(i.setAttribute("src",e.getValue()),_typeof(t.height)){case"number":i.style.height=t.height+"px";break;case"string":i.style.height=t.height}switch(_typeof(t.width)){case"number":i.style.width=t.width+"px";break;case"string":i.style.width=t.width}return i.addEventListener("load",function(){e.getRow().normalizeHeight()}),i},tickCross:function(e,t,o){var i=e.getValue(),n=e.getElement(),s=t.allowEmpty,a=t.allowTruthy,r=void 0!==t.tickElement?t.tickElement:'<svg enable-background="new 0 0 24 24" height="14" width="14" viewBox="0 0 24 24" xml:space="preserve" ><path fill="#2DC214" clip-rule="evenodd" d="M21.652,3.211c-0.293-0.295-0.77-0.295-1.061,0L9.41,14.34  c-0.293,0.297-0.771,0.297-1.062,0L3.449,9.351C3.304,9.203,3.114,9.13,2.923,9.129C2.73,9.128,2.534,9.201,2.387,9.351  l-2.165,1.946C0.078,11.445,0,11.63,0,11.823c0,0.194,0.078,0.397,0.223,0.544l4.94,5.184c0.292,0.296,0.771,0.776,1.062,1.07  l2.124,2.141c0.292,0.293,0.769,0.293,1.062,0l14.366-14.34c0.293-0.294,0.293-0.777,0-1.071L21.652,3.211z" fill-rule="evenodd"/></svg>',l=void 0!==t.crossElement?t.crossElement:'<svg enable-background="new 0 0 24 24" height="14" width="14"  viewBox="0 0 24 24" xml:space="preserve" ><path fill="#CE1515" d="M22.245,4.015c0.313,0.313,0.313,0.826,0,1.139l-6.276,6.27c-0.313,0.312-0.313,0.826,0,1.14l6.273,6.272  c0.313,0.313,0.313,0.826,0,1.14l-2.285,2.277c-0.314,0.312-0.828,0.312-1.142,0l-6.271-6.271c-0.313-0.313-0.828-0.313-1.141,0  l-6.276,6.267c-0.313,0.313-0.828,0.313-1.141,0l-2.282-2.28c-0.313-0.313-0.313-0.826,0-1.14l6.278-6.269  c0.313-0.312,0.313-0.826,0-1.14L1.709,5.147c-0.314-0.313-0.314-0.827,0-1.14l2.284-2.278C4.308,1.417,4.821,1.417,5.135,1.73  L11.405,8c0.314,0.314,0.828,0.314,1.141,0.001l6.276-6.267c0.312-0.312,0.826-0.312,1.141,0L22.245,4.015z"/></svg>';return a&&i||!0===i||"true"===i||"True"===i||1===i||"1"===i?(n.setAttribute("aria-checked",!0),r||""):!s||"null"!==i&&""!==i&&null!==i&&void 0!==i?(n.setAttribute("aria-checked",!1),l||""):(n.setAttribute("aria-checked","mixed"),"")},datetime:function(e,t,o){var i=t.inputFormat||"YYYY-MM-DD hh:mm:ss",n=t.outputFormat||"DD/MM/YYYY hh:mm:ss",s=void 0!==t.invalidPlaceholder?t.invalidPlaceholder:"",a=e.getValue(),r=moment(a,i);return r.isValid()?t.timezone?r.tz(t.timezone).format(n):r.format(n):!0===s?a:"function"==typeof s?s(a):s},datetimediff:function(e,t,o){var i=t.inputFormat||"YYYY-MM-DD hh:mm:ss",n=void 0!==t.invalidPlaceholder?t.invalidPlaceholder:"",s=void 0!==t.suffix&&t.suffix,a=void 0!==t.unit?t.unit:void 0,r=void 0!==t.humanize&&t.humanize,l=void 0!==t.date?t.date:moment(),c=e.getValue(),u=moment(c,i);return u.isValid()?r?moment.duration(u.diff(l)).humanize(s):u.diff(l,a)+(s?" "+s:""):!0===n?c:"function"==typeof n?n(c):n},lookup:function(e,t,o){var i=e.getValue();return void 0===t[i]?(console.warn("Missing display value for "+i),i):t[i]},star:function(e,t,o){var i=e.getValue(),n=e.getElement(),s=t&&t.stars?t.stars:5,a=document.createElement("span"),r=document.createElementNS("http://www.w3.org/2000/svg","svg");a.style.verticalAlign="middle",r.setAttribute("width","14"),r.setAttribute("height","14"),r.setAttribute("viewBox","0 0 512 512"),r.setAttribute("xml:space","preserve"),r.style.padding="0 1px",i=i&&!isNaN(i)?parseInt(i):0,i=Math.max(0,Math.min(i,s));for(var l=1;l<=s;l++){var c=r.cloneNode(!0);c.innerHTML=l<=i?'<polygon fill="#FFEA00" stroke="#C1AB60" stroke-width="37.6152" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" points="259.216,29.942 330.27,173.919 489.16,197.007 374.185,309.08 401.33,467.31 259.216,392.612 117.104,467.31 144.25,309.08 29.274,197.007 188.165,173.919 "/>':'<polygon fill="#D2D2D2" stroke="#686868" stroke-width="37.6152" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" points="259.216,29.942 330.27,173.919 489.16,197.007 374.185,309.08 401.33,467.31 259.216,392.612 117.104,467.31 144.25,309.08 29.274,197.007 188.165,173.919 "/>',a.appendChild(c)}return n.style.whiteSpace="nowrap",n.style.overflow="hidden",n.style.textOverflow="ellipsis",n.setAttribute("aria-label",i),a},traffic:function(e,t,o){var i,n,s=this.sanitizeHTML(e.getValue())||0,a=document.createElement("span"),r=t&&t.max?t.max:100,l=t&&t.min?t.min:0,c=t&&void 0!==t.color?t.color:["red","orange","green"],u="#666666";if(!isNaN(s)&&void 0!==e.getValue()){switch(a.classList.add("tabulator-traffic-light"),n=parseFloat(s)<=r?parseFloat(s):r,n=parseFloat(n)>=l?parseFloat(n):l,i=(r-l)/100,n=Math.round((n-l)/i),void 0===c?"undefined":_typeof(c)){case"string":u=c;break;case"function":u=c(s);break;case"object":if(Array.isArray(c)){var d=100/c.length,h=Math.floor(n/d);h=Math.min(h,c.length-1),h=Math.max(h,0),u=c[h];break}}return a.style.backgroundColor=u,a}},progress:function(e,t,o){var i,n,s,a,r,l=this.sanitizeHTML(e.getValue())||0,u=e.getElement(),d=t&&t.max?t.max:100,h=t&&t.min?t.min:0,p=t&&t.legendAlign?t.legendAlign:"center";switch(n=parseFloat(l)<=d?parseFloat(l):d,n=parseFloat(n)>=h?parseFloat(n):h,i=(d-h)/100,n=Math.round((n-h)/i),_typeof(t.color)){case"string":s=t.color;break;case"function":s=t.color(l);break;case"object":if(Array.isArray(t.color)){var m=100/t.color.length,f=Math.floor(n/m);f=Math.min(f,t.color.length-1),f=Math.max(f,0),s=t.color[f];break}default:s="#2DC214"}switch(_typeof(t.legend)){case"string":a=t.legend;break;case"function":a=t.legend(l);break;case"boolean":a=l;break;default:a=!1}switch(_typeof(t.legendColor)){case"string":r=t.legendColor;break;case"function":r=t.legendColor(l);break;case"object":if(Array.isArray(t.legendColor)){var m=100/t.legendColor.length,f=Math.floor(n/m);f=Math.min(f,t.legendColor.length-1),f=Math.max(f,0),r=t.legendColor[f]}break;default:r="#000"}u.style.minWidth="30px",u.style.position="relative",u.setAttribute("aria-label",n);var g=document.createElement("div");if(g.style.display="inline-block",g.style.position="relative",g.style.width=n+"%",g.style.backgroundColor=s,g.style.height="100%",g.setAttribute("data-max",d),g.setAttribute("data-min",h),a){var b=document.createElement("div");b.style.position="absolute",b.style.top="4px",b.style.left=0,b.style.textAlign=p,b.style.width="100%",b.style.color=r,b.innerHTML=a}return o(function(){if(!(e instanceof c)){var t=document.createElement("div");t.style.position="absolute",t.style.top="4px",t.style.bottom="4px",t.style.left="4px",t.style.right="4px",u.appendChild(t),u=t}u.appendChild(g),a&&u.appendChild(b)}),""},color:function(e,t,o){return e.getElement().style.backgroundColor=this.sanitizeHTML(e.getValue()),""},buttonTick:function(e,t,o){return'<svg enable-background="new 0 0 24 24" height="14" width="14" viewBox="0 0 24 24" xml:space="preserve" ><path fill="#2DC214" clip-rule="evenodd" d="M21.652,3.211c-0.293-0.295-0.77-0.295-1.061,0L9.41,14.34  c-0.293,0.297-0.771,0.297-1.062,0L3.449,9.351C3.304,9.203,3.114,9.13,2.923,9.129C2.73,9.128,2.534,9.201,2.387,9.351  l-2.165,1.946C0.078,11.445,0,11.63,0,11.823c0,0.194,0.078,0.397,0.223,0.544l4.94,5.184c0.292,0.296,0.771,0.776,1.062,1.07  l2.124,2.141c0.292,0.293,0.769,0.293,1.062,0l14.366-14.34c0.293-0.294,0.293-0.777,0-1.071L21.652,3.211z" fill-rule="evenodd"/></svg>'},buttonCross:function(e,t,o){return'<svg enable-background="new 0 0 24 24" height="14" width="14" viewBox="0 0 24 24" xml:space="preserve" ><path fill="#CE1515" d="M22.245,4.015c0.313,0.313,0.313,0.826,0,1.139l-6.276,6.27c-0.313,0.312-0.313,0.826,0,1.14l6.273,6.272  c0.313,0.313,0.313,0.826,0,1.14l-2.285,2.277c-0.314,0.312-0.828,0.312-1.142,0l-6.271-6.271c-0.313-0.313-0.828-0.313-1.141,0  l-6.276,6.267c-0.313,0.313-0.828,0.313-1.141,0l-2.282-2.28c-0.313-0.313-0.313-0.826,0-1.14l6.278-6.269  c0.313-0.312,0.313-0.826,0-1.14L1.709,5.147c-0.314-0.313-0.314-0.827,0-1.14l2.284-2.278C4.308,1.417,4.821,1.417,5.135,1.73  L11.405,8c0.314,0.314,0.828,0.314,1.141,0.001l6.276-6.267c0.312-0.312,0.826-0.312,1.141,0L22.245,4.015z"/></svg>'},rownum:function(e,t,o){return this.table.rowManager.activeRows.indexOf(e.getRow()._getSelf())+1},handle:function(e,t,o){return e.getElement().classList.add("tabulator-row-handle"),"<div class='tabulator-row-handle-box'><div class='tabulator-row-handle-bar'></div><div class='tabulator-row-handle-bar'></div><div class='tabulator-row-handle-bar'></div></div>"},responsiveCollapse:function(e,t,o){function i(e){var t=s.element;s.open=e,t&&(s.open?(n.classList.add("open"),t.style.display=""):(n.classList.remove("open"),t.style.display="none"))}var n=document.createElement("div"),s=e.getRow()._row.modules.responsiveLayout;return n.classList.add("tabulator-responsive-collapse-toggle"),n.innerHTML="<span class='tabulator-responsive-collapse-toggle-open'>+</span><span class='tabulator-responsive-collapse-toggle-close'>-</span>",e.getElement().classList.add("tabulator-row-handle"),n.addEventListener("click",function(e){e.stopImmediatePropagation(),i(!s.open)}),i(s.open),n},rowSelection:function(e,t,o){var i=this,n=document.createElement("input");if(n.type="checkbox",this.table.modExists("selectRow",!0))if(n.addEventListener("click",function(e){e.stopPropagation()}),"function"==typeof e.getRow){var s=e.getRow();s instanceof r?(n.addEventListener("change",function(e){s.toggleSelect()}),n.checked=s.isSelected&&s.isSelected(),this.table.modules.selectRow.registerRowSelectCheckbox(s,n)):n=""}else n.addEventListener("change",function(e){i.table.modules.selectRow.selectedRows.length?i.table.deselectRow():i.table.selectRow(t.rowRange)}),this.table.modules.selectRow.registerHeaderSelectCheckbox(n);return n}},h.prototype.registerModule("format",D);var k=function(e){this.table=e,this.leftColumns=[],this.rightColumns=[],this.leftMargin=0,this.rightMargin=0,this.rightPadding=0,this.initializationMode="left",this.active=!1,this.scrollEndTimer=!1};k.prototype.reset=function(){this.initializationMode="left",this.leftColumns=[],this.rightColumns=[],this.leftMargin=0,this.rightMargin=0,this.rightMargin=0,this.active=!1,this.table.columnManager.headersElement.style.marginLeft=0,this.table.columnManager.element.style.paddingRight=0},k.prototype.initializeColumn=function(e){var t={margin:0,edge:!1};e.isGroup||(this.frozenCheck(e)?(t.position=this.initializationMode,"left"==this.initializationMode?this.leftColumns.push(e):this.rightColumns.unshift(e),this.active=!0,e.modules.frozen=t):this.initializationMode="right")},k.prototype.frozenCheck=function(e){return e.parent.isGroup&&e.definition.frozen&&console.warn("Frozen Column Error - Parent column group must be frozen, not individual columns or sub column groups"),e.parent.isGroup?this.frozenCheck(e.parent):e.definition.frozen},k.prototype.scrollHorizontal=function(){var e,t=this;this.active&&(clearTimeout(this.scrollEndTimer),this.scrollEndTimer=setTimeout(function(){t.layout()},100),e=this.table.rowManager.getVisibleRows(),this.calcMargins(),this.layoutColumnPosition(),this.layoutCalcRows(),e.forEach(function(e){"row"===e.type&&t.layoutRow(e)}),this.table.rowManager.tableElement.style.marginRight=this.rightMargin)},k.prototype.calcMargins=function(){this.leftMargin=this._calcSpace(this.leftColumns,this.leftColumns.length)+"px",this.table.columnManager.headersElement.style.marginLeft=this.leftMargin,this.rightMargin=this._calcSpace(this.rightColumns,this.rightColumns.length)+"px",this.table.columnManager.element.style.paddingRight=this.rightMargin,this.rightPadding=this.table.rowManager.element.clientWidth+this.table.columnManager.scrollLeft},k.prototype.layoutCalcRows=function(){this.table.modExists("columnCalcs")&&(this.table.modules.columnCalcs.topInitialized&&this.table.modules.columnCalcs.topRow&&this.layoutRow(this.table.modules.columnCalcs.topRow),this.table.modules.columnCalcs.botInitialized&&this.table.modules.columnCalcs.botRow&&this.layoutRow(this.table.modules.columnCalcs.botRow))},k.prototype.layoutColumnPosition=function(e){var t=this,o=[];this.leftColumns.forEach(function(i,n){if(i.modules.frozen.margin=t._calcSpace(t.leftColumns,n)+t.table.columnManager.scrollLeft+"px",n==t.leftColumns.length-1?i.modules.frozen.edge=!0:i.modules.frozen.edge=!1,i.parent.isGroup){var s=t.getColGroupParentElement(i);o.includes(s)||(t.layoutElement(s,i),o.push(s)),i.modules.frozen.edge&&s.classList.add("tabulator-frozen-"+i.modules.frozen.position)}else t.layoutElement(i.getElement(),i);e&&i.cells.forEach(function(e){t.layoutElement(e.getElement(),i)})}),this.rightColumns.forEach(function(o,i){o.modules.frozen.margin=t.rightPadding-t._calcSpace(t.rightColumns,i+1)+"px",i==t.rightColumns.length-1?o.modules.frozen.edge=!0:o.modules.frozen.edge=!1,o.parent.isGroup?t.layoutElement(t.getColGroupParentElement(o),o):t.layoutElement(o.getElement(),o),e&&o.cells.forEach(function(e){t.layoutElement(e.getElement(),o)})})},k.prototype.getColGroupParentElement=function(e){return e.parent.isGroup?this.getColGroupParentElement(e.parent):e.getElement()},k.prototype.layout=function(){var e=this;e.active&&(this.calcMargins(),e.table.rowManager.getDisplayRows().forEach(function(t){"row"===t.type&&e.layoutRow(t)}),this.layoutCalcRows(),this.layoutColumnPosition(!0),this.table.rowManager.tableElement.style.marginRight=this.rightMargin)},k.prototype.layoutRow=function(e){var t=this;e.getElement().style.paddingLeft=this.leftMargin,this.leftColumns.forEach(function(o){var i=e.getCell(o);i&&t.layoutElement(i.getElement(),o)}),this.rightColumns.forEach(function(o){var i=e.getCell(o);i&&t.layoutElement(i.getElement(),o)})},k.prototype.layoutElement=function(e,t){t.modules.frozen&&(e.style.position="absolute",e.style.left=t.modules.frozen.margin,e.classList.add("tabulator-frozen"),t.modules.frozen.edge&&e.classList.add("tabulator-frozen-"+t.modules.frozen.position))},k.prototype._calcSpace=function(e,t){for(var o=0,i=0;i<t;i++)e[i].visible&&(o+=e[i].getWidth());return o},h.prototype.registerModule("frozenColumns",k);var z=function(e){this.table=e,this.topElement=document.createElement("div"),this.rows=[],this.displayIndex=0};z.prototype.initialize=function(){this.rows=[],this.topElement.classList.add("tabulator-frozen-rows-holder"),this.table.columnManager.getElement().insertBefore(this.topElement,this.table.columnManager.headersElement.nextSibling)},z.prototype.setDisplayIndex=function(e){this.displayIndex=e},z.prototype.getDisplayIndex=function(){return this.displayIndex},z.prototype.isFrozen=function(){return!!this.rows.length},z.prototype.getRows=function(e){var t=e.slice(0);return this.rows.forEach(function(e){var o=t.indexOf(e);o>-1&&t.splice(o,1)}),t},z.prototype.freezeRow=function(e){e.modules.frozen?console.warn("Freeze Error - Row is already frozen"):(e.modules.frozen=!0,this.topElement.appendChild(e.getElement()),e.initialize(),e.normalizeHeight(),this.table.rowManager.adjustTableSize(),this.rows.push(e),this.table.rowManager.refreshActiveData("display"),this.styleRows())},z.prototype.unfreezeRow=function(e){this.rows.indexOf(e);e.modules.frozen?(e.modules.frozen=!1,this.detachRow(e),this.table.rowManager.adjustTableSize(),this.table.rowManager.refreshActiveData("display"),this.rows.length&&this.styleRows()):console.warn("Freeze Error - Row is already unfrozen")},z.prototype.detachRow=function(e){var t=this.rows.indexOf(e);if(t>-1){var o=e.getElement();o.parentNode.removeChild(o),this.rows.splice(t,1)}},z.prototype.styleRows=function(e){var t=this;this.rows.forEach(function(e,o){t.table.rowManager.styleRow(e,o)})},h.prototype.registerModule("frozenRows",z);var S=function(e){this._group=e,this.type="GroupComponent"};S.prototype.getKey=function(){return this._group.key},S.prototype.getField=function(){return this._group.field},S.prototype.getElement=function(){return this._group.element},S.prototype.getRows=function(){return this._group.getRows(!0)},S.prototype.getSubGroups=function(){return this._group.getSubGroups(!0)},S.prototype.getParentGroup=function(){return!!this._group.parent&&this._group.parent.getComponent()},S.prototype.getVisibility=function(){return console.warn("getVisibility function is deprecated, you should now use the isVisible function"),this._group.visible},S.prototype.isVisible=function(){return this._group.visible},S.prototype.show=function(){this._group.show()},S.prototype.hide=function(){this._group.hide()},S.prototype.toggle=function(){this._group.toggleVisibility()},S.prototype._getSelf=function(){return this._group},S.prototype.getTable=function(){return this._group.groupManager.table};var H=function(e,t,o,i,n,s,a){this.groupManager=e,this.parent=t,this.key=i,this.level=o,this.field=n,this.hasSubGroups=o<e.groupIDLookups.length-1,this.addRow=this.hasSubGroups?this._addRowToGroup:this._addRow,this.type="group",this.old=a,this.rows=[],this.groups=[],this.groupList=[],this.generator=s,this.elementContents=!1,this.height=0,this.outerHeight=0,this.initialized=!1,this.calcs={},this.initialized=!1,this.modules={},this.arrowElement=!1,this.visible=a?a.visible:void 0!==e.startOpen[o]?e.startOpen[o]:e.startOpen[0],this.component=null,this.createElements(),this.addBindings(),this.createValueGroups()};H.prototype.wipe=function(){this.groupList.length?this.groupList.forEach(function(e){e.wipe()}):(this.element=!1,this.arrowElement=!1,this.elementContents=!1)},H.prototype.createElements=function(){var e=document.createElement("div");e.classList.add("tabulator-arrow"),this.element=document.createElement("div"),this.element.classList.add("tabulator-row"),this.element.classList.add("tabulator-group"),this.element.classList.add("tabulator-group-level-"+this.level),this.element.setAttribute("role","rowgroup"),this.arrowElement=document.createElement("div"),this.arrowElement.classList.add("tabulator-group-toggle"),this.arrowElement.appendChild(e),!1!==this.groupManager.table.options.movableRows&&this.groupManager.table.modExists("moveRow")&&this.groupManager.table.modules.moveRow.initializeGroupHeader(this)},H.prototype.createValueGroups=function(){var e=this,t=this.level+1;this.groupManager.allowedValues&&this.groupManager.allowedValues[t]&&this.groupManager.allowedValues[t].forEach(function(o){e._createGroup(o,t)})},H.prototype.addBindings=function(){var e,t,o,i,n=this;n.groupManager.table.options.groupClick&&n.element.addEventListener("click",function(e){n.groupManager.table.options.groupClick.call(n.groupManager.table,e,n.getComponent())}),n.groupManager.table.options.groupDblClick&&n.element.addEventListener("dblclick",function(e){n.groupManager.table.options.groupDblClick.call(n.groupManager.table,e,n.getComponent())}),n.groupManager.table.options.groupContext&&n.element.addEventListener("contextmenu",function(e){n.groupManager.table.options.groupContext.call(n.groupManager.table,e,n.getComponent())}),(n.groupManager.table.options.groupContextMenu||n.groupManager.table.options.groupClickMenu)&&n.groupManager.table.modExists("menu")&&n.groupManager.table.modules.menu.initializeGroup.call(n.groupManager.table.modules.menu,n),n.groupManager.table.options.groupTap&&(o=!1,n.element.addEventListener("touchstart",function(e){o=!0},{passive:!0}),n.element.addEventListener("touchend",function(e){o&&n.groupManager.table.options.groupTap(e,n.getComponent()),o=!1})),n.groupManager.table.options.groupDblTap&&(e=null,n.element.addEventListener("touchend",function(t){e?(clearTimeout(e),e=null,n.groupManager.table.options.groupDblTap(t,n.getComponent())):e=setTimeout(function(){clearTimeout(e),e=null},300)})),n.groupManager.table.options.groupTapHold&&(t=null,n.element.addEventListener("touchstart",function(e){clearTimeout(t),t=setTimeout(function(){clearTimeout(t),t=null,o=!1,n.groupManager.table.options.groupTapHold(e,n.getComponent())},1e3)},{passive:!0}),n.element.addEventListener("touchend",function(e){clearTimeout(t),t=null})),n.groupManager.table.options.groupToggleElement&&(i="arrow"==n.groupManager.table.options.groupToggleElement?n.arrowElement:n.element,i.addEventListener("click",function(e){e.stopPropagation(),e.stopImmediatePropagation(),n.toggleVisibility()}))},H.prototype._createGroup=function(e,t){
+var o=t+"_"+e,i=new H(this.groupManager,this,t,e,this.groupManager.groupIDLookups[t].field,this.groupManager.headerGenerator[t]||this.groupManager.headerGenerator[0],!!this.old&&this.old.groups[o]);this.groups[o]=i,this.groupList.push(i)},H.prototype._addRowToGroup=function(e){var t=this.level+1;if(this.hasSubGroups){var o=this.groupManager.groupIDLookups[t].func(e.getData()),i=t+"_"+o;this.groupManager.allowedValues&&this.groupManager.allowedValues[t]?this.groups[i]&&this.groups[i].addRow(e):(this.groups[i]||this._createGroup(o,t),this.groups[i].addRow(e))}},H.prototype._addRow=function(e){this.rows.push(e),e.modules.group=this},H.prototype.insertRow=function(e,t,o){var i=this.conformRowData({});e.updateData(i);var n=this.rows.indexOf(t);n>-1?o?this.rows.splice(n+1,0,e):this.rows.splice(n,0,e):o?this.rows.push(e):this.rows.unshift(e),e.modules.group=this,this.generateGroupHeaderContents(),this.groupManager.table.modExists("columnCalcs")&&"table"!=this.groupManager.table.options.columnCalcs&&this.groupManager.table.modules.columnCalcs.recalcGroup(this),this.groupManager.updateGroupRows(!0)},H.prototype.scrollHeader=function(e){this.arrowElement.style.marginLeft=e,this.groupList.forEach(function(t){t.scrollHeader(e)})},H.prototype.getRowIndex=function(e){},H.prototype.conformRowData=function(e){return this.field?e[this.field]=this.key:console.warn("Data Conforming Error - Cannot conform row data to match new group as groupBy is a function"),this.parent&&(e=this.parent.conformRowData(e)),e},H.prototype.removeRow=function(e){var t=this.rows.indexOf(e),o=e.getElement();t>-1&&this.rows.splice(t,1),this.groupManager.table.options.groupValues||this.rows.length?(o.parentNode&&o.parentNode.removeChild(o),this.generateGroupHeaderContents(),this.groupManager.table.modExists("columnCalcs")&&"table"!=this.groupManager.table.options.columnCalcs&&this.groupManager.table.modules.columnCalcs.recalcGroup(this)):(this.parent?this.parent.removeGroup(this):this.groupManager.removeGroup(this),this.groupManager.updateGroupRows(!0))},H.prototype.removeGroup=function(e){var t,o=e.level+"_"+e.key;this.groups[o]&&(delete this.groups[o],t=this.groupList.indexOf(e),t>-1&&this.groupList.splice(t,1),this.groupList.length||(this.parent?this.parent.removeGroup(this):this.groupManager.removeGroup(this)))},H.prototype.getHeadersAndRows=function(e){var t=[];return t.push(this),this._visSet(),this.visible?this.groupList.length?this.groupList.forEach(function(o){t=t.concat(o.getHeadersAndRows(e))}):(!e&&"table"!=this.groupManager.table.options.columnCalcs&&this.groupManager.table.modExists("columnCalcs")&&this.groupManager.table.modules.columnCalcs.hasTopCalcs()&&(this.calcs.top&&(this.calcs.top.detachElement(),this.calcs.top.deleteCells()),this.calcs.top=this.groupManager.table.modules.columnCalcs.generateTopRow(this.rows),t.push(this.calcs.top)),t=t.concat(this.rows),!e&&"table"!=this.groupManager.table.options.columnCalcs&&this.groupManager.table.modExists("columnCalcs")&&this.groupManager.table.modules.columnCalcs.hasBottomCalcs()&&(this.calcs.bottom&&(this.calcs.bottom.detachElement(),this.calcs.bottom.deleteCells()),this.calcs.bottom=this.groupManager.table.modules.columnCalcs.generateBottomRow(this.rows),t.push(this.calcs.bottom))):this.groupList.length||"table"==this.groupManager.table.options.columnCalcs||this.groupManager.table.modExists("columnCalcs")&&(!e&&this.groupManager.table.modules.columnCalcs.hasTopCalcs()&&(this.calcs.top&&(this.calcs.top.detachElement(),this.calcs.top.deleteCells()),this.groupManager.table.options.groupClosedShowCalcs&&(this.calcs.top=this.groupManager.table.modules.columnCalcs.generateTopRow(this.rows),t.push(this.calcs.top))),!e&&this.groupManager.table.modules.columnCalcs.hasBottomCalcs()&&(this.calcs.bottom&&(this.calcs.bottom.detachElement(),this.calcs.bottom.deleteCells()),this.groupManager.table.options.groupClosedShowCalcs&&(this.calcs.bottom=this.groupManager.table.modules.columnCalcs.generateBottomRow(this.rows),t.push(this.calcs.bottom)))),t},H.prototype.getData=function(e,t){var o=[];return this._visSet(),(!e||e&&this.visible)&&this.rows.forEach(function(e){o.push(e.getData(t||"data"))}),o},H.prototype.getRowCount=function(){var e=0;return this.groupList.length?this.groupList.forEach(function(t){e+=t.getRowCount()}):e=this.rows.length,e},H.prototype.toggleVisibility=function(){this.visible?this.hide():this.show()},H.prototype.hide=function(){this.visible=!1,"classic"!=this.groupManager.table.rowManager.getRenderMode()||this.groupManager.table.options.pagination?this.groupManager.updateGroupRows(!0):(this.element.classList.remove("tabulator-group-visible"),this.groupList.length?this.groupList.forEach(function(e){e.getHeadersAndRows().forEach(function(e){e.detachElement()})}):this.rows.forEach(function(e){var t=e.getElement();t.parentNode.removeChild(t)}),this.groupManager.table.rowManager.setDisplayRows(this.groupManager.updateGroupRows(),this.groupManager.getDisplayIndex()),this.groupManager.table.rowManager.checkClassicModeGroupHeaderWidth()),this.groupManager.table.options.groupVisibilityChanged.call(this.table,this.getComponent(),!1)},H.prototype.show=function(){var e=this;if(e.visible=!0,"classic"!=this.groupManager.table.rowManager.getRenderMode()||this.groupManager.table.options.pagination)this.groupManager.updateGroupRows(!0);else{this.element.classList.add("tabulator-group-visible");var t=e.getElement();this.groupList.length?this.groupList.forEach(function(e){e.getHeadersAndRows().forEach(function(e){var o=e.getElement();t.parentNode.insertBefore(o,t.nextSibling),e.initialize(),t=o})}):e.rows.forEach(function(e){var o=e.getElement();t.parentNode.insertBefore(o,t.nextSibling),e.initialize(),t=o}),this.groupManager.table.rowManager.setDisplayRows(this.groupManager.updateGroupRows(),this.groupManager.getDisplayIndex()),this.groupManager.table.rowManager.checkClassicModeGroupHeaderWidth()}this.groupManager.table.options.groupVisibilityChanged.call(this.table,this.getComponent(),!0)},H.prototype._visSet=function(){var e=[];"function"==typeof this.visible&&(this.rows.forEach(function(t){e.push(t.getData())}),this.visible=this.visible(this.key,this.getRowCount(),e,this.getComponent()))},H.prototype.getRowGroup=function(e){var t=!1;return this.groupList.length?this.groupList.forEach(function(o){var i=o.getRowGroup(e);i&&(t=i)}):this.rows.find(function(t){return t===e})&&(t=this),t},H.prototype.getSubGroups=function(e){var t=[];return this.groupList.forEach(function(o){t.push(e?o.getComponent():o)}),t},H.prototype.getRows=function(e){var t=[];return this.rows.forEach(function(o){t.push(e?o.getComponent():o)}),t},H.prototype.generateGroupHeaderContents=function(){var e=[];for(this.rows.forEach(function(t){e.push(t.getData())}),this.elementContents=this.generator(this.key,this.getRowCount(),e,this.getComponent());this.element.firstChild;)this.element.removeChild(this.element.firstChild);"string"==typeof this.elementContents?this.element.innerHTML=this.elementContents:this.element.appendChild(this.elementContents),this.element.insertBefore(this.arrowElement,this.element.firstChild)},H.prototype.getPath=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];return e.unshift(this.key),this.parent&&this.parent.getPath(e),e},H.prototype.getElement=function(){this.addBindingsd=!1,this._visSet(),this.visible?this.element.classList.add("tabulator-group-visible"):this.element.classList.remove("tabulator-group-visible");for(var e=0;e<this.element.childNodes.length;++e)this.element.childNodes[e].parentNode.removeChild(this.element.childNodes[e]);return this.generateGroupHeaderContents(),this.element},H.prototype.detachElement=function(){this.element&&this.element.parentNode&&this.element.parentNode.removeChild(this.element)},H.prototype.normalizeHeight=function(){this.setHeight(this.element.clientHeight)},H.prototype.initialize=function(e){this.initialized&&!e||(this.normalizeHeight(),this.initialized=!0)},H.prototype.reinitialize=function(){this.initialized=!1,this.height=0,h.prototype.helpers.elVisible(this.element)&&this.initialize(!0)},H.prototype.setHeight=function(e){this.height!=e&&(this.height=e,this.outerHeight=this.element.offsetHeight)},H.prototype.getHeight=function(){return this.outerHeight},H.prototype.getGroup=function(){return this},H.prototype.reinitializeHeight=function(){},H.prototype.calcHeight=function(){},H.prototype.setCellHeight=function(){},H.prototype.clearCellHeight=function(){},H.prototype.getComponent=function(){return this.component||(this.component=new S(this)),this.component};var P=function(e){this.table=e,this.groupIDLookups=!1,this.startOpen=[function(){return!1}],this.headerGenerator=[function(){return""}],this.groupList=[],this.allowedValues=!1,this.groups={},this.displayIndex=0};P.prototype.initialize=function(){var e=this,t=e.table.options.groupBy,o=e.table.options.groupStartOpen,i=e.table.options.groupHeader;if(this.allowedValues=e.table.options.groupValues,Array.isArray(t)&&Array.isArray(i)&&t.length>i.length&&console.warn("Error creating group headers, groupHeader array is shorter than groupBy array"),e.headerGenerator=[function(){return""}],this.startOpen=[function(){return!1}],e.table.modules.localize.bind("groups|item",function(t,o){e.headerGenerator[0]=function(e,i,n){return(void 0===e?"":e)+"<span>("+i+" "+(1===i?t:o.groups.items)+")</span>"}}),this.groupIDLookups=[],Array.isArray(t)||t)this.table.modExists("columnCalcs")&&"table"!=this.table.options.columnCalcs&&"both"!=this.table.options.columnCalcs&&this.table.modules.columnCalcs.removeCalcs();else if(this.table.modExists("columnCalcs")&&"group"!=this.table.options.columnCalcs){var n=this.table.columnManager.getRealColumns();n.forEach(function(t){t.definition.topCalc&&e.table.modules.columnCalcs.initializeTopRow(),t.definition.bottomCalc&&e.table.modules.columnCalcs.initializeBottomRow()})}Array.isArray(t)||(t=[t]),t.forEach(function(t,o){var i,n;"function"==typeof t?i=t:(n=e.table.columnManager.getColumnByField(t),i=n?function(e){return n.getFieldValue(e)}:function(e){return e[t]}),e.groupIDLookups.push({field:"function"!=typeof t&&t,func:i,values:!!e.allowedValues&&e.allowedValues[o]})}),o&&(Array.isArray(o)||(o=[o]),o.forEach(function(e){e="function"==typeof e?e:function(){return!0}}),e.startOpen=o),i&&(e.headerGenerator=Array.isArray(i)?i:[i]),this.initialized=!0},P.prototype.setDisplayIndex=function(e){this.displayIndex=e},P.prototype.getDisplayIndex=function(){return this.displayIndex},P.prototype.getRows=function(e){return this.groupIDLookups.length?(this.table.options.dataGrouping.call(this.table),this.generateGroups(e),this.table.options.dataGrouped&&this.table.options.dataGrouped.call(this.table,this.getGroups(!0)),this.updateGroupRows()):e.slice(0)},P.prototype.getGroups=function(e){var t=[];return this.groupList.forEach(function(o){t.push(e?o.getComponent():o)}),t},P.prototype.getChildGroups=function(e){var t=this,o=[];return e||(e=this),e.groupList.forEach(function(e){e.groupList.length?o=o.concat(t.getChildGroups(e)):o.push(e)}),o},P.prototype.wipe=function(){this.groupList.forEach(function(e){e.wipe()})},P.prototype.pullGroupListData=function(e){var t=this,o=[];return e.forEach(function(e){var i={};i.level=0,i.rowCount=0,i.headerContent="";var n=[];e.hasSubGroups?(n=t.pullGroupListData(e.groupList),i.level=e.level,i.rowCount=n.length-e.groupList.length,i.headerContent=e.generator(e.key,i.rowCount,e.rows,e),o.push(i),o=o.concat(n)):(i.level=e.level,i.headerContent=e.generator(e.key,e.rows.length,e.rows,e),i.rowCount=e.getRows().length,o.push(i),e.getRows().forEach(function(e){o.push(e.getData("data"))}))}),o},P.prototype.getGroupedData=function(){return this.pullGroupListData(this.groupList)},P.prototype.getRowGroup=function(e){var t=!1;return this.groupList.forEach(function(o){var i=o.getRowGroup(e);i&&(t=i)}),t},P.prototype.countGroups=function(){return this.groupList.length},P.prototype.generateGroups=function(e){var t=this,o=t.groups;t.groups={},t.groupList=[],this.allowedValues&&this.allowedValues[0]?(this.allowedValues[0].forEach(function(e){t.createGroup(e,0,o)}),e.forEach(function(e){t.assignRowToExistingGroup(e,o)})):e.forEach(function(e){t.assignRowToGroup(e,o)})},P.prototype.createGroup=function(e,t,o){var i,n=t+"_"+e;o=o||[],i=new H(this,!1,t,e,this.groupIDLookups[0].field,this.headerGenerator[0],o[n]),this.groups[n]=i,this.groupList.push(i)},P.prototype.assignRowToExistingGroup=function(e,t){var o=this.groupIDLookups[0].func(e.getData()),i="0_"+o;this.groups[i]&&this.groups[i].addRow(e)},P.prototype.assignRowToGroup=function(e,t){var o=this.groupIDLookups[0].func(e.getData()),i=!this.groups["0_"+o];return i&&this.createGroup(o,0,t),this.groups["0_"+o].addRow(e),!i},P.prototype.reassignRowToGroup=function(e){var t=e.getGroup(),o=t.getPath(),i=this.getExpectedPath(e);o.length==i.length&&o.every(function(e,t){return e===i[t]})||(t.removeRow(e),this.assignRowToGroup(e,self.groups),this.table.rowManager.refreshActiveData("group",!1,!0))},P.prototype.getExpectedPath=function(e){var t=[],o=e.getData();return this.groupIDLookups.forEach(function(e){t.push(e.func(o))}),t},P.prototype.updateGroupRows=function(e){var t=this,o=[];if(t.groupList.forEach(function(e){o=o.concat(e.getHeadersAndRows())}),e){var i=t.table.rowManager.setDisplayRows(o,this.getDisplayIndex());!0!==i&&this.setDisplayIndex(i),t.table.rowManager.refreshActiveData("group",!0,!0)}return o},P.prototype.scrollHeaders=function(e){this.table.options.virtualDomHoz&&(e-=this.table.vdomHoz.vDomPadLeft),e+="px",this.groupList.forEach(function(t){t.scrollHeader(e)})},P.prototype.removeGroup=function(e){var t,o=e.level+"_"+e.key;this.groups[o]&&(delete this.groups[o],(t=this.groupList.indexOf(e))>-1&&this.groupList.splice(t,1))},h.prototype.registerModule("groupRows",P);var A=function(e){this.table=e,this.history=[],this.index=-1};A.prototype.clear=function(){this.history=[],this.index=-1},A.prototype.action=function(e,t,o){this.history=this.history.slice(0,this.index+1),this.history.push({type:e,component:t,data:o}),this.index++},A.prototype.getHistoryUndoSize=function(){return this.index+1},A.prototype.getHistoryRedoSize=function(){return this.history.length-(this.index+1)},A.prototype.clearComponentHistory=function(e){var t=this.history.findIndex(function(t){return t.component===e});t>-1&&(this.history.splice(t,1),t<=this.index&&this.index--,this.clearComponentHistory(e))},A.prototype.undo=function(){if(this.index>-1){var e=this.history[this.index];return this.undoers[e.type].call(this,e),this.index--,this.table.options.historyUndo.call(this.table,e.type,e.component.getComponent(),e.data),!0}return console.warn("History Undo Error - No more history to undo"),!1},A.prototype.redo=function(){if(this.history.length-1>this.index){this.index++;var e=this.history[this.index];return this.redoers[e.type].call(this,e),this.table.options.historyRedo.call(this.table,e.type,e.component.getComponent(),e.data),!0}return console.warn("History Redo Error - No more history to redo"),!1},A.prototype.undoers={cellEdit:function(e){e.component.setValueProcessData(e.data.oldValue)},rowAdd:function(e){e.component.deleteActual()},rowDelete:function(e){var t=this.table.rowManager.addRowActual(e.data.data,e.data.pos,e.data.index);this.table.options.groupBy&&this.table.modExists("groupRows")&&this.table.modules.groupRows.updateGroupRows(!0),this._rebindRow(e.component,t)},rowMove:function(e){this.table.rowManager.moveRowActual(e.component,this.table.rowManager.rows[e.data.posFrom],!e.data.after),this.table.rowManager.redraw()}},A.prototype.redoers={cellEdit:function(e){e.component.setValueProcessData(e.data.newValue)},rowAdd:function(e){var t=this.table.rowManager.addRowActual(e.data.data,e.data.pos,e.data.index);this.table.options.groupBy&&this.table.modExists("groupRows")&&this.table.modules.groupRows.updateGroupRows(!0),this._rebindRow(e.component,t)},rowDelete:function(e){e.component.deleteActual()},rowMove:function(e){this.table.rowManager.moveRowActual(e.component,this.table.rowManager.rows[e.data.posTo],e.data.after),this.table.rowManager.redraw()}},A.prototype._rebindRow=function(e,t){this.history.forEach(function(o){if(o.component instanceof l)o.component===e&&(o.component=t);else if(o.component instanceof u&&o.component.row===e){var i=o.component.column.getField();i&&(o.component=t.getCell(i))}})},h.prototype.registerModule("history",A);var _=function(e){this.table=e,this.fieldIndex=[],this.hasIndex=!1};_.prototype.parseTable=function(){var e=this,t=e.table.element,o=e.table.options,i=(o.columns,t.getElementsByTagName("th")),n=t.getElementsByTagName("tbody")[0],s=[];e.hasIndex=!1,e.table.options.htmlImporting.call(this.table),n=n?n.getElementsByTagName("tr"):[],e._extractOptions(t,o),i.length?e._extractHeaders(i,n):e._generateBlankHeaders(i,n);for(var a=0;a<n.length;a++){var r=n[a],l=r.getElementsByTagName("td"),c={};e.hasIndex||(c[o.index]=a);for(var u=0;u<l.length;u++){var d=l[u];void 0!==this.fieldIndex[u]&&(c[this.fieldIndex[u]]=d.innerHTML)}s.push(c)}var h=document.createElement("div"),p=t.attributes;for(var u in p)"object"==_typeof(p[u])&&h.setAttribute(p[u].name,p[u].value);t.parentNode.replaceChild(h,t),o.data=s,e.table.options.htmlImported.call(this.table),this.table.element=h},_.prototype._extractOptions=function(e,t,o){var i=e.attributes,n=o?Object.assign([],o):Object.keys(t),s={};n.forEach(function(e){s[e.toLowerCase()]=e});for(var a in i){var r,l=i[a];l&&"object"==(void 0===l?"undefined":_typeof(l))&&l.name&&0===l.name.indexOf("tabulator-")&&(r=l.name.replace("tabulator-",""),void 0!==s[r]&&(t[s[r]]=this._attribValue(l.value)))}},_.prototype._attribValue=function(e){return"true"===e||"false"!==e&&e},_.prototype._findCol=function(e){return this.table.options.columns.find(function(t){return t.title===e})||!1},_.prototype._extractHeaders=function(e,t){for(var o=0;o<e.length;o++){var i,s=e[o],a=!1,r=this._findCol(s.textContent);r?a=!0:r={title:s.textContent.trim()},r.field||(r.field=s.textContent.trim().toLowerCase().replace(" ","_")),i=s.getAttribute("width"),i&&!r.width&&(r.width=i),s.attributes,this._extractOptions(s,r,n.prototype.defaultOptionList),this.fieldIndex[o]=r.field,r.field==this.table.options.index&&(this.hasIndex=!0),a||this.table.options.columns.push(r)}},_.prototype._generateBlankHeaders=function(e,t){for(var o=0;o<e.length;o++){var i=e[o],n={title:"",field:"col"+o};this.fieldIndex[o]=n.field;var s=i.getAttribute("width");s&&(n.width=s),this.table.options.columns.push(n)}},h.prototype.registerModule("htmlTableImport",_);var F=function(e){this.table=e,this.watchKeys=null,this.pressedKeys=null,this.keyupBinding=!1,this.keydownBinding=!1};F.prototype.initialize=function(){var e=this.table.options.keybindings,t={};if(this.watchKeys={},this.pressedKeys=[],!1!==e){for(var o in this.bindings)t[o]=this.bindings[o];if(Object.keys(e).length)for(var i in e)t[i]=e[i];this.mapBindings(t),this.bindEvents()}},F.prototype.mapBindings=function(e){var t=this,o=this;for(var i in e)!function(i){t.actions[i]?e[i]&&("object"!==_typeof(e[i])&&(e[i]=[e[i]]),e[i].forEach(function(e){o.mapBinding(i,e)})):console.warn("Key Binding Error - no such action:",i)}(i)},F.prototype.mapBinding=function(e,t){var o=this,i={action:this.actions[e],keys:[],ctrl:!1,shift:!1,meta:!1};t.toString().toLowerCase().split(" ").join("").split("+").forEach(function(e){switch(e){case"ctrl":i.ctrl=!0;break;case"shift":i.shift=!0;break;case"meta":i.meta=!0;break;default:e=parseInt(e),i.keys.push(e),o.watchKeys[e]||(o.watchKeys[e]=[]),o.watchKeys[e].push(i)}})},F.prototype.bindEvents=function(){var e=this;this.keyupBinding=function(t){var o=t.keyCode,i=e.watchKeys[o];i&&(e.pressedKeys.push(o),i.forEach(function(o){e.checkBinding(t,o)}))},this.keydownBinding=function(t){var o=t.keyCode;if(e.watchKeys[o]){var i=e.pressedKeys.indexOf(o);i>-1&&e.pressedKeys.splice(i,1)}},this.table.element.addEventListener("keydown",this.keyupBinding),this.table.element.addEventListener("keyup",this.keydownBinding)},F.prototype.clearBindings=function(){this.keyupBinding&&this.table.element.removeEventListener("keydown",this.keyupBinding),this.keydownBinding&&this.table.element.removeEventListener("keyup",this.keydownBinding)},F.prototype.checkBinding=function(e,t){var o=this,i=!0;return e.ctrlKey==t.ctrl&&e.shiftKey==t.shift&&e.metaKey==t.meta&&(t.keys.forEach(function(e){-1==o.pressedKeys.indexOf(e)&&(i=!1)}),i&&t.action.call(o,e),!0)},F.prototype.bindings={navPrev:"shift + 9",navNext:9,navUp:38,navDown:40,scrollPageUp:33,scrollPageDown:34,scrollToStart:36,scrollToEnd:35,undo:"ctrl + 90",redo:"ctrl + 89",copyToClipboard:"ctrl + 67"},F.prototype.actions={keyBlock:function(e){e.stopPropagation(),e.preventDefault()},scrollPageUp:function(e){var t=this.table.rowManager,o=t.scrollTop-t.height;t.element.scrollHeight;e.preventDefault(),t.displayRowsCount&&(o>=0?t.element.scrollTop=o:t.scrollToRow(t.getDisplayRows()[0])),this.table.element.focus()},scrollPageDown:function(e){var t=this.table.rowManager,o=t.scrollTop+t.height,i=t.element.scrollHeight;e.preventDefault(),t.displayRowsCount&&(o<=i?t.element.scrollTop=o:t.scrollToRow(t.getDisplayRows()[t.displayRowsCount-1])),this.table.element.focus()},scrollToStart:function(e){var t=this.table.rowManager;e.preventDefault(),t.displayRowsCount&&t.scrollToRow(t.getDisplayRows()[0]),this.table.element.focus()},scrollToEnd:function(e){var t=this.table.rowManager;e.preventDefault(),t.displayRowsCount&&t.scrollToRow(t.getDisplayRows()[t.displayRowsCount-1]),this.table.element.focus()},navPrev:function(e){var t=!1;this.table.modExists("edit")&&(t=this.table.modules.edit.currentCell)&&(e.preventDefault(),t.nav().prev())},navNext:function(e){var t,o=!1,i=this.table.options.tabEndNewRow;this.table.modExists("edit")&&(o=this.table.modules.edit.currentCell)&&(e.preventDefault(),t=o.nav(),t.next()||i&&(o.getElement().firstChild.blur(),i=!0===i?this.table.addRow({}):"function"==typeof i?this.table.addRow(i(o.row.getComponent())):this.table.addRow(Object.assign({},i)),i.then(function(){setTimeout(function(){t.next()})})))},navLeft:function(e){var t=!1;this.table.modExists("edit")&&(t=this.table.modules.edit.currentCell)&&(e.preventDefault(),t.nav().left())},navRight:function(e){var t=!1;this.table.modExists("edit")&&(t=this.table.modules.edit.currentCell)&&(e.preventDefault(),t.nav().right())},navUp:function(e){var t=!1;this.table.modExists("edit")&&(t=this.table.modules.edit.currentCell)&&(e.preventDefault(),t.nav().up())},navDown:function(e){var t=!1;this.table.modExists("edit")&&(t=this.table.modules.edit.currentCell)&&(e.preventDefault(),t.nav().down())},undo:function(e){this.table.options.history&&this.table.modExists("history")&&this.table.modExists("edit")&&(this.table.modules.edit.currentCell||(e.preventDefault(),this.table.modules.history.undo()))},redo:function(e){this.table.options.history&&this.table.modExists("history")&&this.table.modExists("edit")&&(this.table.modules.edit.currentCell||(e.preventDefault(),this.table.modules.history.redo()))},copyToClipboard:function(e){this.table.modules.edit.currentCell||this.table.modExists("clipboard",!0)&&this.table.modules.clipboard.copy(!1,!0)}},h.prototype.registerModule("keybindings",F);var N=function(e){this.table=e,this.menuEl=!1,this.blurEvent=this.hideMenu.bind(this),this.escEvent=this.escMenu.bind(this),this.nestedMenuBlock=!1};N.prototype.initializeColumnHeader=function(e){var t,o=this;e.definition.headerContextMenu&&(e.getElement().addEventListener("contextmenu",this.LoadMenuEvent.bind(this,e,e.definition.headerContextMenu)),this.tapHold(e,e.definition.headerContextMenu)),e.definition.headerMenu&&(t=document.createElement("span"),t.classList.add("tabulator-header-menu-button"),t.innerHTML="&vellip;",t.addEventListener("click",function(t){var i="function"==typeof e.definition.headerMenu?e.definition.headerMenu(e.getComponent(),t):e.definition.headerMenu;t.stopPropagation(),t.preventDefault(),o.loadMenu(t,e,i)}),e.titleElement.insertBefore(t,e.titleElement.firstChild))},N.prototype.LoadMenuEvent=function(e,t,o){t="function"==typeof t?t(e.getComponent(),o):t,this.loadMenu(o,e,t)},N.prototype.tapHold=function(e,t){var o=this,i=e.getElement(),n=null,s=!1;i.addEventListener("touchstart",function(i){clearTimeout(n),s=!1,n=setTimeout(function(){clearTimeout(n),n=null,s=!0,o.LoadMenuEvent(e,t,i)},1e3)},{passive:!0}),i.addEventListener("touchend",function(e){clearTimeout(n),n=null,s&&e.preventDefault()})},N.prototype.initializeCell=function(e){e.column.definition.contextMenu&&(e.getElement().addEventListener("contextmenu",this.LoadMenuEvent.bind(this,e,e.column.definition.contextMenu)),this.tapHold(e,e.column.definition.contextMenu)),e.column.definition.clickMenu&&e.getElement().addEventListener("click",this.LoadMenuEvent.bind(this,e,e.column.definition.clickMenu))},N.prototype.initializeRow=function(e){this.table.options.rowContextMenu&&(e.getElement().addEventListener("contextmenu",this.LoadMenuEvent.bind(this,e,this.table.options.rowContextMenu)),this.tapHold(e,this.table.options.rowContextMenu)),this.table.options.rowClickMenu&&e.getElement().addEventListener("click",this.LoadMenuEvent.bind(this,e,this.table.options.rowClickMenu))},N.prototype.initializeGroup=function(e){this.table.options.groupContextMenu&&(e.getElement().addEventListener("contextmenu",this.LoadMenuEvent.bind(this,e,this.table.options.groupContextMenu)),this.tapHold(e,this.table.options.groupContextMenu)),this.table.options.groupClickMenu&&e.getElement().addEventListener("click",this.LoadMenuEvent.bind(this,e,this.table.options.groupClickMenu))},N.prototype.loadMenu=function(e,t,o){var i=this,n=Math.max(document.body.offsetHeight,window.innerHeight),s=!(e instanceof MouseEvent);if(s||e.preventDefault(),o&&o.length){if(this.nestedMenuBlock){if(this.isOpen())return}else this.nestedMenuBlock=setTimeout(function(){i.nestedMenuBlock=!1},100);this.hideMenu(),this.menuEl=document.createElement("div"),this.menuEl.classList.add("tabulator-menu"),o.forEach(function(e){var o=document.createElement("div"),n=e.label,s=e.disabled;e.separator?o.classList.add("tabulator-menu-separator"):(o.classList.add("tabulator-menu-item"),"function"==typeof n&&(n=n(t.getComponent())),n instanceof Node?o.appendChild(n):o.innerHTML=n,"function"==typeof s&&(s=s(t.getComponent())),s?(o.classList.add("tabulator-menu-item-disabled"),o.addEventListener("click",function(e){e.stopPropagation()})):o.addEventListener("click",function(o){i.hideMenu(),e.action(o,t.getComponent())})),i.menuEl.appendChild(o)}),this.menuEl.style.top=(s?e.touches[0].pageY:e.pageY)+"px",this.menuEl.style.left=(s?e.touches[0].pageX:e.pageX)+"px",setTimeout(function(){i.table.rowManager.element.addEventListener("scroll",i.blurEvent),document.body.addEventListener("click",i.blurEvent),document.body.addEventListener("contextmenu",i.blurEvent),document.body.addEventListener("keydown",i.escEvent)},100),document.body.appendChild(this.menuEl),e.pageX+this.menuEl.offsetWidth>=document.body.offsetWidth&&(this.menuEl.style.left="",this.menuEl.style.right=document.body.offsetWidth-e.pageX+"px"),e.pageY+this.menuEl.offsetHeight>=n&&(this.menuEl.style.top="",this.menuEl.style.bottom=n-e.pageY+"px")}},N.prototype.isOpen=function(){return!!this.menuEl.parentNode},N.prototype.escMenu=function(e){27==e.keyCode&&this.hideMenu()},N.prototype.hideMenu=function(){this.menuEl.parentNode&&this.menuEl.parentNode.removeChild(this.menuEl),this.escEvent&&document.body.removeEventListener("keydown",this.escEvent),this.blurEvent&&(document.body.removeEventListener("click",this.blurEvent),document.body.removeEventListener("contextmenu",this.blurEvent),this.table.rowManager.element.removeEventListener("scroll",this.blurEvent))},N.prototype.menus={},h.prototype.registerModule("menu",N);var B=function(e){this.table=e,this.placeholderElement=this.createPlaceholderElement(),this.hoverElement=!1,this.checkTimeout=!1,this.checkPeriod=250,this.moving=!1,this.toCol=!1,this.toColAfter=!1,this.startX=0,this.autoScrollMargin=40,this.autoScrollStep=5,this.autoScrollTimeout=!1,this.touchMove=!1,this.moveHover=this.moveHover.bind(this),this.endMove=this.endMove.bind(this)};B.prototype.createPlaceholderElement=function(){var e=document.createElement("div");return e.classList.add("tabulator-col"),e.classList.add("tabulator-col-placeholder"),e},B.prototype.initializeColumn=function(e){var t,o=this,i={};e.modules.frozen||(t=e.getElement(),i.mousemove=function(i){e.parent===o.moving.parent&&((o.touchMove?i.touches[0].pageX:i.pageX)-h.prototype.helpers.elOffset(t).left+o.table.columnManager.element.scrollLeft>e.getWidth()/2?o.toCol===e&&o.toColAfter||(t.parentNode.insertBefore(o.placeholderElement,t.nextSibling),o.moveColumn(e,!0)):(o.toCol!==e||o.toColAfter)&&(t.parentNode.insertBefore(o.placeholderElement,t),o.moveColumn(e,!1)))}.bind(o),t.addEventListener("mousedown",function(t){o.touchMove=!1,1===t.which&&(o.checkTimeout=setTimeout(function(){o.startMove(t,e)},o.checkPeriod))}),t.addEventListener("mouseup",function(e){1===e.which&&o.checkTimeout&&clearTimeout(o.checkTimeout)}),o.bindTouchEvents(e)),e.modules.moveColumn=i},B.prototype.bindTouchEvents=function(e){var t,o,i,n,s,a,r,l=this,c=e.getElement(),u=!1;c.addEventListener("touchstart",function(c){l.checkTimeout=setTimeout(function(){l.touchMove=!0,t=e,o=e.nextColumn(),n=o?o.getWidth()/2:0,i=e.prevColumn(),s=i?i.getWidth()/2:0,a=0,r=0,u=!1,l.startMove(c,e)},l.checkPeriod)},{passive:!0}),c.addEventListener("touchmove",function(c){var d,h;l.moving&&(l.moveHover(c),u||(u=c.touches[0].pageX),d=c.touches[0].pageX-u,d>0?o&&d-a>n&&(h=o)!==e&&(u=c.touches[0].pageX,h.getElement().parentNode.insertBefore(l.placeholderElement,h.getElement().nextSibling),l.moveColumn(h,!0)):i&&-d-r>s&&(h=i)!==e&&(u=c.touches[0].pageX,h.getElement().parentNode.insertBefore(l.placeholderElement,h.getElement()),l.moveColumn(h,!1)),h&&(t=h,o=h.nextColumn(),a=n,n=o?o.getWidth()/2:0,i=h.prevColumn(),r=s,s=i?i.getWidth()/2:0))},{passive:!0}),c.addEventListener("touchend",function(e){l.checkTimeout&&clearTimeout(l.checkTimeout),l.moving&&l.endMove(e)})},B.prototype.startMove=function(e,t){var o=t.getElement();this.moving=t,this.startX=(this.touchMove?e.touches[0].pageX:e.pageX)-h.prototype.helpers.elOffset(o).left,this.table.element.classList.add("tabulator-block-select"),this.placeholderElement.style.width=t.getWidth()+"px",this.placeholderElement.style.height=t.getHeight()+"px",o.parentNode.insertBefore(this.placeholderElement,o),o.parentNode.removeChild(o),this.hoverElement=o.cloneNode(!0),this.hoverElement.classList.add("tabulator-moving"),this.table.columnManager.getElement().appendChild(this.hoverElement),this.hoverElement.style.left="0",this.hoverElement.style.bottom="0",this.touchMove||(this._bindMouseMove(),document.body.addEventListener("mousemove",this.moveHover),document.body.addEventListener("mouseup",this.endMove)),this.moveHover(e)},B.prototype._bindMouseMove=function(){this.table.columnManager.columnsByIndex.forEach(function(e){e.modules.moveColumn.mousemove&&e.getElement().addEventListener("mousemove",e.modules.moveColumn.mousemove)})},B.prototype._unbindMouseMove=function(){this.table.columnManager.columnsByIndex.forEach(function(e){e.modules.moveColumn.mousemove&&e.getElement().removeEventListener("mousemove",e.modules.moveColumn.mousemove)})},B.prototype.moveColumn=function(e,t){var o=this.moving.getCells();this.toCol=e,this.toColAfter=t,t?e.getCells().forEach(function(e,t){var i=e.getElement();i.parentNode.insertBefore(o[t].getElement(),i.nextSibling)}):e.getCells().forEach(function(e,t){var i=e.getElement();i.parentNode.insertBefore(o[t].getElement(),i)})},B.prototype.endMove=function(e){(1===e.which||this.touchMove)&&(this._unbindMouseMove(),this.placeholderElement.parentNode.insertBefore(this.moving.getElement(),this.placeholderElement.nextSibling),this.placeholderElement.parentNode.removeChild(this.placeholderElement),
+this.hoverElement.parentNode.removeChild(this.hoverElement),this.table.element.classList.remove("tabulator-block-select"),this.toCol&&this.table.columnManager.moveColumnActual(this.moving,this.toCol,this.toColAfter),this.moving=!1,this.toCol=!1,this.toColAfter=!1,this.touchMove||(document.body.removeEventListener("mousemove",this.moveHover),document.body.removeEventListener("mouseup",this.endMove)))},B.prototype.moveHover=function(e){var t,o=this,i=o.table.columnManager.getElement(),n=i.scrollLeft,s=(o.touchMove?e.touches[0].pageX:e.pageX)-h.prototype.helpers.elOffset(i).left+n;o.hoverElement.style.left=s-o.startX+"px",s-n<o.autoScrollMargin&&(o.autoScrollTimeout||(o.autoScrollTimeout=setTimeout(function(){t=Math.max(0,n-5),o.table.rowManager.getElement().scrollLeft=t,o.autoScrollTimeout=!1},1))),n+i.clientWidth-s<o.autoScrollMargin&&(o.autoScrollTimeout||(o.autoScrollTimeout=setTimeout(function(){t=Math.min(i.clientWidth,n+5),o.table.rowManager.getElement().scrollLeft=t,o.autoScrollTimeout=!1},1)))},h.prototype.registerModule("moveColumn",B);var O=function(e){this.table=e,this.placeholderElement=this.createPlaceholderElement(),this.hoverElement=!1,this.checkTimeout=!1,this.checkPeriod=150,this.moving=!1,this.toRow=!1,this.toRowAfter=!1,this.hasHandle=!1,this.startY=0,this.startX=0,this.moveHover=this.moveHover.bind(this),this.endMove=this.endMove.bind(this),this.tableRowDropEvent=!1,this.touchMove=!1,this.connection=!1,this.connectionSelectorsTables=!1,this.connectionSelectorsElements=!1,this.connectionElements=[],this.connections=[],this.connectedTable=!1,this.connectedRow=!1};O.prototype.createPlaceholderElement=function(){var e=document.createElement("div");return e.classList.add("tabulator-row"),e.classList.add("tabulator-row-placeholder"),e},O.prototype.initialize=function(e){this.connectionSelectorsTables=this.table.options.movableRowsConnectedTables,this.connectionSelectorsElements=this.table.options.movableRowsConnectedElements,this.connection=this.connectionSelectorsTables||this.connectionSelectorsElements},O.prototype.setHandle=function(e){this.hasHandle=e},O.prototype.initializeGroupHeader=function(e){var t=this,o={};o.mouseup=function(e){t.tableRowDrop(e,row)}.bind(t),o.mousemove=function(o){if(o.pageY-h.prototype.helpers.elOffset(e.element).top+t.table.rowManager.element.scrollTop>e.getHeight()/2){if(t.toRow!==e||!t.toRowAfter){var i=e.getElement();i.parentNode.insertBefore(t.placeholderElement,i.nextSibling),t.moveRow(e,!0)}}else if(t.toRow!==e||t.toRowAfter){var i=e.getElement();i.previousSibling&&(i.parentNode.insertBefore(t.placeholderElement,i),t.moveRow(e,!1))}}.bind(t),e.modules.moveRow=o},O.prototype.initializeRow=function(e){var t,o=this,i={};i.mouseup=function(t){o.tableRowDrop(t,e)}.bind(o),i.mousemove=function(t){if(t.pageY-h.prototype.helpers.elOffset(e.element).top+o.table.rowManager.element.scrollTop>e.getHeight()/2){if(o.toRow!==e||!o.toRowAfter){var i=e.getElement();i.parentNode.insertBefore(o.placeholderElement,i.nextSibling),o.moveRow(e,!0)}}else if(o.toRow!==e||o.toRowAfter){var i=e.getElement();i.parentNode.insertBefore(o.placeholderElement,i),o.moveRow(e,!1)}}.bind(o),this.hasHandle||(t=e.getElement(),t.addEventListener("mousedown",function(t){1===t.which&&(o.checkTimeout=setTimeout(function(){o.startMove(t,e)},o.checkPeriod))}),t.addEventListener("mouseup",function(e){1===e.which&&o.checkTimeout&&clearTimeout(o.checkTimeout)}),this.bindTouchEvents(e,e.getElement())),e.modules.moveRow=i},O.prototype.initializeCell=function(e){var t=this,o=e.getElement();o.addEventListener("mousedown",function(o){1===o.which&&(t.checkTimeout=setTimeout(function(){t.startMove(o,e.row)},t.checkPeriod))}),o.addEventListener("mouseup",function(e){1===e.which&&t.checkTimeout&&clearTimeout(t.checkTimeout)}),this.bindTouchEvents(e.row,e.getElement())},O.prototype.bindTouchEvents=function(e,t){var o,i,n,s,a,r,l,c=this,u=!1;t.addEventListener("touchstart",function(t){c.checkTimeout=setTimeout(function(){c.touchMove=!0,o=e,i=e.nextRow(),s=i?i.getHeight()/2:0,n=e.prevRow(),a=n?n.getHeight()/2:0,r=0,l=0,u=!1,c.startMove(t,e)},c.checkPeriod)},{passive:!0}),this.moving,this.toRow,this.toRowAfter,t.addEventListener("touchmove",function(t){var d,h;c.moving&&(t.preventDefault(),c.moveHover(t),u||(u=t.touches[0].pageY),d=t.touches[0].pageY-u,d>0?i&&d-r>s&&(h=i)!==e&&(u=t.touches[0].pageY,h.getElement().parentNode.insertBefore(c.placeholderElement,h.getElement().nextSibling),c.moveRow(h,!0)):n&&-d-l>a&&(h=n)!==e&&(u=t.touches[0].pageY,h.getElement().parentNode.insertBefore(c.placeholderElement,h.getElement()),c.moveRow(h,!1)),h&&(o=h,i=h.nextRow(),r=s,s=i?i.getHeight()/2:0,n=h.prevRow(),l=a,a=n?n.getHeight()/2:0))}),t.addEventListener("touchend",function(e){c.checkTimeout&&clearTimeout(c.checkTimeout),c.moving&&(c.endMove(e),c.touchMove=!1)})},O.prototype._bindMouseMove=function(){this.table.rowManager.getDisplayRows().forEach(function(e){"row"!==e.type&&"group"!==e.type||!e.modules.moveRow.mousemove||e.getElement().addEventListener("mousemove",e.modules.moveRow.mousemove)})},O.prototype._unbindMouseMove=function(){this.table.rowManager.getDisplayRows().forEach(function(e){"row"!==e.type&&"group"!==e.type||!e.modules.moveRow.mousemove||e.getElement().removeEventListener("mousemove",e.modules.moveRow.mousemove)})},O.prototype.startMove=function(e,t){var o=t.getElement();this.setStartPosition(e,t),this.moving=t,this.table.element.classList.add("tabulator-block-select"),this.placeholderElement.style.width=t.getWidth()+"px",this.placeholderElement.style.height=t.getHeight()+"px",this.connection?(this.table.element.classList.add("tabulator-movingrow-sending"),this.connectToTables(t)):(o.parentNode.insertBefore(this.placeholderElement,o),o.parentNode.removeChild(o)),this.hoverElement=o.cloneNode(!0),this.hoverElement.classList.add("tabulator-moving"),this.connection?(document.body.appendChild(this.hoverElement),this.hoverElement.style.left="0",this.hoverElement.style.top="0",this.hoverElement.style.width=this.table.element.clientWidth+"px",this.hoverElement.style.whiteSpace="nowrap",this.hoverElement.style.overflow="hidden",this.hoverElement.style.pointerEvents="none"):(this.table.rowManager.getTableElement().appendChild(this.hoverElement),this.hoverElement.style.left="0",this.hoverElement.style.top="0",this._bindMouseMove()),document.body.addEventListener("mousemove",this.moveHover),document.body.addEventListener("mouseup",this.endMove),this.moveHover(e)},O.prototype.setStartPosition=function(e,t){var o,i,n=this.touchMove?e.touches[0].pageX:e.pageX,s=this.touchMove?e.touches[0].pageY:e.pageY;o=t.getElement(),this.connection?(i=o.getBoundingClientRect(),this.startX=i.left-n+window.pageXOffset,this.startY=i.top-s+window.pageYOffset):this.startY=s-o.getBoundingClientRect().top},O.prototype.endMove=function(e){e&&1!==e.which&&!this.touchMove||(this._unbindMouseMove(),this.connection||(this.placeholderElement.parentNode.insertBefore(this.moving.getElement(),this.placeholderElement.nextSibling),this.placeholderElement.parentNode.removeChild(this.placeholderElement)),this.hoverElement.parentNode.removeChild(this.hoverElement),this.table.element.classList.remove("tabulator-block-select"),this.toRow&&this.table.rowManager.moveRow(this.moving,this.toRow,this.toRowAfter),this.moving=!1,this.toRow=!1,this.toRowAfter=!1,document.body.removeEventListener("mousemove",this.moveHover),document.body.removeEventListener("mouseup",this.endMove),this.connection&&(this.table.element.classList.remove("tabulator-movingrow-sending"),this.disconnectFromTables()))},O.prototype.moveRow=function(e,t){this.toRow=e,this.toRowAfter=t},O.prototype.moveHover=function(e){this.connection?this.moveHoverConnections.call(this,e):this.moveHoverTable.call(this,e)},O.prototype.moveHoverTable=function(e){var t=this.table.rowManager.getElement(),o=t.scrollTop,i=(this.touchMove?e.touches[0].pageY:e.pageY)-t.getBoundingClientRect().top+o;this.hoverElement.style.top=i-this.startY+"px"},O.prototype.moveHoverConnections=function(e){this.hoverElement.style.left=this.startX+(this.touchMove?e.touches[0].pageX:e.pageX)+"px",this.hoverElement.style.top=this.startY+(this.touchMove?e.touches[0].pageY:e.pageY)+"px"},O.prototype.elementRowDrop=function(e,t,o){this.table.options.movableRowsElementDrop&&this.table.options.movableRowsElementDrop(e,t,!!o&&o.getComponent())},O.prototype.connectToTables=function(e){var t,o=this;this.connectionSelectorsTables&&(t=this.table.modules.comms.getConnections(this.connectionSelectorsTables),this.table.options.movableRowsSendingStart.call(this.table,t),this.table.modules.comms.send(this.connectionSelectorsTables,"moveRow","connect",{row:e})),this.connectionSelectorsElements&&(this.connectionElements=[],Array.isArray(this.connectionSelectorsElements)||(this.connectionSelectorsElements=[this.connectionSelectorsElements]),this.connectionSelectorsElements.forEach(function(e){"string"==typeof e?o.connectionElements=o.connectionElements.concat(Array.prototype.slice.call(document.querySelectorAll(e))):o.connectionElements.push(e)}),this.connectionElements.forEach(function(e){var t=function(t){o.elementRowDrop(t,e,o.moving)};e.addEventListener("mouseup",t),e.tabulatorElementDropEvent=t,e.classList.add("tabulator-movingrow-receiving")}))},O.prototype.disconnectFromTables=function(){var e;this.connectionSelectorsTables&&(e=this.table.modules.comms.getConnections(this.connectionSelectorsTables),this.table.options.movableRowsSendingStop.call(this.table,e),this.table.modules.comms.send(this.connectionSelectorsTables,"moveRow","disconnect")),this.connectionElements.forEach(function(e){e.classList.remove("tabulator-movingrow-receiving"),e.removeEventListener("mouseup",e.tabulatorElementDropEvent),delete e.tabulatorElementDropEvent})},O.prototype.connect=function(e,t){var o=this;return this.connectedTable?(console.warn("Move Row Error - Table cannot accept connection, already connected to table:",this.connectedTable),!1):(this.connectedTable=e,this.connectedRow=t,this.table.element.classList.add("tabulator-movingrow-receiving"),o.table.rowManager.getDisplayRows().forEach(function(e){"row"===e.type&&e.modules.moveRow&&e.modules.moveRow.mouseup&&e.getElement().addEventListener("mouseup",e.modules.moveRow.mouseup)}),o.tableRowDropEvent=o.tableRowDrop.bind(o),o.table.element.addEventListener("mouseup",o.tableRowDropEvent),this.table.options.movableRowsReceivingStart.call(this.table,t,e),!0)},O.prototype.disconnect=function(e){var t=this;e===this.connectedTable?(this.connectedTable=!1,this.connectedRow=!1,this.table.element.classList.remove("tabulator-movingrow-receiving"),t.table.rowManager.getDisplayRows().forEach(function(e){"row"===e.type&&e.modules.moveRow&&e.modules.moveRow.mouseup&&e.getElement().removeEventListener("mouseup",e.modules.moveRow.mouseup)}),t.table.element.removeEventListener("mouseup",t.tableRowDropEvent),this.table.options.movableRowsReceivingStop.call(this.table,e)):console.warn("Move Row Error - trying to disconnect from non connected table")},O.prototype.dropComplete=function(e,t,o){var i=!1;if(o){switch(_typeof(this.table.options.movableRowsSender)){case"string":i=this.senders[this.table.options.movableRowsSender];break;case"function":i=this.table.options.movableRowsSender}i?i.call(this,this.moving.getComponent(),t?t.getComponent():void 0,e):this.table.options.movableRowsSender&&console.warn("Mover Row Error - no matching sender found:",this.table.options.movableRowsSender),this.table.options.movableRowsSent.call(this.table,this.moving.getComponent(),t?t.getComponent():void 0,e)}else this.table.options.movableRowsSentFailed.call(this.table,this.moving.getComponent(),t?t.getComponent():void 0,e);this.endMove()},O.prototype.tableRowDrop=function(e,t){var o=!1,i=!1;switch(console.trace("drop"),e.stopImmediatePropagation(),_typeof(this.table.options.movableRowsReceiver)){case"string":o=this.receivers[this.table.options.movableRowsReceiver];break;case"function":o=this.table.options.movableRowsReceiver}o?i=o.call(this,this.connectedRow.getComponent(),t?t.getComponent():void 0,this.connectedTable):console.warn("Mover Row Error - no matching receiver found:",this.table.options.movableRowsReceiver),i?this.table.options.movableRowsReceived.call(this.table,this.connectedRow.getComponent(),t?t.getComponent():void 0,this.connectedTable):this.table.options.movableRowsReceivedFailed.call(this.table,this.connectedRow.getComponent(),t?t.getComponent():void 0,this.connectedTable),this.table.modules.comms.send(this.connectedTable,"moveRow","dropcomplete",{row:t,success:i})},O.prototype.receivers={insert:function(e,t,o){return this.table.addRow(e.getData(),void 0,t),!0},add:function(e,t,o){return this.table.addRow(e.getData()),!0},update:function(e,t,o){return!!t&&(t.update(e.getData()),!0)},replace:function(e,t,o){return!!t&&(this.table.addRow(e.getData(),void 0,t),t.delete(),!0)}},O.prototype.senders={delete:function(e,t,o){e.delete()}},O.prototype.commsReceived=function(e,t,o){switch(t){case"connect":return this.connect(e,o.row);case"disconnect":return this.disconnect(e);case"dropcomplete":return this.dropComplete(e,o.row,o.success)}},h.prototype.registerModule("moveRow",O);var I=function(e){this.table=e,this.allowedTypes=["","data","edit","clipboard"],this.enabled=!0};I.prototype.initializeColumn=function(e){var t=this,o=!1,i={};this.allowedTypes.forEach(function(n){var s,a="mutator"+(n.charAt(0).toUpperCase()+n.slice(1));e.definition[a]&&(s=t.lookupMutator(e.definition[a]))&&(o=!0,i[a]={mutator:s,params:e.definition[a+"Params"]||{}})}),o&&(e.modules.mutate=i)},I.prototype.lookupMutator=function(e){var t=!1;switch(void 0===e?"undefined":_typeof(e)){case"string":this.mutators[e]?t=this.mutators[e]:console.warn("Mutator Error - No such mutator found, ignoring: ",e);break;case"function":t=e}return t},I.prototype.transformRow=function(e,t,o){var i,n=this,s="mutator"+(t.charAt(0).toUpperCase()+t.slice(1));return this.enabled&&n.table.columnManager.traverse(function(n){var a,r,l;n.modules.mutate&&(a=n.modules.mutate[s]||n.modules.mutate.mutator||!1)&&(i=n.getFieldValue(void 0!==o?o:e),"data"!=t&&void 0===i||(l=n.getComponent(),r="function"==typeof a.params?a.params(i,e,t,l):a.params,n.setFieldValue(e,a.mutator(i,e,t,r,l))))}),e},I.prototype.transformCell=function(e,t){var o=e.column.modules.mutate.mutatorEdit||e.column.modules.mutate.mutator||!1,i={};return o?(i=Object.assign(i,e.row.getData()),e.column.setFieldValue(i,t),o.mutator(t,i,"edit",o.params,e.getComponent())):t},I.prototype.enable=function(){this.enabled=!0},I.prototype.disable=function(){this.enabled=!1},I.prototype.mutators={},h.prototype.registerModule("mutator",I);var V=function(e){this.table=e,this.mode="local",this.progressiveLoad=!1,this.size=0,this.page=1,this.count=5,this.max=1,this.displayIndex=0,this.initialLoad=!0,this.pageSizes=[],this.dataReceivedNames={},this.dataSentNames={},this.createElements()};V.prototype.createElements=function(){var e;this.element=document.createElement("span"),this.element.classList.add("tabulator-paginator"),this.pagesElement=document.createElement("span"),this.pagesElement.classList.add("tabulator-pages"),e=document.createElement("button"),e.classList.add("tabulator-page"),e.setAttribute("type","button"),e.setAttribute("role","button"),e.setAttribute("aria-label",""),e.setAttribute("title",""),this.firstBut=e.cloneNode(!0),this.firstBut.setAttribute("data-page","first"),this.prevBut=e.cloneNode(!0),this.prevBut.setAttribute("data-page","prev"),this.nextBut=e.cloneNode(!0),this.nextBut.setAttribute("data-page","next"),this.lastBut=e.cloneNode(!0),this.lastBut.setAttribute("data-page","last"),this.table.options.paginationSizeSelector&&(this.pageSizeSelect=document.createElement("select"),this.pageSizeSelect.classList.add("tabulator-page-size"))},V.prototype.generatePageSizeSelectList=function(){var e=this,t=[];if(this.pageSizeSelect){if(Array.isArray(this.table.options.paginationSizeSelector))t=this.table.options.paginationSizeSelector,this.pageSizes=t,-1==this.pageSizes.indexOf(this.size)&&t.unshift(this.size);else if(-1==this.pageSizes.indexOf(this.size)){t=[];for(var o=1;o<5;o++)t.push(this.size*o);this.pageSizes=t}else t=this.pageSizes;for(;this.pageSizeSelect.firstChild;)this.pageSizeSelect.removeChild(this.pageSizeSelect.firstChild);t.forEach(function(t){var o=document.createElement("option");o.value=t,!0===t?e.table.modules.localize.bind("pagination|all",function(e){o.innerHTML=e}):o.innerHTML=t,e.pageSizeSelect.appendChild(o)}),this.pageSizeSelect.value=this.size}},V.prototype.initialize=function(e){var t,o,i,n=this;this.dataSentNames=Object.assign({},this.paginationDataSentNames),this.dataSentNames=Object.assign(this.dataSentNames,this.table.options.paginationDataSent),this.dataReceivedNames=Object.assign({},this.paginationDataReceivedNames),this.dataReceivedNames=Object.assign(this.dataReceivedNames,this.table.options.paginationDataReceived),n.table.modules.localize.bind("pagination|first",function(e){n.firstBut.innerHTML=e}),n.table.modules.localize.bind("pagination|first_title",function(e){n.firstBut.setAttribute("aria-label",e),n.firstBut.setAttribute("title",e)}),n.table.modules.localize.bind("pagination|prev",function(e){n.prevBut.innerHTML=e}),n.table.modules.localize.bind("pagination|prev_title",function(e){n.prevBut.setAttribute("aria-label",e),n.prevBut.setAttribute("title",e)}),n.table.modules.localize.bind("pagination|next",function(e){n.nextBut.innerHTML=e}),n.table.modules.localize.bind("pagination|next_title",function(e){n.nextBut.setAttribute("aria-label",e),n.nextBut.setAttribute("title",e)}),n.table.modules.localize.bind("pagination|last",function(e){n.lastBut.innerHTML=e}),n.table.modules.localize.bind("pagination|last_title",function(e){n.lastBut.setAttribute("aria-label",e),n.lastBut.setAttribute("title",e)}),n.firstBut.addEventListener("click",function(){n.setPage(1).then(function(){}).catch(function(){})}),n.prevBut.addEventListener("click",function(){n.previousPage().then(function(){}).catch(function(){})}),n.nextBut.addEventListener("click",function(){n.nextPage().then(function(){}).catch(function(){})}),n.lastBut.addEventListener("click",function(){n.setPage(n.max).then(function(){}).catch(function(){})}),n.table.options.paginationElement&&(n.element=n.table.options.paginationElement),this.pageSizeSelect&&(t=document.createElement("label"),n.table.modules.localize.bind("pagination|page_size",function(e){n.pageSizeSelect.setAttribute("aria-label",e),n.pageSizeSelect.setAttribute("title",e),t.innerHTML=e}),n.element.appendChild(t),n.element.appendChild(n.pageSizeSelect),n.pageSizeSelect.addEventListener("change",function(e){n.setPageSize("true"==n.pageSizeSelect.value||n.pageSizeSelect.value),n.setPage(1).then(function(){}).catch(function(){})})),n.element.appendChild(n.firstBut),n.element.appendChild(n.prevBut),n.element.appendChild(n.pagesElement),n.element.appendChild(n.nextBut),n.element.appendChild(n.lastBut),n.table.options.paginationElement||e||n.table.footerManager.append(n.element,n),n.mode=n.table.options.pagination,n.table.options.paginationSize?n.size=n.table.options.paginationSize:(o=document.createElement("div"),o.classList.add("tabulator-row"),o.style.visibility=e,i=document.createElement("div"),i.classList.add("tabulator-cell"),i.innerHTML="Page Row Test",o.appendChild(i),n.table.rowManager.getTableElement().appendChild(o),n.size=Math.floor(n.table.rowManager.getElement().clientHeight/o.offsetHeight),n.table.rowManager.getTableElement().removeChild(o)),n.count=n.table.options.paginationButtonCount,n.generatePageSizeSelectList()},V.prototype.initializeProgressive=function(e){this.initialize(!0),this.mode="progressive_"+e,this.progressiveLoad=!0},V.prototype.setDisplayIndex=function(e){this.displayIndex=e},V.prototype.getDisplayIndex=function(){return this.displayIndex},V.prototype.setMaxRows=function(e){this.max=e?!0===this.size?1:Math.ceil(e/this.size):1,this.page>this.max&&(this.page=this.max)},V.prototype.reset=function(e,t){return("local"==this.mode||e)&&(this.page=1),t&&(this.initialLoad=!0),!0},V.prototype.setMaxPage=function(e){e=parseInt(e),this.max=e||1,this.page>this.max&&(this.page=this.max,this.trigger())},V.prototype.setPage=function(e){var t=this,o=this;switch(e){case"first":return this.setPage(1);case"prev":return this.previousPage();case"next":return this.nextPage();case"last":return this.setPage(this.max)}return new Promise(function(i,n){e=parseInt(e),e>0&&e<=t.max?(t.page=e,t.trigger().then(function(){i()}).catch(function(){n()}),o.table.options.persistence&&o.table.modExists("persistence",!0)&&o.table.modules.persistence.config.page&&o.table.modules.persistence.save("page")):(console.warn("Pagination Error - Requested page is out of range of 1 - "+t.max+":",e),n())})},V.prototype.setPageToRow=function(e){var t=this;return new Promise(function(o,i){var n=t.table.rowManager.getDisplayRows(t.displayIndex-1),s=n.indexOf(e);if(s>-1){var a=!0===t.size?1:Math.ceil((s+1)/t.size);t.setPage(a).then(function(){o()}).catch(function(){i()})}else console.warn("Pagination Error - Requested row is not visible"),i()})},V.prototype.setPageSize=function(e){!0!==e&&(e=parseInt(e)),e>0&&(this.size=e),this.pageSizeSelect&&this.generatePageSizeSelectList(),this.table.options.persistence&&this.table.modExists("persistence",!0)&&this.table.modules.persistence.config.page&&this.table.modules.persistence.save("page")},V.prototype._setPageButtons=function(){for(var e=this,t=Math.floor((this.count-1)/2),o=Math.ceil((this.count-1)/2),i=this.max-this.page+t+1<this.count?this.max-this.count+1:Math.max(this.page-t,1),n=this.page<=o?Math.min(this.count,this.max):Math.min(this.page+o,this.max);e.pagesElement.firstChild;)e.pagesElement.removeChild(e.pagesElement.firstChild);1==e.page?(e.firstBut.disabled=!0,e.prevBut.disabled=!0):(e.firstBut.disabled=!1,e.prevBut.disabled=!1),e.page==e.max?(e.lastBut.disabled=!0,e.nextBut.disabled=!0):(e.lastBut.disabled=!1,e.nextBut.disabled=!1);for(var s=i;s<=n;s++)s>0&&s<=e.max&&e.pagesElement.appendChild(e._generatePageButton(s));this.footerRedraw()},V.prototype._generatePageButton=function(e){var t=this,o=document.createElement("button");return o.classList.add("tabulator-page"),e==t.page&&o.classList.add("active"),o.setAttribute("type","button"),o.setAttribute("role","button"),t.table.modules.localize.bind("pagination|page_title",function(t){o.setAttribute("aria-label",t+" "+e),o.setAttribute("title",t+" "+e)}),o.setAttribute("data-page",e),o.textContent=e,o.addEventListener("click",function(o){t.setPage(e).then(function(){}).catch(function(){})}),o},V.prototype.previousPage=function(){var e=this;return new Promise(function(t,o){e.page>1?(e.page--,e.trigger().then(function(){t()}).catch(function(){o()}),e.table.options.persistence&&e.table.modExists("persistence",!0)&&e.table.modules.persistence.config.page&&e.table.modules.persistence.save("page")):(console.warn("Pagination Error - Previous page would be less than page 1:",0),o())})},V.prototype.nextPage=function(){var e=this;return new Promise(function(t,o){e.page<e.max?(e.page++,e.trigger().then(function(){t()}).catch(function(){o()}),e.table.options.persistence&&e.table.modExists("persistence",!0)&&e.table.modules.persistence.config.page&&e.table.modules.persistence.save("page")):(e.progressiveLoad||console.warn("Pagination Error - Next page would be greater than maximum page of "+e.max+":",e.max+1),o())})},V.prototype.getPage=function(){return this.page},V.prototype.getPageMax=function(){return this.max},V.prototype.getPageSize=function(e){return this.size},V.prototype.getMode=function(){return this.mode},V.prototype.getRows=function(e){var t,o,i;if("local"==this.mode){t=[],!0===this.size?(o=0,i=e.length):(o=this.size*(this.page-1),i=o+parseInt(this.size)),this._setPageButtons();for(var n=o;n<i;n++)e[n]&&t.push(e[n]);return t}return this._setPageButtons(),e.slice(0)},V.prototype.trigger=function(){var e,t=this;return new Promise(function(o,i){switch(t.mode){case"local":e=t.table.rowManager.scrollLeft,t.table.rowManager.refreshActiveData("page"),t.table.rowManager.scrollHorizontal(e),t.table.options.pageLoaded.call(t.table,t.getPage()),o();break;case"remote":case"progressive_load":case"progressive_scroll":t.table.modules.ajax.blockActiveRequest(),t._getRemotePage().then(function(){o()}).catch(function(){i()});break;default:console.warn("Pagination Error - no such pagination mode:",t.mode),i()}})},V.prototype._getRemotePage=function(){var e,t,o=this,i=this;return new Promise(function(n,s){if(i.table.modExists("ajax",!0)||s(),e=h.prototype.helpers.deepClone(i.table.modules.ajax.getParams()||{}),t=i.table.modules.ajax.getParams(),t[o.dataSentNames.page]=i.page,o.size&&(t[o.dataSentNames.size]=o.size),o.table.options.ajaxSorting&&o.table.modExists("sort")){var a=i.table.modules.sort.getSort();a.forEach(function(e){delete e.column}),t[o.dataSentNames.sorters]=a}if(o.table.options.ajaxFiltering&&o.table.modExists("filter")){var r=i.table.modules.filter.getFilters(!0,!0);t[o.dataSentNames.filters]=r}i.table.modules.ajax.setParams(t),i.table.modules.ajax.sendRequest(o.progressiveLoad).then(function(e){i._parseRemoteData(e),n()}).catch(function(e){s()}),i.table.modules.ajax.setParams(e)})},V.prototype._parseRemoteData=function(e){var t,e,o,i=this;if(void 0===e[this.dataReceivedNames.last_page]&&console.warn("Remote Pagination Error - Server response missing '"+this.dataReceivedNames.last_page+"' property"),e[this.dataReceivedNames.data]){if(this.max=parseInt(e[this.dataReceivedNames.last_page])||1,this.progressiveLoad)switch(this.mode){case"progressive_load":1==this.page?this.table.rowManager.setData(e[this.dataReceivedNames.data],!1,this.initialLoad&&1==this.page):this.table.rowManager.addRows(e[this.dataReceivedNames.data]),this.page<this.max&&setTimeout(function(){i.nextPage().then(function(){}).catch(function(){})},i.table.options.ajaxProgressiveLoadDelay);break;case"progressive_scroll":e=this.table.rowManager.getData().concat(e[this.dataReceivedNames.data]),this.table.rowManager.setData(e,!0,this.initialLoad&&1==this.page),o=this.table.options.ajaxProgressiveLoadScrollMargin||2*this.table.rowManager.element.clientHeight,i.table.rowManager.element.scrollHeight<=i.table.rowManager.element.clientHeight+o&&i.nextPage().then(function(){}).catch(function(){})}else t=this.table.rowManager.scrollLeft,this.table.rowManager.setData(e[this.dataReceivedNames.data],!1,this.initialLoad&&1==this.page),this.table.rowManager.scrollHorizontal(t),this.table.columnManager.scrollHorizontal(t),this.table.options.pageLoaded.call(this.table,this.getPage());this.initialLoad=!1}else console.warn("Remote Pagination Error - Server response missing '"+this.dataReceivedNames.data+"' property")},V.prototype.footerRedraw=function(){var e=this.table.footerManager.element;Math.ceil(e.clientWidth)-e.scrollWidth<0?this.pagesElement.style.display="none":(this.pagesElement.style.display="",Math.ceil(e.clientWidth)-e.scrollWidth<0&&(this.pagesElement.style.display="none"))},V.prototype.paginationDataSentNames={page:"page",size:"size",sorters:"sorters",filters:"filters"},V.prototype.paginationDataReceivedNames={current_page:"current_page",last_page:"last_page",data:"data"},h.prototype.registerModule("page",V);var j=function(e){this.table=e,this.mode="",this.id="",this.defWatcherBlock=!1,this.config={},this.readFunc=!1,this.writeFunc=!1};j.prototype.localStorageTest=function(){var e="_tabulator_test";try{return window.localStorage.setItem(e,e),window.localStorage.removeItem(e),!0}catch(e){return!1}},j.prototype.initialize=function(){var e,t=this.table.options.persistenceMode,o=this.table.options.persistenceID;this.mode=!0!==t?t:this.localStorageTest()?"local":"cookie",this.table.options.persistenceReaderFunc?"function"==typeof this.table.options.persistenceReaderFunc?this.readFunc=this.table.options.persistenceReaderFunc:this.readers[this.table.options.persistenceReaderFunc]?this.readFunc=this.readers[this.table.options.persistenceReaderFunc]:console.warn("Persistence Read Error - invalid reader set",this.table.options.persistenceReaderFunc):this.readers[this.mode]?this.readFunc=this.readers[this.mode]:console.warn("Persistence Read Error - invalid reader set",this.mode),this.table.options.persistenceWriterFunc?"function"==typeof this.table.options.persistenceWriterFunc?this.writeFunc=this.table.options.persistenceWriterFunc:this.readers[this.table.options.persistenceWriterFunc]?this.writeFunc=this.readers[this.table.options.persistenceWriterFunc]:console.warn("Persistence Write Error - invalid reader set",this.table.options.persistenceWriterFunc):this.writers[this.mode]?this.writeFunc=this.writers[this.mode]:console.warn("Persistence Write Error - invalid writer set",this.mode),this.id="tabulator-"+(o||this.table.element.getAttribute("id")||""),this.config={sort:!0===this.table.options.persistence||this.table.options.persistence.sort,filter:!0===this.table.options.persistence||this.table.options.persistence.filter,group:!0===this.table.options.persistence||this.table.options.persistence.group,page:!0===this.table.options.persistence||this.table.options.persistence.page,columns:!0===this.table.options.persistence?["title","width","visible"]:this.table.options.persistence.columns},this.config.page&&(e=this.retreiveData("page"))&&(void 0===e.paginationSize||!0!==this.config.page&&!this.config.page.size||(this.table.options.paginationSize=e.paginationSize),void 0===e.paginationInitialPage||!0!==this.config.page&&!this.config.page.page||(this.table.options.paginationInitialPage=e.paginationInitialPage)),this.config.group&&(e=this.retreiveData("group"))&&(void 0===e.groupBy||!0!==this.config.group&&!this.config.group.groupBy||(this.table.options.groupBy=e.groupBy),void 0===e.groupStartOpen||!0!==this.config.group&&!this.config.group.groupStartOpen||(this.table.options.groupStartOpen=e.groupStartOpen),void 0===e.groupHeader||!0!==this.config.group&&!this.config.group.groupHeader||(this.table.options.groupHeader=e.groupHeader))},j.prototype.initializeColumn=function(e){var t,o,i=this;this.config.columns&&(this.defWatcherBlock=!0,t=e.getDefinition(),o=!0===this.config.columns?Object.keys(t):this.config.columns,o.forEach(function(e){var o=Object.getOwnPropertyDescriptor(t,e),n=t[e];o&&Object.defineProperty(t,e,{set:function(e){n=e,i.defWatcherBlock||i.save("columns"),o.set&&o.set(e)},get:function(){return o.get&&o.get(),n}})}),this.defWatcherBlock=!1)},j.prototype.load=function(e,t){var o=this.retreiveData(e);return t&&(o=o?this.mergeDefinition(t,o):t),o},j.prototype.retreiveData=function(e){return!!this.readFunc&&this.readFunc(this.id,e)},j.prototype.mergeDefinition=function(e,t){var o=this,i=[];return t=t||[],t.forEach(function(t,n){var s,a=o._findColumn(e,t);a&&(!0===o.config.columns||void 0==o.config.columns?(s=Object.keys(a),s.push("width")):s=o.config.columns,s.forEach(function(e){void 0!==t[e]&&(a[e]=t[e])}),a.columns&&(a.columns=o.mergeDefinition(a.columns,t.columns)),i.push(a))}),e.forEach(function(e,n){o._findColumn(t,e)||(i.length>n?i.splice(n,0,e):i.push(e))}),i},j.prototype._findColumn=function(e,t){var o=t.columns?"group":t.field?"field":"object";return e.find(function(e){switch(o){case"group":return e.title===t.title&&e.columns.length===t.columns.length;case"field":return e.field===t.field;case"object":return e===t}})},j.prototype.save=function(e){var t={};switch(e){case"columns":t=this.parseColumns(this.table.columnManager.getColumns());break;case"filter":t=this.table.modules.filter.getFilters();break;case"sort":t=this.validateSorters(this.table.modules.sort.getSort());break;case"group":t=this.getGroupConfig();break;case"page":t=this.getPageConfig()}this.writeFunc&&this.writeFunc(this.id,e,t)},j.prototype.validateSorters=function(e){return e.forEach(function(e){e.column=e.field,delete e.field}),e},j.prototype.getGroupConfig=function(){var e={}
+;return this.config.group&&((!0===this.config.group||this.config.group.groupBy)&&(e.groupBy=this.table.options.groupBy),(!0===this.config.group||this.config.group.groupStartOpen)&&(e.groupStartOpen=this.table.options.groupStartOpen),(!0===this.config.group||this.config.group.groupHeader)&&(e.groupHeader=this.table.options.groupHeader)),e},j.prototype.getPageConfig=function(){var e={};return this.config.page&&((!0===this.config.page||this.config.page.size)&&(e.paginationSize=this.table.modules.page.getPageSize()),(!0===this.config.page||this.config.page.page)&&(e.paginationInitialPage=this.table.modules.page.getPage())),e},j.prototype.parseColumns=function(e){var t=this,o=[],i=["headerContextMenu","headerMenu","contextMenu","clickMenu"];return e.forEach(function(e){var n,s={},a=e.getDefinition();e.isGroup?(s.title=a.title,s.columns=t.parseColumns(e.getColumns())):(s.field=e.getField(),!0===t.config.columns||void 0==t.config.columns?(n=Object.keys(a),n.push("width")):n=t.config.columns,n.forEach(function(t){switch(t){case"width":s.width=e.getWidth();break;case"visible":s.visible=e.visible;break;default:"function"!=typeof a[t]&&-1===i.indexOf(t)&&(s[t]=a[t])}})),o.push(s)}),o},j.prototype.readers={local:function(e,t){var o=localStorage.getItem(e+"-"+t);return!!o&&JSON.parse(o)},cookie:function(e,t){var o,i,n=document.cookie,s=e+"-"+t,a=n.indexOf(s+"=");return a>-1&&(n=n.substr(a),o=n.indexOf(";"),o>-1&&(n=n.substr(0,o)),i=n.replace(s+"=","")),!!i&&JSON.parse(i)}},j.prototype.writers={local:function(e,t,o){localStorage.setItem(e+"-"+t,JSON.stringify(o))},cookie:function(e,t,o){var i=new Date;i.setDate(i.getDate()+1e4),document.cookie=e+"-"+t+"="+JSON.stringify(o)+"; expires="+i.toUTCString()}},h.prototype.registerModule("persistence",j);var W=function(e){this.table=e,this.element=!1,this.manualBlock=!1};W.prototype.initialize=function(){window.addEventListener("beforeprint",this.replaceTable.bind(this)),window.addEventListener("afterprint",this.cleanup.bind(this))},W.prototype.replaceTable=function(){this.manualBlock||(this.element=document.createElement("div"),this.element.classList.add("tabulator-print-table"),this.element.appendChild(this.table.modules.export.genereateTable(this.table.options.printConfig,this.table.options.printStyled,this.table.options.printRowRange,"print")),this.table.element.style.display="none",this.table.element.parentNode.insertBefore(this.element,this.table.element))},W.prototype.cleanup=function(){document.body.classList.remove("tabulator-print-fullscreen-hide"),this.element&&this.element.parentNode&&(this.element.parentNode.removeChild(this.element),this.table.element.style.display="")},W.prototype.printFullscreen=function(e,t,o){var i,n,s=window.scrollX,a=window.scrollY,r=document.createElement("div"),l=document.createElement("div"),c=this.table.modules.export.genereateTable(void 0!==o?o:this.table.options.printConfig,void 0!==t?t:this.table.options.printStyled,e,"print");this.manualBlock=!0,this.element=document.createElement("div"),this.element.classList.add("tabulator-print-fullscreen"),this.table.options.printHeader&&(r.classList.add("tabulator-print-header"),i="function"==typeof this.table.options.printHeader?this.table.options.printHeader.call(this.table):this.table.options.printHeader,"string"==typeof i?r.innerHTML=i:r.appendChild(i),this.element.appendChild(r)),this.element.appendChild(c),this.table.options.printFooter&&(l.classList.add("tabulator-print-footer"),n="function"==typeof this.table.options.printFooter?this.table.options.printFooter.call(this.table):this.table.options.printFooter,"string"==typeof n?l.innerHTML=n:l.appendChild(n),this.element.appendChild(l)),document.body.classList.add("tabulator-print-fullscreen-hide"),document.body.appendChild(this.element),this.table.options.printFormatter&&this.table.options.printFormatter(this.element,c),window.print(),this.cleanup(),window.scrollTo(s,a),this.manualBlock=!1},h.prototype.registerModule("print",W);var G=function(e){this.table=e,this.data=!1,this.blocked=!1,this.origFuncs={},this.currentVersion=0};G.prototype.watchData=function(e){var t,o=this;this.currentVersion++,t=this.currentVersion,o.unwatchData(),o.data=e,o.origFuncs.push=e.push,Object.defineProperty(o.data,"push",{enumerable:!1,configurable:!0,value:function(){var i=Array.from(arguments);return o.blocked||t!==o.currentVersion||i.forEach(function(e){o.table.rowManager.addRowActual(e,!1)}),o.origFuncs.push.apply(e,arguments)}}),o.origFuncs.unshift=e.unshift,Object.defineProperty(o.data,"unshift",{enumerable:!1,configurable:!0,value:function(){var i=Array.from(arguments);return o.blocked||t!==o.currentVersion||i.forEach(function(e){o.table.rowManager.addRowActual(e,!0)}),o.origFuncs.unshift.apply(e,arguments)}}),o.origFuncs.shift=e.shift,Object.defineProperty(o.data,"shift",{enumerable:!1,configurable:!0,value:function(){var i;return o.blocked||t!==o.currentVersion||o.data.length&&(i=o.table.rowManager.getRowFromDataObject(o.data[0]))&&i.deleteActual(),o.origFuncs.shift.call(e)}}),o.origFuncs.pop=e.pop,Object.defineProperty(o.data,"pop",{enumerable:!1,configurable:!0,value:function(){var i;return o.blocked||t!==o.currentVersion||o.data.length&&(i=o.table.rowManager.getRowFromDataObject(o.data[o.data.length-1]))&&i.deleteActual(),o.origFuncs.pop.call(e)}}),o.origFuncs.splice=e.splice,Object.defineProperty(o.data,"splice",{enumerable:!1,configurable:!0,value:function(){var i,n=Array.from(arguments),s=n[0]<0?e.length+n[0]:n[0],a=n[1],r=!!n[2]&&n.slice(2);if(!o.blocked&&t===o.currentVersion){if(r&&(i=!!e[s]&&o.table.rowManager.getRowFromDataObject(e[s]),i?r.forEach(function(e){o.table.rowManager.addRowActual(e,!0,i,!0)}):(r=r.slice().reverse(),r.forEach(function(e){o.table.rowManager.addRowActual(e,!0,!1,!0)}))),0!==a){var l=e.slice(s,void 0===n[1]?n[1]:s+a);l.forEach(function(e,t){var i=o.table.rowManager.getRowFromDataObject(e);i&&i.deleteActual(t!==l.length-1)})}(r||0!==a)&&o.table.rowManager.reRenderInPosition()}return o.origFuncs.splice.apply(e,arguments)}})},G.prototype.unwatchData=function(){if(!1!==this.data)for(var e in this.origFuncs)Object.defineProperty(this.data,e,{enumerable:!0,configurable:!0,writable:!0,value:this.origFuncs.key})},G.prototype.watchRow=function(e){var t=e.getData();this.blocked=!0;for(var o in t)this.watchKey(e,t,o);this.table.options.dataTree&&this.watchTreeChildren(e),this.blocked=!1},G.prototype.watchTreeChildren=function(e){function t(){o.table.modules.dataTree.initializeRow(e),o.table.modules.dataTree.layoutRow(e),o.table.rowManager.refreshActiveData("tree",!1,!0)}var o=this,i=e.getData()[this.table.options.dataTreeChildField],n={};i&&(n.push=i.push,Object.defineProperty(i,"push",{enumerable:!1,configurable:!0,value:function(){var e=n.push.apply(i,arguments);return t(),e}}),n.unshift=i.unshift,Object.defineProperty(i,"unshift",{enumerable:!1,configurable:!0,value:function(){var e=n.unshift.apply(i,arguments);return t(),e}}),n.shift=i.shift,Object.defineProperty(i,"shift",{enumerable:!1,configurable:!0,value:function(){var e=n.shift.call(i);return t(),e}}),n.pop=i.pop,Object.defineProperty(i,"pop",{enumerable:!1,configurable:!0,value:function(){var e=n.pop.call(i);return t(),e}}),n.splice=i.splice,Object.defineProperty(i,"splice",{enumerable:!1,configurable:!0,value:function(){var e=n.splice.apply(i,arguments);return t(),e}}))},G.prototype.watchKey=function(e,t,o){var i=this,n=Object.getOwnPropertyDescriptor(t,o),s=t[o],a=this.currentVersion;Object.defineProperty(t,o,{set:function(t){if(s=t,!i.blocked&&a===i.currentVersion){var r={};r[o]=t,e.updateData(r)}n.set&&n.set(t)},get:function(){return n.get&&n.get(),s}})},G.prototype.unwatchRow=function(e){var t=e.getData();for(var o in t)Object.defineProperty(t,o,{value:t[o]})},G.prototype.block=function(){this.blocked=!0},G.prototype.unblock=function(){this.blocked=!1},h.prototype.registerModule("reactiveData",G);var U=function(e){this.table=e,this.startColumn=!1,this.startX=!1,this.startWidth=!1,this.handle=null,this.prevHandle=null};U.prototype.initializeColumn=function(e,t,o){var i=this,n=!1,s=this.table.options.resizableColumns;if("header"===e&&(n="textarea"==t.definition.formatter||t.definition.variableHeight,t.modules.resize={variableHeight:n}),!0===s||s==e){var a=document.createElement("div");a.className="tabulator-col-resize-handle";var r=document.createElement("div");r.className="tabulator-col-resize-handle prev",a.addEventListener("click",function(e){e.stopPropagation()});var l=function(e){var o=t.getLastColumn();o&&i._checkResizability(o)&&(i.startColumn=t,i._mouseDown(e,o,a))};a.addEventListener("mousedown",l),a.addEventListener("touchstart",l,{passive:!0}),a.addEventListener("dblclick",function(e){var o=t.getLastColumn();o&&i._checkResizability(o)&&(e.stopPropagation(),o.reinitializeWidth(!0))}),r.addEventListener("click",function(e){e.stopPropagation()});var c=function(e){var o,n,s;(o=t.getFirstColumn())&&(n=i.table.columnManager.findColumnIndex(o),(s=n>0&&i.table.columnManager.getColumnByIndex(n-1))&&i._checkResizability(s)&&(i.startColumn=t,i._mouseDown(e,s,r)))};r.addEventListener("mousedown",c),r.addEventListener("touchstart",c,{passive:!0}),r.addEventListener("dblclick",function(e){var o,n,s;(o=t.getFirstColumn())&&(n=i.table.columnManager.findColumnIndex(o),(s=n>0&&i.table.columnManager.getColumnByIndex(n-1))&&i._checkResizability(s)&&(e.stopPropagation(),s.reinitializeWidth(!0)))}),o.appendChild(a),o.appendChild(r)}},U.prototype._checkResizability=function(e){return void 0!==e.definition.resizable?e.definition.resizable:this.table.options.resizableColumns},U.prototype._mouseDown=function(e,t,o){function i(e){s.table.rtl?t.setWidth(s.startWidth-((void 0===e.screenX?e.touches[0].screenX:e.screenX)-s.startX)):t.setWidth(s.startWidth+((void 0===e.screenX?e.touches[0].screenX:e.screenX)-s.startX)),s.table.options.virtualDomHoz&&s.table.vdomHoz.reinitialize(!0),!s.table.browserSlow&&t.modules.resize&&t.modules.resize.variableHeight&&t.checkCellHeights()}function n(e){s.startColumn.modules.edit&&(s.startColumn.modules.edit.blocked=!1),s.table.browserSlow&&t.modules.resize&&t.modules.resize.variableHeight&&t.checkCellHeights(),document.body.removeEventListener("mouseup",n),document.body.removeEventListener("mousemove",i),o.removeEventListener("touchmove",i),o.removeEventListener("touchend",n),s.table.element.classList.remove("tabulator-block-select"),s.table.options.persistence&&s.table.modExists("persistence",!0)&&s.table.modules.persistence.config.columns&&s.table.modules.persistence.save("columns"),s.table.options.columnResized.call(s.table,t.getComponent())}var s=this;s.table.element.classList.add("tabulator-block-select"),e.stopPropagation(),s.startColumn.modules.edit&&(s.startColumn.modules.edit.blocked=!0),s.startX=void 0===e.screenX?e.touches[0].screenX:e.screenX,s.startWidth=t.getWidth(),document.body.addEventListener("mousemove",i),document.body.addEventListener("mouseup",n),o.addEventListener("touchmove",i,{passive:!0}),o.addEventListener("touchend",n)},h.prototype.registerModule("resizeColumns",U);var X=function(e){this.table=e,this.startColumn=!1,this.startY=!1,this.startHeight=!1,this.handle=null,this.prevHandle=null};X.prototype.initializeRow=function(e){var t=this,o=e.getElement(),i=document.createElement("div");i.className="tabulator-row-resize-handle";var n=document.createElement("div");n.className="tabulator-row-resize-handle prev",i.addEventListener("click",function(e){e.stopPropagation()});var s=function(o){t.startRow=e,t._mouseDown(o,e,i)};i.addEventListener("mousedown",s),i.addEventListener("touchstart",s,{passive:!0}),n.addEventListener("click",function(e){e.stopPropagation()});var a=function(o){var i=t.table.rowManager.prevDisplayRow(e);i&&(t.startRow=i,t._mouseDown(o,i,n))};n.addEventListener("mousedown",a),n.addEventListener("touchstart",a,{passive:!0}),o.appendChild(i),o.appendChild(n)},X.prototype._mouseDown=function(e,t,o){function i(e){t.setHeight(s.startHeight+((void 0===e.screenY?e.touches[0].screenY:e.screenY)-s.startY))}function n(e){document.body.removeEventListener("mouseup",i),document.body.removeEventListener("mousemove",i),o.removeEventListener("touchmove",i),o.removeEventListener("touchend",n),s.table.element.classList.remove("tabulator-block-select"),s.table.options.rowResized.call(this.table,t.getComponent())}var s=this;s.table.element.classList.add("tabulator-block-select"),e.stopPropagation(),s.startY=void 0===e.screenY?e.touches[0].screenY:e.screenY,s.startHeight=t.getHeight(),document.body.addEventListener("mousemove",i),document.body.addEventListener("mouseup",n),o.addEventListener("touchmove",i,{passive:!0}),o.addEventListener("touchend",n)},h.prototype.registerModule("resizeRows",X);var Y=function(e){this.table=e,this.binding=!1,this.observer=!1,this.containerObserver=!1,this.tableHeight=0,this.tableWidth=0,this.containerHeight=0,this.containerWidth=0,this.autoResize=!1};Y.prototype.initialize=function(e){var t,o=this,i=this.table;this.tableHeight=i.element.clientHeight,this.tableWidth=i.element.clientWidth,i.element.parentNode&&(this.containerHeight=i.element.parentNode.clientHeight,this.containerWidth=i.element.parentNode.clientWidth),"undefined"!=typeof ResizeObserver&&"virtual"===i.rowManager.getRenderMode()?(this.autoResize=!0,this.observer=new ResizeObserver(function(e){if(!i.browserMobile||i.browserMobile&&!i.modules.edit.currentCell){var t=Math.floor(e[0].contentRect.height),n=Math.floor(e[0].contentRect.width);o.tableHeight==t&&o.tableWidth==n||(o.tableHeight=t,o.tableWidth=n,i.element.parentNode&&(o.containerHeight=i.element.parentNode.clientHeight,o.containerWidth=i.element.parentNode.clientWidth),i.options.virtualDomHoz&&i.vdomHoz.reinitialize(!0),i.redraw())}}),this.observer.observe(i.element),t=window.getComputedStyle(i.element),this.table.element.parentNode&&!this.table.rowManager.fixedHeight&&(t.getPropertyValue("max-height")||t.getPropertyValue("min-height"))&&(this.containerObserver=new ResizeObserver(function(e){if(!i.browserMobile||i.browserMobile&&!i.modules.edit.currentCell){var t=Math.floor(e[0].contentRect.height),n=Math.floor(e[0].contentRect.width);o.containerHeight==t&&o.containerWidth==n||(o.containerHeight=t,o.containerWidth=n,o.tableHeight=i.element.clientHeight,o.tableWidth=i.element.clientWidth),i.options.virtualDomHoz&&i.vdomHoz.reinitialize(!0),i.redraw()}}),this.containerObserver.observe(this.table.element.parentNode))):(this.binding=function(){(!i.browserMobile||i.browserMobile&&!i.modules.edit.currentCell)&&(i.options.virtualDomHoz&&i.vdomHoz.reinitialize(!0),i.redraw())},window.addEventListener("resize",this.binding))},Y.prototype.clearBindings=function(e){this.binding&&window.removeEventListener("resize",this.binding),this.observer&&this.observer.unobserve(this.table.element),this.containerObserver&&this.containerObserver.unobserve(this.table.element.parentNode)},h.prototype.registerModule("resizeTable",Y);var q=function(e){this.table=e,this.columns=[],this.hiddenColumns=[],this.mode="",this.index=0,this.collapseFormatter=[],this.collapseStartOpen=!0,this.collapseHandleColumn=!1};q.prototype.initialize=function(){var e=this,t=[];this.mode=this.table.options.responsiveLayout,this.collapseFormatter=this.table.options.responsiveLayoutCollapseFormatter||this.formatCollapsedData,this.collapseStartOpen=this.table.options.responsiveLayoutCollapseStartOpen,this.hiddenColumns=[],this.table.columnManager.columnsByIndex.forEach(function(o,i){o.modules.responsive&&o.modules.responsive.order&&o.modules.responsive.visible&&(o.modules.responsive.index=i,t.push(o),o.visible||"collapse"!==e.mode||e.hiddenColumns.push(o))}),t=t.reverse(),t=t.sort(function(e,t){return t.modules.responsive.order-e.modules.responsive.order||t.modules.responsive.index-e.modules.responsive.index}),this.columns=t,"collapse"===this.mode&&this.generateCollapsedContent();for(var o=this.table.columnManager.columnsByIndex,i=Array.isArray(o),n=0,o=i?o:o[Symbol.iterator]();;){var s;if(i){if(n>=o.length)break;s=o[n++]}else{if(n=o.next(),n.done)break;s=n.value}var a=s;if("responsiveCollapse"==a.definition.formatter){this.collapseHandleColumn=a;break}}this.collapseHandleColumn&&(this.hiddenColumns.length?this.collapseHandleColumn.show():this.collapseHandleColumn.hide())},q.prototype.initializeColumn=function(e){var t=e.getDefinition();e.modules.responsive={order:void 0===t.responsive?1:t.responsive,visible:!1!==t.visible}},q.prototype.initializeRow=function(e){var t;"calc"!==e.type&&(t=document.createElement("div"),t.classList.add("tabulator-responsive-collapse"),e.modules.responsiveLayout={element:t,open:this.collapseStartOpen},this.collapseStartOpen||(t.style.display="none"))},q.prototype.layoutRow=function(e){var t=e.getElement();e.modules.responsiveLayout&&(t.appendChild(e.modules.responsiveLayout.element),this.generateCollapsedRowContent(e))},q.prototype.updateColumnVisibility=function(e,t){e.modules.responsive&&(e.modules.responsive.visible=t,this.initialize())},q.prototype.hideColumn=function(e){var t=this.hiddenColumns.length;e.hide(!1,!0),"collapse"===this.mode&&(this.hiddenColumns.unshift(e),this.generateCollapsedContent(),this.collapseHandleColumn&&!t&&this.collapseHandleColumn.show())},q.prototype.showColumn=function(e){var t;e.show(!1,!0),e.setWidth(e.getWidth()),"collapse"===this.mode&&(t=this.hiddenColumns.indexOf(e),t>-1&&this.hiddenColumns.splice(t,1),this.generateCollapsedContent(),this.collapseHandleColumn&&!this.hiddenColumns.length&&this.collapseHandleColumn.hide())},q.prototype.update=function(){for(var e=this,t=!0;t;){var o="fitColumns"==e.table.modules.layout.getMode()?e.table.columnManager.getFlexBaseWidth():e.table.columnManager.getWidth(),i=(e.table.options.headerVisible?e.table.columnManager.element.clientWidth:e.table.element.clientWidth)-o;if(i<0){var n=e.columns[e.index];n?(e.hideColumn(n),e.index++):t=!1}else{var s=e.columns[e.index-1];s&&i>0&&i>=s.getWidth()?(e.showColumn(s),e.index--):t=!1}e.table.rowManager.activeRowsCount||e.table.rowManager.renderEmptyScroll()}},q.prototype.generateCollapsedContent=function(){var e=this;this.table.rowManager.getDisplayRows().forEach(function(t){e.generateCollapsedRowContent(t)})},q.prototype.generateCollapsedRowContent=function(e){var t,o;if(e.modules.responsiveLayout){for(t=e.modules.responsiveLayout.element;t.firstChild;)t.removeChild(t.firstChild);o=this.collapseFormatter(this.generateCollapsedRowData(e)),o&&t.appendChild(o)}},q.prototype.generateCollapsedRowData=function(e){var t,o=this,i=e.getData(),n=[];return this.hiddenColumns.forEach(function(s){var a=s.getFieldValue(i);s.definition.title&&s.field&&(s.modules.format&&o.table.options.responsiveLayoutCollapseUseFormatters?(t={value:!1,data:{},getValue:function(){return a},getData:function(){return i},getElement:function(){return document.createElement("div")},getRow:function(){return e.getComponent()},getColumn:function(){return s.getComponent()}},n.push({title:s.definition.title,value:s.modules.format.formatter.call(o.table.modules.format,t,s.modules.format.params)})):n.push({title:s.definition.title,value:a}))}),n},q.prototype.formatCollapsedData=function(e){var t=document.createElement("table"),o="";return e.forEach(function(e){var t=document.createElement("div");e.value instanceof Node&&(t.appendChild(e.value),e.value=t.innerHTML),o+="<tr><td><strong>"+e.title+"</strong></td><td>"+e.value+"</td></tr>"}),t.innerHTML=o,Object.keys(e).length?t:""},h.prototype.registerModule("responsiveLayout",q);var K=function(e){this.table=e,this.selecting=!1,this.lastClickedRow=!1,this.selectPrev=[],this.selectedRows=[],this.headerCheckboxElement=null};K.prototype.clearSelectionData=function(e){this.selecting=!1,this.lastClickedRow=!1,this.selectPrev=[],this.selectedRows=[],e||this._rowSelectionChanged()},K.prototype.initializeRow=function(e){var t=this,o=e.getElement(),i=function e(){setTimeout(function(){t.selecting=!1},50),document.body.removeEventListener("mouseup",e)};e.modules.select={selected:!1},t.table.options.selectableCheck.call(this.table,e.getComponent())?(o.classList.add("tabulator-selectable"),o.classList.remove("tabulator-unselectable"),t.table.options.selectable&&"highlight"!=t.table.options.selectable&&("click"===t.table.options.selectableRangeMode?o.addEventListener("click",function(o){if(o.shiftKey){t.table._clearSelection(),t.lastClickedRow=t.lastClickedRow||e;var i=t.table.rowManager.getDisplayRowIndex(t.lastClickedRow),n=t.table.rowManager.getDisplayRowIndex(e),s=i<=n?i:n,a=i>=n?i:n,r=t.table.rowManager.getDisplayRows().slice(0),l=r.splice(s,a-s+1);o.ctrlKey||o.metaKey?(l.forEach(function(o){o!==t.lastClickedRow&&(!0===t.table.options.selectable||t.isRowSelected(e)?t.toggleRow(o):t.selectedRows.length<t.table.options.selectable&&t.toggleRow(o))}),t.lastClickedRow=e):(t.deselectRows(void 0,!0),!0!==t.table.options.selectable&&l.length>t.table.options.selectable&&(l=l.slice(0,t.table.options.selectable)),t.selectRows(l)),t.table._clearSelection()}else o.ctrlKey||o.metaKey?(t.toggleRow(e),t.lastClickedRow=e):(t.deselectRows(void 0,!0),t.selectRows(e),t.lastClickedRow=e)}):(o.addEventListener("click",function(o){t.table.modExists("edit")&&t.table.modules.edit.getCurrentCell()||t.table._clearSelection(),t.selecting||t.toggleRow(e)}),o.addEventListener("mousedown",function(o){if(o.shiftKey)return t.table._clearSelection(),t.selecting=!0,t.selectPrev=[],document.body.addEventListener("mouseup",i),document.body.addEventListener("keyup",i),t.toggleRow(e),!1}),o.addEventListener("mouseenter",function(o){t.selecting&&(t.table._clearSelection(),t.toggleRow(e),t.selectPrev[1]==e&&t.toggleRow(t.selectPrev[0]))}),o.addEventListener("mouseout",function(o){t.selecting&&(t.table._clearSelection(),t.selectPrev.unshift(e))})))):(o.classList.add("tabulator-unselectable"),o.classList.remove("tabulator-selectable"))},K.prototype.toggleRow=function(e){this.table.options.selectableCheck.call(this.table,e.getComponent())&&(e.modules.select&&e.modules.select.selected?this._deselectRow(e):this._selectRow(e))},K.prototype.selectRows=function(e){var t,o=this;switch(void 0===e?"undefined":_typeof(e)){case"undefined":this.table.rowManager.rows.forEach(function(e){o._selectRow(e,!0,!0)}),this._rowSelectionChanged();break;case"string":t=this.table.rowManager.findRow(e),t?this._selectRow(t,!0,!0):this.table.rowManager.getRows(e).forEach(function(e){o._selectRow(e,!0,!0)}),this._rowSelectionChanged();break;default:Array.isArray(e)?(e.forEach(function(e){o._selectRow(e,!0,!0)}),this._rowSelectionChanged()):this._selectRow(e,!1,!0)}},K.prototype._selectRow=function(e,t,o){if(!isNaN(this.table.options.selectable)&&!0!==this.table.options.selectable&&!o&&this.selectedRows.length>=this.table.options.selectable){if(!this.table.options.selectableRollingSelection)return!1;this._deselectRow(this.selectedRows[0])}var i=this.table.rowManager.findRow(e);i?-1==this.selectedRows.indexOf(i)&&(i.modules.select||(i.modules.select={}),i.modules.select.selected=!0,i.modules.select.checkboxEl&&(i.modules.select.checkboxEl.checked=!0),i.getElement().classList.add("tabulator-selected"),this.selectedRows.push(i),this.table.options.dataTreeSelectPropagate&&this.childRowSelection(i,!0),t||this.table.options.rowSelected.call(this.table,i.getComponent()),this._rowSelectionChanged(t)):t||console.warn("Selection Error - No such row found, ignoring selection:"+e)},K.prototype.isRowSelected=function(e){return-1!==this.selectedRows.indexOf(e)},K.prototype.deselectRows=function(e,t){var o,i=this;if(void 0===e){o=i.selectedRows.length;for(var n=0;n<o;n++)i._deselectRow(i.selectedRows[0],!0);i._rowSelectionChanged(t)}else Array.isArray(e)?(e.forEach(function(e){i._deselectRow(e,!0)}),i._rowSelectionChanged(t)):i._deselectRow(e,t)},K.prototype._deselectRow=function(e,t){var o,i=this,n=i.table.rowManager.findRow(e);n?(o=i.selectedRows.findIndex(function(e){return e==n}))>-1&&(n.modules.select||(n.modules.select={}),n.modules.select.selected=!1,n.modules.select.checkboxEl&&(n.modules.select.checkboxEl.checked=!1),n.getElement().classList.remove("tabulator-selected"),i.selectedRows.splice(o,1),this.table.options.dataTreeSelectPropagate&&this.childRowSelection(n,!1),t||i.table.options.rowDeselected.call(this.table,n.getComponent()),i._rowSelectionChanged(t)):t||console.warn("Deselection Error - No such row found, ignoring selection:"+e)},K.prototype.getSelectedData=function(){var e=[];return this.selectedRows.forEach(function(t){e.push(t.getData())}),e},K.prototype.getSelectedRows=function(){var e=[];return this.selectedRows.forEach(function(t){e.push(t.getComponent())}),e},K.prototype._rowSelectionChanged=function(e){this.headerCheckboxElement&&(0===this.selectedRows.length?(this.headerCheckboxElement.checked=!1,this.headerCheckboxElement.indeterminate=!1):this.table.rowManager.rows.length===this.selectedRows.length?(this.headerCheckboxElement.checked=!0,this.headerCheckboxElement.indeterminate=!1):(this.headerCheckboxElement.indeterminate=!0,this.headerCheckboxElement.checked=!1)),e||this.table.options.rowSelectionChanged.call(this.table,this.getSelectedData(),this.getSelectedRows())},K.prototype.registerRowSelectCheckbox=function(e,t){e._row.modules.select||(e._row.modules.select={}),e._row.modules.select.checkboxEl=t},K.prototype.registerHeaderSelectCheckbox=function(e){this.headerCheckboxElement=e},K.prototype.childRowSelection=function(e,t){var o=this.table.modules.dataTree.getChildren(e);if(t)for(var i=o,n=Array.isArray(i),s=0,i=n?i:i[Symbol.iterator]();;){var a;if(n){if(s>=i.length)break;a=i[s++]}else{if(s=i.next(),s.done)break;a=s.value}var r=a;this._selectRow(r,!0)}else for(var l=o,c=Array.isArray(l),u=0,l=c?l:l[Symbol.iterator]();;){var d;if(c){if(u>=l.length)break;d=l[u++]}else{if(u=l.next(),u.done)break;d=u.value}var h=d;this._deselectRow(h,!0)}},h.prototype.registerModule("selectRow",K);var J=function(e){this.table=e,this.sortList=[],this.changed=!1};J.prototype.initializeColumn=function(e,t){var o,i,n=this,s=!1;switch(_typeof(e.definition.sorter)){case"string":n.sorters[e.definition.sorter]?s=n.sorters[e.definition.sorter]:console.warn("Sort Error - No such sorter found: ",e.definition.sorter);break;case"function":s=e.definition.sorter}e.modules.sort={sorter:s,dir:"none",params:e.definition.sorterParams||{},startingDir:e.definition.headerSortStartingDir||"asc",tristate:void 0!==e.definition.headerSortTristate?e.definition.headerSortTristate:this.table.options.headerSortTristate},(void 0===e.definition.headerSort?!1!==this.table.options.headerSort:!1!==e.definition.headerSort)&&(o=e.getElement(),o.classList.add("tabulator-sortable"),i=document.createElement("div"),i.classList.add("tabulator-col-sorter"),"object"==_typeof(this.table.options.headerSortElement)?i.appendChild(this.table.options.headerSortElement):i.innerHTML=this.table.options.headerSortElement,t.appendChild(i),e.modules.sort.element=i,o.addEventListener("click",function(t){var o="",i=[],s=!1;if(e.modules.sort){if(e.modules.sort.tristate)o="none"==e.modules.sort.dir?e.modules.sort.startingDir:e.modules.sort.dir==e.modules.sort.startingDir?"asc"==e.modules.sort.dir?"desc":"asc":"none";else switch(e.modules.sort.dir){case"asc":o="desc";break;case"desc":o="asc";break;default:o=e.modules.sort.startingDir}n.table.options.columnHeaderSortMulti&&(t.shiftKey||t.ctrlKey)?(i=n.getSort(),s=i.findIndex(function(t){return t.field===e.getField()}),s>-1?(i[s].dir=o,s!=i.length-1&&(s=i.splice(s,1)[0],"none"!=o&&i.push(s))):"none"!=o&&i.push({column:e,dir:o}),n.setSort(i)):"none"==o?n.clear():n.setSort(e,o),n.table.rowManager.sorterRefresh(!n.sortList.length)}}))},J.prototype.hasChanged=function(){var e=this.changed;return this.changed=!1,e},J.prototype.getSort=function(){var e=this,t=[];return e.sortList.forEach(function(e){e.column&&t.push({column:e.column.getComponent(),field:e.column.getField(),dir:e.dir})}),t},J.prototype.setSort=function(e,t){var o=this,i=[];Array.isArray(e)||(e=[{column:e,dir:t}]),e.forEach(function(e){var t;t=o.table.columnManager.findColumn(e.column),t?(e.column=t,i.push(e),o.changed=!0):console.warn("Sort Warning - Sort field does not exist and is being ignored: ",e.column)}),o.sortList=i,this.table.options.persistence&&this.table.modExists("persistence",!0)&&this.table.modules.persistence.config.sort&&this.table.modules.persistence.save("sort")},J.prototype.clear=function(){this.setSort([])},J.prototype.findSorter=function(e){var t,o=this.table.rowManager.activeRows[0],i="string";if(o&&(o=o.getData(),e.getField()))switch(t=e.getFieldValue(o),void 0===t?"undefined":_typeof(t)){case"undefined":i="string";break;case"boolean":i="boolean";break;default:isNaN(t)||""===t?t.match(/((^[0-9]+[a-z]+)|(^[a-z]+[0-9]+))+$/i)&&(i="alphanum"):i="number"}return this.sorters[i]},J.prototype.sort=function(e){var t=this,o=this.table.options.sortOrderReverse?t.sortList.slice().reverse():t.sortList,i=[],n=[];t.table.options.dataSorting&&t.table.options.dataSorting.call(t.table,t.getSort()),t.clearColumnHeaders(),t.table.options.ajaxSorting?o.forEach(function(e,o){t.setColumnHeader(e.column,e.dir)}):(o.forEach(function(e,o){var n=e.column.modules.sort;e.column&&n&&(n.sorter||(n.sorter=t.findSorter(e.column)),e.params="function"==typeof n.params?n.params(e.column.getComponent(),e.dir):n.params,i.push(e)),t.setColumnHeader(e.column,e.dir)}),i.length&&t._sortItems(e,i)),t.table.options.dataSorted&&(e.forEach(function(e){n.push(e.getComponent())}),t.table.options.dataSorted.call(t.table,t.getSort(),n))},J.prototype.clearColumnHeaders=function(){this.table.columnManager.getRealColumns().forEach(function(e){e.modules.sort&&(e.modules.sort.dir="none",e.getElement().setAttribute("aria-sort","none"))})},J.prototype.setColumnHeader=function(e,t){e.modules.sort.dir=t,e.getElement().setAttribute("aria-sort",t)},J.prototype._sortItems=function(e,t){var o=this,i=t.length-1;e.sort(function(e,n){for(var s,a=i;a>=0;a--){var r=t[a];if(0!==(s=o._sortRow(e,n,r.column,r.dir,r.params)))break}return s})},J.prototype._sortRow=function(e,t,o,i,n){var s,a,r="asc"==i?e:t,l="asc"==i?t:e;return e=o.getFieldValue(r.getData()),t=o.getFieldValue(l.getData()),e=void 0!==e?e:"",t=void 0!==t?t:"",s=r.getComponent(),a=l.getComponent(),o.modules.sort.sorter.call(this,e,t,s,a,o.getComponent(),i,n)},J.prototype.sorters={number:function(e,t,o,i,n,s,a){var r=a.alignEmptyValues,l=a.decimalSeparator||".",c=a.thousandSeparator||",",u=0;if(e=parseFloat(String(e).split(c).join("").split(l).join(".")),t=parseFloat(String(t).split(c).join("").split(l).join(".")),isNaN(e))u=isNaN(t)?0:-1;else{if(!isNaN(t))return e-t;u=1}return("top"===r&&"desc"===s||"bottom"===r&&"asc"===s)&&(u*=-1),u},string:function(e,t,o,i,n,s,a){var r,l=a.alignEmptyValues,c=0;if(e){if(t){switch(_typeof(a.locale)){case"boolean":a.locale&&(r=this.table.modules.localize.getLocale());break;case"string":r=a.locale}return String(e).toLowerCase().localeCompare(String(t).toLowerCase(),r)}c=1}else c=t?-1:0;return("top"===l&&"desc"===s||"bottom"===l&&"asc"===s)&&(c*=-1),c},date:function(e,t,o,i,n,s,a){return a.format||(a.format="DD/MM/YYYY"),this.sorters.datetime.call(this,e,t,o,i,n,s,a)},time:function(e,t,o,i,n,s,a){return a.format||(a.format="HH:mm"),this.sorters.datetime.call(this,e,t,o,i,n,s,a)},datetime:function(e,t,o,i,n,s,a){var r=a.format||"DD/MM/YYYY HH:mm:ss",l=a.alignEmptyValues,c=0;if("undefined"!=typeof moment){if(e=moment(e,r),t=moment(t,r),e.isValid()){if(t.isValid())return e-t;c=1}else c=t.isValid()?-1:0;return("top"===l&&"desc"===s||"bottom"===l&&"asc"===s)&&(c*=-1),c}console.error("Sort Error - 'datetime' sorter is dependant on moment.js")},boolean:function(e,t,o,i,n,s,a){return(!0===e||"true"===e||"True"===e||1===e?1:0)-(!0===t||"true"===t||"True"===t||1===t?1:0)},array:function(e,t,o,i,n,s,a){function r(e){switch(u){case"length":return e.length;case"sum":return e.reduce(function(e,t){return e+t});case"max":return Math.max.apply(null,e);case"min":return Math.min.apply(null,e);case"avg":return e.reduce(function(e,t){return e+t})/e.length}}
+var l=0,c=0,u=a.type||"length",d=a.alignEmptyValues,h=0;if(Array.isArray(e)){if(Array.isArray(t))return l=e?r(e):0,c=t?r(t):0,l-c;d=1}else d=Array.isArray(t)?-1:0;return("top"===d&&"desc"===s||"bottom"===d&&"asc"===s)&&(h*=-1),h},exists:function(e,t,o,i,n,s,a){return(void 0===e?0:1)-(void 0===t?0:1)},alphanum:function(e,t,o,i,n,s,a){var r,l,c,u,d,h=0,p=/(\d+)|(\D+)/g,m=/\d/,f=a.alignEmptyValues,g=0;if(e||0===e){if(t||0===t){if(isFinite(e)&&isFinite(t))return e-t;if(r=String(e).toLowerCase(),l=String(t).toLowerCase(),r===l)return 0;if(!m.test(r)||!m.test(l))return r>l?1:-1;for(r=r.match(p),l=l.match(p),d=r.length>l.length?l.length:r.length;h<d;)if(c=r[h],u=l[h++],c!==u)return isFinite(c)&&isFinite(u)?("0"===c.charAt(0)&&(c="."+c),"0"===u.charAt(0)&&(u="."+u),c-u):c>u?1:-1;return r.length>l.length}g=1}else g=t||0===t?-1:0;return("top"===f&&"desc"===s||"bottom"===f&&"asc"===s)&&(g*=-1),g}},h.prototype.registerModule("sort",J);var $=function(e){this.table=e,this.invalidCells=[]};return $.prototype.initializeColumn=function(e){var t,o=this,i=[];e.definition.validator&&(Array.isArray(e.definition.validator)?e.definition.validator.forEach(function(e){(t=o._extractValidator(e))&&i.push(t)}):(t=this._extractValidator(e.definition.validator))&&i.push(t),e.modules.validate=!!i.length&&i)},$.prototype._extractValidator=function(e){var t,o,i;switch(void 0===e?"undefined":_typeof(e)){case"string":return i=e.indexOf(":"),i>-1?(t=e.substring(0,i),o=e.substring(i+1)):t=e,this._buildValidator(t,o);case"function":return this._buildValidator(e);case"object":return this._buildValidator(e.type,e.parameters)}},$.prototype._buildValidator=function(e,t){var o="function"==typeof e?e:this.validators[e];return o?{type:"function"==typeof e?"function":e,func:o,params:t}:(console.warn("Validator Setup Error - No matching validator found:",e),!1)},$.prototype.validate=function(e,t,o){var i=this,n=[],s=this.invalidCells.indexOf(t);return e&&e.forEach(function(e){e.func.call(i,t.getComponent(),o,e.params)||n.push({type:e.type,parameters:e.params})}),n=!n.length||n,t.modules.validate||(t.modules.validate={}),!0===n?(t.modules.validate.invalid=!1,t.getElement().classList.remove("tabulator-validation-fail"),s>-1&&this.invalidCells.splice(s,1)):(t.modules.validate.invalid=!0,"manual"!==this.table.options.validationMode&&t.getElement().classList.add("tabulator-validation-fail"),-1==s&&this.invalidCells.push(t)),n},$.prototype.getInvalidCells=function(){var e=[];return this.invalidCells.forEach(function(t){e.push(t.getComponent())}),e},$.prototype.clearValidation=function(e){var t;e.modules.validate&&e.modules.validate.invalid&&(e.getElement().classList.remove("tabulator-validation-fail"),e.modules.validate.invalid=!1,(t=this.invalidCells.indexOf(e))>-1&&this.invalidCells.splice(t,1))},$.prototype.validators={integer:function(e,t,o){return""===t||null===t||void 0===t||"number"==typeof(t=Number(t))&&isFinite(t)&&Math.floor(t)===t},float:function(e,t,o){return""===t||null===t||void 0===t||"number"==typeof(t=Number(t))&&isFinite(t)&&t%1!=0},numeric:function(e,t,o){return""===t||null===t||void 0===t||!isNaN(t)},string:function(e,t,o){return""===t||null===t||void 0===t||isNaN(t)},max:function(e,t,o){return""===t||null===t||void 0===t||parseFloat(t)<=o},min:function(e,t,o){return""===t||null===t||void 0===t||parseFloat(t)>=o},starts:function(e,t,o){return""===t||null===t||void 0===t||String(t).toLowerCase().startsWith(String(o).toLowerCase())},ends:function(e,t,o){return""===t||null===t||void 0===t||String(t).toLowerCase().endsWith(String(o).toLowerCase())},minLength:function(e,t,o){return""===t||null===t||void 0===t||String(t).length>=o},maxLength:function(e,t,o){return""===t||null===t||void 0===t||String(t).length<=o},in:function(e,t,o){return""===t||null===t||void 0===t||("string"==typeof o&&(o=o.split("|")),""===t||o.indexOf(t)>-1)},regex:function(e,t,o){return""===t||null===t||void 0===t||new RegExp(o).test(t)},unique:function(e,t,o){if(""===t||null===t||void 0===t)return!0;var i=!0,n=e.getData(),s=e.getColumn()._getSelf();return this.table.rowManager.rows.forEach(function(e){var o=e.getData();o!==n&&t==s.getFieldValue(o)&&(i=!1)}),i},required:function(e,t,o){return""!==t&&null!==t&&void 0!==t}},h.prototype.registerModule("validate",$),h});
\ No newline at end of file
diff --git a/website/js/vendor/tabulator/js/tabulator_core.js b/website/js/vendor/tabulator/js/tabulator_core.js
new file mode 100644 (file)
index 0000000..63ce7bc
--- /dev/null
@@ -0,0 +1,9636 @@
+/* Tabulator v4.8.3 (c) Oliver Folkerd */
+
+'use strict';
+
+// https://tc39.github.io/ecma262/#sec-array.prototype.findIndex
+
+var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
+
+if (!Array.prototype.findIndex) {
+
+       Object.defineProperty(Array.prototype, 'findIndex', {
+
+               value: function value(predicate) {
+
+                       // 1. Let O be ? ToObject(this value).
+
+                       if (this == null) {
+
+                               throw new TypeError('"this" is null or not defined');
+                       }
+
+                       var o = Object(this);
+
+                       // 2. Let len be ? ToLength(? Get(O, "length")).
+
+                       var len = o.length >>> 0;
+
+                       // 3. If IsCallable(predicate) is false, throw a TypeError exception.
+
+                       if (typeof predicate !== 'function') {
+
+                               throw new TypeError('predicate must be a function');
+                       }
+
+                       // 4. If thisArg was supplied, let T be thisArg; else let T be undefined.
+
+                       var thisArg = arguments[1];
+
+                       // 5. Let k be 0.
+
+                       var k = 0;
+
+                       // 6. Repeat, while k < len
+
+                       while (k < len) {
+
+                               // a. Let Pk be ! ToString(k).
+
+                               // b. Let kValue be ? Get(O, Pk).
+
+                               // c. Let testResult be ToBoolean(? Call(predicate, T, « kValue, k, O »)).
+
+                               // d. If testResult is true, return k.
+
+                               var kValue = o[k];
+
+                               if (predicate.call(thisArg, kValue, k, o)) {
+
+                                       return k;
+                               }
+
+                               // e. Increase k by 1.
+
+                               k++;
+                       }
+
+                       // 7. Return -1.
+
+                       return -1;
+               }
+
+       });
+}
+
+// https://tc39.github.io/ecma262/#sec-array.prototype.find
+
+if (!Array.prototype.find) {
+
+       Object.defineProperty(Array.prototype, 'find', {
+
+               value: function value(predicate) {
+
+                       // 1. Let O be ? ToObject(this value).
+
+                       if (this == null) {
+
+                               throw new TypeError('"this" is null or not defined');
+                       }
+
+                       var o = Object(this);
+
+                       // 2. Let len be ? ToLength(? Get(O, "length")).
+
+                       var len = o.length >>> 0;
+
+                       // 3. If IsCallable(predicate) is false, throw a TypeError exception.
+
+                       if (typeof predicate !== 'function') {
+
+                               throw new TypeError('predicate must be a function');
+                       }
+
+                       // 4. If thisArg was supplied, let T be thisArg; else let T be undefined.
+
+                       var thisArg = arguments[1];
+
+                       // 5. Let k be 0.
+
+                       var k = 0;
+
+                       // 6. Repeat, while k < len
+
+                       while (k < len) {
+
+                               // a. Let Pk be ! ToString(k).
+
+                               // b. Let kValue be ? Get(O, Pk).
+
+                               // c. Let testResult be ToBoolean(? Call(predicate, T, « kValue, k, O »)).
+
+                               // d. If testResult is true, return kValue.
+
+                               var kValue = o[k];
+
+                               if (predicate.call(thisArg, kValue, k, o)) {
+
+                                       return kValue;
+                               }
+
+                               // e. Increase k by 1.
+
+                               k++;
+                       }
+
+                       // 7. Return undefined.
+
+                       return undefined;
+               }
+
+       });
+}
+
+// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/includes#Polyfill
+
+if (!String.prototype.includes) {
+
+       String.prototype.includes = function (search, start) {
+
+               'use strict';
+
+               if (search instanceof RegExp) {
+
+                       throw TypeError('first argument must not be a RegExp');
+               }
+
+               if (start === undefined) {
+                       start = 0;
+               }
+
+               return this.indexOf(search, start) !== -1;
+       };
+}
+
+// https://tc39.github.io/ecma262/#sec-array.prototype.includes
+
+if (!Array.prototype.includes) {
+
+       Object.defineProperty(Array.prototype, 'includes', {
+
+               value: function value(searchElement, fromIndex) {
+
+                       if (this == null) {
+
+                               throw new TypeError('"this" is null or not defined');
+                       }
+
+                       // 1. Let O be ? ToObject(this value).
+
+                       var o = Object(this);
+
+                       // 2. Let len be ? ToLength(? Get(O, "length")).
+
+                       var len = o.length >>> 0;
+
+                       // 3. If len is 0, return false.
+
+                       if (len === 0) {
+
+                               return false;
+                       }
+
+                       // 4. Let n be ? ToInteger(fromIndex).
+
+                       //    (If fromIndex is undefined, this step produces the value 0.)
+
+                       var n = fromIndex | 0;
+
+                       // 5. If n ≥ 0, then
+
+                       //  a. Let k be n.
+
+                       // 6. Else n < 0,
+
+                       //  a. Let k be len + n.
+
+                       //  b. If k < 0, let k be 0.
+
+                       var k = Math.max(n >= 0 ? n : len - Math.abs(n), 0);
+
+                       function sameValueZero(x, y) {
+
+                               return x === y || typeof x === 'number' && typeof y === 'number' && isNaN(x) && isNaN(y);
+                       }
+
+                       // 7. Repeat, while k < len
+
+                       while (k < len) {
+
+                               // a. Let elementK be the result of ? Get(O, ! ToString(k)).
+
+                               // b. If SameValueZero(searchElement, elementK) is true, return true.
+
+                               if (sameValueZero(o[k], searchElement)) {
+
+                                       return true;
+                               }
+
+                               // c. Increase k by 1.
+
+                               k++;
+                       }
+
+                       // 8. Return false
+
+                       return false;
+               }
+
+       });
+}
+
+// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign#Polyfill
+
+if (typeof Object.assign !== 'function') {
+
+       // Must be writable: true, enumerable: false, configurable: true
+
+       Object.defineProperty(Object, "assign", {
+
+               value: function assign(target, varArgs) {
+                       // .length of function is 2
+
+                       'use strict';
+
+                       if (target === null || target === undefined) {
+
+                               throw new TypeError('Cannot convert undefined or null to object');
+                       }
+
+                       var to = Object(target);
+
+                       for (var index = 1; index < arguments.length; index++) {
+
+                               var nextSource = arguments[index];
+
+                               if (nextSource !== null && nextSource !== undefined) {
+
+                                       for (var nextKey in nextSource) {
+
+                                               // Avoid bugs when hasOwnProperty is shadowed
+
+                                               if (Object.prototype.hasOwnProperty.call(nextSource, nextKey)) {
+
+                                                       to[nextKey] = nextSource[nextKey];
+                                               }
+                                       }
+                               }
+                       }
+
+                       return to;
+               },
+
+               writable: true,
+
+               configurable: true
+
+       });
+}
+
+var ColumnManager = function ColumnManager(table) {
+
+       this.table = table; //hold parent table
+
+       this.blockHozScrollEvent = false;
+
+       this.headersElement = this.createHeadersElement();
+
+       this.element = this.createHeaderElement(); //containing element
+
+       this.rowManager = null; //hold row manager object
+
+       this.columns = []; // column definition object
+
+       this.columnsByIndex = []; //columns by index
+
+       this.columnsByField = {}; //columns by field
+
+       this.scrollLeft = 0;
+
+       this.element.insertBefore(this.headersElement, this.element.firstChild);
+};
+
+////////////// Setup Functions /////////////////
+
+
+ColumnManager.prototype.createHeadersElement = function () {
+
+       var el = document.createElement("div");
+
+       el.classList.add("tabulator-headers");
+
+       return el;
+};
+
+ColumnManager.prototype.createHeaderElement = function () {
+
+       var el = document.createElement("div");
+
+       el.classList.add("tabulator-header");
+
+       if (!this.table.options.headerVisible) {
+
+               el.classList.add("tabulator-header-hidden");
+       }
+
+       return el;
+};
+
+ColumnManager.prototype.initialize = function () {
+
+       var self = this;
+
+       //scroll body along with header
+
+       // self.element.addEventListener("scroll", function(e){
+
+       //      if(!self.blockHozScrollEvent){
+
+       //              self.table.rowManager.scrollHorizontal(self.element.scrollLeft);
+
+       //      }
+
+       // });
+};
+
+//link to row manager
+
+ColumnManager.prototype.setRowManager = function (manager) {
+
+       this.rowManager = manager;
+};
+
+//return containing element
+
+ColumnManager.prototype.getElement = function () {
+
+       return this.element;
+};
+
+//return header containing element
+
+ColumnManager.prototype.getHeadersElement = function () {
+
+       return this.headersElement;
+};
+
+// ColumnManager.prototype.tempScrollBlock = function(){
+
+//     clearTimeout(this.blockHozScrollEvent);
+
+//     this.blockHozScrollEvent = setTimeout(() => {this.blockHozScrollEvent = false;}, 50);
+
+// }
+
+
+//scroll horizontally to match table body
+
+ColumnManager.prototype.scrollHorizontal = function (left) {
+
+       var hozAdjust = 0,
+           scrollWidth = this.element.scrollWidth - this.table.element.clientWidth;
+
+       // this.tempScrollBlock();
+
+       this.element.scrollLeft = left;
+
+       //adjust for vertical scrollbar moving table when present
+
+       if (left > scrollWidth) {
+
+               hozAdjust = left - scrollWidth;
+
+               this.element.style.marginLeft = -hozAdjust + "px";
+       } else {
+
+               this.element.style.marginLeft = 0;
+       }
+
+       //keep frozen columns fixed in position
+
+       //this._calcFrozenColumnsPos(hozAdjust + 3);
+
+
+       this.scrollLeft = left;
+
+       if (this.table.modExists("frozenColumns")) {
+
+               this.table.modules.frozenColumns.scrollHorizontal();
+       }
+};
+
+///////////// Column Setup Functions /////////////
+
+
+ColumnManager.prototype.generateColumnsFromRowData = function (data) {
+
+       var cols = [],
+           definitions = this.table.options.autoColumnsDefinitions,
+           row,
+           sorter;
+
+       if (data && data.length) {
+
+               row = data[0];
+
+               for (var key in row) {
+
+                       var col = {
+
+                               field: key,
+
+                               title: key
+
+                       };
+
+                       var value = row[key];
+
+                       switch (typeof value === 'undefined' ? 'undefined' : _typeof(value)) {
+
+                               case "undefined":
+
+                                       sorter = "string";
+
+                                       break;
+
+                               case "boolean":
+
+                                       sorter = "boolean";
+
+                                       break;
+
+                               case "object":
+
+                                       if (Array.isArray(value)) {
+
+                                               sorter = "array";
+                                       } else {
+
+                                               sorter = "string";
+                                       }
+
+                                       break;
+
+                               default:
+
+                                       if (!isNaN(value) && value !== "") {
+
+                                               sorter = "number";
+                                       } else {
+
+                                               if (value.match(/((^[0-9]+[a-z]+)|(^[a-z]+[0-9]+))+$/i)) {
+
+                                                       sorter = "alphanum";
+                                               } else {
+
+                                                       sorter = "string";
+                                               }
+                                       }
+
+                                       break;
+
+                       }
+
+                       col.sorter = sorter;
+
+                       cols.push(col);
+               }
+
+               if (definitions) {
+
+                       switch (typeof definitions === 'undefined' ? 'undefined' : _typeof(definitions)) {
+
+                               case "function":
+
+                                       this.table.options.columns = definitions.call(this.table, cols);
+
+                                       break;
+
+                               case "object":
+
+                                       if (Array.isArray(definitions)) {
+
+                                               cols.forEach(function (col) {
+
+                                                       var match = definitions.find(function (def) {
+
+                                                               return def.field === col.field;
+                                                       });
+
+                                                       if (match) {
+
+                                                               Object.assign(col, match);
+                                                       }
+                                               });
+                                       } else {
+
+                                               cols.forEach(function (col) {
+
+                                                       if (definitions[col.field]) {
+
+                                                               Object.assign(col, definitions[col.field]);
+                                                       }
+                                               });
+                                       }
+
+                                       this.table.options.columns = cols;
+
+                                       break;
+
+                       }
+               } else {
+
+                       this.table.options.columns = cols;
+               }
+
+               this.setColumns(this.table.options.columns);
+       }
+};
+
+ColumnManager.prototype.setColumns = function (cols, row) {
+
+       var self = this;
+
+       while (self.headersElement.firstChild) {
+               self.headersElement.removeChild(self.headersElement.firstChild);
+       }self.columns = [];
+
+       self.columnsByIndex = [];
+
+       self.columnsByField = {};
+
+       //reset frozen columns
+
+       if (self.table.modExists("frozenColumns")) {
+
+               self.table.modules.frozenColumns.reset();
+       }
+
+       cols.forEach(function (def, i) {
+
+               self._addColumn(def);
+       });
+
+       self._reIndexColumns();
+
+       if (self.table.options.responsiveLayout && self.table.modExists("responsiveLayout", true)) {
+
+               self.table.modules.responsiveLayout.initialize();
+       }
+
+       if (this.table.options.virtualDomHoz) {
+
+               this.table.vdomHoz.reinitialize(false, true);
+       }
+
+       self.redraw(true);
+};
+
+ColumnManager.prototype._addColumn = function (definition, before, nextToColumn) {
+
+       var column = new Column(definition, this),
+           colEl = column.getElement(),
+           index = nextToColumn ? this.findColumnIndex(nextToColumn) : nextToColumn;
+
+       if (nextToColumn && index > -1) {
+
+               var parentIndex = this.columns.indexOf(nextToColumn.getTopColumn());
+
+               var nextEl = nextToColumn.getElement();
+
+               if (before) {
+
+                       this.columns.splice(parentIndex, 0, column);
+
+                       nextEl.parentNode.insertBefore(colEl, nextEl);
+               } else {
+
+                       this.columns.splice(parentIndex + 1, 0, column);
+
+                       nextEl.parentNode.insertBefore(colEl, nextEl.nextSibling);
+               }
+       } else {
+
+               if (before) {
+
+                       this.columns.unshift(column);
+
+                       this.headersElement.insertBefore(column.getElement(), this.headersElement.firstChild);
+               } else {
+
+                       this.columns.push(column);
+
+                       this.headersElement.appendChild(column.getElement());
+               }
+
+               column.columnRendered();
+       }
+
+       return column;
+};
+
+ColumnManager.prototype.registerColumnField = function (col) {
+
+       if (col.definition.field) {
+
+               this.columnsByField[col.definition.field] = col;
+       }
+};
+
+ColumnManager.prototype.registerColumnPosition = function (col) {
+
+       this.columnsByIndex.push(col);
+};
+
+ColumnManager.prototype._reIndexColumns = function () {
+
+       this.columnsByIndex = [];
+
+       this.columns.forEach(function (column) {
+
+               column.reRegisterPosition();
+       });
+};
+
+//ensure column headers take up the correct amount of space in column groups
+
+ColumnManager.prototype._verticalAlignHeaders = function () {
+
+       var self = this,
+           minHeight = 0;
+
+       self.columns.forEach(function (column) {
+
+               var height;
+
+               column.clearVerticalAlign();
+
+               height = column.getHeight();
+
+               if (height > minHeight) {
+
+                       minHeight = height;
+               }
+       });
+
+       self.columns.forEach(function (column) {
+
+               column.verticalAlign(self.table.options.columnHeaderVertAlign, minHeight);
+       });
+
+       self.rowManager.adjustTableSize();
+};
+
+//////////////// Column Details /////////////////
+
+
+ColumnManager.prototype.findColumn = function (subject) {
+
+       var self = this;
+
+       if ((typeof subject === 'undefined' ? 'undefined' : _typeof(subject)) == "object") {
+
+               if (subject instanceof Column) {
+
+                       //subject is column element
+
+                       return subject;
+               } else if (subject instanceof ColumnComponent) {
+
+                       //subject is public column component
+
+                       return subject._getSelf() || false;
+               } else if (typeof HTMLElement !== "undefined" && subject instanceof HTMLElement) {
+
+                       //subject is a HTML element of the column header
+
+                       var match = self.columns.find(function (column) {
+
+                               return column.element === subject;
+                       });
+
+                       return match || false;
+               }
+       } else {
+
+               //subject should be treated as the field name of the column
+
+               return this.columnsByField[subject] || false;
+       }
+
+       //catch all for any other type of input
+
+
+       return false;
+};
+
+ColumnManager.prototype.getColumnByField = function (field) {
+
+       return this.columnsByField[field];
+};
+
+ColumnManager.prototype.getColumnsByFieldRoot = function (root) {
+       var _this = this;
+
+       var matches = [];
+
+       Object.keys(this.columnsByField).forEach(function (field) {
+
+               var fieldRoot = field.split(".")[0];
+
+               if (fieldRoot === root) {
+
+                       matches.push(_this.columnsByField[field]);
+               }
+       });
+
+       return matches;
+};
+
+ColumnManager.prototype.getColumnByIndex = function (index) {
+
+       return this.columnsByIndex[index];
+};
+
+ColumnManager.prototype.getFirstVisibileColumn = function (index) {
+
+       var index = this.columnsByIndex.findIndex(function (col) {
+
+               return col.visible;
+       });
+
+       return index > -1 ? this.columnsByIndex[index] : false;
+};
+
+ColumnManager.prototype.getColumns = function () {
+
+       return this.columns;
+};
+
+ColumnManager.prototype.findColumnIndex = function (column) {
+
+       return this.columnsByIndex.findIndex(function (col) {
+
+               return column === col;
+       });
+};
+
+//return all columns that are not groups
+
+ColumnManager.prototype.getRealColumns = function () {
+
+       return this.columnsByIndex;
+};
+
+//travers across columns and call action
+
+ColumnManager.prototype.traverse = function (callback) {
+
+       var self = this;
+
+       self.columnsByIndex.forEach(function (column, i) {
+
+               callback(column, i);
+       });
+};
+
+//get defintions of actual columns
+
+ColumnManager.prototype.getDefinitions = function (active) {
+
+       var self = this,
+           output = [];
+
+       self.columnsByIndex.forEach(function (column) {
+
+               if (!active || active && column.visible) {
+
+                       output.push(column.getDefinition());
+               }
+       });
+
+       return output;
+};
+
+//get full nested definition tree
+
+ColumnManager.prototype.getDefinitionTree = function () {
+
+       var self = this,
+           output = [];
+
+       self.columns.forEach(function (column) {
+
+               output.push(column.getDefinition(true));
+       });
+
+       return output;
+};
+
+ColumnManager.prototype.getComponents = function (structured) {
+
+       var self = this,
+           output = [],
+           columns = structured ? self.columns : self.columnsByIndex;
+
+       columns.forEach(function (column) {
+
+               output.push(column.getComponent());
+       });
+
+       return output;
+};
+
+ColumnManager.prototype.getWidth = function () {
+
+       var width = 0;
+
+       this.columnsByIndex.forEach(function (column) {
+
+               if (column.visible) {
+
+                       width += column.getWidth();
+               }
+       });
+
+       return width;
+};
+
+ColumnManager.prototype.moveColumn = function (from, to, after) {
+
+       this.moveColumnActual(from, to, after);
+
+       if (this.table.options.responsiveLayout && this.table.modExists("responsiveLayout", true)) {
+
+               this.table.modules.responsiveLayout.initialize();
+       }
+
+       if (this.table.modExists("columnCalcs")) {
+
+               this.table.modules.columnCalcs.recalc(this.table.rowManager.activeRows);
+       }
+
+       to.element.parentNode.insertBefore(from.element, to.element);
+
+       if (after) {
+
+               to.element.parentNode.insertBefore(to.element, from.element);
+       }
+
+       this._verticalAlignHeaders();
+
+       this.table.rowManager.reinitialize();
+};
+
+ColumnManager.prototype.moveColumnActual = function (from, to, after) {
+
+       if (from.parent.isGroup) {
+
+               this._moveColumnInArray(from.parent.columns, from, to, after);
+       } else {
+
+               this._moveColumnInArray(this.columns, from, to, after);
+       }
+
+       this._moveColumnInArray(this.columnsByIndex, from, to, after, true);
+
+       if (this.table.options.responsiveLayout && this.table.modExists("responsiveLayout", true)) {
+
+               this.table.modules.responsiveLayout.initialize();
+       }
+
+       if (this.table.options.virtualDomHoz) {
+
+               this.table.vdomHoz.reinitialize(true);
+       }
+
+       if (this.table.options.columnMoved) {
+
+               this.table.options.columnMoved.call(this.table, from.getComponent(), this.table.columnManager.getComponents());
+       }
+
+       if (this.table.options.persistence && this.table.modExists("persistence", true) && this.table.modules.persistence.config.columns) {
+
+               this.table.modules.persistence.save("columns");
+       }
+};
+
+ColumnManager.prototype._moveColumnInArray = function (columns, from, to, after, updateRows) {
+       var _this2 = this;
+
+       var fromIndex = columns.indexOf(from),
+           toIndex,
+           rows = [];
+
+       if (fromIndex > -1) {
+
+               columns.splice(fromIndex, 1);
+
+               toIndex = columns.indexOf(to);
+
+               if (toIndex > -1) {
+
+                       if (after) {
+
+                               toIndex = toIndex + 1;
+                       }
+               } else {
+
+                       toIndex = fromIndex;
+               }
+
+               columns.splice(toIndex, 0, from);
+
+               if (updateRows) {
+
+                       if (this.table.options.dataTree && this.table.modExists("dataTree", true)) {
+
+                               this.table.rowManager.rows.forEach(function (row) {
+
+                                       rows = rows.concat(_this2.table.modules.dataTree.getTreeChildren(row, false, true));
+                               });
+                       }
+
+                       rows = rows.concat(this.table.rowManager.rows);
+
+                       rows.forEach(function (row) {
+
+                               if (row.cells.length) {
+
+                                       var cell = row.cells.splice(fromIndex, 1)[0];
+
+                                       row.cells.splice(toIndex, 0, cell);
+                               }
+                       });
+               }
+       }
+};
+
+ColumnManager.prototype.scrollToColumn = function (column, position, ifVisible) {
+       var _this3 = this;
+
+       var left = 0,
+           offset = 0,
+           adjust = 0,
+           colEl = column.getElement();
+
+       return new Promise(function (resolve, reject) {
+
+               if (typeof position === "undefined") {
+
+                       position = _this3.table.options.scrollToColumnPosition;
+               }
+
+               if (typeof ifVisible === "undefined") {
+
+                       ifVisible = _this3.table.options.scrollToColumnIfVisible;
+               }
+
+               if (column.visible) {
+
+                       //align to correct position
+
+                       switch (position) {
+
+                               case "middle":
+
+                               case "center":
+
+                                       adjust = -_this3.element.clientWidth / 2;
+
+                                       break;
+
+                               case "right":
+
+                                       adjust = colEl.clientWidth - _this3.headersElement.clientWidth;
+
+                                       break;
+
+                       }
+
+                       //check column visibility
+
+                       if (!ifVisible) {
+
+                               offset = colEl.offsetLeft;
+
+                               if (offset > 0 && offset + colEl.offsetWidth < _this3.element.clientWidth) {
+
+                                       return false;
+                               }
+                       }
+
+                       //calculate scroll position
+
+                       left = colEl.offsetLeft + adjust;
+
+                       left = Math.max(Math.min(left, _this3.table.rowManager.element.scrollWidth - _this3.table.rowManager.element.clientWidth), 0);
+
+                       _this3.table.rowManager.scrollHorizontal(left);
+
+                       _this3.scrollHorizontal(left);
+
+                       resolve();
+               } else {
+
+                       console.warn("Scroll Error - Column not visible");
+
+                       reject("Scroll Error - Column not visible");
+               }
+       });
+};
+
+//////////////// Cell Management /////////////////
+
+
+ColumnManager.prototype.generateCells = function (row) {
+
+       var self = this;
+
+       var cells = [];
+
+       self.columnsByIndex.forEach(function (column) {
+
+               cells.push(column.generateCell(row));
+       });
+
+       return cells;
+};
+
+//////////////// Column Management /////////////////
+
+
+ColumnManager.prototype.getFlexBaseWidth = function () {
+
+       var self = this,
+           totalWidth = self.table.element.clientWidth,
+           //table element width
+
+       fixedWidth = 0;
+
+       //adjust for vertical scrollbar if present
+
+       if (self.rowManager.element.scrollHeight > self.rowManager.element.clientHeight) {
+
+               totalWidth -= self.rowManager.element.offsetWidth - self.rowManager.element.clientWidth;
+       }
+
+       this.columnsByIndex.forEach(function (column) {
+
+               var width, minWidth, colWidth;
+
+               if (column.visible) {
+
+                       width = column.definition.width || 0;
+
+                       minWidth = typeof column.minWidth == "undefined" ? self.table.options.columnMinWidth : parseInt(column.minWidth);
+
+                       if (typeof width == "string") {
+
+                               if (width.indexOf("%") > -1) {
+
+                                       colWidth = totalWidth / 100 * parseInt(width);
+                               } else {
+
+                                       colWidth = parseInt(width);
+                               }
+                       } else {
+
+                               colWidth = width;
+                       }
+
+                       fixedWidth += colWidth > minWidth ? colWidth : minWidth;
+               }
+       });
+
+       return fixedWidth;
+};
+
+ColumnManager.prototype.addColumn = function (definition, before, nextToColumn) {
+       var _this4 = this;
+
+       return new Promise(function (resolve, reject) {
+
+               var column = _this4._addColumn(definition, before, nextToColumn);
+
+               _this4._reIndexColumns();
+
+               if (_this4.table.options.responsiveLayout && _this4.table.modExists("responsiveLayout", true)) {
+
+                       _this4.table.modules.responsiveLayout.initialize();
+               }
+
+               if (_this4.table.modExists("columnCalcs")) {
+
+                       _this4.table.modules.columnCalcs.recalc(_this4.table.rowManager.activeRows);
+               }
+
+               _this4.redraw();
+
+               if (_this4.table.modules.layout.getMode() != "fitColumns") {
+
+                       column.reinitializeWidth();
+               }
+
+               _this4._verticalAlignHeaders();
+
+               _this4.table.rowManager.reinitialize();
+
+               if (_this4.table.options.virtualDomHoz) {
+
+                       _this4.table.vdomHoz.reinitialize();
+               }
+
+               resolve(column);
+       });
+};
+
+//remove column from system
+
+ColumnManager.prototype.deregisterColumn = function (column) {
+
+       var field = column.getField(),
+           index;
+
+       //remove from field list
+
+       if (field) {
+
+               delete this.columnsByField[field];
+       }
+
+       //remove from index list
+
+       index = this.columnsByIndex.indexOf(column);
+
+       if (index > -1) {
+
+               this.columnsByIndex.splice(index, 1);
+       }
+
+       //remove from column list
+
+       index = this.columns.indexOf(column);
+
+       if (index > -1) {
+
+               this.columns.splice(index, 1);
+       }
+
+       if (this.table.options.responsiveLayout && this.table.modExists("responsiveLayout", true)) {
+
+               this.table.modules.responsiveLayout.initialize();
+       }
+
+       this._verticalAlignHeaders();
+
+       this.redraw();
+};
+
+//redraw columns
+
+ColumnManager.prototype.redraw = function (force) {
+
+       if (force) {
+
+               if (Tabulator.prototype.helpers.elVisible(this.element)) {
+
+                       this._verticalAlignHeaders();
+               }
+
+               this.table.rowManager.resetScroll();
+
+               this.table.rowManager.reinitialize();
+       }
+
+       if (["fitColumns", "fitDataStretch"].indexOf(this.table.modules.layout.getMode()) > -1) {
+
+               this.table.modules.layout.layout();
+       } else {
+
+               if (force) {
+
+                       this.table.modules.layout.layout();
+               } else {
+
+                       if (this.table.options.responsiveLayout && this.table.modExists("responsiveLayout", true)) {
+
+                               this.table.modules.responsiveLayout.update();
+                       }
+               }
+       }
+
+       if (this.table.modExists("frozenColumns")) {
+
+               this.table.modules.frozenColumns.layout();
+       }
+
+       if (this.table.modExists("columnCalcs")) {
+
+               this.table.modules.columnCalcs.recalc(this.table.rowManager.activeRows);
+       }
+
+       if (force) {
+
+               if (this.table.options.persistence && this.table.modExists("persistence", true) && this.table.modules.persistence.config.columns) {
+
+                       this.table.modules.persistence.save("columns");
+               }
+
+               if (this.table.modExists("columnCalcs")) {
+
+                       this.table.modules.columnCalcs.redraw();
+               }
+       }
+
+       this.table.footerManager.redraw();
+};
+
+//public column object
+var ColumnComponent = function ColumnComponent(column) {
+       this._column = column;
+       this.type = "ColumnComponent";
+};
+
+ColumnComponent.prototype.getElement = function () {
+       return this._column.getElement();
+};
+
+ColumnComponent.prototype.getDefinition = function () {
+       return this._column.getDefinition();
+};
+
+ColumnComponent.prototype.getField = function () {
+       return this._column.getField();
+};
+
+ColumnComponent.prototype.getCells = function () {
+       var cells = [];
+
+       this._column.cells.forEach(function (cell) {
+               cells.push(cell.getComponent());
+       });
+
+       return cells;
+};
+
+ColumnComponent.prototype.getVisibility = function () {
+       console.warn("getVisibility function is deprecated, you should now use the isVisible function");
+       return this._column.visible;
+};
+
+ColumnComponent.prototype.isVisible = function () {
+       return this._column.visible;
+};
+
+ColumnComponent.prototype.show = function () {
+       if (this._column.isGroup) {
+               this._column.columns.forEach(function (column) {
+                       column.show();
+               });
+       } else {
+               this._column.show();
+       }
+};
+
+ColumnComponent.prototype.hide = function () {
+       if (this._column.isGroup) {
+               this._column.columns.forEach(function (column) {
+                       column.hide();
+               });
+       } else {
+               this._column.hide();
+       }
+};
+
+ColumnComponent.prototype.toggle = function () {
+       if (this._column.visible) {
+               this.hide();
+       } else {
+               this.show();
+       }
+};
+
+ColumnComponent.prototype.delete = function () {
+       return this._column.delete();
+};
+
+ColumnComponent.prototype.getSubColumns = function () {
+       var output = [];
+
+       if (this._column.columns.length) {
+               this._column.columns.forEach(function (column) {
+                       output.push(column.getComponent());
+               });
+       }
+
+       return output;
+};
+
+ColumnComponent.prototype.getParentColumn = function () {
+       return this._column.parent instanceof Column ? this._column.parent.getComponent() : false;
+};
+
+ColumnComponent.prototype._getSelf = function () {
+       return this._column;
+};
+
+ColumnComponent.prototype.scrollTo = function () {
+       return this._column.table.columnManager.scrollToColumn(this._column);
+};
+
+ColumnComponent.prototype.getTable = function () {
+       return this._column.table;
+};
+
+ColumnComponent.prototype.headerFilterFocus = function () {
+       if (this._column.table.modExists("filter", true)) {
+               this._column.table.modules.filter.setHeaderFilterFocus(this._column);
+       }
+};
+
+ColumnComponent.prototype.reloadHeaderFilter = function () {
+       if (this._column.table.modExists("filter", true)) {
+               this._column.table.modules.filter.reloadHeaderFilter(this._column);
+       }
+};
+
+ColumnComponent.prototype.getHeaderFilterValue = function () {
+       if (this._column.table.modExists("filter", true)) {
+               return this._column.table.modules.filter.getHeaderFilterValue(this._column);
+       }
+};
+
+ColumnComponent.prototype.setHeaderFilterValue = function (value) {
+       if (this._column.table.modExists("filter", true)) {
+               this._column.table.modules.filter.setHeaderFilterValue(this._column, value);
+       }
+};
+
+ColumnComponent.prototype.move = function (to, after) {
+       var toColumn = this._column.table.columnManager.findColumn(to);
+
+       if (toColumn) {
+               this._column.table.columnManager.moveColumn(this._column, toColumn, after);
+       } else {
+               console.warn("Move Error - No matching column found:", toColumn);
+       }
+};
+
+ColumnComponent.prototype.getNextColumn = function () {
+       var nextCol = this._column.nextColumn();
+
+       return nextCol ? nextCol.getComponent() : false;
+};
+
+ColumnComponent.prototype.getPrevColumn = function () {
+       var prevCol = this._column.prevColumn();
+
+       return prevCol ? prevCol.getComponent() : false;
+};
+
+ColumnComponent.prototype.updateDefinition = function (updates) {
+       return this._column.updateDefinition(updates);
+};
+
+ColumnComponent.prototype.getWidth = function () {
+       return this._column.getWidth();
+};
+
+ColumnComponent.prototype.setWidth = function (width) {
+       var result;
+
+       if (width === true) {
+               result = this._column.reinitializeWidth(true);
+       } else {
+               result = this._column.setWidth(width);
+       }
+
+       if (this._column.table.options.virtualDomHoz) {
+               this._column.table.vdomHoz.reinitialize(true);
+       }
+
+       return result;
+};
+
+ColumnComponent.prototype.validate = function () {
+       return this._column.validate();
+};
+
+var Column = function Column(def, parent) {
+       var self = this;
+
+       this.table = parent.table;
+       this.definition = def; //column definition
+       this.parent = parent; //hold parent object
+       this.type = "column"; //type of element
+       this.columns = []; //child columns
+       this.cells = []; //cells bound to this column
+       this.element = this.createElement(); //column header element
+       this.contentElement = false;
+       this.titleHolderElement = false;
+       this.titleElement = false;
+       this.groupElement = this.createGroupElement(); //column group holder element
+       this.isGroup = false;
+       this.tooltip = false; //hold column tooltip
+       this.hozAlign = ""; //horizontal text alignment
+       this.vertAlign = ""; //vert text alignment
+
+       //multi dimensional filed handling
+       this.field = "";
+       this.fieldStructure = "";
+       this.getFieldValue = "";
+       this.setFieldValue = "";
+
+       this.titleFormatterRendered = false;
+
+       this.setField(this.definition.field);
+
+       if (this.table.options.invalidOptionWarnings) {
+               this.checkDefinition();
+       }
+
+       this.modules = {}; //hold module variables;
+
+       this.cellEvents = {
+               cellClick: false,
+               cellDblClick: false,
+               cellContext: false,
+               cellTap: false,
+               cellDblTap: false,
+               cellTapHold: false,
+               cellMouseEnter: false,
+               cellMouseLeave: false,
+               cellMouseOver: false,
+               cellMouseOut: false,
+               cellMouseMove: false
+       };
+
+       this.width = null; //column width
+       this.widthStyled = ""; //column width prestyled to improve render efficiency
+       this.minWidth = null; //column minimum width
+       this.minWidthStyled = ""; //column minimum prestyled to improve render efficiency
+       this.widthFixed = false; //user has specified a width for this column
+
+       this.visible = true; //default visible state
+
+       this.component = null;
+
+       this._mapDepricatedFunctionality();
+
+       //initialize column
+       if (def.columns) {
+
+               this.isGroup = true;
+
+               def.columns.forEach(function (def, i) {
+                       var newCol = new Column(def, self);
+                       self.attachColumn(newCol);
+               });
+
+               self.checkColumnVisibility();
+       } else {
+               parent.registerColumnField(this);
+       }
+
+       if (def.rowHandle && this.table.options.movableRows !== false && this.table.modExists("moveRow")) {
+               this.table.modules.moveRow.setHandle(true);
+       }
+
+       this._buildHeader();
+
+       this.bindModuleColumns();
+};
+
+Column.prototype.createElement = function () {
+       var el = document.createElement("div");
+
+       el.classList.add("tabulator-col");
+       el.setAttribute("role", "columnheader");
+       el.setAttribute("aria-sort", "none");
+
+       return el;
+};
+
+Column.prototype.createGroupElement = function () {
+       var el = document.createElement("div");
+
+       el.classList.add("tabulator-col-group-cols");
+
+       return el;
+};
+
+Column.prototype.checkDefinition = function () {
+       var _this5 = this;
+
+       Object.keys(this.definition).forEach(function (key) {
+               if (_this5.defaultOptionList.indexOf(key) === -1) {
+                       console.warn("Invalid column definition option in '" + (_this5.field || _this5.definition.title) + "' column:", key);
+               }
+       });
+};
+
+Column.prototype.setField = function (field) {
+       this.field = field;
+       this.fieldStructure = field ? this.table.options.nestedFieldSeparator ? field.split(this.table.options.nestedFieldSeparator) : [field] : [];
+       this.getFieldValue = this.fieldStructure.length > 1 ? this._getNestedData : this._getFlatData;
+       this.setFieldValue = this.fieldStructure.length > 1 ? this._setNestedData : this._setFlatData;
+};
+
+//register column position with column manager
+Column.prototype.registerColumnPosition = function (column) {
+       this.parent.registerColumnPosition(column);
+};
+
+//register column position with column manager
+Column.prototype.registerColumnField = function (column) {
+       this.parent.registerColumnField(column);
+};
+
+//trigger position registration
+Column.prototype.reRegisterPosition = function () {
+       if (this.isGroup) {
+               this.columns.forEach(function (column) {
+                       column.reRegisterPosition();
+               });
+       } else {
+               this.registerColumnPosition(this);
+       }
+};
+
+Column.prototype._mapDepricatedFunctionality = function () {
+       if (typeof this.definition.hideInHtml !== "undefined") {
+               this.definition.htmlOutput = !this.definition.hideInHtml;
+               console.warn("hideInHtml column definition property is deprecated, you should now use htmlOutput");
+       }
+
+       if (typeof this.definition.align !== "undefined") {
+               this.definition.hozAlign = this.definition.align;
+               console.warn("align column definition property is deprecated, you should now use hozAlign");
+       }
+
+       if (typeof this.definition.downloadTitle !== "undefined") {
+               this.definition.titleDownload = this.definition.downloadTitle;
+               console.warn("downloadTitle definition property is deprecated, you should now use titleDownload");
+       }
+};
+
+Column.prototype.setTooltip = function () {
+       var self = this,
+           def = self.definition;
+
+       //set header tooltips
+       var tooltip = def.headerTooltip || def.tooltip === false ? def.headerTooltip : self.table.options.tooltipsHeader;
+
+       if (tooltip) {
+               if (tooltip === true) {
+                       if (def.field) {
+                               self.table.modules.localize.bind("columns|" + def.field, function (value) {
+                                       self.element.setAttribute("title", value || def.title);
+                               });
+                       } else {
+                               self.element.setAttribute("title", def.title);
+                       }
+               } else {
+                       if (typeof tooltip == "function") {
+                               tooltip = tooltip(self.getComponent());
+
+                               if (tooltip === false) {
+                                       tooltip = "";
+                               }
+                       }
+
+                       self.element.setAttribute("title", tooltip);
+               }
+       } else {
+               self.element.setAttribute("title", "");
+       }
+};
+
+//build header element
+Column.prototype._buildHeader = function () {
+       var self = this,
+           def = self.definition;
+
+       while (self.element.firstChild) {
+               self.element.removeChild(self.element.firstChild);
+       }if (def.headerVertical) {
+               self.element.classList.add("tabulator-col-vertical");
+
+               if (def.headerVertical === "flip") {
+                       self.element.classList.add("tabulator-col-vertical-flip");
+               }
+       }
+
+       self.contentElement = self._bindEvents();
+
+       self.contentElement = self._buildColumnHeaderContent();
+
+       self.element.appendChild(self.contentElement);
+
+       if (self.isGroup) {
+               self._buildGroupHeader();
+       } else {
+               self._buildColumnHeader();
+       }
+
+       self.setTooltip();
+
+       //set resizable handles
+       if (self.table.options.resizableColumns && self.table.modExists("resizeColumns")) {
+               self.table.modules.resizeColumns.initializeColumn("header", self, self.element);
+       }
+
+       //set resizable handles
+       if (def.headerFilter && self.table.modExists("filter") && self.table.modExists("edit")) {
+               if (typeof def.headerFilterPlaceholder !== "undefined" && def.field) {
+                       self.table.modules.localize.setHeaderFilterColumnPlaceholder(def.field, def.headerFilterPlaceholder);
+               }
+
+               self.table.modules.filter.initializeColumn(self);
+       }
+
+       //set resizable handles
+       if (self.table.modExists("frozenColumns")) {
+               self.table.modules.frozenColumns.initializeColumn(self);
+       }
+
+       //set movable column
+       if (self.table.options.movableColumns && !self.isGroup && self.table.modExists("moveColumn")) {
+               self.table.modules.moveColumn.initializeColumn(self);
+       }
+
+       //set calcs column
+       if ((def.topCalc || def.bottomCalc) && self.table.modExists("columnCalcs")) {
+               self.table.modules.columnCalcs.initializeColumn(self);
+       }
+
+       //handle persistence
+       if (self.table.modExists("persistence") && self.table.modules.persistence.config.columns) {
+               self.table.modules.persistence.initializeColumn(self);
+       }
+
+       //update header tooltip on mouse enter
+       self.element.addEventListener("mouseenter", function (e) {
+               self.setTooltip();
+       });
+};
+
+Column.prototype._bindEvents = function () {
+
+       var self = this,
+           def = self.definition,
+           dblTap,
+           tapHold,
+           tap;
+
+       //setup header click event bindings
+       if (typeof def.headerClick == "function") {
+               self.element.addEventListener("click", function (e) {
+                       def.headerClick(e, self.getComponent());
+               });
+       }
+
+       if (typeof def.headerDblClick == "function") {
+               self.element.addEventListener("dblclick", function (e) {
+                       def.headerDblClick(e, self.getComponent());
+               });
+       }
+
+       if (typeof def.headerContext == "function") {
+               self.element.addEventListener("contextmenu", function (e) {
+                       def.headerContext(e, self.getComponent());
+               });
+       }
+
+       //setup header tap event bindings
+       if (typeof def.headerTap == "function") {
+               tap = false;
+
+               self.element.addEventListener("touchstart", function (e) {
+                       tap = true;
+               }, { passive: true });
+
+               self.element.addEventListener("touchend", function (e) {
+                       if (tap) {
+                               def.headerTap(e, self.getComponent());
+                       }
+
+                       tap = false;
+               });
+       }
+
+       if (typeof def.headerDblTap == "function") {
+               dblTap = null;
+
+               self.element.addEventListener("touchend", function (e) {
+
+                       if (dblTap) {
+                               clearTimeout(dblTap);
+                               dblTap = null;
+
+                               def.headerDblTap(e, self.getComponent());
+                       } else {
+
+                               dblTap = setTimeout(function () {
+                                       clearTimeout(dblTap);
+                                       dblTap = null;
+                               }, 300);
+                       }
+               });
+       }
+
+       if (typeof def.headerTapHold == "function") {
+               tapHold = null;
+
+               self.element.addEventListener("touchstart", function (e) {
+                       clearTimeout(tapHold);
+
+                       tapHold = setTimeout(function () {
+                               clearTimeout(tapHold);
+                               tapHold = null;
+                               tap = false;
+                               def.headerTapHold(e, self.getComponent());
+                       }, 1000);
+               }, { passive: true });
+
+               self.element.addEventListener("touchend", function (e) {
+                       clearTimeout(tapHold);
+                       tapHold = null;
+               });
+       }
+
+       //store column cell click event bindings
+       if (typeof def.cellClick == "function") {
+               self.cellEvents.cellClick = def.cellClick;
+       }
+
+       if (typeof def.cellDblClick == "function") {
+               self.cellEvents.cellDblClick = def.cellDblClick;
+       }
+
+       if (typeof def.cellContext == "function") {
+               self.cellEvents.cellContext = def.cellContext;
+       }
+
+       //store column mouse event bindings
+       if (typeof def.cellMouseEnter == "function") {
+               self.cellEvents.cellMouseEnter = def.cellMouseEnter;
+       }
+
+       if (typeof def.cellMouseLeave == "function") {
+               self.cellEvents.cellMouseLeave = def.cellMouseLeave;
+       }
+
+       if (typeof def.cellMouseOver == "function") {
+               self.cellEvents.cellMouseOver = def.cellMouseOver;
+       }
+
+       if (typeof def.cellMouseOut == "function") {
+               self.cellEvents.cellMouseOut = def.cellMouseOut;
+       }
+
+       if (typeof def.cellMouseMove == "function") {
+               self.cellEvents.cellMouseMove = def.cellMouseMove;
+       }
+
+       //setup column cell tap event bindings
+       if (typeof def.cellTap == "function") {
+               self.cellEvents.cellTap = def.cellTap;
+       }
+
+       if (typeof def.cellDblTap == "function") {
+               self.cellEvents.cellDblTap = def.cellDblTap;
+       }
+
+       if (typeof def.cellTapHold == "function") {
+               self.cellEvents.cellTapHold = def.cellTapHold;
+       }
+
+       //setup column cell edit callbacks
+       if (typeof def.cellEdited == "function") {
+               self.cellEvents.cellEdited = def.cellEdited;
+       }
+
+       if (typeof def.cellEditing == "function") {
+               self.cellEvents.cellEditing = def.cellEditing;
+       }
+
+       if (typeof def.cellEditCancelled == "function") {
+               self.cellEvents.cellEditCancelled = def.cellEditCancelled;
+       }
+};
+
+//build header element for header
+Column.prototype._buildColumnHeader = function () {
+       var _this6 = this;
+
+       var def = this.definition,
+           table = this.table,
+           sortable;
+
+       //set column sorter
+       if (table.modExists("sort")) {
+               table.modules.sort.initializeColumn(this, this.titleHolderElement);
+       }
+
+       //set column header context menu
+       if ((def.headerContextMenu || def.headerClickMenu || def.headerMenu) && table.modExists("menu")) {
+               table.modules.menu.initializeColumnHeader(this);
+       }
+
+       //set column formatter
+       if (table.modExists("format")) {
+               table.modules.format.initializeColumn(this);
+       }
+
+       //set column editor
+       if (typeof def.editor != "undefined" && table.modExists("edit")) {
+               table.modules.edit.initializeColumn(this);
+       }
+
+       //set colum validator
+       if (typeof def.validator != "undefined" && table.modExists("validate")) {
+               table.modules.validate.initializeColumn(this);
+       }
+
+       //set column mutator
+       if (table.modExists("mutator")) {
+               table.modules.mutator.initializeColumn(this);
+       }
+
+       //set column accessor
+       if (table.modExists("accessor")) {
+               table.modules.accessor.initializeColumn(this);
+       }
+
+       //set respoviveLayout
+       if (_typeof(table.options.responsiveLayout) && table.modExists("responsiveLayout")) {
+               table.modules.responsiveLayout.initializeColumn(this);
+       }
+
+       //set column visibility
+       if (typeof def.visible != "undefined") {
+               if (def.visible) {
+                       this.show(true);
+               } else {
+                       this.hide(true);
+               }
+       }
+
+       //asign additional css classes to column header
+       if (def.cssClass) {
+               var classeNames = def.cssClass.split(" ");
+               classeNames.forEach(function (className) {
+                       _this6.element.classList.add(className);
+               });
+       }
+
+       if (def.field) {
+               this.element.setAttribute("tabulator-field", def.field);
+       }
+
+       //set min width if present
+       this.setMinWidth(typeof def.minWidth == "undefined" ? this.table.options.columnMinWidth : parseInt(def.minWidth));
+
+       this.reinitializeWidth();
+
+       //set tooltip if present
+       this.tooltip = this.definition.tooltip || this.definition.tooltip === false ? this.definition.tooltip : this.table.options.tooltips;
+
+       //set orizontal text alignment
+       this.hozAlign = typeof this.definition.hozAlign == "undefined" ? this.table.options.cellHozAlign : this.definition.hozAlign;
+       this.vertAlign = typeof this.definition.vertAlign == "undefined" ? this.table.options.cellVertAlign : this.definition.vertAlign;
+
+       this.titleElement.style.textAlign = this.definition.headerHozAlign || this.table.options.headerHozAlign;
+};
+
+Column.prototype._buildColumnHeaderContent = function () {
+       var def = this.definition,
+           table = this.table;
+
+       var contentElement = document.createElement("div");
+       contentElement.classList.add("tabulator-col-content");
+
+       this.titleHolderElement = document.createElement("div");
+       this.titleHolderElement.classList.add("tabulator-col-title-holder");
+
+       contentElement.appendChild(this.titleHolderElement);
+
+       this.titleElement = this._buildColumnHeaderTitle();
+
+       this.titleHolderElement.appendChild(this.titleElement);
+
+       return contentElement;
+};
+
+//build title element of column
+Column.prototype._buildColumnHeaderTitle = function () {
+       var self = this,
+           def = self.definition,
+           table = self.table,
+           title;
+
+       var titleHolderElement = document.createElement("div");
+       titleHolderElement.classList.add("tabulator-col-title");
+
+       if (def.editableTitle) {
+               var titleElement = document.createElement("input");
+               titleElement.classList.add("tabulator-title-editor");
+
+               titleElement.addEventListener("click", function (e) {
+                       e.stopPropagation();
+                       titleElement.focus();
+               });
+
+               titleElement.addEventListener("change", function () {
+                       def.title = titleElement.value;
+                       table.options.columnTitleChanged.call(self.table, self.getComponent());
+               });
+
+               titleHolderElement.appendChild(titleElement);
+
+               if (def.field) {
+                       table.modules.localize.bind("columns|" + def.field, function (text) {
+                               titleElement.value = text || def.title || "&nbsp;";
+                       });
+               } else {
+                       titleElement.value = def.title || "&nbsp;";
+               }
+       } else {
+               if (def.field) {
+                       table.modules.localize.bind("columns|" + def.field, function (text) {
+                               self._formatColumnHeaderTitle(titleHolderElement, text || def.title || "&nbsp;");
+                       });
+               } else {
+                       self._formatColumnHeaderTitle(titleHolderElement, def.title || "&nbsp;");
+               }
+       }
+
+       return titleHolderElement;
+};
+
+Column.prototype._formatColumnHeaderTitle = function (el, title) {
+       var _this7 = this;
+
+       var formatter, contents, params, mockCell, onRendered;
+
+       if (this.definition.titleFormatter && this.table.modExists("format")) {
+
+               formatter = this.table.modules.format.getFormatter(this.definition.titleFormatter);
+
+               onRendered = function onRendered(callback) {
+                       _this7.titleFormatterRendered = callback;
+               };
+
+               mockCell = {
+                       getValue: function getValue() {
+                               return title;
+                       },
+                       getElement: function getElement() {
+                               return el;
+                       }
+               };
+
+               params = this.definition.titleFormatterParams || {};
+
+               params = typeof params === "function" ? params() : params;
+
+               contents = formatter.call(this.table.modules.format, mockCell, params, onRendered);
+
+               switch (typeof contents === 'undefined' ? 'undefined' : _typeof(contents)) {
+                       case "object":
+                               if (contents instanceof Node) {
+                                       el.appendChild(contents);
+                               } else {
+                                       el.innerHTML = "";
+                                       console.warn("Format Error - Title formatter has returned a type of object, the only valid formatter object return is an instance of Node, the formatter returned:", contents);
+                               }
+                               break;
+                       case "undefined":
+                       case "null":
+                               el.innerHTML = "";
+                               break;
+                       default:
+                               el.innerHTML = contents;
+               }
+       } else {
+               el.innerHTML = title;
+       }
+};
+
+//build header element for column group
+Column.prototype._buildGroupHeader = function () {
+       var _this8 = this;
+
+       this.element.classList.add("tabulator-col-group");
+       this.element.setAttribute("role", "columngroup");
+       this.element.setAttribute("aria-title", this.definition.title);
+
+       //asign additional css classes to column header
+       if (this.definition.cssClass) {
+               var classeNames = this.definition.cssClass.split(" ");
+               classeNames.forEach(function (className) {
+                       _this8.element.classList.add(className);
+               });
+       }
+
+       //set column header context menu
+       if ((this.definition.headerContextMenu || this.definition.headerMenu) && this.table.modExists("menu")) {
+               this.table.modules.menu.initializeColumnHeader(this);
+       }
+
+       this.element.appendChild(this.groupElement);
+};
+
+//flat field lookup
+Column.prototype._getFlatData = function (data) {
+       return data[this.field];
+};
+
+//nested field lookup
+Column.prototype._getNestedData = function (data) {
+       var dataObj = data,
+           structure = this.fieldStructure,
+           length = structure.length,
+           output;
+
+       for (var i = 0; i < length; i++) {
+
+               dataObj = dataObj[structure[i]];
+
+               output = dataObj;
+
+               if (!dataObj) {
+                       break;
+               }
+       }
+
+       return output;
+};
+
+//flat field set
+Column.prototype._setFlatData = function (data, value) {
+       if (this.field) {
+               data[this.field] = value;
+       }
+};
+
+//nested field set
+Column.prototype._setNestedData = function (data, value) {
+       var dataObj = data,
+           structure = this.fieldStructure,
+           length = structure.length;
+
+       for (var i = 0; i < length; i++) {
+
+               if (i == length - 1) {
+                       dataObj[structure[i]] = value;
+               } else {
+                       if (!dataObj[structure[i]]) {
+                               if (typeof value !== "undefined") {
+                                       dataObj[structure[i]] = {};
+                               } else {
+                                       break;
+                               }
+                       }
+
+                       dataObj = dataObj[structure[i]];
+               }
+       }
+};
+
+//attach column to this group
+Column.prototype.attachColumn = function (column) {
+       var self = this;
+
+       if (self.groupElement) {
+               self.columns.push(column);
+               self.groupElement.appendChild(column.getElement());
+       } else {
+               console.warn("Column Warning - Column being attached to another column instead of column group");
+       }
+};
+
+//vertically align header in column
+Column.prototype.verticalAlign = function (alignment, height) {
+
+       //calculate height of column header and group holder element
+       var parentHeight = this.parent.isGroup ? this.parent.getGroupElement().clientHeight : height || this.parent.getHeadersElement().clientHeight;
+       // var parentHeight = this.parent.isGroup ? this.parent.getGroupElement().clientHeight : this.parent.getHeadersElement().clientHeight;
+
+       this.element.style.height = parentHeight + "px";
+
+       if (this.isGroup) {
+               this.groupElement.style.minHeight = parentHeight - this.contentElement.offsetHeight + "px";
+       }
+
+       //vertically align cell contents
+       if (!this.isGroup && alignment !== "top") {
+               if (alignment === "bottom") {
+                       this.element.style.paddingTop = this.element.clientHeight - this.contentElement.offsetHeight + "px";
+               } else {
+                       this.element.style.paddingTop = (this.element.clientHeight - this.contentElement.offsetHeight) / 2 + "px";
+               }
+       }
+
+       this.columns.forEach(function (column) {
+               column.verticalAlign(alignment);
+       });
+};
+
+//clear vertical alignmenet
+Column.prototype.clearVerticalAlign = function () {
+       this.element.style.paddingTop = "";
+       this.element.style.height = "";
+       this.element.style.minHeight = "";
+       this.groupElement.style.minHeight = "";
+
+       this.columns.forEach(function (column) {
+               column.clearVerticalAlign();
+       });
+};
+
+Column.prototype.bindModuleColumns = function () {
+       //check if rownum formatter is being used on a column
+       if (this.definition.formatter == "rownum") {
+               this.table.rowManager.rowNumColumn = this;
+       }
+};
+
+//// Retreive Column Information ////
+
+//return column header element
+Column.prototype.getElement = function () {
+       return this.element;
+};
+
+//return colunm group element
+Column.prototype.getGroupElement = function () {
+       return this.groupElement;
+};
+
+//return field name
+Column.prototype.getField = function () {
+       return this.field;
+};
+
+//return the first column in a group
+Column.prototype.getFirstColumn = function () {
+       if (!this.isGroup) {
+               return this;
+       } else {
+               if (this.columns.length) {
+                       return this.columns[0].getFirstColumn();
+               } else {
+                       return false;
+               }
+       }
+};
+
+//return the last column in a group
+Column.prototype.getLastColumn = function () {
+       if (!this.isGroup) {
+               return this;
+       } else {
+               if (this.columns.length) {
+                       return this.columns[this.columns.length - 1].getLastColumn();
+               } else {
+                       return false;
+               }
+       }
+};
+
+//return all columns in a group
+Column.prototype.getColumns = function () {
+       return this.columns;
+};
+
+//return all columns in a group
+Column.prototype.getCells = function () {
+       return this.cells;
+};
+
+//retreive the top column in a group of columns
+Column.prototype.getTopColumn = function () {
+       if (this.parent.isGroup) {
+               return this.parent.getTopColumn();
+       } else {
+               return this;
+       }
+};
+
+//return column definition object
+Column.prototype.getDefinition = function (updateBranches) {
+       var colDefs = [];
+
+       if (this.isGroup && updateBranches) {
+               this.columns.forEach(function (column) {
+                       colDefs.push(column.getDefinition(true));
+               });
+
+               this.definition.columns = colDefs;
+       }
+
+       return this.definition;
+};
+
+//////////////////// Actions ////////////////////
+
+Column.prototype.checkColumnVisibility = function () {
+       var visible = false;
+
+       this.columns.forEach(function (column) {
+               if (column.visible) {
+                       visible = true;
+               }
+       });
+
+       if (visible) {
+               this.show();
+               this.parent.table.options.columnVisibilityChanged.call(this.table, this.getComponent(), false);
+       } else {
+               this.hide();
+       }
+};
+
+//show column
+Column.prototype.show = function (silent, responsiveToggle) {
+       if (!this.visible) {
+               this.visible = true;
+
+               this.element.style.display = "";
+
+               if (this.parent.isGroup) {
+                       this.parent.checkColumnVisibility();
+               }
+
+               this.cells.forEach(function (cell) {
+                       cell.show();
+               });
+
+               if (!this.isGroup && this.width === null) {
+                       this.reinitializeWidth();
+               }
+
+               this.table.columnManager._verticalAlignHeaders();
+
+               if (this.table.options.persistence && this.table.modExists("persistence", true) && this.table.modules.persistence.config.columns) {
+                       this.table.modules.persistence.save("columns");
+               }
+
+               if (!responsiveToggle && this.table.options.responsiveLayout && this.table.modExists("responsiveLayout", true)) {
+                       this.table.modules.responsiveLayout.updateColumnVisibility(this, this.visible);
+               }
+
+               if (!silent) {
+                       this.table.options.columnVisibilityChanged.call(this.table, this.getComponent(), true);
+               }
+
+               if (this.parent.isGroup) {
+                       this.parent.matchChildWidths();
+               }
+       }
+};
+
+//hide column
+Column.prototype.hide = function (silent, responsiveToggle) {
+       if (this.visible) {
+               this.visible = false;
+
+               this.element.style.display = "none";
+
+               this.table.columnManager._verticalAlignHeaders();
+
+               if (this.parent.isGroup) {
+                       this.parent.checkColumnVisibility();
+               }
+
+               this.cells.forEach(function (cell) {
+                       cell.hide();
+               });
+
+               if (this.table.options.persistence && this.table.modExists("persistence", true) && this.table.modules.persistence.config.columns) {
+                       this.table.modules.persistence.save("columns");
+               }
+
+               if (!responsiveToggle && this.table.options.responsiveLayout && this.table.modExists("responsiveLayout", true)) {
+                       this.table.modules.responsiveLayout.updateColumnVisibility(this, this.visible);
+               }
+
+               if (!silent) {
+                       this.table.options.columnVisibilityChanged.call(this.table, this.getComponent(), false);
+               }
+
+               if (this.parent.isGroup) {
+                       this.parent.matchChildWidths();
+               }
+       }
+};
+
+Column.prototype.matchChildWidths = function () {
+       var childWidth = 0;
+
+       if (this.contentElement && this.columns.length) {
+               this.columns.forEach(function (column) {
+                       if (column.visible) {
+                               childWidth += column.getWidth();
+                       }
+               });
+
+               this.contentElement.style.maxWidth = childWidth - 1 + "px";
+
+               if (this.parent.isGroup) {
+                       this.parent.matchChildWidths();
+               }
+       }
+};
+
+Column.prototype.setWidth = function (width) {
+       this.widthFixed = true;
+       this.setWidthActual(width);
+};
+
+Column.prototype.setWidthActual = function (width) {
+       if (isNaN(width)) {
+               width = Math.floor(this.table.element.clientWidth / 100 * parseInt(width));
+       }
+
+       width = Math.max(this.minWidth, width);
+
+       this.width = width;
+       this.widthStyled = width ? width + "px" : "";
+
+       this.element.style.width = this.widthStyled;
+
+       if (!this.isGroup) {
+               this.cells.forEach(function (cell) {
+                       cell.setWidth();
+               });
+       }
+
+       if (this.parent.isGroup) {
+               this.parent.matchChildWidths();
+       }
+
+       //set resizable handles
+       if (this.table.modExists("frozenColumns")) {
+               this.table.modules.frozenColumns.layout();
+       }
+};
+
+Column.prototype.checkCellHeights = function () {
+       var rows = [];
+
+       this.cells.forEach(function (cell) {
+               if (cell.row.heightInitialized) {
+                       if (cell.row.getElement().offsetParent !== null) {
+                               rows.push(cell.row);
+                               cell.row.clearCellHeight();
+                       } else {
+                               cell.row.heightInitialized = false;
+                       }
+               }
+       });
+
+       rows.forEach(function (row) {
+               row.calcHeight();
+       });
+
+       rows.forEach(function (row) {
+               row.setCellHeight();
+       });
+};
+
+Column.prototype.getWidth = function () {
+       var width = 0;
+
+       if (this.isGroup) {
+               this.columns.forEach(function (column) {
+                       if (column.visible) {
+                               width += column.getWidth();
+                       }
+               });
+       } else {
+               width = this.width;
+       }
+
+       return width;
+};
+
+Column.prototype.getHeight = function () {
+       return this.element.offsetHeight;
+};
+
+Column.prototype.setMinWidth = function (minWidth) {
+       this.minWidth = minWidth;
+       this.minWidthStyled = minWidth ? minWidth + "px" : "";
+
+       this.element.style.minWidth = this.minWidthStyled;
+
+       this.cells.forEach(function (cell) {
+               cell.setMinWidth();
+       });
+};
+
+Column.prototype.delete = function () {
+       var _this9 = this;
+
+       return new Promise(function (resolve, reject) {
+
+               if (_this9.isGroup) {
+                       _this9.columns.forEach(function (column) {
+                               column.delete();
+                       });
+               }
+
+               //cancel edit if column is currently being edited
+               if (_this9.table.modExists("edit")) {
+                       if (_this9.table.modules.edit.currentCell.column === _this9) {
+                               _this9.table.modules.edit.cancelEdit();
+                       }
+               }
+
+               var cellCount = _this9.cells.length;
+
+               for (var i = 0; i < cellCount; i++) {
+                       _this9.cells[0].delete();
+               }
+
+               if (_this9.element.parentNode) {
+                       _this9.element.parentNode.removeChild(_this9.element);
+               }
+
+               _this9.element = false;
+               _this9.contentElement = false;
+               _this9.titleElement = false;
+               _this9.groupElement = false;
+
+               _this9.table.columnManager.deregisterColumn(_this9);
+
+               if (_this9.table.options.virtualDomHoz) {
+                       _this9.table.vdomHoz.reinitialize(true);
+               }
+
+               resolve();
+       });
+};
+
+Column.prototype.columnRendered = function () {
+       if (this.titleFormatterRendered) {
+               this.titleFormatterRendered();
+       }
+};
+
+Column.prototype.validate = function () {
+       var invalid = [];
+
+       this.cells.forEach(function (cell) {
+               if (!cell.validate()) {
+                       invalid.push(cell.getComponent());
+               }
+       });
+
+       return invalid.length ? invalid : true;
+};
+
+//////////////// Cell Management /////////////////
+
+//generate cell for this column
+Column.prototype.generateCell = function (row) {
+       var self = this;
+
+       var cell = new Cell(self, row);
+
+       this.cells.push(cell);
+
+       return cell;
+};
+
+Column.prototype.nextColumn = function () {
+       var index = this.table.columnManager.findColumnIndex(this);
+       return index > -1 ? this._nextVisibleColumn(index + 1) : false;
+};
+
+Column.prototype._nextVisibleColumn = function (index) {
+       var column = this.table.columnManager.getColumnByIndex(index);
+       return !column || column.visible ? column : this._nextVisibleColumn(index + 1);
+};
+
+Column.prototype.prevColumn = function () {
+       var index = this.table.columnManager.findColumnIndex(this);
+       return index > -1 ? this._prevVisibleColumn(index - 1) : false;
+};
+
+Column.prototype._prevVisibleColumn = function (index) {
+       var column = this.table.columnManager.getColumnByIndex(index);
+       return !column || column.visible ? column : this._prevVisibleColumn(index - 1);
+};
+
+Column.prototype.reinitializeWidth = function (force) {
+       this.widthFixed = false;
+
+       //set width if present
+       if (typeof this.definition.width !== "undefined" && !force) {
+               this.setWidth(this.definition.width);
+       }
+
+       //hide header filters to prevent them altering column width
+       if (this.table.modExists("filter")) {
+               this.table.modules.filter.hideHeaderFilterElements();
+       }
+
+       this.fitToData();
+
+       //show header filters again after layout is complete
+       if (this.table.modExists("filter")) {
+               this.table.modules.filter.showHeaderFilterElements();
+       }
+};
+
+//set column width to maximum cell width
+Column.prototype.fitToData = function () {
+       var self = this;
+
+       if (!this.widthFixed) {
+               this.element.style.width = "";
+
+               self.cells.forEach(function (cell) {
+                       cell.clearWidth();
+               });
+       }
+
+       var maxWidth = this.element.offsetWidth;
+
+       if (!self.width || !this.widthFixed) {
+               self.cells.forEach(function (cell) {
+                       var width = cell.getWidth();
+
+                       if (width > maxWidth) {
+                               maxWidth = width;
+                       }
+               });
+
+               if (maxWidth) {
+                       self.setWidthActual(maxWidth + 1);
+               }
+       }
+};
+
+Column.prototype.updateDefinition = function (updates) {
+       var _this10 = this;
+
+       return new Promise(function (resolve, reject) {
+               var definition;
+
+               if (!_this10.isGroup) {
+                       definition = Object.assign({}, _this10.getDefinition());
+                       definition = Object.assign(definition, updates);
+
+                       _this10.table.columnManager.addColumn(definition, false, _this10).then(function (column) {
+
+                               if (definition.field == _this10.field) {
+                                       _this10.field = false; //cleair field name to prevent deletion of duplicate column from arrays
+                               }
+
+                               _this10.delete().then(function () {
+                                       resolve(column.getComponent());
+                               }).catch(function (err) {
+                                       reject(err);
+                               });
+                       }).catch(function (err) {
+                               reject(err);
+                       });
+               } else {
+                       console.warn("Column Update Error - The updateDefinition function is only available on columns, not column groups");
+                       reject("Column Update Error - The updateDefinition function is only available on columns, not column groups");
+               }
+       });
+};
+
+Column.prototype.deleteCell = function (cell) {
+       var index = this.cells.indexOf(cell);
+
+       if (index > -1) {
+               this.cells.splice(index, 1);
+       }
+};
+
+Column.prototype.defaultOptionList = ["title", "field", "columns", "visible", "align", "hozAlign", "vertAlign", "width", "minWidth", "widthGrow", "widthShrink", "resizable", "frozen", "responsive", "tooltip", "cssClass", "rowHandle", "hideInHtml", "print", "htmlOutput", "sorter", "sorterParams", "formatter", "formatterParams", "variableHeight", "editable", "editor", "editorParams", "validator", "mutator", "mutatorParams", "mutatorData", "mutatorDataParams", "mutatorEdit", "mutatorEditParams", "mutatorClipboard", "mutatorClipboardParams", "accessor", "accessorParams", "accessorData", "accessorDataParams", "accessorDownload", "accessorDownloadParams", "accessorClipboard", "accessorClipboardParams", "accessorPrint", "accessorPrintParams", "accessorHtmlOutput", "accessorHtmlOutputParams", "clipboard", "download", "downloadTitle", "topCalc", "topCalcParams", "topCalcFormatter", "topCalcFormatterParams", "bottomCalc", "bottomCalcParams", "bottomCalcFormatter", "bottomCalcFormatterParams", "cellClick", "cellDblClick", "cellContext", "cellTap", "cellDblTap", "cellTapHold", "cellMouseEnter", "cellMouseLeave", "cellMouseOver", "cellMouseOut", "cellMouseMove", "cellEditing", "cellEdited", "cellEditCancelled", "headerSort", "headerSortStartingDir", "headerSortTristate", "headerClick", "headerDblClick", "headerContext", "headerTap", "headerDblTap", "headerTapHold", "headerTooltip", "headerVertical", "headerHozAlign", "editableTitle", "titleFormatter", "titleFormatterParams", "headerFilter", "headerFilterPlaceholder", "headerFilterParams", "headerFilterEmptyCheck", "headerFilterFunc", "headerFilterFuncParams", "headerFilterLiveFilter", "print", "headerContextMenu", "headerMenu", "contextMenu",
+// "headerClickMenu",
+"clickMenu", "formatterPrint", "formatterPrintParams", "formatterClipboard", "formatterClipboardParams", "formatterHtmlOutput", "formatterHtmlOutputParams", "titlePrint", "titleClipboard", "titleHtmlOutput", "titleDownload"];
+
+//////////////// Event Bindings /////////////////
+
+//////////////// Object Generation /////////////////
+Column.prototype.getComponent = function () {
+       if (!this.component) {
+               this.component = new ColumnComponent(this);
+       }
+
+       return this.component;
+};
+
+var RowManager = function RowManager(table) {
+
+       this.table = table;
+       this.element = this.createHolderElement(); //containing element
+       this.tableElement = this.createTableElement(); //table element
+       this.heightFixer = this.createTableElement(); //table element
+       this.columnManager = null; //hold column manager object
+       this.height = 0; //hold height of table element
+
+       this.firstRender = false; //handle first render
+       this.renderMode = "virtual"; //current rendering mode
+       this.fixedHeight = false; //current rendering mode
+
+       this.rows = []; //hold row data objects
+       this.activeRows = []; //rows currently available to on display in the table
+       this.activeRowsCount = 0; //count of active rows
+
+       this.displayRows = []; //rows currently on display in the table
+       this.displayRowsCount = 0; //count of display rows
+
+       this.scrollTop = 0;
+       this.scrollLeft = 0;
+
+       this.vDomRowHeight = 20; //approximation of row heights for padding
+
+       this.vDomTop = 0; //hold position for first rendered row in the virtual DOM
+       this.vDomBottom = 0; //hold possition for last rendered row in the virtual DOM
+
+       this.vDomScrollPosTop = 0; //last scroll position of the vDom top;
+       this.vDomScrollPosBottom = 0; //last scroll position of the vDom bottom;
+
+       this.vDomTopPad = 0; //hold value of padding for top of virtual DOM
+       this.vDomBottomPad = 0; //hold value of padding for bottom of virtual DOM
+
+       this.vDomMaxRenderChain = 90; //the maximum number of dom elements that can be rendered in 1 go
+
+       this.vDomWindowBuffer = 0; //window row buffer before removing elements, to smooth scrolling
+
+       this.vDomWindowMinTotalRows = 20; //minimum number of rows to be generated in virtual dom (prevent buffering issues on tables with tall rows)
+       this.vDomWindowMinMarginRows = 5; //minimum number of rows to be generated in virtual dom margin
+
+       this.vDomTopNewRows = []; //rows to normalize after appending to optimize render speed
+       this.vDomBottomNewRows = []; //rows to normalize after appending to optimize render speed
+
+       this.rowNumColumn = false; //hold column component for row number column
+
+       this.redrawBlock = false; //prevent redraws to allow multiple data manipulations becore continuing
+       this.redrawBlockRestoreConfig = false; //store latest redraw function calls for when redraw is needed
+       this.redrawBlockRederInPosition = false; //store latest redraw function calls for when redraw is needed
+};
+
+//////////////// Setup Functions /////////////////
+
+RowManager.prototype.createHolderElement = function () {
+       var el = document.createElement("div");
+
+       el.classList.add("tabulator-tableHolder");
+       el.setAttribute("tabindex", 0);
+
+       return el;
+};
+
+RowManager.prototype.createTableElement = function () {
+       var el = document.createElement("div");
+
+       el.classList.add("tabulator-table");
+
+       return el;
+};
+
+//return containing element
+RowManager.prototype.getElement = function () {
+       return this.element;
+};
+
+//return table element
+RowManager.prototype.getTableElement = function () {
+       return this.tableElement;
+};
+
+//return position of row in table
+RowManager.prototype.getRowPosition = function (row, active) {
+       if (active) {
+               return this.activeRows.indexOf(row);
+       } else {
+               return this.rows.indexOf(row);
+       }
+};
+
+//link to column manager
+RowManager.prototype.setColumnManager = function (manager) {
+       this.columnManager = manager;
+};
+
+RowManager.prototype.initialize = function () {
+       var self = this;
+
+       self.setRenderMode();
+
+       //initialize manager
+       self.element.appendChild(self.tableElement);
+
+       self.firstRender = true;
+
+       //scroll header along with table body
+       self.element.addEventListener("scroll", function () {
+               var left = self.element.scrollLeft;
+
+               //handle horizontal scrolling
+               if (self.scrollLeft != left) {
+                       self.columnManager.scrollHorizontal(left);
+
+                       if (self.table.options.groupBy) {
+                               self.table.modules.groupRows.scrollHeaders(left);
+                       }
+
+                       if (self.table.modExists("columnCalcs")) {
+                               self.table.modules.columnCalcs.scrollHorizontal(left);
+                       }
+
+                       self.table.options.scrollHorizontal(left);
+               }
+
+               self.scrollLeft = left;
+       });
+
+       //handle virtual dom scrolling
+       if (this.renderMode === "virtual") {
+
+               self.element.addEventListener("scroll", function () {
+                       var top = self.element.scrollTop;
+                       var dir = self.scrollTop > top;
+
+                       //handle verical scrolling
+                       if (self.scrollTop != top) {
+                               self.scrollTop = top;
+                               self.scrollVertical(dir);
+
+                               if (self.table.options.ajaxProgressiveLoad == "scroll") {
+                                       self.table.modules.ajax.nextPage(self.element.scrollHeight - self.element.clientHeight - top);
+                               }
+
+                               self.table.options.scrollVertical(top);
+                       } else {
+                               self.scrollTop = top;
+                       }
+               });
+       }
+};
+
+////////////////// Row Manipulation //////////////////
+
+RowManager.prototype.findRow = function (subject) {
+       var self = this;
+
+       if ((typeof subject === 'undefined' ? 'undefined' : _typeof(subject)) == "object") {
+
+               if (subject instanceof Row) {
+                       //subject is row element
+                       return subject;
+               } else if (subject instanceof RowComponent) {
+                       //subject is public row component
+                       return subject._getSelf() || false;
+               } else if (typeof HTMLElement !== "undefined" && subject instanceof HTMLElement) {
+                       //subject is a HTML element of the row
+                       var match = self.rows.find(function (row) {
+                               return row.element === subject;
+                       });
+
+                       return match || false;
+               }
+       } else if (typeof subject == "undefined" || subject === null) {
+               return false;
+       } else {
+               //subject should be treated as the index of the row
+               var _match = self.rows.find(function (row) {
+                       return row.data[self.table.options.index] == subject;
+               });
+
+               return _match || false;
+       }
+
+       //catch all for any other type of input
+
+       return false;
+};
+
+RowManager.prototype.getRowFromDataObject = function (data) {
+       var match = this.rows.find(function (row) {
+               return row.data === data;
+       });
+
+       return match || false;
+};
+
+RowManager.prototype.getRowFromPosition = function (position, active) {
+       if (active) {
+               return this.activeRows[position];
+       } else {
+               return this.rows[position];
+       }
+};
+
+RowManager.prototype.scrollToRow = function (row, position, ifVisible) {
+       var _this11 = this;
+
+       var rowIndex = this.getDisplayRows().indexOf(row),
+           rowEl = row.getElement(),
+           rowTop,
+           offset = 0;
+
+       return new Promise(function (resolve, reject) {
+               if (rowIndex > -1) {
+
+                       if (typeof position === "undefined") {
+                               position = _this11.table.options.scrollToRowPosition;
+                       }
+
+                       if (typeof ifVisible === "undefined") {
+                               ifVisible = _this11.table.options.scrollToRowIfVisible;
+                       }
+
+                       if (position === "nearest") {
+                               switch (_this11.renderMode) {
+                                       case "classic":
+                                               rowTop = Tabulator.prototype.helpers.elOffset(rowEl).top;
+                                               position = Math.abs(_this11.element.scrollTop - rowTop) > Math.abs(_this11.element.scrollTop + _this11.element.clientHeight - rowTop) ? "bottom" : "top";
+                                               break;
+                                       case "virtual":
+                                               position = Math.abs(_this11.vDomTop - rowIndex) > Math.abs(_this11.vDomBottom - rowIndex) ? "bottom" : "top";
+                                               break;
+                               }
+                       }
+
+                       //check row visibility
+                       if (!ifVisible) {
+                               if (Tabulator.prototype.helpers.elVisible(rowEl)) {
+                                       offset = Tabulator.prototype.helpers.elOffset(rowEl).top - Tabulator.prototype.helpers.elOffset(_this11.element).top;
+
+                                       if (offset > 0 && offset < _this11.element.clientHeight - rowEl.offsetHeight) {
+                                               return false;
+                                       }
+                               }
+                       }
+
+                       //scroll to row
+                       switch (_this11.renderMode) {
+                               case "classic":
+                                       _this11.element.scrollTop = Tabulator.prototype.helpers.elOffset(rowEl).top - Tabulator.prototype.helpers.elOffset(_this11.element).top + _this11.element.scrollTop;
+                                       break;
+                               case "virtual":
+                                       _this11._virtualRenderFill(rowIndex, true);
+                                       break;
+                       }
+
+                       //align to correct position
+                       switch (position) {
+                               case "middle":
+                               case "center":
+
+                                       if (_this11.element.scrollHeight - _this11.element.scrollTop == _this11.element.clientHeight) {
+                                               _this11.element.scrollTop = _this11.element.scrollTop + (rowEl.offsetTop - _this11.element.scrollTop) - (_this11.element.scrollHeight - rowEl.offsetTop) / 2;
+                                       } else {
+                                               _this11.element.scrollTop = _this11.element.scrollTop - _this11.element.clientHeight / 2;
+                                       }
+
+                                       break;
+
+                               case "bottom":
+
+                                       if (_this11.element.scrollHeight - _this11.element.scrollTop == _this11.element.clientHeight) {
+                                               _this11.element.scrollTop = _this11.element.scrollTop - (_this11.element.scrollHeight - rowEl.offsetTop) + rowEl.offsetHeight;
+                                       } else {
+                                               _this11.element.scrollTop = _this11.element.scrollTop - _this11.element.clientHeight + rowEl.offsetHeight;
+                                       }
+
+                                       break;
+                       }
+
+                       resolve();
+               } else {
+                       console.warn("Scroll Error - Row not visible");
+                       reject("Scroll Error - Row not visible");
+               }
+       });
+};
+
+////////////////// Data Handling //////////////////
+
+RowManager.prototype.setData = function (data, renderInPosition, columnsChanged) {
+       var _this12 = this;
+
+       var self = this;
+
+       return new Promise(function (resolve, reject) {
+               if (renderInPosition && _this12.getDisplayRows().length) {
+                       if (self.table.options.pagination) {
+                               self._setDataActual(data, true);
+                       } else {
+                               _this12.reRenderInPosition(function () {
+                                       self._setDataActual(data);
+                               });
+                       }
+               } else {
+                       if (_this12.table.options.autoColumns && columnsChanged) {
+                               _this12.table.columnManager.generateColumnsFromRowData(data);
+                       }
+                       _this12.resetScroll();
+
+                       _this12._setDataActual(data);
+               }
+
+               resolve();
+       });
+};
+
+RowManager.prototype._setDataActual = function (data, renderInPosition) {
+       var self = this;
+
+       self.table.options.dataLoading.call(this.table, data);
+
+       this._wipeElements();
+
+       if (this.table.options.history && this.table.modExists("history")) {
+               this.table.modules.history.clear();
+       }
+
+       if (Array.isArray(data)) {
+
+               if (this.table.modExists("selectRow")) {
+                       this.table.modules.selectRow.clearSelectionData();
+               }
+
+               if (this.table.options.reactiveData && this.table.modExists("reactiveData", true)) {
+                       this.table.modules.reactiveData.watchData(data);
+               }
+
+               data.forEach(function (def, i) {
+                       if (def && (typeof def === 'undefined' ? 'undefined' : _typeof(def)) === "object") {
+                               var row = new Row(def, self);
+                               self.rows.push(row);
+                       } else {
+                               console.warn("Data Loading Warning - Invalid row data detected and ignored, expecting object but received:", def);
+                       }
+               });
+
+               self.refreshActiveData(false, false, renderInPosition);
+
+               self.table.options.dataLoaded.call(this.table, data);
+       } else {
+               console.error("Data Loading Error - Unable to process data due to invalid data type \nExpecting: array \nReceived: ", typeof data === 'undefined' ? 'undefined' : _typeof(data), "\nData:     ", data);
+       }
+};
+
+RowManager.prototype._wipeElements = function () {
+       this.rows.forEach(function (row) {
+               row.wipe();
+       });
+
+       if (this.table.options.groupBy && this.table.modExists("groupRows")) {
+               this.table.modules.groupRows.wipe();
+       }
+
+       this.rows = [];
+       this.activeRows = [];
+       this.activeRowsCount = 0;
+       this.displayRows = [];
+       this.displayRowsCount = 0;
+
+       this.adjustTableSize();
+};
+
+RowManager.prototype.deleteRow = function (row, blockRedraw) {
+       var allIndex = this.rows.indexOf(row),
+           activeIndex = this.activeRows.indexOf(row);
+
+       if (activeIndex > -1) {
+               this.activeRows.splice(activeIndex, 1);
+       }
+
+       if (allIndex > -1) {
+               this.rows.splice(allIndex, 1);
+       }
+
+       this.setActiveRows(this.activeRows);
+
+       this.displayRowIterator(function (rows) {
+               var displayIndex = rows.indexOf(row);
+
+               if (displayIndex > -1) {
+                       rows.splice(displayIndex, 1);
+               }
+       });
+
+       if (!blockRedraw) {
+               this.reRenderInPosition();
+       }
+
+       this.regenerateRowNumbers();
+
+       this.table.options.rowDeleted.call(this.table, row.getComponent());
+
+       if (this.table.options.dataChanged) {
+               this.table.options.dataChanged.call(this.table, this.getData());
+       }
+
+       if (this.table.options.groupBy && this.table.modExists("groupRows")) {
+               this.table.modules.groupRows.updateGroupRows(true);
+       } else if (this.table.options.pagination && this.table.modExists("page")) {
+               this.refreshActiveData(false, false, true);
+       } else {
+               if (this.table.options.pagination && this.table.modExists("page")) {
+                       this.refreshActiveData("page");
+               }
+       }
+};
+
+RowManager.prototype.addRow = function (data, pos, index, blockRedraw) {
+
+       var row = this.addRowActual(data, pos, index, blockRedraw);
+
+       if (this.table.options.history && this.table.modExists("history")) {
+               this.table.modules.history.action("rowAdd", row, { data: data, pos: pos, index: index });
+       }
+
+       return row;
+};
+
+//add multiple rows
+RowManager.prototype.addRows = function (data, pos, index) {
+       var _this13 = this;
+
+       var self = this,
+           length = 0,
+           rows = [];
+
+       return new Promise(function (resolve, reject) {
+               pos = _this13.findAddRowPos(pos);
+
+               if (!Array.isArray(data)) {
+                       data = [data];
+               }
+
+               length = data.length - 1;
+
+               if (typeof index == "undefined" && pos || typeof index !== "undefined" && !pos) {
+                       data.reverse();
+               }
+
+               data.forEach(function (item, i) {
+                       var row = self.addRow(item, pos, index, true);
+                       rows.push(row);
+               });
+
+               if (_this13.table.options.groupBy && _this13.table.modExists("groupRows")) {
+                       _this13.table.modules.groupRows.updateGroupRows(true);
+               } else if (_this13.table.options.pagination && _this13.table.modExists("page")) {
+                       _this13.refreshActiveData(false, false, true);
+               } else {
+                       _this13.reRenderInPosition();
+               }
+
+               //recalc column calculations if present
+               if (_this13.table.modExists("columnCalcs")) {
+                       _this13.table.modules.columnCalcs.recalc(_this13.table.rowManager.activeRows);
+               }
+
+               _this13.regenerateRowNumbers();
+               resolve(rows);
+       });
+};
+
+RowManager.prototype.findAddRowPos = function (pos) {
+       if (typeof pos === "undefined") {
+               pos = this.table.options.addRowPos;
+       }
+
+       if (pos === "pos") {
+               pos = true;
+       }
+
+       if (pos === "bottom") {
+               pos = false;
+       }
+
+       return pos;
+};
+
+RowManager.prototype.addRowActual = function (data, pos, index, blockRedraw) {
+       var row = data instanceof Row ? data : new Row(data || {}, this),
+           top = this.findAddRowPos(pos),
+           allIndex = -1,
+           activeIndex,
+           dispRows;
+
+       if (!index && this.table.options.pagination && this.table.options.paginationAddRow == "page") {
+               dispRows = this.getDisplayRows();
+
+               if (top) {
+                       if (dispRows.length) {
+                               index = dispRows[0];
+                       } else {
+                               if (this.activeRows.length) {
+                                       index = this.activeRows[this.activeRows.length - 1];
+                                       top = false;
+                               }
+                       }
+               } else {
+                       if (dispRows.length) {
+                               index = dispRows[dispRows.length - 1];
+                               top = dispRows.length < this.table.modules.page.getPageSize() ? false : true;
+                       }
+               }
+       }
+
+       if (typeof index !== "undefined") {
+               index = this.findRow(index);
+       }
+
+       if (this.table.options.groupBy && this.table.modExists("groupRows")) {
+               this.table.modules.groupRows.assignRowToGroup(row);
+
+               var groupRows = row.getGroup().rows;
+
+               if (groupRows.length > 1) {
+
+                       if (!index || index && groupRows.indexOf(index) == -1) {
+                               if (top) {
+                                       if (groupRows[0] !== row) {
+                                               index = groupRows[0];
+                                               this._moveRowInArray(row.getGroup().rows, row, index, !top);
+                                       }
+                               } else {
+                                       if (groupRows[groupRows.length - 1] !== row) {
+                                               index = groupRows[groupRows.length - 1];
+                                               this._moveRowInArray(row.getGroup().rows, row, index, !top);
+                                       }
+                               }
+                       } else {
+                               this._moveRowInArray(row.getGroup().rows, row, index, !top);
+                       }
+               }
+       }
+
+       if (index) {
+               allIndex = this.rows.indexOf(index);
+       }
+
+       if (index && allIndex > -1) {
+               activeIndex = this.activeRows.indexOf(index);
+
+               this.displayRowIterator(function (rows) {
+                       var displayIndex = rows.indexOf(index);
+
+                       if (displayIndex > -1) {
+                               rows.splice(top ? displayIndex : displayIndex + 1, 0, row);
+                       }
+               });
+
+               if (activeIndex > -1) {
+                       this.activeRows.splice(top ? activeIndex : activeIndex + 1, 0, row);
+               }
+
+               this.rows.splice(top ? allIndex : allIndex + 1, 0, row);
+       } else {
+
+               if (top) {
+
+                       this.displayRowIterator(function (rows) {
+                               rows.unshift(row);
+                       });
+
+                       this.activeRows.unshift(row);
+                       this.rows.unshift(row);
+               } else {
+                       this.displayRowIterator(function (rows) {
+                               rows.push(row);
+                       });
+
+                       this.activeRows.push(row);
+                       this.rows.push(row);
+               }
+       }
+
+       this.setActiveRows(this.activeRows);
+
+       this.table.options.rowAdded.call(this.table, row.getComponent());
+
+       if (this.table.options.dataChanged) {
+               this.table.options.dataChanged.call(this.table, this.getData());
+       }
+
+       if (!blockRedraw) {
+               this.reRenderInPosition();
+       }
+
+       return row;
+};
+
+RowManager.prototype.moveRow = function (from, to, after) {
+       if (this.table.options.history && this.table.modExists("history")) {
+               this.table.modules.history.action("rowMove", from, { posFrom: this.getRowPosition(from), posTo: this.getRowPosition(to), to: to, after: after });
+       }
+
+       this.moveRowActual(from, to, after);
+
+       this.regenerateRowNumbers();
+
+       this.table.options.rowMoved.call(this.table, from.getComponent());
+};
+
+RowManager.prototype.moveRowActual = function (from, to, after) {
+       var _this14 = this;
+
+       this._moveRowInArray(this.rows, from, to, after);
+       this._moveRowInArray(this.activeRows, from, to, after);
+
+       this.displayRowIterator(function (rows) {
+               _this14._moveRowInArray(rows, from, to, after);
+       });
+
+       if (this.table.options.groupBy && this.table.modExists("groupRows")) {
+
+               if (!after && to instanceof Group) {
+                       to = this.table.rowManager.prevDisplayRow(from) || to;
+               }
+
+               var toGroup = to.getGroup();
+               var fromGroup = from.getGroup();
+
+               if (toGroup === fromGroup) {
+                       this._moveRowInArray(toGroup.rows, from, to, after);
+               } else {
+                       if (fromGroup) {
+                               fromGroup.removeRow(from);
+                       }
+
+                       toGroup.insertRow(from, to, after);
+               }
+       }
+};
+
+RowManager.prototype._moveRowInArray = function (rows, from, to, after) {
+       var fromIndex, toIndex, start, end;
+
+       if (from !== to) {
+
+               fromIndex = rows.indexOf(from);
+
+               if (fromIndex > -1) {
+
+                       rows.splice(fromIndex, 1);
+
+                       toIndex = rows.indexOf(to);
+
+                       if (toIndex > -1) {
+
+                               if (after) {
+                                       rows.splice(toIndex + 1, 0, from);
+                               } else {
+                                       rows.splice(toIndex, 0, from);
+                               }
+                       } else {
+                               rows.splice(fromIndex, 0, from);
+                       }
+               }
+
+               //restyle rows
+               if (rows === this.getDisplayRows()) {
+
+                       start = fromIndex < toIndex ? fromIndex : toIndex;
+                       end = toIndex > fromIndex ? toIndex : fromIndex + 1;
+
+                       for (var i = start; i <= end; i++) {
+                               if (rows[i]) {
+                                       this.styleRow(rows[i], i);
+                               }
+                       }
+               }
+       }
+};
+
+RowManager.prototype.clearData = function () {
+       this.setData([]);
+};
+
+RowManager.prototype.getRowIndex = function (row) {
+       return this.findRowIndex(row, this.rows);
+};
+
+RowManager.prototype.getDisplayRowIndex = function (row) {
+       var index = this.getDisplayRows().indexOf(row);
+       return index > -1 ? index : false;
+};
+
+RowManager.prototype.nextDisplayRow = function (row, rowOnly) {
+       var index = this.getDisplayRowIndex(row),
+           nextRow = false;
+
+       if (index !== false && index < this.displayRowsCount - 1) {
+               nextRow = this.getDisplayRows()[index + 1];
+       }
+
+       if (nextRow && (!(nextRow instanceof Row) || nextRow.type != "row")) {
+               return this.nextDisplayRow(nextRow, rowOnly);
+       }
+
+       return nextRow;
+};
+
+RowManager.prototype.prevDisplayRow = function (row, rowOnly) {
+       var index = this.getDisplayRowIndex(row),
+           prevRow = false;
+
+       if (index) {
+               prevRow = this.getDisplayRows()[index - 1];
+       }
+
+       if (rowOnly && prevRow && (!(prevRow instanceof Row) || prevRow.type != "row")) {
+               return this.prevDisplayRow(prevRow, rowOnly);
+       }
+
+       return prevRow;
+};
+
+RowManager.prototype.findRowIndex = function (row, list) {
+       var rowIndex;
+
+       row = this.findRow(row);
+
+       if (row) {
+               rowIndex = list.indexOf(row);
+
+               if (rowIndex > -1) {
+                       return rowIndex;
+               }
+       }
+
+       return false;
+};
+
+RowManager.prototype.getData = function (active, transform) {
+       var output = [],
+           rows = this.getRows(active);
+
+       rows.forEach(function (row) {
+               if (row.type == "row") {
+                       output.push(row.getData(transform || "data"));
+               }
+       });
+
+       return output;
+};
+
+RowManager.prototype.getComponents = function (active) {
+       var output = [],
+           rows = this.getRows(active);
+
+       rows.forEach(function (row) {
+               output.push(row.getComponent());
+       });
+
+       return output;
+};
+
+RowManager.prototype.getDataCount = function (active) {
+       var rows = this.getRows(active);
+
+       return rows.length;
+};
+
+RowManager.prototype._genRemoteRequest = function () {
+       var _this15 = this;
+
+       var table = this.table,
+           options = table.options,
+           params = {};
+
+       if (table.modExists("page")) {
+               //set sort data if defined
+               if (options.ajaxSorting) {
+                       var sorters = this.table.modules.sort.getSort();
+
+                       sorters.forEach(function (item) {
+                               delete item.column;
+                       });
+
+                       params[this.table.modules.page.paginationDataSentNames.sorters] = sorters;
+               }
+
+               //set filter data if defined
+               if (options.ajaxFiltering) {
+                       var filters = this.table.modules.filter.getFilters(true, true);
+
+                       params[this.table.modules.page.paginationDataSentNames.filters] = filters;
+               }
+
+               this.table.modules.ajax.setParams(params, true);
+       }
+
+       table.modules.ajax.sendRequest().then(function (data) {
+               _this15._setDataActual(data, true);
+       }).catch(function (e) {});
+};
+
+//choose the path to refresh data after a filter update
+RowManager.prototype.filterRefresh = function () {
+       var table = this.table,
+           options = table.options,
+           left = this.scrollLeft;
+
+       if (options.ajaxFiltering) {
+               if (options.pagination == "remote" && table.modExists("page")) {
+                       table.modules.page.reset(true);
+                       table.modules.page.setPage(1).then(function () {}).catch(function () {});
+               } else if (options.ajaxProgressiveLoad) {
+                       table.modules.ajax.loadData().then(function () {}).catch(function () {});
+               } else {
+                       //assume data is url, make ajax call to url to get data
+                       this._genRemoteRequest();
+               }
+       } else {
+               this.refreshActiveData("filter");
+       }
+
+       this.scrollHorizontal(left);
+};
+
+//choose the path to refresh data after a sorter update
+RowManager.prototype.sorterRefresh = function (loadOrignalData) {
+       var table = this.table,
+           options = this.table.options,
+           left = this.scrollLeft;
+
+       if (options.ajaxSorting) {
+               if ((options.pagination == "remote" || options.progressiveLoad) && table.modExists("page")) {
+                       table.modules.page.reset(true);
+                       table.modules.page.setPage(1).then(function () {}).catch(function () {});
+               } else if (options.ajaxProgressiveLoad) {
+                       table.modules.ajax.loadData().then(function () {}).catch(function () {});
+               } else {
+                       //assume data is url, make ajax call to url to get data
+                       this._genRemoteRequest();
+               }
+       } else {
+               this.refreshActiveData(loadOrignalData ? "filter" : "sort");
+       }
+
+       this.scrollHorizontal(left);
+};
+
+RowManager.prototype.scrollHorizontal = function (left) {
+       this.scrollLeft = left;
+       this.element.scrollLeft = left;
+
+       if (this.table.options.groupBy) {
+               this.table.modules.groupRows.scrollHeaders(left);
+       }
+
+       if (this.table.modExists("columnCalcs")) {
+               this.table.modules.columnCalcs.scrollHorizontal(left);
+       }
+};
+
+//set active data set
+RowManager.prototype.refreshActiveData = function (stage, skipStage, renderInPosition) {
+       var self = this,
+           table = this.table,
+           cascadeOrder = ["all", "filter", "sort", "display", "freeze", "group", "tree", "page"],
+           displayIndex;
+
+       if (this.redrawBlock) {
+
+               if (!this.redrawBlockRestoreConfig || cascadeOrder.indexOf(stage) < cascadeOrder.indexOf(this.redrawBlockRestoreConfig.stage)) {
+                       this.redrawBlockRestoreConfig = {
+                               stage: stage,
+                               skipStage: skipStage,
+                               renderInPosition: renderInPosition
+                       };
+               }
+
+               return;
+       } else {
+
+               if (self.table.modExists("edit")) {
+                       self.table.modules.edit.cancelEdit();
+               }
+
+               if (!stage) {
+                       stage = "all";
+               }
+
+               if (table.options.selectable && !table.options.selectablePersistence && table.modExists("selectRow")) {
+                       table.modules.selectRow.deselectRows();
+               }
+
+               //cascade through data refresh stages
+               switch (stage) {
+                       case "all":
+
+                       case "filter":
+                               if (!skipStage) {
+                                       if (table.modExists("filter")) {
+                                               self.setActiveRows(table.modules.filter.filter(self.rows));
+                                       } else {
+                                               self.setActiveRows(self.rows.slice(0));
+                                       }
+                               } else {
+                                       skipStage = false;
+                               }
+
+                       case "sort":
+                               if (!skipStage) {
+                                       if (table.modExists("sort")) {
+                                               table.modules.sort.sort(this.activeRows);
+                                       }
+                               } else {
+                                       skipStage = false;
+                               }
+
+                               //regenerate row numbers for row number formatter if in use
+                               this.regenerateRowNumbers();
+
+                       //generic stage to allow for pipeline trigger after the data manipulation stage
+                       case "display":
+                               this.resetDisplayRows();
+
+                       case "freeze":
+                               if (!skipStage) {
+                                       if (this.table.modExists("frozenRows")) {
+                                               if (table.modules.frozenRows.isFrozen()) {
+                                                       if (!table.modules.frozenRows.getDisplayIndex()) {
+                                                               table.modules.frozenRows.setDisplayIndex(this.getNextDisplayIndex());
+                                                       }
+
+                                                       displayIndex = table.modules.frozenRows.getDisplayIndex();
+
+                                                       displayIndex = self.setDisplayRows(table.modules.frozenRows.getRows(this.getDisplayRows(displayIndex - 1)), displayIndex);
+
+                                                       if (displayIndex !== true) {
+                                                               table.modules.frozenRows.setDisplayIndex(displayIndex);
+                                                       }
+                                               }
+                                       }
+                               } else {
+                                       skipStage = false;
+                               }
+
+                       case "group":
+                               if (!skipStage) {
+                                       if (table.options.groupBy && table.modExists("groupRows")) {
+
+                                               if (!table.modules.groupRows.getDisplayIndex()) {
+                                                       table.modules.groupRows.setDisplayIndex(this.getNextDisplayIndex());
+                                               }
+
+                                               displayIndex = table.modules.groupRows.getDisplayIndex();
+
+                                               displayIndex = self.setDisplayRows(table.modules.groupRows.getRows(this.getDisplayRows(displayIndex - 1)), displayIndex);
+
+                                               if (displayIndex !== true) {
+                                                       table.modules.groupRows.setDisplayIndex(displayIndex);
+                                               }
+                                       }
+                               } else {
+                                       skipStage = false;
+                               }
+
+                       case "tree":
+
+                               if (!skipStage) {
+                                       if (table.options.dataTree && table.modExists("dataTree")) {
+                                               if (!table.modules.dataTree.getDisplayIndex()) {
+                                                       table.modules.dataTree.setDisplayIndex(this.getNextDisplayIndex());
+                                               }
+
+                                               displayIndex = table.modules.dataTree.getDisplayIndex();
+
+                                               displayIndex = self.setDisplayRows(table.modules.dataTree.getRows(this.getDisplayRows(displayIndex - 1)), displayIndex);
+
+                                               if (displayIndex !== true) {
+                                                       table.modules.dataTree.setDisplayIndex(displayIndex);
+                                               }
+                                       }
+                               } else {
+                                       skipStage = false;
+                               }
+
+                               if (table.options.pagination && table.modExists("page") && !renderInPosition) {
+                                       if (table.modules.page.getMode() == "local") {
+                                               table.modules.page.reset();
+                                       }
+                               }
+
+                       case "page":
+                               if (!skipStage) {
+                                       if (table.options.pagination && table.modExists("page")) {
+
+                                               if (!table.modules.page.getDisplayIndex()) {
+                                                       table.modules.page.setDisplayIndex(this.getNextDisplayIndex());
+                                               }
+
+                                               displayIndex = table.modules.page.getDisplayIndex();
+
+                                               if (table.modules.page.getMode() == "local") {
+                                                       table.modules.page.setMaxRows(this.getDisplayRows(displayIndex - 1).length);
+                                               }
+
+                                               displayIndex = self.setDisplayRows(table.modules.page.getRows(this.getDisplayRows(displayIndex - 1)), displayIndex);
+
+                                               if (displayIndex !== true) {
+                                                       table.modules.page.setDisplayIndex(displayIndex);
+                                               }
+                                       }
+                               } else {
+                                       skipStage = false;
+                               }
+               }
+
+               if (Tabulator.prototype.helpers.elVisible(self.element)) {
+                       if (renderInPosition) {
+                               self.reRenderInPosition();
+                       } else {
+
+                               if (stage === "all" && this.table.options.virtualDomHoz) {
+                                       this.table.vdomHoz.dataChange();
+                               }
+
+                               self.renderTable();
+
+                               if (table.options.layoutColumnsOnNewData) {
+                                       self.table.columnManager.redraw(true);
+                               }
+                       }
+               }
+
+               if (table.modExists("columnCalcs")) {
+                       table.modules.columnCalcs.recalc(this.activeRows);
+               }
+       }
+};
+
+//regenerate row numbers for row number formatter if in use
+RowManager.prototype.regenerateRowNumbers = function () {
+       var _this16 = this;
+
+       if (this.rowNumColumn) {
+               this.activeRows.forEach(function (row) {
+                       var cell = row.getCell(_this16.rowNumColumn);
+
+                       if (cell) {
+                               cell._generateContents();
+                       }
+               });
+       }
+};
+
+RowManager.prototype.setActiveRows = function (activeRows) {
+       this.activeRows = activeRows;
+       this.activeRowsCount = this.activeRows.length;
+};
+
+//reset display rows array
+RowManager.prototype.resetDisplayRows = function () {
+       this.displayRows = [];
+
+       this.displayRows.push(this.activeRows.slice(0));
+
+       this.displayRowsCount = this.displayRows[0].length;
+
+       if (this.table.modExists("frozenRows")) {
+               this.table.modules.frozenRows.setDisplayIndex(0);
+       }
+
+       if (this.table.options.groupBy && this.table.modExists("groupRows")) {
+               this.table.modules.groupRows.setDisplayIndex(0);
+       }
+
+       if (this.table.options.pagination && this.table.modExists("page")) {
+               this.table.modules.page.setDisplayIndex(0);
+       }
+};
+
+RowManager.prototype.getNextDisplayIndex = function () {
+       return this.displayRows.length;
+};
+
+//set display row pipeline data
+RowManager.prototype.setDisplayRows = function (displayRows, index) {
+
+       var output = true;
+
+       if (index && typeof this.displayRows[index] != "undefined") {
+               this.displayRows[index] = displayRows;
+               output = true;
+       } else {
+               this.displayRows.push(displayRows);
+               output = index = this.displayRows.length - 1;
+       }
+
+       if (index == this.displayRows.length - 1) {
+               this.displayRowsCount = this.displayRows[this.displayRows.length - 1].length;
+       }
+
+       return output;
+};
+
+RowManager.prototype.getDisplayRows = function (index) {
+       if (typeof index == "undefined") {
+               return this.displayRows.length ? this.displayRows[this.displayRows.length - 1] : [];
+       } else {
+               return this.displayRows[index] || [];
+       }
+};
+
+RowManager.prototype.getVisibleRows = function (viewable) {
+       var topEdge = this.element.scrollTop,
+           bottomEdge = this.element.clientHeight + topEdge,
+           topFound = false,
+           topRow = 0,
+           bottomRow = 0,
+           rows = this.getDisplayRows();
+
+       if (viewable) {
+
+               this.getDisplayRows();
+               for (var i = this.vDomTop; i <= this.vDomBottom; i++) {
+                       if (rows[i]) {
+                               if (!topFound) {
+                                       if (topEdge - rows[i].getElement().offsetTop >= 0) {
+                                               topRow = i;
+                                       } else {
+                                               topFound = true;
+
+                                               if (bottomEdge - rows[i].getElement().offsetTop >= 0) {
+                                                       bottomRow = i;
+                                               } else {
+                                                       break;
+                                               }
+                                       }
+                               } else {
+                                       if (bottomEdge - rows[i].getElement().offsetTop >= 0) {
+                                               bottomRow = i;
+                                       } else {
+                                               break;
+                                       }
+                               }
+                       }
+               }
+       } else {
+               topRow = this.vDomTop;
+               bottomRow = this.vDomBottom;
+       }
+
+       return rows.slice(topRow, bottomRow + 1);
+};
+
+//repeat action accross display rows
+RowManager.prototype.displayRowIterator = function (callback) {
+       this.displayRows.forEach(callback);
+
+       this.displayRowsCount = this.displayRows[this.displayRows.length - 1].length;
+};
+
+//return only actual rows (not group headers etc)
+RowManager.prototype.getRows = function (active) {
+       var rows;
+
+       switch (active) {
+               case "active":
+                       rows = this.activeRows;
+                       break;
+
+               case "display":
+                       rows = this.table.rowManager.getDisplayRows();
+                       break;
+
+               case "visible":
+                       rows = this.getVisibleRows(true);
+                       break;
+
+               case "selected":
+                       rows = this.table.modules.selectRow.selectedRows;
+                       break;
+
+               default:
+                       rows = this.rows;
+       }
+
+       return rows;
+};
+
+///////////////// Table Rendering /////////////////
+
+//trigger rerender of table in current position
+RowManager.prototype.reRenderInPosition = function (callback) {
+       if (this.getRenderMode() == "virtual") {
+
+               if (this.redrawBlock) {
+                       if (callback) {
+                               callback();
+                       } else {
+                               this.redrawBlockRederInPosition = true;
+                       }
+               } else {
+                       var scrollTop = this.element.scrollTop;
+                       var topRow = false;
+                       var topOffset = false;
+
+                       var left = this.scrollLeft;
+
+                       var rows = this.getDisplayRows();
+
+                       for (var i = this.vDomTop; i <= this.vDomBottom; i++) {
+
+                               if (rows[i]) {
+                                       var diff = scrollTop - rows[i].getElement().offsetTop;
+
+                                       if (topOffset === false || Math.abs(diff) < topOffset) {
+                                               topOffset = diff;
+                                               topRow = i;
+                                       } else {
+                                               break;
+                                       }
+                               }
+                       }
+
+                       if (callback) {
+                               callback();
+                       }
+
+                       this._virtualRenderFill(topRow === false ? this.displayRowsCount - 1 : topRow, true, topOffset || 0);
+
+                       this.scrollHorizontal(left);
+               }
+       } else {
+               this.renderTable();
+
+               if (callback) {
+                       callback();
+               }
+       }
+};
+
+RowManager.prototype.setRenderMode = function () {
+
+       if (this.table.options.virtualDom) {
+
+               this.renderMode = "virtual";
+
+               if (this.table.element.clientHeight || this.table.options.height) {
+                       this.fixedHeight = true;
+               } else {
+                       this.fixedHeight = false;
+               }
+       } else {
+               this.renderMode = "classic";
+       }
+};
+
+RowManager.prototype.getRenderMode = function () {
+       return this.renderMode;
+};
+
+RowManager.prototype.renderTable = function () {
+
+       this.table.options.renderStarted.call(this.table);
+
+       this.element.scrollTop = 0;
+
+       switch (this.renderMode) {
+               case "classic":
+                       this._simpleRender();
+                       break;
+
+               case "virtual":
+                       this._virtualRenderFill();
+                       break;
+       }
+
+       if (this.firstRender) {
+               if (this.displayRowsCount) {
+                       this.firstRender = false;
+                       this.table.modules.layout.layout();
+               } else {
+                       this.renderEmptyScroll();
+               }
+       }
+
+       if (this.table.modExists("frozenColumns")) {
+               this.table.modules.frozenColumns.layout();
+       }
+
+       if (!this.displayRowsCount) {
+               if (this.table.options.placeholder) {
+
+                       this.table.options.placeholder.setAttribute("tabulator-render-mode", this.renderMode);
+
+                       this.getElement().appendChild(this.table.options.placeholder);
+                       this.table.options.placeholder.style.width = this.table.columnManager.getWidth() + "px";
+               }
+       }
+
+       this.table.options.renderComplete.call(this.table);
+};
+
+//simple render on heightless table
+RowManager.prototype._simpleRender = function () {
+       this._clearVirtualDom();
+
+       if (this.displayRowsCount) {
+               this.checkClassicModeGroupHeaderWidth();
+       } else {
+               this.renderEmptyScroll();
+       }
+};
+
+RowManager.prototype.checkClassicModeGroupHeaderWidth = function () {
+       var self = this,
+           element = this.tableElement,
+           onlyGroupHeaders = true;
+
+       self.getDisplayRows().forEach(function (row, index) {
+               self.styleRow(row, index);
+               element.appendChild(row.getElement());
+               row.initialize(true);
+
+               if (row.type !== "group") {
+                       onlyGroupHeaders = false;
+               }
+       });
+
+       if (onlyGroupHeaders) {
+               element.style.minWidth = self.table.columnManager.getWidth() + "px";
+       } else {
+               element.style.minWidth = "";
+       }
+};
+
+//show scrollbars on empty table div
+RowManager.prototype.renderEmptyScroll = function () {
+       if (this.table.options.placeholder) {
+               this.tableElement.style.display = "none";
+       } else {
+               this.tableElement.style.minWidth = this.table.columnManager.getWidth() + "px";
+               // this.tableElement.style.minHeight = "1px";
+               // this.tableElement.style.visibility = "hidden";
+       }
+};
+
+RowManager.prototype._clearVirtualDom = function () {
+       var element = this.tableElement;
+
+       if (this.table.options.placeholder && this.table.options.placeholder.parentNode) {
+               this.table.options.placeholder.parentNode.removeChild(this.table.options.placeholder);
+       }
+
+       // element.children.detach();
+       while (element.firstChild) {
+               element.removeChild(element.firstChild);
+       }element.style.paddingTop = "";
+       element.style.paddingBottom = "";
+       element.style.minWidth = "";
+       element.style.minHeight = "";
+       element.style.display = "";
+       element.style.visibility = "";
+
+       this.scrollTop = 0;
+       this.scrollLeft = 0;
+       this.vDomTop = 0;
+       this.vDomBottom = 0;
+       this.vDomTopPad = 0;
+       this.vDomBottomPad = 0;
+};
+
+RowManager.prototype.styleRow = function (row, index) {
+       var rowEl = row.getElement();
+
+       if (index % 2) {
+               rowEl.classList.add("tabulator-row-even");
+               rowEl.classList.remove("tabulator-row-odd");
+       } else {
+               rowEl.classList.add("tabulator-row-odd");
+               rowEl.classList.remove("tabulator-row-even");
+       }
+};
+
+//full virtual render
+RowManager.prototype._virtualRenderFill = function (position, forceMove, offset) {
+       var self = this,
+           element = self.tableElement,
+           holder = self.element,
+           topPad = 0,
+           rowsHeight = 0,
+           topPadHeight = 0,
+           i = 0,
+           onlyGroupHeaders = true,
+           rows = self.getDisplayRows();
+
+       position = position || 0;
+
+       offset = offset || 0;
+
+       if (!position) {
+               self._clearVirtualDom();
+       } else {
+               while (element.firstChild) {
+                       element.removeChild(element.firstChild);
+               } //check if position is too close to bottom of table
+               var heightOccupied = (self.displayRowsCount - position + 1) * self.vDomRowHeight;
+
+               if (heightOccupied < self.height) {
+                       position -= Math.ceil((self.height - heightOccupied) / self.vDomRowHeight);
+
+                       if (position < 0) {
+                               position = 0;
+                       }
+               }
+
+               //calculate initial pad
+               topPad = Math.min(Math.max(Math.floor(self.vDomWindowBuffer / self.vDomRowHeight), self.vDomWindowMinMarginRows), position);
+               position -= topPad;
+       }
+
+       if (self.displayRowsCount && Tabulator.prototype.helpers.elVisible(self.element)) {
+
+               self.vDomTop = position;
+
+               self.vDomBottom = position - 1;
+
+               while ((rowsHeight <= self.height + self.vDomWindowBuffer || i < self.vDomWindowMinTotalRows) && self.vDomBottom < self.displayRowsCount - 1) {
+                       var index = self.vDomBottom + 1,
+                           row = rows[index],
+                           rowHeight = 0;
+
+                       self.styleRow(row, index);
+
+                       element.appendChild(row.getElement());
+
+                       row.initialize();
+
+                       if (!row.heightInitialized) {
+                               row.normalizeHeight(true);
+                       }
+
+                       // if(!row.initialized){
+                       //      row.initialize(true);
+                       // }else{
+                       //      if(!row.heightInitialized){
+                       //              row.normalizeHeight(true);
+                       //      }
+                       // }
+
+                       rowHeight = row.getHeight();
+
+                       if (i < topPad) {
+                               topPadHeight += rowHeight;
+                       } else {
+                               rowsHeight += rowHeight;
+                       }
+
+                       if (rowHeight > this.vDomWindowBuffer) {
+                               this.vDomWindowBuffer = rowHeight * 2;
+                       }
+
+                       if (row.type !== "group") {
+                               onlyGroupHeaders = false;
+                       }
+
+                       self.vDomBottom++;
+                       i++;
+               }
+
+               if (!position) {
+                       this.vDomTopPad = 0;
+                       //adjust rowheight to match average of rendered elements
+                       self.vDomRowHeight = Math.floor((rowsHeight + topPadHeight) / i);
+                       self.vDomBottomPad = self.vDomRowHeight * (self.displayRowsCount - self.vDomBottom - 1);
+
+                       self.vDomScrollHeight = topPadHeight + rowsHeight + self.vDomBottomPad - self.height;
+               } else {
+                       self.vDomTopPad = !forceMove ? self.scrollTop - topPadHeight : self.vDomRowHeight * this.vDomTop + offset;
+                       self.vDomBottomPad = self.vDomBottom == self.displayRowsCount - 1 ? 0 : Math.max(self.vDomScrollHeight - self.vDomTopPad - rowsHeight - topPadHeight, 0);
+               }
+
+               element.style.paddingTop = self.vDomTopPad + "px";
+               element.style.paddingBottom = self.vDomBottomPad + "px";
+
+               if (forceMove) {
+                       this.scrollTop = self.vDomTopPad + topPadHeight + offset - (this.element.scrollWidth > this.element.clientWidth ? this.element.offsetHeight - this.element.clientHeight : 0);
+               }
+
+               this.scrollTop = Math.min(this.scrollTop, this.element.scrollHeight - this.height);
+
+               //adjust for horizontal scrollbar if present (and not at top of table)
+               if (this.element.scrollWidth > this.element.offsetWidth && forceMove) {
+                       this.scrollTop += this.element.offsetHeight - this.element.clientHeight;
+               }
+
+               this.vDomScrollPosTop = this.scrollTop;
+               this.vDomScrollPosBottom = this.scrollTop;
+
+               holder.scrollTop = this.scrollTop;
+
+               element.style.minWidth = onlyGroupHeaders ? self.table.columnManager.getWidth() + "px" : "";
+
+               if (self.table.options.groupBy) {
+                       if (self.table.modules.layout.getMode() != "fitDataFill" && self.displayRowsCount == self.table.modules.groupRows.countGroups()) {
+                               self.tableElement.style.minWidth = self.table.columnManager.getWidth();
+                       }
+               }
+       } else {
+               this.renderEmptyScroll();
+       }
+
+       if (!this.fixedHeight) {
+               this.adjustTableSize();
+       }
+};
+
+//handle vertical scrolling
+RowManager.prototype.scrollVertical = function (dir) {
+       var topDiff = this.scrollTop - this.vDomScrollPosTop;
+       var bottomDiff = this.scrollTop - this.vDomScrollPosBottom;
+       var margin = this.vDomWindowBuffer * 2;
+
+       if (-topDiff > margin || bottomDiff > margin) {
+               //if big scroll redraw table;
+               var left = this.scrollLeft;
+               this._virtualRenderFill(Math.floor(this.element.scrollTop / this.element.scrollHeight * this.displayRowsCount));
+               this.scrollHorizontal(left);
+       } else {
+
+               if (dir) {
+                       //scrolling up
+                       if (topDiff < 0) {
+
+                               this._addTopRow(-topDiff);
+                       }
+
+                       if (bottomDiff < 0) {
+
+                               //hide bottom row if needed
+                               if (this.vDomScrollHeight - this.scrollTop > this.vDomWindowBuffer) {
+                                       this._removeBottomRow(-bottomDiff);
+                               } else {
+                                       this.vDomScrollPosBottom = this.scrollTop;
+                               }
+                       }
+               } else {
+                       //scrolling down
+                       if (topDiff >= 0) {
+
+                               //hide top row if needed
+                               if (this.scrollTop > this.vDomWindowBuffer) {
+
+                                       this._removeTopRow(topDiff);
+                               } else {
+                                       this.vDomScrollPosTop = this.scrollTop;
+                               }
+                       }
+
+                       if (bottomDiff >= 0) {
+
+                               this._addBottomRow(bottomDiff);
+                       }
+               }
+       }
+};
+
+RowManager.prototype._addTopRow = function (topDiff) {
+       var i = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
+
+       var table = this.tableElement,
+           rows = this.getDisplayRows();
+
+       if (this.vDomTop) {
+               var index = this.vDomTop - 1,
+                   topRow = rows[index],
+                   topRowHeight = topRow.getHeight() || this.vDomRowHeight;
+
+               //hide top row if needed
+               if (topDiff >= topRowHeight) {
+                       this.styleRow(topRow, index);
+                       table.insertBefore(topRow.getElement(), table.firstChild);
+                       if (!topRow.initialized || !topRow.heightInitialized) {
+                               this.vDomTopNewRows.push(topRow);
+
+                               if (!topRow.heightInitialized) {
+                                       topRow.clearCellHeight();
+                               }
+                       }
+                       topRow.initialize();
+
+                       this.vDomTopPad -= topRowHeight;
+
+                       if (this.vDomTopPad < 0) {
+                               this.vDomTopPad = index * this.vDomRowHeight;
+                       }
+
+                       if (!index) {
+                               this.vDomTopPad = 0;
+                       }
+
+                       table.style.paddingTop = this.vDomTopPad + "px";
+                       this.vDomScrollPosTop -= topRowHeight;
+                       this.vDomTop--;
+               }
+
+               topDiff = -(this.scrollTop - this.vDomScrollPosTop);
+
+               if (topRow.getHeight() > this.vDomWindowBuffer) {
+                       this.vDomWindowBuffer = topRow.getHeight() * 2;
+               }
+
+               if (i < this.vDomMaxRenderChain && this.vDomTop && topDiff >= (rows[this.vDomTop - 1].getHeight() || this.vDomRowHeight)) {
+                       this._addTopRow(topDiff, i + 1);
+               } else {
+                       this._quickNormalizeRowHeight(this.vDomTopNewRows);
+               }
+       }
+};
+
+RowManager.prototype._removeTopRow = function (topDiff) {
+       var table = this.tableElement,
+           topRow = this.getDisplayRows()[this.vDomTop],
+           topRowHeight = topRow.getHeight() || this.vDomRowHeight;
+
+       if (topDiff >= topRowHeight) {
+
+               var rowEl = topRow.getElement();
+               rowEl.parentNode.removeChild(rowEl);
+
+               this.vDomTopPad += topRowHeight;
+               table.style.paddingTop = this.vDomTopPad + "px";
+               this.vDomScrollPosTop += this.vDomTop ? topRowHeight : topRowHeight + this.vDomWindowBuffer;
+               this.vDomTop++;
+
+               topDiff = this.scrollTop - this.vDomScrollPosTop;
+
+               this._removeTopRow(topDiff);
+       }
+};
+
+RowManager.prototype._addBottomRow = function (bottomDiff) {
+       var i = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
+
+       var table = this.tableElement,
+           rows = this.getDisplayRows();
+
+       if (this.vDomBottom < this.displayRowsCount - 1) {
+               var index = this.vDomBottom + 1,
+                   bottomRow = rows[index],
+                   bottomRowHeight = bottomRow.getHeight() || this.vDomRowHeight;
+
+               //hide bottom row if needed
+               if (bottomDiff >= bottomRowHeight) {
+                       this.styleRow(bottomRow, index);
+                       table.appendChild(bottomRow.getElement());
+
+                       if (!bottomRow.initialized || !bottomRow.heightInitialized) {
+                               this.vDomBottomNewRows.push(bottomRow);
+
+                               if (!bottomRow.heightInitialized) {
+                                       bottomRow.clearCellHeight();
+                               }
+                       }
+
+                       bottomRow.initialize();
+
+                       this.vDomBottomPad -= bottomRowHeight;
+
+                       if (this.vDomBottomPad < 0 || index == this.displayRowsCount - 1) {
+                               this.vDomBottomPad = 0;
+                       }
+
+                       table.style.paddingBottom = this.vDomBottomPad + "px";
+                       this.vDomScrollPosBottom += bottomRowHeight;
+                       this.vDomBottom++;
+               }
+
+               bottomDiff = this.scrollTop - this.vDomScrollPosBottom;
+
+               if (bottomRow.getHeight() > this.vDomWindowBuffer) {
+                       this.vDomWindowBuffer = bottomRow.getHeight() * 2;
+               }
+
+               if (i < this.vDomMaxRenderChain && this.vDomBottom < this.displayRowsCount - 1 && bottomDiff >= (rows[this.vDomBottom + 1].getHeight() || this.vDomRowHeight)) {
+                       this._addBottomRow(bottomDiff, i + 1);
+               } else {
+                       this._quickNormalizeRowHeight(this.vDomBottomNewRows);
+               }
+       }
+};
+
+RowManager.prototype._removeBottomRow = function (bottomDiff) {
+       var table = this.tableElement,
+           bottomRow = this.getDisplayRows()[this.vDomBottom],
+           bottomRowHeight = bottomRow.getHeight() || this.vDomRowHeight;
+
+       if (bottomDiff >= bottomRowHeight) {
+
+               var rowEl = bottomRow.getElement();
+
+               if (rowEl.parentNode) {
+                       rowEl.parentNode.removeChild(rowEl);
+               }
+
+               this.vDomBottomPad += bottomRowHeight;
+
+               if (this.vDomBottomPad < 0) {
+                       this.vDomBottomPad = 0;
+               }
+
+               table.style.paddingBottom = this.vDomBottomPad + "px";
+               this.vDomScrollPosBottom -= bottomRowHeight;
+               this.vDomBottom--;
+
+               bottomDiff = -(this.scrollTop - this.vDomScrollPosBottom);
+
+               this._removeBottomRow(bottomDiff);
+       }
+};
+
+RowManager.prototype._quickNormalizeRowHeight = function (rows) {
+       rows.forEach(function (row) {
+               row.calcHeight();
+       });
+
+       rows.forEach(function (row) {
+               row.setCellHeight();
+       });
+
+       rows.length = 0;
+};
+
+//normalize height of active rows
+RowManager.prototype.normalizeHeight = function () {
+       this.activeRows.forEach(function (row) {
+               row.normalizeHeight();
+       });
+};
+
+//adjust the height of the table holder to fit in the Tabulator element
+RowManager.prototype.adjustTableSize = function () {
+       var initialHeight = this.element.clientHeight,
+           modExists;
+
+       if (this.renderMode === "virtual") {
+               var otherHeight = Math.floor(this.columnManager.getElement().offsetHeight + (this.table.footerManager && !this.table.footerManager.external ? this.table.footerManager.getElement().offsetHeight : 0));
+
+               if (this.fixedHeight) {
+                       this.element.style.minHeight = "calc(100% - " + otherHeight + "px)";
+                       this.element.style.height = "calc(100% - " + otherHeight + "px)";
+                       this.element.style.maxHeight = "calc(100% - " + otherHeight + "px)";
+               } else {
+                       this.element.style.height = "";
+                       this.element.style.height = Math.floor(this.table.element.clientHeight) - otherHeight + "px";
+                       this.element.scrollTop = this.scrollTop;
+               }
+
+               this.height = this.element.clientHeight;
+               this.vDomWindowBuffer = this.table.options.virtualDomBuffer || this.height;
+
+               //check if the table has changed size when dealing with variable height tables
+               if (!this.fixedHeight && Math.floor(initialHeight) != Math.floor(this.element.clientHeight)) {
+                       modExists = this.table.modExists("resizeTable");
+
+                       if (modExists && !this.table.modules.resizeTable.autoResize || !modExists) {
+                               this.redraw();
+                       }
+               }
+       }
+};
+
+//renitialize all rows
+RowManager.prototype.reinitialize = function () {
+       this.rows.forEach(function (row) {
+               row.reinitialize(true);
+       });
+};
+
+//prevent table from being redrawn
+RowManager.prototype.blockRedraw = function () {
+       this.redrawBlock = true;
+       this.redrawBlockRestoreConfig = false;
+};
+
+//restore table redrawing
+RowManager.prototype.restoreRedraw = function () {
+       this.redrawBlock = false;
+
+       if (this.redrawBlockRestoreConfig) {
+               this.refreshActiveData(this.redrawBlockRestoreConfig.stage, this.redrawBlockRestoreConfig.skipStage, this.redrawBlockRestoreConfig.renderInPosition);
+
+               this.redrawBlockRestoreConfig = false;
+       } else {
+               if (this.redrawBlockRederInPosition) {
+                       this.reRenderInPosition();
+               }
+       }
+
+       this.redrawBlockRederInPosition = false;
+};
+
+//redraw table
+RowManager.prototype.redraw = function (force) {
+       var pos = 0,
+           left = this.scrollLeft;
+
+       this.adjustTableSize();
+
+       this.table.tableWidth = this.table.element.clientWidth;
+
+       if (!force) {
+               if (this.renderMode == "classic") {
+
+                       if (this.table.options.groupBy) {
+                               this.refreshActiveData("group", false, false);
+                       } else {
+                               this._simpleRender();
+                       }
+               } else {
+                       this.reRenderInPosition();
+                       this.scrollHorizontal(left);
+               }
+
+               if (!this.displayRowsCount) {
+                       if (this.table.options.placeholder) {
+                               this.getElement().appendChild(this.table.options.placeholder);
+                       }
+               }
+       } else {
+               this.renderTable();
+       }
+};
+
+RowManager.prototype.resetScroll = function () {
+       this.element.scrollLeft = 0;
+       this.element.scrollTop = 0;
+
+       if (this.table.browser === "ie") {
+               var event = document.createEvent("Event");
+               event.initEvent("scroll", false, true);
+               this.element.dispatchEvent(event);
+       } else {
+               this.element.dispatchEvent(new Event('scroll'));
+       }
+};
+
+var VDomHoz = function VDomHoz(table) {
+       this.table = table;
+
+       this.element = this.table.rowManager.tableElement;
+       this.holderEl = this.table.rowManager.element;
+
+       this.leftCol = 0;
+       this.rightCol = 0;
+       this.scrollLeft = 0;
+
+       this.vDomScrollPosLeft = 0;
+       this.vDomScrollPosRight = 0;
+
+       this.vDomPadLeft = 0;
+       this.vDomPadRight = 0;
+
+       this.fitDataColAvg = 0;
+
+       this.window = 200; //pixel margin to make column visible before it is shown on screen
+
+       this.initialized = false;
+
+       this.columns = [];
+
+       if (this.compatabilityCheck()) {
+               this.initialize();
+       }
+};
+
+VDomHoz.prototype.compatabilityCheck = function () {
+       var options = this.table.options,
+           frozen = false,
+           ok = true;
+
+       if (options.layout == "fitDataTable") {
+               console.warn("Horizontal Vitrual DOM is not compatible with fitDataTable layout mode");
+               ok = false;
+       }
+
+       if (options.responsiveLayout) {
+               console.warn("Horizontal Vitrual DOM is not compatible with responsive columns");
+               ok = false;
+       }
+
+       if (this.table.rtl) {
+               console.warn("Horizontal Vitrual DOM is not currently compatible with RTL text direction");
+               ok = false;
+       }
+
+       // if(options.rowFormatter){
+       //      console.warn("Horizontal Vitrual DOM is not compatible with row formatters");
+       //      ok = false;
+       // }
+
+       if (options.columns) {
+               frozen = options.columns.find(function (col) {
+                       return col.frozen;
+               });
+
+               if (frozen) {
+                       console.warn("Horizontal Vitrual DOM is not compatible with frozen columns");
+                       ok = false;
+               }
+       }
+
+       if (!ok) {
+               options.virtualDomHoz = false;
+       }
+
+       return ok;
+};
+
+VDomHoz.prototype.initialize = function () {
+       var _this17 = this;
+
+       this.holderEl.addEventListener("scroll", function () {
+               var left = _this17.holderEl.scrollLeft;
+
+               if (_this17.scrollLeft != left) {
+                       _this17.scrollLeft = left;
+                       _this17.scroll(left - (_this17.vDomScrollPosLeft + _this17.window));
+               }
+       });
+};
+
+VDomHoz.prototype.deinitialize = function () {
+       this.initialized = false;
+};
+
+VDomHoz.prototype.clear = function () {
+       this.columns = [];
+
+       this.leftCol = -1;
+       this.rightCol = 0;
+
+       this.vDomScrollPosLeft = 0;
+       this.vDomScrollPosRight = 0;
+       this.vDomPadLeft = 0;
+       this.vDomPadRight = 0;
+};
+
+VDomHoz.prototype.dataChange = function () {
+       var change = false,
+           collsWidth = 0,
+           colEnd = 0,
+           group,
+           row,
+           rowEl;
+
+       if (this.table.options.layout === "fitData") {
+               this.table.columnManager.columnsByIndex.forEach(function (column) {
+                       if (!column.definition.width && column.visible) {
+                               change = true;
+                       }
+               });
+
+               if (change) {
+                       if (change && this.table.rowManager.getDisplayRows().length) {
+                               // this.table.vdomHoz.deinitialize();
+
+                               this.vDomScrollPosRight = this.scrollLeft + this.holderEl.clientWidth + this.window;
+
+                               if (this.table.options.groupBy) {
+                                       group = this.table.modules.groupRows.getGroups(false)[0];
+
+                                       row = group.getRows(false)[0];
+                               } else {
+                                       row = this.table.rowManager.getDisplayRows()[0];
+                               }
+
+                               if (row) {
+
+                                       rowEl = row.getElement();
+
+                                       row.generateCells();
+
+                                       this.element.appendChild(rowEl);
+
+                                       for (var colEnd = 0; colEnd < row.cells.length; colEnd++) {
+                                               var cell = row.cells[colEnd];
+                                               rowEl.appendChild(cell.getElement());
+
+                                               cell.column.reinitializeWidth();
+
+                                               collsWidth += cell.column.getWidth();
+
+                                               if (collsWidth > this.vDomScrollPosRight) {
+                                                       break;
+                                               }
+                                       }
+
+                                       rowEl.parentNode.removeChild(rowEl);
+
+                                       this.fitDataColAvg = Math.floor(collsWidth / (colEnd + 1));
+
+                                       for (colEnd; colEnd < this.table.columnManager.columnsByIndex.length; colEnd++) {
+                                               this.table.columnManager.columnsByIndex[colEnd].setWidth(this.fitDataColAvg);
+                                       }
+
+                                       this.reinitialize(false, true);
+                               }
+                       }
+               }
+       } else {
+               if (this.table.options.layout === "fitColumns") {
+                       this.table.modules.layout.layout();
+                       this.table.vdomHoz.reinitialize(false, true);
+               }
+       }
+};
+
+VDomHoz.prototype.fitDataLayoutOverride = function () {
+       for (var i = this.leftCol; i <= this.rightCol; i++) {
+               this.columns[i].reinitializeWidth();
+       }
+};
+
+VDomHoz.prototype.reinitialize = function (update, blockRedraw) {
+       var _this18 = this;
+
+       var old = {
+               cols: this.columns,
+               leftCol: this.leftCol,
+               rightCol: this.rightCol
+       };
+
+       if (update && !this.initialized) {
+               return;
+       }
+
+       this.clear();
+
+       this.scrollLeft = this.holderEl.scrollLeft;
+
+       this.vDomScrollPosLeft = this.scrollLeft - this.window;
+       this.vDomScrollPosRight = this.scrollLeft + this.holderEl.clientWidth + this.window;
+
+       var colPos = 0;
+
+       this.table.columnManager.columnsByIndex.forEach(function (column) {
+               var config = {};
+
+               if (column.visible) {
+                       var width = column.getWidth();
+
+                       config.leftPos = colPos;
+                       config.rightPos = colPos + width;
+
+                       if (colPos + width > _this18.vDomScrollPosLeft && colPos < _this18.vDomScrollPosRight) {
+                               //column is visible
+
+                               if (_this18.leftCol == -1) {
+                                       _this18.leftCol = _this18.columns.length;
+                                       _this18.vDomPadLeft = colPos;
+                               }
+
+                               _this18.rightCol = _this18.columns.length;
+                       } else {
+                               // column is hidden
+                               if (_this18.leftCol !== -1) {
+                                       _this18.vDomPadRight += width;
+                               }
+                       }
+
+                       _this18.columns.push(column);
+
+                       column.modules.vdomHoz = config;
+
+                       colPos += width;
+               }
+       });
+
+       this.element.style.paddingLeft = this.vDomPadLeft + "px";
+       this.element.style.paddingRight = this.vDomPadRight + "px";
+
+       this.initialized = true;
+
+       if (!blockRedraw) {
+               if (!update || this.reinitChanged(old)) {
+                       this.renitializeRows();
+               }
+       }
+
+       this.holderEl.scrollLeft = this.scrollLeft;
+};
+
+VDomHoz.prototype.reinitChanged = function (old) {
+       var _this19 = this;
+
+       var match = true;
+
+       if (old.cols.length !== this.columns.length || old.leftCol !== this.leftCol || old.rightCol !== this.rightCol) {
+               return true;
+       }
+
+       old.cols.forEach(function (col, i) {
+               if (col !== _this19.columns[i]) {
+                       match = false;
+               }
+       });
+
+       return !match;
+};
+
+VDomHoz.prototype.renitializeRows = function () {
+       var _this20 = this;
+
+       var rows = this.table.rowManager.getVisibleRows();
+       rows.forEach(function (row) {
+               _this20.reinitializeRow(row, true);
+       });
+};
+
+VDomHoz.prototype.scroll = function (diff) {
+       this.vDomScrollPosLeft += diff;
+       this.vDomScrollPosRight += diff;
+
+       if (diff > this.holderEl.clientWidth * .8) {
+               this.reinitialize();
+       } else {
+               if (diff > 0) {
+                       //scroll right
+                       this.addColRight();
+                       this.removeColLeft();
+               } else {
+                       //scroll left
+                       this.addColLeft();
+                       this.removeColRight();
+               }
+       }
+};
+
+VDomHoz.prototype.colPositionAdjust = function (start, end, diff) {
+       for (var i = start; i < end; i++) {
+               var column = this.columns[i];
+
+               column.modules.vdomHoz.leftPos -= diff;
+               column.modules.vdomHoz.rightPos -= diff;
+       }
+};
+
+VDomHoz.prototype.addColRight = function () {
+       var column = this.columns[this.rightCol + 1],
+           rows,
+           oldWidth,
+           widthDiff;
+
+       if (column && column.modules.vdomHoz.leftPos <= this.vDomScrollPosRight) {
+
+               rows = this.table.rowManager.getVisibleRows();
+
+               rows.forEach(function (row) {
+                       if (row.type !== "group") {
+                               var cell = row.getCell(column);
+                               row.getElement().appendChild(cell.getElement());
+                               cell.cellRendered();
+                       }
+               });
+
+               if (this.fitDataColAvg) {
+
+                       oldWidth = column.getWidth();
+
+                       if (oldWidth === this.fitDataColAvg) {
+                               column.reinitializeWidth();
+
+                               widthDiff = oldWidth - column.getWidth();
+
+                               if (widthDiff) {
+                                       column.modules.vdomHoz.rightPos -= widthDiff;
+                                       this.colPositionAdjust(this.rightCol + 1, this.columns.length, widthDiff);
+                               }
+                       }
+               }
+
+               this.rightCol++;
+
+               if (this.rightCol >= this.columns.length - 1) {
+                       this.vDomPadRight = 0;
+               } else {
+                       this.vDomPadRight -= column.getWidth();
+               }
+
+               this.element.style.paddingRight = this.vDomPadRight + "px";
+
+               this.addColRight();
+       }
+};
+
+VDomHoz.prototype.addColLeft = function () {
+       var column = this.columns[this.leftCol - 1],
+           rows;
+
+       if (column && column.modules.vdomHoz.rightPos >= this.vDomScrollPosLeft) {
+               var rows = this.table.rowManager.getVisibleRows();
+
+               rows.forEach(function (row) {
+                       if (row.type !== "group") {
+                               var cell = row.getCell(column);
+                               row.getElement().prepend(cell.getElement());
+                               cell.cellRendered();
+                       }
+               });
+
+               if (!this.leftCol) {
+                       this.vDomPadLeft = 0;
+               } else {
+                       this.vDomPadLeft -= column.getWidth();
+               }
+
+               this.element.style.paddingLeft = this.vDomPadLeft + "px";
+
+               this.leftCol--;
+
+               this.addColLeft();
+       }
+};
+
+VDomHoz.prototype.removeColRight = function (column) {
+       var column = this.columns[this.rightCol],
+           rows;
+
+       if (column && column.modules.vdomHoz.leftPos > this.vDomScrollPosRight) {
+               rows = this.table.rowManager.getVisibleRows();
+
+               column.modules.vdomHoz.visible = false;
+
+               rows.forEach(function (row) {
+                       if (row.type !== "group") {
+                               var cell = row.getCell(column);
+                               row.getElement().removeChild(cell.getElement());
+                       }
+               });
+
+               this.vDomPadRight += column.getWidth();
+               this.element.style.paddingRight = this.vDomPadRight + "px";
+
+               this.rightCol--;
+
+               this.removeColRight();
+       }
+};
+
+VDomHoz.prototype.removeColLeft = function () {
+       var column = this.columns[this.leftCol],
+           rows;
+
+       if (column && column.modules.vdomHoz.rightPos < this.vDomScrollPosLeft) {
+
+               rows = this.table.rowManager.getVisibleRows();
+
+               rows.forEach(function (row) {
+                       if (row.type !== "group") {
+                               var cell = row.getCell(column);
+                               row.getElement().removeChild(cell.getElement());
+                       }
+               });
+
+               this.vDomPadLeft += column.getWidth();
+               this.element.style.paddingLeft = this.vDomPadLeft + "px";
+
+               this.leftCol++;
+
+               this.removeColLeft();
+       }
+};
+
+VDomHoz.prototype.initializeRow = function (row) {
+       if (row.type !== "group") {
+               row.modules.vdomHoz = {
+                       leftCol: this.leftCol,
+                       rightCol: this.rightCol
+               };
+
+               for (var i = this.leftCol; i <= this.rightCol; i++) {
+                       var column = this.columns[i];
+
+                       if (column.visible) {
+                               var cell = row.getCell(column);
+
+                               row.element.appendChild(cell.getElement());
+                               cell.cellRendered();
+                       }
+               }
+       }
+};
+
+VDomHoz.prototype.reinitializeRow = function (row, force) {
+       if (row.type !== "group") {
+               if (force || !row.modules.vdomHoz || row.modules.vdomHoz.leftCol !== this.leftCol || row.modules.vdomHoz.rightCol !== this.rightCol) {
+                       while (row.element.firstChild) {
+                               row.element.removeChild(row.element.firstChild);
+                       }this.initializeRow(row);
+               }
+       }
+};
+//public row object
+var RowComponent = function RowComponent(row) {
+       this._row = row;
+};
+
+RowComponent.prototype.getData = function (transform) {
+       return this._row.getData(transform);
+};
+
+RowComponent.prototype.getElement = function () {
+       return this._row.getElement();
+};
+
+RowComponent.prototype.getCells = function () {
+       var cells = [];
+
+       this._row.getCells().forEach(function (cell) {
+               cells.push(cell.getComponent());
+       });
+
+       return cells;
+};
+
+RowComponent.prototype.getCell = function (column) {
+       var cell = this._row.getCell(column);
+       return cell ? cell.getComponent() : false;
+};
+
+RowComponent.prototype.getIndex = function () {
+       return this._row.getData("data")[this._row.table.options.index];
+};
+
+RowComponent.prototype.getPosition = function (active) {
+       return this._row.table.rowManager.getRowPosition(this._row, active);
+};
+
+RowComponent.prototype.delete = function () {
+       return this._row.delete();
+};
+
+RowComponent.prototype.scrollTo = function () {
+       return this._row.table.rowManager.scrollToRow(this._row);
+};
+
+RowComponent.prototype.pageTo = function () {
+       if (this._row.table.modExists("page", true)) {
+               return this._row.table.modules.page.setPageToRow(this._row);
+       }
+};
+
+RowComponent.prototype.move = function (to, after) {
+       this._row.moveToRow(to, after);
+};
+
+RowComponent.prototype.update = function (data) {
+       return this._row.updateData(data);
+};
+
+RowComponent.prototype.normalizeHeight = function () {
+       this._row.normalizeHeight(true);
+};
+
+RowComponent.prototype.select = function () {
+       this._row.table.modules.selectRow.selectRows(this._row);
+};
+
+RowComponent.prototype.deselect = function () {
+       this._row.table.modules.selectRow.deselectRows(this._row);
+};
+
+RowComponent.prototype.toggleSelect = function () {
+       this._row.table.modules.selectRow.toggleRow(this._row);
+};
+
+RowComponent.prototype.isSelected = function () {
+       return this._row.table.modules.selectRow.isRowSelected(this._row);
+};
+
+RowComponent.prototype._getSelf = function () {
+       return this._row;
+};
+
+RowComponent.prototype.validate = function () {
+       return this._row.validate();
+};
+
+RowComponent.prototype.freeze = function () {
+       if (this._row.table.modExists("frozenRows", true)) {
+               this._row.table.modules.frozenRows.freezeRow(this._row);
+       }
+};
+
+RowComponent.prototype.unfreeze = function () {
+       if (this._row.table.modExists("frozenRows", true)) {
+               this._row.table.modules.frozenRows.unfreezeRow(this._row);
+       }
+};
+
+RowComponent.prototype.isFrozen = function () {
+       if (this._row.table.modExists("frozenRows", true)) {
+               var index = this._row.table.modules.frozenRows.rows.indexOf(this._row);
+               return index > -1;
+       }
+
+       return false;
+};
+
+RowComponent.prototype.treeCollapse = function () {
+       if (this._row.table.modExists("dataTree", true)) {
+               this._row.table.modules.dataTree.collapseRow(this._row);
+       }
+};
+
+RowComponent.prototype.treeExpand = function () {
+       if (this._row.table.modExists("dataTree", true)) {
+               this._row.table.modules.dataTree.expandRow(this._row);
+       }
+};
+
+RowComponent.prototype.treeToggle = function () {
+       if (this._row.table.modExists("dataTree", true)) {
+               this._row.table.modules.dataTree.toggleRow(this._row);
+       }
+};
+
+RowComponent.prototype.getTreeParent = function () {
+       if (this._row.table.modExists("dataTree", true)) {
+               return this._row.table.modules.dataTree.getTreeParent(this._row);
+       }
+
+       return false;
+};
+
+RowComponent.prototype.getTreeChildren = function () {
+       if (this._row.table.modExists("dataTree", true)) {
+               return this._row.table.modules.dataTree.getTreeChildren(this._row, true);
+       }
+
+       return false;
+};
+
+RowComponent.prototype.addTreeChild = function (data, pos, index) {
+       if (this._row.table.modExists("dataTree", true)) {
+               return this._row.table.modules.dataTree.addTreeChildRow(this._row, data, pos, index);
+       }
+
+       return false;
+};
+
+RowComponent.prototype.reformat = function () {
+       return this._row.reinitialize();
+};
+
+RowComponent.prototype.getGroup = function () {
+       return this._row.getGroup().getComponent();
+};
+
+RowComponent.prototype.getTable = function () {
+       return this._row.table;
+};
+
+RowComponent.prototype.getNextRow = function () {
+       var row = this._row.nextRow();
+       return row ? row.getComponent() : row;
+};
+
+RowComponent.prototype.getPrevRow = function () {
+       var row = this._row.prevRow();
+       return row ? row.getComponent() : row;
+};
+
+var Row = function Row(data, parent) {
+       var type = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : "row";
+
+       this.table = parent.table;
+       this.parent = parent;
+       this.data = {};
+       this.type = type; //type of element
+       this.element = this.createElement();
+       this.modules = {}; //hold module variables;
+       this.cells = [];
+       this.height = 0; //hold element height
+       this.heightStyled = ""; //hold element height prestyled to improve render efficiency
+       this.manualHeight = false; //user has manually set row height
+       this.outerHeight = 0; //holde lements outer height
+       this.initialized = false; //element has been rendered
+       this.heightInitialized = false; //element has resized cells to fit
+
+       this.component = null;
+
+       this.setData(data);
+       this.generateElement();
+};
+
+Row.prototype.createElement = function () {
+       var el = document.createElement("div");
+
+       el.classList.add("tabulator-row");
+       el.setAttribute("role", "row");
+
+       return el;
+};
+
+Row.prototype.getElement = function () {
+       return this.element;
+};
+
+Row.prototype.detachElement = function () {
+       if (this.element && this.element.parentNode) {
+               this.element.parentNode.removeChild(this.element);
+       }
+};
+
+Row.prototype.generateElement = function () {
+       var self = this,
+           dblTap,
+           tapHold,
+           tap;
+
+       //set row selection characteristics
+       if (self.table.options.selectable !== false && self.table.modExists("selectRow")) {
+               self.table.modules.selectRow.initializeRow(this);
+       }
+
+       //setup movable rows
+       if (self.table.options.movableRows !== false && self.table.modExists("moveRow")) {
+               self.table.modules.moveRow.initializeRow(this);
+       }
+
+       //setup data tree
+       if (self.table.options.dataTree !== false && self.table.modExists("dataTree")) {
+               self.table.modules.dataTree.initializeRow(this);
+       }
+
+       //setup column colapse container
+       if (self.table.options.responsiveLayout === "collapse" && self.table.modExists("responsiveLayout")) {
+               self.table.modules.responsiveLayout.initializeRow(this);
+       }
+
+       //set column menu
+       if ((self.table.options.rowContextMenu || self.table.options.rowClickMenu) && this.table.modExists("menu")) {
+               self.table.modules.menu.initializeRow(this);
+       }
+
+       //handle row click events
+       if (self.table.options.rowClick) {
+               self.element.addEventListener("click", function (e) {
+                       self.table.options.rowClick(e, self.getComponent());
+               });
+       }
+
+       if (self.table.options.rowDblClick) {
+               self.element.addEventListener("dblclick", function (e) {
+                       self.table.options.rowDblClick(e, self.getComponent());
+               });
+       }
+
+       if (self.table.options.rowContext) {
+               self.element.addEventListener("contextmenu", function (e) {
+                       self.table.options.rowContext(e, self.getComponent());
+               });
+       }
+
+       //handle mouse events
+       if (self.table.options.rowMouseEnter) {
+               self.element.addEventListener("mouseenter", function (e) {
+                       self.table.options.rowMouseEnter(e, self.getComponent());
+               });
+       }
+
+       if (self.table.options.rowMouseLeave) {
+               self.element.addEventListener("mouseleave", function (e) {
+                       self.table.options.rowMouseLeave(e, self.getComponent());
+               });
+       }
+
+       if (self.table.options.rowMouseOver) {
+               self.element.addEventListener("mouseover", function (e) {
+                       self.table.options.rowMouseOver(e, self.getComponent());
+               });
+       }
+
+       if (self.table.options.rowMouseOut) {
+               self.element.addEventListener("mouseout", function (e) {
+                       self.table.options.rowMouseOut(e, self.getComponent());
+               });
+       }
+
+       if (self.table.options.rowMouseMove) {
+               self.element.addEventListener("mousemove", function (e) {
+                       self.table.options.rowMouseMove(e, self.getComponent());
+               });
+       }
+
+       if (self.table.options.rowTap) {
+
+               tap = false;
+
+               self.element.addEventListener("touchstart", function (e) {
+                       tap = true;
+               }, { passive: true });
+
+               self.element.addEventListener("touchend", function (e) {
+                       if (tap) {
+                               self.table.options.rowTap(e, self.getComponent());
+                       }
+
+                       tap = false;
+               });
+       }
+
+       if (self.table.options.rowDblTap) {
+
+               dblTap = null;
+
+               self.element.addEventListener("touchend", function (e) {
+
+                       if (dblTap) {
+                               clearTimeout(dblTap);
+                               dblTap = null;
+
+                               self.table.options.rowDblTap(e, self.getComponent());
+                       } else {
+
+                               dblTap = setTimeout(function () {
+                                       clearTimeout(dblTap);
+                                       dblTap = null;
+                               }, 300);
+                       }
+               });
+       }
+
+       if (self.table.options.rowTapHold) {
+
+               tapHold = null;
+
+               self.element.addEventListener("touchstart", function (e) {
+                       clearTimeout(tapHold);
+
+                       tapHold = setTimeout(function () {
+                               clearTimeout(tapHold);
+                               tapHold = null;
+                               tap = false;
+                               self.table.options.rowTapHold(e, self.getComponent());
+                       }, 1000);
+               }, { passive: true });
+
+               self.element.addEventListener("touchend", function (e) {
+                       clearTimeout(tapHold);
+                       tapHold = null;
+               });
+       }
+};
+
+Row.prototype.generateCells = function () {
+       this.cells = this.table.columnManager.generateCells(this);
+};
+
+//functions to setup on first render
+Row.prototype.initialize = function (force) {
+       var _this21 = this;
+
+       if (!this.initialized || force) {
+
+               this.deleteCells();
+
+               while (this.element.firstChild) {
+                       this.element.removeChild(this.element.firstChild);
+               } //handle frozen cells
+               if (this.table.modExists("frozenColumns")) {
+                       this.table.modules.frozenColumns.layoutRow(this);
+               }
+
+               this.generateCells();
+
+               if (this.table.options.virtualDomHoz && this.table.vdomHoz.initialized) {
+                       this.table.vdomHoz.initializeRow(this);
+               } else {
+                       this.cells.forEach(function (cell) {
+                               _this21.element.appendChild(cell.getElement());
+                               cell.cellRendered();
+                       });
+               }
+
+               if (force) {
+                       this.normalizeHeight();
+               }
+
+               //setup movable rows
+               if (this.table.options.dataTree && this.table.modExists("dataTree")) {
+                       this.table.modules.dataTree.layoutRow(this);
+               }
+
+               //setup column colapse container
+               if (this.table.options.responsiveLayout === "collapse" && this.table.modExists("responsiveLayout")) {
+                       this.table.modules.responsiveLayout.layoutRow(this);
+               }
+
+               if (this.table.options.rowFormatter) {
+                       this.table.options.rowFormatter(this.getComponent());
+               }
+
+               //set resizable handles
+               if (this.table.options.resizableRows && this.table.modExists("resizeRows")) {
+                       this.table.modules.resizeRows.initializeRow(this);
+               }
+
+               this.initialized = true;
+       } else {
+               if (this.table.options.virtualDomHoz) {
+                       this.table.vdomHoz.reinitializeRow(this);
+               }
+       }
+};
+
+Row.prototype.reinitializeHeight = function () {
+       this.heightInitialized = false;
+
+       if (this.element.offsetParent !== null) {
+               this.normalizeHeight(true);
+       }
+};
+
+Row.prototype.reinitialize = function (children) {
+       this.initialized = false;
+       this.heightInitialized = false;
+
+       if (!this.manualHeight) {
+               this.height = 0;
+               this.heightStyled = "";
+       }
+
+       if (this.element.offsetParent !== null) {
+               this.initialize(true);
+       }
+
+       if (this.table.options.dataTree && this.table.modExists("dataTree", true)) {
+               this.table.modules.dataTree.getTreeChildren(this, false, true).forEach(function (child) {
+                       child.reinitialize(true);
+               });
+       }
+};
+
+//get heights when doing bulk row style calcs in virtual DOM
+Row.prototype.calcHeight = function (force) {
+
+       var maxHeight = 0,
+           minHeight = this.table.options.resizableRows ? this.element.clientHeight : 0;
+
+       this.cells.forEach(function (cell) {
+               var height = cell.getHeight();
+               if (height > maxHeight) {
+                       maxHeight = height;
+               }
+       });
+
+       if (force) {
+               this.height = Math.max(maxHeight, minHeight);
+       } else {
+               this.height = this.manualHeight ? this.height : Math.max(maxHeight, minHeight);
+       }
+
+       this.heightStyled = this.height ? this.height + "px" : "";
+       this.outerHeight = this.element.offsetHeight;
+};
+
+//set of cells
+Row.prototype.setCellHeight = function () {
+       this.cells.forEach(function (cell) {
+               cell.setHeight();
+       });
+
+       this.heightInitialized = true;
+};
+
+Row.prototype.clearCellHeight = function () {
+       this.cells.forEach(function (cell) {
+               cell.clearHeight();
+       });
+};
+
+//normalize the height of elements in the row
+Row.prototype.normalizeHeight = function (force) {
+
+       if (force) {
+               this.clearCellHeight();
+       }
+
+       this.calcHeight(force);
+
+       this.setCellHeight();
+};
+
+// Row.prototype.setHeight = function(height){
+//     this.height = height;
+
+//     this.setCellHeight();
+// };
+
+//set height of rows
+Row.prototype.setHeight = function (height, force) {
+       if (this.height != height || force) {
+
+               this.manualHeight = true;
+
+               this.height = height;
+               this.heightStyled = height ? height + "px" : "";
+
+               this.setCellHeight();
+
+               // this.outerHeight = this.element.outerHeight();
+               this.outerHeight = this.element.offsetHeight;
+       }
+};
+
+//return rows outer height
+Row.prototype.getHeight = function () {
+       return this.outerHeight;
+};
+
+//return rows outer Width
+Row.prototype.getWidth = function () {
+       return this.element.offsetWidth;
+};
+
+//////////////// Cell Management /////////////////
+
+Row.prototype.deleteCell = function (cell) {
+       var index = this.cells.indexOf(cell);
+
+       if (index > -1) {
+               this.cells.splice(index, 1);
+       }
+};
+
+//////////////// Data Management /////////////////
+
+Row.prototype.setData = function (data) {
+       if (this.table.modExists("mutator")) {
+               data = this.table.modules.mutator.transformRow(data, "data");
+       }
+
+       this.data = data;
+
+       if (this.table.options.reactiveData && this.table.modExists("reactiveData", true)) {
+               this.table.modules.reactiveData.watchRow(this);
+       }
+};
+
+//update the rows data
+Row.prototype.updateData = function (updatedData) {
+       var _this22 = this;
+
+       var visible = Tabulator.prototype.helpers.elVisible(this.element),
+           tempData = {},
+           newRowData;
+
+       return new Promise(function (resolve, reject) {
+
+               if (typeof updatedData === "string") {
+                       updatedData = JSON.parse(updatedData);
+               }
+
+               if (_this22.table.options.reactiveData && _this22.table.modExists("reactiveData", true)) {
+                       _this22.table.modules.reactiveData.block();
+               }
+
+               //mutate incomming data if needed
+               if (_this22.table.modExists("mutator")) {
+
+                       tempData = Object.assign(tempData, _this22.data);
+                       tempData = Object.assign(tempData, updatedData);
+
+                       newRowData = _this22.table.modules.mutator.transformRow(tempData, "data", updatedData);
+               } else {
+                       newRowData = updatedData;
+               }
+
+               //set data
+               for (var attrname in newRowData) {
+                       _this22.data[attrname] = newRowData[attrname];
+               }
+
+               if (_this22.table.options.reactiveData && _this22.table.modExists("reactiveData", true)) {
+                       _this22.table.modules.reactiveData.unblock();
+               }
+
+               //update affected cells only
+               for (var attrname in updatedData) {
+
+                       var columns = _this22.table.columnManager.getColumnsByFieldRoot(attrname);
+
+                       columns.forEach(function (column) {
+                               var cell = _this22.getCell(column.getField());
+
+                               if (cell) {
+                                       var value = column.getFieldValue(newRowData);
+                                       if (cell.getValue() != value) {
+                                               cell.setValueProcessData(value);
+
+                                               if (visible) {
+                                                       cell.cellRendered();
+                                               }
+                                       }
+                               }
+                       });
+               }
+
+               if (_this22.table.options.groupUpdateOnCellEdit && _this22.table.options.groupBy && _this22.table.modExists("groupRows")) {
+                       _this22.table.modules.groupRows.reassignRowToGroup(_this22.row);
+               }
+
+               //Partial reinitialization if visible
+               if (visible) {
+                       _this22.normalizeHeight(true);
+
+                       if (_this22.table.options.rowFormatter) {
+                               _this22.table.options.rowFormatter(_this22.getComponent());
+                       }
+               } else {
+                       _this22.initialized = false;
+                       _this22.height = 0;
+                       _this22.heightStyled = "";
+               }
+
+               if (_this22.table.options.dataTree !== false && _this22.table.modExists("dataTree") && _this22.table.modules.dataTree.redrawNeeded(updatedData)) {
+                       _this22.table.modules.dataTree.initializeRow(_this22);
+
+                       if (visible) {
+                               _this22.table.modules.dataTree.layoutRow(_this22);
+                               _this22.table.rowManager.refreshActiveData("tree", false, true);
+                       }
+               }
+
+               //this.reinitialize();
+
+               _this22.table.options.rowUpdated.call(_this22.table, _this22.getComponent());
+
+               if (_this22.table.options.dataChanged) {
+                       _this22.table.options.dataChanged.call(_this22.table, _this22.table.rowManager.getData());
+               }
+
+               resolve();
+       });
+};
+
+Row.prototype.getData = function (transform) {
+       if (transform) {
+               if (this.table.modExists("accessor")) {
+                       return this.table.modules.accessor.transformRow(this, transform);
+               }
+       }
+
+       return this.data;
+};
+
+Row.prototype.getCell = function (column) {
+       var match = false;
+
+       column = this.table.columnManager.findColumn(column);
+
+       match = this.cells.find(function (cell) {
+               return cell.column === column;
+       });
+
+       return match;
+};
+
+Row.prototype.getCellIndex = function (findCell) {
+       return this.cells.findIndex(function (cell) {
+               return cell === findCell;
+       });
+};
+
+Row.prototype.findNextEditableCell = function (index) {
+       var nextCell = false;
+
+       if (index < this.cells.length - 1) {
+               for (var i = index + 1; i < this.cells.length; i++) {
+                       var cell = this.cells[i];
+
+                       if (cell.column.modules.edit && Tabulator.prototype.helpers.elVisible(cell.getElement())) {
+                               var allowEdit = true;
+
+                               if (typeof cell.column.modules.edit.check == "function") {
+                                       allowEdit = cell.column.modules.edit.check(cell.getComponent());
+                               }
+
+                               if (allowEdit) {
+                                       nextCell = cell;
+                                       break;
+                               }
+                       }
+               }
+       }
+
+       return nextCell;
+};
+
+Row.prototype.findPrevEditableCell = function (index) {
+       var prevCell = false;
+
+       if (index > 0) {
+               for (var i = index - 1; i >= 0; i--) {
+                       var cell = this.cells[i],
+                           allowEdit = true;
+
+                       if (cell.column.modules.edit && Tabulator.prototype.helpers.elVisible(cell.getElement())) {
+                               if (typeof cell.column.modules.edit.check == "function") {
+                                       allowEdit = cell.column.modules.edit.check(cell.getComponent());
+                               }
+
+                               if (allowEdit) {
+                                       prevCell = cell;
+                                       break;
+                               }
+                       }
+               }
+       }
+
+       return prevCell;
+};
+
+Row.prototype.getCells = function () {
+       return this.cells;
+};
+
+Row.prototype.nextRow = function () {
+       var row = this.table.rowManager.nextDisplayRow(this, true);
+       return row || false;
+};
+
+Row.prototype.prevRow = function () {
+       var row = this.table.rowManager.prevDisplayRow(this, true);
+       return row || false;
+};
+
+Row.prototype.moveToRow = function (to, before) {
+       var toRow = this.table.rowManager.findRow(to);
+
+       if (toRow) {
+               this.table.rowManager.moveRowActual(this, toRow, !before);
+               this.table.rowManager.refreshActiveData("display", false, true);
+       } else {
+               console.warn("Move Error - No matching row found:", to);
+       }
+};
+
+Row.prototype.validate = function () {
+       var invalid = [];
+
+       this.cells.forEach(function (cell) {
+               if (!cell.validate()) {
+                       invalid.push(cell.getComponent());
+               }
+       });
+
+       return invalid.length ? invalid : true;
+};
+
+///////////////////// Actions  /////////////////////
+
+Row.prototype.delete = function () {
+       var _this23 = this;
+
+       return new Promise(function (resolve, reject) {
+               var index, rows;
+
+               if (_this23.table.options.history && _this23.table.modExists("history")) {
+
+                       if (_this23.table.options.groupBy && _this23.table.modExists("groupRows")) {
+                               rows = _this23.getGroup().rows;
+                               index = rows.indexOf(_this23);
+
+                               if (index) {
+                                       index = rows[index - 1];
+                               }
+                       } else {
+                               index = _this23.table.rowManager.getRowIndex(_this23);
+
+                               if (index) {
+                                       index = _this23.table.rowManager.rows[index - 1];
+                               }
+                       }
+
+                       _this23.table.modules.history.action("rowDelete", _this23, { data: _this23.getData(), pos: !index, index: index });
+               }
+
+               _this23.deleteActual();
+
+               resolve();
+       });
+};
+
+Row.prototype.deleteActual = function (blockRedraw) {
+       var index = this.table.rowManager.getRowIndex(this);
+
+       this.detatchModules();
+
+       // if(this.table.options.dataTree && this.table.modExists("dataTree")){
+       //      this.table.modules.dataTree.collapseRow(this, true);
+       // }
+
+       //remove any reactive data watchers from row object
+       if (this.table.options.reactiveData && this.table.modExists("reactiveData", true)) {}
+       // this.table.modules.reactiveData.unwatchRow(this);
+
+
+       //remove from group
+       if (this.modules.group) {
+               this.modules.group.removeRow(this);
+       }
+
+       this.table.rowManager.deleteRow(this, blockRedraw);
+
+       this.deleteCells();
+
+       this.initialized = false;
+       this.heightInitialized = false;
+       this.element = false;
+
+       if (this.table.options.dataTree && this.table.modExists("dataTree", true)) {
+               this.table.modules.dataTree.rowDelete(this);
+       }
+
+       //recalc column calculations if present
+       if (this.table.modExists("columnCalcs")) {
+               if (this.table.options.groupBy && this.table.modExists("groupRows")) {
+                       this.table.modules.columnCalcs.recalcRowGroup(this);
+               } else {
+                       this.table.modules.columnCalcs.recalc(this.table.rowManager.activeRows);
+               }
+       }
+};
+
+Row.prototype.detatchModules = function () {
+       //deselect row if it is selected
+       if (this.table.modExists("selectRow")) {
+               this.table.modules.selectRow._deselectRow(this, true);
+       }
+
+       //cancel edit if row is currently being edited
+       if (this.table.modExists("edit")) {
+               if (this.table.modules.edit.currentCell.row === this) {
+                       this.table.modules.edit.cancelEdit();
+               }
+       }
+
+       if (this.table.modExists("frozenRows")) {
+               this.table.modules.frozenRows.detachRow(this);
+       }
+};
+
+Row.prototype.deleteCells = function () {
+       var cellCount = this.cells.length;
+
+       for (var i = 0; i < cellCount; i++) {
+               this.cells[0].delete();
+       }
+};
+
+Row.prototype.wipe = function () {
+       this.detatchModules();
+       this.deleteCells();
+
+       while (this.element.firstChild) {
+               this.element.removeChild(this.element.firstChild);
+       }this.element = false;
+       this.modules = {};
+
+       if (this.element.parentNode) {
+               this.element.parentNode.removeChild(this.element);
+       }
+};
+
+Row.prototype.getGroup = function () {
+       return this.modules.group || false;
+};
+
+//////////////// Object Generation /////////////////
+Row.prototype.getComponent = function () {
+       if (!this.component) {
+               this.component = new RowComponent(this);
+       }
+
+       return this.component;
+};
+
+//public row object
+var CellComponent = function CellComponent(cell) {
+       this._cell = cell;
+};
+
+CellComponent.prototype.getValue = function () {
+       return this._cell.getValue();
+};
+
+CellComponent.prototype.getOldValue = function () {
+       return this._cell.getOldValue();
+};
+
+CellComponent.prototype.getInitialValue = function () {
+       return this._cell.initialValue;
+};
+
+CellComponent.prototype.getElement = function () {
+       return this._cell.getElement();
+};
+
+CellComponent.prototype.getRow = function () {
+       return this._cell.row.getComponent();
+};
+
+CellComponent.prototype.getData = function () {
+       return this._cell.row.getData();
+};
+
+CellComponent.prototype.getField = function () {
+       return this._cell.column.getField();
+};
+
+CellComponent.prototype.getColumn = function () {
+       return this._cell.column.getComponent();
+};
+
+CellComponent.prototype.setValue = function (value, mutate) {
+       if (typeof mutate == "undefined") {
+               mutate = true;
+       }
+
+       this._cell.setValue(value, mutate);
+};
+
+CellComponent.prototype.restoreOldValue = function () {
+       this._cell.setValueActual(this._cell.getOldValue());
+};
+
+CellComponent.prototype.restoreInitialValue = function () {
+       this._cell.setValueActual(this._cell.initialValue);
+};
+
+CellComponent.prototype.edit = function (force) {
+       return this._cell.edit(force);
+};
+
+CellComponent.prototype.cancelEdit = function () {
+       this._cell.cancelEdit();
+};
+
+CellComponent.prototype.isEdited = function () {
+       return !!this._cell.modules.edit && this._cell.modules.edit.edited;
+};
+
+CellComponent.prototype.clearEdited = function () {
+       if (self.table.modExists("edit", true)) {
+               this._cell.table.modules.edit.clearEdited(this._cell);
+       }
+};
+
+CellComponent.prototype.isValid = function () {
+       return this._cell.modules.validate ? !this._cell.modules.validate.invalid : true;
+};
+
+CellComponent.prototype.validate = function () {
+       return this._cell.validate();
+};
+
+CellComponent.prototype.clearValidation = function () {
+       if (this._cell.table.modExists("validate", true)) {
+               this._cell.table.modules.validate.clearValidation(this._cell);
+       }
+};
+
+CellComponent.prototype.nav = function () {
+       return this._cell.nav();
+};
+
+CellComponent.prototype.checkHeight = function () {
+       this._cell.checkHeight();
+};
+
+CellComponent.prototype.getTable = function () {
+       return this._cell.table;
+};
+
+CellComponent.prototype._getSelf = function () {
+       return this._cell;
+};
+
+var Cell = function Cell(column, row) {
+
+       this.table = column.table;
+       this.column = column;
+       this.row = row;
+       this.element = null;
+       this.value = null;
+       this.initialValue;
+       this.oldValue = null;
+       this.modules = {};
+
+       this.height = null;
+       this.width = null;
+       this.minWidth = null;
+
+       this.component = null;
+
+       this.loaded = false; //track if the cell has been added to the DOM yet
+
+       this.build();
+};
+
+//////////////// Setup Functions /////////////////
+
+//generate element
+Cell.prototype.build = function () {
+       this.generateElement();
+
+       this.setWidth();
+
+       this._configureCell();
+
+       this.setValueActual(this.column.getFieldValue(this.row.data));
+
+       this.initialValue = this.value;
+};
+
+Cell.prototype.generateElement = function () {
+       this.element = document.createElement('div');
+       this.element.className = "tabulator-cell";
+       this.element.setAttribute("role", "gridcell");
+       this.element = this.element;
+};
+
+Cell.prototype._configureCell = function () {
+       var self = this,
+           cellEvents = self.column.cellEvents,
+           element = self.element,
+           field = this.column.getField(),
+           vertAligns = {
+               top: "flex-start",
+               bottom: "flex-end",
+               middle: "center"
+       },
+           hozAligns = {
+               left: "flex-start",
+               right: "flex-end",
+               center: "center"
+       };
+
+       //set text alignment
+       element.style.textAlign = self.column.hozAlign;
+
+       if (self.column.vertAlign) {
+               element.style.display = "inline-flex";
+
+               element.style.alignItems = vertAligns[self.column.vertAlign] || "";
+
+               if (self.column.hozAlign) {
+                       element.style.justifyContent = hozAligns[self.column.hozAlign] || "";
+               }
+       }
+
+       if (field) {
+               element.setAttribute("tabulator-field", field);
+       }
+
+       //add class to cell if needed
+       if (self.column.definition.cssClass) {
+               var classNames = self.column.definition.cssClass.split(" ");
+               classNames.forEach(function (className) {
+                       element.classList.add(className);
+               });
+       }
+
+       //update tooltip on mouse enter
+       if (this.table.options.tooltipGenerationMode === "hover") {
+               element.addEventListener("mouseenter", function (e) {
+                       self._generateTooltip();
+               });
+       }
+
+       self._bindClickEvents(cellEvents);
+
+       self._bindTouchEvents(cellEvents);
+
+       self._bindMouseEvents(cellEvents);
+
+       if (self.column.modules.edit) {
+               self.table.modules.edit.bindEditor(self);
+       }
+
+       if (self.column.definition.rowHandle && self.table.options.movableRows !== false && self.table.modExists("moveRow")) {
+               self.table.modules.moveRow.initializeCell(self);
+       }
+
+       //hide cell if not visible
+       if (!self.column.visible) {
+               self.hide();
+       }
+};
+
+Cell.prototype._bindClickEvents = function (cellEvents) {
+       var self = this,
+           element = self.element;
+
+       //set event bindings
+       if (cellEvents.cellClick || self.table.options.cellClick) {
+               element.addEventListener("click", function (e) {
+                       var component = self.getComponent();
+
+                       if (cellEvents.cellClick) {
+                               cellEvents.cellClick.call(self.table, e, component);
+                       }
+
+                       if (self.table.options.cellClick) {
+                               self.table.options.cellClick.call(self.table, e, component);
+                       }
+               });
+       }
+
+       if (cellEvents.cellDblClick || this.table.options.cellDblClick) {
+               element.addEventListener("dblclick", function (e) {
+                       var component = self.getComponent();
+
+                       if (cellEvents.cellDblClick) {
+                               cellEvents.cellDblClick.call(self.table, e, component);
+                       }
+
+                       if (self.table.options.cellDblClick) {
+                               self.table.options.cellDblClick.call(self.table, e, component);
+                       }
+               });
+       } else {
+               element.addEventListener("dblclick", function (e) {
+
+                       if (self.table.modExists("edit")) {
+                               if (self.table.modules.edit.currentCell === self) {
+                                       return; //prevent instant selection of editor content
+                               }
+                       }
+
+                       e.preventDefault();
+
+                       try {
+                               if (document.selection) {
+                                       // IE
+                                       var range = document.body.createTextRange();
+                                       range.moveToElementText(self.element);
+                                       range.select();
+                               } else if (window.getSelection) {
+                                       var range = document.createRange();
+                                       range.selectNode(self.element);
+                                       window.getSelection().removeAllRanges();
+                                       window.getSelection().addRange(range);
+                               }
+                       } catch (e) {}
+               });
+       }
+
+       if (cellEvents.cellContext || this.table.options.cellContext) {
+               element.addEventListener("contextmenu", function (e) {
+                       var component = self.getComponent();
+
+                       if (cellEvents.cellContext) {
+                               cellEvents.cellContext.call(self.table, e, component);
+                       }
+
+                       if (self.table.options.cellContext) {
+                               self.table.options.cellContext.call(self.table, e, component);
+                       }
+               });
+       }
+};
+
+Cell.prototype._bindMouseEvents = function (cellEvents) {
+       var self = this,
+           element = self.element;
+
+       if (cellEvents.cellMouseEnter || self.table.options.cellMouseEnter) {
+               element.addEventListener("mouseenter", function (e) {
+                       var component = self.getComponent();
+
+                       if (cellEvents.cellMouseEnter) {
+                               cellEvents.cellMouseEnter.call(self.table, e, component);
+                       }
+
+                       if (self.table.options.cellMouseEnter) {
+                               self.table.options.cellMouseEnter.call(self.table, e, component);
+                       }
+               });
+       }
+
+       if (cellEvents.cellMouseLeave || self.table.options.cellMouseLeave) {
+               element.addEventListener("mouseleave", function (e) {
+                       var component = self.getComponent();
+
+                       if (cellEvents.cellMouseLeave) {
+                               cellEvents.cellMouseLeave.call(self.table, e, component);
+                       }
+
+                       if (self.table.options.cellMouseLeave) {
+                               self.table.options.cellMouseLeave.call(self.table, e, component);
+                       }
+               });
+       }
+
+       if (cellEvents.cellMouseOver || self.table.options.cellMouseOver) {
+               element.addEventListener("mouseover", function (e) {
+                       var component = self.getComponent();
+
+                       if (cellEvents.cellMouseOver) {
+                               cellEvents.cellMouseOver.call(self.table, e, component);
+                       }
+
+                       if (self.table.options.cellMouseOver) {
+                               self.table.options.cellMouseOver.call(self.table, e, component);
+                       }
+               });
+       }
+
+       if (cellEvents.cellMouseOut || self.table.options.cellMouseOut) {
+               element.addEventListener("mouseout", function (e) {
+                       var component = self.getComponent();
+
+                       if (cellEvents.cellMouseOut) {
+                               cellEvents.cellMouseOut.call(self.table, e, component);
+                       }
+
+                       if (self.table.options.cellMouseOut) {
+                               self.table.options.cellMouseOut.call(self.table, e, component);
+                       }
+               });
+       }
+
+       if (cellEvents.cellMouseMove || self.table.options.cellMouseMove) {
+               element.addEventListener("mousemove", function (e) {
+                       var component = self.getComponent();
+
+                       if (cellEvents.cellMouseMove) {
+                               cellEvents.cellMouseMove.call(self.table, e, component);
+                       }
+
+                       if (self.table.options.cellMouseMove) {
+                               self.table.options.cellMouseMove.call(self.table, e, component);
+                       }
+               });
+       }
+};
+
+Cell.prototype._bindTouchEvents = function (cellEvents) {
+       var self = this,
+           element = self.element,
+           dblTap,
+           tapHold,
+           tap;
+
+       if (cellEvents.cellTap || this.table.options.cellTap) {
+               tap = false;
+
+               element.addEventListener("touchstart", function (e) {
+                       tap = true;
+               }, { passive: true });
+
+               element.addEventListener("touchend", function (e) {
+                       if (tap) {
+                               var component = self.getComponent();
+
+                               if (cellEvents.cellTap) {
+                                       cellEvents.cellTap.call(self.table, e, component);
+                               }
+
+                               if (self.table.options.cellTap) {
+                                       self.table.options.cellTap.call(self.table, e, component);
+                               }
+                       }
+
+                       tap = false;
+               });
+       }
+
+       if (cellEvents.cellDblTap || this.table.options.cellDblTap) {
+               dblTap = null;
+
+               element.addEventListener("touchend", function (e) {
+
+                       if (dblTap) {
+                               clearTimeout(dblTap);
+                               dblTap = null;
+
+                               var component = self.getComponent();
+
+                               if (cellEvents.cellDblTap) {
+                                       cellEvents.cellDblTap.call(self.table, e, component);
+                               }
+
+                               if (self.table.options.cellDblTap) {
+                                       self.table.options.cellDblTap.call(self.table, e, component);
+                               }
+                       } else {
+
+                               dblTap = setTimeout(function () {
+                                       clearTimeout(dblTap);
+                                       dblTap = null;
+                               }, 300);
+                       }
+               });
+       }
+
+       if (cellEvents.cellTapHold || this.table.options.cellTapHold) {
+               tapHold = null;
+
+               element.addEventListener("touchstart", function (e) {
+                       clearTimeout(tapHold);
+
+                       tapHold = setTimeout(function () {
+                               clearTimeout(tapHold);
+                               tapHold = null;
+                               tap = false;
+                               var component = self.getComponent();
+
+                               if (cellEvents.cellTapHold) {
+                                       cellEvents.cellTapHold.call(self.table, e, component);
+                               }
+
+                               if (self.table.options.cellTapHold) {
+                                       self.table.options.cellTapHold.call(self.table, e, component);
+                               }
+                       }, 1000);
+               }, { passive: true });
+
+               element.addEventListener("touchend", function (e) {
+                       clearTimeout(tapHold);
+                       tapHold = null;
+               });
+       }
+};
+
+//generate cell contents
+Cell.prototype._generateContents = function () {
+       var val;
+
+       if (this.table.modExists("format")) {
+               val = this.table.modules.format.formatValue(this);
+       } else {
+               val = this.element.innerHTML = this.value;
+       }
+
+       switch (typeof val === 'undefined' ? 'undefined' : _typeof(val)) {
+               case "object":
+                       if (val instanceof Node) {
+
+                               //clear previous cell contents
+                               while (this.element.firstChild) {
+                                       this.element.removeChild(this.element.firstChild);
+                               }this.element.appendChild(val);
+                       } else {
+                               this.element.innerHTML = "";
+
+                               if (val != null) {
+                                       console.warn("Format Error - Formatter has returned a type of object, the only valid formatter object return is an instance of Node, the formatter returned:", val);
+                               }
+                       }
+                       break;
+               case "undefined":
+               case "null":
+                       this.element.innerHTML = "";
+                       break;
+               default:
+                       this.element.innerHTML = val;
+       }
+};
+
+Cell.prototype.cellRendered = function () {
+       if (this.table.modExists("format") && this.table.modules.format.cellRendered) {
+               this.table.modules.format.cellRendered(this);
+       }
+};
+
+//generate tooltip text
+Cell.prototype._generateTooltip = function () {
+       var tooltip = this.column.tooltip;
+
+       if (tooltip) {
+               if (tooltip === true) {
+                       tooltip = this.value;
+               } else if (typeof tooltip == "function") {
+                       tooltip = tooltip(this.getComponent());
+
+                       if (tooltip === false) {
+                               tooltip = "";
+                       }
+               }
+
+               if (typeof tooltip === "undefined") {
+                       tooltip = "";
+               }
+
+               this.element.setAttribute("title", tooltip);
+       } else {
+               this.element.setAttribute("title", "");
+       }
+};
+
+//////////////////// Getters ////////////////////
+Cell.prototype.getElement = function () {
+       if (!this.loaded) {
+               this.loaded = true;
+               this.layoutElement();
+       }
+
+       return this.element;
+};
+
+Cell.prototype.getValue = function () {
+       return this.value;
+};
+
+Cell.prototype.getOldValue = function () {
+       return this.oldValue;
+};
+
+//////////////////// Actions ////////////////////
+
+Cell.prototype.setValue = function (value, mutate) {
+
+       var changed = this.setValueProcessData(value, mutate),
+           component;
+
+       if (changed) {
+               if (this.table.options.history && this.table.modExists("history")) {
+                       this.table.modules.history.action("cellEdit", this, { oldValue: this.oldValue, newValue: this.value });
+               }
+
+               component = this.getComponent();
+
+               if (this.column.cellEvents.cellEdited) {
+                       this.column.cellEvents.cellEdited.call(this.table, component);
+               }
+
+               if (this.table.options.groupUpdateOnCellEdit && this.table.options.groupBy && this.table.modExists("groupRows")) {
+                       this.table.modules.groupRows.reassignRowToGroup(this.row);
+               }
+
+               this.cellRendered();
+
+               this.table.options.cellEdited.call(this.table, component);
+
+               if (this.table.options.dataChanged) {
+                       this.table.options.dataChanged.call(this.table, this.table.rowManager.getData());
+               }
+       }
+};
+
+Cell.prototype.setValueProcessData = function (value, mutate) {
+       var changed = false;
+
+       if (this.value != value) {
+
+               changed = true;
+
+               if (mutate) {
+                       if (this.column.modules.mutate) {
+                               value = this.table.modules.mutator.transformCell(this, value);
+                       }
+               }
+       }
+
+       this.setValueActual(value);
+
+       if (changed && this.table.modExists("columnCalcs")) {
+               if (this.column.definition.topCalc || this.column.definition.bottomCalc) {
+                       if (this.table.options.groupBy && this.table.modExists("groupRows")) {
+
+                               if (this.table.options.columnCalcs == "table" || this.table.options.columnCalcs == "both") {
+                                       this.table.modules.columnCalcs.recalc(this.table.rowManager.activeRows);
+                               }
+
+                               if (this.table.options.columnCalcs != "table") {
+                                       this.table.modules.columnCalcs.recalcRowGroup(this.row);
+                               }
+                       } else {
+                               this.table.modules.columnCalcs.recalc(this.table.rowManager.activeRows);
+                       }
+               }
+       }
+
+       return changed;
+};
+
+Cell.prototype.setValueActual = function (value) {
+       this.oldValue = this.value;
+
+       this.value = value;
+
+       if (this.table.options.reactiveData && this.table.modExists("reactiveData")) {
+               this.table.modules.reactiveData.block();
+       }
+
+       this.column.setFieldValue(this.row.data, value);
+
+       if (this.table.options.reactiveData && this.table.modExists("reactiveData")) {
+               this.table.modules.reactiveData.unblock();
+       }
+
+       if (this.loaded) {
+               this.layoutElement();
+       }
+};
+
+Cell.prototype.layoutElement = function () {
+       this._generateContents();
+       this._generateTooltip();
+
+       //set resizable handles
+       if (this.table.options.resizableColumns && this.table.modExists("resizeColumns") && this.row.type === "row") {
+               this.table.modules.resizeColumns.initializeColumn("cell", this.column, this.element);
+       }
+
+       if ((this.column.definition.contextMenu || this.column.definition.clickMenu) && this.table.modExists("menu")) {
+               this.table.modules.menu.initializeCell(this);
+       }
+
+       //handle frozen cells
+       if (this.table.modExists("frozenColumns")) {
+               this.table.modules.frozenColumns.layoutElement(this.element, this.column);
+       }
+};
+
+Cell.prototype.setWidth = function () {
+       this.width = this.column.width;
+       this.element.style.width = this.column.widthStyled;
+};
+
+Cell.prototype.clearWidth = function () {
+       this.width = "";
+       this.element.style.width = "";
+};
+
+Cell.prototype.getWidth = function () {
+       return this.width || this.element.offsetWidth;
+};
+
+Cell.prototype.setMinWidth = function () {
+       this.minWidth = this.column.minWidth;
+       this.element.style.minWidth = this.column.minWidthStyled;
+};
+
+Cell.prototype.checkHeight = function () {
+       // var height = this.element.css("height");
+       this.row.reinitializeHeight();
+};
+
+Cell.prototype.clearHeight = function () {
+       this.element.style.height = "";
+       this.height = null;
+};
+
+Cell.prototype.setHeight = function () {
+       this.height = this.row.height;
+       this.element.style.height = this.row.heightStyled;
+};
+
+Cell.prototype.getHeight = function () {
+       return this.height || this.element.offsetHeight;
+};
+
+Cell.prototype.show = function () {
+       this.element.style.display = this.column.vertAlign ? "inline-flex" : "";
+};
+
+Cell.prototype.hide = function () {
+       this.element.style.display = "none";
+};
+
+Cell.prototype.edit = function (force) {
+       if (this.table.modExists("edit", true)) {
+               return this.table.modules.edit.editCell(this, force);
+       }
+};
+
+Cell.prototype.cancelEdit = function () {
+       if (this.table.modExists("edit", true)) {
+               var editing = this.table.modules.edit.getCurrentCell();
+
+               if (editing && editing._getSelf() === this) {
+                       this.table.modules.edit.cancelEdit();
+               } else {
+                       console.warn("Cancel Editor Error - This cell is not currently being edited ");
+               }
+       }
+};
+
+Cell.prototype.validate = function () {
+       if (this.column.modules.validate && this.table.modExists("validate", true)) {
+               var valid = this.table.modules.validate.validate(this.column.modules.validate, this, this.getValue());
+
+               return valid === true;
+       } else {
+               return true;
+       }
+};
+
+Cell.prototype.delete = function () {
+       if (!this.table.rowManager.redrawBlock && this.element.parentNode) {
+               this.element.parentNode.removeChild(this.element);
+       }
+
+       if (this.modules.validate && this.modules.validate.invalid) {
+               this.table.modules.validate.clearValidation(this);
+       }
+
+       if (this.modules.edit && this.modules.edit.edited) {
+               this.table.modules.edit.clearEdited(this);
+       }
+
+       if (this.table.options.history) {
+               this.table.modules.history.clearComponentHistory(this);
+       }
+
+       this.element = false;
+       this.column.deleteCell(this);
+       this.row.deleteCell(this);
+       this.calcs = {};
+};
+
+//////////////// Navigation /////////////////
+
+Cell.prototype.nav = function () {
+
+       var self = this,
+           nextCell = false,
+           index = this.row.getCellIndex(this);
+
+       return {
+               next: function next() {
+                       var nextCell = this.right(),
+                           nextRow;
+
+                       if (!nextCell) {
+                               nextRow = self.table.rowManager.nextDisplayRow(self.row, true);
+
+                               if (nextRow) {
+                                       nextCell = nextRow.findNextEditableCell(-1);
+
+                                       if (nextCell) {
+                                               nextCell.edit();
+                                               return true;
+                                       }
+                               }
+                       } else {
+                               return true;
+                       }
+
+                       return false;
+               },
+               prev: function prev() {
+                       var nextCell = this.left(),
+                           prevRow;
+
+                       if (!nextCell) {
+                               prevRow = self.table.rowManager.prevDisplayRow(self.row, true);
+
+                               if (prevRow) {
+                                       nextCell = prevRow.findPrevEditableCell(prevRow.cells.length);
+
+                                       if (nextCell) {
+                                               nextCell.edit();
+                                               return true;
+                                       }
+                               }
+                       } else {
+                               return true;
+                       }
+
+                       return false;
+               },
+               left: function left() {
+
+                       nextCell = self.row.findPrevEditableCell(index);
+
+                       if (nextCell) {
+                               nextCell.edit();
+                               return true;
+                       } else {
+                               return false;
+                       }
+               },
+               right: function right() {
+                       nextCell = self.row.findNextEditableCell(index);
+
+                       if (nextCell) {
+                               nextCell.edit();
+                               return true;
+                       } else {
+                               return false;
+                       }
+               },
+               up: function up() {
+                       var nextRow = self.table.rowManager.prevDisplayRow(self.row, true);
+
+                       if (nextRow) {
+                               nextRow.cells[index].edit();
+                       }
+               },
+               down: function down() {
+                       var nextRow = self.table.rowManager.nextDisplayRow(self.row, true);
+
+                       if (nextRow) {
+                               nextRow.cells[index].edit();
+                       }
+               }
+
+       };
+};
+
+Cell.prototype.getIndex = function () {
+       this.row.getCellIndex(this);
+};
+
+//////////////// Object Generation /////////////////
+Cell.prototype.getComponent = function () {
+
+       if (!this.component) {
+               this.component = new CellComponent(this);
+       }
+
+       return this.component;
+};
+var FooterManager = function FooterManager(table) {
+       this.table = table;
+       this.active = false;
+       this.element = this.createElement(); //containing element
+       this.external = false;
+       this.links = [];
+
+       this._initialize();
+};
+
+FooterManager.prototype.createElement = function () {
+       var el = document.createElement("div");
+
+       el.classList.add("tabulator-footer");
+
+       return el;
+};
+
+FooterManager.prototype._initialize = function (element) {
+       if (this.table.options.footerElement) {
+
+               switch (_typeof(this.table.options.footerElement)) {
+                       case "string":
+
+                               if (this.table.options.footerElement[0] === "<") {
+                                       this.element.innerHTML = this.table.options.footerElement;
+                               } else {
+                                       this.external = true;
+                                       this.element = document.querySelector(this.table.options.footerElement);
+                               }
+                               break;
+                       default:
+                               this.element = this.table.options.footerElement;
+                               break;
+               }
+       }
+};
+
+FooterManager.prototype.getElement = function () {
+       return this.element;
+};
+
+FooterManager.prototype.append = function (element, parent) {
+       this.activate(parent);
+
+       this.element.appendChild(element);
+       this.table.rowManager.adjustTableSize();
+};
+
+FooterManager.prototype.prepend = function (element, parent) {
+       this.activate(parent);
+
+       this.element.insertBefore(element, this.element.firstChild);
+       this.table.rowManager.adjustTableSize();
+};
+
+FooterManager.prototype.remove = function (element) {
+       element.parentNode.removeChild(element);
+       this.deactivate();
+};
+
+FooterManager.prototype.deactivate = function (force) {
+       if (!this.element.firstChild || force) {
+               if (!this.external) {
+                       this.element.parentNode.removeChild(this.element);
+               }
+               this.active = false;
+       }
+
+       // this.table.rowManager.adjustTableSize();
+};
+
+FooterManager.prototype.activate = function (parent) {
+       if (!this.active) {
+               this.active = true;
+               if (!this.external) {
+                       this.table.element.appendChild(this.getElement());
+                       this.table.element.style.display = '';
+               }
+       }
+
+       if (parent) {
+               this.links.push(parent);
+       }
+};
+
+FooterManager.prototype.redraw = function () {
+       this.links.forEach(function (link) {
+               link.footerRedraw();
+       });
+};
+
+var Tabulator = function Tabulator(element, options) {
+
+       this.options = {};
+
+       this.columnManager = null; // hold Column Manager
+       this.rowManager = null; //hold Row Manager
+       this.footerManager = null; //holder Footer Manager
+       this.vdomHoz = null; //holder horizontal virtual dom
+
+
+       this.browser = ""; //hold current browser type
+       this.browserSlow = false; //handle reduced functionality for slower browsers
+       this.browserMobile = false; //check if running on moble, prevent resize cancelling edit on keyboard appearence
+       this.rtl = false; //check if the table is in RTL mode
+
+       this.modules = {}; //hold all modules bound to this table
+
+       if (this.initializeElement(element)) {
+               this.initializeOptions(options || {});
+               this._create();
+       }
+
+       Tabulator.prototype.comms.register(this); //register table for inderdevice communication
+};
+
+//default setup options
+Tabulator.prototype.defaultOptions = {
+
+       height: false, //height of tabulator
+       minHeight: false, //minimum height of tabulator
+       maxHeight: false, //maximum height of tabulator
+
+       layout: "fitData", ///layout type "fitColumns" | "fitData"
+       layoutColumnsOnNewData: false, //update column widths on setData
+
+       columnMinWidth: 40, //minimum global width for a column
+       columnHeaderVertAlign: "top", //vertical alignment of column headers
+       columnVertAlign: false, // DEPRECATED - Left to allow warning
+
+       resizableColumns: true, //resizable columns
+       resizableRows: false, //resizable rows
+       autoResize: true, //auto resize table
+
+       columns: [], //store for colum header info
+
+       cellHozAlign: "", //horizontal align columns
+       cellVertAlign: "", //vertical align columns
+       headerHozAlign: "", //horizontal header alignment
+
+
+       data: [], //default starting data
+
+       autoColumns: false, //build columns from data row structure
+       autoColumnsDefinitions: false,
+
+       reactiveData: false, //enable data reactivity
+
+       nestedFieldSeparator: ".", //seperatpr for nested data
+
+       tooltips: false, //Tool tip value
+       tooltipsHeader: false, //Tool tip for headers
+       tooltipGenerationMode: "load", //when to generate tooltips
+
+       initialSort: false, //initial sorting criteria
+       initialFilter: false, //initial filtering criteria
+       initialHeaderFilter: false, //initial header filtering criteria
+
+       columnHeaderSortMulti: true, //multiple or single column sorting
+
+       sortOrderReverse: false, //reverse internal sort ordering
+
+       headerSort: true, //set default global header sort
+       headerSortTristate: false, //set default tristate header sorting
+       headerSortElement: "<div class='tabulator-arrow'></div>", //header sort element
+
+       footerElement: false, //hold footer element
+
+       index: "id", //filed for row index
+
+       textDirection: "auto",
+
+       keybindings: [], //array for keybindings
+
+       tabEndNewRow: false, //create new row when tab to end of table
+
+       invalidOptionWarnings: true, //allow toggling of invalid option warnings
+
+       clipboard: false, //enable clipboard
+       clipboardCopyStyled: true, //formatted table data
+       clipboardCopyConfig: false, //clipboard config
+       clipboardCopyFormatter: false, //DEPRICATED - REMOVE in 5.0
+       clipboardCopyRowRange: "active", //restrict clipboard to visible rows only
+       clipboardPasteParser: "table", //convert pasted clipboard data to rows
+       clipboardPasteAction: "insert", //how to insert pasted data into the table
+
+       clipboardCopied: function clipboardCopied() {}, //data has been copied to the clipboard
+       clipboardPasted: function clipboardPasted() {}, //data has been pasted into the table
+       clipboardPasteError: function clipboardPasteError() {}, //data has not successfully been pasted into the table
+
+       downloadDataFormatter: false, //function to manipulate table data before it is downloaded
+       downloadReady: function downloadReady(data, blob) {
+               return blob;
+       }, //function to manipulate download data
+       downloadComplete: false, //function to manipulate download data
+       downloadConfig: {}, //download config
+       downloadRowRange: "active", //restrict download to active rows only
+
+       dataTree: false, //enable data tree
+       dataTreeFilter: true, //filter child rows
+       dataTreeSort: true, //sort child rows
+       dataTreeElementColumn: false,
+       dataTreeBranchElement: true, //show data tree branch element
+       dataTreeChildIndent: 9, //data tree child indent in px
+       dataTreeChildField: "_children", //data tre column field to look for child rows
+       dataTreeCollapseElement: false, //data tree row collapse element
+       dataTreeExpandElement: false, //data tree row expand element
+       dataTreeStartExpanded: false,
+       dataTreeRowExpanded: function dataTreeRowExpanded() {}, //row has been expanded
+       dataTreeRowCollapsed: function dataTreeRowCollapsed() {}, //row has been collapsed
+       dataTreeChildColumnCalcs: false, //include visible data tree rows in column calculations
+       dataTreeSelectPropagate: false, //seleccting a parent row selects its children
+
+       printAsHtml: false, //enable print as html
+       printFormatter: false, //printing page formatter
+       printHeader: false, //page header contents
+       printFooter: false, //page footer contents
+       printCopyStyle: true, //DEPRICATED - REMOVE in 5.0
+       printStyled: true, //enable print as html styling
+       printVisibleRows: true, //DEPRICATED - REMOVE in 5.0
+       printRowRange: "visible", //restrict print to visible rows only
+       printConfig: {}, //print config options
+
+       addRowPos: "bottom", //position to insert blank rows, top|bottom
+
+       selectable: "highlight", //highlight rows on hover
+       selectableRangeMode: "drag", //highlight rows on hover
+       selectableRollingSelection: true, //roll selection once maximum number of selectable rows is reached
+       selectablePersistence: true, // maintain selection when table view is updated
+       selectableCheck: function selectableCheck(data, row) {
+               return true;
+       }, //check wheather row is selectable
+
+       headerFilterLiveFilterDelay: 300, //delay before updating column after user types in header filter
+       headerFilterPlaceholder: false, //placeholder text to display in header filters
+
+       headerVisible: true, //hide header
+
+       history: false, //enable edit history
+
+       locale: false, //current system language
+       langs: {},
+
+       virtualDom: true, //enable DOM virtualization
+       virtualDomBuffer: 0, // set virtual DOM buffer size
+       virtualDomHoz: false, //enable horizontal DOM virtualization
+
+       persistentLayout: false, //DEPRICATED - REMOVE in 5.0
+       persistentSort: false, //DEPRICATED - REMOVE in 5.0
+       persistentFilter: false, //DEPRICATED - REMOVE in 5.0
+       persistenceID: "", //key for persistent storage
+       persistenceMode: true, //mode for storing persistence information
+       persistenceReaderFunc: false, //function for handling persistence data reading
+       persistenceWriterFunc: false, //function for handling persistence data writing
+
+       persistence: false,
+
+       responsiveLayout: false, //responsive layout flags
+       responsiveLayoutCollapseStartOpen: true, //start showing collapsed data
+       responsiveLayoutCollapseUseFormatters: true, //responsive layout collapse formatter
+       responsiveLayoutCollapseFormatter: false, //responsive layout collapse formatter
+
+       pagination: false, //set pagination type
+       paginationSize: false, //set number of rows to a page
+       paginationInitialPage: 1, //initail page to show on load
+       paginationButtonCount: 5, // set count of page button
+       paginationSizeSelector: false, //add pagination size selector element
+       paginationElement: false, //element to hold pagination numbers
+       paginationDataSent: {}, //pagination data sent to the server
+       paginationDataReceived: {}, //pagination data received from the server
+       paginationAddRow: "page", //add rows on table or page
+
+       ajaxURL: false, //url for ajax loading
+       ajaxURLGenerator: false,
+       ajaxParams: {}, //params for ajax loading
+       ajaxConfig: "get", //ajax request type
+       ajaxContentType: "form", //ajax request type
+       ajaxRequestFunc: false, //promise function
+       ajaxLoader: true, //show loader
+       ajaxLoaderLoading: false, //loader element
+       ajaxLoaderError: false, //loader element
+       ajaxFiltering: false,
+       ajaxSorting: false,
+       ajaxProgressiveLoad: false, //progressive loading
+       ajaxProgressiveLoadDelay: 0, //delay between requests
+       ajaxProgressiveLoadScrollMargin: 0, //margin before scroll begins
+
+       groupBy: false, //enable table grouping and set field to group by
+       groupStartOpen: true, //starting state of group
+       groupValues: false,
+       groupUpdateOnCellEdit: false,
+
+       groupHeader: false, //header generation function
+       groupHeaderPrint: null,
+       groupHeaderClipboard: null,
+       groupHeaderHtmlOutput: null,
+       groupHeaderDownload: null,
+
+       htmlOutputConfig: false, //html outypu config
+
+       movableColumns: false, //enable movable columns
+
+       movableRows: false, //enable movable rows
+       movableRowsConnectedTables: false, //tables for movable rows to be connected to
+       movableRowsConnectedElements: false, //other elements for movable rows to be connected to
+       movableRowsSender: false,
+       movableRowsReceiver: "insert",
+       movableRowsSendingStart: function movableRowsSendingStart() {},
+       movableRowsSent: function movableRowsSent() {},
+       movableRowsSentFailed: function movableRowsSentFailed() {},
+       movableRowsSendingStop: function movableRowsSendingStop() {},
+       movableRowsReceivingStart: function movableRowsReceivingStart() {},
+       movableRowsReceived: function movableRowsReceived() {},
+       movableRowsReceivedFailed: function movableRowsReceivedFailed() {},
+       movableRowsReceivingStop: function movableRowsReceivingStop() {},
+       movableRowsElementDrop: function movableRowsElementDrop() {},
+
+       scrollToRowPosition: "top",
+       scrollToRowIfVisible: true,
+
+       scrollToColumnPosition: "left",
+       scrollToColumnIfVisible: true,
+
+       rowFormatter: false,
+       rowFormatterPrint: null,
+       rowFormatterClipboard: null,
+       rowFormatterHtmlOutput: null,
+
+       placeholder: false,
+
+       //table building callbacks
+       tableBuilding: function tableBuilding() {},
+       tableBuilt: function tableBuilt() {},
+
+       //render callbacks
+       renderStarted: function renderStarted() {},
+       renderComplete: function renderComplete() {},
+
+       //row callbacks
+       rowClick: false,
+       rowDblClick: false,
+       rowContext: false,
+       rowTap: false,
+       rowDblTap: false,
+       rowTapHold: false,
+       rowMouseEnter: false,
+       rowMouseLeave: false,
+       rowMouseOver: false,
+       rowMouseOut: false,
+       rowMouseMove: false,
+       rowContextMenu: false,
+       rowClickMenu: false,
+       rowAdded: function rowAdded() {},
+       rowDeleted: function rowDeleted() {},
+       rowMoved: function rowMoved() {},
+       rowUpdated: function rowUpdated() {},
+       rowSelectionChanged: function rowSelectionChanged() {},
+       rowSelected: function rowSelected() {},
+       rowDeselected: function rowDeselected() {},
+       rowResized: function rowResized() {},
+
+       //cell callbacks
+       //row callbacks
+       cellClick: false,
+       cellDblClick: false,
+       cellContext: false,
+       cellTap: false,
+       cellDblTap: false,
+       cellTapHold: false,
+       cellMouseEnter: false,
+       cellMouseLeave: false,
+       cellMouseOver: false,
+       cellMouseOut: false,
+       cellMouseMove: false,
+       cellEditing: function cellEditing() {},
+       cellEdited: function cellEdited() {},
+       cellEditCancelled: function cellEditCancelled() {},
+
+       //column callbacks
+       columnMoved: false,
+       columnResized: function columnResized() {},
+       columnTitleChanged: function columnTitleChanged() {},
+       columnVisibilityChanged: function columnVisibilityChanged() {},
+
+       //HTML iport callbacks
+       htmlImporting: function htmlImporting() {},
+       htmlImported: function htmlImported() {},
+
+       //data callbacks
+       dataLoading: function dataLoading() {},
+       dataLoaded: function dataLoaded() {},
+       dataEdited: false, //DEPRECATED
+       dataChanged: false,
+
+       //ajax callbacks
+       ajaxRequesting: function ajaxRequesting() {},
+       ajaxResponse: false,
+       ajaxError: function ajaxError() {},
+
+       //filtering callbacks
+       dataFiltering: false,
+       dataFiltered: false,
+
+       //sorting callbacks
+       dataSorting: function dataSorting() {},
+       dataSorted: function dataSorted() {},
+
+       //grouping callbacks
+       groupToggleElement: "arrow",
+       groupClosedShowCalcs: false,
+       dataGrouping: function dataGrouping() {},
+       dataGrouped: false,
+       groupVisibilityChanged: function groupVisibilityChanged() {},
+       groupClick: false,
+       groupDblClick: false,
+       groupContext: false,
+       groupContextMenu: false,
+       groupClickMenu: false,
+       groupTap: false,
+       groupDblTap: false,
+       groupTapHold: false,
+
+       columnCalcs: true,
+
+       //pagination callbacks
+       pageLoaded: function pageLoaded() {},
+
+       //localization callbacks
+       localized: function localized() {},
+
+       //validation callbacks
+       validationMode: "blocking",
+       validationFailed: function validationFailed() {},
+
+       //history callbacks
+       historyUndo: function historyUndo() {},
+       historyRedo: function historyRedo() {},
+
+       //scroll callbacks
+       scrollHorizontal: function scrollHorizontal() {},
+       scrollVertical: function scrollVertical() {}
+};
+
+Tabulator.prototype.initializeOptions = function (options) {
+
+       //warn user if option is not available
+       if (options.invalidOptionWarnings !== false) {
+               for (var key in options) {
+                       if (typeof this.defaultOptions[key] === "undefined") {
+                               console.warn("Invalid table constructor option:", key);
+                       }
+               }
+       }
+
+       //assign options to table
+       for (var key in this.defaultOptions) {
+               if (key in options) {
+                       this.options[key] = options[key];
+               } else {
+                       if (Array.isArray(this.defaultOptions[key])) {
+                               this.options[key] = Object.assign([], this.defaultOptions[key]);
+                       } else if (_typeof(this.defaultOptions[key]) === "object" && this.defaultOptions[key] !== null) {
+                               this.options[key] = Object.assign({}, this.defaultOptions[key]);
+                       } else {
+                               this.options[key] = this.defaultOptions[key];
+                       }
+               }
+       }
+};
+
+Tabulator.prototype.initializeElement = function (element) {
+
+       if (typeof HTMLElement !== "undefined" && element instanceof HTMLElement) {
+               this.element = element;
+               return true;
+       } else if (typeof element === "string") {
+               this.element = document.querySelector(element);
+
+               if (this.element) {
+                       return true;
+               } else {
+                       console.error("Tabulator Creation Error - no element found matching selector: ", element);
+                       return false;
+               }
+       } else {
+               console.error("Tabulator Creation Error - Invalid element provided:", element);
+               return false;
+       }
+};
+
+Tabulator.prototype.rtlCheck = function () {
+       var style = window.getComputedStyle(this.element);
+
+       switch (this.options.textDirection) {
+               case "auto":
+                       if (style.direction !== "rtl") {
+                               break;
+                       };
+
+               case "rtl":
+                       this.element.classList.add("tabulator-rtl");
+                       this.rtl = true;
+                       break;
+
+               case "ltr":
+                       this.element.classList.add("tabulator-ltr");
+
+               default:
+                       this.rtl = false;
+       }
+};
+
+//convert depricated functionality to new functions
+Tabulator.prototype._mapDepricatedFunctionality = function () {
+
+       //map depricated persistance setup options
+       if (this.options.persistentLayout || this.options.persistentSort || this.options.persistentFilter) {
+               if (!this.options.persistence) {
+                       this.options.persistence = {};
+               }
+       }
+
+       if (this.options.dataEdited) {
+               console.warn("DEPRECATION WARNING - dataEdited option has been deprecated, please use the dataChanged option instead");
+               this.options.dataChanged = this.options.dataEdited;
+       }
+
+       if (this.options.downloadDataFormatter) {
+               console.warn("DEPRECATION WARNING - downloadDataFormatter option has been deprecated");
+       }
+
+       if (typeof this.options.clipboardCopyHeader !== "undefined") {
+               this.options.columnHeaders = this.options.clipboardCopyHeader;
+               console.warn("DEPRECATION WARNING - clipboardCopyHeader option has been deprecated, please use the columnHeaders property on the clipboardCopyConfig option");
+       }
+
+       if (this.options.printVisibleRows !== true) {
+               console.warn("printVisibleRows option is deprecated, you should now use the printRowRange option");
+
+               this.options.persistence.printRowRange = "active";
+       }
+
+       if (this.options.printCopyStyle !== true) {
+               console.warn("printCopyStyle option is deprecated, you should now use the printStyled option");
+
+               this.options.persistence.printStyled = this.options.printCopyStyle;
+       }
+
+       if (this.options.persistentLayout) {
+               console.warn("persistentLayout option is deprecated, you should now use the persistence option");
+
+               if (this.options.persistence !== true && typeof this.options.persistence.columns === "undefined") {
+                       this.options.persistence.columns = true;
+               }
+       }
+
+       if (this.options.persistentSort) {
+               console.warn("persistentSort option is deprecated, you should now use the persistence option");
+
+               if (this.options.persistence !== true && typeof this.options.persistence.sort === "undefined") {
+                       this.options.persistence.sort = true;
+               }
+       }
+
+       if (this.options.persistentFilter) {
+               console.warn("persistentFilter option is deprecated, you should now use the persistence option");
+
+               if (this.options.persistence !== true && typeof this.options.persistence.filter === "undefined") {
+                       this.options.persistence.filter = true;
+               }
+       }
+
+       if (this.options.columnVertAlign) {
+               console.warn("columnVertAlign option is deprecated, you should now use the columnHeaderVertAlign option");
+
+               this.options.columnHeaderVertAlign = this.options.columnVertAlign;
+       }
+};
+
+Tabulator.prototype._clearSelection = function () {
+
+       this.element.classList.add("tabulator-block-select");
+
+       if (window.getSelection) {
+               if (window.getSelection().empty) {
+                       // Chrome
+                       window.getSelection().empty();
+               } else if (window.getSelection().removeAllRanges) {
+                       // Firefox
+                       window.getSelection().removeAllRanges();
+               }
+       } else if (document.selection) {
+               // IE?
+               document.selection.empty();
+       }
+
+       this.element.classList.remove("tabulator-block-select");
+};
+
+//concreate table
+Tabulator.prototype._create = function () {
+       this._clearObjectPointers();
+
+       this._mapDepricatedFunctionality();
+
+       this.bindModules();
+
+       this.rtlCheck();
+
+       if (this.element.tagName === "TABLE") {
+               if (this.modExists("htmlTableImport", true)) {
+                       this.modules.htmlTableImport.parseTable();
+               }
+       }
+
+       this.columnManager = new ColumnManager(this);
+       this.rowManager = new RowManager(this);
+       this.footerManager = new FooterManager(this);
+
+       this.columnManager.setRowManager(this.rowManager);
+       this.rowManager.setColumnManager(this.columnManager);
+
+       if (this.options.virtualDomHoz) {
+               this.vdomHoz = new VDomHoz(this);
+       }
+
+       this._buildElement();
+
+       this._loadInitialData();
+};
+
+//clear pointers to objects in default config object
+Tabulator.prototype._clearObjectPointers = function () {
+       this.options.columns = this.options.columns.slice(0);
+
+       if (!this.options.reactiveData) {
+               this.options.data = this.options.data.slice(0);
+       }
+};
+
+//build tabulator element
+Tabulator.prototype._buildElement = function () {
+       var _this24 = this;
+
+       var element = this.element,
+           mod = this.modules,
+           options = this.options;
+
+       options.tableBuilding.call(this);
+
+       element.classList.add("tabulator");
+       element.setAttribute("role", "grid");
+
+       //empty element
+       while (element.firstChild) {
+               element.removeChild(element.firstChild);
+       } //set table height
+       if (options.height) {
+               options.height = isNaN(options.height) ? options.height : options.height + "px";
+               element.style.height = options.height;
+       }
+
+       //set table min height
+       if (options.minHeight !== false) {
+               options.minHeight = isNaN(options.minHeight) ? options.minHeight : options.minHeight + "px";
+               element.style.minHeight = options.minHeight;
+       }
+
+       //set table maxHeight
+       if (options.maxHeight !== false) {
+               options.maxHeight = isNaN(options.maxHeight) ? options.maxHeight : options.maxHeight + "px";
+               element.style.maxHeight = options.maxHeight;
+       }
+
+       this.columnManager.initialize();
+       this.rowManager.initialize();
+
+       this._detectBrowser();
+
+       if (this.modExists("layout", true)) {
+               mod.layout.initialize(options.layout);
+       }
+
+       //set localization
+
+       mod.localize.initialize();
+
+       if (options.headerFilterPlaceholder !== false) {
+               mod.localize.setHeaderFilterPlaceholder(options.headerFilterPlaceholder);
+       }
+
+       for (var locale in options.langs) {
+               mod.localize.installLang(locale, options.langs[locale]);
+       }
+
+       mod.localize.setLocale(options.locale);
+
+       //configure placeholder element
+       if (typeof options.placeholder == "string") {
+
+               var el = document.createElement("div");
+               el.classList.add("tabulator-placeholder");
+
+               var span = document.createElement("span");
+               span.innerHTML = options.placeholder;
+
+               el.appendChild(span);
+
+               options.placeholder = el;
+       }
+
+       //build table elements
+       element.appendChild(this.columnManager.getElement());
+       element.appendChild(this.rowManager.getElement());
+
+       if (options.footerElement) {
+               this.footerManager.activate();
+       }
+
+       if (options.persistence && this.modExists("persistence", true)) {
+               mod.persistence.initialize();
+       }
+
+       if (options.persistence && this.modExists("persistence", true) && mod.persistence.config.columns) {
+               options.columns = mod.persistence.load("columns", options.columns);
+       }
+
+       if (options.movableRows && this.modExists("moveRow")) {
+               mod.moveRow.initialize();
+       }
+
+       if (options.autoColumns && this.options.data) {
+               this.columnManager.generateColumnsFromRowData(this.options.data);
+       }
+
+       if (this.modExists("columnCalcs")) {
+               mod.columnCalcs.initialize();
+       }
+
+       this.columnManager.setColumns(options.columns);
+
+       if (options.dataTree && this.modExists("dataTree", true)) {
+               mod.dataTree.initialize();
+       }
+
+       if (this.modExists("frozenRows")) {
+               this.modules.frozenRows.initialize();
+       }
+
+       if ((options.persistence && this.modExists("persistence", true) && mod.persistence.config.sort || options.initialSort) && this.modExists("sort", true)) {
+               var sorters = [];
+
+               if (options.persistence && this.modExists("persistence", true) && mod.persistence.config.sort) {
+                       sorters = mod.persistence.load("sort");
+
+                       if (sorters === false && options.initialSort) {
+                               sorters = options.initialSort;
+                       }
+               } else if (options.initialSort) {
+                       sorters = options.initialSort;
+               }
+
+               mod.sort.setSort(sorters);
+       }
+
+       if ((options.persistence && this.modExists("persistence", true) && mod.persistence.config.filter || options.initialFilter) && this.modExists("filter", true)) {
+               var filters = [];
+
+               if (options.persistence && this.modExists("persistence", true) && mod.persistence.config.filter) {
+                       filters = mod.persistence.load("filter");
+
+                       if (filters === false && options.initialFilter) {
+                               filters = options.initialFilter;
+                       }
+               } else if (options.initialFilter) {
+                       filters = options.initialFilter;
+               }
+
+               mod.filter.setFilter(filters);
+       }
+
+       if (options.initialHeaderFilter && this.modExists("filter", true)) {
+               options.initialHeaderFilter.forEach(function (item) {
+
+                       var column = _this24.columnManager.findColumn(item.field);
+
+                       if (column) {
+                               mod.filter.setHeaderFilterValue(column, item.value);
+                       } else {
+                               console.warn("Column Filter Error - No matching column found:", item.field);
+                               return false;
+                       }
+               });
+       }
+
+       if (this.modExists("ajax")) {
+               mod.ajax.initialize();
+       }
+
+       if (options.pagination && this.modExists("page", true)) {
+               mod.page.initialize();
+       }
+
+       if (options.groupBy && this.modExists("groupRows", true)) {
+               mod.groupRows.initialize();
+       }
+
+       if (this.modExists("keybindings")) {
+               mod.keybindings.initialize();
+       }
+
+       if (this.modExists("selectRow")) {
+               mod.selectRow.clearSelectionData(true);
+       }
+
+       if (options.autoResize && this.modExists("resizeTable")) {
+               mod.resizeTable.initialize();
+       }
+
+       if (this.modExists("clipboard")) {
+               mod.clipboard.initialize();
+       }
+
+       if (options.printAsHtml && this.modExists("print")) {
+               mod.print.initialize();
+       }
+
+       options.tableBuilt.call(this);
+};
+
+Tabulator.prototype._loadInitialData = function () {
+       var self = this;
+
+       if (self.options.pagination && self.modExists("page")) {
+               self.modules.page.reset(true, true);
+
+               if (self.options.pagination == "local") {
+                       if (self.options.data.length) {
+                               self.rowManager.setData(self.options.data, false, true);
+                       } else {
+                               if ((self.options.ajaxURL || self.options.ajaxURLGenerator) && self.modExists("ajax")) {
+                                       self.modules.ajax.loadData(false, true).then(function () {}).catch(function () {
+                                               if (self.options.paginationInitialPage) {
+                                                       self.modules.page.setPage(self.options.paginationInitialPage);
+                                               }
+                                       });
+
+                                       return;
+                               } else {
+                                       self.rowManager.setData(self.options.data, false, true);
+                               }
+                       }
+
+                       if (self.options.paginationInitialPage) {
+                               self.modules.page.setPage(self.options.paginationInitialPage);
+                       }
+               } else {
+                       if (self.options.ajaxURL) {
+                               self.modules.page.setPage(self.options.paginationInitialPage).then(function () {}).catch(function () {});
+                       } else {
+                               self.rowManager.setData([], false, true);
+                       }
+               }
+       } else {
+               if (self.options.data.length) {
+                       self.rowManager.setData(self.options.data);
+               } else {
+                       if ((self.options.ajaxURL || self.options.ajaxURLGenerator) && self.modExists("ajax")) {
+                               self.modules.ajax.loadData(false, true).then(function () {}).catch(function () {});
+                       } else {
+                               self.rowManager.setData(self.options.data, false, true);
+                       }
+               }
+       }
+};
+
+//deconstructor
+Tabulator.prototype.destroy = function () {
+       var element = this.element;
+
+       Tabulator.prototype.comms.deregister(this); //deregister table from inderdevice communication
+
+       if (this.options.reactiveData && this.modExists("reactiveData", true)) {
+               this.modules.reactiveData.unwatchData();
+       }
+
+       //clear row data
+       this.rowManager.rows.forEach(function (row) {
+               row.wipe();
+       });
+
+       this.rowManager.rows = [];
+       this.rowManager.activeRows = [];
+       this.rowManager.displayRows = [];
+
+       //clear event bindings
+       if (this.options.autoResize && this.modExists("resizeTable")) {
+               this.modules.resizeTable.clearBindings();
+       }
+
+       if (this.modExists("keybindings")) {
+               this.modules.keybindings.clearBindings();
+       }
+
+       //clear DOM
+       while (element.firstChild) {
+               element.removeChild(element.firstChild);
+       }element.classList.remove("tabulator");
+};
+
+Tabulator.prototype._detectBrowser = function () {
+       var ua = navigator.userAgent || navigator.vendor || window.opera;
+
+       if (ua.indexOf("Trident") > -1) {
+               this.browser = "ie";
+               this.browserSlow = true;
+       } else if (ua.indexOf("Edge") > -1) {
+               this.browser = "edge";
+               this.browserSlow = true;
+       } else if (ua.indexOf("Firefox") > -1) {
+               this.browser = "firefox";
+               this.browserSlow = false;
+       } else {
+               this.browser = "other";
+               this.browserSlow = false;
+       }
+
+       this.browserMobile = /(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino|android|ipad|playbook|silk/i.test(ua) || /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(ua.substr(0, 4));
+};
+
+////////////////// Data Handling //////////////////
+
+//block table redrawing
+Tabulator.prototype.blockRedraw = function () {
+       return this.rowManager.blockRedraw();
+};
+
+//restore table redrawing
+Tabulator.prototype.restoreRedraw = function () {
+       return this.rowManager.restoreRedraw();
+};
+
+//local data from local file
+Tabulator.prototype.setDataFromLocalFile = function (extensions) {
+       var _this25 = this;
+
+       return new Promise(function (resolve, reject) {
+               var input = document.createElement("input");
+               input.type = "file";
+               input.accept = extensions || ".json,application/json";
+
+               input.addEventListener("change", function (e) {
+                       var file = input.files[0],
+                           reader = new FileReader(),
+                           data;
+
+                       reader.readAsText(file);
+
+                       reader.onload = function (e) {
+
+                               try {
+                                       data = JSON.parse(reader.result);
+                               } catch (e) {
+                                       console.warn("File Load Error - File contents is invalid JSON", e);
+                                       reject(e);
+                                       return;
+                               }
+
+                               _this25.setData(data).then(function (data) {
+                                       resolve(data);
+                               }).catch(function (err) {
+                                       resolve(err);
+                               });
+                       };
+
+                       reader.onerror = function (e) {
+                               console.warn("File Load Error - Unable to read file");
+                               reject();
+                       };
+               });
+
+               input.click();
+       });
+};
+
+//load data
+Tabulator.prototype.setData = function (data, params, config) {
+       if (this.modExists("ajax")) {
+               this.modules.ajax.blockActiveRequest();
+       }
+
+       return this._setData(data, params, config, false, true);
+};
+
+Tabulator.prototype._setData = function (data, params, config, inPosition, columnsChanged) {
+       var self = this;
+
+       if (typeof data === "string") {
+               if (data.indexOf("{") == 0 || data.indexOf("[") == 0) {
+                       //data is a json encoded string
+                       return self.rowManager.setData(JSON.parse(data), inPosition, columnsChanged);
+               } else {
+
+                       if (self.modExists("ajax", true)) {
+                               if (params) {
+                                       self.modules.ajax.setParams(params);
+                               }
+
+                               if (config) {
+                                       self.modules.ajax.setConfig(config);
+                               }
+
+                               self.modules.ajax.setUrl(data);
+
+                               if (self.options.pagination == "remote" && self.modExists("page", true)) {
+                                       self.modules.page.reset(true, true);
+                                       return self.modules.page.setPage(1);
+                               } else {
+                                       //assume data is url, make ajax call to url to get data
+                                       return self.modules.ajax.loadData(inPosition, columnsChanged);
+                               }
+                       }
+               }
+       } else {
+               if (data) {
+                       //asume data is already an object
+                       return self.rowManager.setData(data, inPosition, columnsChanged);
+               } else {
+
+                       //no data provided, check if ajaxURL is present;
+                       if (self.modExists("ajax") && (self.modules.ajax.getUrl || self.options.ajaxURLGenerator)) {
+
+                               if (self.options.pagination == "remote" && self.modExists("page", true)) {
+                                       self.modules.page.reset(true, true);
+                                       return self.modules.page.setPage(1);
+                               } else {
+                                       return self.modules.ajax.loadData(inPosition, columnsChanged);
+                               }
+                       } else {
+                               //empty data
+                               return self.rowManager.setData([], inPosition, columnsChanged);
+                       }
+               }
+       }
+};
+
+//clear data
+Tabulator.prototype.clearData = function () {
+       if (this.modExists("ajax")) {
+               this.modules.ajax.blockActiveRequest();
+       }
+
+       this.rowManager.clearData();
+};
+
+//get table data array
+Tabulator.prototype.getData = function (active) {
+
+       if (active === true) {
+               console.warn("passing a boolean to the getData function is deprecated, you should now pass the string 'active'");
+               active = "active";
+       }
+
+       return this.rowManager.getData(active);
+};
+
+//get table data array count
+Tabulator.prototype.getDataCount = function (active) {
+
+       if (active === true) {
+               console.warn("passing a boolean to the getDataCount function is deprecated, you should now pass the string 'active'");
+               active = "active";
+       }
+
+       return this.rowManager.getDataCount(active);
+};
+
+//search for specific row components
+Tabulator.prototype.searchRows = function (field, type, value) {
+       if (this.modExists("filter", true)) {
+               return this.modules.filter.search("rows", field, type, value);
+       }
+};
+
+//search for specific data
+Tabulator.prototype.searchData = function (field, type, value) {
+       if (this.modExists("filter", true)) {
+               return this.modules.filter.search("data", field, type, value);
+       }
+};
+
+//get table html
+Tabulator.prototype.getHtml = function (visible, style, config) {
+       if (this.modExists("export", true)) {
+               return this.modules.export.getHtml(visible, style, config);
+       }
+};
+
+//get print html
+Tabulator.prototype.print = function (visible, style, config) {
+       if (this.modExists("print", true)) {
+               return this.modules.print.printFullscreen(visible, style, config);
+       }
+};
+
+//retrieve Ajax URL
+Tabulator.prototype.getAjaxUrl = function () {
+       if (this.modExists("ajax", true)) {
+               return this.modules.ajax.getUrl();
+       }
+};
+
+//replace data, keeping table in position with same sort
+Tabulator.prototype.replaceData = function (data, params, config) {
+       if (this.modExists("ajax")) {
+               this.modules.ajax.blockActiveRequest();
+       }
+
+       return this._setData(data, params, config, true);
+};
+
+//update table data
+Tabulator.prototype.updateData = function (data) {
+       var _this26 = this;
+
+       var self = this;
+       var responses = 0;
+
+       return new Promise(function (resolve, reject) {
+               if (_this26.modExists("ajax")) {
+                       _this26.modules.ajax.blockActiveRequest();
+               }
+
+               if (typeof data === "string") {
+                       data = JSON.parse(data);
+               }
+
+               if (data) {
+                       data.forEach(function (item) {
+                               var row = self.rowManager.findRow(item[self.options.index]);
+
+                               if (row) {
+                                       responses++;
+
+                                       row.updateData(item).then(function () {
+                                               responses--;
+
+                                               if (!responses) {
+                                                       resolve();
+                                               }
+                                       });
+                               }
+                       });
+               } else {
+                       console.warn("Update Error - No data provided");
+                       reject("Update Error - No data provided");
+               }
+       });
+};
+
+Tabulator.prototype.addData = function (data, pos, index) {
+       var _this27 = this;
+
+       return new Promise(function (resolve, reject) {
+               if (_this27.modExists("ajax")) {
+                       _this27.modules.ajax.blockActiveRequest();
+               }
+
+               if (typeof data === "string") {
+                       data = JSON.parse(data);
+               }
+
+               if (data) {
+                       _this27.rowManager.addRows(data, pos, index).then(function (rows) {
+                               var output = [];
+
+                               rows.forEach(function (row) {
+                                       output.push(row.getComponent());
+                               });
+
+                               resolve(output);
+                       });
+               } else {
+                       console.warn("Update Error - No data provided");
+                       reject("Update Error - No data provided");
+               }
+       });
+};
+
+//update table data
+Tabulator.prototype.updateOrAddData = function (data) {
+       var _this28 = this;
+
+       var self = this,
+           rows = [],
+           responses = 0;
+
+       return new Promise(function (resolve, reject) {
+               if (_this28.modExists("ajax")) {
+                       _this28.modules.ajax.blockActiveRequest();
+               }
+
+               if (typeof data === "string") {
+                       data = JSON.parse(data);
+               }
+
+               if (data) {
+                       data.forEach(function (item) {
+                               var row = self.rowManager.findRow(item[self.options.index]);
+
+                               responses++;
+
+                               if (row) {
+                                       row.updateData(item).then(function () {
+                                               responses--;
+                                               rows.push(row.getComponent());
+
+                                               if (!responses) {
+                                                       resolve(rows);
+                                               }
+                                       });
+                               } else {
+                                       self.rowManager.addRows(item).then(function (newRows) {
+                                               responses--;
+                                               rows.push(newRows[0].getComponent());
+
+                                               if (!responses) {
+                                                       resolve(rows);
+                                               }
+                                       });
+                               }
+                       });
+               } else {
+                       console.warn("Update Error - No data provided");
+                       reject("Update Error - No data provided");
+               }
+       });
+};
+
+//get row object
+Tabulator.prototype.getRow = function (index) {
+       var row = this.rowManager.findRow(index);
+
+       if (row) {
+               return row.getComponent();
+       } else {
+               console.warn("Find Error - No matching row found:", index);
+               return false;
+       }
+};
+
+//get row object
+Tabulator.prototype.getRowFromPosition = function (position, active) {
+       var row = this.rowManager.getRowFromPosition(position, active);
+
+       if (row) {
+               return row.getComponent();
+       } else {
+               console.warn("Find Error - No matching row found:", position);
+               return false;
+       }
+};
+
+//delete row from table
+Tabulator.prototype.deleteRow = function (index) {
+       var _this29 = this;
+
+       return new Promise(function (resolve, reject) {
+               var self = _this29,
+                   count = 0,
+                   successCount = 0,
+                   foundRows = [];
+
+               function doneCheck() {
+                       count++;
+
+                       if (count == index.length) {
+                               if (successCount) {
+                                       self.rowManager.reRenderInPosition();
+                                       resolve();
+                               }
+                       }
+               }
+
+               if (!Array.isArray(index)) {
+                       index = [index];
+               }
+
+               //find matching rows
+               index.forEach(function (item) {
+                       var row = _this29.rowManager.findRow(item, true);
+
+                       if (row) {
+                               foundRows.push(row);
+                       } else {
+                               console.warn("Delete Error - No matching row found:", item);
+                               reject("Delete Error - No matching row found");
+                               doneCheck();
+                       }
+               });
+
+               //sort rows into correct order to ensure smooth delete from table
+               foundRows.sort(function (a, b) {
+                       return _this29.rowManager.rows.indexOf(a) > _this29.rowManager.rows.indexOf(b) ? 1 : -1;
+               });
+
+               foundRows.forEach(function (row) {
+                       row.delete().then(function () {
+                               successCount++;
+                               doneCheck();
+                       }).catch(function (err) {
+                               doneCheck();
+                               reject(err);
+                       });
+               });
+       });
+};
+
+//add row to table
+Tabulator.prototype.addRow = function (data, pos, index) {
+       var _this30 = this;
+
+       return new Promise(function (resolve, reject) {
+               if (typeof data === "string") {
+                       data = JSON.parse(data);
+               }
+
+               _this30.rowManager.addRows(data, pos, index).then(function (rows) {
+                       //recalc column calculations if present
+                       if (_this30.modExists("columnCalcs")) {
+                               _this30.modules.columnCalcs.recalc(_this30.rowManager.activeRows);
+                       }
+
+                       resolve(rows[0].getComponent());
+               });
+       });
+};
+
+//update a row if it exitsts otherwise create it
+Tabulator.prototype.updateOrAddRow = function (index, data) {
+       var _this31 = this;
+
+       return new Promise(function (resolve, reject) {
+               var row = _this31.rowManager.findRow(index);
+
+               if (typeof data === "string") {
+                       data = JSON.parse(data);
+               }
+
+               if (row) {
+                       row.updateData(data).then(function () {
+                               //recalc column calculations if present
+                               if (_this31.modExists("columnCalcs")) {
+                                       _this31.modules.columnCalcs.recalc(_this31.rowManager.activeRows);
+                               }
+
+                               resolve(row.getComponent());
+                       }).catch(function (err) {
+                               reject(err);
+                       });
+               } else {
+                       row = _this31.rowManager.addRows(data).then(function (rows) {
+                               //recalc column calculations if present
+                               if (_this31.modExists("columnCalcs")) {
+                                       _this31.modules.columnCalcs.recalc(_this31.rowManager.activeRows);
+                               }
+
+                               resolve(rows[0].getComponent());
+                       }).catch(function (err) {
+                               reject(err);
+                       });
+               }
+       });
+};
+
+//update row data
+Tabulator.prototype.updateRow = function (index, data) {
+       var _this32 = this;
+
+       return new Promise(function (resolve, reject) {
+               var row = _this32.rowManager.findRow(index);
+
+               if (typeof data === "string") {
+                       data = JSON.parse(data);
+               }
+
+               if (row) {
+                       row.updateData(data).then(function () {
+                               resolve(row.getComponent());
+                       }).catch(function (err) {
+                               reject(err);
+                       });
+               } else {
+                       console.warn("Update Error - No matching row found:", index);
+                       reject("Update Error - No matching row found");
+               }
+       });
+};
+
+//scroll to row in DOM
+Tabulator.prototype.scrollToRow = function (index, position, ifVisible) {
+       var _this33 = this;
+
+       return new Promise(function (resolve, reject) {
+               var row = _this33.rowManager.findRow(index);
+
+               if (row) {
+                       _this33.rowManager.scrollToRow(row, position, ifVisible).then(function () {
+                               resolve();
+                       }).catch(function (err) {
+                               reject(err);
+                       });
+               } else {
+                       console.warn("Scroll Error - No matching row found:", index);
+                       reject("Scroll Error - No matching row found");
+               }
+       });
+};
+
+Tabulator.prototype.moveRow = function (from, to, after) {
+       var fromRow = this.rowManager.findRow(from);
+
+       if (fromRow) {
+               fromRow.moveToRow(to, after);
+       } else {
+               console.warn("Move Error - No matching row found:", from);
+       }
+};
+
+Tabulator.prototype.getRows = function (active) {
+
+       if (active === true) {
+               console.warn("passing a boolean to the getRows function is deprecated, you should now pass the string 'active'");
+               active = "active";
+       }
+
+       return this.rowManager.getComponents(active);
+};
+
+//get position of row in table
+Tabulator.prototype.getRowPosition = function (index, active) {
+       var row = this.rowManager.findRow(index);
+
+       if (row) {
+               return this.rowManager.getRowPosition(row, active);
+       } else {
+               console.warn("Position Error - No matching row found:", index);
+               return false;
+       }
+};
+
+//copy table data to clipboard
+Tabulator.prototype.copyToClipboard = function (selector) {
+       if (this.modExists("clipboard", true)) {
+               this.modules.clipboard.copy(selector);
+       }
+};
+
+/////////////// Column Functions  ///////////////
+
+Tabulator.prototype.setColumns = function (definition) {
+       this.columnManager.setColumns(definition);
+};
+
+Tabulator.prototype.getColumns = function (structured) {
+       return this.columnManager.getComponents(structured);
+};
+
+Tabulator.prototype.getColumn = function (field) {
+       var col = this.columnManager.findColumn(field);
+
+       if (col) {
+               return col.getComponent();
+       } else {
+               console.warn("Find Error - No matching column found:", field);
+               return false;
+       }
+};
+
+Tabulator.prototype.getColumnDefinitions = function () {
+       return this.columnManager.getDefinitionTree();
+};
+
+Tabulator.prototype.getColumnLayout = function () {
+       if (this.modExists("persistence", true)) {
+               return this.modules.persistence.parseColumns(this.columnManager.getColumns());
+       }
+};
+
+Tabulator.prototype.setColumnLayout = function (layout) {
+       if (this.modExists("persistence", true)) {
+               this.columnManager.setColumns(this.modules.persistence.mergeDefinition(this.options.columns, layout));
+               return true;
+       }
+       return false;
+};
+
+Tabulator.prototype.showColumn = function (field) {
+       var column = this.columnManager.findColumn(field);
+
+       if (column) {
+               column.show();
+
+               if (this.options.responsiveLayout && this.modExists("responsiveLayout", true)) {
+                       this.modules.responsiveLayout.update();
+               }
+       } else {
+               console.warn("Column Show Error - No matching column found:", field);
+               return false;
+       }
+};
+
+Tabulator.prototype.hideColumn = function (field) {
+       var column = this.columnManager.findColumn(field);
+
+       if (column) {
+               column.hide();
+
+               if (this.options.responsiveLayout && this.modExists("responsiveLayout", true)) {
+                       this.modules.responsiveLayout.update();
+               }
+       } else {
+               console.warn("Column Hide Error - No matching column found:", field);
+               return false;
+       }
+};
+
+Tabulator.prototype.toggleColumn = function (field) {
+       var column = this.columnManager.findColumn(field);
+
+       if (column) {
+               if (column.visible) {
+                       column.hide();
+               } else {
+                       column.show();
+               }
+       } else {
+               console.warn("Column Visibility Toggle Error - No matching column found:", field);
+               return false;
+       }
+};
+
+Tabulator.prototype.addColumn = function (definition, before, field) {
+       var _this34 = this;
+
+       return new Promise(function (resolve, reject) {
+               var column = _this34.columnManager.findColumn(field);
+
+               _this34.columnManager.addColumn(definition, before, column).then(function (column) {
+                       resolve(column.getComponent());
+               }).catch(function (err) {
+                       reject(err);
+               });
+       });
+};
+
+Tabulator.prototype.deleteColumn = function (field) {
+       var _this35 = this;
+
+       return new Promise(function (resolve, reject) {
+               var column = _this35.columnManager.findColumn(field);
+
+               if (column) {
+                       column.delete().then(function () {
+                               resolve();
+                       }).catch(function (err) {
+                               reject(err);
+                       });
+               } else {
+                       console.warn("Column Delete Error - No matching column found:", field);
+                       reject();
+               }
+       });
+};
+
+Tabulator.prototype.updateColumnDefinition = function (field, definition) {
+       var _this36 = this;
+
+       return new Promise(function (resolve, reject) {
+               var column = _this36.columnManager.findColumn(field);
+
+               if (column) {
+                       column.updateDefinition(definition).then(function (col) {
+                               resolve(col);
+                       }).catch(function (err) {
+                               reject(err);
+                       });
+               } else {
+                       console.warn("Column Update Error - No matching column found:", field);
+                       reject();
+               }
+       });
+};
+
+Tabulator.prototype.moveColumn = function (from, to, after) {
+       var fromColumn = this.columnManager.findColumn(from);
+       var toColumn = this.columnManager.findColumn(to);
+
+       if (fromColumn) {
+               if (toColumn) {
+                       this.columnManager.moveColumn(fromColumn, toColumn, after);
+               } else {
+                       console.warn("Move Error - No matching column found:", toColumn);
+               }
+       } else {
+               console.warn("Move Error - No matching column found:", from);
+       }
+};
+
+//scroll to column in DOM
+Tabulator.prototype.scrollToColumn = function (field, position, ifVisible) {
+       var _this37 = this;
+
+       return new Promise(function (resolve, reject) {
+               var column = _this37.columnManager.findColumn(field);
+
+               if (column) {
+                       _this37.columnManager.scrollToColumn(column, position, ifVisible).then(function () {
+                               resolve();
+                       }).catch(function (err) {
+                               reject(err);
+                       });
+               } else {
+                       console.warn("Scroll Error - No matching column found:", field);
+                       reject("Scroll Error - No matching column found");
+               }
+       });
+};
+
+//////////// Localization Functions  ////////////
+Tabulator.prototype.setLocale = function (locale) {
+       this.modules.localize.setLocale(locale);
+};
+
+Tabulator.prototype.getLocale = function () {
+       return this.modules.localize.getLocale();
+};
+
+Tabulator.prototype.getLang = function (locale) {
+       return this.modules.localize.getLang(locale);
+};
+
+//////////// General Public Functions ////////////
+
+//redraw list without updating data
+Tabulator.prototype.redraw = function (force) {
+       this.columnManager.redraw(force);
+       this.rowManager.redraw(force);
+};
+
+Tabulator.prototype.setHeight = function (height) {
+
+       if (this.rowManager.renderMode !== "classic") {
+               this.options.height = isNaN(height) ? height : height + "px";
+               this.element.style.height = this.options.height;
+               this.rowManager.setRenderMode();
+               this.rowManager.redraw();
+       } else {
+               console.warn("setHeight function is not available in classic render mode");
+       }
+};
+
+///////////////////// Sorting ////////////////////
+
+//trigger sort
+Tabulator.prototype.setSort = function (sortList, dir) {
+       if (this.modExists("sort", true)) {
+               this.modules.sort.setSort(sortList, dir);
+               this.rowManager.sorterRefresh();
+       }
+};
+
+Tabulator.prototype.getSorters = function () {
+       if (this.modExists("sort", true)) {
+               return this.modules.sort.getSort();
+       }
+};
+
+Tabulator.prototype.clearSort = function () {
+       if (this.modExists("sort", true)) {
+               this.modules.sort.clear();
+               this.rowManager.sorterRefresh();
+       }
+};
+
+///////////////////// Filtering ////////////////////
+
+//set standard filters
+Tabulator.prototype.setFilter = function (field, type, value, params) {
+       if (this.modExists("filter", true)) {
+               this.modules.filter.setFilter(field, type, value, params);
+               this.rowManager.filterRefresh();
+       }
+};
+
+//add filter to array
+Tabulator.prototype.addFilter = function (field, type, value, params) {
+       if (this.modExists("filter", true)) {
+               this.modules.filter.addFilter(field, type, value, params);
+               this.rowManager.filterRefresh();
+       }
+};
+
+//get all filters
+Tabulator.prototype.getFilters = function (all) {
+       if (this.modExists("filter", true)) {
+               return this.modules.filter.getFilters(all);
+       }
+};
+
+Tabulator.prototype.setHeaderFilterFocus = function (field) {
+       if (this.modExists("filter", true)) {
+               var column = this.columnManager.findColumn(field);
+
+               if (column) {
+                       this.modules.filter.setHeaderFilterFocus(column);
+               } else {
+                       console.warn("Column Filter Focus Error - No matching column found:", field);
+                       return false;
+               }
+       }
+};
+
+Tabulator.prototype.getHeaderFilterValue = function (field) {
+       if (this.modExists("filter", true)) {
+               var column = this.columnManager.findColumn(field);
+
+               if (column) {
+                       return this.modules.filter.getHeaderFilterValue(column);
+               } else {
+                       console.warn("Column Filter Error - No matching column found:", field);
+               }
+       }
+};
+
+Tabulator.prototype.setHeaderFilterValue = function (field, value) {
+       if (this.modExists("filter", true)) {
+               var column = this.columnManager.findColumn(field);
+
+               if (column) {
+                       this.modules.filter.setHeaderFilterValue(column, value);
+               } else {
+                       console.warn("Column Filter Error - No matching column found:", field);
+                       return false;
+               }
+       }
+};
+
+Tabulator.prototype.getHeaderFilters = function () {
+       if (this.modExists("filter", true)) {
+               return this.modules.filter.getHeaderFilters();
+       }
+};
+
+//remove filter from array
+Tabulator.prototype.removeFilter = function (field, type, value) {
+       if (this.modExists("filter", true)) {
+               this.modules.filter.removeFilter(field, type, value);
+               this.rowManager.filterRefresh();
+       }
+};
+
+//clear filters
+Tabulator.prototype.clearFilter = function (all) {
+       if (this.modExists("filter", true)) {
+               this.modules.filter.clearFilter(all);
+               this.rowManager.filterRefresh();
+       }
+};
+
+//clear header filters
+Tabulator.prototype.clearHeaderFilter = function () {
+       if (this.modExists("filter", true)) {
+               this.modules.filter.clearHeaderFilter();
+               this.rowManager.filterRefresh();
+       }
+};
+
+///////////////////// select ////////////////////
+Tabulator.prototype.selectRow = function (rows) {
+       if (this.modExists("selectRow", true)) {
+               if (rows === true) {
+                       console.warn("passing a boolean to the selectRowselectRow function is deprecated, you should now pass the string 'active'");
+                       rows = "active";
+               }
+               this.modules.selectRow.selectRows(rows);
+       }
+};
+
+Tabulator.prototype.deselectRow = function (rows) {
+       if (this.modExists("selectRow", true)) {
+               this.modules.selectRow.deselectRows(rows);
+       }
+};
+
+Tabulator.prototype.toggleSelectRow = function (row) {
+       if (this.modExists("selectRow", true)) {
+               this.modules.selectRow.toggleRow(row);
+       }
+};
+
+Tabulator.prototype.getSelectedRows = function () {
+       if (this.modExists("selectRow", true)) {
+               return this.modules.selectRow.getSelectedRows();
+       }
+};
+
+Tabulator.prototype.getSelectedData = function () {
+       if (this.modExists("selectRow", true)) {
+               return this.modules.selectRow.getSelectedData();
+       }
+};
+
+///////////////////// validation  ////////////////////
+Tabulator.prototype.getInvalidCells = function () {
+       if (this.modExists("validate", true)) {
+               return this.modules.validate.getInvalidCells();
+       }
+};
+
+Tabulator.prototype.clearCellValidation = function (cells) {
+       var _this38 = this;
+
+       if (this.modExists("validate", true)) {
+
+               if (!cells) {
+                       cells = this.modules.validate.getInvalidCells();
+               }
+
+               if (!Array.isArray(cells)) {
+                       cells = [cells];
+               }
+
+               cells.forEach(function (cell) {
+                       _this38.modules.validate.clearValidation(cell._getSelf());
+               });
+       }
+};
+
+Tabulator.prototype.validate = function (cells) {
+       var output = [];
+
+       //clear row data
+       this.rowManager.rows.forEach(function (row) {
+               var valid = row.validate();
+
+               if (valid !== true) {
+                       output = output.concat(valid);
+               }
+       });
+
+       return output.length ? output : true;
+};
+
+//////////// Pagination Functions  ////////////
+
+Tabulator.prototype.setMaxPage = function (max) {
+       if (this.options.pagination && this.modExists("page")) {
+               this.modules.page.setMaxPage(max);
+       } else {
+               return false;
+       }
+};
+
+Tabulator.prototype.setPage = function (page) {
+       if (this.options.pagination && this.modExists("page")) {
+               return this.modules.page.setPage(page);
+       } else {
+               return new Promise(function (resolve, reject) {
+                       reject();
+               });
+       }
+};
+
+Tabulator.prototype.setPageToRow = function (row) {
+       var _this39 = this;
+
+       return new Promise(function (resolve, reject) {
+               if (_this39.options.pagination && _this39.modExists("page")) {
+                       row = _this39.rowManager.findRow(row);
+
+                       if (row) {
+                               _this39.modules.page.setPageToRow(row).then(function () {
+                                       resolve();
+                               }).catch(function () {
+                                       reject();
+                               });
+                       } else {
+                               reject();
+                       }
+               } else {
+                       reject();
+               }
+       });
+};
+
+Tabulator.prototype.setPageSize = function (size) {
+       if (this.options.pagination && this.modExists("page")) {
+               this.modules.page.setPageSize(size);
+               this.modules.page.setPage(1).then(function () {}).catch(function () {});
+       } else {
+               return false;
+       }
+};
+
+Tabulator.prototype.getPageSize = function () {
+       if (this.options.pagination && this.modExists("page", true)) {
+               return this.modules.page.getPageSize();
+       }
+};
+
+Tabulator.prototype.previousPage = function () {
+       if (this.options.pagination && this.modExists("page")) {
+               this.modules.page.previousPage();
+       } else {
+               return false;
+       }
+};
+
+Tabulator.prototype.nextPage = function () {
+       if (this.options.pagination && this.modExists("page")) {
+               this.modules.page.nextPage();
+       } else {
+               return false;
+       }
+};
+
+Tabulator.prototype.getPage = function () {
+       if (this.options.pagination && this.modExists("page")) {
+               return this.modules.page.getPage();
+       } else {
+               return false;
+       }
+};
+
+Tabulator.prototype.getPageMax = function () {
+       if (this.options.pagination && this.modExists("page")) {
+               return this.modules.page.getPageMax();
+       } else {
+               return false;
+       }
+};
+
+///////////////// Grouping Functions ///////////////
+
+Tabulator.prototype.setGroupBy = function (groups) {
+       if (this.modExists("groupRows", true)) {
+               this.options.groupBy = groups;
+               this.modules.groupRows.initialize();
+               this.rowManager.refreshActiveData("display");
+
+               if (this.options.persistence && this.modExists("persistence", true) && this.modules.persistence.config.group) {
+                       this.modules.persistence.save("group");
+               }
+       } else {
+               return false;
+       }
+};
+
+Tabulator.prototype.setGroupValues = function (groupValues) {
+       if (this.modExists("groupRows", true)) {
+               this.options.groupValues = groupValues;
+               this.modules.groupRows.initialize();
+               this.rowManager.refreshActiveData("display");
+
+               if (this.options.persistence && this.modExists("persistence", true) && this.modules.persistence.config.group) {
+                       this.modules.persistence.save("group");
+               }
+       } else {
+               return false;
+       }
+};
+
+Tabulator.prototype.setGroupStartOpen = function (values) {
+       if (this.modExists("groupRows", true)) {
+               this.options.groupStartOpen = values;
+               this.modules.groupRows.initialize();
+               if (this.options.groupBy) {
+                       this.rowManager.refreshActiveData("group");
+
+                       if (this.options.persistence && this.modExists("persistence", true) && this.modules.persistence.config.group) {
+                               this.modules.persistence.save("group");
+                       }
+               } else {
+                       console.warn("Grouping Update - cant refresh view, no groups have been set");
+               }
+       } else {
+               return false;
+       }
+};
+
+Tabulator.prototype.setGroupHeader = function (values) {
+       if (this.modExists("groupRows", true)) {
+               this.options.groupHeader = values;
+               this.modules.groupRows.initialize();
+               if (this.options.groupBy) {
+                       this.rowManager.refreshActiveData("group");
+
+                       if (this.options.persistence && this.modExists("persistence", true) && this.modules.persistence.config.group) {
+                               this.modules.persistence.save("group");
+                       }
+               } else {
+                       console.warn("Grouping Update - cant refresh view, no groups have been set");
+               }
+       } else {
+               return false;
+       }
+};
+
+Tabulator.prototype.getGroups = function (values) {
+       if (this.modExists("groupRows", true)) {
+               return this.modules.groupRows.getGroups(true);
+       } else {
+               return false;
+       }
+};
+
+// get grouped table data in the same format as getData()
+Tabulator.prototype.getGroupedData = function () {
+       if (this.modExists("groupRows", true)) {
+               return this.options.groupBy ? this.modules.groupRows.getGroupedData() : this.getData();
+       }
+};
+
+Tabulator.prototype.getEditedCells = function () {
+       if (this.modExists("edit", true)) {
+               return this.modules.edit.getEditedCells();
+       }
+};
+
+Tabulator.prototype.clearCellEdited = function (cells) {
+       var _this40 = this;
+
+       if (this.modExists("edit", true)) {
+
+               if (!cells) {
+                       cells = this.modules.edit.getEditedCells();
+               }
+
+               if (!Array.isArray(cells)) {
+                       cells = [cells];
+               }
+
+               cells.forEach(function (cell) {
+                       _this40.modules.edit.clearEdited(cell._getSelf());
+               });
+       }
+};
+
+///////////////// Column Calculation Functions ///////////////
+Tabulator.prototype.getCalcResults = function () {
+       if (this.modExists("columnCalcs", true)) {
+               return this.modules.columnCalcs.getResults();
+       } else {
+               return false;
+       }
+};
+
+Tabulator.prototype.recalc = function () {
+       if (this.modExists("columnCalcs", true)) {
+               this.modules.columnCalcs.recalcAll(this.rowManager.activeRows);
+       }
+};
+
+/////////////// Navigation Management //////////////
+
+Tabulator.prototype.navigatePrev = function () {
+       var cell = false;
+
+       if (this.modExists("edit", true)) {
+               cell = this.modules.edit.currentCell;
+
+               if (cell) {
+                       return cell.nav().prev();
+               }
+       }
+
+       return false;
+};
+
+Tabulator.prototype.navigateNext = function () {
+       var cell = false;
+
+       if (this.modExists("edit", true)) {
+               cell = this.modules.edit.currentCell;
+
+               if (cell) {
+                       return cell.nav().next();
+               }
+       }
+
+       return false;
+};
+
+Tabulator.prototype.navigateLeft = function () {
+       var cell = false;
+
+       if (this.modExists("edit", true)) {
+               cell = this.modules.edit.currentCell;
+
+               if (cell) {
+                       e.preventDefault();
+                       return cell.nav().left();
+               }
+       }
+
+       return false;
+};
+
+Tabulator.prototype.navigateRight = function () {
+       var cell = false;
+
+       if (this.modExists("edit", true)) {
+               cell = this.modules.edit.currentCell;
+
+               if (cell) {
+                       e.preventDefault();
+                       return cell.nav().right();
+               }
+       }
+
+       return false;
+};
+
+Tabulator.prototype.navigateUp = function () {
+       var cell = false;
+
+       if (this.modExists("edit", true)) {
+               cell = this.modules.edit.currentCell;
+
+               if (cell) {
+                       e.preventDefault();
+                       return cell.nav().up();
+               }
+       }
+
+       return false;
+};
+
+Tabulator.prototype.navigateDown = function () {
+       var cell = false;
+
+       if (this.modExists("edit", true)) {
+               cell = this.modules.edit.currentCell;
+
+               if (cell) {
+                       e.preventDefault();
+                       return cell.nav().down();
+               }
+       }
+
+       return false;
+};
+
+/////////////// History Management //////////////
+Tabulator.prototype.undo = function () {
+       if (this.options.history && this.modExists("history", true)) {
+               return this.modules.history.undo();
+       } else {
+               return false;
+       }
+};
+
+Tabulator.prototype.redo = function () {
+       if (this.options.history && this.modExists("history", true)) {
+               return this.modules.history.redo();
+       } else {
+               return false;
+       }
+};
+
+Tabulator.prototype.getHistoryUndoSize = function () {
+       if (this.options.history && this.modExists("history", true)) {
+               return this.modules.history.getHistoryUndoSize();
+       } else {
+               return false;
+       }
+};
+
+Tabulator.prototype.getHistoryRedoSize = function () {
+       if (this.options.history && this.modExists("history", true)) {
+               return this.modules.history.getHistoryRedoSize();
+       } else {
+               return false;
+       }
+};
+
+/////////////// Download Management //////////////
+
+Tabulator.prototype.download = function (type, filename, options, active) {
+       if (this.modExists("download", true)) {
+               this.modules.download.download(type, filename, options, active);
+       }
+};
+
+Tabulator.prototype.downloadToTab = function (type, filename, options, active) {
+       if (this.modExists("download", true)) {
+               this.modules.download.download(type, filename, options, active, true);
+       }
+};
+
+/////////// Inter Table Communications ///////////
+
+Tabulator.prototype.tableComms = function (table, module, action, data) {
+       this.modules.comms.receive(table, module, action, data);
+};
+
+////////////// Extension Management //////////////
+
+//object to hold module
+Tabulator.prototype.moduleBindings = {};
+
+//extend module
+Tabulator.prototype.extendModule = function (name, property, values) {
+
+       if (Tabulator.prototype.moduleBindings[name]) {
+               var source = Tabulator.prototype.moduleBindings[name].prototype[property];
+
+               if (source) {
+                       if ((typeof values === 'undefined' ? 'undefined' : _typeof(values)) == "object") {
+                               for (var key in values) {
+                                       source[key] = values[key];
+                               }
+                       } else {
+                               console.warn("Module Error - Invalid value type, it must be an object");
+                       }
+               } else {
+                       console.warn("Module Error - property does not exist:", property);
+               }
+       } else {
+               console.warn("Module Error - module does not exist:", name);
+       }
+};
+
+//add module to tabulator
+Tabulator.prototype.registerModule = function (name, module) {
+       var self = this;
+       Tabulator.prototype.moduleBindings[name] = module;
+};
+
+//ensure that module are bound to instantiated function
+Tabulator.prototype.bindModules = function () {
+       this.modules = {};
+
+       for (var name in Tabulator.prototype.moduleBindings) {
+               this.modules[name] = new Tabulator.prototype.moduleBindings[name](this);
+       }
+};
+
+//Check for module
+Tabulator.prototype.modExists = function (plugin, required) {
+       if (this.modules[plugin]) {
+               return true;
+       } else {
+               if (required) {
+                       console.error("Tabulator Module Not Installed: " + plugin);
+               }
+               return false;
+       }
+};
+
+Tabulator.prototype.helpers = {
+
+       elVisible: function elVisible(el) {
+               return !(el.offsetWidth <= 0 && el.offsetHeight <= 0);
+       },
+
+       elOffset: function elOffset(el) {
+               var box = el.getBoundingClientRect();
+
+               return {
+                       top: box.top + window.pageYOffset - document.documentElement.clientTop,
+                       left: box.left + window.pageXOffset - document.documentElement.clientLeft
+               };
+       },
+
+       deepClone: function deepClone(obj) {
+               var clone = Object.assign(Array.isArray(obj) ? [] : {}, obj);
+
+               for (var i in obj) {
+                       if (obj[i] != null && _typeof(obj[i]) === "object") {
+                               if (obj[i] instanceof Date) {
+                                       clone[i] = new Date(obj[i]);
+                               } else {
+                                       clone[i] = this.deepClone(obj[i]);
+                               }
+                       }
+               }
+               return clone;
+       }
+};
+
+Tabulator.prototype.comms = {
+       tables: [],
+       register: function register(table) {
+               Tabulator.prototype.comms.tables.push(table);
+       },
+       deregister: function deregister(table) {
+               var index = Tabulator.prototype.comms.tables.indexOf(table);
+
+               if (index > -1) {
+                       Tabulator.prototype.comms.tables.splice(index, 1);
+               }
+       },
+       lookupTable: function lookupTable(query, silent) {
+               var results = [],
+                   matches,
+                   match;
+
+               if (typeof query === "string") {
+                       matches = document.querySelectorAll(query);
+
+                       if (matches.length) {
+                               for (var i = 0; i < matches.length; i++) {
+                                       match = Tabulator.prototype.comms.matchElement(matches[i]);
+
+                                       if (match) {
+                                               results.push(match);
+                                       }
+                               }
+                       }
+               } else if (typeof HTMLElement !== "undefined" && query instanceof HTMLElement || query instanceof Tabulator) {
+                       match = Tabulator.prototype.comms.matchElement(query);
+
+                       if (match) {
+                               results.push(match);
+                       }
+               } else if (Array.isArray(query)) {
+                       query.forEach(function (item) {
+                               results = results.concat(Tabulator.prototype.comms.lookupTable(item));
+                       });
+               } else {
+                       if (!silent) {
+                               console.warn("Table Connection Error - Invalid Selector", query);
+                       }
+               }
+
+               return results;
+       },
+       matchElement: function matchElement(element) {
+               return Tabulator.prototype.comms.tables.find(function (table) {
+                       return element instanceof Tabulator ? table === element : table.element === element;
+               });
+       }
+};
+
+Tabulator.prototype.findTable = function (query) {
+       var results = Tabulator.prototype.comms.lookupTable(query, true);
+       return Array.isArray(results) && !results.length ? false : results;
+};
+
+var Layout = function Layout(table) {
+
+       this.table = table;
+
+       this.mode = null;
+};
+
+//initialize layout system
+
+Layout.prototype.initialize = function (layout) {
+
+       if (this.modes[layout]) {
+
+               this.mode = layout;
+       } else {
+
+               console.warn("Layout Error - invalid mode set, defaulting to 'fitData' : " + layout);
+
+               this.mode = 'fitData';
+       }
+
+       this.table.element.setAttribute("tabulator-layout", this.mode);
+};
+
+Layout.prototype.getMode = function () {
+
+       return this.mode;
+};
+
+//trigger table layout
+
+Layout.prototype.layout = function () {
+
+       this.modes[this.mode].call(this, this.table.columnManager.columnsByIndex);
+};
+
+//layout render functions
+
+Layout.prototype.modes = {
+
+       //resize columns to fit data they contain
+
+       "fitData": function fitData(columns) {
+
+               if (this.table.options.virtualDomHoz) {
+
+                       this.table.vdomHoz.fitDataLayoutOverride();
+               } else {
+
+                       columns.forEach(function (column) {
+
+                               column.reinitializeWidth();
+                       });
+               }
+
+               if (this.table.options.responsiveLayout && this.table.modExists("responsiveLayout", true)) {
+
+                       this.table.modules.responsiveLayout.update();
+               }
+       },
+
+       //resize columns to fit data they contain and stretch row to fill table
+
+       "fitDataFill": function fitDataFill(columns) {
+
+               columns.forEach(function (column) {
+
+                       column.reinitializeWidth();
+               });
+
+               if (this.table.options.responsiveLayout && this.table.modExists("responsiveLayout", true)) {
+
+                       this.table.modules.responsiveLayout.update();
+               }
+       },
+
+       //resize columns to fit data they contain
+
+       "fitDataTable": function fitDataTable(columns) {
+
+               columns.forEach(function (column) {
+
+                       column.reinitializeWidth();
+               });
+
+               if (this.table.options.responsiveLayout && this.table.modExists("responsiveLayout", true)) {
+
+                       this.table.modules.responsiveLayout.update();
+               }
+       },
+
+       //resize columns to fit data the contain and stretch last column to fill table
+
+       "fitDataStretch": function fitDataStretch(columns) {
+               var _this41 = this;
+
+               var colsWidth = 0,
+                   tableWidth = this.table.rowManager.element.clientWidth,
+                   gap = 0,
+                   lastCol = false;
+
+               columns.forEach(function (column, i) {
+
+                       if (!column.widthFixed) {
+
+                               column.reinitializeWidth();
+                       }
+
+                       if (_this41.table.options.responsiveLayout ? column.modules.responsive.visible : column.visible) {
+
+                               lastCol = column;
+                       }
+
+                       if (column.visible) {
+
+                               colsWidth += column.getWidth();
+                       }
+               });
+
+               if (lastCol) {
+
+                       gap = tableWidth - colsWidth + lastCol.getWidth();
+
+                       if (this.table.options.responsiveLayout && this.table.modExists("responsiveLayout", true)) {
+
+                               lastCol.setWidth(0);
+
+                               this.table.modules.responsiveLayout.update();
+                       }
+
+                       if (gap > 0) {
+
+                               lastCol.setWidth(gap);
+                       } else {
+
+                               lastCol.reinitializeWidth();
+                       }
+               } else {
+
+                       if (this.table.options.responsiveLayout && this.table.modExists("responsiveLayout", true)) {
+
+                               this.table.modules.responsiveLayout.update();
+                       }
+               }
+       },
+
+       //resize columns to fit
+
+       "fitColumns": function fitColumns(columns) {
+
+               var self = this;
+
+               var totalWidth = self.table.element.clientWidth; //table element width
+
+               var fixedWidth = 0; //total width of columns with a defined width
+
+               var flexWidth = 0; //total width available to flexible columns
+
+               var flexGrowUnits = 0; //total number of widthGrow blocks accross all columns
+
+               var flexColWidth = 0; //desired width of flexible columns
+
+               var flexColumns = []; //array of flexible width columns
+
+               var fixedShrinkColumns = []; //array of fixed width columns that can shrink
+
+               var flexShrinkUnits = 0; //total number of widthShrink blocks accross all columns
+
+               var overflowWidth = 0; //horizontal overflow width
+
+               var gapFill = 0; //number of pixels to be added to final column to close and half pixel gaps
+
+
+               function calcWidth(width) {
+
+                       var colWidth;
+
+                       if (typeof width == "string") {
+
+                               if (width.indexOf("%") > -1) {
+
+                                       colWidth = totalWidth / 100 * parseInt(width);
+                               } else {
+
+                                       colWidth = parseInt(width);
+                               }
+                       } else {
+
+                               colWidth = width;
+                       }
+
+                       return colWidth;
+               }
+
+               //ensure columns resize to take up the correct amount of space
+
+               function scaleColumns(columns, freeSpace, colWidth, shrinkCols) {
+
+                       var oversizeCols = [],
+                           oversizeSpace = 0,
+                           remainingSpace = 0,
+                           nextColWidth = 0,
+                           gap = 0,
+                           changeUnits = 0,
+                           undersizeCols = [];
+
+                       function calcGrow(col) {
+
+                               return colWidth * (col.column.definition.widthGrow || 1);
+                       }
+
+                       function calcShrink(col) {
+
+                               return calcWidth(col.width) - colWidth * (col.column.definition.widthShrink || 0);
+                       }
+
+                       columns.forEach(function (col, i) {
+
+                               var width = shrinkCols ? calcShrink(col) : calcGrow(col);
+
+                               if (col.column.minWidth >= width) {
+
+                                       oversizeCols.push(col);
+                               } else {
+
+                                       undersizeCols.push(col);
+
+                                       changeUnits += shrinkCols ? col.column.definition.widthShrink || 1 : col.column.definition.widthGrow || 1;
+                               }
+                       });
+
+                       if (oversizeCols.length) {
+
+                               oversizeCols.forEach(function (col) {
+
+                                       oversizeSpace += shrinkCols ? col.width - col.column.minWidth : col.column.minWidth;
+
+                                       col.width = col.column.minWidth;
+                               });
+
+                               remainingSpace = freeSpace - oversizeSpace;
+
+                               nextColWidth = changeUnits ? Math.floor(remainingSpace / changeUnits) : remainingSpace;
+
+                               gap = remainingSpace - nextColWidth * changeUnits;
+
+                               gap += scaleColumns(undersizeCols, remainingSpace, nextColWidth, shrinkCols);
+                       } else {
+
+                               gap = changeUnits ? freeSpace - Math.floor(freeSpace / changeUnits) * changeUnits : freeSpace;
+
+                               undersizeCols.forEach(function (column) {
+
+                                       column.width = shrinkCols ? calcShrink(column) : calcGrow(column);
+                               });
+                       }
+
+                       return gap;
+               }
+
+               if (this.table.options.responsiveLayout && this.table.modExists("responsiveLayout", true)) {
+
+                       this.table.modules.responsiveLayout.update();
+               }
+
+               //adjust for vertical scrollbar if present
+
+               if (this.table.rowManager.element.scrollHeight > this.table.rowManager.element.clientHeight) {
+
+                       totalWidth -= this.table.rowManager.element.offsetWidth - this.table.rowManager.element.clientWidth;
+               }
+
+               columns.forEach(function (column) {
+
+                       var width, minWidth, colWidth;
+
+                       if (column.visible) {
+
+                               width = column.definition.width;
+
+                               minWidth = parseInt(column.minWidth);
+
+                               if (width) {
+
+                                       colWidth = calcWidth(width);
+
+                                       fixedWidth += colWidth > minWidth ? colWidth : minWidth;
+
+                                       if (column.definition.widthShrink) {
+
+                                               fixedShrinkColumns.push({
+
+                                                       column: column,
+
+                                                       width: colWidth > minWidth ? colWidth : minWidth
+
+                                               });
+
+                                               flexShrinkUnits += column.definition.widthShrink;
+                                       }
+                               } else {
+
+                                       flexColumns.push({
+
+                                               column: column,
+
+                                               width: 0
+
+                                       });
+
+                                       flexGrowUnits += column.definition.widthGrow || 1;
+                               }
+                       }
+               });
+
+               //calculate available space
+
+               flexWidth = totalWidth - fixedWidth;
+
+               //calculate correct column size
+
+               flexColWidth = Math.floor(flexWidth / flexGrowUnits);
+
+               //generate column widths
+
+               var gapFill = scaleColumns(flexColumns, flexWidth, flexColWidth, false);
+
+               //increase width of last column to account for rounding errors
+
+               if (flexColumns.length && gapFill > 0) {
+
+                       flexColumns[flexColumns.length - 1].width += +gapFill;
+               }
+
+               //caculate space for columns to be shrunk into
+
+               flexColumns.forEach(function (col) {
+
+                       flexWidth -= col.width;
+               });
+
+               overflowWidth = Math.abs(gapFill) + flexWidth;
+
+               //shrink oversize columns if there is no available space
+
+               if (overflowWidth > 0 && flexShrinkUnits) {
+
+                       gapFill = scaleColumns(fixedShrinkColumns, overflowWidth, Math.floor(overflowWidth / flexShrinkUnits), true);
+               }
+
+               //decrease width of last column to account for rounding errors
+
+               if (fixedShrinkColumns.length) {
+
+                       fixedShrinkColumns[fixedShrinkColumns.length - 1].width -= gapFill;
+               }
+
+               flexColumns.forEach(function (col) {
+
+                       col.column.setWidth(col.width);
+               });
+
+               fixedShrinkColumns.forEach(function (col) {
+
+                       col.column.setWidth(col.width);
+               });
+       }
+
+};
+
+Tabulator.prototype.registerModule("layout", Layout);
+var Localize = function Localize(table) {
+       this.table = table; //hold Tabulator object
+       this.locale = "default"; //current locale
+       this.lang = false; //current language
+       this.bindings = {}; //update events to call when locale is changed
+       this.langList = {};
+};
+
+Localize.prototype.initialize = function () {
+       this.langList = Tabulator.prototype.helpers.deepClone(this.langs);
+};
+
+//set header placehoder
+Localize.prototype.setHeaderFilterPlaceholder = function (placeholder) {
+       this.langList.default.headerFilters.default = placeholder;
+};
+
+//set header filter placeholder by column
+Localize.prototype.setHeaderFilterColumnPlaceholder = function (column, placeholder) {
+       this.langList.default.headerFilters.columns[column] = placeholder;
+
+       if (this.lang && !this.lang.headerFilters.columns[column]) {
+               this.lang.headerFilters.columns[column] = placeholder;
+       }
+};
+
+//setup a lang description object
+Localize.prototype.installLang = function (locale, lang) {
+       if (this.langList[locale]) {
+               this._setLangProp(this.langList[locale], lang);
+       } else {
+               this.langList[locale] = lang;
+       }
+};
+
+Localize.prototype._setLangProp = function (lang, values) {
+       for (var key in values) {
+               if (lang[key] && _typeof(lang[key]) == "object") {
+                       this._setLangProp(lang[key], values[key]);
+               } else {
+                       lang[key] = values[key];
+               }
+       }
+};
+
+//set current locale
+Localize.prototype.setLocale = function (desiredLocale) {
+       var self = this;
+
+       desiredLocale = desiredLocale || "default";
+
+       //fill in any matching languge values
+       function traverseLang(trans, path) {
+               for (var prop in trans) {
+                       if (_typeof(trans[prop]) == "object") {
+                               if (!path[prop]) {
+                                       path[prop] = {};
+                               }
+                               traverseLang(trans[prop], path[prop]);
+                       } else {
+                               path[prop] = trans[prop];
+                       }
+               }
+       }
+
+       //determing correct locale to load
+       if (desiredLocale === true && navigator.language) {
+               //get local from system
+               desiredLocale = navigator.language.toLowerCase();
+       }
+
+       if (desiredLocale) {
+
+               //if locale is not set, check for matching top level locale else use default
+               if (!self.langList[desiredLocale]) {
+                       var prefix = desiredLocale.split("-")[0];
+
+                       if (self.langList[prefix]) {
+                               console.warn("Localization Error - Exact matching locale not found, using closest match: ", desiredLocale, prefix);
+                               desiredLocale = prefix;
+                       } else {
+                               console.warn("Localization Error - Matching locale not found, using default: ", desiredLocale);
+                               desiredLocale = "default";
+                       }
+               }
+       }
+
+       self.locale = desiredLocale;
+
+       //load default lang template
+       self.lang = Tabulator.prototype.helpers.deepClone(self.langList.default || {});
+
+       if (desiredLocale != "default") {
+               traverseLang(self.langList[desiredLocale], self.lang);
+       }
+
+       self.table.options.localized.call(self.table, self.locale, self.lang);
+
+       self._executeBindings();
+};
+
+//get current locale
+Localize.prototype.getLocale = function (locale) {
+       return self.locale;
+};
+
+//get lang object for given local or current if none provided
+Localize.prototype.getLang = function (locale) {
+       return locale ? this.langList[locale] : this.lang;
+};
+
+//get text for current locale
+Localize.prototype.getText = function (path, value) {
+       var path = value ? path + "|" + value : path,
+           pathArray = path.split("|"),
+           text = this._getLangElement(pathArray, this.locale);
+
+       // if(text === false){
+       //      console.warn("Localization Error - Matching localized text not found for given path: ", path);
+       // }
+
+       return text || "";
+};
+
+//traverse langs object and find localized copy
+Localize.prototype._getLangElement = function (path, locale) {
+       var self = this;
+       var root = self.lang;
+
+       path.forEach(function (level) {
+               var rootPath;
+
+               if (root) {
+                       rootPath = root[level];
+
+                       if (typeof rootPath != "undefined") {
+                               root = rootPath;
+                       } else {
+                               root = false;
+                       }
+               }
+       });
+
+       return root;
+};
+
+//set update binding
+Localize.prototype.bind = function (path, callback) {
+       if (!this.bindings[path]) {
+               this.bindings[path] = [];
+       }
+
+       this.bindings[path].push(callback);
+
+       callback(this.getText(path), this.lang);
+};
+
+//itterate through bindings and trigger updates
+Localize.prototype._executeBindings = function () {
+       var self = this;
+
+       var _loop = function _loop(path) {
+               self.bindings[path].forEach(function (binding) {
+                       binding(self.getText(path), self.lang);
+               });
+       };
+
+       for (var path in self.bindings) {
+               _loop(path);
+       }
+};
+
+//Localized text listings
+Localize.prototype.langs = {
+       "default": { //hold default locale text
+               "groups": {
+                       "item": "item",
+                       "items": "items"
+               },
+               "columns": {},
+               "ajax": {
+                       "loading": "Loading",
+                       "error": "Error"
+               },
+               "pagination": {
+                       "page_size": "Page Size",
+                       "page_title": "Show Page",
+                       "first": "First",
+                       "first_title": "First Page",
+                       "last": "Last",
+                       "last_title": "Last Page",
+                       "prev": "Prev",
+                       "prev_title": "Prev Page",
+                       "next": "Next",
+                       "next_title": "Next Page",
+                       "all": "All"
+               },
+               "headerFilters": {
+                       "default": "filter column...",
+                       "columns": {}
+               }
+       }
+};
+
+Tabulator.prototype.registerModule("localize", Localize);
+var Comms = function Comms(table) {
+       this.table = table;
+};
+
+Comms.prototype.getConnections = function (selectors) {
+       var self = this,
+           connections = [],
+           connection;
+
+       connection = Tabulator.prototype.comms.lookupTable(selectors);
+
+       connection.forEach(function (con) {
+               if (self.table !== con) {
+                       connections.push(con);
+               }
+       });
+
+       return connections;
+};
+
+Comms.prototype.send = function (selectors, module, action, data) {
+       var self = this,
+           connections = this.getConnections(selectors);
+
+       connections.forEach(function (connection) {
+               connection.tableComms(self.table.element, module, action, data);
+       });
+
+       if (!connections.length && selectors) {
+               console.warn("Table Connection Error - No tables matching selector found", selectors);
+       }
+};
+
+Comms.prototype.receive = function (table, module, action, data) {
+       if (this.table.modExists(module)) {
+               return this.table.modules[module].commsReceived(table, action, data);
+       } else {
+               console.warn("Inter-table Comms Error - no such module:", module);
+       }
+};
+
+Tabulator.prototype.registerModule("comms", Comms);
\ No newline at end of file
diff --git a/website/js/vendor/tabulator/js/tabulator_core.min.js b/website/js/vendor/tabulator/js/tabulator_core.min.js
new file mode 100644 (file)
index 0000000..87986ad
--- /dev/null
@@ -0,0 +1,6 @@
+/* Tabulator v4.8.3 (c) Oliver Folkerd */
+"use strict";var _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t};Array.prototype.findIndex||Object.defineProperty(Array.prototype,"findIndex",{value:function(t){if(null==this)throw new TypeError('"this" is null or not defined');var e=Object(this),o=e.length>>>0;if("function"!=typeof t)throw new TypeError("predicate must be a function");for(var i=arguments[1],n=0;n<o;){var l=e[n];if(t.call(i,l,n,e))return n;n++}return-1}}),Array.prototype.find||Object.defineProperty(Array.prototype,"find",{value:function(t){if(null==this)throw new TypeError('"this" is null or not defined');var e=Object(this),o=e.length>>>0;if("function"!=typeof t)throw new TypeError("predicate must be a function");for(var i=arguments[1],n=0;n<o;){var l=e[n];if(t.call(i,l,n,e))return l;n++}}}),String.prototype.includes||(String.prototype.includes=function(t,e){if(t instanceof RegExp)throw TypeError("first argument must not be a RegExp");return void 0===e&&(e=0),-1!==this.indexOf(t,e)}),Array.prototype.includes||Object.defineProperty(Array.prototype,"includes",{value:function(t,e){if(null==this)throw new TypeError('"this" is null or not defined');var o=Object(this),i=o.length>>>0;if(0===i)return!1;for(var n=0|e,l=Math.max(n>=0?n:i-Math.abs(n),0);l<i;){if(function(t,e){return t===e||"number"==typeof t&&"number"==typeof e&&isNaN(t)&&isNaN(e)}(o[l],t))return!0;l++}return!1}}),"function"!=typeof Object.assign&&Object.defineProperty(Object,"assign",{value:function(t,e){if(null===t||void 0===t)throw new TypeError("Cannot convert undefined or null to object");for(var o=Object(t),i=1;i<arguments.length;i++){var n=arguments[i];if(null!==n&&void 0!==n)for(var l in n)Object.prototype.hasOwnProperty.call(n,l)&&(o[l]=n[l])}return o},writable:!0,configurable:!0});var ColumnManager=function(t){this.table=t,this.blockHozScrollEvent=!1,this.headersElement=this.createHeadersElement(),this.element=this.createHeaderElement(),this.rowManager=null,this.columns=[],this.columnsByIndex=[],this.columnsByField={},this.scrollLeft=0,this.element.insertBefore(this.headersElement,this.element.firstChild)};ColumnManager.prototype.createHeadersElement=function(){var t=document.createElement("div");return t.classList.add("tabulator-headers"),t},ColumnManager.prototype.createHeaderElement=function(){var t=document.createElement("div");return t.classList.add("tabulator-header"),this.table.options.headerVisible||t.classList.add("tabulator-header-hidden"),t},ColumnManager.prototype.initialize=function(){},ColumnManager.prototype.setRowManager=function(t){this.rowManager=t},ColumnManager.prototype.getElement=function(){return this.element},ColumnManager.prototype.getHeadersElement=function(){return this.headersElement},ColumnManager.prototype.scrollHorizontal=function(t){var e=0,o=this.element.scrollWidth-this.table.element.clientWidth;this.element.scrollLeft=t,t>o?(e=t-o,this.element.style.marginLeft=-e+"px"):this.element.style.marginLeft=0,this.scrollLeft=t,this.table.modExists("frozenColumns")&&this.table.modules.frozenColumns.scrollHorizontal()},ColumnManager.prototype.generateColumnsFromRowData=function(t){var e,o,i=[],n=this.table.options.autoColumnsDefinitions;if(t&&t.length){e=t[0];for(var l in e){var s={field:l,title:l},a=e[l];switch(void 0===a?"undefined":_typeof(a)){case"undefined":o="string";break;case"boolean":o="boolean";break;case"object":o=Array.isArray(a)?"array":"string";break;default:o=isNaN(a)||""===a?a.match(/((^[0-9]+[a-z]+)|(^[a-z]+[0-9]+))+$/i)?"alphanum":"string":"number"}s.sorter=o,i.push(s)}if(n)switch(void 0===n?"undefined":_typeof(n)){case"function":this.table.options.columns=n.call(this.table,i);break;case"object":Array.isArray(n)?i.forEach(function(t){var e=n.find(function(e){return e.field===t.field});e&&Object.assign(t,e)}):i.forEach(function(t){n[t.field]&&Object.assign(t,n[t.field])}),this.table.options.columns=i}else this.table.options.columns=i;this.setColumns(this.table.options.columns)}},ColumnManager.prototype.setColumns=function(t,e){for(var o=this;o.headersElement.firstChild;)o.headersElement.removeChild(o.headersElement.firstChild);o.columns=[],o.columnsByIndex=[],o.columnsByField={},o.table.modExists("frozenColumns")&&o.table.modules.frozenColumns.reset(),t.forEach(function(t,e){o._addColumn(t)}),o._reIndexColumns(),o.table.options.responsiveLayout&&o.table.modExists("responsiveLayout",!0)&&o.table.modules.responsiveLayout.initialize(),this.table.options.virtualDomHoz&&this.table.vdomHoz.reinitialize(!1,!0),o.redraw(!0)},ColumnManager.prototype._addColumn=function(t,e,o){var i=new Column(t,this),n=i.getElement(),l=o?this.findColumnIndex(o):o;if(o&&l>-1){var s=this.columns.indexOf(o.getTopColumn()),a=o.getElement();e?(this.columns.splice(s,0,i),a.parentNode.insertBefore(n,a)):(this.columns.splice(s+1,0,i),a.parentNode.insertBefore(n,a.nextSibling))}else e?(this.columns.unshift(i),this.headersElement.insertBefore(i.getElement(),this.headersElement.firstChild)):(this.columns.push(i),this.headersElement.appendChild(i.getElement())),i.columnRendered();return i},ColumnManager.prototype.registerColumnField=function(t){t.definition.field&&(this.columnsByField[t.definition.field]=t)},ColumnManager.prototype.registerColumnPosition=function(t){this.columnsByIndex.push(t)},ColumnManager.prototype._reIndexColumns=function(){this.columnsByIndex=[],this.columns.forEach(function(t){t.reRegisterPosition()})},ColumnManager.prototype._verticalAlignHeaders=function(){var t=this,e=0;t.columns.forEach(function(t){var o;t.clearVerticalAlign(),(o=t.getHeight())>e&&(e=o)}),t.columns.forEach(function(o){o.verticalAlign(t.table.options.columnHeaderVertAlign,e)}),t.rowManager.adjustTableSize()},ColumnManager.prototype.findColumn=function(t){var e=this;if("object"!=(void 0===t?"undefined":_typeof(t)))return this.columnsByField[t]||!1;if(t instanceof Column)return t;if(t instanceof ColumnComponent)return t._getSelf()||!1;if("undefined"!=typeof HTMLElement&&t instanceof HTMLElement){return e.columns.find(function(e){return e.element===t})||!1}return!1},ColumnManager.prototype.getColumnByField=function(t){return this.columnsByField[t]},ColumnManager.prototype.getColumnsByFieldRoot=function(t){var e=this,o=[];return Object.keys(this.columnsByField).forEach(function(i){i.split(".")[0]===t&&o.push(e.columnsByField[i])}),o},ColumnManager.prototype.getColumnByIndex=function(t){return this.columnsByIndex[t]},ColumnManager.prototype.getFirstVisibileColumn=function(t){var t=this.columnsByIndex.findIndex(function(t){return t.visible});return t>-1&&this.columnsByIndex[t]},ColumnManager.prototype.getColumns=function(){return this.columns},ColumnManager.prototype.findColumnIndex=function(t){return this.columnsByIndex.findIndex(function(e){return t===e})},ColumnManager.prototype.getRealColumns=function(){return this.columnsByIndex},ColumnManager.prototype.traverse=function(t){this.columnsByIndex.forEach(function(e,o){t(e,o)})},ColumnManager.prototype.getDefinitions=function(t){var e=this,o=[];return e.columnsByIndex.forEach(function(e){(!t||t&&e.visible)&&o.push(e.getDefinition())}),o},ColumnManager.prototype.getDefinitionTree=function(){var t=this,e=[];return t.columns.forEach(function(t){e.push(t.getDefinition(!0))}),e},ColumnManager.prototype.getComponents=function(t){var e=this,o=[];return(t?e.columns:e.columnsByIndex).forEach(function(t){o.push(t.getComponent())}),o},ColumnManager.prototype.getWidth=function(){var t=0;return this.columnsByIndex.forEach(function(e){e.visible&&(t+=e.getWidth())}),t},ColumnManager.prototype.moveColumn=function(t,e,o){this.moveColumnActual(t,e,o),this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.initialize(),this.table.modExists("columnCalcs")&&this.table.modules.columnCalcs.recalc(this.table.rowManager.activeRows),e.element.parentNode.insertBefore(t.element,e.element),o&&e.element.parentNode.insertBefore(e.element,t.element),this._verticalAlignHeaders(),this.table.rowManager.reinitialize()},ColumnManager.prototype.moveColumnActual=function(t,e,o){t.parent.isGroup?this._moveColumnInArray(t.parent.columns,t,e,o):this._moveColumnInArray(this.columns,t,e,o),this._moveColumnInArray(this.columnsByIndex,t,e,o,!0),this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.initialize(),this.table.options.virtualDomHoz&&this.table.vdomHoz.reinitialize(!0),this.table.options.columnMoved&&this.table.options.columnMoved.call(this.table,t.getComponent(),this.table.columnManager.getComponents()),this.table.options.persistence&&this.table.modExists("persistence",!0)&&this.table.modules.persistence.config.columns&&this.table.modules.persistence.save("columns")},ColumnManager.prototype._moveColumnInArray=function(t,e,o,i,n){var l,s=this,a=t.indexOf(e),r=[];a>-1&&(t.splice(a,1),l=t.indexOf(o),l>-1?i&&(l+=1):l=a,t.splice(l,0,e),n&&(this.table.options.dataTree&&this.table.modExists("dataTree",!0)&&this.table.rowManager.rows.forEach(function(t){r=r.concat(s.table.modules.dataTree.getTreeChildren(t,!1,!0))}),r=r.concat(this.table.rowManager.rows),r.forEach(function(t){if(t.cells.length){var e=t.cells.splice(a,1)[0];t.cells.splice(l,0,e)}})))},ColumnManager.prototype.scrollToColumn=function(t,e,o){var i=this,n=0,l=0,s=0,a=t.getElement();return new Promise(function(r,u){if(void 0===e&&(e=i.table.options.scrollToColumnPosition),void 0===o&&(o=i.table.options.scrollToColumnIfVisible),t.visible){switch(e){case"middle":case"center":s=-i.element.clientWidth/2;break;case"right":s=a.clientWidth-i.headersElement.clientWidth}if(!o&&(l=a.offsetLeft)>0&&l+a.offsetWidth<i.element.clientWidth)return!1;n=a.offsetLeft+s,n=Math.max(Math.min(n,i.table.rowManager.element.scrollWidth-i.table.rowManager.element.clientWidth),0),i.table.rowManager.scrollHorizontal(n),i.scrollHorizontal(n),r()}else console.warn("Scroll Error - Column not visible"),u("Scroll Error - Column not visible")})},ColumnManager.prototype.generateCells=function(t){var e=this,o=[];return e.columnsByIndex.forEach(function(e){o.push(e.generateCell(t))}),o},ColumnManager.prototype.getFlexBaseWidth=function(){var t=this,e=t.table.element.clientWidth,o=0;return t.rowManager.element.scrollHeight>t.rowManager.element.clientHeight&&(e-=t.rowManager.element.offsetWidth-t.rowManager.element.clientWidth),this.columnsByIndex.forEach(function(i){var n,l,s;i.visible&&(n=i.definition.width||0,l=void 0===i.minWidth?t.table.options.columnMinWidth:parseInt(i.minWidth),s="string"==typeof n?n.indexOf("%")>-1?e/100*parseInt(n):parseInt(n):n,o+=s>l?s:l)}),o},ColumnManager.prototype.addColumn=function(t,e,o){var i=this;return new Promise(function(n,l){var s=i._addColumn(t,e,o);i._reIndexColumns(),i.table.options.responsiveLayout&&i.table.modExists("responsiveLayout",!0)&&i.table.modules.responsiveLayout.initialize(),i.table.modExists("columnCalcs")&&i.table.modules.columnCalcs.recalc(i.table.rowManager.activeRows),i.redraw(),"fitColumns"!=i.table.modules.layout.getMode()&&s.reinitializeWidth(),i._verticalAlignHeaders(),i.table.rowManager.reinitialize(),i.table.options.virtualDomHoz&&i.table.vdomHoz.reinitialize(),n(s)})},ColumnManager.prototype.deregisterColumn=function(t){var e,o=t.getField();o&&delete this.columnsByField[o],e=this.columnsByIndex.indexOf(t),e>-1&&this.columnsByIndex.splice(e,1),e=this.columns.indexOf(t),e>-1&&this.columns.splice(e,1),this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.initialize(),this._verticalAlignHeaders(),this.redraw()},ColumnManager.prototype.redraw=function(t){t&&(Tabulator.prototype.helpers.elVisible(this.element)&&this._verticalAlignHeaders(),this.table.rowManager.resetScroll(),this.table.rowManager.reinitialize()),["fitColumns","fitDataStretch"].indexOf(this.table.modules.layout.getMode())>-1?this.table.modules.layout.layout():t?this.table.modules.layout.layout():this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.update(),this.table.modExists("frozenColumns")&&this.table.modules.frozenColumns.layout(),this.table.modExists("columnCalcs")&&this.table.modules.columnCalcs.recalc(this.table.rowManager.activeRows),t&&(this.table.options.persistence&&this.table.modExists("persistence",!0)&&this.table.modules.persistence.config.columns&&this.table.modules.persistence.save("columns"),this.table.modExists("columnCalcs")&&this.table.modules.columnCalcs.redraw()),this.table.footerManager.redraw()};var ColumnComponent=function(t){this._column=t,this.type="ColumnComponent"};ColumnComponent.prototype.getElement=function(){return this._column.getElement()},ColumnComponent.prototype.getDefinition=function(){return this._column.getDefinition()},ColumnComponent.prototype.getField=function(){return this._column.getField()},ColumnComponent.prototype.getCells=function(){var t=[];return this._column.cells.forEach(function(e){t.push(e.getComponent())}),t},ColumnComponent.prototype.getVisibility=function(){return console.warn("getVisibility function is deprecated, you should now use the isVisible function"),this._column.visible},ColumnComponent.prototype.isVisible=function(){return this._column.visible},ColumnComponent.prototype.show=function(){this._column.isGroup?this._column.columns.forEach(function(t){t.show()}):this._column.show()},ColumnComponent.prototype.hide=function(){this._column.isGroup?this._column.columns.forEach(function(t){t.hide()}):this._column.hide()},ColumnComponent.prototype.toggle=function(){this._column.visible?this.hide():this.show()},ColumnComponent.prototype.delete=function(){return this._column.delete()},ColumnComponent.prototype.getSubColumns=function(){var t=[];return this._column.columns.length&&this._column.columns.forEach(function(e){t.push(e.getComponent())}),t},ColumnComponent.prototype.getParentColumn=function(){return this._column.parent instanceof Column&&this._column.parent.getComponent()},ColumnComponent.prototype._getSelf=function(){return this._column},ColumnComponent.prototype.scrollTo=function(){return this._column.table.columnManager.scrollToColumn(this._column)},ColumnComponent.prototype.getTable=function(){return this._column.table},ColumnComponent.prototype.headerFilterFocus=function(){this._column.table.modExists("filter",!0)&&this._column.table.modules.filter.setHeaderFilterFocus(this._column)},ColumnComponent.prototype.reloadHeaderFilter=function(){this._column.table.modExists("filter",!0)&&this._column.table.modules.filter.reloadHeaderFilter(this._column)},ColumnComponent.prototype.getHeaderFilterValue=function(){if(this._column.table.modExists("filter",!0))return this._column.table.modules.filter.getHeaderFilterValue(this._column)},ColumnComponent.prototype.setHeaderFilterValue=function(t){this._column.table.modExists("filter",!0)&&this._column.table.modules.filter.setHeaderFilterValue(this._column,t)},ColumnComponent.prototype.move=function(t,e){var o=this._column.table.columnManager.findColumn(t);o?this._column.table.columnManager.moveColumn(this._column,o,e):console.warn("Move Error - No matching column found:",o)},ColumnComponent.prototype.getNextColumn=function(){var t=this._column.nextColumn();return!!t&&t.getComponent()},ColumnComponent.prototype.getPrevColumn=function(){var t=this._column.prevColumn();return!!t&&t.getComponent()},ColumnComponent.prototype.updateDefinition=function(t){return this._column.updateDefinition(t)},ColumnComponent.prototype.getWidth=function(){return this._column.getWidth()},ColumnComponent.prototype.setWidth=function(t){var e;return e=!0===t?this._column.reinitializeWidth(!0):this._column.setWidth(t),this._column.table.options.virtualDomHoz&&this._column.table.vdomHoz.reinitialize(!0),e},ColumnComponent.prototype.validate=function(){return this._column.validate()};var Column=function t(e,o){var i=this;this.table=o.table,this.definition=e,this.parent=o,this.type="column",this.columns=[],this.cells=[],this.element=this.createElement(),this.contentElement=!1,this.titleHolderElement=!1,this.titleElement=!1,this.groupElement=this.createGroupElement(),this.isGroup=!1,this.tooltip=!1,this.hozAlign="",this.vertAlign="",this.field="",this.fieldStructure="",this.getFieldValue="",this.setFieldValue="",this.titleFormatterRendered=!1,this.setField(this.definition.field),this.table.options.invalidOptionWarnings&&this.checkDefinition(),this.modules={},this.cellEvents={cellClick:!1,cellDblClick:!1,cellContext:!1,cellTap:!1,cellDblTap:!1,cellTapHold:!1,cellMouseEnter:!1,cellMouseLeave:!1,cellMouseOver:!1,cellMouseOut:!1,cellMouseMove:!1},this.width=null,this.widthStyled="",this.minWidth=null,this.minWidthStyled="",this.widthFixed=!1,this.visible=!0,this.component=null,this._mapDepricatedFunctionality(),e.columns?(this.isGroup=!0,e.columns.forEach(function(e,o){var n=new t(e,i);i.attachColumn(n)}),i.checkColumnVisibility()):o.registerColumnField(this),e.rowHandle&&!1!==this.table.options.movableRows&&this.table.modExists("moveRow")&&this.table.modules.moveRow.setHandle(!0),this._buildHeader(),this.bindModuleColumns()};Column.prototype.createElement=function(){var t=document.createElement("div");return t.classList.add("tabulator-col"),t.setAttribute("role","columnheader"),t.setAttribute("aria-sort","none"),t},Column.prototype.createGroupElement=function(){var t=document.createElement("div");return t.classList.add("tabulator-col-group-cols"),t},Column.prototype.checkDefinition=function(){var t=this;Object.keys(this.definition).forEach(function(e){-1===t.defaultOptionList.indexOf(e)&&console.warn("Invalid column definition option in '"+(t.field||t.definition.title)+"' column:",e)})},Column.prototype.setField=function(t){this.field=t,this.fieldStructure=t?this.table.options.nestedFieldSeparator?t.split(this.table.options.nestedFieldSeparator):[t]:[],this.getFieldValue=this.fieldStructure.length>1?this._getNestedData:this._getFlatData,this.setFieldValue=this.fieldStructure.length>1?this._setNestedData:this._setFlatData},Column.prototype.registerColumnPosition=function(t){this.parent.registerColumnPosition(t)},Column.prototype.registerColumnField=function(t){this.parent.registerColumnField(t)},Column.prototype.reRegisterPosition=function(){this.isGroup?this.columns.forEach(function(t){t.reRegisterPosition()}):this.registerColumnPosition(this)},Column.prototype._mapDepricatedFunctionality=function(){void 0!==this.definition.hideInHtml&&(this.definition.htmlOutput=!this.definition.hideInHtml,console.warn("hideInHtml column definition property is deprecated, you should now use htmlOutput")),void 0!==this.definition.align&&(this.definition.hozAlign=this.definition.align,console.warn("align column definition property is deprecated, you should now use hozAlign")),void 0!==this.definition.downloadTitle&&(this.definition.titleDownload=this.definition.downloadTitle,console.warn("downloadTitle definition property is deprecated, you should now use titleDownload"))},Column.prototype.setTooltip=function(){var t=this,e=t.definition,o=e.headerTooltip||!1===e.tooltip?e.headerTooltip:t.table.options.tooltipsHeader;o?!0===o?e.field?t.table.modules.localize.bind("columns|"+e.field,function(o){t.element.setAttribute("title",o||e.title)}):t.element.setAttribute("title",e.title):("function"==typeof o&&!1===(o=o(t.getComponent()))&&(o=""),t.element.setAttribute("title",o)):t.element.setAttribute("title","")},Column.prototype._buildHeader=function(){for(var t=this,e=t.definition;t.element.firstChild;)t.element.removeChild(t.element.firstChild);e.headerVertical&&(t.element.classList.add("tabulator-col-vertical"),"flip"===e.headerVertical&&t.element.classList.add("tabulator-col-vertical-flip")),t.contentElement=t._bindEvents(),t.contentElement=t._buildColumnHeaderContent(),t.element.appendChild(t.contentElement),t.isGroup?t._buildGroupHeader():t._buildColumnHeader(),t.setTooltip(),t.table.options.resizableColumns&&t.table.modExists("resizeColumns")&&t.table.modules.resizeColumns.initializeColumn("header",t,t.element),e.headerFilter&&t.table.modExists("filter")&&t.table.modExists("edit")&&(void 0!==e.headerFilterPlaceholder&&e.field&&t.table.modules.localize.setHeaderFilterColumnPlaceholder(e.field,e.headerFilterPlaceholder),t.table.modules.filter.initializeColumn(t)),t.table.modExists("frozenColumns")&&t.table.modules.frozenColumns.initializeColumn(t),t.table.options.movableColumns&&!t.isGroup&&t.table.modExists("moveColumn")&&t.table.modules.moveColumn.initializeColumn(t),(e.topCalc||e.bottomCalc)&&t.table.modExists("columnCalcs")&&t.table.modules.columnCalcs.initializeColumn(t),t.table.modExists("persistence")&&t.table.modules.persistence.config.columns&&t.table.modules.persistence.initializeColumn(t),t.element.addEventListener("mouseenter",function(e){t.setTooltip()})},Column.prototype._bindEvents=function(){var t,e,o,i=this,n=i.definition;"function"==typeof n.headerClick&&i.element.addEventListener("click",function(t){n.headerClick(t,i.getComponent())}),"function"==typeof n.headerDblClick&&i.element.addEventListener("dblclick",function(t){n.headerDblClick(t,i.getComponent())}),"function"==typeof n.headerContext&&i.element.addEventListener("contextmenu",function(t){n.headerContext(t,i.getComponent())}),"function"==typeof n.headerTap&&(o=!1,i.element.addEventListener("touchstart",function(t){o=!0},{passive:!0}),i.element.addEventListener("touchend",function(t){o&&n.headerTap(t,i.getComponent()),o=!1})),"function"==typeof n.headerDblTap&&(t=null,i.element.addEventListener("touchend",function(e){t?(clearTimeout(t),t=null,n.headerDblTap(e,i.getComponent())):t=setTimeout(function(){clearTimeout(t),t=null},300)})),"function"==typeof n.headerTapHold&&(e=null,i.element.addEventListener("touchstart",function(t){clearTimeout(e),e=setTimeout(function(){clearTimeout(e),e=null,o=!1,n.headerTapHold(t,i.getComponent())},1e3)},{passive:!0}),i.element.addEventListener("touchend",function(t){clearTimeout(e),e=null})),"function"==typeof n.cellClick&&(i.cellEvents.cellClick=n.cellClick),"function"==typeof n.cellDblClick&&(i.cellEvents.cellDblClick=n.cellDblClick),"function"==typeof n.cellContext&&(i.cellEvents.cellContext=n.cellContext),"function"==typeof n.cellMouseEnter&&(i.cellEvents.cellMouseEnter=n.cellMouseEnter),"function"==typeof n.cellMouseLeave&&(i.cellEvents.cellMouseLeave=n.cellMouseLeave),"function"==typeof n.cellMouseOver&&(i.cellEvents.cellMouseOver=n.cellMouseOver),"function"==typeof n.cellMouseOut&&(i.cellEvents.cellMouseOut=n.cellMouseOut),"function"==typeof n.cellMouseMove&&(i.cellEvents.cellMouseMove=n.cellMouseMove),"function"==typeof n.cellTap&&(i.cellEvents.cellTap=n.cellTap),"function"==typeof n.cellDblTap&&(i.cellEvents.cellDblTap=n.cellDblTap),"function"==typeof n.cellTapHold&&(i.cellEvents.cellTapHold=n.cellTapHold),"function"==typeof n.cellEdited&&(i.cellEvents.cellEdited=n.cellEdited),"function"==typeof n.cellEditing&&(i.cellEvents.cellEditing=n.cellEditing),"function"==typeof n.cellEditCancelled&&(i.cellEvents.cellEditCancelled=n.cellEditCancelled)},Column.prototype._buildColumnHeader=function(){var t=this,e=this.definition,o=this.table;if(o.modExists("sort")&&o.modules.sort.initializeColumn(this,this.titleHolderElement),(e.headerContextMenu||e.headerClickMenu||e.headerMenu)&&o.modExists("menu")&&o.modules.menu.initializeColumnHeader(this),o.modExists("format")&&o.modules.format.initializeColumn(this),void 0!==e.editor&&o.modExists("edit")&&o.modules.edit.initializeColumn(this),void 0!==e.validator&&o.modExists("validate")&&o.modules.validate.initializeColumn(this),o.modExists("mutator")&&o.modules.mutator.initializeColumn(this),o.modExists("accessor")&&o.modules.accessor.initializeColumn(this),_typeof(o.options.responsiveLayout)&&o.modExists("responsiveLayout")&&o.modules.responsiveLayout.initializeColumn(this),void 0!==e.visible&&(e.visible?this.show(!0):this.hide(!0)),e.cssClass){e.cssClass.split(" ").forEach(function(e){t.element.classList.add(e)})}e.field&&this.element.setAttribute("tabulator-field",e.field),this.setMinWidth(void 0===e.minWidth?this.table.options.columnMinWidth:parseInt(e.minWidth)),this.reinitializeWidth(),this.tooltip=this.definition.tooltip||!1===this.definition.tooltip?this.definition.tooltip:this.table.options.tooltips,this.hozAlign=void 0===this.definition.hozAlign?this.table.options.cellHozAlign:this.definition.hozAlign,this.vertAlign=void 0===this.definition.vertAlign?this.table.options.cellVertAlign:this.definition.vertAlign,this.titleElement.style.textAlign=this.definition.headerHozAlign||this.table.options.headerHozAlign},Column.prototype._buildColumnHeaderContent=function(){var t=(this.definition,this.table,document.createElement("div"));return t.classList.add("tabulator-col-content"),this.titleHolderElement=document.createElement("div"),this.titleHolderElement.classList.add("tabulator-col-title-holder"),t.appendChild(this.titleHolderElement),this.titleElement=this._buildColumnHeaderTitle(),this.titleHolderElement.appendChild(this.titleElement),t},Column.prototype._buildColumnHeaderTitle=function(){var t=this,e=t.definition,o=t.table,i=document.createElement("div");if(i.classList.add("tabulator-col-title"),e.editableTitle){var n=document.createElement("input");n.classList.add("tabulator-title-editor"),n.addEventListener("click",function(t){t.stopPropagation(),n.focus()}),n.addEventListener("change",function(){e.title=n.value,o.options.columnTitleChanged.call(t.table,t.getComponent())}),i.appendChild(n),e.field?o.modules.localize.bind("columns|"+e.field,function(t){n.value=t||e.title||"&nbsp;"}):n.value=e.title||"&nbsp;"}else e.field?o.modules.localize.bind("columns|"+e.field,function(o){t._formatColumnHeaderTitle(i,o||e.title||"&nbsp;")}):t._formatColumnHeaderTitle(i,e.title||"&nbsp;");return i},Column.prototype._formatColumnHeaderTitle=function(t,e){var o,i,n,l,s,a=this;if(this.definition.titleFormatter&&this.table.modExists("format"))switch(o=this.table.modules.format.getFormatter(this.definition.titleFormatter),s=function(t){a.titleFormatterRendered=t},l={getValue:function(){return e},getElement:function(){return t}},n=this.definition.titleFormatterParams||{},n="function"==typeof n?n():n,i=o.call(this.table.modules.format,l,n,s),void 0===i?"undefined":_typeof(i)){case"object":i instanceof Node?t.appendChild(i):(t.innerHTML="",console.warn("Format Error - Title formatter has returned a type of object, the only valid formatter object return is an instance of Node, the formatter returned:",i));break;case"undefined":case"null":t.innerHTML="";break;default:t.innerHTML=i}else t.innerHTML=e},Column.prototype._buildGroupHeader=function(){var t=this;if(this.element.classList.add("tabulator-col-group"),this.element.setAttribute("role","columngroup"),this.element.setAttribute("aria-title",this.definition.title),this.definition.cssClass){this.definition.cssClass.split(" ").forEach(function(e){t.element.classList.add(e)})}(this.definition.headerContextMenu||this.definition.headerMenu)&&this.table.modExists("menu")&&this.table.modules.menu.initializeColumnHeader(this),this.element.appendChild(this.groupElement)},Column.prototype._getFlatData=function(t){return t[this.field]},Column.prototype._getNestedData=function(t){for(var e,o=t,i=this.fieldStructure,n=i.length,l=0;l<n&&(o=o[i[l]],e=o,o);l++);return e},Column.prototype._setFlatData=function(t,e){this.field&&(t[this.field]=e)},Column.prototype._setNestedData=function(t,e){for(var o=t,i=this.fieldStructure,n=i.length,l=0;l<n;l++)if(l==n-1)o[i[l]]=e;else{if(!o[i[l]]){if(void 0===e)break;o[i[l]]={}}o=o[i[l]]}},Column.prototype.attachColumn=function(t){var e=this;e.groupElement?(e.columns.push(t),e.groupElement.appendChild(t.getElement())):console.warn("Column Warning - Column being attached to another column instead of column group")},Column.prototype.verticalAlign=function(t,e){var o=this.parent.isGroup?this.parent.getGroupElement().clientHeight:e||this.parent.getHeadersElement().clientHeight;this.element.style.height=o+"px",this.isGroup&&(this.groupElement.style.minHeight=o-this.contentElement.offsetHeight+"px"),this.isGroup||"top"===t||(this.element.style.paddingTop="bottom"===t?this.element.clientHeight-this.contentElement.offsetHeight+"px":(this.element.clientHeight-this.contentElement.offsetHeight)/2+"px"),this.columns.forEach(function(e){e.verticalAlign(t)})},Column.prototype.clearVerticalAlign=function(){this.element.style.paddingTop="",this.element.style.height="",this.element.style.minHeight="",this.groupElement.style.minHeight="",this.columns.forEach(function(t){t.clearVerticalAlign()})},Column.prototype.bindModuleColumns=function(){"rownum"==this.definition.formatter&&(this.table.rowManager.rowNumColumn=this)},Column.prototype.getElement=function(){return this.element},Column.prototype.getGroupElement=function(){return this.groupElement},Column.prototype.getField=function(){return this.field},Column.prototype.getFirstColumn=function(){return this.isGroup?!!this.columns.length&&this.columns[0].getFirstColumn():this},Column.prototype.getLastColumn=function(){return this.isGroup?!!this.columns.length&&this.columns[this.columns.length-1].getLastColumn():this},Column.prototype.getColumns=function(){return this.columns},Column.prototype.getCells=function(){return this.cells},Column.prototype.getTopColumn=function(){return this.parent.isGroup?this.parent.getTopColumn():this},Column.prototype.getDefinition=function(t){var e=[];return this.isGroup&&t&&(this.columns.forEach(function(t){e.push(t.getDefinition(!0))}),this.definition.columns=e),this.definition},Column.prototype.checkColumnVisibility=function(){var t=!1;this.columns.forEach(function(e){e.visible&&(t=!0)}),t?(this.show(),this.parent.table.options.columnVisibilityChanged.call(this.table,this.getComponent(),!1)):this.hide()},Column.prototype.show=function(t,e){this.visible||(this.visible=!0,this.element.style.display="",this.parent.isGroup&&this.parent.checkColumnVisibility(),this.cells.forEach(function(t){t.show()}),this.isGroup||null!==this.width||this.reinitializeWidth(),this.table.columnManager._verticalAlignHeaders(),this.table.options.persistence&&this.table.modExists("persistence",!0)&&this.table.modules.persistence.config.columns&&this.table.modules.persistence.save("columns"),!e&&this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.updateColumnVisibility(this,this.visible),t||this.table.options.columnVisibilityChanged.call(this.table,this.getComponent(),!0),this.parent.isGroup&&this.parent.matchChildWidths())},Column.prototype.hide=function(t,e){this.visible&&(this.visible=!1,this.element.style.display="none",this.table.columnManager._verticalAlignHeaders(),this.parent.isGroup&&this.parent.checkColumnVisibility(),this.cells.forEach(function(t){t.hide()}),this.table.options.persistence&&this.table.modExists("persistence",!0)&&this.table.modules.persistence.config.columns&&this.table.modules.persistence.save("columns"),!e&&this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.updateColumnVisibility(this,this.visible),t||this.table.options.columnVisibilityChanged.call(this.table,this.getComponent(),!1),this.parent.isGroup&&this.parent.matchChildWidths())},Column.prototype.matchChildWidths=function(){var t=0;this.contentElement&&this.columns.length&&(this.columns.forEach(function(e){e.visible&&(t+=e.getWidth())}),this.contentElement.style.maxWidth=t-1+"px",this.parent.isGroup&&this.parent.matchChildWidths())},Column.prototype.setWidth=function(t){this.widthFixed=!0,this.setWidthActual(t)},Column.prototype.setWidthActual=function(t){isNaN(t)&&(t=Math.floor(this.table.element.clientWidth/100*parseInt(t))),t=Math.max(this.minWidth,t),this.width=t,this.widthStyled=t?t+"px":"",this.element.style.width=this.widthStyled,this.isGroup||this.cells.forEach(function(t){
+t.setWidth()}),this.parent.isGroup&&this.parent.matchChildWidths(),this.table.modExists("frozenColumns")&&this.table.modules.frozenColumns.layout()},Column.prototype.checkCellHeights=function(){var t=[];this.cells.forEach(function(e){e.row.heightInitialized&&(null!==e.row.getElement().offsetParent?(t.push(e.row),e.row.clearCellHeight()):e.row.heightInitialized=!1)}),t.forEach(function(t){t.calcHeight()}),t.forEach(function(t){t.setCellHeight()})},Column.prototype.getWidth=function(){var t=0;return this.isGroup?this.columns.forEach(function(e){e.visible&&(t+=e.getWidth())}):t=this.width,t},Column.prototype.getHeight=function(){return this.element.offsetHeight},Column.prototype.setMinWidth=function(t){this.minWidth=t,this.minWidthStyled=t?t+"px":"",this.element.style.minWidth=this.minWidthStyled,this.cells.forEach(function(t){t.setMinWidth()})},Column.prototype.delete=function(){var t=this;return new Promise(function(e,o){t.isGroup&&t.columns.forEach(function(t){t.delete()}),t.table.modExists("edit")&&t.table.modules.edit.currentCell.column===t&&t.table.modules.edit.cancelEdit();for(var i=t.cells.length,n=0;n<i;n++)t.cells[0].delete();t.element.parentNode&&t.element.parentNode.removeChild(t.element),t.element=!1,t.contentElement=!1,t.titleElement=!1,t.groupElement=!1,t.table.columnManager.deregisterColumn(t),t.table.options.virtualDomHoz&&t.table.vdomHoz.reinitialize(!0),e()})},Column.prototype.columnRendered=function(){this.titleFormatterRendered&&this.titleFormatterRendered()},Column.prototype.validate=function(){var t=[];return this.cells.forEach(function(e){e.validate()||t.push(e.getComponent())}),!t.length||t},Column.prototype.generateCell=function(t){var e=this,o=new Cell(e,t);return this.cells.push(o),o},Column.prototype.nextColumn=function(){var t=this.table.columnManager.findColumnIndex(this);return t>-1&&this._nextVisibleColumn(t+1)},Column.prototype._nextVisibleColumn=function(t){var e=this.table.columnManager.getColumnByIndex(t);return!e||e.visible?e:this._nextVisibleColumn(t+1)},Column.prototype.prevColumn=function(){var t=this.table.columnManager.findColumnIndex(this);return t>-1&&this._prevVisibleColumn(t-1)},Column.prototype._prevVisibleColumn=function(t){var e=this.table.columnManager.getColumnByIndex(t);return!e||e.visible?e:this._prevVisibleColumn(t-1)},Column.prototype.reinitializeWidth=function(t){this.widthFixed=!1,void 0===this.definition.width||t||this.setWidth(this.definition.width),this.table.modExists("filter")&&this.table.modules.filter.hideHeaderFilterElements(),this.fitToData(),this.table.modExists("filter")&&this.table.modules.filter.showHeaderFilterElements()},Column.prototype.fitToData=function(){var t=this;this.widthFixed||(this.element.style.width="",t.cells.forEach(function(t){t.clearWidth()}));var e=this.element.offsetWidth;t.width&&this.widthFixed||(t.cells.forEach(function(t){var o=t.getWidth();o>e&&(e=o)}),e&&t.setWidthActual(e+1))},Column.prototype.updateDefinition=function(t){var e=this;return new Promise(function(o,i){var n;e.isGroup?(console.warn("Column Update Error - The updateDefinition function is only available on columns, not column groups"),i("Column Update Error - The updateDefinition function is only available on columns, not column groups")):(n=Object.assign({},e.getDefinition()),n=Object.assign(n,t),e.table.columnManager.addColumn(n,!1,e).then(function(t){n.field==e.field&&(e.field=!1),e.delete().then(function(){o(t.getComponent())}).catch(function(t){i(t)})}).catch(function(t){i(t)}))})},Column.prototype.deleteCell=function(t){var e=this.cells.indexOf(t);e>-1&&this.cells.splice(e,1)},Column.prototype.defaultOptionList=["title","field","columns","visible","align","hozAlign","vertAlign","width","minWidth","widthGrow","widthShrink","resizable","frozen","responsive","tooltip","cssClass","rowHandle","hideInHtml","print","htmlOutput","sorter","sorterParams","formatter","formatterParams","variableHeight","editable","editor","editorParams","validator","mutator","mutatorParams","mutatorData","mutatorDataParams","mutatorEdit","mutatorEditParams","mutatorClipboard","mutatorClipboardParams","accessor","accessorParams","accessorData","accessorDataParams","accessorDownload","accessorDownloadParams","accessorClipboard","accessorClipboardParams","accessorPrint","accessorPrintParams","accessorHtmlOutput","accessorHtmlOutputParams","clipboard","download","downloadTitle","topCalc","topCalcParams","topCalcFormatter","topCalcFormatterParams","bottomCalc","bottomCalcParams","bottomCalcFormatter","bottomCalcFormatterParams","cellClick","cellDblClick","cellContext","cellTap","cellDblTap","cellTapHold","cellMouseEnter","cellMouseLeave","cellMouseOver","cellMouseOut","cellMouseMove","cellEditing","cellEdited","cellEditCancelled","headerSort","headerSortStartingDir","headerSortTristate","headerClick","headerDblClick","headerContext","headerTap","headerDblTap","headerTapHold","headerTooltip","headerVertical","headerHozAlign","editableTitle","titleFormatter","titleFormatterParams","headerFilter","headerFilterPlaceholder","headerFilterParams","headerFilterEmptyCheck","headerFilterFunc","headerFilterFuncParams","headerFilterLiveFilter","print","headerContextMenu","headerMenu","contextMenu","clickMenu","formatterPrint","formatterPrintParams","formatterClipboard","formatterClipboardParams","formatterHtmlOutput","formatterHtmlOutputParams","titlePrint","titleClipboard","titleHtmlOutput","titleDownload"],Column.prototype.getComponent=function(){return this.component||(this.component=new ColumnComponent(this)),this.component};var RowManager=function(t){this.table=t,this.element=this.createHolderElement(),this.tableElement=this.createTableElement(),this.heightFixer=this.createTableElement(),this.columnManager=null,this.height=0,this.firstRender=!1,this.renderMode="virtual",this.fixedHeight=!1,this.rows=[],this.activeRows=[],this.activeRowsCount=0,this.displayRows=[],this.displayRowsCount=0,this.scrollTop=0,this.scrollLeft=0,this.vDomRowHeight=20,this.vDomTop=0,this.vDomBottom=0,this.vDomScrollPosTop=0,this.vDomScrollPosBottom=0,this.vDomTopPad=0,this.vDomBottomPad=0,this.vDomMaxRenderChain=90,this.vDomWindowBuffer=0,this.vDomWindowMinTotalRows=20,this.vDomWindowMinMarginRows=5,this.vDomTopNewRows=[],this.vDomBottomNewRows=[],this.rowNumColumn=!1,this.redrawBlock=!1,this.redrawBlockRestoreConfig=!1,this.redrawBlockRederInPosition=!1};RowManager.prototype.createHolderElement=function(){var t=document.createElement("div");return t.classList.add("tabulator-tableHolder"),t.setAttribute("tabindex",0),t},RowManager.prototype.createTableElement=function(){var t=document.createElement("div");return t.classList.add("tabulator-table"),t},RowManager.prototype.getElement=function(){return this.element},RowManager.prototype.getTableElement=function(){return this.tableElement},RowManager.prototype.getRowPosition=function(t,e){return e?this.activeRows.indexOf(t):this.rows.indexOf(t)},RowManager.prototype.setColumnManager=function(t){this.columnManager=t},RowManager.prototype.initialize=function(){var t=this;t.setRenderMode(),t.element.appendChild(t.tableElement),t.firstRender=!0,t.element.addEventListener("scroll",function(){var e=t.element.scrollLeft;t.scrollLeft!=e&&(t.columnManager.scrollHorizontal(e),t.table.options.groupBy&&t.table.modules.groupRows.scrollHeaders(e),t.table.modExists("columnCalcs")&&t.table.modules.columnCalcs.scrollHorizontal(e),t.table.options.scrollHorizontal(e)),t.scrollLeft=e}),"virtual"===this.renderMode&&t.element.addEventListener("scroll",function(){var e=t.element.scrollTop,o=t.scrollTop>e;t.scrollTop!=e?(t.scrollTop=e,t.scrollVertical(o),"scroll"==t.table.options.ajaxProgressiveLoad&&t.table.modules.ajax.nextPage(t.element.scrollHeight-t.element.clientHeight-e),t.table.options.scrollVertical(e)):t.scrollTop=e})},RowManager.prototype.findRow=function(t){var e=this;if("object"!=(void 0===t?"undefined":_typeof(t))){if(void 0===t||null===t)return!1;return e.rows.find(function(o){return o.data[e.table.options.index]==t})||!1}if(t instanceof Row)return t;if(t instanceof RowComponent)return t._getSelf()||!1;if("undefined"!=typeof HTMLElement&&t instanceof HTMLElement){return e.rows.find(function(e){return e.element===t})||!1}return!1},RowManager.prototype.getRowFromDataObject=function(t){return this.rows.find(function(e){return e.data===t})||!1},RowManager.prototype.getRowFromPosition=function(t,e){return e?this.activeRows[t]:this.rows[t]},RowManager.prototype.scrollToRow=function(t,e,o){var i,n=this,l=this.getDisplayRows().indexOf(t),s=t.getElement(),a=0;return new Promise(function(t,r){if(l>-1){if(void 0===e&&(e=n.table.options.scrollToRowPosition),void 0===o&&(o=n.table.options.scrollToRowIfVisible),"nearest"===e)switch(n.renderMode){case"classic":i=Tabulator.prototype.helpers.elOffset(s).top,e=Math.abs(n.element.scrollTop-i)>Math.abs(n.element.scrollTop+n.element.clientHeight-i)?"bottom":"top";break;case"virtual":e=Math.abs(n.vDomTop-l)>Math.abs(n.vDomBottom-l)?"bottom":"top"}if(!o&&Tabulator.prototype.helpers.elVisible(s)&&(a=Tabulator.prototype.helpers.elOffset(s).top-Tabulator.prototype.helpers.elOffset(n.element).top)>0&&a<n.element.clientHeight-s.offsetHeight)return!1;switch(n.renderMode){case"classic":n.element.scrollTop=Tabulator.prototype.helpers.elOffset(s).top-Tabulator.prototype.helpers.elOffset(n.element).top+n.element.scrollTop;break;case"virtual":n._virtualRenderFill(l,!0)}switch(e){case"middle":case"center":n.element.scrollHeight-n.element.scrollTop==n.element.clientHeight?n.element.scrollTop=n.element.scrollTop+(s.offsetTop-n.element.scrollTop)-(n.element.scrollHeight-s.offsetTop)/2:n.element.scrollTop=n.element.scrollTop-n.element.clientHeight/2;break;case"bottom":n.element.scrollHeight-n.element.scrollTop==n.element.clientHeight?n.element.scrollTop=n.element.scrollTop-(n.element.scrollHeight-s.offsetTop)+s.offsetHeight:n.element.scrollTop=n.element.scrollTop-n.element.clientHeight+s.offsetHeight}t()}else console.warn("Scroll Error - Row not visible"),r("Scroll Error - Row not visible")})},RowManager.prototype.setData=function(t,e,o){var i=this,n=this;return new Promise(function(l,s){e&&i.getDisplayRows().length?n.table.options.pagination?n._setDataActual(t,!0):i.reRenderInPosition(function(){n._setDataActual(t)}):(i.table.options.autoColumns&&o&&i.table.columnManager.generateColumnsFromRowData(t),i.resetScroll(),i._setDataActual(t)),l()})},RowManager.prototype._setDataActual=function(t,e){var o=this;o.table.options.dataLoading.call(this.table,t),this._wipeElements(),this.table.options.history&&this.table.modExists("history")&&this.table.modules.history.clear(),Array.isArray(t)?(this.table.modExists("selectRow")&&this.table.modules.selectRow.clearSelectionData(),this.table.options.reactiveData&&this.table.modExists("reactiveData",!0)&&this.table.modules.reactiveData.watchData(t),t.forEach(function(t,e){if(t&&"object"===(void 0===t?"undefined":_typeof(t))){var i=new Row(t,o);o.rows.push(i)}else console.warn("Data Loading Warning - Invalid row data detected and ignored, expecting object but received:",t)}),o.refreshActiveData(!1,!1,e),o.table.options.dataLoaded.call(this.table,t)):console.error("Data Loading Error - Unable to process data due to invalid data type \nExpecting: array \nReceived: ",void 0===t?"undefined":_typeof(t),"\nData:     ",t)},RowManager.prototype._wipeElements=function(){this.rows.forEach(function(t){t.wipe()}),this.table.options.groupBy&&this.table.modExists("groupRows")&&this.table.modules.groupRows.wipe(),this.rows=[],this.activeRows=[],this.activeRowsCount=0,this.displayRows=[],this.displayRowsCount=0,this.adjustTableSize()},RowManager.prototype.deleteRow=function(t,e){var o=this.rows.indexOf(t),i=this.activeRows.indexOf(t);i>-1&&this.activeRows.splice(i,1),o>-1&&this.rows.splice(o,1),this.setActiveRows(this.activeRows),this.displayRowIterator(function(e){var o=e.indexOf(t);o>-1&&e.splice(o,1)}),e||this.reRenderInPosition(),this.regenerateRowNumbers(),this.table.options.rowDeleted.call(this.table,t.getComponent()),this.table.options.dataChanged&&this.table.options.dataChanged.call(this.table,this.getData()),this.table.options.groupBy&&this.table.modExists("groupRows")?this.table.modules.groupRows.updateGroupRows(!0):this.table.options.pagination&&this.table.modExists("page")?this.refreshActiveData(!1,!1,!0):this.table.options.pagination&&this.table.modExists("page")&&this.refreshActiveData("page")},RowManager.prototype.addRow=function(t,e,o,i){var n=this.addRowActual(t,e,o,i);return this.table.options.history&&this.table.modExists("history")&&this.table.modules.history.action("rowAdd",n,{data:t,pos:e,index:o}),n},RowManager.prototype.addRows=function(t,e,o){var i=this,n=this,l=0,s=[];return new Promise(function(a,r){e=i.findAddRowPos(e),Array.isArray(t)||(t=[t]),l=t.length-1,(void 0===o&&e||void 0!==o&&!e)&&t.reverse(),t.forEach(function(t,i){var l=n.addRow(t,e,o,!0);s.push(l)}),i.table.options.groupBy&&i.table.modExists("groupRows")?i.table.modules.groupRows.updateGroupRows(!0):i.table.options.pagination&&i.table.modExists("page")?i.refreshActiveData(!1,!1,!0):i.reRenderInPosition(),i.table.modExists("columnCalcs")&&i.table.modules.columnCalcs.recalc(i.table.rowManager.activeRows),i.regenerateRowNumbers(),a(s)})},RowManager.prototype.findAddRowPos=function(t){return void 0===t&&(t=this.table.options.addRowPos),"pos"===t&&(t=!0),"bottom"===t&&(t=!1),t},RowManager.prototype.addRowActual=function(t,e,o,i){var n,l,s=t instanceof Row?t:new Row(t||{},this),a=this.findAddRowPos(e),r=-1;if(!o&&this.table.options.pagination&&"page"==this.table.options.paginationAddRow&&(l=this.getDisplayRows(),a?l.length?o=l[0]:this.activeRows.length&&(o=this.activeRows[this.activeRows.length-1],a=!1):l.length&&(o=l[l.length-1],a=!(l.length<this.table.modules.page.getPageSize()))),void 0!==o&&(o=this.findRow(o)),this.table.options.groupBy&&this.table.modExists("groupRows")){this.table.modules.groupRows.assignRowToGroup(s);var u=s.getGroup().rows;u.length>1&&(!o||o&&-1==u.indexOf(o)?a?u[0]!==s&&(o=u[0],this._moveRowInArray(s.getGroup().rows,s,o,!a)):u[u.length-1]!==s&&(o=u[u.length-1],this._moveRowInArray(s.getGroup().rows,s,o,!a)):this._moveRowInArray(s.getGroup().rows,s,o,!a))}return o&&(r=this.rows.indexOf(o)),o&&r>-1?(n=this.activeRows.indexOf(o),this.displayRowIterator(function(t){var e=t.indexOf(o);e>-1&&t.splice(a?e:e+1,0,s)}),n>-1&&this.activeRows.splice(a?n:n+1,0,s),this.rows.splice(a?r:r+1,0,s)):a?(this.displayRowIterator(function(t){t.unshift(s)}),this.activeRows.unshift(s),this.rows.unshift(s)):(this.displayRowIterator(function(t){t.push(s)}),this.activeRows.push(s),this.rows.push(s)),this.setActiveRows(this.activeRows),this.table.options.rowAdded.call(this.table,s.getComponent()),this.table.options.dataChanged&&this.table.options.dataChanged.call(this.table,this.getData()),i||this.reRenderInPosition(),s},RowManager.prototype.moveRow=function(t,e,o){this.table.options.history&&this.table.modExists("history")&&this.table.modules.history.action("rowMove",t,{posFrom:this.getRowPosition(t),posTo:this.getRowPosition(e),to:e,after:o}),this.moveRowActual(t,e,o),this.regenerateRowNumbers(),this.table.options.rowMoved.call(this.table,t.getComponent())},RowManager.prototype.moveRowActual=function(t,e,o){var i=this;if(this._moveRowInArray(this.rows,t,e,o),this._moveRowInArray(this.activeRows,t,e,o),this.displayRowIterator(function(n){i._moveRowInArray(n,t,e,o)}),this.table.options.groupBy&&this.table.modExists("groupRows")){!o&&e instanceof Group&&(e=this.table.rowManager.prevDisplayRow(t)||e);var n=e.getGroup(),l=t.getGroup();n===l?this._moveRowInArray(n.rows,t,e,o):(l&&l.removeRow(t),n.insertRow(t,e,o))}},RowManager.prototype._moveRowInArray=function(t,e,o,i){var n,l,s,a;if(e!==o&&(n=t.indexOf(e),n>-1&&(t.splice(n,1),l=t.indexOf(o),l>-1?i?t.splice(l+1,0,e):t.splice(l,0,e):t.splice(n,0,e)),t===this.getDisplayRows())){s=n<l?n:l,a=l>n?l:n+1;for(var r=s;r<=a;r++)t[r]&&this.styleRow(t[r],r)}},RowManager.prototype.clearData=function(){this.setData([])},RowManager.prototype.getRowIndex=function(t){return this.findRowIndex(t,this.rows)},RowManager.prototype.getDisplayRowIndex=function(t){var e=this.getDisplayRows().indexOf(t);return e>-1&&e},RowManager.prototype.nextDisplayRow=function(t,e){var o=this.getDisplayRowIndex(t),i=!1;return!1!==o&&o<this.displayRowsCount-1&&(i=this.getDisplayRows()[o+1]),!i||i instanceof Row&&"row"==i.type?i:this.nextDisplayRow(i,e)},RowManager.prototype.prevDisplayRow=function(t,e){var o=this.getDisplayRowIndex(t),i=!1;return o&&(i=this.getDisplayRows()[o-1]),!e||!i||i instanceof Row&&"row"==i.type?i:this.prevDisplayRow(i,e)},RowManager.prototype.findRowIndex=function(t,e){var o;return!!((t=this.findRow(t))&&(o=e.indexOf(t))>-1)&&o},RowManager.prototype.getData=function(t,e){var o=[];return this.getRows(t).forEach(function(t){"row"==t.type&&o.push(t.getData(e||"data"))}),o},RowManager.prototype.getComponents=function(t){var e=[];return this.getRows(t).forEach(function(t){e.push(t.getComponent())}),e},RowManager.prototype.getDataCount=function(t){return this.getRows(t).length},RowManager.prototype._genRemoteRequest=function(){var t=this,e=this.table,o=e.options,i={};if(e.modExists("page")){if(o.ajaxSorting){var n=this.table.modules.sort.getSort();n.forEach(function(t){delete t.column}),i[this.table.modules.page.paginationDataSentNames.sorters]=n}if(o.ajaxFiltering){var l=this.table.modules.filter.getFilters(!0,!0);i[this.table.modules.page.paginationDataSentNames.filters]=l}this.table.modules.ajax.setParams(i,!0)}e.modules.ajax.sendRequest().then(function(e){t._setDataActual(e,!0)}).catch(function(t){})},RowManager.prototype.filterRefresh=function(){var t=this.table,e=t.options,o=this.scrollLeft;e.ajaxFiltering?"remote"==e.pagination&&t.modExists("page")?(t.modules.page.reset(!0),t.modules.page.setPage(1).then(function(){}).catch(function(){})):e.ajaxProgressiveLoad?t.modules.ajax.loadData().then(function(){}).catch(function(){}):this._genRemoteRequest():this.refreshActiveData("filter"),this.scrollHorizontal(o)},RowManager.prototype.sorterRefresh=function(t){var e=this.table,o=this.table.options,i=this.scrollLeft;o.ajaxSorting?("remote"==o.pagination||o.progressiveLoad)&&e.modExists("page")?(e.modules.page.reset(!0),e.modules.page.setPage(1).then(function(){}).catch(function(){})):o.ajaxProgressiveLoad?e.modules.ajax.loadData().then(function(){}).catch(function(){}):this._genRemoteRequest():this.refreshActiveData(t?"filter":"sort"),this.scrollHorizontal(i)},RowManager.prototype.scrollHorizontal=function(t){this.scrollLeft=t,this.element.scrollLeft=t,this.table.options.groupBy&&this.table.modules.groupRows.scrollHeaders(t),this.table.modExists("columnCalcs")&&this.table.modules.columnCalcs.scrollHorizontal(t)},RowManager.prototype.refreshActiveData=function(t,e,o){var i,n=this,l=this.table,s=["all","filter","sort","display","freeze","group","tree","page"];if(this.redrawBlock)return void((!this.redrawBlockRestoreConfig||s.indexOf(t)<s.indexOf(this.redrawBlockRestoreConfig.stage))&&(this.redrawBlockRestoreConfig={stage:t,skipStage:e,renderInPosition:o}));switch(n.table.modExists("edit")&&n.table.modules.edit.cancelEdit(),t||(t="all"),l.options.selectable&&!l.options.selectablePersistence&&l.modExists("selectRow")&&l.modules.selectRow.deselectRows(),t){case"all":case"filter":e?e=!1:l.modExists("filter")?n.setActiveRows(l.modules.filter.filter(n.rows)):n.setActiveRows(n.rows.slice(0));case"sort":e?e=!1:l.modExists("sort")&&l.modules.sort.sort(this.activeRows),this.regenerateRowNumbers();case"display":this.resetDisplayRows();case"freeze":e?e=!1:this.table.modExists("frozenRows")&&l.modules.frozenRows.isFrozen()&&(l.modules.frozenRows.getDisplayIndex()||l.modules.frozenRows.setDisplayIndex(this.getNextDisplayIndex()),i=l.modules.frozenRows.getDisplayIndex(),!0!==(i=n.setDisplayRows(l.modules.frozenRows.getRows(this.getDisplayRows(i-1)),i))&&l.modules.frozenRows.setDisplayIndex(i));case"group":e?e=!1:l.options.groupBy&&l.modExists("groupRows")&&(l.modules.groupRows.getDisplayIndex()||l.modules.groupRows.setDisplayIndex(this.getNextDisplayIndex()),i=l.modules.groupRows.getDisplayIndex(),!0!==(i=n.setDisplayRows(l.modules.groupRows.getRows(this.getDisplayRows(i-1)),i))&&l.modules.groupRows.setDisplayIndex(i));case"tree":e?e=!1:l.options.dataTree&&l.modExists("dataTree")&&(l.modules.dataTree.getDisplayIndex()||l.modules.dataTree.setDisplayIndex(this.getNextDisplayIndex()),i=l.modules.dataTree.getDisplayIndex(),!0!==(i=n.setDisplayRows(l.modules.dataTree.getRows(this.getDisplayRows(i-1)),i))&&l.modules.dataTree.setDisplayIndex(i)),l.options.pagination&&l.modExists("page")&&!o&&"local"==l.modules.page.getMode()&&l.modules.page.reset();case"page":e?e=!1:l.options.pagination&&l.modExists("page")&&(l.modules.page.getDisplayIndex()||l.modules.page.setDisplayIndex(this.getNextDisplayIndex()),i=l.modules.page.getDisplayIndex(),"local"==l.modules.page.getMode()&&l.modules.page.setMaxRows(this.getDisplayRows(i-1).length),!0!==(i=n.setDisplayRows(l.modules.page.getRows(this.getDisplayRows(i-1)),i))&&l.modules.page.setDisplayIndex(i))}Tabulator.prototype.helpers.elVisible(n.element)&&(o?n.reRenderInPosition():("all"===t&&this.table.options.virtualDomHoz&&this.table.vdomHoz.dataChange(),n.renderTable(),l.options.layoutColumnsOnNewData&&n.table.columnManager.redraw(!0))),l.modExists("columnCalcs")&&l.modules.columnCalcs.recalc(this.activeRows)},RowManager.prototype.regenerateRowNumbers=function(){var t=this;this.rowNumColumn&&this.activeRows.forEach(function(e){var o=e.getCell(t.rowNumColumn);o&&o._generateContents()})},RowManager.prototype.setActiveRows=function(t){this.activeRows=t,this.activeRowsCount=this.activeRows.length},RowManager.prototype.resetDisplayRows=function(){this.displayRows=[],this.displayRows.push(this.activeRows.slice(0)),this.displayRowsCount=this.displayRows[0].length,this.table.modExists("frozenRows")&&this.table.modules.frozenRows.setDisplayIndex(0),this.table.options.groupBy&&this.table.modExists("groupRows")&&this.table.modules.groupRows.setDisplayIndex(0),this.table.options.pagination&&this.table.modExists("page")&&this.table.modules.page.setDisplayIndex(0)},RowManager.prototype.getNextDisplayIndex=function(){return this.displayRows.length},RowManager.prototype.setDisplayRows=function(t,e){var o=!0;return e&&void 0!==this.displayRows[e]?(this.displayRows[e]=t,o=!0):(this.displayRows.push(t),o=e=this.displayRows.length-1),e==this.displayRows.length-1&&(this.displayRowsCount=this.displayRows[this.displayRows.length-1].length),o},RowManager.prototype.getDisplayRows=function(t){return void 0===t?this.displayRows.length?this.displayRows[this.displayRows.length-1]:[]:this.displayRows[t]||[]},RowManager.prototype.getVisibleRows=function(t){var e=this.element.scrollTop,o=this.element.clientHeight+e,i=!1,n=0,l=0,s=this.getDisplayRows();if(t){this.getDisplayRows();for(var a=this.vDomTop;a<=this.vDomBottom;a++)if(s[a])if(i){if(!(o-s[a].getElement().offsetTop>=0))break;l=a}else if(e-s[a].getElement().offsetTop>=0)n=a;else{if(i=!0,!(o-s[a].getElement().offsetTop>=0))break;l=a}}else n=this.vDomTop,l=this.vDomBottom;return s.slice(n,l+1)},RowManager.prototype.displayRowIterator=function(t){this.displayRows.forEach(t),this.displayRowsCount=this.displayRows[this.displayRows.length-1].length},RowManager.prototype.getRows=function(t){var e;switch(t){case"active":e=this.activeRows;break;case"display":e=this.table.rowManager.getDisplayRows();break;case"visible":e=this.getVisibleRows(!0);break;case"selected":e=this.table.modules.selectRow.selectedRows;break;default:e=this.rows}return e},RowManager.prototype.reRenderInPosition=function(t){if("virtual"==this.getRenderMode())if(this.redrawBlock)t?t():this.redrawBlockRederInPosition=!0;else{for(var e=this.element.scrollTop,o=!1,i=!1,n=this.scrollLeft,l=this.getDisplayRows(),s=this.vDomTop;s<=this.vDomBottom;s++)if(l[s]){var a=e-l[s].getElement().offsetTop;if(!(!1===i||Math.abs(a)<i))break;i=a,o=s}t&&t(),this._virtualRenderFill(!1===o?this.displayRowsCount-1:o,!0,i||0),this.scrollHorizontal(n)}else this.renderTable(),t&&t()},RowManager.prototype.setRenderMode=function(){this.table.options.virtualDom?(this.renderMode="virtual",this.table.element.clientHeight||this.table.options.height?this.fixedHeight=!0:this.fixedHeight=!1):this.renderMode="classic"},RowManager.prototype.getRenderMode=function(){return this.renderMode},RowManager.prototype.renderTable=function(){switch(this.table.options.renderStarted.call(this.table),this.element.scrollTop=0,this.renderMode){case"classic":this._simpleRender();break;case"virtual":this._virtualRenderFill()}this.firstRender&&(this.displayRowsCount?(this.firstRender=!1,this.table.modules.layout.layout()):this.renderEmptyScroll()),this.table.modExists("frozenColumns")&&this.table.modules.frozenColumns.layout(),this.displayRowsCount||this.table.options.placeholder&&(this.table.options.placeholder.setAttribute("tabulator-render-mode",this.renderMode),this.getElement().appendChild(this.table.options.placeholder),this.table.options.placeholder.style.width=this.table.columnManager.getWidth()+"px"),this.table.options.renderComplete.call(this.table)},RowManager.prototype._simpleRender=function(){this._clearVirtualDom(),this.displayRowsCount?this.checkClassicModeGroupHeaderWidth():this.renderEmptyScroll()},RowManager.prototype.checkClassicModeGroupHeaderWidth=function(){var t=this,e=this.tableElement,o=!0;t.getDisplayRows().forEach(function(i,n){t.styleRow(i,n),e.appendChild(i.getElement()),i.initialize(!0),"group"!==i.type&&(o=!1)}),e.style.minWidth=o?t.table.columnManager.getWidth()+"px":""},RowManager.prototype.renderEmptyScroll=function(){this.table.options.placeholder?this.tableElement.style.display="none":this.tableElement.style.minWidth=this.table.columnManager.getWidth()+"px"},RowManager.prototype._clearVirtualDom=function(){var t=this.tableElement;for(this.table.options.placeholder&&this.table.options.placeholder.parentNode&&this.table.options.placeholder.parentNode.removeChild(this.table.options.placeholder);t.firstChild;)t.removeChild(t.firstChild);t.style.paddingTop="",t.style.paddingBottom="",t.style.minWidth="",t.style.minHeight="",t.style.display="",t.style.visibility="",this.scrollTop=0,this.scrollLeft=0,this.vDomTop=0,this.vDomBottom=0,this.vDomTopPad=0,this.vDomBottomPad=0},RowManager.prototype.styleRow=function(t,e){var o=t.getElement();e%2?(o.classList.add("tabulator-row-even"),o.classList.remove("tabulator-row-odd")):(o.classList.add("tabulator-row-odd"),o.classList.remove("tabulator-row-even"))},RowManager.prototype._virtualRenderFill=function(t,e,o){var i=this,n=i.tableElement,l=i.element,s=0,a=0,r=0,u=0,h=!0,c=i.getDisplayRows();if(t=t||0,o=o||0,t){for(;n.firstChild;)n.removeChild(n.firstChild);var d=(i.displayRowsCount-t+1)*i.vDomRowHeight;d<i.height&&(t-=Math.ceil((i.height-d)/i.vDomRowHeight))<0&&(t=0),s=Math.min(Math.max(Math.floor(i.vDomWindowBuffer/i.vDomRowHeight),i.vDomWindowMinMarginRows),t),t-=s}else i._clearVirtualDom();if(i.displayRowsCount&&Tabulator.prototype.helpers.elVisible(i.element)){for(i.vDomTop=t,i.vDomBottom=t-1;(a<=i.height+i.vDomWindowBuffer||u<i.vDomWindowMinTotalRows)&&i.vDomBottom<i.displayRowsCount-1;){var p=i.vDomBottom+1,m=c[p],f=0;i.styleRow(m,p),n.appendChild(m.getElement()),m.initialize(),m.heightInitialized||m.normalizeHeight(!0),f=m.getHeight(),u<s?r+=f:a+=f,f>this.vDomWindowBuffer&&(this.vDomWindowBuffer=2*f),"group"!==m.type&&(h=!1),i.vDomBottom++,u++}t?(i.vDomTopPad=e?i.vDomRowHeight*this.vDomTop+o:i.scrollTop-r,i.vDomBottomPad=i.vDomBottom==i.displayRowsCount-1?0:Math.max(i.vDomScrollHeight-i.vDomTopPad-a-r,0)):(this.vDomTopPad=0,i.vDomRowHeight=Math.floor((a+r)/u),i.vDomBottomPad=i.vDomRowHeight*(i.displayRowsCount-i.vDomBottom-1),i.vDomScrollHeight=r+a+i.vDomBottomPad-i.height),n.style.paddingTop=i.vDomTopPad+"px",n.style.paddingBottom=i.vDomBottomPad+"px",e&&(this.scrollTop=i.vDomTopPad+r+o-(this.element.scrollWidth>this.element.clientWidth?this.element.offsetHeight-this.element.clientHeight:0)),this.scrollTop=Math.min(this.scrollTop,this.element.scrollHeight-this.height),this.element.scrollWidth>this.element.offsetWidth&&e&&(this.scrollTop+=this.element.offsetHeight-this.element.clientHeight),this.vDomScrollPosTop=this.scrollTop,this.vDomScrollPosBottom=this.scrollTop,l.scrollTop=this.scrollTop,n.style.minWidth=h?i.table.columnManager.getWidth()+"px":"",i.table.options.groupBy&&"fitDataFill"!=i.table.modules.layout.getMode()&&i.displayRowsCount==i.table.modules.groupRows.countGroups()&&(i.tableElement.style.minWidth=i.table.columnManager.getWidth())}else this.renderEmptyScroll();this.fixedHeight||this.adjustTableSize()},RowManager.prototype.scrollVertical=function(t){var e=this.scrollTop-this.vDomScrollPosTop,o=this.scrollTop-this.vDomScrollPosBottom,i=2*this.vDomWindowBuffer;if(-e>i||o>i){var n=this.scrollLeft;this._virtualRenderFill(Math.floor(this.element.scrollTop/this.element.scrollHeight*this.displayRowsCount)),this.scrollHorizontal(n)}else t?(e<0&&this._addTopRow(-e),o<0&&(this.vDomScrollHeight-this.scrollTop>this.vDomWindowBuffer?this._removeBottomRow(-o):this.vDomScrollPosBottom=this.scrollTop)):(e>=0&&(this.scrollTop>this.vDomWindowBuffer?this._removeTopRow(e):this.vDomScrollPosTop=this.scrollTop),o>=0&&this._addBottomRow(o))},RowManager.prototype._addTopRow=function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,o=this.tableElement,i=this.getDisplayRows();if(this.vDomTop){var n=this.vDomTop-1,l=i[n],s=l.getHeight()||this.vDomRowHeight;t>=s&&(this.styleRow(l,n),o.insertBefore(l.getElement(),o.firstChild),l.initialized&&l.heightInitialized||(this.vDomTopNewRows.push(l),l.heightInitialized||l.clearCellHeight()),l.initialize(),this.vDomTopPad-=s,this.vDomTopPad<0&&(this.vDomTopPad=n*this.vDomRowHeight),n||(this.vDomTopPad=0),o.style.paddingTop=this.vDomTopPad+"px",this.vDomScrollPosTop-=s,this.vDomTop--),t=-(this.scrollTop-this.vDomScrollPosTop),l.getHeight()>this.vDomWindowBuffer&&(this.vDomWindowBuffer=2*l.getHeight()),e<this.vDomMaxRenderChain&&this.vDomTop&&t>=(i[this.vDomTop-1].getHeight()||this.vDomRowHeight)?this._addTopRow(t,e+1):this._quickNormalizeRowHeight(this.vDomTopNewRows)}},RowManager.prototype._removeTopRow=function(t){var e=this.tableElement,o=this.getDisplayRows()[this.vDomTop],i=o.getHeight()||this.vDomRowHeight;if(t>=i){var n=o.getElement();n.parentNode.removeChild(n),this.vDomTopPad+=i,e.style.paddingTop=this.vDomTopPad+"px",this.vDomScrollPosTop+=this.vDomTop?i:i+this.vDomWindowBuffer,this.vDomTop++,t=this.scrollTop-this.vDomScrollPosTop,this._removeTopRow(t)}},RowManager.prototype._addBottomRow=function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,o=this.tableElement,i=this.getDisplayRows();if(this.vDomBottom<this.displayRowsCount-1){var n=this.vDomBottom+1,l=i[n],s=l.getHeight()||this.vDomRowHeight;t>=s&&(this.styleRow(l,n),o.appendChild(l.getElement()),l.initialized&&l.heightInitialized||(this.vDomBottomNewRows.push(l),l.heightInitialized||l.clearCellHeight()),l.initialize(),this.vDomBottomPad-=s,(this.vDomBottomPad<0||n==this.displayRowsCount-1)&&(this.vDomBottomPad=0),o.style.paddingBottom=this.vDomBottomPad+"px",this.vDomScrollPosBottom+=s,this.vDomBottom++),t=this.scrollTop-this.vDomScrollPosBottom,l.getHeight()>this.vDomWindowBuffer&&(this.vDomWindowBuffer=2*l.getHeight()),e<this.vDomMaxRenderChain&&this.vDomBottom<this.displayRowsCount-1&&t>=(i[this.vDomBottom+1].getHeight()||this.vDomRowHeight)?this._addBottomRow(t,e+1):this._quickNormalizeRowHeight(this.vDomBottomNewRows)}},RowManager.prototype._removeBottomRow=function(t){var e=this.tableElement,o=this.getDisplayRows()[this.vDomBottom],i=o.getHeight()||this.vDomRowHeight;if(t>=i){var n=o.getElement();n.parentNode&&n.parentNode.removeChild(n),this.vDomBottomPad+=i,this.vDomBottomPad<0&&(this.vDomBottomPad=0),e.style.paddingBottom=this.vDomBottomPad+"px",this.vDomScrollPosBottom-=i,this.vDomBottom--,t=-(this.scrollTop-this.vDomScrollPosBottom),this._removeBottomRow(t)
+}},RowManager.prototype._quickNormalizeRowHeight=function(t){t.forEach(function(t){t.calcHeight()}),t.forEach(function(t){t.setCellHeight()}),t.length=0},RowManager.prototype.normalizeHeight=function(){this.activeRows.forEach(function(t){t.normalizeHeight()})},RowManager.prototype.adjustTableSize=function(){var t,e=this.element.clientHeight;if("virtual"===this.renderMode){var o=Math.floor(this.columnManager.getElement().offsetHeight+(this.table.footerManager&&!this.table.footerManager.external?this.table.footerManager.getElement().offsetHeight:0));this.fixedHeight?(this.element.style.minHeight="calc(100% - "+o+"px)",this.element.style.height="calc(100% - "+o+"px)",this.element.style.maxHeight="calc(100% - "+o+"px)"):(this.element.style.height="",this.element.style.height=Math.floor(this.table.element.clientHeight)-o+"px",this.element.scrollTop=this.scrollTop),this.height=this.element.clientHeight,this.vDomWindowBuffer=this.table.options.virtualDomBuffer||this.height,this.fixedHeight||Math.floor(e)==Math.floor(this.element.clientHeight)||((t=this.table.modExists("resizeTable"))&&!this.table.modules.resizeTable.autoResize||!t)&&this.redraw()}},RowManager.prototype.reinitialize=function(){this.rows.forEach(function(t){t.reinitialize(!0)})},RowManager.prototype.blockRedraw=function(){this.redrawBlock=!0,this.redrawBlockRestoreConfig=!1},RowManager.prototype.restoreRedraw=function(){this.redrawBlock=!1,this.redrawBlockRestoreConfig?(this.refreshActiveData(this.redrawBlockRestoreConfig.stage,this.redrawBlockRestoreConfig.skipStage,this.redrawBlockRestoreConfig.renderInPosition),this.redrawBlockRestoreConfig=!1):this.redrawBlockRederInPosition&&this.reRenderInPosition(),this.redrawBlockRederInPosition=!1},RowManager.prototype.redraw=function(t){var e=this.scrollLeft;this.adjustTableSize(),this.table.tableWidth=this.table.element.clientWidth,t?this.renderTable():("classic"==this.renderMode?this.table.options.groupBy?this.refreshActiveData("group",!1,!1):this._simpleRender():(this.reRenderInPosition(),this.scrollHorizontal(e)),this.displayRowsCount||this.table.options.placeholder&&this.getElement().appendChild(this.table.options.placeholder))},RowManager.prototype.resetScroll=function(){if(this.element.scrollLeft=0,this.element.scrollTop=0,"ie"===this.table.browser){var t=document.createEvent("Event");t.initEvent("scroll",!1,!0),this.element.dispatchEvent(t)}else this.element.dispatchEvent(new Event("scroll"))};var VDomHoz=function(t){this.table=t,this.element=this.table.rowManager.tableElement,this.holderEl=this.table.rowManager.element,this.leftCol=0,this.rightCol=0,this.scrollLeft=0,this.vDomScrollPosLeft=0,this.vDomScrollPosRight=0,this.vDomPadLeft=0,this.vDomPadRight=0,this.fitDataColAvg=0,this.window=200,this.initialized=!1,this.columns=[],this.compatabilityCheck()&&this.initialize()};VDomHoz.prototype.compatabilityCheck=function(){var t=this.table.options,e=!0;return"fitDataTable"==t.layout&&(console.warn("Horizontal Vitrual DOM is not compatible with fitDataTable layout mode"),e=!1),t.responsiveLayout&&(console.warn("Horizontal Vitrual DOM is not compatible with responsive columns"),e=!1),this.table.rtl&&(console.warn("Horizontal Vitrual DOM is not currently compatible with RTL text direction"),e=!1),t.columns&&t.columns.find(function(t){return t.frozen})&&(console.warn("Horizontal Vitrual DOM is not compatible with frozen columns"),e=!1),e||(t.virtualDomHoz=!1),e},VDomHoz.prototype.initialize=function(){var t=this;this.holderEl.addEventListener("scroll",function(){var e=t.holderEl.scrollLeft;t.scrollLeft!=e&&(t.scrollLeft=e,t.scroll(e-(t.vDomScrollPosLeft+t.window)))})},VDomHoz.prototype.deinitialize=function(){this.initialized=!1},VDomHoz.prototype.clear=function(){this.columns=[],this.leftCol=-1,this.rightCol=0,this.vDomScrollPosLeft=0,this.vDomScrollPosRight=0,this.vDomPadLeft=0,this.vDomPadRight=0},VDomHoz.prototype.dataChange=function(){var t,e,o,i=!1,n=0,l=0;if("fitData"===this.table.options.layout){if(this.table.columnManager.columnsByIndex.forEach(function(t){!t.definition.width&&t.visible&&(i=!0)}),i&&i&&this.table.rowManager.getDisplayRows().length&&(this.vDomScrollPosRight=this.scrollLeft+this.holderEl.clientWidth+this.window,this.table.options.groupBy?(t=this.table.modules.groupRows.getGroups(!1)[0],e=t.getRows(!1)[0]):e=this.table.rowManager.getDisplayRows()[0],e)){o=e.getElement(),e.generateCells(),this.element.appendChild(o);for(var l=0;l<e.cells.length;l++){var s=e.cells[l];if(o.appendChild(s.getElement()),s.column.reinitializeWidth(),(n+=s.column.getWidth())>this.vDomScrollPosRight)break}for(o.parentNode.removeChild(o),this.fitDataColAvg=Math.floor(n/(l+1)),l;l<this.table.columnManager.columnsByIndex.length;l++)this.table.columnManager.columnsByIndex[l].setWidth(this.fitDataColAvg);this.reinitialize(!1,!0)}}else"fitColumns"===this.table.options.layout&&(this.table.modules.layout.layout(),this.table.vdomHoz.reinitialize(!1,!0))},VDomHoz.prototype.fitDataLayoutOverride=function(){for(var t=this.leftCol;t<=this.rightCol;t++)this.columns[t].reinitializeWidth()},VDomHoz.prototype.reinitialize=function(t,e){var o=this,i={cols:this.columns,leftCol:this.leftCol,rightCol:this.rightCol};if(!t||this.initialized){this.clear(),this.scrollLeft=this.holderEl.scrollLeft,this.vDomScrollPosLeft=this.scrollLeft-this.window,this.vDomScrollPosRight=this.scrollLeft+this.holderEl.clientWidth+this.window;var n=0;this.table.columnManager.columnsByIndex.forEach(function(t){var e={};if(t.visible){var i=t.getWidth();e.leftPos=n,e.rightPos=n+i,n+i>o.vDomScrollPosLeft&&n<o.vDomScrollPosRight?(-1==o.leftCol&&(o.leftCol=o.columns.length,o.vDomPadLeft=n),o.rightCol=o.columns.length):-1!==o.leftCol&&(o.vDomPadRight+=i),o.columns.push(t),t.modules.vdomHoz=e,n+=i}}),this.element.style.paddingLeft=this.vDomPadLeft+"px",this.element.style.paddingRight=this.vDomPadRight+"px",this.initialized=!0,e||t&&!this.reinitChanged(i)||this.renitializeRows(),this.holderEl.scrollLeft=this.scrollLeft}},VDomHoz.prototype.reinitChanged=function(t){var e=this,o=!0;return t.cols.length!==this.columns.length||t.leftCol!==this.leftCol||t.rightCol!==this.rightCol||(t.cols.forEach(function(t,i){t!==e.columns[i]&&(o=!1)}),!o)},VDomHoz.prototype.renitializeRows=function(){var t=this;this.table.rowManager.getVisibleRows().forEach(function(e){t.reinitializeRow(e,!0)})},VDomHoz.prototype.scroll=function(t){this.vDomScrollPosLeft+=t,this.vDomScrollPosRight+=t,t>.8*this.holderEl.clientWidth?this.reinitialize():t>0?(this.addColRight(),this.removeColLeft()):(this.addColLeft(),this.removeColRight())},VDomHoz.prototype.colPositionAdjust=function(t,e,o){for(var i=t;i<e;i++){var n=this.columns[i];n.modules.vdomHoz.leftPos-=o,n.modules.vdomHoz.rightPos-=o}},VDomHoz.prototype.addColRight=function(){var t,e,o,i=this.columns[this.rightCol+1];i&&i.modules.vdomHoz.leftPos<=this.vDomScrollPosRight&&(t=this.table.rowManager.getVisibleRows(),t.forEach(function(t){if("group"!==t.type){var e=t.getCell(i);t.getElement().appendChild(e.getElement()),e.cellRendered()}}),this.fitDataColAvg&&(e=i.getWidth())===this.fitDataColAvg&&(i.reinitializeWidth(),(o=e-i.getWidth())&&(i.modules.vdomHoz.rightPos-=o,this.colPositionAdjust(this.rightCol+1,this.columns.length,o))),this.rightCol++,this.rightCol>=this.columns.length-1?this.vDomPadRight=0:this.vDomPadRight-=i.getWidth(),this.element.style.paddingRight=this.vDomPadRight+"px",this.addColRight())},VDomHoz.prototype.addColLeft=function(){var t=this.columns[this.leftCol-1];if(t&&t.modules.vdomHoz.rightPos>=this.vDomScrollPosLeft){this.table.rowManager.getVisibleRows().forEach(function(e){if("group"!==e.type){var o=e.getCell(t);e.getElement().prepend(o.getElement()),o.cellRendered()}}),this.leftCol?this.vDomPadLeft-=t.getWidth():this.vDomPadLeft=0,this.element.style.paddingLeft=this.vDomPadLeft+"px",this.leftCol--,this.addColLeft()}},VDomHoz.prototype.removeColRight=function(t){var e,t=this.columns[this.rightCol];t&&t.modules.vdomHoz.leftPos>this.vDomScrollPosRight&&(e=this.table.rowManager.getVisibleRows(),t.modules.vdomHoz.visible=!1,e.forEach(function(e){if("group"!==e.type){var o=e.getCell(t);e.getElement().removeChild(o.getElement())}}),this.vDomPadRight+=t.getWidth(),this.element.style.paddingRight=this.vDomPadRight+"px",this.rightCol--,this.removeColRight())},VDomHoz.prototype.removeColLeft=function(){var t,e=this.columns[this.leftCol];e&&e.modules.vdomHoz.rightPos<this.vDomScrollPosLeft&&(t=this.table.rowManager.getVisibleRows(),t.forEach(function(t){if("group"!==t.type){var o=t.getCell(e);t.getElement().removeChild(o.getElement())}}),this.vDomPadLeft+=e.getWidth(),this.element.style.paddingLeft=this.vDomPadLeft+"px",this.leftCol++,this.removeColLeft())},VDomHoz.prototype.initializeRow=function(t){if("group"!==t.type){t.modules.vdomHoz={leftCol:this.leftCol,rightCol:this.rightCol};for(var e=this.leftCol;e<=this.rightCol;e++){var o=this.columns[e];if(o.visible){var i=t.getCell(o);t.element.appendChild(i.getElement()),i.cellRendered()}}}},VDomHoz.prototype.reinitializeRow=function(t,e){if("group"!==t.type&&(e||!t.modules.vdomHoz||t.modules.vdomHoz.leftCol!==this.leftCol||t.modules.vdomHoz.rightCol!==this.rightCol)){for(;t.element.firstChild;)t.element.removeChild(t.element.firstChild);this.initializeRow(t)}};var RowComponent=function(t){this._row=t};RowComponent.prototype.getData=function(t){return this._row.getData(t)},RowComponent.prototype.getElement=function(){return this._row.getElement()},RowComponent.prototype.getCells=function(){var t=[];return this._row.getCells().forEach(function(e){t.push(e.getComponent())}),t},RowComponent.prototype.getCell=function(t){var e=this._row.getCell(t);return!!e&&e.getComponent()},RowComponent.prototype.getIndex=function(){return this._row.getData("data")[this._row.table.options.index]},RowComponent.prototype.getPosition=function(t){return this._row.table.rowManager.getRowPosition(this._row,t)},RowComponent.prototype.delete=function(){return this._row.delete()},RowComponent.prototype.scrollTo=function(){return this._row.table.rowManager.scrollToRow(this._row)},RowComponent.prototype.pageTo=function(){if(this._row.table.modExists("page",!0))return this._row.table.modules.page.setPageToRow(this._row)},RowComponent.prototype.move=function(t,e){this._row.moveToRow(t,e)},RowComponent.prototype.update=function(t){return this._row.updateData(t)},RowComponent.prototype.normalizeHeight=function(){this._row.normalizeHeight(!0)},RowComponent.prototype.select=function(){this._row.table.modules.selectRow.selectRows(this._row)},RowComponent.prototype.deselect=function(){this._row.table.modules.selectRow.deselectRows(this._row)},RowComponent.prototype.toggleSelect=function(){this._row.table.modules.selectRow.toggleRow(this._row)},RowComponent.prototype.isSelected=function(){return this._row.table.modules.selectRow.isRowSelected(this._row)},RowComponent.prototype._getSelf=function(){return this._row},RowComponent.prototype.validate=function(){return this._row.validate()},RowComponent.prototype.freeze=function(){this._row.table.modExists("frozenRows",!0)&&this._row.table.modules.frozenRows.freezeRow(this._row)},RowComponent.prototype.unfreeze=function(){this._row.table.modExists("frozenRows",!0)&&this._row.table.modules.frozenRows.unfreezeRow(this._row)},RowComponent.prototype.isFrozen=function(){if(this._row.table.modExists("frozenRows",!0)){return this._row.table.modules.frozenRows.rows.indexOf(this._row)>-1}return!1},RowComponent.prototype.treeCollapse=function(){this._row.table.modExists("dataTree",!0)&&this._row.table.modules.dataTree.collapseRow(this._row)},RowComponent.prototype.treeExpand=function(){this._row.table.modExists("dataTree",!0)&&this._row.table.modules.dataTree.expandRow(this._row)},RowComponent.prototype.treeToggle=function(){this._row.table.modExists("dataTree",!0)&&this._row.table.modules.dataTree.toggleRow(this._row)},RowComponent.prototype.getTreeParent=function(){return!!this._row.table.modExists("dataTree",!0)&&this._row.table.modules.dataTree.getTreeParent(this._row)},RowComponent.prototype.getTreeChildren=function(){return!!this._row.table.modExists("dataTree",!0)&&this._row.table.modules.dataTree.getTreeChildren(this._row,!0)},RowComponent.prototype.addTreeChild=function(t,e,o){return!!this._row.table.modExists("dataTree",!0)&&this._row.table.modules.dataTree.addTreeChildRow(this._row,t,e,o)},RowComponent.prototype.reformat=function(){return this._row.reinitialize()},RowComponent.prototype.getGroup=function(){return this._row.getGroup().getComponent()},RowComponent.prototype.getTable=function(){return this._row.table},RowComponent.prototype.getNextRow=function(){var t=this._row.nextRow();return t?t.getComponent():t},RowComponent.prototype.getPrevRow=function(){var t=this._row.prevRow();return t?t.getComponent():t};var Row=function(t,e){var o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"row";this.table=e.table,this.parent=e,this.data={},this.type=o,this.element=this.createElement(),this.modules={},this.cells=[],this.height=0,this.heightStyled="",this.manualHeight=!1,this.outerHeight=0,this.initialized=!1,this.heightInitialized=!1,this.component=null,this.setData(t),this.generateElement()};Row.prototype.createElement=function(){var t=document.createElement("div");return t.classList.add("tabulator-row"),t.setAttribute("role","row"),t},Row.prototype.getElement=function(){return this.element},Row.prototype.detachElement=function(){this.element&&this.element.parentNode&&this.element.parentNode.removeChild(this.element)},Row.prototype.generateElement=function(){var t,e,o,i=this;!1!==i.table.options.selectable&&i.table.modExists("selectRow")&&i.table.modules.selectRow.initializeRow(this),!1!==i.table.options.movableRows&&i.table.modExists("moveRow")&&i.table.modules.moveRow.initializeRow(this),!1!==i.table.options.dataTree&&i.table.modExists("dataTree")&&i.table.modules.dataTree.initializeRow(this),"collapse"===i.table.options.responsiveLayout&&i.table.modExists("responsiveLayout")&&i.table.modules.responsiveLayout.initializeRow(this),(i.table.options.rowContextMenu||i.table.options.rowClickMenu)&&this.table.modExists("menu")&&i.table.modules.menu.initializeRow(this),i.table.options.rowClick&&i.element.addEventListener("click",function(t){i.table.options.rowClick(t,i.getComponent())}),i.table.options.rowDblClick&&i.element.addEventListener("dblclick",function(t){i.table.options.rowDblClick(t,i.getComponent())}),i.table.options.rowContext&&i.element.addEventListener("contextmenu",function(t){i.table.options.rowContext(t,i.getComponent())}),i.table.options.rowMouseEnter&&i.element.addEventListener("mouseenter",function(t){i.table.options.rowMouseEnter(t,i.getComponent())}),i.table.options.rowMouseLeave&&i.element.addEventListener("mouseleave",function(t){i.table.options.rowMouseLeave(t,i.getComponent())}),i.table.options.rowMouseOver&&i.element.addEventListener("mouseover",function(t){i.table.options.rowMouseOver(t,i.getComponent())}),i.table.options.rowMouseOut&&i.element.addEventListener("mouseout",function(t){i.table.options.rowMouseOut(t,i.getComponent())}),i.table.options.rowMouseMove&&i.element.addEventListener("mousemove",function(t){i.table.options.rowMouseMove(t,i.getComponent())}),i.table.options.rowTap&&(o=!1,i.element.addEventListener("touchstart",function(t){o=!0},{passive:!0}),i.element.addEventListener("touchend",function(t){o&&i.table.options.rowTap(t,i.getComponent()),o=!1})),i.table.options.rowDblTap&&(t=null,i.element.addEventListener("touchend",function(e){t?(clearTimeout(t),t=null,i.table.options.rowDblTap(e,i.getComponent())):t=setTimeout(function(){clearTimeout(t),t=null},300)})),i.table.options.rowTapHold&&(e=null,i.element.addEventListener("touchstart",function(t){clearTimeout(e),e=setTimeout(function(){clearTimeout(e),e=null,o=!1,i.table.options.rowTapHold(t,i.getComponent())},1e3)},{passive:!0}),i.element.addEventListener("touchend",function(t){clearTimeout(e),e=null}))},Row.prototype.generateCells=function(){this.cells=this.table.columnManager.generateCells(this)},Row.prototype.initialize=function(t){var e=this;if(!this.initialized||t){for(this.deleteCells();this.element.firstChild;)this.element.removeChild(this.element.firstChild);this.table.modExists("frozenColumns")&&this.table.modules.frozenColumns.layoutRow(this),this.generateCells(),this.table.options.virtualDomHoz&&this.table.vdomHoz.initialized?this.table.vdomHoz.initializeRow(this):this.cells.forEach(function(t){e.element.appendChild(t.getElement()),t.cellRendered()}),t&&this.normalizeHeight(),this.table.options.dataTree&&this.table.modExists("dataTree")&&this.table.modules.dataTree.layoutRow(this),"collapse"===this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout")&&this.table.modules.responsiveLayout.layoutRow(this),this.table.options.rowFormatter&&this.table.options.rowFormatter(this.getComponent()),this.table.options.resizableRows&&this.table.modExists("resizeRows")&&this.table.modules.resizeRows.initializeRow(this),this.initialized=!0}else this.table.options.virtualDomHoz&&this.table.vdomHoz.reinitializeRow(this)},Row.prototype.reinitializeHeight=function(){this.heightInitialized=!1,null!==this.element.offsetParent&&this.normalizeHeight(!0)},Row.prototype.reinitialize=function(t){this.initialized=!1,this.heightInitialized=!1,this.manualHeight||(this.height=0,this.heightStyled=""),null!==this.element.offsetParent&&this.initialize(!0),this.table.options.dataTree&&this.table.modExists("dataTree",!0)&&this.table.modules.dataTree.getTreeChildren(this,!1,!0).forEach(function(t){t.reinitialize(!0)})},Row.prototype.calcHeight=function(t){var e=0,o=this.table.options.resizableRows?this.element.clientHeight:0;this.cells.forEach(function(t){var o=t.getHeight();o>e&&(e=o)}),this.height=t?Math.max(e,o):this.manualHeight?this.height:Math.max(e,o),this.heightStyled=this.height?this.height+"px":"",this.outerHeight=this.element.offsetHeight},Row.prototype.setCellHeight=function(){this.cells.forEach(function(t){t.setHeight()}),this.heightInitialized=!0},Row.prototype.clearCellHeight=function(){this.cells.forEach(function(t){t.clearHeight()})},Row.prototype.normalizeHeight=function(t){t&&this.clearCellHeight(),this.calcHeight(t),this.setCellHeight()},Row.prototype.setHeight=function(t,e){(this.height!=t||e)&&(this.manualHeight=!0,this.height=t,this.heightStyled=t?t+"px":"",this.setCellHeight(),this.outerHeight=this.element.offsetHeight)},Row.prototype.getHeight=function(){return this.outerHeight},Row.prototype.getWidth=function(){return this.element.offsetWidth},Row.prototype.deleteCell=function(t){var e=this.cells.indexOf(t);e>-1&&this.cells.splice(e,1)},Row.prototype.setData=function(t){this.table.modExists("mutator")&&(t=this.table.modules.mutator.transformRow(t,"data")),this.data=t,this.table.options.reactiveData&&this.table.modExists("reactiveData",!0)&&this.table.modules.reactiveData.watchRow(this)},Row.prototype.updateData=function(t){var e,o=this,i=Tabulator.prototype.helpers.elVisible(this.element),n={};return new Promise(function(l,s){"string"==typeof t&&(t=JSON.parse(t)),o.table.options.reactiveData&&o.table.modExists("reactiveData",!0)&&o.table.modules.reactiveData.block(),o.table.modExists("mutator")?(n=Object.assign(n,o.data),n=Object.assign(n,t),e=o.table.modules.mutator.transformRow(n,"data",t)):e=t;for(var a in e)o.data[a]=e[a];o.table.options.reactiveData&&o.table.modExists("reactiveData",!0)&&o.table.modules.reactiveData.unblock();for(var a in t){o.table.columnManager.getColumnsByFieldRoot(a).forEach(function(t){var n=o.getCell(t.getField());if(n){var l=t.getFieldValue(e);n.getValue()!=l&&(n.setValueProcessData(l),i&&n.cellRendered())}})}o.table.options.groupUpdateOnCellEdit&&o.table.options.groupBy&&o.table.modExists("groupRows")&&o.table.modules.groupRows.reassignRowToGroup(o.row),i?(o.normalizeHeight(!0),o.table.options.rowFormatter&&o.table.options.rowFormatter(o.getComponent())):(o.initialized=!1,o.height=0,o.heightStyled=""),!1!==o.table.options.dataTree&&o.table.modExists("dataTree")&&o.table.modules.dataTree.redrawNeeded(t)&&(o.table.modules.dataTree.initializeRow(o),i&&(o.table.modules.dataTree.layoutRow(o),o.table.rowManager.refreshActiveData("tree",!1,!0))),o.table.options.rowUpdated.call(o.table,o.getComponent()),o.table.options.dataChanged&&o.table.options.dataChanged.call(o.table,o.table.rowManager.getData()),l()})},Row.prototype.getData=function(t){return t&&this.table.modExists("accessor")?this.table.modules.accessor.transformRow(this,t):this.data},Row.prototype.getCell=function(t){return t=this.table.columnManager.findColumn(t),this.cells.find(function(e){return e.column===t})},Row.prototype.getCellIndex=function(t){return this.cells.findIndex(function(e){return e===t})},Row.prototype.findNextEditableCell=function(t){var e=!1;if(t<this.cells.length-1)for(var o=t+1;o<this.cells.length;o++){var i=this.cells[o];if(i.column.modules.edit&&Tabulator.prototype.helpers.elVisible(i.getElement())){var n=!0;if("function"==typeof i.column.modules.edit.check&&(n=i.column.modules.edit.check(i.getComponent())),n){e=i;break}}}return e},Row.prototype.findPrevEditableCell=function(t){var e=!1;if(t>0)for(var o=t-1;o>=0;o--){var i=this.cells[o],n=!0;if(i.column.modules.edit&&Tabulator.prototype.helpers.elVisible(i.getElement())&&("function"==typeof i.column.modules.edit.check&&(n=i.column.modules.edit.check(i.getComponent())),n)){e=i;break}}return e},Row.prototype.getCells=function(){return this.cells},Row.prototype.nextRow=function(){return this.table.rowManager.nextDisplayRow(this,!0)||!1},Row.prototype.prevRow=function(){return this.table.rowManager.prevDisplayRow(this,!0)||!1},Row.prototype.moveToRow=function(t,e){var o=this.table.rowManager.findRow(t);o?(this.table.rowManager.moveRowActual(this,o,!e),this.table.rowManager.refreshActiveData("display",!1,!0)):console.warn("Move Error - No matching row found:",t)},Row.prototype.validate=function(){var t=[];return this.cells.forEach(function(e){e.validate()||t.push(e.getComponent())}),!t.length||t},Row.prototype.delete=function(){var t=this;return new Promise(function(e,o){var i,n;t.table.options.history&&t.table.modExists("history")&&(t.table.options.groupBy&&t.table.modExists("groupRows")?(n=t.getGroup().rows,(i=n.indexOf(t))&&(i=n[i-1])):(i=t.table.rowManager.getRowIndex(t))&&(i=t.table.rowManager.rows[i-1]),t.table.modules.history.action("rowDelete",t,{data:t.getData(),pos:!i,index:i})),t.deleteActual(),e()})},Row.prototype.deleteActual=function(t){this.table.rowManager.getRowIndex(this);this.detatchModules(),this.table.options.reactiveData&&this.table.modExists("reactiveData",!0),this.modules.group&&this.modules.group.removeRow(this),this.table.rowManager.deleteRow(this,t),this.deleteCells(),this.initialized=!1,this.heightInitialized=!1,this.element=!1,this.table.options.dataTree&&this.table.modExists("dataTree",!0)&&this.table.modules.dataTree.rowDelete(this),this.table.modExists("columnCalcs")&&(this.table.options.groupBy&&this.table.modExists("groupRows")?this.table.modules.columnCalcs.recalcRowGroup(this):this.table.modules.columnCalcs.recalc(this.table.rowManager.activeRows))},Row.prototype.detatchModules=function(){this.table.modExists("selectRow")&&this.table.modules.selectRow._deselectRow(this,!0),this.table.modExists("edit")&&this.table.modules.edit.currentCell.row===this&&this.table.modules.edit.cancelEdit(),this.table.modExists("frozenRows")&&this.table.modules.frozenRows.detachRow(this)},Row.prototype.deleteCells=function(){for(var t=this.cells.length,e=0;e<t;e++)this.cells[0].delete()},Row.prototype.wipe=function(){for(this.detatchModules(),this.deleteCells();this.element.firstChild;)this.element.removeChild(this.element.firstChild);this.element=!1,this.modules={},this.element.parentNode&&this.element.parentNode.removeChild(this.element)},Row.prototype.getGroup=function(){return this.modules.group||!1},Row.prototype.getComponent=function(){return this.component||(this.component=new RowComponent(this)),this.component};var CellComponent=function(t){this._cell=t};CellComponent.prototype.getValue=function(){return this._cell.getValue()},CellComponent.prototype.getOldValue=function(){return this._cell.getOldValue()},CellComponent.prototype.getInitialValue=function(){return this._cell.initialValue},CellComponent.prototype.getElement=function(){return this._cell.getElement()},CellComponent.prototype.getRow=function(){return this._cell.row.getComponent()},CellComponent.prototype.getData=function(){return this._cell.row.getData()},CellComponent.prototype.getField=function(){return this._cell.column.getField()},CellComponent.prototype.getColumn=function(){return this._cell.column.getComponent()},CellComponent.prototype.setValue=function(t,e){void 0===e&&(e=!0),this._cell.setValue(t,e)},CellComponent.prototype.restoreOldValue=function(){this._cell.setValueActual(this._cell.getOldValue())},CellComponent.prototype.restoreInitialValue=function(){this._cell.setValueActual(this._cell.initialValue)},CellComponent.prototype.edit=function(t){return this._cell.edit(t)},CellComponent.prototype.cancelEdit=function(){this._cell.cancelEdit()},CellComponent.prototype.isEdited=function(){return!!this._cell.modules.edit&&this._cell.modules.edit.edited},CellComponent.prototype.clearEdited=function(){self.table.modExists("edit",!0)&&this._cell.table.modules.edit.clearEdited(this._cell)},CellComponent.prototype.isValid=function(){return!this._cell.modules.validate||!this._cell.modules.validate.invalid},CellComponent.prototype.validate=function(){return this._cell.validate()},CellComponent.prototype.clearValidation=function(){this._cell.table.modExists("validate",!0)&&this._cell.table.modules.validate.clearValidation(this._cell)},CellComponent.prototype.nav=function(){return this._cell.nav()},CellComponent.prototype.checkHeight=function(){this._cell.checkHeight()},CellComponent.prototype.getTable=function(){return this._cell.table},CellComponent.prototype._getSelf=function(){return this._cell};var Cell=function(t,e){this.table=t.table,this.column=t,this.row=e,this.element=null,this.value=null,this.initialValue,this.oldValue=null,this.modules={},this.height=null,this.width=null,this.minWidth=null,this.component=null,this.loaded=!1,this.build()};Cell.prototype.build=function(){this.generateElement(),this.setWidth(),this._configureCell(),this.setValueActual(this.column.getFieldValue(this.row.data)),this.initialValue=this.value},Cell.prototype.generateElement=function(){this.element=document.createElement("div"),this.element.className="tabulator-cell",this.element.setAttribute("role","gridcell"),this.element=this.element},Cell.prototype._configureCell=function(){var t=this,e=t.column.cellEvents,o=t.element,i=this.column.getField(),n={top:"flex-start",bottom:"flex-end",middle:"center"},l={left:"flex-start",right:"flex-end",center:"center"};if(o.style.textAlign=t.column.hozAlign,t.column.vertAlign&&(o.style.display="inline-flex",o.style.alignItems=n[t.column.vertAlign]||"",t.column.hozAlign&&(o.style.justifyContent=l[t.column.hozAlign]||"")),i&&o.setAttribute("tabulator-field",i),t.column.definition.cssClass){t.column.definition.cssClass.split(" ").forEach(function(t){o.classList.add(t)})}"hover"===this.table.options.tooltipGenerationMode&&o.addEventListener("mouseenter",function(e){t._generateTooltip()}),t._bindClickEvents(e),t._bindTouchEvents(e),t._bindMouseEvents(e),t.column.modules.edit&&t.table.modules.edit.bindEditor(t),t.column.definition.rowHandle&&!1!==t.table.options.movableRows&&t.table.modExists("moveRow")&&t.table.modules.moveRow.initializeCell(t),t.column.visible||t.hide()},Cell.prototype._bindClickEvents=function(t){var e=this,o=e.element;(t.cellClick||e.table.options.cellClick)&&o.addEventListener("click",function(o){var i=e.getComponent();t.cellClick&&t.cellClick.call(e.table,o,i),e.table.options.cellClick&&e.table.options.cellClick.call(e.table,o,i)}),t.cellDblClick||this.table.options.cellDblClick?o.addEventListener("dblclick",function(o){var i=e.getComponent();t.cellDblClick&&t.cellDblClick.call(e.table,o,i),e.table.options.cellDblClick&&e.table.options.cellDblClick.call(e.table,o,i)}):o.addEventListener("dblclick",function(t){if(!e.table.modExists("edit")||e.table.modules.edit.currentCell!==e){t.preventDefault();try{if(document.selection){var o=document.body.createTextRange();o.moveToElementText(e.element),o.select()}else if(window.getSelection){var o=document.createRange();o.selectNode(e.element),window.getSelection().removeAllRanges(),window.getSelection().addRange(o)}}catch(t){}}}),(t.cellContext||this.table.options.cellContext)&&o.addEventListener("contextmenu",function(o){var i=e.getComponent();t.cellContext&&t.cellContext.call(e.table,o,i),e.table.options.cellContext&&e.table.options.cellContext.call(e.table,o,i)})},Cell.prototype._bindMouseEvents=function(t){var e=this,o=e.element;(t.cellMouseEnter||e.table.options.cellMouseEnter)&&o.addEventListener("mouseenter",function(o){var i=e.getComponent();t.cellMouseEnter&&t.cellMouseEnter.call(e.table,o,i),e.table.options.cellMouseEnter&&e.table.options.cellMouseEnter.call(e.table,o,i)}),(t.cellMouseLeave||e.table.options.cellMouseLeave)&&o.addEventListener("mouseleave",function(o){var i=e.getComponent();t.cellMouseLeave&&t.cellMouseLeave.call(e.table,o,i),e.table.options.cellMouseLeave&&e.table.options.cellMouseLeave.call(e.table,o,i)}),(t.cellMouseOver||e.table.options.cellMouseOver)&&o.addEventListener("mouseover",function(o){var i=e.getComponent();t.cellMouseOver&&t.cellMouseOver.call(e.table,o,i),e.table.options.cellMouseOver&&e.table.options.cellMouseOver.call(e.table,o,i)}),(t.cellMouseOut||e.table.options.cellMouseOut)&&o.addEventListener("mouseout",function(o){var i=e.getComponent();t.cellMouseOut&&t.cellMouseOut.call(e.table,o,i),e.table.options.cellMouseOut&&e.table.options.cellMouseOut.call(e.table,o,i)}),(t.cellMouseMove||e.table.options.cellMouseMove)&&o.addEventListener("mousemove",function(o){var i=e.getComponent();t.cellMouseMove&&t.cellMouseMove.call(e.table,o,i),e.table.options.cellMouseMove&&e.table.options.cellMouseMove.call(e.table,o,i)})},Cell.prototype._bindTouchEvents=function(t){var e,o,i,n=this,l=n.element;(t.cellTap||this.table.options.cellTap)&&(i=!1,l.addEventListener("touchstart",function(t){i=!0},{passive:!0}),l.addEventListener("touchend",function(e){if(i){var o=n.getComponent();t.cellTap&&t.cellTap.call(n.table,e,o),n.table.options.cellTap&&n.table.options.cellTap.call(n.table,e,o)}i=!1})),(t.cellDblTap||this.table.options.cellDblTap)&&(e=null,l.addEventListener("touchend",function(o){if(e){clearTimeout(e),e=null;var i=n.getComponent();t.cellDblTap&&t.cellDblTap.call(n.table,o,i),n.table.options.cellDblTap&&n.table.options.cellDblTap.call(n.table,o,i)}else e=setTimeout(function(){clearTimeout(e),e=null},300)})),(t.cellTapHold||this.table.options.cellTapHold)&&(o=null,l.addEventListener("touchstart",function(e){clearTimeout(o),o=setTimeout(function(){clearTimeout(o),o=null,i=!1;var l=n.getComponent();t.cellTapHold&&t.cellTapHold.call(n.table,e,l),n.table.options.cellTapHold&&n.table.options.cellTapHold.call(n.table,e,l)},1e3)},{passive:!0}),l.addEventListener("touchend",function(t){clearTimeout(o),o=null}))},Cell.prototype._generateContents=function(){var t;switch(t=this.table.modExists("format")?this.table.modules.format.formatValue(this):this.element.innerHTML=this.value,void 0===t?"undefined":_typeof(t)){case"object":if(t instanceof Node){for(;this.element.firstChild;)this.element.removeChild(this.element.firstChild);this.element.appendChild(t)}else this.element.innerHTML="",null!=t&&console.warn("Format Error - Formatter has returned a type of object, the only valid formatter object return is an instance of Node, the formatter returned:",t);break;case"undefined":case"null":this.element.innerHTML="";break;default:this.element.innerHTML=t}},Cell.prototype.cellRendered=function(){this.table.modExists("format")&&this.table.modules.format.cellRendered&&this.table.modules.format.cellRendered(this)},
+Cell.prototype._generateTooltip=function(){var t=this.column.tooltip;t?(!0===t?t=this.value:"function"==typeof t&&!1===(t=t(this.getComponent()))&&(t=""),void 0===t&&(t=""),this.element.setAttribute("title",t)):this.element.setAttribute("title","")},Cell.prototype.getElement=function(){return this.loaded||(this.loaded=!0,this.layoutElement()),this.element},Cell.prototype.getValue=function(){return this.value},Cell.prototype.getOldValue=function(){return this.oldValue},Cell.prototype.setValue=function(t,e){var o,i=this.setValueProcessData(t,e);i&&(this.table.options.history&&this.table.modExists("history")&&this.table.modules.history.action("cellEdit",this,{oldValue:this.oldValue,newValue:this.value}),o=this.getComponent(),this.column.cellEvents.cellEdited&&this.column.cellEvents.cellEdited.call(this.table,o),this.table.options.groupUpdateOnCellEdit&&this.table.options.groupBy&&this.table.modExists("groupRows")&&this.table.modules.groupRows.reassignRowToGroup(this.row),this.cellRendered(),this.table.options.cellEdited.call(this.table,o),this.table.options.dataChanged&&this.table.options.dataChanged.call(this.table,this.table.rowManager.getData()))},Cell.prototype.setValueProcessData=function(t,e){var o=!1;return this.value!=t&&(o=!0,e&&this.column.modules.mutate&&(t=this.table.modules.mutator.transformCell(this,t))),this.setValueActual(t),o&&this.table.modExists("columnCalcs")&&(this.column.definition.topCalc||this.column.definition.bottomCalc)&&(this.table.options.groupBy&&this.table.modExists("groupRows")?("table"!=this.table.options.columnCalcs&&"both"!=this.table.options.columnCalcs||this.table.modules.columnCalcs.recalc(this.table.rowManager.activeRows),"table"!=this.table.options.columnCalcs&&this.table.modules.columnCalcs.recalcRowGroup(this.row)):this.table.modules.columnCalcs.recalc(this.table.rowManager.activeRows)),o},Cell.prototype.setValueActual=function(t){this.oldValue=this.value,this.value=t,this.table.options.reactiveData&&this.table.modExists("reactiveData")&&this.table.modules.reactiveData.block(),this.column.setFieldValue(this.row.data,t),this.table.options.reactiveData&&this.table.modExists("reactiveData")&&this.table.modules.reactiveData.unblock(),this.loaded&&this.layoutElement()},Cell.prototype.layoutElement=function(){this._generateContents(),this._generateTooltip(),this.table.options.resizableColumns&&this.table.modExists("resizeColumns")&&"row"===this.row.type&&this.table.modules.resizeColumns.initializeColumn("cell",this.column,this.element),(this.column.definition.contextMenu||this.column.definition.clickMenu)&&this.table.modExists("menu")&&this.table.modules.menu.initializeCell(this),this.table.modExists("frozenColumns")&&this.table.modules.frozenColumns.layoutElement(this.element,this.column)},Cell.prototype.setWidth=function(){this.width=this.column.width,this.element.style.width=this.column.widthStyled},Cell.prototype.clearWidth=function(){this.width="",this.element.style.width=""},Cell.prototype.getWidth=function(){return this.width||this.element.offsetWidth},Cell.prototype.setMinWidth=function(){this.minWidth=this.column.minWidth,this.element.style.minWidth=this.column.minWidthStyled},Cell.prototype.checkHeight=function(){this.row.reinitializeHeight()},Cell.prototype.clearHeight=function(){this.element.style.height="",this.height=null},Cell.prototype.setHeight=function(){this.height=this.row.height,this.element.style.height=this.row.heightStyled},Cell.prototype.getHeight=function(){return this.height||this.element.offsetHeight},Cell.prototype.show=function(){this.element.style.display=this.column.vertAlign?"inline-flex":""},Cell.prototype.hide=function(){this.element.style.display="none"},Cell.prototype.edit=function(t){if(this.table.modExists("edit",!0))return this.table.modules.edit.editCell(this,t)},Cell.prototype.cancelEdit=function(){if(this.table.modExists("edit",!0)){var t=this.table.modules.edit.getCurrentCell();t&&t._getSelf()===this?this.table.modules.edit.cancelEdit():console.warn("Cancel Editor Error - This cell is not currently being edited ")}},Cell.prototype.validate=function(){if(this.column.modules.validate&&this.table.modExists("validate",!0)){return!0===this.table.modules.validate.validate(this.column.modules.validate,this,this.getValue())}return!0},Cell.prototype.delete=function(){!this.table.rowManager.redrawBlock&&this.element.parentNode&&this.element.parentNode.removeChild(this.element),this.modules.validate&&this.modules.validate.invalid&&this.table.modules.validate.clearValidation(this),this.modules.edit&&this.modules.edit.edited&&this.table.modules.edit.clearEdited(this),this.table.options.history&&this.table.modules.history.clearComponentHistory(this),this.element=!1,this.column.deleteCell(this),this.row.deleteCell(this),this.calcs={}},Cell.prototype.nav=function(){var t=this,e=!1,o=this.row.getCellIndex(this);return{next:function(){var e,o=this.right();return!!o||!(!(e=t.table.rowManager.nextDisplayRow(t.row,!0))||!(o=e.findNextEditableCell(-1)))&&(o.edit(),!0)},prev:function(){var e,o=this.left();return!!o||!(!(e=t.table.rowManager.prevDisplayRow(t.row,!0))||!(o=e.findPrevEditableCell(e.cells.length)))&&(o.edit(),!0)},left:function(){return!!(e=t.row.findPrevEditableCell(o))&&(e.edit(),!0)},right:function(){return!!(e=t.row.findNextEditableCell(o))&&(e.edit(),!0)},up:function(){var e=t.table.rowManager.prevDisplayRow(t.row,!0);e&&e.cells[o].edit()},down:function(){var e=t.table.rowManager.nextDisplayRow(t.row,!0);e&&e.cells[o].edit()}}},Cell.prototype.getIndex=function(){this.row.getCellIndex(this)},Cell.prototype.getComponent=function(){return this.component||(this.component=new CellComponent(this)),this.component};var FooterManager=function(t){this.table=t,this.active=!1,this.element=this.createElement(),this.external=!1,this.links=[],this._initialize()};FooterManager.prototype.createElement=function(){var t=document.createElement("div");return t.classList.add("tabulator-footer"),t},FooterManager.prototype._initialize=function(t){if(this.table.options.footerElement)switch(_typeof(this.table.options.footerElement)){case"string":"<"===this.table.options.footerElement[0]?this.element.innerHTML=this.table.options.footerElement:(this.external=!0,this.element=document.querySelector(this.table.options.footerElement));break;default:this.element=this.table.options.footerElement}},FooterManager.prototype.getElement=function(){return this.element},FooterManager.prototype.append=function(t,e){this.activate(e),this.element.appendChild(t),this.table.rowManager.adjustTableSize()},FooterManager.prototype.prepend=function(t,e){this.activate(e),this.element.insertBefore(t,this.element.firstChild),this.table.rowManager.adjustTableSize()},FooterManager.prototype.remove=function(t){t.parentNode.removeChild(t),this.deactivate()},FooterManager.prototype.deactivate=function(t){this.element.firstChild&&!t||(this.external||this.element.parentNode.removeChild(this.element),this.active=!1)},FooterManager.prototype.activate=function(t){this.active||(this.active=!0,this.external||(this.table.element.appendChild(this.getElement()),this.table.element.style.display="")),t&&this.links.push(t)},FooterManager.prototype.redraw=function(){this.links.forEach(function(t){t.footerRedraw()})};var Tabulator=function t(e,o){this.options={},this.columnManager=null,this.rowManager=null,this.footerManager=null,this.vdomHoz=null,this.browser="",this.browserSlow=!1,this.browserMobile=!1,this.rtl=!1,this.modules={},this.initializeElement(e)&&(this.initializeOptions(o||{}),this._create()),t.prototype.comms.register(this)};Tabulator.prototype.defaultOptions={height:!1,minHeight:!1,maxHeight:!1,layout:"fitData",layoutColumnsOnNewData:!1,columnMinWidth:40,columnHeaderVertAlign:"top",columnVertAlign:!1,resizableColumns:!0,resizableRows:!1,autoResize:!0,columns:[],cellHozAlign:"",cellVertAlign:"",headerHozAlign:"",data:[],autoColumns:!1,autoColumnsDefinitions:!1,reactiveData:!1,nestedFieldSeparator:".",tooltips:!1,tooltipsHeader:!1,tooltipGenerationMode:"load",initialSort:!1,initialFilter:!1,initialHeaderFilter:!1,columnHeaderSortMulti:!0,sortOrderReverse:!1,headerSort:!0,headerSortTristate:!1,headerSortElement:"<div class='tabulator-arrow'></div>",footerElement:!1,index:"id",textDirection:"auto",keybindings:[],tabEndNewRow:!1,invalidOptionWarnings:!0,clipboard:!1,clipboardCopyStyled:!0,clipboardCopyConfig:!1,clipboardCopyFormatter:!1,clipboardCopyRowRange:"active",clipboardPasteParser:"table",clipboardPasteAction:"insert",clipboardCopied:function(){},clipboardPasted:function(){},clipboardPasteError:function(){},downloadDataFormatter:!1,downloadReady:function(t,e){return e},downloadComplete:!1,downloadConfig:{},downloadRowRange:"active",dataTree:!1,dataTreeFilter:!0,dataTreeSort:!0,dataTreeElementColumn:!1,dataTreeBranchElement:!0,dataTreeChildIndent:9,dataTreeChildField:"_children",dataTreeCollapseElement:!1,dataTreeExpandElement:!1,dataTreeStartExpanded:!1,dataTreeRowExpanded:function(){},dataTreeRowCollapsed:function(){},dataTreeChildColumnCalcs:!1,dataTreeSelectPropagate:!1,printAsHtml:!1,printFormatter:!1,printHeader:!1,printFooter:!1,printCopyStyle:!0,printStyled:!0,printVisibleRows:!0,printRowRange:"visible",printConfig:{},addRowPos:"bottom",selectable:"highlight",selectableRangeMode:"drag",selectableRollingSelection:!0,selectablePersistence:!0,selectableCheck:function(t,e){return!0},headerFilterLiveFilterDelay:300,headerFilterPlaceholder:!1,headerVisible:!0,history:!1,locale:!1,langs:{},virtualDom:!0,virtualDomBuffer:0,virtualDomHoz:!1,persistentLayout:!1,persistentSort:!1,persistentFilter:!1,persistenceID:"",persistenceMode:!0,persistenceReaderFunc:!1,persistenceWriterFunc:!1,persistence:!1,responsiveLayout:!1,responsiveLayoutCollapseStartOpen:!0,responsiveLayoutCollapseUseFormatters:!0,responsiveLayoutCollapseFormatter:!1,pagination:!1,paginationSize:!1,paginationInitialPage:1,paginationButtonCount:5,paginationSizeSelector:!1,paginationElement:!1,paginationDataSent:{},paginationDataReceived:{},paginationAddRow:"page",ajaxURL:!1,ajaxURLGenerator:!1,ajaxParams:{},ajaxConfig:"get",ajaxContentType:"form",ajaxRequestFunc:!1,ajaxLoader:!0,ajaxLoaderLoading:!1,ajaxLoaderError:!1,ajaxFiltering:!1,ajaxSorting:!1,ajaxProgressiveLoad:!1,ajaxProgressiveLoadDelay:0,ajaxProgressiveLoadScrollMargin:0,groupBy:!1,groupStartOpen:!0,groupValues:!1,groupUpdateOnCellEdit:!1,groupHeader:!1,groupHeaderPrint:null,groupHeaderClipboard:null,groupHeaderHtmlOutput:null,groupHeaderDownload:null,htmlOutputConfig:!1,movableColumns:!1,movableRows:!1,movableRowsConnectedTables:!1,movableRowsConnectedElements:!1,movableRowsSender:!1,movableRowsReceiver:"insert",movableRowsSendingStart:function(){},movableRowsSent:function(){},movableRowsSentFailed:function(){},movableRowsSendingStop:function(){},movableRowsReceivingStart:function(){},movableRowsReceived:function(){},movableRowsReceivedFailed:function(){},movableRowsReceivingStop:function(){},movableRowsElementDrop:function(){},scrollToRowPosition:"top",scrollToRowIfVisible:!0,scrollToColumnPosition:"left",scrollToColumnIfVisible:!0,rowFormatter:!1,rowFormatterPrint:null,rowFormatterClipboard:null,rowFormatterHtmlOutput:null,placeholder:!1,tableBuilding:function(){},tableBuilt:function(){},renderStarted:function(){},renderComplete:function(){},rowClick:!1,rowDblClick:!1,rowContext:!1,rowTap:!1,rowDblTap:!1,rowTapHold:!1,rowMouseEnter:!1,rowMouseLeave:!1,rowMouseOver:!1,rowMouseOut:!1,rowMouseMove:!1,rowContextMenu:!1,rowClickMenu:!1,rowAdded:function(){},rowDeleted:function(){},rowMoved:function(){},rowUpdated:function(){},rowSelectionChanged:function(){},rowSelected:function(){},rowDeselected:function(){},rowResized:function(){},cellClick:!1,cellDblClick:!1,cellContext:!1,cellTap:!1,cellDblTap:!1,cellTapHold:!1,cellMouseEnter:!1,cellMouseLeave:!1,cellMouseOver:!1,cellMouseOut:!1,cellMouseMove:!1,cellEditing:function(){},cellEdited:function(){},cellEditCancelled:function(){},columnMoved:!1,columnResized:function(){},columnTitleChanged:function(){},columnVisibilityChanged:function(){},htmlImporting:function(){},htmlImported:function(){},dataLoading:function(){},dataLoaded:function(){},dataEdited:!1,dataChanged:!1,ajaxRequesting:function(){},ajaxResponse:!1,ajaxError:function(){},dataFiltering:!1,dataFiltered:!1,dataSorting:function(){},dataSorted:function(){},groupToggleElement:"arrow",groupClosedShowCalcs:!1,dataGrouping:function(){},dataGrouped:!1,groupVisibilityChanged:function(){},groupClick:!1,groupDblClick:!1,groupContext:!1,groupContextMenu:!1,groupClickMenu:!1,groupTap:!1,groupDblTap:!1,groupTapHold:!1,columnCalcs:!0,pageLoaded:function(){},localized:function(){},validationMode:"blocking",validationFailed:function(){},historyUndo:function(){},historyRedo:function(){},scrollHorizontal:function(){},scrollVertical:function(){}},Tabulator.prototype.initializeOptions=function(t){if(!1!==t.invalidOptionWarnings)for(var e in t)void 0===this.defaultOptions[e]&&console.warn("Invalid table constructor option:",e);for(var e in this.defaultOptions)e in t?this.options[e]=t[e]:Array.isArray(this.defaultOptions[e])?this.options[e]=Object.assign([],this.defaultOptions[e]):"object"===_typeof(this.defaultOptions[e])&&null!==this.defaultOptions[e]?this.options[e]=Object.assign({},this.defaultOptions[e]):this.options[e]=this.defaultOptions[e]},Tabulator.prototype.initializeElement=function(t){return"undefined"!=typeof HTMLElement&&t instanceof HTMLElement?(this.element=t,!0):"string"==typeof t?(this.element=document.querySelector(t),!!this.element||(console.error("Tabulator Creation Error - no element found matching selector: ",t),!1)):(console.error("Tabulator Creation Error - Invalid element provided:",t),!1)},Tabulator.prototype.rtlCheck=function(){var t=window.getComputedStyle(this.element);switch(this.options.textDirection){case"auto":if("rtl"!==t.direction)break;case"rtl":this.element.classList.add("tabulator-rtl"),this.rtl=!0;break;case"ltr":this.element.classList.add("tabulator-ltr");default:this.rtl=!1}},Tabulator.prototype._mapDepricatedFunctionality=function(){(this.options.persistentLayout||this.options.persistentSort||this.options.persistentFilter)&&(this.options.persistence||(this.options.persistence={})),this.options.dataEdited&&(console.warn("DEPRECATION WARNING - dataEdited option has been deprecated, please use the dataChanged option instead"),this.options.dataChanged=this.options.dataEdited),this.options.downloadDataFormatter&&console.warn("DEPRECATION WARNING - downloadDataFormatter option has been deprecated"),void 0!==this.options.clipboardCopyHeader&&(this.options.columnHeaders=this.options.clipboardCopyHeader,console.warn("DEPRECATION WARNING - clipboardCopyHeader option has been deprecated, please use the columnHeaders property on the clipboardCopyConfig option")),!0!==this.options.printVisibleRows&&(console.warn("printVisibleRows option is deprecated, you should now use the printRowRange option"),this.options.persistence.printRowRange="active"),!0!==this.options.printCopyStyle&&(console.warn("printCopyStyle option is deprecated, you should now use the printStyled option"),this.options.persistence.printStyled=this.options.printCopyStyle),this.options.persistentLayout&&(console.warn("persistentLayout option is deprecated, you should now use the persistence option"),!0!==this.options.persistence&&void 0===this.options.persistence.columns&&(this.options.persistence.columns=!0)),this.options.persistentSort&&(console.warn("persistentSort option is deprecated, you should now use the persistence option"),!0!==this.options.persistence&&void 0===this.options.persistence.sort&&(this.options.persistence.sort=!0)),this.options.persistentFilter&&(console.warn("persistentFilter option is deprecated, you should now use the persistence option"),!0!==this.options.persistence&&void 0===this.options.persistence.filter&&(this.options.persistence.filter=!0)),this.options.columnVertAlign&&(console.warn("columnVertAlign option is deprecated, you should now use the columnHeaderVertAlign option"),this.options.columnHeaderVertAlign=this.options.columnVertAlign)},Tabulator.prototype._clearSelection=function(){this.element.classList.add("tabulator-block-select"),window.getSelection?window.getSelection().empty?window.getSelection().empty():window.getSelection().removeAllRanges&&window.getSelection().removeAllRanges():document.selection&&document.selection.empty(),this.element.classList.remove("tabulator-block-select")},Tabulator.prototype._create=function(){this._clearObjectPointers(),this._mapDepricatedFunctionality(),this.bindModules(),this.rtlCheck(),"TABLE"===this.element.tagName&&this.modExists("htmlTableImport",!0)&&this.modules.htmlTableImport.parseTable(),this.columnManager=new ColumnManager(this),this.rowManager=new RowManager(this),this.footerManager=new FooterManager(this),this.columnManager.setRowManager(this.rowManager),this.rowManager.setColumnManager(this.columnManager),this.options.virtualDomHoz&&(this.vdomHoz=new VDomHoz(this)),this._buildElement(),this._loadInitialData()},Tabulator.prototype._clearObjectPointers=function(){this.options.columns=this.options.columns.slice(0),this.options.reactiveData||(this.options.data=this.options.data.slice(0))},Tabulator.prototype._buildElement=function(){var t=this,e=this.element,o=this.modules,i=this.options;for(i.tableBuilding.call(this),e.classList.add("tabulator"),e.setAttribute("role","grid");e.firstChild;)e.removeChild(e.firstChild);i.height&&(i.height=isNaN(i.height)?i.height:i.height+"px",e.style.height=i.height),!1!==i.minHeight&&(i.minHeight=isNaN(i.minHeight)?i.minHeight:i.minHeight+"px",e.style.minHeight=i.minHeight),!1!==i.maxHeight&&(i.maxHeight=isNaN(i.maxHeight)?i.maxHeight:i.maxHeight+"px",e.style.maxHeight=i.maxHeight),this.columnManager.initialize(),this.rowManager.initialize(),this._detectBrowser(),this.modExists("layout",!0)&&o.layout.initialize(i.layout),o.localize.initialize(),!1!==i.headerFilterPlaceholder&&o.localize.setHeaderFilterPlaceholder(i.headerFilterPlaceholder);for(var n in i.langs)o.localize.installLang(n,i.langs[n]);if(o.localize.setLocale(i.locale),"string"==typeof i.placeholder){var l=document.createElement("div");l.classList.add("tabulator-placeholder");var s=document.createElement("span");s.innerHTML=i.placeholder,l.appendChild(s),i.placeholder=l}if(e.appendChild(this.columnManager.getElement()),e.appendChild(this.rowManager.getElement()),i.footerElement&&this.footerManager.activate(),i.persistence&&this.modExists("persistence",!0)&&o.persistence.initialize(),i.persistence&&this.modExists("persistence",!0)&&o.persistence.config.columns&&(i.columns=o.persistence.load("columns",i.columns)),i.movableRows&&this.modExists("moveRow")&&o.moveRow.initialize(),i.autoColumns&&this.options.data&&this.columnManager.generateColumnsFromRowData(this.options.data),this.modExists("columnCalcs")&&o.columnCalcs.initialize(),this.columnManager.setColumns(i.columns),i.dataTree&&this.modExists("dataTree",!0)&&o.dataTree.initialize(),this.modExists("frozenRows")&&this.modules.frozenRows.initialize(),(i.persistence&&this.modExists("persistence",!0)&&o.persistence.config.sort||i.initialSort)&&this.modExists("sort",!0)){var a=[];i.persistence&&this.modExists("persistence",!0)&&o.persistence.config.sort?!1===(a=o.persistence.load("sort"))&&i.initialSort&&(a=i.initialSort):i.initialSort&&(a=i.initialSort),o.sort.setSort(a)}if((i.persistence&&this.modExists("persistence",!0)&&o.persistence.config.filter||i.initialFilter)&&this.modExists("filter",!0)){var r=[];i.persistence&&this.modExists("persistence",!0)&&o.persistence.config.filter?!1===(r=o.persistence.load("filter"))&&i.initialFilter&&(r=i.initialFilter):i.initialFilter&&(r=i.initialFilter),o.filter.setFilter(r)}i.initialHeaderFilter&&this.modExists("filter",!0)&&i.initialHeaderFilter.forEach(function(e){var i=t.columnManager.findColumn(e.field);if(!i)return console.warn("Column Filter Error - No matching column found:",e.field),!1;o.filter.setHeaderFilterValue(i,e.value)}),this.modExists("ajax")&&o.ajax.initialize(),i.pagination&&this.modExists("page",!0)&&o.page.initialize(),i.groupBy&&this.modExists("groupRows",!0)&&o.groupRows.initialize(),this.modExists("keybindings")&&o.keybindings.initialize(),this.modExists("selectRow")&&o.selectRow.clearSelectionData(!0),i.autoResize&&this.modExists("resizeTable")&&o.resizeTable.initialize(),this.modExists("clipboard")&&o.clipboard.initialize(),i.printAsHtml&&this.modExists("print")&&o.print.initialize(),i.tableBuilt.call(this)},Tabulator.prototype._loadInitialData=function(){var t=this;if(t.options.pagination&&t.modExists("page"))if(t.modules.page.reset(!0,!0),"local"==t.options.pagination){if(t.options.data.length)t.rowManager.setData(t.options.data,!1,!0);else{if((t.options.ajaxURL||t.options.ajaxURLGenerator)&&t.modExists("ajax"))return void t.modules.ajax.loadData(!1,!0).then(function(){}).catch(function(){t.options.paginationInitialPage&&t.modules.page.setPage(t.options.paginationInitialPage)});t.rowManager.setData(t.options.data,!1,!0)}t.options.paginationInitialPage&&t.modules.page.setPage(t.options.paginationInitialPage)}else t.options.ajaxURL?t.modules.page.setPage(t.options.paginationInitialPage).then(function(){}).catch(function(){}):t.rowManager.setData([],!1,!0);else t.options.data.length?t.rowManager.setData(t.options.data):(t.options.ajaxURL||t.options.ajaxURLGenerator)&&t.modExists("ajax")?t.modules.ajax.loadData(!1,!0).then(function(){}).catch(function(){}):t.rowManager.setData(t.options.data,!1,!0)},Tabulator.prototype.destroy=function(){var t=this.element;for(Tabulator.prototype.comms.deregister(this),this.options.reactiveData&&this.modExists("reactiveData",!0)&&this.modules.reactiveData.unwatchData(),this.rowManager.rows.forEach(function(t){t.wipe()}),this.rowManager.rows=[],this.rowManager.activeRows=[],this.rowManager.displayRows=[],this.options.autoResize&&this.modExists("resizeTable")&&this.modules.resizeTable.clearBindings(),this.modExists("keybindings")&&this.modules.keybindings.clearBindings();t.firstChild;)t.removeChild(t.firstChild);t.classList.remove("tabulator")},Tabulator.prototype._detectBrowser=function(){var t=navigator.userAgent||navigator.vendor||window.opera;t.indexOf("Trident")>-1?(this.browser="ie",this.browserSlow=!0):t.indexOf("Edge")>-1?(this.browser="edge",this.browserSlow=!0):t.indexOf("Firefox")>-1?(this.browser="firefox",this.browserSlow=!1):(this.browser="other",this.browserSlow=!1),this.browserMobile=/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino|android|ipad|playbook|silk/i.test(t)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(t.substr(0,4))},Tabulator.prototype.blockRedraw=function(){return this.rowManager.blockRedraw()},Tabulator.prototype.restoreRedraw=function(){return this.rowManager.restoreRedraw()},Tabulator.prototype.setDataFromLocalFile=function(t){var e=this;return new Promise(function(o,i){var n=document.createElement("input");n.type="file",n.accept=t||".json,application/json",n.addEventListener("change",function(t){var l,s=n.files[0],a=new FileReader;a.readAsText(s),a.onload=function(t){try{l=JSON.parse(a.result)}catch(t){return console.warn("File Load Error - File contents is invalid JSON",t),void i(t)}e.setData(l).then(function(t){o(t)}).catch(function(t){o(t)})},a.onerror=function(t){console.warn("File Load Error - Unable to read file"),i()}}),n.click()})},Tabulator.prototype.setData=function(t,e,o){return this.modExists("ajax")&&this.modules.ajax.blockActiveRequest(),this._setData(t,e,o,!1,!0)},Tabulator.prototype._setData=function(t,e,o,i,n){var l=this;return"string"!=typeof t?t?l.rowManager.setData(t,i,n):l.modExists("ajax")&&(l.modules.ajax.getUrl||l.options.ajaxURLGenerator)?"remote"==l.options.pagination&&l.modExists("page",!0)?(l.modules.page.reset(!0,!0),l.modules.page.setPage(1)):l.modules.ajax.loadData(i,n):l.rowManager.setData([],i,n):0==t.indexOf("{")||0==t.indexOf("[")?l.rowManager.setData(JSON.parse(t),i,n):l.modExists("ajax",!0)?(e&&l.modules.ajax.setParams(e),o&&l.modules.ajax.setConfig(o),l.modules.ajax.setUrl(t),"remote"==l.options.pagination&&l.modExists("page",!0)?(l.modules.page.reset(!0,!0),l.modules.page.setPage(1)):l.modules.ajax.loadData(i,n)):void 0},Tabulator.prototype.clearData=function(){this.modExists("ajax")&&this.modules.ajax.blockActiveRequest(),this.rowManager.clearData()},Tabulator.prototype.getData=function(t){return!0===t&&(console.warn("passing a boolean to the getData function is deprecated, you should now pass the string 'active'"),t="active"),this.rowManager.getData(t)},Tabulator.prototype.getDataCount=function(t){return!0===t&&(console.warn("passing a boolean to the getDataCount function is deprecated, you should now pass the string 'active'"),t="active"),this.rowManager.getDataCount(t)},Tabulator.prototype.searchRows=function(t,e,o){if(this.modExists("filter",!0))return this.modules.filter.search("rows",t,e,o)},Tabulator.prototype.searchData=function(t,e,o){if(this.modExists("filter",!0))return this.modules.filter.search("data",t,e,o)},Tabulator.prototype.getHtml=function(t,e,o){if(this.modExists("export",!0))return this.modules.export.getHtml(t,e,o)},Tabulator.prototype.print=function(t,e,o){if(this.modExists("print",!0))return this.modules.print.printFullscreen(t,e,o)},Tabulator.prototype.getAjaxUrl=function(){if(this.modExists("ajax",!0))return this.modules.ajax.getUrl()},Tabulator.prototype.replaceData=function(t,e,o){return this.modExists("ajax")&&this.modules.ajax.blockActiveRequest(),this._setData(t,e,o,!0)},Tabulator.prototype.updateData=function(t){var e=this,o=this,i=0;return new Promise(function(n,l){e.modExists("ajax")&&e.modules.ajax.blockActiveRequest(),"string"==typeof t&&(t=JSON.parse(t)),t?t.forEach(function(t){var e=o.rowManager.findRow(t[o.options.index]);e&&(i++,e.updateData(t).then(function(){--i||n()}))}):(console.warn("Update Error - No data provided"),l("Update Error - No data provided"))})},Tabulator.prototype.addData=function(t,e,o){var i=this;return new Promise(function(n,l){i.modExists("ajax")&&i.modules.ajax.blockActiveRequest(),"string"==typeof t&&(t=JSON.parse(t)),t?i.rowManager.addRows(t,e,o).then(function(t){var e=[];t.forEach(function(t){e.push(t.getComponent())}),n(e)}):(console.warn("Update Error - No data provided"),l("Update Error - No data provided"))})},Tabulator.prototype.updateOrAddData=function(t){var e=this,o=this,i=[],n=0;return new Promise(function(l,s){e.modExists("ajax")&&e.modules.ajax.blockActiveRequest(),"string"==typeof t&&(t=JSON.parse(t)),t?t.forEach(function(t){var e=o.rowManager.findRow(t[o.options.index]);n++,e?e.updateData(t).then(function(){n--,i.push(e.getComponent()),n||l(i)}):o.rowManager.addRows(t).then(function(t){n--,i.push(t[0].getComponent()),n||l(i)})}):(console.warn("Update Error - No data provided"),s("Update Error - No data provided"))})},Tabulator.prototype.getRow=function(t){var e=this.rowManager.findRow(t);return e?e.getComponent():(console.warn("Find Error - No matching row found:",t),!1)},Tabulator.prototype.getRowFromPosition=function(t,e){var o=this.rowManager.getRowFromPosition(t,e);return o?o.getComponent():(console.warn("Find Error - No matching row found:",t),!1)},Tabulator.prototype.deleteRow=function(t){var e=this;return new Promise(function(o,i){function n(){++s==t.length&&a&&(l.rowManager.reRenderInPosition(),o())}var l=e,s=0,a=0,r=[];Array.isArray(t)||(t=[t]),t.forEach(function(t){var o=e.rowManager.findRow(t,!0);o?r.push(o):(console.warn("Delete Error - No matching row found:",t),i("Delete Error - No matching row found"),n())}),r.sort(function(t,o){return e.rowManager.rows.indexOf(t)>e.rowManager.rows.indexOf(o)?1:-1}),r.forEach(function(t){t.delete().then(function(){a++,n()}).catch(function(t){n(),i(t)})})})},Tabulator.prototype.addRow=function(t,e,o){var i=this;return new Promise(function(n,l){"string"==typeof t&&(t=JSON.parse(t)),i.rowManager.addRows(t,e,o).then(function(t){i.modExists("columnCalcs")&&i.modules.columnCalcs.recalc(i.rowManager.activeRows),n(t[0].getComponent())})})},Tabulator.prototype.updateOrAddRow=function(t,e){var o=this;return new Promise(function(i,n){var l=o.rowManager.findRow(t);"string"==typeof e&&(e=JSON.parse(e)),l?l.updateData(e).then(function(){o.modExists("columnCalcs")&&o.modules.columnCalcs.recalc(o.rowManager.activeRows),i(l.getComponent())}).catch(function(t){n(t)}):l=o.rowManager.addRows(e).then(function(t){o.modExists("columnCalcs")&&o.modules.columnCalcs.recalc(o.rowManager.activeRows),i(t[0].getComponent())}).catch(function(t){n(t)})})},Tabulator.prototype.updateRow=function(t,e){var o=this;return new Promise(function(i,n){var l=o.rowManager.findRow(t);"string"==typeof e&&(e=JSON.parse(e)),l?l.updateData(e).then(function(){i(l.getComponent())}).catch(function(t){n(t)}):(console.warn("Update Error - No matching row found:",t),n("Update Error - No matching row found"))})},Tabulator.prototype.scrollToRow=function(t,e,o){var i=this;return new Promise(function(n,l){var s=i.rowManager.findRow(t);s?i.rowManager.scrollToRow(s,e,o).then(function(){n()}).catch(function(t){l(t)}):(console.warn("Scroll Error - No matching row found:",t),l("Scroll Error - No matching row found"))})},Tabulator.prototype.moveRow=function(t,e,o){var i=this.rowManager.findRow(t);i?i.moveToRow(e,o):console.warn("Move Error - No matching row found:",t)},Tabulator.prototype.getRows=function(t){return!0===t&&(console.warn("passing a boolean to the getRows function is deprecated, you should now pass the string 'active'"),t="active"),this.rowManager.getComponents(t)},Tabulator.prototype.getRowPosition=function(t,e){var o=this.rowManager.findRow(t);return o?this.rowManager.getRowPosition(o,e):(console.warn("Position Error - No matching row found:",t),!1)},Tabulator.prototype.copyToClipboard=function(t){this.modExists("clipboard",!0)&&this.modules.clipboard.copy(t)},Tabulator.prototype.setColumns=function(t){this.columnManager.setColumns(t)},Tabulator.prototype.getColumns=function(t){return this.columnManager.getComponents(t)},Tabulator.prototype.getColumn=function(t){var e=this.columnManager.findColumn(t);return e?e.getComponent():(console.warn("Find Error - No matching column found:",t),!1)},
+Tabulator.prototype.getColumnDefinitions=function(){return this.columnManager.getDefinitionTree()},Tabulator.prototype.getColumnLayout=function(){if(this.modExists("persistence",!0))return this.modules.persistence.parseColumns(this.columnManager.getColumns())},Tabulator.prototype.setColumnLayout=function(t){return!!this.modExists("persistence",!0)&&(this.columnManager.setColumns(this.modules.persistence.mergeDefinition(this.options.columns,t)),!0)},Tabulator.prototype.showColumn=function(t){var e=this.columnManager.findColumn(t);if(!e)return console.warn("Column Show Error - No matching column found:",t),!1;e.show(),this.options.responsiveLayout&&this.modExists("responsiveLayout",!0)&&this.modules.responsiveLayout.update()},Tabulator.prototype.hideColumn=function(t){var e=this.columnManager.findColumn(t);if(!e)return console.warn("Column Hide Error - No matching column found:",t),!1;e.hide(),this.options.responsiveLayout&&this.modExists("responsiveLayout",!0)&&this.modules.responsiveLayout.update()},Tabulator.prototype.toggleColumn=function(t){var e=this.columnManager.findColumn(t);if(!e)return console.warn("Column Visibility Toggle Error - No matching column found:",t),!1;e.visible?e.hide():e.show()},Tabulator.prototype.addColumn=function(t,e,o){var i=this;return new Promise(function(n,l){var s=i.columnManager.findColumn(o);i.columnManager.addColumn(t,e,s).then(function(t){n(t.getComponent())}).catch(function(t){l(t)})})},Tabulator.prototype.deleteColumn=function(t){var e=this;return new Promise(function(o,i){var n=e.columnManager.findColumn(t);n?n.delete().then(function(){o()}).catch(function(t){i(t)}):(console.warn("Column Delete Error - No matching column found:",t),i())})},Tabulator.prototype.updateColumnDefinition=function(t,e){var o=this;return new Promise(function(i,n){var l=o.columnManager.findColumn(t);l?l.updateDefinition(e).then(function(t){i(t)}).catch(function(t){n(t)}):(console.warn("Column Update Error - No matching column found:",t),n())})},Tabulator.prototype.moveColumn=function(t,e,o){var i=this.columnManager.findColumn(t),n=this.columnManager.findColumn(e);i?n?this.columnManager.moveColumn(i,n,o):console.warn("Move Error - No matching column found:",n):console.warn("Move Error - No matching column found:",t)},Tabulator.prototype.scrollToColumn=function(t,e,o){var i=this;return new Promise(function(n,l){var s=i.columnManager.findColumn(t);s?i.columnManager.scrollToColumn(s,e,o).then(function(){n()}).catch(function(t){l(t)}):(console.warn("Scroll Error - No matching column found:",t),l("Scroll Error - No matching column found"))})},Tabulator.prototype.setLocale=function(t){this.modules.localize.setLocale(t)},Tabulator.prototype.getLocale=function(){return this.modules.localize.getLocale()},Tabulator.prototype.getLang=function(t){return this.modules.localize.getLang(t)},Tabulator.prototype.redraw=function(t){this.columnManager.redraw(t),this.rowManager.redraw(t)},Tabulator.prototype.setHeight=function(t){"classic"!==this.rowManager.renderMode?(this.options.height=isNaN(t)?t:t+"px",this.element.style.height=this.options.height,this.rowManager.setRenderMode(),this.rowManager.redraw()):console.warn("setHeight function is not available in classic render mode")},Tabulator.prototype.setSort=function(t,e){this.modExists("sort",!0)&&(this.modules.sort.setSort(t,e),this.rowManager.sorterRefresh())},Tabulator.prototype.getSorters=function(){if(this.modExists("sort",!0))return this.modules.sort.getSort()},Tabulator.prototype.clearSort=function(){this.modExists("sort",!0)&&(this.modules.sort.clear(),this.rowManager.sorterRefresh())},Tabulator.prototype.setFilter=function(t,e,o,i){this.modExists("filter",!0)&&(this.modules.filter.setFilter(t,e,o,i),this.rowManager.filterRefresh())},Tabulator.prototype.addFilter=function(t,e,o,i){this.modExists("filter",!0)&&(this.modules.filter.addFilter(t,e,o,i),this.rowManager.filterRefresh())},Tabulator.prototype.getFilters=function(t){if(this.modExists("filter",!0))return this.modules.filter.getFilters(t)},Tabulator.prototype.setHeaderFilterFocus=function(t){if(this.modExists("filter",!0)){var e=this.columnManager.findColumn(t);if(!e)return console.warn("Column Filter Focus Error - No matching column found:",t),!1;this.modules.filter.setHeaderFilterFocus(e)}},Tabulator.prototype.getHeaderFilterValue=function(t){if(this.modExists("filter",!0)){var e=this.columnManager.findColumn(t);if(e)return this.modules.filter.getHeaderFilterValue(e);console.warn("Column Filter Error - No matching column found:",t)}},Tabulator.prototype.setHeaderFilterValue=function(t,e){if(this.modExists("filter",!0)){var o=this.columnManager.findColumn(t);if(!o)return console.warn("Column Filter Error - No matching column found:",t),!1;this.modules.filter.setHeaderFilterValue(o,e)}},Tabulator.prototype.getHeaderFilters=function(){if(this.modExists("filter",!0))return this.modules.filter.getHeaderFilters()},Tabulator.prototype.removeFilter=function(t,e,o){this.modExists("filter",!0)&&(this.modules.filter.removeFilter(t,e,o),this.rowManager.filterRefresh())},Tabulator.prototype.clearFilter=function(t){this.modExists("filter",!0)&&(this.modules.filter.clearFilter(t),this.rowManager.filterRefresh())},Tabulator.prototype.clearHeaderFilter=function(){this.modExists("filter",!0)&&(this.modules.filter.clearHeaderFilter(),this.rowManager.filterRefresh())},Tabulator.prototype.selectRow=function(t){this.modExists("selectRow",!0)&&(!0===t&&(console.warn("passing a boolean to the selectRowselectRow function is deprecated, you should now pass the string 'active'"),t="active"),this.modules.selectRow.selectRows(t))},Tabulator.prototype.deselectRow=function(t){this.modExists("selectRow",!0)&&this.modules.selectRow.deselectRows(t)},Tabulator.prototype.toggleSelectRow=function(t){this.modExists("selectRow",!0)&&this.modules.selectRow.toggleRow(t)},Tabulator.prototype.getSelectedRows=function(){if(this.modExists("selectRow",!0))return this.modules.selectRow.getSelectedRows()},Tabulator.prototype.getSelectedData=function(){if(this.modExists("selectRow",!0))return this.modules.selectRow.getSelectedData()},Tabulator.prototype.getInvalidCells=function(){if(this.modExists("validate",!0))return this.modules.validate.getInvalidCells()},Tabulator.prototype.clearCellValidation=function(t){var e=this;this.modExists("validate",!0)&&(t||(t=this.modules.validate.getInvalidCells()),Array.isArray(t)||(t=[t]),t.forEach(function(t){e.modules.validate.clearValidation(t._getSelf())}))},Tabulator.prototype.validate=function(t){var e=[];return this.rowManager.rows.forEach(function(t){var o=t.validate();!0!==o&&(e=e.concat(o))}),!e.length||e},Tabulator.prototype.setMaxPage=function(t){if(!this.options.pagination||!this.modExists("page"))return!1;this.modules.page.setMaxPage(t)},Tabulator.prototype.setPage=function(t){return this.options.pagination&&this.modExists("page")?this.modules.page.setPage(t):new Promise(function(t,e){e()})},Tabulator.prototype.setPageToRow=function(t){var e=this;return new Promise(function(o,i){e.options.pagination&&e.modExists("page")?(t=e.rowManager.findRow(t),t?e.modules.page.setPageToRow(t).then(function(){o()}).catch(function(){i()}):i()):i()})},Tabulator.prototype.setPageSize=function(t){if(!this.options.pagination||!this.modExists("page"))return!1;this.modules.page.setPageSize(t),this.modules.page.setPage(1).then(function(){}).catch(function(){})},Tabulator.prototype.getPageSize=function(){if(this.options.pagination&&this.modExists("page",!0))return this.modules.page.getPageSize()},Tabulator.prototype.previousPage=function(){if(!this.options.pagination||!this.modExists("page"))return!1;this.modules.page.previousPage()},Tabulator.prototype.nextPage=function(){if(!this.options.pagination||!this.modExists("page"))return!1;this.modules.page.nextPage()},Tabulator.prototype.getPage=function(){return!(!this.options.pagination||!this.modExists("page"))&&this.modules.page.getPage()},Tabulator.prototype.getPageMax=function(){return!(!this.options.pagination||!this.modExists("page"))&&this.modules.page.getPageMax()},Tabulator.prototype.setGroupBy=function(t){if(!this.modExists("groupRows",!0))return!1;this.options.groupBy=t,this.modules.groupRows.initialize(),this.rowManager.refreshActiveData("display"),this.options.persistence&&this.modExists("persistence",!0)&&this.modules.persistence.config.group&&this.modules.persistence.save("group")},Tabulator.prototype.setGroupValues=function(t){if(!this.modExists("groupRows",!0))return!1;this.options.groupValues=t,this.modules.groupRows.initialize(),this.rowManager.refreshActiveData("display"),this.options.persistence&&this.modExists("persistence",!0)&&this.modules.persistence.config.group&&this.modules.persistence.save("group")},Tabulator.prototype.setGroupStartOpen=function(t){if(!this.modExists("groupRows",!0))return!1;this.options.groupStartOpen=t,this.modules.groupRows.initialize(),this.options.groupBy?(this.rowManager.refreshActiveData("group"),this.options.persistence&&this.modExists("persistence",!0)&&this.modules.persistence.config.group&&this.modules.persistence.save("group")):console.warn("Grouping Update - cant refresh view, no groups have been set")},Tabulator.prototype.setGroupHeader=function(t){if(!this.modExists("groupRows",!0))return!1;this.options.groupHeader=t,this.modules.groupRows.initialize(),this.options.groupBy?(this.rowManager.refreshActiveData("group"),this.options.persistence&&this.modExists("persistence",!0)&&this.modules.persistence.config.group&&this.modules.persistence.save("group")):console.warn("Grouping Update - cant refresh view, no groups have been set")},Tabulator.prototype.getGroups=function(t){return!!this.modExists("groupRows",!0)&&this.modules.groupRows.getGroups(!0)},Tabulator.prototype.getGroupedData=function(){if(this.modExists("groupRows",!0))return this.options.groupBy?this.modules.groupRows.getGroupedData():this.getData()},Tabulator.prototype.getEditedCells=function(){if(this.modExists("edit",!0))return this.modules.edit.getEditedCells()},Tabulator.prototype.clearCellEdited=function(t){var e=this;this.modExists("edit",!0)&&(t||(t=this.modules.edit.getEditedCells()),Array.isArray(t)||(t=[t]),t.forEach(function(t){e.modules.edit.clearEdited(t._getSelf())}))},Tabulator.prototype.getCalcResults=function(){return!!this.modExists("columnCalcs",!0)&&this.modules.columnCalcs.getResults()},Tabulator.prototype.recalc=function(){this.modExists("columnCalcs",!0)&&this.modules.columnCalcs.recalcAll(this.rowManager.activeRows)},Tabulator.prototype.navigatePrev=function(){var t=!1;return!(!this.modExists("edit",!0)||!(t=this.modules.edit.currentCell))&&t.nav().prev()},Tabulator.prototype.navigateNext=function(){var t=!1;return!(!this.modExists("edit",!0)||!(t=this.modules.edit.currentCell))&&t.nav().next()},Tabulator.prototype.navigateLeft=function(){var t=!1;return!(!this.modExists("edit",!0)||!(t=this.modules.edit.currentCell))&&(e.preventDefault(),t.nav().left())},Tabulator.prototype.navigateRight=function(){var t=!1;return!(!this.modExists("edit",!0)||!(t=this.modules.edit.currentCell))&&(e.preventDefault(),t.nav().right())},Tabulator.prototype.navigateUp=function(){var t=!1;return!(!this.modExists("edit",!0)||!(t=this.modules.edit.currentCell))&&(e.preventDefault(),t.nav().up())},Tabulator.prototype.navigateDown=function(){var t=!1;return!(!this.modExists("edit",!0)||!(t=this.modules.edit.currentCell))&&(e.preventDefault(),t.nav().down())},Tabulator.prototype.undo=function(){return!(!this.options.history||!this.modExists("history",!0))&&this.modules.history.undo()},Tabulator.prototype.redo=function(){return!(!this.options.history||!this.modExists("history",!0))&&this.modules.history.redo()},Tabulator.prototype.getHistoryUndoSize=function(){return!(!this.options.history||!this.modExists("history",!0))&&this.modules.history.getHistoryUndoSize()},Tabulator.prototype.getHistoryRedoSize=function(){return!(!this.options.history||!this.modExists("history",!0))&&this.modules.history.getHistoryRedoSize()},Tabulator.prototype.download=function(t,e,o,i){this.modExists("download",!0)&&this.modules.download.download(t,e,o,i)},Tabulator.prototype.downloadToTab=function(t,e,o,i){this.modExists("download",!0)&&this.modules.download.download(t,e,o,i,!0)},Tabulator.prototype.tableComms=function(t,e,o,i){this.modules.comms.receive(t,e,o,i)},Tabulator.prototype.moduleBindings={},Tabulator.prototype.extendModule=function(t,e,o){if(Tabulator.prototype.moduleBindings[t]){var i=Tabulator.prototype.moduleBindings[t].prototype[e];if(i)if("object"==(void 0===o?"undefined":_typeof(o)))for(var n in o)i[n]=o[n];else console.warn("Module Error - Invalid value type, it must be an object");else console.warn("Module Error - property does not exist:",e)}else console.warn("Module Error - module does not exist:",t)},Tabulator.prototype.registerModule=function(t,e){Tabulator.prototype.moduleBindings[t]=e},Tabulator.prototype.bindModules=function(){this.modules={};for(var t in Tabulator.prototype.moduleBindings)this.modules[t]=new Tabulator.prototype.moduleBindings[t](this)},Tabulator.prototype.modExists=function(t,e){return!!this.modules[t]||(e&&console.error("Tabulator Module Not Installed: "+t),!1)},Tabulator.prototype.helpers={elVisible:function(t){return!(t.offsetWidth<=0&&t.offsetHeight<=0)},elOffset:function(t){var e=t.getBoundingClientRect();return{top:e.top+window.pageYOffset-document.documentElement.clientTop,left:e.left+window.pageXOffset-document.documentElement.clientLeft}},deepClone:function(t){var e=Object.assign(Array.isArray(t)?[]:{},t);for(var o in t)null!=t[o]&&"object"===_typeof(t[o])&&(t[o]instanceof Date?e[o]=new Date(t[o]):e[o]=this.deepClone(t[o]));return e}},Tabulator.prototype.comms={tables:[],register:function(t){Tabulator.prototype.comms.tables.push(t)},deregister:function(t){var e=Tabulator.prototype.comms.tables.indexOf(t);e>-1&&Tabulator.prototype.comms.tables.splice(e,1)},lookupTable:function(t,e){var o,i,n=[];if("string"==typeof t){if(o=document.querySelectorAll(t),o.length)for(var l=0;l<o.length;l++)(i=Tabulator.prototype.comms.matchElement(o[l]))&&n.push(i)}else"undefined"!=typeof HTMLElement&&t instanceof HTMLElement||t instanceof Tabulator?(i=Tabulator.prototype.comms.matchElement(t))&&n.push(i):Array.isArray(t)?t.forEach(function(t){n=n.concat(Tabulator.prototype.comms.lookupTable(t))}):e||console.warn("Table Connection Error - Invalid Selector",t);return n},matchElement:function(t){return Tabulator.prototype.comms.tables.find(function(e){return t instanceof Tabulator?e===t:e.element===t})}},Tabulator.prototype.findTable=function(t){var e=Tabulator.prototype.comms.lookupTable(t,!0);return!(Array.isArray(e)&&!e.length)&&e};var Layout=function(t){this.table=t,this.mode=null};Layout.prototype.initialize=function(t){this.modes[t]?this.mode=t:(console.warn("Layout Error - invalid mode set, defaulting to 'fitData' : "+t),this.mode="fitData"),this.table.element.setAttribute("tabulator-layout",this.mode)},Layout.prototype.getMode=function(){return this.mode},Layout.prototype.layout=function(){this.modes[this.mode].call(this,this.table.columnManager.columnsByIndex)},Layout.prototype.modes={fitData:function(t){this.table.options.virtualDomHoz?this.table.vdomHoz.fitDataLayoutOverride():t.forEach(function(t){t.reinitializeWidth()}),this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.update()},fitDataFill:function(t){t.forEach(function(t){t.reinitializeWidth()}),this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.update()},fitDataTable:function(t){t.forEach(function(t){t.reinitializeWidth()}),this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.update()},fitDataStretch:function(t){var e=this,o=0,i=this.table.rowManager.element.clientWidth,n=0,l=!1;t.forEach(function(t,i){t.widthFixed||t.reinitializeWidth(),(e.table.options.responsiveLayout?t.modules.responsive.visible:t.visible)&&(l=t),t.visible&&(o+=t.getWidth())}),l?(n=i-o+l.getWidth(),this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&(l.setWidth(0),this.table.modules.responsiveLayout.update()),n>0?l.setWidth(n):l.reinitializeWidth()):this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.update()},fitColumns:function(t){function e(t){return"string"==typeof t?t.indexOf("%")>-1?n/100*parseInt(t):parseInt(t):t}function o(t,i,n,l){function s(t){return n*(t.column.definition.widthGrow||1)}function a(t){return e(t.width)-n*(t.column.definition.widthShrink||0)}var r=[],u=0,h=0,c=0,d=0,p=0,m=[];return t.forEach(function(t,e){var o=l?a(t):s(t);t.column.minWidth>=o?r.push(t):(m.push(t),p+=l?t.column.definition.widthShrink||1:t.column.definition.widthGrow||1)}),r.length?(r.forEach(function(t){u+=l?t.width-t.column.minWidth:t.column.minWidth,t.width=t.column.minWidth}),h=i-u,c=p?Math.floor(h/p):h,d=h-c*p,d+=o(m,h,c,l)):(d=p?i-Math.floor(i/p)*p:i,m.forEach(function(t){t.width=l?a(t):s(t)})),d}var i=this,n=i.table.element.clientWidth,l=0,s=0,a=0,r=0,u=[],h=[],c=0,d=0,p=0;this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.update(),this.table.rowManager.element.scrollHeight>this.table.rowManager.element.clientHeight&&(n-=this.table.rowManager.element.offsetWidth-this.table.rowManager.element.clientWidth),t.forEach(function(t){var o,i,n;t.visible&&(o=t.definition.width,i=parseInt(t.minWidth),o?(n=e(o),l+=n>i?n:i,t.definition.widthShrink&&(h.push({column:t,width:n>i?n:i}),c+=t.definition.widthShrink)):(u.push({column:t,width:0}),a+=t.definition.widthGrow||1))}),s=n-l,r=Math.floor(s/a);var p=o(u,s,r,!1);u.length&&p>0&&(u[u.length-1].width+=+p),u.forEach(function(t){s-=t.width}),d=Math.abs(p)+s,d>0&&c&&(p=o(h,d,Math.floor(d/c),!0)),h.length&&(h[h.length-1].width-=p),u.forEach(function(t){t.column.setWidth(t.width)}),h.forEach(function(t){t.column.setWidth(t.width)})}},Tabulator.prototype.registerModule("layout",Layout);var Localize=function(t){this.table=t,this.locale="default",this.lang=!1,this.bindings={},this.langList={}};Localize.prototype.initialize=function(){this.langList=Tabulator.prototype.helpers.deepClone(this.langs)},Localize.prototype.setHeaderFilterPlaceholder=function(t){this.langList.default.headerFilters.default=t},Localize.prototype.setHeaderFilterColumnPlaceholder=function(t,e){this.langList.default.headerFilters.columns[t]=e,this.lang&&!this.lang.headerFilters.columns[t]&&(this.lang.headerFilters.columns[t]=e)},Localize.prototype.installLang=function(t,e){this.langList[t]?this._setLangProp(this.langList[t],e):this.langList[t]=e},Localize.prototype._setLangProp=function(t,e){for(var o in e)t[o]&&"object"==_typeof(t[o])?this._setLangProp(t[o],e[o]):t[o]=e[o]},Localize.prototype.setLocale=function(t){function e(t,o){for(var i in t)"object"==_typeof(t[i])?(o[i]||(o[i]={}),e(t[i],o[i])):o[i]=t[i]}var o=this;if(t=t||"default",!0===t&&navigator.language&&(t=navigator.language.toLowerCase()),t&&!o.langList[t]){var i=t.split("-")[0];o.langList[i]?(console.warn("Localization Error - Exact matching locale not found, using closest match: ",t,i),t=i):(console.warn("Localization Error - Matching locale not found, using default: ",t),t="default")}o.locale=t,o.lang=Tabulator.prototype.helpers.deepClone(o.langList.default||{}),"default"!=t&&e(o.langList[t],o.lang),o.table.options.localized.call(o.table,o.locale,o.lang),o._executeBindings()},Localize.prototype.getLocale=function(t){return self.locale},Localize.prototype.getLang=function(t){return t?this.langList[t]:this.lang},Localize.prototype.getText=function(t,e){var t=e?t+"|"+e:t,o=t.split("|");return this._getLangElement(o,this.locale)||""},Localize.prototype._getLangElement=function(t,e){var o=this,i=o.lang;return t.forEach(function(t){var e;i&&(e=i[t],i=void 0!==e&&e)}),i},Localize.prototype.bind=function(t,e){this.bindings[t]||(this.bindings[t]=[]),this.bindings[t].push(e),e(this.getText(t),this.lang)},Localize.prototype._executeBindings=function(){var t=this;for(var e in t.bindings)!function(e){t.bindings[e].forEach(function(o){o(t.getText(e),t.lang)})}(e)},Localize.prototype.langs={default:{groups:{item:"item",items:"items"},columns:{},ajax:{loading:"Loading",error:"Error"},pagination:{page_size:"Page Size",page_title:"Show Page",first:"First",first_title:"First Page",last:"Last",last_title:"Last Page",prev:"Prev",prev_title:"Prev Page",next:"Next",next_title:"Next Page",all:"All"},headerFilters:{default:"filter column...",columns:{}}}},Tabulator.prototype.registerModule("localize",Localize);var Comms=function(t){this.table=t};Comms.prototype.getConnections=function(t){var e,o=this,i=[];return e=Tabulator.prototype.comms.lookupTable(t),e.forEach(function(t){o.table!==t&&i.push(t)}),i},Comms.prototype.send=function(t,e,o,i){var n=this,l=this.getConnections(t);l.forEach(function(t){t.tableComms(n.table.element,e,o,i)}),!l.length&&t&&console.warn("Table Connection Error - No tables matching selector found",t)},Comms.prototype.receive=function(t,e,o,i){if(this.table.modExists(e))return this.table.modules[e].commsReceived(t,o,i);console.warn("Inter-table Comms Error - no such module:",e)},Tabulator.prototype.registerModule("comms",Comms);
\ No newline at end of file
diff --git a/website/js/vendor/tinymce/changelog.txt b/website/js/vendor/tinymce/changelog.txt
new file mode 100644 (file)
index 0000000..aa08a58
--- /dev/null
@@ -0,0 +1,1479 @@
+Version 5.1.5 (2019-12-19)
+    Fixed the UI not working with hybrid devices that accept both touch and mouse events #TNY-4521
+    Fixed the `charmap` dialog initially focusing the first tab of the dialog instead of the search input field #TINY-4342
+    Fixed an exception being raised when inserting content if the caret was directly before or after a `contenteditable="false"` element #TINY-4528
+    Fixed a bug with pasting image URLs when paste as text is enabled #TINY-4523
+Version 5.1.4 (2019-12-11)
+    Fixed dialog contents disappearing when clicking a checkbox for right-to-left languages #TINY-4518
+    Fixed the `legacyoutput` plugin registering legacy formats after editior initialization, causing legacy content to be stripped on the initial load #TINY-4447
+    Fixed search and replace not cycling through results when searching using special characters #TINY-4506
+    Fixed the `visualchars` plugin converting HTML-like text to DOM elements in certain cases #TINY-4507
+    Fixed an issue with the `paste` plugin not sanitizing content in some cases #TINY-4510
+    Fixed HTML comments incorrectly being parsed in certain cases #TINY-4511
+Version 5.1.3 (2019-12-04)
+    Fixed sticky toolbar not undocking when fullscreen mode is activated #TINY-4390
+    Fixed the "Current Window" target not applying when updating links using the link dialog #TINY-4063
+    Fixed disabled menu items not highlighting when focused #TINY-4339
+    Fixed touch events passing through dialog collection items to the content underneath on Android devices #TINY-4431
+    Fixed keyboard navigation of the Help dialog's Keyboard Navigation tab #TINY-4391
+    Fixed search and replace dialog disappearing when finding offscreen matches on iOS devices #TINY-4350
+    Fixed performance issues where sticky toolbar was jumping while scrolling on slower browsers #TINY-4475
+Version 5.1.2 (2019-11-19)
+    Fixed desktop touch devices using `mobile` configuration overrides #TINY-4345
+    Fixed unable to disable the new scrolling toolbar feature #TINY-4345
+    Fixed touch events passing through any pop-up items to the content underneath on Android devices #TINY-4367
+    Fixed the table selector handles throwing JavaScript exceptions for non-table selections #TINY-4338
+    Fixed `cut` operations not removing selected content on Android devices when the `paste` plugin is enabled #TINY-4362
+    Fixed inline toolbar not constrained to the window width by default #TINY-4314
+    Fixed context toolbar split button chevrons pointing right when they should be pointing down #TINY-4257
+    Fixed unable to access the dialog footer in tabbed dialogs on small screens #TINY-4360
+    Fixed mobile table selectors were hard to select with touch by increasing the size #TINY-4366
+    Fixed mobile table selectors moving when moving outside the editor #TINY-4366
+    Fixed inline toolbars collapsing when using sliding toolbars #TINY-4389
+    Fixed block textpatterns not treating NBSPs as spaces #TINY-4378
+    Fixed backspace not merging blocks when the last element in the preceding block was a `contenteditable="false"` element #TINY-4235
+    Fixed toolbar buttons that only contain text labels overlapping on mobile devices #TINY-4395
+    Fixed quickbars quickimage picker not working on mobile #TINY-4377
+    Fixed fullscreen not resizing in an iOS WKWebView component #TINY-4413
+Version 5.1.1 (2019-10-28)
+    Fixed font formats containing spaces being wrapped in `&quot;` entities instead of single quotes #TINY-4275
+    Fixed alert and confirm dialogs losing focus when clicked #TINY-4248
+    Fixed clicking outside a modal dialog focusing on the document body #TINY-4249
+    Fixed the context toolbar not hiding when scrolled out of view #TINY-4265
+Version 5.1.0 (2019-10-17)
+    Added touch selector handles for table selections on touch devices #TINY-4097
+    Added border width field to Table Cell dialog #TINY-4028
+    Added touch event listener to media plugin to make embeds playable #TINY-4093
+    Added oxide styling options to notifications and tweaked the default variables #TINY-4153
+    Added additional padding to split button chevrons on touch devices, to make them easier to interact with #TINY-4223
+    Added new platform detection functions to `Env` and deprecated older detection properties #TINY-4184
+    Added `inputMode` config field to specify inputmode attribute of `input` dialog components #TINY-4062
+    Added new `inputMode` property to relevant plugins/dialogs #TINY-4102
+    Added new `toolbar_sticky` setting to allow the iframe menubar/toolbar to stick to the top of the window when scrolling #TINY-3982
+    Changed default setting for `toolbar_drawer` to `floating` #TINY-3634
+    Changed mobile phones to use the `silver` theme by default #TINY-3634
+    Changed some editor settings to default to `false` on touch devices:
+        - `menubar`(phones only) #TINY-4077
+        - `table_grid` #TINY-4075
+        - `resize` #TINY-4157
+        - `object_resizing` #TINY-4157
+    Changed toolbars and context toolbars to sidescroll on mobile #TINY-3894 #TINY-4107
+    Changed context menus to render as horizontal menus on touch devices #TINY-4107
+    Changed the editor to use the `VisualViewport` API of the browser where possible #TINY-4078
+    Changed visualblocks toolbar button icon and renamed `paragraph` icon to `visualchars` #TINY-4074
+    Changed Oxide default for `@toolbar-button-chevron-color` to follow toolbar button icon color #TINY-4153
+    Changed the `urlinput` dialog component to use the `url` type attribute #TINY-4102
+    Fixed Safari desktop visual viewport fires resize on fullscreen breaking the restore function #TINY-3976
+    Fixed scroll issues on mobile devices #TINY-3976
+    Fixed context toolbar unable to refresh position on iOS12 #TINY-4107
+    Fixed ctrl+left click not opening links on readonly mode and the preview dialog #TINY-4138
+    Fixed Slider UI component not firing `onChange` event on touch devices #TINY-4092
+    Fixed notifications overlapping instead of stacking #TINY-3478
+    Fixed inline dialogs positioning incorrectly when the page is scrolled #TINY-4018
+    Fixed inline dialogs and menus not repositioning when resizing #TINY-3227
+    Fixed inline toolbar incorrectly stretching to the full width when a width value was provided #TINY-4066
+    Fixed menu chevrons color to follow the menu text color #TINY-4153
+    Fixed table menu selection grid from staying black when using dark skins, now follows border color #TINY-4153
+    Fixed Oxide using the wrong text color variable for menubar button focused state #TINY-4146
+    Fixed the autoresize plugin not keeping the selection in view when resizing #TINY-4094
+    Fixed textpattern plugin throwing exceptions when using `forced_root_block: false` #TINY-4172
+    Fixed missing CSS fill styles for toolbar button icon active state #TINY-4147
+    Fixed an issue where the editor selection could end up inside a short ended element (such as `br`) #TINY-3999
+    Fixed browser selection being lost in inline mode when opening split dropdowns #TINY-4197
+    Fixed backspace throwing an exception when using `forced_root_block: false` #TINY-4099
+    Fixed floating toolbar drawer expanding outside the bounds of the editor #TINY-3941
+    Fixed the autocompleter not activating immediately after a `br` or `contenteditable=false` element #TINY-4194
+    Fixed an issue where the autocompleter would incorrectly close on IE 11 in certain edge cases #TINY-4205
+Version 5.0.16 (2019-09-24)
+    Added new `referrer_policy` setting to add the `referrerpolicy` attribute when loading scripts or stylesheets #TINY-3978
+    Added a slight background color to dialog tab links when focused to aid keyboard navigation #TINY-3877
+    Fixed media poster value not updating on change #TINY-4013
+    Fixed openlink was not registered as a toolbar button #TINY-4024
+    Fixed failing to initialize if a script tag was used inside a SVG #TINY-4087
+    Fixed double top border showing on toolbar without menubar when toolbar_drawer is enabled #TINY-4118
+    Fixed unable to drag inline dialogs to the bottom of the screen when scrolled #TINY-4154
+    Fixed notifications appearing on top of the toolbar when scrolled in inline mode #TINY-4159
+    Fixed notifications displaying incorrectly on IE 11 #TINY-4169
+Version 5.0.15 (2019-09-02)
+    Added a dark `content_css` skin to go with the dark UI skin #TINY-3743
+    Changed the enabled state on toolbar buttons so they don't get the hover effect #TINY-3974
+    Fixed missing CSS active state on toolbar buttons #TINY-3966
+    Fixed `onChange` callback not firing for the colorinput dialog component #TINY-3968
+    Fixed context toolbars not showing in fullscreen mode #TINY-4023
+Version 5.0.14 (2019-08-19)
+    Added an API to reload the autocompleter menu with additional fetch metadata #MENTIONS-17
+    Fixed missing toolbar button border styling options #TINY-3965
+    Fixed image upload progress notification closing before the upload is complete #TINY-3963
+    Fixed inline dialogs not closing on escape when no dialog component is in focus #TINY-3936
+    Fixed plugins not being filtered when defaulting to mobile on phones #TINY-3537
+    Fixed toolbar more drawer showing the content behind it when transitioning between opened and closed states #TINY-3878
+    Fixed focus not returning to the dialog after pressing the "Replace all" button in the search and replace dialog #TINY-3961
+    Removed Oxide variable `@menubar-select-disabled-border-color` and replaced it with `@menubar-select-disabled-border` #TINY-3965
+Version 5.0.13 (2019-08-06)
+    Changed modal dialogs to prevent dragging by default and added new `draggable_modal` setting to restore dragging #TINY-3873
+    Changed the nonbreaking plugin to insert nbsp characters wrapped in spans to aid in filtering. This can be disabled using the `nonbreaking_wrap` setting #TINY-3647
+    Changed backspace behaviour in lists to outdent nested list items when the cursor is at the start of the list item #TINY-3651
+    Fixed sidebar growing beyond editor bounds in IE 11 #TINY-3937
+    Fixed issue with being unable to keyboard navigate disabled toolbar buttons #TINY-3350
+    Fixed issues with backspace and delete in nested contenteditable true and false elements #TINY-3868
+    Fixed issue with losing keyboard navigation in dialogs due to disabled buttons #TINY-3914
+    Fixed `MouseEvent.mozPressure is deprecated` warning in Firefox #TINY-3919
+    Fixed `default_link_target` not being respected when `target_list` is disabled #TINY-3757
+    Fixed mobile plugin filter to only apply to the mobile theme, rather than all mobile platforms #TINY-3405
+    Fixed focus switching to another editor during mode changes #TINY-3852
+    Fixed an exception being thrown when clicking on an uninitialized inline editor #TINY-3925
+    Fixed unable to keyboard navigate to dialog menu buttons #TINY-3933
+    Fixed dialogs being able to be dragged outside the window viewport #TINY-3787
+    Fixed inline dialogs appearing above modal dialogs #TINY-3932
+Version 5.0.12 (2019-07-18)
+    Added ability to utilize UI dialog panels inside other panels #TINY-3305
+    Added help dialog tab explaining keyboard navigation of the editor #TINY-3603
+    Changed the "Find and Replace" design to an inline dialog #TINY-3054
+    Fixed issue where autolink spacebar event was not being fired on Edge #TINY-3891
+    Fixed table selection missing the background color #TINY-3892
+    Fixed removing shortcuts not working for function keys #TINY-3871
+    Fixed non-descriptive UI component type names #TINY-3349
+    Fixed UI registry components rendering as the wrong type when manually specifying a different type #TINY-3385
+    Fixed an issue where dialog checkbox, input, selectbox, textarea and urlinput components couldn't be disabled #TINY-3708
+    Fixed the context toolbar not using viable screen space in inline/distraction free mode #TINY-3717
+    Fixed the context toolbar overlapping the toolbar in various conditions #TINY-3205
+    Fixed IE11 edge case where items were being inserted into the wrong location #TINY-3884
+Version 5.0.11 (2019-07-04)
+    Fixed packaging errors caused by a rollup treeshaking bug (https://github.com/rollup/rollup/issues/2970) #TINY-3866
+    Fixed the customeditor component not able to get data from the dialog api #TINY-3866
+    Fixed collection component tooltips not being translated #TINY-3855
+Version 5.0.10 (2019-07-02)
+    Added support for all HTML color formats in `color_map` setting #TINY-3837
+    Changed backspace key handling to outdent content in appropriate circumstances #TINY-3685
+    Changed default palette for forecolor and backcolor to include some lighter colors suitable for highlights #TINY-2865
+    Changed the search and replace plugin to cycle through results #TINY-3800
+    Fixed inconsistent types causing some properties to be unable to be used in dialog components #TINY-3778
+    Fixed an issue in the Oxide skin where dialog content like outlines and shadows were clipped because of overflow hidden #TINY-3566
+    Fixed the search and replace plugin not resetting state when changing the search query #TINY-3800
+    Fixed backspace in lists not creating an undo level #TINY-3814
+    Fixed the editor to cancel loading in quirks mode where the UI is not supported #TINY-3391
+    Fixed applying fonts not working when the name contained spaces and numbers #TINY-3801
+    Fixed so that initial content is retained when initializing on list items #TINY-3796
+    Fixed inefficient font name and font size current value lookup during rendering #TINY-3813
+    Fixed mobile font copied into the wrong folder for the oxide-dark skin #TINY-3816
+    Fixed an issue where resizing the width of tables would produce inaccurate results #TINY-3827
+    Fixed a memory leak in the Silver theme #TINY-3797
+    Fixed alert and confirm dialogs using incorrect markup causing inconsistent padding #TINY-3835
+    Fixed an issue in the Table plugin with `table_responsive_width` not enforcing units when resizing #TINY-3790
+    Fixed leading, trailing and sequential spaces being lost when pasting plain text #TINY-3726
+    Fixed exception being thrown when creating relative URIs #TINY-3851
+    Fixed focus is no longer set to the editor content during mode changes unless the editor already had focus #TINY-3852
+Version 5.0.9 (2019-06-26)
+    Fixed print plugin not working in Firefox #TINY-3834
+Version 5.0.8 (2019-06-18)
+    Added back support for multiple toolbars #TINY-2195
+    Added support for .m4a files to the media plugin #TINY-3750
+    Added new base_url and suffix editor init options #TINY-3681
+    Fixed incorrect padding for select boxes with visible values #TINY-3780
+    Fixed selection incorrectly changing when programmatically setting selection on contenteditable false elements #TINY-3766
+    Fixed sidebar background being transparent #TINY-3727
+    Fixed the build to remove duplicate iife wrappers #TINY-3689
+    Fixed bogus autocompleter span appearing in content when the autocompleter menu is shown #TINY-3752
+    Fixed toolbar font size select not working with legacyoutput plugin #TINY-2921
+    Fixed the legacyoutput plugin incorrectly aligning images #TINY-3660
+    Fixed remove color not working when using the legacyoutput plugin #TINY-3756
+    Fixed the font size menu applying incorrect sizes when using the legacyoutput plugin #TINY-3773
+    Fixed scrollIntoView not working when the parent window was out of view #TINY-3663
+    Fixed the print plugin printing from the wrong window in IE11 #TINY-3762
+    Fixed content CSS loaded over CORS not loading in the preview plugin with content_css_cors enabled #TINY-3769
+    Fixed the link plugin missing the default "None" option for link list #TINY-3738
+    Fixed small dot visible with menubar and toolbar disabled in inline mode #TINY-3623
+    Fixed space key properly inserts a nbsp before/after block elements #TINY-3745
+    Fixed native context menu not showing with images in IE11 #TINY-3392
+    Fixed inconsistent browser context menu image selection #TINY-3789
+Version 5.0.7 (2019-06-05)
+    Added new toolbar button and menu item for inserting tables via dialog #TINY-3636
+    Added new API for adding/removing/changing tabs in the Help dialog #TINY-3535
+    Added highlighting of matched text in autocompleter items #TINY-3687
+    Added the ability for autocompleters to work with matches that include spaces #TINY-3704
+    Added new `imagetools_fetch_image` callback to allow custom implementations for cors loading of images #TINY-3658
+    Added `'http'` and `https` options to `link_assume_external_targets` to prepend `http://` or `https://` prefixes when URL does not contain a protocol prefix. Patch contributed by francoisfreitag. #GH-4335
+    Changed annotations navigation to work the same as inline boundaries #TINY-3396
+    Changed tabpanel API by adding a `name` field and changing relevant methods to use it #TINY-3535
+    Fixed text color not updating all color buttons when choosing a color #TINY-3602
+    Fixed the autocompleter not working with fragmented text #TINY-3459
+    Fixed the autosave plugin no longer overwrites window.onbeforeunload #TINY-3688
+    Fixed infinite loop in the paste plugin when IE11 takes a long time to process paste events. Patch contributed by lRawd. #GH-4987
+    Fixed image handle locations when using `fixed_toolbar_container`. Patch contributed by t00. #GH-4966
+    Fixed the autoresize plugin not firing `ResizeEditor` events #TINY-3587
+    Fixed editor in fullscreen mode not extending to the bottom of the screen #TINY-3701
+    Fixed list removal when pressing backspace after the start of the list item #TINY-3697
+    Fixed autocomplete not triggering from compositionend events #TINY-3711
+    Fixed `file_picker_callback` could not set the caption field on the insert image dialog #TINY-3172
+    Fixed the autocompleter menu showing up after a selection had been made #TINY-3718
+    Fixed an exception being thrown when a file or number input has focus during initialization. Patch contributed by t00 #GH-2194
+Version 5.0.6 (2019-05-22)
+    Added `icons_url` editor settings to enable icon packs to be loaded from a custom url #TINY-3585
+    Added `image_uploadtab` editor setting to control the visibility of the upload tab in the image dialog #TINY-3606
+    Added new api endpoints to the wordcount plugin and improved character count logic #TINY-3578
+    Changed plugin, language and icon loading errors to log in the console instead of a notification #TINY-3585
+    Fixed the textpattern plugin not working with fragmented text #TINY-3089
+    Fixed various toolbar drawer accessibility issues and added an animation #TINY-3554
+    Fixed issues with selection and ui components when toggling readonly mode #TINY-3592
+    Fixed so readonly mode works with inline editors #TINY-3592
+    Fixed docked inline toolbar positioning when scrolled #TINY-3621
+    Fixed initial value not being set on bespoke select in quickbars and toolbar drawer #TINY-3591
+    Fixed so that nbsp entities aren't trimmed in white-space: pre-line elements #TINY-3642
+    Fixed `mceInsertLink` command inserting spaces instead of url encoded characters #GH-4990
+    Fixed text content floating on top of dialogs in IE11 #TINY-3640
+Version 5.0.5 (2019-05-09)
+    Added menu items to match the forecolor/backcolor toolbar buttons #TINY-2878
+    Added default directionality based on the configured language #TINY-2621
+    Added styles, icons and tests for rtl mode #TINY-2621
+    Fixed autoresize not working with floating elements or when media elements finished loading #TINY-3545
+    Fixed incorrect vertical caret positioning in IE 11 #TINY-3188
+    Fixed submenu anchoring hiding overflowed content #TINY-3564
+    Removed unused and hidden validation icons to avoid displaying phantom tooltips #TINY-2329
+Version 5.0.4 (2019-04-23)
+    Added back URL dialog functionality, which is now available via `editor.windowManager.openUrl()` #TINY-3382
+    Added the missing throbber functionality when calling `editor.setProgressState(true)` #TINY-3453
+    Added function to reset the editor content and undo/dirty state via `editor.resetContent()` #TINY-3435
+    Added the ability to set menu buttons as active #TINY-3274
+    Added `editor.mode` API, featuring a custom editor mode API #TINY-3406
+    Added better styling to floating toolbar drawer #TINY-3479
+    Added the new premium plugins to the Help dialog plugins tab #TINY-3496
+    Added the linkchecker context menu items to the default configuration #TINY-3543
+    Fixed image context menu items showing on placeholder images #TINY-3280
+    Fixed dialog labels and text color contrast within notifications/alert banners to satisfy WCAG 4.5:1 contrast ratio for accessibility #TINY-3351
+    Fixed selectbox and colorpicker items not being translated #TINY-3546
+    Fixed toolbar drawer sliding mode to correctly focus the editor when tabbing via keyboard navigation #TINY-3533
+    Fixed positioning of the styleselect menu in iOS while using the mobile theme #TINY-3505
+    Fixed the menubutton `onSetup` callback to be correctly executed when rendering the menu buttons #TINY-3547
+    Fixed `default_link_target` setting to be correctly utilized when creating a link #TINY-3508
+    Fixed colorpicker floating marginally outside its container #TINY-3026
+    Fixed disabled menu items displaying as active when hovered #TINY-3027
+    Removed redundant mobile wrapper #TINY-3480
+Version 5.0.3 (2019-03-19)
+    Changed empty nested-menu items within the style formats menu to be disabled or hidden if the value of `style_formats_autohide` is `true` #TINY-3310
+    Changed the entire phrase 'Powered by Tiny' in the status bar to be a link instead of just the word 'Tiny' #TINY-3366
+    Changed `formatselect`, `styleselect` and `align` menus to use the `mceToggleFormat` command internally #TINY-3428
+    Fixed toolbar keyboard navigation to work as expected when `toolbar_drawer` is configured #TINY-3432
+    Fixed text direction buttons to display the correct pressed state in selections that have no explicit `dir` property #TINY-3138
+    Fixed the mobile editor to clean up properly when removed #TINY-3445
+    Fixed quickbar toolbars to add an empty box to the screen when it is set to `false` #TINY-3439
+    Fixed an issue where pressing the **Delete/Backspace** key at the edge of tables was creating incorrect selections #TINY-3371
+    Fixed an issue where dialog collection items (emoticon and special character dialogs) couldn't be selected with touch devices #TINY-3444
+    Fixed a type error introduced in TinyMCE version 5.0.2 when calling `editor.getContent()` with nested bookmarks #TINY-3400
+    Fixed an issue that prevented default icons from being overridden #TINY-3449
+    Fixed an issue where **Home/End** keys wouldn't move the caret correctly before or after `contenteditable=false` inline elements #TINY-2995
+    Fixed styles to be preserved in IE 11 when editing via the `fullpage` plugin #TINY-3464
+    Fixed the `link` plugin context toolbar missing the open link button #TINY-3461
+    Fixed inconsistent dialog component spacing #TINY-3436
+Version 5.0.2 (2019-03-05)
+    Added presentation and document presets to `htmlpanel` dialog component #TINY-2694
+    Added missing fixed_toolbar_container setting has been reimplemented in the Silver theme #TINY-2712
+    Added a new toolbar setting `toolbar_drawer` that moves toolbar groups which overflow the editor width into either a `sliding` or `floating` toolbar section #TINY-2874
+    Updated the build process to include package lock files in the dev distribution archive #TINY-2870
+    Fixed inline dialogs did not have aria attributes #TINY-2694
+    Fixed default icons are now available in the UI registry, allowing use outside of toolbar buttons #TINY-3307
+    Fixed a memory leak related to select toolbar items #TINY-2874
+    Fixed a memory leak due to format changed listeners that were never unbound #TINY-3191
+    Fixed an issue where content may have been lost when using permanent bookmarks #TINY-3400
+    Fixed the quicklink toolbar button not rendering in the quickbars plugin #TINY-3125
+    Fixed an issue where menus were generating invalid HTML in some cases #TINY-3323
+    Fixed an issue that could cause the mobile theme to show a blank white screen when the editor was inside an `overflow:hidden` element #TINY-3407
+    Fixed mobile theme using a transparent background and not taking up the full width on iOS #TINY-3414
+    Fixed the template plugin dialog missing the description field #TINY-3337
+    Fixed input dialog components using an invalid default type attribute #TINY-3424
+    Fixed an issue where backspace/delete keys after/before pagebreak elements wouldn't move the caret #TINY-3097
+    Fixed an issue in the table plugin where menu items and toolbar buttons weren't showing correctly based on the selection #TINY-3423
+    Fixed inconsistent button focus styles in Firefox #TINY-3377
+    Fixed the resize icon floating left when all status bar elements were disabled #TINY-3340
+    Fixed the resize handle to not show in fullscreen mode #TINY-3404
+Version 5.0.1 (2019-02-21)
+    Removed paste as text notification banner and paste_plaintext_inform setting #POW-102
+    Fixed an issue where adding links to images would replace the image with text #TINY-3356
+    Fixed an issue where the inline editor could use fractional pixels for positioning #TINY-3202
+    Fixed an issue where uploading non-image files in the Image Plugin upload tab threw an error. #TINY-3244
+    Added H1-H6 toggle button registration to the silver theme #TINY-3070
+    Fixed an issue in the media plugin that was causing the source url and height/width to be lost in certain circumstances #TINY-2858
+    Fixed an issue with the Context Toolbar not being removed when clicking outside of the editor #TINY-2804
+    Fixed an issue where clicking 'Remove link' wouldn't remove the link in certain circumstances #TINY-3199
+    Added code sample toolbar button will now toggle on when the cursor is in a code section #TINY-3040
+    Fixed an issue where the media plugin would fail when parsing dialog data #TINY-3218
+    Fixed an issue where retrieving the selected content as text didn't create newlines #TINY-3197
+    Fixed incorrect keyboard shortcuts in the Help dialog for Windows #TINY-3292
+    Fixed an issue where JSON serialization could produce invalid JSON #TINY-3281
+    Fixed production CSS including references to source maps #TINY-3920
+    Fixed development CSS was not included in the development zip #TINY-3920
+    Fixed the autocompleter matches predicate not matching on the start of words by default #TINY-3306
+    Added new settings to the emoticons plugin to allow additional emoticons to be added #TINY-3088
+    Fixed an issue where the page could be scrolled with modal dialogs open #TINY-2252
+    Fixed an issue where autocomplete menus would show an icon margin when no items had icons #TINY-3329
+    Fixed an issue in the quickbars plugin where images incorrectly showed the text selection toolbar #TINY-3338
+    Fixed an issue that caused the inline editor to fail to render when the target element already had focus #TINY-3353
+Version 5.0.0 (2019-02-04)
+    Full documentation for the version 5 features and changes is available at https://www.tiny.cloud/docs/release-notes/
+
+    Changes since RC2:
+    Fixed an issue where tab panel heights weren't sizing properly on smaller screens and weren't updating on resize #TINY-3242
+    Added links and registered names with * to denote premium plugins in Plugins tab of Help dialog #TINY-3223
+    Changed Tiny 5 mobile skin to look more uniform with desktop #TINY-2650
+    Fixed image tools not having any padding between the label and slider #TINY-3220
+    Blacklisted table, th and td as inline editor target #TINY-717
+    Fixed context toolbar toggle buttons not showing the correct state #TINY-3022
+    Fixed missing separators in the spellchecker context menu between the suggestions and actions #TINY-3217
+    Fixed notification icon positioning in alert banners #TINY-2196
+    Fixed a typo in the word count plugin name #TINY-3062
+    Fixed charmap and emoticons dialogs not having a primary button #TINY-3233
+    Fixed an issue where resizing wouldn't work correctly depending on the box-sizing model #TINY-3278
+Version 5.0.0-rc-2 (2019-01-22)
+    Fixed the link dialog such that it will now retain class attributes when updating links #TINY-2825
+    Added screen reader accessibility for sidebar and statusbar #TINY-2699
+    Updated Emoticons and Charmap dialogs to be screen reader accessible #TINY-2693
+    Fixed "Find and replace" not showing in the "Edit" menu by default #TINY-3061
+    Updated the textpattern plugin to properly support nested patterns and to allow running a command with a value for a pattern with a start and an end #TINY-2991
+    Removed unnecessary 'flex' and unused 'colspan' properties from the new dialog APIs #TINY-2973
+    Changed checkboxes to use a boolean for its state, instead of a string #TINY-2848
+    Fixed dropdown buttons missing the 'type' attribute, which could cause forms to be incorrectly submitted #TINY-2826
+    Fixed emoticon and charmap search not returning expected results in certain cases #TINY-3084
+    Changed formatting menus so they are registered and made the align toolbar button use an icon instead of text #TINY-2880
+    Fixed blank rel_list values throwing an exception in the link plugin #TINY-3149
+Version 5.0.0-rc-1 (2019-01-08)
+    Updated the font select dropdown logic to try to detect the system font stack and show "System Font" as the font name #TINY-2710
+    Fixed readonly mode not fully disabling editing content #TINY-2287
+    Updated the autocompleter to only show when it has matched items #TINY-2350
+    Added editor settings functionality to specify title attributes for toolbar groups #TINY-2690
+    Added icons instead of button text to improve Search and Replace dialog footer appearance #TINY-2654
+    Added `tox-dialog__table` instead of `mce-table-striped` class to enhance Help dialog appearance #TINY-2360
+    Added title attribute to iframes so, screen readers can announce iframe labels #TINY-2692
+    Updated SizeInput labels to "Height" and "Width" instead of Dimensions #TINY-2833
+    Fixed accessibility issues with the font select, font size, style select and format select toolbar dropdowns #TINY-2713
+    Fixed accessibility issues with split dropdowns #TINY-2697
+    Added a wordcount menu item, that defaults to appearing in the tools menu #TINY-2877
+    Fixed the legacyoutput plugin to be compatible with TinyMCE 5.0 #TINY-2301
+    Updated the build process to minify and generate ASCII only output for the emoticons database #TINY-2744
+    Fixed icons not showing correctly in the autocompleter popup #TINY-3029
+    Fixed an issue where preview wouldn't show anything in Edge under certain circumstances #TINY-3035
+    Fixed the height being incorrectly calculated for the autoresize plugin #TINY-2807
+Version 5.0.0-beta-1 (2018-11-30)
+    Changed the name of the "inlite" plugin to "quickbars" #TINY-2831
+    Fixed an inline mode issue where the save plugin upon saving can cause content loss #TINY-2659
+    Changed the background color icon to highlight background icon #TINY-2258
+    Added a new `addNestedMenuItem()` UI registry function and changed all nested menu items to use the new registry functions #TINY-2230
+    Changed Help dialog to be accessible to screen readers #TINY-2687
+    Changed the color swatch to save selected custom colors to local storage for use across sessions #TINY-2722
+    Added title attribute to color swatch colors #TINY-2669
+    Added anchorbar component to anchor inline toolbar dialogs to instead of the toolbar #TINY-2040
+    Added support for toolbar<n> and toolbar array config options to be squashed into a single toolbar and not create multiple toolbars #TINY-2195
+    Added error handling for when forced_root_block config option is set to true #TINY-2261
+    Added functionality for the removed_menuitems config option #TINY-2184
+    Fixed an issue in IE 11 where calling selection.getContent() would return an empty string when the editor didn't have focus #TINY-2325
+    Added the ability to use a string to reference menu items in menu buttons and submenu items #TINY-2253
+    Removed compat3x plugin #TINY-2815
+    Changed `WindowManager` API - methods `getParams`, `setParams` and `getWindows`, and the legacy `windows` property, have been removed. `alert` and `confirm` dialogs are no longer tracked in the window list. #TINY-2603
+Version 5.0.0-preview-4 (2018-11-12)
+    Fixed distraction free plugin #AP-470
+    Removed the tox-custom-editor class that was added to the wrapping element of codemirror #TINY-2211
+    Fixed contents of the input field being selected on focus instead of just recieving an outline highlight #AP-464
+    Added width and height placeholder text to image and media dialog dimensions input #AP-296
+    Fixed styling issues with dialogs and menus in IE 11 #AP-456
+    Fixed custom style format control not honoring custom formats #AP-393
+    Fixed context menu not appearing when clicking an image with a caption #AP-382
+    Fixed directionality of UI when using an RTL language #AP-423
+    Fixed page responsiveness with multiple inline editors #AP-430
+    Added the ability to keyboard navigate through menus, toolbars, sidebar and the status bar sequentially #AP-381
+    Fixed empty toolbar groups appearing through invalid configuration of the `toolbar` property #AP-450
+    Fixed text not being retained when updating links through the link dialog #AP-293
+    Added translation capability back to the editor's UI #AP-282
+    Fixed edit image context menu, context toolbar and toolbar items being incorrectly enabled when selecting invalid images #AP-323
+    Fixed emoji type ahead being shown when typing URLs #AP-366
+    Fixed toolbar configuration properties incorrectly expecting string arrays instead of strings #AP-342
+    Changed the editor resize handle so that it should be disabled when the autoresize plugin is turned on #AP-424
+    Fixed the block formatting toolbar item not showing a "Formatting" title when there is no selection #AP-321
+    Fixed clicking disabled toolbar buttons hiding the toolbar in inline mode #AP-380
+    Fixed `EditorResize` event not being fired upon editor resize #AP-327
+    Fixed tables losing styles when updating through the dialog #AP-368
+    Fixed context toolbar positioning to be more consistent near the edges of the editor #AP-318
+    Added `label` component type for dialogs to group components under a label
+    Fixed table of contents plugin now works with v5 toolbar APIs correctly #AP-347
+    Fixed the `link_context_toolbar` configuration not disabling the context toolbar #AP-458
+    Fixed the link context toolbar showing incorrect relative links #AP-435
+    Fixed the alignment of the icon in alert banner dialog components #TINY-2220
+    Changed UI text for microcopy improvements #TINY-2281
+    Fixed the visual blocks and visual char menu options not displaying their toggled state #TINY-2238
+    Fixed the editor not displaying as fullscreen when toggled #TINY-2237
+Version 5.0.0-preview-3 (2018-10-18)
+    Changed editor layout to use modern CSS properties over manually calculating dimensions #AP-324
+    Changed `autoresize_min_height` and `autoresize_max_height` configurations to `min_height` and `max_height` #AP-324
+    Fixed bugs with editor width jumping when resizing and the iframe not resizing to smaller than 150px in height #AP-324
+    Fixed mobile theme bug that prevented the editor from loading #AP-404
+    Fixed long toolbar groups extending outside of the editor instead of wrapping
+    Changed `Whole word` label in Search and Replace dialog to `Find whole words only` #AP-387
+    Fixed dialog titles so they are now proper case #AP-384
+    Fixed color picker default to be #000000 instead of #ff00ff #AP-216
+    Fixed "match case" option on the Find and Replace dialog is no longer selected by default #AP-298
+    Fixed vertical alignment of toolbar icons #DES-134
+    Fixed toolbar icons not appearing on IE11 #DES-133
+Version 5.0.0-preview-2 (2018-10-10)
+    Changed configuration of color options has been simplified to `color_map`, `color_cols`, and `custom_colors` #AP-328
+    Added swatch is now shown for colorinput fields, instead of the colorpicker directly #AP-328
+    Removed `colorpicker` plugin, it is now in the theme #AP-328
+    Removed `textcolor` plugin, it is now in the theme #AP-328
+    Fixed styleselect not updating the displayed item as the cursor moved #AP-388
+    Changed `height` configuration to apply to the editor frame (including menubar, toolbar, status bar) instead of the content area #AP-324
+    Added fontformats and fontsizes menu items #AP-390
+    Fixed preview iframe not expanding to the dialog size #AP-252
+    Fixed 'meta' shortcuts not translated into platform-specific text #AP-270
+    Fixed tabbed dialogs (Charmap and Emoticons) shrinking when no search results returned
+    Fixed a bug where alert banner icons were not retrieved from icon pack. #AP-330
+    Fixed component styles to flex so they fill large dialogs. #AP-252
+    Fixed editor flashing unstyled during load (still in progress). #AP-349
+Version 5.0.0-preview-1 (2018-10-01)
+    Developer preview 1
+    Initial list of features and changes is available at https://tiny.cloud/docs-preview/release-notes/new-features/
+Version 4.9.3 (2019-01-31)
+    Added a visualchars_default_state setting to the Visualchars Plugin. Patch contributed by mat3e.
+    Fixed a bug where scrolling on a page with more than one editor would cause a ResizeWindow event to fire. #TINY-3247
+    Fixed a bug where if a plugin threw an error during initialisation the whole editor would fail to load. #TINY-3243
+    Fixed a bug where getContent would include bogus elements when valid_elements setting was set up in a specific way. #TINY-3213
+    Fixed a bug where only a few function key names could be used when creating keyboard shortcuts. #TINY-3146
+    Fixed a bug where it wasn't possible to enter spaces into an editor after pressing shift+enter. #TINY-3099
+    Fixed a bug where no caret would be rendered after backspacing to a contenteditable false element. #TINY-2998
+    Fixed a bug where deletion to/from indented lists would leave list fragments in the editor. #TINY-2981
+Version 4.9.2 (2018-12-17)
+    Fixed a bug with pressing the space key on IE 11 would result in nbsp characters being inserted between words at the end of a block. #TINY-2996
+    Fixed a bug where character composition using quote and space on US International keyboards would produce a space instead of a quote. #TINY-2999
+    Fixed a bug where remove format wouldn't remove the inner most inline element in some situations. #TINY-2982
+    Fixed a bug where outdenting an list item would affect attributes on other list items within the same list. #TINY-2971
+    Fixed a bug where the DomParser filters wouldn't be applied for elements created when parsing invalid html. #TINY-2978
+    Fixed a bug where setProgressState wouldn't automatically close floating ui elements like menus. #TINY-2896
+    Fixed a bug where it wasn't possible to navigate out of a figcaption element using the arrow keys. #TINY-2894
+    Fixed a bug where enter key before an image inside a link would remove the image. #TINY-2780
+Version 4.9.1 (2018-12-04)
+    Added functionality to insert html to the replacement feature of the Textpattern Plugin. #TINY-2839
+    Fixed a bug where `editor.selection.getContent({format: 'text'})` didn't work as expected in IE11 on an unfocused editor. #TINY-2862
+    Fixed a bug in the Textpattern Plugin where the editor would get an incorrect selection after inserting a text pattern on Safari. #TINY-2838
+    Fixed a bug where the space bar didn't work correctly in editors with the forced_root_block setting set to false. #TINY-2816
+Version 4.9.0 (2018-11-27)
+    Added a replace feature to the Textpattern Plugin. #TINY-1908
+    Added functionality to the Lists Plugin that improves the indentation logic. #TINY-1790
+    Fixed a bug where it wasn't possible to delete/backspace when the caret was between a contentEditable=false element and a BR. #TINY-2372
+    Fixed a bug where copying table cells without a text selection would fail to copy anything. #TINY-1789
+    Implemented missing `autosave_restore_when_empty` functionality in the Autosave Plugin. Patch contributed by gzzo. #GH-4447
+    Reduced insertion of unnecessary nonbreaking spaces in the editor. #TINY-1879
+Version 4.8.5 (2018-10-30)
+    Added a content_css_cors setting to the editor that adds the crossorigin="anonymous" attribute to link tags added by the StyleSheetLoader. #TINY-1909
+    Fixed a bug where trying to remove formatting with a collapsed selection range would throw an exception. #GH-4636
+    Fixed a bug in the image plugin that caused updating figures to split contenteditable elements. #GH-4563
+    Fixed a bug that was causing incorrect viewport calculations for fixed position UI elements. #TINY-1897
+    Fixed a bug where inline formatting would cause the delete key to do nothing. #TINY-1900
+Version 4.8.4 (2018-10-23)
+    Added support for the HTML5 `main` element. #TINY-1877
+    Changed the keyboard shortcut to move focus to contextual toolbars to Ctrl+F9. #TINY-1812
+    Fixed a bug where content css could not be loaded from another domain. #TINY-1891
+    Fixed a bug on FireFox where the cursor would get stuck between two contenteditable false inline elements located inside of the same block element divided by a BR. #TINY-1878
+    Fixed a bug with the insertContent method where nonbreaking spaces would be inserted incorrectly. #TINY-1868
+    Fixed a bug where the toolbar of the inline editor would not be visible in some scenarios. #TINY-1862
+    Fixed a bug where removing the editor while more than one notification was open would throw an error. #TINY-1845
+    Fixed a bug where the menubutton would be rendered on top of the menu if the viewport didn't have enough height. #TINY-1678
+    Fixed a bug with the annotations api where annotating collapsed selections caused problems. #TBS-2449
+    Fixed a bug where wbr elements were being transformed into whitespace when using the Paste Plugin's paste as text setting. #GH-4638
+    Fixed a bug where the Search and Replace didn't replace spaces correctly. #GH-4632
+    Fixed a bug with sublist items not persisting selection. #GH-4628
+    Fixed a bug with mceInsertRawHTML command not working as expected. #GH-4625
+Version 4.8.3 (2018-09-13)
+    Fixed a bug where the Wordcount Plugin didn't correctly count words within tables on IE11. #TINY-1770
+    Fixed a bug where it wasn't possible to move the caret out of a table on IE11 and Firefox. #TINY-1682
+    Fixed a bug where merging empty blocks didn't work as expected, sometimes causing content to be deleted. #TINY-1781
+    Fixed a bug where the Textcolor Plugin didn't show the correct current color. #TINY-1810
+    Fixed a bug where clear formatting with a collapsed selection would sometimes clear formatting from more content than expected. #TINY-1813 #TINY-1821
+    Fixed a bug with the Table Plugin where it wasn't possible to keyboard navigate to the caption. #TINY-1818
+Version 4.8.2 (2018-08-09)
+    Moved annotator from "experimental" to "annotator" object on editor. #TBS-2398
+    Improved the multiclick normalization across browsers. #TINY-1788
+    Fixed a bug where running getSelectedBlocks with a collapsed selection between block elements would produce incorrect results. #TINY-1787
+    Fixed a bug where the ScriptLoaders loadScript method would not work as expected in FireFox when loaded on the same page as a ShadowDOM polyfill. #TINY-1786
+    Removed reference to ShadowDOM event.path as Blink based browsers now support event.composedPath. #TINY-1785
+    Fixed a bug where a reference to localStorage would throw an "access denied" error in IE11 with strict security settings. #TINY-1782
+    Fixed a bug where pasting using the toolbar button on an inline editor in IE11 would cause a looping behaviour. #TINY-1768
+Version 4.8.1 (2018-07-26)
+    Fixed a bug where the content of inline editors was being cleaned on every call of `editor.save()`. #TINY-1783
+    Fixed a bug where the arrow of the Inlite Theme toolbar was being rendered incorrectly in RTL mode. #TINY-1776
+    Fixed a bug with the Paste Plugin where pasting after inline contenteditable false elements moved the caret to the end of the line. #TINY-1758
+Version 4.8.0 (2018-06-27)
+    Added new "experimental" object in editor, with initial Annotator API. #TBS-2374
+    Fixed a bug where deleting paragraphs inside of table cells would delete the whole table cell. #TINY-1759
+    Fixed a bug in the Table Plugin where removing row height set on the row properties dialog did not update the table. #TINY-1730
+    Fixed a bug with the font select toolbar item didn't update correctly. #TINY-1683
+    Fixed a bug where all bogus elements would not be deleted when removing an inline editor. #TINY-1669
+Version 4.7.13 (2018-05-16)
+    Fixed a bug where Edge 17 wouldn't be able to select images or tables. #TINY-1679
+    Fixed issue where whitespace wasn't preserved when the editor was initialized on pre elements. #TINY-1649
+    Fixed a bug with the fontselect dropdowns throwing an error if the editor was hidden in Firefox. #TINY-1664
+    Fixed a bug where it wasn't possible to merge table cells on IE 11. #TINY-1671
+    Fixed a bug where textcolor wasn't applying properly on IE 11 in some situations. #TINY-1663
+    Fixed a bug where the justifyfull command state wasn't working correctly. #TINY-1677
+    Fixed a bug where the styles wasn't updated correctly when resizing some tables. #TINY-1668
+    Added missing code menu item from the default menu config. #TINY-1648
+    Added new align button for combining the separate align buttons into a menu button. #TINY-1652
+Version 4.7.12 (2018-05-03)
+    Added an option to filter out image svg data urls.
+    Added support for html5 details and summary elements.
+    Changed so the mce-abs-layout-item css rule targets html instead of body. Patch contributed by nazar-pc.
+    Fixed a bug where the "read" step on the mobile theme was still present on android mobile browsers.
+    Fixed a bug where all images in the editor document would reload on any editor change.
+    Fixed a bug with the Table Plugin where ObjectResized event wasn't being triggered on column resize.
+    Fixed so the selection is set to the first suitable caret position after editor.setContent called.
+    Fixed so links with xlink:href attributes are filtered correctly to prevent XSS.
+    Fixed a bug on IE11 where pasting content into an inline editor initialized on a heading element would create new editable elements.
+    Fixed a bug where readonly mode would not work as expected when the editor contained contentEditable=true elements.
+    Fixed a bug where the Link Plugin would throw an error when used together with the webcomponents polyfill. Patch contributed by 4esnog.
+    Fixed a bug where the "Powered by TinyMCE" branding link would break on XHTML pages. Patch contributed by tistre.
+    Fixed a bug where the same id would be used in the blobcache for all pasted images. Patch contributed by thorn0.
+Version 4.7.11 (2018-04-11)
+    Added a new imagetools_credentials_hosts option to the Imagetools Plugin.
+    Fixed a bug where toggling a list containing empty LIs would throw an error. Patch contributed by bradleyke.
+    Fixed a bug where applying block styles to a text with the caret at the end of the paragraph would select all text in the paragraph.
+    Fixed a bug where toggling on the Spellchecker Plugin would trigger isDirty on the editor.
+    Fixed a bug where it was possible to enter content into selection bookmark spans.
+    Fixed a bug where if a non paragraph block was configured in forced_root_block the editor.getContent method would return incorrect values with an empty editor.
+    Fixed a bug where dropdown menu panels stayed open and fixed in position when dragging dialog windows.
+    Fixed a bug where it wasn't possible to extend table cells with the space button in Safari.
+    Fixed a bug where the setupeditor event would thrown an error when using the Compat3x Plugin.
+    Fixed a bug where an error was thrown in FontInfo when called on a detached element.
+Version 4.7.10 (2018-04-03)
+    Removed the "read" step from the mobile theme.
+    Added normalization of triple clicks across browsers in the editor.
+    Added a `hasFocus` method to the editor that checks if the editor has focus.
+    Added correct icon to the Nonbreaking Plugin menu item.
+    Fixed so the `getContent`/`setContent` methods work even if the editor is not initialized.
+    Fixed a bug with the Media Plugin where query strings were being stripped from youtube links.
+    Fixed a bug where image styles were changed/removed when opening and closing the Image Plugin dialog.
+    Fixed a bug in the Table Plugin where some table cell styles were not correctly added to the content html.
+    Fixed a bug in the Spellchecker Plugin where it wasn't possible to change the spellchecker language.
+    Fixed so the the unlink action in the Link Plugin has a menu item and can be added to the contextmenu.
+    Fixed a bug where it wasn't possible to keyboard navigate to the start of an inline element on a new line within the same block element.
+    Fixed a bug with the Text Color Plugin where if used with an inline editor located at the bottom of the screen the colorpicker could appear off screen.
+    Fixed a bug with the UndoManager where undo levels were being added for nbzwsp characters.
+    Fixed a bug with the Table Plugin where the caret would sometimes be lost when keyboard navigating up through a table.
+    Fixed a bug where FontInfo.getFontFamily would throw an error when called on a removed editor.
+    Fixed a bug in Firefox where undo levels were not being added correctly for some specific operations.
+    Fixed a bug where initializing an inline editor inside of a table would make the whole table resizeable.
+    Fixed a bug where the fake cursor that appears next to tables on Firefox was positioned incorrectly when switching to fullscreen.
+    Fixed a bug where zwsp's weren't trimmed from the output from `editor.getContent({ format: 'text' })`.
+    Fixed a bug where the fontsizeselect/fontselect toolbar items showed the body info rather than the first possible caret position info on init.
+    Fixed a bug where it wasn't possible to select all content if the editor only contained an inline boundary element.
+    Fixed a bug where `content_css` urls with query strings wasn't working.
+    Fixed a bug in the Table Plugin where some table row styles were removed when changing other styles in the row properties dialog.
+Version 4.7.9 (2018-02-27)
+    Fixed a bug where the editor target element didn't get the correct style when removing the editor.
+Version 4.7.8 (2018-02-26)
+    Fixed an issue with the Help Plugin where the menuitem name wasn't lowercase.
+    Fixed an issue on MacOS where text and bold text did not have the same line-height in the autocomplete dropdown in the Link Plugin dialog.
+    Fixed a bug where the "paste as text" option in the Paste Plugin didn't work.
+    Fixed a bug where dialog list boxes didn't get positioned correctly in documents with scroll.
+    Fixed a bug where the Inlite Theme didn't use the Table Plugin api to insert correct tables.
+    Fixed a bug where the Inlite Theme panel didn't hide on blur in a correct way.
+    Fixed a bug where placing the cursor before a table in Firefox would scroll to the bottom of the table.
+    Fixed a bug where selecting partial text in table cells with rowspans and deleting would produce faulty tables.
+    Fixed a bug where the Preview Plugin didn't work on Safari due to sandbox security.
+    Fixed a bug where table cell selection using the keyboard threw an error.
+    Fixed so the font size and font family doesn't toggle the text but only sets the selected format on the selected text.
+    Fixed so the built-in spellchecking on Chrome and Safari creates an undo level when replacing words.
+Version 4.7.7 (2018-02-19)
+    Added a border style selector to the advanced tab of the Image Plugin.
+    Added better controls for default table inserted by the Table Plugin.
+    Added new `table_responsive_width` option to the Table Plugin that controls whether to use pixel or percentage widths.
+    Fixed a bug where the Link Plugin text didn't update when a URL was pasted using the context menu.
+    Fixed a bug with the Spellchecker Plugin where using "Add to dictionary" in the context menu threw an error.
+    Fixed a bug in the Media Plugin where the preview node for iframes got default width and height attributes that interfered with width/height styles.
+    Fixed a bug where backslashes were being added to some font family names in Firefox in the fontselect toolbar item.
+    Fixed a bug where errors would be thrown when trying to remove an editor that had not yet been fully initialized.
+    Fixed a bug where the Imagetools Plugin didn't update the images atomically.
+    Fixed a bug where the Fullscreen Plugin was throwing errors when being used on an inline editor.
+    Fixed a bug where drop down menus weren't positioned correctly in inline editors on scroll.
+    Fixed a bug with a semicolon missing at the end of the bundled javascript files.
+    Fixed a bug in the Table Plugin with cursor navigation inside of tables where the cursor would sometimes jump into an incorrect table cells.
+    Fixed a bug where indenting a table that is a list item using the "Increase indent" button would create a nested table.
+    Fixed a bug where text nodes containing only whitespace were being wrapped by paragraph elements.
+    Fixed a bug where whitespace was being inserted after br tags inside of paragraph tags.
+    Fixed a bug where converting an indented paragraph to a list item would cause the list item to have extra padding.
+    Fixed a bug where Copy/Paste in an editor with a lot of content would cause the editor to scroll to the top of the content in IE11.
+    Fixed a bug with a memory leak in the DragHelper. Path contributed by ben-mckernan.
+    Fixed a bug where the advanced tab in the Media Plugin was being shown even if it didn't contain anything. Patch contributed by gabrieeel.
+    Fixed an outdated eventname in the EventUtils. Patch contributed by nazar-pc.
+    Fixed an issue where the Json.parse function would throw an error when being used on a page with strict CSP settings.
+    Fixed so you can place the curser before and after table elements within the editor in Firefox and Edge/IE.
+Version 4.7.6 (2018-01-29)
+    Fixed a bug in the jquery integration where it threw an error saying that "global is not defined".
+    Fixed a bug where deleting a table cell whose previous sibling was set to contenteditable false would create a corrupted table.
+    Fixed a bug where highlighting text in an unfocused editor did not work correctly in IE11/Edge.
+    Fixed a bug where the table resize handles were not being repositioned when activating the Fullscreen Plugin.
+    Fixed a bug where the Imagetools Plugin dialog didn't honor editor RTL settings.
+    Fixed a bug where block elements weren't being merged correctly if you deleted from after a contenteditable false element to the beginning of another block element.
+    Fixed a bug where TinyMCE didn't work with module loaders like webpack.
+Version 4.7.5 (2018-01-22)
+    Fixed bug with the Codesample Plugin where it wasn't possible to edit codesamples when the editor was in inline mode.
+    Fixed bug where focusing on the status bar broke the keyboard navigation functionality.
+    Fixed bug where an error would be thrown on Edge by the Table Plugin when pasting using the PowerPaste Plugin.
+    Fixed bug in the Table Plugin where selecting row border style from the dropdown menu in advanced row properties would throw an error.
+    Fixed bug with icons being rendered incorrectly on Chrome on Mac OS.
+    Fixed bug in the Textcolor Plugin where the font color and background color buttons wouldn't trigger an ExecCommand event.
+    Fixed bug in the Link Plugin where the url field wasn't forced LTR.
+    Fixed bug where the Nonbreaking Plugin incorrectly inserted spaces into tables.
+    Fixed bug with the inline theme where the toolbar wasn't repositioned on window resize.
+Version 4.7.4 (2017-12-05)
+    Fixed bug in the Nonbreaking Plugin where the nonbreaking_force_tab setting was being ignored.
+    Fixed bug in the Table Plugin where changing row height incorrectly converted column widths to pixels.
+    Fixed bug in the Table Plugin on Edge and IE11 where resizing the last column after resizing the table would cause invalid column heights.
+    Fixed bug in the Table Plugin where keyboard navigation was not normalized between browsers.
+    Fixed bug in the Table Plugin where the colorpicker button would show even without defining the colorpicker_callback.
+    Fixed bug in the Table Plugin where it wasn't possible to set the cell background color.
+    Fixed bug where Firefox would throw an error when intialising an editor on an element that is hidden or not yet added to the DOM.
+    Fixed bug where Firefox would throw an error when intialising an editor inside of a hidden iframe.
+Version 4.7.3 (2017-11-23)
+    Added functionality to open the Codesample Plugin dialog when double clicking on a codesample. Patch contributed by dakuzen.
+    Fixed bug where undo/redo didn't work correctly with some formats and caret positions.
+    Fixed bug where the color picker didn't show up in Table Plugin dialogs.
+    Fixed bug where it wasn't possible to change the width of a table through the Table Plugin dialog.
+    Fixed bug where the Charmap Plugin couldn't insert some special characters.
+    Fixed bug where editing a newly inserted link would not actually edit the link but insert a new link next to it.
+    Fixed bug where deleting all content in a table cell made it impossible to place the caret into it.
+    Fixed bug where the vertical alignment field in the Table Plugin cell properties dialog didn't do anything.
+    Fixed bug where an image with a caption showed two sets of resize handles in IE11.
+    Fixed bug where pressing the enter button inside of an h1 with contenteditable set to true would sometimes produce a p tag.
+    Fixed bug with backspace not working as expected before a noneditable element.
+    Fixed bug where operating on tables with invalid rowspans would cause an error to be thrown.
+    Fixed so a real base64 representation of the image is available on the blobInfo that the images_upload_handler gets called with.
+    Fixed so the image upload tab is available when the images_upload_handler is defined (and not only when the images_upload_url is defined).
+Version 4.7.2 (2017-11-07)
+    Added newly rewritten Table Plugin.
+    Added support for attributes with colon in valid_elements and addValidElements.
+    Added support for dailymotion short url in the Media Plugin. Patch contributed by maat8.
+    Added support for converting to half pt when converting font size from px to pt. Patch contributed by danny6514.
+    Added support for location hash to the Autosave plugin to make it work better with SPAs using hash routing.
+    Added support for merging table cells when pasting a table into another table.
+    Changed so the language packs are only loaded once. Patch contributed by 0xor1.
+    Simplified the css for inline boundaries selection by switching to an attribute selector.
+    Fixed bug where an error would be thrown on editor initialization if the window.getSelection() returned null.
+    Fixed bug where holding down control or alt keys made the keyboard navigation inside an inline boundary not work as expected.
+    Fixed bug where applying formats in IE11 produced extra, empty paragraphs in the editor.
+    Fixed bug where the Word Count Plugin didn't count some mathematical operators correctly.
+    Fixed bug where removing an inline editor removed the element that the editor had been initialized on.
+    Fixed bug where setting the selection to the end of an editable container caused some formatting problems.
+    Fixed bug where an error would be thrown sometimes when an editor was removed because of the selection bookmark was being stored asynchronously.
+    Fixed a bug where an editor initialized on an empty list did not contain any valid cursor positions.
+    Fixed a bug with the Context Menu Plugin and webkit browsers on Mac where right-clicking inside a table would produce an incorrect selection.
+    Fixed bug where the Image Plugin constrain proportions setting wasn't working as expected.
+    Fixed bug where deleting the last character in a span with decorations produced an incorrect element when typing.
+    Fixed bug where focusing on inline editors made the toolbar flicker when moving between elements quickly.
+    Fixed bug where the selection would be stored incorrectly in inline editors when the mouseup event was fired outside the editor body.
+    Fixed bug where toggling bold at the end of an inline boundary would toggle off the whole word.
+    Fixed bug where setting the skin to false would not stop the loading of some skin css files.
+    Fixed bug in mobile theme where pinch-to-zoom would break after exiting the editor.
+    Fixed bug where sublists of a fully selected list would not be switched correctly when changing list style.
+    Fixed bug where inserting media by source would break the UndoManager.
+    Fixed bug where inserting some content into the editor with a specific selection would replace some content incorrectly.
+    Fixed bug where selecting all content with ctrl+a in IE11 caused problems with untoggling some formatting.
+    Fixed bug where the Search and Replace Plugin left some marker spans in the editor when undoing and redoing after replacing some content.
+    Fixed bug where the editor would not get a scrollbar when using the Fullscreen and Autoresize plugins together.
+    Fixed bug where the font selector would stop working correctly after selecting fonts three times.
+    Fixed so pressing the enter key inside of an inline boundary inserts a br after the inline boundary element.
+    Fixed a bug where it wasn't possible to use tab navigation inside of a table that was inside of a list.
+    Fixed bug where end_container_on_empty_block would incorrectly remove elements.
+    Fixed bug where content_styles weren't added to the Preview Plugin iframe.
+    Fixed so the beforeSetContent/beforeGetContent events are preventable.
+    Fixed bug where changing height value in Table Plugin advanced tab didn't do anything.
+    Fixed bug where it wasn't possible to remove formatting from content in beginning of table cell.
+Version 4.7.1 (2017-10-09)
+    Fixed bug where theme set to false on an inline editor produced an extra div element after the target element.
+    Fixed bug where the editor drag icon was misaligned with the branding set to false.
+    Fixed bug where doubled menu items were not being removed as expected with the removed_menuitems setting.
+    Fixed bug where the Table of contents plugin threw an error when initialized.
+    Fixed bug where it wasn't possible to add inline formats to text selected right to left.
+    Fixed bug where the paste from plain text mode did not work as expected.
+    Fixed so the style previews do not set color and background color when selected.
+    Fixed bug where the Autolink plugin didn't work as expected with some formats applied on an empty editor.
+    Fixed bug where the Textpattern plugin were throwing errors on some patterns.
+    Fixed bug where the Save plugin saved all editors instead of only the active editor. Patch contributed by dannoe.
+Version 4.7.0 (2017-10-03)
+    Added new mobile ui that is specifically designed for mobile devices.
+    Updated the default skin to be more modern and white since white is preferred by most implementations.
+    Restructured the default menus to be more similar to common office suites like Google Docs.
+    Fixed so theme can be set to false on both inline and iframe editor modes.
+    Fixed bug where inline editor would add/remove the visualblocks css multiple times.
+    Fixed bug where selection wouldn't be properly restored when editor lost focus and commands where invoked.
+    Fixed bug where toc plugin would generate id:s for headers even though a toc wasn't inserted into the content.
+    Fixed bug where is wasn't possible to drag/drop contents within the editor if paste_data_images where set to true.
+    Fixed bug where getParam and close in WindowManager would get the first opened window instead of the last opened window.
+    Fixed bug where delete would delete between cells inside a table in Firefox.
+Version 4.6.7 (2017-09-18)
+    Fixed bug where paste wasn't working in IOS.
+    Fixed bug where the Word Count Plugin didn't count some mathematical operators correctly.
+    Fixed bug where inserting a list in a table caused the cell to expand in height.
+    Fixed bug where pressing enter in a list located inside of a table deleted list items instead of inserting new list item.
+    Fixed bug where copy and pasting table cells produced inconsistent results.
+    Fixed bug where initializing an editor with an ID of 'length' would throw an exception.
+    Fixed bug where it was possible to split a non merged table cell.
+    Fixed bug where copy and pasting a list with a very specific selection into another list would produce a nested list.
+    Fixed bug where copy and pasting ordered lists sometimes produced unordered lists.
+    Fixed bug where padded elements inside other elements would be treated as empty.
+    Added some missing translations to Image, Link and Help plugins.
+    Fixed so you can resize images inside a figure element.
+    Fixed bug where an inline TinyMCE editor initialized on a table did not set selection on load in Chrome.
+    Fixed the positioning of the inlite toolbar when the target element wasn't big enough to fit the toolbar.
+Version 4.6.6 (2017-08-30)
+    Fixed so that notifications wrap long text content instead of bleeding outside the notification element.
+    Fixed so the content_style css is added after the skin and custom stylesheets.
+    Fixed bug where it wasn't possible to remove a table with the Cut button.
+    Fixed bug where the center format wasn't getting the same font size as the other formats in the format preview.
+    Fixed bug where the wordcount plugin wasn't counting hyphenated words correctly.
+    Fixed bug where all content pasted into the editor was added to the end of the editor.
+    Fixed bug where enter keydown on list item selection only deleted content and didn't create a new line.
+    Fixed bug where destroying the editor while the content css was still loading caused error notifications on Firefox.
+    Fixed bug where undoing cut operation in IE11 left some unwanted html in the editor content.
+    Fixed bug where enter keydown would throw an error in IE11.
+    Fixed bug where duplicate instances of an editor were added to the editors array when using the createEditor API.
+    Fixed bug where the formatter applied formats on the wrong content when spellchecker was activated.
+    Fixed bug where switching formats would reset font size on child nodes.
+    Fixed bug where the table caption element weren't always the first descendant to the table tag.
+    Fixed bug where pasting some content into the editor on chrome some newlines were removed.
+    Fixed bug where it wasn't possible to remove a list if a list item was a table element.
+    Fixed bug where copy/pasting partial selections of tables wouldn't produce a proper table.
+    Fixed bug where the searchreplace plugin could not find consecutive spaces.
+    Fixed bug where background color wasn't applied correctly on some partially selected contents.
+Version 4.6.5 (2017-08-02)
+    Added new inline_boundaries_selector that allows you to specify the elements that should have boundaries.
+    Added new local upload feature this allows the user to upload images directly from the image dialog.
+    Added a new api for providing meta data for plugins. It will show up in the help dialog if it's provided.
+    Fixed so that the notifications created by the notification manager are more screen reader accessible.
+    Fixed bug where changing the list format on multiple selected lists didn't change all of the lists.
+    Fixed bug where the nonbreaking plugin would insert multiple undo levels when pressing the tab key.
+    Fixed bug where delete/backspace wouldn't render a caret when all editor contents where deleted.
+    Fixed bug where delete/backspace wouldn't render a caret if the deleted element was a single contentEditable false element.
+    Fixed bug where the wordcount plugin wouldn't count words correctly if word where typed after applying a style format.
+    Fixed bug where the wordcount plugin would count mathematical formulas as multiple words for example 1+1=2.
+    Fixed bug where formatting of triple clicked blocks on Chrome/Safari would result in styles being added outside the visual selection.
+    Fixed bug where paste would add the contents to the end of the editor area when inline mode was used.
+    Fixed bug where toggling off bold formatting on text entered in a new paragraph would add an extra line break.
+    Fixed bug where autolink plugin would only produce a link on every other consecutive link on Firefox.
+    Fixed bug where it wasn't possible to select all contents if the content only had one pre element.
+    Fixed bug where sizzle would produce lagging behavior on some sites due to repaints caused by feature detection.
+    Fixed bug where toggling off inline formats wouldn't include the space on selected contents with leading or trailing spaces.
+    Fixed bug where the cut operation in UI wouldn't work in Chrome.
+    Fixed bug where some legacy editor initialization logic would throw exceptions about editor settings not being defined.
+    Fixed bug where it wasn't possible to apply text color to links if they where part of a non collapsed selection.
+    Fixed bug where an exception would be thrown if the user selected a video element and then moved the focus outside the editor.
+    Fixed bug where list operations didn't work if there where block elements inside the list items.
+    Fixed bug where applying block formats to lists wrapped in block elements would apply to all elements in that wrapped block.
+Version 4.6.4 (2017-06-13)
+    Fixed bug where the editor would move the caret when clicking on the scrollbar next to a content editable false block.
+    Fixed bug where the text color select dropdowns wasn't placed correctly when they didn't fit the width of the screen.
+    Fixed bug where the default editor line height wasn't working for mixed font size contents.
+    Fixed bug where the content css files for inline editors were loaded multiple times for multiple editor instances.
+    Fixed bug where the initial value of the font size/font family dropdowns wasn't displayed.
+    Fixed bug where the I18n api was not supporting arrays as the translation replacement values.
+    Fixed bug where chrome would display "The given range isn't in document." errors for invalid ranges passed to setRng.
+    Fixed bug where the compat3x plugin wasn't working since the global tinymce references wasn't resolved correctly.
+    Fixed bug where the preview plugin wasn't encoding the base url passed into the iframe contents producing a xss bug.
+    Fixed bug where the dom parser/serializer wasn't handling some special elements like noframes, title and xmp.
+    Fixed bug where the dom parser/serializer wasn't handling cdata sections with comments inside.
+    Fixed bug where the editor would scroll to the top of the editable area if a dialog was closed in inline mode.
+    Fixed bug where the link dialog would not display the right rel value if rel_list was configured.
+    Fixed bug where the context menu would select images on some platforms but not others.
+    Fixed bug where the filenames of images were not retained on dragged and drop into the editor from the desktop.
+    Fixed bug where the paste plugin would misrepresent newlines when pasting plain text and having forced_root_block configured.
+    Fixed so that the error messages for the imagetools plugin is more human readable.
+    Fixed so the internal validate setting for the parser/serializer can't be set from editor initialization settings.
+Version 4.6.3 (2017-05-30)
+    Fixed bug where the arrow keys didn't work correctly when navigating on nested inline boundary elements.
+    Fixed bug where delete/backspace didn't work correctly on nested inline boundary elements.
+    Fixed bug where image editing didn't work on subsequent edits of the same image.
+    Fixed bug where charmap descriptions wouldn't properly wrap if they exceeded the width of the box.
+    Fixed bug where the default image upload handler only accepted 200 as a valid http status code.
+    Fixed so rel on target=_blank links gets forced with only noopener instead of both noopener and noreferrer.
+Version 4.6.2 (2017-05-23)
+    Fixed bug where the SaxParser would run out of memory on very large documents.
+    Fixed bug with formatting like font size wasn't applied to del elements.
+    Fixed bug where various api calls would be throwing exceptions if they where invoked on a removed editor instance.
+    Fixed bug where the branding position would be incorrect if the editor was inside a hidden tab and then later showed.
+    Fixed bug where the color levels feature in the imagetools dialog wasn't working properly.
+    Fixed bug where imagetools dialog wouldn't pre-load images from CORS domains, before trying to prepare them for editing.
+    Fixed bug where the tab key would move the caret to the next table cell if being pressed inside a list inside a table.
+    Fixed bug where the cut/copy operations would loose parent context like the current format etc.
+    Fixed bug with format preview not working on invalid elements excluded by valid_elements.
+    Fixed bug where blocks would be merged in incorrect order on backspace/delete.
+    Fixed bug where zero length text nodes would cause issues with the undo logic if there where iframes present.
+    Fixed bug where the font size/family select lists would throw errors if the first node was a comment.
+    Fixed bug with csp having to allow local script evaluation since it was used to detect global scope.
+    Fixed bug where CSP required a relaxed option for javascript: URLs in unsupported legacy browsers.
+    Fixed bug where a fake caret would be rendered for td with the contenteditable=false.
+    Fixed bug where typing would be blocked on IE 11 when within a nested contenteditable=true/false structure.
+Version 4.6.1 (2017-05-10)
+    Added configuration option to list plugin to disable tab indentation.
+    Fixed bug where format change on very specific content could cause the selection to change.
+    Fixed bug where TinyMCE could not be lazyloaded through jquery integration.
+    Fixed bug where entities in style attributes weren't decoded correctly on paste in webkit.
+    Fixed bug where fontsize_formats option had been renamed incorrectly.
+    Fixed bug with broken backspace/delete behaviour between contenteditable=false blocks.
+    Fixed bug where it wasn't possible to backspace to the previous line with the inline boundaries functionality turned on.
+    Fixed bug where is wasn't possible to move caret left and right around a linked image with the inline boundaries functionality turned on.
+    Fixed bug where pressing enter after/before hr element threw exception. Patch contributed bradleyke.
+    Fixed so the CSS in the visualblocks plugin doesn't overwrite background color. Patch contributed by Christian Rank.
+    Fixed bug where multibyte characters weren't encoded correctly. Patch contributed by James Tarkenton.
+    Fixed bug where shift-click to select within contenteditable=true fields wasn't working.
+Version 4.6.0 (2017-05-04)
+    Dropped support for IE 8-10 due to market share and lack of support from Microsoft. See tinymce docs for details.
+    Added an inline boundary caret position feature that makes it easier to type at the beginning/end of links/code elements.
+    Added a help plugin that adds a button and a dialog showing the editor shortcuts and loaded plugins.
+    Added an inline_boundaries option that allows you to disable the inline boundary feature if it's not desired.
+    Added a new ScrollIntoView event that allows you to override the default scroll to element behavior.
+    Added role and aria- attributes as valid elements in the default valid elements config.
+    Added new internal flag for PastePreProcess/PastePostProcess this is useful to know if the paste was coming from an external source.
+    Added new ignore function to UndoManager this works similar to transact except that it doesn't add an undo level by default.
+    Fixed so that urls gets retained for images when being edited. This url is then passed on to the upload handler.
+    Fixed so that the editors would be initialized on readyState interactive instead of complete.
+    Fixed so that the init event of the editor gets fired once all contentCSS files have been properly loaded.
+    Fixed so that width/height of the editor gets taken from the textarea element if it's explicitly specified in styles.
+    Fixed so that keep_styles set to false no longer clones class/style from the previous paragraph on enter.
+    Fixed so that the default line-height is 1.2em to avoid zwnbsp characters from producing text rendering glitches on Windows.
+    Fixed so that loading errors of content css gets presented by a notification message.
+    Fixed so figure image elements can be linked when selected this wraps the figure image in a anchor element.
+    Fixed bug where it wasn't possible to copy/paste rows with colspans by using the table copy/paste feature.
+    Fixed bug where the protect setting wasn't properly applied to header/footer parts when using the fullpage plugin.
+    Fixed bug where custom formats that specified upper case element names where not applied correctly.
+    Fixed bug where some screen readers weren't reading buttons due to an aria specific fix for IE 8.
+    Fixed bug where cut wasn't working correctly on iOS due to it's clipboard API not working correctly.
+    Fixed bug where Edge would paste div elements instead of paragraphs when pasting plain text.
+    Fixed bug where the textpattern plugin wasn't dealing with trailing punctuations correctly.
+    Fixed bug where image editing would some times change the image format from jpg to png.
+    Fixed bug where some UI elements could be inserted into the toolbar even if they where not registered.
+    Fixed bug where it was possible to click the TD instead of the character in the character map and that caused an exception.
+    Fixed bug where the font size/font family dropdowns would sometimes show an incorrect value due to css not being loaded in time.
+    Fixed bug with the media plugin inserting undefined instead of retaining size when media_dimensions was set to false.
+    Fixed bug with deleting images when forced_root_blocks where set to false.
+    Fixed bug where input focus wasn't properly handled on nested content editable elements.
+    Fixed bug where Chrome/Firefox would throw an exception when selecting images due to recent change of setBaseAndExtent support.
+    Fixed bug where malformed blobs would throw exceptions now they are simply ignored.
+    Fixed bug where backspace/delete wouldn't work properly in some cases where all contents was selected in WebKit.
+    Fixed bug with Angular producing errors since it was expecting events objects to be patched with their custom properties.
+    Fixed bug where the formatter would apply formatting to spellchecker errors now all bogus elements are excluded.
+    Fixed bug with backspace/delete inside table caption elements wouldn't behave properly on IE 11.
+    Fixed bug where typing after a contenteditable false inline element could move the caret to the end of that element.
+    Fixed bug where backspace before/after contenteditable false blocks wouldn't properly remove the right element.
+    Fixed bug where backspace before/after contenteditable false inline elements wouldn't properly empty the current block element.
+    Fixed bug where vertical caret navigation with a custom line-height would sometimes match incorrect positions.
+    Fixed bug with paste on Edge where character encoding wasn't handled properly due to a browser bug.
+    Fixed bug with paste on Edge where extra fragment data was inserted into the contents when pasting.
+    Fixed bug with pasting contents when having a whole block element selected on WebKit could cause WebKit spans to appear.
+    Fixed bug where the visualchars plugin wasn't working correctly showing invisible nbsp characters.
+    Fixed bug where browsers would hang if you tried to load some malformed html contents.
+    Fixed bug where the init call promise wouldn't resolve if the specified selector didn't find any matching elements.
+    Fixed bug where the Schema isValidChild function was case sensitive.
+Version 4.5.3 (2017-02-01)
+    Added keyboard navigation for menu buttons when the menu is in focus.
+    Added api to the list plugin for setting custom classes/attributes on lists.
+    Added validation for the anchor plugin input field according to W3C id naming specifications.
+    Fixed bug where media placeholders were removed after resize with the forced_root_block setting set to false.
+    Fixed bug where deleting selections with similar sibling nodes sometimes deleted the whole document.
+    Fixed bug with inlite theme where several toolbars would appear scrolling when more than one instance of the editor was in use.
+    Fixed bug where the editor would throw error with the fontselect plugin on hidden editor instances in Firefox.
+    Fixed bug where the background color would not stretch to the font size.
+    Fixed bug where font size would be removed when changing background color.
+    Fixed bug where the undomanager trimmed away whitespace between nodes on undo/redo.
+    Fixed bug where media_dimensions=false in media plugin caused the editor to throw an error.
+    Fixed bug where IE was producing font/u elements within links on paste.
+    Fixed bug where some button tooltips were broken when compat3x was in use.
+    Fixed bug where backspace/delete/typeover would remove the caption element.
+    Fixed bug where powerspell failed to function when compat3x was enabled.
+    Fixed bug where it wasn't possible to apply sub/sup on text with large font size.
+    Fixed bug where pre tags with spaces weren't treated as content.
+    Fixed bug where Meta+A would select the entire document instead of all contents in nested ce=true elements.
+Version 4.5.2 (2017-01-04)
+    Added missing keyboard shortcut description for the underline menu item in the format menu.
+    Fixed bug where external blob urls wasn't properly handled by editor upload logic. Patch contributed by David Oviedo.
+    Fixed bug where urls wasn't treated as a single word by the wordcount plugin.
+    Fixed bug where nbsp characters wasn't treated as word delimiters by the wordcount plugin.
+    Fixed bug where editor instance wasn't properly passed to the format preview logic. Patch contributed by NullQuery.
+    Fixed bug where the fake caret wasn't hidden when you moved selection to a cE=false element.
+    Fixed bug where it wasn't possible to edit existing code sample blocks.
+    Fixed bug where it wasn't possible to delete editor contents if the selection included an empty block.
+    Fixed bug where the formatter wasn't expanding words on some international characters. Patch contributed by Martin Larochelle.
+    Fixed bug where the open link feature wasn't working correctly on IE 11.
+    Fixed bug where enter before/after a cE=false block wouldn't properly padd the paragraph with an br element.
+    Fixed so font size and font family select boxes always displays a value by using the runtime style as a fallback.
+    Fixed so missing plugins will be logged to console as warnings rather than halting the initialization of the editor.
+    Fixed so splitbuttons become normal buttons in advlist plugin if styles are empty. Patch contributed by René Schleusner.
+    Fixed so you can multi insert rows/cols by selecting table cells and using insert rows/columns.
+Version 4.5.1 (2016-12-07)
+    Fixed bug where the lists plugin wouldn't initialize without the advlist plugins if served from cdn.
+    Fixed bug where selectors with "*" would cause the style format preview to throw an error.
+    Fixed bug with toggling lists off on lists with empty list items would throw an error.
+    Fixed bug where editing images would produce non existing blob uris.
+    Fixed bug where the offscreen toc selection would be treated as the real toc element.
+    Fixed bug where the aria level attribute for element path would have an incorrect start index.
+    Fixed bug where the offscreen selection of cE=false that where very wide would be shown onscreen. Patch contributed by Steven Bufton.
+    Fixed so the default_link_target gets applied to links created by the autolink plugin.
+    Fixed so that the name attribute gets removed by the anchor plugin if editing anchors.
+Version 4.5.0 (2016-11-23)
+    Added new toc plugin allows you to insert table of contents based on editor headings.
+    Added new auto complete menu to all url fields. Adds history, link to anchors etc.
+    Added new sidebar api that allows you to add custom sidebar panels and buttons to toggle these.
+    Added new insert menu button that allows you to have multiple insert functions under the same menu button.
+    Added new open link feature to ctrl+click, alt+enter and context menu.
+    Added new media_embed_handler option to allow the media plugin to be populated with custom embeds.
+    Added new support for editing transparent images using the image tools dialog.
+    Added new images_reuse_filename option to allow filenames of images to be retained for upload.
+    Added new security feature where links with target="_blank" will by default get rel="noopener noreferrer".
+    Added new allow_unsafe_link_target to allow you to opt-out of the target="_blank" security feature.
+    Added new style_formats_autohide option to automatically hide styles based on context.
+    Added new codesample_content_css option to specify where the code sample prism css is loaded from.
+    Added new support for Japanese/Chinese word count following the unicode standards on this.
+    Added new fragmented undo levels this dramatically reduces flicker on contents with iframes.
+    Added new live previews for complex elements like table or lists.
+    Fixed bug where it wasn't possible to properly tab between controls in a dialog with a disabled form item control.
+    Fixed bug where firefox would generate a rectangle on elements produced after/before a cE=false elements.
+    Fixed bug with advlist plugin not switching list element format properly in some edge cases.
+    Fixed bug where col/rowspans wasn't correctly computed by the table plugin in some cases.
+    Fixed bug where the table plugin would thrown an error if object_resizing was disabled.
+    Fixed bug where some invalid markup would cause issues when running in XHTML mode. Patch contributed by Charles Bourasseau.
+    Fixed bug where the fullscreen class wouldn't be removed properly when closing dialogs.
+    Fixed bug where the PastePlainTextToggle event wasn't fired by the paste plugin when the state changed.
+    Fixed bug where table the row type wasn't properly updated in table row dialog. Patch contributed by Matthias Balmer.
+    Fixed bug where select all and cut wouldn't place caret focus back to the editor in WebKit. Patch contributed by Daniel Jalkut.
+    Fixed bug where applying cell/row properties to multiple cells/rows would reset other unchanged properties.
+    Fixed bug where some elements in the schema would have redundant/incorrect children.
+    Fixed bug where selector and target options would cause issues if used together.
+    Fixed bug where drag/drop of images from desktop on chrome would thrown an error.
+    Fixed bug where cut on WebKit/Blink wouldn't add an undo level.
+    Fixed bug where IE 11 would scroll to the cE=false elements when they where selected.
+    Fixed bug where keys like F5 wouldn't work when a cE=false element was selected.
+    Fixed bug where the undo manager wouldn't stop the typing state when commands where executed.
+    Fixed bug where unlink on wrapped links wouldn't work properly.
+    Fixed bug with drag/drop of images on WebKit where the image would be deleted form the source editor.
+    Fixed bug where the visual characters mode would be disabled when contents was extracted from the editor.
+    Fixed bug where some browsers would toggle of formats applied to the caret when clicking in the editor toolbar.
+    Fixed bug where the custom theme function wasn't working correctly.
+    Fixed bug where image option for custom buttons required you to have icon specified as well.
+    Fixed bug where the context menu and contextual toolbars would be visible at the same time and sometimes overlapping.
+    Fixed bug where the noneditable plugin would double wrap elements when using the noneditable_regexp option.
+    Fixed bug where tables would get padding instead of margin when you used the indent button.
+    Fixed bug where the charmap plugin wouldn't properly insert non breaking spaces.
+    Fixed bug where the color previews in color input boxes wasn't properly updated.
+    Fixed bug where the list items of previous lists wasn't merged in the right order.
+    Fixed bug where it wasn't possible to drag/drop inline-block cE=false elements on IE 11.
+    Fixed bug where some table cell merges would produce incorrect rowspan/colspan.
+    Fixed so the font size of the editor defaults to 14px instead of 11px this can be overridden by custom css.
+    Fixed so wordcount is debounced to reduce cpu hogging on larger texts.
+    Fixed so tinymce global gets properly exported as a module when used with some module bundlers.
+    Fixed so it's possible to specify what css properties you want to preview on specific formats.
+    Fixed so anchors are contentEditable=false while within the editor.
+    Fixed so selected contents gets wrapped in a inline code element by the codesample plugin.
+    Fixed so conditional comments gets properly stripped independent of case. Patch contributed by Georgii Dolzhykov.
+    Fixed so some escaped css sequences gets properly handled. Patch contributed by Georgii Dolzhykov.
+    Fixed so notifications with the same message doesn't get displayed at the same time.
+    Fixed so F10 can be used as an alternative key to focus to the toolbar.
+    Fixed various api documentation issues and typos.
+    Removed layer plugin since it wasn't really ported from 3.x and there doesn't seem to be much use for it.
+    Removed moxieplayer.swf from the media plugin since it wasn't used by the media plugin.
+    Removed format state from the advlist plugin to be more consistent with common word processors.
+Version 4.4.3 (2016-09-01)
+    Fixed bug where copy would produce an exception on Chrome.
+    Fixed bug where deleting lists on IE 11 would merge in correct text nodes.
+    Fixed bug where deleting partial lists with indentation wouldn't cause proper normalization.
+Version 4.4.2 (2016-08-25)
+    Added new importcss_exclusive option to disable unique selectors per group.
+    Added new group specific selector_converter option to importcss plugin.
+    Added new codesample_languages option to apply custom languages to codesample plugin.
+    Added new codesample_dialog_width/codesample_dialog_height options.
+    Fixed bug where fullscreen button had an incorrect keyboard shortcut.
+    Fixed bug where backspace/delete wouldn't work correctly from a block to a cE=false element.
+    Fixed bug where smartpaste wasn't detecting links with special characters in them like tilde.
+    Fixed bug where the editor wouldn't get proper focus if you clicked on a cE=false element.
+    Fixed bug where it wasn't possible to copy/paste table rows that had merged cells.
+    Fixed bug where merging cells could some times produce invalid col/rowspan attibute values.
+    Fixed bug where getBody would sometimes thrown an exception now it just returns null if the iframe is clobbered.
+    Fixed bug where drag/drop of cE=false element wasn't properly constrained to viewport.
+    Fixed bug where contextmenu on Mac would collapse any selection to a caret.
+    Fixed bug where rtl mode wasn't rendered properly when loading a language pack with the rtl flag.
+    Fixed bug where Kamer word bounderies would be stripped from contents.
+    Fixed bug where lists would sometimes render two dots or numbers on the same line.
+    Fixed bug where the skin_url wasn't used by the inlite theme.
+    Fixed so data attributes are ignored when comparing formats in the formatter.
+    Fixed so it's possible to disable inline toolbars in the inlite theme.
+    Fixed so template dialog gets resized if it doesn't fit the window viewport.
+Version 4.4.1 (2016-07-26)
+    Added smart_paste option to paste plugin to allow disabling the paste behavior if needed.
+    Fixed bug where png urls wasn't properly detected by the smart paste logic.
+    Fixed bug where the element path wasn't working properly when multiple editor instances where used.
+    Fixed bug with creating lists out of multiple paragraphs would just create one list item instead of multiple.
+    Fixed bug where scroll position wasn't properly handled by the inlite theme to place the toolbar properly.
+    Fixed bug where multiple instances of the editor using the inlite theme didn't render the toolbar properly.
+    Fixed bug where the shortcut label for fullscreen mode didn't match the actual shortcut key.
+    Fixed bug where it wasn't possible to select cE=false blocks using touch devices on for example iOS.
+    Fixed bug where it was possible to select the child image within a cE=false on IE 11.
+    Fixed so inserts of html containing lists doesn't merge with any existing lists unless it's a paste operation.
+Version 4.4.0 (2016-06-30)
+    Added new inlite theme this is a more lightweight inline UI.
+    Added smarter paste logic that auto detects urls in the clipboard and inserts images/links based on that.
+    Added a better image resize algorithm for better image quality in the imagetools plugin.
+    Fixed bug where it wasn't possible to drag/dropping cE=false elements on FF.
+    Fixed bug where backspace/delete before/after a cE=false block would produce a new paragraph.
+    Fixed bug where list style type css property wasn't preserved when indenting lists.
+    Fixed bug where merging of lists where done even if the list style type was different.
+    Fixed bug where the image_dataimg_filter function wasn't used when pasting images.
+    Fixed bug where nested editable within a non editable element would cause scroll on focus in Chrome.
+    Fixed so invalid targets for inline mode is blocked on initialization. We only support elements that can have children.
+Version 4.3.13 (2016-06-08)
+    Added characters with a diacritical mark to charmap plugin. Patch contributed by Dominik Schilling.
+    Added better error handling if the image proxy service would produce errors.
+    Fixed issue with pasting list items into list items would produce nested list rather than a merged list.
+    Fixed bug where table selection could get stuck in selection mode for inline editors.
+    Fixed bug where it was possible to place the caret inside the resize grid elements.
+    Fixed bug where it wasn't possible to place in elements horizontally adjacent cE=false blocks.
+    Fixed bug where multiple notifications wouldn't be properly placed on screen.
+    Fixed bug where multiple editor instance of the same id could be produces in some specific integrations.
+Version 4.3.12 (2016-05-10)
+    Fixed bug where focus calls couldn't be made inside the editors PostRender event handler.
+    Fixed bug where some translations wouldn't work as expected due to a bug in editor.translate.
+    Fixed bug where the node change event could fire with a node out side the root of the editor.
+    Fixed bug where Chrome wouldn't properly present the keyboard paste clipboard details when paste was clicked.
+    Fixed bug where merged cells in tables couldn't be selected from right to left.
+    Fixed bug where insert row wouldn't properly update a merged cells rowspan property.
+    Fixed bug where the color input boxes preview field wasn't properly set on initialization.
+    Fixed bug where IME composition inside table cells wouldn't work as expected on IE 11.
+    Fixed so all shadow dom support is under and experimental flag due to flaky browser support.
+Version 4.3.11 (2016-04-25)
+    Fixed bug where it wasn't possible to insert empty blocks though the API unless they where padded.
+    Fixed bug where you couldn't type the Euro character on Windows.
+    Fixed bug where backspace/delete from a cE=false element to a text block didn't work properly.
+    Fixed bug where the text color default grid would render incorrectly.
+    Fixed bug where the codesample plugin wouldn't load the css in the editor for multiple editors.
+    Fixed so the codesample plugin textarea gets focused by default.
+Version 4.3.10 (2016-04-12)
+    Fixed bug where the key "y" on WebKit couldn't be entered due to conflict with keycode for F10 on keypress.
+Version 4.3.9 (2016-04-12)
+    Added support for focusing the contextual toolbars using keyboard.
+    Added keyboard support for slider UI controls. You can no increase/decrease using arrow keys.
+    Added url pattern matching for Dailymotion to media plugin. Patch contributed by Bertrand Darbon.
+    Added body_class to template plugin preview. Patch contributed by Milen Petrinski.
+    Added options to better override textcolor pickers with custom colors. Patch contributed by Xavier Boubert.
+    Added visual arrows to inline contextual toolbars so that they point to the element being active.
+    Fixed so toolbars for tables or other larger elements get better positioned below the scrollable viewport.
+    Fixed bug where it was possible to click links inside cE=false blocks.
+    Fixed bug where event targets wasn't properly handled in Safari Technical Preview.
+    Fixed bug where drag/drop text in FF 45 would make the editor caret invisible.
+    Fixed bug where the remove state wasn't properly set on editor instances when detected as clobbered.
+    Fixed bug where offscreen selection of some cE=false elements would render onscreen. Patch contributed by Steven Bufton
+    Fixed bug where enter would clone styles out side the root on editors inside a span. Patch contributed by ChristophKaser.
+    Fixed bug where drag/drop of images into the editor didn't work correctly in FF.
+    Fixed so the first item in panels for the imagetools dialog gets proper keyboard focus.
+    Changed the Meta+Shift+F shortcut to Ctrl+Shift+F since Czech, Slovak, Polish languages used the first one for input.
+Version 4.3.8 (2016-03-15)
+    Fixed bug where inserting HR at the end of a block element would produce an extra empty block.
+    Fixed bug where links would be clickable when readonly mode was enabled.
+    Fixed bug where the formatter would normalize to the wrong node on very specific content.
+    Fixed bug where some nested list items couldn't be indented properly.
+    Fixed bug where links where clickable in the preview dialog.
+    Fixed so the alt attribute doesn't get padded with an empty value by default.
+    Fixed so nested alignment works more correctly. You will now alter the alignment to the closest block parent.
+Version 4.3.7 (2016-03-02)
+    Fixed bug where incorrect icons would be rendered for imagetools edit and color levels.
+    Fixed bug where navigation using arrow keys inside a SelectBox didn't move up/down.
+    Fixed bug where the visualblocks plugin would render borders round internal UI elements.
+Version 4.3.6 (2016-03-01)
+    Added new paste_remember_plaintext_info option to allow a global disable of the plain text mode notification.
+    Added new PastePlainTextToggle event that fires when plain text mode toggles on/off.
+    Fixed bug where it wasn't possible to select media elements since the drag logic would snap it to mouse cursor.
+    Fixed bug where it was hard to place the caret inside nested cE=true elements when the outer cE=false element was focused.
+    Fixed bug where editors wouldn't properly initialize if both selector and mode where used.
+    Fixed bug where IME input inside table cells would switch the IME off.
+    Fixed bug where selection inside the first table cell would cause the whole table cell to get selected.
+    Fixed bug where error handling of images being uploaded wouldn't properly handle faulty statuses.
+    Fixed bug where inserting contents before a HR would cause an exception to be thrown.
+    Fixed bug where copy/paste of Excel data would be inserted as an image.
+    Fixed caret position issues with copy/paste of inline block cE=false elements.
+    Fixed issues with various menu item focus bugs in Chrome. Where the focused menu bar item wasn't properly blurred.
+    Fixed so the notifications have a solid background since it would be hard to read if there where text under it.
+    Fixed so notifications gets animated similar to the ones used by dialogs.
+    Fixed so larger images that gets pasted is handled better.
+    Fixed so the window close button is more uniform on various platform and also increased it's hit area.
+Version 4.3.5 (2016-02-11)
+    Npm version bump due to package not being fully updated.
+Version 4.3.4 (2016-02-11)
+    Added new OpenWindow/CloseWindow events that gets fired when windows open/close.
+    Added new NewCell/NewRow events that gets fired when table cells/rows are created.
+    Added new Promise return value to tinymce.init makes it easier to handle initialization.
+    Removed the jQuery version the jQuery plugin is now moved into the main package.
+    Removed jscs from build process since eslint can now handle code style checking.
+    Fixed various bugs with drag/drop of contentEditable:false elements.
+    Fixed bug where deleting of very specific nested list items would result in an odd list.
+    Fixed bug where lists would get merged with adjacent lists outside the editable inline root.
+    Fixed bug where MS Edge would crash when closing a dialog then clicking a menu item.
+    Fixed bug where table cell selection would add undo levels.
+    Fixed bug where table cell selection wasn't removed when inline editor where removed.
+    Fixed bug where table cell selection wouldn't work properly on nested tables.
+    Fixed bug where table merge menu would be available when merging between thead and tbody.
+    Fixed bug where table row/column resize wouldn't get properly removed when the editor was removed.
+    Fixed bug where Chrome would scroll to the editor if there where a empty hash value in document url.
+    Fixed bug where the cache suffix wouldn't work correctly with the importcss plugin.
+    Fixed bug where selection wouldn't work properly on MS Edge on Windows Phone 10.
+    Fixed so adjacent pre blocks gets joined into one pre block since that seems like the user intent.
+    Fixed so events gets properly dispatched in shadow dom. Patch provided by Nazar Mokrynskyi.
+Version 4.3.3 (2016-01-14)
+    Added new table_resize_bars configuration setting.  This setting allows you to disable the table resize bars.
+    Added new beforeInitialize event to tinymce.util.XHR lets you modify XHR properties before open. Patch contributed by Brent Clintel.
+    Added new autolink_pattern setting to autolink plugin. Enables you to override the default autolink formats. Patch contributed by Ben Tiedt.
+    Added new charmap option that lets you override the default charmap of the charmap plugin.
+    Added new charmap_append option that lets you add new characters to the default charmap of the charmap plugin.
+    Added new insertCustomChar event that gets fired when a character is inserted by the charmap plugin.
+    Fixed bug where table cells started with a superfluous &nbsp; in IE10+.
+    Fixed bug where table plugin would retain all BR tags when cells were merged.
+    Fixed bug where media plugin would strip underscores from youtube urls.
+    Fixed bug where IME input would fail on IE 11 if you typed within a table.
+    Fixed bug where double click selection of a word would remove the space before the word on insert contents.
+    Fixed bug where table plugin would produce exceptions when hovering tables with invalid structure.
+    Fixed bug where fullscreen wouldn't scroll back to it's original position when untoggled.
+    Fixed so the template plugins templates setting can be a function that gets a callback that can provide templates.
+Version 4.3.2 (2015-12-14)
+    Fixed bug where the resize bars for table cells were not affected by the object_resizing property.
+    Fixed bug where the contextual table toolbar would appear incorrectly if TinyMCE was initialized inline inside a table.
+    Fixed bug where resizing table cells did not fire a node change event or add an undo level.
+    Fixed bug where double click selection of text on IE 11 wouldn't work properly.
+    Fixed bug where codesample plugin would incorrectly produce br elements inside code elements.
+    Fixed bug where media plugin would strip dashes from youtube urls.
+    Fixed bug where it was possible to move the caret into the table resize bars.
+    Fixed bug where drag/drop into a cE=false element was possible on IE.
+Version 4.3.1 (2015-11-30)
+    Fixed so it's possible to disable the table inline toolbar by setting it to false or an empty string.
+    Fixed bug where it wasn't possible to resize some tables using the drag handles.
+    Fixed bug where unique id:s would clash for multiple editor instances and cE=false selections.
+    Fixed bug where the same plugin could be initialized multiple times.
+    Fixed bug where the table inline toolbars would be displayed at the same time as the image toolbars.
+    Fixed bug where the table selection rect wouldn't be removed when selecting another control element.
+Version 4.3.0 (2015-11-23)
+    Added new table column/row resize support. Makes it a lot more easy to resize the columns/rows in a table.
+    Added new table inline toolbar. Makes it easier to for example add new rows or columns to a table.
+    Added new notification API. Lets you display floating notifications to the end user.
+    Added new codesample plugin that lets you insert syntax highlighted pre elements into the editor.
+    Added new image_caption to images. Lets you create images with captions using a HTML5 figure/figcaption elements.
+    Added new live previews of embeded videos. Lets you play the video right inside the editor.
+    Added new setDirty method and "dirty" event to the editor. Makes it easier to track the dirty state change.
+    Added new setMode method to Editor instances that lets you dynamically switch between design/readonly.
+    Added new core support for contentEditable=false elements within the editor overrides the browsers broken behavior.
+    Rewrote the noneditable plugin to use the new contentEditable false core logic.
+    Fixed so the dirty state doesn't set to false automatically when the undo index is set to 0.
+    Fixed the Selection.placeCaretAt so it works better on IE when the coordinate is between paragraphs.
+    Fixed bug where data-mce-bogus="all" element contents where counted by the word count plugin.
+    Fixed bug where contentEditable=false elements would be indented by the indent buttons.
+    Fixed bug where images within contentEditable=false would be selected in WebKit on mouse click.
+    Fixed bug in DOMUntils split method where the replacement parameter wouldn't work on specific cases.
+    Fixed bug where the importcss plugin would import classes from the skin content css file.
+    Fixed so all button variants have a wrapping span for it's text to make it easier to skin.
+    Fixed so it's easier to exit pre block using the arrow keys.
+    Fixed bug where listboxes with fix widths didn't render correctly.
+Version 4.2.8 (2015-11-13)
+    Fixed bug where it was possible to delete tables as the inline root element if all columns where selected.
+    Fixed bug where the UI buttons active state wasn't properly updated due to recent refactoring of that logic.
+Version 4.2.7 (2015-10-27)
+    Fixed bug where backspace/delete would remove all formats on the last paragraph character in WebKit/Blink.
+    Fixed bug where backspace within a inline format element with a bogus caret container would move the caret.
+    Fixed bug where backspace/delete on selected table cells wouldn't add an undo level.
+    Fixed bug where script tags embedded within the editor could sometimes get a mce- prefix prepended to them
+    Fixed bug where validate: false option could produce an error to be thrown from the Serialization step.
+    Fixed bug where inline editing of a table as the root element could let the user delete that table.
+    Fixed bug where inline editing of a table as the root element wouldn't properly handle enter key.
+    Fixed bug where inline editing of a table as the root element would normalize the selection incorrectly.
+    Fixed bug where inline editing of a list as the root element could let the user delete that list.
+    Fixed bug where inline editing of a list as the root element could let the user split that list.
+    Fixed bug where resize handles would be rendered on editable root elements such as table.
+Version 4.2.6 (2015-09-28)
+    Added capability to set request headers when using XHRs.
+    Added capability to upload local images automatically default delay is set to 30 seconds after editing images.
+    Added commands ids mceEditImage, mceAchor and mceMedia to be avaiable from execCommand.
+    Added Edge browser to saucelabs grunt task. Patch contributed by John-David Dalton.
+    Fixed bug where blob uris not produced by tinymce would produce HTML invalid markup.
+    Fixed bug where selection of contents of a nearly empty editor in Edge would sometimes fail.
+    Fixed bug where color styles woudln't be retained on copy/paste in Blink/Webkit.
+    Fixed bug where the table plugin would throw an error when inserting rows after a child table.
+    Fixed bug where the template plugin wouldn't handle functions as variable replacements.
+    Fixed bug where undo/redo sometimes wouldn't work properly when applying formatting collapsed ranges.
+    Fixed bug where shift+delete wouldn't do a cut operation on Blink/WebKit.
+    Fixed bug where cut action wouldn't properly store the before selection bookmark for the undo level.
+    Fixed bug where backspace in side an empty list element on IE would loose editor focus.
+    Fixed bug where the save plugin wouldn't enable the buttons when a change occurred.
+    Fixed bug where Edge wouldn't initialize the editor if a document.domain was specified.
+    Fixed bug where enter key before nested images would sometimes not properly expand the previous block.
+    Fixed bug where the inline toolbars wouldn't get properly hidden when blurring the editor instance.
+    Fixed bug where Edge would paste Chinese characters on some Windows 10 installations.
+    Fixed bug where IME would loose focus on IE 11 due to the double trailing br bug fix.
+    Fixed bug where the proxy url in imagetools was incorrect. Patch contributed by Wong Ho Wang.
+Version 4.2.5 (2015-08-31)
+    Added fullscreen capability to embedded youtube and vimeo videos.
+    Fixed bug where the uploadImages call didn't work on IE 10.
+    Fixed bug where image place holders would be uploaded by uploadImages call.
+    Fixed bug where images marked with bogus would be uploaded by the uploadImages call.
+    Fixed bug where multiple calls to uploadImages would result in decreased performance.
+    Fixed bug where pagebreaks were editable to imagetools patch contributed by Rasmus Wallin.
+    Fixed bug where the element path could cause too much recursion exception.
+    Fixed bug for domains containing ".min". Patch contributed by Loïc Février.
+    Fixed so validation of external links to accept a number after www. Patch contributed by Victor Carvalho.
+    Fixed so the charmap is exposed though execCommand. Patch contributed by Matthew Will.
+    Fixed so that the image uploads are concurrent for improved performance.
+    Fixed various grammar problems in inline documentation. Patches provided by nikolas.
+Version 4.2.4 (2015-08-17)
+    Added picture as a valid element to the HTML 5 schema. Patch contributed by Adam Taylor.
+    Fixed bug where contents would be duplicated on drag/drop within the same editor.
+    Fixed bug where floating/alignment of images on Edge wouldn't work properly.
+    Fixed bug where it wasn't possible to drag images on IE 11.
+    Fixed bug where image selection on Edge would sometimes fail.
+    Fixed bug where contextual toolbars icons wasn't rendered properly when using the toolbar_items_size.
+    Fixed bug where searchreplace dialog doesn't get prefilled with the selected text.
+    Fixed bug where fragmented matches wouldn't get properly replaced by the searchreplace plugin.
+    Fixed bug where enter key wouldn't place the caret if was after a trailing space within an inline element.
+    Fixed bug where the autolink plugin could produce multiple links for the same text on Gecko.
+    Fixed bug where EditorUpload could sometimes throw an exception if the blob wasn't found.
+    Fixed xss issues with media plugin not properly filtering out some script attributes.
+Version 4.2.3 (2015-07-30)
+    Fixed bug where image selection wasn't possible on Edge due to incompatible setBaseAndExtend API.
+    Fixed bug where image blobs urls where not properly destroyed by the imagetools plugin.
+    Fixed bug where keyboard shortcuts wasn't working correctly on IE 8.
+    Fixed skin issue where the borders of panels where not visible on IE 8.
+Version 4.2.2 (2015-07-22)
+    Fixed bug where float panels were not being hidden on inline editor blur when fixed_toolbar_container config option was in use.
+    Fixed bug where combobox states wasn't properly updated if contents where updated without keyboard.
+    Fixed bug where pasting into textbox or combobox would move the caret to the end of text.
+    Fixed bug where removal of bogus span elements before block elements would remove whitespace between nodes.
+    Fixed bug where repositioning of inline toolbars where async and producing errors if the editor was removed from DOM to early. Patch by iseulde.
+    Fixed bug where element path wasn't working correctly. Patch contributed by iseulde.
+    Fixed bug where menus wasn't rendered correctly when custom images where added to a menu. Patch contributed by Naim Hammadi.
+Version 4.2.1 (2015-06-29)
+    Fixed bug where back/forward buttons in the browser would render blob images as broken images.
+    Fixed bug where Firefox would throw regexp to big error when replacing huge base64 chunks.
+    Fixed bug rendering issues with resize and context toolbars not being placed properly until next animation frame.
+    Fixed bug where the rendering of the image while cropping would some times not be centered correctly.
+    Fixed bug where listbox items with submenus would me selected as active.
+    Fixed bug where context menu where throwing an error when rendering.
+    Fixed bug where resize both option wasn't working due to resent addClass API change. Patch contributed by Jogai.
+    Fixed bug where a hideAll call for container rendered inline toolbars would throw an error.
+    Fixed bug where onclick event handler on combobox could cause issues if element.id was a function by some polluting libraries.
+    Fixed bug where listboxes wouldn't get proper selected sub menu item when using link_list or image_list.
+    Fixed so the UI controls are as wide as 4.1.x to avoid wrapping controls in toolbars.
+    Fixed so the imagetools dialog is adaptive for smaller screen sizes.
+Version 4.2.0 (2015-06-25)
+    Added new flat default skin to make the UI more modern.
+    Added new imagetools plugin, lets you crop/resize and apply filters to images.
+    Added new contextual toolbars support to the API lets you add floating toolbars for specific CSS selectors.
+    Added new promise feature fill as tinymce.util.Promise.
+    Added new built in image upload feature lets you upload any base64 encoded image within the editor as files.
+    Fixed bug where resize handles would appear in the right position in the wrong editor when switching between resizable content in different inline editors.
+    Fixed bug where tables would not be inserted in inline mode due to previous float panel fix.
+    Fixed bug where floating panels would remain open when focus was lost on inline editors.
+    Fixed bug where cut command on Chrome would thrown a browser security exception.
+    Fixed bug where IE 11 sometimes would report an incorrect size for images in the image dialog.
+    Fixed bug where it wasn't possible to remove inline formatting at the end of block elements.
+    Fixed bug where it wasn't possible to delete table cell contents when cell selection was vertical.
+    Fixed bug where table cell wasn't emptied from block elements if delete/backspace where pressed in empty cell.
+    Fixed bug where cmd+shift+arrow didn't work correctly on Firefox mac when selecting to start/end of line.
+    Fixed bug where removal of bogus elements would sometimes remove whitespace between nodes.
+    Fixed bug where the resize handles wasn't updated when the main window was resized.
+    Fixed so script elements gets removed by default to prevent possible XSS issues in default config implementations.
+    Fixed so the UI doesn't need manual reflows when using non native layout managers.
+    Fixed so base64 encoded images doesn't slow down the editor on modern browsers while editing.
+    Fixed so all UI elements uses touch events to improve mobile device support.
+    Removed the touch click quirks patch for iOS since it did more harm than good.
+    Removed the non proportional resize handles since. Unproportional resize can still be done by holding the shift key.
+Version 4.1.10 (2015-05-05)
+    Fixed bug where plugins loaded with compat3x would sometimes throw errors when loading using the jQuery version.
+    Fixed bug where extra empty paragraphs would get deleted in WebKit/Blink due to recent Quriks fix.
+    Fixed bug where the editor wouldn't work properly on IE 12 due to some required browser sniffing.
+    Fixed bug where formatting shortcut keys where interfering with Mac OS X screenshot keys.
+    Fixed bug where the caret wouldn't move to the next/previous line boundary on Cmd+Left/Right on Gecko.
+    Fixed bug where it wasn't possible to remove formats from very specific nested contents.
+    Fixed bug where undo levels wasn't produced when typing letters using the shift or alt+ctrl modifiers.
+    Fixed bug where the dirty state wasn't properly updated when typing using the shift or alt+ctrl modifiers.
+    Fixed bug where an error would be thrown if an autofocused editor was destroyed quickly after its initialization. Patch provided by thorn0.
+    Fixed issue with dirty state not being properly updated on redo operation.
+    Fixed issue with entity decoder not handling incorrectly written numeric entities.
+    Fixed issue where some PI element values wouldn't be properly encoded.
+Version 4.1.9 (2015-03-10)
+    Fixed bug where indentation wouldn't work properly for non list elements.
+    Fixed bug with image plugin not pulling the image dimensions out correctly if a custom document_base_url was used.
+    Fixed bug where ctrl+alt+[1-9] would conflict with the AltGr+[1-9] on Windows. New shortcuts is ctrl+shift+[1-9].
+    Fixed bug with removing formatting on nodes in inline mode would sometimes include nodes outside the editor body.
+    Fixed bug where extra nbsp:s would be inserted when you replaced a word surrounded by spaces using insertContent.
+    Fixed bug with pasting from Google Docs would produce extra strong elements and line feeds.
+Version 4.1.8 (2015-03-05)
+    Added new html5 sizes attribute to img elements used together with srcset.
+    Added new elementpath option that makes it possible to disable the element path but keep the statusbar.
+    Added new option table_style_by_css for the table plugin to set table styling with css rather than table attributes.
+    Added new link_assume_external_targets option to prompt the user to prepend http:// prefix if the supplied link does not contain a protocol prefix.
+    Added new image_prepend_url option to allow a custom base path/url to be added to images.
+    Added new table_appearance_options option to make it possible to disable some options.
+    Added new image_title option to make it possible to alter the title of the image, disabled by default.
+    Fixed bug where selection starting from out side of the body wouldn't produce a proper selection range on IE 11.
+    Fixed bug where pressing enter twice before a table moves the cursor in the table and causes a javascript error.
+    Fixed bug where advanced image styles were not respected.
+    Fixed bug where the less common Shift+Delete didn't produce a proper cut operation on WebKit browsers.
+    Fixed bug where image/media size constrain logic would produce NaN when handling non number values.
+    Fixed bug where internal classes where removed by the removeformat command.
+    Fixed bug with creating links table cell contents with a specific selection would throw a exceptions on WebKit/Blink.
+    Fixed bug where valid_classes option didn't work as expected according to docs. Patch provided by thorn0.
+    Fixed bug where jQuery plugin would patch the internal methods multiple times. Patch provided by Drew Martin.
+    Fixed bug where backspace key wouldn't delete the current selection of newly formatted content.
+    Fixed bug where type over of inline formatting elements wouldn't properly keep the format on WebKit/Blink.
+    Fixed bug where selection needed to be properly normalized on modern IE versions.
+    Fixed bug where Command+Backspace didn't properly delete the whole line of text but the previous word.
+    Fixed bug where UI active states wheren't properly updated on IE if you placed caret within the current range.
+    Fixed bug where delete/backspace on WebKit/Blink would remove span elements created by the user.
+    Fixed bug where delete/backspace would produce incorrect results when deleting between two text blocks with br elements.
+    Fixed bug where captions where removed when pasting from MS Office.
+    Fixed bug where lists plugin wouldn't properly remove fully selected nested lists.
+    Fixed bug where the ttf font used for icons would throw an warning message on Gecko on Mac OS X.
+    Fixed a bug where applying a color to text did not update the undo/redo history.
+    Fixed so shy entities gets displayed when using the visualchars plugin.
+    Fixed so removeformat removes ins/del by default since these might be used for strikethough.
+    Fixed so multiple language packs can be loaded and added to the global I18n data structure.
+    Fixed so transparent color selection gets treated as a normal color selection. Patch contributed by Alexander Hofbauer.
+    Fixed so it's possible to disable autoresize_overflow_padding, autoresize_bottom_margin options by setting them to false.
+    Fixed so the charmap plugin shows the description of the character in the dialog. Patch contributed by Jelle Hissink.
+    Removed address from the default list of block formats since it tends to be missused.
+    Fixed so the pre block format is called preformatted to make it more verbose.
+    Fixed so it's possible to context scope translation strings this isn't needed most of the time.
+    Fixed so the max length of the width/height input fields of the media dialog is 5 instead of 3.
+    Fixed so drag/dropped contents gets properly processed by paste plugin since it's basically a paste. Patch contributed by Greg Fairbanks.
+    Fixed so shortcut keys for headers is ctrl+alt+[1-9] instead of ctrl+[1-9] since these are for switching tabs in the browsers.
+    Fixed so "u" doesn't get converted into a span element by the legacy input filter. Since this is now a valid HTML5 element.
+    Fixed font families in order to provide appropriate web-safe fonts.
+Version 4.1.7 (2014-11-27)
+    Added HTML5 schema support for srcset, source and picture. Patch contributed by mattheu.
+    Added new cache_suffix setting to enable cache busting by producing unique urls.
+    Added new paste_convert_word_fake_lists option to enable users to disable the fake lists convert logic.
+    Fixed so advlist style changes adds undo levels for each change.
+    Fixed bug where WebKit would sometimes produce an exception when the autolink plugin where looking for URLs.
+    Fixed bug where IE 7 wouldn't be rendered properly due to aggressive css compression.
+    Fixed bug where DomQuery wouldn't accept window as constructor element.
+    Fixed bug where the color picker in 3.x dialogs wouldn't work properly. Patch contributed by Callidior.
+    Fixed bug where the image plugin wouldn't respect the document_base_url.
+    Fixed bug where the jQuery plugin would fail to append to elements named array prototype names.
+Version 4.1.6 (2014-10-08)
+    Fixed bug with clicking on the scrollbar of the iframe would cause a JS error to be thrown.
+    Fixed bug where null would produce an exception if you passed it to selection.setRng.
+    Fixed bug where Ctrl/Cmd+Tab would indent the current list item if you switched tabs in the browser.
+    Fixed bug where pasting empty cells from Excel would result in a broken table.
+    Fixed bug where it wasn't possible to switch back to default list style type.
+    Fixed issue where the select all quirk fix would fire for other modifiers than Ctrl/Cmd combinations.
+    Replaced jake with grunt since it is more mainstream and has better plugin support.
+Version 4.1.5 (2014-09-09)
+    Fixed bug where sometimes the resize rectangles wouldn't properly render on images on WebKit/Blink.
+    Fixed bug in list plugin where delete/backspace would merge empty LI elements in lists incorrectly.
+    Fixed bug where empty list elements would result in empty LI elements without it's parent container.
+    Fixed bug where backspace in empty caret formatted element could produce an type error exception of Gecko.
+    Fixed bug where lists pasted from word with a custom start index above 9 wouldn't be properly handled.
+    Fixed bug where tabfocus plugin would tab out of the editor instance even if the default action was prevented.
+    Fixed bug where tabfocus wouldn't tab properly to other adjacent editor instances.
+    Fixed bug where the DOMUtils setStyles wouldn't properly removed or update the data-mce-style attribute.
+    Fixed bug where dialog select boxes would be placed incorrectly if document.body wasn't statically positioned.
+    Fixed bug where pasting would sometimes scroll to the top of page if the user was using the autoresize plugin.
+    Fixed bug where caret wouldn't be properly rendered by Chrome when clicking on the iframes documentElement.
+    Fixed so custom images for menubutton/splitbutton can be provided. Patch contributed by Naim Hammadi.
+    Fixed so the default action of windows closing can be prevented by blocking the default action of the close event.
+    Fixed so nodeChange and focus of the editor isn't automatically performed when opening sub dialogs.
+Version 4.1.4 (2014-08-21)
+    Added new media_filter_html option to media plugin that blocks any conditional comments, scripts etc within a video element.
+    Added new content_security_policy option allows you to set custom policy for iframe contents. Patch contributed by Francois Chagnon.
+    Fixed bug where activate/deactivate events wasn't firing properly when switching between editors.
+    Fixed bug where placing the caret on iOS was difficult due to a WebKit bug with touch events.
+    Fixed bug where the resize helper wouldn't render properly on older IE versions.
+    Fixed bug where resizing images inside tables on older IE versions would sometimes fail depending mouse position.
+    Fixed bug where editor.insertContent would produce an exception when inserting select/option elements.
+    Fixed bug where extra empty paragraphs would be produced if block elements where inserted inside span elements.
+    Fixed bug where the spellchecker menu item wouldn't be properly checked if spell checking was started before it was rendered.
+    Fixed bug where the DomQuery filter function wouldn't remove non elements from collection.
+    Fixed bug where document with custom document.domain wouldn't properly render the editor.
+    Fixed bug where IE 8 would throw exception when trying to enter invalid color values into colorboxes.
+    Fixed bug where undo manager could incorrectly add an extra undo level when custom resize handles was removed.
+    Fixed bug where it wouldn't be possible to alter cell properties properly on table cells on IE 8.
+    Fixed so the color picker button in table dialog isn't shown unless you include the colorpicker plugin or add your own custom color picker.
+    Fixed so activate/deactivate events fire when windowManager opens a window since.
+    Fixed so the table advtab options isn't separated by an underscore to normalize naming with image_advtab option.
+    Fixed so the table cell dialog has proper padding when the advanced tab in disabled.
+Version 4.1.3 (2014-07-29)
+    Added event binding logic to tinymce.util.XHR making it possible to override headers and settings before any request is made.
+    Fixed bug where drag events wasn't fireing properly on older IE versions since the event handlers where bound to document.
+    Fixed bug where drag/dropping contents within the editor on IE would force the contents into plain text mode even if it was internal content.
+    Fixed bug where IE 7 wouldn't open menus properly due to a resize bug in the browser auto closing them immediately.
+    Fixed bug where the DOMUtils getPos logic wouldn't produce a valid coordinate inside the body if the body was positioned non static.
+    Fixed bug where the element path and format state wasn't properly updated if you had the wordcount plugin enabled.
+    Fixed bug where a comment at the beginning of source would produce an exception in the formatter logic.
+    Fixed bug where setAttrib/getAttrib on null would throw exception together with any hooked attributes like style.
+    Fixed bug where table sizes wasn't properly retained when copy/pasting on WebKit/Blink.
+    Fixed bug where WebKit/Blink would produce colors in RGB format instead of the forced HEX format when deleting contents.
+    Fixed bug where the width attribute wasn't updated on tables if you changed the size inside the table dialog.
+    Fixed bug where control selection wasn't properly handled when the caret was placed directly after an image.
+    Fixed bug where selecting the contents of table cells using the selection.select method wouldn't place the caret properly.
+    Fixed bug where the selection state for images wasn't removed when placing the caret right after an image on WebKit/Blink.
+    Fixed bug where all events wasn't properly unbound when and editor instance was removed or destroyed by some external innerHTML call.
+    Fixed bug where it wasn't possible or very hard to select images on iOS when the onscreen keyboard was visible.
+    Fixed so auto_focus can take a boolean argument this will auto focus the last initialized editor might be useful for single inits.
+    Fixed so word auto detect lists logic works better for faked lists that doesn't have specific markup.
+    Fixed so nodeChange gets fired on mouseup as it used to before 4.1.1 we optimized that event to fire less often.
+    Removed the finish menu item from spellchecker menu since it's redundant you can stop spellchecking by toggling menu item or button.
+Version 4.1.2 (2014-07-15)
+    Added offset/grep to DomQuery class works basically the same as it's jQuery equivalent.
+    Fixed bug where backspace/delete or setContent with an empty string would remove header data when using the fullpage plugin.
+    Fixed bug where tinymce.remove with a selector not matching any editors would remove all editors.
+    Fixed bug where resizing of the editor didn't work since the theme was calling setStyles instead of setStyle.
+    Fixed bug where IE 7 would fail to append html fragments to iframe document when using DomQuery.
+    Fixed bug where the getStyle DOMUtils method would produce an exception if it was called with null as it's element.
+    Fixed bug where the paste plugin would remove the element if the none of the paste_webkit_styles rules matched the current style.
+    Fixed bug where contextmenu table items wouldn't work properly on IE since it would some times fire an incorrect selection change.
+    Fixed bug where the padding/border values wasn't used in the size calculation for the body size when using autoresize. Patch contributed by Matt Whelan.
+    Fixed bug where conditional word comments wouldn't be properly removed when pasting plain text.
+    Fixed bug where resizing would sometime fail on IE 11 when the mouseup occurred inside the resizable element.
+    Fixed so the iframe gets initialized without any inline event handlers for better CSP support. Patch contributed by Matt Whelan.
+    Fixed so the tinymce.dom.Sizzle is the latest version of sizzle this resolves the document context bug.
+Version 4.1.1 (2014-07-08)
+    Fixed bug where pasting plain text on some WebKit versions would result in an empty line.
+    Fixed bug where resizing images inside tables on IE 11 wouldn't work properly.
+    Fixed bug where IE 11 would sometimes throw "Invalid argument" exception when editor contents was set to an empty string.
+    Fixed bug where document.activeElement would throw exceptions on IE 9 when that element was hidden or removed from dom.
+    Fixed bug where WebKit/Blink sometimes produced br elements with the Apple-interchange-newline class.
+    Fixed bug where table cell selection wasn't properly removed when copy/pasting table cells.
+    Fixed bug where pasting nested list items from Word wouldn't produce proper semantic nested lists.
+    Fixed bug where right clicking using the contextmenu plugin on WebKit/Blink on Mac OS X would select the target current word or line.
+    Fixed bug where it wasn't possible to alter table cell properties on IE 8 using the context menu.
+    Fixed bug where the resize helper wouldn't be correctly positioned on older IE versions.
+    Fixed bug where fullpage plugin would produce an error if you didn't specify a doctype encoding.
+    Fixed bug where anchor plugin would get the name/id of the current element even if it wasn't anchor element.
+    Fixed bug where visual aids for tables wouldn't be properly disabled when changing the border size.
+    Fixed bug where some control selection events wasn't properly fired on older IE versions.
+    Fixed bug where table cell selection on older IE versions would prevent resizing of images.
+    Fixed bug with paste_data_images paste option not working properly on modern IE versions.
+    Fixed bug where custom elements with underscores in the name wasn't properly parsed/serialized.
+    Fixed bug where applying inline formats to nested list elements would produce an incorrect formatting result.
+    Fixed so it's possible to hide items from elements path by using preventDefault/stopPropagation.
+    Fixed so inline mode toolbar gets rendered right aligned if the editable element positioned to the documents right edge.
+    Fixed so empty inline elements inside empty block elements doesn't get removed if configured to be kept intact.
+    Fixed so DomQuery parentsUntil/prevUntil/nextUntil supports selectors/elements/filters etc.
+    Fixed so legacyoutput plugin overrides fontselect and fontsizeselect controls and handles font elements properly.
+Version 4.1.0 (2014-06-18)
+    Added new file_picker_callback option to replace the old file_browser_callback the latter will still work though.
+    Added new custom colors to textcolor plugin will be displayed if a color picker is provided also shows the latest colors.
+    Added new color_picker_callback option to enable you to add custom color pickers to the editor.
+    Added new advanced tabs to table/cell/row dialogs to enable you to select colors for border/background.
+    Added new colorpicker plugin that lets you select colors from a hsv color picker.
+    Added new tinymce.util.Color class to handle color parsing and converting.
+    Added new colorpicker UI widget element lets you add a hsv color picker to any form/window.
+    Added new textpattern plugin that allows you to use markdown like text patterns to format contents.
+    Added new resize helper element that shows the current width & height while resizing.
+    Added new "once" method to Editor and EventDispatcher enables since callback execution events.
+    Added new jQuery like class under tinymce.dom.DomQuery it's exposed on editor instances (editor.$) and globally under (tinymce.$).
+    Fixed so the default resize method for images are proportional shift/ctrl can be used to make an unproportional size.
+    Fixed bug where the image_dimensions option of the image plugin would cause exceptions when it tried to update the size.
+    Fixed bug where table cell dialog class field wasn't properly updated when editing an a table cell with an existing class.
+    Fixed bug where Safari on Mac would produce webkit-fake-url for pasted images so these are now removed.
+    Fixed bug where the nodeChange event would get fired before the selection was changed when clicking inside the current selection range.
+    Fixed bug where valid_classes option would cause exception when it removed internal prefixed classes like mce-item-.
+    Fixed bug where backspace would cause navigation in IE 8 on an inline element and after a caret formatting was applied.
+    Fixed so placeholder images produced by the media plugin gets selected when inserted/edited.
+    Fixed so it's possible to drag in images when the paste_data_images option is enabled. Might be useful for mail clients.
+    Fixed so images doesn't get a width/height applied if the image_dimensions option is set to false useful for responsive contents.
+    Fixed so it's possible to pass in an optional arguments object for the nodeChanged function to be passed to all nodechange event listeners.
+    Fixed bug where media plugin embed code didn't update correctly.
diff --git a/website/js/vendor/tinymce/js/tinymce/jquery.tinymce.min.js b/website/js/vendor/tinymce/js/tinymce/jquery.tinymce.min.js
new file mode 100644 (file)
index 0000000..5a6ef56
--- /dev/null
@@ -0,0 +1,91 @@
+/**
+ * Copyright (c) Tiny Technologies, Inc. All rights reserved.
+ * Licensed under the LGPL or a commercial license.
+ * For LGPL see License.txt in the project root for license information.
+ * For commercial licenses see https://www.tiny.cloud/
+ */
+/**
+ * Jquery integration plugin.
+ *
+ * @class tinymce.core.JqueryIntegration
+ * @private
+ */
+!function(){var f,c,u,p,d,s=[];d="undefined"!=typeof global?global:window,p=d.jQuery;function v(){
+// Reference to tinymce needs to be lazily evaluated since tinymce
+// might be loaded through the compressor or other means
+return d.tinymce}p.fn.tinymce=function(o){var e,t,i,l=this,r="";
+// No match then just ignore the call
+if(!l.length)return l;
+// Get editor instance
+if(!o)return v()?v().get(l[0].id):null;l.css("visibility","hidden");function n(){var a=[],c=0;
+// Apply patches to the jQuery object, only once
+u||(m(),u=!0),
+// Create an editor instance for each matched node
+l.each(function(e,t){var n,i=t.id,r=o.oninit;
+// Generate unique id for target element if needed
+i||(t.id=i=v().DOM.uniqueId()),
+// Only init the editor once
+v().get(i)||(
+// Create editor instance and render it
+n=v().createEditor(i,o),a.push(n),n.on("init",function(){var e,t=r;l.css("visibility",""),
+// Run this if the oninit setting is defined
+// this logic will fire the oninit callback ones each
+// matched editor instance is initialized
+r&&++c==a.length&&("string"==typeof t&&(e=-1===t.indexOf(".")?null:v().resolve(t.replace(/\.\w+$/,"")),t=v().resolve(t)),
+// Call the oninit function with the object
+t.apply(e||v(),a))}))}),
+// Render the editor instances in a separate loop since we
+// need to have the full editors array used in the onInit calls
+p.each(a,function(e,t){t.render()})}
+// Load TinyMCE on demand, if we need to
+if(d.tinymce||c||!(e=o.script_url))
+// Delay the init call until tinymce is loaded
+1===c?s.push(n):n();else{c=1,t=e.substring(0,e.lastIndexOf("/")),
+// Check if it's a dev/src version they want to load then
+// make sure that all plugins, themes etc are loaded in source mode as well
+-1!=e.indexOf(".min")&&(r=".min"),
+// Setup tinyMCEPreInit object this will later be used by the TinyMCE
+// core script to locate other resources like CSS files, dialogs etc
+// You can also predefined a tinyMCEPreInit object and then it will use that instead
+d.tinymce=d.tinyMCEPreInit||{base:t,suffix:r},
+// url contains gzip then we assume it's a compressor
+-1!=e.indexOf("gzip")&&(i=o.language||"en",e=e+(/\?/.test(e)?"&":"?")+"js=true&core=true&suffix="+escape(r)+"&themes="+escape(o.theme||"modern")+"&plugins="+escape(o.plugins||"")+"&languages="+(i||""),
+// Check if compressor script is already loaded otherwise setup a basic one
+d.tinyMCE_GZ||(d.tinyMCE_GZ={start:function(){function n(e){v().ScriptLoader.markDone(v().baseURI.toAbsolute(e))}
+// Add core languages
+n("langs/"+i+".js"),
+// Add themes with languages
+n("themes/"+o.theme+"/theme"+r+".js"),n("themes/"+o.theme+"/langs/"+i+".js"),
+// Add plugins with languages
+p.each(o.plugins.split(","),function(e,t){t&&(n("plugins/"+t+"/plugin"+r+".js"),n("plugins/"+t+"/langs/"+i+".js"))})},end:function(){}}));var a=document.createElement("script");a.type="text/javascript",a.onload=a.onreadystatechange=function(e){e=e||window.event,2===c||"load"!=e.type&&!/complete|loaded/.test(a.readyState)||(v().dom.Event.domLoaded=1,c=2,
+// Execute callback after mainscript has been loaded and before the initialization occurs
+o.script_loaded&&o.script_loaded(),n(),p.each(s,function(e,t){t()}))},a.src=e,document.body.appendChild(a)}return l},
+// Add :tinymce pseudo selector this will select elements that has been converted into editor instances
+// it's now possible to use things like $('*:tinymce') to get all TinyMCE bound elements.
+p.extend(p.expr[":"],{tinymce:function(e){var t;return!!(e.id&&"tinymce"in d&&(t=v().get(e.id))&&t.editorManager===v())}});
+// This function patches internal jQuery functions so that if
+// you for example remove an div element containing an editor it's
+// automatically destroyed by the TinyMCE API
+var m=function(){function r(e){
+// If the function is remove
+"remove"===e&&this.each(function(e,t){var n=u(t);n&&n.remove()}),this.find("span.mceEditor,div.mceEditor").each(function(e,t){var n=v().get(t.id.replace(/_parent$/,""));n&&n.remove()})}function o(i){var e,t=this;
+// Handle set value
+/*jshint eqnull:true */if(null!=i)r.call(t),
+// Saves the contents before get/set value of textarea/div
+t.each(function(e,t){var n;(n=v().get(t.id))&&n.setContent(i)});else if(0<t.length&&(e=v().get(t[0].id)))return e.getContent()}function l(e){return!!(e&&e.length&&d.tinymce&&e.is(":tinymce"))}
+// Removes any child editor instances by looking for editor wrapper elements
+var u=function(e){var t=null;return e&&e.id&&d.tinymce&&(t=v().get(e.id)),t},s={};
+// Loads or saves contents from/to textarea if the value
+// argument is defined it will set the TinyMCE internal contents
+// Patch some setter/getter functions these will
+// now be able to set/get the contents of editor instances for
+// example $('#editorid').html('Content'); will update the TinyMCE iframe instance
+p.each(["text","html","val"],function(e,t){var a=s[t]=p.fn[t],c="text"===t;p.fn[t]=function(e){var t=this;if(!l(t))return a.apply(t,arguments);if(e!==f)return o.call(t.filter(":tinymce"),e),a.apply(t.not(":tinymce"),arguments),t;// return original set for chaining
+var i="",r=arguments;return(c?t:t.eq(0)).each(function(e,t){var n=u(t);i+=n?c?n.getContent().replace(/<(?:"[^"]*"|'[^']*'|[^'">])*>/g,""):n.getContent({save:!0}):a.apply(p(t),r)}),i}}),
+// Makes it possible to use $('#id').append("content"); to append contents to the TinyMCE editor iframe
+p.each(["append","prepend"],function(e,t){var n=s[t]=p.fn[t],r="prepend"===t;p.fn[t]=function(i){var e=this;return l(e)?i!==f?("string"==typeof i&&e.filter(":tinymce").each(function(e,t){var n=u(t);n&&n.setContent(r?i+n.getContent():n.getContent()+i)}),n.apply(e.not(":tinymce"),arguments),e):void 0:n.apply(e,arguments)}}),
+// Makes sure that the editor instance gets properly destroyed when the parent element is removed
+p.each(["remove","replaceWith","replaceAll","empty"],function(e,t){var n=s[t]=p.fn[t];p.fn[t]=function(){return r.call(this,t),n.apply(this,arguments)}}),s.attr=p.fn.attr,
+// Makes sure that $('#tinymce_id').attr('value') gets the editors current HTML contents
+p.fn.attr=function(e,t){var n=this,i=arguments;if(!e||"value"!==e||!l(n))return s.attr.apply(n,i);if(t!==f)return o.call(n.filter(":tinymce"),t),s.attr.apply(n.not(":tinymce"),i),n;// return original set for chaining
+var r=n[0],a=u(r);return a?a.getContent({save:!0}):s.attr.apply(p(r),i)}}}();
\ No newline at end of file
diff --git a/website/js/vendor/tinymce/js/tinymce/langs/de.js b/website/js/vendor/tinymce/js/tinymce/langs/de.js
new file mode 100644 (file)
index 0000000..f7a5b00
--- /dev/null
@@ -0,0 +1,389 @@
+tinymce.addI18n('de',{
+"Redo": "Wiederholen",
+"Undo": "R\u00fcckg\u00e4ngig machen",
+"Cut": "Ausschneiden",
+"Copy": "Kopieren",
+"Paste": "Einf\u00fcgen",
+"Select all": "Alles ausw\u00e4hlen",
+"New document": "Neues Dokument",
+"Ok": "Ok",
+"Cancel": "Abbrechen",
+"Visual aids": "Visuelle Hilfen",
+"Bold": "Fett",
+"Italic": "Kursiv",
+"Underline": "Unterstrichen",
+"Strikethrough": "Durchgestrichen",
+"Superscript": "Hochgestellt",
+"Subscript": "Tiefgestellt",
+"Clear formatting": "Formatierung entfernen",
+"Align left": "Linksb\u00fcndig ausrichten",
+"Align center": "Zentrieren",
+"Align right": "Rechtsb\u00fcndig ausrichten",
+"Justify": "Blocksatz",
+"Bullet list": "Aufz\u00e4hlung",
+"Numbered list": "Nummerierte Liste",
+"Decrease indent": "Einzug verkleinern",
+"Increase indent": "Einzug vergr\u00f6\u00dfern",
+"Close": "Schlie\u00dfen",
+"Formats": "Formate",
+"Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\/C\/V keyboard shortcuts instead.": "Ihr Browser unterst\u00fctzt leider keinen direkten Zugriff auf die Zwischenablage. Bitte benutzen Sie die Tastenkombinationen Strg+X\/C\/V.",
+"Headers": "\u00dcberschriften",
+"Header 1": "\u00dcberschrift 1",
+"Header 2": "\u00dcberschrift 2",
+"Header 3": "\u00dcberschrift 3",
+"Header 4": "\u00dcberschrift 4",
+"Header 5": "\u00dcberschrift 5",
+"Header 6": "\u00dcberschrift 6",
+"Headings": "\u00dcberschriften",
+"Heading 1": "Kopfzeile 1",
+"Heading 2": "Kopfzeile 2",
+"Heading 3": "Kopfzeile 3",
+"Heading 4": "Kopfzeile 4",
+"Heading 5": "Kopfzeile 5",
+"Heading 6": "Kopfzeile 6",
+"Preformatted": "Vorformatiert",
+"Div": "Div",
+"Pre": "Pre",
+"Code": "Code",
+"Paragraph": "Absatz",
+"Blockquote": "Blockquote",
+"Inline": "Zeichenformate",
+"Blocks": "Bl\u00f6cke",
+"Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.": "Einf\u00fcgen ist nun im einfachen Textmodus. Inhalte werden ab jetzt als unformatierter Text eingef\u00fcgt, bis Sie diese Einstellung wieder ausschalten!",
+"Fonts": "Schriftarten",
+"Font Sizes": "Schriftgr\u00f6\u00dfe",
+"Class": "Klasse",
+"Browse for an image": "Bild...",
+"OR": "ODER",
+"Drop an image here": "Bild hier ablegen",
+"Upload": "Hochladen",
+"Block": "Blocksatz",
+"Align": "Ausrichten",
+"Default": "Standard",
+"Circle": "Kreis",
+"Disc": "Punkt",
+"Square": "Quadrat",
+"Lower Alpha": "Kleinbuchstaben",
+"Lower Greek": "Griechische Kleinbuchstaben",
+"Lower Roman": "R\u00f6mische Zahlen (Kleinbuchstaben)",
+"Upper Alpha": "Gro\u00dfbuchstaben",
+"Upper Roman": "R\u00f6mische Zahlen (Gro\u00dfbuchstaben)",
+"Anchor...": "Textmarke",
+"Name": "Name",
+"Id": "Kennung",
+"Id should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.": "Die Kennung sollte mit einem Buchstaben anfangen. Nachfolgend nur Buchstaben, Zahlen, Striche (Minus), Punkte, Kommas und Unterstriche.",
+"You have unsaved changes are you sure you want to navigate away?": "Die \u00c4nderungen wurden noch nicht gespeichert, sind Sie sicher, dass Sie diese Seite verlassen wollen?",
+"Restore last draft": "Letzten Entwurf wiederherstellen",
+"Special characters...": "Sonderzeichen...",
+"Source code": "Quelltext",
+"Insert\/Edit code sample": "Codebeispiel einf\u00fcgen\/bearbeiten",
+"Language": "Sprache",
+"Code sample...": "Codebeispiel...",
+"Color Picker": "Farbwahl",
+"R": "R",
+"G": "G",
+"B": "B",
+"Left to right": "Von links nach rechts",
+"Right to left": "Von rechts nach links",
+"Emoticons...": "Emoticons...",
+"Metadata and Document Properties": "Dokument-Eigenschaften und -Metadaten",
+"Title": "Titel",
+"Keywords": "Sch\u00fcsselw\u00f6rter",
+"Description": "Beschreibung",
+"Robots": "Robots",
+"Author": "Verfasser",
+"Encoding": "Zeichenkodierung",
+"Fullscreen": "Vollbild",
+"Action": "Aktion",
+"Shortcut": "Shortcut",
+"Help": "Hilfe",
+"Address": "Adresse",
+"Focus to menubar": "Fokus auf Men\u00fcleiste",
+"Focus to toolbar": "Fokus auf Werkzeugleiste",
+"Focus to element path": "Fokus auf Elementpfad",
+"Focus to contextual toolbar": "Fokus auf kontextbezogene Werkzeugleiste",
+"Insert link (if link plugin activated)": "Link einf\u00fcgen (wenn Link-Plugin aktiviert ist)",
+"Save (if save plugin activated)": "Speichern (wenn Save-Plugin aktiviert ist)",
+"Find (if searchreplace plugin activated)": "Suchen einf\u00fcgen (wenn Suchen\/Ersetzen-Plugin aktiviert ist)",
+"Plugins installed ({0}):": "installierte Plugins ({0}):",
+"Premium plugins:": "Premium Plugins:",
+"Learn more...": "Erfahren Sie mehr dazu...",
+"You are using {0}": "Sie verwenden {0}",
+"Plugins": "Plugins",
+"Handy Shortcuts": "Praktische Tastenkombinationen",
+"Horizontal line": "Horizontale Linie",
+"Insert\/edit image": "Bild einf\u00fcgen\/bearbeiten",
+"Image description": "Bildbeschreibung",
+"Source": "Quelle",
+"Dimensions": "Abmessungen",
+"Constrain proportions": "Seitenverh\u00e4ltnis beibehalten",
+"General": "Allgemein",
+"Advanced": "Erweitert",
+"Style": "Stil",
+"Vertical space": "Vertikaler Abstand",
+"Horizontal space": "Horizontaler Abstand",
+"Border": "Rahmen",
+"Insert image": "Bild einf\u00fcgen",
+"Image...": "Bild...",
+"Image list": "Bildliste",
+"Rotate counterclockwise": "Gegen den Uhrzeigersinn drehen",
+"Rotate clockwise": "Im Uhrzeigersinn drehen",
+"Flip vertically": "Vertikal spiegeln",
+"Flip horizontally": "Horizontal spiegeln",
+"Edit image": "Bild bearbeiten",
+"Image options": "Bildeigenschaften",
+"Zoom in": "Ansicht vergr\u00f6\u00dfern",
+"Zoom out": "Ansicht verkleinern",
+"Crop": "Bescheiden",
+"Resize": "Skalieren",
+"Orientation": "Ausrichtung",
+"Brightness": "Helligkeit",
+"Sharpen": "Sch\u00e4rfen",
+"Contrast": "Kontrast",
+"Color levels": "Farbwerte",
+"Gamma": "Gamma",
+"Invert": "Invertieren",
+"Apply": "Anwenden",
+"Back": "Zur\u00fcck",
+"Insert date\/time": "Datum\/Uhrzeit einf\u00fcgen ",
+"Date\/time": "Datum\/Uhrzeit",
+"Insert\/Edit Link": "Link einf\u00fcgen\/bearbeiten",
+"Insert\/edit link": "Link einf\u00fcgen\/bearbeiten",
+"Text to display": "Anzuzeigender Text",
+"Url": "URL",
+"Open link in...": "Link \u00f6ffnen in...",
+"Current window": "Aktuelles Fenster",
+"None": "Keine",
+"New window": "Neues Fenster",
+"Remove link": "Link entfernen",
+"Anchors": "Textmarken",
+"Link...": "Link...",
+"Paste or type a link": "Link einf\u00fcgen oder eintippen",
+"The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?": "Diese Adresse scheint eine E-Mail-Adresse zu sein. M\u00f6chten Sie das dazu ben\u00f6tigte \"mailto:\" voranstellen?",
+"The URL you entered seems to be an external link. Do you want to add the required http:\/\/ prefix?": "Diese Adresse scheint ein externer Link zu sein. M\u00f6chten Sie das dazu ben\u00f6tigte \"http:\/\/\" voranstellen?",
+"Link list": "Linkliste",
+"Insert video": "Video einf\u00fcgen",
+"Insert\/edit video": "Video einf\u00fcgen\/bearbeiten",
+"Insert\/edit media": "Medien einf\u00fcgen\/bearbeiten",
+"Alternative source": "Alternative Quelle",
+"Alternative source URL": "URL der alternativen Quelle",
+"Media poster (Image URL)": "Medienposter (Bild-URL)",
+"Paste your embed code below:": "F\u00fcgen Sie Ihren Einbettungscode hier ein:",
+"Embed": "Einbetten",
+"Media...": "Medien...",
+"Nonbreaking space": "Gesch\u00fctztes Leerzeichen",
+"Page break": "Seitenumbruch",
+"Paste as text": "Als Text einf\u00fcgen",
+"Preview": "Vorschau",
+"Print...": "Drucken...",
+"Save": "Speichern",
+"Find": "Suchen",
+"Replace with": "Ersetzen durch",
+"Replace": "Ersetzen",
+"Replace all": "Alles ersetzen",
+"Previous": "Vorherige",
+"Next": "Weiter",
+"Find and replace...": "Suchen und ersetzen...",
+"Could not find the specified string.": "Die Zeichenfolge wurde nicht gefunden.",
+"Match case": "Gro\u00df-\/Kleinschreibung beachten",
+"Find whole words only": "Nur ganze W\u00f6rter suchen",
+"Spell check": "Rechschreibpr\u00fcfung",
+"Ignore": "Ignorieren",
+"Ignore all": "Alles Ignorieren",
+"Finish": "Ende",
+"Add to Dictionary": "Zum W\u00f6rterbuch hinzuf\u00fcgen",
+"Insert table": "Tabelle einf\u00fcgen",
+"Table properties": "Tabelleneigenschaften",
+"Delete table": "Tabelle l\u00f6schen",
+"Cell": "Zelle",
+"Row": "Zeile",
+"Column": "Spalte",
+"Cell properties": "Zelleneigenschaften",
+"Merge cells": "Zellen verbinden",
+"Split cell": "Zelle aufteilen",
+"Insert row before": "Neue Zeile davor einf\u00fcgen ",
+"Insert row after": "Neue Zeile danach einf\u00fcgen",
+"Delete row": "Zeile l\u00f6schen",
+"Row properties": "Zeileneigenschaften",
+"Cut row": "Zeile ausschneiden",
+"Copy row": "Zeile kopieren",
+"Paste row before": "Zeile davor einf\u00fcgen",
+"Paste row after": "Zeile danach einf\u00fcgen",
+"Insert column before": "Neue Spalte davor einf\u00fcgen",
+"Insert column after": "Neue Spalte danach einf\u00fcgen",
+"Delete column": "Spalte l\u00f6schen",
+"Cols": "Spalten",
+"Rows": "Zeilen",
+"Width": "Breite",
+"Height": "H\u00f6he",
+"Cell spacing": "Zellenabstand",
+"Cell padding": "Zelleninnenabstand",
+"Show caption": "Beschriftung anzeigen",
+"Left": "Linksb\u00fcndig",
+"Center": "Zentriert",
+"Right": "Rechtsb\u00fcndig",
+"Cell type": "Zellentyp",
+"Scope": "G\u00fcltigkeitsbereich",
+"Alignment": "Ausrichtung",
+"H Align": "Horizontale Ausrichtung",
+"V Align": "Vertikale Ausrichtung",
+"Top": "Oben",
+"Middle": "Mitte",
+"Bottom": "Unten",
+"Header cell": "Kopfzelle",
+"Row group": "Zeilengruppe",
+"Column group": "Spaltengruppe",
+"Row type": "Zeilentyp",
+"Header": "Kopfzeile",
+"Body": "Inhalt",
+"Footer": "Fu\u00dfzeile",
+"Border color": "Rahmenfarbe",
+"Insert template...": "Vorlage einf\u00fcgen...",
+"Templates": "Vorlagen",
+"Template": "Vorlage",
+"Text color": "Textfarbe",
+"Background color": "Hintergrundfarbe",
+"Custom...": "Benutzerdefiniert...",
+"Custom color": "Benutzerdefinierte Farbe",
+"No color": "Keine Farbe",
+"Remove color": "Farbauswahl aufheben",
+"Table of Contents": "Inhaltsverzeichnis",
+"Show blocks": "Bl\u00f6cke anzeigen",
+"Show invisible characters": "Unsichtbare Zeichen anzeigen",
+"Word count": "Anzahl der W\u00f6rter",
+"Words: {0}": "W\u00f6rter: {0}",
+"{0} words": "{0} W\u00f6rter",
+"File": "Datei",
+"Edit": "Bearbeiten",
+"Insert": "Einf\u00fcgen",
+"View": "Ansicht",
+"Format": "Format",
+"Table": "Tabelle",
+"Tools": "Werkzeuge",
+"Powered by {0}": "Betrieben von {0}",
+"Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help": "Rich-Text- Area. Dr\u00fccken Sie ALT-F9 f\u00fcr das Men\u00fc. Dr\u00fccken Sie ALT-F10 f\u00fcr Symbolleiste. Dr\u00fccken Sie ALT-0 f\u00fcr Hilfe",
+"Image title": "Bildtitel",
+"Border width": "Rahmenbreite",
+"Border style": "Rahmenstil",
+"Error": "Fehler",
+"Warn": "Warnung",
+"Valid": "G\u00fcltig",
+"To open the popup, press Shift+Enter": "Dr\u00fccken Sie Umschalt+Eingabe, um das Popup-Fenster zu \u00f6ffnen.",
+"Rich Text Area. Press ALT-0 for help.": "Rich-Text-Bereich. Dr\u00fccken Sie Alt+0 f\u00fcr Hilfe.",
+"System Font": "Betriebssystemschriftart",
+"Failed to upload image: {0}": "Bild konnte nicht hochgeladen werden: {0}",
+"Failed to load plugin: {0} from url {1}": "Plugin konnte nicht geladen werden: {0} von URL {1}",
+"Failed to load plugin url: {0}": "Plugin-URL konnte nicht geladen werden: {0}",
+"Failed to initialize plugin: {0}": "Plugin konnte nicht initialisiert werden: {0}",
+"example": "Beispiel",
+"Search": "Suchen",
+"All": "Alles",
+"Currency": "W\u00e4hrung",
+"Text": "Text",
+"Quotations": "Anf\u00fchrungszeichen",
+"Mathematical": "Mathematisch",
+"Extended Latin": "Erweitertes Latein",
+"Symbols": "Symbole",
+"Arrows": "Pfeile",
+"User Defined": "Benutzerdefiniert",
+"dollar sign": "Dollarzeichen",
+"currency sign": "W\u00e4hrungssymbol",
+"euro-currency sign": "Eurozeichen",
+"colon sign": "Doppelpunkt",
+"cruzeiro sign": "Cruzeirozeichen",
+"french franc sign": "Franczeichen",
+"lira sign": "Lirezeichen",
+"mill sign": "Millzeichen",
+"naira sign": "Nairazeichen",
+"peseta sign": "Pesetazeichen",
+"rupee sign": "Rupiezeichen",
+"won sign": "Wonzeichen",
+"new sheqel sign": "Schekelzeichen",
+"dong sign": "Dongzeichen",
+"kip sign": "Kipzeichen",
+"tugrik sign": "Tugrikzeichen",
+"drachma sign": "Drachmezeichen",
+"german penny symbol": "Pfennigzeichen",
+"peso sign": "Pesozeichen",
+"guarani sign": "Guaranizeichen",
+"austral sign": "Australzeichen",
+"hryvnia sign": "Hrywnjazeichen",
+"cedi sign": "Cedizeichen",
+"livre tournois sign": "Livrezeichen",
+"spesmilo sign": "Spesmilozeichen",
+"tenge sign": "Tengezeichen",
+"indian rupee sign": "Indisches Rupiezeichen",
+"turkish lira sign": "T\u00fcrkisches Lirazeichen",
+"nordic mark sign": "Zeichen nordische Mark",
+"manat sign": "Manatzeichen",
+"ruble sign": "Rubelzeichen",
+"yen character": "Yenzeichen",
+"yuan character": "Yuanzeichen",
+"yuan character, in hong kong and taiwan": "Yuanzeichen in Hongkong und Taiwan",
+"yen\/yuan character variant one": "Yen-\/Yuanzeichen Variante 1",
+"Loading emoticons...": "Emoticons werden geladen...",
+"Could not load emoticons": "Emoticons konnten nicht geladen werden",
+"People": "Menschen",
+"Animals and Nature": "Tiere und Natur",
+"Food and Drink": "Essen und Trinken",
+"Activity": "Aktivit\u00e4t",
+"Travel and Places": "Reisen und Orte",
+"Objects": "Objekte",
+"Flags": "Flaggen",
+"Characters": "Zeichen",
+"Characters (no spaces)": "Zeichen (ohne Leerzeichen)",
+"Error: Form submit field collision.": "Fehler: Kollision der Formularbest\u00e4tigungsfelder.",
+"Error: No form element found.": "Fehler: Kein Formularelement gefunden.",
+"Update": "Aktualisieren",
+"Color swatch": "Farbpalette",
+"Turquoise": "T\u00fcrkis",
+"Green": "Gr\u00fcn",
+"Blue": "Blau",
+"Purple": "Violett",
+"Navy Blue": "Marineblau",
+"Dark Turquoise": "Dunkelt\u00fcrkis",
+"Dark Green": "Dunkelgr\u00fcn",
+"Medium Blue": "Mittleres Blau",
+"Medium Purple": "Mittelviolett",
+"Midnight Blue": "Mitternachtsblau",
+"Yellow": "Gelb",
+"Orange": "Orange",
+"Red": "Rot",
+"Light Gray": "Hellgrau",
+"Gray": "Grau",
+"Dark Yellow": "Dunkelgelb",
+"Dark Orange": "Dunkelorange",
+"Dark Red": "Dunkelrot",
+"Medium Gray": "Mittelgrau",
+"Dark Gray": "Dunkelgrau",
+"Black": "Schwarz",
+"White": "Wei\u00df",
+"Switch to or from fullscreen mode": "Vollbildmodus umschalten",
+"Open help dialog": "Hilfe-Dialog \u00f6ffnen",
+"history": "Historie",
+"styles": "Stile",
+"formatting": "Formatierung",
+"alignment": "Ausrichtung",
+"indentation": "Einr\u00fcckungen",
+"permanent pen": "Textmarker",
+"comments": "Anmerkungen",
+"Anchor": "Textmarke",
+"Special character": "Sonderzeichen",
+"Code sample": "Codebeispiel",
+"Color": "Farbe",
+"Emoticons": "Emoticons",
+"Document properties": "Dokumenteigenschaften",
+"Image": "Bild",
+"Insert link": "Link einf\u00fcgen",
+"Target": "Ziel",
+"Link": "Link",
+"Poster": "Poster",
+"Media": "Medium",
+"Print": "Drucken",
+"Prev": "Zur\u00fcck",
+"Find and replace": "Suchen und ersetzen",
+"Whole words": "Nur ganze W\u00f6rter",
+"Spellcheck": "Rechtschreibpr\u00fcfung",
+"Caption": "Beschriftung",
+"Insert template": "Vorlage einf\u00fcgen "
+});
\ No newline at end of file
diff --git a/website/js/vendor/tinymce/js/tinymce/langs/fr_FR.js b/website/js/vendor/tinymce/js/tinymce/langs/fr_FR.js
new file mode 100644 (file)
index 0000000..2d074f8
--- /dev/null
@@ -0,0 +1,389 @@
+tinymce.addI18n('fr_FR',{
+"Redo": "R\u00e9tablir",
+"Undo": "Annuler",
+"Cut": "Couper",
+"Copy": "Copier",
+"Paste": "Coller",
+"Select all": "S\u00e9lectionner tout",
+"New document": "Nouveau document",
+"Ok": "OK",
+"Cancel": "Annuler",
+"Visual aids": "Aides visuelles",
+"Bold": "Gras",
+"Italic": "Italique",
+"Underline": "Soulign\u00e9",
+"Strikethrough": "Barr\u00e9",
+"Superscript": "Exposant",
+"Subscript": "Indice",
+"Clear formatting": "Effacer la mise en forme",
+"Align left": "Aligner \u00e0 gauche",
+"Align center": "Centrer",
+"Align right": "Aligner \u00e0 droite",
+"Justify": "Justifier",
+"Bullet list": "Liste \u00e0 puces",
+"Numbered list": "Liste num\u00e9rot\u00e9e",
+"Decrease indent": "R\u00e9duire le retrait",
+"Increase indent": "Augmenter le retrait",
+"Close": "Fermer",
+"Formats": "Formats",
+"Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\/C\/V keyboard shortcuts instead.": "Votre navigateur ne supporte pas l\u2019acc\u00e8s direct au presse-papiers. Merci d'utiliser les raccourcis clavier Ctrl+X\/C\/V.",
+"Headers": "En-t\u00eates",
+"Header 1": "En-t\u00eate 1",
+"Header 2": "En-t\u00eate 2",
+"Header 3": "En-t\u00eate 3",
+"Header 4": "En-t\u00eate 4",
+"Header 5": "En-t\u00eate 5",
+"Header 6": "En-t\u00eate 6",
+"Headings": "Titres",
+"Heading 1": "Titre\u00a01",
+"Heading 2": "Titre\u00a02",
+"Heading 3": "Titre\u00a03",
+"Heading 4": "Titre\u00a04",
+"Heading 5": "Titre\u00a05",
+"Heading 6": "Titre\u00a06",
+"Preformatted": "Pr\u00e9format\u00e9",
+"Div": "Div",
+"Pre": "Pre",
+"Code": "Code",
+"Paragraph": "Paragraphe",
+"Blockquote": "Blockquote",
+"Inline": "En ligne",
+"Blocks": "Blocs",
+"Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.": "Le presse-papiers est maintenant en mode \"texte plein\". Les contenus seront coll\u00e9s sans retenir les formatages jusqu'\u00e0 ce que vous d\u00e9sactiviez cette option.",
+"Fonts": "Polices",
+"Font Sizes": "Tailles de police",
+"Class": "Classe",
+"Browse for an image": "Rechercher une image",
+"OR": "OU",
+"Drop an image here": "D\u00e9poser une image ici",
+"Upload": "T\u00e9l\u00e9charger",
+"Block": "Bloc",
+"Align": "Aligner",
+"Default": "Par d\u00e9faut",
+"Circle": "Cercle",
+"Disc": "Disque",
+"Square": "Carr\u00e9",
+"Lower Alpha": "Alpha minuscule",
+"Lower Greek": "Grec minuscule",
+"Lower Roman": "Romain minuscule",
+"Upper Alpha": "Alpha majuscule",
+"Upper Roman": "Romain majuscule",
+"Anchor...": "Ancre...",
+"Name": "Nom",
+"Id": "Id",
+"Id should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.": "L'Id doit commencer par une lettre suivi par des lettres, nombres, tirets, points, deux-points ou underscores",
+"You have unsaved changes are you sure you want to navigate away?": "Vous avez des modifications non enregistr\u00e9es, \u00eates-vous s\u00fbr de quitter la page?",
+"Restore last draft": "Restaurer le dernier brouillon",
+"Special characters...": "Caract\u00e8res sp\u00e9ciaux...",
+"Source code": "Code source",
+"Insert\/Edit code sample": "Ins\u00e9rer \/ modifier une exemple de code",
+"Language": "Langue",
+"Code sample...": "Exemple de code...",
+"Color Picker": "S\u00e9lecteur de couleurs",
+"R": "R",
+"G": "V",
+"B": "B",
+"Left to right": "Gauche \u00e0 droite",
+"Right to left": "Droite \u00e0 gauche",
+"Emoticons...": "\u00c9motic\u00f4nes...",
+"Metadata and Document Properties": "M\u00e9tadonn\u00e9es et propri\u00e9t\u00e9s du document",
+"Title": "Titre",
+"Keywords": "Mots-cl\u00e9s",
+"Description": "Description",
+"Robots": "Robots",
+"Author": "Auteur",
+"Encoding": "Encodage",
+"Fullscreen": "Plein \u00e9cran",
+"Action": "Action",
+"Shortcut": "Raccourci",
+"Help": "Aide",
+"Address": "Adresse",
+"Focus to menubar": "Cibler la barre de menu",
+"Focus to toolbar": "Cibler la barre d'outils",
+"Focus to element path": "Cibler le chemin vers l'\u00e9l\u00e9ment",
+"Focus to contextual toolbar": "Cibler la barre d'outils contextuelle",
+"Insert link (if link plugin activated)": "Ins\u00e9rer un lien (si le module link est activ\u00e9)",
+"Save (if save plugin activated)": "Enregistrer (si le module save est activ\u00e9)",
+"Find (if searchreplace plugin activated)": "Rechercher (si le module searchreplace est activ\u00e9)",
+"Plugins installed ({0}):": "Modules install\u00e9s ({0}) : ",
+"Premium plugins:": "Modules premium :",
+"Learn more...": "En savoir plus...",
+"You are using {0}": "Vous utilisez {0}",
+"Plugins": "Plugins",
+"Handy Shortcuts": "Raccourcis utiles",
+"Horizontal line": "Ligne horizontale",
+"Insert\/edit image": "Ins\u00e9rer\/modifier une image",
+"Image description": "Description de l'image",
+"Source": "Source",
+"Dimensions": "Dimensions",
+"Constrain proportions": "Conserver les proportions",
+"General": "G\u00e9n\u00e9ral",
+"Advanced": "Avanc\u00e9",
+"Style": "Style",
+"Vertical space": "Espacement vertical",
+"Horizontal space": "Espacement horizontal",
+"Border": "Bordure",
+"Insert image": "Ins\u00e9rer une image",
+"Image...": "Image...",
+"Image list": "Liste d'images",
+"Rotate counterclockwise": "Rotation anti-horaire",
+"Rotate clockwise": "Rotation horaire",
+"Flip vertically": "Retournement vertical",
+"Flip horizontally": "Retournement horizontal",
+"Edit image": "Modifier l'image",
+"Image options": "Options de l'image",
+"Zoom in": "Zoomer",
+"Zoom out": "D\u00e9zoomer",
+"Crop": "Rogner",
+"Resize": "Redimensionner",
+"Orientation": "Orientation",
+"Brightness": "Luminosit\u00e9",
+"Sharpen": "Affiner",
+"Contrast": "Contraste",
+"Color levels": "Niveaux de couleur",
+"Gamma": "Gamma",
+"Invert": "Inverser",
+"Apply": "Appliquer",
+"Back": "Retour",
+"Insert date\/time": "Ins\u00e9rer date\/heure",
+"Date\/time": "Date\/heure",
+"Insert\/Edit Link": "Ins\u00e9rer\/Modifier lien",
+"Insert\/edit link": "Ins\u00e9rer\/modifier un lien",
+"Text to display": "Texte \u00e0 afficher",
+"Url": "Url",
+"Open link in...": "Ouvrir le lien dans...",
+"Current window": "Fen\u00eatre active",
+"None": "n\/a",
+"New window": "Nouvelle fen\u00eatre",
+"Remove link": "Enlever le lien",
+"Anchors": "Ancres",
+"Link...": "Lien...",
+"Paste or type a link": "Coller ou taper un lien",
+"The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?": "L'URL que vous avez entr\u00e9e semble \u00eatre une adresse e-mail. Voulez-vous ajouter le pr\u00e9fixe mailto: n\u00e9cessaire?",
+"The URL you entered seems to be an external link. Do you want to add the required http:\/\/ prefix?": "L'URL que vous avez entr\u00e9e semble \u00eatre un lien externe. Voulez-vous ajouter le pr\u00e9fixe http:\/\/ n\u00e9cessaire?",
+"Link list": "Liste de liens",
+"Insert video": "Ins\u00e9rer une vid\u00e9o",
+"Insert\/edit video": "Ins\u00e9rer\/modifier une vid\u00e9o",
+"Insert\/edit media": "Ins\u00e9rer\/modifier un m\u00e9dia",
+"Alternative source": "Source alternative",
+"Alternative source URL": "URL de la source alternative",
+"Media poster (Image URL)": "Affiche de m\u00e9dia (URL de l'image)",
+"Paste your embed code below:": "Collez votre code d'int\u00e9gration ci-dessous :",
+"Embed": "Int\u00e9grer",
+"Media...": "M\u00e9dia...",
+"Nonbreaking space": "Espace ins\u00e9cable",
+"Page break": "Saut de page",
+"Paste as text": "Coller comme texte",
+"Preview": "Pr\u00e9visualiser",
+"Print...": "Imprimer...",
+"Save": "Enregistrer",
+"Find": "Chercher",
+"Replace with": "Remplacer par",
+"Replace": "Remplacer",
+"Replace all": "Tout remplacer",
+"Previous": "Pr\u00e9c\u00e9dente",
+"Next": "Suiv",
+"Find and replace...": "Trouver et remplacer...",
+"Could not find the specified string.": "Impossible de trouver la cha\u00eene sp\u00e9cifi\u00e9e.",
+"Match case": "Respecter la casse",
+"Find whole words only": "Mot entier",
+"Spell check": "V\u00e9rification de l'orthographe",
+"Ignore": "Ignorer",
+"Ignore all": "Tout ignorer",
+"Finish": "Finie",
+"Add to Dictionary": "Ajouter au dictionnaire",
+"Insert table": "Ins\u00e9rer un tableau",
+"Table properties": "Propri\u00e9t\u00e9s du tableau",
+"Delete table": "Supprimer le tableau",
+"Cell": "Cellule",
+"Row": "Ligne",
+"Column": "Colonne",
+"Cell properties": "Propri\u00e9t\u00e9s de la cellule",
+"Merge cells": "Fusionner les cellules",
+"Split cell": "Diviser la cellule",
+"Insert row before": "Ins\u00e9rer une ligne avant",
+"Insert row after": "Ins\u00e9rer une ligne apr\u00e8s",
+"Delete row": "Effacer la ligne",
+"Row properties": "Propri\u00e9t\u00e9s de la ligne",
+"Cut row": "Couper la ligne",
+"Copy row": "Copier la ligne",
+"Paste row before": "Coller la ligne avant",
+"Paste row after": "Coller la ligne apr\u00e8s",
+"Insert column before": "Ins\u00e9rer une colonne avant",
+"Insert column after": "Ins\u00e9rer une colonne apr\u00e8s",
+"Delete column": "Effacer la colonne",
+"Cols": "Colonnes",
+"Rows": "Lignes",
+"Width": "Largeur",
+"Height": "Hauteur",
+"Cell spacing": "Espacement inter-cellulles",
+"Cell padding": "Espacement interne cellule",
+"Show caption": "Afficher le sous-titrage",
+"Left": "Gauche",
+"Center": "Centr\u00e9",
+"Right": "Droite",
+"Cell type": "Type de cellule",
+"Scope": "Etendue",
+"Alignment": "Alignement",
+"H Align": "Alignement H",
+"V Align": "Alignement V",
+"Top": "Haut",
+"Middle": "Milieu",
+"Bottom": "Bas",
+"Header cell": "Cellule d'en-t\u00eate",
+"Row group": "Groupe de lignes",
+"Column group": "Groupe de colonnes",
+"Row type": "Type de ligne",
+"Header": "En-t\u00eate",
+"Body": "Corps",
+"Footer": "Pied",
+"Border color": "Couleur de la bordure",
+"Insert template...": "Ins\u00e9rer un mod\u00e8le...",
+"Templates": "Th\u00e8mes",
+"Template": "Mod\u00e8le",
+"Text color": "Couleur du texte",
+"Background color": "Couleur d'arri\u00e8re-plan",
+"Custom...": "Personnalis\u00e9...",
+"Custom color": "Couleur personnalis\u00e9e",
+"No color": "Aucune couleur",
+"Remove color": "Supprimer la couleur",
+"Table of Contents": "Table des mati\u00e8res",
+"Show blocks": "Afficher les blocs",
+"Show invisible characters": "Afficher les caract\u00e8res invisibles",
+"Word count": "Nombre de mots",
+"Words: {0}": "Mots : {0}",
+"{0} words": "{0} mots",
+"File": "Fichier",
+"Edit": "Editer",
+"Insert": "Ins\u00e9rer",
+"View": "Voir",
+"Format": "Format",
+"Table": "Tableau",
+"Tools": "Outils",
+"Powered by {0}": "Propuls\u00e9 par {0}",
+"Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help": "Zone Texte Riche. Appuyer sur ALT-F9 pour le menu. Appuyer sur ALT-F10 pour la barre d'outils. Appuyer sur ALT-0 pour de l'aide.",
+"Image title": "Titre d'image",
+"Border width": "\u00c9paisseur de la bordure",
+"Border style": "Style de la bordure",
+"Error": "Erreur",
+"Warn": "Avertir",
+"Valid": "Valide",
+"To open the popup, press Shift+Enter": "Pour ouvrir la popup, appuyez sur Maj+Entr\u00e9e",
+"Rich Text Area. Press ALT-0 for help.": "Zone de texte riche. Appuyez sur ALT-0 pour l'aide.",
+"System Font": "Police syst\u00e8me",
+"Failed to upload image: {0}": "\u00c9chec d'envoi de l'image\u00a0: {0}",
+"Failed to load plugin: {0} from url {1}": "\u00c9chec de chargement du plug-in\u00a0: {0} \u00e0 partir de l\u2019URL {1} ",
+"Failed to load plugin url: {0}": "\u00c9chec de chargement de l'URL du plug-in\u00a0: {0}",
+"Failed to initialize plugin: {0}": "\u00c9chec d'initialisation du plug-in\u00a0: {0}",
+"example": "exemple",
+"Search": "Rechercher",
+"All": "Tout",
+"Currency": "Devise",
+"Text": "Texte",
+"Quotations": "Citations",
+"Mathematical": "Op\u00e9rateurs math\u00e9matiques",
+"Extended Latin": "Latin \u00e9tendu",
+"Symbols": "Symboles",
+"Arrows": "Fl\u00e8ches",
+"User Defined": "D\u00e9fini par l'utilisateur",
+"dollar sign": "Symbole dollar",
+"currency sign": "Symbole devise",
+"euro-currency sign": "Symbole euro",
+"colon sign": "Symbole col\u00f3n",
+"cruzeiro sign": "Symbole cruzeiro",
+"french franc sign": "Symbole franc fran\u00e7ais",
+"lira sign": "Symbole lire",
+"mill sign": "Symbole milli\u00e8me",
+"naira sign": "Symbole naira",
+"peseta sign": "Symbole peseta",
+"rupee sign": "Symbole roupie",
+"won sign": "Symbole won",
+"new sheqel sign": "Symbole nouveau ch\u00e9kel",
+"dong sign": "Symbole dong",
+"kip sign": "Symbole kip",
+"tugrik sign": "Symbole tougrik",
+"drachma sign": "Symbole drachme",
+"german penny symbol": "Symbole pfennig",
+"peso sign": "Symbole peso",
+"guarani sign": "Symbole guarani",
+"austral sign": "Symbole austral",
+"hryvnia sign": "Symbole hryvnia",
+"cedi sign": "Symbole cedi",
+"livre tournois sign": "Symbole livre tournois",
+"spesmilo sign": "Symbole spesmilo",
+"tenge sign": "Symbole tenge",
+"indian rupee sign": "Symbole roupie indienne",
+"turkish lira sign": "Symbole lire turque",
+"nordic mark sign": "Symbole du mark nordique",
+"manat sign": "Symbole manat",
+"ruble sign": "Symbole rouble",
+"yen character": "Sinogramme Yen",
+"yuan character": "Sinogramme Yuan",
+"yuan character, in hong kong and taiwan": "Sinogramme Yuan, Hong Kong et Taiwan",
+"yen\/yuan character variant one": "Sinogramme Yen\/Yuan, premi\u00e8re variante",
+"Loading emoticons...": "Chargement des \u00e9motic\u00f4nes en cours...",
+"Could not load emoticons": "\u00c9chec de chargement des \u00e9motic\u00f4nes",
+"People": "Personnes",
+"Animals and Nature": "Animaux & nature",
+"Food and Drink": "Nourriture & boissons",
+"Activity": "Activit\u00e9",
+"Travel and Places": "Voyages & lieux",
+"Objects": "Objets",
+"Flags": "Drapeaux",
+"Characters": "Caract\u00e8res",
+"Characters (no spaces)": "Caract\u00e8res (espaces non compris)",
+"Error: Form submit field collision.": "Erreur : conflit de champs lors de la soumission du formulaire",
+"Error: No form element found.": "Erreur : aucun \u00e9l\u00e9ment de formulaire trouv\u00e9.",
+"Update": "Mettre \u00e0 jour",
+"Color swatch": "\u00c9chantillon de couleurs",
+"Turquoise": "Turquoise",
+"Green": "Vert",
+"Blue": "Bleu",
+"Purple": "Violet",
+"Navy Blue": "Bleu marine",
+"Dark Turquoise": "Turquoise fonc\u00e9",
+"Dark Green": "Vert fonc\u00e9",
+"Medium Blue": "Bleu moyen",
+"Medium Purple": "Violet moyen",
+"Midnight Blue": "Bleu de minuit",
+"Yellow": "Jaune",
+"Orange": "Orange",
+"Red": "Rouge",
+"Light Gray": "Gris clair",
+"Gray": "Gris",
+"Dark Yellow": "Jaune fonc\u00e9",
+"Dark Orange": "Orange fonc\u00e9",
+"Dark Red": "Rouge fonc\u00e9",
+"Medium Gray": "Gris moyen",
+"Dark Gray": "Gris fonc\u00e9",
+"Black": "Noir",
+"White": "Blanc",
+"Switch to or from fullscreen mode": "Passer en ou quitter le mode plein \u00e9cran",
+"Open help dialog": "Ouvrir la bo\u00eete de dialogue d'aide",
+"history": "historique",
+"styles": "styles",
+"formatting": "mise en forme",
+"alignment": "alignement",
+"indentation": "retrait",
+"permanent pen": "feutre ind\u00e9l\u00e9bile",
+"comments": "commentaires",
+"Anchor": "Ancre",
+"Special character": "Caract\u00e8res sp\u00e9ciaux",
+"Code sample": "Extrait de code",
+"Color": "Couleur",
+"Emoticons": "Emotic\u00f4nes",
+"Document properties": "Propri\u00e9t\u00e9 du document",
+"Image": "Image",
+"Insert link": "Ins\u00e9rer un lien",
+"Target": "Cible",
+"Link": "Lien",
+"Poster": "Publier",
+"Media": "M\u00e9dia",
+"Print": "Imprimer",
+"Prev": "Pr\u00e9c ",
+"Find and replace": "Trouver et remplacer",
+"Whole words": "Mots entiers",
+"Spellcheck": "V\u00e9rification orthographique",
+"Caption": "Titre",
+"Insert template": "Ajouter un th\u00e8me"
+});
\ No newline at end of file
diff --git a/website/js/vendor/tinymce/js/tinymce/langs/readme.md b/website/js/vendor/tinymce/js/tinymce/langs/readme.md
new file mode 100644 (file)
index 0000000..a52bf03
--- /dev/null
@@ -0,0 +1,3 @@
+This is where language files should be placed.
+
+Please DO NOT translate these directly use this service: https://www.transifex.com/projects/p/tinymce/
diff --git a/website/js/vendor/tinymce/js/tinymce/license.txt b/website/js/vendor/tinymce/js/tinymce/license.txt
new file mode 100644 (file)
index 0000000..b17fc90
--- /dev/null
@@ -0,0 +1,504 @@
+      GNU LESSER GENERAL PUBLIC LICENSE
+           Version 2.1, February 1999
+
+ Copyright (C) 1991, 1999 Free Software Foundation, Inc.
+ 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+[This is the first released version of the Lesser GPL.  It also counts
+ as the successor of the GNU Library Public License, version 2, hence
+ the version number 2.1.]
+
+          Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+Licenses are intended to guarantee your freedom to share and change
+free software--to make sure the software is free for all its users.
+
+  This license, the Lesser General Public License, applies to some
+specially designated software packages--typically libraries--of the
+Free Software Foundation and other authors who decide to use it.  You
+can use it too, but we suggest you first think carefully about whether
+this license or the ordinary General Public License is the better
+strategy to use in any particular case, based on the explanations below.
+
+  When we speak of free software, we are referring to freedom of use,
+not price.  Our General Public Licenses are designed to make sure that
+you have the freedom to distribute copies of free software (and charge
+for this service if you wish); that you receive source code or can get
+it if you want it; that you can change the software and use pieces of
+it in new free programs; and that you are informed that you can do
+these things.
+
+  To protect your rights, we need to make restrictions that forbid
+distributors to deny you these rights or to ask you to surrender these
+rights.  These restrictions translate to certain responsibilities for
+you if you distribute copies of the library or if you modify it.
+
+  For example, if you distribute copies of the library, whether gratis
+or for a fee, you must give the recipients all the rights that we gave
+you.  You must make sure that they, too, receive or can get the source
+code.  If you link other code with the library, you must provide
+complete object files to the recipients, so that they can relink them
+with the library after making changes to the library and recompiling
+it.  And you must show them these terms so they know their rights.
+
+  We protect your rights with a two-step method: (1) we copyright the
+library, and (2) we offer you this license, which gives you legal
+permission to copy, distribute and/or modify the library.
+
+  To protect each distributor, we want to make it very clear that
+there is no warranty for the free library.  Also, if the library is
+modified by someone else and passed on, the recipients should know
+that what they have is not the original version, so that the original
+author's reputation will not be affected by problems that might be
+introduced by others.
+
+  Finally, software patents pose a constant threat to the existence of
+any free program.  We wish to make sure that a company cannot
+effectively restrict the users of a free program by obtaining a
+restrictive license from a patent holder.  Therefore, we insist that
+any patent license obtained for a version of the library must be
+consistent with the full freedom of use specified in this license.
+
+  Most GNU software, including some libraries, is covered by the
+ordinary GNU General Public License.  This license, the GNU Lesser
+General Public License, applies to certain designated libraries, and
+is quite different from the ordinary General Public License.  We use
+this license for certain libraries in order to permit linking those
+libraries into non-free programs.
+
+  When a program is linked with a library, whether statically or using
+a shared library, the combination of the two is legally speaking a
+combined work, a derivative of the original library.  The ordinary
+General Public License therefore permits such linking only if the
+entire combination fits its criteria of freedom.  The Lesser General
+Public License permits more lax criteria for linking other code with
+the library.
+
+  We call this license the "Lesser" General Public License because it
+does Less to protect the user's freedom than the ordinary General
+Public License.  It also provides other free software developers Less
+of an advantage over competing non-free programs.  These disadvantages
+are the reason we use the ordinary General Public License for many
+libraries.  However, the Lesser license provides advantages in certain
+special circumstances.
+
+  For example, on rare occasions, there may be a special need to
+encourage the widest possible use of a certain library, so that it becomes
+a de-facto standard.  To achieve this, non-free programs must be
+allowed to use the library.  A more frequent case is that a free
+library does the same job as widely used non-free libraries.  In this
+case, there is little to gain by limiting the free library to free
+software only, so we use the Lesser General Public License.
+
+  In other cases, permission to use a particular library in non-free
+programs enables a greater number of people to use a large body of
+free software.  For example, permission to use the GNU C Library in
+non-free programs enables many more people to use the whole GNU
+operating system, as well as its variant, the GNU/Linux operating
+system.
+
+  Although the Lesser General Public License is Less protective of the
+users' freedom, it does ensure that the user of a program that is
+linked with the Library has the freedom and the wherewithal to run
+that program using a modified version of the Library.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.  Pay close attention to the difference between a
+"work based on the library" and a "work that uses the library".  The
+former contains code derived from the library, whereas the latter must
+be combined with the library in order to run.
+
+      GNU LESSER GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License Agreement applies to any software library or other
+program which contains a notice placed by the copyright holder or
+other authorized party saying it may be distributed under the terms of
+this Lesser General Public License (also called "this License").
+Each licensee is addressed as "you".
+
+  A "library" means a collection of software functions and/or data
+prepared so as to be conveniently linked with application programs
+(which use some of those functions and data) to form executables.
+
+  The "Library", below, refers to any such software library or work
+which has been distributed under these terms.  A "work based on the
+Library" means either the Library or any derivative work under
+copyright law: that is to say, a work containing the Library or a
+portion of it, either verbatim or with modifications and/or translated
+straightforwardly into another language.  (Hereinafter, translation is
+included without limitation in the term "modification".)
+
+  "Source code" for a work means the preferred form of the work for
+making modifications to it.  For a library, complete source code means
+all the source code for all modules it contains, plus any associated
+interface definition files, plus the scripts used to control compilation
+and installation of the library.
+
+  Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running a program using the Library is not restricted, and output from
+such a program is covered only if its contents constitute a work based
+on the Library (independent of the use of the Library in a tool for
+writing it).  Whether that is true depends on what the Library does
+and what the program that uses the Library does.
+  
+  1. You may copy and distribute verbatim copies of the Library's
+complete source code as you receive it, in any medium, provided that
+you conspicuously and appropriately publish on each copy an
+appropriate copyright notice and disclaimer of warranty; keep intact
+all the notices that refer to this License and to the absence of any
+warranty; and distribute a copy of this License along with the
+Library.
+
+  You may charge a fee for the physical act of transferring a copy,
+and you may at your option offer warranty protection in exchange for a
+fee.
+
+  2. You may modify your copy or copies of the Library or any portion
+of it, thus forming a work based on the Library, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) The modified work must itself be a software library.
+
+    b) You must cause the files modified to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    c) You must cause the whole of the work to be licensed at no
+    charge to all third parties under the terms of this License.
+
+    d) If a facility in the modified Library refers to a function or a
+    table of data to be supplied by an application program that uses
+    the facility, other than as an argument passed when the facility
+    is invoked, then you must make a good faith effort to ensure that,
+    in the event an application does not supply such function or
+    table, the facility still operates, and performs whatever part of
+    its purpose remains meaningful.
+
+    (For example, a function in a library to compute square roots has
+    a purpose that is entirely well-defined independent of the
+    application.  Therefore, Subsection 2d requires that any
+    application-supplied function or table used by this function must
+    be optional: if the application does not supply it, the square
+    root function must still compute square roots.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Library,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Library, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote
+it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Library.
+
+In addition, mere aggregation of another work not based on the Library
+with the Library (or with a work based on the Library) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may opt to apply the terms of the ordinary GNU General Public
+License instead of this License to a given copy of the Library.  To do
+this, you must alter all the notices that refer to this License, so
+that they refer to the ordinary GNU General Public License, version 2,
+instead of to this License.  (If a newer version than version 2 of the
+ordinary GNU General Public License has appeared, then you can specify
+that version instead if you wish.)  Do not make any other change in
+these notices.
+
+  Once this change is made in a given copy, it is irreversible for
+that copy, so the ordinary GNU General Public License applies to all
+subsequent copies and derivative works made from that copy.
+
+  This option is useful when you wish to copy part of the code of
+the Library into a program that is not a library.
+
+  4. You may copy and distribute the Library (or a portion or
+derivative of it, under Section 2) in object code or executable form
+under the terms of Sections 1 and 2 above provided that you accompany
+it with the complete corresponding machine-readable source code, which
+must be distributed under the terms of Sections 1 and 2 above on a
+medium customarily used for software interchange.
+
+  If distribution of object code is made by offering access to copy
+from a designated place, then offering equivalent access to copy the
+source code from the same place satisfies the requirement to
+distribute the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  5. A program that contains no derivative of any portion of the
+Library, but is designed to work with the Library by being compiled or
+linked with it, is called a "work that uses the Library".  Such a
+work, in isolation, is not a derivative work of the Library, and
+therefore falls outside the scope of this License.
+
+  However, linking a "work that uses the Library" with the Library
+creates an executable that is a derivative of the Library (because it
+contains portions of the Library), rather than a "work that uses the
+library".  The executable is therefore covered by this License.
+Section 6 states terms for distribution of such executables.
+
+  When a "work that uses the Library" uses material from a header file
+that is part of the Library, the object code for the work may be a
+derivative work of the Library even though the source code is not.
+Whether this is true is especially significant if the work can be
+linked without the Library, or if the work is itself a library.  The
+threshold for this to be true is not precisely defined by law.
+
+  If such an object file uses only numerical parameters, data
+structure layouts and accessors, and small macros and small inline
+functions (ten lines or less in length), then the use of the object
+file is unrestricted, regardless of whether it is legally a derivative
+work.  (Executables containing this object code plus portions of the
+Library will still fall under Section 6.)
+
+  Otherwise, if the work is a derivative of the Library, you may
+distribute the object code for the work under the terms of Section 6.
+Any executables containing that work also fall under Section 6,
+whether or not they are linked directly with the Library itself.
+
+  6. As an exception to the Sections above, you may also combine or
+link a "work that uses the Library" with the Library to produce a
+work containing portions of the Library, and distribute that work
+under terms of your choice, provided that the terms permit
+modification of the work for the customer's own use and reverse
+engineering for debugging such modifications.
+
+  You must give prominent notice with each copy of the work that the
+Library is used in it and that the Library and its use are covered by
+this License.  You must supply a copy of this License.  If the work
+during execution displays copyright notices, you must include the
+copyright notice for the Library among them, as well as a reference
+directing the user to the copy of this License.  Also, you must do one
+of these things:
+
+    a) Accompany the work with the complete corresponding
+    machine-readable source code for the Library including whatever
+    changes were used in the work (which must be distributed under
+    Sections 1 and 2 above); and, if the work is an executable linked
+    with the Library, with the complete machine-readable "work that
+    uses the Library", as object code and/or source code, so that the
+    user can modify the Library and then relink to produce a modified
+    executable containing the modified Library.  (It is understood
+    that the user who changes the contents of definitions files in the
+    Library will not necessarily be able to recompile the application
+    to use the modified definitions.)
+
+    b) Use a suitable shared library mechanism for linking with the
+    Library.  A suitable mechanism is one that (1) uses at run time a
+    copy of the library already present on the user's computer system,
+    rather than copying library functions into the executable, and (2)
+    will operate properly with a modified version of the library, if
+    the user installs one, as long as the modified version is
+    interface-compatible with the version that the work was made with.
+
+    c) Accompany the work with a written offer, valid for at
+    least three years, to give the same user the materials
+    specified in Subsection 6a, above, for a charge no more
+    than the cost of performing this distribution.
+
+    d) If distribution of the work is made by offering access to copy
+    from a designated place, offer equivalent access to copy the above
+    specified materials from the same place.
+
+    e) Verify that the user has already received a copy of these
+    materials or that you have already sent this user a copy.
+
+  For an executable, the required form of the "work that uses the
+Library" must include any data and utility programs needed for
+reproducing the executable from it.  However, as a special exception,
+the materials to be distributed need not include anything that is
+normally distributed (in either source or binary form) with the major
+components (compiler, kernel, and so on) of the operating system on
+which the executable runs, unless that component itself accompanies
+the executable.
+
+  It may happen that this requirement contradicts the license
+restrictions of other proprietary libraries that do not normally
+accompany the operating system.  Such a contradiction means you cannot
+use both them and the Library together in an executable that you
+distribute.
+
+  7. You may place library facilities that are a work based on the
+Library side-by-side in a single library together with other library
+facilities not covered by this License, and distribute such a combined
+library, provided that the separate distribution of the work based on
+the Library and of the other library facilities is otherwise
+permitted, and provided that you do these two things:
+
+    a) Accompany the combined library with a copy of the same work
+    based on the Library, uncombined with any other library
+    facilities.  This must be distributed under the terms of the
+    Sections above.
+
+    b) Give prominent notice with the combined library of the fact
+    that part of it is a work based on the Library, and explaining
+    where to find the accompanying uncombined form of the same work.
+
+  8. You may not copy, modify, sublicense, link with, or distribute
+the Library except as expressly provided under this License.  Any
+attempt otherwise to copy, modify, sublicense, link with, or
+distribute the Library is void, and will automatically terminate your
+rights under this License.  However, parties who have received copies,
+or rights, from you under this License will not have their licenses
+terminated so long as such parties remain in full compliance.
+
+  9. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Library or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Library (or any work based on the
+Library), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Library or works based on it.
+
+  10. Each time you redistribute the Library (or any work based on the
+Library), the recipient automatically receives a license from the
+original licensor to copy, distribute, link with or modify the Library
+subject to these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties with
+this License.
+
+  11. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Library at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Library by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Library.
+
+If any portion of this section is held invalid or unenforceable under any
+particular circumstance, the balance of the section is intended to apply,
+and the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  12. If the distribution and/or use of the Library is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Library under this License may add
+an explicit geographical distribution limitation excluding those countries,
+so that distribution is permitted only in or among countries not thus
+excluded.  In such case, this License incorporates the limitation as if
+written in the body of this License.
+
+  13. The Free Software Foundation may publish revised and/or new
+versions of the Lesser General Public License from time to time.
+Such new versions will be similar in spirit to the present version,
+but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Library
+specifies a version number of this License which applies to it and
+"any later version", you have the option of following the terms and
+conditions either of that version or of any later version published by
+the Free Software Foundation.  If the Library does not specify a
+license version number, you may choose any version ever published by
+the Free Software Foundation.
+
+  14. If you wish to incorporate parts of the Library into other free
+programs whose distribution conditions are incompatible with these,
+write to the author to ask for permission.  For software which is
+copyrighted by the Free Software Foundation, write to the Free
+Software Foundation; we sometimes make exceptions for this.  Our
+decision will be guided by the two goals of preserving the free status
+of all derivatives of our free software and of promoting the sharing
+and reuse of software generally.
+
+          NO WARRANTY
+
+  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
+WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
+KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
+LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
+AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
+FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
+LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
+FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGES.
+
+         END OF TERMS AND CONDITIONS
+
+           How to Apply These Terms to Your New Libraries
+
+  If you develop a new library, and you want it to be of the greatest
+possible use to the public, we recommend making it free software that
+everyone can redistribute and change.  You can do so by permitting
+redistribution under these terms (or, alternatively, under the terms of the
+ordinary General Public License).
+
+  To apply these terms, attach the following notices to the library.  It is
+safest to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least the
+"copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the library's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+
+Also add information on how to contact you by electronic and paper mail.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the library, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the
+  library `Frob' (a library for tweaking knobs) written by James Random Hacker.
+
+  <signature of Ty Coon>, 1 April 1990
+  Ty Coon, President of Vice
+
+That's all there is to it!
+
+
diff --git a/website/js/vendor/tinymce/js/tinymce/plugins/advlist/plugin.min.js b/website/js/vendor/tinymce/js/tinymce/plugins/advlist/plugin.min.js
new file mode 100644 (file)
index 0000000..f11035d
--- /dev/null
@@ -0,0 +1,9 @@
+/**
+ * Copyright (c) Tiny Technologies, Inc. All rights reserved.
+ * Licensed under the LGPL or a commercial license.
+ * For LGPL see License.txt in the project root for license information.
+ * For commercial licenses see https://www.tiny.cloud/
+ *
+ * Version: 5.1.5 (2019-12-19)
+ */
+!function(){"use strict";function n(){}function o(n){return function(){return n}}function t(){return d}var e,r=tinymce.util.Tools.resolve("tinymce.PluginManager"),u=tinymce.util.Tools.resolve("tinymce.util.Tools"),l=function(n,t,e){var r="UL"===t?"InsertUnorderedList":"InsertOrderedList";n.execCommand(r,!1,!1===e?null:{"list-style-type":e})},i=function(e){e.addCommand("ApplyUnorderedListStyle",function(n,t){l(e,"UL",t["list-style-type"])}),e.addCommand("ApplyOrderedListStyle",function(n,t){l(e,"OL",t["list-style-type"])})},c=function(n){var t=n.getParam("advlist_number_styles","default,lower-alpha,lower-greek,lower-roman,upper-alpha,upper-roman");return t?t.split(/[ ,]/):[]},s=function(n){var t=n.getParam("advlist_bullet_styles","default,circle,square");return t?t.split(/[ ,]/):[]},f=o(!1),a=o(!0),d=(e={fold:function(n,t){return n()},is:f,isSome:f,isNone:a,getOr:m,getOrThunk:p,getOrDie:function(n){throw new Error(n||"error: getOrDie called on none.")},getOrNull:o(null),getOrUndefined:o(undefined),or:m,orThunk:p,map:t,each:n,bind:t,exists:f,forall:a,filter:t,equals:g,equals_:g,toArray:function(){return[]},toString:o("none()")},Object.freeze&&Object.freeze(e),e);function g(n){return n.isNone()}function p(n){return n()}function m(n){return n}function y(n,t,e){var r=function(n,t){for(var e=0;e<n.length;e++){if(t(n[e]))return e}return-1}(t.parents,L),i=-1!==r?t.parents.slice(0,r):t.parents,o=u.grep(i,N(n));return 0<o.length&&o[0].nodeName===e}function O(n,t,e,r,i,o){0<o.length?function(e,n,t,r,i,o){e.ui.registry.addSplitButton(n,{tooltip:t,icon:"OL"===i?"ordered-list":"unordered-list",presets:"listpreview",columns:3,fetch:function(n){n(u.map(o,function(n){return{type:"choiceitem",value:"default"===n?"":n,icon:"list-"+("OL"===i?"num":"bull")+"-"+("disc"===n||"decimal"===n?"default":n),text:function(n){return n.replace(/\-/g," ").replace(/\b\w/g,function(n){return n.toUpperCase()})}(n)}}))},onAction:function(){return e.execCommand(r)},onItemAction:function(n,t){l(e,i,t)},select:function(t){return S(e).map(function(n){return t===n}).getOr(!1)},onSetup:function(t){function n(n){t.setActive(y(e,n,i))}return e.on("NodeChange",n),function(){return e.off("NodeChange",n)}}})}(n,t,e,r,i,o):function(e,n,t,r,i){e.ui.registry.addToggleButton(n,{active:!1,tooltip:t,icon:"OL"===i?"ordered-list":"unordered-list",onSetup:function(t){function n(n){t.setActive(y(e,n,i))}return e.on("NodeChange",n),function(){return e.off("NodeChange",n)}},onAction:function(){return e.execCommand(r)}})}(n,t,e,r,i)}var v=function(e){function n(){return i}function t(n){return n(e)}var r=o(e),i={fold:function(n,t){return t(e)},is:function(n){return e===n},isSome:a,isNone:f,getOr:r,getOrThunk:r,getOrDie:r,getOrNull:r,getOrUndefined:r,or:n,orThunk:n,map:function(n){return v(n(e))},each:function(n){n(e)},bind:t,exists:t,forall:t,filter:function(n){return n(e)?i:d},toArray:function(){return[e]},toString:function(){return"some("+e+")"},equals:function(n){return n.is(e)},equals_:function(n,t){return n.fold(f,function(n){return t(e,n)})}};return i},h=function(n){return null===n||n===undefined?d:v(n)},L=function(n){return n&&/^(TH|TD)$/.test(n.nodeName)},N=function(t){return function(n){return n&&/^(OL|UL|DL)$/.test(n.nodeName)&&function(n,t){return n.$.contains(n.getBody(),t)}(t,n)}},S=function(n){var t=n.dom.getParent(n.selection.getNode(),"ol,ul"),e=n.dom.getStyle(t,"listStyleType");return h(e)},T=function(n){O(n,"numlist","Numbered list","InsertOrderedList","OL",c(n)),O(n,"bullist","Bullet list","InsertUnorderedList","UL",s(n))};!function b(){r.add("advlist",function(n){var t,e,r;e="lists",r=(t=n).settings.plugins?t.settings.plugins:"",-1!==u.inArray(r.split(/[ ,]/),e)&&(T(n),i(n))})}()}();
\ No newline at end of file
diff --git a/website/js/vendor/tinymce/js/tinymce/plugins/anchor/plugin.min.js b/website/js/vendor/tinymce/js/tinymce/plugins/anchor/plugin.min.js
new file mode 100644 (file)
index 0000000..eac9ace
--- /dev/null
@@ -0,0 +1,9 @@
+/**
+ * Copyright (c) Tiny Technologies, Inc. All rights reserved.
+ * Licensed under the LGPL or a commercial license.
+ * For LGPL see License.txt in the project root for license information.
+ * For commercial licenses see https://www.tiny.cloud/
+ *
+ * Version: 5.1.5 (2019-12-19)
+ */
+!function(){"use strict";function e(o){return function(t){for(var e=0;e<t.length;e++)(n=t[e]).attr("href")||!n.attr("id")&&!n.attr("name")||n.firstChild||t[e].attr("contenteditable",o);var n}}var t=tinymce.util.Tools.resolve("tinymce.PluginManager"),n=function(t){return/^[A-Za-z][A-Za-z0-9\-:._]*$/.test(t)},o=function(t){var e=t.selection.getNode();return"A"===e.tagName&&""===t.dom.getAttrib(e,"href")?e.getAttribute("id")||e.getAttribute("name"):""},r=function(t,e){var n=t.selection.getNode();"A"===n.tagName&&""===t.dom.getAttrib(n,"href")?(n.removeAttribute("name"),n.id=e,t.undoManager.add()):(t.focus(),t.selection.collapse(!0),t.execCommand("mceInsertContent",!1,t.dom.createHTML("a",{id:e})))},a=function(e){var t=o(e);e.windowManager.open({title:"Anchor",size:"normal",body:{type:"panel",items:[{name:"id",type:"input",label:"ID",placeholder:"example"}]},buttons:[{type:"cancel",name:"cancel",text:"Cancel"},{type:"submit",name:"save",text:"Save",primary:!0}],initialData:{id:t},onSubmit:function(t){!function(t,e){return n(e)?(r(t,e),!1):(t.windowManager.alert("Id should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores."),!0)}(e,t.getData().id)&&t.close()}})},i=function(t){t.addCommand("mceAnchor",function(){a(t)})},c=function(t){t.on("PreInit",function(){t.parser.addNodeFilter("a",e("false")),t.serializer.addNodeFilter("a",e(null))})},d=function(e){e.ui.registry.addToggleButton("anchor",{icon:"bookmark",tooltip:"Anchor",onAction:function(){return e.execCommand("mceAnchor")},onSetup:function(t){return e.selection.selectorChangedWithUnbind("a:not([href])",t.setActive).unbind}}),e.ui.registry.addMenuItem("anchor",{icon:"bookmark",text:"Anchor...",onAction:function(){return e.execCommand("mceAnchor")}})};!function u(){t.add("anchor",function(t){c(t),i(t),d(t)})}()}();
\ No newline at end of file
diff --git a/website/js/vendor/tinymce/js/tinymce/plugins/autolink/plugin.min.js b/website/js/vendor/tinymce/js/tinymce/plugins/autolink/plugin.min.js
new file mode 100644 (file)
index 0000000..c12a0a7
--- /dev/null
@@ -0,0 +1,9 @@
+/**
+ * Copyright (c) Tiny Technologies, Inc. All rights reserved.
+ * Licensed under the LGPL or a commercial license.
+ * For LGPL see License.txt in the project root for license information.
+ * For commercial licenses see https://www.tiny.cloud/
+ *
+ * Version: 5.1.5 (2019-12-19)
+ */
+!function(){"use strict";function i(t,e){if(e<0&&(e=0),3===t.nodeType){var n=t.data.length;n<e&&(e=n)}return e}function C(t,e,n){1!==e.nodeType||e.hasChildNodes()?t.setStart(e,i(e,n)):t.setStartBefore(e)}function m(t,e,n){1!==e.nodeType||e.hasChildNodes()?t.setEnd(e,i(e,n)):t.setEndAfter(e)}var t=tinymce.util.Tools.resolve("tinymce.PluginManager"),o=tinymce.util.Tools.resolve("tinymce.Env"),y=function(t){return t.getParam("autolink_pattern",/^(https?:\/\/|ssh:\/\/|ftp:\/\/|file:\/|www\.|(?:mailto:)?[A-Z0-9._%+\-]+@)(.+)$/i)},k=function(t){return t.getParam("default_link_target",!1)},r=function(t,e,n){var i,o,r,f,a,s,d,c,l,u,g=y(t),h=k(t);if("A"!==t.selection.getNode().tagName){if((i=t.selection.getRng(!0).cloneRange()).startOffset<5){if(!(c=i.endContainer.previousSibling)){if(!i.endContainer.firstChild||!i.endContainer.firstChild.nextSibling)return;c=i.endContainer.firstChild.nextSibling}if(l=c.length,C(i,c,l),m(i,c,l),i.endOffset<5)return;o=i.endOffset,f=c}else{if(3!==(f=i.endContainer).nodeType&&f.firstChild){for(;3!==f.nodeType&&f.firstChild;)f=f.firstChild;3===f.nodeType&&(C(i,f,0),m(i,f,f.nodeValue.length))}o=1===i.endOffset?2:i.endOffset-1-e}for(r=o;C(i,f,2<=o?o-2:0),m(i,f,1<=o?o-1:0),o-=1," "!==(u=i.toString())&&""!==u&&160!==u.charCodeAt(0)&&0<=o-2&&u!==n;);!function(t,e){return t===e||" "===t||160===t.charCodeAt(0)}(i.toString(),n)?(0===i.startOffset?C(i,f,0):C(i,f,o),m(i,f,r)):(C(i,f,o),m(i,f,r),o+=1),"."===(s=i.toString()).charAt(s.length-1)&&m(i,f,r-1),(d=(s=i.toString().trim()).match(g))&&("www."===d[1]?d[1]="http://www.":/@$/.test(d[1])&&!/^mailto:/.test(d[1])&&(d[1]="mailto:"+d[1]),a=t.selection.getBookmark(),t.selection.setRng(i),t.execCommand("createlink",!1,d[1]+d[2]),!1!==h&&t.dom.setAttrib(t.selection.getNode(),"target",h),t.selection.moveToBookmark(a),t.nodeChanged())}},e=function(e){var n;e.on("keydown",function(t){if(13===t.keyCode)return function(t){r(t,-1,"")}(e)}),o.browser.isIE()?e.on("focus",function(){if(!n){n=!0;try{e.execCommand("AutoUrlDetect",!1,!0)}catch(t){}}}):(e.on("keypress",function(t){if(41===t.keyCode)return function(t){r(t,-1,"(")}(e)}),e.on("keyup",function(t){if(32===t.keyCode)return function(t){r(t,0,"")}(e)}))};!function n(){t.add("autolink",function(t){e(t)})}()}();
\ No newline at end of file
diff --git a/website/js/vendor/tinymce/js/tinymce/plugins/autoresize/plugin.min.js b/website/js/vendor/tinymce/js/tinymce/plugins/autoresize/plugin.min.js
new file mode 100644 (file)
index 0000000..8d76967
--- /dev/null
@@ -0,0 +1,9 @@
+/**
+ * Copyright (c) Tiny Technologies, Inc. All rights reserved.
+ * Licensed under the LGPL or a commercial license.
+ * For LGPL see License.txt in the project root for license information.
+ * For commercial licenses see https://www.tiny.cloud/
+ *
+ * Version: 5.1.5 (2019-12-19)
+ */
+!function(){"use strict";function d(e,t){var n=e.getBody();n&&(n.style.overflowY=t?"":"hidden",t||(n.scrollTop=0))}function h(e,t,n,i){var o=parseInt(e.getStyle(t,n,i),10);return isNaN(o)?0:o}var i=function(e){function t(){return n}var n=e;return{get:t,set:function(e){n=e},clone:function(){return i(t())}}},e=tinymce.util.Tools.resolve("tinymce.PluginManager"),v=tinymce.util.Tools.resolve("tinymce.Env"),r=tinymce.util.Tools.resolve("tinymce.util.Delay"),p=function(e){return e.fire("ResizeEditor")},y=function(e){return e.getParam("min_height",e.getElement().offsetHeight,"number")},z=function(e){return e.getParam("max_height",0,"number")},n=function(e){return e.getParam("autoresize_overflow_padding",1,"number")},b=function(e){return e.getParam("autoresize_bottom_margin",50,"number")},o=function(e){return e.getParam("autoresize_on_init",!0,"boolean")},u=function(e,t,n,i,o){r.setEditorTimeout(e,function(){C(e,t),n--?u(e,t,n,i,o):o&&o()},i)},C=function(e,t){var n,i,o,r=e.dom,u=e.getDoc();if(u)if(function(e){return e.plugins.fullscreen&&e.plugins.fullscreen.isFullscreen()}(e))d(e,!0);else{var s=u.documentElement,a=b(e);i=y(e);var f=h(r,s,"margin-top",!0),c=h(r,s,"margin-bottom",!0);(o=s.offsetHeight+f+c+a)<0&&(o=0);var g=e.getContainer().offsetHeight-e.getContentAreaContainer().offsetHeight;o+g>y(e)&&(i=o+g);var l=z(e);if(l&&l<i?(i=l,d(e,!0)):d(e,!1),i!==t.get()){if(n=i-t.get(),r.setStyle(e.getContainer(),"height",i+"px"),t.set(i),p(e),v.browser.isSafari()&&v.mac){var m=e.getWin();m.scrollTo(m.pageXOffset,m.pageYOffset)}e.hasFocus()&&e.selection.scrollIntoView(e.selection.getNode()),v.webkit&&n<0&&C(e,t)}}},s={setup:function(t,e){t.on("init",function(){var e=n(t);t.dom.setStyles(t.getBody(),{paddingLeft:e,paddingRight:e,"min-height":0})}),t.on("NodeChange SetContent keyup FullscreenStateChanged ResizeContent",function(){C(t,e)}),o(t)&&t.on("init",function(){u(t,e,20,100,function(){u(t,e,5,1e3)})})},resize:C},a=function(e,t){e.addCommand("mceAutoResize",function(){s.resize(e,t)})};!function t(){e.add("autoresize",function(e){if(e.settings.hasOwnProperty("resize")||(e.settings.resize=!1),!e.inline){var t=i(0);a(e,t),s.setup(e,t)}})}()}();
\ No newline at end of file
diff --git a/website/js/vendor/tinymce/js/tinymce/plugins/autosave/plugin.min.js b/website/js/vendor/tinymce/js/tinymce/plugins/autosave/plugin.min.js
new file mode 100644 (file)
index 0000000..c3683e7
--- /dev/null
@@ -0,0 +1,9 @@
+/**
+ * Copyright (c) Tiny Technologies, Inc. All rights reserved.
+ * Licensed under the LGPL or a commercial license.
+ * For LGPL see License.txt in the project root for license information.
+ * For commercial licenses see https://www.tiny.cloud/
+ *
+ * Version: 5.1.5 (2019-12-19)
+ */
+!function(n){"use strict";function r(t,e){var n=t||e,r=/^(\d+)([ms]?)$/.exec(""+n);return(r[2]?{s:1e3,m:6e4}[r[2]]:1)*parseInt(n,10)}function o(t){var e=t.getParam("autosave_prefix","tinymce-autosave-{path}{query}{hash}-{id}-");return e=(e=(e=(e=e.replace(/\{path\}/g,n.document.location.pathname)).replace(/\{query\}/g,n.document.location.search)).replace(/\{hash\}/g,n.document.location.hash)).replace(/\{id\}/g,t.id)}function a(t,e){var n=t.settings.forced_root_block;return""===(e=d.trim(void 0===e?t.getBody().innerHTML:e))||new RegExp("^<"+n+"[^>]*>((\xa0|&nbsp;|[ \t]|<br[^>]*>)+?|)</"+n+">|<br>$","i").test(e)}function i(t){var e=parseInt(v.getItem(o(t)+"time"),10)||0;return!((new Date).getTime()-e>function(t){return r(t.settings.autosave_retention,"20m")}(t))||(g(t,!1),!1)}function u(t){var e=o(t);!a(t)&&t.isDirty()&&(v.setItem(e+"draft",t.getContent({format:"raw",no_events:!0})),v.setItem(e+"time",(new Date).getTime().toString()),function(t){t.fire("StoreDraft")}(t))}function s(t){var e=o(t);i(t)&&(t.setContent(v.getItem(e+"draft"),{format:"raw"}),function(t){t.fire("RestoreDraft")}(t))}function c(t,e){var n=function(t){return r(t.settings.autosave_interval,"30s")}(t);e.get()||(m.setInterval(function(){t.removed||u(t)},n),e.set(!0))}function f(t){t.undoManager.transact(function(){s(t),g(t)}),t.focus()}var l=function(t){function e(){return n}var n=t;return{get:e,set:function(t){n=t},clone:function(){return l(e())}}},t=tinymce.util.Tools.resolve("tinymce.PluginManager"),m=tinymce.util.Tools.resolve("tinymce.util.Delay"),v=tinymce.util.Tools.resolve("tinymce.util.LocalStorage"),d=tinymce.util.Tools.resolve("tinymce.util.Tools"),g=function(t,e){var n=o(t);v.removeItem(n+"draft"),v.removeItem(n+"time"),!1!==e&&function(t){t.fire("RemoveDraft")}(t)};function y(r){for(var o=[],t=1;t<arguments.length;t++)o[t-1]=arguments[t];return function(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];var n=o.concat(t);return r.apply(null,n)}}function p(n,t){return function(t){t.setDisabled(!i(n));function e(){return t.setDisabled(!i(n))}return n.on("StoreDraft RestoreDraft RemoveDraft",e),function(){return n.off("StoreDraft RestoreDraft RemoveDraft",e)}}}var D=tinymce.util.Tools.resolve("tinymce.EditorManager");!function e(){t.add("autosave",function(t){var e=l(!1);return function(t){t.editorManager.on("BeforeUnload",function(t){var e;d.each(D.get(),function(t){t.plugins.autosave&&t.plugins.autosave.storeDraft(),!e&&t.isDirty()&&function(t){return t.getParam("autosave_ask_before_unload",!0)}(t)&&(e=t.translate("You have unsaved changes are you sure you want to navigate away?"))}),e&&(t.preventDefault(),t.returnValue=e)})}(t),function(t,e){c(t,e),t.ui.registry.addButton("restoredraft",{tooltip:"Restore last draft",icon:"restore-draft",onAction:function(){f(t)},onSetup:p(t)}),t.ui.registry.addMenuItem("restoredraft",{text:"Restore last draft",icon:"restore-draft",onAction:function(){f(t)},onSetup:p(t)})}(t,e),t.on("init",function(){(function(t){return t.getParam("autosave_restore_when_empty",!1)})(t)&&t.dom.isEmpty(t.getBody())&&s(t)}),function(t){return{hasDraft:y(i,t),storeDraft:y(u,t),restoreDraft:y(s,t),removeDraft:y(g,t),isEmpty:y(a,t)}}(t)})}()}(window);
\ No newline at end of file
diff --git a/website/js/vendor/tinymce/js/tinymce/plugins/bbcode/plugin.min.js b/website/js/vendor/tinymce/js/tinymce/plugins/bbcode/plugin.min.js
new file mode 100644 (file)
index 0000000..3b5119f
--- /dev/null
@@ -0,0 +1,9 @@
+/**
+ * Copyright (c) Tiny Technologies, Inc. All rights reserved.
+ * Licensed under the LGPL or a commercial license.
+ * For LGPL see License.txt in the project root for license information.
+ * For commercial licenses see https://www.tiny.cloud/
+ *
+ * Version: 5.1.5 (2019-12-19)
+ */
+!function(){"use strict";var o=tinymce.util.Tools.resolve("tinymce.PluginManager"),e=tinymce.util.Tools.resolve("tinymce.util.Tools"),t=function(t){t=e.trim(t);function o(o,e){t=t.replace(o,e)}return o(/<a.*?href=\"(.*?)\".*?>(.*?)<\/a>/gi,"[url=$1]$2[/url]"),o(/<font.*?color=\"(.*?)\".*?class=\"codeStyle\".*?>(.*?)<\/font>/gi,"[code][color=$1]$2[/color][/code]"),o(/<font.*?color=\"(.*?)\".*?class=\"quoteStyle\".*?>(.*?)<\/font>/gi,"[quote][color=$1]$2[/color][/quote]"),o(/<font.*?class=\"codeStyle\".*?color=\"(.*?)\".*?>(.*?)<\/font>/gi,"[code][color=$1]$2[/color][/code]"),o(/<font.*?class=\"quoteStyle\".*?color=\"(.*?)\".*?>(.*?)<\/font>/gi,"[quote][color=$1]$2[/color][/quote]"),o(/<span style=\"color: ?(.*?);\">(.*?)<\/span>/gi,"[color=$1]$2[/color]"),o(/<font.*?color=\"(.*?)\".*?>(.*?)<\/font>/gi,"[color=$1]$2[/color]"),o(/<span style=\"font-size:(.*?);\">(.*?)<\/span>/gi,"[size=$1]$2[/size]"),o(/<font>(.*?)<\/font>/gi,"$1"),o(/<img.*?src=\"(.*?)\".*?\/>/gi,"[img]$1[/img]"),o(/<span class=\"codeStyle\">(.*?)<\/span>/gi,"[code]$1[/code]"),o(/<span class=\"quoteStyle\">(.*?)<\/span>/gi,"[quote]$1[/quote]"),o(/<strong class=\"codeStyle\">(.*?)<\/strong>/gi,"[code][b]$1[/b][/code]"),o(/<strong class=\"quoteStyle\">(.*?)<\/strong>/gi,"[quote][b]$1[/b][/quote]"),o(/<em class=\"codeStyle\">(.*?)<\/em>/gi,"[code][i]$1[/i][/code]"),o(/<em class=\"quoteStyle\">(.*?)<\/em>/gi,"[quote][i]$1[/i][/quote]"),o(/<u class=\"codeStyle\">(.*?)<\/u>/gi,"[code][u]$1[/u][/code]"),o(/<u class=\"quoteStyle\">(.*?)<\/u>/gi,"[quote][u]$1[/u][/quote]"),o(/<\/(strong|b)>/gi,"[/b]"),o(/<(strong|b)>/gi,"[b]"),o(/<\/(em|i)>/gi,"[/i]"),o(/<(em|i)>/gi,"[i]"),o(/<\/u>/gi,"[/u]"),o(/<span style=\"text-decoration: ?underline;\">(.*?)<\/span>/gi,"[u]$1[/u]"),o(/<u>/gi,"[u]"),o(/<blockquote[^>]*>/gi,"[quote]"),o(/<\/blockquote>/gi,"[/quote]"),o(/<br \/>/gi,"\n"),o(/<br\/>/gi,"\n"),o(/<br>/gi,"\n"),o(/<p>/gi,""),o(/<\/p>/gi,"\n"),o(/&nbsp;|\u00a0/gi," "),o(/&quot;/gi,'"'),o(/&lt;/gi,"<"),o(/&gt;/gi,">"),o(/&amp;/gi,"&"),t},i=function(t){t=e.trim(t);function o(o,e){t=t.replace(o,e)}return o(/\n/gi,"<br />"),o(/\[b\]/gi,"<strong>"),o(/\[\/b\]/gi,"</strong>"),o(/\[i\]/gi,"<em>"),o(/\[\/i\]/gi,"</em>"),o(/\[u\]/gi,"<u>"),o(/\[\/u\]/gi,"</u>"),o(/\[url=([^\]]+)\](.*?)\[\/url\]/gi,'<a href="$1">$2</a>'),o(/\[url\](.*?)\[\/url\]/gi,'<a href="$1">$1</a>'),o(/\[img\](.*?)\[\/img\]/gi,'<img src="$1" />'),o(/\[color=(.*?)\](.*?)\[\/color\]/gi,'<font color="$1">$2</font>'),o(/\[code\](.*?)\[\/code\]/gi,'<span class="codeStyle">$1</span>&nbsp;'),o(/\[quote.*?\](.*?)\[\/quote\]/gi,'<span class="quoteStyle">$1</span>&nbsp;'),t};!function n(){o.add("bbcode",function(o){o.on("BeforeSetContent",function(o){o.content=i(o.content)}),o.on("PostProcess",function(o){o.set&&(o.content=i(o.content)),o.get&&(o.content=t(o.content))})})}()}();
\ No newline at end of file
diff --git a/website/js/vendor/tinymce/js/tinymce/plugins/charmap/plugin.min.js b/website/js/vendor/tinymce/js/tinymce/plugins/charmap/plugin.min.js
new file mode 100644 (file)
index 0000000..b1623c9
--- /dev/null
@@ -0,0 +1,9 @@
+/**
+ * Copyright (c) Tiny Technologies, Inc. All rights reserved.
+ * Licensed under the LGPL or a commercial license.
+ * For LGPL see License.txt in the project root for license information.
+ * For commercial licenses see https://www.tiny.cloud/
+ *
+ * Version: 5.1.5 (2019-12-19)
+ */
+!function(c){"use strict";function n(){}function i(n){return function(){return n}}function e(){return m}var r,t=tinymce.util.Tools.resolve("tinymce.PluginManager"),a=function(n,e){return n.fire("insertCustomChar",{chr:e})},u=function(n,e){var r=a(n,e).chr;n.execCommand("mceInsertContent",!1,r)},o=tinymce.util.Tools.resolve("tinymce.util.Tools"),s=function(n){return n.settings.charmap},l=function(n){return n.settings.charmap_append},f=i(!1),g=i(!0),m=(r={fold:function(n,e){return n()},is:f,isSome:f,isNone:g,getOr:p,getOrThunk:d,getOrDie:function(n){throw new Error(n||"error: getOrDie called on none.")},getOrNull:i(null),getOrUndefined:i(undefined),or:p,orThunk:d,map:e,each:n,bind:e,exists:f,forall:g,filter:e,equals:h,equals_:h,toArray:function(){return[]},toString:i("none()")},Object.freeze&&Object.freeze(r),r);function h(n){return n.isNone()}function d(n){return n()}function p(n){return n}function y(e){return function(n){return function(n){if(null===n)return"null";var e=typeof n;return"object"==e&&(Array.prototype.isPrototypeOf(n)||n.constructor&&"Array"===n.constructor.name)?"array":"object"==e&&(String.prototype.isPrototypeOf(n)||n.constructor&&"String"===n.constructor.name)?"string":e}(n)===e}}function w(n,e){for(var r=n.length,t=new Array(r),a=0;a<r;a++){var i=n[a];t[a]=e(i,a)}return t}function b(n,e){return function(n){for(var e=[],r=0,t=n.length;r<t;++r){if(!O(n[r]))throw new Error("Arr.flatten item "+r+" was not an array, input: "+n);S.apply(e,n[r])}return e}(w(n,e))}function v(n){return T(n)?[].concat(function(n){return o.grep(n,function(n){return T(n)&&2===n.length})}(n)):"function"==typeof n?n():[]}function k(n,e){return-1!==n.indexOf(e)}var C=function(r){function n(){return a}function e(n){return n(r)}var t=i(r),a={fold:function(n,e){return e(r)},is:function(n){return r===n},isSome:g,isNone:f,getOr:t,getOrThunk:t,getOrDie:t,getOrNull:t,getOrUndefined:t,or:n,orThunk:n,map:function(n){return C(n(r))},each:function(n){n(r)},bind:e,exists:e,forall:e,filter:function(n){return n(r)?a:m},toArray:function(){return[r]},toString:function(){return"some("+r+")"},equals:function(n){return n.is(r)},equals_:function(n,e){return n.fold(f,function(n){return e(r,n)})}};return a},A={some:C,none:e,from:function(n){return null===n||n===undefined?m:C(n)}},O=y("array"),x=y("function"),q=Array.prototype.slice,S=Array.prototype.push,T=(x(Array.from)&&Array.from,o.isArray),E="User Defined",z=function(n){var e=function(n,e){var r=s(n);r&&(e=[{name:E,characters:v(r)}]);var t=l(n);if(t){var a=o.grep(e,function(n){return n.name===E});return a.length?(a[0].characters=[].concat(a[0].characters).concat(v(t)),e):[].concat(e).concat({name:E,characters:v(t)})}return e}(n,[{name:"Currency",characters:[[36,"dollar sign"],[162,"cent sign"],[8364,"euro sign"],[163,"pound sign"],[165,"yen sign"],[164,"currency sign"],[8352,"euro-currency sign"],[8353,"colon sign"],[8354,"cruzeiro sign"],[8355,"french franc sign"],[8356,"lira sign"],[8357,"mill sign"],[8358,"naira sign"],[8359,"peseta sign"],[8360,"rupee sign"],[8361,"won sign"],[8362,"new sheqel sign"],[8363,"dong sign"],[8365,"kip sign"],[8366,"tugrik sign"],[8367,"drachma sign"],[8368,"german penny symbol"],[8369,"peso sign"],[8370,"guarani sign"],[8371,"austral sign"],[8372,"hryvnia sign"],[8373,"cedi sign"],[8374,"livre tournois sign"],[8375,"spesmilo sign"],[8376,"tenge sign"],[8377,"indian rupee sign"],[8378,"turkish lira sign"],[8379,"nordic mark sign"],[8380,"manat sign"],[8381,"ruble sign"],[20870,"yen character"],[20803,"yuan character"],[22291,"yuan character, in hong kong and taiwan"],[22278,"yen/yuan character variant one"]]},{name:"Text",characters:[[169,"copyright sign"],[174,"registered sign"],[8482,"trade mark sign"],[8240,"per mille sign"],[181,"micro sign"],[183,"middle dot"],[8226,"bullet"],[8230,"three dot leader"],[8242,"minutes / feet"],[8243,"seconds / inches"],[167,"section sign"],[182,"paragraph sign"],[223,"sharp s / ess-zed"]]},{name:"Quotations",characters:[[8249,"single left-pointing angle quotation mark"],[8250,"single right-pointing angle quotation mark"],[171,"left pointing guillemet"],[187,"right pointing guillemet"],[8216,"left single quotation mark"],[8217,"right single quotation mark"],[8220,"left double quotation mark"],[8221,"right double quotation mark"],[8218,"single low-9 quotation mark"],[8222,"double low-9 quotation mark"],[60,"less-than sign"],[62,"greater-than sign"],[8804,"less-than or equal to"],[8805,"greater-than or equal to"],[8211,"en dash"],[8212,"em dash"],[175,"macron"],[8254,"overline"],[164,"currency sign"],[166,"broken bar"],[168,"diaeresis"],[161,"inverted exclamation mark"],[191,"turned question mark"],[710,"circumflex accent"],[732,"small tilde"],[176,"degree sign"],[8722,"minus sign"],[177,"plus-minus sign"],[247,"division sign"],[8260,"fraction slash"],[215,"multiplication sign"],[185,"superscript one"],[178,"superscript two"],[179,"superscript three"],[188,"fraction one quarter"],[189,"fraction one half"],[190,"fraction three quarters"]]},{name:"Mathematical",characters:[[402,"function / florin"],[8747,"integral"],[8721,"n-ary sumation"],[8734,"infinity"],[8730,"square root"],[8764,"similar to"],[8773,"approximately equal to"],[8776,"almost equal to"],[8800,"not equal to"],[8801,"identical to"],[8712,"element of"],[8713,"not an element of"],[8715,"contains as member"],[8719,"n-ary product"],[8743,"logical and"],[8744,"logical or"],[172,"not sign"],[8745,"intersection"],[8746,"union"],[8706,"partial differential"],[8704,"for all"],[8707,"there exists"],[8709,"diameter"],[8711,"backward difference"],[8727,"asterisk operator"],[8733,"proportional to"],[8736,"angle"]]},{name:"Extended Latin",characters:[[192,"A - grave"],[193,"A - acute"],[194,"A - circumflex"],[195,"A - tilde"],[196,"A - diaeresis"],[197,"A - ring above"],[256,"A - macron"],[198,"ligature AE"],[199,"C - cedilla"],[200,"E - grave"],[201,"E - acute"],[202,"E - circumflex"],[203,"E - diaeresis"],[274,"E - macron"],[204,"I - grave"],[205,"I - acute"],[206,"I - circumflex"],[207,"I - diaeresis"],[298,"I - macron"],[208,"ETH"],[209,"N - tilde"],[210,"O - grave"],[211,"O - acute"],[212,"O - circumflex"],[213,"O - tilde"],[214,"O - diaeresis"],[216,"O - slash"],[332,"O - macron"],[338,"ligature OE"],[352,"S - caron"],[217,"U - grave"],[218,"U - acute"],[219,"U - circumflex"],[220,"U - diaeresis"],[362,"U - macron"],[221,"Y - acute"],[376,"Y - diaeresis"],[562,"Y - macron"],[222,"THORN"],[224,"a - grave"],[225,"a - acute"],[226,"a - circumflex"],[227,"a - tilde"],[228,"a - diaeresis"],[229,"a - ring above"],[257,"a - macron"],[230,"ligature ae"],[231,"c - cedilla"],[232,"e - grave"],[233,"e - acute"],[234,"e - circumflex"],[235,"e - diaeresis"],[275,"e - macron"],[236,"i - grave"],[237,"i - acute"],[238,"i - circumflex"],[239,"i - diaeresis"],[299,"i - macron"],[240,"eth"],[241,"n - tilde"],[242,"o - grave"],[243,"o - acute"],[244,"o - circumflex"],[245,"o - tilde"],[246,"o - diaeresis"],[248,"o slash"],[333,"o macron"],[339,"ligature oe"],[353,"s - caron"],[249,"u - grave"],[250,"u - acute"],[251,"u - circumflex"],[252,"u - diaeresis"],[363,"u - macron"],[253,"y - acute"],[254,"thorn"],[255,"y - diaeresis"],[563,"y - macron"],[913,"Alpha"],[914,"Beta"],[915,"Gamma"],[916,"Delta"],[917,"Epsilon"],[918,"Zeta"],[919,"Eta"],[920,"Theta"],[921,"Iota"],[922,"Kappa"],[923,"Lambda"],[924,"Mu"],[925,"Nu"],[926,"Xi"],[927,"Omicron"],[928,"Pi"],[929,"Rho"],[931,"Sigma"],[932,"Tau"],[933,"Upsilon"],[934,"Phi"],[935,"Chi"],[936,"Psi"],[937,"Omega"],[945,"alpha"],[946,"beta"],[947,"gamma"],[948,"delta"],[949,"epsilon"],[950,"zeta"],[951,"eta"],[952,"theta"],[953,"iota"],[954,"kappa"],[955,"lambda"],[956,"mu"],[957,"nu"],[958,"xi"],[959,"omicron"],[960,"pi"],[961,"rho"],[962,"final sigma"],[963,"sigma"],[964,"tau"],[965,"upsilon"],[966,"phi"],[967,"chi"],[968,"psi"],[969,"omega"]]},{name:"Symbols",characters:[[8501,"alef symbol"],[982,"pi symbol"],[8476,"real part symbol"],[978,"upsilon - hook symbol"],[8472,"Weierstrass p"],[8465,"imaginary part"]]},{name:"Arrows",characters:[[8592,"leftwards arrow"],[8593,"upwards arrow"],[8594,"rightwards arrow"],[8595,"downwards arrow"],[8596,"left right arrow"],[8629,"carriage return"],[8656,"leftwards double arrow"],[8657,"upwards double arrow"],[8658,"rightwards double arrow"],[8659,"downwards double arrow"],[8660,"left right double arrow"],[8756,"therefore"],[8834,"subset of"],[8835,"superset of"],[8836,"not a subset of"],[8838,"subset of or equal to"],[8839,"superset of or equal to"],[8853,"circled plus"],[8855,"circled times"],[8869,"perpendicular"],[8901,"dot operator"],[8968,"left ceiling"],[8969,"right ceiling"],[8970,"left floor"],[8971,"right floor"],[9001,"left-pointing angle bracket"],[9002,"right-pointing angle bracket"],[9674,"lozenge"],[9824,"black spade suit"],[9827,"black club suit"],[9829,"black heart suit"],[9830,"black diamond suit"],[8194,"en space"],[8195,"em space"],[8201,"thin space"],[8204,"zero width non-joiner"],[8205,"zero width joiner"],[8206,"left-to-right mark"],[8207,"right-to-left mark"]]}]);return 1<e.length?[{name:"All",characters:b(e,function(n){return n.characters})}].concat(e):e},N=function(e){return{getCharMap:function(){return z(e)},insertChar:function(n){u(e,n)}}},U=function(n){function e(){return r}var r=n;return{get:e,set:function(n){r=n},clone:function(){return U(e())}}},D=function(n,e){var r=[],t=e.toLowerCase();return function(n,e){for(var r=0,t=n.length;r<t;r++){e(n[r],r)}}(n.characters,function(n){!function(n,e,r){return!!k(String.fromCharCode(n).toLowerCase(),r)||(k(e.toLowerCase(),r)||k(e.toLowerCase().replace(/\s+/g,""),r))}(n[0],n[1],t)||r.push(n)}),w(r,function(n){return{text:n[1],value:String.fromCharCode(n[0]),icon:String.fromCharCode(n[0])}})},I="pattern",P=function(r,n){function e(){return[{label:"Search",type:"input",name:I},{type:"collection",name:"results"}]}function t(r,t){(function(n,e){for(var r=0,t=n.length;r<t;r++){var a=n[r];if(e(a,r))return A.some(a)}return A.none()})(n,function(n){return n.name===a.get()}).each(function(n){var e=D(n,t);r.setData({results:e})})}var a=1===n.length?U(E):U("All"),i=function(r,t){var a=null;return{cancel:function(){null!==a&&(c.clearTimeout(a),a=null)},throttle:function(){for(var n=[],e=0;e<arguments.length;e++)n[e]=arguments[e];null!==a&&c.clearTimeout(a),a=c.setTimeout(function(){r.apply(null,n),a=null},t)}}}(function(n){var e=n.getData().pattern;t(n,e)},40),o={title:"Special Character",size:"normal",body:1===n.length?{type:"panel",items:e()}:{type:"tabpanel",tabs:w(n,function(n){return{title:n.name,name:n.name,items:e()}})},buttons:[{type:"cancel",name:"close",text:"Close",primary:!0}],initialData:{pattern:"",results:D(n[0],"")},onAction:function(n,e){"results"===e.name&&(u(r,e.value),n.close())},onTabChange:function(n,e){a.set(e.newTabName),i.throttle(n)},onChange:function(n,e){e.name===I&&i.throttle(n)}};r.windowManager.open(o).focus(I)},j=function(n,e){n.addCommand("mceShowCharmap",function(){P(n,e)})},L=tinymce.util.Tools.resolve("tinymce.util.Promise"),M=function(n){n.ui.registry.addButton("charmap",{icon:"insert-character",tooltip:"Special character",onAction:function(){return n.execCommand("mceShowCharmap")}}),n.ui.registry.addMenuItem("charmap",{icon:"insert-character",text:"Special character...",onAction:function(){return n.execCommand("mceShowCharmap")}})};!function R(){t.add("charmap",function(n){var e=z(n);return j(n,e),M(n),function(t,a){t.ui.registry.addAutocompleter("charmap",{ch:":",columns:"auto",minChars:2,fetch:function(r,n){return new L(function(n,e){n(D(a,r))})},onAction:function(n,e,r){t.selection.setRng(e),t.insertContent(r),n.hide()}})}(n,e[0]),N(n)})}()}(window);
\ No newline at end of file
diff --git a/website/js/vendor/tinymce/js/tinymce/plugins/code/plugin.min.js b/website/js/vendor/tinymce/js/tinymce/plugins/code/plugin.min.js
new file mode 100644 (file)
index 0000000..f0db72f
--- /dev/null
@@ -0,0 +1,9 @@
+/**
+ * Copyright (c) Tiny Technologies, Inc. All rights reserved.
+ * Licensed under the LGPL or a commercial license.
+ * For LGPL see License.txt in the project root for license information.
+ * For commercial licenses see https://www.tiny.cloud/
+ *
+ * Version: 5.1.5 (2019-12-19)
+ */
+!function(){"use strict";var e=tinymce.util.Tools.resolve("tinymce.PluginManager"),t=function(e,n){e.focus(),e.undoManager.transact(function(){e.setContent(n)}),e.selection.setCursorLocation(),e.nodeChanged()},o=function(e){return e.getContent({source_view:!0})},n=function(n){var e=o(n);n.windowManager.open({title:"Source Code",size:"large",body:{type:"panel",items:[{type:"textarea",name:"code"}]},buttons:[{type:"cancel",name:"cancel",text:"Cancel"},{type:"submit",name:"save",text:"Save",primary:!0}],initialData:{code:e},onSubmit:function(e){t(n,e.getData().code),e.close()}})},c=function(e){e.addCommand("mceCodeEditor",function(){n(e)})},i=function(e){e.ui.registry.addButton("code",{icon:"sourcecode",tooltip:"Source code",onAction:function(){return n(e)}}),e.ui.registry.addMenuItem("code",{icon:"sourcecode",text:"Source code",onAction:function(){return n(e)}})};!function u(){e.add("code",function(e){return c(e),i(e),{}})}()}();
\ No newline at end of file
diff --git a/website/js/vendor/tinymce/js/tinymce/plugins/codesample/plugin.min.js b/website/js/vendor/tinymce/js/tinymce/plugins/codesample/plugin.min.js
new file mode 100644 (file)
index 0000000..95f8588
--- /dev/null
@@ -0,0 +1,9 @@
+/**
+ * Copyright (c) Tiny Technologies, Inc. All rights reserved.
+ * Licensed under the LGPL or a commercial license.
+ * For LGPL see License.txt in the project root for license information.
+ * For commercial licenses see https://www.tiny.cloud/
+ *
+ * Version: 5.1.5 (2019-12-19)
+ */
+!function(c){"use strict";var e=tinymce.util.Tools.resolve("tinymce.PluginManager"),r=tinymce.util.Tools.resolve("tinymce.dom.DOMUtils"),t={},n=t,g=void 0!==t?t:"undefined"!=typeof WorkerGlobalScope&&c.self instanceof WorkerGlobalScope?c.self:{},i=function(){var u=/\blang(?:uage)?-(?!\*)(\w+)\b/i,S=g.Prism={util:{encode:function(e){return e instanceof s?new s(e.type,S.util.encode(e.content),e.alias):"Array"===S.util.type(e)?e.map(S.util.encode):e.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/\u00a0/g," ")},type:function(e){return Object.prototype.toString.call(e).match(/\[object (\w+)\]/)[1]},clone:function(e){switch(S.util.type(e)){case"Object":var t={};for(var n in e)e.hasOwnProperty(n)&&(t[n]=S.util.clone(e[n]));return t;case"Array":return e.map&&e.map(function(e){return S.util.clone(e)})}return e}},languages:{extend:function(e,t){var n=S.util.clone(S.languages[e]);for(var a in t)n[a]=t[a];return n},insertBefore:function(n,e,t,a){var r=(a=a||S.languages)[n];if(2===arguments.length){for(var i in t=e)t.hasOwnProperty(i)&&(r[i]=t[i]);return r}var o={};for(var s in r)if(r.hasOwnProperty(s)){if(s===e)for(var i in t)t.hasOwnProperty(i)&&(o[i]=t[i]);o[s]=r[s]}return S.languages.DFS(S.languages,function(e,t){t===a[n]&&e!==n&&(this[e]=o)}),a[n]=o},DFS:function(e,t,n){for(var a in e)e.hasOwnProperty(a)&&(t.call(e,a,e[a],n||a),"Object"===S.util.type(e[a])?S.languages.DFS(e[a],t):"Array"===S.util.type(e[a])&&S.languages.DFS(e[a],t,a))}},plugins:{},highlightAll:function(e,t){for(var n=c.document.querySelectorAll('code[class*="language-"], [class*="language-"] code, code[class*="lang-"], [class*="lang-"] code'),a=0,r=void 0;r=n[a++];)S.highlightElement(r,!0===e,t)},highlightElement:function(e,t,n){for(var a,r,i=e;i&&!u.test(i.className);)i=i.parentNode;i&&(a=(i.className.match(u)||[,""])[1],r=S.languages[a]),e.className=e.className.replace(u,"").replace(/\s+/g," ")+" language-"+a,i=e.parentNode,/pre/i.test(i.nodeName)&&(i.className=i.className.replace(u,"").replace(/\s+/g," ")+" language-"+a);var o=e.textContent,s={element:e,language:a,grammar:r,code:o};if(o&&r)if(S.hooks.run("before-highlight",s),t&&g.Worker){var l=new c.Worker(S.filename);l.onmessage=function(e){s.highlightedCode=e.data,S.hooks.run("before-insert",s),s.element.innerHTML=s.highlightedCode,n&&n.call(s.element),S.hooks.run("after-highlight",s),S.hooks.run("complete",s)},l.postMessage(JSON.stringify({language:s.language,code:s.code,immediateClose:!0}))}else s.highlightedCode=S.highlight(s.code,s.grammar,s.language),S.hooks.run("before-insert",s),s.element.innerHTML=s.highlightedCode,n&&n.call(e),S.hooks.run("after-highlight",s),S.hooks.run("complete",s);else S.hooks.run("complete",s)},highlight:function(e,t,n){var a=S.tokenize(e,t);return s.stringify(S.util.encode(a),n)},tokenize:function(e,t,n){var a=S.Token,r=[e],i=t.rest;if(i){for(var o in i)t[o]=i[o];delete t.rest}e:for(var o in t)if(t.hasOwnProperty(o)&&t[o]){var s=t[o];s="Array"===S.util.type(s)?s:[s];for(var l=0;l<s.length;++l){var u=s[l],c=u.inside,g=!!u.lookbehind,d=0,p=u.alias;u=u.pattern||u;for(var f=0;f<r.length;f++){var h=r[f];if(r.length>e.length)break e;if(!(h instanceof a)){u.lastIndex=0;var m=u.exec(h);if(m){g&&(d=m[1].length);var b=m.index-1+d,y=b+(m=m[0].slice(d)).length,v=h.slice(0,b+1),k=h.slice(y+1),w=[f,1];v&&w.push(v);var x=new a(o,c?S.tokenize(m,c):m,p);w.push(x),k&&w.push(k),Array.prototype.splice.apply(r,w)}}}}}return r},hooks:{all:{},add:function(e,t){var n=S.hooks.all;n[e]=n[e]||[],n[e].push(t)},run:function(e,t){var n=S.hooks.all[e];if(n&&n.length)for(var a=0,r=void 0;r=n[a++];)r(t)}}},s=S.Token=function(e,t,n){this.type=e,this.content=t,this.alias=n};if(s.stringify=function(t,n,e){if("string"==typeof t)return t;if("Array"===S.util.type(t))return t.map(function(e){return s.stringify(e,n,t)}).join("");var a={type:t.type,content:s.stringify(t.content,n,e),tag:"span",classes:["token",t.type],attributes:{},language:n,parent:e};if("comment"===a.type&&(a.attributes.spellcheck="true"),t.alias){var r="Array"===S.util.type(t.alias)?t.alias:[t.alias];Array.prototype.push.apply(a.classes,r)}S.hooks.run("wrap",a);var i="";for(var o in a.attributes)i+=(i?" ":"")+o+'="'+(a.attributes[o]||"")+'"';return"<"+a.tag+' class="'+a.classes.join(" ")+'" '+i+">"+a.content+"</"+a.tag+">"},!g.document)return g.addEventListener&&g.addEventListener("message",function(e){var t=JSON.parse(e.data),n=t.language,a=t.code,r=t.immediateClose;g.postMessage(S.highlight(a,S.languages[n],n)),r&&g.close()},!1),g.Prism}();void 0!==n&&(n.Prism=i),i.languages.markup={comment:/<!--[\w\W]*?-->/,prolog:/<\?[\w\W]+?\?>/,doctype:/<!DOCTYPE[\w\W]+?>/,cdata:/<!\[CDATA\[[\w\W]*?]]>/i,tag:{pattern:/<\/?[^\s>\/=.]+(?:\s+[^\s>\/=]+(?:=(?:("|')(?:\\\1|\\?(?!\1)[\w\W])*\1|[^\s'">=]+))?)*\s*\/?>/i,inside:{tag:{pattern:/^<\/?[^\s>\/]+/i,inside:{punctuation:/^<\/?/,namespace:/^[^\s>\/:]+:/}},"attr-value":{pattern:/=(?:('|")[\w\W]*?(\1)|[^\s>]+)/i,inside:{punctuation:/[=>"']/}},punctuation:/\/?>/,"attr-name":{pattern:/[^\s>\/]+/,inside:{namespace:/^[^\s>\/:]+:/}}}},entity:/&#?[\da-z]{1,8};/i},i.hooks.add("wrap",function(e){"entity"===e.type&&(e.attributes.title=e.content.replace(/&amp;/,"&"))}),i.languages.xml=i.languages.markup,i.languages.html=i.languages.markup,i.languages.mathml=i.languages.markup,i.languages.svg=i.languages.markup,i.languages.css={comment:/\/\*[\w\W]*?\*\//,atrule:{pattern:/@[\w-]+?.*?(;|(?=\s*\{))/i,inside:{rule:/@[\w-]+/}},url:/url\((?:(["'])(\\(?:\r\n|[\w\W])|(?!\1)[^\\\r\n])*\1|.*?)\)/i,selector:/[^\{\}\s][^\{\};]*?(?=\s*\{)/,string:/("|')(\\(?:\r\n|[\w\W])|(?!\1)[^\\\r\n])*\1/,property:/(\b|\B)[\w-]+(?=\s*:)/i,important:/\B!important\b/i,"function":/[-a-z0-9]+(?=\()/i,punctuation:/[(){};:]/},i.languages.css.atrule.inside.rest=i.util.clone(i.languages.css),i.languages.markup&&(i.languages.insertBefore("markup","tag",{style:{pattern:/<style[\w\W]*?>[\w\W]*?<\/style>/i,inside:{tag:{pattern:/<style[\w\W]*?>|<\/style>/i,inside:i.languages.markup.tag.inside},rest:i.languages.css},alias:"language-css"}}),i.languages.insertBefore("inside","attr-value",{"style-attr":{pattern:/\s*style=("|').*?\1/i,inside:{"attr-name":{pattern:/^\s*style/i,inside:i.languages.markup.tag.inside},punctuation:/^\s*=\s*['"]|['"]\s*$/,"attr-value":{pattern:/.+/i,inside:i.languages.css}},alias:"language-css"}},i.languages.markup.tag)),i.languages.clike={comment:[{pattern:/(^|[^\\])\/\*[\w\W]*?\*\//,lookbehind:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0}],string:/(["'])(\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,"class-name":{pattern:/((?:\b(?:class|interface|extends|implements|trait|instanceof|new)\s+)|(?:catch\s+\())[a-z0-9_\.\\]+/i,lookbehind:!0,inside:{punctuation:/(\.|\\)/}},keyword:/\b(if|else|while|do|for|return|in|instanceof|function|new|try|throw|catch|finally|null|break|continue)\b/,"boolean":/\b(true|false)\b/,"function":/[a-z0-9_]+(?=\()/i,number:/\b-?(?:0x[\da-f]+|\d*\.?\d+(?:e[+-]?\d+)?)\b/i,operator:/--?|\+\+?|!=?=?|<=?|>=?|==?=?|&&?|\|\|?|\?|\*|\/|~|\^|%/,punctuation:/[{}[\];(),.:]/},i.languages.javascript=i.languages.extend("clike",{keyword:/\b(as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|false|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|true|try|typeof|var|void|while|with|yield)\b/,number:/\b-?(0x[\dA-Fa-f]+|0b[01]+|0o[0-7]+|\d*\.?\d+([Ee][+-]?\d+)?|NaN|Infinity)\b/,"function":/[_$a-zA-Z\xA0-\uFFFF][_$a-zA-Z0-9\xA0-\uFFFF]*(?=\()/i}),i.languages.insertBefore("javascript","keyword",{regex:{pattern:/(^|[^/])\/(?!\/)(\[.+?]|\\.|[^/\\\r\n])+\/[gimyu]{0,5}(?=\s*($|[\r\n,.;})]))/,lookbehind:!0}}),i.languages.insertBefore("javascript","class-name",{"template-string":{pattern:/`(?:\\`|\\?[^`])*`/,inside:{interpolation:{pattern:/\$\{[^}]+\}/,inside:{"interpolation-punctuation":{pattern:/^\$\{|\}$/,alias:"punctuation"},rest:i.languages.javascript}},string:/[\s\S]+/}}}),i.languages.markup&&i.languages.insertBefore("markup","tag",{script:{pattern:/<script[\w\W]*?>[\w\W]*?<\/script>/i,inside:{tag:{pattern:/<script[\w\W]*?>|<\/script>/i,inside:i.languages.markup.tag.inside},rest:i.languages.javascript},alias:"language-javascript"}}),i.languages.js=i.languages.javascript,i.languages.c=i.languages.extend("clike",{keyword:/\b(asm|typeof|inline|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|int|long|register|return|short|signed|sizeof|static|struct|switch|typedef|union|unsigned|void|volatile|while)\b/,operator:/\-[>-]?|\+\+?|!=?|<<?=?|>>?=?|==?|&&?|\|?\||[~^%?*\/]/,number:/\b-?(?:0x[\da-f]+|\d*\.?\d+(?:e[+-]?\d+)?)[ful]*\b/i}),i.languages.insertBefore("c","string",{macro:{pattern:/(^\s*)#\s*[a-z]+([^\r\n\\]|\\.|\\(?:\r\n?|\n))*/im,lookbehind:!0,alias:"property",inside:{string:{pattern:/(#\s*include\s*)(<.+?>|("|')(\\?.)+?\3)/,lookbehind:!0}}}}),delete i.languages.c["class-name"],delete i.languages.c["boolean"],i.languages.csharp=i.languages.extend("clike",{keyword:/\b(abstract|as|async|await|base|bool|break|byte|case|catch|char|checked|class|const|continue|decimal|default|delegate|do|double|else|enum|event|explicit|extern|false|finally|fixed|float|for|foreach|goto|if|implicit|in|int|interface|internal|is|lock|long|namespace|new|null|object|operator|out|override|params|private|protected|public|readonly|ref|return|sbyte|sealed|short|sizeof|stackalloc|static|string|struct|switch|this|throw|true|try|typeof|uint|ulong|unchecked|unsafe|ushort|using|virtual|void|volatile|while|add|alias|ascending|async|await|descending|dynamic|from|get|global|group|into|join|let|orderby|partial|remove|select|set|value|var|where|yield)\b/,string:[/@("|')(\1\1|\\\1|\\?(?!\1)[\s\S])*\1/,/("|')(\\?.)*?\1/],number:/\b-?(0x[\da-f]+|\d*\.?\d+)\b/i}),i.languages.insertBefore("csharp","keyword",{preprocessor:{pattern:/(^\s*)#.*/m,lookbehind:!0}}),i.languages.cpp=i.languages.extend("c",{keyword:/\b(alignas|alignof|asm|auto|bool|break|case|catch|char|char16_t|char32_t|class|compl|const|constexpr|const_cast|continue|decltype|default|delete|do|double|dynamic_cast|else|enum|explicit|export|extern|float|for|friend|goto|if|inline|int|long|mutable|namespace|new|noexcept|nullptr|operator|private|protected|public|register|reinterpret_cast|return|short|signed|sizeof|static|static_assert|static_cast|struct|switch|template|this|thread_local|throw|try|typedef|typeid|typename|union|unsigned|using|virtual|void|volatile|wchar_t|while)\b/,"boolean":/\b(true|false)\b/,operator:/[-+]{1,2}|!=?|<{1,2}=?|>{1,2}=?|\->|:{1,2}|={1,2}|\^|~|%|&{1,2}|\|?\||\?|\*|\/|\b(and|and_eq|bitand|bitor|not|not_eq|or|or_eq|xor|xor_eq)\b/}),i.languages.insertBefore("cpp","keyword",{"class-name":{pattern:/(class\s+)[a-z0-9_]+/i,lookbehind:!0}}),i.languages.java=i.languages.extend("clike",{keyword:/\b(abstract|continue|for|new|switch|assert|default|goto|package|synchronized|boolean|do|if|private|this|break|double|implements|protected|throw|byte|else|import|public|throws|case|enum|instanceof|return|transient|catch|extends|int|short|try|char|final|interface|static|void|class|finally|long|strictfp|volatile|const|float|native|super|while)\b/,number:/\b0b[01]+\b|\b0x[\da-f]*\.?[\da-fp\-]+\b|\b\d*\.?\d+(?:e[+-]?\d+)?[df]?\b/i,operator:{pattern:/(^|[^.])(?:\+[+=]?|-[-=]?|!=?|<<?=?|>>?>?=?|==?|&[&=]?|\|[|=]?|\*=?|\/=?|%=?|\^=?|[?:~])/m,lookbehind:!0}}),i.languages.php=i.languages.extend("clike",{keyword:/\b(and|or|xor|array|as|break|case|cfunction|class|const|continue|declare|default|die|do|else|elseif|enddeclare|endfor|endforeach|endif|endswitch|endwhile|extends|for|foreach|function|include|include_once|global|if|new|return|static|switch|use|require|require_once|var|while|abstract|interface|public|implements|private|protected|parent|throw|null|echo|print|trait|namespace|final|yield|goto|instanceof|finally|try|catch)\b/i,constant:/\b[A-Z0-9_]{2,}\b/,comment:{pattern:/(^|[^\\])(?:\/\*[\w\W]*?\*\/|\/\/.*)/,lookbehind:!0}}),i.languages.insertBefore("php","class-name",{"shell-comment":{pattern:/(^|[^\\])#.*/,lookbehind:!0,alias:"comment"}}),i.languages.insertBefore("php","keyword",{delimiter:/\?>|<\?(?:php)?/i,variable:/\$\w+\b/i,"package":{pattern:/(\\|namespace\s+|use\s+)[\w\\]+/,lookbehind:!0,inside:{punctuation:/\\/}}}),i.languages.insertBefore("php","operator",{property:{pattern:/(->)[\w]+/,lookbehind:!0}}),i.languages.markup&&(i.hooks.add("before-highlight",function(t){"php"===t.language&&(t.tokenStack=[],t.backupCode=t.code,t.code=t.code.replace(/(?:<\?php|<\?)[\w\W]*?(?:\?>)/gi,function(e){return t.tokenStack.push(e),"{{{PHP"+t.tokenStack.length+"}}}"}))}),i.hooks.add("before-insert",function(e){"php"===e.language&&(e.code=e.backupCode,delete e.backupCode)}),i.hooks.add("after-highlight",function(e){if("php"===e.language){for(var t=0,n=void 0;n=e.tokenStack[t];t++)e.highlightedCode=e.highlightedCode.replace("{{{PHP"+(t+1)+"}}}",i.highlight(n,e.grammar,"php").replace(/\$/g,"$$$$"));e.element.innerHTML=e.highlightedCode}}),i.hooks.add("wrap",function(e){"php"===e.language&&"markup"===e.type&&(e.content=e.content.replace(/(\{\{\{PHP[0-9]+\}\}\})/g,'<span class="token php">$1</span>'))}),i.languages.insertBefore("php","comment",{markup:{pattern:/<[^?]\/?(.*?)>/,inside:i.languages.markup},php:/\{\{\{PHP[0-9]+\}\}\}/})),i.languages.python={comment:{pattern:/(^|[^\\])#.*/,lookbehind:!0},string:/"""[\s\S]+?"""|'''[\s\S]+?'''|("|')(?:\\?.)*?\1/,"function":{pattern:/((?:^|\s)def[ \t]+)[a-zA-Z_][a-zA-Z0-9_]*(?=\()/g,lookbehind:!0},"class-name":{pattern:/(\bclass\s+)[a-z0-9_]+/i,lookbehind:!0},keyword:/\b(?:as|assert|async|await|break|class|continue|def|del|elif|else|except|exec|finally|for|from|global|if|import|in|is|lambda|pass|print|raise|return|try|while|with|yield)\b/,"boolean":/\b(?:True|False)\b/,number:/\b-?(?:0[bo])?(?:(?:\d|0x[\da-f])[\da-f]*\.?\d*|\.\d+)(?:e[+-]?\d+)?j?\b/i,operator:/[-+%=]=?|!=|\*\*?=?|\/\/?=?|<[<=>]?|>[=>]?|[&|^~]|\b(?:or|and|not)\b/,punctuation:/[{}[\];(),.:]/},function(e){e.languages.ruby=e.languages.extend("clike",{comment:/#(?!\{[^\r\n]*?\}).*/,keyword:/\b(alias|and|BEGIN|begin|break|case|class|def|define_method|defined|do|each|else|elsif|END|end|ensure|false|for|if|in|module|new|next|nil|not|or|raise|redo|require|rescue|retry|return|self|super|then|throw|true|undef|unless|until|when|while|yield)\b/});var t={pattern:/#\{[^}]+\}/,inside:{delimiter:{pattern:/^#\{|\}$/,alias:"tag"},rest:e.util.clone(e.languages.ruby)}};e.languages.insertBefore("ruby","keyword",{regex:[{pattern:/%r([^a-zA-Z0-9\s\{\(\[<])(?:[^\\]|\\[\s\S])*?\1[gim]{0,3}/,inside:{interpolation:t}},{pattern:/%r\((?:[^()\\]|\\[\s\S])*\)[gim]{0,3}/,inside:{interpolation:t}},{pattern:/%r\{(?:[^#{}\\]|#(?:\{[^}]+\})?|\\[\s\S])*\}[gim]{0,3}/,inside:{interpolation:t}},{pattern:/%r\[(?:[^\[\]\\]|\\[\s\S])*\][gim]{0,3}/,inside:{interpolation:t}},{pattern:/%r<(?:[^<>\\]|\\[\s\S])*>[gim]{0,3}/,inside:{interpolation:t}},{pattern:/(^|[^/])\/(?!\/)(\[.+?]|\\.|[^/\r\n])+\/[gim]{0,3}(?=\s*($|[\r\n,.;})]))/,lookbehind:!0}],variable:/[@$]+[a-zA-Z_][a-zA-Z_0-9]*(?:[?!]|\b)/,symbol:/:[a-zA-Z_][a-zA-Z_0-9]*(?:[?!]|\b)/}),e.languages.insertBefore("ruby","number",{builtin:/\b(Array|Bignum|Binding|Class|Continuation|Dir|Exception|FalseClass|File|Stat|File|Fixnum|Fload|Hash|Integer|IO|MatchData|Method|Module|NilClass|Numeric|Object|Proc|Range|Regexp|String|Struct|TMS|Symbol|ThreadGroup|Thread|Time|TrueClass)\b/,constant:/\b[A-Z][a-zA-Z_0-9]*(?:[?!]|\b)/}),e.languages.ruby.string=[{pattern:/%[qQiIwWxs]?([^a-zA-Z0-9\s\{\(\[<])(?:[^\\]|\\[\s\S])*?\1/,inside:{interpolation:t}},{pattern:/%[qQiIwWxs]?\((?:[^()\\]|\\[\s\S])*\)/,inside:{interpolation:t}},{pattern:/%[qQiIwWxs]?\{(?:[^#{}\\]|#(?:\{[^}]+\})?|\\[\s\S])*\}/,inside:{interpolation:t}},{pattern:/%[qQiIwWxs]?\[(?:[^\[\]\\]|\\[\s\S])*\]/,inside:{interpolation:t}},{pattern:/%[qQiIwWxs]?<(?:[^<>\\]|\\[\s\S])*>/,inside:{interpolation:t}},{pattern:/("|')(#\{[^}]+\}|\\(?:\r?\n|\r)|\\?.)*?\1/,inside:{interpolation:t}}]}(i);function a(){}function o(e){return function(){return e}}function s(){return f}var l,u={isCodeSample:function B(e){return e&&"PRE"===e.nodeName&&-1!==e.className.indexOf("language-")},trimArg:function M(n){return function(e,t){return n(t)}}},d=o(!1),p=o(!0),f=(l={fold:function(e,t){return e()},is:d,isSome:d,isNone:p,getOr:b,getOrThunk:m,getOrDie:function(e){throw new Error(e||"error: getOrDie called on none.")},getOrNull:o(null),getOrUndefined:o(undefined),or:b,orThunk:m,map:s,each:a,bind:s,exists:d,forall:p,filter:s,equals:h,equals_:h,toArray:function(){return[]},toString:o("none()")},Object.freeze&&Object.freeze(l),l);function h(e){return e.isNone()}function m(e){return e()}function b(e){return e}function y(e){var t=e.selection?e.selection.getNode():null;return u.isCodeSample(t)?w.some(t):w.none()}var v,k=function(n){function e(){return r}function t(e){return e(n)}var a=o(n),r={fold:function(e,t){return t(n)},is:function(e){return n===e},isSome:p,isNone:d,getOr:a,getOrThunk:a,getOrDie:a,getOrNull:a,getOrUndefined:a,or:e,orThunk:e,map:function(e){return k(e(n))},each:function(e){e(n)},bind:t,exists:t,forall:t,filter:function(e){return e(n)?r:f},toArray:function(){return[n]},toString:function(){return"some("+n+")"},equals:function(e){return e.is(n)},equals_:function(e,t){return e.fold(d,function(e){return t(n,e)})}};return r},w={some:k,none:s,from:function(e){return null===e||e===undefined?f:k(e)}},x=y,S=function(t,n,a){t.undoManager.transact(function(){var e=y(t);return a=r.DOM.encode(a),e.fold(function(){t.insertContent('<pre id="__new" class="language-'+n+'">'+a+"</pre>"),t.selection.select(t.$("#__new").removeAttr("id")[0])},function(e){t.dom.setAttrib(e,"class","language-"+n),e.innerHTML=a,i.highlightElement(e),t.selection.select(e)})})},A=function(e){return y(e).fold(function(){return""},function(e){return e.textContent})},C=function(e){return e.settings.codesample_languages},_=function(e){var t=C(e);return t||[{text:"HTML/XML",value:"markup"},{text:"JavaScript",value:"javascript"},{text:"CSS",value:"css"},{text:"PHP",value:"php"},{text:"Ruby",value:"ruby"},{text:"Python",value:"python"},{text:"Java",value:"java"},{text:"C",value:"c"},{text:"C#",value:"csharp"},{text:"C++",value:"cpp"}]},N=function(e,n){return x(e).fold(function(){return n},function(e){var t=e.className.match(/language-(\w+)/);return t?t[1]:n})},O=(v="function",function(e){return function(e){if(null===e)return"null";var t=typeof e;return"object"==t&&(Array.prototype.isPrototypeOf(e)||e.constructor&&"Array"===e.constructor.name)?"array":"object"==t&&(String.prototype.isPrototypeOf(e)||e.constructor&&"String"===e.constructor.name)?"string":t}(e)===v}),z=Array.prototype.slice,P=(O(Array.from)&&Array.from,function(n){var e=_(n),t=function(e){return 0===e.length?w.none():w.some(e[0])}(e).fold(function(){return""},function(e){return e.value}),a=N(n,t),r=A(n);n.windowManager.open({title:"Insert/Edit Code Sample",size:"large",body:{type:"panel",items:[{type:"selectbox",name:"language",label:"Language",items:e},{type:"textarea",name:"code",label:"Code view"}]},buttons:[{type:"cancel",name:"cancel",text:"Cancel"},{type:"submit",name:"save",text:"Save",primary:!0}],initialData:{language:a,code:r},onSubmit:function(e){var t=e.getData();S(n,t.language,t.code),e.close()}})}),W=function(t){t.addCommand("codesample",function(){var e=t.selection.getNode();t.selection.isCollapsed()||u.isCodeSample(e)?P(t):t.formatter.toggle("code")})},j=function(n){var r=n.$;n.on("PreProcess",function(e){r("pre[contenteditable=false]",e.node).filter(u.trimArg(u.isCodeSample)).each(function(e,t){var n=r(t),a=t.textContent;n.attr("class",r.trim(n.attr("class"))),n.removeAttr("contentEditable"),n.empty().append(r("<code></code>").each(function(){this.textContent=a}))})}),n.on("SetContent",function(){var e=r("pre").filter(u.trimArg(u.isCodeSample)).filter(function(e,t){return"false"!==t.contentEditable});e.length&&n.undoManager.transact(function(){e.each(function(e,t){r(t).find("br").each(function(e,t){t.parentNode.replaceChild(n.getDoc().createTextNode("\n"),t)}),t.contentEditable="false",t.innerHTML=n.dom.encode(t.textContent),i.highlightElement(t),t.className=r.trim(t.className)})})})},T=function(n){n.ui.registry.addToggleButton("codesample",{icon:"code-sample",tooltip:"Insert/edit code sample",onAction:function(){return P(n)},onSetup:function(e){function t(){e.setActive(function(e){var t=e.selection.getStart();return e.dom.is(t,"pre.language-markup")}(n))}return n.on("NodeChange",t),function(){return n.off("NodeChange",t)}}}),n.ui.registry.addMenuItem("codesample",{text:"Code sample...",icon:"code-sample",onAction:function(){return P(n)}})};!function F(){e.add("codesample",function(t){j(t),T(t),W(t),t.on("dblclick",function(e){u.isCodeSample(e.target)&&P(t)})})}()}(window);
\ No newline at end of file
diff --git a/website/js/vendor/tinymce/js/tinymce/plugins/colorpicker/plugin.min.js b/website/js/vendor/tinymce/js/tinymce/plugins/colorpicker/plugin.min.js
new file mode 100644 (file)
index 0000000..51e2463
--- /dev/null
@@ -0,0 +1,9 @@
+/**
+ * Copyright (c) Tiny Technologies, Inc. All rights reserved.
+ * Licensed under the LGPL or a commercial license.
+ * For LGPL see License.txt in the project root for license information.
+ * For commercial licenses see https://www.tiny.cloud/
+ *
+ * Version: 5.1.5 (2019-12-19)
+ */
+!function(o){"use strict";var i=tinymce.util.Tools.resolve("tinymce.PluginManager");!function n(){i.add("colorpicker",function(){o.console.warn("Color picker plugin is now built in to the core editor, please remove it from your editor configuration")})}()}(window);
\ No newline at end of file
diff --git a/website/js/vendor/tinymce/js/tinymce/plugins/contextmenu/plugin.min.js b/website/js/vendor/tinymce/js/tinymce/plugins/contextmenu/plugin.min.js
new file mode 100644 (file)
index 0000000..b9a9522
--- /dev/null
@@ -0,0 +1,9 @@
+/**
+ * Copyright (c) Tiny Technologies, Inc. All rights reserved.
+ * Licensed under the LGPL or a commercial license.
+ * For LGPL see License.txt in the project root for license information.
+ * For commercial licenses see https://www.tiny.cloud/
+ *
+ * Version: 5.1.5 (2019-12-19)
+ */
+!function(n){"use strict";var o=tinymce.util.Tools.resolve("tinymce.PluginManager");!function e(){o.add("contextmenu",function(){n.console.warn("Context menu plugin is now built in to the core editor, please remove it from your editor configuration")})}()}(window);
\ No newline at end of file
diff --git a/website/js/vendor/tinymce/js/tinymce/plugins/directionality/plugin.min.js b/website/js/vendor/tinymce/js/tinymce/plugins/directionality/plugin.min.js
new file mode 100644 (file)
index 0000000..0105327
--- /dev/null
@@ -0,0 +1,9 @@
+/**
+ * Copyright (c) Tiny Technologies, Inc. All rights reserved.
+ * Licensed under the LGPL or a commercial license.
+ * For LGPL see License.txt in the project root for license information.
+ * For commercial licenses see https://www.tiny.cloud/
+ *
+ * Version: 5.1.5 (2019-12-19)
+ */
+!function(i){"use strict";function n(){}function u(n){return function(){return n}}function t(){return a}var e,r=tinymce.util.Tools.resolve("tinymce.PluginManager"),c=tinymce.util.Tools.resolve("tinymce.util.Tools"),o=function(n,t){var e,r=n.dom,o=n.selection.getSelectedBlocks();o.length&&(e=r.getAttrib(o[0],"dir"),c.each(o,function(n){r.getParent(n.parentNode,'*[dir="'+t+'"]',r.getRoot())||r.setAttrib(n,"dir",e!==t?t:null)}),n.nodeChanged())},d=function(n){n.addCommand("mceDirectionLTR",function(){o(n,"ltr")}),n.addCommand("mceDirectionRTL",function(){o(n,"rtl")})},f=u(!1),l=u(!0),a=(e={fold:function(n,t){return n()},is:f,isSome:f,isNone:l,getOr:s,getOrThunk:N,getOrDie:function(n){throw new Error(n||"error: getOrDie called on none.")},getOrNull:u(null),getOrUndefined:u(undefined),or:s,orThunk:N,map:t,each:n,bind:t,exists:f,forall:l,filter:t,equals:m,equals_:m,toArray:function(){return[]},toString:u("none()")},Object.freeze&&Object.freeze(e),e);function m(n){return n.isNone()}function N(n){return n()}function s(n){return n}function g(n,t){var e=n.dom(),r=i.window.getComputedStyle(e).getPropertyValue(t),o=""!==r||function(n){var t=A(n)?n.dom().parentNode:n.dom();return t!==undefined&&null!==t&&t.ownerDocument.body.contains(t)}(n)?r:w(e,t);return null===o?undefined:o}function T(t,r){return function(e){function n(n){var t=p.fromDom(n.element);e.setActive(function(n){return"rtl"===g(n,"direction")?"rtl":"ltr"}(t)===r)}return t.on("NodeChange",n),function(){return t.off("NodeChange",n)}}}var E,O,y=function(e){function n(){return o}function t(n){return n(e)}var r=u(e),o={fold:function(n,t){return t(e)},is:function(n){return e===n},isSome:l,isNone:f,getOr:r,getOrThunk:r,getOrDie:r,getOrNull:r,getOrUndefined:r,or:n,orThunk:n,map:function(n){return y(n(e))},each:function(n){n(e)},bind:t,exists:t,forall:t,filter:function(n){return n(e)?o:a},toArray:function(){return[e]},toString:function(){return"some("+e+")"},equals:function(n){return n.is(e)},equals_:function(n,t){return n.fold(f,function(n){return t(e,n)})}};return o},D=function(n){return null===n||n===undefined?a:y(n)},h=function(n){if(null===n||n===undefined)throw new Error("Node cannot be null or undefined");return{dom:u(n)}},p={fromHtml:function(n,t){var e=(t||i.document).createElement("div");if(e.innerHTML=n,!e.hasChildNodes()||1<e.childNodes.length)throw i.console.error("HTML does not have a single root node",n),new Error("HTML must have a single root node");return h(e.childNodes[0])},fromTag:function(n,t){var e=(t||i.document).createElement(n);return h(e)},fromText:function(n,t){var e=(t||i.document).createTextNode(n);return h(e)},fromDom:h,fromPoint:function(n,t,e){var r=n.dom();return D(r.elementFromPoint(t,e)).map(h)}},_=(E="function",function(n){return function(n){if(null===n)return"null";var t=typeof n;return"object"==t&&(Array.prototype.isPrototypeOf(n)||n.constructor&&"Array"===n.constructor.name)?"array":"object"==t&&(String.prototype.isPrototypeOf(n)||n.constructor&&"String"===n.constructor.name)?"string":t}(n)===E}),v=Array.prototype.slice,C=(_(Array.from)&&Array.from,i.Node.ATTRIBUTE_NODE,i.Node.CDATA_SECTION_NODE,i.Node.COMMENT_NODE,i.Node.DOCUMENT_NODE,i.Node.DOCUMENT_TYPE_NODE,i.Node.DOCUMENT_FRAGMENT_NODE,i.Node.ELEMENT_NODE,i.Node.TEXT_NODE),A=(i.Node.PROCESSING_INSTRUCTION_NODE,i.Node.ENTITY_REFERENCE_NODE,i.Node.ENTITY_NODE,i.Node.NOTATION_NODE,"undefined"!=typeof i.window?i.window:Function("return this;")(),O=C,function(n){return function(n){return n.dom().nodeType}(n)===O}),w=function(n,t){return function(n){return n.style!==undefined&&_(n.style.getPropertyValue)}(n)?n.style.getPropertyValue(t):""},S=function(n){n.ui.registry.addToggleButton("ltr",{tooltip:"Left to right",icon:"ltr",onAction:function(){return n.execCommand("mceDirectionLTR")},onSetup:T(n,"ltr")}),n.ui.registry.addToggleButton("rtl",{tooltip:"Right to left",icon:"rtl",onAction:function(){return n.execCommand("mceDirectionRTL")},onSetup:T(n,"rtl")})};!function R(){r.add("directionality",function(n){d(n),S(n)})}()}(window);
\ No newline at end of file
diff --git a/website/js/vendor/tinymce/js/tinymce/plugins/emoticons/js/emojis.js b/website/js/vendor/tinymce/js/tinymce/plugins/emoticons/js/emojis.js
new file mode 100644 (file)
index 0000000..5f8c249
--- /dev/null
@@ -0,0 +1,9015 @@
+// NOTE: Source: npm package: emojilib, file:emojis.json
+window.tinymce.Resource.add("tinymce.plugins.emoticons", {
+  grinning: {
+    keywords: [ "face", "smile", "happy", "joy", ":D", "grin" ],
+    "char": "\ud83d\ude00",
+    fitzpatrick_scale: false,
+    category: "people"
+  },
+  grimacing: {
+    keywords: [ "face", "grimace", "teeth" ],
+    "char": "\ud83d\ude2c",
+    fitzpatrick_scale: false,
+    category: "people"
+  },
+  grin: {
+    keywords: [ "face", "happy", "smile", "joy", "kawaii" ],
+    "char": "\ud83d\ude01",
+    fitzpatrick_scale: false,
+    category: "people"
+  },
+  joy: {
+    keywords: [ "face", "cry", "tears", "weep", "happy", "happytears", "haha" ],
+    "char": "\ud83d\ude02",
+    fitzpatrick_scale: false,
+    category: "people"
+  },
+  rofl: {
+    keywords: [ "face", "rolling", "floor", "laughing", "lol", "haha" ],
+    "char": "\ud83e\udd23",
+    fitzpatrick_scale: false,
+    category: "people"
+  },
+  smiley: {
+    keywords: [ "face", "happy", "joy", "haha", ":D", ":)", "smile", "funny" ],
+    "char": "\ud83d\ude03",
+    fitzpatrick_scale: false,
+    category: "people"
+  },
+  smile: {
+    keywords: [ "face", "happy", "joy", "funny", "haha", "laugh", "like", ":D", ":)" ],
+    "char": "\ud83d\ude04",
+    fitzpatrick_scale: false,
+    category: "people"
+  },
+  sweat_smile: {
+    keywords: [ "face", "hot", "happy", "laugh", "sweat", "smile", "relief" ],
+    "char": "\ud83d\ude05",
+    fitzpatrick_scale: false,
+    category: "people"
+  },
+  laughing: {
+    keywords: [ "happy", "joy", "lol", "satisfied", "haha", "face", "glad", "XD", "laugh" ],
+    "char": "\ud83d\ude06",
+    fitzpatrick_scale: false,
+    category: "people"
+  },
+  innocent: {
+    keywords: [ "face", "angel", "heaven", "halo" ],
+    "char": "\ud83d\ude07",
+    fitzpatrick_scale: false,
+    category: "people"
+  },
+  wink: {
+    keywords: [ "face", "happy", "mischievous", "secret", ";)", "smile", "eye" ],
+    "char": "\ud83d\ude09",
+    fitzpatrick_scale: false,
+    category: "people"
+  },
+  blush: {
+    keywords: [ "face", "smile", "happy", "flushed", "crush", "embarrassed", "shy", "joy" ],
+    "char": "\ud83d\ude0a",
+    fitzpatrick_scale: false,
+    category: "people"
+  },
+  slightly_smiling_face: {
+    keywords: [ "face", "smile" ],
+    "char": "\ud83d\ude42",
+    fitzpatrick_scale: false,
+    category: "people"
+  },
+  upside_down_face: {
+    keywords: [ "face", "flipped", "silly", "smile" ],
+    "char": "\ud83d\ude43",
+    fitzpatrick_scale: false,
+    category: "people"
+  },
+  relaxed: {
+    keywords: [ "face", "blush", "massage", "happiness" ],
+    "char": "\u263a\ufe0f",
+    fitzpatrick_scale: false,
+    category: "people"
+  },
+  yum: {
+    keywords: [ "happy", "joy", "tongue", "smile", "face", "silly", "yummy", "nom", "delicious", "savouring" ],
+    "char": "\ud83d\ude0b",
+    fitzpatrick_scale: false,
+    category: "people"
+  },
+  relieved: {
+    keywords: [ "face", "relaxed", "phew", "massage", "happiness" ],
+    "char": "\ud83d\ude0c",
+    fitzpatrick_scale: false,
+    category: "people"
+  },
+  heart_eyes: {
+    keywords: [ "face", "love", "like", "affection", "valentines", "infatuation", "crush", "heart" ],
+    "char": "\ud83d\ude0d",
+    fitzpatrick_scale: false,
+    category: "people"
+  },
+  kissing_heart: {
+    keywords: [ "face", "love", "like", "affection", "valentines", "infatuation", "kiss" ],
+    "char": "\ud83d\ude18",
+    fitzpatrick_scale: false,
+    category: "people"
+  },
+  kissing: {
+    keywords: [ "love", "like", "face", "3", "valentines", "infatuation", "kiss" ],
+    "char": "\ud83d\ude17",
+    fitzpatrick_scale: false,
+    category: "people"
+  },
+  kissing_smiling_eyes: {
+    keywords: [ "face", "affection", "valentines", "infatuation", "kiss" ],
+    "char": "\ud83d\ude19",
+    fitzpatrick_scale: false,
+    category: "people"
+  },
+  kissing_closed_eyes: {
+    keywords: [ "face", "love", "like", "affection", "valentines", "infatuation", "kiss" ],
+    "char": "\ud83d\ude1a",
+    fitzpatrick_scale: false,
+    category: "people"
+  },
+  stuck_out_tongue_winking_eye: {
+    keywords: [ "face", "prank", "childish", "playful", "mischievous", "smile", "wink", "tongue" ],
+    "char": "\ud83d\ude1c",
+    fitzpatrick_scale: false,
+    category: "people"
+  },
+  zany: {
+    keywords: [ "face", "goofy", "crazy" ],
+    "char": "\ud83e\udd2a",
+    fitzpatrick_scale: false,
+    category: "people"
+  },
+  raised_eyebrow: {
+    keywords: [ "face", "distrust", "scepticism", "disapproval", "disbelief", "surprise" ],
+    "char": "\ud83e\udd28",
+    fitzpatrick_scale: false,
+    category: "people"
+  },
+  monocle: {
+    keywords: [ "face", "stuffy", "wealthy" ],
+    "char": "\ud83e\uddd0",
+    fitzpatrick_scale: false,
+    category: "people"
+  },
+  stuck_out_tongue_closed_eyes: {
+    keywords: [ "face", "prank", "playful", "mischievous", "smile", "tongue" ],
+    "char": "\ud83d\ude1d",
+    fitzpatrick_scale: false,
+    category: "people"
+  },
+  stuck_out_tongue: {
+    keywords: [ "face", "prank", "childish", "playful", "mischievous", "smile", "tongue" ],
+    "char": "\ud83d\ude1b",
+    fitzpatrick_scale: false,
+    category: "people"
+  },
+  money_mouth_face: {
+    keywords: [ "face", "rich", "dollar", "money" ],
+    "char": "\ud83e\udd11",
+    fitzpatrick_scale: false,
+    category: "people"
+  },
+  nerd_face: {
+    keywords: [ "face", "nerdy", "geek", "dork" ],
+    "char": "\ud83e\udd13",
+    fitzpatrick_scale: false,
+    category: "people"
+  },
+  sunglasses: {
+    keywords: [ "face", "cool", "smile", "summer", "beach", "sunglass" ],
+    "char": "\ud83d\ude0e",
+    fitzpatrick_scale: false,
+    category: "people"
+  },
+  star_struck: {
+    keywords: [ "face", "smile", "starry", "eyes", "grinning" ],
+    "char": "\ud83e\udd29",
+    fitzpatrick_scale: false,
+    category: "people"
+  },
+  clown_face: {
+    keywords: [ "face" ],
+    "char": "\ud83e\udd21",
+    fitzpatrick_scale: false,
+    category: "people"
+  },
+  cowboy_hat_face: {
+    keywords: [ "face", "cowgirl", "hat" ],
+    "char": "\ud83e\udd20",
+    fitzpatrick_scale: false,
+    category: "people"
+  },
+  hugs: {
+    keywords: [ "face", "smile", "hug" ],
+    "char": "\ud83e\udd17",
+    fitzpatrick_scale: false,
+    category: "people"
+  },
+  smirk: {
+    keywords: [ "face", "smile", "mean", "prank", "smug", "sarcasm" ],
+    "char": "\ud83d\ude0f",
+    fitzpatrick_scale: false,
+    category: "people"
+  },
+  no_mouth: {
+    keywords: [ "face", "hellokitty" ],
+    "char": "\ud83d\ude36",
+    fitzpatrick_scale: false,
+    category: "people"
+  },
+  neutral_face: {
+    keywords: [ "indifference", "meh", ":|", "neutral" ],
+    "char": "\ud83d\ude10",
+    fitzpatrick_scale: false,
+    category: "people"
+  },
+  expressionless: {
+    keywords: [ "face", "indifferent", "-_-", "meh", "deadpan" ],
+    "char": "\ud83d\ude11",
+    fitzpatrick_scale: false,
+    category: "people"
+  },
+  unamused: {
+    keywords: [ "indifference", "bored", "straight face", "serious", "sarcasm", "unimpressed", "skeptical", "dubious", "side_eye" ],
+    "char": "\ud83d\ude12",
+    fitzpatrick_scale: false,
+    category: "people"
+  },
+  roll_eyes: {
+    keywords: [ "face", "eyeroll", "frustrated" ],
+    "char": "\ud83d\ude44",
+    fitzpatrick_scale: false,
+    category: "people"
+  },
+  thinking: {
+    keywords: [ "face", "hmmm", "think", "consider" ],
+    "char": "\ud83e\udd14",
+    fitzpatrick_scale: false,
+    category: "people"
+  },
+  lying_face: {
+    keywords: [ "face", "lie", "pinocchio" ],
+    "char": "\ud83e\udd25",
+    fitzpatrick_scale: false,
+    category: "people"
+  },
+  hand_over_mouth: {
+    keywords: [ "face", "whoops", "shock", "surprise" ],
+    "char": "\ud83e\udd2d",
+    fitzpatrick_scale: false,
+    category: "people"
+  },
+  shushing: {
+    keywords: [ "face", "quiet", "shhh" ],
+    "char": "\ud83e\udd2b",
+    fitzpatrick_scale: false,
+    category: "people"
+  },
+  symbols_over_mouth: {
+    keywords: [ "face", "swearing", "cursing", "cussing", "profanity", "expletive" ],
+    "char": "\ud83e\udd2c",
+    fitzpatrick_scale: false,
+    category: "people"
+  },
+  exploding_head: {
+    keywords: [ "face", "shocked", "mind", "blown" ],
+    "char": "\ud83e\udd2f",
+    fitzpatrick_scale: false,
+    category: "people"
+  },
+  flushed: {
+    keywords: [ "face", "blush", "shy", "flattered" ],
+    "char": "\ud83d\ude33",
+    fitzpatrick_scale: false,
+    category: "people"
+  },
+  disappointed: {
+    keywords: [ "face", "sad", "upset", "depressed", ":(" ],
+    "char": "\ud83d\ude1e",
+    fitzpatrick_scale: false,
+    category: "people"
+  },
+  worried: {
+    keywords: [ "face", "concern", "nervous", ":(" ],
+    "char": "\ud83d\ude1f",
+    fitzpatrick_scale: false,
+    category: "people"
+  },
+  angry: {
+    keywords: [ "mad", "face", "annoyed", "frustrated" ],
+    "char": "\ud83d\ude20",
+    fitzpatrick_scale: false,
+    category: "people"
+  },
+  rage: {
+    keywords: [ "angry", "mad", "hate", "despise" ],
+    "char": "\ud83d\ude21",
+    fitzpatrick_scale: false,
+    category: "people"
+  },
+  pensive: {
+    keywords: [ "face", "sad", "depressed", "upset" ],
+    "char": "\ud83d\ude14",
+    fitzpatrick_scale: false,
+    category: "people"
+  },
+  confused: {
+    keywords: [ "face", "indifference", "huh", "weird", "hmmm", ":/" ],
+    "char": "\ud83d\ude15",
+    fitzpatrick_scale: false,
+    category: "people"
+  },
+  slightly_frowning_face: {
+    keywords: [ "face", "frowning", "disappointed", "sad", "upset" ],
+    "char": "\ud83d\ude41",
+    fitzpatrick_scale: false,
+    category: "people"
+  },
+  frowning_face: {
+    keywords: [ "face", "sad", "upset", "frown" ],
+    "char": "\u2639",
+    fitzpatrick_scale: false,
+    category: "people"
+  },
+  persevere: {
+    keywords: [ "face", "sick", "no", "upset", "oops" ],
+    "char": "\ud83d\ude23",
+    fitzpatrick_scale: false,
+    category: "people"
+  },
+  confounded: {
+    keywords: [ "face", "confused", "sick", "unwell", "oops", ":S" ],
+    "char": "\ud83d\ude16",
+    fitzpatrick_scale: false,
+    category: "people"
+  },
+  tired_face: {
+    keywords: [ "sick", "whine", "upset", "frustrated" ],
+    "char": "\ud83d\ude2b",
+    fitzpatrick_scale: false,
+    category: "people"
+  },
+  weary: {
+    keywords: [ "face", "tired", "sleepy", "sad", "frustrated", "upset" ],
+    "char": "\ud83d\ude29",
+    fitzpatrick_scale: false,
+    category: "people"
+  },
+  triumph: {
+    keywords: [ "face", "gas", "phew", "proud", "pride" ],
+    "char": "\ud83d\ude24",
+    fitzpatrick_scale: false,
+    category: "people"
+  },
+  open_mouth: {
+    keywords: [ "face", "surprise", "impressed", "wow", "whoa", ":O" ],
+    "char": "\ud83d\ude2e",
+    fitzpatrick_scale: false,
+    category: "people"
+  },
+  scream: {
+    keywords: [ "face", "munch", "scared", "omg" ],
+    "char": "\ud83d\ude31",
+    fitzpatrick_scale: false,
+    category: "people"
+  },
+  fearful: {
+    keywords: [ "face", "scared", "terrified", "nervous", "oops", "huh" ],
+    "char": "\ud83d\ude28",
+    fitzpatrick_scale: false,
+    category: "people"
+  },
+  cold_sweat: {
+    keywords: [ "face", "nervous", "sweat" ],
+    "char": "\ud83d\ude30",
+    fitzpatrick_scale: false,
+    category: "people"
+  },
+  hushed: {
+    keywords: [ "face", "woo", "shh" ],
+    "char": "\ud83d\ude2f",
+    fitzpatrick_scale: false,
+    category: "people"
+  },
+  frowning: {
+    keywords: [ "face", "aw", "what" ],
+    "char": "\ud83d\ude26",
+    fitzpatrick_scale: false,
+    category: "people"
+  },
+  anguished: {
+    keywords: [ "face", "stunned", "nervous" ],
+    "char": "\ud83d\ude27",
+    fitzpatrick_scale: false,
+    category: "people"
+  },
+  cry: {
+    keywords: [ "face", "tears", "sad", "depressed", "upset", ":'(" ],
+    "char": "\ud83d\ude22",
+    fitzpatrick_scale: false,
+    category: "people"
+  },
+  disappointed_relieved: {
+    keywords: [ "face", "phew", "sweat", "nervous" ],
+    "char": "\ud83d\ude25",
+    fitzpatrick_scale: false,
+    category: "people"
+  },
+  drooling_face: {
+    keywords: [ "face" ],
+    "char": "\ud83e\udd24",
+    fitzpatrick_scale: false,
+    category: "people"
+  },
+  sleepy: {
+    keywords: [ "face", "tired", "rest", "nap" ],
+    "char": "\ud83d\ude2a",
+    fitzpatrick_scale: false,
+    category: "people"
+  },
+  sweat: {
+    keywords: [ "face", "hot", "sad", "tired", "exercise" ],
+    "char": "\ud83d\ude13",
+    fitzpatrick_scale: false,
+    category: "people"
+  },
+  sob: {
+    keywords: [ "face", "cry", "tears", "sad", "upset", "depressed" ],
+    "char": "\ud83d\ude2d",
+    fitzpatrick_scale: false,
+    category: "people"
+  },
+  dizzy_face: {
+    keywords: [ "spent", "unconscious", "xox", "dizzy" ],
+    "char": "\ud83d\ude35",
+    fitzpatrick_scale: false,
+    category: "people"
+  },
+  astonished: {
+    keywords: [ "face", "xox", "surprised", "poisoned" ],
+    "char": "\ud83d\ude32",
+    fitzpatrick_scale: false,
+    category: "people"
+  },
+  zipper_mouth_face: {
+    keywords: [ "face", "sealed", "zipper", "secret" ],
+    "char": "\ud83e\udd10",
+    fitzpatrick_scale: false,
+    category: "people"
+  },
+  nauseated_face: {
+    keywords: [ "face", "vomit", "gross", "green", "sick", "throw up", "ill" ],
+    "char": "\ud83e\udd22",
+    fitzpatrick_scale: false,
+    category: "people"
+  },
+  sneezing_face: {
+    keywords: [ "face", "gesundheit", "sneeze", "sick", "allergy" ],
+    "char": "\ud83e\udd27",
+    fitzpatrick_scale: false,
+    category: "people"
+  },
+  vomiting: {
+    keywords: [ "face", "sick" ],
+    "char": "\ud83e\udd2e",
+    fitzpatrick_scale: false,
+    category: "people"
+  },
+  mask: {
+    keywords: [ "face", "sick", "ill", "disease" ],
+    "char": "\ud83d\ude37",
+    fitzpatrick_scale: false,
+    category: "people"
+  },
+  face_with_thermometer: {
+    keywords: [ "sick", "temperature", "thermometer", "cold", "fever" ],
+    "char": "\ud83e\udd12",
+    fitzpatrick_scale: false,
+    category: "people"
+  },
+  face_with_head_bandage: {
+    keywords: [ "injured", "clumsy", "bandage", "hurt" ],
+    "char": "\ud83e\udd15",
+    fitzpatrick_scale: false,
+    category: "people"
+  },
+  sleeping: {
+    keywords: [ "face", "tired", "sleepy", "night", "zzz" ],
+    "char": "\ud83d\ude34",
+    fitzpatrick_scale: false,
+    category: "people"
+  },
+  zzz: {
+    keywords: [ "sleepy", "tired", "dream" ],
+    "char": "\ud83d\udca4",
+    fitzpatrick_scale: false,
+    category: "people"
+  },
+  poop: {
+    keywords: [ "hankey", "shitface", "fail", "turd", "shit" ],
+    "char": "\ud83d\udca9",
+    fitzpatrick_scale: false,
+    category: "people"
+  },
+  smiling_imp: {
+    keywords: [ "devil", "horns" ],
+    "char": "\ud83d\ude08",
+    fitzpatrick_scale: false,
+    category: "people"
+  },
+  imp: {
+    keywords: [ "devil", "angry", "horns" ],
+    "char": "\ud83d\udc7f",
+    fitzpatrick_scale: false,
+    category: "people"
+  },
+  japanese_ogre: {
+    keywords: [ "monster", "red", "mask", "halloween", "scary", "creepy", "devil", "demon", "japanese", "ogre" ],
+    "char": "\ud83d\udc79",
+    fitzpatrick_scale: false,
+    category: "people"
+  },
+  japanese_goblin: {
+    keywords: [ "red", "evil", "mask", "monster", "scary", "creepy", "japanese", "goblin" ],
+    "char": "\ud83d\udc7a",
+    fitzpatrick_scale: false,
+    category: "people"
+  },
+  skull: {
+    keywords: [ "dead", "skeleton", "creepy", "death" ],
+    "char": "\ud83d\udc80",
+    fitzpatrick_scale: false,
+    category: "people"
+  },
+  ghost: {
+    keywords: [ "halloween", "spooky", "scary" ],
+    "char": "\ud83d\udc7b",
+    fitzpatrick_scale: false,
+    category: "people"
+  },
+  alien: {
+    keywords: [ "UFO", "paul", "weird", "outer_space" ],
+    "char": "\ud83d\udc7d",
+    fitzpatrick_scale: false,
+    category: "people"
+  },
+  robot: {
+    keywords: [ "computer", "machine", "bot" ],
+    "char": "\ud83e\udd16",
+    fitzpatrick_scale: false,
+    category: "people"
+  },
+  smiley_cat: {
+    keywords: [ "animal", "cats", "happy", "smile" ],
+    "char": "\ud83d\ude3a",
+    fitzpatrick_scale: false,
+    category: "people"
+  },
+  smile_cat: {
+    keywords: [ "animal", "cats", "smile" ],
+    "char": "\ud83d\ude38",
+    fitzpatrick_scale: false,
+    category: "people"
+  },
+  joy_cat: {
+    keywords: [ "animal", "cats", "haha", "happy", "tears" ],
+    "char": "\ud83d\ude39",
+    fitzpatrick_scale: false,
+    category: "people"
+  },
+  heart_eyes_cat: {
+    keywords: [ "animal", "love", "like", "affection", "cats", "valentines", "heart" ],
+    "char": "\ud83d\ude3b",
+    fitzpatrick_scale: false,
+    category: "people"
+  },
+  smirk_cat: {
+    keywords: [ "animal", "cats", "smirk" ],
+    "char": "\ud83d\ude3c",
+    fitzpatrick_scale: false,
+    category: "people"
+  },
+  kissing_cat: {
+    keywords: [ "animal", "cats", "kiss" ],
+    "char": "\ud83d\ude3d",
+    fitzpatrick_scale: false,
+    category: "people"
+  },
+  scream_cat: {
+    keywords: [ "animal", "cats", "munch", "scared", "scream" ],
+    "char": "\ud83d\ude40",
+    fitzpatrick_scale: false,
+    category: "people"
+  },
+  crying_cat_face: {
+    keywords: [ "animal", "tears", "weep", "sad", "cats", "upset", "cry" ],
+    "char": "\ud83d\ude3f",
+    fitzpatrick_scale: false,
+    category: "people"
+  },
+  pouting_cat: {
+    keywords: [ "animal", "cats" ],
+    "char": "\ud83d\ude3e",
+    fitzpatrick_scale: false,
+    category: "people"
+  },
+  palms_up: {
+    keywords: [ "hands", "gesture", "cupped", "prayer" ],
+    "char": "\ud83e\udd32",
+    fitzpatrick_scale: true,
+    category: "people"
+  },
+  raised_hands: {
+    keywords: [ "gesture", "hooray", "yea", "celebration", "hands" ],
+    "char": "\ud83d\ude4c",
+    fitzpatrick_scale: true,
+    category: "people"
+  },
+  clap: {
+    keywords: [ "hands", "praise", "applause", "congrats", "yay" ],
+    "char": "\ud83d\udc4f",
+    fitzpatrick_scale: true,
+    category: "people"
+  },
+  wave: {
+    keywords: [ "hands", "gesture", "goodbye", "solong", "farewell", "hello", "hi", "palm" ],
+    "char": "\ud83d\udc4b",
+    fitzpatrick_scale: true,
+    category: "people"
+  },
+  call_me_hand: {
+    keywords: [ "hands", "gesture" ],
+    "char": "\ud83e\udd19",
+    fitzpatrick_scale: true,
+    category: "people"
+  },
+  "+1": {
+    keywords: [ "thumbsup", "yes", "awesome", "good", "agree", "accept", "cool", "hand", "like" ],
+    "char": "\ud83d\udc4d",
+    fitzpatrick_scale: true,
+    category: "people"
+  },
+  "-1": {
+    keywords: [ "thumbsdown", "no", "dislike", "hand" ],
+    "char": "\ud83d\udc4e",
+    fitzpatrick_scale: true,
+    category: "people"
+  },
+  facepunch: {
+    keywords: [ "angry", "violence", "fist", "hit", "attack", "hand" ],
+    "char": "\ud83d\udc4a",
+    fitzpatrick_scale: true,
+    category: "people"
+  },
+  fist: {
+    keywords: [ "fingers", "hand", "grasp" ],
+    "char": "\u270a",
+    fitzpatrick_scale: true,
+    category: "people"
+  },
+  fist_left: {
+    keywords: [ "hand", "fistbump" ],
+    "char": "\ud83e\udd1b",
+    fitzpatrick_scale: true,
+    category: "people"
+  },
+  fist_right: {
+    keywords: [ "hand", "fistbump" ],
+    "char": "\ud83e\udd1c",
+    fitzpatrick_scale: true,
+    category: "people"
+  },
+  v: {
+    keywords: [ "fingers", "ohyeah", "hand", "peace", "victory", "two" ],
+    "char": "\u270c",
+    fitzpatrick_scale: true,
+    category: "people"
+  },
+  ok_hand: {
+    keywords: [ "fingers", "limbs", "perfect", "ok", "okay" ],
+    "char": "\ud83d\udc4c",
+    fitzpatrick_scale: true,
+    category: "people"
+  },
+  raised_hand: {
+    keywords: [ "fingers", "stop", "highfive", "palm", "ban" ],
+    "char": "\u270b",
+    fitzpatrick_scale: true,
+    category: "people"
+  },
+  raised_back_of_hand: {
+    keywords: [ "fingers", "raised", "backhand" ],
+    "char": "\ud83e\udd1a",
+    fitzpatrick_scale: true,
+    category: "people"
+  },
+  open_hands: {
+    keywords: [ "fingers", "butterfly", "hands", "open" ],
+    "char": "\ud83d\udc50",
+    fitzpatrick_scale: true,
+    category: "people"
+  },
+  muscle: {
+    keywords: [ "arm", "flex", "hand", "summer", "strong", "biceps" ],
+    "char": "\ud83d\udcaa",
+    fitzpatrick_scale: true,
+    category: "people"
+  },
+  pray: {
+    keywords: [ "please", "hope", "wish", "namaste", "highfive" ],
+    "char": "\ud83d\ude4f",
+    fitzpatrick_scale: true,
+    category: "people"
+  },
+  handshake: {
+    keywords: [ "agreement", "shake" ],
+    "char": "\ud83e\udd1d",
+    fitzpatrick_scale: false,
+    category: "people"
+  },
+  point_up: {
+    keywords: [ "hand", "fingers", "direction", "up" ],
+    "char": "\u261d",
+    fitzpatrick_scale: true,
+    category: "people"
+  },
+  point_up_2: {
+    keywords: [ "fingers", "hand", "direction", "up" ],
+    "char": "\ud83d\udc46",
+    fitzpatrick_scale: true,
+    category: "people"
+  },
+  point_down: {
+    keywords: [ "fingers", "hand", "direction", "down" ],
+    "char": "\ud83d\udc47",
+    fitzpatrick_scale: true,
+    category: "people"
+  },
+  point_left: {
+    keywords: [ "direction", "fingers", "hand", "left" ],
+    "char": "\ud83d\udc48",
+    fitzpatrick_scale: true,
+    category: "people"
+  },
+  point_right: {
+    keywords: [ "fingers", "hand", "direction", "right" ],
+    "char": "\ud83d\udc49",
+    fitzpatrick_scale: true,
+    category: "people"
+  },
+  fu: {
+    keywords: [ "hand", "fingers", "rude", "middle", "flipping" ],
+    "char": "\ud83d\udd95",
+    fitzpatrick_scale: true,
+    category: "people"
+  },
+  raised_hand_with_fingers_splayed: {
+    keywords: [ "hand", "fingers", "palm" ],
+    "char": "\ud83d\udd90",
+    fitzpatrick_scale: true,
+    category: "people"
+  },
+  love_you: {
+    keywords: [ "hand", "fingers", "gesture" ],
+    "char": "\ud83e\udd1f",
+    fitzpatrick_scale: true,
+    category: "people"
+  },
+  metal: {
+    keywords: [ "hand", "fingers", "evil_eye", "sign_of_horns", "rock_on" ],
+    "char": "\ud83e\udd18",
+    fitzpatrick_scale: true,
+    category: "people"
+  },
+  crossed_fingers: {
+    keywords: [ "good", "lucky" ],
+    "char": "\ud83e\udd1e",
+    fitzpatrick_scale: true,
+    category: "people"
+  },
+  vulcan_salute: {
+    keywords: [ "hand", "fingers", "spock", "star trek" ],
+    "char": "\ud83d\udd96",
+    fitzpatrick_scale: true,
+    category: "people"
+  },
+  writing_hand: {
+    keywords: [ "lower_left_ballpoint_pen", "stationery", "write", "compose" ],
+    "char": "\u270d",
+    fitzpatrick_scale: true,
+    category: "people"
+  },
+  selfie: {
+    keywords: [ "camera", "phone" ],
+    "char": "\ud83e\udd33",
+    fitzpatrick_scale: true,
+    category: "people"
+  },
+  nail_care: {
+    keywords: [ "beauty", "manicure", "finger", "fashion", "nail" ],
+    "char": "\ud83d\udc85",
+    fitzpatrick_scale: true,
+    category: "people"
+  },
+  lips: {
+    keywords: [ "mouth", "kiss" ],
+    "char": "\ud83d\udc44",
+    fitzpatrick_scale: false,
+    category: "people"
+  },
+  tongue: {
+    keywords: [ "mouth", "playful" ],
+    "char": "\ud83d\udc45",
+    fitzpatrick_scale: false,
+    category: "people"
+  },
+  ear: {
+    keywords: [ "face", "hear", "sound", "listen" ],
+    "char": "\ud83d\udc42",
+    fitzpatrick_scale: true,
+    category: "people"
+  },
+  nose: {
+    keywords: [ "smell", "sniff" ],
+    "char": "\ud83d\udc43",
+    fitzpatrick_scale: true,
+    category: "people"
+  },
+  eye: {
+    keywords: [ "face", "look", "see", "watch", "stare" ],
+    "char": "\ud83d\udc41",
+    fitzpatrick_scale: false,
+    category: "people"
+  },
+  eyes: {
+    keywords: [ "look", "watch", "stalk", "peek", "see" ],
+    "char": "\ud83d\udc40",
+    fitzpatrick_scale: false,
+    category: "people"
+  },
+  brain: {
+    keywords: [ "smart", "intelligent" ],
+    "char": "\ud83e\udde0",
+    fitzpatrick_scale: false,
+    category: "people"
+  },
+  bust_in_silhouette: {
+    keywords: [ "user", "person", "human" ],
+    "char": "\ud83d\udc64",
+    fitzpatrick_scale: false,
+    category: "people"
+  },
+  busts_in_silhouette: {
+    keywords: [ "user", "person", "human", "group", "team" ],
+    "char": "\ud83d\udc65",
+    fitzpatrick_scale: false,
+    category: "people"
+  },
+  speaking_head: {
+    keywords: [ "user", "person", "human", "sing", "say", "talk" ],
+    "char": "\ud83d\udde3",
+    fitzpatrick_scale: false,
+    category: "people"
+  },
+  baby: {
+    keywords: [ "child", "boy", "girl", "toddler" ],
+    "char": "\ud83d\udc76",
+    fitzpatrick_scale: true,
+    category: "people"
+  },
+  child: {
+    keywords: [ "gender-neutral", "young" ],
+    "char": "\ud83e\uddd2",
+    fitzpatrick_scale: true,
+    category: "people"
+  },
+  boy: {
+    keywords: [ "man", "male", "guy", "teenager" ],
+    "char": "\ud83d\udc66",
+    fitzpatrick_scale: true,
+    category: "people"
+  },
+  girl: {
+    keywords: [ "female", "woman", "teenager" ],
+    "char": "\ud83d\udc67",
+    fitzpatrick_scale: true,
+    category: "people"
+  },
+  adult: {
+    keywords: [ "gender-neutral", "person" ],
+    "char": "\ud83e\uddd1",
+    fitzpatrick_scale: true,
+    category: "people"
+  },
+  man: {
+    keywords: [ "mustache", "father", "dad", "guy", "classy", "sir", "moustache" ],
+    "char": "\ud83d\udc68",
+    fitzpatrick_scale: true,
+    category: "people"
+  },
+  woman: {
+    keywords: [ "female", "girls", "lady" ],
+    "char": "\ud83d\udc69",
+    fitzpatrick_scale: true,
+    category: "people"
+  },
+  blonde_woman: {
+    keywords: [ "woman", "female", "girl", "blonde", "person" ],
+    "char": "\ud83d\udc71\u200d\u2640\ufe0f",
+    fitzpatrick_scale: true,
+    category: "people"
+  },
+  blonde_man: {
+    keywords: [ "man", "male", "boy", "blonde", "guy", "person" ],
+    "char": "\ud83d\udc71",
+    fitzpatrick_scale: true,
+    category: "people"
+  },
+  bearded_person: {
+    keywords: [ "person", "bewhiskered" ],
+    "char": "\ud83e\uddd4",
+    fitzpatrick_scale: true,
+    category: "people"
+  },
+  older_adult: {
+    keywords: [ "human", "elder", "senior", "gender-neutral" ],
+    "char": "\ud83e\uddd3",
+    fitzpatrick_scale: true,
+    category: "people"
+  },
+  older_man: {
+    keywords: [ "human", "male", "men", "old", "elder", "senior" ],
+    "char": "\ud83d\udc74",
+    fitzpatrick_scale: true,
+    category: "people"
+  },
+  older_woman: {
+    keywords: [ "human", "female", "women", "lady", "old", "elder", "senior" ],
+    "char": "\ud83d\udc75",
+    fitzpatrick_scale: true,
+    category: "people"
+  },
+  man_with_gua_pi_mao: {
+    keywords: [ "male", "boy", "chinese" ],
+    "char": "\ud83d\udc72",
+    fitzpatrick_scale: true,
+    category: "people"
+  },
+  woman_with_headscarf: {
+    keywords: [ "female", "hijab", "mantilla", "tichel" ],
+    "char": "\ud83e\uddd5",
+    fitzpatrick_scale: true,
+    category: "people"
+  },
+  woman_with_turban: {
+    keywords: [ "female", "indian", "hinduism", "arabs", "woman" ],
+    "char": "\ud83d\udc73\u200d\u2640\ufe0f",
+    fitzpatrick_scale: true,
+    category: "people"
+  },
+  man_with_turban: {
+    keywords: [ "male", "indian", "hinduism", "arabs" ],
+    "char": "\ud83d\udc73",
+    fitzpatrick_scale: true,
+    category: "people"
+  },
+  policewoman: {
+    keywords: [ "woman", "police", "law", "legal", "enforcement", "arrest", "911", "female" ],
+    "char": "\ud83d\udc6e\u200d\u2640\ufe0f",
+    fitzpatrick_scale: true,
+    category: "people"
+  },
+  policeman: {
+    keywords: [ "man", "police", "law", "legal", "enforcement", "arrest", "911" ],
+    "char": "\ud83d\udc6e",
+    fitzpatrick_scale: true,
+    category: "people"
+  },
+  construction_worker_woman: {
+    keywords: [ "female", "human", "wip", "build", "construction", "worker", "labor", "woman" ],
+    "char": "\ud83d\udc77\u200d\u2640\ufe0f",
+    fitzpatrick_scale: true,
+    category: "people"
+  },
+  construction_worker_man: {
+    keywords: [ "male", "human", "wip", "guy", "build", "construction", "worker", "labor" ],
+    "char": "\ud83d\udc77",
+    fitzpatrick_scale: true,
+    category: "people"
+  },
+  guardswoman: {
+    keywords: [ "uk", "gb", "british", "female", "royal", "woman" ],
+    "char": "\ud83d\udc82\u200d\u2640\ufe0f",
+    fitzpatrick_scale: true,
+    category: "people"
+  },
+  guardsman: {
+    keywords: [ "uk", "gb", "british", "male", "guy", "royal" ],
+    "char": "\ud83d\udc82",
+    fitzpatrick_scale: true,
+    category: "people"
+  },
+  female_detective: {
+    keywords: [ "human", "spy", "detective", "female", "woman" ],
+    "char": "\ud83d\udd75\ufe0f\u200d\u2640\ufe0f",
+    fitzpatrick_scale: true,
+    category: "people"
+  },
+  male_detective: {
+    keywords: [ "human", "spy", "detective" ],
+    "char": "\ud83d\udd75",
+    fitzpatrick_scale: true,
+    category: "people"
+  },
+  woman_health_worker: {
+    keywords: [ "doctor", "nurse", "therapist", "healthcare", "woman", "human" ],
+    "char": "\ud83d\udc69\u200d\u2695\ufe0f",
+    fitzpatrick_scale: true,
+    category: "people"
+  },
+  man_health_worker: {
+    keywords: [ "doctor", "nurse", "therapist", "healthcare", "man", "human" ],
+    "char": "\ud83d\udc68\u200d\u2695\ufe0f",
+    fitzpatrick_scale: true,
+    category: "people"
+  },
+  woman_farmer: {
+    keywords: [ "rancher", "gardener", "woman", "human" ],
+    "char": "\ud83d\udc69\u200d\ud83c\udf3e",
+    fitzpatrick_scale: true,
+    category: "people"
+  },
+  man_farmer: {
+    keywords: [ "rancher", "gardener", "man", "human" ],
+    "char": "\ud83d\udc68\u200d\ud83c\udf3e",
+    fitzpatrick_scale: true,
+    category: "people"
+  },
+  woman_cook: {
+    keywords: [ "chef", "woman", "human" ],
+    "char": "\ud83d\udc69\u200d\ud83c\udf73",
+    fitzpatrick_scale: true,
+    category: "people"
+  },
+  man_cook: {
+    keywords: [ "chef", "man", "human" ],
+    "char": "\ud83d\udc68\u200d\ud83c\udf73",
+    fitzpatrick_scale: true,
+    category: "people"
+  },
+  woman_student: {
+    keywords: [ "graduate", "woman", "human" ],
+    "char": "\ud83d\udc69\u200d\ud83c\udf93",
+    fitzpatrick_scale: true,
+    category: "people"
+  },
+  man_student: {
+    keywords: [ "graduate", "man", "human" ],
+    "char": "\ud83d\udc68\u200d\ud83c\udf93",
+    fitzpatrick_scale: true,
+    category: "people"
+  },
+  woman_singer: {
+    keywords: [ "rockstar", "entertainer", "woman", "human" ],
+    "char": "\ud83d\udc69\u200d\ud83c\udfa4",
+    fitzpatrick_scale: true,
+    category: "people"
+  },
+  man_singer: {
+    keywords: [ "rockstar", "entertainer", "man", "human" ],
+    "char": "\ud83d\udc68\u200d\ud83c\udfa4",
+    fitzpatrick_scale: true,
+    category: "people"
+  },
+  woman_teacher: {
+    keywords: [ "instructor", "professor", "woman", "human" ],
+    "char": "\ud83d\udc69\u200d\ud83c\udfeb",
+    fitzpatrick_scale: true,
+    category: "people"
+  },
+  man_teacher: {
+    keywords: [ "instructor", "professor", "man", "human" ],
+    "char": "\ud83d\udc68\u200d\ud83c\udfeb",
+    fitzpatrick_scale: true,
+    category: "people"
+  },
+  woman_factory_worker: {
+    keywords: [ "assembly", "industrial", "woman", "human" ],
+    "char": "\ud83d\udc69\u200d\ud83c\udfed",
+    fitzpatrick_scale: true,
+    category: "people"
+  },
+  man_factory_worker: {
+    keywords: [ "assembly", "industrial", "man", "human" ],
+    "char": "\ud83d\udc68\u200d\ud83c\udfed",
+    fitzpatrick_scale: true,
+    category: "people"
+  },
+  woman_technologist: {
+    keywords: [ "coder", "developer", "engineer", "programmer", "software", "woman", "human", "laptop", "computer" ],
+    "char": "\ud83d\udc69\u200d\ud83d\udcbb",
+    fitzpatrick_scale: true,
+    category: "people"
+  },
+  man_technologist: {
+    keywords: [ "coder", "developer", "engineer", "programmer", "software", "man", "human", "laptop", "computer" ],
+    "char": "\ud83d\udc68\u200d\ud83d\udcbb",
+    fitzpatrick_scale: true,
+    category: "people"
+  },
+  woman_office_worker: {
+    keywords: [ "business", "manager", "woman", "human" ],
+    "char": "\ud83d\udc69\u200d\ud83d\udcbc",
+    fitzpatrick_scale: true,
+    category: "people"
+  },
+  man_office_worker: {
+    keywords: [ "business", "manager", "man", "human" ],
+    "char": "\ud83d\udc68\u200d\ud83d\udcbc",
+    fitzpatrick_scale: true,
+    category: "people"
+  },
+  woman_mechanic: {
+    keywords: [ "plumber", "woman", "human", "wrench" ],
+    "char": "\ud83d\udc69\u200d\ud83d\udd27",
+    fitzpatrick_scale: true,
+    category: "people"
+  },
+  man_mechanic: {
+    keywords: [ "plumber", "man", "human", "wrench" ],
+    "char": "\ud83d\udc68\u200d\ud83d\udd27",
+    fitzpatrick_scale: true,
+    category: "people"
+  },
+  woman_scientist: {
+    keywords: [ "biologist", "chemist", "engineer", "physicist", "woman", "human" ],
+    "char": "\ud83d\udc69\u200d\ud83d\udd2c",
+    fitzpatrick_scale: true,
+    category: "people"
+  },
+  man_scientist: {
+    keywords: [ "biologist", "chemist", "engineer", "physicist", "man", "human" ],
+    "char": "\ud83d\udc68\u200d\ud83d\udd2c",
+    fitzpatrick_scale: true,
+    category: "people"
+  },
+  woman_artist: {
+    keywords: [ "painter", "woman", "human" ],
+    "char": "\ud83d\udc69\u200d\ud83c\udfa8",
+    fitzpatrick_scale: true,
+    category: "people"
+  },
+  man_artist: {
+    keywords: [ "painter", "man", "human" ],
+    "char": "\ud83d\udc68\u200d\ud83c\udfa8",
+    fitzpatrick_scale: true,
+    category: "people"
+  },
+  woman_firefighter: {
+    keywords: [ "fireman", "woman", "human" ],
+    "char": "\ud83d\udc69\u200d\ud83d\ude92",
+    fitzpatrick_scale: true,
+    category: "people"
+  },
+  man_firefighter: {
+    keywords: [ "fireman", "man", "human" ],
+    "char": "\ud83d\udc68\u200d\ud83d\ude92",
+    fitzpatrick_scale: true,
+    category: "people"
+  },
+  woman_pilot: {
+    keywords: [ "aviator", "plane", "woman", "human" ],
+    "char": "\ud83d\udc69\u200d\u2708\ufe0f",
+    fitzpatrick_scale: true,
+    category: "people"
+  },
+  man_pilot: {
+    keywords: [ "aviator", "plane", "man", "human" ],
+    "char": "\ud83d\udc68\u200d\u2708\ufe0f",
+    fitzpatrick_scale: true,
+    category: "people"
+  },
+  woman_astronaut: {
+    keywords: [ "space", "rocket", "woman", "human" ],
+    "char": "\ud83d\udc69\u200d\ud83d\ude80",
+    fitzpatrick_scale: true,
+    category: "people"
+  },
+  man_astronaut: {
+    keywords: [ "space", "rocket", "man", "human" ],
+    "char": "\ud83d\udc68\u200d\ud83d\ude80",
+    fitzpatrick_scale: true,
+    category: "people"
+  },
+  woman_judge: {
+    keywords: [ "justice", "court", "woman", "human" ],
+    "char": "\ud83d\udc69\u200d\u2696\ufe0f",
+    fitzpatrick_scale: true,
+    category: "people"
+  },
+  man_judge: {
+    keywords: [ "justice", "court", "man", "human" ],
+    "char": "\ud83d\udc68\u200d\u2696\ufe0f",
+    fitzpatrick_scale: true,
+    category: "people"
+  },
+  mrs_claus: {
+    keywords: [ "woman", "female", "xmas", "mother christmas" ],
+    "char": "\ud83e\udd36",
+    fitzpatrick_scale: true,
+    category: "people"
+  },
+  santa: {
+    keywords: [ "festival", "man", "male", "xmas", "father christmas" ],
+    "char": "\ud83c\udf85",
+    fitzpatrick_scale: true,
+    category: "people"
+  },
+  sorceress: {
+    keywords: [ "woman", "female", "mage", "witch" ],
+    "char": "\ud83e\uddd9\u200d\u2640\ufe0f",
+    fitzpatrick_scale: true,
+    category: "people"
+  },
+  wizard: {
+    keywords: [ "man", "male", "mage", "sorcerer" ],
+    "char": "\ud83e\uddd9\u200d\u2642\ufe0f",
+    fitzpatrick_scale: true,
+    category: "people"
+  },
+  woman_elf: {
+    keywords: [ "woman", "female" ],
+    "char": "\ud83e\udddd\u200d\u2640\ufe0f",
+    fitzpatrick_scale: true,
+    category: "people"
+  },
+  man_elf: {
+    keywords: [ "man", "male" ],
+    "char": "\ud83e\udddd\u200d\u2642\ufe0f",
+    fitzpatrick_scale: true,
+    category: "people"
+  },
+  woman_vampire: {
+    keywords: [ "woman", "female" ],
+    "char": "\ud83e\udddb\u200d\u2640\ufe0f",
+    fitzpatrick_scale: true,
+    category: "people"
+  },
+  man_vampire: {
+    keywords: [ "man", "male", "dracula" ],
+    "char": "\ud83e\udddb\u200d\u2642\ufe0f",
+    fitzpatrick_scale: true,
+    category: "people"
+  },
+  woman_zombie: {
+    keywords: [ "woman", "female", "undead", "walking dead" ],
+    "char": "\ud83e\udddf\u200d\u2640\ufe0f",
+    fitzpatrick_scale: false,
+    category: "people"
+  },
+  man_zombie: {
+    keywords: [ "man", "male", "dracula", "undead", "walking dead" ],
+    "char": "\ud83e\udddf\u200d\u2642\ufe0f",
+    fitzpatrick_scale: false,
+    category: "people"
+  },
+  woman_genie: {
+    keywords: [ "woman", "female" ],
+    "char": "\ud83e\uddde\u200d\u2640\ufe0f",
+    fitzpatrick_scale: false,
+    category: "people"
+  },
+  man_genie: {
+    keywords: [ "man", "male" ],
+    "char": "\ud83e\uddde\u200d\u2642\ufe0f",
+    fitzpatrick_scale: false,
+    category: "people"
+  },
+  mermaid: {
+    keywords: [ "woman", "female", "merwoman", "ariel" ],
+    "char": "\ud83e\udddc\u200d\u2640\ufe0f",
+    fitzpatrick_scale: true,
+    category: "people"
+  },
+  merman: {
+    keywords: [ "man", "male", "triton" ],
+    "char": "\ud83e\udddc\u200d\u2642\ufe0f",
+    fitzpatrick_scale: true,
+    category: "people"
+  },
+  woman_fairy: {
+    keywords: [ "woman", "female" ],
+    "char": "\ud83e\uddda\u200d\u2640\ufe0f",
+    fitzpatrick_scale: true,
+    category: "people"
+  },
+  man_fairy: {
+    keywords: [ "man", "male" ],
+    "char": "\ud83e\uddda\u200d\u2642\ufe0f",
+    fitzpatrick_scale: true,
+    category: "people"
+  },
+  angel: {
+    keywords: [ "heaven", "wings", "halo" ],
+    "char": "\ud83d\udc7c",
+    fitzpatrick_scale: true,
+    category: "people"
+  },
+  pregnant_woman: {
+    keywords: [ "baby" ],
+    "char": "\ud83e\udd30",
+    fitzpatrick_scale: true,
+    category: "people"
+  },
+  breastfeeding: {
+    keywords: [ "nursing", "baby" ],
+    "char": "\ud83e\udd31",
+    fitzpatrick_scale: true,
+    category: "people"
+  },
+  princess: {
+    keywords: [ "girl", "woman", "female", "blond", "crown", "royal", "queen" ],
+    "char": "\ud83d\udc78",
+    fitzpatrick_scale: true,
+    category: "people"
+  },
+  prince: {
+    keywords: [ "boy", "man", "male", "crown", "royal", "king" ],
+    "char": "\ud83e\udd34",
+    fitzpatrick_scale: true,
+    category: "people"
+  },
+  bride_with_veil: {
+    keywords: [ "couple", "marriage", "wedding", "woman", "bride" ],
+    "char": "\ud83d\udc70",
+    fitzpatrick_scale: true,
+    category: "people"
+  },
+  man_in_tuxedo: {
+    keywords: [ "couple", "marriage", "wedding", "groom" ],
+    "char": "\ud83e\udd35",
+    fitzpatrick_scale: true,
+    category: "people"
+  },
+  running_woman: {
+    keywords: [ "woman", "walking", "exercise", "race", "running", "female" ],
+    "char": "\ud83c\udfc3\u200d\u2640\ufe0f",
+    fitzpatrick_scale: true,
+    category: "people"
+  },
+  running_man: {
+    keywords: [ "man", "walking", "exercise", "race", "running" ],
+    "char": "\ud83c\udfc3",
+    fitzpatrick_scale: true,
+    category: "people"
+  },
+  walking_woman: {
+    keywords: [ "human", "feet", "steps", "woman", "female" ],
+    "char": "\ud83d\udeb6\u200d\u2640\ufe0f",
+    fitzpatrick_scale: true,
+    category: "people"
+  },
+  walking_man: {
+    keywords: [ "human", "feet", "steps" ],
+    "char": "\ud83d\udeb6",
+    fitzpatrick_scale: true,
+    category: "people"
+  },
+  dancer: {
+    keywords: [ "female", "girl", "woman", "fun" ],
+    "char": "\ud83d\udc83",
+    fitzpatrick_scale: true,
+    category: "people"
+  },
+  man_dancing: {
+    keywords: [ "male", "boy", "fun", "dancer" ],
+    "char": "\ud83d\udd7a",
+    fitzpatrick_scale: true,
+    category: "people"
+  },
+  dancing_women: {
+    keywords: [ "female", "bunny", "women", "girls" ],
+    "char": "\ud83d\udc6f",
+    fitzpatrick_scale: false,
+    category: "people"
+  },
+  dancing_men: {
+    keywords: [ "male", "bunny", "men", "boys" ],
+    "char": "\ud83d\udc6f\u200d\u2642\ufe0f",
+    fitzpatrick_scale: false,
+    category: "people"
+  },
+  couple: {
+    keywords: [ "pair", "people", "human", "love", "date", "dating", "like", "affection", "valentines", "marriage" ],
+    "char": "\ud83d\udc6b",
+    fitzpatrick_scale: false,
+    category: "people"
+  },
+  two_men_holding_hands: {
+    keywords: [ "pair", "couple", "love", "like", "bromance", "friendship", "people", "human" ],
+    "char": "\ud83d\udc6c",
+    fitzpatrick_scale: false,
+    category: "people"
+  },
+  two_women_holding_hands: {
+    keywords: [ "pair", "friendship", "couple", "love", "like", "female", "people", "human" ],
+    "char": "\ud83d\udc6d",
+    fitzpatrick_scale: false,
+    category: "people"
+  },
+  bowing_woman: {
+    keywords: [ "woman", "female", "girl" ],
+    "char": "\ud83d\ude47\u200d\u2640\ufe0f",
+    fitzpatrick_scale: true,
+    category: "people"
+  },
+  bowing_man: {
+    keywords: [ "man", "male", "boy" ],
+    "char": "\ud83d\ude47",
+    fitzpatrick_scale: true,
+    category: "people"
+  },
+  man_facepalming: {
+    keywords: [ "man", "male", "boy", "disbelief" ],
+    "char": "\ud83e\udd26",
+    fitzpatrick_scale: true,
+    category: "people"
+  },
+  woman_facepalming: {
+    keywords: [ "woman", "female", "girl", "disbelief" ],
+    "char": "\ud83e\udd26\u200d\u2640\ufe0f",
+    fitzpatrick_scale: true,
+    category: "people"
+  },
+  woman_shrugging: {
+    keywords: [ "woman", "female", "girl", "confused", "indifferent", "doubt" ],
+    "char": "\ud83e\udd37",
+    fitzpatrick_scale: true,
+    category: "people"
+  },
+  man_shrugging: {
+    keywords: [ "man", "male", "boy", "confused", "indifferent", "doubt" ],
+    "char": "\ud83e\udd37\u200d\u2642\ufe0f",
+    fitzpatrick_scale: true,
+    category: "people"
+  },
+  tipping_hand_woman: {
+    keywords: [ "female", "girl", "woman", "human", "information" ],
+    "char": "\ud83d\udc81",
+    fitzpatrick_scale: true,
+    category: "people"
+  },
+  tipping_hand_man: {
+    keywords: [ "male", "boy", "man", "human", "information" ],
+    "char": "\ud83d\udc81\u200d\u2642\ufe0f",
+    fitzpatrick_scale: true,
+    category: "people"
+  },
+  no_good_woman: {
+    keywords: [ "female", "girl", "woman", "nope" ],
+    "char": "\ud83d\ude45",
+    fitzpatrick_scale: true,
+    category: "people"
+  },
+  no_good_man: {
+    keywords: [ "male", "boy", "man", "nope" ],
+    "char": "\ud83d\ude45\u200d\u2642\ufe0f",
+    fitzpatrick_scale: true,
+    category: "people"
+  },
+  ok_woman: {
+    keywords: [ "women", "girl", "female", "pink", "human", "woman" ],
+    "char": "\ud83d\ude46",
+    fitzpatrick_scale: true,
+    category: "people"
+  },
+  ok_man: {
+    keywords: [ "men", "boy", "male", "blue", "human", "man" ],
+    "char": "\ud83d\ude46\u200d\u2642\ufe0f",
+    fitzpatrick_scale: true,
+    category: "people"
+  },
+  raising_hand_woman: {
+    keywords: [ "female", "girl", "woman" ],
+    "char": "\ud83d\ude4b",
+    fitzpatrick_scale: true,
+    category: "people"
+  },
+  raising_hand_man: {
+    keywords: [ "male", "boy", "man" ],
+    "char": "\ud83d\ude4b\u200d\u2642\ufe0f",
+    fitzpatrick_scale: true,
+    category: "people"
+  },
+  pouting_woman: {
+    keywords: [ "female", "girl", "woman" ],
+    "char": "\ud83d\ude4e",
+    fitzpatrick_scale: true,
+    category: "people"
+  },
+  pouting_man: {
+    keywords: [ "male", "boy", "man" ],
+    "char": "\ud83d\ude4e\u200d\u2642\ufe0f",
+    fitzpatrick_scale: true,
+    category: "people"
+  },
+  frowning_woman: {
+    keywords: [ "female", "girl", "woman", "sad", "depressed", "discouraged", "unhappy" ],
+    "char": "\ud83d\ude4d",
+    fitzpatrick_scale: true,
+    category: "people"
+  },
+  frowning_man: {
+    keywords: [ "male", "boy", "man", "sad", "depressed", "discouraged", "unhappy" ],
+    "char": "\ud83d\ude4d\u200d\u2642\ufe0f",
+    fitzpatrick_scale: true,
+    category: "people"
+  },
+  haircut_woman: {
+    keywords: [ "female", "girl", "woman" ],
+    "char": "\ud83d\udc87",
+    fitzpatrick_scale: true,
+    category: "people"
+  },
+  haircut_man: {
+    keywords: [ "male", "boy", "man" ],
+    "char": "\ud83d\udc87\u200d\u2642\ufe0f",
+    fitzpatrick_scale: true,
+    category: "people"
+  },
+  massage_woman: {
+    keywords: [ "female", "girl", "woman", "head" ],
+    "char": "\ud83d\udc86",
+    fitzpatrick_scale: true,
+    category: "people"
+  },
+  massage_man: {
+    keywords: [ "male", "boy", "man", "head" ],
+    "char": "\ud83d\udc86\u200d\u2642\ufe0f",
+    fitzpatrick_scale: true,
+    category: "people"
+  },
+  woman_in_steamy_room: {
+    keywords: [ "female", "woman", "spa", "steamroom", "sauna" ],
+    "char": "\ud83e\uddd6\u200d\u2640\ufe0f",
+    fitzpatrick_scale: true,
+    category: "people"
+  },
+  man_in_steamy_room: {
+    keywords: [ "male", "man", "spa", "steamroom", "sauna" ],
+    "char": "\ud83e\uddd6\u200d\u2642\ufe0f",
+    fitzpatrick_scale: true,
+    category: "people"
+  },
+  couple_with_heart_woman_man: {
+    keywords: [ "pair", "love", "like", "affection", "human", "dating", "valentines", "marriage" ],
+    "char": "\ud83d\udc91",
+    fitzpatrick_scale: false,
+    category: "people"
+  },
+  couple_with_heart_woman_woman: {
+    keywords: [ "pair", "love", "like", "affection", "human", "dating", "valentines", "marriage" ],
+    "char": "\ud83d\udc69\u200d\u2764\ufe0f\u200d\ud83d\udc69",
+    fitzpatrick_scale: false,
+    category: "people"
+  },
+  couple_with_heart_man_man: {
+    keywords: [ "pair", "love", "like", "affection", "human", "dating", "valentines", "marriage" ],
+    "char": "\ud83d\udc68\u200d\u2764\ufe0f\u200d\ud83d\udc68",
+    fitzpatrick_scale: false,
+    category: "people"
+  },
+  couplekiss_man_woman: {
+    keywords: [ "pair", "valentines", "love", "like", "dating", "marriage" ],
+    "char": "\ud83d\udc8f",
+    fitzpatrick_scale: false,
+    category: "people"
+  },
+  couplekiss_woman_woman: {
+    keywords: [ "pair", "valentines", "love", "like", "dating", "marriage" ],
+    "char": "\ud83d\udc69\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc69",
+    fitzpatrick_scale: false,
+    category: "people"
+  },
+  couplekiss_man_man: {
+    keywords: [ "pair", "valentines", "love", "like", "dating", "marriage" ],
+    "char": "\ud83d\udc68\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68",
+    fitzpatrick_scale: false,
+    category: "people"
+  },
+  family_man_woman_boy: {
+    keywords: [ "home", "parents", "child", "mom", "dad", "father", "mother", "people", "human" ],
+    "char": "\ud83d\udc6a",
+    fitzpatrick_scale: false,
+    category: "people"
+  },
+  family_man_woman_girl: {
+    keywords: [ "home", "parents", "people", "human", "child" ],
+    "char": "\ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d\udc67",
+    fitzpatrick_scale: false,
+    category: "people"
+  },
+  family_man_woman_girl_boy: {
+    keywords: [ "home", "parents", "people", "human", "children" ],
+    "char": "\ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d\udc66",
+    fitzpatrick_scale: false,
+    category: "people"
+  },
+  family_man_woman_boy_boy: {
+    keywords: [ "home", "parents", "people", "human", "children" ],
+    "char": "\ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d\udc66\u200d\ud83d\udc66",
+    fitzpatrick_scale: false,
+    category: "people"
+  },
+  family_man_woman_girl_girl: {
+    keywords: [ "home", "parents", "people", "human", "children" ],
+    "char": "\ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d\udc67",
+    fitzpatrick_scale: false,
+    category: "people"
+  },
+  family_woman_woman_boy: {
+    keywords: [ "home", "parents", "people", "human", "children" ],
+    "char": "\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d\udc66",
+    fitzpatrick_scale: false,
+    category: "people"
+  },
+  family_woman_woman_girl: {
+    keywords: [ "home", "parents", "people", "human", "children" ],
+    "char": "\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d\udc67",
+    fitzpatrick_scale: false,
+    category: "people"
+  },
+  family_woman_woman_girl_boy: {
+    keywords: [ "home", "parents", "people", "human", "children" ],
+    "char": "\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d\udc66",
+    fitzpatrick_scale: false,
+    category: "people"
+  },
+  family_woman_woman_boy_boy: {
+    keywords: [ "home", "parents", "people", "human", "children" ],
+    "char": "\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d\udc66\u200d\ud83d\udc66",
+    fitzpatrick_scale: false,
+    category: "people"
+  },
+  family_woman_woman_girl_girl: {
+    keywords: [ "home", "parents", "people", "human", "children" ],
+    "char": "\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d\udc67",
+    fitzpatrick_scale: false,
+    category: "people"
+  },
+  family_man_man_boy: {
+    keywords: [ "home", "parents", "people", "human", "children" ],
+    "char": "\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d\udc66",
+    fitzpatrick_scale: false,
+    category: "people"
+  },
+  family_man_man_girl: {
+    keywords: [ "home", "parents", "people", "human", "children" ],
+    "char": "\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d\udc67",
+    fitzpatrick_scale: false,
+    category: "people"
+  },
+  family_man_man_girl_boy: {
+    keywords: [ "home", "parents", "people", "human", "children" ],
+    "char": "\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d\udc67\u200d\ud83d\udc66",
+    fitzpatrick_scale: false,
+    category: "people"
+  },
+  family_man_man_boy_boy: {
+    keywords: [ "home", "parents", "people", "human", "children" ],
+    "char": "\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d\udc66\u200d\ud83d\udc66",
+    fitzpatrick_scale: false,
+    category: "people"
+  },
+  family_man_man_girl_girl: {
+    keywords: [ "home", "parents", "people", "human", "children" ],
+    "char": "\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d\udc67\u200d\ud83d\udc67",
+    fitzpatrick_scale: false,
+    category: "people"
+  },
+  family_woman_boy: {
+    keywords: [ "home", "parent", "people", "human", "child" ],
+    "char": "\ud83d\udc69\u200d\ud83d\udc66",
+    fitzpatrick_scale: false,
+    category: "people"
+  },
+  family_woman_girl: {
+    keywords: [ "home", "parent", "people", "human", "child" ],
+    "char": "\ud83d\udc69\u200d\ud83d\udc67",
+    fitzpatrick_scale: false,
+    category: "people"
+  },
+  family_woman_girl_boy: {
+    keywords: [ "home", "parent", "people", "human", "children" ],
+    "char": "\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d\udc66",
+    fitzpatrick_scale: false,
+    category: "people"
+  },
+  family_woman_boy_boy: {
+    keywords: [ "home", "parent", "people", "human", "children" ],
+    "char": "\ud83d\udc69\u200d\ud83d\udc66\u200d\ud83d\udc66",
+    fitzpatrick_scale: false,
+    category: "people"
+  },
+  family_woman_girl_girl: {
+    keywords: [ "home", "parent", "people", "human", "children" ],
+    "char": "\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d\udc67",
+    fitzpatrick_scale: false,
+    category: "people"
+  },
+  family_man_boy: {
+    keywords: [ "home", "parent", "people", "human", "child" ],
+    "char": "\ud83d\udc68\u200d\ud83d\udc66",
+    fitzpatrick_scale: false,
+    category: "people"
+  },
+  family_man_girl: {
+    keywords: [ "home", "parent", "people", "human", "child" ],
+    "char": "\ud83d\udc68\u200d\ud83d\udc67",
+    fitzpatrick_scale: false,
+    category: "people"
+  },
+  family_man_girl_boy: {
+    keywords: [ "home", "parent", "people", "human", "children" ],
+    "char": "\ud83d\udc68\u200d\ud83d\udc67\u200d\ud83d\udc66",
+    fitzpatrick_scale: false,
+    category: "people"
+  },
+  family_man_boy_boy: {
+    keywords: [ "home", "parent", "people", "human", "children" ],
+    "char": "\ud83d\udc68\u200d\ud83d\udc66\u200d\ud83d\udc66",
+    fitzpatrick_scale: false,
+    category: "people"
+  },
+  family_man_girl_girl: {
+    keywords: [ "home", "parent", "people", "human", "children" ],
+    "char": "\ud83d\udc68\u200d\ud83d\udc67\u200d\ud83d\udc67",
+    fitzpatrick_scale: false,
+    category: "people"
+  },
+  coat: {
+    keywords: [ "jacket" ],
+    "char": "\ud83e\udde5",
+    fitzpatrick_scale: false,
+    category: "people"
+  },
+  womans_clothes: {
+    keywords: [ "fashion", "shopping_bags", "female" ],
+    "char": "\ud83d\udc5a",
+    fitzpatrick_scale: false,
+    category: "people"
+  },
+  tshirt: {
+    keywords: [ "fashion", "cloth", "casual", "shirt", "tee" ],
+    "char": "\ud83d\udc55",
+    fitzpatrick_scale: false,
+    category: "people"
+  },
+  jeans: {
+    keywords: [ "fashion", "shopping" ],
+    "char": "\ud83d\udc56",
+    fitzpatrick_scale: false,
+    category: "people"
+  },
+  necktie: {
+    keywords: [ "shirt", "suitup", "formal", "fashion", "cloth", "business" ],
+    "char": "\ud83d\udc54",
+    fitzpatrick_scale: false,
+    category: "people"
+  },
+  dress: {
+    keywords: [ "clothes", "fashion", "shopping" ],
+    "char": "\ud83d\udc57",
+    fitzpatrick_scale: false,
+    category: "people"
+  },
+  bikini: {
+    keywords: [ "swimming", "female", "woman", "girl", "fashion", "beach", "summer" ],
+    "char": "\ud83d\udc59",
+    fitzpatrick_scale: false,
+    category: "people"
+  },
+  kimono: {
+    keywords: [ "dress", "fashion", "women", "female", "japanese" ],
+    "char": "\ud83d\udc58",
+    fitzpatrick_scale: false,
+    category: "people"
+  },
+  lipstick: {
+    keywords: [ "female", "girl", "fashion", "woman" ],
+    "char": "\ud83d\udc84",
+    fitzpatrick_scale: false,
+    category: "people"
+  },
+  kiss: {
+    keywords: [ "face", "lips", "love", "like", "affection", "valentines" ],
+    "char": "\ud83d\udc8b",
+    fitzpatrick_scale: false,
+    category: "people"
+  },
+  footprints: {
+    keywords: [ "feet", "tracking", "walking", "beach" ],
+    "char": "\ud83d\udc63",
+    fitzpatrick_scale: false,
+    category: "people"
+  },
+  high_heel: {
+    keywords: [ "fashion", "shoes", "female", "pumps", "stiletto" ],
+    "char": "\ud83d\udc60",
+    fitzpatrick_scale: false,
+    category: "people"
+  },
+  sandal: {
+    keywords: [ "shoes", "fashion", "flip flops" ],
+    "char": "\ud83d\udc61",
+    fitzpatrick_scale: false,
+    category: "people"
+  },
+  boot: {
+    keywords: [ "shoes", "fashion" ],
+    "char": "\ud83d\udc62",
+    fitzpatrick_scale: false,
+    category: "people"
+  },
+  mans_shoe: {
+    keywords: [ "fashion", "male" ],
+    "char": "\ud83d\udc5e",
+    fitzpatrick_scale: false,
+    category: "people"
+  },
+  athletic_shoe: {
+    keywords: [ "shoes", "sports", "sneakers" ],
+    "char": "\ud83d\udc5f",
+    fitzpatrick_scale: false,
+    category: "people"
+  },
+  socks: {
+    keywords: [ "stockings", "clothes" ],
+    "char": "\ud83e\udde6",
+    fitzpatrick_scale: false,
+    category: "people"
+  },
+  gloves: {
+    keywords: [ "hands", "winter", "clothes" ],
+    "char": "\ud83e\udde4",
+    fitzpatrick_scale: false,
+    category: "people"
+  },
+  scarf: {
+    keywords: [ "neck", "winter", "clothes" ],
+    "char": "\ud83e\udde3",
+    fitzpatrick_scale: false,
+    category: "people"
+  },
+  womans_hat: {
+    keywords: [ "fashion", "accessories", "female", "lady", "spring" ],
+    "char": "\ud83d\udc52",
+    fitzpatrick_scale: false,
+    category: "people"
+  },
+  tophat: {
+    keywords: [ "magic", "gentleman", "classy", "circus" ],
+    "char": "\ud83c\udfa9",
+    fitzpatrick_scale: false,
+    category: "people"
+  },
+  billed_hat: {
+    keywords: [ "cap", "baseball" ],
+    "char": "\ud83e\udde2",
+    fitzpatrick_scale: false,
+    category: "people"
+  },
+  rescue_worker_helmet: {
+    keywords: [ "construction", "build" ],
+    "char": "\u26d1",
+    fitzpatrick_scale: false,
+    category: "people"
+  },
+  mortar_board: {
+    keywords: [ "school", "college", "degree", "university", "graduation", "cap", "hat", "legal", "learn", "education" ],
+    "char": "\ud83c\udf93",
+    fitzpatrick_scale: false,
+    category: "people"
+  },
+  crown: {
+    keywords: [ "king", "kod", "leader", "royalty", "lord" ],
+    "char": "\ud83d\udc51",
+    fitzpatrick_scale: false,
+    category: "people"
+  },
+  school_satchel: {
+    keywords: [ "student", "education", "bag", "backpack" ],
+    "char": "\ud83c\udf92",
+    fitzpatrick_scale: false,
+    category: "people"
+  },
+  pouch: {
+    keywords: [ "bag", "accessories", "shopping" ],
+    "char": "\ud83d\udc5d",
+    fitzpatrick_scale: false,
+    category: "people"
+  },
+  purse: {
+    keywords: [ "fashion", "accessories", "money", "sales", "shopping" ],
+    "char": "\ud83d\udc5b",
+    fitzpatrick_scale: false,
+    category: "people"
+  },
+  handbag: {
+    keywords: [ "fashion", "accessory", "accessories", "shopping" ],
+    "char": "\ud83d\udc5c",
+    fitzpatrick_scale: false,
+    category: "people"
+  },
+  briefcase: {
+    keywords: [ "business", "documents", "work", "law", "legal", "job", "career" ],
+    "char": "\ud83d\udcbc",
+    fitzpatrick_scale: false,
+    category: "people"
+  },
+  eyeglasses: {
+    keywords: [ "fashion", "accessories", "eyesight", "nerdy", "dork", "geek" ],
+    "char": "\ud83d\udc53",
+    fitzpatrick_scale: false,
+    category: "people"
+  },
+  dark_sunglasses: {
+    keywords: [ "face", "cool", "accessories" ],
+    "char": "\ud83d\udd76",
+    fitzpatrick_scale: false,
+    category: "people"
+  },
+  ring: {
+    keywords: [ "wedding", "propose", "marriage", "valentines", "diamond", "fashion", "jewelry", "gem", "engagement" ],
+    "char": "\ud83d\udc8d",
+    fitzpatrick_scale: false,
+    category: "people"
+  },
+  closed_umbrella: {
+    keywords: [ "weather", "rain", "drizzle" ],
+    "char": "\ud83c\udf02",
+    fitzpatrick_scale: false,
+    category: "people"
+  },
+  dog: {
+    keywords: [ "animal", "friend", "nature", "woof", "puppy", "pet", "faithful" ],
+    "char": "\ud83d\udc36",
+    fitzpatrick_scale: false,
+    category: "animals_and_nature"
+  },
+  cat: {
+    keywords: [ "animal", "meow", "nature", "pet", "kitten" ],
+    "char": "\ud83d\udc31",
+    fitzpatrick_scale: false,
+    category: "animals_and_nature"
+  },
+  mouse: {
+    keywords: [ "animal", "nature", "cheese_wedge", "rodent" ],
+    "char": "\ud83d\udc2d",
+    fitzpatrick_scale: false,
+    category: "animals_and_nature"
+  },
+  hamster: {
+    keywords: [ "animal", "nature" ],
+    "char": "\ud83d\udc39",
+    fitzpatrick_scale: false,
+    category: "animals_and_nature"
+  },
+  rabbit: {
+    keywords: [ "animal", "nature", "pet", "spring", "magic", "bunny" ],
+    "char": "\ud83d\udc30",
+    fitzpatrick_scale: false,
+    category: "animals_and_nature"
+  },
+  fox_face: {
+    keywords: [ "animal", "nature", "face" ],
+    "char": "\ud83e\udd8a",
+    fitzpatrick_scale: false,
+    category: "animals_and_nature"
+  },
+  bear: {
+    keywords: [ "animal", "nature", "wild" ],
+    "char": "\ud83d\udc3b",
+    fitzpatrick_scale: false,
+    category: "animals_and_nature"
+  },
+  panda_face: {
+    keywords: [ "animal", "nature", "panda" ],
+    "char": "\ud83d\udc3c",
+    fitzpatrick_scale: false,
+    category: "animals_and_nature"
+  },
+  koala: {
+    keywords: [ "animal", "nature" ],
+    "char": "\ud83d\udc28",
+    fitzpatrick_scale: false,
+    category: "animals_and_nature"
+  },
+  tiger: {
+    keywords: [ "animal", "cat", "danger", "wild", "nature", "roar" ],
+    "char": "\ud83d\udc2f",
+    fitzpatrick_scale: false,
+    category: "animals_and_nature"
+  },
+  lion: {
+    keywords: [ "animal", "nature" ],
+    "char": "\ud83e\udd81",
+    fitzpatrick_scale: false,
+    category: "animals_and_nature"
+  },
+  cow: {
+    keywords: [ "beef", "ox", "animal", "nature", "moo", "milk" ],
+    "char": "\ud83d\udc2e",
+    fitzpatrick_scale: false,
+    category: "animals_and_nature"
+  },
+  pig: {
+    keywords: [ "animal", "oink", "nature" ],
+    "char": "\ud83d\udc37",
+    fitzpatrick_scale: false,
+    category: "animals_and_nature"
+  },
+  pig_nose: {
+    keywords: [ "animal", "oink" ],
+    "char": "\ud83d\udc3d",
+    fitzpatrick_scale: false,
+    category: "animals_and_nature"
+  },
+  frog: {
+    keywords: [ "animal", "nature", "croak", "toad" ],
+    "char": "\ud83d\udc38",
+    fitzpatrick_scale: false,
+    category: "animals_and_nature"
+  },
+  squid: {
+    keywords: [ "animal", "nature", "ocean", "sea" ],
+    "char": "\ud83e\udd91",
+    fitzpatrick_scale: false,
+    category: "animals_and_nature"
+  },
+  octopus: {
+    keywords: [ "animal", "creature", "ocean", "sea", "nature", "beach" ],
+    "char": "\ud83d\udc19",
+    fitzpatrick_scale: false,
+    category: "animals_and_nature"
+  },
+  shrimp: {
+    keywords: [ "animal", "ocean", "nature", "seafood" ],
+    "char": "\ud83e\udd90",
+    fitzpatrick_scale: false,
+    category: "animals_and_nature"
+  },
+  monkey_face: {
+    keywords: [ "animal", "nature", "circus" ],
+    "char": "\ud83d\udc35",
+    fitzpatrick_scale: false,
+    category: "animals_and_nature"
+  },
+  gorilla: {
+    keywords: [ "animal", "nature", "circus" ],
+    "char": "\ud83e\udd8d",
+    fitzpatrick_scale: false,
+    category: "animals_and_nature"
+  },
+  see_no_evil: {
+    keywords: [ "monkey", "animal", "nature", "haha" ],
+    "char": "\ud83d\ude48",
+    fitzpatrick_scale: false,
+    category: "animals_and_nature"
+  },
+  hear_no_evil: {
+    keywords: [ "animal", "monkey", "nature" ],
+    "char": "\ud83d\ude49",
+    fitzpatrick_scale: false,
+    category: "animals_and_nature"
+  },
+  speak_no_evil: {
+    keywords: [ "monkey", "animal", "nature", "omg" ],
+    "char": "\ud83d\ude4a",
+    fitzpatrick_scale: false,
+    category: "animals_and_nature"
+  },
+  monkey: {
+    keywords: [ "animal", "nature", "banana", "circus" ],
+    "char": "\ud83d\udc12",
+    fitzpatrick_scale: false,
+    category: "animals_and_nature"
+  },
+  chicken: {
+    keywords: [ "animal", "cluck", "nature", "bird" ],
+    "char": "\ud83d\udc14",
+    fitzpatrick_scale: false,
+    category: "animals_and_nature"
+  },
+  penguin: {
+    keywords: [ "animal", "nature" ],
+    "char": "\ud83d\udc27",
+    fitzpatrick_scale: false,
+    category: "animals_and_nature"
+  },
+  bird: {
+    keywords: [ "animal", "nature", "fly", "tweet", "spring" ],
+    "char": "\ud83d\udc26",
+    fitzpatrick_scale: false,
+    category: "animals_and_nature"
+  },
+  baby_chick: {
+    keywords: [ "animal", "chicken", "bird" ],
+    "char": "\ud83d\udc24",
+    fitzpatrick_scale: false,
+    category: "animals_and_nature"
+  },
+  hatching_chick: {
+    keywords: [ "animal", "chicken", "egg", "born", "baby", "bird" ],
+    "char": "\ud83d\udc23",
+    fitzpatrick_scale: false,
+    category: "animals_and_nature"
+  },
+  hatched_chick: {
+    keywords: [ "animal", "chicken", "baby", "bird" ],
+    "char": "\ud83d\udc25",
+    fitzpatrick_scale: false,
+    category: "animals_and_nature"
+  },
+  duck: {
+    keywords: [ "animal", "nature", "bird", "mallard" ],
+    "char": "\ud83e\udd86",
+    fitzpatrick_scale: false,
+    category: "animals_and_nature"
+  },
+  eagle: {
+    keywords: [ "animal", "nature", "bird" ],
+    "char": "\ud83e\udd85",
+    fitzpatrick_scale: false,
+    category: "animals_and_nature"
+  },
+  owl: {
+    keywords: [ "animal", "nature", "bird", "hoot" ],
+    "char": "\ud83e\udd89",
+    fitzpatrick_scale: false,
+    category: "animals_and_nature"
+  },
+  bat: {
+    keywords: [ "animal", "nature", "blind", "vampire" ],
+    "char": "\ud83e\udd87",
+    fitzpatrick_scale: false,
+    category: "animals_and_nature"
+  },
+  wolf: {
+    keywords: [ "animal", "nature", "wild" ],
+    "char": "\ud83d\udc3a",
+    fitzpatrick_scale: false,
+    category: "animals_and_nature"
+  },
+  boar: {
+    keywords: [ "animal", "nature" ],
+    "char": "\ud83d\udc17",
+    fitzpatrick_scale: false,
+    category: "animals_and_nature"
+  },
+  horse: {
+    keywords: [ "animal", "brown", "nature" ],
+    "char": "\ud83d\udc34",
+    fitzpatrick_scale: false,
+    category: "animals_and_nature"
+  },
+  unicorn: {
+    keywords: [ "animal", "nature", "mystical" ],
+    "char": "\ud83e\udd84",
+    fitzpatrick_scale: false,
+    category: "animals_and_nature"
+  },
+  honeybee: {
+    keywords: [ "animal", "insect", "nature", "bug", "spring", "honey" ],
+    "char": "\ud83d\udc1d",
+    fitzpatrick_scale: false,
+    category: "animals_and_nature"
+  },
+  bug: {
+    keywords: [ "animal", "insect", "nature", "worm" ],
+    "char": "\ud83d\udc1b",
+    fitzpatrick_scale: false,
+    category: "animals_and_nature"
+  },
+  butterfly: {
+    keywords: [ "animal", "insect", "nature", "caterpillar" ],
+    "char": "\ud83e\udd8b",
+    fitzpatrick_scale: false,
+    category: "animals_and_nature"
+  },
+  snail: {
+    keywords: [ "slow", "animal", "shell" ],
+    "char": "\ud83d\udc0c",
+    fitzpatrick_scale: false,
+    category: "animals_and_nature"
+  },
+  beetle: {
+    keywords: [ "animal", "insect", "nature", "ladybug" ],
+    "char": "\ud83d\udc1e",
+    fitzpatrick_scale: false,
+    category: "animals_and_nature"
+  },
+  ant: {
+    keywords: [ "animal", "insect", "nature", "bug" ],
+    "char": "\ud83d\udc1c",
+    fitzpatrick_scale: false,
+    category: "animals_and_nature"
+  },
+  grasshopper: {
+    keywords: [ "animal", "cricket", "chirp" ],
+    "char": "\ud83e\udd97",
+    fitzpatrick_scale: false,
+    category: "animals_and_nature"
+  },
+  spider: {
+    keywords: [ "animal", "arachnid" ],
+    "char": "\ud83d\udd77",
+    fitzpatrick_scale: false,
+    category: "animals_and_nature"
+  },
+  scorpion: {
+    keywords: [ "animal", "arachnid" ],
+    "char": "\ud83e\udd82",
+    fitzpatrick_scale: false,
+    category: "animals_and_nature"
+  },
+  crab: {
+    keywords: [ "animal", "crustacean" ],
+    "char": "\ud83e\udd80",
+    fitzpatrick_scale: false,
+    category: "animals_and_nature"
+  },
+  snake: {
+    keywords: [ "animal", "evil", "nature", "hiss", "python" ],
+    "char": "\ud83d\udc0d",
+    fitzpatrick_scale: false,
+    category: "animals_and_nature"
+  },
+  lizard: {
+    keywords: [ "animal", "nature", "reptile" ],
+    "char": "\ud83e\udd8e",
+    fitzpatrick_scale: false,
+    category: "animals_and_nature"
+  },
+  "t-rex": {
+    keywords: [ "animal", "nature", "dinosaur", "tyrannosaurus", "extinct" ],
+    "char": "\ud83e\udd96",
+    fitzpatrick_scale: false,
+    category: "animals_and_nature"
+  },
+  sauropod: {
+    keywords: [ "animal", "nature", "dinosaur", "brachiosaurus", "brontosaurus", "diplodocus", "extinct" ],
+    "char": "\ud83e\udd95",
+    fitzpatrick_scale: false,
+    category: "animals_and_nature"
+  },
+  turtle: {
+    keywords: [ "animal", "slow", "nature", "tortoise" ],
+    "char": "\ud83d\udc22",
+    fitzpatrick_scale: false,
+    category: "animals_and_nature"
+  },
+  tropical_fish: {
+    keywords: [ "animal", "swim", "ocean", "beach", "nemo" ],
+    "char": "\ud83d\udc20",
+    fitzpatrick_scale: false,
+    category: "animals_and_nature"
+  },
+  fish: {
+    keywords: [ "animal", "food", "nature" ],
+    "char": "\ud83d\udc1f",
+    fitzpatrick_scale: false,
+    category: "animals_and_nature"
+  },
+  blowfish: {
+    keywords: [ "animal", "nature", "food", "sea", "ocean" ],
+    "char": "\ud83d\udc21",
+    fitzpatrick_scale: false,
+    category: "animals_and_nature"
+  },
+  dolphin: {
+    keywords: [ "animal", "nature", "fish", "sea", "ocean", "flipper", "fins", "beach" ],
+    "char": "\ud83d\udc2c",
+    fitzpatrick_scale: false,
+    category: "animals_and_nature"
+  },
+  shark: {
+    keywords: [ "animal", "nature", "fish", "sea", "ocean", "jaws", "fins", "beach" ],
+    "char": "\ud83e\udd88",
+    fitzpatrick_scale: false,
+    category: "animals_and_nature"
+  },
+  whale: {
+    keywords: [ "animal", "nature", "sea", "ocean" ],
+    "char": "\ud83d\udc33",
+    fitzpatrick_scale: false,
+    category: "animals_and_nature"
+  },
+  whale2: {
+    keywords: [ "animal", "nature", "sea", "ocean" ],
+    "char": "\ud83d\udc0b",
+    fitzpatrick_scale: false,
+    category: "animals_and_nature"
+  },
+  crocodile: {
+    keywords: [ "animal", "nature", "reptile", "lizard", "alligator" ],
+    "char": "\ud83d\udc0a",
+    fitzpatrick_scale: false,
+    category: "animals_and_nature"
+  },
+  leopard: {
+    keywords: [ "animal", "nature" ],
+    "char": "\ud83d\udc06",
+    fitzpatrick_scale: false,
+    category: "animals_and_nature"
+  },
+  zebra: {
+    keywords: [ "animal", "nature", "stripes", "safari" ],
+    "char": "\ud83e\udd93",
+    fitzpatrick_scale: false,
+    category: "animals_and_nature"
+  },
+  tiger2: {
+    keywords: [ "animal", "nature", "roar" ],
+    "char": "\ud83d\udc05",
+    fitzpatrick_scale: false,
+    category: "animals_and_nature"
+  },
+  water_buffalo: {
+    keywords: [ "animal", "nature", "ox", "cow" ],
+    "char": "\ud83d\udc03",
+    fitzpatrick_scale: false,
+    category: "animals_and_nature"
+  },
+  ox: {
+    keywords: [ "animal", "cow", "beef" ],
+    "char": "\ud83d\udc02",
+    fitzpatrick_scale: false,
+    category: "animals_and_nature"
+  },
+  cow2: {
+    keywords: [ "beef", "ox", "animal", "nature", "moo", "milk" ],
+    "char": "\ud83d\udc04",
+    fitzpatrick_scale: false,
+    category: "animals_and_nature"
+  },
+  deer: {
+    keywords: [ "animal", "nature", "horns", "venison" ],
+    "char": "\ud83e\udd8c",
+    fitzpatrick_scale: false,
+    category: "animals_and_nature"
+  },
+  dromedary_camel: {
+    keywords: [ "animal", "hot", "desert", "hump" ],
+    "char": "\ud83d\udc2a",
+    fitzpatrick_scale: false,
+    category: "animals_and_nature"
+  },
+  camel: {
+    keywords: [ "animal", "nature", "hot", "desert", "hump" ],
+    "char": "\ud83d\udc2b",
+    fitzpatrick_scale: false,
+    category: "animals_and_nature"
+  },
+  giraffe: {
+    keywords: [ "animal", "nature", "spots", "safari" ],
+    "char": "\ud83e\udd92",
+    fitzpatrick_scale: false,
+    category: "animals_and_nature"
+  },
+  elephant: {
+    keywords: [ "animal", "nature", "nose", "th", "circus" ],
+    "char": "\ud83d\udc18",
+    fitzpatrick_scale: false,
+    category: "animals_and_nature"
+  },
+  rhinoceros: {
+    keywords: [ "animal", "nature", "horn" ],
+    "char": "\ud83e\udd8f",
+    fitzpatrick_scale: false,
+    category: "animals_and_nature"
+  },
+  goat: {
+    keywords: [ "animal", "nature" ],
+    "char": "\ud83d\udc10",
+    fitzpatrick_scale: false,
+    category: "animals_and_nature"
+  },
+  ram: {
+    keywords: [ "animal", "sheep", "nature" ],
+    "char": "\ud83d\udc0f",
+    fitzpatrick_scale: false,
+    category: "animals_and_nature"
+  },
+  sheep: {
+    keywords: [ "animal", "nature", "wool", "shipit" ],
+    "char": "\ud83d\udc11",
+    fitzpatrick_scale: false,
+    category: "animals_and_nature"
+  },
+  racehorse: {
+    keywords: [ "animal", "gamble", "luck" ],
+    "char": "\ud83d\udc0e",
+    fitzpatrick_scale: false,
+    category: "animals_and_nature"
+  },
+  pig2: {
+    keywords: [ "animal", "nature" ],
+    "char": "\ud83d\udc16",
+    fitzpatrick_scale: false,
+    category: "animals_and_nature"
+  },
+  rat: {
+    keywords: [ "animal", "mouse", "rodent" ],
+    "char": "\ud83d\udc00",
+    fitzpatrick_scale: false,
+    category: "animals_and_nature"
+  },
+  mouse2: {
+    keywords: [ "animal", "nature", "rodent" ],
+    "char": "\ud83d\udc01",
+    fitzpatrick_scale: false,
+    category: "animals_and_nature"
+  },
+  rooster: {
+    keywords: [ "animal", "nature", "chicken" ],
+    "char": "\ud83d\udc13",
+    fitzpatrick_scale: false,
+    category: "animals_and_nature"
+  },
+  turkey: {
+    keywords: [ "animal", "bird" ],
+    "char": "\ud83e\udd83",
+    fitzpatrick_scale: false,
+    category: "animals_and_nature"
+  },
+  dove: {
+    keywords: [ "animal", "bird" ],
+    "char": "\ud83d\udd4a",
+    fitzpatrick_scale: false,
+    category: "animals_and_nature"
+  },
+  dog2: {
+    keywords: [ "animal", "nature", "friend", "doge", "pet", "faithful" ],
+    "char": "\ud83d\udc15",
+    fitzpatrick_scale: false,
+    category: "animals_and_nature"
+  },
+  poodle: {
+    keywords: [ "dog", "animal", "101", "nature", "pet" ],
+    "char": "\ud83d\udc29",
+    fitzpatrick_scale: false,
+    category: "animals_and_nature"
+  },
+  cat2: {
+    keywords: [ "animal", "meow", "pet", "cats" ],
+    "char": "\ud83d\udc08",
+    fitzpatrick_scale: false,
+    category: "animals_and_nature"
+  },
+  rabbit2: {
+    keywords: [ "animal", "nature", "pet", "magic", "spring" ],
+    "char": "\ud83d\udc07",
+    fitzpatrick_scale: false,
+    category: "animals_and_nature"
+  },
+  chipmunk: {
+    keywords: [ "animal", "nature", "rodent", "squirrel" ],
+    "char": "\ud83d\udc3f",
+    fitzpatrick_scale: false,
+    category: "animals_and_nature"
+  },
+  hedgehog: {
+    keywords: [ "animal", "nature", "spiny" ],
+    "char": "\ud83e\udd94",
+    fitzpatrick_scale: false,
+    category: "animals_and_nature"
+  },
+  paw_prints: {
+    keywords: [ "animal", "tracking", "footprints", "dog", "cat", "pet", "feet" ],
+    "char": "\ud83d\udc3e",
+    fitzpatrick_scale: false,
+    category: "animals_and_nature"
+  },
+  dragon: {
+    keywords: [ "animal", "myth", "nature", "chinese", "green" ],
+    "char": "\ud83d\udc09",
+    fitzpatrick_scale: false,
+    category: "animals_and_nature"
+  },
+  dragon_face: {
+    keywords: [ "animal", "myth", "nature", "chinese", "green" ],
+    "char": "\ud83d\udc32",
+    fitzpatrick_scale: false,
+    category: "animals_and_nature"
+  },
+  cactus: {
+    keywords: [ "vegetable", "plant", "nature" ],
+    "char": "\ud83c\udf35",
+    fitzpatrick_scale: false,
+    category: "animals_and_nature"
+  },
+  christmas_tree: {
+    keywords: [ "festival", "vacation", "december", "xmas", "celebration" ],
+    "char": "\ud83c\udf84",
+    fitzpatrick_scale: false,
+    category: "animals_and_nature"
+  },
+  evergreen_tree: {
+    keywords: [ "plant", "nature" ],
+    "char": "\ud83c\udf32",
+    fitzpatrick_scale: false,
+    category: "animals_and_nature"
+  },
+  deciduous_tree: {
+    keywords: [ "plant", "nature" ],
+    "char": "\ud83c\udf33",
+    fitzpatrick_scale: false,
+    category: "animals_and_nature"
+  },
+  palm_tree: {
+    keywords: [ "plant", "vegetable", "nature", "summer", "beach", "mojito", "tropical" ],
+    "char": "\ud83c\udf34",
+    fitzpatrick_scale: false,
+    category: "animals_and_nature"
+  },
+  seedling: {
+    keywords: [ "plant", "nature", "grass", "lawn", "spring" ],
+    "char": "\ud83c\udf31",
+    fitzpatrick_scale: false,
+    category: "animals_and_nature"
+  },
+  herb: {
+    keywords: [ "vegetable", "plant", "medicine", "weed", "grass", "lawn" ],
+    "char": "\ud83c\udf3f",
+    fitzpatrick_scale: false,
+    category: "animals_and_nature"
+  },
+  shamrock: {
+    keywords: [ "vegetable", "plant", "nature", "irish", "clover" ],
+    "char": "\u2618",
+    fitzpatrick_scale: false,
+    category: "animals_and_nature"
+  },
+  four_leaf_clover: {
+    keywords: [ "vegetable", "plant", "nature", "lucky", "irish" ],
+    "char": "\ud83c\udf40",
+    fitzpatrick_scale: false,
+    category: "animals_and_nature"
+  },
+  bamboo: {
+    keywords: [ "plant", "nature", "vegetable", "panda", "pine_decoration" ],
+    "char": "\ud83c\udf8d",
+    fitzpatrick_scale: false,
+    category: "animals_and_nature"
+  },
+  tanabata_tree: {
+    keywords: [ "plant", "nature", "branch", "summer" ],
+    "char": "\ud83c\udf8b",
+    fitzpatrick_scale: false,
+    category: "animals_and_nature"
+  },
+  leaves: {
+    keywords: [ "nature", "plant", "tree", "vegetable", "grass", "lawn", "spring" ],
+    "char": "\ud83c\udf43",
+    fitzpatrick_scale: false,
+    category: "animals_and_nature"
+  },
+  fallen_leaf: {
+    keywords: [ "nature", "plant", "vegetable", "leaves" ],
+    "char": "\ud83c\udf42",
+    fitzpatrick_scale: false,
+    category: "animals_and_nature"
+  },
+  maple_leaf: {
+    keywords: [ "nature", "plant", "vegetable", "ca", "fall" ],
+    "char": "\ud83c\udf41",
+    fitzpatrick_scale: false,
+    category: "animals_and_nature"
+  },
+  ear_of_rice: {
+    keywords: [ "nature", "plant" ],
+    "char": "\ud83c\udf3e",
+    fitzpatrick_scale: false,
+    category: "animals_and_nature"
+  },
+  hibiscus: {
+    keywords: [ "plant", "vegetable", "flowers", "beach" ],
+    "char": "\ud83c\udf3a",
+    fitzpatrick_scale: false,
+    category: "animals_and_nature"
+  },
+  sunflower: {
+    keywords: [ "nature", "plant", "fall" ],
+    "char": "\ud83c\udf3b",
+    fitzpatrick_scale: false,
+    category: "animals_and_nature"
+  },
+  rose: {
+    keywords: [ "flowers", "valentines", "love", "spring" ],
+    "char": "\ud83c\udf39",
+    fitzpatrick_scale: false,
+    category: "animals_and_nature"
+  },
+  wilted_flower: {
+    keywords: [ "plant", "nature", "flower" ],
+    "char": "\ud83e\udd40",
+    fitzpatrick_scale: false,
+    category: "animals_and_nature"
+  },
+  tulip: {
+    keywords: [ "flowers", "plant", "nature", "summer", "spring" ],
+    "char": "\ud83c\udf37",
+    fitzpatrick_scale: false,
+    category: "animals_and_nature"
+  },
+  blossom: {
+    keywords: [ "nature", "flowers", "yellow" ],
+    "char": "\ud83c\udf3c",
+    fitzpatrick_scale: false,
+    category: "animals_and_nature"
+  },
+  cherry_blossom: {
+    keywords: [ "nature", "plant", "spring", "flower" ],
+    "char": "\ud83c\udf38",
+    fitzpatrick_scale: false,
+    category: "animals_and_nature"
+  },
+  bouquet: {
+    keywords: [ "flowers", "nature", "spring" ],
+    "char": "\ud83d\udc90",
+    fitzpatrick_scale: false,
+    category: "animals_and_nature"
+  },
+  mushroom: {
+    keywords: [ "plant", "vegetable" ],
+    "char": "\ud83c\udf44",
+    fitzpatrick_scale: false,
+    category: "animals_and_nature"
+  },
+  chestnut: {
+    keywords: [ "food", "squirrel" ],
+    "char": "\ud83c\udf30",
+    fitzpatrick_scale: false,
+    category: "animals_and_nature"
+  },
+  jack_o_lantern: {
+    keywords: [ "halloween", "light", "pumpkin", "creepy", "fall" ],
+    "char": "\ud83c\udf83",
+    fitzpatrick_scale: false,
+    category: "animals_and_nature"
+  },
+  shell: {
+    keywords: [ "nature", "sea", "beach" ],
+    "char": "\ud83d\udc1a",
+    fitzpatrick_scale: false,
+    category: "animals_and_nature"
+  },
+  spider_web: {
+    keywords: [ "animal", "insect", "arachnid", "silk" ],
+    "char": "\ud83d\udd78",
+    fitzpatrick_scale: false,
+    category: "animals_and_nature"
+  },
+  earth_americas: {
+    keywords: [ "globe", "world", "USA", "international" ],
+    "char": "\ud83c\udf0e",
+    fitzpatrick_scale: false,
+    category: "animals_and_nature"
+  },
+  earth_africa: {
+    keywords: [ "globe", "world", "international" ],
+    "char": "\ud83c\udf0d",
+    fitzpatrick_scale: false,
+    category: "animals_and_nature"
+  },
+  earth_asia: {
+    keywords: [ "globe", "world", "east", "international" ],
+    "char": "\ud83c\udf0f",
+    fitzpatrick_scale: false,
+    category: "animals_and_nature"
+  },
+  full_moon: {
+    keywords: [ "nature", "yellow", "twilight", "planet", "space", "night", "evening", "sleep" ],
+    "char": "\ud83c\udf15",
+    fitzpatrick_scale: false,
+    category: "animals_and_nature"
+  },
+  waning_gibbous_moon: {
+    keywords: [ "nature", "twilight", "planet", "space", "night", "evening", "sleep", "waxing_gibbous_moon" ],
+    "char": "\ud83c\udf16",
+    fitzpatrick_scale: false,
+    category: "animals_and_nature"
+  },
+  last_quarter_moon: {
+    keywords: [ "nature", "twilight", "planet", "space", "night", "evening", "sleep" ],
+    "char": "\ud83c\udf17",
+    fitzpatrick_scale: false,
+    category: "animals_and_nature"
+  },
+  waning_crescent_moon: {
+    keywords: [ "nature", "twilight", "planet", "space", "night", "evening", "sleep" ],
+    "char": "\ud83c\udf18",
+    fitzpatrick_scale: false,
+    category: "animals_and_nature"
+  },
+  new_moon: {
+    keywords: [ "nature", "twilight", "planet", "space", "night", "evening", "sleep" ],
+    "char": "\ud83c\udf11",
+    fitzpatrick_scale: false,
+    category: "animals_and_nature"
+  },
+  waxing_crescent_moon: {
+    keywords: [ "nature", "twilight", "planet", "space", "night", "evening", "sleep" ],
+    "char": "\ud83c\udf12",
+    fitzpatrick_scale: false,
+    category: "animals_and_nature"
+  },
+  first_quarter_moon: {
+    keywords: [ "nature", "twilight", "planet", "space", "night", "evening", "sleep" ],
+    "char": "\ud83c\udf13",
+    fitzpatrick_scale: false,
+    category: "animals_and_nature"
+  },
+  waxing_gibbous_moon: {
+    keywords: [ "nature", "night", "sky", "gray", "twilight", "planet", "space", "evening", "sleep" ],
+    "char": "\ud83c\udf14",
+    fitzpatrick_scale: false,
+    category: "animals_and_nature"
+  },
+  new_moon_with_face: {
+    keywords: [ "nature", "twilight", "planet", "space", "night", "evening", "sleep" ],
+    "char": "\ud83c\udf1a",
+    fitzpatrick_scale: false,
+    category: "animals_and_nature"
+  },
+  full_moon_with_face: {
+    keywords: [ "nature", "twilight", "planet", "space", "night", "evening", "sleep" ],
+    "char": "\ud83c\udf1d",
+    fitzpatrick_scale: false,
+    category: "animals_and_nature"
+  },
+  first_quarter_moon_with_face: {
+    keywords: [ "nature", "twilight", "planet", "space", "night", "evening", "sleep" ],
+    "char": "\ud83c\udf1b",
+    fitzpatrick_scale: false,
+    category: "animals_and_nature"
+  },
+  last_quarter_moon_with_face: {
+    keywords: [ "nature", "twilight", "planet", "space", "night", "evening", "sleep" ],
+    "char": "\ud83c\udf1c",
+    fitzpatrick_scale: false,
+    category: "animals_and_nature"
+  },
+  sun_with_face: {
+    keywords: [ "nature", "morning", "sky" ],
+    "char": "\ud83c\udf1e",
+    fitzpatrick_scale: false,
+    category: "animals_and_nature"
+  },
+  crescent_moon: {
+    keywords: [ "night", "sleep", "sky", "evening", "magic" ],
+    "char": "\ud83c\udf19",
+    fitzpatrick_scale: false,
+    category: "animals_and_nature"
+  },
+  star: {
+    keywords: [ "night", "yellow" ],
+    "char": "\u2b50",
+    fitzpatrick_scale: false,
+    category: "animals_and_nature"
+  },
+  star2: {
+    keywords: [ "night", "sparkle", "awesome", "good", "magic" ],
+    "char": "\ud83c\udf1f",
+    fitzpatrick_scale: false,
+    category: "animals_and_nature"
+  },
+  dizzy: {
+    keywords: [ "star", "sparkle", "shoot", "magic" ],
+    "char": "\ud83d\udcab",
+    fitzpatrick_scale: false,
+    category: "animals_and_nature"
+  },
+  sparkles: {
+    keywords: [ "stars", "shine", "shiny", "cool", "awesome", "good", "magic" ],
+    "char": "\u2728",
+    fitzpatrick_scale: false,
+    category: "animals_and_nature"
+  },
+  comet: {
+    keywords: [ "space" ],
+    "char": "\u2604",
+    fitzpatrick_scale: false,
+    category: "animals_and_nature"
+  },
+  sunny: {
+    keywords: [ "weather", "nature", "brightness", "summer", "beach", "spring" ],
+    "char": "\u2600\ufe0f",
+    fitzpatrick_scale: false,
+    category: "animals_and_nature"
+  },
+  sun_behind_small_cloud: {
+    keywords: [ "weather" ],
+    "char": "\ud83c\udf24",
+    fitzpatrick_scale: false,
+    category: "animals_and_nature"
+  },
+  partly_sunny: {
+    keywords: [ "weather", "nature", "cloudy", "morning", "fall", "spring" ],
+    "char": "\u26c5",
+    fitzpatrick_scale: false,
+    category: "animals_and_nature"
+  },
+  sun_behind_large_cloud: {
+    keywords: [ "weather" ],
+    "char": "\ud83c\udf25",
+    fitzpatrick_scale: false,
+    category: "animals_and_nature"
+  },
+  sun_behind_rain_cloud: {
+    keywords: [ "weather" ],
+    "char": "\ud83c\udf26",
+    fitzpatrick_scale: false,
+    category: "animals_and_nature"
+  },
+  cloud: {
+    keywords: [ "weather", "sky" ],
+    "char": "\u2601\ufe0f",
+    fitzpatrick_scale: false,
+    category: "animals_and_nature"
+  },
+  cloud_with_rain: {
+    keywords: [ "weather" ],
+    "char": "\ud83c\udf27",
+    fitzpatrick_scale: false,
+    category: "animals_and_nature"
+  },
+  cloud_with_lightning_and_rain: {
+    keywords: [ "weather", "lightning" ],
+    "char": "\u26c8",
+    fitzpatrick_scale: false,
+    category: "animals_and_nature"
+  },
+  cloud_with_lightning: {
+    keywords: [ "weather", "thunder" ],
+    "char": "\ud83c\udf29",
+    fitzpatrick_scale: false,
+    category: "animals_and_nature"
+  },
+  zap: {
+    keywords: [ "thunder", "weather", "lightning bolt", "fast" ],
+    "char": "\u26a1",
+    fitzpatrick_scale: false,
+    category: "animals_and_nature"
+  },
+  fire: {
+    keywords: [ "hot", "cook", "flame" ],
+    "char": "\ud83d\udd25",
+    fitzpatrick_scale: false,
+    category: "animals_and_nature"
+  },
+  boom: {
+    keywords: [ "bomb", "explode", "explosion", "collision", "blown" ],
+    "char": "\ud83d\udca5",
+    fitzpatrick_scale: false,
+    category: "animals_and_nature"
+  },
+  snowflake: {
+    keywords: [ "winter", "season", "cold", "weather", "christmas", "xmas" ],
+    "char": "\u2744\ufe0f",
+    fitzpatrick_scale: false,
+    category: "animals_and_nature"
+  },
+  cloud_with_snow: {
+    keywords: [ "weather" ],
+    "char": "\ud83c\udf28",
+    fitzpatrick_scale: false,
+    category: "animals_and_nature"
+  },
+  snowman: {
+    keywords: [ "winter", "season", "cold", "weather", "christmas", "xmas", "frozen", "without_snow" ],
+    "char": "\u26c4",
+    fitzpatrick_scale: false,
+    category: "animals_and_nature"
+  },
+  snowman_with_snow: {
+    keywords: [ "winter", "season", "cold", "weather", "christmas", "xmas", "frozen" ],
+    "char": "\u2603",
+    fitzpatrick_scale: false,
+    category: "animals_and_nature"
+  },
+  wind_face: {
+    keywords: [ "gust", "air" ],
+    "char": "\ud83c\udf2c",
+    fitzpatrick_scale: false,
+    category: "animals_and_nature"
+  },
+  dash: {
+    keywords: [ "wind", "air", "fast", "shoo", "fart", "smoke", "puff" ],
+    "char": "\ud83d\udca8",
+    fitzpatrick_scale: false,
+    category: "animals_and_nature"
+  },
+  tornado: {
+    keywords: [ "weather", "cyclone", "twister" ],
+    "char": "\ud83c\udf2a",
+    fitzpatrick_scale: false,
+    category: "animals_and_nature"
+  },
+  fog: {
+    keywords: [ "weather" ],
+    "char": "\ud83c\udf2b",
+    fitzpatrick_scale: false,
+    category: "animals_and_nature"
+  },
+  open_umbrella: {
+    keywords: [ "weather", "spring" ],
+    "char": "\u2602",
+    fitzpatrick_scale: false,
+    category: "animals_and_nature"
+  },
+  umbrella: {
+    keywords: [ "rainy", "weather", "spring" ],
+    "char": "\u2614",
+    fitzpatrick_scale: false,
+    category: "animals_and_nature"
+  },
+  droplet: {
+    keywords: [ "water", "drip", "faucet", "spring" ],
+    "char": "\ud83d\udca7",
+    fitzpatrick_scale: false,
+    category: "animals_and_nature"
+  },
+  sweat_drops: {
+    keywords: [ "water", "drip", "oops" ],
+    "char": "\ud83d\udca6",
+    fitzpatrick_scale: false,
+    category: "animals_and_nature"
+  },
+  ocean: {
+    keywords: [ "sea", "water", "wave", "nature", "tsunami", "disaster" ],
+    "char": "\ud83c\udf0a",
+    fitzpatrick_scale: false,
+    category: "animals_and_nature"
+  },
+  green_apple: {
+    keywords: [ "fruit", "nature" ],
+    "char": "\ud83c\udf4f",
+    fitzpatrick_scale: false,
+    category: "food_and_drink"
+  },
+  apple: {
+    keywords: [ "fruit", "mac", "school" ],
+    "char": "\ud83c\udf4e",
+    fitzpatrick_scale: false,
+    category: "food_and_drink"
+  },
+  pear: {
+    keywords: [ "fruit", "nature", "food" ],
+    "char": "\ud83c\udf50",
+    fitzpatrick_scale: false,
+    category: "food_and_drink"
+  },
+  tangerine: {
+    keywords: [ "food", "fruit", "nature", "orange" ],
+    "char": "\ud83c\udf4a",
+    fitzpatrick_scale: false,
+    category: "food_and_drink"
+  },
+  lemon: {
+    keywords: [ "fruit", "nature" ],
+    "char": "\ud83c\udf4b",
+    fitzpatrick_scale: false,
+    category: "food_and_drink"
+  },
+  banana: {
+    keywords: [ "fruit", "food", "monkey" ],
+    "char": "\ud83c\udf4c",
+    fitzpatrick_scale: false,
+    category: "food_and_drink"
+  },
+  watermelon: {
+    keywords: [ "fruit", "food", "picnic", "summer" ],
+    "char": "\ud83c\udf49",
+    fitzpatrick_scale: false,
+    category: "food_and_drink"
+  },
+  grapes: {
+    keywords: [ "fruit", "food", "wine" ],
+    "char": "\ud83c\udf47",
+    fitzpatrick_scale: false,
+    category: "food_and_drink"
+  },
+  strawberry: {
+    keywords: [ "fruit", "food", "nature" ],
+    "char": "\ud83c\udf53",
+    fitzpatrick_scale: false,
+    category: "food_and_drink"
+  },
+  melon: {
+    keywords: [ "fruit", "nature", "food" ],
+    "char": "\ud83c\udf48",
+    fitzpatrick_scale: false,
+    category: "food_and_drink"
+  },
+  cherries: {
+    keywords: [ "food", "fruit" ],
+    "char": "\ud83c\udf52",
+    fitzpatrick_scale: false,
+    category: "food_and_drink"
+  },
+  peach: {
+    keywords: [ "fruit", "nature", "food" ],
+    "char": "\ud83c\udf51",
+    fitzpatrick_scale: false,
+    category: "food_and_drink"
+  },
+  pineapple: {
+    keywords: [ "fruit", "nature", "food" ],
+    "char": "\ud83c\udf4d",
+    fitzpatrick_scale: false,
+    category: "food_and_drink"
+  },
+  coconut: {
+    keywords: [ "fruit", "nature", "food", "palm" ],
+    "char": "\ud83e\udd65",
+    fitzpatrick_scale: false,
+    category: "food_and_drink"
+  },
+  kiwi_fruit: {
+    keywords: [ "fruit", "food" ],
+    "char": "\ud83e\udd5d",
+    fitzpatrick_scale: false,
+    category: "food_and_drink"
+  },
+  avocado: {
+    keywords: [ "fruit", "food" ],
+    "char": "\ud83e\udd51",
+    fitzpatrick_scale: false,
+    category: "food_and_drink"
+  },
+  broccoli: {
+    keywords: [ "fruit", "food", "vegetable" ],
+    "char": "\ud83e\udd66",
+    fitzpatrick_scale: false,
+    category: "food_and_drink"
+  },
+  tomato: {
+    keywords: [ "fruit", "vegetable", "nature", "food" ],
+    "char": "\ud83c\udf45",
+    fitzpatrick_scale: false,
+    category: "food_and_drink"
+  },
+  eggplant: {
+    keywords: [ "vegetable", "nature", "food", "aubergine" ],
+    "char": "\ud83c\udf46",
+    fitzpatrick_scale: false,
+    category: "food_and_drink"
+  },
+  cucumber: {
+    keywords: [ "fruit", "food", "pickle" ],
+    "char": "\ud83e\udd52",
+    fitzpatrick_scale: false,
+    category: "food_and_drink"
+  },
+  carrot: {
+    keywords: [ "vegetable", "food", "orange" ],
+    "char": "\ud83e\udd55",
+    fitzpatrick_scale: false,
+    category: "food_and_drink"
+  },
+  hot_pepper: {
+    keywords: [ "food", "spicy", "chilli", "chili" ],
+    "char": "\ud83c\udf36",
+    fitzpatrick_scale: false,
+    category: "food_and_drink"
+  },
+  potato: {
+    keywords: [ "food", "tuber", "vegatable", "starch" ],
+    "char": "\ud83e\udd54",
+    fitzpatrick_scale: false,
+    category: "food_and_drink"
+  },
+  corn: {
+    keywords: [ "food", "vegetable", "plant" ],
+    "char": "\ud83c\udf3d",
+    fitzpatrick_scale: false,
+    category: "food_and_drink"
+  },
+  sweet_potato: {
+    keywords: [ "food", "nature" ],
+    "char": "\ud83c\udf60",
+    fitzpatrick_scale: false,
+    category: "food_and_drink"
+  },
+  peanuts: {
+    keywords: [ "food", "nut" ],
+    "char": "\ud83e\udd5c",
+    fitzpatrick_scale: false,
+    category: "food_and_drink"
+  },
+  honey_pot: {
+    keywords: [ "bees", "sweet", "kitchen" ],
+    "char": "\ud83c\udf6f",
+    fitzpatrick_scale: false,
+    category: "food_and_drink"
+  },
+  croissant: {
+    keywords: [ "food", "bread", "french" ],
+    "char": "\ud83e\udd50",
+    fitzpatrick_scale: false,
+    category: "food_and_drink"
+  },
+  bread: {
+    keywords: [ "food", "wheat", "breakfast", "toast" ],
+    "char": "\ud83c\udf5e",
+    fitzpatrick_scale: false,
+    category: "food_and_drink"
+  },
+  baguette_bread: {
+    keywords: [ "food", "bread", "french" ],
+    "char": "\ud83e\udd56",
+    fitzpatrick_scale: false,
+    category: "food_and_drink"
+  },
+  pretzel: {
+    keywords: [ "food", "bread", "twisted" ],
+    "char": "\ud83e\udd68",
+    fitzpatrick_scale: false,
+    category: "food_and_drink"
+  },
+  cheese: {
+    keywords: [ "food", "chadder" ],
+    "char": "\ud83e\uddc0",
+    fitzpatrick_scale: false,
+    category: "food_and_drink"
+  },
+  egg: {
+    keywords: [ "food", "chicken", "breakfast" ],
+    "char": "\ud83e\udd5a",
+    fitzpatrick_scale: false,
+    category: "food_and_drink"
+  },
+  bacon: {
+    keywords: [ "food", "breakfast", "pork", "pig", "meat" ],
+    "char": "\ud83e\udd53",
+    fitzpatrick_scale: false,
+    category: "food_and_drink"
+  },
+  steak: {
+    keywords: [ "food", "cow", "meat", "cut", "chop", "lambchop", "porkchop" ],
+    "char": "\ud83e\udd69",
+    fitzpatrick_scale: false,
+    category: "food_and_drink"
+  },
+  pancakes: {
+    keywords: [ "food", "breakfast", "flapjacks", "hotcakes" ],
+    "char": "\ud83e\udd5e",
+    fitzpatrick_scale: false,
+    category: "food_and_drink"
+  },
+  poultry_leg: {
+    keywords: [ "food", "meat", "drumstick", "bird", "chicken", "turkey" ],
+    "char": "\ud83c\udf57",
+    fitzpatrick_scale: false,
+    category: "food_and_drink"
+  },
+  meat_on_bone: {
+    keywords: [ "good", "food", "drumstick" ],
+    "char": "\ud83c\udf56",
+    fitzpatrick_scale: false,
+    category: "food_and_drink"
+  },
+  fried_shrimp: {
+    keywords: [ "food", "animal", "appetizer", "summer" ],
+    "char": "\ud83c\udf64",
+    fitzpatrick_scale: false,
+    category: "food_and_drink"
+  },
+  fried_egg: {
+    keywords: [ "food", "breakfast", "kitchen", "egg" ],
+    "char": "\ud83c\udf73",
+    fitzpatrick_scale: false,
+    category: "food_and_drink"
+  },
+  hamburger: {
+    keywords: [ "meat", "fast food", "beef", "cheeseburger", "mcdonalds", "burger king" ],
+    "char": "\ud83c\udf54",
+    fitzpatrick_scale: false,
+    category: "food_and_drink"
+  },
+  fries: {
+    keywords: [ "chips", "snack", "fast food" ],
+    "char": "\ud83c\udf5f",
+    fitzpatrick_scale: false,
+    category: "food_and_drink"
+  },
+  stuffed_flatbread: {
+    keywords: [ "food", "flatbread", "stuffed", "gyro" ],
+    "char": "\ud83e\udd59",
+    fitzpatrick_scale: false,
+    category: "food_and_drink"
+  },
+  hotdog: {
+    keywords: [ "food", "frankfurter" ],
+    "char": "\ud83c\udf2d",
+    fitzpatrick_scale: false,
+    category: "food_and_drink"
+  },
+  pizza: {
+    keywords: [ "food", "party" ],
+    "char": "\ud83c\udf55",
+    fitzpatrick_scale: false,
+    category: "food_and_drink"
+  },
+  sandwich: {
+    keywords: [ "food", "lunch", "bread" ],
+    "char": "\ud83e\udd6a",
+    fitzpatrick_scale: false,
+    category: "food_and_drink"
+  },
+  canned_food: {
+    keywords: [ "food", "soup" ],
+    "char": "\ud83e\udd6b",
+    fitzpatrick_scale: false,
+    category: "food_and_drink"
+  },
+  spaghetti: {
+    keywords: [ "food", "italian", "noodle" ],
+    "char": "\ud83c\udf5d",
+    fitzpatrick_scale: false,
+    category: "food_and_drink"
+  },
+  taco: {
+    keywords: [ "food", "mexican" ],
+    "char": "\ud83c\udf2e",
+    fitzpatrick_scale: false,
+    category: "food_and_drink"
+  },
+  burrito: {
+    keywords: [ "food", "mexican" ],
+    "char": "\ud83c\udf2f",
+    fitzpatrick_scale: false,
+    category: "food_and_drink"
+  },
+  green_salad: {
+    keywords: [ "food", "healthy", "lettuce" ],
+    "char": "\ud83e\udd57",
+    fitzpatrick_scale: false,
+    category: "food_and_drink"
+  },
+  shallow_pan_of_food: {
+    keywords: [ "food", "cooking", "casserole", "paella" ],
+    "char": "\ud83e\udd58",
+    fitzpatrick_scale: false,
+    category: "food_and_drink"
+  },
+  ramen: {
+    keywords: [ "food", "japanese", "noodle", "chopsticks" ],
+    "char": "\ud83c\udf5c",
+    fitzpatrick_scale: false,
+    category: "food_and_drink"
+  },
+  stew: {
+    keywords: [ "food", "meat", "soup" ],
+    "char": "\ud83c\udf72",
+    fitzpatrick_scale: false,
+    category: "food_and_drink"
+  },
+  fish_cake: {
+    keywords: [ "food", "japan", "sea", "beach", "narutomaki", "pink", "swirl", "kamaboko", "surimi", "ramen" ],
+    "char": "\ud83c\udf65",
+    fitzpatrick_scale: false,
+    category: "food_and_drink"
+  },
+  fortune_cookie: {
+    keywords: [ "food", "prophecy" ],
+    "char": "\ud83e\udd60",
+    fitzpatrick_scale: false,
+    category: "food_and_drink"
+  },
+  sushi: {
+    keywords: [ "food", "fish", "japanese", "rice" ],
+    "char": "\ud83c\udf63",
+    fitzpatrick_scale: false,
+    category: "food_and_drink"
+  },
+  bento: {
+    keywords: [ "food", "japanese", "box" ],
+    "char": "\ud83c\udf71",
+    fitzpatrick_scale: false,
+    category: "food_and_drink"
+  },
+  curry: {
+    keywords: [ "food", "spicy", "hot", "indian" ],
+    "char": "\ud83c\udf5b",
+    fitzpatrick_scale: false,
+    category: "food_and_drink"
+  },
+  rice_ball: {
+    keywords: [ "food", "japanese" ],
+    "char": "\ud83c\udf59",
+    fitzpatrick_scale: false,
+    category: "food_and_drink"
+  },
+  rice: {
+    keywords: [ "food", "china", "asian" ],
+    "char": "\ud83c\udf5a",
+    fitzpatrick_scale: false,
+    category: "food_and_drink"
+  },
+  rice_cracker: {
+    keywords: [ "food", "japanese" ],
+    "char": "\ud83c\udf58",
+    fitzpatrick_scale: false,
+    category: "food_and_drink"
+  },
+  oden: {
+    keywords: [ "food", "japanese" ],
+    "char": "\ud83c\udf62",
+    fitzpatrick_scale: false,
+    category: "food_and_drink"
+  },
+  dango: {
+    keywords: [ "food", "dessert", "sweet", "japanese", "barbecue", "meat" ],
+    "char": "\ud83c\udf61",
+    fitzpatrick_scale: false,
+    category: "food_and_drink"
+  },
+  shaved_ice: {
+    keywords: [ "hot", "dessert", "summer" ],
+    "char": "\ud83c\udf67",
+    fitzpatrick_scale: false,
+    category: "food_and_drink"
+  },
+  ice_cream: {
+    keywords: [ "food", "hot", "dessert" ],
+    "char": "\ud83c\udf68",
+    fitzpatrick_scale: false,
+    category: "food_and_drink"
+  },
+  icecream: {
+    keywords: [ "food", "hot", "dessert", "summer" ],
+    "char": "\ud83c\udf66",
+    fitzpatrick_scale: false,
+    category: "food_and_drink"
+  },
+  pie: {
+    keywords: [ "food", "dessert", "pastry" ],
+    "char": "\ud83e\udd67",
+    fitzpatrick_scale: false,
+    category: "food_and_drink"
+  },
+  cake: {
+    keywords: [ "food", "dessert" ],
+    "char": "\ud83c\udf70",
+    fitzpatrick_scale: false,
+    category: "food_and_drink"
+  },
+  birthday: {
+    keywords: [ "food", "dessert", "cake" ],
+    "char": "\ud83c\udf82",
+    fitzpatrick_scale: false,
+    category: "food_and_drink"
+  },
+  custard: {
+    keywords: [ "dessert", "food" ],
+    "char": "\ud83c\udf6e",
+    fitzpatrick_scale: false,
+    category: "food_and_drink"
+  },
+  candy: {
+    keywords: [ "snack", "dessert", "sweet", "lolly" ],
+    "char": "\ud83c\udf6c",
+    fitzpatrick_scale: false,
+    category: "food_and_drink"
+  },
+  lollipop: {
+    keywords: [ "food", "snack", "candy", "sweet" ],
+    "char": "\ud83c\udf6d",
+    fitzpatrick_scale: false,
+    category: "food_and_drink"
+  },
+  chocolate_bar: {
+    keywords: [ "food", "snack", "dessert", "sweet" ],
+    "char": "\ud83c\udf6b",
+    fitzpatrick_scale: false,
+    category: "food_and_drink"
+  },
+  popcorn: {
+    keywords: [ "food", "movie theater", "films", "snack" ],
+    "char": "\ud83c\udf7f",
+    fitzpatrick_scale: false,
+    category: "food_and_drink"
+  },
+  dumpling: {
+    keywords: [ "food", "empanada", "pierogi", "potsticker" ],
+    "char": "\ud83e\udd5f",
+    fitzpatrick_scale: false,
+    category: "food_and_drink"
+  },
+  doughnut: {
+    keywords: [ "food", "dessert", "snack", "sweet", "donut" ],
+    "char": "\ud83c\udf69",
+    fitzpatrick_scale: false,
+    category: "food_and_drink"
+  },
+  cookie: {
+    keywords: [ "food", "snack", "oreo", "chocolate", "sweet", "dessert" ],
+    "char": "\ud83c\udf6a",
+    fitzpatrick_scale: false,
+    category: "food_and_drink"
+  },
+  milk_glass: {
+    keywords: [ "beverage", "drink", "cow" ],
+    "char": "\ud83e\udd5b",
+    fitzpatrick_scale: false,
+    category: "food_and_drink"
+  },
+  beer: {
+    keywords: [ "relax", "beverage", "drink", "drunk", "party", "pub", "summer", "alcohol", "booze" ],
+    "char": "\ud83c\udf7a",
+    fitzpatrick_scale: false,
+    category: "food_and_drink"
+  },
+  beers: {
+    keywords: [ "relax", "beverage", "drink", "drunk", "party", "pub", "summer", "alcohol", "booze" ],
+    "char": "\ud83c\udf7b",
+    fitzpatrick_scale: false,
+    category: "food_and_drink"
+  },
+  clinking_glasses: {
+    keywords: [ "beverage", "drink", "party", "alcohol", "celebrate", "cheers", "wine", "champagne", "toast" ],
+    "char": "\ud83e\udd42",
+    fitzpatrick_scale: false,
+    category: "food_and_drink"
+  },
+  wine_glass: {
+    keywords: [ "drink", "beverage", "drunk", "alcohol", "booze" ],
+    "char": "\ud83c\udf77",
+    fitzpatrick_scale: false,
+    category: "food_and_drink"
+  },
+  tumbler_glass: {
+    keywords: [ "drink", "beverage", "drunk", "alcohol", "liquor", "booze", "bourbon", "scotch", "whisky", "glass", "shot" ],
+    "char": "\ud83e\udd43",
+    fitzpatrick_scale: false,
+    category: "food_and_drink"
+  },
+  cocktail: {
+    keywords: [ "drink", "drunk", "alcohol", "beverage", "booze", "mojito" ],
+    "char": "\ud83c\udf78",
+    fitzpatrick_scale: false,
+    category: "food_and_drink"
+  },
+  tropical_drink: {
+    keywords: [ "beverage", "cocktail", "summer", "beach", "alcohol", "booze", "mojito" ],
+    "char": "\ud83c\udf79",
+    fitzpatrick_scale: false,
+    category: "food_and_drink"
+  },
+  champagne: {
+    keywords: [ "drink", "wine", "bottle", "celebration" ],
+    "char": "\ud83c\udf7e",
+    fitzpatrick_scale: false,
+    category: "food_and_drink"
+  },
+  sake: {
+    keywords: [ "wine", "drink", "drunk", "beverage", "japanese", "alcohol", "booze" ],
+    "char": "\ud83c\udf76",
+    fitzpatrick_scale: false,
+    category: "food_and_drink"
+  },
+  tea: {
+    keywords: [ "drink", "bowl", "breakfast", "green", "british" ],
+    "char": "\ud83c\udf75",
+    fitzpatrick_scale: false,
+    category: "food_and_drink"
+  },
+  cup_with_straw: {
+    keywords: [ "drink", "soda" ],
+    "char": "\ud83e\udd64",
+    fitzpatrick_scale: false,
+    category: "food_and_drink"
+  },
+  coffee: {
+    keywords: [ "beverage", "caffeine", "latte", "espresso" ],
+    "char": "\u2615",
+    fitzpatrick_scale: false,
+    category: "food_and_drink"
+  },
+  baby_bottle: {
+    keywords: [ "food", "container", "milk" ],
+    "char": "\ud83c\udf7c",
+    fitzpatrick_scale: false,
+    category: "food_and_drink"
+  },
+  spoon: {
+    keywords: [ "cutlery", "kitchen", "tableware" ],
+    "char": "\ud83e\udd44",
+    fitzpatrick_scale: false,
+    category: "food_and_drink"
+  },
+  fork_and_knife: {
+    keywords: [ "cutlery", "kitchen" ],
+    "char": "\ud83c\udf74",
+    fitzpatrick_scale: false,
+    category: "food_and_drink"
+  },
+  plate_with_cutlery: {
+    keywords: [ "food", "eat", "meal", "lunch", "dinner", "restaurant" ],
+    "char": "\ud83c\udf7d",
+    fitzpatrick_scale: false,
+    category: "food_and_drink"
+  },
+  bowl_with_spoon: {
+    keywords: [ "food", "breakfast", "cereal", "oatmeal", "porridge" ],
+    "char": "\ud83e\udd63",
+    fitzpatrick_scale: false,
+    category: "food_and_drink"
+  },
+  takeout_box: {
+    keywords: [ "food", "leftovers" ],
+    "char": "\ud83e\udd61",
+    fitzpatrick_scale: false,
+    category: "food_and_drink"
+  },
+  chopsticks: {
+    keywords: [ "food" ],
+    "char": "\ud83e\udd62",
+    fitzpatrick_scale: false,
+    category: "food_and_drink"
+  },
+  soccer: {
+    keywords: [ "sports", "football" ],
+    "char": "\u26bd",
+    fitzpatrick_scale: false,
+    category: "activity"
+  },
+  basketball: {
+    keywords: [ "sports", "balls", "NBA" ],
+    "char": "\ud83c\udfc0",
+    fitzpatrick_scale: false,
+    category: "activity"
+  },
+  football: {
+    keywords: [ "sports", "balls", "NFL" ],
+    "char": "\ud83c\udfc8",
+    fitzpatrick_scale: false,
+    category: "activity"
+  },
+  baseball: {
+    keywords: [ "sports", "balls" ],
+    "char": "\u26be",
+    fitzpatrick_scale: false,
+    category: "activity"
+  },
+  tennis: {
+    keywords: [ "sports", "balls", "green" ],
+    "char": "\ud83c\udfbe",
+    fitzpatrick_scale: false,
+    category: "activity"
+  },
+  volleyball: {
+    keywords: [ "sports", "balls" ],
+    "char": "\ud83c\udfd0",
+    fitzpatrick_scale: false,
+    category: "activity"
+  },
+  rugby_football: {
+    keywords: [ "sports", "team" ],
+    "char": "\ud83c\udfc9",
+    fitzpatrick_scale: false,
+    category: "activity"
+  },
+  "8ball": {
+    keywords: [ "pool", "hobby", "game", "luck", "magic" ],
+    "char": "\ud83c\udfb1",
+    fitzpatrick_scale: false,
+    category: "activity"
+  },
+  golf: {
+    keywords: [ "sports", "business", "flag", "hole", "summer" ],
+    "char": "\u26f3",
+    fitzpatrick_scale: false,
+    category: "activity"
+  },
+  golfing_woman: {
+    keywords: [ "sports", "business", "woman", "female" ],
+    "char": "\ud83c\udfcc\ufe0f\u200d\u2640\ufe0f",
+    fitzpatrick_scale: false,
+    category: "activity"
+  },
+  golfing_man: {
+    keywords: [ "sports", "business" ],
+    "char": "\ud83c\udfcc",
+    fitzpatrick_scale: true,
+    category: "activity"
+  },
+  ping_pong: {
+    keywords: [ "sports", "pingpong" ],
+    "char": "\ud83c\udfd3",
+    fitzpatrick_scale: false,
+    category: "activity"
+  },
+  badminton: {
+    keywords: [ "sports" ],
+    "char": "\ud83c\udff8",
+    fitzpatrick_scale: false,
+    category: "activity"
+  },
+  goal_net: {
+    keywords: [ "sports" ],
+    "char": "\ud83e\udd45",
+    fitzpatrick_scale: false,
+    category: "activity"
+  },
+  ice_hockey: {
+    keywords: [ "sports" ],
+    "char": "\ud83c\udfd2",
+    fitzpatrick_scale: false,
+    category: "activity"
+  },
+  field_hockey: {
+    keywords: [ "sports" ],
+    "char": "\ud83c\udfd1",
+    fitzpatrick_scale: false,
+    category: "activity"
+  },
+  cricket: {
+    keywords: [ "sports" ],
+    "char": "\ud83c\udfcf",
+    fitzpatrick_scale: false,
+    category: "activity"
+  },
+  ski: {
+    keywords: [ "sports", "winter", "cold", "snow" ],
+    "char": "\ud83c\udfbf",
+    fitzpatrick_scale: false,
+    category: "activity"
+  },
+  skier: {
+    keywords: [ "sports", "winter", "snow" ],
+    "char": "\u26f7",
+    fitzpatrick_scale: false,
+    category: "activity"
+  },
+  snowboarder: {
+    keywords: [ "sports", "winter" ],
+    "char": "\ud83c\udfc2",
+    fitzpatrick_scale: true,
+    category: "activity"
+  },
+  person_fencing: {
+    keywords: [ "sports", "fencing", "sword" ],
+    "char": "\ud83e\udd3a",
+    fitzpatrick_scale: false,
+    category: "activity"
+  },
+  women_wrestling: {
+    keywords: [ "sports", "wrestlers" ],
+    "char": "\ud83e\udd3c\u200d\u2640\ufe0f",
+    fitzpatrick_scale: false,
+    category: "activity"
+  },
+  men_wrestling: {
+    keywords: [ "sports", "wrestlers" ],
+    "char": "\ud83e\udd3c\u200d\u2642\ufe0f",
+    fitzpatrick_scale: false,
+    category: "activity"
+  },
+  woman_cartwheeling: {
+    keywords: [ "gymnastics" ],
+    "char": "\ud83e\udd38\u200d\u2640\ufe0f",
+    fitzpatrick_scale: true,
+    category: "activity"
+  },
+  man_cartwheeling: {
+    keywords: [ "gymnastics" ],
+    "char": "\ud83e\udd38\u200d\u2642\ufe0f",
+    fitzpatrick_scale: true,
+    category: "activity"
+  },
+  woman_playing_handball: {
+    keywords: [ "sports" ],
+    "char": "\ud83e\udd3e\u200d\u2640\ufe0f",
+    fitzpatrick_scale: true,
+    category: "activity"
+  },
+  man_playing_handball: {
+    keywords: [ "sports" ],
+    "char": "\ud83e\udd3e\u200d\u2642\ufe0f",
+    fitzpatrick_scale: true,
+    category: "activity"
+  },
+  ice_skate: {
+    keywords: [ "sports" ],
+    "char": "\u26f8",
+    fitzpatrick_scale: false,
+    category: "activity"
+  },
+  curling_stone: {
+    keywords: [ "sports" ],
+    "char": "\ud83e\udd4c",
+    fitzpatrick_scale: false,
+    category: "activity"
+  },
+  sled: {
+    keywords: [ "sleigh", "luge", "toboggan" ],
+    "char": "\ud83d\udef7",
+    fitzpatrick_scale: false,
+    category: "activity"
+  },
+  bow_and_arrow: {
+    keywords: [ "sports" ],
+    "char": "\ud83c\udff9",
+    fitzpatrick_scale: false,
+    category: "activity"
+  },
+  fishing_pole_and_fish: {
+    keywords: [ "food", "hobby", "summer" ],
+    "char": "\ud83c\udfa3",
+    fitzpatrick_scale: false,
+    category: "activity"
+  },
+  boxing_glove: {
+    keywords: [ "sports", "fighting" ],
+    "char": "\ud83e\udd4a",
+    fitzpatrick_scale: false,
+    category: "activity"
+  },
+  martial_arts_uniform: {
+    keywords: [ "judo", "karate", "taekwondo" ],
+    "char": "\ud83e\udd4b",
+    fitzpatrick_scale: false,
+    category: "activity"
+  },
+  rowing_woman: {
+    keywords: [ "sports", "hobby", "water", "ship", "woman", "female" ],
+    "char": "\ud83d\udea3\u200d\u2640\ufe0f",
+    fitzpatrick_scale: true,
+    category: "activity"
+  },
+  rowing_man: {
+    keywords: [ "sports", "hobby", "water", "ship" ],
+    "char": "\ud83d\udea3",
+    fitzpatrick_scale: true,
+    category: "activity"
+  },
+  climbing_woman: {
+    keywords: [ "sports", "hobby", "woman", "female", "rock" ],
+    "char": "\ud83e\uddd7\u200d\u2640\ufe0f",
+    fitzpatrick_scale: true,
+    category: "activity"
+  },
+  climbing_man: {
+    keywords: [ "sports", "hobby", "man", "male", "rock" ],
+    "char": "\ud83e\uddd7\u200d\u2642\ufe0f",
+    fitzpatrick_scale: true,
+    category: "activity"
+  },
+  swimming_woman: {
+    keywords: [ "sports", "exercise", "human", "athlete", "water", "summer", "woman", "female" ],
+    "char": "\ud83c\udfca\u200d\u2640\ufe0f",
+    fitzpatrick_scale: true,
+    category: "activity"
+  },
+  swimming_man: {
+    keywords: [ "sports", "exercise", "human", "athlete", "water", "summer" ],
+    "char": "\ud83c\udfca",
+    fitzpatrick_scale: true,
+    category: "activity"
+  },
+  woman_playing_water_polo: {
+    keywords: [ "sports", "pool" ],
+    "char": "\ud83e\udd3d\u200d\u2640\ufe0f",
+    fitzpatrick_scale: true,
+    category: "activity"
+  },
+  man_playing_water_polo: {
+    keywords: [ "sports", "pool" ],
+    "char": "\ud83e\udd3d\u200d\u2642\ufe0f",
+    fitzpatrick_scale: true,
+    category: "activity"
+  },
+  woman_in_lotus_position: {
+    keywords: [ "woman", "female", "meditation", "yoga", "serenity", "zen", "mindfulness" ],
+    "char": "\ud83e\uddd8\u200d\u2640\ufe0f",
+    fitzpatrick_scale: true,
+    category: "activity"
+  },
+  man_in_lotus_position: {
+    keywords: [ "man", "male", "meditation", "yoga", "serenity", "zen", "mindfulness" ],
+    "char": "\ud83e\uddd8\u200d\u2642\ufe0f",
+    fitzpatrick_scale: true,
+    category: "activity"
+  },
+  surfing_woman: {
+    keywords: [ "sports", "ocean", "sea", "summer", "beach", "woman", "female" ],
+    "char": "\ud83c\udfc4\u200d\u2640\ufe0f",
+    fitzpatrick_scale: true,
+    category: "activity"
+  },
+  surfing_man: {
+    keywords: [ "sports", "ocean", "sea", "summer", "beach" ],
+    "char": "\ud83c\udfc4",
+    fitzpatrick_scale: true,
+    category: "activity"
+  },
+  bath: {
+    keywords: [ "clean", "shower", "bathroom" ],
+    "char": "\ud83d\udec0",
+    fitzpatrick_scale: true,
+    category: "activity"
+  },
+  basketball_woman: {
+    keywords: [ "sports", "human", "woman", "female" ],
+    "char": "\u26f9\ufe0f\u200d\u2640\ufe0f",
+    fitzpatrick_scale: true,
+    category: "activity"
+  },
+  basketball_man: {
+    keywords: [ "sports", "human" ],
+    "char": "\u26f9",
+    fitzpatrick_scale: true,
+    category: "activity"
+  },
+  weight_lifting_woman: {
+    keywords: [ "sports", "training", "exercise", "woman", "female" ],
+    "char": "\ud83c\udfcb\ufe0f\u200d\u2640\ufe0f",
+    fitzpatrick_scale: true,
+    category: "activity"
+  },
+  weight_lifting_man: {
+    keywords: [ "sports", "training", "exercise" ],
+    "char": "\ud83c\udfcb",
+    fitzpatrick_scale: true,
+    category: "activity"
+  },
+  biking_woman: {
+    keywords: [ "sports", "bike", "exercise", "hipster", "woman", "female" ],
+    "char": "\ud83d\udeb4\u200d\u2640\ufe0f",
+    fitzpatrick_scale: true,
+    category: "activity"
+  },
+  biking_man: {
+    keywords: [ "sports", "bike", "exercise", "hipster" ],
+    "char": "\ud83d\udeb4",
+    fitzpatrick_scale: true,
+    category: "activity"
+  },
+  mountain_biking_woman: {
+    keywords: [ "transportation", "sports", "human", "race", "bike", "woman", "female" ],
+    "char": "\ud83d\udeb5\u200d\u2640\ufe0f",
+    fitzpatrick_scale: true,
+    category: "activity"
+  },
+  mountain_biking_man: {
+    keywords: [ "transportation", "sports", "human", "race", "bike" ],
+    "char": "\ud83d\udeb5",
+    fitzpatrick_scale: true,
+    category: "activity"
+  },
+  horse_racing: {
+    keywords: [ "animal", "betting", "competition", "gambling", "luck" ],
+    "char": "\ud83c\udfc7",
+    fitzpatrick_scale: true,
+    category: "activity"
+  },
+  business_suit_levitating: {
+    keywords: [ "suit", "business", "levitate", "hover", "jump" ],
+    "char": "\ud83d\udd74",
+    fitzpatrick_scale: true,
+    category: "activity"
+  },
+  trophy: {
+    keywords: [ "win", "award", "contest", "place", "ftw", "ceremony" ],
+    "char": "\ud83c\udfc6",
+    fitzpatrick_scale: false,
+    category: "activity"
+  },
+  running_shirt_with_sash: {
+    keywords: [ "play", "pageant" ],
+    "char": "\ud83c\udfbd",
+    fitzpatrick_scale: false,
+    category: "activity"
+  },
+  medal_sports: {
+    keywords: [ "award", "winning" ],
+    "char": "\ud83c\udfc5",
+    fitzpatrick_scale: false,
+    category: "activity"
+  },
+  medal_military: {
+    keywords: [ "award", "winning", "army" ],
+    "char": "\ud83c\udf96",
+    fitzpatrick_scale: false,
+    category: "activity"
+  },
+  "1st_place_medal": {
+    keywords: [ "award", "winning", "first" ],
+    "char": "\ud83e\udd47",
+    fitzpatrick_scale: false,
+    category: "activity"
+  },
+  "2nd_place_medal": {
+    keywords: [ "award", "second" ],
+    "char": "\ud83e\udd48",
+    fitzpatrick_scale: false,
+    category: "activity"
+  },
+  "3rd_place_medal": {
+    keywords: [ "award", "third" ],
+    "char": "\ud83e\udd49",
+    fitzpatrick_scale: false,
+    category: "activity"
+  },
+  reminder_ribbon: {
+    keywords: [ "sports", "cause", "support", "awareness" ],
+    "char": "\ud83c\udf97",
+    fitzpatrick_scale: false,
+    category: "activity"
+  },
+  rosette: {
+    keywords: [ "flower", "decoration", "military" ],
+    "char": "\ud83c\udff5",
+    fitzpatrick_scale: false,
+    category: "activity"
+  },
+  ticket: {
+    keywords: [ "event", "concert", "pass" ],
+    "char": "\ud83c\udfab",
+    fitzpatrick_scale: false,
+    category: "activity"
+  },
+  tickets: {
+    keywords: [ "sports", "concert", "entrance" ],
+    "char": "\ud83c\udf9f",
+    fitzpatrick_scale: false,
+    category: "activity"
+  },
+  performing_arts: {
+    keywords: [ "acting", "theater", "drama" ],
+    "char": "\ud83c\udfad",
+    fitzpatrick_scale: false,
+    category: "activity"
+  },
+  art: {
+    keywords: [ "design", "paint", "draw", "colors" ],
+    "char": "\ud83c\udfa8",
+    fitzpatrick_scale: false,
+    category: "activity"
+  },
+  circus_tent: {
+    keywords: [ "festival", "carnival", "party" ],
+    "char": "\ud83c\udfaa",
+    fitzpatrick_scale: false,
+    category: "activity"
+  },
+  woman_juggling: {
+    keywords: [ "juggle", "balance", "skill", "multitask" ],
+    "char": "\ud83e\udd39\u200d\u2640\ufe0f",
+    fitzpatrick_scale: true,
+    category: "activity"
+  },
+  man_juggling: {
+    keywords: [ "juggle", "balance", "skill", "multitask" ],
+    "char": "\ud83e\udd39\u200d\u2642\ufe0f",
+    fitzpatrick_scale: true,
+    category: "activity"
+  },
+  microphone: {
+    keywords: [ "sound", "music", "PA", "sing", "talkshow" ],
+    "char": "\ud83c\udfa4",
+    fitzpatrick_scale: false,
+    category: "activity"
+  },
+  headphones: {
+    keywords: [ "music", "score", "gadgets" ],
+    "char": "\ud83c\udfa7",
+    fitzpatrick_scale: false,
+    category: "activity"
+  },
+  musical_score: {
+    keywords: [ "treble", "clef", "compose" ],
+    "char": "\ud83c\udfbc",
+    fitzpatrick_scale: false,
+    category: "activity"
+  },
+  musical_keyboard: {
+    keywords: [ "piano", "instrument", "compose" ],
+    "char": "\ud83c\udfb9",
+    fitzpatrick_scale: false,
+    category: "activity"
+  },
+  drum: {
+    keywords: [ "music", "instrument", "drumsticks", "snare" ],
+    "char": "\ud83e\udd41",
+    fitzpatrick_scale: false,
+    category: "activity"
+  },
+  saxophone: {
+    keywords: [ "music", "instrument", "jazz", "blues" ],
+    "char": "\ud83c\udfb7",
+    fitzpatrick_scale: false,
+    category: "activity"
+  },
+  trumpet: {
+    keywords: [ "music", "brass" ],
+    "char": "\ud83c\udfba",
+    fitzpatrick_scale: false,
+    category: "activity"
+  },
+  guitar: {
+    keywords: [ "music", "instrument" ],
+    "char": "\ud83c\udfb8",
+    fitzpatrick_scale: false,
+    category: "activity"
+  },
+  violin: {
+    keywords: [ "music", "instrument", "orchestra", "symphony" ],
+    "char": "\ud83c\udfbb",
+    fitzpatrick_scale: false,
+    category: "activity"
+  },
+  clapper: {
+    keywords: [ "movie", "film", "record" ],
+    "char": "\ud83c\udfac",
+    fitzpatrick_scale: false,
+    category: "activity"
+  },
+  video_game: {
+    keywords: [ "play", "console", "PS4", "controller" ],
+    "char": "\ud83c\udfae",
+    fitzpatrick_scale: false,
+    category: "activity"
+  },
+  space_invader: {
+    keywords: [ "game", "arcade", "play" ],
+    "char": "\ud83d\udc7e",
+    fitzpatrick_scale: false,
+    category: "activity"
+  },
+  dart: {
+    keywords: [ "game", "play", "bar", "target", "bullseye" ],
+    "char": "\ud83c\udfaf",
+    fitzpatrick_scale: false,
+    category: "activity"
+  },
+  game_die: {
+    keywords: [ "dice", "random", "tabletop", "play", "luck" ],
+    "char": "\ud83c\udfb2",
+    fitzpatrick_scale: false,
+    category: "activity"
+  },
+  slot_machine: {
+    keywords: [ "bet", "gamble", "vegas", "fruit machine", "luck", "casino" ],
+    "char": "\ud83c\udfb0",
+    fitzpatrick_scale: false,
+    category: "activity"
+  },
+  bowling: {
+    keywords: [ "sports", "fun", "play" ],
+    "char": "\ud83c\udfb3",
+    fitzpatrick_scale: false,
+    category: "activity"
+  },
+  red_car: {
+    keywords: [ "red", "transportation", "vehicle" ],
+    "char": "\ud83d\ude97",
+    fitzpatrick_scale: false,
+    category: "travel_and_places"
+  },
+  taxi: {
+    keywords: [ "uber", "vehicle", "cars", "transportation" ],
+    "char": "\ud83d\ude95",
+    fitzpatrick_scale: false,
+    category: "travel_and_places"
+  },
+  blue_car: {
+    keywords: [ "transportation", "vehicle" ],
+    "char": "\ud83d\ude99",
+    fitzpatrick_scale: false,
+    category: "travel_and_places"
+  },
+  bus: {
+    keywords: [ "car", "vehicle", "transportation" ],
+    "char": "\ud83d\ude8c",
+    fitzpatrick_scale: false,
+    category: "travel_and_places"
+  },
+  trolleybus: {
+    keywords: [ "bart", "transportation", "vehicle" ],
+    "char": "\ud83d\ude8e",
+    fitzpatrick_scale: false,
+    category: "travel_and_places"
+  },
+  racing_car: {
+    keywords: [ "sports", "race", "fast", "formula", "f1" ],
+    "char": "\ud83c\udfce",
+    fitzpatrick_scale: false,
+    category: "travel_and_places"
+  },
+  police_car: {
+    keywords: [ "vehicle", "cars", "transportation", "law", "legal", "enforcement" ],
+    "char": "\ud83d\ude93",
+    fitzpatrick_scale: false,
+    category: "travel_and_places"
+  },
+  ambulance: {
+    keywords: [ "health", "911", "hospital" ],
+    "char": "\ud83d\ude91",
+    fitzpatrick_scale: false,
+    category: "travel_and_places"
+  },
+  fire_engine: {
+    keywords: [ "transportation", "cars", "vehicle" ],
+    "char": "\ud83d\ude92",
+    fitzpatrick_scale: false,
+    category: "travel_and_places"
+  },
+  minibus: {
+    keywords: [ "vehicle", "car", "transportation" ],
+    "char": "\ud83d\ude90",
+    fitzpatrick_scale: false,
+    category: "travel_and_places"
+  },
+  truck: {
+    keywords: [ "cars", "transportation" ],
+    "char": "\ud83d\ude9a",
+    fitzpatrick_scale: false,
+    category: "travel_and_places"
+  },
+  articulated_lorry: {
+    keywords: [ "vehicle", "cars", "transportation", "express" ],
+    "char": "\ud83d\ude9b",
+    fitzpatrick_scale: false,
+    category: "travel_and_places"
+  },
+  tractor: {
+    keywords: [ "vehicle", "car", "farming", "agriculture" ],
+    "char": "\ud83d\ude9c",
+    fitzpatrick_scale: false,
+    category: "travel_and_places"
+  },
+  kick_scooter: {
+    keywords: [ "vehicle", "kick", "razor" ],
+    "char": "\ud83d\udef4",
+    fitzpatrick_scale: false,
+    category: "travel_and_places"
+  },
+  motorcycle: {
+    keywords: [ "race", "sports", "fast" ],
+    "char": "\ud83c\udfcd",
+    fitzpatrick_scale: false,
+    category: "travel_and_places"
+  },
+  bike: {
+    keywords: [ "sports", "bicycle", "exercise", "hipster" ],
+    "char": "\ud83d\udeb2",
+    fitzpatrick_scale: false,
+    category: "travel_and_places"
+  },
+  motor_scooter: {
+    keywords: [ "vehicle", "vespa", "sasha" ],
+    "char": "\ud83d\udef5",
+    fitzpatrick_scale: false,
+    category: "travel_and_places"
+  },
+  rotating_light: {
+    keywords: [ "police", "ambulance", "911", "emergency", "alert", "error", "pinged", "law", "legal" ],
+    "char": "\ud83d\udea8",
+    fitzpatrick_scale: false,
+    category: "travel_and_places"
+  },
+  oncoming_police_car: {
+    keywords: [ "vehicle", "law", "legal", "enforcement", "911" ],
+    "char": "\ud83d\ude94",
+    fitzpatrick_scale: false,
+    category: "travel_and_places"
+  },
+  oncoming_bus: {
+    keywords: [ "vehicle", "transportation" ],
+    "char": "\ud83d\ude8d",
+    fitzpatrick_scale: false,
+    category: "travel_and_places"
+  },
+  oncoming_automobile: {
+    keywords: [ "car", "vehicle", "transportation" ],
+    "char": "\ud83d\ude98",
+    fitzpatrick_scale: false,
+    category: "travel_and_places"
+  },
+  oncoming_taxi: {
+    keywords: [ "vehicle", "cars", "uber" ],
+    "char": "\ud83d\ude96",
+    fitzpatrick_scale: false,
+    category: "travel_and_places"
+  },
+  aerial_tramway: {
+    keywords: [ "transportation", "vehicle", "ski" ],
+    "char": "\ud83d\udea1",
+    fitzpatrick_scale: false,
+    category: "travel_and_places"
+  },
+  mountain_cableway: {
+    keywords: [ "transportation", "vehicle", "ski" ],
+    "char": "\ud83d\udea0",
+    fitzpatrick_scale: false,
+    category: "travel_and_places"
+  },
+  suspension_railway: {
+    keywords: [ "vehicle", "transportation" ],
+    "char": "\ud83d\ude9f",
+    fitzpatrick_scale: false,
+    category: "travel_and_places"
+  },
+  railway_car: {
+    keywords: [ "transportation", "vehicle" ],
+    "char": "\ud83d\ude83",
+    fitzpatrick_scale: false,
+    category: "travel_and_places"
+  },
+  train: {
+    keywords: [ "transportation", "vehicle", "carriage", "public", "travel" ],
+    "char": "\ud83d\ude8b",
+    fitzpatrick_scale: false,
+    category: "travel_and_places"
+  },
+  monorail: {
+    keywords: [ "transportation", "vehicle" ],
+    "char": "\ud83d\ude9d",
+    fitzpatrick_scale: false,
+    category: "travel_and_places"
+  },
+  bullettrain_side: {
+    keywords: [ "transportation", "vehicle" ],
+    "char": "\ud83d\ude84",
+    fitzpatrick_scale: false,
+    category: "travel_and_places"
+  },
+  bullettrain_front: {
+    keywords: [ "transportation", "vehicle", "speed", "fast", "public", "travel" ],
+    "char": "\ud83d\ude85",
+    fitzpatrick_scale: false,
+    category: "travel_and_places"
+  },
+  light_rail: {
+    keywords: [ "transportation", "vehicle" ],
+    "char": "\ud83d\ude88",
+    fitzpatrick_scale: false,
+    category: "travel_and_places"
+  },
+  mountain_railway: {
+    keywords: [ "transportation", "vehicle" ],
+    "char": "\ud83d\ude9e",
+    fitzpatrick_scale: false,
+    category: "travel_and_places"
+  },
+  steam_locomotive: {
+    keywords: [ "transportation", "vehicle", "train" ],
+    "char": "\ud83d\ude82",
+    fitzpatrick_scale: false,
+    category: "travel_and_places"
+  },
+  train2: {
+    keywords: [ "transportation", "vehicle" ],
+    "char": "\ud83d\ude86",
+    fitzpatrick_scale: false,
+    category: "travel_and_places"
+  },
+  metro: {
+    keywords: [ "transportation", "blue-square", "mrt", "underground", "tube" ],
+    "char": "\ud83d\ude87",
+    fitzpatrick_scale: false,
+    category: "travel_and_places"
+  },
+  tram: {
+    keywords: [ "transportation", "vehicle" ],
+    "char": "\ud83d\ude8a",
+    fitzpatrick_scale: false,
+    category: "travel_and_places"
+  },
+  station: {
+    keywords: [ "transportation", "vehicle", "public" ],
+    "char": "\ud83d\ude89",
+    fitzpatrick_scale: false,
+    category: "travel_and_places"
+  },
+  flying_saucer: {
+    keywords: [ "transportation", "vehicle", "ufo" ],
+    "char": "\ud83d\udef8",
+    fitzpatrick_scale: false,
+    category: "travel_and_places"
+  },
+  helicopter: {
+    keywords: [ "transportation", "vehicle", "fly" ],
+    "char": "\ud83d\ude81",
+    fitzpatrick_scale: false,
+    category: "travel_and_places"
+  },
+  small_airplane: {
+    keywords: [ "flight", "transportation", "fly", "vehicle" ],
+    "char": "\ud83d\udee9",
+    fitzpatrick_scale: false,
+    category: "travel_and_places"
+  },
+  airplane: {
+    keywords: [ "vehicle", "transportation", "flight", "fly" ],
+    "char": "\u2708\ufe0f",
+    fitzpatrick_scale: false,
+    category: "travel_and_places"
+  },
+  flight_departure: {
+    keywords: [ "airport", "flight", "landing" ],
+    "char": "\ud83d\udeeb",
+    fitzpatrick_scale: false,
+    category: "travel_and_places"
+  },
+  flight_arrival: {
+    keywords: [ "airport", "flight", "boarding" ],
+    "char": "\ud83d\udeec",
+    fitzpatrick_scale: false,
+    category: "travel_and_places"
+  },
+  sailboat: {
+    keywords: [ "ship", "summer", "transportation", "water", "sailing" ],
+    "char": "\u26f5",
+    fitzpatrick_scale: false,
+    category: "travel_and_places"
+  },
+  motor_boat: {
+    keywords: [ "ship" ],
+    "char": "\ud83d\udee5",
+    fitzpatrick_scale: false,
+    category: "travel_and_places"
+  },
+  speedboat: {
+    keywords: [ "ship", "transportation", "vehicle", "summer" ],
+    "char": "\ud83d\udea4",
+    fitzpatrick_scale: false,
+    category: "travel_and_places"
+  },
+  ferry: {
+    keywords: [ "boat", "ship", "yacht" ],
+    "char": "\u26f4",
+    fitzpatrick_scale: false,
+    category: "travel_and_places"
+  },
+  passenger_ship: {
+    keywords: [ "yacht", "cruise", "ferry" ],
+    "char": "\ud83d\udef3",
+    fitzpatrick_scale: false,
+    category: "travel_and_places"
+  },
+  rocket: {
+    keywords: [ "launch", "ship", "staffmode", "NASA", "outer space", "outer_space", "fly" ],
+    "char": "\ud83d\ude80",
+    fitzpatrick_scale: false,
+    category: "travel_and_places"
+  },
+  artificial_satellite: {
+    keywords: [ "communication", "gps", "orbit", "spaceflight", "NASA", "ISS" ],
+    "char": "\ud83d\udef0",
+    fitzpatrick_scale: false,
+    category: "travel_and_places"
+  },
+  seat: {
+    keywords: [ "sit", "airplane", "transport", "bus", "flight", "fly" ],
+    "char": "\ud83d\udcba",
+    fitzpatrick_scale: false,
+    category: "travel_and_places"
+  },
+  canoe: {
+    keywords: [ "boat", "paddle", "water", "ship" ],
+    "char": "\ud83d\udef6",
+    fitzpatrick_scale: false,
+    category: "travel_and_places"
+  },
+  anchor: {
+    keywords: [ "ship", "ferry", "sea", "boat" ],
+    "char": "\u2693",
+    fitzpatrick_scale: false,
+    category: "travel_and_places"
+  },
+  construction: {
+    keywords: [ "wip", "progress", "caution", "warning" ],
+    "char": "\ud83d\udea7",
+    fitzpatrick_scale: false,
+    category: "travel_and_places"
+  },
+  fuelpump: {
+    keywords: [ "gas station", "petroleum" ],
+    "char": "\u26fd",
+    fitzpatrick_scale: false,
+    category: "travel_and_places"
+  },
+  busstop: {
+    keywords: [ "transportation", "wait" ],
+    "char": "\ud83d\ude8f",
+    fitzpatrick_scale: false,
+    category: "travel_and_places"
+  },
+  vertical_traffic_light: {
+    keywords: [ "transportation", "driving" ],
+    "char": "\ud83d\udea6",
+    fitzpatrick_scale: false,
+    category: "travel_and_places"
+  },
+  traffic_light: {
+    keywords: [ "transportation", "signal" ],
+    "char": "\ud83d\udea5",
+    fitzpatrick_scale: false,
+    category: "travel_and_places"
+  },
+  checkered_flag: {
+    keywords: [ "contest", "finishline", "race", "gokart" ],
+    "char": "\ud83c\udfc1",
+    fitzpatrick_scale: false,
+    category: "travel_and_places"
+  },
+  ship: {
+    keywords: [ "transportation", "titanic", "deploy" ],
+    "char": "\ud83d\udea2",
+    fitzpatrick_scale: false,
+    category: "travel_and_places"
+  },
+  ferris_wheel: {
+    keywords: [ "photo", "carnival", "londoneye" ],
+    "char": "\ud83c\udfa1",
+    fitzpatrick_scale: false,
+    category: "travel_and_places"
+  },
+  roller_coaster: {
+    keywords: [ "carnival", "playground", "photo", "fun" ],
+    "char": "\ud83c\udfa2",
+    fitzpatrick_scale: false,
+    category: "travel_and_places"
+  },
+  carousel_horse: {
+    keywords: [ "photo", "carnival" ],
+    "char": "\ud83c\udfa0",
+    fitzpatrick_scale: false,
+    category: "travel_and_places"
+  },
+  building_construction: {
+    keywords: [ "wip", "working", "progress" ],
+    "char": "\ud83c\udfd7",
+    fitzpatrick_scale: false,
+    category: "travel_and_places"
+  },
+  foggy: {
+    keywords: [ "photo", "mountain" ],
+    "char": "\ud83c\udf01",
+    fitzpatrick_scale: false,
+    category: "travel_and_places"
+  },
+  tokyo_tower: {
+    keywords: [ "photo", "japanese" ],
+    "char": "\ud83d\uddfc",
+    fitzpatrick_scale: false,
+    category: "travel_and_places"
+  },
+  factory: {
+    keywords: [ "building", "industry", "pollution", "smoke" ],
+    "char": "\ud83c\udfed",
+    fitzpatrick_scale: false,
+    category: "travel_and_places"
+  },
+  fountain: {
+    keywords: [ "photo", "summer", "water", "fresh" ],
+    "char": "\u26f2",
+    fitzpatrick_scale: false,
+    category: "travel_and_places"
+  },
+  rice_scene: {
+    keywords: [ "photo", "japan", "asia", "tsukimi" ],
+    "char": "\ud83c\udf91",
+    fitzpatrick_scale: false,
+    category: "travel_and_places"
+  },
+  mountain: {
+    keywords: [ "photo", "nature", "environment" ],
+    "char": "\u26f0",
+    fitzpatrick_scale: false,
+    category: "travel_and_places"
+  },
+  mountain_snow: {
+    keywords: [ "photo", "nature", "environment", "winter", "cold" ],
+    "char": "\ud83c\udfd4",
+    fitzpatrick_scale: false,
+    category: "travel_and_places"
+  },
+  mount_fuji: {
+    keywords: [ "photo", "mountain", "nature", "japanese" ],
+    "char": "\ud83d\uddfb",
+    fitzpatrick_scale: false,
+    category: "travel_and_places"
+  },
+  volcano: {
+    keywords: [ "photo", "nature", "disaster" ],
+    "char": "\ud83c\udf0b",
+    fitzpatrick_scale: false,
+    category: "travel_and_places"
+  },
+  japan: {
+    keywords: [ "nation", "country", "japanese", "asia" ],
+    "char": "\ud83d\uddfe",
+    fitzpatrick_scale: false,
+    category: "travel_and_places"
+  },
+  camping: {
+    keywords: [ "photo", "outdoors", "tent" ],
+    "char": "\ud83c\udfd5",
+    fitzpatrick_scale: false,
+    category: "travel_and_places"
+  },
+  tent: {
+    keywords: [ "photo", "camping", "outdoors" ],
+    "char": "\u26fa",
+    fitzpatrick_scale: false,
+    category: "travel_and_places"
+  },
+  national_park: {
+    keywords: [ "photo", "environment", "nature" ],
+    "char": "\ud83c\udfde",
+    fitzpatrick_scale: false,
+    category: "travel_and_places"
+  },
+  motorway: {
+    keywords: [ "road", "cupertino", "interstate", "highway" ],
+    "char": "\ud83d\udee3",
+    fitzpatrick_scale: false,
+    category: "travel_and_places"
+  },
+  railway_track: {
+    keywords: [ "train", "transportation" ],
+    "char": "\ud83d\udee4",
+    fitzpatrick_scale: false,
+    category: "travel_and_places"
+  },
+  sunrise: {
+    keywords: [ "morning", "view", "vacation", "photo" ],
+    "char": "\ud83c\udf05",
+    fitzpatrick_scale: false,
+    category: "travel_and_places"
+  },
+  sunrise_over_mountains: {
+    keywords: [ "view", "vacation", "photo" ],
+    "char": "\ud83c\udf04",
+    fitzpatrick_scale: false,
+    category: "travel_and_places"
+  },
+  desert: {
+    keywords: [ "photo", "warm", "saharah" ],
+    "char": "\ud83c\udfdc",
+    fitzpatrick_scale: false,
+    category: "travel_and_places"
+  },
+  beach_umbrella: {
+    keywords: [ "weather", "summer", "sunny", "sand", "mojito" ],
+    "char": "\ud83c\udfd6",
+    fitzpatrick_scale: false,
+    category: "travel_and_places"
+  },
+  desert_island: {
+    keywords: [ "photo", "tropical", "mojito" ],
+    "char": "\ud83c\udfdd",
+    fitzpatrick_scale: false,
+    category: "travel_and_places"
+  },
+  city_sunrise: {
+    keywords: [ "photo", "good morning", "dawn" ],
+    "char": "\ud83c\udf07",
+    fitzpatrick_scale: false,
+    category: "travel_and_places"
+  },
+  city_sunset: {
+    keywords: [ "photo", "evening", "sky", "buildings" ],
+    "char": "\ud83c\udf06",
+    fitzpatrick_scale: false,
+    category: "travel_and_places"
+  },
+  cityscape: {
+    keywords: [ "photo", "night life", "urban" ],
+    "char": "\ud83c\udfd9",
+    fitzpatrick_scale: false,
+    category: "travel_and_places"
+  },
+  night_with_stars: {
+    keywords: [ "evening", "city", "downtown" ],
+    "char": "\ud83c\udf03",
+    fitzpatrick_scale: false,
+    category: "travel_and_places"
+  },
+  bridge_at_night: {
+    keywords: [ "photo", "sanfrancisco" ],
+    "char": "\ud83c\udf09",
+    fitzpatrick_scale: false,
+    category: "travel_and_places"
+  },
+  milky_way: {
+    keywords: [ "photo", "space", "stars" ],
+    "char": "\ud83c\udf0c",
+    fitzpatrick_scale: false,
+    category: "travel_and_places"
+  },
+  stars: {
+    keywords: [ "night", "photo" ],
+    "char": "\ud83c\udf20",
+    fitzpatrick_scale: false,
+    category: "travel_and_places"
+  },
+  sparkler: {
+    keywords: [ "stars", "night", "shine" ],
+    "char": "\ud83c\udf87",
+    fitzpatrick_scale: false,
+    category: "travel_and_places"
+  },
+  fireworks: {
+    keywords: [ "photo", "festival", "carnival", "congratulations" ],
+    "char": "\ud83c\udf86",
+    fitzpatrick_scale: false,
+    category: "travel_and_places"
+  },
+  rainbow: {
+    keywords: [ "nature", "happy", "unicorn_face", "photo", "sky", "spring" ],
+    "char": "\ud83c\udf08",
+    fitzpatrick_scale: false,
+    category: "travel_and_places"
+  },
+  houses: {
+    keywords: [ "buildings", "photo" ],
+    "char": "\ud83c\udfd8",
+    fitzpatrick_scale: false,
+    category: "travel_and_places"
+  },
+  european_castle: {
+    keywords: [ "building", "royalty", "history" ],
+    "char": "\ud83c\udff0",
+    fitzpatrick_scale: false,
+    category: "travel_and_places"
+  },
+  japanese_castle: {
+    keywords: [ "photo", "building" ],
+    "char": "\ud83c\udfef",
+    fitzpatrick_scale: false,
+    category: "travel_and_places"
+  },
+  stadium: {
+    keywords: [ "photo", "place", "sports", "concert", "venue" ],
+    "char": "\ud83c\udfdf",
+    fitzpatrick_scale: false,
+    category: "travel_and_places"
+  },
+  statue_of_liberty: {
+    keywords: [ "american", "newyork" ],
+    "char": "\ud83d\uddfd",
+    fitzpatrick_scale: false,
+    category: "travel_and_places"
+  },
+  house: {
+    keywords: [ "building", "home" ],
+    "char": "\ud83c\udfe0",
+    fitzpatrick_scale: false,
+    category: "travel_and_places"
+  },
+  house_with_garden: {
+    keywords: [ "home", "plant", "nature" ],
+    "char": "\ud83c\udfe1",
+    fitzpatrick_scale: false,
+    category: "travel_and_places"
+  },
+  derelict_house: {
+    keywords: [ "abandon", "evict", "broken", "building" ],
+    "char": "\ud83c\udfda",
+    fitzpatrick_scale: false,
+    category: "travel_and_places"
+  },
+  office: {
+    keywords: [ "building", "bureau", "work" ],
+    "char": "\ud83c\udfe2",
+    fitzpatrick_scale: false,
+    category: "travel_and_places"
+  },
+  department_store: {
+    keywords: [ "building", "shopping", "mall" ],
+    "char": "\ud83c\udfec",
+    fitzpatrick_scale: false,
+    category: "travel_and_places"
+  },
+  post_office: {
+    keywords: [ "building", "envelope", "communication" ],
+    "char": "\ud83c\udfe3",
+    fitzpatrick_scale: false,
+    category: "travel_and_places"
+  },
+  european_post_office: {
+    keywords: [ "building", "email" ],
+    "char": "\ud83c\udfe4",
+    fitzpatrick_scale: false,
+    category: "travel_and_places"
+  },
+  hospital: {
+    keywords: [ "building", "health", "surgery", "doctor" ],
+    "char": "\ud83c\udfe5",
+    fitzpatrick_scale: false,
+    category: "travel_and_places"
+  },
+  bank: {
+    keywords: [ "building", "money", "sales", "cash", "business", "enterprise" ],
+    "char": "\ud83c\udfe6",
+    fitzpatrick_scale: false,
+    category: "travel_and_places"
+  },
+  hotel: {
+    keywords: [ "building", "accomodation", "checkin" ],
+    "char": "\ud83c\udfe8",
+    fitzpatrick_scale: false,
+    category: "travel_and_places"
+  },
+  convenience_store: {
+    keywords: [ "building", "shopping", "groceries" ],
+    "char": "\ud83c\udfea",
+    fitzpatrick_scale: false,
+    category: "travel_and_places"
+  },
+  school: {
+    keywords: [ "building", "student", "education", "learn", "teach" ],
+    "char": "\ud83c\udfeb",
+    fitzpatrick_scale: false,
+    category: "travel_and_places"
+  },
+  love_hotel: {
+    keywords: [ "like", "affection", "dating" ],
+    "char": "\ud83c\udfe9",
+    fitzpatrick_scale: false,
+    category: "travel_and_places"
+  },
+  wedding: {
+    keywords: [ "love", "like", "affection", "couple", "marriage", "bride", "groom" ],
+    "char": "\ud83d\udc92",
+    fitzpatrick_scale: false,
+    category: "travel_and_places"
+  },
+  classical_building: {
+    keywords: [ "art", "culture", "history" ],
+    "char": "\ud83c\udfdb",
+    fitzpatrick_scale: false,
+    category: "travel_and_places"
+  },
+  church: {
+    keywords: [ "building", "religion", "christ" ],
+    "char": "\u26ea",
+    fitzpatrick_scale: false,
+    category: "travel_and_places"
+  },
+  mosque: {
+    keywords: [ "islam", "worship", "minaret" ],
+    "char": "\ud83d\udd4c",
+    fitzpatrick_scale: false,
+    category: "travel_and_places"
+  },
+  synagogue: {
+    keywords: [ "judaism", "worship", "temple", "jewish" ],
+    "char": "\ud83d\udd4d",
+    fitzpatrick_scale: false,
+    category: "travel_and_places"
+  },
+  kaaba: {
+    keywords: [ "mecca", "mosque", "islam" ],
+    "char": "\ud83d\udd4b",
+    fitzpatrick_scale: false,
+    category: "travel_and_places"
+  },
+  shinto_shrine: {
+    keywords: [ "temple", "japan", "kyoto" ],
+    "char": "\u26e9",
+    fitzpatrick_scale: false,
+    category: "travel_and_places"
+  },
+  watch: {
+    keywords: [ "time", "accessories" ],
+    "char": "\u231a",
+    fitzpatrick_scale: false,
+    category: "objects"
+  },
+  iphone: {
+    keywords: [ "technology", "apple", "gadgets", "dial" ],
+    "char": "\ud83d\udcf1",
+    fitzpatrick_scale: false,
+    category: "objects"
+  },
+  calling: {
+    keywords: [ "iphone", "incoming" ],
+    "char": "\ud83d\udcf2",
+    fitzpatrick_scale: false,
+    category: "objects"
+  },
+  computer: {
+    keywords: [ "technology", "laptop", "screen", "display", "monitor" ],
+    "char": "\ud83d\udcbb",
+    fitzpatrick_scale: false,
+    category: "objects"
+  },
+  keyboard: {
+    keywords: [ "technology", "computer", "type", "input", "text" ],
+    "char": "\u2328",
+    fitzpatrick_scale: false,
+    category: "objects"
+  },
+  desktop_computer: {
+    keywords: [ "technology", "computing", "screen" ],
+    "char": "\ud83d\udda5",
+    fitzpatrick_scale: false,
+    category: "objects"
+  },
+  printer: {
+    keywords: [ "paper", "ink" ],
+    "char": "\ud83d\udda8",
+    fitzpatrick_scale: false,
+    category: "objects"
+  },
+  computer_mouse: {
+    keywords: [ "click" ],
+    "char": "\ud83d\uddb1",
+    fitzpatrick_scale: false,
+    category: "objects"
+  },
+  trackball: {
+    keywords: [ "technology", "trackpad" ],
+    "char": "\ud83d\uddb2",
+    fitzpatrick_scale: false,
+    category: "objects"
+  },
+  joystick: {
+    keywords: [ "game", "play" ],
+    "char": "\ud83d\udd79",
+    fitzpatrick_scale: false,
+    category: "objects"
+  },
+  clamp: {
+    keywords: [ "tool" ],
+    "char": "\ud83d\udddc",
+    fitzpatrick_scale: false,
+    category: "objects"
+  },
+  minidisc: {
+    keywords: [ "technology", "record", "data", "disk", "90s" ],
+    "char": "\ud83d\udcbd",
+    fitzpatrick_scale: false,
+    category: "objects"
+  },
+  floppy_disk: {
+    keywords: [ "oldschool", "technology", "save", "90s", "80s" ],
+    "char": "\ud83d\udcbe",
+    fitzpatrick_scale: false,
+    category: "objects"
+  },
+  cd: {
+    keywords: [ "technology", "dvd", "disk", "disc", "90s" ],
+    "char": "\ud83d\udcbf",
+    fitzpatrick_scale: false,
+    category: "objects"
+  },
+  dvd: {
+    keywords: [ "cd", "disk", "disc" ],
+    "char": "\ud83d\udcc0",
+    fitzpatrick_scale: false,
+    category: "objects"
+  },
+  vhs: {
+    keywords: [ "record", "video", "oldschool", "90s", "80s" ],
+    "char": "\ud83d\udcfc",
+    fitzpatrick_scale: false,
+    category: "objects"
+  },
+  camera: {
+    keywords: [ "gadgets", "photography" ],
+    "char": "\ud83d\udcf7",
+    fitzpatrick_scale: false,
+    category: "objects"
+  },
+  camera_flash: {
+    keywords: [ "photography", "gadgets" ],
+    "char": "\ud83d\udcf8",
+    fitzpatrick_scale: false,
+    category: "objects"
+  },
+  video_camera: {
+    keywords: [ "film", "record" ],
+    "char": "\ud83d\udcf9",
+    fitzpatrick_scale: false,
+    category: "objects"
+  },
+  movie_camera: {
+    keywords: [ "film", "record" ],
+    "char": "\ud83c\udfa5",
+    fitzpatrick_scale: false,
+    category: "objects"
+  },
+  film_projector: {
+    keywords: [ "video", "tape", "record", "movie" ],
+    "char": "\ud83d\udcfd",
+    fitzpatrick_scale: false,
+    category: "objects"
+  },
+  film_strip: {
+    keywords: [ "movie" ],
+    "char": "\ud83c\udf9e",
+    fitzpatrick_scale: false,
+    category: "objects"
+  },
+  telephone_receiver: {
+    keywords: [ "technology", "communication", "dial" ],
+    "char": "\ud83d\udcde",
+    fitzpatrick_scale: false,
+    category: "objects"
+  },
+  phone: {
+    keywords: [ "technology", "communication", "dial", "telephone" ],
+    "char": "\u260e\ufe0f",
+    fitzpatrick_scale: false,
+    category: "objects"
+  },
+  pager: {
+    keywords: [ "bbcall", "oldschool", "90s" ],
+    "char": "\ud83d\udcdf",
+    fitzpatrick_scale: false,
+    category: "objects"
+  },
+  fax: {
+    keywords: [ "communication", "technology" ],
+    "char": "\ud83d\udce0",
+    fitzpatrick_scale: false,
+    category: "objects"
+  },
+  tv: {
+    keywords: [ "technology", "program", "oldschool", "show", "television" ],
+    "char": "\ud83d\udcfa",
+    fitzpatrick_scale: false,
+    category: "objects"
+  },
+  radio: {
+    keywords: [ "communication", "music", "podcast", "program" ],
+    "char": "\ud83d\udcfb",
+    fitzpatrick_scale: false,
+    category: "objects"
+  },
+  studio_microphone: {
+    keywords: [ "sing", "recording", "artist", "talkshow" ],
+    "char": "\ud83c\udf99",
+    fitzpatrick_scale: false,
+    category: "objects"
+  },
+  level_slider: {
+    keywords: [ "scale" ],
+    "char": "\ud83c\udf9a",
+    fitzpatrick_scale: false,
+    category: "objects"
+  },
+  control_knobs: {
+    keywords: [ "dial" ],
+    "char": "\ud83c\udf9b",
+    fitzpatrick_scale: false,
+    category: "objects"
+  },
+  stopwatch: {
+    keywords: [ "time", "deadline" ],
+    "char": "\u23f1",
+    fitzpatrick_scale: false,
+    category: "objects"
+  },
+  timer_clock: {
+    keywords: [ "alarm" ],
+    "char": "\u23f2",
+    fitzpatrick_scale: false,
+    category: "objects"
+  },
+  alarm_clock: {
+    keywords: [ "time", "wake" ],
+    "char": "\u23f0",
+    fitzpatrick_scale: false,
+    category: "objects"
+  },
+  mantelpiece_clock: {
+    keywords: [ "time" ],
+    "char": "\ud83d\udd70",
+    fitzpatrick_scale: false,
+    category: "objects"
+  },
+  hourglass_flowing_sand: {
+    keywords: [ "oldschool", "time", "countdown" ],
+    "char": "\u23f3",
+    fitzpatrick_scale: false,
+    category: "objects"
+  },
+  hourglass: {
+    keywords: [ "time", "clock", "oldschool", "limit", "exam", "quiz", "test" ],
+    "char": "\u231b",
+    fitzpatrick_scale: false,
+    category: "objects"
+  },
+  satellite: {
+    keywords: [ "communication", "future", "radio", "space" ],
+    "char": "\ud83d\udce1",
+    fitzpatrick_scale: false,
+    category: "objects"
+  },
+  battery: {
+    keywords: [ "power", "energy", "sustain" ],
+    "char": "\ud83d\udd0b",
+    fitzpatrick_scale: false,
+    category: "objects"
+  },
+  electric_plug: {
+    keywords: [ "charger", "power" ],
+    "char": "\ud83d\udd0c",
+    fitzpatrick_scale: false,
+    category: "objects"
+  },
+  bulb: {
+    keywords: [ "light", "electricity", "idea" ],
+    "char": "\ud83d\udca1",
+    fitzpatrick_scale: false,
+    category: "objects"
+  },
+  flashlight: {
+    keywords: [ "dark", "camping", "sight", "night" ],
+    "char": "\ud83d\udd26",
+    fitzpatrick_scale: false,
+    category: "objects"
+  },
+  candle: {
+    keywords: [ "fire", "wax" ],
+    "char": "\ud83d\udd6f",
+    fitzpatrick_scale: false,
+    category: "objects"
+  },
+  wastebasket: {
+    keywords: [ "bin", "trash", "rubbish", "garbage", "toss" ],
+    "char": "\ud83d\uddd1",
+    fitzpatrick_scale: false,
+    category: "objects"
+  },
+  oil_drum: {
+    keywords: [ "barrell" ],
+    "char": "\ud83d\udee2",
+    fitzpatrick_scale: false,
+    category: "objects"
+  },
+  money_with_wings: {
+    keywords: [ "dollar", "bills", "payment", "sale" ],
+    "char": "\ud83d\udcb8",
+    fitzpatrick_scale: false,
+    category: "objects"
+  },
+  dollar: {
+    keywords: [ "money", "sales", "bill", "currency" ],
+    "char": "\ud83d\udcb5",
+    fitzpatrick_scale: false,
+    category: "objects"
+  },
+  yen: {
+    keywords: [ "money", "sales", "japanese", "dollar", "currency" ],
+    "char": "\ud83d\udcb4",
+    fitzpatrick_scale: false,
+    category: "objects"
+  },
+  euro: {
+    keywords: [ "money", "sales", "dollar", "currency" ],
+    "char": "\ud83d\udcb6",
+    fitzpatrick_scale: false,
+    category: "objects"
+  },
+  pound: {
+    keywords: [ "british", "sterling", "money", "sales", "bills", "uk", "england", "currency" ],
+    "char": "\ud83d\udcb7",
+    fitzpatrick_scale: false,
+    category: "objects"
+  },
+  moneybag: {
+    keywords: [ "dollar", "payment", "coins", "sale" ],
+    "char": "\ud83d\udcb0",
+    fitzpatrick_scale: false,
+    category: "objects"
+  },
+  credit_card: {
+    keywords: [ "money", "sales", "dollar", "bill", "payment", "shopping" ],
+    "char": "\ud83d\udcb3",
+    fitzpatrick_scale: false,
+    category: "objects"
+  },
+  gem: {
+    keywords: [ "blue", "ruby", "diamond", "jewelry" ],
+    "char": "\ud83d\udc8e",
+    fitzpatrick_scale: false,
+    category: "objects"
+  },
+  balance_scale: {
+    keywords: [ "law", "fairness", "weight" ],
+    "char": "\u2696",
+    fitzpatrick_scale: false,
+    category: "objects"
+  },
+  wrench: {
+    keywords: [ "tools", "diy", "ikea", "fix", "maintainer" ],
+    "char": "\ud83d\udd27",
+    fitzpatrick_scale: false,
+    category: "objects"
+  },
+  hammer: {
+    keywords: [ "tools", "build", "create" ],
+    "char": "\ud83d\udd28",
+    fitzpatrick_scale: false,
+    category: "objects"
+  },
+  hammer_and_pick: {
+    keywords: [ "tools", "build", "create" ],
+    "char": "\u2692",
+    fitzpatrick_scale: false,
+    category: "objects"
+  },
+  hammer_and_wrench: {
+    keywords: [ "tools", "build", "create" ],
+    "char": "\ud83d\udee0",
+    fitzpatrick_scale: false,
+    category: "objects"
+  },
+  pick: {
+    keywords: [ "tools", "dig" ],
+    "char": "\u26cf",
+    fitzpatrick_scale: false,
+    category: "objects"
+  },
+  nut_and_bolt: {
+    keywords: [ "handy", "tools", "fix" ],
+    "char": "\ud83d\udd29",
+    fitzpatrick_scale: false,
+    category: "objects"
+  },
+  gear: {
+    keywords: [ "cog" ],
+    "char": "\u2699",
+    fitzpatrick_scale: false,
+    category: "objects"
+  },
+  chains: {
+    keywords: [ "lock", "arrest" ],
+    "char": "\u26d3",
+    fitzpatrick_scale: false,
+    category: "objects"
+  },
+  gun: {
+    keywords: [ "violence", "weapon", "pistol", "revolver" ],
+    "char": "\ud83d\udd2b",
+    fitzpatrick_scale: false,
+    category: "objects"
+  },
+  bomb: {
+    keywords: [ "boom", "explode", "explosion", "terrorism" ],
+    "char": "\ud83d\udca3",
+    fitzpatrick_scale: false,
+    category: "objects"
+  },
+  hocho: {
+    keywords: [ "knife", "blade", "cutlery", "kitchen", "weapon" ],
+    "char": "\ud83d\udd2a",
+    fitzpatrick_scale: false,
+    category: "objects"
+  },
+  dagger: {
+    keywords: [ "weapon" ],
+    "char": "\ud83d\udde1",
+    fitzpatrick_scale: false,
+    category: "objects"
+  },
+  crossed_swords: {
+    keywords: [ "weapon" ],
+    "char": "\u2694",
+    fitzpatrick_scale: false,
+    category: "objects"
+  },
+  shield: {
+    keywords: [ "protection", "security" ],
+    "char": "\ud83d\udee1",
+    fitzpatrick_scale: false,
+    category: "objects"
+  },
+  smoking: {
+    keywords: [ "kills", "tobacco", "cigarette", "joint", "smoke" ],
+    "char": "\ud83d\udeac",
+    fitzpatrick_scale: false,
+    category: "objects"
+  },
+  skull_and_crossbones: {
+    keywords: [ "poison", "danger", "deadly", "scary", "death", "pirate", "evil" ],
+    "char": "\u2620",
+    fitzpatrick_scale: false,
+    category: "objects"
+  },
+  coffin: {
+    keywords: [ "vampire", "dead", "die", "death", "rip", "graveyard", "cemetery", "casket", "funeral", "box" ],
+    "char": "\u26b0",
+    fitzpatrick_scale: false,
+    category: "objects"
+  },
+  funeral_urn: {
+    keywords: [ "dead", "die", "death", "rip", "ashes" ],
+    "char": "\u26b1",
+    fitzpatrick_scale: false,
+    category: "objects"
+  },
+  amphora: {
+    keywords: [ "vase", "jar" ],
+    "char": "\ud83c\udffa",
+    fitzpatrick_scale: false,
+    category: "objects"
+  },
+  crystal_ball: {
+    keywords: [ "disco", "party", "magic", "circus", "fortune_teller" ],
+    "char": "\ud83d\udd2e",
+    fitzpatrick_scale: false,
+    category: "objects"
+  },
+  prayer_beads: {
+    keywords: [ "dhikr", "religious" ],
+    "char": "\ud83d\udcff",
+    fitzpatrick_scale: false,
+    category: "objects"
+  },
+  barber: {
+    keywords: [ "hair", "salon", "style" ],
+    "char": "\ud83d\udc88",
+    fitzpatrick_scale: false,
+    category: "objects"
+  },
+  alembic: {
+    keywords: [ "distilling", "science", "experiment", "chemistry" ],
+    "char": "\u2697",
+    fitzpatrick_scale: false,
+    category: "objects"
+  },
+  telescope: {
+    keywords: [ "stars", "space", "zoom", "science", "astronomy" ],
+    "char": "\ud83d\udd2d",
+    fitzpatrick_scale: false,
+    category: "objects"
+  },
+  microscope: {
+    keywords: [ "laboratory", "experiment", "zoomin", "science", "study" ],
+    "char": "\ud83d\udd2c",
+    fitzpatrick_scale: false,
+    category: "objects"
+  },
+  hole: {
+    keywords: [ "embarrassing" ],
+    "char": "\ud83d\udd73",
+    fitzpatrick_scale: false,
+    category: "objects"
+  },
+  pill: {
+    keywords: [ "health", "medicine", "doctor", "pharmacy", "drug" ],
+    "char": "\ud83d\udc8a",
+    fitzpatrick_scale: false,
+    category: "objects"
+  },
+  syringe: {
+    keywords: [ "health", "hospital", "drugs", "blood", "medicine", "needle", "doctor", "nurse" ],
+    "char": "\ud83d\udc89",
+    fitzpatrick_scale: false,
+    category: "objects"
+  },
+  thermometer: {
+    keywords: [ "weather", "temperature", "hot", "cold" ],
+    "char": "\ud83c\udf21",
+    fitzpatrick_scale: false,
+    category: "objects"
+  },
+  label: {
+    keywords: [ "sale", "tag" ],
+    "char": "\ud83c\udff7",
+    fitzpatrick_scale: false,
+    category: "objects"
+  },
+  bookmark: {
+    keywords: [ "favorite", "label", "save" ],
+    "char": "\ud83d\udd16",
+    fitzpatrick_scale: false,
+    category: "objects"
+  },
+  toilet: {
+    keywords: [ "restroom", "wc", "washroom", "bathroom", "potty" ],
+    "char": "\ud83d\udebd",
+    fitzpatrick_scale: false,
+    category: "objects"
+  },
+  shower: {
+    keywords: [ "clean", "water", "bathroom" ],
+    "char": "\ud83d\udebf",
+    fitzpatrick_scale: false,
+    category: "objects"
+  },
+  bathtub: {
+    keywords: [ "clean", "shower", "bathroom" ],
+    "char": "\ud83d\udec1",
+    fitzpatrick_scale: false,
+    category: "objects"
+  },
+  key: {
+    keywords: [ "lock", "door", "password" ],
+    "char": "\ud83d\udd11",
+    fitzpatrick_scale: false,
+    category: "objects"
+  },
+  old_key: {
+    keywords: [ "lock", "door", "password" ],
+    "char": "\ud83d\udddd",
+    fitzpatrick_scale: false,
+    category: "objects"
+  },
+  couch_and_lamp: {
+    keywords: [ "read", "chill" ],
+    "char": "\ud83d\udecb",
+    fitzpatrick_scale: false,
+    category: "objects"
+  },
+  sleeping_bed: {
+    keywords: [ "bed", "rest" ],
+    "char": "\ud83d\udecc",
+    fitzpatrick_scale: true,
+    category: "objects"
+  },
+  bed: {
+    keywords: [ "sleep", "rest" ],
+    "char": "\ud83d\udecf",
+    fitzpatrick_scale: false,
+    category: "objects"
+  },
+  door: {
+    keywords: [ "house", "entry", "exit" ],
+    "char": "\ud83d\udeaa",
+    fitzpatrick_scale: false,
+    category: "objects"
+  },
+  bellhop_bell: {
+    keywords: [ "service" ],
+    "char": "\ud83d\udece",
+    fitzpatrick_scale: false,
+    category: "objects"
+  },
+  framed_picture: {
+    keywords: [ "photography" ],
+    "char": "\ud83d\uddbc",
+    fitzpatrick_scale: false,
+    category: "objects"
+  },
+  world_map: {
+    keywords: [ "location", "direction" ],
+    "char": "\ud83d\uddfa",
+    fitzpatrick_scale: false,
+    category: "objects"
+  },
+  parasol_on_ground: {
+    keywords: [ "weather", "summer" ],
+    "char": "\u26f1",
+    fitzpatrick_scale: false,
+    category: "objects"
+  },
+  moyai: {
+    keywords: [ "rock", "easter island", "moai" ],
+    "char": "\ud83d\uddff",
+    fitzpatrick_scale: false,
+    category: "objects"
+  },
+  shopping: {
+    keywords: [ "mall", "buy", "purchase" ],
+    "char": "\ud83d\udecd",
+    fitzpatrick_scale: false,
+    category: "objects"
+  },
+  shopping_cart: {
+    keywords: [ "trolley" ],
+    "char": "\ud83d\uded2",
+    fitzpatrick_scale: false,
+    category: "objects"
+  },
+  balloon: {
+    keywords: [ "party", "celebration", "birthday", "circus" ],
+    "char": "\ud83c\udf88",
+    fitzpatrick_scale: false,
+    category: "objects"
+  },
+  flags: {
+    keywords: [ "fish", "japanese", "koinobori", "carp", "banner" ],
+    "char": "\ud83c\udf8f",
+    fitzpatrick_scale: false,
+    category: "objects"
+  },
+  ribbon: {
+    keywords: [ "decoration", "pink", "girl", "bowtie" ],
+    "char": "\ud83c\udf80",
+    fitzpatrick_scale: false,
+    category: "objects"
+  },
+  gift: {
+    keywords: [ "present", "birthday", "christmas", "xmas" ],
+    "char": "\ud83c\udf81",
+    fitzpatrick_scale: false,
+    category: "objects"
+  },
+  confetti_ball: {
+    keywords: [ "festival", "party", "birthday", "circus" ],
+    "char": "\ud83c\udf8a",
+    fitzpatrick_scale: false,
+    category: "objects"
+  },
+  tada: {
+    keywords: [ "party", "congratulations", "birthday", "magic", "circus", "celebration" ],
+    "char": "\ud83c\udf89",
+    fitzpatrick_scale: false,
+    category: "objects"
+  },
+  dolls: {
+    keywords: [ "japanese", "toy", "kimono" ],
+    "char": "\ud83c\udf8e",
+    fitzpatrick_scale: false,
+    category: "objects"
+  },
+  wind_chime: {
+    keywords: [ "nature", "ding", "spring", "bell" ],
+    "char": "\ud83c\udf90",
+    fitzpatrick_scale: false,
+    category: "objects"
+  },
+  crossed_flags: {
+    keywords: [ "japanese", "nation", "country", "border" ],
+    "char": "\ud83c\udf8c",
+    fitzpatrick_scale: false,
+    category: "objects"
+  },
+  izakaya_lantern: {
+    keywords: [ "light", "paper", "halloween", "spooky" ],
+    "char": "\ud83c\udfee",
+    fitzpatrick_scale: false,
+    category: "objects"
+  },
+  email: {
+    keywords: [ "letter", "postal", "inbox", "communication" ],
+    "char": "\u2709\ufe0f",
+    fitzpatrick_scale: false,
+    category: "objects"
+  },
+  envelope_with_arrow: {
+    keywords: [ "email", "communication" ],
+    "char": "\ud83d\udce9",
+    fitzpatrick_scale: false,
+    category: "objects"
+  },
+  incoming_envelope: {
+    keywords: [ "email", "inbox" ],
+    "char": "\ud83d\udce8",
+    fitzpatrick_scale: false,
+    category: "objects"
+  },
+  "e-mail": {
+    keywords: [ "communication", "inbox" ],
+    "char": "\ud83d\udce7",
+    fitzpatrick_scale: false,
+    category: "objects"
+  },
+  love_letter: {
+    keywords: [ "email", "like", "affection", "envelope", "valentines" ],
+    "char": "\ud83d\udc8c",
+    fitzpatrick_scale: false,
+    category: "objects"
+  },
+  postbox: {
+    keywords: [ "email", "letter", "envelope" ],
+    "char": "\ud83d\udcee",
+    fitzpatrick_scale: false,
+    category: "objects"
+  },
+  mailbox_closed: {
+    keywords: [ "email", "communication", "inbox" ],
+    "char": "\ud83d\udcea",
+    fitzpatrick_scale: false,
+    category: "objects"
+  },
+  mailbox: {
+    keywords: [ "email", "inbox", "communication" ],
+    "char": "\ud83d\udceb",
+    fitzpatrick_scale: false,
+    category: "objects"
+  },
+  mailbox_with_mail: {
+    keywords: [ "email", "inbox", "communication" ],
+    "char": "\ud83d\udcec",
+    fitzpatrick_scale: false,
+    category: "objects"
+  },
+  mailbox_with_no_mail: {
+    keywords: [ "email", "inbox" ],
+    "char": "\ud83d\udced",
+    fitzpatrick_scale: false,
+    category: "objects"
+  },
+  "package": {
+    keywords: [ "mail", "gift", "cardboard", "box", "moving" ],
+    "char": "\ud83d\udce6",
+    fitzpatrick_scale: false,
+    category: "objects"
+  },
+  postal_horn: {
+    keywords: [ "instrument", "music" ],
+    "char": "\ud83d\udcef",
+    fitzpatrick_scale: false,
+    category: "objects"
+  },
+  inbox_tray: {
+    keywords: [ "email", "documents" ],
+    "char": "\ud83d\udce5",
+    fitzpatrick_scale: false,
+    category: "objects"
+  },
+  outbox_tray: {
+    keywords: [ "inbox", "email" ],
+    "char": "\ud83d\udce4",
+    fitzpatrick_scale: false,
+    category: "objects"
+  },
+  scroll: {
+    keywords: [ "documents", "ancient", "history", "paper" ],
+    "char": "\ud83d\udcdc",
+    fitzpatrick_scale: false,
+    category: "objects"
+  },
+  page_with_curl: {
+    keywords: [ "documents", "office", "paper" ],
+    "char": "\ud83d\udcc3",
+    fitzpatrick_scale: false,
+    category: "objects"
+  },
+  bookmark_tabs: {
+    keywords: [ "favorite", "save", "order", "tidy" ],
+    "char": "\ud83d\udcd1",
+    fitzpatrick_scale: false,
+    category: "objects"
+  },
+  bar_chart: {
+    keywords: [ "graph", "presentation", "stats" ],
+    "char": "\ud83d\udcca",
+    fitzpatrick_scale: false,
+    category: "objects"
+  },
+  chart_with_upwards_trend: {
+    keywords: [ "graph", "presentation", "stats", "recovery", "business", "economics", "money", "sales", "good", "success" ],
+    "char": "\ud83d\udcc8",
+    fitzpatrick_scale: false,
+    category: "objects"
+  },
+  chart_with_downwards_trend: {
+    keywords: [ "graph", "presentation", "stats", "recession", "business", "economics", "money", "sales", "bad", "failure" ],
+    "char": "\ud83d\udcc9",
+    fitzpatrick_scale: false,
+    category: "objects"
+  },
+  page_facing_up: {
+    keywords: [ "documents", "office", "paper", "information" ],
+    "char": "\ud83d\udcc4",
+    fitzpatrick_scale: false,
+    category: "objects"
+  },
+  date: {
+    keywords: [ "calendar", "schedule" ],
+    "char": "\ud83d\udcc5",
+    fitzpatrick_scale: false,
+    category: "objects"
+  },
+  calendar: {
+    keywords: [ "schedule", "date", "planning" ],
+    "char": "\ud83d\udcc6",
+    fitzpatrick_scale: false,
+    category: "objects"
+  },
+  spiral_calendar: {
+    keywords: [ "date", "schedule", "planning" ],
+    "char": "\ud83d\uddd3",
+    fitzpatrick_scale: false,
+    category: "objects"
+  },
+  card_index: {
+    keywords: [ "business", "stationery" ],
+    "char": "\ud83d\udcc7",
+    fitzpatrick_scale: false,
+    category: "objects"
+  },
+  card_file_box: {
+    keywords: [ "business", "stationery" ],
+    "char": "\ud83d\uddc3",
+    fitzpatrick_scale: false,
+    category: "objects"
+  },
+  ballot_box: {
+    keywords: [ "election", "vote" ],
+    "char": "\ud83d\uddf3",
+    fitzpatrick_scale: false,
+    category: "objects"
+  },
+  file_cabinet: {
+    keywords: [ "filing", "organizing" ],
+    "char": "\ud83d\uddc4",
+    fitzpatrick_scale: false,
+    category: "objects"
+  },
+  clipboard: {
+    keywords: [ "stationery", "documents" ],
+    "char": "\ud83d\udccb",
+    fitzpatrick_scale: false,
+    category: "objects"
+  },
+  spiral_notepad: {
+    keywords: [ "memo", "stationery" ],
+    "char": "\ud83d\uddd2",
+    fitzpatrick_scale: false,
+    category: "objects"
+  },
+  file_folder: {
+    keywords: [ "documents", "business", "office" ],
+    "char": "\ud83d\udcc1",
+    fitzpatrick_scale: false,
+    category: "objects"
+  },
+  open_file_folder: {
+    keywords: [ "documents", "load" ],
+    "char": "\ud83d\udcc2",
+    fitzpatrick_scale: false,
+    category: "objects"
+  },
+  card_index_dividers: {
+    keywords: [ "organizing", "business", "stationery" ],
+    "char": "\ud83d\uddc2",
+    fitzpatrick_scale: false,
+    category: "objects"
+  },
+  newspaper_roll: {
+    keywords: [ "press", "headline" ],
+    "char": "\ud83d\uddde",
+    fitzpatrick_scale: false,
+    category: "objects"
+  },
+  newspaper: {
+    keywords: [ "press", "headline" ],
+    "char": "\ud83d\udcf0",
+    fitzpatrick_scale: false,
+    category: "objects"
+  },
+  notebook: {
+    keywords: [ "stationery", "record", "notes", "paper", "study" ],
+    "char": "\ud83d\udcd3",
+    fitzpatrick_scale: false,
+    category: "objects"
+  },
+  closed_book: {
+    keywords: [ "read", "library", "knowledge", "textbook", "learn" ],
+    "char": "\ud83d\udcd5",
+    fitzpatrick_scale: false,
+    category: "objects"
+  },
+  green_book: {
+    keywords: [ "read", "library", "knowledge", "study" ],
+    "char": "\ud83d\udcd7",
+    fitzpatrick_scale: false,
+    category: "objects"
+  },
+  blue_book: {
+    keywords: [ "read", "library", "knowledge", "learn", "study" ],
+    "char": "\ud83d\udcd8",
+    fitzpatrick_scale: false,
+    category: "objects"
+  },
+  orange_book: {
+    keywords: [ "read", "library", "knowledge", "textbook", "study" ],
+    "char": "\ud83d\udcd9",
+    fitzpatrick_scale: false,
+    category: "objects"
+  },
+  notebook_with_decorative_cover: {
+    keywords: [ "classroom", "notes", "record", "paper", "study" ],
+    "char": "\ud83d\udcd4",
+    fitzpatrick_scale: false,
+    category: "objects"
+  },
+  ledger: {
+    keywords: [ "notes", "paper" ],
+    "char": "\ud83d\udcd2",
+    fitzpatrick_scale: false,
+    category: "objects"
+  },
+  books: {
+    keywords: [ "literature", "library", "study" ],
+    "char": "\ud83d\udcda",
+    fitzpatrick_scale: false,
+    category: "objects"
+  },
+  open_book: {
+    keywords: [ "book", "read", "library", "knowledge", "literature", "learn", "study" ],
+    "char": "\ud83d\udcd6",
+    fitzpatrick_scale: false,
+    category: "objects"
+  },
+  link: {
+    keywords: [ "rings", "url" ],
+    "char": "\ud83d\udd17",
+    fitzpatrick_scale: false,
+    category: "objects"
+  },
+  paperclip: {
+    keywords: [ "documents", "stationery" ],
+    "char": "\ud83d\udcce",
+    fitzpatrick_scale: false,
+    category: "objects"
+  },
+  paperclips: {
+    keywords: [ "documents", "stationery" ],
+    "char": "\ud83d\udd87",
+    fitzpatrick_scale: false,
+    category: "objects"
+  },
+  scissors: {
+    keywords: [ "stationery", "cut" ],
+    "char": "\u2702\ufe0f",
+    fitzpatrick_scale: false,
+    category: "objects"
+  },
+  triangular_ruler: {
+    keywords: [ "stationery", "math", "architect", "sketch" ],
+    "char": "\ud83d\udcd0",
+    fitzpatrick_scale: false,
+    category: "objects"
+  },
+  straight_ruler: {
+    keywords: [ "stationery", "calculate", "length", "math", "school", "drawing", "architect", "sketch" ],
+    "char": "\ud83d\udccf",
+    fitzpatrick_scale: false,
+    category: "objects"
+  },
+  pushpin: {
+    keywords: [ "stationery", "mark", "here" ],
+    "char": "\ud83d\udccc",
+    fitzpatrick_scale: false,
+    category: "objects"
+  },
+  round_pushpin: {
+    keywords: [ "stationery", "location", "map", "here" ],
+    "char": "\ud83d\udccd",
+    fitzpatrick_scale: false,
+    category: "objects"
+  },
+  triangular_flag_on_post: {
+    keywords: [ "mark", "milestone", "place" ],
+    "char": "\ud83d\udea9",
+    fitzpatrick_scale: false,
+    category: "objects"
+  },
+  white_flag: {
+    keywords: [ "losing", "loser", "lost", "surrender", "give up", "fail" ],
+    "char": "\ud83c\udff3",
+    fitzpatrick_scale: false,
+    category: "objects"
+  },
+  black_flag: {
+    keywords: [ "pirate" ],
+    "char": "\ud83c\udff4",
+    fitzpatrick_scale: false,
+    category: "objects"
+  },
+  rainbow_flag: {
+    keywords: [ "flag", "rainbow", "pride", "gay", "lgbt", "glbt", "queer", "homosexual", "lesbian", "bisexual", "transgender" ],
+    "char": "\ud83c\udff3\ufe0f\u200d\ud83c\udf08",
+    fitzpatrick_scale: false,
+    category: "objects"
+  },
+  closed_lock_with_key: {
+    keywords: [ "security", "privacy" ],
+    "char": "\ud83d\udd10",
+    fitzpatrick_scale: false,
+    category: "objects"
+  },
+  lock: {
+    keywords: [ "security", "password", "padlock" ],
+    "char": "\ud83d\udd12",
+    fitzpatrick_scale: false,
+    category: "objects"
+  },
+  unlock: {
+    keywords: [ "privacy", "security" ],
+    "char": "\ud83d\udd13",
+    fitzpatrick_scale: false,
+    category: "objects"
+  },
+  lock_with_ink_pen: {
+    keywords: [ "security", "secret" ],
+    "char": "\ud83d\udd0f",
+    fitzpatrick_scale: false,
+    category: "objects"
+  },
+  pen: {
+    keywords: [ "stationery", "writing", "write" ],
+    "char": "\ud83d\udd8a",
+    fitzpatrick_scale: false,
+    category: "objects"
+  },
+  fountain_pen: {
+    keywords: [ "stationery", "writing", "write" ],
+    "char": "\ud83d\udd8b",
+    fitzpatrick_scale: false,
+    category: "objects"
+  },
+  black_nib: {
+    keywords: [ "pen", "stationery", "writing", "write" ],
+    "char": "\u2712\ufe0f",
+    fitzpatrick_scale: false,
+    category: "objects"
+  },
+  memo: {
+    keywords: [ "write", "documents", "stationery", "pencil", "paper", "writing", "legal", "exam", "quiz", "test", "study", "compose" ],
+    "char": "\ud83d\udcdd",
+    fitzpatrick_scale: false,
+    category: "objects"
+  },
+  pencil2: {
+    keywords: [ "stationery", "write", "paper", "writing", "school", "study" ],
+    "char": "\u270f\ufe0f",
+    fitzpatrick_scale: false,
+    category: "objects"
+  },
+  crayon: {
+    keywords: [ "drawing", "creativity" ],
+    "char": "\ud83d\udd8d",
+    fitzpatrick_scale: false,
+    category: "objects"
+  },
+  paintbrush: {
+    keywords: [ "drawing", "creativity", "art" ],
+    "char": "\ud83d\udd8c",
+    fitzpatrick_scale: false,
+    category: "objects"
+  },
+  mag: {
+    keywords: [ "search", "zoom", "find", "detective" ],
+    "char": "\ud83d\udd0d",
+    fitzpatrick_scale: false,
+    category: "objects"
+  },
+  mag_right: {
+    keywords: [ "search", "zoom", "find", "detective" ],
+    "char": "\ud83d\udd0e",
+    fitzpatrick_scale: false,
+    category: "objects"
+  },
+  heart: {
+    keywords: [ "love", "like", "valentines" ],
+    "char": "\u2764\ufe0f",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  orange_heart: {
+    keywords: [ "love", "like", "affection", "valentines" ],
+    "char": "\ud83e\udde1",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  yellow_heart: {
+    keywords: [ "love", "like", "affection", "valentines" ],
+    "char": "\ud83d\udc9b",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  green_heart: {
+    keywords: [ "love", "like", "affection", "valentines" ],
+    "char": "\ud83d\udc9a",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  blue_heart: {
+    keywords: [ "love", "like", "affection", "valentines" ],
+    "char": "\ud83d\udc99",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  purple_heart: {
+    keywords: [ "love", "like", "affection", "valentines" ],
+    "char": "\ud83d\udc9c",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  black_heart: {
+    keywords: [ "evil" ],
+    "char": "\ud83d\udda4",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  broken_heart: {
+    keywords: [ "sad", "sorry", "break", "heart", "heartbreak" ],
+    "char": "\ud83d\udc94",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  heavy_heart_exclamation: {
+    keywords: [ "decoration", "love" ],
+    "char": "\u2763",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  two_hearts: {
+    keywords: [ "love", "like", "affection", "valentines", "heart" ],
+    "char": "\ud83d\udc95",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  revolving_hearts: {
+    keywords: [ "love", "like", "affection", "valentines" ],
+    "char": "\ud83d\udc9e",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  heartbeat: {
+    keywords: [ "love", "like", "affection", "valentines", "pink", "heart" ],
+    "char": "\ud83d\udc93",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  heartpulse: {
+    keywords: [ "like", "love", "affection", "valentines", "pink" ],
+    "char": "\ud83d\udc97",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  sparkling_heart: {
+    keywords: [ "love", "like", "affection", "valentines" ],
+    "char": "\ud83d\udc96",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  cupid: {
+    keywords: [ "love", "like", "heart", "affection", "valentines" ],
+    "char": "\ud83d\udc98",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  gift_heart: {
+    keywords: [ "love", "valentines" ],
+    "char": "\ud83d\udc9d",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  heart_decoration: {
+    keywords: [ "purple-square", "love", "like" ],
+    "char": "\ud83d\udc9f",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  peace_symbol: {
+    keywords: [ "hippie" ],
+    "char": "\u262e",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  latin_cross: {
+    keywords: [ "christianity" ],
+    "char": "\u271d",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  star_and_crescent: {
+    keywords: [ "islam" ],
+    "char": "\u262a",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  om: {
+    keywords: [ "hinduism", "buddhism", "sikhism", "jainism" ],
+    "char": "\ud83d\udd49",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  wheel_of_dharma: {
+    keywords: [ "hinduism", "buddhism", "sikhism", "jainism" ],
+    "char": "\u2638",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  star_of_david: {
+    keywords: [ "judaism" ],
+    "char": "\u2721",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  six_pointed_star: {
+    keywords: [ "purple-square", "religion", "jewish", "hexagram" ],
+    "char": "\ud83d\udd2f",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  menorah: {
+    keywords: [ "hanukkah", "candles", "jewish" ],
+    "char": "\ud83d\udd4e",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  yin_yang: {
+    keywords: [ "balance" ],
+    "char": "\u262f",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  orthodox_cross: {
+    keywords: [ "suppedaneum", "religion" ],
+    "char": "\u2626",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  place_of_worship: {
+    keywords: [ "religion", "church", "temple", "prayer" ],
+    "char": "\ud83d\uded0",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  ophiuchus: {
+    keywords: [ "sign", "purple-square", "constellation", "astrology" ],
+    "char": "\u26ce",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  aries: {
+    keywords: [ "sign", "purple-square", "zodiac", "astrology" ],
+    "char": "\u2648",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  taurus: {
+    keywords: [ "purple-square", "sign", "zodiac", "astrology" ],
+    "char": "\u2649",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  gemini: {
+    keywords: [ "sign", "zodiac", "purple-square", "astrology" ],
+    "char": "\u264a",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  cancer: {
+    keywords: [ "sign", "zodiac", "purple-square", "astrology" ],
+    "char": "\u264b",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  leo: {
+    keywords: [ "sign", "purple-square", "zodiac", "astrology" ],
+    "char": "\u264c",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  virgo: {
+    keywords: [ "sign", "zodiac", "purple-square", "astrology" ],
+    "char": "\u264d",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  libra: {
+    keywords: [ "sign", "purple-square", "zodiac", "astrology" ],
+    "char": "\u264e",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  scorpius: {
+    keywords: [ "sign", "zodiac", "purple-square", "astrology", "scorpio" ],
+    "char": "\u264f",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  sagittarius: {
+    keywords: [ "sign", "zodiac", "purple-square", "astrology" ],
+    "char": "\u2650",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  capricorn: {
+    keywords: [ "sign", "zodiac", "purple-square", "astrology" ],
+    "char": "\u2651",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  aquarius: {
+    keywords: [ "sign", "purple-square", "zodiac", "astrology" ],
+    "char": "\u2652",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  pisces: {
+    keywords: [ "purple-square", "sign", "zodiac", "astrology" ],
+    "char": "\u2653",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  id: {
+    keywords: [ "purple-square", "words" ],
+    "char": "\ud83c\udd94",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  atom_symbol: {
+    keywords: [ "science", "physics", "chemistry" ],
+    "char": "\u269b",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  u7a7a: {
+    keywords: [ "kanji", "japanese", "chinese", "empty", "sky", "blue-square" ],
+    "char": "\ud83c\ude33",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  u5272: {
+    keywords: [ "cut", "divide", "chinese", "kanji", "pink-square" ],
+    "char": "\ud83c\ude39",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  radioactive: {
+    keywords: [ "nuclear", "danger" ],
+    "char": "\u2622",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  biohazard: {
+    keywords: [ "danger" ],
+    "char": "\u2623",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  mobile_phone_off: {
+    keywords: [ "mute", "orange-square", "silence", "quiet" ],
+    "char": "\ud83d\udcf4",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  vibration_mode: {
+    keywords: [ "orange-square", "phone" ],
+    "char": "\ud83d\udcf3",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  u6709: {
+    keywords: [ "orange-square", "chinese", "have", "kanji" ],
+    "char": "\ud83c\ude36",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  u7121: {
+    keywords: [ "nothing", "chinese", "kanji", "japanese", "orange-square" ],
+    "char": "\ud83c\ude1a",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  u7533: {
+    keywords: [ "chinese", "japanese", "kanji", "orange-square" ],
+    "char": "\ud83c\ude38",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  u55b6: {
+    keywords: [ "japanese", "opening hours", "orange-square" ],
+    "char": "\ud83c\ude3a",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  u6708: {
+    keywords: [ "chinese", "month", "moon", "japanese", "orange-square", "kanji" ],
+    "char": "\ud83c\ude37\ufe0f",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  eight_pointed_black_star: {
+    keywords: [ "orange-square", "shape", "polygon" ],
+    "char": "\u2734\ufe0f",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  vs: {
+    keywords: [ "words", "orange-square" ],
+    "char": "\ud83c\udd9a",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  accept: {
+    keywords: [ "ok", "good", "chinese", "kanji", "agree", "yes", "orange-circle" ],
+    "char": "\ud83c\ude51",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  white_flower: {
+    keywords: [ "japanese", "spring" ],
+    "char": "\ud83d\udcae",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  ideograph_advantage: {
+    keywords: [ "chinese", "kanji", "obtain", "get", "circle" ],
+    "char": "\ud83c\ude50",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  secret: {
+    keywords: [ "privacy", "chinese", "sshh", "kanji", "red-circle" ],
+    "char": "\u3299\ufe0f",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  congratulations: {
+    keywords: [ "chinese", "kanji", "japanese", "red-circle" ],
+    "char": "\u3297\ufe0f",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  u5408: {
+    keywords: [ "japanese", "chinese", "join", "kanji", "red-square" ],
+    "char": "\ud83c\ude34",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  u6e80: {
+    keywords: [ "full", "chinese", "japanese", "red-square", "kanji" ],
+    "char": "\ud83c\ude35",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  u7981: {
+    keywords: [ "kanji", "japanese", "chinese", "forbidden", "limit", "restricted", "red-square" ],
+    "char": "\ud83c\ude32",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  a: {
+    keywords: [ "red-square", "alphabet", "letter" ],
+    "char": "\ud83c\udd70\ufe0f",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  b: {
+    keywords: [ "red-square", "alphabet", "letter" ],
+    "char": "\ud83c\udd71\ufe0f",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  ab: {
+    keywords: [ "red-square", "alphabet" ],
+    "char": "\ud83c\udd8e",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  cl: {
+    keywords: [ "alphabet", "words", "red-square" ],
+    "char": "\ud83c\udd91",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  o2: {
+    keywords: [ "alphabet", "red-square", "letter" ],
+    "char": "\ud83c\udd7e\ufe0f",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  sos: {
+    keywords: [ "help", "red-square", "words", "emergency", "911" ],
+    "char": "\ud83c\udd98",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  no_entry: {
+    keywords: [ "limit", "security", "privacy", "bad", "denied", "stop", "circle" ],
+    "char": "\u26d4",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  name_badge: {
+    keywords: [ "fire", "forbid" ],
+    "char": "\ud83d\udcdb",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  no_entry_sign: {
+    keywords: [ "forbid", "stop", "limit", "denied", "disallow", "circle" ],
+    "char": "\ud83d\udeab",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  x: {
+    keywords: [ "no", "delete", "remove", "cancel" ],
+    "char": "\u274c",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  o: {
+    keywords: [ "circle", "round" ],
+    "char": "\u2b55",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  stop_sign: {
+    keywords: [ "stop" ],
+    "char": "\ud83d\uded1",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  anger: {
+    keywords: [ "angry", "mad" ],
+    "char": "\ud83d\udca2",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  hotsprings: {
+    keywords: [ "bath", "warm", "relax" ],
+    "char": "\u2668\ufe0f",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  no_pedestrians: {
+    keywords: [ "rules", "crossing", "walking", "circle" ],
+    "char": "\ud83d\udeb7",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  do_not_litter: {
+    keywords: [ "trash", "bin", "garbage", "circle" ],
+    "char": "\ud83d\udeaf",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  no_bicycles: {
+    keywords: [ "cyclist", "prohibited", "circle" ],
+    "char": "\ud83d\udeb3",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  "non-potable_water": {
+    keywords: [ "drink", "faucet", "tap", "circle" ],
+    "char": "\ud83d\udeb1",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  underage: {
+    keywords: [ "18", "drink", "pub", "night", "minor", "circle" ],
+    "char": "\ud83d\udd1e",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  no_mobile_phones: {
+    keywords: [ "iphone", "mute", "circle" ],
+    "char": "\ud83d\udcf5",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  exclamation: {
+    keywords: [ "heavy_exclamation_mark", "danger", "surprise", "punctuation", "wow", "warning" ],
+    "char": "\u2757",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  grey_exclamation: {
+    keywords: [ "surprise", "punctuation", "gray", "wow", "warning" ],
+    "char": "\u2755",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  question: {
+    keywords: [ "doubt", "confused" ],
+    "char": "\u2753",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  grey_question: {
+    keywords: [ "doubts", "gray", "huh", "confused" ],
+    "char": "\u2754",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  bangbang: {
+    keywords: [ "exclamation", "surprise" ],
+    "char": "\u203c\ufe0f",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  interrobang: {
+    keywords: [ "wat", "punctuation", "surprise" ],
+    "char": "\u2049\ufe0f",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  100: {
+    keywords: [ "score", "perfect", "numbers", "century", "exam", "quiz", "test", "pass", "hundred" ],
+    "char": "\ud83d\udcaf",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  low_brightness: {
+    keywords: [ "sun", "afternoon", "warm", "summer" ],
+    "char": "\ud83d\udd05",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  high_brightness: {
+    keywords: [ "sun", "light" ],
+    "char": "\ud83d\udd06",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  trident: {
+    keywords: [ "weapon", "spear" ],
+    "char": "\ud83d\udd31",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  fleur_de_lis: {
+    keywords: [ "decorative", "scout" ],
+    "char": "\u269c",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  part_alternation_mark: {
+    keywords: [ "graph", "presentation", "stats", "business", "economics", "bad" ],
+    "char": "\u303d\ufe0f",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  warning: {
+    keywords: [ "exclamation", "wip", "alert", "error", "problem", "issue" ],
+    "char": "\u26a0\ufe0f",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  children_crossing: {
+    keywords: [ "school", "warning", "danger", "sign", "driving", "yellow-diamond" ],
+    "char": "\ud83d\udeb8",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  beginner: {
+    keywords: [ "badge", "shield" ],
+    "char": "\ud83d\udd30",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  recycle: {
+    keywords: [ "arrow", "environment", "garbage", "trash" ],
+    "char": "\u267b\ufe0f",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  u6307: {
+    keywords: [ "chinese", "point", "green-square", "kanji" ],
+    "char": "\ud83c\ude2f",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  chart: {
+    keywords: [ "green-square", "graph", "presentation", "stats" ],
+    "char": "\ud83d\udcb9",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  sparkle: {
+    keywords: [ "stars", "green-square", "awesome", "good", "fireworks" ],
+    "char": "\u2747\ufe0f",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  eight_spoked_asterisk: {
+    keywords: [ "star", "sparkle", "green-square" ],
+    "char": "\u2733\ufe0f",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  negative_squared_cross_mark: {
+    keywords: [ "x", "green-square", "no", "deny" ],
+    "char": "\u274e",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  white_check_mark: {
+    keywords: [ "green-square", "ok", "agree", "vote", "election", "answer", "tick" ],
+    "char": "\u2705",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  diamond_shape_with_a_dot_inside: {
+    keywords: [ "jewel", "blue", "gem", "crystal", "fancy" ],
+    "char": "\ud83d\udca0",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  cyclone: {
+    keywords: [ "weather", "swirl", "blue", "cloud", "vortex", "spiral", "whirlpool", "spin", "tornado", "hurricane", "typhoon" ],
+    "char": "\ud83c\udf00",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  loop: {
+    keywords: [ "tape", "cassette" ],
+    "char": "\u27bf",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  globe_with_meridians: {
+    keywords: [ "earth", "international", "world", "internet", "interweb", "i18n" ],
+    "char": "\ud83c\udf10",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  m: {
+    keywords: [ "alphabet", "blue-circle", "letter" ],
+    "char": "\u24c2\ufe0f",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  atm: {
+    keywords: [ "money", "sales", "cash", "blue-square", "payment", "bank" ],
+    "char": "\ud83c\udfe7",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  sa: {
+    keywords: [ "japanese", "blue-square", "katakana" ],
+    "char": "\ud83c\ude02\ufe0f",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  passport_control: {
+    keywords: [ "custom", "blue-square" ],
+    "char": "\ud83d\udec2",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  customs: {
+    keywords: [ "passport", "border", "blue-square" ],
+    "char": "\ud83d\udec3",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  baggage_claim: {
+    keywords: [ "blue-square", "airport", "transport" ],
+    "char": "\ud83d\udec4",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  left_luggage: {
+    keywords: [ "blue-square", "travel" ],
+    "char": "\ud83d\udec5",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  wheelchair: {
+    keywords: [ "blue-square", "disabled", "a11y", "accessibility" ],
+    "char": "\u267f",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  no_smoking: {
+    keywords: [ "cigarette", "blue-square", "smell", "smoke" ],
+    "char": "\ud83d\udead",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  wc: {
+    keywords: [ "toilet", "restroom", "blue-square" ],
+    "char": "\ud83d\udebe",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  parking: {
+    keywords: [ "cars", "blue-square", "alphabet", "letter" ],
+    "char": "\ud83c\udd7f\ufe0f",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  potable_water: {
+    keywords: [ "blue-square", "liquid", "restroom", "cleaning", "faucet" ],
+    "char": "\ud83d\udeb0",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  mens: {
+    keywords: [ "toilet", "restroom", "wc", "blue-square", "gender", "male" ],
+    "char": "\ud83d\udeb9",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  womens: {
+    keywords: [ "purple-square", "woman", "female", "toilet", "loo", "restroom", "gender" ],
+    "char": "\ud83d\udeba",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  baby_symbol: {
+    keywords: [ "orange-square", "child" ],
+    "char": "\ud83d\udebc",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  restroom: {
+    keywords: [ "blue-square", "toilet", "refresh", "wc", "gender" ],
+    "char": "\ud83d\udebb",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  put_litter_in_its_place: {
+    keywords: [ "blue-square", "sign", "human", "info" ],
+    "char": "\ud83d\udeae",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  cinema: {
+    keywords: [ "blue-square", "record", "film", "movie", "curtain", "stage", "theater" ],
+    "char": "\ud83c\udfa6",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  signal_strength: {
+    keywords: [ "blue-square", "reception", "phone", "internet", "connection", "wifi", "bluetooth", "bars" ],
+    "char": "\ud83d\udcf6",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  koko: {
+    keywords: [ "blue-square", "here", "katakana", "japanese", "destination" ],
+    "char": "\ud83c\ude01",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  ng: {
+    keywords: [ "blue-square", "words", "shape", "icon" ],
+    "char": "\ud83c\udd96",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  ok: {
+    keywords: [ "good", "agree", "yes", "blue-square" ],
+    "char": "\ud83c\udd97",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  up: {
+    keywords: [ "blue-square", "above", "high" ],
+    "char": "\ud83c\udd99",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  cool: {
+    keywords: [ "words", "blue-square" ],
+    "char": "\ud83c\udd92",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  "new": {
+    keywords: [ "blue-square", "words", "start" ],
+    "char": "\ud83c\udd95",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  free: {
+    keywords: [ "blue-square", "words" ],
+    "char": "\ud83c\udd93",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  zero: {
+    keywords: [ "0", "numbers", "blue-square", "null" ],
+    "char": "0\ufe0f\u20e3",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  one: {
+    keywords: [ "blue-square", "numbers", "1" ],
+    "char": "1\ufe0f\u20e3",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  two: {
+    keywords: [ "numbers", "2", "prime", "blue-square" ],
+    "char": "2\ufe0f\u20e3",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  three: {
+    keywords: [ "3", "numbers", "prime", "blue-square" ],
+    "char": "3\ufe0f\u20e3",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  four: {
+    keywords: [ "4", "numbers", "blue-square" ],
+    "char": "4\ufe0f\u20e3",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  five: {
+    keywords: [ "5", "numbers", "blue-square", "prime" ],
+    "char": "5\ufe0f\u20e3",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  six: {
+    keywords: [ "6", "numbers", "blue-square" ],
+    "char": "6\ufe0f\u20e3",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  seven: {
+    keywords: [ "7", "numbers", "blue-square", "prime" ],
+    "char": "7\ufe0f\u20e3",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  eight: {
+    keywords: [ "8", "blue-square", "numbers" ],
+    "char": "8\ufe0f\u20e3",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  nine: {
+    keywords: [ "blue-square", "numbers", "9" ],
+    "char": "9\ufe0f\u20e3",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  keycap_ten: {
+    keywords: [ "numbers", "10", "blue-square" ],
+    "char": "\ud83d\udd1f",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  asterisk: {
+    keywords: [ "star", "keycap" ],
+    "char": "*\u20e3",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  1234: {
+    keywords: [ "numbers", "blue-square" ],
+    "char": "\ud83d\udd22",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  eject_button: {
+    keywords: [ "blue-square" ],
+    "char": "\u23cf\ufe0f",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  arrow_forward: {
+    keywords: [ "blue-square", "right", "direction", "play" ],
+    "char": "\u25b6\ufe0f",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  pause_button: {
+    keywords: [ "pause", "blue-square" ],
+    "char": "\u23f8",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  next_track_button: {
+    keywords: [ "forward", "next", "blue-square" ],
+    "char": "\u23ed",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  stop_button: {
+    keywords: [ "blue-square" ],
+    "char": "\u23f9",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  record_button: {
+    keywords: [ "blue-square" ],
+    "char": "\u23fa",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  play_or_pause_button: {
+    keywords: [ "blue-square", "play", "pause" ],
+    "char": "\u23ef",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  previous_track_button: {
+    keywords: [ "backward" ],
+    "char": "\u23ee",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  fast_forward: {
+    keywords: [ "blue-square", "play", "speed", "continue" ],
+    "char": "\u23e9",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  rewind: {
+    keywords: [ "play", "blue-square" ],
+    "char": "\u23ea",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  twisted_rightwards_arrows: {
+    keywords: [ "blue-square", "shuffle", "music", "random" ],
+    "char": "\ud83d\udd00",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  repeat: {
+    keywords: [ "loop", "record" ],
+    "char": "\ud83d\udd01",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  repeat_one: {
+    keywords: [ "blue-square", "loop" ],
+    "char": "\ud83d\udd02",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  arrow_backward: {
+    keywords: [ "blue-square", "left", "direction" ],
+    "char": "\u25c0\ufe0f",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  arrow_up_small: {
+    keywords: [ "blue-square", "triangle", "direction", "point", "forward", "top" ],
+    "char": "\ud83d\udd3c",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  arrow_down_small: {
+    keywords: [ "blue-square", "direction", "bottom" ],
+    "char": "\ud83d\udd3d",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  arrow_double_up: {
+    keywords: [ "blue-square", "direction", "top" ],
+    "char": "\u23eb",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  arrow_double_down: {
+    keywords: [ "blue-square", "direction", "bottom" ],
+    "char": "\u23ec",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  arrow_right: {
+    keywords: [ "blue-square", "next" ],
+    "char": "\u27a1\ufe0f",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  arrow_left: {
+    keywords: [ "blue-square", "previous", "back" ],
+    "char": "\u2b05\ufe0f",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  arrow_up: {
+    keywords: [ "blue-square", "continue", "top", "direction" ],
+    "char": "\u2b06\ufe0f",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  arrow_down: {
+    keywords: [ "blue-square", "direction", "bottom" ],
+    "char": "\u2b07\ufe0f",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  arrow_upper_right: {
+    keywords: [ "blue-square", "point", "direction", "diagonal", "northeast" ],
+    "char": "\u2197\ufe0f",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  arrow_lower_right: {
+    keywords: [ "blue-square", "direction", "diagonal", "southeast" ],
+    "char": "\u2198\ufe0f",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  arrow_lower_left: {
+    keywords: [ "blue-square", "direction", "diagonal", "southwest" ],
+    "char": "\u2199\ufe0f",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  arrow_upper_left: {
+    keywords: [ "blue-square", "point", "direction", "diagonal", "northwest" ],
+    "char": "\u2196\ufe0f",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  arrow_up_down: {
+    keywords: [ "blue-square", "direction", "way", "vertical" ],
+    "char": "\u2195\ufe0f",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  left_right_arrow: {
+    keywords: [ "shape", "direction", "horizontal", "sideways" ],
+    "char": "\u2194\ufe0f",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  arrows_counterclockwise: {
+    keywords: [ "blue-square", "sync", "cycle" ],
+    "char": "\ud83d\udd04",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  arrow_right_hook: {
+    keywords: [ "blue-square", "return", "rotate", "direction" ],
+    "char": "\u21aa\ufe0f",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  leftwards_arrow_with_hook: {
+    keywords: [ "back", "return", "blue-square", "undo", "enter" ],
+    "char": "\u21a9\ufe0f",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  arrow_heading_up: {
+    keywords: [ "blue-square", "direction", "top" ],
+    "char": "\u2934\ufe0f",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  arrow_heading_down: {
+    keywords: [ "blue-square", "direction", "bottom" ],
+    "char": "\u2935\ufe0f",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  hash: {
+    keywords: [ "symbol", "blue-square", "twitter" ],
+    "char": "#\ufe0f\u20e3",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  information_source: {
+    keywords: [ "blue-square", "alphabet", "letter" ],
+    "char": "\u2139\ufe0f",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  abc: {
+    keywords: [ "blue-square", "alphabet" ],
+    "char": "\ud83d\udd24",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  abcd: {
+    keywords: [ "blue-square", "alphabet" ],
+    "char": "\ud83d\udd21",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  capital_abcd: {
+    keywords: [ "alphabet", "words", "blue-square" ],
+    "char": "\ud83d\udd20",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  symbols: {
+    keywords: [ "blue-square", "music", "note", "ampersand", "percent", "glyphs", "characters" ],
+    "char": "\ud83d\udd23",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  musical_note: {
+    keywords: [ "score", "tone", "sound" ],
+    "char": "\ud83c\udfb5",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  notes: {
+    keywords: [ "music", "score" ],
+    "char": "\ud83c\udfb6",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  wavy_dash: {
+    keywords: [ "draw", "line", "moustache", "mustache", "squiggle", "scribble" ],
+    "char": "\u3030\ufe0f",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  curly_loop: {
+    keywords: [ "scribble", "draw", "shape", "squiggle" ],
+    "char": "\u27b0",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  heavy_check_mark: {
+    keywords: [ "ok", "nike", "answer", "yes", "tick" ],
+    "char": "\u2714\ufe0f",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  arrows_clockwise: {
+    keywords: [ "sync", "cycle", "round", "repeat" ],
+    "char": "\ud83d\udd03",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  heavy_plus_sign: {
+    keywords: [ "math", "calculation", "addition", "more", "increase" ],
+    "char": "\u2795",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  heavy_minus_sign: {
+    keywords: [ "math", "calculation", "subtract", "less" ],
+    "char": "\u2796",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  heavy_division_sign: {
+    keywords: [ "divide", "math", "calculation" ],
+    "char": "\u2797",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  heavy_multiplication_x: {
+    keywords: [ "math", "calculation" ],
+    "char": "\u2716\ufe0f",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  heavy_dollar_sign: {
+    keywords: [ "money", "sales", "payment", "currency", "buck" ],
+    "char": "\ud83d\udcb2",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  currency_exchange: {
+    keywords: [ "money", "sales", "dollar", "travel" ],
+    "char": "\ud83d\udcb1",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  copyright: {
+    keywords: [ "ip", "license", "circle", "law", "legal" ],
+    "char": "\xa9\ufe0f",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  registered: {
+    keywords: [ "alphabet", "circle" ],
+    "char": "\xae\ufe0f",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  tm: {
+    keywords: [ "trademark", "brand", "law", "legal" ],
+    "char": "\u2122\ufe0f",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  end: {
+    keywords: [ "words", "arrow" ],
+    "char": "\ud83d\udd1a",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  back: {
+    keywords: [ "arrow", "words", "return" ],
+    "char": "\ud83d\udd19",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  on: {
+    keywords: [ "arrow", "words" ],
+    "char": "\ud83d\udd1b",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  top: {
+    keywords: [ "words", "blue-square" ],
+    "char": "\ud83d\udd1d",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  soon: {
+    keywords: [ "arrow", "words" ],
+    "char": "\ud83d\udd1c",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  ballot_box_with_check: {
+    keywords: [ "ok", "agree", "confirm", "black-square", "vote", "election", "yes", "tick" ],
+    "char": "\u2611\ufe0f",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  radio_button: {
+    keywords: [ "input", "old", "music", "circle" ],
+    "char": "\ud83d\udd18",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  white_circle: {
+    keywords: [ "shape", "round" ],
+    "char": "\u26aa",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  black_circle: {
+    keywords: [ "shape", "button", "round" ],
+    "char": "\u26ab",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  red_circle: {
+    keywords: [ "shape", "error", "danger" ],
+    "char": "\ud83d\udd34",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  large_blue_circle: {
+    keywords: [ "shape", "icon", "button" ],
+    "char": "\ud83d\udd35",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  small_orange_diamond: {
+    keywords: [ "shape", "jewel", "gem" ],
+    "char": "\ud83d\udd38",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  small_blue_diamond: {
+    keywords: [ "shape", "jewel", "gem" ],
+    "char": "\ud83d\udd39",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  large_orange_diamond: {
+    keywords: [ "shape", "jewel", "gem" ],
+    "char": "\ud83d\udd36",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  large_blue_diamond: {
+    keywords: [ "shape", "jewel", "gem" ],
+    "char": "\ud83d\udd37",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  small_red_triangle: {
+    keywords: [ "shape", "direction", "up", "top" ],
+    "char": "\ud83d\udd3a",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  black_small_square: {
+    keywords: [ "shape", "icon" ],
+    "char": "\u25aa\ufe0f",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  white_small_square: {
+    keywords: [ "shape", "icon" ],
+    "char": "\u25ab\ufe0f",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  black_large_square: {
+    keywords: [ "shape", "icon", "button" ],
+    "char": "\u2b1b",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  white_large_square: {
+    keywords: [ "shape", "icon", "stone", "button" ],
+    "char": "\u2b1c",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  small_red_triangle_down: {
+    keywords: [ "shape", "direction", "bottom" ],
+    "char": "\ud83d\udd3b",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  black_medium_square: {
+    keywords: [ "shape", "button", "icon" ],
+    "char": "\u25fc\ufe0f",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  white_medium_square: {
+    keywords: [ "shape", "stone", "icon" ],
+    "char": "\u25fb\ufe0f",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  black_medium_small_square: {
+    keywords: [ "icon", "shape", "button" ],
+    "char": "\u25fe",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  white_medium_small_square: {
+    keywords: [ "shape", "stone", "icon", "button" ],
+    "char": "\u25fd",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  black_square_button: {
+    keywords: [ "shape", "input", "frame" ],
+    "char": "\ud83d\udd32",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  white_square_button: {
+    keywords: [ "shape", "input" ],
+    "char": "\ud83d\udd33",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  speaker: {
+    keywords: [ "sound", "volume", "silence", "broadcast" ],
+    "char": "\ud83d\udd08",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  sound: {
+    keywords: [ "volume", "speaker", "broadcast" ],
+    "char": "\ud83d\udd09",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  loud_sound: {
+    keywords: [ "volume", "noise", "noisy", "speaker", "broadcast" ],
+    "char": "\ud83d\udd0a",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  mute: {
+    keywords: [ "sound", "volume", "silence", "quiet" ],
+    "char": "\ud83d\udd07",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  mega: {
+    keywords: [ "sound", "speaker", "volume" ],
+    "char": "\ud83d\udce3",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  loudspeaker: {
+    keywords: [ "volume", "sound" ],
+    "char": "\ud83d\udce2",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  bell: {
+    keywords: [ "sound", "notification", "christmas", "xmas", "chime" ],
+    "char": "\ud83d\udd14",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  no_bell: {
+    keywords: [ "sound", "volume", "mute", "quiet", "silent" ],
+    "char": "\ud83d\udd15",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  black_joker: {
+    keywords: [ "poker", "cards", "game", "play", "magic" ],
+    "char": "\ud83c\udccf",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  mahjong: {
+    keywords: [ "game", "play", "chinese", "kanji" ],
+    "char": "\ud83c\udc04",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  spades: {
+    keywords: [ "poker", "cards", "suits", "magic" ],
+    "char": "\u2660\ufe0f",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  clubs: {
+    keywords: [ "poker", "cards", "magic", "suits" ],
+    "char": "\u2663\ufe0f",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  hearts: {
+    keywords: [ "poker", "cards", "magic", "suits" ],
+    "char": "\u2665\ufe0f",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  diamonds: {
+    keywords: [ "poker", "cards", "magic", "suits" ],
+    "char": "\u2666\ufe0f",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  flower_playing_cards: {
+    keywords: [ "game", "sunset", "red" ],
+    "char": "\ud83c\udfb4",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  thought_balloon: {
+    keywords: [ "bubble", "cloud", "speech", "thinking", "dream" ],
+    "char": "\ud83d\udcad",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  right_anger_bubble: {
+    keywords: [ "caption", "speech", "thinking", "mad" ],
+    "char": "\ud83d\uddef",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  speech_balloon: {
+    keywords: [ "bubble", "words", "message", "talk", "chatting" ],
+    "char": "\ud83d\udcac",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  left_speech_bubble: {
+    keywords: [ "words", "message", "talk", "chatting" ],
+    "char": "\ud83d\udde8",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  clock1: {
+    keywords: [ "time", "late", "early", "schedule" ],
+    "char": "\ud83d\udd50",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  clock2: {
+    keywords: [ "time", "late", "early", "schedule" ],
+    "char": "\ud83d\udd51",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  clock3: {
+    keywords: [ "time", "late", "early", "schedule" ],
+    "char": "\ud83d\udd52",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  clock4: {
+    keywords: [ "time", "late", "early", "schedule" ],
+    "char": "\ud83d\udd53",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  clock5: {
+    keywords: [ "time", "late", "early", "schedule" ],
+    "char": "\ud83d\udd54",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  clock6: {
+    keywords: [ "time", "late", "early", "schedule", "dawn", "dusk" ],
+    "char": "\ud83d\udd55",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  clock7: {
+    keywords: [ "time", "late", "early", "schedule" ],
+    "char": "\ud83d\udd56",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  clock8: {
+    keywords: [ "time", "late", "early", "schedule" ],
+    "char": "\ud83d\udd57",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  clock9: {
+    keywords: [ "time", "late", "early", "schedule" ],
+    "char": "\ud83d\udd58",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  clock10: {
+    keywords: [ "time", "late", "early", "schedule" ],
+    "char": "\ud83d\udd59",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  clock11: {
+    keywords: [ "time", "late", "early", "schedule" ],
+    "char": "\ud83d\udd5a",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  clock12: {
+    keywords: [ "time", "noon", "midnight", "midday", "late", "early", "schedule" ],
+    "char": "\ud83d\udd5b",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  clock130: {
+    keywords: [ "time", "late", "early", "schedule" ],
+    "char": "\ud83d\udd5c",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  clock230: {
+    keywords: [ "time", "late", "early", "schedule" ],
+    "char": "\ud83d\udd5d",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  clock330: {
+    keywords: [ "time", "late", "early", "schedule" ],
+    "char": "\ud83d\udd5e",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  clock430: {
+    keywords: [ "time", "late", "early", "schedule" ],
+    "char": "\ud83d\udd5f",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  clock530: {
+    keywords: [ "time", "late", "early", "schedule" ],
+    "char": "\ud83d\udd60",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  clock630: {
+    keywords: [ "time", "late", "early", "schedule" ],
+    "char": "\ud83d\udd61",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  clock730: {
+    keywords: [ "time", "late", "early", "schedule" ],
+    "char": "\ud83d\udd62",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  clock830: {
+    keywords: [ "time", "late", "early", "schedule" ],
+    "char": "\ud83d\udd63",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  clock930: {
+    keywords: [ "time", "late", "early", "schedule" ],
+    "char": "\ud83d\udd64",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  clock1030: {
+    keywords: [ "time", "late", "early", "schedule" ],
+    "char": "\ud83d\udd65",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  clock1130: {
+    keywords: [ "time", "late", "early", "schedule" ],
+    "char": "\ud83d\udd66",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  clock1230: {
+    keywords: [ "time", "late", "early", "schedule" ],
+    "char": "\ud83d\udd67",
+    fitzpatrick_scale: false,
+    category: "symbols"
+  },
+  afghanistan: {
+    keywords: [ "af", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\udde6\ud83c\uddeb",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  aland_islands: {
+    keywords: [ "\xc5land", "islands", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\udde6\ud83c\uddfd",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  albania: {
+    keywords: [ "al", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\udde6\ud83c\uddf1",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  algeria: {
+    keywords: [ "dz", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\udde9\ud83c\uddff",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  american_samoa: {
+    keywords: [ "american", "ws", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\udde6\ud83c\uddf8",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  andorra: {
+    keywords: [ "ad", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\udde6\ud83c\udde9",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  angola: {
+    keywords: [ "ao", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\udde6\ud83c\uddf4",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  anguilla: {
+    keywords: [ "ai", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\udde6\ud83c\uddee",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  antarctica: {
+    keywords: [ "aq", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\udde6\ud83c\uddf6",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  antigua_barbuda: {
+    keywords: [ "antigua", "barbuda", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\udde6\ud83c\uddec",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  argentina: {
+    keywords: [ "ar", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\udde6\ud83c\uddf7",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  armenia: {
+    keywords: [ "am", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\udde6\ud83c\uddf2",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  aruba: {
+    keywords: [ "aw", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\udde6\ud83c\uddfc",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  australia: {
+    keywords: [ "au", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\udde6\ud83c\uddfa",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  austria: {
+    keywords: [ "at", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\udde6\ud83c\uddf9",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  azerbaijan: {
+    keywords: [ "az", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\udde6\ud83c\uddff",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  bahamas: {
+    keywords: [ "bs", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\udde7\ud83c\uddf8",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  bahrain: {
+    keywords: [ "bh", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\udde7\ud83c\udded",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  bangladesh: {
+    keywords: [ "bd", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\udde7\ud83c\udde9",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  barbados: {
+    keywords: [ "bb", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\udde7\ud83c\udde7",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  belarus: {
+    keywords: [ "by", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\udde7\ud83c\uddfe",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  belgium: {
+    keywords: [ "be", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\udde7\ud83c\uddea",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  belize: {
+    keywords: [ "bz", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\udde7\ud83c\uddff",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  benin: {
+    keywords: [ "bj", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\udde7\ud83c\uddef",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  bermuda: {
+    keywords: [ "bm", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\udde7\ud83c\uddf2",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  bhutan: {
+    keywords: [ "bt", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\udde7\ud83c\uddf9",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  bolivia: {
+    keywords: [ "bo", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\udde7\ud83c\uddf4",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  caribbean_netherlands: {
+    keywords: [ "bonaire", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\udde7\ud83c\uddf6",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  bosnia_herzegovina: {
+    keywords: [ "bosnia", "herzegovina", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\udde7\ud83c\udde6",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  botswana: {
+    keywords: [ "bw", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\udde7\ud83c\uddfc",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  brazil: {
+    keywords: [ "br", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\udde7\ud83c\uddf7",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  british_indian_ocean_territory: {
+    keywords: [ "british", "indian", "ocean", "territory", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\uddee\ud83c\uddf4",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  british_virgin_islands: {
+    keywords: [ "british", "virgin", "islands", "bvi", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\uddfb\ud83c\uddec",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  brunei: {
+    keywords: [ "bn", "darussalam", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\udde7\ud83c\uddf3",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  bulgaria: {
+    keywords: [ "bg", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\udde7\ud83c\uddec",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  burkina_faso: {
+    keywords: [ "burkina", "faso", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\udde7\ud83c\uddeb",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  burundi: {
+    keywords: [ "bi", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\udde7\ud83c\uddee",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  cape_verde: {
+    keywords: [ "cabo", "verde", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\udde8\ud83c\uddfb",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  cambodia: {
+    keywords: [ "kh", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\uddf0\ud83c\udded",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  cameroon: {
+    keywords: [ "cm", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\udde8\ud83c\uddf2",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  canada: {
+    keywords: [ "ca", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\udde8\ud83c\udde6",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  canary_islands: {
+    keywords: [ "canary", "islands", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\uddee\ud83c\udde8",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  cayman_islands: {
+    keywords: [ "cayman", "islands", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\uddf0\ud83c\uddfe",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  central_african_republic: {
+    keywords: [ "central", "african", "republic", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\udde8\ud83c\uddeb",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  chad: {
+    keywords: [ "td", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\uddf9\ud83c\udde9",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  chile: {
+    keywords: [ "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\udde8\ud83c\uddf1",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  cn: {
+    keywords: [ "china", "chinese", "prc", "flag", "country", "nation", "banner" ],
+    "char": "\ud83c\udde8\ud83c\uddf3",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  christmas_island: {
+    keywords: [ "christmas", "island", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\udde8\ud83c\uddfd",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  cocos_islands: {
+    keywords: [ "cocos", "keeling", "islands", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\udde8\ud83c\udde8",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  colombia: {
+    keywords: [ "co", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\udde8\ud83c\uddf4",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  comoros: {
+    keywords: [ "km", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\uddf0\ud83c\uddf2",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  congo_brazzaville: {
+    keywords: [ "congo", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\udde8\ud83c\uddec",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  congo_kinshasa: {
+    keywords: [ "congo", "democratic", "republic", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\udde8\ud83c\udde9",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  cook_islands: {
+    keywords: [ "cook", "islands", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\udde8\ud83c\uddf0",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  costa_rica: {
+    keywords: [ "costa", "rica", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\udde8\ud83c\uddf7",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  croatia: {
+    keywords: [ "hr", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\udded\ud83c\uddf7",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  cuba: {
+    keywords: [ "cu", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\udde8\ud83c\uddfa",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  curacao: {
+    keywords: [ "cura\xe7ao", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\udde8\ud83c\uddfc",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  cyprus: {
+    keywords: [ "cy", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\udde8\ud83c\uddfe",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  czech_republic: {
+    keywords: [ "cz", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\udde8\ud83c\uddff",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  denmark: {
+    keywords: [ "dk", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\udde9\ud83c\uddf0",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  djibouti: {
+    keywords: [ "dj", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\udde9\ud83c\uddef",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  dominica: {
+    keywords: [ "dm", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\udde9\ud83c\uddf2",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  dominican_republic: {
+    keywords: [ "dominican", "republic", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\udde9\ud83c\uddf4",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  ecuador: {
+    keywords: [ "ec", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\uddea\ud83c\udde8",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  egypt: {
+    keywords: [ "eg", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\uddea\ud83c\uddec",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  el_salvador: {
+    keywords: [ "el", "salvador", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\uddf8\ud83c\uddfb",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  equatorial_guinea: {
+    keywords: [ "equatorial", "gn", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\uddec\ud83c\uddf6",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  eritrea: {
+    keywords: [ "er", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\uddea\ud83c\uddf7",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  estonia: {
+    keywords: [ "ee", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\uddea\ud83c\uddea",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  ethiopia: {
+    keywords: [ "et", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\uddea\ud83c\uddf9",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  eu: {
+    keywords: [ "european", "union", "flag", "banner" ],
+    "char": "\ud83c\uddea\ud83c\uddfa",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  falkland_islands: {
+    keywords: [ "falkland", "islands", "malvinas", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\uddeb\ud83c\uddf0",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  faroe_islands: {
+    keywords: [ "faroe", "islands", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\uddeb\ud83c\uddf4",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  fiji: {
+    keywords: [ "fj", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\uddeb\ud83c\uddef",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  finland: {
+    keywords: [ "fi", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\uddeb\ud83c\uddee",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  fr: {
+    keywords: [ "banner", "flag", "nation", "france", "french", "country" ],
+    "char": "\ud83c\uddeb\ud83c\uddf7",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  french_guiana: {
+    keywords: [ "french", "guiana", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\uddec\ud83c\uddeb",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  french_polynesia: {
+    keywords: [ "french", "polynesia", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\uddf5\ud83c\uddeb",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  french_southern_territories: {
+    keywords: [ "french", "southern", "territories", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\uddf9\ud83c\uddeb",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  gabon: {
+    keywords: [ "ga", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\uddec\ud83c\udde6",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  gambia: {
+    keywords: [ "gm", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\uddec\ud83c\uddf2",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  georgia: {
+    keywords: [ "ge", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\uddec\ud83c\uddea",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  de: {
+    keywords: [ "german", "nation", "flag", "country", "banner" ],
+    "char": "\ud83c\udde9\ud83c\uddea",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  ghana: {
+    keywords: [ "gh", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\uddec\ud83c\udded",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  gibraltar: {
+    keywords: [ "gi", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\uddec\ud83c\uddee",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  greece: {
+    keywords: [ "gr", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\uddec\ud83c\uddf7",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  greenland: {
+    keywords: [ "gl", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\uddec\ud83c\uddf1",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  grenada: {
+    keywords: [ "gd", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\uddec\ud83c\udde9",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  guadeloupe: {
+    keywords: [ "gp", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\uddec\ud83c\uddf5",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  guam: {
+    keywords: [ "gu", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\uddec\ud83c\uddfa",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  guatemala: {
+    keywords: [ "gt", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\uddec\ud83c\uddf9",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  guernsey: {
+    keywords: [ "gg", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\uddec\ud83c\uddec",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  guinea: {
+    keywords: [ "gn", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\uddec\ud83c\uddf3",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  guinea_bissau: {
+    keywords: [ "gw", "bissau", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\uddec\ud83c\uddfc",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  guyana: {
+    keywords: [ "gy", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\uddec\ud83c\uddfe",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  haiti: {
+    keywords: [ "ht", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\udded\ud83c\uddf9",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  honduras: {
+    keywords: [ "hn", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\udded\ud83c\uddf3",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  hong_kong: {
+    keywords: [ "hong", "kong", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\udded\ud83c\uddf0",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  hungary: {
+    keywords: [ "hu", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\udded\ud83c\uddfa",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  iceland: {
+    keywords: [ "is", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\uddee\ud83c\uddf8",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  india: {
+    keywords: [ "in", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\uddee\ud83c\uddf3",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  indonesia: {
+    keywords: [ "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\uddee\ud83c\udde9",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  iran: {
+    keywords: [ "iran,", "islamic", "republic", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\uddee\ud83c\uddf7",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  iraq: {
+    keywords: [ "iq", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\uddee\ud83c\uddf6",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  ireland: {
+    keywords: [ "ie", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\uddee\ud83c\uddea",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  isle_of_man: {
+    keywords: [ "isle", "man", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\uddee\ud83c\uddf2",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  israel: {
+    keywords: [ "il", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\uddee\ud83c\uddf1",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  it: {
+    keywords: [ "italy", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\uddee\ud83c\uddf9",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  cote_divoire: {
+    keywords: [ "ivory", "coast", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\udde8\ud83c\uddee",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  jamaica: {
+    keywords: [ "jm", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\uddef\ud83c\uddf2",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  jp: {
+    keywords: [ "japanese", "nation", "flag", "country", "banner" ],
+    "char": "\ud83c\uddef\ud83c\uddf5",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  jersey: {
+    keywords: [ "je", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\uddef\ud83c\uddea",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  jordan: {
+    keywords: [ "jo", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\uddef\ud83c\uddf4",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  kazakhstan: {
+    keywords: [ "kz", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\uddf0\ud83c\uddff",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  kenya: {
+    keywords: [ "ke", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\uddf0\ud83c\uddea",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  kiribati: {
+    keywords: [ "ki", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\uddf0\ud83c\uddee",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  kosovo: {
+    keywords: [ "xk", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\uddfd\ud83c\uddf0",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  kuwait: {
+    keywords: [ "kw", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\uddf0\ud83c\uddfc",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  kyrgyzstan: {
+    keywords: [ "kg", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\uddf0\ud83c\uddec",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  laos: {
+    keywords: [ "lao", "democratic", "republic", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\uddf1\ud83c\udde6",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  latvia: {
+    keywords: [ "lv", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\uddf1\ud83c\uddfb",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  lebanon: {
+    keywords: [ "lb", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\uddf1\ud83c\udde7",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  lesotho: {
+    keywords: [ "ls", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\uddf1\ud83c\uddf8",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  liberia: {
+    keywords: [ "lr", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\uddf1\ud83c\uddf7",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  libya: {
+    keywords: [ "ly", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\uddf1\ud83c\uddfe",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  liechtenstein: {
+    keywords: [ "li", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\uddf1\ud83c\uddee",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  lithuania: {
+    keywords: [ "lt", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\uddf1\ud83c\uddf9",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  luxembourg: {
+    keywords: [ "lu", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\uddf1\ud83c\uddfa",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  macau: {
+    keywords: [ "macao", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\uddf2\ud83c\uddf4",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  macedonia: {
+    keywords: [ "macedonia,", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\uddf2\ud83c\uddf0",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  madagascar: {
+    keywords: [ "mg", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\uddf2\ud83c\uddec",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  malawi: {
+    keywords: [ "mw", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\uddf2\ud83c\uddfc",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  malaysia: {
+    keywords: [ "my", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\uddf2\ud83c\uddfe",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  maldives: {
+    keywords: [ "mv", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\uddf2\ud83c\uddfb",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  mali: {
+    keywords: [ "ml", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\uddf2\ud83c\uddf1",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  malta: {
+    keywords: [ "mt", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\uddf2\ud83c\uddf9",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  marshall_islands: {
+    keywords: [ "marshall", "islands", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\uddf2\ud83c\udded",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  martinique: {
+    keywords: [ "mq", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\uddf2\ud83c\uddf6",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  mauritania: {
+    keywords: [ "mr", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\uddf2\ud83c\uddf7",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  mauritius: {
+    keywords: [ "mu", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\uddf2\ud83c\uddfa",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  mayotte: {
+    keywords: [ "yt", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\uddfe\ud83c\uddf9",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  mexico: {
+    keywords: [ "mx", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\uddf2\ud83c\uddfd",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  micronesia: {
+    keywords: [ "micronesia,", "federated", "states", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\uddeb\ud83c\uddf2",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  moldova: {
+    keywords: [ "moldova,", "republic", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\uddf2\ud83c\udde9",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  monaco: {
+    keywords: [ "mc", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\uddf2\ud83c\udde8",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  mongolia: {
+    keywords: [ "mn", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\uddf2\ud83c\uddf3",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  montenegro: {
+    keywords: [ "me", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\uddf2\ud83c\uddea",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  montserrat: {
+    keywords: [ "ms", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\uddf2\ud83c\uddf8",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  morocco: {
+    keywords: [ "ma", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\uddf2\ud83c\udde6",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  mozambique: {
+    keywords: [ "mz", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\uddf2\ud83c\uddff",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  myanmar: {
+    keywords: [ "mm", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\uddf2\ud83c\uddf2",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  namibia: {
+    keywords: [ "na", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\uddf3\ud83c\udde6",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  nauru: {
+    keywords: [ "nr", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\uddf3\ud83c\uddf7",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  nepal: {
+    keywords: [ "np", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\uddf3\ud83c\uddf5",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  netherlands: {
+    keywords: [ "nl", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\uddf3\ud83c\uddf1",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  new_caledonia: {
+    keywords: [ "new", "caledonia", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\uddf3\ud83c\udde8",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  new_zealand: {
+    keywords: [ "new", "zealand", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\uddf3\ud83c\uddff",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  nicaragua: {
+    keywords: [ "ni", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\uddf3\ud83c\uddee",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  niger: {
+    keywords: [ "ne", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\uddf3\ud83c\uddea",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  nigeria: {
+    keywords: [ "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\uddf3\ud83c\uddec",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  niue: {
+    keywords: [ "nu", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\uddf3\ud83c\uddfa",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  norfolk_island: {
+    keywords: [ "norfolk", "island", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\uddf3\ud83c\uddeb",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  northern_mariana_islands: {
+    keywords: [ "northern", "mariana", "islands", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\uddf2\ud83c\uddf5",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  north_korea: {
+    keywords: [ "north", "korea", "nation", "flag", "country", "banner" ],
+    "char": "\ud83c\uddf0\ud83c\uddf5",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  norway: {
+    keywords: [ "no", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\uddf3\ud83c\uddf4",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  oman: {
+    keywords: [ "om_symbol", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\uddf4\ud83c\uddf2",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  pakistan: {
+    keywords: [ "pk", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\uddf5\ud83c\uddf0",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  palau: {
+    keywords: [ "pw", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\uddf5\ud83c\uddfc",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  palestinian_territories: {
+    keywords: [ "palestine", "palestinian", "territories", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\uddf5\ud83c\uddf8",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  panama: {
+    keywords: [ "pa", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\uddf5\ud83c\udde6",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  papua_new_guinea: {
+    keywords: [ "papua", "new", "guinea", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\uddf5\ud83c\uddec",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  paraguay: {
+    keywords: [ "py", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\uddf5\ud83c\uddfe",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  peru: {
+    keywords: [ "pe", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\uddf5\ud83c\uddea",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  philippines: {
+    keywords: [ "ph", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\uddf5\ud83c\udded",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  pitcairn_islands: {
+    keywords: [ "pitcairn", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\uddf5\ud83c\uddf3",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  poland: {
+    keywords: [ "pl", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\uddf5\ud83c\uddf1",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  portugal: {
+    keywords: [ "pt", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\uddf5\ud83c\uddf9",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  puerto_rico: {
+    keywords: [ "puerto", "rico", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\uddf5\ud83c\uddf7",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  qatar: {
+    keywords: [ "qa", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\uddf6\ud83c\udde6",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  reunion: {
+    keywords: [ "r\xe9union", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\uddf7\ud83c\uddea",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  romania: {
+    keywords: [ "ro", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\uddf7\ud83c\uddf4",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  ru: {
+    keywords: [ "russian", "federation", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\uddf7\ud83c\uddfa",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  rwanda: {
+    keywords: [ "rw", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\uddf7\ud83c\uddfc",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  st_barthelemy: {
+    keywords: [ "saint", "barth\xe9lemy", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\udde7\ud83c\uddf1",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  st_helena: {
+    keywords: [ "saint", "helena", "ascension", "tristan", "cunha", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\uddf8\ud83c\udded",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  st_kitts_nevis: {
+    keywords: [ "saint", "kitts", "nevis", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\uddf0\ud83c\uddf3",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  st_lucia: {
+    keywords: [ "saint", "lucia", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\uddf1\ud83c\udde8",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  st_pierre_miquelon: {
+    keywords: [ "saint", "pierre", "miquelon", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\uddf5\ud83c\uddf2",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  st_vincent_grenadines: {
+    keywords: [ "saint", "vincent", "grenadines", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\uddfb\ud83c\udde8",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  samoa: {
+    keywords: [ "ws", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\uddfc\ud83c\uddf8",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  san_marino: {
+    keywords: [ "san", "marino", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\uddf8\ud83c\uddf2",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  sao_tome_principe: {
+    keywords: [ "sao", "tome", "principe", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\uddf8\ud83c\uddf9",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  saudi_arabia: {
+    keywords: [ "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\uddf8\ud83c\udde6",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  senegal: {
+    keywords: [ "sn", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\uddf8\ud83c\uddf3",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  serbia: {
+    keywords: [ "rs", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\uddf7\ud83c\uddf8",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  seychelles: {
+    keywords: [ "sc", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\uddf8\ud83c\udde8",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  sierra_leone: {
+    keywords: [ "sierra", "leone", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\uddf8\ud83c\uddf1",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  singapore: {
+    keywords: [ "sg", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\uddf8\ud83c\uddec",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  sint_maarten: {
+    keywords: [ "sint", "maarten", "dutch", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\uddf8\ud83c\uddfd",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  slovakia: {
+    keywords: [ "sk", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\uddf8\ud83c\uddf0",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  slovenia: {
+    keywords: [ "si", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\uddf8\ud83c\uddee",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  solomon_islands: {
+    keywords: [ "solomon", "islands", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\uddf8\ud83c\udde7",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  somalia: {
+    keywords: [ "so", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\uddf8\ud83c\uddf4",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  south_africa: {
+    keywords: [ "south", "africa", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\uddff\ud83c\udde6",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  south_georgia_south_sandwich_islands: {
+    keywords: [ "south", "georgia", "sandwich", "islands", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\uddec\ud83c\uddf8",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  kr: {
+    keywords: [ "south", "korea", "nation", "flag", "country", "banner" ],
+    "char": "\ud83c\uddf0\ud83c\uddf7",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  south_sudan: {
+    keywords: [ "south", "sd", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\uddf8\ud83c\uddf8",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  es: {
+    keywords: [ "spain", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\uddea\ud83c\uddf8",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  sri_lanka: {
+    keywords: [ "sri", "lanka", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\uddf1\ud83c\uddf0",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  sudan: {
+    keywords: [ "sd", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\uddf8\ud83c\udde9",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  suriname: {
+    keywords: [ "sr", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\uddf8\ud83c\uddf7",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  swaziland: {
+    keywords: [ "sz", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\uddf8\ud83c\uddff",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  sweden: {
+    keywords: [ "se", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\uddf8\ud83c\uddea",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  switzerland: {
+    keywords: [ "ch", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\udde8\ud83c\udded",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  syria: {
+    keywords: [ "syrian", "arab", "republic", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\uddf8\ud83c\uddfe",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  taiwan: {
+    keywords: [ "tw", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\uddf9\ud83c\uddfc",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  tajikistan: {
+    keywords: [ "tj", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\uddf9\ud83c\uddef",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  tanzania: {
+    keywords: [ "tanzania,", "united", "republic", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\uddf9\ud83c\uddff",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  thailand: {
+    keywords: [ "th", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\uddf9\ud83c\udded",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  timor_leste: {
+    keywords: [ "timor", "leste", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\uddf9\ud83c\uddf1",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  togo: {
+    keywords: [ "tg", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\uddf9\ud83c\uddec",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  tokelau: {
+    keywords: [ "tk", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\uddf9\ud83c\uddf0",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  tonga: {
+    keywords: [ "to", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\uddf9\ud83c\uddf4",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  trinidad_tobago: {
+    keywords: [ "trinidad", "tobago", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\uddf9\ud83c\uddf9",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  tunisia: {
+    keywords: [ "tn", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\uddf9\ud83c\uddf3",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  tr: {
+    keywords: [ "turkey", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\uddf9\ud83c\uddf7",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  turkmenistan: {
+    keywords: [ "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\uddf9\ud83c\uddf2",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  turks_caicos_islands: {
+    keywords: [ "turks", "caicos", "islands", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\uddf9\ud83c\udde8",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  tuvalu: {
+    keywords: [ "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\uddf9\ud83c\uddfb",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  uganda: {
+    keywords: [ "ug", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\uddfa\ud83c\uddec",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  ukraine: {
+    keywords: [ "ua", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\uddfa\ud83c\udde6",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  united_arab_emirates: {
+    keywords: [ "united", "arab", "emirates", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\udde6\ud83c\uddea",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  uk: {
+    keywords: [ "united", "kingdom", "great", "britain", "northern", "ireland", "flag", "nation", "country", "banner", "british", "UK", "english", "england", "union jack" ],
+    "char": "\ud83c\uddec\ud83c\udde7",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  england: {
+    keywords: [ "flag", "english" ],
+    "char": "\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc65\udb40\udc6e\udb40\udc67\udb40\udc7f",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  scotland: {
+    keywords: [ "flag", "scottish" ],
+    "char": "\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc73\udb40\udc63\udb40\udc74\udb40\udc7f",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  wales: {
+    keywords: [ "flag", "welsh" ],
+    "char": "\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc77\udb40\udc6c\udb40\udc73\udb40\udc7f",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  us: {
+    keywords: [ "united", "states", "america", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\uddfa\ud83c\uddf8",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  us_virgin_islands: {
+    keywords: [ "virgin", "islands", "us", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\uddfb\ud83c\uddee",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  uruguay: {
+    keywords: [ "uy", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\uddfa\ud83c\uddfe",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  uzbekistan: {
+    keywords: [ "uz", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\uddfa\ud83c\uddff",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  vanuatu: {
+    keywords: [ "vu", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\uddfb\ud83c\uddfa",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  vatican_city: {
+    keywords: [ "vatican", "city", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\uddfb\ud83c\udde6",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  venezuela: {
+    keywords: [ "ve", "bolivarian", "republic", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\uddfb\ud83c\uddea",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  vietnam: {
+    keywords: [ "viet", "nam", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\uddfb\ud83c\uddf3",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  wallis_futuna: {
+    keywords: [ "wallis", "futuna", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\uddfc\ud83c\uddeb",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  western_sahara: {
+    keywords: [ "western", "sahara", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\uddea\ud83c\udded",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  yemen: {
+    keywords: [ "ye", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\uddfe\ud83c\uddea",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  zambia: {
+    keywords: [ "zm", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\uddff\ud83c\uddf2",
+    fitzpatrick_scale: false,
+    category: "flags"
+  },
+  zimbabwe: {
+    keywords: [ "zw", "flag", "nation", "country", "banner" ],
+    "char": "\ud83c\uddff\ud83c\uddfc",
+    fitzpatrick_scale: false,
+    category: "flags"
+  }
+});
\ No newline at end of file
diff --git a/website/js/vendor/tinymce/js/tinymce/plugins/emoticons/js/emojis.min.js b/website/js/vendor/tinymce/js/tinymce/plugins/emoticons/js/emojis.min.js
new file mode 100644 (file)
index 0000000..5e59213
--- /dev/null
@@ -0,0 +1,2 @@
+// NOTE: Source: npm package: emojilib, file:emojis.json
+window.tinymce.Resource.add("tinymce.plugins.emoticons",{grinning:{keywords:["face","smile","happy","joy",":D","grin"],"char":"\ud83d\ude00",fitzpatrick_scale:!1,category:"people"},grimacing:{keywords:["face","grimace","teeth"],"char":"\ud83d\ude2c",fitzpatrick_scale:!1,category:"people"},grin:{keywords:["face","happy","smile","joy","kawaii"],"char":"\ud83d\ude01",fitzpatrick_scale:!1,category:"people"},joy:{keywords:["face","cry","tears","weep","happy","happytears","haha"],"char":"\ud83d\ude02",fitzpatrick_scale:!1,category:"people"},rofl:{keywords:["face","rolling","floor","laughing","lol","haha"],"char":"\ud83e\udd23",fitzpatrick_scale:!1,category:"people"},smiley:{keywords:["face","happy","joy","haha",":D",":)","smile","funny"],"char":"\ud83d\ude03",fitzpatrick_scale:!1,category:"people"},smile:{keywords:["face","happy","joy","funny","haha","laugh","like",":D",":)"],"char":"\ud83d\ude04",fitzpatrick_scale:!1,category:"people"},sweat_smile:{keywords:["face","hot","happy","laugh","sweat","smile","relief"],"char":"\ud83d\ude05",fitzpatrick_scale:!1,category:"people"},laughing:{keywords:["happy","joy","lol","satisfied","haha","face","glad","XD","laugh"],"char":"\ud83d\ude06",fitzpatrick_scale:!1,category:"people"},innocent:{keywords:["face","angel","heaven","halo"],"char":"\ud83d\ude07",fitzpatrick_scale:!1,category:"people"},wink:{keywords:["face","happy","mischievous","secret",";)","smile","eye"],"char":"\ud83d\ude09",fitzpatrick_scale:!1,category:"people"},blush:{keywords:["face","smile","happy","flushed","crush","embarrassed","shy","joy"],"char":"\ud83d\ude0a",fitzpatrick_scale:!1,category:"people"},slightly_smiling_face:{keywords:["face","smile"],"char":"\ud83d\ude42",fitzpatrick_scale:!1,category:"people"},upside_down_face:{keywords:["face","flipped","silly","smile"],"char":"\ud83d\ude43",fitzpatrick_scale:!1,category:"people"},relaxed:{keywords:["face","blush","massage","happiness"],"char":"\u263a\ufe0f",fitzpatrick_scale:!1,category:"people"},yum:{keywords:["happy","joy","tongue","smile","face","silly","yummy","nom","delicious","savouring"],"char":"\ud83d\ude0b",fitzpatrick_scale:!1,category:"people"},relieved:{keywords:["face","relaxed","phew","massage","happiness"],"char":"\ud83d\ude0c",fitzpatrick_scale:!1,category:"people"},heart_eyes:{keywords:["face","love","like","affection","valentines","infatuation","crush","heart"],"char":"\ud83d\ude0d",fitzpatrick_scale:!1,category:"people"},kissing_heart:{keywords:["face","love","like","affection","valentines","infatuation","kiss"],"char":"\ud83d\ude18",fitzpatrick_scale:!1,category:"people"},kissing:{keywords:["love","like","face","3","valentines","infatuation","kiss"],"char":"\ud83d\ude17",fitzpatrick_scale:!1,category:"people"},kissing_smiling_eyes:{keywords:["face","affection","valentines","infatuation","kiss"],"char":"\ud83d\ude19",fitzpatrick_scale:!1,category:"people"},kissing_closed_eyes:{keywords:["face","love","like","affection","valentines","infatuation","kiss"],"char":"\ud83d\ude1a",fitzpatrick_scale:!1,category:"people"},stuck_out_tongue_winking_eye:{keywords:["face","prank","childish","playful","mischievous","smile","wink","tongue"],"char":"\ud83d\ude1c",fitzpatrick_scale:!1,category:"people"},zany:{keywords:["face","goofy","crazy"],"char":"\ud83e\udd2a",fitzpatrick_scale:!1,category:"people"},raised_eyebrow:{keywords:["face","distrust","scepticism","disapproval","disbelief","surprise"],"char":"\ud83e\udd28",fitzpatrick_scale:!1,category:"people"},monocle:{keywords:["face","stuffy","wealthy"],"char":"\ud83e\uddd0",fitzpatrick_scale:!1,category:"people"},stuck_out_tongue_closed_eyes:{keywords:["face","prank","playful","mischievous","smile","tongue"],"char":"\ud83d\ude1d",fitzpatrick_scale:!1,category:"people"},stuck_out_tongue:{keywords:["face","prank","childish","playful","mischievous","smile","tongue"],"char":"\ud83d\ude1b",fitzpatrick_scale:!1,category:"people"},money_mouth_face:{keywords:["face","rich","dollar","money"],"char":"\ud83e\udd11",fitzpatrick_scale:!1,category:"people"},nerd_face:{keywords:["face","nerdy","geek","dork"],"char":"\ud83e\udd13",fitzpatrick_scale:!1,category:"people"},sunglasses:{keywords:["face","cool","smile","summer","beach","sunglass"],"char":"\ud83d\ude0e",fitzpatrick_scale:!1,category:"people"},star_struck:{keywords:["face","smile","starry","eyes","grinning"],"char":"\ud83e\udd29",fitzpatrick_scale:!1,category:"people"},clown_face:{keywords:["face"],"char":"\ud83e\udd21",fitzpatrick_scale:!1,category:"people"},cowboy_hat_face:{keywords:["face","cowgirl","hat"],"char":"\ud83e\udd20",fitzpatrick_scale:!1,category:"people"},hugs:{keywords:["face","smile","hug"],"char":"\ud83e\udd17",fitzpatrick_scale:!1,category:"people"},smirk:{keywords:["face","smile","mean","prank","smug","sarcasm"],"char":"\ud83d\ude0f",fitzpatrick_scale:!1,category:"people"},no_mouth:{keywords:["face","hellokitty"],"char":"\ud83d\ude36",fitzpatrick_scale:!1,category:"people"},neutral_face:{keywords:["indifference","meh",":|","neutral"],"char":"\ud83d\ude10",fitzpatrick_scale:!1,category:"people"},expressionless:{keywords:["face","indifferent","-_-","meh","deadpan"],"char":"\ud83d\ude11",fitzpatrick_scale:!1,category:"people"},unamused:{keywords:["indifference","bored","straight face","serious","sarcasm","unimpressed","skeptical","dubious","side_eye"],"char":"\ud83d\ude12",fitzpatrick_scale:!1,category:"people"},roll_eyes:{keywords:["face","eyeroll","frustrated"],"char":"\ud83d\ude44",fitzpatrick_scale:!1,category:"people"},thinking:{keywords:["face","hmmm","think","consider"],"char":"\ud83e\udd14",fitzpatrick_scale:!1,category:"people"},lying_face:{keywords:["face","lie","pinocchio"],"char":"\ud83e\udd25",fitzpatrick_scale:!1,category:"people"},hand_over_mouth:{keywords:["face","whoops","shock","surprise"],"char":"\ud83e\udd2d",fitzpatrick_scale:!1,category:"people"},shushing:{keywords:["face","quiet","shhh"],"char":"\ud83e\udd2b",fitzpatrick_scale:!1,category:"people"},symbols_over_mouth:{keywords:["face","swearing","cursing","cussing","profanity","expletive"],"char":"\ud83e\udd2c",fitzpatrick_scale:!1,category:"people"},exploding_head:{keywords:["face","shocked","mind","blown"],"char":"\ud83e\udd2f",fitzpatrick_scale:!1,category:"people"},flushed:{keywords:["face","blush","shy","flattered"],"char":"\ud83d\ude33",fitzpatrick_scale:!1,category:"people"},disappointed:{keywords:["face","sad","upset","depressed",":("],"char":"\ud83d\ude1e",fitzpatrick_scale:!1,category:"people"},worried:{keywords:["face","concern","nervous",":("],"char":"\ud83d\ude1f",fitzpatrick_scale:!1,category:"people"},angry:{keywords:["mad","face","annoyed","frustrated"],"char":"\ud83d\ude20",fitzpatrick_scale:!1,category:"people"},rage:{keywords:["angry","mad","hate","despise"],"char":"\ud83d\ude21",fitzpatrick_scale:!1,category:"people"},pensive:{keywords:["face","sad","depressed","upset"],"char":"\ud83d\ude14",fitzpatrick_scale:!1,category:"people"},confused:{keywords:["face","indifference","huh","weird","hmmm",":/"],"char":"\ud83d\ude15",fitzpatrick_scale:!1,category:"people"},slightly_frowning_face:{keywords:["face","frowning","disappointed","sad","upset"],"char":"\ud83d\ude41",fitzpatrick_scale:!1,category:"people"},frowning_face:{keywords:["face","sad","upset","frown"],"char":"\u2639",fitzpatrick_scale:!1,category:"people"},persevere:{keywords:["face","sick","no","upset","oops"],"char":"\ud83d\ude23",fitzpatrick_scale:!1,category:"people"},confounded:{keywords:["face","confused","sick","unwell","oops",":S"],"char":"\ud83d\ude16",fitzpatrick_scale:!1,category:"people"},tired_face:{keywords:["sick","whine","upset","frustrated"],"char":"\ud83d\ude2b",fitzpatrick_scale:!1,category:"people"},weary:{keywords:["face","tired","sleepy","sad","frustrated","upset"],"char":"\ud83d\ude29",fitzpatrick_scale:!1,category:"people"},triumph:{keywords:["face","gas","phew","proud","pride"],"char":"\ud83d\ude24",fitzpatrick_scale:!1,category:"people"},open_mouth:{keywords:["face","surprise","impressed","wow","whoa",":O"],"char":"\ud83d\ude2e",fitzpatrick_scale:!1,category:"people"},scream:{keywords:["face","munch","scared","omg"],"char":"\ud83d\ude31",fitzpatrick_scale:!1,category:"people"},fearful:{keywords:["face","scared","terrified","nervous","oops","huh"],"char":"\ud83d\ude28",fitzpatrick_scale:!1,category:"people"},cold_sweat:{keywords:["face","nervous","sweat"],"char":"\ud83d\ude30",fitzpatrick_scale:!1,category:"people"},hushed:{keywords:["face","woo","shh"],"char":"\ud83d\ude2f",fitzpatrick_scale:!1,category:"people"},frowning:{keywords:["face","aw","what"],"char":"\ud83d\ude26",fitzpatrick_scale:!1,category:"people"},anguished:{keywords:["face","stunned","nervous"],"char":"\ud83d\ude27",fitzpatrick_scale:!1,category:"people"},cry:{keywords:["face","tears","sad","depressed","upset",":'("],"char":"\ud83d\ude22",fitzpatrick_scale:!1,category:"people"},disappointed_relieved:{keywords:["face","phew","sweat","nervous"],"char":"\ud83d\ude25",fitzpatrick_scale:!1,category:"people"},drooling_face:{keywords:["face"],"char":"\ud83e\udd24",fitzpatrick_scale:!1,category:"people"},sleepy:{keywords:["face","tired","rest","nap"],"char":"\ud83d\ude2a",fitzpatrick_scale:!1,category:"people"},sweat:{keywords:["face","hot","sad","tired","exercise"],"char":"\ud83d\ude13",fitzpatrick_scale:!1,category:"people"},sob:{keywords:["face","cry","tears","sad","upset","depressed"],"char":"\ud83d\ude2d",fitzpatrick_scale:!1,category:"people"},dizzy_face:{keywords:["spent","unconscious","xox","dizzy"],"char":"\ud83d\ude35",fitzpatrick_scale:!1,category:"people"},astonished:{keywords:["face","xox","surprised","poisoned"],"char":"\ud83d\ude32",fitzpatrick_scale:!1,category:"people"},zipper_mouth_face:{keywords:["face","sealed","zipper","secret"],"char":"\ud83e\udd10",fitzpatrick_scale:!1,category:"people"},nauseated_face:{keywords:["face","vomit","gross","green","sick","throw up","ill"],"char":"\ud83e\udd22",fitzpatrick_scale:!1,category:"people"},sneezing_face:{keywords:["face","gesundheit","sneeze","sick","allergy"],"char":"\ud83e\udd27",fitzpatrick_scale:!1,category:"people"},vomiting:{keywords:["face","sick"],"char":"\ud83e\udd2e",fitzpatrick_scale:!1,category:"people"},mask:{keywords:["face","sick","ill","disease"],"char":"\ud83d\ude37",fitzpatrick_scale:!1,category:"people"},face_with_thermometer:{keywords:["sick","temperature","thermometer","cold","fever"],"char":"\ud83e\udd12",fitzpatrick_scale:!1,category:"people"},face_with_head_bandage:{keywords:["injured","clumsy","bandage","hurt"],"char":"\ud83e\udd15",fitzpatrick_scale:!1,category:"people"},sleeping:{keywords:["face","tired","sleepy","night","zzz"],"char":"\ud83d\ude34",fitzpatrick_scale:!1,category:"people"},zzz:{keywords:["sleepy","tired","dream"],"char":"\ud83d\udca4",fitzpatrick_scale:!1,category:"people"},poop:{keywords:["hankey","shitface","fail","turd","shit"],"char":"\ud83d\udca9",fitzpatrick_scale:!1,category:"people"},smiling_imp:{keywords:["devil","horns"],"char":"\ud83d\ude08",fitzpatrick_scale:!1,category:"people"},imp:{keywords:["devil","angry","horns"],"char":"\ud83d\udc7f",fitzpatrick_scale:!1,category:"people"},japanese_ogre:{keywords:["monster","red","mask","halloween","scary","creepy","devil","demon","japanese","ogre"],"char":"\ud83d\udc79",fitzpatrick_scale:!1,category:"people"},japanese_goblin:{keywords:["red","evil","mask","monster","scary","creepy","japanese","goblin"],"char":"\ud83d\udc7a",fitzpatrick_scale:!1,category:"people"},skull:{keywords:["dead","skeleton","creepy","death"],"char":"\ud83d\udc80",fitzpatrick_scale:!1,category:"people"},ghost:{keywords:["halloween","spooky","scary"],"char":"\ud83d\udc7b",fitzpatrick_scale:!1,category:"people"},alien:{keywords:["UFO","paul","weird","outer_space"],"char":"\ud83d\udc7d",fitzpatrick_scale:!1,category:"people"},robot:{keywords:["computer","machine","bot"],"char":"\ud83e\udd16",fitzpatrick_scale:!1,category:"people"},smiley_cat:{keywords:["animal","cats","happy","smile"],"char":"\ud83d\ude3a",fitzpatrick_scale:!1,category:"people"},smile_cat:{keywords:["animal","cats","smile"],"char":"\ud83d\ude38",fitzpatrick_scale:!1,category:"people"},joy_cat:{keywords:["animal","cats","haha","happy","tears"],"char":"\ud83d\ude39",fitzpatrick_scale:!1,category:"people"},heart_eyes_cat:{keywords:["animal","love","like","affection","cats","valentines","heart"],"char":"\ud83d\ude3b",fitzpatrick_scale:!1,category:"people"},smirk_cat:{keywords:["animal","cats","smirk"],"char":"\ud83d\ude3c",fitzpatrick_scale:!1,category:"people"},kissing_cat:{keywords:["animal","cats","kiss"],"char":"\ud83d\ude3d",fitzpatrick_scale:!1,category:"people"},scream_cat:{keywords:["animal","cats","munch","scared","scream"],"char":"\ud83d\ude40",fitzpatrick_scale:!1,category:"people"},crying_cat_face:{keywords:["animal","tears","weep","sad","cats","upset","cry"],"char":"\ud83d\ude3f",fitzpatrick_scale:!1,category:"people"},pouting_cat:{keywords:["animal","cats"],"char":"\ud83d\ude3e",fitzpatrick_scale:!1,category:"people"},palms_up:{keywords:["hands","gesture","cupped","prayer"],"char":"\ud83e\udd32",fitzpatrick_scale:!0,category:"people"},raised_hands:{keywords:["gesture","hooray","yea","celebration","hands"],"char":"\ud83d\ude4c",fitzpatrick_scale:!0,category:"people"},clap:{keywords:["hands","praise","applause","congrats","yay"],"char":"\ud83d\udc4f",fitzpatrick_scale:!0,category:"people"},wave:{keywords:["hands","gesture","goodbye","solong","farewell","hello","hi","palm"],"char":"\ud83d\udc4b",fitzpatrick_scale:!0,category:"people"},call_me_hand:{keywords:["hands","gesture"],"char":"\ud83e\udd19",fitzpatrick_scale:!0,category:"people"},"+1":{keywords:["thumbsup","yes","awesome","good","agree","accept","cool","hand","like"],"char":"\ud83d\udc4d",fitzpatrick_scale:!0,category:"people"},"-1":{keywords:["thumbsdown","no","dislike","hand"],"char":"\ud83d\udc4e",fitzpatrick_scale:!0,category:"people"},facepunch:{keywords:["angry","violence","fist","hit","attack","hand"],"char":"\ud83d\udc4a",fitzpatrick_scale:!0,category:"people"},fist:{keywords:["fingers","hand","grasp"],"char":"\u270a",fitzpatrick_scale:!0,category:"people"},fist_left:{keywords:["hand","fistbump"],"char":"\ud83e\udd1b",fitzpatrick_scale:!0,category:"people"},fist_right:{keywords:["hand","fistbump"],"char":"\ud83e\udd1c",fitzpatrick_scale:!0,category:"people"},v:{keywords:["fingers","ohyeah","hand","peace","victory","two"],"char":"\u270c",fitzpatrick_scale:!0,category:"people"},ok_hand:{keywords:["fingers","limbs","perfect","ok","okay"],"char":"\ud83d\udc4c",fitzpatrick_scale:!0,category:"people"},raised_hand:{keywords:["fingers","stop","highfive","palm","ban"],"char":"\u270b",fitzpatrick_scale:!0,category:"people"},raised_back_of_hand:{keywords:["fingers","raised","backhand"],"char":"\ud83e\udd1a",fitzpatrick_scale:!0,category:"people"},open_hands:{keywords:["fingers","butterfly","hands","open"],"char":"\ud83d\udc50",fitzpatrick_scale:!0,category:"people"},muscle:{keywords:["arm","flex","hand","summer","strong","biceps"],"char":"\ud83d\udcaa",fitzpatrick_scale:!0,category:"people"},pray:{keywords:["please","hope","wish","namaste","highfive"],"char":"\ud83d\ude4f",fitzpatrick_scale:!0,category:"people"},handshake:{keywords:["agreement","shake"],"char":"\ud83e\udd1d",fitzpatrick_scale:!1,category:"people"},point_up:{keywords:["hand","fingers","direction","up"],"char":"\u261d",fitzpatrick_scale:!0,category:"people"},point_up_2:{keywords:["fingers","hand","direction","up"],"char":"\ud83d\udc46",fitzpatrick_scale:!0,category:"people"},point_down:{keywords:["fingers","hand","direction","down"],"char":"\ud83d\udc47",fitzpatrick_scale:!0,category:"people"},point_left:{keywords:["direction","fingers","hand","left"],"char":"\ud83d\udc48",fitzpatrick_scale:!0,category:"people"},point_right:{keywords:["fingers","hand","direction","right"],"char":"\ud83d\udc49",fitzpatrick_scale:!0,category:"people"},fu:{keywords:["hand","fingers","rude","middle","flipping"],"char":"\ud83d\udd95",fitzpatrick_scale:!0,category:"people"},raised_hand_with_fingers_splayed:{keywords:["hand","fingers","palm"],"char":"\ud83d\udd90",fitzpatrick_scale:!0,category:"people"},love_you:{keywords:["hand","fingers","gesture"],"char":"\ud83e\udd1f",fitzpatrick_scale:!0,category:"people"},metal:{keywords:["hand","fingers","evil_eye","sign_of_horns","rock_on"],"char":"\ud83e\udd18",fitzpatrick_scale:!0,category:"people"},crossed_fingers:{keywords:["good","lucky"],"char":"\ud83e\udd1e",fitzpatrick_scale:!0,category:"people"},vulcan_salute:{keywords:["hand","fingers","spock","star trek"],"char":"\ud83d\udd96",fitzpatrick_scale:!0,category:"people"},writing_hand:{keywords:["lower_left_ballpoint_pen","stationery","write","compose"],"char":"\u270d",fitzpatrick_scale:!0,category:"people"},selfie:{keywords:["camera","phone"],"char":"\ud83e\udd33",fitzpatrick_scale:!0,category:"people"},nail_care:{keywords:["beauty","manicure","finger","fashion","nail"],"char":"\ud83d\udc85",fitzpatrick_scale:!0,category:"people"},lips:{keywords:["mouth","kiss"],"char":"\ud83d\udc44",fitzpatrick_scale:!1,category:"people"},tongue:{keywords:["mouth","playful"],"char":"\ud83d\udc45",fitzpatrick_scale:!1,category:"people"},ear:{keywords:["face","hear","sound","listen"],"char":"\ud83d\udc42",fitzpatrick_scale:!0,category:"people"},nose:{keywords:["smell","sniff"],"char":"\ud83d\udc43",fitzpatrick_scale:!0,category:"people"},eye:{keywords:["face","look","see","watch","stare"],"char":"\ud83d\udc41",fitzpatrick_scale:!1,category:"people"},eyes:{keywords:["look","watch","stalk","peek","see"],"char":"\ud83d\udc40",fitzpatrick_scale:!1,category:"people"},brain:{keywords:["smart","intelligent"],"char":"\ud83e\udde0",fitzpatrick_scale:!1,category:"people"},bust_in_silhouette:{keywords:["user","person","human"],"char":"\ud83d\udc64",fitzpatrick_scale:!1,category:"people"},busts_in_silhouette:{keywords:["user","person","human","group","team"],"char":"\ud83d\udc65",fitzpatrick_scale:!1,category:"people"},speaking_head:{keywords:["user","person","human","sing","say","talk"],"char":"\ud83d\udde3",fitzpatrick_scale:!1,category:"people"},baby:{keywords:["child","boy","girl","toddler"],"char":"\ud83d\udc76",fitzpatrick_scale:!0,category:"people"},child:{keywords:["gender-neutral","young"],"char":"\ud83e\uddd2",fitzpatrick_scale:!0,category:"people"},boy:{keywords:["man","male","guy","teenager"],"char":"\ud83d\udc66",fitzpatrick_scale:!0,category:"people"},girl:{keywords:["female","woman","teenager"],"char":"\ud83d\udc67",fitzpatrick_scale:!0,category:"people"},adult:{keywords:["gender-neutral","person"],"char":"\ud83e\uddd1",fitzpatrick_scale:!0,category:"people"},man:{keywords:["mustache","father","dad","guy","classy","sir","moustache"],"char":"\ud83d\udc68",fitzpatrick_scale:!0,category:"people"},woman:{keywords:["female","girls","lady"],"char":"\ud83d\udc69",fitzpatrick_scale:!0,category:"people"},blonde_woman:{keywords:["woman","female","girl","blonde","person"],"char":"\ud83d\udc71\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"people"},blonde_man:{keywords:["man","male","boy","blonde","guy","person"],"char":"\ud83d\udc71",fitzpatrick_scale:!0,category:"people"},bearded_person:{keywords:["person","bewhiskered"],"char":"\ud83e\uddd4",fitzpatrick_scale:!0,category:"people"},older_adult:{keywords:["human","elder","senior","gender-neutral"],"char":"\ud83e\uddd3",fitzpatrick_scale:!0,category:"people"},older_man:{keywords:["human","male","men","old","elder","senior"],"char":"\ud83d\udc74",fitzpatrick_scale:!0,category:"people"},older_woman:{keywords:["human","female","women","lady","old","elder","senior"],"char":"\ud83d\udc75",fitzpatrick_scale:!0,category:"people"},man_with_gua_pi_mao:{keywords:["male","boy","chinese"],"char":"\ud83d\udc72",fitzpatrick_scale:!0,category:"people"},woman_with_headscarf:{keywords:["female","hijab","mantilla","tichel"],"char":"\ud83e\uddd5",fitzpatrick_scale:!0,category:"people"},woman_with_turban:{keywords:["female","indian","hinduism","arabs","woman"],"char":"\ud83d\udc73\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"people"},man_with_turban:{keywords:["male","indian","hinduism","arabs"],"char":"\ud83d\udc73",fitzpatrick_scale:!0,category:"people"},policewoman:{keywords:["woman","police","law","legal","enforcement","arrest","911","female"],"char":"\ud83d\udc6e\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"people"},policeman:{keywords:["man","police","law","legal","enforcement","arrest","911"],"char":"\ud83d\udc6e",fitzpatrick_scale:!0,category:"people"},construction_worker_woman:{keywords:["female","human","wip","build","construction","worker","labor","woman"],"char":"\ud83d\udc77\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"people"},construction_worker_man:{keywords:["male","human","wip","guy","build","construction","worker","labor"],"char":"\ud83d\udc77",fitzpatrick_scale:!0,category:"people"},guardswoman:{keywords:["uk","gb","british","female","royal","woman"],"char":"\ud83d\udc82\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"people"},guardsman:{keywords:["uk","gb","british","male","guy","royal"],"char":"\ud83d\udc82",fitzpatrick_scale:!0,category:"people"},female_detective:{keywords:["human","spy","detective","female","woman"],"char":"\ud83d\udd75\ufe0f\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"people"},male_detective:{keywords:["human","spy","detective"],"char":"\ud83d\udd75",fitzpatrick_scale:!0,category:"people"},woman_health_worker:{keywords:["doctor","nurse","therapist","healthcare","woman","human"],"char":"\ud83d\udc69\u200d\u2695\ufe0f",fitzpatrick_scale:!0,category:"people"},man_health_worker:{keywords:["doctor","nurse","therapist","healthcare","man","human"],"char":"\ud83d\udc68\u200d\u2695\ufe0f",fitzpatrick_scale:!0,category:"people"},woman_farmer:{keywords:["rancher","gardener","woman","human"],"char":"\ud83d\udc69\u200d\ud83c\udf3e",fitzpatrick_scale:!0,category:"people"},man_farmer:{keywords:["rancher","gardener","man","human"],"char":"\ud83d\udc68\u200d\ud83c\udf3e",fitzpatrick_scale:!0,category:"people"},woman_cook:{keywords:["chef","woman","human"],"char":"\ud83d\udc69\u200d\ud83c\udf73",fitzpatrick_scale:!0,category:"people"},man_cook:{keywords:["chef","man","human"],"char":"\ud83d\udc68\u200d\ud83c\udf73",fitzpatrick_scale:!0,category:"people"},woman_student:{keywords:["graduate","woman","human"],"char":"\ud83d\udc69\u200d\ud83c\udf93",fitzpatrick_scale:!0,category:"people"},man_student:{keywords:["graduate","man","human"],"char":"\ud83d\udc68\u200d\ud83c\udf93",fitzpatrick_scale:!0,category:"people"},woman_singer:{keywords:["rockstar","entertainer","woman","human"],"char":"\ud83d\udc69\u200d\ud83c\udfa4",fitzpatrick_scale:!0,category:"people"},man_singer:{keywords:["rockstar","entertainer","man","human"],"char":"\ud83d\udc68\u200d\ud83c\udfa4",fitzpatrick_scale:!0,category:"people"},woman_teacher:{keywords:["instructor","professor","woman","human"],"char":"\ud83d\udc69\u200d\ud83c\udfeb",fitzpatrick_scale:!0,category:"people"},man_teacher:{keywords:["instructor","professor","man","human"],"char":"\ud83d\udc68\u200d\ud83c\udfeb",fitzpatrick_scale:!0,category:"people"},woman_factory_worker:{keywords:["assembly","industrial","woman","human"],"char":"\ud83d\udc69\u200d\ud83c\udfed",fitzpatrick_scale:!0,category:"people"},man_factory_worker:{keywords:["assembly","industrial","man","human"],"char":"\ud83d\udc68\u200d\ud83c\udfed",fitzpatrick_scale:!0,category:"people"},woman_technologist:{keywords:["coder","developer","engineer","programmer","software","woman","human","laptop","computer"],"char":"\ud83d\udc69\u200d\ud83d\udcbb",fitzpatrick_scale:!0,category:"people"},man_technologist:{keywords:["coder","developer","engineer","programmer","software","man","human","laptop","computer"],"char":"\ud83d\udc68\u200d\ud83d\udcbb",fitzpatrick_scale:!0,category:"people"},woman_office_worker:{keywords:["business","manager","woman","human"],"char":"\ud83d\udc69\u200d\ud83d\udcbc",fitzpatrick_scale:!0,category:"people"},man_office_worker:{keywords:["business","manager","man","human"],"char":"\ud83d\udc68\u200d\ud83d\udcbc",fitzpatrick_scale:!0,category:"people"},woman_mechanic:{keywords:["plumber","woman","human","wrench"],"char":"\ud83d\udc69\u200d\ud83d\udd27",fitzpatrick_scale:!0,category:"people"},man_mechanic:{keywords:["plumber","man","human","wrench"],"char":"\ud83d\udc68\u200d\ud83d\udd27",fitzpatrick_scale:!0,category:"people"},woman_scientist:{keywords:["biologist","chemist","engineer","physicist","woman","human"],"char":"\ud83d\udc69\u200d\ud83d\udd2c",fitzpatrick_scale:!0,category:"people"},man_scientist:{keywords:["biologist","chemist","engineer","physicist","man","human"],"char":"\ud83d\udc68\u200d\ud83d\udd2c",fitzpatrick_scale:!0,category:"people"},woman_artist:{keywords:["painter","woman","human"],"char":"\ud83d\udc69\u200d\ud83c\udfa8",fitzpatrick_scale:!0,category:"people"},man_artist:{keywords:["painter","man","human"],"char":"\ud83d\udc68\u200d\ud83c\udfa8",fitzpatrick_scale:!0,category:"people"},woman_firefighter:{keywords:["fireman","woman","human"],"char":"\ud83d\udc69\u200d\ud83d\ude92",fitzpatrick_scale:!0,category:"people"},man_firefighter:{keywords:["fireman","man","human"],"char":"\ud83d\udc68\u200d\ud83d\ude92",fitzpatrick_scale:!0,category:"people"},woman_pilot:{keywords:["aviator","plane","woman","human"],"char":"\ud83d\udc69\u200d\u2708\ufe0f",fitzpatrick_scale:!0,category:"people"},man_pilot:{keywords:["aviator","plane","man","human"],"char":"\ud83d\udc68\u200d\u2708\ufe0f",fitzpatrick_scale:!0,category:"people"},woman_astronaut:{keywords:["space","rocket","woman","human"],"char":"\ud83d\udc69\u200d\ud83d\ude80",fitzpatrick_scale:!0,category:"people"},man_astronaut:{keywords:["space","rocket","man","human"],"char":"\ud83d\udc68\u200d\ud83d\ude80",fitzpatrick_scale:!0,category:"people"},woman_judge:{keywords:["justice","court","woman","human"],"char":"\ud83d\udc69\u200d\u2696\ufe0f",fitzpatrick_scale:!0,category:"people"},man_judge:{keywords:["justice","court","man","human"],"char":"\ud83d\udc68\u200d\u2696\ufe0f",fitzpatrick_scale:!0,category:"people"},mrs_claus:{keywords:["woman","female","xmas","mother christmas"],"char":"\ud83e\udd36",fitzpatrick_scale:!0,category:"people"},santa:{keywords:["festival","man","male","xmas","father christmas"],"char":"\ud83c\udf85",fitzpatrick_scale:!0,category:"people"},sorceress:{keywords:["woman","female","mage","witch"],"char":"\ud83e\uddd9\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"people"},wizard:{keywords:["man","male","mage","sorcerer"],"char":"\ud83e\uddd9\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"people"},woman_elf:{keywords:["woman","female"],"char":"\ud83e\udddd\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"people"},man_elf:{keywords:["man","male"],"char":"\ud83e\udddd\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"people"},woman_vampire:{keywords:["woman","female"],"char":"\ud83e\udddb\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"people"},man_vampire:{keywords:["man","male","dracula"],"char":"\ud83e\udddb\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"people"},woman_zombie:{keywords:["woman","female","undead","walking dead"],"char":"\ud83e\udddf\u200d\u2640\ufe0f",fitzpatrick_scale:!1,category:"people"},man_zombie:{keywords:["man","male","dracula","undead","walking dead"],"char":"\ud83e\udddf\u200d\u2642\ufe0f",fitzpatrick_scale:!1,category:"people"},woman_genie:{keywords:["woman","female"],"char":"\ud83e\uddde\u200d\u2640\ufe0f",fitzpatrick_scale:!1,category:"people"},man_genie:{keywords:["man","male"],"char":"\ud83e\uddde\u200d\u2642\ufe0f",fitzpatrick_scale:!1,category:"people"},mermaid:{keywords:["woman","female","merwoman","ariel"],"char":"\ud83e\udddc\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"people"},merman:{keywords:["man","male","triton"],"char":"\ud83e\udddc\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"people"},woman_fairy:{keywords:["woman","female"],"char":"\ud83e\uddda\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"people"},man_fairy:{keywords:["man","male"],"char":"\ud83e\uddda\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"people"},angel:{keywords:["heaven","wings","halo"],"char":"\ud83d\udc7c",fitzpatrick_scale:!0,category:"people"},pregnant_woman:{keywords:["baby"],"char":"\ud83e\udd30",fitzpatrick_scale:!0,category:"people"},breastfeeding:{keywords:["nursing","baby"],"char":"\ud83e\udd31",fitzpatrick_scale:!0,category:"people"},princess:{keywords:["girl","woman","female","blond","crown","royal","queen"],"char":"\ud83d\udc78",fitzpatrick_scale:!0,category:"people"},prince:{keywords:["boy","man","male","crown","royal","king"],"char":"\ud83e\udd34",fitzpatrick_scale:!0,category:"people"},bride_with_veil:{keywords:["couple","marriage","wedding","woman","bride"],"char":"\ud83d\udc70",fitzpatrick_scale:!0,category:"people"},man_in_tuxedo:{keywords:["couple","marriage","wedding","groom"],"char":"\ud83e\udd35",fitzpatrick_scale:!0,category:"people"},running_woman:{keywords:["woman","walking","exercise","race","running","female"],"char":"\ud83c\udfc3\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"people"},running_man:{keywords:["man","walking","exercise","race","running"],"char":"\ud83c\udfc3",fitzpatrick_scale:!0,category:"people"},walking_woman:{keywords:["human","feet","steps","woman","female"],"char":"\ud83d\udeb6\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"people"},walking_man:{keywords:["human","feet","steps"],"char":"\ud83d\udeb6",fitzpatrick_scale:!0,category:"people"},dancer:{keywords:["female","girl","woman","fun"],"char":"\ud83d\udc83",fitzpatrick_scale:!0,category:"people"},man_dancing:{keywords:["male","boy","fun","dancer"],"char":"\ud83d\udd7a",fitzpatrick_scale:!0,category:"people"},dancing_women:{keywords:["female","bunny","women","girls"],"char":"\ud83d\udc6f",fitzpatrick_scale:!1,category:"people"},dancing_men:{keywords:["male","bunny","men","boys"],"char":"\ud83d\udc6f\u200d\u2642\ufe0f",fitzpatrick_scale:!1,category:"people"},couple:{keywords:["pair","people","human","love","date","dating","like","affection","valentines","marriage"],"char":"\ud83d\udc6b",fitzpatrick_scale:!1,category:"people"},two_men_holding_hands:{keywords:["pair","couple","love","like","bromance","friendship","people","human"],"char":"\ud83d\udc6c",fitzpatrick_scale:!1,category:"people"},two_women_holding_hands:{keywords:["pair","friendship","couple","love","like","female","people","human"],"char":"\ud83d\udc6d",fitzpatrick_scale:!1,category:"people"},bowing_woman:{keywords:["woman","female","girl"],"char":"\ud83d\ude47\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"people"},bowing_man:{keywords:["man","male","boy"],"char":"\ud83d\ude47",fitzpatrick_scale:!0,category:"people"},man_facepalming:{keywords:["man","male","boy","disbelief"],"char":"\ud83e\udd26",fitzpatrick_scale:!0,category:"people"},woman_facepalming:{keywords:["woman","female","girl","disbelief"],"char":"\ud83e\udd26\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"people"},woman_shrugging:{keywords:["woman","female","girl","confused","indifferent","doubt"],"char":"\ud83e\udd37",fitzpatrick_scale:!0,category:"people"},man_shrugging:{keywords:["man","male","boy","confused","indifferent","doubt"],"char":"\ud83e\udd37\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"people"},tipping_hand_woman:{keywords:["female","girl","woman","human","information"],"char":"\ud83d\udc81",fitzpatrick_scale:!0,category:"people"},tipping_hand_man:{keywords:["male","boy","man","human","information"],"char":"\ud83d\udc81\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"people"},no_good_woman:{keywords:["female","girl","woman","nope"],"char":"\ud83d\ude45",fitzpatrick_scale:!0,category:"people"},no_good_man:{keywords:["male","boy","man","nope"],"char":"\ud83d\ude45\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"people"},ok_woman:{keywords:["women","girl","female","pink","human","woman"],"char":"\ud83d\ude46",fitzpatrick_scale:!0,category:"people"},ok_man:{keywords:["men","boy","male","blue","human","man"],"char":"\ud83d\ude46\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"people"},raising_hand_woman:{keywords:["female","girl","woman"],"char":"\ud83d\ude4b",fitzpatrick_scale:!0,category:"people"},raising_hand_man:{keywords:["male","boy","man"],"char":"\ud83d\ude4b\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"people"},pouting_woman:{keywords:["female","girl","woman"],"char":"\ud83d\ude4e",fitzpatrick_scale:!0,category:"people"},pouting_man:{keywords:["male","boy","man"],"char":"\ud83d\ude4e\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"people"},frowning_woman:{keywords:["female","girl","woman","sad","depressed","discouraged","unhappy"],"char":"\ud83d\ude4d",fitzpatrick_scale:!0,category:"people"},frowning_man:{keywords:["male","boy","man","sad","depressed","discouraged","unhappy"],"char":"\ud83d\ude4d\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"people"},haircut_woman:{keywords:["female","girl","woman"],"char":"\ud83d\udc87",fitzpatrick_scale:!0,category:"people"},haircut_man:{keywords:["male","boy","man"],"char":"\ud83d\udc87\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"people"},massage_woman:{keywords:["female","girl","woman","head"],"char":"\ud83d\udc86",fitzpatrick_scale:!0,category:"people"},massage_man:{keywords:["male","boy","man","head"],"char":"\ud83d\udc86\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"people"},woman_in_steamy_room:{keywords:["female","woman","spa","steamroom","sauna"],"char":"\ud83e\uddd6\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"people"},man_in_steamy_room:{keywords:["male","man","spa","steamroom","sauna"],"char":"\ud83e\uddd6\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"people"},couple_with_heart_woman_man:{keywords:["pair","love","like","affection","human","dating","valentines","marriage"],"char":"\ud83d\udc91",fitzpatrick_scale:!1,category:"people"},couple_with_heart_woman_woman:{keywords:["pair","love","like","affection","human","dating","valentines","marriage"],"char":"\ud83d\udc69\u200d\u2764\ufe0f\u200d\ud83d\udc69",fitzpatrick_scale:!1,category:"people"},couple_with_heart_man_man:{keywords:["pair","love","like","affection","human","dating","valentines","marriage"],"char":"\ud83d\udc68\u200d\u2764\ufe0f\u200d\ud83d\udc68",fitzpatrick_scale:!1,category:"people"},couplekiss_man_woman:{keywords:["pair","valentines","love","like","dating","marriage"],"char":"\ud83d\udc8f",fitzpatrick_scale:!1,category:"people"},couplekiss_woman_woman:{keywords:["pair","valentines","love","like","dating","marriage"],"char":"\ud83d\udc69\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc69",fitzpatrick_scale:!1,category:"people"},couplekiss_man_man:{keywords:["pair","valentines","love","like","dating","marriage"],"char":"\ud83d\udc68\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68",fitzpatrick_scale:!1,category:"people"},family_man_woman_boy:{keywords:["home","parents","child","mom","dad","father","mother","people","human"],"char":"\ud83d\udc6a",fitzpatrick_scale:!1,category:"people"},family_man_woman_girl:{keywords:["home","parents","people","human","child"],"char":"\ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d\udc67",fitzpatrick_scale:!1,category:"people"},family_man_woman_girl_boy:{keywords:["home","parents","people","human","children"],"char":"\ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d\udc66",fitzpatrick_scale:!1,category:"people"},family_man_woman_boy_boy:{keywords:["home","parents","people","human","children"],"char":"\ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d\udc66\u200d\ud83d\udc66",fitzpatrick_scale:!1,category:"people"},family_man_woman_girl_girl:{keywords:["home","parents","people","human","children"],"char":"\ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d\udc67",fitzpatrick_scale:!1,category:"people"},family_woman_woman_boy:{keywords:["home","parents","people","human","children"],"char":"\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d\udc66",fitzpatrick_scale:!1,category:"people"},family_woman_woman_girl:{keywords:["home","parents","people","human","children"],"char":"\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d\udc67",fitzpatrick_scale:!1,category:"people"},family_woman_woman_girl_boy:{keywords:["home","parents","people","human","children"],"char":"\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d\udc66",fitzpatrick_scale:!1,category:"people"},family_woman_woman_boy_boy:{keywords:["home","parents","people","human","children"],"char":"\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d\udc66\u200d\ud83d\udc66",fitzpatrick_scale:!1,category:"people"},family_woman_woman_girl_girl:{keywords:["home","parents","people","human","children"],"char":"\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d\udc67",fitzpatrick_scale:!1,category:"people"},family_man_man_boy:{keywords:["home","parents","people","human","children"],"char":"\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d\udc66",fitzpatrick_scale:!1,category:"people"},family_man_man_girl:{keywords:["home","parents","people","human","children"],"char":"\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d\udc67",fitzpatrick_scale:!1,category:"people"},family_man_man_girl_boy:{keywords:["home","parents","people","human","children"],"char":"\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d\udc67\u200d\ud83d\udc66",fitzpatrick_scale:!1,category:"people"},family_man_man_boy_boy:{keywords:["home","parents","people","human","children"],"char":"\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d\udc66\u200d\ud83d\udc66",fitzpatrick_scale:!1,category:"people"},family_man_man_girl_girl:{keywords:["home","parents","people","human","children"],"char":"\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d\udc67\u200d\ud83d\udc67",fitzpatrick_scale:!1,category:"people"},family_woman_boy:{keywords:["home","parent","people","human","child"],"char":"\ud83d\udc69\u200d\ud83d\udc66",fitzpatrick_scale:!1,category:"people"},family_woman_girl:{keywords:["home","parent","people","human","child"],"char":"\ud83d\udc69\u200d\ud83d\udc67",fitzpatrick_scale:!1,category:"people"},family_woman_girl_boy:{keywords:["home","parent","people","human","children"],"char":"\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d\udc66",fitzpatrick_scale:!1,category:"people"},family_woman_boy_boy:{keywords:["home","parent","people","human","children"],"char":"\ud83d\udc69\u200d\ud83d\udc66\u200d\ud83d\udc66",fitzpatrick_scale:!1,category:"people"},family_woman_girl_girl:{keywords:["home","parent","people","human","children"],"char":"\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d\udc67",fitzpatrick_scale:!1,category:"people"},family_man_boy:{keywords:["home","parent","people","human","child"],"char":"\ud83d\udc68\u200d\ud83d\udc66",fitzpatrick_scale:!1,category:"people"},family_man_girl:{keywords:["home","parent","people","human","child"],"char":"\ud83d\udc68\u200d\ud83d\udc67",fitzpatrick_scale:!1,category:"people"},family_man_girl_boy:{keywords:["home","parent","people","human","children"],"char":"\ud83d\udc68\u200d\ud83d\udc67\u200d\ud83d\udc66",fitzpatrick_scale:!1,category:"people"},family_man_boy_boy:{keywords:["home","parent","people","human","children"],"char":"\ud83d\udc68\u200d\ud83d\udc66\u200d\ud83d\udc66",fitzpatrick_scale:!1,category:"people"},family_man_girl_girl:{keywords:["home","parent","people","human","children"],"char":"\ud83d\udc68\u200d\ud83d\udc67\u200d\ud83d\udc67",fitzpatrick_scale:!1,category:"people"},coat:{keywords:["jacket"],"char":"\ud83e\udde5",fitzpatrick_scale:!1,category:"people"},womans_clothes:{keywords:["fashion","shopping_bags","female"],"char":"\ud83d\udc5a",fitzpatrick_scale:!1,category:"people"},tshirt:{keywords:["fashion","cloth","casual","shirt","tee"],"char":"\ud83d\udc55",fitzpatrick_scale:!1,category:"people"},jeans:{keywords:["fashion","shopping"],"char":"\ud83d\udc56",fitzpatrick_scale:!1,category:"people"},necktie:{keywords:["shirt","suitup","formal","fashion","cloth","business"],"char":"\ud83d\udc54",fitzpatrick_scale:!1,category:"people"},dress:{keywords:["clothes","fashion","shopping"],"char":"\ud83d\udc57",fitzpatrick_scale:!1,category:"people"},bikini:{keywords:["swimming","female","woman","girl","fashion","beach","summer"],"char":"\ud83d\udc59",fitzpatrick_scale:!1,category:"people"},kimono:{keywords:["dress","fashion","women","female","japanese"],"char":"\ud83d\udc58",fitzpatrick_scale:!1,category:"people"},lipstick:{keywords:["female","girl","fashion","woman"],"char":"\ud83d\udc84",fitzpatrick_scale:!1,category:"people"},kiss:{keywords:["face","lips","love","like","affection","valentines"],"char":"\ud83d\udc8b",fitzpatrick_scale:!1,category:"people"},footprints:{keywords:["feet","tracking","walking","beach"],"char":"\ud83d\udc63",fitzpatrick_scale:!1,category:"people"},high_heel:{keywords:["fashion","shoes","female","pumps","stiletto"],"char":"\ud83d\udc60",fitzpatrick_scale:!1,category:"people"},sandal:{keywords:["shoes","fashion","flip flops"],"char":"\ud83d\udc61",fitzpatrick_scale:!1,category:"people"},boot:{keywords:["shoes","fashion"],"char":"\ud83d\udc62",fitzpatrick_scale:!1,category:"people"},mans_shoe:{keywords:["fashion","male"],"char":"\ud83d\udc5e",fitzpatrick_scale:!1,category:"people"},athletic_shoe:{keywords:["shoes","sports","sneakers"],"char":"\ud83d\udc5f",fitzpatrick_scale:!1,category:"people"},socks:{keywords:["stockings","clothes"],"char":"\ud83e\udde6",fitzpatrick_scale:!1,category:"people"},gloves:{keywords:["hands","winter","clothes"],"char":"\ud83e\udde4",fitzpatrick_scale:!1,category:"people"},scarf:{keywords:["neck","winter","clothes"],"char":"\ud83e\udde3",fitzpatrick_scale:!1,category:"people"},womans_hat:{keywords:["fashion","accessories","female","lady","spring"],"char":"\ud83d\udc52",fitzpatrick_scale:!1,category:"people"},tophat:{keywords:["magic","gentleman","classy","circus"],"char":"\ud83c\udfa9",fitzpatrick_scale:!1,category:"people"},billed_hat:{keywords:["cap","baseball"],"char":"\ud83e\udde2",fitzpatrick_scale:!1,category:"people"},rescue_worker_helmet:{keywords:["construction","build"],"char":"\u26d1",fitzpatrick_scale:!1,category:"people"},mortar_board:{keywords:["school","college","degree","university","graduation","cap","hat","legal","learn","education"],"char":"\ud83c\udf93",fitzpatrick_scale:!1,category:"people"},crown:{keywords:["king","kod","leader","royalty","lord"],"char":"\ud83d\udc51",fitzpatrick_scale:!1,category:"people"},school_satchel:{keywords:["student","education","bag","backpack"],"char":"\ud83c\udf92",fitzpatrick_scale:!1,category:"people"},pouch:{keywords:["bag","accessories","shopping"],"char":"\ud83d\udc5d",fitzpatrick_scale:!1,category:"people"},purse:{keywords:["fashion","accessories","money","sales","shopping"],"char":"\ud83d\udc5b",fitzpatrick_scale:!1,category:"people"},handbag:{keywords:["fashion","accessory","accessories","shopping"],"char":"\ud83d\udc5c",fitzpatrick_scale:!1,category:"people"},briefcase:{keywords:["business","documents","work","law","legal","job","career"],"char":"\ud83d\udcbc",fitzpatrick_scale:!1,category:"people"},eyeglasses:{keywords:["fashion","accessories","eyesight","nerdy","dork","geek"],"char":"\ud83d\udc53",fitzpatrick_scale:!1,category:"people"},dark_sunglasses:{keywords:["face","cool","accessories"],"char":"\ud83d\udd76",fitzpatrick_scale:!1,category:"people"},ring:{keywords:["wedding","propose","marriage","valentines","diamond","fashion","jewelry","gem","engagement"],"char":"\ud83d\udc8d",fitzpatrick_scale:!1,category:"people"},closed_umbrella:{keywords:["weather","rain","drizzle"],"char":"\ud83c\udf02",fitzpatrick_scale:!1,category:"people"},dog:{keywords:["animal","friend","nature","woof","puppy","pet","faithful"],"char":"\ud83d\udc36",fitzpatrick_scale:!1,category:"animals_and_nature"},cat:{keywords:["animal","meow","nature","pet","kitten"],"char":"\ud83d\udc31",fitzpatrick_scale:!1,category:"animals_and_nature"},mouse:{keywords:["animal","nature","cheese_wedge","rodent"],"char":"\ud83d\udc2d",fitzpatrick_scale:!1,category:"animals_and_nature"},hamster:{keywords:["animal","nature"],"char":"\ud83d\udc39",fitzpatrick_scale:!1,category:"animals_and_nature"},rabbit:{keywords:["animal","nature","pet","spring","magic","bunny"],"char":"\ud83d\udc30",fitzpatrick_scale:!1,category:"animals_and_nature"},fox_face:{keywords:["animal","nature","face"],"char":"\ud83e\udd8a",fitzpatrick_scale:!1,category:"animals_and_nature"},bear:{keywords:["animal","nature","wild"],"char":"\ud83d\udc3b",fitzpatrick_scale:!1,category:"animals_and_nature"},panda_face:{keywords:["animal","nature","panda"],"char":"\ud83d\udc3c",fitzpatrick_scale:!1,category:"animals_and_nature"},koala:{keywords:["animal","nature"],"char":"\ud83d\udc28",fitzpatrick_scale:!1,category:"animals_and_nature"},tiger:{keywords:["animal","cat","danger","wild","nature","roar"],"char":"\ud83d\udc2f",fitzpatrick_scale:!1,category:"animals_and_nature"},lion:{keywords:["animal","nature"],"char":"\ud83e\udd81",fitzpatrick_scale:!1,category:"animals_and_nature"},cow:{keywords:["beef","ox","animal","nature","moo","milk"],"char":"\ud83d\udc2e",fitzpatrick_scale:!1,category:"animals_and_nature"},pig:{keywords:["animal","oink","nature"],"char":"\ud83d\udc37",fitzpatrick_scale:!1,category:"animals_and_nature"},pig_nose:{keywords:["animal","oink"],"char":"\ud83d\udc3d",fitzpatrick_scale:!1,category:"animals_and_nature"},frog:{keywords:["animal","nature","croak","toad"],"char":"\ud83d\udc38",fitzpatrick_scale:!1,category:"animals_and_nature"},squid:{keywords:["animal","nature","ocean","sea"],"char":"\ud83e\udd91",fitzpatrick_scale:!1,category:"animals_and_nature"},octopus:{keywords:["animal","creature","ocean","sea","nature","beach"],"char":"\ud83d\udc19",fitzpatrick_scale:!1,category:"animals_and_nature"},shrimp:{keywords:["animal","ocean","nature","seafood"],"char":"\ud83e\udd90",fitzpatrick_scale:!1,category:"animals_and_nature"},monkey_face:{keywords:["animal","nature","circus"],"char":"\ud83d\udc35",fitzpatrick_scale:!1,category:"animals_and_nature"},gorilla:{keywords:["animal","nature","circus"],"char":"\ud83e\udd8d",fitzpatrick_scale:!1,category:"animals_and_nature"},see_no_evil:{keywords:["monkey","animal","nature","haha"],"char":"\ud83d\ude48",fitzpatrick_scale:!1,category:"animals_and_nature"},hear_no_evil:{keywords:["animal","monkey","nature"],"char":"\ud83d\ude49",fitzpatrick_scale:!1,category:"animals_and_nature"},speak_no_evil:{keywords:["monkey","animal","nature","omg"],"char":"\ud83d\ude4a",fitzpatrick_scale:!1,category:"animals_and_nature"},monkey:{keywords:["animal","nature","banana","circus"],"char":"\ud83d\udc12",fitzpatrick_scale:!1,category:"animals_and_nature"},chicken:{keywords:["animal","cluck","nature","bird"],"char":"\ud83d\udc14",fitzpatrick_scale:!1,category:"animals_and_nature"},penguin:{keywords:["animal","nature"],"char":"\ud83d\udc27",fitzpatrick_scale:!1,category:"animals_and_nature"},bird:{keywords:["animal","nature","fly","tweet","spring"],"char":"\ud83d\udc26",fitzpatrick_scale:!1,category:"animals_and_nature"},baby_chick:{keywords:["animal","chicken","bird"],"char":"\ud83d\udc24",fitzpatrick_scale:!1,category:"animals_and_nature"},hatching_chick:{keywords:["animal","chicken","egg","born","baby","bird"],"char":"\ud83d\udc23",fitzpatrick_scale:!1,category:"animals_and_nature"},hatched_chick:{keywords:["animal","chicken","baby","bird"],"char":"\ud83d\udc25",fitzpatrick_scale:!1,category:"animals_and_nature"},duck:{keywords:["animal","nature","bird","mallard"],"char":"\ud83e\udd86",fitzpatrick_scale:!1,category:"animals_and_nature"},eagle:{keywords:["animal","nature","bird"],"char":"\ud83e\udd85",fitzpatrick_scale:!1,category:"animals_and_nature"},owl:{keywords:["animal","nature","bird","hoot"],"char":"\ud83e\udd89",fitzpatrick_scale:!1,category:"animals_and_nature"},bat:{keywords:["animal","nature","blind","vampire"],"char":"\ud83e\udd87",fitzpatrick_scale:!1,category:"animals_and_nature"},wolf:{keywords:["animal","nature","wild"],"char":"\ud83d\udc3a",fitzpatrick_scale:!1,category:"animals_and_nature"},boar:{keywords:["animal","nature"],"char":"\ud83d\udc17",fitzpatrick_scale:!1,category:"animals_and_nature"},horse:{keywords:["animal","brown","nature"],"char":"\ud83d\udc34",fitzpatrick_scale:!1,category:"animals_and_nature"},unicorn:{keywords:["animal","nature","mystical"],"char":"\ud83e\udd84",fitzpatrick_scale:!1,category:"animals_and_nature"},honeybee:{keywords:["animal","insect","nature","bug","spring","honey"],"char":"\ud83d\udc1d",fitzpatrick_scale:!1,category:"animals_and_nature"},bug:{keywords:["animal","insect","nature","worm"],"char":"\ud83d\udc1b",fitzpatrick_scale:!1,category:"animals_and_nature"},butterfly:{keywords:["animal","insect","nature","caterpillar"],"char":"\ud83e\udd8b",fitzpatrick_scale:!1,category:"animals_and_nature"},snail:{keywords:["slow","animal","shell"],"char":"\ud83d\udc0c",fitzpatrick_scale:!1,category:"animals_and_nature"},beetle:{keywords:["animal","insect","nature","ladybug"],"char":"\ud83d\udc1e",fitzpatrick_scale:!1,category:"animals_and_nature"},ant:{keywords:["animal","insect","nature","bug"],"char":"\ud83d\udc1c",fitzpatrick_scale:!1,category:"animals_and_nature"},grasshopper:{keywords:["animal","cricket","chirp"],"char":"\ud83e\udd97",fitzpatrick_scale:!1,category:"animals_and_nature"},spider:{keywords:["animal","arachnid"],"char":"\ud83d\udd77",fitzpatrick_scale:!1,category:"animals_and_nature"},scorpion:{keywords:["animal","arachnid"],"char":"\ud83e\udd82",fitzpatrick_scale:!1,category:"animals_and_nature"},crab:{keywords:["animal","crustacean"],"char":"\ud83e\udd80",fitzpatrick_scale:!1,category:"animals_and_nature"},snake:{keywords:["animal","evil","nature","hiss","python"],"char":"\ud83d\udc0d",fitzpatrick_scale:!1,category:"animals_and_nature"},lizard:{keywords:["animal","nature","reptile"],"char":"\ud83e\udd8e",fitzpatrick_scale:!1,category:"animals_and_nature"},"t-rex":{keywords:["animal","nature","dinosaur","tyrannosaurus","extinct"],"char":"\ud83e\udd96",fitzpatrick_scale:!1,category:"animals_and_nature"},sauropod:{keywords:["animal","nature","dinosaur","brachiosaurus","brontosaurus","diplodocus","extinct"],"char":"\ud83e\udd95",fitzpatrick_scale:!1,category:"animals_and_nature"},turtle:{keywords:["animal","slow","nature","tortoise"],"char":"\ud83d\udc22",fitzpatrick_scale:!1,category:"animals_and_nature"},tropical_fish:{keywords:["animal","swim","ocean","beach","nemo"],"char":"\ud83d\udc20",fitzpatrick_scale:!1,category:"animals_and_nature"},fish:{keywords:["animal","food","nature"],"char":"\ud83d\udc1f",fitzpatrick_scale:!1,category:"animals_and_nature"},blowfish:{keywords:["animal","nature","food","sea","ocean"],"char":"\ud83d\udc21",fitzpatrick_scale:!1,category:"animals_and_nature"},dolphin:{keywords:["animal","nature","fish","sea","ocean","flipper","fins","beach"],"char":"\ud83d\udc2c",fitzpatrick_scale:!1,category:"animals_and_nature"},shark:{keywords:["animal","nature","fish","sea","ocean","jaws","fins","beach"],"char":"\ud83e\udd88",fitzpatrick_scale:!1,category:"animals_and_nature"},whale:{keywords:["animal","nature","sea","ocean"],"char":"\ud83d\udc33",fitzpatrick_scale:!1,category:"animals_and_nature"},whale2:{keywords:["animal","nature","sea","ocean"],"char":"\ud83d\udc0b",fitzpatrick_scale:!1,category:"animals_and_nature"},crocodile:{keywords:["animal","nature","reptile","lizard","alligator"],"char":"\ud83d\udc0a",fitzpatrick_scale:!1,category:"animals_and_nature"},leopard:{keywords:["animal","nature"],"char":"\ud83d\udc06",fitzpatrick_scale:!1,category:"animals_and_nature"},zebra:{keywords:["animal","nature","stripes","safari"],"char":"\ud83e\udd93",fitzpatrick_scale:!1,category:"animals_and_nature"},tiger2:{keywords:["animal","nature","roar"],"char":"\ud83d\udc05",fitzpatrick_scale:!1,category:"animals_and_nature"},water_buffalo:{keywords:["animal","nature","ox","cow"],"char":"\ud83d\udc03",fitzpatrick_scale:!1,category:"animals_and_nature"},ox:{keywords:["animal","cow","beef"],"char":"\ud83d\udc02",fitzpatrick_scale:!1,category:"animals_and_nature"},cow2:{keywords:["beef","ox","animal","nature","moo","milk"],"char":"\ud83d\udc04",fitzpatrick_scale:!1,category:"animals_and_nature"},deer:{keywords:["animal","nature","horns","venison"],"char":"\ud83e\udd8c",fitzpatrick_scale:!1,category:"animals_and_nature"},dromedary_camel:{keywords:["animal","hot","desert","hump"],"char":"\ud83d\udc2a",fitzpatrick_scale:!1,category:"animals_and_nature"},camel:{keywords:["animal","nature","hot","desert","hump"],"char":"\ud83d\udc2b",fitzpatrick_scale:!1,category:"animals_and_nature"},giraffe:{keywords:["animal","nature","spots","safari"],"char":"\ud83e\udd92",fitzpatrick_scale:!1,category:"animals_and_nature"},elephant:{keywords:["animal","nature","nose","th","circus"],"char":"\ud83d\udc18",fitzpatrick_scale:!1,category:"animals_and_nature"},rhinoceros:{keywords:["animal","nature","horn"],"char":"\ud83e\udd8f",fitzpatrick_scale:!1,category:"animals_and_nature"},goat:{keywords:["animal","nature"],"char":"\ud83d\udc10",fitzpatrick_scale:!1,category:"animals_and_nature"},ram:{keywords:["animal","sheep","nature"],"char":"\ud83d\udc0f",fitzpatrick_scale:!1,category:"animals_and_nature"},sheep:{keywords:["animal","nature","wool","shipit"],"char":"\ud83d\udc11",fitzpatrick_scale:!1,category:"animals_and_nature"},racehorse:{keywords:["animal","gamble","luck"],"char":"\ud83d\udc0e",fitzpatrick_scale:!1,category:"animals_and_nature"},pig2:{keywords:["animal","nature"],"char":"\ud83d\udc16",fitzpatrick_scale:!1,category:"animals_and_nature"},rat:{keywords:["animal","mouse","rodent"],"char":"\ud83d\udc00",fitzpatrick_scale:!1,category:"animals_and_nature"},mouse2:{keywords:["animal","nature","rodent"],"char":"\ud83d\udc01",fitzpatrick_scale:!1,category:"animals_and_nature"},rooster:{keywords:["animal","nature","chicken"],"char":"\ud83d\udc13",fitzpatrick_scale:!1,category:"animals_and_nature"},turkey:{keywords:["animal","bird"],"char":"\ud83e\udd83",fitzpatrick_scale:!1,category:"animals_and_nature"},dove:{keywords:["animal","bird"],"char":"\ud83d\udd4a",fitzpatrick_scale:!1,category:"animals_and_nature"},dog2:{keywords:["animal","nature","friend","doge","pet","faithful"],"char":"\ud83d\udc15",fitzpatrick_scale:!1,category:"animals_and_nature"},poodle:{keywords:["dog","animal","101","nature","pet"],"char":"\ud83d\udc29",fitzpatrick_scale:!1,category:"animals_and_nature"},cat2:{keywords:["animal","meow","pet","cats"],"char":"\ud83d\udc08",fitzpatrick_scale:!1,category:"animals_and_nature"},rabbit2:{keywords:["animal","nature","pet","magic","spring"],"char":"\ud83d\udc07",fitzpatrick_scale:!1,category:"animals_and_nature"},chipmunk:{keywords:["animal","nature","rodent","squirrel"],"char":"\ud83d\udc3f",fitzpatrick_scale:!1,category:"animals_and_nature"},hedgehog:{keywords:["animal","nature","spiny"],"char":"\ud83e\udd94",fitzpatrick_scale:!1,category:"animals_and_nature"},paw_prints:{keywords:["animal","tracking","footprints","dog","cat","pet","feet"],"char":"\ud83d\udc3e",fitzpatrick_scale:!1,category:"animals_and_nature"},dragon:{keywords:["animal","myth","nature","chinese","green"],"char":"\ud83d\udc09",fitzpatrick_scale:!1,category:"animals_and_nature"},dragon_face:{keywords:["animal","myth","nature","chinese","green"],"char":"\ud83d\udc32",fitzpatrick_scale:!1,category:"animals_and_nature"},cactus:{keywords:["vegetable","plant","nature"],"char":"\ud83c\udf35",fitzpatrick_scale:!1,category:"animals_and_nature"},christmas_tree:{keywords:["festival","vacation","december","xmas","celebration"],"char":"\ud83c\udf84",fitzpatrick_scale:!1,category:"animals_and_nature"},evergreen_tree:{keywords:["plant","nature"],"char":"\ud83c\udf32",fitzpatrick_scale:!1,category:"animals_and_nature"},deciduous_tree:{keywords:["plant","nature"],"char":"\ud83c\udf33",fitzpatrick_scale:!1,category:"animals_and_nature"},palm_tree:{keywords:["plant","vegetable","nature","summer","beach","mojito","tropical"],"char":"\ud83c\udf34",fitzpatrick_scale:!1,category:"animals_and_nature"},seedling:{keywords:["plant","nature","grass","lawn","spring"],"char":"\ud83c\udf31",fitzpatrick_scale:!1,category:"animals_and_nature"},herb:{keywords:["vegetable","plant","medicine","weed","grass","lawn"],"char":"\ud83c\udf3f",fitzpatrick_scale:!1,category:"animals_and_nature"},shamrock:{keywords:["vegetable","plant","nature","irish","clover"],"char":"\u2618",fitzpatrick_scale:!1,category:"animals_and_nature"},four_leaf_clover:{keywords:["vegetable","plant","nature","lucky","irish"],"char":"\ud83c\udf40",fitzpatrick_scale:!1,category:"animals_and_nature"},bamboo:{keywords:["plant","nature","vegetable","panda","pine_decoration"],"char":"\ud83c\udf8d",fitzpatrick_scale:!1,category:"animals_and_nature"},tanabata_tree:{keywords:["plant","nature","branch","summer"],"char":"\ud83c\udf8b",fitzpatrick_scale:!1,category:"animals_and_nature"},leaves:{keywords:["nature","plant","tree","vegetable","grass","lawn","spring"],"char":"\ud83c\udf43",fitzpatrick_scale:!1,category:"animals_and_nature"},fallen_leaf:{keywords:["nature","plant","vegetable","leaves"],"char":"\ud83c\udf42",fitzpatrick_scale:!1,category:"animals_and_nature"},maple_leaf:{keywords:["nature","plant","vegetable","ca","fall"],"char":"\ud83c\udf41",fitzpatrick_scale:!1,category:"animals_and_nature"},ear_of_rice:{keywords:["nature","plant"],"char":"\ud83c\udf3e",fitzpatrick_scale:!1,category:"animals_and_nature"},hibiscus:{keywords:["plant","vegetable","flowers","beach"],"char":"\ud83c\udf3a",fitzpatrick_scale:!1,category:"animals_and_nature"},sunflower:{keywords:["nature","plant","fall"],"char":"\ud83c\udf3b",fitzpatrick_scale:!1,category:"animals_and_nature"},rose:{keywords:["flowers","valentines","love","spring"],"char":"\ud83c\udf39",fitzpatrick_scale:!1,category:"animals_and_nature"},wilted_flower:{keywords:["plant","nature","flower"],"char":"\ud83e\udd40",fitzpatrick_scale:!1,category:"animals_and_nature"},tulip:{keywords:["flowers","plant","nature","summer","spring"],"char":"\ud83c\udf37",fitzpatrick_scale:!1,category:"animals_and_nature"},blossom:{keywords:["nature","flowers","yellow"],"char":"\ud83c\udf3c",fitzpatrick_scale:!1,category:"animals_and_nature"},cherry_blossom:{keywords:["nature","plant","spring","flower"],"char":"\ud83c\udf38",fitzpatrick_scale:!1,category:"animals_and_nature"},bouquet:{keywords:["flowers","nature","spring"],"char":"\ud83d\udc90",fitzpatrick_scale:!1,category:"animals_and_nature"},mushroom:{keywords:["plant","vegetable"],"char":"\ud83c\udf44",fitzpatrick_scale:!1,category:"animals_and_nature"},chestnut:{keywords:["food","squirrel"],"char":"\ud83c\udf30",fitzpatrick_scale:!1,category:"animals_and_nature"},jack_o_lantern:{keywords:["halloween","light","pumpkin","creepy","fall"],"char":"\ud83c\udf83",fitzpatrick_scale:!1,category:"animals_and_nature"},shell:{keywords:["nature","sea","beach"],"char":"\ud83d\udc1a",fitzpatrick_scale:!1,category:"animals_and_nature"},spider_web:{keywords:["animal","insect","arachnid","silk"],"char":"\ud83d\udd78",fitzpatrick_scale:!1,category:"animals_and_nature"},earth_americas:{keywords:["globe","world","USA","international"],"char":"\ud83c\udf0e",fitzpatrick_scale:!1,category:"animals_and_nature"},earth_africa:{keywords:["globe","world","international"],"char":"\ud83c\udf0d",fitzpatrick_scale:!1,category:"animals_and_nature"},earth_asia:{keywords:["globe","world","east","international"],"char":"\ud83c\udf0f",fitzpatrick_scale:!1,category:"animals_and_nature"},full_moon:{keywords:["nature","yellow","twilight","planet","space","night","evening","sleep"],"char":"\ud83c\udf15",fitzpatrick_scale:!1,category:"animals_and_nature"},waning_gibbous_moon:{keywords:["nature","twilight","planet","space","night","evening","sleep","waxing_gibbous_moon"],"char":"\ud83c\udf16",fitzpatrick_scale:!1,category:"animals_and_nature"},last_quarter_moon:{keywords:["nature","twilight","planet","space","night","evening","sleep"],"char":"\ud83c\udf17",fitzpatrick_scale:!1,category:"animals_and_nature"},waning_crescent_moon:{keywords:["nature","twilight","planet","space","night","evening","sleep"],"char":"\ud83c\udf18",fitzpatrick_scale:!1,category:"animals_and_nature"},new_moon:{keywords:["nature","twilight","planet","space","night","evening","sleep"],"char":"\ud83c\udf11",fitzpatrick_scale:!1,category:"animals_and_nature"},waxing_crescent_moon:{keywords:["nature","twilight","planet","space","night","evening","sleep"],"char":"\ud83c\udf12",fitzpatrick_scale:!1,category:"animals_and_nature"},first_quarter_moon:{keywords:["nature","twilight","planet","space","night","evening","sleep"],"char":"\ud83c\udf13",fitzpatrick_scale:!1,category:"animals_and_nature"},waxing_gibbous_moon:{keywords:["nature","night","sky","gray","twilight","planet","space","evening","sleep"],"char":"\ud83c\udf14",fitzpatrick_scale:!1,category:"animals_and_nature"},new_moon_with_face:{keywords:["nature","twilight","planet","space","night","evening","sleep"],"char":"\ud83c\udf1a",fitzpatrick_scale:!1,category:"animals_and_nature"},full_moon_with_face:{keywords:["nature","twilight","planet","space","night","evening","sleep"],"char":"\ud83c\udf1d",fitzpatrick_scale:!1,category:"animals_and_nature"},first_quarter_moon_with_face:{keywords:["nature","twilight","planet","space","night","evening","sleep"],"char":"\ud83c\udf1b",fitzpatrick_scale:!1,category:"animals_and_nature"},last_quarter_moon_with_face:{keywords:["nature","twilight","planet","space","night","evening","sleep"],"char":"\ud83c\udf1c",fitzpatrick_scale:!1,category:"animals_and_nature"},sun_with_face:{keywords:["nature","morning","sky"],"char":"\ud83c\udf1e",fitzpatrick_scale:!1,category:"animals_and_nature"},crescent_moon:{keywords:["night","sleep","sky","evening","magic"],"char":"\ud83c\udf19",fitzpatrick_scale:!1,category:"animals_and_nature"},star:{keywords:["night","yellow"],"char":"\u2b50",fitzpatrick_scale:!1,category:"animals_and_nature"},star2:{keywords:["night","sparkle","awesome","good","magic"],"char":"\ud83c\udf1f",fitzpatrick_scale:!1,category:"animals_and_nature"},dizzy:{keywords:["star","sparkle","shoot","magic"],"char":"\ud83d\udcab",fitzpatrick_scale:!1,category:"animals_and_nature"},sparkles:{keywords:["stars","shine","shiny","cool","awesome","good","magic"],"char":"\u2728",fitzpatrick_scale:!1,category:"animals_and_nature"},comet:{keywords:["space"],"char":"\u2604",fitzpatrick_scale:!1,category:"animals_and_nature"},sunny:{keywords:["weather","nature","brightness","summer","beach","spring"],"char":"\u2600\ufe0f",fitzpatrick_scale:!1,category:"animals_and_nature"},sun_behind_small_cloud:{keywords:["weather"],"char":"\ud83c\udf24",fitzpatrick_scale:!1,category:"animals_and_nature"},partly_sunny:{keywords:["weather","nature","cloudy","morning","fall","spring"],"char":"\u26c5",fitzpatrick_scale:!1,category:"animals_and_nature"},sun_behind_large_cloud:{keywords:["weather"],"char":"\ud83c\udf25",fitzpatrick_scale:!1,category:"animals_and_nature"},sun_behind_rain_cloud:{keywords:["weather"],"char":"\ud83c\udf26",fitzpatrick_scale:!1,category:"animals_and_nature"},cloud:{keywords:["weather","sky"],"char":"\u2601\ufe0f",fitzpatrick_scale:!1,category:"animals_and_nature"},cloud_with_rain:{keywords:["weather"],"char":"\ud83c\udf27",fitzpatrick_scale:!1,category:"animals_and_nature"},cloud_with_lightning_and_rain:{keywords:["weather","lightning"],"char":"\u26c8",fitzpatrick_scale:!1,category:"animals_and_nature"},cloud_with_lightning:{keywords:["weather","thunder"],"char":"\ud83c\udf29",fitzpatrick_scale:!1,category:"animals_and_nature"},zap:{keywords:["thunder","weather","lightning bolt","fast"],"char":"\u26a1",fitzpatrick_scale:!1,category:"animals_and_nature"},fire:{keywords:["hot","cook","flame"],"char":"\ud83d\udd25",fitzpatrick_scale:!1,category:"animals_and_nature"},boom:{keywords:["bomb","explode","explosion","collision","blown"],"char":"\ud83d\udca5",fitzpatrick_scale:!1,category:"animals_and_nature"},snowflake:{keywords:["winter","season","cold","weather","christmas","xmas"],"char":"\u2744\ufe0f",fitzpatrick_scale:!1,category:"animals_and_nature"},cloud_with_snow:{keywords:["weather"],"char":"\ud83c\udf28",fitzpatrick_scale:!1,category:"animals_and_nature"},snowman:{keywords:["winter","season","cold","weather","christmas","xmas","frozen","without_snow"],"char":"\u26c4",fitzpatrick_scale:!1,category:"animals_and_nature"},snowman_with_snow:{keywords:["winter","season","cold","weather","christmas","xmas","frozen"],"char":"\u2603",fitzpatrick_scale:!1,category:"animals_and_nature"},wind_face:{keywords:["gust","air"],"char":"\ud83c\udf2c",fitzpatrick_scale:!1,category:"animals_and_nature"},dash:{keywords:["wind","air","fast","shoo","fart","smoke","puff"],"char":"\ud83d\udca8",fitzpatrick_scale:!1,category:"animals_and_nature"},tornado:{keywords:["weather","cyclone","twister"],"char":"\ud83c\udf2a",fitzpatrick_scale:!1,category:"animals_and_nature"},fog:{keywords:["weather"],"char":"\ud83c\udf2b",fitzpatrick_scale:!1,category:"animals_and_nature"},open_umbrella:{keywords:["weather","spring"],"char":"\u2602",fitzpatrick_scale:!1,category:"animals_and_nature"},umbrella:{keywords:["rainy","weather","spring"],"char":"\u2614",fitzpatrick_scale:!1,category:"animals_and_nature"},droplet:{keywords:["water","drip","faucet","spring"],"char":"\ud83d\udca7",fitzpatrick_scale:!1,category:"animals_and_nature"},sweat_drops:{keywords:["water","drip","oops"],"char":"\ud83d\udca6",fitzpatrick_scale:!1,category:"animals_and_nature"},ocean:{keywords:["sea","water","wave","nature","tsunami","disaster"],"char":"\ud83c\udf0a",fitzpatrick_scale:!1,category:"animals_and_nature"},green_apple:{keywords:["fruit","nature"],"char":"\ud83c\udf4f",fitzpatrick_scale:!1,category:"food_and_drink"},apple:{keywords:["fruit","mac","school"],"char":"\ud83c\udf4e",fitzpatrick_scale:!1,category:"food_and_drink"},pear:{keywords:["fruit","nature","food"],"char":"\ud83c\udf50",fitzpatrick_scale:!1,category:"food_and_drink"},tangerine:{keywords:["food","fruit","nature","orange"],"char":"\ud83c\udf4a",fitzpatrick_scale:!1,category:"food_and_drink"},lemon:{keywords:["fruit","nature"],"char":"\ud83c\udf4b",fitzpatrick_scale:!1,category:"food_and_drink"},banana:{keywords:["fruit","food","monkey"],"char":"\ud83c\udf4c",fitzpatrick_scale:!1,category:"food_and_drink"},watermelon:{keywords:["fruit","food","picnic","summer"],"char":"\ud83c\udf49",fitzpatrick_scale:!1,category:"food_and_drink"},grapes:{keywords:["fruit","food","wine"],"char":"\ud83c\udf47",fitzpatrick_scale:!1,category:"food_and_drink"},strawberry:{keywords:["fruit","food","nature"],"char":"\ud83c\udf53",fitzpatrick_scale:!1,category:"food_and_drink"},melon:{keywords:["fruit","nature","food"],"char":"\ud83c\udf48",fitzpatrick_scale:!1,category:"food_and_drink"},cherries:{keywords:["food","fruit"],"char":"\ud83c\udf52",fitzpatrick_scale:!1,category:"food_and_drink"},peach:{keywords:["fruit","nature","food"],"char":"\ud83c\udf51",fitzpatrick_scale:!1,category:"food_and_drink"},pineapple:{keywords:["fruit","nature","food"],"char":"\ud83c\udf4d",fitzpatrick_scale:!1,category:"food_and_drink"},coconut:{keywords:["fruit","nature","food","palm"],"char":"\ud83e\udd65",fitzpatrick_scale:!1,category:"food_and_drink"},kiwi_fruit:{keywords:["fruit","food"],"char":"\ud83e\udd5d",fitzpatrick_scale:!1,category:"food_and_drink"},avocado:{keywords:["fruit","food"],"char":"\ud83e\udd51",fitzpatrick_scale:!1,category:"food_and_drink"},broccoli:{keywords:["fruit","food","vegetable"],"char":"\ud83e\udd66",fitzpatrick_scale:!1,category:"food_and_drink"},tomato:{keywords:["fruit","vegetable","nature","food"],"char":"\ud83c\udf45",fitzpatrick_scale:!1,category:"food_and_drink"},eggplant:{keywords:["vegetable","nature","food","aubergine"],"char":"\ud83c\udf46",fitzpatrick_scale:!1,category:"food_and_drink"},cucumber:{keywords:["fruit","food","pickle"],"char":"\ud83e\udd52",fitzpatrick_scale:!1,category:"food_and_drink"},carrot:{keywords:["vegetable","food","orange"],"char":"\ud83e\udd55",fitzpatrick_scale:!1,category:"food_and_drink"},hot_pepper:{keywords:["food","spicy","chilli","chili"],"char":"\ud83c\udf36",fitzpatrick_scale:!1,category:"food_and_drink"},potato:{keywords:["food","tuber","vegatable","starch"],"char":"\ud83e\udd54",fitzpatrick_scale:!1,category:"food_and_drink"},corn:{keywords:["food","vegetable","plant"],"char":"\ud83c\udf3d",fitzpatrick_scale:!1,category:"food_and_drink"},sweet_potato:{keywords:["food","nature"],"char":"\ud83c\udf60",fitzpatrick_scale:!1,category:"food_and_drink"},peanuts:{keywords:["food","nut"],"char":"\ud83e\udd5c",fitzpatrick_scale:!1,category:"food_and_drink"},honey_pot:{keywords:["bees","sweet","kitchen"],"char":"\ud83c\udf6f",fitzpatrick_scale:!1,category:"food_and_drink"},croissant:{keywords:["food","bread","french"],"char":"\ud83e\udd50",fitzpatrick_scale:!1,category:"food_and_drink"},bread:{keywords:["food","wheat","breakfast","toast"],"char":"\ud83c\udf5e",fitzpatrick_scale:!1,category:"food_and_drink"},baguette_bread:{keywords:["food","bread","french"],"char":"\ud83e\udd56",fitzpatrick_scale:!1,category:"food_and_drink"},pretzel:{keywords:["food","bread","twisted"],"char":"\ud83e\udd68",fitzpatrick_scale:!1,category:"food_and_drink"},cheese:{keywords:["food","chadder"],"char":"\ud83e\uddc0",fitzpatrick_scale:!1,category:"food_and_drink"},egg:{keywords:["food","chicken","breakfast"],"char":"\ud83e\udd5a",fitzpatrick_scale:!1,category:"food_and_drink"},bacon:{keywords:["food","breakfast","pork","pig","meat"],"char":"\ud83e\udd53",fitzpatrick_scale:!1,category:"food_and_drink"},steak:{keywords:["food","cow","meat","cut","chop","lambchop","porkchop"],"char":"\ud83e\udd69",fitzpatrick_scale:!1,category:"food_and_drink"},pancakes:{keywords:["food","breakfast","flapjacks","hotcakes"],"char":"\ud83e\udd5e",fitzpatrick_scale:!1,category:"food_and_drink"},poultry_leg:{keywords:["food","meat","drumstick","bird","chicken","turkey"],"char":"\ud83c\udf57",fitzpatrick_scale:!1,category:"food_and_drink"},meat_on_bone:{keywords:["good","food","drumstick"],"char":"\ud83c\udf56",fitzpatrick_scale:!1,category:"food_and_drink"},fried_shrimp:{keywords:["food","animal","appetizer","summer"],"char":"\ud83c\udf64",fitzpatrick_scale:!1,category:"food_and_drink"},fried_egg:{keywords:["food","breakfast","kitchen","egg"],"char":"\ud83c\udf73",fitzpatrick_scale:!1,category:"food_and_drink"},hamburger:{keywords:["meat","fast food","beef","cheeseburger","mcdonalds","burger king"],"char":"\ud83c\udf54",fitzpatrick_scale:!1,category:"food_and_drink"},fries:{keywords:["chips","snack","fast food"],"char":"\ud83c\udf5f",fitzpatrick_scale:!1,category:"food_and_drink"},stuffed_flatbread:{keywords:["food","flatbread","stuffed","gyro"],"char":"\ud83e\udd59",fitzpatrick_scale:!1,category:"food_and_drink"},hotdog:{keywords:["food","frankfurter"],"char":"\ud83c\udf2d",fitzpatrick_scale:!1,category:"food_and_drink"},pizza:{keywords:["food","party"],"char":"\ud83c\udf55",fitzpatrick_scale:!1,category:"food_and_drink"},sandwich:{keywords:["food","lunch","bread"],"char":"\ud83e\udd6a",fitzpatrick_scale:!1,category:"food_and_drink"},canned_food:{keywords:["food","soup"],"char":"\ud83e\udd6b",fitzpatrick_scale:!1,category:"food_and_drink"},spaghetti:{keywords:["food","italian","noodle"],"char":"\ud83c\udf5d",fitzpatrick_scale:!1,category:"food_and_drink"},taco:{keywords:["food","mexican"],"char":"\ud83c\udf2e",fitzpatrick_scale:!1,category:"food_and_drink"},burrito:{keywords:["food","mexican"],"char":"\ud83c\udf2f",fitzpatrick_scale:!1,category:"food_and_drink"},green_salad:{keywords:["food","healthy","lettuce"],"char":"\ud83e\udd57",fitzpatrick_scale:!1,category:"food_and_drink"},shallow_pan_of_food:{keywords:["food","cooking","casserole","paella"],"char":"\ud83e\udd58",fitzpatrick_scale:!1,category:"food_and_drink"},ramen:{keywords:["food","japanese","noodle","chopsticks"],"char":"\ud83c\udf5c",fitzpatrick_scale:!1,category:"food_and_drink"},stew:{keywords:["food","meat","soup"],"char":"\ud83c\udf72",fitzpatrick_scale:!1,category:"food_and_drink"},fish_cake:{keywords:["food","japan","sea","beach","narutomaki","pink","swirl","kamaboko","surimi","ramen"],"char":"\ud83c\udf65",fitzpatrick_scale:!1,category:"food_and_drink"},fortune_cookie:{keywords:["food","prophecy"],"char":"\ud83e\udd60",fitzpatrick_scale:!1,category:"food_and_drink"},sushi:{keywords:["food","fish","japanese","rice"],"char":"\ud83c\udf63",fitzpatrick_scale:!1,category:"food_and_drink"},bento:{keywords:["food","japanese","box"],"char":"\ud83c\udf71",fitzpatrick_scale:!1,category:"food_and_drink"},curry:{keywords:["food","spicy","hot","indian"],"char":"\ud83c\udf5b",fitzpatrick_scale:!1,category:"food_and_drink"},rice_ball:{keywords:["food","japanese"],"char":"\ud83c\udf59",fitzpatrick_scale:!1,category:"food_and_drink"},rice:{keywords:["food","china","asian"],"char":"\ud83c\udf5a",fitzpatrick_scale:!1,category:"food_and_drink"},rice_cracker:{keywords:["food","japanese"],"char":"\ud83c\udf58",fitzpatrick_scale:!1,category:"food_and_drink"},oden:{keywords:["food","japanese"],"char":"\ud83c\udf62",fitzpatrick_scale:!1,category:"food_and_drink"},dango:{keywords:["food","dessert","sweet","japanese","barbecue","meat"],"char":"\ud83c\udf61",fitzpatrick_scale:!1,category:"food_and_drink"},shaved_ice:{keywords:["hot","dessert","summer"],"char":"\ud83c\udf67",fitzpatrick_scale:!1,category:"food_and_drink"},ice_cream:{keywords:["food","hot","dessert"],"char":"\ud83c\udf68",fitzpatrick_scale:!1,category:"food_and_drink"},icecream:{keywords:["food","hot","dessert","summer"],"char":"\ud83c\udf66",fitzpatrick_scale:!1,category:"food_and_drink"},pie:{keywords:["food","dessert","pastry"],"char":"\ud83e\udd67",fitzpatrick_scale:!1,category:"food_and_drink"},cake:{keywords:["food","dessert"],"char":"\ud83c\udf70",fitzpatrick_scale:!1,category:"food_and_drink"},birthday:{keywords:["food","dessert","cake"],"char":"\ud83c\udf82",fitzpatrick_scale:!1,category:"food_and_drink"},custard:{keywords:["dessert","food"],"char":"\ud83c\udf6e",fitzpatrick_scale:!1,category:"food_and_drink"},candy:{keywords:["snack","dessert","sweet","lolly"],"char":"\ud83c\udf6c",fitzpatrick_scale:!1,category:"food_and_drink"},lollipop:{keywords:["food","snack","candy","sweet"],"char":"\ud83c\udf6d",fitzpatrick_scale:!1,category:"food_and_drink"},chocolate_bar:{keywords:["food","snack","dessert","sweet"],"char":"\ud83c\udf6b",fitzpatrick_scale:!1,category:"food_and_drink"},popcorn:{keywords:["food","movie theater","films","snack"],"char":"\ud83c\udf7f",fitzpatrick_scale:!1,category:"food_and_drink"},dumpling:{keywords:["food","empanada","pierogi","potsticker"],"char":"\ud83e\udd5f",fitzpatrick_scale:!1,category:"food_and_drink"},doughnut:{keywords:["food","dessert","snack","sweet","donut"],"char":"\ud83c\udf69",fitzpatrick_scale:!1,category:"food_and_drink"},cookie:{keywords:["food","snack","oreo","chocolate","sweet","dessert"],"char":"\ud83c\udf6a",fitzpatrick_scale:!1,category:"food_and_drink"},milk_glass:{keywords:["beverage","drink","cow"],"char":"\ud83e\udd5b",fitzpatrick_scale:!1,category:"food_and_drink"},beer:{keywords:["relax","beverage","drink","drunk","party","pub","summer","alcohol","booze"],"char":"\ud83c\udf7a",fitzpatrick_scale:!1,category:"food_and_drink"},beers:{keywords:["relax","beverage","drink","drunk","party","pub","summer","alcohol","booze"],"char":"\ud83c\udf7b",fitzpatrick_scale:!1,category:"food_and_drink"},clinking_glasses:{keywords:["beverage","drink","party","alcohol","celebrate","cheers","wine","champagne","toast"],"char":"\ud83e\udd42",fitzpatrick_scale:!1,category:"food_and_drink"},wine_glass:{keywords:["drink","beverage","drunk","alcohol","booze"],"char":"\ud83c\udf77",fitzpatrick_scale:!1,category:"food_and_drink"},tumbler_glass:{keywords:["drink","beverage","drunk","alcohol","liquor","booze","bourbon","scotch","whisky","glass","shot"],"char":"\ud83e\udd43",fitzpatrick_scale:!1,category:"food_and_drink"},cocktail:{keywords:["drink","drunk","alcohol","beverage","booze","mojito"],"char":"\ud83c\udf78",fitzpatrick_scale:!1,category:"food_and_drink"},tropical_drink:{keywords:["beverage","cocktail","summer","beach","alcohol","booze","mojito"],"char":"\ud83c\udf79",fitzpatrick_scale:!1,category:"food_and_drink"},champagne:{keywords:["drink","wine","bottle","celebration"],"char":"\ud83c\udf7e",fitzpatrick_scale:!1,category:"food_and_drink"},sake:{keywords:["wine","drink","drunk","beverage","japanese","alcohol","booze"],"char":"\ud83c\udf76",fitzpatrick_scale:!1,category:"food_and_drink"},tea:{keywords:["drink","bowl","breakfast","green","british"],"char":"\ud83c\udf75",fitzpatrick_scale:!1,category:"food_and_drink"},cup_with_straw:{keywords:["drink","soda"],"char":"\ud83e\udd64",fitzpatrick_scale:!1,category:"food_and_drink"},coffee:{keywords:["beverage","caffeine","latte","espresso"],"char":"\u2615",fitzpatrick_scale:!1,category:"food_and_drink"},baby_bottle:{keywords:["food","container","milk"],"char":"\ud83c\udf7c",fitzpatrick_scale:!1,category:"food_and_drink"},spoon:{keywords:["cutlery","kitchen","tableware"],"char":"\ud83e\udd44",fitzpatrick_scale:!1,category:"food_and_drink"},fork_and_knife:{keywords:["cutlery","kitchen"],"char":"\ud83c\udf74",fitzpatrick_scale:!1,category:"food_and_drink"},plate_with_cutlery:{keywords:["food","eat","meal","lunch","dinner","restaurant"],"char":"\ud83c\udf7d",fitzpatrick_scale:!1,category:"food_and_drink"},bowl_with_spoon:{keywords:["food","breakfast","cereal","oatmeal","porridge"],"char":"\ud83e\udd63",fitzpatrick_scale:!1,category:"food_and_drink"},takeout_box:{keywords:["food","leftovers"],"char":"\ud83e\udd61",fitzpatrick_scale:!1,category:"food_and_drink"},chopsticks:{keywords:["food"],"char":"\ud83e\udd62",fitzpatrick_scale:!1,category:"food_and_drink"},soccer:{keywords:["sports","football"],"char":"\u26bd",fitzpatrick_scale:!1,category:"activity"},basketball:{keywords:["sports","balls","NBA"],"char":"\ud83c\udfc0",fitzpatrick_scale:!1,category:"activity"},football:{keywords:["sports","balls","NFL"],"char":"\ud83c\udfc8",fitzpatrick_scale:!1,category:"activity"},baseball:{keywords:["sports","balls"],"char":"\u26be",fitzpatrick_scale:!1,category:"activity"},tennis:{keywords:["sports","balls","green"],"char":"\ud83c\udfbe",fitzpatrick_scale:!1,category:"activity"},volleyball:{keywords:["sports","balls"],"char":"\ud83c\udfd0",fitzpatrick_scale:!1,category:"activity"},rugby_football:{keywords:["sports","team"],"char":"\ud83c\udfc9",fitzpatrick_scale:!1,category:"activity"},"8ball":{keywords:["pool","hobby","game","luck","magic"],"char":"\ud83c\udfb1",fitzpatrick_scale:!1,category:"activity"},golf:{keywords:["sports","business","flag","hole","summer"],"char":"\u26f3",fitzpatrick_scale:!1,category:"activity"},golfing_woman:{keywords:["sports","business","woman","female"],"char":"\ud83c\udfcc\ufe0f\u200d\u2640\ufe0f",fitzpatrick_scale:!1,category:"activity"},golfing_man:{keywords:["sports","business"],"char":"\ud83c\udfcc",fitzpatrick_scale:!0,category:"activity"},ping_pong:{keywords:["sports","pingpong"],"char":"\ud83c\udfd3",fitzpatrick_scale:!1,category:"activity"},badminton:{keywords:["sports"],"char":"\ud83c\udff8",fitzpatrick_scale:!1,category:"activity"},goal_net:{keywords:["sports"],"char":"\ud83e\udd45",fitzpatrick_scale:!1,category:"activity"},ice_hockey:{keywords:["sports"],"char":"\ud83c\udfd2",fitzpatrick_scale:!1,category:"activity"},field_hockey:{keywords:["sports"],"char":"\ud83c\udfd1",fitzpatrick_scale:!1,category:"activity"},cricket:{keywords:["sports"],"char":"\ud83c\udfcf",fitzpatrick_scale:!1,category:"activity"},ski:{keywords:["sports","winter","cold","snow"],"char":"\ud83c\udfbf",fitzpatrick_scale:!1,category:"activity"},skier:{keywords:["sports","winter","snow"],"char":"\u26f7",fitzpatrick_scale:!1,category:"activity"},snowboarder:{keywords:["sports","winter"],"char":"\ud83c\udfc2",fitzpatrick_scale:!0,category:"activity"},person_fencing:{keywords:["sports","fencing","sword"],"char":"\ud83e\udd3a",fitzpatrick_scale:!1,category:"activity"},women_wrestling:{keywords:["sports","wrestlers"],"char":"\ud83e\udd3c\u200d\u2640\ufe0f",fitzpatrick_scale:!1,category:"activity"},men_wrestling:{keywords:["sports","wrestlers"],"char":"\ud83e\udd3c\u200d\u2642\ufe0f",fitzpatrick_scale:!1,category:"activity"},woman_cartwheeling:{keywords:["gymnastics"],"char":"\ud83e\udd38\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"activity"},man_cartwheeling:{keywords:["gymnastics"],"char":"\ud83e\udd38\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"activity"},woman_playing_handball:{keywords:["sports"],"char":"\ud83e\udd3e\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"activity"},man_playing_handball:{keywords:["sports"],"char":"\ud83e\udd3e\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"activity"},ice_skate:{keywords:["sports"],"char":"\u26f8",fitzpatrick_scale:!1,category:"activity"},curling_stone:{keywords:["sports"],"char":"\ud83e\udd4c",fitzpatrick_scale:!1,category:"activity"},sled:{keywords:["sleigh","luge","toboggan"],"char":"\ud83d\udef7",fitzpatrick_scale:!1,category:"activity"},bow_and_arrow:{keywords:["sports"],"char":"\ud83c\udff9",fitzpatrick_scale:!1,category:"activity"},fishing_pole_and_fish:{keywords:["food","hobby","summer"],"char":"\ud83c\udfa3",fitzpatrick_scale:!1,category:"activity"},boxing_glove:{keywords:["sports","fighting"],"char":"\ud83e\udd4a",fitzpatrick_scale:!1,category:"activity"},martial_arts_uniform:{keywords:["judo","karate","taekwondo"],"char":"\ud83e\udd4b",fitzpatrick_scale:!1,category:"activity"},rowing_woman:{keywords:["sports","hobby","water","ship","woman","female"],"char":"\ud83d\udea3\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"activity"},rowing_man:{keywords:["sports","hobby","water","ship"],"char":"\ud83d\udea3",fitzpatrick_scale:!0,category:"activity"},climbing_woman:{keywords:["sports","hobby","woman","female","rock"],"char":"\ud83e\uddd7\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"activity"},climbing_man:{keywords:["sports","hobby","man","male","rock"],"char":"\ud83e\uddd7\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"activity"},swimming_woman:{keywords:["sports","exercise","human","athlete","water","summer","woman","female"],"char":"\ud83c\udfca\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"activity"},swimming_man:{keywords:["sports","exercise","human","athlete","water","summer"],"char":"\ud83c\udfca",fitzpatrick_scale:!0,category:"activity"},woman_playing_water_polo:{keywords:["sports","pool"],"char":"\ud83e\udd3d\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"activity"},man_playing_water_polo:{keywords:["sports","pool"],"char":"\ud83e\udd3d\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"activity"},woman_in_lotus_position:{keywords:["woman","female","meditation","yoga","serenity","zen","mindfulness"],"char":"\ud83e\uddd8\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"activity"},man_in_lotus_position:{keywords:["man","male","meditation","yoga","serenity","zen","mindfulness"],"char":"\ud83e\uddd8\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"activity"},surfing_woman:{keywords:["sports","ocean","sea","summer","beach","woman","female"],"char":"\ud83c\udfc4\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"activity"},surfing_man:{keywords:["sports","ocean","sea","summer","beach"],"char":"\ud83c\udfc4",fitzpatrick_scale:!0,category:"activity"},bath:{keywords:["clean","shower","bathroom"],"char":"\ud83d\udec0",fitzpatrick_scale:!0,category:"activity"},basketball_woman:{keywords:["sports","human","woman","female"],"char":"\u26f9\ufe0f\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"activity"},basketball_man:{keywords:["sports","human"],"char":"\u26f9",fitzpatrick_scale:!0,category:"activity"},weight_lifting_woman:{keywords:["sports","training","exercise","woman","female"],"char":"\ud83c\udfcb\ufe0f\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"activity"},weight_lifting_man:{keywords:["sports","training","exercise"],"char":"\ud83c\udfcb",fitzpatrick_scale:!0,category:"activity"},biking_woman:{keywords:["sports","bike","exercise","hipster","woman","female"],"char":"\ud83d\udeb4\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"activity"},biking_man:{keywords:["sports","bike","exercise","hipster"],"char":"\ud83d\udeb4",fitzpatrick_scale:!0,category:"activity"},mountain_biking_woman:{keywords:["transportation","sports","human","race","bike","woman","female"],"char":"\ud83d\udeb5\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"activity"},mountain_biking_man:{keywords:["transportation","sports","human","race","bike"],"char":"\ud83d\udeb5",fitzpatrick_scale:!0,category:"activity"},horse_racing:{keywords:["animal","betting","competition","gambling","luck"],"char":"\ud83c\udfc7",fitzpatrick_scale:!0,category:"activity"},business_suit_levitating:{keywords:["suit","business","levitate","hover","jump"],"char":"\ud83d\udd74",fitzpatrick_scale:!0,category:"activity"},trophy:{keywords:["win","award","contest","place","ftw","ceremony"],"char":"\ud83c\udfc6",fitzpatrick_scale:!1,category:"activity"},running_shirt_with_sash:{keywords:["play","pageant"],"char":"\ud83c\udfbd",fitzpatrick_scale:!1,category:"activity"},medal_sports:{keywords:["award","winning"],"char":"\ud83c\udfc5",fitzpatrick_scale:!1,category:"activity"},medal_military:{keywords:["award","winning","army"],"char":"\ud83c\udf96",fitzpatrick_scale:!1,category:"activity"},"1st_place_medal":{keywords:["award","winning","first"],"char":"\ud83e\udd47",fitzpatrick_scale:!1,category:"activity"},"2nd_place_medal":{keywords:["award","second"],"char":"\ud83e\udd48",fitzpatrick_scale:!1,category:"activity"},"3rd_place_medal":{keywords:["award","third"],"char":"\ud83e\udd49",fitzpatrick_scale:!1,category:"activity"},reminder_ribbon:{keywords:["sports","cause","support","awareness"],"char":"\ud83c\udf97",fitzpatrick_scale:!1,category:"activity"},rosette:{keywords:["flower","decoration","military"],"char":"\ud83c\udff5",fitzpatrick_scale:!1,category:"activity"},ticket:{keywords:["event","concert","pass"],"char":"\ud83c\udfab",fitzpatrick_scale:!1,category:"activity"},tickets:{keywords:["sports","concert","entrance"],"char":"\ud83c\udf9f",fitzpatrick_scale:!1,category:"activity"},performing_arts:{keywords:["acting","theater","drama"],"char":"\ud83c\udfad",fitzpatrick_scale:!1,category:"activity"},art:{keywords:["design","paint","draw","colors"],"char":"\ud83c\udfa8",fitzpatrick_scale:!1,category:"activity"},circus_tent:{keywords:["festival","carnival","party"],"char":"\ud83c\udfaa",fitzpatrick_scale:!1,category:"activity"},woman_juggling:{keywords:["juggle","balance","skill","multitask"],"char":"\ud83e\udd39\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"activity"},man_juggling:{keywords:["juggle","balance","skill","multitask"],"char":"\ud83e\udd39\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"activity"},microphone:{keywords:["sound","music","PA","sing","talkshow"],"char":"\ud83c\udfa4",fitzpatrick_scale:!1,category:"activity"},headphones:{keywords:["music","score","gadgets"],"char":"\ud83c\udfa7",fitzpatrick_scale:!1,category:"activity"},musical_score:{keywords:["treble","clef","compose"],"char":"\ud83c\udfbc",fitzpatrick_scale:!1,category:"activity"},musical_keyboard:{keywords:["piano","instrument","compose"],"char":"\ud83c\udfb9",fitzpatrick_scale:!1,category:"activity"},drum:{keywords:["music","instrument","drumsticks","snare"],"char":"\ud83e\udd41",fitzpatrick_scale:!1,category:"activity"},saxophone:{keywords:["music","instrument","jazz","blues"],"char":"\ud83c\udfb7",fitzpatrick_scale:!1,category:"activity"},trumpet:{keywords:["music","brass"],"char":"\ud83c\udfba",fitzpatrick_scale:!1,category:"activity"},guitar:{keywords:["music","instrument"],"char":"\ud83c\udfb8",fitzpatrick_scale:!1,category:"activity"},violin:{keywords:["music","instrument","orchestra","symphony"],"char":"\ud83c\udfbb",fitzpatrick_scale:!1,category:"activity"},clapper:{keywords:["movie","film","record"],"char":"\ud83c\udfac",fitzpatrick_scale:!1,category:"activity"},video_game:{keywords:["play","console","PS4","controller"],"char":"\ud83c\udfae",fitzpatrick_scale:!1,category:"activity"},space_invader:{keywords:["game","arcade","play"],"char":"\ud83d\udc7e",fitzpatrick_scale:!1,category:"activity"},dart:{keywords:["game","play","bar","target","bullseye"],"char":"\ud83c\udfaf",fitzpatrick_scale:!1,category:"activity"},game_die:{keywords:["dice","random","tabletop","play","luck"],"char":"\ud83c\udfb2",fitzpatrick_scale:!1,category:"activity"},slot_machine:{keywords:["bet","gamble","vegas","fruit machine","luck","casino"],"char":"\ud83c\udfb0",fitzpatrick_scale:!1,category:"activity"},bowling:{keywords:["sports","fun","play"],"char":"\ud83c\udfb3",fitzpatrick_scale:!1,category:"activity"},red_car:{keywords:["red","transportation","vehicle"],"char":"\ud83d\ude97",fitzpatrick_scale:!1,category:"travel_and_places"},taxi:{keywords:["uber","vehicle","cars","transportation"],"char":"\ud83d\ude95",fitzpatrick_scale:!1,category:"travel_and_places"},blue_car:{keywords:["transportation","vehicle"],"char":"\ud83d\ude99",fitzpatrick_scale:!1,category:"travel_and_places"},bus:{keywords:["car","vehicle","transportation"],"char":"\ud83d\ude8c",fitzpatrick_scale:!1,category:"travel_and_places"},trolleybus:{keywords:["bart","transportation","vehicle"],"char":"\ud83d\ude8e",fitzpatrick_scale:!1,category:"travel_and_places"},racing_car:{keywords:["sports","race","fast","formula","f1"],"char":"\ud83c\udfce",fitzpatrick_scale:!1,category:"travel_and_places"},police_car:{keywords:["vehicle","cars","transportation","law","legal","enforcement"],"char":"\ud83d\ude93",fitzpatrick_scale:!1,category:"travel_and_places"},ambulance:{keywords:["health","911","hospital"],"char":"\ud83d\ude91",fitzpatrick_scale:!1,category:"travel_and_places"},fire_engine:{keywords:["transportation","cars","vehicle"],"char":"\ud83d\ude92",fitzpatrick_scale:!1,category:"travel_and_places"},minibus:{keywords:["vehicle","car","transportation"],"char":"\ud83d\ude90",fitzpatrick_scale:!1,category:"travel_and_places"},truck:{keywords:["cars","transportation"],"char":"\ud83d\ude9a",fitzpatrick_scale:!1,category:"travel_and_places"},articulated_lorry:{keywords:["vehicle","cars","transportation","express"],"char":"\ud83d\ude9b",fitzpatrick_scale:!1,category:"travel_and_places"},tractor:{keywords:["vehicle","car","farming","agriculture"],"char":"\ud83d\ude9c",fitzpatrick_scale:!1,category:"travel_and_places"},kick_scooter:{keywords:["vehicle","kick","razor"],"char":"\ud83d\udef4",fitzpatrick_scale:!1,category:"travel_and_places"},motorcycle:{keywords:["race","sports","fast"],"char":"\ud83c\udfcd",fitzpatrick_scale:!1,category:"travel_and_places"},bike:{keywords:["sports","bicycle","exercise","hipster"],"char":"\ud83d\udeb2",fitzpatrick_scale:!1,category:"travel_and_places"},motor_scooter:{keywords:["vehicle","vespa","sasha"],"char":"\ud83d\udef5",fitzpatrick_scale:!1,category:"travel_and_places"},rotating_light:{keywords:["police","ambulance","911","emergency","alert","error","pinged","law","legal"],"char":"\ud83d\udea8",fitzpatrick_scale:!1,category:"travel_and_places"},oncoming_police_car:{keywords:["vehicle","law","legal","enforcement","911"],"char":"\ud83d\ude94",fitzpatrick_scale:!1,category:"travel_and_places"},oncoming_bus:{keywords:["vehicle","transportation"],"char":"\ud83d\ude8d",fitzpatrick_scale:!1,category:"travel_and_places"},oncoming_automobile:{keywords:["car","vehicle","transportation"],"char":"\ud83d\ude98",fitzpatrick_scale:!1,category:"travel_and_places"},oncoming_taxi:{keywords:["vehicle","cars","uber"],"char":"\ud83d\ude96",fitzpatrick_scale:!1,category:"travel_and_places"},aerial_tramway:{keywords:["transportation","vehicle","ski"],"char":"\ud83d\udea1",fitzpatrick_scale:!1,category:"travel_and_places"},mountain_cableway:{keywords:["transportation","vehicle","ski"],"char":"\ud83d\udea0",fitzpatrick_scale:!1,category:"travel_and_places"},suspension_railway:{keywords:["vehicle","transportation"],"char":"\ud83d\ude9f",fitzpatrick_scale:!1,category:"travel_and_places"},railway_car:{keywords:["transportation","vehicle"],"char":"\ud83d\ude83",fitzpatrick_scale:!1,category:"travel_and_places"},train:{keywords:["transportation","vehicle","carriage","public","travel"],"char":"\ud83d\ude8b",fitzpatrick_scale:!1,category:"travel_and_places"},monorail:{keywords:["transportation","vehicle"],"char":"\ud83d\ude9d",fitzpatrick_scale:!1,category:"travel_and_places"},bullettrain_side:{keywords:["transportation","vehicle"],"char":"\ud83d\ude84",fitzpatrick_scale:!1,category:"travel_and_places"},bullettrain_front:{keywords:["transportation","vehicle","speed","fast","public","travel"],"char":"\ud83d\ude85",fitzpatrick_scale:!1,category:"travel_and_places"},light_rail:{keywords:["transportation","vehicle"],"char":"\ud83d\ude88",fitzpatrick_scale:!1,category:"travel_and_places"},mountain_railway:{keywords:["transportation","vehicle"],"char":"\ud83d\ude9e",fitzpatrick_scale:!1,category:"travel_and_places"},steam_locomotive:{keywords:["transportation","vehicle","train"],"char":"\ud83d\ude82",fitzpatrick_scale:!1,category:"travel_and_places"},train2:{keywords:["transportation","vehicle"],"char":"\ud83d\ude86",fitzpatrick_scale:!1,category:"travel_and_places"},metro:{keywords:["transportation","blue-square","mrt","underground","tube"],"char":"\ud83d\ude87",fitzpatrick_scale:!1,category:"travel_and_places"},tram:{keywords:["transportation","vehicle"],"char":"\ud83d\ude8a",fitzpatrick_scale:!1,category:"travel_and_places"},station:{keywords:["transportation","vehicle","public"],"char":"\ud83d\ude89",fitzpatrick_scale:!1,category:"travel_and_places"},flying_saucer:{keywords:["transportation","vehicle","ufo"],"char":"\ud83d\udef8",fitzpatrick_scale:!1,category:"travel_and_places"},helicopter:{keywords:["transportation","vehicle","fly"],"char":"\ud83d\ude81",fitzpatrick_scale:!1,category:"travel_and_places"},small_airplane:{keywords:["flight","transportation","fly","vehicle"],"char":"\ud83d\udee9",fitzpatrick_scale:!1,category:"travel_and_places"},airplane:{keywords:["vehicle","transportation","flight","fly"],"char":"\u2708\ufe0f",fitzpatrick_scale:!1,category:"travel_and_places"},flight_departure:{keywords:["airport","flight","landing"],"char":"\ud83d\udeeb",fitzpatrick_scale:!1,category:"travel_and_places"},flight_arrival:{keywords:["airport","flight","boarding"],"char":"\ud83d\udeec",fitzpatrick_scale:!1,category:"travel_and_places"},sailboat:{keywords:["ship","summer","transportation","water","sailing"],"char":"\u26f5",fitzpatrick_scale:!1,category:"travel_and_places"},motor_boat:{keywords:["ship"],"char":"\ud83d\udee5",fitzpatrick_scale:!1,category:"travel_and_places"},speedboat:{keywords:["ship","transportation","vehicle","summer"],"char":"\ud83d\udea4",fitzpatrick_scale:!1,category:"travel_and_places"},ferry:{keywords:["boat","ship","yacht"],"char":"\u26f4",fitzpatrick_scale:!1,category:"travel_and_places"},passenger_ship:{keywords:["yacht","cruise","ferry"],"char":"\ud83d\udef3",fitzpatrick_scale:!1,category:"travel_and_places"},rocket:{keywords:["launch","ship","staffmode","NASA","outer space","outer_space","fly"],"char":"\ud83d\ude80",fitzpatrick_scale:!1,category:"travel_and_places"},artificial_satellite:{keywords:["communication","gps","orbit","spaceflight","NASA","ISS"],"char":"\ud83d\udef0",fitzpatrick_scale:!1,category:"travel_and_places"},seat:{keywords:["sit","airplane","transport","bus","flight","fly"],"char":"\ud83d\udcba",fitzpatrick_scale:!1,category:"travel_and_places"},canoe:{keywords:["boat","paddle","water","ship"],"char":"\ud83d\udef6",fitzpatrick_scale:!1,category:"travel_and_places"},anchor:{keywords:["ship","ferry","sea","boat"],"char":"\u2693",fitzpatrick_scale:!1,category:"travel_and_places"},construction:{keywords:["wip","progress","caution","warning"],"char":"\ud83d\udea7",fitzpatrick_scale:!1,category:"travel_and_places"},fuelpump:{keywords:["gas station","petroleum"],"char":"\u26fd",fitzpatrick_scale:!1,category:"travel_and_places"},busstop:{keywords:["transportation","wait"],"char":"\ud83d\ude8f",fitzpatrick_scale:!1,category:"travel_and_places"},vertical_traffic_light:{keywords:["transportation","driving"],"char":"\ud83d\udea6",fitzpatrick_scale:!1,category:"travel_and_places"},traffic_light:{keywords:["transportation","signal"],"char":"\ud83d\udea5",fitzpatrick_scale:!1,category:"travel_and_places"},checkered_flag:{keywords:["contest","finishline","race","gokart"],"char":"\ud83c\udfc1",fitzpatrick_scale:!1,category:"travel_and_places"},ship:{keywords:["transportation","titanic","deploy"],"char":"\ud83d\udea2",fitzpatrick_scale:!1,category:"travel_and_places"},ferris_wheel:{keywords:["photo","carnival","londoneye"],"char":"\ud83c\udfa1",fitzpatrick_scale:!1,category:"travel_and_places"},roller_coaster:{keywords:["carnival","playground","photo","fun"],"char":"\ud83c\udfa2",fitzpatrick_scale:!1,category:"travel_and_places"},carousel_horse:{keywords:["photo","carnival"],"char":"\ud83c\udfa0",fitzpatrick_scale:!1,category:"travel_and_places"},building_construction:{keywords:["wip","working","progress"],"char":"\ud83c\udfd7",fitzpatrick_scale:!1,category:"travel_and_places"},foggy:{keywords:["photo","mountain"],"char":"\ud83c\udf01",fitzpatrick_scale:!1,category:"travel_and_places"},tokyo_tower:{keywords:["photo","japanese"],"char":"\ud83d\uddfc",fitzpatrick_scale:!1,category:"travel_and_places"},factory:{keywords:["building","industry","pollution","smoke"],"char":"\ud83c\udfed",fitzpatrick_scale:!1,category:"travel_and_places"},fountain:{keywords:["photo","summer","water","fresh"],"char":"\u26f2",fitzpatrick_scale:!1,category:"travel_and_places"},rice_scene:{keywords:["photo","japan","asia","tsukimi"],"char":"\ud83c\udf91",fitzpatrick_scale:!1,category:"travel_and_places"},mountain:{keywords:["photo","nature","environment"],"char":"\u26f0",fitzpatrick_scale:!1,category:"travel_and_places"},mountain_snow:{keywords:["photo","nature","environment","winter","cold"],"char":"\ud83c\udfd4",fitzpatrick_scale:!1,category:"travel_and_places"},mount_fuji:{keywords:["photo","mountain","nature","japanese"],"char":"\ud83d\uddfb",fitzpatrick_scale:!1,category:"travel_and_places"},volcano:{keywords:["photo","nature","disaster"],"char":"\ud83c\udf0b",fitzpatrick_scale:!1,category:"travel_and_places"},japan:{keywords:["nation","country","japanese","asia"],"char":"\ud83d\uddfe",fitzpatrick_scale:!1,category:"travel_and_places"},camping:{keywords:["photo","outdoors","tent"],"char":"\ud83c\udfd5",fitzpatrick_scale:!1,category:"travel_and_places"},tent:{keywords:["photo","camping","outdoors"],"char":"\u26fa",fitzpatrick_scale:!1,category:"travel_and_places"},national_park:{keywords:["photo","environment","nature"],"char":"\ud83c\udfde",fitzpatrick_scale:!1,category:"travel_and_places"},motorway:{keywords:["road","cupertino","interstate","highway"],"char":"\ud83d\udee3",fitzpatrick_scale:!1,category:"travel_and_places"},railway_track:{keywords:["train","transportation"],"char":"\ud83d\udee4",fitzpatrick_scale:!1,category:"travel_and_places"},sunrise:{keywords:["morning","view","vacation","photo"],"char":"\ud83c\udf05",fitzpatrick_scale:!1,category:"travel_and_places"},sunrise_over_mountains:{keywords:["view","vacation","photo"],"char":"\ud83c\udf04",fitzpatrick_scale:!1,category:"travel_and_places"},desert:{keywords:["photo","warm","saharah"],"char":"\ud83c\udfdc",fitzpatrick_scale:!1,category:"travel_and_places"},beach_umbrella:{keywords:["weather","summer","sunny","sand","mojito"],"char":"\ud83c\udfd6",fitzpatrick_scale:!1,category:"travel_and_places"},desert_island:{keywords:["photo","tropical","mojito"],"char":"\ud83c\udfdd",fitzpatrick_scale:!1,category:"travel_and_places"},city_sunrise:{keywords:["photo","good morning","dawn"],"char":"\ud83c\udf07",fitzpatrick_scale:!1,category:"travel_and_places"},city_sunset:{keywords:["photo","evening","sky","buildings"],"char":"\ud83c\udf06",fitzpatrick_scale:!1,category:"travel_and_places"},cityscape:{keywords:["photo","night life","urban"],"char":"\ud83c\udfd9",fitzpatrick_scale:!1,category:"travel_and_places"},night_with_stars:{keywords:["evening","city","downtown"],"char":"\ud83c\udf03",fitzpatrick_scale:!1,category:"travel_and_places"},bridge_at_night:{keywords:["photo","sanfrancisco"],"char":"\ud83c\udf09",fitzpatrick_scale:!1,category:"travel_and_places"},milky_way:{keywords:["photo","space","stars"],"char":"\ud83c\udf0c",fitzpatrick_scale:!1,category:"travel_and_places"},stars:{keywords:["night","photo"],"char":"\ud83c\udf20",fitzpatrick_scale:!1,category:"travel_and_places"},sparkler:{keywords:["stars","night","shine"],"char":"\ud83c\udf87",fitzpatrick_scale:!1,category:"travel_and_places"},fireworks:{keywords:["photo","festival","carnival","congratulations"],"char":"\ud83c\udf86",fitzpatrick_scale:!1,category:"travel_and_places"},rainbow:{keywords:["nature","happy","unicorn_face","photo","sky","spring"],"char":"\ud83c\udf08",fitzpatrick_scale:!1,category:"travel_and_places"},houses:{keywords:["buildings","photo"],"char":"\ud83c\udfd8",fitzpatrick_scale:!1,category:"travel_and_places"},european_castle:{keywords:["building","royalty","history"],"char":"\ud83c\udff0",fitzpatrick_scale:!1,category:"travel_and_places"},japanese_castle:{keywords:["photo","building"],"char":"\ud83c\udfef",fitzpatrick_scale:!1,category:"travel_and_places"},stadium:{keywords:["photo","place","sports","concert","venue"],"char":"\ud83c\udfdf",fitzpatrick_scale:!1,category:"travel_and_places"},statue_of_liberty:{keywords:["american","newyork"],"char":"\ud83d\uddfd",fitzpatrick_scale:!1,category:"travel_and_places"},house:{keywords:["building","home"],"char":"\ud83c\udfe0",fitzpatrick_scale:!1,category:"travel_and_places"},house_with_garden:{keywords:["home","plant","nature"],"char":"\ud83c\udfe1",fitzpatrick_scale:!1,category:"travel_and_places"},derelict_house:{keywords:["abandon","evict","broken","building"],"char":"\ud83c\udfda",fitzpatrick_scale:!1,category:"travel_and_places"},office:{keywords:["building","bureau","work"],"char":"\ud83c\udfe2",fitzpatrick_scale:!1,category:"travel_and_places"},department_store:{keywords:["building","shopping","mall"],"char":"\ud83c\udfec",fitzpatrick_scale:!1,category:"travel_and_places"},post_office:{keywords:["building","envelope","communication"],"char":"\ud83c\udfe3",fitzpatrick_scale:!1,category:"travel_and_places"},european_post_office:{keywords:["building","email"],"char":"\ud83c\udfe4",fitzpatrick_scale:!1,category:"travel_and_places"},hospital:{keywords:["building","health","surgery","doctor"],"char":"\ud83c\udfe5",fitzpatrick_scale:!1,category:"travel_and_places"},bank:{keywords:["building","money","sales","cash","business","enterprise"],"char":"\ud83c\udfe6",fitzpatrick_scale:!1,category:"travel_and_places"},hotel:{keywords:["building","accomodation","checkin"],"char":"\ud83c\udfe8",fitzpatrick_scale:!1,category:"travel_and_places"},convenience_store:{keywords:["building","shopping","groceries"],"char":"\ud83c\udfea",fitzpatrick_scale:!1,category:"travel_and_places"},school:{keywords:["building","student","education","learn","teach"],"char":"\ud83c\udfeb",fitzpatrick_scale:!1,category:"travel_and_places"},love_hotel:{keywords:["like","affection","dating"],"char":"\ud83c\udfe9",fitzpatrick_scale:!1,category:"travel_and_places"},wedding:{keywords:["love","like","affection","couple","marriage","bride","groom"],"char":"\ud83d\udc92",fitzpatrick_scale:!1,category:"travel_and_places"},classical_building:{keywords:["art","culture","history"],"char":"\ud83c\udfdb",fitzpatrick_scale:!1,category:"travel_and_places"},church:{keywords:["building","religion","christ"],"char":"\u26ea",fitzpatrick_scale:!1,category:"travel_and_places"},mosque:{keywords:["islam","worship","minaret"],"char":"\ud83d\udd4c",fitzpatrick_scale:!1,category:"travel_and_places"},synagogue:{keywords:["judaism","worship","temple","jewish"],"char":"\ud83d\udd4d",fitzpatrick_scale:!1,category:"travel_and_places"},kaaba:{keywords:["mecca","mosque","islam"],"char":"\ud83d\udd4b",fitzpatrick_scale:!1,category:"travel_and_places"},shinto_shrine:{keywords:["temple","japan","kyoto"],"char":"\u26e9",fitzpatrick_scale:!1,category:"travel_and_places"},watch:{keywords:["time","accessories"],"char":"\u231a",fitzpatrick_scale:!1,category:"objects"},iphone:{keywords:["technology","apple","gadgets","dial"],"char":"\ud83d\udcf1",fitzpatrick_scale:!1,category:"objects"},calling:{keywords:["iphone","incoming"],"char":"\ud83d\udcf2",fitzpatrick_scale:!1,category:"objects"},computer:{keywords:["technology","laptop","screen","display","monitor"],"char":"\ud83d\udcbb",fitzpatrick_scale:!1,category:"objects"},keyboard:{keywords:["technology","computer","type","input","text"],"char":"\u2328",fitzpatrick_scale:!1,category:"objects"},desktop_computer:{keywords:["technology","computing","screen"],"char":"\ud83d\udda5",fitzpatrick_scale:!1,category:"objects"},printer:{keywords:["paper","ink"],"char":"\ud83d\udda8",fitzpatrick_scale:!1,category:"objects"},computer_mouse:{keywords:["click"],"char":"\ud83d\uddb1",fitzpatrick_scale:!1,category:"objects"},trackball:{keywords:["technology","trackpad"],"char":"\ud83d\uddb2",fitzpatrick_scale:!1,category:"objects"},joystick:{keywords:["game","play"],"char":"\ud83d\udd79",fitzpatrick_scale:!1,category:"objects"},clamp:{keywords:["tool"],"char":"\ud83d\udddc",fitzpatrick_scale:!1,category:"objects"},minidisc:{keywords:["technology","record","data","disk","90s"],"char":"\ud83d\udcbd",fitzpatrick_scale:!1,category:"objects"},floppy_disk:{keywords:["oldschool","technology","save","90s","80s"],"char":"\ud83d\udcbe",fitzpatrick_scale:!1,category:"objects"},cd:{keywords:["technology","dvd","disk","disc","90s"],"char":"\ud83d\udcbf",fitzpatrick_scale:!1,category:"objects"},dvd:{keywords:["cd","disk","disc"],"char":"\ud83d\udcc0",fitzpatrick_scale:!1,category:"objects"},vhs:{keywords:["record","video","oldschool","90s","80s"],"char":"\ud83d\udcfc",fitzpatrick_scale:!1,category:"objects"},camera:{keywords:["gadgets","photography"],"char":"\ud83d\udcf7",fitzpatrick_scale:!1,category:"objects"},camera_flash:{keywords:["photography","gadgets"],"char":"\ud83d\udcf8",fitzpatrick_scale:!1,category:"objects"},video_camera:{keywords:["film","record"],"char":"\ud83d\udcf9",fitzpatrick_scale:!1,category:"objects"},movie_camera:{keywords:["film","record"],"char":"\ud83c\udfa5",fitzpatrick_scale:!1,category:"objects"},film_projector:{keywords:["video","tape","record","movie"],"char":"\ud83d\udcfd",fitzpatrick_scale:!1,category:"objects"},film_strip:{keywords:["movie"],"char":"\ud83c\udf9e",fitzpatrick_scale:!1,category:"objects"},telephone_receiver:{keywords:["technology","communication","dial"],"char":"\ud83d\udcde",fitzpatrick_scale:!1,category:"objects"},phone:{keywords:["technology","communication","dial","telephone"],"char":"\u260e\ufe0f",fitzpatrick_scale:!1,category:"objects"},pager:{keywords:["bbcall","oldschool","90s"],"char":"\ud83d\udcdf",fitzpatrick_scale:!1,category:"objects"},fax:{keywords:["communication","technology"],"char":"\ud83d\udce0",fitzpatrick_scale:!1,category:"objects"},tv:{keywords:["technology","program","oldschool","show","television"],"char":"\ud83d\udcfa",fitzpatrick_scale:!1,category:"objects"},radio:{keywords:["communication","music","podcast","program"],"char":"\ud83d\udcfb",fitzpatrick_scale:!1,category:"objects"},studio_microphone:{keywords:["sing","recording","artist","talkshow"],"char":"\ud83c\udf99",fitzpatrick_scale:!1,category:"objects"},level_slider:{keywords:["scale"],"char":"\ud83c\udf9a",fitzpatrick_scale:!1,category:"objects"},control_knobs:{keywords:["dial"],"char":"\ud83c\udf9b",fitzpatrick_scale:!1,category:"objects"},stopwatch:{keywords:["time","deadline"],"char":"\u23f1",fitzpatrick_scale:!1,category:"objects"},timer_clock:{keywords:["alarm"],"char":"\u23f2",fitzpatrick_scale:!1,category:"objects"},alarm_clock:{keywords:["time","wake"],"char":"\u23f0",fitzpatrick_scale:!1,category:"objects"},mantelpiece_clock:{keywords:["time"],"char":"\ud83d\udd70",fitzpatrick_scale:!1,category:"objects"},hourglass_flowing_sand:{keywords:["oldschool","time","countdown"],"char":"\u23f3",fitzpatrick_scale:!1,category:"objects"},hourglass:{keywords:["time","clock","oldschool","limit","exam","quiz","test"],"char":"\u231b",fitzpatrick_scale:!1,category:"objects"},satellite:{keywords:["communication","future","radio","space"],"char":"\ud83d\udce1",fitzpatrick_scale:!1,category:"objects"},battery:{keywords:["power","energy","sustain"],"char":"\ud83d\udd0b",fitzpatrick_scale:!1,category:"objects"},electric_plug:{keywords:["charger","power"],"char":"\ud83d\udd0c",fitzpatrick_scale:!1,category:"objects"},bulb:{keywords:["light","electricity","idea"],"char":"\ud83d\udca1",fitzpatrick_scale:!1,category:"objects"},flashlight:{keywords:["dark","camping","sight","night"],"char":"\ud83d\udd26",fitzpatrick_scale:!1,category:"objects"},candle:{keywords:["fire","wax"],"char":"\ud83d\udd6f",fitzpatrick_scale:!1,category:"objects"},wastebasket:{keywords:["bin","trash","rubbish","garbage","toss"],"char":"\ud83d\uddd1",fitzpatrick_scale:!1,category:"objects"},oil_drum:{keywords:["barrell"],"char":"\ud83d\udee2",fitzpatrick_scale:!1,category:"objects"},money_with_wings:{keywords:["dollar","bills","payment","sale"],"char":"\ud83d\udcb8",fitzpatrick_scale:!1,category:"objects"},dollar:{keywords:["money","sales","bill","currency"],"char":"\ud83d\udcb5",fitzpatrick_scale:!1,category:"objects"},yen:{keywords:["money","sales","japanese","dollar","currency"],"char":"\ud83d\udcb4",fitzpatrick_scale:!1,category:"objects"},euro:{keywords:["money","sales","dollar","currency"],"char":"\ud83d\udcb6",fitzpatrick_scale:!1,category:"objects"},pound:{keywords:["british","sterling","money","sales","bills","uk","england","currency"],"char":"\ud83d\udcb7",fitzpatrick_scale:!1,category:"objects"},moneybag:{keywords:["dollar","payment","coins","sale"],"char":"\ud83d\udcb0",fitzpatrick_scale:!1,category:"objects"},credit_card:{keywords:["money","sales","dollar","bill","payment","shopping"],"char":"\ud83d\udcb3",fitzpatrick_scale:!1,category:"objects"},gem:{keywords:["blue","ruby","diamond","jewelry"],"char":"\ud83d\udc8e",fitzpatrick_scale:!1,category:"objects"},balance_scale:{keywords:["law","fairness","weight"],"char":"\u2696",fitzpatrick_scale:!1,category:"objects"},wrench:{keywords:["tools","diy","ikea","fix","maintainer"],"char":"\ud83d\udd27",fitzpatrick_scale:!1,category:"objects"},hammer:{keywords:["tools","build","create"],"char":"\ud83d\udd28",fitzpatrick_scale:!1,category:"objects"},hammer_and_pick:{keywords:["tools","build","create"],"char":"\u2692",fitzpatrick_scale:!1,category:"objects"},hammer_and_wrench:{keywords:["tools","build","create"],"char":"\ud83d\udee0",fitzpatrick_scale:!1,category:"objects"},pick:{keywords:["tools","dig"],"char":"\u26cf",fitzpatrick_scale:!1,category:"objects"},nut_and_bolt:{keywords:["handy","tools","fix"],"char":"\ud83d\udd29",fitzpatrick_scale:!1,category:"objects"},gear:{keywords:["cog"],"char":"\u2699",fitzpatrick_scale:!1,category:"objects"},chains:{keywords:["lock","arrest"],"char":"\u26d3",fitzpatrick_scale:!1,category:"objects"},gun:{keywords:["violence","weapon","pistol","revolver"],"char":"\ud83d\udd2b",fitzpatrick_scale:!1,category:"objects"},bomb:{keywords:["boom","explode","explosion","terrorism"],"char":"\ud83d\udca3",fitzpatrick_scale:!1,category:"objects"},hocho:{keywords:["knife","blade","cutlery","kitchen","weapon"],"char":"\ud83d\udd2a",fitzpatrick_scale:!1,category:"objects"},dagger:{keywords:["weapon"],"char":"\ud83d\udde1",fitzpatrick_scale:!1,category:"objects"},crossed_swords:{keywords:["weapon"],"char":"\u2694",fitzpatrick_scale:!1,category:"objects"},shield:{keywords:["protection","security"],"char":"\ud83d\udee1",fitzpatrick_scale:!1,category:"objects"},smoking:{keywords:["kills","tobacco","cigarette","joint","smoke"],"char":"\ud83d\udeac",fitzpatrick_scale:!1,category:"objects"},skull_and_crossbones:{keywords:["poison","danger","deadly","scary","death","pirate","evil"],"char":"\u2620",fitzpatrick_scale:!1,category:"objects"},coffin:{keywords:["vampire","dead","die","death","rip","graveyard","cemetery","casket","funeral","box"],"char":"\u26b0",fitzpatrick_scale:!1,category:"objects"},funeral_urn:{keywords:["dead","die","death","rip","ashes"],"char":"\u26b1",fitzpatrick_scale:!1,category:"objects"},amphora:{keywords:["vase","jar"],"char":"\ud83c\udffa",fitzpatrick_scale:!1,category:"objects"},crystal_ball:{keywords:["disco","party","magic","circus","fortune_teller"],"char":"\ud83d\udd2e",fitzpatrick_scale:!1,category:"objects"},prayer_beads:{keywords:["dhikr","religious"],"char":"\ud83d\udcff",fitzpatrick_scale:!1,category:"objects"},barber:{keywords:["hair","salon","style"],"char":"\ud83d\udc88",fitzpatrick_scale:!1,category:"objects"},alembic:{keywords:["distilling","science","experiment","chemistry"],"char":"\u2697",fitzpatrick_scale:!1,category:"objects"},telescope:{keywords:["stars","space","zoom","science","astronomy"],"char":"\ud83d\udd2d",fitzpatrick_scale:!1,category:"objects"},microscope:{keywords:["laboratory","experiment","zoomin","science","study"],"char":"\ud83d\udd2c",fitzpatrick_scale:!1,category:"objects"},hole:{keywords:["embarrassing"],"char":"\ud83d\udd73",fitzpatrick_scale:!1,category:"objects"},pill:{keywords:["health","medicine","doctor","pharmacy","drug"],"char":"\ud83d\udc8a",fitzpatrick_scale:!1,category:"objects"},syringe:{keywords:["health","hospital","drugs","blood","medicine","needle","doctor","nurse"],"char":"\ud83d\udc89",fitzpatrick_scale:!1,category:"objects"},thermometer:{keywords:["weather","temperature","hot","cold"],"char":"\ud83c\udf21",fitzpatrick_scale:!1,category:"objects"},label:{keywords:["sale","tag"],"char":"\ud83c\udff7",fitzpatrick_scale:!1,category:"objects"},bookmark:{keywords:["favorite","label","save"],"char":"\ud83d\udd16",fitzpatrick_scale:!1,category:"objects"},toilet:{keywords:["restroom","wc","washroom","bathroom","potty"],"char":"\ud83d\udebd",fitzpatrick_scale:!1,category:"objects"},shower:{keywords:["clean","water","bathroom"],"char":"\ud83d\udebf",fitzpatrick_scale:!1,category:"objects"},bathtub:{keywords:["clean","shower","bathroom"],"char":"\ud83d\udec1",fitzpatrick_scale:!1,category:"objects"},key:{keywords:["lock","door","password"],"char":"\ud83d\udd11",fitzpatrick_scale:!1,category:"objects"},old_key:{keywords:["lock","door","password"],"char":"\ud83d\udddd",fitzpatrick_scale:!1,category:"objects"},couch_and_lamp:{keywords:["read","chill"],"char":"\ud83d\udecb",fitzpatrick_scale:!1,category:"objects"},sleeping_bed:{keywords:["bed","rest"],"char":"\ud83d\udecc",fitzpatrick_scale:!0,category:"objects"},bed:{keywords:["sleep","rest"],"char":"\ud83d\udecf",fitzpatrick_scale:!1,category:"objects"},door:{keywords:["house","entry","exit"],"char":"\ud83d\udeaa",fitzpatrick_scale:!1,category:"objects"},bellhop_bell:{keywords:["service"],"char":"\ud83d\udece",fitzpatrick_scale:!1,category:"objects"},framed_picture:{keywords:["photography"],"char":"\ud83d\uddbc",fitzpatrick_scale:!1,category:"objects"},world_map:{keywords:["location","direction"],"char":"\ud83d\uddfa",fitzpatrick_scale:!1,category:"objects"},parasol_on_ground:{keywords:["weather","summer"],"char":"\u26f1",fitzpatrick_scale:!1,category:"objects"},moyai:{keywords:["rock","easter island","moai"],"char":"\ud83d\uddff",fitzpatrick_scale:!1,category:"objects"},shopping:{keywords:["mall","buy","purchase"],"char":"\ud83d\udecd",fitzpatrick_scale:!1,category:"objects"},shopping_cart:{keywords:["trolley"],"char":"\ud83d\uded2",fitzpatrick_scale:!1,category:"objects"},balloon:{keywords:["party","celebration","birthday","circus"],"char":"\ud83c\udf88",fitzpatrick_scale:!1,category:"objects"},flags:{keywords:["fish","japanese","koinobori","carp","banner"],"char":"\ud83c\udf8f",fitzpatrick_scale:!1,category:"objects"},ribbon:{keywords:["decoration","pink","girl","bowtie"],"char":"\ud83c\udf80",fitzpatrick_scale:!1,category:"objects"},gift:{keywords:["present","birthday","christmas","xmas"],"char":"\ud83c\udf81",fitzpatrick_scale:!1,category:"objects"},confetti_ball:{keywords:["festival","party","birthday","circus"],"char":"\ud83c\udf8a",fitzpatrick_scale:!1,category:"objects"},tada:{keywords:["party","congratulations","birthday","magic","circus","celebration"],"char":"\ud83c\udf89",fitzpatrick_scale:!1,category:"objects"},dolls:{keywords:["japanese","toy","kimono"],"char":"\ud83c\udf8e",fitzpatrick_scale:!1,category:"objects"},wind_chime:{keywords:["nature","ding","spring","bell"],"char":"\ud83c\udf90",fitzpatrick_scale:!1,category:"objects"},crossed_flags:{keywords:["japanese","nation","country","border"],"char":"\ud83c\udf8c",fitzpatrick_scale:!1,category:"objects"},izakaya_lantern:{keywords:["light","paper","halloween","spooky"],"char":"\ud83c\udfee",fitzpatrick_scale:!1,category:"objects"},email:{keywords:["letter","postal","inbox","communication"],"char":"\u2709\ufe0f",fitzpatrick_scale:!1,category:"objects"},envelope_with_arrow:{keywords:["email","communication"],"char":"\ud83d\udce9",fitzpatrick_scale:!1,category:"objects"},incoming_envelope:{keywords:["email","inbox"],"char":"\ud83d\udce8",fitzpatrick_scale:!1,category:"objects"},"e-mail":{keywords:["communication","inbox"],"char":"\ud83d\udce7",fitzpatrick_scale:!1,category:"objects"},love_letter:{keywords:["email","like","affection","envelope","valentines"],"char":"\ud83d\udc8c",fitzpatrick_scale:!1,category:"objects"},postbox:{keywords:["email","letter","envelope"],"char":"\ud83d\udcee",fitzpatrick_scale:!1,category:"objects"},mailbox_closed:{keywords:["email","communication","inbox"],"char":"\ud83d\udcea",fitzpatrick_scale:!1,category:"objects"},mailbox:{keywords:["email","inbox","communication"],"char":"\ud83d\udceb",fitzpatrick_scale:!1,category:"objects"},mailbox_with_mail:{keywords:["email","inbox","communication"],"char":"\ud83d\udcec",fitzpatrick_scale:!1,category:"objects"},mailbox_with_no_mail:{keywords:["email","inbox"],"char":"\ud83d\udced",fitzpatrick_scale:!1,category:"objects"},"package":{keywords:["mail","gift","cardboard","box","moving"],"char":"\ud83d\udce6",fitzpatrick_scale:!1,category:"objects"},postal_horn:{keywords:["instrument","music"],"char":"\ud83d\udcef",fitzpatrick_scale:!1,category:"objects"},inbox_tray:{keywords:["email","documents"],"char":"\ud83d\udce5",fitzpatrick_scale:!1,category:"objects"},outbox_tray:{keywords:["inbox","email"],"char":"\ud83d\udce4",fitzpatrick_scale:!1,category:"objects"},scroll:{keywords:["documents","ancient","history","paper"],"char":"\ud83d\udcdc",fitzpatrick_scale:!1,category:"objects"},page_with_curl:{keywords:["documents","office","paper"],"char":"\ud83d\udcc3",fitzpatrick_scale:!1,category:"objects"},bookmark_tabs:{keywords:["favorite","save","order","tidy"],"char":"\ud83d\udcd1",fitzpatrick_scale:!1,category:"objects"},bar_chart:{keywords:["graph","presentation","stats"],"char":"\ud83d\udcca",fitzpatrick_scale:!1,category:"objects"},chart_with_upwards_trend:{keywords:["graph","presentation","stats","recovery","business","economics","money","sales","good","success"],"char":"\ud83d\udcc8",fitzpatrick_scale:!1,category:"objects"},chart_with_downwards_trend:{keywords:["graph","presentation","stats","recession","business","economics","money","sales","bad","failure"],"char":"\ud83d\udcc9",fitzpatrick_scale:!1,category:"objects"},page_facing_up:{keywords:["documents","office","paper","information"],"char":"\ud83d\udcc4",fitzpatrick_scale:!1,category:"objects"},date:{keywords:["calendar","schedule"],"char":"\ud83d\udcc5",fitzpatrick_scale:!1,category:"objects"},calendar:{keywords:["schedule","date","planning"],"char":"\ud83d\udcc6",fitzpatrick_scale:!1,category:"objects"},spiral_calendar:{keywords:["date","schedule","planning"],"char":"\ud83d\uddd3",fitzpatrick_scale:!1,category:"objects"},card_index:{keywords:["business","stationery"],"char":"\ud83d\udcc7",fitzpatrick_scale:!1,category:"objects"},card_file_box:{keywords:["business","stationery"],"char":"\ud83d\uddc3",fitzpatrick_scale:!1,category:"objects"},ballot_box:{keywords:["election","vote"],"char":"\ud83d\uddf3",fitzpatrick_scale:!1,category:"objects"},file_cabinet:{keywords:["filing","organizing"],"char":"\ud83d\uddc4",fitzpatrick_scale:!1,category:"objects"},clipboard:{keywords:["stationery","documents"],"char":"\ud83d\udccb",fitzpatrick_scale:!1,category:"objects"},spiral_notepad:{keywords:["memo","stationery"],"char":"\ud83d\uddd2",fitzpatrick_scale:!1,category:"objects"},file_folder:{keywords:["documents","business","office"],"char":"\ud83d\udcc1",fitzpatrick_scale:!1,category:"objects"},open_file_folder:{keywords:["documents","load"],"char":"\ud83d\udcc2",fitzpatrick_scale:!1,category:"objects"},card_index_dividers:{keywords:["organizing","business","stationery"],"char":"\ud83d\uddc2",fitzpatrick_scale:!1,category:"objects"},newspaper_roll:{keywords:["press","headline"],"char":"\ud83d\uddde",fitzpatrick_scale:!1,category:"objects"},newspaper:{keywords:["press","headline"],"char":"\ud83d\udcf0",fitzpatrick_scale:!1,category:"objects"},notebook:{keywords:["stationery","record","notes","paper","study"],"char":"\ud83d\udcd3",fitzpatrick_scale:!1,category:"objects"},closed_book:{keywords:["read","library","knowledge","textbook","learn"],"char":"\ud83d\udcd5",fitzpatrick_scale:!1,category:"objects"},green_book:{keywords:["read","library","knowledge","study"],"char":"\ud83d\udcd7",fitzpatrick_scale:!1,category:"objects"},blue_book:{keywords:["read","library","knowledge","learn","study"],"char":"\ud83d\udcd8",fitzpatrick_scale:!1,category:"objects"},orange_book:{keywords:["read","library","knowledge","textbook","study"],"char":"\ud83d\udcd9",fitzpatrick_scale:!1,category:"objects"},notebook_with_decorative_cover:{keywords:["classroom","notes","record","paper","study"],"char":"\ud83d\udcd4",fitzpatrick_scale:!1,category:"objects"},ledger:{keywords:["notes","paper"],"char":"\ud83d\udcd2",fitzpatrick_scale:!1,category:"objects"},books:{keywords:["literature","library","study"],"char":"\ud83d\udcda",fitzpatrick_scale:!1,category:"objects"},open_book:{keywords:["book","read","library","knowledge","literature","learn","study"],"char":"\ud83d\udcd6",fitzpatrick_scale:!1,category:"objects"},link:{keywords:["rings","url"],"char":"\ud83d\udd17",fitzpatrick_scale:!1,category:"objects"},paperclip:{keywords:["documents","stationery"],"char":"\ud83d\udcce",fitzpatrick_scale:!1,category:"objects"},paperclips:{keywords:["documents","stationery"],"char":"\ud83d\udd87",fitzpatrick_scale:!1,category:"objects"},scissors:{keywords:["stationery","cut"],"char":"\u2702\ufe0f",fitzpatrick_scale:!1,category:"objects"},triangular_ruler:{keywords:["stationery","math","architect","sketch"],"char":"\ud83d\udcd0",fitzpatrick_scale:!1,category:"objects"},straight_ruler:{keywords:["stationery","calculate","length","math","school","drawing","architect","sketch"],"char":"\ud83d\udccf",fitzpatrick_scale:!1,category:"objects"},pushpin:{keywords:["stationery","mark","here"],"char":"\ud83d\udccc",fitzpatrick_scale:!1,category:"objects"},round_pushpin:{keywords:["stationery","location","map","here"],"char":"\ud83d\udccd",fitzpatrick_scale:!1,category:"objects"},triangular_flag_on_post:{keywords:["mark","milestone","place"],"char":"\ud83d\udea9",fitzpatrick_scale:!1,category:"objects"},white_flag:{keywords:["losing","loser","lost","surrender","give up","fail"],"char":"\ud83c\udff3",fitzpatrick_scale:!1,category:"objects"},black_flag:{keywords:["pirate"],"char":"\ud83c\udff4",fitzpatrick_scale:!1,category:"objects"},rainbow_flag:{keywords:["flag","rainbow","pride","gay","lgbt","glbt","queer","homosexual","lesbian","bisexual","transgender"],"char":"\ud83c\udff3\ufe0f\u200d\ud83c\udf08",fitzpatrick_scale:!1,category:"objects"},closed_lock_with_key:{keywords:["security","privacy"],"char":"\ud83d\udd10",fitzpatrick_scale:!1,category:"objects"},lock:{keywords:["security","password","padlock"],"char":"\ud83d\udd12",fitzpatrick_scale:!1,category:"objects"},unlock:{keywords:["privacy","security"],"char":"\ud83d\udd13",fitzpatrick_scale:!1,category:"objects"},lock_with_ink_pen:{keywords:["security","secret"],"char":"\ud83d\udd0f",fitzpatrick_scale:!1,category:"objects"},pen:{keywords:["stationery","writing","write"],"char":"\ud83d\udd8a",fitzpatrick_scale:!1,category:"objects"},fountain_pen:{keywords:["stationery","writing","write"],"char":"\ud83d\udd8b",fitzpatrick_scale:!1,category:"objects"},black_nib:{keywords:["pen","stationery","writing","write"],"char":"\u2712\ufe0f",fitzpatrick_scale:!1,category:"objects"},memo:{keywords:["write","documents","stationery","pencil","paper","writing","legal","exam","quiz","test","study","compose"],"char":"\ud83d\udcdd",fitzpatrick_scale:!1,category:"objects"},pencil2:{keywords:["stationery","write","paper","writing","school","study"],"char":"\u270f\ufe0f",fitzpatrick_scale:!1,category:"objects"},crayon:{keywords:["drawing","creativity"],"char":"\ud83d\udd8d",fitzpatrick_scale:!1,category:"objects"},paintbrush:{keywords:["drawing","creativity","art"],"char":"\ud83d\udd8c",fitzpatrick_scale:!1,category:"objects"},mag:{keywords:["search","zoom","find","detective"],"char":"\ud83d\udd0d",fitzpatrick_scale:!1,category:"objects"},mag_right:{keywords:["search","zoom","find","detective"],"char":"\ud83d\udd0e",fitzpatrick_scale:!1,category:"objects"},heart:{keywords:["love","like","valentines"],"char":"\u2764\ufe0f",fitzpatrick_scale:!1,category:"symbols"},orange_heart:{keywords:["love","like","affection","valentines"],"char":"\ud83e\udde1",fitzpatrick_scale:!1,category:"symbols"},yellow_heart:{keywords:["love","like","affection","valentines"],"char":"\ud83d\udc9b",fitzpatrick_scale:!1,category:"symbols"},green_heart:{keywords:["love","like","affection","valentines"],"char":"\ud83d\udc9a",fitzpatrick_scale:!1,category:"symbols"},blue_heart:{keywords:["love","like","affection","valentines"],"char":"\ud83d\udc99",fitzpatrick_scale:!1,category:"symbols"},purple_heart:{keywords:["love","like","affection","valentines"],"char":"\ud83d\udc9c",fitzpatrick_scale:!1,category:"symbols"},black_heart:{keywords:["evil"],"char":"\ud83d\udda4",fitzpatrick_scale:!1,category:"symbols"},broken_heart:{keywords:["sad","sorry","break","heart","heartbreak"],"char":"\ud83d\udc94",fitzpatrick_scale:!1,category:"symbols"},heavy_heart_exclamation:{keywords:["decoration","love"],"char":"\u2763",fitzpatrick_scale:!1,category:"symbols"},two_hearts:{keywords:["love","like","affection","valentines","heart"],"char":"\ud83d\udc95",fitzpatrick_scale:!1,category:"symbols"},revolving_hearts:{keywords:["love","like","affection","valentines"],"char":"\ud83d\udc9e",fitzpatrick_scale:!1,category:"symbols"},heartbeat:{keywords:["love","like","affection","valentines","pink","heart"],"char":"\ud83d\udc93",fitzpatrick_scale:!1,category:"symbols"},heartpulse:{keywords:["like","love","affection","valentines","pink"],"char":"\ud83d\udc97",fitzpatrick_scale:!1,category:"symbols"},sparkling_heart:{keywords:["love","like","affection","valentines"],"char":"\ud83d\udc96",fitzpatrick_scale:!1,category:"symbols"},cupid:{keywords:["love","like","heart","affection","valentines"],"char":"\ud83d\udc98",fitzpatrick_scale:!1,category:"symbols"},gift_heart:{keywords:["love","valentines"],"char":"\ud83d\udc9d",fitzpatrick_scale:!1,category:"symbols"},heart_decoration:{keywords:["purple-square","love","like"],"char":"\ud83d\udc9f",fitzpatrick_scale:!1,category:"symbols"},peace_symbol:{keywords:["hippie"],"char":"\u262e",fitzpatrick_scale:!1,category:"symbols"},latin_cross:{keywords:["christianity"],"char":"\u271d",fitzpatrick_scale:!1,category:"symbols"},star_and_crescent:{keywords:["islam"],"char":"\u262a",fitzpatrick_scale:!1,category:"symbols"},om:{keywords:["hinduism","buddhism","sikhism","jainism"],"char":"\ud83d\udd49",fitzpatrick_scale:!1,category:"symbols"},wheel_of_dharma:{keywords:["hinduism","buddhism","sikhism","jainism"],"char":"\u2638",fitzpatrick_scale:!1,category:"symbols"},star_of_david:{keywords:["judaism"],"char":"\u2721",fitzpatrick_scale:!1,category:"symbols"},six_pointed_star:{keywords:["purple-square","religion","jewish","hexagram"],"char":"\ud83d\udd2f",fitzpatrick_scale:!1,category:"symbols"},menorah:{keywords:["hanukkah","candles","jewish"],"char":"\ud83d\udd4e",fitzpatrick_scale:!1,category:"symbols"},yin_yang:{keywords:["balance"],"char":"\u262f",fitzpatrick_scale:!1,category:"symbols"},orthodox_cross:{keywords:["suppedaneum","religion"],"char":"\u2626",fitzpatrick_scale:!1,category:"symbols"},place_of_worship:{keywords:["religion","church","temple","prayer"],"char":"\ud83d\uded0",fitzpatrick_scale:!1,category:"symbols"},ophiuchus:{keywords:["sign","purple-square","constellation","astrology"],"char":"\u26ce",fitzpatrick_scale:!1,category:"symbols"},aries:{keywords:["sign","purple-square","zodiac","astrology"],"char":"\u2648",fitzpatrick_scale:!1,category:"symbols"},taurus:{keywords:["purple-square","sign","zodiac","astrology"],"char":"\u2649",fitzpatrick_scale:!1,category:"symbols"},gemini:{keywords:["sign","zodiac","purple-square","astrology"],"char":"\u264a",fitzpatrick_scale:!1,category:"symbols"},cancer:{keywords:["sign","zodiac","purple-square","astrology"],"char":"\u264b",fitzpatrick_scale:!1,category:"symbols"},leo:{keywords:["sign","purple-square","zodiac","astrology"],"char":"\u264c",fitzpatrick_scale:!1,category:"symbols"},virgo:{keywords:["sign","zodiac","purple-square","astrology"],"char":"\u264d",fitzpatrick_scale:!1,category:"symbols"},libra:{keywords:["sign","purple-square","zodiac","astrology"],"char":"\u264e",fitzpatrick_scale:!1,category:"symbols"},scorpius:{keywords:["sign","zodiac","purple-square","astrology","scorpio"],"char":"\u264f",fitzpatrick_scale:!1,category:"symbols"},sagittarius:{keywords:["sign","zodiac","purple-square","astrology"],"char":"\u2650",fitzpatrick_scale:!1,category:"symbols"},capricorn:{keywords:["sign","zodiac","purple-square","astrology"],"char":"\u2651",fitzpatrick_scale:!1,category:"symbols"},aquarius:{keywords:["sign","purple-square","zodiac","astrology"],"char":"\u2652",fitzpatrick_scale:!1,category:"symbols"},pisces:{keywords:["purple-square","sign","zodiac","astrology"],"char":"\u2653",fitzpatrick_scale:!1,category:"symbols"},id:{keywords:["purple-square","words"],"char":"\ud83c\udd94",fitzpatrick_scale:!1,category:"symbols"},atom_symbol:{keywords:["science","physics","chemistry"],"char":"\u269b",fitzpatrick_scale:!1,category:"symbols"},u7a7a:{keywords:["kanji","japanese","chinese","empty","sky","blue-square"],"char":"\ud83c\ude33",fitzpatrick_scale:!1,category:"symbols"},u5272:{keywords:["cut","divide","chinese","kanji","pink-square"],"char":"\ud83c\ude39",fitzpatrick_scale:!1,category:"symbols"},radioactive:{keywords:["nuclear","danger"],"char":"\u2622",fitzpatrick_scale:!1,category:"symbols"},biohazard:{keywords:["danger"],"char":"\u2623",fitzpatrick_scale:!1,category:"symbols"},mobile_phone_off:{keywords:["mute","orange-square","silence","quiet"],"char":"\ud83d\udcf4",fitzpatrick_scale:!1,category:"symbols"},vibration_mode:{keywords:["orange-square","phone"],"char":"\ud83d\udcf3",fitzpatrick_scale:!1,category:"symbols"},u6709:{keywords:["orange-square","chinese","have","kanji"],"char":"\ud83c\ude36",fitzpatrick_scale:!1,category:"symbols"},u7121:{keywords:["nothing","chinese","kanji","japanese","orange-square"],"char":"\ud83c\ude1a",fitzpatrick_scale:!1,category:"symbols"},u7533:{keywords:["chinese","japanese","kanji","orange-square"],"char":"\ud83c\ude38",fitzpatrick_scale:!1,category:"symbols"},u55b6:{keywords:["japanese","opening hours","orange-square"],"char":"\ud83c\ude3a",fitzpatrick_scale:!1,category:"symbols"},u6708:{keywords:["chinese","month","moon","japanese","orange-square","kanji"],"char":"\ud83c\ude37\ufe0f",fitzpatrick_scale:!1,category:"symbols"},eight_pointed_black_star:{keywords:["orange-square","shape","polygon"],"char":"\u2734\ufe0f",fitzpatrick_scale:!1,category:"symbols"},vs:{keywords:["words","orange-square"],"char":"\ud83c\udd9a",fitzpatrick_scale:!1,category:"symbols"},accept:{keywords:["ok","good","chinese","kanji","agree","yes","orange-circle"],"char":"\ud83c\ude51",fitzpatrick_scale:!1,category:"symbols"},white_flower:{keywords:["japanese","spring"],"char":"\ud83d\udcae",fitzpatrick_scale:!1,category:"symbols"},ideograph_advantage:{keywords:["chinese","kanji","obtain","get","circle"],"char":"\ud83c\ude50",fitzpatrick_scale:!1,category:"symbols"},secret:{keywords:["privacy","chinese","sshh","kanji","red-circle"],"char":"\u3299\ufe0f",fitzpatrick_scale:!1,category:"symbols"},congratulations:{keywords:["chinese","kanji","japanese","red-circle"],"char":"\u3297\ufe0f",fitzpatrick_scale:!1,category:"symbols"},u5408:{keywords:["japanese","chinese","join","kanji","red-square"],"char":"\ud83c\ude34",fitzpatrick_scale:!1,category:"symbols"},u6e80:{keywords:["full","chinese","japanese","red-square","kanji"],"char":"\ud83c\ude35",fitzpatrick_scale:!1,category:"symbols"},u7981:{keywords:["kanji","japanese","chinese","forbidden","limit","restricted","red-square"],"char":"\ud83c\ude32",fitzpatrick_scale:!1,category:"symbols"},a:{keywords:["red-square","alphabet","letter"],"char":"\ud83c\udd70\ufe0f",fitzpatrick_scale:!1,category:"symbols"},b:{keywords:["red-square","alphabet","letter"],"char":"\ud83c\udd71\ufe0f",fitzpatrick_scale:!1,category:"symbols"},ab:{keywords:["red-square","alphabet"],"char":"\ud83c\udd8e",fitzpatrick_scale:!1,category:"symbols"},cl:{keywords:["alphabet","words","red-square"],"char":"\ud83c\udd91",fitzpatrick_scale:!1,category:"symbols"},o2:{keywords:["alphabet","red-square","letter"],"char":"\ud83c\udd7e\ufe0f",fitzpatrick_scale:!1,category:"symbols"},sos:{keywords:["help","red-square","words","emergency","911"],"char":"\ud83c\udd98",fitzpatrick_scale:!1,category:"symbols"},no_entry:{keywords:["limit","security","privacy","bad","denied","stop","circle"],"char":"\u26d4",fitzpatrick_scale:!1,category:"symbols"},name_badge:{keywords:["fire","forbid"],"char":"\ud83d\udcdb",fitzpatrick_scale:!1,category:"symbols"},no_entry_sign:{keywords:["forbid","stop","limit","denied","disallow","circle"],"char":"\ud83d\udeab",fitzpatrick_scale:!1,category:"symbols"},x:{keywords:["no","delete","remove","cancel"],"char":"\u274c",fitzpatrick_scale:!1,category:"symbols"},o:{keywords:["circle","round"],"char":"\u2b55",fitzpatrick_scale:!1,category:"symbols"},stop_sign:{keywords:["stop"],"char":"\ud83d\uded1",fitzpatrick_scale:!1,category:"symbols"},anger:{keywords:["angry","mad"],"char":"\ud83d\udca2",fitzpatrick_scale:!1,category:"symbols"},hotsprings:{keywords:["bath","warm","relax"],"char":"\u2668\ufe0f",fitzpatrick_scale:!1,category:"symbols"},no_pedestrians:{keywords:["rules","crossing","walking","circle"],"char":"\ud83d\udeb7",fitzpatrick_scale:!1,category:"symbols"},do_not_litter:{keywords:["trash","bin","garbage","circle"],"char":"\ud83d\udeaf",fitzpatrick_scale:!1,category:"symbols"},no_bicycles:{keywords:["cyclist","prohibited","circle"],"char":"\ud83d\udeb3",fitzpatrick_scale:!1,category:"symbols"},"non-potable_water":{keywords:["drink","faucet","tap","circle"],"char":"\ud83d\udeb1",fitzpatrick_scale:!1,category:"symbols"},underage:{keywords:["18","drink","pub","night","minor","circle"],"char":"\ud83d\udd1e",fitzpatrick_scale:!1,category:"symbols"},no_mobile_phones:{keywords:["iphone","mute","circle"],"char":"\ud83d\udcf5",fitzpatrick_scale:!1,category:"symbols"},exclamation:{keywords:["heavy_exclamation_mark","danger","surprise","punctuation","wow","warning"],"char":"\u2757",fitzpatrick_scale:!1,category:"symbols"},grey_exclamation:{keywords:["surprise","punctuation","gray","wow","warning"],"char":"\u2755",fitzpatrick_scale:!1,category:"symbols"},question:{keywords:["doubt","confused"],"char":"\u2753",fitzpatrick_scale:!1,category:"symbols"},grey_question:{keywords:["doubts","gray","huh","confused"],"char":"\u2754",fitzpatrick_scale:!1,category:"symbols"},bangbang:{keywords:["exclamation","surprise"],"char":"\u203c\ufe0f",fitzpatrick_scale:!1,category:"symbols"},interrobang:{keywords:["wat","punctuation","surprise"],"char":"\u2049\ufe0f",fitzpatrick_scale:!1,category:"symbols"},100:{keywords:["score","perfect","numbers","century","exam","quiz","test","pass","hundred"],"char":"\ud83d\udcaf",fitzpatrick_scale:!1,category:"symbols"},low_brightness:{keywords:["sun","afternoon","warm","summer"],"char":"\ud83d\udd05",fitzpatrick_scale:!1,category:"symbols"},high_brightness:{keywords:["sun","light"],"char":"\ud83d\udd06",fitzpatrick_scale:!1,category:"symbols"},trident:{keywords:["weapon","spear"],"char":"\ud83d\udd31",fitzpatrick_scale:!1,category:"symbols"},fleur_de_lis:{keywords:["decorative","scout"],"char":"\u269c",fitzpatrick_scale:!1,category:"symbols"},part_alternation_mark:{keywords:["graph","presentation","stats","business","economics","bad"],"char":"\u303d\ufe0f",fitzpatrick_scale:!1,category:"symbols"},warning:{keywords:["exclamation","wip","alert","error","problem","issue"],"char":"\u26a0\ufe0f",fitzpatrick_scale:!1,category:"symbols"},children_crossing:{keywords:["school","warning","danger","sign","driving","yellow-diamond"],"char":"\ud83d\udeb8",fitzpatrick_scale:!1,category:"symbols"},beginner:{keywords:["badge","shield"],"char":"\ud83d\udd30",fitzpatrick_scale:!1,category:"symbols"},recycle:{keywords:["arrow","environment","garbage","trash"],"char":"\u267b\ufe0f",fitzpatrick_scale:!1,category:"symbols"},u6307:{keywords:["chinese","point","green-square","kanji"],"char":"\ud83c\ude2f",fitzpatrick_scale:!1,category:"symbols"},chart:{keywords:["green-square","graph","presentation","stats"],"char":"\ud83d\udcb9",fitzpatrick_scale:!1,category:"symbols"},sparkle:{keywords:["stars","green-square","awesome","good","fireworks"],"char":"\u2747\ufe0f",fitzpatrick_scale:!1,category:"symbols"},eight_spoked_asterisk:{keywords:["star","sparkle","green-square"],"char":"\u2733\ufe0f",fitzpatrick_scale:!1,category:"symbols"},negative_squared_cross_mark:{keywords:["x","green-square","no","deny"],"char":"\u274e",fitzpatrick_scale:!1,category:"symbols"},white_check_mark:{keywords:["green-square","ok","agree","vote","election","answer","tick"],"char":"\u2705",fitzpatrick_scale:!1,category:"symbols"},diamond_shape_with_a_dot_inside:{keywords:["jewel","blue","gem","crystal","fancy"],"char":"\ud83d\udca0",fitzpatrick_scale:!1,category:"symbols"},cyclone:{keywords:["weather","swirl","blue","cloud","vortex","spiral","whirlpool","spin","tornado","hurricane","typhoon"],"char":"\ud83c\udf00",fitzpatrick_scale:!1,category:"symbols"},loop:{keywords:["tape","cassette"],"char":"\u27bf",fitzpatrick_scale:!1,category:"symbols"},globe_with_meridians:{keywords:["earth","international","world","internet","interweb","i18n"],"char":"\ud83c\udf10",fitzpatrick_scale:!1,category:"symbols"},m:{keywords:["alphabet","blue-circle","letter"],"char":"\u24c2\ufe0f",fitzpatrick_scale:!1,category:"symbols"},atm:{keywords:["money","sales","cash","blue-square","payment","bank"],"char":"\ud83c\udfe7",fitzpatrick_scale:!1,category:"symbols"},sa:{keywords:["japanese","blue-square","katakana"],"char":"\ud83c\ude02\ufe0f",fitzpatrick_scale:!1,category:"symbols"},passport_control:{keywords:["custom","blue-square"],"char":"\ud83d\udec2",fitzpatrick_scale:!1,category:"symbols"},customs:{keywords:["passport","border","blue-square"],"char":"\ud83d\udec3",fitzpatrick_scale:!1,category:"symbols"},baggage_claim:{keywords:["blue-square","airport","transport"],"char":"\ud83d\udec4",fitzpatrick_scale:!1,category:"symbols"},left_luggage:{keywords:["blue-square","travel"],"char":"\ud83d\udec5",fitzpatrick_scale:!1,category:"symbols"},wheelchair:{keywords:["blue-square","disabled","a11y","accessibility"],"char":"\u267f",fitzpatrick_scale:!1,category:"symbols"},no_smoking:{keywords:["cigarette","blue-square","smell","smoke"],"char":"\ud83d\udead",fitzpatrick_scale:!1,category:"symbols"},wc:{keywords:["toilet","restroom","blue-square"],"char":"\ud83d\udebe",fitzpatrick_scale:!1,category:"symbols"},parking:{keywords:["cars","blue-square","alphabet","letter"],"char":"\ud83c\udd7f\ufe0f",fitzpatrick_scale:!1,category:"symbols"},potable_water:{keywords:["blue-square","liquid","restroom","cleaning","faucet"],"char":"\ud83d\udeb0",fitzpatrick_scale:!1,category:"symbols"},mens:{keywords:["toilet","restroom","wc","blue-square","gender","male"],"char":"\ud83d\udeb9",fitzpatrick_scale:!1,category:"symbols"},womens:{keywords:["purple-square","woman","female","toilet","loo","restroom","gender"],"char":"\ud83d\udeba",fitzpatrick_scale:!1,category:"symbols"},baby_symbol:{keywords:["orange-square","child"],"char":"\ud83d\udebc",fitzpatrick_scale:!1,category:"symbols"},restroom:{keywords:["blue-square","toilet","refresh","wc","gender"],"char":"\ud83d\udebb",fitzpatrick_scale:!1,category:"symbols"},put_litter_in_its_place:{keywords:["blue-square","sign","human","info"],"char":"\ud83d\udeae",fitzpatrick_scale:!1,category:"symbols"},cinema:{keywords:["blue-square","record","film","movie","curtain","stage","theater"],"char":"\ud83c\udfa6",fitzpatrick_scale:!1,category:"symbols"},signal_strength:{keywords:["blue-square","reception","phone","internet","connection","wifi","bluetooth","bars"],"char":"\ud83d\udcf6",fitzpatrick_scale:!1,category:"symbols"},koko:{keywords:["blue-square","here","katakana","japanese","destination"],"char":"\ud83c\ude01",fitzpatrick_scale:!1,category:"symbols"},ng:{keywords:["blue-square","words","shape","icon"],"char":"\ud83c\udd96",fitzpatrick_scale:!1,category:"symbols"},ok:{keywords:["good","agree","yes","blue-square"],"char":"\ud83c\udd97",fitzpatrick_scale:!1,category:"symbols"},up:{keywords:["blue-square","above","high"],"char":"\ud83c\udd99",fitzpatrick_scale:!1,category:"symbols"},cool:{keywords:["words","blue-square"],"char":"\ud83c\udd92",fitzpatrick_scale:!1,category:"symbols"},"new":{keywords:["blue-square","words","start"],"char":"\ud83c\udd95",fitzpatrick_scale:!1,category:"symbols"},free:{keywords:["blue-square","words"],"char":"\ud83c\udd93",fitzpatrick_scale:!1,category:"symbols"},zero:{keywords:["0","numbers","blue-square","null"],"char":"0\ufe0f\u20e3",fitzpatrick_scale:!1,category:"symbols"},one:{keywords:["blue-square","numbers","1"],"char":"1\ufe0f\u20e3",fitzpatrick_scale:!1,category:"symbols"},two:{keywords:["numbers","2","prime","blue-square"],"char":"2\ufe0f\u20e3",fitzpatrick_scale:!1,category:"symbols"},three:{keywords:["3","numbers","prime","blue-square"],"char":"3\ufe0f\u20e3",fitzpatrick_scale:!1,category:"symbols"},four:{keywords:["4","numbers","blue-square"],"char":"4\ufe0f\u20e3",fitzpatrick_scale:!1,category:"symbols"},five:{keywords:["5","numbers","blue-square","prime"],"char":"5\ufe0f\u20e3",fitzpatrick_scale:!1,category:"symbols"},six:{keywords:["6","numbers","blue-square"],"char":"6\ufe0f\u20e3",fitzpatrick_scale:!1,category:"symbols"},seven:{keywords:["7","numbers","blue-square","prime"],"char":"7\ufe0f\u20e3",fitzpatrick_scale:!1,category:"symbols"},eight:{keywords:["8","blue-square","numbers"],"char":"8\ufe0f\u20e3",fitzpatrick_scale:!1,category:"symbols"},nine:{keywords:["blue-square","numbers","9"],"char":"9\ufe0f\u20e3",fitzpatrick_scale:!1,category:"symbols"},keycap_ten:{keywords:["numbers","10","blue-square"],"char":"\ud83d\udd1f",fitzpatrick_scale:!1,category:"symbols"},asterisk:{keywords:["star","keycap"],"char":"*\u20e3",fitzpatrick_scale:!1,category:"symbols"},1234:{keywords:["numbers","blue-square"],"char":"\ud83d\udd22",fitzpatrick_scale:!1,category:"symbols"},eject_button:{keywords:["blue-square"],"char":"\u23cf\ufe0f",fitzpatrick_scale:!1,category:"symbols"},arrow_forward:{keywords:["blue-square","right","direction","play"],"char":"\u25b6\ufe0f",fitzpatrick_scale:!1,category:"symbols"},pause_button:{keywords:["pause","blue-square"],"char":"\u23f8",fitzpatrick_scale:!1,category:"symbols"},next_track_button:{keywords:["forward","next","blue-square"],"char":"\u23ed",fitzpatrick_scale:!1,category:"symbols"},stop_button:{keywords:["blue-square"],"char":"\u23f9",fitzpatrick_scale:!1,category:"symbols"},record_button:{keywords:["blue-square"],"char":"\u23fa",fitzpatrick_scale:!1,category:"symbols"},play_or_pause_button:{keywords:["blue-square","play","pause"],"char":"\u23ef",fitzpatrick_scale:!1,category:"symbols"},previous_track_button:{keywords:["backward"],"char":"\u23ee",fitzpatrick_scale:!1,category:"symbols"},fast_forward:{keywords:["blue-square","play","speed","continue"],"char":"\u23e9",fitzpatrick_scale:!1,category:"symbols"},rewind:{keywords:["play","blue-square"],"char":"\u23ea",fitzpatrick_scale:!1,category:"symbols"},twisted_rightwards_arrows:{keywords:["blue-square","shuffle","music","random"],"char":"\ud83d\udd00",fitzpatrick_scale:!1,category:"symbols"},repeat:{keywords:["loop","record"],"char":"\ud83d\udd01",fitzpatrick_scale:!1,category:"symbols"},repeat_one:{keywords:["blue-square","loop"],"char":"\ud83d\udd02",fitzpatrick_scale:!1,category:"symbols"},arrow_backward:{keywords:["blue-square","left","direction"],"char":"\u25c0\ufe0f",fitzpatrick_scale:!1,category:"symbols"},arrow_up_small:{keywords:["blue-square","triangle","direction","point","forward","top"],"char":"\ud83d\udd3c",fitzpatrick_scale:!1,category:"symbols"},arrow_down_small:{keywords:["blue-square","direction","bottom"],"char":"\ud83d\udd3d",fitzpatrick_scale:!1,category:"symbols"},arrow_double_up:{keywords:["blue-square","direction","top"],"char":"\u23eb",fitzpatrick_scale:!1,category:"symbols"},arrow_double_down:{keywords:["blue-square","direction","bottom"],"char":"\u23ec",fitzpatrick_scale:!1,category:"symbols"},arrow_right:{keywords:["blue-square","next"],"char":"\u27a1\ufe0f",fitzpatrick_scale:!1,category:"symbols"},arrow_left:{keywords:["blue-square","previous","back"],"char":"\u2b05\ufe0f",fitzpatrick_scale:!1,category:"symbols"},arrow_up:{keywords:["blue-square","continue","top","direction"],"char":"\u2b06\ufe0f",fitzpatrick_scale:!1,category:"symbols"},arrow_down:{keywords:["blue-square","direction","bottom"],"char":"\u2b07\ufe0f",fitzpatrick_scale:!1,category:"symbols"},arrow_upper_right:{keywords:["blue-square","point","direction","diagonal","northeast"],"char":"\u2197\ufe0f",fitzpatrick_scale:!1,category:"symbols"},arrow_lower_right:{keywords:["blue-square","direction","diagonal","southeast"],"char":"\u2198\ufe0f",fitzpatrick_scale:!1,category:"symbols"},arrow_lower_left:{keywords:["blue-square","direction","diagonal","southwest"],"char":"\u2199\ufe0f",fitzpatrick_scale:!1,category:"symbols"},arrow_upper_left:{keywords:["blue-square","point","direction","diagonal","northwest"],"char":"\u2196\ufe0f",fitzpatrick_scale:!1,category:"symbols"},arrow_up_down:{keywords:["blue-square","direction","way","vertical"],"char":"\u2195\ufe0f",fitzpatrick_scale:!1,category:"symbols"},left_right_arrow:{keywords:["shape","direction","horizontal","sideways"],"char":"\u2194\ufe0f",fitzpatrick_scale:!1,category:"symbols"},arrows_counterclockwise:{keywords:["blue-square","sync","cycle"],"char":"\ud83d\udd04",fitzpatrick_scale:!1,category:"symbols"},arrow_right_hook:{keywords:["blue-square","return","rotate","direction"],"char":"\u21aa\ufe0f",fitzpatrick_scale:!1,category:"symbols"},leftwards_arrow_with_hook:{keywords:["back","return","blue-square","undo","enter"],"char":"\u21a9\ufe0f",fitzpatrick_scale:!1,category:"symbols"},arrow_heading_up:{keywords:["blue-square","direction","top"],"char":"\u2934\ufe0f",fitzpatrick_scale:!1,category:"symbols"},arrow_heading_down:{keywords:["blue-square","direction","bottom"],"char":"\u2935\ufe0f",fitzpatrick_scale:!1,category:"symbols"},hash:{keywords:["symbol","blue-square","twitter"],"char":"#\ufe0f\u20e3",fitzpatrick_scale:!1,category:"symbols"},information_source:{keywords:["blue-square","alphabet","letter"],"char":"\u2139\ufe0f",fitzpatrick_scale:!1,category:"symbols"},abc:{keywords:["blue-square","alphabet"],"char":"\ud83d\udd24",fitzpatrick_scale:!1,category:"symbols"},abcd:{keywords:["blue-square","alphabet"],"char":"\ud83d\udd21",fitzpatrick_scale:!1,category:"symbols"},capital_abcd:{keywords:["alphabet","words","blue-square"],"char":"\ud83d\udd20",fitzpatrick_scale:!1,category:"symbols"},symbols:{keywords:["blue-square","music","note","ampersand","percent","glyphs","characters"],"char":"\ud83d\udd23",fitzpatrick_scale:!1,category:"symbols"},musical_note:{keywords:["score","tone","sound"],"char":"\ud83c\udfb5",fitzpatrick_scale:!1,category:"symbols"},notes:{keywords:["music","score"],"char":"\ud83c\udfb6",fitzpatrick_scale:!1,category:"symbols"},wavy_dash:{keywords:["draw","line","moustache","mustache","squiggle","scribble"],"char":"\u3030\ufe0f",fitzpatrick_scale:!1,category:"symbols"},curly_loop:{keywords:["scribble","draw","shape","squiggle"],"char":"\u27b0",fitzpatrick_scale:!1,category:"symbols"},heavy_check_mark:{keywords:["ok","nike","answer","yes","tick"],"char":"\u2714\ufe0f",fitzpatrick_scale:!1,category:"symbols"},arrows_clockwise:{keywords:["sync","cycle","round","repeat"],"char":"\ud83d\udd03",fitzpatrick_scale:!1,category:"symbols"},heavy_plus_sign:{keywords:["math","calculation","addition","more","increase"],"char":"\u2795",fitzpatrick_scale:!1,category:"symbols"},heavy_minus_sign:{keywords:["math","calculation","subtract","less"],"char":"\u2796",fitzpatrick_scale:!1,category:"symbols"},heavy_division_sign:{keywords:["divide","math","calculation"],"char":"\u2797",fitzpatrick_scale:!1,category:"symbols"},heavy_multiplication_x:{keywords:["math","calculation"],"char":"\u2716\ufe0f",fitzpatrick_scale:!1,category:"symbols"},heavy_dollar_sign:{keywords:["money","sales","payment","currency","buck"],"char":"\ud83d\udcb2",fitzpatrick_scale:!1,category:"symbols"},currency_exchange:{keywords:["money","sales","dollar","travel"],"char":"\ud83d\udcb1",fitzpatrick_scale:!1,category:"symbols"},copyright:{keywords:["ip","license","circle","law","legal"],"char":"\xa9\ufe0f",fitzpatrick_scale:!1,category:"symbols"},registered:{keywords:["alphabet","circle"],"char":"\xae\ufe0f",fitzpatrick_scale:!1,category:"symbols"},tm:{keywords:["trademark","brand","law","legal"],"char":"\u2122\ufe0f",fitzpatrick_scale:!1,category:"symbols"},end:{keywords:["words","arrow"],"char":"\ud83d\udd1a",fitzpatrick_scale:!1,category:"symbols"},back:{keywords:["arrow","words","return"],"char":"\ud83d\udd19",fitzpatrick_scale:!1,category:"symbols"},on:{keywords:["arrow","words"],"char":"\ud83d\udd1b",fitzpatrick_scale:!1,category:"symbols"},top:{keywords:["words","blue-square"],"char":"\ud83d\udd1d",fitzpatrick_scale:!1,category:"symbols"},soon:{keywords:["arrow","words"],"char":"\ud83d\udd1c",fitzpatrick_scale:!1,category:"symbols"},ballot_box_with_check:{keywords:["ok","agree","confirm","black-square","vote","election","yes","tick"],"char":"\u2611\ufe0f",fitzpatrick_scale:!1,category:"symbols"},radio_button:{keywords:["input","old","music","circle"],"char":"\ud83d\udd18",fitzpatrick_scale:!1,category:"symbols"},white_circle:{keywords:["shape","round"],"char":"\u26aa",fitzpatrick_scale:!1,category:"symbols"},black_circle:{keywords:["shape","button","round"],"char":"\u26ab",fitzpatrick_scale:!1,category:"symbols"},red_circle:{keywords:["shape","error","danger"],"char":"\ud83d\udd34",fitzpatrick_scale:!1,category:"symbols"},large_blue_circle:{keywords:["shape","icon","button"],"char":"\ud83d\udd35",fitzpatrick_scale:!1,category:"symbols"},small_orange_diamond:{keywords:["shape","jewel","gem"],"char":"\ud83d\udd38",fitzpatrick_scale:!1,category:"symbols"},small_blue_diamond:{keywords:["shape","jewel","gem"],"char":"\ud83d\udd39",fitzpatrick_scale:!1,category:"symbols"},large_orange_diamond:{keywords:["shape","jewel","gem"],"char":"\ud83d\udd36",fitzpatrick_scale:!1,category:"symbols"},large_blue_diamond:{keywords:["shape","jewel","gem"],"char":"\ud83d\udd37",fitzpatrick_scale:!1,category:"symbols"},small_red_triangle:{keywords:["shape","direction","up","top"],"char":"\ud83d\udd3a",fitzpatrick_scale:!1,category:"symbols"},black_small_square:{keywords:["shape","icon"],"char":"\u25aa\ufe0f",fitzpatrick_scale:!1,category:"symbols"},white_small_square:{keywords:["shape","icon"],"char":"\u25ab\ufe0f",fitzpatrick_scale:!1,category:"symbols"},black_large_square:{keywords:["shape","icon","button"],"char":"\u2b1b",fitzpatrick_scale:!1,category:"symbols"},white_large_square:{keywords:["shape","icon","stone","button"],"char":"\u2b1c",fitzpatrick_scale:!1,category:"symbols"},small_red_triangle_down:{keywords:["shape","direction","bottom"],"char":"\ud83d\udd3b",fitzpatrick_scale:!1,category:"symbols"},black_medium_square:{keywords:["shape","button","icon"],"char":"\u25fc\ufe0f",fitzpatrick_scale:!1,category:"symbols"},white_medium_square:{keywords:["shape","stone","icon"],"char":"\u25fb\ufe0f",fitzpatrick_scale:!1,category:"symbols"},black_medium_small_square:{keywords:["icon","shape","button"],"char":"\u25fe",fitzpatrick_scale:!1,category:"symbols"},white_medium_small_square:{keywords:["shape","stone","icon","button"],"char":"\u25fd",fitzpatrick_scale:!1,category:"symbols"},black_square_button:{keywords:["shape","input","frame"],"char":"\ud83d\udd32",fitzpatrick_scale:!1,category:"symbols"},white_square_button:{keywords:["shape","input"],"char":"\ud83d\udd33",fitzpatrick_scale:!1,category:"symbols"},speaker:{keywords:["sound","volume","silence","broadcast"],"char":"\ud83d\udd08",fitzpatrick_scale:!1,category:"symbols"},sound:{keywords:["volume","speaker","broadcast"],"char":"\ud83d\udd09",fitzpatrick_scale:!1,category:"symbols"},loud_sound:{keywords:["volume","noise","noisy","speaker","broadcast"],"char":"\ud83d\udd0a",fitzpatrick_scale:!1,category:"symbols"},mute:{keywords:["sound","volume","silence","quiet"],"char":"\ud83d\udd07",fitzpatrick_scale:!1,category:"symbols"},mega:{keywords:["sound","speaker","volume"],"char":"\ud83d\udce3",fitzpatrick_scale:!1,category:"symbols"},loudspeaker:{keywords:["volume","sound"],"char":"\ud83d\udce2",fitzpatrick_scale:!1,category:"symbols"},bell:{keywords:["sound","notification","christmas","xmas","chime"],"char":"\ud83d\udd14",fitzpatrick_scale:!1,category:"symbols"},no_bell:{keywords:["sound","volume","mute","quiet","silent"],"char":"\ud83d\udd15",fitzpatrick_scale:!1,category:"symbols"},black_joker:{keywords:["poker","cards","game","play","magic"],"char":"\ud83c\udccf",fitzpatrick_scale:!1,category:"symbols"},mahjong:{keywords:["game","play","chinese","kanji"],"char":"\ud83c\udc04",fitzpatrick_scale:!1,category:"symbols"},spades:{keywords:["poker","cards","suits","magic"],"char":"\u2660\ufe0f",fitzpatrick_scale:!1,category:"symbols"},clubs:{keywords:["poker","cards","magic","suits"],"char":"\u2663\ufe0f",fitzpatrick_scale:!1,category:"symbols"},hearts:{keywords:["poker","cards","magic","suits"],"char":"\u2665\ufe0f",fitzpatrick_scale:!1,category:"symbols"},diamonds:{keywords:["poker","cards","magic","suits"],"char":"\u2666\ufe0f",fitzpatrick_scale:!1,category:"symbols"},flower_playing_cards:{keywords:["game","sunset","red"],"char":"\ud83c\udfb4",fitzpatrick_scale:!1,category:"symbols"},thought_balloon:{keywords:["bubble","cloud","speech","thinking","dream"],"char":"\ud83d\udcad",fitzpatrick_scale:!1,category:"symbols"},right_anger_bubble:{keywords:["caption","speech","thinking","mad"],"char":"\ud83d\uddef",fitzpatrick_scale:!1,category:"symbols"},speech_balloon:{keywords:["bubble","words","message","talk","chatting"],"char":"\ud83d\udcac",fitzpatrick_scale:!1,category:"symbols"},left_speech_bubble:{keywords:["words","message","talk","chatting"],"char":"\ud83d\udde8",fitzpatrick_scale:!1,category:"symbols"},clock1:{keywords:["time","late","early","schedule"],"char":"\ud83d\udd50",fitzpatrick_scale:!1,category:"symbols"},clock2:{keywords:["time","late","early","schedule"],"char":"\ud83d\udd51",fitzpatrick_scale:!1,category:"symbols"},clock3:{keywords:["time","late","early","schedule"],"char":"\ud83d\udd52",fitzpatrick_scale:!1,category:"symbols"},clock4:{keywords:["time","late","early","schedule"],"char":"\ud83d\udd53",fitzpatrick_scale:!1,category:"symbols"},clock5:{keywords:["time","late","early","schedule"],"char":"\ud83d\udd54",fitzpatrick_scale:!1,category:"symbols"},clock6:{keywords:["time","late","early","schedule","dawn","dusk"],"char":"\ud83d\udd55",fitzpatrick_scale:!1,category:"symbols"},clock7:{keywords:["time","late","early","schedule"],"char":"\ud83d\udd56",fitzpatrick_scale:!1,category:"symbols"},clock8:{keywords:["time","late","early","schedule"],"char":"\ud83d\udd57",fitzpatrick_scale:!1,category:"symbols"},clock9:{keywords:["time","late","early","schedule"],"char":"\ud83d\udd58",fitzpatrick_scale:!1,category:"symbols"},clock10:{keywords:["time","late","early","schedule"],"char":"\ud83d\udd59",fitzpatrick_scale:!1,category:"symbols"},clock11:{keywords:["time","late","early","schedule"],"char":"\ud83d\udd5a",fitzpatrick_scale:!1,category:"symbols"},clock12:{keywords:["time","noon","midnight","midday","late","early","schedule"],"char":"\ud83d\udd5b",fitzpatrick_scale:!1,category:"symbols"},clock130:{keywords:["time","late","early","schedule"],"char":"\ud83d\udd5c",fitzpatrick_scale:!1,category:"symbols"},clock230:{keywords:["time","late","early","schedule"],"char":"\ud83d\udd5d",fitzpatrick_scale:!1,category:"symbols"},clock330:{keywords:["time","late","early","schedule"],"char":"\ud83d\udd5e",fitzpatrick_scale:!1,category:"symbols"},clock430:{keywords:["time","late","early","schedule"],"char":"\ud83d\udd5f",fitzpatrick_scale:!1,category:"symbols"},clock530:{keywords:["time","late","early","schedule"],"char":"\ud83d\udd60",fitzpatrick_scale:!1,category:"symbols"},clock630:{keywords:["time","late","early","schedule"],"char":"\ud83d\udd61",fitzpatrick_scale:!1,category:"symbols"},clock730:{keywords:["time","late","early","schedule"],"char":"\ud83d\udd62",fitzpatrick_scale:!1,category:"symbols"},clock830:{keywords:["time","late","early","schedule"],"char":"\ud83d\udd63",fitzpatrick_scale:!1,category:"symbols"},clock930:{keywords:["time","late","early","schedule"],"char":"\ud83d\udd64",fitzpatrick_scale:!1,category:"symbols"},clock1030:{keywords:["time","late","early","schedule"],"char":"\ud83d\udd65",fitzpatrick_scale:!1,category:"symbols"},clock1130:{keywords:["time","late","early","schedule"],"char":"\ud83d\udd66",fitzpatrick_scale:!1,category:"symbols"},clock1230:{keywords:["time","late","early","schedule"],"char":"\ud83d\udd67",fitzpatrick_scale:!1,category:"symbols"},afghanistan:{keywords:["af","flag","nation","country","banner"],"char":"\ud83c\udde6\ud83c\uddeb",fitzpatrick_scale:!1,category:"flags"},aland_islands:{keywords:["\xc5land","islands","flag","nation","country","banner"],"char":"\ud83c\udde6\ud83c\uddfd",fitzpatrick_scale:!1,category:"flags"},albania:{keywords:["al","flag","nation","country","banner"],"char":"\ud83c\udde6\ud83c\uddf1",fitzpatrick_scale:!1,category:"flags"},algeria:{keywords:["dz","flag","nation","country","banner"],"char":"\ud83c\udde9\ud83c\uddff",fitzpatrick_scale:!1,category:"flags"},american_samoa:{keywords:["american","ws","flag","nation","country","banner"],"char":"\ud83c\udde6\ud83c\uddf8",fitzpatrick_scale:!1,category:"flags"},andorra:{keywords:["ad","flag","nation","country","banner"],"char":"\ud83c\udde6\ud83c\udde9",fitzpatrick_scale:!1,category:"flags"},angola:{keywords:["ao","flag","nation","country","banner"],"char":"\ud83c\udde6\ud83c\uddf4",fitzpatrick_scale:!1,category:"flags"},anguilla:{keywords:["ai","flag","nation","country","banner"],"char":"\ud83c\udde6\ud83c\uddee",fitzpatrick_scale:!1,category:"flags"},antarctica:{keywords:["aq","flag","nation","country","banner"],"char":"\ud83c\udde6\ud83c\uddf6",fitzpatrick_scale:!1,category:"flags"},antigua_barbuda:{keywords:["antigua","barbuda","flag","nation","country","banner"],"char":"\ud83c\udde6\ud83c\uddec",fitzpatrick_scale:!1,category:"flags"},argentina:{keywords:["ar","flag","nation","country","banner"],"char":"\ud83c\udde6\ud83c\uddf7",fitzpatrick_scale:!1,category:"flags"},armenia:{keywords:["am","flag","nation","country","banner"],"char":"\ud83c\udde6\ud83c\uddf2",fitzpatrick_scale:!1,category:"flags"},aruba:{keywords:["aw","flag","nation","country","banner"],"char":"\ud83c\udde6\ud83c\uddfc",fitzpatrick_scale:!1,category:"flags"},australia:{keywords:["au","flag","nation","country","banner"],"char":"\ud83c\udde6\ud83c\uddfa",fitzpatrick_scale:!1,category:"flags"},austria:{keywords:["at","flag","nation","country","banner"],"char":"\ud83c\udde6\ud83c\uddf9",fitzpatrick_scale:!1,category:"flags"},azerbaijan:{keywords:["az","flag","nation","country","banner"],"char":"\ud83c\udde6\ud83c\uddff",fitzpatrick_scale:!1,category:"flags"},bahamas:{keywords:["bs","flag","nation","country","banner"],"char":"\ud83c\udde7\ud83c\uddf8",fitzpatrick_scale:!1,category:"flags"},bahrain:{keywords:["bh","flag","nation","country","banner"],"char":"\ud83c\udde7\ud83c\udded",fitzpatrick_scale:!1,category:"flags"},bangladesh:{keywords:["bd","flag","nation","country","banner"],"char":"\ud83c\udde7\ud83c\udde9",fitzpatrick_scale:!1,category:"flags"},barbados:{keywords:["bb","flag","nation","country","banner"],"char":"\ud83c\udde7\ud83c\udde7",fitzpatrick_scale:!1,category:"flags"},belarus:{keywords:["by","flag","nation","country","banner"],"char":"\ud83c\udde7\ud83c\uddfe",fitzpatrick_scale:!1,category:"flags"},belgium:{keywords:["be","flag","nation","country","banner"],"char":"\ud83c\udde7\ud83c\uddea",fitzpatrick_scale:!1,category:"flags"},belize:{keywords:["bz","flag","nation","country","banner"],"char":"\ud83c\udde7\ud83c\uddff",fitzpatrick_scale:!1,category:"flags"},benin:{keywords:["bj","flag","nation","country","banner"],"char":"\ud83c\udde7\ud83c\uddef",fitzpatrick_scale:!1,category:"flags"},bermuda:{keywords:["bm","flag","nation","country","banner"],"char":"\ud83c\udde7\ud83c\uddf2",fitzpatrick_scale:!1,category:"flags"},bhutan:{keywords:["bt","flag","nation","country","banner"],"char":"\ud83c\udde7\ud83c\uddf9",fitzpatrick_scale:!1,category:"flags"},bolivia:{keywords:["bo","flag","nation","country","banner"],"char":"\ud83c\udde7\ud83c\uddf4",fitzpatrick_scale:!1,category:"flags"},caribbean_netherlands:{keywords:["bonaire","flag","nation","country","banner"],"char":"\ud83c\udde7\ud83c\uddf6",fitzpatrick_scale:!1,category:"flags"},bosnia_herzegovina:{keywords:["bosnia","herzegovina","flag","nation","country","banner"],"char":"\ud83c\udde7\ud83c\udde6",fitzpatrick_scale:!1,category:"flags"},botswana:{keywords:["bw","flag","nation","country","banner"],"char":"\ud83c\udde7\ud83c\uddfc",fitzpatrick_scale:!1,category:"flags"},brazil:{keywords:["br","flag","nation","country","banner"],"char":"\ud83c\udde7\ud83c\uddf7",fitzpatrick_scale:!1,category:"flags"},british_indian_ocean_territory:{keywords:["british","indian","ocean","territory","flag","nation","country","banner"],"char":"\ud83c\uddee\ud83c\uddf4",fitzpatrick_scale:!1,category:"flags"},british_virgin_islands:{keywords:["british","virgin","islands","bvi","flag","nation","country","banner"],"char":"\ud83c\uddfb\ud83c\uddec",fitzpatrick_scale:!1,category:"flags"},brunei:{keywords:["bn","darussalam","flag","nation","country","banner"],"char":"\ud83c\udde7\ud83c\uddf3",fitzpatrick_scale:!1,category:"flags"},bulgaria:{keywords:["bg","flag","nation","country","banner"],"char":"\ud83c\udde7\ud83c\uddec",fitzpatrick_scale:!1,category:"flags"},burkina_faso:{keywords:["burkina","faso","flag","nation","country","banner"],"char":"\ud83c\udde7\ud83c\uddeb",fitzpatrick_scale:!1,category:"flags"},burundi:{keywords:["bi","flag","nation","country","banner"],"char":"\ud83c\udde7\ud83c\uddee",fitzpatrick_scale:!1,category:"flags"},cape_verde:{keywords:["cabo","verde","flag","nation","country","banner"],"char":"\ud83c\udde8\ud83c\uddfb",fitzpatrick_scale:!1,category:"flags"},cambodia:{keywords:["kh","flag","nation","country","banner"],"char":"\ud83c\uddf0\ud83c\udded",fitzpatrick_scale:!1,category:"flags"},cameroon:{keywords:["cm","flag","nation","country","banner"],"char":"\ud83c\udde8\ud83c\uddf2",fitzpatrick_scale:!1,category:"flags"},canada:{keywords:["ca","flag","nation","country","banner"],"char":"\ud83c\udde8\ud83c\udde6",fitzpatrick_scale:!1,category:"flags"},canary_islands:{keywords:["canary","islands","flag","nation","country","banner"],"char":"\ud83c\uddee\ud83c\udde8",fitzpatrick_scale:!1,category:"flags"},cayman_islands:{keywords:["cayman","islands","flag","nation","country","banner"],"char":"\ud83c\uddf0\ud83c\uddfe",fitzpatrick_scale:!1,category:"flags"},central_african_republic:{keywords:["central","african","republic","flag","nation","country","banner"],"char":"\ud83c\udde8\ud83c\uddeb",fitzpatrick_scale:!1,category:"flags"},chad:{keywords:["td","flag","nation","country","banner"],"char":"\ud83c\uddf9\ud83c\udde9",fitzpatrick_scale:!1,category:"flags"},chile:{keywords:["flag","nation","country","banner"],"char":"\ud83c\udde8\ud83c\uddf1",fitzpatrick_scale:!1,category:"flags"},cn:{keywords:["china","chinese","prc","flag","country","nation","banner"],"char":"\ud83c\udde8\ud83c\uddf3",fitzpatrick_scale:!1,category:"flags"},christmas_island:{keywords:["christmas","island","flag","nation","country","banner"],"char":"\ud83c\udde8\ud83c\uddfd",fitzpatrick_scale:!1,category:"flags"},cocos_islands:{keywords:["cocos","keeling","islands","flag","nation","country","banner"],"char":"\ud83c\udde8\ud83c\udde8",fitzpatrick_scale:!1,category:"flags"},colombia:{keywords:["co","flag","nation","country","banner"],"char":"\ud83c\udde8\ud83c\uddf4",fitzpatrick_scale:!1,category:"flags"},comoros:{keywords:["km","flag","nation","country","banner"],"char":"\ud83c\uddf0\ud83c\uddf2",fitzpatrick_scale:!1,category:"flags"},congo_brazzaville:{keywords:["congo","flag","nation","country","banner"],"char":"\ud83c\udde8\ud83c\uddec",fitzpatrick_scale:!1,category:"flags"},congo_kinshasa:{keywords:["congo","democratic","republic","flag","nation","country","banner"],"char":"\ud83c\udde8\ud83c\udde9",fitzpatrick_scale:!1,category:"flags"},cook_islands:{keywords:["cook","islands","flag","nation","country","banner"],"char":"\ud83c\udde8\ud83c\uddf0",fitzpatrick_scale:!1,category:"flags"},costa_rica:{keywords:["costa","rica","flag","nation","country","banner"],"char":"\ud83c\udde8\ud83c\uddf7",fitzpatrick_scale:!1,category:"flags"},croatia:{keywords:["hr","flag","nation","country","banner"],"char":"\ud83c\udded\ud83c\uddf7",fitzpatrick_scale:!1,category:"flags"},cuba:{keywords:["cu","flag","nation","country","banner"],"char":"\ud83c\udde8\ud83c\uddfa",fitzpatrick_scale:!1,category:"flags"},curacao:{keywords:["cura\xe7ao","flag","nation","country","banner"],"char":"\ud83c\udde8\ud83c\uddfc",fitzpatrick_scale:!1,category:"flags"},cyprus:{keywords:["cy","flag","nation","country","banner"],"char":"\ud83c\udde8\ud83c\uddfe",fitzpatrick_scale:!1,category:"flags"},czech_republic:{keywords:["cz","flag","nation","country","banner"],"char":"\ud83c\udde8\ud83c\uddff",fitzpatrick_scale:!1,category:"flags"},denmark:{keywords:["dk","flag","nation","country","banner"],"char":"\ud83c\udde9\ud83c\uddf0",fitzpatrick_scale:!1,category:"flags"},djibouti:{keywords:["dj","flag","nation","country","banner"],"char":"\ud83c\udde9\ud83c\uddef",fitzpatrick_scale:!1,category:"flags"},dominica:{keywords:["dm","flag","nation","country","banner"],"char":"\ud83c\udde9\ud83c\uddf2",fitzpatrick_scale:!1,category:"flags"},dominican_republic:{keywords:["dominican","republic","flag","nation","country","banner"],"char":"\ud83c\udde9\ud83c\uddf4",fitzpatrick_scale:!1,category:"flags"},ecuador:{keywords:["ec","flag","nation","country","banner"],"char":"\ud83c\uddea\ud83c\udde8",fitzpatrick_scale:!1,category:"flags"},egypt:{keywords:["eg","flag","nation","country","banner"],"char":"\ud83c\uddea\ud83c\uddec",fitzpatrick_scale:!1,category:"flags"},el_salvador:{keywords:["el","salvador","flag","nation","country","banner"],"char":"\ud83c\uddf8\ud83c\uddfb",fitzpatrick_scale:!1,category:"flags"},equatorial_guinea:{keywords:["equatorial","gn","flag","nation","country","banner"],"char":"\ud83c\uddec\ud83c\uddf6",fitzpatrick_scale:!1,category:"flags"},eritrea:{keywords:["er","flag","nation","country","banner"],"char":"\ud83c\uddea\ud83c\uddf7",fitzpatrick_scale:!1,category:"flags"},estonia:{keywords:["ee","flag","nation","country","banner"],"char":"\ud83c\uddea\ud83c\uddea",fitzpatrick_scale:!1,category:"flags"},ethiopia:{keywords:["et","flag","nation","country","banner"],"char":"\ud83c\uddea\ud83c\uddf9",fitzpatrick_scale:!1,category:"flags"},eu:{keywords:["european","union","flag","banner"],"char":"\ud83c\uddea\ud83c\uddfa",fitzpatrick_scale:!1,category:"flags"},falkland_islands:{keywords:["falkland","islands","malvinas","flag","nation","country","banner"],"char":"\ud83c\uddeb\ud83c\uddf0",fitzpatrick_scale:!1,category:"flags"},faroe_islands:{keywords:["faroe","islands","flag","nation","country","banner"],"char":"\ud83c\uddeb\ud83c\uddf4",fitzpatrick_scale:!1,category:"flags"},fiji:{keywords:["fj","flag","nation","country","banner"],"char":"\ud83c\uddeb\ud83c\uddef",fitzpatrick_scale:!1,category:"flags"},finland:{keywords:["fi","flag","nation","country","banner"],"char":"\ud83c\uddeb\ud83c\uddee",fitzpatrick_scale:!1,category:"flags"},fr:{keywords:["banner","flag","nation","france","french","country"],"char":"\ud83c\uddeb\ud83c\uddf7",fitzpatrick_scale:!1,category:"flags"},french_guiana:{keywords:["french","guiana","flag","nation","country","banner"],"char":"\ud83c\uddec\ud83c\uddeb",fitzpatrick_scale:!1,category:"flags"},french_polynesia:{keywords:["french","polynesia","flag","nation","country","banner"],"char":"\ud83c\uddf5\ud83c\uddeb",fitzpatrick_scale:!1,category:"flags"},french_southern_territories:{keywords:["french","southern","territories","flag","nation","country","banner"],"char":"\ud83c\uddf9\ud83c\uddeb",fitzpatrick_scale:!1,category:"flags"},gabon:{keywords:["ga","flag","nation","country","banner"],"char":"\ud83c\uddec\ud83c\udde6",fitzpatrick_scale:!1,category:"flags"},gambia:{keywords:["gm","flag","nation","country","banner"],"char":"\ud83c\uddec\ud83c\uddf2",fitzpatrick_scale:!1,category:"flags"},georgia:{keywords:["ge","flag","nation","country","banner"],"char":"\ud83c\uddec\ud83c\uddea",fitzpatrick_scale:!1,category:"flags"},de:{keywords:["german","nation","flag","country","banner"],"char":"\ud83c\udde9\ud83c\uddea",fitzpatrick_scale:!1,category:"flags"},ghana:{keywords:["gh","flag","nation","country","banner"],"char":"\ud83c\uddec\ud83c\udded",fitzpatrick_scale:!1,category:"flags"},gibraltar:{keywords:["gi","flag","nation","country","banner"],"char":"\ud83c\uddec\ud83c\uddee",fitzpatrick_scale:!1,category:"flags"},greece:{keywords:["gr","flag","nation","country","banner"],"char":"\ud83c\uddec\ud83c\uddf7",fitzpatrick_scale:!1,category:"flags"},greenland:{keywords:["gl","flag","nation","country","banner"],"char":"\ud83c\uddec\ud83c\uddf1",fitzpatrick_scale:!1,category:"flags"},grenada:{keywords:["gd","flag","nation","country","banner"],"char":"\ud83c\uddec\ud83c\udde9",fitzpatrick_scale:!1,category:"flags"},guadeloupe:{keywords:["gp","flag","nation","country","banner"],"char":"\ud83c\uddec\ud83c\uddf5",fitzpatrick_scale:!1,category:"flags"},guam:{keywords:["gu","flag","nation","country","banner"],"char":"\ud83c\uddec\ud83c\uddfa",fitzpatrick_scale:!1,category:"flags"},guatemala:{keywords:["gt","flag","nation","country","banner"],"char":"\ud83c\uddec\ud83c\uddf9",fitzpatrick_scale:!1,category:"flags"},guernsey:{keywords:["gg","flag","nation","country","banner"],"char":"\ud83c\uddec\ud83c\uddec",fitzpatrick_scale:!1,category:"flags"},guinea:{keywords:["gn","flag","nation","country","banner"],"char":"\ud83c\uddec\ud83c\uddf3",fitzpatrick_scale:!1,category:"flags"},guinea_bissau:{keywords:["gw","bissau","flag","nation","country","banner"],"char":"\ud83c\uddec\ud83c\uddfc",fitzpatrick_scale:!1,category:"flags"},guyana:{keywords:["gy","flag","nation","country","banner"],"char":"\ud83c\uddec\ud83c\uddfe",fitzpatrick_scale:!1,category:"flags"},haiti:{keywords:["ht","flag","nation","country","banner"],"char":"\ud83c\udded\ud83c\uddf9",fitzpatrick_scale:!1,category:"flags"},honduras:{keywords:["hn","flag","nation","country","banner"],"char":"\ud83c\udded\ud83c\uddf3",fitzpatrick_scale:!1,category:"flags"},hong_kong:{keywords:["hong","kong","flag","nation","country","banner"],"char":"\ud83c\udded\ud83c\uddf0",fitzpatrick_scale:!1,category:"flags"},hungary:{keywords:["hu","flag","nation","country","banner"],"char":"\ud83c\udded\ud83c\uddfa",fitzpatrick_scale:!1,category:"flags"},iceland:{keywords:["is","flag","nation","country","banner"],"char":"\ud83c\uddee\ud83c\uddf8",fitzpatrick_scale:!1,category:"flags"},india:{keywords:["in","flag","nation","country","banner"],"char":"\ud83c\uddee\ud83c\uddf3",fitzpatrick_scale:!1,category:"flags"},indonesia:{keywords:["flag","nation","country","banner"],"char":"\ud83c\uddee\ud83c\udde9",fitzpatrick_scale:!1,category:"flags"},iran:{keywords:["iran,","islamic","republic","flag","nation","country","banner"],"char":"\ud83c\uddee\ud83c\uddf7",fitzpatrick_scale:!1,category:"flags"},iraq:{keywords:["iq","flag","nation","country","banner"],"char":"\ud83c\uddee\ud83c\uddf6",fitzpatrick_scale:!1,category:"flags"},ireland:{keywords:["ie","flag","nation","country","banner"],"char":"\ud83c\uddee\ud83c\uddea",fitzpatrick_scale:!1,category:"flags"},isle_of_man:{keywords:["isle","man","flag","nation","country","banner"],"char":"\ud83c\uddee\ud83c\uddf2",fitzpatrick_scale:!1,category:"flags"},israel:{keywords:["il","flag","nation","country","banner"],"char":"\ud83c\uddee\ud83c\uddf1",fitzpatrick_scale:!1,category:"flags"},it:{keywords:["italy","flag","nation","country","banner"],"char":"\ud83c\uddee\ud83c\uddf9",fitzpatrick_scale:!1,category:"flags"},cote_divoire:{keywords:["ivory","coast","flag","nation","country","banner"],"char":"\ud83c\udde8\ud83c\uddee",fitzpatrick_scale:!1,category:"flags"},jamaica:{keywords:["jm","flag","nation","country","banner"],"char":"\ud83c\uddef\ud83c\uddf2",fitzpatrick_scale:!1,category:"flags"},jp:{keywords:["japanese","nation","flag","country","banner"],"char":"\ud83c\uddef\ud83c\uddf5",fitzpatrick_scale:!1,category:"flags"},jersey:{keywords:["je","flag","nation","country","banner"],"char":"\ud83c\uddef\ud83c\uddea",fitzpatrick_scale:!1,category:"flags"},jordan:{keywords:["jo","flag","nation","country","banner"],"char":"\ud83c\uddef\ud83c\uddf4",fitzpatrick_scale:!1,category:"flags"},kazakhstan:{keywords:["kz","flag","nation","country","banner"],"char":"\ud83c\uddf0\ud83c\uddff",fitzpatrick_scale:!1,category:"flags"},kenya:{keywords:["ke","flag","nation","country","banner"],"char":"\ud83c\uddf0\ud83c\uddea",fitzpatrick_scale:!1,category:"flags"},kiribati:{keywords:["ki","flag","nation","country","banner"],"char":"\ud83c\uddf0\ud83c\uddee",fitzpatrick_scale:!1,category:"flags"},kosovo:{keywords:["xk","flag","nation","country","banner"],"char":"\ud83c\uddfd\ud83c\uddf0",fitzpatrick_scale:!1,category:"flags"},kuwait:{keywords:["kw","flag","nation","country","banner"],"char":"\ud83c\uddf0\ud83c\uddfc",fitzpatrick_scale:!1,category:"flags"},kyrgyzstan:{keywords:["kg","flag","nation","country","banner"],"char":"\ud83c\uddf0\ud83c\uddec",fitzpatrick_scale:!1,category:"flags"},laos:{keywords:["lao","democratic","republic","flag","nation","country","banner"],"char":"\ud83c\uddf1\ud83c\udde6",fitzpatrick_scale:!1,category:"flags"},latvia:{keywords:["lv","flag","nation","country","banner"],"char":"\ud83c\uddf1\ud83c\uddfb",fitzpatrick_scale:!1,category:"flags"},lebanon:{keywords:["lb","flag","nation","country","banner"],"char":"\ud83c\uddf1\ud83c\udde7",fitzpatrick_scale:!1,category:"flags"},lesotho:{keywords:["ls","flag","nation","country","banner"],"char":"\ud83c\uddf1\ud83c\uddf8",fitzpatrick_scale:!1,category:"flags"},liberia:{keywords:["lr","flag","nation","country","banner"],"char":"\ud83c\uddf1\ud83c\uddf7",fitzpatrick_scale:!1,category:"flags"},libya:{keywords:["ly","flag","nation","country","banner"],"char":"\ud83c\uddf1\ud83c\uddfe",fitzpatrick_scale:!1,category:"flags"},liechtenstein:{keywords:["li","flag","nation","country","banner"],"char":"\ud83c\uddf1\ud83c\uddee",fitzpatrick_scale:!1,category:"flags"},lithuania:{keywords:["lt","flag","nation","country","banner"],"char":"\ud83c\uddf1\ud83c\uddf9",fitzpatrick_scale:!1,category:"flags"},luxembourg:{keywords:["lu","flag","nation","country","banner"],"char":"\ud83c\uddf1\ud83c\uddfa",fitzpatrick_scale:!1,category:"flags"},macau:{keywords:["macao","flag","nation","country","banner"],"char":"\ud83c\uddf2\ud83c\uddf4",fitzpatrick_scale:!1,category:"flags"},macedonia:{keywords:["macedonia,","flag","nation","country","banner"],"char":"\ud83c\uddf2\ud83c\uddf0",fitzpatrick_scale:!1,category:"flags"},madagascar:{keywords:["mg","flag","nation","country","banner"],"char":"\ud83c\uddf2\ud83c\uddec",fitzpatrick_scale:!1,category:"flags"},malawi:{keywords:["mw","flag","nation","country","banner"],"char":"\ud83c\uddf2\ud83c\uddfc",fitzpatrick_scale:!1,category:"flags"},malaysia:{keywords:["my","flag","nation","country","banner"],"char":"\ud83c\uddf2\ud83c\uddfe",fitzpatrick_scale:!1,category:"flags"},maldives:{keywords:["mv","flag","nation","country","banner"],"char":"\ud83c\uddf2\ud83c\uddfb",fitzpatrick_scale:!1,category:"flags"},mali:{keywords:["ml","flag","nation","country","banner"],"char":"\ud83c\uddf2\ud83c\uddf1",fitzpatrick_scale:!1,category:"flags"},malta:{keywords:["mt","flag","nation","country","banner"],"char":"\ud83c\uddf2\ud83c\uddf9",fitzpatrick_scale:!1,category:"flags"},marshall_islands:{keywords:["marshall","islands","flag","nation","country","banner"],"char":"\ud83c\uddf2\ud83c\udded",fitzpatrick_scale:!1,category:"flags"},martinique:{keywords:["mq","flag","nation","country","banner"],"char":"\ud83c\uddf2\ud83c\uddf6",fitzpatrick_scale:!1,category:"flags"},mauritania:{keywords:["mr","flag","nation","country","banner"],"char":"\ud83c\uddf2\ud83c\uddf7",fitzpatrick_scale:!1,category:"flags"},mauritius:{keywords:["mu","flag","nation","country","banner"],"char":"\ud83c\uddf2\ud83c\uddfa",fitzpatrick_scale:!1,category:"flags"},mayotte:{keywords:["yt","flag","nation","country","banner"],"char":"\ud83c\uddfe\ud83c\uddf9",fitzpatrick_scale:!1,category:"flags"},mexico:{keywords:["mx","flag","nation","country","banner"],"char":"\ud83c\uddf2\ud83c\uddfd",fitzpatrick_scale:!1,category:"flags"},micronesia:{keywords:["micronesia,","federated","states","flag","nation","country","banner"],"char":"\ud83c\uddeb\ud83c\uddf2",fitzpatrick_scale:!1,category:"flags"},moldova:{keywords:["moldova,","republic","flag","nation","country","banner"],"char":"\ud83c\uddf2\ud83c\udde9",fitzpatrick_scale:!1,category:"flags"},monaco:{keywords:["mc","flag","nation","country","banner"],"char":"\ud83c\uddf2\ud83c\udde8",fitzpatrick_scale:!1,category:"flags"},mongolia:{keywords:["mn","flag","nation","country","banner"],"char":"\ud83c\uddf2\ud83c\uddf3",fitzpatrick_scale:!1,category:"flags"},montenegro:{keywords:["me","flag","nation","country","banner"],"char":"\ud83c\uddf2\ud83c\uddea",fitzpatrick_scale:!1,category:"flags"},montserrat:{keywords:["ms","flag","nation","country","banner"],"char":"\ud83c\uddf2\ud83c\uddf8",fitzpatrick_scale:!1,category:"flags"},morocco:{keywords:["ma","flag","nation","country","banner"],"char":"\ud83c\uddf2\ud83c\udde6",fitzpatrick_scale:!1,category:"flags"},mozambique:{keywords:["mz","flag","nation","country","banner"],"char":"\ud83c\uddf2\ud83c\uddff",fitzpatrick_scale:!1,category:"flags"},myanmar:{keywords:["mm","flag","nation","country","banner"],"char":"\ud83c\uddf2\ud83c\uddf2",fitzpatrick_scale:!1,category:"flags"},namibia:{keywords:["na","flag","nation","country","banner"],"char":"\ud83c\uddf3\ud83c\udde6",fitzpatrick_scale:!1,category:"flags"},nauru:{keywords:["nr","flag","nation","country","banner"],"char":"\ud83c\uddf3\ud83c\uddf7",fitzpatrick_scale:!1,category:"flags"},nepal:{keywords:["np","flag","nation","country","banner"],"char":"\ud83c\uddf3\ud83c\uddf5",fitzpatrick_scale:!1,category:"flags"},netherlands:{keywords:["nl","flag","nation","country","banner"],"char":"\ud83c\uddf3\ud83c\uddf1",fitzpatrick_scale:!1,category:"flags"},new_caledonia:{keywords:["new","caledonia","flag","nation","country","banner"],"char":"\ud83c\uddf3\ud83c\udde8",fitzpatrick_scale:!1,category:"flags"},new_zealand:{keywords:["new","zealand","flag","nation","country","banner"],"char":"\ud83c\uddf3\ud83c\uddff",fitzpatrick_scale:!1,category:"flags"},nicaragua:{keywords:["ni","flag","nation","country","banner"],"char":"\ud83c\uddf3\ud83c\uddee",fitzpatrick_scale:!1,category:"flags"},niger:{keywords:["ne","flag","nation","country","banner"],"char":"\ud83c\uddf3\ud83c\uddea",fitzpatrick_scale:!1,category:"flags"},nigeria:{keywords:["flag","nation","country","banner"],"char":"\ud83c\uddf3\ud83c\uddec",fitzpatrick_scale:!1,category:"flags"},niue:{keywords:["nu","flag","nation","country","banner"],"char":"\ud83c\uddf3\ud83c\uddfa",fitzpatrick_scale:!1,category:"flags"},norfolk_island:{keywords:["norfolk","island","flag","nation","country","banner"],"char":"\ud83c\uddf3\ud83c\uddeb",fitzpatrick_scale:!1,category:"flags"},northern_mariana_islands:{keywords:["northern","mariana","islands","flag","nation","country","banner"],"char":"\ud83c\uddf2\ud83c\uddf5",fitzpatrick_scale:!1,category:"flags"},north_korea:{keywords:["north","korea","nation","flag","country","banner"],"char":"\ud83c\uddf0\ud83c\uddf5",fitzpatrick_scale:!1,category:"flags"},norway:{keywords:["no","flag","nation","country","banner"],"char":"\ud83c\uddf3\ud83c\uddf4",fitzpatrick_scale:!1,category:"flags"},oman:{keywords:["om_symbol","flag","nation","country","banner"],"char":"\ud83c\uddf4\ud83c\uddf2",fitzpatrick_scale:!1,category:"flags"},pakistan:{keywords:["pk","flag","nation","country","banner"],"char":"\ud83c\uddf5\ud83c\uddf0",fitzpatrick_scale:!1,category:"flags"},palau:{keywords:["pw","flag","nation","country","banner"],"char":"\ud83c\uddf5\ud83c\uddfc",fitzpatrick_scale:!1,category:"flags"},palestinian_territories:{keywords:["palestine","palestinian","territories","flag","nation","country","banner"],"char":"\ud83c\uddf5\ud83c\uddf8",fitzpatrick_scale:!1,category:"flags"},panama:{keywords:["pa","flag","nation","country","banner"],"char":"\ud83c\uddf5\ud83c\udde6",fitzpatrick_scale:!1,category:"flags"},papua_new_guinea:{keywords:["papua","new","guinea","flag","nation","country","banner"],"char":"\ud83c\uddf5\ud83c\uddec",fitzpatrick_scale:!1,category:"flags"},paraguay:{keywords:["py","flag","nation","country","banner"],"char":"\ud83c\uddf5\ud83c\uddfe",fitzpatrick_scale:!1,category:"flags"},peru:{keywords:["pe","flag","nation","country","banner"],"char":"\ud83c\uddf5\ud83c\uddea",fitzpatrick_scale:!1,category:"flags"},philippines:{keywords:["ph","flag","nation","country","banner"],"char":"\ud83c\uddf5\ud83c\udded",fitzpatrick_scale:!1,category:"flags"},pitcairn_islands:{keywords:["pitcairn","flag","nation","country","banner"],"char":"\ud83c\uddf5\ud83c\uddf3",fitzpatrick_scale:!1,category:"flags"},poland:{keywords:["pl","flag","nation","country","banner"],"char":"\ud83c\uddf5\ud83c\uddf1",fitzpatrick_scale:!1,category:"flags"},portugal:{keywords:["pt","flag","nation","country","banner"],"char":"\ud83c\uddf5\ud83c\uddf9",fitzpatrick_scale:!1,category:"flags"},puerto_rico:{keywords:["puerto","rico","flag","nation","country","banner"],"char":"\ud83c\uddf5\ud83c\uddf7",fitzpatrick_scale:!1,category:"flags"},qatar:{keywords:["qa","flag","nation","country","banner"],"char":"\ud83c\uddf6\ud83c\udde6",fitzpatrick_scale:!1,category:"flags"},reunion:{keywords:["r\xe9union","flag","nation","country","banner"],"char":"\ud83c\uddf7\ud83c\uddea",fitzpatrick_scale:!1,category:"flags"},romania:{keywords:["ro","flag","nation","country","banner"],"char":"\ud83c\uddf7\ud83c\uddf4",fitzpatrick_scale:!1,category:"flags"},ru:{keywords:["russian","federation","flag","nation","country","banner"],"char":"\ud83c\uddf7\ud83c\uddfa",fitzpatrick_scale:!1,category:"flags"},rwanda:{keywords:["rw","flag","nation","country","banner"],"char":"\ud83c\uddf7\ud83c\uddfc",fitzpatrick_scale:!1,category:"flags"},st_barthelemy:{keywords:["saint","barth\xe9lemy","flag","nation","country","banner"],"char":"\ud83c\udde7\ud83c\uddf1",fitzpatrick_scale:!1,category:"flags"},st_helena:{keywords:["saint","helena","ascension","tristan","cunha","flag","nation","country","banner"],"char":"\ud83c\uddf8\ud83c\udded",fitzpatrick_scale:!1,category:"flags"},st_kitts_nevis:{keywords:["saint","kitts","nevis","flag","nation","country","banner"],"char":"\ud83c\uddf0\ud83c\uddf3",fitzpatrick_scale:!1,category:"flags"},st_lucia:{keywords:["saint","lucia","flag","nation","country","banner"],"char":"\ud83c\uddf1\ud83c\udde8",fitzpatrick_scale:!1,category:"flags"},st_pierre_miquelon:{keywords:["saint","pierre","miquelon","flag","nation","country","banner"],"char":"\ud83c\uddf5\ud83c\uddf2",fitzpatrick_scale:!1,category:"flags"},st_vincent_grenadines:{keywords:["saint","vincent","grenadines","flag","nation","country","banner"],"char":"\ud83c\uddfb\ud83c\udde8",fitzpatrick_scale:!1,category:"flags"},samoa:{keywords:["ws","flag","nation","country","banner"],"char":"\ud83c\uddfc\ud83c\uddf8",fitzpatrick_scale:!1,category:"flags"},san_marino:{keywords:["san","marino","flag","nation","country","banner"],"char":"\ud83c\uddf8\ud83c\uddf2",fitzpatrick_scale:!1,category:"flags"},sao_tome_principe:{keywords:["sao","tome","principe","flag","nation","country","banner"],"char":"\ud83c\uddf8\ud83c\uddf9",fitzpatrick_scale:!1,category:"flags"},saudi_arabia:{keywords:["flag","nation","country","banner"],"char":"\ud83c\uddf8\ud83c\udde6",fitzpatrick_scale:!1,category:"flags"},senegal:{keywords:["sn","flag","nation","country","banner"],"char":"\ud83c\uddf8\ud83c\uddf3",fitzpatrick_scale:!1,category:"flags"},serbia:{keywords:["rs","flag","nation","country","banner"],"char":"\ud83c\uddf7\ud83c\uddf8",fitzpatrick_scale:!1,category:"flags"},seychelles:{keywords:["sc","flag","nation","country","banner"],"char":"\ud83c\uddf8\ud83c\udde8",fitzpatrick_scale:!1,category:"flags"},sierra_leone:{keywords:["sierra","leone","flag","nation","country","banner"],"char":"\ud83c\uddf8\ud83c\uddf1",fitzpatrick_scale:!1,category:"flags"},singapore:{keywords:["sg","flag","nation","country","banner"],"char":"\ud83c\uddf8\ud83c\uddec",fitzpatrick_scale:!1,category:"flags"},sint_maarten:{keywords:["sint","maarten","dutch","flag","nation","country","banner"],"char":"\ud83c\uddf8\ud83c\uddfd",fitzpatrick_scale:!1,category:"flags"},slovakia:{keywords:["sk","flag","nation","country","banner"],"char":"\ud83c\uddf8\ud83c\uddf0",fitzpatrick_scale:!1,category:"flags"},slovenia:{keywords:["si","flag","nation","country","banner"],"char":"\ud83c\uddf8\ud83c\uddee",fitzpatrick_scale:!1,category:"flags"},solomon_islands:{keywords:["solomon","islands","flag","nation","country","banner"],"char":"\ud83c\uddf8\ud83c\udde7",fitzpatrick_scale:!1,category:"flags"},somalia:{keywords:["so","flag","nation","country","banner"],"char":"\ud83c\uddf8\ud83c\uddf4",fitzpatrick_scale:!1,category:"flags"},south_africa:{keywords:["south","africa","flag","nation","country","banner"],"char":"\ud83c\uddff\ud83c\udde6",fitzpatrick_scale:!1,category:"flags"},south_georgia_south_sandwich_islands:{keywords:["south","georgia","sandwich","islands","flag","nation","country","banner"],"char":"\ud83c\uddec\ud83c\uddf8",fitzpatrick_scale:!1,category:"flags"},kr:{keywords:["south","korea","nation","flag","country","banner"],"char":"\ud83c\uddf0\ud83c\uddf7",fitzpatrick_scale:!1,category:"flags"},south_sudan:{keywords:["south","sd","flag","nation","country","banner"],"char":"\ud83c\uddf8\ud83c\uddf8",fitzpatrick_scale:!1,category:"flags"},es:{keywords:["spain","flag","nation","country","banner"],"char":"\ud83c\uddea\ud83c\uddf8",fitzpatrick_scale:!1,category:"flags"},sri_lanka:{keywords:["sri","lanka","flag","nation","country","banner"],"char":"\ud83c\uddf1\ud83c\uddf0",fitzpatrick_scale:!1,category:"flags"},sudan:{keywords:["sd","flag","nation","country","banner"],"char":"\ud83c\uddf8\ud83c\udde9",fitzpatrick_scale:!1,category:"flags"},suriname:{keywords:["sr","flag","nation","country","banner"],"char":"\ud83c\uddf8\ud83c\uddf7",fitzpatrick_scale:!1,category:"flags"},swaziland:{keywords:["sz","flag","nation","country","banner"],"char":"\ud83c\uddf8\ud83c\uddff",fitzpatrick_scale:!1,category:"flags"},sweden:{keywords:["se","flag","nation","country","banner"],"char":"\ud83c\uddf8\ud83c\uddea",fitzpatrick_scale:!1,category:"flags"},switzerland:{keywords:["ch","flag","nation","country","banner"],"char":"\ud83c\udde8\ud83c\udded",fitzpatrick_scale:!1,category:"flags"},syria:{keywords:["syrian","arab","republic","flag","nation","country","banner"],"char":"\ud83c\uddf8\ud83c\uddfe",fitzpatrick_scale:!1,category:"flags"},taiwan:{keywords:["tw","flag","nation","country","banner"],"char":"\ud83c\uddf9\ud83c\uddfc",fitzpatrick_scale:!1,category:"flags"},tajikistan:{keywords:["tj","flag","nation","country","banner"],"char":"\ud83c\uddf9\ud83c\uddef",fitzpatrick_scale:!1,category:"flags"},tanzania:{keywords:["tanzania,","united","republic","flag","nation","country","banner"],"char":"\ud83c\uddf9\ud83c\uddff",fitzpatrick_scale:!1,category:"flags"},thailand:{keywords:["th","flag","nation","country","banner"],"char":"\ud83c\uddf9\ud83c\udded",fitzpatrick_scale:!1,category:"flags"},timor_leste:{keywords:["timor","leste","flag","nation","country","banner"],"char":"\ud83c\uddf9\ud83c\uddf1",fitzpatrick_scale:!1,category:"flags"},togo:{keywords:["tg","flag","nation","country","banner"],"char":"\ud83c\uddf9\ud83c\uddec",fitzpatrick_scale:!1,category:"flags"},tokelau:{keywords:["tk","flag","nation","country","banner"],"char":"\ud83c\uddf9\ud83c\uddf0",fitzpatrick_scale:!1,category:"flags"},tonga:{keywords:["to","flag","nation","country","banner"],"char":"\ud83c\uddf9\ud83c\uddf4",fitzpatrick_scale:!1,category:"flags"},trinidad_tobago:{keywords:["trinidad","tobago","flag","nation","country","banner"],"char":"\ud83c\uddf9\ud83c\uddf9",fitzpatrick_scale:!1,category:"flags"},tunisia:{keywords:["tn","flag","nation","country","banner"],"char":"\ud83c\uddf9\ud83c\uddf3",fitzpatrick_scale:!1,category:"flags"},tr:{keywords:["turkey","flag","nation","country","banner"],"char":"\ud83c\uddf9\ud83c\uddf7",fitzpatrick_scale:!1,category:"flags"},turkmenistan:{keywords:["flag","nation","country","banner"],"char":"\ud83c\uddf9\ud83c\uddf2",fitzpatrick_scale:!1,category:"flags"},turks_caicos_islands:{keywords:["turks","caicos","islands","flag","nation","country","banner"],"char":"\ud83c\uddf9\ud83c\udde8",fitzpatrick_scale:!1,category:"flags"},tuvalu:{keywords:["flag","nation","country","banner"],"char":"\ud83c\uddf9\ud83c\uddfb",fitzpatrick_scale:!1,category:"flags"},uganda:{keywords:["ug","flag","nation","country","banner"],"char":"\ud83c\uddfa\ud83c\uddec",fitzpatrick_scale:!1,category:"flags"},ukraine:{keywords:["ua","flag","nation","country","banner"],"char":"\ud83c\uddfa\ud83c\udde6",fitzpatrick_scale:!1,category:"flags"},united_arab_emirates:{keywords:["united","arab","emirates","flag","nation","country","banner"],"char":"\ud83c\udde6\ud83c\uddea",fitzpatrick_scale:!1,category:"flags"},uk:{keywords:["united","kingdom","great","britain","northern","ireland","flag","nation","country","banner","british","UK","english","england","union jack"],"char":"\ud83c\uddec\ud83c\udde7",fitzpatrick_scale:!1,category:"flags"},england:{keywords:["flag","english"],"char":"\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc65\udb40\udc6e\udb40\udc67\udb40\udc7f",fitzpatrick_scale:!1,category:"flags"},scotland:{keywords:["flag","scottish"],"char":"\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc73\udb40\udc63\udb40\udc74\udb40\udc7f",fitzpatrick_scale:!1,category:"flags"},wales:{keywords:["flag","welsh"],"char":"\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc77\udb40\udc6c\udb40\udc73\udb40\udc7f",fitzpatrick_scale:!1,category:"flags"},us:{keywords:["united","states","america","flag","nation","country","banner"],"char":"\ud83c\uddfa\ud83c\uddf8",fitzpatrick_scale:!1,category:"flags"},us_virgin_islands:{keywords:["virgin","islands","us","flag","nation","country","banner"],"char":"\ud83c\uddfb\ud83c\uddee",fitzpatrick_scale:!1,category:"flags"},uruguay:{keywords:["uy","flag","nation","country","banner"],"char":"\ud83c\uddfa\ud83c\uddfe",fitzpatrick_scale:!1,category:"flags"},uzbekistan:{keywords:["uz","flag","nation","country","banner"],"char":"\ud83c\uddfa\ud83c\uddff",fitzpatrick_scale:!1,category:"flags"},vanuatu:{keywords:["vu","flag","nation","country","banner"],"char":"\ud83c\uddfb\ud83c\uddfa",fitzpatrick_scale:!1,category:"flags"},vatican_city:{keywords:["vatican","city","flag","nation","country","banner"],"char":"\ud83c\uddfb\ud83c\udde6",fitzpatrick_scale:!1,category:"flags"},venezuela:{keywords:["ve","bolivarian","republic","flag","nation","country","banner"],"char":"\ud83c\uddfb\ud83c\uddea",fitzpatrick_scale:!1,category:"flags"},vietnam:{keywords:["viet","nam","flag","nation","country","banner"],"char":"\ud83c\uddfb\ud83c\uddf3",fitzpatrick_scale:!1,category:"flags"},wallis_futuna:{keywords:["wallis","futuna","flag","nation","country","banner"],"char":"\ud83c\uddfc\ud83c\uddeb",fitzpatrick_scale:!1,category:"flags"},western_sahara:{keywords:["western","sahara","flag","nation","country","banner"],"char":"\ud83c\uddea\ud83c\udded",fitzpatrick_scale:!1,category:"flags"},yemen:{keywords:["ye","flag","nation","country","banner"],"char":"\ud83c\uddfe\ud83c\uddea",fitzpatrick_scale:!1,category:"flags"},zambia:{keywords:["zm","flag","nation","country","banner"],"char":"\ud83c\uddff\ud83c\uddf2",fitzpatrick_scale:!1,category:"flags"},zimbabwe:{keywords:["zw","flag","nation","country","banner"],"char":"\ud83c\uddff\ud83c\uddfc",fitzpatrick_scale:!1,category:"flags"}});
\ No newline at end of file
diff --git a/website/js/vendor/tinymce/js/tinymce/plugins/emoticons/plugin.min.js b/website/js/vendor/tinymce/js/tinymce/plugins/emoticons/plugin.min.js
new file mode 100644 (file)
index 0000000..20630dc
--- /dev/null
@@ -0,0 +1,9 @@
+/**
+ * Copyright (c) Tiny Technologies, Inc. All rights reserved.
+ * Licensed under the LGPL or a commercial license.
+ * For LGPL see License.txt in the project root for license information.
+ * For commercial licenses see https://www.tiny.cloud/
+ *
+ * Version: 5.1.5 (2019-12-19)
+ */
+!function(l){"use strict";function n(){}function i(n){return function(){return n}}function t(){return a}var e,r=tinymce.util.Tools.resolve("tinymce.PluginManager"),c=i(!1),u=i(!0),a=(e={fold:function(n,t){return n()},is:c,isSome:c,isNone:u,getOr:f,getOrThunk:s,getOrDie:function(n){throw new Error(n||"error: getOrDie called on none.")},getOrNull:i(null),getOrUndefined:i(undefined),or:f,orThunk:s,map:t,each:n,bind:t,exists:c,forall:u,filter:t,equals:o,equals_:o,toArray:function(){return[]},toString:i("none()")},Object.freeze&&Object.freeze(e),e);function o(n){return n.isNone()}function s(n){return n()}function f(n){return n}function m(n,t){return-1!==n.indexOf(t)}function g(n,t){return m(n.title.toLowerCase(),t)||function(n,t){for(var e=0,r=n.length;e<r;e++){if(t(n[e],e))return!0}return!1}(n.keywords,function(n){return m(n.toLowerCase(),t)})}function d(n,t,e){for(var r=[],o=t.toLowerCase(),i=e.fold(function(){return c},function(t){return function(n){return t<=n}}),u=0;u<n.length&&(0!==t.length&&!g(n[u],o)||(r.push({value:n[u]["char"],text:n[u].title,icon:n[u]["char"]}),!i(r.length)));u++);return r}function y(n,t){for(var e=P(n),r=0,o=e.length;r<o;r++){var i=e[r];t(n[i],i)}}function p(n,t){return function(n,t){return D.call(n,t)}(n,t)?n[t]:t}function v(n){return function(n,e){return S(n,function(n,t){return{k:t,v:e(n,t)}})}(q(n),function(n){return _({keywords:[],category:"user"},n)})}function h(e,o,n){var r=k(A.none()),u=k(A.none());e.on("init",function(){x.load(n,o).then(function(n){var t=v(e);!function(n){var o={},i=[];y(n,function(n,t){var e={title:t,keywords:n.keywords,"char":n["char"],category:p(I,n.category)},r=o[e.category]!==undefined?o[e.category]:[];o[e.category]=r.concat([e]),i.push(e)}),r.set(A.some(o)),u.set(A.some(i))}(_(n,t))},function(n){l.console.log("Failed to load emoticons: "+n),r.set(A.some({})),u.set(A.some([]))})});var i=function(){return u.get().getOr([])},c=function(){return r.get().isSome()&&u.get().isSome()};return{listCategories:function(){return[z].concat(P(r.get().getOr({})))},hasLoaded:c,waitForLoad:function(){return c()?N.resolve(!0):new N(function(n,t){var e=15,r=L.setInterval(function(){c()?(L.clearInterval(r),n(!0)):--e<0&&(l.console.log("Could not load emojis from url: "+o),L.clearInterval(r),t(!1))},100)})},listAll:i,listCategory:function(t){return t===z?i():r.get().bind(function(n){return A.from(n[t])}).getOr([])}}}var b,w,O=function(e){function n(){return o}function t(n){return n(e)}var r=i(e),o={fold:function(n,t){return t(e)},is:function(n){return e===n},isSome:u,isNone:c,getOr:r,getOrThunk:r,getOrDie:r,getOrNull:r,getOrUndefined:r,or:n,orThunk:n,map:function(n){return O(n(e))},each:function(n){n(e)},bind:t,exists:t,forall:t,filter:function(n){return n(e)?o:a},toArray:function(){return[e]},toString:function(){return"some("+e+")"},equals:function(n){return n.is(e)},equals_:function(n,t){return n.fold(c,function(n){return t(e,n)})}};return o},A={some:O,none:t,from:function(n){return null===n||n===undefined?a:O(n)}},j=(b="function",function(n){return function(n){if(null===n)return"null";var t=typeof n;return"object"==t&&(Array.prototype.isPrototypeOf(n)||n.constructor&&"Array"===n.constructor.name)?"array":"object"==t&&(String.prototype.isPrototypeOf(n)||n.constructor&&"String"===n.constructor.name)?"string":t}(n)===b}),C=Array.prototype.slice,k=(j(Array.from)&&Array.from,function(n){function t(){return e}var e=n;return{get:t,set:function(n){e=n},clone:function(){return k(t())}}}),T=Object.prototype.hasOwnProperty,_=(w=function(n,t){return t},function(){for(var n=new Array(arguments.length),t=0;t<n.length;t++)n[t]=arguments[t];if(0===n.length)throw new Error("Can't merge zero objects");for(var e={},r=0;r<n.length;r++){var o=n[r];for(var i in o)T.call(o,i)&&(e[i]=w(e[i],o[i]))}return e}),P=Object.keys,D=Object.hasOwnProperty,S=function(n,r){var o={};return y(n,function(n,t){var e=r(n,t);o[e.k]=e.v}),o},x=tinymce.util.Tools.resolve("tinymce.Resource"),L=tinymce.util.Tools.resolve("tinymce.util.Delay"),N=tinymce.util.Tools.resolve("tinymce.util.Promise"),E=function(n,t){return n.getParam("emoticons_database_url",t+"/js/emojis"+n.suffix+".js")},F=function(n){return n.getParam("emoticons_database_id","tinymce.plugins.emoticons","string")},q=function(n){return n.getParam("emoticons_append",{},"object")},z="All",I={symbols:"Symbols",people:"People",animals_and_nature:"Animals and Nature",food_and_drink:"Food and Drink",activity:"Activity",travel_and_places:"Travel and Places",objects:"Objects",flags:"Flags",user:"User Defined"},M="pattern",U=function(e,i){function n(){return{title:"Emoticons",size:"normal",body:{type:"tabpanel",tabs:function(n,t){for(var e=n.length,r=new Array(e),o=0;o<e;o++){var i=n[o];r[o]=t(i,o)}return r}(i.listCategories(),function(n){return{title:n,name:n,items:[o,c]}})},initialData:t,onTabChange:function(n,t){u.set(t.newTabName),r.throttle(n)},onChange:r.throttle,onAction:function(n,t){"results"===t.name&&(function(n,t){n.insertContent(t)}(e,t.value),n.close())},buttons:[{type:"cancel",text:"Close",primary:!0}]}}var t={pattern:"",results:d(i.listAll(),"",A.some(300))},u=k(z),r=function(e,r){var o=null;return{cancel:function(){null!==o&&(l.clearTimeout(o),o=null)},throttle:function(){for(var n=[],t=0;t<arguments.length;t++)n[t]=arguments[t];null!==o&&l.clearTimeout(o),o=l.setTimeout(function(){e.apply(null,n),o=null},r)}}}(function(n){!function(n){var t=n.getData(),e=u.get(),r=i.listCategory(e),o=d(r,t[M],e===z?A.some(300):A.none());n.setData({results:o})}(n)},200),o={label:"Search",type:"input",name:M},c={type:"collection",name:"results"},a=e.windowManager.open(n());a.focus(M),i.hasLoaded()||(a.block("Loading emoticons..."),i.waitForLoad().then(function(){a.redial(n()),r.throttle(a),a.focus(M),a.unblock()})["catch"](function(n){a.redial({title:"Emoticons",body:{type:"panel",items:[{type:"alertbanner",level:"error",icon:"warning",text:"<p>Could not load emoticons</p>"}]},buttons:[{type:"cancel",text:"Close",primary:!0}],initialData:{pattern:"",results:[]}}),a.focus(M),a.unblock()}))},R=function(n,t){function e(){return U(n,t)}n.ui.registry.addButton("emoticons",{tooltip:"Emoticons",icon:"emoji",onAction:e}),n.ui.registry.addMenuItem("emoticons",{text:"Emoticons...",icon:"emoji",onAction:e})};!function B(){r.add("emoticons",function(n,t){var e=E(n,t),r=F(n),o=h(n,e,r);R(n,o),function(r,o){r.ui.registry.addAutocompleter("emoticons",{ch:":",columns:"auto",minChars:2,fetch:function(t,e){return o.waitForLoad().then(function(){var n=o.listAll();return d(n,t,A.some(e))})},onAction:function(n,t,e){r.selection.setRng(t),r.insertContent(e),n.hide()}})}(n,o)})}()}(window);
\ No newline at end of file
diff --git a/website/js/vendor/tinymce/js/tinymce/plugins/fullpage/plugin.min.js b/website/js/vendor/tinymce/js/tinymce/plugins/fullpage/plugin.min.js
new file mode 100644 (file)
index 0000000..2e5e160
--- /dev/null
@@ -0,0 +1,9 @@
+/**
+ * Copyright (c) Tiny Technologies, Inc. All rights reserved.
+ * Licensed under the LGPL or a commercial license.
+ * For LGPL see License.txt in the project root for license information.
+ * For commercial licenses see https://www.tiny.cloud/
+ *
+ * Version: 5.1.5 (2019-12-19)
+ */
+!function(m){"use strict";function f(t){return e({validate:!1,root_name:"#document"}).parse(t)}function g(t){return t.replace(/<\/?[A-Z]+/g,function(t){return t.toLowerCase()})}var o,i=function(t){function e(){return n}var n=t;return{get:e,set:function(t){n=t},clone:function(){return i(e())}}},t=tinymce.util.Tools.resolve("tinymce.PluginManager"),p=tinymce.util.Tools.resolve("tinymce.util.Tools"),e=tinymce.util.Tools.resolve("tinymce.html.DomParser"),h=tinymce.util.Tools.resolve("tinymce.html.Node"),y=tinymce.util.Tools.resolve("tinymce.html.Serializer"),v=function(t){return t.getParam("fullpage_hide_in_source_view")},r=function(t){return t.getParam("fullpage_default_xml_pi")},a=function(t){return t.getParam("fullpage_default_encoding")},c=function(t){return t.getParam("fullpage_default_font_family")},u=function(t){return t.getParam("fullpage_default_font_size")},s=function(t){return t.getParam("fullpage_default_text_color")},d=function(t){return t.getParam("fullpage_default_title")},_=function(t){return t.getParam("fullpage_default_doctype","<!DOCTYPE html>")},b=f,n=function(t,e){var n,i,l=f(e),r={};function o(t,e){return t.attr(e)||""}return r.fontface=c(t),r.fontsize=u(t),7===(n=l.firstChild).type&&(r.xml_pi=!0,(i=/encoding="([^"]+)"/.exec(n.value))&&(r.docencoding=i[1])),(n=l.getAll("#doctype")[0])&&(r.doctype="<!DOCTYPE"+n.value+">"),(n=l.getAll("title")[0])&&n.firstChild&&(r.title=n.firstChild.value),p.each(l.getAll("meta"),function(t){var e,n=t.attr("name"),i=t.attr("http-equiv");n?r[n.toLowerCase()]=t.attr("content"):"Content-Type"===i&&(e=/charset\s*=\s*(.*)\s*/gi.exec(t.attr("content")))&&(r.docencoding=e[1])}),(n=l.getAll("html")[0])&&(r.langcode=o(n,"lang")||o(n,"xml:lang")),r.stylesheets=[],p.each(l.getAll("link"),function(t){"stylesheet"===t.attr("rel")&&r.stylesheets.push(t.attr("href"))}),(n=l.getAll("body")[0])&&(r.langdir=o(n,"dir"),r.style=o(n,"style"),r.visited_color=o(n,"vlink"),r.link_color=o(n,"link"),r.active_color=o(n,"alink")),r},x=function(t,r,e){var o,n,i,a,l,c=t.dom;function u(t,e,n){t.attr(e,n||undefined)}function s(t){n.firstChild?n.insert(t,n.firstChild):n.append(t)}o=f(e),(n=o.getAll("head")[0])||(a=o.getAll("html")[0],n=new h("head",1),a.firstChild?a.insert(n,a.firstChild,!0):a.append(n)),a=o.firstChild,r.xml_pi?(l='version="1.0"',r.docencoding&&(l+=' encoding="'+r.docencoding+'"'),7!==a.type&&(a=new h("xml",7),o.insert(a,o.firstChild,!0)),a.value=l):a&&7===a.type&&a.remove(),a=o.getAll("#doctype")[0],r.doctype?(a||(a=new h("#doctype",10),r.xml_pi?o.insert(a,o.firstChild):s(a)),a.value=r.doctype.substring(9,r.doctype.length-1)):a&&a.remove(),a=null,p.each(o.getAll("meta"),function(t){"Content-Type"===t.attr("http-equiv")&&(a=t)}),r.docencoding?(a||((a=new h("meta",1)).attr("http-equiv","Content-Type"),a.shortEnded=!0,s(a)),a.attr("content","text/html; charset="+r.docencoding)):a&&a.remove(),a=o.getAll("title")[0],r.title?(a?a.empty():s(a=new h("title",1)),a.append(new h("#text",3)).value=r.title):a&&a.remove(),p.each("keywords,description,author,copyright,robots".split(","),function(t){var e,n,i=o.getAll("meta"),l=r[t];for(e=0;e<i.length;e++)if((n=i[e]).attr("name")===t)return void(l?n.attr("content",l):n.remove());l&&((a=new h("meta",1)).attr("name",t),a.attr("content",l),a.shortEnded=!0,s(a))});var d={};return p.each(o.getAll("link"),function(t){"stylesheet"===t.attr("rel")&&(d[t.attr("href")]=t)}),p.each(r.stylesheets,function(t){d[t]||((a=new h("link",1)).attr({rel:"stylesheet",text:"text/css",href:t}),a.shortEnded=!0,s(a)),delete d[t]}),p.each(d,function(t){t.remove()}),(a=o.getAll("body")[0])&&(u(a,"dir",r.langdir),u(a,"style",r.style),u(a,"vlink",r.visited_color),u(a,"link",r.link_color),u(a,"alink",r.active_color),c.setAttribs(t.getBody(),{style:r.style,dir:r.dir,vLink:r.visited_color,link:r.link_color,aLink:r.active_color})),(a=o.getAll("html")[0])&&(u(a,"lang",r.langcode),u(a,"xml:lang",r.langcode)),n.firstChild||n.remove(),(i=y({validate:!1,indent:!0,indent_before:"head,html,body,meta,title,script,link,style",indent_after:"head,html,body,meta,title,script,link,style"}).serialize(o)).substring(0,i.indexOf("</body>"))},C=Object.prototype.hasOwnProperty,k=(o=function(t,e){return e},function(){for(var t=new Array(arguments.length),e=0;e<t.length;e++)t[e]=arguments[e];if(0===t.length)throw new Error("Can't merge zero objects");for(var n={},i=0;i<t.length;i++){var l=t[i];for(var r in l)C.call(l,r)&&(n[r]=o(n[r],l[r]))}return n}),l=function(i,l){var r=n(i,l.get()),t=k({title:"",keywords:"",description:"",robots:"",author:"",docencoding:""},r);i.windowManager.open({title:"Metadata and Document Properties",size:"normal",body:{type:"panel",items:[{name:"title",type:"input",label:"Title"},{name:"keywords",type:"input",label:"Keywords"},{name:"description",type:"input",label:"Description"},{name:"robots",type:"input",label:"Robots"},{name:"author",type:"input",label:"Author"},{name:"docencoding",type:"input",label:"Encoding"}]},buttons:[{type:"cancel",name:"cancel",text:"Cancel"},{type:"submit",name:"save",text:"Save",primary:!0}],initialData:t,onSubmit:function(t){var e=t.getData(),n=x(i,p.extend(r,e),l.get());l.set(n),t.close()}})},w=function(t,e){t.addCommand("mceFullPageProperties",function(){l(t,e)})},A=function(t,e){return p.each(t,function(t){e=e.replace(t,function(t){return"\x3c!--mce:protected "+escape(t)+"--\x3e"})}),e},P=function(t){return t.replace(/<!--mce:protected ([\s\S]*?)-->/g,function(t,e){return unescape(e)})},T=p.each,O=function(t){var e,n="",i="";if(r(t)){var l=a(t);n+='<?xml version="1.0" encoding="'+(l||"ISO-8859-1")+'" ?>\n'}return n+=_(t),n+="\n<html>\n<head>\n",(e=d(t))&&(n+="<title>"+e+"</title>\n"),(e=a(t))&&(n+='<meta http-equiv="Content-Type" content="text/html; charset='+e+'" />\n'),(e=c(t))&&(i+="font-family: "+e+";"),(e=u(t))&&(i+="font-size: "+e+";"),(e=s(t))&&(i+="color: "+e+";"),n+="</head>\n<body"+(i?' style="'+i+'"':"")+">\n"},D=function(e,n,i){e.on("BeforeSetContent",function(t){!function(t,e,n,i){var l,r,o,a,c="",u=t.dom;if(!(i.selection||(o=A(t.settings.protect,i.content),"raw"===i.format&&e.get()||i.source_view&&v(t)))){0!==o.length||i.source_view||(o=p.trim(e.get())+"\n"+p.trim(o)+"\n"+p.trim(n.get())),-1!==(l=(o=o.replace(/<(\/?)BODY/gi,"<$1body")).indexOf("<body"))?(l=o.indexOf(">",l),e.set(g(o.substring(0,l+1))),-1===(r=o.indexOf("</body",l))&&(r=o.length),i.content=p.trim(o.substring(l+1,r)),n.set(g(o.substring(r)))):(e.set(O(t)),n.set("\n</body>\n</html>")),a=b(e.get()),T(a.getAll("style"),function(t){t.firstChild&&(c+=t.firstChild.value)});var s=a.getAll("body")[0];s&&u.setAttribs(t.getBody(),{style:s.attr("style")||"",dir:s.attr("dir")||"",vLink:s.attr("vlink")||"",link:s.attr("link")||"",aLink:s.attr("alink")||""}),u.remove("fullpage_styles");var d=t.getDoc().getElementsByTagName("head")[0];if(c)u.add(d,"style",{id:"fullpage_styles"}).appendChild(m.document.createTextNode(c));var f={};p.each(d.getElementsByTagName("link"),function(t){"stylesheet"===t.rel&&t.getAttribute("data-mce-fullpage")&&(f[t.href]=t)}),p.each(a.getAll("link"),function(t){var e=t.attr("href");if(!e)return!0;f[e]||"stylesheet"!==t.attr("rel")||u.add(d,"link",{rel:"stylesheet",text:"text/css",href:e,"data-mce-fullpage":"1"}),delete f[e]}),p.each(f,function(t){t.parentNode.removeChild(t)})}}(e,n,i,t)}),e.on("GetContent",function(t){!function(t,e,n,i){i.selection||i.source_view&&v(t)||(i.content=P(p.trim(e)+"\n"+p.trim(i.content)+"\n"+p.trim(n)))}(e,n.get(),i.get(),t)})},E=function(t){t.ui.registry.addButton("fullpage",{tooltip:"Metadata and document properties",icon:"document-properties",onAction:function(){t.execCommand("mceFullPageProperties")}}),t.ui.registry.addMenuItem("fullpage",{text:"Metadata and document properties",icon:"document-properties",onAction:function(){t.execCommand("mceFullPageProperties")}})};!function z(){t.add("fullpage",function(t){var e=i(""),n=i("");w(t,e),E(t),D(t,e,n)})}()}(window);
\ No newline at end of file
diff --git a/website/js/vendor/tinymce/js/tinymce/plugins/fullscreen/plugin.min.js b/website/js/vendor/tinymce/js/tinymce/plugins/fullscreen/plugin.min.js
new file mode 100644 (file)
index 0000000..c03217e
--- /dev/null
@@ -0,0 +1,9 @@
+/**
+ * Copyright (c) Tiny Technologies, Inc. All rights reserved.
+ * Licensed under the LGPL or a commercial license.
+ * For LGPL see License.txt in the project root for license information.
+ * For commercial licenses see https://www.tiny.cloud/
+ *
+ * Version: 5.1.5 (2019-12-19)
+ */
+!function(l){"use strict";function e(){}function m(e){return function(){return e}}function n(){return s}var r,t=function(e){function n(){return r}var r=e;return{get:n,set:function(e){r=e},clone:function(){return t(n())}}},o=tinymce.util.Tools.resolve("tinymce.PluginManager"),i=function(e){return{isFullscreen:function(){return null!==e.get()}}},c=m(!1),u=m(!0),s=(r={fold:function(e,n){return e()},is:c,isSome:c,isNone:u,getOr:d,getOrThunk:a,getOrDie:function(e){throw new Error(e||"error: getOrDie called on none.")},getOrNull:m(null),getOrUndefined:m(undefined),or:d,orThunk:a,map:n,each:e,bind:n,exists:c,forall:u,filter:n,equals:f,equals_:f,toArray:function(){return[]},toString:m("none()")},Object.freeze&&Object.freeze(r),r);function f(e){return e.isNone()}function a(e){return e()}function d(e){return e}function h(n){return function(e){return function(e){if(null===e)return"null";var n=typeof e;return"object"==n&&(Array.prototype.isPrototypeOf(e)||e.constructor&&"Array"===e.constructor.name)?"array":"object"==n&&(String.prototype.isPrototypeOf(e)||e.constructor&&"String"===e.constructor.name)?"string":n}(e)===n}}function v(e,n){for(var r=e.length,t=new Array(r),o=0;o<r;o++){var i=e[o];t[o]=n(i,o)}return t}function g(e,n){for(var r=0,t=e.length;r<t;r++){n(e[r],r)}}function p(e,n){for(var r=[],t=0,o=e.length;t<o;t++){var i=e[t];n(i,t)&&r.push(i)}return r}function w(e,n){return function(e){for(var n=[],r=0,t=e.length;r<t;++r){if(!Y(e[r]))throw new Error("Arr.flatten item "+r+" was not an array, input: "+e);Q.apply(n,e[r])}return n}(v(e,n))}function y(e,n){return-1!==e.indexOf(n)}function S(e){return e.style!==undefined&&$(e.style.getPropertyValue)}function E(e,n,r){!function(e,n,r){if(!(X(r)||G(r)||K(r)))throw l.console.error("Invalid call to Attr.set. Key ",n,":: Value ",r,":: Element ",e),new Error("Attribute value was not simple");e.setAttribute(n,r+"")}(e.dom(),n,r)}function O(e,n){var r=e.dom().getAttribute(n);return null===r?undefined:r}function N(e,n){e.dom().removeAttribute(n)}function T(e,n){var r=e.dom();!function(e,n){for(var r=Z(e),t=0,o=r.length;t<o;t++){var i=r[t];n(e[i],i)}}(n,function(e,n){!function(e,n,r){if(!X(r))throw l.console.error("Invalid call to CSS.set. Property ",n,":: Value ",r,":: Element ",e),new Error("CSS value must be a string: "+r);S(e)&&e.style.setProperty(n,r)}(r,n,e)})}function x(e,n){var r=e.dom(),t=l.window.getComputedStyle(r).getPropertyValue(n),o=""!==t||function(e){var n=ie(e)?e.dom().parentNode:e.dom();return n!==undefined&&null!==n&&n.ownerDocument.body.contains(n)}(e)?t:ue(r,n);return null===o?undefined:o}function b(e,n){var r=function(e,n){for(var r=0;r<e.length;r++){var t=e[r];if(t.test(n))return t}return undefined}(e,n);if(!r)return{major:0,minor:0};function t(e){return Number(n.replace(r,"$"+e))}return se(t(1),t(2))}function C(e,n){return function(){return n===e}}function D(e,n){return function(){return n===e}}function A(e,n){var r=String(n).toLowerCase();return function(e,n){for(var r=0,t=e.length;r<t;r++){var o=e[r];if(n(o,r))return z.some(o)}return z.none()}(e,function(e){return e.search(r)})}function M(n){return function(e){return y(e,n)}}function _(){return xe.get()}function k(e,n,r){return 0!=(e.compareDocumentPosition(n)&r)}function F(e,n){var r=e.dom();if(r.nodeType!==Ce)return!1;var t=r;if(t.matches!==undefined)return t.matches(n);if(t.msMatchesSelector!==undefined)return t.msMatchesSelector(n);if(t.webkitMatchesSelector!==undefined)return t.webkitMatchesSelector(n);if(t.mozMatchesSelector!==undefined)return t.mozMatchesSelector(n);throw new Error("Browser lacks native selectors")}function R(e,n){var r=n===undefined?l.document:n.dom();return function(e){return e.nodeType!==Ce&&e.nodeType!==De||0===e.childElementCount}(r)?[]:v(r.querySelectorAll(e),ne.fromDom)}function L(n){return function(e){return z.from(e.dom().parentNode).map(ne.fromDom)}(n).map(Ae).map(function(e){return p(e,function(e){return!function(e,n){return e.dom()===n.dom()}(n,e)})}).getOr([])}function I(e,n,r,t){return{x:m(e),y:m(n),width:m(r),height:m(t),right:m(e+r),bottom:m(n+t)}}function P(e){var n=e===undefined?l.window:e,r=n.document,t=function(e){var n=e!==undefined?e.dom():l.document,r=n.body.scrollLeft||n.documentElement.scrollLeft,t=n.body.scrollTop||n.documentElement.scrollTop;return _e(r,t)}(ne.fromDom(r)),o=n.visualViewport;if(o!==undefined)return I(Math.max(o.pageLeft,t.left()),Math.max(o.pageTop,t.top()),o.width,o.height);var i=r.documentElement,u=i.clientWidth,c=i.clientHeight;return I(t.left(),t.top(),u,c)}function H(e,n,r){return p(function(e,n){for(var r=$(n)?n:c,t=e.dom(),o=[];null!==t.parentNode&&t.parentNode!==undefined;){var i=t.parentNode,u=ne.fromDom(i);if(o.push(u),!0===r(u))break;t=i}return o}(e,r),n)}function U(e,n){return function(e,n){return p(L(e),n)}(e,function(e){return F(e,n)})}function W(r,t){return function(n){n.setActive(null!==t.get());function e(e){return n.setActive(e.state)}return r.on("FullscreenStateChanged",e),function(){return r.off("FullscreenStateChanged",e)}}}var B,V,j,q=function(r){function e(){return o}function n(e){return e(r)}var t=m(r),o={fold:function(e,n){return n(r)},is:function(e){return r===e},isSome:u,isNone:c,getOr:t,getOrThunk:t,getOrDie:t,getOrNull:t,getOrUndefined:t,or:e,orThunk:e,map:function(e){return q(e(r))},each:function(e){e(r)},bind:n,exists:n,forall:n,filter:function(e){return e(r)?o:s},toArray:function(){return[r]},toString:function(){return"some("+r+")"},equals:function(e){return e.is(r)},equals_:function(e,n){return e.fold(c,function(e){return n(r,e)})}};return o},z={some:q,none:n,from:function(e){return null===e||e===undefined?s:q(e)}},X=h("string"),Y=h("array"),G=h("boolean"),$=h("function"),K=h("number"),J=Array.prototype.slice,Q=Array.prototype.push,Z=($(Array.from)&&Array.from,Object.keys),ee=function(e){if(null===e||e===undefined)throw new Error("Node cannot be null or undefined");return{dom:m(e)}},ne={fromHtml:function(e,n){var r=(n||l.document).createElement("div");if(r.innerHTML=e,!r.hasChildNodes()||1<r.childNodes.length)throw l.console.error("HTML does not have a single root node",e),new Error("HTML must have a single root node");return ee(r.childNodes[0])},fromTag:function(e,n){var r=(n||l.document).createElement(e);return ee(r)},fromText:function(e,n){var r=(n||l.document).createTextNode(e);return ee(r)},fromDom:ee,fromPoint:function(e,n,r){var t=e.dom();return z.from(t.elementFromPoint(n,r)).map(ee)}},re=(l.Node.ATTRIBUTE_NODE,l.Node.CDATA_SECTION_NODE,l.Node.COMMENT_NODE,l.Node.DOCUMENT_NODE),te=(l.Node.DOCUMENT_TYPE_NODE,l.Node.DOCUMENT_FRAGMENT_NODE,l.Node.ELEMENT_NODE),oe=l.Node.TEXT_NODE,ie=(l.Node.PROCESSING_INSTRUCTION_NODE,l.Node.ENTITY_REFERENCE_NODE,l.Node.ENTITY_NODE,l.Node.NOTATION_NODE,"undefined"!=typeof l.window?l.window:Function("return this;")(),B=oe,function(e){return function(e){return e.dom().nodeType}(e)===B}),ue=function(e,n){return S(e)?e.style.getPropertyValue(n):""},ce=function(){return se(0,0)},se=function(e,n){return{major:e,minor:n}},fe={nu:se,detect:function(e,n){var r=String(n).toLowerCase();return 0===e.length?ce():b(e,r)},unknown:ce},ae="Firefox",de=function(e){var n=e.current;return{current:n,version:e.version,isEdge:C("Edge",n),isChrome:C("Chrome",n),isIE:C("IE",n),isOpera:C("Opera",n),isFirefox:C(ae,n),isSafari:C("Safari",n)}},le={unknown:function(){return de({current:undefined,version:fe.unknown()})},nu:de,edge:m("Edge"),chrome:m("Chrome"),ie:m("IE"),opera:m("Opera"),firefox:m(ae),safari:m("Safari")},me="Windows",he="Android",ve="Solaris",ge="FreeBSD",pe=function(e){var n=e.current;return{current:n,version:e.version,isWindows:D(me,n),isiOS:D("iOS",n),isAndroid:D(he,n),isOSX:D("OSX",n),isLinux:D("Linux",n),isSolaris:D(ve,n),isFreeBSD:D(ge,n)}},we={unknown:function(){return pe({current:undefined,version:fe.unknown()})},nu:pe,windows:m(me),ios:m("iOS"),android:m(he),linux:m("Linux"),osx:m("OSX"),solaris:m(ve),freebsd:m(ge)},ye=function(e,r){return A(e,r).map(function(e){var n=fe.detect(e.versionRegexes,r);return{current:e.name,version:n}})},Se=function(e,r){return A(e,r).map(function(e){var n=fe.detect(e.versionRegexes,r);return{current:e.name,version:n}})},Ee=/.*?version\/\ ?([0-9]+)\.([0-9]+).*/,Oe=[{name:"Edge",versionRegexes:[/.*?edge\/ ?([0-9]+)\.([0-9]+)$/],search:function(e){return y(e,"edge/")&&y(e,"chrome")&&y(e,"safari")&&y(e,"applewebkit")}},{name:"Chrome",versionRegexes:[/.*?chrome\/([0-9]+)\.([0-9]+).*/,Ee],search:function(e){return y(e,"chrome")&&!y(e,"chromeframe")}},{name:"IE",versionRegexes:[/.*?msie\ ?([0-9]+)\.([0-9]+).*/,/.*?rv:([0-9]+)\.([0-9]+).*/],search:function(e){return y(e,"msie")||y(e,"trident")}},{name:"Opera",versionRegexes:[Ee,/.*?opera\/([0-9]+)\.([0-9]+).*/],search:M("opera")},{name:"Firefox",versionRegexes:[/.*?firefox\/\ ?([0-9]+)\.([0-9]+).*/],search:M("firefox")},{name:"Safari",versionRegexes:[Ee,/.*?cpu os ([0-9]+)_([0-9]+).*/],search:function(e){return(y(e,"safari")||y(e,"mobile/"))&&y(e,"applewebkit")}}],Ne=[{name:"Windows",search:M("win"),versionRegexes:[/.*?windows\ nt\ ?([0-9]+)\.([0-9]+).*/]},{name:"iOS",search:function(e){return y(e,"iphone")||y(e,"ipad")},versionRegexes:[/.*?version\/\ ?([0-9]+)\.([0-9]+).*/,/.*cpu os ([0-9]+)_([0-9]+).*/,/.*cpu iphone os ([0-9]+)_([0-9]+).*/]},{name:"Android",search:M("android"),versionRegexes:[/.*?android\ ?([0-9]+)\.([0-9]+).*/]},{name:"OSX",search:M("os x"),versionRegexes:[/.*?os\ x\ ?([0-9]+)_([0-9]+).*/]},{name:"Linux",search:M("linux"),versionRegexes:[]},{name:"Solaris",search:M("sunos"),versionRegexes:[]},{name:"FreeBSD",search:M("freebsd"),versionRegexes:[]}],Te={browsers:m(Oe),oses:m(Ne)},xe=t(function(e,n){var r=Te.browsers(),t=Te.oses(),o=ye(r,e).fold(le.unknown,le.nu),i=Se(t,e).fold(we.unknown,we.nu);return{browser:o,os:i,deviceType:function(e,n,r,t){var o=e.isiOS()&&!0===/ipad/i.test(r),i=e.isiOS()&&!o,u=e.isiOS()||e.isAndroid(),c=u||t("(pointer:coarse)"),s=o||!i&&u&&t("(min-device-width:768px)"),f=i||u&&!s,a=n.isSafari()&&e.isiOS()&&!1===/safari/i.test(r),d=!f&&!s&&!a;return{isiPad:m(o),isiPhone:m(i),isTablet:m(s),isPhone:m(f),isTouch:m(c),isAndroid:e.isAndroid,isiOS:e.isiOS,isWebView:m(a),isDesktop:m(d)}}(i,o,e,n)}}(l.navigator.userAgent,function(e){return l.window.matchMedia(e).matches})),be=function(e,n){return k(e,n,l.Node.DOCUMENT_POSITION_CONTAINED_BY)},Ce=te,De=re,Ae=(_().browser.isIE(),function(e){return v(e.dom().childNodes,ne.fromDom)}),Me=(function(){for(var e=[],n=0;n<arguments.length;n++)e[n]=arguments[n]}("element","offset"),function(r,t){return{left:m(r),top:m(t),translate:function(e,n){return Me(r+e,t+n)}}}),_e=Me,ke=(_().browser.isSafari(),function(e,n){e.fire("FullscreenStateChanged",{state:n})}),Fe=tinymce.util.Tools.resolve("tinymce.dom.DOMUtils"),Re=tinymce.util.Tools.resolve("tinymce.Env"),Le=tinymce.util.Tools.resolve("tinymce.util.Delay"),Ie="data-ephox-mobile-fullscreen-style",Pe="position:absolute!important;",He="top:0!important;left:0!important;margin:0!important;padding:0!important;width:100%!important;height:100%!important;overflow:visible!important;",Ue=Re.os.isAndroid(),We=function(e,n){function r(t){return function(e){var n=O(e,"style"),r=n===undefined?"no-styles":n.trim();r!==t&&(E(e,Ie,r),E(e,"style",t))}}var t=function(e,n,r){return H(e,function(e){return F(e,n)},r)}(e,"*"),o=w(t,function(e){return U(e,"*:not(.tox-silver-sink)")}),i=function(e){var n=x(e,"background-color");return n!==undefined&&""!==n?"background-color:"+n+"!important":"background-color:rgb(255,255,255)!important;"}(n);g(o,r("display:none!important;")),g(t,r(Pe+He+i)),r((!0===Ue?"":Pe)+He+i)(e)},Be=function(){var e=function(e){return R(e)}("["+Ie+"]");g(e,function(e){var n=O(e,Ie);"no-styles"!==n?E(e,"style",n):N(e,"style"),N(e,Ie)})},Ve=Fe.DOM,je=l.window.visualViewport,qe=je===undefined?{bind:e,unbind:e}:(V=function(){var n=t(z.none());return{clear:function(){n.set(z.none())},set:function(e){n.set(z.some(e))},isSet:function(){return n.get().isSome()},on:function(e){n.get().each(e)}}}(),j=Le.throttle(function(){l.document.body.scrollTop=0,l.document.documentElement.scrollTop=0,l.window.requestAnimationFrame(function(){V.on(function(e){return T(e,{top:je.offsetTop+"px",left:je.offsetLeft+"px",height:je.height+"px",width:je.width+"px"})})})},50),{bind:function(e){V.set(e),j(),je.addEventListener("resize",j),je.addEventListener("scroll",j)},unbind:function(){V.on(function(){je.removeEventListener("scroll",j),je.removeEventListener("resize",j)}),V.clear()}}),ze=function(e,n){var r,t,o,i=l.document.body,u=l.document.documentElement;t=e.getContainer();var c=ne.fromDom(t),s=n.get(),f=ne.fromDom(e.getBody()),a=Re.deviceType.isTouch();if(r=t.style,o=e.getContentAreaContainer().firstChild.style,s)o.width=s.iframeWidth,o.height=s.iframeHeight,r.width=s.containerWidth,r.height=s.containerHeight,r.top=s.containerTop,r.left=s.containerLeft,a&&Be(),Ve.removeClass(i,"tox-fullscreen"),Ve.removeClass(u,"tox-fullscreen"),Ve.removeClass(t,"tox-fullscreen"),function(e){l.window.scrollTo(e.x,e.y)}(s.scrollPos),n.set(null),ke(e,!1),qe.unbind(),e.off("remove",qe.unbind);else{var d={scrollPos:function(){var e=P(l.window);return{x:e.x(),y:e.y()}}(),containerWidth:r.width,containerHeight:r.height,containerTop:r.top,containerLeft:r.left,iframeWidth:o.width,iframeHeight:o.height};a&&We(c,f),o.width=o.height="100%",r.width=r.height="",Ve.addClass(i,"tox-fullscreen"),Ve.addClass(u,"tox-fullscreen"),Ve.addClass(t,"tox-fullscreen"),qe.bind(c),e.on("remove",qe.unbind),n.set(d),ke(e,!0)}},Xe=function(e,n){e.addCommand("mceFullScreen",function(){ze(e,n)})},Ye=function(e,n){e.ui.registry.addToggleMenuItem("fullscreen",{text:"Fullscreen",shortcut:"Meta+Shift+F",onAction:function(){return e.execCommand("mceFullScreen")},onSetup:W(e,n)}),e.ui.registry.addToggleButton("fullscreen",{tooltip:"Fullscreen",icon:"fullscreen",onAction:function(){return e.execCommand("mceFullScreen")},onSetup:W(e,n)})};!function Ge(){o.add("fullscreen",function(e){var n=t(null);return e.settings.inline||(Xe(e,n),Ye(e,n),e.addShortcut("Meta+Shift+F","","mceFullScreen")),i(n)})}()}(window);
\ No newline at end of file
diff --git a/website/js/vendor/tinymce/js/tinymce/plugins/help/plugin.min.js b/website/js/vendor/tinymce/js/tinymce/plugins/help/plugin.min.js
new file mode 100644 (file)
index 0000000..e8db914
--- /dev/null
@@ -0,0 +1,9 @@
+/**
+ * Copyright (c) Tiny Technologies, Inc. All rights reserved.
+ * Licensed under the LGPL or a commercial license.
+ * For LGPL see License.txt in the project root for license information.
+ * For commercial licenses see https://www.tiny.cloud/
+ *
+ * Version: 5.1.5 (2019-12-19)
+ */
+!function(){"use strict";function e(){}function r(e){return function(){return e}}var a=function(e){function t(){return n}var n=e;return{get:t,set:function(e){n=e},clone:function(){return a(t())}}},t=tinymce.util.Tools.resolve("tinymce.PluginManager"),i=function(e,t){e.addCommand("mceHelp",t)},s=function(e,t){e.ui.registry.addButton("help",{icon:"help",tooltip:"Help",onAction:t}),e.ui.registry.addMenuItem("help",{text:"Help",icon:"help",shortcut:"Alt+0",onAction:t})},c=function(){return(c=Object.assign||function(e){for(var t,n=1,o=arguments.length;n<o;n++)for(var a in t=arguments[n])Object.prototype.hasOwnProperty.call(t,a)&&(e[a]=t[a]);return e}).apply(this,arguments)};function l(o){for(var a=[],e=1;e<arguments.length;e++)a[e-1]=arguments[e];return function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];var n=a.concat(e);return o.apply(null,n)}}function n(){return m}var o,u=r(!1),h=r(!0),m=(o={fold:function(e,t){return e()},is:u,isSome:u,isNone:h,getOr:f,getOrThunk:d,getOrDie:function(e){throw new Error(e||"error: getOrDie called on none.")},getOrNull:r(null),getOrUndefined:r(undefined),or:f,orThunk:d,map:n,each:e,bind:n,exists:u,forall:h,filter:n,equals:p,equals_:p,toArray:function(){return[]},toString:r("none()")},Object.freeze&&Object.freeze(o),o);function p(e){return e.isNone()}function d(e){return e()}function f(e){return e}function g(e,t){return O.call(e,t)}function b(e,t){return-1<g(e,t)}function y(e,t){for(var n=e.length,o=new Array(n),a=0;a<n;a++){var r=e[a];o[a]=t(r,a)}return o}function k(e,o){return e.replace(/\$\{([^{}]*)\}/g,function(e,t){var n=o[t];return function(e){var t=typeof e;return"string"==t||"number"==t}(n)?n.toString():e})}function v(e){var t=F(e);return function(e,t){var n=g(e,t);return-1===n?x.none():x.some(n)}(t,"versions").each(function(e){t.splice(e,1),t.push("versions")}),{tabs:e,names:t}}function w(e,t){var n,o=H(),a=B(),r=D(e),i=L(),s=c(((n={})[o.name]=o,n[a.name]=a,n[r.name]=r,n[i.name]=i,n),t.get());return function(e){return x.from(e.getParam("help_tabs"))}(e).fold(function(){return v(s)},function(e){return function(e,t){var n={},o=y(e,function(e){return"string"==typeof e?(E(t,e)&&(n[e]=t[e]),e):(n[e.name]=e).name});return{tabs:n,names:o}}(e,s)})}function A(a,r){return function(){var e=w(a,r),t=e.tabs,n=e.names,o={type:"tabpanel",tabs:function(e){for(var t=[],n=function(e){t.push(e)},o=0;o<e.length;o++)e[o].each(n);return t}(y(n,function(e){return function(e,t){return E(e,t)?x.from(e[t]):x.none()}(t,e)}))};a.windowManager.open({title:"Help",size:"medium",body:o,buttons:[{type:"cancel",name:"close",text:"Close",primary:!0}],initialData:{}})}}var C,T=function(n){function e(){return a}function t(e){return e(n)}var o=r(n),a={fold:function(e,t){return t(n)},is:function(e){return n===e},isSome:h,isNone:u,getOr:o,getOrThunk:o,getOrDie:o,getOrNull:o,getOrUndefined:o,or:e,orThunk:e,map:function(e){return T(e(n))},each:function(e){e(n)},bind:t,exists:t,forall:t,filter:function(e){return e(n)?a:m},toArray:function(){return[n]},toString:function(){return"some("+n+")"},equals:function(e){return e.is(n)},equals_:function(e,t){return e.fold(u,function(e){return t(n,e)})}};return a},x={some:T,none:n,from:function(e){return null===e||e===undefined?m:T(e)}},P=(C="function",function(e){return function(e){if(null===e)return"null";var t=typeof e;return"object"==t&&(Array.prototype.isPrototypeOf(e)||e.constructor&&"Array"===e.constructor.name)?"array":"object"==t&&(String.prototype.isPrototypeOf(e)||e.constructor&&"String"===e.constructor.name)?"string":t}(e)===C}),M=Array.prototype.slice,O=Array.prototype.indexOf,F=(P(Array.from)&&Array.from,Object.keys),S=Object.hasOwnProperty,E=function(e,t){return S.call(e,t)},I=[{shortcuts:["Meta + B"],action:"Bold"},{shortcuts:["Meta + I"],action:"Italic"},{shortcuts:["Meta + U"],action:"Underline"},{shortcuts:["Meta + A"],action:"Select all"},{shortcuts:["Meta + Y","Meta + Shift + Z"],action:"Redo"},{shortcuts:["Meta + Z"],action:"Undo"},{shortcuts:["Access + 1"],action:"Header 1"},{shortcuts:["Access + 2"],action:"Header 2"},{shortcuts:["Access + 3"],action:"Header 3"},{shortcuts:["Access + 4"],action:"Header 4"},{shortcuts:["Access + 5"],action:"Header 5"},{shortcuts:["Access + 6"],action:"Header 6"},{shortcuts:["Access + 7"],action:"Paragraph"},{shortcuts:["Access + 8"],action:"Div"},{shortcuts:["Access + 9"],action:"Address"},{shortcuts:["Alt + 0"],action:"Open help dialog"},{shortcuts:["Alt + F9"],action:"Focus to menubar"},{shortcuts:["Alt + F10"],action:"Focus to toolbar"},{shortcuts:["Alt + F11"],action:"Focus to element path"},{shortcuts:["Ctrl + F9"],action:"Focus to contextual toolbar"},{shortcuts:["Shift + Enter"],action:"Open popup menu for split buttons"},{shortcuts:["Meta + K"],action:"Insert link (if link plugin activated)"},{shortcuts:["Meta + S"],action:"Save (if save plugin activated)"},{shortcuts:["Meta + F"],action:"Find (if searchreplace plugin activated)"},{shortcuts:["Meta + Shift + F"],action:"Switch to or from fullscreen mode"}],_=tinymce.util.Tools.resolve("tinymce.Env"),j=function(e){var n=_.mac?{alt:"&#x2325;",ctrl:"&#x2303;",shift:"&#x21E7;",meta:"&#x2318;",access:"&#x2303;&#x2325;"}:{meta:"Ctrl ",access:"Shift + Alt "},t=e.split("+"),o=y(t,function(e){var t=e.toLowerCase().trim();return E(n,t)?n[t]:e});return _.mac?o.join("").replace(/\s/,""):o.join("+")},H=function(){return{name:"shortcuts",title:"Handy Shortcuts",items:[{type:"table",header:["Action","Shortcut"],cells:y(I,function(e){var t=y(e.shortcuts,j).join(" or ");return[e.action,t]})}]}},U=tinymce.util.Tools.resolve("tinymce.util.I18n"),W=[{key:"advlist",name:"Advanced List"},{key:"anchor",name:"Anchor"},{key:"autolink",name:"Autolink"},{key:"autoresize",name:"Autoresize"},{key:"autosave",name:"Autosave"},{key:"bbcode",name:"BBCode"},{key:"charmap",name:"Character Map"},{key:"code",name:"Code"},{key:"codesample",name:"Code Sample"},{key:"colorpicker",name:"Color Picker"},{key:"directionality",name:"Directionality"},{key:"emoticons",name:"Emoticons"},{key:"fullpage",name:"Full Page"},{key:"fullscreen",name:"Full Screen"},{key:"help",name:"Help"},{key:"hr",name:"Horizontal Rule"},{key:"image",name:"Image"},{key:"imagetools",name:"Image Tools"},{key:"importcss",name:"Import CSS"},{key:"insertdatetime",name:"Insert Date/Time"},{key:"legacyoutput",name:"Legacy Output"},{key:"link",name:"Link"},{key:"lists",name:"Lists"},{key:"media",name:"Media"},{key:"nonbreaking",name:"Nonbreaking"},{key:"noneditable",name:"Noneditable"},{key:"pagebreak",name:"Page Break"},{key:"paste",name:"Paste"},{key:"preview",name:"Preview"},{key:"print",name:"Print"},{key:"save",name:"Save"},{key:"searchreplace",name:"Search and Replace"},{key:"spellchecker",name:"Spell Checker"},{key:"tabfocus",name:"Tab Focus"},{key:"table",name:"Table"},{key:"template",name:"Template"},{key:"textcolor",name:"Text Color"},{key:"textpattern",name:"Text Pattern"},{key:"toc",name:"Table of Contents"},{key:"visualblocks",name:"Visual Blocks"},{key:"visualchars",name:"Visual Characters"},{key:"wordcount",name:"Word Count"},{key:"advcode",name:"Advanced Code Editor*"},{key:"formatpainter",name:"Format Painter*"},{key:"powerpaste",name:"PowerPaste*"},{key:"tinydrive",name:"Tiny Drive*"},{key:"tinymcespellchecker",name:"Spell Checker Pro*"},{key:"a11ychecker",name:"Accessibility Checker*"},{key:"linkchecker",name:"Link Checker*"},{key:"mentions",name:"Mentions*"},{key:"mediaembed",name:"Enhanced Media Embed*"},{key:"checklist",name:"Checklist*"},{key:"casechange",name:"Case Change*"},{key:"permanentpen",name:"Permanent Pen*"},{key:"pageembed",name:"Page Embed*"},{key:"tinycomments",name:"Tiny Comments*"},{key:"advtable",name:"Advanced Tables*"},{key:"autocorrect",name:"Autocorrect*"}],D=function(e){function r(t,n){return function(e,t){for(var n=0,o=e.length;n<o;n++){var a=e[n];if(t(a,n))return x.some(a)}return x.none()}(W,function(e){return e.key===n}).fold(function(){var e=t.plugins[n].getMetadata;return"function"==typeof e?o(e()):n},function(e){return o({name:e.name,url:"https://www.tiny.cloud/docs/plugins/"+e.key})})}var t,n,o=l(k,'<a href="${url}" target="_blank" rel="noopener">${name}</a>');return{name:"plugins",title:"Plugins",items:[{type:"htmlpanel",presets:"document",html:[(n=e,null==n?"":'<div data-mce-tabstop="1" tabindex="-1">'+function(t){var e=function(e){var t=F(e.plugins);return e.settings.forced_plugins===undefined?t:function(e,t){for(var n=[],o=0,a=e.length;o<a;o++){var r=e[o];t(r,o)&&n.push(r)}return n}(t,function(n){return function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];return!n.apply(null,e)}}(l(b,e.settings.forced_plugins)))}(t),n=y(e,function(e){return"<li>"+r(t,e)+"</li>"}),o=n.length,a=n.join("");return"<p><b>"+U.translate(["Plugins installed ({0}):",o])+"</b></p><ul>"+a+"</ul>"}(n)+"</div>"),(t=y(["Accessibility Checker","Advanced Code Editor","Advanced Tables","Case Change","Checklist","Tiny Comments","Tiny Drive","Enhanced Media Embed","Format Painter","Link Checker","Mentions","MoxieManager","Page Embed","Permanent Pen","PowerPaste","Spell Checker Pro"],function(e){return"<li>"+U.translate(e)+"</li>"}).join(""),'<div data-mce-tabstop="1" tabindex="-1"><p><b>'+U.translate("Premium plugins:")+"</b></p><ul>"+t+'<li style="list-style: none; margin-top: 1em;"><a href="https://www.tiny.cloud/pricing/?utm_campaign=editor_referral&utm_medium=help_dialog&utm_source=tinymce" target="_blank">'+U.translate("Learn more...")+"</a></li></ul></div>")].join("")}]}},N=tinymce.util.Tools.resolve("tinymce.EditorManager"),L=function(){var e,t,n='<a href="https://www.tinymce.com/docs/changelog/?utm_campaign=editor_referral&utm_medium=help_dialog&utm_source=tinymce" target="_blank">TinyMCE '+(e=N.majorVersion,t=N.minorVersion,0===e.indexOf("@")?"X.X.X":e+"."+t)+"</a>";return{name:"versions",title:"Version",items:[{type:"htmlpanel",html:"<p>"+U.translate(["You are using {0}",n])+"</p>",presets:"document"}]}},B=function(){return{name:"keyboardnav",title:"Keyboard Navigation",items:[{type:"htmlpanel",presets:"document",html:"<h1>Editor UI keyboard navigation</h1>\n\n<h2>Activating keyboard navigation</h2>\n\n<p>The sections of the outer UI of the editor - the menubar, toolbar, sidebar and footer - are all keyboard navigable. As such, there are multiple ways to activate keyboard navigation:</p>\n<ul>\n  <li>Focus the menubar: Alt + F9 (Windows) or &#x2325;F9 (MacOS)</li>\n  <li>Focus the toolbar: Alt + F10 (Windows) or &#x2325;F10 (MacOS)</li>\n  <li>Focus the footer: Alt + F11 (Windows) or &#x2325;F11 (MacOS)</li>\n</ul>\n\n<p>Focusing the menubar or toolbar will start keyboard navigation at the first item in the menubar or toolbar, which will be highlighted with a gray background. Focusing the footer will start keyboard navigation at the first item in the element path, which will be highlighted with an underline. </p>\n\n<h2>Moving between UI sections</h2>\n\n<p>When keyboard navigation is active, pressing tab will move the focus to the next major section of the UI, where applicable. These sections are:</p>\n<ul>\n  <li>the menubar</li>\n  <li>each group of the toolbar </li>\n  <li>the sidebar</li>\n  <li>the element path in the footer </li>\n  <li>the wordcount toggle button in the footer </li>\n  <li>the branding link in the footer </li>\n</ul>\n\n<p>Pressing shift + tab will move backwards through the same sections, except when moving from the footer to the toolbar. Focusing the element path then pressing shift + tab will move focus to the first toolbar group, not the last.</p>\n\n<h2>Moving within UI sections</h2>\n\n<p>Keyboard navigation within UI sections can usually be achieved using the left and right arrow keys. This includes:</p>\n<ul>\n  <li>moving between menus in the menubar</li>\n  <li>moving between buttons in a toolbar group</li>\n  <li>moving between items in the element path</li>\n</ul>\n\n<p>In all these UI sections, keyboard navigation will cycle within the section. For example, focusing the last button in a toolbar group then pressing right arrow will move focus to the first item in the same toolbar group. </p>\n\n<h1>Executing buttons</h1>\n\n<p>To execute a button, navigate the selection to the desired button and hit space or enter.</p>\n\n<h1>Opening, navigating and closing menus</h1>\n\n<p>When focusing a menubar button or a toolbar button with a menu, pressing space, enter or down arrow will open the menu. When the menu opens the first item will be selected. To move up or down the menu, press the up or down arrow key respectively. This is the same for submenus, which can also be opened and closed using the left and right arrow keys.</p>\n\n<p>To close any active menu, hit the escape key. When a menu is closed the selection will be restored to its previous selection. This also works for closing submenus.</p>\n\n<h1>Context toolbars and menus</h1>\n\n<p>To focus an open context toolbar such as the table context toolbar, press Ctrl + F9 (Windows) or &#x2303;F9 (MacOS).</p>\n\n<p>Context toolbar navigation is the same as toolbar navigation, and context menu navigation is the same as standard menu navigation.</p>\n\n<h1>Dialog navigation</h1>\n\n<p>There are two types of dialog UIs in TinyMCE: tabbed dialogs and non-tabbed dialogs.</p>\n\n<p>When a non-tabbed dialog is opened, the first interactive component in the dialog will be focused. Users can navigate between interactive components by pressing tab. This includes any footer buttons. Navigation will cycle back to the first dialog component if tab is pressed while focusing the last component in the dialog. Pressing shift + tab will navigate backwards.</p>\n\n<p>When a tabbed dialog is opened, the first button in the tab menu is focused. Pressing tab will navigate to the first interactive component in that tab, and will cycle through the tab\u2019s components, the footer buttons, then back to the tab button. To switch to another tab, focus the tab button for the current tab, then use the arrow keys to cycle through the tab buttons.</p>"}]}};!function z(){t.add("help",function(e){var t=a({}),n=function(n){return{addTab:function(e){var t=n.get();t[e.name]=e,n.set(t)}}}(t),o=A(e,t);return s(e,o),i(e,o),e.shortcuts.add("Alt+0","Open help dialog","mceHelp"),n})}()}();
\ No newline at end of file
diff --git a/website/js/vendor/tinymce/js/tinymce/plugins/hr/plugin.min.js b/website/js/vendor/tinymce/js/tinymce/plugins/hr/plugin.min.js
new file mode 100644 (file)
index 0000000..9024d43
--- /dev/null
@@ -0,0 +1,9 @@
+/**
+ * Copyright (c) Tiny Technologies, Inc. All rights reserved.
+ * Licensed under the LGPL or a commercial license.
+ * For LGPL see License.txt in the project root for license information.
+ * For commercial licenses see https://www.tiny.cloud/
+ *
+ * Version: 5.1.5 (2019-12-19)
+ */
+!function(){"use strict";var n=tinymce.util.Tools.resolve("tinymce.PluginManager"),o=function(n){n.addCommand("InsertHorizontalRule",function(){n.execCommand("mceInsertContent",!1,"<hr />")})},t=function(n){n.ui.registry.addButton("hr",{icon:"horizontal-rule",tooltip:"Horizontal line",onAction:function(){return n.execCommand("InsertHorizontalRule")}}),n.ui.registry.addMenuItem("hr",{icon:"horizontal-rule",text:"Horizontal line",onAction:function(){return n.execCommand("InsertHorizontalRule")}})};!function e(){n.add("hr",function(n){o(n),t(n)})}()}();
\ No newline at end of file
diff --git a/website/js/vendor/tinymce/js/tinymce/plugins/image/plugin.min.js b/website/js/vendor/tinymce/js/tinymce/plugins/image/plugin.min.js
new file mode 100644 (file)
index 0000000..bced264
--- /dev/null
@@ -0,0 +1,9 @@
+/**
+ * Copyright (c) Tiny Technologies, Inc. All rights reserved.
+ * Licensed under the LGPL or a commercial license.
+ * For LGPL see License.txt in the project root for license information.
+ * For commercial licenses see https://www.tiny.cloud/
+ *
+ * Version: 5.1.5 (2019-12-19)
+ */
+!function(s){"use strict";function o(){}function a(t){return function(){return t}}function t(t){return t}function e(){return l}var n,r=tinymce.util.Tools.resolve("tinymce.PluginManager"),u=a(!1),c=a(!0),l=(n={fold:function(t,e){return t()},is:u,isSome:u,isNone:c,getOr:d,getOrThunk:f,getOrDie:function(t){throw new Error(t||"error: getOrDie called on none.")},getOrNull:a(null),getOrUndefined:a(undefined),or:d,orThunk:f,map:e,each:o,bind:e,exists:u,forall:c,filter:e,equals:i,equals_:i,toArray:function(){return[]},toString:a("none()")},Object.freeze&&Object.freeze(n),n);function i(t){return t.isNone()}function f(t){return t()}function d(t){return t}function m(e){return function(t){return function(t){if(null===t)return"null";var e=typeof t;return"object"==e&&(Array.prototype.isPrototypeOf(t)||t.constructor&&"Array"===t.constructor.name)?"array":"object"==e&&(String.prototype.isPrototypeOf(t)||t.constructor&&"String"===t.constructor.name)?"string":e}(t)===e}}function v(t){for(var e=[],n=0,r=t.length;n<r;++n){if(!U(t[n]))throw new Error("Arr.flatten item "+n+" was not an array, input: "+t);S.apply(e,t[n])}return e}var p,g,h,y,b=function(n){function t(){return i}function e(t){return t(n)}var r=a(n),i={fold:function(t,e){return e(n)},is:function(t){return n===t},isSome:c,isNone:u,getOr:r,getOrThunk:r,getOrDie:r,getOrNull:r,getOrUndefined:r,or:t,orThunk:t,map:function(t){return b(t(n))},each:function(t){t(n)},bind:e,exists:e,forall:e,filter:function(t){return t(n)?i:l},toArray:function(){return[n]},toString:function(){return"some("+n+")"},equals:function(t){return t.is(n)},equals_:function(t,e){return t.fold(u,function(t){return e(n,t)})}};return i},w={some:b,none:e,from:function(t){return null===t||t===undefined?l:b(t)}},T=m("string"),_=m("object"),U=m("array"),x=m("boolean"),A=m("function"),I=Array.prototype.slice,S=Array.prototype.push,D=(A(Array.from)&&Array.from,function(){return(D=Object.assign||function(t){for(var e,n=1,r=arguments.length;n<r;n++)for(var i in e=arguments[n])Object.prototype.hasOwnProperty.call(e,i)&&(t[i]=e[i]);return t}).apply(this,arguments)}),O={},C={exports:O};p=undefined,g=O,h=C,y=undefined,function(t){"object"==typeof g&&void 0!==h?h.exports=t():"function"==typeof p&&p.amd?p([],t):("undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this).EphoxContactWrapper=t()}(function(){return function s(o,a,u){function c(e,t){if(!a[e]){if(!o[e]){var n="function"==typeof y&&y;if(!t&&n)return n(e,!0);if(l)return l(e,!0);var r=new Error("Cannot find module '"+e+"'");throw r.code="MODULE_NOT_FOUND",r}var i=a[e]={exports:{}};o[e][0].call(i.exports,function(t){return c(o[e][1][t]||t)},i,i.exports,s,o,a,u)}return a[e].exports}for(var l="function"==typeof y&&y,t=0;t<u.length;t++)c(u[t]);return c}({1:[function(t,e,n){var r,i,o=e.exports={};function a(){throw new Error("setTimeout has not been defined")}function u(){throw new Error("clearTimeout has not been defined")}function c(t){if(r===setTimeout)return setTimeout(t,0);if((r===a||!r)&&setTimeout)return r=setTimeout,setTimeout(t,0);try{return r(t,0)}catch(e){try{return r.call(null,t,0)}catch(e){return r.call(this,t,0)}}}!function(){try{r="function"==typeof setTimeout?setTimeout:a}catch(t){r=a}try{i="function"==typeof clearTimeout?clearTimeout:u}catch(t){i=u}}();var l,s=[],f=!1,d=-1;function m(){f&&l&&(f=!1,l.length?s=l.concat(s):d=-1,s.length&&p())}function p(){if(!f){var t=c(m);f=!0;for(var e=s.length;e;){for(l=s,s=[];++d<e;)l&&l[d].run();d=-1,e=s.length}l=null,f=!1,function n(t){if(i===clearTimeout)return clearTimeout(t);if((i===u||!i)&&clearTimeout)return i=clearTimeout,clearTimeout(t);try{return i(t)}catch(e){try{return i.call(null,t)}catch(e){return i.call(this,t)}}}(t)}}function g(t,e){this.fun=t,this.array=e}function h(){}o.nextTick=function(t){var e=new Array(arguments.length-1);if(1<arguments.length)for(var n=1;n<arguments.length;n++)e[n-1]=arguments[n];s.push(new g(t,e)),1!==s.length||f||c(p)},g.prototype.run=function(){this.fun.apply(null,this.array)},o.title="browser",o.browser=!0,o.env={},o.argv=[],o.version="",o.versions={},o.on=h,o.addListener=h,o.once=h,o.off=h,o.removeListener=h,o.removeAllListeners=h,o.emit=h,o.prependListener=h,o.prependOnceListener=h,o.listeners=function(t){return[]},o.binding=function(t){throw new Error("process.binding is not supported")},o.cwd=function(){return"/"},o.chdir=function(t){throw new Error("process.chdir is not supported")},o.umask=function(){return 0}},{}],2:[function(t,f,e){(function(e){function r(){}function o(t){if("object"!=typeof this)throw new TypeError("Promises must be constructed via new");if("function"!=typeof t)throw new TypeError("not a function");this._state=0,this._handled=!1,this._value=undefined,this._deferreds=[],s(t,this)}function i(r,i){for(;3===r._state;)r=r._value;0!==r._state?(r._handled=!0,o._immediateFn(function(){var t=1===r._state?i.onFulfilled:i.onRejected;if(null!==t){var e;try{e=t(r._value)}catch(n){return void u(i.promise,n)}a(i.promise,e)}else(1===r._state?a:u)(i.promise,r._value)})):r._deferreds.push(i)}function a(t,e){try{if(e===t)throw new TypeError("A promise cannot be resolved with itself.");if(e&&("object"==typeof e||"function"==typeof e)){var n=e.then;if(e instanceof o)return t._state=3,t._value=e,void c(t);if("function"==typeof n)return void s(function r(t,e){return function(){t.apply(e,arguments)}}(n,e),t)}t._state=1,t._value=e,c(t)}catch(i){u(t,i)}}function u(t,e){t._state=2,t._value=e,c(t)}function c(t){2===t._state&&0===t._deferreds.length&&o._immediateFn(function(){t._handled||o._unhandledRejectionFn(t._value)});for(var e=0,n=t._deferreds.length;e<n;e++)i(t,t._deferreds[e]);t._deferreds=null}function l(t,e,n){this.onFulfilled="function"==typeof t?t:null,this.onRejected="function"==typeof e?e:null,this.promise=n}function s(t,e){var n=!1;try{t(function(t){n||(n=!0,a(e,t))},function(t){n||(n=!0,u(e,t))})}catch(r){if(n)return;n=!0,u(e,r)}}var t,n;t=this,n=setTimeout,o.prototype["catch"]=function(t){return this.then(null,t)},o.prototype.then=function(t,e){var n=new this.constructor(r);return i(this,new l(t,e,n)),n},o.all=function(t){var c=Array.prototype.slice.call(t);return new o(function(i,o){if(0===c.length)return i([]);var a=c.length;function u(e,t){try{if(t&&("object"==typeof t||"function"==typeof t)){var n=t.then;if("function"==typeof n)return void n.call(t,function(t){u(e,t)},o)}c[e]=t,0==--a&&i(c)}catch(r){o(r)}}for(var t=0;t<c.length;t++)u(t,c[t])})},o.resolve=function(e){return e&&"object"==typeof e&&e.constructor===o?e:new o(function(t){t(e)})},o.reject=function(n){return new o(function(t,e){e(n)})},o.race=function(i){return new o(function(t,e){for(var n=0,r=i.length;n<r;n++)i[n].then(t,e)})},o._immediateFn="function"==typeof e?function(t){e(t)}:function(t){n(t,0)},o._unhandledRejectionFn=function(t){"undefined"!=typeof console&&console&&console.warn("Possible Unhandled Promise Rejection:",t)},o._setImmediateFn=function(t){o._immediateFn=t},o._setUnhandledRejectionFn=function(t){o._unhandledRejectionFn=t},void 0!==f&&f.exports?f.exports=o:t.Promise||(t.Promise=o)}).call(this,t("timers").setImmediate)},{timers:3}],3:[function(c,t,l){(function(t,e){var r=c("process/browser.js").nextTick,n=Function.prototype.apply,i=Array.prototype.slice,o={},a=0;function u(t,e){this._id=t,this._clearFn=e}l.setTimeout=function(){return new u(n.call(setTimeout,window,arguments),clearTimeout)},l.setInterval=function(){return new u(n.call(setInterval,window,arguments),clearInterval)},l.clearTimeout=l.clearInterval=function(t){t.close()},u.prototype.unref=u.prototype.ref=function(){},u.prototype.close=function(){this._clearFn.call(window,this._id)},l.enroll=function(t,e){clearTimeout(t._idleTimeoutId),t._idleTimeout=e},l.unenroll=function(t){clearTimeout(t._idleTimeoutId),t._idleTimeout=-1},l._unrefActive=l.active=function(t){clearTimeout(t._idleTimeoutId);var e=t._idleTimeout;0<=e&&(t._idleTimeoutId=setTimeout(function(){t._onTimeout&&t._onTimeout()},e))},l.setImmediate="function"==typeof t?t:function(t){var e=a++,n=!(arguments.length<2)&&i.call(arguments,1);return o[e]=!0,r(function(){o[e]&&(n?t.apply(null,n):t.call(null),l.clearImmediate(e))}),e},l.clearImmediate="function"==typeof e?e:function(t){delete o[t]}}).call(this,c("timers").setImmediate,c("timers").clearImmediate)},{"process/browser.js":1,timers:3}],4:[function(t,e,n){var r=t("promise-polyfill"),i="undefined"!=typeof window?window:Function("return this;")();e.exports={boltExport:i.Promise||r}},{"promise-polyfill":2}]},{},[4])(4)});function P(t){s.setTimeout(function(){throw t},0)}function E(t){return vt(mt(t))}function L(a){return function(){for(var t=new Array(arguments.length),e=0;e<t.length;e++)t[e]=arguments[e];if(0===t.length)throw new Error("Can't merge zero objects");for(var n={},r=0;r<t.length;r++){var i=t[r];for(var o in i)wt.call(i,o)&&(n[o]=a(n[o],i[o]))}return n}}function N(t){var e=t.imageList.map(function(t){return{name:"images",type:"selectbox",label:"Image list",items:t}}),n=t.classList.map(function(t){return{name:"classes",type:"selectbox",label:"Class",items:t}});return v([[{name:"src",type:"urlinput",filetype:"image",label:"Source"}],e.toArray(),t.hasDescription?[{name:"alt",type:"input",label:"Image description"}]:[],t.hasImageTitle?[{name:"title",type:"input",label:"Image title"}]:[],t.hasDimensions?[{name:"dimensions",type:"sizeinput"}]:[],[{type:"grid",columns:2,items:v([n.toArray(),t.hasImageCaption?[{type:"label",label:"Caption",items:[{type:"checkbox",name:"caption",label:"Show caption"}]}]:[]])}]])}function j(t,e){return Math.max(parseInt(t,10),parseInt(e,10))}function R(t){return t.style.marginLeft&&t.style.marginRight&&t.style.marginLeft===t.style.marginRight?Et(t.style.marginLeft):""}function F(t){return t.style.marginTop&&t.style.marginBottom&&t.style.marginTop===t.style.marginBottom?Et(t.style.marginTop):""}function k(t){return t.style.borderWidth?Et(t.style.borderWidth):""}function z(t,e){return t.hasAttribute(e)?t.getAttribute(e):""}function M(t,e){return t.style[e]?t.style[e]:""}function H(t){return null!==t.parentNode&&"FIGURE"===t.parentNode.nodeName}function B(t,e,n){t.setAttribute(e,n)}function G(t){H(t)?function(t){var e=t.parentNode;zt.insertAfter(t,e),zt.remove(e)}(t):function(t){var e=zt.create("figure",{"class":"image"});zt.insertAfter(e,t),e.appendChild(t),e.appendChild(zt.create("figcaption",{contentEditable:"true"},"Caption")),e.contentEditable="false"}(t)}function W(t,e){var n=t.getAttribute("style"),r=e(null!==n?n:"");0<r.length?(t.setAttribute("style",r),t.setAttribute("data-mce-style",r)):t.removeAttribute("style")}function q(t,r){return function(t,e,n){t.style[e]?(t.style[e]=Lt(n),W(t,r)):B(t,e,n)}}function $(t,e){return t.style[e]?Et(t.style[e]):z(t,e)}function J(t,e){var n=Lt(e);t.style.marginLeft=n,t.style.marginRight=n}function V(t,e){var n=Lt(e);t.style.marginTop=n,t.style.marginBottom=n}function X(t,e){var n=Lt(e);t.style.borderWidth=n}function Z(t,e){t.style.borderStyle=e}function K(t){return"FIGURE"===t.nodeName}function Q(t,e){var n=s.document.createElement("img");return B(n,"style",e.style),!R(n)&&""===e.hspace||J(n,e.hspace),!F(n)&&""===e.vspace||V(n,e.vspace),!k(n)&&""===e.border||X(n,e.border),!function(t){return M(t,"borderStyle")}(n)&&""===e.borderStyle||Z(n,e.borderStyle),t(n.getAttribute("style"))}function Y(t,e){return{src:z(e,"src"),alt:z(e,"alt"),title:z(e,"title"),width:$(e,"width"),height:$(e,"height"),"class":z(e,"class"),style:t(z(e,"style")),caption:H(e),hspace:R(e),vspace:F(e),border:k(e),borderStyle:M(e,"borderStyle")}}function tt(t,e,n,r,i){n[r]!==e[r]&&i(t,r,n[r])}function et(r,i){return function(t,e,n){r(t,n),W(t,i)}}function nt(t,e){var n=t.dom.styles.parse(e),r=Nt(n),i=t.dom.styles.parse(t.dom.styles.serialize(r));return t.dom.styles.serialize(i)}function rt(t){var e=t.selection.getNode(),n=t.dom.getParent(e,"figure.image");return n?t.dom.select("img",n)[0]:e&&("IMG"!==e.nodeName||kt(e))?null:e}function it(e,t){var n=e.dom,r=n.getParent(t.parentNode,function(t){return e.schema.getTextBlockElements()[t.nodeName]},e.getBody());return r?n.split(r,t):t}function ot(e,t){var n=function(t,e){var n=s.document.createElement("img");if(Mt(t,_t(e,{caption:!1}),n),B(n,"alt",e.alt),e.caption){var r=zt.create("figure",{"class":"image"});return r.appendChild(n),r.appendChild(zt.create("figcaption",{contentEditable:"true"},"Caption")),r.contentEditable="false",r}return n}(function(t){return nt(e,t)},t);e.dom.setAttrib(n,"data-mce-id","__mcenew"),e.focus(),e.selection.setContent(n.outerHTML);var r=e.dom.select('*[data-mce-id="__mcenew"]')[0];if(e.dom.setAttrib(r,"data-mce-id",null),K(r)){var i=it(e,r);e.selection.select(i)}else e.selection.select(r)}function at(t,e){var n=rt(t);n?e.src?function(e,t){var n=rt(e);if(Mt(function(t){return nt(e,t)},t,n),function(t,e){t.dom.setAttrib(e,"src",e.getAttribute("src"))}(e,n),K(n.parentNode)){var r=n.parentNode;it(e,r),e.selection.select(n.parentNode)}else e.selection.select(n),Rt(e,t,n)}(t,e):function(t,e){if(e){var n=t.dom.is(e.parentNode,"figure.image")?e.parentNode:e;t.dom.remove(n),t.focus(),t.nodeChanged(),t.dom.isEmpty(t.getBody())&&(t.setContent(""),t.selection.setCursorLocation())}}(t,n):e.src&&ot(t,e)}function ut(t){return T(t.value)?t.value:""}function ct(e){return void 0===e&&(e=ut),function(t){return t?w.from(t).map(function(t){return Bt(t,e)}):w.none()}}var lt=C.exports.boltExport,st=function(t){var n=w.none(),e=[],r=function(t){i()?a(t):e.push(t)},i=function(){return n.isSome()},o=function(t){!function(t,e){for(var n=0,r=t.length;n<r;n++){e(t[n],n)}}(t,a)},a=function(e){n.each(function(t){s.setTimeout(function(){e(t)},0)})};return t(function(t){n=w.some(t),o(e),e=[]}),{get:r,map:function(n){return st(function(e){r(function(t){e(n(t))})})},isReady:i}},ft={nu:st,pure:function(e){return st(function(t){t(e)})}},dt=function(n){function t(t){n().then(t,P)}return{map:function(t){return dt(function(){return n().then(t)})},bind:function(e){return dt(function(){return n().then(function(t){return e(t).toPromise()})})},anonBind:function(t){return dt(function(){return n().then(function(){return t.toPromise()})})},toLazy:function(){return ft.nu(t)},toCached:function(){var t=null;return dt(function(){return null===t&&(t=n()),t})},toPromise:n,get:t}},mt=function(t){return dt(function(){return new lt(t)})},pt=function(t){return dt(function(){return lt.resolve(t)})},gt=function(n){return{is:function(t){return n===t},isValue:c,isError:u,getOr:a(n),getOrThunk:a(n),getOrDie:a(n),or:function(t){return gt(n)},orThunk:function(t){return gt(n)},fold:function(t,e){return e(n)},map:function(t){return gt(t(n))},mapError:function(t){return gt(n)},each:function(t){t(n)},bind:function(t){return t(n)},exists:function(t){return t(n)},forall:function(t){return t(n)},toOption:function(){return w.some(n)}}},ht=function(n){return{is:u,isValue:u,isError:c,getOr:t,getOrThunk:function(t){return t()},getOrDie:function(){return function(t){return function(){throw new Error(t)}}(String(n))()},or:function(t){return t},orThunk:function(t){return t()},fold:function(t,e){return t(n)},map:function(t){return ht(n)},mapError:function(t){return ht(t(n))},each:o,bind:function(t){return ht(n)},exists:u,forall:c,toOption:w.none}},yt={value:gt,error:ht,fromOption:function(t,e){return t.fold(function(){return ht(e)},gt)}},vt=function(o){return D(D({},o),{toCached:function(){return vt(o.toCached())},bindFuture:function(e){return vt(o.bind(function(t){return t.fold(function(t){return pt(yt.error(t))},function(t){return e(t)})}))},bindResult:function(e){return vt(o.map(function(t){return t.bind(e)}))},mapResult:function(e){return vt(o.map(function(t){return t.map(e)}))},mapError:function(e){return vt(o.map(function(t){return t.mapError(e)}))},foldResult:function(e,n){return o.map(function(t){return t.fold(e,n)})},withTimeout:function(t,i){return vt(mt(function(e){var n=!1,r=s.setTimeout(function(){n=!0,e(yt.error(i()))},t);o.get(function(t){n||(s.clearTimeout(r),e(t))})}))}})},bt=E,wt=Object.prototype.hasOwnProperty,Tt=L(function(t,e){return _(t)&&_(e)?Tt(t,e):e}),_t=L(function(t,e){return e}),Ut=function(t){return{title:"General",name:"general",items:N(t)}},xt=N,At=tinymce.util.Tools.resolve("tinymce.dom.DOMUtils"),It=tinymce.util.Tools.resolve("tinymce.util.Promise"),St=tinymce.util.Tools.resolve("tinymce.util.XHR"),Dt=function(t){return t.getParam("images_upload_url","","string")},Ot=function(t){return t.getParam("images_upload_handler",undefined,"function")},Ct={hasDimensions:function(t){return t.getParam("image_dimensions",!0,"boolean")},hasUploadTab:function(t){return t.getParam("image_uploadtab",!0,"boolean")},hasAdvTab:function(t){return t.getParam("image_advtab",!1,"boolean")},getPrependUrl:function(t){return t.getParam("image_prepend_url","","string")},getClassList:function(t){return t.getParam("image_class_list")},hasDescription:function(t){return t.getParam("image_description",!0,"boolean")},hasImageTitle:function(t){return t.getParam("image_title",!1,"boolean")},hasImageCaption:function(t){return t.getParam("image_caption",!1,"boolean")},getImageList:function(t){return t.getParam("image_list",!1)},hasUploadUrl:function(t){return!!Dt(t)},hasUploadHandler:function(t){return!!Ot(t)},getUploadUrl:Dt,getUploadHandler:Ot,getUploadBasePath:function(t){return t.getParam("images_upload_base_path",undefined,"string")},getUploadCredentials:function(t){return t.getParam("images_upload_credentials",!1,"boolean")}},Pt=function(t,e){function n(t){r.parentNode&&r.parentNode.removeChild(r),e(t)}var r=s.document.createElement("img");r.onload=function(){var t={width:j(r.width,r.clientWidth),height:j(r.height,r.clientHeight)};n(yt.value(t))},r.onerror=function(){n(yt.error("Failed to get image dimensions for: "+t))};var i=r.style;i.visibility="hidden",i.position="fixed",i.bottom=i.left="0px",i.width=i.height="auto",s.document.body.appendChild(r),r.src=t},Et=function(t){return t=t&&t.replace(/px$/,"")},Lt=function(t){return 0<t.length&&/^[0-9]+$/.test(t)&&(t+="px"),t},Nt=function(t){if(t.margin){var e=String(t.margin).split(" ");switch(e.length){case 1:t["margin-top"]=t["margin-top"]||e[0],t["margin-right"]=t["margin-right"]||e[0],t["margin-bottom"]=t["margin-bottom"]||e[0],t["margin-left"]=t["margin-left"]||e[0];break;case 2:t["margin-top"]=t["margin-top"]||e[0],t["margin-right"]=t["margin-right"]||e[1],t["margin-bottom"]=t["margin-bottom"]||e[0],t["margin-left"]=t["margin-left"]||e[1];break;case 3:t["margin-top"]=t["margin-top"]||e[0],t["margin-right"]=t["margin-right"]||e[1],t["margin-bottom"]=t["margin-bottom"]||e[2],t["margin-left"]=t["margin-left"]||e[1];break;case 4:t["margin-top"]=t["margin-top"]||e[0],t["margin-right"]=t["margin-right"]||e[1],t["margin-bottom"]=t["margin-bottom"]||e[2],t["margin-left"]=t["margin-left"]||e[3]}delete t.margin}return t},jt=function(t,e){var n=Ct.getImageList(t);"string"==typeof n?St.send({url:n,success:function(t){e(JSON.parse(t))}}):"function"==typeof n?n(e):e(n)},Rt=function(t,e,n){function r(){n.onload=n.onerror=null,t.selection&&(t.selection.select(n),t.nodeChanged())}n.onload=function(){e.width||e.height||!Ct.hasDimensions(t)||t.dom.setAttribs(n,{width:String(n.clientWidth),height:String(n.clientHeight)}),r()},n.onerror=r},Ft=function(r){return new It(function(t,e){var n=new s.FileReader;n.onload=function(){t(n.result)},n.onerror=function(){e(n.error.message)},n.readAsDataURL(r)})},kt=function(t){return"IMG"===t.nodeName&&(t.hasAttribute("data-mce-object")||t.hasAttribute("data-mce-placeholder"))},zt=At.DOM,Mt=function(t,e,n){var r=Y(t,n);tt(n,r,e,"caption",function(t,e,n){return G(t)}),tt(n,r,e,"src",B),tt(n,r,e,"alt",B),tt(n,r,e,"title",B),tt(n,r,e,"width",q(0,t)),tt(n,r,e,"height",q(0,t)),tt(n,r,e,"class",B),tt(n,r,e,"style",et(function(t,e){return B(t,"style",e)},t)),tt(n,r,e,"hspace",et(J,t)),tt(n,r,e,"vspace",et(V,t)),tt(n,r,e,"border",et(X,t)),tt(n,r,e,"borderStyle",et(Z,t))},Ht=tinymce.util.Tools.resolve("tinymce.util.Tools"),Bt=function(t,i){var o=[];return Ht.each(t,function(t){var e=T(t.text)?t.text:T(t.title)?t.title:"";if(t.menu!==undefined){var n=Bt(t.menu,i);o.push({text:e,items:n})}else{var r=i(t);o.push({text:e,value:r})}}),o},Gt=function(t,e){return function(t,e){for(var n=0;n<t.length;n++){var r=e(t[n],n);if(r.isSome())return r}return w.none()}(t,function(t){return function(t){return Object.prototype.hasOwnProperty.call(t,"items")}(t)?Gt(t.items,e):t.value===e?w.some(t):w.none()})},Wt=ct,qt=function(t){return ct(ut)(t)},$t=function(t,e){return t.bind(function(t){return Gt(t,e)})};function Jt(a){function e(t,e,n,r){var i,o;(i=new s.XMLHttpRequest).open("POST",a.url),i.withCredentials=a.credentials,i.upload.onprogress=function(t){r(t.loaded/t.total*100)},i.onerror=function(){n("Image upload failed due to a XHR Transport error. Code: "+i.status)},i.onload=function(){var t;i.status<200||300<=i.status?n("HTTP Error: "+i.status):(t=JSON.parse(i.responseText))&&"string"==typeof t.location?e(function(t,e){return t?t.replace(/\/$/,"")+"/"+e.replace(/^\//,""):e}(a.basePath,t.location)):n("Invalid JSON: "+i.responseText)},(o=new s.FormData).append("file",t.blob(),t.filename()),i.send(o)}return a=Ht.extend({credentials:!1,handler:e},a),{upload:function(t){return!a.url&&function(t){return t===e}(a.handler)?It.reject("Upload url missing from the settings."):function(r,i){return new It(function(t,e){try{i(r,t,e,o)}catch(n){e(n.message)}})}(t,a.handler)}}}function Vt(n){var r=Wt(function(t){return n.convertURL(t.value||t.url,"src")}),t=mt(function(e){jt(n,function(t){e(r(t).map(function(t){return v([[{text:"None",value:""}],t])}))})}),e=qt(Ct.getClassList(n)),i=Ct.hasAdvTab(n),o=Ct.hasUploadTab(n),a=Ct.hasUploadUrl(n),u=Ct.hasUploadHandler(n),c=function(e){var t=rt(e);return t?Y(function(t){return nt(e,t)},t):{src:"",alt:"",title:"",width:"",height:"","class":"",style:"",caption:!1,hspace:"",vspace:"",border:"",borderStyle:""}}(n),l=Ct.hasDescription(n),s=Ct.hasImageTitle(n),f=Ct.hasDimensions(n),d=Ct.hasImageCaption(n),m=Ct.getUploadUrl(n),p=Ct.getUploadBasePath(n),g=Ct.getUploadCredentials(n),h=Ct.getUploadHandler(n),y=w.some(Ct.getPrependUrl(n)).filter(function(t){return T(t)&&0<t.length});return t.map(function(t){return{image:c,imageList:t,classList:e,hasAdvTab:i,hasUploadTab:o,hasUploadUrl:a,hasUploadHandler:u,hasDescription:l,hasImageTitle:s,hasDimensions:f,hasImageCaption:d,url:m,basePath:p,credentials:g,handler:h,prependURL:y}})}function Xt(t){return{src:{value:t.src,meta:{}},images:t.src,alt:t.alt,title:t.title,dimensions:{width:t.width,height:t.height},classes:t["class"],caption:t.caption,style:t.style,vspace:t.vspace,border:t.border,hspace:t.hspace,borderstyle:t.borderStyle,fileinput:[]}}function Zt(t){return{src:t.src.value,alt:t.alt,title:t.title,width:t.dimensions.width,height:t.dimensions.height,"class":t.classes,style:t.style,caption:t.caption,hspace:t.hspace,vspace:t.vspace,border:t.border,borderStyle:t.borderstyle}}function Kt(t,e){var n=e.getData();(function(t,e){return/^(?:[a-zA-Z]+:)?\/\//.test(e)?w.none():t.prependURL.bind(function(t){return e.substring(0,t.length)!==t?w.some(t+e):w.none()})})(t,n.src.value).each(function(t){e.setData({src:{value:t,meta:n.src.meta}})})}function Qt(t,e){var n=e.getData(),r=n.src.meta;if(r!==undefined){var i=Tt({},n);!function(t,e,n){t.hasDescription&&T(n.alt)&&(e.alt=n.alt),t.hasImageTitle&&T(n.title)&&(e.title=n.title),t.hasDimensions&&(T(n.width)&&(e.dimensions.width=n.width),T(n.height)&&(e.dimensions.height=n.height)),T(n["class"])&&$t(t.classList,n["class"]).each(function(t){e.classes=t.value}),t.hasImageCaption&&x(n.caption)&&(e.caption=n.caption),t.hasAdvTab&&(T(n.vspace)&&(e.vspace=n.vspace),T(n.border)&&(e.border=n.border),T(n.hspace)&&(e.hspace=n.hspace),T(n.borderstyle)&&(e.borderstyle=n.borderstyle))}(t,i,r),e.setData(i)}}function Yt(t,e,n,r){Kt(e,r),Qt(e,r),function(t,e,n,r){var i=r.getData(),o=i.src.value,a=i.src.meta||{};a.width||a.height||!e.hasDimensions||t.imageSize(o).get(function(t){t.each(function(t){n.open&&r.setData({dimensions:t})})})}(t,e,n,r),function(t,e,n){var r=n.getData(),i=$t(t.imageList,r.src.value);e.prevImage=i,n.setData({images:i.map(function(t){return t.value}).getOr("")})}(e,n,r)}function te(t,e,n){var r=Nt(t(n.style)),i=Tt({},n);return i.vspace=function(t){return t["margin-top"]&&t["margin-bottom"]&&t["margin-top"]===t["margin-bottom"]?Et(String(t["margin-top"])):""}(r),i.hspace=function(t){return t["margin-right"]&&t["margin-left"]&&t["margin-right"]===t["margin-left"]?Et(String(t["margin-right"])):""}(r),i.border=function(t){return t["border-width"]?Et(String(t["border-width"])):""}(r),i.borderstyle=function(t){return t["border-style"]?String(t["border-style"]):""}(r),i.style=function(t,e,n){return e(t(e(n)))}(t,e,r),i}function ee(a,u,c,l){var t=l.getData();l.block("Uploading image"),function(t){return 0===t.length?w.none():w.some(t[0])}(t.fileinput).fold(function(){l.unblock()},function(n){function r(){l.unblock(),s.URL.revokeObjectURL(i)}var i=s.URL.createObjectURL(n),o=Jt({url:u.url,basePath:u.basePath,credentials:u.credentials,handler:u.handler});Ft(n).then(function(t){var e=a.createBlobCache(n,i,t);o.upload(e).then(function(t){l.setData({src:{value:t,meta:{}}}),l.showTab("general"),Yt(a,u,c,l),r()})["catch"](function(t){r(),a.alertErr(l,t)})})})}function ne(n,r,i){return function(t,e){"src"===e.name?Yt(n,r,i,t):"images"===e.name?function(t,e,n,r){var i=r.getData(),o=$t(e.imageList,i.images);o.each(function(t){""===i.alt||n.prevImage.map(function(t){return t.text===i.alt}).getOr(!1)?""===t.value?r.setData({src:t,alt:n.prevAlt}):r.setData({src:t,alt:t.text}):r.setData({src:t})}),n.prevImage=o,Yt(t,e,n,r)}(n,r,i,t):"alt"===e.name?i.prevAlt=t.getData().alt:"style"===e.name?function(t,e){var n=e.getData(),r=te(t.parseStyle,t.serializeStyle,n);e.setData(r)}(n,t):"vspace"===e.name||"hspace"===e.name||"border"===e.name||"borderstyle"===e.name?function(t,e,n){var r=Tt(Xt(e.image),n.getData()),i=Q(t.normalizeCss,Zt(r));n.setData({style:i})}(n,r,t):"fileinput"===e.name&&ee(n,r,i,t)}}function re(n){return function(t){var e=function(t){return{prevImage:$t(t.imageList,t.image.src),prevAlt:t.image.alt,open:!0}}(t);return{title:"Insert/Edit Image",size:"normal",body:function(t){return t.hasAdvTab||t.hasUploadUrl||t.hasUploadHandler?{type:"tabpanel",tabs:v([[Ut(t)],t.hasAdvTab?[ae(t)]:[],t.hasUploadTab&&(t.hasUploadUrl||t.hasUploadHandler)?[ue(t)]:[]])}:{type:"panel",items:xt(t)}}(t),buttons:[{type:"cancel",name:"cancel",text:"Cancel"},{type:"submit",name:"save",text:"Save",primary:!0}],initialData:Xt(t.image),onSubmit:n.onSubmit(t),onChange:ne(n,t,e),onClose:function(t){return function(){t.open=!1}}(e)}}}function ie(e){var t={onSubmit:function(r){return function(n){return function(t){var e=Tt(Xt(n.image),t.getData());r.undoManager.transact(function(){at(r,Zt(e))}),r.editorUpload.uploadImagesAuto(),t.close()}}}(e),imageSize:function(e){return function(t){return bt(function(n){Pt(e.documentBaseURI.toAbsolute(t),function(t){var e=t.map(function(t){return{width:String(t.width),height:String(t.height)}});n(e)})})}}(e),createBlobCache:function(r){return function(t,e,n){return r.editorUpload.blobCache.create({blob:t,blobUri:e,name:t.name?t.name.replace(/\.[^\.]+$/,""):null,base64:n.split(",")[1]})}}(e),alertErr:function(n){return function(t,e){n.windowManager.alert(e,t.close)}}(e),normalizeCss:function(e){return function(t){return nt(e,t)}}(e),parseStyle:function(e){return function(t){return e.dom.parseStyle(t)}}(e),serializeStyle:function(n){return function(t,e){return n.dom.serializeStyle(t,e)}}(e)};return{open:function(){return Vt(e).map(re(t)).get(function(t){e.windowManager.open(t)})}}}function oe(o){return function(t){for(var e,n=t.length,r=function(t){t.attr("contenteditable",o?"true":null)};n--;){var i=t[n];void 0,(e=i.attr("class"))&&/\bimage\b/.test(e)&&(i.attr("contenteditable",o?"false":null),Ht.each(i.getAll("figcaption"),r))}}}var ae=function(t){return{title:"Advanced",name:"advanced",items:[{type:"input",label:"Style",name:"style"},{type:"grid",columns:2,items:[{type:"input",label:"Vertical space",name:"vspace",inputMode:"numeric"},{type:"input",label:"Horizontal space",name:"hspace",inputMode:"numeric"},{type:"input",label:"Border width",name:"border",inputMode:"numeric"},{type:"selectbox",name:"borderstyle",label:"Border style",items:[{text:"Select...",value:""},{text:"Solid",value:"solid"},{text:"Dotted",value:"dotted"},{text:"Dashed",value:"dashed"},{text:"Double",value:"double"},{text:"Groove",value:"groove"},{text:"Ridge",value:"ridge"},{text:"Inset",value:"inset"},{text:"Outset",value:"outset"},{text:"None",value:"none"},{text:"Hidden",value:"hidden"}]}]}]}},ue=function(t){return{title:"Upload",name:"upload",items:[{type:"dropzone",name:"fileinput"}]}},ce=function(t){t.addCommand("mceImage",ie(t).open)},le=function(t){t.on("PreInit",function(){t.parser.addNodeFilter("figure",oe(!0)),t.serializer.addNodeFilter("figure",oe(!1))})},se=function(e){e.ui.registry.addToggleButton("image",{icon:"image",tooltip:"Insert/edit image",onAction:ie(e).open,onSetup:function(t){return e.selection.selectorChangedWithUnbind("img:not([data-mce-object],[data-mce-placeholder]),figure.image",t.setActive).unbind}}),e.ui.registry.addMenuItem("image",{icon:"image",text:"Image...",onAction:ie(e).open}),e.ui.registry.addContextMenu("image",{update:function(t){return K(t)||function(t){return"IMG"===t.nodeName}(t)&&!kt(t)?["image"]:[]}})};!function fe(){r.add("image",function(t){le(t),se(t),ce(t)})}()}(window);
\ No newline at end of file
diff --git a/website/js/vendor/tinymce/js/tinymce/plugins/imagetools/plugin.min.js b/website/js/vendor/tinymce/js/tinymce/plugins/imagetools/plugin.min.js
new file mode 100644 (file)
index 0000000..7624dac
--- /dev/null
@@ -0,0 +1,9 @@
+/**
+ * Copyright (c) Tiny Technologies, Inc. All rights reserved.
+ * Licensed under the LGPL or a commercial license.
+ * For LGPL see License.txt in the project root for license information.
+ * For commercial licenses see https://www.tiny.cloud/
+ *
+ * Version: 5.1.5 (2019-12-19)
+ */
+!function(v){"use strict";function e(){}function n(){return c}var t,r=function(e){function n(){return t}var t=e;return{get:n,set:function(e){t=e},clone:function(){return r(n())}}},o=tinymce.util.Tools.resolve("tinymce.PluginManager"),i=tinymce.util.Tools.resolve("tinymce.util.Tools"),d=function(e){return function(){return e}},u=d(!1),a=d(!0),c=(t={fold:function(e,n){return e()},is:u,isSome:u,isNone:a,getOr:l,getOrThunk:f,getOrDie:function(e){throw new Error(e||"error: getOrDie called on none.")},getOrNull:d(null),getOrUndefined:d(undefined),or:l,orThunk:f,map:n,each:e,bind:n,exists:u,forall:a,filter:n,equals:s,equals_:s,toArray:function(){return[]},toString:d("none()")},Object.freeze&&Object.freeze(t),t);function s(e){return e.isNone()}function f(e){return e()}function l(e){return e}var m=function(t){function e(){return o}function n(e){return e(t)}var r=d(t),o={fold:function(e,n){return n(t)},is:function(e){return t===e},isSome:a,isNone:u,getOr:r,getOrThunk:r,getOrDie:r,getOrNull:r,getOrUndefined:r,or:e,orThunk:e,map:function(e){return m(e(t))},each:function(e){e(t)},bind:n,exists:n,forall:n,filter:function(e){return e(t)?o:c},toArray:function(){return[t]},toString:function(){return"some("+t+")"},equals:function(e){return e.is(t)},equals_:function(e,n){return e.fold(u,function(e){return n(t,e)})}};return o},p={some:m,none:n,from:function(e){return null===e||e===undefined?c:m(e)}};function h(e,n){return y(v.document.createElement("canvas"),e,n)}function g(e){var n=h(e.width,e.height);return w(n).drawImage(e,0,0),n}function w(e){return e.getContext("2d")}function y(e,n,t){return e.width=n,e.height=t,e}var b,E,O=window.Promise?window.Promise:(b=T.immediateFn||"function"==typeof window.setImmediate&&window.setImmediate||function(e){v.setTimeout(e,1)},E=Array.isArray||function(e){return"[object Array]"===Object.prototype.toString.call(e)},T.prototype["catch"]=function(e){return this.then(null,e)},T.prototype.then=function(t,r){var o=this;return new T(function(e,n){N.call(o,new R(t,r,e,n))})},T.all=function(){for(var e=[],n=0;n<arguments.length;n++)e[n]=arguments[n];var c=Array.prototype.slice.call(1===e.length&&E(e[0])?e[0]:e);return new T(function(o,i){if(0===c.length)return o([]);var u=c.length;function a(n,e){try{if(e&&("object"==typeof e||"function"==typeof e)){var t=e.then;if("function"==typeof t)return void t.call(e,function(e){a(n,e)},i)}c[n]=e,0==--u&&o(c)}catch(r){i(r)}}for(var e=0;e<c.length;e++)a(e,c[e])})},T.resolve=function(n){return n&&"object"==typeof n&&n.constructor===T?n:new T(function(e){e(n)})},T.reject=function(t){return new T(function(e,n){n(t)})},T.race=function(o){return new T(function(e,n){for(var t=0,r=o;t<r.length;t++)r[t].then(e,n)})},T);function T(e){if("object"!=typeof this)throw new TypeError("Promises must be constructed via new");if("function"!=typeof e)throw new TypeError("not a function");this._state=null,this._value=null,this._deferreds=[],A(e,I(S,this),I(_,this))}function I(e,n){return function(){return e.apply(n,arguments)}}function N(r){var o=this;null!==this._state?b(function(){var e=o._state?r.onFulfilled:r.onRejected;if(null!==e){var n;try{n=e(o._value)}catch(t){return void r.reject(t)}r.resolve(n)}else(o._state?r.resolve:r.reject)(o._value)}):this._deferreds.push(r)}function S(e){try{if(e===this)throw new TypeError("A promise cannot be resolved with itself.");if(e&&("object"==typeof e||"function"==typeof e)){var n=e.then;if("function"==typeof n)return void A(I(n,e),I(S,this),I(_,this))}this._state=!0,this._value=e,x.call(this)}catch(t){_.call(this,t)}}function _(e){this._state=!1,this._value=e,x.call(this)}function x(){for(var e=0,n=this._deferreds;e<n.length;e++){var t=n[e];N.call(this,t)}this._deferreds=[]}function R(e,n,t,r){this.onFulfilled="function"==typeof e?e:null,this.onRejected="function"==typeof n?n:null,this.resolve=t,this.reject=r}function A(e,n,t){var r=!1;try{e(function(e){r||(r=!0,n(e))},function(e){r||(r=!0,t(e))})}catch(o){if(r)return;r=!0,t(o)}}function C(e){var n=e.src;return 0===n.indexOf("data:")?U(n):function t(r){return new O(function(e,t){var n=new v.XMLHttpRequest;n.open("GET",r,!0),n.responseType="blob",n.onload=function(){200===this.status&&e(this.response)},n.onerror=function(){var e,n=this;t(0===this.status?((e=new Error("No access to download image")).code=18,e.name="SecurityError",e):new Error("Error "+n.status+" downloading image"))},n.send()})}(n)}function D(a){return new O(function(e,n){var t=v.URL.createObjectURL(a),r=new v.Image,o=function(){r.removeEventListener("load",i),r.removeEventListener("error",u)};function i(){o(),e(r)}function u(){o(),n("Unable to load data of type "+a.type+": "+t)}r.addEventListener("load",i),r.addEventListener("error",u),r.src=t,r.complete&&i()})}function U(t){return new O(function(e,n){(function g(e){var n=e.split(","),t=/data:([^;]+)/.exec(n[0]);if(!t)return p.none();for(var r=t[1],o=n[1],i=v.atob(o),u=i.length,a=Math.ceil(u/1024),c=new Array(a),s=0;s<a;++s){for(var f=1024*s,l=Math.min(1024+f,u),d=new Array(l-f),m=f,h=0;m<l;++h,++m)d[h]=i[m].charCodeAt(0);c[s]=new Uint8Array(d)}return p.some(new v.Blob(c,{type:r}))})(t).fold(function(){n("uri is not base64: "+t)},e)})}function L(e,r,o){return r=r||"image/png",v.HTMLCanvasElement.prototype.toBlob?new O(function(n,t){e.toBlob(function(e){e?n(e):t()},r,o)}):U(e.toDataURL(r,o))}function k(e){return D(e).then(function(e){!function t(e){v.URL.revokeObjectURL(e.src)}(e);var n=h(function r(e){return e.naturalWidth||e.width}(e),function o(e){return e.naturalHeight||e.height}(e));return w(n).drawImage(e,0,0),n})}function j(e,n,t){var r=n.type;function o(n,t){return e.then(function(e){return function r(e,n,t){return n=n||"image/png",e.toDataURL(n,t)}(e,n,t)})}return{getType:d(r),toBlob:function i(){return O.resolve(n)},toDataURL:function u(){return t},toBase64:function a(){return t.split(",")[1]},toAdjustedBlob:function c(n,t){return e.then(function(e){return L(e,n,t)})},toAdjustedDataURL:o,toAdjustedBase64:function s(e,n){return o(e,n).then(function(e){return e.split(",")[1]})},toCanvas:function f(){return e.then(g)}}}function P(n){return function e(t){return new O(function(e){var n=new v.FileReader;n.onloadend=function(){e(n.result)},n.readAsDataURL(t)})}(n).then(function(e){return j(k(n),n,e)})}function M(n,e){return L(n,e).then(function(e){return j(O.resolve(n),e,n.toDataURL())})}function B(n,t){return n.toCanvas().then(function(e){return function a(e,n,t){var r=h(e.width,e.height),o=w(r),i=0,u=0;90!==(t=t<0?360+t:t)&&270!==t||y(r,r.height,r.width);90!==t&&180!==t||(i=r.width);270!==t&&180!==t||(u=r.height);return o.translate(i,u),o.rotate(t*Math.PI/180),o.drawImage(e,0,0),M(r,n)}(e,n.getType(),t)})}function F(n,t){return n.toCanvas().then(function(e){return function i(e,n,t){var r=h(e.width,e.height),o=w(r);"v"===t?(o.scale(1,-1),o.drawImage(e,0,-r.height)):(o.scale(-1,1),o.drawImage(e,-r.width,0));return M(r,n)}(e,n.getType(),t)})}function z(e){return P(e)}var H=tinymce.util.Tools.resolve("tinymce.util.Delay"),q=tinymce.util.Tools.resolve("tinymce.util.Promise"),$=tinymce.util.Tools.resolve("tinymce.util.URI");function X(e,n){for(var t=0,r=e.length;t<r;t++){var o=e[t];if(n(o,t))return p.some(o)}return p.none()}function W(e){return null!==e&&e!==undefined}function G(n){return"ImageProxy HTTP error: "+X(ue,function(e){return n===e.code}).fold(d("Unknown ImageProxy error"),function(e){return e.message})}function Y(e){var n=G(e);return q.reject(n)}function V(n){return X(ae,function(e){return e.type===n}).fold(d("Unknown service error"),function(e){return e.message})}function J(e,n){return re(n).then(function(e){var n=function(e){var n=ie(e),t=te(n,["error","type"]);return"ImageProxy Service error: "+(t?V(t):"Invalid JSON in service error message")}(e);return q.reject(n)})}function K(e,n){var t={"Content-Type":"application/json;charset=UTF-8","tiny-api-key":n};return oe(function(e,n){var t=-1===e.indexOf("?")?"?":"&";return/[?&]apiKey=/.test(e)||!n?e:e+t+"apiKey="+encodeURIComponent(n)}(e,n),t,!1).then(function(e){return e.status<200||300<=e.status?ce(e.status,e.blob):q.resolve(e.blob)})}var Q,Z={getImageSize:function wn(e){var n,t;function r(e){return/^[0-9\.]+px$/.test(e)}return n=e.style.width,t=e.style.height,n||t?r(n)&&r(t)?{w:parseInt(n,10),h:parseInt(t,10)}:null:(n=e.width,t=e.height,n&&t?{w:parseInt(n,10),h:parseInt(t,10)}:null)},setImageSize:function yn(e,n){var t,r;n&&(t=e.style.width,r=e.style.height,(t||r)&&(e.style.width=n.w+"px",e.style.height=n.h+"px",e.removeAttribute("data-mce-style")),t=e.width,r=e.height,(t||r)&&(e.setAttribute("width",n.w),e.setAttribute("height",n.h)))},getNaturalImageSize:function bn(e){return{w:e.naturalWidth,h:e.naturalHeight}}},ee=(Q="function",function(e){return function(e){if(null===e)return"null";var n=typeof e;return"object"==n&&(Array.prototype.isPrototypeOf(e)||e.constructor&&"Array"===e.constructor.name)?"array":"object"==n&&(String.prototype.isPrototypeOf(e)||e.constructor&&"String"===e.constructor.name)?"string":n}(e)===Q}),ne=Array.prototype.slice,te=(ee(Array.from)&&Array.from,function(e,n){var t;return t=n.reduce(function(e,n){return W(e)?e[n]:undefined},e),W(t)?t:null}),re=function(n){return new q(function(t){var e=new v.FileReader;e.onload=function(e){var n=e.target;t(n.result)},e.readAsText(n)})},oe=function(n,r,o){return new q(function(e){var t;(t=new v.XMLHttpRequest).onreadystatechange=function(){4===t.readyState&&e({status:t.status,blob:this.response})},t.open("GET",n,!0),t.withCredentials=o,i.each(r,function(e,n){t.setRequestHeader(n,e)}),t.responseType="blob",t.send()})},ie=function(e){var n;try{n=JSON.parse(e)}catch(t){}return n},ue=[{code:404,message:"Could not find Image Proxy"},{code:403,message:"Rejected request"},{code:0,message:"Incorrect Image Proxy URL"}],ae=[{type:"key_missing",message:"The request did not include an api key."},{type:"key_not_found",message:"The provided api key could not be found."},{type:"domain_not_trusted",message:"The api key is not valid for the request origins."}],ce=function(e,n){return function(e){return 400===e||403===e||500===e}(e)?J(0,n):Y(e)},se=Y;function fe(e,n,t){return n?K(e,n):function r(e,n){return oe(e,{},n).then(function(e){return e.status<200||300<=e.status?se(e.status):q.resolve(e.blob)})}(e,t)}function le(e,n,t){return 0!=(e.compareDocumentPosition(n)&t)}function de(e,n){var t=function(e,n){for(var t=0;t<e.length;t++){var r=e[t];if(r.test(n))return r}return undefined}(e,n);if(!t)return{major:0,minor:0};function r(e){return Number(n.replace(t,"$"+e))}return Ce(r(1),r(2))}function me(e,n){return function(){return n===e}}function he(e,n){return function(){return n===e}}function ge(e,n){var t=String(n).toLowerCase();return X(e,function(e){return e.search(t)})}function ve(e,n){return-1!==e.indexOf(n)}function pe(n){return function(e){return ve(e,n)}}function we(e,n){return function(e,n){return X(e.dom().childNodes,function(e){return n(Je.fromDom(e))}).map(Je.fromDom)}(e,function(e){return function(e,n){var t=e.dom();if(t.nodeType!==Qe)return!1;var r=t;if(r.matches!==undefined)return r.matches(n);if(r.msMatchesSelector!==undefined)return r.msMatchesSelector(n);if(r.webkitMatchesSelector!==undefined)return r.webkitMatchesSelector(n);if(r.mozMatchesSelector!==undefined)return r.mozMatchesSelector(n);throw new Error("Browser lacks native selectors")}(e,n)})}function ye(e){return we(Je.fromDom(e),"img")}function be(e,n){return e.dom.is(n,"figure")}function Ee(e,n){e.notificationManager.open({text:n,type:"error"})}function Oe(e){var n=e.selection.getNode();return be(e,n)?ye(n):p.some(Je.fromDom(n))}function Te(e,n){var t,r=n.src;return nn(e,n)?fe(n.src,null,function(e,n){return-1!==i.inArray(function(e){return e.getParam("imagetools_credentials_hosts",[],"string[]")}(e),new $(n.src).host)}(e,n)):en(e,n)?function(e){return C(e)}(n):(r=function(e){return e.getParam("imagetools_proxy")}(e),r+=(-1===r.indexOf("?")?"?":"&")+"url="+encodeURIComponent(n.src),t=function(e){return e.getParam("api_key",e.getParam("imagetools_api_key","","string"),"string")}(e),fe(r,t,!1))}function Ie(e,n){return function(e){return p.from(e.getParam("imagetools_fetch_image",null,"function"))}(e).fold(function(){return Te(e,n)},function(e){return e(n)})}function Ne(e,n){var t;return(t=e.editorUpload.blobCache.getByUri(n.src))?q.resolve(t.blob()):Ie(e,n)}function Se(e){H.clearTimeout(e.get())}function _e(i,u,a,c,s,f){return u.toBlob().then(function(e){var n,t,r,o;return r=i.editorUpload.blobCache,n=s.src,function(e){return e.getParam("images_reuse_filename",!1,"boolean")}(i)&&(t=(o=r.getByUri(n))?(n=o.uri(),o.name()):function(e,n){var t=n.match(/\/([^\/\?]+)?\.(?:jpeg|jpg|png|gif)(?:\?|$)/i);return t?e.dom.encode(t[1]):null}(i,n)),o=r.create({id:"imagetools"+Ze++,blob:e,base64:u.toBase64(),uri:n,name:t}),r.add(o),i.undoManager.transact(function(){i.$(s).on("load",function e(){i.$(s).off("load",e),i.nodeChanged(),a?i.editorUpload.uploadImagesAuto():(Se(c),function(e,n){var t=H.setEditorTimeout(e,function(){e.editorUpload.uploadImagesAuto()},function(e){return e.getParam("images_upload_timeout",3e4,"number")}(e));n.set(t)}(i,c))}),f&&i.$(s).attr({width:f.w,height:f.h}),i.$(s).attr({src:o.blobUri()}).removeAttr("data-mce-src")}),o})}function xe(t,r,e,o){return function(){return Oe(t).fold(function(){Ee(t,"Could not find selected image")},function(n){return t._scanForImages().then(function(){return Ne(t,n.dom())}).then(z).then(e).then(function(e){return _e(t,e,!1,r,n.dom(),o)},function(e){Ee(t,e)})})}}var Re=function(e,n){return le(e,n,v.Node.DOCUMENT_POSITION_CONTAINED_BY)},Ae=function(){return Ce(0,0)},Ce=function(e,n){return{major:e,minor:n}},De={nu:Ce,detect:function(e,n){var t=String(n).toLowerCase();return 0===e.length?Ae():de(e,t)},unknown:Ae},Ue="Firefox",Le=function(e){var n=e.current;return{current:n,version:e.version,isEdge:me("Edge",n),isChrome:me("Chrome",n),isIE:me("IE",n),isOpera:me("Opera",n),isFirefox:me(Ue,n),isSafari:me("Safari",n)}},ke={unknown:function(){return Le({current:undefined,version:De.unknown()})},nu:Le,edge:d("Edge"),chrome:d("Chrome"),ie:d("IE"),opera:d("Opera"),firefox:d(Ue),safari:d("Safari")},je="Windows",Pe="Android",Me="Solaris",Be="FreeBSD",Fe=function(e){var n=e.current;return{current:n,version:e.version,isWindows:he(je,n),isiOS:he("iOS",n),isAndroid:he(Pe,n),isOSX:he("OSX",n),isLinux:he("Linux",n),isSolaris:he(Me,n),isFreeBSD:he(Be,n)}},ze={unknown:function(){return Fe({current:undefined,version:De.unknown()})},nu:Fe,windows:d(je),ios:d("iOS"),android:d(Pe),linux:d("Linux"),osx:d("OSX"),solaris:d(Me),freebsd:d(Be)},He=function(e,t){return ge(e,t).map(function(e){var n=De.detect(e.versionRegexes,t);return{current:e.name,version:n}})},qe=function(e,t){return ge(e,t).map(function(e){var n=De.detect(e.versionRegexes,t);return{current:e.name,version:n}})},$e=/.*?version\/\ ?([0-9]+)\.([0-9]+).*/,Xe=[{name:"Edge",versionRegexes:[/.*?edge\/ ?([0-9]+)\.([0-9]+)$/],search:function(e){return ve(e,"edge/")&&ve(e,"chrome")&&ve(e,"safari")&&ve(e,"applewebkit")}},{name:"Chrome",versionRegexes:[/.*?chrome\/([0-9]+)\.([0-9]+).*/,$e],search:function(e){return ve(e,"chrome")&&!ve(e,"chromeframe")}},{name:"IE",versionRegexes:[/.*?msie\ ?([0-9]+)\.([0-9]+).*/,/.*?rv:([0-9]+)\.([0-9]+).*/],search:function(e){return ve(e,"msie")||ve(e,"trident")}},{name:"Opera",versionRegexes:[$e,/.*?opera\/([0-9]+)\.([0-9]+).*/],search:pe("opera")},{name:"Firefox",versionRegexes:[/.*?firefox\/\ ?([0-9]+)\.([0-9]+).*/],search:pe("firefox")},{name:"Safari",versionRegexes:[$e,/.*?cpu os ([0-9]+)_([0-9]+).*/],search:function(e){return(ve(e,"safari")||ve(e,"mobile/"))&&ve(e,"applewebkit")}}],We=[{name:"Windows",search:pe("win"),versionRegexes:[/.*?windows\ nt\ ?([0-9]+)\.([0-9]+).*/]},{name:"iOS",search:function(e){return ve(e,"iphone")||ve(e,"ipad")},versionRegexes:[/.*?version\/\ ?([0-9]+)\.([0-9]+).*/,/.*cpu os ([0-9]+)_([0-9]+).*/,/.*cpu iphone os ([0-9]+)_([0-9]+).*/]},{name:"Android",search:pe("android"),versionRegexes:[/.*?android\ ?([0-9]+)\.([0-9]+).*/]},{name:"OSX",search:pe("os x"),versionRegexes:[/.*?os\ x\ ?([0-9]+)_([0-9]+).*/]},{name:"Linux",search:pe("linux"),versionRegexes:[]},{name:"Solaris",search:pe("sunos"),versionRegexes:[]},{name:"FreeBSD",search:pe("freebsd"),versionRegexes:[]}],Ge={browsers:d(Xe),oses:d(We)},Ye=r(function(e,n){var t=Ge.browsers(),r=Ge.oses(),o=He(t,e).fold(ke.unknown,ke.nu),i=qe(r,e).fold(ze.unknown,ze.nu);return{browser:o,os:i,deviceType:function(e,n,t,r){var o=e.isiOS()&&!0===/ipad/i.test(t),i=e.isiOS()&&!o,u=e.isiOS()||e.isAndroid(),a=u||r("(pointer:coarse)"),c=o||!i&&u&&r("(min-device-width:768px)"),s=i||u&&!c,f=n.isSafari()&&e.isiOS()&&!1===/safari/i.test(t),l=!s&&!c&&!f;return{isiPad:d(o),isiPhone:d(i),isTablet:d(c),isPhone:d(s),isTouch:d(a),isAndroid:e.isAndroid,isiOS:e.isiOS,isWebView:d(f),isDesktop:d(l)}}(i,o,e,n)}}(v.navigator.userAgent,function(e){return v.window.matchMedia(e).matches})),Ve=function(e){if(null===e||e===undefined)throw new Error("Node cannot be null or undefined");return{dom:d(e)}},Je={fromHtml:function(e,n){var t=(n||v.document).createElement("div");if(t.innerHTML=e,!t.hasChildNodes()||1<t.childNodes.length)throw v.console.error("HTML does not have a single root node",e),new Error("HTML must have a single root node");return Ve(t.childNodes[0])},fromTag:function(e,n){var t=(n||v.document).createElement(e);return Ve(t)},fromText:function(e,n){var t=(n||v.document).createTextNode(e);return Ve(t)},fromDom:Ve,fromPoint:function(e,n,t){var r=e.dom();return p.from(r.elementFromPoint(n,t)).map(Ve)}},Ke=(v.Node.ATTRIBUTE_NODE,v.Node.CDATA_SECTION_NODE,v.Node.COMMENT_NODE,v.Node.DOCUMENT_NODE,v.Node.DOCUMENT_TYPE_NODE,v.Node.DOCUMENT_FRAGMENT_NODE,v.Node.ELEMENT_NODE),Qe=(v.Node.TEXT_NODE,v.Node.PROCESSING_INSTRUCTION_NODE,v.Node.ENTITY_REFERENCE_NODE,v.Node.ENTITY_NODE,v.Node.NOTATION_NODE,Ke),Ze=(Ye.get().browser.isIE(),"undefined"!=typeof v.window?v.window:Function("return this;")(),0),en=function(e,n){var t=n.src;return 0===t.indexOf("data:")||0===t.indexOf("blob:")||new $(t).host===e.documentBaseURI.host},nn=function(e,n){return-1!==i.inArray(function(e){return e.getParam("imagetools_cors_hosts",[],"string[]")}(e),new $(n.src).host)},tn=function(n,t,r){return function(){var e=Oe(n).fold(function(){return null},function(e){var n=Z.getImageSize(e.dom());return n?{w:n.h,h:n.w}:null});return xe(n,t,function(e){return function(e,n){return B(e,n)}(e,r)},e)()}},rn=function(e,n,t){return function(){return xe(e,n,function(e){return function(e,n){return F(e,n)}(e,t)})()}},on=function(n,e){function t(e){return function(e){return n.dom.is(e,"img:not([data-mce-object],[data-mce-placeholder])")}(e)&&(en(n,e)||nn(n,e)||n.settings.imagetools_proxy)}return be(n,e)?ye(e).map(function(e){return t(e.dom())?p.some(e.dom()):p.none()}):t(e)?p.some(e):p.none()},un=Se,an=Ne,cn=Oe,sn=function(n,t,r,o,i){return new q(function(e){(function(e){return D(e)})(i).then(function(e){var n=Z.getNaturalImageSize(e);return o.w===n.w&&o.h===n.h||Z.getImageSize(r)&&Z.setImageSize(r,n),v.URL.revokeObjectURL(e.src),i}).then(z).then(function(e){return _e(n,e,!0,t,r)},function(){})})},fn=d("save-state"),ln=d("disable"),dn=d("enable"),mn=function(i,u){return function(){var r=cn(i),o=r.map(function(e){return Z.getNaturalImageSize(e.dom())});cn(i).each(function(n){on(i,n.dom()).each(function(e){an(i,n.dom()).then(function(e){var n=function(e){return{blob:e,url:v.URL.createObjectURL(e)}}(e);i.windowManager.open(function(e){return{title:"Edit Image",size:"large",body:{type:"panel",items:[{type:"imagetools",name:"imagetools",label:"Edit Image",currentState:e}]},buttons:[{type:"cancel",name:"cancel",text:"Cancel"},{type:"submit",name:"save",text:"Save",primary:!0,disabled:!0}],onSubmit:function(e){var t=e.getData().imagetools.blob;r.each(function(n){o.each(function(e){sn(i,u,n.dom(),e,t)})}),e.close()},onCancel:function(){},onAction:function(e,n){switch(n.name){case fn():n.value?e.enable("save"):e.disable("save");break;case ln():e.disable("save"),e.disable("cancel");break;case dn():e.enable("cancel")}}}}(n))})})})}},hn=function(t,e){i.each({mceImageRotateLeft:tn(t,e,-90),mceImageRotateRight:tn(t,e,90),mceImageFlipVertical:rn(t,e,"v"),mceImageFlipHorizontal:rn(t,e,"h"),mceEditImage:mn(t,e)},function(e,n){t.addCommand(n,e)})},gn=function(t,r,o){t.on("NodeChange",function(e){var n=o.get();n&&n.src!==e.element.src&&(un(r),t.editorUpload.uploadImagesAuto(),o.set(null)),on(t,e.element).each(o.set)})},vn=function(r){function n(e){return function(){return r.execCommand(e)}}r.ui.registry.addButton("rotateleft",{tooltip:"Rotate counterclockwise",icon:"rotate-left",onAction:n("mceImageRotateLeft")}),r.ui.registry.addButton("rotateright",{tooltip:"Rotate clockwise",icon:"rotate-right",onAction:n("mceImageRotateRight")}),r.ui.registry.addButton("flipv",{tooltip:"Flip vertically",icon:"flip-vertically",onAction:n("mceImageFlipVertical")}),r.ui.registry.addButton("fliph",{tooltip:"Flip horizontally",icon:"flip-horizontally",onAction:n("mceImageFlipHorizontal")}),r.ui.registry.addButton("editimage",{tooltip:"Edit image",icon:"edit-image",onAction:n("mceEditImage"),onSetup:function(t){function e(){cn(r).each(function(e){var n=on(r,e.dom()).isNone();t.setDisabled(n)})}return r.on("NodeChange",e),function(){r.off("NodeChange",e)}}}),r.ui.registry.addButton("imageoptions",{tooltip:"Image options",icon:"image-options",onAction:n("mceImage")}),r.ui.registry.addContextMenu("imagetools",{update:function(e){return on(r,e).fold(function(){return[]},function(e){return[{text:"Edit image",icon:"edit-image",onAction:n("mceEditImage")}]})}})},pn=function(n){n.ui.registry.addContextToolbar("imagetools",{items:function(e){return e.getParam("imagetools_toolbar","rotateleft rotateright flipv fliph editimage imageoptions")}(n),predicate:function(e){return on(n,e).isSome()},position:"node",scope:"node"})};!function En(){o.add("imagetools",function(e){var n=r(0),t=r(null);hn(e,n),vn(e),pn(e),gn(e,n,t)})}()}(window);
\ No newline at end of file
diff --git a/website/js/vendor/tinymce/js/tinymce/plugins/importcss/plugin.min.js b/website/js/vendor/tinymce/js/tinymce/plugins/importcss/plugin.min.js
new file mode 100644 (file)
index 0000000..df28852
--- /dev/null
@@ -0,0 +1,9 @@
+/**
+ * Copyright (c) Tiny Technologies, Inc. All rights reserved.
+ * Licensed under the LGPL or a commercial license.
+ * For LGPL see License.txt in the project root for license information.
+ * For commercial licenses see https://www.tiny.cloud/
+ *
+ * Version: 5.1.5 (2019-12-19)
+ */
+!function(){"use strict";function t(){}function n(t){return function(){return t}}function e(){return h}var r,o=tinymce.util.Tools.resolve("tinymce.PluginManager"),a=tinymce.util.Tools.resolve("tinymce.dom.DOMUtils"),f=tinymce.util.Tools.resolve("tinymce.EditorManager"),l=tinymce.util.Tools.resolve("tinymce.Env"),m=tinymce.util.Tools.resolve("tinymce.util.Tools"),c=function(t){return t.getParam("importcss_merge_classes")},i=function(t){return t.getParam("importcss_exclusive")},p=function(t){return t.getParam("importcss_selector_converter")},g=function(t){return t.getParam("importcss_selector_filter")},y=function(t){return t.getParam("importcss_groups")},v=function(t){return t.getParam("importcss_append")},d=function(t){return t.getParam("importcss_file_filter")},u=n(!1),s=n(!0),h=(r={fold:function(t,n){return t()},is:u,isSome:u,isNone:s,getOr:O,getOrThunk:x,getOrDie:function(t){throw new Error(t||"error: getOrDie called on none.")},getOrNull:n(null),getOrUndefined:n(undefined),or:O,orThunk:x,map:e,each:t,bind:e,exists:u,forall:s,filter:e,equals:_,equals_:_,toArray:function(){return[]},toString:n("none()")},Object.freeze&&Object.freeze(r),r);function _(t){return t.isNone()}function x(t){return t()}function O(t){return t}function T(n){return function(t){return function(t){if(null===t)return"null";var n=typeof t;return"object"==n&&(Array.prototype.isPrototypeOf(t)||t.constructor&&"Array"===t.constructor.name)?"array":"object"==n&&(String.prototype.isPrototypeOf(t)||t.constructor&&"String"===t.constructor.name)?"string":n}(t)===n}}function b(t,n){return function(t){for(var n=[],e=0,r=t.length;e<r;++e){if(!w(t[e]))throw new Error("Arr.flatten item "+e+" was not an array, input: "+t);M.apply(n,t[e])}return n}(function(t,n){for(var e=t.length,r=new Array(e),o=0;o<e;o++){var i=t[o];r[o]=n(i,o)}return r}(t,n))}function k(n){return"string"==typeof n?function(t){return-1!==t.indexOf(n)}:n instanceof RegExp?function(t){return n.test(t)}:n}function S(i,t,u){var c=[],e={};function s(t,n){var e,r=t.href;if((r=function(t){var n=l.cacheSuffix;return"string"==typeof t&&(t=t.replace("?"+n,"").replace("&"+n,"")),t}(r))&&u(r,n)&&!function(t,n){var e=t.settings,r=!1!==e.skin&&(e.skin||"oxide");if(r){var o=e.skin_url?t.documentBaseURI.toAbsolute(e.skin_url):f.baseURL+"/skins/ui/"+r,i=f.baseURL+"/skins/content/";return n===o+"/content"+(t.inline?".inline":"")+".min.css"||-1!==n.indexOf(i)}return!1}(i,r)){m.each(t.imports,function(t){s(t,!0)});try{e=t.cssRules||t.rules}catch(o){}m.each(e,function(t){t.styleSheet?s(t.styleSheet,!0):t.selectorText&&m.each(t.selectorText.split(","),function(t){c.push(m.trim(t))})})}}m.each(i.contentCSS,function(t){e[t]=!0}),u=u||function(t,n){return n||e[t]};try{m.each(t.styleSheets,function(t){s(t)})}catch(n){}return c}function A(t,n){var e,r=/^(?:([a-z0-9\-_]+))?(\.[a-z0-9_\-\.]+)$/i.exec(n);if(r){var o=r[1],i=r[2].substr(1).split(".").join(" "),u=m.makeMap("a,img");return r[1]?(e={title:n},t.schema.getTextBlockElements()[o]?e.block=o:t.schema.getBlockElements()[o]||u[o.toLowerCase()]?e.selector=o:e.inline=o):r[2]&&(e={inline:"span",title:n.substr(1),classes:i}),!1!==c(t)?e.classes=i:e.attributes={"class":i},e}}function P(t,n){return null===n||!1!==i(t)}var w=T("array"),E=T("function"),I=Array.prototype.slice,M=Array.prototype.push,j=(E(Array.from)&&Array.from,A),D=function(s){s.on("init",function(t){function r(t,n){if(function(t,n,e,r){return!(P(t,e)?n in r:n in e.selectors)}(s,t,n,i)){!function(t,n,e,r){P(t,e)?r[n]=!0:e.selectors[n]=!0}(s,t,n,i);var e=function(t,n,e,r){return(r&&r.selector_converter?r.selector_converter:p(t)?p(t):function(){return A(t,e)}).call(n,e,r)}(s,s.plugins.importcss,t,n);if(e){var r=e.name||a.DOM.uniqueId();return s.formatter.register(r,e),m.extend({},{title:e.title,format:r})}}return null}var o=function(){var n=[],e=[],r={};return{addItemToGroup:function(t,n){r[t]?r[t].push(n):(e.push(t),r[t]=[n])},addItem:function(t){n.push(t)},toFormats:function(){return b(e,function(t){var n=r[t];return 0===n.length?[]:[{title:t,items:n}]}).concat(n)}}}(),i={},u=k(g(s)),c=function(t){return m.map(t,function(t){return m.extend({},t,{original:t,selectors:{},filter:k(t.filter),item:{text:t.title,menu:[]}})})}(y(s));m.each(S(s,s.getDoc(),k(d(s))),function(e){if(-1===e.indexOf(".mce-")&&(!u||u(e))){var t=function(t,n){return m.grep(t,function(t){return!t.filter||t.filter(n)})}(c,e);if(0<t.length)m.each(t,function(t){var n=r(e,t);n&&o.addItemToGroup(t.title,n)});else{var n=r(e,null);n&&o.addItem(n)}}});var n=o.toFormats();s.fire("addStyleModifications",{items:n,replace:!v(s)})})},R=function(n){return{convertSelectorToFormat:function(t){return j(n,t)}}};!function U(){o.add("importcss",function(t){return D(t),R(t)})}()}();
\ No newline at end of file
diff --git a/website/js/vendor/tinymce/js/tinymce/plugins/insertdatetime/plugin.min.js b/website/js/vendor/tinymce/js/tinymce/plugins/insertdatetime/plugin.min.js
new file mode 100644 (file)
index 0000000..584b6f8
--- /dev/null
@@ -0,0 +1,9 @@
+/**
+ * Copyright (c) Tiny Technologies, Inc. All rights reserved.
+ * Licensed under the LGPL or a commercial license.
+ * For LGPL see License.txt in the project root for license information.
+ * For commercial licenses see https://www.tiny.cloud/
+ *
+ * Version: 5.1.5 (2019-12-19)
+ */
+!function(){"use strict";function n(e){return e.getParam("insertdatetime_timeformat",e.translate("%H:%M:%S"))}function r(e){return e.getParam("insertdatetime_formats",["%H:%M:%S","%Y-%m-%d","%I:%M:%S %p","%D"])}function a(e,t){if((e=""+e).length<t)for(var n=0;n<t-e.length;n++)e="0"+e;return e}function i(e,t,n){return n=n||new Date,t=(t=(t=(t=(t=(t=(t=(t=(t=(t=(t=(t=(t=(t=(t=(t=t.replace("%D","%m/%d/%Y")).replace("%r","%I:%M:%S %p")).replace("%Y",""+n.getFullYear())).replace("%y",""+n.getYear())).replace("%m",a(n.getMonth()+1,2))).replace("%d",a(n.getDate(),2))).replace("%H",""+a(n.getHours(),2))).replace("%M",""+a(n.getMinutes(),2))).replace("%S",""+a(n.getSeconds(),2))).replace("%I",""+((n.getHours()+11)%12+1))).replace("%p",n.getHours()<12?"AM":"PM")).replace("%B",""+e.translate(f[n.getMonth()]))).replace("%b",""+e.translate(d[n.getMonth()]))).replace("%A",""+e.translate(s[n.getDay()]))).replace("%a",""+e.translate(l[n.getDay()]))).replace("%%","%")}var e=tinymce.util.Tools.resolve("tinymce.PluginManager"),t=function(e){return e.getParam("insertdatetime_dateformat",e.translate("%Y-%m-%d"))},o=n,u=r,c=function(e){var t=r(e);return 0<t.length?t[0]:n(e)},m=function(e){return e.getParam("insertdatetime_element",!1)},l="Sun Mon Tue Wed Thu Fri Sat Sun".split(" "),s="Sunday Monday Tuesday Wednesday Thursday Friday Saturday Sunday".split(" "),d="Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec".split(" "),f="January February March April May June July August September October November December".split(" "),p=function(e,t){if(m(e)){var n=i(e,t),r=void 0;r=/%[HMSIp]/.test(t)?i(e,"%Y-%m-%dT%H:%M"):i(e,"%Y-%m-%d");var a=e.dom.getParent(e.selection.getStart(),"time");a?function(e,t,n,r){var a=e.dom.create("time",{datetime:n},r);t.parentNode.insertBefore(a,t),e.dom.remove(t),e.selection.select(a,!0),e.selection.collapse(!1)}(e,a,r,n):e.insertContent('<time datetime="'+r+'">'+n+"</time>")}else e.insertContent(i(e,t))},g=i,y=function(e){e.addCommand("mceInsertDate",function(){p(e,t(e))}),e.addCommand("mceInsertTime",function(){p(e,o(e))})},M=tinymce.util.Tools.resolve("tinymce.util.Tools"),S=function(e){function t(){return n}var n=e;return{get:t,set:function(e){n=e},clone:function(){return S(t())}}},v=function(n){var t=u(n),r=S(c(n));n.ui.registry.addSplitButton("insertdatetime",{icon:"insert-time",tooltip:"Insert date/time",select:function(e){return e===r.get()},fetch:function(e){e(M.map(t,function(e){return{type:"choiceitem",text:g(n,e),value:e}}))},onAction:function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];p(n,r.get())},onItemAction:function(e,t){r.set(t),p(n,t)}});n.ui.registry.addNestedMenuItem("insertdatetime",{icon:"insert-time",text:"Date/time",getSubmenuItems:function(){return M.map(t,function(e){return{type:"menuitem",text:g(n,e),onAction:function(e){return function(){r.set(e),p(n,e)}}(e)}})}})};!function h(){e.add("insertdatetime",function(e){y(e),v(e)})}()}();
\ No newline at end of file
diff --git a/website/js/vendor/tinymce/js/tinymce/plugins/legacyoutput/plugin.min.js b/website/js/vendor/tinymce/js/tinymce/plugins/legacyoutput/plugin.min.js
new file mode 100644 (file)
index 0000000..df99090
--- /dev/null
@@ -0,0 +1,9 @@
+/**
+ * Copyright (c) Tiny Technologies, Inc. All rights reserved.
+ * Licensed under the LGPL or a commercial license.
+ * For LGPL see License.txt in the project root for license information.
+ * For commercial licenses see https://www.tiny.cloud/
+ *
+ * Version: 5.1.5 (2019-12-19)
+ */
+!function(){"use strict";var e=tinymce.util.Tools.resolve("tinymce.PluginManager"),a=tinymce.util.Tools.resolve("tinymce.util.Tools"),t=function(e){return e.getParam("font_formats")},i=function(e){return e.getParam("fontsize_formats")},n=function(e,t){e.settings.fontsize_formats=t},l=function(e,t){e.settings.font_formats=t},s=function(e){return e.getParam("font_size_style_values","xx-small,x-small,small,medium,large,x-large,xx-large")},r=function(e,t){e.settings.inline_styles=t},o=function(e){!function(e){r(e,!1),i(e)||n(e,"8pt=1 10pt=2 12pt=3 14pt=4 18pt=5 24pt=6 36pt=7"),t(e)||l(e,"Andale Mono=andale mono,monospace;Arial=arial,helvetica,sans-serif;Arial Black=arial black,sans-serif;Book Antiqua=book antiqua,palatino,serif;Comic Sans MS=comic sans ms,sans-serif;Courier New=courier new,courier,monospace;Georgia=georgia,palatino,serif;Helvetica=helvetica,arial,sans-serif;Impact=impact,sans-serif;Symbol=symbol;Tahoma=tahoma,arial,helvetica,sans-serif;Terminal=terminal,monaco,monospace;Times New Roman=times new roman,times,serif;Trebuchet MS=trebuchet ms,geneva,sans-serif;Verdana=verdana,geneva,sans-serif;Webdings=webdings;Wingdings=wingdings,zapf dingbats")}(e),e.on("PreInit",function(){return function(e){var t="p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li,table",i=a.explode(s(e)),n=e.schema;e.formatter.register({alignleft:{selector:t,attributes:{align:"left"}},aligncenter:{selector:t,attributes:{align:"center"}},alignright:{selector:t,attributes:{align:"right"}},alignjustify:{selector:t,attributes:{align:"justify"}},bold:[{inline:"b",remove:"all"},{inline:"strong",remove:"all"},{inline:"span",styles:{fontWeight:"bold"}}],italic:[{inline:"i",remove:"all"},{inline:"em",remove:"all"},{inline:"span",styles:{fontStyle:"italic"}}],underline:[{inline:"u",remove:"all"},{inline:"span",styles:{textDecoration:"underline"},exact:!0}],strikethrough:[{inline:"strike",remove:"all"},{inline:"span",styles:{textDecoration:"line-through"},exact:!0}],fontname:{inline:"font",toggle:!1,attributes:{face:"%value"}},fontsize:{inline:"font",toggle:!1,attributes:{size:function(e){return a.inArray(i,e.value)+1}}},forecolor:{inline:"font",attributes:{color:"%value"},links:!0,remove_similar:!0,clear_child_styles:!0},hilitecolor:{inline:"font",styles:{backgroundColor:"%value"},links:!0,remove_similar:!0,clear_child_styles:!0}}),a.each("b,i,u,strike".split(","),function(e){n.addValidElements(e+"[*]")}),n.getElementRule("font")||n.addValidElements("font[face|size|color|style]"),a.each(t.split(","),function(e){var t=n.getElementRule(e);t&&(t.attributes.align||(t.attributes.align={},t.attributesOrder.push("align")))})}(e)})};!function c(){e.add("legacyoutput",function(e){o(e)})}()}();
\ No newline at end of file
diff --git a/website/js/vendor/tinymce/js/tinymce/plugins/link/plugin.min.js b/website/js/vendor/tinymce/js/tinymce/plugins/link/plugin.min.js
new file mode 100644 (file)
index 0000000..a17b394
--- /dev/null
@@ -0,0 +1,9 @@
+/**
+ * Copyright (c) Tiny Technologies, Inc. All rights reserved.
+ * Licensed under the LGPL or a commercial license.
+ * For LGPL see License.txt in the project root for license information.
+ * For commercial licenses see https://www.tiny.cloud/
+ *
+ * Version: 5.1.5 (2019-12-19)
+ */
+!function(c){"use strict";function n(t){return function(n){return function(n){if(null===n)return"null";var t=typeof n;return"object"==t&&(Array.prototype.isPrototypeOf(n)||n.constructor&&"Array"===n.constructor.name)?"array":"object"==t&&(String.prototype.isPrototypeOf(n)||n.constructor&&"String"===n.constructor.name)?"string":t}(n)===t}}function u(){}function i(n){return function(){return n}}function t(){return A}var e,r=tinymce.util.Tools.resolve("tinymce.PluginManager"),o=tinymce.util.Tools.resolve("tinymce.util.VK"),a=n("string"),f=n("array"),l=n("boolean"),s=n("function"),d=function(n){var t=n.getParam("link_assume_external_targets",!1);return l(t)&&t?1:!a(t)||"http"!==t&&"https"!==t?0:t},m=function(n){return n.getParam("link_context_toolbar",!1,"boolean")},h=function(n){return n.getParam("link_list")},p=function(n){return n.getParam("default_link_target")},g=function(n){return n.getParam("target_list",!0)},v=function(n){return n.getParam("rel_list",[],"array")},y=function(n){return n.getParam("link_class_list",[],"array")},w=function(n){return n.getParam("link_title",!0,"boolean")},x=function(n){return n.getParam("allow_unsafe_link_target",!1,"boolean")},k=function(n){return n.getParam("link_quicklink",!1,"boolean")},b=function(n){var t=c.document.createElement("a");t.target="_blank",t.href=n,t.rel="noreferrer noopener";var e=c.document.createEvent("MouseEvents");e.initMouseEvent("click",!0,!0,c.window,0,0,0,0,0,!1,!1,!1,!1,0,null),function(n,t){c.document.body.appendChild(n),n.dispatchEvent(t),c.document.body.removeChild(n)}(t,e)},_=function(){return(_=Object.assign||function(n){for(var t,e=1,r=arguments.length;e<r;e++)for(var o in t=arguments[e])Object.prototype.hasOwnProperty.call(t,o)&&(n[o]=t[o]);return n}).apply(this,arguments)},T=i(!1),O=i(!0),A=(e={fold:function(n,t){return n()},is:T,isSome:T,isNone:O,getOr:N,getOrThunk:P,getOrDie:function(n){throw new Error(n||"error: getOrDie called on none.")},getOrNull:i(null),getOrUndefined:i(undefined),or:N,orThunk:P,map:t,each:u,bind:t,exists:T,forall:O,filter:t,equals:C,equals_:C,toArray:function(){return[]},toString:i("none()")},Object.freeze&&Object.freeze(e),e);function C(n){return n.isNone()}function P(n){return n()}function N(n){return n}function E(n,t){return-1<function(n,t){return Q.call(n,t)}(n,t)}function I(n,t){for(var e=0,r=n.length;e<r;e++){t(n[e],e)}}function S(n){for(var t=[],e=0,r=n.length;e<r;++e){if(!f(n[e]))throw new Error("Arr.flatten item "+e+" was not an array, input: "+n);Y.apply(t,n[e])}return t}function j(n,t){var e=function(n,t){for(var e=n.length,r=new Array(e),o=0;o<e;o++){var i=n[o];r[o]=t(i,o)}return r}(n,t);return S(e)}function F(n){return/^\w+:/i.test(n)}function L(n,t){var e,r,o=["noopener"],i=n?n.split(/\s+/):[],u=function(n){return n.filter(function(n){return-1===Z.inArray(o,n)})},c=t?0<(e=u(e=i)).length?e.concat(o):o:u(i);return 0<c.length?(r=c,Z.trim(r.sort().join(" "))):""}function R(n,t){return t=t||n.selection.getNode(),nn(t)?n.dom.select("a[href]",t)[0]:n.dom.getParent(t,"a[href]")}function D(n){return n&&"A"===n.nodeName&&!!n.href}function U(n){return function(n,t,e){return I(n,function(n){e=t(e,n)}),e}(["title","rel","class","target"],function(t,e){return n[e].each(function(n){t[e]=0<n.length?n:null}),t},{href:n.href})}function M(n,t){var e=_({},t);if(!(0<v(n).length)&&!1===x(n)){var r=L(e.rel,"_blank"===e.target);e.rel=r||null}return J.from(e.target).isNone()&&!1===g(n)&&(e.target=p(n)),e.href=function(n,t){return"http"!==t&&"https"!==t||F(n)?n:t+"://"+n}(e.href,d(n)),e}function z(n,t){for(var e=0;e<n.length;e++){var r=t(n[e],e);if(r.isSome())return r}return J.none()}function q(n){return a(n.value)?n.value:""}function K(t){return void 0===t&&(t=q),function(n){return J.from(n).map(function(n){return function(n,r){var o=[];return Z.each(n,function(n){var t=a(n.text)?n.text:a(n.title)?n.title:"";if(n.menu!==undefined);else{var e=r(n);o.push({text:t,value:e})}}),o}(n,t)})}}function B(t,n,e,r){var o=r[n],i=0<t.length;return o!==undefined?function(t,n){return z(n,function(n){return J.some(n).filter(function(n){return n.value===t})})}(o,e).map(function(n){return{url:{value:n.value,meta:{text:i?t:n.text,attach:u}},text:i?t:n.text}}):J.none()}var V,W,H,$,G=function(e){function n(){return o}function t(n){return n(e)}var r=i(e),o={fold:function(n,t){return t(e)},is:function(n){return e===n},isSome:O,isNone:T,getOr:r,getOrThunk:r,getOrDie:r,getOrNull:r,getOrUndefined:r,or:n,orThunk:n,map:function(n){return G(n(e))},each:function(n){n(e)},bind:t,exists:t,forall:t,filter:function(n){return n(e)?o:A},toArray:function(){return[e]},toString:function(){return"some("+e+")"},equals:function(n){return n.is(e)},equals_:function(n,t){return n.fold(T,function(n){return t(e,n)})}};return o},J={some:G,none:t,from:function(n){return null===n||n===undefined?A:G(n)}},X=Array.prototype.slice,Q=Array.prototype.indexOf,Y=Array.prototype.push,Z=(s(Array.from)&&Array.from,tinymce.util.Tools.resolve("tinymce.util.Tools")),nn=function(n){return n&&"FIGURE"===n.nodeName&&/\bimage\b/i.test(n.className)},tn=function(n,t){var e=n.dom.select("img",t)[0];if(e){var r=n.dom.getParents(e,"a[href]",t)[0];r&&(r.parentNode.insertBefore(e,r),n.dom.remove(r))}},en=function(n,t,e){var r=n.dom.select("img",t)[0];if(r){var o=n.dom.create("a",e);r.parentNode.insertBefore(o,r),o.appendChild(r)}},rn=function(n,t,e){var r=n.selection.getNode(),o=R(n,r),i=M(n,U(e));n.undoManager.transact(function(){e.href===t.href&&t.attach(),o?(n.focus(),function(n,t,e,r){e.each(function(n){t.hasOwnProperty("innerText")?t.innerText=n:t.textContent=n}),n.dom.setAttribs(t,r),n.selection.select(t)}(n,o,e.text,i)):function(t,n,e,r){nn(n)?en(t,n,r):e.fold(function(){t.execCommand("mceInsertLink",!1,r)},function(n){t.insertContent(t.dom.createHTML("a",r,t.dom.encode(n)))})}(n,r,e.text,i)})},on=function(e){e.undoManager.transact(function(){var n=e.selection.getNode();if(nn(n))tn(e,n);else{var t=e.dom.getParent(n,"a[href]",e.getBody());t&&e.dom.remove(t,!0)}e.focus()})},un=function(n){return 0<Z.grep(n,D).length},cn=function(n){var t=n.getAttribute("data-mce-href");return t||n.getAttribute("href")},an=function(n){return!(/</.test(n)&&(!/^<a [^>]+>[^<]+<\/a>$/.test(n)||-1===n.indexOf("href=")))},fn=R,ln=function(n,t){return function(n){return n.replace(/\uFEFF/g,"")}(t?t.innerText||t.textContent:n.getContent({format:"text"}))},sn=L,dn=F,mn={sanitize:function(n){return K(q)(n)},sanitizeWith:K,createUi:function(t,e){return function(n){return{name:t,type:"selectbox",label:e,items:n}}},getValue:q},hn=function(n){function t(){return e}var e=n;return{get:t,set:function(n){e=n},clone:function(){return hn(t())}}},pn=function(n,r){function e(n,t){var e=function(n,t){return"link"===t?n.catalogs.link:"anchor"===t?n.catalogs.anchor:J.none()}(r,t.name).getOr([]);return B(o.get(),t.name,e,n)}var o=hn(n.text);return{onChange:function(n,t){return"url"===t.name?function(n){if(o.get().length<=0){var t=n.url.meta.text!==undefined?n.url.meta.text:n.url.value;return J.some({text:t})}return J.none()}(n()):E(["anchor","link"],t.name)?e(n(),t):("text"===t.name&&o.set(n().text),J.none())}}},gn={},vn={exports:gn};V=undefined,W=gn,H=vn,$=undefined,function(n){"object"==typeof W&&void 0!==H?H.exports=n():"function"==typeof V&&V.amd?V([],n):("undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this).EphoxContactWrapper=n()}(function(){return function l(i,u,c){function a(t,n){if(!u[t]){if(!i[t]){var e="function"==typeof $&&$;if(!n&&e)return e(t,!0);if(f)return f(t,!0);var r=new Error("Cannot find module '"+t+"'");throw r.code="MODULE_NOT_FOUND",r}var o=u[t]={exports:{}};i[t][0].call(o.exports,function(n){return a(i[t][1][n]||n)},o,o.exports,l,i,u,c)}return u[t].exports}for(var f="function"==typeof $&&$,n=0;n<c.length;n++)a(c[n]);return a}({1:[function(n,t,e){var r,o,i=t.exports={};function u(){throw new Error("setTimeout has not been defined")}function c(){throw new Error("clearTimeout has not been defined")}function a(n){if(r===setTimeout)return setTimeout(n,0);if((r===u||!r)&&setTimeout)return r=setTimeout,setTimeout(n,0);try{return r(n,0)}catch(t){try{return r.call(null,n,0)}catch(t){return r.call(this,n,0)}}}!function(){try{r="function"==typeof setTimeout?setTimeout:u}catch(n){r=u}try{o="function"==typeof clearTimeout?clearTimeout:c}catch(n){o=c}}();var f,l=[],s=!1,d=-1;function m(){s&&f&&(s=!1,f.length?l=f.concat(l):d=-1,l.length&&h())}function h(){if(!s){var n=a(m);s=!0;for(var t=l.length;t;){for(f=l,l=[];++d<t;)f&&f[d].run();d=-1,t=l.length}f=null,s=!1,function e(n){if(o===clearTimeout)return clearTimeout(n);if((o===c||!o)&&clearTimeout)return o=clearTimeout,clearTimeout(n);try{return o(n)}catch(t){try{return o.call(null,n)}catch(t){return o.call(this,n)}}}(n)}}function p(n,t){this.fun=n,this.array=t}function g(){}i.nextTick=function(n){var t=new Array(arguments.length-1);if(1<arguments.length)for(var e=1;e<arguments.length;e++)t[e-1]=arguments[e];l.push(new p(n,t)),1!==l.length||s||a(h)},p.prototype.run=function(){this.fun.apply(null,this.array)},i.title="browser",i.browser=!0,i.env={},i.argv=[],i.version="",i.versions={},i.on=g,i.addListener=g,i.once=g,i.off=g,i.removeListener=g,i.removeAllListeners=g,i.emit=g,i.prependListener=g,i.prependOnceListener=g,i.listeners=function(n){return[]},i.binding=function(n){throw new Error("process.binding is not supported")},i.cwd=function(){return"/"},i.chdir=function(n){throw new Error("process.chdir is not supported")},i.umask=function(){return 0}},{}],2:[function(n,s,t){(function(t){function r(){}function i(n){if("object"!=typeof this)throw new TypeError("Promises must be constructed via new");if("function"!=typeof n)throw new TypeError("not a function");this._state=0,this._handled=!1,this._value=undefined,this._deferreds=[],l(n,this)}function o(r,o){for(;3===r._state;)r=r._value;0!==r._state?(r._handled=!0,i._immediateFn(function(){var n=1===r._state?o.onFulfilled:o.onRejected;if(null!==n){var t;try{t=n(r._value)}catch(e){return void c(o.promise,e)}u(o.promise,t)}else(1===r._state?u:c)(o.promise,r._value)})):r._deferreds.push(o)}function u(n,t){try{if(t===n)throw new TypeError("A promise cannot be resolved with itself.");if(t&&("object"==typeof t||"function"==typeof t)){var e=t.then;if(t instanceof i)return n._state=3,n._value=t,void a(n);if("function"==typeof e)return void l(function r(n,t){return function(){n.apply(t,arguments)}}(e,t),n)}n._state=1,n._value=t,a(n)}catch(o){c(n,o)}}function c(n,t){n._state=2,n._value=t,a(n)}function a(n){2===n._state&&0===n._deferreds.length&&i._immediateFn(function(){n._handled||i._unhandledRejectionFn(n._value)});for(var t=0,e=n._deferreds.length;t<e;t++)o(n,n._deferreds[t]);n._deferreds=null}function f(n,t,e){this.onFulfilled="function"==typeof n?n:null,this.onRejected="function"==typeof t?t:null,this.promise=e}function l(n,t){var e=!1;try{n(function(n){e||(e=!0,u(t,n))},function(n){e||(e=!0,c(t,n))})}catch(r){if(e)return;e=!0,c(t,r)}}var n,e;n=this,e=setTimeout,i.prototype["catch"]=function(n){return this.then(null,n)},i.prototype.then=function(n,t){var e=new this.constructor(r);return o(this,new f(n,t,e)),e},i.all=function(n){var a=Array.prototype.slice.call(n);return new i(function(o,i){if(0===a.length)return o([]);var u=a.length;function c(t,n){try{if(n&&("object"==typeof n||"function"==typeof n)){var e=n.then;if("function"==typeof e)return void e.call(n,function(n){c(t,n)},i)}a[t]=n,0==--u&&o(a)}catch(r){i(r)}}for(var n=0;n<a.length;n++)c(n,a[n])})},i.resolve=function(t){return t&&"object"==typeof t&&t.constructor===i?t:new i(function(n){n(t)})},i.reject=function(e){return new i(function(n,t){t(e)})},i.race=function(o){return new i(function(n,t){for(var e=0,r=o.length;e<r;e++)o[e].then(n,t)})},i._immediateFn="function"==typeof t?function(n){t(n)}:function(n){e(n,0)},i._unhandledRejectionFn=function(n){"undefined"!=typeof console&&console&&console.warn("Possible Unhandled Promise Rejection:",n)},i._setImmediateFn=function(n){i._immediateFn=n},i._setUnhandledRejectionFn=function(n){i._unhandledRejectionFn=n},void 0!==s&&s.exports?s.exports=i:n.Promise||(n.Promise=i)}).call(this,n("timers").setImmediate)},{timers:3}],3:[function(a,n,f){(function(n,t){var r=a("process/browser.js").nextTick,e=Function.prototype.apply,o=Array.prototype.slice,i={},u=0;function c(n,t){this._id=n,this._clearFn=t}f.setTimeout=function(){return new c(e.call(setTimeout,window,arguments),clearTimeout)},f.setInterval=function(){return new c(e.call(setInterval,window,arguments),clearInterval)},f.clearTimeout=f.clearInterval=function(n){n.close()},c.prototype.unref=c.prototype.ref=function(){},c.prototype.close=function(){this._clearFn.call(window,this._id)},f.enroll=function(n,t){clearTimeout(n._idleTimeoutId),n._idleTimeout=t},f.unenroll=function(n){clearTimeout(n._idleTimeoutId),n._idleTimeout=-1},f._unrefActive=f.active=function(n){clearTimeout(n._idleTimeoutId);var t=n._idleTimeout;0<=t&&(n._idleTimeoutId=setTimeout(function(){n._onTimeout&&n._onTimeout()},t))},f.setImmediate="function"==typeof n?n:function(n){var t=u++,e=!(arguments.length<2)&&o.call(arguments,1);return i[t]=!0,r(function(){i[t]&&(e?n.apply(null,e):n.call(null),f.clearImmediate(t))}),t},f.clearImmediate="function"==typeof t?t:function(n){delete i[n]}}).call(this,a("timers").setImmediate,a("timers").clearImmediate)},{"process/browser.js":1,timers:3}],4:[function(n,t,e){var r=n("promise-polyfill"),o="undefined"!=typeof window?window:Function("return this;")();t.exports={boltExport:o.Promise||r}},{"promise-polyfill":2}]},{},[4])(4)});function yn(n){c.setTimeout(function(){throw n},0)}function wn(n){var t=n.href;return 0<t.indexOf("@")&&-1===t.indexOf("//")&&-1===t.indexOf("mailto:")?J.some({message:"The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?",preprocess:function(n){return _(_({},n),{href:"mailto:"+t})}}):J.none()}function xn(n,t,e){var r=n.getAttrib(t,e);return null!==r&&0<r.length?J.some(r):J.none()}function kn(n,t){return n.dom.getParent(t,"a[href]")}function bn(n){return kn(n,n.selection.getStart())}function _n(n,t){if(t){var e=cn(t);if(/^#/.test(e)){var r=n.$(e);r.length&&n.selection.scrollIntoView(r[0],!0)}else b(t.href)}}var Tn=vn.exports.boltExport,On=function(n){var e=J.none(),t=[],r=function(n){o()?u(n):t.push(n)},o=function(){return e.isSome()},i=function(n){I(n,u)},u=function(t){e.each(function(n){c.setTimeout(function(){t(n)},0)})};return n(function(n){e=J.some(n),i(t),t=[]}),{get:r,map:function(e){return On(function(t){r(function(n){t(e(n))})})},isReady:o}},An={nu:On,pure:function(t){return On(function(n){n(t)})}},Cn=function(e){function n(n){e().then(n,yn)}return{map:function(n){return Cn(function(){return e().then(n)})},bind:function(t){return Cn(function(){return e().then(function(n){return t(n).toPromise()})})},anonBind:function(n){return Cn(function(){return e().then(function(){return n.toPromise()})})},toLazy:function(){return An.nu(n)},toCached:function(){var n=null;return Cn(function(){return null===n&&(n=e()),n})},toPromise:e,get:n}},Pn=function(n){return Cn(function(){return new Tn(n)})},Nn=function(n){return Cn(function(){return Tn.resolve(n)})},En=tinymce.util.Tools.resolve("tinymce.util.Delay"),In=function(n,t,r){return z([wn,function(e){return function(n){var t=n.href;return 1===e&&!dn(t)||0===e&&/^\s*www[\.|\d\.]/i.test(t)?J.some({message:"The URL you entered seems to be an external link. Do you want to add the required http:// prefix?",preprocess:function(n){return _(_({},n),{href:"http://"+t})}}):J.none()}}(t)],function(n){return n(r)}).fold(function(){return Nn(r)},function(e){return Pn(function(t){!function(t,n,e){var r=t.selection.getRng();En.setEditorTimeout(t,function(){t.windowManager.confirm(n,function(n){t.selection.setRng(r),e(n)})})}(n,e.message,function(n){t(n?e.preprocess(r):r)})})})},Sn=function(n){var t=n.dom.select("a:not([href])"),e=j(t,function(n){var t=n.name||n.id;return t?[{text:t,value:"#"+t}]:[]});return 0<e.length?J.some([{text:"None",value:""}].concat(e)):J.none()},jn=function(n){var t=y(n);return 0<t.length?mn.sanitize(t):J.none()},Fn=tinymce.util.Tools.resolve("tinymce.util.XHR"),Ln=function(t){function e(n){return t.convertURL(n.value||n.url,"href")}var n=h(t);return Pn(function(t){a(n)?Fn.send({url:n,success:function(n){return t(function(n){try{return J.some(JSON.parse(n))}catch(t){return J.none()}}(n))},error:function(n){return t(J.none())}}):s(n)?n(function(n){return t(J.some(n))}):t(J.from(n))}).map(function(n){return n.bind(mn.sanitizeWith(e)).map(function(n){return 0<n.length?[{text:"None",value:""}].concat(n):n})})},Rn=function(n,t){var e=v(n);if(0<e.length){var r=t.is("_blank");return(!1===x(n)?mn.sanitizeWith(function(n){return sn(mn.getValue(n),r)}):mn.sanitize)(e)}return J.none()},Dn=[{text:"Current window",value:""},{text:"New window",value:"_blank"}],Un=function(n){var t=g(n);return f(t)?mn.sanitize(t).orThunk(function(){return J.some(Dn)}):!1===t?J.none():J.some(Dn)},Mn=function(e,r){return Ln(e).map(function(n){var t=function(n,t){var e=n.dom,r=an(n.selection.getContent())?J.some(ln(n.selection,t)):J.none(),o=t?J.some(e.getAttrib(t,"href")):J.none(),i=t?J.from(e.getAttrib(t,"target")):J.none(),u=xn(e,t,"rel"),c=xn(e,t,"class");return{url:o,text:r,title:xn(e,t,"title"),target:i,rel:u,linkClass:c}}(e,r);return{anchor:t,catalogs:{targets:Un(e),rels:Rn(e,t.target),classes:jn(e),anchor:Sn(e),link:n},optNode:J.from(r),flags:{titleEnabled:w(e)}}})},zn=function(t){(function(n){var t=fn(n);return Mn(n,t)})(t).map(function(n){return function(n,t,e){var r=n.anchor.text.map(function(){return{name:"text",type:"input",label:"Text to display"}}).toArray(),o=n.flags.titleEnabled?[{name:"title",type:"input",label:"Title"}]:[],i=function(n,t){return{url:{value:n.anchor.url.getOr(""),meta:{attach:function(){},text:n.anchor.url.fold(function(){return""},function(){return n.anchor.text.getOr("")}),original:{value:n.anchor.url.getOr("")}}},text:n.anchor.text.getOr(""),title:n.anchor.title.getOr(""),anchor:n.anchor.url.getOr(""),link:n.anchor.url.getOr(""),rel:n.anchor.rel.getOr(""),target:n.anchor.target.or(t).getOr(""),linkClass:n.anchor.linkClass.getOr("")}}(n,J.from(p(e))),u=pn(i,n),c=n.catalogs;return{title:"Insert/Edit Link",size:"normal",body:{type:"panel",items:S([[{name:"url",type:"urlinput",filetype:"file",label:"URL"}],r,o,function(n){for(var t=[],e=function(n){t.push(n)},r=0;r<n.length;r++)n[r].each(e);return t}([c.anchor.map(mn.createUi("anchor","Anchors")),c.rels.map(mn.createUi("rel","Rel")),c.targets.map(mn.createUi("target","Open link in...")),c.link.map(mn.createUi("link","Link list")),c.classes.map(mn.createUi("linkClass","Class"))])])},buttons:[{type:"cancel",name:"cancel",text:"Cancel"},{type:"submit",name:"save",text:"Save",primary:!0}],initialData:i,onChange:function(t,n){var e=n.name;u.onChange(t.getData,{name:e}).each(function(n){t.setData(n)})},onSubmit:t}}(n,function(i,u,c){return function(n){var e=n.getData();if(!e.url.value)return on(i),void n.close();function t(t){return J.from(e[t]).filter(function(n){return!u.anchor[t].is(n)})}var r={href:e.url.value,text:t("text"),target:t("target"),rel:t("rel"),"class":t("linkClass"),title:t("title")},o={href:e.url.value,attach:e.url.meta!==undefined&&e.url.meta.attach?e.url.meta.attach:function(){}};In(i,c,r).get(function(n){rn(i,o,n)}),n.close()}}(t,n,d(t)),t)}).get(function(n){t.windowManager.open(n)})},qn=function(n){return function(){zn(n)}},Kn=function(n){return function(){_n(n,bn(n))}},Bn=function(e){e.on("click",function(n){var t=kn(e,n.target);t&&o.metaKeyPressed(n)&&(n.preventDefault(),_n(e,t))}),e.on("keydown",function(n){var t=bn(e);t&&13===n.keyCode&&function(n){return!0===n.altKey&&!1===n.shiftKey&&!1===n.ctrlKey&&!1===n.metaKey}(n)&&(n.preventDefault(),_n(e,t))})},Vn=function(e){return function(t){function n(n){return t.setActive(!e.readonly&&!!fn(e,n.element))}return e.on("NodeChange",n),function(){return e.off("NodeChange",n)}}},Wn=function(e){return function(t){t.setDisabled(!un(e.dom.getParents(e.selection.getStart())));function n(n){return t.setDisabled(!un(n.parents))}return e.on("NodeChange",n),function(){return e.off("NodeChange",n)}}},Hn=function(n){n.addCommand("mceLink",function(){k(n)?n.fire("contexttoolbar-show",{toolbarKey:"quicklink"}):qn(n)()})},$n=function(n){n.addShortcut("Meta+K","",function(){n.execCommand("mceLink")})},Gn=function(n){n.ui.registry.addToggleButton("link",{icon:"link",tooltip:"Insert/edit link",onAction:qn(n),onSetup:Vn(n)}),n.ui.registry.addButton("openlink",{icon:"new-tab",tooltip:"Open link",onAction:Kn(n),onSetup:Wn(n)}),n.ui.registry.addButton("unlink",{icon:"unlink",tooltip:"Remove link",onAction:function(){return on(n)},onSetup:Wn(n)})},Jn=function(n){n.ui.registry.addMenuItem("openlink",{text:"Open link",icon:"new-tab",onAction:Kn(n),onSetup:Wn(n)}),n.ui.registry.addMenuItem("link",{icon:"link",text:"Link...",shortcut:"Meta+K",onAction:qn(n)}),n.ui.registry.addMenuItem("unlink",{icon:"unlink",text:"Remove link",onAction:function(){return on(n)},onSetup:Wn(n)})},Xn=function(t){t.ui.registry.addContextMenu("link",{update:function(n){return un(t.dom.getParents(n,"a"))?"link unlink openlink":"link"}})},Qn=function(i){function n(n){var t=i.selection.getNode();return n.setDisabled(!fn(i,t)),function(){}}i.ui.registry.addContextForm("quicklink",{launch:{type:"contextformtogglebutton",icon:"link",tooltip:"Link",onSetup:Vn(i)},label:"Link",predicate:function(n){return!!fn(i,n)&&m(i)},initValue:function(){var n=fn(i);return n?cn(n):""},commands:[{type:"contextformtogglebutton",icon:"link",tooltip:"Link",primary:!0,onSetup:function(n){var t=i.selection.getNode();return n.setActive(!!fn(i,t)),Vn(i)(n)},onAction:function(n){var t=fn(i),e=n.getValue();if(t)i.dom.setAttrib(t,"href",e),function(n){n.selection.collapse(!1)}(i),n.hide();else{var r={href:e,attach:function(){}},o=an(i.selection.getContent())?J.some(ln(i.selection,t)).filter(function(n){return 0<n.length}).or(J.from(e)):J.none();rn(i,r,{href:e,text:o,title:J.none(),rel:J.none(),target:J.none(),"class":J.none()}),n.hide()}}},{type:"contextformbutton",icon:"unlink",tooltip:"Remove link",onSetup:n,onAction:function(n){on(i),n.hide()}},{type:"contextformbutton",icon:"new-tab",tooltip:"Open link",onSetup:n,onAction:function(n){Kn(i)(),n.hide()}}]})};!function Yn(){r.add("link",function(n){Gn(n),Jn(n),Xn(n),Qn(n),Bn(n),Hn(n),$n(n)})}()}(window);
\ No newline at end of file
diff --git a/website/js/vendor/tinymce/js/tinymce/plugins/lists/plugin.min.js b/website/js/vendor/tinymce/js/tinymce/plugins/lists/plugin.min.js
new file mode 100644 (file)
index 0000000..5510bb5
--- /dev/null
@@ -0,0 +1,9 @@
+/**
+ * Copyright (c) Tiny Technologies, Inc. All rights reserved.
+ * Licensed under the LGPL or a commercial license.
+ * For LGPL see License.txt in the project root for license information.
+ * For commercial licenses see https://www.tiny.cloud/
+ *
+ * Version: 5.1.5 (2019-12-19)
+ */
+!function(r){"use strict";function e(){}function l(e){return function(){return e}}function t(t){return function(){for(var e=[],n=0;n<arguments.length;n++)e[n]=arguments[n];return!t.apply(null,e)}}function n(){return a}var o,i=tinymce.util.Tools.resolve("tinymce.PluginManager"),u=l(!1),s=l(!0),a=(o={fold:function(e,n){return e()},is:u,isSome:u,isNone:s,getOr:d,getOrThunk:f,getOrDie:function(e){throw new Error(e||"error: getOrDie called on none.")},getOrNull:l(null),getOrUndefined:l(undefined),or:d,orThunk:f,map:n,each:e,bind:n,exists:u,forall:s,filter:n,equals:c,equals_:c,toArray:function(){return[]},toString:l("none()")},Object.freeze&&Object.freeze(o),o);function c(e){return e.isNone()}function f(e){return e()}function d(e){return e}function m(n){return function(e){return function(e){if(null===e)return"null";var n=typeof e;return"object"==n&&(Array.prototype.isPrototypeOf(e)||e.constructor&&"Array"===e.constructor.name)?"array":"object"==n&&(String.prototype.isPrototypeOf(e)||e.constructor&&"String"===e.constructor.name)?"string":n}(e)===n}}function g(e,n){for(var t=e.length,r=new Array(t),o=0;o<t;o++){var i=e[o];r[o]=n(i,o)}return r}function p(e,n){for(var t=0,r=e.length;t<r;t++){n(e[t],t)}}function v(e,n){for(var t=[],r=0,o=e.length;r<o;r++){var i=e[r];n(i,r)&&t.push(i)}return t}function h(e,n,t){return p(e,function(e){t=n(t,e)}),t}function N(e,n){for(var t=0,r=e.length;t<r;t++){var o=e[t];if(n(o,t))return $e.some(o)}return $e.none()}function y(e,n){return function(e){for(var n=[],t=0,r=e.length;t<r;++t){if(!We(e[t]))throw new Error("Arr.flatten item "+t+" was not an array, input: "+e);Qe.apply(n,e[t])}return n}(g(e,n))}function S(e){return 0===e.length?$e.none():$e.some(e[0])}function O(e){return 0===e.length?$e.none():$e.some(e[e.length-1])}function C(e,n,t){return 0!=(e.compareDocumentPosition(n)&t)}function b(e,n){var t=function(e,n){for(var t=0;t<e.length;t++){var r=e[t];if(r.test(n))return r}return undefined}(e,n);if(!t)return{major:0,minor:0};function r(e){return Number(n.replace(t,"$"+e))}return Ze(r(1),r(2))}function L(e,n){return function(){return n===e}}function T(e,n){return function(){return n===e}}function D(e,n){var t=String(n).toLowerCase();return N(e,function(e){return e.search(t)})}function E(e,n){return-1!==e.indexOf(n)}function w(n){return function(e){return E(e,n)}}function k(e,n){return e.dom()===n.dom()}function A(e,n,t){return e.isSome()&&n.isSome()?$e.some(t(e.getOrDie(),n.getOrDie())):$e.none()}function x(e){return $e.from(e.dom().parentNode).map(bn.fromDom)}function R(e){return g(e.dom().childNodes,bn.fromDom)}function I(e,n){var t=e.dom().childNodes;return $e.from(t[n]).map(bn.fromDom)}function _(e){return I(e,0)}function B(e){return I(e,e.dom().childNodes.length-1)}function P(n,t){x(n).each(function(e){e.dom().insertBefore(t.dom(),n.dom())})}function M(e,n){e.dom().appendChild(n.dom())}function U(n,e){p(e,function(e){M(n,e)})}function F(e){var n=e.dom();null!==n.parentNode&&n.parentNode.removeChild(n)}function j(e,n,t){return e.fire("ListMutation",{action:n,element:t})}function H(e,n){return function(e,n){for(var t=n!==undefined&&null!==n?n:Rn,r=0;r<e.length&&t!==undefined&&null!==t;++r)t=t[e[r]];return t}(e.split("."),n)}function $(e){return e&&"BR"===e.nodeName}function q(e){var n=e.selection.getStart(!0);return e.dom.getParent(n,"OL,UL,DL",Yn(e,n))}function W(e){var n=e.selection.getSelectedBlocks();return Pn.grep(function(t,e){var n=Pn.map(e,function(e){var n=t.dom.getParent(e,"li,dd,dt",Yn(t,e));return n||e});return Bn.unique(n)}(e,n),function(e){return Hn(e)})}function V(e,n){var t=e.dom.getParents(n,"ol,ul",Yn(e,n));return O(t)}function z(e,n){var t,r,o,i,u=e.dom,s=e.schema.getBlockElements(),a=u.createFragment();if(e.settings.forced_root_block&&(o=e.settings.forced_root_block),o&&((r=u.create(o)).tagName===e.settings.forced_root_block&&u.setAttribs(r,e.settings.forced_root_block_attrs),zn(n.firstChild,s)||a.appendChild(r)),n)for(;t=n.firstChild;){var c=t.nodeName;i||"SPAN"===c&&"bookmark"===t.getAttribute("data-mce-type")||(i=!0),zn(t,s)?(a.appendChild(t),r=null):o?(r||(r=u.create(o),a.appendChild(r)),r.appendChild(t)):a.appendChild(t)}return e.settings.forced_root_block?i||r.appendChild(u.create("br",{"data-mce-bogus":"1"})):a.appendChild(u.create("br")),a}function K(e){return e.dom().nodeName.toLowerCase()}function X(e,n){var t=e.dom();!function(e,n){for(var t=xn(e),r=0,o=t.length;r<o;r++){var i=t[r];n(e[i],i)}}(n,function(e,n){!function(e,n,t){if(!(qe(t)||Ve(t)||Ke(t)))throw r.console.error("Invalid call to Attr.set. Key ",n,":: Value ",t,":: Element ",e),new Error("Attribute value was not simple");e.setAttribute(n,t+"")}(t,n,e)})}function Q(e){return h(e.dom().attributes,function(e,n){return e[n.name]=n.value,e},{})}function Y(e,n,t){if(!qe(t))throw r.console.error("Invalid call to CSS.set. Property ",n,":: Value ",t,":: Element ",e),new Error("CSS value must be a string: "+t);!function(e){return e.style!==undefined&&ze(e.style.getPropertyValue)}(e)||e.style.setProperty(n,t)}function G(e){return function(e,n){return bn.fromDom(e.dom().cloneNode(n))}(e,!0)}function J(e,n){var t=function(e,n){var t=bn.fromTag(n),r=Q(e);return X(t,r),t}(e,n);P(e,t);var r=R(e);return U(t,r),F(e),t}function Z(e,n){M(e.item,n.list)}function ee(n,e,t){var r=e.slice(0,t.depth);return O(r).each(function(e){!function(e,n){M(e.list,n),e.item=n}(e,function(e,n,t){var r=bn.fromTag("li",e);return X(r,n),U(r,t),r}(n,t.itemAttributes,t.content)),function(e,n){K(e.list)!==n.listType&&(e.list=J(e.list,n.listType)),X(e.list,n.listAttributes)}(e,t)}),r}function ne(e,n,t){var r=function(e,n,t){for(var r,o,i,u=[],s=0;s<t;s++)u.push((r=e,o=n.listType,void 0,i={list:bn.fromTag(o,r),item:bn.fromTag("li",r)},M(i.list,i.item),i));return u}(e,t,t.depth-n.length);return function(e){for(var n=1;n<e.length;n++)Z(e[n-1],e[n])}(r),function(e,n){for(var t=0;t<e.length-1;t++)r=e[t].item,o="list-style-type",i="none",void 0,u=r.dom(),Y(u,o,i);var r,o,i,u;O(e).each(function(e){X(e.list,n.listAttributes),X(e.item,n.itemAttributes),U(e.item,n.content)})}(r,t),function(e,n){A(O(e),S(n),Z)}(n,r),n.concat(r)}function te(e){return En(e,"OL,UL")}function re(e){return _(e).map(te).getOr(!1)}function oe(e){return 0<e.depth}function ie(e){return e.isSelected}function ue(e){var n=R(e),t=function(e){return B(e).map(te).getOr(!1)}(e)?n.slice(0,-1):n;return g(t,G)}function se(t){p(t,function(n,e){(function(e,n){for(var t=e[n].depth,r=n-1;0<=r;r--){if(e[r].depth===t)return $e.some(e[r]);if(e[r].depth<t)break}return $e.none()})(t,e).each(function(e){!function(e,n){e.listType=n.listType,e.listAttributes=nt({},n.listAttributes)}(n,e)})})}function ae(t,r,o,i){return _(i).filter(te).fold(function(){r.each(function(e){k(e.start,i)&&o.set(!0)});var e=function(n,t,r){return x(n).filter(Zn).map(function(e){return{depth:t,isSelected:r,content:ue(n),itemAttributes:Q(n),listAttributes:Q(e),listType:K(e)}})}(i,t,o.get());r.each(function(e){k(e.end,i)&&o.set(!1)});var n=B(i).filter(te).map(function(e){return tt(t,r,o,e)}).getOr([]);return e.toArray().concat(n)},function(e){return tt(t,r,o,e)})}function ce(t,e){return g(e,function(e){var n=function(e,n){var t=(n||r.document).createDocumentFragment();return p(e,function(e){t.appendChild(e.dom())}),bn.fromDom(t)}(e.content);return bn.fromDom(z(t,n.dom()))})}function fe(e,n){return se(n),function(t,e){var n=h(e,function(e,n){return n.depth>e.length?ne(t,e,n):ee(t,e,n)},[]);return S(n).map(function(e){return e.list})}(e.contentDocument,n).toArray()}function de(e){var n=g(Jn.getSelectedListItems(e),bn.fromDom);return A(N(n,t(re)),N(function(e){var n=Xe.call(e,0);return n.reverse(),n}(n),t(re)),function(e,n){return{start:e,end:n}})}function le(t,e,r){var n=function(e,n){var t=Ge(!1);return g(e,function(e){return{sourceList:e,entries:tt(0,n,t,e)}})}(e,de(t));p(n,function(e){!function(e,n){p(v(e,ie),function(e){return function(e,n){switch(e){case"Indent":n.depth++;break;case"Outdent":n.depth--;break;case"Flatten":n.depth=0}}(n,e)})}(e.entries,r);var n=function(n,e){return y(function(e,n){if(0===e.length)return[];for(var t=n(e[0]),r=[],o=[],i=0,u=e.length;i<u;i++){var s=e[i],a=n(s);a!==t&&(r.push(o),o=[]),t=a,o.push(s)}return 0!==o.length&&r.push(o),r}(e,oe),function(e){return S(e).map(oe).getOr(!1)?fe(n,e):ce(n,e)})}(t,e.entries);p(n,function(e){j(t,"Indent"===r?"IndentList":"OutdentList",e.dom())}),function(n,e){p(e,function(e){P(n,e)})}(e.sourceList,n),F(e.sourceList)})}function me(e){En(e,"dt")&&J(e,"dd")}function ge(n,e,t){p(t,"Indent"===e?me:function(e){return function(n,t){En(t,"dd")?J(t,"dt"):En(t,"dt")&&x(t).each(function(e){return it(n,e.dom(),t.dom())})}(n,e)})}function pe(e,n){if(Mn(e))return{container:e,offset:n};var t=wn.getNode(e,n);return Mn(t)?{container:t,offset:n>=e.childNodes.length?t.data.length:0}:t.previousSibling&&Mn(t.previousSibling)?{container:t.previousSibling,offset:t.previousSibling.data.length}:t.nextSibling&&Mn(t.nextSibling)?{container:t.nextSibling,offset:0}:{container:e,offset:n}}function ve(e,n){var t=g(Jn.getSelectedListRoots(e),bn.fromDom),r=g(Jn.getSelectedDlItems(e),bn.fromDom),o=!1;if(t.length||r.length){var i=e.selection.getBookmark();le(e,t,n),ge(e,n,r),e.selection.moveToBookmark(i),e.selection.setRng(ut(e.selection.getRng())),e.nodeChanged(),o=!0}return o}function he(e){return ve(e,"Indent")}function Ne(e){return ve(e,"Outdent")}function ye(e){return ve(e,"Flatten")}function Se(e){return/\btox\-/.test(e.className)}function Oe(e){switch(e){case"UL":return"ToggleUlList";case"OL":return"ToggleOlList";case"DL":return"ToggleDLList"}}function Ce(t,e){Pn.each(e,function(e,n){t.setAttribute(n,e)})}function be(e,n,t){!function(e,n,t){var r=t["list-style-type"]?t["list-style-type"]:null;e.setStyle(n,"list-style-type",r)}(e,n,t),function(e,n,t){Ce(n,t["list-attributes"]),Pn.each(e.select("li",n),function(e){Ce(e,t["list-item-attributes"])})}(e,n,t)}function Le(e,n,t,r){var o,i;for(o=n[t?"startContainer":"endContainer"],i=n[t?"startOffset":"endOffset"],1===o.nodeType&&(o=o.childNodes[Math.min(i,o.childNodes.length-1)]||o),!t&&qn(o.nextSibling)&&(o=o.nextSibling);o.parentNode!==r;){if(Vn(e,o))return o;if(/^(TD|TH)$/.test(o.parentNode.nodeName))return o;o=o.parentNode}return o}function Te(r,o,i){void 0===i&&(i={});var e,n=r.selection.getRng(!0),u="LI",t=Jn.getClosestListRootElm(r,r.selection.getStart(!0)),s=r.dom;"false"!==s.getContentEditable(r.selection.getNode())&&("DL"===(o=o.toUpperCase())&&(u="DT"),e=ct(n),Pn.each(function(t,e,r){for(var o,i=[],u=t.dom,n=Le(t,e,!0,r),s=Le(t,e,!1,r),a=[],c=n;c&&(a.push(c),c!==s);c=c.nextSibling);return Pn.each(a,function(e){if(Vn(t,e))return i.push(e),void(o=null);if(u.isBlock(e)||qn(e))return qn(e)&&u.remove(e),void(o=null);var n=e.nextSibling;st.isBookmarkNode(e)&&(Vn(t,n)||!n&&e.parentNode===r)?o=null:(o||(o=u.create("p"),e.parentNode.insertBefore(o,e),i.push(o)),o.appendChild(e))}),i}(r,n,t),function(e){var n,t;(t=e.previousSibling)&&Un(t)&&t.nodeName===o&&function(e,n,t){var r=e.getStyle(n,"list-style-type"),o=t?t["list-style-type"]:"";return r===(o=null===o?"":o)}(s,t,i)?(n=t,e=s.rename(e,u),t.appendChild(e)):(n=s.create(o),e.parentNode.insertBefore(n,e),n.appendChild(e),e=s.rename(e,u)),function(t,r,e){Pn.each(e,function(e){var n;return t.setStyle(r,((n={})[e]="",n))})}(s,e,["margin","margin-right","margin-bottom","margin-left","margin-top","padding","padding-right","padding-bottom","padding-left","padding-top"]),be(s,n,i),dt(r.dom,n)}),r.selection.setRng(ft(e)))}function De(e,n,t){return function(e,n){return e&&n&&Un(e)&&e.nodeName===n.nodeName}(n,t)&&function(e,n,t){return e.getStyle(n,"list-style-type",!0)===e.getStyle(t,"list-style-type",!0)}(e,n,t)&&function(e,n){return e.className===n.className}(n,t)}function Ee(n,e,t,r,o){if(e.nodeName!==r||lt(o)){var i=ct(n.selection.getRng(!0));Pn.each([e].concat(t),function(e){!function(e,n,t,r){if(n.nodeName!==t){var o=e.dom.rename(n,t);be(e.dom,o,r),j(e,Oe(t),o)}else be(e.dom,n,r),j(e,Oe(t),n)}(n,e,r,o)}),n.selection.setRng(ft(i))}else ye(n)}function we(e,n){var t,r=n.parentNode;"LI"===r.nodeName&&r.firstChild===n&&((t=r.previousSibling)&&"LI"===t.nodeName?(t.appendChild(n),Xn(e,r)&&gt.remove(r)):gt.setStyle(r,"listStyleType","none")),Un(r)&&(t=r.previousSibling)&&"LI"===t.nodeName&&t.appendChild(n)}function ke(e,n,t,r){var o=n.startContainer,i=n.startOffset;if(Mn(o)&&(t?i<o.data.length:0<i))return o;var u=e.schema.getNonEmptyElements();1===o.nodeType&&(o=wn.getNode(o,i));var s=new kn(o,r);for(t&&Kn(e.dom,o)&&s.next();o=s[t?"next":"prev2"]();){if("LI"===o.nodeName&&!o.hasChildNodes())return o;if(u[o.nodeName])return o;if(Mn(o)&&0<o.data.length)return o}}function Ae(e,n){var t=n.childNodes;return 1===t.length&&!Un(t[0])&&e.isBlock(t[0])}function xe(e,n,t){var r,o;if(o=Ae(e,t)?t.firstChild:t,function(e,n){Ae(e,n)&&e.remove(n.firstChild,!0)}(e,n),!Xn(e,n,!0))for(;r=n.firstChild;)o.appendChild(r)}function Re(n,e,t){var r,o,i=e.parentNode;if(Qn(n,e)&&Qn(n,t)){Un(t.lastChild)&&(o=t.lastChild),i===t.lastChild&&qn(i.previousSibling)&&n.remove(i.previousSibling),(r=t.lastChild)&&qn(r)&&e.hasChildNodes()&&n.remove(r),Xn(n,t,!0)&&n.$(t).empty(),xe(n,e,t),o&&t.appendChild(o);var u=Dn(bn.fromDom(t),bn.fromDom(e))?n.getParents(e,Un,t):[];n.remove(e),p(u,function(e){Xn(n,e)&&e!==n.getRoot()&&n.remove(e)})}}function Ie(e,n,t,r){var o=e.dom;if(o.isEmpty(r))!function(e,n,t){e.dom.$(t).empty(),Re(e.dom,n,t),e.selection.setCursorLocation(t)}(e,t,r);else{var i=ct(n);Re(o,t,r),e.selection.setRng(ft(i))}}function _e(e,n){var t=e.dom,r=e.selection,o=r.getStart(),i=Jn.getClosestListRootElm(e,o),u=t.getParent(r.getStart(),"LI",i);if(u){var s=u.parentNode;if(s===e.getBody()&&Xn(t,s))return!0;var a=ut(r.getRng()),c=t.getParent(ke(e,a,n,i),"LI",i);if(c&&c!==u)return e.undoManager.transact(function(){n?Ie(e,a,c,u):Wn(u)?Ne(e):function(e,n,t,r){var o=ct(n);Re(e.dom,t,r);var i=ft(o);e.selection.setRng(i)}(e,a,u,c)}),!0;if(!c&&!n&&0===a.startOffset&&0===a.endOffset)return e.undoManager.transact(function(){ye(e)}),!0}return!1}function Be(e,n){return _e(e,n)||function(e,n){var t=e.dom,r=e.selection.getStart(),o=Jn.getClosestListRootElm(e,r),i=t.getParent(r,t.isBlock,o);if(i&&t.isEmpty(i)){var u=ut(e.selection.getRng()),s=t.getParent(ke(e,u,n,o),"LI",o);if(s)return e.undoManager.transact(function(){!function(e,n,t){var r=e.getParent(n.parentNode,e.isBlock,t);e.remove(n),r&&e.isEmpty(r)&&e.remove(r)}(t,i,o),mt.mergeWithAdjacentLists(t,s.parentNode),e.selection.select(s,!0),e.selection.collapse(n)}),!0}return!1}(e,n)}function Pe(e,n){return e.selection.isCollapsed()?Be(e,n):function(e){var n=e.selection.getStart(),t=Jn.getClosestListRootElm(e,n);return!!(e.dom.getParent(n,"LI,DT,DD",t)||0<Jn.getSelectedListItems(e).length)&&(e.undoManager.transact(function(){e.execCommand("Delete"),pt(e.dom,e.getBody())}),!0)}(e)}function Me(n,t){return function(){var e=n.dom.getParent(n.selection.getStart(),"UL,OL,DL");return e&&e.nodeName===t}}function Ue(n,i){return function(o){function e(e){var n=function(e,n){for(var t=0;t<e.length;t++){if(n(e[t]))return t}return-1}(e.parents,$n),t=-1!==n?e.parents.slice(0,n):e.parents,r=Pn.grep(t,Un);o.setActive(0<r.length&&r[0].nodeName===i&&!Se(r[0]))}return n.on("NodeChange",e),function(){return n.off("NodeChange",e)}}}var Fe,je,He=function(t){function e(){return o}function n(e){return e(t)}var r=l(t),o={fold:function(e,n){return n(t)},is:function(e){return t===e},isSome:s,isNone:u,getOr:r,getOrThunk:r,getOrDie:r,getOrNull:r,getOrUndefined:r,or:e,orThunk:e,map:function(e){return He(e(t))},each:function(e){e(t)},bind:n,exists:n,forall:n,filter:function(e){return e(t)?o:a},toArray:function(){return[t]},toString:function(){return"some("+t+")"},equals:function(e){return e.is(t)},equals_:function(e,n){return e.fold(u,function(e){return n(t,e)})}};return o},$e={some:He,none:n,from:function(e){return null===e||e===undefined?a:He(e)}},qe=m("string"),We=m("array"),Ve=m("boolean"),ze=m("function"),Ke=m("number"),Xe=Array.prototype.slice,Qe=Array.prototype.push,Ye=(ze(Array.from)&&Array.from,function(e,n){return C(e,n,r.Node.DOCUMENT_POSITION_CONTAINED_BY)}),Ge=function(e){function n(){return t}var t=e;return{get:n,set:function(e){t=e},clone:function(){return Ge(n())}}},Je=function(){return Ze(0,0)},Ze=function(e,n){return{major:e,minor:n}},en={nu:Ze,detect:function(e,n){var t=String(n).toLowerCase();return 0===e.length?Je():b(e,t)},unknown:Je},nn="Edge",tn="Chrome",rn="Opera",on="Firefox",un="Safari",sn=function(e){var n=e.current;return{current:n,version:e.version,isEdge:L(nn,n),isChrome:L(tn,n),isIE:L("IE",n),isOpera:L(rn,n),isFirefox:L(on,n),isSafari:L(un,n)}},an={unknown:function(){return sn({current:undefined,version:en.unknown()})},nu:sn,edge:l(nn),chrome:l(tn),ie:l("IE"),opera:l(rn),firefox:l(on),safari:l(un)},cn="Windows",fn="Android",dn="Solaris",ln="FreeBSD",mn=function(e){var n=e.current;return{current:n,version:e.version,isWindows:T(cn,n),isiOS:T("iOS",n),isAndroid:T(fn,n),isOSX:T("OSX",n),isLinux:T("Linux",n),isSolaris:T(dn,n),isFreeBSD:T(ln,n)}},gn={unknown:function(){return mn({current:undefined,version:en.unknown()})},nu:mn,windows:l(cn),ios:l("iOS"),android:l(fn),linux:l("Linux"),osx:l("OSX"),solaris:l(dn),freebsd:l(ln)},pn=function(e,t){return D(e,t).map(function(e){var n=en.detect(e.versionRegexes,t);return{current:e.name,version:n}})},vn=function(e,t){return D(e,t).map(function(e){var n=en.detect(e.versionRegexes,t);return{current:e.name,version:n}})},hn=/.*?version\/\ ?([0-9]+)\.([0-9]+).*/,Nn=[{name:"Edge",versionRegexes:[/.*?edge\/ ?([0-9]+)\.([0-9]+)$/],search:function(e){return E(e,"edge/")&&E(e,"chrome")&&E(e,"safari")&&E(e,"applewebkit")}},{name:"Chrome",versionRegexes:[/.*?chrome\/([0-9]+)\.([0-9]+).*/,hn],search:function(e){return E(e,"chrome")&&!E(e,"chromeframe")}},{name:"IE",versionRegexes:[/.*?msie\ ?([0-9]+)\.([0-9]+).*/,/.*?rv:([0-9]+)\.([0-9]+).*/],search:function(e){return E(e,"msie")||E(e,"trident")}},{name:"Opera",versionRegexes:[hn,/.*?opera\/([0-9]+)\.([0-9]+).*/],search:w("opera")},{name:"Firefox",versionRegexes:[/.*?firefox\/\ ?([0-9]+)\.([0-9]+).*/],search:w("firefox")},{name:"Safari",versionRegexes:[hn,/.*?cpu os ([0-9]+)_([0-9]+).*/],search:function(e){return(E(e,"safari")||E(e,"mobile/"))&&E(e,"applewebkit")}}],yn=[{name:"Windows",search:w("win"),versionRegexes:[/.*?windows\ nt\ ?([0-9]+)\.([0-9]+).*/]},{name:"iOS",search:function(e){return E(e,"iphone")||E(e,"ipad")},versionRegexes:[/.*?version\/\ ?([0-9]+)\.([0-9]+).*/,/.*cpu os ([0-9]+)_([0-9]+).*/,/.*cpu iphone os ([0-9]+)_([0-9]+).*/]},{name:"Android",search:w("android"),versionRegexes:[/.*?android\ ?([0-9]+)\.([0-9]+).*/]},{name:"OSX",search:w("os x"),versionRegexes:[/.*?os\ x\ ?([0-9]+)_([0-9]+).*/]},{name:"Linux",search:w("linux"),versionRegexes:[]},{name:"Solaris",search:w("sunos"),versionRegexes:[]},{name:"FreeBSD",search:w("freebsd"),versionRegexes:[]}],Sn={browsers:l(Nn),oses:l(yn)},On=Ge(function(e,n){var t=Sn.browsers(),r=Sn.oses(),o=pn(t,e).fold(an.unknown,an.nu),i=vn(r,e).fold(gn.unknown,gn.nu);return{browser:o,os:i,deviceType:function(e,n,t,r){var o=e.isiOS()&&!0===/ipad/i.test(t),i=e.isiOS()&&!o,u=e.isiOS()||e.isAndroid(),s=u||r("(pointer:coarse)"),a=o||!i&&u&&r("(min-device-width:768px)"),c=i||u&&!a,f=n.isSafari()&&e.isiOS()&&!1===/safari/i.test(t),d=!c&&!a&&!f;return{isiPad:l(o),isiPhone:l(i),isTablet:l(a),isPhone:l(c),isTouch:l(s),isAndroid:e.isAndroid,isiOS:e.isiOS,isWebView:l(f),isDesktop:l(d)}}(i,o,e,n)}}(r.navigator.userAgent,function(e){return r.window.matchMedia(e).matches})),Cn=function(e){if(null===e||e===undefined)throw new Error("Node cannot be null or undefined");return{dom:l(e)}},bn={fromHtml:function(e,n){var t=(n||r.document).createElement("div");if(t.innerHTML=e,!t.hasChildNodes()||1<t.childNodes.length)throw r.console.error("HTML does not have a single root node",e),new Error("HTML must have a single root node");return Cn(t.childNodes[0])},fromTag:function(e,n){var t=(n||r.document).createElement(e);return Cn(t)},fromText:function(e,n){var t=(n||r.document).createTextNode(e);return Cn(t)},fromDom:Cn,fromPoint:function(e,n,t){var r=e.dom();return $e.from(r.elementFromPoint(n,t)).map(Cn)}},Ln=(r.Node.ATTRIBUTE_NODE,r.Node.CDATA_SECTION_NODE,r.Node.COMMENT_NODE,r.Node.DOCUMENT_NODE,r.Node.DOCUMENT_TYPE_NODE,r.Node.DOCUMENT_FRAGMENT_NODE,r.Node.ELEMENT_NODE),Tn=(r.Node.TEXT_NODE,r.Node.PROCESSING_INSTRUCTION_NODE,r.Node.ENTITY_REFERENCE_NODE,r.Node.ENTITY_NODE,r.Node.NOTATION_NODE,Ln),Dn=On.get().browser.isIE()?function(e,n){return Ye(e.dom(),n.dom())}:function(e,n){var t=e.dom(),r=n.dom();return t!==r&&t.contains(r)},En=function(e,n){var t=e.dom();if(t.nodeType!==Tn)return!1;var r=t;if(r.matches!==undefined)return r.matches(n);if(r.msMatchesSelector!==undefined)return r.msMatchesSelector(n);if(r.webkitMatchesSelector!==undefined)return r.webkitMatchesSelector(n);if(r.mozMatchesSelector!==undefined)return r.mozMatchesSelector(n);throw new Error("Browser lacks native selectors")},wn=tinymce.util.Tools.resolve("tinymce.dom.RangeUtils"),kn=tinymce.util.Tools.resolve("tinymce.dom.TreeWalker"),An=tinymce.util.Tools.resolve("tinymce.util.VK"),xn=Object.keys,Rn=(function(){for(var e=[],n=0;n<arguments.length;n++)e[n]=arguments[n]}("element","offset"),"undefined"!=typeof r.window?r.window:Function("return this;")()),In=function(e,n){var t=function(e,n){return H(e,n)}(e,n);if(t===undefined||null===t)throw new Error(e+" not available on this browser");return t},_n=function(e){return function(e){return In("HTMLElement",e)}(H("ownerDocument.defaultView",e)).prototype.isPrototypeOf(e)},Bn=tinymce.util.Tools.resolve("tinymce.dom.DomQuery"),Pn=tinymce.util.Tools.resolve("tinymce.util.Tools"),Mn=function(e){return e&&3===e.nodeType},Un=function(e){return e&&/^(OL|UL|DL)$/.test(e.nodeName)},Fn=function(e){return e&&/^(OL|UL)$/.test(e.nodeName)},jn=function(e){return e&&/^(DT|DD)$/.test(e.nodeName)},Hn=function(e){return e&&/^(LI|DT|DD)$/.test(e.nodeName)},$n=function(e){return e&&/^(TH|TD)$/.test(e.nodeName)},qn=$,Wn=function(e){return e.parentNode.firstChild===e},Vn=function(e,n){return n&&!!e.schema.getTextBlockElements()[n.nodeName]},zn=function(e,n){return e&&e.nodeName in n},Kn=function(e,n){return!!$(n)&&!(!e.isBlock(n.nextSibling)||$(n.previousSibling))},Xn=function(e,n,t){var r=e.isEmpty(n);return!(t&&0<e.select("span[data-mce-type=bookmark]",n).length)&&r},Qn=function(e,n){return e.isChildOf(n,e.getRoot())},Yn=function(e,n){var t=e.dom.getParents(n,"TD,TH");return 0<t.length?t[0]:e.getBody()},Gn=function(n,e){var t=g(e,function(e){return V(n,e).getOr(e)});return Bn.unique(t)},Jn={isList:function(e){var n=q(e);return _n(n)},getParentList:q,getSelectedSubLists:function(e){var n=q(e),t=e.selection.getSelectedBlocks();return function(e,n){return e&&1===n.length&&n[0]===e}(n,t)?function(e){return Pn.grep(e.querySelectorAll("ol,ul,dl"),function(e){return Un(e)})}(n):Pn.grep(t,function(e){return Un(e)&&n!==e})},getSelectedListItems:W,getClosestListRootElm:Yn,getSelectedDlItems:function(e){return v(W(e),jn)},getSelectedListRoots:function(e){var n=function(e){var n=V(e,e.selection.getStart()),t=v(e.selection.getSelectedBlocks(),Fn);return n.toArray().concat(t)}(e);return Gn(e,n)}},Zn=(Fe=Ln,function(e){return function(e){return e.dom().nodeType}(e)===Fe}),et=Object.prototype.hasOwnProperty,nt=(je=function(e,n){return n},function(){for(var e=new Array(arguments.length),n=0;n<e.length;n++)e[n]=arguments[n];if(0===e.length)throw new Error("Can't merge zero objects");for(var t={},r=0;r<e.length;r++){var o=e[r];for(var i in o)et.call(o,i)&&(t[i]=je(t[i],o[i]))}return t}),tt=function(n,t,r,e){return y(R(e),function(e){return(te(e)?tt:ae)(n+1,t,r,e)})},rt=tinymce.util.Tools.resolve("tinymce.dom.DOMUtils"),ot=rt.DOM,it=function(e,n,t){var r,o,i,u,s,a;for(i=ot.select('span[data-mce-type="bookmark"]',n),s=z(e,t),(r=ot.createRng()).setStartAfter(t),r.setEndAfter(n),u=(o=r.extractContents()).firstChild;u;u=u.firstChild)if("LI"===u.nodeName&&e.dom.isEmpty(u)){ot.remove(u);break}e.dom.isEmpty(o)||ot.insertAfter(o,n),ot.insertAfter(s,n),Xn(e.dom,t.parentNode)&&(a=t.parentNode,Pn.each(i,function(e){a.parentNode.insertBefore(e,t.parentNode)}),ot.remove(a)),ot.remove(t),Xn(e.dom,n)&&ot.remove(n)},ut=function(e){var n=e.cloneRange(),t=pe(e.startContainer,e.startOffset);n.setStart(t.container,t.offset);var r=pe(e.endContainer,e.endOffset);return n.setEnd(r.container,r.offset),n},st=tinymce.util.Tools.resolve("tinymce.dom.BookmarkManager"),at=rt.DOM,ct=function(o){function e(e){var n,t,r;t=o[e?"startContainer":"endContainer"],r=o[e?"startOffset":"endOffset"],1===t.nodeType&&(n=at.create("span",{"data-mce-type":"bookmark"}),t.hasChildNodes()?(r=Math.min(r,t.childNodes.length-1),e?t.insertBefore(n,t.childNodes[r]):at.insertAfter(n,t.childNodes[r])):t.appendChild(n),t=n,r=0),i[e?"startContainer":"endContainer"]=t,i[e?"startOffset":"endOffset"]=r}var i={};return e(!0),o.collapsed||e(),i},ft=function(o){function e(e){var n,t,r;n=r=o[e?"startContainer":"endContainer"],t=o[e?"startOffset":"endOffset"],n&&(1===n.nodeType&&(t=function(e){for(var n=e.parentNode.firstChild,t=0;n;){if(n===e)return t;1===n.nodeType&&"bookmark"===n.getAttribute("data-mce-type")||t++,n=n.nextSibling}return-1}(n),n=n.parentNode,at.remove(r),!n.hasChildNodes()&&at.isBlock(n)&&n.appendChild(at.create("br"))),o[e?"startContainer":"endContainer"]=n,o[e?"startOffset":"endOffset"]=t)}e(!0),e();var n=at.createRng();return n.setStart(o.startContainer,o.startOffset),o.endContainer&&n.setEnd(o.endContainer,o.endOffset),ut(n)},dt=function(e,n){var t,r;if(t=n.nextSibling,De(e,n,t)){for(;r=t.firstChild;)n.appendChild(r);e.remove(t)}if(t=n.previousSibling,De(e,n,t)){for(;r=t.lastChild;)n.insertBefore(r,n.firstChild);e.remove(t)}},lt=function(e){return"list-style-type"in e},mt={toggleList:function(e,n,t){var r=Jn.getParentList(e),o=Jn.getSelectedSubLists(e);t=t||{},r&&0<o.length?Ee(e,r,o,n,t):function(e,n,t,r){if(n!==e.getBody())if(n)if(n.nodeName!==t||lt(r)||Se(n)){var o=ct(e.selection.getRng(!0));be(e.dom,n,r);var i=e.dom.rename(n,t);dt(e.dom,i),e.selection.setRng(ft(o)),j(e,Oe(t),i)}else ye(e);else Te(e,t,r),j(e,Oe(t),n)}(e,r,n,t)},mergeWithAdjacentLists:dt},gt=rt.DOM,pt=function(n,e){Pn.each(Pn.grep(n.select("ol,ul",e)),function(e){we(n,e)})},vt=function(n){n.on("keydown",function(e){e.keyCode===An.BACKSPACE?Pe(n,!1)&&e.preventDefault():e.keyCode===An.DELETE&&Pe(n,!0)&&e.preventDefault()})},ht=Pe,Nt=function(n){return{backspaceDelete:function(e){ht(n,e)}}},yt=function(t){t.on("BeforeExecCommand",function(e){var n=e.command.toLowerCase();"indent"===n?he(t):"outdent"===n&&Ne(t)}),t.addCommand("InsertUnorderedList",function(e,n){mt.toggleList(t,"UL",n)}),t.addCommand("InsertOrderedList",function(e,n){mt.toggleList(t,"OL",n)}),t.addCommand("InsertDefinitionList",function(e,n){mt.toggleList(t,"DL",n)}),t.addCommand("RemoveList",function(){ye(t)}),t.addQueryStateHandler("InsertUnorderedList",Me(t,"UL")),t.addQueryStateHandler("InsertOrderedList",Me(t,"OL")),t.addQueryStateHandler("InsertDefinitionList",Me(t,"DL"))},St=function(e){return e.getParam("lists_indent_on_tab",!0)},Ot=function(e){St(e)&&function(n){n.on("keydown",function(e){e.keyCode!==An.TAB||An.metaKeyPressed(e)||n.undoManager.transact(function(){(e.shiftKey?Ne(n):he(n))&&e.preventDefault()})})}(e),vt(e)},Ct=function(n){function e(e){return function(){return n.execCommand(e)}}var t,r,o;r="advlist",o=(t=n).settings.plugins?t.settings.plugins:"",-1===Pn.inArray(o.split(/[ ,]/),r)&&(n.ui.registry.addToggleButton("numlist",{icon:"ordered-list",active:!1,tooltip:"Numbered list",onAction:e("InsertOrderedList"),onSetup:Ue(n,"OL")}),n.ui.registry.addToggleButton("bullist",{icon:"unordered-list",active:!1,tooltip:"Bullet list",onAction:e("InsertUnorderedList"),onSetup:Ue(n,"UL")}))};!function bt(){i.add("lists",function(e){return Ot(e),Ct(e),yt(e),Nt(e)})}()}(window);
\ No newline at end of file
diff --git a/website/js/vendor/tinymce/js/tinymce/plugins/media/plugin.min.js b/website/js/vendor/tinymce/js/tinymce/plugins/media/plugin.min.js
new file mode 100644 (file)
index 0000000..66d7bde
--- /dev/null
@@ -0,0 +1,9 @@
+/**
+ * Copyright (c) Tiny Technologies, Inc. All rights reserved.
+ * Licensed under the LGPL or a commercial license.
+ * For LGPL see License.txt in the project root for license information.
+ * For commercial licenses see https://www.tiny.cloud/
+ *
+ * Version: 5.1.5 (2019-12-19)
+ */
+!function(){"use strict";function e(){}function o(e){return function(){return e}}function t(){return u}var r,n=tinymce.util.Tools.resolve("tinymce.PluginManager"),d=function(){return(d=Object.assign||function(e){for(var t,r=1,n=arguments.length;r<n;r++)for(var i in t=arguments[r])Object.prototype.hasOwnProperty.call(t,i)&&(e[i]=t[i]);return e}).apply(this,arguments)},a=o(!1),c=o(!0),u=(r={fold:function(e,t){return e()},is:a,isSome:a,isNone:c,getOr:l,getOrThunk:s,getOrDie:function(e){throw new Error(e||"error: getOrDie called on none.")},getOrNull:o(null),getOrUndefined:o(undefined),or:l,orThunk:s,map:t,each:e,bind:t,exists:a,forall:c,filter:t,equals:i,equals_:i,toArray:function(){return[]},toString:o("none()")},Object.freeze&&Object.freeze(r),r);function i(e){return e.isNone()}function s(e){return e()}function l(e){return e}function m(t){return function(e){return function(e){if(null===e)return"null";var t=typeof e;return"object"==t&&(Array.prototype.isPrototypeOf(e)||e.constructor&&"Array"===e.constructor.name)?"array":"object"==t&&(String.prototype.isPrototypeOf(e)||e.constructor&&"String"===e.constructor.name)?"string":t}(e)===t}}function f(e,t){for(var r=0,n=e.length;r<n;r++){t(e[r],r)}}function h(e,t){return G(e,t)?E(e[t]):D()}function p(t){return function(e){return e?function(e){return e.replace(/px$/,"")}(e.style[t]):""}}function g(r){return function(e,t){e&&(e.style[r]=function(e){return/^[0-9.]+$/.test(e)?e+"px":e}(t))}}function v(e,t){if(e)for(var r=0;r<e.length;r++)if(-1!==t.indexOf(e[r].filter))return e[r]}function b(e){return ae.getAttrib(e,"data-ephox-embed-iri")}function w(e,t){return function(e){var t=ae.createFragment(e);return""!==b(t.firstChild)}(t)?function(e){var t=ae.createFragment(e).firstChild;return{type:"ephox-embed-iri",source1:b(t),source2:"",poster:"",width:oe.getMaxWidth(t),height:oe.getMaxHeight(t)}}(t):function(n,e){var i={};return ne({validate:!1,allow_conditional_comments:!0,start:function(e,t){if(i.source1||"param"!==e||(i.source1=t.map.movie),"iframe"!==e&&"object"!==e&&"embed"!==e&&"video"!==e&&"audio"!==e||(i.type||(i.type=e),i=re.extend(t.map,i)),"script"===e){var r=v(n,t.map.src);if(!r)return;i={type:"script",source1:t.map.src,width:String(r.width),height:String(r.height)}}"source"===e&&(i.source1?i.source2||(i.source2=t.map.src):i.source1=t.map.src),"img"!==e||i.poster||(i.poster=t.map.src)}}).parse(e),i.source1=i.source1||i.src||i.data,i.source2=i.source2||"",i.poster=i.poster||"",i}(e,t)}function y(e,t){var r,n,i,o;for(r in t)if(i=""+t[r],e.map[r])for(n=e.length;n--;)(o=e[n]).name===r&&(i?(e.map[r]=i,o.value=i):(delete e.map[r],e.splice(n,1)));else i&&(e.push({name:r,value:i}),e.map[r]=i)}function x(e,t){var r=me.createFragment(e).firstChild;return oe.setMaxWidth(r,t.width),oe.setMaxHeight(r,t.height),function(e){var t=se();return ne(t).parse(e),t.getContent()}(r.outerHTML)}function j(r,e){var n=re.extend({},e);if(!n.source1&&(re.extend(n,w(J(r),n.embed)),!n.source1))return"";n.source2||(n.source2=""),n.poster||(n.poster=""),n.source1=r.convertURL(n.source1,"source"),n.source2=r.convertURL(n.source2,"source"),n.source1mime=ue(n.source1),n.source2mime=ue(n.source2),n.poster=r.convertURL(n.poster,"poster");var t=function(t){var e=fe.filter(function(e){return e.regex.test(t)});return 0<e.length?re.extend({},e[0],{url:function(e,t){for(var r=e.regex.exec(t),n=e.url,i=function(e){n=n.replace("$"+e,function(){return r[e]?r[e]:""})},o=0;o<r.length;o++)i(o);return n.replace(/\?$/,"")}(e[0],t)}):null}(n.source1);if(t&&(n.source1=t.url,n.type=t.type,n.allowFullscreen=t.allowFullscreen,n.width=n.width||String(t.w),n.height=n.height||String(t.h)),n.embed)return de(n.embed,n,!0);var i=v(J(r),n.source1);i&&(n.type="script",n.width=String(i.width),n.height=String(i.height));var o=K(r),a=Q(r);return n.width=n.width||"300",n.height=n.height||"150",re.each(n,function(e,t){n[t]=r.dom.encode(""+e)}),"iframe"===n.type?function(e){var t=e.allowFullscreen?' allowFullscreen="1"':"";return'<iframe src="'+e.source1+'" width="'+e.width+'" height="'+e.height+'"'+t+"></iframe>"}(n):"application/x-shockwave-flash"===n.source1mime?function(e){var t='<object data="'+e.source1+'" width="'+e.width+'" height="'+e.height+'" type="application/x-shockwave-flash">';return e.poster&&(t+='<img src="'+e.poster+'" width="'+e.width+'" height="'+e.height+'" />'),t+="</object>"}(n):-1!==n.source1mime.indexOf("audio")?function(e,t){return t?t(e):'<audio controls="controls" src="'+e.source1+'">'+(e.source2?'\n<source src="'+e.source2+'"'+(e.source2mime?' type="'+e.source2mime+'"':"")+" />\n":"")+"</audio>"}(n,o):"script"===n.type?function(e){return'<script src="'+e.source1+'"><\/script>'}(n):function(e,t){return t?t(e):'<video width="'+e.width+'" height="'+e.height+'"'+(e.poster?' poster="'+e.poster+'"':"")+' controls="controls">\n<source src="'+e.source1+'"'+(e.source1mime?' type="'+e.source1mime+'"':"")+" />\n"+(e.source2?'<source src="'+e.source2+'"'+(e.source2mime?' type="'+e.source2mime+'"':"")+" />\n":"")+"</video>"}(n,a)}function O(t){return function(e){return j(t,e)}}function A(e){var r=q(e,{source1:e.source1.value,source2:h(e,"source2").bind(function(e){return h(e,"value")}).getOr(""),poster:h(e,"poster").bind(function(e){return h(e,"value")}).getOr("")});return h(e,"dimensions").each(function(e){f(["width","height"],function(t){h(e,t).each(function(e){return r[t]=e})})}),r}function S(e){var n=q(e,{source1:{value:h(e,"source1").getOr("")},source2:{value:h(e,"source2").getOr("")},poster:{value:h(e,"poster").getOr("")}});return f(["width","height"],function(r){h(e,r).each(function(e){var t=n.dimensions||{};t[r]=e,n.dimensions=t})}),n}function _(r){return function(e){var t=e&&e.msg?"Media embed handler error: "+e.msg:"Media embed handler threw unknown error.";r.notificationManager.open({type:"error",text:t})}}function C(e,t){return w(J(e),t)}function M(i,o){return function(e){if(N(e.url)&&0<e.url.trim().length){var t=e.html,r=C(o,t),n=d(d({},r),{source1:e.url,embed:t});i.setData(S(n))}}}function F(e,t){var r=e.dom.select("img[data-mce-object]");e.insertContent(t),function(e,t){for(var r=e.dom.select("img[data-mce-object]"),n=0;n<t.length;n++)for(var i=r.length-1;0<=i;i--)t[n]===r[i]&&r.splice(i,1);e.selection.select(r[0])}(e,r),e.nodeChanged()}function P(e,t){var r,n=t.name;return(r=new ye("img",1)).shortEnded=!0,Oe(e,t,r),r.attr({width:t.attr("width")||"300",height:t.attr("height")||("audio"===n?"30":"150"),style:t.attr("style"),src:xe.transparentSrc,"data-mce-object":n,"class":"mce-object mce-object-"+n}),r}function k(e,t){var r,n,i,o=t.name;return(r=new ye("span",1)).attr({contentEditable:"false",style:t.attr("style"),"data-mce-object":o,"class":"mce-preview-object mce-object-"+o}),Oe(e,t,r),(n=new ye(o,1)).attr({src:t.attr("src"),allowfullscreen:t.attr("allowfullscreen"),style:t.attr("style"),"class":t.attr("class"),width:t.attr("width"),height:t.attr("height"),frameborder:"0"}),(i=new ye("span",1)).attr("class","mce-shim"),r.append(n),r.append(i),r}function T(e){for(;e=e.parent;)if(e.attr("data-ephox-embed-iri")||(void 0,(t=e.attr("class"))&&/\btiny-pageembed\b/.test(t)))return!0;var t;return!1}var $,z=function(r){function e(){return i}function t(e){return e(r)}var n=o(r),i={fold:function(e,t){return t(r)},is:function(e){return r===e},isSome:c,isNone:a,getOr:n,getOrThunk:n,getOrDie:n,getOrNull:n,getOrUndefined:n,or:e,orThunk:e,map:function(e){return z(e(r))},each:function(e){e(r)},bind:t,exists:t,forall:t,filter:function(e){return e(r)?i:u},toArray:function(){return[r]},toString:function(){return"some("+r+")"},equals:function(e){return e.is(r)},equals_:function(e,t){return e.fold(a,function(e){return t(r,e)})}};return i},D=t,E=function(e){return null===e||e===undefined?u:z(e)},N=m("string"),U=m("array"),R=m("function"),L=Array.prototype.slice,W=Array.prototype.push,H=(R(Array.from)&&Array.from,function(e){function t(){return r}var r=e;return{get:t,set:function(e){r=e},clone:function(){return H(t())}}}),I=Object.prototype.hasOwnProperty,q=($=function(e,t){return t},function(){for(var e=new Array(arguments.length),t=0;t<e.length;t++)e[t]=arguments[t];if(0===e.length)throw new Error("Can't merge zero objects");for(var r={},n=0;n<e.length;n++){var i=e[n];for(var o in i)I.call(i,o)&&(r[o]=$(r[o],i[o]))}return r}),B=Object.hasOwnProperty,G=function(e,t){return B.call(e,t)},J=function(e){return e.getParam("media_scripts")},K=function(e){return e.getParam("audio_template_callback")},Q=function(e){return e.getParam("video_template_callback")},V=function(e){return e.getParam("media_live_embeds",!0)},X=function(e){return e.getParam("media_filter_html",!0)},Y=function(e){return e.getParam("media_url_resolver")},Z=function(e){return e.getParam("media_alt_source",!0)},ee=function(e){return e.getParam("media_poster",!0)},te=function(e){return e.getParam("media_dimensions",!0)},re=tinymce.util.Tools.resolve("tinymce.util.Tools"),ne=tinymce.util.Tools.resolve("tinymce.html.SaxParser"),ie=tinymce.util.Tools.resolve("tinymce.dom.DOMUtils"),oe={getMaxWidth:p("maxWidth"),getMaxHeight:p("maxHeight"),setMaxWidth:g("maxWidth"),setMaxHeight:g("maxHeight")},ae=ie.DOM,ce=tinymce.util.Tools.resolve("tinymce.util.Promise"),ue=function(e){var t={mp3:"audio/mpeg",m4a:"audio/x-m4a",wav:"audio/wav",mp4:"video/mp4",webm:"video/webm",ogg:"video/ogg",swf:"application/x-shockwave-flash"}[e.toLowerCase().split(".").pop()];return t||""},se=tinymce.util.Tools.resolve("tinymce.html.Writer"),le=tinymce.util.Tools.resolve("tinymce.html.Schema"),me=ie.DOM,de=function(e,t,r){return function(e){var t=me.createFragment(e);return""!==me.getAttrib(t.firstChild,"data-ephox-embed-iri")}(e)?x(e,t):function(e,i,o){var a,c=se(),u=0;return ne({validate:!1,allow_conditional_comments:!0,comment:function(e){c.comment(e)},cdata:function(e){c.cdata(e)},text:function(e,t){c.text(e,t)},start:function(e,t,r){switch(e){case"video":case"object":case"embed":case"img":case"iframe":i.height!==undefined&&i.width!==undefined&&y(t,{width:i.width,height:i.height})}if(o)switch(e){case"video":y(t,{poster:i.poster,src:""}),i.source2&&y(t,{src:""});break;case"iframe":y(t,{src:i.source1});break;case"source":if(++u<=2&&(y(t,{src:i["source"+u],type:i["source"+u+"mime"]}),!i["source"+u]))return;break;case"img":if(!i.poster)return;a=!0}c.start(e,t,r)},end:function(e){if("video"===e&&o)for(var t=1;t<=2;t++)if(i["source"+t]){var r=[];r.map={},u<t&&(y(r,{src:i["source"+t],type:i["source"+t+"mime"]}),c.start("source",r,!0))}if(i.poster&&"object"===e&&o&&!a){var n=[];n.map={},y(n,{src:i.poster,width:i.width,height:i.height}),c.start("img",n,!0)}c.end(e)}},le({})).parse(e),c.getContent()}(e,t,r)},fe=[{regex:/youtu\.be\/([\w\-_\?&=.]+)/i,type:"iframe",w:560,h:314,url:"//www.youtube.com/embed/$1",allowFullscreen:!0},{regex:/youtube\.com(.+)v=([^&]+)(&([a-z0-9&=\-_]+))?/i,type:"iframe",w:560,h:314,url:"//www.youtube.com/embed/$2?$4",allowFullscreen:!0},{regex:/youtube.com\/embed\/([a-z0-9\?&=\-_]+)/i,type:"iframe",w:560,h:314,url:"//www.youtube.com/embed/$1",allowFullscreen:!0},{regex:/vimeo\.com\/([0-9]+)/,type:"iframe",w:425,h:350,url:"//player.vimeo.com/video/$1?title=0&byline=0&portrait=0&color=8dc7dc",allowFullscreen:!0},{regex:/vimeo\.com\/(.*)\/([0-9]+)/,type:"iframe",w:425,h:350,url:"//player.vimeo.com/video/$2?title=0&amp;byline=0",allowFullscreen:!0},{regex:/maps\.google\.([a-z]{2,3})\/maps\/(.+)msid=(.+)/,type:"iframe",w:425,h:350,url:'//maps.google.com/maps/ms?msid=$2&output=embed"',allowFullscreen:!1},{regex:/dailymotion\.com\/video\/([^_]+)/,type:"iframe",w:480,h:270,url:"//www.dailymotion.com/embed/video/$1",allowFullscreen:!0},{regex:/dai\.ly\/([^_]+)/,type:"iframe",w:480,h:270,url:"//www.dailymotion.com/embed/video/$1",allowFullscreen:!0}],he={},pe=function(e,t){var r=Y(e);return r?function(n,i,o){return new ce(function(t,e){function r(e){return e.html&&(he[n.source1]=e),t({url:n.source1,html:e.html?e.html:i(n)})}he[n.source1]?r(he[n.source1]):o({url:n.source1},r,e)})}(t,O(e),r):function(t,r){return new ce(function(e){e({html:r(t),url:t.source1})})}(t,O(e))},ge=function(e){return he.hasOwnProperty(e)},ve=function(n){function i(e){return A(e.getData())}var e=function(e){var t=e.selection.getNode(),r=function(e){return e.getAttribute("data-mce-object")||e.getAttribute("data-ephox-embed-iri")}(t)?e.serializer.serialize(t,{selection:!0}):"";return q({embed:r},w(J(e),r))}(n),r=H(e),t=S(e),o={title:"General",name:"general",items:function(e){for(var t=[],r=0,n=e.length;r<n;++r){if(!U(e[r]))throw new Error("Arr.flatten item "+r+" was not an array, input: "+e);W.apply(t,e[r])}return t}([[{name:"source1",type:"urlinput",filetype:"media",label:"Source"}],te(n)?[{type:"sizeinput",name:"dimensions",label:"Constrain proportions",constrain:!0}]:[]])},a={title:"Embed",items:[{type:"textarea",name:"embed",label:"Paste your embed code below:"}]},c=[];Z(n)&&c.push({name:"source2",type:"urlinput",filetype:"media",label:"Alternative source URL"}),ee(n)&&c.push({name:"poster",type:"urlinput",filetype:"image",label:"Media poster (Image URL)"});var u={title:"Advanced",name:"advanced",items:c},s=[o,a];0<c.length&&s.push(u);var l={type:"tabpanel",tabs:s},m=n.windowManager.open({title:"Insert/Edit Media",size:"normal",body:l,buttons:[{type:"cancel",name:"cancel",text:"Cancel"},{type:"submit",name:"save",text:"Save",primary:!0}],onSubmit:function(e){var t=i(e);!function(e,t,r){t.embed=de(t.embed,t),t.embed&&(e.source1===t.source1||ge(t.source1))?F(r,t.embed):pe(r,t).then(function(e){F(r,e.html)})["catch"](_(r))}(r.get(),t,n),e.close()},onChange:function(e,t){switch(t.name){case"source1":!function(e,t){var r=i(t);e.source1!==r.source1&&(M(m,n)({url:r.source1,html:""}),pe(n,r).then(M(m,n))["catch"](_(n)))}(r.get(),e);break;case"embed":!function(e){var t=A(e.getData()),r=C(n,t.embed);e.setData(S(r))}(e);break;case"dimensions":case"poster":!function(e){var t=i(e),r=j(n,t);e.setData(S(d(d({},t),{embed:r})))}(e)}r.set(i(e))},initialData:t})},be=function(e){return{showDialog:function(){ve(e)}}},we=function(e){e.addCommand("mceMedia",function(){ve(e)})},ye=tinymce.util.Tools.resolve("tinymce.html.Node"),xe=tinymce.util.Tools.resolve("tinymce.Env"),je=function(i,e){if(!1===X(i))return e;var o,a=se();return ne({validate:!1,allow_conditional_comments:!1,comment:function(e){a.comment(e)},cdata:function(e){a.cdata(e)},text:function(e,t){a.text(e,t)},start:function(e,t,r){if(o=!0,"script"!==e&&"noscript"!==e){for(var n=0;n<t.length;n++){if(0===t[n].name.indexOf("on"))return;"style"===t[n].name&&(t[n].value=i.dom.serializeStyle(i.dom.parseStyle(t[n].value),e))}a.start(e,t,r),o=!1}},end:function(e){o||a.end(e)}},le({})).parse(e),a.getContent()},Oe=function(e,t,r){var n,i,o,a,c;for(a=(o=t.attributes).length;a--;)n=o[a].name,i=o[a].value,"width"!==n&&"height"!==n&&"style"!==n&&("data"!==n&&"src"!==n||(i=e.convertURL(i,n)),r.attr("data-mce-p-"+n,i));(c=t.firstChild&&t.firstChild.value)&&(r.attr("data-mce-html",escape(je(e,c))),r.firstChild=null)},Ae=function(i){return function(e){for(var t,r,n=e.length;n--;)(t=e[n]).parent&&(t.parent.attr("data-mce-object")||"script"===t.name&&!(r=v(J(i),t.attr("src")))||(r&&(r.width&&t.attr("width",r.width.toString()),r.height&&t.attr("height",r.height.toString())),"iframe"===t.name&&V(i)&&xe.ceFalse?T(t)||t.replace(k(i,t)):T(t)||t.replace(P(i,t))))}},Se=function(d){d.on("preInit",function(){var t=d.schema.getSpecialElements();re.each("video audio iframe object".split(" "),function(e){t[e]=new RegExp("</"+e+"[^>]*>","gi")});var r=d.schema.getBoolAttrs();re.each("webkitallowfullscreen mozallowfullscreen allowfullscreen".split(" "),function(e){r[e]={}}),d.parser.addNodeFilter("iframe,video,audio,object,embed,script",Ae(d)),d.serializer.addAttributeFilter("data-mce-object",function(e,t){for(var r,n,i,o,a,c,u,s,l=e.length;l--;)if((r=e[l]).parent){for(u=r.attr(t),n=new ye(u,1),"audio"!==u&&"script"!==u&&((s=r.attr("class"))&&-1!==s.indexOf("mce-preview-object")?n.attr({width:r.firstChild.attr("width"),height:r.firstChild.attr("height")}):n.attr({width:r.attr("width"),height:r.attr("height")})),n.attr({style:r.attr("style")}),i=(o=r.attributes).length;i--;){var m=o[i].name;0===m.indexOf("data-mce-p-")&&n.attr(m.substr(11),o[i].value)}"script"===u&&n.attr("type","text/javascript"),(a=r.attr("data-mce-html"))&&((c=new ye("#text",3)).raw=!0,c.value=je(d,unescape(a)),n.append(c)),r.replace(n)}})}),d.on("SetContent",function(){d.$("span.mce-preview-object").each(function(e,t){var r=d.$(t);0===r.find("span.mce-shim").length&&r.append('<span class="mce-shim"></span>')})})},_e=function(e){e.on("ResolveName",function(e){var t;1===e.target.nodeType&&(t=e.target.getAttribute("data-mce-object"))&&(e.name=t)})},Ce=function(t){t.on("click keyup touchend",function(){var e=t.selection.getNode();e&&t.dom.hasClass(e,"mce-preview-object")&&t.dom.getAttrib(e,"data-mce-selected")&&e.setAttribute("data-mce-selected","2")}),t.on("ObjectSelected",function(e){var t=e.target.getAttribute("data-mce-object");"audio"!==t&&"script"!==t||e.preventDefault()}),t.on("ObjectResized",function(e){var t,r=e.target;r.getAttribute("data-mce-object")&&(t=r.getAttribute("data-mce-html"))&&(t=unescape(t),r.setAttribute("data-mce-html",escape(de(t,{width:String(e.width),height:String(e.height)}))))})},Me=function(e){e.ui.registry.addToggleButton("media",{tooltip:"Insert/edit media",icon:"embed",onAction:function(){e.execCommand("mceMedia")},onSetup:function(t,r){return function(e){return t.selection.selectorChangedWithUnbind(r.join(","),e.setActive).unbind}}(e,["img[data-mce-object]","span[data-mce-object]","div[data-ephox-embed-iri]"])}),e.ui.registry.addMenuItem("media",{icon:"embed",text:"Media...",onAction:function(){e.execCommand("mceMedia")}})};!function Fe(){n.add("media",function(e){return we(e),Me(e),_e(e),Se(e),Ce(e),be(e)})}()}();
\ No newline at end of file
diff --git a/website/js/vendor/tinymce/js/tinymce/plugins/nonbreaking/plugin.min.js b/website/js/vendor/tinymce/js/tinymce/plugins/nonbreaking/plugin.min.js
new file mode 100644 (file)
index 0000000..dec526b
--- /dev/null
@@ -0,0 +1,9 @@
+/**
+ * Copyright (c) Tiny Technologies, Inc. All rights reserved.
+ * Licensed under the LGPL or a commercial license.
+ * For LGPL see License.txt in the project root for license information.
+ * For commercial licenses see https://www.tiny.cloud/
+ *
+ * Version: 5.1.5 (2019-12-19)
+ */
+!function(){"use strict";function o(n,e){for(var t="",o=0;o<e;o++)t+=n;return t}var n=tinymce.util.Tools.resolve("tinymce.PluginManager"),i=function(n){var e=n.getParam("nonbreaking_force_tab",0);return"boolean"==typeof e?!0===e?3:0:e},a=function(n){return n.getParam("nonbreaking_wrap",!0,"boolean")},r=function(n,e){var t=a(n)||n.plugins.visualchars?'<span class="'+(function(n){return!!n.plugins.visualchars&&n.plugins.visualchars.isEnabled()}(n)?"mce-nbsp-wrap mce-nbsp":"mce-nbsp-wrap")+'" contenteditable="false">'+o("&nbsp;",e)+"</span>":o("&nbsp;",e);n.undoManager.transact(function(){return n.insertContent(t)})},e=function(n){n.addCommand("mceNonBreaking",function(){r(n,1)})},c=tinymce.util.Tools.resolve("tinymce.util.VK"),t=function(e){var t=i(e);0<t&&e.on("keydown",function(n){if(n.keyCode===c.TAB&&!n.isDefaultPrevented()){if(n.shiftKey)return;n.preventDefault(),n.stopImmediatePropagation(),r(e,t)}})},u=function(n){n.ui.registry.addButton("nonbreaking",{icon:"non-breaking",tooltip:"Nonbreaking space",onAction:function(){return n.execCommand("mceNonBreaking")}}),n.ui.registry.addMenuItem("nonbreaking",{icon:"non-breaking",text:"Nonbreaking space",onAction:function(){return n.execCommand("mceNonBreaking")}})};!function s(){n.add("nonbreaking",function(n){e(n),u(n),t(n)})}()}();
\ No newline at end of file
diff --git a/website/js/vendor/tinymce/js/tinymce/plugins/noneditable/plugin.min.js b/website/js/vendor/tinymce/js/tinymce/plugins/noneditable/plugin.min.js
new file mode 100644 (file)
index 0000000..d87286d
--- /dev/null
@@ -0,0 +1,9 @@
+/**
+ * Copyright (c) Tiny Technologies, Inc. All rights reserved.
+ * Licensed under the LGPL or a commercial license.
+ * For LGPL see License.txt in the project root for license information.
+ * For commercial licenses see https://www.tiny.cloud/
+ *
+ * Version: 5.1.5 (2019-12-19)
+ */
+!function(){"use strict";function c(n){return function(t){return-1!==(" "+t.attr("class")+" ").indexOf(n)}}function l(i,o,c){return function(t){var n=arguments,e=n[n.length-2],r=0<e?o.charAt(e-1):"";if('"'===r)return t;if(">"===r){var a=o.lastIndexOf("<",e);if(-1!==a)if(-1!==o.substring(a,e).indexOf('contenteditable="false"'))return t}return'<span class="'+c+'" data-mce-content="'+i.dom.encode(n[0])+'">'+i.dom.encode("string"==typeof n[1]?n[1]:n[0])+"</span>"}}var t=tinymce.util.Tools.resolve("tinymce.PluginManager"),u=tinymce.util.Tools.resolve("tinymce.util.Tools"),f=function(t){return t.getParam("noneditable_noneditable_class","mceNonEditable")},s=function(t){return t.getParam("noneditable_editable_class","mceEditable")},d=function(t){var n=t.getParam("noneditable_regexp",[]);return n&&n.constructor===RegExp?[n]:n},n=function(n){var t,e,r="contenteditable";t=" "+u.trim(s(n))+" ",e=" "+u.trim(f(n))+" ";var a=c(t),i=c(e),o=d(n);n.on("PreInit",function(){0<o.length&&n.on("BeforeSetContent",function(t){!function(t,n,e){var r=n.length,a=e.content;if("raw"!==e.format){for(;r--;)a=a.replace(n[r],l(t,a,f(t)));e.content=a}}(n,o,t)}),n.parser.addAttributeFilter("class",function(t){for(var n,e=t.length;e--;)n=t[e],a(n)?n.attr(r,"true"):i(n)&&n.attr(r,"false")}),n.serializer.addAttributeFilter(r,function(t){for(var n,e=t.length;e--;)n=t[e],(a(n)||i(n))&&(0<o.length&&n.attr("data-mce-content")?(n.name="#text",n.type=3,n.raw=!0,n.value=n.attr("data-mce-content")):n.attr(r,null))})})};!function e(){t.add("noneditable",function(t){n(t)})}()}();
\ No newline at end of file
diff --git a/website/js/vendor/tinymce/js/tinymce/plugins/pagebreak/plugin.min.js b/website/js/vendor/tinymce/js/tinymce/plugins/pagebreak/plugin.min.js
new file mode 100644 (file)
index 0000000..6dd0bac
--- /dev/null
@@ -0,0 +1,9 @@
+/**
+ * Copyright (c) Tiny Technologies, Inc. All rights reserved.
+ * Licensed under the LGPL or a commercial license.
+ * For LGPL see License.txt in the project root for license information.
+ * For commercial licenses see https://www.tiny.cloud/
+ *
+ * Version: 5.1.5 (2019-12-19)
+ */
+!function(){"use strict";function e(){return"mce-pagebreak"}function a(){return'<img src="'+t.transparentSrc+'" class="mce-pagebreak" data-mce-resize="false" data-mce-placeholder />'}var n=tinymce.util.Tools.resolve("tinymce.PluginManager"),t=tinymce.util.Tools.resolve("tinymce.Env"),r=function(e){return e.getParam("pagebreak_separator","\x3c!-- pagebreak --\x3e")},i=function(e){return e.getParam("pagebreak_split_block",!1)},o=function(o){var c=r(o),n=new RegExp(c.replace(/[\?\.\*\[\]\(\)\{\}\+\^\$\:]/g,function(e){return"\\"+e}),"gi");o.on("BeforeSetContent",function(e){e.content=e.content.replace(n,a())}),o.on("PreInit",function(){o.serializer.addNodeFilter("img",function(e){for(var n,a,t=e.length;t--;)if((a=(n=e[t]).attr("class"))&&-1!==a.indexOf("mce-pagebreak")){var r=n.parent;if(o.schema.getBlockElements()[r.name]&&i(o)){r.type=3,r.value=c,r.raw=!0,n.remove();continue}n.type=3,n.value=c,n.raw=!0}})})},c=a,u=e,g=function(e){e.addCommand("mcePageBreak",function(){e.settings.pagebreak_split_block?e.insertContent("<p>"+c()+"</p>"):e.insertContent(c())})},m=function(n){n.on("ResolveName",function(e){"IMG"===e.target.nodeName&&n.dom.hasClass(e.target,u())&&(e.name="pagebreak")})},s=function(e){e.ui.registry.addButton("pagebreak",{icon:"page-break",tooltip:"Page break",onAction:function(){return e.execCommand("mcePageBreak")}}),e.ui.registry.addMenuItem("pagebreak",{text:"Page break",icon:"page-break",onAction:function(){return e.execCommand("mcePageBreak")}})};!function l(){n.add("pagebreak",function(e){g(e),s(e),o(e),m(e)})}()}();
\ No newline at end of file
diff --git a/website/js/vendor/tinymce/js/tinymce/plugins/paste/plugin.min.js b/website/js/vendor/tinymce/js/tinymce/plugins/paste/plugin.min.js
new file mode 100644 (file)
index 0000000..1b4d0bb
--- /dev/null
@@ -0,0 +1,9 @@
+/**
+ * Copyright (c) Tiny Technologies, Inc. All rights reserved.
+ * Licensed under the LGPL or a commercial license.
+ * For LGPL see License.txt in the project root for license information.
+ * For commercial licenses see https://www.tiny.cloud/
+ *
+ * Version: 5.1.5 (2019-12-19)
+ */
+!function(f){"use strict";function t(){}function i(t){return function(){return t}}function e(){return v}var n,d=function(t){function e(){return n}var n=t;return{get:e,set:function(t){n=t},clone:function(){return d(e())}}},r=tinymce.util.Tools.resolve("tinymce.PluginManager"),u=function(t){return!(!/(^|[ ,])powerpaste([, ]|$)/.test(t.settings.plugins)||!r.get("powerpaste"))&&("undefined"!=typeof f.window.console&&f.window.console.log&&f.window.console.log("PowerPaste is incompatible with Paste plugin! Remove 'paste' from the 'plugins' option."),!0)},a=function(t,e){return{clipboard:t,quirks:e}},s=function(t,e,n,r){return t.fire("PastePreProcess",{content:e,internal:n,wordContent:r})},c=function(t,e,n,r){return t.fire("PastePostProcess",{node:e,internal:n,wordContent:r})},o=function(t,e){return t.fire("PastePlainTextToggle",{state:e})},m=function(t,e){return t.fire("paste",{ieFake:e})},l=function(t,e){"text"===e.pasteFormat.get()?(e.pasteFormat.set("html"),o(t,!1)):(e.pasteFormat.set("text"),o(t,!0)),t.focus()},p=function(t,n){t.addCommand("mceTogglePlainTextPaste",function(){l(t,n)}),t.addCommand("mceInsertClipboardContent",function(t,e){e.content&&n.pasteHtml(e.content,e.internal),e.text&&n.pasteText(e.text)})},g=i(!1),h=i(!0),v=(n={fold:function(t,e){return t()},is:g,isSome:g,isNone:h,getOr:w,getOrThunk:b,getOrDie:function(t){throw new Error(t||"error: getOrDie called on none.")},getOrNull:i(null),getOrUndefined:i(undefined),or:w,orThunk:b,map:e,each:t,bind:e,exists:g,forall:h,filter:e,equals:y,equals_:y,toArray:function(){return[]},toString:i("none()")},Object.freeze&&Object.freeze(n),n);function y(t){return t.isNone()}function b(t){return t()}function w(t){return t}function x(t,e){for(var n=t.length,r=new Array(n),o=0;o<n;o++){var i=t[o];r[o]=e(i,o)}return r}function _(t,e){for(var n=0,r=t.length;n<r;n++){e(t[n],n)}}var P,T,D,C,k,F=function(n){function t(){return o}function e(t){return t(n)}var r=i(n),o={fold:function(t,e){return e(n)},is:function(t){return n===t},isSome:h,isNone:g,getOr:r,getOrThunk:r,getOrDie:r,getOrNull:r,getOrUndefined:r,or:t,orThunk:t,map:function(t){return F(t(n))},each:function(t){t(n)},bind:e,exists:e,forall:e,filter:function(t){return t(n)?o:v},toArray:function(){return[n]},toString:function(){return"some("+n+")"},equals:function(t){return t.is(n)},equals_:function(t,e){return t.fold(g,function(t){return e(n,t)})}};return o},S={some:F,none:e,from:function(t){return null===t||t===undefined?v:F(t)}},E=(P="function",function(t){return function(t){if(null===t)return"null";var e=typeof t;return"object"==e&&(Array.prototype.isPrototypeOf(t)||t.constructor&&"Array"===t.constructor.name)?"array":"object"==e&&(String.prototype.isPrototypeOf(t)||t.constructor&&"String"===t.constructor.name)?"string":e}(t)===P}),I=Array.prototype.slice,R=E(Array.from)?Array.from:function(t){return I.call(t)},O={},A={exports:O};T=undefined,D=O,C=A,k=undefined,function(t){"object"==typeof D&&void 0!==C?C.exports=t():"function"==typeof T&&T.amd?T([],t):("undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this).EphoxContactWrapper=t()}(function(){return function l(i,u,a){function s(e,t){if(!u[e]){if(!i[e]){var n="function"==typeof k&&k;if(!t&&n)return n(e,!0);if(c)return c(e,!0);var r=new Error("Cannot find module '"+e+"'");throw r.code="MODULE_NOT_FOUND",r}var o=u[e]={exports:{}};i[e][0].call(o.exports,function(t){return s(i[e][1][t]||t)},o,o.exports,l,i,u,a)}return u[e].exports}for(var c="function"==typeof k&&k,t=0;t<a.length;t++)s(a[t]);return s}({1:[function(t,e,n){var r,o,i=e.exports={};function u(){throw new Error("setTimeout has not been defined")}function a(){throw new Error("clearTimeout has not been defined")}function s(t){if(r===setTimeout)return setTimeout(t,0);if((r===u||!r)&&setTimeout)return r=setTimeout,setTimeout(t,0);try{return r(t,0)}catch(e){try{return r.call(null,t,0)}catch(e){return r.call(this,t,0)}}}!function(){try{r="function"==typeof setTimeout?setTimeout:u}catch(t){r=u}try{o="function"==typeof clearTimeout?clearTimeout:a}catch(t){o=a}}();var c,l=[],f=!1,d=-1;function m(){f&&c&&(f=!1,c.length?l=c.concat(l):d=-1,l.length&&p())}function p(){if(!f){var t=s(m);f=!0;for(var e=l.length;e;){for(c=l,l=[];++d<e;)c&&c[d].run();d=-1,e=l.length}c=null,f=!1,function n(t){if(o===clearTimeout)return clearTimeout(t);if((o===a||!o)&&clearTimeout)return o=clearTimeout,clearTimeout(t);try{return o(t)}catch(e){try{return o.call(null,t)}catch(e){return o.call(this,t)}}}(t)}}function g(t,e){this.fun=t,this.array=e}function h(){}i.nextTick=function(t){var e=new Array(arguments.length-1);if(1<arguments.length)for(var n=1;n<arguments.length;n++)e[n-1]=arguments[n];l.push(new g(t,e)),1!==l.length||f||s(p)},g.prototype.run=function(){this.fun.apply(null,this.array)},i.title="browser",i.browser=!0,i.env={},i.argv=[],i.version="",i.versions={},i.on=h,i.addListener=h,i.once=h,i.off=h,i.removeListener=h,i.removeAllListeners=h,i.emit=h,i.prependListener=h,i.prependOnceListener=h,i.listeners=function(t){return[]},i.binding=function(t){throw new Error("process.binding is not supported")},i.cwd=function(){return"/"},i.chdir=function(t){throw new Error("process.chdir is not supported")},i.umask=function(){return 0}},{}],2:[function(t,f,e){(function(e){function r(){}function i(t){if("object"!=typeof this)throw new TypeError("Promises must be constructed via new");if("function"!=typeof t)throw new TypeError("not a function");this._state=0,this._handled=!1,this._value=undefined,this._deferreds=[],l(t,this)}function o(r,o){for(;3===r._state;)r=r._value;0!==r._state?(r._handled=!0,i._immediateFn(function(){var t=1===r._state?o.onFulfilled:o.onRejected;if(null!==t){var e;try{e=t(r._value)}catch(n){return void a(o.promise,n)}u(o.promise,e)}else(1===r._state?u:a)(o.promise,r._value)})):r._deferreds.push(o)}function u(t,e){try{if(e===t)throw new TypeError("A promise cannot be resolved with itself.");if(e&&("object"==typeof e||"function"==typeof e)){var n=e.then;if(e instanceof i)return t._state=3,t._value=e,void s(t);if("function"==typeof n)return void l(function r(t,e){return function(){t.apply(e,arguments)}}(n,e),t)}t._state=1,t._value=e,s(t)}catch(o){a(t,o)}}function a(t,e){t._state=2,t._value=e,s(t)}function s(t){2===t._state&&0===t._deferreds.length&&i._immediateFn(function(){t._handled||i._unhandledRejectionFn(t._value)});for(var e=0,n=t._deferreds.length;e<n;e++)o(t,t._deferreds[e]);t._deferreds=null}function c(t,e,n){this.onFulfilled="function"==typeof t?t:null,this.onRejected="function"==typeof e?e:null,this.promise=n}function l(t,e){var n=!1;try{t(function(t){n||(n=!0,u(e,t))},function(t){n||(n=!0,a(e,t))})}catch(r){if(n)return;n=!0,a(e,r)}}var t,n;t=this,n=setTimeout,i.prototype["catch"]=function(t){return this.then(null,t)},i.prototype.then=function(t,e){var n=new this.constructor(r);return o(this,new c(t,e,n)),n},i.all=function(t){var s=Array.prototype.slice.call(t);return new i(function(o,i){if(0===s.length)return o([]);var u=s.length;function a(e,t){try{if(t&&("object"==typeof t||"function"==typeof t)){var n=t.then;if("function"==typeof n)return void n.call(t,function(t){a(e,t)},i)}s[e]=t,0==--u&&o(s)}catch(r){i(r)}}for(var t=0;t<s.length;t++)a(t,s[t])})},i.resolve=function(e){return e&&"object"==typeof e&&e.constructor===i?e:new i(function(t){t(e)})},i.reject=function(n){return new i(function(t,e){e(n)})},i.race=function(o){return new i(function(t,e){for(var n=0,r=o.length;n<r;n++)o[n].then(t,e)})},i._immediateFn="function"==typeof e?function(t){e(t)}:function(t){n(t,0)},i._unhandledRejectionFn=function(t){"undefined"!=typeof console&&console&&console.warn("Possible Unhandled Promise Rejection:",t)},i._setImmediateFn=function(t){i._immediateFn=t},i._setUnhandledRejectionFn=function(t){i._unhandledRejectionFn=t},void 0!==f&&f.exports?f.exports=i:t.Promise||(t.Promise=i)}).call(this,t("timers").setImmediate)},{timers:3}],3:[function(s,t,c){(function(t,e){var r=s("process/browser.js").nextTick,n=Function.prototype.apply,o=Array.prototype.slice,i={},u=0;function a(t,e){this._id=t,this._clearFn=e}c.setTimeout=function(){return new a(n.call(setTimeout,window,arguments),clearTimeout)},c.setInterval=function(){return new a(n.call(setInterval,window,arguments),clearInterval)},c.clearTimeout=c.clearInterval=function(t){t.close()},a.prototype.unref=a.prototype.ref=function(){},a.prototype.close=function(){this._clearFn.call(window,this._id)},c.enroll=function(t,e){clearTimeout(t._idleTimeoutId),t._idleTimeout=e},c.unenroll=function(t){clearTimeout(t._idleTimeoutId),t._idleTimeout=-1},c._unrefActive=c.active=function(t){clearTimeout(t._idleTimeoutId);var e=t._idleTimeout;0<=e&&(t._idleTimeoutId=setTimeout(function(){t._onTimeout&&t._onTimeout()},e))},c.setImmediate="function"==typeof t?t:function(t){var e=u++,n=!(arguments.length<2)&&o.call(arguments,1);return i[e]=!0,r(function(){i[e]&&(n?t.apply(null,n):t.call(null),c.clearImmediate(e))}),e},c.clearImmediate="function"==typeof e?e:function(t){delete i[t]}}).call(this,s("timers").setImmediate,s("timers").clearImmediate)},{"process/browser.js":1,timers:3}],4:[function(t,e,n){var r=t("promise-polyfill"),o="undefined"!=typeof window?window:Function("return this;")();e.exports={boltExport:o.Promise||r}},{"promise-polyfill":2}]},{},[4])(4)});function j(t){f.setTimeout(function(){throw t},0)}function M(i,t){return t(function(n){var r=[],o=0;0===i.length?n([]):_(i,function(t,e){t.get(function(e){return function(t){r[e]=t,++o>=i.length&&n(r)}}(e))})})}function L(t,e){return function(t){return M(t,z)}(x(t,e))}function N(t){return t.replace(/\r?\n/g,"<br>")}function B(t,e,n){var r=t.split(/\n\n/),o=function(t,e){var n,r=[],o="<"+t;if("object"==typeof e){for(n in e)e.hasOwnProperty(n)&&r.push(n+'="'+et.encodeAllRaw(e[n])+'"');r.length&&(o+=" "+r.join(" "))}return o+">"}(e,n),i="</"+e+">",u=q.map(r,function(t){return t.split(/\n/).join("<br />")});return 1===u.length?u[0]:q.map(u,function(t){return o+t+i}).join("")}var H=A.exports.boltExport,$=function(t){var n=S.none(),e=[],r=function(t){o()?u(t):e.push(t)},o=function(){return n.isSome()},i=function(t){_(t,u)},u=function(e){n.each(function(t){f.setTimeout(function(){e(t)},0)})};return t(function(t){n=S.some(t),i(e),e=[]}),{get:r,map:function(n){return $(function(e){r(function(t){e(n(t))})})},isReady:o}},W={nu:$,pure:function(e){return $(function(t){t(e)})}},U=function(n){function t(t){n().then(t,j)}return{map:function(t){return U(function(){return n().then(t)})},bind:function(e){return U(function(){return n().then(function(t){return e(t).toPromise()})})},anonBind:function(t){return U(function(){return n().then(function(){return t.toPromise()})})},toLazy:function(){return W.nu(t)},toCached:function(){var t=null;return U(function(){return null===t&&(t=n()),t})},toPromise:n,get:t}},z=function(t){return U(function(){return new H(t)})},V=tinymce.util.Tools.resolve("tinymce.Env"),K=tinymce.util.Tools.resolve("tinymce.util.Delay"),q=tinymce.util.Tools.resolve("tinymce.util.Tools"),G=tinymce.util.Tools.resolve("tinymce.util.VK"),X="x-tinymce/html",Y="\x3c!-- "+X+" --\x3e",Z=function(t){return Y+t},J=function(t){return t.replace(Y,"")},Q=function(t){return-1!==t.indexOf(Y)},tt=function(){return X},et=tinymce.util.Tools.resolve("tinymce.html.Entities"),nt=function(t){return!/<(?:\/?(?!(?:div|p|br|span)>)\w+|(?:(?!(?:span style="white-space:\s?pre;?">)|br\s?\/>))\w+\s[^>]+)>/i.test(t)},rt=function(t,e,n){return e?B(t,!0===e?"p":e,n):N(t)},ot=tinymce.util.Tools.resolve("tinymce.html.DomParser"),it=tinymce.util.Tools.resolve("tinymce.html.Serializer"),ut=tinymce.util.Tools.resolve("tinymce.html.Node"),at=tinymce.util.Tools.resolve("tinymce.html.Schema"),st={shouldBlockDrop:function(t){return t.getParam("paste_block_drop",!1)},shouldPasteDataImages:function(t){return t.getParam("paste_data_images",!1)},shouldFilterDrop:function(t){return t.getParam("paste_filter_drop",!0)},getPreProcess:function(t){return t.getParam("paste_preprocess")},getPostProcess:function(t){return t.getParam("paste_postprocess")},getWebkitStyles:function(t){return t.getParam("paste_webkit_styles")},shouldRemoveWebKitStyles:function(t){return t.getParam("paste_remove_styles_if_webkit",!0)},shouldMergeFormats:function(t){return t.getParam("paste_merge_formats",!0)},isSmartPasteEnabled:function(t){return t.getParam("smart_paste",!0)},isPasteAsTextEnabled:function(t){return t.getParam("paste_as_text",!1)},getRetainStyleProps:function(t){return t.getParam("paste_retain_style_properties")},getWordValidElements:function(t){return t.getParam("paste_word_valid_elements","-strong/b,-em/i,-u,-span,-p,-ol,-ul,-li,-h1,-h2,-h3,-h4,-h5,-h6,-p/div,-a[href|name],sub,sup,strike,br,del,table[width],tr,td[colspan|rowspan|width],th[colspan|rowspan|width],thead,tfoot,tbody")},shouldConvertWordFakeLists:function(t){return t.getParam("paste_convert_word_fake_lists",!0)},shouldUseDefaultFilters:function(t){return t.getParam("paste_enable_default_filters",!0)}};function ct(e,t){return q.each(t,function(t){e=t.constructor===RegExp?e.replace(t,""):e.replace(t[0],t[1])}),e}var lt={filter:ct,innerText:function se(t){var e=at(),n=ot({},e),r="",o=e.getShortEndedElements(),i=q.makeMap("script noscript style textarea video audio iframe object"," "),u=e.getBlockElements();return t=ct(t,[/<!\[[^\]]+\]>/g]),function a(t){var e=t.name,n=t;if("br"!==e){if("wbr"!==e)if(o[e]&&(r+=" "),i[e])r+=" ";else{if(3===t.type&&(r+=t.value),!t.shortEnded&&(t=t.firstChild))for(;a(t),t=t.next;);u[e]&&n.next&&(r+="\n","p"===e&&(r+="\n"))}}else r+="\n"}(n.parse(t)),r},trimHtml:function ce(t){return t=ct(t,[/^[\s\S]*<body[^>]*>\s*|\s*<\/body[^>]*>[\s\S]*$/gi,/<!--StartFragment-->|<!--EndFragment-->/g,[/( ?)<span class="Apple-converted-space">\u00a0<\/span>( ?)/g,function r(t,e,n){return e||n?"\xa0":" "}],/<br class="Apple-interchange-newline">/g,/<br>$/i])},createIdGenerator:function le(t){var e=0;return function(){return t+e++}},isMsEdge:function(){return-1!==f.navigator.userAgent.indexOf(" Edge/")}};function ft(e){var n,t;return t=[/^[IVXLMCD]{1,2}\.[ \u00a0]/,/^[ivxlmcd]{1,2}\.[ \u00a0]/,/^[a-z]{1,2}[\.\)][ \u00a0]/,/^[A-Z]{1,2}[\.\)][ \u00a0]/,/^[0-9]+\.[ \u00a0]/,/^[\u3007\u4e00\u4e8c\u4e09\u56db\u4e94\u516d\u4e03\u516b\u4e5d]+\.[ \u00a0]/,/^[\u58f1\u5f10\u53c2\u56db\u4f0d\u516d\u4e03\u516b\u4e5d\u62fe]+\.[ \u00a0]/],e=e.replace(/^[\u00a0 ]+/,""),q.each(t,function(t){if(t.test(e))return!(n=!0)}),n}function dt(t){var i,u,a=1;function n(t){var e="";if(3===t.type)return t.value;if(t=t.firstChild)for(;e+=n(t),t=t.next;);return e}function s(t,e){if(3===t.type&&e.test(t.value))return t.value=t.value.replace(e,""),!1;if(t=t.firstChild)do{if(!s(t,e))return!1}while(t=t.next);return!0}function e(t,e,n){var r=t._listLevel||a;r!==a&&(i=r<a?i&&i.parent.parent:(u=i,null)),i&&i.name===e?i.append(t):(u=u||i,i=new ut(e,1),1<n&&i.attr("start",""+n),t.wrap(i)),t.name="li",a<r&&u&&u.lastChild.append(i),a=r,function o(t){if(t._listIgnore)t.remove();else if(t=t.firstChild)for(;o(t),t=t.next;);}(t),s(t,/^\u00a0+/),s(t,/^\s*([\u2022\u00b7\u00a7\u25CF]|\w+\.)/),s(t,/^\u00a0+/)}for(var r=[],o=t.firstChild;null!=o;)if(r.push(o),null!==(o=o.walk()))for(;void 0!==o&&o.parent!==t;)o=o.walk();for(var c=0;c<r.length;c++)if("p"===(t=r[c]).name&&t.firstChild){var l=n(t);if(/^[\s\u00a0]*[\u2022\u00b7\u00a7\u25CF]\s*/.test(l)){e(t,"ul");continue}if(ft(l)){var f=/([0-9]+)\./.exec(l),d=1;f&&(d=parseInt(f[1],10)),e(t,"ol",d);continue}if(t._listLevel){e(t,"ul",1);continue}i=null}else u=i,i=null}function mt(n,r,o,i){var u,a={},t=n.dom.parseStyle(i);return q.each(t,function(t,e){switch(e){case"mso-list":(u=/\w+ \w+([0-9]+)/i.exec(i))&&(o._listLevel=parseInt(u[1],10)),/Ignore/i.test(t)&&o.firstChild&&(o._listIgnore=!0,o.firstChild._listIgnore=!0);break;case"horiz-align":e="text-align";break;case"vert-align":e="vertical-align";break;case"font-color":case"mso-foreground":e="color";break;case"mso-background":case"mso-highlight":e="background";break;case"font-weight":case"font-style":return void("normal"!==t&&(a[e]=t));case"mso-element":if(/^(comment|comment-list)$/i.test(t))return void o.remove()}0!==e.indexOf("mso-comment")?0!==e.indexOf("mso-")&&("all"===st.getRetainStyleProps(n)||r&&r[e])&&(a[e]=t):o.remove()}),/(bold)/i.test(a["font-weight"])&&(delete a["font-weight"],o.wrap(new ut("b",1))),/(italic)/i.test(a["font-style"])&&(delete a["font-style"],o.wrap(new ut("i",1))),(a=n.dom.serializeStyle(a,o.name))||null}function pt(t,e){return{content:t,cancelled:e}}function gt(t,e,n,r){var o=s(t,e,n,r),i=function(t,e){var n=ot({},t.schema);n.addNodeFilter("meta",function(t){q.each(t,function(t){return t.remove()})});var r=n.parse(e,{forced_root_block:!1,isRootContent:!0});return it({validate:t.settings.validate},t.schema).serialize(r)}(t,o.content);return t.hasEventListeners("PastePostProcess")&&!o.isDefaultPrevented()?function(t,e,n,r){var o=t.dom.create("div",{style:"display:none"},e),i=c(t,o,n,r);return pt(i.node.innerHTML,i.isDefaultPrevented())}(t,i,n,r):pt(i,o.isDefaultPrevented())}function ht(t,e){return t.insertContent(e,{merge:st.shouldMergeFormats(t),paste:!0}),!0}function vt(t){return/^https?:\/\/[\w\?\-\/+=.&%@~#]+$/i.test(t)}function yt(t){return vt(t)&&/.(gif|jpe?g|png)$/.test(t)}function bt(t,e,n){return!(!1!==t.selection.isCollapsed()||!vt(e))&&function(t,e,n){return t.undoManager.extra(function(){n(t,e)},function(){t.execCommand("mceInsertLink",!1,e)}),!0}(t,e,n)}function wt(t,e,n){return!!yt(e)&&function(t,e,n){return t.undoManager.extra(function(){n(t,e)},function(){t.insertContent('<img src="'+e+'">')}),!0}(t,e,n)}function xt(t){return"\n"===t||"\r"===t}function _t(n){return function(t,e,n){return _(t,function(t){n=e(n,t)}),n}(n,function(t,e){return function(t){return-1!==" \f\t\x0B".indexOf(t)}(e)||"\xa0"===e?t.pcIsSpace||""===t.str||t.str.length===n.length-1||function(t,e){return e<t.length&&0<=e&&xt(t[e])}(n,t.str.length+1)?{pcIsSpace:!1,str:t.str+"\xa0"}:{pcIsSpace:!0,str:t.str+" "}:{pcIsSpace:xt(e),str:t.str+e}},{pcIsSpace:!1,str:""}).str}function Pt(t,e,n,r){var o=Vt(t,e,n);!1===o.cancelled&&qt(t,o.content,r)}function Tt(t,e,n){var r=n||Q(e);Pt(t,J(e),r,!1)}function Dt(t,e){var n=t.dom.encode(e).replace(/\r\n/g,"\n"),r=_t(n),o=rt(r,t.settings.forced_root_block,t.settings.forced_root_block_attrs);Pt(t,o,!1,!0)}function Ct(t){var e={};if(t){if(t.getData){var n=t.getData("Text");n&&0<n.length&&-1===n.indexOf("data:text/mce-internal,")&&(e["text/plain"]=n)}if(t.types)for(var r=0;r<t.types.length;r++){var o=t.types[r];try{e[o]=t.getData(o)}catch(i){e[o]=""}}}return e}function kt(t,e){return e in t&&0<t[e].length}function Ft(t){return kt(t,"text/html")||kt(t,"text/plain")}function St(e,t,n){var r=function(t){return"paste"===t.type}(t)?t.clipboardData:t.dataTransfer;if(e.settings.paste_data_images&&r){var o=function(t){var e=t.items?x(R(t.items),function(t){return t.getAsFile()}):[],n=t.files?R(t.files):[];return function(t,e){for(var n=[],r=0,o=t.length;r<o;r++){var i=t[r];e(i,r)&&n.push(i)}return n}(0<e.length?e:n,function(t){return/^image\/(jpeg|png|gif|bmp)$/.test(t.type)})}(r);if(0<o.length)return t.preventDefault(),function(t){return L(t,function(r){return z(function(t){var e=r.getAsFile?r.getAsFile():r,n=new window.FileReader;n.onload=function(){t({blob:e,uri:n.result})},n.readAsDataURL(e)})})}(o).get(function(t){n&&e.selection.setRng(n),_(t,function(t){!function(t,e){var n=function(t){var e;return-1!==(e=t.indexOf(","))?t.substr(e+1):null}(e.uri),r=Gt(),o=t.settings.images_reuse_filename&&e.blob.name?function(t,e){var n=e.match(/([\s\S]+?)\.(?:jpeg|jpg|png|gif)$/i);return n?t.dom.encode(n[1]):null}(t,e.blob.name):r,i=new f.Image;if(i.src=e.uri,function(t,e){return!t.images_dataimg_filter||t.images_dataimg_filter(e)}(t.settings,i)){var u,a=t.editorUpload.blobCache,s=void 0;(u=a.findFirst(function(t){return t.base64()===n}))?s=u:(s=a.create(r,e.blob,n,o),a.add(s)),Tt(t,'<img src="'+s.blobUri()+'">',!1)}else Tt(t,'<img src="'+e.uri+'">',!1)}(e,t)})}),!0}return!1}function Et(t){return G.metaKeyPressed(t)&&86===t.keyCode||t.shiftKey&&45===t.keyCode}function It(a,s,i){var u,c=function(){var e=d(S.none());return{clear:function(){e.set(S.none())},set:function(t){e.set(S.some(t))},isSet:function(){return e.get().isSome()},on:function(t){e.get().each(t)}}}();function l(t,e,n,r){var o,i,u;kt(t,"text/html")?o=t["text/html"]:(o=s.getHtml(),r=r||Q(o),s.isDefaultContent(o)&&(n=!0)),o=lt.trimHtml(o),s.remove(),i=!1===r&&nt(o),u=Kt(o),o.length&&(!i||u)||(n=!0),(n||u)&&(o=kt(t,"text/plain")&&i?t["text/plain"]:lt.innerText(o)),s.isDefaultContent(o)?e||a.windowManager.alert("Please use Ctrl+V/Cmd+V keyboard shortcuts to paste contents."):n?Dt(a,o):Tt(a,o,r)}a.on("keydown",function(t){function e(t){Et(t)&&!t.isDefaultPrevented()&&s.remove()}if(Et(t)&&!t.isDefaultPrevented()){if((u=t.shiftKey&&86===t.keyCode)&&V.webkit&&-1!==f.navigator.userAgent.indexOf("Version/"))return;if(t.stopImmediatePropagation(),c.set(t),window.setTimeout(function(){c.clear()},100),V.ie&&u)return t.preventDefault(),void m(a,!0);s.remove(),s.create(),a.once("keyup",e),a.once("paste",function(){a.off("keyup",e)})}}),a.on("paste",function(t){var e=c.isSet(),n=function(t,e){var n=Ct(e.clipboardData||t.getDoc().dataTransfer);return lt.isMsEdge()?q.extend(n,{"text/html":""}):n}(a,t),r="text"===i.get()||u,o=kt(n,tt());u=!1,t.isDefaultPrevented()||function(t){var e=t.clipboardData;return-1!==f.navigator.userAgent.indexOf("Android")&&e&&e.items&&0===e.items.length}(t)?s.remove():Ft(n)||!St(a,t,s.getLastRng()||a.selection.getRng())?(e||t.preventDefault(),!V.ie||e&&!t.ieFake||kt(n,"text/html")||(s.create(),a.dom.bind(s.getEl(),"paste",function(t){t.stopPropagation()}),a.getDoc().execCommand("Paste",!1,null),n["text/html"]=s.getHtml()),kt(n,"text/html")?(t.preventDefault(),o=o||Q(n["text/html"]),l(n,e,r,o)):K.setEditorTimeout(a,function(){l(n,e,r,o)},0)):s.remove()})}function Rt(t){return V.ie&&t.inline?f.document.body:t.getBody()}function Ot(e,t,n){!function(t){return Rt(t)!==t.getBody()}(e)||e.dom.bind(t,"paste keyup",function(t){Yt(e,n)||e.fire("paste")})}function At(t,e){return e===t}function jt(t){var e=d(null),n="%MCEPASTEBIN%";return{create:function(){return function(t,e,n){var r,o=t.dom,i=t.getBody();e.set(t.selection.getRng()),r=t.dom.add(Rt(t),"div",{id:"mcepastebin","class":"mce-pastebin",contentEditable:!0,"data-mce-bogus":"all",style:"position: fixed; top: 50%; width: 10px; height: 10px; overflow: hidden; opacity: 0"},n),(V.ie||V.gecko)&&o.setStyle(r,"left","rtl"===o.getStyle(i,"direction",!0)?65535:-65535),o.bind(r,"beforedeactivate focusin focusout",function(t){t.stopPropagation()}),Ot(t,r,n),r.focus(),t.selection.select(r,!0)}(t,e,n)},remove:function(){return function(t,e){if(Xt(t)){for(var n=void 0,r=e.get();n=t.dom.get("mcepastebin");)t.dom.remove(n),t.dom.unbind(n);r&&t.selection.setRng(r)}e.set(null)}(t,e)},getEl:function(){return Xt(t)},getHtml:function(){return function(n){function e(t,e){t.appendChild(e),n.dom.remove(e,!0)}var r,t,o,i,u;for(t=q.grep(Rt(n).childNodes,function(t){return"mcepastebin"===t.id}),r=t.shift(),q.each(t,function(t){e(r,t)}),o=(i=n.dom.select("div[id=mcepastebin]",r)).length-1;0<=o;o--)u=n.dom.create("div"),r.insertBefore(u,i[o]),e(u,i[o]);return r?r.innerHTML:""}(t)},getLastRng:function(){return function(t){return t.get()}(e)},isDefault:function(){return Yt(t,n)},isDefaultContent:function(t){return At(n,t)}}}function Mt(n,t){var e=jt(n);return n.on("PreInit",function(){return function(u,t,e){var a;It(u,t,e),u.parser.addNodeFilter("img",function(t,e,n){function r(t){t.attr("data-mce-object")||a===V.transparentSrc||t.remove()}var o;if(!u.settings.paste_data_images&&((o=n).data&&!0===o.data.paste))for(var i=t.length;i--;)(a=t[i].attr("src"))&&(0===a.indexOf("webkit-fake-url")?r(t[i]):u.settings.allow_html_data_urls||0!==a.indexOf("data:")||r(t[i]))})}(n,e,t)}),{pasteFormat:t,pasteHtml:function(t,e){return Tt(n,t,e)},pasteText:function(t){return Dt(n,t)},pasteImageData:function(t,e){return St(n,t,e)},getDataTransferItems:Ct,hasHtmlOrText:Ft,hasContentType:kt}}function Lt(t,e,n){if(!function(t){return!1===V.iOS&&t!==undefined&&"function"==typeof t.setData&&!0!==lt.isMsEdge()}(t))return!1;try{return t.clearData(),t.setData("text/html",e),t.setData("text/plain",n),t.setData(tt(),e),!0}catch(r){return!1}}function Nt(t,e,n,r){Lt(t.clipboardData,e.html,e.text)?(t.preventDefault(),r()):n(e.html,r)}function Bt(a){return function(t,e){var n=Z(t),r=a.dom.create("div",{contenteditable:"false","data-mce-bogus":"all"}),o=a.dom.create("div",{contenteditable:"true"},n);a.dom.setStyles(r,{position:"fixed",top:"0",left:"-3000px",width:"1000px",overflow:"hidden"}),r.appendChild(o),a.dom.add(a.getBody(),r);var i=a.selection.getRng();o.focus();var u=a.dom.createRng();u.selectNodeContents(o),a.selection.setRng(u),K.setTimeout(function(){a.selection.setRng(i),r.parentNode.removeChild(r),e()},0)}}function Ht(t){return{html:t.selection.getContent({contextual:!0}),text:t.selection.getContent({format:"text"})}}function $t(t){return!t.selection.isCollapsed()||function(t){return!!t.dom.getParent(t.selection.getStart(),"td[data-mce-selected],th[data-mce-selected]",t.getBody())}(t)}function Wt(t,e){return Jt.getCaretRangeFromPoint(e.clientX,e.clientY,t.getDoc())}function Ut(t,e){t.focus(),t.selection.setRng(e)}var zt={preProcess:function(t,e){return st.shouldUseDefaultFilters(t)?function(r,t){var e,o;(e=st.getRetainStyleProps(r))&&(o=q.makeMap(e.split(/[, ]/))),t=lt.filter(t,[/<br class="?Apple-interchange-newline"?>/gi,/<b[^>]+id="?docs-internal-[^>]*>/gi,/<!--[\s\S]+?-->/gi,/<(!|script[^>]*>.*?<\/script(?=[>\s])|\/?(\?xml(:\w+)?|img|meta|link|style|\w:\w+)(?=[\s\/>]))[^>]*>/gi,[/<(\/?)s>/gi,"<$1strike>"],[/&nbsp;/gi,"\xa0"],[/<span\s+style\s*=\s*"\s*mso-spacerun\s*:\s*yes\s*;?\s*"\s*>([\s\u00a0]*)<\/span>/gi,function(t,e){return 0<e.length?e.replace(/./," ").slice(Math.floor(e.length/2)).split("").join("\xa0"):""}]]);var n=st.getWordValidElements(r),i=at({valid_elements:n,valid_children:"-li[p]"});q.each(i.elements,function(t){t.attributes["class"]||(t.attributes["class"]={},t.attributesOrder.push("class")),t.attributes.style||(t.attributes.style={},t.attributesOrder.push("style"))});var u=ot({},i);u.addAttributeFilter("style",function(t){for(var e,n=t.length;n--;)(e=t[n]).attr("style",mt(r,o,e,e.attr("style"))),"span"===e.name&&e.parent&&!e.attributes.length&&e.unwrap()}),u.addAttributeFilter("class",function(t){for(var e,n,r=t.length;r--;)n=(e=t[r]).attr("class"),/^(MsoCommentReference|MsoCommentText|msoDel)$/i.test(n)&&e.remove(),e.attr("class",null)}),u.addNodeFilter("del",function(t){for(var e=t.length;e--;)t[e].remove()}),u.addNodeFilter("a",function(t){for(var e,n,r,o=t.length;o--;)if(n=(e=t[o]).attr("href"),r=e.attr("name"),n&&-1!==n.indexOf("#_msocom_"))e.remove();else if(n&&0===n.indexOf("file://")&&(n=(n=n.split("#")[1])&&"#"+n),n||r){if(r&&!/^_?(?:toc|edn|ftn)/i.test(r)){e.unwrap();continue}e.attr({href:n,name:r})}else e.unwrap()});var a=u.parse(t);return st.shouldConvertWordFakeLists(r)&&dt(a),t=it({validate:r.settings.validate},i).serialize(a)}(t,e):e},isWordContent:function fe(t){return/<font face="Times New Roman"|class="?Mso|style="[^"]*\bmso-|style='[^'']*\bmso-|w:WordDocument/i.test(t)||/class="OutlineElement/.test(t)||/id="?docs\-internal\-guid\-/.test(t)}},Vt=function(t,e,n){var r=zt.isWordContent(e),o=r?zt.preProcess(t,e):e;return gt(t,o,n,r)},Kt=yt,qt=function(t,e,n){n||!1===st.isSmartPasteEnabled(t)?ht(t,e):function(e,n){q.each([bt,wt,ht],function(t){return!0!==t(e,n,ht)})}(t,e)},Gt=lt.createIdGenerator("mceclip"),Xt=function(t){return t.dom.get("mcepastebin")},Yt=function(t,e){var n=Xt(t);return function(t){return t&&"mcepastebin"===t.id}(n)&&At(e,n.innerHTML)},Zt=function(t){t.on("cut",function(e){return function(t){$t(e)&&Nt(t,Ht(e),Bt(e),function(){if(V.browser.isChrome()){var t=e.selection.getRng();K.setEditorTimeout(e,function(){e.selection.setRng(t),e.execCommand("Delete")},0)}else e.execCommand("Delete")})}}(t)),t.on("copy",function(e){return function(t){$t(e)&&Nt(t,Ht(e),Bt(e),function(){})}}(t))},Jt=tinymce.util.Tools.resolve("tinymce.dom.RangeUtils"),Qt=function(i,u,a){st.shouldBlockDrop(i)&&i.on("dragend dragover draggesture dragdrop drop drag",function(t){t.preventDefault(),t.stopPropagation()}),st.shouldPasteDataImages(i)||i.on("drop",function(t){var e=t.dataTransfer;e&&e.files&&0<e.files.length&&t.preventDefault()}),i.on("drop",function(t){var e,n;if(n=Wt(i,t),!t.isDefaultPrevented()&&!a.get()){e=u.getDataTransferItems(t.dataTransfer);var r=u.hasContentType(e,tt());if((u.hasHtmlOrText(e)&&!function(t){var e=t["text/plain"];return!!e&&0===e.indexOf("file://")}(e)||!u.pasteImageData(t,n))&&n&&st.shouldFilterDrop(i)){var o=e["mce-internal"]||e["text/html"]||e["text/plain"];o&&(t.preventDefault(),K.setEditorTimeout(i,function(){i.undoManager.transact(function(){e["mce-internal"]&&i.execCommand("Delete"),Ut(i,n),o=lt.trimHtml(o),e["text/html"]?u.pasteHtml(o,r):u.pasteText(o)})}))}}}),i.on("dragstart",function(t){a.set(!0)}),i.on("dragover dragend",function(t){st.shouldPasteDataImages(i)&&!1===a.get()&&(t.preventDefault(),Ut(i,Wt(i,t))),"dragend"===t.type&&a.set(!1)})},te=function(t){var e=t.plugins.paste,n=st.getPreProcess(t);n&&t.on("PastePreProcess",function(t){n.call(e,e,t)});var r=st.getPostProcess(t);r&&t.on("PastePostProcess",function(t){r.call(e,e,t)})};function ee(e,n){e.on("PastePreProcess",function(t){t.content=n(e,t.content,t.internal,t.wordContent)})}function ne(t,e){if(!zt.isWordContent(e))return e;var n=[];q.each(t.schema.getBlockElements(),function(t,e){n.push(e)});var r=new RegExp("(?:<br>&nbsp;[\\s\\r\\n]+|<br>)*(<\\/?("+n.join("|")+")[^>]*>)(?:<br>&nbsp;[\\s\\r\\n]+|<br>)*","g");return e=lt.filter(e,[[r,"$1"]]),e=lt.filter(e,[[/<br><br>/g,"<BR><BR>"],[/<br>/g," "],[/<BR><BR>/g,"<br>"]])}function re(t,e,n,r){if(r||n)return e;var c,o=st.getWebkitStyles(t);if(!1===st.shouldRemoveWebKitStyles(t)||"all"===o)return e;if(o&&(c=o.split(/[, ]/)),c){var l=t.dom,f=t.selection.getNode();e=e.replace(/(<[^>]+) style="([^"]*)"([^>]*>)/gi,function(t,e,n,r){var o=l.parseStyle(l.decode(n)),i={};if("none"===c)return e+r;for(var u=0;u<c.length;u++){var a=o[c[u]],s=l.getStyle(f,c[u],!0);/color/.test(c[u])&&(a=l.toHex(a),s=l.toHex(s)),s!==a&&(i[c[u]]=a)}return(i=l.serializeStyle(i,"span"))?e+' style="'+i+'"'+r:e+r})}else e=e.replace(/(<[^>]+) style="([^"]*)"([^>]*>)/gi,"$1$3");return e=e.replace(/(<[^>]+) data-mce-style="([^"]+)"([^>]*>)/gi,function(t,e,n,r){return e+' style="'+n+'"'+r})}function oe(n,t){n.$("a",t).find("font,u").each(function(t,e){n.dom.remove(e,!0)})}function ie(n,r){return function(e){e.setActive("text"===r.pasteFormat.get());function t(t){return e.setActive(t.state)}return n.on("PastePlainTextToggle",t),function(){return n.off("PastePlainTextToggle",t)}}}var ue=function(t){V.webkit&&ee(t,re),V.ie&&(ee(t,ne),function r(e,n){e.on("PastePostProcess",function(t){n(e,t.node)})}(t,oe))},ae=function(t,e){t.ui.registry.addToggleButton("pastetext",{active:!1,icon:"paste-text",tooltip:"Paste as text",onAction:function(){return t.execCommand("mceTogglePlainTextPaste")},onSetup:ie(t,e)}),t.ui.registry.addToggleMenuItem("pastetext",{text:"Paste as text",onAction:function(){return t.execCommand("mceTogglePlainTextPaste")},onSetup:ie(t,e)})};!function de(){r.add("paste",function(t){if(!1===u(t)){var e=d(!1),n=d(st.isPasteAsTextEnabled(t)?"text":"html"),r=Mt(t,n),o=ue(t);return ae(t,r),p(t,r),te(t),Zt(t),Qt(t,r,e),a(r,o)}})}()}(window);
\ No newline at end of file
diff --git a/website/js/vendor/tinymce/js/tinymce/plugins/preview/plugin.min.js b/website/js/vendor/tinymce/js/tinymce/plugins/preview/plugin.min.js
new file mode 100644 (file)
index 0000000..da4b784
--- /dev/null
@@ -0,0 +1,9 @@
+/**
+ * Copyright (c) Tiny Technologies, Inc. All rights reserved.
+ * Licensed under the LGPL or a commercial license.
+ * For LGPL see License.txt in the project root for license information.
+ * For commercial licenses see https://www.tiny.cloud/
+ *
+ * Version: 5.1.5 (2019-12-19)
+ */
+!function(){"use strict";var e=tinymce.util.Tools.resolve("tinymce.PluginManager"),l=tinymce.util.Tools.resolve("tinymce.util.Tools"),m=function(e){return e.getParam("content_style","")},u=function(e){return e.getParam("content_css_cors",!1,"boolean")},y=tinymce.util.Tools.resolve("tinymce.Env"),n=function(t){var n="",i=t.dom.encode,e=m(t);n+='<base href="'+i(t.documentBaseURI.getURI())+'">',e&&(n+='<style type="text/css">'+e+"</style>");var o=u(t)?' crossorigin="anonymous"':"";l.each(t.contentCSS,function(e){n+='<link type="text/css" rel="stylesheet" href="'+i(t.documentBaseURI.toAbsolute(e))+'"'+o+">"});var r=t.settings.body_id||"tinymce";-1!==r.indexOf("=")&&(r=(r=t.getParam("body_id","","hash"))[t.id]||r);var a=t.settings.body_class||"";-1!==a.indexOf("=")&&(a=(a=t.getParam("body_class","","hash"))[t.id]||"");var c='<script>document.addEventListener && document.addEventListener("click", function(e) {for (var elm = e.target; elm; elm = elm.parentNode) {if (elm.nodeName === "A" && !('+(y.mac?"e.metaKey":"e.ctrlKey && !e.altKey")+")) {e.preventDefault();}}}, false);<\/script> ",s=t.getBody().dir,d=s?' dir="'+i(s)+'"':"";return"<!DOCTYPE html><html><head>"+n+'</head><body id="'+i(r)+'" class="mce-content-body '+i(a)+'"'+d+">"+t.getContent()+c+"</body></html>"},t=function(e){e.addCommand("mcePreview",function(){!function(e){var t=n(e);e.windowManager.open({title:"Preview",size:"large",body:{type:"panel",items:[{name:"preview",type:"iframe",sandboxed:!0}]},buttons:[{type:"cancel",name:"close",text:"Close",primary:!0}],initialData:{preview:t}}).focus("close")}(e)})},i=function(e){e.ui.registry.addButton("preview",{icon:"preview",tooltip:"Preview",onAction:function(){return e.execCommand("mcePreview")}}),e.ui.registry.addMenuItem("preview",{icon:"preview",text:"Preview",onAction:function(){return e.execCommand("mcePreview")}})};!function o(){e.add("preview",function(e){t(e),i(e)})}()}();
\ No newline at end of file
diff --git a/website/js/vendor/tinymce/js/tinymce/plugins/print/plugin.min.js b/website/js/vendor/tinymce/js/tinymce/plugins/print/plugin.min.js
new file mode 100644 (file)
index 0000000..43e7ca2
--- /dev/null
@@ -0,0 +1,9 @@
+/**
+ * Copyright (c) Tiny Technologies, Inc. All rights reserved.
+ * Licensed under the LGPL or a commercial license.
+ * For LGPL see License.txt in the project root for license information.
+ * For commercial licenses see https://www.tiny.cloud/
+ *
+ * Version: 5.1.5 (2019-12-19)
+ */
+!function(){"use strict";var n=tinymce.util.Tools.resolve("tinymce.PluginManager"),t=tinymce.util.Tools.resolve("tinymce.Env"),i=function(n){n.addCommand("mcePrint",function(){t.browser.isIE()?n.getDoc().execCommand("print",!1,null):n.getWin().print()})},e=function(n){n.ui.registry.addButton("print",{icon:"print",tooltip:"Print",onAction:function(){return n.execCommand("mcePrint")}}),n.ui.registry.addMenuItem("print",{text:"Print...",icon:"print",onAction:function(){return n.execCommand("mcePrint")}})};!function o(){n.add("print",function(n){i(n),e(n),n.addShortcut("Meta+P","","mcePrint")})}()}();
\ No newline at end of file
diff --git a/website/js/vendor/tinymce/js/tinymce/plugins/quickbars/plugin.min.js b/website/js/vendor/tinymce/js/tinymce/plugins/quickbars/plugin.min.js
new file mode 100644 (file)
index 0000000..8abc4ba
--- /dev/null
@@ -0,0 +1,9 @@
+/**
+ * Copyright (c) Tiny Technologies, Inc. All rights reserved.
+ * Licensed under the LGPL or a commercial license.
+ * For LGPL see License.txt in the project root for license information.
+ * For commercial licenses see https://www.tiny.cloud/
+ *
+ * Version: 5.1.5 (2019-12-19)
+ */
+!function(u){"use strict";function e(){}function l(e){return function(){return e}}function n(){return p}var r,t=tinymce.util.Tools.resolve("tinymce.PluginManager"),i=0,o=function(e,n,r){e.plugins.table?e.plugins.table.insertTable(n,r):function(r,t,o){r.undoManager.transact(function(){var e,n;r.insertContent(function(e,n){var r,t,o;for(o='<table data-mce-id="mce" style="width: 100%">',o+="<tbody>",t=0;t<n;t++){for(o+="<tr>",r=0;r<e;r++)o+="<td><br></td>";o+="</tr>"}return o+="</tbody>",o+="</table>"}(t,o)),(e=function(e){return e.dom.select("*[data-mce-id]")[0]}(r)).removeAttribute("data-mce-id"),n=r.dom.select("td,th",e),r.selection.setCursorLocation(n[0],0)})}(e,n,r)},c=function(e,n,r){var t,o;o=(t=e.editorUpload.blobCache).create(function(e){var n=(new Date).getTime();return e+"_"+Math.floor(1e9*Math.random())+ ++i+String(n)}("mceu"),r,n),t.add(o),e.insertContent(e.dom.createHTML("img",{src:o.blobUri()}))},s=tinymce.util.Tools.resolve("tinymce.util.Promise"),a=function(r){return new s(function(e){var n=new u.FileReader;n.onloadend=function(){e(n.result.split(",")[1])},n.readAsDataURL(r)})},f=tinymce.util.Tools.resolve("tinymce.Env"),d=tinymce.util.Tools.resolve("tinymce.util.Delay"),m=function(i){return new s(function(r){var t=u.document.createElement("input");t.type="file",t.style.position="fixed",t.style.left="0",t.style.top="0",t.style.opacity="0.001",u.document.body.appendChild(t);t.addEventListener("change",function(e){r(Array.prototype.slice.call(e.target.files))});var o=function(e){function n(){r([]),t.parentNode.removeChild(t)}f.os.isAndroid()&&"remove"!==e.type?d.setEditorTimeout(i,n,0):n(),i.off("focusin remove",o)};i.on("focusin remove",o),t.click()})},g=function(r){r.ui.registry.addButton("quickimage",{icon:"image",tooltip:"Insert image",onAction:function(){m(r).then(function(e){if(0<e.length){var n=e[0];a(n).then(function(e){c(r,e,n)})}})}}),r.ui.registry.addButton("quicktable",{icon:"table",tooltip:"Insert table",onAction:function(){o(r,2,2)}})},v=l(!1),h=l(!0),p=(r={fold:function(e,n){return e()},is:v,isSome:v,isNone:h,getOr:b,getOrThunk:O,getOrDie:function(e){throw new Error(e||"error: getOrDie called on none.")},getOrNull:l(null),getOrUndefined:l(undefined),or:b,orThunk:O,map:n,each:e,bind:n,exists:v,forall:h,filter:n,equals:N,equals_:N,toArray:function(){return[]},toString:l("none()")},Object.freeze&&Object.freeze(r),r);function N(e){return e.isNone()}function O(e){return e()}function b(e){return e}function E(n){return function(e){return function(e){if(null===e)return"null";var n=typeof e;return"object"==n&&(Array.prototype.isPrototypeOf(e)||e.constructor&&"Array"===e.constructor.name)?"array":"object"==n&&(String.prototype.isPrototypeOf(e)||e.constructor&&"String"===e.constructor.name)?"string":n}(e)===n}}var w=function(r){function e(){return o}function n(e){return e(r)}var t=l(r),o={fold:function(e,n){return n(r)},is:function(e){return r===e},isSome:h,isNone:v,getOr:t,getOrThunk:t,getOrDie:t,getOrNull:t,getOrUndefined:t,or:e,orThunk:e,map:function(e){return w(e(r))},each:function(e){e(r)},bind:n,exists:n,forall:n,filter:function(e){return e(r)?o:p},toArray:function(){return[r]},toString:function(){return"some("+r+")"},equals:function(e){return e.is(r)},equals_:function(e,n){return e.fold(v,function(e){return n(r,e)})}};return o},T={some:w,none:n,from:function(e){return null===e||e===undefined?p:w(e)}},y=function(e){if(null===e||e===undefined)throw new Error("Node cannot be null or undefined");return{dom:l(e)}},S={fromHtml:function(e,n){var r=(n||u.document).createElement("div");if(r.innerHTML=e,!r.hasChildNodes()||1<r.childNodes.length)throw u.console.error("HTML does not have a single root node",e),new Error("HTML must have a single root node");return y(r.childNodes[0])},fromTag:function(e,n){var r=(n||u.document).createElement(e);return y(r)},fromText:function(e,n){var r=(n||u.document).createTextNode(e);return y(r)},fromDom:y,fromPoint:function(e,n,r){var t=e.dom();return T.from(t.elementFromPoint(n,r)).map(y)}},x=(u.Node.ATTRIBUTE_NODE,u.Node.CDATA_SECTION_NODE,u.Node.COMMENT_NODE,u.Node.DOCUMENT_NODE,u.Node.DOCUMENT_TYPE_NODE,u.Node.DOCUMENT_FRAGMENT_NODE,u.Node.ELEMENT_NODE),D=(u.Node.TEXT_NODE,u.Node.PROCESSING_INSTRUCTION_NODE,u.Node.ENTITY_REFERENCE_NODE,u.Node.ENTITY_NODE,u.Node.NOTATION_NODE,"undefined"!=typeof u.window?u.window:Function("return this;")(),E("string")),k=E("object"),_=E("array"),C=E("boolean"),A=E("undefined"),M=E("function"),R=Array.prototype.slice;M(Array.from)&&Array.from;function I(e,n,r,t,o){return e(r,t)?T.some(r):M(o)&&o(r)?T.none():n(r,t,o)}function q(e,n,r){return 0!=(e.compareDocumentPosition(n)&r)}function L(e,n){var r=function(e,n){for(var r=0;r<e.length;r++){var t=e[r];if(t.test(n))return t}return undefined}(e,n);if(!r)return{major:0,minor:0};function t(e){return Number(n.replace(r,"$"+e))}return V(t(1),t(2))}function P(e,n){return function(){return n===e}}function F(e,n){return function(){return n===e}}function U(e,n){var r=String(n).toLowerCase();return function(e,n){for(var r=0,t=e.length;r<t;r++){var o=e[r];if(n(o,r))return T.some(o)}return T.none()}(e,function(e){return e.search(r)})}function B(e,n){return-1!==e.indexOf(n)}function j(n){return function(e){return B(e,n)}}function H(e,n){var r=e.dom();if(r.nodeType!==me)return!1;var t=r;if(t.matches!==undefined)return t.matches(n);if(t.msMatchesSelector!==undefined)return t.msMatchesSelector(n);if(t.webkitMatchesSelector!==undefined)return t.webkitMatchesSelector(n);if(t.mozMatchesSelector!==undefined)return t.mozMatchesSelector(n);throw new Error("Browser lacks native selectors")}function X(e,n,r){for(var t=e.dom(),o=M(r)?r:l(!1);t.parentNode;){t=t.parentNode;var i=S.fromDom(t);if(n(i))return T.some(i);if(o(i))break}return T.none()}function z(e,n,r){return X(e,function(e){return H(e,n)},r)}var G,W=function(e,n){return q(e,n,u.Node.DOCUMENT_POSITION_CONTAINED_BY)},Y=function(e){function n(){return r}var r=e;return{get:n,set:function(e){r=e},clone:function(){return Y(n())}}},$=function(){return V(0,0)},V=function(e,n){return{major:e,minor:n}},J={nu:V,detect:function(e,n){var r=String(n).toLowerCase();return 0===e.length?$():L(e,r)},unknown:$},K="Firefox",Q=function(e){var n=e.current;return{current:n,version:e.version,isEdge:P("Edge",n),isChrome:P("Chrome",n),isIE:P("IE",n),isOpera:P("Opera",n),isFirefox:P(K,n),isSafari:P("Safari",n)}},Z={unknown:function(){return Q({current:undefined,version:J.unknown()})},nu:Q,edge:l("Edge"),chrome:l("Chrome"),ie:l("IE"),opera:l("Opera"),firefox:l(K),safari:l("Safari")},ee="Windows",ne="Android",re="Solaris",te="FreeBSD",oe=function(e){var n=e.current;return{current:n,version:e.version,isWindows:F(ee,n),isiOS:F("iOS",n),isAndroid:F(ne,n),isOSX:F("OSX",n),isLinux:F("Linux",n),isSolaris:F(re,n),isFreeBSD:F(te,n)}},ie={unknown:function(){return oe({current:undefined,version:J.unknown()})},nu:oe,windows:l(ee),ios:l("iOS"),android:l(ne),linux:l("Linux"),osx:l("OSX"),solaris:l(re),freebsd:l(te)},ue=function(e,r){return U(e,r).map(function(e){var n=J.detect(e.versionRegexes,r);return{current:e.name,version:n}})},ce=function(e,r){return U(e,r).map(function(e){var n=J.detect(e.versionRegexes,r);return{current:e.name,version:n}})},se=/.*?version\/\ ?([0-9]+)\.([0-9]+).*/,ae=[{name:"Edge",versionRegexes:[/.*?edge\/ ?([0-9]+)\.([0-9]+)$/],search:function(e){return B(e,"edge/")&&B(e,"chrome")&&B(e,"safari")&&B(e,"applewebkit")}},{name:"Chrome",versionRegexes:[/.*?chrome\/([0-9]+)\.([0-9]+).*/,se],search:function(e){return B(e,"chrome")&&!B(e,"chromeframe")}},{name:"IE",versionRegexes:[/.*?msie\ ?([0-9]+)\.([0-9]+).*/,/.*?rv:([0-9]+)\.([0-9]+).*/],search:function(e){return B(e,"msie")||B(e,"trident")}},{name:"Opera",versionRegexes:[se,/.*?opera\/([0-9]+)\.([0-9]+).*/],search:j("opera")},{name:"Firefox",versionRegexes:[/.*?firefox\/\ ?([0-9]+)\.([0-9]+).*/],search:j("firefox")},{name:"Safari",versionRegexes:[se,/.*?cpu os ([0-9]+)_([0-9]+).*/],search:function(e){return(B(e,"safari")||B(e,"mobile/"))&&B(e,"applewebkit")}}],fe=[{name:"Windows",search:j("win"),versionRegexes:[/.*?windows\ nt\ ?([0-9]+)\.([0-9]+).*/]},{name:"iOS",search:function(e){return B(e,"iphone")||B(e,"ipad")},versionRegexes:[/.*?version\/\ ?([0-9]+)\.([0-9]+).*/,/.*cpu os ([0-9]+)_([0-9]+).*/,/.*cpu iphone os ([0-9]+)_([0-9]+).*/]},{name:"Android",search:j("android"),versionRegexes:[/.*?android\ ?([0-9]+)\.([0-9]+).*/]},{name:"OSX",search:j("os x"),versionRegexes:[/.*?os\ x\ ?([0-9]+)_([0-9]+).*/]},{name:"Linux",search:j("linux"),versionRegexes:[]},{name:"Solaris",search:j("sunos"),versionRegexes:[]},{name:"FreeBSD",search:j("freebsd"),versionRegexes:[]}],de={browsers:l(ae),oses:l(fe)},le=Y(function(e,n){var r=de.browsers(),t=de.oses(),o=ue(r,e).fold(Z.unknown,Z.nu),i=ce(t,e).fold(ie.unknown,ie.nu);return{browser:o,os:i,deviceType:function(e,n,r,t){var o=e.isiOS()&&!0===/ipad/i.test(r),i=e.isiOS()&&!o,u=e.isiOS()||e.isAndroid(),c=u||t("(pointer:coarse)"),s=o||!i&&u&&t("(min-device-width:768px)"),a=i||u&&!s,f=n.isSafari()&&e.isiOS()&&!1===/safari/i.test(r),d=!a&&!s&&!f;return{isiPad:l(o),isiPhone:l(i),isTablet:l(s),isPhone:l(a),isTouch:l(c),isAndroid:e.isAndroid,isiOS:e.isiOS,isWebView:l(f),isDesktop:l(d)}}(i,o,e,n)}}(u.navigator.userAgent,function(e){return u.window.matchMedia(e).matches})),me=x,ge=(le.get().browser.isIE(),{getToolbarItemsOr:(G=D,function(e,n,r){return function(e,n){if(!n(e))throw new Error("Default value doesn't match requested type.")}(r,G),function(e,n){if(_(e)||k(e))throw new Error("expected a string but found: "+e);return A(e)?n:C(e)?!1===e?"":n:e}(e.getParam(n,r),r)})}),ve=function(e){return ge.getToolbarItemsOr(e,"quickbars_selection_toolbar","bold italic | quicklink h2 h3 blockquote")},he=function(e){return ge.getToolbarItemsOr(e,"quickbars_insert_toolbar","quickimage quicktable")},pe=function(o){var e=he(o);0<e.trim().length&&o.ui.registry.addContextToolbar("quickblock",{predicate:function(e){function n(e){return e.dom()===o.getBody()}var r=S.fromDom(e),t=o.schema.getTextBlockElements();return function(e,n,r){return I(H,z,e,n,r)}(r,"table",n).fold(function(){return function(e,n,r){return I(function(e,n){return n(e)},X,e,n,r)}(r,function(e){return function(e){return e.dom().nodeName.toLowerCase()}(e)in t&&o.dom.isEmpty(e.dom())},n).isSome()},function(){return!1})},items:e,position:"line",scope:"editor"})},Ne=function(n){n.ui.registry.addContextToolbar("imageselection",{predicate:function(e){return"IMG"===e.nodeName||"FIGURE"===e.nodeName&&/image/i.test(e.className)},items:"alignleft aligncenter alignright",position:"node"});var e=ve(n);0<e.trim().length&&n.ui.registry.addContextToolbar("textselection",{predicate:function(e){return!n.selection.isCollapsed()},items:e,position:"selection"})};!function Oe(){t.add("quickbars",function(e){g(e),pe(e),Ne(e)})}()}(window);
\ No newline at end of file
diff --git a/website/js/vendor/tinymce/js/tinymce/plugins/save/plugin.min.js b/website/js/vendor/tinymce/js/tinymce/plugins/save/plugin.min.js
new file mode 100644 (file)
index 0000000..1d8daa7
--- /dev/null
@@ -0,0 +1,9 @@
+/**
+ * Copyright (c) Tiny Technologies, Inc. All rights reserved.
+ * Licensed under the LGPL or a commercial license.
+ * For LGPL see License.txt in the project root for license information.
+ * For commercial licenses see https://www.tiny.cloud/
+ *
+ * Version: 5.1.5 (2019-12-19)
+ */
+!function(){"use strict";function t(n,e){n.notificationManager.open({text:e,type:"error"})}function e(t){return function(n){function e(){n.setDisabled(a(t)&&!t.isDirty())}return t.on("NodeChange dirty",e),function(){return t.off("NodeChange dirty",e)}}}var n=tinymce.util.Tools.resolve("tinymce.PluginManager"),o=tinymce.util.Tools.resolve("tinymce.dom.DOMUtils"),i=tinymce.util.Tools.resolve("tinymce.util.Tools"),a=function(n){return n.getParam("save_enablewhendirty",!0)},c=function(n){return!!n.getParam("save_onsavecallback")},r=function(n){return!!n.getParam("save_oncancelcallback")},u=function(n){var e;if(e=o.DOM.getParent(n.id,"form"),!a(n)||n.isDirty()){if(n.save(),c(n))return n.execCallback("save_onsavecallback",n),void n.nodeChanged();e?(n.setDirty(!1),e.onsubmit&&!e.onsubmit()||("function"==typeof e.submit?e.submit():t(n,"Error: Form submit field collision.")),n.nodeChanged()):t(n,"Error: No form element found.")}},l=function(n){var e=i.trim(n.startContent);r(n)?n.execCallback("save_oncancelcallback",n):n.resetContent(e)},s=function(n){n.addCommand("mceSave",function(){u(n)}),n.addCommand("mceCancel",function(){l(n)})},d=function(n){n.ui.registry.addButton("save",{icon:"save",tooltip:"Save",disabled:!0,onAction:function(){return n.execCommand("mceSave")},onSetup:e(n)}),n.ui.registry.addButton("cancel",{icon:"cancel",tooltip:"Cancel",disabled:!0,onAction:function(){return n.execCommand("mceCancel")},onSetup:e(n)}),n.addShortcut("Meta+S","","mceSave")};!function m(){n.add("save",function(n){d(n),s(n)})}()}();
\ No newline at end of file
diff --git a/website/js/vendor/tinymce/js/tinymce/plugins/searchreplace/plugin.min.js b/website/js/vendor/tinymce/js/tinymce/plugins/searchreplace/plugin.min.js
new file mode 100644 (file)
index 0000000..6913d57
--- /dev/null
@@ -0,0 +1,9 @@
+/**
+ * Copyright (c) Tiny Technologies, Inc. All rights reserved.
+ * Licensed under the LGPL or a commercial license.
+ * For LGPL see License.txt in the project root for license information.
+ * For commercial licenses see https://www.tiny.cloud/
+ *
+ * Version: 5.1.5 (2019-12-19)
+ */
+!function(){"use strict";var l=function(e){function t(){return n}var n=e;return{get:t,set:function(e){n=e},clone:function(){return l(t())}}},e=tinymce.util.Tools.resolve("tinymce.PluginManager"),g=function(){return(g=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var o in t=arguments[n])Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o]);return e}).apply(this,arguments)},p=tinymce.util.Tools.resolve("tinymce.util.Tools");function x(e){return e&&1===e.nodeType&&"false"===e.contentEditable}function h(e){var t=e.getAttribute("data-mce-index");return"number"==typeof t?""+t:t}function v(e){var t=e.parentNode;e.firstChild&&t.insertBefore(e.firstChild,e),e.parentNode.removeChild(e)}function c(e,t){var n,r=[];if((n=p.toArray(e.getBody().getElementsByTagName("span"))).length)for(var o=0;o<n.length;o++){var a=h(n[o]);null!==a&&a.length&&a===t.toString()&&r.push(n[o])}return r}function u(e,t,n){var r=t.get(),o=r.index,a=e.dom;(n=!1!==n)?o+1===r.count?o=0:o++:o-1==-1?o=r.count-1:o--,a.removeClass(c(e,r.index),"mce-match-marker-selected");var i=c(e,o);return i.length?(a.addClass(c(e,o),"mce-match-marker-selected"),e.selection.scrollIntoView(i[0]),o):-1}function y(e,t){var n=t.parentNode;e.remove(t),e.isEmpty(n)&&e.remove(n)}function f(e,t,n,r,o){var a=function(e,t){var n=e.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&").replace(/\s/g,"[^\\S\\r\\n]");return t?"\\b"+n+"\\b":n}(n,o),i=function(e,t,n){var r,o;return(o=e.dom.create("span",{"data-mce-bogus":1})).className="mce-match-marker",r=e.getBody(),C(e,t,!1),d.findAndReplaceDOMText(n,r,o,!1,e.schema)}(e,t,new RegExp(a,r?"g":"gi"));if(i){var c=u(e,t,!0);t.set({index:c,count:i,text:n,matchCase:r,wholeWord:o})}return i}function b(e,t){var n=u(e,t,!0);t.set(g(g({},t.get()),{index:n}))}function N(e,t){var n=u(e,t,!1);t.set(g(g({},t.get()),{index:n}))}function w(e){var t=h(e);return null!==t&&0<t.length}function m(e,t,n,r,o){var a,i,c,u,d,s=t.get(),l=s.index,f=l;for(r=!1!==r,c=e.getBody(),i=p.grep(p.toArray(c.getElementsByTagName("span")),w),a=0;a<i.length;a++){var m=h(i[a]);if(u=d=parseInt(m,10),o||u===s.index){for(n.length?(i[a].firstChild.nodeValue=n,v(i[a])):y(e.dom,i[a]);i[++a];){if((u=parseInt(h(i[a]),10))!==d){a--;break}y(e.dom,i[a])}r&&f--}else l<d&&i[a].setAttribute("data-mce-index",String(d-1))}return t.set(g(g({},s),{count:o?0:s.count-1,index:f})),r?b(e,t):N(e,t),!o&&0<t.get().count}function t(){}function a(e){return function(){return e}}function n(){return T}var r,d={findAndReplaceDOMText:function W(e,t,n,r,o){var a,i,h,f,m,g,c=[],u=0;function d(e,t){if(t=t||0,!e[0])throw new Error("findAndReplaceDOMText cannot handle zero-length matches");var n=e.index;if(0<t){var r=e[t];if(!r)throw new Error("Invalid capture group");n+=e[0].indexOf(r),e[0]=r}return[n,n+e[0].length,[e[0]]]}if(h=t.ownerDocument,f=o.getBlockElements(),m=o.getWhiteSpaceElements(),g=o.getShortEndedElements(),i=function s(e){var t;if(3===e.nodeType)return e.data;if(m[e.nodeName]&&!f[e.nodeName])return"";if(t="",x(e))return"\n";if((f[e.nodeName]||g[e.nodeName])&&(t+="\n"),e=e.firstChild)for(;t+=s(e),e=e.nextSibling;);return t}(t)){if(e.global)for(;a=e.exec(i);)c.push(d(a,r));else a=i.match(e),c.push(d(a,r));return c.length&&(u=c.length,function p(e,t,n){var r,o,a,i,c=[],u=0,d=e,s=t.shift(),l=0;e:for(;;){if((f[d.nodeName]||g[d.nodeName]||x(d))&&u++,3===d.nodeType&&(!o&&d.length+u>=s[1]?(o=d,i=s[1]-u):r&&c.push(d),!r&&d.length+u>s[0]&&(r=d,a=s[0]-u),u+=d.length),r&&o){if(d=n({startNode:r,startNodeIndex:a,endNode:o,endNodeIndex:i,innerNodes:c,match:s[2],matchIndex:l}),u-=o.length-i,o=r=null,c=[],l++,!(s=t.shift()))break}else if(m[d.nodeName]&&!f[d.nodeName]||!d.firstChild){if(d.nextSibling){d=d.nextSibling;continue}}else if(!x(d)){d=d.firstChild;continue}for(;;){if(d.nextSibling){d=d.nextSibling;break}if(d.parentNode===e)break e;d=d.parentNode}}}(t,c,function l(e){var p;if("function"!=typeof e){var r=e.nodeType?e:h.createElement(e);p=function(e,t){var n=r.cloneNode(!1);return n.setAttribute("data-mce-index",t),e&&n.appendChild(h.createTextNode(e)),n}}else p=e;return function(e){var t,n,r,o=e.startNode,a=e.endNode,i=e.matchIndex;if(o===a){var c=o;r=c.parentNode,0<e.startNodeIndex&&(t=h.createTextNode(c.data.substring(0,e.startNodeIndex)),r.insertBefore(t,c));var u=p(e.match[0],i);return r.insertBefore(u,c),e.endNodeIndex<c.length&&(n=h.createTextNode(c.data.substring(e.endNodeIndex)),r.insertBefore(n,c)),c.parentNode.removeChild(c),u}t=h.createTextNode(o.data.substring(0,e.startNodeIndex)),n=h.createTextNode(a.data.substring(e.endNodeIndex));for(var d=p(o.data.substring(e.startNodeIndex),i),s=0,l=e.innerNodes.length;s<l;++s){var f=e.innerNodes[s],m=p(f.data,i);f.parentNode.replaceChild(m,f)}var g=p(a.data.substring(0,e.endNodeIndex),i);return(r=o.parentNode).insertBefore(t,o),r.insertBefore(d,o),r.removeChild(o),(r=a.parentNode).insertBefore(g,a),r.insertBefore(n,a),r.removeChild(a),g}}(n))),u}}},C=function(e,t,n){var r,o,a,i,c=t.get();for(o=p.toArray(e.getBody().getElementsByTagName("span")),r=0;r<o.length;r++){var u=h(o[r]);null!==u&&u.length&&(u===c.index.toString()&&(a=a||o[r].firstChild,i=o[r].firstChild),v(o[r]))}if(t.set(g(g({},c),{index:-1,count:0,text:""})),a&&i){var d=e.dom.createRng();return d.setStart(a,0),d.setEnd(i,i.data.length),!1!==n&&e.selection.setRng(d),d}},o=function(r,o){return{done:function(e){return C(r,o,e)},find:function(e,t,n){return f(r,o,e,t,n)},next:function(){return b(r,o)},prev:function(){return N(r,o)},replace:function(e,t,n){return m(r,o,e,t,n)}}},i=a(!1),s=a(!0),T=(r={fold:function(e,t){return e()},is:i,isSome:i,isNone:s,getOr:A,getOrThunk:O,getOrDie:function(e){throw new Error(e||"error: getOrDie called on none.")},getOrNull:a(null),getOrUndefined:a(undefined),or:A,orThunk:O,map:n,each:t,bind:n,exists:i,forall:s,filter:n,equals:S,equals_:S,toArray:function(){return[]},toString:a("none()")},Object.freeze&&Object.freeze(r),r);function S(e){return e.isNone()}function O(e){return e()}function A(e){return e}function k(e,t){return function(){F(e,t)}}var B,I=function(n){function e(){return o}function t(e){return e(n)}var r=a(n),o={fold:function(e,t){return t(n)},is:function(e){return n===e},isSome:s,isNone:i,getOr:r,getOrThunk:r,getOrDie:r,getOrNull:r,getOrUndefined:r,or:e,orThunk:e,map:function(e){return I(e(n))},each:function(e){e(n)},bind:t,exists:t,forall:t,filter:function(e){return e(n)?o:T},toArray:function(){return[n]},toString:function(){return"some("+n+")"},equals:function(e){return e.is(n)},equals_:function(e,t){return e.fold(i,function(e){return t(n,e)})}};return o},E={some:I,none:n,from:function(e){return null===e||e===undefined?T:I(e)}},M=(B="function",function(e){return function(e){if(null===e)return"null";var t=typeof e;return"object"==t&&(Array.prototype.isPrototypeOf(e)||e.constructor&&"Array"===e.constructor.name)?"array":"object"==t&&(String.prototype.isPrototypeOf(e)||e.constructor&&"String"===e.constructor.name)?"string":t}(e)===B}),D=Array.prototype.slice,R=(M(Array.from)&&Array.from,tinymce.util.Tools.resolve("tinymce.Env")),F=function(a,i){var e=function(){var t=l(E.none());return{clear:function(){t.set(E.none())},set:function(e){t.set(E.some(e))},isSet:function(){return t.get().isSome()},on:function(e){t.get().each(e)}}}();a.undoManager.add();var t=p.trim(a.selection.getContent({format:"text"}));function c(e){(function(e,t){return 1<t.get().count}(0,i)?e.enable:e.disable)("next"),(function(e,t){return 1<t.get().count}(0,i)?e.enable:e.disable)("prev")}function u(e,t){!function(e,t){for(var n=0,r=e.length;n<r;n++){t(e[n],n)}}(["replace","replaceall","prev","next"],t?e.disable:e.enable)}function r(e,t){R.browser.isSafari()&&R.deviceType.isTouch()&&("find"===t||"replace"===t||"replaceall"===t)&&e.focus(t)}function d(e){C(a,i,!1),u(e,!0),c(e)}function o(e){var t=e.getData(),n=i.get();if(t.findtext.length){if(n.text===t.findtext&&n.matchCase===t.matchcase&&n.wholeWord===t.wholewords)b(a,i);else{var r=f(a,i,t.findtext,t.matchcase,t.wholewords);r<=0&&!function o(e){a.windowManager.alert("Could not find the specified string.",function(){e.focus("findtext")})}(e),u(e,0===r)}c(e)}else d(e)}var n=i.get(),s={title:"Find and Replace",size:"normal",body:{type:"panel",items:[{type:"bar",items:[{type:"input",name:"findtext",placeholder:"Find",maximized:!0,inputMode:"search"},{type:"button",name:"prev",text:"Previous",icon:"action-prev",disabled:!0,borderless:!0},{type:"button",name:"next",text:"Next",icon:"action-next",disabled:!0,borderless:!0}]},{type:"input",name:"replacetext",placeholder:"Replace with",inputMode:"search"}]},buttons:[{type:"menu",name:"options",icon:"preferences",tooltip:"Preferences",align:"start",items:[{type:"togglemenuitem",name:"matchcase",text:"Match case"},{type:"togglemenuitem",name:"wholewords",text:"Find whole words only"}]},{type:"custom",name:"find",text:"Find",primary:!0},{type:"custom",name:"replace",text:"Replace",disabled:!0},{type:"custom",name:"replaceall",text:"Replace All",disabled:!0}],initialData:{findtext:t,replacetext:"",wholewords:n.wholeWord,matchcase:n.matchCase},onChange:function(e,t){"findtext"===t.name&&0<i.get().count&&d(e)},onAction:function(e,t){var n=e.getData();switch(t.name){case"find":o(e);break;case"replace":m(a,i,n.replacetext)?c(e):d(e);break;case"replaceall":m(a,i,n.replacetext,!0,!0),d(e);break;case"prev":N(a,i),c(e);break;case"next":b(a,i),c(e);break;case"matchcase":case"wholewords":!function(e){var t=e.getData(),n=i.get();i.set(g(g({},n),{matchCase:t.matchcase,wholeWord:t.wholewords}))}(e),d(e)}r(e,t.name)},onSubmit:function(e){o(e),r(e,"find")},onClose:function(){a.focus(),C(a,i),a.undoManager.add()}};e.set(a.windowManager.open(s,{inline:"toolbar"}))},j=function(e,t){e.addCommand("SearchReplace",function(){F(e,t)})},P=function(e,t){e.ui.registry.addMenuItem("searchreplace",{text:"Find and replace...",shortcut:"Meta+F",onAction:k(e,t),icon:"search"}),e.ui.registry.addButton("searchreplace",{tooltip:"Find and replace",onAction:k(e,t),icon:"search"}),e.shortcuts.add("Meta+F","",k(e,t))};!function z(){e.add("searchreplace",function(e){var t=l({index:-1,count:0,text:"",matchCase:!1,wholeWord:!1});return j(e,t),P(e,t),o(e,t)})}()}();
\ No newline at end of file
diff --git a/website/js/vendor/tinymce/js/tinymce/plugins/spellchecker/plugin.min.js b/website/js/vendor/tinymce/js/tinymce/plugins/spellchecker/plugin.min.js
new file mode 100644 (file)
index 0000000..848c83a
--- /dev/null
@@ -0,0 +1,9 @@
+/**
+ * Copyright (c) Tiny Technologies, Inc. All rights reserved.
+ * Licensed under the LGPL or a commercial license.
+ * For LGPL see License.txt in the project root for license information.
+ * For commercial licenses see https://www.tiny.cloud/
+ *
+ * Version: 5.1.5 (2019-12-19)
+ */
+!function(t){"use strict";var a=function(e){function t(){return n}var n=e;return{get:t,set:function(e){n=e},clone:function(){return a(t())}}},n=tinymce.util.Tools.resolve("tinymce.PluginManager"),c=function(e){return!(!/(^|[ ,])tinymcespellchecker([, ]|$)/.test(e.settings.plugins)||!n.get("tinymcespellchecker"))&&("undefined"!=typeof t.window.console&&t.window.console.log&&t.window.console.log("Spell Checker Pro is incompatible with Spell Checker plugin! Remove 'spellchecker' from the 'plugins' option."),!0)},l=tinymce.util.Tools.resolve("tinymce.util.Tools"),u=tinymce.util.Tools.resolve("tinymce.util.URI"),d=tinymce.util.Tools.resolve("tinymce.util.XHR"),f=function(e){return e.fire("SpellcheckStart")},o=function(e){return e.fire("SpellcheckEnd")},g=function(e){return e.getParam("spellchecker_languages","English=en,Danish=da,Dutch=nl,Finnish=fi,French=fr_FR,German=de,Italian=it,Polish=pl,Portuguese=pt_BR,Spanish=es,Swedish=sv")},s=function(e){var t=e.getParam("language","en");return e.getParam("spellchecker_language",t)},h=function(e){return e.getParam("spellchecker_rpc_url")},p=function(e){return e.getParam("spellchecker_callback")},m=function(e){var t=new RegExp('[^\\s!"#$%&()*+,-./:;<=>?@[\\]^_{|}`\xa7\xa9\xab\xae\xb1\xb6\xb7\xb8\xbb\xbc\xbd\xbe\xbf\xd7\xf7\xa4\u201d\u201c\u201e\xa0\u2002\u2003\u2009]+',"g");return e.getParam("spellchecker_wordchar_pattern",t)};function b(e){return e&&1===e.nodeType&&"false"===e.contentEditable}function r(a,r){var n,o,g,h,p,i=[],v=r.dom;function c(e,t){if(!e[0])throw new Error("findAndReplaceDOMText cannot handle zero-length matches");return{start:e.index,end:e.index+e[0].length,text:e[0],data:t}}function s(e){var t=a.getElementsByTagName("*"),n=[];e="number"==typeof e?""+e:null;for(var r=0;r<t.length;r++){var o=t[r],i=o.getAttribute("data-mce-index");null!==i&&i.length&&-1!==o.className.indexOf("mce-spellchecker-word")&&(i!==e&&null!==e||n.push(o))}return n}function u(e){for(var t=i.length;t--;)if(i[t]===e)return t;return-1}function e(e){for(var t=0,n=i.length;t<n&&!1!==e(i[t],t);t++);return this}function t(e){var t,n,r=s(e?u(e):null);for(t=r.length;t--;)(n=r[t]).parentNode.insertBefore(n.firstChild,n),n.parentNode.removeChild(n);return this}function l(e){var t=s(u(e)),n=r.dom.createRng();return n.setStartBefore(t[0]),n.setEndAfter(t[t.length-1]),n}return g=r.schema.getBlockElements(),h=r.schema.getWhiteSpaceElements(),p=r.schema.getShortEndedElements(),{text:o=function d(e){var t;if(3===e.nodeType)return e.data;if(h[e.nodeName]&&!g[e.nodeName])return"";if(b(e))return"\n";if(t="",(g[e.nodeName]||p[e.nodeName])&&(t+="\n"),e=e.firstChild)for(;t+=d(e),e=e.nextSibling;);return t}(a),matches:i,each:e,filter:function f(n){var r=[];return e(function(e,t){n(e,t)&&r.push(e)}),i=r,this},reset:function m(){return i.splice(0,i.length),t(),this},matchFromElement:function x(e){return i[e.getAttribute("data-mce-index")]},elementFromMatch:function k(e){return s(u(e))[0]},find:function N(e,t){if(o&&e.global)for(;n=e.exec(o);)i.push(c(n,t));return this},add:function y(e,t,n){return i.push({start:e,end:e+t,text:o.substr(e,t),data:n}),this},wrap:function S(e){return i.length&&function f(e,t,n){var r,o,i,a,c,s=[],u=0,l=e,d=0;(t=t.slice(0)).sort(function(e,t){return e.start-t.start}),c=t.shift();e:for(;;){if((g[l.nodeName]||p[l.nodeName]||b(l))&&u++,3===l.nodeType&&(!o&&l.length+u>=c.end?(o=l,a=c.end-u):r&&s.push(l),!r&&l.length+u>c.start&&(r=l,i=c.start-u),u+=l.length),r&&o){if(l=n({startNode:r,startNodeIndex:i,endNode:o,endNodeIndex:a,innerNodes:s,match:c.text,matchIndex:d}),u-=o.length-a,o=r=null,s=[],d++,!(c=t.shift()))break}else if(h[l.nodeName]&&!g[l.nodeName]||!l.firstChild){if(l.nextSibling){l=l.nextSibling;continue}}else if(!b(l)){l=l.firstChild;continue}for(;;){if(l.nextSibling){l=l.nextSibling;break}if(l.parentNode===e)break e;l=l.parentNode}}}(a,i,function t(o){function m(e,t){var n=i[t];n.stencil||(n.stencil=o(n));var r=n.stencil.cloneNode(!1);return r.setAttribute("data-mce-index",t),e&&r.appendChild(v.doc.createTextNode(e)),r}return function(e){var t,n,r,o=e.startNode,i=e.endNode,a=e.matchIndex,c=v.doc;if(o===i){var s=o;r=s.parentNode,0<e.startNodeIndex&&(t=c.createTextNode(s.data.substring(0,e.startNodeIndex)),r.insertBefore(t,s));var u=m(e.match,a);return r.insertBefore(u,s),e.endNodeIndex<s.length&&(n=c.createTextNode(s.data.substring(e.endNodeIndex)),r.insertBefore(n,s)),s.parentNode.removeChild(s),u}t=c.createTextNode(o.data.substring(0,e.startNodeIndex)),n=c.createTextNode(i.data.substring(e.endNodeIndex));for(var l=m(o.data.substring(e.startNodeIndex),a),d=0,f=e.innerNodes.length;d<f;++d){var g=e.innerNodes[d],h=m(g.data,a);g.parentNode.replaceChild(h,g)}var p=m(i.data.substring(0,e.endNodeIndex),a);return(r=o.parentNode).insertBefore(t,o),r.insertBefore(l,o),r.removeChild(o),(r=i.parentNode).insertBefore(p,i),r.insertBefore(n,i),r.removeChild(i),p}}(e)),this},unwrap:t,replace:function w(e,t){var n=l(e);return n.deleteContents(),0<t.length&&n.insertNode(r.dom.doc.createTextNode(t)),n},rangeFromMatch:l,indexOf:u}}function v(e,t){if(!t.get()){var n=r(e.getBody(),e);t.set(n)}return t.get()}function x(e,t,n,r,o,i,a){var c=p(e);(c||function(a,c,s){return function(e,t,r,o){var n={method:e,lang:s.get()},i="";n["addToDictionary"===e?"word":"text"]=t,l.each(n,function(e,t){i&&(i+="&"),i+=t+"="+encodeURIComponent(e)}),d.send({url:new u(c).toAbsolute(h(a)),type:"post",content_type:"application/x-www-form-urlencoded",data:i,success:function(e){var t=JSON.parse(e);if(t)t.error?o(t.error):r(t);else{var n=a.translate("Server response wasn't proper JSON.");o(n)}},error:function(){var e=a.translate("The spelling service was not found: (")+h(a)+a.translate(")");o(e)}})}}(e,t,n)).call(e.plugins.spellchecker,r,o,i,a)}function k(e,t,n){e.dom.select("span.mce-spellchecker-word").length||y(e,t,n)}function N(e){var t=e.getAttribute("data-mce-index");return"number"==typeof t?""+t:t}var y=function(e,t,n){var r=e.selection.getBookmark();if(v(e,n).reset(),e.selection.moveToBookmark(r),n.set(null),t.get())return t.set(!1),o(e),!0},S=function(t,e,n,r,o){var i=!!o.dictionary,a=o.words;if(t.setProgressState(!1),function(e){for(var t in e)return!1;return!0}(a)){var c=t.translate("No misspellings found.");return t.notificationManager.open({text:c,type:"info"}),void e.set(!1)}r.set({suggestions:a,hasDictionarySupport:i});var s=t.selection.getBookmark();v(t,n).find(m(t)).filter(function(e){return!!a[e.text]}).wrap(function(e){return t.dom.create("span",{"class":"mce-spellchecker-word","aria-invalid":"spelling","data-mce-bogus":1,"data-mce-word":e.text})}),t.selection.moveToBookmark(s),e.set(!0),f(t)},w={spellcheck:function(t,e,n,r,o,i){if(!y(t,n,r)){t.setProgressState(!0),x(t,e,i,"spellcheck",v(t,r).text,function(e){S(t,n,r,o,e)},function(e){t.notificationManager.open({text:e,type:"error"}),t.setProgressState(!1),y(t,n,r)}),t.focus()}},checkIfFinished:k,addToDictionary:function(t,e,n,r,o,i,a){t.setProgressState(!0),x(t,e,o,"addToDictionary",i,function(){t.setProgressState(!1),t.dom.remove(a,!0),k(t,n,r)},function(e){t.notificationManager.open({text:e,type:"error"}),t.setProgressState(!1)})},ignoreWord:function(t,e,n,r,o,i){t.selection.collapse(),i?l.each(t.dom.select("span.mce-spellchecker-word"),function(e){e.getAttribute("data-mce-word")===r&&t.dom.remove(e,!0)}):t.dom.remove(o,!0),k(t,e,n)},findSpansByIndex:function(e,t){var n,r=[];if((n=l.toArray(e.getBody().getElementsByTagName("span"))).length)for(var o=0;o<n.length;o++){var i=N(n[o]);null!==i&&i.length&&i===t.toString()&&r.push(n[o])}return r},getElmIndex:N,markErrors:S},T=function(t,n,r,o,e,i){return{getTextMatcher:function(){return o.get()},getWordCharPattern:function(){return m(t)},markErrors:function(e){w.markErrors(t,n,o,r,e)},getLanguage:function(){return e.get()}}},I=function(e,t,n,r,o,i){e.addCommand("mceSpellCheck",function(){w.spellcheck(e,t,n,r,o,i)})},B=function(){return(B=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var o in t=arguments[n])Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o]);return e}).apply(this,arguments)},A="SpellcheckStart SpellcheckEnd",E=function(n,e,r,t,o,i){function a(){w.spellcheck(n,e,r,t,i,o)}var c=function(e,t){var n=[];return l.each(t,function(e){n.push({selectable:!0,text:e.name,data:e.value})}),n}(0,function(e){return l.map(g(e).split(","),function(e){return{name:(e=e.split("="))[0],value:e[1]}})}(n)),s={tooltip:"Spellcheck",onAction:a,icon:"spell-check",onSetup:function(e){function t(){e.setActive(r.get())}return n.on(A,t),function(){n.off(A,t)}}},u=B(B({},s),{type:"splitbutton",select:function(e){return e===o.get()},fetch:function(e){e(l.map(c,function(e){return{type:"choiceitem",value:e.data,text:e.text}}))},onItemAction:function(e,t){o.set(t)}});1<c.length?n.ui.registry.addSplitButton("spellchecker",u):n.ui.registry.addToggleButton("spellchecker",s),n.ui.registry.addToggleMenuItem("spellchecker",{text:"Spellcheck",onSetup:function(e){e.setActive(r.get());function t(){e.setActive(r.get())}return n.on(A,t),function(){n.off(A,t)}},onAction:a})},C=function(o,i,a,c,s,u){o.ui.registry.addContextMenu("spellchecker",{update:function(e){var t=e;if("mce-spellchecker-word"!==t.className)return[];var n=w.findSpansByIndex(o,w.getElmIndex(t));if(0<n.length){var r=o.dom.createRng();return r.setStartBefore(n[0]),r.setEndAfter(n[n.length-1]),o.selection.setRng(r),function(t,e,n,r,o,i,a,c){var s=[],u=n.get().suggestions[a];return l.each(u,function(e){s.push({text:e,onAction:function(){t.insertContent(t.dom.encode(e)),t.dom.remove(c),w.checkIfFinished(t,r,o)}})}),n.get().hasDictionarySupport&&(s.push({type:"separator"}),s.push({text:"Add to dictionary",onAction:function(){w.addToDictionary(t,e,r,o,i,a,c)}})),s.push.apply(s,[{type:"separator"},{text:"Ignore",onAction:function(){w.ignoreWord(t,r,o,a,c)}},{text:"Ignore all",onAction:function(){w.ignoreWord(t,r,o,a,c,!0)}}]),s}(o,i,a,c,s,u,t.getAttribute("data-mce-word"),n)}}})};!function e(){n.add("spellchecker",function(e,t){if(!1===c(e)){var n=a(!1),r=a(s(e)),o=a(null),i=a(null);return E(e,t,n,o,r,i),C(e,t,i,n,o,r),I(e,t,n,o,i,r),T(e,n,i,o,r,t)}})}()}(window);
\ No newline at end of file
diff --git a/website/js/vendor/tinymce/js/tinymce/plugins/tabfocus/plugin.min.js b/website/js/vendor/tinymce/js/tinymce/plugins/tabfocus/plugin.min.js
new file mode 100644 (file)
index 0000000..59a41b1
--- /dev/null
@@ -0,0 +1,9 @@
+/**
+ * Copyright (c) Tiny Technologies, Inc. All rights reserved.
+ * Licensed under the LGPL or a commercial license.
+ * For LGPL see License.txt in the project root for license information.
+ * For commercial licenses see https://www.tiny.cloud/
+ *
+ * Version: 5.1.5 (2019-12-19)
+ */
+!function(c){"use strict";function t(e){e.keyCode!==d.TAB||e.ctrlKey||e.altKey||e.metaKey||e.preventDefault()}var e=tinymce.util.Tools.resolve("tinymce.PluginManager"),n=tinymce.util.Tools.resolve("tinymce.dom.DOMUtils"),s=tinymce.util.Tools.resolve("tinymce.EditorManager"),a=tinymce.util.Tools.resolve("tinymce.Env"),y=tinymce.util.Tools.resolve("tinymce.util.Delay"),f=tinymce.util.Tools.resolve("tinymce.util.Tools"),d=tinymce.util.Tools.resolve("tinymce.util.VK"),m=function(e){return e.getParam("tab_focus",function(e){return e.getParam("tabfocus_elements",":prev,:next")}(e))},v=n.DOM,i=function(r){function e(n){var i,o,e,l;if(!(n.keyCode!==d.TAB||n.ctrlKey||n.altKey||n.metaKey||n.isDefaultPrevented())&&(1===(e=f.explode(m(r))).length&&(e[1]=e[0],e[0]=":prev"),o=n.shiftKey?":prev"===e[0]?u(-1):v.get(e[0]):":next"===e[1]?u(1):v.get(e[1]))){var t=s.get(o.id||o.name);o.id&&t?t.focus():y.setTimeout(function(){a.webkit||c.window.focus(),o.focus()},10),n.preventDefault()}function u(e){function t(e){return/INPUT|TEXTAREA|BUTTON/.test(e.tagName)&&s.get(n.id)&&-1!==e.tabIndex&&function t(e){return"BODY"===e.nodeName||"hidden"!==e.type&&"none"!==e.style.display&&"hidden"!==e.style.visibility&&t(e.parentNode)}(e)}if(o=v.select(":input:enabled,*[tabindex]:not(iframe)"),f.each(o,function(e,t){if(e.id===r.id)return i=t,!1}),0<e){for(l=i+1;l<o.length;l++)if(t(o[l]))return o[l]}else for(l=i-1;0<=l;l--)if(t(o[l]))return o[l];return null}}r.on("init",function(){r.inline&&v.setAttrib(r.getBody(),"tabIndex",null),r.on("keyup",t),a.gecko?r.on("keypress keydown",e):r.on("keydown",e)})};!function o(){e.add("tabfocus",function(e){i(e)})}()}(window);
\ No newline at end of file
diff --git a/website/js/vendor/tinymce/js/tinymce/plugins/table/plugin.min.js b/website/js/vendor/tinymce/js/tinymce/plugins/table/plugin.min.js
new file mode 100644 (file)
index 0000000..173a4db
--- /dev/null
@@ -0,0 +1,9 @@
+/**
+ * Copyright (c) Tiny Technologies, Inc. All rights reserved.
+ * Licensed under the LGPL or a commercial license.
+ * For LGPL see License.txt in the project root for license information.
+ * For commercial licenses see https://www.tiny.cloud/
+ *
+ * Version: 5.1.5 (2019-12-19)
+ */
+!function(f){"use strict";function o(e){return e}var R=function(e){function n(){return t}var t=e;return{get:n,set:function(e){t=e},clone:function(){return R(n())}}},T=function(){},O=function(t,r){return function(){for(var e=[],n=0;n<arguments.length;n++)e[n]=arguments[n];return t(r.apply(null,e))}},D=function(e){return function(){return e}};function b(r){for(var o=[],e=1;e<arguments.length;e++)o[e-1]=arguments[e];return function(){for(var e=[],n=0;n<arguments.length;n++)e[n]=arguments[n];var t=o.concat(e);return r.apply(null,t)}}function d(t){return function(){for(var e=[],n=0;n<arguments.length;n++)e[n]=arguments[n];return!t.apply(null,e)}}function e(){return u}var n,s=D(!1),i=D(!0),u=(n={fold:function(e,n){return e()},is:s,isSome:s,isNone:i,getOr:c,getOrThunk:r,getOrDie:function(e){throw new Error(e||"error: getOrDie called on none.")},getOrNull:D(null),getOrUndefined:D(undefined),or:c,orThunk:r,map:e,each:T,bind:e,exists:s,forall:i,filter:e,equals:t,equals_:t,toArray:function(){return[]},toString:D("none()")},Object.freeze&&Object.freeze(n),n);function t(e){return e.isNone()}function r(e){return e()}function c(e){return e}function a(n){return function(e){return function(e){if(null===e)return"null";var n=typeof e;return"object"==n&&(Array.prototype.isPrototypeOf(e)||e.constructor&&"Array"===e.constructor.name)?"array":"object"==n&&(String.prototype.isPrototypeOf(e)||e.constructor&&"String"===e.constructor.name)?"string":n}(e)===n}}function l(e,n){return-1<function(e,n){return Ue.call(e,n)}(e,n)}function m(e,n){for(var t=0,r=e.length;t<r;t++){if(n(e[t],t))return!0}return!1}function g(e,n){for(var t=e.length,r=new Array(t),o=0;o<t;o++){var i=e[o];r[o]=n(i,o)}return r}function p(e,n){for(var t=0,r=e.length;t<r;t++){n(e[t],t)}}function h(e,n){for(var t=[],r=0,o=e.length;r<o;r++){var i=e[r];n(i,r)&&t.push(i)}return t}function v(e,n,t){return function(e,n){for(var t=e.length-1;0<=t;t--){n(e[t],t)}}(e,function(e){t=n(t,e)}),t}function w(e,n,t){return p(e,function(e){t=n(t,e)}),t}function y(e,n){for(var t=0,r=e.length;t<r;t++){var o=e[t];if(n(o,t))return Me.some(o)}return Me.none()}function C(e,n){for(var t=0,r=e.length;t<r;t++){if(n(e[t],t))return Me.some(t)}return Me.none()}function S(e){for(var n=[],t=0,r=e.length;t<r;++t){if(!Le(e[t]))throw new Error("Arr.flatten item "+t+" was not an array, input: "+e);qe.apply(n,e[t])}return n}function x(e,n){var t=g(e,n);return S(t)}function A(e,n){for(var t=0,r=e.length;t<r;++t){if(!0!==n(e[t],t))return!1}return!0}function E(e){var n=Fe.call(e,0);return n.reverse(),n}function N(e,n){for(var t=Ve(e),r=0,o=t.length;r<o;r++){var i=t[r];n(e[i],i)}}function k(e,t){return Ye(e,function(e,n){return{k:n,v:t(e,n)}})}function I(e,n){return Ke(e,n)?Me.from(e[n]):Me.none()}function B(){for(var n=[],e=0;e<arguments.length;e++)n[e]=arguments[e];return function(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];if(n.length!==t.length)throw new Error('Wrong number of arguments to struct. Expected "['+n.length+']", got '+t.length+" arguments");var r={};return p(n,function(e,n){r[e]=D(t[n])}),r}}function P(e){return e.slice(0).sort()}function M(e,n){throw new Error("All required keys ("+P(e).join(", ")+") were not specified. Specified keys were: "+P(n).join(", ")+".")}function W(e){throw new Error("Unsupported keys for object: "+P(e).join(", "))}function _(n,e){if(!Le(e))throw new Error("The "+n+" fields must be an array. Was: "+e+".");p(e,function(e){if(!_e(e))throw new Error("The value "+e+" in the "+n+" fields was not a string.")})}function L(e){var t=P(e);y(t,function(e,n){return n<t.length-1&&e===t[n+1]}).each(function(e){throw new Error("The field: "+e+" occurs more than once in the combined fields: ["+t.join(", ")+"].")})}function j(e){return e.dom().nodeType}function z(n){return function(e){return j(e)===n}}function H(e){return j(e)===$e||"#comment"===en(e)}function F(e,n,t){if(!(_e(t)||je(t)||He(t)))throw f.console.error("Invalid call to Attr.set. Key ",n,":: Value ",t,":: Element ",e),new Error("Attribute value was not simple");e.setAttribute(n,t+"")}function U(e,n,t){F(e.dom(),n,t)}function q(e,n){var t=e.dom();N(n,function(e,n){F(t,n,e)})}function V(e,n){var t=e.dom().getAttribute(n);return null===t?undefined:t}function G(e,n){var t=e.dom();return!(!t||!t.hasAttribute)&&t.hasAttribute(n)}function Y(e,n){e.dom().removeAttribute(n)}function K(e){return w(e.dom().attributes,function(e,n){return e[n.name]=n.value,e},{})}function X(e,n,t){return""===n||!(e.length<n.length)&&e.substr(t,t+n.length)===n}function $(e,n){return-1!==e.indexOf(n)}function J(e,n){return X(e,n,0)}function Q(e){return e.style!==undefined&&ze(e.style.getPropertyValue)}function Z(t){var r,o=!1;return function(){for(var e=[],n=0;n<arguments.length;n++)e[n]=arguments[n];return o||(o=!0,r=t.apply(null,e)),r}}function ee(e){var n=tn(e)?e.dom().parentNode:e.dom();return n!==undefined&&null!==n&&n.ownerDocument.body.contains(n)}function ne(e,n,t){if(!_e(t))throw f.console.error("Invalid call to CSS.set. Property ",n,":: Value ",t,":: Element ",e),new Error("CSS value must be a string: "+t);Q(e)&&e.style.setProperty(n,t)}function te(e,n,t){var r=e.dom();ne(r,n,t)}function re(e,n){var t=e.dom();N(n,function(e,n){ne(t,n,e)})}function oe(e,n){var t=e.dom(),r=f.window.getComputedStyle(t).getPropertyValue(n),o=""!==r||ee(e)?r:an(t,n);return null===o?undefined:o}function ie(e,n){var t=e.dom(),r=an(t,n);return Me.from(r).filter(function(e){return 0<e.length})}function ue(e,n){!function(e,n){Q(e)&&e.style.removeProperty(n)}(e.dom(),n),G(e,"style")&&""===function(e){return e.replace(/^\s+|\s+$/g,"")}(V(e,"style"))&&Y(e,"style")}function ce(e,n,t){return 0!=(e.compareDocumentPosition(n)&t)}function ae(e,n){var t=function(e,n){for(var t=0;t<e.length;t++){var r=e[t];if(r.test(n))return r}return undefined}(e,n);if(!t)return{major:0,minor:0};function r(e){return Number(n.replace(t,"$"+e))}return dn(r(1),r(2))}function le(e,n){return function(){return n===e}}function fe(e,n){return function(){return n===e}}function se(e,n){var t=String(n).toLowerCase();return y(e,function(e){return e.search(t)})}function de(n){return function(e){return $(e,n)}}function me(){return En.get()}function ge(e,n){var t=e.dom();if(t.nodeType!==Nn)return!1;var r=t;if(r.matches!==undefined)return r.matches(n);if(r.msMatchesSelector!==undefined)return r.msMatchesSelector(n);if(r.webkitMatchesSelector!==undefined)return r.webkitMatchesSelector(n);if(r.mozMatchesSelector!==undefined)return r.mozMatchesSelector(n);throw new Error("Browser lacks native selectors")}function pe(e){return e.nodeType!==Nn&&e.nodeType!==kn||0===e.childElementCount}function he(e){return on.fromDom(e.dom().ownerDocument)}function ve(e){return Me.from(e.dom().parentNode).map(on.fromDom)}function be(e,n){for(var t=ze(n)?n:s,r=e.dom(),o=[];null!==r.parentNode&&r.parentNode!==undefined;){var i=r.parentNode,u=on.fromDom(i);if(o.push(u),!0===t(u))break;r=i}return o}function we(e){return Me.from(e.dom().previousSibling).map(on.fromDom)}function ye(e){return Me.from(e.dom().nextSibling).map(on.fromDom)}function Ce(e){return g(e.dom().childNodes,on.fromDom)}function Se(e,n){var t=e.dom().childNodes;return Me.from(t[n]).map(on.fromDom)}function xe(n,t){ve(n).each(function(e){e.dom().insertBefore(t.dom(),n.dom())})}function Re(e,n){ye(e).fold(function(){ve(e).each(function(e){Mn(e,n)})},function(e){xe(e,n)})}function Te(n,t){(function(e){return Se(e,0)})(n).fold(function(){Mn(n,t)},function(e){n.dom().insertBefore(t.dom(),e.dom())})}function Oe(e,n){xe(e,n),Mn(n,e)}function De(r,o){p(o,function(e,n){var t=0===n?r:o[n-1];Re(t,e)})}function Ae(n,e){p(e,function(e){Mn(n,e)})}function Ee(e){e.dom().textContent="",p(Ce(e),function(e){Wn(e)})}function Ne(e){var n=Ce(e);0<n.length&&function(n,e){p(e,function(e){xe(n,e)})}(e,n),Wn(e)}function ke(e,n,t){return function(e,n,t){return h(be(e,t),n)}(e,function(e){return ge(e,n)},t)}function Ie(e,n){return function(e,n){return h(Ce(e),n)}(e,function(e){return ge(e,n)})}function Be(e,n){return function(e,n){var t=n===undefined?f.document:n.dom();return pe(t)?[]:g(t.querySelectorAll(e),on.fromDom)}(n,e)}var Pe=function(t){function e(){return o}function n(e){return e(t)}var r=D(t),o={fold:function(e,n){return n(t)},is:function(e){return t===e},isSome:i,isNone:s,getOr:r,getOrThunk:r,getOrDie:r,getOrNull:r,getOrUndefined:r,or:e,orThunk:e,map:function(e){return Pe(e(t))},each:function(e){e(t)},bind:n,exists:n,forall:n,filter:function(e){return e(t)?o:u},toArray:function(){return[t]},toString:function(){return"some("+t+")"},equals:function(e){return e.is(t)},equals_:function(e,n){return e.fold(s,function(e){return n(t,e)})}};return o},Me={some:Pe,none:e,from:function(e){return null===e||e===undefined?u:Pe(e)}},We=tinymce.util.Tools.resolve("tinymce.PluginManager"),_e=a("string"),Le=a("array"),je=a("boolean"),ze=a("function"),He=a("number"),Fe=Array.prototype.slice,Ue=Array.prototype.indexOf,qe=Array.prototype.push,Ve=(ze(Array.from)&&Array.from,Object.keys),Ge=Object.hasOwnProperty,Ye=function(e,r){var o={};return N(e,function(e,n){var t=r(e,n);o[t.k]=t.v}),o},Ke=function(e,n){return Ge.call(e,n)},Xe=function(o,i){var u=o.concat(i);if(0===u.length)throw new Error("You must specify at least one required or optional field.");return _("required",o),_("optional",i),L(u),function(n){var t=Ve(n);A(o,function(e){return l(t,e)})||M(o,t);var e=h(t,function(e){return!l(u,e)});0<e.length&&W(e);var r={};return p(o,function(e){r[e]=D(n[e])}),p(i,function(e){r[e]=D(Object.prototype.hasOwnProperty.call(n,e)?Me.some(n[e]):Me.none())}),r}},$e=(f.Node.ATTRIBUTE_NODE,f.Node.CDATA_SECTION_NODE,f.Node.COMMENT_NODE),Je=f.Node.DOCUMENT_NODE,Qe=(f.Node.DOCUMENT_TYPE_NODE,f.Node.DOCUMENT_FRAGMENT_NODE,f.Node.ELEMENT_NODE),Ze=f.Node.TEXT_NODE,en=(f.Node.PROCESSING_INSTRUCTION_NODE,f.Node.ENTITY_REFERENCE_NODE,f.Node.ENTITY_NODE,f.Node.NOTATION_NODE,"undefined"!=typeof f.window?f.window:Function("return this;")(),function(e){return e.dom().nodeName.toLowerCase()}),nn=z(Qe),tn=z(Ze),rn=function(e){if(null===e||e===undefined)throw new Error("Node cannot be null or undefined");return{dom:D(e)}},on={fromHtml:function(e,n){var t=(n||f.document).createElement("div");if(t.innerHTML=e,!t.hasChildNodes()||1<t.childNodes.length)throw f.console.error("HTML does not have a single root node",e),new Error("HTML must have a single root node");return rn(t.childNodes[0])},fromTag:function(e,n){var t=(n||f.document).createElement(e);return rn(t)},fromText:function(e,n){var t=(n||f.document).createTextNode(e);return rn(t)},fromDom:rn,fromPoint:function(e,n,t){var r=e.dom();return Me.from(r.elementFromPoint(n,t)).map(rn)}},un=Z(function(){return cn(on.fromDom(f.document))}),cn=function(e){var n=e.dom().body;if(null===n||n===undefined)throw new Error("Body is not available yet");return on.fromDom(n)},an=function(e,n){return Q(e)?e.style.getPropertyValue(n):""},ln=function(e,n){return ce(e,n,f.Node.DOCUMENT_POSITION_CONTAINED_BY)},fn=function(){return(fn=Object.assign||function(e){for(var n,t=1,r=arguments.length;t<r;t++)for(var o in n=arguments[t])Object.prototype.hasOwnProperty.call(n,o)&&(e[o]=n[o]);return e}).apply(this,arguments)},sn=function(){return dn(0,0)},dn=function(e,n){return{major:e,minor:n}},mn={nu:dn,detect:function(e,n){var t=String(n).toLowerCase();return 0===e.length?sn():ae(e,t)},unknown:sn},gn="Firefox",pn=function(e){var n=e.current;return{current:n,version:e.version,isEdge:le("Edge",n),isChrome:le("Chrome",n),isIE:le("IE",n),isOpera:le("Opera",n),isFirefox:le(gn,n),isSafari:le("Safari",n)}},hn={unknown:function(){return pn({current:undefined,version:mn.unknown()})},nu:pn,edge:D("Edge"),chrome:D("Chrome"),ie:D("IE"),opera:D("Opera"),firefox:D(gn),safari:D("Safari")},vn="Windows",bn="Android",wn="Solaris",yn="FreeBSD",Cn=function(e){var n=e.current;return{current:n,version:e.version,isWindows:fe(vn,n),isiOS:fe("iOS",n),isAndroid:fe(bn,n),isOSX:fe("OSX",n),isLinux:fe("Linux",n),isSolaris:fe(wn,n),isFreeBSD:fe(yn,n)}},Sn={unknown:function(){return Cn({current:undefined,version:mn.unknown()})},nu:Cn,windows:D(vn),ios:D("iOS"),android:D(bn),linux:D("Linux"),osx:D("OSX"),solaris:D(wn),freebsd:D(yn)},xn=function(e,t){return se(e,t).map(function(e){var n=mn.detect(e.versionRegexes,t);return{current:e.name,version:n}})},Rn=function(e,t){return se(e,t).map(function(e){var n=mn.detect(e.versionRegexes,t);return{current:e.name,version:n}})},Tn=/.*?version\/\ ?([0-9]+)\.([0-9]+).*/,On=[{name:"Edge",versionRegexes:[/.*?edge\/ ?([0-9]+)\.([0-9]+)$/],search:function(e){return $(e,"edge/")&&$(e,"chrome")&&$(e,"safari")&&$(e,"applewebkit")}},{name:"Chrome",versionRegexes:[/.*?chrome\/([0-9]+)\.([0-9]+).*/,Tn],search:function(e){return $(e,"chrome")&&!$(e,"chromeframe")}},{name:"IE",versionRegexes:[/.*?msie\ ?([0-9]+)\.([0-9]+).*/,/.*?rv:([0-9]+)\.([0-9]+).*/],search:function(e){return $(e,"msie")||$(e,"trident")}},{name:"Opera",versionRegexes:[Tn,/.*?opera\/([0-9]+)\.([0-9]+).*/],search:de("opera")},{name:"Firefox",versionRegexes:[/.*?firefox\/\ ?([0-9]+)\.([0-9]+).*/],search:de("firefox")},{name:"Safari",versionRegexes:[Tn,/.*?cpu os ([0-9]+)_([0-9]+).*/],search:function(e){return($(e,"safari")||$(e,"mobile/"))&&$(e,"applewebkit")}}],Dn=[{name:"Windows",search:de("win"),versionRegexes:[/.*?windows\ nt\ ?([0-9]+)\.([0-9]+).*/]},{name:"iOS",search:function(e){return $(e,"iphone")||$(e,"ipad")},versionRegexes:[/.*?version\/\ ?([0-9]+)\.([0-9]+).*/,/.*cpu os ([0-9]+)_([0-9]+).*/,/.*cpu iphone os ([0-9]+)_([0-9]+).*/]},{name:"Android",search:de("android"),versionRegexes:[/.*?android\ ?([0-9]+)\.([0-9]+).*/]},{name:"OSX",search:de("os x"),versionRegexes:[/.*?os\ x\ ?([0-9]+)_([0-9]+).*/]},{name:"Linux",search:de("linux"),versionRegexes:[]},{name:"Solaris",search:de("sunos"),versionRegexes:[]},{name:"FreeBSD",search:de("freebsd"),versionRegexes:[]}],An={browsers:D(On),oses:D(Dn)},En=R(function(e,n){var t=An.browsers(),r=An.oses(),o=xn(t,e).fold(hn.unknown,hn.nu),i=Rn(r,e).fold(Sn.unknown,Sn.nu);return{browser:o,os:i,deviceType:function(e,n,t,r){var o=e.isiOS()&&!0===/ipad/i.test(t),i=e.isiOS()&&!o,u=e.isiOS()||e.isAndroid(),c=u||r("(pointer:coarse)"),a=o||!i&&u&&r("(min-device-width:768px)"),l=i||u&&!a,f=n.isSafari()&&e.isiOS()&&!1===/safari/i.test(t),s=!l&&!a&&!f;return{isiPad:D(o),isiPhone:D(i),isTablet:D(a),isPhone:D(l),isTouch:D(c),isAndroid:e.isAndroid,isiOS:e.isiOS,isWebView:D(f),isDesktop:D(s)}}(i,o,e,n)}}(f.navigator.userAgent,function(e){return f.window.matchMedia(e).matches})),Nn=Qe,kn=Je,In=function(e,n){return e.dom()===n.dom()},Bn=me().browser.isIE()?function(e,n){return ln(e.dom(),n.dom())}:function(e,n){var t=e.dom(),r=n.dom();return t!==r&&t.contains(r)},Pn=ge,Mn=(B("element","offset"),function(e,n){e.dom().appendChild(n.dom())}),Wn=function(e){var n=e.dom();null!==n.parentNode&&n.parentNode.removeChild(n)},_n=(B("width","height"),B("width","height"),B("rows","columns")),Ln=B("row","column"),jn=(B("x","y"),B("element","rowspan","colspan")),zn=B("element","rowspan","colspan","isNew"),Hn=B("element","rowspan","colspan","row","column"),Fn=B("element","cells","section"),Un=B("element","isNew"),qn=B("element","cells","section","isNew"),Vn=B("cells","section"),Gn=B("details","section"),Yn=B("startRow","startCol","finishRow","finishCol"),Kn=function(e,n){var t=[];return p(Ce(e),function(e){n(e)&&(t=t.concat([e])),t=t.concat(Kn(e,n))}),t};function Xn(e,n,t,r,o){return e(t,r)?Me.some(t):ze(o)&&o(t)?Me.none():n(t,r,o)}function $n(e,n,t){for(var r=e.dom(),o=ze(t)?t:D(!1);r.parentNode;){r=r.parentNode;var i=on.fromDom(r);if(n(i))return Me.some(i);if(o(i))break}return Me.none()}function Jn(e,n,t){return $n(e,function(e){return ge(e,n)},t)}function Qn(e,n){return function(e,n){return y(e.dom().childNodes,function(e){return n(on.fromDom(e))}).map(on.fromDom)}(e,function(e){return ge(e,n)})}function Zn(e,n){return function(e,n){var t=n===undefined?f.document:n.dom();return pe(t)?Me.none():Me.from(t.querySelector(e)).map(on.fromDom)}(n,e)}function et(e,n,t){return Xn(ge,Jn,e,n,t)}function nt(e,n,t){return void 0===t&&(t=s),t(n)?Me.none():l(e,en(n))?Me.some(n):Jn(n,e.join(","),function(e){return ge(e,"table")||t(e)})}function tt(n,e){return ve(e).map(function(e){return Ie(e,n)})}function rt(e,n){return parseInt(V(e,n),10)}function ot(e,n){return e+","+n}var it=function(e,n,t){return x(Ce(e),function(e){return ge(e,n)?t(e)?[e]:[]:it(e,n,t)})},ut={firstLayer:function(e,n){return it(e,n,D(!0))},filterFirstLayer:it},ct=b(tt,"th,td"),at=b(tt,"tr"),lt={cell:function(e,n){return nt(["td","th"],e,n)},firstCell:function(e){return Zn(e,"th,td")},cells:function(e){return ut.firstLayer(e,"th,td")},neighbourCells:ct,table:function(e,n){return et(e,"table",n)},row:function(e,n){return nt(["tr"],e,n)},rows:function(e){return ut.firstLayer(e,"tr")},notCell:function(e,n){return nt(["caption","tr","tbody","tfoot","thead"],e,n)},neighbourRows:at,attr:rt,grid:function(e,n,t){var r=rt(e,n),o=rt(e,t);return _n(r,o)}},ft=function(e){var n=lt.rows(e);return g(n,function(e){var n=e,t=ve(n).map(function(e){var n=en(e);return"tfoot"===n||"thead"===n||"tbody"===n?n:"tbody"}).getOr("tbody"),r=g(lt.cells(e),function(e){var n=G(e,"rowspan")?parseInt(V(e,"rowspan"),10):1,t=G(e,"colspan")?parseInt(V(e,"colspan"),10):1;return jn(e,n,t)});return Fn(n,r,t)})},st=function(e,t){return g(e,function(e){var n=g(lt.cells(e),function(e){var n=G(e,"rowspan")?parseInt(V(e,"rowspan"),10):1,t=G(e,"colspan")?parseInt(V(e,"colspan"),10):1;return jn(e,n,t)});return Fn(e,n,t.section())})},dt=function(e,n){var t=x(e.all(),function(e){return e.cells()});return h(t,n)},mt={generate:function(e){var l={},n=[],t=e.length,f=0;p(e,function(e,c){var a=[];p(e.cells(),function(e){for(var n=0;l[ot(c,n)]!==undefined;)n++;for(var t=Hn(e.element(),e.rowspan(),e.colspan(),c,n),r=0;r<e.colspan();r++)for(var o=0;o<e.rowspan();o++){var i=n+r,u=ot(c+o,i);l[u]=t,f=Math.max(f,i+1)}a.push(t)}),n.push(Fn(e.element(),a,e.section()))});var r=_n(t,f);return{grid:D(r),access:D(l),all:D(n)}},getAt:function(e,n,t){var r=e.access()[ot(n,t)];return r!==undefined?Me.some(r):Me.none()},findItem:function(e,n,t){var r=dt(e,function(e){return t(n,e.element())});return 0<r.length?Me.some(r[0]):Me.none()},filterItems:dt,justCells:function(e){var n=g(e.all(),function(e){return e.cells()});return S(n)}},gt=B("minRow","minCol","maxRow","maxCol"),pt=function(e,n){function t(e){return ge(e.element(),n)}var r=ft(e),o=mt.generate(r),i=function(e,i){var n=e.grid().columns(),u=e.grid().rows(),c=n,a=0,l=0;return N(e.access(),function(e){if(i(e)){var n=e.row(),t=n+e.rowspan()-1,r=e.column(),o=r+e.colspan()-1;n<u?u=n:a<t&&(a=t),r<c?c=r:l<o&&(l=o)}}),gt(u,c,a,l)}(o,t),u="th:not("+n+"),td:not("+n+")",c=ut.filterFirstLayer(e,"th,td",function(e){return ge(e,u)});return p(c,Wn),function(e,n,t,r){for(var o,i,u,c=n.grid().columns(),a=n.grid().rows(),l=0;l<a;l++)for(var f=!1,s=0;s<c;s++){if(!(l<t.minRow()||l>t.maxRow()||s<t.minCol()||s>t.maxCol()))mt.getAt(n,l,s).filter(r).isNone()?(o=f,void 0,i=e[l].element(),u=on.fromTag("td"),Mn(u,on.fromTag("br")),(o?Mn:Te)(i,u)):f=!0}}(r,o,i,t),function(e,n){var t=h(ut.firstLayer(e,"tr"),function(e){return 0===e.dom().childElementCount});p(t,Wn),n.minCol()!==n.maxCol()&&n.minRow()!==n.maxRow()||p(ut.firstLayer(e,"th,td"),function(e){Y(e,"rowspan"),Y(e,"colspan")}),Y(e,"width"),Y(e,"height"),ue(e,"width"),ue(e,"height")}(e,i),e};function ht(e){return Bt.get(e)}function vt(e){return Bt.getOption(e)}function bt(e,n){Bt.set(e,n)}function wt(e){return"img"===en(e)?1:vt(e).fold(function(){return Ce(e).length},function(e){return e.length})}function yt(e){return function(e){return vt(e).filter(function(e){return 0!==e.trim().length||-1<e.indexOf("\xa0")}).isSome()}(e)||l(Pt,en(e))}function Ct(e){return function(e,o){var i=function(e){for(var n=0;n<e.childNodes.length;n++){var t=on.fromDom(e.childNodes[n]);if(o(t))return Me.some(t);var r=i(e.childNodes[n]);if(r.isSome())return r}return Me.none()};return i(e.dom())}(e,yt)}function St(e){return Mt(e,yt)}function xt(e,n){return on.fromDom(e.dom().cloneNode(n))}function Rt(e){return xt(e,!1)}function Tt(e){return xt(e,!0)}function Ot(e,n){var t=function(e,n){var t=on.fromTag(n),r=K(e);return q(t,r),t}(e,n),r=Ce(Tt(e));return Ae(t,r),t}function Dt(){var e=on.fromTag("td");return Mn(e,on.fromTag("br")),e}function At(e,n,t){var r=Ot(e,n);return N(t,function(e,n){null===e?Y(r,n):U(r,n,e)}),r}function Et(e){return e}function Nt(e){return function(){return on.fromTag("tr",e.dom())}}function kt(e,n){return n.column()>=e.startCol()&&n.column()+n.colspan()-1<=e.finishCol()&&n.row()>=e.startRow()&&n.row()+n.rowspan()-1<=e.finishRow()}function It(e,n,t){var r=mt.findItem(e,n,In),o=mt.findItem(e,t,In);return r.bind(function(n){return o.map(function(e){return function(e,n){return Yn(Math.min(e.row(),n.row()),Math.min(e.column(),n.column()),Math.max(e.row()+e.rowspan()-1,n.row()+n.rowspan()-1),Math.max(e.column()+e.colspan()-1,n.column()+n.colspan()-1))}(n,e)})})}var Bt=function Qf(t,r){var n=function(e){return t(e)?Me.from(e.dom().nodeValue):Me.none()};return{get:function(e){if(!t(e))throw new Error("Can only get "+r+" value of a "+r+" node");return n(e).getOr("")},getOption:n,set:function(e,n){if(!t(e))throw new Error("Can only set raw "+r+" value of a "+r+" node");e.dom().nodeValue=n}}}(tn,"text"),Pt=["img","br"],Mt=function(e,i){var u=function(e){for(var n=Ce(e),t=n.length-1;0<=t;t--){var r=n[t];if(i(r))return Me.some(r);var o=u(r);if(o.isSome())return o}return Me.none()};return u(e)},Wt={cellOperations:function(i,e,u){return{row:Nt(e),cell:function(e){var n=he(e.element()),t=on.fromTag(en(e.element()),n.dom()),r=u.getOr(["strong","em","b","i","span","font","h1","h2","h3","h4","h5","h6","p","div"]),o=0<r.length?function(r,o,i){return Ct(r).map(function(e){var n=i.join(","),t=ke(e,n,function(e){return In(e,r)});return v(t,function(e,n){var t=Rt(n);return Y(t,"contenteditable"),Mn(e,t),t},o)}).getOr(o)}(e.element(),t,r):t;return Mn(o,on.fromTag("br")),function(e,n){var t=e.dom(),r=n.dom();Q(t)&&Q(r)&&(r.style.cssText=t.style.cssText)}(e.element(),t),ue(t,"height"),1!==e.colspan()&&ue(e.element(),"width"),i(e.element(),t),t},replace:At,gap:Dt}},paste:function(e){return{row:Nt(e),cell:Dt,replace:Et,gap:Dt}}},_t=function(e,n){var t=n.column(),r=n.column()+n.colspan()-1,o=n.row(),i=n.row()+n.rowspan()-1;return t<=e.finishCol()&&r>=e.startCol()&&o<=e.finishRow()&&i>=e.startRow()},Lt=function(e,n){for(var t=!0,r=b(kt,n),o=n.startRow();o<=n.finishRow();o++)for(var i=n.startCol();i<=n.finishCol();i++)t=t&&mt.getAt(e,o,i).exists(r);return t?Me.some(n):Me.none()},jt=It,zt=function(n,e,t){return It(n,e,t).bind(function(e){return Lt(n,e)})},Ht=function(r,e,o,i){return mt.findItem(r,e,In).bind(function(e){var n=0<o?e.row()+e.rowspan()-1:e.row(),t=0<i?e.column()+e.colspan()-1:e.column();return mt.getAt(r,n+o,t+i).map(function(e){return e.element()})})},Ft=function(t,e,n){return jt(t,e,n).map(function(e){var n=mt.filterItems(t,b(_t,e));return g(n,function(e){return e.element()})})},Ut=function(e,n){return mt.findItem(e,n,function(e,n){return Bn(n,e)}).map(function(e){return e.element()})},qt=function(e){var n=ft(e);return mt.generate(n)},Vt=function(t,r,o){return lt.table(t).bind(function(e){var n=qt(e);return Ht(n,t,r,o)})},Gt=function(e,n,t){var r=qt(e);return Ft(r,n,t)},Yt=function(e,n,t,r,o){var i=qt(e),u=In(e,t)?Me.some(n):Ut(i,n),c=In(e,o)?Me.some(r):Ut(i,r);return u.bind(function(n){return c.bind(function(e){return Ft(i,n,e)})})},Kt=function(e,n,t){var r=qt(e);return zt(r,n,t)},Xt=["body","p","div","article","aside","figcaption","figure","footer","header","nav","section","ol","ul","li","table","thead","tbody","tfoot","caption","tr","td","th","h1","h2","h3","h4","h5","h6","blockquote","pre","address"];function $t(){return{up:D({selector:Jn,closest:et,predicate:$n,all:be}),down:D({selector:Be,predicate:Kn}),styles:D({get:oe,getRaw:ie,set:te,remove:ue}),attrs:D({get:V,set:U,remove:Y,copyTo:function(e,n){var t=K(e);q(n,t)}}),insert:D({before:xe,after:Re,afterAll:De,append:Mn,appendAll:Ae,prepend:Te,wrap:Oe}),remove:D({unwrap:Ne,remove:Wn}),create:D({nu:on.fromTag,clone:function(e){return on.fromDom(e.dom().cloneNode(!1))},text:on.fromText}),query:D({comparePosition:function(e,n){return e.dom().compareDocumentPosition(n.dom())},prevSibling:we,nextSibling:ye}),property:D({children:Ce,name:en,parent:ve,document:function(e){return e.dom().ownerDocument},isText:tn,isComment:H,isElement:nn,getText:ht,setText:bt,isBoundary:function(e){return!!nn(e)&&("body"===en(e)||l(Xt,en(e)))},isEmptyTag:function(e){return!!nn(e)&&l(["br","img","hr","input"],en(e))}}),eq:In,is:Pn}}function Jt(e,n,t){var r=e.property().children(n);return C(r,b(e.eq,t)).map(function(e){return{before:D(r.slice(0,e)),after:D(r.slice(e+1))}})}function Qt(e,n){return b(e.eq,n)}function Zt(n,e,t,r){function o(n){return C(n,r).fold(function(){return n},function(e){return n.slice(0,e+1)})}void 0===r&&(r=s);var i=[e].concat(n.up().all(e)),u=[t].concat(n.up().all(t)),c=o(i),a=o(u),l=y(c,function(e){return m(a,Qt(n,e))});return{firstpath:D(c),secondpath:D(a),shared:D(l)}}function er(e){return Jn(e,"table")}function nr(c,a,r){function l(n){return function(e){return r!==undefined&&r(e)||In(e,n)}}return In(c,a)?Me.some(sr.create({boxes:Me.some([c]),start:c,finish:a})):er(c).bind(function(u){return er(a).bind(function(i){if(In(u,i))return Me.some(sr.create({boxes:Gt(u,c,a),start:c,finish:a}));if(Bn(u,i)){var e=0<(n=ke(a,"td,th",l(u))).length?n[n.length-1]:a;return Me.some(sr.create({boxes:Yt(u,c,u,a,i),start:c,finish:e}))}if(Bn(i,u)){var n,t=0<(n=ke(c,"td,th",l(i))).length?n[n.length-1]:c;return Me.some(sr.create({boxes:Yt(i,c,u,a,i),start:c,finish:t}))}return fr.ancestors(c,a).shared().bind(function(e){return et(e,"table",r).bind(function(e){var n=ke(a,"td,th",l(e)),t=0<n.length?n[n.length-1]:a,r=ke(c,"td,th",l(e)),o=0<r.length?r[r.length-1]:c;return Me.some(sr.create({boxes:Yt(e,c,u,a,i),start:o,finish:t}))})})})})}function tr(e,n){return Rr.cata(n.get(),D([]),o,D([e]))}function rr(e){return{element:D(e),mergable:Me.none,unmergable:Me.none,selection:D([e])}}var or=B("left","right"),ir=B("first","second","splits"),ur=function(r,o,e,n){var t=o(r,e);return v(n,function(e,n){var t=o(r,n);return cr(r,e,t)},t)},cr=function(n,e,t){return e.bind(function(e){return t.filter(b(n.eq,e))})},ar={sharedOne:function(e,n,t){return 0<t.length?function(e,n,t,r){return r(e,n,t[0],t.slice(1))}(e,n,t,ur):Me.none()},subset:function(n,e,t){var r=Zt(n,e,t);return r.shared().bind(function(e){return function(o,i,e,n){var u=o.property().children(i);if(o.eq(i,e[0]))return Me.some([e[0]]);if(o.eq(i,n[0]))return Me.some([n[0]]);function t(e){var n=E(e),t=C(n,Qt(o,i)).getOr(-1),r=t<n.length-1?n[t+1]:n[t];return C(u,Qt(o,r))}var r=t(e),c=t(n);return r.bind(function(r){return c.map(function(e){var n=Math.min(r,e),t=Math.max(r,e);return u.slice(n,t+1)})})}(n,e,r.firstpath(),r.secondpath())})},ancestors:Zt,breakToLeft:function(t,r,o){return Jt(t,r,o).map(function(e){var n=t.create().clone(r);return t.insert().appendAll(n,e.before().concat([o])),t.insert().appendAll(r,e.after()),t.insert().before(r,n),or(n,r)})},breakToRight:function(t,r,e){return Jt(t,r,e).map(function(e){var n=t.create().clone(r);return t.insert().appendAll(n,e.after()),t.insert().after(r,n),or(r,n)})},breakPath:function(i,e,u,c){var a=function(e,n,o){var t=ir(e,Me.none(),o);return u(e)?ir(e,n,o):i.property().parent(e).bind(function(r){return c(i,r,e).map(function(e){var n=[{first:e.left,second:e.right}],t=u(r)?r:e.left();return a(t,Me.some(e.right()),o.concat(n))})}).getOr(t)};return a(e,Me.none(),[])}},lr=$t(),fr={sharedOne:function(t,e){return ar.sharedOne(lr,function(e,n){return t(n)},e)},subset:function(e,n){return ar.subset(lr,e,n)},ancestors:function(e,n,t){return ar.ancestors(lr,e,n,t)},breakToLeft:function(e,n){return ar.breakToLeft(lr,e,n)},breakToRight:function(e,n){return ar.breakToRight(lr,e,n)},breakPath:function(e,n,r){return ar.breakPath(lr,e,n,function(e,n,t){return r(n,t)})}},sr={create:Xe(["boxes","start","finish"],[])},dr=nr,mr=function(e,n){var t=Be(e,n);return 0<t.length?Me.some(t):Me.none()},gr=function(e,n,t,r,o){return function(e,n){return y(e,function(e){return ge(e,n)})}(e,o).bind(function(e){return Vt(e,n,t).bind(function(e){return function(n,t){return Jn(n,"table").bind(function(e){return Zn(e,t).bind(function(e){return nr(e,n).bind(function(n){return n.boxes().map(function(e){return{boxes:D(e),start:D(n.start()),finish:D(n.finish())}})})})})}(e,r)})})},pr=function(e,n,r){return Zn(e,n).bind(function(t){return Zn(e,r).bind(function(n){return fr.sharedOne(er,[t,n]).map(function(e){return{first:D(t),last:D(n),table:D(e)}})})})},hr=function(e,n){return mr(e,n)},vr=function(o,e,n){return pr(o,e,n).bind(function(t){function e(e){return In(o,e)}var n=Jn(t.first(),"thead,tfoot,tbody,table",e),r=Jn(t.last(),"thead,tfoot,tbody,table",e);return n.bind(function(n){return r.bind(function(e){return In(n,e)?Kt(t.table(),t.first(),t.last()):Me.none()})})})},br="data-mce-selected",wr="data-mce-first-selected",yr="data-mce-last-selected",Cr={selected:D(br),selectedSelector:D("td[data-mce-selected],th[data-mce-selected]"),attributeSelector:D("[data-mce-selected]"),firstSelected:D(wr),firstSelectedSelector:D("td[data-mce-first-selected],th[data-mce-first-selected]"),lastSelected:D(yr),lastSelectedSelector:D("td[data-mce-last-selected],th[data-mce-last-selected]")},Sr=function(u){if(!Le(u))throw new Error("cases must be an array");if(0===u.length)throw new Error("there must be at least one case");var c=[],t={};return p(u,function(e,r){var n=Ve(e);if(1!==n.length)throw new Error("one and only one name per case");var o=n[0],i=e[o];if(t[o]!==undefined)throw new Error("duplicate key detected:"+o);if("cata"===o)throw new Error("cannot have a case named cata (sorry)");if(!Le(i))throw new Error("case arguments must be an array");c.push(o),t[o]=function(){var e=arguments.length;if(e!==i.length)throw new Error("Wrong number of arguments to case "+o+". Expected "+i.length+" ("+i+"), got "+e);for(var t=new Array(e),n=0;n<t.length;n++)t[n]=arguments[n];return{fold:function(){if(arguments.length!==u.length)throw new Error("Wrong number of arguments to fold. Expected "+u.length+", got "+arguments.length);return arguments[r].apply(null,t)},match:function(e){var n=Ve(e);if(c.length!==n.length)throw new Error("Wrong number of arguments to match. Expected: "+c.join(",")+"\nActual: "+n.join(","));if(!A(c,function(e){return l(n,e)}))throw new Error("Not all branches were specified when using match. Specified: "+n.join(", ")+"\nRequired: "+c.join(", "));return e[o].apply(null,t)},log:function(e){f.console.log(e,{constructors:c,constructor:o,params:t})}}}}),t},xr=Sr([{none:[]},{multiple:["elements"]},{single:["selection"]}]),Rr={cata:function(e,n,t,r){return e.fold(n,t,r)},none:xr.none,multiple:xr.multiple,single:xr.single},Tr=function(t,e){return Rr.cata(e.get(),Me.none,function(n,e){return 0===n.length?Me.none():vr(t,Cr.firstSelectedSelector(),Cr.lastSelectedSelector()).bind(function(e){return 1<n.length?Me.some({bounds:D(e),cells:D(n)}):Me.none()})},Me.none)},Or=function(e,n){var t=tr(e,n);return 0<t.length&&A(t,function(e){return G(e,"rowspan")&&1<parseInt(V(e,"rowspan"),10)||G(e,"colspan")&&1<parseInt(V(e,"colspan"),10)})?Me.some(t):Me.none()},Dr=tr,Ar=B("element","clipboard","generators"),Er={noMenu:rr,forMenu:function(e,n,t){return{element:D(t),mergable:D(Tr(n,e)),unmergable:D(Or(t,e)),selection:D(Dr(t,e))}},notCell:function(e){return rr(e)},paste:Ar,pasteRows:function(e,n,t,r,o){return{element:D(t),mergable:Me.none,unmergable:Me.none,selection:D(Dr(t,e)),clipboard:D(r),generators:D(o)}}},Nr={registerEvents:function(c,e,a,l){c.on("BeforeGetContent",function(n){!0===n.selection&&Rr.cata(e.get(),T,function(e){n.preventDefault(),function(e){return lt.table(e[0]).map(Tt).map(function(e){return[pt(e,Cr.attributeSelector())]})}(e).each(function(e){n.content="text"===n.format?function(e){return g(e,function(e){return e.dom().innerText}).join("")}(e):function(n,e){return g(e,function(e){return n.selection.serializer.serialize(e.dom(),{})}).join("")}(c,e)})},T)}),c.on("BeforeSetContent",function(u){!0===u.selection&&!0===u.paste&&Me.from(c.dom.getParent(c.selection.getStart(),"th,td")).each(function(e){var i=on.fromDom(e);lt.table(i).each(function(n){var e=h(function(e,n){var t=(n||f.document).createElement("div");return t.innerHTML=e,Ce(on.fromDom(t))}(u.content),function(e){return"meta"!==en(e)});if(1===e.length&&"table"===en(e[0])){u.preventDefault();var t=on.fromDom(c.getDoc()),r=Wt.paste(t),o=Er.paste(i,e[0],r);a.pasteCells(n,o).each(function(e){c.selection.setRng(e),c.focus(),l.clear(n)})}})})})}};function kr(r,o){function e(e){var n=o(e);if(n<=0||null===n){var t=oe(e,r);return parseFloat(t)||0}return n}function i(o,e){return w(e,function(e,n){var t=oe(o,n),r=t===undefined?0:parseInt(t,10);return isNaN(r)?e:e+r},0)}return{set:function(e,n){if(!He(n)&&!n.match(/^[0-9]+$/))throw new Error(r+".set accepts only positive integer values. Value was "+n);var t=e.dom();Q(t)&&(t.style[r]=n+"px")},get:e,getOuter:e,aggregate:i,max:function(e,n,t){var r=i(e,t);return r<n?n-r:0}}}function Ir(e){return Qr.get(e)}function Br(e){return Qr.getOuter(e)}function Pr(e){return Zr.get(e)}function Mr(e){return Zr.getOuter(e)}function Wr(e,n,t){return function(e,n){var t=parseFloat(e);return isNaN(t)?n:t}(oe(e,n),t)}function _r(e,n){te(e,"height",n+"px")}function Lr(e,n,t,r){var o=parseInt(e,10);return function(e,n){return X(e,n,e.length-n.length)}(e,"%")&&"table"!==en(n)?function(e,t,r,n){var o=lt.table(e).map(function(e){var n=r(e);return Math.floor(t/100*n)}).getOr(t);return n(e,o),o}(n,o,t,r):o}function jr(e){var n=function(e){return ie(e,"height").getOrThunk(function(){return no(e)+"px"})}(e);return n?Lr(n,e,Ir,_r):Ir(e)}function zr(e){return ie(e,"width").fold(function(){return Me.from(V(e,"width"))},function(e){return Me.some(e)})}function Hr(e,n){return e/n.pixelWidth()*100}function Fr(e,n){return e!==undefined?e:n!==undefined?n:0}function Ur(e){var n=e.dom().ownerDocument,t=n.body,r=n.defaultView,o=n.documentElement;if(t===e.dom())return lo(t.offsetLeft,t.offsetTop);var i=Fr(r.pageYOffset,o.scrollTop),u=Fr(r.pageXOffset,o.scrollLeft),c=Fr(o.clientTop,t.clientTop),a=Fr(o.clientLeft,t.clientLeft);return fo(e).translate(u-a,i-c)}function qr(e){return Ur(e).left()+Mr(e)}function Vr(e){return Ur(e).left()}function Gr(e,n){return mo(e,Vr(n))}function Yr(e,n){return mo(e,qr(n))}function Kr(e){return Ur(e).top()}function Xr(e,n){return so(e,Kr(n))}function $r(e,n){return so(e,Kr(n)+Br(n))}function Jr(t,n,r){if(0===r.length)return[];var e=g(r.slice(1),function(e,n){return e.map(function(e){return t(n,e)})}),o=r[r.length-1].map(function(e){return n(r.length-1,e)});return e.concat([o])}var Qr=kr("height",function(e){var n=e.dom();return ee(e)?n.getBoundingClientRect().height:n.offsetHeight}),Zr=kr("width",function(e){return e.dom().offsetWidth}),eo=me(),no=function(e){return eo.browser.isIE()||eo.browser.isEdge()?function(e){var n=Wr(e,"padding-top",0),t=Wr(e,"padding-bottom",0),r=Wr(e,"border-top-width",0),o=Wr(e,"border-bottom-width",0),i=e.dom().getBoundingClientRect().height;return"border-box"===oe(e,"box-sizing")?i:i-n-t-(r+o)}(e):Wr(e,"height",Ir(e))},to=/(\d+(\.\d+)?)(\w|%)*/,ro=/(\d+(\.\d+)?)%/,oo=/(\d+(\.\d+)?)px|em/,io=function(e,n){return G(e,n)?parseInt(V(e,n),10):1},uo={percentageBasedSizeRegex:D(ro),pixelBasedSizeRegex:D(oo),setPixelWidth:function(e,n){te(e,"width",n+"px")},setPercentageWidth:function(e,n){te(e,"width",n+"%")},setHeight:_r,getPixelWidth:function(n,t){return zr(n).fold(function(){return Pr(n)},function(e){return function(e,n,t){var r=oo.exec(n);if(null!==r)return parseInt(r[1],10);var o=ro.exec(n);return null===o?Pr(e):function(e,n){return e/100*n.pixelWidth()}(parseFloat(o[1]),t)}(n,e,t)})},getPercentageWidth:function(n,t){return zr(n).fold(function(){var e=Pr(n);return Hr(e,t)},function(e){return function(e,n,t){var r=ro.exec(n);if(null!==r)return parseFloat(r[1]);var o=Pr(e);return Hr(o,t)}(n,e,t)})},getGenericWidth:function(e){return zr(e).bind(function(e){var n=to.exec(e);return null!==n?Me.some({width:D(parseFloat(n[1])),unit:D(n[3])}):Me.none()})},setGenericWidth:function(e,n,t){te(e,"width",n+t)},getHeight:function(e){return function(e,n,t){return t(e)/io(e,n)}(e,"rowspan",jr)},getRawWidth:zr},co=function(t,r){uo.getGenericWidth(t).each(function(e){var n=e.width()/2;uo.setGenericWidth(t,n,e.unit()),uo.setGenericWidth(r,n,e.unit())})},ao=function(t,r){return{left:D(t),top:D(r),translate:function(e,n){return ao(t+e,r+n)}}},lo=ao,fo=function(e){var n=e.dom(),t=n.ownerDocument.body;return t===n?lo(t.offsetLeft,t.offsetTop):ee(e)?function(e){var n=e.getBoundingClientRect();return lo(n.left,n.top)}(n):lo(0,0)},so=B("row","y"),mo=B("col","x"),go={height:{delta:o,positions:function(e){return Jr(Xr,$r,e)},edge:Kr},rtl:{delta:function(e){return-e},edge:qr,positions:function(e){return Jr(Yr,Gr,e)}},ltr:{delta:o,edge:Vr,positions:function(e){return Jr(Gr,Yr,e)}}},po={ltr:go.ltr,rtl:go.rtl};function ho(n){function t(e){return n(e).isRtl()?po.rtl:po.ltr}return{delta:function(e,n){return t(n).delta(e,n)},edge:function(e){return t(e).edge(e)},positions:function(e,n){return t(n).positions(e,n)}}}function vo(e){for(var n=[],t=function(e){n.push(e)},r=0;r<e.length;r++)e[r].each(t);return n}function bo(e,n){for(var t=0;t<e.length;t++){var r=n(e[t],t);if(r.isSome())return r}return Me.none()}function wo(e,n,t,r){t===r?Y(e,n):U(e,n,t)}function yo(e,n){var t=V(e,n);return t===undefined||""===t?[]:t.split(" ")}function Co(e){return e.dom().classList!==undefined}function So(e,n){return function(e,n,t){var r=yo(e,n).concat([t]);return U(e,n,r.join(" ")),!0}(e,"class",n)}function xo(e,n){return function(e,n,t){var r=h(yo(e,n),function(e){return e!==t});return 0<r.length?U(e,n,r.join(" ")):Y(e,n),!1}(e,"class",n)}function Ro(e,n){Co(e)?e.dom().classList.add(n):So(e,n)}function To(e){0===(Co(e)?e.dom().classList:function(e){return yo(e,"class")}(e)).length&&Y(e,"class")}function Oo(e,n){return Co(e)&&e.dom().classList.contains(n)}function Do(e,n){for(var t=[],r=e;r<n;r++)t.push(r);return t}function Ao(n,t){if(t<0||t>=n.length-1)return Me.none();var e=n[t].fold(function(){var e=E(n.slice(0,t));return bo(e,function(e,n){return e.map(function(e){return{value:e,delta:n+1}})})},function(e){return Me.some({value:e,delta:0})}),r=n[t+1].fold(function(){var e=n.slice(t+1);return bo(e,function(e,n){return e.map(function(e){return{value:e,delta:n+1}})})},function(e){return Me.some({value:e,delta:1})});return e.bind(function(t){return r.map(function(e){var n=e.delta+t.delta;return Math.abs(e.value-t.value)/n})})}function Eo(e){var n=e.replace(/\./g,"-");return{resolve:function(e){return n+"-"+e}}}function No(e){var n=Be(e.parent(),"."+iu);p(n,Wn)}function ko(t,e,r){var o=t.origin();p(e,function(e,n){e.each(function(e){var n=r(o,e);Ro(n,iu),Mn(t.parent(),n)})})}function Io(e,n,t,r,o,i){var u=Ur(n);!function(e,n,r,o){ko(e,n,function(e,n){var t=ou(n.row(),r.left()-e.left(),n.y()-e.top(),o,7);return Ro(t,uu),t})}(e,0<t.length?o.positions(t,n):[],u,Mr(n)),function(e,n,r,o){ko(e,n,function(e,n){var t=ru(n.col(),n.x()-e.left(),r.top()-e.top(),7,o);return Ro(t,cu),t})}(e,0<r.length?i.positions(r,n):[],u,Br(n))}function Bo(e,n){var t=Be(e.parent(),"."+iu);p(t,n)}function Po(e,n){return e.cells()[n]}function Mo(e,n){if(0===e.length)return 0;var t=e[0];return C(e,function(e){return!n(t.element(),e.element())}).fold(function(){return e.length},function(e){return e})}function Wo(e,t){return g(e,function(e){var n=function(e){return bo(e,function(e){return ve(e.element()).map(function(e){var n=ve(e).isNone();return Un(e,n)})}).getOrThunk(function(){return Un(t.row(),!0)})}(e.details());return qn(n.element(),e.details(),e.section(),n.isNew())})}function _o(e,n){var t=vu(e,In);return Wo(t,n)}function Lo(e,n){var t=S(g(e.all(),function(e){return e.cells()}));return y(t,function(e){return In(n,e.element())})}function jo(c,a,l,f,s){return function(t,r,e,o,i){var n=ft(r),u=mt.generate(n);return a(u,e).map(function(e){var n=function(e,n){return bu(e,n,!1)}(u,o),t=c(n,e,In,s(o)),r=_o(t.grid(),o);return{grid:D(r),cursor:t.cursor}}).fold(function(){return Me.none()},function(e){var n=Ji(r,e.grid());return l(r,e.grid(),i),f(r),au(t,r,go.height,i),Me.some({cursor:e.cursor,newRows:n.newRows,newCells:n.newCells})})}}function zo(n,e){return lt.cell(e.element()).bind(function(e){return Lo(n,e)})}function Ho(n,e){var t=g(e.selection(),function(e){return lt.cell(e).bind(function(e){return Lo(n,e)})}),r=vo(t);return 0<r.length?Me.some({cells:r,generators:e.generators,clipboard:e.clipboard}):Me.none()}function Fo(n,e){var t=g(e.selection(),function(e){return lt.cell(e).bind(function(e){return Lo(n,e)})}),r=vo(t);return 0<r.length?Me.some(r):Me.none()}function Uo(e,n){return g(e,function(){return Un(n.cell(),!0)})}function qo(n,e,t){return n.concat(function(e,n){for(var t=[],r=0;r<e;r++)t.push(n(r));return t}(e,function(e){return pu.setCells(n[n.length-1],Uo(n[n.length-1].cells(),t))}))}function Vo(e,n,t){return g(e,function(e){return pu.setCells(e,e.cells().concat(Uo(Do(0,n),t)))})}function Go(e,t,r,n){return g(e,function(e){return pu.mapCells(e,function(e){return function(n){return m(t,function(e){return r(n.element(),e.element())})}(e)?Un(n(e.element(),r),!0):e})})}function Yo(e,n,t,r){return pu.getCellElement(e[n],t)!==undefined&&0<n&&r(pu.getCellElement(e[n-1],t),pu.getCellElement(e[n],t))}function Ko(e,n,t){return 0<n&&t(pu.getCellElement(e,n-1),pu.getCellElement(e,n))}function Xo(e,n){return G(e,n)&&1<parseInt(V(e,n),10)}function $o(e,n,t){return ie(e,n).fold(function(){return t(e)+"px"},function(e){return e})}function Jo(e,n){return $o(e,"width",function(e){return uo.getPixelWidth(e,n)})}function Qo(e){return $o(e,"height",uo.getHeight)}function Zo(e,n,t,r,o){var i=eu(e),u=g(i,function(e){return e.map(n.edge)});return g(i,function(e,n){return e.filter(d(Hu.hasColspan)).fold(function(){var e=Ao(u,n);return r(e)},function(e){return t(e,o)})})}function ei(e){return e.map(function(e){return e+"px"}).getOr("")}function ni(e,n,t,r){var o=nu(e),i=g(o,function(e){return e.map(n.edge)});return g(o,function(e,n){return e.filter(d(Hu.hasRowspan)).fold(function(){var e=Ao(i,n);return r(e)},function(e){return t(e)})})}function ti(e,n,t){for(var r=0,o=e;o<n;o++)r+=t[o]!==undefined?t[o]:0;return r}function ri(e){var n=o;return{width:D(e),pixelWidth:D(e),getWidths:Fu.getPixelWidths,getCellDelta:n,singleColumnWidth:function(e,n){return[Math.max(Hu.minWidth(),e+n)-e]},minCellWidth:Hu.minWidth,setElementWidth:uo.setPixelWidth,setTableWidth:function(e,n,t){var r=v(n,function(e,n){return e+n},0);uo.setPixelWidth(e,r)}}}function oi(e,n){var t=uo.percentageBasedSizeRegex().exec(n);if(null!==t)return function(e,n){var o=parseFloat(e),t=Pr(n);return{width:D(o),pixelWidth:D(t),getWidths:Fu.getPercentageWidths,getCellDelta:function(e){return e/t*100},singleColumnWidth:function(e,n){return[100-e]},minCellWidth:function(){return Hu.minWidth()/t*100},setElementWidth:uo.setPercentageWidth,setTableWidth:function(e,n,t){var r=t/100*o;uo.setPercentageWidth(e,o+r)}}}(t[1],e);var r=uo.pixelBasedSizeRegex().exec(n);if(null!==r){var o=parseInt(r[1],10);return ri(o)}var i=Pr(e);return ri(i)}function ii(e){return mt.generate(e)}function ui(e){var n=ft(e);return ii(n)}function ci(n,e){var t=h(e,function(e){return!l(n,e)});0<t.length&&W(t)}function ai(e){return function(e,n){return $u(e,n,{validate:ze,label:"function"})}(ci,e)}function li(e){var n=G(e,"colspan")?parseInt(V(e,"colspan"),10):1,t=G(e,"rowspan")?parseInt(V(e,"rowspan"),10):1;return{element:D(e),colspan:D(n),rowspan:D(t)}}function fi(e,n){var t=e.property().name(n);return l(nc,t)}function si(e,n){return l(["br","img","hr","input"],e.property().name(n))}function di(e){0===lt.cells(e).length&&Wn(e)}function mi(e,n,t){return sc(e,n,t).orThunk(function(){return sc(e,0,0)})}function gi(e,n,t){return fc(e,sc(e,n,t))}function pi(e){return w(e,function(e,n){return m(e,function(e){return e.row()===n.row()})?e:e.concat([n])},[]).sort(function(e,n){return e.row()-n.row()})}function hi(e){return w(e,function(e,n){return m(e,function(e){return e.column()===n.column()})?e:e.concat([n])},[]).sort(function(e,n){return e.column()-n.column()})}function vi(e,n,t){var r=st(e,t),o=mt.generate(r);return bu(o,n,!0)}function bi(e){return e.getBoundingClientRect().width}function wi(e){return e.getBoundingClientRect().height}function yi(e){return/^[0-9]+$/.test(e)&&(e+="px"),e}function Ci(e){var n=Be(e,"td[data-mce-style],th[data-mce-style]");Y(e,"data-mce-style"),p(n,function(e){Y(e,"data-mce-style")})}function Si(e){return e.getParam("table_default_attributes",yc,"object")}function xi(e){return e.getParam("table_default_styles",wc,"object")}function Ri(e){return e.getParam("table_cell_advtab",!0,"boolean")}function Ti(e){return e.getParam("table_row_advtab",!0,"boolean")}function Oi(e){return e.getParam("table_advtab",!0,"boolean")}function Di(e){return e.getParam("table_style_by_css",!1,"boolean")}function Ai(e){return e.getParam("table_class_list",[],"array")}function Ei(e){return!1===e.getParam("table_responsive_width")}function Ni(e,n){return e.fire("newrow",{node:n})}function ki(e,n){return e.fire("newcell",{node:n})}function Ii(e,n,t,r){e.fire("ObjectResizeStart",{target:n,width:t,height:r})}function Bi(e,n,t,r){e.fire("ObjectResized",{target:n,width:t,height:r})}function Pi(n,e){function t(e){return J(e,"rgb")?n.toHex(e):e}return{borderwidth:ie(on.fromDom(e),"border-width").getOr(""),borderstyle:ie(on.fromDom(e),"border-style").getOr(""),bordercolor:ie(on.fromDom(e),"border-color").map(t).getOr(""),backgroundcolor:ie(on.fromDom(e),"background-color").map(t).getOr("")}}function Mi(e,n,t,r,o){var i={};return Dc.each(e.split(" "),function(e){r.formatter.matchNode(o,n+e)&&(i[t]=e)}),i[t]||(i[t]=""),i}function Wi(e,n){e.setAttrib("scope",n.scope),e.setAttrib("class",n["class"]),e.setStyle("width",yi(n.width)),e.setStyle("height",yi(n.height))}function _i(e,n){e.setStyle("background-color",n.backgroundcolor),e.setStyle("border-color",n.bordercolor),e.setStyle("border-style",n.borderstyle),e.setStyle("border-width",yi(n.borderwidth))}function Li(e,n,t){var r=e.dom,o=t.celltype&&n[0].nodeName.toLowerCase()!==t.celltype?r.rename(n[0],t.celltype):n[0],i=qc.normal(r,o);Wi(i,t),Ri(e)&&_i(i,t),Nc(e,o),kc(e,o),t.halign&&Ac(e,o,t.halign),t.valign&&Ec(e,o,t.valign)}function ji(t,e,r){var o=t.dom;Dc.each(e,function(e){r.celltype&&e.nodeName.toLowerCase()!==r.celltype&&(e=o.rename(e,r.celltype));var n=qc.ifTruthy(o,e);Wi(n,r),Ri(t)&&_i(n,r),r.halign&&Ac(t,e,r.halign),r.valign&&Ec(t,e,r.valign)})}function zi(e,n,t){var r=t.getData();t.close(),e.undoManager.transact(function(){(1===n.length?Li:ji)(e,n,r),e.focus()})}function Hi(t,e,r,n){var o=t.dom,i=n.getData();n.close();var u=1===e.length?qc.normal:qc.ifTruthy;t.undoManager.transact(function(){Dc.each(e,function(e){i.type!==e.parentNode.nodeName.toLowerCase()&&function(e,n,t){var r=e.getParent(n,"table"),o=n.parentNode,i=e.select(t,r)[0];i||(i=e.create(t),r.firstChild?"CAPTION"===r.firstChild.nodeName?e.insertAfter(i,r.firstChild):r.insertBefore(i,r.firstChild):r.appendChild(i)),i.appendChild(n),o.hasChildNodes()||e.remove(o)}(t.dom,e,i.type);var n=u(o,e);n.setAttrib("scope",i.scope),n.setAttrib("class",i["class"]),n.setStyle("height",yi(i.height)),Ti(t)&&function(e,n){e.setStyle("background-color",n.backgroundcolor),e.setStyle("border-color",n.bordercolor),e.setStyle("border-style",n.borderstyle)}(n,i),i.align!==r.align&&(Nc(t,e),Ac(t,e,i.align))}),t.focus()})}function Fi(e,n,t,r,o){void 0===o&&(o=Qc);var i=on.fromTag("table");re(i,o.styles),q(i,o.attributes);var u=on.fromTag("tbody");Mn(i,u);for(var c=[],a=0;a<e;a++){for(var l=on.fromTag("tr"),f=0;f<n;f++){var s=a<t||f<r?on.fromTag("th"):on.fromTag("td");f<r&&U(s,"scope","row"),a<t&&U(s,"scope","col"),Mn(s,on.fromTag("br")),o.percentages&&te(s,"width",100/n+"%"),Mn(l,s)}c.push(l)}return Ae(u,c),i}function Ui(e,n){e.selection.select(n.dom(),!0),e.selection.collapse(!0)}function qi(t,r,e){var o,i=t.dom,u=e.getData();e.close(),""===u["class"]&&delete u["class"],t.undoManager.transact(function(){if(!r){var e=parseInt(u.cols,10)||1,n=parseInt(u.rows,10)||1;r=Zc(t,e,n)}!function(e,n,t){var r=e.dom,o={},i={};if(o["class"]=t["class"],i.height=yi(t.height),r.getAttrib(n,"width")&&!Di(e)?o.width=function(e){return e?e.replace(/px$/,""):""}(t.width):i.width=yi(t.width),Di(e)?(i["border-width"]=yi(t.border),i["border-spacing"]=yi(t.cellspacing)):(o.border=t.border,o.cellpadding=t.cellpadding,o.cellspacing=t.cellspacing),Di(e)&&n.children)for(var u=0;u<n.children.length;u++)na(r,n.children[u],{"border-width":yi(t.border),padding:yi(t.cellpadding)}),Oi(e)&&na(r,n.children[u],{"border-color":t.bordercolor});Oi(e)&&(i["background-color"]=t.backgroundcolor,i["border-color"]=t.bordercolor,i["border-style"]=t.borderstyle),o.style=r.serializeStyle($c(xi(e),i)),r.setAttribs(n,$c(Si(e),o))}(t,r,u),(o=i.select("caption",r)[0])&&!u.caption&&i.remove(o),!o&&u.caption&&((o=i.create("caption")).innerHTML=Jc.ie?"\xa0":'<br data-mce-bogus="1"/>',r.insertBefore(o,r.firstChild)),""===u.align?Nc(t,r):Ac(t,r,u.align),t.focus(),t.addVisual()})}function Vi(n){return function(e){return Me.from(e.dom.getParent(e.selection.getStart(),n)).map(on.fromDom)}}function Gi(e){function n(){e.stopPropagation()}function t(){e.preventDefault()}var r=on.fromDom(e.target),o=O(t,n);return function(e,n,t,r,o,i,u){return{target:D(e),x:D(n),y:D(t),stop:r,prevent:o,kill:i,raw:D(u)}}(r,e.clientX,e.clientY,n,t,o,e)}function Yi(e,n,t,r,o){var i=function(n,t){return function(e){n(e)&&t(Gi(e))}}(t,r);return e.dom().addEventListener(n,i,o),{unbind:b(sa,e,n,i,o)}}function Ki(e,n,t){return function(e,n,t,r){return Yi(e,n,t,r,!1)}(e,n,da,t)}var Xi,$i=function(e){var n=ft(e);return mt.generate(n).grid()},Ji=function(o,e){function n(e,n){0<e.length?function(e,n){var t=Qn(o,n).getOrThunk(function(){var e=on.fromTag(n,he(o).dom());return Mn(o,e),e});Ee(t);var r=g(e,function(e){e.isNew()&&i.push(e.element());var n=e.element();return Ee(n),p(e.cells(),function(e){e.isNew()&&u.push(e.element()),wo(e.element(),"colspan",e.colspan(),1),wo(e.element(),"rowspan",e.rowspan(),1),Mn(n,e.element())}),n});Ae(t,r)}(e,n):function(e){Qn(o,e).each(Wn)}(n)}var i=[],u=[],t=[],r=[],c=[];return p(e,function(e){switch(e.section()){case"thead":t.push(e);break;case"tbody":r.push(e);break;case"tfoot":c.push(e)}}),n(t,"thead"),n(r,"tbody"),n(c,"tfoot"),{newRows:D(i),newCells:D(u)}},Qi=function(e){return g(e,function(e){var t=Rt(e.element());return p(e.cells(),function(e){var n=Tt(e.element());wo(n,"colspan",e.colspan(),1),wo(n,"rowspan",e.rowspan(),1),Mn(t,n)}),t})},Zi=function(e,n,t){var r=e();return y(r,n).orThunk(function(){return Me.from(r[0]).orThunk(t)}).map(function(e){return e.element()})},eu=function(t){var e=t.grid(),n=Do(0,e.columns()),r=Do(0,e.rows());return g(n,function(n){return Zi(function(){return x(r,function(e){return mt.getAt(t,e,n).filter(function(e){return e.column()===n}).fold(D([]),function(e){return[e]})})},function(e){return 1===e.colspan()},function(){return mt.getAt(t,0,n)})})},nu=function(t){var e=t.grid(),n=Do(0,e.rows()),r=Do(0,e.columns());return g(n,function(n){return Zi(function(){return x(r,function(e){return mt.getAt(t,n,e).filter(function(e){return e.row()===n}).fold(D([]),function(e){return[e]})})},function(e){return 1===e.rowspan()},function(){return mt.getAt(t,n,0)})})},tu={resolve:Eo("ephox-snooker").resolve},ru=function(e,n,t,r,o){var i=on.fromTag("div");return re(i,{position:"absolute",left:n-r/2+"px",top:t+"px",height:o+"px",width:r+"px"}),q(i,{"data-column":e,role:"presentation"}),i},ou=function(e,n,t,r,o){var i=on.fromTag("div");return re(i,{position:"absolute",left:n+"px",top:t-o/2+"px",height:o+"px",width:r+"px"}),q(i,{"data-row":e,role:"presentation"}),i},iu=tu.resolve("resizer-bar"),uu=tu.resolve("resizer-rows"),cu=tu.resolve("resizer-cols"),au=function(e,n,t,r){No(e);var o=ft(n),i=mt.generate(o),u=nu(i),c=eu(i);Io(e,n,u,c,t,r)},lu=function(e){Bo(e,function(e){te(e,"display","none")})},fu=function(e){Bo(e,function(e){te(e,"display","block")})},su=No,du=function(e){return Oo(e,uu)},mu=function(e){return Oo(e,cu)},gu=function(e,n){return Vn(n,e.section())},pu={addCell:function(e,n,t){var r=e.cells(),o=r.slice(0,n),i=r.slice(n),u=o.concat([t]).concat(i);return gu(e,u)},setCells:gu,mutateCell:function(e,n,t){e.cells()[n]=t},getCell:Po,getCellElement:function(e,n){return Po(e,n).element()},mapCells:function(e,n){var t=e.cells(),r=g(t,n);return Vn(r,e.section())},cellLength:function(e){return e.cells().length}},hu=function(e,n,t,r){var o=function(e,n){return e[n]}(e,n).cells().slice(t),i=Mo(o,r),u=function(e,n){return g(e,function(e){return pu.getCell(e,n)})}(e,t).slice(n),c=Mo(u,r);return{colspan:D(i),rowspan:D(c)}},vu=function(o,i){var u=g(o,function(e,n){return g(e.cells(),function(e,n){return!1})});return g(o,function(e,r){var n=x(e.cells(),function(e,n){if(!1!==u[r][n])return[];var t=hu(o,r,n,i);return function(e,n,t,r){for(var o=e;o<e+t;o++)for(var i=n;i<n+r;i++)u[o][i]=!0}(r,n,t.rowspan(),t.colspan()),[zn(e.element(),t.rowspan(),t.colspan(),e.isNew())]});return Gn(n,e.section())})},bu=function(e,n,t){for(var r=[],o=0;o<e.grid().rows();o++){for(var i=[],u=0;u<e.grid().columns();u++){var c=mt.getAt(e,o,u).map(function(e){return Un(e.element(),t)}).getOrThunk(function(){return Un(n.gap(),!0)});i.push(c)}var a=Vn(i,e.all()[o].section());r.push(a)}return r},wu=function(t){return{is:function(e){return t===e},isValue:i,isError:s,getOr:D(t),getOrThunk:D(t),getOrDie:D(t),or:function(e){return wu(t)},orThunk:function(e){return wu(t)},fold:function(e,n){return n(t)},map:function(e){return wu(e(t))},mapError:function(e){return wu(t)},each:function(e){e(t)},bind:function(e){return e(t)},exists:function(e){return e(t)},forall:function(e){return e(t)},toOption:function(){return Me.some(t)}}},yu=function(t){return{is:s,isValue:s,isError:i,getOr:o,getOrThunk:function(e){return e()},getOrDie:function(){return function(e){return function(){throw new Error(e)}}(String(t))()},or:function(e){return e},orThunk:function(e){return e()},fold:function(e,n){return e(t)},map:function(e){return yu(t)},mapError:function(e){return yu(e(t))},each:T,bind:function(e){return yu(t)},exists:s,forall:i,toOption:Me.none}},Cu={value:wu,error:yu,fromOption:function(e,n){return e.fold(function(){return yu(n)},wu)}},Su=function(e,n,t){if(e.row()>=n.length||e.column()>pu.cellLength(n[0]))return Cu.error("invalid start address out of table bounds, row: "+e.row()+", column: "+e.column());var r=n.slice(e.row()),o=r[0].cells().slice(e.column()),i=pu.cellLength(t[0]),u=t.length;return Cu.value({rowDelta:D(r.length-u),colDelta:D(o.length-i)})},xu=function(e,n){var t=pu.cellLength(e[0]),r=pu.cellLength(n[0]);return{rowDelta:D(0),colDelta:D(t-r)}},Ru=function(e,n,t){var r=n.colDelta()<0?Vo:o;return(n.rowDelta()<0?qo:o)(r(e,Math.abs(n.colDelta()),t),Math.abs(n.rowDelta()),t)},Tu=function(e,n,t,r){if(0===e.length)return e;for(var o=n.startRow();o<=n.finishRow();o++)for(var i=n.startCol();i<=n.finishCol();i++)pu.mutateCell(e[o],i,Un(r(),!1));return e},Ou=function(e,n,t,r){for(var o=!0,i=0;i<e.length;i++)for(var u=0;u<pu.cellLength(e[0]);u++){var c=t(pu.getCellElement(e[i],u),n);!0===c&&!1===o?pu.mutateCell(e[i],u,Un(r(),!0)):!0===c&&(o=!1)}return e},Du=function(i,t,u,c){if(0<t&&t<i.length){var e=function(e,t){return w(e,function(e,n){return m(e,function(e){return t(e.element(),n.element())})?e:e.concat([n])},[])}(i[t-1].cells(),u);p(e,function(r){for(var o=Me.none(),e=function(t){for(var e=function(n){var e=i[t].cells()[n];u(e.element(),r.element())&&(o.isNone()&&(o=Me.some(c())),o.each(function(e){pu.mutateCell(i[t],n,Un(e,!0))}))},n=0;n<pu.cellLength(i[0]);n++)e(n)},n=t;n<i.length;n++)e(n)})}return i},Au=function(t,r,o,i,u){return Su(t,r,o).map(function(e){var n=Ru(r,e,i);return function(e,n,t,r,o){for(var i,u,c,a,l,f=e.row(),s=e.column(),d=f+t.length,m=s+pu.cellLength(t[0]),g=f;g<d;g++)for(var p=s;p<m;p++){i=n,u=g,c=p,l=a=void 0,a=b(o,pu.getCell(i[u],c).element()),l=i[u],1<i.length&&1<pu.cellLength(l)&&(0<c&&a(pu.getCellElement(l,c-1))||c<l.cells().length-1&&a(pu.getCellElement(l,c+1))||0<u&&a(pu.getCellElement(i[u-1],c))||u<i.length-1&&a(pu.getCellElement(i[u+1],c)))&&Ou(n,pu.getCellElement(n[g],p),o,r.cell);var h=pu.getCellElement(t[g-f],p-s),v=r.replace(h);pu.mutateCell(n[g],p,Un(v,!0))}return n}(t,n,o,i,u)})},Eu=function(e,n,t,r,o){Du(n,e,o,r.cell);var i=xu(t,n),u=Ru(t,i,r),c=xu(n,u),a=Ru(n,c,r);return a.slice(0,e).concat(u).concat(a.slice(e,a.length))},Nu=function(t,r,e,o,i){var n=t.slice(0,r),u=t.slice(r),c=pu.mapCells(t[e],function(e,n){return 0<r&&r<t.length&&o(pu.getCellElement(t[r-1],n),pu.getCellElement(t[r],n))?pu.getCell(t[r],n):Un(i(e.element(),o),!0)});return n.concat([c]).concat(u)},ku=function(e,t,r,o,i){return g(e,function(e){var n=0<t&&t<pu.cellLength(e)&&o(pu.getCellElement(e,t-1),pu.getCellElement(e,t))?pu.getCell(e,t):Un(i(pu.getCellElement(e,r),o),!0);return pu.addCell(e,t,n)})},Iu=function(e,r,o,i,u){var c=o+1;return g(e,function(e,n){var t=n===r?Un(u(pu.getCellElement(e,o),i),!0):pu.getCell(e,o);return pu.addCell(e,c,t)})},Bu=function(e,n,t,r,o){var i=n+1,u=e.slice(0,i),c=e.slice(i),a=pu.mapCells(e[n],function(e,n){return n===t?Un(o(e.element(),r),!0):e});return u.concat([a]).concat(c)},Pu=function(e,n,t){return e.slice(0,n).concat(e.slice(t+1))},Mu=function(e,t,r){var n=g(e,function(e){var n=e.cells().slice(0,t).concat(e.cells().slice(r+1));return Vn(n,e.section())});return h(n,function(e){return 0<e.cells().length})},Wu=function(t,r,o,e){var n=x(t,function(e,n){return Yo(t,n,r,o)||Ko(e,r,o)?[]:[pu.getCell(e,r)]});return Go(t,n,o,e)},_u=function(t,r,o,e){var i=t[r],n=x(i.cells(),function(e,n){return Yo(t,r,n,o)||Ko(i,n,o)?[]:[e]});return Go(t,n,o,e)},Lu=Sr([{none:[]},{only:["index"]},{left:["index","next"]},{middle:["prev","index","next"]},{right:["prev","index"]}]),ju=fn({},Lu),zu=function(e,n,i,u){function c(e){return g(e,D(0))}function r(e,n){if(0<=i){var t=Math.max(u.minCellWidth(),a[n]-i);return c(a.slice(0,e)).concat([i,t-a[n]]).concat(c(a.slice(n+1)))}var r=Math.max(u.minCellWidth(),a[e]+i),o=a[e]-r;return c(a.slice(0,e)).concat([r-a[e],o]).concat(c(a.slice(n+1)))}var a=e.slice(0),t=function(e,n){return 0===e.length?ju.none():1===e.length?ju.only(0):0===n?ju.left(0,1):n===e.length-1?ju.right(n-1,n):0<n&&n<e.length-1?ju.middle(n-1,n,n+1):ju.none()}(e,n),o=D(c(a)),l=r;return t.fold(o,function(e){return u.singleColumnWidth(a[e],i)},l,function(e,n,t){return r(n,t)},function(e,n){if(0<=i)return c(a.slice(0,n)).concat([i]);var t=Math.max(u.minCellWidth(),a[n]+i);return c(a.slice(0,n)).concat([t-a[n]])})},Hu={hasColspan:function(e){return Xo(e,"colspan")},hasRowspan:function(e){return Xo(e,"rowspan")},minWidth:D(10),minHeight:D(10),getInt:function(e,n){return parseInt(oe(e,n),10)}},Fu={getRawWidths:function(e,n,t){return Zo(e,n,Jo,ei,t)},getPixelWidths:function(e,n,t){return Zo(e,n,uo.getPixelWidth,function(e){return e.getOrThunk(t.minCellWidth)},t)},getPercentageWidths:function(e,n,t){return Zo(e,n,uo.getPercentageWidth,function(e){return e.fold(function(){return t.minCellWidth()},function(e){return e/t.pixelWidth()*100})},t)},getPixelHeights:function(e,n){return ni(e,n,uo.getHeight,function(e){return e.getOrThunk(Hu.minHeight)})},getRawHeights:function(e,n){return ni(e,n,Qo,ei)}},Uu=function(e,t){var n=mt.justCells(e);return g(n,function(e){var n=ti(e.column(),e.column()+e.colspan(),t);return{element:e.element,width:D(n),colspan:e.colspan}})},qu=function(e,t){var n=mt.justCells(e);return g(n,function(e){var n=ti(e.row(),e.row()+e.rowspan(),t);return{element:e.element,height:D(n),rowspan:e.rowspan}})},Vu=function(e,t){return g(e.all(),function(e,n){return{element:e.element,height:D(t[n])}})},Gu=function(n){return uo.getRawWidth(n).fold(function(){var e=Pr(n);return ri(e)},function(e){return oi(n,e)})},Yu=function(e,n,t,r){var o=Gu(e),i=o.getCellDelta(n),u=ui(e),c=o.getWidths(u,r,o),a=zu(c,t,i,o),l=g(a,function(e,n){return e+c[n]}),f=Uu(u,l);p(f,function(e){o.setElementWidth(e.element(),e.width())}),t===u.grid().columns()-1&&o.setTableWidth(e,l,i)},Ku=function(e,t,r,n){var o=ui(e),i=Fu.getPixelHeights(o,n),u=g(i,function(e,n){return r===n?Math.max(t+e,Hu.minHeight()):e}),c=qu(o,u),a=Vu(o,u);p(a,function(e){uo.setHeight(e.element(),e.height())}),p(c,function(e){uo.setHeight(e.element(),e.height())});var l=function(e){return v(e,function(e,n){return e+n},0)}(u);uo.setHeight(e,l)},Xu=function(e,n,t){var r=Gu(e),o=ii(n),i=r.getWidths(o,t,r),u=Uu(o,i);p(u,function(e){r.setElementWidth(e.element(),e.width())}),0<u.length&&r.setTableWidth(e,i,r.getCellDelta(0))},$u=function(r,o,i){if(0===o.length)throw new Error("You must specify at least one required field.");return _("required",o),L(o),function(n){var t=Ve(n);A(o,function(e){return l(t,e)})||M(o,t),r(o,t);var e=h(o,function(e){return!i.validate(n[e],e)});return 0<e.length&&function(e,n){throw new Error("All values need to be of type: "+n+". Keys ("+P(e).join(", ")+") were not.")}(e,i.label),n}},Ju=ai(["cell","row","replace","gap"]),Qu=function(n,t){void 0===t&&(t=li),Ju(n);function r(e){return function(e){return n.cell(e)}(t(e))}function o(e){var n=r(e);return i.get().isNone()&&i.set(Me.some(n)),u=Me.some({item:e,replacement:n}),n}var i=R(Me.none()),u=Me.none();return{getOrInit:function(n,t){return u.fold(function(){return o(n)},function(e){return t(n,e.item)?e.replacement:o(n)})},cursor:i.get}},Zu=function(c,a){return function(r){var o=R(Me.none());Ju(r);function i(e){var n={scope:c},t=r.replace(e,a,n);return u.push({item:e,sub:t}),o.get().isNone()&&o.set(Me.some(t)),t}var u=[];return{replaceOrInit:function(n,t){return function(n,t){return y(u,function(e){return t(e.item,n)})}(n,t).fold(function(){return i(n)},function(e){return t(n,e.item)?e.sub:i(n)})},cursor:o.get}}},ec=function(t){Ju(t);var e=R(Me.none());return{combine:function(n){return e.get().isNone()&&e.set(Me.some(n)),function(){var e=t.cell({element:D(n),colspan:D(1),rowspan:D(1)});return ue(e,"width"),ue(n,"width"),e}},cursor:e.get}},nc=["body","p","div","article","aside","figcaption","figure","footer","header","nav","section","ol","ul","table","thead","tfoot","tbody","caption","tr","td","th","h1","h2","h3","h4","h5","h6","blockquote","pre","address"],tc=fi,rc=function(e,n){var t=e.property().name(n);return l(["ol","ul"],t)},oc=si,ic=$t(),uc=function(e){return tc(ic,e)},cc=function(e){return rc(ic,e)},ac=function(e){return oc(ic,e)},lc=function(e){function o(e){return"br"===en(e)}function t(r){return St(r).bind(function(n){var t=function(e){return ye(e).map(function(e){return!!uc(e)||!!ac(e)&&"img"!==en(e)}).getOr(!1)}(n);return ve(n).map(function(e){return!0===t||function(e){return"li"===en(e)||$n(e,cc).isSome()}(e)||o(n)||uc(e)&&!In(r,e)?[]:[on.fromTag("br")]})}).getOr([])}var n,r=0===(n=x(e,function(e){var n=Ce(e);return function(e){return A(e,function(e){return o(e)||tn(e)&&0===ht(e).trim().length})}(n)?[]:n.concat(t(e))})).length?[on.fromTag("br")]:n;Ee(e[0]),Ae(e[0],r)},fc=B("grid","cursor"),sc=function(e,n,t){return Me.from(e[n]).bind(function(e){return Me.from(e.cells()[t]).bind(function(e){return Me.from(e.element())})})},dc=Xu,mc={insertRowBefore:jo(function(e,n,t,r){var o=n.row(),i=n.row(),u=Nu(e,i,o,t,r.getOrInit);return gi(u,i,n.column())},zo,T,T,Qu),insertRowsBefore:jo(function(e,n,t,r){var o=n[0].row(),i=n[0].row(),u=pi(n),c=w(u,function(e,n){return Nu(e,i,o,t,r.getOrInit)},e);return gi(c,i,n[0].column())},Fo,T,T,Qu),insertRowAfter:jo(function(e,n,t,r){var o=n.row(),i=n.row()+n.rowspan(),u=Nu(e,i,o,t,r.getOrInit);return gi(u,i,n.column())},zo,T,T,Qu),insertRowsAfter:jo(function(e,n,t,r){var o=pi(n),i=o[o.length-1].row(),u=o[o.length-1].row()+o[o.length-1].rowspan(),c=w(o,function(e,n){return Nu(e,u,i,t,r.getOrInit)},e);return gi(c,u,n[0].column())},Fo,T,T,Qu),insertColumnBefore:jo(function(e,n,t,r){var o=n.column(),i=n.column(),u=ku(e,i,o,t,r.getOrInit);return gi(u,n.row(),i)},zo,dc,T,Qu),insertColumnsBefore:jo(function(e,n,t,r){var o=hi(n),i=o[0].column(),u=o[0].column(),c=w(o,function(e,n){return ku(e,u,i,t,r.getOrInit)},e);return gi(c,n[0].row(),u)},Fo,dc,T,Qu),insertColumnAfter:jo(function(e,n,t,r){var o=n.column(),i=n.column()+n.colspan(),u=ku(e,i,o,t,r.getOrInit);return gi(u,n.row(),i)},zo,dc,T,Qu),insertColumnsAfter:jo(function(e,n,t,r){var o=n[n.length-1].column(),i=n[n.length-1].column()+n[n.length-1].colspan(),u=hi(n),c=w(u,function(e,n){return ku(e,i,o,t,r.getOrInit)},e);return gi(c,n[0].row(),i)},Fo,dc,T,Qu),splitCellIntoColumns:jo(function(e,n,t,r){var o=Iu(e,n.row(),n.column(),t,r.getOrInit);return gi(o,n.row(),n.column())},zo,dc,T,Qu),splitCellIntoRows:jo(function(e,n,t,r){var o=Bu(e,n.row(),n.column(),t,r.getOrInit);return gi(o,n.row(),n.column())},zo,T,T,Qu),eraseColumns:jo(function(e,n,t,r){var o=hi(n),i=Mu(e,o[0].column(),o[o.length-1].column()),u=mi(i,n[0].row(),n[0].column());return fc(i,u)},Fo,dc,di,Qu),eraseRows:jo(function(e,n,t,r){var o=pi(n),i=Pu(e,o[0].row(),o[o.length-1].row()),u=mi(i,n[0].row(),n[0].column());return fc(i,u)},Fo,T,di,Qu),makeColumnHeader:jo(function(e,n,t,r){var o=Wu(e,n.column(),t,r.replaceOrInit);return gi(o,n.row(),n.column())},zo,T,T,Zu("row","th")),unmakeColumnHeader:jo(function(e,n,t,r){var o=Wu(e,n.column(),t,r.replaceOrInit);return gi(o,n.row(),n.column())},zo,T,T,Zu(null,"td")),makeRowHeader:jo(function(e,n,t,r){var o=_u(e,n.row(),t,r.replaceOrInit);return gi(o,n.row(),n.column())},zo,T,T,Zu("col","th")),unmakeRowHeader:jo(function(e,n,t,r){var o=_u(e,n.row(),t,r.replaceOrInit);return gi(o,n.row(),n.column())},zo,T,T,Zu(null,"td")),mergeCells:jo(function(e,n,t,r){var o=n.cells();lc(o);var i=Tu(e,n.bounds(),t,D(o[0]));return fc(i,Me.from(o[0]))},function(e,n){return n.mergable()},T,T,ec),unmergeCells:jo(function(e,n,t,r){var o=v(n,function(e,n){return Ou(e,n,t,r.combine(n))},e);return fc(o,Me.from(n[0]))},function(e,n){return n.unmergable()},dc,T,ec),pasteCells:jo(function(e,t,n,r){var o,i,u,c,a=(o=t.clipboard(),i=t.generators(),u=ft(o),c=mt.generate(u),bu(c,i,!0)),l=Ln(t.row(),t.column());return Au(l,e,a,t.generators(),n).fold(function(){return fc(e,Me.some(t.element()))},function(e){var n=mi(e,t.row(),t.column());return fc(e,n)})},function(n,t){return lt.cell(t.element()).bind(function(e){return Lo(n,e).map(function(e){return fn(fn({},e),{generators:t.generators,clipboard:t.clipboard})})})},dc,T,Qu),pasteRowsBefore:jo(function(e,n,t,r){var o=e[n.cells[0].row()],i=n.cells[0].row(),u=vi(n.clipboard(),n.generators(),o),c=Eu(i,e,u,n.generators(),t),a=mi(c,n.cells[0].row(),n.cells[0].column());return fc(c,a)},Ho,T,T,Qu),pasteRowsAfter:jo(function(e,n,t,r){var o=e[n.cells[0].row()],i=n.cells[n.cells.length-1].row()+n.cells[n.cells.length-1].rowspan(),u=vi(n.clipboard(),n.generators(),o),c=Eu(i,e,u,n.generators(),t),a=mi(c,n.cells[0].row(),n.cells[0].column());return fc(c,a)},Ho,T,T,Qu)},gc=function(e){return on.fromDom(e.getBody())},pc=function(n){return function(e){return In(e,gc(n))}},hc={isRtl:D(!1)},vc={isRtl:D(!0)},bc={directionAt:function(e){return"rtl"===function(e){return"rtl"===oe(e,"direction")?"rtl":"ltr"}(e)?vc:hc}},wc={"border-collapse":"collapse",width:"100%"},yc={border:"1"},Cc=function(e){return e.getParam("table_tab_navigation",!0,"boolean")},Sc=function(e){var n=e.getParam("table_clone_elements");return _e(n)?Me.some(n.split(/[ ,]/)):Array.isArray(n)?Me.some(n):Me.none()},xc=function(e,n,t,r,o){e.fire("TableSelectionChange",{cells:n,start:t,finish:r,otherCells:o})},Rc=function(e){e.fire("TableSelectionClear")},Tc=function(f,e){function t(e){return"table"===en(gc(e))}function n(u,c,a,l){return function(e,n){Ci(e);var t=l(),r=on.fromDom(f.getDoc()),o=ho(bc.directionAt),i=Wt.cellOperations(a,r,s);return c(e)?u(t,e,n,i,o).bind(function(e){return p(e.newRows(),function(e){Ni(f,e.dom())}),p(e.newCells(),function(e){ki(f,e.dom())}),e.cursor().map(function(e){var n=f.dom.createRng();return n.setStart(e.dom(),0),n.setEnd(e.dom(),0),n})}):Me.none()}}var s=Sc(f);return{deleteRow:n(mc.eraseRows,function(e){var n=$i(e);return!1===t(f)||1<n.rows()},T,e),deleteColumn:n(mc.eraseColumns,function(e){var n=$i(e);return!1===t(f)||1<n.columns()},T,e),insertRowsBefore:n(mc.insertRowsBefore,i,T,e),insertRowsAfter:n(mc.insertRowsAfter,i,T,e),insertColumnsBefore:n(mc.insertColumnsBefore,i,co,e),insertColumnsAfter:n(mc.insertColumnsAfter,i,co,e),mergeCells:n(mc.mergeCells,i,T,e),unmergeCells:n(mc.unmergeCells,i,T,e),pasteRowsBefore:n(mc.pasteRowsBefore,i,T,e),pasteRowsAfter:n(mc.pasteRowsAfter,i,T,e),pasteCells:n(mc.pasteCells,i,T,e)}},Oc=function(e,n,r){var t=ft(e),o=mt.generate(t);return Fo(o,n).map(function(e){var n=bu(o,r,!1).slice(e[0].row(),e[e.length-1].row()+e[e.length-1].rowspan()),t=_o(n,r);return Qi(t)})},Dc=tinymce.util.Tools.resolve("tinymce.util.Tools"),Ac=function(e,n,t){t&&e.formatter.apply("align"+t,{},n)},Ec=function(e,n,t){t&&e.formatter.apply("valign"+t,{},n)},Nc=function(n,t){Dc.each("left center right".split(" "),function(e){n.formatter.remove("align"+e,{},t)})},kc=function(n,t){Dc.each("top middle bottom".split(" "),function(e){n.formatter.remove("valign"+e,{},t)})},Ic=function(o,e,i){var n;return n=function(e,n){for(var t=0;t<n.length;t++){var r=o.getStyle(n[t],i);if(void 0===e&&(e=r),e!==r)return""}return e}(n,o.select("td,th",e))},Bc=b(Mi,"left center right"),Pc=b(Mi,"top middle bottom"),Mc=function(e,r,n){var o=function(e,t){return t=t||[],Dc.each(e,function(e){var n={text:e.text||e.title};e.menu?n.menu=o(e.menu):(n.value=e.value,r&&r(n)),t.push(n)}),t};return o(e,n||[])},Wc=function(e){var o=e[0],n=e.slice(1),t=Ve(o);return p(n,function(e){p(t,function(r){N(e,function(e,n){var t=o[r];""!==t&&r===n&&t!==e&&(o[r]="")})})}),o},_c=function(e){var n=[{name:"borderstyle",type:"selectbox",label:"Border style",items:[{text:"Select...",value:""},{text:"Solid",value:"solid"},{text:"Dotted",value:"dotted"},{text:"Dashed",value:"dashed"},{text:"Double",value:"double"},{text:"Groove",value:"groove"},{text:"Ridge",value:"ridge"},{text:"Inset",value:"inset"},{text:"Outset",value:"outset"},{text:"None",value:"none"},{text:"Hidden",value:"hidden"}]},{name:"bordercolor",type:"colorinput",label:"Border color"},{name:"backgroundcolor",type:"colorinput",label:"Background color"}];return{title:"Advanced",name:"advanced",items:"cell"===e?[{name:"borderwidth",type:"input",label:"Border width"}].concat(n):n}},Lc=function(e,n,t){var r,o,i,u=e.dom;return fn(fn({width:u.getStyle(n,"width")||u.getAttrib(n,"width"),height:u.getStyle(n,"height")||u.getAttrib(n,"height"),cellspacing:u.getStyle(n,"border-spacing")||u.getAttrib(n,"cellspacing"),cellpadding:u.getAttrib(n,"cellpadding")||Ic(e.dom,n,"padding"),border:(r=u,o=n,i=ie(on.fromDom(o),"border-width"),Di(e)&&i.isSome()?i.getOr(""):r.getAttrib(o,"border")||Ic(e.dom,o,"border-width")||Ic(e.dom,o,"border")),caption:!!u.select("caption",n)[0],"class":u.getAttrib(n,"class","")},Bc("align","align",e,n)),t?Pi(u,n):{})},jc=function(e,n,t){var r=e.dom;return fn(fn({height:r.getStyle(n,"height")||r.getAttrib(n,"height"),scope:r.getAttrib(n,"scope"),"class":r.getAttrib(n,"class",""),align:"",type:n.parentNode.nodeName.toLowerCase()},Bc("align","align",e,n)),t?Pi(r,n):{})},zc=function(e,n,t){var r=e.dom;return fn(fn(fn({width:r.getStyle(n,"width")||r.getAttrib(n,"width"),height:r.getStyle(n,"height")||r.getAttrib(n,"height"),scope:r.getAttrib(n,"scope"),celltype:n.nodeName.toLowerCase(),"class":r.getAttrib(n,"class","")},Bc("align","halign",e,n)),Pc("valign","valign",e,n)),t?Pi(r,n):{})},Hc=function(e,n){var t,r,o,i,u=xi(e),c=Si(e),a=e.dom,l=n?(t=a,r=I(u,"border-style").getOr(""),o=I(u,"border-color").getOr(""),i=I(u,"background-color").getOr(""),{borderstyle:r,bordercolor:f(o),backgroundcolor:f(i)}):{};function f(e){return J(e,"rgb")?t.toHex(e):e}var s,d,m;return fn(fn(fn(fn(fn(fn({},{height:"",width:"100%",cellspacing:"",cellpadding:"",caption:!1,"class":"",align:"",border:""}),u),c),l),(m=u["border-width"],Di(e)&&m?{border:m}:I(c,"border").fold(function(){return{}},function(e){return{border:e}}))),(s=I(u,"border-spacing").or(I(c,"cellspacing")).fold(function(){return{}},function(e){return{cellspacing:e}}),d=I(u,"border-padding").or(I(c,"cellpadding")).fold(function(){return{}},function(e){return{cellpadding:e}}),fn(fn({},s),d)))},Fc=[{name:"width",type:"input",label:"Width"},{name:"height",type:"input",label:"Height"},{name:"celltype",type:"selectbox",label:"Cell type",items:[{text:"Cell",value:"td"},{text:"Header cell",value:"th"}]},{name:"scope",type:"selectbox",label:"Scope",items:[{text:"None",value:""},{text:"Row",value:"row"},{text:"Column",value:"col"},{text:"Row group",value:"rowgroup"},{text:"Column group",value:"colgroup"}]},{name:"halign",type:"selectbox",label:"H Align",items:[{text:"None",value:""},{text:"Left",value:"left"},{text:"Center",value:"center"},{text:"Right",value:"right"}]},{name:"valign",type:"selectbox",label:"V Align",items:[{text:"None",value:""},{text:"Top",value:"top"},{text:"Middle",value:"middle"},{text:"Bottom",value:"bottom"}]}],Uc=function(e){return function(n){var e=function(e){return e.getParam("table_cell_class_list",[],"array")}(n),t=Mc(e,function(e){e.value&&(e.textStyle=function(){return n.formatter.getCssText({block:"tr",classes:[e.value]})})});return 0<e.length?Me.some({name:"class",type:"selectbox",label:"Class",items:t}):Me.none()}(e).fold(function(){return Fc},function(e){return Fc.concat(e)})},qc={normal:function(t,r){return{setAttrib:function(e,n){t.setAttrib(r,e,n)},setStyle:function(e,n){t.setStyle(r,e,n)}}},ifTruthy:function(t,r){return{setAttrib:function(e,n){n&&t.setAttrib(r,e,n)},setStyle:function(e,n){n&&t.setStyle(r,e,n)}}}},Vc=function(n){var e,t=[];if(t=n.dom.select("td[data-mce-selected],th[data-mce-selected]"),e=n.dom.getParent(n.selection.getStart(),"td,th"),!t.length&&e&&t.push(e),e=e||t[0]){var r=Dc.map(t,function(e){return zc(n,e,Ri(n))}),o=Wc(r),i={type:"tabpanel",tabs:[{title:"General",name:"general",items:Uc(n)},_c("cell")]},u={type:"panel",items:[{type:"grid",columns:2,items:Uc(n)}]};n.windowManager.open({title:"Cell Properties",size:"normal",body:Ri(n)?i:u,buttons:[{type:"cancel",name:"cancel",text:"Cancel"},{type:"submit",name:"save",text:"Save",primary:!0}],initialData:o,onSubmit:b(zi,n,t)})}},Gc=[{type:"selectbox",name:"type",label:"Row type",items:[{text:"Header",value:"thead"},{text:"Body",value:"tbody"},{text:"Footer",value:"tfoot"}]},{type:"selectbox",name:"align",label:"Alignment",items:[{text:"None",value:""},{text:"Left",value:"left"},{text:"Center",value:"center"},{text:"Right",value:"right"}]},{label:"Height",name:"height",type:"input"}],Yc=function(e){return function(n){var e=function(e){return e.getParam("table_row_class_list",[],"array")}(n),t=Mc(e,function(e){e.value&&(e.textStyle=function(){return n.formatter.getCssText({block:"tr",classes:[e.value]})})});return 0<e.length?Me.some({name:"class",type:"selectbox",label:"Class",items:t}):Me.none()}(e).fold(function(){return Gc},function(e){return Gc.concat(e)})},Kc=function(n){var e,t,r=n.dom,o=[];if((e=r.getParent(n.selection.getStart(),"table"))&&(t=r.getParent(n.selection.getStart(),"td,th"),Dc.each(e.rows,function(n){Dc.each(n.cells,function(e){if((r.getAttrib(e,"data-mce-selected")||e===t)&&o.indexOf(n)<0)return o.push(n),!1})}),o[0])){var i=Dc.map(o,function(e){return jc(n,e,Ti(n))}),u=Wc(i),c={type:"tabpanel",tabs:[{title:"General",name:"general",items:Yc(n)},_c("row")]},a={type:"panel",items:[{type:"grid",columns:2,items:Yc(n)}]};n.windowManager.open({title:"Row Properties",size:"normal",body:Ti(n)?c:a,buttons:[{type:"cancel",name:"cancel",text:"Cancel"},{type:"submit",name:"save",text:"Save",primary:!0}],initialData:u,onSubmit:b(Hi,n,o,u)})}},Xc=Object.prototype.hasOwnProperty,$c=(Xi=function(e,n){return n},function(){for(var e=new Array(arguments.length),n=0;n<e.length;n++)e[n]=arguments[n];if(0===e.length)throw new Error("Can't merge zero objects");for(var t={},r=0;r<e.length;r++){var o=e[r];for(var i in o)Xc.call(o,i)&&(t[i]=Xi(t[i],o[i]))}return t}),Jc=tinymce.util.Tools.resolve("tinymce.Env"),Qc={styles:{"border-collapse":"collapse",width:"100%"},attributes:{border:"1"},percentages:!0},Zc=function(n,e,t){var r=xi(n),o={styles:r,attributes:Si(n),percentages:function(e){return _e(e)&&-1!==e.indexOf("%")}(r.width)&&!Ei(n)},i=Fi(t,e,0,0,o);U(i,"data-mce-id","__mce");var u=function(e){var n=on.fromTag("div"),t=on.fromDom(e.dom().cloneNode(!0));return Mn(n,t),function(e){return e.dom().innerHTML}(n)}(i);return n.insertContent(u),Zn(gc(n),'table[data-mce-id="__mce"]').map(function(e){return Ei(n)&&te(e,"width",oe(e,"width")),Y(e,"data-mce-id"),function(n,e){p(Be(e,"tr"),function(e){Ni(n,e.dom()),p(Be(e,"th,td"),function(e){ki(n,e.dom())})})}(n,e),function(e,n){Zn(n,"td,th").each(b(Ui,e))}(n,e),e.dom()}).getOr(null)},ea=function(n,e,t){var r=t?[{type:"input",name:"cols",label:"Cols",inputMode:"numeric"},{type:"input",name:"rows",label:"Rows",inputMode:"numeric"}]:[],o=function(e){return e.getParam("table_appearance_options",!0,"boolean")}(n)?[{type:"input",name:"cellspacing",label:"Cell spacing",inputMode:"numeric"},{type:"input",name:"cellpadding",label:"Cell padding",inputMode:"numeric"},{type:"input",name:"border",label:"Border width"},{type:"label",label:"Caption",items:[{type:"checkbox",name:"caption",label:"Show caption"}]}]:[],i=e?[{type:"selectbox",name:"class",label:"Class",items:Mc(Ai(n),function(e){e.value&&(e.textStyle=function(){return n.formatter.getCssText({block:"table",classes:[e.value]})})})}]:[];return r.concat([{type:"input",name:"width",label:"Width"},{type:"input",name:"height",label:"Height"}]).concat(o).concat([{type:"selectbox",name:"align",label:"Alignment",items:[{text:"None",value:""},{text:"Left",value:"left"},{text:"Center",value:"center"},{text:"Right",value:"right"}]}]).concat(i)},na=function(e,n,t,r){if("TD"===n.tagName||"TH"===n.tagName)_e(t)?e.setStyle(n,t,r):e.setStyle(n,t);else if(n.children)for(var o=0;o<n.children.length;o++)na(e,n.children[o],t,r)},ta=function(e,n){var t,r=e.dom,o=Hc(e,Oi(e));!1===n?(t=r.getParent(e.selection.getStart(),"table"))?o=Lc(e,t,Oi(e)):Oi(e)&&(o.borderstyle="",o.bordercolor="",o.backgroundcolor=""):(o.cols="1",o.rows="1",Oi(e)&&(o.borderstyle="",o.bordercolor="",o.backgroundcolor=""));var i=0<Ai(e).length;i&&o["class"]&&(o["class"]=o["class"].replace(/\s*mce\-item\-table\s*/g,""));var u={type:"grid",columns:2,items:ea(e,i,n)},c=Oi(e)?{type:"tabpanel",tabs:[{title:"General",name:"general",items:[u]},_c("table")]}:{type:"panel",items:[u]};e.windowManager.open({title:"Table Properties",size:"normal",body:c,onSubmit:b(qi,e,t),buttons:[{type:"cancel",name:"cancel",text:"Cancel"},{type:"submit",name:"save",text:"Save",primary:!0}],initialData:o})},ra=Vi("th,td"),oa=Vi("th,td,caption"),ia=Dc.each,ua={registerCommands:function(c,n,a,l,t){function f(e){return lt.table(e,s)}function i(e){return{width:bi(e.dom()),height:bi(e.dom())}}function r(o){ra(c).each(function(r){f(r).each(function(n){var e=Er.forMenu(l,n,r),t=i(n);o(n,e).each(function(e){!function(e,n,t){var r=i(t);n.width===r.width&&n.height===r.height||(Ii(e,t.dom(),n.width,n.height),Bi(e,t.dom(),r.width,r.height))}(c,t,n),c.selection.setRng(e),c.focus(),a.clear(n),Ci(n)})})})}function o(e){return ra(c).map(function(o){return f(o).bind(function(e){var n=on.fromDom(c.getDoc()),t=Er.forMenu(l,e,o),r=Wt.cellOperations(T,n,Me.none());return Oc(e,t,r)})})}function u(u){t.get().each(function(e){var i=g(e,function(e){return Tt(e)});ra(c).each(function(o){f(o).each(function(n){var e=on.fromDom(c.getDoc()),t=Wt.paste(e),r=Er.pasteRows(l,n,o,i,t);u(n,r).each(function(e){c.selection.setRng(e),c.focus(),a.clear(n)})})})})}var s=pc(c);ia({mceTableSplitCells:function(){r(n.unmergeCells)},mceTableMergeCells:function(){r(n.mergeCells)},mceTableInsertRowBefore:function(){r(n.insertRowsBefore)},mceTableInsertRowAfter:function(){r(n.insertRowsAfter)},mceTableInsertColBefore:function(){r(n.insertColumnsBefore)},mceTableInsertColAfter:function(){r(n.insertColumnsAfter)},mceTableDeleteCol:function(){r(n.deleteColumn)},mceTableDeleteRow:function(){r(n.deleteRow)},mceTableCutRow:function(e){o().each(function(e){t.set(e),r(n.deleteRow)})},mceTableCopyRow:function(e){o().each(function(e){t.set(e)})},mceTablePasteRowBefore:function(e){u(n.pasteRowsBefore)},mceTablePasteRowAfter:function(e){u(n.pasteRowsAfter)},mceTableDelete:function(){oa(c).each(function(e){lt.table(e,s).filter(d(s)).each(function(e){var n=on.fromText("");if(Re(e,n),Wn(e),c.dom.isEmpty(c.getBody()))c.setContent(""),c.selection.setCursorLocation();else{var t=c.dom.createRng();t.setStart(n.dom(),0),t.setEnd(n.dom(),0),c.selection.setRng(t),c.nodeChanged()}})})}},function(e,n){c.addCommand(n,e)}),ia({mceInsertTable:b(ta,c,!0),mceTableProps:b(ta,c,!1),mceTableRowProps:b(Kc,c),mceTableCellProps:b(Vc,c)},function(e,n){c.addCommand(n,function(){e()})})}},ca=function(e){var n=Me.from(e.dom().documentElement).map(on.fromDom).getOr(e);return{parent:D(n),view:D(e),origin:D(lo(0,0))}},aa=function(e,n){return{parent:D(n),view:D(e),origin:D(lo(0,0))}},la=function(e){var r=B.apply(null,e),o=[];return{bind:function(e){if(e===undefined)throw new Error("Event bind error: undefined handler");o.push(e)},unbind:function(n){o=h(o,function(e){return e!==n})},trigger:function(){for(var e=[],n=0;n<arguments.length;n++)e[n]=arguments[n];var t=r.apply(null,e);p(o,function(e){e(t)})}}},fa={create:function(e){return{registry:k(e,function(e){return{bind:e.bind,unbind:e.unbind}}),trigger:k(e,function(e){return e.trigger})}}},sa=function(e,n,t,r){e.dom().removeEventListener(n,t,r)},da=D(!0),ma={resolve:Eo("ephox-dragster").resolve},ga=ai(["compare","extract","mutate","sink"]),pa=ai(["element","start","stop","destroy"]),ha=ai(["forceDrop","drop","move","delayDrop"]),va=ga({compare:function(e,n){return lo(n.left()-e.left(),n.top()-e.top())},extract:function(e){return Me.some(lo(e.x(),e.y()))},sink:function(e,n){var t=function(e){var n=$c({layerClass:ma.resolve("blocker")},e),t=on.fromTag("div");U(t,"role","presentation"),re(t,{position:"fixed",left:"0px",top:"0px",width:"100%",height:"100%"}),Ro(t,ma.resolve("blocker")),Ro(t,n.layerClass);return{element:function(){return t},destroy:function(){Wn(t)}}}(n),r=Ki(t.element(),"mousedown",e.forceDrop),o=Ki(t.element(),"mouseup",e.drop),i=Ki(t.element(),"mousemove",e.move),u=Ki(t.element(),"mouseout",e.delayDrop);return pa({element:t.element,start:function(e){Mn(e,t.element())},stop:function(){Wn(t.element())},destroy:function(){t.destroy(),o.unbind(),i.unbind(),u.unbind(),r.unbind()}})},mutate:function(e,n){e.mutate(n.left(),n.top())}});function ba(){var r=Me.none(),t=fa.create({move:la(["info"])});return{onEvent:function(e,n){n.extract(e).each(function(e){(function(n,t){var e=r.map(function(e){return n.compare(e,t)});return r=Me.some(t),e})(n,e).each(function(e){t.trigger.move(e)})})},reset:function(){r=Me.none()},events:t.registry}}function wa(){var e=function r(){return{onEvent:T,reset:T}}(),n=ba(),t=e;return{on:function(){t.reset(),t=n},off:function(){t.reset(),t=e},isOn:function(){return t===n},onEvent:function(e,n){t.onEvent(e,n)},events:n.events}}function ya(){var t=fa.create({drag:la(["xDelta","yDelta","target"])}),r=Me.none(),e=function(){var t=fa.create({drag:la(["xDelta","yDelta"])});return{mutate:function(e,n){t.trigger.drag(e,n)},events:t.registry}}();return e.events.drag.bind(function(n){r.each(function(e){t.trigger.drag(n.xDelta(),n.yDelta(),e)})}),{assign:function(e){r=Me.some(e)},get:function(){return r},mutate:e.mutate,events:t.registry}}function Ca(e){return"true"===V(e,"contenteditable")}function Sa(o,n,i){function e(e,n){return Me.from(V(e,n))}var t=ya(),r=vl(t,{}),u=Me.none();function c(e,n){return Hu.getInt(e,n)-parseInt(V(e,"data-initial-"+n),10)}function a(e,n){m.trigger.startAdjust(),t.assign(e),U(e,"data-initial-"+n,parseInt(oe(e,n),10)),Ro(e,bl),te(e,"opacity","0.2"),r.go(o.parent())}function l(e){return In(e,o.view())}function f(e){return et(e,"table",l).filter(function(e){return function(e,n){return et(e,"[contenteditable]",n)}(e,l).exists(Ca)})}t.events.drag.bind(function(t){e(t.target(),"data-row").each(function(e){var n=Hu.getInt(t.target(),"top");te(t.target(),"top",n+t.yDelta()+"px")}),e(t.target(),"data-column").each(function(e){var n=Hu.getInt(t.target(),"left");te(t.target(),"left",n+t.xDelta()+"px")})}),r.events.stop.bind(function(){t.get().each(function(r){u.each(function(t){e(r,"data-row").each(function(e){var n=c(r,"top");Y(r,"data-initial-top"),m.trigger.adjustHeight(t,n,parseInt(e,10))}),e(r,"data-column").each(function(e){var n=c(r,"left");Y(r,"data-initial-left"),m.trigger.adjustWidth(t,n,parseInt(e,10))}),au(o,t,i,n)})})});var s=Ki(o.parent(),"mousedown",function(e){du(e.target())&&a(e.target(),"top"),mu(e.target())&&a(e.target(),"left")}),d=Ki(o.view(),"mouseover",function(e){f(e.target()).fold(function(){ee(e.target())&&su(o)},function(e){u=Me.some(e),au(o,e,i,n)})}),m=fa.create({adjustHeight:la(["table","delta","row"]),adjustWidth:la(["table","delta","column"]),startAdjust:la([])});return{destroy:function(){s.unbind(),d.unbind(),r.destroy(),su(o)},refresh:function(e){au(o,e,i,n)},on:r.on,off:r.off,hideBars:b(lu,o),showBars:b(fu,o),events:m.registry}}function xa(e,n){return bi(e.dom())/bi(n.dom())*100+"%"}function Ra(t,e){return lt.table(t,e).bind(function(e){var n=lt.cells(e);return C(n,function(e){return In(t,e)}).map(function(e){return{index:D(e),all:D(n)}})})}function Ta(e,n,t){var r=e.document.createRange();return function(t,e){e.fold(function(e){t.setStartBefore(e.dom())},function(e,n){t.setStart(e.dom(),n)},function(e){t.setStartAfter(e.dom())})}(r,n),function(t,e){e.fold(function(e){t.setEndBefore(e.dom())},function(e,n){t.setEnd(e.dom(),n)},function(e){t.setEndAfter(e.dom())})}(r,t),r}function Oa(e,n,t,r,o){var i=e.document.createRange();return i.setStart(n.dom(),t),i.setEnd(r.dom(),o),i}function Da(e){return{left:D(e.left),top:D(e.top),right:D(e.right),bottom:D(e.bottom),width:D(e.width),height:D(e.height)}}function Aa(e,n,t){return n(on.fromDom(t.startContainer),t.startOffset,on.fromDom(t.endContainer),t.endOffset)}function Ea(e,n){return function(e,n){var t=n.ltr();return t.collapsed?n.rtl().filter(function(e){return!1===e.collapsed}).map(function(e){return Bl.rtl(on.fromDom(e.endContainer),e.endOffset,on.fromDom(e.startContainer),e.startOffset)}).getOrThunk(function(){return Aa(0,Bl.ltr,t)}):Aa(0,Bl.ltr,t)}(0,function(o,e){return e.match({domRange:function(e){return{ltr:D(e),rtl:Me.none}},relative:function(e,n){return{ltr:Z(function(){return Ta(o,e,n)}),rtl:Z(function(){return Me.some(Ta(o,n,e))})}},exact:function(e,n,t,r){return{ltr:Z(function(){return Oa(o,e,n,t,r)}),rtl:Z(function(){return Me.some(Oa(o,t,r,e,n))})}}})}(e,n))}function Na(e,n,t){return n>=e.left&&n<=e.right&&t>=e.top&&t<=e.bottom}function ka(t,r,e,n,o){function i(e){var n=t.dom().createRange();return n.setStart(r.dom(),e),n.collapse(!0),n}var u=ht(r).length,c=function(e,n,t,r,o){if(0===o)return 0;if(n===r)return o-1;for(var i=r,u=1;u<o;u++){var c=e(u),a=Math.abs(n-c.left);if(t<=c.bottom){if(t<c.top||i<a)return u-1;i=a}}return 0}(function(e){return i(e).getBoundingClientRect()},e,n,o.right,u);return i(c)}function Ia(e,n){return n-e.left<e.right-n}function Ba(e,n,t){var r=e.dom().createRange();return r.selectNode(n.dom()),r.collapse(t),r}function Pa(n,e,t){var r=n.dom().createRange();r.selectNode(e.dom());var o=r.getBoundingClientRect(),i=Ia(o,t);return(!0===i?Ct:St)(e).map(function(e){return Ba(n,e,i)})}function Ma(e,n,t){var r=n.dom().getBoundingClientRect(),o=Ia(r,t);return Me.some(Ba(e,n,o))}function Wa(e,n,t,r){var o=e.dom().createRange();o.selectNode(n.dom());var i=o.getBoundingClientRect();return function(e,n,t,r){var o=e.dom().createRange();o.selectNode(n.dom());var i=o.getBoundingClientRect(),u=Math.max(i.left,Math.min(i.right,t)),c=Math.max(i.top,Math.min(i.bottom,r));return Ml(e,n,u,c)}(e,n,Math.max(i.left,Math.min(i.right,t)),Math.max(i.top,Math.min(i.bottom,r)))}function _a(e,n){var t=en(e);return"input"===t?El.after(e):l(["br","img"],t)?0===n?El.before(e):El.after(e):El.on(e,n)}function La(e,n){var t=e.fold(El.before,_a,El.after),r=n.fold(El.before,_a,El.after);return kl.relative(t,r)}function ja(e,n,t,r){var o=_a(e,n),i=_a(t,r);return kl.relative(o,i)}function za(e,n,t,r){var o=function(e,n,t,r){var o=he(e).dom().createRange();return o.setStart(e.dom(),n),o.setEnd(t.dom(),r),o}(e,n,t,r),i=In(e,t)&&n===r;return o.collapsed&&!i}function Ha(e,n){Me.from(e.getSelection()).each(function(e){e.removeAllRanges(),e.addRange(n)})}function Fa(e,n,t,r,o){var i=Oa(e,n,t,r,o);Ha(e,i)}function Ua(u,e){return Ea(u,e).match({ltr:function(e,n,t,r){Fa(u,e,n,t,r)},rtl:function(e,n,t,r){var o=u.getSelection();if(o.setBaseAndExtent)o.setBaseAndExtent(e.dom(),n,t.dom(),r);else if(o.extend)try{!function(e,n,t,r,o,i){n.collapse(t.dom(),r),n.extend(o.dom(),i)}(0,o,e,n,t,r)}catch(i){Fa(u,t,r,e,n)}else Fa(u,t,r,e,n)}})}function qa(e,n,t,r,o){var i=ja(n,t,r,o);Ua(e,i)}function Va(e,n,t){var r=La(n,t);Ua(e,r)}function Ga(e){function n(e,n,t,r){return Oa(o,e,n,t,r)}var o=kl.getWin(e).dom(),t=function(e){return e.match({domRange:function(e){var n=on.fromDom(e.startContainer),t=on.fromDom(e.endContainer);return ja(n,e.startOffset,t,e.endOffset)},relative:La,exact:ja})}(e);return Ea(o,t).match({ltr:n,rtl:n})}function Ya(e){var n=on.fromDom(e.anchorNode),t=on.fromDom(e.focusNode);return za(n,e.anchorOffset,t,e.focusOffset)?Me.some(Dl.create(n,e.anchorOffset,t,e.focusOffset)):function(e){if(0<e.rangeCount){var n=e.getRangeAt(0),t=e.getRangeAt(e.rangeCount-1);return Me.some(Dl.create(on.fromDom(n.startContainer),n.startOffset,on.fromDom(t.endContainer),t.endOffset))}return Me.none()}(e)}function Ka(e,n){var t=function(e,n){var t=e.document.createRange();return Il(t,n),t}(e,n);Ha(e,t)}function Xa(e){return function(e){return Me.from(e.getSelection()).filter(function(e){return 0<e.rangeCount}).bind(Ya)}(e).map(function(e){return kl.exact(e.start(),e.soffset(),e.finish(),e.foffset())})}function $a(e,n){return function(e){var n=e.getClientRects(),t=0<n.length?n[0]:e.getBoundingClientRect();return 0<t.width||0<t.height?Me.some(t).map(Da):Me.none()}(Pl(e,n))}function Ja(e,n,t){return function(e,n,t){var r=on.fromDom(e.document);return Wl(r,n,t).map(function(e){return Dl.create(on.fromDom(e.startContainer),e.startOffset,on.fromDom(e.endContainer),e.endOffset)})}(e,n,t)}function Qa(e,n,t,r){return Ll(e,n,Tl(t),r)}function Za(e,n,t,r){return Ll(e,n,Ol(t),r)}function el(e,n){var t=kl.exact(n,0,n,0);return Ga(t)}function nl(e,n){return function(e){return 0===e.length?Me.none():Me.some(e[e.length-1])}(Be(n,"tr")).bind(function(e){return Zn(e,"td,th").map(function(e){return el(0,e)})})}function tl(e,n,t,r){return void 0===r&&(r=Yl),e.property().parent(n).map(function(e){return Gl(e,r)})}function rl(n){return function(e){return 0===n.property().children(e).length}}function ol(e,n){return function(e,n,t){return ef(e,n,rl(e),t)}(tf,e,n)}function il(e,n){return function(e,n,t){return nf(e,n,rl(e),t)}(tf,e,n)}function ul(e){return et(e,"tr")}function cl(e){return"br"===en(e)}function al(n,e,t,r){return function(e,n){return Se(e,n).filter(cl).orThunk(function(){return Se(e,n-1).filter(cl)})}(e,t).bind(function(e){return r.traverse(e).fold(function(){return lf(e,r.gather,n).map(r.relative)},function(e){return function(r){return ve(r).bind(function(n){var t=Ce(n);return af(t,r).map(function(e){return cf(n,t,r,e)})})}(e).map(function(e){return El.on(e.parent(),e.index())})})})}function ll(e){return mf.nu({left:e.left,top:e.top,right:e.right,bottom:e.bottom})}function fl(e,n){return Me.some(e.getRect(n))}function sl(n,e,t){return function(e,n,t){return Xn(function(e,n){return n(e)},$n,e,n,t)}(e,uc).fold(D(!1),function(e){return pf(n,e).exists(function(e){return function(e,n){return e.left()<n.left()||Math.abs(n.right()-e.left())<1||e.left()>n.right()}(t,e)})})}function dl(n,t,e){var r=n.move(e,5),o=wf(t,n,e,r,100).getOr(r);return function(e,n,t){return e.point(n)>t.getInnerHeight()?Me.some(e.point(n)-t.getInnerHeight()):e.point(n)<0?Me.some(-e.point(n)):Me.none()}(n,o,t).fold(function(){return t.situsFromPoint(o.left(),n.point(o))},function(e){return t.scrollBy(0,e),t.situsFromPoint(o.left(),n.point(o)-e)})}function ml(e,n){return function(e,n,t){return $n(e,n,t).isSome()}(e,function(e){return ve(e).exists(function(e){return In(e,n)})})}function gl(n,r,o,e,i){return et(e,"td,th",r).bind(function(t){return et(t,"table",r).bind(function(e){return ml(i,e)?Of(n,r,o).bind(function(n){return et(n.finish(),"td,th",r).map(function(e){return{start:D(t),finish:D(e),range:D(n)}})}):Me.none()})})}function pl(e,n){return et(e,"td,th",n)}var hl=function(n,t,e){function r(){l.stop(),u.isOn()&&(u.off(),i.trigger.stop())}var o=!1,i=fa.create({start:la([]),stop:la([])}),u=wa(),c=function(t,r){var o=null;return{cancel:function(){null!==o&&(f.clearTimeout(o),o=null)},throttle:function(){for(var e=[],n=0;n<arguments.length;n++)e[n]=arguments[n];null!==o&&f.clearTimeout(o),o=f.setTimeout(function(){t.apply(null,e),o=null},r)}}}(r,200);u.events.move.bind(function(e){t.mutate(n,e.info())});function a(t){return function(){for(var e=[],n=0;n<arguments.length;n++)e[n]=arguments[n];o&&t.apply(null,e)}}var l=t.sink(ha({forceDrop:r,drop:a(r),move:a(function(e){c.cancel(),u.onEvent(e,t)}),delayDrop:a(c.throttle)}),e);return{element:l.element,go:function(e){l.start(e),u.on(),i.trigger.start()},on:function(){o=!0},off:function(){o=!1},destroy:function(){l.destroy()},events:i.registry}},vl=function(e,n){void 0===n&&(n={});var t=n.mode!==undefined?n.mode:va;return hl(e,t,n)},bl=tu.resolve("resizer-bar-dragging"),wl=function(e,t){var r=go.height,n=Sa(e,t,r),o=fa.create({beforeResize:la(["table"]),afterResize:la(["table"]),startDrag:la([])});return n.events.adjustHeight.bind(function(e){o.trigger.beforeResize(e.table());var n=r.delta(e.delta(),e.table());Ku(e.table(),n,e.row(),r),o.trigger.afterResize(e.table())}),n.events.startAdjust.bind(function(e){o.trigger.startDrag()}),n.events.adjustWidth.bind(function(e){o.trigger.beforeResize(e.table());var n=t.delta(e.delta(),e.table());Yu(e.table(),n,e.column(),t),o.trigger.afterResize(e.table())}),{on:n.on,off:n.off,hideBars:n.hideBars,showBars:n.showBars,destroy:n.destroy,events:o.registry}},yl=function(e,n){return e.inline?aa(gc(e),function(){var e=on.fromTag("div");return re(e,{position:"static",height:"0",width:"0",padding:"0",margin:"0",border:"0"}),Mn(un(),e),e}()):ca(on.fromDom(e.getDoc()))},Cl=function(e,n){e.inline&&Wn(n.parent())},Sl=function(u){function c(e){return"TABLE"===e.nodeName}function r(e){var n=u.dom.getStyle(e,"width")||u.dom.getAttrib(e,"width");return Me.from(n).filter(function(e){return 0<e.length})}function e(){return i}var a,l,o=Me.none(),i=Me.none(),f=Me.none(),s=/(\d+(\.\d+)?)%/;return u.on("init",function(){var e=ho(bc.directionAt),n=yl(u);if(f=Me.some(n),function(e){var n=e.getParam("object_resizing",!0);return _e(n)?"table"===n:n}(u)&&function(e){return e.getParam("table_resize_bars",!0,"boolean")}(u)){var t=wl(n,e);t.on(),t.events.startDrag.bind(function(e){o=Me.some(u.selection.getRng())}),t.events.beforeResize.bind(function(e){var n=e.table().dom();Ii(u,n,bi(n),wi(n))}),t.events.afterResize.bind(function(e){var n=e.table(),t=n.dom();Ci(n),o.each(function(e){u.selection.setRng(e),u.focus()}),Bi(u,t,bi(t),wi(t)),u.undoManager.add()}),i=Me.some(t)}}),u.on("ObjectResizeStart",function(e){var n=e.target;if(c(n)){var t=r(n).map(function(e){return s.test(e)}).getOr(!1);t&&Ei(u)?function(e){te(on.fromDom(e),"width",bi(e).toString()+"px")}(n):!t&&function(e){return!0===e.getParam("table_responsive_width")}(u)&&function(e){var n=on.fromDom(e);ve(n).map(function(e){return xa(n,e)}).each(function(e){te(n,"width",e),p(Be(n,"tr"),function(n){p(Ce(n),function(e){te(e,"width",xa(e,n))})})})}(n),a=e.width,l=r(n).getOr("")}}),u.on("ObjectResized",function(e){var n=e.target;if(c(n)){var t=n;if(s.test(l)){var r=parseFloat(s.exec(l)[1]),o=e.width*r/a;u.dom.setStyle(t,"width",o+"%")}else{var i=[];Dc.each(t.rows,function(e){Dc.each(e.cells,function(e){var n=u.dom.getStyle(e,"width",!0);i.push({cell:e,width:n})})}),Dc.each(i,function(e){u.dom.setStyle(e.cell,"width",e.width),u.dom.setAttrib(e.cell,"width",null)})}}}),u.on("SwitchMode",function(){e().each(function(e){u.readonly?e.hideBars():e.showBars()})}),{lazyResize:e,lazyWire:function(){return f.getOr(ca(on.fromDom(u.getBody())))},destroy:function(){i.each(function(e){e.destroy()}),f.each(function(e){Cl(u,e)})}}},xl=Sr([{none:["current"]},{first:["current"]},{middle:["current","target"]},{last:["current"]}]),Rl=fn(fn({},xl),{none:function(e){return void 0===e&&(e=undefined),xl.none(e)}}),Tl=function(n,e){return Ra(n,e).fold(function(){return Rl.none(n)},function(e){return e.index()+1<e.all().length?Rl.middle(n,e.all()[e.index()+1]):Rl.last(n)})},Ol=function(n,e){return Ra(n,e).fold(function(){return Rl.none()},function(e){return 0<=e.index()-1?Rl.middle(n,e.all()[e.index()-1]):Rl.first(n)})},Dl={create:B("start","soffset","finish","foffset")},Al=Sr([{before:["element"]},{on:["element","offset"]},{after:["element"]}]),El={before:Al.before,on:Al.on,after:Al.after,cata:function(e,n,t,r){return e.fold(n,t,r)},getStart:function(e){return e.fold(o,o,o)}},Nl=Sr([{domRange:["rng"]},{relative:["startSitu","finishSitu"]},{exact:["start","soffset","finish","foffset"]}]),kl={domRange:Nl.domRange,relative:Nl.relative,exact:Nl.exact,exactFromRange:function(e){return Nl.exact(e.start(),e.soffset(),e.finish(),e.foffset())},getWin:function(e){return function(e){return on.fromDom(e.dom().ownerDocument.defaultView)}(function(e){return e.match({domRange:function(e){return on.fromDom(e.startContainer)},relative:function(e,n){return El.getStart(e)},exact:function(e,n,t,r){return e}})}(e))},range:Dl.create},Il=function(e,n){e.selectNodeContents(n.dom())},Bl=Sr([{ltr:["start","soffset","finish","foffset"]},{rtl:["start","soffset","finish","foffset"]}]),Pl=function(i,e){return Ea(i,e).match({ltr:function(e,n,t,r){var o=i.document.createRange();return o.setStart(e.dom(),n),o.setEnd(t.dom(),r),o},rtl:function(e,n,t,r){var o=i.document.createRange();return o.setStart(t.dom(),r),o.setEnd(e.dom(),n),o}})},Ml=function(e,n,t,r){return tn(n)?function(n,t,r,o){var e=n.dom().createRange();e.selectNode(t.dom());var i=e.getClientRects();return bo(i,function(e){return Na(e,r,o)?Me.some(e):Me.none()}).map(function(e){return ka(n,t,r,o,e)})}(e,n,t,r):function(n,e,t,r){var o=n.dom().createRange(),i=Ce(e);return bo(i,function(e){return o.selectNode(e.dom()),Na(o.getBoundingClientRect(),t,r)?Ml(n,e,t,r):Me.none()})}(e,n,t,r)},Wl=document.caretPositionFromPoint?function(t,e,n){return Me.from(t.dom().caretPositionFromPoint(e,n)).bind(function(e){if(null===e.offsetNode)return Me.none();var n=t.dom().createRange();return n.setStart(e.offsetNode,e.offset),n.collapse(),Me.some(n)})}:document.caretRangeFromPoint?function(e,n,t){return Me.from(e.dom().caretRangeFromPoint(n,t))}:function(t,r,o){return on.fromPoint(t,r,o).bind(function(e){function n(){return function(e,n,t){return(0===Ce(n).length?Ma:Pa)(e,n,t)}(t,e,r)}return 0===Ce(e).length?n():Wa(t,e,r,o).orThunk(n)})},_l=tinymce.util.Tools.resolve("tinymce.util.VK"),Ll=function(r,e,n,o,t){return n.fold(Me.none,Me.none,function(e,n){return Ct(n).map(function(e){return el(0,e)})},function(t){return lt.table(t,e).bind(function(e){var n=Er.noMenu(t);return r.undoManager.transact(function(){o.insertRowsAfter(e,n)}),nl(0,e)})})},jl=["table","li","dl"],zl={handle:function(n,t,r,o){if(n.keyCode===_l.TAB){var i=gc(t),u=function(e){var n=en(e);return In(e,i)||l(jl,n)},e=t.selection.getRng();if(e.collapsed){var c=on.fromDom(e.startContainer);lt.cell(c,u).each(function(e){n.preventDefault(),(n.shiftKey?Za:Qa)(t,u,e,r,o).each(function(e){t.selection.setRng(e)})})}}}},Hl={create:B("selection","kill")},Fl=function(e,n,t,r){return{start:D(El.on(e,n)),finish:D(El.on(t,r))}},Ul={convertToRange:function(e,n){var t=Pl(e,n);return Dl.create(on.fromDom(t.startContainer),t.startOffset,on.fromDom(t.endContainer),t.endOffset)},makeSitus:Fl},ql=function(t,e,r,n,o){return In(r,n)?Me.none():dr(r,n,e).bind(function(e){var n=e.boxes().getOr([]);return 0<n.length?(o(t,n,e.start(),e.finish()),Me.some(Hl.create(Me.some(Ul.makeSitus(r,0,r,wt(r))),!0))):Me.none()})},Vl={sync:function(t,r,e,n,o,i,u){return In(e,o)&&n===i?Me.none():et(e,"td,th",r).bind(function(n){return et(o,"td,th",r).bind(function(e){return ql(t,r,n,e,u)})})},detect:ql,update:function(e,n,t,r,o){return gr(r,e,n,o.firstSelectedSelector(),o.lastSelectedSelector()).map(function(e){return o.clearBeforeUpdate(t),o.selectRange(t,e.boxes(),e.start(),e.finish()),e.boxes()})}},Gl=B("item","mode"),Yl=function(e,n,t,r){return void 0===r&&(r=Kl),t.sibling(e,n).map(function(e){return Gl(e,r)})},Kl=function(e,n,t,r){void 0===r&&(r=Kl);var o=e.property().children(n);return t.first(o).map(function(e){return Gl(e,r)})},Xl=[{current:tl,next:Yl,fallback:Me.none()},{current:Yl,next:Kl,fallback:Me.some(tl)},{current:Kl,next:Kl,fallback:Me.some(Yl)}],$l=function(n,t,r,o,e){return void 0===e&&(e=Xl),y(e,function(e){return e.current===r}).bind(function(e){return e.current(n,t,o,e.next).orThunk(function(){return e.fallback.bind(function(e){return $l(n,t,e,o)})})})},Jl=function(){return{sibling:function(e,n){return e.query().prevSibling(n)},first:function(e){return 0<e.length?Me.some(e[e.length-1]):Me.none()}}},Ql=function(){return{sibling:function(e,n){return e.query().nextSibling(n)},first:function(e){return 0<e.length?Me.some(e[0]):Me.none()}}},Zl=function(n,e,t,r,o,i){return $l(n,e,r,o).bind(function(e){return i(e.item())?Me.none():t(e.item())?Me.some(e.item()):Zl(n,e.item(),t,e.mode(),o,i)})},ef=function(e,n,t,r){return Zl(e,n,t,Yl,Jl(),r)},nf=function(e,n,t,r){return Zl(e,n,t,Yl,Ql(),r)},tf=$t(),rf=B("element","offset"),of=(B("element","deltaOffset"),B("element","start","finish"),B("begin","end"),B("element","text"),Sr([{none:["message"]},{success:[]},{failedUp:["cell"]},{failedDown:["cell"]}])),uf=fn(fn({},of),{verify:function(t,n,e,r,o,i,u){return et(r,"td,th",u).bind(function(e){return et(n,"td,th",u).map(function(n){return In(e,n)?In(r,e)&&wt(e)===o?i(n):of.none("in same cell"):fr.sharedOne(ul,[e,n]).fold(function(){return function(e,n,t){var r=e.getRect(n),o=e.getRect(t);return o.right>r.left&&o.left<r.right}(t,n,e)?of.success():i(n)},function(e){return i(n)})})}).getOr(of.none("default"))},cata:function(e,n,t,r,o){return e.fold(n,t,r,o)}}),cf=(B("ancestor","descendants","element","index"),B("parent","children","element","index")),af=function(e,n){return C(e,b(In,n))},lf=function(e,n,t){return n(e,t).bind(function(e){return tn(e)&&0===ht(e).trim().length?lf(e,n,t):Me.some(e)})},ff=function(e,n,t,r){return(cl(n)?function(e,n,t){return t.traverse(n).orThunk(function(){return lf(n,t.gather,e)}).map(t.relative)}(e,n,r):al(e,n,t,r)).map(function(e){return{start:D(e),finish:D(e)}})},sf=function(e){return uf.cata(e,function(e){return Me.none()},function(){return Me.none()},function(e){return Me.some(rf(e,0))},function(e){return Me.some(rf(e,wt(e)))})},df=Xe(["left","top","right","bottom"],[]),mf={nu:df,moveUp:function(e,n){return df({left:e.left(),top:e.top()-n,right:e.right(),bottom:e.bottom()-n})},moveDown:function(e,n){return df({left:e.left(),top:e.top()+n,right:e.right(),bottom:e.bottom()+n})},moveBottomTo:function(e,n){var t=e.bottom()-e.top();return df({left:e.left(),top:n-t,right:e.right(),bottom:n})},moveTopTo:function(e,n){var t=e.bottom()-e.top();return df({left:e.left(),top:n,right:e.right(),bottom:n+t})},getTop:function(e){return e.top()},getBottom:function(e){return e.bottom()},translate:function(e,n,t){return df({left:e.left()+n,top:e.top()+t,right:e.right()+n,bottom:e.bottom()+t})},toString:function(e){return"("+e.left()+", "+e.top()+") -> ("+e.right()+", "+e.bottom()+")"}},gf=function(e,n,t){return nn(n)?fl(e,n).map(ll):tn(n)?function(e,n,t){return 0<=t&&t<wt(n)?e.getRangedRect(n,t,n,t+1):0<t?e.getRangedRect(n,t-1,n,t):Me.none()}(e,n,t).map(ll):Me.none()},pf=function(e,n){return nn(n)?fl(e,n).map(ll):tn(n)?e.getRangedRect(n,0,n,wt(n)).map(ll):Me.none()},hf=Sr([{none:[]},{retry:["caret"]}]),vf={point:mf.getTop,adjuster:function(e,n,t,r,o){var i=mf.moveUp(o,5);return Math.abs(t.top()-r.top())<1?hf.retry(i):t.bottom()<o.top()?hf.retry(i):t.bottom()===o.top()?hf.retry(mf.moveUp(o,1)):sl(e,n,o)?hf.retry(mf.translate(i,5,0)):hf.none()},move:mf.moveUp,gather:ol},bf={point:mf.getBottom,adjuster:function(e,n,t,r,o){var i=mf.moveDown(o,5);return Math.abs(t.bottom()-r.bottom())<1?hf.retry(i):t.top()>o.bottom()?hf.retry(i):t.top()===o.bottom()?hf.retry(mf.moveDown(o,1)):sl(e,n,o)?hf.retry(mf.translate(i,5,0)):hf.none()},move:mf.moveDown,gather:il},wf=function(t,r,o,i,u){return 0===u?Me.some(i):function(e,n,t){return e.elementFromPoint(n,t).filter(function(e){return"table"===en(e)}).isSome()}(t,i.left(),r.point(i))?function(e,n,t,r,o){return wf(e,n,t,n.move(r,5),o)}(t,r,o,i,u-1):t.situsFromPoint(i.left(),r.point(i)).bind(function(e){return e.start().fold(Me.none,function(n){return pf(t,n).bind(function(e){return r.adjuster(t,n,e,o,i).fold(Me.none,function(e){return wf(t,r,o,e,u-1)})}).orThunk(function(){return Me.some(i)})},Me.none)})},yf={tryUp:b(dl,vf),tryDown:b(dl,bf),ieTryUp:function(e,n){return e.situsFromPoint(n.left(),n.top()-5)},ieTryDown:function(e,n){return e.situsFromPoint(n.left(),n.bottom()+5)},getJumpSize:D(5)},Cf=me(),Sf=function(r,o,i,u,c,a){return 0===a?Me.none():Tf(r,o,i,u,c).bind(function(e){var n=r.fromSitus(e),t=uf.verify(r,i,u,n.finish(),n.foffset(),c.failure,o);return uf.cata(t,function(){return Me.none()},function(){return Me.some(e)},function(e){return In(i,e)&&0===u?xf(r,i,u,mf.moveUp,c):Sf(r,o,e,0,c,a-1)},function(e){return In(i,e)&&u===wt(e)?xf(r,i,u,mf.moveDown,c):Sf(r,o,e,wt(e),c,a-1)})})},xf=function(n,e,t,r,o){return gf(n,e,t).bind(function(e){return Rf(n,o,r(e,yf.getJumpSize()))})},Rf=function(e,n,t){return Cf.browser.isChrome()||Cf.browser.isSafari()||Cf.browser.isFirefox()||Cf.browser.isEdge()?n.otherRetry(e,t):Cf.browser.isIE()?n.ieRetry(e,t):Me.none()},Tf=function(n,e,t,r,o){return gf(n,t,r).bind(function(e){return Rf(n,o,e)})},Of=function(n,t,r){return function(o,i,u){return o.getSelection().bind(function(r){return ff(i,r.finish(),r.foffset(),u).fold(function(){return Me.some(rf(r.finish(),r.foffset()))},function(e){var n=o.fromSitus(e),t=uf.verify(o,r.finish(),r.foffset(),n.finish(),n.foffset(),u.failure,i);return sf(t)})})}(n,t,r).bind(function(e){return Sf(n,t,e.element(),e.offset(),r,20).map(n.fromSitus)})},Df=me(),Af=function(e,n,t,r,o,i){return Df.browser.isIE()?Me.none():i(r,n).orThunk(function(){return gl(e,n,t,r,o).map(function(e){var n=e.range();return Hl.create(Me.some(Ul.makeSitus(n.start(),n.soffset(),n.finish(),n.foffset())),!0)})})},Ef=function(e,n,t,r,o,i,u){return gl(e,t,r,o,i).bind(function(e){return Vl.detect(n,t,e.start(),e.finish(),u)})},Nf=function(e,r){return et(e,"tr",r).bind(function(t){return et(t,"table",r).bind(function(e){var n=Be(e,"tr");return In(t,n[0])?function(e,n,t){return ef(tf,e,n,t)}(e,function(e){return St(e).isSome()},r).map(function(e){var n=wt(e);return Hl.create(Me.some(Ul.makeSitus(e,n,e,n)),!0)}):Me.none()})})},kf=function(e,r){return et(e,"tr",r).bind(function(t){return et(t,"table",r).bind(function(e){var n=Be(e,"tr");return In(t,n[n.length-1])?function(e,n,t){return nf(tf,e,n,t)}(e,function(e){return Ct(e).isSome()},r).map(function(e){return Hl.create(Me.some(Ul.makeSitus(e,0,e,0)),!0)}):Me.none()})})};function If(n){return function(e){return e===n}}function Bf(c){return{elementFromPoint:function(e,n){return on.fromPoint(on.fromDom(c.document),e,n)},getRect:function(e){return e.dom().getBoundingClientRect()},getRangedRect:function(e,n,t,r){var o=kl.exact(e,n,t,r);return $a(c,o).map(jf)},getSelection:function(){return Xa(c).map(function(e){return Ul.convertToRange(c,e)})},fromSitus:function(e){var n=kl.relative(e.start(),e.finish());return Ul.convertToRange(c,n)},situsFromPoint:function(e,n){return Ja(c,e,n).map(function(e){return Fl(e.start(),e.soffset(),e.finish(),e.foffset())})},clearSelection:function(){!function(e){e.getSelection().removeAllRanges()}(c)},collapseSelection:function(u){void 0===u&&(u=!1),Xa(c).each(function(e){return e.fold(function(e){return e.collapse(u)},function(e,n){var t=u?e:n;Va(c,t,t)},function(e,n,t,r){var o=u?e:t,i=u?n:r;qa(c,o,i,o,i)})})},setSelection:function(e){qa(c,e.start(),e.soffset(),e.finish(),e.foffset())},setRelativeSelection:function(e,n){Va(c,e,n)},selectContents:function(e){Ka(c,e)},getInnerHeight:function(){return c.innerHeight},getScrollY:function(){return function(e){var n=e!==undefined?e.dom():f.document,t=n.body.scrollLeft||n.documentElement.scrollLeft,r=n.body.scrollTop||n.documentElement.scrollTop;return lo(t,r)}(on.fromDom(c.document)).top()},scrollBy:function(e,n){!function(e,n,t){(t!==undefined?t.dom():f.document).defaultView.scrollBy(e,n)}(e,n,on.fromDom(c.document))}}}function Pf(n,e){p(e,function(e){!function(e,n){Co(e)?e.dom().classList.remove(n):xo(e,n);To(e)}(n,e)})}var Mf={down:{traverse:ye,gather:il,relative:El.before,otherRetry:yf.tryDown,ieRetry:yf.ieTryDown,failure:uf.failedDown},up:{traverse:we,gather:ol,relative:El.before,otherRetry:yf.tryUp,ieRetry:yf.ieTryUp,failure:uf.failedUp}},Wf=If(38),_f=If(40),Lf={ltr:{isBackward:If(37),isForward:If(39)},rtl:{isBackward:If(39),isForward:If(37)},isUp:Wf,isDown:_f,isNavigation:function(e){return 37<=e&&e<=40}},jf=function(e){return{left:e.left(),top:e.top(),right:e.right(),bottom:e.bottom(),width:e.width(),height:e.height()}},zf=(me().browser.isSafari(),B("rows","cols")),Hf={mouse:function(e,n,t,r){var o=function c(o,i,n,u){function t(){r=Me.none()}var r=Me.none();return{mousedown:function(e){u.clear(i),r=pl(e.target(),n)},mouseover:function(e){r.each(function(r){u.clearBeforeUpdate(i),pl(e.target(),n).each(function(t){dr(r,t,n).each(function(e){var n=e.boxes().getOr([]);(1<n.length||1===n.length&&!In(r,t))&&(u.selectRange(i,n,e.start(),e.finish()),o.selectContents(t))})})})},mouseup:function(e){r.each(t)}}}(Bf(e),n,t,r);return{mousedown:o.mousedown,mouseover:o.mouseover,mouseup:o.mouseup}},keyboard:function(e,l,f,s){function d(){return s.clear(l),Me.none()}var m=Bf(e);return{keydown:function(e,n,t,r,o,i){var u=e.raw(),c=u.which,a=!0===u.shiftKey;return mr(l,s.selectedSelector()).fold(function(){return Lf.isDown(c)&&a?b(Ef,m,l,f,Mf.down,r,n,s.selectRange):Lf.isUp(c)&&a?b(Ef,m,l,f,Mf.up,r,n,s.selectRange):Lf.isDown(c)?b(Af,m,f,Mf.down,r,n,kf):Lf.isUp(c)?b(Af,m,f,Mf.up,r,n,Nf):Me.none},function(n){function e(e){return function(){return bo(e,function(e){return Vl.update(e.rows(),e.cols(),l,n,s)}).fold(function(){return pr(l,s.firstSelectedSelector(),s.lastSelectedSelector()).map(function(e){var n=Lf.isDown(c)||i.isForward(c)?El.after:El.before;return m.setRelativeSelection(El.on(e.first(),0),n(e.table())),s.clear(l),Hl.create(Me.none(),!0)})},function(e){return Me.some(Hl.create(Me.none(),!0))})}}return Lf.isDown(c)&&a?e([zf(1,0)]):Lf.isUp(c)&&a?e([zf(-1,0)]):i.isBackward(c)&&a?e([zf(0,-1),zf(-1,0)]):i.isForward(c)&&a?e([zf(0,1),zf(1,0)]):Lf.isNavigation(c)&&!1==a?d:Me.none})()},keyup:function(t,r,o,i,u){return mr(l,s.selectedSelector()).fold(function(){var e=t.raw(),n=e.which;return!1==(!0===e.shiftKey)?Me.none():Lf.isNavigation(n)?Vl.sync(l,f,r,o,i,u,s.selectRange):Me.none()},Me.none)}}},external:function(e,r,n,o){var i=Bf(e);return function(e,t){o.clearBeforeUpdate(r),dr(e,t,n).each(function(e){var n=e.boxes().getOr([]);o.selectRange(r,n,e.start(),e.finish()),i.selectContents(t),i.collapseSelection()})}}},Ff={byClass:function(o){function i(e){var n=Be(e,o.selectedSelector());p(n,t)}var u=function(n){return function(e){Ro(e,n)}}(o.selected()),t=function(n){return function(e){Pf(e,n)}}([o.selected(),o.lastSelected(),o.firstSelected()]);return{clearBeforeUpdate:i,clear:i,selectRange:function(e,n,t,r){i(e),p(n,u),Ro(t,o.firstSelected()),Ro(r,o.lastSelected())},selectedSelector:o.selectedSelector,firstSelectedSelector:o.firstSelectedSelector,lastSelectedSelector:o.lastSelectedSelector}},byAttr:function(o,i,n){function t(e){Y(e,o.selected()),Y(e,o.firstSelected()),Y(e,o.lastSelected())}function u(e){U(e,o.selected(),"1")}function c(e){r(e),n()}var r=function(e){var n=Be(e,o.selectedSelector());p(n,t)};return{clearBeforeUpdate:r,clear:c,selectRange:function(e,n,t,r){c(e),p(n,u),U(t,o.firstSelected(),"1"),U(r,o.lastSelected(),"1"),i(n,t,r)},selectedSelector:o.selectedSelector,firstSelectedSelector:o.firstSelectedSelector,lastSelectedSelector:o.lastSelectedSelector}}},Uf={getOtherCells:function(e,n,t){var r=ft(e),o=mt.generate(r);return Fo(o,n).map(function(e){var n=bu(o,t,!1);return{upOrLeftCells:function(e,t,n){var r=e.slice(0,t[t.length-1].row()+1),o=_o(r,n);return x(o,function(e){var n=e.cells().slice(0,t[t.length-1].column()+1);return g(n,function(e){return e.element()})})}(n,e,t),downOrRightCells:function(e,t,n){var r=e.slice(t[0].row()+t[0].rowspan()-1,e.length),o=_o(r,n);return x(o,function(e){var n=e.cells().slice(t[0].column()+t[0].colspan()-1,+e.cells().length);return g(n,function(e){return e.element()})})}(n,e,t)}})}},qf=function(e){return!1===Oo(on.fromDom(e.target),"ephox-snooker-resizer-bar")};function Vf(w,y,e){var C=Xe(["mousedown","mouseover","mouseup","keyup","keydown"],[]),S=Me.none(),a=Sc(w),x=Ff.byAttr(Cr,function(i,u,c){e.targets().each(function(o){lt.table(u).each(function(e){var n=on.fromDom(w.getDoc()),t=Wt.cellOperations(T,n,a),r=Uf.getOtherCells(e,o,t);xc(w,i,u,c,r)})})},function(){Rc(w)});w.on("init",function(e){var r=w.getWin(),o=gc(w),n=pc(w),t=Hf.mouse(r,o,n,x),c=Hf.keyboard(r,o,n,x),i=Hf.external(r,o,n,x);w.on("TableSelectorChange",function(e){i(e.start,e.finish)});function a(e,n){!function(e){return!0===e.raw().shiftKey}(e)||(n.kill()&&e.kill(),n.selection().each(function(e){var n=kl.relative(e.start(),e.finish()),t=Pl(r,n);w.selection.setRng(t)}))}function u(e){var n=v(e);if(n.raw().shiftKey&&Lf.isNavigation(n.raw().which)){var t=w.selection.getRng(),r=on.fromDom(t.startContainer),o=on.fromDom(t.endContainer);c.keyup(n,r,t.startOffset,o,t.endOffset).each(function(e){a(n,e)})}}function l(e){var n=v(e);y().each(function(e){e.hideBars()});var t=w.selection.getRng(),r=on.fromDom(w.selection.getStart()),o=on.fromDom(t.startContainer),i=on.fromDom(t.endContainer),u=bc.directionAt(r).isRtl()?Lf.rtl:Lf.ltr;c.keydown(n,o,t.startOffset,i,t.endOffset,u).each(function(e){a(n,e)}),y().each(function(e){e.showBars()})}function f(e){return e.hasOwnProperty("x")&&e.hasOwnProperty("y")}function s(e){return 0===e.button}function d(e){s(e)&&qf(e)&&t.mousedown(v(e))}function m(e){(function(e){return e.buttons===undefined||0!=(1&e.buttons)})(e)&&qf(e)&&t.mouseover(v(e))}function g(e){s(e)&&qf(e)&&t.mouseup(v(e))}var p,h,v=function(e){function n(){e.stopPropagation()}function t(){e.preventDefault()}var r=on.fromDom(e.target),o=O(t,n);return{target:D(r),x:D(f(e)?e.x:null),y:D(f(e)?e.y:null),stop:n,prevent:t,kill:o,raw:D(e)}},b=(p=R(on.fromDom(o)),h=R(0),{touchEnd:function(e){var n=on.fromDom(e.target);if("td"===en(n)||"th"===en(n)){var t=p.get(),r=h.get();In(t,n)&&e.timeStamp-r<300&&(e.preventDefault(),i(n,n))}p.set(n),h.set(e.timeStamp)}});w.on("mousedown",d),w.on("mouseover",m),w.on("mouseup",g),w.on("touchend",b.touchEnd),w.on("keyup",u),w.on("keydown",l),w.on("NodeChange",function(){var e=w.selection,n=on.fromDom(e.getStart()),t=on.fromDom(e.getEnd());fr.sharedOne(lt.table,[n,t]).fold(function(){x.clear(o)},T)}),S=Me.some(C({mousedown:d,mouseover:m,mouseup:g,keyup:u,keydown:l}))});return{clear:x.clear,destroy:function(){S.each(function(e){})}}}var Gf=function(n){return{get:function(){var e=gc(n);return hr(e,Cr.selectedSelector()).fold(function(){return n.selection.getStart()===undefined?Rr.none():Rr.single(n.selection)},function(e){return Rr.multiple(e)})}}},Yf=function(e,t){function n(){return oa(e).bind(function(n){return lt.table(n).map(function(e){return"caption"===en(n)?Er.notCell(n):Er.forMenu(t,e,n)})})}function r(){i.set(Z(n)()),p(u.get(),function(e){return e()})}function o(n,t){function r(){return i.get().fold(function(){n.setDisabled(!0)},function(e){n.setDisabled(t(e))})}return r(),u.set(u.get().concat([r])),function(){u.set(h(u.get(),function(e){return e!==r}))}}var i=R(Me.none()),u=R([]);return e.on("NodeChange TableSelectorChange",r),{onSetupTable:function(e){return o(e,function(e){return!1})},onSetupCellOrRow:function(e){return o(e,function(e){return"caption"===en(e.element())})},onSetupMergeable:function(e){return o(e,function(e){return e.mergable().isNone()})},onSetupUnmergeable:function(e){return o(e,function(e){return e.unmergable().isNone()})},resetTargets:r,targets:function(){return i.get()}}},Kf={addButtons:function(n,e){n.ui.registry.addMenuButton("table",{tooltip:"Table",icon:"table",fetch:function(e){return e("inserttable | cell row column | advtablesort | tableprops deletetable")}});function t(e){return function(){return n.execCommand(e)}}n.ui.registry.addButton("tableprops",{tooltip:"Table properties",onAction:t("mceTableProps"),icon:"table",onSetup:e.onSetupTable}),n.ui.registry.addButton("tabledelete",{tooltip:"Delete table",onAction:t("mceTableDelete"),icon:"table-delete-table",onSetup:e.onSetupTable}),n.ui.registry.addButton("tablecellprops",{tooltip:"Cell properties",onAction:t("mceTableCellProps"),icon:"table-cell-properties",onSetup:e.onSetupCellOrRow}),n.ui.registry.addButton("tablemergecells",{tooltip:"Merge cells",onAction:t("mceTableMergeCells"),icon:"table-merge-cells",onSetup:e.onSetupMergeable}),n.ui.registry.addButton("tablesplitcells",{tooltip:"Split cell",onAction:t("mceTableSplitCells"),icon:"table-split-cells",onSetup:e.onSetupUnmergeable}),n.ui.registry.addButton("tableinsertrowbefore",{tooltip:"Insert row before",onAction:t("mceTableInsertRowBefore"),icon:"table-insert-row-above",onSetup:e.onSetupCellOrRow}),n.ui.registry.addButton("tableinsertrowafter",{tooltip:"Insert row after",onAction:t("mceTableInsertRowAfter"),icon:"table-insert-row-after",onSetup:e.onSetupCellOrRow}),n.ui.registry.addButton("tabledeleterow",{tooltip:"Delete row",onAction:t("mceTableDeleteRow"),icon:"table-delete-row",onSetup:e.onSetupCellOrRow}),n.ui.registry.addButton("tablerowprops",{tooltip:"Row properties",onAction:t("mceTableRowProps"),icon:"table-row-properties",onSetup:e.onSetupCellOrRow}),n.ui.registry.addButton("tableinsertcolbefore",{tooltip:"Insert column before",onAction:t("mceTableInsertColBefore"),icon:"table-insert-column-before",onSetup:e.onSetupCellOrRow}),n.ui.registry.addButton("tableinsertcolafter",{tooltip:"Insert column after",onAction:t("mceTableInsertColAfter"),icon:"table-insert-column-after",onSetup:e.onSetupCellOrRow}),n.ui.registry.addButton("tabledeletecol",{tooltip:"Delete column",onAction:t("mceTableDeleteCol"),icon:"table-delete-column",onSetup:e.onSetupCellOrRow}),n.ui.registry.addButton("tablecutrow",{tooltip:"Cut row",onAction:t("mceTableCutRow"),icon:"temporary-placeholder",onSetup:e.onSetupCellOrRow}),n.ui.registry.addButton("tablecopyrow",{tooltip:"Copy row",onAction:t("mceTableCopyRow"),icon:"temporary-placeholder",onSetup:e.onSetupCellOrRow}),n.ui.registry.addButton("tablepasterowbefore",{tooltip:"Paste row before",onAction:t("mceTablePasteRowBefore"),icon:"temporary-placeholder",onSetup:e.onSetupCellOrRow}),n.ui.registry.addButton("tablepasterowafter",{tooltip:"Paste row after",onAction:t("mceTablePasteRowAfter"),icon:"temporary-placeholder",onSetup:e.onSetupCellOrRow}),n.ui.registry.addButton("tableinsertdialog",{tooltip:"Insert table",onAction:t("mceInsertTable"),icon:"table"})},addToolbars:function(n){var e=function(e){return e.getParam("table_toolbar","tableprops tabledelete | tableinsertrowbefore tableinsertrowafter tabledeleterow | tableinsertcolbefore tableinsertcolafter tabledeletecol")}(n);0<e.length&&n.ui.registry.addContextToolbar("table",{predicate:function(e){return n.dom.is(e,"table")&&n.getBody().contains(e)},items:e,scope:"node",position:"node"})}},Xf={addMenuItems:function(r,e){function n(e){return function(){return r.execCommand(e)}}function t(e){var n=e.numRows,t=e.numColumns;r.undoManager.transact(function(){Zc(r,t,n)}),r.addVisual()}var o={text:"Table properties",onSetup:e.onSetupTable,onAction:n("mceTableProps")},i={text:"Delete table",icon:"table-delete-table",onSetup:e.onSetupTable,onAction:n("mceTableDelete")},u=[{type:"menuitem",text:"Insert row before",icon:"table-insert-row-above",onAction:n("mceTableInsertRowBefore"),onSetup:e.onSetupCellOrRow},{type:"menuitem",text:"Insert row after",icon:"table-insert-row-after",onAction:n("mceTableInsertRowAfter"),onSetup:e.onSetupCellOrRow},{type:"menuitem",text:"Delete row",icon:"table-delete-row",onAction:n("mceTableDeleteRow"),onSetup:e.onSetupCellOrRow},{type:"menuitem",text:"Row properties",icon:"table-row-properties",onAction:n("mceTableRowProps"),onSetup:e.onSetupCellOrRow},{type:"separator"},{type:"menuitem",text:"Cut row",onAction:n("mceTableCutRow"),onSetup:e.onSetupCellOrRow},{type:"menuitem",text:"Copy row",onAction:n("mceTableCopyRow"),onSetup:e.onSetupCellOrRow},{type:"menuitem",text:"Paste row before",onAction:n("mceTablePasteRowBefore"),onSetup:e.onSetupCellOrRow},{type:"menuitem",text:"Paste row after",onAction:n("mceTablePasteRowAfter"),onSetup:e.onSetupCellOrRow}],c={type:"nestedmenuitem",text:"Row",getSubmenuItems:function(){return u}},a=[{type:"menuitem",text:"Insert column before",icon:"table-insert-column-before",onAction:n("mceTableInsertColBefore"),onSetup:e.onSetupCellOrRow},{type:"menuitem",text:"Insert column after",icon:"table-insert-column-after",onAction:n("mceTableInsertColAfter"),onSetup:e.onSetupCellOrRow},{type:"menuitem",text:"Delete column",icon:"table-delete-column",onAction:n("mceTableDeleteCol"),onSetup:e.onSetupCellOrRow}],l={type:"nestedmenuitem",text:"Column",getSubmenuItems:function(){return a}},f=[{type:"menuitem",text:"Cell properties",icon:"table-cell-properties",onAction:n("mceTableCellProps"),onSetup:e.onSetupCellOrRow},{type:"menuitem",text:"Merge cells",icon:"table-merge-cells",onAction:n("mceTableMergeCells"),onSetup:e.onSetupMergeable},{type:"menuitem",text:"Split cell",icon:"table-split-cells",onAction:n("mceTableSplitCells"),onSetup:e.onSetupUnmergeable}],s={type:"nestedmenuitem",text:"Cell",getSubmenuItems:function(){return f}};!1===function(e){return e.getParam("table_grid",!0,"boolean")}(r)?r.ui.registry.addMenuItem("inserttable",{text:"Table",icon:"table",onAction:n("mceInsertTable")}):r.ui.registry.addNestedMenuItem("inserttable",{text:"Table",icon:"table",getSubmenuItems:function(){return[{type:"fancymenuitem",fancytype:"inserttable",onAction:t}]}}),r.ui.registry.addMenuItem("inserttabledialog",{text:"Insert table",icon:"table",onAction:n("mceInsertTable")}),r.ui.registry.addMenuItem("tableprops",o),r.ui.registry.addMenuItem("deletetable",i),r.ui.registry.addNestedMenuItem("row",c),r.ui.registry.addNestedMenuItem("column",l),r.ui.registry.addNestedMenuItem("cell",s),r.ui.registry.addContextMenu("table",{update:function(){return e.resetTargets(),e.targets().fold(function(){return""},function(e){return"caption"===en(e.element())?"tableprops deletetable":"cell row column | advtablesort | tableprops deletetable"})}})}},$f=function(t,n,e,r){return{insertTable:function(e,n){return Zc(t,e,n)},setClipboardRows:function(e){return function(e,n){var t=g(e,on.fromDom);n.set(Me.from(t))}(e,n)},getClipboardRows:function(){return function(e){return e.get().fold(function(){},function(e){return g(e,function(e){return e.dom()})})}(n)},resizeHandler:e,selectionTargets:r}};function Jf(n){var e=Gf(n),t=Yf(n,e),r=Sl(n),o=Vf(n,r.lazyResize,t),i=Tc(n,r.lazyWire),u=R(Me.none());return ua.registerCommands(n,i,o,e,u),Nr.registerEvents(n,e,i,o),Xf.addMenuItems(n,t),Kf.addButtons(n,t),Kf.addToolbars(n),n.on("PreInit",function(){n.serializer.addTempAttr(Cr.firstSelected()),n.serializer.addTempAttr(Cr.lastSelected())}),Cc(n)&&n.on("keydown",function(e){zl.handle(e,n,i,r.lazyWire)}),n.on("remove",function(){r.destroy(),o.destroy()}),$f(n,u,r,t)}!function Zf(){We.add("table",Jf)}()}(window);
\ No newline at end of file
diff --git a/website/js/vendor/tinymce/js/tinymce/plugins/template/plugin.min.js b/website/js/vendor/tinymce/js/tinymce/plugins/template/plugin.min.js
new file mode 100644 (file)
index 0000000..be01bd1
--- /dev/null
@@ -0,0 +1,9 @@
+/**
+ * Copyright (c) Tiny Technologies, Inc. All rights reserved.
+ * Licensed under the LGPL or a commercial license.
+ * For LGPL see License.txt in the project root for license information.
+ * For commercial licenses see https://www.tiny.cloud/
+ *
+ * Version: 5.1.5 (2019-12-19)
+ */
+!function(){"use strict";function e(){}function a(e){return function(){return e}}var t=tinymce.util.Tools.resolve("tinymce.PluginManager");function c(e,t){if((e=""+e).length<t)for(var n=0;n<t-e.length;n++)e="0"+e;return e}function i(n,e){return p.each(e,function(e,t){"function"==typeof e&&(e=e(t)),n=n.replace(new RegExp("\\{\\$"+t+"\\}","g"),e)}),n}function l(e,t){var r=e.dom,o=h(e);p.each(r.select("*",t),function(n){p.each(o,function(e,t){r.hasClass(n,t)&&"function"==typeof o[t]&&o[t](n)})})}function s(e,t){return new RegExp("\\b"+t+"\\b","g").test(e.className)}function n(){return w}var r,u=a(!1),f=a(!0),p=tinymce.util.Tools.resolve("tinymce.util.Tools"),o=tinymce.util.Tools.resolve("tinymce.util.XHR"),m=function(e){return e.getParam("template_cdate_classes","cdate")},d=function(e){return e.getParam("template_mdate_classes","mdate")},g=function(e){return e.getParam("template_selected_content_classes","selcontent")},y=function(e){return e.getParam("template_preview_replace_values")},h=function(e){return e.getParam("template_replace_values")},v=function(e){return e.templates},b=function(e){return e.getParam("template_cdate_format",e.translate("%Y-%m-%d"))},O=function(e){return e.getParam("template_mdate_format",e.translate("%Y-%m-%d"))},T=function(e,t,n){var r="Sun Mon Tue Wed Thu Fri Sat Sun".split(" "),o="Sunday Monday Tuesday Wednesday Thursday Friday Saturday Sunday".split(" "),a="Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec".split(" "),u="January February March April May June July August September October November December".split(" ");return n=n||new Date,t=(t=(t=(t=(t=(t=(t=(t=(t=(t=(t=(t=(t=(t=(t=(t=t.replace("%D","%m/%d/%Y")).replace("%r","%I:%M:%S %p")).replace("%Y",""+n.getFullYear())).replace("%y",""+n.getYear())).replace("%m",c(n.getMonth()+1,2))).replace("%d",c(n.getDate(),2))).replace("%H",""+c(n.getHours(),2))).replace("%M",""+c(n.getMinutes(),2))).replace("%S",""+c(n.getSeconds(),2))).replace("%I",""+((n.getHours()+11)%12+1))).replace("%p",n.getHours()<12?"AM":"PM")).replace("%B",""+e.translate(u[n.getMonth()]))).replace("%b",""+e.translate(a[n.getMonth()]))).replace("%A",""+e.translate(o[n.getDay()]))).replace("%a",""+e.translate(r[n.getDay()]))).replace("%%","%")},M=function(t,n){return function(){var e=v(t);"function"!=typeof e?"string"==typeof e?o.send({url:e,success:function(e){n(JSON.parse(e))}}):n(e):e(n)}},S=i,_=l,x=function(t,e,n){var r,o,a=t.dom,u=t.selection.getContent();n=i(n,h(t)),r=a.create("div",null,n),(o=a.select(".mceTmpl",r))&&0<o.length&&(r=a.create("div",null)).appendChild(o[0].cloneNode(!0)),p.each(a.select("*",r),function(e){s(e,m(t).replace(/\s+/g,"|"))&&(e.innerHTML=T(t,b(t))),s(e,d(t).replace(/\s+/g,"|"))&&(e.innerHTML=T(t,O(t))),s(e,g(t).replace(/\s+/g,"|"))&&(e.innerHTML=u)}),l(t,r),t.execCommand("mceInsertContent",!1,r.innerHTML),t.addVisual()},P=function(e){e.addCommand("mceInsertTemplate",function t(r){for(var o=[],e=1;e<arguments.length;e++)o[e-1]=arguments[e];return function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];var n=o.concat(e);return r.apply(null,n)}}(x,e))},A=function(r){r.on("PreProcess",function(e){var t=r.dom,n=O(r);p.each(t.select("div",e.node),function(e){t.hasClass(e,"mceTmpl")&&(p.each(t.select("*",e),function(e){t.hasClass(e,r.getParam("template_mdate_classes","mdate").replace(/\s+/g,"|"))&&(e.innerHTML=T(r,n))}),_(r,e))})})},w=(r={fold:function(e,t){return e()},is:u,isSome:u,isNone:f,getOr:N,getOrThunk:C,getOrDie:function(e){throw new Error(e||"error: getOrDie called on none.")},getOrNull:a(null),getOrUndefined:a(undefined),or:N,orThunk:C,map:n,each:e,bind:n,exists:u,forall:f,filter:n,equals:D,equals_:D,toArray:function(){return[]},toString:a("none()")},Object.freeze&&Object.freeze(r),r);function D(e){return e.isNone()}function C(e){return e()}function N(e){return e}function H(e){return e.replace(/["'<>&]/g,function(e){return function(e,t){return B(e,t)?L.from(e[t]):L.none()}(E,e).getOr(e)})}function k(t){return function(e){R(t,e)}}var I,J=function(n){function e(){return o}function t(e){return e(n)}var r=a(n),o={fold:function(e,t){return t(n)},is:function(e){return n===e},isSome:f,isNone:u,getOr:r,getOrThunk:r,getOrDie:r,getOrNull:r,getOrUndefined:r,or:e,orThunk:e,map:function(e){return J(e(n))},each:function(e){e(n)},bind:t,exists:t,forall:t,filter:function(e){return e(n)?o:w},toArray:function(){return[n]},toString:function(){return"some("+n+")"},equals:function(e){return e.is(n)},equals_:function(e,t){return e.fold(u,function(e){return t(n,e)})}};return o},L={some:J,none:n,from:function(e){return null===e||e===undefined?w:J(e)}},Y=(I="function",function(e){return function(e){if(null===e)return"null";var t=typeof e;return"object"==t&&(Array.prototype.isPrototypeOf(e)||e.constructor&&"Array"===e.constructor.name)?"array":"object"==t&&(String.prototype.isPrototypeOf(e)||e.constructor&&"String"===e.constructor.name)?"string":t}(e)===I}),j=Array.prototype.slice,q=(Y(Array.from)&&Array.from,tinymce.util.Tools.resolve("tinymce.util.Promise")),F=Object.hasOwnProperty,B=function(e,t){return F.call(e,t)},E={'"':"&quot;","<":"&lt;",">":"&gt;","&":"&amp;","'":"&#039;"},R=function(i,t){function e(e){return function(e,t){for(var n=e.length,r=new Array(n),o=0;o<n;o++){var a=e[o];r[o]=t(a,o)}return r}(e,function(e){return{text:e.text,value:e.text}})}function a(e,t){return function(e,t){for(var n=0,r=e.length;n<r;n++){var o=e[n];if(t(o,n))return L.some(o)}return L.none()}(e,function(e){return e.text===t})}function l(e){return new q(function(t,n){e.value.url.fold(function(){return t(e.value.content.getOr(""))},function(e){return o.send({url:e,success:function(e){t(e)},error:function(e){n(e)}})})})}(function(){if(t&&0!==t.length)return L.from(p.map(t,function(e,t){function n(e){return e.url!==undefined}return{selected:0===t,text:e.title,value:{url:n(e)?L.from(e.url):L.none(),content:n(e)?L.none():L.from(e.content),description:e.description}}}));var e=i.translate("No templates defined.");return i.notificationManager.open({text:e,type:"info"}),L.none()})().each(function(n){function u(e,t){return{title:"Insert Template",size:"large",body:{type:"panel",items:e},initialData:t,buttons:[{type:"cancel",name:"cancel",text:"Cancel"},{type:"submit",name:"save",text:"Save",primary:!0}],onSubmit:function(n){return function(t){var e=t.getData();a(n,e.template).each(function(e){l(e).then(function(e){x(i,!1,e),t.close()})})}}(n),onChange:function(r,o){return function(n,e){if("template"===e.name){var t=n.getData().template;a(r,t).each(function(t){n.block("Loading..."),l(t).then(function(e){o(n,t,e),n.unblock()})})}}}(n,r)}}var c=e(n),r=function(e,t,n){var r=function(t,e){if(-1===e.indexOf("<html>")){var n="";p.each(t.contentCSS,function(e){n+='<link type="text/css" rel="stylesheet" href="'+t.documentBaseURI.toAbsolute(e)+'">'});var r=t.settings.body_class||"";-1!==r.indexOf("=")&&(r=(r=t.getParam("body_class","","hash"))[t.id]||"");var o=t.dom.encode,a=t.getBody().dir,u=a?' dir="'+o(a)+'"':"";e="<!DOCTYPE html><html><head>"+n+'</head><body class="'+o(r)+'"'+u+">"+e+"</body></html>"}return S(e,y(t))}(i,n),o=[{type:"selectbox",name:"template",label:"Templates",items:c},{type:"htmlpanel",html:'<p aria-live="polite">'+H(t.value.description)+"</p>"},{label:"Preview",type:"iframe",name:"preview",sandboxed:!1}],a={template:t.text,preview:r};e.unblock(),e.redial(u(o,a)),e.focus("template")},t=i.windowManager.open(u([],{template:"",preview:""}));t.block("Loading..."),l(n[0]).then(function(e){r(t,n[0],e)})})},z=function(e){e.ui.registry.addButton("template",{icon:"template",tooltip:"Insert template",onAction:M(e.settings,k(e))}),e.ui.registry.addMenuItem("template",{icon:"template",text:"Insert template...",onAction:M(e.settings,k(e))})};!function U(){t.add("template",function(e){z(e),P(e),A(e)})}()}();
\ No newline at end of file
diff --git a/website/js/vendor/tinymce/js/tinymce/plugins/textcolor/plugin.min.js b/website/js/vendor/tinymce/js/tinymce/plugins/textcolor/plugin.min.js
new file mode 100644 (file)
index 0000000..8739023
--- /dev/null
@@ -0,0 +1,9 @@
+/**
+ * Copyright (c) Tiny Technologies, Inc. All rights reserved.
+ * Licensed under the LGPL or a commercial license.
+ * For LGPL see License.txt in the project root for license information.
+ * For commercial licenses see https://www.tiny.cloud/
+ *
+ * Version: 5.1.5 (2019-12-19)
+ */
+!function(o){"use strict";var i=tinymce.util.Tools.resolve("tinymce.PluginManager");!function n(){i.add("textcolor",function(){o.console.warn("Text color plugin is now built in to the core editor, please remove it from your editor configuration")})}()}(window);
\ No newline at end of file
diff --git a/website/js/vendor/tinymce/js/tinymce/plugins/textpattern/plugin.min.js b/website/js/vendor/tinymce/js/tinymce/plugins/textpattern/plugin.min.js
new file mode 100644 (file)
index 0000000..0a346c8
--- /dev/null
@@ -0,0 +1,9 @@
+/**
+ * Copyright (c) Tiny Technologies, Inc. All rights reserved.
+ * Licensed under the LGPL or a commercial license.
+ * For LGPL see License.txt in the project root for license information.
+ * For commercial licenses see https://www.tiny.cloud/
+ *
+ * Version: 5.1.5 (2019-12-19)
+ */
+!function(f){"use strict";var r=function(t){function n(){return e}var e=t;return{get:n,set:function(t){e=t},clone:function(){return r(n())}}},t=tinymce.util.Tools.resolve("tinymce.PluginManager"),u=function(){return(u=Object.assign||function(t){for(var n,e=1,r=arguments.length;e<r;e++)for(var o in n=arguments[e])Object.prototype.hasOwnProperty.call(n,o)&&(t[o]=n[o]);return t}).apply(this,arguments)};function n(){}function a(t){return function(){return t}}function o(t){return t}function e(){return l}var i,c=a(!1),s=a(!0),l=(i={fold:function(t,n){return t()},is:c,isSome:c,isNone:s,getOr:g,getOrThunk:m,getOrDie:function(t){throw new Error(t||"error: getOrDie called on none.")},getOrNull:a(null),getOrUndefined:a(undefined),or:g,orThunk:m,map:e,each:n,bind:e,exists:c,forall:s,filter:e,equals:d,equals_:d,toArray:function(){return[]},toString:a("none()")},Object.freeze&&Object.freeze(i),i);function d(t){return t.isNone()}function m(t){return t()}function g(t){return t}function p(n){return function(t){return function(t){if(null===t)return"null";var n=typeof t;return"object"==n&&(Array.prototype.isPrototypeOf(t)||t.constructor&&"Array"===t.constructor.name)?"array":"object"==n&&(String.prototype.isPrototypeOf(t)||t.constructor&&"String"===t.constructor.name)?"string":n}(t)===n}}function h(t,n){return-1<function(t,n){return lt.call(t,n)}(t,n)}function v(t,n){for(var e=t.length,r=new Array(e),o=0;o<e;o++){var a=t[o];r[o]=n(a,o)}return r}function y(t,n){for(var e=0,r=t.length;e<r;e++){n(t[e],e)}}function b(t,n){for(var e=[],r=0,o=t.length;r<o;r++){var a=t[r];n(a,r)&&e.push(a)}return e}function k(t,n,e){return function(t,n){for(var e=t.length-1;0<=e;e--){n(t[e],e)}}(t,function(t){e=n(e,t)}),e}function O(t,n){for(var e=0,r=t.length;e<r;++e){if(!0!==n(t[e],e))return!1}return!0}function w(t){var n=[],e=[];return y(t,function(t){t.fold(function(t){n.push(t)},function(t){e.push(t)})}),{errors:n,values:e}}function x(t){return"inline-command"===t.type||"inline-format"===t.type}function C(t){return"block-command"===t.type||"block-format"===t.type}function E(t){return function(t,n){var e=st.call(t,0);return e.sort(n),e}(t,function(t,n){return t.start.length===n.start.length?0:t.start.length>n.start.length?-1:1})}function T(o){function a(t){return yt.error({message:t,pattern:o})}function t(t,n,e){if(o.format===undefined)return o.cmd!==undefined?it(o.cmd)?yt.value(e(o.cmd,o.value)):a(t+" pattern has non-string `cmd` parameter"):a(t+" pattern is missing both `format` and `cmd` parameters");var r=void 0;if(ft(o.format)){if(!O(o.format,it))return a(t+" pattern has non-string items in the `format` array");r=o.format}else{if(!it(o.format))return a(t+" pattern has non-string `format` parameter");r=[o.format]}return yt.value(n(r))}if(!ut(o))return a("Raw pattern is not an object");if(!it(o.start))return a("Raw pattern is missing `start` parameter");if(o.end===undefined)return o.replacement!==undefined?it(o.replacement)?0===o.start.length?a("Replacement pattern has empty `start` parameter"):yt.value({type:"inline-command",start:"",end:o.start,cmd:"mceInsertContent",value:o.replacement}):a("Replacement pattern has non-string `replacement` parameter"):0===o.start.length?a("Block pattern has empty `start` parameter"):t("Block",function(t){return{type:"block-format",start:o.start,format:t[0]}},function(t,n){return{type:"block-command",start:o.start,cmd:t,value:n}});if(!it(o.end))return a("Inline pattern has non-string `end` parameter");if(0===o.start.length&&0===o.end.length)return a("Inline pattern has empty `start` and `end` parameters");var e=o.start,r=o.end;return 0===r.length&&(r=e,e=""),t("Inline",function(t){return{type:"inline-format",start:e,end:r,format:t}},function(t,n){return{type:"inline-command",start:e,end:r,cmd:t,value:n}})}function R(t){return"block-command"===t.type?{start:t.start,cmd:t.cmd,value:t.value}:"block-format"===t.type?{start:t.start,format:t.format}:"inline-command"===t.type?"mceInsertContent"===t.cmd&&""===t.start?{start:t.end,replacement:t.value}:{start:t.start,end:t.end,cmd:t.cmd,value:t.value}:"inline-format"===t.type?{start:t.start,end:t.end,format:1===t.format.length?t.format[0]:t.format}:void 0}function N(t){return{inlinePatterns:b(t,x),blockPatterns:E(b(t,C))}}function P(){for(var t=[],n=0;n<arguments.length;n++)t[n]=arguments[n];var e=kt.console;e&&(e.error?e.error.apply(e,t):e.log.apply(e,t))}function S(t){var n=function(t,n){return gt(t,n)?at.from(t[n]):at.none()}(t,"textpattern_patterns").getOr(Ot);if(!ft(n))return P("The setting textpattern_patterns should be an array"),{inlinePatterns:[],blockPatterns:[]};var e=w(v(n,T));return y(e.errors,function(t){return P(t.message,t.pattern)}),N(e.values)}function M(t){var n=t.getParam("forced_root_block","p");return!1===n?"":!0===n?"p":n}function A(t){return t.nodeType===f.Node.TEXT_NODE}function j(t,n,e,r){void 0===r&&(r=!0);var o=n.startContainer.parentNode,a=n.endContainer.parentNode;n.deleteContents(),r&&!e(n.startContainer)&&(A(n.startContainer)&&0===n.startContainer.data.length&&t.remove(n.startContainer),A(n.endContainer)&&0===n.endContainer.data.length&&t.remove(n.endContainer),Tt(t,o,e),o!==a&&Tt(t,a,e))}function B(t,n){var e=n.get(t);return ft(e)&&function(t){return 0===t.length?at.none():at.some(t[0])}(e).exists(function(t){return gt(t,"block")})}function D(t){return 0===t.start.length}function I(t,n){var e=at.from(t.dom.getParent(n.startContainer,t.dom.isBlock));return""===M(t)?e.orThunk(function(){return at.some(t.getBody())}):e}function _(t,n){return{element:t,offset:n}}function U(t,n){function e(t){for(var n=r[t]();n&&n.nodeType!==f.Node.TEXT_NODE;)n=r[t]();return n&&n.nodeType===f.Node.TEXT_NODE?at.some(n):at.none()}var r=new Et(t,n);return{next:function(){return e("next")},prev:function(){return e("prev")},prev2:function(){return e("prev2")}}}function q(t,n,e){return A(t)&&0<=n?at.some(_(t,n)):U(t,e).prev().map(function(t){return _(t,t.data.length)})}function L(t,n,e){if(A(n)&&(e<0||e>n.data.length))return[];for(var r=[e],o=n;o!==t&&o.parentNode;){for(var a=o.parentNode,i=0;i<a.childNodes.length;i++)if(a.childNodes[i]===o){r.push(i);break}o=a}return o===t?r.reverse():[]}function V(t,n,e,r,o){return{start:L(t,n,e),end:L(t,r,o)}}function W(t,n){var e=n.slice(),r=e.pop();return function(t,n,e){return y(t,function(t){e=n(e,t)}),e}(e,function(t,n){return t.bind(function(t){return at.from(t.childNodes[n])})},at.some(t)).bind(function(t){return A(t)&&0<=r&&t.data.length,at.some({node:t,offset:r})})}function X(n,e){return W(n,e.start).bind(function(t){var o=t.node,a=t.offset;return W(n,e.end).map(function(t){var n=t.node,e=t.offset,r=f.document.createRange();return r.setStart(o,a),r.setEnd(n,e),r})})}function z(r,o,t){U(o,o).next().each(function(e){Nt(e,t.start.length,o).each(function(t){var n=r.createRng();n.setStart(e,0),n.setEnd(t.element,t.offset),j(r,n,function(t){return t===o})})})}function F(t,n){var e=n.replace("\xa0"," ");return function(t,n){for(var e=0,r=t.length;e<r;e++){var o=t[e];if(n(o,e))return at.some(o)}return at.none()}(t,function(t){return 0===n.indexOf(t.start)||0===e.indexOf(t.start)})}function G(n,t){if(0!==t.length){var e=n.selection.getBookmark();y(t,function(t){return function(n,t){var e=n.dom,r=t.pattern,o=X(e.getRoot(),t.range).getOrDie("Unable to resolve path range");return I(n,o).each(function(t){"block-format"===r.type?B(r.format,n.formatter)&&n.undoManager.transact(function(){z(n.dom,t,r),n.formatter.apply(r.format)}):"block-command"===r.type&&n.undoManager.transact(function(){z(n.dom,t,r),n.execCommand(r.cmd,!1,r.value)})}),!0}(n,t)}),n.selection.moveToBookmark(e)}}function H(t,n){return t.create("span",{"data-mce-type":"bookmark",id:n})}function J(t,n){var e=t.createRng();return e.setStartAfter(n.start),e.setEndBefore(n.end),e}function K(t,n,e){var r=X(t.getRoot(),e).getOrDie("Unable to resolve path range"),o=r.startContainer,a=r.endContainer,i=0===r.endOffset?a:a.splitText(r.endOffset),u=0===r.startOffset?o:o.splitText(r.startOffset);return{prefix:n,end:i.parentNode.insertBefore(H(t,n+"-end"),i),start:u.parentNode.insertBefore(H(t,n+"-start"),u)}}function Q(t,n,e){Tt(t,t.get(n.prefix+"-end"),e),Tt(t,t.get(n.prefix+"-start"),e)}function Y(t,e,n,r,o,a){if(void 0===a&&(a=!1),0!==e.start.length||a)return q(n,r,o).bind(function(n){return function(t,n,e,r,o){var a=new Et(n,o);return Mt(t,n,at.some(e),r,a.prev,at.none())}(t,n.element,n.offset,function(f,c,s){return function(e,r,t,n){if(r===c)return e.abort();var o=t.substring(0,n.getOr(t.length)),a=o.lastIndexOf(s.charAt(s.length-1)),i=o.lastIndexOf(s);if(-1===i)return-1!==a?Rt(r,a+1-s.length,c).fold(function(){return e.kontinue()},function(t){var n=f.createRng();return n.setStart(t.element,t.offset),n.setEnd(r,a+1),n.toString()===s?e.finish(n):e.kontinue()}):e.kontinue();var u=f.createRng();return u.setStart(r,i),u.setEnd(r,i+s.length),e.finish(u)}}(t,o,e.start),o).fold(at.none,at.none,at.some).bind(function(t){if(a){if(t.endContainer===n.element&&t.endOffset===n.offset)return at.none();if(0===n.offset&&t.endContainer.textContent.length===t.endOffset)return at.none()}return at.some(t)})});var i=t.createRng();return i.setStart(n,r),i.setEnd(n,r),at.some(i)}function Z(a,i,u){var f=a.dom,c=f.getRoot(),s=u.pattern,l=u.position.element,d=u.position.offset;return Rt(l,d-u.pattern.end.length,i).bind(function(t){var e=V(c,t.element,t.offset,l,d);if(D(s))return at.some({matches:[{pattern:s,startRng:e,endRng:e}],position:t});var n=jt(a,u.remainingPatterns,t.element,t.offset,i),r=n.getOr({matches:[],position:t}),o=r.position;return Y(f,s,o.element,o.offset,i,n.isNone()).map(function(t){var n=function(t,n){return V(t,n.startContainer,n.startOffset,n.endContainer,n.endOffset)}(c,t);return{matches:r.matches.concat([{pattern:s,startRng:n,endRng:e}]),position:_(t.startContainer,t.startOffset)}})})}function $(n,t,e){n.selection.setRng(e),"inline-format"===t.type?y(t.format,function(t){n.formatter.apply(t)}):n.execCommand(t.cmd,!1,t.value)}function tt(o,t){var a=function(t){var n=(new Date).getTime();return t+"_"+Math.floor(1e9*Math.random())+ ++At+String(n)}("mce_textpattern"),i=k(t,function(t,n){var e=K(o,a+"_end"+t.length,n.endRng);return t.concat([u(u({},n),{endMarker:e})])},[]);return k(i,function(t,n){var e=i.length-t.length-1,r=D(n.pattern)?n.endMarker:K(o,a+"_start"+e,n.startRng);return t.concat([u(u({},n),{startMarker:r})])},[])}function nt(e,r,o){var a=e.selection.getRng();return!1===a.collapsed?[]:I(e,a).bind(function(t){var n=a.startOffset-(o?1:0);return jt(e,r,a.startContainer,n,t)}).fold(function(){return[]},function(t){return t.matches})}function et(r,t){if(0!==t.length){var o=r.dom,n=r.selection.getBookmark(),e=tt(o,t);y(e,function(t){function n(t){return t===e}var e=o.getParent(t.startMarker.start,o.isBlock);D(t.pattern)?function(t,n,e,r){var o=J(t.dom,e);j(t.dom,o,r),$(t,n,o)}(r,t.pattern,t.endMarker,n):function(t,n,e,r,o){var a=t.dom,i=J(a,r),u=J(a,e);j(a,u,o),j(a,i,o);var f={prefix:e.prefix,start:e.end,end:r.start},c=J(a,f);$(t,n,c)}(r,t.pattern,t.startMarker,t.endMarker,n),Q(o,t.endMarker,n),Q(o,t.startMarker,n)}),r.selection.moveToBookmark(n)}}function rt(t,n,e){for(var r=0;r<t.length;r++)if(e(t[r],n))return!0}var ot=function(e){function t(){return o}function n(t){return t(e)}var r=a(e),o={fold:function(t,n){return n(e)},is:function(t){return e===t},isSome:s,isNone:c,getOr:r,getOrThunk:r,getOrDie:r,getOrNull:r,getOrUndefined:r,or:t,orThunk:t,map:function(t){return ot(t(e))},each:function(t){t(e)},bind:n,exists:n,forall:n,filter:function(t){return t(e)?o:l},toArray:function(){return[e]},toString:function(){return"some("+e+")"},equals:function(t){return t.is(e)},equals_:function(t,n){return t.fold(c,function(t){return n(e,t)})}};return o},at={some:ot,none:e,from:function(t){return null===t||t===undefined?l:ot(t)}},it=p("string"),ut=p("object"),ft=p("array"),ct=p("function"),st=Array.prototype.slice,lt=Array.prototype.indexOf,dt=(ct(Array.from)&&Array.from,Object.keys),mt=Object.hasOwnProperty,gt=function(t,n){return mt.call(t,n)},pt=function(i){if(!ft(i))throw new Error("cases must be an array");if(0===i.length)throw new Error("there must be at least one case");var u=[],e={};return y(i,function(t,r){var n=dt(t);if(1!==n.length)throw new Error("one and only one name per case");var o=n[0],a=t[o];if(e[o]!==undefined)throw new Error("duplicate key detected:"+o);if("cata"===o)throw new Error("cannot have a case named cata (sorry)");if(!ft(a))throw new Error("case arguments must be an array");u.push(o),e[o]=function(){var t=arguments.length;if(t!==a.length)throw new Error("Wrong number of arguments to case "+o+". Expected "+a.length+" ("+a+"), got "+t);for(var e=new Array(t),n=0;n<e.length;n++)e[n]=arguments[n];return{fold:function(){if(arguments.length!==i.length)throw new Error("Wrong number of arguments to fold. Expected "+i.length+", got "+arguments.length);return arguments[r].apply(null,e)},match:function(t){var n=dt(t);if(u.length!==n.length)throw new Error("Wrong number of arguments to match. Expected: "+u.join(",")+"\nActual: "+n.join(","));if(!O(u,function(t){return h(n,t)}))throw new Error("Not all branches were specified when using match. Specified: "+n.join(", ")+"\nRequired: "+u.join(", "));return t[o].apply(null,e)},log:function(t){f.console.log(t,{constructors:u,constructor:o,params:e})}}}}),e},ht=(pt([{bothErrors:["error1","error2"]},{firstError:["error1","value2"]},{secondError:["value1","error2"]},{bothValues:["value1","value2"]}]),function(e){return{is:function(t){return e===t},isValue:s,isError:c,getOr:a(e),getOrThunk:a(e),getOrDie:a(e),or:function(t){return ht(e)},orThunk:function(t){return ht(e)},fold:function(t,n){return n(e)},map:function(t){return ht(t(e))},mapError:function(t){return ht(e)},each:function(t){t(e)},bind:function(t){return t(e)},exists:function(t){return t(e)},forall:function(t){return t(e)},toOption:function(){return at.some(e)}}}),vt=function(e){return{is:c,isValue:c,isError:s,getOr:o,getOrThunk:function(t){return t()},getOrDie:function(){return function(t){return function(){throw new Error(t)}}(String(e))()},or:function(t){return t},orThunk:function(t){return t()},fold:function(t,n){return t(e)},map:function(t){return vt(e)},mapError:function(t){return vt(t(e))},each:n,bind:function(t){return vt(e)},exists:c,forall:s,toOption:at.none}},yt={value:ht,error:vt,fromOption:function(t,n){return t.fold(function(){return vt(n)},ht)}},bt=function(r){return{setPatterns:function(t){var n=w(v(t,T));if(0<n.errors.length){var e=n.errors[0];throw new Error(e.message+":\n"+JSON.stringify(e.pattern,null,2))}r.set(N(n.values))},getPatterns:function(){return function f(){for(var t=0,n=0,e=arguments.length;n<e;n++)t+=arguments[n].length;var r=Array(t),o=0;for(n=0;n<e;n++)for(var a=arguments[n],i=0,u=a.length;i<u;i++,o++)r[o]=a[i];return r}(v(r.get().inlinePatterns,R),v(r.get().blockPatterns,R))}}},kt="undefined"!=typeof f.window?f.window:Function("return this;")(),Ot=[{start:"*",end:"*",format:"italic"},{start:"**",end:"**",format:"bold"},{start:"#",format:"h1"},{start:"##",format:"h2"},{start:"###",format:"h3"},{start:"####",format:"h4"},{start:"#####",format:"h5"},{start:"######",format:"h6"},{start:"1. ",cmd:"InsertOrderedList"},{start:"* ",cmd:"InsertUnorderedList"},{start:"- ",cmd:"InsertUnorderedList"}],wt=tinymce.util.Tools.resolve("tinymce.util.Delay"),xt=tinymce.util.Tools.resolve("tinymce.util.VK"),Ct=tinymce.util.Tools.resolve("tinymce.util.Tools"),Et=tinymce.util.Tools.resolve("tinymce.dom.TreeWalker"),Tt=function(t,n,e){if(n&&t.isEmpty(n)&&!e(n)){var r=n.parentNode;t.remove(n),Tt(t,r,e)}},Rt=function(t,e,r){if(!A(t))return at.none();var n=t.textContent;return 0<=e&&e<=n.length?at.some(_(t,e)):U(t,r).prev().bind(function(t){var n=t.textContent;return Rt(t,e+n.length,r)})},Nt=function(t,n,e){if(!A(t))return at.none();var r=t.textContent;return n<=r.length?at.some(_(t,n)):U(t,e).next().bind(function(t){return Nt(t,n-r.length,e)})},Pt=pt([{aborted:[]},{edge:["element"]},{success:["info"]}]),St=pt([{abort:[]},{kontinue:[]},{finish:["info"]}]),Mt=function(n,e,t,r,o,a){function i(){return a.fold(Pt.aborted,Pt.edge)}function u(){var t=o();return t?Mt(n,t,at.none(),r,o,at.some(e)):i()}if(function(t,n){return t.isBlock(n)||h(["BR","IMG","HR","INPUT"],n.nodeName)||"false"===t.getContentEditable(n)}(n,e))return i();if(A(e)){var f=e.textContent;return r(St,e,f,t).fold(Pt.aborted,function(){return u()},Pt.success)}return u()},At=0,jt=function(c,s,l,d,m){var g=c.dom;return q(l,d,g.getRoot()).bind(function(t){var n=g.createRng();n.setStart(m,0),n.setEnd(l,d);for(var e,r,o=n.toString(),a=0;a<s.length;a++){var i=s[a];if(e=o,r=i.end,function(t,n,e){return""===n||!(t.length<n.length)&&t.substr(e,e+n.length)===n}(e,r,e.length-r.length)){var u=s.slice();u.splice(a,1);var f=Z(c,m,{pattern:i,remainingPatterns:u,position:t});if(f.isSome())return f}}return at.none()})},Bt=function(e,t){if(!e.selection.isCollapsed())return!1;var r=nt(e,t.inlinePatterns,!1),o=function(r,t){var o=r.dom,n=r.selection.getRng();return I(r,n).filter(function(t){var n=M(r),e=""===n&&o.is(t,"body")||o.is(t,n);return null!==t&&e}).bind(function(n){var e=n.textContent;return F(t,e).map(function(t){return Ct.trim(e).length===t.start.length?[]:[{pattern:t,range:V(o.getRoot(),n,0,n,0)}]})}).getOr([])}(e,t.blockPatterns);return(0<o.length||0<r.length)&&(e.undoManager.add(),e.undoManager.extra(function(){e.execCommand("mceInsertNewLine")},function(){e.insertContent("\ufeff"),et(e,r),G(e,o);var t=e.selection.getRng(),n=q(t.startContainer,t.startOffset,e.dom.getRoot());e.execCommand("mceInsertNewLine"),n.each(function(t){"\ufeff"===t.element.data.charAt(t.offset-1)&&(t.element.deleteData(t.offset-1,1),Tt(e.dom,t.element.parentNode,function(t){return t===e.dom.getRoot()}))})}),!0)},Dt=function(t,n){var e=nt(t,n.inlinePatterns,!0);0<e.length&&t.undoManager.transact(function(){et(t,e)})},It=function(t,n){return rt(t,n,function(t,n){return t.charCodeAt(0)===n.charCode})},_t=function(t,n){return rt(t,n,function(t,n){return t===n.keyCode&&!1===xt.modifierPressed(n)})},Ut=function(n,e){var r=[",",".",";",":","!","?"],o=[32];n.on("keydown",function(t){13!==t.keyCode||xt.modifierPressed(t)||Bt(n,e.get())&&t.preventDefault()},!0),n.on("keyup",function(t){_t(o,t)&&Dt(n,e.get())}),n.on("keypress",function(t){It(r,t)&&wt.setEditorTimeout(n,function(){Dt(n,e.get())})})};!function qt(){t.add("textpattern",function(t){var n=r(S(t.settings));return Ut(t,n),bt(n)})}()}(window);
\ No newline at end of file
diff --git a/website/js/vendor/tinymce/js/tinymce/plugins/toc/plugin.min.js b/website/js/vendor/tinymce/js/tinymce/plugins/toc/plugin.min.js
new file mode 100644 (file)
index 0000000..b77709c
--- /dev/null
@@ -0,0 +1,9 @@
+/**
+ * Copyright (c) Tiny Technologies, Inc. All rights reserved.
+ * Licensed under the LGPL or a commercial license.
+ * For LGPL see License.txt in the project root for license information.
+ * For commercial licenses see https://www.tiny.cloud/
+ *
+ * Version: 5.1.5 (2019-12-19)
+ */
+!function(){"use strict";function e(n){return function(t){function e(){return t.setDisabled(n.readonly||!v.hasHeaders(n))}return e(),n.on("LoadContent SetContent change",e),function(){return n.on("LoadContent SetContent change",e)}}}var t=tinymce.util.Tools.resolve("tinymce.PluginManager"),u=tinymce.util.Tools.resolve("tinymce.dom.DOMUtils"),l=tinymce.util.Tools.resolve("tinymce.util.I18n"),i=tinymce.util.Tools.resolve("tinymce.util.Tools"),c=function(t){return t.getParam("toc_class","mce-toc")},d=function(t){var e=t.getParam("toc_header","h2");return/^h[1-6]$/.test(e)?e:"h2"},a=function(t){var e=parseInt(t.getParam("toc_depth","3"),10);return 1<=e&&e<=9?e:3},s=function(e){var n=0;return function(){var t=(new Date).getTime().toString(32);return e+t+(n++).toString(32)}}("mcetoc_"),f=function f(t){var e,n=[];for(e=1;e<=t;e++)n.push("h"+e);return n.join(",")},m=function(n){var o=c(n),t=d(n),e=f(a(n)),r=n.$(e);return r.length&&/^h[1-9]$/i.test(t)&&(r=r.filter(function(t,e){return!n.dom.hasClass(e.parentNode,o)})),i.map(r,function(t){return{id:t.id?t.id:s(),level:parseInt(t.nodeName.replace(/^H/i,""),10),title:n.$.text(t),element:t}})},o=function(t){var e,n,o,r,i="",c=m(t),a=function(t){var e,n=9;for(e=0;e<t.length;e++)if(t[e].level<n&&(n=t[e].level),1===n)return n;return n}(c)-1;if(!c.length)return"";for(i+=function(t,e){var n="</"+t+">";return"<"+t+' contenteditable="true">'+u.DOM.encode(e)+n}(d(t),l.translate("Table of Contents")),e=0;e<c.length;e++){if((o=c[e]).element.id=o.id,r=c[e+1]&&c[e+1].level,a===o.level)i+="<li>";else for(n=a;n<o.level;n++)i+="<ul><li>";if(i+='<a href="#'+o.id+'">'+o.title+"</a>",r!==o.level&&r)for(n=o.level;r<n;n--)i+="</li></ul><li>";else i+="</li>",r||(i+="</ul>");a=o.level}return i},r=function(t){var e=c(t),n=t.$("."+e);n.length&&t.undoManager.transact(function(){n.html(o(t))})},v={hasHeaders:function(t){return 0<m(t).length},insertToc:function(t){var e=c(t),n=t.$("."+e);!function(t,e){return!e.length||0<t.dom.getParents(e[0],".mce-offscreen-selection").length}(t,n)?r(t):t.insertContent(function(t){var e=o(t);return'<div class="'+t.dom.encode(c(t))+'" contenteditable="false">'+e+"</div>"}(t))},updateToc:r},n=function(t){t.addCommand("mceInsertToc",function(){v.insertToc(t)}),t.addCommand("mceUpdateToc",function(){v.updateToc(t)})},g=function(t){var n=t.$,o=c(t);t.on("PreProcess",function(t){var e=n("."+o,t.node);e.length&&(e.removeAttr("contentEditable"),e.find("[contenteditable]").removeAttr("contentEditable"))}),t.on("SetContent",function(){var t=n("."+o);t.length&&(t.attr("contentEditable",!1),t.children(":first-child").attr("contentEditable",!0))})},h=function(t){t.ui.registry.addButton("toc",{icon:"toc",tooltip:"Table of contents",onAction:function(){return t.execCommand("mceInsertToc")},onSetup:e(t)}),t.ui.registry.addButton("tocupdate",{icon:"reload",tooltip:"Update",onAction:function(){return t.execCommand("mceUpdateToc")}}),t.ui.registry.addMenuItem("toc",{icon:"toc",text:"Table of contents",onAction:function(){return t.execCommand("mceInsertToc")},onSetup:e(t)}),t.ui.registry.addContextToolbar("toc",{items:"tocupdate",predicate:function(e){return function(t){return t&&e.dom.is(t,"."+c(e))&&e.getBody().contains(t)}}(t),scope:"node",position:"node"})};!function p(){t.add("toc",function(t){n(t),h(t),g(t)})}()}();
\ No newline at end of file
diff --git a/website/js/vendor/tinymce/js/tinymce/plugins/visualblocks/plugin.min.js b/website/js/vendor/tinymce/js/tinymce/plugins/visualblocks/plugin.min.js
new file mode 100644 (file)
index 0000000..d17bebf
--- /dev/null
@@ -0,0 +1,9 @@
+/**
+ * Copyright (c) Tiny Technologies, Inc. All rights reserved.
+ * Licensed under the LGPL or a commercial license.
+ * For LGPL see License.txt in the project root for license information.
+ * For commercial licenses see https://www.tiny.cloud/
+ *
+ * Version: 5.1.5 (2019-12-19)
+ */
+!function(){"use strict";function n(n,e){return function(o){o.setActive(e.get());function t(t){return o.setActive(t.state)}return n.on("VisualBlocks",t),function(){return n.off("VisualBlocks",t)}}}var e=function(t){function o(){return n}var n=t;return{get:o,set:function(t){n=t},clone:function(){return e(o())}}},t=tinymce.util.Tools.resolve("tinymce.PluginManager"),i=function(t,o){t.fire("VisualBlocks",{state:o})},u=function(t,o,n){t.dom.toggleClass(t.getBody(),"mce-visualblocks"),n.set(!n.get()),i(t,n.get())},c=function(t,o,n){t.addCommand("mceVisualBlocks",function(){u(t,o,n)})},s=function(t){return t.getParam("visualblocks_default_state",!1,"boolean")},l=function(o,t,n){o.on("PreviewFormats AfterPreviewFormats",function(t){n.get()&&o.dom.toggleClass(o.getBody(),"mce-visualblocks","afterpreviewformats"===t.type)}),o.on("init",function(){s(o)&&u(o,t,n)}),o.on("remove",function(){o.dom.removeClass(o.getBody(),"mce-visualblocks")})},r=function(t,o){t.ui.registry.addToggleButton("visualblocks",{icon:"visualblocks",tooltip:"Show blocks",onAction:function(){return t.execCommand("mceVisualBlocks")},onSetup:n(t,o)}),t.ui.registry.addToggleMenuItem("visualblocks",{text:"Show blocks",onAction:function(){return t.execCommand("mceVisualBlocks")},onSetup:n(t,o)})};!function o(){t.add("visualblocks",function(t,o){var n=e(!1);c(t,o,n),r(t,n),l(t,o,n)})}()}();
\ No newline at end of file
diff --git a/website/js/vendor/tinymce/js/tinymce/plugins/visualchars/plugin.min.js b/website/js/vendor/tinymce/js/tinymce/plugins/visualchars/plugin.min.js
new file mode 100644 (file)
index 0000000..43dfd61
--- /dev/null
@@ -0,0 +1,9 @@
+/**
+ * Copyright (c) Tiny Technologies, Inc. All rights reserved.
+ * Licensed under the LGPL or a commercial license.
+ * For LGPL see License.txt in the project root for license information.
+ * For commercial licenses see https://www.tiny.cloud/
+ *
+ * Version: 5.1.5 (2019-12-19)
+ */
+!function(r){"use strict";function n(){}function u(n){return function(){return n}}function e(){return l}var t,o=function(n){function e(){return t}var t=n;return{get:e,set:function(n){t=n},clone:function(){return o(e())}}},i=tinymce.util.Tools.resolve("tinymce.PluginManager"),c=function(n){return{isEnabled:function(){return n.get()}}},a=function(n,e){return n.fire("VisualChars",{state:e})},f=u(!1),s=u(!0),l=(t={fold:function(n,e){return n()},is:f,isSome:f,isNone:s,getOr:g,getOrThunk:m,getOrDie:function(n){throw new Error(n||"error: getOrDie called on none.")},getOrNull:u(null),getOrUndefined:u(undefined),or:g,orThunk:m,map:e,each:n,bind:e,exists:f,forall:s,filter:e,equals:d,equals_:d,toArray:function(){return[]},toString:u("none()")},Object.freeze&&Object.freeze(t),t);function d(n){return n.isNone()}function m(n){return n()}function g(n){return n}function N(e){return function(n){return function(n){if(null===n)return"null";var e=typeof n;return"object"==e&&(Array.prototype.isPrototypeOf(n)||n.constructor&&"Array"===n.constructor.name)?"array":"object"==e&&(String.prototype.isPrototypeOf(n)||n.constructor&&"String"===n.constructor.name)?"string":e}(n)===e}}function v(n,e){for(var t=0,r=n.length;t<r;t++){e(n[t],t)}}function h(n){return n.dom().nodeValue}function p(n,e,t){!function(n,e,t){if(!(L(t)||P(t)||R(t)))throw r.console.error("Invalid call to Attr.set. Key ",e,":: Value ",t,":: Element ",n),new Error("Attribute value was not simple");n.setAttribute(e,t+"")}(n.dom(),e,t)}function E(n,e){n.dom().removeAttribute(e)}function T(n,e){var t=function(n,e){var t=n.dom().getAttribute(e);return null===t?undefined:t}(n,e);return t===undefined||""===t?[]:t.split(" ")}function O(n){return n.dom().classList!==undefined}function y(n,e){return function(n,e,t){var r=T(n,e).concat([t]);return p(n,e,r.join(" ")),!0}(n,"class",e)}function b(n,e){return function(n,e,t){var r=function(n,e){for(var t=[],r=0,o=n.length;r<o;r++){var u=n[r];e(u,r)&&t.push(u)}return t}(T(n,e),function(n){return n!==t});return 0<r.length?p(n,e,r.join(" ")):E(n,e),!1}(n,"class",e)}function D(n){0===(O(n)?n.dom().classList:function(n){return T(n,"class")}(n)).length&&E(n,"class")}function C(n,e){var t,r="";for(t in n)r+=t;return new RegExp("["+r+"]",e?"g":"")}function A(n){var e,t="";for(e in n)t&&(t+=","),t+="span.mce-"+n[e];return t}function _(n){return"span"===n.nodeName.toLowerCase()&&n.classList.contains("mce-nbsp-wrap")}function w(u,n){var e=W.filterDescendants(F.fromDom(n),W.isMatch);v(e,function(n){var e=n.dom().parentNode;if(_(e))!function(n,e){O(n)?n.dom().classList.add(e):y(n,e)}(F.fromDom(e),H.nbspClass);else{for(var t=W.replaceWithSpans(u.dom.encode(h(n))),r=u.dom.create("div",null,t),o=void 0;o=r.lastChild;)u.dom.insertAfter(o,n.dom());u.dom.remove(n.dom())}})}function M(e,n){var t=e.dom.select(H.selector,n);v(t,function(n){_(n)?function(n,e){O(n)?n.dom().classList.remove(e):b(n,e);D(n)}(F.fromDom(n),H.nbspClass):e.dom.remove(n,!0)})}function S(t,r){return function(e){e.setActive(r.get());function n(n){return e.setActive(n.state)}return t.on("VisualChars",n),function(){return t.off("VisualChars",n)}}}var k,x=function(t){function n(){return o}function e(n){return n(t)}var r=u(t),o={fold:function(n,e){return e(t)},is:function(n){return t===n},isSome:s,isNone:f,getOr:r,getOrThunk:r,getOrDie:r,getOrNull:r,getOrUndefined:r,or:n,orThunk:n,map:function(n){return x(n(t))},each:function(n){n(t)},bind:e,exists:e,forall:e,filter:function(n){return n(t)?o:l},toArray:function(){return[t]},toString:function(){return"some("+t+")"},equals:function(n){return n.is(t)},equals_:function(n,e){return n.fold(f,function(n){return e(t,n)})}};return o},I=function(n){return null===n||n===undefined?l:x(n)},L=N("string"),P=N("boolean"),B=N("function"),R=N("number"),V=Array.prototype.slice,U=(B(Array.from)&&Array.from,r.Node.ATTRIBUTE_NODE,r.Node.CDATA_SECTION_NODE,r.Node.COMMENT_NODE,r.Node.DOCUMENT_NODE,r.Node.DOCUMENT_TYPE_NODE,r.Node.DOCUMENT_FRAGMENT_NODE,r.Node.ELEMENT_NODE,r.Node.TEXT_NODE),j=(r.Node.PROCESSING_INSTRUCTION_NODE,r.Node.ENTITY_REFERENCE_NODE,r.Node.ENTITY_NODE,r.Node.NOTATION_NODE,"undefined"!=typeof r.window?r.window:Function("return this;")(),k=U,function(n){return function(n){return n.dom().nodeType}(n)===k}),q=function(n){if(null===n||n===undefined)throw new Error("Node cannot be null or undefined");return{dom:u(n)}},F={fromHtml:function(n,e){var t=(e||r.document).createElement("div");if(t.innerHTML=n,!t.hasChildNodes()||1<t.childNodes.length)throw r.console.error("HTML does not have a single root node",n),new Error("HTML must have a single root node");return q(t.childNodes[0])},fromTag:function(n,e){var t=(e||r.document).createElement(n);return q(t)},fromText:function(n,e){var t=(e||r.document).createTextNode(n);return q(t)},fromDom:q,fromPoint:function(n,e,t){var r=n.dom();return I(r.elementFromPoint(e,t)).map(q)}},G={"\xa0":"nbsp","\xad":"shy"},H={charMap:G,regExp:C(G),regExpGlobal:C(G,!0),selector:A(G),nbspClass:"mce-nbsp",charMapToRegExp:C,charMapToSelector:A},Y=function(n){return'<span data-mce-bogus="1" class="mce-'+H.charMap[n]+'">'+n+"</span>"},z=function(n,e){var t=[],r=function(n,e){for(var t=n.length,r=new Array(t),o=0;o<t;o++){var u=n[o];r[o]=e(u,o)}return r}(n.dom().childNodes,F.fromDom);return v(r,function(n){e(n)&&(t=t.concat([n])),t=t.concat(z(n,e))}),t},W={isMatch:function(n){var e=h(n);return j(n)&&e!==undefined&&H.regExp.test(e)},filterDescendants:z,findParentElm:function(n,e){for(;n.parentNode;){if(n.parentNode===e)return n;n=n.parentNode}},replaceWithSpans:function(n){return n.replace(H.regExpGlobal,Y)}},K=w,X=M,J=function(n){var e=n.getBody(),t=n.selection.getBookmark(),r=W.findParentElm(n.selection.getNode(),e);r=r!==undefined?r:e,M(n,r),w(n,r),n.selection.moveToBookmark(t)},Q=function(n,e){var t,r=n.getBody(),o=n.selection;e.set(!e.get()),a(n,e.get()),t=o.getBookmark(),!0===e.get()?K(n,r):X(n,r),o.moveToBookmark(t)},Z=function(n,e){n.addCommand("mceVisualChars",function(){Q(n,e)})},$=tinymce.util.Tools.resolve("tinymce.util.Delay"),nn=function(e,t){var r=$.debounce(function(){J(e)},300);!1!==e.settings.forced_root_block&&e.on("keydown",function(n){!0===t.get()&&(13===n.keyCode?J(e):r())})},en=function(n){return n.getParam("visualchars_default_state",!1)},tn=function(e,t){e.on("init",function(){var n=!en(e);t.set(n),Q(e,t)})};!function rn(){i.add("visualchars",function(n){var e=o(!1);return Z(n,e),function(n,e){n.ui.registry.addToggleButton("visualchars",{tooltip:"Show invisible characters",icon:"visualchars",onAction:function(){return n.execCommand("mceVisualChars")},onSetup:S(n,e)}),n.ui.registry.addToggleMenuItem("visualchars",{text:"Show invisible characters",onAction:function(){return n.execCommand("mceVisualChars")},onSetup:S(n,e)})}(n,e),nn(n,e),tn(n,e),c(e)})}()}(window);
\ No newline at end of file
diff --git a/website/js/vendor/tinymce/js/tinymce/plugins/wordcount/plugin.min.js b/website/js/vendor/tinymce/js/tinymce/plugins/wordcount/plugin.min.js
new file mode 100644 (file)
index 0000000..f6f1fca
--- /dev/null
@@ -0,0 +1,9 @@
+/**
+ * Copyright (c) Tiny Technologies, Inc. All rights reserved.
+ * Licensed under the LGPL or a commercial license.
+ * For LGPL see License.txt in the project root for license information.
+ * For commercial licenses see https://www.tiny.cloud/
+ *
+ * Version: 5.1.5 (2019-12-19)
+ */
+!function(){"use strict";function t(){}function n(t){return function(){return t}}function r(t){return t}function e(){return U}var o,u=tinymce.util.Tools.resolve("tinymce.PluginManager"),i=n(!1),c=n(!0),a=function(){return(a=Object.assign||function(t){for(var n,e=1,r=arguments.length;e<r;e++)for(var o in n=arguments[e])Object.prototype.hasOwnProperty.call(n,o)&&(t[o]=n[o]);return t}).apply(this,arguments)},f="[-'\\.\u2018\u2019\u2024\ufe52\uff07\uff0e]",s="[:\xb7\xb7\u05f4\u2027\ufe13\ufe55\uff1a]",l="[\xb1+*/,;;\u0589\u060c\u060d\u066c\u07f8\u2044\ufe10\ufe14\ufe50\ufe54\uff0c\uff1b]",g="[0-9\u0660-\u0669\u066b\u06f0-\u06f9\u07c0-\u07c9\u0966-\u096f\u09e6-\u09ef\u0a66-\u0a6f\u0ae6-\u0aef\u0b66-\u0b6f\u0be6-\u0bef\u0c66-\u0c6f\u0ce6-\u0cef\u0d66-\u0d6f\u0e50-\u0e59\u0ed0-\u0ed9\u0f20-\u0f29\u1040-\u1049\u1090-\u1099\u17e0-\u17e9\u1810-\u1819\u1946-\u194f\u19d0-\u19d9\u1a80-\u1a89\u1a90-\u1a99\u1b50-\u1b59\u1bb0-\u1bb9\u1c40-\u1c49\u1c50-\u1c59\ua620-\ua629\ua8d0-\ua8d9\ua900-\ua909\ua9d0-\ua9d9\uaa50-\uaa59\uabf0-\uabf9]",p="\\r",d="\\n",h="[\x0B\f\x85\u2028\u2029]",y="[\u0300-\u036f\u0483-\u0489\u0591-\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u0610-\u061a\u064b-\u065f\u0670\u06d6-\u06dc\u06df-\u06e4\u06e7\u06e8\u06ea-\u06ed\u0711\u0730-\u074a\u07a6-\u07b0\u07eb-\u07f3\u0816-\u0819\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0859-\u085b\u0900-\u0903\u093a-\u093c\u093e-\u094f\u0951-\u0957\u0962\u0963\u0981-\u0983\u09bc\u09be-\u09c4\u09c7\u09c8\u09cb-\u09cd\u09d7\u09e2\u09e3\u0a01-\u0a03\u0a3c\u0a3e-\u0a42\u0a47\u0a48\u0a4b-\u0a4d\u0a51\u0a70\u0a71\u0a75\u0a81-\u0a83\u0abc\u0abe-\u0ac5\u0ac7-\u0ac9\u0acb-\u0acd\u0ae2\u0ae3\u0b01-\u0b03\u0b3c\u0b3e-\u0b44\u0b47\u0b48\u0b4b-\u0b4d\u0b56\u0b57\u0b62\u0b63\u0b82\u0bbe-\u0bc2\u0bc6-\u0bc8\u0bca-\u0bcd\u0bd7\u0c01-\u0c03\u0c3e-\u0c44\u0c46-\u0c48\u0c4a-\u0c4d\u0c55\u0c56\u0c62\u0c63\u0c82\u0c83\u0cbc\u0cbe-\u0cc4\u0cc6-\u0cc8\u0cca-\u0ccd\u0cd5\u0cd6\u0ce2\u0ce3\u0d02\u0d03\u0d3e-\u0d44\u0d46-\u0d48\u0d4a-\u0d4d\u0d57\u0d62\u0d63\u0d82\u0d83\u0dca\u0dcf-\u0dd4\u0dd6\u0dd8-\u0ddf\u0df2\u0df3\u0e31\u0e34-\u0e3a\u0e47-\u0e4e\u0eb1\u0eb4-\u0eb9\u0ebb\u0ebc\u0ec8-\u0ecd\u0f18\u0f19\u0f35\u0f37\u0f39\u0f3e\u0f3f\u0f71-\u0f84\u0f86\u0f87\u0f8d-\u0f97\u0f99-\u0fbc\u0fc6\u102b-\u103e\u1056-\u1059\u105e-\u1060\u1062-\u1064\u1067-\u106d\u1071-\u1074\u1082-\u108d\u108f\u109a-\u109d\u135d-\u135f\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17b6-\u17d3\u17dd\u180b-\u180d\u18a9\u1920-\u192b\u1930-\u193b\u19b0-\u19c0\u19c8\u19c9\u1a17-\u1a1b\u1a55-\u1a5e\u1a60-\u1a7c\u1a7f\u1b00-\u1b04\u1b34-\u1b44\u1b6b-\u1b73\u1b80-\u1b82\u1ba1-\u1baa\u1be6-\u1bf3\u1c24-\u1c37\u1cd0-\u1cd2\u1cd4-\u1ce8\u1ced\u1cf2\u1dc0-\u1de6\u1dfc-\u1dff\u200c\u200d\u20d0-\u20f0\u2cef-\u2cf1\u2d7f\u2de0-\u2dff\u302a-\u302f\u3099\u309a\ua66f-\ua672\ua67c\ua67d\ua6f0\ua6f1\ua802\ua806\ua80b\ua823-\ua827\ua880\ua881\ua8b4-\ua8c4\ua8e0-\ua8f1\ua926-\ua92d\ua947-\ua953\ua980-\ua983\ua9b3-\ua9c0\uaa29-\uaa36\uaa43\uaa4c\uaa4d\uaa7b\uaab0\uaab2-\uaab4\uaab7\uaab8\uaabe\uaabf\uaac1\uabe3-\uabea\uabec\uabed\ufb1e\ufe00-\ufe0f\ufe20-\ufe26\uff9e\uff9f]",C="[\xad\u0600-\u0603\u06dd\u070f\u17b4\u17b5\u200e\u200f\u202a-\u202e\u2060-\u2064\u206a-\u206f\ufeff\ufff9-\ufffb]",v="[\u3031-\u3035\u309b\u309c\u30a0-\u30fa\u30fc-\u30ff\u31f0-\u31ff\u32d0-\u32fe\u3300-\u3357\uff66-\uff9d]",w="[=_\u203f\u2040\u2054\ufe33\ufe34\ufe4d-\ufe4f\uff3f\u2200-\u22ff<>]",m="[!-#%-*,-\\/:;?@\\[-\\]_{}\xa1\xab\xb7\xbb\xbf;\xb7\u055a-\u055f\u0589\u058a\u05be\u05c0\u05c3\u05c6\u05f3\u05f4\u0609\u060a\u060c\u060d\u061b\u061e\u061f\u066a-\u066d\u06d4\u0700-\u070d\u07f7-\u07f9\u0830-\u083e\u085e\u0964\u0965\u0970\u0df4\u0e4f\u0e5a\u0e5b\u0f04-\u0f12\u0f3a-\u0f3d\u0f85\u0fd0-\u0fd4\u0fd9\u0fda\u104a-\u104f\u10fb\u1361-\u1368\u1400\u166d\u166e\u169b\u169c\u16eb-\u16ed\u1735\u1736\u17d4-\u17d6\u17d8-\u17da\u1800-\u180a\u1944\u1945\u1a1e\u1a1f\u1aa0-\u1aa6\u1aa8-\u1aad\u1b5a-\u1b60\u1bfc-\u1bff\u1c3b-\u1c3f\u1c7e\u1c7f\u1cd3\u2010-\u2027\u2030-\u2043\u2045-\u2051\u2053-\u205e\u207d\u207e\u208d\u208e\u3008\u3009\u2768-\u2775\u27c5\u27c6\u27e6-\u27ef\u2983-\u2998\u29d8-\u29db\u29fc\u29fd\u2cf9-\u2cfc\u2cfe\u2cff\u2d70\u2e00-\u2e2e\u2e30\u2e31\u3001-\u3003\u3008-\u3011\u3014-\u301f\u3030\u303d\u30a0\u30fb\ua4fe\ua4ff\ua60d-\ua60f\ua673\ua67e\ua6f2-\ua6f7\ua874-\ua877\ua8ce\ua8cf\ua8f8-\ua8fa\ua92e\ua92f\ua95f\ua9c1-\ua9cd\ua9de\ua9df\uaa5c-\uaa5f\uaade\uaadf\uabeb\ufd3e\ufd3f\ufe10-\ufe19\ufe30-\ufe52\ufe54-\ufe61\ufe63\ufe68\ufe6a\ufe6b\uff01-\uff03\uff05-\uff0a\uff0c-\uff0f\uff1a\uff1b\uff1f\uff20\uff3b-\uff3d\uff3f\uff5b\uff5d\uff5f-\uff65]",b=0,E=1,S=2,x=3,W=4,R=5,O=6,A=7,j=8,D=9,T=10,k=11,P=12,B=13,F=[new RegExp("[A-Za-z\xaa\xb5\xba\xc0-\xd6\xd8-\xf6\xf8-\u02c1\u02c6-\u02d1\u02e0-\u02e4\u02ec\u02ee\u0370-\u0374\u0376\u0377\u037a-\u037d\u0386\u0388-\u038a\u038c\u038e-\u03a1\u03a3-\u03f5\u03f7-\u0481\u048a-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05d0-\u05ea\u05f0-\u05f3\u0620-\u064a\u066e\u066f\u0671-\u06d3\u06d5\u06e5\u06e6\u06ee\u06ef\u06fa-\u06fc\u06ff\u0710\u0712-\u072f\u074d-\u07a5\u07b1\u07ca-\u07ea\u07f4\u07f5\u07fa\u0800-\u0815\u081a\u0824\u0828\u0840-\u0858\u0904-\u0939\u093d\u0950\u0958-\u0961\u0971-\u0977\u0979-\u097f\u0985-\u098c\u098f\u0990\u0993-\u09a8\u09aa-\u09b0\u09b2\u09b6-\u09b9\u09bd\u09ce\u09dc\u09dd\u09df-\u09e1\u09f0\u09f1\u0a05-\u0a0a\u0a0f\u0a10\u0a13-\u0a28\u0a2a-\u0a30\u0a32\u0a33\u0a35\u0a36\u0a38\u0a39\u0a59-\u0a5c\u0a5e\u0a72-\u0a74\u0a85-\u0a8d\u0a8f-\u0a91\u0a93-\u0aa8\u0aaa-\u0ab0\u0ab2\u0ab3\u0ab5-\u0ab9\u0abd\u0ad0\u0ae0\u0ae1\u0b05-\u0b0c\u0b0f\u0b10\u0b13-\u0b28\u0b2a-\u0b30\u0b32\u0b33\u0b35-\u0b39\u0b3d\u0b5c\u0b5d\u0b5f-\u0b61\u0b71\u0b83\u0b85-\u0b8a\u0b8e-\u0b90\u0b92-\u0b95\u0b99\u0b9a\u0b9c\u0b9e\u0b9f\u0ba3\u0ba4\u0ba8-\u0baa\u0bae-\u0bb9\u0bd0\u0c05-\u0c0c\u0c0e-\u0c10\u0c12-\u0c28\u0c2a-\u0c33\u0c35-\u0c39\u0c3d\u0c58\u0c59\u0c60\u0c61\u0c85-\u0c8c\u0c8e-\u0c90\u0c92-\u0ca8\u0caa-\u0cb3\u0cb5-\u0cb9\u0cbd\u0cde\u0ce0\u0ce1\u0cf1\u0cf2\u0d05-\u0d0c\u0d0e-\u0d10\u0d12-\u0d3a\u0d3d\u0d4e\u0d60\u0d61\u0d7a-\u0d7f\u0d85-\u0d96\u0d9a-\u0db1\u0db3-\u0dbb\u0dbd\u0dc0-\u0dc6\u0f00\u0f40-\u0f47\u0f49-\u0f6c\u0f88-\u0f8c\u10a0-\u10c5\u10d0-\u10fa\u10fc\u1100-\u1248\u124a-\u124d\u1250-\u1256\u1258\u125a-\u125d\u1260-\u1288\u128a-\u128d\u1290-\u12b0\u12b2-\u12b5\u12b8-\u12be\u12c0\u12c2-\u12c5\u12c8-\u12d6\u12d8-\u1310\u1312-\u1315\u1318-\u135a\u1380-\u138f\u13a0-\u13f4\u1401-\u166c\u166f-\u167f\u1681-\u169a\u16a0-\u16ea\u16ee-\u16f0\u1700-\u170c\u170e-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176c\u176e-\u1770\u1820-\u1877\u1880-\u18a8\u18aa\u18b0-\u18f5\u1900-\u191c\u1a00-\u1a16\u1b05-\u1b33\u1b45-\u1b4b\u1b83-\u1ba0\u1bae\u1baf\u1bc0-\u1be5\u1c00-\u1c23\u1c4d-\u1c4f\u1c5a-\u1c7d\u1ce9-\u1cec\u1cee-\u1cf1\u1d00-\u1dbf\u1e00-\u1f15\u1f18-\u1f1d\u1f20-\u1f45\u1f48-\u1f4d\u1f50-\u1f57\u1f59\u1f5b\u1f5d\u1f5f-\u1f7d\u1f80-\u1fb4\u1fb6-\u1fbc\u1fbe\u1fc2-\u1fc4\u1fc6-\u1fcc\u1fd0-\u1fd3\u1fd6-\u1fdb\u1fe0-\u1fec\u1ff2-\u1ff4\u1ff6-\u1ffc\u2071\u207f\u2090-\u209c\u2102\u2107\u210a-\u2113\u2115\u2119-\u211d\u2124\u2126\u2128\u212a-\u212d\u212f-\u2139\u213c-\u213f\u2145-\u2149\u214e\u2160-\u2188\u24b6-\u24e9\u2c00-\u2c2e\u2c30-\u2c5e\u2c60-\u2ce4\u2ceb-\u2cee\u2d00-\u2d25\u2d30-\u2d65\u2d6f\u2d80-\u2d96\u2da0-\u2da6\u2da8-\u2dae\u2db0-\u2db6\u2db8-\u2dbe\u2dc0-\u2dc6\u2dc8-\u2dce\u2dd0-\u2dd6\u2dd8-\u2dde\u2e2f\u3005\u303b\u303c\u3105-\u312d\u3131-\u318e\u31a0-\u31ba\ua000-\ua48c\ua4d0-\ua4fd\ua500-\ua60c\ua610-\ua61f\ua62a\ua62b\ua640-\ua66e\ua67f-\ua697\ua6a0-\ua6ef\ua717-\ua71f\ua722-\ua788\ua78b-\ua78e\ua790\ua791\ua7a0-\ua7a9\ua7fa-\ua801\ua803-\ua805\ua807-\ua80a\ua80c-\ua822\ua840-\ua873\ua882-\ua8b3\ua8f2-\ua8f7\ua8fb\ua90a-\ua925\ua930-\ua946\ua960-\ua97c\ua984-\ua9b2\ua9cf\uaa00-\uaa28\uaa40-\uaa42\uaa44-\uaa4b\uab01-\uab06\uab09-\uab0e\uab11-\uab16\uab20-\uab26\uab28-\uab2e\uabc0-\uabe2\uac00-\ud7a3\ud7b0-\ud7c6\ud7cb-\ud7fb\ufb00-\ufb06\ufb13-\ufb17\ufb1d\ufb1f-\ufb28\ufb2a-\ufb36\ufb38-\ufb3c\ufb3e\ufb40\ufb41\ufb43\ufb44\ufb46-\ufbb1\ufbd3-\ufd3d\ufd50-\ufd8f\ufd92-\ufdc7\ufdf0-\ufdfb\ufe70-\ufe74\ufe76-\ufefc\uff21-\uff3a\uff41-\uff5a\uffa0-\uffbe\uffc2-\uffc7\uffca-\uffcf\uffd2-\uffd7\uffda-\uffdc]"),new RegExp(f),new RegExp(s),new RegExp(l),new RegExp(g),new RegExp(p),new RegExp(d),new RegExp(h),new RegExp(y),new RegExp(C),new RegExp(v),new RegExp(w),new RegExp("@")],N=new RegExp("^"+m+"$"),U=(o={fold:function(t,n){return t()},is:i,isSome:i,isNone:c,getOr:M,getOrThunk:z,getOrDie:function(t){throw new Error(t||"error: getOrDie called on none.")},getOrNull:n(null),getOrUndefined:n(undefined),or:M,orThunk:z,map:e,each:t,bind:e,exists:i,forall:c,filter:e,equals:_,equals_:_,toArray:function(){return[]},toString:n("none()")},Object.freeze&&Object.freeze(o),o);function _(t){return t.isNone()}function z(t){return t()}function M(t){return t}function q(t){for(var n=ot,e=rt.length,r=0;r<e;++r){var o=rt[r];if(o&&o.test(t)){n=r;break}}return n}function $(t){return function(t,n){for(var e=t.length,r=new Array(e),o=0;o<e;o++){var u=t[o];r[o]=n(u,o)}return r}(t,function(e){var r={};return function(t){if(r[t])return r[t];var n=e(t);return r[t]=n}}(q))}function I(t,n){var e=function(t,n){var e;for(e=n;e<t.length&&!ut.test(t[e]);e++);return e}(t,n+1);return"://"===t.slice(n+1,e).join("").substr(0,3)?e:n}function Z(t,n){for(var e,r=n.getBlockElements(),o=n.getShortEndedElements(),u=[],i="",c=new at(t,t);t=c.next();)3===t.nodeType?i+=t.data:(r[(e=t).nodeName]||o[e.nodeName])&&i.length&&(u.push(i),i="");return i.length&&u.push(i),u}function G(t){return t.replace(/[\uD800-\uDBFF][\uDC00-\uDFFF]/g,"_").length}function H(t,n){var e=Z(t,n).join("\n");return ct(e.split(""),r).length}function J(t,n){var e=Z(t,n).join("");return G(e)}function K(t,n){var e=Z(t,n).join("").replace(/\s/g,"");return G(e)}function L(t,n){return function(){return n(t.getBody(),t.schema)}}function Q(t,n){return function(){return n(t.selection.getRng().cloneContents(),t.schema)}}function V(t){return L(t,H)}function X(t,n){!function(t,n){t.fire("wordCountUpdate",{wordCount:{words:n.body.getWordCount(),characters:n.body.getCharacterCount(),charactersWithoutSpaces:n.body.getCharacterCountWithoutSpaces()}})}(t,n)}function Y(t,n){t.windowManager.open({title:"Word Count",body:{type:"panel",items:[{type:"table",header:["Count","Document","Selection"],cells:[["Words",String(n.body.getWordCount()),String(n.selection.getWordCount())],["Characters (no spaces)",String(n.body.getCharacterCountWithoutSpaces()),String(n.selection.getCharacterCountWithoutSpaces())],["Characters",String(n.body.getCharacterCount()),String(n.selection.getCharacterCount())]]}]},buttons:[{type:"cancel",name:"close",text:"Close",primary:!0}]})}var tt,nt=(tt="function",function(t){return function(t){if(null===t)return"null";var n=typeof t;return"object"==n&&(Array.prototype.isPrototypeOf(t)||t.constructor&&"Array"===t.constructor.name)?"array":"object"==n&&(String.prototype.isPrototypeOf(t)||t.constructor&&"String"===t.constructor.name)?"string":n}(t)===tt}),et=Array.prototype.slice,rt=(nt(Array.from)&&Array.from,F),ot=B,ut=/^\s+$/,it=N,ct=function(t,n,e){e=a(a({},{includeWhitespace:!1,includePunctuation:!1}),e);for(var r=[],o=[],u=0;u<t.length;u++){var i=n(t[u]);"\ufeff"!==i&&(r.push(t[u]),o.push(i))}return function(t,n,e,r){for(var o,u,i,c,a,f,s,l=[],g=[],p=0;p<e.length;++p)if(g.push(t[p]),a=c=void 0,f=(u=e)[i=p],s=u[i+1],!(i<0||i>u.length-1&&0!==i||f===b&&s===b||(a=u[i+2],f===b&&(s===S||s===E||s===P)&&a===b||(c=u[i-1],(f===S||f===E||s===P)&&s===b&&c===b||!(f!==W&&f!==b||s!==W&&s!==b)||(f===x||f===E)&&s===W&&c===W||f===W&&(s===x||s===E)&&a===W||f===j||f===D||c===j||c===D||s===j||s===D||f===R&&s===O||f!==A&&f!==R&&f!==O&&s!==A&&s!==R&&s!==O&&(f===T&&s===T||s===k&&(f===b||f===W||f===T||f===k)||f===k&&(s===b||s===W||s===T)||f===P))))){var d=n[p];if((r.includeWhitespace||!ut.test(d))&&(r.includePunctuation||!it.test(d))){var h=p-g.length+1,y=p+1,C=n.slice(h,y).join("");if("http"===(o=C)||"https"===o){var v=I(n,p),w=t.slice(y,v);Array.prototype.push.apply(g,w),p=v}l.push(g)}g=[]}return l}(r,o,$(o),e)},at=tinymce.util.Tools.resolve("tinymce.dom.TreeWalker"),ft=tinymce.util.Tools.resolve("tinymce.util.Delay");!function st(e){void 0===e&&(e=300),u.add("wordcount",function(t){var n=function(t){return{body:{getWordCount:V(t),getCharacterCount:L(t,J),getCharacterCountWithoutSpaces:L(t,K)},selection:{getWordCount:Q(t,H),getCharacterCount:Q(t,J),getCharacterCountWithoutSpaces:Q(t,K)},getCount:V(t)}}(t);return function(t,n){t.ui.registry.addButton("wordcount",{tooltip:"Word count",icon:"character-count",onAction:function(){return Y(t,n)}}),t.ui.registry.addMenuItem("wordcount",{text:"Word count",icon:"character-count",onAction:function(){return Y(t,n)}})}(t,n),function(t,n,e){var r=ft.debounce(function(){return X(t,n)},e);t.on("init",function(){X(t,n),ft.setEditorTimeout(t,function(){t.on("SetContent BeforeAddUndo Undo Redo keyup",r)},0)})}(t,n,e),n})}()}();
\ No newline at end of file
diff --git a/website/js/vendor/tinymce/js/tinymce/skins/content/dark/content.min.css b/website/js/vendor/tinymce/js/tinymce/skins/content/dark/content.min.css
new file mode 100644 (file)
index 0000000..764ae9a
--- /dev/null
@@ -0,0 +1,7 @@
+/**
+ * Copyright (c) Tiny Technologies, Inc. All rights reserved.
+ * Licensed under the LGPL or a commercial license.
+ * For LGPL see License.txt in the project root for license information.
+ * For commercial licenses see https://www.tiny.cloud/
+ */
+body{background-color:#2f3742;color:#dfe0e4;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Oxygen,Ubuntu,Cantarell,'Open Sans','Helvetica Neue',sans-serif;line-height:1.4;margin:1rem}a{color:#4099ff}table{border-collapse:collapse}table td,table th{border:1px solid #6d737b;padding:.4rem}figure{display:table;margin:1rem auto}figure figcaption{color:#8a8f97;display:block;margin-top:.25rem;text-align:center}hr{border-color:#6d737b;border-style:solid;border-width:1px 0 0 0}code{background-color:#6d737b;border-radius:3px;padding:.1rem .2rem}td[data-mce-selected],th[data-mce-selected]{color:#333}.mce-content-body:not([dir=rtl]) blockquote{border-left:2px solid #6d737b;margin-left:1.5rem;padding-left:1rem}.mce-content-body[dir=rtl] blockquote{border-right:2px solid #6d737b;margin-right:1.5rem;padding-right:1rem}
diff --git a/website/js/vendor/tinymce/js/tinymce/skins/content/default/content.min.css b/website/js/vendor/tinymce/js/tinymce/skins/content/default/content.min.css
new file mode 100644 (file)
index 0000000..d122f02
--- /dev/null
@@ -0,0 +1,12 @@
+/**
+ * Copyright (c) Tiny Technologies, Inc. All rights reserved.
+ * Licensed under the LGPL or a commercial license.
+ * For LGPL see License.txt in the project root for license information.
+ * For commercial licenses see https://www.tiny.cloud/
+ */
+body{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Oxygen,Ubuntu,Cantarell,'Open Sans','Helvetica Neue',sans-serif;line-height:1.4;margin:1rem}table{border-collapse:collapse}table td,table th{border:1px solid #ccc;padding:.4rem}figure{display:table;margin:1rem auto}figure figcaption{color:#999;display:block;margin-top:.25rem;text-align:center}
+hr{border-color:#ccc;border-style:solid;border-width:1px 0 0 0}
+code{background-color:#e8e8e8;border-radius:3px;padding:.1rem .2rem}
+.mce-content-body:not([dir=rtl]) 
+blockquote{border-left:2px solid #ccc;margin-left:1.5rem;padding-left:1rem}
+.mce-content-body[dir=rtl] blockquote{border-right:2px solid #ccc;margin-right:1.5rem;padding-right:1rem}
diff --git a/website/js/vendor/tinymce/js/tinymce/skins/content/document/content.min.css b/website/js/vendor/tinymce/js/tinymce/skins/content/document/content.min.css
new file mode 100644 (file)
index 0000000..8346c96
--- /dev/null
@@ -0,0 +1,7 @@
+/**
+ * Copyright (c) Tiny Technologies, Inc. All rights reserved.
+ * Licensed under the LGPL or a commercial license.
+ * For LGPL see License.txt in the project root for license information.
+ * For commercial licenses see https://www.tiny.cloud/
+ */
+@media screen{html{background:#f4f4f4}}body{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Oxygen,Ubuntu,Cantarell,'Open Sans','Helvetica Neue',sans-serif}@media screen{body{background-color:#fff;box-shadow:0 0 4px rgba(0,0,0,.15);box-sizing:border-box;margin:1rem auto 0;max-width:820px;min-height:calc(100vh - 1rem);padding:4rem 6rem 6rem 6rem}}table{border-collapse:collapse}table td,table th{border:1px solid #ccc;padding:.4rem}figure figcaption{color:#999;margin-top:.25rem;text-align:center}hr{border-color:#ccc;border-style:solid;border-width:1px 0 0 0}.mce-content-body:not([dir=rtl]) blockquote{border-left:2px solid #ccc;margin-left:1.5rem;padding-left:1rem}.mce-content-body[dir=rtl] blockquote{border-right:2px solid #ccc;margin-right:1.5rem;padding-right:1rem}
diff --git a/website/js/vendor/tinymce/js/tinymce/skins/content/writer/content.min.css b/website/js/vendor/tinymce/js/tinymce/skins/content/writer/content.min.css
new file mode 100644 (file)
index 0000000..2983791
--- /dev/null
@@ -0,0 +1,7 @@
+/**
+ * Copyright (c) Tiny Technologies, Inc. All rights reserved.
+ * Licensed under the LGPL or a commercial license.
+ * For LGPL see License.txt in the project root for license information.
+ * For commercial licenses see https://www.tiny.cloud/
+ */
+body{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Oxygen,Ubuntu,Cantarell,'Open Sans','Helvetica Neue',sans-serif;line-height:1.4;margin:1rem auto;max-width:900px}table{border-collapse:collapse}table td,table th{border:1px solid #ccc;padding:.4rem}figure{display:table;margin:1rem auto}figure figcaption{color:#999;display:block;margin-top:.25rem;text-align:center}hr{border-color:#ccc;border-style:solid;border-width:1px 0 0 0}code{background-color:#e8e8e8;border-radius:3px;padding:.1rem .2rem}.mce-content-body:not([dir=rtl]) blockquote{border-left:2px solid #ccc;margin-left:1.5rem;padding-left:1rem}.mce-content-body[dir=rtl] blockquote{border-right:2px solid #ccc;margin-right:1.5rem;padding-right:1rem}
diff --git a/website/js/vendor/tinymce/js/tinymce/skins/ui/oxide-dark/content.inline.min.css b/website/js/vendor/tinymce/js/tinymce/skins/ui/oxide-dark/content.inline.min.css
new file mode 100644 (file)
index 0000000..961196d
--- /dev/null
@@ -0,0 +1,7 @@
+/**
+ * Copyright (c) Tiny Technologies, Inc. All rights reserved.
+ * Licensed under the LGPL or a commercial license.
+ * For LGPL see License.txt in the project root for license information.
+ * For commercial licenses see https://www.tiny.cloud/
+ */
+.mce-content-body .mce-item-anchor{background:transparent url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'8'%20height%3D'12'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20d%3D'M0%200L8%200%208%2012%204.09117821%209%200%2012z'%2F%3E%3C%2Fsvg%3E%0A") no-repeat center;cursor:default;display:inline-block;height:12px!important;padding:0 2px;-webkit-user-modify:read-only;-moz-user-modify:read-only;-webkit-user-select:all;-moz-user-select:all;-ms-user-select:all;user-select:all;width:8px!important}.mce-content-body .mce-item-anchor[data-mce-selected]{outline-offset:1px}.tox-comments-visible .tox-comment{background-color:#fff0b7}.tox-comments-visible .tox-comment--active{background-color:#ffe168}.tox-checklist>li:not(.tox-checklist--hidden){list-style:none;margin:.25em 0}.tox-checklist>li:not(.tox-checklist--hidden)::before{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%3E%3Cg%20id%3D%22checklist-unchecked%22%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%3Crect%20id%3D%22Rectangle%22%20width%3D%2215%22%20height%3D%2215%22%20x%3D%22.5%22%20y%3D%22.5%22%20fill-rule%3D%22nonzero%22%20stroke%3D%22%234C4C4C%22%20rx%3D%222%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%0A");background-size:100%;content:'';cursor:pointer;height:1em;margin-left:-1.5em;margin-top:.125em;position:absolute;width:1em}.tox-checklist li:not(.tox-checklist--hidden).tox-checklist--checked::before{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%3E%3Cg%20id%3D%22checklist-checked%22%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%3Crect%20id%3D%22Rectangle%22%20width%3D%2216%22%20height%3D%2216%22%20fill%3D%22%234099FF%22%20fill-rule%3D%22nonzero%22%20rx%3D%222%22%2F%3E%3Cpath%20id%3D%22Path%22%20fill%3D%22%23FFF%22%20fill-rule%3D%22nonzero%22%20d%3D%22M11.5703186%2C3.14417309%20C11.8516238%2C2.73724603%2012.4164781%2C2.62829933%2012.83558%2C2.89774797%20C13.260121%2C3.17069355%2013.3759736%2C3.72932262%2013.0909105%2C4.14168582%20L7.7580587%2C11.8560195%20C7.43776896%2C12.3193404%206.76483983%2C12.3852142%206.35607322%2C11.9948725%20L3.02491697%2C8.8138662%20C2.66090143%2C8.46625845%202.65798871%2C7.89594698%203.01850234%2C7.54483354%20C3.373942%2C7.19866177%203.94940006%2C7.19592841%204.30829608%2C7.5386474%20L6.85276923%2C9.9684299%20L11.5703186%2C3.14417309%20Z%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%0A")}[dir=rtl] .tox-checklist>li:not(.tox-checklist--hidden)::before{margin-left:0;margin-right:-1.5em}code[class*=language-],pre[class*=language-]{color:#000;background:0 0;text-shadow:0 1px #fff;font-family:Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace;font-size:1em;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;tab-size:4;-webkit-hyphens:none;-ms-hyphens:none;hyphens:none}code[class*=language-] ::-moz-selection,code[class*=language-]::-moz-selection,pre[class*=language-] ::-moz-selection,pre[class*=language-]::-moz-selection{text-shadow:none;background:#b3d4fc}code[class*=language-] ::selection,code[class*=language-]::selection,pre[class*=language-] ::selection,pre[class*=language-]::selection{text-shadow:none;background:#b3d4fc}@media print{code[class*=language-],pre[class*=language-]{text-shadow:none}}pre[class*=language-]{padding:1em;margin:.5em 0;overflow:auto}:not(pre)>code[class*=language-],pre[class*=language-]{background:#f5f2f0}:not(pre)>code[class*=language-]{padding:.1em;border-radius:.3em;white-space:normal}.token.cdata,.token.comment,.token.doctype,.token.prolog{color:#708090}.token.punctuation{color:#999}.namespace{opacity:.7}.token.boolean,.token.constant,.token.deleted,.token.number,.token.property,.token.symbol,.token.tag{color:#905}.token.attr-name,.token.builtin,.token.char,.token.inserted,.token.selector,.token.string{color:#690}.language-css .token.string,.style .token.string,.token.entity,.token.operator,.token.url{color:#9a6e3a;background:hsla(0,0%,100%,.5)}.token.atrule,.token.attr-value,.token.keyword{color:#07a}.token.class-name,.token.function{color:#dd4a68}.token.important,.token.regex,.token.variable{color:#e90}.token.bold,.token.important{font-weight:700}.token.italic{font-style:italic}.token.entity{cursor:help}.mce-content-body{overflow-wrap:break-word;word-wrap:break-word}.mce-content-body .mce-visual-caret{background-color:#000;background-color:currentcolor;position:absolute}.mce-content-body .mce-visual-caret-hidden{display:none}.mce-content-body [data-mce-caret]{left:-1000px;margin:0;padding:0;position:absolute;right:auto;top:0}.mce-content-body .mce-offscreen-selection{left:-9999999999px;max-width:1000000px;position:absolute}.mce-content-body [contentEditable=false]{cursor:default}.mce-content-body [contentEditable=true]{cursor:text}.tox-cursor-format-painter{cursor:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%3E%0A%20%20%3Cg%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%0A%20%20%20%20%3Cpath%20fill%3D%22%23000%22%20fill-rule%3D%22nonzero%22%20d%3D%22M15%2C6%20C15%2C5.45%2014.55%2C5%2014%2C5%20L6%2C5%20C5.45%2C5%205%2C5.45%205%2C6%20L5%2C10%20C5%2C10.55%205.45%2C11%206%2C11%20L14%2C11%20C14.55%2C11%2015%2C10.55%2015%2C10%20L15%2C9%20L16%2C9%20L16%2C12%20L9%2C12%20L9%2C19%20C9%2C19.55%209.45%2C20%2010%2C20%20L11%2C20%20C11.55%2C20%2012%2C19.55%2012%2C19%20L12%2C14%20L18%2C14%20L18%2C7%20L15%2C7%20L15%2C6%20Z%22%2F%3E%0A%20%20%20%20%3Cpath%20fill%3D%22%23000%22%20fill-rule%3D%22nonzero%22%20d%3D%22M1%2C1%20L8.25%2C1%20C8.66421356%2C1%209%2C1.33578644%209%2C1.75%20L9%2C1.75%20C9%2C2.16421356%208.66421356%2C2.5%208.25%2C2.5%20L2.5%2C2.5%20L2.5%2C8.25%20C2.5%2C8.66421356%202.16421356%2C9%201.75%2C9%20L1.75%2C9%20C1.33578644%2C9%201%2C8.66421356%201%2C8.25%20L1%2C1%20Z%22%2F%3E%0A%20%20%3C%2Fg%3E%0A%3C%2Fsvg%3E%0A"),default}.mce-content-body figure.align-left{float:left}.mce-content-body figure.align-right{float:right}.mce-content-body figure.image.align-center{display:table;margin-left:auto;margin-right:auto}.mce-preview-object{border:1px solid gray;display:inline-block;line-height:0;margin:0 2px 0 2px;position:relative}.mce-preview-object .mce-shim{background:url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7);height:100%;left:0;position:absolute;top:0;width:100%}.mce-preview-object[data-mce-selected="2"] .mce-shim{display:none}.mce-object{background:transparent url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%3E%3Cpath%20d%3D%22M4%203h16a1%201%200%200%201%201%201v16a1%201%200%200%201-1%201H4a1%201%200%200%201-1-1V4a1%201%200%200%201%201-1zm1%202v14h14V5H5zm4.79%202.565l5.64%204.028a.5.5%200%200%201%200%20.814l-5.64%204.028a.5.5%200%200%201-.79-.407V7.972a.5.5%200%200%201%20.79-.407z%22%2F%3E%3C%2Fsvg%3E%0A") no-repeat center;border:1px dashed #aaa}.mce-pagebreak{border:1px dashed #aaa;cursor:default;display:block;height:5px;margin-top:15px;page-break-before:always;width:100%}@media print{.mce-pagebreak{border:0}}.tiny-pageembed .mce-shim{background:url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7);height:100%;left:0;position:absolute;top:0;width:100%}.tiny-pageembed[data-mce-selected="2"] .mce-shim{display:none}.tiny-pageembed{display:inline-block;position:relative}.tiny-pageembed--16by9,.tiny-pageembed--1by1,.tiny-pageembed--21by9,.tiny-pageembed--4by3{display:block;overflow:hidden;padding:0;position:relative;width:100%}.tiny-pageembed--16by9::before,.tiny-pageembed--1by1::before,.tiny-pageembed--21by9::before,.tiny-pageembed--4by3::before{content:"";display:block}.tiny-pageembed--21by9::before{padding-top:42.857143%}.tiny-pageembed--16by9::before{padding-top:56.25%}.tiny-pageembed--4by3::before{padding-top:75%}.tiny-pageembed--1by1::before{padding-top:100%}.tiny-pageembed--16by9 iframe,.tiny-pageembed--1by1 iframe,.tiny-pageembed--21by9 iframe,.tiny-pageembed--4by3 iframe{border:0;height:100%;left:0;position:absolute;top:0;width:100%}.mce-content-body div.mce-resizehandle{background-color:#4099ff;border-color:#4099ff;border-style:solid;border-width:1px;box-sizing:border-box;height:10px;position:absolute;width:10px;z-index:10000}.mce-content-body div.mce-resizehandle:hover{background-color:#4099ff}.mce-content-body div.mce-resizehandle:nth-of-type(1){cursor:nwse-resize}.mce-content-body div.mce-resizehandle:nth-of-type(2){cursor:nesw-resize}.mce-content-body div.mce-resizehandle:nth-of-type(3){cursor:nwse-resize}.mce-content-body div.mce-resizehandle:nth-of-type(4){cursor:nesw-resize}.mce-content-body .mce-clonedresizable{opacity:.5;outline:1px dashed #000;position:absolute;z-index:10000}.mce-content-body .mce-resize-helper{background:#555;background:rgba(0,0,0,.75);border:1px;border-radius:3px;color:#fff;display:none;font-family:sans-serif;font-size:12px;line-height:14px;margin:5px 10px;padding:5px;position:absolute;white-space:nowrap;z-index:10001}.mce-match-marker{background:#aaa;color:#fff}.mce-match-marker-selected{background:#39f;color:#fff}.mce-content-body img[data-mce-selected],.mce-content-body table[data-mce-selected]{outline:3px solid #b4d7ff}.mce-content-body hr[data-mce-selected]{outline:3px solid #b4d7ff;outline-offset:1px}.mce-content-body [contentEditable=false] [contentEditable=true]:focus{outline:3px solid #b4d7ff}.mce-content-body [contentEditable=false] [contentEditable=true]:hover{outline:3px solid #b4d7ff}.mce-content-body [contentEditable=false][data-mce-selected]{cursor:not-allowed;outline:3px solid #b4d7ff}.mce-content-body.mce-content-readonly [contentEditable=true]:focus,.mce-content-body.mce-content-readonly [contentEditable=true]:hover{outline:0}.mce-content-body [data-mce-selected=inline-boundary]{background-color:#b4d7ff}.mce-content-body .mce-edit-focus{outline:3px solid #b4d7ff}.mce-content-body td[data-mce-selected],.mce-content-body th[data-mce-selected]{background-color:#b4d7ff!important}.mce-content-body td[data-mce-selected]::-moz-selection,.mce-content-body th[data-mce-selected]::-moz-selection{background:0 0}.mce-content-body td[data-mce-selected]::selection,.mce-content-body th[data-mce-selected]::selection{background:0 0}.mce-content-body td[data-mce-selected] *,.mce-content-body th[data-mce-selected] *{-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.mce-content-body img::-moz-selection{background:0 0}.mce-content-body img::selection{background:0 0}.ephox-snooker-resizer-bar{background-color:#b4d7ff;opacity:0}.ephox-snooker-resizer-cols{cursor:col-resize}.ephox-snooker-resizer-rows{cursor:row-resize}.ephox-snooker-resizer-bar.ephox-snooker-resizer-bar-dragging{opacity:1}.mce-spellchecker-word{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'4'%20height%3D'4'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20stroke%3D'%23ff0000'%20fill%3D'none'%20stroke-linecap%3D'round'%20stroke-opacity%3D'.75'%20d%3D'M0%203L2%201%204%203'%2F%3E%3C%2Fsvg%3E%0A");background-position:0 calc(100% + 1px);background-repeat:repeat-x;background-size:auto 6px;cursor:default;height:2rem}.mce-spellchecker-grammar{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'4'%20height%3D'4'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20stroke%3D'%2300A835'%20fill%3D'none'%20stroke-linecap%3D'round'%20d%3D'M0%203L2%201%204%203'%2F%3E%3C%2Fsvg%3E%0A");background-position:0 calc(100% + 1px);background-repeat:repeat-x;background-size:auto 6px;cursor:default}.mce-toc{border:1px solid gray}.mce-toc h2{margin:4px}.mce-toc li{list-style-type:none}.mce-item-table,.mce-item-table caption,.mce-item-table td,.mce-item-table th{border:1px dashed #bbb}.mce-visualblocks address,.mce-visualblocks article,.mce-visualblocks aside,.mce-visualblocks blockquote,.mce-visualblocks div:not([data-mce-bogus]),.mce-visualblocks dl,.mce-visualblocks figcaption,.mce-visualblocks figure,.mce-visualblocks h1,.mce-visualblocks h2,.mce-visualblocks h3,.mce-visualblocks h4,.mce-visualblocks h5,.mce-visualblocks h6,.mce-visualblocks hgroup,.mce-visualblocks ol,.mce-visualblocks p,.mce-visualblocks pre,.mce-visualblocks section,.mce-visualblocks ul{background-repeat:no-repeat;border:1px dashed #bbb;margin-left:3px;padding-top:10px}.mce-visualblocks p{background-image:url(data:image/gif;base64,R0lGODlhCQAJAJEAAAAAAP///7u7u////yH5BAEAAAMALAAAAAAJAAkAAAIQnG+CqCN/mlyvsRUpThG6AgA7)}.mce-visualblocks h1{background-image:url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybGu1JuxHoAfRNRW3TWXyF2YiRUAOw==)}.mce-visualblocks h2{background-image:url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8Hybbx4oOuqgTynJd6bGlWg3DkJzoaUAAAOw==)}.mce-visualblocks h3{background-image:url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIZjI8Hybbx4oOuqgTynJf2Ln2NOHpQpmhAAQA7)}.mce-visualblocks h4{background-image:url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxInR0zqeAdhtJlXwV1oCll2HaWgAAOw==)}.mce-visualblocks h5{background-image:url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxIoiuwjane4iq5GlW05GgIkIZUAAAOw==)}.mce-visualblocks h6{background-image:url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxIoiuwjan04jep1iZ1XRlAo5bVgAAOw==)}.mce-visualblocks div:not([data-mce-bogus]){background-image:url(data:image/gif;base64,R0lGODlhEgAKAIABALu7u////yH5BAEAAAEALAAAAAASAAoAAAIfjI9poI0cgDywrhuxfbrzDEbQM2Ei5aRjmoySW4pAAQA7)}.mce-visualblocks section{background-image:url(data:image/gif;base64,R0lGODlhKAAKAIABALu7u////yH5BAEAAAEALAAAAAAoAAoAAAI5jI+pywcNY3sBWHdNrplytD2ellDeSVbp+GmWqaDqDMepc8t17Y4vBsK5hDyJMcI6KkuYU+jpjLoKADs=)}.mce-visualblocks article{background-image:url(data:image/gif;base64,R0lGODlhKgAKAIABALu7u////yH5BAEAAAEALAAAAAAqAAoAAAI6jI+pywkNY3wG0GBvrsd2tXGYSGnfiF7ikpXemTpOiJScasYoDJJrjsG9gkCJ0ag6KhmaIe3pjDYBBQA7)}.mce-visualblocks blockquote{background-image:url(data:image/gif;base64,R0lGODlhPgAKAIABALu7u////yH5BAEAAAEALAAAAAA+AAoAAAJPjI+py+0Knpz0xQDyuUhvfoGgIX5iSKZYgq5uNL5q69asZ8s5rrf0yZmpNkJZzFesBTu8TOlDVAabUyatguVhWduud3EyiUk45xhTTgMBBQA7)}.mce-visualblocks address{background-image:url(data:image/gif;base64,R0lGODlhLQAKAIABALu7u////yH5BAEAAAEALAAAAAAtAAoAAAI/jI+pywwNozSP1gDyyZcjb3UaRpXkWaXmZW4OqKLhBmLs+K263DkJK7OJeifh7FicKD9A1/IpGdKkyFpNmCkAADs=)}.mce-visualblocks pre{background-image:url(data:image/gif;base64,R0lGODlhFQAKAIABALu7uwAAACH5BAEAAAEALAAAAAAVAAoAAAIjjI+ZoN0cgDwSmnpz1NCueYERhnibZVKLNnbOq8IvKpJtVQAAOw==)}.mce-visualblocks figure{background-image:url(data:image/gif;base64,R0lGODlhJAAKAIAAALu7u////yH5BAEAAAEALAAAAAAkAAoAAAI0jI+py+2fwAHUSFvD3RlvG4HIp4nX5JFSpnZUJ6LlrM52OE7uSWosBHScgkSZj7dDKnWAAgA7)}.mce-visualblocks figcaption{border:1px dashed #bbb}.mce-visualblocks hgroup{background-image:url(data:image/gif;base64,R0lGODlhJwAKAIABALu7uwAAACH5BAEAAAEALAAAAAAnAAoAAAI3jI+pywYNI3uB0gpsRtt5fFnfNZaVSYJil4Wo03Hv6Z62uOCgiXH1kZIIJ8NiIxRrAZNMZAtQAAA7)}.mce-visualblocks aside{background-image:url(data:image/gif;base64,R0lGODlhHgAKAIABAKqqqv///yH5BAEAAAEALAAAAAAeAAoAAAItjI+pG8APjZOTzgtqy7I3f1yehmQcFY4WKZbqByutmW4aHUd6vfcVbgudgpYCADs=)}.mce-visualblocks ul{background-image:url(data:image/gif;base64,R0lGODlhDQAKAIAAALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybGuYnqUVSjvw26DzzXiqIDlVwAAOw==)}.mce-visualblocks ol{background-image:url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybH6HHt0qourxC6CvzXieHyeWQAAOw==)}.mce-visualblocks dl{background-image:url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybEOnmOvUoWznTqeuEjNSCqeGRUAOw==)}.mce-visualblocks:not([dir=rtl]) address,.mce-visualblocks:not([dir=rtl]) article,.mce-visualblocks:not([dir=rtl]) aside,.mce-visualblocks:not([dir=rtl]) blockquote,.mce-visualblocks:not([dir=rtl]) div:not([data-mce-bogus]),.mce-visualblocks:not([dir=rtl]) dl,.mce-visualblocks:not([dir=rtl]) figcaption,.mce-visualblocks:not([dir=rtl]) figure,.mce-visualblocks:not([dir=rtl]) h1,.mce-visualblocks:not([dir=rtl]) h2,.mce-visualblocks:not([dir=rtl]) h3,.mce-visualblocks:not([dir=rtl]) h4,.mce-visualblocks:not([dir=rtl]) h5,.mce-visualblocks:not([dir=rtl]) h6,.mce-visualblocks:not([dir=rtl]) hgroup,.mce-visualblocks:not([dir=rtl]) ol,.mce-visualblocks:not([dir=rtl]) p,.mce-visualblocks:not([dir=rtl]) pre,.mce-visualblocks:not([dir=rtl]) section,.mce-visualblocks:not([dir=rtl]) ul{margin-left:3px}.mce-visualblocks[dir=rtl] address,.mce-visualblocks[dir=rtl] article,.mce-visualblocks[dir=rtl] aside,.mce-visualblocks[dir=rtl] blockquote,.mce-visualblocks[dir=rtl] div:not([data-mce-bogus]),.mce-visualblocks[dir=rtl] dl,.mce-visualblocks[dir=rtl] figcaption,.mce-visualblocks[dir=rtl] figure,.mce-visualblocks[dir=rtl] h1,.mce-visualblocks[dir=rtl] h2,.mce-visualblocks[dir=rtl] h3,.mce-visualblocks[dir=rtl] h4,.mce-visualblocks[dir=rtl] h5,.mce-visualblocks[dir=rtl] h6,.mce-visualblocks[dir=rtl] hgroup,.mce-visualblocks[dir=rtl] ol,.mce-visualblocks[dir=rtl] p,.mce-visualblocks[dir=rtl] pre,.mce-visualblocks[dir=rtl] section,.mce-visualblocks[dir=rtl] ul{background-position-x:right;margin-right:3px}.mce-nbsp,.mce-shy{background:#aaa}.mce-shy::after{content:'-'}
diff --git a/website/js/vendor/tinymce/js/tinymce/skins/ui/oxide-dark/content.min.css b/website/js/vendor/tinymce/js/tinymce/skins/ui/oxide-dark/content.min.css
new file mode 100644 (file)
index 0000000..019c112
--- /dev/null
@@ -0,0 +1,7 @@
+/**
+ * Copyright (c) Tiny Technologies, Inc. All rights reserved.
+ * Licensed under the LGPL or a commercial license.
+ * For LGPL see License.txt in the project root for license information.
+ * For commercial licenses see https://www.tiny.cloud/
+ */
+.mce-content-body .mce-item-anchor{background:transparent url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'8'%20height%3D'12'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20d%3D'M0%200L8%200%208%2012%204.09117821%209%200%2012z'%20fill%3D%22%23cccccc%22%2F%3E%3C%2Fsvg%3E%0A") no-repeat center;cursor:default;display:inline-block;height:12px!important;padding:0 2px;-webkit-user-modify:read-only;-moz-user-modify:read-only;-webkit-user-select:all;-moz-user-select:all;-ms-user-select:all;user-select:all;width:8px!important}.mce-content-body .mce-item-anchor[data-mce-selected]{outline-offset:1px}.tox-comments-visible .tox-comment{background-color:#fff0b7}.tox-comments-visible .tox-comment--active{background-color:#ffe168}.tox-checklist>li:not(.tox-checklist--hidden){list-style:none;margin:.25em 0}.tox-checklist>li:not(.tox-checklist--hidden)::before{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%3E%3Cg%20id%3D%22checklist-unchecked%22%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%3Crect%20id%3D%22Rectangle%22%20width%3D%2215%22%20height%3D%2215%22%20x%3D%22.5%22%20y%3D%22.5%22%20fill-rule%3D%22nonzero%22%20stroke%3D%22%236d737b%22%20rx%3D%222%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%0A");background-size:100%;content:'';cursor:pointer;height:1em;margin-left:-1.5em;margin-top:.125em;position:absolute;width:1em}.tox-checklist li:not(.tox-checklist--hidden).tox-checklist--checked::before{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%3E%3Cg%20id%3D%22checklist-checked%22%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%3Crect%20id%3D%22Rectangle%22%20width%3D%2216%22%20height%3D%2216%22%20fill%3D%22%234099FF%22%20fill-rule%3D%22nonzero%22%20rx%3D%222%22%2F%3E%3Cpath%20id%3D%22Path%22%20fill%3D%22%23FFF%22%20fill-rule%3D%22nonzero%22%20d%3D%22M11.5703186%2C3.14417309%20C11.8516238%2C2.73724603%2012.4164781%2C2.62829933%2012.83558%2C2.89774797%20C13.260121%2C3.17069355%2013.3759736%2C3.72932262%2013.0909105%2C4.14168582%20L7.7580587%2C11.8560195%20C7.43776896%2C12.3193404%206.76483983%2C12.3852142%206.35607322%2C11.9948725%20L3.02491697%2C8.8138662%20C2.66090143%2C8.46625845%202.65798871%2C7.89594698%203.01850234%2C7.54483354%20C3.373942%2C7.19866177%203.94940006%2C7.19592841%204.30829608%2C7.5386474%20L6.85276923%2C9.9684299%20L11.5703186%2C3.14417309%20Z%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%0A")}[dir=rtl] .tox-checklist>li:not(.tox-checklist--hidden)::before{margin-left:0;margin-right:-1.5em}code[class*=language-],pre[class*=language-]{color:#f8f8f2;background:0 0;text-shadow:0 1px rgba(0,0,0,.3);font-family:Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;tab-size:4;-webkit-hyphens:none;-ms-hyphens:none;hyphens:none}pre[class*=language-]{padding:1em;margin:.5em 0;overflow:auto;border-radius:.3em}:not(pre)>code[class*=language-],pre[class*=language-]{background:#282a36}:not(pre)>code[class*=language-]{padding:.1em;border-radius:.3em;white-space:normal}.token.cdata,.token.comment,.token.doctype,.token.prolog{color:#6272a4}.token.punctuation{color:#f8f8f2}.namespace{opacity:.7}.token.constant,.token.deleted,.token.property,.token.symbol,.token.tag{color:#ff79c6}.token.boolean,.token.number{color:#bd93f9}.token.attr-name,.token.builtin,.token.char,.token.inserted,.token.selector,.token.string{color:#50fa7b}.language-css .token.string,.style .token.string,.token.entity,.token.operator,.token.url,.token.variable{color:#f8f8f2}.token.atrule,.token.attr-value,.token.class-name,.token.function{color:#f1fa8c}.token.keyword{color:#8be9fd}.token.important,.token.regex{color:#ffb86c}.token.bold,.token.important{font-weight:700}.token.italic{font-style:italic}.token.entity{cursor:help}.mce-content-body{overflow-wrap:break-word;word-wrap:break-word}.mce-content-body .mce-visual-caret{background-color:#000;background-color:currentcolor;position:absolute}.mce-content-body .mce-visual-caret-hidden{display:none}.mce-content-body [data-mce-caret]{left:-1000px;margin:0;padding:0;position:absolute;right:auto;top:0}.mce-content-body .mce-offscreen-selection{left:-9999999999px;max-width:1000000px;position:absolute}.mce-content-body [contentEditable=false]{cursor:default}.mce-content-body [contentEditable=true]{cursor:text}.tox-cursor-format-painter{cursor:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%3E%0A%20%20%3Cg%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%0A%20%20%20%20%3Cpath%20fill%3D%22%23000%22%20fill-rule%3D%22nonzero%22%20d%3D%22M15%2C6%20C15%2C5.45%2014.55%2C5%2014%2C5%20L6%2C5%20C5.45%2C5%205%2C5.45%205%2C6%20L5%2C10%20C5%2C10.55%205.45%2C11%206%2C11%20L14%2C11%20C14.55%2C11%2015%2C10.55%2015%2C10%20L15%2C9%20L16%2C9%20L16%2C12%20L9%2C12%20L9%2C19%20C9%2C19.55%209.45%2C20%2010%2C20%20L11%2C20%20C11.55%2C20%2012%2C19.55%2012%2C19%20L12%2C14%20L18%2C14%20L18%2C7%20L15%2C7%20L15%2C6%20Z%22%2F%3E%0A%20%20%20%20%3Cpath%20fill%3D%22%23000%22%20fill-rule%3D%22nonzero%22%20d%3D%22M1%2C1%20L8.25%2C1%20C8.66421356%2C1%209%2C1.33578644%209%2C1.75%20L9%2C1.75%20C9%2C2.16421356%208.66421356%2C2.5%208.25%2C2.5%20L2.5%2C2.5%20L2.5%2C8.25%20C2.5%2C8.66421356%202.16421356%2C9%201.75%2C9%20L1.75%2C9%20C1.33578644%2C9%201%2C8.66421356%201%2C8.25%20L1%2C1%20Z%22%2F%3E%0A%20%20%3C%2Fg%3E%0A%3C%2Fsvg%3E%0A"),default}.mce-content-body figure.align-left{float:left}.mce-content-body figure.align-right{float:right}.mce-content-body figure.image.align-center{display:table;margin-left:auto;margin-right:auto}.mce-preview-object{border:1px solid gray;display:inline-block;line-height:0;margin:0 2px 0 2px;position:relative}.mce-preview-object .mce-shim{background:url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7);height:100%;left:0;position:absolute;top:0;width:100%}.mce-preview-object[data-mce-selected="2"] .mce-shim{display:none}.mce-object{background:transparent url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%3E%3Cpath%20d%3D%22M4%203h16a1%201%200%200%201%201%201v16a1%201%200%200%201-1%201H4a1%201%200%200%201-1-1V4a1%201%200%200%201%201-1zm1%202v14h14V5H5zm4.79%202.565l5.64%204.028a.5.5%200%200%201%200%20.814l-5.64%204.028a.5.5%200%200%201-.79-.407V7.972a.5.5%200%200%201%20.79-.407z%22%20fill%3D%22%23cccccc%22%2F%3E%3C%2Fsvg%3E%0A") no-repeat center;border:1px dashed #aaa}.mce-pagebreak{border:1px dashed #aaa;cursor:default;display:block;height:5px;margin-top:15px;page-break-before:always;width:100%}@media print{.mce-pagebreak{border:0}}.tiny-pageembed .mce-shim{background:url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7);height:100%;left:0;position:absolute;top:0;width:100%}.tiny-pageembed[data-mce-selected="2"] .mce-shim{display:none}.tiny-pageembed{display:inline-block;position:relative}.tiny-pageembed--16by9,.tiny-pageembed--1by1,.tiny-pageembed--21by9,.tiny-pageembed--4by3{display:block;overflow:hidden;padding:0;position:relative;width:100%}.tiny-pageembed--16by9::before,.tiny-pageembed--1by1::before,.tiny-pageembed--21by9::before,.tiny-pageembed--4by3::before{content:"";display:block}.tiny-pageembed--21by9::before{padding-top:42.857143%}.tiny-pageembed--16by9::before{padding-top:56.25%}.tiny-pageembed--4by3::before{padding-top:75%}.tiny-pageembed--1by1::before{padding-top:100%}.tiny-pageembed--16by9 iframe,.tiny-pageembed--1by1 iframe,.tiny-pageembed--21by9 iframe,.tiny-pageembed--4by3 iframe{border:0;height:100%;left:0;position:absolute;top:0;width:100%}.mce-content-body div.mce-resizehandle{background-color:#4099ff;border-color:#4099ff;border-style:solid;border-width:1px;box-sizing:border-box;height:10px;position:absolute;width:10px;z-index:10000}.mce-content-body div.mce-resizehandle:hover{background-color:#4099ff}.mce-content-body div.mce-resizehandle:nth-of-type(1){cursor:nwse-resize}.mce-content-body div.mce-resizehandle:nth-of-type(2){cursor:nesw-resize}.mce-content-body div.mce-resizehandle:nth-of-type(3){cursor:nwse-resize}.mce-content-body div.mce-resizehandle:nth-of-type(4){cursor:nesw-resize}.mce-content-body .mce-clonedresizable{opacity:.5;outline:1px dashed #000;position:absolute;z-index:10000}.mce-content-body .mce-resize-helper{background:#555;background:rgba(0,0,0,.75);border:1px;border-radius:3px;color:#fff;display:none;font-family:sans-serif;font-size:12px;line-height:14px;margin:5px 10px;padding:5px;position:absolute;white-space:nowrap;z-index:10001}.mce-match-marker{background:#aaa;color:#fff}.mce-match-marker-selected{background:#39f;color:#fff}.mce-content-body img[data-mce-selected],.mce-content-body table[data-mce-selected]{outline:3px solid #4099ff}.mce-content-body hr[data-mce-selected]{outline:3px solid #4099ff;outline-offset:1px}.mce-content-body [contentEditable=false] [contentEditable=true]:focus{outline:3px solid #4099ff}.mce-content-body [contentEditable=false] [contentEditable=true]:hover{outline:3px solid #4099ff}.mce-content-body [contentEditable=false][data-mce-selected]{cursor:not-allowed;outline:3px solid #4099ff}.mce-content-body.mce-content-readonly [contentEditable=true]:focus,.mce-content-body.mce-content-readonly [contentEditable=true]:hover{outline:0}.mce-content-body [data-mce-selected=inline-boundary]{background-color:#4099ff}.mce-content-body .mce-edit-focus{outline:3px solid #4099ff}.mce-content-body td[data-mce-selected],.mce-content-body th[data-mce-selected]{background-color:#b4d7ff!important}.mce-content-body td[data-mce-selected]::-moz-selection,.mce-content-body th[data-mce-selected]::-moz-selection{background:0 0}.mce-content-body td[data-mce-selected]::selection,.mce-content-body th[data-mce-selected]::selection{background:0 0}.mce-content-body td[data-mce-selected] *,.mce-content-body th[data-mce-selected] *{-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.mce-content-body img::-moz-selection{background:0 0}.mce-content-body img::selection{background:0 0}.ephox-snooker-resizer-bar{background-color:#4099ff;opacity:0}.ephox-snooker-resizer-cols{cursor:col-resize}.ephox-snooker-resizer-rows{cursor:row-resize}.ephox-snooker-resizer-bar.ephox-snooker-resizer-bar-dragging{opacity:1}.mce-spellchecker-word{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'4'%20height%3D'4'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20stroke%3D'%23ff0000'%20fill%3D'none'%20stroke-linecap%3D'round'%20stroke-opacity%3D'.75'%20d%3D'M0%203L2%201%204%203'%2F%3E%3C%2Fsvg%3E%0A");background-position:0 calc(100% + 1px);background-repeat:repeat-x;background-size:auto 6px;cursor:default;height:2rem}.mce-spellchecker-grammar{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'4'%20height%3D'4'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20stroke%3D'%2300A835'%20fill%3D'none'%20stroke-linecap%3D'round'%20d%3D'M0%203L2%201%204%203'%2F%3E%3C%2Fsvg%3E%0A");background-position:0 calc(100% + 1px);background-repeat:repeat-x;background-size:auto 6px;cursor:default}.mce-toc{border:1px solid gray}.mce-toc h2{margin:4px}.mce-toc li{list-style-type:none}.mce-item-table,.mce-item-table caption,.mce-item-table td,.mce-item-table th{border:1px dashed #bbb}.mce-visualblocks address,.mce-visualblocks article,.mce-visualblocks aside,.mce-visualblocks blockquote,.mce-visualblocks div:not([data-mce-bogus]),.mce-visualblocks dl,.mce-visualblocks figcaption,.mce-visualblocks figure,.mce-visualblocks h1,.mce-visualblocks h2,.mce-visualblocks h3,.mce-visualblocks h4,.mce-visualblocks h5,.mce-visualblocks h6,.mce-visualblocks hgroup,.mce-visualblocks ol,.mce-visualblocks p,.mce-visualblocks pre,.mce-visualblocks section,.mce-visualblocks ul{background-repeat:no-repeat;border:1px dashed #bbb;margin-left:3px;padding-top:10px}.mce-visualblocks p{background-image:url(data:image/gif;base64,R0lGODlhCQAJAJEAAAAAAP///7u7u////yH5BAEAAAMALAAAAAAJAAkAAAIQnG+CqCN/mlyvsRUpThG6AgA7)}.mce-visualblocks h1{background-image:url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybGu1JuxHoAfRNRW3TWXyF2YiRUAOw==)}.mce-visualblocks h2{background-image:url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8Hybbx4oOuqgTynJd6bGlWg3DkJzoaUAAAOw==)}.mce-visualblocks h3{background-image:url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIZjI8Hybbx4oOuqgTynJf2Ln2NOHpQpmhAAQA7)}.mce-visualblocks h4{background-image:url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxInR0zqeAdhtJlXwV1oCll2HaWgAAOw==)}.mce-visualblocks h5{background-image:url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxIoiuwjane4iq5GlW05GgIkIZUAAAOw==)}.mce-visualblocks h6{background-image:url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxIoiuwjan04jep1iZ1XRlAo5bVgAAOw==)}.mce-visualblocks div:not([data-mce-bogus]){background-image:url(data:image/gif;base64,R0lGODlhEgAKAIABALu7u////yH5BAEAAAEALAAAAAASAAoAAAIfjI9poI0cgDywrhuxfbrzDEbQM2Ei5aRjmoySW4pAAQA7)}.mce-visualblocks section{background-image:url(data:image/gif;base64,R0lGODlhKAAKAIABALu7u////yH5BAEAAAEALAAAAAAoAAoAAAI5jI+pywcNY3sBWHdNrplytD2ellDeSVbp+GmWqaDqDMepc8t17Y4vBsK5hDyJMcI6KkuYU+jpjLoKADs=)}.mce-visualblocks article{background-image:url(data:image/gif;base64,R0lGODlhKgAKAIABALu7u////yH5BAEAAAEALAAAAAAqAAoAAAI6jI+pywkNY3wG0GBvrsd2tXGYSGnfiF7ikpXemTpOiJScasYoDJJrjsG9gkCJ0ag6KhmaIe3pjDYBBQA7)}.mce-visualblocks blockquote{background-image:url(data:image/gif;base64,R0lGODlhPgAKAIABALu7u////yH5BAEAAAEALAAAAAA+AAoAAAJPjI+py+0Knpz0xQDyuUhvfoGgIX5iSKZYgq5uNL5q69asZ8s5rrf0yZmpNkJZzFesBTu8TOlDVAabUyatguVhWduud3EyiUk45xhTTgMBBQA7)}.mce-visualblocks address{background-image:url(data:image/gif;base64,R0lGODlhLQAKAIABALu7u////yH5BAEAAAEALAAAAAAtAAoAAAI/jI+pywwNozSP1gDyyZcjb3UaRpXkWaXmZW4OqKLhBmLs+K263DkJK7OJeifh7FicKD9A1/IpGdKkyFpNmCkAADs=)}.mce-visualblocks pre{background-image:url(data:image/gif;base64,R0lGODlhFQAKAIABALu7uwAAACH5BAEAAAEALAAAAAAVAAoAAAIjjI+ZoN0cgDwSmnpz1NCueYERhnibZVKLNnbOq8IvKpJtVQAAOw==)}.mce-visualblocks figure{background-image:url(data:image/gif;base64,R0lGODlhJAAKAIAAALu7u////yH5BAEAAAEALAAAAAAkAAoAAAI0jI+py+2fwAHUSFvD3RlvG4HIp4nX5JFSpnZUJ6LlrM52OE7uSWosBHScgkSZj7dDKnWAAgA7)}.mce-visualblocks figcaption{border:1px dashed #bbb}.mce-visualblocks hgroup{background-image:url(data:image/gif;base64,R0lGODlhJwAKAIABALu7uwAAACH5BAEAAAEALAAAAAAnAAoAAAI3jI+pywYNI3uB0gpsRtt5fFnfNZaVSYJil4Wo03Hv6Z62uOCgiXH1kZIIJ8NiIxRrAZNMZAtQAAA7)}.mce-visualblocks aside{background-image:url(data:image/gif;base64,R0lGODlhHgAKAIABAKqqqv///yH5BAEAAAEALAAAAAAeAAoAAAItjI+pG8APjZOTzgtqy7I3f1yehmQcFY4WKZbqByutmW4aHUd6vfcVbgudgpYCADs=)}.mce-visualblocks ul{background-image:url(data:image/gif;base64,R0lGODlhDQAKAIAAALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybGuYnqUVSjvw26DzzXiqIDlVwAAOw==)}.mce-visualblocks ol{background-image:url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybH6HHt0qourxC6CvzXieHyeWQAAOw==)}.mce-visualblocks dl{background-image:url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybEOnmOvUoWznTqeuEjNSCqeGRUAOw==)}.mce-visualblocks:not([dir=rtl]) address,.mce-visualblocks:not([dir=rtl]) article,.mce-visualblocks:not([dir=rtl]) aside,.mce-visualblocks:not([dir=rtl]) blockquote,.mce-visualblocks:not([dir=rtl]) div:not([data-mce-bogus]),.mce-visualblocks:not([dir=rtl]) dl,.mce-visualblocks:not([dir=rtl]) figcaption,.mce-visualblocks:not([dir=rtl]) figure,.mce-visualblocks:not([dir=rtl]) h1,.mce-visualblocks:not([dir=rtl]) h2,.mce-visualblocks:not([dir=rtl]) h3,.mce-visualblocks:not([dir=rtl]) h4,.mce-visualblocks:not([dir=rtl]) h5,.mce-visualblocks:not([dir=rtl]) h6,.mce-visualblocks:not([dir=rtl]) hgroup,.mce-visualblocks:not([dir=rtl]) ol,.mce-visualblocks:not([dir=rtl]) p,.mce-visualblocks:not([dir=rtl]) pre,.mce-visualblocks:not([dir=rtl]) section,.mce-visualblocks:not([dir=rtl]) ul{margin-left:3px}.mce-visualblocks[dir=rtl] address,.mce-visualblocks[dir=rtl] article,.mce-visualblocks[dir=rtl] aside,.mce-visualblocks[dir=rtl] blockquote,.mce-visualblocks[dir=rtl] div:not([data-mce-bogus]),.mce-visualblocks[dir=rtl] dl,.mce-visualblocks[dir=rtl] figcaption,.mce-visualblocks[dir=rtl] figure,.mce-visualblocks[dir=rtl] h1,.mce-visualblocks[dir=rtl] h2,.mce-visualblocks[dir=rtl] h3,.mce-visualblocks[dir=rtl] h4,.mce-visualblocks[dir=rtl] h5,.mce-visualblocks[dir=rtl] h6,.mce-visualblocks[dir=rtl] hgroup,.mce-visualblocks[dir=rtl] ol,.mce-visualblocks[dir=rtl] p,.mce-visualblocks[dir=rtl] pre,.mce-visualblocks[dir=rtl] section,.mce-visualblocks[dir=rtl] ul{background-position-x:right;margin-right:3px}.mce-nbsp,.mce-shy{background:#aaa}.mce-shy::after{content:'-'}body{font-family:sans-serif}table{border-collapse:collapse}
diff --git a/website/js/vendor/tinymce/js/tinymce/skins/ui/oxide-dark/content.mobile.min.css b/website/js/vendor/tinymce/js/tinymce/skins/ui/oxide-dark/content.mobile.min.css
new file mode 100644 (file)
index 0000000..35f7dc0
--- /dev/null
@@ -0,0 +1,7 @@
+/**
+ * Copyright (c) Tiny Technologies, Inc. All rights reserved.
+ * Licensed under the LGPL or a commercial license.
+ * For LGPL see License.txt in the project root for license information.
+ * For commercial licenses see https://www.tiny.cloud/
+ */
+.tinymce-mobile-unfocused-selections .tinymce-mobile-unfocused-selection{background-color:green;display:inline-block;opacity:.5;position:absolute}body{-webkit-text-size-adjust:none}body img{max-width:96vw}body table img{max-width:95%}body{font-family:sans-serif}table{border-collapse:collapse}
diff --git a/website/js/vendor/tinymce/js/tinymce/skins/ui/oxide-dark/fonts/tinymce-mobile.woff b/website/js/vendor/tinymce/js/tinymce/skins/ui/oxide-dark/fonts/tinymce-mobile.woff
new file mode 100644 (file)
index 0000000..1e3be03
Binary files /dev/null and b/website/js/vendor/tinymce/js/tinymce/skins/ui/oxide-dark/fonts/tinymce-mobile.woff differ
diff --git a/website/js/vendor/tinymce/js/tinymce/skins/ui/oxide-dark/skin.min.css b/website/js/vendor/tinymce/js/tinymce/skins/ui/oxide-dark/skin.min.css
new file mode 100644 (file)
index 0000000..b110a57
--- /dev/null
@@ -0,0 +1,7 @@
+/**
+ * Copyright (c) Tiny Technologies, Inc. All rights reserved.
+ * Licensed under the LGPL or a commercial license.
+ * For LGPL see License.txt in the project root for license information.
+ * For commercial licenses see https://www.tiny.cloud/
+ */
+.tox{box-sizing:content-box;color:#2a3746;cursor:auto;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;font-size:16px;font-style:normal;font-weight:400;line-height:normal;-webkit-tap-highlight-color:transparent;text-decoration:none;text-shadow:none;text-transform:none;vertical-align:initial;white-space:normal}.tox :not(svg){box-sizing:inherit;color:inherit;cursor:inherit;direction:inherit;font-family:inherit;font-size:inherit;font-style:inherit;font-weight:inherit;line-height:inherit;-webkit-tap-highlight-color:inherit;text-align:inherit;text-decoration:inherit;text-shadow:inherit;text-transform:inherit;vertical-align:inherit;white-space:inherit}.tox :not(svg){background:0 0;border:0;float:none;height:auto;margin:0;max-width:none;outline:0;padding:0;position:static;width:auto}.tox:not([dir=rtl]){direction:ltr;text-align:left}.tox[dir=rtl]{direction:rtl;text-align:right}.tox-tinymce{border:1px solid #000;border-radius:0;box-shadow:none;box-sizing:border-box;display:flex;flex-direction:column;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;overflow:hidden;position:relative;visibility:inherit!important}.tox-tinymce-inline{border:none;box-shadow:none}.tox-tinymce-inline .tox-editor-header{border:1px solid #000;border-bottom:0;border-radius:0;box-shadow:none}.tox-tinymce-aux{font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;z-index:1300}.tox-tinymce :focus,.tox-tinymce-aux :focus{outline:0}button::-moz-focus-inner{border:0}.tox .accessibility-issue__header{align-items:center;display:flex;margin-bottom:4px}.tox .accessibility-issue__description{align-items:stretch;border:1px solid #000;border-radius:3px;display:flex;justify-content:space-between}.tox .accessibility-issue__description>div{padding-bottom:4px}.tox .accessibility-issue__description>div>div{align-items:center;display:flex;margin-bottom:4px}.tox .accessibility-issue__description>:last-child:not(:only-child){border-color:#000;border-style:solid}.tox .accessibility-issue__repair{margin-top:16px}.tox .accessibility-issue--info .accessibility-issue__description{background-color:rgba(32,122,183,.5);border-color:#207ab7;color:#fff}.tox .accessibility-issue--info .accessibility-issue__description>:last-child{border-color:#207ab7}.tox .accessibility-issue--info h2{color:#fff}.tox .accessibility-issue--info .tox-icon svg{fill:#fff}.tox .accessibility-issue--info a .tox-icon{color:#fff}.tox .accessibility-issue--warn .accessibility-issue__description{background-color:rgba(255,165,0,.5);border-color:rgba(255,165,0,.8);color:#fff}.tox .accessibility-issue--warn .accessibility-issue__description>:last-child{border-color:rgba(255,165,0,.8)}.tox .accessibility-issue--warn h2{color:#fff}.tox .accessibility-issue--warn .tox-icon svg{fill:#fff}.tox .accessibility-issue--warn a .tox-icon{color:#fff}.tox .accessibility-issue--error .accessibility-issue__description{background-color:rgba(204,0,0,.5);border-color:rgba(204,0,0,.8);color:#fff}.tox .accessibility-issue--error .accessibility-issue__description>:last-child{border-color:rgba(204,0,0,.8)}.tox .accessibility-issue--error h2{color:#fff}.tox .accessibility-issue--error .tox-icon svg{fill:#fff}.tox .accessibility-issue--error a .tox-icon{color:#fff}.tox .accessibility-issue--success .accessibility-issue__description{background-color:rgba(120,171,70,.5);border-color:rgba(120,171,70,.8);color:#fff}.tox .accessibility-issue--success .accessibility-issue__description>:last-child{border-color:rgba(120,171,70,.8)}.tox .accessibility-issue--success h2{color:#fff}.tox .accessibility-issue--success .tox-icon svg{fill:#fff}.tox .accessibility-issue--success a .tox-icon{color:#fff}.tox .tox-dialog__body-content .accessibility-issue__header h1,.tox .tox-dialog__body-content .tox-form__group .accessibility-issue__description h2{margin-top:0}.tox:not([dir=rtl]) .accessibility-issue__header .tox-button{margin-left:4px}.tox:not([dir=rtl]) .accessibility-issue__header>:nth-last-child(2){margin-left:auto}.tox:not([dir=rtl]) .accessibility-issue__description{padding:4px 4px 4px 8px}.tox:not([dir=rtl]) .accessibility-issue__description>:last-child{border-left-width:1px;padding-left:4px}.tox[dir=rtl] .accessibility-issue__header .tox-button{margin-right:4px}.tox[dir=rtl] .accessibility-issue__header>:nth-last-child(2){margin-right:auto}.tox[dir=rtl] .accessibility-issue__description{padding:4px 8px 4px 4px}.tox[dir=rtl] .accessibility-issue__description>:last-child{border-right-width:1px;padding-right:4px}.tox .tox-anchorbar{display:flex;flex:0 0 auto}.tox .tox-bar{display:flex;flex:0 0 auto}.tox .tox-button{background-color:#207ab7;background-image:none;background-position:none;background-repeat:none;border-color:#207ab7;border-radius:3px;border-style:solid;border-width:1px;box-shadow:none;box-sizing:border-box;color:#fff;cursor:pointer;display:inline-block;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;font-size:14px;font-weight:700;letter-spacing:1;line-height:24px;margin:0;outline:0;padding:4px 16px;text-align:center;text-decoration:none;text-transform:capitalize;white-space:nowrap}.tox .tox-button[disabled]{background-color:#207ab7;background-image:none;border-color:#207ab7;box-shadow:none;color:rgba(255,255,255,.5);cursor:not-allowed}.tox .tox-button:focus:not(:disabled){background-color:#1c6ca1;background-image:none;border-color:#1c6ca1;box-shadow:none;color:#fff}.tox .tox-button:hover:not(:disabled){background-color:#1c6ca1;background-image:none;border-color:#1c6ca1;box-shadow:none;color:#fff}.tox .tox-button:active:not(:disabled){background-color:#185d8c;background-image:none;border-color:#185d8c;box-shadow:none;color:#fff}.tox .tox-button--secondary{background-color:#3d546f;background-image:none;background-position:none;background-repeat:none;border-color:#3d546f;border-radius:3px;border-style:solid;border-width:1px;box-shadow:none;color:#fff;outline:0;padding:4px 16px;text-decoration:none;text-transform:capitalize}.tox .tox-button--secondary[disabled]{background-color:#3d546f;background-image:none;border-color:#3d546f;box-shadow:none;color:rgba(255,255,255,.5)}.tox .tox-button--secondary:focus:not(:disabled){background-color:#34485f;background-image:none;border-color:#34485f;box-shadow:none;color:#fff}.tox .tox-button--secondary:hover:not(:disabled){background-color:#34485f;background-image:none;border-color:#34485f;box-shadow:none;color:#fff}.tox .tox-button--secondary:active:not(:disabled){background-color:#2b3b4e;background-image:none;border-color:#2b3b4e;box-shadow:none;color:#fff}.tox .tox-button--icon,.tox .tox-button.tox-button--icon,.tox .tox-button.tox-button--secondary.tox-button--icon{padding:4px}.tox .tox-button--icon .tox-icon svg,.tox .tox-button.tox-button--icon .tox-icon svg,.tox .tox-button.tox-button--secondary.tox-button--icon .tox-icon svg{display:block;fill:currentColor}.tox .tox-button-link{background:0;border:none;box-sizing:border-box;cursor:pointer;display:inline-block;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;font-size:16px;font-weight:400;line-height:1.3;margin:0;padding:0;white-space:nowrap}.tox .tox-button-link--sm{font-size:14px}.tox .tox-button--naked{background-color:transparent;border-color:transparent;box-shadow:unset;color:#fff}.tox .tox-button--naked[disabled]{background-color:#3d546f;border-color:#3d546f;box-shadow:none;color:rgba(255,255,255,.5)}.tox .tox-button--naked:hover:not(:disabled){background-color:#34485f;border-color:#34485f;box-shadow:none;color:#fff}.tox .tox-button--naked:focus:not(:disabled){background-color:#34485f;border-color:#34485f;box-shadow:none;color:#fff}.tox .tox-button--naked:active:not(:disabled){background-color:#2b3b4e;border-color:#2b3b4e;box-shadow:none;color:#fff}.tox .tox-button--naked .tox-icon svg{fill:currentColor}.tox .tox-button--naked.tox-button--icon:hover:not(:disabled){color:#fff}.tox .tox-checkbox{align-items:center;border-radius:3px;cursor:pointer;display:flex;height:36px;min-width:36px}.tox .tox-checkbox__input{height:1px;overflow:hidden;position:absolute;top:auto;width:1px}.tox .tox-checkbox__icons{align-items:center;border-radius:3px;box-shadow:0 0 0 2px transparent;box-sizing:content-box;display:flex;height:24px;justify-content:center;padding:calc(4px - 1px);width:24px}.tox .tox-checkbox__icons .tox-checkbox-icon__unchecked svg{display:block;fill:rgba(255,255,255,.2)}.tox .tox-checkbox__icons .tox-checkbox-icon__indeterminate svg{display:none;fill:#207ab7}.tox .tox-checkbox__icons .tox-checkbox-icon__checked svg{display:none;fill:#207ab7}.tox .tox-checkbox--disabled{color:rgba(255,255,255,.5);cursor:not-allowed}.tox .tox-checkbox--disabled .tox-checkbox__icons .tox-checkbox-icon__checked svg{fill:rgba(255,255,255,.5)}.tox .tox-checkbox--disabled .tox-checkbox__icons .tox-checkbox-icon__unchecked svg{fill:rgba(255,255,255,.5)}.tox .tox-checkbox--disabled .tox-checkbox__icons .tox-checkbox-icon__indeterminate svg{fill:rgba(255,255,255,.5)}.tox input.tox-checkbox__input:checked+.tox-checkbox__icons .tox-checkbox-icon__unchecked svg{display:none}.tox input.tox-checkbox__input:checked+.tox-checkbox__icons .tox-checkbox-icon__checked svg{display:block}.tox input.tox-checkbox__input:indeterminate+.tox-checkbox__icons .tox-checkbox-icon__unchecked svg{display:none}.tox input.tox-checkbox__input:indeterminate+.tox-checkbox__icons .tox-checkbox-icon__indeterminate svg{display:block}.tox input.tox-checkbox__input:focus+.tox-checkbox__icons{border-radius:3px;box-shadow:inset 0 0 0 1px #207ab7;padding:calc(4px - 1px)}.tox:not([dir=rtl]) .tox-checkbox__label{margin-left:4px}.tox:not([dir=rtl]) .tox-checkbox__input{left:-10000px}.tox:not([dir=rtl]) .tox-bar .tox-checkbox{margin-left:4px}.tox[dir=rtl] .tox-checkbox__label{margin-right:4px}.tox[dir=rtl] .tox-checkbox__input{right:-10000px}.tox[dir=rtl] .tox-bar .tox-checkbox{margin-right:4px}.tox .tox-collection--toolbar .tox-collection__group{display:flex;padding:0}.tox .tox-collection--grid .tox-collection__group{display:flex;flex-wrap:wrap;max-height:208px;overflow-x:hidden;overflow-y:auto;padding:0}.tox .tox-collection--list .tox-collection__group{border-bottom-width:0;border-color:#1a1a1a;border-left-width:0;border-right-width:0;border-style:solid;border-top-width:1px;padding:4px 0}.tox .tox-collection--list .tox-collection__group:first-child{border-top-width:0}.tox .tox-collection__group-heading{background-color:#333;color:#fff;cursor:default;font-size:12px;font-style:normal;font-weight:400;margin-bottom:4px;margin-top:-4px;padding:4px 8px;text-transform:none;-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.tox .tox-collection__item{align-items:center;color:#fff;cursor:pointer;display:flex;-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.tox .tox-collection--list .tox-collection__item{padding:4px 8px}.tox .tox-collection--toolbar .tox-collection__item{border-radius:3px;padding:4px}.tox .tox-collection--grid .tox-collection__item{border-radius:3px;padding:4px}.tox .tox-collection--list .tox-collection__item--enabled{background-color:inherit;color:contrast(inherit,#2a3746,#fff)}.tox .tox-collection--list .tox-collection__item--active{background-color:#4a5562}.tox .tox-collection--toolbar .tox-collection__item--enabled{background-color:#757d87;color:#fff}.tox .tox-collection--toolbar .tox-collection__item--active{background-color:#4a5562}.tox .tox-collection--grid .tox-collection__item--enabled{background-color:#757d87;color:#fff}.tox .tox-collection--grid .tox-collection__item--active{background-color:#4a5562}.tox .tox-collection--list .tox-collection__item--active:not(.tox-collection__item--state-disabled){color:#fff}.tox .tox-collection--toolbar .tox-collection__item--active:not(.tox-collection__item--state-disabled){color:#fff}.tox .tox-collection--grid .tox-collection__item--active:not(.tox-collection__item--state-disabled){color:#fff}.tox .tox-collection__item--state-disabled{background-color:transparent;color:rgba(255,255,255,.5);cursor:not-allowed}.tox .tox-collection__item-icon{align-items:center;display:flex;height:24px;justify-content:center;width:24px}.tox .tox-collection__item-icon svg{fill:currentColor}.tox .tox-collection--toolbar-lg .tox-collection__item-icon{height:48px;width:48px}.tox .tox-collection__item-label{color:currentColor;display:inline-block;flex:1;-ms-flex-preferred-size:auto;font-size:14px;font-style:normal;font-weight:400;line-height:24px;text-transform:none;word-break:break-all}.tox .tox-collection__item-accessory{color:rgba(255,255,255,.5);display:inline-block;font-size:14px;height:24px;line-height:24px;text-transform:normal}.tox .tox-collection__item-caret{align-items:center;display:flex;min-height:24px}.tox .tox-collection__item-caret::after{content:'';font-size:0;min-height:inherit}.tox .tox-collection__item-caret svg{fill:#fff}.tox .tox-collection__item[role=menuitemcheckbox]:not(.tox-collection__item--enabled) .tox-collection__item-checkmark svg{display:none}.tox .tox-collection--horizontal{background-color:#2b3b4e;border:1px solid #1a1a1a;border-radius:3px;box-shadow:0 1px 3px rgba(0,0,0,.15);display:flex;flex:0 0 auto;flex-shrink:0;flex-wrap:nowrap;margin-bottom:0;overflow-x:auto;padding:0}.tox .tox-collection--horizontal .tox-collection__group{align-items:center;display:flex;flex-wrap:nowrap;margin:0;padding:0 4px}.tox .tox-collection--horizontal .tox-collection__item{height:34px;margin:2px 0 3px 0;padding:0 4px}.tox .tox-collection--horizontal .tox-collection__item-label{white-space:nowrap}.tox .tox-collection--horizontal .tox-collection__item-caret{margin-left:4px}.tox:not([dir=rtl]) .tox-collection--horizontal .tox-collection__group:not(:last-of-type){border-right:1px solid #000}.tox:not([dir=rtl]) .tox-collection--list .tox-collection__item>:not(:first-child){margin-left:8px}.tox:not([dir=rtl]) .tox-collection--list .tox-collection__item-label:first-child{margin-left:4px}.tox:not([dir=rtl]) .tox-collection__item-accessory{margin-left:16px;text-align:right}.tox:not([dir=rtl]) .tox-collection .tox-collection__item-caret{margin-left:16px}.tox[dir=rtl] .tox-collection--horizontal .tox-collection__group:not(:last-of-type){border-left:1px solid #000}.tox[dir=rtl] .tox-collection--list .tox-collection__item>:not(:first-child){margin-right:8px}.tox[dir=rtl] .tox-collection--list .tox-collection__item-label:first-child{margin-right:4px}.tox[dir=rtl] .tox-collection__item-icon-rtl .tox-collection__item-icon svg{transform:rotateY(180deg)}.tox[dir=rtl] .tox-collection__item-accessory{margin-right:16px;text-align:left}.tox[dir=rtl] .tox-collection .tox-collection__item-caret{margin-right:16px;transform:rotateY(180deg)}.tox[dir=rtl] .tox-collection--horizontal .tox-collection__item-caret{margin-right:4px}.tox .tox-color-picker-container{display:flex;flex-direction:row;height:225px;margin:0}.tox .tox-sv-palette{box-sizing:border-box;display:flex;height:100%}.tox .tox-sv-palette-spectrum{height:100%}.tox .tox-sv-palette,.tox .tox-sv-palette-spectrum{width:225px}.tox .tox-sv-palette-thumb{background:0 0;border:1px solid #000;border-radius:50%;box-sizing:content-box;height:12px;position:absolute;width:12px}.tox .tox-sv-palette-inner-thumb{border:1px solid #fff;border-radius:50%;height:10px;position:absolute;width:10px}.tox .tox-hue-slider{box-sizing:border-box;height:100%;width:25px}.tox .tox-hue-slider-spectrum{background:linear-gradient(to bottom,red,#ff0080,#f0f,#8000ff,#00f,#0080ff,#0ff,#00ff80,#0f0,#80ff00,#ff0,#ff8000,red);height:100%;width:100%}.tox .tox-hue-slider,.tox .tox-hue-slider-spectrum{width:20px}.tox .tox-hue-slider-thumb{background:#fff;border:1px solid #000;box-sizing:content-box;height:4px;width:100%}.tox .tox-rgb-form{display:flex;flex-direction:column;justify-content:space-between}.tox .tox-rgb-form div{align-items:center;display:flex;justify-content:space-between;margin-bottom:5px;width:inherit}.tox .tox-rgb-form input{width:6em}.tox .tox-rgb-form input.tox-invalid{border:1px solid red!important}.tox .tox-rgb-form .tox-rgba-preview{border:1px solid #000;flex-grow:2;margin-bottom:0}.tox:not([dir=rtl]) .tox-sv-palette{margin-right:15px}.tox:not([dir=rtl]) .tox-hue-slider{margin-right:15px}.tox:not([dir=rtl]) .tox-hue-slider-thumb{margin-left:-1px}.tox:not([dir=rtl]) .tox-rgb-form label{margin-right:.5em}.tox[dir=rtl] .tox-sv-palette{margin-left:15px}.tox[dir=rtl] .tox-hue-slider{margin-left:15px}.tox[dir=rtl] .tox-hue-slider-thumb{margin-right:-1px}.tox[dir=rtl] .tox-rgb-form label{margin-left:.5em}.tox .tox-toolbar .tox-swatches,.tox .tox-toolbar__overflow .tox-swatches,.tox .tox-toolbar__primary .tox-swatches{margin:2px 0 3px 4px}.tox .tox-collection--list .tox-collection__group .tox-swatches-menu{border:0;margin:-4px 0}.tox .tox-swatches__row{display:flex}.tox .tox-swatch{height:30px;transition:transform .15s,box-shadow .15s;width:30px}.tox .tox-swatch:focus,.tox .tox-swatch:hover{box-shadow:0 0 0 1px rgba(127,127,127,.3) inset;transform:scale(.8)}.tox .tox-swatch--remove{align-items:center;display:flex;justify-content:center}.tox .tox-swatch--remove svg path{stroke:#e74c3c}.tox .tox-swatches__picker-btn{align-items:center;background-color:transparent;border:0;cursor:pointer;display:flex;height:30px;justify-content:center;outline:0;padding:0;width:30px}.tox .tox-swatches__picker-btn svg{height:24px;width:24px}.tox .tox-swatches__picker-btn:hover{background:#4a5562}.tox:not([dir=rtl]) .tox-swatches__picker-btn{margin-left:auto}.tox[dir=rtl] .tox-swatches__picker-btn{margin-right:auto}.tox .tox-comment-thread{background:#2b3b4e;position:relative}.tox .tox-comment-thread>:not(:first-child){margin-top:8px}.tox .tox-comment{background:#2b3b4e;border:1px solid #000;border-radius:3px;box-shadow:0 4px 8px 0 rgba(42,55,70,.1);padding:8px 8px 16px 8px;position:relative}.tox .tox-comment__header{align-items:center;color:#fff;display:flex;justify-content:space-between}.tox .tox-comment__date{color:rgba(255,255,255,.5);font-size:12px}.tox .tox-comment__body{color:#fff;font-size:14px;font-style:normal;font-weight:400;line-height:1.3;margin-top:8px;position:relative;text-transform:initial}.tox .tox-comment__body textarea{resize:none;white-space:normal;width:100%}.tox .tox-comment__expander{padding-top:8px}.tox .tox-comment__expander p{color:rgba(255,255,255,.5);font-size:14px;font-style:normal}.tox .tox-comment__body p{margin:0}.tox .tox-comment__buttonspacing{padding-top:16px;text-align:center}.tox .tox-comment-thread__overlay::after{background:#2b3b4e;bottom:0;content:"";display:flex;left:0;opacity:.9;position:absolute;right:0;top:0;z-index:5}.tox .tox-comment__reply{display:flex;flex-shrink:0;flex-wrap:wrap;justify-content:flex-end;margin-top:8px}.tox .tox-comment__reply>:first-child{margin-bottom:8px;width:100%}.tox .tox-comment__edit{display:flex;flex-wrap:wrap;justify-content:flex-end;margin-top:16px}.tox .tox-comment__gradient::after{background:linear-gradient(rgba(43,59,78,0),#2b3b4e);bottom:0;content:"";display:block;height:5em;margin-top:-40px;position:absolute;width:100%}.tox .tox-comment__overlay{background:#2b3b4e;bottom:0;display:flex;flex-direction:column;flex-grow:1;left:0;opacity:.9;position:absolute;right:0;text-align:center;top:0;z-index:5}.tox .tox-comment__loading-text{align-items:center;color:#fff;display:flex;flex-direction:column;position:relative}.tox .tox-comment__loading-text>div{padding-bottom:16px}.tox .tox-comment__overlaytext{bottom:0;flex-direction:column;font-size:14px;left:0;padding:1em;position:absolute;right:0;top:0;z-index:10}.tox .tox-comment__overlaytext p{background-color:#2b3b4e;box-shadow:0 0 8px 8px #2b3b4e;color:#fff;text-align:center}.tox .tox-comment__overlaytext div:nth-of-type(2){font-size:.8em}.tox .tox-comment__busy-spinner{align-items:center;background-color:#2b3b4e;bottom:0;display:flex;justify-content:center;left:0;position:absolute;right:0;top:0;z-index:20}.tox .tox-comment__scroll{display:flex;flex-direction:column;flex-shrink:1;overflow:auto}.tox .tox-conversations{margin:8px}.tox:not([dir=rtl]) .tox-comment__edit{margin-left:8px}.tox:not([dir=rtl]) .tox-comment__buttonspacing>:last-child,.tox:not([dir=rtl]) .tox-comment__edit>:last-child,.tox:not([dir=rtl]) .tox-comment__reply>:last-child{margin-left:8px}.tox[dir=rtl] .tox-comment__edit{margin-right:8px}.tox[dir=rtl] .tox-comment__buttonspacing>:last-child,.tox[dir=rtl] .tox-comment__edit>:last-child,.tox[dir=rtl] .tox-comment__reply>:last-child{margin-right:8px}.tox .tox-user{align-items:center;display:flex}.tox .tox-user__avatar svg{fill:rgba(255,255,255,.5)}.tox .tox-user__name{color:rgba(255,255,255,.5);font-size:12px;font-style:normal;font-weight:700;text-transform:uppercase}.tox:not([dir=rtl]) .tox-user__avatar svg{margin-right:8px}.tox:not([dir=rtl]) .tox-user__avatar+.tox-user__name{margin-left:8px}.tox[dir=rtl] .tox-user__avatar svg{margin-left:8px}.tox[dir=rtl] .tox-user__avatar+.tox-user__name{margin-right:8px}.tox .tox-dialog-wrap{align-items:center;bottom:0;display:flex;justify-content:center;left:0;position:fixed;right:0;top:0;z-index:1100}.tox .tox-dialog-wrap__backdrop{background-color:rgba(34,47,62,.75);bottom:0;left:0;position:absolute;right:0;top:0;z-index:1}.tox .tox-dialog-wrap__backdrop--opaque{background-color:#222f3e}.tox .tox-dialog{background-color:#2b3b4e;border-color:#000;border-radius:3px;border-style:solid;border-width:1px;box-shadow:0 16px 16px -10px rgba(42,55,70,.15),0 0 40px 1px rgba(42,55,70,.15);display:flex;flex-direction:column;max-height:100%;max-width:480px;overflow:hidden;position:relative;width:95vw;z-index:2}@media only screen and (max-width:767px){body:not(.tox-force-desktop) .tox .tox-dialog{align-self:flex-start;margin:8px auto;width:calc(100vw - 16px)}}.tox .tox-dialog-inline{z-index:1100}.tox .tox-dialog__header{align-items:center;background-color:#2b3b4e;border-bottom:none;color:#fff;display:flex;font-size:16px;justify-content:space-between;padding:8px 16px 0 16px;position:relative}.tox .tox-dialog__header .tox-button{z-index:1}.tox .tox-dialog__draghandle{cursor:grab;height:100%;left:0;position:absolute;top:0;width:100%}.tox .tox-dialog__draghandle:active{cursor:grabbing}.tox .tox-dialog__dismiss{margin-left:auto}.tox .tox-dialog__title{font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;font-size:20px;font-style:normal;font-weight:400;line-height:1.3;margin:0;text-transform:normal}.tox .tox-dialog__body{color:#fff;display:flex;flex:1;-ms-flex-preferred-size:auto;font-size:16px;font-style:normal;font-weight:400;line-height:1.3;min-width:0;text-align:left;text-transform:normal}@media only screen and (max-width:767px){body:not(.tox-force-desktop) .tox .tox-dialog__body{flex-direction:column}}.tox .tox-dialog__body-nav{align-items:flex-start;display:flex;flex-direction:column;padding:16px 16px}@media only screen and (max-width:767px){body:not(.tox-force-desktop) .tox .tox-dialog__body-nav{flex-direction:row;-webkit-overflow-scrolling:touch;overflow-x:auto;padding-bottom:0}}.tox .tox-dialog__body-nav-item{border-bottom:2px solid transparent;color:rgba(255,255,255,.5);display:inline-block;font-size:14px;line-height:1.3;margin-bottom:8px;text-decoration:none;white-space:nowrap}.tox .tox-dialog__body-nav-item:focus{background-color:rgba(32,122,183,.1)}.tox .tox-dialog__body-nav-item--active{border-bottom:2px solid #207ab7;color:#207ab7}.tox .tox-dialog__body-content{box-sizing:border-box;display:flex;flex:1;flex-direction:column;-ms-flex-preferred-size:auto;max-height:650px;overflow:auto;-webkit-overflow-scrolling:touch;padding:16px 16px}.tox .tox-dialog__body-content>*{margin-bottom:0;margin-top:16px}.tox .tox-dialog__body-content>:first-child{margin-top:0}.tox .tox-dialog__body-content>:last-child{margin-bottom:0}.tox .tox-dialog__body-content>:only-child{margin-bottom:0;margin-top:0}.tox .tox-dialog__body-content a{color:#207ab7;cursor:pointer;text-decoration:none}.tox .tox-dialog__body-content a:focus,.tox .tox-dialog__body-content a:hover{color:#185d8c;text-decoration:none}.tox .tox-dialog__body-content a:active{color:#185d8c;text-decoration:none}.tox .tox-dialog__body-content ul{display:block;list-style-type:disc;margin-bottom:16px;-webkit-margin-end:0;margin-inline-end:0;-webkit-margin-start:0;margin-inline-start:0;-webkit-padding-start:2.5rem;padding-inline-start:2.5rem}.tox .tox-dialog__body-content .tox-form__group h1{font-size:20px;font-weight:700;margin-bottom:16px;margin-top:2rem}.tox .tox-dialog__body-content .tox-form__group h2{font-size:16px;font-weight:700;margin-bottom:16px;margin-top:2rem}.tox .tox-dialog__body-content .tox-form__group p{margin-bottom:16px}.tox .tox-dialog__body-content .tox-form__group h1:first-child,.tox .tox-dialog__body-content .tox-form__group h2:first-child,.tox .tox-dialog__body-content .tox-form__group p:first-child{margin-top:0}.tox .tox-dialog__body-content .tox-form__group h1:last-child,.tox .tox-dialog__body-content .tox-form__group h2:last-child,.tox .tox-dialog__body-content .tox-form__group p:last-child{margin-bottom:0}.tox .tox-dialog__body-content .tox-form__group h1:only-child,.tox .tox-dialog__body-content .tox-form__group h2:only-child,.tox .tox-dialog__body-content .tox-form__group p:only-child{margin-bottom:0;margin-top:0}.tox .tox-dialog--width-lg{height:650px;max-width:1200px}.tox .tox-dialog--width-md{max-width:800px}.tox .tox-dialog--width-md .tox-dialog__body-content{overflow:auto}.tox .tox-dialog__body-content--centered{text-align:center}.tox .tox-dialog__footer{align-items:center;background-color:#2b3b4e;border-top:1px solid #000;display:flex;justify-content:space-between;padding:8px 16px}.tox .tox-dialog__footer-end,.tox .tox-dialog__footer-start{display:flex}.tox .tox-dialog__busy-spinner{align-items:center;background-color:rgba(34,47,62,.75);bottom:0;display:flex;justify-content:center;left:0;position:absolute;right:0;top:0;z-index:3}.tox .tox-dialog__table{border-collapse:collapse;width:100%}.tox .tox-dialog__table thead th{font-weight:700;padding-bottom:8px}.tox .tox-dialog__table tbody tr{border-bottom:1px solid #000}.tox .tox-dialog__table tbody tr:last-child{border-bottom:none}.tox .tox-dialog__table td{padding-bottom:8px;padding-top:8px}.tox .tox-dialog__popups{position:absolute;width:100%;z-index:1100}.tox .tox-dialog__body-iframe{display:flex;flex:1;flex-direction:column;-ms-flex-preferred-size:auto}.tox .tox-dialog__body-iframe .tox-navobj{display:flex;flex:1;-ms-flex-preferred-size:auto}.tox .tox-dialog__body-iframe .tox-navobj :nth-child(2){flex:1;-ms-flex-preferred-size:auto;height:100%}.tox .tox-dialog-dock-fadeout{opacity:0;visibility:hidden}.tox .tox-dialog-dock-fadein{opacity:1;visibility:visible}.tox .tox-dialog-dock-transition{transition:visibility 0s linear .3s,opacity .3s ease}.tox .tox-dialog-dock-transition.tox-dialog-dock-fadein{transition-delay:0s}body.tox-dialog__disable-scroll{overflow:hidden}.tox.tox-platform-ie .tox-dialog-wrap{position:-ms-device-fixed}@media only screen and (max-width:767px){body:not(.tox-force-desktop) .tox:not([dir=rtl]) .tox-dialog__body-nav{margin-right:0}}@media only screen and (max-width:767px){body:not(.tox-force-desktop) .tox:not([dir=rtl]) .tox-dialog__body-nav-item:not(:first-child){margin-left:8px}}.tox:not([dir=rtl]) .tox-dialog__footer .tox-dialog__footer-end>*,.tox:not([dir=rtl]) .tox-dialog__footer .tox-dialog__footer-start>*{margin-left:8px}.tox[dir=rtl] .tox-dialog__body{text-align:right}@media only screen and (max-width:767px){body:not(.tox-force-desktop) .tox[dir=rtl] .tox-dialog__body-nav{margin-left:0}}@media only screen and (max-width:767px){body:not(.tox-force-desktop) .tox[dir=rtl] .tox-dialog__body-nav-item:not(:first-child){margin-right:8px}}.tox[dir=rtl] .tox-dialog__footer .tox-dialog__footer-end>*,.tox[dir=rtl] .tox-dialog__footer .tox-dialog__footer-start>*{margin-right:8px}.tox .tox-dropzone-container{display:flex;flex:1;-ms-flex-preferred-size:auto}.tox .tox-dropzone{align-items:center;background:#fff;border:2px dashed #000;box-sizing:border-box;display:flex;flex-direction:column;flex-grow:1;justify-content:center;min-height:100px;padding:10px}.tox .tox-dropzone p{color:rgba(255,255,255,.5);margin:0 0 16px 0}.tox .tox-edit-area{display:flex;flex:1;-ms-flex-preferred-size:auto;overflow:hidden;position:relative}.tox .tox-edit-area__iframe{background-color:#fff;border:0;box-sizing:border-box;flex:1;-ms-flex-preferred-size:auto;height:100%;position:absolute;width:100%}.tox.tox-inline-edit-area{border:1px dotted #000}.tox .tox-editor-container{display:flex;flex:1 1 auto;flex-direction:column;overflow:hidden}.tox .tox-editor-header{z-index:1}.tox-editor-dock-fadeout{opacity:0;visibility:hidden}.tox-editor-dock-fadein{opacity:1;visibility:visible}.tox-editor-dock-transition{transition:visibility 0s linear .25s,opacity .25s ease}.tox-editor-dock-transition.tox-editor-dock-fadein{transition-delay:0s}.tox .tox-control-wrap{flex:1;position:relative}.tox .tox-control-wrap:not(.tox-control-wrap--status-invalid) .tox-control-wrap__status-icon-invalid,.tox .tox-control-wrap:not(.tox-control-wrap--status-unknown) .tox-control-wrap__status-icon-unknown,.tox .tox-control-wrap:not(.tox-control-wrap--status-valid) .tox-control-wrap__status-icon-valid{display:none}.tox .tox-control-wrap svg{display:block}.tox .tox-control-wrap__status-icon-wrap{position:absolute;top:50%;transform:translateY(-50%)}.tox .tox-control-wrap__status-icon-invalid svg{fill:#c00}.tox .tox-control-wrap__status-icon-unknown svg{fill:orange}.tox .tox-control-wrap__status-icon-valid svg{fill:green}.tox:not([dir=rtl]) .tox-control-wrap--status-invalid .tox-textfield,.tox:not([dir=rtl]) .tox-control-wrap--status-unknown .tox-textfield,.tox:not([dir=rtl]) .tox-control-wrap--status-valid .tox-textfield{padding-right:32px}.tox:not([dir=rtl]) .tox-control-wrap__status-icon-wrap{right:4px}.tox[dir=rtl] .tox-control-wrap--status-invalid .tox-textfield,.tox[dir=rtl] .tox-control-wrap--status-unknown .tox-textfield,.tox[dir=rtl] .tox-control-wrap--status-valid .tox-textfield{padding-left:32px}.tox[dir=rtl] .tox-control-wrap__status-icon-wrap{left:4px}.tox .tox-autocompleter{max-width:25em}.tox .tox-autocompleter .tox-menu{max-width:25em}.tox .tox-autocompleter .tox-autocompleter-highlight{font-weight:700}.tox .tox-color-input{display:flex}.tox .tox-color-input .tox-textfield{border-radius:3px 0 0 3px;display:flex}.tox .tox-color-input span{border-color:rgba(42,55,70,.2);border-radius:0 3px 3px 0;border-style:solid;border-width:1px 1px 1px 0;box-shadow:none;box-sizing:border-box;cursor:pointer;display:flex;width:35px}.tox .tox-color-input span:focus{border-color:#207ab7}.tox[dir=rtl] .tox-color-input .tox-textfield{border-radius:0 3px 3px 0}.tox[dir=rtl] .tox-color-input span{border-radius:3px 0 0 3px;border-width:1px 0 1px 1px}.tox .tox-label,.tox .tox-toolbar-label{color:rgba(255,255,255,.5);display:block;font-size:14px;font-style:normal;font-weight:400;line-height:1.3;padding:0 8px 0 0;text-transform:normal;white-space:nowrap}.tox .tox-toolbar-label{padding:0 8px}.tox[dir=rtl] .tox-label{padding:0 0 0 8px}.tox .tox-form{display:flex;flex:1;flex-direction:column;-ms-flex-preferred-size:auto}.tox .tox-form__group{box-sizing:border-box;margin-bottom:4px}.tox .tox-form-group--maximize{flex:1}.tox .tox-form__group--error{color:#c00}.tox .tox-form__group--collection{display:flex}.tox .tox-form__grid{display:flex;flex-direction:row;flex-wrap:wrap;justify-content:space-between}.tox .tox-form__grid--2col>.tox-form__group{width:calc(50% - (8px / 2))}.tox .tox-form__grid--3col>.tox-form__group{width:calc(100% / 3 - (8px / 2))}.tox .tox-form__grid--4col>.tox-form__group{width:calc(25% - (8px / 2))}.tox .tox-form__controls-h-stack{align-items:center;display:flex}.tox .tox-form__group--inline{align-items:center;display:flex}.tox .tox-form__group--stretched{display:flex;flex:1;flex-direction:column;-ms-flex-preferred-size:auto}.tox .tox-form__group--stretched .tox-textarea{flex:1;-ms-flex-preferred-size:auto}.tox .tox-form__group--stretched .tox-navobj{display:flex;flex:1;-ms-flex-preferred-size:auto}.tox .tox-form__group--stretched .tox-navobj :nth-child(2){flex:1;-ms-flex-preferred-size:auto;height:100%}.tox:not([dir=rtl]) .tox-form__controls-h-stack>:not(:first-child){margin-left:4px}.tox[dir=rtl] .tox-form__controls-h-stack>:not(:first-child){margin-right:4px}.tox .tox-lock.tox-locked .tox-lock-icon__unlock,.tox .tox-lock:not(.tox-locked) .tox-lock-icon__lock{display:none}.tox .tox-selectfield select,.tox .tox-textarea,.tox .tox-textfield,.tox .tox-toolbar-textfield{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:#2b3b4e;border-color:#000;border-radius:3px;border-style:solid;border-width:1px;box-shadow:none;box-sizing:border-box;color:#fff;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;font-size:16px;line-height:24px;margin:0;outline:0;padding:5px 4.75px;resize:none;width:100%}.tox .tox-textarea[disabled],.tox .tox-textfield[disabled]{background-color:#222f3e;color:rgba(255,255,255,.85);cursor:not-allowed}.tox .tox-selectfield select:focus,.tox .tox-textarea:focus,.tox .tox-textfield:focus{border-color:#207ab7;box-shadow:none;outline:0}.tox .tox-toolbar-textfield{border-width:0;margin-bottom:3px;margin-top:2px;max-width:250px}.tox .tox-naked-btn{background-color:transparent;border:0;border-color:transparent;box-shadow:unset;color:#207ab7;cursor:pointer;display:block;margin:0;padding:0}.tox .tox-naked-btn svg{display:block;fill:#fff}.tox:not([dir=rtl]) .tox-toolbar-textfield+*{margin-left:4px}.tox[dir=rtl] .tox-toolbar-textfield+*{margin-right:4px}.tox .tox-selectfield{cursor:pointer;position:relative}.tox .tox-selectfield select[disabled]{background-color:#19232e;color:rgba(255,255,255,.85);cursor:not-allowed}.tox .tox-selectfield select::-ms-expand{display:none}.tox .tox-selectfield svg{pointer-events:none;position:absolute;top:50%;transform:translateY(-50%)}.tox:not([dir=rtl]) .tox-selectfield select[size="0"],.tox:not([dir=rtl]) .tox-selectfield select[size="1"]{padding-right:24px}.tox:not([dir=rtl]) .tox-selectfield svg{right:8px}.tox[dir=rtl] .tox-selectfield select[size="0"],.tox[dir=rtl] .tox-selectfield select[size="1"]{padding-left:24px}.tox[dir=rtl] .tox-selectfield svg{left:8px}.tox .tox-textarea{-webkit-appearance:textarea;-moz-appearance:textarea;appearance:textarea;white-space:pre-wrap}.tox-fullscreen{border:0;height:100%;left:0;margin:0;overflow:hidden;-ms-scroll-chaining:none;overscroll-behavior:none;padding:0;position:fixed;top:0;touch-action:pinch-zoom;width:100%}.tox-fullscreen .tox.tox-tinymce.tox-fullscreen .tox-statusbar__resize-handle{display:none}.tox-fullscreen .tox.tox-tinymce.tox-fullscreen{z-index:1200}.tox-fullscreen .tox.tox-tinymce-aux{z-index:1201}.tox .tox-image-tools{width:100%}.tox .tox-image-tools__toolbar{align-items:center;display:flex;justify-content:center}.tox .tox-image-tools__image{background-color:#666;height:380px;overflow:auto;position:relative;width:100%}.tox .tox-image-tools__image,.tox .tox-image-tools__image+.tox-image-tools__toolbar{margin-top:8px}.tox .tox-image-tools__image-bg{background:url(data:image/gif;base64,R0lGODdhDAAMAIABAMzMzP///ywAAAAADAAMAAACFoQfqYeabNyDMkBQb81Uat85nxguUAEAOw==)}.tox .tox-image-tools__toolbar>.tox-spacer{flex:1;-ms-flex-preferred-size:auto}.tox .tox-croprect-block{background:#000;opacity:.5;position:absolute;zoom:1}.tox .tox-croprect-handle{border:2px solid #fff;height:20px;left:0;position:absolute;top:0;width:20px}.tox .tox-croprect-handle-move{border:0;cursor:move;position:absolute}.tox .tox-croprect-handle-nw{border-width:2px 0 0 2px;cursor:nw-resize;left:100px;margin:-2px 0 0 -2px;top:100px}.tox .tox-croprect-handle-ne{border-width:2px 2px 0 0;cursor:ne-resize;left:200px;margin:-2px 0 0 -20px;top:100px}.tox .tox-croprect-handle-sw{border-width:0 0 2px 2px;cursor:sw-resize;left:100px;margin:-20px 2px 0 -2px;top:200px}.tox .tox-croprect-handle-se{border-width:0 2px 2px 0;cursor:se-resize;left:200px;margin:-20px 0 0 -20px;top:200px}.tox:not([dir=rtl]) .tox-image-tools__toolbar>.tox-slider:not(:first-of-type){margin-left:8px}.tox:not([dir=rtl]) .tox-image-tools__toolbar>.tox-button+.tox-slider{margin-left:32px}.tox:not([dir=rtl]) .tox-image-tools__toolbar>.tox-slider+.tox-button{margin-left:32px}.tox[dir=rtl] .tox-image-tools__toolbar>.tox-slider:not(:first-of-type){margin-right:8px}.tox[dir=rtl] .tox-image-tools__toolbar>.tox-button+.tox-slider{margin-right:32px}.tox[dir=rtl] .tox-image-tools__toolbar>.tox-slider+.tox-button{margin-right:32px}.tox .tox-insert-table-picker{display:flex;flex-wrap:wrap;width:169px}.tox .tox-insert-table-picker>div{border-color:#000;border-style:solid;border-width:0 1px 1px 0;box-sizing:content-box;height:16px;width:16px}.tox .tox-collection--list .tox-collection__group .tox-insert-table-picker{margin:-4px 0}.tox .tox-insert-table-picker .tox-insert-table-picker__selected{background-color:rgba(32,122,183,.5);border-color:rgba(32,122,183,.5)}.tox .tox-insert-table-picker__label{color:#fff;display:block;font-size:14px;padding:4px;text-align:center;width:100%}.tox:not([dir=rtl]) .tox-insert-table-picker>div:nth-child(10n){border-right:0}.tox[dir=rtl] .tox-insert-table-picker>div:nth-child(10n+1){border-right:0}.tox .tox-menu{background-color:#2b3b4e;border:1px solid #000;border-radius:3px;box-shadow:0 4px 8px 0 rgba(42,55,70,.1);display:inline-block;overflow:hidden;vertical-align:top;z-index:1150}.tox .tox-menu.tox-collection.tox-collection--list{padding:0}.tox .tox-menu.tox-collection.tox-collection--toolbar{padding:4px}.tox .tox-menu.tox-collection.tox-collection--grid{padding:4px}.tox .tox-menu__label blockquote,.tox .tox-menu__label code,.tox .tox-menu__label h1,.tox .tox-menu__label h2,.tox .tox-menu__label h3,.tox .tox-menu__label h4,.tox .tox-menu__label h5,.tox .tox-menu__label h6,.tox .tox-menu__label p{margin:0}.tox .tox-menubar{background:url("data:image/svg+xml;charset=utf8,%3Csvg height='39px' viewBox='0 0 40 39px' width='40' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='38px' width='100' height='1' fill='%23000000'/%3E%3C/svg%3E") left 0 top 0 #222f3e;background-color:#222f3e;display:flex;flex:0 0 auto;flex-shrink:0;flex-wrap:wrap;padding:0 4px 0 4px}.tox .tox-mbtn{align-items:center;background:0 0;border:0;border-radius:3px;box-shadow:none;color:#fff;display:flex;flex:0 0 auto;font-size:14px;font-style:normal;font-weight:400;height:34px;justify-content:center;margin:2px 0 3px 0;outline:0;overflow:hidden;padding:0 4px;text-transform:normal;width:auto}.tox .tox-mbtn[disabled]{background-color:none;border:0;box-shadow:none;color:rgba(255,255,255,.5);cursor:not-allowed}.tox .tox-mbtn:focus:not(:disabled){background:#4a5562;border:0;box-shadow:none;color:#fff}.tox .tox-mbtn--active{background:#757d87;border:0;box-shadow:none;color:#fff}.tox .tox-mbtn:hover:not(:disabled):not(.tox-mbtn--active){background:#4a5562;border:0;box-shadow:none;color:#fff}.tox .tox-mbtn__select-label{cursor:default;font-weight:400;margin:0 4px}.tox .tox-mbtn[disabled] .tox-mbtn__select-label{cursor:not-allowed}.tox .tox-mbtn__select-chevron{align-items:center;display:flex;justify-content:center;width:16px;display:none}.tox .tox-notification{border-radius:3px;border-style:solid;border-width:1px;box-shadow:none;box-sizing:border-box;display:-ms-grid;display:grid;font-size:14px;font-weight:400;-ms-grid-columns:minmax(40px,1fr) auto minmax(40px,1fr);grid-template-columns:minmax(40px,1fr) auto minmax(40px,1fr);margin-top:4px;opacity:0;padding:4px;transition:transform .1s ease-in,opacity 150ms ease-in}.tox .tox-notification p{font-size:14px;font-weight:400}.tox .tox-notification a{text-decoration:underline}.tox .tox-notification--in{opacity:1}.tox .tox-notification--success{background-color:#e4eeda;border-color:#d7e6c8;color:#fff}.tox .tox-notification--success p{color:#fff}.tox .tox-notification--success a{color:#547831}.tox .tox-notification--success svg{fill:#fff}.tox .tox-notification--error{background-color:#f8dede;border-color:#f2bfbf;color:#fff}.tox .tox-notification--error p{color:#fff}.tox .tox-notification--error a{color:#c00}.tox .tox-notification--error svg{fill:#fff}.tox .tox-notification--warn,.tox .tox-notification--warning{background-color:#fffaea;border-color:#ffe89d;color:#fff}.tox .tox-notification--warn p,.tox .tox-notification--warning p{color:#fff}.tox .tox-notification--warn a,.tox .tox-notification--warning a{color:#fff}.tox .tox-notification--warn svg,.tox .tox-notification--warning svg{fill:#fff}.tox .tox-notification--info{background-color:#d9edf7;border-color:#779ecb;color:#fff}.tox .tox-notification--info p{color:#fff}.tox .tox-notification--info a{color:#fff}.tox .tox-notification--info svg{fill:#fff}.tox .tox-notification__body{-ms-grid-row-align:center;align-self:center;color:#fff;font-size:14px;-ms-grid-column-span:1;grid-column-end:3;-ms-grid-column:2;grid-column-start:2;-ms-grid-row-span:1;grid-row-end:2;-ms-grid-row:1;grid-row-start:1;text-align:center;white-space:normal;word-break:break-all;word-break:break-word}.tox .tox-notification__body>*{margin:0}.tox .tox-notification__body>*+*{margin-top:1rem}.tox .tox-notification__icon{-ms-grid-row-align:center;align-self:center;-ms-grid-column-span:1;grid-column-end:2;-ms-grid-column:1;grid-column-start:1;-ms-grid-row-span:1;grid-row-end:2;-ms-grid-row:1;grid-row-start:1;-ms-grid-column-align:end;justify-self:end}.tox .tox-notification__icon svg{display:block}.tox .tox-notification__dismiss{-ms-grid-row-align:start;align-self:start;-ms-grid-column-span:1;grid-column-end:4;-ms-grid-column:3;grid-column-start:3;-ms-grid-row-span:1;grid-row-end:2;-ms-grid-row:1;grid-row-start:1;-ms-grid-column-align:end;justify-self:end}.tox .tox-notification .tox-progress-bar{-ms-grid-column-span:3;grid-column-end:4;-ms-grid-column:1;grid-column-start:1;-ms-grid-row-span:1;grid-row-end:3;-ms-grid-row:2;grid-row-start:2;-ms-grid-column-align:center;justify-self:center}.tox .tox-pop{display:inline-block;position:relative}.tox .tox-pop--resizing{transition:width .1s ease}.tox .tox-pop--resizing .tox-toolbar{flex-wrap:nowrap}.tox .tox-pop__dialog{background-color:#222f3e;border:1px solid #000;border-radius:3px;box-shadow:0 1px 3px rgba(0,0,0,.15);min-width:0;overflow:hidden}.tox .tox-pop__dialog>:not(.tox-toolbar){margin:4px 4px 4px 8px}.tox .tox-pop__dialog .tox-toolbar{background-color:transparent;margin-bottom:-1px}.tox .tox-pop::after,.tox .tox-pop::before{border-style:solid;content:'';display:block;height:0;position:absolute;width:0}.tox .tox-pop.tox-pop--bottom::after,.tox .tox-pop.tox-pop--bottom::before{left:50%;top:100%}.tox .tox-pop.tox-pop--bottom::after{border-color:#222f3e transparent transparent transparent;border-width:8px;margin-left:-8px;margin-top:-1px}.tox .tox-pop.tox-pop--bottom::before{border-color:#000 transparent transparent transparent;border-width:9px;margin-left:-9px}.tox .tox-pop.tox-pop--top::after,.tox .tox-pop.tox-pop--top::before{left:50%;top:0;transform:translateY(-100%)}.tox .tox-pop.tox-pop--top::after{border-color:transparent transparent #222f3e transparent;border-width:8px;margin-left:-8px;margin-top:1px}.tox .tox-pop.tox-pop--top::before{border-color:transparent transparent #000 transparent;border-width:9px;margin-left:-9px}.tox .tox-pop.tox-pop--left::after,.tox .tox-pop.tox-pop--left::before{left:0;top:calc(50% - 1px);transform:translateY(-50%)}.tox .tox-pop.tox-pop--left::after{border-color:transparent #222f3e transparent transparent;border-width:8px;margin-left:-15px}.tox .tox-pop.tox-pop--left::before{border-color:transparent #000 transparent transparent;border-width:10px;margin-left:-19px}.tox .tox-pop.tox-pop--right::after,.tox .tox-pop.tox-pop--right::before{left:100%;top:calc(50% + 1px);transform:translateY(-50%)}.tox .tox-pop.tox-pop--right::after{border-color:transparent transparent transparent #222f3e;border-width:8px;margin-left:-1px}.tox .tox-pop.tox-pop--right::before{border-color:transparent transparent transparent #000;border-width:10px;margin-left:-1px}.tox .tox-pop.tox-pop--align-left::after,.tox .tox-pop.tox-pop--align-left::before{left:20px}.tox .tox-pop.tox-pop--align-right::after,.tox .tox-pop.tox-pop--align-right::before{left:calc(100% - 20px)}.tox .tox-sidebar-wrap{display:flex;flex-direction:row;flex-grow:1;-ms-flex-preferred-size:0;min-height:0}.tox .tox-sidebar{background-color:#222f3e;display:flex;flex-direction:row;justify-content:flex-end}.tox .tox-sidebar__slider{display:flex;overflow:hidden}.tox .tox-sidebar__pane-container{display:flex}.tox .tox-sidebar__pane{display:flex}.tox .tox-sidebar--sliding-closed{opacity:0}.tox .tox-sidebar--sliding-open{opacity:1}.tox .tox-sidebar--sliding-growing,.tox .tox-sidebar--sliding-shrinking{transition:width .5s ease,opacity .5s ease}.tox .tox-selector{background-color:#4099ff;border-color:#4099ff;border-style:solid;border-width:1px;box-sizing:border-box;display:inline-block;height:10px;position:absolute;width:10px}.tox.tox-platform-touch .tox-selector{height:12px;width:12px}.tox .tox-slider{align-items:center;display:flex;flex:1;-ms-flex-preferred-size:auto;height:24px;justify-content:center;position:relative}.tox .tox-slider__rail{background-color:transparent;border:1px solid #000;border-radius:3px;height:10px;min-width:120px;width:100%}.tox .tox-slider__handle{background-color:#207ab7;border:2px solid #185d8c;border-radius:3px;box-shadow:none;height:24px;left:50%;position:absolute;top:50%;transform:translateX(-50%) translateY(-50%);width:14px}.tox .tox-source-code{overflow:auto}.tox .tox-spinner{display:flex}.tox .tox-spinner>div{animation:tam-bouncing-dots 1.5s ease-in-out 0s infinite both;background-color:rgba(255,255,255,.5);border-radius:100%;height:8px;width:8px}.tox .tox-spinner>div:nth-child(1){animation-delay:-.32s}.tox .tox-spinner>div:nth-child(2){animation-delay:-.16s}@keyframes tam-bouncing-dots{0%,100%,80%{transform:scale(0)}40%{transform:scale(1)}}.tox:not([dir=rtl]) .tox-spinner>div:not(:first-child){margin-left:4px}.tox[dir=rtl] .tox-spinner>div:not(:first-child){margin-right:4px}.tox .tox-statusbar{align-items:center;background-color:#222f3e;border-top:1px solid #000;color:#fff;display:flex;flex:0 0 auto;font-size:12px;font-weight:400;height:18px;overflow:hidden;padding:0 8px;position:relative;text-transform:uppercase}.tox .tox-statusbar__text-container{display:flex;flex:1 1 auto;justify-content:flex-end;overflow:hidden}.tox .tox-statusbar__path{display:flex;flex:1 1 auto;margin-right:auto;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.tox .tox-statusbar__path>*{display:inline;white-space:nowrap}.tox .tox-statusbar__wordcount{flex:0 0 auto;margin-left:1ch}.tox .tox-statusbar a,.tox .tox-statusbar__path-item,.tox .tox-statusbar__wordcount{color:#fff;text-decoration:none}.tox .tox-statusbar a:focus,.tox .tox-statusbar a:hover,.tox .tox-statusbar__path-item:focus,.tox .tox-statusbar__path-item:hover,.tox .tox-statusbar__wordcount:focus,.tox .tox-statusbar__wordcount:hover{cursor:pointer;text-decoration:underline}.tox .tox-statusbar__resize-handle{align-items:flex-end;align-self:stretch;cursor:nwse-resize;display:flex;flex:0 0 auto;justify-content:flex-end;margin-left:auto;margin-right:-8px;padding-left:1ch}.tox .tox-statusbar__resize-handle svg{display:block;fill:#fff}.tox:not([dir=rtl]) .tox-statusbar__path>*{margin-right:4px}.tox:not([dir=rtl]) .tox-statusbar__branding{margin-left:1ch}.tox[dir=rtl] .tox-statusbar{flex-direction:row-reverse}.tox[dir=rtl] .tox-statusbar__path>*{margin-left:4px}.tox .tox-throbber{z-index:1400}.tox .tox-throbber__busy-spinner{align-items:center;background-color:rgba(34,47,62,.6);bottom:0;display:flex;justify-content:center;left:0;position:absolute;right:0;top:0}.tox .tox-tbtn{align-items:center;background:0 0;border:0;border-radius:3px;box-shadow:none;color:#fff;display:flex;flex:0 0 auto;font-size:14px;font-style:normal;font-weight:400;height:34px;justify-content:center;margin:2px 0 3px 0;outline:0;overflow:hidden;padding:0;text-transform:normal;width:34px}.tox .tox-tbtn svg{display:block;fill:#fff}.tox .tox-tbtn.tox-tbtn-more{padding-left:5px;padding-right:5px;width:inherit}.tox .tox-tbtn:focus{background:#4a5562;border:0;box-shadow:none}.tox .tox-tbtn:hover{background:#4a5562;border:0;box-shadow:none;color:#fff}.tox .tox-tbtn:hover svg{fill:#fff}.tox .tox-tbtn:active{background:#757d87;border:0;box-shadow:none;color:#fff}.tox .tox-tbtn:active svg{fill:#fff}.tox .tox-tbtn--disabled,.tox .tox-tbtn--disabled:hover,.tox .tox-tbtn:disabled,.tox .tox-tbtn:disabled:hover{background:0 0;border:0;box-shadow:none;color:rgba(255,255,255,.5);cursor:not-allowed}.tox .tox-tbtn--disabled svg,.tox .tox-tbtn--disabled:hover svg,.tox .tox-tbtn:disabled svg,.tox .tox-tbtn:disabled:hover svg{fill:rgba(255,255,255,.5)}.tox .tox-tbtn--enabled,.tox .tox-tbtn--enabled:hover{background:#757d87;border:0;box-shadow:none;color:#fff}.tox .tox-tbtn--enabled:hover>*,.tox .tox-tbtn--enabled>*{transform:none}.tox .tox-tbtn--enabled svg,.tox .tox-tbtn--enabled:hover svg{fill:#fff}.tox .tox-tbtn:focus:not(.tox-tbtn--disabled){color:#fff}.tox .tox-tbtn:focus:not(.tox-tbtn--disabled) svg{fill:#fff}.tox .tox-tbtn:active>*{transform:none}.tox .tox-tbtn--md{height:51px;width:51px}.tox .tox-tbtn--lg{flex-direction:column;height:68px;width:68px}.tox .tox-tbtn--return{-ms-grid-row-align:stretch;align-self:stretch;height:unset;width:16px}.tox .tox-tbtn--labeled{padding:0 4px;width:unset}.tox .tox-tbtn__vlabel{display:block;font-size:10px;font-weight:400;letter-spacing:-.025em;margin-bottom:4px;white-space:nowrap}.tox .tox-tbtn--select{margin:2px 0 3px 0;padding:0 4px;width:auto}.tox .tox-tbtn__select-label{cursor:default;font-weight:400;margin:0 4px}.tox .tox-tbtn__select-chevron{align-items:center;display:flex;justify-content:center;width:16px}.tox .tox-tbtn__select-chevron svg{fill:rgba(255,255,255,.5)}.tox .tox-tbtn--bespoke .tox-tbtn__select-label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;width:7em}.tox .tox-split-button{border:0;border-radius:3px;box-sizing:border-box;display:flex;margin:2px 0 3px 0;overflow:hidden}.tox .tox-split-button:hover{box-shadow:0 0 0 1px #4a5562 inset}.tox .tox-split-button:focus{background:#4a5562;box-shadow:none;color:#fff}.tox .tox-split-button>*{border-radius:0}.tox .tox-split-button__chevron{width:16px}.tox .tox-split-button__chevron svg{fill:rgba(255,255,255,.5)}.tox .tox-split-button .tox-tbtn{margin:0}.tox.tox-platform-touch .tox-split-button .tox-tbtn:first-child{width:30px}.tox.tox-platform-touch .tox-split-button__chevron{width:20px}.tox .tox-split-button.tox-tbtn--disabled .tox-tbtn:focus,.tox .tox-split-button.tox-tbtn--disabled .tox-tbtn:hover,.tox .tox-split-button.tox-tbtn--disabled:focus,.tox .tox-split-button.tox-tbtn--disabled:hover{background:0 0;box-shadow:none;color:rgba(255,255,255,.5)}.tox .tox-toolbar-overlord{background-color:#222f3e}.tox .tox-toolbar,.tox .tox-toolbar__overflow,.tox .tox-toolbar__primary{background:url("data:image/svg+xml;charset=utf8,%3Csvg height='39px' viewBox='0 0 40 39px' width='40' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='38px' width='100' height='1' fill='%23000000'/%3E%3C/svg%3E") left 0 top 0 #222f3e;background-color:#222f3e;display:flex;flex:0 0 auto;flex-shrink:0;flex-wrap:wrap;padding:0 0}.tox .tox-toolbar__overflow.tox-toolbar__overflow--closed{height:0;opacity:0;padding-bottom:0;padding-top:0;visibility:hidden}.tox .tox-toolbar__overflow--growing{transition:height .3s ease,opacity .2s linear .1s}.tox .tox-toolbar__overflow--shrinking{transition:opacity .3s ease,height .2s linear .1s,visibility 0s linear .3s}.tox .tox-toolbar--scrolling{flex-wrap:nowrap;overflow-x:auto}.tox .tox-pop .tox-toolbar{border-width:0}.tox .tox-toolbar--no-divider{background-image:none}.tox.tox-tinymce-aux .tox-toolbar__overflow{background-color:#222f3e;border:1px solid #000;border-radius:3px;box-shadow:0 1px 3px rgba(0,0,0,.15)}.tox[dir=rtl] .tox-tbtn__icon-rtl svg{transform:rotateY(180deg)}.tox .tox-toolbar__group{align-items:center;display:flex;flex-wrap:wrap;margin:0 0;padding:0 4px 0 4px}.tox .tox-toolbar__group--pull-right{margin-left:auto}.tox .tox-toolbar--scrolling .tox-toolbar__group{flex-shrink:0;flex-wrap:nowrap}.tox:not([dir=rtl]) .tox-toolbar__group:not(:last-of-type){border-right:1px solid #000}.tox[dir=rtl] .tox-toolbar__group:not(:last-of-type){border-left:1px solid #000}.tox .tox-tooltip{display:inline-block;padding:8px;position:relative}.tox .tox-tooltip__body{background-color:#3d546f;border-radius:3px;box-shadow:0 2px 4px rgba(42,55,70,.3);color:rgba(255,255,255,.75);font-size:14px;font-style:normal;font-weight:400;padding:4px 8px;text-transform:normal}.tox .tox-tooltip__arrow{position:absolute}.tox .tox-tooltip--down .tox-tooltip__arrow{border-left:8px solid transparent;border-right:8px solid transparent;border-top:8px solid #3d546f;bottom:0;left:50%;position:absolute;transform:translateX(-50%)}.tox .tox-tooltip--up .tox-tooltip__arrow{border-bottom:8px solid #3d546f;border-left:8px solid transparent;border-right:8px solid transparent;left:50%;position:absolute;top:0;transform:translateX(-50%)}.tox .tox-tooltip--right .tox-tooltip__arrow{border-bottom:8px solid transparent;border-left:8px solid #3d546f;border-top:8px solid transparent;position:absolute;right:0;top:50%;transform:translateY(-50%)}.tox .tox-tooltip--left .tox-tooltip__arrow{border-bottom:8px solid transparent;border-right:8px solid #3d546f;border-top:8px solid transparent;left:0;position:absolute;top:50%;transform:translateY(-50%)}.tox .tox-well{border:1px solid #000;border-radius:3px;padding:8px;width:100%}.tox .tox-well>:first-child{margin-top:0}.tox .tox-well>:last-child{margin-bottom:0}.tox .tox-well>:only-child{margin:0}.tox .tox-custom-editor{border:1px solid #000;border-radius:3px;display:flex;height:525px}.tox .tox-dialog-loading::before{background-color:rgba(0,0,0,.5);content:"";height:100%;position:absolute;width:100%;z-index:1000}.tox .tox-tab{cursor:pointer}.tox .tox-dialog__content-js{display:flex;flex:1;-ms-flex-preferred-size:auto}.tox .tox-dialog__body-content .tox-collection{display:flex;flex:1;-ms-flex-preferred-size:auto}.tox .tox-image-tools-edit-panel{height:60px}.tox .tox-image-tools__sidebar{height:60px}
diff --git a/website/js/vendor/tinymce/js/tinymce/skins/ui/oxide-dark/skin.mobile.min.css b/website/js/vendor/tinymce/js/tinymce/skins/ui/oxide-dark/skin.mobile.min.css
new file mode 100644 (file)
index 0000000..3a45cac
--- /dev/null
@@ -0,0 +1,7 @@
+/**
+ * Copyright (c) Tiny Technologies, Inc. All rights reserved.
+ * Licensed under the LGPL or a commercial license.
+ * For LGPL see License.txt in the project root for license information.
+ * For commercial licenses see https://www.tiny.cloud/
+ */
+.tinymce-mobile-outer-container{all:initial;display:block}.tinymce-mobile-outer-container *{border:0;box-sizing:initial;cursor:inherit;float:none;line-height:1;margin:0;outline:0;padding:0;-webkit-tap-highlight-color:transparent;text-shadow:none;white-space:nowrap}.tinymce-mobile-icon-arrow-back::before{content:"\e5cd"}.tinymce-mobile-icon-image::before{content:"\e412"}.tinymce-mobile-icon-cancel-circle::before{content:"\e5c9"}.tinymce-mobile-icon-full-dot::before{content:"\e061"}.tinymce-mobile-icon-align-center::before{content:"\e234"}.tinymce-mobile-icon-align-left::before{content:"\e236"}.tinymce-mobile-icon-align-right::before{content:"\e237"}.tinymce-mobile-icon-bold::before{content:"\e238"}.tinymce-mobile-icon-italic::before{content:"\e23f"}.tinymce-mobile-icon-unordered-list::before{content:"\e241"}.tinymce-mobile-icon-ordered-list::before{content:"\e242"}.tinymce-mobile-icon-font-size::before{content:"\e245"}.tinymce-mobile-icon-underline::before{content:"\e249"}.tinymce-mobile-icon-link::before{content:"\e157"}.tinymce-mobile-icon-unlink::before{content:"\eca2"}.tinymce-mobile-icon-color::before{content:"\e891"}.tinymce-mobile-icon-previous::before{content:"\e314"}.tinymce-mobile-icon-next::before{content:"\e315"}.tinymce-mobile-icon-large-font::before,.tinymce-mobile-icon-style-formats::before{content:"\e264"}.tinymce-mobile-icon-undo::before{content:"\e166"}.tinymce-mobile-icon-redo::before{content:"\e15a"}.tinymce-mobile-icon-removeformat::before{content:"\e239"}.tinymce-mobile-icon-small-font::before{content:"\e906"}.tinymce-mobile-format-matches::after,.tinymce-mobile-icon-readonly-back::before{content:"\e5ca"}.tinymce-mobile-icon-small-heading::before{content:"small"}.tinymce-mobile-icon-large-heading::before{content:"large"}.tinymce-mobile-icon-large-heading::before,.tinymce-mobile-icon-small-heading::before{font-family:sans-serif;font-size:80%}.tinymce-mobile-mask-edit-icon::before{content:"\e254"}.tinymce-mobile-icon-back::before{content:"\e5c4"}.tinymce-mobile-icon-heading::before{content:"Headings";font-family:sans-serif;font-size:80%;font-weight:700}.tinymce-mobile-icon-h1::before{content:"H1";font-weight:700}.tinymce-mobile-icon-h2::before{content:"H2";font-weight:700}.tinymce-mobile-icon-h3::before{content:"H3";font-weight:700}.tinymce-mobile-outer-container .tinymce-mobile-disabled-mask{align-items:center;display:flex;justify-content:center;background:rgba(51,51,51,.5);height:100%;position:absolute;top:0;width:100%}.tinymce-mobile-outer-container .tinymce-mobile-disabled-mask .tinymce-mobile-content-container{align-items:center;border-radius:50%;display:flex;flex-direction:column;font-family:sans-serif;font-size:1em;justify-content:space-between}.tinymce-mobile-outer-container .tinymce-mobile-disabled-mask .tinymce-mobile-content-container .mixin-menu-item{align-items:center;display:flex;justify-content:center;border-radius:50%;height:2.1em;width:2.1em}.tinymce-mobile-outer-container .tinymce-mobile-disabled-mask .tinymce-mobile-content-container .tinymce-mobile-content-tap-section{align-items:center;display:flex;justify-content:center;flex-direction:column;font-size:1em}@media only screen and (min-device-width:700px){.tinymce-mobile-outer-container .tinymce-mobile-disabled-mask .tinymce-mobile-content-container .tinymce-mobile-content-tap-section{font-size:1.2em}}.tinymce-mobile-outer-container .tinymce-mobile-disabled-mask .tinymce-mobile-content-container .tinymce-mobile-content-tap-section .tinymce-mobile-mask-tap-icon{align-items:center;display:flex;justify-content:center;border-radius:50%;height:2.1em;width:2.1em;background-color:#fff;color:#207ab7}.tinymce-mobile-outer-container .tinymce-mobile-disabled-mask .tinymce-mobile-content-container .tinymce-mobile-content-tap-section .tinymce-mobile-mask-tap-icon::before{content:"\e900";font-family:tinymce-mobile,sans-serif}.tinymce-mobile-outer-container .tinymce-mobile-disabled-mask .tinymce-mobile-content-container .tinymce-mobile-content-tap-section:not(.tinymce-mobile-mask-tap-icon-selected) .tinymce-mobile-mask-tap-icon{z-index:2}.tinymce-mobile-android-container.tinymce-mobile-android-maximized{background:#fff;border:none;bottom:0;display:flex;flex-direction:column;left:0;position:fixed;right:0;top:0}.tinymce-mobile-android-container:not(.tinymce-mobile-android-maximized){position:relative}.tinymce-mobile-android-container .tinymce-mobile-editor-socket{display:flex;flex-grow:1}.tinymce-mobile-android-container .tinymce-mobile-editor-socket iframe{display:flex!important;flex-grow:1;height:auto!important}.tinymce-mobile-android-scroll-reload{overflow:hidden}:not(.tinymce-mobile-readonly-mode)>.tinymce-mobile-android-selection-context-toolbar{margin-top:23px}.tinymce-mobile-toolstrip{background:#fff;display:flex;flex:0 0 auto;z-index:1}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar{align-items:center;background-color:#fff;border-bottom:1px solid #ccc;display:flex;flex:1;height:2.5em;width:100%}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar:not(.tinymce-mobile-context-toolbar) .tinymce-mobile-toolbar-group{align-items:center;display:flex;height:100%;flex-shrink:1}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar:not(.tinymce-mobile-context-toolbar) .tinymce-mobile-toolbar-group>div{align-items:center;display:flex;height:100%;flex:1}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar:not(.tinymce-mobile-context-toolbar) .tinymce-mobile-toolbar-group.tinymce-mobile-exit-container{background:#f44336}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar:not(.tinymce-mobile-context-toolbar) .tinymce-mobile-toolbar-group.tinymce-mobile-toolbar-scrollable-group{flex-grow:1}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar:not(.tinymce-mobile-context-toolbar) .tinymce-mobile-toolbar-group .tinymce-mobile-toolbar-group-item{padding-left:.5em;padding-right:.5em}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar:not(.tinymce-mobile-context-toolbar) .tinymce-mobile-toolbar-group .tinymce-mobile-toolbar-group-item.tinymce-mobile-toolbar-button{align-items:center;display:flex;height:80%;margin-left:2px;margin-right:2px}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar:not(.tinymce-mobile-context-toolbar) .tinymce-mobile-toolbar-group .tinymce-mobile-toolbar-group-item.tinymce-mobile-toolbar-button.tinymce-mobile-toolbar-button-selected{background:#c8cbcf;color:#ccc}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar:not(.tinymce-mobile-context-toolbar) .tinymce-mobile-toolbar-group:first-of-type,.tinymce-mobile-toolstrip .tinymce-mobile-toolbar:not(.tinymce-mobile-context-toolbar) .tinymce-mobile-toolbar-group:last-of-type{background:#207ab7;color:#eceff1}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group{align-items:center;display:flex;height:100%;flex:1;padding-bottom:.4em;padding-top:.4em}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog{display:flex;min-height:1.5em;overflow:hidden;padding-left:0;padding-right:0;position:relative;width:100%}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain{display:flex;height:100%;transition:left cubic-bezier(.4,0,1,1) .15s;width:100%}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen{display:flex;flex:0 0 auto;justify-content:space-between;width:100%}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen input{font-family:Sans-serif}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen .tinymce-mobile-input-container{display:flex;flex-grow:1;position:relative}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen .tinymce-mobile-input-container .tinymce-mobile-input-container-x{-ms-grid-row-align:center;align-self:center;background:inherit;border:none;border-radius:50%;color:#888;font-size:.6em;font-weight:700;height:100%;padding-right:2px;position:absolute;right:0}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen .tinymce-mobile-input-container.tinymce-mobile-input-container-empty .tinymce-mobile-input-container-x{display:none}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen .tinymce-mobile-icon-next,.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen .tinymce-mobile-icon-previous{align-items:center;display:flex}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen .tinymce-mobile-icon-next::before,.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen .tinymce-mobile-icon-previous::before{align-items:center;display:flex;font-weight:700;height:100%;padding-left:.5em;padding-right:.5em}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen .tinymce-mobile-icon-next.tinymce-mobile-toolbar-navigation-disabled::before,.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen .tinymce-mobile-icon-previous.tinymce-mobile-toolbar-navigation-disabled::before{visibility:hidden}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-dot-item{color:#ccc;font-size:10px;line-height:10px;margin:0 2px;padding-top:3px}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-dot-item.tinymce-mobile-dot-active{color:#c8cbcf}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-icon-large-font::before,.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-icon-large-heading::before{margin-left:.5em;margin-right:.9em}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-icon-small-font::before,.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-icon-small-heading::before{margin-left:.9em;margin-right:.5em}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider{display:flex;flex:1;margin-left:0;margin-right:0;padding:.28em 0;position:relative}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider .tinymce-mobile-slider-size-container{align-items:center;display:flex;flex-grow:1;height:100%}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider .tinymce-mobile-slider-size-container .tinymce-mobile-slider-size-line{background:#ccc;display:flex;flex:1;height:.2em;margin-bottom:.3em;margin-top:.3em}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider.tinymce-mobile-hue-slider-container{padding-left:2em;padding-right:2em}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider.tinymce-mobile-hue-slider-container .tinymce-mobile-slider-gradient-container{align-items:center;display:flex;flex-grow:1;height:100%}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider.tinymce-mobile-hue-slider-container .tinymce-mobile-slider-gradient-container .tinymce-mobile-slider-gradient{background:linear-gradient(to right,red 0,#feff00 17%,#0f0 33%,#00feff 50%,#00f 67%,#ff00fe 83%,red 100%);display:flex;flex:1;height:.2em;margin-bottom:.3em;margin-top:.3em}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider.tinymce-mobile-hue-slider-container .tinymce-mobile-hue-slider-black{background:#000;height:.2em;margin-bottom:.3em;margin-top:.3em;width:1.2em}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider.tinymce-mobile-hue-slider-container .tinymce-mobile-hue-slider-white{background:#fff;height:.2em;margin-bottom:.3em;margin-top:.3em;width:1.2em}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider .tinymce-mobile-slider-thumb{align-items:center;background-clip:padding-box;background-color:#455a64;border:.5em solid rgba(136,136,136,0);border-radius:3em;bottom:0;color:#fff;display:flex;height:.5em;justify-content:center;left:-10px;margin:auto;position:absolute;top:0;transition:border 120ms cubic-bezier(.39,.58,.57,1);width:.5em}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider .tinymce-mobile-slider-thumb.tinymce-mobile-thumb-active{border:.5em solid rgba(136,136,136,.39)}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serializer-wrapper,.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group>div{align-items:center;display:flex;height:100%;flex:1}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serializer-wrapper{flex-direction:column;justify-content:center}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-toolbar-group-item{align-items:center;display:flex}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-toolbar-group-item:not(.tinymce-mobile-serialised-dialog){height:100%}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-dot-container{display:flex}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group input{background:#fff;border:none;border-radius:0;color:#455a64;flex-grow:1;font-size:.85em;padding-bottom:.1em;padding-left:5px;padding-top:.1em}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group input::-webkit-input-placeholder{color:#888}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group input::placeholder{color:#888}.tinymce-mobile-dropup{background:#fff;display:flex;overflow:hidden;width:100%}.tinymce-mobile-dropup.tinymce-mobile-dropup-shrinking{transition:height .3s ease-out}.tinymce-mobile-dropup.tinymce-mobile-dropup-growing{transition:height .3s ease-in}.tinymce-mobile-dropup.tinymce-mobile-dropup-closed{flex-grow:0}.tinymce-mobile-dropup.tinymce-mobile-dropup-open:not(.tinymce-mobile-dropup-growing){flex-grow:1}.tinymce-mobile-ios-container .tinymce-mobile-dropup:not(.tinymce-mobile-dropup-closed){min-height:200px}@media only screen and (orientation:landscape){.tinymce-mobile-dropup:not(.tinymce-mobile-dropup-closed){min-height:200px}}@media only screen and (min-device-width :320px) and (max-device-width :568px) and (orientation :landscape){.tinymce-mobile-ios-container .tinymce-mobile-dropup:not(.tinymce-mobile-dropup-closed){min-height:150px}}.tinymce-mobile-styles-menu{font-family:sans-serif;outline:4px solid #000;overflow:hidden;position:relative;width:100%}.tinymce-mobile-styles-menu [role=menu]{display:flex;flex-direction:column;height:100%;position:absolute;width:100%}.tinymce-mobile-styles-menu [role=menu].transitioning{transition:transform .5s ease-in-out}.tinymce-mobile-styles-menu .tinymce-mobile-styles-item{border-bottom:1px solid #ddd;color:#455a64;cursor:pointer;display:flex;padding:1em 1em;position:relative}.tinymce-mobile-styles-menu .tinymce-mobile-styles-collapser .tinymce-mobile-styles-collapse-icon::before{color:#455a64;content:"\e314";font-family:tinymce-mobile,sans-serif}.tinymce-mobile-styles-menu .tinymce-mobile-styles-item.tinymce-mobile-styles-item-is-menu::after{color:#455a64;content:"\e315";font-family:tinymce-mobile,sans-serif;padding-left:1em;padding-right:1em;position:absolute;right:0}.tinymce-mobile-styles-menu .tinymce-mobile-styles-item.tinymce-mobile-format-matches::after{font-family:tinymce-mobile,sans-serif;padding-left:1em;padding-right:1em;position:absolute;right:0}.tinymce-mobile-styles-menu .tinymce-mobile-styles-collapser,.tinymce-mobile-styles-menu .tinymce-mobile-styles-separator{align-items:center;background:#fff;border-top:#455a64;color:#455a64;display:flex;min-height:2.5em;padding-left:1em;padding-right:1em}.tinymce-mobile-styles-menu [data-transitioning-destination=before][data-transitioning-state],.tinymce-mobile-styles-menu [data-transitioning-state=before]{transform:translate(-100%)}.tinymce-mobile-styles-menu [data-transitioning-destination=current][data-transitioning-state],.tinymce-mobile-styles-menu [data-transitioning-state=current]{transform:translate(0)}.tinymce-mobile-styles-menu [data-transitioning-destination=after][data-transitioning-state],.tinymce-mobile-styles-menu [data-transitioning-state=after]{transform:translate(100%)}@font-face{font-family:tinymce-mobile;font-style:normal;font-weight:400;src:url(fonts/tinymce-mobile.woff?8x92w3) format('woff')}@media (min-device-width:700px){.tinymce-mobile-outer-container,.tinymce-mobile-outer-container input{font-size:25px}}@media (max-device-width:700px){.tinymce-mobile-outer-container,.tinymce-mobile-outer-container input{font-size:18px}}.tinymce-mobile-icon{font-family:tinymce-mobile,sans-serif}.mixin-flex-and-centre{align-items:center;display:flex;justify-content:center}.mixin-flex-bar{align-items:center;display:flex;height:100%}.tinymce-mobile-outer-container .tinymce-mobile-editor-socket iframe{background-color:#fff;width:100%}.tinymce-mobile-editor-socket .tinymce-mobile-mask-edit-icon{background-color:#207ab7;border-radius:50%;bottom:1em;color:#fff;font-size:1em;height:2.1em;position:fixed;right:2em;width:2.1em;align-items:center;display:flex;justify-content:center}@media only screen and (min-device-width:700px){.tinymce-mobile-editor-socket .tinymce-mobile-mask-edit-icon{font-size:1.2em}}.tinymce-mobile-outer-container:not(.tinymce-mobile-fullscreen-maximized) .tinymce-mobile-editor-socket{height:300px;overflow:hidden}.tinymce-mobile-outer-container:not(.tinymce-mobile-fullscreen-maximized) .tinymce-mobile-editor-socket iframe{height:100%}.tinymce-mobile-outer-container:not(.tinymce-mobile-fullscreen-maximized) .tinymce-mobile-toolstrip{display:none}input[type=file]::-webkit-file-upload-button{display:none}@media only screen and (min-device-width :320px) and (max-device-width :568px) and (orientation :landscape){.tinymce-mobile-ios-container .tinymce-mobile-editor-socket .tinymce-mobile-mask-edit-icon{bottom:50%}}
diff --git a/website/js/vendor/tinymce/js/tinymce/skins/ui/oxide/content.inline.min.css b/website/js/vendor/tinymce/js/tinymce/skins/ui/oxide/content.inline.min.css
new file mode 100644 (file)
index 0000000..961196d
--- /dev/null
@@ -0,0 +1,7 @@
+/**
+ * Copyright (c) Tiny Technologies, Inc. All rights reserved.
+ * Licensed under the LGPL or a commercial license.
+ * For LGPL see License.txt in the project root for license information.
+ * For commercial licenses see https://www.tiny.cloud/
+ */
+.mce-content-body .mce-item-anchor{background:transparent url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'8'%20height%3D'12'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20d%3D'M0%200L8%200%208%2012%204.09117821%209%200%2012z'%2F%3E%3C%2Fsvg%3E%0A") no-repeat center;cursor:default;display:inline-block;height:12px!important;padding:0 2px;-webkit-user-modify:read-only;-moz-user-modify:read-only;-webkit-user-select:all;-moz-user-select:all;-ms-user-select:all;user-select:all;width:8px!important}.mce-content-body .mce-item-anchor[data-mce-selected]{outline-offset:1px}.tox-comments-visible .tox-comment{background-color:#fff0b7}.tox-comments-visible .tox-comment--active{background-color:#ffe168}.tox-checklist>li:not(.tox-checklist--hidden){list-style:none;margin:.25em 0}.tox-checklist>li:not(.tox-checklist--hidden)::before{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%3E%3Cg%20id%3D%22checklist-unchecked%22%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%3Crect%20id%3D%22Rectangle%22%20width%3D%2215%22%20height%3D%2215%22%20x%3D%22.5%22%20y%3D%22.5%22%20fill-rule%3D%22nonzero%22%20stroke%3D%22%234C4C4C%22%20rx%3D%222%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%0A");background-size:100%;content:'';cursor:pointer;height:1em;margin-left:-1.5em;margin-top:.125em;position:absolute;width:1em}.tox-checklist li:not(.tox-checklist--hidden).tox-checklist--checked::before{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%3E%3Cg%20id%3D%22checklist-checked%22%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%3Crect%20id%3D%22Rectangle%22%20width%3D%2216%22%20height%3D%2216%22%20fill%3D%22%234099FF%22%20fill-rule%3D%22nonzero%22%20rx%3D%222%22%2F%3E%3Cpath%20id%3D%22Path%22%20fill%3D%22%23FFF%22%20fill-rule%3D%22nonzero%22%20d%3D%22M11.5703186%2C3.14417309%20C11.8516238%2C2.73724603%2012.4164781%2C2.62829933%2012.83558%2C2.89774797%20C13.260121%2C3.17069355%2013.3759736%2C3.72932262%2013.0909105%2C4.14168582%20L7.7580587%2C11.8560195%20C7.43776896%2C12.3193404%206.76483983%2C12.3852142%206.35607322%2C11.9948725%20L3.02491697%2C8.8138662%20C2.66090143%2C8.46625845%202.65798871%2C7.89594698%203.01850234%2C7.54483354%20C3.373942%2C7.19866177%203.94940006%2C7.19592841%204.30829608%2C7.5386474%20L6.85276923%2C9.9684299%20L11.5703186%2C3.14417309%20Z%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%0A")}[dir=rtl] .tox-checklist>li:not(.tox-checklist--hidden)::before{margin-left:0;margin-right:-1.5em}code[class*=language-],pre[class*=language-]{color:#000;background:0 0;text-shadow:0 1px #fff;font-family:Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace;font-size:1em;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;tab-size:4;-webkit-hyphens:none;-ms-hyphens:none;hyphens:none}code[class*=language-] ::-moz-selection,code[class*=language-]::-moz-selection,pre[class*=language-] ::-moz-selection,pre[class*=language-]::-moz-selection{text-shadow:none;background:#b3d4fc}code[class*=language-] ::selection,code[class*=language-]::selection,pre[class*=language-] ::selection,pre[class*=language-]::selection{text-shadow:none;background:#b3d4fc}@media print{code[class*=language-],pre[class*=language-]{text-shadow:none}}pre[class*=language-]{padding:1em;margin:.5em 0;overflow:auto}:not(pre)>code[class*=language-],pre[class*=language-]{background:#f5f2f0}:not(pre)>code[class*=language-]{padding:.1em;border-radius:.3em;white-space:normal}.token.cdata,.token.comment,.token.doctype,.token.prolog{color:#708090}.token.punctuation{color:#999}.namespace{opacity:.7}.token.boolean,.token.constant,.token.deleted,.token.number,.token.property,.token.symbol,.token.tag{color:#905}.token.attr-name,.token.builtin,.token.char,.token.inserted,.token.selector,.token.string{color:#690}.language-css .token.string,.style .token.string,.token.entity,.token.operator,.token.url{color:#9a6e3a;background:hsla(0,0%,100%,.5)}.token.atrule,.token.attr-value,.token.keyword{color:#07a}.token.class-name,.token.function{color:#dd4a68}.token.important,.token.regex,.token.variable{color:#e90}.token.bold,.token.important{font-weight:700}.token.italic{font-style:italic}.token.entity{cursor:help}.mce-content-body{overflow-wrap:break-word;word-wrap:break-word}.mce-content-body .mce-visual-caret{background-color:#000;background-color:currentcolor;position:absolute}.mce-content-body .mce-visual-caret-hidden{display:none}.mce-content-body [data-mce-caret]{left:-1000px;margin:0;padding:0;position:absolute;right:auto;top:0}.mce-content-body .mce-offscreen-selection{left:-9999999999px;max-width:1000000px;position:absolute}.mce-content-body [contentEditable=false]{cursor:default}.mce-content-body [contentEditable=true]{cursor:text}.tox-cursor-format-painter{cursor:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%3E%0A%20%20%3Cg%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%0A%20%20%20%20%3Cpath%20fill%3D%22%23000%22%20fill-rule%3D%22nonzero%22%20d%3D%22M15%2C6%20C15%2C5.45%2014.55%2C5%2014%2C5%20L6%2C5%20C5.45%2C5%205%2C5.45%205%2C6%20L5%2C10%20C5%2C10.55%205.45%2C11%206%2C11%20L14%2C11%20C14.55%2C11%2015%2C10.55%2015%2C10%20L15%2C9%20L16%2C9%20L16%2C12%20L9%2C12%20L9%2C19%20C9%2C19.55%209.45%2C20%2010%2C20%20L11%2C20%20C11.55%2C20%2012%2C19.55%2012%2C19%20L12%2C14%20L18%2C14%20L18%2C7%20L15%2C7%20L15%2C6%20Z%22%2F%3E%0A%20%20%20%20%3Cpath%20fill%3D%22%23000%22%20fill-rule%3D%22nonzero%22%20d%3D%22M1%2C1%20L8.25%2C1%20C8.66421356%2C1%209%2C1.33578644%209%2C1.75%20L9%2C1.75%20C9%2C2.16421356%208.66421356%2C2.5%208.25%2C2.5%20L2.5%2C2.5%20L2.5%2C8.25%20C2.5%2C8.66421356%202.16421356%2C9%201.75%2C9%20L1.75%2C9%20C1.33578644%2C9%201%2C8.66421356%201%2C8.25%20L1%2C1%20Z%22%2F%3E%0A%20%20%3C%2Fg%3E%0A%3C%2Fsvg%3E%0A"),default}.mce-content-body figure.align-left{float:left}.mce-content-body figure.align-right{float:right}.mce-content-body figure.image.align-center{display:table;margin-left:auto;margin-right:auto}.mce-preview-object{border:1px solid gray;display:inline-block;line-height:0;margin:0 2px 0 2px;position:relative}.mce-preview-object .mce-shim{background:url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7);height:100%;left:0;position:absolute;top:0;width:100%}.mce-preview-object[data-mce-selected="2"] .mce-shim{display:none}.mce-object{background:transparent url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%3E%3Cpath%20d%3D%22M4%203h16a1%201%200%200%201%201%201v16a1%201%200%200%201-1%201H4a1%201%200%200%201-1-1V4a1%201%200%200%201%201-1zm1%202v14h14V5H5zm4.79%202.565l5.64%204.028a.5.5%200%200%201%200%20.814l-5.64%204.028a.5.5%200%200%201-.79-.407V7.972a.5.5%200%200%201%20.79-.407z%22%2F%3E%3C%2Fsvg%3E%0A") no-repeat center;border:1px dashed #aaa}.mce-pagebreak{border:1px dashed #aaa;cursor:default;display:block;height:5px;margin-top:15px;page-break-before:always;width:100%}@media print{.mce-pagebreak{border:0}}.tiny-pageembed .mce-shim{background:url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7);height:100%;left:0;position:absolute;top:0;width:100%}.tiny-pageembed[data-mce-selected="2"] .mce-shim{display:none}.tiny-pageembed{display:inline-block;position:relative}.tiny-pageembed--16by9,.tiny-pageembed--1by1,.tiny-pageembed--21by9,.tiny-pageembed--4by3{display:block;overflow:hidden;padding:0;position:relative;width:100%}.tiny-pageembed--16by9::before,.tiny-pageembed--1by1::before,.tiny-pageembed--21by9::before,.tiny-pageembed--4by3::before{content:"";display:block}.tiny-pageembed--21by9::before{padding-top:42.857143%}.tiny-pageembed--16by9::before{padding-top:56.25%}.tiny-pageembed--4by3::before{padding-top:75%}.tiny-pageembed--1by1::before{padding-top:100%}.tiny-pageembed--16by9 iframe,.tiny-pageembed--1by1 iframe,.tiny-pageembed--21by9 iframe,.tiny-pageembed--4by3 iframe{border:0;height:100%;left:0;position:absolute;top:0;width:100%}.mce-content-body div.mce-resizehandle{background-color:#4099ff;border-color:#4099ff;border-style:solid;border-width:1px;box-sizing:border-box;height:10px;position:absolute;width:10px;z-index:10000}.mce-content-body div.mce-resizehandle:hover{background-color:#4099ff}.mce-content-body div.mce-resizehandle:nth-of-type(1){cursor:nwse-resize}.mce-content-body div.mce-resizehandle:nth-of-type(2){cursor:nesw-resize}.mce-content-body div.mce-resizehandle:nth-of-type(3){cursor:nwse-resize}.mce-content-body div.mce-resizehandle:nth-of-type(4){cursor:nesw-resize}.mce-content-body .mce-clonedresizable{opacity:.5;outline:1px dashed #000;position:absolute;z-index:10000}.mce-content-body .mce-resize-helper{background:#555;background:rgba(0,0,0,.75);border:1px;border-radius:3px;color:#fff;display:none;font-family:sans-serif;font-size:12px;line-height:14px;margin:5px 10px;padding:5px;position:absolute;white-space:nowrap;z-index:10001}.mce-match-marker{background:#aaa;color:#fff}.mce-match-marker-selected{background:#39f;color:#fff}.mce-content-body img[data-mce-selected],.mce-content-body table[data-mce-selected]{outline:3px solid #b4d7ff}.mce-content-body hr[data-mce-selected]{outline:3px solid #b4d7ff;outline-offset:1px}.mce-content-body [contentEditable=false] [contentEditable=true]:focus{outline:3px solid #b4d7ff}.mce-content-body [contentEditable=false] [contentEditable=true]:hover{outline:3px solid #b4d7ff}.mce-content-body [contentEditable=false][data-mce-selected]{cursor:not-allowed;outline:3px solid #b4d7ff}.mce-content-body.mce-content-readonly [contentEditable=true]:focus,.mce-content-body.mce-content-readonly [contentEditable=true]:hover{outline:0}.mce-content-body [data-mce-selected=inline-boundary]{background-color:#b4d7ff}.mce-content-body .mce-edit-focus{outline:3px solid #b4d7ff}.mce-content-body td[data-mce-selected],.mce-content-body th[data-mce-selected]{background-color:#b4d7ff!important}.mce-content-body td[data-mce-selected]::-moz-selection,.mce-content-body th[data-mce-selected]::-moz-selection{background:0 0}.mce-content-body td[data-mce-selected]::selection,.mce-content-body th[data-mce-selected]::selection{background:0 0}.mce-content-body td[data-mce-selected] *,.mce-content-body th[data-mce-selected] *{-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.mce-content-body img::-moz-selection{background:0 0}.mce-content-body img::selection{background:0 0}.ephox-snooker-resizer-bar{background-color:#b4d7ff;opacity:0}.ephox-snooker-resizer-cols{cursor:col-resize}.ephox-snooker-resizer-rows{cursor:row-resize}.ephox-snooker-resizer-bar.ephox-snooker-resizer-bar-dragging{opacity:1}.mce-spellchecker-word{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'4'%20height%3D'4'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20stroke%3D'%23ff0000'%20fill%3D'none'%20stroke-linecap%3D'round'%20stroke-opacity%3D'.75'%20d%3D'M0%203L2%201%204%203'%2F%3E%3C%2Fsvg%3E%0A");background-position:0 calc(100% + 1px);background-repeat:repeat-x;background-size:auto 6px;cursor:default;height:2rem}.mce-spellchecker-grammar{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'4'%20height%3D'4'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20stroke%3D'%2300A835'%20fill%3D'none'%20stroke-linecap%3D'round'%20d%3D'M0%203L2%201%204%203'%2F%3E%3C%2Fsvg%3E%0A");background-position:0 calc(100% + 1px);background-repeat:repeat-x;background-size:auto 6px;cursor:default}.mce-toc{border:1px solid gray}.mce-toc h2{margin:4px}.mce-toc li{list-style-type:none}.mce-item-table,.mce-item-table caption,.mce-item-table td,.mce-item-table th{border:1px dashed #bbb}.mce-visualblocks address,.mce-visualblocks article,.mce-visualblocks aside,.mce-visualblocks blockquote,.mce-visualblocks div:not([data-mce-bogus]),.mce-visualblocks dl,.mce-visualblocks figcaption,.mce-visualblocks figure,.mce-visualblocks h1,.mce-visualblocks h2,.mce-visualblocks h3,.mce-visualblocks h4,.mce-visualblocks h5,.mce-visualblocks h6,.mce-visualblocks hgroup,.mce-visualblocks ol,.mce-visualblocks p,.mce-visualblocks pre,.mce-visualblocks section,.mce-visualblocks ul{background-repeat:no-repeat;border:1px dashed #bbb;margin-left:3px;padding-top:10px}.mce-visualblocks p{background-image:url(data:image/gif;base64,R0lGODlhCQAJAJEAAAAAAP///7u7u////yH5BAEAAAMALAAAAAAJAAkAAAIQnG+CqCN/mlyvsRUpThG6AgA7)}.mce-visualblocks h1{background-image:url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybGu1JuxHoAfRNRW3TWXyF2YiRUAOw==)}.mce-visualblocks h2{background-image:url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8Hybbx4oOuqgTynJd6bGlWg3DkJzoaUAAAOw==)}.mce-visualblocks h3{background-image:url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIZjI8Hybbx4oOuqgTynJf2Ln2NOHpQpmhAAQA7)}.mce-visualblocks h4{background-image:url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxInR0zqeAdhtJlXwV1oCll2HaWgAAOw==)}.mce-visualblocks h5{background-image:url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxIoiuwjane4iq5GlW05GgIkIZUAAAOw==)}.mce-visualblocks h6{background-image:url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxIoiuwjan04jep1iZ1XRlAo5bVgAAOw==)}.mce-visualblocks div:not([data-mce-bogus]){background-image:url(data:image/gif;base64,R0lGODlhEgAKAIABALu7u////yH5BAEAAAEALAAAAAASAAoAAAIfjI9poI0cgDywrhuxfbrzDEbQM2Ei5aRjmoySW4pAAQA7)}.mce-visualblocks section{background-image:url(data:image/gif;base64,R0lGODlhKAAKAIABALu7u////yH5BAEAAAEALAAAAAAoAAoAAAI5jI+pywcNY3sBWHdNrplytD2ellDeSVbp+GmWqaDqDMepc8t17Y4vBsK5hDyJMcI6KkuYU+jpjLoKADs=)}.mce-visualblocks article{background-image:url(data:image/gif;base64,R0lGODlhKgAKAIABALu7u////yH5BAEAAAEALAAAAAAqAAoAAAI6jI+pywkNY3wG0GBvrsd2tXGYSGnfiF7ikpXemTpOiJScasYoDJJrjsG9gkCJ0ag6KhmaIe3pjDYBBQA7)}.mce-visualblocks blockquote{background-image:url(data:image/gif;base64,R0lGODlhPgAKAIABALu7u////yH5BAEAAAEALAAAAAA+AAoAAAJPjI+py+0Knpz0xQDyuUhvfoGgIX5iSKZYgq5uNL5q69asZ8s5rrf0yZmpNkJZzFesBTu8TOlDVAabUyatguVhWduud3EyiUk45xhTTgMBBQA7)}.mce-visualblocks address{background-image:url(data:image/gif;base64,R0lGODlhLQAKAIABALu7u////yH5BAEAAAEALAAAAAAtAAoAAAI/jI+pywwNozSP1gDyyZcjb3UaRpXkWaXmZW4OqKLhBmLs+K263DkJK7OJeifh7FicKD9A1/IpGdKkyFpNmCkAADs=)}.mce-visualblocks pre{background-image:url(data:image/gif;base64,R0lGODlhFQAKAIABALu7uwAAACH5BAEAAAEALAAAAAAVAAoAAAIjjI+ZoN0cgDwSmnpz1NCueYERhnibZVKLNnbOq8IvKpJtVQAAOw==)}.mce-visualblocks figure{background-image:url(data:image/gif;base64,R0lGODlhJAAKAIAAALu7u////yH5BAEAAAEALAAAAAAkAAoAAAI0jI+py+2fwAHUSFvD3RlvG4HIp4nX5JFSpnZUJ6LlrM52OE7uSWosBHScgkSZj7dDKnWAAgA7)}.mce-visualblocks figcaption{border:1px dashed #bbb}.mce-visualblocks hgroup{background-image:url(data:image/gif;base64,R0lGODlhJwAKAIABALu7uwAAACH5BAEAAAEALAAAAAAnAAoAAAI3jI+pywYNI3uB0gpsRtt5fFnfNZaVSYJil4Wo03Hv6Z62uOCgiXH1kZIIJ8NiIxRrAZNMZAtQAAA7)}.mce-visualblocks aside{background-image:url(data:image/gif;base64,R0lGODlhHgAKAIABAKqqqv///yH5BAEAAAEALAAAAAAeAAoAAAItjI+pG8APjZOTzgtqy7I3f1yehmQcFY4WKZbqByutmW4aHUd6vfcVbgudgpYCADs=)}.mce-visualblocks ul{background-image:url(data:image/gif;base64,R0lGODlhDQAKAIAAALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybGuYnqUVSjvw26DzzXiqIDlVwAAOw==)}.mce-visualblocks ol{background-image:url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybH6HHt0qourxC6CvzXieHyeWQAAOw==)}.mce-visualblocks dl{background-image:url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybEOnmOvUoWznTqeuEjNSCqeGRUAOw==)}.mce-visualblocks:not([dir=rtl]) address,.mce-visualblocks:not([dir=rtl]) article,.mce-visualblocks:not([dir=rtl]) aside,.mce-visualblocks:not([dir=rtl]) blockquote,.mce-visualblocks:not([dir=rtl]) div:not([data-mce-bogus]),.mce-visualblocks:not([dir=rtl]) dl,.mce-visualblocks:not([dir=rtl]) figcaption,.mce-visualblocks:not([dir=rtl]) figure,.mce-visualblocks:not([dir=rtl]) h1,.mce-visualblocks:not([dir=rtl]) h2,.mce-visualblocks:not([dir=rtl]) h3,.mce-visualblocks:not([dir=rtl]) h4,.mce-visualblocks:not([dir=rtl]) h5,.mce-visualblocks:not([dir=rtl]) h6,.mce-visualblocks:not([dir=rtl]) hgroup,.mce-visualblocks:not([dir=rtl]) ol,.mce-visualblocks:not([dir=rtl]) p,.mce-visualblocks:not([dir=rtl]) pre,.mce-visualblocks:not([dir=rtl]) section,.mce-visualblocks:not([dir=rtl]) ul{margin-left:3px}.mce-visualblocks[dir=rtl] address,.mce-visualblocks[dir=rtl] article,.mce-visualblocks[dir=rtl] aside,.mce-visualblocks[dir=rtl] blockquote,.mce-visualblocks[dir=rtl] div:not([data-mce-bogus]),.mce-visualblocks[dir=rtl] dl,.mce-visualblocks[dir=rtl] figcaption,.mce-visualblocks[dir=rtl] figure,.mce-visualblocks[dir=rtl] h1,.mce-visualblocks[dir=rtl] h2,.mce-visualblocks[dir=rtl] h3,.mce-visualblocks[dir=rtl] h4,.mce-visualblocks[dir=rtl] h5,.mce-visualblocks[dir=rtl] h6,.mce-visualblocks[dir=rtl] hgroup,.mce-visualblocks[dir=rtl] ol,.mce-visualblocks[dir=rtl] p,.mce-visualblocks[dir=rtl] pre,.mce-visualblocks[dir=rtl] section,.mce-visualblocks[dir=rtl] ul{background-position-x:right;margin-right:3px}.mce-nbsp,.mce-shy{background:#aaa}.mce-shy::after{content:'-'}
diff --git a/website/js/vendor/tinymce/js/tinymce/skins/ui/oxide/content.min.css b/website/js/vendor/tinymce/js/tinymce/skins/ui/oxide/content.min.css
new file mode 100644 (file)
index 0000000..2a32f2f
--- /dev/null
@@ -0,0 +1,7 @@
+/**
+ * Copyright (c) Tiny Technologies, Inc. All rights reserved.
+ * Licensed under the LGPL or a commercial license.
+ * For LGPL see License.txt in the project root for license information.
+ * For commercial licenses see https://www.tiny.cloud/
+ */
+.mce-content-body .mce-item-anchor{background:transparent url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'8'%20height%3D'12'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20d%3D'M0%200L8%200%208%2012%204.09117821%209%200%2012z'%2F%3E%3C%2Fsvg%3E%0A") no-repeat center;cursor:default;display:inline-block;height:12px!important;padding:0 2px;-webkit-user-modify:read-only;-moz-user-modify:read-only;-webkit-user-select:all;-moz-user-select:all;-ms-user-select:all;user-select:all;width:8px!important}.mce-content-body .mce-item-anchor[data-mce-selected]{outline-offset:1px}.tox-comments-visible .tox-comment{background-color:#fff0b7}.tox-comments-visible .tox-comment--active{background-color:#ffe168}.tox-checklist>li:not(.tox-checklist--hidden){list-style:none;margin:.25em 0}.tox-checklist>li:not(.tox-checklist--hidden)::before{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%3E%3Cg%20id%3D%22checklist-unchecked%22%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%3Crect%20id%3D%22Rectangle%22%20width%3D%2215%22%20height%3D%2215%22%20x%3D%22.5%22%20y%3D%22.5%22%20fill-rule%3D%22nonzero%22%20stroke%3D%22%234C4C4C%22%20rx%3D%222%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%0A");background-size:100%;content:'';cursor:pointer;height:1em;margin-left:-1.5em;margin-top:.125em;position:absolute;width:1em}.tox-checklist li:not(.tox-checklist--hidden).tox-checklist--checked::before{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%3E%3Cg%20id%3D%22checklist-checked%22%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%3Crect%20id%3D%22Rectangle%22%20width%3D%2216%22%20height%3D%2216%22%20fill%3D%22%234099FF%22%20fill-rule%3D%22nonzero%22%20rx%3D%222%22%2F%3E%3Cpath%20id%3D%22Path%22%20fill%3D%22%23FFF%22%20fill-rule%3D%22nonzero%22%20d%3D%22M11.5703186%2C3.14417309%20C11.8516238%2C2.73724603%2012.4164781%2C2.62829933%2012.83558%2C2.89774797%20C13.260121%2C3.17069355%2013.3759736%2C3.72932262%2013.0909105%2C4.14168582%20L7.7580587%2C11.8560195%20C7.43776896%2C12.3193404%206.76483983%2C12.3852142%206.35607322%2C11.9948725%20L3.02491697%2C8.8138662%20C2.66090143%2C8.46625845%202.65798871%2C7.89594698%203.01850234%2C7.54483354%20C3.373942%2C7.19866177%203.94940006%2C7.19592841%204.30829608%2C7.5386474%20L6.85276923%2C9.9684299%20L11.5703186%2C3.14417309%20Z%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%0A")}[dir=rtl] .tox-checklist>li:not(.tox-checklist--hidden)::before{margin-left:0;margin-right:-1.5em}code[class*=language-],pre[class*=language-]{color:#000;background:0 0;text-shadow:0 1px #fff;font-family:Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace;font-size:1em;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;tab-size:4;-webkit-hyphens:none;-ms-hyphens:none;hyphens:none}code[class*=language-] ::-moz-selection,code[class*=language-]::-moz-selection,pre[class*=language-] ::-moz-selection,pre[class*=language-]::-moz-selection{text-shadow:none;background:#b3d4fc}code[class*=language-] ::selection,code[class*=language-]::selection,pre[class*=language-] ::selection,pre[class*=language-]::selection{text-shadow:none;background:#b3d4fc}@media print{code[class*=language-],pre[class*=language-]{text-shadow:none}}pre[class*=language-]{padding:1em;margin:.5em 0;overflow:auto}:not(pre)>code[class*=language-],pre[class*=language-]{background:#f5f2f0}:not(pre)>code[class*=language-]{padding:.1em;border-radius:.3em;white-space:normal}.token.cdata,.token.comment,.token.doctype,.token.prolog{color:#708090}.token.punctuation{color:#999}.namespace{opacity:.7}.token.boolean,.token.constant,.token.deleted,.token.number,.token.property,.token.symbol,.token.tag{color:#905}.token.attr-name,.token.builtin,.token.char,.token.inserted,.token.selector,.token.string{color:#690}.language-css .token.string,.style .token.string,.token.entity,.token.operator,.token.url{color:#9a6e3a;background:hsla(0,0%,100%,.5)}.token.atrule,.token.attr-value,.token.keyword{color:#07a}.token.class-name,.token.function{color:#dd4a68}.token.important,.token.regex,.token.variable{color:#e90}.token.bold,.token.important{font-weight:700}.token.italic{font-style:italic}.token.entity{cursor:help}.mce-content-body{overflow-wrap:break-word;word-wrap:break-word}.mce-content-body .mce-visual-caret{background-color:#000;background-color:currentcolor;position:absolute}.mce-content-body .mce-visual-caret-hidden{display:none}.mce-content-body [data-mce-caret]{left:-1000px;margin:0;padding:0;position:absolute;right:auto;top:0}.mce-content-body .mce-offscreen-selection{left:-9999999999px;max-width:1000000px;position:absolute}.mce-content-body [contentEditable=false]{cursor:default}.mce-content-body [contentEditable=true]{cursor:text}.tox-cursor-format-painter{cursor:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%3E%0A%20%20%3Cg%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%0A%20%20%20%20%3Cpath%20fill%3D%22%23000%22%20fill-rule%3D%22nonzero%22%20d%3D%22M15%2C6%20C15%2C5.45%2014.55%2C5%2014%2C5%20L6%2C5%20C5.45%2C5%205%2C5.45%205%2C6%20L5%2C10%20C5%2C10.55%205.45%2C11%206%2C11%20L14%2C11%20C14.55%2C11%2015%2C10.55%2015%2C10%20L15%2C9%20L16%2C9%20L16%2C12%20L9%2C12%20L9%2C19%20C9%2C19.55%209.45%2C20%2010%2C20%20L11%2C20%20C11.55%2C20%2012%2C19.55%2012%2C19%20L12%2C14%20L18%2C14%20L18%2C7%20L15%2C7%20L15%2C6%20Z%22%2F%3E%0A%20%20%20%20%3Cpath%20fill%3D%22%23000%22%20fill-rule%3D%22nonzero%22%20d%3D%22M1%2C1%20L8.25%2C1%20C8.66421356%2C1%209%2C1.33578644%209%2C1.75%20L9%2C1.75%20C9%2C2.16421356%208.66421356%2C2.5%208.25%2C2.5%20L2.5%2C2.5%20L2.5%2C8.25%20C2.5%2C8.66421356%202.16421356%2C9%201.75%2C9%20L1.75%2C9%20C1.33578644%2C9%201%2C8.66421356%201%2C8.25%20L1%2C1%20Z%22%2F%3E%0A%20%20%3C%2Fg%3E%0A%3C%2Fsvg%3E%0A"),default}.mce-content-body figure.align-left{float:left}.mce-content-body figure.align-right{float:right}.mce-content-body figure.image.align-center{display:table;margin-left:auto;margin-right:auto}.mce-preview-object{border:1px solid gray;display:inline-block;line-height:0;margin:0 2px 0 2px;position:relative}.mce-preview-object .mce-shim{background:url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7);height:100%;left:0;position:absolute;top:0;width:100%}.mce-preview-object[data-mce-selected="2"] .mce-shim{display:none}.mce-object{background:transparent url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%3E%3Cpath%20d%3D%22M4%203h16a1%201%200%200%201%201%201v16a1%201%200%200%201-1%201H4a1%201%200%200%201-1-1V4a1%201%200%200%201%201-1zm1%202v14h14V5H5zm4.79%202.565l5.64%204.028a.5.5%200%200%201%200%20.814l-5.64%204.028a.5.5%200%200%201-.79-.407V7.972a.5.5%200%200%201%20.79-.407z%22%2F%3E%3C%2Fsvg%3E%0A") no-repeat center;border:1px dashed #aaa}.mce-pagebreak{border:1px dashed #aaa;cursor:default;display:block;height:5px;margin-top:15px;page-break-before:always;width:100%}@media print{.mce-pagebreak{border:0}}.tiny-pageembed .mce-shim{background:url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7);height:100%;left:0;position:absolute;top:0;width:100%}.tiny-pageembed[data-mce-selected="2"] .mce-shim{display:none}.tiny-pageembed{display:inline-block;position:relative}.tiny-pageembed--16by9,.tiny-pageembed--1by1,.tiny-pageembed--21by9,.tiny-pageembed--4by3{display:block;overflow:hidden;padding:0;position:relative;width:100%}.tiny-pageembed--16by9::before,.tiny-pageembed--1by1::before,.tiny-pageembed--21by9::before,.tiny-pageembed--4by3::before{content:"";display:block}.tiny-pageembed--21by9::before{padding-top:42.857143%}.tiny-pageembed--16by9::before{padding-top:56.25%}.tiny-pageembed--4by3::before{padding-top:75%}.tiny-pageembed--1by1::before{padding-top:100%}.tiny-pageembed--16by9 iframe,.tiny-pageembed--1by1 iframe,.tiny-pageembed--21by9 iframe,.tiny-pageembed--4by3 iframe{border:0;height:100%;left:0;position:absolute;top:0;width:100%}.mce-content-body div.mce-resizehandle{background-color:#4099ff;border-color:#4099ff;border-style:solid;border-width:1px;box-sizing:border-box;height:10px;position:absolute;width:10px;z-index:10000}.mce-content-body div.mce-resizehandle:hover{background-color:#4099ff}.mce-content-body div.mce-resizehandle:nth-of-type(1){cursor:nwse-resize}.mce-content-body div.mce-resizehandle:nth-of-type(2){cursor:nesw-resize}.mce-content-body div.mce-resizehandle:nth-of-type(3){cursor:nwse-resize}.mce-content-body div.mce-resizehandle:nth-of-type(4){cursor:nesw-resize}.mce-content-body .mce-clonedresizable{opacity:.5;outline:1px dashed #000;position:absolute;z-index:10000}.mce-content-body .mce-resize-helper{background:#555;background:rgba(0,0,0,.75);border:1px;border-radius:3px;color:#fff;display:none;font-family:sans-serif;font-size:12px;line-height:14px;margin:5px 10px;padding:5px;position:absolute;white-space:nowrap;z-index:10001}.mce-match-marker{background:#aaa;color:#fff}.mce-match-marker-selected{background:#39f;color:#fff}.mce-content-body img[data-mce-selected],.mce-content-body table[data-mce-selected]{outline:3px solid #b4d7ff}.mce-content-body hr[data-mce-selected]{outline:3px solid #b4d7ff;outline-offset:1px}.mce-content-body [contentEditable=false] [contentEditable=true]:focus{outline:3px solid #b4d7ff}.mce-content-body [contentEditable=false] [contentEditable=true]:hover{outline:3px solid #b4d7ff}.mce-content-body [contentEditable=false][data-mce-selected]{cursor:not-allowed;outline:3px solid #b4d7ff}.mce-content-body.mce-content-readonly [contentEditable=true]:focus,.mce-content-body.mce-content-readonly [contentEditable=true]:hover{outline:0}.mce-content-body [data-mce-selected=inline-boundary]{background-color:#b4d7ff}.mce-content-body .mce-edit-focus{outline:3px solid #b4d7ff}.mce-content-body td[data-mce-selected],.mce-content-body th[data-mce-selected]{background-color:#b4d7ff!important}.mce-content-body td[data-mce-selected]::-moz-selection,.mce-content-body th[data-mce-selected]::-moz-selection{background:0 0}.mce-content-body td[data-mce-selected]::selection,.mce-content-body th[data-mce-selected]::selection{background:0 0}.mce-content-body td[data-mce-selected] *,.mce-content-body th[data-mce-selected] *{-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.mce-content-body img::-moz-selection{background:0 0}.mce-content-body img::selection{background:0 0}.ephox-snooker-resizer-bar{background-color:#b4d7ff;opacity:0}.ephox-snooker-resizer-cols{cursor:col-resize}.ephox-snooker-resizer-rows{cursor:row-resize}.ephox-snooker-resizer-bar.ephox-snooker-resizer-bar-dragging{opacity:1}.mce-spellchecker-word{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'4'%20height%3D'4'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20stroke%3D'%23ff0000'%20fill%3D'none'%20stroke-linecap%3D'round'%20stroke-opacity%3D'.75'%20d%3D'M0%203L2%201%204%203'%2F%3E%3C%2Fsvg%3E%0A");background-position:0 calc(100% + 1px);background-repeat:repeat-x;background-size:auto 6px;cursor:default;height:2rem}.mce-spellchecker-grammar{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'4'%20height%3D'4'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20stroke%3D'%2300A835'%20fill%3D'none'%20stroke-linecap%3D'round'%20d%3D'M0%203L2%201%204%203'%2F%3E%3C%2Fsvg%3E%0A");background-position:0 calc(100% + 1px);background-repeat:repeat-x;background-size:auto 6px;cursor:default}.mce-toc{border:1px solid gray}.mce-toc h2{margin:4px}.mce-toc li{list-style-type:none}.mce-item-table,.mce-item-table caption,.mce-item-table td,.mce-item-table th{border:1px dashed #bbb}.mce-visualblocks address,.mce-visualblocks article,.mce-visualblocks aside,.mce-visualblocks blockquote,.mce-visualblocks div:not([data-mce-bogus]),.mce-visualblocks dl,.mce-visualblocks figcaption,.mce-visualblocks figure,.mce-visualblocks h1,.mce-visualblocks h2,.mce-visualblocks h3,.mce-visualblocks h4,.mce-visualblocks h5,.mce-visualblocks h6,.mce-visualblocks hgroup,.mce-visualblocks ol,.mce-visualblocks p,.mce-visualblocks pre,.mce-visualblocks section,.mce-visualblocks ul{background-repeat:no-repeat;border:1px dashed #bbb;margin-left:3px;padding-top:10px}.mce-visualblocks p{background-image:url(data:image/gif;base64,R0lGODlhCQAJAJEAAAAAAP///7u7u////yH5BAEAAAMALAAAAAAJAAkAAAIQnG+CqCN/mlyvsRUpThG6AgA7)}.mce-visualblocks h1{background-image:url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybGu1JuxHoAfRNRW3TWXyF2YiRUAOw==)}.mce-visualblocks h2{background-image:url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8Hybbx4oOuqgTynJd6bGlWg3DkJzoaUAAAOw==)}.mce-visualblocks h3{background-image:url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIZjI8Hybbx4oOuqgTynJf2Ln2NOHpQpmhAAQA7)}.mce-visualblocks h4{background-image:url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxInR0zqeAdhtJlXwV1oCll2HaWgAAOw==)}.mce-visualblocks h5{background-image:url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxIoiuwjane4iq5GlW05GgIkIZUAAAOw==)}.mce-visualblocks h6{background-image:url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxIoiuwjan04jep1iZ1XRlAo5bVgAAOw==)}.mce-visualblocks div:not([data-mce-bogus]){background-image:url(data:image/gif;base64,R0lGODlhEgAKAIABALu7u////yH5BAEAAAEALAAAAAASAAoAAAIfjI9poI0cgDywrhuxfbrzDEbQM2Ei5aRjmoySW4pAAQA7)}.mce-visualblocks section{background-image:url(data:image/gif;base64,R0lGODlhKAAKAIABALu7u////yH5BAEAAAEALAAAAAAoAAoAAAI5jI+pywcNY3sBWHdNrplytD2ellDeSVbp+GmWqaDqDMepc8t17Y4vBsK5hDyJMcI6KkuYU+jpjLoKADs=)}.mce-visualblocks article{background-image:url(data:image/gif;base64,R0lGODlhKgAKAIABALu7u////yH5BAEAAAEALAAAAAAqAAoAAAI6jI+pywkNY3wG0GBvrsd2tXGYSGnfiF7ikpXemTpOiJScasYoDJJrjsG9gkCJ0ag6KhmaIe3pjDYBBQA7)}.mce-visualblocks blockquote{background-image:url(data:image/gif;base64,R0lGODlhPgAKAIABALu7u////yH5BAEAAAEALAAAAAA+AAoAAAJPjI+py+0Knpz0xQDyuUhvfoGgIX5iSKZYgq5uNL5q69asZ8s5rrf0yZmpNkJZzFesBTu8TOlDVAabUyatguVhWduud3EyiUk45xhTTgMBBQA7)}.mce-visualblocks address{background-image:url(data:image/gif;base64,R0lGODlhLQAKAIABALu7u////yH5BAEAAAEALAAAAAAtAAoAAAI/jI+pywwNozSP1gDyyZcjb3UaRpXkWaXmZW4OqKLhBmLs+K263DkJK7OJeifh7FicKD9A1/IpGdKkyFpNmCkAADs=)}.mce-visualblocks pre{background-image:url(data:image/gif;base64,R0lGODlhFQAKAIABALu7uwAAACH5BAEAAAEALAAAAAAVAAoAAAIjjI+ZoN0cgDwSmnpz1NCueYERhnibZVKLNnbOq8IvKpJtVQAAOw==)}.mce-visualblocks figure{background-image:url(data:image/gif;base64,R0lGODlhJAAKAIAAALu7u////yH5BAEAAAEALAAAAAAkAAoAAAI0jI+py+2fwAHUSFvD3RlvG4HIp4nX5JFSpnZUJ6LlrM52OE7uSWosBHScgkSZj7dDKnWAAgA7)}.mce-visualblocks figcaption{border:1px dashed #bbb}.mce-visualblocks hgroup{background-image:url(data:image/gif;base64,R0lGODlhJwAKAIABALu7uwAAACH5BAEAAAEALAAAAAAnAAoAAAI3jI+pywYNI3uB0gpsRtt5fFnfNZaVSYJil4Wo03Hv6Z62uOCgiXH1kZIIJ8NiIxRrAZNMZAtQAAA7)}.mce-visualblocks aside{background-image:url(data:image/gif;base64,R0lGODlhHgAKAIABAKqqqv///yH5BAEAAAEALAAAAAAeAAoAAAItjI+pG8APjZOTzgtqy7I3f1yehmQcFY4WKZbqByutmW4aHUd6vfcVbgudgpYCADs=)}.mce-visualblocks ul{background-image:url(data:image/gif;base64,R0lGODlhDQAKAIAAALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybGuYnqUVSjvw26DzzXiqIDlVwAAOw==)}.mce-visualblocks ol{background-image:url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybH6HHt0qourxC6CvzXieHyeWQAAOw==)}.mce-visualblocks dl{background-image:url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybEOnmOvUoWznTqeuEjNSCqeGRUAOw==)}.mce-visualblocks:not([dir=rtl]) address,.mce-visualblocks:not([dir=rtl]) article,.mce-visualblocks:not([dir=rtl]) aside,.mce-visualblocks:not([dir=rtl]) blockquote,.mce-visualblocks:not([dir=rtl]) div:not([data-mce-bogus]),.mce-visualblocks:not([dir=rtl]) dl,.mce-visualblocks:not([dir=rtl]) figcaption,.mce-visualblocks:not([dir=rtl]) figure,.mce-visualblocks:not([dir=rtl]) h1,.mce-visualblocks:not([dir=rtl]) h2,.mce-visualblocks:not([dir=rtl]) h3,.mce-visualblocks:not([dir=rtl]) h4,.mce-visualblocks:not([dir=rtl]) h5,.mce-visualblocks:not([dir=rtl]) h6,.mce-visualblocks:not([dir=rtl]) hgroup,.mce-visualblocks:not([dir=rtl]) ol,.mce-visualblocks:not([dir=rtl]) p,.mce-visualblocks:not([dir=rtl]) pre,.mce-visualblocks:not([dir=rtl]) section,.mce-visualblocks:not([dir=rtl]) ul{margin-left:3px}.mce-visualblocks[dir=rtl] address,.mce-visualblocks[dir=rtl] article,.mce-visualblocks[dir=rtl] aside,.mce-visualblocks[dir=rtl] blockquote,.mce-visualblocks[dir=rtl] div:not([data-mce-bogus]),.mce-visualblocks[dir=rtl] dl,.mce-visualblocks[dir=rtl] figcaption,.mce-visualblocks[dir=rtl] figure,.mce-visualblocks[dir=rtl] h1,.mce-visualblocks[dir=rtl] h2,.mce-visualblocks[dir=rtl] h3,.mce-visualblocks[dir=rtl] h4,.mce-visualblocks[dir=rtl] h5,.mce-visualblocks[dir=rtl] h6,.mce-visualblocks[dir=rtl] hgroup,.mce-visualblocks[dir=rtl] ol,.mce-visualblocks[dir=rtl] p,.mce-visualblocks[dir=rtl] pre,.mce-visualblocks[dir=rtl] section,.mce-visualblocks[dir=rtl] ul{background-position-x:right;margin-right:3px}.mce-nbsp,.mce-shy{background:#aaa}.mce-shy::after{content:'-'}body{font-family:sans-serif}table{border-collapse:collapse}
diff --git a/website/js/vendor/tinymce/js/tinymce/skins/ui/oxide/content.mobile.min.css b/website/js/vendor/tinymce/js/tinymce/skins/ui/oxide/content.mobile.min.css
new file mode 100644 (file)
index 0000000..35f7dc0
--- /dev/null
@@ -0,0 +1,7 @@
+/**
+ * Copyright (c) Tiny Technologies, Inc. All rights reserved.
+ * Licensed under the LGPL or a commercial license.
+ * For LGPL see License.txt in the project root for license information.
+ * For commercial licenses see https://www.tiny.cloud/
+ */
+.tinymce-mobile-unfocused-selections .tinymce-mobile-unfocused-selection{background-color:green;display:inline-block;opacity:.5;position:absolute}body{-webkit-text-size-adjust:none}body img{max-width:96vw}body table img{max-width:95%}body{font-family:sans-serif}table{border-collapse:collapse}
diff --git a/website/js/vendor/tinymce/js/tinymce/skins/ui/oxide/fonts/tinymce-mobile.woff b/website/js/vendor/tinymce/js/tinymce/skins/ui/oxide/fonts/tinymce-mobile.woff
new file mode 100644 (file)
index 0000000..1e3be03
Binary files /dev/null and b/website/js/vendor/tinymce/js/tinymce/skins/ui/oxide/fonts/tinymce-mobile.woff differ
diff --git a/website/js/vendor/tinymce/js/tinymce/skins/ui/oxide/skin.min.css b/website/js/vendor/tinymce/js/tinymce/skins/ui/oxide/skin.min.css
new file mode 100644 (file)
index 0000000..0feda24
--- /dev/null
@@ -0,0 +1,7 @@
+/**
+ * Copyright (c) Tiny Technologies, Inc. All rights reserved.
+ * Licensed under the LGPL or a commercial license.
+ * For LGPL see License.txt in the project root for license information.
+ * For commercial licenses see https://www.tiny.cloud/
+ */
+.tox{box-sizing:content-box;color:#222f3e;cursor:auto;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;font-size:16px;font-style:normal;font-weight:400;line-height:normal;-webkit-tap-highlight-color:transparent;text-decoration:none;text-shadow:none;text-transform:none;vertical-align:initial;white-space:normal}.tox :not(svg){box-sizing:inherit;color:inherit;cursor:inherit;direction:inherit;font-family:inherit;font-size:inherit;font-style:inherit;font-weight:inherit;line-height:inherit;-webkit-tap-highlight-color:inherit;text-align:inherit;text-decoration:inherit;text-shadow:inherit;text-transform:inherit;vertical-align:inherit;white-space:inherit}.tox :not(svg){background:0 0;border:0;float:none;height:auto;margin:0;max-width:none;outline:0;padding:0;position:static;width:auto}.tox:not([dir=rtl]){direction:ltr;text-align:left}.tox[dir=rtl]{direction:rtl;text-align:right}.tox-tinymce{border:1px solid #ccc;border-radius:0;box-shadow:none;box-sizing:border-box;display:flex;flex-direction:column;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;overflow:hidden;position:relative;visibility:inherit!important}.tox-tinymce-inline{border:none;box-shadow:none}.tox-tinymce-inline .tox-editor-header{border:1px solid #ccc;border-bottom:0;border-radius:0;box-shadow:none}.tox-tinymce-aux{font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;z-index:1300}.tox-tinymce :focus,.tox-tinymce-aux :focus{outline:0}button::-moz-focus-inner{border:0}.tox .accessibility-issue__header{align-items:center;display:flex;margin-bottom:4px}.tox .accessibility-issue__description{align-items:stretch;border:1px solid #ccc;border-radius:3px;display:flex;justify-content:space-between}.tox .accessibility-issue__description>div{padding-bottom:4px}.tox .accessibility-issue__description>div>div{align-items:center;display:flex;margin-bottom:4px}.tox .accessibility-issue__description>:last-child:not(:only-child){border-color:#ccc;border-style:solid}.tox .accessibility-issue__repair{margin-top:16px}.tox .accessibility-issue--info .accessibility-issue__description{background-color:rgba(32,122,183,.1);border-color:rgba(32,122,183,.4);color:#222f3e}.tox .accessibility-issue--info .accessibility-issue__description>:last-child{border-color:rgba(32,122,183,.4)}.tox .accessibility-issue--info h2{color:#207ab7}.tox .accessibility-issue--info .tox-icon svg{fill:#207ab7}.tox .accessibility-issue--info a .tox-icon{color:#207ab7}.tox .accessibility-issue--warn .accessibility-issue__description{background-color:rgba(255,165,0,.1);border-color:rgba(255,165,0,.5);color:#222f3e}.tox .accessibility-issue--warn .accessibility-issue__description>:last-child{border-color:rgba(255,165,0,.5)}.tox .accessibility-issue--warn h2{color:#cc8500}.tox .accessibility-issue--warn .tox-icon svg{fill:#cc8500}.tox .accessibility-issue--warn a .tox-icon{color:#cc8500}.tox .accessibility-issue--error .accessibility-issue__description{background-color:rgba(204,0,0,.1);border-color:rgba(204,0,0,.4);color:#222f3e}.tox .accessibility-issue--error .accessibility-issue__description>:last-child{border-color:rgba(204,0,0,.4)}.tox .accessibility-issue--error h2{color:#c00}.tox .accessibility-issue--error .tox-icon svg{fill:#c00}.tox .accessibility-issue--error a .tox-icon{color:#c00}.tox .accessibility-issue--success .accessibility-issue__description{background-color:rgba(120,171,70,.1);border-color:rgba(120,171,70,.4);color:#222f3e}.tox .accessibility-issue--success .accessibility-issue__description>:last-child{border-color:rgba(120,171,70,.4)}.tox .accessibility-issue--success h2{color:#78ab46}.tox .accessibility-issue--success .tox-icon svg{fill:#78ab46}.tox .accessibility-issue--success a .tox-icon{color:#78ab46}.tox .tox-dialog__body-content .accessibility-issue__header h1,.tox .tox-dialog__body-content .tox-form__group .accessibility-issue__description h2{margin-top:0}.tox:not([dir=rtl]) .accessibility-issue__header .tox-button{margin-left:4px}.tox:not([dir=rtl]) .accessibility-issue__header>:nth-last-child(2){margin-left:auto}.tox:not([dir=rtl]) .accessibility-issue__description{padding:4px 4px 4px 8px}.tox:not([dir=rtl]) .accessibility-issue__description>:last-child{border-left-width:1px;padding-left:4px}.tox[dir=rtl] .accessibility-issue__header .tox-button{margin-right:4px}.tox[dir=rtl] .accessibility-issue__header>:nth-last-child(2){margin-right:auto}.tox[dir=rtl] .accessibility-issue__description{padding:4px 8px 4px 4px}.tox[dir=rtl] .accessibility-issue__description>:last-child{border-right-width:1px;padding-right:4px}.tox .tox-anchorbar{display:flex;flex:0 0 auto}.tox .tox-bar{display:flex;flex:0 0 auto}.tox .tox-button{background-color:#207ab7;background-image:none;background-position:none;background-repeat:none;border-color:#207ab7;border-radius:3px;border-style:solid;border-width:1px;box-shadow:none;box-sizing:border-box;color:#fff;cursor:pointer;display:inline-block;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;font-size:14px;font-weight:700;letter-spacing:1;line-height:24px;margin:0;outline:0;padding:4px 16px;text-align:center;text-decoration:none;text-transform:capitalize;white-space:nowrap}.tox .tox-button[disabled]{background-color:#207ab7;background-image:none;border-color:#207ab7;box-shadow:none;color:rgba(255,255,255,.5);cursor:not-allowed}.tox .tox-button:focus:not(:disabled){background-color:#1c6ca1;background-image:none;border-color:#1c6ca1;box-shadow:none;color:#fff}.tox .tox-button:hover:not(:disabled){background-color:#1c6ca1;background-image:none;border-color:#1c6ca1;box-shadow:none;color:#fff}.tox .tox-button:active:not(:disabled){background-color:#185d8c;background-image:none;border-color:#185d8c;box-shadow:none;color:#fff}.tox .tox-button--secondary{background-color:#f0f0f0;background-image:none;background-position:none;background-repeat:none;border-color:#f0f0f0;border-radius:3px;border-style:solid;border-width:1px;box-shadow:none;color:#222f3e;outline:0;padding:4px 16px;text-decoration:none;text-transform:capitalize}.tox .tox-button--secondary[disabled]{background-color:#f0f0f0;background-image:none;border-color:#f0f0f0;box-shadow:none;color:rgba(34,47,62,.5)}.tox .tox-button--secondary:focus:not(:disabled){background-color:#e3e3e3;background-image:none;border-color:#e3e3e3;box-shadow:none;color:#222f3e}.tox .tox-button--secondary:hover:not(:disabled){background-color:#e3e3e3;background-image:none;border-color:#e3e3e3;box-shadow:none;color:#222f3e}.tox .tox-button--secondary:active:not(:disabled){background-color:#d6d6d6;background-image:none;border-color:#d6d6d6;box-shadow:none;color:#222f3e}.tox .tox-button--icon,.tox .tox-button.tox-button--icon,.tox .tox-button.tox-button--secondary.tox-button--icon{padding:4px}.tox .tox-button--icon .tox-icon svg,.tox .tox-button.tox-button--icon .tox-icon svg,.tox .tox-button.tox-button--secondary.tox-button--icon .tox-icon svg{display:block;fill:currentColor}.tox .tox-button-link{background:0;border:none;box-sizing:border-box;cursor:pointer;display:inline-block;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;font-size:16px;font-weight:400;line-height:1.3;margin:0;padding:0;white-space:nowrap}.tox .tox-button-link--sm{font-size:14px}.tox .tox-button--naked{background-color:transparent;border-color:transparent;box-shadow:unset;color:#222f3e}.tox .tox-button--naked[disabled]{background-color:#f0f0f0;border-color:#f0f0f0;box-shadow:none;color:rgba(34,47,62,.5)}.tox .tox-button--naked:hover:not(:disabled){background-color:#e3e3e3;border-color:#e3e3e3;box-shadow:none;color:#222f3e}.tox .tox-button--naked:focus:not(:disabled){background-color:#e3e3e3;border-color:#e3e3e3;box-shadow:none;color:#222f3e}.tox .tox-button--naked:active:not(:disabled){background-color:#d6d6d6;border-color:#d6d6d6;box-shadow:none;color:#222f3e}.tox .tox-button--naked .tox-icon svg{fill:currentColor}.tox .tox-button--naked.tox-button--icon:hover:not(:disabled){color:#222f3e}.tox .tox-checkbox{align-items:center;border-radius:3px;cursor:pointer;display:flex;height:36px;min-width:36px}.tox .tox-checkbox__input{height:1px;overflow:hidden;position:absolute;top:auto;width:1px}.tox .tox-checkbox__icons{align-items:center;border-radius:3px;box-shadow:0 0 0 2px transparent;box-sizing:content-box;display:flex;height:24px;justify-content:center;padding:calc(4px - 1px);width:24px}.tox .tox-checkbox__icons .tox-checkbox-icon__unchecked svg{display:block;fill:rgba(34,47,62,.3)}.tox .tox-checkbox__icons .tox-checkbox-icon__indeterminate svg{display:none;fill:#207ab7}.tox .tox-checkbox__icons .tox-checkbox-icon__checked svg{display:none;fill:#207ab7}.tox .tox-checkbox--disabled{color:rgba(34,47,62,.5);cursor:not-allowed}.tox .tox-checkbox--disabled .tox-checkbox__icons .tox-checkbox-icon__checked svg{fill:rgba(34,47,62,.5)}.tox .tox-checkbox--disabled .tox-checkbox__icons .tox-checkbox-icon__unchecked svg{fill:rgba(34,47,62,.5)}.tox .tox-checkbox--disabled .tox-checkbox__icons .tox-checkbox-icon__indeterminate svg{fill:rgba(34,47,62,.5)}.tox input.tox-checkbox__input:checked+.tox-checkbox__icons .tox-checkbox-icon__unchecked svg{display:none}.tox input.tox-checkbox__input:checked+.tox-checkbox__icons .tox-checkbox-icon__checked svg{display:block}.tox input.tox-checkbox__input:indeterminate+.tox-checkbox__icons .tox-checkbox-icon__unchecked svg{display:none}.tox input.tox-checkbox__input:indeterminate+.tox-checkbox__icons .tox-checkbox-icon__indeterminate svg{display:block}.tox input.tox-checkbox__input:focus+.tox-checkbox__icons{border-radius:3px;box-shadow:inset 0 0 0 1px #207ab7;padding:calc(4px - 1px)}.tox:not([dir=rtl]) .tox-checkbox__label{margin-left:4px}.tox:not([dir=rtl]) .tox-checkbox__input{left:-10000px}.tox:not([dir=rtl]) .tox-bar .tox-checkbox{margin-left:4px}.tox[dir=rtl] .tox-checkbox__label{margin-right:4px}.tox[dir=rtl] .tox-checkbox__input{right:-10000px}.tox[dir=rtl] .tox-bar .tox-checkbox{margin-right:4px}.tox .tox-collection--toolbar .tox-collection__group{display:flex;padding:0}.tox .tox-collection--grid .tox-collection__group{display:flex;flex-wrap:wrap;max-height:208px;overflow-x:hidden;overflow-y:auto;padding:0}.tox .tox-collection--list .tox-collection__group{border-bottom-width:0;border-color:#ccc;border-left-width:0;border-right-width:0;border-style:solid;border-top-width:1px;padding:4px 0}.tox .tox-collection--list .tox-collection__group:first-child{border-top-width:0}.tox .tox-collection__group-heading{background-color:#e6e6e6;color:rgba(34,47,62,.7);cursor:default;font-size:12px;font-style:normal;font-weight:400;margin-bottom:4px;margin-top:-4px;padding:4px 8px;text-transform:none;-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.tox .tox-collection__item{align-items:center;color:#222f3e;cursor:pointer;display:flex;-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.tox .tox-collection--list .tox-collection__item{padding:4px 8px}.tox .tox-collection--toolbar .tox-collection__item{border-radius:3px;padding:4px}.tox .tox-collection--grid .tox-collection__item{border-radius:3px;padding:4px}.tox .tox-collection--list .tox-collection__item--enabled{background-color:inherit;color:contrast(inherit,#222f3e,#fff)}.tox .tox-collection--list .tox-collection__item--active{background-color:#dee0e2}.tox .tox-collection--toolbar .tox-collection__item--enabled{background-color:#c8cbcf;color:#222f3e}.tox .tox-collection--toolbar .tox-collection__item--active{background-color:#dee0e2}.tox .tox-collection--grid .tox-collection__item--enabled{background-color:#c8cbcf;color:#222f3e}.tox .tox-collection--grid .tox-collection__item--active{background-color:#dee0e2}.tox .tox-collection--list .tox-collection__item--active:not(.tox-collection__item--state-disabled){color:#222f3e}.tox .tox-collection--toolbar .tox-collection__item--active:not(.tox-collection__item--state-disabled){color:#222f3e}.tox .tox-collection--grid .tox-collection__item--active:not(.tox-collection__item--state-disabled){color:#222f3e}.tox .tox-collection__item--state-disabled{background-color:transparent;color:rgba(34,47,62,.5);cursor:not-allowed}.tox .tox-collection__item-icon{align-items:center;display:flex;height:24px;justify-content:center;width:24px}.tox .tox-collection__item-icon svg{fill:currentColor}.tox .tox-collection--toolbar-lg .tox-collection__item-icon{height:48px;width:48px}.tox .tox-collection__item-label{color:currentColor;display:inline-block;flex:1;-ms-flex-preferred-size:auto;font-size:14px;font-style:normal;font-weight:400;line-height:24px;text-transform:none;word-break:break-all}.tox .tox-collection__item-accessory{color:rgba(34,47,62,.7);display:inline-block;font-size:14px;height:24px;line-height:24px;text-transform:normal}.tox .tox-collection__item-caret{align-items:center;display:flex;min-height:24px}.tox .tox-collection__item-caret::after{content:'';font-size:0;min-height:inherit}.tox .tox-collection__item-caret svg{fill:#222f3e}.tox .tox-collection__item[role=menuitemcheckbox]:not(.tox-collection__item--enabled) .tox-collection__item-checkmark svg{display:none}.tox .tox-collection--horizontal{background-color:#fff;border:1px solid #ccc;border-radius:3px;box-shadow:0 1px 3px rgba(0,0,0,.15);display:flex;flex:0 0 auto;flex-shrink:0;flex-wrap:nowrap;margin-bottom:0;overflow-x:auto;padding:0}.tox .tox-collection--horizontal .tox-collection__group{align-items:center;display:flex;flex-wrap:nowrap;margin:0;padding:0 4px}.tox .tox-collection--horizontal .tox-collection__item{height:34px;margin:2px 0 3px 0;padding:0 4px}.tox .tox-collection--horizontal .tox-collection__item-label{white-space:nowrap}.tox .tox-collection--horizontal .tox-collection__item-caret{margin-left:4px}.tox:not([dir=rtl]) .tox-collection--horizontal .tox-collection__group:not(:last-of-type){border-right:1px solid #ccc}.tox:not([dir=rtl]) .tox-collection--list .tox-collection__item>:not(:first-child){margin-left:8px}.tox:not([dir=rtl]) .tox-collection--list .tox-collection__item-label:first-child{margin-left:4px}.tox:not([dir=rtl]) .tox-collection__item-accessory{margin-left:16px;text-align:right}.tox:not([dir=rtl]) .tox-collection .tox-collection__item-caret{margin-left:16px}.tox[dir=rtl] .tox-collection--horizontal .tox-collection__group:not(:last-of-type){border-left:1px solid #ccc}.tox[dir=rtl] .tox-collection--list .tox-collection__item>:not(:first-child){margin-right:8px}.tox[dir=rtl] .tox-collection--list .tox-collection__item-label:first-child{margin-right:4px}.tox[dir=rtl] .tox-collection__item-icon-rtl .tox-collection__item-icon svg{transform:rotateY(180deg)}.tox[dir=rtl] .tox-collection__item-accessory{margin-right:16px;text-align:left}.tox[dir=rtl] .tox-collection .tox-collection__item-caret{margin-right:16px;transform:rotateY(180deg)}.tox[dir=rtl] .tox-collection--horizontal .tox-collection__item-caret{margin-right:4px}.tox .tox-color-picker-container{display:flex;flex-direction:row;height:225px;margin:0}.tox .tox-sv-palette{box-sizing:border-box;display:flex;height:100%}.tox .tox-sv-palette-spectrum{height:100%}.tox .tox-sv-palette,.tox .tox-sv-palette-spectrum{width:225px}.tox .tox-sv-palette-thumb{background:0 0;border:1px solid #000;border-radius:50%;box-sizing:content-box;height:12px;position:absolute;width:12px}.tox .tox-sv-palette-inner-thumb{border:1px solid #fff;border-radius:50%;height:10px;position:absolute;width:10px}.tox .tox-hue-slider{box-sizing:border-box;height:100%;width:25px}.tox .tox-hue-slider-spectrum{background:linear-gradient(to bottom,red,#ff0080,#f0f,#8000ff,#00f,#0080ff,#0ff,#00ff80,#0f0,#80ff00,#ff0,#ff8000,red);height:100%;width:100%}.tox .tox-hue-slider,.tox .tox-hue-slider-spectrum{width:20px}.tox .tox-hue-slider-thumb{background:#fff;border:1px solid #000;box-sizing:content-box;height:4px;width:100%}.tox .tox-rgb-form{display:flex;flex-direction:column;justify-content:space-between}.tox .tox-rgb-form div{align-items:center;display:flex;justify-content:space-between;margin-bottom:5px;width:inherit}.tox .tox-rgb-form input{width:6em}.tox .tox-rgb-form input.tox-invalid{border:1px solid red!important}.tox .tox-rgb-form .tox-rgba-preview{border:1px solid #000;flex-grow:2;margin-bottom:0}.tox:not([dir=rtl]) .tox-sv-palette{margin-right:15px}.tox:not([dir=rtl]) .tox-hue-slider{margin-right:15px}.tox:not([dir=rtl]) .tox-hue-slider-thumb{margin-left:-1px}.tox:not([dir=rtl]) .tox-rgb-form label{margin-right:.5em}.tox[dir=rtl] .tox-sv-palette{margin-left:15px}.tox[dir=rtl] .tox-hue-slider{margin-left:15px}.tox[dir=rtl] .tox-hue-slider-thumb{margin-right:-1px}.tox[dir=rtl] .tox-rgb-form label{margin-left:.5em}.tox .tox-toolbar .tox-swatches,.tox .tox-toolbar__overflow .tox-swatches,.tox .tox-toolbar__primary .tox-swatches{margin:2px 0 3px 4px}.tox .tox-collection--list .tox-collection__group .tox-swatches-menu{border:0;margin:-4px 0}.tox .tox-swatches__row{display:flex}.tox .tox-swatch{height:30px;transition:transform .15s,box-shadow .15s;width:30px}.tox .tox-swatch:focus,.tox .tox-swatch:hover{box-shadow:0 0 0 1px rgba(127,127,127,.3) inset;transform:scale(.8)}.tox .tox-swatch--remove{align-items:center;display:flex;justify-content:center}.tox .tox-swatch--remove svg path{stroke:#e74c3c}.tox .tox-swatches__picker-btn{align-items:center;background-color:transparent;border:0;cursor:pointer;display:flex;height:30px;justify-content:center;outline:0;padding:0;width:30px}.tox .tox-swatches__picker-btn svg{height:24px;width:24px}.tox .tox-swatches__picker-btn:hover{background:#dee0e2}.tox:not([dir=rtl]) .tox-swatches__picker-btn{margin-left:auto}.tox[dir=rtl] .tox-swatches__picker-btn{margin-right:auto}.tox .tox-comment-thread{background:#fff;position:relative}.tox .tox-comment-thread>:not(:first-child){margin-top:8px}.tox .tox-comment{background:#fff;border:1px solid #ccc;border-radius:3px;box-shadow:0 4px 8px 0 rgba(34,47,62,.1);padding:8px 8px 16px 8px;position:relative}.tox .tox-comment__header{align-items:center;color:#222f3e;display:flex;justify-content:space-between}.tox .tox-comment__date{color:rgba(34,47,62,.7);font-size:12px}.tox .tox-comment__body{color:#222f3e;font-size:14px;font-style:normal;font-weight:400;line-height:1.3;margin-top:8px;position:relative;text-transform:initial}.tox .tox-comment__body textarea{resize:none;white-space:normal;width:100%}.tox .tox-comment__expander{padding-top:8px}.tox .tox-comment__expander p{color:rgba(34,47,62,.7);font-size:14px;font-style:normal}.tox .tox-comment__body p{margin:0}.tox .tox-comment__buttonspacing{padding-top:16px;text-align:center}.tox .tox-comment-thread__overlay::after{background:#fff;bottom:0;content:"";display:flex;left:0;opacity:.9;position:absolute;right:0;top:0;z-index:5}.tox .tox-comment__reply{display:flex;flex-shrink:0;flex-wrap:wrap;justify-content:flex-end;margin-top:8px}.tox .tox-comment__reply>:first-child{margin-bottom:8px;width:100%}.tox .tox-comment__edit{display:flex;flex-wrap:wrap;justify-content:flex-end;margin-top:16px}.tox .tox-comment__gradient::after{background:linear-gradient(rgba(255,255,255,0),#fff);bottom:0;content:"";display:block;height:5em;margin-top:-40px;position:absolute;width:100%}.tox .tox-comment__overlay{background:#fff;bottom:0;display:flex;flex-direction:column;flex-grow:1;left:0;opacity:.9;position:absolute;right:0;text-align:center;top:0;z-index:5}.tox .tox-comment__loading-text{align-items:center;color:#222f3e;display:flex;flex-direction:column;position:relative}.tox .tox-comment__loading-text>div{padding-bottom:16px}.tox .tox-comment__overlaytext{bottom:0;flex-direction:column;font-size:14px;left:0;padding:1em;position:absolute;right:0;top:0;z-index:10}.tox .tox-comment__overlaytext p{background-color:#fff;box-shadow:0 0 8px 8px #fff;color:#222f3e;text-align:center}.tox .tox-comment__overlaytext div:nth-of-type(2){font-size:.8em}.tox .tox-comment__busy-spinner{align-items:center;background-color:#fff;bottom:0;display:flex;justify-content:center;left:0;position:absolute;right:0;top:0;z-index:20}.tox .tox-comment__scroll{display:flex;flex-direction:column;flex-shrink:1;overflow:auto}.tox .tox-conversations{margin:8px}.tox:not([dir=rtl]) .tox-comment__edit{margin-left:8px}.tox:not([dir=rtl]) .tox-comment__buttonspacing>:last-child,.tox:not([dir=rtl]) .tox-comment__edit>:last-child,.tox:not([dir=rtl]) .tox-comment__reply>:last-child{margin-left:8px}.tox[dir=rtl] .tox-comment__edit{margin-right:8px}.tox[dir=rtl] .tox-comment__buttonspacing>:last-child,.tox[dir=rtl] .tox-comment__edit>:last-child,.tox[dir=rtl] .tox-comment__reply>:last-child{margin-right:8px}.tox .tox-user{align-items:center;display:flex}.tox .tox-user__avatar svg{fill:rgba(34,47,62,.7)}.tox .tox-user__name{color:rgba(34,47,62,.7);font-size:12px;font-style:normal;font-weight:700;text-transform:uppercase}.tox:not([dir=rtl]) .tox-user__avatar svg{margin-right:8px}.tox:not([dir=rtl]) .tox-user__avatar+.tox-user__name{margin-left:8px}.tox[dir=rtl] .tox-user__avatar svg{margin-left:8px}.tox[dir=rtl] .tox-user__avatar+.tox-user__name{margin-right:8px}.tox .tox-dialog-wrap{align-items:center;bottom:0;display:flex;justify-content:center;left:0;position:fixed;right:0;top:0;z-index:1100}.tox .tox-dialog-wrap__backdrop{background-color:rgba(255,255,255,.75);bottom:0;left:0;position:absolute;right:0;top:0;z-index:1}.tox .tox-dialog-wrap__backdrop--opaque{background-color:#fff}.tox .tox-dialog{background-color:#fff;border-color:#ccc;border-radius:3px;border-style:solid;border-width:1px;box-shadow:0 16px 16px -10px rgba(34,47,62,.15),0 0 40px 1px rgba(34,47,62,.15);display:flex;flex-direction:column;max-height:100%;max-width:480px;overflow:hidden;position:relative;width:95vw;z-index:2}@media only screen and (max-width:767px){body:not(.tox-force-desktop) .tox .tox-dialog{align-self:flex-start;margin:8px auto;width:calc(100vw - 16px)}}.tox .tox-dialog-inline{z-index:1100}.tox .tox-dialog__header{align-items:center;background-color:#fff;border-bottom:none;color:#222f3e;display:flex;font-size:16px;justify-content:space-between;padding:8px 16px 0 16px;position:relative}.tox .tox-dialog__header .tox-button{z-index:1}.tox .tox-dialog__draghandle{cursor:grab;height:100%;left:0;position:absolute;top:0;width:100%}.tox .tox-dialog__draghandle:active{cursor:grabbing}.tox .tox-dialog__dismiss{margin-left:auto}.tox .tox-dialog__title{font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;font-size:20px;font-style:normal;font-weight:400;line-height:1.3;margin:0;text-transform:normal}.tox .tox-dialog__body{color:#222f3e;display:flex;flex:1;-ms-flex-preferred-size:auto;font-size:16px;font-style:normal;font-weight:400;line-height:1.3;min-width:0;text-align:left;text-transform:normal}@media only screen and (max-width:767px){body:not(.tox-force-desktop) .tox .tox-dialog__body{flex-direction:column}}.tox .tox-dialog__body-nav{align-items:flex-start;display:flex;flex-direction:column;padding:16px 16px}@media only screen and (max-width:767px){body:not(.tox-force-desktop) .tox .tox-dialog__body-nav{flex-direction:row;-webkit-overflow-scrolling:touch;overflow-x:auto;padding-bottom:0}}.tox .tox-dialog__body-nav-item{border-bottom:2px solid transparent;color:rgba(34,47,62,.7);display:inline-block;font-size:14px;line-height:1.3;margin-bottom:8px;text-decoration:none;white-space:nowrap}.tox .tox-dialog__body-nav-item:focus{background-color:rgba(32,122,183,.1)}.tox .tox-dialog__body-nav-item--active{border-bottom:2px solid #207ab7;color:#207ab7}.tox .tox-dialog__body-content{box-sizing:border-box;display:flex;flex:1;flex-direction:column;-ms-flex-preferred-size:auto;max-height:650px;overflow:auto;-webkit-overflow-scrolling:touch;padding:16px 16px}.tox .tox-dialog__body-content>*{margin-bottom:0;margin-top:16px}.tox .tox-dialog__body-content>:first-child{margin-top:0}.tox .tox-dialog__body-content>:last-child{margin-bottom:0}.tox .tox-dialog__body-content>:only-child{margin-bottom:0;margin-top:0}.tox .tox-dialog__body-content a{color:#207ab7;cursor:pointer;text-decoration:none}.tox .tox-dialog__body-content a:focus,.tox .tox-dialog__body-content a:hover{color:#185d8c;text-decoration:none}.tox .tox-dialog__body-content a:active{color:#185d8c;text-decoration:none}.tox .tox-dialog__body-content ul{display:block;list-style-type:disc;margin-bottom:16px;-webkit-margin-end:0;margin-inline-end:0;-webkit-margin-start:0;margin-inline-start:0;-webkit-padding-start:2.5rem;padding-inline-start:2.5rem}.tox .tox-dialog__body-content .tox-form__group h1{font-size:20px;font-weight:700;margin-bottom:16px;margin-top:2rem}.tox .tox-dialog__body-content .tox-form__group h2{font-size:16px;font-weight:700;margin-bottom:16px;margin-top:2rem}.tox .tox-dialog__body-content .tox-form__group p{margin-bottom:16px}.tox .tox-dialog__body-content .tox-form__group h1:first-child,.tox .tox-dialog__body-content .tox-form__group h2:first-child,.tox .tox-dialog__body-content .tox-form__group p:first-child{margin-top:0}.tox .tox-dialog__body-content .tox-form__group h1:last-child,.tox .tox-dialog__body-content .tox-form__group h2:last-child,.tox .tox-dialog__body-content .tox-form__group p:last-child{margin-bottom:0}.tox .tox-dialog__body-content .tox-form__group h1:only-child,.tox .tox-dialog__body-content .tox-form__group h2:only-child,.tox .tox-dialog__body-content .tox-form__group p:only-child{margin-bottom:0;margin-top:0}.tox .tox-dialog--width-lg{height:650px;max-width:1200px}.tox .tox-dialog--width-md{max-width:800px}.tox .tox-dialog--width-md .tox-dialog__body-content{overflow:auto}.tox .tox-dialog__body-content--centered{text-align:center}.tox .tox-dialog__footer{align-items:center;background-color:#fff;border-top:1px solid #ccc;display:flex;justify-content:space-between;padding:8px 16px}.tox .tox-dialog__footer-end,.tox .tox-dialog__footer-start{display:flex}.tox .tox-dialog__busy-spinner{align-items:center;background-color:rgba(255,255,255,.75);bottom:0;display:flex;justify-content:center;left:0;position:absolute;right:0;top:0;z-index:3}.tox .tox-dialog__table{border-collapse:collapse;width:100%}.tox .tox-dialog__table thead th{font-weight:700;padding-bottom:8px}.tox .tox-dialog__table tbody tr{border-bottom:1px solid #ccc}.tox .tox-dialog__table tbody tr:last-child{border-bottom:none}.tox .tox-dialog__table td{padding-bottom:8px;padding-top:8px}.tox .tox-dialog__popups{position:absolute;width:100%;z-index:1100}.tox .tox-dialog__body-iframe{display:flex;flex:1;flex-direction:column;-ms-flex-preferred-size:auto}.tox .tox-dialog__body-iframe .tox-navobj{display:flex;flex:1;-ms-flex-preferred-size:auto}.tox .tox-dialog__body-iframe .tox-navobj :nth-child(2){flex:1;-ms-flex-preferred-size:auto;height:100%}.tox .tox-dialog-dock-fadeout{opacity:0;visibility:hidden}.tox .tox-dialog-dock-fadein{opacity:1;visibility:visible}.tox .tox-dialog-dock-transition{transition:visibility 0s linear .3s,opacity .3s ease}.tox .tox-dialog-dock-transition.tox-dialog-dock-fadein{transition-delay:0s}body.tox-dialog__disable-scroll{overflow:hidden}.tox.tox-platform-ie .tox-dialog-wrap{position:-ms-device-fixed}@media only screen and (max-width:767px){body:not(.tox-force-desktop) .tox:not([dir=rtl]) .tox-dialog__body-nav{margin-right:0}}@media only screen and (max-width:767px){body:not(.tox-force-desktop) .tox:not([dir=rtl]) .tox-dialog__body-nav-item:not(:first-child){margin-left:8px}}.tox:not([dir=rtl]) .tox-dialog__footer .tox-dialog__footer-end>*,.tox:not([dir=rtl]) .tox-dialog__footer .tox-dialog__footer-start>*{margin-left:8px}.tox[dir=rtl] .tox-dialog__body{text-align:right}@media only screen and (max-width:767px){body:not(.tox-force-desktop) .tox[dir=rtl] .tox-dialog__body-nav{margin-left:0}}@media only screen and (max-width:767px){body:not(.tox-force-desktop) .tox[dir=rtl] .tox-dialog__body-nav-item:not(:first-child){margin-right:8px}}.tox[dir=rtl] .tox-dialog__footer .tox-dialog__footer-end>*,.tox[dir=rtl] .tox-dialog__footer .tox-dialog__footer-start>*{margin-right:8px}.tox .tox-dropzone-container{display:flex;flex:1;-ms-flex-preferred-size:auto}.tox .tox-dropzone{align-items:center;background:#fff;border:2px dashed #ccc;box-sizing:border-box;display:flex;flex-direction:column;flex-grow:1;justify-content:center;min-height:100px;padding:10px}.tox .tox-dropzone p{color:rgba(34,47,62,.7);margin:0 0 16px 0}.tox .tox-edit-area{display:flex;flex:1;-ms-flex-preferred-size:auto;overflow:hidden;position:relative}.tox .tox-edit-area__iframe{background-color:#fff;border:0;box-sizing:border-box;flex:1;-ms-flex-preferred-size:auto;height:100%;position:absolute;width:100%}.tox.tox-inline-edit-area{border:1px dotted #ccc}.tox .tox-editor-container{display:flex;flex:1 1 auto;flex-direction:column;overflow:hidden}.tox .tox-editor-header{z-index:1}.tox-editor-dock-fadeout{opacity:0;visibility:hidden}.tox-editor-dock-fadein{opacity:1;visibility:visible}.tox-editor-dock-transition{transition:visibility 0s linear .25s,opacity .25s ease}.tox-editor-dock-transition.tox-editor-dock-fadein{transition-delay:0s}.tox .tox-control-wrap{flex:1;position:relative}.tox .tox-control-wrap:not(.tox-control-wrap--status-invalid) .tox-control-wrap__status-icon-invalid,.tox .tox-control-wrap:not(.tox-control-wrap--status-unknown) .tox-control-wrap__status-icon-unknown,.tox .tox-control-wrap:not(.tox-control-wrap--status-valid) .tox-control-wrap__status-icon-valid{display:none}.tox .tox-control-wrap svg{display:block}.tox .tox-control-wrap__status-icon-wrap{position:absolute;top:50%;transform:translateY(-50%)}.tox .tox-control-wrap__status-icon-invalid svg{fill:#c00}.tox .tox-control-wrap__status-icon-unknown svg{fill:orange}.tox .tox-control-wrap__status-icon-valid svg{fill:green}.tox:not([dir=rtl]) .tox-control-wrap--status-invalid .tox-textfield,.tox:not([dir=rtl]) .tox-control-wrap--status-unknown .tox-textfield,.tox:not([dir=rtl]) .tox-control-wrap--status-valid .tox-textfield{padding-right:32px}.tox:not([dir=rtl]) .tox-control-wrap__status-icon-wrap{right:4px}.tox[dir=rtl] .tox-control-wrap--status-invalid .tox-textfield,.tox[dir=rtl] .tox-control-wrap--status-unknown .tox-textfield,.tox[dir=rtl] .tox-control-wrap--status-valid .tox-textfield{padding-left:32px}.tox[dir=rtl] .tox-control-wrap__status-icon-wrap{left:4px}.tox .tox-autocompleter{max-width:25em}.tox .tox-autocompleter .tox-menu{max-width:25em}.tox .tox-autocompleter .tox-autocompleter-highlight{font-weight:700}.tox .tox-color-input{display:flex}.tox .tox-color-input .tox-textfield{border-radius:3px 0 0 3px;display:flex}.tox .tox-color-input span{border-color:rgba(34,47,62,.2);border-radius:0 3px 3px 0;border-style:solid;border-width:1px 1px 1px 0;box-shadow:none;box-sizing:border-box;cursor:pointer;display:flex;width:35px}.tox .tox-color-input span:focus{border-color:#207ab7}.tox[dir=rtl] .tox-color-input .tox-textfield{border-radius:0 3px 3px 0}.tox[dir=rtl] .tox-color-input span{border-radius:3px 0 0 3px;border-width:1px 0 1px 1px}.tox .tox-label,.tox .tox-toolbar-label{color:rgba(34,47,62,.7);display:block;font-size:14px;font-style:normal;font-weight:400;line-height:1.3;padding:0 8px 0 0;text-transform:normal;white-space:nowrap}.tox .tox-toolbar-label{padding:0 8px}.tox[dir=rtl] .tox-label{padding:0 0 0 8px}.tox .tox-form{display:flex;flex:1;flex-direction:column;-ms-flex-preferred-size:auto}.tox .tox-form__group{box-sizing:border-box;margin-bottom:4px}.tox .tox-form-group--maximize{flex:1}.tox .tox-form__group--error{color:#c00}.tox .tox-form__group--collection{display:flex}.tox .tox-form__grid{display:flex;flex-direction:row;flex-wrap:wrap;justify-content:space-between}.tox .tox-form__grid--2col>.tox-form__group{width:calc(50% - (8px / 2))}.tox .tox-form__grid--3col>.tox-form__group{width:calc(100% / 3 - (8px / 2))}.tox .tox-form__grid--4col>.tox-form__group{width:calc(25% - (8px / 2))}.tox .tox-form__controls-h-stack{align-items:center;display:flex}.tox .tox-form__group--inline{align-items:center;display:flex}.tox .tox-form__group--stretched{display:flex;flex:1;flex-direction:column;-ms-flex-preferred-size:auto}.tox .tox-form__group--stretched .tox-textarea{flex:1;-ms-flex-preferred-size:auto}.tox .tox-form__group--stretched .tox-navobj{display:flex;flex:1;-ms-flex-preferred-size:auto}.tox .tox-form__group--stretched .tox-navobj :nth-child(2){flex:1;-ms-flex-preferred-size:auto;height:100%}.tox:not([dir=rtl]) .tox-form__controls-h-stack>:not(:first-child){margin-left:4px}.tox[dir=rtl] .tox-form__controls-h-stack>:not(:first-child){margin-right:4px}.tox .tox-lock.tox-locked .tox-lock-icon__unlock,.tox .tox-lock:not(.tox-locked) .tox-lock-icon__lock{display:none}.tox .tox-selectfield select,.tox .tox-textarea,.tox .tox-textfield,.tox .tox-toolbar-textfield{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:#fff;border-color:#ccc;border-radius:3px;border-style:solid;border-width:1px;box-shadow:none;box-sizing:border-box;color:#222f3e;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;font-size:16px;line-height:24px;margin:0;outline:0;padding:5px 4.75px;resize:none;width:100%}.tox .tox-textarea[disabled],.tox .tox-textfield[disabled]{background-color:#f2f2f2;color:rgba(34,47,62,.85);cursor:not-allowed}.tox .tox-selectfield select:focus,.tox .tox-textarea:focus,.tox .tox-textfield:focus{border-color:#207ab7;box-shadow:none;outline:0}.tox .tox-toolbar-textfield{border-width:0;margin-bottom:3px;margin-top:2px;max-width:250px}.tox .tox-naked-btn{background-color:transparent;border:0;border-color:transparent;box-shadow:unset;color:#207ab7;cursor:pointer;display:block;margin:0;padding:0}.tox .tox-naked-btn svg{display:block;fill:#222f3e}.tox:not([dir=rtl]) .tox-toolbar-textfield+*{margin-left:4px}.tox[dir=rtl] .tox-toolbar-textfield+*{margin-right:4px}.tox .tox-selectfield{cursor:pointer;position:relative}.tox .tox-selectfield select[disabled]{background-color:#f2f2f2;color:rgba(34,47,62,.85);cursor:not-allowed}.tox .tox-selectfield select::-ms-expand{display:none}.tox .tox-selectfield svg{pointer-events:none;position:absolute;top:50%;transform:translateY(-50%)}.tox:not([dir=rtl]) .tox-selectfield select[size="0"],.tox:not([dir=rtl]) .tox-selectfield select[size="1"]{padding-right:24px}.tox:not([dir=rtl]) .tox-selectfield svg{right:8px}.tox[dir=rtl] .tox-selectfield select[size="0"],.tox[dir=rtl] .tox-selectfield select[size="1"]{padding-left:24px}.tox[dir=rtl] .tox-selectfield svg{left:8px}.tox .tox-textarea{-webkit-appearance:textarea;-moz-appearance:textarea;appearance:textarea;white-space:pre-wrap}.tox-fullscreen{border:0;height:100%;left:0;margin:0;overflow:hidden;-ms-scroll-chaining:none;overscroll-behavior:none;padding:0;position:fixed;top:0;touch-action:pinch-zoom;width:100%}.tox-fullscreen .tox.tox-tinymce.tox-fullscreen .tox-statusbar__resize-handle{display:none}.tox-fullscreen .tox.tox-tinymce.tox-fullscreen{z-index:1200}.tox-fullscreen .tox.tox-tinymce-aux{z-index:1201}.tox .tox-image-tools{width:100%}.tox .tox-image-tools__toolbar{align-items:center;display:flex;justify-content:center}.tox .tox-image-tools__image{background-color:#666;height:380px;overflow:auto;position:relative;width:100%}.tox .tox-image-tools__image,.tox .tox-image-tools__image+.tox-image-tools__toolbar{margin-top:8px}.tox .tox-image-tools__image-bg{background:url(data:image/gif;base64,R0lGODdhDAAMAIABAMzMzP///ywAAAAADAAMAAACFoQfqYeabNyDMkBQb81Uat85nxguUAEAOw==)}.tox .tox-image-tools__toolbar>.tox-spacer{flex:1;-ms-flex-preferred-size:auto}.tox .tox-croprect-block{background:#000;opacity:.5;position:absolute;zoom:1}.tox .tox-croprect-handle{border:2px solid #fff;height:20px;left:0;position:absolute;top:0;width:20px}.tox .tox-croprect-handle-move{border:0;cursor:move;position:absolute}.tox .tox-croprect-handle-nw{border-width:2px 0 0 2px;cursor:nw-resize;left:100px;margin:-2px 0 0 -2px;top:100px}.tox .tox-croprect-handle-ne{border-width:2px 2px 0 0;cursor:ne-resize;left:200px;margin:-2px 0 0 -20px;top:100px}.tox .tox-croprect-handle-sw{border-width:0 0 2px 2px;cursor:sw-resize;left:100px;margin:-20px 2px 0 -2px;top:200px}.tox .tox-croprect-handle-se{border-width:0 2px 2px 0;cursor:se-resize;left:200px;margin:-20px 0 0 -20px;top:200px}.tox:not([dir=rtl]) .tox-image-tools__toolbar>.tox-slider:not(:first-of-type){margin-left:8px}.tox:not([dir=rtl]) .tox-image-tools__toolbar>.tox-button+.tox-slider{margin-left:32px}.tox:not([dir=rtl]) .tox-image-tools__toolbar>.tox-slider+.tox-button{margin-left:32px}.tox[dir=rtl] .tox-image-tools__toolbar>.tox-slider:not(:first-of-type){margin-right:8px}.tox[dir=rtl] .tox-image-tools__toolbar>.tox-button+.tox-slider{margin-right:32px}.tox[dir=rtl] .tox-image-tools__toolbar>.tox-slider+.tox-button{margin-right:32px}.tox .tox-insert-table-picker{display:flex;flex-wrap:wrap;width:169px}.tox .tox-insert-table-picker>div{border-color:#ccc;border-style:solid;border-width:0 1px 1px 0;box-sizing:content-box;height:16px;width:16px}.tox .tox-collection--list .tox-collection__group .tox-insert-table-picker{margin:-4px 0}.tox .tox-insert-table-picker .tox-insert-table-picker__selected{background-color:rgba(32,122,183,.5);border-color:rgba(32,122,183,.5)}.tox .tox-insert-table-picker__label{color:rgba(34,47,62,.7);display:block;font-size:14px;padding:4px;text-align:center;width:100%}.tox:not([dir=rtl]) .tox-insert-table-picker>div:nth-child(10n){border-right:0}.tox[dir=rtl] .tox-insert-table-picker>div:nth-child(10n+1){border-right:0}.tox .tox-menu{background-color:#fff;border:1px solid #ccc;border-radius:3px;box-shadow:0 4px 8px 0 rgba(34,47,62,.1);display:inline-block;overflow:hidden;vertical-align:top;z-index:1150}.tox .tox-menu.tox-collection.tox-collection--list{padding:0}.tox .tox-menu.tox-collection.tox-collection--toolbar{padding:4px}.tox .tox-menu.tox-collection.tox-collection--grid{padding:4px}.tox .tox-menu__label blockquote,.tox .tox-menu__label code,.tox .tox-menu__label h1,.tox .tox-menu__label h2,.tox .tox-menu__label h3,.tox .tox-menu__label h4,.tox .tox-menu__label h5,.tox .tox-menu__label h6,.tox .tox-menu__label p{margin:0}.tox .tox-menubar{background:url("data:image/svg+xml;charset=utf8,%3Csvg height='39px' viewBox='0 0 40 39px' width='40' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='38px' width='100' height='1' fill='%23cccccc'/%3E%3C/svg%3E") left 0 top 0 #fff;background-color:#fff;display:flex;flex:0 0 auto;flex-shrink:0;flex-wrap:wrap;padding:0 4px 0 4px}.tox .tox-mbtn{align-items:center;background:0 0;border:0;border-radius:3px;box-shadow:none;color:#222f3e;display:flex;flex:0 0 auto;font-size:14px;font-style:normal;font-weight:400;height:34px;justify-content:center;margin:2px 0 3px 0;outline:0;overflow:hidden;padding:0 4px;text-transform:normal;width:auto}.tox .tox-mbtn[disabled]{background-color:none;border:0;box-shadow:none;color:rgba(34,47,62,.5);cursor:not-allowed}.tox .tox-mbtn:focus:not(:disabled){background:#dee0e2;border:0;box-shadow:none;color:#222f3e}.tox .tox-mbtn--active{background:#c8cbcf;border:0;box-shadow:none;color:#222f3e}.tox .tox-mbtn:hover:not(:disabled):not(.tox-mbtn--active){background:#dee0e2;border:0;box-shadow:none;color:#222f3e}.tox .tox-mbtn__select-label{cursor:default;font-weight:400;margin:0 4px}.tox .tox-mbtn[disabled] .tox-mbtn__select-label{cursor:not-allowed}.tox .tox-mbtn__select-chevron{align-items:center;display:flex;justify-content:center;width:16px;display:none}.tox .tox-notification{border-radius:3px;border-style:solid;border-width:1px;box-shadow:none;box-sizing:border-box;display:-ms-grid;display:grid;font-size:14px;font-weight:400;-ms-grid-columns:minmax(40px,1fr) auto minmax(40px,1fr);grid-template-columns:minmax(40px,1fr) auto minmax(40px,1fr);margin-top:4px;opacity:0;padding:4px;transition:transform .1s ease-in,opacity 150ms ease-in}.tox .tox-notification p{font-size:14px;font-weight:400}.tox .tox-notification a{text-decoration:underline}.tox .tox-notification--in{opacity:1}.tox .tox-notification--success{background-color:#e4eeda;border-color:#d7e6c8;color:#222f3e}.tox .tox-notification--success p{color:#222f3e}.tox .tox-notification--success a{color:#547831}.tox .tox-notification--success svg{fill:#222f3e}.tox .tox-notification--error{background-color:#f8dede;border-color:#f2bfbf;color:#222f3e}.tox .tox-notification--error p{color:#222f3e}.tox .tox-notification--error a{color:#c00}.tox .tox-notification--error svg{fill:#222f3e}.tox .tox-notification--warn,.tox .tox-notification--warning{background-color:#fffaea;border-color:#ffe89d;color:#222f3e}.tox .tox-notification--warn p,.tox .tox-notification--warning p{color:#222f3e}.tox .tox-notification--warn a,.tox .tox-notification--warning a{color:#222f3e}.tox .tox-notification--warn svg,.tox .tox-notification--warning svg{fill:#222f3e}.tox .tox-notification--info{background-color:#d9edf7;border-color:#779ecb;color:#222f3e}.tox .tox-notification--info p{color:#222f3e}.tox .tox-notification--info a{color:#222f3e}.tox .tox-notification--info svg{fill:#222f3e}.tox .tox-notification__body{-ms-grid-row-align:center;align-self:center;color:#222f3e;font-size:14px;-ms-grid-column-span:1;grid-column-end:3;-ms-grid-column:2;grid-column-start:2;-ms-grid-row-span:1;grid-row-end:2;-ms-grid-row:1;grid-row-start:1;text-align:center;white-space:normal;word-break:break-all;word-break:break-word}.tox .tox-notification__body>*{margin:0}.tox .tox-notification__body>*+*{margin-top:1rem}.tox .tox-notification__icon{-ms-grid-row-align:center;align-self:center;-ms-grid-column-span:1;grid-column-end:2;-ms-grid-column:1;grid-column-start:1;-ms-grid-row-span:1;grid-row-end:2;-ms-grid-row:1;grid-row-start:1;-ms-grid-column-align:end;justify-self:end}.tox .tox-notification__icon svg{display:block}.tox .tox-notification__dismiss{-ms-grid-row-align:start;align-self:start;-ms-grid-column-span:1;grid-column-end:4;-ms-grid-column:3;grid-column-start:3;-ms-grid-row-span:1;grid-row-end:2;-ms-grid-row:1;grid-row-start:1;-ms-grid-column-align:end;justify-self:end}.tox .tox-notification .tox-progress-bar{-ms-grid-column-span:3;grid-column-end:4;-ms-grid-column:1;grid-column-start:1;-ms-grid-row-span:1;grid-row-end:3;-ms-grid-row:2;grid-row-start:2;-ms-grid-column-align:center;justify-self:center}.tox .tox-pop{display:inline-block;position:relative}.tox .tox-pop--resizing{transition:width .1s ease}.tox .tox-pop--resizing .tox-toolbar{flex-wrap:nowrap}.tox .tox-pop__dialog{background-color:#fff;border:1px solid #ccc;border-radius:3px;box-shadow:0 1px 3px rgba(0,0,0,.15);min-width:0;overflow:hidden}.tox .tox-pop__dialog>:not(.tox-toolbar){margin:4px 4px 4px 8px}.tox .tox-pop__dialog .tox-toolbar{background-color:transparent;margin-bottom:-1px}.tox .tox-pop::after,.tox .tox-pop::before{border-style:solid;content:'';display:block;height:0;position:absolute;width:0}.tox .tox-pop.tox-pop--bottom::after,.tox .tox-pop.tox-pop--bottom::before{left:50%;top:100%}.tox .tox-pop.tox-pop--bottom::after{border-color:#fff transparent transparent transparent;border-width:8px;margin-left:-8px;margin-top:-1px}.tox .tox-pop.tox-pop--bottom::before{border-color:#ccc transparent transparent transparent;border-width:9px;margin-left:-9px}.tox .tox-pop.tox-pop--top::after,.tox .tox-pop.tox-pop--top::before{left:50%;top:0;transform:translateY(-100%)}.tox .tox-pop.tox-pop--top::after{border-color:transparent transparent #fff transparent;border-width:8px;margin-left:-8px;margin-top:1px}.tox .tox-pop.tox-pop--top::before{border-color:transparent transparent #ccc transparent;border-width:9px;margin-left:-9px}.tox .tox-pop.tox-pop--left::after,.tox .tox-pop.tox-pop--left::before{left:0;top:calc(50% - 1px);transform:translateY(-50%)}.tox .tox-pop.tox-pop--left::after{border-color:transparent #fff transparent transparent;border-width:8px;margin-left:-15px}.tox .tox-pop.tox-pop--left::before{border-color:transparent #ccc transparent transparent;border-width:10px;margin-left:-19px}.tox .tox-pop.tox-pop--right::after,.tox .tox-pop.tox-pop--right::before{left:100%;top:calc(50% + 1px);transform:translateY(-50%)}.tox .tox-pop.tox-pop--right::after{border-color:transparent transparent transparent #fff;border-width:8px;margin-left:-1px}.tox .tox-pop.tox-pop--right::before{border-color:transparent transparent transparent #ccc;border-width:10px;margin-left:-1px}.tox .tox-pop.tox-pop--align-left::after,.tox .tox-pop.tox-pop--align-left::before{left:20px}.tox .tox-pop.tox-pop--align-right::after,.tox .tox-pop.tox-pop--align-right::before{left:calc(100% - 20px)}.tox .tox-sidebar-wrap{display:flex;flex-direction:row;flex-grow:1;-ms-flex-preferred-size:0;min-height:0}.tox .tox-sidebar{background-color:#fff;display:flex;flex-direction:row;justify-content:flex-end}.tox .tox-sidebar__slider{display:flex;overflow:hidden}.tox .tox-sidebar__pane-container{display:flex}.tox .tox-sidebar__pane{display:flex}.tox .tox-sidebar--sliding-closed{opacity:0}.tox .tox-sidebar--sliding-open{opacity:1}.tox .tox-sidebar--sliding-growing,.tox .tox-sidebar--sliding-shrinking{transition:width .5s ease,opacity .5s ease}.tox .tox-selector{background-color:#4099ff;border-color:#4099ff;border-style:solid;border-width:1px;box-sizing:border-box;display:inline-block;height:10px;position:absolute;width:10px}.tox.tox-platform-touch .tox-selector{height:12px;width:12px}.tox .tox-slider{align-items:center;display:flex;flex:1;-ms-flex-preferred-size:auto;height:24px;justify-content:center;position:relative}.tox .tox-slider__rail{background-color:transparent;border:1px solid #ccc;border-radius:3px;height:10px;min-width:120px;width:100%}.tox .tox-slider__handle{background-color:#207ab7;border:2px solid #185d8c;border-radius:3px;box-shadow:none;height:24px;left:50%;position:absolute;top:50%;transform:translateX(-50%) translateY(-50%);width:14px}.tox .tox-source-code{overflow:auto}.tox .tox-spinner{display:flex}.tox .tox-spinner>div{animation:tam-bouncing-dots 1.5s ease-in-out 0s infinite both;background-color:rgba(34,47,62,.7);border-radius:100%;height:8px;width:8px}.tox .tox-spinner>div:nth-child(1){animation-delay:-.32s}.tox .tox-spinner>div:nth-child(2){animation-delay:-.16s}@keyframes tam-bouncing-dots{0%,100%,80%{transform:scale(0)}40%{transform:scale(1)}}.tox:not([dir=rtl]) .tox-spinner>div:not(:first-child){margin-left:4px}.tox[dir=rtl] .tox-spinner>div:not(:first-child){margin-right:4px}.tox .tox-statusbar{align-items:center;background-color:#fff;border-top:1px solid #ccc;color:rgba(34,47,62,.7);display:flex;flex:0 0 auto;font-size:12px;font-weight:400;height:18px;overflow:hidden;padding:0 8px;position:relative;text-transform:uppercase}.tox .tox-statusbar__text-container{display:flex;flex:1 1 auto;justify-content:flex-end;overflow:hidden}.tox .tox-statusbar__path{display:flex;flex:1 1 auto;margin-right:auto;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.tox .tox-statusbar__path>*{display:inline;white-space:nowrap}.tox .tox-statusbar__wordcount{flex:0 0 auto;margin-left:1ch}.tox .tox-statusbar a,.tox .tox-statusbar__path-item,.tox .tox-statusbar__wordcount{color:rgba(34,47,62,.7);text-decoration:none}.tox .tox-statusbar a:focus,.tox .tox-statusbar a:hover,.tox .tox-statusbar__path-item:focus,.tox .tox-statusbar__path-item:hover,.tox .tox-statusbar__wordcount:focus,.tox .tox-statusbar__wordcount:hover{cursor:pointer;text-decoration:underline}.tox .tox-statusbar__resize-handle{align-items:flex-end;align-self:stretch;cursor:nwse-resize;display:flex;flex:0 0 auto;justify-content:flex-end;margin-left:auto;margin-right:-8px;padding-left:1ch}.tox .tox-statusbar__resize-handle svg{display:block;fill:rgba(34,47,62,.7)}.tox:not([dir=rtl]) .tox-statusbar__path>*{margin-right:4px}.tox:not([dir=rtl]) .tox-statusbar__branding{margin-left:1ch}.tox[dir=rtl] .tox-statusbar{flex-direction:row-reverse}.tox[dir=rtl] .tox-statusbar__path>*{margin-left:4px}.tox .tox-throbber{z-index:1400}.tox .tox-throbber__busy-spinner{align-items:center;background-color:rgba(255,255,255,.6);bottom:0;display:flex;justify-content:center;left:0;position:absolute;right:0;top:0}.tox .tox-tbtn{align-items:center;background:0 0;border:0;border-radius:3px;box-shadow:none;color:#222f3e;display:flex;flex:0 0 auto;font-size:14px;font-style:normal;font-weight:400;height:34px;justify-content:center;margin:2px 0 3px 0;outline:0;overflow:hidden;padding:0;text-transform:normal;width:34px}.tox .tox-tbtn svg{display:block;fill:#222f3e}.tox .tox-tbtn.tox-tbtn-more{padding-left:5px;padding-right:5px;width:inherit}.tox .tox-tbtn:focus{background:#dee0e2;border:0;box-shadow:none}.tox .tox-tbtn:hover{background:#dee0e2;border:0;box-shadow:none;color:#222f3e}.tox .tox-tbtn:hover svg{fill:#222f3e}.tox .tox-tbtn:active{background:#c8cbcf;border:0;box-shadow:none;color:#222f3e}.tox .tox-tbtn:active svg{fill:#222f3e}.tox .tox-tbtn--disabled,.tox .tox-tbtn--disabled:hover,.tox .tox-tbtn:disabled,.tox .tox-tbtn:disabled:hover{background:0 0;border:0;box-shadow:none;color:rgba(34,47,62,.5);cursor:not-allowed}.tox .tox-tbtn--disabled svg,.tox .tox-tbtn--disabled:hover svg,.tox .tox-tbtn:disabled svg,.tox .tox-tbtn:disabled:hover svg{fill:rgba(34,47,62,.5)}.tox .tox-tbtn--enabled,.tox .tox-tbtn--enabled:hover{background:#c8cbcf;border:0;box-shadow:none;color:#222f3e}.tox .tox-tbtn--enabled:hover>*,.tox .tox-tbtn--enabled>*{transform:none}.tox .tox-tbtn--enabled svg,.tox .tox-tbtn--enabled:hover svg{fill:#222f3e}.tox .tox-tbtn:focus:not(.tox-tbtn--disabled){color:#222f3e}.tox .tox-tbtn:focus:not(.tox-tbtn--disabled) svg{fill:#222f3e}.tox .tox-tbtn:active>*{transform:none}.tox .tox-tbtn--md{height:51px;width:51px}.tox .tox-tbtn--lg{flex-direction:column;height:68px;width:68px}.tox .tox-tbtn--return{-ms-grid-row-align:stretch;align-self:stretch;height:unset;width:16px}.tox .tox-tbtn--labeled{padding:0 4px;width:unset}.tox .tox-tbtn__vlabel{display:block;font-size:10px;font-weight:400;letter-spacing:-.025em;margin-bottom:4px;white-space:nowrap}.tox .tox-tbtn--select{margin:2px 0 3px 0;padding:0 4px;width:auto}.tox .tox-tbtn__select-label{cursor:default;font-weight:400;margin:0 4px}.tox .tox-tbtn__select-chevron{align-items:center;display:flex;justify-content:center;width:16px}.tox .tox-tbtn__select-chevron svg{fill:rgba(34,47,62,.5)}.tox .tox-tbtn--bespoke .tox-tbtn__select-label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;width:7em}.tox .tox-split-button{border:0;border-radius:3px;box-sizing:border-box;display:flex;margin:2px 0 3px 0;overflow:hidden}.tox .tox-split-button:hover{box-shadow:0 0 0 1px #dee0e2 inset}.tox .tox-split-button:focus{background:#dee0e2;box-shadow:none;color:#222f3e}.tox .tox-split-button>*{border-radius:0}.tox .tox-split-button__chevron{width:16px}.tox .tox-split-button__chevron svg{fill:rgba(34,47,62,.5)}.tox .tox-split-button .tox-tbtn{margin:0}.tox.tox-platform-touch .tox-split-button .tox-tbtn:first-child{width:30px}.tox.tox-platform-touch .tox-split-button__chevron{width:20px}.tox .tox-split-button.tox-tbtn--disabled .tox-tbtn:focus,.tox .tox-split-button.tox-tbtn--disabled .tox-tbtn:hover,.tox .tox-split-button.tox-tbtn--disabled:focus,.tox .tox-split-button.tox-tbtn--disabled:hover{background:0 0;box-shadow:none;color:rgba(34,47,62,.5)}.tox .tox-toolbar-overlord{background-color:#fff}.tox .tox-toolbar,.tox .tox-toolbar__overflow,.tox .tox-toolbar__primary{background:url("data:image/svg+xml;charset=utf8,%3Csvg height='39px' viewBox='0 0 40 39px' width='40' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='38px' width='100' height='1' fill='%23cccccc'/%3E%3C/svg%3E") left 0 top 0 #fff;background-color:#fff;display:flex;flex:0 0 auto;flex-shrink:0;flex-wrap:wrap;padding:0 0}.tox .tox-toolbar__overflow.tox-toolbar__overflow--closed{height:0;opacity:0;padding-bottom:0;padding-top:0;visibility:hidden}.tox .tox-toolbar__overflow--growing{transition:height .3s ease,opacity .2s linear .1s}.tox .tox-toolbar__overflow--shrinking{transition:opacity .3s ease,height .2s linear .1s,visibility 0s linear .3s}.tox .tox-toolbar--scrolling{flex-wrap:nowrap;overflow-x:auto}.tox .tox-pop .tox-toolbar{border-width:0}.tox .tox-toolbar--no-divider{background-image:none}.tox.tox-tinymce-aux .tox-toolbar__overflow{background-color:#fff;border:1px solid #ccc;border-radius:3px;box-shadow:0 1px 3px rgba(0,0,0,.15)}.tox[dir=rtl] .tox-tbtn__icon-rtl svg{transform:rotateY(180deg)}.tox .tox-toolbar__group{align-items:center;display:flex;flex-wrap:wrap;margin:0 0;padding:0 4px 0 4px}.tox .tox-toolbar__group--pull-right{margin-left:auto}.tox .tox-toolbar--scrolling .tox-toolbar__group{flex-shrink:0;flex-wrap:nowrap}.tox:not([dir=rtl]) .tox-toolbar__group:not(:last-of-type){border-right:1px solid #ccc}.tox[dir=rtl] .tox-toolbar__group:not(:last-of-type){border-left:1px solid #ccc}.tox .tox-tooltip{display:inline-block;padding:8px;position:relative}.tox .tox-tooltip__body{background-color:#222f3e;border-radius:3px;box-shadow:0 2px 4px rgba(34,47,62,.3);color:rgba(255,255,255,.75);font-size:14px;font-style:normal;font-weight:400;padding:4px 8px;text-transform:normal}.tox .tox-tooltip__arrow{position:absolute}.tox .tox-tooltip--down .tox-tooltip__arrow{border-left:8px solid transparent;border-right:8px solid transparent;border-top:8px solid #222f3e;bottom:0;left:50%;position:absolute;transform:translateX(-50%)}.tox .tox-tooltip--up .tox-tooltip__arrow{border-bottom:8px solid #222f3e;border-left:8px solid transparent;border-right:8px solid transparent;left:50%;position:absolute;top:0;transform:translateX(-50%)}.tox .tox-tooltip--right .tox-tooltip__arrow{border-bottom:8px solid transparent;border-left:8px solid #222f3e;border-top:8px solid transparent;position:absolute;right:0;top:50%;transform:translateY(-50%)}.tox .tox-tooltip--left .tox-tooltip__arrow{border-bottom:8px solid transparent;border-right:8px solid #222f3e;border-top:8px solid transparent;left:0;position:absolute;top:50%;transform:translateY(-50%)}.tox .tox-well{border:1px solid #ccc;border-radius:3px;padding:8px;width:100%}.tox .tox-well>:first-child{margin-top:0}.tox .tox-well>:last-child{margin-bottom:0}.tox .tox-well>:only-child{margin:0}.tox .tox-custom-editor{border:1px solid #ccc;border-radius:3px;display:flex;height:525px}.tox .tox-dialog-loading::before{background-color:rgba(0,0,0,.5);content:"";height:100%;position:absolute;width:100%;z-index:1000}.tox .tox-tab{cursor:pointer}.tox .tox-dialog__content-js{display:flex;flex:1;-ms-flex-preferred-size:auto}.tox .tox-dialog__body-content .tox-collection{display:flex;flex:1;-ms-flex-preferred-size:auto}.tox .tox-image-tools-edit-panel{height:60px}.tox .tox-image-tools__sidebar{height:60px}
diff --git a/website/js/vendor/tinymce/js/tinymce/skins/ui/oxide/skin.mobile.min.css b/website/js/vendor/tinymce/js/tinymce/skins/ui/oxide/skin.mobile.min.css
new file mode 100644 (file)
index 0000000..3a45cac
--- /dev/null
@@ -0,0 +1,7 @@
+/**
+ * Copyright (c) Tiny Technologies, Inc. All rights reserved.
+ * Licensed under the LGPL or a commercial license.
+ * For LGPL see License.txt in the project root for license information.
+ * For commercial licenses see https://www.tiny.cloud/
+ */
+.tinymce-mobile-outer-container{all:initial;display:block}.tinymce-mobile-outer-container *{border:0;box-sizing:initial;cursor:inherit;float:none;line-height:1;margin:0;outline:0;padding:0;-webkit-tap-highlight-color:transparent;text-shadow:none;white-space:nowrap}.tinymce-mobile-icon-arrow-back::before{content:"\e5cd"}.tinymce-mobile-icon-image::before{content:"\e412"}.tinymce-mobile-icon-cancel-circle::before{content:"\e5c9"}.tinymce-mobile-icon-full-dot::before{content:"\e061"}.tinymce-mobile-icon-align-center::before{content:"\e234"}.tinymce-mobile-icon-align-left::before{content:"\e236"}.tinymce-mobile-icon-align-right::before{content:"\e237"}.tinymce-mobile-icon-bold::before{content:"\e238"}.tinymce-mobile-icon-italic::before{content:"\e23f"}.tinymce-mobile-icon-unordered-list::before{content:"\e241"}.tinymce-mobile-icon-ordered-list::before{content:"\e242"}.tinymce-mobile-icon-font-size::before{content:"\e245"}.tinymce-mobile-icon-underline::before{content:"\e249"}.tinymce-mobile-icon-link::before{content:"\e157"}.tinymce-mobile-icon-unlink::before{content:"\eca2"}.tinymce-mobile-icon-color::before{content:"\e891"}.tinymce-mobile-icon-previous::before{content:"\e314"}.tinymce-mobile-icon-next::before{content:"\e315"}.tinymce-mobile-icon-large-font::before,.tinymce-mobile-icon-style-formats::before{content:"\e264"}.tinymce-mobile-icon-undo::before{content:"\e166"}.tinymce-mobile-icon-redo::before{content:"\e15a"}.tinymce-mobile-icon-removeformat::before{content:"\e239"}.tinymce-mobile-icon-small-font::before{content:"\e906"}.tinymce-mobile-format-matches::after,.tinymce-mobile-icon-readonly-back::before{content:"\e5ca"}.tinymce-mobile-icon-small-heading::before{content:"small"}.tinymce-mobile-icon-large-heading::before{content:"large"}.tinymce-mobile-icon-large-heading::before,.tinymce-mobile-icon-small-heading::before{font-family:sans-serif;font-size:80%}.tinymce-mobile-mask-edit-icon::before{content:"\e254"}.tinymce-mobile-icon-back::before{content:"\e5c4"}.tinymce-mobile-icon-heading::before{content:"Headings";font-family:sans-serif;font-size:80%;font-weight:700}.tinymce-mobile-icon-h1::before{content:"H1";font-weight:700}.tinymce-mobile-icon-h2::before{content:"H2";font-weight:700}.tinymce-mobile-icon-h3::before{content:"H3";font-weight:700}.tinymce-mobile-outer-container .tinymce-mobile-disabled-mask{align-items:center;display:flex;justify-content:center;background:rgba(51,51,51,.5);height:100%;position:absolute;top:0;width:100%}.tinymce-mobile-outer-container .tinymce-mobile-disabled-mask .tinymce-mobile-content-container{align-items:center;border-radius:50%;display:flex;flex-direction:column;font-family:sans-serif;font-size:1em;justify-content:space-between}.tinymce-mobile-outer-container .tinymce-mobile-disabled-mask .tinymce-mobile-content-container .mixin-menu-item{align-items:center;display:flex;justify-content:center;border-radius:50%;height:2.1em;width:2.1em}.tinymce-mobile-outer-container .tinymce-mobile-disabled-mask .tinymce-mobile-content-container .tinymce-mobile-content-tap-section{align-items:center;display:flex;justify-content:center;flex-direction:column;font-size:1em}@media only screen and (min-device-width:700px){.tinymce-mobile-outer-container .tinymce-mobile-disabled-mask .tinymce-mobile-content-container .tinymce-mobile-content-tap-section{font-size:1.2em}}.tinymce-mobile-outer-container .tinymce-mobile-disabled-mask .tinymce-mobile-content-container .tinymce-mobile-content-tap-section .tinymce-mobile-mask-tap-icon{align-items:center;display:flex;justify-content:center;border-radius:50%;height:2.1em;width:2.1em;background-color:#fff;color:#207ab7}.tinymce-mobile-outer-container .tinymce-mobile-disabled-mask .tinymce-mobile-content-container .tinymce-mobile-content-tap-section .tinymce-mobile-mask-tap-icon::before{content:"\e900";font-family:tinymce-mobile,sans-serif}.tinymce-mobile-outer-container .tinymce-mobile-disabled-mask .tinymce-mobile-content-container .tinymce-mobile-content-tap-section:not(.tinymce-mobile-mask-tap-icon-selected) .tinymce-mobile-mask-tap-icon{z-index:2}.tinymce-mobile-android-container.tinymce-mobile-android-maximized{background:#fff;border:none;bottom:0;display:flex;flex-direction:column;left:0;position:fixed;right:0;top:0}.tinymce-mobile-android-container:not(.tinymce-mobile-android-maximized){position:relative}.tinymce-mobile-android-container .tinymce-mobile-editor-socket{display:flex;flex-grow:1}.tinymce-mobile-android-container .tinymce-mobile-editor-socket iframe{display:flex!important;flex-grow:1;height:auto!important}.tinymce-mobile-android-scroll-reload{overflow:hidden}:not(.tinymce-mobile-readonly-mode)>.tinymce-mobile-android-selection-context-toolbar{margin-top:23px}.tinymce-mobile-toolstrip{background:#fff;display:flex;flex:0 0 auto;z-index:1}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar{align-items:center;background-color:#fff;border-bottom:1px solid #ccc;display:flex;flex:1;height:2.5em;width:100%}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar:not(.tinymce-mobile-context-toolbar) .tinymce-mobile-toolbar-group{align-items:center;display:flex;height:100%;flex-shrink:1}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar:not(.tinymce-mobile-context-toolbar) .tinymce-mobile-toolbar-group>div{align-items:center;display:flex;height:100%;flex:1}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar:not(.tinymce-mobile-context-toolbar) .tinymce-mobile-toolbar-group.tinymce-mobile-exit-container{background:#f44336}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar:not(.tinymce-mobile-context-toolbar) .tinymce-mobile-toolbar-group.tinymce-mobile-toolbar-scrollable-group{flex-grow:1}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar:not(.tinymce-mobile-context-toolbar) .tinymce-mobile-toolbar-group .tinymce-mobile-toolbar-group-item{padding-left:.5em;padding-right:.5em}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar:not(.tinymce-mobile-context-toolbar) .tinymce-mobile-toolbar-group .tinymce-mobile-toolbar-group-item.tinymce-mobile-toolbar-button{align-items:center;display:flex;height:80%;margin-left:2px;margin-right:2px}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar:not(.tinymce-mobile-context-toolbar) .tinymce-mobile-toolbar-group .tinymce-mobile-toolbar-group-item.tinymce-mobile-toolbar-button.tinymce-mobile-toolbar-button-selected{background:#c8cbcf;color:#ccc}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar:not(.tinymce-mobile-context-toolbar) .tinymce-mobile-toolbar-group:first-of-type,.tinymce-mobile-toolstrip .tinymce-mobile-toolbar:not(.tinymce-mobile-context-toolbar) .tinymce-mobile-toolbar-group:last-of-type{background:#207ab7;color:#eceff1}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group{align-items:center;display:flex;height:100%;flex:1;padding-bottom:.4em;padding-top:.4em}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog{display:flex;min-height:1.5em;overflow:hidden;padding-left:0;padding-right:0;position:relative;width:100%}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain{display:flex;height:100%;transition:left cubic-bezier(.4,0,1,1) .15s;width:100%}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen{display:flex;flex:0 0 auto;justify-content:space-between;width:100%}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen input{font-family:Sans-serif}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen .tinymce-mobile-input-container{display:flex;flex-grow:1;position:relative}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen .tinymce-mobile-input-container .tinymce-mobile-input-container-x{-ms-grid-row-align:center;align-self:center;background:inherit;border:none;border-radius:50%;color:#888;font-size:.6em;font-weight:700;height:100%;padding-right:2px;position:absolute;right:0}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen .tinymce-mobile-input-container.tinymce-mobile-input-container-empty .tinymce-mobile-input-container-x{display:none}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen .tinymce-mobile-icon-next,.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen .tinymce-mobile-icon-previous{align-items:center;display:flex}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen .tinymce-mobile-icon-next::before,.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen .tinymce-mobile-icon-previous::before{align-items:center;display:flex;font-weight:700;height:100%;padding-left:.5em;padding-right:.5em}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen .tinymce-mobile-icon-next.tinymce-mobile-toolbar-navigation-disabled::before,.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen .tinymce-mobile-icon-previous.tinymce-mobile-toolbar-navigation-disabled::before{visibility:hidden}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-dot-item{color:#ccc;font-size:10px;line-height:10px;margin:0 2px;padding-top:3px}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-dot-item.tinymce-mobile-dot-active{color:#c8cbcf}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-icon-large-font::before,.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-icon-large-heading::before{margin-left:.5em;margin-right:.9em}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-icon-small-font::before,.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-icon-small-heading::before{margin-left:.9em;margin-right:.5em}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider{display:flex;flex:1;margin-left:0;margin-right:0;padding:.28em 0;position:relative}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider .tinymce-mobile-slider-size-container{align-items:center;display:flex;flex-grow:1;height:100%}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider .tinymce-mobile-slider-size-container .tinymce-mobile-slider-size-line{background:#ccc;display:flex;flex:1;height:.2em;margin-bottom:.3em;margin-top:.3em}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider.tinymce-mobile-hue-slider-container{padding-left:2em;padding-right:2em}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider.tinymce-mobile-hue-slider-container .tinymce-mobile-slider-gradient-container{align-items:center;display:flex;flex-grow:1;height:100%}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider.tinymce-mobile-hue-slider-container .tinymce-mobile-slider-gradient-container .tinymce-mobile-slider-gradient{background:linear-gradient(to right,red 0,#feff00 17%,#0f0 33%,#00feff 50%,#00f 67%,#ff00fe 83%,red 100%);display:flex;flex:1;height:.2em;margin-bottom:.3em;margin-top:.3em}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider.tinymce-mobile-hue-slider-container .tinymce-mobile-hue-slider-black{background:#000;height:.2em;margin-bottom:.3em;margin-top:.3em;width:1.2em}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider.tinymce-mobile-hue-slider-container .tinymce-mobile-hue-slider-white{background:#fff;height:.2em;margin-bottom:.3em;margin-top:.3em;width:1.2em}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider .tinymce-mobile-slider-thumb{align-items:center;background-clip:padding-box;background-color:#455a64;border:.5em solid rgba(136,136,136,0);border-radius:3em;bottom:0;color:#fff;display:flex;height:.5em;justify-content:center;left:-10px;margin:auto;position:absolute;top:0;transition:border 120ms cubic-bezier(.39,.58,.57,1);width:.5em}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider .tinymce-mobile-slider-thumb.tinymce-mobile-thumb-active{border:.5em solid rgba(136,136,136,.39)}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serializer-wrapper,.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group>div{align-items:center;display:flex;height:100%;flex:1}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serializer-wrapper{flex-direction:column;justify-content:center}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-toolbar-group-item{align-items:center;display:flex}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-toolbar-group-item:not(.tinymce-mobile-serialised-dialog){height:100%}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-dot-container{display:flex}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group input{background:#fff;border:none;border-radius:0;color:#455a64;flex-grow:1;font-size:.85em;padding-bottom:.1em;padding-left:5px;padding-top:.1em}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group input::-webkit-input-placeholder{color:#888}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group input::placeholder{color:#888}.tinymce-mobile-dropup{background:#fff;display:flex;overflow:hidden;width:100%}.tinymce-mobile-dropup.tinymce-mobile-dropup-shrinking{transition:height .3s ease-out}.tinymce-mobile-dropup.tinymce-mobile-dropup-growing{transition:height .3s ease-in}.tinymce-mobile-dropup.tinymce-mobile-dropup-closed{flex-grow:0}.tinymce-mobile-dropup.tinymce-mobile-dropup-open:not(.tinymce-mobile-dropup-growing){flex-grow:1}.tinymce-mobile-ios-container .tinymce-mobile-dropup:not(.tinymce-mobile-dropup-closed){min-height:200px}@media only screen and (orientation:landscape){.tinymce-mobile-dropup:not(.tinymce-mobile-dropup-closed){min-height:200px}}@media only screen and (min-device-width :320px) and (max-device-width :568px) and (orientation :landscape){.tinymce-mobile-ios-container .tinymce-mobile-dropup:not(.tinymce-mobile-dropup-closed){min-height:150px}}.tinymce-mobile-styles-menu{font-family:sans-serif;outline:4px solid #000;overflow:hidden;position:relative;width:100%}.tinymce-mobile-styles-menu [role=menu]{display:flex;flex-direction:column;height:100%;position:absolute;width:100%}.tinymce-mobile-styles-menu [role=menu].transitioning{transition:transform .5s ease-in-out}.tinymce-mobile-styles-menu .tinymce-mobile-styles-item{border-bottom:1px solid #ddd;color:#455a64;cursor:pointer;display:flex;padding:1em 1em;position:relative}.tinymce-mobile-styles-menu .tinymce-mobile-styles-collapser .tinymce-mobile-styles-collapse-icon::before{color:#455a64;content:"\e314";font-family:tinymce-mobile,sans-serif}.tinymce-mobile-styles-menu .tinymce-mobile-styles-item.tinymce-mobile-styles-item-is-menu::after{color:#455a64;content:"\e315";font-family:tinymce-mobile,sans-serif;padding-left:1em;padding-right:1em;position:absolute;right:0}.tinymce-mobile-styles-menu .tinymce-mobile-styles-item.tinymce-mobile-format-matches::after{font-family:tinymce-mobile,sans-serif;padding-left:1em;padding-right:1em;position:absolute;right:0}.tinymce-mobile-styles-menu .tinymce-mobile-styles-collapser,.tinymce-mobile-styles-menu .tinymce-mobile-styles-separator{align-items:center;background:#fff;border-top:#455a64;color:#455a64;display:flex;min-height:2.5em;padding-left:1em;padding-right:1em}.tinymce-mobile-styles-menu [data-transitioning-destination=before][data-transitioning-state],.tinymce-mobile-styles-menu [data-transitioning-state=before]{transform:translate(-100%)}.tinymce-mobile-styles-menu [data-transitioning-destination=current][data-transitioning-state],.tinymce-mobile-styles-menu [data-transitioning-state=current]{transform:translate(0)}.tinymce-mobile-styles-menu [data-transitioning-destination=after][data-transitioning-state],.tinymce-mobile-styles-menu [data-transitioning-state=after]{transform:translate(100%)}@font-face{font-family:tinymce-mobile;font-style:normal;font-weight:400;src:url(fonts/tinymce-mobile.woff?8x92w3) format('woff')}@media (min-device-width:700px){.tinymce-mobile-outer-container,.tinymce-mobile-outer-container input{font-size:25px}}@media (max-device-width:700px){.tinymce-mobile-outer-container,.tinymce-mobile-outer-container input{font-size:18px}}.tinymce-mobile-icon{font-family:tinymce-mobile,sans-serif}.mixin-flex-and-centre{align-items:center;display:flex;justify-content:center}.mixin-flex-bar{align-items:center;display:flex;height:100%}.tinymce-mobile-outer-container .tinymce-mobile-editor-socket iframe{background-color:#fff;width:100%}.tinymce-mobile-editor-socket .tinymce-mobile-mask-edit-icon{background-color:#207ab7;border-radius:50%;bottom:1em;color:#fff;font-size:1em;height:2.1em;position:fixed;right:2em;width:2.1em;align-items:center;display:flex;justify-content:center}@media only screen and (min-device-width:700px){.tinymce-mobile-editor-socket .tinymce-mobile-mask-edit-icon{font-size:1.2em}}.tinymce-mobile-outer-container:not(.tinymce-mobile-fullscreen-maximized) .tinymce-mobile-editor-socket{height:300px;overflow:hidden}.tinymce-mobile-outer-container:not(.tinymce-mobile-fullscreen-maximized) .tinymce-mobile-editor-socket iframe{height:100%}.tinymce-mobile-outer-container:not(.tinymce-mobile-fullscreen-maximized) .tinymce-mobile-toolstrip{display:none}input[type=file]::-webkit-file-upload-button{display:none}@media only screen and (min-device-width :320px) and (max-device-width :568px) and (orientation :landscape){.tinymce-mobile-ios-container .tinymce-mobile-editor-socket .tinymce-mobile-mask-edit-icon{bottom:50%}}
diff --git a/website/js/vendor/tinymce/js/tinymce/themes/mobile/theme.min.js b/website/js/vendor/tinymce/js/tinymce/themes/mobile/theme.min.js
new file mode 100644 (file)
index 0000000..cfcbc5a
--- /dev/null
@@ -0,0 +1,9 @@
+/**
+ * Copyright (c) Tiny Technologies, Inc. All rights reserved.
+ * Licensed under the LGPL or a commercial license.
+ * For LGPL see License.txt in the project root for license information.
+ * For commercial licenses see https://www.tiny.cloud/
+ *
+ * Version: 5.1.5 (2019-12-19)
+ */
+!function(l){"use strict";var x=function(){return(x=Object.assign||function(n){for(var e,t=1,r=arguments.length;t<r;t++)for(var o in e=arguments[t])Object.prototype.hasOwnProperty.call(e,o)&&(n[o]=e[o]);return n}).apply(this,arguments)};function u(n,e){var t={};for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&e.indexOf(r)<0&&(t[r]=n[r]);if(null!=n&&"function"==typeof Object.getOwnPropertySymbols){var o=0;for(r=Object.getOwnPropertySymbols(n);o<r.length;o++)e.indexOf(r[o])<0&&Object.prototype.propertyIsEnumerable.call(n,r[o])&&(t[r[o]]=n[r[o]])}return t}function w(){}function y(n){return n}var i=function(t,r){return function(){for(var n=[],e=0;e<arguments.length;e++)n[e]=arguments[e];return t(r.apply(null,n))}},b=function(n){return function(){return n}};function d(r){for(var o=[],n=1;n<arguments.length;n++)o[n-1]=arguments[n];return function(){for(var n=[],e=0;e<arguments.length;e++)n[e]=arguments[e];var t=o.concat(n);return r.apply(null,t)}}function m(t){return function(){for(var n=[],e=0;e<arguments.length;e++)n[e]=arguments[e];return!t.apply(null,n)}}function o(n){return function(){throw new Error(n)}}function t(n){return n()}function n(){return f}var e,c=b(!1),a=b(!0),f=(e={fold:function(n,e){return n()},is:c,isSome:c,isNone:a,getOr:g,getOrThunk:s,getOrDie:function(n){throw new Error(n||"error: getOrDie called on none.")},getOrNull:b(null),getOrUndefined:b(undefined),or:g,orThunk:s,map:n,each:w,bind:n,exists:c,forall:a,filter:n,equals:r,equals_:r,toArray:function(){return[]},toString:b("none()")},Object.freeze&&Object.freeze(e),e);function r(n){return n.isNone()}function s(n){return n()}function g(n){return n}function S(n,t){return jn(n,function(n,e){return{k:e,v:t(n,e)}})}function p(n,e){return Vn.call(n,e)}function h(n,e){var t=function(n,e){for(var t=0;t<n.length;t++){var r=n[t];if(r.test(e))return r}return undefined}(n,e);if(!t)return{major:0,minor:0};function r(n){return Number(e.replace(t,"$"+n))}return zn(r(1),r(2))}function v(n,e){return function(){return e===n}}function T(n,e){return function(){return e===n}}function O(e){return function(n){return function(n){if(null===n)return"null";var e=typeof n;return"object"==e&&(Array.prototype.isPrototypeOf(n)||n.constructor&&"Array"===n.constructor.name)?"array":"object"==e&&(String.prototype.isPrototypeOf(n)||n.constructor&&"String"===n.constructor.name)?"string":e}(n)===e}}function k(n,e){return-1<function(n,e){return se.call(n,e)}(n,e)}function E(n,e){for(var t=0,r=n.length;t<r;t++){if(e(n[t],t))return!0}return!1}function C(n,e){for(var t=0,r=n.length;t<r;t++){e(n[t],t)}}function D(n,e){for(var t=[],r=0,o=n.length;r<o;r++){var i=n[r];e(i,r)&&t.push(i)}return t}function M(n,e,t){return function(n,e){for(var t=n.length-1;0<=t;t--){e(n[t],t)}}(n,function(n){t=e(t,n)}),t}function I(n,e,t){return C(n,function(n){t=e(t,n)}),t}function R(n,e){for(var t=0,r=n.length;t<r;t++){var o=n[t];if(e(o,t))return Fn.some(o)}return Fn.none()}function A(n,e){for(var t=0,r=n.length;t<r;t++){if(e(n[t],t))return Fn.some(t)}return Fn.none()}function F(n){for(var e=[],t=0,r=n.length;t<r;++t){if(!ie(n[t]))throw new Error("Arr.flatten item "+t+" was not an array, input: "+n);le.apply(e,n[t])}return e}function B(n,e){var t=de(n,e);return F(t)}function V(n,e){for(var t=0,r=n.length;t<r;++t){if(!0!==e(n[t],t))return!1}return!0}function N(n){var e=fe.call(n,0);return e.reverse(),e}function j(n,e){return D(n,function(n){return!k(e,n)})}function _(n){return[n]}function P(n,e){var t=String(e).toLowerCase();return R(n,function(n){return n.search(t)})}function H(n,e){return-1!==n.indexOf(e)}function z(e){return function(n){return H(n,e)}}function L(){return be.get()}function G(n,e){Ye(n,n.element(),e,{})}function U(n,e,t){Ye(n,n.element(),e,t)}function $(n){G(n,Pe())}function W(n,e,t){Ye(n,e,t,{})}function X(t){var r,o=!1;return function(){for(var n=[],e=0;e<arguments.length;e++)n[e]=arguments[e];return o||(o=!0,r=t.apply(null,n)),r}}function q(n){return n.dom().nodeName.toLowerCase()}function Y(e){return function(n){return function(n){return n.dom().nodeType}(n)===e}}function K(n){var e=tt(n)?n.dom().parentNode:n.dom();return e!==undefined&&null!==e&&e.ownerDocument.body.contains(e)}function J(){for(var e=[],n=0;n<arguments.length;n++)e[n]=arguments[n];return function(){for(var t=[],n=0;n<arguments.length;n++)t[n]=arguments[n];if(e.length!==t.length)throw new Error('Wrong number of arguments to struct. Expected "['+e.length+']", got '+t.length+" arguments");var r={};return C(e,function(n,e){r[n]=b(t[e])}),r}}function Q(n){return n.slice(0).sort()}function Z(e,n){if(!ie(n))throw new Error("The "+e+" fields must be an array. Was: "+n+".");C(n,function(n){if(!re(n))throw new Error("The value "+n+" in the "+e+" fields was not a string.")})}function nn(o,i){var u=o.concat(i);if(0===u.length)throw new Error("You must specify at least one required or optional field.");return Z("required",o),Z("optional",i),function(n){var t=Q(n);R(t,function(n,e){return e<t.length-1&&n===t[e+1]}).each(function(n){throw new Error("The field: "+n+" occurs more than once in the combined fields: ["+t.join(", ")+"].")})}(u),function(e){var t=Bn(e);V(o,function(n){return k(t,n)})||function(n,e){throw new Error("All required keys ("+Q(n).join(", ")+") were not specified. Specified keys were: "+Q(e).join(", ")+".")}(o,t);var n=D(t,function(n){return!k(u,n)});0<n.length&&function(n){throw new Error("Unsupported keys for object: "+Q(n).join(", "))}(n);var r={};return C(o,function(n){r[n]=b(e[n])}),C(i,function(n){r[n]=b(Object.prototype.hasOwnProperty.call(e,n)?Fn.some(e[n]):Fn.none())}),r}}function en(n,e,t){return 0!=(n.compareDocumentPosition(e)&t)}function tn(n,e){var t=n.dom();if(t.nodeType!==ut)return!1;var r=t;if(r.matches!==undefined)return r.matches(e);if(r.msMatchesSelector!==undefined)return r.msMatchesSelector(e);if(r.webkitMatchesSelector!==undefined)return r.webkitMatchesSelector(e);if(r.mozMatchesSelector!==undefined)return r.mozMatchesSelector(e);throw new Error("Browser lacks native selectors")}function rn(n){return n.nodeType!==ut&&n.nodeType!==ct||0===n.childElementCount}function on(n,e){var t=e===undefined?l.document:e.dom();return rn(t)?[]:de(t.querySelectorAll(n),Je.fromDom)}function un(n,e){var t=e===undefined?l.document:e.dom();return rn(t)?Fn.none():Fn.from(t.querySelector(n)).map(Je.fromDom)}function cn(n,e){return n.dom()===e.dom()}function an(n){return Je.fromDom(n.dom().ownerDocument)}function fn(n){return Fn.from(n.dom().parentNode).map(Je.fromDom)}function sn(n,e){var t=n.dom().childNodes;return Fn.from(t[e]).map(Je.fromDom)}function ln(e,t){fn(e).each(function(n){n.dom().insertBefore(t.dom(),e.dom())})}function dn(n,e){(function(n){return Fn.from(n.dom().nextSibling).map(Je.fromDom)})(n).fold(function(){fn(n).each(function(n){ft(n,e)})},function(n){ln(n,e)})}function mn(e,t){(function(n){return sn(n,0)})(e).fold(function(){ft(e,t)},function(n){e.dom().insertBefore(t.dom(),n.dom())})}function gn(e,n){C(n,function(n){ft(e,n)})}function pn(n){n.dom().textContent="",C(at(n),function(n){st(n)})}function hn(n,e){ft(n.element(),e.element())}function vn(e,n){var t=e.components();!function(n){C(n.components(),function(n){return st(n.element())}),pn(n.element()),n.syncComponents()}(e);var r=j(t,n);C(r,function(n){lt(n),e.getSystem().removeFromWorld(n)}),C(n,function(n){n.getSystem().isConnected()?hn(e,n):(e.getSystem().addToWorld(n),hn(e,n),K(e.element())&&dt(n)),e.syncComponents()})}function yn(e){var n=fn(e.element()).bind(function(n){return e.getSystem().getByDom(n).toOption()});!function(n){lt(n),st(n.element()),n.getSystem().removeFromWorld(n)}(e),n.each(function(n){n.syncComponents()})}function bn(u){return function(){for(var n=new Array(arguments.length),e=0;e<n.length;e++)n[e]=arguments[e];if(0===n.length)throw new Error("Can't merge zero objects");for(var t={},r=0;r<n.length;r++){var o=n[r];for(var i in o)bt.call(o,i)&&(t[i]=u(t[i],o[i]))}return t}}function xn(n){return St.defaultedThunk(b(n))}function wn(e){return function(n){return p(n,e)?Fn.from(n[e]):Fn.none()}}function Sn(n,e){return wn(e)(n)}function Tn(n,e){var t={};return t[n]=e,t}function On(n,e){return function(n,t){var r={};return Nn(n,function(n,e){k(t,e)||(r[e]=n)}),r}(n,e)}function kn(n,e){return function(e,t){return function(n){return p(n,e)?n[e]:t}}(n,e)}function En(n,e){return Tn(n,e)}function Cn(n){return function(n){var e={};return C(n,function(n){e[n.key]=n.value}),e}(n)}function Dn(n,e){var t=function(n){var e=[],t=[];return C(n,function(n){n.fold(function(n){e.push(n)},function(n){t.push(n)})}),{errors:e,values:t}}(n);return 0<t.errors.length?function(n){return vt.error(F(n))}(t.errors):function(n,e){return 0===n.length?vt.value(e):vt.value(xt(e,wt.apply(undefined,n)))}(t.values,e)}function Mn(n,e){return function(n,e){return p(n,e)&&n[e]!==undefined&&null!==n[e]}(n,e)}var In,Rn,An=function(t){function n(){return o}function e(n){return n(t)}var r=b(t),o={fold:function(n,e){return e(t)},is:function(n){return t===n},isSome:a,isNone:c,getOr:r,getOrThunk:r,getOrDie:r,getOrNull:r,getOrUndefined:r,or:n,orThunk:n,map:function(n){return An(n(t))},each:function(n){n(t)},bind:e,exists:e,forall:e,filter:function(n){return n(t)?o:f},toArray:function(){return[t]},toString:function(){return"some("+t+")"},equals:function(n){return n.is(t)},equals_:function(n,e){return n.fold(c,function(n){return e(t,n)})}};return o},Fn={some:An,none:n,from:function(n){return null===n||n===undefined?f:An(n)}},Bn=Object.keys,Vn=Object.hasOwnProperty,Nn=function(n,e){for(var t=Bn(n),r=0,o=t.length;r<o;r++){var i=t[r];e(n[i],i)}},jn=function(n,r){var o={};return Nn(n,function(n,e){var t=r(n,e);o[t.k]=t.v}),o},_n=function(n,t){var r=[];return Nn(n,function(n,e){r.push(t(n,e))}),r},Pn=function(n){function e(){return t}var t=n;return{get:e,set:function(n){t=n},clone:function(){return Pn(e())}}},Hn=function(){return zn(0,0)},zn=function(n,e){return{major:n,minor:e}},Ln={nu:zn,detect:function(n,e){var t=String(e).toLowerCase();return 0===n.length?Hn():h(n,t)},unknown:Hn},Gn="Edge",Un="Chrome",$n="Opera",Wn="Firefox",Xn="Safari",qn=function(n){var e=n.current;return{current:e,version:n.version,isEdge:v(Gn,e),isChrome:v(Un,e),isIE:v("IE",e),isOpera:v($n,e),isFirefox:v(Wn,e),isSafari:v(Xn,e)}},Yn={unknown:function(){return qn({current:undefined,version:Ln.unknown()})},nu:qn,edge:b(Gn),chrome:b(Un),ie:b("IE"),opera:b($n),firefox:b(Wn),safari:b(Xn)},Kn="Windows",Jn="Android",Qn="Linux",Zn="Solaris",ne="FreeBSD",ee=function(n){var e=n.current;return{current:e,version:n.version,isWindows:T(Kn,e),isiOS:T("iOS",e),isAndroid:T(Jn,e),isOSX:T("OSX",e),isLinux:T(Qn,e),isSolaris:T(Zn,e),isFreeBSD:T(ne,e)}},te={unknown:function(){return ee({current:undefined,version:Ln.unknown()})},nu:ee,windows:b(Kn),ios:b("iOS"),android:b(Jn),linux:b(Qn),osx:b("OSX"),solaris:b(Zn),freebsd:b(ne)},re=O("string"),oe=O("object"),ie=O("array"),ue=O("boolean"),ce=O("function"),ae=O("number"),fe=Array.prototype.slice,se=Array.prototype.indexOf,le=Array.prototype.push,de=function(n,e){for(var t=n.length,r=new Array(t),o=0;o<t;o++){var i=n[o];r[o]=e(i,o)}return r},me=(ce(Array.from)&&Array.from,function(n,t){return P(n,t).map(function(n){var e=Ln.detect(n.versionRegexes,t);return{current:n.name,version:e}})}),ge=function(n,t){return P(n,t).map(function(n){var e=Ln.detect(n.versionRegexes,t);return{current:n.name,version:e}})},pe=/.*?version\/\ ?([0-9]+)\.([0-9]+).*/,he=[{name:"Edge",versionRegexes:[/.*?edge\/ ?([0-9]+)\.([0-9]+)$/],search:function(n){return H(n,"edge/")&&H(n,"chrome")&&H(n,"safari")&&H(n,"applewebkit")}},{name:"Chrome",versionRegexes:[/.*?chrome\/([0-9]+)\.([0-9]+).*/,pe],search:function(n){return H(n,"chrome")&&!H(n,"chromeframe")}},{name:"IE",versionRegexes:[/.*?msie\ ?([0-9]+)\.([0-9]+).*/,/.*?rv:([0-9]+)\.([0-9]+).*/],search:function(n){return H(n,"msie")||H(n,"trident")}},{name:"Opera",versionRegexes:[pe,/.*?opera\/([0-9]+)\.([0-9]+).*/],search:z("opera")},{name:"Firefox",versionRegexes:[/.*?firefox\/\ ?([0-9]+)\.([0-9]+).*/],search:z("firefox")},{name:"Safari",versionRegexes:[pe,/.*?cpu os ([0-9]+)_([0-9]+).*/],search:function(n){return(H(n,"safari")||H(n,"mobile/"))&&H(n,"applewebkit")}}],ve=[{name:"Windows",search:z("win"),versionRegexes:[/.*?windows\ nt\ ?([0-9]+)\.([0-9]+).*/]},{name:"iOS",search:function(n){return H(n,"iphone")||H(n,"ipad")},versionRegexes:[/.*?version\/\ ?([0-9]+)\.([0-9]+).*/,/.*cpu os ([0-9]+)_([0-9]+).*/,/.*cpu iphone os ([0-9]+)_([0-9]+).*/]},{name:"Android",search:z("android"),versionRegexes:[/.*?android\ ?([0-9]+)\.([0-9]+).*/]},{name:"OSX",search:z("os x"),versionRegexes:[/.*?os\ x\ ?([0-9]+)_([0-9]+).*/]},{name:"Linux",search:z("linux"),versionRegexes:[]},{name:"Solaris",search:z("sunos"),versionRegexes:[]},{name:"FreeBSD",search:z("freebsd"),versionRegexes:[]}],ye={browsers:b(he),oses:b(ve)},be=Pn(function(n,e){var t=ye.browsers(),r=ye.oses(),o=me(t,n).fold(Yn.unknown,Yn.nu),i=ge(r,n).fold(te.unknown,te.nu);return{browser:o,os:i,deviceType:function(n,e,t,r){var o=n.isiOS()&&!0===/ipad/i.test(t),i=n.isiOS()&&!o,u=n.isiOS()||n.isAndroid(),c=u||r("(pointer:coarse)"),a=o||!i&&u&&r("(min-device-width:768px)"),f=i||u&&!a,s=e.isSafari()&&n.isiOS()&&!1===/safari/i.test(t),l=!f&&!a&&!s;return{isiPad:b(o),isiPhone:b(i),isTablet:b(a),isPhone:b(f),isTouch:b(c),isAndroid:n.isAndroid,isiOS:n.isiOS,isWebView:b(s),isDesktop:b(l)}}(i,o,n,e)}}(l.navigator.userAgent,function(n){return l.window.matchMedia(n).matches})),xe=b("touchstart"),we=b("touchmove"),Se=b("touchend"),Te=b("mousedown"),Oe=b("mousemove"),ke=b("mouseup"),Ee=b("mouseover"),Ce=b("keydown"),De=b("keyup"),Me=b("input"),Ie=b("change"),Re=b("click"),Ae=b("transitionend"),Fe=b("selectstart"),Be={tap:b("alloy.tap")},Ve=b("alloy.focus"),Ne=b("alloy.blur.post"),je=b("alloy.paste.post"),_e=b("alloy.receive"),Pe=b("alloy.execute"),He=b("alloy.focus.item"),ze=Be.tap,Le=b("alloy.longpress"),Ge=b("alloy.system.init"),Ue=b("alloy.system.attached"),$e=b("alloy.system.detached"),We=b("alloy.focusmanager.shifted"),Xe=b("alloy.highlight"),qe=b("alloy.dehighlight"),Ye=function(n,e,t,r){var o=x({target:e},r);n.getSystem().triggerEvent(t,e,S(o,b))},Ke=function(n){if(null===n||n===undefined)throw new Error("Node cannot be null or undefined");return{dom:b(n)}},Je={fromHtml:function(n,e){var t=(e||l.document).createElement("div");if(t.innerHTML=n,!t.hasChildNodes()||1<t.childNodes.length)throw l.console.error("HTML does not have a single root node",n),new Error("HTML must have a single root node");return Ke(t.childNodes[0])},fromTag:function(n,e){var t=(e||l.document).createElement(n);return Ke(t)},fromText:function(n,e){var t=(e||l.document).createTextNode(n);return Ke(t)},fromDom:Ke,fromPoint:function(n,e,t){var r=n.dom();return Fn.from(r.elementFromPoint(e,t)).map(Ke)}},Qe=(l.Node.ATTRIBUTE_NODE,l.Node.CDATA_SECTION_NODE,l.Node.COMMENT_NODE,l.Node.DOCUMENT_NODE),Ze=(l.Node.DOCUMENT_TYPE_NODE,l.Node.DOCUMENT_FRAGMENT_NODE,l.Node.ELEMENT_NODE),nt=l.Node.TEXT_NODE,et=(l.Node.PROCESSING_INSTRUCTION_NODE,l.Node.ENTITY_REFERENCE_NODE,l.Node.ENTITY_NODE,l.Node.NOTATION_NODE,"undefined"!=typeof l.window?l.window:Function("return this;")(),Y(Ze)),tt=Y(nt),rt=X(function(){return ot(Je.fromDom(l.document))}),ot=function(n){var e=n.dom().body;if(null===e||e===undefined)throw new Error("Body is not available yet");return Je.fromDom(e)},it=function(n,e){return en(n,e,l.Node.DOCUMENT_POSITION_CONTAINED_BY)},ut=Ze,ct=Qe,at=(L().browser.isIE(),function(n){return de(n.dom().childNodes,Je.fromDom)}),ft=(J("element","offset"),function(n,e){n.dom().appendChild(e.dom())}),st=function(n){var e=n.dom();null!==e.parentNode&&e.parentNode.removeChild(e)},lt=function(n){G(n,$e());var e=n.components();C(e,lt)},dt=function(n){var e=n.components();C(e,dt),G(n,Ue())},mt=function(n,e,t){n.getSystem().addToWorld(e),t(n.element(),e.element()),K(n.element())&&dt(e),n.syncComponents()},gt=function(n,e,t){t(n,e.element());var r=at(e.element());C(r,function(n){e.getByDom(n).each(dt)})},pt=function(t){return{is:function(n){return t===n},isValue:a,isError:c,getOr:b(t),getOrThunk:b(t),getOrDie:b(t),or:function(n){return pt(t)},orThunk:function(n){return pt(t)},fold:function(n,e){return e(t)},map:function(n){return pt(n(t))},mapError:function(n){return pt(t)},each:function(n){n(t)},bind:function(n){return n(t)},exists:function(n){return n(t)},forall:function(n){return n(t)},toOption:function(){return Fn.some(t)}}},ht=function(t){return{is:c,isValue:c,isError:a,getOr:y,getOrThunk:function(n){return n()},getOrDie:function(){return o(String(t))()},or:function(n){return n},orThunk:function(n){return n()},fold:function(n,e){return n(t)},map:function(n){return ht(t)},mapError:function(n){return ht(n(t))},each:w,bind:function(n){return ht(t)},exists:c,forall:a,toOption:Fn.none}},vt={value:pt,error:ht,fromOption:function(n,e){return n.fold(function(){return ht(e)},pt)}},yt=function(u){if(!ie(u))throw new Error("cases must be an array");if(0===u.length)throw new Error("there must be at least one case");var c=[],t={};return C(u,function(n,r){var e=Bn(n);if(1!==e.length)throw new Error("one and only one name per case");var o=e[0],i=n[o];if(t[o]!==undefined)throw new Error("duplicate key detected:"+o);if("cata"===o)throw new Error("cannot have a case named cata (sorry)");if(!ie(i))throw new Error("case arguments must be an array");c.push(o),t[o]=function(){var n=arguments.length;if(n!==i.length)throw new Error("Wrong number of arguments to case "+o+". Expected "+i.length+" ("+i+"), got "+n);for(var t=new Array(n),e=0;e<t.length;e++)t[e]=arguments[e];return{fold:function(){if(arguments.length!==u.length)throw new Error("Wrong number of arguments to fold. Expected "+u.length+", got "+arguments.length);return arguments[r].apply(null,t)},match:function(n){var e=Bn(n);if(c.length!==e.length)throw new Error("Wrong number of arguments to match. Expected: "+c.join(",")+"\nActual: "+e.join(","));if(!V(c,function(n){return k(e,n)}))throw new Error("Not all branches were specified when using match. Specified: "+e.join(", ")+"\nRequired: "+c.join(", "));return n[o].apply(null,t)},log:function(n){l.console.log(n,{constructors:c,constructor:o,params:t})}}}}),t},bt=Object.prototype.hasOwnProperty,xt=bn(function(n,e){return oe(n)&&oe(e)?xt(n,e):e}),wt=bn(function(n,e){return e}),St=yt([{strict:[]},{defaultedThunk:["fallbackThunk"]},{asOption:[]},{asDefaultedOptionThunk:["fallbackThunk"]},{mergeWithThunk:["baseThunk"]}]),Tt=St.strict,Ot=St.asOption,kt=St.defaultedThunk,Et=St.mergeWithThunk,Ct=(yt([{bothErrors:["error1","error2"]},{firstError:["error1","value2"]},{secondError:["value1","error2"]},{bothValues:["value1","value2"]}]),function(n){return wn(n)}),Dt=function(n,e){return Sn(n,e)};(Rn=In=In||{})[Rn.Error=0]="Error",Rn[Rn.Value=1]="Value";function Mt(n,e,t){return n.stype===In.Error?e(n.serror):t(n.svalue)}function It(n){return{stype:In.Value,svalue:n}}function Rt(n){return{stype:In.Error,serror:n}}function At(n){return i(dr,F)(n)}function Ft(n){return oe(n)&&100<Bn(n).length?" removed due to size":JSON.stringify(n,null,2)}function Bt(n,e){return dr([{path:n,getErrorInfo:e}])}function Vt(n,e,t){return Sn(e,t).fold(function(){return function(n,e,t){return Bt(n,function(){return'Could not find valid *strict* value for "'+e+'" in '+Ft(t)})}(n,t,e)},sr)}function Nt(n,e,t){var r=Sn(n,e).fold(function(){return t(n)},y);return sr(r)}function jt(u,c,n,a){return n.fold(function(r,t,n,o){function i(n){var e=o.extract(u.concat([r]),a,n);return pr(e,function(n){return Tn(t,a(n))})}function e(n){return n.fold(function(){var n=Tn(t,a(Fn.none()));return sr(n)},function(n){var e=o.extract(u.concat([r]),a,n);return pr(e,function(n){return Tn(t,a(Fn.some(n)))})})}return n.fold(function(){return mr(Vt(u,c,r),i)},function(n){return mr(Nt(c,r,n),i)},function(){return mr(function(n,e){return sr(Sn(n,e))}(c,r),e)},function(n){return mr(function(e,n,t){var r=Sn(e,n).map(function(n){return!0===n?t(e):n});return sr(r)}(c,r,n),e)},function(n){var e=n(c),t=pr(Nt(c,r,b({})),function(n){return xt(e,n)});return mr(t,i)})},function(n,e){var t=e(c);return sr(Tn(n,a(t)))})}function _t(r){return{extract:function(e,n,t){return gr(r(t,n),function(n){return function(n,e){return Bt(n,function(){return e})}(e,n)})},toString:function(){return"val"},toDsl:function(){return br.itemOf(r)}}}function Pt(n){var i=Sr(n),u=M(n,function(e,n){return n.fold(function(n){return xt(e,En(n,!0))},b(e))},{});return{extract:function(n,e,t){var r=ue(t)?[]:function(e){var n=Bn(e);return D(n,function(n){return Mn(e,n)})}(t),o=D(r,function(n){return!Mn(u,n)});return 0===o.length?i.extract(n,e,t):function(n,e){return Bt(n,function(){return"There are unsupported fields: ["+e.join(", ")+"] specified"})}(n,o)},toString:i.toString,toDsl:i.toDsl}}function Ht(t,i){function u(n,e){return function(o){return{extract:function(t,r,n){var e=de(n,function(n,e){return o.extract(t.concat(["["+e+"]"]),r,n)});return yr(e)},toString:function(){return"array("+o.toString()+")"},toDsl:function(){return br.arrOf(o)}}}(_t(t)).extract(n,y,e)}return{extract:function(t,r,o){var n=Bn(o),e=u(t,n);return mr(e,function(n){var e=de(n,function(n){return wr.field(n,n,Tt(),i)});return Sr(e).extract(t,r,o)})},toString:function(){return"setOf("+i.toString()+")"},toDsl:function(){return br.setOf(t,i)}}}function zt(e,t,r,n,o){return Dt(n,o).fold(function(){return function(n,e,t){return Bt(n,function(){return'The chosen schema: "'+t+'" did not exist in branches: '+Ft(e)})}(e,n,o)},function(n){return n.extract(e.concat(["branch: "+o]),t,r)})}function Lt(n,o){return{extract:function(e,t,r){return Dt(r,n).fold(function(){return function(n,e){return Bt(n,function(){return'Choice schema did not contain choice key: "'+e+'"'})}(e,n)},function(n){return zt(e,t,r,o,n)})},toString:function(){return"chooseOn("+n+"). Possible values: "+Bn(o)},toDsl:function(){return br.choiceOf(n,o)}}}function Gt(e){return _t(function(n){return e(n).fold(dr,sr)})}function Ut(e,n){return Ht(function(n){return ar(e(n))},n)}function $t(n,e,t){return fr(function(n,e,t,r){var o=e.extract([n],t,r);return hr(o,function(n){return{input:r,errors:n}})}(n,e,y,t))}function Wt(n){return n.fold(function(n){throw new Error(Cr(n))},y)}function Xt(n,e,t){return Wt($t(n,e,t))}function qt(n,e){return Lt(n,S(e,Sr))}function Yt(n){return kr(n,n,Tt(),Tr())}function Kt(n,e){return kr(n,n,Tt(),e)}function Jt(n,e){return kr(n,n,Tt(),Sr(e))}function Qt(n){return kr(n,n,Ot(),Tr())}function Zt(n,e){return kr(n,n,Ot(),e)}function nr(n,e){return Zt(n,Sr(e))}function er(n,e){return Zt(n,Pt(e))}function tr(n,e){return kr(n,n,xn(e),Tr())}function rr(n,e,t){return kr(n,n,xn(e),t)}function or(n,e){return Or(n,e)}function ir(n,e){return cn(n.element(),e.event().target())}var ur,cr,ar=function(n){return n.fold(Rt,It)},fr=function(n){return Mt(n,vt.error,vt.value)},sr=It,lr=function(n){var e=[],t=[];return C(n,function(n){Mt(n,function(n){return t.push(n)},function(n){return e.push(n)})}),{values:e,errors:t}},dr=Rt,mr=function(n,e){return n.stype===In.Value?e(n.svalue):n},gr=function(n,e){return n.stype===In.Error?e(n.serror):n},pr=function(n,e){return n.stype===In.Value?{stype:In.Value,svalue:e(n.svalue)}:n},hr=function(n,e){return n.stype===In.Error?{stype:In.Error,serror:e(n.serror)}:n},vr=function(n,e){var t=lr(n);return 0<t.errors.length?At(t.errors):function(n,e){return 0<n.length?sr(xt(e,wt.apply(undefined,n))):sr(e)}(t.values,e)},yr=function(n){var e=lr(n);return 0<e.errors.length?At(e.errors):sr(e.values)},br=yt([{setOf:["validator","valueType"]},{arrOf:["valueType"]},{objOf:["fields"]},{itemOf:["validator"]},{choiceOf:["key","branches"]},{thunk:["description"]},{func:["args","outputSchema"]}]),xr=yt([{field:["name","presence","type"]},{state:["name"]}]),wr=yt([{field:["key","okey","presence","prop"]},{state:["okey","instantiator"]}]),Sr=function(r){return{extract:function(n,e,t){return function(e,t,n,r){var o=de(n,function(n){return jt(e,t,n,r)});return vr(o,{})}(n,t,r,e)},toString:function(){return"obj{\n"+de(r,function(n){return n.fold(function(n,e,t,r){return n+" -> "+r.toString()},function(n,e){return"state("+n+")"})}).join("\n")+"}"},toDsl:function(){return br.objOf(de(r,function(n){return n.fold(function(n,e,t,r){return xr.field(n,t,r)},function(n,e){return xr.state(n)})}))}}},Tr=b(_t(sr)),Or=wr.state,kr=wr.field,Er=_t(sr),Cr=function(n){return"Errors: \n"+function(n){var e=10<n.length?n.slice(0,10).concat([{path:[],getErrorInfo:function(){return"... (only showing first ten failures)"}}]):n;return de(e,function(n){return"Failed path: ("+n.path.join(" > ")+")\n"+n.getErrorInfo()})}(n.errors)+"\n\nInput object: "+Ft(n.input)},Dr=b(Er),Mr=(ur=ce,cr="function",_t(function(n){var e=typeof n;return ur(n)?sr(n):dr("Expected type: "+cr+" but got: "+e)}));function Ir(n,e,t,r,o){return n(t,r)?Fn.some(t):ce(o)&&o(t)?Fn.none():e(t,r,o)}function Rr(n,e,t){for(var r=n.dom(),o=ce(t)?t:b(!1);r.parentNode;){r=r.parentNode;var i=Je.fromDom(r);if(e(i))return Fn.some(i);if(o(i))break}return Fn.none()}function Ar(n,e,t){return Ir(function(n,e){return e(n)},Rr,n,e,t)}function Fr(n,o){var i=function(n){for(var e=0;e<n.childNodes.length;e++){var t=Je.fromDom(n.childNodes[e]);if(o(t))return Fn.some(t);var r=i(n.childNodes[e]);if(r.isSome())return r}return Fn.none()};return i(n.dom())}function Br(n){if(!Mn(n,"can")&&!Mn(n,"abort")&&!Mn(n,"run"))throw new Error("EventHandler defined by: "+JSON.stringify(n,null,2)+" does not have can, abort, or run!");return Xt("Extracting event.handler",Pt([tr("can",b(!0)),tr("abort",b(!1)),tr("run",w)]),n)}function Vr(t){var n=function(e,r){return function(){for(var t=[],n=0;n<arguments.length;n++)t[n]=arguments[n];return I(e,function(n,e){return n&&r(e).apply(undefined,t)},!0)}}(t,function(n){return n.can}),e=function(e,r){return function(){for(var t=[],n=0;n<arguments.length;n++)t[n]=arguments[n];return I(e,function(n,e){return n||r(e).apply(undefined,t)},!1)}}(t,function(n){return n.abort});return Br({can:n,abort:e,run:function(){for(var e=[],n=0;n<arguments.length;n++)e[n]=arguments[n];C(t,function(n){n.run.apply(undefined,e)})}})}function Nr(n){return Cn(n)}function jr(n,e){return{key:n,value:Br({abort:e})}}function _r(n,e){return{key:n,value:Br({run:e})}}function Pr(n,t,r){return{key:n,value:Br({run:function(n,e){t.apply(undefined,[n,e].concat(r))}})}}function Hr(n){return function(t){return{key:n,value:Br({run:function(n,e){ir(n,e)&&t(n,e)}})}}}function zr(n,e,t){return function(t,r){return _r(t,function(n,e){n.getSystem().getByUid(r).each(function(n){!function(n,e,t,r){n.getSystem().triggerEvent(t,e,r.event())}(n,n.element(),t,e)})})}(n,e.partUids[t])}function Lr(n){return _r(n,function(n,e){e.cut()})}function Gr(n,e){var t=n.toString(),r=t.indexOf(")")+1,o=t.indexOf("("),i=t.substring(o+1,r-1).split(/,\s*/);return n.toFunctionAnnotation=function(){return{name:e,parameters:Io(i)}},n}function Ur(n){return{classes:n.classes!==undefined?n.classes:[],attributes:n.attributes!==undefined?n.attributes:{},styles:n.styles!==undefined?n.styles:{}}}function $r(t,r,o){return Do(function(n,e){o(n,t,r)})}function Wr(o,i,u){return function(n,e,t){var r=t.toString(),o=r.indexOf(")")+1,i=r.indexOf("("),u=r.substring(i+1,o-1).split(/,\s*/);return n.toFunctionAnnotation=function(){return{name:e,parameters:Io(u.slice(0,1).concat(u.slice(3)))}},n}(function(t){for(var n=[],e=1;e<arguments.length;e++)n[e-1]=arguments[e];var r=[t].concat(n);return t.config({name:b(o)}).fold(function(){throw new Error("We could not find any behaviour configuration for: "+o+". Using API: "+u)},function(n){var e=Array.prototype.slice.call(r,1);return i.apply(undefined,[t,n.config,n.state].concat(e))})},u,i)}function Xr(n){return{key:n,value:undefined}}function qr(n){var e=Xt("Creating behaviour: "+n.name,Vo,n);return function(n,e,t,r,o,i){var u=Pt(n),c=nr(e,[er("config",n)]);return Ro(u,c,e,t,r,o,i)}(e.fields,e.name,e.active,e.apis,e.extra,e.state)}function Yr(n,e,t){if(!(re(t)||ue(t)||ae(t)))throw l.console.error("Invalid call to Attr.set. Key ",e,":: Value ",t,":: Element ",n),new Error("Attribute value was not simple");n.setAttribute(e,t+"")}function Kr(n,e,t){Yr(n.dom(),e,t)}function Jr(n,e){var t=n.dom();Nn(e,function(n,e){Yr(t,e,n)})}function Qr(n,e){var t=n.dom().getAttribute(e);return null===t?undefined:t}function Zr(n,e){var t=n.dom();return!(!t||!t.hasAttribute)&&t.hasAttribute(e)}function no(n,e){n.dom().removeAttribute(e)}function eo(n,e){var t=Qr(n,e);return t===undefined||""===t?[]:t.split(" ")}function to(n){return n.dom().classList!==undefined}function ro(n,e){return function(n,e,t){var r=eo(n,e).concat([t]);return Kr(n,e,r.join(" ")),!0}(n,"class",e)}function oo(n,e){return function(n,e,t){var r=D(eo(n,e),function(n){return n!==t});return 0<r.length?Kr(n,e,r.join(" ")):no(n,e),!1}(n,"class",e)}function io(n,e){to(n)?n.dom().classList.add(e):ro(n,e)}function uo(n){0===(to(n)?n.dom().classList:function(n){return eo(n,"class")}(n)).length&&no(n,"class")}function co(n,e){to(n)?n.dom().classList.remove(e):oo(n,e),uo(n)}function ao(n,e){return to(n)&&n.dom().classList.contains(e)}function fo(n,e,t){co(n,t),io(n,e)}function so(n){n.dom().focus()}function lo(n){n.dom().blur()}function mo(n){var e=n!==undefined?n.dom():l.document;return Fn.from(e.activeElement).map(Je.fromDom)}function go(e){return mo(an(e)).filter(function(n){return e.dom().contains(n.dom())})}function po(n){return n.dom().innerHTML}function ho(n,e){var t=an(n).dom(),r=Je.fromDom(t.createDocumentFragment()),o=function(n,e){var t=(e||l.document).createElement("div");return t.innerHTML=n,at(Je.fromDom(t))}(e,t);gn(r,o),pn(n),ft(n,r)}function vo(n){return function(n,e){return Je.fromDom(n.dom().cloneNode(e))}(n,!1)}function yo(n){return function(n){var e=Je.fromTag("div"),t=Je.fromDom(n.dom().cloneNode(!0));return ft(e,t),po(e)}(vo(n))}function bo(n){return yo(n)}function xo(n){for(var e=[],t=function(n){e.push(n)},r=0;r<n.length;r++)n[r].each(t);return e}function wo(n,e){for(var t=0;t<n.length;t++){var r=e(n[t],t);if(r.isSome())return r}return Fn.none()}var So,To,Oo,ko=function(n,e,t){return Ar(n,function(n){return e(n).isSome()},t).bind(e)},Eo=Hr(Ue()),Co=Hr($e()),Do=Hr(Ge()),Mo=(So=Pe(),function(n){return _r(So,n)}),Io=function(n){return de(n,function(n){return function(n,e){return function(n,e,t){return""===e||!(n.length<e.length)&&n.substr(t,t+e.length)===e}(n,e,n.length-e.length)}(n,"/*")?n.substring(0,n.length-"/*".length):n})},Ro=function(t,n,r,o,e,i,u){function c(n){return Mn(n,r)?n[r]():Fn.none()}var a=S(e,function(n,e){return Wr(r,n,e)}),f=S(i,function(n,e){return Gr(n,e)}),s=x(x(x({},f),a),{revoke:d(Xr,r),config:function(n){var e=Xt(r+"-config",t,n);return{key:r,value:{config:e,me:s,configAsRaw:X(function(){return Xt(r+"-config",t,n)}),initialConfig:n,state:u}}},schema:function(){return n},exhibit:function(n,t){return c(n).bind(function(e){return Dt(o,"exhibit").map(function(n){return n(t,e.config,e.state)})}).getOr(Ur({}))},name:function(){return r},handlers:function(n){return c(n).map(function(n){return kn("events",function(n,e){return{}})(o)(n.config,n.state)}).getOr({})}});return s},Ao={init:function(){return Fo({readState:function(){return"No State required"}})}},Fo=function(n){return n},Bo=function(n){return Cn(n)},Vo=Pt([Yt("fields"),Yt("name"),tr("active",{}),tr("apis",{}),tr("state",Ao),tr("extra",{})]),No=Pt([Yt("branchKey"),Yt("branches"),Yt("name"),tr("active",{}),tr("apis",{}),tr("state",Ao),tr("extra",{})]),jo=b(undefined),_o=/* */Object.freeze({toAlpha:function(n,e,t){fo(n.element(),e.alpha,e.omega)},toOmega:function(n,e,t){fo(n.element(),e.omega,e.alpha)},isAlpha:function(n,e,t){return ao(n.element(),e.alpha)},isOmega:function(n,e,t){return ao(n.element(),e.omega)},clear:function(n,e,t){co(n.element(),e.alpha),co(n.element(),e.omega)}}),Po=[Yt("alpha"),Yt("omega")],Ho=qr({fields:Po,name:"swapping",apis:_o}),zo=tinymce.util.Tools.resolve("tinymce.dom.DOMUtils"),Lo=tinymce.util.Tools.resolve("tinymce.ThemeManager"),Go=function(n){var e=l.document.createElement("a");e.target="_blank",e.href=n.href,e.rel="noreferrer noopener";var t=l.document.createEvent("MouseEvents");t.initMouseEvent("click",!0,!0,l.window,0,0,0,0,0,!1,!1,!1,!1,0,null),l.document.body.appendChild(e),e.dispatchEvent(t),l.document.body.removeChild(e)},Uo={formatChanged:b("formatChanged"),orientationChanged:b("orientationChanged"),dropupDismissed:b("dropupDismissed")},$o=/* */Object.freeze({events:function(e){return Nr([_r(_e(),function(o,i){var u=e.channels,n=function(n,e){return e.universal()?n:D(n,function(n){return k(e.channels(),n)})}(Bn(u),i);C(n,function(n){var e=u[n],t=e.schema,r=Xt("channel["+n+"] data\nReceiver: "+bo(o.element()),t,i.data());e.onReceive(o,r)})})])}}),Wo="unknown";(Oo=To=To||{})[Oo.STOP=0]="STOP",Oo[Oo.NORMAL=1]="NORMAL",Oo[Oo.LOGGING=2]="LOGGING";function Xo(e,n,t){switch(Dt(yi.get(),e).orThunk(function(){var n=Bn(yi.get());return wo(n,function(n){return-1<e.indexOf(n)?Fn.some(yi.get()[n]):Fn.none()})}).getOr(To.NORMAL)){case To.NORMAL:return t(xi());case To.LOGGING:var r=function(e,t){var r=[],o=(new Date).getTime();return{logEventCut:function(n,e,t){r.push({outcome:"cut",target:e,purpose:t})},logEventStopped:function(n,e,t){r.push({outcome:"stopped",target:e,purpose:t})},logNoParent:function(n,e,t){r.push({outcome:"no-parent",target:e,purpose:t})},logEventNoHandlers:function(n,e){r.push({outcome:"no-handlers-left",target:e})},logEventResponse:function(n,e,t){r.push({outcome:"response",purpose:t,target:e})},write:function(){var n=(new Date).getTime();k(["mousemove","mouseover","mouseout",Ge()],e)||l.console.log(e,{event:e,time:n-o,target:t.dom(),sequence:de(r,function(n){return k(["cut","stopped","response"],n.outcome)?"{"+n.purpose+"} "+n.outcome+" at ("+bo(n.target)+")":n.outcome})})}}}(e,n),o=t(r);return r.write(),o;case To.STOP:return!0}}function qo(n,e,t){return Xo(n,e,t)}function Yo(n,e,t){return function(){var n=new Error;if(n.stack===undefined)return;var e=n.stack.split("\n");R(e,function(e){return 0<e.indexOf("alloy")&&!E(bi,function(n){return-1<e.indexOf(n)})}).getOr(Wo)}(),kr(e,e,t,Gt(function(t){return vt.value(function(){for(var n=[],e=0;e<arguments.length;e++)n[e]=arguments[e];return t.apply(undefined,n)})}))}function Ko(n){return Yo(0,n,xn(w))}function Jo(n){return Yo(0,n,xn(Fn.none))}function Qo(n){return Yo(0,n,Tt())}function Zo(n){return Yo(0,n,Tt())}function ni(n,e){return or(n,b(e))}function ei(n){return or(n,y)}function ti(n,e,t){var r=e.aria;r.update(n,r,t.get())}function ri(e,n,t){n.toggleClass.each(function(n){t.get()?io(e.element(),n):co(e.element(),n)})}function oi(n,e,t){Di(n,e,t,!t.get())}function ii(n,e,t){t.set(!0),ri(n,e,t),ti(n,e,t)}function ui(n,e,t){t.set(!1),ri(n,e,t),ti(n,e,t)}function ci(n,e,t){Di(n,e,t,e.selected)}function ai(){function n(n,e){e.stop(),$(n)}return[_r(Re(),n),_r(ze(),n),Lr(xe()),Lr(Te())]}function fi(n,e){e.ignore||(so(n.element()),e.onFocus(n))}function si(n){return n.style!==undefined&&ce(n.style.getPropertyValue)}function li(n,e,t){if(!re(t))throw l.console.error("Invalid call to CSS.set. Property ",e,":: Value ",t,":: Element ",n),new Error("CSS value must be a string: "+t);si(n)&&n.style.setProperty(e,t)}function di(n,e){var t=n.dom();Nn(e,function(n,e){li(t,e,n)})}function mi(n,e){var t=n.dom(),r=l.window.getComputedStyle(t).getPropertyValue(e),o=""!==r||K(n)?r:Ui(t,e);return null===o?undefined:o}function gi(n,e){var t=n.dom(),r=Ui(t,e);return Fn.from(r).filter(function(n){return 0<n.length})}function pi(n,e){!function(n,e){si(n)&&n.style.removeProperty(e)}(n.dom(),e),Zr(n,"style")&&""===function(n){return n.replace(/^\s+|\s+$/g,"")}(Qr(n,"style"))&&no(n,"style")}function hi(n){return n.dom().offsetWidth}var vi,yi=Pn({}),bi=["alloy/data/Fields","alloy/debugging/Debugging"],xi=b({logEventCut:w,logEventStopped:w,logNoParent:w,logEventNoHandlers:w,logEventResponse:w,write:w}),wi=b([Yt("menu"),Yt("selectedMenu")]),Si=b([Yt("item"),Yt("selectedItem")]),Ti=(b(Sr(Si().concat(wi()))),b(Sr(Si()))),Oi=Jt("initSize",[Yt("numColumns"),Yt("numRows")]),ki=b(Oi),Ei=[Kt("channels",Ut(vt.value,Pt([Qo("onReceive"),tr("schema",Dr())])))],Ci=qr({fields:Ei,name:"receiving",active:$o}),Di=function(n,e,t,r){(r?ii:ui)(n,e,t)},Mi=/* */Object.freeze({onLoad:ci,toggle:oi,isOn:function(n,e,t){return t.get()},on:ii,off:ui,set:Di}),Ii=/* */Object.freeze({exhibit:function(n,e,t){return Ur({})},events:function(n,e){var t=function(e,t,r){return Mo(function(n){r(n,e,t)})}(n,e,oi),r=$r(n,e,ci);return Nr(F([n.toggleOnExecute?[t]:[],[r]]))}}),Ri=function(n,e,t){Kr(n.element(),"aria-expanded",t)},Ai=[tr("selected",!1),Qt("toggleClass"),tr("toggleOnExecute",!0),rr("aria",{mode:"none"},qt("mode",{pressed:[tr("syncWithExpanded",!1),ni("update",function(n,e,t){Kr(n.element(),"aria-pressed",t),e.syncWithExpanded&&Ri(n,e,t)})],checked:[ni("update",function(n,e,t){Kr(n.element(),"aria-checked",t)})],expanded:[ni("update",Ri)],selected:[ni("update",function(n,e,t){Kr(n.element(),"aria-selected",t)})],none:[ni("update",w)]}))],Fi=qr({fields:Ai,name:"toggling",active:Ii,apis:Mi,state:(vi=!1,{init:function(){var e=Pn(vi);return{get:function(){return e.get()},set:function(n){return e.set(n)},clear:function(){return e.set(vi)},readState:function(){return e.get()}}}})}),Bi=function(t,r){return Ci.config({channels:En(Uo.formatChanged(),{onReceive:function(n,e){e.command===t&&r(n,e.state)}})})},Vi=function(n){return Ci.config({channels:En(Uo.orientationChanged(),{onReceive:n})})},Ni=function(n,e){return{key:n,value:{onReceive:e}}},ji="tinymce-mobile",_i={resolve:function(n){return ji+"-"+n},prefix:b(ji)},Pi=/* */Object.freeze({focus:fi,blur:function(n,e){e.ignore||lo(n.element())},isFocused:function(n){return function(n){var e=an(n).dom();return n.dom()===e.activeElement}(n.element())}}),Hi=/* */Object.freeze({exhibit:function(n,e){var t=e.ignore?{}:{attributes:{tabindex:"-1"}};return Ur(t)},events:function(t){return Nr([_r(Ve(),function(n,e){fi(n,t),e.stop()})].concat(t.stopMousedown?[_r(Te(),function(n,e){e.event().prevent()})]:[]))}}),zi=[Ko("onFocus"),tr("stopMousedown",!1),tr("ignore",!1)],Li=qr({fields:zi,name:"focusing",active:Hi,apis:Pi}),Gi=function(n,e,t){var r=n.dom();li(r,e,t)},Ui=function(n,e){return si(n)?n.style.getPropertyValue(e):""};function $i(r,o){function n(n){var e=o(n);if(e<=0||null===e){var t=mi(n,r);return parseFloat(t)||0}return e}function i(o,n){return I(n,function(n,e){var t=mi(o,e),r=t===undefined?0:parseInt(t,10);return isNaN(r)?n:n+r},0)}return{set:function(n,e){if(!ae(e)&&!e.match(/^[0-9]+$/))throw new Error(r+".set accepts only positive integer values. Value was "+e);var t=n.dom();si(t)&&(t.style[r]=e+"px")},get:n,getOuter:n,aggregate:i,max:function(n,e,t){var r=i(n,t);return r<e?e-r:0}}}function Wi(n){return yu.get(n)}function Xi(n,e,t){return D(function(n,e){for(var t=ce(e)?e:c,r=n.dom(),o=[];null!==r.parentNode&&r.parentNode!==undefined;){var i=r.parentNode,u=Je.fromDom(i);if(o.push(u),!0===t(u))break;r=i}return o}(n,t),e)}function qi(n,e){return D(function(e){return fn(e).map(at).map(function(n){return D(n,function(n){return!cn(e,n)})}).getOr([])}(n),e)}function Yi(n,e){return on(e,n)}function Ki(n){return un(n)}function Ji(n,e,t){return Rr(n,function(n){return tn(n,e)},t)}function Qi(n,e){return un(e,n)}function Zi(n,e,t){return Ir(tn,Ji,n,e,t)}function nu(n,e,t){var r=N(n.slice(0,e)),o=N(n.slice(e+1));return R(r.concat(o),t)}function eu(n,e,t){var r=N(n.slice(0,e));return R(r,t)}function tu(n,e,t){var r=n.slice(0,e),o=n.slice(e+1);return R(o.concat(r),t)}function ru(n,e,t){var r=n.slice(e+1);return R(r,t)}function ou(t){return function(n){var e=n.raw();return k(t,e.which)}}function iu(n){return function(e){return V(n,function(n){return n(e)})}}function uu(n){return!0===n.raw().shiftKey}function cu(n){return!0===n.raw().ctrlKey}function au(n,e){return{matches:n,classification:e}}function fu(n,e,t,r){var o=n+e;return r<o?t:o<t?r:o}function su(n,e,t){return n<=e?e:t<=n?t:n}function lu(t,r,n,o){var e=Yi(t.element(),"."+r.highlightClass);C(e,function(e){E(o,function(n){return n.element()===e})||(co(e,r.highlightClass),t.getSystem().getByDom(e).each(function(n){r.onDehighlight(t,n),G(n,qe())}))})}function du(n,e,t,r){lu(n,e,0,[r]),xu(n,e,t,r)||(io(r.element(),e.highlightClass),e.onHighlight(n,r),G(r,Xe()))}function mu(t,e,n,r){var o=Yi(t.element(),"."+e.itemClass);return A(o,function(n){return ao(n,e.highlightClass)}).bind(function(n){var e=fu(n,r,0,o.length-1);return t.getSystem().getByDom(o[e]).toOption()})}function gu(n,e,t){e.exists(function(e){return t.exists(function(n){return cn(n,e)})})||U(n,We(),{prevFocus:e,newFocus:t})}function pu(){function o(n){return go(n.element())}return{get:o,set:function(n,e){var t=o(n);n.getSystem().triggerFocus(e,n.element());var r=o(n);gu(n,t,r)}}}var hu,vu,yu=$i("height",function(n){var e=n.dom();return K(n)?e.getBoundingClientRect().height:e.offsetHeight}),bu=m(uu),xu=function(n,e,t,r){return ao(r.element(),e.highlightClass)},wu=function(n,e,t,r){var o=Yi(n.element(),"."+e.itemClass);return Fn.from(o[r]).fold(function(){return vt.error("No element found with index "+r)},n.getSystem().getByDom)},Su=function(e,n,t){return Qi(e.element(),"."+n.itemClass).bind(function(n){return e.getSystem().getByDom(n).toOption()})},Tu=function(e,n,t){var r=Yi(e.element(),"."+n.itemClass);return(0<r.length?Fn.some(r[r.length-1]):Fn.none()).bind(function(n){return e.getSystem().getByDom(n).toOption()})},Ou=function(e,n,t){var r=Yi(e.element(),"."+n.itemClass);return xo(de(r,function(n){return e.getSystem().getByDom(n).toOption()}))},ku=/* */Object.freeze({dehighlightAll:function(n,e,t){return lu(n,e,0,[])},dehighlight:function(n,e,t,r){xu(n,e,t,r)&&(co(r.element(),e.highlightClass),e.onDehighlight(n,r),G(r,qe()))},highlight:du,highlightFirst:function(e,t,r){Su(e,t).each(function(n){du(e,t,r,n)})},highlightLast:function(e,t,r){Tu(e,t).each(function(n){du(e,t,r,n)})},highlightAt:function(e,t,r,n){wu(e,t,r,n).fold(function(n){throw new Error(n)},function(n){du(e,t,r,n)})},highlightBy:function(e,t,r,n){var o=Ou(e,t);R(o,n).each(function(n){du(e,t,r,n)})},isHighlighted:xu,getHighlighted:function(e,n,t){return Qi(e.element(),"."+n.highlightClass).bind(function(n){return e.getSystem().getByDom(n).toOption()})},getFirst:Su,getLast:Tu,getPrevious:function(n,e,t){return mu(n,e,0,-1)},getNext:function(n,e,t){return mu(n,e,0,1)},getCandidates:Ou}),Eu=[Yt("highlightClass"),Yt("itemClass"),Ko("onHighlight"),Ko("onDehighlight")],Cu=qr({fields:Eu,name:"highlighting",apis:ku});(vu=hu=hu||{}).OnFocusMode="onFocus",vu.OnEnterOrSpaceMode="onEnterOrSpace",vu.OnApiMode="onApi";function Du(n,e,t,i,u){function c(e,t,n,r,o){return function(n,e){return R(n,function(n){return n.matches(e)}).map(function(n){return n.classification})}(n(e,t,r,o),t.event()).bind(function(n){return n(e,t,r,o)})}var r={schema:function(){return n.concat([tr("focusManager",pu()),rr("focusInside","onFocus",Gt(function(n){return k(["onFocus","onEnterOrSpace","onApi"],n)?vt.value(n):vt.error("Invalid value for focusInside")})),ni("handler",r),ni("state",e),ni("sendFocusIn",u)])},processKey:c,toEvents:function(r,o){var n=r.focusInside!==hu.OnFocusMode?Fn.none():u(r).map(function(t){return _r(Ve(),function(n,e){t(n,r,o),e.stop()})});return Nr(n.toArray().concat([_r(Ce(),function(n,e){c(n,e,t,r,o).fold(function(){!function(e,t){var n=ou([32].concat([13]))(t.event());r.focusInside===hu.OnEnterOrSpaceMode&&n&&ir(e,t)&&u(r).each(function(n){n(e,r,o),t.stop()})}(n,e)},function(n){e.stop()})}),_r(De(),function(n,e){c(n,e,i,r,o).each(function(n){e.stop()})})]))}};return r}function Mu(n){function i(n,e){var t=n.visibilitySelector.bind(function(n){return Zi(e,n)}).getOr(e);return 0<Wi(t)}function e(e,t){(function(n,e){var t=Yi(n.element(),e.selector),r=D(t,function(n){return i(e,n)});return Fn.from(r[e.firstTabstop])})(e,t).each(function(n){t.focusManager.set(e,n)})}function u(e,n,t,r,o){return o(n,t,function(n){return function(n,e){return i(n,e)&&n.useTabstopAt(e)}(r,n)}).fold(function(){return r.cyclic?Fn.some(!0):Fn.none()},function(n){return r.focusManager.set(e,n),Fn.some(!0)})}function c(e,n,t,r){var o=Yi(e.element(),t.selector);return function(n,e){return e.focusManager.get(n).bind(function(n){return Zi(n,e.selector)})}(e,t).bind(function(n){return A(o,d(cn,n)).bind(function(n){return u(e,o,n,t,r)})})}var t=[Qt("onEscape"),Qt("onEnter"),tr("selector",'[data-alloy-tabstop="true"]:not(:disabled)'),tr("firstTabstop",0),tr("useTabstopAt",b(!0)),Qt("visibilitySelector")].concat([n]),r=b([au(iu([uu,ou([9])]),function(n,e,t,r){var o=t.cyclic?nu:eu;return c(n,0,t,o)}),au(ou([9]),function(n,e,t,r){var o=t.cyclic?tu:ru;return c(n,0,t,o)}),au(ou([27]),function(e,t,n,r){return n.onEscape.bind(function(n){return n(e,t)})}),au(iu([bu,ou([13])]),function(e,t,n,r){return n.onEnter.bind(function(n){return n(e,t)})})]),o=b([]);return Du(t,Ao.init,r,o,function(){return Fn.some(e)})}function Iu(n){return"input"===q(n)&&"radio"!==Qr(n,"type")||"textarea"===q(n)}function Ru(n,e,t){return Iu(t)&&ou([32])(e.event())?Fn.none():function(n,e,t){return W(n,t,Pe()),Fn.some(!0)}(n,0,t)}function Au(n,e){return Fn.some(!0)}function Fu(n,e,t){return t.execute(n,e,n.element())}function Bu(n){var t=Pn(Fn.none());return Fo({readState:function(){return t.get().map(function(n){return{numRows:n.numRows(),numColumns:n.numColumns()}}).getOr({numRows:"?",numColumns:"?"})},setGridSize:function(n,e){t.set(Fn.some({numRows:b(n),numColumns:b(e)}))},getNumRows:function(){return t.get().map(function(n){return n.numRows()})},getNumColumns:function(){return t.get().map(function(n){return n.numColumns()})}})}function Vu(e,t){return function(n){return"rtl"===Yc(n)?t:e}}function Nu(i){return function(n,e,t,r){var o=i(n.element());return Kc(o,n,e,t,r)}}function ju(n,e){var t=Vu(n,e);return Nu(t)}function _u(n,e){var t=Vu(e,n);return Nu(t)}function Pu(o){return function(n,e,t,r){return Kc(o,n,e,t,r)}}function Hu(n){return!function(n){return n.offsetWidth<=0&&n.offsetHeight<=0}(n.dom())}function zu(n,e,t){var r=d(cn,e),o=Yi(n,t);return function(e,n){return A(e,n).map(function(n){return na({index:n,candidates:e})})}(D(o,Hu),r)}function Lu(n,e){return A(n,function(n){return cn(e,n)})}function Gu(t,n,r,e){return e(Math.floor(n/r),n%r).bind(function(n){var e=n.row()*r+n.column();return 0<=e&&e<t.length?Fn.some(t[e]):Fn.none()})}function Uu(o,n,i,u,c){return Gu(o,n,u,function(n,e){var t=n===i-1?o.length-n*u:u,r=fu(e,c,0,t-1);return Fn.some({row:b(n),column:b(r)})})}function $u(i,n,u,c,a){return Gu(i,n,c,function(n,e){var t=fu(n,a,0,u-1),r=t===u-1?i.length-t*c:c,o=su(e,0,r-1);return Fn.some({row:b(t),column:b(o)})})}function Wu(e,t,n){Qi(e.element(),t.selector).each(function(n){t.focusManager.set(e,n)})}function Xu(o){return function(n,e,t,r){return zu(n,e,t.selector).bind(function(n){return o(n.candidates(),n.index(),r.getNumRows().getOr(t.initSize.numRows),r.getNumColumns().getOr(t.initSize.numColumns))})}}function qu(n,e,t,r){return t.captureTab?Fn.some(!0):Fn.none()}function Yu(n,e,t,o){var i=function(n,e,t){var r=fu(e,o,0,t.length-1);return r===n?Fn.none():function(n){return"button"===q(n)&&"disabled"===Qr(n,"disabled")}(t[r])?i(n,r,t):Fn.from(t[r])};return zu(n,t,e).bind(function(n){var e=n.index(),t=n.candidates();return i(e,e,t)})}function Ku(e,t,r){return function(n,e){return e.focusManager.get(n).bind(function(n){return Zi(n,e.selector)})}(e,r).bind(function(n){return r.execute(e,t,n)})}function Ju(e,t){t.getInitial(e).orThunk(function(){return Qi(e.element(),t.selector)}).each(function(n){t.focusManager.set(e,n)})}function Qu(n,e,t){return Yu(n,t.selector,e,-1)}function Zu(n,e,t){return Yu(n,t.selector,e,1)}function nc(r){return function(n,e,t){return r(n,e,t).bind(function(){return t.executeOnMove?Ku(n,e,t):Fn.some(!0)})}}function ec(n,e,t,r){return t.onEscape(n,e)}function tc(n,e,t){return Fn.from(n[e]).bind(function(n){return Fn.from(n[t]).map(function(n){return da({rowIndex:e,columnIndex:t,cell:n})})})}function rc(n,e,t,r){var o=n[e].length,i=fu(t,r,0,o-1);return tc(n,e,i)}function oc(n,e,t,r){var o=fu(t,r,0,n.length-1),i=n[o].length,u=su(e,0,i-1);return tc(n,o,u)}function ic(n,e,t,r){var o=n[e].length,i=su(t+r,0,o-1);return tc(n,e,i)}function uc(n,e,t,r){var o=su(t+r,0,n.length-1),i=n[o].length,u=su(e,0,i-1);return tc(n,o,u)}function cc(e,t){t.previousSelector(e).orThunk(function(){var n=t.selectors;return Qi(e.element(),n.cell)}).each(function(n){t.focusManager.set(e,n)})}function ac(n,e){return function(o,t,i){var u=i.cycles?n:e;return Zi(t,i.selectors.row).bind(function(n){var e=Yi(n,i.selectors.cell);return Lu(e,t).bind(function(t){var r=Yi(o,i.selectors.row);return Lu(r,n).bind(function(n){var e=function(n,e){return de(n,function(n){return Yi(n,e.selectors.cell)})}(r,i);return u(e,n,t).map(function(n){return n.cell()})})})})}}function fc(e,t,r){return r.focusManager.get(e).bind(function(n){return r.execute(e,t,n)})}function sc(e,t){Qi(e.element(),t.selector).each(function(n){t.focusManager.set(e,n)})}function lc(n,e,t){return Yu(n,t.selector,e,-1)}function dc(n,e,t){return Yu(n,t.selector,e,1)}function mc(e,n){return function(n,e,t){return rr(n,e,Sr(t))}(e,{},de(n,function(n){return function(e,t){return kr(e,e,Ot(),_t(function(n){return dr("The field: "+e+" is forbidden. "+t)}))}(n.name(),"Cannot configure "+n.name()+" for "+e)}).concat([or("dump",y)]))}function gc(n){return n.dump}function pc(n,e){return x(x({},n.dump),Bo(e))}function hc(n,e,t,r){return t.uiType===_a?function(n,e,t,r){return n.exists(function(n){return n!==t.owner})?Pa.single(!0,b(t)):Dt(r,t.name).fold(function(){throw new Error("Unknown placeholder component: "+t.name+"\nKnown: ["+Bn(r)+"]\nNamespace: "+n.getOr("none")+"\nSpec: "+JSON.stringify(t,null,2))},function(n){return n.replace()})}(n,0,t,r):Pa.single(!1,b(t))}function vc(e,t,n,r){var o=S(r,function(n,e){return function(n,e){var t=!1;return{name:b(n),required:function(){return e.fold(function(n,e){return n},function(n,e){return n})},used:function(){return t},replace:function(){if(!0===t)throw new Error("Trying to use the same placeholder more than once: "+n);return t=!0,e}}}(e,n)}),i=function(e,t,n,r){return B(n,function(n){return Ha(e,t,n,r)})}(e,t,n,o);return Nn(o,function(n){if(!1===n.used()&&n.required())throw new Error("Placeholder: "+n.name()+" was not found in components list\nNamespace: "+e.getOr("none")+"\nComponents: "+JSON.stringify(t.components,null,2))}),i}function yc(n){var e=(new Date).getTime();return n+"_"+Math.floor(1e9*Math.random())+ ++Ua+String(e)}function bc(n){function e(n){return n.name}return n.fold(e,e,e,e)}function xc(t,r){return function(n){var e=Xt("Converting part type",r,n);return t(e)}}function wc(n,e,t,r){return xt(e.defaults(n,t,r),t,{uid:n.partUids[e.name]},e.overrides(n,t,r))}function Sc(o,n){var e={};return C(n,function(n){(function(n){return n.fold(Fn.some,Fn.none,Fn.some,Fn.some)})(n).each(function(t){var r=cf(o,t.pname);e[t.name]=function(n){var e=Xt("Part: "+t.name+" in "+o,Sr(t.schema),n);return x(x({},r),{config:n,validated:e})}})}),e}function Tc(n,e,t){return function(n,t,e){var i={},r={};return C(e,function(n){n.fold(function(r){i[r.pname]=za(!0,function(n,e,t){return r.factory.sketch(wc(n,r,e,t))})},function(n){var e=t.parts[n.name];r[n.name]=b(n.factory.sketch(wc(t,n,e[uf()]),e))},function(r){i[r.pname]=za(!1,function(n,e,t){return r.factory.sketch(wc(n,r,e,t))})},function(o){i[o.pname]=La(!0,function(e,n,t){var r=e[o.name];return de(r,function(n){return o.factory.sketch(xt(o.defaults(e,n,t),n,o.overrides(e,n)))})})})}),{internals:b(i),externals:b(r)}}(0,e,t)}function Oc(n,e,t){return vc(Fn.some(n),e,e.components,t)}function kc(n,e,t){var r=e.partUids[t];return n.getSystem().getByUid(r).toOption()}function Ec(n,e,t){return kc(n,e,t).getOrDie("Could not find part: "+t)}function Cc(e,n){var t=function(n){return de(n,bc)}(n);return Cn(de(t,function(n){return{key:n,value:e+"-"+n}}))}function Dc(e){return kr("partUids","partUids",Et(function(n){return Cc(n.uid,e)}),Dr())}function Mc(n){return En(af,n)}function Ic(r){return function(n,e){var t=e.toString(),r=t.indexOf(")")+1,o=t.indexOf("("),i=t.substring(o+1,r-1).split(/,\s*/);return n.toFunctionAnnotation=function(){return{name:"OVERRIDE",parameters:Io(i.slice(1))}},n}(function(n){for(var e=[],t=1;t<arguments.length;t++)e[t-1]=arguments[t];return r.apply(undefined,[n.getApis()].concat([n].concat(e)))},r)}function Rc(n){return yc(n)}function Ac(n,e,t,r,o){var i=function(n,e){return(0<n.length?[Jt("parts",n)]:[]).concat([Yt("uid"),tr("dom",{}),tr("components",[]),ei("originalSpec"),tr("debug.sketcher",{})]).concat(e)}(r,o);return Xt(n+" [SpecSchema]",Pt(i.concat(e)),t)}function Fc(n,e,t,r,o){var i=pf(o),u=function(n){return B(n,function(n){return n.fold(Fn.none,Fn.some,Fn.none,Fn.none).map(function(n){return Jt(n.name,n.schema.concat([ei(uf())]))}).toArray()})}(t),c=Dc(t),a=Ac(n,e,i,u,[c]),f=Tc(0,a,t);return r(a,Oc(n,a,f.internals()),i,f.externals())}var Bc,Vc,Nc,jc,_c,Pc,Hc,zc,Lc,Gc,Uc=Mu(or("cyclic",b(!1))),$c=Mu(or("cyclic",b(!0))),Wc=[tr("execute",Ru),tr("useSpace",!1),tr("useEnter",!0),tr("useControlEnter",!1),tr("useDown",!1)],Xc=Du(Wc,Ao.init,function(n,e,t,r){var o=t.useSpace&&!Iu(n.element())?[32]:[],i=t.useEnter?[13]:[],u=t.useDown?[40]:[],c=o.concat(i).concat(u);return[au(ou(c),Fu)].concat(t.useControlEnter?[au(iu([cu,ou([13])]),Fu)]:[])},function(n,e,t,r){return t.useSpace&&!Iu(n.element())?[au(ou([32]),Au)]:[]},function(){return Fn.none()}),qc=/* */Object.freeze({flatgrid:Bu,init:function(n){return n.state(n)}}),Yc=function(n){return"rtl"===mi(n,"direction")?"rtl":"ltr"},Kc=function(e,t,n,r,o){return r.focusManager.get(t).bind(function(n){return e(t.element(),n,r,o)}).map(function(n){return r.focusManager.set(t,n),!0})},Jc=Pu,Qc=Pu,Zc=Pu,na=nn(["index","candidates"],[]),ea=[Yt("selector"),tr("execute",Ru),Jo("onEscape"),tr("captureTab",!1),ki()],ta=Xu(function(n,e,t,r){return Uu(n,e,t,r,-1)}),ra=Xu(function(n,e,t,r){return Uu(n,e,t,r,1)}),oa=Xu(function(n,e,t,r){return $u(n,e,t,r,-1)}),ia=Xu(function(n,e,t,r){return $u(n,e,t,r,1)}),ua=b([au(ou([37]),ju(ta,ra)),au(ou([39]),_u(ta,ra)),au(ou([38]),Jc(oa)),au(ou([40]),Qc(ia)),au(iu([uu,ou([9])]),qu),au(iu([bu,ou([9])]),qu),au(ou([27]),function(n,e,t,r){return t.onEscape(n,e)}),au(ou([32].concat([13])),function(e,t,r,n){return function(n,e){return e.focusManager.get(n).bind(function(n){return Zi(n,e.selector)})}(e,r).bind(function(n){return r.execute(e,t,n)})})]),ca=b([au(ou([32]),Au)]),aa=Du(ea,Bu,ua,ca,function(){return Fn.some(Wu)}),fa=[Yt("selector"),tr("getInitial",Fn.none),tr("execute",Ru),Jo("onEscape"),tr("executeOnMove",!1),tr("allowVertical",!0)],sa=b([au(ou([32]),Au)]),la=Du(fa,Ao.init,function(n,e,t,r){var o=[37].concat(t.allowVertical?[38]:[]),i=[39].concat(t.allowVertical?[40]:[]);return[au(ou(o),nc(ju(Qu,Zu))),au(ou(i),nc(_u(Qu,Zu))),au(ou([13]),Ku),au(ou([32]),Ku),au(ou([27]),ec)]},sa,function(){return Fn.some(Ju)}),da=nn(["rowIndex","columnIndex","cell"],[]),ma=[Jt("selectors",[Yt("row"),Yt("cell")]),tr("cycles",!0),tr("previousSelector",Fn.none),tr("execute",Ru)],ga=ac(function(n,e,t){return rc(n,e,t,-1)},function(n,e,t){return ic(n,e,t,-1)}),pa=ac(function(n,e,t){return rc(n,e,t,1)},function(n,e,t){return ic(n,e,t,1)}),ha=ac(function(n,e,t){return oc(n,t,e,-1)},function(n,e,t){return uc(n,t,e,-1)}),va=ac(function(n,e,t){return oc(n,t,e,1)},function(n,e,t){return uc(n,t,e,1)}),ya=b([au(ou([37]),ju(ga,pa)),au(ou([39]),_u(ga,pa)),au(ou([38]),Jc(ha)),au(ou([40]),Qc(va)),au(ou([32].concat([13])),function(e,t,r){return go(e.element()).bind(function(n){return r.execute(e,t,n)})})]),ba=b([au(ou([32]),Au)]),xa=Du(ma,Ao.init,ya,ba,function(){return Fn.some(cc)}),wa=[Yt("selector"),tr("execute",Ru),tr("moveOnTab",!1)],Sa=b([au(ou([38]),Zc(lc)),au(ou([40]),Zc(dc)),au(iu([uu,ou([9])]),function(n,e,t){return t.moveOnTab?Zc(lc)(n,e,t):Fn.none()}),au(iu([bu,ou([9])]),function(n,e,t){return t.moveOnTab?Zc(dc)(n,e,t):Fn.none()}),au(ou([13]),fc),au(ou([32]),fc)]),Ta=b([au(ou([32]),Au)]),Oa=Du(wa,Ao.init,Sa,Ta,function(){return Fn.some(sc)}),ka=[Jo("onSpace"),Jo("onEnter"),Jo("onShiftEnter"),Jo("onLeft"),Jo("onRight"),Jo("onTab"),Jo("onShiftTab"),Jo("onUp"),Jo("onDown"),Jo("onEscape"),tr("stopSpaceKeyup",!1),Qt("focusIn")],Ea=Du(ka,Ao.init,function(n,e,t){return[au(ou([32]),t.onSpace),au(iu([bu,ou([13])]),t.onEnter),au(iu([uu,ou([13])]),t.onShiftEnter),au(iu([uu,ou([9])]),t.onShiftTab),au(iu([bu,ou([9])]),t.onTab),au(ou([38]),t.onUp),au(ou([40]),t.onDown),au(ou([37]),t.onLeft),au(ou([39]),t.onRight),au(ou([32]),t.onSpace),au(ou([27]),t.onEscape)]},function(n,e,t){return t.stopSpaceKeyup?[au(ou([32]),Au)]:[]},function(n){return n.focusIn}),Ca=Uc.schema(),Da=$c.schema(),Ma=la.schema(),Ia=aa.schema(),Ra=xa.schema(),Aa=Xc.schema(),Fa=Oa.schema(),Ba=Ea.schema(),Va=(Gc=Xt("Creating behaviour: "+(Lc={branchKey:"mode",branches:/* */Object.freeze({acyclic:Ca,cyclic:Da,flow:Ma,flatgrid:Ia,matrix:Ra,execution:Aa,menu:Fa,special:Ba}),name:"keying",active:{events:function(n,e){return n.handler.toEvents(n,e)}},apis:{focusIn:function(e,t,r){t.sendFocusIn(t).fold(function(){e.getSystem().triggerFocus(e.element(),e.element())},function(n){n(e,t,r)})},setGridSize:function(n,e,t,r,o){Mn(t,"setGridSize")?t.setGridSize(r,o):l.console.error("Layout does not support setGridSize")}},state:qc}).name,No,Lc),Bc=qt(Gc.branchKey,Gc.branches),Vc=Gc.name,Nc=Gc.active,jc=Gc.apis,_c=Gc.extra,Pc=Gc.state,zc=nr(Vc,[Zt("config",Hc=Bc)]),Ro(Hc,zc,Vc,Nc,jc,_c,Pc)),Na=mc,ja=pc,_a="placeholder",Pa=yt([{single:["required","valueThunk"]},{multiple:["required","valueThunks"]}]),Ha=function(i,u,c,a){return hc(i,0,c,a).fold(function(n,e){var t=e(u,c.config,c.validated),r=Dt(t,"components").getOr([]),o=B(r,function(n){return Ha(i,u,n,a)});return[x(x({},t),{components:o})]},function(n,e){var t=e(u,c.config,c.validated);return c.validated.preprocess.getOr(y)(t)})},za=Pa.single,La=Pa.multiple,Ga=b(_a),Ua=0,$a=yt([{required:["data"]},{external:["data"]},{optional:["data"]},{group:["data"]}]),Wa=tr("factory",{sketch:y}),Xa=tr("schema",[]),qa=Yt("name"),Ya=kr("pname","pname",kt(function(n){return"<alloy."+yc(n.name)+">"}),Dr()),Ka=or("schema",function(){return[Qt("preprocess")]}),Ja=tr("defaults",b({})),Qa=tr("overrides",b({})),Za=Sr([Wa,Xa,qa,Ya,Ja,Qa]),nf=Sr([Wa,Xa,qa,Ya,Ja,Qa]),ef=Sr([Wa,Ka,qa,Yt("unit"),Ya,Ja,Qa]),tf=xc($a.required,Za),rf=xc($a.optional,nf),of=xc($a.group,ef),uf=b("entirety"),cf=function(n,e){return{uiType:Ga(),owner:n,name:e}},af=yc("alloy-premade"),ff=b("alloy-id-"),sf=b("data-alloy-id"),lf=ff(),df=sf(),mf=function(n,e){Object.defineProperty(n.dom(),df,{value:e,writable:!0})},gf=function(n){var e=et(n)?n.dom()[df]:null;return Fn.from(e)},pf=function(n){return n.hasOwnProperty("uid")?n:x(x({},n),{uid:Rc("uid")})};function hf(n){var e=Xt("Sketcher for "+n.name,Hs,n),t=S(e.apis,Ic),r=S(e.extraApis,function(n,e){return Gr(n,e)});return x(x({name:b(e.name),partFields:b([]),configFields:b(e.configFields),sketch:function(n){return function(n,e,t,r){var o=pf(r);return t(Ac(n,e,o,[],[]),o)}(e.name,e.configFields,e.factory,n)}},t),r)}function vf(n){var e=Xt("Sketcher for "+n.name,zs,n),t=Sc(e.name,e.partFields),r=S(e.apis,Ic),o=S(e.extraApis,function(n,e){return Gr(n,e)});return x(x({name:b(e.name),partFields:b(e.partFields),configFields:b(e.configFields),sketch:function(n){return Fc(e.name,e.configFields,e.partFields,e.factory,n)},parts:b(t)},r),o)}function yf(n){var e=Je.fromHtml(n),t=at(e),r=function(n){var e=n.dom().attributes!==undefined?n.dom().attributes:[];return I(e,function(n,e){var t;return"class"===e.name?n:x(x({},n),((t={})[e.name]=e.value,t))},{})}(e),o=function(n){return Array.prototype.slice.call(n.dom().classList,0)}(e),i=0===t.length?{}:{innerHtml:po(e)};return x({tag:q(e),classes:o,attributes:r},i)}function bf(n){return{dom:Us(n)}}function xf(n){return Bo([Fi.config({toggleClass:_i.resolve("toolbar-button-selected"),toggleOnExecute:!1,aria:{mode:"pressed"}}),Bi(n,function(n,e){(e?Fi.on:Fi.off)(n)})])}function wf(n,e){var t=e.ui.registry.getAll().icons;return Fn.from(t[n]).fold(function(){return Us('<span class="${prefix}-toolbar-button ${prefix}-toolbar-group-item ${prefix}-icon-'+n+' ${prefix}-icon"></span>')},function(n){return Us('<span class="${prefix}-toolbar-button ${prefix}-toolbar-group-item">'+n+"</span>")})}function Sf(e){return rf({name:e+"-edge",overrides:function(n){return n.model.manager.edgeActions[e].fold(function(){return{}},function(r){return{events:Nr([Pr(xe(),r,[n]),Pr(Te(),r,[n]),Pr(Oe(),function(n,e,t){t.mouseIsDown.get()&&r(n,t)},[n])])}})}})}function Tf(n,e,t){e.store.manager.onLoad(n,e,t)}function Of(n,e,t){e.store.manager.onUnload(n,e,t)}function kf(){var n=Pn(null);return Fo({set:n.set,get:n.get,isNotSet:function(){return null===n.get()},clear:function(){n.set(null)},readState:function(){return{mode:"memory",value:n.get()}}})}function Ef(){var i=Pn({}),u=Pn({});return Fo({readState:function(){return{mode:"dataset",dataByValue:i.get(),dataByText:u.get()}},lookup:function(n){return Dt(i.get(),n).orThunk(function(){return Dt(u.get(),n)})},update:function(n){var e=i.get(),t=u.get(),r={},o={};C(n,function(e){r[e.value]=e,Dt(e,"meta").each(function(n){Dt(n,"text").each(function(n){o[n]=e})})}),i.set(x(x({},e),r)),u.set(x(x({},t),o))},clear:function(){i.set({}),u.set({})}})}function Cf(n,e,t,r){var o=e.store;t.update([r]),o.setValue(n,r),e.onSetValue(n,r)}function Df(n,e){sl.set(n,e)}function Mf(n){return sl.get(n)}function If(n){var e=n.event().raw();if(function(n){return-1!==n.type.indexOf("touch")}(e)){var t=e;return t.touches!==undefined&&1===t.touches.length?Fn.some(t.touches[0]).map(function(n){return dl(n.clientX,n.clientY)}):Fn.none()}var r=e;return r.clientX!==undefined?Fn.some(r).map(function(n){return dl(n.clientX,n.clientY)}):Fn.none()}function Rf(n){return n.model.minX}function Af(n){return n.model.minY}function Ff(n){return n.model.minX-1}function Bf(n){return n.model.minY-1}function Vf(n){return n.model.maxX}function Nf(n){return n.model.maxY}function jf(n){return n.model.maxX+1}function _f(n){return n.model.maxY+1}function Pf(n,e,t){return e(n)-t(n)}function Hf(n){return Pf(n,Vf,Rf)}function zf(n){return Pf(n,Nf,Af)}function Lf(n){return Hf(n)/2}function Gf(n){return zf(n)/2}function Uf(n){return n.stepSize}function $f(n){return n.snapToGrid}function Wf(n){return n.snapStart}function Xf(n){return n.rounded}function qf(n,e){return n[e+"-edge"]!==undefined}function Yf(n){return qf(n,"left")}function Kf(n){return qf(n,"right")}function Jf(n){return qf(n,"top")}function Qf(n){return qf(n,"bottom")}function Zf(n){return n.model.value.get()}function ns(n){return{x:b(n)}}function es(n){return{y:b(n)}}function ts(n,e){return{x:b(n),y:b(e)}}function rs(n,e){U(n,ml(),{value:e})}function os(n,e,t,r){return n<e?n:t<n?t:n===e?e-1:Math.max(e,n-r)}function is(n,e,t,r){return t<n?n:n<e?e:n===t?t+1:Math.min(t,n+r)}function us(n,e,t){return Math.max(e,Math.min(t,n))}function cs(n){var e=n.min,t=n.max,r=n.range,o=n.value,i=n.step,u=n.snap,c=n.snapStart,a=n.rounded,f=n.hasMinEdge,s=n.hasMaxEdge,l=n.minBound,d=n.maxBound,m=n.screenRange,g=f?e-1:e,p=s?t+1:t;if(o<l)return g;if(d<o)return p;var h=function(n,e,t){return Math.min(t,Math.max(n,e))-e}(o,l,d),v=us(h/m*r+e,g,p);return u&&e<=v&&v<=t?function(u,t,c,a,n){return n.fold(function(){var n=u-t,e=Math.round(n/a)*a;return us(t+e,t-1,c+1)},function(n){var e=(u-n)%a,t=Math.round(e/a),r=Math.floor((u-n)/a),o=Math.floor((c-n)/a),i=n+Math.min(o,r+t)*a;return Math.max(n,i)})}(v,e,t,i,c):a?Math.round(v):v}function as(n){var e=n.min,t=n.max,r=n.range,o=n.value,i=n.hasMinEdge,u=n.hasMaxEdge,c=n.maxBound,a=n.maxOffset,f=n.centerMinEdge,s=n.centerMaxEdge;return o<e?i?0:f:t<o?u?c:s:(o-e)/r*a}function fs(n){return n.element().dom().getBoundingClientRect()}function ss(n,e){return n[e]}function ls(n){var e=fs(n);return ss(e,gl)}function ds(n){var e=fs(n);return ss(e,"right")}function ms(n){var e=fs(n);return ss(e,"top")}function gs(n){var e=fs(n);return ss(e,"bottom")}function ps(n){var e=fs(n);return ss(e,"width")}function hs(n){var e=fs(n);return ss(e,"height")}function vs(n,e,t){return(n+e)/2-t}function ys(n,e){var t=fs(n),r=fs(e),o=ss(t,gl),i=ss(t,"right"),u=ss(r,gl);return vs(o,i,u)}function bs(n,e){var t=fs(n),r=fs(e),o=ss(t,"top"),i=ss(t,"bottom"),u=ss(r,"top");return vs(o,i,u)}function xs(n,e){U(n,ml(),{value:e})}function ws(n){return{x:b(n)}}function Ss(n,e,t){var r={min:Rf(e),max:Vf(e),range:Hf(e),value:t,step:Uf(e),snap:$f(e),snapStart:Wf(e),rounded:Xf(e),hasMinEdge:Yf(e),hasMaxEdge:Kf(e),minBound:ls(n),maxBound:ds(n),screenRange:ps(n)};return cs(r)}function Ts(t){return function(n,e){return function(n,e,t){var r=(0<n?is:os)(Zf(t).x(),Rf(t),Vf(t),Uf(t));return xs(e,ws(r)),Fn.some(r)}(t,n,e).map(function(){return!0})}}function Os(n,e,t,r,o,i){var u=function(e,n,t,r,o){var i=ps(e),u=r.bind(function(n){return Fn.some(ys(n,e))}).getOr(0),c=o.bind(function(n){return Fn.some(ys(n,e))}).getOr(i),a={min:Rf(n),max:Vf(n),range:Hf(n),value:t,hasMinEdge:Yf(n),hasMaxEdge:Kf(n),minBound:ls(e),minOffset:0,maxBound:ds(e),maxOffset:i,centerMinEdge:u,centerMaxEdge:c};return as(a)}(e,i,t,r,o);return ls(e)-ls(n)+u}function ks(n,e){U(n,ml(),{value:e})}function Es(n){return{y:b(n)}}function Cs(n,e,t){var r={min:Af(e),max:Nf(e),range:zf(e),value:t,step:Uf(e),snap:$f(e),snapStart:Wf(e),rounded:Xf(e),hasMinEdge:Jf(e),hasMaxEdge:Qf(e),minBound:ms(n),maxBound:gs(n),screenRange:hs(n)};return cs(r)}function Ds(t){return function(n,e){return function(n,e,t){var r=(0<n?is:os)(Zf(t).y(),Af(t),Nf(t),Uf(t));return ks(e,Es(r)),Fn.some(r)}(t,n,e).map(function(){return!0})}}function Ms(n,e,t,r,o,i){var u=function(e,n,t,r,o){var i=hs(e),u=r.bind(function(n){return Fn.some(bs(n,e))}).getOr(0),c=o.bind(function(n){return Fn.some(bs(n,e))}).getOr(i),a={min:Af(n),max:Nf(n),range:zf(n),value:t,hasMinEdge:Jf(n),hasMaxEdge:Qf(n),minBound:ms(e),minOffset:0,maxBound:gs(e),maxOffset:i,centerMinEdge:u,centerMaxEdge:c};return as(a)}(e,i,t,r,o);return ms(e)-ms(n)+u}function Is(n,e){U(n,ml(),{value:e})}function Rs(n,e){return{x:b(n),y:b(e)}}function As(t,r){return function(n,e){return function(n,e,t,r){var o=0<n?is:os,i=e?Zf(r).x():o(Zf(r).x(),Rf(r),Vf(r),Uf(r)),u=e?o(Zf(r).y(),Af(r),Nf(r),Uf(r)):Zf(r).y();return Is(t,Rs(i,u)),Fn.some(i)}(t,r,n,e).map(function(){return!0})}}function Fs(e,t,r,n){return Ws.forToolbar(t,function(){var n=r();e.setContextToolbar([{label:t+" group",items:n}])},{},n)}function Bs(n){return[function(o){function i(n){return n<0?"black":360<n?"white":"hsl("+n+", 100%, 50%)"}return Vl.sketch({dom:Us('<div class="${prefix}-slider ${prefix}-hue-slider-container"></div>'),components:[Vl.parts()["left-edge"](bf('<div class="${prefix}-hue-slider-black"></div>')),Vl.parts().spectrum({dom:Us('<div class="${prefix}-slider-gradient-container"></div>'),components:[bf('<div class="${prefix}-slider-gradient"></div>')],behaviours:Bo([Fi.config({toggleClass:_i.resolve("thumb-active")})])}),Vl.parts()["right-edge"](bf('<div class="${prefix}-hue-slider-white"></div>')),Vl.parts().thumb({dom:Us('<div class="${prefix}-slider-thumb"></div>'),behaviours:Bo([Fi.config({toggleClass:_i.resolve("thumb-active")})])})],onChange:function(n,e,t){var r=i(t.x());Gi(e.element(),"background-color",r),o.onChange(n,e,r)},onDragStart:function(n,e){Fi.on(e)},onDragEnd:function(n,e){Fi.off(e)},onInit:function(n,e,t,r){var o=i(r.x());Gi(e.element(),"background-color",o)},stepSize:10,model:{mode:"x",minX:0,maxX:360,getInitialValue:function(){return{x:function(){return o.getInitialValue()}}}},sliderBehaviours:Bo([Vi(Vl.refresh)])})}(n)]}function Vs(n){var e=n.selection.getStart(),t=Je.fromDom(e),r=Je.fromDom(n.getBody()),o=function(e,n){return(et(n)?Fn.some(n):fn(n).filter(et)).map(function(n){return Ar(n,function(n){return gi(n,"font-size").isSome()},e).bind(function(n){return gi(n,"font-size")}).getOrThunk(function(){return mi(n,"font-size")})}).getOr("")}(function(n){return cn(r,n)},t);return R(Pl,function(n){return o===n}).getOr("medium")}function Ns(n){return[bf('<span class="${prefix}-toolbar-button ${prefix}-icon-small-font ${prefix}-icon"></span>'),function(n){return _l({onChange:n.onChange,sizes:zl,category:"font",getInitialValue:n.getInitialValue})}(n),bf('<span class="${prefix}-toolbar-button ${prefix}-icon-large-font ${prefix}-icon"></span>')]}function js(n){var e=function t(n){return n.uid!==undefined}(n)&&Mn(n,"uid")?n.uid:Rc("memento");return{get:function(n){return n.getSystem().getByUid(e).getOrDie()},getOpt:function(n){return n.getSystem().getByUid(e).toOption()},asSpec:function(){return x(x({},n),{uid:e})}}}var _s,Ps,Hs=Pt([Yt("name"),Yt("factory"),Yt("configFields"),tr("apis",{}),tr("extraApis",{})]),zs=Pt([Yt("name"),Yt("factory"),Yt("configFields"),Yt("partFields"),tr("apis",{}),tr("extraApis",{})]),Ls=hf({name:"Button",factory:function(n){function t(e){return Dt(n.dom,"attributes").bind(function(n){return Dt(n,e)})}var e=function(n){return Nr(F([n.map(function(t){return Mo(function(n,e){t(n),e.stop()})}).toArray(),ai()]))}(n.action),r=n.dom.tag;return{uid:n.uid,dom:n.dom,components:n.components,events:e,behaviours:ja(n.buttonBehaviours,[Li.config({}),Va.config({mode:"execution",useSpace:!0,useEnter:!0})]),domModification:{attributes:function(){if("button"!==r)return{role:t("role").getOr("button")};var n=t("type").getOr("button"),e=t("role").map(function(n){return{role:n}}).getOr({});return x({type:n},e)}()},eventOrder:n.eventOrder}},configFields:[tr("uid",undefined),Yt("dom"),tr("components",[]),Na("buttonBehaviours",[Li,Va]),Qt("action"),Qt("role"),tr("eventOrder",{})]}),Gs=qr({fields:[],name:"unselecting",active:/* */Object.freeze({events:function(n){return Nr([jr(Fe(),b(!0))])},exhibit:function(n,e){return Ur({styles:{"-webkit-user-select":"none","user-select":"none","-ms-user-select":"none","-moz-user-select":"-moz-none"},attributes:{unselectable:"on"}})}})}),Us=function(n){var e=function(n,r){return n.replace(/\$\{([^{}]*)\}/g,function(n,e){var t=r[e];return function(n){var e=typeof n;return"string"==e||"number"==e}(t)?t.toString():n})}(n,{prefix:_i.prefix()});return yf(e)},$s=function(n,e,t,r){return Ls.sketch({dom:wf(n,r),action:e,buttonBehaviours:xt(Bo([Gs.config({})]),t)})},Ws={forToolbar:$s,forToolbarCommand:function(n,e){return $s(e,function(){n.execCommand(e)},{},n)},forToolbarStateAction:function(n,e,t,r){var o=xf(t);return $s(e,r,o,n)},forToolbarStateCommand:function(n,e){var t=xf(e);return $s(e,function(){n.execCommand(e)},t,n)},getToolbarIconButton:wf},Xs=rf({schema:[Yt("dom")],name:"label"}),qs=Sf("top-left"),Ys=Sf("top"),Ks=Sf("top-right"),Js=Sf("right"),Qs=Sf("bottom-right"),Zs=Sf("bottom"),nl=Sf("bottom-left"),el=[Xs,Sf("left"),Js,Ys,Zs,qs,Ks,nl,Qs,tf({name:"thumb",defaults:b({dom:{styles:{position:"absolute"}}}),overrides:function(n){return{events:Nr([zr(xe(),n,"spectrum"),zr(we(),n,"spectrum"),zr(Se(),n,"spectrum"),zr(Te(),n,"spectrum"),zr(Oe(),n,"spectrum"),zr(ke(),n,"spectrum")])}}}),tf({schema:[or("mouseIsDown",function(){return Pn(!1)})],name:"spectrum",overrides:function(t){function r(e,n){return o.getValueFromEvent(n).map(function(n){return o.setValueFrom(e,t,n)})}var o=t.model.manager;return{behaviours:Bo([Va.config({mode:"special",onLeft:function(n){return o.onLeft(n,t)},onRight:function(n){return o.onRight(n,t)},onUp:function(n){return o.onUp(n,t)},onDown:function(n){return o.onDown(n,t)}}),Li.config({})]),events:Nr([_r(xe(),r),_r(we(),r),_r(Te(),r),_r(Oe(),function(n,e){t.mouseIsDown.get()&&r(n,e)})])}}})],tl=/* */Object.freeze({onLoad:Tf,onUnload:Of,setValue:function(n,e,t,r){e.store.manager.setValue(n,e,t,r)},getValue:function(n,e,t){return e.store.manager.getValue(n,e,t)},getState:function(n,e,t){return t}}),rl=/* */Object.freeze({events:function(t,r){var n=t.resetOnDom?[Eo(function(n,e){Tf(n,t,r)}),Co(function(n,e){Of(n,t,r)})]:[$r(t,r,Tf)];return Nr(n)}}),ol=/* */Object.freeze({memory:kf,dataset:Ef,manual:function(){return Fo({readState:function(){}})},init:function(n){return n.store.manager.state(n)}}),il=[Qt("initialValue"),Yt("getFallbackEntry"),Yt("getDataKey"),Yt("setValue"),ni("manager",{setValue:Cf,getValue:function(n,e,t){var r=e.store,o=r.getDataKey(n);return t.lookup(o).fold(function(){return r.getFallbackEntry(o)},function(n){return n})},onLoad:function(e,t,r){t.store.initialValue.each(function(n){Cf(e,t,r,n)})},onUnload:function(n,e,t){t.clear()},state:Ef})],ul=[Yt("getValue"),tr("setValue",w),Qt("initialValue"),ni("manager",{setValue:function(n,e,t,r){e.store.setValue(n,r),e.onSetValue(n,r)},getValue:function(n,e,t){return e.store.getValue(n)},onLoad:function(e,t,n){t.store.initialValue.each(function(n){t.store.setValue(e,n)})},onUnload:w,state:Ao.init})],cl=[Qt("initialValue"),ni("manager",{setValue:function(n,e,t,r){t.set(r),e.onSetValue(n,r)},getValue:function(n,e,t){return t.get()},onLoad:function(n,e,t){e.store.initialValue.each(function(n){t.isNotSet()&&t.set(n)})},onUnload:function(n,e,t){t.clear()},state:kf})],al=[rr("store",{mode:"memory"},qt("mode",{memory:cl,manual:ul,dataset:il})),Ko("onSetValue"),tr("resetOnDom",!1)],fl=qr({fields:al,name:"representing",active:rl,apis:tl,extra:{setValueFrom:function(n,e){var t=fl.getValue(e);fl.setValue(n,t)}},state:ol}),sl=$i("width",function(n){return n.dom().offsetWidth}),ll=function(t,r){return{left:b(t),top:b(r),translate:function(n,e){return ll(t+n,r+e)}}},dl=ll,ml=b("slider.change.value"),gl="left",pl=Ts(-1),hl=Ts(1),vl=Fn.none,yl=Fn.none,bl={"top-left":Fn.none(),top:Fn.none(),"top-right":Fn.none(),right:Fn.some(function(n,e){rs(n,ns(jf(e)))}),"bottom-right":Fn.none(),bottom:Fn.none(),"bottom-left":Fn.none(),left:Fn.some(function(n,e){rs(n,ns(Ff(e)))})},xl=/* */Object.freeze({setValueFrom:function(n,e,t){var r=Ss(n,e,t),o=ws(r);return xs(n,o),r},setToMin:function(n,e){var t=Rf(e);xs(n,ws(t))},setToMax:function(n,e){var t=Vf(e);xs(n,ws(t))},findValueOfOffset:Ss,getValueFromEvent:function(n){return If(n).map(function(n){return n.left()})},findPositionOfValue:Os,setPositionFromValue:function(n,e,t,r){var o=Zf(t),i=Os(n,r.getSpectrum(n),o.x(),r.getLeftEdge(n),r.getRightEdge(n),t),u=Mf(e.element())/2;Gi(e.element(),"left",i-u+"px")},onLeft:pl,onRight:hl,onUp:vl,onDown:yl,edgeActions:bl}),wl=Fn.none,Sl=Fn.none,Tl=Ds(-1),Ol=Ds(1),kl={"top-left":Fn.none(),top:Fn.some(function(n,e){rs(n,es(Bf(e)))}),"top-right":Fn.none(),right:Fn.none(),"bottom-right":Fn.none(),bottom:Fn.some(function(n,e){rs(n,es(_f(e)))}),"bottom-left":Fn.none(),left:Fn.none()},El=/* */Object.freeze({setValueFrom:function(n,e,t){var r=Cs(n,e,t),o=Es(r);return ks(n,o),r},setToMin:function(n,e){var t=Af(e);ks(n,Es(t))},setToMax:function(n,e){var t=Nf(e);ks(n,Es(t))},findValueOfOffset:Cs,getValueFromEvent:function(n){return If(n).map(function(n){return n.top()})},findPositionOfValue:Ms,setPositionFromValue:function(n,e,t,r){var o=Zf(t),i=Ms(n,r.getSpectrum(n),o.y(),r.getTopEdge(n),r.getBottomEdge(n),t),u=Wi(e.element())/2;Gi(e.element(),"top",i-u+"px")},onLeft:wl,onRight:Sl,onUp:Tl,onDown:Ol,edgeActions:kl}),Cl=As(-1,!1),Dl=As(1,!1),Ml=As(-1,!0),Il=As(1,!0),Rl={"top-left":Fn.some(function(n,e){rs(n,ts(Ff(e),Bf(e)))}),top:Fn.some(function(n,e){rs(n,ts(Lf(e),Bf(e)))}),"top-right":Fn.some(function(n,e){rs(n,ts(jf(e),Bf(e)))}),right:Fn.some(function(n,e){rs(n,ts(jf(e),Gf(e)))}),"bottom-right":Fn.some(function(n,e){rs(n,ts(jf(e),_f(e)))}),bottom:Fn.some(function(n,e){rs(n,ts(Lf(e),_f(e)))}),"bottom-left":Fn.some(function(n,e){rs(n,ts(Ff(e),_f(e)))}),left:Fn.some(function(n,e){rs(n,ts(Ff(e),Gf(e)))})},Al=/* */Object.freeze({setValueFrom:function(n,e,t){var r=Ss(n,e,t.left()),o=Cs(n,e,t.top()),i=Rs(r,o);return Is(n,i),i},setToMin:function(n,e){var t=Rf(e),r=Af(e);Is(n,Rs(t,r))},setToMax:function(n,e){var t=Vf(e),r=Nf(e);Is(n,Rs(t,r))},getValueFromEvent:function(n){return If(n)},setPositionFromValue:function(n,e,t,r){var o=Zf(t),i=Os(n,r.getSpectrum(n),o.x(),r.getLeftEdge(n),r.getRightEdge(n),t),u=Ms(n,r.getSpectrum(n),o.y(),r.getTopEdge(n),r.getBottomEdge(n),t),c=Mf(e.element())/2,a=Wi(e.element())/2;Gi(e.element(),"left",i-c+"px"),Gi(e.element(),"top",u-a+"px")},onLeft:Cl,onRight:Dl,onUp:Ml,onDown:Il,edgeActions:Rl}),Fl=[tr("stepSize",1),tr("onChange",w),tr("onChoose",w),tr("onInit",w),tr("onDragStart",w),tr("onDragEnd",w),tr("snapToGrid",!1),tr("rounded",!0),Qt("snapStart"),Kt("model",qt("mode",{x:[tr("minX",0),tr("maxX",100),or("value",function(n){return Pn(n.mode.minX)}),Yt("getInitialValue"),ni("manager",xl)],y:[tr("minY",0),tr("maxY",100),or("value",function(n){return Pn(n.mode.minY)}),Yt("getInitialValue"),ni("manager",El)],xy:[tr("minX",0),tr("maxX",100),tr("minY",0),tr("maxY",100),or("value",function(n){return Pn({x:b(n.mode.minX),y:b(n.mode.minY)})}),Yt("getInitialValue"),ni("manager",Al)]})),mc("sliderBehaviours",[Va,fl]),or("mouseIsDown",function(){return Pn(!1)})],Bl=b("mouse.released"),Vl=vf({name:"Slider",configFields:Fl,partFields:el,factory:function(i,n,e,t){function u(n){return Ec(n,i,"thumb")}function c(n){return Ec(n,i,"spectrum")}function r(n){return kc(n,i,"left-edge")}function o(n){return kc(n,i,"right-edge")}function a(n){return kc(n,i,"top-edge")}function f(n){return kc(n,i,"bottom-edge")}function s(n,e){v.setPositionFromValue(n,e,i,{getLeftEdge:r,getRightEdge:o,getTopEdge:a,getBottomEdge:f,getSpectrum:c})}function l(n,e){h.value.set(e);var t=u(n);return s(n,t),i.onChange(n,t,e),Fn.some(!0)}function d(t){var n=i.mouseIsDown.get();i.mouseIsDown.set(!1),n&&kc(t,i,"thumb").each(function(n){var e=h.value.get();i.onChoose(t,n,e)})}function m(n,e){e.stop(),i.mouseIsDown.set(!0),i.onDragStart(n,u(n))}function g(n,e){e.stop(),i.onDragEnd(n,u(n)),d(n)}var p,h=i.model,v=h.manager;return{uid:i.uid,dom:i.dom,components:n,behaviours:pc(i.sliderBehaviours,[Va.config({mode:"special",focusIn:function(n){return kc(n,i,"spectrum").map(Va.focusIn).map(b(!0))}}),fl.config({store:{mode:"manual",getValue:function(n){return h.value.get()}}}),Ci.config({channels:(p={},p[Bl()]={onReceive:d},p)})]),events:Nr([_r(ml(),function(n,e){l(n,e.event().value())}),Eo(function(n,e){var t=h.getInitialValue();h.value.set(t);var r=u(n);s(n,r);var o=c(n);i.onInit(n,r,o,h.value.get())}),_r(xe(),m),_r(Se(),g),_r(Te(),m),_r(ke(),g)]),apis:{resetToMin:function(n){v.setToMin(n,i)},resetToMax:function(n){v.setToMax(n,i)},changeValue:l,refresh:s},domModification:{styles:{position:"relative"}}}},apis:{resetToMin:function(n,e){n.resetToMin(e)},resetToMax:function(n,e){n.resetToMax(e)},refresh:function(n,e){n.refresh(e)}}}),Nl=function(n,r){var e={onChange:function(n,e,t){r.undoManager.transact(function(){r.formatter.apply("forecolor",{value:t}),r.nodeChanged()})},getInitialValue:function(){return-1}};return Fs(n,"color-levels",function(){return Bs(e)},r)},jl=Pt([Yt("getInitialValue"),Yt("onChange"),Yt("category"),Yt("sizes")]),_l=function(n){var o=Xt("SizeSlider",jl,n);return Vl.sketch({dom:{tag:"div",classes:[_i.resolve("slider-"+o.category+"-size-container"),_i.resolve("slider"),_i.resolve("slider-size-container")]},onChange:function(n,e,t){var r=t.x();!function(n){return 0<=n&&n<o.sizes.length}(r)||o.onChange(r)},onDragStart:function(n,e){Fi.on(e)},onDragEnd:function(n,e){Fi.off(e)},model:{mode:"x",minX:0,maxX:o.sizes.length-1,getInitialValue:function(){return{x:function(){return o.getInitialValue()}}}},stepSize:1,snapToGrid:!0,sliderBehaviours:Bo([Vi(Vl.refresh)]),components:[Vl.parts().spectrum({dom:Us('<div class="${prefix}-slider-size-container"></div>'),components:[bf('<div class="${prefix}-slider-size-line"></div>')]}),Vl.parts().thumb({dom:Us('<div class="${prefix}-slider-thumb"></div>'),behaviours:Bo([Fi.config({toggleClass:_i.resolve("thumb-active")})])})]})},Pl=["9px","10px","11px","12px","14px","16px","18px","20px","24px","32px","36px"],Hl={candidates:b(Pl),get:function(n){return function(e){return A(Pl,function(n){return n===e})}(Vs(n)).getOr(2)},apply:function(e,n){(function(n){return Fn.from(Pl[n])})(n).each(function(n){!function(n,e){Vs(n)!==e&&n.execCommand("fontSize",!1,e)}(e,n)})}},zl=Hl.candidates(),Ll=window.Promise?window.Promise:(_s=Gl.immediateFn||"function"==typeof window.setImmediate&&window.setImmediate||function(n){l.setTimeout(n,1)},Ps=Array.isArray||function(n){return"[object Array]"===Object.prototype.toString.call(n)},Gl.prototype["catch"]=function(n){return this.then(null,n)},Gl.prototype.then=function(t,r){var o=this;return new Gl(function(n,e){$l.call(o,new Yl(t,r,n,e))})},Gl.all=function(){for(var n=[],e=0;e<arguments.length;e++)n[e]=arguments[e];var a=Array.prototype.slice.call(1===n.length&&Ps(n[0])?n[0]:n);return new Gl(function(o,i){if(0===a.length)return o([]);var u=a.length;function c(e,n){try{if(n&&("object"==typeof n||"function"==typeof n)){var t=n.then;if("function"==typeof t)return void t.call(n,function(n){c(e,n)},i)}a[e]=n,0==--u&&o(a)}catch(r){i(r)}}for(var n=0;n<a.length;n++)c(n,a[n])})},Gl.resolve=function(e){return e&&"object"==typeof e&&e.constructor===Gl?e:new Gl(function(n){n(e)})},Gl.reject=function(t){return new Gl(function(n,e){e(t)})},Gl.race=function(o){return new Gl(function(n,e){for(var t=0,r=o;t<r.length;t++)r[t].then(n,e)})},Gl);function Gl(n){if("object"!=typeof this)throw new TypeError("Promises must be constructed via new");if("function"!=typeof n)throw new TypeError("not a function");this._state=null,this._value=null,this._deferreds=[],Kl(n,Ul(Wl,this),Ul(Xl,this))}function Ul(n,e){return function(){return n.apply(e,arguments)}}function $l(r){var o=this;null!==this._state?_s(function(){var n=o._state?r.onFulfilled:r.onRejected;if(null!==n){var e;try{e=n(o._value)}catch(t){return void r.reject(t)}r.resolve(e)}else(o._state?r.resolve:r.reject)(o._value)}):this._deferreds.push(r)}function Wl(n){try{if(n===this)throw new TypeError("A promise cannot be resolved with itself.");if(n&&("object"==typeof n||"function"==typeof n)){var e=n.then;if("function"==typeof e)return void Kl(Ul(e,n),Ul(Wl,this),Ul(Xl,this))}this._state=!0,this._value=n,ql.call(this)}catch(t){Xl.call(this,t)}}function Xl(n){this._state=!1,this._value=n,ql.call(this)}function ql(){for(var n=0,e=this._deferreds;n<e.length;n++){var t=e[n];$l.call(this,t)}this._deferreds=[]}function Yl(n,e,t,r){this.onFulfilled="function"==typeof n?n:null,this.onRejected="function"==typeof e?e:null,this.resolve=t,this.reject=r}function Kl(n,e,t){var r=!1;try{n(function(n){r||(r=!0,e(n))},function(n){r||(r=!0,t(n))})}catch(o){if(r)return;r=!0,t(o)}}function Jl(n){return function e(t){return new Ll(function(n){var e=new l.FileReader;e.onloadend=function(){n(e.result)},e.readAsDataURL(t)})}(n).then(function(n){return n.split(",")[1]})}function Ql(o,i){(function(n){return Jl(n)})(i).then(function(r){o.undoManager.transact(function(){var n=o.editorUpload.blobCache,e=n.create(yc("mceu"),i,r);n.add(e);var t=o.dom.createHTML("img",{src:e.blobUri()});o.insertContent(t)})})}function Zl(t){var e=js({dom:{tag:"input",attributes:{accept:"image/*",type:"file",title:""},styles:{visibility:"hidden",position:"absolute"}},events:Nr([Lr(Re()),_r(Ie(),function(n,e){(function(n){var e=n.event(),t=e.raw().target.files||e.raw().dataTransfer.files;return Fn.from(t[0])})(e).each(function(n){Ql(t,n)})})])});return Ls.sketch({dom:Ws.getToolbarIconButton("image",t),components:[e.asSpec()],action:function(n){e.get(n).element().dom().click()}})}function nd(n){return n.dom().textContent}function ed(n){return 0<n.length}function td(n){return n===undefined||null===n?"":n}function rd(n,e,t){return t.text.toOption().filter(ed).fold(function(){return function(n){return Qr(n,"href")===nd(n)}(n)?Fn.some(e):Fn.none()},Fn.some)}function od(n,e){var t=e.selection.getRng();n(),e.selection.setRng(t)}function id(n){return n.dom().value}function ud(n,e){if(e===undefined)throw new Error("Value.set was undefined");n.dom().value=e}function cd(n){return x(x({},function(n){return Bo([Li.config({onFocus:!1===n.selectOnFocus?w:function(n){var e=n.element(),t=id(e);e.dom().setSelectionRange(0,t.length)}})])}(n)),pc(n.inputBehaviours,[fl.config({store:{mode:"manual",initialValue:n.data.getOr(undefined),getValue:function(n){return id(n.element())},setValue:function(n,e){id(n.element())!==e&&ud(n.element(),e)}},onSetValue:n.onSetValue})]))}function ad(n,e){var t=js(pm.sketch({inputAttributes:{placeholder:bm.translate(e)},onSetValue:function(n,e){G(n,Me())},inputBehaviours:Bo([lm.config({find:Fn.some}),ym.config({}),Va.config({mode:"execution"})]),selectOnFocus:!1})),r=js(Ls.sketch({dom:Us('<button class="${prefix}-input-container-x ${prefix}-icon-cancel-circle ${prefix}-icon"></button>'),action:function(n){var e=t.get(n);fl.setValue(e,"")}}));return{name:n,spec:dm.sketch({dom:Us('<div class="${prefix}-input-container"></div>'),components:[t.asSpec(),r.asSpec()],containerBehaviours:Bo([Fi.config({toggleClass:_i.resolve("input-container-empty")}),lm.config({find:function(n){return Fn.some(t.get(n))}}),am("input-clearing",[_r(Me(),function(n){var e=t.get(n);(0<fl.getValue(e).length?Fi.off:Fi.on)(n)})])])})}}function fd(n,e,t){e.disabled&&wm(n,e)}function sd(n,e){return!0===e.useNative&&k(xm,q(n.element()))}function ld(n){Kr(n.element(),"disabled","disabled")}function dd(n){no(n.element(),"disabled")}function md(n){Kr(n.element(),"aria-disabled","true")}function gd(n){Kr(n.element(),"aria-disabled","false")}function pd(e,n,t){n.disableClass.each(function(n){co(e.element(),n)}),(sd(e,n)?dd:gd)(e),n.onEnabled(e)}function hd(n,e){return sd(n,e)?function(n){return Zr(n.element(),"disabled")}(n):function(n){return"true"===Qr(n.element(),"aria-disabled")}(n)}function vd(n){return"<alloy.field."+n+">"}function yd(){function e(){t.get().each(function(n){n.destroy()})}var t=Pn(Fn.none());return{clear:function(){e(),t.set(Fn.none())},isSet:function(){return t.get().isSome()},set:function(n){e(),t.set(Fn.some(n))},run:function(n){t.get().each(n)}}}function bd(){var e=Pn(Fn.none());return{clear:function(){e.set(Fn.none())},set:function(n){e.set(Fn.some(n))},isSet:function(){return e.get().isSome()},on:function(n){e.get().each(n)}}}function xd(n){function r(e,n,t){return Ls.sketch({dom:Us('<span class="${prefix}-icon-'+n+' ${prefix}-icon"></span>'),action:function(n){U(n,u,{direction:e})},buttonBehaviours:Bo([km.config({disableClass:_i.resolve("toolbar-navigation-disabled"),disabled:!t})])})}function o(n,o){var i=Yi(n.element(),"."+_i.resolve("serialised-dialog-screen"));Qi(n.element(),"."+_i.resolve("serialised-dialog-chain")).each(function(r){0<=c.state.currentScreen.get()+o&&c.state.currentScreen.get()+o<i.length&&(gi(r,"left").each(function(n){var e=parseInt(n,10),t=Mf(i[0]);Gi(r,"left",e-o*t+"px")}),c.state.currentScreen.set(c.state.currentScreen.get()+o))})}function i(e){var n=Yi(e.element(),"input");Fn.from(n[c.state.currentScreen.get()]).each(function(n){e.getSystem().getByDom(n).each(function(n){!function(n,e){n.getSystem().triggerFocus(e,n.element())}(e,n.element())})});var t=f.get(e);Cu.highlightAt(t,c.state.currentScreen.get())}var u="navigateEvent",e=Sr([Yt("fields"),tr("maxFieldIndex",n.fields.length-1),Yt("onExecute"),Yt("getInitialValue"),or("state",function(){return{dialogSwipeState:bd(),currentScreen:Pn(0)}})]),c=Xt("SerialisedDialog",e,n),a=js(Dm(function(t){return{dom:Us('<div class="${prefix}-serialised-dialog"></div>'),components:[dm.sketch({dom:Us('<div class="${prefix}-serialised-dialog-chain" style="left: 0px; position: absolute;"></div>'),components:de(c.fields,function(n,e){return e<=c.maxFieldIndex?dm.sketch({dom:Us('<div class="${prefix}-serialised-dialog-screen"></div>'),components:[r(-1,"previous",0<e),t.field(n.name,n.spec),r(1,"next",e<c.maxFieldIndex)]}):t.field(n.name,n.spec)})})],formBehaviours:Bo([Vi(function(n,e){!function(n,e){Qi(n.element(),"."+_i.resolve("serialised-dialog-chain")).each(function(n){Gi(n,"left",-c.state.currentScreen.get()*e.width+"px")})}(n,e)}),Va.config({mode:"special",focusIn:function(n){i(n)},onTab:function(n){return o(n,1),Fn.some(!0)},onShiftTab:function(n){return o(n,-1),Fn.some(!0)}}),am("form-events",[Eo(function(e,n){c.state.currentScreen.set(0),c.state.dialogSwipeState.clear();var t=f.get(e);Cu.highlightFirst(t),c.getInitialValue(e).each(function(n){fl.setValue(e,n)})}),Mo(c.onExecute),_r(Ae(),function(n,e){"left"===e.event().raw().propertyName&&i(n)}),_r(u,function(n,e){var t=e.event().direction();o(n,t)})])])}})),f=js({dom:Us('<div class="${prefix}-dot-container"></div>'),behaviours:Bo([Cu.config({highlightClass:_i.resolve("dot-active"),itemClass:_i.resolve("dot-item")})]),components:B(c.fields,function(n,e){return e<=c.maxFieldIndex?[bf('<div class="${prefix}-dot-item ${prefix}-icon-full-dot ${prefix}-icon"></div>')]:[]})});return{dom:Us('<div class="${prefix}-serializer-wrapper"></div>'),components:[a.asSpec(),f.asSpec()],behaviours:Bo([Va.config({mode:"special",focusIn:function(n){var e=a.get(n);Va.focusIn(e)}}),am("serializer-wrapper-events",[_r(xe(),function(n,e){var t=e.event();c.state.dialogSwipeState.set(Mm(t.raw().touches[0].clientX))}),_r(we(),function(n,e){var t=e.event();c.state.dialogSwipeState.on(function(n){e.event().prevent(),c.state.dialogSwipeState.set(Im(n,t.raw().touches[0].clientX))})}),_r(Se(),function(r){c.state.dialogSwipeState.on(function(n){var e=a.get(r),t=-1*Rm(n);o(e,t)})})])])}}function wd(e){function n(n){return function(){throw new Error("The component must be in a context to send: "+n+"\n"+bo(e().element())+" is not in context.")}}return{debugInfo:b("fake"),triggerEvent:n("triggerEvent"),triggerFocus:n("triggerFocus"),triggerEscape:n("triggerEscape"),build:n("build"),addToWorld:n("addToWorld"),removeFromWorld:n("removeFromWorld"),addToGui:n("addToGui"),removeFromGui:n("removeFromGui"),getByUid:n("getByUid"),getByDom:n("getByDom"),broadcast:n("broadcast"),broadcastOn:n("broadcastOn"),broadcastEvent:n("broadcastEvent"),isConnected:b(!1)}}function Sd(n,o){var i={};return Nn(n,function(n,r){Nn(n,function(n,e){var t=kn(e,[])(i);i[e]=t.concat([o(r,n)])})}),i}function Td(n){return n.cHandler}function Od(n,e){return{name:b(n),handler:b(e)}}function kd(n,e,t){var r=x(x({},t),function(n,e){var t={};return C(n,function(n){t[n.name()]=n.handlers(e)}),t}(e,n));return Sd(r,Od)}function Ed(n){var i=function(n){return ce(n)?{can:b(!0),abort:b(!1),run:n}:n}(n);return function(n,e){for(var t=[],r=2;r<arguments.length;r++)t[r-2]=arguments[r];var o=[n,e].concat(t);i.abort.apply(undefined,o)?e.stop():i.can.apply(undefined,o)&&i.run.apply(undefined,o)}}function Cd(n,e,t){var r=e[t];return r?function(u,c,n,a){var e=n.slice(0);try{var t=e.sort(function(n,e){var t=n[c](),r=e[c](),o=a.indexOf(t),i=a.indexOf(r);if(-1===o)throw new Error("The ordering for "+u+" does not have an entry for "+t+".\nOrder specified: "+JSON.stringify(a,null,2));if(-1===i)throw new Error("The ordering for "+u+" does not have an entry for "+r+".\nOrder specified: "+JSON.stringify(a,null,2));return o<i?-1:i<o?1:0});return vt.value(t)}catch(r){return vt.error([r])}}("Event: "+t,"name",n,r).map(function(n){var e=de(n,function(n){return n.handler()});return Vr(e)}):function(n,e){return vt.error(["The event ("+n+') has more than one behaviour that listens to it.\nWhen this occurs, you must specify an event ordering for the behaviours in your spec (e.g. [ "listing", "toggling" ]).\nThe behaviours that can trigger it are: '+JSON.stringify(de(e,function(n){return n.name()}),null,2)])}(t,n)}function Dd(n){return $t("custom.definition",Sr([kr("dom","dom",Tt(),Sr([Yt("tag"),tr("styles",{}),tr("classes",[]),tr("attributes",{}),Qt("value"),Qt("innerHtml")])),Yt("components"),Yt("uid"),tr("events",{}),tr("apis",{}),kr("eventOrder","eventOrder",function(n){return St.mergeWithThunk(b(n))}({"alloy.execute":["disabling","alloy.base.behaviour","toggling","typeaheadevents"],"alloy.focus":["alloy.base.behaviour","focusing","keying"],"alloy.system.init":["alloy.base.behaviour","disabling","toggling","representing"],input:["alloy.base.behaviour","representing","streaming","invalidating"],"alloy.system.detached":["alloy.base.behaviour","representing","item-events","tooltipping"],mousedown:["focusing","alloy.base.behaviour","item-type-events"],touchstart:["focusing","alloy.base.behaviour","item-type-events"],mouseover:["item-type-events","tooltipping"]}),Dr()),Qt("domModification")]),n)}function Md(e,n){C(n,function(n){io(e,n)})}function Id(e,n){C(n,function(n){co(e,n)})}function Rd(n,e){return function(e,n){var t=de(n,function(n){return nr(n.name(),[Yt("config"),tr("state",Ao)])}),r=$t("component.behaviours",Sr(t),e.behaviours).fold(function(n){throw new Error(Cr(n)+"\nComplete spec:\n"+JSON.stringify(e,null,2))},function(n){return n});return{list:n,data:S(r,function(n){var e=n.map(function(n){return{config:n.config,state:n.state.init(n.config)}});return function(){return e}})}}(n,e)}function Ad(n){var e=function(n){var e=kn("behaviours",{})(n),t=D(Bn(e),function(n){return e[n]!==undefined});return de(t,function(n){return e[n].me})}(n);return Rd(n,e)}function Fd(n,e,t){var r=function(n){return x(x({},n.dom),{uid:n.uid,domChildren:de(n.components,function(n){return n.element()})})}(n),o=function(n){return n.domModification.fold(function(){return Ur({})},Ur)}(n),i={"alloy.base.modification":o};return function(n,e){return x(x({},n),{attributes:x(x({},n.attributes),e.attributes),styles:x(x({},n.styles),e.styles),classes:n.classes.concat(e.classes)})}(r,0<e.length?function(e,n,t,r){var o=x({},n);C(t,function(n){o[n.name()]=n.exhibit(e,r)});function i(n){return M(n,function(n,e){return x(x({},e.modification),n)},{})}var u=Sd(o,function(n,e){return{name:n,modification:e}}),c=M(u.classes,function(n,e){return e.modification.concat(n)},[]),a=i(u.attributes),f=i(u.styles);return Ur({classes:c,attributes:a,styles:f})}(t,i,e,r):o)}function Bd(n,e,t){var r={"alloy.base.behaviour":function(n){return n.events}(n)};return function(n,e,t,r){var o=kd(n,t,r);return Pm(o,e)}(t,n.eventOrder,e,r).getOrDie()}function Vd(t){function n(){return s}var r=Pn(jm),e=Wt(Dd(t)),o=Ad(t),i=function(n){return n.list}(o),u=function(n){return n.data}(o),c=function(n){var e=Je.fromTag(n.tag);Jr(e,n.attributes),Md(e,n.classes),di(e,n.styles),n.innerHtml.each(function(n){return ho(e,n)});var t=n.domChildren;return gn(e,t),n.value.each(function(n){ud(e,n)}),n.uid,mf(e,n.uid),e}(Fd(e,i,u)),a=Bd(e,i,u),f=Pn(e.components),s={getSystem:r.get,config:function(n){var e=u;return(ce(e[n.name()])?e[n.name()]:function(){throw new Error("Could not find "+n.name()+" in "+JSON.stringify(t,null,2))})()},hasConfigured:function(n){return ce(u[n.name()])},spec:b(t),readState:function(n){return u[n]().map(function(n){return n.state.readState()}).getOr("not enabled")},getApis:function(){return e.apis},connect:function(n){r.set(n)},disconnect:function(){r.set(wd(n))},element:b(c),syncComponents:function(){var n=at(c),e=B(n,function(n){return r.get().getByDom(n).fold(function(){return[]},function(n){return[n]})});f.set(e)},components:f.get,events:b(a)};return s}function Nd(n){var e=Nm(n),t=e.events,r=u(e,["events"]),o=function(n){var e=kn("components",[])(n);return de(e,Lm)}(r),i=x(x({},r),{events:x(x({},Vm),t),components:o});return vt.value(Vd(i))}function jd(n){var e=Je.fromText(n);return Hm({element:e})}function _d(n){(go(n.element()).isNone()||Li.isFocused(n))&&(Li.isFocused(n)||Li.focus(n),U(n,Um,{item:n}))}function Pd(n){U(n,$m,{item:n})}function Hd(n,e,t,r){var o=n.getSystem().build(r);mt(n,o,t)}function zd(n,e,t,r){var o=rg(n);R(o,function(n){return cn(r.element(),n.element())}).each(yn)}function Ld(e,n,t,r,o){var i=rg(e);return Fn.from(i[r]).map(function(n){return zd(e,0,0,n),o.each(function(n){Hd(e,0,function(n,e){!function(n,e,t){sn(n,t).fold(function(){ft(n,e)},function(n){ln(n,e)})}(n,e,r)},n)}),n})}function Gd(n,e){var t={};Nn(n,function(n,e){C(n,function(n){t[n]=e})});var r=e,o=function(n){return jn(n,function(n,e){return{k:n,v:e}})}(e),i=S(o,function(n,e){return[e].concat(ig(t,r,o,e))});return S(t,function(n){return Dt(i,n).getOr([n])})}function Ud(n,e,t,r){return Dt(e.routes,r.start).bind(function(n){return Dt(n,r.destination)})}function $d(t,r,n){(function(e,t,r){return lg(e,t).bind(function(n){return sg(e,t,r,n)})})(t,r,n).each(function(n){var e=n.transition;co(t.element(),e.transitionClass),no(t.element(),r.destinationAttr)})}function Wd(n,e,t,r){$d(n,e,t),Zr(n.element(),e.stateAttr)&&Qr(n.element(),e.stateAttr)!==r&&e.onFinish(n,r),Kr(n.element(),e.stateAttr,r)}function Xd(n){return Dt(n,"format").getOr(n.title)}function qd(n){return Mn(n,"items")?function(n){var e=xt(On(n,["items"]),{menu:!0}),t=wg(n.items);return{item:e,menus:xt(t.menus,En(n.title,t.items)),expansions:xt(t.expansions,En(n.title,n.title))}}(n):{item:n,menus:{},expansions:{}}}function Yd(n){var e=n.replace(/\|/g," ").trim();return 0<e.length?e.split(/\s+/):[]}function Kd(n){var e=n.toolbar!==undefined?n.toolbar:kg;return ie(e)?Eg(e):Yd(e)}function Jd(n){function e(){n.stopPropagation()}function t(){n.preventDefault()}var r=Je.fromDom(n.target),o=i(t,e);return function(n,e,t,r,o,i,u){return{target:b(n),x:b(e),y:b(t),stop:r,prevent:o,kill:i,raw:b(u)}}(r,n.clientX,n.clientY,e,t,o,n)}function Qd(n,e,t,r,o){var i=function(e,t){return function(n){e(n)&&t(Jd(n))}}(t,r);return n.dom().addEventListener(e,i,o),{unbind:d(Mg,n,e,i,o)}}function Zd(n,e,t){return function(n,e,t,r){return Qd(n,e,t,r,!1)}(n,e,Ig,t)}function nm(n,e,t){return function(n,e,t,r){return Qd(n,e,t,r,!0)}(n,e,Ig,t)}function em(n){var e=n.matchMedia("(orientation: portrait)").matches;return{isPortrait:b(e)}}var tm,rm,om=function(n){var e=Je.fromDom(n.selection.getStart());return Zi(e,"a")},im={getInfo:function(n){return om(n).fold(function(){return function(n){return{url:"",text:n.selection.getContent({format:"text"}),title:"",target:"",link:Fn.none()}}(n)},function(n){return function(n){var e=nd(n),t=Qr(n,"href"),r=Qr(n,"title"),o=Qr(n,"target");return{url:td(t),text:e!==t?td(e):"",title:td(r),target:td(o),link:Fn.some(n)}}(n)})},applyInfo:function(e,o){o.url.toOption().filter(ed).fold(function(){!function(e,n){n.link.bind(y).each(function(n){e.execCommand("unlink")})}(e,o)},function(t){var r=function(n,e){var t={};return t.href=n,e.title.toOption().filter(ed).each(function(n){t.title=n}),e.target.toOption().filter(ed).each(function(n){t.target=n}),t}(t,o);o.link.bind(y).fold(function(){var n=o.text.toOption().filter(ed).getOr(t);e.insertContent(e.dom.createHTML("a",r,e.dom.encode(n)))},function(e){var n=rd(e,t,o);Jr(e,r),n.each(function(n){!function(n,e){n.dom().textContent=e}(e,n)})})})},query:om},um=L(),cm=function(n,e){(um.os.isAndroid()?od:t)(e,n)},am=function(n,e){return{key:n,value:{config:{},me:function(n,e){var t=Nr(e);return qr({fields:[Yt("enabled")],name:n,active:{events:b(t)}})}(n,e),configAsRaw:b({}),initialConfig:{},state:Ao}}},fm=/* */Object.freeze({getCurrent:function(n,e,t){return e.find(n)}}),sm=[Yt("find")],lm=qr({fields:sm,name:"composing",apis:fm}),dm=hf({name:"Container",factory:function(n){var e=n.dom,t=e.attributes,r=u(e,["attributes"]);return{uid:n.uid,dom:x({tag:"div",attributes:x({role:"presentation"},t)},r),components:n.components,behaviours:gc(n.containerBehaviours),events:n.events,domModification:n.domModification,eventOrder:n.eventOrder}},configFields:[tr("components",[]),mc("containerBehaviours",[]),tr("events",{}),tr("domModification",{}),tr("eventOrder",{})]}),mm=hf({name:"DataField",factory:function(t){return{uid:t.uid,dom:t.dom,behaviours:ja(t.dataBehaviours,[fl.config({store:{mode:"memory",initialValue:t.getInitialValue()}}),lm.config({find:Fn.some})]),events:Nr([Eo(function(n,e){fl.setValue(n,t.getInitialValue())})])}},configFields:[Yt("uid"),Yt("dom"),Yt("getInitialValue"),Na("dataBehaviours",[fl,lm])]}),gm=b([Qt("data"),tr("inputAttributes",{}),tr("inputStyles",{}),tr("tag","input"),tr("inputClasses",[]),Ko("onSetValue"),tr("styles",{}),tr("eventOrder",{}),mc("inputBehaviours",[fl,Li]),tr("selectOnFocus",!0)]),pm=hf({name:"Input",configFields:gm(),factory:function(n,e){return{uid:n.uid,dom:function(n){return{tag:n.tag,attributes:x({type:"text"},n.inputAttributes),styles:n.inputStyles,classes:n.inputClasses}}(n),components:[],behaviours:cd(n),eventOrder:n.eventOrder}}}),hm=/* */Object.freeze({exhibit:function(n,e){return Ur({attributes:Cn([{key:e.tabAttr,value:"true"}])})}}),vm=[tr("tabAttr","data-alloy-tabstop")],ym=qr({fields:vm,name:"tabstopping",active:hm}),bm=tinymce.util.Tools.resolve("tinymce.util.I18n"),xm=["input","button","textarea","select"],wm=function(e,n,t){n.disableClass.each(function(n){io(e.element(),n)}),(sd(e,n)?ld:md)(e),n.onDisabled(e)},Sm=/* */Object.freeze({enable:pd,disable:wm,isDisabled:hd,onLoad:fd,set:function(n,e,t,r){(r?wm:pd)(n,e,t)}}),Tm=/* */Object.freeze({exhibit:function(n,e,t){return Ur({classes:e.disabled?e.disableClass.map(_).getOr([]):[]})},events:function(t,n){return Nr([jr(Pe(),function(n,e){return hd(n,t)}),$r(t,n,fd)])}}),Om=[tr("disabled",!1),tr("useNative",!0),Qt("disableClass"),Ko("onDisabled"),Ko("onEnabled")],km=qr({fields:Om,name:"disabling",active:Tm,apis:Sm}),Em=[mc("formBehaviours",[fl])],Cm=function(r,n,e){return{uid:r.uid,dom:r.dom,components:n,behaviours:pc(r.formBehaviours,[fl.config({store:{mode:"manual",getValue:function(n){var e=function(n,e){var t=n.getSystem();return S(e.partUids,function(n,e){return b(t.getByUid(n))})}(n,r);return S(e,function(n,e){return n().bind(function(n){return function(n,e){return n.fold(function(){return vt.error(e)},vt.value)}(lm.getCurrent(n),"missing current")}).map(fl.getValue)})},setValue:function(t,n){Nn(n,function(e,n){kc(t,r,n).each(function(n){lm.getCurrent(n).each(function(n){fl.setValue(n,e)})})})}}})]),apis:{getField:function(n,e){return kc(n,r,e).bind(lm.getCurrent)}}}},Dm=(Ic(function(n,e,t){return n.getField(e,t)}),function(n){var t,e=(t=[],{field:function(n,e){return t.push(n),function(n,e,t){return{uiType:Ga(),owner:n,name:e,config:t,validated:{}}}("form",vd(n),e)},record:function(){return t}}),r=n(e),o=e.record(),i=de(o,function(n){return tf({name:n,pname:vd(n)})});return Fc("form",Em,i,Cm,r)}),Mm=function(n){return{xValue:n,points:[]}},Im=function(n,e){if(e===n.xValue)return n;var t=0<e-n.xValue?1:-1,r={direction:t,xValue:e};return{xValue:e,points:(0===n.points.length?[]:n.points[n.points.length-1].direction===t?n.points.slice(0,n.points.length-1):n.points).concat([r])}},Rm=function(n){if(0===n.points.length)return 0;var e=n.points[0].direction,t=n.points[n.points.length-1].direction;return-1===e&&-1===t?-1:1===e&&1===t?1:0},Am=X(function(t,r){return[{label:"the link group",items:[xd({fields:[ad("url","Type or paste URL"),ad("text","Link text"),ad("title","Link title"),ad("target","Link target"),function(n){return{name:n,spec:mm.sketch({dom:{tag:"span",styles:{display:"none"}},getInitialValue:function(){return Fn.none()}})}}("link")],maxFieldIndex:["url","text","title","target"].length-1,getInitialValue:function(){return Fn.some(im.getInfo(r))},onExecute:function(n){var e=fl.getValue(n);im.applyInfo(r,e),t.restoreToolbar(),r.focus()}})]}]}),Fm=[{title:"Headings",items:[{title:"Heading 1",format:"h1"},{title:"Heading 2",format:"h2"},{title:"Heading 3",format:"h3"},{title:"Heading 4",format:"h4"},{title:"Heading 5",format:"h5"},{title:"Heading 6",format:"h6"}]},{title:"Inline",items:[{title:"Bold",icon:"bold",format:"bold"},{title:"Italic",icon:"italic",format:"italic"},{title:"Underline",icon:"underline",format:"underline"},{title:"Strikethrough",icon:"strikethrough",format:"strikethrough"},{title:"Superscript",icon:"superscript",format:"superscript"},{title:"Subscript",icon:"subscript",format:"subscript"},{title:"Code",icon:"code",format:"code"}]},{title:"Blocks",items:[{title:"Paragraph",format:"p"},{title:"Blockquote",format:"blockquote"},{title:"Div",format:"div"},{title:"Pre",format:"pre"}]},{title:"Alignment",items:[{title:"Left",icon:"alignleft",format:"alignleft"},{title:"Center",icon:"aligncenter",format:"aligncenter"},{title:"Right",icon:"alignright",format:"alignright"},{title:"Justify",icon:"alignjustify",format:"alignjustify"}]}],Bm=Nr([(tm=Ve(),rm=function(n,e){var t=e.event().originator(),r=e.event().target();return!function(n,e,t){return cn(e,n.element())&&!cn(e,t)}(n,t,r)||(l.console.warn(Ve()+" did not get interpreted by the desired target. \nOriginator: "+bo(t)+"\nTarget: "+bo(r)+"\nCheck the "+Ve()+" event handlers"),!1)},{key:tm,value:Br({can:rm})})]),Vm=/* */Object.freeze({events:Bm}),Nm=y,jm=wd(),_m=function(n,e){return function(n,e){return{cHandler:n,purpose:b(e)}}(d.apply(undefined,[n.handler].concat(e)),n.purpose())},Pm=function(n,i){var e=_n(n,function(r,o){return(1===r.length?vt.value(r[0].handler()):Cd(r,i,o)).map(function(n){var e=Ed(n),t=1<r.length?D(i[o],function(e){return E(r,function(n){return n.name()===e})}).join(" > "):r[0].name();return En(o,function(n,e){return{handler:n,purpose:b(e)}}(e,t))})});return Dn(e,{})},Hm=function(n){var e=Xt("external.component",Pt([Yt("element"),Qt("uid")]),n),t=Pn(wd());e.uid.each(function(n){mf(e.element,n)});var r={getSystem:t.get,config:Fn.none,hasConfigured:b(!1),connect:function(n){t.set(n)},disconnect:function(){t.set(wd(function(){return r}))},getApis:function(){return{}},element:b(e.element),spec:b(n),readState:b("No state"),syncComponents:w,components:b([]),events:b({})};return Mc(r)},zm=Rc,Lm=function(e){return function(n){return Dt(n,af)}(e).fold(function(){var n=e.hasOwnProperty("uid")?e:x({uid:zm("")},e);return Nd(n).getOrDie()},function(n){return n})},Gm=Mc,Um="alloy.item-hover",$m="alloy.item-focus",Wm=b(Um),Xm=b($m),qm=[Yt("data"),Yt("components"),Yt("dom"),tr("hasSubmenu",!1),Qt("toggling"),Na("itemBehaviours",[Fi,Li,Va,fl]),tr("ignoreFocus",!1),tr("domModification",{}),ni("builder",function(n){return{dom:n.dom,domModification:x(x({},n.domModification),{attributes:x(x(x({role:n.toggling.isSome()?"menuitemcheckbox":"menuitem"},n.domModification.attributes),{"aria-haspopup":n.hasSubmenu}),n.hasSubmenu?{"aria-expanded":!1}:{})}),behaviours:ja(n.itemBehaviours,[n.toggling.fold(Fi.revoke,function(n){return Fi.config(x({aria:{mode:"checked"}},n))}),Li.config({ignore:n.ignoreFocus,stopMousedown:n.ignoreFocus,onFocus:function(n){Pd(n)}}),Va.config({mode:"execution"}),fl.config({store:{mode:"memory",initialValue:n.data}}),am("item-type-events",function a(){for(var n=0,e=0,t=arguments.length;e<t;e++)n+=arguments[e].length;var r=Array(n),o=0;for(e=0;e<t;e++)for(var i=arguments[e],u=0,c=i.length;u<c;u++,o++)r[o]=i[u];return r}(ai(),[_r(Ee(),_d),_r(He(),Li.focus)]))]),components:n.components,eventOrder:n.eventOrder}}),tr("eventOrder",{})],Ym=[Yt("dom"),Yt("components"),ni("builder",function(n){return{dom:n.dom,components:n.components,events:Nr([function(n){return _r(n,function(n,e){e.stop()})}(He())])}})],Km=b([tf({name:"widget",overrides:function(e){return{behaviours:Bo([fl.config({store:{mode:"manual",getValue:function(n){return e.data},setValue:function(){}}})])}}})]),Jm=[Yt("uid"),Yt("data"),Yt("components"),Yt("dom"),tr("autofocus",!1),tr("ignoreFocus",!1),Na("widgetBehaviours",[fl,Li,Va]),tr("domModification",{}),Dc(Km()),ni("builder",function(t){function r(n){return kc(n,t,"widget").map(function(n){return Va.focusIn(n),n})}function n(n,e){return Iu(e.event().target())||t.autofocus&&e.setSource(n.element()),Fn.none()}var e=Tc(0,t,Km()),o=Oc("item-widget",t,e.internals());return{dom:t.dom,components:o,domModification:t.domModification,events:Nr([Mo(function(n,e){r(n).each(function(n){e.stop()})}),_r(Ee(),_d),_r(He(),function(n,e){t.autofocus?r(n):Li.focus(n)})]),behaviours:ja(t.widgetBehaviours,[fl.config({store:{mode:"memory",initialValue:t.data}}),Li.config({ignore:t.ignoreFocus,onFocus:function(n){Pd(n)}}),Va.config({mode:"special",focusIn:t.autofocus?function(n){r(n)}:jo(),onLeft:n,onRight:n,onEscape:function(n,e){return Li.isFocused(n)||t.autofocus?(t.autofocus&&e.setSource(n.element()),Fn.none()):(Li.focus(n),Fn.some(!0))}})])}})],Qm=qt("type",{widget:Jm,item:qm,separator:Ym}),Zm=b([of({factory:{sketch:function(n){var e=Xt("menu.spec item",Qm,n);return e.builder(e)}},name:"items",unit:"item",defaults:function(n,e){return e.hasOwnProperty("uid")?e:x(x({},e),{uid:Rc("item")})},overrides:function(n,e){return{type:e.type,ignoreFocus:n.fakeFocus,domModification:{classes:[n.markers.item]}}}})]),ng=b([Yt("value"),Yt("items"),Yt("dom"),Yt("components"),tr("eventOrder",{}),mc("menuBehaviours",[Cu,fl,lm,Va]),rr("movement",{mode:"menu",moveOnTab:!0},qt("mode",{grid:[ki(),ni("config",function(n,e){return{mode:"flatgrid",selector:"."+n.markers.item,initSize:{numColumns:e.initSize.numColumns,numRows:e.initSize.numRows},focusManager:n.focusManager}})],matrix:[ni("config",function(n,e){return{mode:"matrix",selectors:{row:e.rowSelector,cell:"."+n.markers.item},focusManager:n.focusManager}}),Yt("rowSelector")],menu:[tr("moveOnTab",!0),ni("config",function(n,e){return{mode:"menu",selector:"."+n.markers.item,moveOnTab:e.moveOnTab,focusManager:n.focusManager}})]})),Kt("markers",Ti()),tr("fakeFocus",!1),tr("focusManager",pu()),Ko("onHighlight")]),eg=b("alloy.menu-focus"),tg=vf({name:"Menu",configFields:ng(),partFields:Zm(),factory:function(n,e,t,r){return{uid:n.uid,dom:n.dom,markers:n.markers,behaviours:pc(n.menuBehaviours,[Cu.config({highlightClass:n.markers.selectedItem,itemClass:n.markers.item,onHighlight:n.onHighlight}),fl.config({store:{mode:"memory",initialValue:n.value}}),lm.config({find:Fn.some}),Va.config(n.movement.config(n,n.movement))]),events:Nr([_r(Xm(),function(e,t){var n=t.event();e.getSystem().getByDom(n.target()).each(function(n){Cu.highlight(e,n),t.stop(),U(e,eg(),{menu:e,item:n})})}),_r(Wm(),function(n,e){var t=e.event().item();Cu.highlight(n,t)})]),components:e,eventOrder:n.eventOrder,domModification:{attributes:{role:"menu"}}}}}),rg=function(n,e){return n.components()},og=qr({fields:[],name:"replacing",apis:/* */Object.freeze({append:function(n,e,t,r){Hd(n,0,ft,r)},prepend:function(n,e,t,r){Hd(n,0,mn,r)},remove:zd,replaceAt:Ld,replaceBy:function(e,n,t,r,o){var i=rg(e);return A(i,r).bind(function(n){return Ld(e,0,0,n,o)})},set:function(e,n,t,r){!function(n,t){var r=an(t),e=mo(r).bind(function(e){function n(n){return cn(e,n)}return n(t)?Fn.some(t):Fr(t,n)}),o=n(t);e.each(function(e){mo(r).filter(function(n){return cn(n,e)}).fold(function(){so(e)},w)})}(function(){var n=de(r,e.getSystem().build);vn(e,n)},e.element())},contents:rg})}),ig=function(t,r,o,n){return Dt(o,n).bind(function(n){return Dt(t,n).bind(function(n){var e=ig(t,r,o,n);return Fn.some([n].concat(e))})}).getOr([])},ug=function(n){return"prepared"===n.type?Fn.some(n.menu):Fn.none()},cg={init:function(){function o(t){return function(n,e){for(var t=Bn(n),r=0,o=t.length;r<o;r++){var i=t[r],u=n[i];if(e(u,i,n))return Fn.some(u)}return Fn.none()}(i.get(),function(n,e){return n===t})}var i=Pn({}),u=Pn({}),c=Pn({}),a=Pn(Fn.none()),f=Pn({}),s=function(n){return e(n).bind(ug)},e=function(n){return Dt(u.get(),n)},t=function(n){return Dt(i.get(),n)};return{setMenuBuilt:function(n,e){var t;u.set(x(x({},u.get()),((t={})[n]={type:"prepared",menu:e},t)))},setContents:function(n,e,t,r){a.set(Fn.some(n)),i.set(t),u.set(e),f.set(r);var o=Gd(r,t);c.set(o)},expand:function(t){return Dt(i.get(),t).map(function(n){var e=Dt(c.get(),t).getOr([]);return[n].concat(e)})},refresh:function(n){return Dt(c.get(),n)},collapse:function(n){return Dt(c.get(),n).bind(function(n){return 1<n.length?Fn.some(n.slice(1)):Fn.none()})},lookupMenu:e,lookupItem:t,otherMenus:function(n){var e=f.get();return j(Bn(e),n)},getPrimary:function(){return a.get().bind(s)},getMenus:function(){return u.get()},clear:function(){i.set({}),u.set({}),c.set({}),a.set(Fn.none())},isClear:function(){return a.get().isNone()},getTriggeringPath:function(n,r){var e=D(t(n).toArray(),function(n){return s(n).isSome()});return Dt(c.get(),n).bind(function(n){var t=N(e.concat(n));return function(n){for(var e=[],t=0;t<n.length;t++){var r=n[t];if(!r.isSome())return Fn.none();e.push(r.getOrDie())}return Fn.some(e)}(B(t,function(n,e){return function(n,t,r){return s(n).bind(function(e){return o(n).bind(function(n){return t(n).map(function(n){return{triggeredMenu:e,triggeringItem:n,triggeringPath:r}})})})}(n,r,t.slice(0,e+1)).fold(function(){return a.get().is(n)?[]:[Fn.none()]},function(n){return[Fn.some(n)]})}))})}}},extractPreparedMenu:ug},ag=b("collapse-item"),fg=hf({name:"TieredMenu",configFields:[Zo("onExecute"),Zo("onEscape"),Qo("onOpenMenu"),Qo("onOpenSubmenu"),Qo("onRepositionMenu"),Ko("onCollapseMenu"),tr("highlightImmediately",!0),Jt("data",[Yt("primary"),Yt("menus"),Yt("expansions")]),tr("fakeFocus",!1),Ko("onHighlight"),Ko("onHover"),Jt("markers",[Yt("backgroundMenu")].concat(wi()).concat(Si())),Yt("dom"),tr("navigateOnHover",!0),tr("stayInDom",!1),mc("tmenuBehaviours",[Va,Cu,lm,og]),tr("eventOrder",{})],apis:{collapseMenu:function(n,e){n.collapseMenu(e)},highlightPrimary:function(n,e){n.highlightPrimary(e)},repositionMenus:function(n,e){n.repositionMenus(e)}},factory:function(c,n){function r(r,o,n){return S(n,function(n,e){function t(){return tg.sketch(x(x({dom:n.dom},n),{value:e,items:n.items,markers:c.markers,fakeFocus:c.fakeFocus,onHighlight:c.onHighlight,focusManager:c.fakeFocus?function(){function o(n){return Cu.getHighlighted(n).map(function(n){return n.element()})}return{get:o,set:function(e,n){var t=o(e);e.getSystem().getByDom(n).fold(w,function(n){Cu.highlight(e,n)});var r=o(e);gu(e,t,r)}}}():pu()}))}return e===o?{type:"prepared",menu:r.getSystem().build(t())}:{type:"notbuilt",nbMenu:t}})}function a(n){return fl.getValue(n).value}function u(e,n){Cu.highlight(e,n),Cu.getHighlighted(n).orThunk(function(){return Cu.getFirst(n)}).each(function(n){W(e,n.element(),He())})}function f(e,n){return xo(de(n,function(n){return e.lookupMenu(n).bind(function(n){return"prepared"===n.type?Fn.some(n.menu):Fn.none()})}))}function s(e,n,t){var r=f(n,n.otherMenus(t));C(r,function(n){Id(n.element(),[c.markers.backgroundMenu]),c.stayInDom||og.remove(e,n)})}function l(n,r){var e=function(r){return o.get().getOrThunk(function(){var t={},n=Yi(r.element(),"."+c.markers.item),e=D(n,function(n){return"true"===Qr(n,"aria-haspopup")});return C(e,function(n){r.getSystem().getByDom(n).each(function(n){var e=a(n);t[e]=n})}),o.set(Fn.some(t)),t})}(n);Nn(e,function(n,e){var t=k(r,e);Kr(n.element(),"aria-expanded",t)})}function d(r,o,i){return Fn.from(i[0]).bind(function(n){return o.lookupMenu(n).bind(function(n){if("notbuilt"===n.type)return Fn.none();var e=n.menu,t=f(o,i.slice(1));return C(t,function(n){io(n.element(),c.markers.backgroundMenu)}),K(e.element())||og.append(r,Gm(e)),Id(e.element(),[c.markers.backgroundMenu]),u(r,e),s(r,o,i),Fn.some(e)})})}var m,e,o=Pn(Fn.none()),g=cg.init(),i=function(n){return S(c.data.menus,function(n,e){return B(n.items,function(n){return"separator"===n.type?[]:[n.data.value]})})};(e=m=m||{})[e.HighlightSubmenu=0]="HighlightSubmenu",e[e.HighlightParent=1]="HighlightParent";function p(o,i,u){void 0===u&&(u=m.HighlightSubmenu);var n=a(i);return g.expand(n).bind(function(r){return l(o,r),Fn.from(r[0]).bind(function(t){return g.lookupMenu(t).bind(function(n){var e=function(n,e,t){if("notbuilt"!==t.type)return t.menu;var r=n.getSystem().build(t.nbMenu());return g.setMenuBuilt(e,r),r}(o,t,n);return K(e.element())||og.append(o,Gm(e)),c.onOpenSubmenu(o,i,e,N(r)),u===m.HighlightSubmenu?(Cu.highlightFirst(e),d(o,g,r)):(Cu.dehighlightAll(e),Fn.some(i))})})})}function h(e,t){var n=a(t);return g.collapse(n).bind(function(n){return l(e,n),d(e,g,n).map(function(n){return c.onCollapseMenu(e,t,n),n})})}function t(t){return function(e,n){return Zi(n.getSource(),"."+c.markers.item).bind(function(n){return e.getSystem().getByDom(n).toOption().bind(function(n){return t(e,n).map(function(){return!0})})})}}function v(n){return Cu.getHighlighted(n).bind(Cu.getHighlighted)}var y=Nr([_r(eg(),function(t,r){var n=r.event().item();g.lookupItem(a(n)).each(function(){var n=r.event().menu();Cu.highlight(t,n);var e=a(r.event().item());g.refresh(e).each(function(n){return s(t,g,n)})})}),Mo(function(e,n){var t=n.event().target();e.getSystem().getByDom(t).each(function(n){0===a(n).indexOf("collapse-item")&&h(e,n),p(e,n,m.HighlightSubmenu).fold(function(){c.onExecute(e,n)},function(){})})}),Eo(function(e,n){(function(n){var e=r(n,c.data.primary,c.data.menus),t=i();return g.setContents(c.data.primary,e,c.data.expansions,t),g.getPrimary()})(e).each(function(n){og.append(e,Gm(n)),c.onOpenMenu(e,n),c.highlightImmediately&&u(e,n)})})].concat(c.navigateOnHover?[_r(Wm(),function(n,e){var t=e.event().item();!function(e,n){var t=a(n);g.refresh(t).bind(function(n){return l(e,n),d(e,g,n)})}(n,t),p(n,t,m.HighlightParent),c.onHover(n,t)})]:[])),b={collapseMenu:function(e){v(e).each(function(n){h(e,n)})},highlightPrimary:function(e){g.getPrimary().each(function(n){u(e,n)})},repositionMenus:function(r){g.getPrimary().bind(function(e){return v(r).bind(function(n){var e=a(n),t=function(n){return _n(n,function(n){return n})}(g.getMenus()),r=xo(de(t,cg.extractPreparedMenu));return g.getTriggeringPath(e,function(n){return function(n,e,t){return wo(e,function(n){if(!n.getSystem().isConnected())return Fn.none();var e=Cu.getCandidates(n);return R(e,function(n){return a(n)===t})})}(0,r,n)})}).map(function(n){return{primary:e,triggeringPath:n}})}).fold(function(){(function(n){return Fn.from(n.components()[0]).filter(function(n){return"menu"===Qr(n.element(),"role")})})(r).each(function(n){c.onRepositionMenu(r,n,[])})},function(n){var e=n.primary,t=n.triggeringPath;c.onRepositionMenu(r,e,t)})}};return{uid:c.uid,dom:c.dom,markers:c.markers,behaviours:pc(c.tmenuBehaviours,[Va.config({mode:"special",onRight:t(function(n,e){return Iu(e.element())?Fn.none():p(n,e,m.HighlightSubmenu)}),onLeft:t(function(n,e){return Iu(e.element())?Fn.none():h(n,e)}),onEscape:t(function(n,e){return h(n,e).orThunk(function(){return c.onEscape(n,e).map(function(){return n})})}),focusIn:function(e,n){g.getPrimary().each(function(n){W(e,n.element(),He())})}}),Cu.config({highlightClass:c.markers.selectedMenu,itemClass:c.markers.menu}),lm.config({find:function(n){return Cu.getHighlighted(n)}}),og.config({})]),eventOrder:c.eventOrder,apis:b,events:y}},extraApis:{tieredData:function(n,e,t){return{primary:n,menus:e,expansions:t}},singleData:function(n,e){return{primary:n,menus:En(n,e),expansions:{}}},collapseItem:function(n){return{value:yc(ag()),meta:{text:n}}}}}),sg=function(n,e,t,r){return Ud(0,e,0,r).bind(function(e){return e.transition.map(function(n){return{transition:n,route:e}})})},lg=function(n,e,t){var r=n.element();return Zr(r,e.destinationAttr)?Fn.some({start:Qr(n.element(),e.stateAttr),destination:Qr(n.element(),e.destinationAttr)}):Fn.none()},dg=/* */Object.freeze({findRoute:Ud,disableTransition:$d,getCurrentRoute:lg,jumpTo:Wd,progressTo:function(t,r,o,i){!function(n,e){Zr(n.element(),e.destinationAttr)&&(Kr(n.element(),e.stateAttr,Qr(n.element(),e.destinationAttr)),no(n.element(),e.destinationAttr))}(t,r);var n=function(n,e,t,r){return{start:Qr(n.element(),e.stateAttr),destination:r}}(t,r,0,i);sg(t,r,o,n).fold(function(){Wd(t,r,o,i)},function(n){$d(t,r,o);var e=n.transition;io(t.element(),e.transitionClass),Kr(t.element(),r.destinationAttr,i)})},getState:function(n,e,t){var r=n.element();return Zr(r,e.stateAttr)?Fn.some(Qr(r,e.stateAttr)):Fn.none()}}),mg=/* */Object.freeze({events:function(o,i){return Nr([_r(Ae(),function(t,n){var r=n.event().raw();lg(t,o).each(function(e){Ud(0,o,0,e).each(function(n){n.transition.each(function(n){r.propertyName===n.property&&(Wd(t,o,i,e.destination),o.onTransition(t,e))})})})}),Eo(function(n,e){Wd(n,o,i,o.initialState)})])}}),gg=[tr("destinationAttr","data-transitioning-destination"),tr("stateAttr","data-transitioning-state"),Yt("initialState"),Ko("onTransition"),Ko("onFinish"),Kt("routes",Ut(vt.value,Ut(vt.value,Pt([er("transition",[Yt("property"),Yt("transitionClass")])]))))],pg=qr({fields:gg,name:"transitioning",active:mg,apis:dg,extra:{createRoutes:function(n){var r={};return Nn(n,function(n,e){var t=e.split("<->");r[t[0]]=En(t[1],n),r[t[1]]=En(t[0],n)}),r},createBistate:function(n,e,t){return Cn([{key:n,value:En(e,t)},{key:e,value:En(n,t)}])},createTristate:function(n,e,t,r){return Cn([{key:n,value:Cn([{key:e,value:r},{key:t,value:r}])},{key:e,value:Cn([{key:n,value:r},{key:t,value:r}])},{key:t,value:Cn([{key:n,value:r},{key:e,value:r}])}])}}}),hg=_i.resolve("scrollable"),vg={register:function(n){io(n,hg)},deregister:function(n){co(n,hg)},scrollable:b(hg)},yg=function(n,e,t,r,o){return{data:{value:n,text:e},type:"item",dom:{tag:"div",classes:o?[_i.resolve("styles-item-is-menu")]:[]},toggling:{toggleOnExecute:!1,toggleClass:_i.resolve("format-matches"),selected:t},itemBehaviours:Bo(o?[]:[Bi(n,function(n,e){(e?Fi.on:Fi.off)(n)})]),components:[{dom:{tag:"div",attributes:{style:r},innerHtml:e}}]}},bg=function(n,e,t,r){return{value:n,dom:{tag:"div"},components:[Ls.sketch({dom:{tag:"div",classes:[_i.resolve("styles-collapser")]},components:r?[{dom:{tag:"span",classes:[_i.resolve("styles-collapse-icon")]}},jd(n)]:[jd(n)],action:function(n){if(r){var e=t().get(n);fg.collapseMenu(e)}}}),{dom:{tag:"div",classes:[_i.resolve("styles-menu-items-container")]},components:[tg.parts().items({})],behaviours:Bo([am("adhoc-scrollable-menu",[Eo(function(n,e){Gi(n.element(),"overflow-y","auto"),Gi(n.element(),"-webkit-overflow-scrolling","touch"),vg.register(n.element())}),Co(function(n){pi(n.element(),"overflow-y"),pi(n.element(),"-webkit-overflow-scrolling"),vg.deregister(n.element())})])])}],items:e,menuBehaviours:Bo([pg.config({initialState:"after",routes:pg.createTristate("before","current","after",{transition:{property:"transform",transitionClass:"transitioning"}})})])}},xg=function(r){var n=function(r,o){var n=bg("Styles",[].concat(de(r.items,function(n){return yg(Xd(n),n.title,n.isSelected(),n.getPreview(),Mn(r.expansions,Xd(n)))})),o,!1),e=S(r.menus,function(n,e){var t=de(n,function(n){return yg(Xd(n),n.title,n.isSelected!==undefined&&n.isSelected(),n.getPreview!==undefined?n.getPreview():"",Mn(r.expansions,Xd(n)))});return bg(e,t,o,!0)}),t=xt(e,En("styles",n));return{tmenu:fg.tieredData("styles",t,r.expansions)}}(r.formats,function(){return e}),e=js(fg.sketch({dom:{tag:"div",classes:[_i.resolve("styles-menu")]},components:[],fakeFocus:!0,stayInDom:!0,onExecute:function(n,e){var t=fl.getValue(e);return r.handle(e,t.value),Fn.none()},onEscape:function(){return Fn.none()},onOpenMenu:function(n,e){var t=Mf(n.element());Df(e.element(),t),pg.jumpTo(e,"current")},onOpenSubmenu:function(n,e,t){var r=Mf(n.element()),o=Ji(e.element(),'[role="menu"]').getOrDie("hacky"),i=n.getSystem().getByDom(o).getOrDie();Df(t.element(),r),pg.progressTo(i,"before"),pg.jumpTo(t,"after"),pg.progressTo(t,"current")},onCollapseMenu:function(n,e,t){var r=Ji(e.element(),'[role="menu"]').getOrDie("hacky"),o=n.getSystem().getByDom(r).getOrDie();pg.progressTo(o,"after"),pg.progressTo(t,"current")},navigateOnHover:!1,highlightImmediately:!0,data:n.tmenu,markers:{backgroundMenu:_i.resolve("styles-background-menu"),menu:_i.resolve("styles-menu"),selectedMenu:_i.resolve("styles-selected-menu"),item:_i.resolve("styles-item"),selectedItem:_i.resolve("styles-selected-item")}}));return e.asSpec()},wg=function(n){return M(n,function(n,e){var t=qd(e);return{menus:xt(n.menus,t.menus),items:[t.item].concat(n.items),expansions:xt(n.expansions,t.expansions)}},{menus:{},expansions:{},items:[]})},Sg={expand:wg},Tg=function(r,n){function o(n){return function(){return r.formatter.match(n)}}function i(n){return function(){return r.formatter.getCssText(n)}}var e=Dt(n,"style_formats").getOr(Fm),t=function(n){return de(n,function(n){if(Mn(n,"items")){var e=t(n.items);return xt(function(n){return xt(n,{isSelected:b(!1),getPreview:b("")})}(n),{items:e})}return Mn(n,"format")?function(n){return xt(n,{isSelected:o(n.format),getPreview:i(n.format)})}(n):function(n){var e=yc(n.title),t=xt(n,{format:e,isSelected:o(e),getPreview:i(e)});return r.formatter.register(e,t),t}(n)})};return t(e)},Og=function(t,n,r){var e=function(e,n){var t=function(n){return B(n,function(n){return n.items===undefined?!Mn(n,"format")||e.formatter.canApply(n.format)?[n]:[]:0<t(n.items).length?[n]:[]})},r=t(n);return Sg.expand(r)}(t,n);return xg({formats:e,handle:function(n,e){t.undoManager.transact(function(){Fi.isOn(n)?t.formatter.remove(e):t.formatter.apply(e)}),r()}})},kg=["undo","bold","italic","link","image","bullist","styleselect"],Eg=function(n){return B(n,function(n){return ie(n)?Eg(n):Yd(n)})},Cg=function(e,r){function n(n){return function(){return Ws.forToolbarCommand(r,n)}}function t(n){return function(){return Ws.forToolbarStateCommand(r,n)}}function o(n,e,t){return function(){return Ws.forToolbarStateAction(r,n,e,t)}}function i(){return Og(r,h,function(){r.fire("scrollIntoView")})}function u(n,e){return{isSupported:function(){var e=r.ui.registry.getAll().buttons;return n.forall(function(n){return Mn(e,n)})},sketch:e}}var c=n("undo"),a=n("redo"),f=t("bold"),s=t("italic"),l=t("underline"),d=n("removeformat"),m=o("unlink","link",function(){r.execCommand("unlink",null,!1)}),g=o("unordered-list","ul",function(){r.execCommand("InsertUnorderedList",null,!1)}),p=o("ordered-list","ol",function(){r.execCommand("InsertOrderedList",null,!1)}),h=Tg(r,r.settings);return{undo:u(Fn.none(),c),redo:u(Fn.none(),a),bold:u(Fn.none(),f),italic:u(Fn.none(),s),underline:u(Fn.none(),l),removeformat:u(Fn.none(),d),link:u(Fn.none(),function(){return function(e,t){return Ws.forToolbarStateAction(t,"link","link",function(){var n=Am(e,t);e.setContextToolbar(n),cm(t,function(){e.focusToolbar()}),im.query(t).each(function(n){t.selection.select(n.dom())})})}(e,r)}),unlink:u(Fn.none(),m),image:u(Fn.none(),function(){return Zl(r)}),bullist:u(Fn.some("bullist"),g),numlist:u(Fn.some("numlist"),p),fontsizeselect:u(Fn.none(),function(){return function(n,e){var t={onChange:function(n){Hl.apply(e,n)},getInitialValue:function(){return Hl.get(e)}};return Fs(n,"font-size",function(){return Ns(t)},e)}(e,r)}),forecolor:u(Fn.none(),function(){return Nl(e,r)}),styleselect:u(Fn.none(),function(){return Ws.forToolbar("style-formats",function(n){r.fire("toReading"),e.dropup().appear(i,Fi.on,n)},Bo([Fi.config({toggleClass:_i.resolve("toolbar-button-selected"),toggleOnExecute:!1,aria:{mode:"pressed"}}),Ci.config({channels:Cn([Ni(Uo.orientationChanged(),Fi.off),Ni(Uo.dropupDismissed(),Fi.off)])})]),r)})}},Dg=function(n,t){var e=Kd(n),r={};return B(e,function(n){var e=!Mn(r,n)&&Mn(t,n)&&t[n].isSupported()?[t[n].sketch()]:[];return r[n]=!0,e})},Mg=function(n,e,t,r){n.dom().removeEventListener(e,t,r)},Ig=b(!0),Rg=tinymce.util.Tools.resolve("tinymce.util.Delay"),Ag=em,Fg=function(r,e){var n=Je.fromDom(r),o=null,t=Zd(n,"orientationchange",function(){Rg.clearInterval(o);var n=em(r);e.onChange(n),i(function(){e.onReady(n)})}),i=function(n){Rg.clearInterval(o);var e=r.innerHeight,t=0;o=Rg.setInterval(function(){e!==r.innerHeight?(Rg.clearInterval(o),n(Fn.some(r.innerHeight))):20<t&&(Rg.clearInterval(o),n(Fn.none())),t++},50)};return{onAdjustment:i,destroy:function(){t.unbind()}}},Bg=function(n){var e=L().os.isiOS(),t=em(n).isPortrait();return e&&!t?n.screen.height:n.screen.width};function Vg(n){var e=n.raw();return e.touches===undefined||1!==e.touches.length?Fn.none():Fn.some(e.touches[0])}function Ng(t){var r=Pn(Fn.none()),o=Pn(!1),i=function n(t,r){var o=null;return{cancel:function(){null!==o&&(l.clearTimeout(o),o=null)},schedule:function(){for(var n=[],e=0;e<arguments.length;e++)n[e]=arguments[e];o=l.setTimeout(function(){t.apply(null,n),o=null},r)}}}(function(n){t.triggerEvent(Le(),n),o.set(!0)},400),u=Cn([{key:xe(),value:function(t){return Vg(t).each(function(n){i.cancel();var e={x:b(n.clientX),y:b(n.clientY),target:t.target};i.schedule(t),o.set(!1),r.set(Fn.some(e))}),Fn.none()}},{key:we(),value:function(n){return i.cancel(),Vg(n).each(function(e){r.get().each(function(n){!function(n,e){var t=Math.abs(n.clientX-e.x()),r=Math.abs(n.clientY-e.y());return 5<t||5<r}(e,n)||r.set(Fn.none())})}),Fn.none()}},{key:Se(),value:function(e){i.cancel();return r.get().filter(function(n){return cn(n.target(),e.target())}).map(function(n){return o.get()?(e.prevent(),!1):t.triggerEvent(ze(),e)})}}]);return{fireIfReady:function(e,n){return Dt(u,n).bind(function(n){return n(e)})}}}var jg=function(t){var e=Ng({triggerEvent:function(n,e){t.onTapContent(e)}});return{fireTouchstart:function(n){e.fireIfReady(n,"touchstart")},onTouchend:function(){return Zd(t.body(),"touchend",function(n){e.fireIfReady(n,"touchend")})},onTouchmove:function(){return Zd(t.body(),"touchmove",function(n){e.fireIfReady(n,"touchmove")})}}},_g=6<=L().os.version.major,Pg=function(r,e,t){function o(n){return!cn(n.start(),n.finish())||n.soffset()!==n.foffset()}function n(){var n=r.doc().dom().hasFocus()&&r.getSelection().exists(o);t.getByDom(e).each(!0===(n||mo(u).filter(function(n){return"input"===q(n)}).exists(function(n){return n.dom().selectionStart!==n.dom().selectionEnd}))?Fi.on:Fi.off)}var i=jg(r),u=an(e),c=[Zd(r.body(),"touchstart",function(n){r.onTouchContent(),i.fireTouchstart(n)}),i.onTouchmove(),i.onTouchend(),Zd(e,"touchstart",function(n){r.onTouchToolstrip()}),r.onToReading(function(){lo(r.body())}),r.onToEditing(w),r.onScrollToCursor(function(n){n.preventDefault(),r.getCursorBox().each(function(n){var e=r.win(),t=n.top()>e.innerHeight||n.bottom()>e.innerHeight?n.bottom()-e.innerHeight+50:0;0!=t&&e.scrollTo(e.pageXOffset,e.pageYOffset+t)})})].concat(!0==_g?[]:[Zd(Je.fromDom(r.win()),"blur",function(){t.getByDom(e).each(Fi.off)}),Zd(u,"select",n),Zd(r.doc(),"selectionchange",n)]);return{destroy:function(){C(c,function(n){n.unbind()})}}},Hg=function(n,e){var t=parseInt(Qr(n,e),10);return isNaN(t)?0:t};function zg(n){return Cp.getOption(n)}function Lg(n){return function(n){return zg(n).filter(function(n){return 0!==n.trim().length||-1<n.indexOf("\xa0")}).isSome()}(n)||k(Dp,q(n))}function Gg(n,e,t){var r=n.document.createRange();return function(t,n){n.fold(function(n){t.setStartBefore(n.dom())},function(n,e){t.setStart(n.dom(),e)},function(n){t.setStartAfter(n.dom())})}(r,e),function(t,n){n.fold(function(n){t.setEndBefore(n.dom())},function(n,e){t.setEnd(n.dom(),e)},function(n){t.setEndAfter(n.dom())})}(r,t),r}function Ug(n,e,t,r,o){var i=n.document.createRange();return i.setStart(e.dom(),t),i.setEnd(r.dom(),o),i}function $g(n){return{left:b(n.left),top:b(n.top),right:b(n.right),bottom:b(n.bottom),width:b(n.width),height:b(n.height)}}function Wg(n,e,t){return e(Je.fromDom(t.startContainer),t.startOffset,Je.fromDom(t.endContainer),t.endOffset)}function Xg(n,e){return function(n,e){var t=e.ltr();return t.collapsed?e.rtl().filter(function(n){return!1===n.collapsed}).map(function(n){return Bp.rtl(Je.fromDom(n.endContainer),n.endOffset,Je.fromDom(n.startContainer),n.startOffset)}).getOrThunk(function(){return Wg(0,Bp.ltr,t)}):Wg(0,Bp.ltr,t)}(0,function(o,n){return n.match({domRange:function(n){return{ltr:b(n),rtl:Fn.none}},relative:function(n,e){return{ltr:X(function(){return Gg(o,n,e)}),rtl:X(function(){return Fn.some(Gg(o,e,n))})}},exact:function(n,e,t,r){return{ltr:X(function(){return Ug(o,n,e,t,r)}),rtl:X(function(){return Fn.some(Ug(o,t,r,n,e))})}}})}(n,e))}function qg(n,e,t){return e>=n.left&&e<=n.right&&t>=n.top&&t<=n.bottom}function Yg(t,r,n,e,o){function i(n){var e=t.dom().createRange();return e.setStart(r.dom(),n),e.collapse(!0),e}var u=function(n){return Cp.get(n)}(r).length,c=function(n,e,t,r,o){if(0===o)return 0;if(e===r)return o-1;for(var i=r,u=1;u<o;u++){var c=n(u),a=Math.abs(e-c.left);if(t<=c.bottom){if(t<c.top||i<a)return u-1;i=a}}return 0}(function(n){return i(n).getBoundingClientRect()},n,e,o.right,u);return i(c)}function Kg(n){return Fr(n,Lg)}function Jg(n){return Np(n,Lg)}function Qg(n,e){return e-n.left<n.right-e}function Zg(n,e,t){var r=n.dom().createRange();return r.selectNode(e.dom()),r.collapse(t),r}function np(e,n,t){var r=e.dom().createRange();r.selectNode(n.dom());var o=r.getBoundingClientRect(),i=Qg(o,t);return(!0===i?Kg:Jg)(n).map(function(n){return Zg(e,n,i)})}function ep(n,e,t){var r=e.dom().getBoundingClientRect(),o=Qg(r,t);return Fn.some(Zg(n,e,o))}function tp(n,e,t,r){var o=n.dom().createRange();o.selectNode(e.dom());var i=o.getBoundingClientRect();return function(n,e,t,r){var o=n.dom().createRange();o.selectNode(e.dom());var i=o.getBoundingClientRect(),u=Math.max(i.left,Math.min(i.right,t)),c=Math.max(i.top,Math.min(i.bottom,r));return Vp(n,e,u,c)}(n,e,Math.max(i.left,Math.min(i.right,t)),Math.max(i.top,Math.min(i.bottom,r)))}function rp(n,e){var t=q(n);return"input"===t?Rp.after(n):k(["br","img"],t)?0===e?Rp.before(n):Rp.after(n):Rp.on(n,e)}function op(n,e,t,r){var o=function(n,e,t,r){var o=an(n).dom().createRange();return o.setStart(n.dom(),e),o.setEnd(t.dom(),r),o}(n,e,t,r),i=cn(n,t)&&e===r;return o.collapsed&&!i}function ip(n,e,t,r,o){!function(n,e){Fn.from(n.getSelection()).each(function(n){n.removeAllRanges(),n.addRange(e)})}(n,Ug(n,e,t,r,o))}function up(n,e,t,r,o){!function(u,n){Xg(u,n).match({ltr:function(n,e,t,r){ip(u,n,e,t,r)},rtl:function(n,e,t,r){var o=u.getSelection();if(o.setBaseAndExtent)o.setBaseAndExtent(n.dom(),e,t.dom(),r);else if(o.extend)try{!function(n,e,t,r,o,i){e.collapse(t.dom(),r),e.extend(o.dom(),i)}(0,o,n,e,t,r)}catch(i){ip(u,t,r,n,e)}else ip(u,t,r,n,e)}})}(n,function(n,e,t,r){var o=rp(n,e),i=rp(t,r);return Fp.relative(o,i)}(e,t,r,o))}function cp(n){var e=Je.fromDom(n.anchorNode),t=Je.fromDom(n.focusNode);return op(e,n.anchorOffset,t,n.focusOffset)?Fn.some(Mp.create(e,n.anchorOffset,t,n.focusOffset)):function(n){if(0<n.rangeCount){var e=n.getRangeAt(0),t=n.getRangeAt(n.rangeCount-1);return Fn.some(Mp.create(Je.fromDom(e.startContainer),e.startOffset,Je.fromDom(t.endContainer),t.endOffset))}return Fn.none()}(n)}function ap(n){return Fn.from(n.getSelection()).filter(function(n){return 0<n.rangeCount}).bind(cp)}function fp(n,e){return function(n){var e=n.getClientRects(),t=0<e.length?e[0]:n.getBoundingClientRect();return 0<t.width||0<t.height?Fn.some(t).map($g):Fn.none()}(function(i,n){return Xg(i,n).match({ltr:function(n,e,t,r){var o=i.document.createRange();return o.setStart(n.dom(),e),o.setEnd(t.dom(),r),o},rtl:function(n,e,t,r){var o=i.document.createRange();return o.setStart(t.dom(),r),o.setEnd(n.dom(),e),o}})}(n,e))}function sp(n){return{left:n.left,top:n.top,right:n.right,bottom:n.bottom,width:b(2),height:n.height}}function lp(n){return{left:b(n.left),top:b(n.top),right:b(n.right),bottom:b(n.bottom),width:b(n.width),height:b(n.height)}}function dp(t){if(t.collapsed){var r=Je.fromDom(t.startContainer);return fn(r).bind(function(n){var e=Fp.exact(r,t.startOffset,n,function(n){return"img"===q(n)?1:zg(n).fold(function(){return at(n).length},function(n){return n.length})}(n));return fp(t.startContainer.ownerDocument.defaultView,e).map(sp).map(_)}).getOr([])}return de(t.getClientRects(),lp)}function mp(n,e){Kr(n,Pp,e)}function gp(n){return{top:b(n.top()),bottom:b(n.top()+n.height())}}function pp(n,e){var t=function(n){return Hg(n,Pp)}(e),r=n.innerHeight;return r<t?Fn.some(t-r):Fn.none()}function hp(n){return Fn.some(Je.fromDom(n.dom().contentWindow.document.body))}function vp(n){return Fn.some(Je.fromDom(n.dom().contentWindow.document))}function yp(n){return Fn.from(n.dom().contentWindow)}function bp(n){return yp(n).bind(ap)}function xp(n){return n.getFrame()}function wp(n,t){return function(e){return e[n].getOrThunk(function(){var n=xp(e);return function(){return t(n)}})()}}function Sp(n,e,t,r){return n[t].getOrThunk(function(){return function(n){return Zd(e,r,n)}})}function Tp(n){return{left:b(n.left),top:b(n.top),right:b(n.right),bottom:b(n.bottom),width:b(n.width),height:b(n.height)}}function Op(t,r){var o=null;return{cancel:function(){null!==o&&(l.clearTimeout(o),o=null)},throttle:function(){for(var n=[],e=0;e<arguments.length;e++)n[e]=arguments[e];null!==o&&l.clearTimeout(o),o=l.setTimeout(function(){t.apply(null,n),o=null},r)}}}function kp(n){return"true"===Qr(n,ih)?function(n){return 0<n.dom().scrollLeft||function(n){n.dom().scrollLeft=1;var e=0!==n.dom().scrollLeft;return n.dom().scrollLeft=0,e}(n)}(n):function(n){return 0<n.dom().scrollTop||function(n){n.dom().scrollTop=1;var e=0!==n.dom().scrollTop;return n.dom().scrollTop=0,e}(n)}(n)}var Ep,Cp=function oy(t,r){var e=function(n){return t(n)?Fn.from(n.dom().nodeValue):Fn.none()};return{get:function(n){if(!t(n))throw new Error("Can only get "+r+" value of a "+r+" node");return e(n).getOr("")},getOption:e,set:function(n,e){if(!t(n))throw new Error("Can only set raw "+r+" value of a "+r+" node");n.dom().nodeValue=e}}}(tt,"text"),Dp=["img","br"],Mp={create:J("start","soffset","finish","foffset")},Ip=yt([{before:["element"]},{on:["element","offset"]},{after:["element"]}]),Rp={before:Ip.before,on:Ip.on,after:Ip.after,cata:function(n,e,t,r){return n.fold(e,t,r)},getStart:function(n){return n.fold(y,y,y)}},Ap=yt([{domRange:["rng"]},{relative:["startSitu","finishSitu"]},{exact:["start","soffset","finish","foffset"]}]),Fp={domRange:Ap.domRange,relative:Ap.relative,exact:Ap.exact,exactFromRange:function(n){return Ap.exact(n.start(),n.soffset(),n.finish(),n.foffset())},getWin:function(n){return function(n){return Je.fromDom(n.dom().ownerDocument.defaultView)}(function(n){return n.match({domRange:function(n){return Je.fromDom(n.startContainer)},relative:function(n,e){return Rp.getStart(n)},exact:function(n,e,t,r){return n}})}(n))},range:Mp.create},Bp=yt([{ltr:["start","soffset","finish","foffset"]},{rtl:["start","soffset","finish","foffset"]}]),Vp=function(n,e,t,r){return tt(e)?function(e,t,r,o){var n=e.dom().createRange();n.selectNode(t.dom());var i=n.getClientRects();return wo(i,function(n){return qg(n,r,o)?Fn.some(n):Fn.none()}).map(function(n){return Yg(e,t,r,o,n)})}(n,e,t,r):function(e,n,t,r){var o=e.dom().createRange(),i=at(n);return wo(i,function(n){return o.selectNode(n.dom()),qg(o.getBoundingClientRect(),t,r)?Vp(e,n,t,r):Fn.none()})}(n,e,t,r)},Np=function(n,i){var u=function(n){for(var e=at(n),t=e.length-1;0<=t;t--){var r=e[t];if(i(r))return Fn.some(r);var o=u(r);if(o.isSome())return o}return Fn.none()};return u(n)},jp=(document.caretPositionFromPoint||document.caretRangeFromPoint,function(n){var e=n.getSelection();return e!==undefined&&0<e.rangeCount?dp(e.getRangeAt(0)):[]}),_p=function(n){n.focus();var e=Je.fromDom(n.document.body);(mo().exists(function(n){return k(["input","textarea"],q(n))})?function(n){Rg.setTimeout(function(){n()},0)}:t)(function(){mo().each(lo),so(e)})},Pp="data-"+_i.resolve("last-outer-height"),Hp=function(n,r){var e=Je.fromDom(r.document.body),t=Zd(Je.fromDom(n),"resize",function(){pp(n,e).each(function(t){(function(n){var e=jp(n);return 0<e.length?Fn.some(e[0]).map(gp):Fn.none()})(r).each(function(n){var e=function(n,e,t){return e.top()>n.innerHeight||e.bottom()>n.innerHeight?Math.min(t,e.bottom()-n.innerHeight+50):0}(r,n,t);0!==e&&r.scrollTo(r.pageXOffset,r.pageYOffset+e)})}),mp(e,n.innerHeight)});mp(e,n.innerHeight);return{toEditing:function(){_p(r)},destroy:function(){t.unbind()}}},zp={getBody:wp("getBody",hp),getDoc:wp("getDoc",vp),getWin:wp("getWin",yp),getSelection:wp("getSelection",bp),getFrame:xp,getActiveApi:function(c){var a=xp(c);return hp(a).bind(function(u){return vp(a).bind(function(i){return yp(a).map(function(o){var n=Je.fromDom(i.dom().documentElement),e=c.getCursorBox.getOrThunk(function(){return function(){return function(n){return ap(n).map(function(n){return Fp.exact(n.start(),n.soffset(),n.finish(),n.foffset())})}(o).bind(function(n){return fp(o,n).orThunk(function(){return function(n){return ap(n).filter(function(n){return cn(n.start(),n.finish())&&n.soffset()===n.foffset()}).bind(function(n){var e=n.start().dom().getBoundingClientRect();return 0<e.width||0<e.height?Fn.some(e).map(Tp):Fn.none()})}(o)})})}}),t=c.setSelection.getOrThunk(function(){return function(n,e,t,r){up(o,n,e,t,r)}}),r=c.clearSelection.getOrThunk(function(){return function(){!function(n){n.getSelection().removeAllRanges()}(o)}});return{body:b(u),doc:b(i),win:b(o),html:b(n),getSelection:d(bp,a),setSelection:t,clearSelection:r,frame:b(a),onKeyup:Sp(c,i,"onKeyup","keyup"),onNodeChanged:Sp(c,i,"onNodeChanged","SelectionChange"),onDomChanged:c.onDomChanged,onScrollToCursor:c.onScrollToCursor,onScrollToElement:c.onScrollToElement,onToReading:c.onToReading,onToEditing:c.onToEditing,onToolbarScrollStart:c.onToolbarScrollStart,onTouchContent:c.onTouchContent,onTapContent:c.onTapContent,onTouchToolstrip:c.onTouchToolstrip,getCursorBox:e}})})})}},Lp="data-ephox-mobile-fullscreen-style",Gp="position:absolute!important;",Up="top:0!important;left:0!important;margin:0!important;padding:0!important;width:100%!important;height:100%!important;overflow:visible!important;",$p=L().os.isAndroid(),Wp=function(n,e){function t(r){return function(n){var e=Qr(n,"style"),t=e===undefined?"no-styles":e.trim();t!==r&&(Kr(n,Lp,t),Kr(n,"style",r))}}var r=function(n,e,t){return Xi(n,function(n){return tn(n,e)},t)}(n,"*"),o=B(r,function(n){return function(n,e){return qi(n,function(n){return tn(n,e)})}(n,"*")}),i=function(n){var e=mi(n,"background-color");return e!==undefined&&""!==e?"background-color:"+e+"!important":"background-color:rgb(255,255,255)!important;"}(e);C(o,t("display:none!important;")),C(r,t(Gp+Up+i)),t((!0===$p?"":Gp)+Up+i)(n)},Xp=function(){var n=function(n){return on(n)}("["+Lp+"]");C(n,function(n){var e=Qr(n,Lp);"no-styles"!==e?Kr(n,"style",e):no(n,"style"),no(n,Lp)})},qp=function(){var e=Ki("head").getOrDie(),n=Ki('meta[name="viewport"]').getOrThunk(function(){var n=Je.fromTag("meta");return Kr(n,"name","viewport"),ft(e,n),n}),t=Qr(n,"content");return{maximize:function(){Kr(n,"content","width=device-width, initial-scale=1.0, user-scalable=no, maximum-scale=1.0")},restore:function(){t!==undefined&&null!==t&&0<t.length?Kr(n,"content",t):Kr(n,"content","user-scalable=yes")}}},Yp=function(e,n){var t=qp(),r=yd(),o=yd();return{enter:function(){n.hide(),io(e.container,_i.resolve("fullscreen-maximized")),io(e.container,_i.resolve("android-maximized")),t.maximize(),io(e.body,_i.resolve("android-scroll-reload")),r.set(Hp(e.win,zp.getWin(e.editor).getOrDie("no"))),zp.getActiveApi(e.editor).each(function(n){Wp(e.container,n.body()),o.set(Pg(n,e.toolstrip,e.alloy))})},exit:function(){t.restore(),n.show(),co(e.container,_i.resolve("fullscreen-maximized")),co(e.container,_i.resolve("android-maximized")),Xp(),co(e.body,_i.resolve("android-scroll-reload")),o.clear(),r.clear()}}},Kp=function(n,e){var t=js(dm.sketch({dom:Us('<div aria-hidden="true" class="${prefix}-mask-tap-icon"></div>'),containerBehaviours:Bo([Fi.config({toggleClass:_i.resolve("mask-tap-icon-selected"),toggleOnExecute:!1})])})),r=function(t,r){var o=null;return{cancel:function(){null!==o&&(l.clearTimeout(o),o=null)},throttle:function(){for(var n=[],e=0;e<arguments.length;e++)n[e]=arguments[e];null===o&&(o=l.setTimeout(function(){t.apply(null,n),o=null},r))}}}(n,200);return dm.sketch({dom:Us('<div class="${prefix}-disabled-mask"></div>'),components:[dm.sketch({dom:Us('<div class="${prefix}-content-container"></div>'),components:[Ls.sketch({dom:Us('<div class="${prefix}-content-tap-section"></div>'),components:[t.asSpec()],action:function(n){r.throttle()},buttonBehaviours:Bo([Fi.config({toggleClass:_i.resolve("mask-tap-icon-selected")})])})]})]})},Jp=Sr([Jt("editor",[Yt("getFrame"),Qt("getBody"),Qt("getDoc"),Qt("getWin"),Qt("getSelection"),Qt("setSelection"),Qt("clearSelection"),Qt("cursorSaver"),Qt("onKeyup"),Qt("onNodeChanged"),Qt("getCursorBox"),Yt("onDomChanged"),tr("onTouchContent",w),tr("onTapContent",w),tr("onTouchToolstrip",w),tr("onScrollToCursor",b({unbind:w})),tr("onScrollToElement",b({unbind:w})),tr("onToEditing",b({unbind:w})),tr("onToReading",b({unbind:w})),tr("onToolbarScrollStart",y)]),Yt("socket"),Yt("toolstrip"),Yt("dropup"),Yt("toolbar"),Yt("container"),Yt("alloy"),or("win",function(n){return an(n.socket).dom().defaultView}),or("body",function(n){return Je.fromDom(n.socket.dom().ownerDocument.body)}),tr("translate",y),tr("setReadOnly",w),tr("readOnlyOnInit",b(!0))]),Qp=function(n){var e=Xt("Getting AndroidWebapp schema",Jp,n);Gi(e.toolstrip,"width","100%");var t=Lm(Kp(function(){e.setReadOnly(e.readOnlyOnInit()),o.enter()},e.translate));e.alloy.add(t);var r={show:function(){e.alloy.add(t)},hide:function(){e.alloy.remove(t)}};ft(e.container,t.element());var o=Yp(e,r);return{setReadOnly:e.setReadOnly,refreshStructure:w,enter:o.enter,exit:o.exit,destroy:w}},Zp=b([Yt("dom"),tr("shell",!0),mc("toolbarBehaviours",[og])]),nh=b([rf({name:"groups",overrides:function(n){return{behaviours:Bo([og.config({})])}}})]),eh=vf({name:"Toolbar",configFields:Zp(),partFields:nh(),factory:function(e,n,t,r){var o=function(n){return e.shell?Fn.some(n):kc(n,e,"groups")},i=e.shell?{behaviours:[og.config({})],components:[]}:{behaviours:[],components:n};return{uid:e.uid,dom:e.dom,components:i.components,behaviours:pc(e.toolbarBehaviours,i.behaviours),apis:{setGroups:function(n,e){o(n).fold(function(){throw l.console.error("Toolbar was defined to not be a shell, but no groups container was specified in components"),new Error("Toolbar was defined to not be a shell, but no groups container was specified in components")},function(n){og.set(n,e)})}},domModification:{attributes:{role:"group"}}}},apis:{setGroups:function(n,e,t){n.setGroups(e,t)}}}),th=b([Yt("items"),(Ep=["itemSelector"],Jt("markers",de(Ep,Yt))),mc("tgroupBehaviours",[Va])]),rh=b([of({name:"items",unit:"item"})]),oh=vf({name:"ToolbarGroup",configFields:th(),partFields:rh(),factory:function(n,e,t,r){return{uid:n.uid,dom:n.dom,components:e,behaviours:pc(n.tgroupBehaviours,[Va.config({mode:"flow",selector:n.markers.itemSelector})]),domModification:{attributes:{role:"toolbar"}}}}}),ih="data-"+_i.resolve("horizontal-scroll"),uh={exclusive:function(n,e){return Zd(n,"touchmove",function(n){Zi(n.target(),e).filter(kp).fold(function(){n.raw().preventDefault()},w)})},markAsHorizontal:function(n){Kr(n,ih,"true")}};function ch(){function e(n){var e=!0===n.scrollable?"${prefix}-toolbar-scrollable-group":"";return{dom:Us('<div aria-label="'+n.label+'" class="${prefix}-toolbar-group '+e+'"></div>'),tgroupBehaviours:Bo([am("adhoc-scrollable-toolbar",!0===n.scrollable?[Do(function(n,e){Gi(n.element(),"overflow-x","auto"),uh.markAsHorizontal(n.element()),vg.register(n.element())})]:[])]),components:[dm.sketch({components:[oh.parts().items({})]})],markers:{itemSelector:"."+_i.resolve("toolbar-group-item")},items:n.items}}function t(){eh.setGroups(r,o.get()),Fi.off(r)}var r=Lm(eh.sketch({dom:Us('<div class="${prefix}-toolbar"></div>'),components:[eh.parts().groups({})],toolbarBehaviours:Bo([Fi.config({toggleClass:_i.resolve("context-toolbar"),toggleOnExecute:!1,aria:{mode:"none"}}),Va.config({mode:"cyclic"})]),shell:!0})),n=Lm(dm.sketch({dom:{classes:[_i.resolve("toolstrip")]},components:[Gm(r)],containerBehaviours:Bo([Fi.config({toggleClass:_i.resolve("android-selection-context-toolbar"),toggleOnExecute:!1})])})),o=Pn([]);return{wrapper:b(n),toolbar:b(r),createGroups:function(n){return de(n,i(oh.sketch,e))},setGroups:function(n){o.set(n),t()},setContextToolbar:function(n){Fi.on(r),eh.setGroups(r,n)},restoreToolbar:function(){Fi.isOn(r)&&t()},refresh:function(){},focus:function(){Va.focusIn(r)}}}function ah(n,e){og.append(n,Gm(e))}function fh(n,e){og.remove(n,e)}function sh(e,n){return n.getAnimationRoot.fold(function(){return e.element()},function(n){return n(e)})}function lh(n){return n.dimension.property}function dh(n,e){return n.dimension.getDimension(e)}function mh(n,e){var t=sh(n,e);Id(t,[e.shrinkingClass,e.growingClass])}function gh(n,e){co(n.element(),e.openClass),io(n.element(),e.closedClass),Gi(n.element(),lh(e),"0px"),hi(n.element())}function ph(n,e){co(n.element(),e.closedClass),io(n.element(),e.openClass),pi(n.element(),lh(e))}function hh(n,e,t,r){t.setCollapsed(),Gi(n.element(),lh(e),dh(e,n.element())),hi(n.element()),mh(n,e),gh(n,e),e.onStartShrink(n),e.onShrunk(n)}function vh(n,e,t,r){var o=r.getOrThunk(function(){return dh(e,n.element())});t.setCollapsed(),Gi(n.element(),lh(e),o),hi(n.element());var i=sh(n,e);co(i,e.growingClass),io(i,e.shrinkingClass),gh(n,e),e.onStartShrink(n)}function yh(n,e,t){var r=dh(e,n.element());("0px"===r?hh:vh)(n,e,t,Fn.some(r))}function bh(n,e,t){var r=sh(n,e),o=ao(r,e.shrinkingClass),i=dh(e,n.element());ph(n,e);var u=dh(e,n.element());(o?function(){Gi(n.element(),lh(e),i),hi(n.element())}:function(){gh(n,e)})(),co(r,e.shrinkingClass),io(r,e.growingClass),ph(n,e),Gi(n.element(),lh(e),u),t.setExpanded(),e.onStartGrow(n)}function xh(n,e,t){var r=sh(n,e);return!0===ao(r,e.growingClass)}function wh(n,e,t){var r=sh(n,e);return!0===ao(r,e.shrinkingClass)}function Sh(e,t){var r=Lm(dm.sketch({dom:{tag:"div",classes:[_i.resolve("dropup")]},components:[],containerBehaviours:Bo([og.config({}),Vh.config({closedClass:_i.resolve("dropup-closed"),openClass:_i.resolve("dropup-open"),shrinkingClass:_i.resolve("dropup-shrinking"),growingClass:_i.resolve("dropup-growing"),dimension:{property:"height"},onShrunk:function(n){e(),t(),og.set(n,[])},onGrown:function(n){e(),t()}}),Vi(function(n,e){o(w)})])})),o=function(n){l.window.requestAnimationFrame(function(){n(),Vh.shrink(r)})};return{appear:function(n,e,t){!0===Vh.hasShrunk(r)&&!1===Vh.isTransitioning(r)&&l.window.requestAnimationFrame(function(){e(t),og.set(r,[n()]),Vh.grow(r)})},disappear:o,component:b(r),element:r.element}}function Th(n){return 8===n.raw().which&&!k(["input","textarea"],q(n.target()))&&!function(n,e,t){return Zi(n,e,t).isSome()}(n.target(),'[contenteditable="true"]')}function Oh(e,n){var t=Xt("Getting GUI events settings",jh,n),r=Ng(t),o=de(["touchstart","touchmove","touchend","touchcancel","gesturestart","mousedown","mouseup","mouseover","mousemove","mouseout","click"].concat(["selectstart","input","contextmenu","change","transitionend","drag","dragstart","dragend","dragenter","dragleave","dragover","drop","keyup"]),function(n){return Zd(e,n,function(e){r.fireIfReady(e,n).each(function(n){n&&e.kill()}),t.triggerEvent(n,e)&&e.kill()})}),i=Pn(Fn.none()),u=Zd(e,"paste",function(e){r.fireIfReady(e,"paste").each(function(n){n&&e.kill()}),t.triggerEvent("paste",e)&&e.kill(),i.set(Fn.some(l.setTimeout(function(){t.triggerEvent(je(),e)},0)))}),c=Zd(e,"keydown",function(n){t.triggerEvent("keydown",n)?n.kill():!0===t.stopBackspace&&Th(n)&&n.prevent()}),a=function(n,e){return Nh?nm(n,"focus",e):Zd(n,"focusin",e)}(e,function(n){t.triggerEvent("focusin",n)&&n.kill()}),f=Pn(Fn.none()),s=function(n,e){return Nh?nm(n,"blur",e):Zd(n,"focusout",e)}(e,function(n){t.triggerEvent("focusout",n)&&n.kill(),f.set(Fn.some(l.setTimeout(function(){t.triggerEvent(Ne(),n)},0)))});return{unbind:function(){C(o,function(n){n.unbind()}),c.unbind(),a.unbind(),s.unbind(),u.unbind(),i.get().each(l.clearTimeout),f.get().each(l.clearTimeout)}}}function kh(n,e){var t=Dt(n,"target").map(function(n){return n()}).getOr(e);return Pn(t)}function Eh(n,r,e,t,o,i){var u=n(r,t),c=function(n,e){var t=Pn(!1),r=Pn(!1);return{stop:function(){t.set(!0)},cut:function(){r.set(!0)},isStopped:t.get,isCut:r.get,event:b(n),setSource:e.set,getSource:e.get}}(e,o);return u.fold(function(){return i.logEventNoHandlers(r,t),_h.complete()},function(e){var t=e.descHandler();return Td(t)(c),c.isStopped()?(i.logEventStopped(r,e.element(),t.purpose()),_h.stopped()):c.isCut()?(i.logEventCut(r,e.element(),t.purpose()),_h.complete()):fn(e.element()).fold(function(){return i.logNoParent(r,e.element(),t.purpose()),_h.complete()},function(n){return i.logEventResponse(r,e.element(),t.purpose()),_h.resume(n)})})}function Ch(n,e,t){var r=function(n){var e=Pn(!1);return{stop:function(){e.set(!0)},cut:w,isStopped:e.get,isCut:b(!1),event:b(n),setSource:o("Cannot set source of a broadcasted event"),getSource:o("Cannot get source of a broadcasted event")}}(e);return C(n,function(n){var e=n.descHandler();Td(e)(r)}),r.isStopped()}var Dh,Mh=function(n){return Lm(Ls.sketch({dom:Us('<div class="${prefix}-mask-edit-icon ${prefix}-icon"></div>'),action:function(){n.run(function(n){n.setReadOnly(!1)})}}))},Ih=function(){return Lm(dm.sketch({dom:Us('<div class="${prefix}-editor-socket"></div>'),components:[],containerBehaviours:Bo([og.config({})])}))},Rh=function(n,e,t,r){(!0===t?Ho.toAlpha:Ho.toOmega)(r),(t?ah:fh)(n,e)},Ah=/* */Object.freeze({refresh:function(n,e,t){if(t.isExpanded()){pi(n.element(),lh(e));var r=dh(e,n.element());Gi(n.element(),lh(e),r)}},grow:function(n,e,t){t.isExpanded()||bh(n,e,t)},shrink:function(n,e,t){t.isExpanded()&&yh(n,e,t)},immediateShrink:function(n,e,t){t.isExpanded()&&hh(n,e,t)},hasGrown:function(n,e,t){return t.isExpanded()},hasShrunk:function(n,e,t){return t.isCollapsed()},isGrowing:xh,isShrinking:wh,isTransitioning:function(n,e,t){return!0===xh(n,e)||!0===wh(n,e)},toggleGrow:function(n,e,t){(t.isExpanded()?yh:bh)(n,e,t)},disableTransitions:mh}),Fh=/* */Object.freeze({exhibit:function(n,e){var t=e.expanded;return Ur(t?{classes:[e.openClass],styles:{}}:{classes:[e.closedClass],styles:En(e.dimension.property,"0px")})},events:function(t,r){return Nr([function(n,e){return Hr(n)(e)}(Ae(),function(n,e){e.event().raw().propertyName===t.dimension.property&&(mh(n,t),r.isExpanded()&&pi(n.element(),t.dimension.property),(r.isExpanded()?t.onGrown:t.onShrunk)(n))})])}}),Bh=[Yt("closedClass"),Yt("openClass"),Yt("shrinkingClass"),Yt("growingClass"),Qt("getAnimationRoot"),Ko("onShrunk"),Ko("onStartShrink"),Ko("onGrown"),Ko("onStartGrow"),tr("expanded",!1),Kt("dimension",qt("property",{width:[ni("property","width"),ni("getDimension",function(n){return Mf(n)+"px"})],height:[ni("property","height"),ni("getDimension",function(n){return Wi(n)+"px"})]}))],Vh=qr({fields:Bh,name:"sliding",active:Fh,apis:Ah,state:/* */Object.freeze({init:function(n){var e=Pn(n.expanded);return Fo({isExpanded:function(){return!0===e.get()},isCollapsed:function(){return!1===e.get()},setCollapsed:d(e.set,!1),setExpanded:d(e.set,!0),readState:function(){return"expanded: "+e.get()}})}})}),Nh=L().browser.isFirefox(),jh=Pt([(Dh="triggerEvent",Kt(Dh,Mr)),tr("stopBackspace",!0)]),_h=yt([{stopped:[]},{resume:["element"]},{complete:[]}]),Ph=function(e,t,r,n,o,i){return Eh(e,t,r,n,o,i).fold(function(){return!0},function(n){return Ph(e,t,r,n,o,i)},function(){return!1})},Hh=function(n,e,t,r,o){var i=kh(t,r);return Ph(n,e,t,r,i,o)},zh=J("element","descHandler"),Lh=function(n,e){return{id:b(n),descHandler:b(e)}};function Gh(){var i={};return{registerId:function(r,o,n){Nn(n,function(n,e){var t=i[e]!==undefined?i[e]:{};t[o]=_m(n,r),i[e]=t})},unregisterId:function(t){Nn(i,function(n,e){n.hasOwnProperty(t)&&delete n[t]})},filterByType:function(n){return Dt(i,n).map(function(n){return _n(n,function(n,e){return Lh(e,n)})}).getOr([])},find:function(n,e,t){var r=Ct(e)(i);return ko(t,function(n){return function(t,r){return gf(r).fold(function(){return Fn.none()},function(n){var e=Ct(n);return t.bind(e).map(function(n){return zh(r,n)})})}(r,n)},n)}}}function Uh(){function r(n){var e=n.element();return gf(e).fold(function(){return function(n,e){var t=yc(lf+n);return mf(e,t),t}("uid-",n.element())},function(n){return n})}var o=Gh(),i={},u=function(n){gf(n.element()).each(function(n){delete i[n],o.unregisterId(n)})};return{find:function(n,e,t){return o.find(n,e,t)},filter:function(n){return o.filterByType(n)},register:function(n){var e=r(n);Mn(i,e)&&function(n,e){var t=i[e];if(t!==n)throw new Error('The tagId "'+e+'" is already used by: '+bo(t.element())+"\nCannot use it for: "+bo(n.element())+"\nThe conflicting element is"+(K(t.element())?" ":" not ")+"already in the DOM");u(n)}(n,e);var t=[n];o.registerId(t,e,n.events()),i[e]=n},unregister:u,getById:function(n){return Ct(n)(i)}}}var $h=function(t){function r(e){return fn(t.element()).fold(function(){return!0},function(n){return cn(e,n)})}function o(n,e){return u.find(r,n,e)}function i(t){var n=u.filter(_e());C(n,function(n){var e=n.descHandler();Td(e)(t)})}var u=Uh(),n=Oh(t.element(),{triggerEvent:function(e,t){return qo(e,t.target(),function(n){return function(n,e,t,r){var o=t.target();return Hh(n,e,t,o,r)}(o,e,t,n)})}}),c={debugInfo:b("real"),triggerEvent:function(e,t,r){qo(e,t,function(n){Hh(o,e,r,t,n)})},triggerFocus:function(e,t){gf(e).fold(function(){so(e)},function(n){qo(Ve(),e,function(n){!function(n,e,t,r,o){var i=kh(t,r);Eh(n,e,t,r,i,o)}(o,Ve(),{originator:b(t),kill:w,prevent:w,target:b(e)},e,n)})})},triggerEscape:function(n,e){c.triggerEvent("keydown",n.element(),e.event())},getByUid:function(n){return g(n)},getByDom:function(n){return p(n)},build:Lm,addToGui:function(n){f(n)},removeFromGui:function(n){s(n)},addToWorld:function(n){e(n)},removeFromWorld:function(n){a(n)},broadcast:function(n){l(n)},broadcastOn:function(n,e){d(n,e)},broadcastEvent:function(n,e){m(n,e)},isConnected:b(!0)},e=function(n){n.connect(c),tt(n.element())||(u.register(n),C(n.components(),e),c.triggerEvent(Ge(),n.element(),{target:b(n.element())}))},a=function(n){tt(n.element())||(C(n.components(),a),u.unregister(n)),n.disconnect()},f=function(n){!function(n,e){mt(n,e,ft)}(t,n)},s=function(n){yn(n)},l=function(n){i({universal:b(!0),data:b(n)})},d=function(n,e){i({universal:b(!1),channels:b(n),data:b(e)})},m=function(n,e){var t=u.filter(n);return Ch(t,e)},g=function(n){return u.getById(n).fold(function(){return vt.error(new Error('Could not find component with uid: "'+n+'" in system.'))},vt.value)},p=function(n){var e=gf(n).getOr("not found");return g(e)};return e(t),{root:b(t),element:t.element,destroy:function(){n.unbind(),st(t.element())},add:f,remove:s,getByUid:g,getByDom:p,addToWorld:e,removeFromWorld:a,broadcast:l,broadcastOn:d,broadcastEvent:m}},Wh=b(_i.resolve("readonly-mode")),Xh=b(_i.resolve("edit-mode"));function qh(n){var e=Lm(dm.sketch({dom:{classes:[_i.resolve("outer-container")].concat(n.classes)},containerBehaviours:Bo([Ho.config({alpha:Wh(),omega:Xh()})])}));return $h(e)}var Yh=function(n,e){var t=Je.fromTag("input");di(t,{opacity:"0",position:"absolute",top:"-1000px",left:"-1000px"}),ft(n,t),so(t),e(t),st(t)},Kh=function(n){var e=n.getSelection();if(0<e.rangeCount){var t=e.getRangeAt(0),r=n.document.createRange();r.setStart(t.startContainer,t.startOffset),r.setEnd(t.endContainer,t.endOffset),e.removeAllRanges(),e.addRange(r)}},Jh=function(n,e){mo().each(function(n){cn(n,e)||lo(n)}),n.focus(),so(Je.fromDom(n.document.body)),Kh(n)},Qh={stubborn:function(n,e,t,r){function o(){Jh(e,r)}var i=Zd(t,"keydown",function(n){k(["input","textarea"],q(n.target()))||o()});return{toReading:function(){Yh(n,lo)},toEditing:o,onToolbarTouch:function(){},destroy:function(){i.unbind()}}},timid:function(n,e,t,r){function o(){lo(r)}return{toReading:function(){o()},toEditing:function(){Jh(e,r)},onToolbarTouch:function(){o()},destroy:w}}},Zh=function(e,r,t,o,n){function i(){r.run(function(n){n.refreshSelection()})}function u(n,e){var t=n-o.dom().scrollTop;r.run(function(n){n.scrollIntoView(t,t+e)})}function c(){r.run(function(n){n.clearSelection()})}function a(){e.getCursorBox().each(function(n){u(n.top(),n.height())}),r.run(function(n){n.syncHeight()})}var f=jg(e),s=Op(a,300),l=[e.onKeyup(function(){c(),s.throttle()}),e.onNodeChanged(i),e.onDomChanged(s.throttle),e.onDomChanged(i),e.onScrollToCursor(function(n){n.preventDefault(),s.throttle()}),e.onScrollToElement(function(n){n.element(),u(r,o)}),e.onToEditing(function(){r.run(function(n){n.toEditing()})}),e.onToReading(function(){r.run(function(n){n.toReading()})}),Zd(e.doc(),"touchend",function(n){cn(e.html(),n.target())||cn(e.body(),n.target())}),Zd(t,"transitionend",function(n){"height"===n.raw().propertyName&&function(){var e=Wi(t);r.run(function(n){n.setViewportOffset(e)}),i(),a()}()}),nm(t,"touchstart",function(n){r.run(function(n){n.highlightSelection()}),function(e){r.run(function(n){n.onToolbarTouch(e)})}(n),e.onTouchToolstrip()}),Zd(e.body(),"touchstart",function(n){c(),e.onTouchContent(),f.fireTouchstart(n)}),f.onTouchmove(),f.onTouchend(),Zd(e.body(),"click",function(n){n.kill()}),Zd(t,"touchmove",function(){e.onToolbarScrollStart()})];return{destroy:function(){C(l,function(n){n.unbind()})}}};var nv,ev,tv,rv,ov={},iv={exports:ov};nv=undefined,ev=ov,tv=iv,rv=undefined,function(n){"object"==typeof ev&&void 0!==tv?tv.exports=n():"function"==typeof nv&&nv.amd?nv([],n):("undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this).EphoxContactWrapper=n()}(function(){return function s(i,u,c){function a(e,n){if(!u[e]){if(!i[e]){var t="function"==typeof rv&&rv;if(!n&&t)return t(e,!0);if(f)return f(e,!0);var r=new Error("Cannot find module '"+e+"'");throw r.code="MODULE_NOT_FOUND",r}var o=u[e]={exports:{}};i[e][0].call(o.exports,function(n){return a(i[e][1][n]||n)},o,o.exports,s,i,u,c)}return u[e].exports}for(var f="function"==typeof rv&&rv,n=0;n<c.length;n++)a(c[n]);return a}({1:[function(n,e,t){var r,o,i=e.exports={};function u(){throw new Error("setTimeout has not been defined")}function c(){throw new Error("clearTimeout has not been defined")}function a(n){if(r===setTimeout)return setTimeout(n,0);if((r===u||!r)&&setTimeout)return r=setTimeout,setTimeout(n,0);try{return r(n,0)}catch(e){try{return r.call(null,n,0)}catch(e){return r.call(this,n,0)}}}!function(){try{r="function"==typeof setTimeout?setTimeout:u}catch(n){r=u}try{o="function"==typeof clearTimeout?clearTimeout:c}catch(n){o=c}}();var f,s=[],l=!1,d=-1;function m(){l&&f&&(l=!1,f.length?s=f.concat(s):d=-1,s.length&&g())}function g(){if(!l){var n=a(m);l=!0;for(var e=s.length;e;){for(f=s,s=[];++d<e;)f&&f[d].run();d=-1,e=s.length}f=null,l=!1,function t(n){if(o===clearTimeout)return clearTimeout(n);if((o===c||!o)&&clearTimeout)return o=clearTimeout,clearTimeout(n);try{return o(n)}catch(e){try{return o.call(null,n)}catch(e){return o.call(this,n)}}}(n)}}function p(n,e){this.fun=n,this.array=e}function h(){}i.nextTick=function(n){var e=new Array(arguments.length-1);if(1<arguments.length)for(var t=1;t<arguments.length;t++)e[t-1]=arguments[t];s.push(new p(n,e)),1!==s.length||l||a(g)},p.prototype.run=function(){this.fun.apply(null,this.array)},i.title="browser",i.browser=!0,i.env={},i.argv=[],i.version="",i.versions={},i.on=h,i.addListener=h,i.once=h,i.off=h,i.removeListener=h,i.removeAllListeners=h,i.emit=h,i.prependListener=h,i.prependOnceListener=h,i.listeners=function(n){return[]},i.binding=function(n){throw new Error("process.binding is not supported")},i.cwd=function(){return"/"},i.chdir=function(n){throw new Error("process.chdir is not supported")},i.umask=function(){return 0}},{}],2:[function(n,l,e){(function(e){function r(){}function i(n){if("object"!=typeof this)throw new TypeError("Promises must be constructed via new");if("function"!=typeof n)throw new TypeError("not a function");this._state=0,this._handled=!1,this._value=undefined,this._deferreds=[],s(n,this)}function o(r,o){for(;3===r._state;)r=r._value;0!==r._state?(r._handled=!0,i._immediateFn(function(){var n=1===r._state?o.onFulfilled:o.onRejected;if(null!==n){var e;try{e=n(r._value)}catch(t){return void c(o.promise,t)}u(o.promise,e)}else(1===r._state?u:c)(o.promise,r._value)})):r._deferreds.push(o)}function u(n,e){try{if(e===n)throw new TypeError("A promise cannot be resolved with itself.");if(e&&("object"==typeof e||"function"==typeof e)){var t=e.then;if(e instanceof i)return n._state=3,n._value=e,void a(n);if("function"==typeof t)return void s(function r(n,e){return function(){n.apply(e,arguments)}}(t,e),n)}n._state=1,n._value=e,a(n)}catch(o){c(n,o)}}function c(n,e){n._state=2,n._value=e,a(n)}function a(n){2===n._state&&0===n._deferreds.length&&i._immediateFn(function(){n._handled||i._unhandledRejectionFn(n._value)});for(var e=0,t=n._deferreds.length;e<t;e++)o(n,n._deferreds[e]);n._deferreds=null}function f(n,e,t){this.onFulfilled="function"==typeof n?n:null,this.onRejected="function"==typeof e?e:null,this.promise=t}function s(n,e){var t=!1;try{n(function(n){t||(t=!0,u(e,n))},function(n){t||(t=!0,c(e,n))})}catch(r){if(t)return;t=!0,c(e,r)}}var n,t;n=this,t=setTimeout,i.prototype["catch"]=function(n){return this.then(null,n)},i.prototype.then=function(n,e){var t=new this.constructor(r);return o(this,new f(n,e,t)),t},i.all=function(n){var a=Array.prototype.slice.call(n);return new i(function(o,i){if(0===a.length)return o([]);var u=a.length;function c(e,n){try{if(n&&("object"==typeof n||"function"==typeof n)){var t=n.then;if("function"==typeof t)return void t.call(n,function(n){c(e,n)},i)}a[e]=n,0==--u&&o(a)}catch(r){i(r)}}for(var n=0;n<a.length;n++)c(n,a[n])})},i.resolve=function(e){return e&&"object"==typeof e&&e.constructor===i?e:new i(function(n){n(e)})},i.reject=function(t){return new i(function(n,e){e(t)})},i.race=function(o){return new i(function(n,e){for(var t=0,r=o.length;t<r;t++)o[t].then(n,e)})},i._immediateFn="function"==typeof e?function(n){e(n)}:function(n){t(n,0)},i._unhandledRejectionFn=function(n){"undefined"!=typeof console&&console&&console.warn("Possible Unhandled Promise Rejection:",n)},i._setImmediateFn=function(n){i._immediateFn=n},i._setUnhandledRejectionFn=function(n){i._unhandledRejectionFn=n},void 0!==l&&l.exports?l.exports=i:n.Promise||(n.Promise=i)}).call(this,n("timers").setImmediate)},{timers:3}],3:[function(a,n,f){(function(n,e){var r=a("process/browser.js").nextTick,t=Function.prototype.apply,o=Array.prototype.slice,i={},u=0;function c(n,e){this._id=n,this._clearFn=e}f.setTimeout=function(){return new c(t.call(setTimeout,window,arguments),clearTimeout)},f.setInterval=function(){return new c(t.call(setInterval,window,arguments),clearInterval)},f.clearTimeout=f.clearInterval=function(n){n.close()},c.prototype.unref=c.prototype.ref=function(){},c.prototype.close=function(){this._clearFn.call(window,this._id)},f.enroll=function(n,e){clearTimeout(n._idleTimeoutId),n._idleTimeout=e},f.unenroll=function(n){clearTimeout(n._idleTimeoutId),n._idleTimeout=-1},f._unrefActive=f.active=function(n){clearTimeout(n._idleTimeoutId);var e=n._idleTimeout;0<=e&&(n._idleTimeoutId=setTimeout(function(){n._onTimeout&&n._onTimeout()},e))},f.setImmediate="function"==typeof n?n:function(n){var e=u++,t=!(arguments.length<2)&&o.call(arguments,1);return i[e]=!0,r(function(){i[e]&&(t?n.apply(null,t):n.call(null),f.clearImmediate(e))}),e},f.clearImmediate="function"==typeof e?e:function(n){delete i[n]}}).call(this,a("timers").setImmediate,a("timers").clearImmediate)},{"process/browser.js":1,timers:3}],4:[function(n,e,t){var r=n("promise-polyfill"),o="undefined"!=typeof window?window:Function("return this;")();e.exports={boltExport:o.Promise||r}},{"promise-polyfill":2}]},{},[4])(4)});function uv(n){l.setTimeout(function(){throw n},0)}function cv(n,e,t){return Math.abs(n-e)<=t?Fn.none():n<e?Fn.some(n+t):Fn.some(n-t)}function av(e,t){return wo([{width:320,height:480,keyboard:{portrait:300,landscape:240}},{width:320,height:568,keyboard:{portrait:300,landscape:240}},{width:375,height:667,keyboard:{portrait:305,landscape:240}},{width:414,height:736,keyboard:{portrait:320,landscape:240}},{width:768,height:1024,keyboard:{portrait:320,landscape:400}},{width:1024,height:1366,keyboard:{portrait:380,landscape:460}}],function(n){return function(n,e){return n?Fn.some(e):Fn.none()}(e<=n.width&&t<=n.height,n.keyboard)}).getOr({portrait:t/5,landscape:e/4})}function fv(n){var e=Ag(n).isPortrait(),t=function(n){return av(n.screen.width,n.screen.height)}(n),r=e?t.portrait:t.landscape;return(e?n.screen.height:n.screen.width)-n.innerHeight>r?0:r}function sv(n,e){var t=an(n).dom().defaultView;return Wi(n)+Wi(e)-fv(t)}function lv(n){return Hg(n,Mv)}function dv(n,e){var t=function(n){return Qr(n,Iv)}(n);return Dv.fixed(n,t,e)}function mv(n,e){return Dv.scroller(n,e)}function gv(n){var e=lv(n);return("true"===Qr(n,Rv)?mv:dv)(n,e)}function pv(n,e,t){var r=an(n).dom().defaultView.innerHeight;return Kr(n,Av,r+"px"),r-e-t}function hv(n){var e=gi(n,"top").getOr("0");return parseInt(e,10)}function vv(n){return parseInt(n.dom().scrollTop,10)}function yv(n,e){var t=e+Vv(n)+"px";Gi(n,"top",t)}var bv=iv.exports.boltExport,xv=function(n){var t=Fn.none(),e=[],r=function(n){o()?u(n):e.push(n)},o=function(){return t.isSome()},i=function(n){C(n,u)},u=function(e){t.each(function(n){l.setTimeout(function(){e(n)},0)})};return n(function(n){t=Fn.some(n),i(e),e=[]}),{get:r,map:function(t){return xv(function(e){r(function(n){e(t(n))})})},isReady:o}},wv={nu:xv,pure:function(e){return xv(function(n){n(e)})}},Sv=function(t){function n(n){t().then(n,uv)}return{map:function(n){return Sv(function(){return t().then(n)})},bind:function(e){return Sv(function(){return t().then(function(n){return e(n).toPromise()})})},anonBind:function(n){return Sv(function(){return t().then(function(){return n.toPromise()})})},toLazy:function(){return wv.nu(n)},toCached:function(){var n=null;return Sv(function(){return null===n&&(n=t()),n})},toPromise:t,get:n}},Tv=function(n){return Sv(function(){return new bv(n)})},Ov=function(n){return Sv(function(){return bv.resolve(n)})},kv=function(){var f=null;return{animate:function(r,o,n,i,e,t){function u(n){c=!0,e(n)}var c=!1;Rg.clearInterval(f);function a(n){Rg.clearInterval(f),u(n)}f=Rg.setInterval(function(){var t=r();cv(t,o,n).fold(function(){Rg.clearInterval(f),u(o)},function(n){if(i(n,a),!c){var e=r();(e!==n||Math.abs(e-o)>Math.abs(t-o))&&(Rg.clearInterval(f),u(o))}})},t)}}},Ev=sv,Cv=function(n,e,t){var r=sv(e,t),o=Wi(e)+Wi(t)-r;Gi(n,"padding-bottom",o+"px")},Dv=yt([{fixed:["element","property","offsetY"]},{scroller:["element","offsetY"]}]),Mv="data-"+_i.resolve("position-y-fixed"),Iv="data-"+_i.resolve("y-property"),Rv="data-"+_i.resolve("scrolling"),Av="data-"+_i.resolve("last-window-height"),Fv=function(n){var e=Yi(n,"["+Mv+"]");return de(e,gv)},Bv=function(r,o,i,u){function n(){var n=t.innerHeight;return function(n){return Hg(n,Av)}(r)<n}function e(){if(d){var n=Wi(i),e=Wi(u),t=pv(r,n,e);Kr(r,Mv,n+"px"),Gi(r,"height",t+"px"),Cv(o,r,u)}}var t=an(r).dom().defaultView,c=function(n){var e=Qr(n,"style");di(n,{position:"absolute",top:"0px"}),Kr(n,Mv,"0px"),Kr(n,Iv,"top");return{restore:function(){Kr(n,"style",e||""),no(n,Mv),no(n,Iv)}}}(i),a=Wi(i),f=Wi(u),s=function(n,e,t){var r=Qr(t,"style");vg.register(t),di(t,{position:"absolute",height:e+"px",width:"100%",top:n+"px"}),Kr(t,Mv,n+"px"),Kr(t,Rv,"true"),Kr(t,Iv,"top");return{restore:function(){vg.deregister(t),Kr(t,"style",r||""),no(t,Mv),no(t,Rv),no(t,Iv)}}}(a,pv(r,a,f),r),l=function(n){var e=Qr(n,"style");di(n,{position:"absolute",bottom:"0px"}),Kr(n,Mv,"0px"),Kr(n,Iv,"bottom");return{restore:function(){Kr(n,"style",e||""),no(n,Mv),no(n,Iv)}}}(u),d=!0;return Cv(o,r,u),{setViewportOffset:function(n){Kr(r,Mv,n+"px"),e()},isExpanding:n,isShrinking:m(n),refresh:e,restore:function(){d=!1,c.restore(),s.restore(),l.restore()}}},Vv=lv,Nv=kv(),jv="data-"+_i.resolve("last-scroll-top"),_v=function(t,r,o){return Tv(function(n){var e=d(vv,t);Nv.animate(e,r,15,function(n){t.dom().scrollTop=n,Gi(t,"top",hv(t)+15+"px")},function(){t.dom().scrollTop=r,Gi(t,"top",o+"px"),n(r)},10)})},Pv=function(o,i){return Tv(function(n){var e=d(vv,o);Kr(o,jv,e());var t=Math.abs(i-e()),r=Math.ceil(t/10);Nv.animate(e,i,r,function(n,e){Hg(o,jv)!==o.dom().scrollTop?e(o.dom().scrollTop):(o.dom().scrollTop=n,Kr(o,jv,n))},function(){o.dom().scrollTop=i,Kr(o,jv,i),n(i)},10)})},Hv=function(i,u){return Tv(function(n){function e(n){Gi(i,"top",n+"px")}var t=d(hv,i),r=Math.abs(u-t()),o=Math.ceil(r/10);Nv.animate(t,u,o,e,function(){e(u),n(u)},10)})},zv=function(e,t,r){var o=an(e).dom().defaultView;return Tv(function(n){yv(e,r),yv(t,r),o.scrollTo(0,r),n(r)})};function Lv(i,n){return n(function(t){var r=[],o=0;0===i.length?t([]):C(i,function(n,e){n.get(function(e){return function(n){r[e]=n,++o>=i.length&&t(r)}}(e))})})}function Gv(n,r){return n.fold(function(n,e,t){return function(n,e,t,r){return Gi(n,e,t+r+"px"),Ov(r)}(n,e,r,t)},function(n,e){return function(n,e,t){var r=e+t,o=gi(n,"top").getOr(t),i=r-parseInt(o,10),u=n.dom().scrollTop+i;return _v(n,u,r)}(n,r,e)})}function Uv(e,t,n,r,o,i){var u=function f(t){var r=Pn(wv.pure({}));return{start:function(e){var n=wv.nu(function(n){return t(e).get(n)});r.set(n)},idle:function(n){r.get().get(function(){n()})}}}(function(n){return zv(e,t,n)}),c=Op(function(){u.idle(function(){Wv(n,r.pageYOffset).get(function(){(function(){var n=jp(i);return Fn.from(n[0]).bind(function(n){var e=n.top()-t.dom().scrollTop;return e>r.innerHeight+5||e<-5?Fn.some({top:b(e),bottom:b(e+n.height())}):Fn.none()})})().each(function(n){t.dom().scrollTop=t.dom().scrollTop+n.top()}),u.start(0),o.refresh()})})},1e3),a=Zd(Je.fromDom(r),"scroll",function(){r.pageYOffset<0||c.throttle()});return Wv(n,r.pageYOffset).get(y),{unbind:a.unbind}}var $v=function(n,e,t,r,o){var i=Ev(e,t),u=d(Kh,n);i<r||i<o?Pv(e,e.dom().scrollTop-i+o).get(u):r<0&&Pv(e,e.dom().scrollTop+r).get(u)},Wv=function(n,e){var t=Fv(n);return function(n){return Lv(n,Tv)}(de(t,function(n){return Gv(n,e)}))},Xv=function(n){var t=n.cWin(),e=n.ceBody(),r=n.socket(),o=n.toolstrip(),i=n.toolbar(),u=n.contentElement(),c=n.keyboardType(),a=n.outerWindow(),f=n.dropup(),s=Bv(r,e,o,f),l=c(n.outerBody(),t,rt(),u,o,i),d=Fg(a,{onChange:w,onReady:s.refresh});d.onAdjustment(function(){s.refresh()});var m=Zd(Je.fromDom(a),"resize",function(){s.isExpanding()&&s.refresh()}),g=Uv(o,r,n.outerBody(),a,s,t),p=function v(t,e){var n=t.document,r=Je.fromTag("div");function o(n){var e=Je.fromTag("span");return Md(e,[_i.resolve("layer-editor"),_i.resolve("unfocused-selection")]),di(e,{left:n.left()+"px",top:n.top()+"px",width:n.width()+"px",height:n.height()+"px"}),e}io(r,_i.resolve("unfocused-selections")),ft(Je.fromDom(n.documentElement),r);var i=Zd(r,"touchstart",function(n){n.prevent(),Jh(t,e),u()}),u=function(){pn(r)};return{update:function(){u();var n=jp(t),e=de(n,o);gn(r,e)},isActive:function(){return 0<at(r).length},destroy:function(){i.unbind(),st(r)},clear:u}}(t,u),h=function(){p.clear()};return{toEditing:function(){l.toEditing(),h()},toReading:function(){l.toReading()},onToolbarTouch:function(n){l.onToolbarTouch(n)},refreshSelection:function(){p.isActive()&&p.update()},clearSelection:h,highlightSelection:function(){p.update()},scrollIntoView:function(n,e){$v(t,r,f,n,e)},updateToolbarPadding:w,setViewportOffset:function(n){s.setViewportOffset(n),Hv(r,n).get(y)},syncHeight:function(){Gi(u,"height",u.dom().contentWindow.document.body.scrollHeight+"px")},refreshStructure:s.refresh,destroy:function(){s.restore(),d.destroy(),g.unbind(),m.unbind(),l.destroy(),p.destroy(),Yh(rt(),lo)}}},qv=function(r,n){var o=qp(),i=bd(),u=bd(),c=yd(),a=yd();return{enter:function(){n.hide();var t=Je.fromDom(l.document);zp.getActiveApi(r.editor).each(function(n){i.set({socketHeight:gi(r.socket,"height"),iframeHeight:gi(n.frame(),"height"),outerScroll:l.document.body.scrollTop}),u.set({exclusives:uh.exclusive(t,"."+vg.scrollable())}),io(r.container,_i.resolve("fullscreen-maximized")),Wp(r.container,n.body()),o.maximize(),Gi(r.socket,"overflow","scroll"),Gi(r.socket,"-webkit-overflow-scrolling","touch"),so(n.body());var e=nn(["cWin","ceBody","socket","toolstrip","toolbar","dropup","contentElement","cursor","keyboardType","isScrolling","outerWindow","outerBody"],[]);c.set(Xv(e({cWin:n.win(),ceBody:n.body(),socket:r.socket,toolstrip:r.toolstrip,toolbar:r.toolbar,dropup:r.dropup.element(),contentElement:n.frame(),cursor:w,outerBody:r.body,outerWindow:r.win,keyboardType:Qh.stubborn,isScrolling:function(){return u.get().exists(function(n){return n.socket.isScrolling()})}}))),c.run(function(n){n.syncHeight()}),a.set(Zh(n,c,r.toolstrip,r.socket,r.dropup))})},refreshStructure:function(){c.run(function(n){n.refreshStructure()})},exit:function(){o.restore(),a.clear(),c.clear(),n.show(),i.on(function(n){n.socketHeight.each(function(n){Gi(r.socket,"height",n)}),n.iframeHeight.each(function(n){Gi(r.editor.getFrame(),"height",n)}),l.document.body.scrollTop=n.scrollTop}),i.clear(),u.on(function(n){n.exclusives.unbind()}),u.clear(),co(r.container,_i.resolve("fullscreen-maximized")),Xp(),vg.deregister(r.toolbar),pi(r.socket,"overflow"),pi(r.socket,"-webkit-overflow-scrolling"),lo(r.editor.getFrame()),zp.getActiveApi(r.editor).each(function(n){n.clearSelection()})}}},Yv=function(n){var e=Xt("Getting IosWebapp schema",Jp,n);Gi(e.toolstrip,"width","100%"),Gi(e.container,"position","relative");var t=Lm(Kp(function(){e.setReadOnly(e.readOnlyOnInit()),o.enter()},e.translate));e.alloy.add(t);var r={show:function(){e.alloy.add(t)},hide:function(){e.alloy.remove(t)}},o=qv(e,r);return{setReadOnly:e.setReadOnly,refreshStructure:o.refreshStructure,enter:o.enter,exit:o.exit,destroy:w}};function Kv(n,e,t){n.system().broadcastOn([Uo.formatChanged()],{command:e,state:t})}function Jv(m){return{getNotificationManagerImpl:function(){return{open:b({progressBar:{value:w},close:w,text:w,getEl:b(null),moveTo:w,moveRel:w,settings:{}}),close:w,reposition:w,getArgs:b({})}},renderUI:function(){var n=m.getElement(),e=Zv(m);!1===function(n){return!1===n.settings.skin}(m)?(m.contentCSS.push(e.content),zo.DOM.styleSheetLoader.load(e.ui,ey(m))):ey(m)();function t(){m.fire("ScrollIntoView")}var f=L().os.isAndroid()?function c(n){var e=qh({classes:[_i.resolve("android-container")]}),t=ch(),r=yd(),o=Mh(r),i=Ih(),u=Sh(w,n);return e.add(t.wrapper()),e.add(i),e.add(u.component()),{system:b(e),element:e.element,init:function(n){r.set(Qp(n))},exit:function(){r.run(function(n){n.exit(),og.remove(i,o)})},setToolbarGroups:function(n){var e=t.createGroups(n);t.setGroups(e)},setContextToolbar:function(n){var e=t.createGroups(n);t.setContextToolbar(e)},focusToolbar:function(){t.focus()},restoreToolbar:function(){t.restoreToolbar()},updateMode:function(n){Rh(i,o,n,e.root())},socket:b(i),dropup:b(u)}}(t):function a(n){var e=qh({classes:[_i.resolve("ios-container")]}),t=ch(),r=yd(),o=Mh(r),i=Ih(),u=Sh(function(){r.run(function(n){n.refreshStructure()})},n);return e.add(t.wrapper()),e.add(i),e.add(u.component()),{system:b(e),element:e.element,init:function(n){r.set(Yv(n))},exit:function(){r.run(function(n){og.remove(i,o),n.exit()})},setToolbarGroups:function(n){var e=t.createGroups(n);t.setGroups(e)},setContextToolbar:function(n){var e=t.createGroups(n);t.setContextToolbar(e)},focusToolbar:function(){t.focus()},restoreToolbar:function(){t.restoreToolbar()},updateMode:function(n){Rh(i,o,n,e.root())},socket:b(i),dropup:b(u)}}(t);!function(n,e){gt(n,e,dn)}(Je.fromDom(n),f.system());function s(n,e,t,r){!1===r&&m.selection.collapse();var o=i(n,e,t);f.setToolbarGroups(!0===r?o.readOnly:o.main),m.setMode(!0===r?"readonly":"design"),m.fire(!0===r?ty():ry()),f.updateMode(r)}function l(n,e){return m.on(n,e),{unbind:function(){m.off(n)}}}var r=n.ownerDocument.defaultView,d=Fg(r,{onChange:function(){f.system().broadcastOn([Uo.orientationChanged()],{width:Bg(r)})},onReady:w}),i=function(n,e,t){var r=n.get();return{readOnly:r.backToMask.concat(e.get()),main:r.backToMask.concat(t.get())}};return m.on("init",function(){f.init({editor:{getFrame:function(){return Je.fromDom(m.contentAreaContainer.querySelector("iframe"))},onDomChanged:function(){return{unbind:w}},onToReading:function(n){return l(ty(),n)},onToEditing:function(n){return l(ry(),n)},onScrollToCursor:function(e){m.on("ScrollIntoView",function(n){e(n)});return{unbind:function(){m.off("ScrollIntoView"),d.destroy()}}},onTouchToolstrip:function(){n()},onTouchContent:function(){(function(n){return go(n).bind(function(n){return f.system().getByDom(n).toOption()})})(Je.fromDom(m.editorContainer.querySelector("."+_i.resolve("toolbar")))).each($),f.restoreToolbar(),n()},onTapContent:function(n){var e=n.target();if("img"===q(e))m.selection.select(e.dom()),n.kill();else if("a"===q(e)){f.system().getByDom(Je.fromDom(m.editorContainer)).each(function(n){Ho.isAlpha(n)&&Go(e.dom())})}}},container:Je.fromDom(m.editorContainer),socket:Je.fromDom(m.contentAreaContainer),toolstrip:Je.fromDom(m.editorContainer.querySelector("."+_i.resolve("toolstrip"))),toolbar:Je.fromDom(m.editorContainer.querySelector("."+_i.resolve("toolbar"))),dropup:f.dropup(),alloy:f.system(),translate:w,setReadOnly:function(n){s(a,c,u,n)},readOnlyOnInit:function(){return!1}});var n=function(){f.dropup().disappear(function(){f.system().broadcastOn([Uo.dropupDismissed()],{})})},e={label:"The first group",scrollable:!1,items:[Ws.forToolbar("back",function(){m.selection.collapse(),f.exit()},{},m)]},t={label:"Back to read only",scrollable:!1,items:[Ws.forToolbar("readonly-back",function(){s(a,c,u,!0)},{},m)]},r=Cg(f,m),o=Dg(m.settings,r),i={label:"The extra group",scrollable:!1,items:[]},u=Pn([{label:"the action group",scrollable:!0,items:o},i]),c=Pn([{label:"The read only mode group",scrollable:!0,items:[]},i]),a=Pn({backToMask:[e],backToReadOnly:[t]});ny(f,m)}),m.on("remove",function(){f.exit()}),m.on("detach",function(){!function(e){var n=at(e.element());C(n,function(n){e.getByDom(n).each(lt)}),st(e.element())}(f.system()),f.system().destroy()}),{iframeContainer:f.socket().element().dom(),editorContainer:f.element().dom()}}}}var Qv=tinymce.util.Tools.resolve("tinymce.EditorManager"),Zv=function(n){var e=Dt(n.settings,"skin_url").fold(function(){return Qv.baseURL+"/skins/ui/oxide"},function(n){return n});return{content:e+"/content.mobile.min.css",ui:e+"/skin.mobile.min.css"}},ny=function(r,n){var e=Bn(n.formatter.get());C(e,function(e){n.formatter.formatChanged(e,function(n){Kv(r,e,n)})}),C(["ul","ol"],function(t){n.selection.selectorChanged(t,function(n,e){Kv(r,t,n)})})},ey=(b(["x-small","small","medium","large","x-large"]),function(n){function e(){n._skinLoaded=!0,n.fire("SkinLoaded")}return function(){n.initialized?e():n.on("init",e)}}),ty=b("toReading"),ry=b("toEditing");!function iy(){Lo.add("mobile",Jv)}()}(window);
\ No newline at end of file
diff --git a/website/js/vendor/tinymce/js/tinymce/themes/silver/theme.min.js b/website/js/vendor/tinymce/js/tinymce/themes/silver/theme.min.js
new file mode 100644 (file)
index 0000000..3a12a69
--- /dev/null
@@ -0,0 +1,9 @@
+/**
+ * Copyright (c) Tiny Technologies, Inc. All rights reserved.
+ * Licensed under the LGPL or a commercial license.
+ * For LGPL see License.txt in the project root for license information.
+ * For commercial licenses see https://www.tiny.cloud/
+ *
+ * Version: 5.1.5 (2019-12-19)
+ */
+!function(v){"use strict";function Z(){}function i(e,o){return function(){for(var n=[],t=0;t<arguments.length;t++)n[t]=arguments[t];return e(o.apply(null,n))}}function l(n){return n}var nn=function(n){return function(){return n}};function d(o){for(var r=[],n=1;n<arguments.length;n++)r[n-1]=arguments[n];return function(){for(var n=[],t=0;t<arguments.length;t++)n[t]=arguments[t];var e=r.concat(n);return o.apply(null,e)}}function b(e){return function(){for(var n=[],t=0;t<arguments.length;t++)n[t]=arguments[t];return!e.apply(null,n)}}function r(n){return function(){throw new Error(n)}}var u=nn(!1),a=nn(!0),n=tinymce.util.Tools.resolve("tinymce.ThemeManager"),N=function(){return(N=Object.assign||function(n){for(var t,e=1,o=arguments.length;e<o;e++)for(var r in t=arguments[e])Object.prototype.hasOwnProperty.call(t,r)&&(n[r]=t[r]);return n}).apply(this,arguments)};function c(n,t){var e={};for(var o in n)Object.prototype.hasOwnProperty.call(n,o)&&t.indexOf(o)<0&&(e[o]=n[o]);if(null!=n&&"function"==typeof Object.getOwnPropertySymbols){var r=0;for(o=Object.getOwnPropertySymbols(n);r<o.length;r++)t.indexOf(o[r])<0&&Object.prototype.propertyIsEnumerable.call(n,o[r])&&(e[o[r]]=n[o[r]])}return e}function g(){for(var n=0,t=0,e=arguments.length;t<e;t++)n+=arguments[t].length;var o=Array(n),r=0;for(t=0;t<e;t++)for(var i=arguments[t],u=0,a=i.length;u<a;u++,r++)o[r]=i[u];return o}function t(){return s}var e,s=(e={fold:function(n,t){return n()},is:u,isSome:u,isNone:a,getOr:m,getOrThunk:f,getOrDie:function(n){throw new Error(n||"error: getOrDie called on none.")},getOrNull:nn(null),getOrUndefined:nn(undefined),or:m,orThunk:f,map:t,each:Z,bind:t,exists:u,forall:a,filter:t,equals:o,equals_:o,toArray:function(){return[]},toString:nn("none()")},Object.freeze&&Object.freeze(e),e);function o(n){return n.isNone()}function f(n){return n()}function m(n){return n}function p(t){return function(n){return function(n){if(null===n)return"null";var t=typeof n;return"object"==t&&(Array.prototype.isPrototypeOf(n)||n.constructor&&"Array"===n.constructor.name)?"array":"object"==t&&(String.prototype.isPrototypeOf(n)||n.constructor&&"String"===n.constructor.name)?"string":t}(n)===t}}function h(n,t){if(fn(n)){for(var e=0,o=n.length;e<o;++e)if(!0!==t(n[e]))return!1;return!0}return!1}function y(n,t){return pn.call(n,t)}function x(n,t){for(var e=0,o=n.length;e<o;e++){if(t(n[e],e))return!0}return!1}function w(n,t){for(var e=[],o=0;o<n.length;o+=t){var r=gn.call(n,o,o+t);e.push(r)}return e}function S(n,t){for(var e=n.length,o=new Array(e),r=0;r<e;r++){var i=n[r];o[r]=t(i,r)}return o}function C(n,t){for(var e=[],o=0,r=n.length;o<r;o++){var i=n[o];t(i,o)&&e.push(i)}return e}function k(n,t,e){return function(n,t){for(var e=n.length-1;0<=e;e--){t(n[e],e)}}(n,function(n){e=t(e,n)}),e}function O(n,t,e){return bn(n,function(n){e=t(e,n)}),e}function E(n,t){for(var e=0,o=n.length;e<o;e++){var r=n[e];if(t(r,e))return on.some(r)}return on.none()}function T(n,t){for(var e=0,o=n.length;e<o;e++){if(t(n[e],e))return on.some(e)}return on.none()}function H(n){for(var t=[],e=0,o=n.length;e<o;++e){if(!fn(n[e]))throw new Error("Arr.flatten item "+e+" was not an array, input: "+n);hn.apply(t,n[e])}return t}function B(n,t){var e=S(n,t);return H(e)}function D(n,t){for(var e=0,o=n.length;e<o;++e){if(!0!==t(n[e],e))return!1}return!0}function A(n){var t=gn.call(n,0);return t.reverse(),t}function _(n,t){return C(n,function(n){return!vn(t,n)})}function M(n){return[n]}function F(n){return 0===n.length?on.none():on.some(n[n.length-1])}function P(n,e){return kn(n,function(n,t){return{k:t,v:e(n,t)}})}function I(n,t){for(var e=wn(n),o=0,r=e.length;o<r;o++){var i=e[o],u=n[i];if(t(u,i,n))return on.some(u)}return on.none()}function R(n){return On(n,function(n){return n})}function V(n,t){return En(n,t)?on.from(n[t]):on.none()}function z(u){return function(){for(var n=new Array(arguments.length),t=0;t<n.length;t++)n[t]=arguments[t];if(0===n.length)throw new Error("Can't merge zero objects");for(var e={},o=0;o<n.length;o++){var r=n[o];for(var i in r)Bn.call(r,i)&&(e[i]=u(e[i],r[i]))}return e}}function L(e){var o,r=!1;return function(){for(var n=[],t=0;t<arguments.length;t++)n[t]=arguments[t];return r||(r=!0,o=e.apply(null,n)),o}}function j(n){return _n.defaultedThunk(nn(n))}function U(t){return function(n){return En(n,t)?on.from(n[t]):on.none()}}function W(n,t){return U(t)(n)}function G(n,t){var e={};return e[n]=t,e}function X(n,t){return function(n,e){var o={};return Cn(n,function(n,t){vn(e,t)||(o[t]=n)}),o}(n,t)}function Y(n,t){return function(t,e){return function(n){return En(n,t)?n[t]:e}}(n,t)}function q(n,t){return G(n,t)}function K(n){return function(n){var t={};return bn(n,function(n){t[n.key]=n.value}),t}(n)}function J(n,t){var e=function(n){var t=[],e=[];return bn(n,function(n){n.fold(function(n){t.push(n)},function(n){e.push(n)})}),{errors:t,values:e}}(n);return 0<e.errors.length?function(n){return an.error(H(n))}(e.errors):function(n,t){return 0===n.length?an.value(t):an.value(Dn(t,An.apply(undefined,n)))}(e.values,t)}function $(n,t){return function(n,t){return En(n,t)&&n[t]!==undefined&&null!==n[t]}(n,t)}var Q,tn,en=function(e){function n(){return r}function t(n){return n(e)}var o=nn(e),r={fold:function(n,t){return t(e)},is:function(n){return e===n},isSome:a,isNone:u,getOr:o,getOrThunk:o,getOrDie:o,getOrNull:o,getOrUndefined:o,or:n,orThunk:n,map:function(n){return en(n(e))},each:function(n){n(e)},bind:t,exists:t,forall:t,filter:function(n){return n(e)?r:s},toArray:function(){return[e]},toString:function(){return"some("+e+")"},equals:function(n){return n.is(e)},equals_:function(n,t){return n.fold(u,function(n){return t(e,n)})}};return r},on={some:en,none:t,from:function(n){return null===n||n===undefined?s:en(n)}},rn=function(e){return{is:function(n){return e===n},isValue:a,isError:u,getOr:nn(e),getOrThunk:nn(e),getOrDie:nn(e),or:function(n){return rn(e)},orThunk:function(n){return rn(e)},fold:function(n,t){return t(e)},map:function(n){return rn(n(e))},mapError:function(n){return rn(e)},each:function(n){n(e)},bind:function(n){return n(e)},exists:function(n){return n(e)},forall:function(n){return n(e)},toOption:function(){return on.some(e)}}},un=function(e){return{is:u,isValue:u,isError:a,getOr:l,getOrThunk:function(n){return n()},getOrDie:function(){return r(String(e))()},or:function(n){return n},orThunk:function(n){return n()},fold:function(n,t){return n(e)},map:function(n){return un(e)},mapError:function(n){return un(n(e))},each:Z,bind:function(n){return un(e)},exists:u,forall:a,toOption:on.none}},an={value:rn,error:un,fromOption:function(n,t){return n.fold(function(){return un(t)},rn)}},cn=p("string"),sn=p("object"),fn=p("array"),ln=p("boolean"),dn=p("function"),mn=p("number"),gn=Array.prototype.slice,pn=Array.prototype.indexOf,hn=Array.prototype.push,vn=function(n,t){return-1<y(n,t)},bn=function(n,t){for(var e=0,o=n.length;e<o;e++){t(n[e],e)}},yn=function(n){return 0===n.length?on.none():on.some(n[0])},xn=dn(Array.from)?Array.from:function(n){return gn.call(n)},wn=Object.keys,Sn=Object.hasOwnProperty,Cn=function(n,t){for(var e=wn(n),o=0,r=e.length;o<r;o++){var i=e[o];t(n[i],i)}},kn=function(n,o){var r={};return Cn(n,function(n,t){var e=o(n,t);r[e.k]=e.v}),r},On=function(n,e){var o=[];return Cn(n,function(n,t){o.push(e(n,t))}),o},En=function(n,t){return Sn.call(n,t)},Tn=function(u){if(!fn(u))throw new Error("cases must be an array");if(0===u.length)throw new Error("there must be at least one case");var a=[],e={};return bn(u,function(n,o){var t=wn(n);if(1!==t.length)throw new Error("one and only one name per case");var r=t[0],i=n[r];if(e[r]!==undefined)throw new Error("duplicate key detected:"+r);if("cata"===r)throw new Error("cannot have a case named cata (sorry)");if(!fn(i))throw new Error("case arguments must be an array");a.push(r),e[r]=function(){var n=arguments.length;if(n!==i.length)throw new Error("Wrong number of arguments to case "+r+". Expected "+i.length+" ("+i+"), got "+n);for(var e=new Array(n),t=0;t<e.length;t++)e[t]=arguments[t];return{fold:function(){if(arguments.length!==u.length)throw new Error("Wrong number of arguments to fold. Expected "+u.length+", got "+arguments.length);return arguments[o].apply(null,e)},match:function(n){var t=wn(n);if(a.length!==t.length)throw new Error("Wrong number of arguments to match. Expected: "+a.join(",")+"\nActual: "+t.join(","));if(!D(a,function(n){return vn(t,n)}))throw new Error("Not all branches were specified when using match. Specified: "+t.join(", ")+"\nRequired: "+a.join(", "));return n[r].apply(null,e)},log:function(n){v.console.log(n,{constructors:a,constructor:r,params:e})}}}}),e},Bn=Object.prototype.hasOwnProperty,Dn=z(function(n,t){return sn(n)&&sn(t)?Dn(n,t):t}),An=z(function(n,t){return t}),_n=Tn([{strict:[]},{defaultedThunk:["fallbackThunk"]},{asOption:[]},{asDefaultedOptionThunk:["fallbackThunk"]},{mergeWithThunk:["baseThunk"]}]),Mn=_n.strict,Fn=_n.asOption,In=_n.defaultedThunk,Rn=_n.mergeWithThunk,Vn=(Tn([{bothErrors:["error1","error2"]},{firstError:["error1","value2"]},{secondError:["value1","error2"]},{bothValues:["value1","value2"]}]),function(n){return U(n)}),Nn=function(n,t){return W(n,t)};(tn=Q=Q||{})[tn.Error=0]="Error",tn[tn.Value=1]="Value";function Hn(n,t,e){return n.stype===Q.Error?t(n.serror):e(n.svalue)}function Pn(n){return{stype:Q.Value,svalue:n}}function zn(n){return{stype:Q.Error,serror:n}}function Ln(n){return i(qt,H)(n)}function jn(n){return sn(n)&&100<wn(n).length?" removed due to size":JSON.stringify(n,null,2)}function Un(n,t){return qt([{path:n,getErrorInfo:t}])}function Wn(n,t,e){return W(t,e).fold(function(){return function(n,t,e){return Un(n,function(){return'Could not find valid *strict* value for "'+t+'" in '+jn(e)})}(n,e,t)},Xt)}function Gn(n,t,e){var o=W(n,t).fold(function(){return e(n)},l);return Xt(o)}function Xn(u,a,n,c){return n.fold(function(o,e,n,r){function i(n){var t=r.extract(u.concat([o]),c,n);return $t(t,function(n){return G(e,c(n))})}function t(n){return n.fold(function(){var n=G(e,c(on.none()));return Xt(n)},function(n){var t=r.extract(u.concat([o]),c,n);return $t(t,function(n){return G(e,c(on.some(n)))})})}return n.fold(function(){return Kt(Wn(u,a,o),i)},function(n){return Kt(Gn(a,o,n),i)},function(){return Kt(function(n,t){return Xt(W(n,t))}(a,o),t)},function(n){return Kt(function(t,n,e){var o=W(t,n).map(function(n){return!0===n?e(t):n});return Xt(o)}(a,o,n),t)},function(n){var t=n(a),e=$t(Gn(a,o,nn({})),function(n){return Dn(t,n)});return Kt(e,i)})},function(n,t){var e=t(a);return Xt(G(n,c(e)))})}function Yn(o){return{extract:function(t,n,e){return Jt(o(e,n),function(n){return function(n,t){return Un(n,function(){return t})}(t,n)})},toString:function(){return"val"},toDsl:function(){return te.itemOf(o)}}}function qn(n){var i=re(n),u=k(n,function(t,n){return n.fold(function(n){return Dn(t,q(n,!0))},nn(t))},{});return{extract:function(n,t,e){var o=ln(e)?[]:function(t){var n=wn(t);return C(n,function(n){return $(t,n)})}(e),r=C(o,function(n){return!$(u,n)});return 0===r.length?i.extract(n,t,e):function(n,t){return Un(n,function(){return"There are unsupported fields: ["+t.join(", ")+"] specified"})}(n,r)},toString:i.toString,toDsl:i.toDsl}}function Kn(r){return{extract:function(e,o,n){var t=S(n,function(n,t){return r.extract(e.concat(["["+t+"]"]),o,n)});return ne(t)},toString:function(){return"array("+r.toString()+")"},toDsl:function(){return te.arrOf(r)}}}function Jn(i,u){return{extract:function(e,o,r){var n=wn(r),t=function(n,t){return Kn(Yn(i)).extract(n,l,t)}(e,n);return Kt(t,function(n){var t=S(n,function(n){return oe.field(n,n,Mn(),u)});return re(t).extract(e,o,r)})},toString:function(){return"setOf("+u.toString()+")"},toDsl:function(){return te.setOf(i,u)}}}function $n(t,e,o,n,r){return Nn(n,r).fold(function(){return function(n,t,e){return Un(n,function(){return'The chosen schema: "'+e+'" did not exist in branches: '+jn(t)})}(t,n,r)},function(n){return n.extract(t.concat(["branch: "+r]),e,o)})}function Qn(n,r){return{extract:function(t,e,o){return Nn(o,n).fold(function(){return function(n,t){return Un(n,function(){return'Choice schema did not contain choice key: "'+t+'"'})}(t,n)},function(n){return $n(t,e,o,r,n)})},toString:function(){return"chooseOn("+n+"). Possible values: "+wn(r)},toDsl:function(){return te.choiceOf(n,r)}}}function Zn(t){return Yn(function(n){return t(n).fold(qt,Xt)})}function nt(t,n){return Jn(function(n){return Wt(t(n))},n)}function tt(n,t,e){return Gt(function(n,t,e,o){var r=t.extract([n],e,o);return Qt(r,function(n){return{input:o,errors:n}})}(n,t,l,e))}function et(n){return n.fold(function(n){throw new Error(le(n))},l)}function ot(n,t,e){return et(tt(n,t,e))}function rt(n,t){return Qn(n,t)}function it(n,t){return Qn(n,P(t,re))}function ut(e,o){return Yn(function(n){var t=typeof n;return e(n)?Xt(n):qt("Expected type: "+o+" but got: "+t)})}function at(t){return Zn(function(n){return vn(t,n)?an.value(n):an.error('Unsupported value: "'+n+'", choose one of "'+t.join(", ")+'".')})}function ct(n){return ce(n,n,Mn(),ie())}function st(n,t){return ce(n,n,Mn(),t)}function ft(n){return st(n,ge)}function lt(n,t){return ce(n,n,Mn(),at(t))}function dt(n){return st(n,he)}function mt(n,t){return ce(n,n,Mn(),re(t))}function gt(n,t){return ce(n,n,Mn(),ue(t))}function pt(n,t){return ce(n,n,Mn(),Kn(t))}function ht(n){return ce(n,n,Fn(),ie())}function vt(n,t){return ce(n,n,Fn(),t)}function bt(n){return vt(n,me)}function yt(n){return vt(n,ge)}function xt(n){return vt(n,he)}function wt(n,t){return vt(n,re(t))}function St(n,t){return ce(n,n,j(t),ie())}function Ct(n,t,e){return ce(n,n,j(t),e)}function kt(n,t){return Ct(n,t,me)}function Ot(n,t){return Ct(n,t,ge)}function Et(n,t,e){return Ct(n,t,at(e))}function Tt(n,t){return Ct(n,t,pe)}function Bt(n,t){return Ct(n,t,he)}function Dt(n,t,e){return Ct(n,t,re(e))}function At(n,t){return ae(n,t)}function _t(n,t,e){return 0!=(n.compareDocumentPosition(t)&e)}function Mt(n,t){var e=function(n,t){for(var e=0;e<n.length;e++){var o=n[e];if(o.test(t))return o}return undefined}(n,t);if(!e)return{major:0,minor:0};function o(n){return Number(t.replace(e,"$"+n))}return ke(o(1),o(2))}function Ft(n,t){return function(){return t===n}}function It(n,t){return function(){return t===n}}function Rt(n,t){var e=String(t).toLowerCase();return E(n,function(n){return n.search(e)})}function Vt(n,t){return-1!==n.indexOf(t)}function Nt(t){return function(n){return Vt(n,t)}}function Ht(){return Le.get()}function Pt(n,t){var e=n.dom();if(e.nodeType!==Ge)return!1;var o=e;if(o.matches!==undefined)return o.matches(t);if(o.msMatchesSelector!==undefined)return o.msMatchesSelector(t);if(o.webkitMatchesSelector!==undefined)return o.webkitMatchesSelector(t);if(o.mozMatchesSelector!==undefined)return o.mozMatchesSelector(t);throw new Error("Browser lacks native selectors")}function zt(n){return n.nodeType!==Ge&&n.nodeType!==Xe||0===n.childElementCount}function Lt(n,t){var e=t===undefined?v.document:t.dom();return zt(e)?[]:S(e.querySelectorAll(n),we.fromDom)}function jt(n,t){return n.dom()===t.dom()}function Ut(n,t){return jt(n.element(),t.event().target())}var Wt=function(n){return n.fold(zn,Pn)},Gt=function(n){return Hn(n,an.error,an.value)},Xt=Pn,Yt=function(n){var t=[],e=[];return bn(n,function(n){Hn(n,function(n){return e.push(n)},function(n){return t.push(n)})}),{values:t,errors:e}},qt=zn,Kt=function(n,t){return n.stype===Q.Value?t(n.svalue):n},Jt=function(n,t){return n.stype===Q.Error?t(n.serror):n},$t=function(n,t){return n.stype===Q.Value?{stype:Q.Value,svalue:t(n.svalue)}:n},Qt=function(n,t){return n.stype===Q.Error?{stype:Q.Error,serror:t(n.serror)}:n},Zt=function(n,t){var e=Yt(n);return 0<e.errors.length?Ln(e.errors):function(n,t){return 0<n.length?Xt(Dn(t,An.apply(undefined,n))):Xt(t)}(e.values,t)},ne=function(n){var t=Yt(n);return 0<t.errors.length?Ln(t.errors):Xt(t.values)},te=Tn([{setOf:["validator","valueType"]},{arrOf:["valueType"]},{objOf:["fields"]},{itemOf:["validator"]},{choiceOf:["key","branches"]},{thunk:["description"]},{func:["args","outputSchema"]}]),ee=Tn([{field:["name","presence","type"]},{state:["name"]}]),oe=Tn([{field:["key","okey","presence","prop"]},{state:["okey","instantiator"]}]),re=function(o){return{extract:function(n,t,e){return function(t,e,n,o){var r=S(n,function(n){return Xn(t,e,n,o)});return Zt(r,{})}(n,e,o,t)},toString:function(){return"obj{\n"+S(o,function(n){return n.fold(function(n,t,e,o){return n+" -> "+o.toString()},function(n,t){return"state("+n+")"})}).join("\n")+"}"},toDsl:function(){return te.objOf(S(o,function(n){return n.fold(function(n,t,e,o){return ee.field(n,e,o)},function(n,t){return ee.state(n)})}))}}},ie=nn(Yn(Xt)),ue=i(Kn,re),ae=oe.state,ce=oe.field,se=Yn(Xt),fe=function(o){return{extract:function(n,t,e){return o().extract(n,t,e)},toString:function(){return o().toString()},toDsl:function(){return o().toDsl()}}},le=function(n){return"Errors: \n"+function(n){var t=10<n.length?n.slice(0,10).concat([{path:[],getErrorInfo:function(){return"... (only showing first ten failures)"}}]):n;return S(t,function(n){return"Failed path: ("+n.path.join(" > ")+")\n"+n.getErrorInfo()})}(n.errors)+"\n\nInput object: "+jn(n.input)},de=nn(se),me=ut(mn,"number"),ge=ut(cn,"string"),pe=ut(ln,"boolean"),he=ut(dn,"function"),ve=function(t){function n(n,t){for(var e=n.next();!e.done;){if(!t(e.value))return!1;e=n.next()}return!0}if(Object(t)!==t)return!0;switch({}.toString.call(t).slice(8,-1)){case"Boolean":case"Number":case"String":case"Date":case"RegExp":case"Blob":case"FileList":case"ImageData":case"ImageBitmap":case"ArrayBuffer":return!0;case"Array":case"Object":return Object.keys(t).every(function(n){return ve(t[n])});case"Map":return n(t.keys(),ve)&&n(t.values(),ve);case"Set":return n(t.keys(),ve);default:return!1}},be=Yn(function(n){return ve(n)?Xt(n):qt("Expected value to be acceptable for sending via postMessage")}),ye=function(n){function t(){return e}var e=n;return{get:t,set:function(n){e=n},clone:function(){return ye(t())}}},xe=function(n){if(null===n||n===undefined)throw new Error("Node cannot be null or undefined");return{dom:nn(n)}},we={fromHtml:function(n,t){var e=(t||v.document).createElement("div");if(e.innerHTML=n,!e.hasChildNodes()||1<e.childNodes.length)throw v.console.error("HTML does not have a single root node",n),new Error("HTML must have a single root node");return xe(e.childNodes[0])},fromTag:function(n,t){var e=(t||v.document).createElement(n);return xe(e)},fromText:function(n,t){var e=(t||v.document).createTextNode(n);return xe(e)},fromDom:xe,fromPoint:function(n,t,e){var o=n.dom();return on.from(o.elementFromPoint(t,e)).map(xe)}},Se=function(n,t){return _t(n,t,v.Node.DOCUMENT_POSITION_CONTAINED_BY)},Ce=function(){return ke(0,0)},ke=function(n,t){return{major:n,minor:t}},Oe={nu:ke,detect:function(n,t){var e=String(t).toLowerCase();return 0===n.length?Ce():Mt(n,e)},unknown:Ce},Ee="Firefox",Te=function(n){var t=n.current;return{current:t,version:n.version,isEdge:Ft("Edge",t),isChrome:Ft("Chrome",t),isIE:Ft("IE",t),isOpera:Ft("Opera",t),isFirefox:Ft(Ee,t),isSafari:Ft("Safari",t)}},Be={unknown:function(){return Te({current:undefined,version:Oe.unknown()})},nu:Te,edge:nn("Edge"),chrome:nn("Chrome"),ie:nn("IE"),opera:nn("Opera"),firefox:nn(Ee),safari:nn("Safari")},De="Windows",Ae="Android",_e="Solaris",Me="FreeBSD",Fe=function(n){var t=n.current;return{current:t,version:n.version,isWindows:It(De,t),isiOS:It("iOS",t),isAndroid:It(Ae,t),isOSX:It("OSX",t),isLinux:It("Linux",t),isSolaris:It(_e,t),isFreeBSD:It(Me,t)}},Ie={unknown:function(){return Fe({current:undefined,version:Oe.unknown()})},nu:Fe,windows:nn(De),ios:nn("iOS"),android:nn(Ae),linux:nn("Linux"),osx:nn("OSX"),solaris:nn(_e),freebsd:nn(Me)},Re=function(n,e){return Rt(n,e).map(function(n){var t=Oe.detect(n.versionRegexes,e);return{current:n.name,version:t}})},Ve=function(n,e){return Rt(n,e).map(function(n){var t=Oe.detect(n.versionRegexes,e);return{current:n.name,version:t}})},Ne=/.*?version\/\ ?([0-9]+)\.([0-9]+).*/,He=[{name:"Edge",versionRegexes:[/.*?edge\/ ?([0-9]+)\.([0-9]+)$/],search:function(n){return Vt(n,"edge/")&&Vt(n,"chrome")&&Vt(n,"safari")&&Vt(n,"applewebkit")}},{name:"Chrome",versionRegexes:[/.*?chrome\/([0-9]+)\.([0-9]+).*/,Ne],search:function(n){return Vt(n,"chrome")&&!Vt(n,"chromeframe")}},{name:"IE",versionRegexes:[/.*?msie\ ?([0-9]+)\.([0-9]+).*/,/.*?rv:([0-9]+)\.([0-9]+).*/],search:function(n){return Vt(n,"msie")||Vt(n,"trident")}},{name:"Opera",versionRegexes:[Ne,/.*?opera\/([0-9]+)\.([0-9]+).*/],search:Nt("opera")},{name:"Firefox",versionRegexes:[/.*?firefox\/\ ?([0-9]+)\.([0-9]+).*/],search:Nt("firefox")},{name:"Safari",versionRegexes:[Ne,/.*?cpu os ([0-9]+)_([0-9]+).*/],search:function(n){return(Vt(n,"safari")||Vt(n,"mobile/"))&&Vt(n,"applewebkit")}}],Pe=[{name:"Windows",search:Nt("win"),versionRegexes:[/.*?windows\ nt\ ?([0-9]+)\.([0-9]+).*/]},{name:"iOS",search:function(n){return Vt(n,"iphone")||Vt(n,"ipad")},versionRegexes:[/.*?version\/\ ?([0-9]+)\.([0-9]+).*/,/.*cpu os ([0-9]+)_([0-9]+).*/,/.*cpu iphone os ([0-9]+)_([0-9]+).*/]},{name:"Android",search:Nt("android"),versionRegexes:[/.*?android\ ?([0-9]+)\.([0-9]+).*/]},{name:"OSX",search:Nt("os x"),versionRegexes:[/.*?os\ x\ ?([0-9]+)_([0-9]+).*/]},{name:"Linux",search:Nt("linux"),versionRegexes:[]},{name:"Solaris",search:Nt("sunos"),versionRegexes:[]},{name:"FreeBSD",search:Nt("freebsd"),versionRegexes:[]}],ze={browsers:nn(He),oses:nn(Pe)},Le=ye(function(n,t){var e=ze.browsers(),o=ze.oses(),r=Re(e,n).fold(Be.unknown,Be.nu),i=Ve(o,n).fold(Ie.unknown,Ie.nu);return{browser:r,os:i,deviceType:function(n,t,e,o){var r=n.isiOS()&&!0===/ipad/i.test(e),i=n.isiOS()&&!r,u=n.isiOS()||n.isAndroid(),a=u||o("(pointer:coarse)"),c=r||!i&&u&&o("(min-device-width:768px)"),s=i||u&&!c,f=t.isSafari()&&n.isiOS()&&!1===/safari/i.test(e),l=!s&&!c&&!f;return{isiPad:nn(r),isiPhone:nn(i),isTablet:nn(c),isPhone:nn(s),isTouch:nn(a),isAndroid:n.isAndroid,isiOS:n.isiOS,isWebView:nn(f),isDesktop:nn(l)}}(i,r,n,t)}}(v.navigator.userAgent,function(n){return v.window.matchMedia(n).matches})),je=(v.Node.ATTRIBUTE_NODE,v.Node.CDATA_SECTION_NODE,v.Node.COMMENT_NODE,v.Node.DOCUMENT_NODE),Ue=(v.Node.DOCUMENT_TYPE_NODE,v.Node.DOCUMENT_FRAGMENT_NODE,v.Node.ELEMENT_NODE),We=v.Node.TEXT_NODE,Ge=(v.Node.PROCESSING_INSTRUCTION_NODE,v.Node.ENTITY_REFERENCE_NODE,v.Node.ENTITY_NODE,v.Node.NOTATION_NODE,Ue),Xe=je,Ye=Ht().browser.isIE()?function(n,t){return Se(n.dom(),t.dom())}:function(n,t){var e=n.dom(),o=t.dom();return e!==o&&e.contains(o)};function qe(n,t,e,o,r){return n(e,o)?on.some(e):dn(r)&&r(e)?on.none():t(e,o,r)}function Ke(n){return n.dom().nodeName.toLowerCase()}function Je(t){return function(n){return function(n){return n.dom().nodeType}(n)===t}}"undefined"!=typeof v.window?v.window:Function("return this;")();function $e(n){var t=Pr(n)?n.dom().parentNode:n.dom();return t!==undefined&&null!==t&&t.ownerDocument.body.contains(t)}function Qe(n,t,e){for(var o=n.dom(),r=dn(e)?e:nn(!1);o.parentNode;){o=o.parentNode;var i=we.fromDom(o);if(t(i))return on.some(i);if(r(i))break}return on.none()}function Ze(n,t,e){return qe(function(n,t){return t(n)},Qe,n,t,e)}function no(n,r){var i=function(n){for(var t=0;t<n.childNodes.length;t++){var e=we.fromDom(n.childNodes[t]);if(r(e))return on.some(e);var o=i(n.childNodes[t]);if(o.isSome())return o}return on.none()};return i(n.dom())}function to(n){if(!$(n,"can")&&!$(n,"abort")&&!$(n,"run"))throw new Error("EventHandler defined by: "+JSON.stringify(n,null,2)+" does not have can, abort, or run!");return ot("Extracting event.handler",qn([St("can",nn(!0)),St("abort",nn(!1)),St("run",Z)]),n)}function eo(e){var n=function(t,o){return function(){for(var e=[],n=0;n<arguments.length;n++)e[n]=arguments[n];return O(t,function(n,t){return n&&o(t).apply(undefined,e)},!0)}}(e,function(n){return n.can}),t=function(t,o){return function(){for(var e=[],n=0;n<arguments.length;n++)e[n]=arguments[n];return O(t,function(n,t){return n||o(t).apply(undefined,e)},!1)}}(e,function(n){return n.abort});return to({can:n,abort:t,run:function(){for(var t=[],n=0;n<arguments.length;n++)t[n]=arguments[n];bn(e,function(n){n.run.apply(undefined,t)})}})}function oo(n,t){Fi(n,n.element(),t,{})}function ro(n,t,e){Fi(n,n.element(),t,e)}function io(n){oo(n,di())}function uo(n,t,e){Fi(n,t,e,{})}function ao(n,t,e,o){n.getSystem().triggerEvent(e,t,o.event())}function co(n){return K(n)}function so(n,t){return{key:n,value:to({abort:t})}}function fo(n){return{key:n,value:to({run:function(n,t){t.event().prevent()}})}}function lo(n,t){return{key:n,value:to({run:t})}}function mo(n,e,o){return{key:n,value:to({run:function(n,t){e.apply(undefined,[n,t].concat(o))}})}}function go(n){return function(e){return{key:n,value:to({run:function(n,t){Ut(n,t)&&e(n,t)}})}}}function po(n,t,e){return function(e,o){return lo(e,function(n,t){n.getSystem().getByUid(o).each(function(n){ao(n,n.element(),e,t)})})}(n,t.partUids[e])}function ho(n,r){return lo(n,function(t,n){var e=n.event(),o=t.getSystem().getByDom(e.target()).fold(function(){return jr(e.target(),function(n){return t.getSystem().getByDom(n).toOption()},nn(!1)).getOr(t)},function(n){return n});r(t,o,n)})}function vo(n){return lo(n,function(n,t){t.cut()})}function bo(n,t){return go(n)(t)}function yo(){for(var t=[],n=0;n<arguments.length;n++)t[n]=arguments[n];return function(){for(var e=[],n=0;n<arguments.length;n++)e[n]=arguments[n];if(t.length!==e.length)throw new Error('Wrong number of arguments to struct. Expected "['+t.length+']", got '+e.length+" arguments");var o={};return bn(t,function(n,t){o[n]=nn(e[t])}),o}}function xo(n){return n.slice(0).sort()}function wo(t,n){if(!fn(n))throw new Error("The "+t+" fields must be an array. Was: "+n+".");bn(n,function(n){if(!cn(n))throw new Error("The value "+n+" in the "+t+" fields was not a string.")})}function So(r,i){var u=r.concat(i);if(0===u.length)throw new Error("You must specify at least one required or optional field.");return wo("required",r),wo("optional",i),function(n){var e=xo(n);E(e,function(n,t){return t<e.length-1&&n===e[t+1]}).each(function(n){throw new Error("The field: "+n+" occurs more than once in the combined fields: ["+e.join(", ")+"].")})}(u),function(t){var e=wn(t);D(r,function(n){return vn(e,n)})||function(n,t){throw new Error("All required keys ("+xo(n).join(", ")+") were not specified. Specified keys were: "+xo(t).join(", ")+".")}(r,e);var n=C(e,function(n){return!vn(u,n)});0<n.length&&function(n){throw new Error("Unsupported keys for object: "+xo(n).join(", "))}(n);var o={};return bn(r,function(n){o[n]=nn(t[n])}),bn(i,function(n){o[n]=nn(Object.prototype.hasOwnProperty.call(t,n)?on.some(t[n]):on.none())}),o}}function Co(n){return we.fromDom(n.dom().ownerDocument)}function ko(n){return we.fromDom(n.dom().ownerDocument.documentElement)}function Oo(n){return we.fromDom(n.dom().ownerDocument.defaultView)}function Eo(n){return on.from(n.dom().parentNode).map(we.fromDom)}function To(n){return on.from(n.dom().offsetParent).map(we.fromDom)}function Bo(n){return S(n.dom().childNodes,we.fromDom)}function Do(n,t){var e=n.dom().childNodes;return on.from(e[t]).map(we.fromDom)}function Ao(t,e){Eo(t).each(function(n){n.dom().insertBefore(e.dom(),t.dom())})}function _o(n,t){(function(n){return on.from(n.dom().nextSibling).map(we.fromDom)})(n).fold(function(){Eo(n).each(function(n){Hi(n,t)})},function(n){Ao(n,t)})}function Mo(t,e){(function(n){return Do(n,0)})(t).fold(function(){Hi(t,e)},function(n){t.dom().insertBefore(e.dom(),n.dom())})}function Fo(t,n){bn(n,function(n){Hi(t,n)})}function Io(n){n.dom().textContent="",bn(Bo(n),function(n){Pi(n)})}function Ro(n){var t=Bo(n);0<t.length&&function(t,n){bn(n,function(n){Ao(t,n)})}(n,t),Pi(n)}function Vo(n){return n.dom().innerHTML}function No(n,t){var e=Co(n).dom(),o=we.fromDom(e.createDocumentFragment()),r=function(n,t){var e=(t||v.document).createElement("div");return e.innerHTML=n,Bo(we.fromDom(e))}(t,e);Fo(o,r),Io(n),Hi(n,o)}function Ho(n,t,e){if(!(cn(e)||ln(e)||mn(e)))throw v.console.error("Invalid call to Attr.set. Key ",t,":: Value ",e,":: Element ",n),new Error("Attribute value was not simple");n.setAttribute(t,e+"")}function Po(n,t,e){Ho(n.dom(),t,e)}function zo(n,t){var e=n.dom().getAttribute(t);return null===e?undefined:e}function Lo(n,t){var e=n.dom();return!(!e||!e.hasAttribute)&&e.hasAttribute(t)}function jo(n,t){n.dom().removeAttribute(t)}function Uo(n){return function(n,t){return we.fromDom(n.dom().cloneNode(t))}(n,!1)}function Wo(n){return function(n){var t=we.fromTag("div"),e=we.fromDom(n.dom().cloneNode(!0));return Hi(t,e),Vo(t)}(Uo(n))}function Go(n){return Wo(n)}function Xo(n){var t=(new Date).getTime();return n+"_"+Math.floor(1e9*Math.random())+ ++ji+String(t)}function Yo(n){return Xo(n)}function qo(t){function n(n){return function(){throw new Error("The component must be in a context to send: "+n+"\n"+Go(t().element())+" is not in context.")}}return{debugInfo:nn("fake"),triggerEvent:n("triggerEvent"),triggerFocus:n("triggerFocus"),triggerEscape:n("triggerEscape"),build:n("build"),addToWorld:n("addToWorld"),removeFromWorld:n("removeFromWorld"),addToGui:n("addToGui"),removeFromGui:n("removeFromGui"),getByUid:n("getByUid"),getByDom:n("getByDom"),broadcast:n("broadcast"),broadcastOn:n("broadcastOn"),broadcastEvent:n("broadcastEvent"),isConnected:nn(!1)}}function Ko(n,t){var e=n.toString(),o=e.indexOf(")")+1,r=e.indexOf("("),i=e.substring(r+1,o-1).split(/,\s*/);return n.toFunctionAnnotation=function(){return{name:t,parameters:$i(i)}},n}function Jo(n){return q(Qi,n)}function $o(o){return function(n,t){var e=t.toString(),o=e.indexOf(")")+1,r=e.indexOf("("),i=e.substring(r+1,o-1).split(/,\s*/);return n.toFunctionAnnotation=function(){return{name:"OVERRIDE",parameters:$i(i.slice(1))}},n}(function(n){for(var t=[],e=1;e<arguments.length;e++)t[e-1]=arguments[e];return o.apply(undefined,[n.getApis()].concat([n].concat(t)))},o)}function Qo(n,r){var i={};return Cn(n,function(n,o){Cn(n,function(n,t){var e=Y(t,[])(i);i[t]=e.concat([r(o,n)])})}),i}function Zo(n){return{classes:n.classes!==undefined?n.classes:[],attributes:n.attributes!==undefined?n.attributes:{},styles:n.styles!==undefined?n.styles:{}}}function nr(n){return n.cHandler}function tr(n,t){return{name:nn(n),handler:nn(t)}}function er(n,t,e){var o=N(N({},e),function(n,t){var e={};return bn(n,function(n){e[n.name()]=n.handlers(t)}),e}(t,n));return Qo(o,tr)}function or(n){var i=function(n){return dn(n)?{can:nn(!0),abort:nn(!1),run:n}:n}(n);return function(n,t){for(var e=[],o=2;o<arguments.length;o++)e[o-2]=arguments[o];var r=[n,t].concat(e);i.abort.apply(undefined,r)?t.stop():i.can.apply(undefined,r)&&i.run.apply(undefined,r)}}function rr(n,t,e){var o=t[e];return o?function(u,a,n,c){var t=n.slice(0);try{var e=t.sort(function(n,t){var e=n[a](),o=t[a](),r=c.indexOf(e),i=c.indexOf(o);if(-1===r)throw new Error("The ordering for "+u+" does not have an entry for "+e+".\nOrder specified: "+JSON.stringify(c,null,2));if(-1===i)throw new Error("The ordering for "+u+" does not have an entry for "+o+".\nOrder specified: "+JSON.stringify(c,null,2));return r<i?-1:i<r?1:0});return an.value(e)}catch(o){return an.error([o])}}("Event: "+e,"name",n,o).map(function(n){var t=S(n,function(n){return n.handler()});return eo(t)}):function(n,t){return an.error(["The event ("+n+') has more than one behaviour that listens to it.\nWhen this occurs, you must specify an event ordering for the behaviours in your spec (e.g. [ "listing", "toggling" ]).\nThe behaviours that can trigger it are: '+JSON.stringify(S(t,function(n){return n.name()}),null,2)])}(e,n)}function ir(n){return tt("custom.definition",re([ce("dom","dom",Mn(),re([ct("tag"),St("styles",{}),St("classes",[]),St("attributes",{}),ht("value"),ht("innerHtml")])),ct("components"),ct("uid"),St("events",{}),St("apis",{}),ce("eventOrder","eventOrder",function(n){return _n.mergeWithThunk(nn(n))}({"alloy.execute":["disabling","alloy.base.behaviour","toggling","typeaheadevents"],"alloy.focus":["alloy.base.behaviour","focusing","keying"],"alloy.system.init":["alloy.base.behaviour","disabling","toggling","representing"],input:["alloy.base.behaviour","representing","streaming","invalidating"],"alloy.system.detached":["alloy.base.behaviour","representing","item-events","tooltipping"],mousedown:["focusing","alloy.base.behaviour","item-type-events"],touchstart:["focusing","alloy.base.behaviour","item-type-events"],mouseover:["item-type-events","tooltipping"]}),de()),ht("domModification")]),n)}function ur(n,t){var e=zo(n,t);return e===undefined||""===e?[]:e.split(" ")}function ar(n){return n.dom().classList!==undefined}function cr(n,t){return function(n,t,e){var o=ur(n,t).concat([e]);return Po(n,t,o.join(" ")),!0}(n,"class",t)}function sr(n,t){return function(n,t,e){var o=C(ur(n,t),function(n){return n!==e});return 0<o.length?Po(n,t,o.join(" ")):jo(n,t),!1}(n,"class",t)}function fr(n,t){ar(n)?n.dom().classList.add(t):cr(n,t)}function lr(n){0===(ar(n)?n.dom().classList:function(n){return ur(n,"class")}(n)).length&&jo(n,"class")}function dr(n,t){ar(n)?n.dom().classList.remove(t):sr(n,t),lr(n)}function mr(n,t){return ar(n)&&n.dom().classList.contains(t)}function gr(t,n){bn(n,function(n){fr(t,n)})}function pr(t,n){bn(n,function(n){dr(t,n)})}function hr(n){return n.style!==undefined&&dn(n.style.getPropertyValue)}function vr(n,t,e){if(!cn(e))throw v.console.error("Invalid call to CSS.set. Property ",t,":: Value ",e,":: Element ",n),new Error("CSS value must be a string: "+e);hr(n)&&n.style.setProperty(t,e)}function br(n,t){hr(n)&&n.style.removeProperty(t)}function yr(n,t,e){var o=n.dom();vr(o,t,e)}function xr(n,t){var e=n.dom();Cn(t,function(n,t){vr(e,t,n)})}function wr(n,t){var e=n.dom(),o=v.window.getComputedStyle(e).getPropertyValue(t),r=""!==o||$e(n)?o:ou(e,t);return null===r?undefined:r}function Sr(n,t){var e=n.dom(),o=ou(e,t);return on.from(o).filter(function(n){return 0<n.length})}function Cr(n,t,e){var o=we.fromTag(n);return yr(o,t,e),Sr(o,t).isSome()}function kr(n,t){var e=n.dom();br(e,t),Lo(n,"style")&&""===function(n){return n.replace(/^\s+|\s+$/g,"")}(zo(n,"style"))&&jo(n,"style")}function Or(n){return n.dom().offsetWidth}function Er(n){return n.dom().value}function Tr(n,t){if(t===undefined)throw new Error("Value.set was undefined");n.dom().value=t}function Br(n){var t=we.fromTag(n.tag);!function(n,t){var e=n.dom();Cn(t,function(n,t){Ho(e,t,n)})}(t,n.attributes),gr(t,n.classes),xr(t,n.styles),n.innerHtml.each(function(n){return No(t,n)});var e=n.domChildren;return Fo(t,e),n.value.each(function(n){Tr(t,n)}),n.uid,Yi(t,n.uid),t}function Dr(n,t){return function(t,n){var e=S(n,function(n){return wt(n.name(),[ct("config"),St("state",Zi)])}),o=tt("component.behaviours",re(e),t.behaviours).fold(function(n){throw new Error(le(n)+"\nComplete spec:\n"+JSON.stringify(t,null,2))},function(n){return n});return{list:n,data:P(o,function(n){var t=n.map(function(n){return{config:n.config,state:n.state.init(n.config)}});return function(){return t}})}}(n,t)}function Ar(n){var t=function(n){var t=Y("behaviours",{})(n),e=C(wn(t),function(n){return t[n]!==undefined});return S(e,function(n){return t[n].me})}(n);return Dr(n,t)}function _r(n,t,e){var o=function(n){return N(N({},n.dom),{uid:n.uid,domChildren:S(n.components,function(n){return n.element()})})}(n),r=function(n){return n.domModification.fold(function(){return Zo({})},Zo)}(n),i={"alloy.base.modification":r};return function(n,t){return N(N({},n),{attributes:N(N({},n.attributes),t.attributes),styles:N(N({},n.styles),t.styles),classes:n.classes.concat(t.classes)})}(o,0<t.length?function(t,n,e,o){var r=N({},n);bn(e,function(n){r[n.name()]=n.exhibit(t,o)});function i(n){return k(n,function(n,t){return N(N({},t.modification),n)},{})}var u=Qo(r,function(n,t){return{name:n,modification:t}}),a=k(u.classes,function(n,t){return t.modification.concat(n)},[]),c=i(u.attributes),s=i(u.styles);return Zo({classes:a,attributes:c,styles:s})}(e,i,t,o):r)}function Mr(n,t,e){var o={"alloy.base.behaviour":function(n){return n.events}(n)};return function(n,t,e,o){var r=er(n,e,o);return eu(r,t)}(e,n.eventOrder,t,o).getOrDie()}function Fr(n){var t=Ki(n),e=t.events,o=c(t,["events"]),r=function(n){var t=Y("components",[])(n);return S(t,uu)}(o),i=N(N({},o),{events:N(N({},Li),e),components:r});return an.value(function(e){function n(){return l}var o=ye(Ji),t=et(ir(e)),r=Ar(e),i=function(n){return n.list}(r),u=function(n){return n.data}(r),a=_r(t,i,u),c=Br(a),s=Mr(t,i,u),f=ye(t.components),l={getSystem:o.get,config:function(n){var t=u;return(dn(t[n.name()])?t[n.name()]:function(){throw new Error("Could not find "+n.name()+" in "+JSON.stringify(e,null,2))})()},hasConfigured:function(n){return dn(u[n.name()])},spec:nn(e),readState:function(n){return u[n]().map(function(n){return n.state.readState()}).getOr("not enabled")},getApis:function(){return t.apis},connect:function(n){o.set(n)},disconnect:function(){o.set(qo(n))},element:nn(c),syncComponents:function(){var n=Bo(c),t=B(n,function(n){return o.get().getByDom(n).fold(function(){return[]},function(n){return[n]})});f.set(t)},components:f.get,events:nn(s)};return l}(i))}function Ir(n){var t=we.fromText(n);return ru({element:t})}var Rr,Vr,Nr,Hr=Je(Ue),Pr=Je(We),zr=L(function(){return Lr(we.fromDom(v.document))}),Lr=function(n){var t=n.dom().body;if(null===t||t===undefined)throw new Error("Body is not available yet");return we.fromDom(t)},jr=function(n,t,e){return Ze(n,function(n){return t(n).isSome()},e).bind(t)},Ur=nn("touchstart"),Wr=nn("touchmove"),Gr=nn("touchend"),Xr=nn("touchcancel"),Yr=nn("mousedown"),qr=nn("mousemove"),Kr=nn("mouseout"),Jr=nn("mouseup"),$r=nn("mouseover"),Qr=nn("focusin"),Zr=nn("focusout"),ni=nn("keydown"),ti=nn("keyup"),ei=nn("input"),oi=nn("change"),ri=nn("click"),ii=nn("transitionend"),ui=nn("selectstart"),ai={tap:nn("alloy.tap")},ci=nn("alloy.focus"),si=nn("alloy.blur.post"),fi=nn("alloy.paste.post"),li=nn("alloy.receive"),di=nn("alloy.execute"),mi=nn("alloy.focus.item"),gi=ai.tap,pi=nn("alloy.longpress"),hi=nn("alloy.sandbox.close"),vi=nn("alloy.typeahead.cancel"),bi=nn("alloy.system.init"),yi=nn("alloy.system.touchmove"),xi=nn("alloy.system.touchend"),wi=nn("alloy.system.scroll"),Si=nn("alloy.system.resize"),Ci=nn("alloy.system.attached"),ki=nn("alloy.system.detached"),Oi=nn("alloy.system.dismissRequested"),Ei=nn("alloy.system.repositionRequested"),Ti=nn("alloy.focusmanager.shifted"),Bi=nn("alloy.slotcontainer.visibility"),Di=nn("alloy.change.tab"),Ai=nn("alloy.dismiss.tab"),_i=nn("alloy.highlight"),Mi=nn("alloy.dehighlight"),Fi=function(n,t,e,o){var r=N({target:t},o);n.getSystem().triggerEvent(e,t,P(r,nn))},Ii=go(Ci()),Ri=go(ki()),Vi=go(bi()),Ni=(Rr=di(),function(n){return lo(Rr,n)}),Hi=(yo("element","offset"),function(n,t){n.dom().appendChild(t.dom())}),Pi=function(n){var t=n.dom();null!==t.parentNode&&t.parentNode.removeChild(t)},zi=co([(Vr=ci(),Nr=function(n,t){var e=t.event().originator(),o=t.event().target();return!function(n,t,e){return jt(t,n.element())&&!jt(t,e)}(n,e,o)||(v.console.warn(ci()+" did not get interpreted by the desired target. \nOriginator: "+Go(e)+"\nTarget: "+Go(o)+"\nCheck the "+ci()+" event handlers"),!1)},{key:Vr,value:to({can:Nr})})]),Li=/* */Object.freeze({events:zi}),ji=0,Ui=nn("alloy-id-"),Wi=nn("data-alloy-id"),Gi=Ui(),Xi=Wi(),Yi=function(n,t){Object.defineProperty(n.dom(),Xi,{value:t,writable:!0})},qi=function(n){var t=Hr(n)?n.dom()[Xi]:null;return on.from(t)},Ki=l,Ji=qo(),$i=function(n){return S(n,function(n){return function(n,t){return function(n,t,e){return""===t||!(n.length<t.length)&&n.substr(e,e+t.length)===t}(n,t,n.length-t.length)}(n,"/*")?n.substring(0,n.length-"/*".length):n})},Qi=Xo("alloy-premade"),Zi={init:function(){return nu({readState:function(){return"No State required"}})}},nu=function(n){return n},tu=function(n,t){return function(n,t){return{cHandler:n,purpose:nn(t)}}(d.apply(undefined,[n.handler].concat(t)),n.purpose())},eu=function(n,i){var t=On(n,function(o,r){return(1===o.length?an.value(o[0].handler()):rr(o,i,r)).map(function(n){var t=or(n),e=1<o.length?C(i[r],function(t){return x(o,function(n){return n.name()===t})}).join(" > "):o[0].name();return q(r,function(n,t){return{handler:n,purpose:nn(t)}}(t,e))})});return J(t,{})},ou=function(n,t){return hr(n)?n.style.getPropertyValue(t):""},ru=function(n){var t=ot("external.component",qn([ct("element"),ht("uid")]),n),e=ye(qo());t.uid.each(function(n){Yi(t.element,n)});var o={getSystem:e.get,config:on.none,hasConfigured:nn(!1),connect:function(n){e.set(n)},disconnect:function(){e.set(qo(function(){return o}))},getApis:function(){return{}},element:nn(t.element),spec:nn(n),readState:nn("No state"),syncComponents:Z,components:nn([]),events:nn({})};return Jo(o)},iu=Yo,uu=function(t){return function(n){return Nn(n,Qi)}(t).fold(function(){var n=t.hasOwnProperty("uid")?t:N({uid:iu("")},t);return Fr(n).getOrDie()},function(n){return n})},au=Jo;function cu(o,r){function n(n){var t=r(n);if(t<=0||null===t){var e=wr(n,o);return parseFloat(e)||0}return t}function i(r,n){return O(n,function(n,t){var e=wr(r,t),o=e===undefined?0:parseInt(e,10);return isNaN(o)?n:n+o},0)}return{set:function(n,t){if(!mn(t)&&!t.match(/^[0-9]+$/))throw new Error(o+".set accepts only positive integer values. Value was "+t);var e=n.dom();hr(e)&&(e.style[o]=t+"px")},get:n,getOuter:n,aggregate:i,max:function(n,t,e){var o=i(n,e);return o<t?t-o:0}}}function su(n){return Mu.get(n)}function fu(n){return Mu.getOuter(n)}function lu(n,t){return n!==undefined?n:t!==undefined?t:0}function du(n){var t=n.dom().ownerDocument,e=t.body,o=t.defaultView,r=t.documentElement;if(e===n.dom())return Iu(e.offsetLeft,e.offsetTop);var i=lu(o.pageYOffset,r.scrollTop),u=lu(o.pageXOffset,r.scrollLeft),a=lu(r.clientTop,e.clientTop),c=lu(r.clientLeft,e.clientLeft);return Ru(n).translate(u-c,i-a)}function mu(n){return Vu.get(n)}function gu(n){return Vu.getOuter(n)}function pu(n){var t=n!==undefined?n.dom():v.document,e=t.body.scrollLeft||t.documentElement.scrollLeft,o=t.body.scrollTop||t.documentElement.scrollTop;return Iu(e,o)}function hu(n,t,e,o){return{x:nn(n),y:nn(t),width:nn(e),height:nn(o),right:nn(n+e),bottom:nn(t+o)}}function vu(n){var t=n===undefined?v.window:n,e=t.document,o=pu(we.fromDom(e)),r=t.visualViewport;if(r!==undefined)return hu(Math.max(r.pageLeft,o.left()),Math.max(r.pageTop,o.top()),r.width,r.height);var i=e.documentElement,u=i.clientWidth,a=i.clientHeight;return hu(o.left(),o.top(),u,a)}function bu(o){var n=we.fromDom(v.document),r=pu(n);return function(n,t){var e=t.owner(n),o=Nu(t,e);return on.some(o)}(o,Hu).fold(d(du,o),function(n){var t=Ru(o),e=k(n,function(n,t){var e=Ru(t);return{left:n.left+e.left(),top:n.top+e.top()}},{left:0,top:0});return Iu(e.left+t.left()+r.left(),e.top+t.top()+r.top())})}function yu(n,t,e,o){return{x:nn(n),y:nn(t),width:nn(e),height:nn(o),right:nn(n+e),bottom:nn(t+o)}}function xu(n){var t=du(n),e=gu(n),o=fu(n);return yu(t.left(),t.top(),e,o)}function wu(n){var t=bu(n),e=gu(n),o=fu(n);return yu(t.left(),t.top(),e,o)}function Su(){return vu(v.window)}function Cu(n,t,e){return Qe(n,function(n){return Pt(n,t)},e)}function ku(n,t){return function(n,t){var e=t===undefined?v.document:t.dom();return zt(e)?on.none():on.from(e.querySelector(n)).map(we.fromDom)}(t,n)}function Ou(n,t,e){return qe(Pt,Cu,n,t,e)}function Eu(){var t=Xo("aria-owns");return{id:nn(t),link:function(n){Po(n,"aria-owns",t)},unlink:function(n){jo(n,"aria-owns")}}}function Tu(t,n){return function(n){return Ze(n,function(n){if(!Hr(n))return!1;var t=zo(n,"id");return t!==undefined&&-1<t.indexOf("aria-owns")}).bind(function(n){var t=zo(n,"id"),e=Co(n);return ku(e,'[aria-owns="'+t+'"]')})}(n).exists(function(n){return Lu(t,n)})}function Bu(n){for(var t=[],e=function(n){t.push(n)},o=0;o<n.length;o++)n[o].each(e);return t}function Du(n,t){for(var e=0;e<n.length;e++){var o=t(n[e],e);if(o.isSome())return o}return on.none()}var Au,_u,Mu=cu("height",function(n){var t=n.dom();return $e(n)?t.getBoundingClientRect().height:t.offsetHeight}),Fu=function(e,o){return{left:nn(e),top:nn(o),translate:function(n,t){return Fu(e+n,o+t)}}},Iu=Fu,Ru=function(n){var t=n.dom(),e=t.ownerDocument.body;return e===t?Iu(e.offsetLeft,e.offsetTop):$e(n)?function(n){var t=n.getBoundingClientRect();return Iu(t.left,t.top)}(t):Iu(0,0)},Vu=cu("width",function(n){return n.dom().offsetWidth}),Nu=(Ht().browser.isSafari(),function(o,n){return o.view(n).fold(nn([]),function(n){var t=o.owner(n),e=Nu(o,t);return[n].concat(e)})}),Hu=/* */Object.freeze({view:function(n){return(n.dom()===v.document?on.none():on.from(n.dom().defaultView.frameElement)).map(we.fromDom)},owner:function(n){return Co(n)}}),Pu=yo("point","width","height"),zu=yo("x","y","width","height"),Lu=function(t,n){return function(n,t,e){return Ze(n,t,e).isSome()}(n,function(n){return jt(n,t.element())},nn(!1))||Tu(t,n)},ju="unknown";(_u=Au=Au||{})[_u.STOP=0]="STOP",_u[_u.NORMAL=1]="NORMAL",_u[_u.LOGGING=2]="LOGGING";function Uu(t,n,e){switch(Nn(Pa.get(),t).orThunk(function(){var n=wn(Pa.get());return Du(n,function(n){return-1<t.indexOf(n)?on.some(Pa.get()[n]):on.none()})}).getOr(Au.NORMAL)){case Au.NORMAL:return e(La());case Au.LOGGING:var o=function(t,e){var o=[],r=(new Date).getTime();return{logEventCut:function(n,t,e){o.push({outcome:"cut",target:t,purpose:e})},logEventStopped:function(n,t,e){o.push({outcome:"stopped",target:t,purpose:e})},logNoParent:function(n,t,e){o.push({outcome:"no-parent",target:t,purpose:e})},logEventNoHandlers:function(n,t){o.push({outcome:"no-handlers-left",target:t})},logEventResponse:function(n,t,e){o.push({outcome:"response",purpose:e,target:t})},write:function(){var n=(new Date).getTime();vn(["mousemove","mouseover","mouseout",bi()],t)||v.console.log(t,{event:t,time:n-r,target:e.dom(),sequence:S(o,function(n){return vn(["cut","stopped","response"],n.outcome)?"{"+n.purpose+"} "+n.outcome+" at ("+Go(n.target)+")":n.outcome})})}}}(t,n),r=e(o);return o.write(),r;case Au.STOP:return!0}}function Wu(n,t,e){return Uu(n,t,e)}function Gu(){return mt("markers",[ct("backgroundMenu")].concat(ja()).concat(Ua()))}function Xu(n){return mt("markers",S(n,ct))}function Yu(n,t,e){return function(){var n=new Error;if(n.stack===undefined)return;var t=n.stack.split("\n");E(t,function(t){return 0<t.indexOf("alloy")&&!x(za,function(n){return-1<t.indexOf(n)})}).getOr(ju)}(),ce(t,t,e,Zn(function(e){return an.value(function(){for(var n=[],t=0;t<arguments.length;t++)n[t]=arguments[t];return e.apply(undefined,n)})}))}function qu(n){return Yu(0,n,j(Z))}function Ku(n){return Yu(0,n,j(on.none))}function Ju(n){return Yu(0,n,Mn())}function $u(n){return Yu(0,n,Mn())}function Qu(n,t){return At(n,nn(t))}function Zu(n){return At(n,l)}function na(n){return n.x()}function ta(n,t){return n.x()+n.width()/2-t.width()/2}function ea(n,t){return n.x()+n.width()-t.width()}function oa(n,t){return n.y()-t.height()}function ra(n){return n.y()+n.height()}function ia(n,t){return n.y()+n.height()/2-t.height()/2}function ua(n,t,e){return Ya(na(n),ra(n),e.southeast(),Ka(),"layout-se")}function aa(n,t,e){return Ya(ea(n,t),ra(n),e.southwest(),Ja(),"layout-sw")}function ca(n,t,e){return Ya(na(n),oa(n,t),e.northeast(),$a(),"layout-ne")}function sa(n,t,e){return Ya(ea(n,t),oa(n,t),e.northwest(),Qa(),"layout-nw")}function fa(n,t,e){return Ya(function(n){return n.x()+n.width()}(n),ia(n,t),e.east(),tc(),"layout-e")}function la(n,t,e){return Ya(function(n,t){return n.x()-t.width()}(n,t),ia(n,t),e.west(),ec(),"layout-w")}function da(){return[ua,aa,ca,sa,rc,oc]}function ma(){return[aa,ua,sa,ca,rc,oc]}function ga(e,o,r){return Vi(function(n,t){r(n,e,o)})}function pa(n,t,e,o,r,i){var u=qn(n),a=wt(t,[function(n,t){return vt(n,qn(t))}("config",n)]);return ic(u,a,t,e,o,r,i)}function ha(r,i,u){return function(n,t,e){var o=e.toString(),r=o.indexOf(")")+1,i=o.indexOf("("),u=o.substring(i+1,r-1).split(/,\s*/);return n.toFunctionAnnotation=function(){return{name:t,parameters:$i(u.slice(0,1).concat(u.slice(3)))}},n}(function(e){for(var n=[],t=1;t<arguments.length;t++)n[t-1]=arguments[t];var o=[e].concat(n);return e.config({name:nn(r)}).fold(function(){throw new Error("We could not find any behaviour configuration for: "+r+". Using API: "+u)},function(n){var t=Array.prototype.slice.call(o,1);return i.apply(undefined,[e,n.config,n.state].concat(t))})},u,i)}function va(n){return{key:n,value:undefined}}function ba(n){return K(n)}function ya(n){var t=ot("Creating behaviour: "+n.name,uc,n);return pa(t.fields,t.name,t.active,t.apis,t.extra,t.state)}function xa(n){var t=ot("Creating behaviour: "+n.name,ac,n);return function(n,t,e,o,r,i){var u=n,a=wt(t,[vt("config",n)]);return ic(u,a,t,e,o,r,i)}(it(t.branchKey,t.branches),t.name,t.active,t.apis,t.extra,t.state)}function wa(n){n.dom().focus()}function Sa(n){var t=n!==undefined?n.dom():v.document;return on.from(t.activeElement).map(we.fromDom)}function Ca(t){return Sa(Co(t)).filter(function(n){return t.dom().contains(n.dom())})}function ka(n,e){var o=Co(e),t=Sa(o).bind(function(t){function n(n){return jt(t,n)}return n(e)?on.some(e):no(e,n)}),r=n(e);return t.each(function(t){Sa(o).filter(function(n){return jt(n,t)}).fold(function(){wa(t)},Z)}),r}function Oa(n,t,e){function r(n){return Nn(e,n).getOr([])}function o(n,t,e){var o=_(mc,e);return{offset:function(){return Iu(n,t)},classesOn:function(){return B(e,r)},classesOff:function(){return B(o,r)}}}return{southeast:function(){return o(-n,t,["top","alignLeft"])},southwest:function(){return o(n,t,["top","alignRight"])},south:function(){return o(-n/2,t,["top","alignCentre"])},northeast:function(){return o(-n,-t,["bottom","alignLeft"])},northwest:function(){return o(n,-t,["bottom","alignRight"])},north:function(){return o(-n/2,-t,["bottom","alignCentre"])},east:function(){return o(n,-t/2,["valignCentre","left"])},west:function(){return o(-n,-t/2,["valignCentre","right"])},innerNorthwest:function(){return o(-n,t,["top","alignRight"])},innerNortheast:function(){return o(n,t,["top","alignLeft"])},innerNorth:function(){return o(-n/2,t,["top","alignCentre"])},innerSouthwest:function(){return o(-n,-t,["bottom","alignRight"])},innerSoutheast:function(){return o(n,-t,["bottom","alignLeft"])},innerSouth:function(){return o(-n/2,-t,["bottom","alignCentre"])},innerWest:function(){return o(n,-t/2,["valignCentre","right"])},innerEast:function(){return o(-n,-t/2,["valignCentre","left"])}}}function Ea(){return Oa(0,0,{})}function Ta(n,t,e,o,r,i){var u=t.x()-e,a=t.y()-o,c=r-(u+t.width()),s=i-(a+t.height()),f=on.some(u),l=on.some(a),d=on.some(c),m=on.some(s),g=on.none();return function(n,t,e,o,r,i,u,a,c){return n.fold(t,e,o,r,i,u,a,c)}(t.direction(),function(){return pc(n,f,l,g,g)},function(){return pc(n,g,l,d,g)},function(){return pc(n,f,g,g,m)},function(){return pc(n,g,g,d,m)},function(){return pc(n,f,l,g,g)},function(){return pc(n,f,g,g,m)},function(){return pc(n,f,l,g,g)},function(){return pc(n,g,l,d,g)})}function Ba(n,t){var e=d(bu,t),o=n.fold(e,e,function(){var n=pu();return bu(t).translate(-n.left(),-n.top())}),r=gu(t),i=fu(t);return yu(o.left(),o.top(),r,i)}function Da(n){return n}function Aa(t,e){return function(n){return"rtl"===xc(n)?e:t}}function _a(){return wt("layouts",[ct("onLtr"),ct("onRtl")])}function Ma(t,n,e,o){var r=n.layouts.map(function(n){return n.onLtr(t)}).getOr(e),i=n.layouts.map(function(n){return n.onRtl(t)}).getOr(o);return Aa(r,i)(t)}function Fa(n,t,e){var o=n.document.createRange();return function(e,n){n.fold(function(n){e.setStartBefore(n.dom())},function(n,t){e.setStart(n.dom(),t)},function(n){e.setStartAfter(n.dom())})}(o,t),function(e,n){n.fold(function(n){e.setEndBefore(n.dom())},function(n,t){e.setEnd(n.dom(),t)},function(n){e.setEndAfter(n.dom())})}(o,e),o}function Ia(n,t,e,o,r){var i=n.document.createRange();return i.setStart(t.dom(),e),i.setEnd(o.dom(),r),i}function Ra(n){return{left:nn(n.left),top:nn(n.top),right:nn(n.right),bottom:nn(n.bottom),width:nn(n.width),height:nn(n.height)}}function Va(n,t,e){return t(we.fromDom(e.startContainer),e.startOffset,we.fromDom(e.endContainer),e.endOffset)}function Na(n,t){return function(n,t){var e=t.ltr();return e.collapsed?t.rtl().filter(function(n){return!1===n.collapsed}).map(function(n){return Bc.rtl(we.fromDom(n.endContainer),n.endOffset,we.fromDom(n.startContainer),n.startOffset)}).getOrThunk(function(){return Va(0,Bc.ltr,e)}):Va(0,Bc.ltr,e)}(0,function(r,n){return n.match({domRange:function(n){return{ltr:nn(n),rtl:on.none}},relative:function(n,t){return{ltr:L(function(){return Fa(r,n,t)}),rtl:L(function(){return on.some(Fa(r,t,n))})}},exact:function(n,t,e,o){return{ltr:L(function(){return Ia(r,n,t,e,o)}),rtl:L(function(){return on.some(Ia(r,e,o,n,t))})}}})}(n,t))}function Ha(n,t,e){return t>=n.left&&t<=n.right&&e>=n.top&&e<=n.bottom}var Pa=ye({}),za=["alloy/data/Fields","alloy/debugging/Debugging"],La=nn({logEventCut:Z,logEventStopped:Z,logNoParent:Z,logEventNoHandlers:Z,logEventResponse:Z,write:Z}),ja=nn([ct("menu"),ct("selectedMenu")]),Ua=nn([ct("item"),ct("selectedItem")]),Wa=(nn(re(Ua().concat(ja()))),nn(re(Ua()))),Ga=mt("initSize",[ct("numColumns"),ct("numRows")]),Xa=nn(Ga),Ya=yo("x","y","bubble","direction","label"),qa=Tn([{southeast:[]},{southwest:[]},{northeast:[]},{northwest:[]},{south:[]},{north:[]},{east:[]},{west:[]}]),Ka=qa.southeast,Ja=qa.southwest,$a=qa.northeast,Qa=qa.northwest,Za=qa.south,nc=qa.north,tc=qa.east,ec=qa.west,oc=function(n,t,e){return Ya(ta(n,t),oa(n,t),e.north(),nc(),"layout-n")},rc=function(n,t,e){return Ya(ta(n,t),ra(n),e.south(),Za(),"layout-s")},ic=function(e,n,o,r,t,i,u){function a(n){return $(n,o)?n[o]():on.none()}var c=P(t,function(n,t){return ha(o,n,t)}),s=P(i,function(n,t){return Ko(n,t)}),f=N(N(N({},s),c),{revoke:d(va,o),config:function(n){var t=ot(o+"-config",e,n);return{key:o,value:{config:t,me:f,configAsRaw:L(function(){return ot(o+"-config",e,n)}),initialConfig:n,state:u}}},schema:function(){return n},exhibit:function(n,e){return a(n).bind(function(t){return Nn(r,"exhibit").map(function(n){return n(e,t.config,t.state)})}).getOr(Zo({}))},name:function(){return o},handlers:function(n){return a(n).map(function(n){return Y("events",function(n,t){return{}})(r)(n.config,n.state)}).getOr({})}});return f},uc=qn([ct("fields"),ct("name"),St("active",{}),St("apis",{}),St("state",Zi),St("extra",{})]),ac=qn([ct("branchKey"),ct("branches"),ct("name"),St("active",{}),St("apis",{}),St("state",Zi),St("extra",{})]),cc=nn(undefined),sc=/* */Object.freeze({events:function(t){return co([lo(li(),function(r,i){var u=t.channels,n=function(n,t){return t.universal()?n:C(n,function(n){return vn(t.channels(),n)})}(wn(u),i);bn(n,function(n){var t=u[n],e=t.schema,o=ot("channel["+n+"] data\nReceiver: "+Go(r.element()),e,i.data());t.onReceive(r,o)})})])}}),fc=[st("channels",nt(an.value,qn([Ju("onReceive"),St("schema",de())])))],lc=ya({fields:fc,name:"receiving",active:sc}),dc=/* */Object.freeze({exhibit:function(n,t){return Zo({classes:[],styles:t.useFixed()?{}:{position:"relative"}})}}),mc=["valignCentre","alignLeft","alignRight","alignCentre","top","bottom","left","right"],gc=So(["x","y","width","height","maxHeight","maxWidth","direction","classes","label","candidateYforTest"],[]),pc=yo("position","left","top","right","bottom"),hc=Tn([{none:[]},{relative:["x","y","width","height"]},{fixed:["x","y","width","height"]}]),vc=function(n,t,e){var o=Iu(t,e);return n.fold(nn(o),nn(o),function(){var n=pu();return o.translate(-n.left(),-n.top())})},bc=hc.relative,yc=hc.fixed,xc=function(n){return"rtl"===wr(n,"direction")?"rtl":"ltr"},wc=[ct("hotspot"),ht("bubble"),St("overrides",{}),_a(),Qu("placement",function(n,t,e){var o=t.hotspot,r=Ba(e,o.element()),i=Ma(n.element(),t,da(),ma());return on.some(Da({anchorBox:r,bubble:t.bubble.getOr(Ea()),overrides:t.overrides,layouts:i,placer:on.none()}))})],Sc=[ct("x"),ct("y"),St("height",0),St("width",0),St("bubble",Ea()),St("overrides",{}),_a(),Qu("placement",function(n,t,e){var o=vc(e,t.x,t.y),r=yu(o.left(),o.top(),t.width,t.height),i=Ma(n.element(),t,[ua,aa,ca,sa,rc,oc,fa,la],[aa,ua,sa,ca,rc,oc,fa,la]);return on.some(Da({anchorBox:r,bubble:t.bubble,overrides:t.overrides,layouts:i,placer:on.none()}))})],Cc={create:yo("start","soffset","finish","foffset")},kc=Tn([{before:["element"]},{on:["element","offset"]},{after:["element"]}]),Oc=(kc.before,kc.on,kc.after,function(n){return n.fold(l,l,l)}),Ec=Tn([{domRange:["rng"]},{relative:["startSitu","finishSitu"]},{exact:["start","soffset","finish","foffset"]}]),Tc={domRange:Ec.domRange,relative:Ec.relative,exact:Ec.exact,exactFromRange:function(n){return Ec.exact(n.start(),n.soffset(),n.finish(),n.foffset())},getWin:function(n){var t=function(n){return n.match({domRange:function(n){return we.fromDom(n.startContainer)},relative:function(n,t){return Oc(n)},exact:function(n,t,e,o){return n}})}(n);return Oo(t)},range:Cc.create},Bc=Tn([{ltr:["start","soffset","finish","foffset"]},{rtl:["start","soffset","finish","foffset"]}]);function Dc(n){return rf.get(n)}function Ac(n){return rf.getOption(n)}function _c(e,o,n,t,r){function i(n){var t=e.dom().createRange();return t.setStart(o.dom(),n),t.collapse(!0),t}var u=Dc(o).length,a=function(n,t,e,o,r){if(0===r)return 0;if(t===o)return r-1;for(var i=o,u=1;u<r;u++){var a=n(u),c=Math.abs(t-a.left);if(e<=a.bottom){if(e<a.top||i<c)return u-1;i=c}}return 0}(function(n){return i(n).getBoundingClientRect()},n,t,r.right,u);return i(a)}function Mc(n){return function(n){return Ac(n).filter(function(n){return 0!==n.trim().length||-1<n.indexOf("\xa0")}).isSome()}(n)||vn(af,Ke(n))}function Fc(n){return no(n,Mc)}function Ic(n){return cf(n,Mc)}function Rc(n,t){return t-n.left<n.right-t}function Vc(n,t,e){var o=n.dom().createRange();return o.selectNode(t.dom()),o.collapse(e),o}function Nc(t,n,e){var o=t.dom().createRange();o.selectNode(n.dom());var r=o.getBoundingClientRect(),i=Rc(r,e);return(!0===i?Fc:Ic)(n).map(function(n){return Vc(t,n,i)})}function Hc(n,t,e){var o=t.dom().getBoundingClientRect(),r=Rc(o,e);return on.some(Vc(n,t,r))}function Pc(n,t,e,o){var r=n.dom().createRange();r.selectNode(t.dom());var i=r.getBoundingClientRect();return function(n,t,e,o){var r=n.dom().createRange();r.selectNode(t.dom());var i=r.getBoundingClientRect(),u=Math.max(i.left,Math.min(i.right,e)),a=Math.max(i.top,Math.min(i.bottom,o));return uf(n,t,u,a)}(n,t,Math.max(i.left,Math.min(i.right,e)),Math.max(i.top,Math.min(i.bottom,o)))}function zc(n,t){return Lt(t,n)}function Lc(n,t,e,o){var r=function(n,t,e,o){var r=Co(n).dom().createRange();return r.setStart(n.dom(),t),r.setEnd(e.dom(),o),r}(n,t,e,o),i=jt(n,e)&&t===o;return r.collapsed&&!i}function jc(n){var t=we.fromDom(n.anchorNode),e=we.fromDom(n.focusNode);return Lc(t,n.anchorOffset,e,n.focusOffset)?on.some(Cc.create(t,n.anchorOffset,e,n.focusOffset)):function(n){if(0<n.rangeCount){var t=n.getRangeAt(0),e=n.getRangeAt(n.rangeCount-1);return on.some(Cc.create(we.fromDom(t.startContainer),t.startOffset,we.fromDom(e.endContainer),e.endOffset))}return on.none()}(n)}function Uc(n,t){return function(n){var t=n.getClientRects(),e=0<t.length?t[0]:n.getBoundingClientRect();return 0<e.width||0<e.height?on.some(e).map(Ra):on.none()}(function(i,n){return Na(i,n).match({ltr:function(n,t,e,o){var r=i.document.createRange();return r.setStart(n.dom(),t),r.setEnd(e.dom(),o),r},rtl:function(n,t,e,o){var r=i.document.createRange();return r.setStart(e.dom(),o),r.setEnd(n.dom(),t),r}})}(n,t))}function Wc(n){return n.fold(function(n){return n},function(n,t,e){return n.translate(-t,-e)})}function Gc(n){return n.fold(function(n){return n},function(n,t,e){return n})}function Xc(n){return O(n,function(n,t){return n.translate(t.left(),t.top())},Iu(0,0))}function Yc(n){var t=S(n,Gc);return Xc(t)}function qc(n,t,e){var o=Co(n.element()),r=pu(o),i=function(o,n,t){var e=Oo(t.root).dom();return on.from(e.frameElement).map(we.fromDom).filter(function(n){var t=Co(n),e=Co(o.element());return jt(t,e)}).map(du)}(n,0,e).getOr(r);return df(i,r.left(),r.top())}function Kc(n,t){return Pr(n)?pf(n,t):function(n,t){var e=Bo(n);if(0===e.length)return sf(n,t);if(t<e.length)return sf(e[t],0);var o=e[e.length-1],r=Pr(o)?Dc(o).length:Bo(o).length;return sf(o,r)}(n,t)}function Jc(n,t){return t.getSelection.getOrThunk(function(){return function(){return function(n){return on.from(n.getSelection()).filter(function(n){return 0<n.rangeCount}).bind(jc)}(n)}})().map(function(n){var t=Kc(n.start(),n.soffset()),e=Kc(n.finish(),n.foffset());return Tc.range(t.element(),t.offset(),e.element(),e.offset())})}function $c(n){return n.x()+n.width()}function Qc(n,t){return n.x()-t.width()}function Zc(n,t){return n.y()-t.height()+n.height()}function ns(n){return n.y()}function ts(n,t,e){return Ya($c(n),ns(n),e.southeast(),Ka(),"link-layout-se")}function es(n,t,e){return Ya(Qc(n,t),ns(n),e.southwest(),Ja(),"link-layout-sw")}function os(n,t,e){return Ya($c(n),Zc(n,t),e.northeast(),$a(),"link-layout-ne")}function rs(n,t,e){return Ya(Qc(n,t),Zc(n,t),e.northwest(),Qa(),"link-layout-nw")}function is(n,t,e,o){var r=n+t;return o<r?e:r<e?o:r}function us(n,t,e){return n<=t?t:e<=n?e:n}function as(n,t,e,o){var r=n.x(),i=n.y(),u=n.bubble().offset().left(),a=n.bubble().offset().top(),c=o.y(),s=o.bottom(),f=o.x(),l=o.right(),d=i+a,m=function(n,t,e,o,r){var i=r.x(),u=r.y(),a=r.width(),c=r.height(),s=i<=n,f=u<=t,l=s&&f,d=n+e<=i+a&&t+o<=u+c,m=Math.abs(Math.min(e,s?i+a-n:i-(n+e))),g=Math.abs(Math.min(o,f?u+c-t:u-(t+o)));return{originInBounds:l,sizeInBounds:d,limitX:us(n,r.x(),r.right()),limitY:us(t,r.y(),r.bottom()),deltaW:m,deltaH:g}}(r+u,d,t,e,o),g=m.originInBounds,p=m.sizeInBounds,h=m.limitX,v=m.limitY,b=m.deltaW,y=m.deltaH,x=nn(v+y-c),w=nn(s-v),S=function(n,t,e,o){return n.fold(t,t,o,o,t,o,e,e)}(n.direction(),w,w,x),C=nn(h+b-f),k=nn(l-h),O=function(n,t,e,o){return n.fold(t,o,t,o,e,e,t,o)}(n.direction(),k,k,C),E=gc({x:h,y:v,width:b,height:y,maxHeight:S,maxWidth:O,direction:n.direction(),classes:{on:n.bubble().classesOn(),off:n.bubble().classesOff()},label:n.label(),candidateYforTest:d});return g&&p?wf.fit(E):wf.nofit(E,b,y)}function cs(n,t,e,o){kr(t,"max-height"),kr(t,"max-width");var r=function(n){return{width:nn(gu(n)),height:nn(fu(n))}}(t);return function(n,e,u,a,c){function o(n,o,r,i){var t=n(e,u,a);return as(t,s,f,c).fold(wf.fit,function(n,t,e){return i<e||r<t?wf.nofit(n,t,e):wf.nofit(o,r,i)})}var s=u.width(),f=u.height();return O(n,function(n,t){var e=d(o,t);return n.fold(wf.fit,e)},wf.nofit(gc({x:e.x(),y:e.y(),width:u.width(),height:u.height(),maxHeight:u.height(),maxWidth:u.width(),direction:Ka(),classes:{on:[],off:[]},label:"none",candidateYforTest:e.y()}),-1,-1)).fold(l,l)}(o.preference(),n,r,e,o.bounds())}function ss(n,t,e){function o(n){return n+"px"}var r=function(n,r){return n.fold(function(){return pc("absolute",on.some(r.x()),on.some(r.y()),on.none(),on.none())},function(n,t,e,o){return Ta("absolute",r,n,t,e,o)},function(n,t,e,o){return Ta("fixed",r,n,t,e,o)})}(e.origin(),t);!function(n,t){var e=n.dom();Cn(t,function(n,t){n.fold(function(){br(e,t)},function(n){vr(e,t,n)})})}(n,{position:on.some(r.position()),left:r.left().map(o),top:r.top().map(o),right:r.right().map(o),bottom:r.bottom().map(o)})}function fs(n,t){!function(n,t){var e=Mu.max(n,t,["margin-top","border-top-width","padding-top","padding-bottom","border-bottom-width","margin-bottom"]);yr(n,"max-height",e+"px")}(n,Math.floor(t))}function ls(n,t,e){return n[t]===undefined?e:n[t]}function ds(n,t,e,o,r,i){var u=ls(i,"maxHeightFunction",Sf()),a=ls(i,"maxWidthFunction",Z),c=n.anchorBox(),s=n.origin(),f=kf({bounds:function(o,n){return n.fold(function(){return o.fold(Su,Su,yu)},function(e){return o.fold(e,e,function(){var n=e(),t=vc(o,n.x(),n.y());return yu(t.left(),t.top(),n.width(),n.height())})})}(s,r),origin:s,preference:o,maxHeightFunction:u,maxWidthFunction:a});Of(c,t,e,f)}function ms(n,t,e,o,r){var i=function(n,t){return xf(n,t)}(e.anchorBox,t);ds(i,r.element(),e.bubble,e.layouts,o,e.overrides)}function gs(n,t){Hi(n.element(),t.element())}function ps(t,n){var e=t.components();!function(n){bn(n.components(),function(n){return Pi(n.element())}),Io(n.element()),n.syncComponents()}(t);var o=_(e,n);bn(o,function(n){_f(n),t.getSystem().removeFromWorld(n)}),bn(n,function(n){n.getSystem().isConnected()?gs(t,n):(t.getSystem().addToWorld(n),gs(t,n),$e(t.element())&&Mf(n)),t.syncComponents()})}function hs(n,t){Ff(n,t,Hi)}function vs(n){_f(n),Pi(n.element()),n.getSystem().removeFromWorld(n)}function bs(t){var n=Eo(t.element()).bind(function(n){return t.getSystem().getByDom(n).toOption()});vs(t),n.each(function(n){n.syncComponents()})}function ys(n){var t=n.components();bn(t,vs),Io(n.element()),n.syncComponents()}function xs(n,t){If(n,t,Hi)}function ws(t){var n=Bo(t.element());bn(n,function(n){t.getByDom(n).each(_f)}),Pi(t.element())}function Ss(t,n,e,o){e.get().each(function(n){ys(t)});var r=n.getAttachPoint(t);hs(r,t);var i=t.getSystem().build(o);return hs(t,i),e.set(i),i}function Cs(n,t,e,o){var r=Ss(n,t,e,o);return t.onOpen(n,r),r}function ks(t,e,o){o.get().each(function(n){ys(t),bs(t),e.onClose(t,n),o.clear()})}function Os(n,t,e){return e.isOpen()}function Es(n){var t,e=ot("Dismissal",Wf,n);return(t={})[Lf()]={schema:qn([ct("target")]),onReceive:function(t,n){zf.isOpen(t)&&(zf.isPartOf(t,n.target)||e.isExtraPart(t,n.target)||e.fireEventInstead.fold(function(){return zf.close(t)},function(n){return oo(t,n.event)}))}},t}function Ts(n){var t,e=ot("Reposition",Gf,n);return(t={})[jf()]={onReceive:function(t){zf.isOpen(t)&&e.fireEventInstead.fold(function(){return e.doReposition(t)},function(n){return oo(t,n.event)})}},t}function Bs(n,t,e){t.store.manager.onLoad(n,t,e)}function Ds(n,t,e){t.store.manager.onUnload(n,t,e)}function As(){var n=ye(null);return nu({set:n.set,get:n.get,isNotSet:function(){return null===n.get()},clear:function(){n.set(null)},readState:function(){return{mode:"memory",value:n.get()}}})}function _s(){var i=ye({}),u=ye({});return nu({readState:function(){return{mode:"dataset",dataByValue:i.get(),dataByText:u.get()}},lookup:function(n){return Nn(i.get(),n).orThunk(function(){return Nn(u.get(),n)})},update:function(n){var t=i.get(),e=u.get(),o={},r={};bn(n,function(t){o[t.value]=t,Nn(t,"meta").each(function(n){Nn(n,"text").each(function(n){r[n]=t})})}),i.set(N(N({},t),o)),u.set(N(N({},e),r))},clear:function(){i.set({}),u.set({})}})}function Ms(n,t,e,o){var r=t.store;e.update([o]),r.setValue(n,o),t.onSetValue(n,o)}function Fs(t,n){return Dt(t,{},S(n,function(n){return function(t,e){return ce(t,t,Fn(),Yn(function(n){return qt("The field: "+t+" is forbidden. "+e)}))}(n.name(),"Cannot configure "+n.name()+" for "+t)}).concat([At("dump",l)]))}function Is(n){return n.dump}function Rs(n,t){return N(N({},n.dump),ba(t))}function Vs(n,t,e,o){return e.uiType===el?function(n,t,e,o){return n.exists(function(n){return n!==e.owner})?ol.single(!0,nn(e)):Nn(o,e.name).fold(function(){throw new Error("Unknown placeholder component: "+e.name+"\nKnown: ["+wn(o)+"]\nNamespace: "+n.getOr("none")+"\nSpec: "+JSON.stringify(e,null,2))},function(n){return n.replace()})}(n,0,e,o):ol.single(!1,nn(e))}function Ns(t,e,n,o){var r=P(o,function(n,t){return function(n,t){var e=!1;return{name:nn(n),required:function(){return t.fold(function(n,t){return n},function(n,t){return n})},used:function(){return e},replace:function(){if(!0===e)throw new Error("Trying to use the same placeholder more than once: "+n);return e=!0,t}}}(t,n)}),i=function(t,e,n,o){return B(n,function(n){return rl(t,e,n,o)})}(t,e,n,r);return Cn(r,function(n){if(!1===n.used()&&n.required())throw new Error("Placeholder: "+n.name()+" was not found in components list\nNamespace: "+t.getOr("none")+"\nComponents: "+JSON.stringify(e.components,null,2))}),i}function Hs(n){return n.fold(on.some,on.none,on.some,on.some)}function Ps(n){function t(n){return n.name}return n.fold(t,t,t,t)}function zs(e,o){return function(n){var t=ot("Converting part type",o,n);return e(t)}}function Ls(n,t,e,o){return Dn(t.defaults(n,e,o),e,{uid:n.partUids[t.name]},t.overrides(n,e,o))}function js(r,n){var t={};return bn(n,function(n){Hs(n).each(function(e){var o=El(r,e.pname);t[e.name]=function(n){var t=ot("Part: "+e.name+" in "+r,re(e.schema),n);return N(N({},o),{config:n,validated:t})}})}),t}function Us(n,t,e){return{uiType:al(),owner:n,name:t,config:e,validated:{}}}function Ws(n){return B(n,function(n){return n.fold(on.none,on.some,on.none,on.none).map(function(n){return mt(n.name,n.schema.concat([Zu(kl())]))}).toArray()})}function Gs(n){return S(n,Ps)}function Xs(n,t,e){return function(n,e,t){var i={},o={};return bn(t,function(n){n.fold(function(o){i[o.pname]=il(!0,function(n,t,e){return o.factory.sketch(Ls(n,o,t,e))})},function(n){var t=e.parts[n.name];o[n.name]=nn(n.factory.sketch(Ls(e,n,t[kl()]),t))},function(o){i[o.pname]=il(!1,function(n,t,e){return o.factory.sketch(Ls(n,o,t,e))})},function(r){i[r.pname]=ul(!0,function(t,n,e){var o=t[r.name];return S(o,function(n){return r.factory.sketch(Dn(r.defaults(t,n,e),n,r.overrides(t,n)))})})})}),{internals:nn(i),externals:nn(o)}}(0,t,e)}function Ys(n,t,e){return Ns(on.some(n),t,t.components,e)}function qs(n,t,e){var o=t.partUids[e];return n.getSystem().getByUid(o).toOption()}function Ks(n,t,e){return qs(n,t,e).getOrDie("Could not find part: "+e)}function Js(n,t,e){var o={},r=t.partUids,i=n.getSystem();return bn(e,function(n){o[n]=nn(i.getByUid(r[n]))}),o}function $s(n,t){var e=n.getSystem();return P(t.partUids,function(n,t){return nn(e.getByUid(n))})}function Qs(n){return wn(n.partUids)}function Zs(n,t,e){var o={},r=t.partUids,i=n.getSystem();return bn(e,function(n){o[n]=nn(i.getByUid(r[n]).getOrDie())}),o}function nf(t,n){var e=Gs(n);return K(S(e,function(n){return{key:n,value:t+"-"+n}}))}function tf(t){return ce("partUids","partUids",Rn(function(n){return nf(n.uid,t)}),de())}function ef(n,t,e,o,r){var i=function(n,t){return(0<n.length?[mt("parts",n)]:[]).concat([ct("uid"),St("dom",{}),St("components",[]),Zu("originalSpec"),St("debug.sketcher",{})]).concat(t)}(o,r);return ot(n+" [SpecSchema]",qn(i.concat(t)),e)}function of(n,t,e,o,r){var i=Bl(r),u=Ws(e),a=tf(e),c=ef(n,t,i,u,[a]),s=Xs(0,c,e);return o(c,Ys(n,c,s.internals()),i,s.externals())}var rf=function rI(e,o){var t=function(n){return e(n)?on.from(n.dom().nodeValue):on.none()};return{get:function(n){if(!e(n))throw new Error("Can only get "+o+" value of a "+o+" node");return t(n).getOr("")},getOption:t,set:function(n,t){if(!e(n))throw new Error("Can only set raw "+o+" value of a "+o+" node");n.dom().nodeValue=t}}}(Pr,"text"),uf=function(n,t,e,o){return Pr(t)?function(t,e,o,r){var n=t.dom().createRange();n.selectNode(e.dom());var i=n.getClientRects();return Du(i,function(n){return Ha(n,o,r)?on.some(n):on.none()}).map(function(n){return _c(t,e,o,r,n)})}(n,t,e,o):function(t,n,e,o){var r=t.dom().createRange(),i=Bo(n);return Du(i,function(n){return r.selectNode(n.dom()),Ha(r.getBoundingClientRect(),e,o)?uf(t,n,e,o):on.none()})}(n,t,e,o)},af=["img","br"],cf=function(n,i){var u=function(n){for(var t=Bo(n),e=t.length-1;0<=e;e--){var o=t[e];if(i(o))return on.some(o);var r=u(o);if(r.isSome())return r}return on.none()};return u(n)},sf=(document.caretPositionFromPoint||document.caretRangeFromPoint,yo("element","offset")),ff=Tn([{screen:["point"]},{absolute:["point","scrollLeft","scrollTop"]}]),lf=ff.screen,df=ff.absolute,mf=function(n,t,e,o){var r=n,i=t,u=e,a=o;n<0&&(r=0,u=e+n),t<0&&(i=0,a=o+t);var c=lf(Iu(r,i));return on.some(Pu(c,u,a))},gf=function(n,i,u,a,c){return n.map(function(n){var t=[i,n.point()],e=function(n,t,e,o){return n.fold(t,e,o)}(a,function(){return Yc(t)},function(){return Yc(t)},function(){return function(n){var t=S(n,Wc);return Xc(t)}(t)}),o=zu(e.left(),e.top(),n.width(),n.height()),r=Ma(c,u,u.showAbove?[ca,sa,ua,aa,oc,rc]:[ua,aa,ca,sa,rc,rc],u.showAbove?[sa,ca,aa,ua,oc,rc]:[aa,ua,sa,ca,rc,oc]);return Da({anchorBox:o,bubble:u.bubble.getOr(Ea()),overrides:u.overrides,layouts:r,placer:on.none()})})},pf=yo("element","offset"),hf=[ht("getSelection"),ct("root"),ht("bubble"),_a(),St("overrides",{}),St("showAbove",!1),Qu("placement",function(n,t,e){var o=Oo(t.root).dom(),r=qc(n,0,t),i=Jc(o,t).bind(function(n){return Uc(o,Tc.exactFromRange(n)).orThunk(function(){var t=we.fromText("\ufeff");return Ao(n.start(),t),Uc(o,Tc.exact(t,0,t,1)).map(function(n){return Pi(t),n})}).bind(function(n){return mf(n.left(),n.top(),n.width(),n.height())})}),u=Jc(o,t).bind(function(n){return Hr(n.start())?on.some(n.start()):Eo(n.start())}).getOr(n.element());return gf(i,r,t,e,u)})],vf=[ct("node"),ct("root"),ht("bubble"),_a(),St("overrides",{}),St("showAbove",!1),Qu("placement",function(r,i,u){var a=qc(r,0,i);return i.node.bind(function(n){var t=n.dom().getBoundingClientRect(),e=mf(t.left,t.top,t.width,t.height),o=i.node.getOr(r.element());return gf(e,a,i,u,o)})})],bf=[ct("item"),_a(),St("overrides",{}),Qu("placement",function(n,t,e){var o=Ba(e,t.item.element()),r=Ma(n.element(),t,[ts,es,os,rs],[es,ts,rs,os]);return on.some(Da({anchorBox:o,bubble:Ea(),overrides:t.overrides,layouts:r,placer:on.none()}))})],yf=it("anchor",{selection:hf,node:vf,hotspot:wc,submenu:bf,makeshift:Sc}),xf=yo("anchorBox","origin"),wf=Tn([{fit:["reposition"]},{nofit:["reposition","deltaW","deltaH"]}]),Sf=nn(function(n,t){fs(n,t),xr(n,{"overflow-x":"hidden","overflow-y":"auto"})}),Cf=nn(function(n,t){fs(n,t)}),kf=So(["bounds","origin","preference","maxHeightFunction","maxWidthFunction"],[]),Of=function(n,t,e,o){var r=cs(n,t,e,o);ss(t,r,o),function(n,t){var e=t.classes();pr(n,e.off),gr(n,e.on)}(t,r),function(n,t,e){e.maxHeightFunction()(n,t.maxHeight())}(t,r,o),function(n,t,e){e.maxWidthFunction()(n,t.maxWidth())}(t,r,o)},Ef=function(n,t,e,o,r,i){var u=i.map(xu);return Tf(n,t,e,o,r,u)},Tf=function(r,i,n,t,u,a){var c=ot("positioning anchor.info",yf,t);ka(function(){yr(u.element(),"position","fixed");var n=Sr(u.element(),"visibility");yr(u.element(),"visibility","hidden");var t=i.useFixed()?function(){var n=v.document.documentElement;return yc(0,0,n.clientWidth,n.clientHeight)}():function(n){var t=du(n.element()),e=n.element().dom().getBoundingClientRect();return bc(t.left(),t.top(),e.width,e.height)}(r),e=c.placement,o=a.map(nn).or(i.getBounds);e(r,c,t).each(function(n){n.placer.getOr(ms)(r,t,n,o,u)}),n.fold(function(){kr(u.element(),"visibility")},function(n){yr(u.element(),"visibility",n)}),Sr(u.element(),"left").isNone()&&Sr(u.element(),"top").isNone()&&Sr(u.element(),"right").isNone()&&Sr(u.element(),"bottom").isNone()&&Sr(u.element(),"position").is("fixed")&&kr(u.element(),"position")},u.element())},Bf=/* */Object.freeze({position:function(n,t,e,o,r){Ef(n,t,e,o,r,on.none())},positionWithin:Ef,positionWithinBounds:Tf,getMode:function(n,t,e){return t.useFixed()?"fixed":"absolute"}}),Df=[St("useFixed",u),ht("getBounds")],Af=ya({fields:Df,name:"positioning",active:dc,apis:Bf}),_f=function(n){oo(n,ki());var t=n.components();bn(t,_f)},Mf=function(n){var t=n.components();bn(t,Mf),oo(n,Ci())},Ff=function(n,t,e){n.getSystem().addToWorld(t),e(n.element(),t.element()),$e(n.element())&&Mf(t),n.syncComponents()},If=function(n,t,e){e(n,t.element());var o=Bo(t.element());bn(o,function(n){t.getByDom(n).each(Mf)})},Rf=function(n,t,e){var o=t.getAttachPoint(n);yr(n.element(),"position",Af.getMode(o)),function(t,n,e,o){Sr(t.element(),n).fold(function(){jo(t.element(),e)},function(n){Po(t.element(),e,n)}),yr(t.element(),n,o)}(n,"visibility",t.cloakVisibilityAttr,"hidden")},Vf=function(n,t,e){!function(t){return x(["top","left","right","bottom"],function(n){return Sr(t,n).isSome()})}(n.element())&&kr(n.element(),"position"),function(n,t,e){if(Lo(n.element(),e)){var o=zo(n.element(),e);yr(n.element(),t,o)}else kr(n.element(),t)}(n,"visibility",t.cloakVisibilityAttr)},Nf=/* */Object.freeze({cloak:Rf,decloak:Vf,open:Cs,openWhileCloaked:function(n,t,e,o,r){Rf(n,t),Cs(n,t,e,o),r(),Vf(n,t)},close:ks,isOpen:Os,isPartOf:function(t,e,n,o){return Os(0,0,n)&&n.get().exists(function(n){return e.isPartOf(t,n,o)})},getState:function(n,t,e){return e.get()},setContent:function(n,t,e,o){return e.get().map(function(){return Ss(n,t,e,o)})}}),Hf=/* */Object.freeze({events:function(e,o){return co([lo(hi(),function(n,t){ks(n,e,o)})])}}),Pf=[qu("onOpen"),qu("onClose"),ct("isPartOf"),ct("getAttachPoint"),St("cloakVisibilityAttr","data-precloak-visibility")],zf=ya({fields:Pf,name:"sandboxing",active:Hf,apis:Nf,state:/* */Object.freeze({init:function(){var t=ye(on.none()),n=nn("not-implemented");return nu({readState:n,isOpen:function(){return t.get().isSome()},clear:function(){t.set(on.none())},set:function(n){t.set(on.some(n))},get:function(n){return t.get()}})}})}),Lf=nn("dismiss.popups"),jf=nn("reposition.popups"),Uf=nn("mouse.released"),Wf=qn([St("isExtraPart",nn(!1)),wt("fireEventInstead",[St("event",Oi())])]),Gf=qn([St("isExtraPart",nn(!1)),wt("fireEventInstead",[St("event",Ei())]),dt("doReposition")]),Xf=/* */Object.freeze({onLoad:Bs,onUnload:Ds,setValue:function(n,t,e,o){t.store.manager.setValue(n,t,e,o)},getValue:function(n,t,e){return t.store.manager.getValue(n,t,e)},getState:function(n,t,e){return e}}),Yf=/* */Object.freeze({events:function(e,o){var n=e.resetOnDom?[Ii(function(n,t){Bs(n,e,o)}),Ri(function(n,t){Ds(n,e,o)})]:[ga(e,o,Bs)];return co(n)}}),qf=/* */Object.freeze({memory:As,dataset:_s,manual:function(){return nu({readState:function(){}})},init:function(n){return n.store.manager.state(n)}}),Kf=[ht("initialValue"),ct("getFallbackEntry"),ct("getDataKey"),ct("setValue"),Qu("manager",{setValue:Ms,getValue:function(n,t,e){var o=t.store,r=o.getDataKey(n);return e.lookup(r).fold(function(){return o.getFallbackEntry(r)},function(n){return n})},onLoad:function(t,e,o){e.store.initialValue.each(function(n){Ms(t,e,o,n)})},onUnload:function(n,t,e){e.clear()},state:_s})],Jf=[ct("getValue"),St("setValue",Z),ht("initialValue"),Qu("manager",{setValue:function(n,t,e,o){t.store.setValue(n,o),t.onSetValue(n,o)},getValue:function(n,t,e){return t.store.getValue(n)},onLoad:function(t,e,n){e.store.initialValue.each(function(n){e.store.setValue(t,n)})},onUnload:Z,state:Zi.init})],$f=[ht("initialValue"),Qu("manager",{setValue:function(n,t,e,o){e.set(o),t.onSetValue(n,o)},getValue:function(n,t,e){return e.get()},onLoad:function(n,t,e){t.store.initialValue.each(function(n){e.isNotSet()&&e.set(n)})},onUnload:function(n,t,e){e.clear()},state:As})],Qf=[Ct("store",{mode:"memory"},it("mode",{memory:$f,manual:Jf,dataset:Kf})),qu("onSetValue"),St("resetOnDom",!1)],Zf=ya({fields:Qf,name:"representing",active:Yf,apis:Xf,extra:{setValueFrom:function(n,t){var e=Zf.getValue(t);Zf.setValue(n,e)}},state:qf}),nl=Fs,tl=Rs,el="placeholder",ol=Tn([{single:["required","valueThunk"]},{multiple:["required","valueThunks"]}]),rl=function(i,u,a,c){return Vs(i,0,a,c).fold(function(n,t){var e=t(u,a.config,a.validated),o=Nn(e,"components").getOr([]),r=B(o,function(n){return rl(i,u,n,c)});return[N(N({},e),{components:r})]},function(n,t){var e=t(u,a.config,a.validated);return a.validated.preprocess.getOr(l)(e)})},il=ol.single,ul=ol.multiple,al=nn(el),cl=Tn([{required:["data"]},{external:["data"]},{optional:["data"]},{group:["data"]}]),sl=St("factory",{sketch:l}),fl=St("schema",[]),ll=ct("name"),dl=ce("pname","pname",In(function(n){return"<alloy."+Xo(n.name)+">"}),de()),ml=At("schema",function(){return[ht("preprocess")]}),gl=St("defaults",nn({})),pl=St("overrides",nn({})),hl=re([sl,fl,ll,dl,gl,pl]),vl=re([sl,fl,ll,gl,pl]),bl=re([sl,fl,ll,dl,gl,pl]),yl=re([sl,ml,ll,ct("unit"),dl,gl,pl]),xl=zs(cl.required,hl),wl=zs(cl.external,vl),Sl=zs(cl.optional,bl),Cl=zs(cl.group,yl),kl=nn("entirety"),Ol=/* */Object.freeze({required:xl,external:wl,optional:Sl,group:Cl,asNamedPart:Hs,name:Ps,asCommon:function(n){return n.fold(l,l,l,l)},original:kl}),El=function(n,t){return{uiType:al(),owner:n,name:t}},Tl=/* */Object.freeze({generate:js,generateOne:Us,schemas:Ws,names:Gs,substitutes:Xs,components:Ys,defaultUids:nf,defaultUidsSchema:tf,getAllParts:$s,getAllPartNames:Qs,getPart:qs,getPartOrDie:Ks,getParts:Js,getPartsOrDie:Zs}),Bl=function(n){return n.hasOwnProperty("uid")?n:N(N({},n),{uid:Yo("uid")})};function Dl(n){var t=ot("Sketcher for "+n.name,Kl,n),e=P(t.apis,$o),o=P(t.extraApis,function(n,t){return Ko(n,t)});return N(N({name:nn(t.name),partFields:nn([]),configFields:nn(t.configFields),sketch:function(n){return function(n,t,e,o){var r=Bl(o);return e(ef(n,t,r,[],[]),r)}(t.name,t.configFields,t.factory,n)}},e),o)}function Al(n){var t=ot("Sketcher for "+n.name,Jl,n),e=js(t.name,t.partFields),o=P(t.apis,$o),r=P(t.extraApis,function(n,t){return Ko(n,t)});return N(N({name:nn(t.name),partFields:nn(t.partFields),configFields:nn(t.configFields),sketch:function(n){return of(t.name,t.configFields,t.partFields,t.factory,n)},parts:nn(e)},o),r)}function _l(n){return"input"===Ke(n)&&"radio"!==zo(n,"type")||"textarea"===Ke(n)}function Ml(e,o,n,r){var t=zc(e.element(),"."+o.highlightClass);bn(t,function(t){x(r,function(n){return n.element()===t})||(dr(t,o.highlightClass),e.getSystem().getByDom(t).each(function(n){o.onDehighlight(e,n),oo(n,Mi())}))})}function Fl(n,t,e,o){Ml(n,t,0,[o]),nd(n,t,e,o)||(fr(o.element(),t.highlightClass),t.onHighlight(n,o),oo(o,_i()))}function Il(e,t,n,o){var r=zc(e.element(),"."+t.itemClass);return T(r,function(n){return mr(n,t.highlightClass)}).bind(function(n){var t=is(n,o,0,r.length-1);return e.getSystem().getByDom(r[t]).toOption()})}function Rl(n,t,e){var o=A(n.slice(0,t)),r=A(n.slice(t+1));return E(o.concat(r),e)}function Vl(n,t,e){var o=A(n.slice(0,t));return E(o,e)}function Nl(n,t,e){var o=n.slice(0,t),r=n.slice(t+1);return E(r.concat(o),e)}function Hl(n,t,e){var o=n.slice(t+1);return E(o,e)}function Pl(e){return function(n){var t=n.raw();return vn(e,t.which)}}function zl(n){return function(t){return D(n,function(n){return n(t)})}}function Ll(n){return!0===n.raw().shiftKey}function jl(n){return!0===n.raw().ctrlKey}function Ul(n,t){return{matches:n,classification:t}}function Wl(n,t,e){t.exists(function(t){return e.exists(function(n){return jt(n,t)})})||ro(n,Ti(),{prevFocus:t,newFocus:e})}function Gl(){function r(n){return Ca(n.element())}return{get:r,set:function(n,t){var e=r(n);n.getSystem().triggerFocus(t,n.element());var o=r(n);Wl(n,e,o)}}}function Xl(){function r(n){return ad.getHighlighted(n).map(function(n){return n.element()})}return{get:r,set:function(t,n){var e=r(t);t.getSystem().getByDom(n).fold(Z,function(n){ad.highlight(t,n)});var o=r(t);Wl(t,e,o)}}}var Yl,ql,Kl=qn([ct("name"),ct("factory"),ct("configFields"),St("apis",{}),St("extraApis",{})]),Jl=qn([ct("name"),ct("factory"),ct("configFields"),ct("partFields"),St("apis",{}),St("extraApis",{})]),$l=/* */Object.freeze({getCurrent:function(n,t,e){return t.find(n)}}),Ql=[ct("find")],Zl=ya({fields:Ql,name:"composing",apis:$l}),nd=function(n,t,e,o){return mr(o.element(),t.highlightClass)},td=function(n,t,e,o){var r=zc(n.element(),"."+t.itemClass);return on.from(r[o]).fold(function(){return an.error("No element found with index "+o)},n.getSystem().getByDom)},ed=function(t,n,e){return ku(t.element(),"."+n.itemClass).bind(function(n){return t.getSystem().getByDom(n).toOption()})},od=function(t,n,e){var o=zc(t.element(),"."+n.itemClass);return(0<o.length?on.some(o[o.length-1]):on.none()).bind(function(n){return t.getSystem().getByDom(n).toOption()})},rd=function(t,n,e){var o=zc(t.element(),"."+n.itemClass);return Bu(S(o,function(n){return t.getSystem().getByDom(n).toOption()}))},id=/* */Object.freeze({dehighlightAll:function(n,t,e){return Ml(n,t,0,[])},dehighlight:function(n,t,e,o){nd(n,t,e,o)&&(dr(o.element(),t.highlightClass),t.onDehighlight(n,o),oo(o,Mi()))},highlight:Fl,highlightFirst:function(t,e,o){ed(t,e).each(function(n){Fl(t,e,o,n)})},highlightLast:function(t,e,o){od(t,e).each(function(n){Fl(t,e,o,n)})},highlightAt:function(t,e,o,n){td(t,e,o,n).fold(function(n){throw new Error(n)},function(n){Fl(t,e,o,n)})},highlightBy:function(t,e,o,n){var r=rd(t,e);E(r,n).each(function(n){Fl(t,e,o,n)})},isHighlighted:nd,getHighlighted:function(t,n,e){return ku(t.element(),"."+n.highlightClass).bind(function(n){return t.getSystem().getByDom(n).toOption()})},getFirst:ed,getLast:od,getPrevious:function(n,t,e){return Il(n,t,0,-1)},getNext:function(n,t,e){return Il(n,t,0,1)},getCandidates:rd}),ud=[ct("highlightClass"),ct("itemClass"),qu("onHighlight"),qu("onDehighlight")],ad=ya({fields:ud,name:"highlighting",apis:id}),cd=b(Ll);(ql=Yl=Yl||{}).OnFocusMode="onFocus",ql.OnEnterOrSpaceMode="onEnterOrSpace",ql.OnApiMode="onApi";function sd(n,t,e,i,u){function a(t,e,n,o,r){return function(n,t){return E(n,function(n){return n.matches(t)}).map(function(n){return n.classification})}(n(t,e,o,r),e.event()).bind(function(n){return n(t,e,o,r)})}var o={schema:function(){return n.concat([St("focusManager",Gl()),Ct("focusInside","onFocus",Zn(function(n){return vn(["onFocus","onEnterOrSpace","onApi"],n)?an.value(n):an.error("Invalid value for focusInside")})),Qu("handler",o),Qu("state",t),Qu("sendFocusIn",u)])},processKey:a,toEvents:function(o,r){var n=o.focusInside!==Yl.OnFocusMode?on.none():u(o).map(function(e){return lo(ci(),function(n,t){e(n,o,r),t.stop()})});return co(n.toArray().concat([lo(ni(),function(n,t){a(n,t,e,o,r).fold(function(){!function(t,e){var n=Pl([32].concat([13]))(e.event());o.focusInside===Yl.OnEnterOrSpaceMode&&n&&Ut(t,e)&&u(o).each(function(n){n(t,o,r),e.stop()})}(n,t)},function(n){t.stop()})}),lo(ti(),function(n,t){a(n,t,i,o,r).each(function(n){t.stop()})})]))}};return o}function fd(n){function i(n,t){var e=n.visibilitySelector.bind(function(n){return Ou(t,n)}).getOr(t);return 0<su(e)}function t(t,e){(function(n,t){var e=zc(n.element(),t.selector),o=C(e,function(n){return i(t,n)});return on.from(o[t.firstTabstop])})(t,e).each(function(n){e.focusManager.set(t,n)})}function u(t,n,e,o,r){return r(n,e,function(n){return function(n,t){return i(n,t)&&n.useTabstopAt(t)}(o,n)}).fold(function(){return o.cyclic?on.some(!0):on.none()},function(n){return o.focusManager.set(t,n),on.some(!0)})}function a(t,n,e,o){var r=zc(t.element(),e.selector);return function(n,t){return t.focusManager.get(n).bind(function(n){return Ou(n,t.selector)})}(t,e).bind(function(n){return T(r,d(jt,n)).bind(function(n){return u(t,r,n,e,o)})})}var e=[ht("onEscape"),ht("onEnter"),St("selector",'[data-alloy-tabstop="true"]:not(:disabled)'),St("firstTabstop",0),St("useTabstopAt",nn(!0)),ht("visibilitySelector")].concat([n]),o=nn([Ul(zl([Ll,Pl([9])]),function(n,t,e,o){var r=e.cyclic?Rl:Vl;return a(n,0,e,r)}),Ul(Pl([9]),function(n,t,e,o){var r=e.cyclic?Nl:Hl;return a(n,0,e,r)}),Ul(Pl([27]),function(t,e,n,o){return n.onEscape.bind(function(n){return n(t,e)})}),Ul(zl([cd,Pl([13])]),function(t,e,n,o){return n.onEnter.bind(function(n){return n(t,e)})})]),r=nn([]);return sd(e,Zi.init,o,r,function(){return on.some(t)})}function ld(n,t,e){return _l(e)&&Pl([32])(t.event())?on.none():function(n,t,e){return uo(n,e,di()),on.some(!0)}(n,0,e)}function dd(n,t){return on.some(!0)}function md(n,t,e){return e.execute(n,t,n.element())}function gd(n){var e=ye(on.none());return nu({readState:function(){return e.get().map(function(n){return{numRows:n.numRows(),numColumns:n.numColumns()}}).getOr({numRows:"?",numColumns:"?"})},setGridSize:function(n,t){e.set(on.some({numRows:nn(n),numColumns:nn(t)}))},getNumRows:function(){return e.get().map(function(n){return n.numRows()})},getNumColumns:function(){return e.get().map(function(n){return n.numColumns()})}})}function pd(i){return function(n,t,e,o){var r=i(n.element());return Em(r,n,t,e,o)}}function hd(n,t){var e=Aa(n,t);return pd(e)}function vd(n,t){var e=Aa(t,n);return pd(e)}function bd(r){return function(n,t,e,o){return Em(r,n,t,e,o)}}function yd(n){return!function(n){return n.offsetWidth<=0&&n.offsetHeight<=0}(n.dom())}function xd(n,t,e){var o=d(jt,t),r=zc(n,e);return function(t,n){return T(t,n).map(function(n){return Am({index:n,candidates:t})})}(C(r,yd),o)}function wd(n,t){return T(n,function(n){return jt(t,n)})}function Sd(e,n,o,t){return t(Math.floor(n/o),n%o).bind(function(n){var t=n.row()*o+n.column();return 0<=t&&t<e.length?on.some(e[t]):on.none()})}function Cd(r,n,i,u,a){return Sd(r,n,u,function(n,t){var e=n===i-1?r.length-n*u:u,o=is(t,a,0,e-1);return on.some({row:nn(n),column:nn(o)})})}function kd(i,n,u,a,c){return Sd(i,n,a,function(n,t){var e=is(n,c,0,u-1),o=e===u-1?i.length-e*a:a,r=us(t,0,o-1);return on.some({row:nn(e),column:nn(r)})})}function Od(t,e,n){ku(t.element(),e.selector).each(function(n){e.focusManager.set(t,n)})}function Ed(r){return function(n,t,e,o){return xd(n,t,e.selector).bind(function(n){return r(n.candidates(),n.index(),o.getNumRows().getOr(e.initSize.numRows),o.getNumColumns().getOr(e.initSize.numColumns))})}}function Td(n,t,e,o){return e.captureTab?on.some(!0):on.none()}function Bd(n,t,e,r){var i=function(n,t,e){var o=is(t,r,0,e.length-1);return o===n?on.none():function(n){return"button"===Ke(n)&&"disabled"===zo(n,"disabled")}(e[o])?i(n,o,e):on.from(e[o])};return xd(n,e,t).bind(function(n){var t=n.index(),e=n.candidates();return i(t,t,e)})}function Dd(t,e,o){return function(n,t){return t.focusManager.get(n).bind(function(n){return Ou(n,t.selector)})}(t,o).bind(function(n){return o.execute(t,e,n)})}function Ad(t,e){e.getInitial(t).orThunk(function(){return ku(t.element(),e.selector)}).each(function(n){e.focusManager.set(t,n)})}function _d(n,t,e){return Bd(n,e.selector,t,-1)}function Md(n,t,e){return Bd(n,e.selector,t,1)}function Fd(o){return function(n,t,e){return o(n,t,e).bind(function(){return e.executeOnMove?Dd(n,t,e):on.some(!0)})}}function Id(n,t,e,o){return e.onEscape(n,t)}function Rd(n,t,e){return on.from(n[t]).bind(function(n){return on.from(n[e]).map(function(n){return jm({rowIndex:t,columnIndex:e,cell:n})})})}function Vd(n,t,e,o){var r=n[t].length,i=is(e,o,0,r-1);return Rd(n,t,i)}function Nd(n,t,e,o){var r=is(e,o,0,n.length-1),i=n[r].length,u=us(t,0,i-1);return Rd(n,r,u)}function Hd(n,t,e,o){var r=n[t].length,i=us(e+o,0,r-1);return Rd(n,t,i)}function Pd(n,t,e,o){var r=us(e+o,0,n.length-1),i=n[r].length,u=us(t,0,i-1);return Rd(n,r,u)}function zd(t,e){e.previousSelector(t).orThunk(function(){var n=e.selectors;return ku(t.element(),n.cell)}).each(function(n){e.focusManager.set(t,n)})}function Ld(n,t){return function(r,e,i){var u=i.cycles?n:t;return Ou(e,i.selectors.row).bind(function(n){var t=zc(n,i.selectors.cell);return wd(t,e).bind(function(e){var o=zc(r,i.selectors.row);return wd(o,n).bind(function(n){var t=function(n,t){return S(n,function(n){return zc(n,t.selectors.cell)})}(o,i);return u(t,n,e).map(function(n){return n.cell()})})})})}}function jd(t,e,o){return o.focusManager.get(t).bind(function(n){return o.execute(t,e,n)})}function Ud(t,e){ku(t.element(),e.selector).each(function(n){e.focusManager.set(t,n)})}function Wd(n,t,e){return Bd(n,e.selector,t,-1)}function Gd(n,t,e){return Bd(n,e.selector,t,1)}function Xd(n,t,e,o){var r=n.getSystem().build(o);Ff(n,r,e)}function Yd(n,t,e,o){var r=dg(n);E(r,function(n){return jt(o.element(),n.element())}).each(bs)}function qd(t,n,e,o,r){var i=dg(t);return on.from(i[o]).map(function(n){return Yd(t,0,0,n),r.each(function(n){Xd(t,0,function(n,t){!function(n,t,e){Do(n,e).fold(function(){Hi(n,t)},function(n){Ao(n,t)})}(n,t,o)},n)}),n})}function Kd(n,t){return{key:n,value:{config:{},me:function(n,t){var e=co(t);return ya({fields:[ct("enabled")],name:n,active:{events:nn(e)}})}(n,t),configAsRaw:nn({}),initialConfig:{},state:Zi}}}function Jd(n,t){t.ignore||(wa(n.element()),t.onFocus(n))}function $d(n,t,e){var o=t.aria;o.update(n,o,e.get())}function Qd(t,n,e){n.toggleClass.each(function(n){e.get()?fr(t.element(),n):dr(t.element(),n)})}function Zd(n,t,e){bg(n,t,e,!e.get())}function nm(n,t,e){e.set(!0),Qd(n,t,e),$d(n,t,e)}function tm(n,t,e){e.set(!1),Qd(n,t,e),$d(n,t,e)}function em(n,t,e){bg(n,t,e,t.selected)}function om(){function n(n,t){t.stop(),io(n)}return[lo(ri(),n),lo(gi(),n),vo(Ur()),vo(Yr())]}function rm(n){return co(H([n.map(function(e){return Ni(function(n,t){e(n),t.stop()})}).toArray(),om()]))}function im(n){(Ca(n.element()).isNone()||vg.isFocused(n))&&(vg.isFocused(n)||vg.focus(n),ro(n,kg,{item:n}))}function um(n){ro(n,Og,{item:n})}function am(n,t){var e={};Cn(n,function(n,t){bn(n,function(n){e[n]=t})});var o=t,r=function(n){return kn(n,function(n,t){return{k:n,v:t}})}(t),i=P(r,function(n,t){return[t].concat(Ng(e,o,r,t))});return P(e,function(n){return Nn(i,n).getOr([n])})}function cm(n){return n.x()}function sm(n,t){return n.x()+n.width()/2-t.width()/2}function fm(n,t){return n.x()+n.width()-t.width()}function lm(n){return n.y()}function dm(n,t){return n.y()+n.height()-t.height()}function mm(n,t,e){return Ya(cm(n),dm(n,t),e.innerSoutheast(),Ka(),"layout-se")}function gm(n,t,e){return Ya(fm(n,t),dm(n,t),e.innerSouthwest(),Ja(),"layout-sw")}function pm(n,t,e){return Ya(cm(n),lm(n),e.innerNortheast(),$a(),"layout-ne")}function hm(n,t,e){return Ya(fm(n,t),lm(n),e.innerNorthwest(),Qa(),"layout-nw")}function vm(n){var t=function e(n){return n.uid!==undefined}(n)&&$(n,"uid")?n.uid:Yo("memento");return{get:function(n){return n.getSystem().getByUid(t).getOrDie()},getOpt:function(n){return n.getSystem().getByUid(t).toOption()},asSpec:function(){return N(N({},n),{uid:t})}}}function bm(n){return on.from(n()["temporary-placeholder"]).getOr("!not found!")}function ym(n,t){return on.from(t()[n]).getOrThunk(function(){return bm(t)})}var xm,wm=fd(At("cyclic",nn(!1))),Sm=fd(At("cyclic",nn(!0))),Cm=[St("execute",ld),St("useSpace",!1),St("useEnter",!0),St("useControlEnter",!1),St("useDown",!1)],km=sd(Cm,Zi.init,function(n,t,e,o){var r=e.useSpace&&!_l(n.element())?[32]:[],i=e.useEnter?[13]:[],u=e.useDown?[40]:[],a=r.concat(i).concat(u);return[Ul(Pl(a),md)].concat(e.useControlEnter?[Ul(zl([jl,Pl([13])]),md)]:[])},function(n,t,e,o){return e.useSpace&&!_l(n.element())?[Ul(Pl([32]),dd)]:[]},function(){return on.none()}),Om=/* */Object.freeze({flatgrid:gd,init:function(n){return n.state(n)}}),Em=function(t,e,n,o,r){return o.focusManager.get(e).bind(function(n){return t(e.element(),n,o,r)}).map(function(n){return o.focusManager.set(e,n),!0})},Tm=bd,Bm=bd,Dm=bd,Am=So(["index","candidates"],[]),_m=[ct("selector"),St("execute",ld),Ku("onEscape"),St("captureTab",!1),Xa()],Mm=Ed(function(n,t,e,o){return Cd(n,t,e,o,-1)}),Fm=Ed(function(n,t,e,o){return Cd(n,t,e,o,1)}),Im=Ed(function(n,t,e,o){return kd(n,t,e,o,-1)}),Rm=Ed(function(n,t,e,o){return kd(n,t,e,o,1)}),Vm=nn([Ul(Pl([37]),hd(Mm,Fm)),Ul(Pl([39]),vd(Mm,Fm)),Ul(Pl([38]),Tm(Im)),Ul(Pl([40]),Bm(Rm)),Ul(zl([Ll,Pl([9])]),Td),Ul(zl([cd,Pl([9])]),Td),Ul(Pl([27]),function(n,t,e,o){return e.onEscape(n,t)}),Ul(Pl([32].concat([13])),function(t,e,o,n){return function(n,t){return t.focusManager.get(n).bind(function(n){return Ou(n,t.selector)})}(t,o).bind(function(n){return o.execute(t,e,n)})})]),Nm=nn([Ul(Pl([32]),dd)]),Hm=sd(_m,gd,Vm,Nm,function(){return on.some(Od)}),Pm=[ct("selector"),St("getInitial",on.none),St("execute",ld),Ku("onEscape"),St("executeOnMove",!1),St("allowVertical",!0)],zm=nn([Ul(Pl([32]),dd)]),Lm=sd(Pm,Zi.init,function(n,t,e,o){var r=[37].concat(e.allowVertical?[38]:[]),i=[39].concat(e.allowVertical?[40]:[]);return[Ul(Pl(r),Fd(hd(_d,Md))),Ul(Pl(i),Fd(vd(_d,Md))),Ul(Pl([13]),Dd),Ul(Pl([32]),Dd),Ul(Pl([27]),Id)]},zm,function(){return on.some(Ad)}),jm=So(["rowIndex","columnIndex","cell"],[]),Um=[mt("selectors",[ct("row"),ct("cell")]),St("cycles",!0),St("previousSelector",on.none),St("execute",ld)],Wm=Ld(function(n,t,e){return Vd(n,t,e,-1)},function(n,t,e){return Hd(n,t,e,-1)}),Gm=Ld(function(n,t,e){return Vd(n,t,e,1)},function(n,t,e){return Hd(n,t,e,1)}),Xm=Ld(function(n,t,e){return Nd(n,e,t,-1)},function(n,t,e){return Pd(n,e,t,-1)}),Ym=Ld(function(n,t,e){return Nd(n,e,t,1)},function(n,t,e){return Pd(n,e,t,1)}),qm=nn([Ul(Pl([37]),hd(Wm,Gm)),Ul(Pl([39]),vd(Wm,Gm)),Ul(Pl([38]),Tm(Xm)),Ul(Pl([40]),Bm(Ym)),Ul(Pl([32].concat([13])),function(t,e,o){return Ca(t.element()).bind(function(n){return o.execute(t,e,n)})})]),Km=nn([Ul(Pl([32]),dd)]),Jm=sd(Um,Zi.init,qm,Km,function(){return on.some(zd)}),$m=[ct("selector"),St("execute",ld),St("moveOnTab",!1)],Qm=nn([Ul(Pl([38]),Dm(Wd)),Ul(Pl([40]),Dm(Gd)),Ul(zl([Ll,Pl([9])]),function(n,t,e){return e.moveOnTab?Dm(Wd)(n,t,e):on.none()}),Ul(zl([cd,Pl([9])]),function(n,t,e){return e.moveOnTab?Dm(Gd)(n,t,e):on.none()}),Ul(Pl([13]),jd),Ul(Pl([32]),jd)]),Zm=nn([Ul(Pl([32]),dd)]),ng=sd($m,Zi.init,Qm,Zm,function(){return on.some(Ud)}),tg=[Ku("onSpace"),Ku("onEnter"),Ku("onShiftEnter"),Ku("onLeft"),Ku("onRight"),Ku("onTab"),Ku("onShiftTab"),Ku("onUp"),Ku("onDown"),Ku("onEscape"),St("stopSpaceKeyup",!1),ht("focusIn")],eg=sd(tg,Zi.init,function(n,t,e){return[Ul(Pl([32]),e.onSpace),Ul(zl([cd,Pl([13])]),e.onEnter),Ul(zl([Ll,Pl([13])]),e.onShiftEnter),Ul(zl([Ll,Pl([9])]),e.onShiftTab),Ul(zl([cd,Pl([9])]),e.onTab),Ul(Pl([38]),e.onUp),Ul(Pl([40]),e.onDown),Ul(Pl([37]),e.onLeft),Ul(Pl([39]),e.onRight),Ul(Pl([32]),e.onSpace),Ul(Pl([27]),e.onEscape)]},function(n,t,e){return e.stopSpaceKeyup?[Ul(Pl([32]),dd)]:[]},function(n){return n.focusIn}),og=wm.schema(),rg=Sm.schema(),ig=Lm.schema(),ug=Hm.schema(),ag=Jm.schema(),cg=km.schema(),sg=ng.schema(),fg=eg.schema(),lg=xa({branchKey:"mode",branches:/* */Object.freeze({acyclic:og,cyclic:rg,flow:ig,flatgrid:ug,matrix:ag,execution:cg,menu:sg,special:fg}),name:"keying",active:{events:function(n,t){return n.handler.toEvents(n,t)}},apis:{focusIn:function(t,e,o){e.sendFocusIn(e).fold(function(){t.getSystem().triggerFocus(t.element(),t.element())},function(n){n(t,e,o)})},setGridSize:function(n,t,e,o,r){$(e,"setGridSize")?e.setGridSize(o,r):v.console.error("Layout does not support setGridSize")}},state:Om}),dg=function(n,t){return n.components()},mg=ya({fields:[],name:"replacing",apis:/* */Object.freeze({append:function(n,t,e,o){Xd(n,0,Hi,o)},prepend:function(n,t,e,o){Xd(n,0,Mo,o)},remove:Yd,replaceAt:qd,replaceBy:function(t,n,e,o,r){var i=dg(t);return T(i,o).bind(function(n){return qd(t,0,0,n,r)})},set:function(t,n,e,o){ka(function(){var n=S(o,t.getSystem().build);ps(t,n)},t.element())},contents:dg})}),gg=/* */Object.freeze({focus:Jd,blur:function(n,t){t.ignore||function(n){n.dom().blur()}(n.element())},isFocused:function(n){return function(n){var t=Co(n).dom();return n.dom()===t.activeElement}(n.element())}}),pg=/* */Object.freeze({exhibit:function(n,t){var e=t.ignore?{}:{attributes:{tabindex:"-1"}};return Zo(e)},events:function(e){return co([lo(ci(),function(n,t){Jd(n,e),t.stop()})].concat(e.stopMousedown?[lo(Yr(),function(n,t){t.event().prevent()})]:[]))}}),hg=[qu("onFocus"),St("stopMousedown",!1),St("ignore",!1)],vg=ya({fields:hg,name:"focusing",active:pg,apis:gg}),bg=function(n,t,e,o){(o?nm:tm)(n,t,e)},yg=/* */Object.freeze({onLoad:em,toggle:Zd,isOn:function(n,t,e){return e.get()},on:nm,off:tm,set:bg}),xg=/* */Object.freeze({exhibit:function(n,t,e){return Zo({})},events:function(n,t){var e=function(t,e,o){return Ni(function(n){o(n,t,e)})}(n,t,Zd),o=ga(n,t,em);return co(H([n.toggleOnExecute?[e]:[],[o]]))}}),wg=function(n,t,e){Po(n.element(),"aria-expanded",e)},Sg=[St("selected",!1),ht("toggleClass"),St("toggleOnExecute",!0),Ct("aria",{mode:"none"},it("mode",{pressed:[St("syncWithExpanded",!1),Qu("update",function(n,t,e){Po(n.element(),"aria-pressed",e),t.syncWithExpanded&&wg(n,t,e)})],checked:[Qu("update",function(n,t,e){Po(n.element(),"aria-checked",e)})],expanded:[Qu("update",wg)],selected:[Qu("update",function(n,t,e){Po(n.element(),"aria-selected",e)})],none:[Qu("update",Z)]}))],Cg=ya({fields:Sg,name:"toggling",active:xg,apis:yg,state:(xm=!1,{init:function(){var t=ye(xm);return{get:function(){return t.get()},set:function(n){return t.set(n)},clear:function(){return t.set(xm)},readState:function(){return t.get()}}}})}),kg="alloy.item-hover",Og="alloy.item-focus",Eg=nn(kg),Tg=nn(Og),Bg=[ct("data"),ct("components"),ct("dom"),St("hasSubmenu",!1),ht("toggling"),nl("itemBehaviours",[Cg,vg,lg,Zf]),St("ignoreFocus",!1),St("domModification",{}),Qu("builder",function(n){return{dom:n.dom,domModification:N(N({},n.domModification),{attributes:N(N(N({role:n.toggling.isSome()?"menuitemcheckbox":"menuitem"},n.domModification.attributes),{"aria-haspopup":n.hasSubmenu}),n.hasSubmenu?{"aria-expanded":!1}:{})}),behaviours:tl(n.itemBehaviours,[n.toggling.fold(Cg.revoke,function(n){return Cg.config(N({aria:{mode:"checked"}},n))}),vg.config({ignore:n.ignoreFocus,stopMousedown:n.ignoreFocus,onFocus:function(n){um(n)}}),lg.config({mode:"execution"}),Zf.config({store:{mode:"memory",initialValue:n.data}}),Kd("item-type-events",g(om(),[lo($r(),im),lo(mi(),vg.focus)]))]),components:n.components,eventOrder:n.eventOrder}}),St("eventOrder",{})],Dg=[ct("dom"),ct("components"),Qu("builder",function(n){return{dom:n.dom,components:n.components,events:co([function(n){return lo(n,function(n,t){t.stop()})}(mi())])}})],Ag=nn([xl({name:"widget",overrides:function(t){return{behaviours:ba([Zf.config({store:{mode:"manual",getValue:function(n){return t.data},setValue:function(){}}})])}}})]),_g=[ct("uid"),ct("data"),ct("components"),ct("dom"),St("autofocus",!1),St("ignoreFocus",!1),nl("widgetBehaviours",[Zf,vg,lg]),St("domModification",{}),tf(Ag()),Qu("builder",function(e){function o(n){return qs(n,e,"widget").map(function(n){return lg.focusIn(n),n})}function n(n,t){return _l(t.event().target())||e.autofocus&&t.setSource(n.element()),on.none()}var t=Xs(0,e,Ag()),r=Ys("item-widget",e,t.internals());return{dom:e.dom,components:r,domModification:e.domModification,events:co([Ni(function(n,t){o(n).each(function(n){t.stop()})}),lo($r(),im),lo(mi(),function(n,t){e.autofocus?o(n):vg.focus(n)})]),behaviours:tl(e.widgetBehaviours,[Zf.config({store:{mode:"memory",initialValue:e.data}}),vg.config({ignore:e.ignoreFocus,onFocus:function(n){um(n)}}),lg.config({mode:"special",focusIn:e.autofocus?function(n){o(n)}:cc(),onLeft:n,onRight:n,onEscape:function(n,t){return vg.isFocused(n)||e.autofocus?(e.autofocus&&t.setSource(n.element()),on.none()):(vg.focus(n),on.some(!0))}})])}})],Mg=it("type",{widget:_g,item:Bg,separator:Dg}),Fg=nn([Cl({factory:{sketch:function(n){var t=ot("menu.spec item",Mg,n);return t.builder(t)}},name:"items",unit:"item",defaults:function(n,t){return t.hasOwnProperty("uid")?t:N(N({},t),{uid:Yo("item")})},overrides:function(n,t){return{type:t.type,ignoreFocus:n.fakeFocus,domModification:{classes:[n.markers.item]}}}})]),Ig=nn([ct("value"),ct("items"),ct("dom"),ct("components"),St("eventOrder",{}),Fs("menuBehaviours",[ad,Zf,Zl,lg]),Ct("movement",{mode:"menu",moveOnTab:!0},it("mode",{grid:[Xa(),Qu("config",function(n,t){return{mode:"flatgrid",selector:"."+n.markers.item,initSize:{numColumns:t.initSize.numColumns,numRows:t.initSize.numRows},focusManager:n.focusManager}})],matrix:[Qu("config",function(n,t){return{mode:"matrix",selectors:{row:t.rowSelector,cell:"."+n.markers.item},focusManager:n.focusManager}}),ct("rowSelector")],menu:[St("moveOnTab",!0),Qu("config",function(n,t){return{mode:"menu",selector:"."+n.markers.item,moveOnTab:t.moveOnTab,focusManager:n.focusManager}})]})),st("markers",Wa()),St("fakeFocus",!1),St("focusManager",Gl()),qu("onHighlight")]),Rg=nn("alloy.menu-focus"),Vg=Al({name:"Menu",configFields:Ig(),partFields:Fg(),factory:function(n,t,e,o){return{uid:n.uid,dom:n.dom,markers:n.markers,behaviours:Rs(n.menuBehaviours,[ad.config({highlightClass:n.markers.selectedItem,itemClass:n.markers.item,onHighlight:n.onHighlight}),Zf.config({store:{mode:"memory",initialValue:n.value}}),Zl.config({find:on.some}),lg.config(n.movement.config(n,n.movement))]),events:co([lo(Tg(),function(t,e){var n=e.event();t.getSystem().getByDom(n.target()).each(function(n){ad.highlight(t,n),e.stop(),ro(t,Rg(),{menu:t,item:n})})}),lo(Eg(),function(n,t){var e=t.event().item();ad.highlight(n,e)})]),components:t,eventOrder:n.eventOrder,domModification:{attributes:{role:"menu"}}}}}),Ng=function(e,o,r,n){return Nn(r,n).bind(function(n){return Nn(e,n).bind(function(n){var t=Ng(e,o,r,n);return on.some([n].concat(t))})}).getOr([])},Hg=function(n){return"prepared"===n.type?on.some(n.menu):on.none()},Pg={init:function(){function r(n,e,o){return f(n).bind(function(t){return function(e){return I(i.get(),function(n,t){return n===e})}(n).bind(function(n){return e(n).map(function(n){return{triggeredMenu:t,triggeringItem:n,triggeringPath:o}})})})}var i=ye({}),u=ye({}),a=ye({}),c=ye(on.none()),s=ye({}),f=function(n){return t(n).bind(Hg)},t=function(n){return Nn(u.get(),n)},e=function(n){return Nn(i.get(),n)};return{setMenuBuilt:function(n,t){var e;u.set(N(N({},u.get()),((e={})[n]={type:"prepared",menu:t},e)))},setContents:function(n,t,e,o){c.set(on.some(n)),i.set(e),u.set(t),s.set(o);var r=am(o,e);a.set(r)},expand:function(e){return Nn(i.get(),e).map(function(n){var t=Nn(a.get(),e).getOr([]);return[n].concat(t)})},refresh:function(n){return Nn(a.get(),n)},collapse:function(n){return Nn(a.get(),n).bind(function(n){return 1<n.length?on.some(n.slice(1)):on.none()})},lookupMenu:t,lookupItem:e,otherMenus:function(n){var t=s.get();return _(wn(t),n)},getPrimary:function(){return c.get().bind(f)},getMenus:function(){return u.get()},clear:function(){i.set({}),u.set({}),a.set({}),c.set(on.none())},isClear:function(){return c.get().isNone()},getTriggeringPath:function(n,o){var t=C(e(n).toArray(),function(n){return f(n).isSome()});return Nn(a.get(),n).bind(function(n){var e=A(t.concat(n));return function(n){for(var t=[],e=0;e<n.length;e++){var o=n[e];if(!o.isSome())return on.none();t.push(o.getOrDie())}return on.some(t)}(B(e,function(n,t){return r(n,o,e.slice(0,t+1)).fold(function(){return c.get().is(n)?[]:[on.none()]},function(n){return[on.some(n)]})}))})}}},extractPreparedMenu:Hg},zg=nn("collapse-item"),Lg=Dl({name:"TieredMenu",configFields:[$u("onExecute"),$u("onEscape"),Ju("onOpenMenu"),Ju("onOpenSubmenu"),Ju("onRepositionMenu"),qu("onCollapseMenu"),St("highlightImmediately",!0),mt("data",[ct("primary"),ct("menus"),ct("expansions")]),St("fakeFocus",!1),qu("onHighlight"),qu("onHover"),Gu(),ct("dom"),St("navigateOnHover",!0),St("stayInDom",!1),Fs("tmenuBehaviours",[lg,ad,Zl,mg]),St("eventOrder",{})],apis:{collapseMenu:function(n,t){n.collapseMenu(t)},highlightPrimary:function(n,t){n.highlightPrimary(t)},repositionMenus:function(n,t){n.repositionMenus(t)}},factory:function(a,n){function e(n){var t=function(o,r,n){return P(n,function(n,t){function e(){return Vg.sketch(N(N({dom:n.dom},n),{value:t,items:n.items,markers:a.markers,fakeFocus:a.fakeFocus,onHighlight:a.onHighlight,focusManager:a.fakeFocus?Xl():Gl()}))}return t===r?{type:"prepared",menu:o.getSystem().build(e())}:{type:"notbuilt",nbMenu:e}})}(n,a.data.primary,a.data.menus),e=o();return g.setContents(a.data.primary,t,a.data.expansions,e),g.getPrimary()}function c(n){return Zf.getValue(n).value}function u(t,n){ad.highlight(t,n),ad.getHighlighted(n).orThunk(function(){return ad.getFirst(n)}).each(function(n){uo(t,n.element(),mi())})}function s(t,n){return Bu(S(n,function(n){return t.lookupMenu(n).bind(function(n){return"prepared"===n.type?on.some(n.menu):on.none()})}))}function f(t,n,e){var o=s(n,n.otherMenus(e));bn(o,function(n){pr(n.element(),[a.markers.backgroundMenu]),a.stayInDom||mg.remove(t,n)})}function l(n,o){var t=function(o){return r.get().getOrThunk(function(){var e={},n=zc(o.element(),"."+a.markers.item),t=C(n,function(n){return"true"===zo(n,"aria-haspopup")});return bn(t,function(n){o.getSystem().getByDom(n).each(function(n){var t=c(n);e[t]=n})}),r.set(on.some(e)),e})}(n);Cn(t,function(n,t){var e=vn(o,t);Po(n.element(),"aria-expanded",e)})}function d(o,r,i){return on.from(i[0]).bind(function(n){return r.lookupMenu(n).bind(function(n){if("notbuilt"===n.type)return on.none();var t=n.menu,e=s(r,i.slice(1));return bn(e,function(n){fr(n.element(),a.markers.backgroundMenu)}),$e(t.element())||mg.append(o,au(t)),pr(t.element(),[a.markers.backgroundMenu]),u(o,t),f(o,r,i),on.some(t)})})}var m,t,r=ye(on.none()),g=Pg.init(),o=function(n){return P(a.data.menus,function(n,t){return B(n.items,function(n){return"separator"===n.type?[]:[n.data.value]})})};(t=m=m||{})[t.HighlightSubmenu=0]="HighlightSubmenu",t[t.HighlightParent=1]="HighlightParent";function i(r,i,u){void 0===u&&(u=m.HighlightSubmenu);var n=c(i);return g.expand(n).bind(function(o){return l(r,o),on.from(o[0]).bind(function(e){return g.lookupMenu(e).bind(function(n){var t=function(n,t,e){if("notbuilt"!==e.type)return e.menu;var o=n.getSystem().build(e.nbMenu());return g.setMenuBuilt(t,o),o}(r,e,n);return $e(t.element())||mg.append(r,au(t)),a.onOpenSubmenu(r,i,t,A(o)),u===m.HighlightSubmenu?(ad.highlightFirst(t),d(r,g,o)):(ad.dehighlightAll(t),on.some(i))})})})}function p(t,e){var n=c(e);return g.collapse(n).bind(function(n){return l(t,n),d(t,g,n).map(function(n){return a.onCollapseMenu(t,e,n),n})})}function h(e){return function(t,n){return Ou(n.getSource(),"."+a.markers.item).bind(function(n){return t.getSystem().getByDom(n).toOption().bind(function(n){return e(t,n).map(function(){return!0})})})}}function v(n){return ad.getHighlighted(n).bind(ad.getHighlighted)}var b=co([lo(Rg(),function(e,o){var n=o.event().item();g.lookupItem(c(n)).each(function(){var n=o.event().menu();ad.highlight(e,n);var t=c(o.event().item());g.refresh(t).each(function(n){return f(e,g,n)})})}),Ni(function(t,n){var e=n.event().target();t.getSystem().getByDom(e).each(function(n){0===c(n).indexOf("collapse-item")&&p(t,n),i(t,n,m.HighlightSubmenu).fold(function(){a.onExecute(t,n)},function(){})})}),Ii(function(t,n){e(t).each(function(n){mg.append(t,au(n)),a.onOpenMenu(t,n),a.highlightImmediately&&u(t,n)})})].concat(a.navigateOnHover?[lo(Eg(),function(n,t){var e=t.event().item();!function(t,n){var e=c(n);g.refresh(e).bind(function(n){return l(t,n),d(t,g,n)})}(n,e),i(n,e,m.HighlightParent),a.onHover(n,e)})]:[])),y={collapseMenu:function(t){v(t).each(function(n){p(t,n)})},highlightPrimary:function(t){g.getPrimary().each(function(n){u(t,n)})},repositionMenus:function(o){g.getPrimary().bind(function(t){return v(o).bind(function(n){var t=c(n),e=R(g.getMenus()),o=Bu(S(e,Pg.extractPreparedMenu));return g.getTriggeringPath(t,function(n){return function(n,t,e){return Du(t,function(n){if(!n.getSystem().isConnected())return on.none();var t=ad.getCandidates(n);return E(t,function(n){return c(n)===e})})}(0,o,n)})}).map(function(n){return{primary:t,triggeringPath:n}})}).fold(function(){(function(n){return on.from(n.components()[0]).filter(function(n){return"menu"===zo(n.element(),"role")})})(o).each(function(n){a.onRepositionMenu(o,n,[])})},function(n){var t=n.primary,e=n.triggeringPath;a.onRepositionMenu(o,t,e)})}};return{uid:a.uid,dom:a.dom,markers:a.markers,behaviours:Rs(a.tmenuBehaviours,[lg.config({mode:"special",onRight:h(function(n,t){return _l(t.element())?on.none():i(n,t,m.HighlightSubmenu)}),onLeft:h(function(n,t){return _l(t.element())?on.none():p(n,t)}),onEscape:h(function(n,t){return p(n,t).orThunk(function(){return a.onEscape(n,t).map(function(){return n})})}),focusIn:function(t,n){g.getPrimary().each(function(n){uo(t,n.element(),mi())})}}),ad.config({highlightClass:a.markers.selectedMenu,itemClass:a.markers.menu}),Zl.config({find:function(n){return ad.getHighlighted(n)}}),mg.config({})]),eventOrder:a.eventOrder,apis:y,events:b}},extraApis:{tieredData:function(n,t,e){return{primary:n,menus:t,expansions:e}},singleData:function(n,t){return{primary:n,menus:q(n,t),expansions:{}}},collapseItem:function(n){return{value:Xo(zg()),meta:{text:n}}}}}),jg=Dl({name:"InlineView",configFields:[ct("lazySink"),qu("onShow"),qu("onHide"),xt("onEscape"),Fs("inlineBehaviours",[zf,Zf,lc]),wt("fireDismissalEventInstead",[St("event",Oi())]),wt("fireRepositionEventInstead",[St("event",Ei())]),St("getRelated",on.none),St("eventOrder",on.none)],factory:function(i,n){function t(e){zf.isOpen(e)&&Zf.getValue(e).each(function(n){switch(n.mode){case"menu":zf.getState(e).each(function(n){Lg.repositionMenus(n)});break;case"position":var t=i.lazySink(e).getOrDie();Af.positionWithinBounds(t,n.anchor,e,n.getBounds())}})}var o=function(n,t,e,o){r(n,t,e,function(){return o.map(function(n){return xu(n)})})},r=function(n,t,e,o){var r=i.lazySink(n).getOrDie();zf.openWhileCloaked(n,e,function(){return Af.positionWithinBounds(r,t,n,o())}),Zf.setValue(n,on.some({mode:"position",anchor:t,getBounds:o}))},u=function(n,t,e,o){var r=function(n,t,r,e,i){function u(){return n.lazySink(t)}function a(n){return function(n){return 2===n.length}(n)?o:{}}var o="horizontal"===e.type?{layouts:{onLtr:function(){return da()},onRtl:function(){return ma()}}}:{};return Lg.sketch({dom:{tag:"div"},data:e.data,markers:e.menu.markers,onEscape:function(){return zf.close(t),n.onEscape.map(function(n){return n(t)}),on.some(!0)},onExecute:function(){return on.some(!0)},onOpenMenu:function(n,t){Af.positionWithinBounds(u().getOrDie(),r,t,i())},onOpenSubmenu:function(n,t,e,o){var r=u().getOrDie();Af.position(r,N({anchor:"submenu",item:t},a(o)),e)},onRepositionMenu:function(n,t,e){var o=u().getOrDie();Af.positionWithinBounds(o,r,t,i()),bn(e,function(n){var t=a(n.triggeringPath);Af.position(o,N({anchor:"submenu",item:n.triggeringItem},t),n.triggeredMenu)})}})}(i,n,t,e,o);zf.open(n,r),Zf.setValue(n,on.some({mode:"menu",menu:r}))},e={setContent:function(n,t){zf.setContent(n,t)},showAt:function(n,t,e){o(n,t,e,on.none())},showWithin:o,showWithinBounds:r,showMenuAt:function(n,t,e){u(n,t,e,function(){return on.none()})},showMenuWithinBounds:u,hide:function(n){Zf.setValue(n,on.none()),zf.close(n)},getContent:function(n){return zf.getState(n)},reposition:t,isOpen:zf.isOpen};return{uid:i.uid,dom:i.dom,behaviours:Rs(i.inlineBehaviours,[zf.config({isPartOf:function(n,t,e){return Lu(t,e)||function(n,t){return i.getRelated(n).exists(function(n){return Lu(n,t)})}(n,e)},getAttachPoint:function(n){return i.lazySink(n).getOrDie()},onOpen:function(n){i.onShow(n)},onClose:function(n){i.onHide(n)}}),Zf.config({store:{mode:"memory",initialValue:on.none()}}),lc.config({channels:N(N({},Es(N({isExtraPart:nn(!1)},i.fireDismissalEventInstead.map(function(n){return{fireEventInstead:{event:n.event}}}).getOr({})))),Ts(N(N({isExtraPart:nn(!1)},i.fireRepositionEventInstead.map(function(n){return{fireEventInstead:{event:n.event}}}).getOr({})),{doReposition:t})))})]),eventOrder:i.eventOrder,apis:e}},apis:{showAt:function(n,t,e,o){n.showAt(t,e,o)},showWithin:function(n,t,e,o,r){n.showWithin(t,e,o,r)},showWithinBounds:function(n,t,e,o,r){n.showWithinBounds(t,e,o,r)},showMenuAt:function(n,t,e,o){n.showMenuAt(t,e,o)},showMenuWithinBounds:function(n,t,e,o,r){n.showMenuWithinBounds(t,e,o,r)},hide:function(n,t){n.hide(t)},isOpen:function(n,t){return n.isOpen(t)},getContent:function(n,t){return n.getContent(t)},setContent:function(n,t,e){n.setContent(t,e)},reposition:function(n,t){n.reposition(t)}}}),Ug=function(n,t,e){return Ya(sm(n,t),lm(n),e.innerNorth(),nc(),"layout-n")},Wg=function(n,t,e){return Ya(sm(n,t),dm(n,t),e.innerSouth(),Za(),"layout-s")},Gg=Dl({name:"Button",factory:function(n){function e(t){return Nn(n.dom,"attributes").bind(function(n){return Nn(n,t)})}var t=rm(n.action),o=n.dom.tag;return{uid:n.uid,dom:n.dom,components:n.components,events:t,behaviours:tl(n.buttonBehaviours,[vg.config({}),lg.config({mode:"execution",useSpace:!0,useEnter:!0})]),domModification:{attributes:function(){if("button"!==o)return{role:e("role").getOr("button")};var n=e("type").getOr("button"),t=e("role").map(function(n){return{role:n}}).getOr({});return N({type:n},t)}()},eventOrder:n.eventOrder}},configFields:[St("uid",undefined),ct("dom"),St("components",[]),nl("buttonBehaviours",[vg,lg]),ht("action"),ht("role"),St("eventOrder",{})]}),Xg={success:"checkmark",error:"warning",err:"error",warning:"warning",warn:"warning",info:"info"},Yg=Dl({name:"Notification",factory:function(t){function e(n){return{dom:{tag:"div",classes:["tox-bar"],attributes:{style:"width: "+n+"%"}}}}function o(n){return{dom:{tag:"div",classes:["tox-text"],innerHtml:n+"%"}}}var r=vm({dom:{tag:"p",innerHtml:t.translationProvider(t.text)},behaviours:ba([mg.config({})])}),i=vm({dom:{tag:"div",classes:t.progress?["tox-progress-bar","tox-progress-indicator"]:["tox-progress-bar"]},components:[{dom:{tag:"div",classes:["tox-bar-container"]},components:[e(0)]},o(0)],behaviours:ba([mg.config({})])}),n={updateProgress:function(n,t){n.getSystem().isConnected()&&i.getOpt(n).each(function(n){mg.set(n,[{dom:{tag:"div",classes:["tox-bar-container"]},components:[e(t)]},o(t)])})},updateText:function(n,t){if(n.getSystem().isConnected()){var e=r.get(n);mg.set(e,[Ir(t)])}}},u=H([t.icon.toArray(),t.level.toArray(),t.level.bind(function(n){return on.from(Xg[n])}).toArray()]);return{uid:t.uid,dom:{tag:"div",attributes:{role:"alert"},classes:t.level.map(function(n){return["tox-notification","tox-notification--in","tox-notification--"+n]}).getOr(["tox-notification","tox-notification--in"])},components:[{dom:{tag:"div",classes:["tox-notification__icon"],innerHtml:function(n,t){return Du(n,function(n){return on.from(t()[n])}).getOrThunk(function(){return bm(t)})}(u,t.iconProvider)}},{dom:{tag:"div",classes:["tox-notification__body"]},components:[r.asSpec()],behaviours:ba([mg.config({})])}].concat(t.progress?[i.asSpec()]:[]).concat(Gg.sketch({dom:{tag:"button",classes:["tox-notification__dismiss","tox-button","tox-button--naked","tox-button--icon"]},components:[{dom:{tag:"div",classes:["tox-icon"],innerHtml:ym("close",t.iconProvider),attributes:{"aria-label":t.translationProvider("Close")}}}],action:function(n){t.onAction(n)}})),apis:n}},configFields:[ht("level"),ct("progress"),ct("icon"),ct("onAction"),ct("text"),ct("iconProvider"),ct("translationProvider")],apis:{updateProgress:function(n,t,e){n.updateProgress(t,e)},updateText:function(n,t,e){n.updateText(t,e)}}}),qg=tinymce.util.Tools.resolve("tinymce.util.Delay");function Kg(n,u,o){var a=u.backstage;return{open:function(n,t){function e(){t(),jg.hide(i)}var r=uu(Yg.sketch({text:n.text,level:vn(["success","error","warning","warn","info"],n.type)?n.type:undefined,progress:!0===n.progressBar,icon:on.from(n.icon),onAction:e,iconProvider:a.shared.providers.icons,translationProvider:a.shared.providers.translate})),i=uu(jg.sketch({dom:{tag:"div",classes:["tox-notifications-container"]},lazySink:u.backstage.shared.getSink,fireDismissalEventInstead:{}}));return o.add(i),0<n.timeout&&qg.setTimeout(function(){e()},n.timeout),{close:e,moveTo:function(n,t){jg.showAt(i,{anchor:"makeshift",x:n,y:t},au(r))},moveRel:function(n,t){if("banner"!==t){var e=function(n){switch(n){case"bc-bc":return Wg;case"tc-tc":return Ug;case"tc-bc":return oc;case"bc-tc":default:return rc}}(t),o={anchor:"node",root:zr(),node:on.some(we.fromDom(n)),layouts:{onRtl:function(){return[e]},onLtr:function(){return[e]}}};jg.showAt(i,o,au(r))}else jg.showAt(i,u.backstage.shared.anchors.banner(),au(r))},text:function(n){Yg.updateText(r,n)},settings:n,getEl:function(){return r.element().dom()},progressBar:{value:function(n){Yg.updateProgress(r,n)}}}},close:function(n){n.close()},reposition:function(n){!function(n){bn(n,function(n){return n.moveTo(0,0)})}(n),function(e){0<e.length&&(yn(e).each(function(n){return n.moveRel(null,"banner")}),bn(e,function(n,t){0<t&&n.moveRel(e[t-1].getEl(),"bc-tc")}))}(n)},getArgs:function(n){return n.settings}}}function Jg(e,o){var r=null;return{cancel:function(){null!==r&&(v.clearTimeout(r),r=null)},throttle:function(){for(var n=[],t=0;t<arguments.length;t++)n[t]=arguments[t];null!==r&&v.clearTimeout(r),r=v.setTimeout(function(){e.apply(null,n),r=null},o)}}}function $g(n,t,e,o,r){var i=new Ap(t,r||n.getRoot());return Fp(n,t,on.some(e),o,i.prev,on.none())}function Qg(t,e){return Ip(we.fromDom(t.selection.getNode())).getOrThunk(function(){var n=we.fromHtml('<span data-mce-autocompleter="1" data-mce-bogus="1"></span>',t.getDoc());return Hi(n,we.fromDom(e.extractContents())),e.insertNode(n.dom()),Eo(n).each(function(n){return n.dom().normalize()}),Ic(n).map(function(n){t.selection.setCursorLocation(n.dom(),function(n){return"img"===Ke(n)?1:Ac(n).fold(function(){return Bo(n).length},function(n){return n.length})}(n))}),n})}function Zg(n,t){return n.toString().substring(t.length).replace(/\u00A0/g," ").replace(/\uFEFF/g,"")}function np(n,u,a,c){return void 0===c&&(c=0),function(n){return n.collapsed&&3===n.startContainer.nodeType}(u)?$g(n,u.startContainer,u.startOffset,function(e,o,r,n){var i=n.getOr(r.length);return function(n,t,e,o){var r;for(r=t-1;0<=r;r--){var i=n.charAt(r);if(Rp.test(i))return on.none();if(i===e)break}return-1===r||t-r<o?on.none():on.some(n.substring(r+1,t))}(r,i,a,1).fold(function(){return r.match(Rp)?e.abort():e.kontinue()},function(n){var t=u.cloneRange();return t.setStart(o,i-n.length-1),t.setEnd(u.endContainer,u.endOffset),r.length<c?e.abort():e.finish({text:Zg(t,a),range:t,triggerChar:a})})}).fold(on.none,on.none,on.some):on.none()}function tp(e,n,o,t){return void 0===t&&(t=0),Ip(we.fromDom(n.startContainer)).fold(function(){return np(e,n,o,t)},function(n){var t=e.createRng();return t.selectNode(n.dom()),on.some({range:t,text:Zg(t,o),triggerChar:o})})}function ep(n,t){return{element:n,offset:t}}function op(t,e){var n=e(),o=t.selection.getRng();return function(t,e,n){return Du(n.triggerChars,function(n){return tp(t,e,n)})}(t.dom,o,n).bind(function(n){return zp(t,e,n)})}function rp(n){var t=n.ui.registry.getAll().popups,e=P(t,function(n){return function(n){return tt("Autocompleter",Up,n)}(n).fold(function(n){throw new Error(le(n))},function(n){return n})}),o=function(n){var t={};return bn(n,function(n){t[n]={}}),wn(t)}(On(e,function(n){return n.ch})),r=R(e);return{dataset:e,triggerChars:o,lookupByChar:function(t){return C(r,function(n){return n.ch===t})}}}function ip(n,o,t){var r=zc(n.element(),"."+t);if(0<r.length){var e=T(r,function(n){var t=n.dom().getBoundingClientRect().top,e=r[0].dom().getBoundingClientRect().top;return Math.abs(t-e)>o}).getOr(r.length);return on.some({numColumns:e,numRows:Math.ceil(r.length/e)})}return on.none()}function up(n,t){return ba([Kd(n,t)])}function ap(n,t,e){n.getSystem().broadcastOn([Zp],{})}function cp(n){var t=we.fromHtml(n),e=Bo(t),o=function(n){var t=n.dom().attributes!==undefined?n.dom().attributes:[];return O(t,function(n,t){var e;return"class"===t.name?n:N(N({},n),((e={})[t.name]=t.value,e))},{})}(t),r=function(n){return Array.prototype.slice.call(n.dom().classList,0)}(t),i=0===e.length?{}:{innerHtml:Vo(t)};return N({tag:Ke(t),classes:r,attributes:o},i)}function sp(n){return Nn(ch,n).getOr(ih)}function fp(n){return{dom:{tag:"div",classes:[fh],innerHtml:n}}}function lp(n){return{dom:{tag:"div",classes:[lh]},components:[Ir(rh.translate(n))]}}function dp(n,t){return{dom:{tag:"div",classes:[lh]},components:[{dom:{tag:n.tag,attributes:{style:n.styleAttr}},components:[Ir(rh.translate(t))]}]}}function mp(n){return{dom:{tag:"div",classes:["tox-collection__item-accessory"],innerHtml:ph(n)}}}function gp(n){return{dom:{tag:"div",classes:[fh,"tox-collection__item-checkmark"],innerHtml:ym("checkmark",n)}}}function pp(n,t,e,o,r){var i=e?n.checkMark.orThunk(function(){return t.or(on.some("")).map(fp)}):on.none(),u=n.ariaLabel.map(function(n){return{attributes:{title:rh.translate(n)}}}).getOr({});return{dom:An({tag:"div",classes:[ih,uh].concat(r?["tox-collection__item-icon-rtl"]:[])},u),optComponents:[i,n.htmlContent.fold(function(){return n.textContent.map(o)},function(n){return on.some(function(n){return{dom:{tag:"div",classes:[lh],innerHtml:n}}}(n))}),n.shortcutContent.map(mp),n.caret]}}function hp(n,t,e,o){void 0===o&&(o=on.none());var r=rh.isRtl()&&n.iconContent.exists(function(n){return vn(vh,n)}),i=n.iconContent.map(function(n){return rh.isRtl()&&vn(hh,n)?n+"-rtl":n}).map(function(n){return function(n,t,e){return on.from(t()[n]).or(e).getOrThunk(function(){return bm(t)})}(n,t.icons,o)}),u=on.from(n.meta).fold(function(){return lp},function(n){return En(n,"style")?d(dp,n.style):lp});return"color"===n.presets?function(n,t,e,o){var r,i,u;return{dom:(r=ah,i=e.getOr(""),u=n.map(function(n){return' title="'+o.translate(n)+'"'}).getOr(""),cp("custom"===t?'<button class="'+r+' tox-swatches__picker-btn"'+u+">"+i+"</button>":"remove"===t?'<div class="'+r+' tox-swatch--remove"'+u+">"+i+"</div>":'<div class="'+r+'" style="background-color: '+t+'" data-mce-color="'+t+'"'+u+"></div>")),optComponents:[]}}(n.ariaLabel,n.value,i,t):pp(n,i,e,u,r)}function vp(n,t,e){t.disabled&&yh(n,t)}function bp(n,t){return!0===t.useNative&&vn(bh,Ke(n.element()))}function yp(n){Po(n.element(),"disabled","disabled")}function xp(n){jo(n.element(),"disabled")}function wp(n){Po(n.element(),"aria-disabled","true")}function Sp(n){Po(n.element(),"aria-disabled","false")}function Cp(t,n,e){n.disableClass.each(function(n){dr(t.element(),n)}),(bp(t,n)?xp:Sp)(t),n.onEnabled(t)}function kp(n,t){return bp(n,t)?function(n){return Lo(n.element(),"disabled")}(n):function(n){return"true"===zo(n.element(),"aria-disabled")}(n)}function Op(n,t){var e=n.getApi(t);return function(n){n(e)}}function Ep(e,o){return Ii(function(n){Op(e,n)(function(n){var t=e.onSetup(n);null!==t&&t!==undefined&&o.set(t)})})}function Tp(t,e){return Ri(function(n){return Op(t,n)(e.get())})}var Bp,Dp,Ap=tinymce.util.Tools.resolve("tinymce.dom.TreeWalker"),_p=Tn([{aborted:[]},{edge:["element"]},{success:["info"]}]),Mp=Tn([{abort:[]},{kontinue:[]},{finish:["info"]}]),Fp=function(t,e,n,o,r,i){function u(){return i.fold(_p.aborted,_p.edge)}function a(){var n=r();return n?Fp(t,n,on.none(),o,r,on.some(e)):u()}if(function(n,t){return n.isBlock(t)||vn(["BR","IMG","HR","INPUT"],t.nodeName)||"false"===n.getContentEditable(t)}(t,e))return u();if(function(n){return n.nodeType===v.Node.TEXT_NODE}(e)){var c=e.textContent;return o(Mp,e,c,n).fold(_p.aborted,function(){return a()},_p.success)}return a()},Ip=function(n){return Ou(n,"[data-mce-autocompleter]")},Rp=/[\u00a0 \t\r\n]/,Vp=function(e,n){n.on("keypress compositionend",e.onKeypress.throttle),n.on("remove",e.onKeypress.cancel);function o(n,t){ro(n,ni(),{raw:t})}n.on("keydown",function(t){function n(){return e.getView().bind(ad.getHighlighted)}8===t.which&&e.onKeypress.throttle(t),e.isActive()&&(27===t.which&&e.cancelIfNecessary(),e.isMenuOpen()?13===t.which?(n().each(io),t.preventDefault()):40===t.which?(n().fold(function(){e.getView().each(ad.highlightFirst)},function(n){o(n,t)}),t.preventDefault(),t.stopImmediatePropagation()):37!==t.which&&38!==t.which&&39!==t.which||n().each(function(n){o(n,t),t.preventDefault(),t.stopImmediatePropagation()}):13!==t.which&&38!==t.which&&40!==t.which||e.cancelIfNecessary())}),n.on("NodeChange",function(n){e.isActive()&&!e.isProcessingAction()&&Ip(we.fromDom(n.element)).isNone()&&e.cancelIfNecessary()})},Np=tinymce.util.Tools.resolve("tinymce.util.Promise"),Hp=function(n){if(function(n){return n.nodeType===v.Node.TEXT_NODE}(n))return ep(n,n.data.length);var t=n.childNodes;return 0<t.length?Hp(t[t.length-1]):ep(n,t.length)},Pp=function(n,t){var e=n.childNodes;return 0<e.length&&t<e.length?Pp(e[t],0):0<e.length&&function(n){return n.nodeType===v.Node.ELEMENT_NODE}(n)&&e.length===t?Hp(e[e.length-1]):ep(n,t)},zp=function(t,n,e,o){void 0===o&&(o={});var r=n(),i=t.selection.getRng().startContainer.nodeValue,u=C(r.lookupByChar(e.triggerChar),function(n){return e.text.length>=n.minChars&&n.matches.getOrThunk(function(){return function(e){function o(n,t,e,o){var r=o.getOr(e.length);return 0===r?n.kontinue():n.finish(/\s/.test(e.charAt(r-1)))}return function(n){var t=Pp(n.startContainer,n.startOffset);return $g(e,t.element,t.offset,o).fold(nn(!0),nn(!0),l)}}(t.dom)})(e.range,i,e.text)});if(0===u.length)return on.none();var a=Np.all(S(u,function(t){return t.fetch(e.text,t.maxResults,o).then(function(n){return{matchText:e.text,items:n,columns:t.columns,onAction:t.onAction}})}));return on.some({lookupData:a,context:e})},Lp=re([ft("type"),yt("text")]),jp=re([At("type",function(){return"autocompleteitem"}),At("active",function(){return!1}),At("disabled",function(){return!1}),St("meta",{}),ft("value"),yt("text"),yt("icon")]),Up=re([ft("type"),ft("ch"),kt("minChars",1),St("columns",1),kt("maxResults",10),xt("matches"),dt("fetch"),dt("onAction")]),Wp=[Tt("disabled",!1),yt("text"),yt("shortcut"),ce("value","value",In(function(){return Xo("menuitem-value")}),de()),St("meta",{})],Gp=re([ft("type"),Bt("onSetup",function(){return Z}),Bt("onAction",Z),yt("icon")].concat(Wp)),Xp=re([ft("type"),dt("getSubmenuItems"),Bt("onSetup",function(){return Z}),yt("icon")].concat(Wp)),Yp=re([ft("type"),Tt("active",!1),Bt("onSetup",function(){return Z}),dt("onAction")].concat(Wp)),qp=re([ft("type"),Tt("active",!1),yt("icon")].concat(Wp)),Kp=re([ft("type"),lt("fancytype",["inserttable","colorswatch"]),Bt("onAction",Z)]),Jp=function(n){return up(Xo("unnamed-events"),n)},$p=[ct("lazySink"),ct("tooltipDom"),St("exclusive",!0),St("tooltipComponents",[]),St("delay",300),Et("mode","normal",["normal","follow-highlight"]),St("anchor",function(n){return{anchor:"hotspot",hotspot:n,layouts:{onLtr:nn([rc,oc,ua,ca,aa,sa]),onRtl:nn([rc,oc,ua,ca,aa,sa])}}}),qu("onHide"),qu("onShow")],Qp=/* */Object.freeze({init:function(){function e(){o.get().each(function(n){v.clearTimeout(n)})}var o=ye(on.none()),t=ye(on.none()),n=nn("not-implemented");return nu({getTooltip:function(){return t.get()},isShowing:function(){return t.get().isSome()},setTooltip:function(n){t.set(on.some(n))},clearTooltip:function(){t.set(on.none())},clearTimer:e,resetTimer:function(n,t){e(),o.set(on.some(v.setTimeout(function(){n()},t)))},readState:n})}}),Zp=Xo("tooltip.exclusive"),nh=Xo("tooltip.show"),th=Xo("tooltip.hide"),eh=/* */Object.freeze({hideAllExclusive:ap,setComponents:function(n,t,e,o){e.getTooltip().each(function(n){n.getSystem().isConnected()&&mg.set(n,o)})}}),oh=ya({fields:$p,name:"tooltipping",active:/* */Object.freeze({events:function(o,r){function e(t){r.getTooltip().each(function(n){bs(n),o.onHide(t,n),r.clearTooltip()}),r.clearTimer()}return co(H([[lo(nh,function(n){r.resetTimer(function(){!function(t){if(!r.isShowing()){ap(t);var n=o.lazySink(t).getOrDie(),e=t.getSystem().build({dom:o.tooltipDom,components:o.tooltipComponents,events:co("normal"===o.mode?[lo($r(),function(n){oo(t,nh)}),lo(Kr(),function(n){oo(t,th)})]:[]),behaviours:ba([mg.config({})])});r.setTooltip(e),hs(n,e),o.onShow(t,e),Af.position(n,o.anchor(t),e)}}(n)},o.delay)}),lo(th,function(n){r.resetTimer(function(){e(n)},o.delay)}),lo(li(),function(n,t){vn(t.channels(),Zp)&&e(n)}),Ri(function(n){e(n)})],"normal"===o.mode?[lo(Qr(),function(n){oo(n,nh)}),lo(si(),function(n){oo(n,th)}),lo($r(),function(n){oo(n,nh)}),lo(Kr(),function(n){oo(n,th)})]:[lo(_i(),function(n,t){oo(n,nh)}),lo(Mi(),function(n){oo(n,th)})]]))}}),state:Qp,apis:eh}),rh=tinymce.util.Tools.resolve("tinymce.util.I18n"),ih="tox-menu-nav__js",uh="tox-collection__item",ah="tox-swatch",ch={normal:ih,color:ah},sh="tox-collection__item--enabled",fh="tox-collection__item-icon",lh="tox-collection__item-label",dh="tox-collection__item-caret",mh="tox-collection__item--active",gh=tinymce.util.Tools.resolve("tinymce.Env"),ph=function(n){var e=gh.mac?{alt:"&#x2325;",ctrl:"&#x2303;",shift:"&#x21E7;",meta:"&#x2318;",access:"&#x2303;&#x2325;"}:{meta:"Ctrl",access:"Shift+Alt"},t=n.split("+"),o=S(t,function(n){var t=n.toLowerCase().trim();return En(e,t)?e[t]:n});return gh.mac?o.join(""):o.join("+")},hh=["list-num-default","list-num-lower-alpha","list-num-lower-greek","list-num-lower-roman","list-num-upper-alpha","list-num-upper-roman"],vh=["list-bull-circle","list-bull-default","list-bull-square"],bh=["input","button","textarea","select"],yh=function(t,n,e){n.disableClass.each(function(n){fr(t.element(),n)}),(bp(t,n)?yp:wp)(t),n.onDisabled(t)},xh=/* */Object.freeze({enable:Cp,disable:yh,isDisabled:kp,onLoad:vp,set:function(n,t,e,o){(o?yh:Cp)(n,t,e)}}),wh=/* */Object.freeze({exhibit:function(n,t,e){return Zo({classes:t.disabled?t.disableClass.map(M).getOr([]):[]})},events:function(e,n){return co([so(di(),function(n,t){return kp(n,e)}),ga(e,n,vp)])}}),Sh=[St("disabled",!1),St("useNative",!0),ht("disableClass"),qu("onDisabled"),qu("onEnabled")],Ch=ya({fields:Sh,name:"disabling",active:wh,apis:xh}),kh=function(n){return Ch.config({disabled:n,disableClass:"tox-collection__item--state-disabled"})},Oh=function(n){return Ch.config({disabled:n})},Eh=function(n){return Ch.config({disabled:n,disableClass:"tox-tbtn--disabled"})},Th=function(n){return Ch.config({disabled:n,disableClass:"tox-tbtn--disabled",useNative:!1})};(Dp=Bp=Bp||{})[Dp.CLOSE_ON_EXECUTE=0]="CLOSE_ON_EXECUTE",Dp[Dp.BUBBLE_TO_SANDBOX=1]="BUBBLE_TO_SANDBOX";function Bh(n){return B(n,function(n){return n.toArray()})}function Dh(n,t,e){var o=ye(Z);return{type:"item",dom:t.dom,components:Bh(t.optComponents),data:n.data,eventOrder:Ih,hasSubmenu:n.triggersSubmenu,itemBehaviours:ba([Kd("item-events",[function(e,o){return Ni(function(n,t){Op(e,n)(e.onAction),e.triggersSubmenu||o!==Fh.CLOSE_ON_EXECUTE||(oo(n,hi()),t.stop())})}(n,e),Ep(n,o),Tp(n,o)]),kh(n.disabled),mg.config({})].concat(n.itemBehaviours))}}function Ah(n){return{value:n.value,meta:An({text:n.text.getOr("")},n.meta)}}function _h(n,t){var e=function(n){return Rh.DOM.encode(n)}(rh.translate(n));if(0<t.length){var o=new RegExp(function(n){return n.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}(t),"gi");return e.replace(o,function(n){return'<span class="tox-autocompleter-highlight">'+n+"</span>"})}return e}function Mh(t,e,n){function o(n){return ro(n,Hh,{row:t,col:e})}function r(n,t){t.stop(),o(n)}var i;return uu({dom:{tag:"div",attributes:(i={role:"button"},i["aria-labelledby"]=n,i)},behaviours:ba([Kd("insert-table-picker-cell",[lo($r(),vg.focus),lo(di(),o),lo(ri(),r),lo(gi(),r)]),Cg.config({toggleClass:"tox-insert-table-picker__selected",toggleOnExecute:!1}),vg.config({onFocus:function(n){return ro(n,Nh,{row:t,col:e})}})])})}var Fh=Bp,Ih={"alloy.execute":["disabling","alloy.base.behaviour","toggling","item-events"]},Rh=tinymce.util.Tools.resolve("tinymce.dom.DOMUtils"),Vh=nn(js("item-widget",Ag())),Nh=Xo("cell-over"),Hh=Xo("cell-execute");function Ph(n){return{value:nn(n)}}function zh(n){return Jh.test(n)||$h.test(n)}function Lh(n){var t=function(n){var t=n.value().replace(Jh,function(n,t,e,o){return t+t+e+e+o+o});return{value:nn(t)}}(n),e=$h.exec(t.value());return null===e?["FFFFFF","FF","FF","FF"]:e}function jh(n){var t=n.toString(16);return 1===t.length?"0"+t:t}function Uh(n){var t=jh(n.red())+jh(n.green())+jh(n.blue());return Ph(t)}function Wh(n,t,e,o){return{red:nn(n),green:nn(t),blue:nn(e),alpha:nn(o)}}function Gh(n){var t=parseInt(n,10);return t.toString()===n&&0<=t&&t<=255}function Xh(n){var t,e,o,r=(n.hue()||0)%360,i=n.saturation()/100,u=n.value()/100;if(i=Zh(0,Qh(i,1)),u=Zh(0,Qh(u,1)),0===i)return t=e=o=nv(255*u),Wh(t,e,o,1);var a=r/60,c=u*i,s=c*(1-Math.abs(a%2-1)),f=u-c;switch(Math.floor(a)){case 0:t=c,e=s,o=0;break;case 1:t=s,e=c,o=0;break;case 2:t=0,e=c,o=s;break;case 3:t=0,e=s,o=c;break;case 4:t=s,e=0,o=c;break;case 5:t=c,e=0,o=s;break;default:t=e=o=0}return t=nv(255*(t+f)),e=nv(255*(e+f)),o=nv(255*(o+f)),Wh(t,e,o,1)}function Yh(n){var t=Lh(n),e=parseInt(t[1],16),o=parseInt(t[2],16),r=parseInt(t[3],16);return Wh(e,o,r,1)}function qh(n,t,e,o){var r=parseInt(n,10),i=parseInt(t,10),u=parseInt(e,10),a=parseFloat(o);return Wh(r,i,u,a)}function Kh(n){return"rgba("+n.red()+","+n.green()+","+n.blue()+","+n.alpha()+")"}var Jh=/^#?([a-f\d])([a-f\d])([a-f\d])$/i,$h=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i,Qh=Math.min,Zh=Math.max,nv=Math.round,tv=/^rgb\((\d+),\s*(\d+),\s*(\d+)\)/,ev=/^rgba\((\d+),\s*(\d+),\s*(\d+),\s*(\d?(?:\.\d+)?)\)/,ov=nn(Wh(255,0,0,1)),rv=tinymce.util.Tools.resolve("tinymce.util.LocalStorage"),iv="tinymce-custom-colors";function uv(n){var t=[],u=v.document.createElement("canvas");u.height=1,u.width=1;for(var a=u.getContext("2d"),c=function(n,t){var e=t/255;return("0"+Math.round(n*e+255*(1-e)).toString(16)).slice(-2).toUpperCase()},e=function(n){if(/^[0-9A-Fa-f]{6}$/.test(n))return"#"+n.toUpperCase();a.clearRect(0,0,u.width,u.height),a.fillStyle="#FFFFFF",a.fillStyle=n,a.fillRect(0,0,1,1);var t=a.getImageData(0,0,1,1).data,e=t[0],o=t[1],r=t[2],i=t[3];return"#"+c(e,i)+c(o,i)+c(r,i)},o=0;o<n.length;o+=2)t.push({text:n[o+1],value:e(n[o]),type:"choiceitem"});return t}function av(n){return n.getParam("color_map")}function cv(n,e){var o;return n.dom.getParents(n.selection.getStart(),function(n){var t;(t=n.style["forecolor"===e?"color":"background-color"])&&(o=o||t)}),o}function sv(n){return Math.max(5,Math.ceil(Math.sqrt(n)))}function fv(n){var t=Iv(n),e=sv(t.length);return Mv(n,e)}function lv(t,e,n,o){"custom"===n?jv(t)(function(n){n.each(function(n){Vv(n),t.execCommand("mceApplyTextcolor",e,n),o(n)})},"#000000"):"remove"===n?(o(""),t.execCommand("mceRemoveTextcolor",e)):(o(n),t.execCommand("mceApplyTextcolor",e,n))}function dv(n,t){return n.concat(Rv().concat(function(n){var t="choiceitem",e={type:t,text:"Remove color",icon:"color-swatch-remove-color",value:"remove"};return n?[e,{type:t,text:"Custom color",icon:"color-picker",value:"custom"}]:[e]}(t)))}function mv(t,e){return function(n){n(dv(t,e))}}function gv(n,t,e){var o,r;o="forecolor"===t?"tox-icon-text-color__color":"tox-icon-highlight-bg-color__color",r=e,n.setIconFill(o,r),n.setIconStroke(o,r)}function pv(o,e,r,n,i){o.ui.registry.addSplitButton(e,{tooltip:n,presets:"color",icon:"forecolor"===e?"text-color":"highlight-bg-color",select:function(e){return on.from(cv(o,r)).bind(function(n){return function(n){if("transparent"===n)return on.some(Wh(0,0,0,0));var t=tv.exec(n);if(null!==t)return on.some(qh(t[1],t[2],t[3],"1"));var e=ev.exec(n);return null!==e?on.some(qh(e[1],e[2],e[3],e[4])):on.none()}(n).map(function(n){var t=Uh(n).value();return Vt(e.toLowerCase(),t)})}).getOr(!1)},columns:fv(o),fetch:mv(Iv(o),Fv(o)),onAction:function(n){null!==i.get()&&lv(o,r,i.get(),function(){})},onItemAction:function(n,t){lv(o,r,t,function(n){i.set(n),Lv(o,{name:e,color:n})})},onSetup:function(t){null!==i.get()&&gv(t,e,i.get());function n(n){n.name===e&&gv(t,n.name,n.color)}return o.on("TextColorChange",n),function(){o.off("TextColorChange",n)}}})}function hv(t,n,e,o){t.ui.registry.addNestedMenuItem(n,{text:o,icon:"forecolor"===n?"text-color":"highlight-bg-color",getSubmenuItems:function(){return[{type:"fancymenuitem",fancytype:"colorswatch",onAction:function(n){lv(t,e,n.value,Z)}}]}})}function vv(e,o){return function(n){var t=w(n,o);return S(t,function(n){return{dom:e,components:n}})}}function bv(n,e){var o=[],r=[];return bn(n,function(n,t){e(n,t)?(0<r.length&&o.push(r),r=[],En(n.dom,"innerHtml")&&r.push(n)):r.push(n)}),0<r.length&&o.push(r),S(o,function(n){return{dom:{tag:"div",classes:["tox-collection__group"]},components:n}})}function yv(t,e,n){return{dom:{tag:"div",classes:["tox-menu","tox-collection"].concat(1===t?["tox-collection--list"]:["tox-collection--grid"])},components:[Vg.parts().items({preprocess:function(n){return"auto"!==t&&1<t?vv({tag:"div",classes:["tox-collection__group"]},t)(n):bv(n,function(n,t){return"separator"===e[t].type})}})]}}function xv(n){return{backgroundMenu:"tox-background-menu",selectedMenu:"tox-selected-menu",selectedItem:"tox-collection__item--active",hasIcons:"tox-menu--has-icons",menu:function(n){return"color"===n?"tox-swatches":"tox-menu"}(n),tieredMenu:"tox-tiered-menu"}}function wv(n){var t=xv(n);return{backgroundMenu:t.backgroundMenu,selectedMenu:t.selectedMenu,menu:t.menu,selectedItem:t.selectedItem,item:sp(n)}}function Sv(n,t,e){var o=xv(e);return{dom:{tag:"div",classes:H([[o.tieredMenu]])},markers:wv(e)}}function Cv(n){return n.icon!==undefined||"togglemenuitem"===n.type||"choicemenuitem"===n.type}function kv(n){return v.console.error(le(n)),v.console.log(n),on.none()}function Ov(n,t,e,o,r){var i=function(e){return{dom:{tag:"div",classes:["tox-collection","tox-collection--horizontal"]},components:[Vg.parts().items({preprocess:function(n){return bv(n,function(n,t){return"separator"===e[t].type})}})]}}(e);return{value:n,dom:i.dom,components:i.components,items:e}}function Ev(n,t,e,o,r){var i;return"color"===r?{value:n,dom:(i=function(n){return{dom:{tag:"div",classes:["tox-menu","tox-swatches-menu"]},components:[{dom:{tag:"div",classes:["tox-swatches"]},components:[Vg.parts().items({preprocess:"auto"!==n?vv({tag:"div",classes:["tox-swatches__row"]},n):l})]}]}}(o)).dom,components:i.components,items:e}:"normal"===r&&"auto"===o?{value:n,dom:(i=yv(o,e)).dom,components:i.components,items:e}:"normal"===r&&1===o?{value:n,dom:(i=yv(1,e)).dom,components:i.components,items:e}:"normal"===r?{value:n,dom:(i=yv(o,e)).dom,components:i.components,items:e}:"listpreview"!==r||"auto"===o?{value:n,dom:function(n,t,e){var o=xv(e);return{tag:"div",classes:H([[o.menu,"tox-menu-"+t+"-column"],n?[o.hasIcons]:[]])}}(t,o,r),components:Wv,items:e}:{value:n,dom:(i=function(n){return{dom:{tag:"div",classes:["tox-menu","tox-collection","tox-collection--toolbar","tox-collection--toolbar-lg"]},components:[Vg.parts().items({preprocess:vv({tag:"div",classes:["tox-collection__group"]},n)})]}}(o)).dom,components:i.components,items:e}}function Tv(n,t,e,o,r,i,u,a){var c=function(n){return x(n,Cv)}(t),s=Gv(t,e,o,"color"!==r?"normal":"color",i,u,a);return Ev(n,c,s,o,r)}function Bv(n,t){var e=wv(t);return 1===n?{mode:"menu",moveOnTab:!0}:"auto"===n?{mode:"grid",selector:"."+e.item,initSize:{numColumns:1,numRows:1}}:{mode:"matrix",rowSelector:"."+("color"===t?"tox-swatches__row":"tox-collection__group")}}var Dv="choiceitem",Av=[{type:Dv,text:"Light Green",value:"#BFEDD2"},{type:Dv,text:"Light Yellow",value:"#FBEEB8"},{type:Dv,text:"Light Red",value:"#F8CAC6"},{type:Dv,text:"Light Purple",value:"#ECCAFA"},{type:Dv,text:"Light Blue",value:"#C2E0F4"},{type:Dv,text:"Green",value:"#2DC26B"},{type:Dv,text:"Yellow",value:"#F1C40F"},{type:Dv,text:"Red",value:"#E03E2D"},{type:Dv,text:"Purple",value:"#B96AD9"},{type:Dv,text:"Blue",value:"#3598DB"},{type:Dv,text:"Dark Turquoise",value:"#169179"},{type:Dv,text:"Orange",value:"#E67E23"},{type:Dv,text:"Dark Red",value:"#BA372A"},{type:Dv,text:"Dark Purple",value:"#843FA1"},{type:Dv,text:"Dark Blue",value:"#236FA1"},{type:Dv,text:"Light Gray",value:"#ECF0F1"},{type:Dv,text:"Medium Gray",value:"#CED4D9"},{type:Dv,text:"Gray",value:"#95A5A6"},{type:Dv,text:"Dark Gray",value:"#7E8C8D"},{type:Dv,text:"Navy Blue",value:"#34495E"},{type:Dv,text:"Black",value:"#000000"},{type:Dv,text:"White",value:"#ffffff"}],_v=function iI(t){void 0===t&&(t=10);var n,e=rv.getItem(iv),o=cn(e)?JSON.parse(e):[],r=t-(n=o).length<0?n.slice(0,t):n,i=function(n){r.splice(n,1)};return{add:function(n){(function(n,t){var e=y(n,t);return-1===e?on.none():on.some(e)})(r,n).each(i),r.unshift(n),r.length>t&&r.pop(),rv.setItem(iv,JSON.stringify(r))},state:function(){return r.slice(0)}}}(10),Mv=function(n,t){return n.getParam("color_cols",t,"number")},Fv=function(n){return!1!==n.getParam("custom_colors")},Iv=function(n){var t=av(n);return t!==undefined?uv(t):Av},Rv=function(){return S(_v.state(),function(n){return{type:Dv,text:n,value:n}})},Vv=function(n){_v.add(n)},Nv=function(n){return n.fire("SkinLoaded")},Hv=function(n){return n.fire("ResizeEditor")},Pv=function(n,t){return n.fire("ScrollContent",t)},zv=function(n,t){return n.fire("ResizeContent",t)},Lv=function(n,t){return n.fire("TextColorChange",t)},jv=function(i){return function(n,t){var e,o={colorpicker:t},r=(e=n,function(n){var t=n.getData();e(on.from(t.colorpicker)),n.close()});i.windowManager.open({title:"Color Picker",size:"normal",body:{type:"panel",items:[{type:"colorpicker",name:"colorpicker",label:"Color"}]},buttons:[{type:"cancel",name:"cancel",text:"Cancel"},{type:"submit",name:"save",text:"Save",primary:!0}],initialData:o,onAction:function(n,t){"hex-valid"===t.name&&(t.value?n.enable("ok"):n.disable("ok"))},onSubmit:r,onClose:function(){},onCancel:function(){n(on.none())}})}},Uv={register:function(n){!function(e){e.addCommand("mceApplyTextcolor",function(n,t){!function(n,t,e){n.undoManager.transact(function(){n.focus(),n.formatter.apply(t,{value:e}),n.nodeChanged()})}(e,n,t)}),e.addCommand("mceRemoveTextcolor",function(n){!function(n,t){n.undoManager.transact(function(){n.focus(),n.formatter.remove(t,{value:null},null,!0),n.nodeChanged()})}(e,n)})}(n);var t=ye(null),e=ye(null);pv(n,"forecolor","forecolor","Text color",t),pv(n,"backcolor","hilitecolor","Background color",e),hv(n,"forecolor","forecolor","Text color"),hv(n,"backcolor","hilitecolor","Background color")},getColors:dv,getFetch:mv,colorPickerDialog:jv,getCurrentColor:cv,getColorCols:fv,calcCols:sv},Wv=[Vg.parts().items({})],Gv=function(n,e,o,r,i,u,a){return Bu(S(n,function(t){return"choiceitem"===t.type?function(n){return tt("choicemenuitem",qp,n)}(t).fold(kv,function(n){return on.some(function(t,n,e,o,r,i,u){var a=hp({presets:e,textContent:n?t.text:on.none(),htmlContent:on.none(),ariaLabel:t.text,iconContent:t.icon,shortcutContent:n?t.shortcut:on.none(),checkMark:n?on.some(gp(u.icons)):on.none(),caret:on.none(),value:t.value},u,!0);return Dn(Dh({data:Ah(t),disabled:t.disabled,getApi:function(t){return{setActive:function(n){Cg.set(t,n)},isActive:function(){return Cg.isOn(t)},isDisabled:function(){return Ch.isDisabled(t)},setDisabled:function(n){return Ch.set(t,n)}}},onAction:function(n){return o(t.value)},onSetup:function(n){return n.setActive(r),function(){}},triggersSubmenu:!1,itemBehaviours:[]},a,i),{toggling:{toggleClass:sh,toggleOnExecute:!1,selected:t.active}})}(n,1===o,r,e,u(t.value),i,a))}):on.none()}))};var Xv,Yv,qv={inserttable:function uI(o){var n=Xo("size-label"),i=function(n,t,e){for(var o=[],r=0;r<t;r++){for(var i=[],u=0;u<e;u++)i.push(Mh(r,u,n));o.push(i)}return o}(n,10,10),u=vm({dom:{tag:"span",classes:["tox-insert-table-picker__label"],attributes:{id:n}},components:[Ir("0x0")],behaviours:ba([mg.config({})])});return{type:"widget",data:{value:Xo("widget-id")},dom:{tag:"div",classes:["tox-fancymenuitem"]},autofocus:!0,components:[Vh().widget({dom:{tag:"div",classes:["tox-insert-table-picker"]},components:function(n){return B(n,function(n){return S(n,au)})}(i).concat(u.asSpec()),behaviours:ba([Kd("insert-table-picker",[ho(Nh,function(n,t,e){var o=e.event().row(),r=e.event().col();!function(n,t,e,o,r){for(var i=0;i<o;i++)for(var u=0;u<r;u++)Cg.set(n[i][u],i<=t&&u<=e)}(i,o,r,10,10),mg.set(u.get(n),[function(n,t){return Ir(t+1+"x"+(n+1))}(o,r)])}),ho(Hh,function(n,t,e){o.onAction({numRows:e.event().row()+1,numColumns:e.event().col()+1}),oo(n,hi())})]),lg.config({initSize:{numRows:10,numColumns:10},mode:"flatgrid",selector:'[role="button"]'})])})]}},colorswatch:function aI(t,n){var e=Uv.getColors(n.colorinput.getColors(),n.colorinput.hasCustomColors()),o=n.colorinput.getColorCols(),r=Tv(Xo("menu-value"),e,function(n){t.onAction({value:n})},o,"color",Fh.CLOSE_ON_EXECUTE,function(){return!1},n.shared.providers),i=Dn(N(N({},r),{markers:wv("color"),movement:Bv(o,"color")}));return{type:"widget",data:{value:Xo("widget-id")},dom:{tag:"div",classes:["tox-fancymenuitem"]},autofocus:!0,components:[Vh().widget(Vg.sketch(i))]}}},Kv=function(t,e,n,o,r,i,u,a){void 0===a&&(a=!0);var c=hp({presets:o,textContent:on.none(),htmlContent:n?t.text.map(function(n){return _h(n,e)}):on.none(),ariaLabel:t.text,iconContent:t.icon,shortcutContent:on.none(),checkMark:on.none(),caret:on.none(),value:t.value},u.providers,a,t.icon);return Dh({data:Ah(t),disabled:t.disabled,getApi:function(){return{}},onAction:function(n){return r(t.value,t.meta)},onSetup:function(){return function(){}},triggersSubmenu:!1,itemBehaviours:function(n,t){return V(n,"tooltipWorker").map(function(e){return[oh.config({lazySink:t.getSink,tooltipDom:{tag:"div",classes:["tox-tooltip-worker-container"]},tooltipComponents:[],anchor:function(n){return{anchor:"submenu",item:n,overrides:{maxHeightFunction:Cf}}},mode:"follow-highlight",onShow:function(t,n){e(function(n){oh.setComponents(t,[ru({element:we.fromDom(n)})])})}})]}).getOr([])}(t.meta,u)},c,i)},Jv=function(n){var t=n.text.fold(function(){return{}},function(n){return{innerHtml:n}});return{type:"separator",dom:N({tag:"div",classes:[uh,"tox-collection__group-heading"]},t),components:[]}},$v=function(n,t,e,o){void 0===o&&(o=!0);var r=hp({presets:"normal",iconContent:n.icon,textContent:n.text,htmlContent:on.none(),ariaLabel:n.text,caret:on.none(),checkMark:on.none(),shortcutContent:n.shortcut},e,o);return Dh({data:Ah(n),getApi:function(t){return{isDisabled:function(){return Ch.isDisabled(t)},setDisabled:function(n){return Ch.set(t,n)}}},disabled:n.disabled,onAction:n.onAction,onSetup:n.onSetup,triggersSubmenu:!1,itemBehaviours:[]},r,t)},Qv=function(n,t,e,o,r){void 0===o&&(o=!0),void 0===r&&(r=!1);var i=r?function(n){return{dom:{tag:"div",classes:[dh],innerHtml:ym("chevron-down",n)}}}(e.icons):function(n){return{dom:{tag:"div",classes:[dh],innerHtml:ym("chevron-right",n)}}}(e.icons),u=hp({presets:"normal",iconContent:n.icon,textContent:n.text,htmlContent:on.none(),ariaLabel:n.text,caret:on.some(i),checkMark:on.none(),shortcutContent:n.shortcut},e,o);return Dh({data:Ah(n),getApi:function(t){return{isDisabled:function(){return Ch.isDisabled(t)},setDisabled:function(n){return Ch.set(t,n)}}},disabled:n.disabled,onAction:Z,onSetup:n.onSetup,triggersSubmenu:!0,itemBehaviours:[]},u,t)},Zv=function(n,t,e){var o=hp({iconContent:on.none(),textContent:n.text,htmlContent:on.none(),ariaLabel:n.text,checkMark:on.some(gp(e.icons)),caret:on.none(),shortcutContent:n.shortcut,presets:"normal",meta:n.meta},e,!0);return Dn(Dh({data:Ah(n),disabled:n.disabled,getApi:function(t){return{setActive:function(n){Cg.set(t,n)},isActive:function(){return Cg.isOn(t)},isDisabled:function(){return Ch.isDisabled(t)},setDisabled:function(n){return Ch.set(t,n)}}},onAction:n.onAction,onSetup:n.onSetup,triggersSubmenu:!1,itemBehaviours:[]},o,t),{toggling:{toggleClass:sh,toggleOnExecute:!1,selected:n.active}})},nb=function(t,e){return function(n,t){return Object.prototype.hasOwnProperty.call(n,t)?on.some(n[t]):on.none()}(qv,t.fancytype).map(function(n){return n(t,e)})};(Yv=Xv=Xv||{})[Yv.ContentFocus=0]="ContentFocus",Yv[Yv.UiFocus=1]="UiFocus";function tb(n){return n.icon!==undefined||"togglemenuitem"===n.type||"choicemenuitem"===n.type}function eb(n){return x(n,tb)}function ob(n,t,e,o,r){function i(n){return r?N(N({},n),{shortcut:on.none(),icon:n.text.isSome()?on.none():n.icon}):n}var u=e.shared.providers;switch(n.type){case"menuitem":return function(n){return tt("menuitem",Gp,n)}(n).fold(kv,function(n){return on.some($v(i(n),t,u,o))});case"nestedmenuitem":return function(n){return tt("nestedmenuitem",Xp,n)}(n).fold(kv,function(n){return on.some(Qv(i(n),t,u,o,r))});case"togglemenuitem":return function(n){return tt("togglemenuitem",Yp,n)}(n).fold(kv,function(n){return on.some(Zv(i(n),t,u))});case"separator":return function(n){return tt("separatormenuitem",Lp,n)}(n).fold(kv,function(n){return on.some(Jv(n))});case"fancymenuitem":return function(n){return tt("fancymenuitem",Kp,n)}(n).fold(kv,function(n){return nb(i(n),e)});default:return v.console.error("Unknown item in general menu",n),on.none()}}function rb(n,t,e,o,r,i){var u=1===o,a=!u||eb(n);return Bu(S(n,function(n){return"separator"===n.type?function(n){return tt("Autocompleter.Separator",Lp,n)}(n).fold(kv,function(n){return on.some(Jv(n))}):function(n){return tt("Autocompleter.Item",jp,n)}(n).fold(kv,function(n){return on.some(Kv(n,t,u,"normal",e,r,i,a))})}))}function ib(n,t,e,o,r){var i=eb(t),u=Bu(S(t,function(n){function t(n){return ob(n,e,o,function(n){return r?!n.hasOwnProperty("text"):i}(n),r)}return"nestedmenuitem"===n.type&&n.getSubmenuItems().length<=0?t(An(n,{disabled:!0})):t(n)}));return(r?Ov:Ev)(n,i,u,1,"normal")}function ub(n){return Lg.singleData(n.value,n)}function ab(n){function t(){n.stopPropagation()}function e(){n.preventDefault()}var o=we.fromDom(n.target),r=i(e,t);return function(n,t,e,o,r,i,u){return{target:nn(n),x:nn(t),y:nn(e),stop:o,prevent:r,kill:i,raw:nn(u)}}(o,n.clientX,n.clientY,t,e,r,n)}function cb(n,t,e,o,r){var i=function(t,e){return function(n){t(n)&&e(ab(n))}}(e,o);return n.dom().addEventListener(t,i,r),{unbind:d(mb,n,t,i,r)}}function sb(n,t,e){return function(n,t,e,o){return cb(n,t,e,o,!1)}(n,t,gb,e)}function fb(n,t,e){return function(n,t,e,o){return cb(n,t,e,o,!0)}(n,t,gb,e)}function lb(n,t,e){return Ou(n,t,e).isSome()}var db=function(u,a){function e(){return s.get().isSome()}function c(){e()&&jg.hide(l)}function i(n,t,e,o){n.matchLength=t.text.length;var r=Du(e,function(n){return on.from(n.columns)}).getOr(1);jg.showAt(l,{anchor:"node",root:we.fromDom(u.getBody()),node:on.from(n.element)},Vg.sketch(function(n,t,e,o){var r=e===Xv.ContentFocus?Xl():Gl(),i=Bv(t,o),u=wv(o);return{dom:n.dom,components:n.components,items:n.items,value:n.value,markers:{selectedItem:u.selectedItem,item:u.item},movement:i,fakeFocus:e===Xv.ContentFocus,focusManager:r,menuBehaviours:Jp("auto"!==t?[]:[Ii(function(o,n){ip(o,4,u.item).each(function(n){var t=n.numColumns,e=n.numRows;lg.setGridSize(o,e,t)})})])}}(Ev("autocompleter-value",!0,o,r,"normal"),r,Xv.ContentFocus,"normal"))),jg.getContent(l).each(ad.highlightFirst)}var s=ye(on.none()),f=ye(!1),l=uu(jg.sketch({dom:{tag:"div",classes:["tox-autocompleter"]},components:[],fireDismissalEventInstead:{},inlineBehaviours:ba([Kd("dismissAutocompleter",[lo(Oi(),function(){return d()})])]),lazySink:a.getSink})),d=function(){if(e()){var n=s.get().map(function(n){return n.element});Ip(n.getOr(we.fromDom(u.selection.getNode()))).each(Ro),c(),s.set(on.none()),f.set(!1)}},o=L(function(){return rp(u)}),m=function(n){(function(t){return s.get().map(function(n){return tp(u.dom,u.selection.getRng(),n.triggerChar).bind(function(n){return zp(u,o,n,t)})}).getOrThunk(function(){return op(u,o)})})(n).fold(d,function(r){!function(n){if(!e()){var t=Qg(u,n.range);s.set(on.some({triggerChar:n.triggerChar,element:t,matchLength:n.text.length})),f.set(!1)}}(r.context),r.lookupData.then(function(o){s.get().map(function(n){var t=r.context;if(n.triggerChar===t.triggerChar){var e=function(t,n){var e=Du(n,function(n){return on.from(n.columns)}).getOr(1);return B(n,function(i){var n=i.items;return rb(n,i.matchText,function(o,r){var n=u.selection.getRng();tp(u.dom,n,t).fold(function(){return v.console.error("Lost context. Cursor probably moved")},function(n){var t=n.range,e={hide:function(){d()},reload:function(n){c(),m(n)}};f.set(!0),i.onAction(e,t,o,r),f.set(!1)})},e,Fh.BUBBLE_TO_SANDBOX,a)})}(t.triggerChar,o);0<e.length?i(n,t,o,e):10<=t.text.length-n.matchLength?d():c()}})})})},n={onKeypress:Jg(function(n){27!==n.which&&m()},50),cancelIfNecessary:d,isMenuOpen:function(){return jg.isOpen(l)},isActive:e,isProcessingAction:f.get,getView:function(){return jg.getContent(l)}};Vp(n,u)},mb=function(n,t,e,o){n.dom().removeEventListener(t,e,o)},gb=nn(!0),pb=ab;function hb(e,o){var r=null;return{cancel:function(){null!==r&&(v.clearTimeout(r),r=null)},schedule:function(){for(var n=[],t=0;t<arguments.length;t++)n[t]=arguments[t];r=v.setTimeout(function(){e.apply(null,n),r=null},o)}}}function vb(n){var t=n.raw();return t.touches===undefined||1!==t.touches.length?on.none():on.some(t.touches[0])}function bb(e){var o=ye(on.none()),r=ye(!1),i=hb(function(n){e.triggerEvent(pi(),n),r.set(!0)},400),u=K([{key:Ur(),value:function(e){return vb(e).each(function(n){i.cancel();var t={x:nn(n.clientX),y:nn(n.clientY),target:e.target};i.schedule(e),r.set(!1),o.set(on.some(t))}),on.none()}},{key:Wr(),value:function(n){return i.cancel(),vb(n).each(function(t){o.get().each(function(n){!function(n,t){var e=Math.abs(n.clientX-t.x()),o=Math.abs(n.clientY-t.y());return 5<e||5<o}(t,n)||o.set(on.none())})}),on.none()}},{key:Gr(),value:function(t){i.cancel();return o.get().filter(function(n){return jt(n.target(),t.target())}).map(function(n){return r.get()?(t.prevent(),!1):e.triggerEvent(gi(),t)})}}]);return{fireIfReady:function(t,n){return Nn(u,n).bind(function(n){return n(t)})}}}function yb(t,n){var e=ot("Getting GUI events settings",kb,n),o=bb(e),r=S(["touchstart","touchmove","touchend","touchcancel","gesturestart","mousedown","mouseup","mouseover","mousemove","mouseout","click"].concat(["selectstart","input","contextmenu","change","transitionend","drag","dragstart","dragend","dragenter","dragleave","dragover","drop","keyup"]),function(n){return sb(t,n,function(t){o.fireIfReady(t,n).each(function(n){n&&t.kill()}),e.triggerEvent(n,t)&&t.kill()})}),i=ye(on.none()),u=sb(t,"paste",function(t){o.fireIfReady(t,"paste").each(function(n){n&&t.kill()}),e.triggerEvent("paste",t)&&t.kill(),i.set(on.some(v.setTimeout(function(){e.triggerEvent(fi(),t)},0)))}),a=sb(t,"keydown",function(n){e.triggerEvent("keydown",n)?n.kill():!0===e.stopBackspace&&function(n){return 8===n.raw().which&&!vn(["input","textarea"],Ke(n.target()))&&!lb(n.target(),'[contenteditable="true"]')}(n)&&n.prevent()}),c=function(n,t){return Cb?fb(n,"focus",t):sb(n,"focusin",t)}(t,function(n){e.triggerEvent("focusin",n)&&n.kill()}),s=ye(on.none()),f=function(n,t){return Cb?fb(n,"blur",t):sb(n,"focusout",t)}(t,function(n){e.triggerEvent("focusout",n)&&n.kill(),s.set(on.some(v.setTimeout(function(){e.triggerEvent(si(),n)},0)))});return{unbind:function(){bn(r,function(n){n.unbind()}),a.unbind(),c.unbind(),f.unbind(),u.unbind(),i.get().each(v.clearTimeout),s.get().each(v.clearTimeout)}}}function xb(n,t){var e=Nn(n,"target").map(function(n){return n()}).getOr(t);return ye(e)}function wb(n,o,t,e,r,i){var u=n(o,e),a=function(n,t){var e=ye(!1),o=ye(!1);return{stop:function(){e.set(!0)},cut:function(){o.set(!0)},isStopped:e.get,isCut:o.get,event:nn(n),setSource:t.set,getSource:t.get}}(t,r);return u.fold(function(){return i.logEventNoHandlers(o,e),Ob.complete()},function(t){var e=t.descHandler();return nr(e)(a),a.isStopped()?(i.logEventStopped(o,t.element(),e.purpose()),Ob.stopped()):a.isCut()?(i.logEventCut(o,t.element(),e.purpose()),Ob.complete()):Eo(t.element()).fold(function(){return i.logNoParent(o,t.element(),e.purpose()),Ob.complete()},function(n){return i.logEventResponse(o,t.element(),e.purpose()),Ob.resume(n)})})}function Sb(n,t,e){var o=function(n){var t=ye(!1);return{stop:function(){t.set(!0)},cut:Z,isStopped:t.get,isCut:nn(!1),event:nn(n),setSource:r("Cannot set source of a broadcasted event"),getSource:r("Cannot get source of a broadcasted event")}}(t);return bn(n,function(n){var t=n.descHandler();nr(t)(o)}),o.isStopped()}var Cb=Ht().browser.isFirefox(),kb=qn([dt("triggerEvent"),St("stopBackspace",!0)]),Ob=Tn([{stopped:[]},{resume:["element"]},{complete:[]}]),Eb=function(t,e,o,n,r,i){return wb(t,e,o,n,r,i).fold(function(){return!0},function(n){return Eb(t,e,o,n,r,i)},function(){return!1})},Tb=function(n,t,e,o,r){var i=xb(e,o);return Eb(n,t,e,o,i,r)},Bb=yo("element","descHandler"),Db=function(n,t){return{id:nn(n),descHandler:nn(t)}};function Ab(){var i={};return{registerId:function(o,r,n){Cn(n,function(n,t){var e=i[t]!==undefined?i[t]:{};e[r]=tu(n,o),i[t]=e})},unregisterId:function(e){Cn(i,function(n,t){n.hasOwnProperty(e)&&delete n[e]})},filterByType:function(n){return Nn(i,n).map(function(n){return On(n,function(n,t){return Db(t,n)})}).getOr([])},find:function(n,t,e){var o=Vn(t)(i);return jr(e,function(n){return function(e,o){return qi(o).fold(function(){return on.none()},function(n){var t=Vn(n);return e.bind(t).map(function(n){return Bb(o,n)})})}(o,n)},n)}}}function _b(){function o(n){var t=n.element();return qi(t).fold(function(){return function(n,t){var e=Xo(Gi+n);return Yi(t,e),e}("uid-",n.element())},function(n){return n})}var r=Ab(),i={},u=function(n){qi(n.element()).each(function(n){delete i[n],r.unregisterId(n)})};return{find:function(n,t,e){return r.find(n,t,e)},filter:function(n){return r.filterByType(n)},register:function(n){var t=o(n);$(i,t)&&function(n,t){var e=i[t];if(e!==n)throw new Error('The tagId "'+t+'" is already used by: '+Go(e.element())+"\nCannot use it for: "+Go(n.element())+"\nThe conflicting element is"+($e(e.element())?" ":" not ")+"already in the DOM");u(n)}(n,t);var e=[n];r.registerId(e,t,n.events()),i[t]=n},unregister:u,getById:function(n){return Vn(n)(i)}}}function Mb(e){function o(t){return Eo(e.element()).fold(function(){return!0},function(n){return jt(t,n)})}function r(n,t){return u.find(o,n,t)}function i(e){var n=u.filter(li());bn(n,function(n){var t=n.descHandler();nr(t)(e)})}var u=_b(),n=yb(e.element(),{triggerEvent:function(t,e){return Wu(t,e.target(),function(n){return function(n,t,e,o){var r=e.target();return Tb(n,t,e,r,o)}(r,t,e,n)})}}),a={debugInfo:nn("real"),triggerEvent:function(t,e,o){Wu(t,e,function(n){Tb(r,t,o,e,n)})},triggerFocus:function(t,e){qi(t).fold(function(){wa(t)},function(n){Wu(ci(),t,function(n){!function(n,t,e,o,r){var i=xb(e,o);wb(n,t,e,o,i,r)}(r,ci(),{originator:nn(e),kill:Z,prevent:Z,target:nn(t)},t,n)})})},triggerEscape:function(n,t){a.triggerEvent("keydown",n.element(),t.event())},getByUid:function(n){return g(n)},getByDom:function(n){return p(n)},build:uu,addToGui:function(n){s(n)},removeFromGui:function(n){f(n)},addToWorld:function(n){t(n)},removeFromWorld:function(n){c(n)},broadcast:function(n){l(n)},broadcastOn:function(n,t){d(n,t)},broadcastEvent:function(n,t){m(n,t)},isConnected:nn(!0)},t=function(n){n.connect(a),Pr(n.element())||(u.register(n),bn(n.components(),t),a.triggerEvent(bi(),n.element(),{target:nn(n.element())}))},c=function(n){Pr(n.element())||(bn(n.components(),c),u.unregister(n)),n.disconnect()},s=function(n){hs(e,n)},f=function(n){bs(n)},l=function(n){i({universal:nn(!0),data:nn(n)})},d=function(n,t){i({universal:nn(!1),channels:nn(n),data:nn(t)})},m=function(n,t){var e=u.filter(n);return Sb(e,t)},g=function(n){return u.getById(n).fold(function(){return an.error(new Error('Could not find component with uid: "'+n+'" in system.'))},an.value)},p=function(n){var t=qi(n).getOr("not found");return g(t)};return t(e),{root:nn(e),element:e.element,destroy:function(){n.unbind(),Pi(e.element())},add:s,remove:f,getByUid:g,getByDom:p,addToWorld:t,removeFromWorld:c,broadcast:l,broadcastOn:d,broadcastEvent:m}}function Fb(n){return n.getParam("height",Math.max(n.getElement().offsetHeight,200))}function Ib(n){return n.getParam("width",Rh.DOM.getStyle(n.getElement(),"width"))}function Rb(n){return on.from(n.settings.min_width).filter(mn)}function Vb(n){return on.from(n.settings.min_height).filter(mn)}function Nb(n){return on.from(n.getParam("max_width")).filter(mn)}function Hb(n){return on.from(n.getParam("max_height")).filter(mn)}function Pb(n){return!1!==n.getParam("menubar",!0,"boolean")}function zb(n){var t=n.getParam("toolbar",!0),e=!0===t,o=cn(t),r=fn(t)&&0<t.length;return!Xb(n)&&(r||o||e)}function Lb(t){var n=wn(t.settings),e=C(n,function(n){return/^toolbar([1-9])$/.test(n)}),o=S(e,function(n){return t.getParam(n,!1,"string")}),r=C(o,function(n){return"string"==typeof n});return 0<r.length?on.some(r):on.none()}var jb,Ub,Wb=Dl({name:"Container",factory:function(n){var t=n.dom,e=t.attributes,o=c(t,["attributes"]);return{uid:n.uid,dom:N({tag:"div",attributes:N({role:"presentation"},e)},o),components:n.components,behaviours:Is(n.containerBehaviours),events:n.events,domModification:n.domModification,eventOrder:n.eventOrder}},configFields:[St("components",[]),Fs("containerBehaviours",[]),St("events",{}),St("domModification",{}),St("eventOrder",{})]}),Gb=tinymce.util.Tools.resolve("tinymce.EditorManager"),Xb=function(n){return Lb(n).fold(function(){return 0<n.getParam("toolbar",[],"string[]").length},function(){return!0})};(Ub=jb=jb||{})["default"]="",Ub.floating="floating",Ub.sliding="sliding",Ub.scrolling="scrolling";function Yb(n){return n.getParam("toolbar_drawer","","string")}function qb(n){var t=function(n){return n.getParam("fixed_toolbar_container","","string")}(n);return 0<t.length&&n.inline?ku(zr(),t):on.none()}function Kb(n){return n.inline&&qb(n).isSome()}function Jb(n){return n.inline&&!Pb(n)&&!zb(n)&&!Xb(n)}function $b(n){return(n.getParam("toolbar_sticky",!1,"boolean")||n.inline)&&!Kb(n)&&!Jb(n)}function Qb(n){return n.touches===undefined||1!==n.touches.length?on.none():on.some(n.touches[0])}function Zb(n){return ba([vg.config({onFocus:!1===n.selectOnFocus?Z:function(n){var t=n.element(),e=Er(t);t.dom().setSelectionRange(0,e.length)}})])}function ny(n){return{tag:n.tag,attributes:N({type:"text"},n.inputAttributes),styles:n.inputStyles,classes:n.inputClasses}}var ty,ey,oy,ry,iy=function(e){var o=ye(on.none()),r=ye(!1),i=Jg(function(n){e.fire("longpress",N(N({},n),{type:"longpress"})),r.set(!0)},400);e.on("touchstart",function(e){Qb(e).each(function(n){i.cancel();var t={x:nn(n.clientX),y:nn(n.clientY),target:nn(e.target)};i.throttle(e),r.set(!1),o.set(on.some(t))})},!0),e.on("touchmove",function(n){i.cancel(),Qb(n).each(function(t){o.get().each(function(n){!function(n,t){var e=Math.abs(n.clientX-t.x()),o=Math.abs(n.clientY-t.y());return 5<e||5<o}(t,n)||(o.set(on.none()),r.set(!1),e.fire("longpresscancel"))})})},!0),e.on("touchend touchcancel",function(t){i.cancel(),"touchcancel"!==t.type&&o.get().filter(function(n){return n.target().isEqualNode(t.target)}).each(function(){r.get()?t.preventDefault():e.fire("tap",{touches:t.touches}).isDefaultPrevented()&&t.preventDefault()})},!0)},uy=Xo("form-component-change"),ay=Xo("form-close"),cy=Xo("form-cancel"),sy=Xo("form-action"),fy=Xo("form-submit"),ly=Xo("form-block"),dy=Xo("form-unblock"),my=Xo("form-tabchange"),gy=Xo("form-resize"),py=nn([St("prefix","form-field"),Fs("fieldBehaviours",[Zl,Zf])]),hy=nn([Sl({schema:[ct("dom")],name:"label"}),Sl({factory:{sketch:function(n){return{uid:n.uid,dom:{tag:"span",styles:{display:"none"},attributes:{"aria-hidden":"true"},innerHtml:n.text}}}},schema:[ct("text")],name:"aria-descriptor"}),xl({factory:{sketch:function(n){var t=X(n,["factory"]);return n.factory.sketch(t)}},schema:[ct("factory")],name:"field"})]),vy=Al({name:"FormField",configFields:py(),partFields:hy(),factory:function(r,n,t,e){var o=Rs(r.fieldBehaviours,[Zl.config({find:function(n){return qs(n,r,"field")}}),Zf.config({store:{mode:"manual",getValue:function(n){return Zl.getCurrent(n).bind(Zf.getValue)},setValue:function(n,t){Zl.getCurrent(n).each(function(n){Zf.setValue(n,t)})}}})]),i=co([Ii(function(n,t){var o=Js(n,r,["label","field","aria-descriptor"]);o.field().each(function(e){var t=Xo(r.prefix);o.label().each(function(n){Po(n.element(),"for",t),Po(e.element(),"id",t)}),o["aria-descriptor"]().each(function(n){var t=Xo(r.prefix);Po(n.element(),"id",t),Po(e.element(),"aria-describedby",t)})})})]),u={getField:function(n){return qs(n,r,"field")},getLabel:function(n){return qs(n,r,"label")}};return{uid:r.uid,dom:r.dom,components:n,behaviours:o,events:i,apis:u}},apis:{getField:function(n,t){return n.getField(t)},getLabel:function(n,t){return n.getLabel(t)}}}),by=nn([ht("data"),St("inputAttributes",{}),St("inputStyles",{}),St("tag","input"),St("inputClasses",[]),qu("onSetValue"),St("styles",{}),St("eventOrder",{}),Fs("inputBehaviours",[Zf,vg]),St("selectOnFocus",!0)]),yy=Dl({name:"Input",configFields:by(),factory:function(n,t){return{uid:n.uid,dom:ny(n),components:[],behaviours:function(n){return N(N({},Zb(n)),Rs(n.inputBehaviours,[Zf.config({store:{mode:"manual",initialValue:n.data.getOr(undefined),getValue:function(n){return Er(n.element())},setValue:function(n,t){Er(n.element())!==t&&Tr(n.element(),t)}},onSetValue:n.onSetValue})]))}(n),eventOrder:n.eventOrder}}}),xy={},wy={exports:xy};ty=undefined,ey=xy,oy=wy,ry=undefined,function(n){"object"==typeof ey&&void 0!==oy?oy.exports=n():"function"==typeof ty&&ty.amd?ty([],n):("undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this).EphoxContactWrapper=n()}(function(){return function f(i,u,a){function c(t,n){if(!u[t]){if(!i[t]){var e="function"==typeof ry&&ry;if(!n&&e)return e(t,!0);if(s)return s(t,!0);var o=new Error("Cannot find module '"+t+"'");throw o.code="MODULE_NOT_FOUND",o}var r=u[t]={exports:{}};i[t][0].call(r.exports,function(n){return c(i[t][1][n]||n)},r,r.exports,f,i,u,a)}return u[t].exports}for(var s="function"==typeof ry&&ry,n=0;n<a.length;n++)c(a[n]);return c}({1:[function(n,t,e){var o,r,i=t.exports={};function u(){throw new Error("setTimeout has not been defined")}function a(){throw new Error("clearTimeout has not been defined")}function c(n){if(o===setTimeout)return setTimeout(n,0);if((o===u||!o)&&setTimeout)return o=setTimeout,setTimeout(n,0);try{return o(n,0)}catch(t){try{return o.call(null,n,0)}catch(t){return o.call(this,n,0)}}}!function(){try{o="function"==typeof setTimeout?setTimeout:u}catch(n){o=u}try{r="function"==typeof clearTimeout?clearTimeout:a}catch(n){r=a}}();var s,f=[],l=!1,d=-1;function m(){l&&s&&(l=!1,s.length?f=s.concat(f):d=-1,f.length&&g())}function g(){if(!l){var n=c(m);l=!0;for(var t=f.length;t;){for(s=f,f=[];++d<t;)s&&s[d].run();d=-1,t=f.length}s=null,l=!1,function e(n){if(r===clearTimeout)return clearTimeout(n);if((r===a||!r)&&clearTimeout)return r=clearTimeout,clearTimeout(n);try{return r(n)}catch(t){try{return r.call(null,n)}catch(t){return r.call(this,n)}}}(n)}}function p(n,t){this.fun=n,this.array=t}function h(){}i.nextTick=function(n){var t=new Array(arguments.length-1);if(1<arguments.length)for(var e=1;e<arguments.length;e++)t[e-1]=arguments[e];f.push(new p(n,t)),1!==f.length||l||c(g)},p.prototype.run=function(){this.fun.apply(null,this.array)},i.title="browser",i.browser=!0,i.env={},i.argv=[],i.version="",i.versions={},i.on=h,i.addListener=h,i.once=h,i.off=h,i.removeListener=h,i.removeAllListeners=h,i.emit=h,i.prependListener=h,i.prependOnceListener=h,i.listeners=function(n){return[]},i.binding=function(n){throw new Error("process.binding is not supported")},i.cwd=function(){return"/"},i.chdir=function(n){throw new Error("process.chdir is not supported")},i.umask=function(){return 0}},{}],2:[function(n,l,t){(function(t){function o(){}function i(n){if("object"!=typeof this)throw new TypeError("Promises must be constructed via new");if("function"!=typeof n)throw new TypeError("not a function");this._state=0,this._handled=!1,this._value=undefined,this._deferreds=[],f(n,this)}function r(o,r){for(;3===o._state;)o=o._value;0!==o._state?(o._handled=!0,i._immediateFn(function(){var n=1===o._state?r.onFulfilled:r.onRejected;if(null!==n){var t;try{t=n(o._value)}catch(e){return void a(r.promise,e)}u(r.promise,t)}else(1===o._state?u:a)(r.promise,o._value)})):o._deferreds.push(r)}function u(n,t){try{if(t===n)throw new TypeError("A promise cannot be resolved with itself.");if(t&&("object"==typeof t||"function"==typeof t)){var e=t.then;if(t instanceof i)return n._state=3,n._value=t,void c(n);if("function"==typeof e)return void f(function o(n,t){return function(){n.apply(t,arguments)}}(e,t),n)}n._state=1,n._value=t,c(n)}catch(r){a(n,r)}}function a(n,t){n._state=2,n._value=t,c(n)}function c(n){2===n._state&&0===n._deferreds.length&&i._immediateFn(function(){n._handled||i._unhandledRejectionFn(n._value)});for(var t=0,e=n._deferreds.length;t<e;t++)r(n,n._deferreds[t]);n._deferreds=null}function s(n,t,e){this.onFulfilled="function"==typeof n?n:null,this.onRejected="function"==typeof t?t:null,this.promise=e}function f(n,t){var e=!1;try{n(function(n){e||(e=!0,u(t,n))},function(n){e||(e=!0,a(t,n))})}catch(o){if(e)return;e=!0,a(t,o)}}var n,e;n=this,e=setTimeout,i.prototype["catch"]=function(n){return this.then(null,n)},i.prototype.then=function(n,t){var e=new this.constructor(o);return r(this,new s(n,t,e)),e},i.all=function(n){var c=Array.prototype.slice.call(n);return new i(function(r,i){if(0===c.length)return r([]);var u=c.length;function a(t,n){try{if(n&&("object"==typeof n||"function"==typeof n)){var e=n.then;if("function"==typeof e)return void e.call(n,function(n){a(t,n)},i)}c[t]=n,0==--u&&r(c)}catch(o){i(o)}}for(var n=0;n<c.length;n++)a(n,c[n])})},i.resolve=function(t){return t&&"object"==typeof t&&t.constructor===i?t:new i(function(n){n(t)})},i.reject=function(e){return new i(function(n,t){t(e)})},i.race=function(r){return new i(function(n,t){for(var e=0,o=r.length;e<o;e++)r[e].then(n,t)})},i._immediateFn="function"==typeof t?function(n){t(n)}:function(n){e(n,0)},i._unhandledRejectionFn=function(n){"undefined"!=typeof console&&console&&console.warn("Possible Unhandled Promise Rejection:",n)},i._setImmediateFn=function(n){i._immediateFn=n},i._setUnhandledRejectionFn=function(n){i._unhandledRejectionFn=n},void 0!==l&&l.exports?l.exports=i:n.Promise||(n.Promise=i)}).call(this,n("timers").setImmediate)},{timers:3}],3:[function(c,n,s){(function(n,t){var o=c("process/browser.js").nextTick,e=Function.prototype.apply,r=Array.prototype.slice,i={},u=0;function a(n,t){this._id=n,this._clearFn=t}s.setTimeout=function(){return new a(e.call(setTimeout,window,arguments),clearTimeout)},s.setInterval=function(){return new a(e.call(setInterval,window,arguments),clearInterval)},s.clearTimeout=s.clearInterval=function(n){n.close()},a.prototype.unref=a.prototype.ref=function(){},a.prototype.close=function(){this._clearFn.call(window,this._id)},s.enroll=function(n,t){clearTimeout(n._idleTimeoutId),n._idleTimeout=t},s.unenroll=function(n){clearTimeout(n._idleTimeoutId),n._idleTimeout=-1},s._unrefActive=s.active=function(n){clearTimeout(n._idleTimeoutId);var t=n._idleTimeout;0<=t&&(n._idleTimeoutId=setTimeout(function(){n._onTimeout&&n._onTimeout()},t))},s.setImmediate="function"==typeof n?n:function(n){var t=u++,e=!(arguments.length<2)&&r.call(arguments,1);return i[t]=!0,o(function(){i[t]&&(e?n.apply(null,e):n.call(null),s.clearImmediate(t))}),t},s.clearImmediate="function"==typeof t?t:function(n){delete i[n]}}).call(this,c("timers").setImmediate,c("timers").clearImmediate)},{"process/browser.js":1,timers:3}],4:[function(n,t,e){var o=n("promise-polyfill"),r="undefined"!=typeof window?window:Function("return this;")();t.exports={boltExport:r.Promise||o}},{"promise-polyfill":2}]},{},[4])(4)});function Sy(n){v.setTimeout(function(){throw n},0)}function Cy(n){var t=Ke(n);return vn(Hy,t)}function ky(n,t){var e=t.getRoot(n).getOr(n.element());dr(e,t.invalidClass),t.notify.each(function(t){Cy(n.element())&&Po(n.element(),"aria-invalid",!1),t.getContainer(n).each(function(n){No(n,t.validHtml)}),t.onValid(n)})}function Oy(t,n,e,o){var r=n.getRoot(t).getOr(t.element());fr(r,n.invalidClass),n.notify.each(function(n){Cy(t.element())&&Po(t.element(),"aria-invalid",!0),n.getContainer(t).each(function(n){No(n,o)}),n.onInvalid(t,o)})}function Ey(t,n,e){return n.validator.fold(function(){return Ny(an.value(!0))},function(n){return n.validate(t)})}function Ty(t,e,n){return e.notify.each(function(n){n.onValidate(t)}),Ey(t,e).map(function(n){return t.getSystem().isConnected()?n.fold(function(n){return Oy(t,e,0,n),an.error(n)},function(n){return ky(t,e),an.value(n)}):an.error("No longer in system")})}function By(n,t,e,o){var r=Xy(n,t,e,o);return vy.sketch(r)}function Dy(n,t){return vy.parts().label({dom:{tag:"label",classes:["tox-label"],innerHtml:t.translate(n)}})}var Ay,_y,My=wy.exports.boltExport,Fy=function(n){var e=on.none(),t=[],o=function(n){r()?u(n):t.push(n)},r=function(){return e.isSome()},i=function(n){bn(n,u)},u=function(t){e.each(function(n){v.setTimeout(function(){t(n)},0)})};return n(function(n){e=on.some(n),i(t),t=[]}),{get:o,map:function(e){return Fy(function(t){o(function(n){t(e(n))})})},isReady:r}},Iy={nu:Fy,pure:function(t){return Fy(function(n){n(t)})}},Ry=function(e){function n(n){e().then(n,Sy)}return{map:function(n){return Ry(function(){return e().then(n)})},bind:function(t){return Ry(function(){return e().then(function(n){return t(n).toPromise()})})},anonBind:function(n){return Ry(function(){return e().then(function(){return n.toPromise()})})},toLazy:function(){return Iy.nu(n)},toCached:function(){var n=null;return Ry(function(){return null===n&&(n=e()),n})},toPromise:e,get:n}},Vy=function(n){return Ry(function(){return new My(n)})},Ny=function(n){return Ry(function(){return My.resolve(n)})},Hy=["input","textarea"],Py=/* */Object.freeze({markValid:ky,markInvalid:Oy,query:Ey,run:Ty,isInvalid:function(n,t){var e=t.getRoot(n).getOr(n.element());return mr(e,t.invalidClass)}}),zy=/* */Object.freeze({events:function(t,n){return t.validator.map(function(n){return co([lo(n.onEvent,function(n){Ty(n,t).get(l)})].concat(n.validateOnLoad?[Ii(function(n){Ty(n,t).get(Z)})]:[]))}).getOr({})}}),Ly=[ct("invalidClass"),St("getRoot",on.none),wt("notify",[St("aria","alert"),St("getContainer",on.none),St("validHtml",""),qu("onValid"),qu("onInvalid"),qu("onValidate")]),wt("validator",[ct("validate"),St("onEvent","input"),St("validateOnLoad",!0)])],jy=ya({fields:Ly,name:"invalidating",active:zy,apis:Py,extra:{validation:function(e){return function(n){var t=Zf.getValue(n);return Ny(e(t))}}}}),Uy=/* */Object.freeze({exhibit:function(n,t){return Zo({attributes:K([{key:t.tabAttr,value:"true"}])})}}),Wy=[St("tabAttr","data-alloy-tabstop")],Gy=ya({fields:Wy,name:"tabstopping",active:Uy}),Xy=function(n,t,e,o){return{dom:Yy(e),components:n.toArray().concat([t]),fieldBehaviours:ba(o)}},Yy=function(n){return{tag:"div",classes:["tox-form__group"].concat(n)}},qy=/* */Object.freeze({getCoupled:function(n,t,e,o){return e.getOrCreate(n,t,o)}}),Ky=[st("others",nt(an.value,de()))],Jy=ya({fields:Ky,name:"coupling",apis:qy,state:/* */Object.freeze({init:function(n){var i={},t=nn({});return nu({readState:t,getOrCreate:function(e,o,r){var n=wn(o.others);if(n)return Nn(i,r).getOrThunk(function(){var n=Nn(o.others,r).getOrDie("No information found for coupled component: "+r)(e),t=e.getSystem().build(n);return i[r]=t});throw new Error("Cannot find coupled component: "+r+". Known coupled components: "+JSON.stringify(n,null,2))}})}})}),$y=nn("sink"),Qy=nn(Sl({name:$y(),overrides:nn({dom:{tag:"div"},behaviours:ba([Af.config({useFixed:a})]),events:co([vo(ni()),vo(Yr()),vo(ri())])})}));(_y=Ay=Ay||{})[_y.HighlightFirst=0]="HighlightFirst",_y[_y.HighlightNone=1]="HighlightNone";function Zy(n,t){var e=n.getHotspot(t).getOr(t),o=n.getAnchorOverrides();return n.layouts.fold(function(){return{anchor:"hotspot",hotspot:e,overrides:o}},function(n){return{anchor:"hotspot",hotspot:e,overrides:o,layouts:n}})}function nx(n,t,e,o,r,i,u){return function(n,t,r,e,i,o,u){var a=function(n,t,e){return(0,n.fetch)(e).map(t)}(n,t,e),c=Sw(e,n);return a.map(function(n){return n.bind(function(n){return on.from(Lg.sketch(N(N({},o.menu()),{uid:Yo(""),data:n,highlightImmediately:u===Ay.HighlightFirst,onOpenMenu:function(n,t){var e=c().getOrDie();Af.position(e,r,t),zf.decloak(i)},onOpenSubmenu:function(n,t,e){var o=c().getOrDie();Af.position(o,{anchor:"submenu",item:t},e),zf.decloak(i)},onRepositionMenu:function(n,t,e){var o=c().getOrDie();Af.position(o,r,t),bn(e,function(n){Af.position(o,{anchor:"submenu",item:n.triggeringItem},n.triggeredMenu)})},onEscape:function(){return vg.focus(e),zf.close(i),on.some(!0)}})))})})}(n,t,Zy(n,e),e,o,r,u).map(function(n){return n.fold(function(){zf.isOpen(o)&&zf.close(o)},function(n){zf.cloak(o),zf.open(o,n),i(o)}),o})}function tx(n,t,e,o,r,i,u){return zf.close(o),Ny(o)}function ex(n,t,e,o,r,i){var u=Jy.getCoupled(e,"sandbox");return(zf.isOpen(u)?tx:nx)(n,t,e,u,o,r,i)}function ox(n,t,e){var o=Zl.getCurrent(t).getOr(t),r=mu(n.element());e?yr(o.element(),"min-width",r+"px"):function(n,t){Vu.set(n,t)}(o.element(),r)}function rx(n){zf.getState(n).each(function(n){Lg.repositionMenus(n)})}function ix(o,r,i){var u=Eu(),n=Sw(r,o);return{dom:{tag:"div",classes:o.sandboxClasses,attributes:{id:u.id(),role:"listbox"}},behaviours:tl(o.sandboxBehaviours,[Zf.config({store:{mode:"memory",initialValue:r}}),zf.config({onOpen:function(n,t){var e=Zy(o,r);u.link(r.element()),o.matchWidth&&ox(e.hotspot,t,o.useMinWidth),o.onOpen(e,n,t),i!==undefined&&i.onOpen!==undefined&&i.onOpen(n,t)},onClose:function(n,t){u.unlink(r.element()),i!==undefined&&i.onClose!==undefined&&i.onClose(n,t)},isPartOf:function(n,t,e){return Lu(t,e)||Lu(r,e)},getAttachPoint:function(){return n().getOrDie()}}),Zl.config({find:function(n){return zf.getState(n).bind(function(n){return Zl.getCurrent(n)})}}),lc.config({channels:N(N({},Es({isExtraPart:nn(!1)})),Ts({isExtraPart:nn(!1),doReposition:rx}))})])}}function ux(n){var t=Jy.getCoupled(n,"sandbox");rx(t)}function ax(){return[St("sandboxClasses",[]),nl("sandboxBehaviours",[Zl,lc,zf,Zf])]}function cx(e,t,o){function r(n,t){ro(n,Bw,{value:t})}var n=vy.parts().field({factory:yy,inputClasses:["tox-textfield"],onSetValue:function(n){return jy.run(n).get(function(){})},inputBehaviours:ba([Gy.config({}),jy.config({invalidClass:"tox-textbox-field-invalid",getRoot:function(n){return Eo(n.element())},notify:{onValid:function(n){var t=Zf.getValue(n);ro(n,Tw,{color:t})}},validator:{validateOnLoad:!1,validate:function(n){var t=Zf.getValue(n);if(0===t.length)return Ny(an.value(!0));var e=we.fromTag("span");yr(e,"background-color",t);var o=Sr(e,"background-color").fold(function(){return an.error("blah")},function(n){return an.value(t)});return Ny(o)}}})]),selectOnFocus:!1}),i=e.label.map(function(n){return Dy(n,t.providers)}),u=vm(function(e,o){return Ow.sketch({dom:e.dom,components:e.components,toggleClass:"mce-active",dropdownBehaviours:ba([Ew.config({}),Gy.config({})]),layouts:e.layouts,sandboxClasses:["tox-dialog__popups"],lazySink:o.getSink,fetch:function(t){return Vy(function(n){return e.fetch(n)}).map(function(n){return on.from(ub(Dn(Tv(Xo("menu-value"),n,function(n){e.onItemAction(t,n)},e.columns,e.presets,Fh.CLOSE_ON_EXECUTE,function(){return!1},o.providers),{movement:Bv(e.columns,e.presets)})))})},parts:{menu:Sv(0,0,e.presets)}})}({dom:{tag:"span",attributes:{"aria-label":t.providers.translate("Color swatch")}},layouts:on.some({onRtl:function(){return[ua]},onLtr:function(){return[aa]}}),components:[],fetch:Uv.getFetch(o.getColors(),o.hasCustomColors()),columns:o.getColorCols(),presets:"color",onItemAction:function(n,e){u.getOpt(n).each(function(t){"custom"===e?o.colorPicker(function(n){n.fold(function(){return oo(t,Dw)},function(n){r(t,n),Vv(n)})},"#ffffff"):r(t,"remove"===e?"":e)})}},t));return vy.sketch({dom:{tag:"div",classes:["tox-form__group"]},components:i.toArray().concat([{dom:{tag:"div",classes:["tox-color-input"]},components:[n,u.asSpec()]}]),fieldBehaviours:ba([Kd("form-field-events",[lo(Tw,function(n,t){u.getOpt(n).each(function(n){yr(n.element(),"background-color",t.event().color())}),ro(n,uy,{name:e.name})}),lo(Bw,function(t,e){vy.getField(t).each(function(n){Zf.setValue(n,e.event().value()),Zl.getCurrent(t).each(vg.focus)})}),lo(Dw,function(t,n){vy.getField(t).each(function(n){Zl.getCurrent(t).each(vg.focus)})})])])})}function sx(n,t,e){return{hue:nn(n),saturation:nn(t),value:nn(e)}}function fx(t){return Sl({name:t+"-edge",overrides:function(n){return n.model.manager.edgeActions[t].fold(function(){return{}},function(o){return{events:co([mo(Ur(),o,[n]),mo(Yr(),o,[n]),mo(qr(),function(n,t,e){e.mouseIsDown.get()&&o(n,e)},[n])])}})}})}function lx(n){var t=n.event().raw();if(function(n){return-1!==n.type.indexOf("touch")}(t)){var e=t;return e.touches!==undefined&&1===e.touches.length?on.some(e.touches[0]).map(function(n){return Iu(n.clientX,n.clientY)}):on.none()}var o=t;return o.clientX!==undefined?on.some(o).map(function(n){return Iu(n.clientX,n.clientY)}):on.none()}function dx(n){return n.model.minX}function mx(n){return n.model.minY}function gx(n){return n.model.minX-1}function px(n){return n.model.minY-1}function hx(n){return n.model.maxX}function vx(n){return n.model.maxY}function bx(n){return n.model.maxX+1}function yx(n){return n.model.maxY+1}function xx(n,t,e){return t(n)-e(n)}function wx(n){return xx(n,hx,dx)}function Sx(n){return xx(n,vx,mx)}function Cx(n){return wx(n)/2}function kx(n){return Sx(n)/2}function Ox(n){return n.stepSize}function Ex(n){return n.snapToGrid}function Tx(n){return n.snapStart}function Bx(n){return n.rounded}function Dx(n,t){return n[t+"-edge"]!==undefined}function Ax(n){return Dx(n,"left")}function _x(n){return Dx(n,"right")}function Mx(n){return Dx(n,"top")}function Fx(n){return Dx(n,"bottom")}function Ix(n){return n.model.value.get()}function Rx(n){return{x:nn(n)}}function Vx(n){return{y:nn(n)}}function Nx(n,t){return{x:nn(n),y:nn(t)}}function Hx(n,t){ro(n,jw(),{value:t})}function Px(n,t,e,o){return n<t?n:e<n?e:n===t?t-1:Math.max(t,n-o)}function zx(n,t,e,o){return e<n?n:n<t?t:n===e?e+1:Math.min(e,n+o)}function Lx(n,t,e){return Math.max(t,Math.min(e,n))}function jx(n){var t=n.min,e=n.max,o=n.range,r=n.value,i=n.step,u=n.snap,a=n.snapStart,c=n.rounded,s=n.hasMinEdge,f=n.hasMaxEdge,l=n.minBound,d=n.maxBound,m=n.screenRange,g=s?t-1:t,p=f?e+1:e;if(r<l)return g;if(d<r)return p;var h=function(n,t,e){return Math.min(e,Math.max(n,t))-t}(r,l,d),v=Lx(h/m*o+t,g,p);return u&&t<=v&&v<=e?function(u,e,a,c,n){return n.fold(function(){var n=u-e,t=Math.round(n/c)*c;return Lx(e+t,e-1,a+1)},function(n){var t=(u-n)%c,e=Math.round(t/c),o=Math.floor((u-n)/c),r=Math.floor((a-n)/c),i=n+Math.min(r,o+e)*c;return Math.max(n,i)})}(v,t,e,i,a):c?Math.round(v):v}function Ux(n){var t=n.min,e=n.max,o=n.range,r=n.value,i=n.hasMinEdge,u=n.hasMaxEdge,a=n.maxBound,c=n.maxOffset,s=n.centerMinEdge,f=n.centerMaxEdge;return r<t?i?0:s:e<r?u?a:f:(r-t)/o*c}function Wx(n){return n.element().dom().getBoundingClientRect()}function Gx(n,t){return n[t]}function Xx(n){var t=Wx(n);return Gx(t,Uw)}function Yx(n){var t=Wx(n);return Gx(t,"right")}function qx(n){var t=Wx(n);return Gx(t,"top")}function Kx(n){var t=Wx(n);return Gx(t,"bottom")}function Jx(n){var t=Wx(n);return Gx(t,"width")}function $x(n){var t=Wx(n);return Gx(t,"height")}function Qx(n,t,e){return(n+t)/2-e}function Zx(n,t){var e=Wx(n),o=Wx(t),r=Gx(e,Uw),i=Gx(e,"right"),u=Gx(o,Uw);return Qx(r,i,u)}function nw(n,t){var e=Wx(n),o=Wx(t),r=Gx(e,"top"),i=Gx(e,"bottom"),u=Gx(o,"top");return Qx(r,i,u)}function tw(n,t){ro(n,jw(),{value:t})}function ew(n){return{x:nn(n)}}function ow(n,t,e){var o={min:dx(t),max:hx(t),range:wx(t),value:e,step:Ox(t),snap:Ex(t),snapStart:Tx(t),rounded:Bx(t),hasMinEdge:Ax(t),hasMaxEdge:_x(t),minBound:Xx(n),maxBound:Yx(n),screenRange:Jx(n)};return jx(o)}function rw(e){return function(n,t){return function(n,t,e){var o=(0<n?zx:Px)(Ix(e).x(),dx(e),hx(e),Ox(e));return tw(t,ew(o)),on.some(o)}(e,n,t).map(function(){return!0})}}function iw(n,t,e,o,r,i){var u=function(t,n,e,o,r){var i=Jx(t),u=o.bind(function(n){return on.some(Zx(n,t))}).getOr(0),a=r.bind(function(n){return on.some(Zx(n,t))}).getOr(i),c={min:dx(n),max:hx(n),range:wx(n),value:e,hasMinEdge:Ax(n),hasMaxEdge:_x(n),minBound:Xx(t),minOffset:0,maxBound:Yx(t),maxOffset:i,centerMinEdge:u,centerMaxEdge:a};return Ux(c)}(t,i,e,o,r);return Xx(t)-Xx(n)+u}function uw(n,t){ro(n,jw(),{value:t})}function aw(n){return{y:nn(n)}}function cw(n,t,e){var o={min:mx(t),max:vx(t),range:Sx(t),value:e,step:Ox(t),snap:Ex(t),snapStart:Tx(t),rounded:Bx(t),hasMinEdge:Mx(t),hasMaxEdge:Fx(t),minBound:qx(n),maxBound:Kx(n),screenRange:$x(n)};return jx(o)}function sw(e){return function(n,t){return function(n,t,e){var o=(0<n?zx:Px)(Ix(e).y(),mx(e),vx(e),Ox(e));return uw(t,aw(o)),on.some(o)}(e,n,t).map(function(){return!0})}}function fw(n,t,e,o,r,i){var u=function(t,n,e,o,r){var i=$x(t),u=o.bind(function(n){return on.some(nw(n,t))}).getOr(0),a=r.bind(function(n){return on.some(nw(n,t))}).getOr(i),c={min:mx(n),max:vx(n),range:Sx(n),value:e,hasMinEdge:Mx(n),hasMaxEdge:Fx(n),minBound:qx(t),minOffset:0,maxBound:Kx(t),maxOffset:i,centerMinEdge:u,centerMaxEdge:a};return Ux(c)}(t,i,e,o,r);return qx(t)-qx(n)+u}function lw(n,t){ro(n,jw(),{value:t})}function dw(n,t){return{x:nn(n),y:nn(t)}}function mw(e,o){return function(n,t){return function(n,t,e,o){var r=0<n?zx:Px,i=t?Ix(o).x():r(Ix(o).x(),dx(o),hx(o),Ox(o)),u=t?r(Ix(o).y(),mx(o),vx(o),Ox(o)):Ix(o).y();return lw(e,dw(i,u)),on.some(i)}(e,o,n,t).map(function(){return!0})}}function gw(n){return"<alloy.field."+n+">"}function pw(n){return function(n){return CS[n]}(n)}function hw(n,t,e){return Zf.config(Dn({store:{mode:"manual",getValue:t,setValue:e}},n.map(function(n){return{store:{initialValue:n}}}).getOr({})))}function vw(n,t,e){return hw(n,function(n){return t(n.element())},function(n,t){return e(n.element(),t)})}function bw(e,t){function o(n,t){t.stop()}function r(n){return function(t,e){bn(n,function(n){n(t,e)})}}function i(n,t){if(!Ch.isDisabled(n)){var e=t.event().raw();a(n,e.dataTransfer.files)}}function u(n,t){var e=t.event().raw().target.files;a(n,e)}var a=function(n,t){Zf.setValue(n,function(n){var t=new RegExp("("+".jpg,.jpeg,.png,.gif".split(/\s*,\s*/).join("|")+")$","i");return C(xn(n),function(n){return t.test(n.name)})}(t)),ro(n,uy,{name:e.name})},c=vm({dom:{tag:"input",attributes:{type:"file",accept:"image/*"},styles:{display:"none"}},behaviours:ba([Kd("input-file-events",[vo(ri()),vo(gi())])])}),n=e.label.map(function(n){return Dy(n,t)}),s=vy.parts().field({factory:{sketch:function(n){return{uid:n.uid,dom:{tag:"div",classes:["tox-dropzone-container"]},behaviours:ba([DS([]),xS(),Ch.config({}),Cg.config({toggleClass:"dragenter",toggleOnExecute:!1}),Kd("dropzone-events",[lo("dragenter",r([o,Cg.toggle])),lo("dragleave",r([o,Cg.toggle])),lo("dragover",o),lo("drop",r([o,i])),lo(oi(),u)])]),components:[{dom:{tag:"div",classes:["tox-dropzone"],styles:{}},components:[{dom:{tag:"p",innerHtml:t.translate("Drop an image here")}},Gg.sketch({dom:{tag:"button",innerHtml:t.translate("Browse for an image"),styles:{position:"relative"},classes:["tox-button","tox-button--secondary"]},components:[c.asSpec()],action:function(n){c.get(n).element().dom().click()},buttonBehaviours:ba([Gy.config({})])})]}]}}}});return By(n,s,["tox-form__group--stretched"],[])}function yw(n){return{dom:{tag:"div",styles:{width:"1px",height:"1px",outline:"none"},attributes:{tabindex:"0"},classes:n},behaviours:ba([vg.config({ignore:!0}),Gy.config({})])}}function xw(n,t){ro(n,ni(),{raw:{which:9,shiftKey:t}})}function ww(n,t){var e=RS&&n.sandboxed,o=N(N({},n.label.map(function(n){return{title:n}}).getOr({})),e?{sandbox:"allow-scripts allow-same-origin"}:{}),r=function(o){var r=ye("");return{getValue:function(n){return r.get()},setValue:function(n,t){if(o)Po(n.element(),"srcdoc",t);else{Po(n.element(),"src","javascript:''");var e=n.element().dom().contentWindow.document;e.open(),e.write(t),e.close()}r.set(t)}}}(e),i=n.label.map(function(n){return Dy(n,t)}),u=vy.parts().field({factory:{sketch:function(n){return IS({uid:n.uid,dom:{tag:"iframe",attributes:o},behaviours:ba([Gy.config({}),vg.config({}),TS(on.none(),r.getValue,r.setValue)])})}}});return By(i,u,["tox-form__group--stretched"],[])}var Sw=function(t,n){return t.getSystem().getByUid(n.uid+"-"+$y()).map(function(n){return function(){return an.value(n)}}).getOrThunk(function(){return n.lazySink.fold(function(){return function(){return an.error(new Error("No internal sink is specified, nor could an external sink be found"))}},function(n){return function(){return n(t)}})})},Cw=nn([ct("dom"),ct("fetch"),qu("onOpen"),Ku("onExecute"),St("getHotspot",on.some),St("getAnchorOverrides",nn({})),St("layouts",on.none()),Fs("dropdownBehaviours",[Cg,Jy,lg,vg]),ct("toggleClass"),St("eventOrder",{}),ht("lazySink"),St("matchWidth",!1),St("useMinWidth",!1),ht("role")].concat(ax())),kw=nn([wl({schema:[Gu()],name:"menu",defaults:function(n){return{onExecute:n.onExecute}}}),Qy()]),Ow=Al({name:"Dropdown",configFields:Cw(),partFields:kw(),factory:function(t,n,e,o){function r(n){zf.getState(n).each(function(n){Lg.highlightPrimary(n)})}function i(n,t){return io(n),on.some(!0)}var u,a,c={expand:function(n){Cg.isOn(n)||ex(t,function(n){return n},n,o,Z,Ay.HighlightNone).get(Z)},open:function(n){Cg.isOn(n)||ex(t,function(n){return n},n,o,Z,Ay.HighlightFirst).get(Z)},isOpen:Cg.isOn,close:function(n){Cg.isOn(n)&&ex(t,function(n){return n},n,o,Z,Ay.HighlightFirst).get(Z)},repositionMenus:function(n){Cg.isOn(n)&&ux(n)}};return{uid:t.uid,dom:t.dom,components:n,behaviours:Rs(t.dropdownBehaviours,[Cg.config({toggleClass:t.toggleClass,aria:{mode:"expanded"}}),Jy.config({others:{sandbox:function(n){return ix(t,n,{onOpen:function(){Cg.on(n)},onClose:function(){Cg.off(n)}})}}}),lg.config({mode:"special",onSpace:i,onEnter:i,onDown:function(n,t){if(Ow.isOpen(n)){var e=Jy.getCoupled(n,"sandbox");r(e)}else Ow.open(n);return on.some(!0)},onEscape:function(n,t){return Ow.isOpen(n)?(Ow.close(n),on.some(!0)):on.none()}}),vg.config({})]),events:rm(on.some(function(n){ex(t,function(n){return n},n,o,r,Ay.HighlightFirst).get(Z)})),eventOrder:N(N({},t.eventOrder),(u={},u[di()]=["disabling","toggling","alloy.base.behaviour"],u)),apis:c,domModification:{attributes:N(N({"aria-haspopup":"true"},t.role.fold(function(){return{}},function(n){return{role:n}})),"button"===t.dom.tag?{type:(a="type",Nn(t.dom,"attributes").bind(function(n){return Nn(n,a)})).getOr("button")}:{})}}},apis:{open:function(n,t){return n.open(t)},expand:function(n,t){return n.expand(t)},close:function(n,t){return n.close(t)},isOpen:function(n,t){return n.isOpen(t)},repositionMenus:function(n,t){return n.repositionMenus(t)}}}),Ew=ya({fields:[],name:"unselecting",active:/* */Object.freeze({events:function(n){return co([so(ui(),nn(!0))])},exhibit:function(n,t){return Zo({styles:{"-webkit-user-select":"none","user-select":"none","-ms-user-select":"none","-moz-user-select":"-moz-none"},attributes:{unselectable:"on"}})}})}),Tw=Xo("color-input-change"),Bw=Xo("color-swatch-change"),Dw=Xo("color-picker-cancel"),Aw=nn(Xo("rgb-hex-update")),_w=nn(Xo("slider-update")),Mw=nn(Xo("palette-update")),Fw=Sl({schema:[ct("dom")],name:"label"}),Iw=fx("top-left"),Rw=fx("top"),Vw=fx("top-right"),Nw=fx("right"),Hw=fx("bottom-right"),Pw=fx("bottom"),zw=fx("bottom-left"),Lw=[Fw,fx("left"),Nw,Rw,Pw,Iw,Vw,zw,Hw,xl({name:"thumb",defaults:nn({dom:{styles:{position:"absolute"}}}),overrides:function(n){return{events:co([po(Ur(),n,"spectrum"),po(Wr(),n,"spectrum"),po(Gr(),n,"spectrum"),po(Yr(),n,"spectrum"),po(qr(),n,"spectrum"),po(Jr(),n,"spectrum")])}}}),xl({schema:[At("mouseIsDown",function(){return ye(!1)})],name:"spectrum",overrides:function(e){function o(t,n){return r.getValueFromEvent(n).map(function(n){return r.setValueFrom(t,e,n)})}var r=e.model.manager;return{behaviours:ba([lg.config({mode:"special",onLeft:function(n){return r.onLeft(n,e)},onRight:function(n){return r.onRight(n,e)},onUp:function(n){return r.onUp(n,e)},onDown:function(n){return r.onDown(n,e)}}),vg.config({})]),events:co([lo(Ur(),o),lo(Wr(),o),lo(Yr(),o),lo(qr(),function(n,t){e.mouseIsDown.get()&&o(n,t)})])}}})],jw=nn("slider.change.value"),Uw="left",Ww=rw(-1),Gw=rw(1),Xw=on.none,Yw=on.none,qw={"top-left":on.none(),top:on.none(),"top-right":on.none(),right:on.some(function(n,t){Hx(n,Rx(bx(t)))}),"bottom-right":on.none(),bottom:on.none(),"bottom-left":on.none(),left:on.some(function(n,t){Hx(n,Rx(gx(t)))})},Kw=/* */Object.freeze({setValueFrom:function(n,t,e){var o=ow(n,t,e),r=ew(o);return tw(n,r),o},setToMin:function(n,t){var e=dx(t);tw(n,ew(e))},setToMax:function(n,t){var e=hx(t);tw(n,ew(e))},findValueOfOffset:ow,getValueFromEvent:function(n){return lx(n).map(function(n){return n.left()})},findPositionOfValue:iw,setPositionFromValue:function(n,t,e,o){var r=Ix(e),i=iw(n,o.getSpectrum(n),r.x(),o.getLeftEdge(n),o.getRightEdge(n),e),u=mu(t.element())/2;yr(t.element(),"left",i-u+"px")},onLeft:Ww,onRight:Gw,onUp:Xw,onDown:Yw,edgeActions:qw}),Jw=on.none,$w=on.none,Qw=sw(-1),Zw=sw(1),nS={"top-left":on.none(),top:on.some(function(n,t){Hx(n,Vx(px(t)))}),"top-right":on.none(),right:on.none(),"bottom-right":on.none(),bottom:on.some(function(n,t){Hx(n,Vx(yx(t)))}),"bottom-left":on.none(),left:on.none()},tS=/* */Object.freeze({setValueFrom:function(n,t,e){var o=cw(n,t,e),r=aw(o);return uw(n,r),o},setToMin:function(n,t){var e=mx(t);uw(n,aw(e))},setToMax:function(n,t){var e=vx(t);uw(n,aw(e))},findValueOfOffset:cw,getValueFromEvent:function(n){return lx(n).map(function(n){return n.top()})},findPositionOfValue:fw,setPositionFromValue:function(n,t,e,o){var r=Ix(e),i=fw(n,o.getSpectrum(n),r.y(),o.getTopEdge(n),o.getBottomEdge(n),e),u=su(t.element())/2;yr(t.element(),"top",i-u+"px")},onLeft:Jw,onRight:$w,onUp:Qw,onDown:Zw,edgeActions:nS}),eS=mw(-1,!1),oS=mw(1,!1),rS=mw(-1,!0),iS=mw(1,!0),uS={"top-left":on.some(function(n,t){Hx(n,Nx(gx(t),px(t)))}),top:on.some(function(n,t){Hx(n,Nx(Cx(t),px(t)))}),"top-right":on.some(function(n,t){Hx(n,Nx(bx(t),px(t)))}),right:on.some(function(n,t){Hx(n,Nx(bx(t),kx(t)))}),"bottom-right":on.some(function(n,t){Hx(n,Nx(bx(t),yx(t)))}),bottom:on.some(function(n,t){Hx(n,Nx(Cx(t),yx(t)))}),"bottom-left":on.some(function(n,t){Hx(n,Nx(gx(t),yx(t)))}),left:on.some(function(n,t){Hx(n,Nx(gx(t),kx(t)))})},aS=/* */Object.freeze({setValueFrom:function(n,t,e){var o=ow(n,t,e.left()),r=cw(n,t,e.top()),i=dw(o,r);return lw(n,i),i},setToMin:function(n,t){var e=dx(t),o=mx(t);lw(n,dw(e,o))},setToMax:function(n,t){var e=hx(t),o=vx(t);lw(n,dw(e,o))},getValueFromEvent:function(n){return lx(n)},setPositionFromValue:function(n,t,e,o){var r=Ix(e),i=iw(n,o.getSpectrum(n),r.x(),o.getLeftEdge(n),o.getRightEdge(n),e),u=fw(n,o.getSpectrum(n),r.y(),o.getTopEdge(n),o.getBottomEdge(n),e),a=mu(t.element())/2,c=su(t.element())/2;yr(t.element(),"left",i-a+"px"),yr(t.element(),"top",u-c+"px")},onLeft:eS,onRight:oS,onUp:rS,onDown:iS,edgeActions:uS}),cS=Al({name:"Slider",configFields:[St("stepSize",1),St("onChange",Z),St("onChoose",Z),St("onInit",Z),St("onDragStart",Z),St("onDragEnd",Z),St("snapToGrid",!1),St("rounded",!0),ht("snapStart"),st("model",it("mode",{x:[St("minX",0),St("maxX",100),At("value",function(n){return ye(n.mode.minX)}),ct("getInitialValue"),Qu("manager",Kw)],y:[St("minY",0),St("maxY",100),At("value",function(n){return ye(n.mode.minY)}),ct("getInitialValue"),Qu("manager",tS)],xy:[St("minX",0),St("maxX",100),St("minY",0),St("maxY",100),At("value",function(n){return ye({x:nn(n.mode.minX),y:nn(n.mode.minY)})}),ct("getInitialValue"),Qu("manager",aS)]})),Fs("sliderBehaviours",[lg,Zf]),At("mouseIsDown",function(){return ye(!1)})],partFields:Lw,factory:function(i,n,t,e){function u(n){return Ks(n,i,"thumb")}function a(n){return Ks(n,i,"spectrum")}function o(n){return qs(n,i,"left-edge")}function r(n){return qs(n,i,"right-edge")}function c(n){return qs(n,i,"top-edge")}function s(n){return qs(n,i,"bottom-edge")}function f(n,t){v.setPositionFromValue(n,t,i,{getLeftEdge:o,getRightEdge:r,getTopEdge:c,getBottomEdge:s,getSpectrum:a})}function l(n,t){h.value.set(t);var e=u(n);return f(n,e),i.onChange(n,e,t),on.some(!0)}function d(e){var n=i.mouseIsDown.get();i.mouseIsDown.set(!1),n&&qs(e,i,"thumb").each(function(n){var t=h.value.get();i.onChoose(e,n,t)})}function m(n,t){t.stop(),i.mouseIsDown.set(!0),i.onDragStart(n,u(n))}function g(n,t){t.stop(),i.onDragEnd(n,u(n)),d(n)}var p,h=i.model,v=h.manager;return{uid:i.uid,dom:i.dom,components:n,behaviours:Rs(i.sliderBehaviours,[lg.config({mode:"special",focusIn:function(n){return qs(n,i,"spectrum").map(lg.focusIn).map(nn(!0))}}),Zf.config({store:{mode:"manual",getValue:function(n){return h.value.get()}}}),lc.config({channels:(p={},p[Uf()]={onReceive:d},p)})]),events:co([lo(jw(),function(n,t){l(n,t.event().value())}),Ii(function(n,t){var e=h.getInitialValue();h.value.set(e);var o=u(n);f(n,o);var r=a(n);i.onInit(n,o,r,h.value.get())}),lo(Ur(),m),lo(Gr(),g),lo(Yr(),m),lo(Jr(),g)]),apis:{resetToMin:function(n){v.setToMin(n,i)},resetToMax:function(n){v.setToMax(n,i)},changeValue:l,refresh:f},domModification:{styles:{position:"relative"}}}},apis:{resetToMin:function(n,t){n.resetToMin(t)},resetToMax:function(n,t){n.resetToMax(t)},refresh:function(n,t){n.refresh(t)}}}),sS=function(n,t){var e=cS.parts().spectrum({dom:{tag:"div",classes:[t("hue-slider-spectrum")],attributes:{role:"presentation"}}}),o=cS.parts().thumb({dom:{tag:"div",classes:[t("hue-slider-thumb")],attributes:{role:"presentation"}}});return cS.sketch({dom:{tag:"div",classes:[t("hue-slider")],attributes:{role:"presentation"}},rounded:!1,model:{mode:"y",getInitialValue:nn({y:nn(0)})},components:[e,o],sliderBehaviours:ba([vg.config({})]),onChange:function(n,t,e){ro(n,_w(),{value:e})}})},fS=[Fs("formBehaviours",[Zf])],lS=function(o,n,t){return{uid:o.uid,dom:o.dom,components:n,behaviours:Rs(o.formBehaviours,[Zf.config({store:{mode:"manual",getValue:function(n){var t=$s(n,o);return P(t,function(n,t){return n().bind(function(n){return function(n,t){return n.fold(function(){return an.error(t)},an.value)}(Zl.getCurrent(n),"missing current")}).map(Zf.getValue)})},setValue:function(e,n){Cn(n,function(t,n){qs(e,o,n).each(function(n){Zl.getCurrent(n).each(function(n){Zf.setValue(n,t)})})})}}})]),apis:{getField:function(n,t){return qs(n,o,t).bind(Zl.getCurrent)}}}},dS={getField:$o(function(n,t,e){return n.getField(t,e)}),sketch:function(n){var e,t=(e=[],{field:function(n,t){return e.push(n),Us("form",gw(n),t)},record:function(){return e}}),o=n(t),r=t.record(),i=S(r,function(n){return xl({name:n,pname:gw(n)})});return of("form",fS,i,lS,o)}},mS=Xo("valid-input"),gS=Xo("invalid-input"),pS=Xo("validating-input"),hS="colorcustom.rgb.",vS=function(d,m,g,p){function h(n,t,e,o,r){var i=d(hS+"range"),u=[vy.parts().label({dom:{tag:"label",innerHtml:e,attributes:{"aria-label":o}}}),vy.parts().field({data:r,factory:yy,inputAttributes:N({type:"text"},"hex"===t?{"aria-live":"polite"}:{}),inputClasses:[m("textfield")],inputBehaviours:ba([function(t,o){return jy.config({invalidClass:m("invalid"),notify:{onValidate:function(n){ro(n,pS,{type:t})},onValid:function(n){ro(n,mS,{type:t,value:Zf.getValue(n)})},onInvalid:function(n){ro(n,gS,{type:t,value:Zf.getValue(n)})}},validator:{validate:function(n){var t=Zf.getValue(n),e=o(t)?an.value(!0):an.error(d("aria.input.invalid"));return Ny(e)},validateOnLoad:!1}})}(t,n),Gy.config({})]),onSetValue:function(n){jy.isInvalid(n)&&jy.run(n).get(Z)}})],a="hex"!==t?[vy.parts()["aria-descriptor"]({text:i})]:[];return{dom:{tag:"div",attributes:{role:"presentation"}},components:u.concat(a)}}function v(n,t){var e=t.red(),o=t.green(),r=t.blue();Zf.setValue(n,{red:e,green:o,blue:r})}function b(n,t){y.getOpt(n).each(function(n){yr(n.element(),"background-color","#"+t.value())})}var y=vm({dom:{tag:"div",classes:[m("rgba-preview")],styles:{"background-color":"white"},attributes:{role:"presentation"}}});return Dl({factory:function(){function r(n){return u[n]().get()}function i(n,t){u[n]().set(t)}function t(n,t){var e=t.event();"hex"!==e.type()?i(e.type(),on.none()):p(n)}function o(e,n,t){var o=parseInt(t,10);i(n,on.some(o)),r("red").bind(function(e){return r("green").bind(function(t){return r("blue").map(function(n){return Wh(e,t,n,1)})})}).each(function(n){var t=function(t,n){var e=Uh(n);return dS.getField(t,"hex").each(function(n){vg.isFocused(n)||Zf.setValue(t,{hex:e.value()})}),e}(e,n);b(e,t)})}function e(n,t){var e=t.event();!function(n){return"hex"===n.type()}(e)?o(n,e.type(),e.value()):function(n,t){g(n);var e=Ph(t);i("hex",on.some(t));var o=Yh(e);v(n,o),a(o),ro(n,Aw(),{hex:e}),b(n,e)}(n,e.value())}function n(n){return{label:d(hS+n+".label"),description:d(hS+n+".description")}}var u={red:nn(ye(on.some(255))),green:nn(ye(on.some(255))),blue:nn(ye(on.some(255))),hex:nn(ye(on.some("ffffff")))},a=function(n){var t=n.red(),e=n.green(),o=n.blue();i("red",on.some(t)),i("green",on.some(e)),i("blue",on.some(o))},c=n("red"),s=n("green"),f=n("blue"),l=n("hex");return Dn(dS.sketch(function(n){return{dom:{tag:"form",classes:[m("rgb-form")],attributes:{"aria-label":d("aria.color.picker")}},components:[n.field("red",vy.sketch(h(Gh,"red",c.label,c.description,255))),n.field("green",vy.sketch(h(Gh,"green",s.label,s.description,255))),n.field("blue",vy.sketch(h(Gh,"blue",f.label,f.description,255))),n.field("hex",vy.sketch(h(zh,"hex",l.label,l.description,"ffffff"))),y.asSpec()],formBehaviours:ba([jy.config({invalidClass:m("form-invalid")}),Kd("rgb-form-events",[lo(mS,e),lo(gS,t),lo(pS,t)])])}}),{apis:{updateHex:function(n,t){Zf.setValue(n,{hex:t.value()}),function(n,t){var e=Yh(t);v(n,e),a(e)}(n,t),b(n,t)}}})},name:"RgbForm",configFields:[],apis:{updateHex:function(n,t,e){n.updateHex(t,e)}},extraApis:{}})},bS=function(n,o){function r(n,t){var e=n.width,o=n.height,r=n.getContext("2d");if(null!==r){r.fillStyle=t,r.fillRect(0,0,e,o);var i=r.createLinearGradient(0,0,e,0);i.addColorStop(0,"rgba(255,255,255,1)"),i.addColorStop(1,"rgba(255,255,255,0)"),r.fillStyle=i,r.fillRect(0,0,e,o);var u=r.createLinearGradient(0,0,0,o);u.addColorStop(0,"rgba(0,0,0,0)"),u.addColorStop(1,"rgba(0,0,0,1)"),r.fillStyle=u,r.fillRect(0,0,e,o)}}var i=cS.parts().spectrum({dom:{tag:"canvas",attributes:{role:"presentation"},classes:[o("sv-palette-spectrum")]}}),u=cS.parts().thumb({dom:{tag:"div",attributes:{role:"presentation"},classes:[o("sv-palette-thumb")],innerHtml:"<div class="+o("sv-palette-inner-thumb")+' role="presentation"></div>'}});return Dl({factory:function(n){var t=nn({x:nn(0),y:nn(0)}),e=ba([Zl.config({find:on.some}),vg.config({})]);return cS.sketch({dom:{tag:"div",attributes:{role:"presentation"},classes:[o("sv-palette")]},model:{mode:"xy",getInitialValue:t},rounded:!1,components:[i,u],onChange:function(n,t,e){ro(n,Mw(),{value:e})},onInit:function(n,t,e,o){r(e.element().dom(),Kh(ov()))},sliderBehaviours:e})},name:"SaturationBrightnessPalette",configFields:[],apis:{setRgba:function(n,t,e){!function(n,t){var e=n.components()[0].element().dom();r(e,Kh(t))}(t,e)}},extraApis:{}})},yS=function(l,d){return Dl({name:"ColourPicker",configFields:[ct("dom"),St("onValidHex",Z),St("onInvalidHex",Z)],factory:function(n){function t(n,e){u.getOpt(n).each(function(n){var t=Yh(e);s.paletteRgba().set(t),i.setRgba(n,t)})}function e(n,t){f.getOpt(n).each(function(n){r.updateHex(n,t)})}function a(t,e,n){bn(n,function(n){n(t,e)})}var o,c,r=vS(l,d,n.onValidHex,n.onInvalidHex),i=bS(l,d),s={paletteRgba:nn(ye(ov()))},u=vm(i.sketch({})),f=vm(r.sketch({}));return{uid:n.uid,dom:n.dom,components:[u.asSpec(),sS(l,d),f.asSpec()],behaviours:ba([Kd("colour-picker-events",[lo(Mw(),(c=[e],function(n,t){var e=t.event().value(),o=function(n){var t,e=0,o=0,r=n.red()/255,i=n.green()/255,u=n.blue()/255,a=Math.min(r,Math.min(i,u)),c=Math.max(r,Math.max(i,u));return a===c?sx(0,0,100*(o=a)):(e=60*((e=r===a?3:u===a?1:5)-(r===a?i-u:u===a?r-i:u-r)/(c-a)),t=(c-a)/c,o=c,sx(Math.round(e),Math.round(100*t),Math.round(100*o)))}(s.paletteRgba().get()),r=sx(o.hue(),e.x(),100-e.y()),i=Xh(r),u=Uh(i);a(n,u,c)})),lo(_w(),(o=[t,e],function(n,t){var e=function(n){var t=sx((100-n)/100*360,100,100),e=Xh(t);return Uh(e)}(t.event().value().y());a(n,e,o)}))]),Zl.config({find:function(n){return f.getOpt(n)}}),lg.config({mode:"acyclic"})])}}})},xS=function(){return Zl.config({find:on.some})},wS=function(n){return Zl.config({find:n.getOpt})},SS=function(n){return Zl.config({find:function(t){return Do(t.element(),n).bind(function(n){return t.getSystem().getByDom(n).toOption()})}})},CS={"colorcustom.rgb.red.label":"R","colorcustom.rgb.red.description":"Red component","colorcustom.rgb.green.label":"G","colorcustom.rgb.green.description":"Green component","colorcustom.rgb.blue.label":"B","colorcustom.rgb.blue.description":"Blue component","colorcustom.rgb.hex.label":"#","colorcustom.rgb.hex.description":"Hex color code","colorcustom.rgb.range":"Range 0 to 255","colorcustom.sb.saturation":"Saturation","colorcustom.sb.brightness":"Brightness","colorcustom.sb.picker":"Saturation and Brightness Picker","colorcustom.sb.palette":"Saturation and Brightness Palette","colorcustom.sb.instructions":"Use arrow keys to select saturation and brightness, on x and y axes","colorcustom.hue.hue":"Hue","colorcustom.hue.slider":"Hue Slider","colorcustom.hue.palette":"Hue Palette","colorcustom.hue.instructions":"Use arrow keys to select a hue","aria.color.picker":"Color Picker","aria.input.invalid":"Invalid input"},kS=tinymce.util.Tools.resolve("tinymce.Resource"),OS=re([St("preprocess",l),St("postprocess",l)]),ES=function(r,n){var i=ot("RepresentingConfigs.memento processors",OS,n);return Zf.config({store:{mode:"manual",getValue:function(n){var t=r.get(n),e=Zf.getValue(t);return i.postprocess(e)},setValue:function(n,t){var e=i.preprocess(t),o=r.get(n);Zf.setValue(o,e)}}})},TS=hw,BS=function(n){return vw(n,Vo,No)},DS=function(n){return Zf.config({store:{mode:"memory",initialValue:n}})},AS=Xo("alloy-fake-before-tabstop"),_S=Xo("alloy-fake-after-tabstop"),MS=function(n){return lb(n,["."+AS,"."+_S].join(","),nn(!1))},FS=function(n,t){var e=t.element();mr(e,AS)?xw(n,!0):mr(e,_S)&&xw(n,!1)},IS=function(n){return{dom:{tag:"div",classes:["tox-navobj"]},components:[yw([AS]),n,yw([_S])],behaviours:ba([SS(1)])}},RS=!(Ht().browser.isIE()||Ht().browser.isEdge());function VS(n,t){return PS(v.document.createElement("canvas"),n,t)}function NS(n){var t=VS(n.width,n.height);return HS(t).drawImage(n,0,0),t}function HS(n){return n.getContext("2d")}function PS(n,t,e){return n.width=t,n.height=e,n}function zS(n){return n.naturalWidth||n.width}function LS(n){return n.naturalHeight||n.height}var jS,US,WS=window.Promise?window.Promise:(jS=GS.immediateFn||"function"==typeof window.setImmediate&&window.setImmediate||function(n){v.setTimeout(n,1)},US=Array.isArray||function(n){return"[object Array]"===Object.prototype.toString.call(n)},GS.prototype["catch"]=function(n){return this.then(null,n)},GS.prototype.then=function(e,o){var r=this;return new GS(function(n,t){YS.call(r,new $S(e,o,n,t))})},GS.all=function(){for(var n=[],t=0;t<arguments.length;t++)n[t]=arguments[t];var c=Array.prototype.slice.call(1===n.length&&US(n[0])?n[0]:n);return new GS(function(r,i){if(0===c.length)return r([]);var u=c.length;function a(t,n){try{if(n&&("object"==typeof n||"function"==typeof n)){var e=n.then;if("function"==typeof e)return void e.call(n,function(n){a(t,n)},i)}c[t]=n,0==--u&&r(c)}catch(o){i(o)}}for(var n=0;n<c.length;n++)a(n,c[n])})},GS.resolve=function(t){return t&&"object"==typeof t&&t.constructor===GS?t:new GS(function(n){n(t)})},GS.reject=function(e){return new GS(function(n,t){t(e)})},GS.race=function(r){return new GS(function(n,t){for(var e=0,o=r;e<o.length;e++)o[e].then(n,t)})},GS);function GS(n){if("object"!=typeof this)throw new TypeError("Promises must be constructed via new");if("function"!=typeof n)throw new TypeError("not a function");this._state=null,this._value=null,this._deferreds=[],QS(n,XS(qS,this),XS(KS,this))}function XS(n,t){return function(){return n.apply(t,arguments)}}function YS(o){var r=this;null!==this._state?jS(function(){var n=r._state?o.onFulfilled:o.onRejected;if(null!==n){var t;try{t=n(r._value)}catch(e){return void o.reject(e)}o.resolve(t)}else(r._state?o.resolve:o.reject)(r._value)}):this._deferreds.push(o)}function qS(n){try{if(n===this)throw new TypeError("A promise cannot be resolved with itself.");if(n&&("object"==typeof n||"function"==typeof n)){var t=n.then;if("function"==typeof t)return void QS(XS(t,n),XS(qS,this),XS(KS,this))}this._state=!0,this._value=n,JS.call(this)}catch(e){KS.call(this,e)}}function KS(n){this._state=!1,this._value=n,JS.call(this)}function JS(){for(var n=0,t=this._deferreds;n<t.length;n++){var e=t[n];YS.call(this,e)}this._deferreds=[]}function $S(n,t,e,o){this.onFulfilled="function"==typeof n?n:null,this.onRejected="function"==typeof t?t:null,this.resolve=e,this.reject=o}function QS(n,t,e){var o=!1;try{n(function(n){o||(o=!0,t(n))},function(n){o||(o=!0,e(n))})}catch(r){if(o)return;o=!0,e(r)}}function ZS(e){return new WS(function(n,t){(function p(n){var t=n.split(","),e=/data:([^;]+)/.exec(t[0]);if(!e)return on.none();for(var o=e[1],r=t[1],i=v.atob(r),u=i.length,a=Math.ceil(u/1024),c=new Array(a),s=0;s<a;++s){for(var f=1024*s,l=Math.min(1024+f,u),d=new Array(l-f),m=f,g=0;m<l;++g,++m)d[g]=i[m].charCodeAt(0);c[s]=new Uint8Array(d)}return on.some(new v.Blob(c,{type:o}))})(e).fold(function(){t("uri is not base64: "+e)},n)})}function nC(n,o,r){return o=o||"image/png",v.HTMLCanvasElement.prototype.toBlob?new WS(function(t,e){n.toBlob(function(n){n?t(n):e()},o,r)}):ZS(n.toDataURL(o,r))}function tC(n){return function t(a){return new WS(function(n,t){var e=v.URL.createObjectURL(a),o=new v.Image,r=function(){o.removeEventListener("load",i),o.removeEventListener("error",u)};function i(){r(),n(o)}function u(){r(),t("Unable to load data of type "+a.type+": "+e)}o.addEventListener("load",i),o.addEventListener("error",u),o.src=e,o.complete&&i()})}(n).then(function(n){!function e(n){v.URL.revokeObjectURL(n.src)}(n);var t=VS(zS(n),LS(n));return HS(t).drawImage(n,0,0),t})}function eC(n,t,e){var o=t.type;function r(t,e){return n.then(function(n){return function o(n,t,e){return t=t||"image/png",n.toDataURL(t,e)}(n,t,e)})}return{getType:nn(o),toBlob:function i(){return WS.resolve(t)},toDataURL:function u(){return e},toBase64:function a(){return e.split(",")[1]},toAdjustedBlob:function c(t,e){return n.then(function(n){return nC(n,t,e)})},toAdjustedDataURL:r,toAdjustedBase64:function s(n,t){return r(n,t).then(function(n){return n.split(",")[1]})},toCanvas:function f(){return n.then(NS)}}}function oC(t){return function n(e){return new WS(function(n){var t=new v.FileReader;t.onloadend=function(){n(t.result)},t.readAsDataURL(e)})}(t).then(function(n){return eC(tC(t),t,n)})}function rC(t,n){return nC(t,n).then(function(n){return eC(WS.resolve(t),n,t.toDataURL())})}function iC(n,t,e){var o="string"==typeof n?parseFloat(n):n;return e<o?o=e:o<t&&(o=t),o}var uC=[0,.01,.02,.04,.05,.06,.07,.08,.1,.11,.12,.14,.15,.16,.17,.18,.2,.21,.22,.24,.25,.27,.28,.3,.32,.34,.36,.38,.4,.42,.44,.46,.48,.5,.53,.56,.59,.62,.65,.68,.71,.74,.77,.8,.83,.86,.89,.92,.95,.98,1,1.06,1.12,1.18,1.24,1.3,1.36,1.42,1.48,1.54,1.6,1.66,1.72,1.78,1.84,1.9,1.96,2,2.12,2.25,2.37,2.5,2.62,2.75,2.87,3,3.2,3.4,3.6,3.8,4,4.3,4.7,4.9,5,5.5,6,6.5,6.8,7,7.3,7.5,7.8,8,8.4,8.7,9,9.4,9.6,9.8,10];function aC(n,t){for(var e,o=[],r=new Array(25),i=0;i<5;i++){for(var u=0;u<5;u++)o[u]=t[u+5*i];for(u=0;u<5;u++){for(var a=e=0;a<5;a++)e+=n[u+5*a]*o[a];r[u+5*i]=e}}return r}function cC(t,e){return t.toCanvas().then(function(n){return function i(n,t,e){var o=HS(n);var r=function B(n,t){for(var e,o,r,i,u=n.data,a=t[0],c=t[1],s=t[2],f=t[3],l=t[4],d=t[5],m=t[6],g=t[7],p=t[8],h=t[9],v=t[10],b=t[11],y=t[12],x=t[13],w=t[14],S=t[15],C=t[16],k=t[17],O=t[18],E=t[19],T=0;T<u.length;T+=4)e=u[T],o=u[T+1],r=u[T+2],i=u[T+3],u[T]=e*a+o*c+r*s+i*f+l,u[T+1]=e*d+o*m+r*g+i*p+h,u[T+2]=e*v+o*b+r*y+i*x+w,u[T+3]=e*S+o*C+r*k+i*O+E;return n}(o.getImageData(0,0,n.width,n.height),e);return o.putImageData(r,0,0),rC(n,t)}(n,t.getType(),e)})}function sC(t,e){return t.toCanvas().then(function(n){return function u(n,t,e){var o=HS(n);var r=o.getImageData(0,0,n.width,n.height),i=o.getImageData(0,0,n.width,n.height);return i=function w(n,t,e){function o(n,t,e){return e<n?n=e:n<t&&(n=t),n}for(var r=Math.round(Math.sqrt(e.length)),i=Math.floor(r/2),u=n.data,a=t.data,c=n.width,s=n.height,f=0;f<s;f++)for(var l=0;l<c;l++){for(var d=0,m=0,g=0,p=0;p<r;p++)for(var h=0;h<r;h++){var v=o(l+h-i,0,c-1),b=4*(o(f+p-i,0,s-1)*c+v),y=e[p*r+h];d+=u[b]*y,m+=u[1+b]*y,g+=u[2+b]*y}var x=4*(f*c+l);a[x]=o(d,0,255),a[1+x]=o(m,0,255),a[2+x]=o(g,0,255)}return t}(r,i,e),o.putImageData(i,0,0),rC(n,t)}(n,t.getType(),e)})}function fC(e){return function(n,t){return cC(n,e([1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1],t))}}function lC(n,t,e,o){return cC(n,function r(n,t,e,o){return aC(n,[t=iC(t,0,2),0,0,0,0,0,e=iC(e,0,2),0,0,0,0,0,o=iC(o,0,2),0,0,0,0,0,1,0,0,0,0,0,1])}([1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1],t,e,o))}var dC=function cI(t){return function(n){return cC(n,t)}}([-1,0,0,0,255,0,-1,0,0,255,0,0,-1,0,255,0,0,0,1,0,0,0,0,0,1]),mC=fC(function sI(n,t){return aC(n,[1,0,0,0,t=iC(255*t,-255,255),0,1,0,0,t,0,0,1,0,t,0,0,0,1,0,0,0,0,0,1])}),gC=fC(function fI(n,t){var e;return t=iC(t,-1,1),aC(n,[(e=(t*=100)<0?127+t/100*127:127*(e=0===(e=t%1)?uC[t]:uC[Math.floor(t)]*(1-e)+uC[Math.floor(t)+1]*e)+127)/127,0,0,0,.5*(127-e),0,e/127,0,0,.5*(127-e),0,0,e/127,0,.5*(127-e),0,0,0,1,0,0,0,0,0,1])}),pC=function lI(t){return function(n){return sC(n,t)}}([0,-1,0,-1,5,-1,0,-1,0]),hC=function dI(c){return function(t,e){return t.toCanvas().then(function(n){return function(n,t,e){var o=HS(n),r=new Array(256);for(var i=0;i<r.length;i++)r[i]=c(i,e);var u=function a(n,t){for(var e=n.data,o=0;o<e.length;o+=4)e[o]=t[e[o]],e[o+1]=t[e[o+1]],e[o+2]=t[e[o+2]];return n}(o.getImageData(0,0,n.width,n.height),r);return o.putImageData(u,0,0),rC(n,t)}(n,t.getType(),e)})}}(function(n,t){return 255*Math.pow(n/255,1-t)});function vC(n,t,e){var o=zS(n),r=LS(n),i=t/o,u=e/r,a=!1;(i<.5||2<i)&&(i=i<.5?.5:2,a=!0),(u<.5||2<u)&&(u=u<.5?.5:2,a=!0);var c=function s(u,a,c){return new WS(function(n){var t=zS(u),e=LS(u),o=Math.floor(t*a),r=Math.floor(e*c),i=VS(o,r);HS(i).drawImage(u,0,0,t,e,0,0,o,r),n(i)})}(n,i,u);return a?c.then(function(n){return vC(n,t,e)}):c}function bC(t,e){return t.toCanvas().then(function(n){return function a(n,t,e){var o=VS(n.width,n.height),r=HS(o),i=0,u=0;90!==(e=e<0?360+e:e)&&270!==e||PS(o,o.height,o.width);90!==e&&180!==e||(i=o.width);270!==e&&180!==e||(u=o.height);return r.translate(i,u),r.rotate(e*Math.PI/180),r.drawImage(n,0,0),rC(o,t)}(n,t.getType(),e)})}function yC(t,e){return t.toCanvas().then(function(n){return function i(n,t,e){var o=VS(n.width,n.height),r=HS(o);"v"===e?(r.scale(1,-1),r.drawImage(n,0,-o.height)):(r.scale(-1,1),r.drawImage(n,-o.width,0));return rC(o,t)}(n,t.getType(),e)})}function xC(t,e,o,r,i){return t.toCanvas().then(function(n){return function a(n,t,e,o,r,i){var u=VS(r,i);return HS(u).drawImage(n,-e,-o),rC(u,t)}(n,t.getType(),e,o,r,i)})}function wC(n){return dC(n)}function SC(n){return pC(n)}function CC(n,t){return hC(n,t)}function kC(n,t){return mC(n,t)}function OC(n,t){return gC(n,t)}function EC(n,t){return yC(n,t)}function TC(n,t,e){return function r(t,e,o){return t.toCanvas().then(function(n){return vC(n,e,o).then(function(n){return rC(n,t.getType())})})}(n,t,e)}function BC(n,t){return bC(n,t)}function DC(n,t){return N({dom:{tag:"span",innerHtml:n,classes:["tox-icon","tox-tbtn__icon-wrap"]}},t)}function AC(n,t){return DC(ym(n,t),{})}function _C(n,t){return DC(ym(n,t),{behaviours:ba([mg.config({})])})}function MC(n,t,e){return{dom:{tag:"span",innerHtml:e.translate(n),classes:[t+"__select-label"]},behaviours:ba([mg.config({})])}}function FC(n,t,o){function e(n,t){var e=Zf.getValue(n);return vg.focus(e),ro(e,"keydown",{raw:t.event().raw()}),Ow.close(e),on.some(!0)}var r=ye(Z),i=n.text.map(function(n){return vm(MC(n,t,o.providers))}),u=n.icon.map(function(n){return vm(_C(n,o.providers.icons))}),a=n.role.fold(function(){return{}},function(n){return{role:n}}),c=n.tooltip.fold(function(){return{}},function(n){var t=o.providers.translate(n);return{title:t,"aria-label":t}});return vm(Ow.sketch(N(N({},a),{dom:{tag:"button",classes:[t,t+"--select"].concat(S(n.classes,function(n){return t+"--"+n})),attributes:N({},c)},components:Bh([u.map(function(n){return n.asSpec()}),i.map(function(n){return n.asSpec()}),on.some({dom:{tag:"div",classes:[t+"__select-chevron"],innerHtml:ym("chevron-down",o.providers.icons)}})]),matchWidth:!0,useMinWidth:!0,dropdownBehaviours:ba(g(n.dropdownBehaviours,[Oh(n.disabled),Ew.config({}),mg.config({}),Kd("dropdown-events",[Ep(n,r),Tp(n,r)]),Kd("menubutton-update-display-text",[lo(rk,function(t,e){i.bind(function(n){return n.getOpt(t)}).each(function(n){mg.set(n,[Ir(o.providers.translate(e.event().text()))])})}),lo(ik,function(t,e){u.bind(function(n){return n.getOpt(t)}).each(function(n){mg.set(n,[_C(e.event().icon(),o.providers.icons)])})})])])),eventOrder:Dn(ok,{mousedown:["focusing","alloy.base.behaviour","item-type-events","normal-dropdown-events"]}),sandboxBehaviours:ba([lg.config({mode:"special",onLeft:e,onRight:e})]),lazySink:o.getSink,toggleClass:t+"--active",parts:{menu:Sv(0,n.columns,n.presets)},fetch:function(){return Vy(n.fetch)}}))).asSpec()}function IC(n){return"separator"===n.type}function RC(n,e){var t=O(n,function(n,t){return function(n){return cn(n)}(t)?""===t?n:"|"===t?0<n.length&&!IC(n[n.length-1])?n.concat([uk]):n:En(e,t.toLowerCase())?n.concat([e[t.toLowerCase()]]):n:n.concat([t])},[]);return 0<t.length&&IC(t[t.length-1])&&t.pop(),t}function VC(n,t){return function(n){return En(n,"getSubmenuItems")}(n)?function(n,t){var e=n.getSubmenuItems(),o=ak(e,t);return{item:n,menus:Dn(o.menus,q(n.value,o.items)),expansions:Dn(o.expansions,q(n.value,n.value))}}(n,t):{item:n,menus:{},expansions:{}}}function NC(n,e,o,t){var r=Xo("primary-menu"),i=ak(n,o.shared.providers.menuItems());if(0===i.items.length)return on.none();var u=ib(r,i.items,e,o,t),a=P(i.menus,function(n,t){return ib(t,n,e,o,!1)}),c=Dn(a,q(r,u));return on.from(Lg.tieredData(r,c,i.expansions))}function HC(e){return{isDisabled:function(){return Ch.isDisabled(e)},setDisabled:function(n){return Ch.set(e,n)},setActive:function(n){var t=e.element();n?(fr(t,"tox-tbtn--enabled"),Po(t,"aria-pressed",!0)):(dr(t,"tox-tbtn--enabled"),jo(t,"aria-pressed"))},isActive:function(){return mr(e.element(),"tox-tbtn--enabled")}}}function PC(n,t,e,o){return FC({text:n.text,icon:n.icon,tooltip:n.tooltip,role:o,fetch:function(t){n.fetch(function(n){t(NC(n,Fh.CLOSE_ON_EXECUTE,e,!1))})},onSetup:n.onSetup,getApi:HC,columns:1,presets:"normal",classes:[],dropdownBehaviours:[Gy.config({})]},t,e.shared)}function zC(t,o,r){return function(n){n(S(t,function(n){var t=n.text.fold(function(){return{}},function(n){return{text:n}});return N(N({type:n.type},t),{onAction:function(e){return function(n){var t=!n.isActive();n.setActive(t),e.storage.set(t),r.shared.getSink().each(function(n){o().getOpt(n).each(function(n){wa(n.element()),ro(n,sy,{name:e.name,value:e.storage.get()})})})}}(n),onSetup:function(t){return function(n){n.setActive(t.storage.get())}}(n)})}))}}function LC(n,t,e,o,r){void 0===e&&(e=[]);var i=t.fold(function(){return{}},function(n){return{action:n}}),u=N({buttonBehaviours:ba([Oh(n.disabled),Gy.config({}),Kd("button press",[fo("click"),fo("mousedown")])].concat(e)),eventOrder:{click:["button press","alloy.base.behaviour"],mousedown:["button press","alloy.base.behaviour"]}},i),a=Dn(u,{dom:o});return Dn(a,{components:r})}function jC(n,t,e,o){void 0===o&&(o=[]);var r={tag:"button",classes:["tox-tbtn"],attributes:n.tooltip.map(function(n){return{"aria-label":e.translate(n),title:e.translate(n)}}).getOr({})},i=n.icon.map(function(n){return AC(n,e.icons)}),u=Bh([i]);return LC(n,t,o,r,u)}function UC(n,t,e,o){void 0===o&&(o=[]);var r=jC(n,on.some(t),e,o);return Gg.sketch(r)}function WC(n,t,e,o,r){void 0===o&&(o=[]),void 0===r&&(r=[]);var i=e.translate(n.text),u=n.icon?n.icon.map(function(n){return AC(n,e.icons)}):on.none(),a=u.isSome()?Bh([u]):[],c=u.isSome()?{}:{innerHtml:i},s=g(n.primary||n.borderless?["tox-button"]:["tox-button","tox-button--secondary"],u.isSome()?["tox-button--icon"]:[],n.borderless?["tox-button--naked"]:[],r),f=N(N({tag:"button",classes:s},c),{attributes:{title:i}});return LC(n,t,o,f,a)}function GC(n,t,e,o,r){void 0===o&&(o=[]),void 0===r&&(r=[]);var i=WC(n,on.some(t),e,o,r);return Gg.sketch(i)}function XC(t,e){return function(n){"custom"===e?ro(n,sy,{name:t,value:{}}):"submit"===e?oo(n,fy):"cancel"===e?oo(n,cy):v.console.error("Unknown button type: ",e)}}function YC(n,t,e){if(function(n,t){return"menu"===t}(0,t)){var o=n,r=N(N({},n),{fetch:zC(o.items,function(){return i},e)}),i=vm(PC(r,"tox-tbtn",e,on.none()));return i.asSpec()}if(function(n,t){return"custom"===t||"cancel"===t||"submit"===t}(0,t)){var u=XC(n.name,t),a=N(N({},n),{borderless:!1});return GC(a,u,e.shared.providers,[])}v.console.error("Unknown footer button type: ",t)}function qC(n,t){var e=XC(n.name,"custom");return function(n,t){return By(n,t,[],[])}(on.none(),vy.parts().field(N({factory:Gg},WC(n,on.some(e),t,[DS(""),xS()]))))}function KC(n,t){return xl({factory:vy,name:n,overrides:function(o){return{fieldBehaviours:ba([Kd("coupled-input-behaviour",[lo(ei(),function(e){(function(n,t,e){return qs(n,t,e).bind(Zl.getCurrent)})(e,o,t).each(function(t){qs(e,o,"lock").each(function(n){Cg.isOn(n)&&o.onLockedChange(e,t,n)})})})])])}}})}function JC(n){var t=/^\s*(\d+(?:\.\d+)?)\s*(|cm|mm|in|px|pt|pc|em|ex|ch|rem|vw|vh|vmin|vmax|%)\s*$/.exec(n);if(null===t)return an.error(n);var e=parseFloat(t[1]),o=t[2];return an.value({value:e,unit:o})}function $C(n,t){function e(n){return Object.prototype.hasOwnProperty.call(o,n)}var o={"":96,px:96,pt:72,cm:2.54,pc:12,mm:25.4,"in":1};return n.unit===t?on.some(n.value):e(n.unit)&&e(t)?o[n.unit]===o[t]?on.some(n.value):on.some(n.value/o[n.unit]*o[t]):on.none()}function QC(n){return on.none()}function ZC(n,t){return function(n,t,e){return n.isSome()&&t.isSome()?on.some(e(n.getOrDie(),t.getOrDie())):on.none()}(JC(n).toOption(),JC(t).toOption(),function(n,t){return $C(n,t.unit).map(function(n){return t.value/n}).map(function(n){return function(t,e){return function(n){return $C(n,e).map(function(n){return{value:n*t,unit:e}})}}(n,t.unit)}).getOr(QC)}).getOr(QC)}function nk(o,t){function n(n){return{dom:{tag:"div",classes:["tox-form__group"]},components:n}}function e(e){return vy.parts().field({factory:yy,inputClasses:["tox-textfield"],inputBehaviours:ba([Ch.config({disabled:o.disabled}),Gy.config({}),Kd("size-input-events",[lo(Qr(),function(n,t){ro(n,i,{isField1:e})}),lo(oi(),function(n,t){ro(n,uy,{name:o.name})})])]),selectOnFocus:!1})}function r(n){return{dom:{tag:"label",classes:["tox-label"],innerHtml:t.translate(n)}}}var a=QC,i=Xo("ratio-event"),u=fk.parts().lock({dom:{tag:"button",classes:["tox-lock","tox-button","tox-button--naked","tox-button--icon"],attributes:{title:t.translate(o.label.getOr("Constrain proportions"))}},components:[{dom:{tag:"span",classes:["tox-icon","tox-lock-icon__lock"],innerHtml:ym("lock",t.icons)}},{dom:{tag:"span",classes:["tox-icon","tox-lock-icon__unlock"],innerHtml:ym("unlock",t.icons)}}],buttonBehaviours:ba([Oh(o.disabled),Gy.config({})])}),c=fk.parts().field1(n([vy.parts().label(r("Width")),e(!0)])),s=fk.parts().field2(n([vy.parts().label(r("Height")),e(!1)]));return fk.sketch({dom:{tag:"div",classes:["tox-form__group"]},components:[{dom:{tag:"div",classes:["tox-form__controls-h-stack"]},components:[c,s,n([r("&nbsp;"),u])]}],field1Name:"width",field2Name:"height",locked:!0,markers:{lockClass:"tox-locked"},onLockedChange:function(n,t,e){JC(Zf.getValue(n)).each(function(n){a(n).each(function(n){Zf.setValue(t,function(n){var t,e={"":0,px:0,pt:1,mm:1,pc:2,ex:2,em:2,ch:2,rem:2,cm:3,"in":4,"%":4},o=n.value.toFixed((t=n.unit)in e?e[t]:1);return-1!==o.indexOf(".")&&(o=o.replace(/\.?0*$/,"")),o+n.unit}(n))})})},coupledFieldBehaviours:ba([Ch.config({disabled:o.disabled,onDisabled:function(n){fk.getField1(n).bind(vy.getField).each(Ch.disable),fk.getField2(n).bind(vy.getField).each(Ch.disable),fk.getLock(n).each(Ch.disable)},onEnabled:function(n){fk.getField1(n).bind(vy.getField).each(Ch.enable),fk.getField2(n).bind(vy.getField).each(Ch.enable),fk.getLock(n).each(Ch.enable)}}),Kd("size-input-events2",[lo(i,function(n,t){var e=t.event().isField1(),o=e?fk.getField1(n):fk.getField2(n),r=e?fk.getField2(n):fk.getField1(n),i=o.map(Zf.getValue).getOr(""),u=r.map(Zf.getValue).getOr("");a=ZC(i,u)})])])})}function tk(r,c){function n(n,t,e,o){return vm(GC({name:n,text:n,disabled:e,primary:o,icon:on.none(),borderless:!1},t,c))}function t(n,t,e,o){return vm(UC({name:n,icon:on.some(n),tooltip:on.some(t),disabled:o,primary:!1,borderless:!1},e,c))}function u(n,e){n.map(function(n){var t=n.get(e);t.hasConfigured(Ch)&&Ch.disable(t)})}function a(n,e){n.map(function(n){var t=n.get(e);t.hasConfigured(Ch)&&Ch.enable(t)})}function i(n,t,e){ro(n,t,e)}function e(n){return oo(n,pk.disable())}function o(n){return oo(n,pk.enable())}function s(n,t){e(n),i(n,lk.transform(),{transform:t}),o(n)}function f(n){return function(){Q.getOpt(n).each(function(n){mg.set(n,[J])})}}function l(n,t){e(n),i(n,lk.transformApply(),{transform:t,swap:f(n)}),o(n)}function d(){return n("Back",function(n){return i(n,lk.back(),{swap:f(n)})},!1,!1)}function m(){return vm({dom:{tag:"div",classes:["tox-spacer"]},behaviours:ba([Ch.config({})])})}function g(){return n("Apply",function(n){return i(n,lk.apply(),{swap:f(n)})},!0,!0)}function p(){return function(n){var t=r.getRect();return function(n,t,e,o,r){return xC(n,t,e,o,r)}(n,t.x,t.y,t.w,t.h)}}function h(t,e){return function(n){return t(n,e)}}function v(n,t){!function(n,t){e(n),i(n,lk.tempTransform(),{transform:t}),o(n)}(n,t)}function b(n,t,e,o,r){var i=cS.parts().label({dom:{tag:"label",classes:["tox-label"],innerHtml:c.translate(n)}}),u=cS.parts().spectrum({dom:{tag:"div",classes:["tox-slider__rail"],attributes:{role:"presentation"}}}),a=cS.parts().thumb({dom:{tag:"div",classes:["tox-slider__handle"],attributes:{role:"presentation"}}});return vm(cS.sketch({dom:{tag:"div",classes:["tox-slider"],attributes:{role:"presentation"}},model:{mode:"x",minX:e,maxX:r,getInitialValue:nn({x:nn(o)})},components:[i,u,a],sliderBehaviours:ba([vg.config({})]),onChoose:t}))}function y(n,t,e,o,r){return[d(),function(n,r,t,e,o){return b(n,function(n,t,e){var o=h(r,e.x()/100);s(n,o)},t,e,o)}(n,t,e,o,r),g()]}function x(n,t,e,o,r){var i=y(n,t,e,o,r);return Wb.sketch({dom:k,components:i.map(function(n){return n.asSpec()}),containerBehaviours:ba([Kd("image-tools-filter-panel-buttons-events",[lo(pk.disable(),function(n,t){u(i,n)}),lo(pk.enable(),function(n,t){a(i,n)})])])})}function w(t,e,o){return function(n){return function(n,t,e,o){return lC(n,t,e,o)}(n,t,e,o)}}function S(n){return b(n,function(a,n,t){var e=j.getOpt(a),o=W.getOpt(a),r=U.getOpt(a);e.each(function(u){o.each(function(i){r.each(function(n){var t=Zf.getValue(u).x()/100,e=Zf.getValue(n).x()/100,o=Zf.getValue(i).x()/100,r=w(t,e,o);s(a,r)})})})},0,100,200)}function C(t,e,o){return function(n){i(n,lk.swap(),{transform:e,swap:function(){Q.getOpt(n).each(function(n){mg.set(n,[t]),o(n)})}})}}var k={tag:"div",classes:["tox-image-tools__toolbar","tox-image-tools-edit-panel"]},O=Z,E=[d(),m(),n("Apply",function(n){var t=p();l(n,t),r.hideCrop()},!1,!0)],T=Wb.sketch({dom:k,components:E.map(function(n){return n.asSpec()}),containerBehaviours:ba([Kd("image-tools-crop-buttons-events",[lo(pk.disable(),function(n,t){u(E,n)}),lo(pk.enable(),function(n,t){a(E,n)})])])}),B=vm(nk({name:"size",label:on.none(),constrain:!0,disabled:!1},c)),D=[d(),m(),B,m(),n("Apply",function(o){B.getOpt(o).each(function(n){var t=Zf.getValue(n),e=function(t,e){return function(n){return TC(n,t,e)}}(parseInt(t.width,10),parseInt(t.height,10));l(o,e)})},!1,!0)],A=Wb.sketch({dom:k,components:D.map(function(n){return n.asSpec()}),containerBehaviours:ba([Kd("image-tools-resize-buttons-events",[lo(pk.disable(),function(n,t){u(D,n)}),lo(pk.enable(),function(n,t){a(D,n)})])])}),_=h(EC,"h"),M=h(EC,"v"),F=h(BC,-90),I=h(BC,90),R=[d(),m(),t("flip-horizontally","Flip horizontally",function(n){v(n,_)},!1),t("flip-vertically","Flip vertically",function(n){v(n,M)},!1),t("rotate-left","Rotate counterclockwise",function(n){v(n,F)},!1),t("rotate-right","Rotate clockwise",function(n){v(n,I)},!1),m(),g()],V=Wb.sketch({dom:k,components:R.map(function(n){return n.asSpec()}),containerBehaviours:ba([Kd("image-tools-fliprotate-buttons-events",[lo(pk.disable(),function(n,t){u(R,n)}),lo(pk.enable(),function(n,t){a(R,n)})])])}),N=[d(),m(),g()],H=Wb.sketch({dom:k,components:N.map(function(n){return n.asSpec()})}),P=x("Brightness",kC,-100,0,100),z=x("Contrast",OC,-100,0,100),L=x("Gamma",CC,-100,0,100),j=S("R"),U=S("G"),W=S("B"),G=[d(),j,U,W,g()],X=Wb.sketch({dom:k,components:G.map(function(n){return n.asSpec()})}),Y=on.some(SC),q=on.some(wC),K=[t("crop","Crop",C(T,on.none(),function(n){r.showCrop()}),!1),t("resize","Resize",C(A,on.none(),function(n){B.getOpt(n).each(function(n){var t=r.getMeasurements(),e=t.width,o=t.height;Zf.setValue(n,{width:e,height:o})})}),!1),t("orientation","Orientation",C(V,on.none(),O),!1),t("brightness","Brightness",C(P,on.none(),O),!1),t("sharpen","Sharpen",C(H,Y,O),!1),t("contrast","Contrast",C(z,on.none(),O),!1),t("color-levels","Color levels",C(X,on.none(),O),!1),t("gamma","Gamma",C(L,on.none(),O),!1),t("invert","Invert",C(H,q,O),!1)],J=Wb.sketch({dom:k,components:K.map(function(n){return n.asSpec()})}),$=Wb.sketch({dom:{tag:"div"},components:[J],containerBehaviours:ba([mg.config({})])}),Q=vm($);return{memContainer:Q,getApplyButton:function(n){return Q.getOpt(n).map(function(n){var t=n.components()[0];return t.components()[t.components().length-1]})}}}var ek=Xo("toolbar.button.execute"),ok={"alloy.execute":["disabling","alloy.base.behaviour","toggling","toolbar-button-events"]},rk=Xo("update-menu-text"),ik=Xo("update-menu-icon"),uk={type:"separator"},ak=function(n,r){var t=RC(cn(n)?n.split(" "):n,r);return k(t,function(n,t){var e=function(n){if(IC(n))return n;var t=Nn(n,"value").getOrThunk(function(){return Xo("generated-menu-item")});return Dn({value:t},n)}(t),o=VC(e,r);return{menus:Dn(n.menus,o.menus),items:[o.item].concat(n.items),expansions:Dn(n.expansions,o.expansions)}},{menus:{},expansions:{},items:[]})},ck=nn([St("field1Name","field1"),St("field2Name","field2"),Ju("onLockedChange"),Xu(["lockClass"]),St("locked",!1),nl("coupledFieldBehaviours",[Zl,Zf])]),sk=nn([KC("field1","field2"),KC("field2","field1"),xl({factory:Gg,schema:[ct("dom")],name:"lock",overrides:function(n){return{buttonBehaviours:ba([Cg.config({selected:n.locked,toggleClass:n.markers.lockClass,aria:{mode:"pressed"}})])}}})]),fk=Al({name:"FormCoupledInputs",configFields:ck(),partFields:sk(),factory:function(o,n,t,e){return{uid:o.uid,dom:o.dom,components:n,behaviours:tl(o.coupledFieldBehaviours,[Zl.config({find:on.some}),Zf.config({store:{mode:"manual",getValue:function(n){var t,e=Zs(n,o,["field1","field2"]);return(t={})[o.field1Name]=Zf.getValue(e.field1()),t[o.field2Name]=Zf.getValue(e.field2()),t},setValue:function(n,t){var e=Zs(n,o,["field1","field2"]);$(t,o.field1Name)&&Zf.setValue(e.field1(),t[o.field1Name]),$(t,o.field2Name)&&Zf.setValue(e.field2(),t[o.field2Name])}}})]),apis:{getField1:function(n){return qs(n,o,"field1")},getField2:function(n){return qs(n,o,"field2")},getLock:function(n){return qs(n,o,"lock")}}}},apis:{getField1:function(n,t){return n.getField1(t)},getField2:function(n,t){return n.getField2(t)},getLock:function(n,t){return n.getLock(t)}}}),lk={undo:nn(Xo("undo")),redo:nn(Xo("redo")),zoom:nn(Xo("zoom")),back:nn(Xo("back")),apply:nn(Xo("apply")),swap:nn(Xo("swap")),transform:nn(Xo("transform")),tempTransform:nn(Xo("temp-transform")),transformApply:nn(Xo("transform-apply"))},dk=nn("save-state"),mk=nn("disable"),gk=nn("enable"),pk={formActionEvent:sy,saveState:dk,disable:mk,enable:gk},hk=tinymce.util.Tools.resolve("tinymce.dom.DomQuery"),vk=tinymce.util.Tools.resolve("tinymce.geom.Rect"),bk=tinymce.util.Tools.resolve("tinymce.util.Observable"),yk=tinymce.util.Tools.resolve("tinymce.util.Tools"),xk=tinymce.util.Tools.resolve("tinymce.util.VK");function wk(n){var t,e;if(n.changedTouches)for(t="screenX screenY pageX pageY clientX clientY".split(" "),e=0;e<t.length;e++)n[t[e]]=n.changedTouches[0][t[e]]}function Sk(n,r){var i,u,t,a,c,f,l,d=r.document||v.document;r=r||{};var m=d.getElementById(r.handle||n);t=function(n){var t,e,o=function s(n){var t,e,o,r,i,u,a,c=Math.max;return t=n.documentElement,e=n.body,o=c(t.scrollWidth,e.scrollWidth),r=c(t.clientWidth,e.clientWidth),i=c(t.offsetWidth,e.offsetWidth),u=c(t.scrollHeight,e.scrollHeight),a=c(t.clientHeight,e.clientHeight),{width:o<i?r:o,height:u<c(t.offsetHeight,e.offsetHeight)?a:u}}(d);wk(n),n.preventDefault(),u=n.button,t=m,f=n.screenX,l=n.screenY,e=v.window.getComputedStyle?v.window.getComputedStyle(t,null).getPropertyValue("cursor"):t.runtimeStyle.cursor,i=hk("<div></div>").css({position:"absolute",top:0,left:0,width:o.width,height:o.height,zIndex:2147483647,opacity:1e-4,cursor:e}).appendTo(d.body),hk(d).on("mousemove touchmove",c).on("mouseup touchend",a),r.start(n)},c=function(n){if(wk(n),n.button!==u)return a(n);n.deltaX=n.screenX-f,n.deltaY=n.screenY-l,n.preventDefault(),r.drag(n)},a=function(n){wk(n),hk(d).off("mousemove touchmove",c).off("mouseup touchend",a),i.remove(),r.stop&&r.stop(n)},this.destroy=function(){hk(m).off()},hk(m).on("mousedown touchstart",t)}function Ck(t){function u(n,s){c.getOpt(n).each(function(n){var e=l.get(),o=mu(n.element()),r=su(n.element()),i=s.dom().naturalWidth*e,u=s.dom().naturalHeight*e,a=Math.max(0,o/2-i/2),c=Math.max(0,r/2-u/2),t={left:a.toString()+"px",top:c.toString()+"px",width:i.toString()+"px",height:u.toString()+"px",position:"absolute"};xr(s,t),f.getOpt(n).each(function(n){xr(n.element(),t)}),d.get().each(function(n){var t=m.get();n.setRect({x:t.x*e+a,y:t.y*e+c,w:t.w*e,h:t.h*e}),n.setClampRect({x:a,y:c,w:i,h:u}),n.setViewPortRect({x:0,y:0,w:o,h:r})})})}function e(n,t){var i=we.fromTag("img");return Po(i,"src",t),function(e){return new Np(function(n){var t=function(){e.removeEventListener("load",t),n(e)};e.complete?n(e):e.addEventListener("load",t)})}(i.dom()).then(function(){return c.getOpt(n).map(function(n){var t=ru({element:i});mg.replaceAt(n,1,on.some(t));var e=a.get(),o={x:0,y:0,w:i.dom().naturalWidth,h:i.dom().naturalHeight};a.set(o);var r=vk.inflate(o,-20,-20);return m.set(r),e.w===o.w&&e.h===o.h||function(n,u){c.getOpt(n).each(function(n){var t=mu(n.element()),e=su(n.element()),o=u.dom().naturalWidth,r=u.dom().naturalHeight,i=Math.min(t/o,e/r);1<=i?l.set(1):l.set(i)})}(n,i),u(n,i),i})})}var f=vm({dom:{tag:"div",classes:["tox-image-tools__image-bg"],attributes:{role:"presentation"}}}),l=ye(1),d=ye(on.none()),m=ye({x:0,y:0,w:1,h:1}),a=ye({x:0,y:0,w:1,h:1}),n=Wb.sketch({dom:{tag:"div",classes:["tox-image-tools__image"]},components:[f.asSpec(),{dom:{tag:"img",attributes:{src:t}}},{dom:{tag:"div"},behaviours:ba([Kd("image-panel-crop-events",[Ii(function(n){c.getOpt(n).each(function(n){var t=n.element().dom(),e=Tk({x:10,y:10,w:100,h:100},{x:0,y:0,w:200,h:200},{x:0,y:0,w:200,h:200},t,function(){});e.toggleVisibility(!1),e.on("updateRect",function(n){var t=n.rect,e=l.get(),o={x:Math.round(t.x/e),y:Math.round(t.y/e),w:Math.round(t.w/e),h:Math.round(t.h/e)};m.set(o)}),d.set(on.some(e))})})])])}],containerBehaviours:ba([mg.config({}),Kd("image-panel-events",[Ii(function(n){e(n,t)})])])}),c=vm(n);return{memContainer:c,updateSrc:e,zoom:function(n,t){var e=l.get(),o=0<t?Math.min(2,e+.1):Math.max(.1,e-.1);l.set(o),c.getOpt(n).each(function(n){var t=n.components()[1].element();u(n,t)})},showCrop:function(){d.get().each(function(n){n.toggleVisibility(!0)})},hideCrop:function(){d.get().each(function(n){n.toggleVisibility(!1)})},getRect:function(){return m.get()},getMeasurements:function(){var n=a.get();return{width:n.w,height:n.h}}}}function kk(n,t,e,o,r){return UC({name:n,icon:on.some(t),disabled:e,tooltip:on.some(n),primary:!1,borderless:!1},o,r)}function Ok(n,t){t?Ch.enable(n):Ch.disable(n)}var Ek=0,Tk=function(s,e,f,o,r){var l,t,i,u="tox-",a="tox-crid-"+Ek++,c=[{name:"move",xMul:0,yMul:0,deltaX:1,deltaY:1,deltaW:0,deltaH:0,label:"Crop Mask"},{name:"nw",xMul:0,yMul:0,deltaX:1,deltaY:1,deltaW:-1,deltaH:-1,label:"Top Left Crop Handle"},{name:"ne",xMul:1,yMul:0,deltaX:0,deltaY:1,deltaW:1,deltaH:-1,label:"Top Right Crop Handle"},{name:"sw",xMul:0,yMul:1,deltaX:1,deltaY:0,deltaW:-1,deltaH:1,label:"Bottom Left Crop Handle"},{name:"se",xMul:1,yMul:1,deltaX:0,deltaY:0,deltaW:1,deltaH:1,label:"Bottom Right Crop Handle"}];i=["top","right","bottom","left"];var d=function(n,t){return{x:t.x+n.x,y:t.y+n.y,w:t.w,h:t.h}},m=function(n,t){return{x:t.x-n.x,y:t.y-n.y,w:t.w,h:t.h}};function g(n,t,e,o){var r,i,u,a,c;r=t.x,i=t.y,u=t.w,a=t.h,r+=e*n.deltaX,i+=o*n.deltaY,(u+=e*n.deltaW)<20&&(u=20),(a+=o*n.deltaH)<20&&(a=20),c=s=vk.clamp({x:r,y:i,w:u,h:a},f,"move"===n.name),c=m(f,c),l.fire("updateRect",{rect:c}),v(c)}function p(t){function n(n,t){t.h<0&&(t.h=0),t.w<0&&(t.w=0),hk("#"+a+"-"+n,o).css({left:t.x,top:t.y,width:t.w,height:t.h})}yk.each(c,function(n){hk("#"+a+"-"+n.name,o).css({left:t.w*n.xMul+t.x,top:t.h*n.yMul+t.y})}),n("top",{x:e.x,y:e.y,w:e.w,h:t.y-e.y}),n("right",{x:t.x+t.w,y:t.y,w:e.w-t.x-t.w+e.x,h:t.h}),n("bottom",{x:e.x,y:t.y+t.h,w:e.w,h:e.h-t.y-t.h+e.y}),n("left",{x:e.x,y:t.y,w:t.x-e.x,h:t.h}),n("move",t)}function h(n){p(s=n)}function v(n){h(d(f,n))}return function b(){hk('<div id="'+a+'" class="'+u+'croprect-container" role="grid" aria-dropeffect="execute">').appendTo(o),yk.each(i,function(n){hk("#"+a,o).append('<div id="'+a+"-"+n+'"class="'+u+'croprect-block" style="display: none" data-mce-bogus="all">')}),yk.each(c,function(n){hk("#"+a,o).append('<div id="'+a+"-"+n.name+'" class="'+u+"croprect-handle "+u+"croprect-handle-"+n.name+'"style="display: none" data-mce-bogus="all" role="gridcell" tabindex="-1" aria-label="'+n.label+'" aria-grabbed="false" title="'+n.label+'">')}),t=yk.map(c,function n(t){var e;return new Sk(a,{document:o.ownerDocument,handle:a+"-"+t.name,start:function(){e=s},drag:function(n){g(t,e,n.deltaX,n.deltaY)}})}),p(s),hk(o).on("focusin focusout",function(n){hk(n.target).attr("aria-grabbed","focus"===n.type?"true":"false")}),hk(o).on("keydown",function(t){var i;function n(n,t,e,o,r){n.stopPropagation(),n.preventDefault(),g(i,e,o,r)}switch(yk.each(c,function(n){if(t.target.id===a+"-"+n.name)return i=n,!1}),t.keyCode){case xk.LEFT:n(t,0,s,-10,0);break;case xk.RIGHT:n(t,0,s,10,0);break;case xk.UP:n(t,0,s,0,-10);break;case xk.DOWN:n(t,0,s,0,10);break;case xk.ENTER:case xk.SPACEBAR:t.preventDefault(),r()}})}(),l=yk.extend({toggleVisibility:function y(n){var t;t=yk.map(c,function(n){return"#"+a+"-"+n.name}).concat(yk.map(i,function(n){return"#"+a+"-"+n})).join(","),n?hk(t,o).show():hk(t,o).hide()},setClampRect:function x(n){f=n,p(s)},setRect:h,getInnerRect:function(){return m(f,s)},setInnerRect:v,setViewPortRect:function w(n){e=n,p(s)},destroy:function n(){yk.each(t,function(n){n.destroy()}),t=[]}},bk)};function Bk(n){var t=ye(n),e=ye(on.none()),o=function s(){var e=[],o=-1;function n(){return 0<o}function t(){return-1!==o&&o<e.length-1}return{data:e,add:function r(n){var t;return t=e.splice(++o),e.push(n),{state:n,removed:t}},undo:function i(){if(n())return e[--o]},redo:function u(){if(t())return e[++o]},canUndo:n,canRedo:t}}();function r(n){t.set(n)}function i(n){v.URL.revokeObjectURL(n.url)}function u(n){var t=a(n);return r(t),function(n){yk.each(n,i)}(o.add(t).removed),t.url}o.add(n);var a=function(n){return{blob:n,url:v.URL.createObjectURL(n)}},c=function(){e.get().each(i),e.set(on.none())};return{getBlobState:function(){return t.get()},setBlobState:r,addBlobState:u,getTempState:function(){return e.get().fold(function(){return t.get()},function(n){return n})},updateTempState:function(n){var t=a(n);return c(),e.set(on.some(t)),t.url},addTempState:function(n){var t=a(n);return e.set(on.some(t)),t.url},applyTempState:function(t){return e.get().fold(function(){},function(n){u(n.blob),t()})},destroyTempState:c,undo:function(){var n=o.undo();return r(n),n.url},redo:function(){var n=o.redo();return r(n),n.url},getHistoryStates:function(){return{undoEnabled:o.canUndo(),redoEnabled:o.canRedo()}}}}function Dk(n,t){function i(n){var t=s.getHistoryStates();m.updateButtonUndoStates(n,t.undoEnabled,t.redoEnabled),ro(n,pk.formActionEvent,{name:pk.saveState(),value:t.undoEnabled})}function u(n){return n.toBlob()}function a(n){ro(n,pk.formActionEvent,{name:pk.disable(),value:{}})}function r(t,n,e,o,r){return a(t),function(n){return oC(n)}(n).then(e).then(u).then(o).then(function(n){return l(t,n).then(function(n){return i(t),r(),f(t),n})})["catch"](function(n){return v.console.log(n),f(t),n})}function c(n,t,e){var o=s.getBlobState().blob;r(n,o,t,function(n){return s.updateTempState(n)},e)}var s=Bk(n.currentState),f=function(n){e.getApplyButton(n).each(function(n){Ch.enable(n)}),ro(n,pk.formActionEvent,{name:pk.enable(),value:{}})},l=function(n,t){return a(n),o.updateSrc(n,t)},d=function(n){var t=s.getBlobState().url;return s.destroyTempState(),i(n),t},o=Ck(n.currentState.url),m=function(n){var o=vm(kk("Undo","undo",!0,function(n){ro(n,lk.undo(),{direction:1})},n)),r=vm(kk("Redo","redo",!0,function(n){ro(n,lk.redo(),{direction:1})},n));return{container:Wb.sketch({dom:{tag:"div",classes:["tox-image-tools__toolbar","tox-image-tools__sidebar"]},components:[o.asSpec(),r.asSpec(),kk("Zoom in","zoom-in",!1,function(n){ro(n,lk.zoom(),{direction:1})},n),kk("Zoom out","zoom-out",!1,function(n){ro(n,lk.zoom(),{direction:-1})},n)]}),updateButtonUndoStates:function(n,t,e){o.getOpt(n).each(function(n){Ok(n,t)}),r.getOpt(n).each(function(n){Ok(n,e)})}}}(t),e=tk(o,t);return{dom:{tag:"div",attributes:{role:"presentation"}},components:[e.memContainer.asSpec(),o.memContainer.asSpec(),m.container],behaviours:ba([Zf.config({store:{mode:"manual",getValue:function(){return s.getBlobState()}}}),Kd("image-tools-events",[lo(lk.undo(),function(t,n){var e=s.undo();l(t,e).then(function(n){f(t),i(t)})}),lo(lk.redo(),function(t,n){var e=s.redo();l(t,e).then(function(n){f(t),i(t)})}),lo(lk.zoom(),function(n,t){var e=t.event().direction();o.zoom(n,e)}),lo(lk.back(),function(n,t){!function(t){var n=d(t);l(t,n).then(function(n){f(t)})}(n),t.event().swap()(),o.hideCrop()}),lo(lk.apply(),function(n,t){s.applyTempState(function(){d(n),t.event().swap()()})}),lo(lk.transform(),function(n,t){return c(n,t.event().transform(),Z)}),lo(lk.tempTransform(),function(n,t){return function(n,t){var e=s.getTempState().blob;r(n,e,t,function(n){return s.addTempState(n)},Z)}(n,t.event().transform())}),lo(lk.transformApply(),function(n,t){return function(e,n,t){var o=s.getBlobState().blob;r(e,o,n,function(n){var t=s.addBlobState(n);return d(e),t},t)}(n,t.event().transform(),t.event().swap())}),lo(lk.swap(),function(t,n){!function(n){m.updateButtonUndoStates(n,!1,!1)}(t);var e=n.event().transform(),o=n.event().swap();e.fold(function(){o()},function(n){c(t,n,o)})})]),xS()])}}function Ak(e,t){var n=e.label.map(function(n){return Dy(n,t)}),o=[Ch.config({disabled:e.disabled}),lg.config({mode:"execution",useEnter:!0!==e.multiline,useControlEnter:!0===e.multiline,execute:function(n){return oo(n,fy),on.some(!0)}}),Kd("textfield-change",[lo(ei(),function(n,t){ro(n,uy,{name:e.name})}),lo(fi(),function(n,t){ro(n,uy,{name:e.name})})]),Gy.config({})],r=e.validation.map(function(o){return jy.config({getRoot:function(n){return Eo(n.element())},invalidClass:"tox-invalid",validator:{validate:function(n){var t=Zf.getValue(n),e=o.validator(t);return Ny(!0===e?an.value(t):an.error(e))},validateOnLoad:o.validateOnLoad}})}).toArray(),i=e.placeholder.fold(nn({}),function(n){return{placeholder:t.translate(n)}}),u=e.inputMode.fold(nn({}),function(n){return{inputmode:n}}),a=N(N({},i),u),c=vy.parts().field({tag:!0===e.multiline?"textarea":"input",inputAttributes:a,inputClasses:[e.classname],inputBehaviours:ba(H([o,r])),selectOnFocus:!1,factory:yy}),s=(e.flex?["tox-form__group--stretched"]:[]).concat(e.maximized?["tox-form-group--maximize"]:[]),f=[Ch.config({disabled:e.disabled,onDisabled:function(n){vy.getField(n).each(Ch.disable)},onEnabled:function(n){vy.getField(n).each(Ch.enable)}})];return By(n,c,s,f)}function _k(n){var t=ye(null);return nu({readState:function(){return{timer:null!==t.get()?"set":"unset"}},setTimer:function(n){t.set(n)},cancel:function(){var n=t.get();null!==n&&n.cancel()}})}function Mk(n,t,e){var o=Zf.getValue(e);Zf.setValue(t,o),CE(t)}function Fk(n,t){var e=n.element(),o=Er(e),r=e.dom();"number"!==zo(e,"type")&&t(r,o)}function Ik(n,t,e){if(n.selectsOver){var o=Zf.getValue(t),r=n.getDisplayText(o),i=Zf.getValue(e);return 0===n.getDisplayText(i).indexOf(r)?on.some(function(){Mk(0,t,e),function(n,e){Fk(n,function(n,t){return n.setSelectionRange(e,t.length)})}(t,r.length)}):on.none()}return on.none()}function Rk(n){return BE(Vy(n))}function Vk(n){return{type:"menuitem",value:n.url,text:n.title,meta:{attach:n.attach},onAction:function(){}}}function Nk(n,t){return{type:"menuitem",value:t,text:n,meta:{attach:undefined},onAction:function(){}}}function Hk(n,t){return function(n){return S(n,Vk)}(function(t,n){return C(n,function(n){return n.type===t})}(n,t))}function Pk(n,t){var e=n.toLowerCase();return C(t,function(n){var t=n.meta!==undefined&&n.meta.text!==undefined?n.meta.text:n.text;return Vt(t.toLowerCase(),e)||Vt(n.value.toLowerCase(),e)})}function zk(e,n,o){var t=Zf.getValue(n),r=t.meta.text!==undefined?t.meta.text:t.value;return o.getLinkInformation().fold(function(){return[]},function(n){var t=Pk(r,function(n){return S(n,function(n){return Nk(n,n)})}(o.getHistory(e)));return"file"===e?function(n){return O(n,function(n,t){return 0===n.length||0===t.length?n.concat(t):n.concat(AE,t)},[])}([t,Pk(r,function(n){return Hk("header",n.targets)}(n)),Pk(r,H([function(n){return on.from(n.anchorTop).map(function(n){return Nk("<top>",n)}).toArray()}(n),function(n){return Hk("anchor",n.targets)}(n),function(n){return on.from(n.anchorBottom).map(function(n){return Nk("<bottom>",n)}).toArray()}(n)]))]):t})}function Lk(r,o,i){function u(n){var t=Zf.getValue(n);i.addToHistory(t.value,r.filetype)}var n,t,e,a,c,s=o.shared.providers,f=vy.parts().field({factory:TE,dismissOnBlur:!0,inputClasses:["tox-textfield"],sandboxClasses:["tox-dialog__popups"],inputAttributes:{"aria-errormessage":_E,type:"url"},minChars:0,responseTime:0,fetch:function(n){var t=zk(r.filetype,n,i),e=NC(t,Fh.BUBBLE_TO_SANDBOX,o,!1);return Ny(e)},getHotspot:function(n){return h.getOpt(n)},onSetValue:function(n,t){n.hasConfigured(jy)&&jy.run(n).get(Z)},typeaheadBehaviours:ba(H([i.getValidationHandler().map(function(e){return jy.config({getRoot:function(n){return Eo(n.element())},invalidClass:"tox-control-wrap--status-invalid",notify:{onInvalid:function(n,t){d.getOpt(n).each(function(n){Po(n.element(),"title",s.translate(t))})}},validator:{validate:function(n){var t=Zf.getValue(n);return DE(function(o){e({type:r.filetype,url:t.value},function(n){if("invalid"===n.status){var t=an.error(n.message);o(t)}else{var e=an.value(n.message);o(e)}})})},validateOnLoad:!1}})}).toArray(),[Ch.config({disabled:r.disabled}),Gy.config({}),Kd("urlinput-events",H(["file"===r.filetype?[lo(ei(),function(n){ro(n,uy,{name:r.name})})]:[],[lo(oi(),function(n){ro(n,uy,{name:r.name}),u(n)}),lo(fi(),function(n){ro(n,uy,{name:r.name}),u(n)})]]))]])),eventOrder:(n={},n[ei()]=["streaming","urlinput-events","invalidating"],n),model:{getDisplayText:function(n){return n.value},selectsOver:!1,populateFromBrowse:!1},markers:{openClass:"tox-textfield--popup-open"},lazySink:o.shared.getSink,parts:{menu:Sv(0,0,"normal")},onExecute:function(n,t,e){ro(t,fy,{})},onItemExecute:function(n,t,e,o){u(n),ro(n,uy,{name:r.name})}}),l=r.label.map(function(n){return Dy(n,s)}),d=vm((t="invalid",e=on.some(_E),void 0===(a="warning")&&(a=t),void 0===c&&(c=t),{dom:{tag:"div",classes:["tox-icon","tox-control-wrap__status-icon-"+t],innerHtml:ym(a,s.icons),attributes:N({title:s.translate(c),"aria-live":"polite"},e.fold(function(){return{}},function(n){return{id:n}}))}})),m=vm({dom:{tag:"div",classes:["tox-control-wrap__status-icon-wrap"]},components:[d.asSpec()]}),g=i.getUrlPicker(r.filetype),p=Xo("browser.url.event"),h=vm({dom:{tag:"div",classes:["tox-control-wrap"]},components:[f,m.asSpec()],behaviours:ba([Ch.config({disabled:r.disabled})])}),v=vm(GC({name:r.name,icon:on.some("browse"),text:r.label.getOr(""),disabled:r.disabled,primary:!1,borderless:!0},function(n){return oo(n,p)},s,[],["tox-browse-url"]));return vy.sketch({dom:Yy([]),components:l.toArray().concat([{dom:{tag:"div",classes:["tox-form__controls-h-stack"]},components:H([[h.asSpec()],g.map(function(){return v.asSpec()}).toArray()])}]),fieldBehaviours:ba([Ch.config({disabled:r.disabled,onDisabled:function(n){vy.getField(n).each(Ch.disable),v.getOpt(n).each(Ch.disable)},onEnabled:function(n){vy.getField(n).each(Ch.enable),v.getOpt(n).each(Ch.enable)}}),Kd("url-input-events",[lo(p,function(o){Zl.getCurrent(o).each(function(t){var e=Zf.getValue(t);g.each(function(n){n(e).get(function(n){Zf.setValue(t,n),ro(o,uy,{name:r.name})})})})})])])})}function jk(u,t){function n(o){return function(t,e){Ou(e.event().target(),"[data-collection-item-value]").each(function(n){o(t,e,n,zo(n,"data-collection-item-value"))})}}var e=u.label.map(function(n){return Dy(n,t)}),o=n(function(n,t,e,o){t.stop(),ro(n,sy,{name:u.name,value:o})}),r=[lo($r(),n(function(n,t,e){wa(e)})),lo(ri(),o),lo(gi(),o),lo(Qr(),n(function(n,t,e){ku(n.element(),"."+mh).each(function(n){dr(n,mh)}),fr(e,mh)})),lo(Zr(),n(function(n){ku(n.element(),"."+mh).each(function(n){dr(n,mh)})})),Ni(n(function(n,t,e,o){ro(n,sy,{name:u.name,value:o})}))],i=vy.parts().field({dom:{tag:"div",classes:["tox-collection"].concat(1!==u.columns?["tox-collection--grid"]:["tox-collection--list"])},components:[],factory:{sketch:l},behaviours:ba([mg.config({}),Zf.config({store:{mode:"memory",initialValue:[]},onSetValue:function(o,n){!function(n,t){var e=S(t,function(n){var t=rh.translate(n.text),e=1===u.columns?'<div class="tox-collection__item-label">'+t+"</div>":"",o='<div class="tox-collection__item-icon">'+n.icon+"</div>",r={_:" "," - ":" ","-":" "},i=t.replace(/\_| \- |\-/g,function(n){return r[n]});return'<div class="tox-collection__item" tabindex="-1" data-collection-item-value="'+function(n){return'"'===n?"&quot;":n}(n.value)+'" title="'+i+'" aria-label="'+i+'">'+o+e+"</div>"}),o=1<u.columns&&"auto"!==u.columns?w(e,u.columns):[e],r=S(o,function(n){return'<div class="tox-collection__group">'+n.join("")+"</div>"});No(n.element(),r.join(""))}(o,n),"auto"===u.columns&&ip(o,5,"tox-collection__item").each(function(n){var t=n.numRows,e=n.numColumns;lg.setGridSize(o,t,e)}),oo(o,gy)}}),Gy.config({}),lg.config(function(n,t){return 1===n?{mode:"menu",moveOnTab:!1,selector:".tox-collection__item"}:"auto"===n?{mode:"flatgrid",selector:".tox-collection__item",initSize:{numColumns:1,numRows:1}}:{mode:"matrix",selectors:{row:"color"===t?".tox-swatches__row":".tox-collection__group",cell:"color"===t?"."+ah:"."+uh}}}(u.columns,"normal")),Kd("collection-events",r)])});return By(e,i,["tox-form__group--collection"],[])}function Uk(r){return function(t,e,o){return Nn(e,"name").fold(function(){return r(e,o)},function(n){return t.field(n,r(e,o))})}}function Wk(t,n,e){var o=Dn(e,{shared:{interpreter:function(n){return IE(t,n,o)}}});return IE(t,n,o)}function Gk(n){return{colorPicker:function(e){return function(n,t){Uv.colorPickerDialog(e)(n,t)}}(n),hasCustomColors:function(n){return function(){return Fv(n)}}(n),getColors:function(n){return function(){return Iv(n)}}(n),getColorCols:function(n){return function(){return Uv.getColorCols(n)}}(n)}}function Xk(e){return function(n){return on.from(n.getParam("style_formats")).filter(fn)}(e).map(function(n){var t=function(t,n){function e(n){bn(n,function(n){t.formatter.has(n.name)||t.formatter.register(n.name,n.format)})}var o=PE(n);return t.formatter?e(o.customFormats):t.on("init",function(){e(o.customFormats)}),o.formats}(e,n);return function(n){return n.getParam("style_formats_merge",!1,"boolean")}(e)?HE.concat(t):t}).getOr(HE)}function Yk(n,t,e){var o={type:"formatter",isSelected:t(n.format),getStylePreview:e(n.format)};return Dn(n,o)}function qk(r,n,i,u){var o=function(n){return S(n,function(n){var t=wn(n);if($(n,"items")){var e=o(n.items);return Dn(function(n){var t={type:"submenu",isSelected:nn(!1),getStylePreview:function(){return on.none()}};return Dn(n,t)}(n),{getStyleItems:function(){return e}})}return $(n,"format")?function(n){return Yk(n,i,u)}(n):1===t.length&&vn(t,"title")?Dn(n,{type:"separator"}):function(n){var t=Xo(n.title),e={type:"formatter",format:t,isSelected:i(t),getStylePreview:u(t)},o=Dn(n,e);return r.formatter.register(t,o),o}(n)})};return o(n)}function Kk(t){return function(n){if(n&&1===n.nodeType){if(n.contentEditable===t)return!0;if(n.getAttribute("data-mce-contenteditable")===t)return!0}return!1}}function Jk(n,t,e,o,r){return{type:n,title:t,url:e,level:o,attach:r}}function $k(n){return n.innerText||n.textContent}function Qk(n){return function(n){return n&&"A"===n.nodeName&&(n.id||n.name)!==undefined}(n)&&UE(n)}function Zk(n){return n&&/^(H[1-6])$/.test(n.nodeName)}function nO(n){return Zk(n)&&UE(n)}function tO(n){var t=function(n){return n.id?n.id:Xo("h")}(n);return Jk("header",$k(n),"#"+t,function(n){return Zk(n)?parseInt(n.nodeName.substr(1),10):0}(n),function(){n.id=t})}function eO(n){var t=n.id||n.name,e=$k(n);return Jk("anchor",e||"#"+t,"#"+t,0,Z)}function oO(n){return function(n,t){return S(zc(we.fromDom(t),n),function(n){return n.dom()})}("h1,h2,h3,h4,h5,h6,a:not([href])",n)}function rO(n){return 0<zE(n.title).length}function iO(n){return cn(n)&&/^https?/.test(n)}function uO(n){return sn(n)&&I(n,function(n){return!function(n){return fn(n)&&n.length<=5&&D(n,iO)}(n)}).isNone()}function aO(){var n,t=v.localStorage.getItem(GE);if(null===t)return{};try{n=JSON.parse(t)}catch(e){if(e instanceof SyntaxError)return v.console.log("Local storage "+GE+" was not valid JSON",e),{};throw e}return uO(n)?n:(v.console.log("Local storage "+GE+" was not valid format",n),{})}function cO(n){var t=aO();return Object.prototype.hasOwnProperty.call(t,n)?t[n]:[]}function sO(t,n){if(iO(t)){var e=aO(),o=Object.prototype.hasOwnProperty.call(e,n)?e[n]:[],r=C(o,function(n){return n!==t});e[n]=[t].concat(r).slice(0,5),function(n){if(!uO(n))throw new Error("Bad format for history:\n"+JSON.stringify(n));v.localStorage.setItem(GE,JSON.stringify(n))}(e)}}function fO(n){return!!n}function lO(n){return P(yk.makeMap(n,/[, ]/),fO)}function dO(n,t,e){var o=function(n,t){return XE.call(n,t)?on.some(n[t]):on.none()}(n,t).getOr(e);return cn(o)?on.some(o):on.none()}function mO(n){return on.some(n.file_picker_callback).filter(dn)}function gO(n,t){var e=function(n){var t=on.some(n.file_picker_types).filter(fO),e=on.some(n.file_browser_callback_types).filter(fO),o=t.or(e).map(lO);return mO(n).fold(function(){return!1},function(n){return o.fold(function(){return!0},function(n){return 0<wn(n).length&&n})})}(n);return ln(e)?e?mO(n):on.none():e[t]?mO(n):on.none()}function pO(t){return{getHistory:cO,addToHistory:sO,getLinkInformation:function(){return function(n){return!1===n.settings.typeahead_urls?on.none():on.some({targets:WE(n.getBody()),anchorTop:dO(n.settings,"anchor_top","#top").getOrUndefined(),anchorBottom:dO(n.settings,"anchor_bottom","#bottom").getOrUndefined()})}(t)},getValidationHandler:function(){return function(n){return on.from(n.settings.file_picker_validator_handler).filter(dn).orThunk(function(){return on.from(n.settings.filepicker_validator_handler).filter(dn)})}(t)},getUrlPicker:function(n){return function(r,i){return gO(r.settings,i).map(function(o){return function(t){return Vy(function(e){var n=yk.extend({filetype:i},on.from(t.meta).getOr({}));o.call(r,function(n,t){if(!cn(n))throw new Error("Expected value to be string");if(t!==undefined&&!sn(t))throw new Error("Expected meta to be a object");e({value:n,meta:t})},t.value,n)})}})}(t,n)}}}function hO(n,t,e,o){var r=ye(!1),i={shared:{providers:{icons:function(){return t.ui.registry.getAll().icons},menuItems:function(){return t.ui.registry.getAll().menuItems},translate:rh.translate},interpreter:function(n){return function(n,t){return IE(FE,n,t)}(n,i)},anchors:NE(t,e,o),getSink:function(){return an.value(n)}},urlinput:pO(t),styleselect:function(e){function o(n){return function(){return e.formatter.match(n)}}function r(t){return function(){var n=e.formatter.get(t);return n!==undefined?on.some({tag:0<n.length&&(n[0].inline||n[0].block)||"div",styleAttr:e.formatter.getCssText(t)}):on.none()}}var i=function(n){var t=n.items;return t!==undefined&&0<t.length?B(t,i):[n.format]},u=ye([]),a=ye([]),c=ye([]),s=ye([]),f=ye(!1);e.on("init",function(){var n=Xk(e),t=qk(e,n,o,r);u.set(t),a.set(B(t,i))}),e.on("addStyleModifications",function(n){var t=qk(e,n.items,o,r);c.set(t),f.set(n.replace),s.set(B(t,i))});return{getData:function(){var n=f.get()?[]:u.get(),t=c.get();return n.concat(t)},getFlattenedKeys:function(){var n=f.get()?[]:a.get(),t=s.get();return n.concat(t)}}}(t),colorinput:Gk(t),dialog:function(n){return{isDraggableModal:function(n){return function(){return function(n){return n.getParam("draggable_modal",!1,"boolean")}(n)}}(n)}}(t),isContextMenuOpen:function(){return r.get()},setContextMenuState:function(n){return r.set(n)}};return i}function vO(n,t,o){var e=function(n,e){return O(n,function(t,n){return e(n,t.len).fold(nn(t),function(n){return{len:n.finish(),list:t.list.concat([n])}})},{len:0,list:[]}).list}(n,function(n,t){var e=o(n);return on.some({element:nn(n),start:nn(t),finish:nn(t+e),width:nn(e)})}),r=C(e,function(n){return n.finish()<=t}),i=k(r,function(n,t){return n+t.width()},0),u=e.slice(r.length);return{within:nn(r),extra:nn(u),withinWidth:nn(i)}}function bO(n){return S(n,function(n){return n.element()})}function yO(n,t,e,o){var r=function(n,t,e){var o=vO(t,n,e);return 0===o.extra().length?on.some(o):on.none()}(n,t,e).getOrThunk(function(){return vO(t,n-e(o),e)}),i=r.within(),u=r.extra(),a=r.withinWidth();return 1===u.length&&u[0].width()<=e(o)?function(n,t,e){var o=bO(n.concat(t));return $E(o,[],e)}(i,u,a):1<=u.length?function(n,t,e,o){var r=bO(n).concat([e]);return $E(r,bO(t),o)}(i,u,o,a):function(n,t,e){return $E(bO(n),[],e)}(i,0,a)}function xO(n,t){var e=S(t,function(n){return au(n)});JE.setGroups(n,e)}function wO(n,t,e,o){var r=Ks(n,t,"primary"),i=qs(n,t,"overflow-button"),u=Jy.getCoupled(n,"overflowGroup");yr(r.element(),"visibility","hidden");var a=function(n,t){return n.bind(function(t){return Ca(t.element()).bind(function(n){return t.getSystem().getByDom(n).toOption()})}).orThunk(function(){return t.filter(vg.isFocused)})}(e,i);e.each(function(n){JE.setGroups(n,[])});var c=t.builtGroups.get();xO(r,c.concat([u]));var s=mu(r.element()),f=yO(s,c,function(n){return mu(n.element())},u);0===f.extra().length?(mg.remove(r,u),e.each(function(n){JE.setGroups(n,[])})):(xO(r,f.within()),e.each(function(n){xO(n,f.extra())})),kr(r.element(),"visibility"),Or(r.element()),e.each(function(t){i.each(function(n){return Cg.set(n,o(t))}),a.each(vg.focus)})}function SO(o,n,t,e,r){var i="alloy.toolbar.toggle";return{uid:o.uid,dom:o.dom,components:n,behaviours:Rs(o.splitToolbarBehaviours,[Jy.config({others:N(N({},r.coupling),{overflowGroup:function(t){return nT.sketch(N(N({},e["overflow-group"]()),{items:[Gg.sketch(N(N({},e["overflow-button"]()),{action:function(n){oo(t,i)}}))]}))}})}),Kd("toolbar-toggle-events",[lo(i,function(n){r.apis.toggle(n)})])]),apis:N({setGroups:function(n,t){!function(n,t){var e=S(t,n.getSystem().build);o.builtGroups.set(e)}(n,t),r.apis.refresh(n)},getMoreButton:function(n){return function(n){return qs(n,o,"overflow-button")}(n)}},r.apis),domModification:{attributes:{role:"group"}}}}function CO(n){return n.getSystem().isConnected()}function kO(n,t,e){var o=t.lazySink(n).getOrDie(),r=t.getAnchor(n),i=t.getOverflowBounds.map(function(n){return n()});Af.positionWithinBounds(o,r,e,i)}function OO(t,e){var n=zf.getState(Jy.getCoupled(t,"sandbox"));wO(t,e,n,CO),n.each(function(n){return kO(t,e,n)})}function EO(t,e){zf.getState(Jy.getCoupled(t,"sandbox")).each(function(n){return kO(t,e,n)})}function TO(t,n){return n.getAnimationRoot.fold(function(){return t.element()},function(n){return n(t)})}function BO(n){return n.dimension.property}function DO(n,t){return n.dimension.getDimension(t)}function AO(n,t){var e=TO(n,t);pr(e,[t.shrinkingClass,t.growingClass])}function _O(n,t){dr(n.element(),t.openClass),fr(n.element(),t.closedClass),yr(n.element(),BO(t),"0px"),Or(n.element())}function MO(n,t){dr(n.element(),t.closedClass),fr(n.element(),t.openClass),kr(n.element(),BO(t))}function FO(n,t,e,o){e.setCollapsed(),yr(n.element(),BO(t),DO(t,n.element())),Or(n.element()),AO(n,t),_O(n,t),t.onStartShrink(n),t.onShrunk(n)}function IO(n,t,e,o){var r=o.getOrThunk(function(){return DO(t,n.element())});e.setCollapsed(),yr(n.element(),BO(t),r),Or(n.element());var i=TO(n,t);dr(i,t.growingClass),fr(i,t.shrinkingClass),_O(n,t),t.onStartShrink(n)}function RO(n,t,e){var o=DO(t,n.element());("0px"===o?FO:IO)(n,t,e,on.some(o))}function VO(n,t,e){var o=TO(n,t),r=mr(o,t.shrinkingClass),i=DO(t,n.element());MO(n,t);var u=DO(t,n.element());(r?function(){yr(n.element(),BO(t),i),Or(n.element())}:function(){_O(n,t)})(),dr(o,t.shrinkingClass),fr(o,t.growingClass),MO(n,t),yr(n.element(),BO(t),u),e.setExpanded(),t.onStartGrow(n)}function NO(n,t,e){var o=TO(n,t);return!0===mr(o,t.growingClass)}function HO(n,t,e){var o=TO(n,t);return!0===mr(o,t.shrinkingClass)}function PO(n){return cT.hasGrown(n)}function zO(n,t){var e=n.outerContainer;!function(n,t){var e=n.outerContainer.element();t&&(n.mothership.broadcastOn([Lf()],{target:e}),n.uiMothership.broadcastOn([Lf()],{target:e})),n.mothership.broadcastOn([gT],{readonly:t}),n.uiMothership.broadcastOn([gT],{readonly:t})}(n,t),Lt("*",e.element()).forEach(function(n){e.getSystem().getByDom(n).each(function(n){n.hasConfigured(Ch)&&Ch.set(n,t)})})}function LO(n,t){n.on("init",function(){n.readonly&&zO(t,!0)}),n.on("SwitchMode",function(){return zO(t,n.readonly)}),function(n){return n.getParam("readonly",!1,"boolean")}(n)&&n.setMode("readonly")}function jO(e){var n;return lc.config({channels:(n={},n[gT]={schema:pT,onReceive:function(n,t){e(n).each(function(n){!function(t,e){Lt("*",t.element()).forEach(function(n){t.getSystem().getByDom(n).each(function(n){n.hasConfigured(Ch)&&Ch.set(n,e)})})}(n,t.readonly)})}},n)})}function UO(n){var t=n.title.fold(function(){return{}},function(n){return{attributes:{title:n}}});return{dom:N({tag:"div",classes:["tox-toolbar__group"]},t),components:[nT.parts().items({})],items:n.items,markers:{itemSelector:"*:not(.tox-split-button) > .tox-tbtn:not([disabled]), .tox-split-button:not([disabled]), .tox-toolbar-nav-js:not([disabled])"},tgroupBehaviours:ba([Gy.config({}),vg.config({})])}}function WO(n){return nT.sketch(UO(n))}function GO(e,n,t){var o=Ii(function(n){var t=S(e.initGroups,WO);JE.setGroups(n,t)});return ba([lg.config({mode:n,onEscape:e.onEscape,selector:".tox-toolbar__group"}),Kd("toolbar-events",[o]),jO(t)])}function XO(n,t){var e=n.cyclicKeying?"cyclic":"acyclic";return{uid:n.uid,dom:{tag:"div",classes:["tox-toolbar-overlord"]},parts:{"overflow-group":UO({title:on.none(),items:[]}),"overflow-button":jC({name:"more",icon:on.some("more-drawer"),disabled:!1,tooltip:on.some("More..."),primary:!1,borderless:!1},on.none(),n.backstage.shared.providers)},splitToolbarBehaviours:GO(n,e,t)}}function YO(r){var n=XO(r,rT.getOverflow),t=rT.parts().primary({dom:{tag:"div",classes:["tox-toolbar__primary"]}});return rT.sketch(N(N({},n),{lazySink:r.getSink,getAnchor:function(){return r.backstage.shared.anchors.toolbarOverflow()},getOverflowBounds:function(){var n=r.moreDrawerData.lazyHeader().element(),t=wu(n),e=ko(n),o=wu(e);return yu(t.x()+4,o.y(),t.width()-8,o.height())},parts:N(N({},n.parts),{overflow:{dom:{tag:"div",classes:["tox-toolbar__overflow"]}}}),components:[t],markers:{overflowToggledClass:"tox-tbtn--enabled"}}))}function qO(n){var t=dT.parts().primary({dom:{tag:"div",classes:["tox-toolbar__primary"]}}),e=dT.parts().overflow({dom:{tag:"div",classes:["tox-toolbar__overflow"]}}),o=XO(n,dT.getOverflow);return dT.sketch(N(N({},o),{components:[t,e],markers:{openClass:"tox-toolbar__overflow--open",closedClass:"tox-toolbar__overflow--closed",growingClass:"tox-toolbar__overflow--growing",shrinkingClass:"tox-toolbar__overflow--shrinking",overflowToggledClass:"tox-tbtn--enabled"},onOpened:function(n){n.getSystem().broadcastOn([mT()],{type:"opened"})},onClosed:function(n){n.getSystem().broadcastOn([mT()],{type:"closed"})}}))}function KO(n){var t=n.cyclicKeying?"cyclic":"acyclic";return JE.sketch({uid:n.uid,dom:{tag:"div",classes:["tox-toolbar"].concat(n.type===jb.scrolling?["tox-toolbar--scrolling"]:[])},components:[JE.parts().groups({})],toolbarBehaviours:GO(n,t,nn(on.none()))})}function JO(n){return tt("toolbarbutton",vT,n)}function $O(n){return tt("menubutton",yT,n)}function QO(n){return tt("ToggleButton",ST,n)}function ZO(t){return{isDisabled:function(){return Ch.isDisabled(t)},setDisabled:function(n){return Ch.set(t,n)}}}function nE(t){return{setActive:function(n){Cg.set(t,n)},isActive:function(){return Cg.isOn(t)},isDisabled:function(){return Ch.isDisabled(t)},setDisabled:function(n){return Ch.set(t,n)}}}function tE(n,t){return n.map(function(n){return{"aria-label":t.translate(n),title:t.translate(n)}}).getOr({})}function eE(t,e,n,o,r,i){function u(n){return rh.isRtl()&&vn(jT,n)?n+"-rtl":n}var a,c=rh.isRtl()&&t.exists(function(n){return vn(UT,n)});return{dom:{tag:"button",classes:["tox-tbtn"].concat(e.isSome()?["tox-tbtn--select"]:[]).concat(c?["tox-tbtn__icon-rtl"]:[]),attributes:tE(n,i)},components:Bh([t.map(function(n){return AC(u(n),i.icons)}),e.map(function(n){return MC(n,"tox-tbtn",i)})]),eventOrder:(a={},a[Yr()]=["focusing","alloy.base.behaviour","common-button-display-events"],a),buttonBehaviours:ba([Kd("common-button-display-events",[lo(Yr(),function(n,t){t.event().prevent(),oo(n,LT)})])].concat(o.map(function(n){return RT.config({channel:n,initialData:{icon:t,text:e},renderComponents:function(n,t){return Bh([n.icon.map(function(n){return AC(u(n),i.icons)}),n.text.map(function(n){return MC(n,"tox-tbtn",i)})])}})}).toArray()).concat(r.getOr([])))}}function oE(n,t,e){var o=ye(Z),r=eE(n.icon,n.text,n.tooltip,on.none(),on.none(),e);return Gg.sketch({dom:r.dom,components:r.components,eventOrder:ok,buttonBehaviours:ba([Kd("toolbar-button-events",[function(e){return Ni(function(t,n){Op(e,t)(function(n){ro(t,ek,{buttonApi:n}),e.onAction(n)})})}({onAction:n.onAction,getApi:t.getApi}),Ep(t,o),Tp(t,o)]),Th(n.disabled)].concat(t.toolbarButtonBehaviours))})}function rE(t,n){function e(e){return{isDisabled:function(){return Ch.isDisabled(e)},setDisabled:function(n){return Ch.set(e,n)},setIconFill:function(n,t){ku(e.element(),'svg path[id="'+n+'"], rect[id="'+n+'"]').each(function(n){Po(n,"fill",t)})},setIconStroke:function(n,t){ku(e.element(),'svg path[id="'+n+'"], rect[id="'+n+'"]').each(function(n){Po(n,"stroke",t)})},setActive:function(t){Po(e.element(),"aria-pressed",t),ku(e.element(),"span").each(function(n){e.getSystem().getByDom(n).each(function(n){return Cg.set(n,t)})})},isActive:function(){return ku(e.element(),"span").exists(function(n){return e.getSystem().getByDom(n).exists(Cg.isOn)})}}}var o,r=Xo("channel-update-split-dropdown-display"),i=ye(Z),u={getApi:e,onSetup:t.onSetup};return zT.sketch({dom:{tag:"div",classes:["tox-split-button"],attributes:An({"aria-pressed":!1},tE(t.tooltip,n.providers))},onExecute:function(n){t.onAction(e(n))},onItemExecute:function(n,t,e){},splitDropdownBehaviours:ba([Eh(!1),Kd("split-dropdown-events",[lo(LT,vg.focus),Ep(u,i),Tp(u,i)]),Ew.config({})]),eventOrder:(o={},o[Ci()]=["alloy.base.behaviour","split-dropdown-events"],o),toggleClass:"tox-tbtn--enabled",lazySink:n.getSink,fetch:function(e,r,o){return function(t){return Vy(function(n){return r.fetch(n)}).map(function(n){return on.from(ub(Dn(Tv(Xo("menu-value"),n,function(n){r.onItemAction(e(t),n)},r.columns,r.presets,Fh.CLOSE_ON_EXECUTE,r.select.getOr(function(){return!1}),o),{movement:Bv(r.columns,r.presets),menuBehaviours:Jp("auto"!==r.columns?[]:[Ii(function(o,n){ip(o,4,sp(r.presets)).each(function(n){var t=n.numRows,e=n.numColumns;lg.setGridSize(o,t,e)})})])})))})}}(e,t,n.providers),parts:{menu:Sv(0,t.columns,t.presets)},components:[zT.parts().button(eE(t.icon,t.text,on.none(),on.some(r),on.some([Cg.config({toggleClass:"tox-tbtn--enabled",toggleOnExecute:!1})]),n.providers)),zT.parts().arrow({dom:{tag:"button",classes:["tox-tbtn","tox-split-button__chevron"],innerHtml:ym("chevron-down",n.providers.icons)}}),zT.parts()["aria-descriptor"]({text:n.providers.translate("To open the popup, press Shift+Enter")})]})}function iE(o,r){return lo(ek,function(n,t){var e=function(n){return{hide:function(){return oo(n,hi())},getValue:function(){return Zf.getValue(n)}}}(o.get(n));r.onAction(e,t.event().buttonApi())})}function uE(n,t,e){var o={backstage:{shared:{providers:e}}};return"contextformtogglebutton"===t.type?function(n,t,e){var o=t.original,r=(o.primary,c(o,["primary"])),i=et(QO(N(N({},r),{type:"togglebutton",onAction:function(){}})));return GT(i,e.backstage.shared.providers,[iE(n,t)])}(n,t,o):function(n,t,e){var o=t.original,r=(o.primary,c(o,["primary"])),i=et(JO(N(N({},r),{type:"button",onAction:function(){}})));return WT(i,e.backstage.shared.providers,[iE(n,t)])}(n,t,o)}function aE(n,t){var e=Math.max(t.x(),n.x()),o=n.right()-e,r=t.width()-(e-t.x());return{x:e,width:Math.min(o,r)}}function cE(n){var t=Pb(n)||zb(n)||Xb(n),e=vu(v.window),o=xu(we.fromDom(n.getContentAreaContainer()));return n.inline&&!t?function(n,t,e){var o=aE(t,e),r=o.x,i=o.width;return yu(r,e.y(),i,e.height())}(0,o,e):n.inline?function(n,t,e){var o=aE(t,e),r=o.x,i=o.width,u=we.fromDom(n.getContainer()),a=ku(u,".tox-editor-header").getOr(u),c=xu(a),s=e.height(),f=e.y();if(c.y()>=t.bottom()){var l=Math.min(s+f,c.y());return yu(r,f,i,l-f)}var d=Math.max(f,c.bottom());return yu(r,d,i,s-(d-f))}(n,o,e):function(n,t,e){var o=aE(t,e),r=o.x,i=o.width,u=we.fromDom(n.getContainer()),a=ku(u,".tox-editor-header").getOr(u),c=xu(u),s=xu(a),f=Math.max(e.y(),t.y(),s.bottom()),l=c.bottom()-f,d=e.height()-(f-e.y()),m=Math.min(l,d);return yu(r,f,i,m)}(n,o,e)}function sE(t,n){return Du(n,function(n){return n.predicate(t.dom())?on.some({toolbarApi:n,elem:t}):on.none()})}function fE(o,r){return function(t){function n(){t.setActive(o.formatter.match(r));var n=o.formatter.formatChanged(r,t.setActive).unbind;e.set(on.some(n))}var e=ye(on.none());return o.initialized?n():o.on("init",n),function(){return e.get().each(function(n){return n()})}}}function lE(t){return function(n){return function(){t.undoManager.transact(function(){t.focus(),t.execCommand("mceToggleFormat",!1,n.format)})}}}function dE(n,t,e){var o=e.dataset,r="basic"===o.type?function(){return S(o.data,function(n){return Yk(n,e.isSelectedFor,e.getPreviewFor)})}:o.getData;return{items:function(n,u,a){function r(n,t,e,o){var r=u.shared.providers.translate(n.title);if("separator"===n.type)return on.some({type:"separator",text:r});if("submenu"!==n.type)return on.some(N({type:"togglemenuitem",text:r,active:n.isSelected(o),disabled:e,onAction:a.onAction(n)},n.getStylePreview().fold(function(){return{}},function(n){return{meta:{style:n}}})));var i=B(n.getStyleItems(),function(n){return c(n,t,o)});return 0===t&&i.length<=0?on.none():on.some({type:"nestedmenuitem",text:r,disabled:i.length<=0,getSubmenuItems:function(){return B(n.getStyleItems(),function(n){return c(n,t,o)})}})}function i(n){var t=a.getCurrentValue(),e=a.shouldHide?0:1;return B(n,function(n){return c(n,e,t)})}var c=function(n,t,e){var o="formatter"===n.type&&a.isInvalid(n);return 0===t?o?[]:r(n,t,!1,e).toArray():r(n,t,o,e).toArray()};return{validateItems:i,getFetch:function(o,r){return function(n){var t=r(),e=i(t);n(NC(e,Fh.CLOSE_ON_EXECUTE,o,!1))}}}}(0,t,e),getStyleItems:r}}function mE(o,n,t){var e=dE(0,n,t),r=e.items,i=e.getStyleItems;return FC({text:t.icon.isSome()?on.none():on.some(""),icon:t.icon,tooltip:on.from(t.tooltip),role:on.none(),fetch:r.getFetch(n,i),onSetup:function(e){return t.setInitialValue.each(function(n){return n(e.getComponent())}),t.nodeChangeHandler.map(function(n){var t=n(e.getComponent());return o.on("NodeChange",t),function(){o.off("NodeChange",t)}}).getOr(Z)},getApi:function(n){return{getComponent:function(){return n}}},columns:1,presets:"normal",classes:t.icon.isSome()?[]:["bespoke"],dropdownBehaviours:[]},"tox-tbtn",n.shared)}var gE,pE,hE,vE,bE=Dl({name:"HtmlSelect",configFields:[ct("options"),Fs("selectBehaviours",[vg,Zf]),St("selectClasses",[]),St("selectAttributes",{}),ht("data")],factory:function(e,n){var t=S(e.options,function(n){return{dom:{tag:"option",value:n.value,innerHtml:n.text}}}),o=e.data.map(function(n){return q("initialValue",n)}).getOr({});return{uid:e.uid,dom:{tag:"select",classes:e.selectClasses,attributes:e.selectAttributes},components:t,behaviours:Rs(e.selectBehaviours,[vg.config({}),Zf.config({store:N({mode:"manual",getValue:function(n){return Er(n.element())},setValue:function(n,t){E(e.options,function(n){return n.value===t}).isSome()&&Tr(n.element(),t)}},o)})])}}}),yE=/* */Object.freeze({events:function(n,t){var e=n.stream.streams.setup(n,t);return co([lo(n.event,e),Ri(function(){return t.cancel()})].concat(n.cancelEvent.map(function(n){return[lo(n,function(){return t.cancel()})]}).getOr([])))}}),xE=/* */Object.freeze({throttle:_k,init:function(n){return n.stream.streams.state(n)}}),wE=[st("stream",it("mode",{throttle:[ct("delay"),St("stopEvent",!0),Qu("streams",{setup:function(n,t){var e=n.stream,o=Jg(n.onStream,e.delay);return t.setTimer(o),function(n,t){o.throttle(n,t),e.stopEvent&&t.stop()}},state:_k})]})),St("event","input"),ht("cancelEvent"),Ju("onStream")],SE=ya({fields:wE,name:"streaming",active:yE,state:xE}),CE=function(n){Fk(n,function(n,t){return n.setSelectionRange(t.length,t.length)})},kE=nn("alloy.typeahead.itemexecute"),OE=nn([ht("lazySink"),ct("fetch"),St("minChars",5),St("responseTime",1e3),qu("onOpen"),St("getHotspot",on.some),St("getAnchorOverrides",nn({})),St("layouts",on.none()),St("eventOrder",{}),Dt("model",{},[St("getDisplayText",function(n){return n.meta!==undefined&&n.meta.text!==undefined?n.meta.text:n.value}),St("selectsOver",!0),St("populateFromBrowse",!0)]),qu("onSetValue"),Ku("onExecute"),qu("onItemExecute"),St("inputClasses",[]),St("inputAttributes",{}),St("inputStyles",{}),St("matchWidth",!0),St("useMinWidth",!1),St("dismissOnBlur",!0),Xu(["openClass"]),ht("initialData"),Fs("typeaheadBehaviours",[vg,Zf,SE,lg,Cg,Jy]),At("previewing",function(){return ye(!0)})].concat(by()).concat(ax())),EE=nn([wl({schema:[Gu()],name:"menu",overrides:function(o){return{fakeFocus:!0,onHighlight:function(t,e){o.previewing.get()?t.getSystem().getByUid(o.uid).each(function(n){Ik(o.model,n,e).fold(function(){return ad.dehighlight(t,e)},function(n){return n()})}):t.getSystem().getByUid(o.uid).each(function(n){o.model.populateFromBrowse&&Mk(o.model,n,e)}),o.previewing.set(!1)},onExecute:function(n,t){return n.getSystem().getByUid(o.uid).toOption().map(function(n){return ro(n,kE(),{item:t}),!0})},onHover:function(n,t){o.previewing.set(!1),n.getSystem().getByUid(o.uid).each(function(n){o.model.populateFromBrowse&&Mk(o.model,n,t)})}}}})]),TE=Al({name:"Typeahead",configFields:OE(),partFields:EE(),factory:function(r,n,t,i){function e(n,t,e){r.previewing.set(!1);var o=Jy.getCoupled(n,"sandbox");if(zf.isOpen(o))Zl.getCurrent(o).each(function(n){ad.getHighlighted(n).fold(function(){e(n)},function(){ao(o,n.element(),"keydown",t)})});else{nx(r,u(n),n,o,i,function(n){Zl.getCurrent(n).each(e)},Ay.HighlightFirst).get(Z)}}var o=Zb(r),u=function(o){return function(n){return n.map(function(n){var t=R(n.menus),e=B(t,function(n){return C(n.items,function(n){return"item"===n.type})});return Zf.getState(o).update(S(e,function(n){return n.data})),n})}},a=[vg.config({}),Zf.config({onSetValue:r.onSetValue,store:N({mode:"dataset",getDataKey:function(n){return Er(n.element())},getFallbackEntry:function(n){return{value:n,meta:{}}},setValue:function(n,t){Tr(n.element(),r.model.getDisplayText(t))}},r.initialData.map(function(n){return q("initialValue",n)}).getOr({}))}),SE.config({stream:{mode:"throttle",delay:r.responseTime,stopEvent:!1},onStream:function(n,t){var e=Jy.getCoupled(n,"sandbox");if(vg.isFocused(n)&&Er(n.element()).length>=r.minChars){var o=Zl.getCurrent(e).bind(function(n){return ad.getHighlighted(n).map(Zf.getValue)});r.previewing.set(!0);nx(r,u(n),n,e,i,function(n){Zl.getCurrent(e).each(function(n){o.fold(function(){r.model.selectsOver&&ad.highlightFirst(n)},function(t){ad.highlightBy(n,function(n){return Zf.getValue(n).value===t.value}),ad.getHighlighted(n).orThunk(function(){return ad.highlightFirst(n),on.none()})})})},Ay.HighlightFirst).get(Z)}},cancelEvent:vi()}),lg.config({mode:"special",onDown:function(n,t){return e(n,t,ad.highlightFirst),on.some(!0)},onEscape:function(n){var t=Jy.getCoupled(n,"sandbox");return zf.isOpen(t)?(zf.close(t),on.some(!0)):on.none()},onUp:function(n,t){return e(n,t,ad.highlightLast),on.some(!0)},onEnter:function(t){var n=Jy.getCoupled(t,"sandbox"),e=zf.isOpen(n);if(e&&!r.previewing.get())return Zl.getCurrent(n).bind(function(n){return ad.getHighlighted(n)}).map(function(n){return ro(t,kE(),{item:n}),!0});var o=Zf.getValue(t);return oo(t,vi()),r.onExecute(n,t,o),e&&zf.close(n),on.some(!0)}}),Cg.config({toggleClass:r.markers.openClass,aria:{mode:"expanded"}}),Jy.config({others:{sandbox:function(n){return ix(r,n,{onOpen:function(){return Cg.on(n)},onClose:function(){return Cg.off(n)}})}}}),Kd("typeaheadevents",[Ni(function(n){var t=Z;ex(r,u(n),n,i,t,Ay.HighlightFirst).get(Z)}),lo(kE(),function(n,t){var e=Jy.getCoupled(n,"sandbox");Mk(r.model,n,t.event().item()),oo(n,vi()),r.onItemExecute(n,e,t.event().item(),Zf.getValue(n)),zf.close(e),CE(n)})].concat(r.dismissOnBlur?[lo(si(),function(n){var t=Jy.getCoupled(n,"sandbox");Ca(t.element()).isNone()&&zf.close(t)})]:[]))];return{uid:r.uid,dom:ny(Dn(r,{inputAttributes:{role:"combobox","aria-autocomplete":"list","aria-haspopup":"true"}})),behaviours:N(N({},o),Rs(r.typeaheadBehaviours,a)),eventOrder:r.eventOrder}}}),BE=function(i){return N(N({},i),{toCached:function(){return BE(i.toCached())},bindFuture:function(t){return BE(i.bind(function(n){return n.fold(function(n){return Ny(an.error(n))},function(n){return t(n)})}))},bindResult:function(t){return BE(i.map(function(n){return n.bind(t)}))},mapResult:function(t){return BE(i.map(function(n){return n.map(t)}))},mapError:function(t){return BE(i.map(function(n){return n.mapError(t)}))},foldResult:function(t,e){return i.map(function(n){return n.fold(t,e)})},withTimeout:function(n,r){return BE(Vy(function(t){var e=!1,o=v.setTimeout(function(){e=!0,t(an.error(r()))},n);i.get(function(n){e||(v.clearTimeout(o),t(n))})}))}})},DE=Rk,AE={type:"separator"},_E=Xo("aria-invalid"),ME={bar:Uk(function(n,t){return function(n,t){return{dom:{tag:"div",classes:["tox-bar","tox-form__controls-h-stack"]},components:S(n.items,t.interpreter)}}(n,t.shared)}),collection:Uk(function(n,t){return jk(n,t.shared.providers)}),alertbanner:Uk(function(n,t){return function(t,n){return Wb.sketch({dom:{tag:"div",attributes:{role:"alert"},classes:["tox-notification","tox-notification--in","tox-notification--"+t.level]},components:[{dom:{tag:"div",classes:["tox-notification__icon"]},components:[Gg.sketch({dom:{tag:"button",classes:["tox-button","tox-button--naked","tox-button--icon"],innerHtml:ym(t.icon,n.icons),attributes:{title:n.translate(t.iconTooltip)}},action:function(n){ro(n,sy,{name:"alert-banner",value:t.url})}})]},{dom:{tag:"div",classes:["tox-notification__body"],innerHtml:n.translate(t.text)}}]})}(n,t.shared.providers)}),input:Uk(function(n,t){return function(n,t){return Ak({name:n.name,multiline:!1,label:n.label,inputMode:n.inputMode,placeholder:n.placeholder,flex:!1,disabled:n.disabled,classname:"tox-textfield",validation:on.none(),maximized:n.maximized},t)}(n,t.shared.providers)}),textarea:Uk(function(n,t){return function(n,t){return Ak({name:n.name,multiline:!0,label:n.label,inputMode:on.none(),placeholder:n.placeholder,flex:!0,disabled:n.disabled,classname:"tox-textarea",validation:on.none(),maximized:n.maximized},t)}(n,t.shared.providers)}),label:Uk(function(n,t){return function(n,t){var e={dom:{tag:"label",innerHtml:t.providers.translate(n.label),classes:["tox-label"]}},o=S(n.items,t.interpreter);return{dom:{tag:"div",classes:["tox-form__group"]},components:[e].concat(o),behaviours:ba([xS(),mg.config({}),BS(on.none()),lg.config({mode:"acyclic"})])}}(n,t.shared)}),iframe:(gE=function(n,t){return ww(n,t.shared.providers)},function(n,t,e){var o=Dn(t,{source:"dynamic"});return Uk(gE)(n,o,e)}),button:Uk(function(n,t){return qC(n,t.shared.providers)}),checkbox:Uk(function(n,t){return function(e,t){function n(n){return n.element().dom().click(),on.some(!0)}function o(n){return{dom:{tag:"span",classes:["tox-icon","tox-checkbox-icon__"+n],innerHtml:ym("checked"===n?"selected":"unselected",t.icons)}}}var r=Zf.config({store:{mode:"manual",getValue:function(n){return n.element().dom().checked},setValue:function(n,t){n.element().dom().checked=t}}}),i=vy.parts().field({factory:{sketch:l},dom:{tag:"input",classes:["tox-checkbox__input"],attributes:{type:"checkbox"}},behaviours:ba([xS(),Ch.config({disabled:e.disabled}),Gy.config({}),vg.config({}),r,lg.config({mode:"special",onEnter:n,onSpace:n,stopSpaceKeyup:!0}),Kd("checkbox-events",[lo(oi(),function(n,t){ro(n,uy,{name:e.name})})])])}),u=vy.parts().label({dom:{tag:"span",classes:["tox-checkbox__label"],innerHtml:t.translate(e.label)},behaviours:ba([Ew.config({})])}),a=vm({dom:{tag:"div",classes:["tox-checkbox__icons"]},components:[o("checked"),o("unchecked")]});return vy.sketch({dom:{tag:"label",classes:["tox-checkbox"]},components:[i,a.asSpec(),u],fieldBehaviours:ba([Ch.config({disabled:e.disabled,disableClass:"tox-checkbox--disabled",onDisabled:function(n){vy.getField(n).each(Ch.disable)},onEnabled:function(n){vy.getField(n).each(Ch.enable)}})])})}(n,t.shared.providers)}),colorinput:Uk(function(n,t){return cx(n,t.shared,t.colorinput)}),colorpicker:Uk(function(n){function t(n){return"tox-"+n}var e=yS(pw,t),r=vm(e.sketch({dom:{tag:"div",classes:[t("color-picker-container")],attributes:{role:"presentation"}},onValidHex:function(n){ro(n,sy,{name:"hex-valid",value:!0})},onInvalidHex:function(n){ro(n,sy,{name:"hex-valid",value:!1})}}));return{dom:{tag:"div"},components:[r.asSpec()],behaviours:ba([Zf.config({store:{mode:"manual",getValue:function(n){var t=r.get(n);return Zl.getCurrent(t).bind(function(n){return Zf.getValue(n).hex}).map(function(n){return"#"+n}).getOr("")},setValue:function(n,t){var e=/^#([a-fA-F0-9]{3}(?:[a-fA-F0-9]{3})?)/.exec(t),o=r.get(n);Zl.getCurrent(o).fold(function(){v.console.log("Can not find form")},function(n){Zf.setValue(n,{hex:on.from(e[1]).getOr("")}),dS.getField(n,"hex").each(function(n){oo(n,ei())})})}}}),xS()])}}),dropzone:Uk(function(n,t){return bw(n,t.shared.providers)}),grid:Uk(function(n,t){return function(n,t){return{dom:{tag:"div",classes:["tox-form__grid","tox-form__grid--"+n.columns+"col"]},components:S(n.items,t.interpreter)}}(n,t.shared)}),selectbox:Uk(function(n,t){return function(e,t){var n=S(e.items,function(n){return{text:t.translate(n.text),value:n.value}}),o=e.label.map(function(n){return Dy(n,t)}),r=vy.parts().field({dom:{},selectAttributes:{size:e.size},options:n,factory:bE,selectBehaviours:ba([Ch.config({disabled:e.disabled}),Gy.config({}),Kd("selectbox-change",[lo(oi(),function(n,t){ro(n,uy,{name:e.name})})])])}),i=1<e.size?on.none():on.some({dom:{tag:"div",classes:["tox-selectfield__icon-js"],innerHtml:ym("chevron-down",t.icons)}}),u={dom:{tag:"div",classes:["tox-selectfield"]},components:H([[r],i.toArray()])};return vy.sketch({dom:{tag:"div",classes:["tox-form__group"]},components:H([o.toArray(),[u]]),fieldBehaviours:ba([Ch.config({disabled:e.disabled,onDisabled:function(n){vy.getField(n).each(Ch.disable)},onEnabled:function(n){vy.getField(n).each(Ch.enable)}})])})}(n,t.shared.providers)}),sizeinput:Uk(function(n,t){return nk(n,t.shared.providers)}),urlinput:Uk(function(n,t){return Lk(n,t,t.urlinput)}),customeditor:Uk(function(e){var o=ye(on.none()),t=vm({dom:{tag:e.tag}}),r=ye(on.none());return{dom:{tag:"div",classes:["tox-custom-editor"]},behaviours:ba([Kd("editor-foo-events",[Ii(function(n){t.getOpt(n).each(function(t){(!function(n){return Object.prototype.hasOwnProperty.call(n,"init")}(e)?kS.load(e.scriptId,e.scriptUrl).then(function(n){return n(t.element().dom(),e.settings)}):e.init(t.element().dom())).then(function(t){r.get().each(function(n){t.setValue(n)}),r.set(on.none()),o.set(on.some(t))})})})]),Zf.config({store:{mode:"manual",getValue:function(){return o.get().fold(function(){return r.get().getOr("")},function(n){return n.getValue()})},setValue:function(n,t){o.get().fold(function(){r.set(on.some(t))},function(n){return n.setValue(t)})}}}),xS()]),components:[t.asSpec()]}}),htmlpanel:Uk(function(n){return"presentation"===n.presets?Wb.sketch({dom:{tag:"div",classes:["tox-form__group"],innerHtml:n.html}}):Wb.sketch({dom:{tag:"div",classes:["tox-form__group"],innerHtml:n.html,attributes:{role:"document"}},containerBehaviours:ba([Gy.config({}),vg.config({})])})}),imagetools:Uk(function(n,t){return Dk(n,t.shared.providers)}),table:Uk(function(n,t){return function(n,t){function e(n){return{dom:{tag:"th",innerHtml:t.translate(n)}}}function o(n){return{dom:{tag:"td",innerHtml:t.translate(n)}}}function r(n){return{dom:{tag:"tr"},components:S(n,o)}}var i,u;return{dom:{tag:"table",classes:["tox-dialog__table"]},components:[(u=n.header,{dom:{tag:"thead"},components:[{dom:{tag:"tr"},components:S(u,e)}]}),(i=n.cells,{dom:{tag:"tbody"},components:S(i,r)})],behaviours:ba([Gy.config({}),vg.config({})])}}(n,t.shared.providers)}),panel:Uk(function(n,t){return function(n,t){return{dom:{tag:"div",classes:n.classes},components:S(n.items,t.shared.interpreter)}}(n,t)})},FE={field:function(n,t){return t}},IE=function(t,e,o){return Nn(ME,e.type).fold(function(){return v.console.error('Unknown factory type "'+e.type+'", defaulting to container: ',e),e},function(n){return n(t,e,o)})},RE=nn(function(n,t){!function(n,t){var e=Vu.max(n,t,["margin-left","border-left-width","padding-left","padding-right","border-right-width","margin-right"]);yr(n,"max-width",e+"px")}(n,Math.floor(t))}),VE={valignCentre:[],alignCentre:[],alignLeft:[],alignRight:[],right:[],left:[],bottom:[],top:[]},NE=function(n,t,e){function o(){return we.fromDom(n.getBody())}var r=Kb(n);return{toolbar:function(n,t,e){return e?function(){return{anchor:"node",root:n(),node:on.from(n()),bubble:Oa(-12,-12,VE),layouts:{onRtl:function(){return[pm]},onLtr:function(){return[hm]}},overrides:{maxHeightFunction:Cf()}}}:function(){return{anchor:"hotspot",hotspot:t(),bubble:Oa(-12,12,VE),layouts:{onRtl:function(){return[ua]},onLtr:function(){return[aa]}},overrides:{maxHeightFunction:Cf()}}}}(o,t,r),toolbarOverflow:function(n){return function(){return{anchor:"hotspot",hotspot:n(),overrides:{maxWidthFunction:RE()},layouts:{onRtl:function(){return[ua,aa]},onLtr:function(){return[aa,ua]}}}}}(e),banner:function(n,t,e){return e?function(){return{anchor:"node",root:n(),node:on.from(n()),layouts:{onRtl:function(){return[Ug]},onLtr:function(){return[Ug]}}}}:function(){return{anchor:"hotspot",hotspot:t(),layouts:{onRtl:function(){return[rc]},onLtr:function(){return[rc]}}}}}(o,t,r),cursor:function(t,n){return function(){return{anchor:"selection",root:n(),getSelection:function(){var n=t.selection.getRng();return on.some(Tc.range(we.fromDom(n.startContainer),n.startOffset,we.fromDom(n.endContainer),n.endOffset))}}}}(n,o),node:function(t){return function(n){return{anchor:"node",root:t(),node:n}}}(o)}},HE=[{title:"Headings",items:[{title:"Heading 1",format:"h1"},{title:"Heading 2",format:"h2"},{title:"Heading 3",format:"h3"},{title:"Heading 4",format:"h4"},{title:"Heading 5",format:"h5"},{title:"Heading 6",format:"h6"}]},{title:"Inline",items:[{title:"Bold",icon:"bold",format:"bold"},{title:"Italic",icon:"italic",format:"italic"},{title:"Underline",icon:"underline",format:"underline"},{title:"Strikethrough",icon:"strike-through",format:"strikethrough"},{title:"Superscript",icon:"superscript",format:"superscript"},{title:"Subscript",icon:"subscript",format:"subscript"},{title:"Code",icon:"code",format:"code"}]},{title:"Blocks",items:[{title:"Paragraph",format:"p"},{title:"Blockquote",format:"blockquote"},{title:"Div",format:"div"},{title:"Pre",format:"pre"}]},{title:"Align",items:[{title:"Left",icon:"align-left",format:"alignleft"},{title:"Center",icon:"align-center",format:"aligncenter"},{title:"Right",icon:"align-right",format:"alignright"},{title:"Justify",icon:"align-justify",format:"alignjustify"}]}],PE=function(n){return O(n,function(n,t){if(function(n){return En(n,"items")}(t)){var e=PE(t.items);return{customFormats:n.customFormats.concat(e.customFormats),formats:n.formats.concat([{title:t.title,items:e.formats}])}}if(function(n){return En(n,"inline")}(t)||function(n){return En(n,"block")}(t)||function(n){return En(n,"selector")}(t)){var o="custom-"+t.title.toLowerCase();return{customFormats:n.customFormats.concat([{name:o,format:t}]),formats:n.formats.concat([{title:t.title,format:o,icon:t.icon}])}}return N(N({},n),{formats:n.formats.concat(t)})},{customFormats:[],formats:[]})},zE=yk.trim,LE=Kk("true"),jE=Kk("false"),UE=function(n){return function(n){for(;n=n.parentNode;){var t=n.contentEditable;if(t&&"inherit"!==t)return LE(n)}return!1}(n)&&!jE(n)},WE=function(n){var t=oO(n);return C(function(n){return S(C(n,nO),tO)}(t).concat(function(n){return S(C(n,Qk),eO)}(t)),rO)},GE="tinymce-url-history",XE=Object.prototype.hasOwnProperty,YE="contexttoolbar-hide",qE=nn([ct("dom"),St("shell",!0),Fs("toolbarBehaviours",[mg])]),KE=nn([Sl({name:"groups",overrides:function(n){return{behaviours:ba([mg.config({})])}}})]),JE=Al({name:"Toolbar",configFields:qE(),partFields:KE(),factory:function(t,n,e,o){var r=function(n){return t.shell?on.some(n):qs(n,t,"groups")},i=t.shell?{behaviours:[mg.config({})],components:[]}:{behaviours:[],components:n};return{uid:t.uid,dom:t.dom,components:i.components,behaviours:Rs(t.toolbarBehaviours,i.behaviours),apis:{setGroups:function(n,t){r(n).fold(function(){throw v.console.error("Toolbar was defined to not be a shell, but no groups container was specified in components"),new Error("Toolbar was defined to not be a shell, but no groups container was specified in components")},function(n){mg.set(n,t)})}},domModification:{attributes:{role:"group"}}}},apis:{setGroups:function(n,t,e){n.setGroups(t,e)}}}),$E=yo("within","extra","withinWidth"),QE=nn([ct("items"),Xu(["itemSelector"]),Fs("tgroupBehaviours",[lg])]),ZE=nn([Cl({name:"items",unit:"item"})]),nT=Al({name:"ToolbarGroup",configFields:QE(),partFields:ZE(),factory:function(n,t,e,o){return{uid:n.uid,dom:n.dom,components:t,behaviours:Rs(n.tgroupBehaviours,[lg.config({mode:"flow",selector:n.markers.itemSelector})]),domModification:{attributes:{role:"toolbar"}}}}}),tT=nn([Fs("splitToolbarBehaviours",[Jy]),At("builtGroups",function(){return ye([])})]),eT=nn([Xu(["overflowToggledClass"]),ct("getAnchor"),xt("getOverflowBounds"),ct("lazySink")].concat(tT())),oT=nn([xl({factory:JE,schema:qE(),name:"primary"}),wl({factory:JE,schema:qE(),name:"overflow",overrides:function(t){return{toolbarBehaviours:ba([lg.config({mode:"cyclic",onEscape:function(n){return qs(n,t,"overflow-button").each(vg.focus),on.none()}})])}}}),wl({name:"overflow-button",overrides:function(n){return{dom:{attributes:{"aria-haspopup":"true"}},buttonBehaviours:ba([Cg.config({toggleClass:n.markers.overflowToggledClass,aria:{mode:"expanded"},toggleOnExecute:!1})])}}}),wl({name:"overflow-group"})]),rT=Al({name:"SplitFloatingToolbar",configFields:eT(),partFields:oT(),factory:function(t,n,e,o){return SO(t,n,0,o,{coupling:{sandbox:function(n){return function(o,e){var r=Eu();return{dom:{tag:"div",attributes:{id:r.id()}},behaviours:ba([lg.config({mode:"special",onEscape:function(n){return zf.close(n),on.some(!0)}}),zf.config({onOpen:function(n,t){OO(o,e),qs(o,e,"overflow-button").each(function(n){Cg.on(n),r.link(n.element())}),lg.focusIn(t)},onClose:function(){qs(o,e,"overflow-button").each(function(n){Cg.off(n),vg.focus(n),r.unlink(n.element())})},isPartOf:function(n,t,e){return Lu(t,e)||Lu(o,e)},getAttachPoint:function(){return e.lazySink(o).getOrDie()}}),lc.config({channels:N({},Ts({isExtraPart:nn(!1),doReposition:function(){return EO(o,e)}}))})])}}(n,t)}},apis:{refresh:function(n){return OO(n,t)},toggle:function(n){return function(n,t,e){var o=Jy.getCoupled(n,"sandbox");zf.isOpen(o)?zf.close(o):zf.open(o,e.overflow())}(n,0,o)},getOverflow:function(n){return zf.getState(Jy.getCoupled(n,"sandbox"))},reposition:function(n){return EO(n,t)}}})},apis:{setGroups:function(n,t,e){n.setGroups(t,e)},refresh:function(n,t){n.refresh(t)},reposition:function(n,t){n.reposition(t)},getMoreButton:function(n,t){return n.getMoreButton(t)},getOverflow:function(n,t){return n.getOverflow(t)},toggle:function(n,t){n.toggle(t)}}}),iT=/* */Object.freeze({refresh:function(n,t,e){if(e.isExpanded()){kr(n.element(),BO(t));var o=DO(t,n.element());yr(n.element(),BO(t),o)}},grow:function(n,t,e){e.isExpanded()||VO(n,t,e)},shrink:function(n,t,e){e.isExpanded()&&RO(n,t,e)},immediateShrink:function(n,t,e){e.isExpanded()&&FO(n,t,e)},hasGrown:function(n,t,e){return e.isExpanded()},hasShrunk:function(n,t,e){return e.isCollapsed()},isGrowing:NO,isShrinking:HO,isTransitioning:function(n,t,e){return!0===NO(n,t)||!0===HO(n,t)},toggleGrow:function(n,t,e){(e.isExpanded()?RO:VO)(n,t,e)},disableTransitions:AO}),uT=/* */Object.freeze({exhibit:function(n,t){var e=t.expanded;return Zo(e?{classes:[t.openClass],styles:{}}:{classes:[t.closedClass],styles:q(t.dimension.property,"0px")})},events:function(e,o){return co([bo(ii(),function(n,t){t.event().raw().propertyName===e.dimension.property&&(AO(n,e),o.isExpanded()&&kr(n.element(),e.dimension.property),(o.isExpanded()?e.onGrown:e.onShrunk)(n))})])}}),aT=[ct("closedClass"),ct("openClass"),ct("shrinkingClass"),ct("growingClass"),ht("getAnimationRoot"),qu("onShrunk"),qu("onStartShrink"),qu("onGrown"),qu("onStartGrow"),St("expanded",!1),st("dimension",it("property",{width:[Qu("property","width"),Qu("getDimension",function(n){return mu(n)+"px"})],height:[Qu("property","height"),Qu("getDimension",function(n){return su(n)+"px"})]}))],cT=ya({fields:aT,name:"sliding",active:uT,apis:iT,state:/* */Object.freeze({init:function(n){var t=ye(n.expanded);return nu({isExpanded:function(){return!0===t.get()},isCollapsed:function(){return!1===t.get()},setCollapsed:d(t.set,!1),setExpanded:d(t.set,!0),readState:function(){return"expanded: "+t.get()}})}})}),sT=nn([Xu(["closedClass","openClass","shrinkingClass","growingClass","overflowToggledClass"]),qu("onOpened"),qu("onClosed")].concat(tT())),fT=nn([xl({factory:JE,schema:qE(),name:"primary"}),xl({factory:JE,schema:qE(),name:"overflow",overrides:function(t){return{toolbarBehaviours:ba([cT.config({dimension:{property:"height"},closedClass:t.markers.closedClass,openClass:t.markers.openClass,shrinkingClass:t.markers.shrinkingClass,growingClass:t.markers.growingClass,onShrunk:function(n){qs(n,t,"overflow-button").each(function(n){Cg.off(n),vg.focus(n)}),t.onClosed(n)},onGrown:function(n){lg.focusIn(n),t.onOpened(n)},onStartGrow:function(n){qs(n,t,"overflow-button").each(Cg.on)}}),lg.config({mode:"acyclic",onEscape:function(n){return qs(n,t,"overflow-button").each(vg.focus),on.some(!0)}})])}}}),wl({name:"overflow-button",overrides:function(n){return{buttonBehaviours:ba([Cg.config({toggleClass:n.markers.overflowToggledClass,aria:{mode:"pressed"},toggleOnExecute:!1})])}}}),wl({name:"overflow-group"})]),lT=function(n,t){var e=qs(n,t,"overflow");wO(n,t,e,PO),e.each(cT.refresh)},dT=Al({name:"SplitSlidingToolbar",configFields:sT(),partFields:fT(),factory:function(t,n,e,o){return SO(t,n,0,o,{coupling:{},apis:{refresh:function(n){return lT(n,t)},toggle:function(n){return function(t,e){qs(t,e,"overflow").each(function(n){lT(t,e),cT.toggleGrow(n)})}(n,t)},getOverflow:function(n){return qs(n,t,"overflow")}}})},apis:{setGroups:function(n,t,e){n.setGroups(t,e)},refresh:function(n,t){n.refresh(t)},getMoreButton:function(n,t){return n.getMoreButton(t)},getOverflow:function(n,t){return n.getOverflow(t)},toggle:function(n,t){n.toggle(t)}}}),mT=nn(Xo("toolbar-height-change")),gT="silver.readonly",pT=re([(pE="readonly",st(pE,pe))]),hT=[Tt("disabled",!1),yt("tooltip"),yt("icon"),yt("text"),Bt("onSetup",function(){return Z})],vT=re([ft("type"),dt("onAction")].concat(hT)),bT=[yt("text"),yt("tooltip"),yt("icon"),dt("fetch"),Bt("onSetup",function(){return Z})],yT=re(g([ft("type")],bT)),xT=re([ft("type"),yt("tooltip"),yt("icon"),yt("text"),xt("select"),dt("fetch"),Bt("onSetup",function(){return Z}),Et("presets","normal",["normal","color","listpreview"]),St("columns",1),dt("onAction"),dt("onItemAction")]),wT=[Tt("active",!1)].concat(hT),ST=re(wT.concat([ft("type"),dt("onAction")])),CT=[Bt("predicate",function(){return!1}),Et("scope","node",["node","editor"]),Et("position","selection",["node","selection","line"])],kT=hT.concat([St("type","contextformbutton"),St("primary",!1),dt("onAction"),At("original",l)]),OT=wT.concat([St("type","contextformbutton"),St("primary",!1),dt("onAction"),At("original",l)]),ET=hT.concat([St("type","contextformbutton")]),TT=wT.concat([St("type","contextformtogglebutton")]),BT=it("type",{contextformbutton:kT,contextformtogglebutton:OT}),DT=re([St("type","contextform"),Bt("initValue",function(){return""}),yt("label"),pt("commands",BT),vt("launch",it("type",{contextformbutton:ET,contextformtogglebutton:TT}))].concat(CT)),AT=re([St("type","contexttoolbar"),ft("items")].concat(CT)),_T=/* */Object.freeze({getState:function(n,t,e){return e}}),MT=/* */Object.freeze({events:function(i,u){function o(o,r){i.updateState.each(function(n){var t=n(o,r);u.set(t)}),i.renderComponents.each(function(n){var t=n(r,u.get()),e=S(t,o.getSystem().build);ps(o,e)})}return co([lo(li(),function(n,t){var e=i.channel;vn(t.channels(),e)&&o(n,t.data())}),Ii(function(t,n){i.initialData.each(function(n){o(t,n)})})])}}),FT=/* */Object.freeze({init:function(n){var t=ye(on.none());return{readState:function(){return t.get().fold(function(){return"none"},function(n){return n})},get:function(){return t.get()},set:function(n){return t.set(n)},clear:function(){return t.set(on.none())}}}}),IT=[ct("channel"),ht("renderComponents"),ht("updateState"),ht("initialData")],RT=ya({fields:IT,name:"reflecting",active:MT,apis:_T,state:FT}),VT=nn([ct("toggleClass"),ct("fetch"),Ju("onExecute"),St("getHotspot",on.some),St("getAnchorOverrides",nn({})),St("layouts",on.none()),Ju("onItemExecute"),ht("lazySink"),ct("dom"),qu("onOpen"),Fs("splitDropdownBehaviours",[Jy,lg,vg]),St("matchWidth",!1),St("useMinWidth",!1),St("eventOrder",{}),ht("role")].concat(ax())),NT=xl({factory:Gg,schema:[ct("dom")],name:"arrow",defaults:function(n){return{buttonBehaviours:ba([vg.revoke()])}},overrides:function(t){return{dom:{tag:"span",attributes:{role:"presentation"}},action:function(n){n.getSystem().getByUid(t.uid).each(io)},buttonBehaviours:ba([Cg.config({toggleOnExecute:!1,toggleClass:t.toggleClass})])}}}),HT=xl({factory:Gg,schema:[ct("dom")],name:"button",defaults:function(n){return{buttonBehaviours:ba([vg.revoke()])}},overrides:function(e){return{dom:{tag:"span",attributes:{role:"presentation"}},action:function(t){t.getSystem().getByUid(e.uid).each(function(n){e.onExecute(n,t)})}}}}),PT=nn([NT,HT,Sl({factory:{sketch:function(n){return{uid:n.uid,dom:{tag:"span",styles:{display:"none"},attributes:{"aria-hidden":"true"},innerHtml:n.text}}}},schema:[ct("text")],name:"aria-descriptor"}),wl({schema:[Gu()],name:"menu",defaults:function(o){return{onExecute:function(t,e){t.getSystem().getByUid(o.uid).each(function(n){o.onItemExecute(n,t,e)})}}}}),Qy()]),zT=Al({name:"SplitDropdown",configFields:VT(),partFields:PT(),factory:function(o,n,t,e){function r(n){Zl.getCurrent(n).each(function(n){ad.highlightFirst(n),lg.focusIn(n)})}function i(n){ex(o,function(n){return n},n,e,r,Ay.HighlightFirst).get(Z)}function u(n){var t=Ks(n,o,"button");return io(t),on.some(!0)}var a=An(co([Ii(function(e,n){qs(e,o,"aria-descriptor").each(function(n){var t=Xo("aria");Po(n.element(),"id",t),Po(e.element(),"aria-describedby",t)})})]),rm(on.some(i))),c={repositionMenus:function(n){Cg.isOn(n)&&ux(n)}};return{uid:o.uid,dom:o.dom,components:n,apis:c,eventOrder:N(N({},o.eventOrder),{"alloy.execute":["disabling","toggling","alloy.base.behaviour"]}),events:a,behaviours:Rs(o.splitDropdownBehaviours,[Jy.config({others:{sandbox:function(n){var t=Ks(n,o,"arrow");return ix(o,n,{onOpen:function(){Cg.on(t),Cg.on(n)},onClose:function(){Cg.off(t),Cg.off(n)}})}}}),lg.config({mode:"special",onSpace:u,onEnter:u,onDown:function(n){return i(n),on.some(!0)}}),vg.config({}),Cg.config({toggleOnExecute:!1,aria:{mode:"expanded"}})]),domModification:{attributes:{role:o.role.getOr("button"),"aria-haspopup":!0}}}},apis:{repositionMenus:function(n,t){return n.repositionMenus(t)}}}),LT=Xo("focus-button"),jT=["checklist","ordered-list"],UT=["indent","outdent","table-insert-column-after","table-insert-column-before","unordered-list"],WT=function(n,t,e){return oE(n,{toolbarButtonBehaviours:[].concat(0<e.length?[Kd("toolbarButtonWith",e)]:[]),getApi:ZO,onSetup:n.onSetup},t)},GT=function(n,t,e){return Dn(oE(n,{toolbarButtonBehaviours:[mg.config({}),Cg.config({toggleClass:"tox-tbtn--enabled",aria:{mode:"pressed"},toggleOnExecute:!1})].concat(0<e.length?[Kd("toolbarToggleButtonWith",e)]:[]),getApi:nE,onSetup:n.onSetup},t))},XT=function(n,t,e){var o=t.label.fold(function(){return{}},function(n){return{"aria-label":n}}),r=vm(yy.sketch({inputClasses:["tox-toolbar-textfield","tox-toolbar-nav-js"],data:t.initValue(),inputAttributes:o,selectOnFocus:!0,inputBehaviours:ba([lg.config({mode:"special",onEnter:function(n){return i.findPrimary(n).map(function(n){return io(n),!0})},onLeft:function(n,t){return t.cut(),on.none()},onRight:function(n,t){return t.cut(),on.none()}})])})),i=function(t,n,e){var o=S(n,function(n){return vm(uE(t,n,e))});return{asSpecs:function(){return S(o,function(n){return n.asSpec()})},findPrimary:function(e){return Du(n,function(n,t){return n.primary?on.from(o[t]).bind(function(n){return n.getOpt(e)}).filter(b(Ch.isDisabled)):on.none()})}}}(r,t.commands,e.shared.providers);return KO({type:n,uid:Xo("context-toolbar"),initGroups:[{title:on.none(),items:[r.asSpec()]},{title:on.none(),items:i.asSpecs()}],onEscape:on.none,cyclicKeying:!0,backstage:e,getSink:function(){return an.error("")}})},YT=function(t,e){function n(n){return n.dom()===e.getBody()}var o=we.fromDom(e.selection.getNode());return sE(o,t.inNodeScope).orThunk(function(){return sE(o,t.inEditorScope).orThunk(function(){return function(n,t,e){for(var o=n.dom(),r=dn(e)?e:nn(!1);o.parentNode;){o=o.parentNode;var i=we.fromDom(o),u=t(i);if(u.isSome())return u;if(r(i))break}return on.none()}(o,function(n){return sE(n,t.inNodeScope)},n)})})},qT=function(e,r){function o(t,e){var o=et(function(n){return tt("ContextForm",DT,n)}(e));(n[t]=o).launch.map(function(n){c["form:"+t]=N(N({},e.launch),{type:"contextformtogglebutton"===n.type?"togglebutton":"button",onAction:function(){r(o)}})}),"editor"===o.scope?a.push(o):u.push(o),s[t]=o}function i(t,e){(function(n){return tt("ContextToolbar",AT,n)})(e).each(function(n){"editor"===e.scope?a.push(n):u.push(n),s[t]=n})}var n={},u=[],a=[],c={},s={},t=wn(e);return bn(t,function(n){var t=e[n];"contextform"===t.type?o(n,t):"contexttoolbar"===t.type&&i(n,t)}),{forms:n,inNodeScope:u,inEditorScope:a,lookupTable:s,formNavigators:c}},KT=Xo("forward-slide"),JT=Xo("backward-slide"),$T=Xo("change-slide-event"),QT="tox-pop--resizing";(vE=hE=hE||{})[vE.SemiColon=0]="SemiColon",vE[vE.Space=1]="Space";function ZT(n,t,e,o){return{type:"basic",data:function(n){return S(n,function(n){var t=n,e=n,o=n.split("=");return 1<o.length&&(t=o[0],e=o[1]),{title:t,format:e}})}(function(n,t){return t===hE.SemiColon?n.replace(/;$/,"").split(";"):n.split(" ")}(Nn(n.settings,t).getOr(e),o))}}function nB(e){function t(n){var t=E(RD,function(n){return e.formatter.match(n.format)}).fold(function(){return"left"},function(n){return n.title.toLowerCase()});ro(n,ik,{icon:"align-"+t})}var n=on.some(function(n){return function(){return t(n)}}),o=on.some(function(n){return t(n)}),r=function(n){return{type:"basic",data:n}}(RD);return{tooltip:"Align",icon:on.some("align-left"),isSelectedFor:function(n){return function(){return e.formatter.match(n)}},getCurrentValue:nn(on.none()),getPreviewFor:function(n){return function(){return on.none()}},onAction:lE(e),setInitialValue:o,nodeChangeHandler:n,dataset:r,shouldHide:!1,isInvalid:function(n){return!e.formatter.canApply(n.format)}}}function tB(n){var t=n.split(/\s*,\s*/);return S(t,function(n){return n.replace(/^['"]+|['"]+$/g,"")})}function eB(r){function i(){function e(n){return n?tB(n)[0]:""}var n=r.queryCommandValue("FontName"),t=u.data,o=n?n.toLowerCase():"";return{matchOpt:E(t,function(n){var t=n.format;return t.toLowerCase()===o||e(t).toLowerCase()===e(o).toLowerCase()}).orThunk(function(){return function(n){var t;return 0===n.indexOf("-apple-system")&&(t=tB(n.toLowerCase()),D(VD,function(n){return-1<t.indexOf(n.toLowerCase())}))}(o)?on.from({title:"System Font",format:o}):on.none()}),font:n}}function t(n){var t=i(),e=t.matchOpt,o=t.font,r=e.fold(function(){return o},function(n){return n.title});ro(n,rk,{text:r})}var n=on.some(function(n){return function(){return t(n)}}),e=on.some(function(n){return t(n)}),u=ZT(r,"font_formats","Andale Mono=andale mono,monospace;Arial=arial,helvetica,sans-serif;Arial Black=arial black,sans-serif;Book Antiqua=book antiqua,palatino,serif;Comic Sans MS=comic sans ms,sans-serif;Courier New=courier new,courier,monospace;Georgia=georgia,palatino,serif;Helvetica=helvetica,arial,sans-serif;Impact=impact,sans-serif;Symbol=symbol;Tahoma=tahoma,arial,helvetica,sans-serif;Terminal=terminal,monaco,monospace;Times New Roman=times new roman,times,serif;Trebuchet MS=trebuchet ms,geneva,sans-serif;Verdana=verdana,geneva,sans-serif;Webdings=webdings;Wingdings=wingdings,zapf dingbats",hE.SemiColon);return{tooltip:"Fonts",icon:on.none(),isSelectedFor:function(t){return function(n){return n.exists(function(n){return n.format===t})}},getCurrentValue:function(){return i().matchOpt},getPreviewFor:function(n){return function(){return on.some({tag:"div",styleAttr:-1===n.indexOf("dings")?"font-family:"+n:""})}},onAction:function(n){return function(){r.undoManager.transact(function(){r.focus(),r.execCommand("FontName",!1,n.format)})}},setInitialValue:e,nodeChangeHandler:n,dataset:u,shouldHide:!1,isInvalid:function(){return!1}}}function oB(n,t){return/[0-9.]+px$/.test(n)?function(n,t){var e=Math.pow(10,t);return Math.round(n*e)/e}(72*parseInt(n,10)/96,t||0)+"pt":n}function rB(e){function i(){var o=on.none(),r=u.data,i=e.queryCommandValue("FontSize");if(i)for(var n=function(n){var t=oB(i,n),e=function(n){return V(ND,n).getOr("")}(t);o=E(r,function(n){return n.format===i||n.format===t||n.format===e})},t=3;o.isNone()&&0<=t;t--)n(t);return{matchOpt:o,px:i}}function t(n){var t=i(),e=t.matchOpt,o=t.px,r=e.fold(function(){return o},function(n){return n.title});ro(n,rk,{text:r})}var n=nn(nn(on.none())),o=on.some(function(n){return function(){return t(n)}}),r=on.some(function(n){return t(n)}),u=ZT(e,"fontsize_formats","8pt 10pt 12pt 14pt 18pt 24pt 36pt",hE.Space);return{tooltip:"Font sizes",icon:on.none(),isSelectedFor:function(t){return function(n){return n.exists(function(n){return n.format===t})}},getPreviewFor:n,getCurrentValue:function(){return i().matchOpt},onAction:function(n){return function(){e.undoManager.transact(function(){e.focus(),e.execCommand("FontSize",!1,n.format)})}},setInitialValue:r,nodeChangeHandler:o,dataset:u,shouldHide:!1,isInvalid:function(){return!1}}}function iB(e,n,t){var o=n();return Du(t,function(t){return E(o,function(n){return e.formatter.matchNode(t,n.format)})}).orThunk(function(){return e.formatter.match("p")?on.some({title:"Paragraph",format:"p"}):on.none()})}function uB(n){var t=n.selection.getStart(!0)||n.getBody();return n.dom.getParents(t,function(){return!0},n.getBody())}function aB(o){function e(n,t){var e=function(n){return iB(o,function(){return r.data},n)}(n).fold(function(){return"Paragraph"},function(n){return n.title});ro(t,rk,{text:e})}var n=on.some(function(t){return function(n){return e(n.parents,t)}}),t=on.some(function(n){var t=uB(o);e(t,n)}),r=ZT(o,"block_formats","Paragraph=p;Heading 1=h1;Heading 2=h2;Heading 3=h3;Heading 4=h4;Heading 5=h5;Heading 6=h6;Preformatted=pre",hE.SemiColon);return{tooltip:"Blocks",icon:on.none(),isSelectedFor:function(n){return function(){return o.formatter.match(n)}},getCurrentValue:nn(on.none()),getPreviewFor:function(t){return function(){var n=o.formatter.get(t);return on.some({tag:0<n.length&&(n[0].inline||n[0].block)||"div",styleAttr:o.formatter.getCssText(t)})}},onAction:lE(o),setInitialValue:t,nodeChangeHandler:n,dataset:r,shouldHide:!1,isInvalid:function(n){return!o.formatter.canApply(n.format)}}}function cB(i,n){function e(n,t){var e=function(n){var t=n.items;return t!==undefined&&0<t.length?B(t,e):[{title:n.title,format:n.format}]},o=B(Xk(i),e),r=iB(i,function(){return o},n).fold(function(){return"Paragraph"},function(n){return n.title});ro(t,rk,{text:r})}var t=on.some(function(t){return function(n){return e(n.parents,t)}}),o=on.some(function(n){var t=uB(i);e(t,n)});return{tooltip:"Formats",icon:on.none(),isSelectedFor:function(n){return function(){return i.formatter.match(n)}},getCurrentValue:nn(on.none()),getPreviewFor:function(t){return function(){var n=i.formatter.get(t);return n!==undefined?on.some({tag:0<n.length&&(n[0].inline||n[0].block)||"div",styleAttr:i.formatter.getCssText(t)}):on.none()}},onAction:lE(i),setInitialValue:o,nodeChangeHandler:t,shouldHide:i.getParam("style_formats_autohide",!1,"boolean"),isInvalid:function(n){return!i.formatter.canApply(n.format)},dataset:n}}function sB(o,r){return function(n,t){var e=o(n).mapError(function(n){return le(n)}).getOrDie();return r(e,t)}}function fB(n){var t=n.toolbar,e=n.buttons;return!1===t?[]:t===undefined||!0===t?function(e){var n=S(HD,function(n){var t=C(n.items,function(n){return En(e,n)||En(zD,n)});return{name:n.name,items:t}});return C(n,function(n){return 0<n.items.length})}(e):cn(t)?function(n){var t=n.split("|");return S(t,function(n){return{items:n.trim().split(" ")}})}(t):function(n){return h(n,function(n){return En(n,"name")&&En(n,"items")})}(t)?t:(v.console.error("Toolbar type should be string, string[], boolean or ToolbarGroup[]"),[])}function lB(t,e,o,r,n){return V(e,o.toLowerCase()).orThunk(function(){return n.bind(function(n){return Du(n,function(n){return V(e,n+o.toLowerCase())})})}).fold(function(){return V(zD,o.toLowerCase()).map(function(n){return n(t,r)}).orThunk(function(){return on.none()})},function(n){return function(t,e){return V(PD,t.type).fold(function(){return v.console.error("skipping button defined by",t),on.none()},function(n){return on.some(n(t,e))})}(n,r)})}function dB(e,o,r,i){var n=fB(o),t=S(n,function(n){var t=B(n.items,function(n){return 0===n.trim().length?[]:lB(e,o.buttons,n,r,i).toArray()});return{title:on.from(e.translate(n.name)),items:t}});return C(t,function(n){return 0<n.items.length})}function mB(e){return(Sr(e,"position").is("fixed")?on.none():To(e)).orThunk(function(){var n=we.fromTag("span");Ao(e,n);var t=To(n);return Pi(n),t}).map(du).getOrThunk(function(){return Iu(0,0)})}function gB(t){return function(n){return n.translate(-t.left(),-t.top())}}function pB(t){return function(n){return n.translate(t.left(),t.top())}}function hB(e){return function(n,t){return O(e,function(n,t){return t(n)},Iu(n,t))}}function vB(n,t,e){return n.fold(hB([pB(e),gB(t)]),hB([gB(t)]),hB([]))}function bB(n,t,e){return n.fold(hB([pB(e)]),hB([]),hB([pB(t)]))}function yB(n,t,e){return n.fold(hB([]),hB([gB(e)]),hB([pB(t),gB(e)]))}function xB(n,t,e){return n.fold(function(n,t){return{position:"absolute",left:n+"px",top:t+"px"}},function(n,t){return{position:"absolute",left:n-e.left()+"px",top:t-e.top()+"px"}},function(n,t){return{position:"fixed",left:n+"px",top:t+"px"}})}function wB(n,i,u,a){function t(o,r){return function(n,t){var e=o(i,u,a);return r(n.getOr(e.left()),t.getOr(e.top()))}}return n.fold(t(yB,ZD.offset),t(bB,ZD.absolute),t(vB,ZD.fixed))}function SB(n,t){var e=n.element();fr(e,t.transitionClass),dr(e,t.fadeOutClass),fr(e,t.fadeInClass),t.onShow(n)}function CB(n,t){var e=n.element();fr(e,t.transitionClass),dr(e,t.fadeInClass),fr(e,t.fadeOutClass),t.onHide(n)}function kB(n,t,e){return D(n,function(n){switch(n){case"bottom":return function(n,t){return n.bottom()<=t.bottom()}(t,e);case"top":return function(n,t){return n.y()>=t.y()}(t,e)}})}function OB(n,t){return Lo(n,t)?on.some(parseInt(zo(n,t),10)):on.none()}function EB(r,n){return OB(r,n.leftAttr).bind(function(o){return OB(r,n.topAttr).map(function(n){var t=mu(r),e=su(r);return yu(o,n,t,e)})})}function TB(n,t,e){var o=zo(n,t.positionAttr);switch(function(n,t){jo(n,t.leftAttr),jo(n,t.topAttr),jo(n,t.positionAttr)}(n,t),o){case"static":return on.some(oA["static"]());case"absolute":return on.some(oA.absolute(e.x(),e.y()));default:return on.none()}}function BB(n,t,e,o,r){var i=xu(n);if(kB(t.modes,i,e))return on.none();var u=r(),a=wr(n,"position");!function(n,t,e,o,r){Po(n,t.leftAttr,e),Po(n,t.topAttr,o),Po(n,t.positionAttr,r)}(n,t,i.x(),i.y(),a);var c=tA(i.x(),i.y()),s=vB(c,o,u),f=tA(e.x(),e.y()),l=vB(f,o,u),d=i.y()<=e.y()?l.top():l.top()+e.height()-i.height();return on.some(oA.fixed(s.left(),d))}function DB(n,t,e,o,r){var i=n.element();return Sr(i,"position").is("fixed")?function(t,e,o){return EB(t,e).filter(function(n){return kB(e.modes,n,o)}).bind(function(n){return TB(t,e,n)})}(i,t,e):BB(i,t,e,o,r)}function AB(t,n){bn(["left","top","position"],function(n){return kr(t.element(),n)}),n.onUndocked(t)}function _B(n,t,e,o,r){var i=xB(r,0,o);xr(n.element(),i),("fixed"===i.position?t.onDocked:t.onUndocked)(n)}function MB(o,n,r,i,u){void 0===u&&(u=!1),n.contextual.each(function(e){e.lazyContext(o).each(function(n){var t=function(n,t){return n.y()<t.bottom()&&n.bottom()>t.y()}(n,i);t!==r.isVisible()&&(r.setVisible(t),u&&!t?(gr(o.element(),[e.fadeOutClass]),e.onHide(o)):(t?SB:CB)(o,e))})})}function FB(r,i,n){var u=r.element();n.setDocked(!1),function(n,t){var e=n.element();return EB(e,t).bind(function(n){return TB(e,t,n)})}(r,i).each(function(n){n.fold(function(){return AB(r,i)},function(n,t){var e=Co(u),o=(pu(e),mB(u));_B(r,i,0,o,tA(n,t))},Z)}),n.setVisible(!0),i.contextual.each(function(n){pr(u,[n.fadeInClass,n.fadeOutClass,n.transitionClass]),n.onShow(r)}),rA(r,i,n)}function IB(n,t,e){e.isDocked()&&FB(n,t,e)}function RB(o){var r=o.element();Eo(r).each(function(n){if(cA.isDocked(o)){var t=mu(n);yr(r,"width",t+"px");var e=fu(r);yr(n,"padding-top",e+"px")}else kr(r,"width"),kr(n,"padding-top")})}function VB(n,t){t?(dr(n,sA.fadeOutClass),gr(n,[sA.transitionClass,sA.fadeInClass])):(dr(n,sA.fadeInClass),gr(n,[sA.fadeOutClass,sA.transitionClass]))}function NB(n,t){var e=we.fromDom(n.getContainer());t?(fr(e,fA),dr(e,lA)):(fr(e,lA),dr(e,fA))}function HB(i,e){function o(t){e().each(function(n){return t(n.element())})}function n(n){i.inline||RB(n),NB(i,cA.isDocked(n)),n.getSystem().broadcastOn([jf()],{}),e().each(function(n){return n.getSystem().broadcastOn([jf()],{})})}var r=ye(on.none()),t=i.inline?[]:function(){var n;return[lc.config({channels:(n={},n[mT()]={onReceive:RB},n)})]}();return g([vg.config({}),cA.config({leftAttr:"data-dock-left",topAttr:"data-dock-top",positionAttr:"data-dock-pos",contextual:N({lazyContext:function(n){var t=fu(n.element()),e=i.inline?i.getContentAreaContainer():i.getContainer(),o=xu(we.fromDom(e)),r=o.height()-t;return on.some(yu(o.x(),o.y(),o.width(),r))},onShow:function(){o(function(n){return VB(n,!0)})},onShown:function(t){o(function(n){return pr(n,[sA.transitionClass,sA.fadeInClass])}),r.get().each(function(n){!function(t,e){var o=Co(e);Sa(o).filter(function(n){return!jt(e,n)}).filter(function(n){return jt(n,we.fromDom(o.dom().body))||Ye(t,n)}).each(function(){return wa(e)})}(t.element(),n),r.set(on.none())})},onHide:function(n){r.set(function(n,t){return Ca(n).orThunk(function(){return t().toOption().bind(function(n){return Ca(n.element())})})}(n.element(),e)),o(function(n){return VB(n,!1)})},onHidden:function(){o(function(n){return pr(n,[sA.transitionClass])})}},sA),modes:["top"],onDocked:n,onUndocked:n})],t)}function PB(n){return"<alloy.field."+n+">"}function zB(n){return{element:function(){return n.element().dom()}}}function LB(e,o){var r=S(wn(o),function(n){var t=o[n],e=et(function(n){return tt("sidebar",CA,n)}(t));return{name:n,getApi:zB,onSetup:e.onSetup,onShow:e.onShow,onHide:e.onHide}});return S(r,function(n){var t=ye(Z);return e.slot(n.name,{dom:{tag:"div",classes:["tox-sidebar__pane"]},behaviours:Jp([Ep(n,t),Tp(n,t),lo(Bi(),function(t,n){var e=n.event();E(r,function(n){return n.name===e.name()}).each(function(n){(e.visible()?n.onShow:n.onHide)(n.getApi(t))})})])})})}function jB(n,t){Zl.getCurrent(n).each(function(n){return mg.set(n,[function(t){return SA.sketch(function(n){return{dom:{tag:"div",classes:["tox-sidebar__pane-container"]},components:LB(n,t),slotBehaviours:Jp([Ii(function(n){return SA.hideAllSlots(n)})])}})}(t)])})}function UB(n){return Zl.getCurrent(n).bind(function(n){return cT.isGrowing(n)||cT.hasGrown(n)?Zl.getCurrent(n).bind(function(t){return E(SA.getSlotNames(t),function(n){return SA.isShowing(t,n)})}):on.none()})}function WB(n,t,e){var o=n.element();!0===t?(mg.set(n,[function(n){return{dom:{tag:"div",attributes:{"aria-label":n.translate("Loading...")},classes:["tox-throbber__busy-spinner"]},components:[{dom:cp('<div class="tox-spinner"><div></div><div></div><div></div></div>')}],behaviours:ba([lg.config({mode:"special",onTab:function(){return on.some(!0)},onShiftTab:function(){return on.some(!0)}}),vg.config({})])}}(e)]),kr(o,"display"),jo(o,"aria-hidden")):(mg.set(n,[]),yr(o,"display","none"),Po(o,"aria-hidden","true"))}function GB(n){return"string"==typeof n?n.split(" "):n}function XB(e,o){var r=An(IA,o.menus),t=0<wn(o.menus).length,n=o.menubar===undefined||!0===o.menubar?GB("file edit view insert format tools table help"):GB(!1===o.menubar?"":o.menubar),i=C(n,function(n){return t&&o.menus.hasOwnProperty(n)&&o.menus[n].hasOwnProperty("items")||IA.hasOwnProperty(n)}),u=S(i,function(n){var t=r[n];return function(n,e,t){var o=function(n){return n.getParam("removed_menuitems","")}(t).split(/[ ,]/);return{text:n.title,getItems:function(){return B(n.items,function(n){var t=n.toLowerCase();return 0===t.trim().length?[]:x(o,function(n){return n===t})?[]:"separator"===t||"|"===t?[{type:"separator"}]:e.menuItems[t]?[e.menuItems[t]]:[]})}}}({title:t.title,items:GB(t.items)},o,e)});return C(u,function(n){return 0<n.getItems().length&&x(n.getItems(),function(n){return"separator"!==n.type})})}function YB(n,t){var e,o=function(n){var t=n.settings,e=t.skin,o=t.skin_url;if(!1!==e){var r=e||"oxide";o=o?n.documentBaseURI.toAbsolute(o):Gb.baseURL+"/skins/ui/"+r}return o}(t);o&&(e=o+"/skin.min.css",t.contentCSS.push(o+(n?"/content.inline":"/content")+".min.css")),!1===function(n){return!1===n.getParam("skin")}(t)&&e?Rh.DOM.styleSheetLoader.load(e,RA(t)):RA(t)()}function qB(t,n,e,o){var r=n.outerContainer,i=e.toolbar,u=e.buttons;if(h(i,cn)){var a=i.map(function(n){return dB(t,{toolbar:n,buttons:u},{backstage:o},on.none())});FA.setToolbars(r,a)}else FA.setToolbar(r,dB(t,e,{backstage:o},on.none()))}function KB(n){return function(n){var t=Fb(n),e=Vb(n),o=Hb(n);return UA(t).map(function(n){return jA(n,e,o)})}(n).getOr(Fb(n))}function JB(n){var t=Ib(n),e=Rb(n),o=Nb(n);return UA(t).map(function(n){return jA(n,e,o)})}function $B(n,t){return function(){n.execCommand("mceToggleFormat",!1,t)}}function QB(n){!function(e){yk.each([{name:"bold",text:"Bold",icon:"bold"},{name:"italic",text:"Italic",icon:"italic"},{name:"underline",text:"Underline",icon:"underline"},{name:"strikethrough",text:"Strikethrough",icon:"strike-through"},{name:"subscript",text:"Subscript",icon:"subscript"},{name:"superscript",text:"Superscript",icon:"superscript"}],function(n,t){e.ui.registry.addToggleButton(n.name,{tooltip:n.text,icon:n.icon,onSetup:fE(e,n.name),onAction:$B(e,n.name)})});for(var n=1;n<=6;n++){var t="h"+n;e.ui.registry.addToggleButton(t,{text:t.toUpperCase(),tooltip:"Heading "+n,onSetup:fE(e,t),onAction:$B(e,t)})}}(n),function(t){yk.each([{name:"cut",text:"Cut",action:"Cut",icon:"cut"},{name:"copy",text:"Copy",action:"Copy",icon:"copy"},{name:"paste",text:"Paste",action:"Paste",icon:"paste"},{name:"help",text:"Help",action:"mceHelp",icon:"help"},{name:"selectall",text:"Select all",action:"SelectAll",icon:"select-all"},{name:"newdocument",text:"New document",action:"mceNewDocument",icon:"new-document"},{name:"removeformat",text:"Clear formatting",action:"RemoveFormat",icon:"remove-formatting"},{name:"remove",text:"Remove",action:"Delete",icon:"remove"}],function(n){t.ui.registry.addButton(n.name,{tooltip:n.text,icon:n.icon,onAction:function(){return t.execCommand(n.action)}})})}(n),function(t){yk.each([{name:"blockquote",text:"Blockquote",action:"mceBlockQuote",icon:"quote"}],function(n){t.ui.registry.addToggleButton(n.name,{tooltip:n.text,icon:n.icon,onAction:function(){return t.execCommand(n.action)},onSetup:fE(t,n.name)})})}(n)}function ZB(n,t,e){function o(){return!!t.undoManager&&t.undoManager[e]()}function r(){n.setDisabled(t.readonly||!o())}return n.setDisabled(!o()),t.on("Undo Redo AddUndo TypingUndo ClearUndos SwitchMode",r),function(){return t.off("Undo Redo AddUndo TypingUndo ClearUndos SwitchMode",r)}}function nD(n,t){return{anchor:"makeshift",x:n,y:t}}function tD(n){return"longpress"===n.type||0===n.type.indexOf("touch")}function eD(n,t){var e=Rh.DOM.getPos(n);return function(n,t,e){return nD(n.x+t,n.y+e)}(t,e.x,e.y)}function oD(n,t){return"contextmenu"===t.type?n.inline?function(n){if(tD(n)){var t=n.touches[0];return nD(t.pageX,t.pageY)}return nD(n.pageX,n.pageY)}(t):eD(n.getContentAreaContainer(),function(n){if(tD(n)){var t=n.touches[0];return nD(t.clientX,t.clientY)}return nD(n.clientX,n.clientY)}(t)):ZA(n)}function rD(n){return{anchor:"node",node:on.some(we.fromDom(n.selection.getNode())),root:we.fromDom(n.getBody())}}function iD(n,t,e,o,r,i){var u=e(),a=function(n,t,e){return e?rD(n):oD(n,t)}(n,t,i);NC(u,Fh.CLOSE_ON_EXECUTE,o,!1).map(function(n){t.preventDefault(),jg.showMenuAt(r,a,{menu:{markers:wv("normal")},data:n})})}function uD(t,e,n,o,r,i){var u=function(n,t){var e=t?rD(n):ZA(n);return N({bubble:Oa(0,12,t_),layouts:n_,overrides:{maxWidthFunction:RE(),maxHeightFunction:Cf()}},e)}(t,i);NC(n,Fh.CLOSE_ON_EXECUTE,o,!0).map(function(n){e.preventDefault(),jg.showMenuWithinBounds(r,u,{menu:{markers:wv("normal")},data:n,type:"horizontal"},function(){return on.some(cE(t))}),t.fire(YE)})}function aD(t,e,o,r,i,u){function n(){var n=o();uD(t,e,n,r,i,u)}var a=Ht(),c=a.os.isiOS(),s=a.os.isOSX(),f=a.os.isAndroid();if(!s&&!c||u)f&&!u&&t.selection.setCursorLocation(e.target,0),n();else{var l=function(){!function(n){function t(){qg.setEditorTimeout(n,function(){n.selection.setRng(e)},10),i()}var e=n.selection.getRng();n.once("touchend",t);function o(n){n.preventDefault(),n.stopImmediatePropagation()}n.on("mousedown",o,!0);function r(){return i()}n.once("longpresscancel",r);var i=function(){n.off("touchend",t),n.off("longpresscancel",r),n.off("mousedown",o)}}(t),n()};!function(n,t){var e=n.selection;if(e.isCollapsed()||t.touches.length<1)return!1;var o=t.touches[0],r=e.getRng();return Uc(n.getWin(),Tc.domRange(r)).exists(function(n){return n.left()<=o.clientX&&n.right()>=o.clientX&&n.top()<=o.clientY&&n.bottom()>=o.clientY})}(t,e)?(t.once("selectionchange",l),t.once("touchend",function(){return t.off("selectionchange",l)})):l()}}function cD(n){return"string"==typeof n?n.split(/[ ,]/):n}function sD(n){return cn(n)?"|"===n:"separator"===n.type}function fD(n,t){if(0===t.length)return n;var e=F(n).filter(function(n){return!sD(n)}).fold(function(){return[]},function(n){return[i_]});return n.concat(e).concat(t).concat([i_])}function lD(i,n,t){function e(n){return jg.hide(a)}function o(o){var n="longpress"===o.type;if(e_(i)&&o.preventDefault(),!function(n,t){return t.ctrlKey&&!e_(n)}(i,o)&&!r_(i)){var r=!n&&(2!==o.button||o.target===i.getBody());(u()?aD:iD)(i,o,function(){var n=r?i.selection.getStart(!0):o.target,t=i.ui.registry.getAll(),e=o_(i);return function(r,n,i){var t=O(n,function(n,t){if(En(r,t)){var e=r[t].update(i);if(cn(e))return fD(n,e.split(" "));if(0<e.length){var o=S(e,u_);return fD(n,o)}return n}return n.concat([t])},[]);return 0<t.length&&sD(t[t.length-1])&&t.pop(),t}(t.contextMenus,e,n)},t,a,r)}}var u=Ht().deviceType.isTouch,a=uu(jg.sketch({dom:{tag:"div"},lazySink:n,onEscape:function(){return i.focus()},onShow:function(){return t.setContextMenuState(!0)},onHide:function(){return t.setContextMenuState(!1)},fireDismissalEventInstead:{},inlineBehaviours:ba([Kd("dismissContextMenu",[lo(Oi(),function(n,t){zf.close(n),i.focus()})])])}));i.on("init",function(){var n="ResizeEditor ScrollContent ScrollWindow longpresscancel"+(u()?"":" ResizeWindow");i.on(n,e),i.on(u()?"longpress":"longpress contextmenu",o)})}function dD(n,t){n.getSystem().addToGui(t),function(n){Eo(n.element()).filter(Hr).each(function(t){Sr(t,"z-index").each(function(n){Po(t,a_,n)}),yr(t,"z-index",wr(n.element(),"z-index"))})}(t)}function mD(n){!function(n){Eo(n.element()).filter(Hr).each(function(n){var t=zo(n,a_);Lo(n,a_)?yr(n,"z-index",t):kr(n,"z-index"),jo(n,a_)})}(n),n.getSystem().removeFromGui(n)}function gD(n,t,e){return n.getSystem().build(Wb.sketch({dom:{styles:{left:"0px",top:"0px",width:"100%",height:"100%",position:"fixed","z-index":"1000000000000000"},classes:[t]},events:e}))}function pD(n,t,e,o){return function(n,t){var e=n.element(),o=parseInt(zo(e,t.leftAttr),10),r=parseInt(zo(e,t.topAttr),10);return isNaN(o)||isNaN(r)?on.none():on.some(Iu(o,r))}(n,t).fold(function(){return e},function(n){return eA(n.left()+o.left(),n.top()+o.top())})}function hD(n,t,e,o,r,i){var u=pD(n,t,e,o),a=t.mustSnap?f_(n,t,u,r,i):l_(n,t,u,r,i),c=vB(u,r,i);return function(n,t,e){var o=n.element();Po(o,t.leftAttr,e.left()+"px"),Po(o,t.topAttr,e.top()+"px")}(n,t,c),a.fold(function(){return{coord:eA(c.left(),c.top()),extra:on.none()}},function(n){return{coord:n.output(),extra:n.extra()}})}function vD(n,t){!function(n,t){var e=n.element();jo(e,t.leftAttr),jo(e,t.topAttr)}(n,t)}function bD(n,e,o,r){return Du(n,function(n){var t=n.sensor();return function(n,t,e,o,r,i){var u=bB(n,r,i),a=bB(t,r,i);return Math.abs(u.left()-a.left())<=e&&Math.abs(u.top()-a.top())<=o}(e,t,n.range().left(),n.range().top(),o,r)?on.some({output:nn(wB(n.output(),e,o,r)),extra:n.extra}):on.none()})}function yD(t){return function(n,t,e,o){return n.isSome()&&t.isSome()&&e.isSome()?on.some(o(n.getOrDie(),t.getOrDie(),e.getOrDie())):on.none()}(Sr(t,"left"),Sr(t,"top"),Sr(t,"position"),function(n,t,e){return("fixed"===e?eA:nA)(parseInt(n,10),parseInt(t,10))}).getOrThunk(function(){var n=du(t);return tA(n.left(),n.top())})}function xD(e,n,o,r,i,u,t){return function(n,t,e,o,r){var i=r.bounds,u=bB(t,e,o),a=us(u.left(),i.x(),i.x()+i.width()-r.width),c=us(u.top(),i.y(),i.y()+i.height()-r.height),s=tA(a,c);return t.fold(function(){var n=yB(s,e,o);return nA(n.left(),n.top())},function(){return s},function(){var n=vB(s,e,o);return eA(n.left(),n.top())})}(0,n.fold(function(){var n=function(n,e,o){return n.fold(function(n,t){return ZD.offset(n+e,t+o)},function(n,t){return ZD.absolute(n+e,t+o)},function(n,t){return ZD.fixed(n+e,t+o)})}(o,u.left(),u.top()),t=vB(n,r,i);return eA(t.left(),t.top())},function(t){var n=hD(e,t,o,u,r,i);return n.extra.each(function(n){t.onSensor(e,n)}),n.coord}),r,i,t)}function wD(n,t){return{bounds:n.getBounds(),height:fu(t.element()),width:gu(t.element())}}function SD(t,e,n,o,r){var i=n.update(o,r),u=n.getStartData().getOrThunk(function(){return wD(e,t)});i.each(function(n){!function(n,t,e,o){var r=t.getTarget(n.element());if(t.repositionTarget){var i=Co(n.element()),u=pu(i),a=mB(r),c=yD(r),s=xD(n,t.snaps,c,u,a,o,e),f=xB(s,0,a);xr(r,f)}t.onDrag(n,r,o)}(t,e,u,n)})}function CD(t,n,e,o){n.each(mD),e.snaps.each(function(n){vD(t,n)});var r=e.getTarget(t.element());o.reset(),e.onDrop(t,r)}function kD(n){return function(t,e){function o(n){e.setStartData(wD(t,n))}return co(g([lo(wi(),function(n){e.getStartData().each(function(){return o(n)})})],n(t,e,o)))}}function OD(u,a,c){return[lo(Yr(),function(t,n){if(0===n.event().raw().button){n.stop();var e=function(){return CD(t,on.some(i),u,a)},o=hb(e,200),r={drop:e,delayDrop:o.schedule,forceDrop:e,move:function(n){o.cancel(),SD(t,u,a,d_,n)}},i=gD(t,u.blockerClass,function(e){return co([lo(Yr(),e.forceDrop),lo(Jr(),e.drop),lo(qr(),function(n,t){e.move(t.event())}),lo(Kr(),e.delayDrop)])}(r));c(t),dD(t,i)}})]}function ED(i,u,a){var c=ye(on.none());return[lo(Ur(),function(t,n){n.stop();function e(){CD(t,c.get(),i,u),c.set(on.none())}var o={drop:e,delayDrop:function(){},forceDrop:e,move:function(n){SD(t,i,u,g_,n)}},r=gD(t,i.blockerClass,function(e){return co([lo(Ur(),e.forceDrop),lo(Gr(),e.drop),lo(Xr(),e.drop),lo(Wr(),function(n,t){e.move(t.event())})])}(o));c.set(on.some(r));a(t),dD(t,r)}),lo(Wr(),function(n,t){t.stop(),SD(n,i,u,g_,t.event())}),lo(Gr(),function(n,t){t.stop(),CD(n,c.get(),i,u),c.set(on.none())}),lo(Xr(),function(n){CD(n,c.get(),i,u),c.set(on.none())})]}function TD(n,r,i,u,t,e){return n.fold(function(){return w_.snap({sensor:tA(i-20,u-20),range:Iu(t,e),output:tA(on.some(i),on.some(u)),extra:{td:r}})},function(n){var t=i-20,e=u-20,o=n.element().dom().getBoundingClientRect();return w_.snap({sensor:tA(t,e),range:Iu(40,40),output:tA(on.some(i-o.width/2),on.some(u-o.height/2)),extra:{td:r}})})}function BD(n,o,r){return{getSnapPoints:n,leftAttr:"data-drag-left",topAttr:"data-drag-top",onSensor:function(n,t){var e=t.td;!function(n,t){return n.exists(function(n){return jt(n,t)})}(o.get(),e)&&(o.set(on.some(e)),r(e))},mustSnap:!0}}function DD(n){return vm(Gg.sketch({dom:{tag:"div",classes:["tox-selector"]},buttonBehaviours:ba([w_.config({mode:"mouseOrTouch",blockerClass:"blocker",snaps:n}),Ew.config({})]),eventOrder:{mousedown:["dragging","alloy.base.behaviour"],touchstart:["dragging","alloy.base.behaviour"]}}))}var AD,_D,MD,FD,ID,RD=[{title:"Left",icon:"align-left",format:"alignleft"},{title:"Center",icon:"align-center",format:"aligncenter"},{title:"Right",icon:"align-right",format:"alignright"},{title:"Justify",icon:"align-justify",format:"alignjustify"}],VD=["-apple-system","Segoe UI","Roboto","Helvetica Neue","sans-serif"],ND={"8pt":"1","10pt":"2","12pt":"3","14pt":"4","18pt":"5","24pt":"6","36pt":"7"},HD=[{name:"history",items:["undo","redo"]},{name:"styles",items:["styleselect"]},{name:"formatting",items:["bold","italic"]},{name:"alignment",items:["alignleft","aligncenter","alignright","alignjustify"]},{name:"indentation",items:["outdent","indent"]},{name:"permanent pen",items:["permanentpen"]},{name:"comments",items:["addcomment"]}],PD={button:sB(JO,function(n,t){return function(n,t){return WT(n,t,[])}(n,t.backstage.shared.providers)}),togglebutton:sB(QO,function(n,t){return function(n,t){return GT(n,t,[])}(n,t.backstage.shared.providers)}),menubutton:sB($O,function(n,t){return PC(n,"tox-tbtn",t.backstage,on.none())}),splitbutton:sB(function(n){return tt("SplitButton",xT,n)},function(n,t){return rE(n,t.backstage.shared)}),styleSelectButton:function(n,t){return function(n,t){var e=N({type:"advanced"},t.styleselect);return mE(n,t,cB(n,e))}(n,t.backstage)},fontsizeSelectButton:function(n,t){return function(n,t){return mE(n,t,rB(n))}(n,t.backstage)},fontSelectButton:function(n,t){return function(n,t){return mE(n,t,eB(n))}(n,t.backstage)},formatButton:function(n,t){return function(n,t){return mE(n,t,aB(n))}(n,t.backstage)},alignMenuButton:function(n,t){return function(n,t){return mE(n,t,nB(n))}(n,t.backstage)}},zD={styleselect:PD.styleSelectButton,fontsizeselect:PD.fontsizeSelectButton,fontselect:PD.fontSelectButton,formatselect:PD.formatButton,align:PD.alignMenuButton},LD={valignCentre:[],alignCentre:[],alignLeft:["tox-pop--align-left"],alignRight:["tox-pop--align-right"],right:["tox-pop--right"],left:["tox-pop--left"],bottom:["tox-pop--bottom"],top:["tox-pop--top"]},jD={maxHeightFunction:Cf(),maxWidthFunction:RE()},UD={onLtr:function(){return[oc,rc,ca,ua,sa,aa,Ug,Wg,pm,mm,hm,gm]},onRtl:function(){return[oc,rc,sa,aa,ca,ua,Ug,Wg,hm,gm,pm,mm]}},WD={onLtr:function(){return[rc,ua,aa,ca,sa,oc,Ug,Wg,pm,mm,hm,gm]},onRtl:function(){return[rc,aa,ua,sa,ca,oc,Ug,Wg,hm,gm,pm,mm]}},GD=function(u,n,e,a){function c(){return cE(u)}function s(){if(l()&&a.backstage.isContextMenuOpen())return!0;var n=function(){var n=g.get().map(function(n){return n.getBoundingClientRect()}).getOrThunk(function(){return u.selection.getRng().getBoundingClientRect()}),t=u.inline?pu().top():wu(we.fromDom(u.getBody())).y();return{y:n.top+t,bottom:n.bottom+t}}(),t=c();return!function(n,t,e,o){return Math.max(n,e)<=Math.min(t,o)}(n.y,n.bottom,t.y(),t.bottom())}function t(){jg.hide(d)}function o(){m.get().each(function(n){var t=d.element();kr(t,"display"),s()?yr(t,"display","none"):Af.positionWithinBounds(e,n,d,on.some(c()))})}function f(n){return{dom:{tag:"div",classes:["tox-pop__dialog"]},components:[n],behaviours:ba([lg.config({mode:"acyclic"}),Kd("pop-dialog-wrap-events",[Ii(function(n){u.shortcuts.add("ctrl+F9","focus statusbar",function(){return lg.focusIn(n)})}),Ri(function(n){u.shortcuts.remove("ctrl+F9")})])])}}var l=Ht().deviceType.isTouch,d=uu(function(n){var e=ye([]);return jg.sketch({dom:{tag:"div",classes:["tox-pop"]},fireDismissalEventInstead:{event:"doNotDismissYet"},onShow:function(n){e.set([]),jg.getContent(n).each(function(n){kr(n.element(),"visibility")}),dr(n.element(),QT),kr(n.element(),"width")},inlineBehaviours:ba([Kd("context-toolbar-events",[bo(ii(),function(n,t){jg.getContent(n).each(function(n){}),dr(n.element(),QT),kr(n.element(),"width")}),lo($T,function(t,e){kr(t.element(),"width");var n=mu(t.element());jg.setContent(t,e.event().contents()),fr(t.element(),QT);var o=mu(t.element());yr(t.element(),"width",n+"px"),jg.getContent(t).each(function(n){e.event().focus().bind(function(n){return wa(n),Ca(t.element())}).orThunk(function(){return lg.focusIn(n),Sa()})}),qg.setTimeout(function(){yr(t.element(),"width",o+"px")},0)}),lo(KT,function(n,t){jg.getContent(n).each(function(n){e.set(e.get().concat([{bar:n,focus:Sa()}]))}),ro(n,$T,{contents:t.event().forwardContents(),focus:on.none()})}),lo(JT,function(t,n){F(e.get()).each(function(n){e.set(e.get().slice(0,e.get().length-1)),ro(t,$T,{contents:au(n.bar),focus:n.focus})})})]),lg.config({mode:"special",onEscape:function(t){return F(e.get()).fold(function(){return n.onEscape()},function(n){return oo(t,JT),on.some(!0)})}})]),lazySink:function(){return an.value(n.sink)}})}({sink:e,onEscape:function(){return u.focus(),on.some(!0)}})),m=ye(on.none()),g=ye(on.none()),r=ye(null),p=L(function(){return qT(n,function(n){var t=h(n);ro(d,KT,{forwardContents:f(t)})})}),h=function(n){var t,e,o=u.ui.registry.getAll().buttons,r=Yb(u)===jb.scrolling?jb.scrolling:jb["default"],i=p();return"contexttoolbar"===n.type?(t=An(o,i.formNavigators),e=dB(u,{buttons:t,toolbar:n.items},a,on.some(["form:"])),KO({type:r,uid:Xo("context-toolbar"),initGroups:e,onEscape:on.none,cyclicKeying:!0,backstage:a.backstage,getSink:function(){return an.error("")}})):XT(r,n,a.backstage)};u.on("contexttoolbar-show",function(t){var n=p();Nn(n.lookupTable,t.toolbarKey).each(function(n){y(n,t.target===u?on.none():on.some(t)),jg.getContent(d).each(lg.focusIn)})});function v(n,t){var e="node"===n?a.backstage.shared.anchors.node(t):a.backstage.shared.anchors.cursor();return Dn(e,function(n,t){return"line"===n?{bubble:Oa(12,0,LD),layouts:{onLtr:function(){return[fa]},onRtl:function(){return[la]}},overrides:jD}:{bubble:Oa(0,12,LD),layouts:t?WD:UD,overrides:jD}}(n,l()))}function i(){var n=p();YT(n,u).fold(function(){m.set(on.none()),jg.hide(d)},function(n){y(n.toolbarApi,on.some(n.elem.dom()))})}function b(n){x(),r.set(n)}var y=function(n,t){if(x(),!l()||!a.backstage.isContextMenuOpen()){var e=h(n),o=t.map(we.fromDom),r=v(n.position,o);m.set(on.some(r)),g.set(t);var i=d.element();kr(i,"display"),jg.showWithinBounds(d,r,f(e),function(){return on.some(c())}),s()&&yr(i,"display","none")}},x=function(){var n=r.get();null!==n&&(qg.clearTimeout(n),r.set(null))};u.on("init",function(){u.on(YE,t),u.on("ScrollContent ScrollWindow longpress",o),u.on("click keyup SetContent ObjectResized ResizeEditor",function(n){b(qg.setEditorTimeout(u,i,0))}),u.on("focusout",function(n){qg.setEditorTimeout(u,function(){Ca(e.element()).isNone()&&Ca(d.element()).isNone()&&(m.set(on.none()),jg.hide(d))},0)}),u.on("SwitchMode",function(){u.readonly&&(m.set(on.none()),jg.hide(d))}),u.on("NodeChange",function(n){Ca(d.element()).fold(function(){b(qg.setEditorTimeout(u,i,0))},function(n){})})})},XD=function(n,o,r){function t(t,e){bn([o,r],function(n){n.broadcastEvent(t,e)})}function e(t,e){bn([o,r],function(n){n.broadcastOn([t],e)})}function i(n){return e(Lf(),{target:n.target()})}function u(n){return e(Lf(),{target:we.fromDom(n.target)})}function a(n){0===n.button&&e(Uf(),{target:we.fromDom(n.target)})}function c(n){return t(wi(),pb(n))}function s(n){e(jf(),{}),t(Si(),pb(n))}function f(){return e(jf(),{})}var l=sb(we.fromDom(v.document),"touchstart",i),d=sb(we.fromDom(v.document),"touchmove",function(n){return t(yi(),n)}),m=sb(we.fromDom(v.document),"touchend",function(n){return t(xi(),n)}),g=sb(we.fromDom(v.document),"mousedown",i),p=sb(we.fromDom(v.document),"mouseup",function(n){0===n.raw().button&&e(Uf(),{target:n.target()})});n.on("PostRender",function(){n.on("click",u),n.on("tap",u),n.on("mouseup",a),n.on("ScrollWindow",c),n.on("ResizeWindow",s),n.on("ResizeEditor",f)}),n.on("remove",function(){n.off("click",u),n.off("tap",u),n.off("mouseup",a),n.off("ScrollWindow",c),n.off("ResizeWindow",s),n.off("ResizeEditor",f),g.unbind(),l.unbind(),d.unbind(),m.unbind(),p.unbind()}),n.on("detach",function(){ws(o),ws(r),o.destroy(),r.destroy()})},YD=Tl,qD=Ol,KD=nn([St("shell",!1),ct("makeItem"),St("setupItem",Z),nl("listBehaviours",[mg])]),JD=Sl({name:"items",overrides:function(n){return{behaviours:ba([mg.config({})])}}}),$D=nn([JD]),QD=Al({name:nn("CustomList")(),configFields:KD(),partFields:$D(),factory:function(s,n,t,e){var o=s.shell?{behaviours:[mg.config({})],components:[]}:{behaviours:[],components:n},r=function(n){return s.shell?on.some(n):qs(n,s,"items")};return{uid:s.uid,dom:s.dom,components:o.components,behaviours:Rs(s.listBehaviours,o.behaviours),apis:{setItems:function(a,c){r(a).fold(function(){throw v.console.error("Custom List was defined to not be a shell, but no item container was specified in components"),new Error("Custom List was defined to not be a shell, but no item container was specified in components")},function(t){var n=mg.contents(t),e=c.length,o=e-n.length,r=0<o?function(n,t){for(var e=[],o=0;o<n;o++)e.push(t(o));return e}(o,function(){return s.makeItem()}):[],i=n.slice(e);bn(i,function(n){return mg.remove(t,n)}),bn(r,function(n){return mg.append(t,n)});var u=mg.contents(t);bn(u,function(n,t){s.setupItem(a,n,c[t],t)})})}}}},apis:{setItems:function(n,t,e){n.setItems(t,e)}}}),ZD=Tn([{offset:["x","y"]},{absolute:["x","y"]},{fixed:["x","y"]}]),nA=ZD.offset,tA=ZD.absolute,eA=ZD.fixed,oA=Tn([{"static":[]},{absolute:["x","y"]},{fixed:["x","y"]}]),rA=function(n,t,e){n.getSystem().isConnected()&&function(e,o,r){var i=o.lazyViewport(e),n=e.element(),t=Co(n),u=pu(t),a=L(function(){return mB(n)}),c=r.isDocked();c&&MB(e,o,r,i),DB(e,o,i,u,a).each(function(n){r.setDocked(!c),n.fold(function(){return AB(e,o)},function(n,t){return _B(e,o,0,a(),tA(n,t))},function(n,t){MB(e,o,r,i,!0),_B(e,o,0,a(),eA(n,t))})})}(n,t,e)},iA=/* */Object.freeze({refresh:rA,reset:IB,isDocked:function(n,t,e){return e.isDocked()}}),uA=/* */Object.freeze({events:function(o,r){return co([bo(ii(),function(t,e){o.contextual.each(function(n){mr(t.element(),n.transitionClass)&&(pr(t.element(),[n.transitionClass,n.fadeInClass]),(r.isVisible()?n.onShown:n.onHidden)(t));e.stop()})}),lo(wi(),function(n,t){rA(n,o,r)}),lo(Si(),function(n,t){IB(n,o,r)})])}}),aA=[wt("contextual",[ft("fadeInClass"),ft("fadeOutClass"),ft("transitionClass"),dt("lazyContext"),qu("onShow"),qu("onShown"),qu("onHide"),qu("onHidden")]),Bt("lazyViewport",Su),ft("leftAttr"),ft("topAttr"),ft("positionAttr"),(AD="modes",_D=["top","bottom"],MD=ge,Ct(AD,_D,Kn(MD))),qu("onDocked"),qu("onUndocked")],cA=ya({fields:aA,name:"docking",active:uA,apis:iA,state:/* */Object.freeze({init:function(){var t=ye(!1),e=ye(!0);return nu({isDocked:function(){return t.get()},setDocked:function(n){return t.set(n)},isVisible:function(){return e.get()},setVisible:function(n){return e.set(n)},readState:function(){return"docked:  "+t.get()+", visible: "+e.get()}})}})}),sA={fadeInClass:"tox-editor-dock-fadein",fadeOutClass:"tox-editor-dock-fadeout",transitionClass:"tox-editor-dock-transition"},fA="tox-tinymce--toolbar-sticky-on",lA="tox-tinymce--toolbar-sticky-off",dA=/* */Object.freeze({setup:function(n,t){n.inline||(n.on("ResizeWindow ResizeEditor ResizeContent",function(){t().each(RB)}),n.on("SkinLoaded",function(){t().each(cA.reset)}),n.on("FullscreenStateChanged",function(){t().each(cA.refresh)})),n.on("PostRender",function(){NB(n,!1)})},isDocked:function(n){return n().map(cA.isDocked).getOr(!1)},getBehaviours:HB}),mA=Z,gA=u,pA=nn([]),hA=/* */Object.freeze({setup:mA,isDocked:gA,getBehaviours:pA}),vA=Dl({factory:function(t,o){var n={focus:lg.focusIn,setMenus:function(n,t){var e=S(t,function(t){var n={type:"menubutton",text:t.text,fetch:function(n){n(t.getItems())}},e=$O(n).mapError(function(n){return le(n)}).getOrDie();return PC(e,"tox-mbtn",o.backstage,on.some("menuitem"))});mg.set(n,e)}};return{uid:t.uid,dom:t.dom,components:[],behaviours:ba([mg.config({}),Kd("menubar-events",[Ii(function(n){t.onSetup(n)}),lo($r(),function(e,n){ku(e.element(),".tox-mbtn--active").each(function(t){Ou(n.event().target(),".tox-mbtn").each(function(n){jt(t,n)||e.getSystem().getByDom(t).each(function(t){e.getSystem().getByDom(n).each(function(n){Ow.expand(n),Ow.close(t),vg.focus(n)})})})})}),lo(Ti(),function(e,n){n.event().prevFocus().bind(function(n){return e.getSystem().getByDom(n).toOption()}).each(function(t){n.event().newFocus().bind(function(n){return e.getSystem().getByDom(n).toOption()}).each(function(n){Ow.isOpen(t)&&(Ow.expand(n),Ow.close(t))})})})]),lg.config({mode:"flow",selector:".tox-mbtn",onEscape:function(n){return t.onEscape(n),on.some(!0)}}),Gy.config({})]),apis:n,domModification:{attributes:{role:"menubar"}}}},name:"silver.Menubar",configFields:[ct("dom"),ct("uid"),ct("onEscape"),ct("backstage"),St("onSetup",Z)],apis:{focus:function(n,t){n.focus(t)},setMenus:function(n,t,e){n.setMenus(t,e)}}}),bA="container",yA=[Fs("slotBehaviours",[])],xA=function(r,n,t){function e(n){return Qs(r)}function o(e,o){return void 0===o&&(o=undefined),function(n,t){return qs(n,r,t).map(function(n){return e(n,t)}).getOr(o)}}function i(n,t){return"true"!==zo(n.element(),"aria-hidden")}var u,a=o(i,!1),c=o(function(n,t){if(i(n)){var e=n.element();yr(e,"display","none"),Po(e,"aria-hidden","true"),ro(n,Bi(),{name:t,visible:!1})}}),s=(u=c,function(t,n){bn(n,function(n){return u(t,n)})}),f=o(function(n,t){if(!i(n)){var e=n.element();kr(e,"display"),jo(e,"aria-hidden"),ro(n,Bi(),{name:t,visible:!0})}}),l={getSlotNames:e,getSlot:function(n,t){return qs(n,r,t)},isShowing:a,hideSlot:c,hideAllSlots:function(n){return s(n,e())},showSlot:f};return{uid:r.uid,dom:r.dom,components:n,behaviours:Is(r.slotBehaviours),apis:l}},wA=P({getSlotNames:function(n,t){return n.getSlotNames(t)},getSlot:function(n,t,e){return n.getSlot(t,e)},isShowing:function(n,t,e){return n.isShowing(t,e)},hideSlot:function(n,t,e){return n.hideSlot(t,e)},hideAllSlots:function(n,t){return n.hideAllSlots(t)},showSlot:function(n,t,e){return n.showSlot(t,e)}},$o),SA=N(N({},wA),{sketch:function(n){var e,t=(e=[],{slot:function(n,t){return e.push(n),Us(bA,PB(n),t)},record:function(){return e}}),o=n(t),r=t.record(),i=S(r,function(n){return xl({name:n,pname:PB(n)})});return of(bA,yA,i,xA,o)}}),CA=re([yt("icon"),yt("tooltip"),Bt("onShow",Z),Bt("onHide",Z),Bt("onSetup",function(){return Z})]),kA=Xo("FixSizeEvent"),OA=Xo("AutoSizeEvent"),EA=qD.optional({factory:vA,name:"menubar",schema:[ct("backstage")]}),TA=qD.optional({factory:{sketch:function(n){return QD.sketch({uid:n.uid,dom:n.dom,listBehaviours:ba([lg.config({mode:"acyclic",selector:".tox-toolbar"})]),makeItem:function(){return KO({type:n.split,uid:Xo("multiple-toolbar-item"),backstage:n.backstage,cyclicKeying:!1,getSink:n.getSink,initGroups:[],onEscape:function(){return on.none()}})},setupItem:function(n,t,e,o){JE.setGroups(t,e)},shell:!0})}},name:"multiple-toolbar",schema:[ct("dom"),ct("onEscape")]}),BA=qD.optional({factory:{sketch:function(n){return function(n){return n.split===jb.sliding?qO:n.split===jb.floating?YO:KO}(n)({type:n.split,uid:n.uid,onEscape:function(){return n.onEscape(),on.some(!0)},cyclicKeying:!1,initGroups:[],getSink:n.getSink,backstage:n.backstage,moreDrawerData:{lazyToolbar:n.lazyToolbar,lazyMoreButton:n.lazyMoreButton,lazyHeader:n.lazyHeader}})}},name:"toolbar",schema:[ct("dom"),ct("onEscape"),ct("getSink")]}),DA=qD.optional({factory:{sketch:function(n){var t=n.editor,e=n.sticky?HB:pA;return{uid:n.uid,dom:n.dom,components:n.components,behaviours:ba(e(t,n.getSink))}}},name:"header",schema:[ct("dom")]}),AA=qD.optional({name:"socket",schema:[ct("dom")]}),_A=qD.optional({factory:{sketch:function(n){return{uid:n.uid,dom:{tag:"div",classes:["tox-sidebar"],attributes:{role:"complementary"}},components:[{dom:{tag:"div",classes:["tox-sidebar__slider"]},components:[],behaviours:ba([Gy.config({}),vg.config({}),cT.config({dimension:{property:"width"},closedClass:"tox-sidebar--sliding-closed",openClass:"tox-sidebar--sliding-open",shrinkingClass:"tox-sidebar--sliding-shrinking",growingClass:"tox-sidebar--sliding-growing",onShrunk:function(n){Zl.getCurrent(n).each(SA.hideAllSlots),oo(n,OA)},onGrown:function(n){oo(n,OA)},onStartGrow:function(n){ro(n,kA,{width:Sr(n.element(),"width").getOr("")})},onStartShrink:function(n){ro(n,kA,{width:mu(n.element())+"px"})}}),mg.config({}),Zl.config({find:function(n){var t=mg.contents(n);return yn(t)}})])}],behaviours:ba([SS(0),Kd("sidebar-sliding-events",[lo(kA,function(n,t){yr(n.element(),"width",t.event().width())}),lo(OA,function(n,t){kr(n.element(),"width")})])])}}},name:"sidebar",schema:[ct("dom")]}),MA=qD.optional({factory:{sketch:function(n){return{uid:n.uid,dom:{tag:"div",attributes:{"aria-hidden":"true"},classes:["tox-throbber"],styles:{display:"none"}},behaviours:ba([mg.config({})]),components:[]}}},name:"throbber",schema:[ct("dom")]}),FA=Al({name:"OuterContainer",factory:function(e,n,t){var o={getSocket:function(n){return YD.getPart(n,e,"socket")},setSidebar:function(n,t){YD.getPart(n,e,"sidebar").each(function(n){return jB(n,t)})},toggleSidebar:function(n,t){YD.getPart(n,e,"sidebar").each(function(n){return function(n,e){Zl.getCurrent(n).each(function(t){Zl.getCurrent(t).each(function(n){cT.hasGrown(t)?SA.isShowing(n,e)?cT.shrink(t):(SA.hideAllSlots(n),SA.showSlot(n,e)):(SA.hideAllSlots(n),SA.showSlot(n,e),cT.grow(t))})})}(n,t)})},whichSidebar:function(n){return YD.getPart(n,e,"sidebar").bind(UB).getOrNull()},getHeader:function(n){return YD.getPart(n,e,"header")},getToolbar:function(n){return YD.getPart(n,e,"toolbar")},setToolbar:function(n,t){YD.getPart(n,e,"toolbar").each(function(n){n.getApis().setGroups(n,t)})},setToolbars:function(n,t){YD.getPart(n,e,"multiple-toolbar").each(function(n){QD.setItems(n,t)})},refreshToolbar:function(n){YD.getPart(n,e,"toolbar").each(function(n){return n.getApis().refresh(n)})},getMoreButton:function(n){return YD.getPart(n,e,"toolbar").bind(function(n){return n.getApis().getMoreButton(n)})},getThrobber:function(n){return YD.getPart(n,e,"throbber")},focusToolbar:function(n){YD.getPart(n,e,"toolbar").orThunk(function(){return YD.getPart(n,e,"multiple-toolbar")}).each(function(n){lg.focusIn(n)})},setMenubar:function(n,t){YD.getPart(n,e,"menubar").each(function(n){vA.setMenus(n,t)})},focusMenubar:function(n){YD.getPart(n,e,"menubar").each(function(n){vA.focus(n)})}};return{uid:e.uid,dom:e.dom,components:n,apis:o,behaviours:e.behaviours}},configFields:[ct("dom"),ct("behaviours")],partFields:[DA,EA,BA,TA,AA,_A,MA],apis:{getSocket:function(n,t){return n.getSocket(t)},setSidebar:function(n,t,e){n.setSidebar(t,e)},toggleSidebar:function(n,t,e){n.toggleSidebar(t,e)},whichSidebar:function(n,t){return n.whichSidebar(t)},getHeader:function(n,t){return n.getHeader(t)},getToolbar:function(n,t){return n.getToolbar(t)},setToolbar:function(n,t,e){var o=S(e,function(n){return WO(n)});n.setToolbar(t,o)},setToolbars:function(n,t,e){var o=S(e,function(n){return S(n,WO)});n.setToolbars(t,o)},getMoreButton:function(n,t){return n.getMoreButton(t)},refreshToolbar:function(n,t){return n.refreshToolbar(t)},getThrobber:function(n,t){return n.getThrobber(t)},setMenubar:function(n,t,e){n.setMenubar(t,e)},focusMenubar:function(n,t){n.focusMenubar(t)},focusToolbar:function(n,t){n.focusToolbar(t)}}}),IA={file:{title:"File",items:"newdocument restoredraft | preview | print | deleteallconversations"},edit:{title:"Edit",items:"undo redo | cut copy paste pastetext | selectall | searchreplace"},view:{title:"View",items:"code | visualaid visualchars visualblocks | spellchecker | preview fullscreen | showcomments"},insert:{title:"Insert",items:"image link media addcomment pageembed template codesample inserttable | charmap emoticons hr | pagebreak nonbreaking anchor toc | insertdatetime"},format:{title:"Format",items:"bold italic underline strikethrough superscript subscript codeformat | formats blockformats fontformats fontsizes align | forecolor backcolor | removeformat"},tools:{title:"Tools",items:"spellchecker spellcheckerlanguage | a11ycheck code wordcount"},table:{title:"Table",items:"inserttable | cell row column | advtablesort | tableprops deletetable"},help:{title:"Help",items:"help"}},RA=function(n){function t(){n._skinLoaded=!0,Nv(n)}return function(){n.initialized?t():n.on("init",t)}},VA=d(YB,!1),NA=d(YB,!0),HA=Rh.DOM,PA=Ht(),zA=PA.os.isiOS()&&PA.os.version.major<=12,LA={render:function(e,o,n,t,r){var i=ye(0);VA(e),function(n,t){If(n,t,_o)}(we.fromDom(r.targetNode),o.mothership),xs(zr(),o.uiMothership),e.on("PostRender",function(){qB(e,o,n,t),i.set(e.getWin().innerWidth),FA.setMenubar(o.outerContainer,XB(e,n)),FA.setSidebar(o.outerContainer,n.sidebar),function(r){function n(n){var t=r.getDoc().documentElement,e=u.get(),o=a.get();e.left()!==i.innerWidth||e.top()!==i.innerHeight?(u.set(Iu(i.innerWidth,i.innerHeight)),zv(r,n)):o.left()===t.offsetWidth&&o.top()===t.offsetHeight||(a.set(Iu(t.offsetWidth,t.offsetHeight)),zv(r,n))}function t(n){return Pv(r,n)}var i=r.getWin(),e=r.getDoc().documentElement,u=ye(Iu(i.innerWidth,i.innerHeight)),a=ye(Iu(e.offsetWidth,e.offsetHeight));HA.bind(i,"resize",n),HA.bind(i,"scroll",t);var o=fb(we.fromDom(r.getBody()),"load",n);r.on("remove",function(){o.unbind(),HA.unbind(i,"resize",n),HA.unbind(i,"scroll",t)})}(e)});var u=FA.getSocket(o.outerContainer).getOrDie("Could not find expected socket element");if(!0===zA){xr(u.element(),{overflow:"scroll","-webkit-overflow-scrolling":"touch"});var a=function(e,o){var r=null;return{cancel:function(){null!==r&&(v.clearTimeout(r),r=null)},throttle:function(){for(var n=[],t=0;t<arguments.length;t++)n[t]=arguments[t];null===r&&(r=v.setTimeout(function(){e.apply(null,n),r=null},o))}}}(function(){e.fire("ScrollContent")},20);sb(u.element(),"scroll",a.throttle)}LO(e,o),e.addCommand("ToggleSidebar",function(n,t){FA.toggleSidebar(o.outerContainer,t),e.fire("ToggleSidebar")}),e.addQueryValueHandler("ToggleSidebar",function(){return FA.whichSidebar(o.outerContainer)});var c=Yb(e);return c!==jb.sliding&&c!==jb.floating||e.on("ResizeWindow ResizeEditor ResizeContent",function(){var n=e.getWin().innerWidth;n!==i.get()&&(FA.refreshToolbar(o.outerContainer),i.set(n))}),{iframeContainer:u.element().dom(),editorContainer:o.outerContainer.element().dom()}}},jA=function(t,n,e){var o=n.filter(function(n){return t<n}),r=e.filter(function(n){return n<t});return o.or(r).getOr(t)},UA=function(n){return/^[0-9\.]+(|px)$/i.test(""+n)?on.some(parseInt(""+n,10)):on.none()},WA=function(n){return mn(n)?n+"px":n},GA={render:function(t,i,e,o,n){var u,r=Rh.DOM,a=Kb(t),c=$b(t),s=we.fromDom(n.targetNode),f=Nb(t).or(JB(t)),l=Yb(t),d=l===jb.sliding||l===jb.floating;NA(t);function m(n){void 0===n&&(n=!1),d&&FA.refreshToolbar(i.outerContainer),a||function(n){var t=d?n.fold(function(){return 0},function(n){return 1<n.components().length?su(n.components()[1].element()):0}):0,e=du(s),o=e.top()-su(u.element())+t;xr(i.outerContainer.element(),{position:"absolute",top:Math.round(o)+"px",left:Math.round(e.left())+"px"});var r=f.getOrThunk(function(){var n=UA(wr(zr(),"margin-left")).getOr(0);return mu(zr())-e.left()+n});yr(u.element(),"max-width",r+"px")}(FA.getToolbar(i.outerContainer)),c&&(n?cA.reset(u):cA.refresh(u))}function g(){yr(i.outerContainer.element(),"display","flex"),r.addClass(t.getBody(),"mce-edit-focus"),kr(i.uiMothership.element(),"display"),m()}function p(){i.outerContainer&&(yr(i.outerContainer.element(),"display","none"),r.removeClass(t.getBody(),"mce-edit-focus")),yr(i.uiMothership.element(),"display","none")}function h(){if(u)g();else{u=FA.getHeader(i.outerContainer).getOrDie();var n=function(n){return qb(n).getOr(zr())}(t);xs(n,i.mothership),xs(n,i.uiMothership),qB(t,i,e,o),FA.setMenubar(i.outerContainer,XB(t,e)),g(),t.on("activate",g),t.on("deactivate",p),t.on("NodeChange SkinLoaded ResizeWindow",function(){t.hidden||m(!0)}),t.nodeChanged()}}return t.on("focus",h),t.on("blur hide",p),t.on("init",function(){t.hasFocus()&&h()}),LO(t,i),{editorContainer:i.outerContainer.element().dom()}}},XA=function(t){yk.each([{name:"alignleft",text:"Align left",cmd:"JustifyLeft",icon:"align-left"},{name:"aligncenter",text:"Align center",cmd:"JustifyCenter",icon:"align-center"},{name:"alignright",text:"Align right",cmd:"JustifyRight",icon:"align-right"},{name:"alignjustify",text:"Justify",cmd:"JustifyFull",icon:"align-justify"}],function(n){t.ui.registry.addToggleButton(n.name,{tooltip:n.text,onAction:function(){return t.execCommand(n.cmd)},icon:n.icon,onSetup:fE(t,n.name)})});var n="alignnone",e="No alignment",o="JustifyNone",r="align-none";t.ui.registry.addButton(n,{tooltip:e,onAction:function(){return t.execCommand(o)},icon:r})},YA=function(n){QB(n),function(t){yk.each([{name:"bold",text:"Bold",action:"Bold",icon:"bold",shortcut:"Meta+B"},{name:"italic",text:"Italic",action:"Italic",icon:"italic",shortcut:"Meta+I"},{name:"underline",text:"Underline",action:"Underline",icon:"underline",shortcut:"Meta+U"},{name:"strikethrough",text:"Strikethrough",action:"Strikethrough",icon:"strike-through",shortcut:""},{name:"subscript",text:"Subscript",action:"Subscript",icon:"subscript",shortcut:""},{name:"superscript",text:"Superscript",action:"Superscript",icon:"superscript",shortcut:""},{name:"removeformat",text:"Clear formatting",action:"RemoveFormat",icon:"remove-formatting",shortcut:""},{name:"newdocument",text:"New document",action:"mceNewDocument",icon:"new-document",shortcut:""},{name:"cut",text:"Cut",action:"Cut",icon:"cut",shortcut:"Meta+X"},{name:"copy",text:"Copy",action:"Copy",icon:"copy",shortcut:"Meta+C"},{name:"paste",text:"Paste",action:"Paste",icon:"paste",shortcut:"Meta+V"},{name:"selectall",text:"Select all",action:"SelectAll",icon:"select-all",shortcut:"Meta+A"}],function(n){t.ui.registry.addMenuItem(n.name,{text:n.text,icon:n.icon,shortcut:n.shortcut,onAction:function(){return t.execCommand(n.action)}})}),t.ui.registry.addMenuItem("codeformat",{text:"Code",icon:"sourcecode",onAction:$B(t,"code")})}(n)},qA=function(n){!function(t){t.ui.registry.addMenuItem("undo",{text:"Undo",icon:"undo",shortcut:"Meta+Z",onSetup:function(n){return ZB(n,t,"hasUndo")},onAction:function(){return t.execCommand("undo")}}),t.ui.registry.addMenuItem("redo",{text:"Redo",icon:"redo",shortcut:"Meta+Y",onSetup:function(n){return ZB(n,t,"hasRedo")},onAction:function(){return t.execCommand("redo")}})}(n),function(t){t.ui.registry.addButton("undo",{tooltip:"Undo",icon:"undo",onSetup:function(n){return ZB(n,t,"hasUndo")},onAction:function(){return t.execCommand("undo")}}),t.ui.registry.addButton("redo",{tooltip:"Redo",icon:"redo",onSetup:function(n){return ZB(n,t,"hasRedo")},onAction:function(){return t.execCommand("redo")}})}(n)},KA=function(n){!function(n){n.ui.registry.addButton("visualaid",{tooltip:"Visual aids",text:"Visual aids",onAction:function(){return n.execCommand("mceToggleVisualAid")}})}(n),function(t){t.ui.registry.addToggleMenuItem("visualaid",{text:"Visual aids",onSetup:function(n){return function(t,n){t.setActive(n.hasVisual);function e(n){t.setActive(n.hasVisual)}return n.on("VisualAid",e),function(){return n.off("VisualAid",e)}}(n,t)},onAction:function(){t.execCommand("mceToggleVisualAid")}})}(n)},JA=function(n){!function(t){t.ui.registry.addButton("outdent",{tooltip:"Decrease indent",icon:"outdent",onSetup:function(n){return function(n,t){n.setDisabled(!t.queryCommandState("outdent"));function e(){n.setDisabled(!t.queryCommandState("outdent"))}return t.on("NodeChange",e),function(){return t.off("NodeChange",e)}}(n,t)},onAction:function(){return t.execCommand("outdent")}}),t.ui.registry.addButton("indent",{tooltip:"Increase indent",icon:"indent",onAction:function(){return t.execCommand("indent")}})}(n)},$A=function(n,t){!function(n,t){var e=dE(0,t,nB(n));n.ui.registry.addNestedMenuItem("align",{text:t.shared.providers.translate("Align"),getSubmenuItems:function(){return e.items.validateItems(e.getStyleItems())}})}(n,t),function(n,t){var e=dE(0,t,eB(n));n.ui.registry.addNestedMenuItem("fontformats",{text:t.shared.providers.translate("Fonts"),getSubmenuItems:function(){return e.items.validateItems(e.getStyleItems())}})}(n,t),function(n,t){var e=N({type:"advanced"},t.styleselect),o=dE(0,t,cB(n,e));n.ui.registry.addNestedMenuItem("formats",{text:"Formats",getSubmenuItems:function(){return o.items.validateItems(o.getStyleItems())}})}(n,t),function(n,t){var e=dE(0,t,aB(n));n.ui.registry.addNestedMenuItem("blockformats",{text:"Blocks",getSubmenuItems:function(){return e.items.validateItems(e.getStyleItems())}})}(n,t),function(n,t){var e=dE(0,t,rB(n));n.ui.registry.addNestedMenuItem("fontsizes",{text:"Font sizes",getSubmenuItems:function(){return e.items.validateItems(e.getStyleItems())}})}(n,t)},QA=function(n,t){XA(n),YA(n),$A(n,t),qA(n),Uv.register(n),KA(n),JA(n)},ZA=function(n){return{anchor:"selection",root:we.fromDom(n.selection.getNode())}},n_={onLtr:function(){return[rc,ua,aa,ca,sa,oc,Ug,Wg,pm,mm,hm,gm]},onRtl:function(){return[rc,aa,ua,sa,ca,oc,Ug,Wg,hm,gm,pm,mm]}},t_={valignCentre:[],alignCentre:[],alignLeft:["tox-pop--align-left"],alignRight:["tox-pop--align-right"],right:["tox-pop--right"],left:["tox-pop--left"],bottom:["tox-pop--bottom"],top:["tox-pop--top"]},e_=function(n){return n.settings.contextmenu_never_use_native||!1},o_=function(n){return function(n,t,e){var o=n.ui.registry.getAll().contextMenus;return V(n.settings,t).map(cD).getOrThunk(function(){return C(cD(e),function(n){return En(o,n)})})}(n,"contextmenu","link linkchecker image imagetools table spellchecker configurepermanentpen")},r_=function(n){return!1===n.getParam("contextmenu")},i_={type:"separator"},u_=function(t){if(cn(t))return t;switch(t.type){case"separator":return i_;case"submenu":return{type:"nestedmenuitem",text:t.text,icon:t.icon,getSubmenuItems:function(){var n=t.getSubmenuItems();return cn(n)?n:S(n,u_)}};default:return{type:"menuitem",text:t.text,icon:t.icon,onAction:function(n){return function(){return n()}}(t.onAction)}}},a_="data-initial-z-index",c_=wt("snaps",[ct("getSnapPoints"),qu("onSensor"),ct("leftAttr"),ct("topAttr"),St("lazyViewport",Su),St("mustSnap",!1)]),s_=[St("useFixed",u),ct("blockerClass"),St("getTarget",l),St("onDrag",Z),St("repositionTarget",!0),St("onDrop",Z),Bt("getBounds",Su),c_],f_=function(n,t,r,i,u){var e=t.getSnapPoints(n);return bD(e,r,i,u).orThunk(function(){return O(e,function(t,e){var n=e.sensor(),o=function(n,t,e,o,r,i){var u=bB(n,r,i),a=bB(t,r,i),c=Math.abs(u.left()-a.left()),s=Math.abs(u.top()-a.top());return Iu(c,s)}(r,n,e.range().left(),e.range().top(),i,u);return t.deltas.fold(function(){return{deltas:on.some(o),snap:on.some(e)}},function(n){return(o.left()+o.top())/2<=(n.left()+n.top())/2?{deltas:on.some(o),snap:on.some(e)}:t})},{deltas:on.none(),snap:on.none()}).snap.map(function(n){return{output:nn(wB(n.output(),r,i,u)),extra:n.extra}})})},l_=function(n,t,e,o,r){var i=t.getSnapPoints(n);return bD(i,e,o,r)},d_=/* */Object.freeze({getData:function(n){return on.from(Iu(n.x(),n.y()))},getDelta:function(n,t){return Iu(t.left()-n.left(),t.top()-n.top())}}),m_=g(s_,[Qu("dragger",{handlers:kD(OD)})]),g_=/* */Object.freeze({getData:function(n){var t=n.raw().touches;return 1===t.length?function(n){var t=n[0];return on.some(Iu(t.clientX,t.clientY))}(t):on.none()},getDelta:function(n,t){return Iu(t.left()-n.left(),t.top()-n.top())}}),p_=m_,h_=g(s_,[Qu("dragger",{handlers:kD(ED)})]),v_=g(s_,[Qu("dragger",{handlers:kD(function(n,t,e){return g(OD(n,t,e),ED(n,t,e))})})]),b_=/* */Object.freeze({mouse:p_,touch:h_,mouseOrTouch:v_}),y_=/* */Object.freeze({init:function(){var o=on.none(),t=on.none(),n=nn({});return nu({readState:n,reset:function(){o=on.none(),t=on.none()},update:function(t,n){return t.getData(n).bind(function(n){return function(t,e){var n=o.map(function(n){return t.getDelta(n,e)});return o=on.some(e),n}(t,n)})},getStartData:function(){return t},setStartData:function(n){t=on.some(n)}})}}),x_=/* */Object.freeze({snapTo:function(n,t,e,o){var r=t.getTarget(n.element());if(t.repositionTarget){var i=Co(n.element()),u=pu(i),a=mB(r),c=function(n,t,e){return{coord:wB(n.output(),n.output(),t,e),extra:n.extra()}}(o,u,a),s=xB(c.coord,0,a);xr(r,s)}}}),w_=xa({branchKey:"mode",branches:b_,name:"dragging",active:{events:function(n,t){return n.dragger.handlers(n,t)}},extra:{snap:So(["sensor","range","output"],["extra"])},state:y_,apis:x_}),S_=Ht(),C_=function(c,e){function t(n){var t=wu(n);return TD(g.getOpt(e),n,t.x(),t.y(),t.width(),t.height())}function o(n){var t=wu(n);return TD(p.getOpt(e),n,t.right(),t.bottom(),t.width(),t.height())}function r(n,t,e,o){var r=e(t);w_.snapTo(n,r),function(n,t,e,o){var r=t.dom().getBoundingClientRect();kr(n.element(),"display");var i=Oo(we.fromDom(c.getBody())).dom().innerHeight,u=e(r),a=o(r,i);(u||a)&&yr(n.element(),"display","none")}(n,t,function(n){return n[o]<0},function(n,t){return n[o]>t})}function i(n){return r(h,n,t,"top")}function u(n){return r(v,n,o,"bottom")}var a=ye([]),s=ye([]),n=ye(!1),f=ye(on.none()),l=ye(on.none()),d=BD(function(){return S(a.get(),function(n){return t(n)})},f,function(t){l.get().each(function(n){c.fire("TableSelectorChange",{start:t,finish:n})})}),m=BD(function(){return S(s.get(),function(n){return o(n)})},l,function(t){f.get().each(function(n){c.fire("TableSelectorChange",{start:n,finish:t})})}),g=DD(d),p=DD(m),h=uu(g.asSpec()),v=uu(p.asSpec());S_.deviceType.isTouch()&&(c.on("TableSelectionChange",function(t){n.get()||(hs(e,h),hs(e,v),n.set(!0)),f.set(on.some(t.start)),l.set(on.some(t.finish)),t.otherCells.each(function(n){a.set(n.upOrLeftCells),s.set(n.downOrRightCells),i(t.start),u(t.finish)})}),c.on("ResizeEditor ResizeWindow ScrollContent",function(){f.get().each(i),l.get().each(u)}),c.on("TableSelectionClear",function(){n.get()&&(bs(h),bs(v),n.set(!1)),f.set(on.none()),l.set(on.none())}))};(ID=FD=FD||{})[ID.None=0]="None",ID[ID.Both=1]="Both",ID[ID.Vertical=2]="Vertical";function k_(n,t,e){var o=we.fromDom(n.getContainer()),r=function(n,t,e,o,r){var i={};return i.height=jA(o+t.top(),Vb(n),Hb(n)),e===FD.Both&&(i.width=jA(r+t.left(),Rb(n),Nb(n))),i}(n,t,e,su(o),mu(o));Cn(r,function(n,t){return yr(o,t,WA(n))}),Hv(n)}function O_(n){if(1===n.nodeType){if("BR"===n.nodeName||n.getAttribute("data-mce-bogus"))return!0;if("bookmark"===n.getAttribute("data-mce-type"))return!0}return!1}function E_(o,t){var r,n,e;return{dom:{tag:"div",classes:["tox-statusbar"]},components:(n=function(){var n=[];return o.getParam("elementpath",!0,"boolean")&&n.push(pM(o,{})),Vt(o.settings.plugins,"wordcount")&&n.push(function(n,o){function r(n,t,e){return mg.set(n,[Ir(o.translate(["{0} "+e,t[e]]))])}return Gg.sketch({dom:{tag:"button",classes:["tox-statusbar__wordcount"]},components:[],buttonBehaviours:ba([Gy.config({}),mg.config({}),Zf.config({store:{mode:"memory",initialValue:{mode:"words",count:{words:0,characters:0}}}}),Kd("wordcount-events",[Ni(function(n){var t=Zf.getValue(n),e="words"===t.mode?"characters":"words";Zf.setValue(n,{mode:e,count:t.count}),r(n,t.count,e)}),Ii(function(e){n.on("wordCountUpdate",function(n){var t=Zf.getValue(e).mode;Zf.setValue(e,{mode:t,count:n.wordCount}),r(e,n.wordCount,t)})})])])})}(o,t)),o.getParam("branding",!0,"boolean")&&n.push(function(){var n=rh.translate(["Powered by {0}","Tiny"]);return{dom:{tag:"span",classes:["tox-statusbar__branding"],innerHtml:'<a href="https://www.tiny.cloud/?utm_campaign=editor_referral&amp;utm_medium=poweredby&amp;utm_source=tinymce&amp;utm_content=v5" rel="noopener" target="_blank" tabindex="-1" aria-label="'+n+'">'+n+"</a>"}}}()),0<n.length?[{dom:{tag:"div",classes:["tox-statusbar__text-container"]},components:n}]:[]}(),e=function(n){var t=!Vt(n.settings.plugins,"autoresize"),e=n.getParam("resize",t);return!1===e?FD.None:"both"===e?FD.Both:FD.Vertical}(o),e!==FD.None&&n.push((r=e,{dom:{tag:"div",classes:["tox-statusbar__resize-handle"],attributes:{title:t.translate("Resize")},innerHtml:ym("resize-handle",t.icons)},behaviours:ba([w_.config({mode:"mouse",repositionTarget:!1,onDrag:function(n,t,e){k_(o,e,r)},blockerClass:"tox-blocker"})])})),n)}}function T_(n){return[ft("type"),function(n){return st(n,me)}("columns"),n]}function B_(t){return ce("items","items",Mn(),Kn(Zn(function(n){return tt("Checking item of "+t,gF,n).fold(function(n){return an.error(le(n))},function(n){return an.value(n)})})))}function D_(n){return cn(n.type)&&cn(n.name)}function A_(n){var t=function(n){return C(DF(n),D_)}(n),e=B(t,function(t){return function(n){return on.from(AF[n.type])}(t).fold(function(){return[]},function(n){return[st(t.name,n)]})});return re(e)}function __(n){return{internalDialog:et(function(n){return tt("dialog",BF,n)}(n)),dataValidator:A_(n),initialData:n.initialData}}function M_(n){var e=[],o={};return Cn(n,function(n,t){n.fold(function(){e.push(t)},function(n){o[t]=n})}),0<e.length?an.error(e):an.value(o)}function F_(n){return yn(function(n,t){var e=gn.call(n,0);return e.sort(t),e}(n,function(n,t){return t<n?-1:n<t?1:0}))}function I_(n,t){yr(n,"height",t+"px"),Ht().browser.isIE()?kr(n,"flex-basis"):yr(n,"flex-basis",t+"px")}function R_(n,o,r){Cu(n,'[role="dialog"]').each(function(e){ku(e,'[role="tablist"]').each(function(t){r.get().map(function(n){return yr(o,"height","0"),yr(o,"flex-basis","0"),Math.min(n,function(n,t,e){var o,r=ko(n).dom(),i=Cu(n,".tox-dialog-wrap").getOr(n);o="fixed"===wr(i,"position")?Math.max(r.clientHeight,v.window.innerHeight):Math.max(r.offsetHeight,r.scrollHeight);var u=su(t),a=t.dom().offsetLeft>=e.dom().offsetLeft+mu(e)?Math.max(su(e),u):u,c=parseInt(wr(n,"margin-top"),10)||0,s=parseInt(wr(n,"margin-bottom"),10)||0;return o-(su(n)+c+s-a)}(e,o,t))}).each(function(n){I_(o,n)})})})}function V_(n){return ku(n,'[role="tabpanel"]')}function N_(r){var i;return{smartTabHeight:(i=ye(on.none()),{extraEvents:[Ii(function(n){var t=n.element();V_(t).each(function(o){yr(o,"visibility","hidden"),n.getSystem().getByDom(o).toOption().each(function(n){var t=function(o,r,i){return S(o,function(n,t){mg.set(i,o[t].view());var e=r.dom().getBoundingClientRect();return mg.set(i,[]),e.height})}(r,o,n),e=F_(t);i.set(e)}),R_(t,o,i),kr(o,"visibility"),function(n,t){yn(n).each(function(n){return WF.showTab(t,n.value)})}(r,n),qg.requestAnimationFrame(function(){R_(t,o,i)})})}),lo(Si(),function(n){var t=n.element();V_(t).each(function(n){R_(t,n,i)})}),lo(gy,function(n,t){var r=n.element();V_(r).each(function(t){var n=Sa();yr(t,"visibility","hidden");var e=Sr(t,"height").map(function(n){return parseInt(n,10)});kr(t,"height"),kr(t,"flex-basis");var o=t.dom().getBoundingClientRect().height;e.forall(function(n){return n<o})?(i.set(on.from(o)),R_(r,t,i)):e.each(function(n){I_(t,n)}),kr(t,"visibility"),n.each(wa)})})],selectFirst:!1}),naiveTabHeight:{extraEvents:[],selectFirst:!0}}}function H_(n,t,e,o){return{dom:{tag:"div",classes:["tox-dialog__content-js"],attributes:N(N({},t.map(function(n){return{id:n}}).getOr({})),o?{"aria-live":"polite"}:{})},components:[],behaviours:ba([SS(0),RT.config({channel:KF,updateState:function(n,t){return on.some({isTabPanel:function(){return"tabpanel"===t.body.type}})},renderComponents:function(n){switch(n.body.type){case"tabpanel":return[function(n,e){function o(n){var t=Zf.getValue(n),e=M_(t).getOr({}),o=i.get(),r=Dn(o,e);i.set(r)}function r(n){var t=i.get();Zf.setValue(n,t)}var i=ye({}),u=ye(null),t=S(n.tabs,function(n){return{value:n.name,dom:{tag:"div",classes:["tox-dialog__body-nav-item"],innerHtml:e.shared.providers.translate(n.title)},view:function(){return[dS.sketch(function(t){return{dom:{tag:"div",classes:["tox-form"]},components:S(n.items,function(n){return Wk(t,n,e)}),formBehaviours:ba([lg.config({mode:"acyclic",useTabstopAt:b(MS)}),Kd("TabView.form.events",[Ii(r),Ri(o)]),lc.config({channels:K([{key:GF,value:{onReceive:o}},{key:XF,value:{onReceive:r}}])})])}})]}}}),a=N_(t).smartTabHeight;return WF.sketch({dom:{tag:"div",classes:["tox-dialog__body"]},onChangeTab:function(n,t,e){var o=Zf.getValue(t);ro(n,my,{name:o,oldName:u.get()}),u.set(o)},tabs:t,components:[WF.parts().tabbar({dom:{tag:"div",classes:["tox-dialog__body-nav"]},components:[HF.parts().tabs({})],markers:{tabClass:"tox-tab",selectedClass:"tox-dialog__body-nav-item--active"},tabbarBehaviours:ba([Gy.config({})])}),WF.parts().tabview({dom:{tag:"div",classes:["tox-dialog__body-content"]}})],selectFirst:a.selectFirst,tabSectionBehaviours:ba([Kd("tabpanel",a.extraEvents),lg.config({mode:"acyclic"}),Zl.config({find:function(n){return yn(WF.getViewItems(n))}}),Zf.config({store:{mode:"manual",getValue:function(n){return n.getSystem().broadcastOn([GF],{}),i.get()},setValue:function(n,t){i.set(t),n.getSystem().broadcastOn([XF],{})}}})])})}(n.body,e)];default:return[function(n,e){var t=vm(dS.sketch(function(t){return{dom:{tag:"div",classes:["tox-form"].concat(n.classes)},components:S(n.items,function(n){return Wk(t,n,e)})}}));return{dom:{tag:"div",classes:["tox-dialog__body"]},components:[{dom:{tag:"div",classes:["tox-dialog__body-content"]},components:[t.asSpec()]}],behaviours:ba([lg.config({mode:"acyclic",useTabstopAt:b(MS)}),wS(t),ES(t,{postprocess:function(n){return M_(n).fold(function(n){return v.console.error(n),{}},function(n){return n})}})])}}(n.body,e)]}},initialData:n})])}}function P_(n,e){return[ho(Qr(),FS),n(ay,function(n,t){e.onClose(),t.onClose()}),n(cy,function(n,t,e,o){t.onCancel(n),oo(o,ay)}),lo(dy,function(n,t){return e.onUnblock()}),lo(ly,function(n,t){return e.onBlock(t.event())})]}function z_(n,t){function e(n,t){return Wb.sketch({dom:{tag:"div",classes:["tox-dialog__footer-"+n]},components:S(t,function(n){return n.memento.asSpec()})})}var o=function(n,t){for(var e=[],o=[],r=0,i=n.length;r<i;r++){var u=n[r];(t(u,r)?e:o).push(u)}return{pass:e,fail:o}}(t.map(function(n){return n.footerButtons}).getOr([]),function(n){return"start"===n.align});return[e("start",o.pass),e("end",o.fail)]}function L_(n,o){return{dom:cp('<div class="tox-dialog__footer"></div>'),components:[],behaviours:ba([RT.config({channel:JF,initialData:n,updateState:function(n,t){var e=S(t.buttons,function(n){var t=vm(function(n,t){return YC(n,n.type,t)}(n,o));return{name:n.name,align:n.align,memento:t}});return on.some({lookupByName:function(n,t){return function(t,n,e){return E(n,function(n){return n.name===e}).bind(function(n){return n.memento.getOpt(t)})}(n,e,t)},footerButtons:e})},renderComponents:z_})])}}function j_(n,t){return wM.parts().footer(L_(n,t))}function U_(t,e){if(t.getRoot().getSystem().isConnected()){var o=Zl.getCurrent(t.getFormWrapper()).getOr(t.getFormWrapper());return dS.getField(o,e).fold(function(){var n=t.getFooter();return RT.getState(n).get().bind(function(n){return n.lookupByName(o,e)})},function(n){return on.some(n)})}return on.none()}function W_(u,o,a){function n(n){var t=u.getRoot();t.getSystem().isConnected()&&n(t)}var c={getData:function(){var n=u.getRoot(),t=n.getSystem().isConnected()?u.getFormWrapper():n,e=Zf.getValue(t),o=P(a,function(n){return n.get()});return N(N({},e),o)},setData:function(i){n(function(n){var t=c.getData(),e=An(t,i),o=function(n,t){var e=n.getRoot();return RT.getState(e).get().map(function(n){return et(tt("data",n.dataValidator,t))}).getOr(t)}(u,e),r=u.getFormWrapper();Zf.setValue(r,o),Cn(a,function(n,t){En(e,t)&&n.set(e[t])})})},disable:function(n){U_(u,n).each(Ch.disable)},enable:function(n){U_(u,n).each(Ch.enable)},focus:function(n){U_(u,n).each(vg.focus)},block:function(t){if(!cn(t))throw new Error("The dialogInstanceAPI.block function should be passed a blocking message of type string as an argument");n(function(n){ro(n,ly,{message:t})})},unblock:function(){n(function(n){oo(n,dy)})},showTab:function(e){n(function(n){var t=u.getBody();RT.getState(t).get().exists(function(n){return n.isTabPanel()})&&Zl.getCurrent(t).each(function(n){WF.showTab(n,e)})})},redial:function(e){n(function(n){var t=o(e);n.getSystem().broadcastOn([YF],t),n.getSystem().broadcastOn([qF],t.internalDialog),n.getSystem().broadcastOn([KF],t.internalDialog),n.getSystem().broadcastOn([JF],t.internalDialog),c.setData(t.initialData)})},close:function(){n(function(n){oo(n,ay)})}};return c}function G_(n,t){return{dom:{tag:"div",styles:{display:"none"},classes:["tox-dialog__header"]},components:[n,t]}}function X_(n,t){return wM.parts().close(Gg.sketch({dom:{tag:"button",classes:["tox-button","tox-button--icon","tox-button--naked"],attributes:{type:"button","aria-label":t.translate("Close")}},action:n,buttonBehaviours:ba([Gy.config({})])}))}function Y_(){return wM.parts().title({dom:{tag:"div",classes:["tox-dialog__title"],innerHtml:"",styles:{display:"none"}}})}function q_(n,t){return wM.parts().body({dom:{tag:"div",classes:["tox-dialog__body"]},components:[{dom:{tag:"div",classes:["tox-dialog__body-content"]},components:[{dom:cp("<p>"+t.translate(n)+"</p>")}]}]})}function K_(n){return wM.parts().footer({dom:{tag:"div",classes:["tox-dialog__footer"]},components:n})}function J_(n,t){return[Wb.sketch({dom:{tag:"div",classes:["tox-dialog__footer-start"]},components:n}),Wb.sketch({dom:{tag:"div",classes:["tox-dialog__footer-end"]},components:t})]}function $_(t){var n,e="tox-dialog",o=e+"-wrap",r=o+"__backdrop",i=e+"__disable-scroll";return wM.sketch({lazySink:t.lazySink,onEscape:function(n){return t.onEscape(n),on.some(!0)},useTabstopAt:function(n){return!MS(n)},dom:{tag:"div",classes:[e].concat(t.extraClasses),styles:N({position:"relative"},t.extraStyles)},components:g([t.header,t.body],t.footer.toArray()),parts:{blocker:{dom:cp('<div class="'+o+'"></div>'),components:[{dom:{tag:"div",classes:nI?[r,r+"--opaque"]:[r]}}]}},dragBlockClass:o,modalBehaviours:ba(g([vg.config({}),Kd("dialog-events",t.dialogEvents.concat([bo(Qr(),function(n,t){lg.focusIn(n)})])),Kd("scroll-lock",[Ii(function(){fr(zr(),i)}),Ri(function(){dr(zr(),i)})])],t.extraBehaviours)),eventOrder:N((n={},n[di()]=["dialog-events"],n[Ci()]=["scroll-lock","dialog-events","alloy.base.behaviour"],n[ki()]=["alloy.base.behaviour","dialog-events","scroll-lock"],n),t.eventOrder)})}function Q_(n){return Gg.sketch({dom:{tag:"button",classes:["tox-button","tox-button--icon","tox-button--naked"],attributes:{type:"button","aria-label":n.translate("Close"),title:n.translate("Close")}},components:[{dom:{tag:"div",classes:["tox-icon"],innerHtml:'<svg width="24" height="24" xmlns="http://www.w3.org/2000/svg"><path d="M17.953 7.453L13.422 12l4.531 4.547-1.406 1.406L12 13.422l-4.547 4.531-1.406-1.406L10.578 12 6.047 7.453l1.406-1.406L12 10.578l4.547-4.531z" fill-rule="evenodd"></path></svg>'}}],action:function(n){oo(n,cy)}})}function Z_(n,t,e){function o(n){return[Ir(e.translate(n.title))]}return{dom:{tag:"div",classes:["tox-dialog__title"],attributes:N({},t.map(function(n){return{id:n}}).getOr({}))},components:o(n),behaviours:ba([RT.config({channel:qF,renderComponents:o})])}}function nM(){return{dom:cp('<div class="tox-dialog__draghandle"></div>')}}function tM(n,t){return function(n,t){var e=wM.parts().title(Z_(n,on.none(),t)),o=wM.parts().draghandle(nM()),r=wM.parts().close(Q_(t)),i=[e].concat(n.draggable?[o]:[]).concat([r]);return Wb.sketch({dom:cp('<div class="tox-dialog__header"></div>'),components:i})}({title:t.shared.providers.translate(n),draggable:t.dialog.isDraggableModal()},t.shared.providers)}function eM(n,t){return{onClose:function(){return t.closeWindow()},onBlock:function(e){wM.setBusy(n(),function(n,t){return{dom:{tag:"div",classes:["tox-dialog__busy-spinner"],attributes:{"aria-label":e.message()},styles:{left:"0px",right:"0px",bottom:"0px",top:"0px",position:"absolute"}},behaviours:t,components:[{dom:cp('<div class="tox-spinner"><div></div><div></div><div></div></div>')}]}})},onUnblock:function(){wM.setIdle(n())}}}function oM(n,t,e,o){var r;return uu($_(N(N({},n),{lazySink:o.shared.getSink,extraBehaviours:g([RT.config({channel:YF,updateState:function(n,t){return on.some(t)},initialData:t}),DS({})],n.extraBehaviours),onEscape:function(n){oo(n,cy)},dialogEvents:e,eventOrder:(r={},r[li()]=["reflecting","receiving"],r[Ci()]=["scroll-lock","reflecting","messages","dialog-events","alloy.base.behaviour"],r[ki()]=["alloy.base.behaviour","dialog-events","messages","reflecting","scroll-lock"],r)})))}function rM(n){return S(n,function(n){return"menu"===n.type?function(n){var t=S(n.items,function(n){var t=ye(!1);return N(N({},n),{storage:t})});return N(N({},n),{items:t})}(n):n})}function iM(n){return O(n,function(n,t){return"menu"!==t.type?n:O(t.items,function(n,t){return n[t.name]=t.storage,n},n)},{})}function uM(n,t,e){var o=tM(n.internalDialog.title,e),r=function(n,t){var e=H_(n,on.none(),t,!1);return wM.parts().body(e)}({body:n.internalDialog.body},e),i=rM(n.internalDialog.buttons),u=iM(i),a=j_({buttons:i},e),c=ZF(function(){return d},eM(function(){return l},t)),s="normal"!==n.internalDialog.size?"large"===n.internalDialog.size?["tox-dialog--width-lg"]:["tox-dialog--width-md"]:[],f={header:o,body:r,footer:on.some(a),extraClasses:s,extraBehaviours:[],extraStyles:{}},l=oM(f,n,c,e),d=W_({getRoot:function(){return l},getBody:function(){return wM.getBody(l)},getFooter:function(){return wM.getFooter(l)},getFormWrapper:function(){var n=wM.getBody(l);return Zl.getCurrent(n).getOr(n)}},t.redial,u);return{dialog:l,instanceApi:d}}function aM(n,t,e,o){var r,i,u=Xo("dialog-label"),a=Xo("dialog-content"),c=vm(function(n,t,e){return Wb.sketch({dom:cp('<div class="tox-dialog__header"></div>'),components:[Z_(n,on.some(t),e),nM(),Q_(e)],containerBehaviours:ba([w_.config({mode:"mouse",blockerClass:"blocker",getTarget:function(n){return Ou(n,'[role="dialog"]').getOrDie()},snaps:{getSnapPoints:function(){return[]},leftAttr:"data-drag-left",topAttr:"data-drag-top"}})])})}({title:n.internalDialog.title,draggable:!0},u,e.shared.providers)),s=vm(function(n,t,e,o){return H_(n,on.some(t),e,o)}({body:n.internalDialog.body},a,e,o)),f=rM(n.internalDialog.buttons),l=iM(f),d=vm(function(n,t){return L_(n,t)}({buttons:f},e)),m=ZF(function(){return p},{onBlock:function(){},onUnblock:function(){},onClose:function(){return t.closeWindow()}}),g=uu({dom:{tag:"div",classes:["tox-dialog","tox-dialog-inline"],attributes:(r={role:"dialog"},r["aria-labelledby"]=u,r["aria-describedby"]=""+a,r)},eventOrder:(i={},i[li()]=[RT.name(),lc.name()],i[di()]=["execute-on-form"],i[Ci()]=["reflecting","execute-on-form"],i),behaviours:ba([lg.config({mode:"cyclic",onEscape:function(n){return oo(n,ay),on.some(!0)},useTabstopAt:function(n){return!MS(n)&&("button"!==Ke(n)||"disabled"!==zo(n,"disabled"))}}),RT.config({channel:YF,updateState:function(n,t){return on.some(t)},initialData:n}),vg.config({}),Kd("execute-on-form",m.concat([bo(Qr(),function(n,t){lg.focusIn(n)})])),DS({})]),components:[c.asSpec(),s.asSpec(),d.asSpec()]}),p=W_({getRoot:function(){return g},getFooter:function(){return d.get(g)},getBody:function(){return s.get(g)},getFormWrapper:function(){var n=s.get(g);return Zl.getCurrent(n).getOr(n)}},t.redial,l);return{dialog:g,instanceApi:p}}function cM(n){return sn(n)&&-1!==eI.indexOf(n.mceAction)}function sM(e,n,o,t){var r,i=tM(e.title,t),u=function(n){var t={dom:{tag:"div",classes:["tox-dialog__content-js"]},components:[{dom:{tag:"div",classes:["tox-dialog__body-iframe"]},components:[IS({dom:{tag:"iframe",attributes:{src:n.url}},behaviours:ba([Gy.config({}),vg.config({})])})]}],behaviours:ba([lg.config({mode:"acyclic",useTabstopAt:b(MS)})])};return wM.parts().body(t)}(e),a=e.buttons.bind(function(n){return 0===n.length?on.none():on.some(j_({buttons:n},t))}),c=QF(function(){return h},eM(function(){return p},n)),s=N(N({},e.height.fold(function(){return{}},function(n){return{height:n+"px","max-height":n+"px"}})),e.width.fold(function(){return{}},function(n){return{width:n+"px","max-width":n+"px"}})),f=e.width.isNone()&&e.height.isNone()?["tox-dialog--width-lg"]:[],l=new tI(e.url,{base_uri:new tI(v.window.location.href)}),d=l.protocol+"://"+l.host+(l.port?":"+l.port:""),m=ye(on.none()),g=[Kd("messages",[Ii(function(){var n=sb(we.fromDom(v.window),"message",function(n){if(l.isSameOrigin(new tI(n.raw().origin))){var t=n.raw().data;cM(t)?function(n,t,e){switch(e.mceAction){case"insertContent":n.insertContent(e.content);break;case"setContent":n.setContent(e.content);break;case"execCommand":var o=!!ln(e.ui)&&e.ui;n.execCommand(e.cmd,o,e.value);break;case"close":t.close();break;case"block":t.block(e.message);break;case"unblock":t.unblock()}}(o,h,t):function(n){return!cM(n)&&sn(n)&&En(n,"mceAction")}(t)&&e.onMessage(h,t)}});m.set(on.some(n))}),Ri(function(){m.get().each(function(n){return n.unbind()})})]),lc.config({channels:(r={},r[$F]={onReceive:function(n,t){ku(n.element(),"iframe").each(function(n){n.dom().contentWindow.postMessage(t,d)})}},r)})],p=oM({header:i,body:u,footer:a,extraClasses:f,extraBehaviours:g,extraStyles:s},e,c,t),h=function(t){function n(n){t.getSystem().isConnected()&&n(t)}return{block:function(t){if(!cn(t))throw new Error("The urlDialogInstanceAPI.block function should be passed a blocking message of type string as an argument");n(function(n){ro(n,ly,{message:t})})},unblock:function(){n(function(n){oo(n,dy)})},close:function(){n(function(n){oo(n,ay)})},sendMessage:function(t){n(function(n){n.getSystem().broadcastOn([$F],t)})}}}(p);return{dialog:p,instanceApi:h}}var fM,lM,dM,mM,gM,pM=function(i,r){r.delimiter||(r.delimiter="\xbb");return{dom:{tag:"div",classes:["tox-statusbar__path"],attributes:{role:"navigation"}},behaviours:ba([lg.config({mode:"flow",selector:"div[role=button]"}),Gy.config({}),mg.config({}),Kd("elementPathEvents",[Ii(function(e,n){i.shortcuts.add("alt+F11","focus statusbar elementpath",function(){return lg.focusIn(e)}),i.on("NodeChange",function(n){var t=function(n){for(var t=[],e=n.length;0<e--;){var o=n[e];if(1===o.nodeType&&!O_(o)){var r=i.fire("ResolveName",{name:o.nodeName.toLowerCase(),target:o});if(r.isDefaultPrevented()||t.push({name:r.name,element:o}),r.isPropagationStopped())break}}return t}(n.parents);0<t.length&&mg.set(e,function(n){var t=S(n||[],function(t,n){return Gg.sketch({dom:{tag:"div",classes:["tox-statusbar__path-item"],attributes:{role:"button","data-index":n,"tab-index":-1,"aria-level":n+1},innerHtml:t.name},action:function(n){i.focus(),i.selection.select(t.element),i.nodeChanged()}})}),o={dom:{tag:"div",classes:["tox-statusbar__path-divider"],attributes:{"aria-hidden":!0},innerHtml:" "+r.delimiter+" "}};return O(t.slice(1),function(n,t){var e=n;return e.push(o),e.push(t),e},[t[0]])}(t))})})])]),components:[]}},hM=function(l){function d(){return e.bind(FA.getHeader)}function m(){return an.value(v)}function n(){return e.bind(function(n){return FA.getMoreButton(n)}).getOrDie("Could not find more button element")}function g(){return e.bind(function(n){return FA.getThrobber(n)}).getOrDie("Could not find throbber element")}var t=l.inline,p=t?GA:LA,h=$b(l)?dA:hA,e=on.none(),o=Ht(),r=o.browser.isIE()?["tox-platform-ie"]:[],i=o.deviceType.isTouch()?["tox-platform-touch"]:[],u=rh.isRtl()?{attributes:{dir:"rtl"}}:{},v=uu({dom:N({tag:"div",classes:["tox","tox-silver-sink","tox-tinymce-aux"].concat(r).concat(i)},u),behaviours:ba([Af.config({useFixed:function(){return h.isDocked(d)}})])}),a=vm({dom:{tag:"div",classes:["tox-anchorbar"]}}),b=hO(v,l,function(){return e.bind(function(n){return a.getOpt(n)}).getOrDie("Could not find a anchor bar element")},n),c=FA.parts().menubar({dom:{tag:"div",classes:["tox-menubar"]},backstage:b,onEscape:function(){l.focus()}}),s=Yb(l),f=FA.parts().toolbar({dom:{tag:"div",classes:["tox-toolbar"]},getSink:m,backstage:b,onEscape:function(){l.focus()},split:s,lazyToolbar:function(){return e.bind(function(n){return FA.getToolbar(n)}).getOrDie("Could not find more toolbar element")},lazyMoreButton:n,lazyHeader:function(){return d().getOrDie("Could not find header element")}}),y=FA.parts()["multiple-toolbar"]({dom:{tag:"div",classes:["tox-toolbar-overlord"]},onEscape:function(){},split:s}),x=FA.parts().socket({dom:{tag:"div",classes:["tox-edit-area"]}}),w=FA.parts().sidebar({dom:{tag:"div",classes:["tox-sidebar"]}}),S=FA.parts().throbber({dom:{tag:"div",classes:["tox-throbber"]},backstage:b}),C=l.getParam("statusbar",!0,"boolean")&&!t?on.some(E_(l,b.shared.providers)):on.none(),k={dom:{tag:"div",classes:["tox-sidebar-wrap"]},components:[x,w]},O=Xb(l),E=zb(l),T=Pb(l),B=FA.parts().header({dom:{tag:"div",classes:["tox-editor-header"]},components:H([T?[c]:[],O?[y]:E?[f]:[],Kb(l)?[]:[a.asSpec()]]),sticky:$b(l),editor:l,getSink:m}),D=H([[B],t?[]:[k]]),A=H([[{dom:{tag:"div",classes:["tox-editor-container"]},components:D}],t?[]:C.toArray(),[S]]),_=Jb(l),M=N(N({role:"application"},rh.isRtl()?{dir:"rtl"}:{}),_?{"aria-hidden":"true"}:{}),F=uu(FA.sketch({dom:{tag:"div",classes:["tox","tox-tinymce"].concat(t?["tox-tinymce-inline"]:[]).concat(i).concat(r),styles:N({visibility:"hidden"},_?{opacity:"0",border:"0"}:{}),attributes:M},components:A,behaviours:ba([lg.config({mode:"cyclic",selector:".tox-menubar, .tox-toolbar, .tox-toolbar__primary, .tox-toolbar__overflow--open, .tox-sidebar__overflow--open, .tox-statusbar__path, .tox-statusbar__wordcount, .tox-statusbar__branding a"})])}));e=on.some(F),l.shortcuts.add("alt+F9","focus menubar",function(){FA.focusMenubar(F)}),l.shortcuts.add("alt+F10","focus toolbar",function(){FA.focusToolbar(F)});var I=Mb(F),R=Mb(v);XD(l,I,R),iy(l);function V(){var n=WA(KB(l)),t=WA(function(n){return JB(n).getOr(Ib(n))}(l));return l.inline||(Cr("div","width",t)&&yr(F.element(),"width",t),Cr("div","height",n)?yr(F.element(),"height",n):yr(F.element(),"height","200px")),n}return{mothership:I,uiMothership:R,backstage:b,renderUI:function(){h.setup(l,d),QA(l,b),lD(l,m,b),function(o){var r=o.ui.registry.getAll().sidebars;bn(wn(r),function(t){function e(){return on.from(o.queryCommandValue("ToggleSidebar")).is(t)}var n=r[t];o.ui.registry.addToggleButton(t,{icon:n.icon,tooltip:n.tooltip,onAction:function(n){o.execCommand("ToggleSidebar",!1,t),n.setActive(e())},onSetup:function(n){function t(){return n.setActive(e())}return o.on("ToggleSidebar",t),function(){o.off("ToggleSidebar",t)}}})})}(l),function(e,t,o){function r(n){n!==i.get()&&(WB(t(),n,o.providers),i.set(n))}var i=ye(!1),u=ye(on.none());e.on("ProgressState",function(n){if(u.get().each(qg.clearTimeout),mn(n.time)){var t=qg.setEditorTimeout(e,function(){return r(n.state)},n.time);u.set(on.some(t))}else r(n.state),u.set(on.none())})}(l,g,b.shared);var n=l.ui.registry.getAll(),t=n.buttons,e=n.menuItems,o=n.contextToolbars,r=n.sidebars,i=Lb(l),u={menuItems:e,menus:l.settings.menu?P(l.settings.menu,function(n){return An(n,{items:n.items})}):{},menubar:l.settings.menubar,toolbar:i.getOrThunk(function(){return l.getParam("toolbar",!0)}),buttons:t,sidebar:r};GD(l,o,v,{backstage:b}),C_(l,v);var a=l.getElement(),c=V(),s={mothership:I,uiMothership:R,outerContainer:F},f={targetNode:a,height:c};return p.render(l,s,u,b,f)},getUi:function(){return{channels:{broadcastAll:R.broadcast,broadcastOn:R.broadcastOn,register:function(){}}}}}},vM=function(n,t){var e=on.from(zo(n,"id")).fold(function(){var n=Xo("dialog-label");return Po(t,"id",n),n},l);Po(n,"aria-labelledby",e)},bM=nn([ct("lazySink"),ht("dragBlockClass"),Bt("getBounds",Su),St("useTabstopAt",nn(!0)),St("eventOrder",{}),Fs("modalBehaviours",[lg]),Ku("onExecute"),$u("onEscape")]),yM={sketch:l},xM=nn([Sl({name:"draghandle",overrides:function(n,t){return{behaviours:ba([w_.config({mode:"mouse",getTarget:function(n){return Cu(n,'[role="dialog"]').getOr(n)},blockerClass:n.dragBlockClass.getOrDie(new Error("The drag blocker class was not specified for a dialog with a drag handle: \n"+JSON.stringify(t,null,2)).message),getBounds:n.getDragBounds})])}}}),xl({schema:[ct("dom")],name:"title"}),xl({factory:yM,schema:[ct("dom")],name:"close"}),xl({factory:yM,schema:[ct("dom")],name:"body"}),Sl({factory:yM,schema:[ct("dom")],name:"footer"}),wl({factory:{sketch:function(n,t){return N(N({},n),{dom:t.dom,components:t.components})}},schema:[St("dom",{tag:"div",styles:{position:"fixed",left:"0px",top:"0px",right:"0px",bottom:"0px"}}),St("components",[])],name:"blocker"})]),wM=Al({name:"ModalDialog",configFields:bM(),partFields:xM(),factory:function(o,n,t,r){var a=Xo("alloy.dialog.busy"),c=Xo("alloy.dialog.idle"),s=ba([lg.config({mode:"special",onTab:function(){return on.some(!0)},onShiftTab:function(){return on.some(!0)}}),vg.config({})]),e=Xo("modal-events"),i=N(N({},o.eventOrder),{"alloy.system.attached":[e].concat(o.eventOrder["alloy.system.attached"]||[])});return{uid:o.uid,dom:o.dom,components:n,apis:{show:function(i){var n=o.lazySink(i).getOrDie(),u=ye(on.none()),t=r.blocker(),e=n.getSystem().build(N(N({},t),{components:t.components.concat([au(i)]),behaviours:ba([vg.config({}),Kd("dialog-blocker-events",[bo(Qr(),function(){lg.focusIn(i)}),lo(c,function(n,t){Lo(i.element(),"aria-busy")&&(jo(i.element(),"aria-busy"),u.get().each(function(n){return mg.remove(i,n)}))}),lo(a,function(n,t){Po(i.element(),"aria-busy","true");var e=t.event().getBusySpec();u.get().each(function(n){mg.remove(i,n)});var o=e(i,s),r=n.getSystem().build(o);u.set(on.some(r)),mg.append(i,au(r)),r.hasConfigured(lg)&&lg.focusIn(r)})])])}));hs(n,e),lg.focusIn(i)},hide:function(t){Eo(t.element()).each(function(n){t.getSystem().getByDom(n).each(function(n){bs(n)})})},getBody:function(n){return Ks(n,o,"body")},getFooter:function(n){return Ks(n,o,"footer")},setIdle:function(n){oo(n,c)},setBusy:function(n,t){ro(n,a,{getBusySpec:t})}},eventOrder:i,domModification:{attributes:{role:"dialog","aria-modal":"true"}},behaviours:Rs(o.modalBehaviours,[mg.config({}),lg.config({mode:"cyclic",onEnter:o.onExecute,onEscape:o.onEscape,useTabstopAt:o.useTabstopAt}),Kd(e,[Ii(function(n){vM(n.element(),Ks(n,o,"title").element()),function(n,t){var e=on.from(zo(n,"id")).fold(function(){var n=Xo("dialog-describe");return Po(t,"id",n),n},l);Po(n,"aria-describedby",e)}(n.element(),Ks(n,o,"body").element())})])])}},apis:{show:function(n,t){n.show(t)},hide:function(n,t){n.hide(t)},getBody:function(n,t){return n.getBody(t)},getFooter:function(n,t){return n.getFooter(t)},setBusy:function(n,t,e){n.setBusy(t,e)},setIdle:function(n,t){n.setIdle(t)}}}),SM=[ft("type"),ft("text"),lt("level",["info","warn","error","success"]),ft("icon"),St("url","")],CM=re(SM),kM=[ft("type"),ft("text"),Tt("disabled",!1),Tt("primary",!1),ce("name","name",In(function(){return Xo("button-name")}),ge),yt("icon"),Tt("borderless",!1)],OM=re(kM),EM=[ft("type"),ft("name"),ft("label"),Tt("disabled",!1)],TM=re(EM),BM=pe,DM=[ft("type"),ft("name")],AM=DM.concat([yt("label")]),_M=re(AM),MM=ge,FM=re(AM),IM=ge,RM=re(AM),VM=Kn(se),NM=AM.concat([Tt("sandboxed",!0)]),HM=re(NM),PM=ge,zM=AM.concat([yt("inputMode"),yt("placeholder"),Tt("maximized",!1),Tt("disabled",!1)]),LM=re(zM),jM=ge,UM=AM.concat([gt("items",[ft("text"),ft("value")]),kt("size",1),Tt("disabled",!1)]),WM=re(UM),GM=ge,XM=AM.concat([Tt("constrain",!0),Tt("disabled",!1)]),YM=re(XM),qM=re([ft("width"),ft("height")]),KM=AM.concat([yt("placeholder"),Tt("maximized",!1),Tt("disabled",!1)]),JM=re(KM),$M=ge,QM=AM.concat([Et("filetype","file",["image","media","file"]),St("disabled",!1)]),ZM=re(QM),nF=re([ft("value"),St("meta",{})]),tF=DM.concat([Ot("tag","textarea"),ft("scriptId"),ft("scriptUrl"),(fM="settings",lM=undefined,Ct(fM,lM,be))]),eF=DM.concat([Ot("tag","textarea"),dt("init")]),oF=Zn(function(n){return tt("customeditor.old",qn(eF),n).orThunk(function(){return tt("customeditor.new",qn(tF),n)})}),rF=ge,iF=[ft("type"),ft("html"),Et("presets","presentation",["presentation","document"])],uF=re(iF),aF=AM.concat([st("currentState",re([ct("blob"),ft("url")]))]),cF=re(aF),sF=AM.concat([St("columns","auto")]),fF=re(sF),lF=(dM=[ft("value"),ft("text"),ft("icon")],ue(dM)),dF=[ft("type"),pt("header",ge),pt("cells",Kn(ge))],mF=re(dF),gF=fe(function(){return rt("type",{alertbanner:CM,bar:re(function(n){return[ft("type"),n]}(B_("bar"))),button:OM,checkbox:TM,colorinput:_M,colorpicker:FM,dropzone:RM,grid:re(T_(B_("grid"))),iframe:HM,input:LM,selectbox:WM,sizeinput:YM,textarea:JM,urlinput:ZM,customeditor:oF,htmlpanel:uF,imagetools:cF,collection:fF,label:re(function(n){return[ft("type"),ft("label"),n]}(B_("label"))),table:mF,panel:hF})}),pF=[ft("type"),St("classes",[]),pt("items",gF)],hF=re(pF),vF=[ce("name","name",In(function(){return Xo("tab-name")}),ge),ft("title"),pt("items",gF)],bF=[ft("type"),gt("tabs",vF)],yF=re(bF),xF=re([ft("type"),ft("name"),Tt("active",!1)].concat(Wp)),wF=pe,SF=[ce("name","name",In(function(){return Xo("button-name")}),ge),yt("icon"),Et("align","end",["start","end"]),Tt("primary",!1),Tt("disabled",!1)],CF=g(SF,[ft("text")]),kF=g([lt("type",["submit","cancel","custom"])],CF),OF=g([lt("type",["menu"]),yt("text"),yt("tooltip"),yt("icon"),pt("items",xF),Bt("onSetup",function(){return Z})],SF),EF=CF,TF=it("type",{submit:kF,cancel:kF,custom:kF,menu:OF}),BF=re([ft("title"),st("body",rt("type",{panel:hF,tabpanel:yF})),Ot("size","normal"),pt("buttons",TF),St("initialData",{}),Bt("onAction",Z),Bt("onChange",Z),Bt("onSubmit",Z),Bt("onClose",Z),Bt("onCancel",Z),St("onTabChange",Z)]),DF=function(n){return sn(n)?[n].concat(B(R(n),DF)):fn(n)?B(n,DF):[]},AF={checkbox:BM,colorinput:MM,colorpicker:IM,dropzone:VM,input:jM,iframe:PM,sizeinput:qM,selectbox:GM,size:qM,textarea:$M,urlinput:nF,customeditor:rF,collection:lF,togglemenuitem:wF},_F=re(g([lt("type",["cancel","custom"])],EF)),MF=re([ft("title"),ft("url"),bt("height"),bt("width"),(mM="buttons",gM=_F,vt(mM,Kn(gM))),Bt("onAction",Z),Bt("onCancel",Z),Bt("onClose",Z),Bt("onMessage",Z)]),FF={open:function(n,t){var e=__(t);return n(e.internalDialog,e.initialData,e.dataValidator)},openUrl:function(n,t){return n(et(function(n){return tt("dialog",MF,n)}(t)))},redial:function(n){return __(n)}},IF=Dl({name:"TabButton",configFields:[St("uid",undefined),ct("value"),ce("dom","dom",Rn(function(n){return{attributes:{role:"tab",id:Xo("aria"),"aria-selected":"false"}}}),de()),ht("action"),St("domModification",{}),Fs("tabButtonBehaviours",[vg,lg,Zf]),ct("view")],factory:function(n,t){return{uid:n.uid,dom:n.dom,components:n.components,events:rm(n.action),behaviours:Rs(n.tabButtonBehaviours,[vg.config({}),lg.config({mode:"execution",useSpace:!0,useEnter:!0}),Zf.config({store:{mode:"memory",initialValue:n.value}})]),domModification:n.domModification}}}),RF=nn([ct("tabs"),ct("dom"),St("clickToDismiss",!1),Fs("tabbarBehaviours",[ad,lg]),Xu(["tabClass","selectedClass"])]),VF=Cl({factory:IF,name:"tabs",unit:"tab",overrides:function(o,n){function r(n,t){ad.dehighlight(n,t),ro(n,Ai(),{tabbar:n,button:t})}function i(n,t){ad.highlight(n,t),ro(n,Di(),{tabbar:n,button:t})}return{action:function(n){var t=n.getSystem().getByUid(o.uid).getOrDie(),e=ad.isHighlighted(t,n);(e&&o.clickToDismiss?r:e?Z:i)(t,n)},domModification:{classes:[o.markers.tabClass]}}}}),NF=nn([VF]),HF=Al({name:"Tabbar",configFields:RF(),partFields:NF(),factory:function(n,t,e,o){return{uid:n.uid,dom:n.dom,components:t,"debug.sketcher":"Tabbar",domModification:{attributes:{role:"tablist"}},behaviours:Rs(n.tabbarBehaviours,[ad.config({highlightClass:n.markers.selectedClass,itemClass:n.markers.tabClass,onHighlight:function(n,t){Po(t.element(),"aria-selected","true")},onDehighlight:function(n,t){Po(t.element(),"aria-selected","false")}}),lg.config({mode:"flow",getInitial:function(n){return ad.getHighlighted(n).map(function(n){return n.element()})},selector:"."+n.markers.tabClass,executeOnMove:!0})])}}}),PF=Dl({name:"Tabview",configFields:[Fs("tabviewBehaviours",[mg])],factory:function(n,t){return{uid:n.uid,dom:n.dom,behaviours:Rs(n.tabviewBehaviours,[mg.config({})]),domModification:{attributes:{role:"tabpanel"}}}}}),zF=nn([St("selectFirst",!0),qu("onChangeTab"),qu("onDismissTab"),St("tabs",[]),Fs("tabSectionBehaviours",[])]),LF=xl({factory:HF,schema:[ct("dom"),mt("markers",[ct("tabClass"),ct("selectedClass")])],name:"tabbar",defaults:function(n){return{tabs:n.tabs}}}),jF=xl({factory:PF,name:"tabview"}),UF=nn([LF,jF]),WF=Al({name:"TabSection",configFields:zF(),partFields:UF(),factory:function(r,n,t,e){function o(n,t){qs(n,r,"tabbar").each(function(n){t(n).each(io)})}return{uid:r.uid,dom:r.dom,components:n,behaviours:Is(r.tabSectionBehaviours),events:co(H([r.selectFirst?[Ii(function(n,t){o(n,ad.getFirst)})]:[],[lo(Di(),function(n,t){!function(o){var t=Zf.getValue(o);qs(o,r,"tabview").each(function(e){E(r.tabs,function(n){return n.value===t}).each(function(n){var t=n.view();Po(e.element(),"aria-labelledby",zo(o.element(),"id")),mg.set(e,t),r.onChangeTab(e,o,t)})})}(t.event().button())}),lo(Ai(),function(n,t){var e=t.event().button();r.onDismissTab(n,e)})]])),apis:{getViewItems:function(n){return qs(n,r,"tabview").map(function(n){return mg.contents(n)}).getOr([])},showTab:function(n,e){o(n,function(t){var n=ad.getCandidates(t);return E(n,function(n){return Zf.getValue(n)===e}).filter(function(n){return!ad.isHighlighted(t,n)})})}}}},apis:{getViewItems:function(n,t){return n.getViewItems(t)},showTab:function(n,t,e){n.showTab(t,e)}}}),GF="send-data-to-section",XF="send-data-to-view",YF=Xo("update-dialog"),qF=Xo("update-title"),KF=Xo("update-body"),JF=Xo("update-footer"),$F=Xo("body-send-message"),QF=function(i,n){function t(n,r){return lo(n,function(e,o){u(e,function(n,t){r(i(),n,o.event(),e)})})}var u=function(t,e){RT.getState(t).get().each(function(n){e(n,t)})};return g(P_(t,n),[t(sy,function(n,t,e){t.onAction(n,{name:e.name()})})])},ZF=function(i,n){function t(n,r){return lo(n,function(e,o){u(e,function(n,t){r(i(),n,o.event(),e)})})}var u=function(t,e){RT.getState(t).get().each(function(n){e(n.internalDialog,t)})};return g(P_(t,n),[t(fy,function(n,t){return t.onSubmit(n)}),t(uy,function(n,t,e){t.onChange(n,{name:e.name()})}),t(sy,function(n,t,e,o){function r(){return lg.focusIn(o)}var i=Sa();t.onAction(n,{name:e.name(),value:e.value()}),Sa().fold(function(){r()},function(n){!Ye(o.element(),n)||Lo(n,"disabled")?r():Ye(n,i.getOrNull())&&Lo(i.getOrDie(),"disabled")&&r()})}),t(my,function(n,t,e){t.onTabChange(n,{newTabName:e.name(),oldTabName:e.oldName()})}),Ri(function(n){var t=i();Zf.setValue(n,t.getData())})])},nI=gh.deviceType.isTouch(),tI=tinymce.util.Tools.resolve("tinymce.util.URI"),eI=["insertContent","setContent","execCommand","close","block","unblock"],oI=function(n){var l=n.backstage,d=n.editor,m=$b(d),e=function(c){var s=c.backstage.shared;return{open:function(n,t){function e(){wM.hide(u),t()}var o=vm(YC({name:"close-alert",text:"OK",primary:!0,align:"end",disabled:!1,icon:on.none()},"cancel",c.backstage)),r=Y_(),i=X_(e,s.providers),u=uu($_({lazySink:function(){return s.getSink()},header:G_(r,i),body:q_(n,s.providers),footer:on.some(K_(J_([],[o.asSpec()]))),onEscape:e,extraClasses:["tox-alert-dialog"],extraBehaviours:[],extraStyles:{},dialogEvents:[lo(cy,e)],eventOrder:{}}));wM.show(u);var a=o.get(u);vg.focus(a)}}}(n),o=function(s){var f=s.backstage.shared;return{open:function(n,t){function e(n){wM.hide(a),t(n)}var o=vm(YC({name:"yes",text:"Yes",primary:!0,align:"end",disabled:!1,icon:on.none()},"submit",s.backstage)),r=YC({name:"no",text:"No",primary:!0,align:"end",disabled:!1,icon:on.none()},"cancel",s.backstage),i=Y_(),u=X_(function(){return e(!1)},f.providers),a=uu($_({lazySink:function(){return f.getSink()},header:G_(i,u),body:q_(n,f.providers),footer:on.some(K_(J_([],[r,o.asSpec()]))),onEscape:function(){return e(!1)},extraClasses:["tox-confirm-dialog"],extraBehaviours:[],extraStyles:{},dialogEvents:[lo(cy,function(){return e(!1)}),lo(fy,function(){return e(!0)})],eventOrder:{}}));wM.show(a);var c=o.get(a);vg.focus(c)}}}(n),r=function(n,e){return FF.openUrl(function(n){var t=sM(n,{closeWindow:function(){wM.hide(t.dialog),e(t.instanceApi)}},d,l);return wM.show(t.dialog),t.instanceApi},n)},i=function(n,i){return FF.open(function(n,t,e){var o=t,r=uM({dataValidator:e,initialData:o,internalDialog:n},{redial:FF.redial,closeWindow:function(){wM.hide(r.dialog),i(r.instanceApi)}},l);return wM.show(r.dialog),r.instanceApi.setData(o),r.instanceApi},n)},u=function(n,c,s,f){return FF.open(function(n,t,e){function o(){return i.on(function(n){cA.refresh(n)})}var r=function(n,t){return et(tt("data",t,n))}(t,e),i=function(){var t=ye(on.none());return{clear:function(){t.set(on.none())},set:function(n){t.set(on.some(n))},isSet:function(){return t.get().isSome()},on:function(n){t.get().each(n)}}}(),u=aM({dataValidator:e,initialData:r,internalDialog:n},{redial:FF.redial,closeWindow:function(){i.on(jg.hide),d.off("ResizeEditor",o),i.clear(),s(u.instanceApi)}},l,f),a=uu(jg.sketch({lazySink:l.shared.getSink,dom:{tag:"div",classes:[]},fireDismissalEventInstead:{},inlineBehaviours:ba(g([Kd("window-manager-inline-events",[lo(Oi(),function(n,t){oo(u.dialog,cy)})])],function(n,t){return t?[]:[cA.config({contextual:{lazyContext:function(){return on.some(xu(we.fromDom(n.getContentAreaContainer())))},fadeInClass:"tox-dialog-dock-fadein",fadeOutClass:"tox-dialog-dock-fadeout",transitionClass:"tox-dialog-dock-transition"},leftAttr:"data-dock-left",topAttr:"data-dock-top",positionAttr:"data-dock-pos",modes:["top"]})]}(d,m)))}));return i.set(a),jg.showWithin(a,c,au(u.dialog),on.some(zr())),m||(cA.refresh(a),d.on("ResizeEditor",o)),u.instanceApi.setData(r),lg.focusIn(u.dialog),u.instanceApi},n)};return{open:function(n,t,e){return t!==undefined&&"toolbar"===t.inline?u(n,l.shared.anchors.toolbar(),e,t.ariaAttrs):t!==undefined&&"cursor"===t.inline?u(n,l.shared.anchors.cursor(),e,t.ariaAttrs):i(n,e)},openUrl:function(n,t){return r(n,t)},alert:function(n,t){e.open(n,function(){t()})},close:function(n){n.close()},confirm:function(n,t){o.open(n,function(n){t(n)})}}};!function mI(){n.add("silver",function(n){var t=hM(n),e=t.uiMothership,o=t.backstage,r=t.renderUI,i=t.getUi;db(n,o.shared);var u=oI({editor:n,backstage:o});return{renderUI:r,getWindowManagerImpl:nn(u),getNotificationManagerImpl:function(){return Kg(0,{backstage:o},e)},ui:i()}})}()}(window);
\ No newline at end of file
diff --git a/website/js/vendor/tinymce/js/tinymce/tinymce.min.js b/website/js/vendor/tinymce/js/tinymce/tinymce.min.js
new file mode 100644 (file)
index 0000000..9f63063
--- /dev/null
@@ -0,0 +1,9 @@
+/**
+ * Copyright (c) Tiny Technologies, Inc. All rights reserved.
+ * Licensed under the LGPL or a commercial license.
+ * For LGPL see License.txt in the project root for license information.
+ * For commercial licenses see https://www.tiny.cloud/
+ *
+ * Version: 5.1.5 (2019-12-19)
+ */
+!function(j){"use strict";function i(){}var q=function(n,r){return function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];return n(r.apply(null,e))}},$=function(e){return function(){return e}},W=function(e){return e};function d(r){for(var o=[],e=1;e<arguments.length;e++)o[e-1]=arguments[e];return function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];var n=o.concat(e);return r.apply(null,n)}}function s(n){return function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];return!n.apply(null,e)}}function e(){return u}var t,c=$(!1),a=$(!0),u=(t={fold:function(e,t){return e()},is:c,isSome:c,isNone:a,getOr:o,getOrThunk:r,getOrDie:function(e){throw new Error(e||"error: getOrDie called on none.")},getOrNull:$(null),getOrUndefined:$(undefined),or:o,orThunk:r,map:e,each:i,bind:e,exists:c,forall:a,filter:e,equals:n,equals_:n,toArray:function(){return[]},toString:$("none()")},Object.freeze&&Object.freeze(t),t);function n(e){return e.isNone()}function r(e){return e()}function o(e){return e}function l(t){return function(e){return function(e){if(null===e)return"null";var t=typeof e;return"object"==t&&(Array.prototype.isPrototypeOf(e)||e.constructor&&"Array"===e.constructor.name)?"array":"object"==t&&(String.prototype.isPrototypeOf(e)||e.constructor&&"String"===e.constructor.name)?"string":t}(e)===t}}function f(e,t){return O.call(e,t)}function h(e,t){return-1<f(e,t)}function C(e,t){for(var n=0,r=e.length;n<r;n++){if(t(e[n],n))return!0}return!1}function z(e,t){for(var n=0,r=e.length;n<r;n++){t(e[n],n)}}function y(e,t){for(var n=[],r=0,o=e.length;r<o;r++){var i=e[r];t(i,r)&&n.push(i)}return n}function m(e,t,n){return function(e,t){for(var n=e.length-1;0<=n;n--){t(e[n],n)}}(e,function(e){n=t(n,e)}),n}function b(e,t,n){return z(e,function(e){n=t(n,e)}),n}function g(e,t){for(var n=0,r=e.length;n<r;n++){var o=e[n];if(t(o,n))return k.some(o)}return k.none()}function p(e,t){for(var n=0,r=e.length;n<r;n++){if(t(e[n],n))return k.some(n)}return k.none()}function v(e,t){return function(e){for(var t=[],n=0,r=e.length;n<r;++n){if(!A(e[n]))throw new Error("Arr.flatten item "+n+" was not an array, input: "+e);H.apply(t,e[n])}return t}(X(e,t))}function w(e,t){for(var n=0,r=e.length;n<r;++n){if(!0!==t(e[n],n))return!1}return!0}function x(e,t){return y(e,function(e){return!h(t,e)})}function E(e){return 0===e.length?k.none():k.some(e[0])}function N(e){return 0===e.length?k.none():k.some(e[e.length-1])}var S=function(n){function e(){return o}function t(e){return e(n)}var r=$(n),o={fold:function(e,t){return t(n)},is:function(e){return n===e},isSome:a,isNone:c,getOr:r,getOrThunk:r,getOrDie:r,getOrNull:r,getOrUndefined:r,or:e,orThunk:e,map:function(e){return S(e(n))},each:function(e){e(n)},bind:t,exists:t,forall:t,filter:function(e){return e(n)?o:u},toArray:function(){return[n]},toString:function(){return"some("+n+")"},equals:function(e){return e.is(n)},equals_:function(e,t){return e.fold(c,function(e){return t(n,e)})}};return o},k={some:S,none:e,from:function(e){return null===e||e===undefined?u:S(e)}},K=l("string"),T=l("object"),A=l("array"),M=l("null"),R=l("boolean"),D=l("function"),_=l("number"),B=Array.prototype.slice,O=Array.prototype.indexOf,H=Array.prototype.push,X=function(e,t){for(var n=e.length,r=new Array(n),o=0;o<n;o++){var i=e[o];r[o]=t(i,o)}return r},Y=function(e,t){for(var n=[],r=[],o=0,i=e.length;o<i;o++){var a=e[o];(t(a,o)?n:r).push(a)}return{pass:n,fail:r}},P=D(Array.from)?Array.from:function(e){return B.call(e)},G=function(){return(G=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var o in t=arguments[n])Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o]);return e}).apply(this,arguments)};function L(t){return function(e){return!!e&&e.nodeType===t}}function V(e){var n=e.map(function(e){return e.toLowerCase()});return function(e){if(e&&e.nodeName){var t=e.nodeName.toLowerCase();return h(n,t)}return!1}}function I(t){return function(e){if(Fe(e)){if(e.contentEditable===t)return!0;if(e.getAttribute("data-mce-contenteditable")===t)return!0}return!1}}function F(e,t){var n=function(e,t){for(var n=0;n<e.length;n++){var r=e[n];if(r.test(t))return r}return undefined}(e,t);if(!n)return{major:0,minor:0};function r(e){return Number(t.replace(n,"$"+e))}return Ze(r(1),r(2))}function U(e,t){return function(){return t===e}}function J(e,t){return function(){return t===e}}function Q(e,t){var n=String(t).toLowerCase();return g(e,function(e){return e.search(n)})}function Z(e,t){return-1!==e.indexOf(t)}function ee(e,t){return function(e,t,n){return""===t||!(e.length<t.length)&&e.substr(n,n+t.length)===t}(e,t,0)}function te(e){return e.replace(/^\s+|\s+$/g,"")}function ne(e){return e.replace(/\s+$/g,"")}function re(t){return function(e){return Z(e,t)}}function oe(){return pt.get()}function ie(e){return e.dom().nodeName.toLowerCase()}function ae(t){return function(e){return function(e){return e.dom().nodeType}(e)===t}}function ue(e,t){for(var n=Et(e),r=0,o=n.length;r<o;r++){var i=n[r];t(e[i],i)}}function se(e,n){return St(e,function(e,t){return{k:t,v:n(e,t)}})}function ce(e,n){var r={},o={};return ue(e,function(e,t){(n(e,t)?r:o)[t]=e}),{t:r,f:o}}function le(e,t){return kt(e,t)?k.from(e[t]):k.none()}function fe(e){return e.style!==undefined&&D(e.style.getPropertyValue)}function de(e){var t=zt(e)?e.dom().parentNode:e.dom();return t!==undefined&&null!==t&&t.ownerDocument.body.contains(t)}function he(e,t,n){if(!(K(n)||R(n)||_(n)))throw j.console.error("Invalid call to Attr.set. Key ",t,":: Value ",n,":: Element ",e),new Error("Attribute value was not simple");e.setAttribute(t,n+"")}function me(e,t){var n=e.dom();ue(t,function(e,t){he(n,t,e)})}function ge(e,t){var n=e.dom().getAttribute(t);return null===n?undefined:n}function pe(e,t){e.dom().removeAttribute(t)}function ve(e,t){var n=e.dom(),r=j.window.getComputedStyle(n).getPropertyValue(t),o=""!==r||de(e)?r:At(n,t);return null===o?undefined:o}function ye(e,t){var n=e.dom(),r=At(n,t);return k.from(r).filter(function(e){return 0<e.length})}function be(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];return function(){for(var n=[],e=0;e<arguments.length;e++)n[e]=arguments[e];if(t.length!==n.length)throw new Error('Wrong number of arguments to struct. Expected "['+t.length+']", got '+n.length+" arguments");var r={};return z(t,function(e,t){r[e]=$(n[t])}),r}}function Ce(e,t,n){return 0!=(e.compareDocumentPosition(t)&n)}function we(e,t){var n=e.dom();if(n.nodeType!==Dt)return!1;var r=n;if(r.matches!==undefined)return r.matches(t);if(r.msMatchesSelector!==undefined)return r.msMatchesSelector(t);if(r.webkitMatchesSelector!==undefined)return r.webkitMatchesSelector(t);if(r.mozMatchesSelector!==undefined)return r.mozMatchesSelector(t);throw new Error("Browser lacks native selectors")}function xe(e){return e.nodeType!==Dt&&e.nodeType!==_t||0===e.childElementCount}function ze(e,t){return e.dom()===t.dom()}function Ee(e){return yt.fromDom(e.dom().ownerDocument)}function Ne(e){return yt.fromDom(e.dom().ownerDocument.defaultView)}function Se(e){return k.from(e.dom().parentNode).map(yt.fromDom)}function ke(e){return k.from(e.dom().previousSibling).map(yt.fromDom)}function Te(e){return k.from(e.dom().nextSibling).map(yt.fromDom)}function Ae(e){return function(e){var t=B.call(e,0);return t.reverse(),t}(Mt(e,ke))}function Me(e){return Mt(e,Te)}function Re(e){return X(e.dom().childNodes,yt.fromDom)}function De(e,t){var n=e.dom().childNodes;return k.from(n[t]).map(yt.fromDom)}function _e(e){return De(e,0)}function Be(e){return De(e,e.dom().childNodes.length-1)}function Oe(e){return g(e,xt)}function He(e,t){return e.children&&h(e.children,t)}var Pe,Le,Ve,Ie,Fe=L(1),Ue=V(["textarea","input"]),je=L(3),qe=L(8),$e=L(9),We=L(11),Ke=V(["br"]),Xe=I("true"),Ye=I("false"),Ge={isText:je,isElement:Fe,isComment:qe,isDocument:$e,isDocumentFragment:We,isBr:Ke,isContentEditableTrue:Xe,isContentEditableFalse:Ye,isRestrictedNode:function(e){return!!e&&!Object.getPrototypeOf(e)},matchNodeNames:V,hasPropValue:function(t,n){return function(e){return Fe(e)&&e[t]===n}},hasAttribute:function(t,e){return function(e){return Fe(e)&&e.hasAttribute(t)}},hasAttributeValue:function(t,n){return function(e){return Fe(e)&&e.getAttribute(t)===n}},matchStyleValues:function(r,e){var o=e.toLowerCase().split(" ");return function(e){var t;if(Fe(e))for(t=0;t<o.length;t++){var n=e.ownerDocument.defaultView.getComputedStyle(e,null);if((n?n.getPropertyValue(r):null)===o[t])return!0}return!1}},isBogus:function(e){return Fe(e)&&e.hasAttribute("data-mce-bogus")},isBogusAll:function(e){return Fe(e)&&"all"===e.getAttribute("data-mce-bogus")},isTable:function(e){return Fe(e)&&"TABLE"===e.tagName},isTextareaOrInput:Ue},Je=function(e){function t(){return n}var n=e;return{get:t,set:function(e){n=e},clone:function(){return Je(t())}}},Qe=function(){return Ze(0,0)},Ze=function(e,t){return{major:e,minor:t}},et={nu:Ze,detect:function(e,t){var n=String(t).toLowerCase();return 0===e.length?Qe():F(e,n)},unknown:Qe},tt="Firefox",nt=function(e){var t=e.current;return{current:t,version:e.version,isEdge:U("Edge",t),isChrome:U("Chrome",t),isIE:U("IE",t),isOpera:U("Opera",t),isFirefox:U(tt,t),isSafari:U("Safari",t)}},rt={unknown:function(){return nt({current:undefined,version:et.unknown()})},nu:nt,edge:$("Edge"),chrome:$("Chrome"),ie:$("IE"),opera:$("Opera"),firefox:$(tt),safari:$("Safari")},ot="Windows",it="Android",at="Solaris",ut="FreeBSD",st=function(e){var t=e.current;return{current:t,version:e.version,isWindows:J(ot,t),isiOS:J("iOS",t),isAndroid:J(it,t),isOSX:J("OSX",t),isLinux:J("Linux",t),isSolaris:J(at,t),isFreeBSD:J(ut,t)}},ct={unknown:function(){return st({current:undefined,version:et.unknown()})},nu:st,windows:$(ot),ios:$("iOS"),android:$(it),linux:$("Linux"),osx:$("OSX"),solaris:$(at),freebsd:$(ut)},lt=function(e,n){return Q(e,n).map(function(e){var t=et.detect(e.versionRegexes,n);return{current:e.name,version:t}})},ft=function(e,n){return Q(e,n).map(function(e){var t=et.detect(e.versionRegexes,n);return{current:e.name,version:t}})},dt=/.*?version\/\ ?([0-9]+)\.([0-9]+).*/,ht=[{name:"Edge",versionRegexes:[/.*?edge\/ ?([0-9]+)\.([0-9]+)$/],search:function(e){return Z(e,"edge/")&&Z(e,"chrome")&&Z(e,"safari")&&Z(e,"applewebkit")}},{name:"Chrome",versionRegexes:[/.*?chrome\/([0-9]+)\.([0-9]+).*/,dt],search:function(e){return Z(e,"chrome")&&!Z(e,"chromeframe")}},{name:"IE",versionRegexes:[/.*?msie\ ?([0-9]+)\.([0-9]+).*/,/.*?rv:([0-9]+)\.([0-9]+).*/],search:function(e){return Z(e,"msie")||Z(e,"trident")}},{name:"Opera",versionRegexes:[dt,/.*?opera\/([0-9]+)\.([0-9]+).*/],search:re("opera")},{name:"Firefox",versionRegexes:[/.*?firefox\/\ ?([0-9]+)\.([0-9]+).*/],search:re("firefox")},{name:"Safari",versionRegexes:[dt,/.*?cpu os ([0-9]+)_([0-9]+).*/],search:function(e){return(Z(e,"safari")||Z(e,"mobile/"))&&Z(e,"applewebkit")}}],mt=[{name:"Windows",search:re("win"),versionRegexes:[/.*?windows\ nt\ ?([0-9]+)\.([0-9]+).*/]},{name:"iOS",search:function(e){return Z(e,"iphone")||Z(e,"ipad")},versionRegexes:[/.*?version\/\ ?([0-9]+)\.([0-9]+).*/,/.*cpu os ([0-9]+)_([0-9]+).*/,/.*cpu iphone os ([0-9]+)_([0-9]+).*/]},{name:"Android",search:re("android"),versionRegexes:[/.*?android\ ?([0-9]+)\.([0-9]+).*/]},{name:"OSX",search:re("os x"),versionRegexes:[/.*?os\ x\ ?([0-9]+)_([0-9]+).*/]},{name:"Linux",search:re("linux"),versionRegexes:[]},{name:"Solaris",search:re("sunos"),versionRegexes:[]},{name:"FreeBSD",search:re("freebsd"),versionRegexes:[]}],gt={browsers:$(ht),oses:$(mt)},pt=Je(function(e,t){var n=gt.browsers(),r=gt.oses(),o=lt(n,e).fold(rt.unknown,rt.nu),i=ft(r,e).fold(ct.unknown,ct.nu);return{browser:o,os:i,deviceType:function(e,t,n,r){var o=e.isiOS()&&!0===/ipad/i.test(n),i=e.isiOS()&&!o,a=e.isiOS()||e.isAndroid(),u=a||r("(pointer:coarse)"),s=o||!i&&a&&r("(min-device-width:768px)"),c=i||a&&!s,l=t.isSafari()&&e.isiOS()&&!1===/safari/i.test(n),f=!c&&!s&&!l;return{isiPad:$(o),isiPhone:$(i),isTablet:$(s),isPhone:$(c),isTouch:$(u),isAndroid:e.isAndroid,isiOS:e.isiOS,isWebView:$(l),isDesktop:$(f)}}(i,o,e,t)}}(j.navigator.userAgent,function(e){return j.window.matchMedia(e).matches})),vt=function(e){if(null===e||e===undefined)throw new Error("Node cannot be null or undefined");return{dom:$(e)}},yt={fromHtml:function(e,t){var n=(t||j.document).createElement("div");if(n.innerHTML=e,!n.hasChildNodes()||1<n.childNodes.length)throw j.console.error("HTML does not have a single root node",e),new Error("HTML must have a single root node");return vt(n.childNodes[0])},fromTag:function(e,t){var n=(t||j.document).createElement(e);return vt(n)},fromText:function(e,t){var n=(t||j.document).createTextNode(e);return vt(n)},fromDom:vt,fromPoint:function(e,t,n){var r=e.dom();return k.from(r.elementFromPoint(t,n)).map(vt)}},bt=(j.Node.ATTRIBUTE_NODE,j.Node.CDATA_SECTION_NODE,j.Node.COMMENT_NODE,j.Node.DOCUMENT_NODE),Ct=(j.Node.DOCUMENT_TYPE_NODE,j.Node.DOCUMENT_FRAGMENT_NODE,j.Node.ELEMENT_NODE),wt=j.Node.TEXT_NODE,xt=(j.Node.PROCESSING_INSTRUCTION_NODE,j.Node.ENTITY_REFERENCE_NODE,j.Node.ENTITY_NODE,j.Node.NOTATION_NODE,"undefined"!=typeof j.window?j.window:Function("return this;")(),ae(Ct)),zt=ae(wt),Et=Object.keys,Nt=Object.hasOwnProperty,St=function(e,r){var o={};return ue(e,function(e,t){var n=r(e,t);o[n.k]=n.v}),o},kt=function(e,t){return Nt.call(e,t)},Tt=function(e,t,n){he(e.dom(),t,n)},At=function(e,t){return fe(e)?e.style.getPropertyValue(t):""},Mt=function(e,t){for(var n=[],r=function(e){return n.push(e),t(e)},o=t(e);(o=o.bind(r)).isSome(););return n},Rt=function(e,t){return Ce(e,t,j.Node.DOCUMENT_POSITION_CONTAINED_BY)},Dt=Ct,_t=bt,Bt=oe().browser.isIE()?function(e,t){return Rt(e.dom(),t.dom())}:function(e,t){var n=e.dom(),r=t.dom();return n!==r&&n.contains(r)},Ot=(be("element","offset"),oe().browser),Ht={getPos:function(e,t,n){var r,o,i=0,a=0,u=e.ownerDocument;if(n=n||e,t){if(n===e&&t.getBoundingClientRect&&"static"===ve(yt.fromDom(e),"position"))return{x:i=(o=t.getBoundingClientRect()).left+(u.documentElement.scrollLeft||e.scrollLeft)-u.documentElement.clientLeft,y:a=o.top+(u.documentElement.scrollTop||e.scrollTop)-u.documentElement.clientTop};for(r=t;r&&r!==n&&r.nodeType&&!He(r,n);)i+=r.offsetLeft||0,a+=r.offsetTop||0,r=r.offsetParent;for(r=t.parentNode;r&&r!==n&&r.nodeType&&!He(r,n);)i-=r.scrollLeft||0,a-=r.scrollTop||0,r=r.parentNode;a+=function(e){return Ot.isFirefox()&&"table"===ie(e)?Oe(Re(e)).filter(function(e){return"caption"===ie(e)}).bind(function(o){return Oe(Me(o)).map(function(e){var t=e.dom().offsetTop,n=o.dom().offsetTop,r=o.dom().offsetHeight;return t<=n?-r:0})}).getOr(0):0}(yt.fromDom(t))}return{x:i,y:a}}},Pt={},Lt={exports:Pt};Pe=undefined,Le=Pt,Ve=Lt,Ie=undefined,function(e){"object"==typeof Le&&void 0!==Ve?Ve.exports=e():"function"==typeof Pe&&Pe.amd?Pe([],e):("undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this).EphoxContactWrapper=e()}(function(){return function l(i,a,u){function s(t,e){if(!a[t]){if(!i[t]){var n="function"==typeof Ie&&Ie;if(!e&&n)return n(t,!0);if(c)return c(t,!0);var r=new Error("Cannot find module '"+t+"'");throw r.code="MODULE_NOT_FOUND",r}var o=a[t]={exports:{}};i[t][0].call(o.exports,function(e){return s(i[t][1][e]||e)},o,o.exports,l,i,a,u)}return a[t].exports}for(var c="function"==typeof Ie&&Ie,e=0;e<u.length;e++)s(u[e]);return s}({1:[function(e,t,n){var r,o,i=t.exports={};function a(){throw new Error("setTimeout has not been defined")}function u(){throw new Error("clearTimeout has not been defined")}function s(e){if(r===setTimeout)return setTimeout(e,0);if((r===a||!r)&&setTimeout)return r=setTimeout,setTimeout(e,0);try{return r(e,0)}catch(t){try{return r.call(null,e,0)}catch(t){return r.call(this,e,0)}}}!function(){try{r="function"==typeof setTimeout?setTimeout:a}catch(e){r=a}try{o="function"==typeof clearTimeout?clearTimeout:u}catch(e){o=u}}();var c,l=[],f=!1,d=-1;function h(){f&&c&&(f=!1,c.length?l=c.concat(l):d=-1,l.length&&m())}function m(){if(!f){var e=s(h);f=!0;for(var t=l.length;t;){for(c=l,l=[];++d<t;)c&&c[d].run();d=-1,t=l.length}c=null,f=!1,function n(e){if(o===clearTimeout)return clearTimeout(e);if((o===u||!o)&&clearTimeout)return o=clearTimeout,clearTimeout(e);try{return o(e)}catch(t){try{return o.call(null,e)}catch(t){return o.call(this,e)}}}(e)}}function g(e,t){this.fun=e,this.array=t}function p(){}i.nextTick=function(e){var t=new Array(arguments.length-1);if(1<arguments.length)for(var n=1;n<arguments.length;n++)t[n-1]=arguments[n];l.push(new g(e,t)),1!==l.length||f||s(m)},g.prototype.run=function(){this.fun.apply(null,this.array)},i.title="browser",i.browser=!0,i.env={},i.argv=[],i.version="",i.versions={},i.on=p,i.addListener=p,i.once=p,i.off=p,i.removeListener=p,i.removeAllListeners=p,i.emit=p,i.prependListener=p,i.prependOnceListener=p,i.listeners=function(e){return[]},i.binding=function(e){throw new Error("process.binding is not supported")},i.cwd=function(){return"/"},i.chdir=function(e){throw new Error("process.chdir is not supported")},i.umask=function(){return 0}},{}],2:[function(e,f,t){(function(t){function r(){}function i(e){if("object"!=typeof this)throw new TypeError("Promises must be constructed via new");if("function"!=typeof e)throw new TypeError("not a function");this._state=0,this._handled=!1,this._value=undefined,this._deferreds=[],l(e,this)}function o(r,o){for(;3===r._state;)r=r._value;0!==r._state?(r._handled=!0,i._immediateFn(function(){var e=1===r._state?o.onFulfilled:o.onRejected;if(null!==e){var t;try{t=e(r._value)}catch(n){return void u(o.promise,n)}a(o.promise,t)}else(1===r._state?a:u)(o.promise,r._value)})):r._deferreds.push(o)}function a(e,t){try{if(t===e)throw new TypeError("A promise cannot be resolved with itself.");if(t&&("object"==typeof t||"function"==typeof t)){var n=t.then;if(t instanceof i)return e._state=3,e._value=t,void s(e);if("function"==typeof n)return void l(function r(e,t){return function(){e.apply(t,arguments)}}(n,t),e)}e._state=1,e._value=t,s(e)}catch(o){u(e,o)}}function u(e,t){e._state=2,e._value=t,s(e)}function s(e){2===e._state&&0===e._deferreds.length&&i._immediateFn(function(){e._handled||i._unhandledRejectionFn(e._value)});for(var t=0,n=e._deferreds.length;t<n;t++)o(e,e._deferreds[t]);e._deferreds=null}function c(e,t,n){this.onFulfilled="function"==typeof e?e:null,this.onRejected="function"==typeof t?t:null,this.promise=n}function l(e,t){var n=!1;try{e(function(e){n||(n=!0,a(t,e))},function(e){n||(n=!0,u(t,e))})}catch(r){if(n)return;n=!0,u(t,r)}}var e,n;e=this,n=setTimeout,i.prototype["catch"]=function(e){return this.then(null,e)},i.prototype.then=function(e,t){var n=new this.constructor(r);return o(this,new c(e,t,n)),n},i.all=function(e){var s=Array.prototype.slice.call(e);return new i(function(o,i){if(0===s.length)return o([]);var a=s.length;function u(t,e){try{if(e&&("object"==typeof e||"function"==typeof e)){var n=e.then;if("function"==typeof n)return void n.call(e,function(e){u(t,e)},i)}s[t]=e,0==--a&&o(s)}catch(r){i(r)}}for(var e=0;e<s.length;e++)u(e,s[e])})},i.resolve=function(t){return t&&"object"==typeof t&&t.constructor===i?t:new i(function(e){e(t)})},i.reject=function(n){return new i(function(e,t){t(n)})},i.race=function(o){return new i(function(e,t){for(var n=0,r=o.length;n<r;n++)o[n].then(e,t)})},i._immediateFn="function"==typeof t?function(e){t(e)}:function(e){n(e,0)},i._unhandledRejectionFn=function(e){"undefined"!=typeof console&&console&&console.warn("Possible Unhandled Promise Rejection:",e)},i._setImmediateFn=function(e){i._immediateFn=e},i._setUnhandledRejectionFn=function(e){i._unhandledRejectionFn=e},void 0!==f&&f.exports?f.exports=i:e.Promise||(e.Promise=i)}).call(this,e("timers").setImmediate)},{timers:3}],3:[function(s,e,c){(function(e,t){var r=s("process/browser.js").nextTick,n=Function.prototype.apply,o=Array.prototype.slice,i={},a=0;function u(e,t){this._id=e,this._clearFn=t}c.setTimeout=function(){return new u(n.call(setTimeout,window,arguments),clearTimeout)},c.setInterval=function(){return new u(n.call(setInterval,window,arguments),clearInterval)},c.clearTimeout=c.clearInterval=function(e){e.close()},u.prototype.unref=u.prototype.ref=function(){},u.prototype.close=function(){this._clearFn.call(window,this._id)},c.enroll=function(e,t){clearTimeout(e._idleTimeoutId),e._idleTimeout=t},c.unenroll=function(e){clearTimeout(e._idleTimeoutId),e._idleTimeout=-1},c._unrefActive=c.active=function(e){clearTimeout(e._idleTimeoutId);var t=e._idleTimeout;0<=t&&(e._idleTimeoutId=setTimeout(function(){e._onTimeout&&e._onTimeout()},t))},c.setImmediate="function"==typeof e?e:function(e){var t=a++,n=!(arguments.length<2)&&o.call(arguments,1);return i[t]=!0,r(function(){i[t]&&(n?e.apply(null,n):e.call(null),c.clearImmediate(t))}),t},c.clearImmediate="function"==typeof t?t:function(e){delete i[e]}}).call(this,s("timers").setImmediate,s("timers").clearImmediate)},{"process/browser.js":1,timers:3}],4:[function(e,t,n){var r=e("promise-polyfill"),o="undefined"!=typeof window?window:Function("return this;")();t.exports={boltExport:o.Promise||r}},{"promise-polyfill":2}]},{},[4])(4)});function Vt(e){j.setTimeout(function(){throw e},0)}function It(i,e){return e(function(n){var r=[],o=0;0===i.length?n([]):z(i,function(e,t){e.get(function(t){return function(e){r[t]=e,++o>=i.length&&n(r)}}(t))})})}var Ft,Ut,jt,qt=Lt.exports.boltExport,$t=function(e){var n=k.none(),t=[],r=function(e){o()?a(e):t.push(e)},o=function(){return n.isSome()},i=function(e){z(e,a)},a=function(t){n.each(function(e){j.setTimeout(function(){t(e)},0)})};return e(function(e){n=k.some(e),i(t),t=[]}),{get:r,map:function(n){return $t(function(t){r(function(e){t(n(e))})})},isReady:o}},Wt={nu:$t,pure:function(t){return $t(function(e){e(t)})}},Kt=function(n){function e(e){n().then(e,Vt)}return{map:function(e){return Kt(function(){return n().then(e)})},bind:function(t){return Kt(function(){return n().then(function(e){return t(e).toPromise()})})},anonBind:function(e){return Kt(function(){return n().then(function(){return e.toPromise()})})},toLazy:function(){return Wt.nu(e)},toCached:function(){var e=null;return Kt(function(){return null===e&&(e=n()),e})},toPromise:n,get:e}},Xt={nu:function(e){return Kt(function(){return new qt(e)})},pure:function(e){return Kt(function(){return qt.resolve(e)})}},Yt=function(e){return It(e,Xt.nu)},Gt=function(n){return{is:function(e){return n===e},isValue:a,isError:c,getOr:$(n),getOrThunk:$(n),getOrDie:$(n),or:function(e){return Gt(n)},orThunk:function(e){return Gt(n)},fold:function(e,t){return t(n)},map:function(e){return Gt(e(n))},mapError:function(e){return Gt(n)},each:function(e){e(n)},bind:function(e){return e(n)},exists:function(e){return e(n)},forall:function(e){return e(n)},toOption:function(){return k.some(n)}}},Jt=function(n){return{is:c,isValue:c,isError:a,getOr:W,getOrThunk:function(e){return e()},getOrDie:function(){return function(e){return function(){throw new Error(e)}}(String(n))()},or:function(e){return e},orThunk:function(e){return e()},fold:function(e,t){return e(n)},map:function(e){return Jt(n)},mapError:function(e){return Jt(e(n))},each:i,bind:function(e){return Jt(n)},exists:c,forall:a,toOption:k.none}},Qt={value:Gt,error:Jt,fromOption:function(e,t){return e.fold(function(){return Jt(t)},Gt)}},Zt=window.Promise?window.Promise:(Ft=Array.isArray||function(e){return"[object Array]"===Object.prototype.toString.call(e)},Ut=tn.immediateFn||"function"==typeof j.setImmediate&&j.setImmediate||function(e){j.setTimeout(e,1)},tn.prototype["catch"]=function(e){return this.then(null,e)},tn.prototype.then=function(n,r){var o=this;return new tn(function(e,t){nn.call(o,new un(n,r,e,t))})},tn.all=function(){var s=Array.prototype.slice.call(1===arguments.length&&Ft(arguments[0])?arguments[0]:arguments);return new tn(function(o,i){if(0===s.length)return o([]);var a=s.length;function u(t,e){try{if(e&&("object"==typeof e||"function"==typeof e)){var n=e.then;if("function"==typeof n)return void n.call(e,function(e){u(t,e)},i)}s[t]=e,0==--a&&o(s)}catch(r){i(r)}}for(var e=0;e<s.length;e++)u(e,s[e])})},tn.resolve=function(t){return t&&"object"==typeof t&&t.constructor===tn?t:new tn(function(e){e(t)})},tn.reject=function(n){return new tn(function(e,t){t(n)})},tn.race=function(o){return new tn(function(e,t){for(var n=0,r=o.length;n<r;n++)o[n].then(e,t)})},tn);function en(e,t){return function(){e.apply(t,arguments)}}function tn(e){if("object"!=typeof this)throw new TypeError("Promises must be constructed via new");if("function"!=typeof e)throw new TypeError("not a function");this._state=null,this._value=null,this._deferreds=[],sn(e,en(rn,this),en(on,this))}function nn(r){var o=this;null!==this._state?Ut(function(){var e=o._state?r.onFulfilled:r.onRejected;if(null!==e){var t;try{t=e(o._value)}catch(n){return void r.reject(n)}r.resolve(t)}else(o._state?r.resolve:r.reject)(o._value)}):this._deferreds.push(r)}function rn(e){try{if(e===this)throw new TypeError("A promise cannot be resolved with itself.");if(e&&("object"==typeof e||"function"==typeof e)){var t=e.then;if("function"==typeof t)return void sn(en(t,e),en(rn,this),en(on,this))}this._state=!0,this._value=e,an.call(this)}catch(n){on.call(this,n)}}function on(e){this._state=!1,this._value=e,an.call(this)}function an(){for(var e=0,t=this._deferreds.length;e<t;e++)nn.call(this,this._deferreds[e]);this._deferreds=null}function un(e,t,n,r){this.onFulfilled="function"==typeof e?e:null,this.onRejected="function"==typeof t?t:null,this.resolve=n,this.reject=r}function sn(e,t,n){var r=!1;try{e(function(e){r||(r=!0,t(e))},function(e){r||(r=!0,n(e))})}catch(o){if(r)return;r=!0,n(o)}}function cn(e,t){return"number"!=typeof t&&(t=0),j.setTimeout(e,t)}function ln(e,t){return"number"!=typeof t&&(t=1),j.setInterval(e,t)}function fn(n,r){var o,e;return(e=function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];j.clearTimeout(o),o=cn(function(){n.apply(this,e)},r)}).stop=function(){j.clearTimeout(o)},e}function dn(e,t,n){var r,o;if(!e)return 0;if(n=n||e,e.length!==undefined){for(r=0,o=e.length;r<o;r++)if(!1===t.call(n,e[r],r,e))return 0}else for(r in e)if(e.hasOwnProperty(r)&&!1===t.call(n,e[r],r,e))return 0;return 1}function hn(e,t,n){var r,o;for(r=0,o=e.length;r<o;r++)if(t.call(n,e[r],r,e))return r;return-1}function mn(e){return null===e||e===undefined?"":(""+e).replace(Tn,"")}function gn(e,t){return t?!("array"!==t||!kn.isArray(e))||typeof e===t:e!==undefined}var pn={requestAnimationFrame:function(e,t){jt?jt.then(e):jt=new Zt(function(e){!function(e,t){var n,r=j.window.requestAnimationFrame,o=["ms","moz","webkit"];for(n=0;n<o.length&&!r;n++)r=j.window[o[n]+"RequestAnimationFrame"];(r=r||function(e){j.window.setTimeout(e,0)})(e,t)}(e,t=t||j.document.body)}).then(e)},setTimeout:cn,setInterval:ln,setEditorTimeout:function(e,t,n){return cn(function(){e.removed||t()},n)},setEditorInterval:function(e,t,n){var r;return r=ln(function(){e.removed?j.clearInterval(r):t()},n)},debounce:fn,throttle:fn,clearInterval:function(e){return j.clearInterval(e)},clearTimeout:function(e){return j.clearTimeout(e)}},vn=j.navigator.userAgent,yn=oe(),bn=yn.browser,Cn=yn.os,wn=yn.deviceType,xn=/WebKit/.test(vn)&&!bn.isEdge(),zn="FormData"in j.window&&"FileReader"in j.window&&"URL"in j.window&&!!j.URL.createObjectURL,En=-1!==vn.indexOf("Windows Phone"),Nn={opera:bn.isOpera(),webkit:xn,ie:!(!bn.isIE()&&!bn.isEdge())&&bn.version.major,gecko:bn.isFirefox(),mac:Cn.isOSX()||Cn.isiOS(),iOS:wn.isiPad()||wn.isiPhone(),android:Cn.isAndroid(),contentEditable:!0,transparentSrc:"data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7",caretAfter:!0,range:j.window.getSelection&&"Range"in j.window,documentMode:bn.isIE()?j.document.documentMode||7:10,fileApi:zn,ceFalse:!0,cacheSuffix:null,container:null,experimentalShadowDom:!1,canHaveCSP:!bn.isIE(),desktop:wn.isDesktop(),windowsPhone:En,browser:{current:bn.current,version:bn.version,isChrome:bn.isChrome,isEdge:bn.isEdge,isFirefox:bn.isFirefox,isIE:bn.isIE,isOpera:bn.isOpera,isSafari:bn.isSafari},os:{current:Cn.current,version:Cn.version,isAndroid:Cn.isAndroid,isFreeBSD:Cn.isFreeBSD,isiOS:Cn.isiOS,isLinux:Cn.isLinux,isOSX:Cn.isOSX,isSolaris:Cn.isSolaris,isWindows:Cn.isWindows},deviceType:{isDesktop:wn.isDesktop,isiPad:wn.isiPad,isiPhone:wn.isiPhone,isPhone:wn.isPhone,isTablet:wn.isTablet,isTouch:wn.isTouch,isWebView:wn.isWebView}},Sn=Array.isArray,kn={isArray:Sn,toArray:function(e){var t,n,r=e;if(!Sn(e))for(r=[],t=0,n=e.length;t<n;t++)r[t]=e[t];return r},each:dn,map:function(n,r){var o=[];return dn(n,function(e,t){o.push(r(e,t,n))}),o},filter:function(n,r){var o=[];return dn(n,function(e,t){r&&!r(e,t,n)||o.push(e)}),o},indexOf:function(e,t){var n,r;if(e)for(n=0,r=e.length;n<r;n++)if(e[n]===t)return n;return-1},reduce:function(e,t,n,r){var o=0;for(arguments.length<3&&(n=e[0]);o<e.length;o++)n=t.call(r,n,e[o],o);return n},findIndex:hn,find:function(e,t,n){var r=hn(e,t,n);return-1!==r?e[r]:undefined},last:function(e){return e[e.length-1]}},Tn=/^\s*|\s*$/g,An=function(e,n,r,o){o=o||this,e&&(r&&(e=e[r]),kn.each(e,function(e,t){if(!1===n.call(o,e,t,r))return!1;An(e,n,r,o)}))},Mn={trim:mn,isArray:kn.isArray,is:gn,toArray:kn.toArray,makeMap:function(e,t,n){var r;for(t=t||",","string"==typeof(e=e||[])&&(e=e.split(t)),n=n||{},r=e.length;r--;)n[e[r]]={};return n},each:kn.each,map:kn.map,grep:kn.filter,inArray:kn.indexOf,hasOwn:function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},extend:function(e,t){for(var n,r,o,i=[],a=2;a<arguments.length;a++)i[a-2]=arguments[a];var u,s=arguments;for(n=1,r=s.length;n<r;n++)for(o in t=s[n])t.hasOwnProperty(o)&&(u=t[o])!==undefined&&(e[o]=u);return e},create:function(e,t,n){var r,o,i,a,u,s=this,c=0;if(e=/^((static) )?([\w.]+)(:([\w.]+))?/.exec(e),i=e[3].match(/(^|\.)(\w+)$/i)[2],!(o=s.createNS(e[3].replace(/\.\w+$/,""),n))[i]){if("static"===e[2])return o[i]=t,void(this.onCreate&&this.onCreate(e[2],e[3],o[i]));t[i]||(t[i]=function(){},c=1),o[i]=t[i],s.extend(o[i].prototype,t),e[5]&&(r=s.resolve(e[5]).prototype,a=e[5].match(/\.(\w+)$/i)[1],u=o[i],o[i]=c?function(){return r[a].apply(this,arguments)}:function(){return this.parent=r[a],u.apply(this,arguments)},o[i].prototype[i]=o[i],s.each(r,function(e,t){o[i].prototype[t]=r[t]}),s.each(t,function(e,t){r[t]?o[i].prototype[t]=function(){return this.parent=r[t],e.apply(this,arguments)}:t!==i&&(o[i].prototype[t]=e)})),s.each(t["static"],function(e,t){o[i][t]=e})}},walk:An,createNS:function(e,t){var n,r;for(t=t||j.window,e=e.split("."),n=0;n<e.length;n++)t[r=e[n]]||(t[r]={}),t=t[r];return t},resolve:function(e,t){var n,r;for(t=t||j.window,n=0,r=(e=e.split(".")).length;n<r&&(t=t[e[n]]);n++);return t},explode:function(e,t){return!e||gn(e,"array")?e:kn.map(e.split(t||","),mn)},_addCacheSuffix:function(e){var t=Nn.cacheSuffix;return t&&(e+=(-1===e.indexOf("?")?"?":"&")+t),e}};function Rn(t){var n;return function(e){return(n=n||function(e,t){for(var n={},r=0,o=e.length;r<o;r++){var i=e[r];n[String(i)]=t(i,r)}return n}(t,$(!0))).hasOwnProperty(ie(e))}}function Dn(e){return xt(e)&&!Vn(e)}function _n(e){return xt(e)&&"br"===ie(e)}function Bn(e){return e&&"SPAN"===e.tagName&&"bookmark"===e.getAttribute("data-mce-type")}var On,Hn,Pn,Ln=Rn(["h1","h2","h3","h4","h5","h6"]),Vn=Rn(["article","aside","details","div","dt","figcaption","footer","form","fieldset","header","hgroup","html","main","nav","section","summary","body","p","dl","multicol","dd","figure","address","center","blockquote","h1","h2","h3","h4","h5","h6","listing","xmp","pre","plaintext","menu","dir","ul","ol","li","hr","table","tbody","thead","tfoot","th","tr","td","caption"]),In=Rn(["h1","h2","h3","h4","h5","h6","p","div","address","pre","form","blockquote","center","dir","fieldset","header","footer","article","section","hgroup","aside","nav","figure"]),Fn=Rn(["ul","ol","dl"]),Un=Rn(["li","dd","dt"]),jn=Rn(["area","base","basefont","br","col","frame","hr","img","input","isindex","link","meta","param","embed","source","wbr","track"]),qn=Rn(["thead","tbody","tfoot"]),$n=Rn(["td","th"]),Wn=Rn(["pre","script","textarea","style"]),Kn=function(e,t){var n,r=t.childNodes;if(!Ge.isElement(t)||!Bn(t)){for(n=r.length-1;0<=n;n--)Kn(e,r[n]);if(!1===Ge.isDocument(t)){if(Ge.isText(t)&&0<t.nodeValue.length){var o=Mn.trim(t.nodeValue).length;if(e.isBlock(t.parentNode)||0<o)return;if(0===o&&function(e){var t=e.previousSibling&&"SPAN"===e.previousSibling.nodeName,n=e.nextSibling&&"SPAN"===e.nextSibling.nodeName;return t&&n}(t))return}else if(Ge.isElement(t)&&(1===(r=t.childNodes).length&&Bn(r[0])&&t.parentNode.insertBefore(r[0],t),r.length||jn(yt.fromDom(t))))return;e.remove(t)}return t}},Xn={trimNode:Kn},Yn=Mn.makeMap,Gn=/[&<>\"\u0060\u007E-\uD7FF\uE000-\uFFEF]|[\uD800-\uDBFF][\uDC00-\uDFFF]/g,Jn=/[<>&\u007E-\uD7FF\uE000-\uFFEF]|[\uD800-\uDBFF][\uDC00-\uDFFF]/g,Qn=/[<>&\"\']/g,Zn=/&#([a-z0-9]+);?|&([a-z0-9]+);/gi,er={128:"\u20ac",130:"\u201a",131:"\u0192",132:"\u201e",133:"\u2026",134:"\u2020",135:"\u2021",136:"\u02c6",137:"\u2030",138:"\u0160",139:"\u2039",140:"\u0152",142:"\u017d",145:"\u2018",146:"\u2019",147:"\u201c",148:"\u201d",149:"\u2022",150:"\u2013",151:"\u2014",152:"\u02dc",153:"\u2122",154:"\u0161",155:"\u203a",156:"\u0153",158:"\u017e",159:"\u0178"};Hn={'"':"&quot;","'":"&#39;","<":"&lt;",">":"&gt;","&":"&amp;","`":"&#96;"},Pn={"&lt;":"<","&gt;":">","&amp;":"&","&quot;":'"',"&apos;":"'"};function tr(e,t){var n,r,o,i={};if(e){for(e=e.split(","),t=t||10,n=0;n<e.length;n+=2)r=String.fromCharCode(parseInt(e[n],t)),Hn[r]||(o="&"+e[n+1]+";",i[r]=o,i[o]=r);return i}}On=tr("50,nbsp,51,iexcl,52,cent,53,pound,54,curren,55,yen,56,brvbar,57,sect,58,uml,59,copy,5a,ordf,5b,laquo,5c,not,5d,shy,5e,reg,5f,macr,5g,deg,5h,plusmn,5i,sup2,5j,sup3,5k,acute,5l,micro,5m,para,5n,middot,5o,cedil,5p,sup1,5q,ordm,5r,raquo,5s,frac14,5t,frac12,5u,frac34,5v,iquest,60,Agrave,61,Aacute,62,Acirc,63,Atilde,64,Auml,65,Aring,66,AElig,67,Ccedil,68,Egrave,69,Eacute,6a,Ecirc,6b,Euml,6c,Igrave,6d,Iacute,6e,Icirc,6f,Iuml,6g,ETH,6h,Ntilde,6i,Ograve,6j,Oacute,6k,Ocirc,6l,Otilde,6m,Ouml,6n,times,6o,Oslash,6p,Ugrave,6q,Uacute,6r,Ucirc,6s,Uuml,6t,Yacute,6u,THORN,6v,szlig,70,agrave,71,aacute,72,acirc,73,atilde,74,auml,75,aring,76,aelig,77,ccedil,78,egrave,79,eacute,7a,ecirc,7b,euml,7c,igrave,7d,iacute,7e,icirc,7f,iuml,7g,eth,7h,ntilde,7i,ograve,7j,oacute,7k,ocirc,7l,otilde,7m,ouml,7n,divide,7o,oslash,7p,ugrave,7q,uacute,7r,ucirc,7s,uuml,7t,yacute,7u,thorn,7v,yuml,ci,fnof,sh,Alpha,si,Beta,sj,Gamma,sk,Delta,sl,Epsilon,sm,Zeta,sn,Eta,so,Theta,sp,Iota,sq,Kappa,sr,Lambda,ss,Mu,st,Nu,su,Xi,sv,Omicron,t0,Pi,t1,Rho,t3,Sigma,t4,Tau,t5,Upsilon,t6,Phi,t7,Chi,t8,Psi,t9,Omega,th,alpha,ti,beta,tj,gamma,tk,delta,tl,epsilon,tm,zeta,tn,eta,to,theta,tp,iota,tq,kappa,tr,lambda,ts,mu,tt,nu,tu,xi,tv,omicron,u0,pi,u1,rho,u2,sigmaf,u3,sigma,u4,tau,u5,upsilon,u6,phi,u7,chi,u8,psi,u9,omega,uh,thetasym,ui,upsih,um,piv,812,bull,816,hellip,81i,prime,81j,Prime,81u,oline,824,frasl,88o,weierp,88h,image,88s,real,892,trade,89l,alefsym,8cg,larr,8ch,uarr,8ci,rarr,8cj,darr,8ck,harr,8dl,crarr,8eg,lArr,8eh,uArr,8ei,rArr,8ej,dArr,8ek,hArr,8g0,forall,8g2,part,8g3,exist,8g5,empty,8g7,nabla,8g8,isin,8g9,notin,8gb,ni,8gf,prod,8gh,sum,8gi,minus,8gn,lowast,8gq,radic,8gt,prop,8gu,infin,8h0,ang,8h7,and,8h8,or,8h9,cap,8ha,cup,8hb,int,8hk,there4,8hs,sim,8i5,cong,8i8,asymp,8j0,ne,8j1,equiv,8j4,le,8j5,ge,8k2,sub,8k3,sup,8k4,nsub,8k6,sube,8k7,supe,8kl,oplus,8kn,otimes,8l5,perp,8m5,sdot,8o8,lceil,8o9,rceil,8oa,lfloor,8ob,rfloor,8p9,lang,8pa,rang,9ea,loz,9j0,spades,9j3,clubs,9j5,hearts,9j6,diams,ai,OElig,aj,oelig,b0,Scaron,b1,scaron,bo,Yuml,m6,circ,ms,tilde,802,ensp,803,emsp,809,thinsp,80c,zwnj,80d,zwj,80e,lrm,80f,rlm,80j,ndash,80k,mdash,80o,lsquo,80p,rsquo,80q,sbquo,80s,ldquo,80t,rdquo,80u,bdquo,810,dagger,811,Dagger,81g,permil,81p,lsaquo,81q,rsaquo,85c,euro",32);function nr(e,t){return e.replace(t?Gn:Jn,function(e){return Hn[e]||e})}function rr(e,t){return e.replace(t?Gn:Jn,function(e){return 1<e.length?"&#"+(1024*(e.charCodeAt(0)-55296)+(e.charCodeAt(1)-56320)+65536)+";":Hn[e]||"&#"+e.charCodeAt(0)+";"})}function or(e,t,n){return n=n||On,e.replace(t?Gn:Jn,function(e){return Hn[e]||n[e]||e})}var ir={encodeRaw:nr,encodeAllRaw:function(e){return(""+e).replace(Qn,function(e){return Hn[e]||e})},encodeNumeric:rr,encodeNamed:or,getEncodeFunc:function(e,t){var n=tr(t)||On,r=Yn(e.replace(/\+/g,","));return r.named&&r.numeric?function(e,t){return e.replace(t?Gn:Jn,function(e){return Hn[e]!==undefined?Hn[e]:n[e]!==undefined?n[e]:1<e.length?"&#"+(1024*(e.charCodeAt(0)-55296)+(e.charCodeAt(1)-56320)+65536)+";":"&#"+e.charCodeAt(0)+";"})}:r.named?t?function(e,t){return or(e,t,n)}:or:r.numeric?rr:nr},decode:function(e){return e.replace(Zn,function(e,t){return t?65535<(t="x"===t.charAt(0).toLowerCase()?parseInt(t.substr(1),16):parseInt(t,10))?(t-=65536,String.fromCharCode(55296+(t>>10),56320+(1023&t))):er[t]||String.fromCharCode(t):Pn[e]||On[e]||function(e){var t;return(t=yt.fromTag("div").dom()).innerHTML=e,t.textContent||t.innerText||e}(e)})}},ar={},ur={},sr=Mn.makeMap,cr=Mn.each,lr=Mn.extend,fr=Mn.explode,dr=Mn.inArray,hr=function(e,t){return(e=Mn.trim(e))?e.split(t||" "):[]},mr=function(e){function t(e,t,n){function r(e,t){var n,r,o={};for(n=0,r=e.length;n<r;n++)o[e[n]]=t||{};return o}var o,i,a;for(t=t||"","string"==typeof(n=n||[])&&(n=hr(n)),o=(e=hr(e)).length;o--;)a={attributes:r(i=hr([u,t].join(" "))),attributesOrder:i,children:r(n,ur)},c[e[o]]=a}function n(e,t){var n,r,o,i;for(n=(e=hr(e)).length,t=hr(t);n--;)for(r=c[e[n]],o=0,i=t.length;o<i;o++)r.attributes[t[o]]={},r.attributesOrder.push(t[o])}var u,r,o,i,a,s,c={};return ar[e]?ar[e]:(u="id accesskey class dir lang style tabindex title role",r="address blockquote div dl fieldset form h1 h2 h3 h4 h5 h6 hr menu ol p pre table ul",o="a abbr b bdo br button cite code del dfn em embed i iframe img input ins kbd label map noscript object q s samp script select small span strong sub sup textarea u var #text #comment","html4"!==e&&(u+=" contenteditable contextmenu draggable dropzone hidden spellcheck translate",r+=" article aside details dialog figure main header footer hgroup section nav",o+=" audio canvas command datalist mark meter output picture progress time wbr video ruby bdi keygen"),"html5-strict"!==e&&(u+=" xml:lang",o=[o,s="acronym applet basefont big font strike tt"].join(" "),cr(hr(s),function(e){t(e,"",o)}),r=[r,a="center dir isindex noframes"].join(" "),i=[r,o].join(" "),cr(hr(a),function(e){t(e,"",i)})),i=i||[r,o].join(" "),t("html","manifest","head body"),t("head","","base command link meta noscript script style title"),t("title hr noscript br"),t("base","href target"),t("link","href rel media hreflang type sizes hreflang"),t("meta","name http-equiv content charset"),t("style","media type scoped"),t("script","src async defer type charset"),t("body","onafterprint onbeforeprint onbeforeunload onblur onerror onfocus onhashchange onload onmessage onoffline ononline onpagehide onpageshow onpopstate onresize onscroll onstorage onunload",i),t("address dt dd div caption","",i),t("h1 h2 h3 h4 h5 h6 pre p abbr code var samp kbd sub sup i b u bdo span legend em strong small s cite dfn","",o),t("blockquote","cite",i),t("ol","reversed start type","li"),t("ul","","li"),t("li","value",i),t("dl","","dt dd"),t("a","href target rel media hreflang type",o),t("q","cite",o),t("ins del","cite datetime",i),t("img","src sizes srcset alt usemap ismap width height"),t("iframe","src name width height",i),t("embed","src type width height"),t("object","data type typemustmatch name usemap form width height",[i,"param"].join(" ")),t("param","name value"),t("map","name",[i,"area"].join(" ")),t("area","alt coords shape href target rel media hreflang type"),t("table","border","caption colgroup thead tfoot tbody tr"+("html4"===e?" col":"")),t("colgroup","span","col"),t("col","span"),t("tbody thead tfoot","","tr"),t("tr","","td th"),t("td","colspan rowspan headers",i),t("th","colspan rowspan headers scope abbr",i),t("form","accept-charset action autocomplete enctype method name novalidate target",i),t("fieldset","disabled form name",[i,"legend"].join(" ")),t("label","form for",o),t("input","accept alt autocomplete checked dirname disabled form formaction formenctype formmethod formnovalidate formtarget height list max maxlength min multiple name pattern readonly required size src step type value width"),t("button","disabled form formaction formenctype formmethod formnovalidate formtarget name type value","html4"===e?i:o),t("select","disabled form multiple name required size","option optgroup"),t("optgroup","disabled label","option"),t("option","disabled label selected value"),t("textarea","cols dirname disabled form maxlength name readonly required rows wrap"),t("menu","type label",[i,"li"].join(" ")),t("noscript","",i),"html4"!==e&&(t("wbr"),t("ruby","",[o,"rt rp"].join(" ")),t("figcaption","",i),t("mark rt rp summary bdi","",o),t("canvas","width height",i),t("video","src crossorigin poster preload autoplay mediagroup loop muted controls width height buffered",[i,"track source"].join(" ")),t("audio","src crossorigin preload autoplay mediagroup loop muted controls buffered volume",[i,"track source"].join(" ")),t("picture","","img source"),t("source","src srcset type media sizes"),t("track","kind src srclang label default"),t("datalist","",[o,"option"].join(" ")),t("article section nav aside main header footer","",i),t("hgroup","","h1 h2 h3 h4 h5 h6"),t("figure","",[i,"figcaption"].join(" ")),t("time","datetime",o),t("dialog","open",i),t("command","type label icon disabled checked radiogroup command"),t("output","for form name",o),t("progress","value max",o),t("meter","value min max low high optimum",o),t("details","open",[i,"summary"].join(" ")),t("keygen","autofocus challenge disabled form keytype name")),"html5-strict"!==e&&(n("script","language xml:space"),n("style","xml:space"),n("object","declare classid code codebase codetype archive standby align border hspace vspace"),n("embed","align name hspace vspace"),n("param","valuetype type"),n("a","charset name rev shape coords"),n("br","clear"),n("applet","codebase archive code object alt name width height align hspace vspace"),n("img","name longdesc align border hspace vspace"),n("iframe","longdesc frameborder marginwidth marginheight scrolling align"),n("font basefont","size color face"),n("input","usemap align"),n("select","onchange"),n("textarea"),n("h1 h2 h3 h4 h5 h6 div p legend caption","align"),n("ul","type compact"),n("li","type"),n("ol dl menu dir","compact"),n("pre","width xml:space"),n("hr","align noshade size width"),n("isindex","prompt"),n("table","summary width frame rules cellspacing cellpadding align bgcolor"),n("col","width align char charoff valign"),n("colgroup","width align char charoff valign"),n("thead","align char charoff valign"),n("tr","align char charoff valign bgcolor"),n("th","axis align char charoff valign nowrap bgcolor width height"),n("form","accept"),n("td","abbr axis scope align char charoff valign nowrap bgcolor width height"),n("tfoot","align char charoff valign"),n("tbody","align char charoff valign"),n("area","nohref"),n("body","background bgcolor text link vlink alink")),"html4"!==e&&(n("input button select textarea","autofocus"),n("input textarea","placeholder"),n("a","download"),n("link script img","crossorigin"),n("iframe","sandbox seamless allowfullscreen")),cr(hr("a form meter progress dfn"),function(e){c[e]&&delete c[e].children[e]}),delete c.caption.children.table,delete c.script,ar[e]=c)},gr=function(e,n){var r;return e&&(r={},"string"==typeof e&&(e={"*":e}),cr(e,function(e,t){r[t]=r[t.toUpperCase()]="map"===n?sr(e,/[, ]/):fr(e,/[, ]/)})),r};function pr(i){function e(e,t,n){var r=i[e];return r?r=sr(r,/[, ]/,sr(r.toUpperCase(),/[, ]/)):(r=ar[e])||(r=sr(t," ",sr(t.toUpperCase()," ")),r=lr(r,n),ar[e]=r),r}var t,n,r,o,a,u,s,c,l,f,d,h,m,z={},g={},E=[],p={},v={};r=mr((i=i||{}).schema),!1===i.verify_html&&(i.valid_elements="*[*]"),t=gr(i.valid_styles),n=gr(i.invalid_styles,"map"),c=gr(i.valid_classes,"map"),o=e("whitespace_elements","pre script noscript style textarea video audio iframe object code"),a=e("self_closing_elements","colgroup dd dt li option p td tfoot th thead tr"),u=e("short_ended_elements","area base basefont br col frame hr img input isindex link meta param embed source wbr track"),s=e("boolean_attributes","checked compact declare defer disabled ismap multiple nohref noresize noshade nowrap readonly selected autoplay loop controls"),f=e("non_empty_elements","td th iframe video audio object script pre code",u),d=e("move_caret_before_on_enter_elements","table",f),h=e("text_block_elements","h1 h2 h3 h4 h5 h6 p div address pre form blockquote center dir fieldset header footer article section hgroup aside main nav figure"),l=e("block_elements","hr table tbody thead tfoot th tr td li ol ul caption dl dt dd noscript menu isindex option datalist select optgroup figcaption details summary",h),m=e("text_inline_elements","span strong b em i font strike u var cite dfn code mark q sup sub samp"),cr((i.special||"script noscript noframes noembed title style textarea xmp").split(" "),function(e){v[e]=new RegExp("</"+e+"[^>]*>","gi")});function N(e){return new RegExp("^"+e.replace(/([?+*])/g,".$1")+"$")}function y(e){var t,n,r,o,i,a,u,s,c,l,f,d,h,m,g,p,v,y,b,C=/^([#+\-])?([^\[!\/]+)(?:\/([^\[!]+))?(?:(!?)\[([^\]]+)\])?$/,w=/^([!\-])?(\w+[\\:]:\w+|[^=:<]+)?(?:([=:<])(.*))?$/,x=/[*?+]/;if(e)for(e=hr(e,","),z["@"]&&(p=z["@"].attributes,v=z["@"].attributesOrder),t=0,n=e.length;t<n;t++)if(i=C.exec(e[t])){if(m=i[1],c=i[2],g=i[3],s=i[5],a={attributes:d={},attributesOrder:h=[]},"#"===m&&(a.paddEmpty=!0),"-"===m&&(a.removeEmpty=!0),"!"===i[4]&&(a.removeEmptyAttrs=!0),p){for(y in p)d[y]=p[y];h.push.apply(h,v)}if(s)for(r=0,o=(s=hr(s,"|")).length;r<o;r++)if(i=w.exec(s[r])){if(u={},f=i[1],l=i[2].replace(/[\\:]:/g,":"),m=i[3],b=i[4],"!"===f&&(a.attributesRequired=a.attributesRequired||[],a.attributesRequired.push(l),u.required=!0),"-"===f){delete d[l],h.splice(dr(h,l),1);continue}m&&("="===m&&(a.attributesDefault=a.attributesDefault||[],a.attributesDefault.push({name:l,value:b}),u.defaultValue=b),":"===m&&(a.attributesForced=a.attributesForced||[],a.attributesForced.push({name:l,value:b}),u.forcedValue=b),"<"===m&&(u.validValues=sr(b,"?"))),x.test(l)?(a.attributePatterns=a.attributePatterns||[],u.pattern=N(l),a.attributePatterns.push(u)):(d[l]||h.push(l),d[l]=u)}p||"@"!==c||(p=d,v=h),g&&(a.outputName=c,z[g]=a),x.test(c)?(a.pattern=N(c),E.push(a)):z[c]=a}}function b(e){z={},E=[],y(e),cr(r,function(e,t){g[t]=e.children})}function C(e){var a=/^(~)?(.+)$/;e&&(ar.text_block_elements=ar.block_elements=null,cr(hr(e,","),function(e){var t=a.exec(e),n="~"===t[1],r=n?"span":"div",o=t[2];if(g[o]=g[r],p[o]=r,n||(l[o.toUpperCase()]={},l[o]={}),!z[o]){var i=z[r];delete(i=lr({},i)).removeEmptyAttrs,delete i.removeEmpty,z[o]=i}cr(g,function(e,t){e[r]&&(g[t]=e=lr({},g[t]),e[o]=e[r])})}))}function w(e){var o=/^([+\-]?)(\w+)\[([^\]]+)\]$/;ar[i.schema]=null,e&&cr(hr(e,","),function(e){var t,n,r=o.exec(e);r&&(n=r[1],t=n?g[r[2]]:g[r[2]]={"#comment":{}},t=g[r[2]],cr(hr(r[3],"|"),function(e){"-"===n?delete t[e]:t[e]={}}))})}function x(e){var t,n=z[e];if(n)return n;for(t=E.length;t--;)if((n=E[t]).pattern.test(e))return n}i.valid_elements?b(i.valid_elements):(cr(r,function(e,t){z[t]={attributes:e.attributes,attributesOrder:e.attributesOrder},g[t]=e.children}),"html5"!==i.schema&&cr(hr("strong/b em/i"),function(e){e=hr(e,"/"),z[e[1]].outputName=e[0]}),cr(hr("ol ul sub sup blockquote span font a table tbody tr strong em b i"),function(e){z[e]&&(z[e].removeEmpty=!0)}),cr(hr("p h1 h2 h3 h4 h5 h6 th td pre div address caption li"),function(e){z[e].paddEmpty=!0}),cr(hr("span"),function(e){z[e].removeEmptyAttrs=!0})),C(i.custom_elements),w(i.valid_children),y(i.extended_valid_elements),w("+ol[ul|ol],+ul[ul|ol]"),cr({dd:"dl",dt:"dl",li:"ul ol",td:"tr",th:"tr",tr:"tbody thead tfoot",tbody:"table",thead:"table",tfoot:"table",legend:"fieldset",area:"map",param:"video audio object"},function(e,t){z[t]&&(z[t].parentsRequired=hr(e))}),i.invalid_elements&&cr(fr(i.invalid_elements),function(e){z[e]&&delete z[e]}),x("span")||y("span[!data-mce-type|*]");return{children:g,elements:z,getValidStyles:function(){return t},getValidClasses:function(){return c},getBlockElements:function(){return l},getInvalidStyles:function(){return n},getShortEndedElements:function(){return u},getTextBlockElements:function(){return h},getTextInlineElements:function(){return m},getBoolAttrs:function(){return s},getElementRule:x,getSelfClosingElements:function(){return a},getNonEmptyElements:function(){return f},getMoveCaretBeforeOnEnterElements:function(){return d},getWhiteSpaceElements:function(){return o},getSpecialElements:function(){return v},isValidChild:function(e,t){var n=g[e.toLowerCase()];return!(!n||!n[t.toLowerCase()])},isValid:function(e,t){var n,r,o=x(e);if(o){if(!t)return!0;if(o.attributes[t])return!0;if(n=o.attributePatterns)for(r=n.length;r--;)if(n[r].pattern.test(e))return!0}return!1},getCustomElements:function(){return p},addValidElements:y,setValidElements:b,addCustomElements:C,addValidChildren:w}}function vr(e,t,n,r){function o(e){return 1<(e=parseInt(e,10).toString(16)).length?e:"0"+e}return"#"+o(t)+o(n)+o(r)}function yr(e,t,n,r){e.addEventListener?e.addEventListener(t,n,r||!1):e.attachEvent&&e.attachEvent("on"+t,n)}function br(e,t,n,r){e.removeEventListener?e.removeEventListener(t,n,r||!1):e.detachEvent&&e.detachEvent("on"+t,n)}function Cr(e,t){var n,r=t||{};for(n in e)Er[n]||(r[n]=e[n]);if(r.target||(r.target=r.srcElement||j.document),Nn.experimentalShadowDom&&(r.target=function(e,t){if(e.composedPath){var n=e.composedPath();if(n&&0<n.length)return n[0]}return t}(e,r.target)),e&&zr.test(e.type)&&e.pageX===undefined&&e.clientX!==undefined){var o=r.target.ownerDocument||j.document,i=o.documentElement,a=o.body;r.pageX=e.clientX+(i&&i.scrollLeft||a&&a.scrollLeft||0)-(i&&i.clientLeft||a&&a.clientLeft||0),r.pageY=e.clientY+(i&&i.scrollTop||a&&a.scrollTop||0)-(i&&i.clientTop||a&&a.clientTop||0)}return r.preventDefault=function(){r.isDefaultPrevented=Sr,e&&(e.preventDefault?e.preventDefault():e.returnValue=!1)},r.stopPropagation=function(){r.isPropagationStopped=Sr,e&&(e.stopPropagation?e.stopPropagation():e.cancelBubble=!0)},!(r.stopImmediatePropagation=function(){r.isImmediatePropagationStopped=Sr,r.stopPropagation()})===function(e){return e.isDefaultPrevented===Sr||e.isDefaultPrevented===Nr}(r)&&(r.isDefaultPrevented=Nr,r.isPropagationStopped=Nr,r.isImmediatePropagationStopped=Nr),"undefined"==typeof r.metaKey&&(r.metaKey=!1),r}function wr(e,t,n){var r=e.document,o={type:"ready"};if(n.domLoaded)t(o);else{var i=function(){br(e,"DOMContentLoaded",i),br(e,"load",i),n.domLoaded||(n.domLoaded=!0,t(o))};"complete"===r.readyState||"interactive"===r.readyState&&r.body?i():yr(e,"DOMContentLoaded",i),yr(e,"load",i)}}var xr=function(b,e){var C,t,c,l,w=/rgb\s*\(\s*([0-9]+)\s*,\s*([0-9]+)\s*,\s*([0-9]+)\s*\)/gi,x=/(?:url(?:(?:\(\s*\"([^\"]+)\"\s*\))|(?:\(\s*\'([^\']+)\'\s*\))|(?:\(\s*([^)\s]+)\s*\))))|(?:\'([^\']+)\')|(?:\"([^\"]+)\")/gi,z=/\s*([^:]+):\s*([^;]+);?/g,E=/\s+$/,N={},S="\ufeff";for(b=b||{},e&&(c=e.getValidStyles(),l=e.getInvalidStyles()),t=("\\\" \\' \\; \\: ; : "+S).split(" "),C=0;C<t.length;C++)N[t[C]]=S+C,N[S+C]=t[C];return{toHex:function(e){return e.replace(w,vr)},parse:function(e){function t(e,t,n){var r,o,i,a;if((r=p[e+"-top"+t])&&(o=p[e+"-right"+t])&&(i=p[e+"-bottom"+t])&&(a=p[e+"-left"+t])){var u=[r,o,i,a];for(C=u.length-1;C--&&u[C]===u[C+1];);-1<C&&n||(p[e+t]=-1===C?u[0]:u.join(" "),delete p[e+"-top"+t],delete p[e+"-right"+t],delete p[e+"-bottom"+t],delete p[e+"-left"+t])}}function n(e){var t,n=p[e];if(n){for(t=(n=n.split(" ")).length;t--;)if(n[t]!==n[0])return!1;return p[e]=n[0],!0}}function r(e){return f=!0,N[e]}function u(e,t){return f&&(e=e.replace(/\uFEFF[0-9]/g,function(e){return N[e]})),t||(e=e.replace(/\\([\'\";:])/g,"$1")),e}function o(e){return String.fromCharCode(parseInt(e.slice(1),16))}function i(e){return e.replace(/\\[0-9a-f]+/gi,o)}function a(e,t,n,r,o,i){if(o=o||i)return"'"+(o=u(o)).replace(/\'/g,"\\'")+"'";if(t=u(t||n||r),!b.allow_script_urls){var a=t.replace(/[\s\r\n]+/g,"");if(/(java|vb)script:/i.test(a))return"";if(!b.allow_svg_data_urls&&/^data:image\/svg/i.test(a))return""}return v&&(t=v.call(y,t,"style")),"url('"+t.replace(/\'/g,"\\'")+"')"}var s,c,l,f,d,h,m,g,p={},v=b.url_converter,y=b.url_converter_scope||this;if(e){for(e=(e=e.replace(/[\u0000-\u001F]/g,"")).replace(/\\[\"\';:\uFEFF]/g,r).replace(/\"[^\"]+\"|\'[^\']+\'/g,function(e){return e.replace(/[;:]/g,r)});s=z.exec(e);)if(z.lastIndex=s.index+s[0].length,c=s[1].replace(E,"").toLowerCase(),l=s[2].replace(E,""),c&&l){if(c=i(c),l=i(l),-1!==c.indexOf(S)||-1!==c.indexOf('"'))continue;if(!b.allow_script_urls&&("behavior"===c||/expression\s*\(|\/\*|\*\//.test(l)))continue;"font-weight"===c&&"700"===l?l="bold":"color"!==c&&"background-color"!==c||(l=l.toLowerCase()),l=(l=l.replace(w,vr)).replace(x,a),p[c]=f?u(l,!0):l}t("border","",!0),t("border","-width"),t("border","-color"),t("border","-style"),t("padding",""),t("margin",""),d="border",m="border-style",g="border-color",n(h="border-width")&&n(m)&&n(g)&&(p[d]=p[h]+" "+p[m]+" "+p[g],delete p[h],delete p[m],delete p[g]),"medium none"===p.border&&delete p.border,"none"===p["border-image"]&&delete p["border-image"]}return p},serialize:function(i,e){function t(e){var t,n,r,o;if(t=c[e])for(n=0,r=t.length;n<r;n++)e=t[n],(o=i[e])&&(s+=(0<s.length?" ":"")+e+": "+o+";")}var n,r,o,a,u,s="";if(e&&c)t("*"),t(e);else for(n in i)!(r=i[n])||l&&(o=n,a=e,u=void 0,(u=l["*"])&&u[o]||(u=l[a])&&u[o])||(s+=(0<s.length?" ":"")+n+": "+r+";");return s}}},zr=/^(?:mouse|contextmenu)|click/,Er={keyLocation:1,layerX:1,layerY:1,returnValue:1,webkitMovementX:1,webkitMovementY:1,keyIdentifier:1,mozPressure:1},Nr=function(){return!1},Sr=function(){return!0},kr=(Tr.prototype.bind=function(e,t,n,r){function o(e){d.executeHandlers(Cr(e||h.event),i)}var i,a,u,s,c,l,f,d=this,h=j.window;if(e&&3!==e.nodeType&&8!==e.nodeType){e[d.expando]?i=e[d.expando]:(i=d.count++,e[d.expando]=i,d.events[i]={}),r=r||e;var m=t.split(" ");for(u=m.length;u--;)l=o,c=f=!1,"DOMContentLoaded"===(s=m[u])&&(s="ready"),d.domLoaded&&"ready"===s&&"complete"===e.readyState?n.call(r,Cr({type:s})):(d.hasMouseEnterLeave||(c=d.mouseEnterLeave[s])&&(l=function(e){var t,n;if(t=e.currentTarget,(n=e.relatedTarget)&&t.contains)n=t.contains(n);else for(;n&&n!==t;)n=n.parentNode;n||((e=Cr(e||h.event)).type="mouseout"===e.type?"mouseleave":"mouseenter",e.target=t,d.executeHandlers(e,i))}),d.hasFocusIn||"focusin"!==s&&"focusout"!==s||(f=!0,c="focusin"===s?"focus":"blur",l=function(e){(e=Cr(e||h.event)).type="focus"===e.type?"focusin":"focusout",d.executeHandlers(e,i)}),(a=d.events[i][s])?"ready"===s&&d.domLoaded?n(Cr({type:s})):a.push({func:n,scope:r}):(d.events[i][s]=a=[{func:n,scope:r}],a.fakeName=c,a.capture=f,a.nativeHandler=l,"ready"===s?wr(e,l,d):yr(e,c||s,l,f)));return e=a=0,n}},Tr.prototype.unbind=function(e,t,n){var r,o,i,a,u,s;if(!e||3===e.nodeType||8===e.nodeType)return this;if(r=e[this.expando]){if(s=this.events[r],t){var c=t.split(" ");for(i=c.length;i--;)if(o=s[u=c[i]]){if(n)for(a=o.length;a--;)if(o[a].func===n){var l=o.nativeHandler,f=o.fakeName,d=o.capture;(o=o.slice(0,a).concat(o.slice(a+1))).nativeHandler=l,o.fakeName=f,o.capture=d,s[u]=o}n&&0!==o.length||(delete s[u],br(e,o.fakeName||u,o.nativeHandler,o.capture))}}else{for(u in s)o=s[u],br(e,o.fakeName||u,o.nativeHandler,o.capture);s={}}for(u in s)return this;delete this.events[r];try{delete e[this.expando]}catch(h){e[this.expando]=null}}return this},Tr.prototype.fire=function(e,t,n){var r;if(!e||3===e.nodeType||8===e.nodeType)return this;var o=Cr(null,n);for(o.type=t,o.target=e;(r=e[this.expando])&&this.executeHandlers(o,r),(e=e.parentNode||e.ownerDocument||e.defaultView||e.parentWindow)&&!o.isPropagationStopped(););return this},Tr.prototype.clean=function(e){var t,n;if(!e||3===e.nodeType||8===e.nodeType)return this;if(e[this.expando]&&this.unbind(e),e.getElementsByTagName||(e=e.document),e&&e.getElementsByTagName)for(this.unbind(e),t=(n=e.getElementsByTagName("*")).length;t--;)(e=n[t])[this.expando]&&this.unbind(e);return this},Tr.prototype.destroy=function(){this.events={}},Tr.prototype.cancel=function(e){return e&&(e.preventDefault(),e.stopImmediatePropagation()),!1},Tr.prototype.executeHandlers=function(e,t){var n,r,o,i,a=this.events[t];if(n=a&&a[e.type])for(r=0,o=n.length;r<o;r++)if((i=n[r])&&!1===i.func.call(i.scope,e)&&e.preventDefault(),e.isImmediatePropagationStopped())return},Tr.Event=new Tr,Tr);function Tr(){this.domLoaded=!1,this.events={},this.count=1,this.expando="mce-data-"+(+new Date).toString(32),this.hasMouseEnterLeave="onmouseenter"in j.document.documentElement,this.hasFocusIn="onfocusin"in j.document.documentElement,this.count=1}function Ar(e,t,n){var r="0x"+t-65536;return r!=r||n?t:r<0?String.fromCharCode(65536+r):String.fromCharCode(r>>10|55296,1023&r|56320)}var Mr,Rr,Dr,_r,Br,Or,Hr,Pr,Lr,Vr,Ir,Fr,Ur,jr,qr,$r,Wr,Kr,Xr="sizzle"+-new Date,Yr=j.window.document,Gr=0,Jr=0,Qr=Mo(),Zr=Mo(),eo=Mo(),to=function(e,t){return e===t&&(Ir=!0),0},no=typeof undefined,ro={}.hasOwnProperty,oo=[],io=oo.pop,ao=oo.push,uo=oo.push,so=oo.slice,co=oo.indexOf||function(e){for(var t=0,n=this.length;t<n;t++)if(this[t]===e)return t;return-1},lo="[\\x20\\t\\r\\n\\f]",fo="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",ho="\\["+lo+"*("+fo+")(?:"+lo+"*([*^$|!~]?=)"+lo+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+fo+"))|)"+lo+"*\\]",mo=":("+fo+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+ho+")*)|.*)\\)|)",go=new RegExp("^"+lo+"+|((?:^|[^\\\\])(?:\\\\.)*)"+lo+"+$","g"),po=new RegExp("^"+lo+"*,"+lo+"*"),vo=new RegExp("^"+lo+"*([>+~]|"+lo+")"+lo+"*"),yo=new RegExp("="+lo+"*([^\\]'\"]*?)"+lo+"*\\]","g"),bo=new RegExp(mo),Co=new RegExp("^"+fo+"$"),wo={ID:new RegExp("^#("+fo+")"),CLASS:new RegExp("^\\.("+fo+")"),TAG:new RegExp("^("+fo+"|[*])"),ATTR:new RegExp("^"+ho),PSEUDO:new RegExp("^"+mo),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+lo+"*(even|odd|(([+-]|)(\\d*)n|)"+lo+"*(?:([+-]|)"+lo+"*(\\d+)|))"+lo+"*\\)|)","i"),bool:new RegExp("^(?:checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped)$","i"),needsContext:new RegExp("^"+lo+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+lo+"*((?:-\\d)?\\d*)"+lo+"*\\)|)(?=[^-]|$)","i")},xo=/^(?:input|select|textarea|button)$/i,zo=/^h\d$/i,Eo=/^[^{]+\{\s*\[native \w/,No=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,So=/[+~]/,ko=/'|\\/g,To=new RegExp("\\\\([\\da-f]{1,6}"+lo+"?|("+lo+")|.)","ig");try{uo.apply(oo=so.call(Yr.childNodes),Yr.childNodes),oo[Yr.childNodes.length].nodeType}catch(yN){uo={apply:oo.length?function(e,t){ao.apply(e,so.call(t))}:function(e,t){for(var n=e.length,r=0;e[n++]=t[r++];);e.length=n-1}}}var Ao=function(e,t,n,r){var o,i,a,u,s,c,l,f,d,h;if((t?t.ownerDocument||t:Yr)!==Ur&&Fr(t),n=n||[],!e||"string"!=typeof e)return n;if(1!==(u=(t=t||Ur).nodeType)&&9!==u)return[];if(qr&&!r){if(o=No.exec(e))if(a=o[1]){if(9===u){if(!(i=t.getElementById(a))||!i.parentNode)return n;if(i.id===a)return n.push(i),n}else if(t.ownerDocument&&(i=t.ownerDocument.getElementById(a))&&Kr(t,i)&&i.id===a)return n.push(i),n}else{if(o[2])return uo.apply(n,t.getElementsByTagName(e)),n;if((a=o[3])&&Rr.getElementsByClassName)return uo.apply(n,t.getElementsByClassName(a)),n}if(Rr.qsa&&(!$r||!$r.test(e))){if(f=l=Xr,d=t,h=9===u&&e,1===u&&"object"!==t.nodeName.toLowerCase()){for(c=Or(e),(l=t.getAttribute("id"))?f=l.replace(ko,"\\$&"):t.setAttribute("id",f),f="[id='"+f+"'] ",s=c.length;s--;)c[s]=f+Lo(c[s]);d=So.test(e)&&Ho(t.parentNode)||t,h=c.join(",")}if(h)try{return uo.apply(n,d.querySelectorAll(h)),n}catch(m){}finally{l||t.removeAttribute("id")}}}return Pr(e.replace(go,"$1"),t,n,r)};function Mo(){var n=[];return function r(e,t){return n.push(e+" ")>Dr.cacheLength&&delete r[n.shift()],r[e+" "]=t}}function Ro(e){return e[Xr]=!0,e}function Do(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&(~t.sourceIndex||1<<31)-(~e.sourceIndex||1<<31);if(r)return r;if(n)for(;n=n.nextSibling;)if(n===t)return-1;return e?1:-1}function _o(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function Bo(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function Oo(a){return Ro(function(i){return i=+i,Ro(function(e,t){for(var n,r=a([],e.length,i),o=r.length;o--;)e[n=r[o]]&&(e[n]=!(t[n]=e[n]))})})}function Ho(e){return e&&typeof e.getElementsByTagName!=no&&e}for(Mr in Rr=Ao.support={},Br=Ao.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return!!t&&"HTML"!==t.nodeName},Fr=Ao.setDocument=function(e){var t,s=e?e.ownerDocument||e:Yr,n=s.defaultView;return s!==Ur&&9===s.nodeType&&s.documentElement?(jr=(Ur=s).documentElement,qr=!Br(s),n&&n!==function r(e){try{return e.top}catch(t){}return null}(n)&&(n.addEventListener?n.addEventListener("unload",function(){Fr()},!1):n.attachEvent&&n.attachEvent("onunload",function(){Fr()})),Rr.attributes=!0,Rr.getElementsByTagName=!0,Rr.getElementsByClassName=Eo.test(s.getElementsByClassName),Rr.getById=!0,Dr.find.ID=function(e,t){if(typeof t.getElementById!=no&&qr){var n=t.getElementById(e);return n&&n.parentNode?[n]:[]}},Dr.filter.ID=function(e){var t=e.replace(To,Ar);return function(e){return e.getAttribute("id")===t}},Dr.find.TAG=Rr.getElementsByTagName?function(e,t){if(typeof t.getElementsByTagName!=no)return t.getElementsByTagName(e)}:function(e,t){var n,r=[],o=0,i=t.getElementsByTagName(e);if("*"!==e)return i;for(;n=i[o++];)1===n.nodeType&&r.push(n);return r},Dr.find.CLASS=Rr.getElementsByClassName&&function(e,t){if(qr)return t.getElementsByClassName(e)},Wr=[],$r=[],Rr.disconnectedMatch=!0,$r=$r.length&&new RegExp($r.join("|")),Wr=Wr.length&&new RegExp(Wr.join("|")),t=Eo.test(jr.compareDocumentPosition),Kr=t||Eo.test(jr.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)for(;t=t.parentNode;)if(t===e)return!0;return!1},to=t?function(e,t){if(e===t)return Ir=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)===(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!Rr.sortDetached&&t.compareDocumentPosition(e)===n?e===s||e.ownerDocument===Yr&&Kr(Yr,e)?-1:t===s||t.ownerDocument===Yr&&Kr(Yr,t)?1:Vr?co.call(Vr,e)-co.call(Vr,t):0:4&n?-1:1)}:function(e,t){if(e===t)return Ir=!0,0;var n,r=0,o=e.parentNode,i=t.parentNode,a=[e],u=[t];if(!o||!i)return e===s?-1:t===s?1:o?-1:i?1:Vr?co.call(Vr,e)-co.call(Vr,t):0;if(o===i)return Do(e,t);for(n=e;n=n.parentNode;)a.unshift(n);for(n=t;n=n.parentNode;)u.unshift(n);for(;a[r]===u[r];)r++;return r?Do(a[r],u[r]):a[r]===Yr?-1:u[r]===Yr?1:0},s):Ur},Ao.matches=function(e,t){return Ao(e,null,null,t)},Ao.matchesSelector=function(e,t){if((e.ownerDocument||e)!==Ur&&Fr(e),t=t.replace(yo,"='$1']"),Rr.matchesSelector&&qr&&(!Wr||!Wr.test(t))&&(!$r||!$r.test(t)))try{var n=(void 0).call(e,t);if(n||Rr.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(yN){}return 0<Ao(t,Ur,null,[e]).length},Ao.contains=function(e,t){return(e.ownerDocument||e)!==Ur&&Fr(e),Kr(e,t)},Ao.attr=function(e,t){(e.ownerDocument||e)!==Ur&&Fr(e);var n=Dr.attrHandle[t.toLowerCase()],r=n&&ro.call(Dr.attrHandle,t.toLowerCase())?n(e,t,!qr):undefined;return r!==undefined?r:Rr.attributes||!qr?e.getAttribute(t):(r=e.getAttributeNode(t))&&r.specified?r.value:null},Ao.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)},Ao.uniqueSort=function(e){var t,n=[],r=0,o=0;if(Ir=!Rr.detectDuplicates,Vr=!Rr.sortStable&&e.slice(0),e.sort(to),Ir){for(;t=e[o++];)t===e[o]&&(r=n.push(o));for(;r--;)e.splice(n[r],1)}return Vr=null,e},_r=Ao.getText=function(e){var t,n="",r=0,o=e.nodeType;if(o){if(1===o||9===o||11===o){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=_r(e)}else if(3===o||4===o)return e.nodeValue}else for(;t=e[r++];)n+=_r(t);return n},(Dr=Ao.selectors={cacheLength:50,createPseudo:Ro,match:wo,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(To,Ar),e[3]=(e[3]||e[4]||e[5]||"").replace(To,Ar),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||Ao.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&Ao.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return wo.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&bo.test(n)&&(t=Or(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(To,Ar).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=Qr[e+" "];return t||(t=new RegExp("(^|"+lo+")"+e+"("+lo+"|$)"))&&Qr(e,function(e){return t.test("string"==typeof e.className&&e.className||typeof e.getAttribute!=no&&e.getAttribute("class")||"")})},ATTR:function(n,r,o){return function(e){var t=Ao.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===o:"!="===r?t!==o:"^="===r?o&&0===t.indexOf(o):"*="===r?o&&-1<t.indexOf(o):"$="===r?o&&t.slice(-o.length)===o:"~="===r?-1<(" "+t+" ").indexOf(o):"|="===r&&(t===o||t.slice(0,o.length+1)===o+"-"))}},CHILD:function(h,e,t,m,g){var p="nth"!==h.slice(0,3),v="last"!==h.slice(-4),y="of-type"===e;return 1===m&&0===g?function(e){return!!e.parentNode}:function(e,t,n){var r,o,i,a,u,s,c=p!=v?"nextSibling":"previousSibling",l=e.parentNode,f=y&&e.nodeName.toLowerCase(),d=!n&&!y;if(l){if(p){for(;c;){for(i=e;i=i[c];)if(y?i.nodeName.toLowerCase()===f:1===i.nodeType)return!1;s=c="only"===h&&!s&&"nextSibling"}return!0}if(s=[v?l.firstChild:l.lastChild],v&&d){for(u=(r=(o=l[Xr]||(l[Xr]={}))[h]||[])[0]===Gr&&r[1],a=r[0]===Gr&&r[2],i=u&&l.childNodes[u];i=++u&&i&&i[c]||(a=u=0)||s.pop();)if(1===i.nodeType&&++a&&i===e){o[h]=[Gr,u,a];break}}else if(d&&(r=(e[Xr]||(e[Xr]={}))[h])&&r[0]===Gr)a=r[1];else for(;(i=++u&&i&&i[c]||(a=u=0)||s.pop())&&((y?i.nodeName.toLowerCase()!==f:1!==i.nodeType)||!++a||(d&&((i[Xr]||(i[Xr]={}))[h]=[Gr,a]),i!==e)););return(a-=g)===m||a%m==0&&0<=a/m}}},PSEUDO:function(e,i){var t,a=Dr.pseudos[e]||Dr.setFilters[e.toLowerCase()]||Ao.error("unsupported pseudo: "+e);return a[Xr]?a(i):1<a.length?(t=[e,e,"",i],Dr.setFilters.hasOwnProperty(e.toLowerCase())?Ro(function(e,t){for(var n,r=a(e,i),o=r.length;o--;)e[n=co.call(e,r[o])]=!(t[n]=r[o])}):function(e){return a(e,0,t)}):a}},pseudos:{not:Ro(function(e){var r=[],o=[],u=Hr(e.replace(go,"$1"));return u[Xr]?Ro(function(e,t,n,r){for(var o,i=u(e,null,r,[]),a=e.length;a--;)(o=i[a])&&(e[a]=!(t[a]=o))}):function(e,t,n){return r[0]=e,u(r,null,n,o),!o.pop()}}),has:Ro(function(t){return function(e){return 0<Ao(t,e).length}}),contains:Ro(function(t){return t=t.replace(To,Ar),function(e){return-1<(e.textContent||e.innerText||_r(e)).indexOf(t)}}),lang:Ro(function(n){return Co.test(n||"")||Ao.error("unsupported lang: "+n),n=n.replace(To,Ar).toLowerCase(),function(e){var t;do{if(t=qr?e.lang:e.getAttribute("xml:lang")||e.getAttribute("lang"))return(t=t.toLowerCase())===n||0===t.indexOf(n+"-")}while((e=e.parentNode)&&1===e.nodeType);return!1}}),target:function(e){var t=j.window.location&&j.window.location.hash;return t&&t.slice(1)===e.id},root:function(e){return e===jr},focus:function(e){return e===Ur.activeElement&&(!Ur.hasFocus||Ur.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:function(e){return!1===e.disabled},disabled:function(e){return!0===e.disabled},checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,!0===e.selected},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeType<6)return!1;return!0},parent:function(e){return!Dr.pseudos.empty(e)},header:function(e){return zo.test(e.nodeName)},input:function(e){return xo.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||"text"===t.toLowerCase())},first:Oo(function(){return[0]}),last:Oo(function(e,t){return[t-1]}),eq:Oo(function(e,t,n){return[n<0?n+t:n]}),even:Oo(function(e,t){for(var n=0;n<t;n+=2)e.push(n);return e}),odd:Oo(function(e,t){for(var n=1;n<t;n+=2)e.push(n);return e}),lt:Oo(function(e,t,n){for(var r=n<0?n+t:n;0<=--r;)e.push(r);return e}),gt:Oo(function(e,t,n){for(var r=n<0?n+t:n;++r<t;)e.push(r);return e})}}).pseudos.nth=Dr.pseudos.eq,{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})Dr.pseudos[Mr]=_o(Mr);for(Mr in{submit:!0,reset:!0})Dr.pseudos[Mr]=Bo(Mr);function Po(){}function Lo(e){for(var t=0,n=e.length,r="";t<n;t++)r+=e[t].value;return r}function Vo(a,e,t){var u=e.dir,s=t&&"parentNode"===u,c=Jr++;return e.first?function(e,t,n){for(;e=e[u];)if(1===e.nodeType||s)return a(e,t,n)}:function(e,t,n){var r,o,i=[Gr,c];if(n){for(;e=e[u];)if((1===e.nodeType||s)&&a(e,t,n))return!0}else for(;e=e[u];)if(1===e.nodeType||s){if((r=(o=e[Xr]||(e[Xr]={}))[u])&&r[0]===Gr&&r[1]===c)return i[2]=r[2];if((o[u]=i)[2]=a(e,t,n))return!0}}}function Io(o){return 1<o.length?function(e,t,n){for(var r=o.length;r--;)if(!o[r](e,t,n))return!1;return!0}:o[0]}function Fo(e,t,n,r,o){for(var i,a=[],u=0,s=e.length,c=null!=t;u<s;u++)(i=e[u])&&(n&&!n(i,r,o)||(a.push(i),c&&t.push(u)));return a}function Uo(m,g,p,v,y,e){return v&&!v[Xr]&&(v=Uo(v)),y&&!y[Xr]&&(y=Uo(y,e)),Ro(function(e,t,n,r){var o,i,a,u=[],s=[],c=t.length,l=e||function h(e,t,n){for(var r=0,o=t.length;r<o;r++)Ao(e,t[r],n);return n}(g||"*",n.nodeType?[n]:n,[]),f=!m||!e&&g?l:Fo(l,u,m,n,r),d=p?y||(e?m:c||v)?[]:t:f;if(p&&p(f,d,n,r),v)for(o=Fo(d,s),v(o,[],n,r),i=o.length;i--;)(a=o[i])&&(d[s[i]]=!(f[s[i]]=a));if(e){if(y||m){if(y){for(o=[],i=d.length;i--;)(a=d[i])&&o.push(f[i]=a);y(null,d=[],o,r)}for(i=d.length;i--;)(a=d[i])&&-1<(o=y?co.call(e,a):u[i])&&(e[o]=!(t[o]=a))}}else d=Fo(d===t?d.splice(c,d.length):d),y?y(null,t,d,r):uo.apply(t,d)})}function jo(e){for(var r,t,n,o=e.length,i=Dr.relative[e[0].type],a=i||Dr.relative[" "],u=i?1:0,s=Vo(function(e){return e===r},a,!0),c=Vo(function(e){return-1<co.call(r,e)},a,!0),l=[function(e,t,n){return!i&&(n||t!==Lr)||((r=t).nodeType?s(e,t,n):c(e,t,n))}];u<o;u++)if(t=Dr.relative[e[u].type])l=[Vo(Io(l),t)];else{if((t=Dr.filter[e[u].type].apply(null,e[u].matches))[Xr]){for(n=++u;n<o&&!Dr.relative[e[n].type];n++);return Uo(1<u&&Io(l),1<u&&Lo(e.slice(0,u-1).concat({value:" "===e[u-2].type?"*":""})).replace(go,"$1"),t,u<n&&jo(e.slice(u,n)),n<o&&jo(e=e.slice(n)),n<o&&Lo(e))}l.push(t)}return Io(l)}Po.prototype=Dr.filters=Dr.pseudos,Dr.setFilters=new Po,Or=Ao.tokenize=function(e,t){var n,r,o,i,a,u,s,c=Zr[e+" "];if(c)return t?0:c.slice(0);for(a=e,u=[],s=Dr.preFilter;a;){for(i in n&&!(r=po.exec(a))||(r&&(a=a.slice(r[0].length)||a),u.push(o=[])),n=!1,(r=vo.exec(a))&&(n=r.shift(),o.push({value:n,type:r[0].replace(go," ")}),a=a.slice(n.length)),Dr.filter)Dr.filter.hasOwnProperty(i)&&(!(r=wo[i].exec(a))||s[i]&&!(r=s[i](r))||(n=r.shift(),o.push({value:n,type:i,matches:r}),a=a.slice(n.length)));if(!n)break}return t?a.length:a?Ao.error(e):Zr(e,u).slice(0)},Hr=Ao.compile=function(e,t){var n,r=[],o=[],i=eo[e+" "];if(!i){for(n=(t=t||Or(e)).length;n--;)(i=jo(t[n]))[Xr]?r.push(i):o.push(i);(i=eo(e,function a(p,v){function e(e,t,n,r,o){var i,a,u,s=0,c="0",l=e&&[],f=[],d=Lr,h=e||b&&Dr.find.TAG("*",o),m=Gr+=null==d?1:Math.random()||.1,g=h.length;for(o&&(Lr=t!==Ur&&t);c!==g&&null!=(i=h[c]);c++){if(b&&i){for(a=0;u=p[a++];)if(u(i,t,n)){r.push(i);break}o&&(Gr=m)}y&&((i=!u&&i)&&s--,e&&l.push(i))}if(s+=c,y&&c!==s){for(a=0;u=v[a++];)u(l,f,t,n);if(e){if(0<s)for(;c--;)l[c]||f[c]||(f[c]=io.call(r));f=Fo(f)}uo.apply(r,f),o&&!e&&0<f.length&&1<s+v.length&&Ao.uniqueSort(r)}return o&&(Gr=m,Lr=d),l}var y=0<v.length,b=0<p.length;return y?Ro(e):e}(o,r))).selector=e}return i},Pr=Ao.select=function(e,t,n,r){var o,i,a,u,s,c="function"==typeof e&&e,l=!r&&Or(e=c.selector||e);if(n=n||[],1===l.length){if(2<(i=l[0]=l[0].slice(0)).length&&"ID"===(a=i[0]).type&&Rr.getById&&9===t.nodeType&&qr&&Dr.relative[i[1].type]){if(!(t=(Dr.find.ID(a.matches[0].replace(To,Ar),t)||[])[0]))return n;c&&(t=t.parentNode),e=e.slice(i.shift().value.length)}for(o=wo.needsContext.test(e)?0:i.length;o--&&(a=i[o],!Dr.relative[u=a.type]);)if((s=Dr.find[u])&&(r=s(a.matches[0].replace(To,Ar),So.test(i[0].type)&&Ho(t.parentNode)||t))){if(i.splice(o,1),!(e=r.length&&Lo(i)))return uo.apply(n,r),n;break}}return(c||Hr(e,l))(r,t,!qr,n,So.test(e)&&Ho(t.parentNode)||t),n},Rr.sortStable=Xr.split("").sort(to).join("")===Xr,Rr.detectDuplicates=!!Ir,Fr(),Rr.sortDetached=!0;function qo(e){return void 0!==e}function $o(e){return"string"==typeof e}function Wo(e,t){var n,r,o;for(o=(t=t||Zo).createElement("div"),n=t.createDocumentFragment(),o.innerHTML=e;r=o.firstChild;)n.appendChild(r);return n}function Ko(e,t){return e&&t&&-1!==(" "+e.className+" ").indexOf(" "+t+" ")}function Xo(e,t,n){var r,o;return t=vi(t)[0],e.each(function(){n&&r===this.parentNode||(r=this.parentNode,o=t.cloneNode(!1),this.parentNode.insertBefore(o,this)),o.appendChild(this)}),e}function Yo(e,t){return new vi.fn.init(e,t)}function Go(e){return null===e||e===undefined?"":(""+e).replace(di,"")}function Jo(e,t){var n,r,o,i;if(e)if((n=e.length)===undefined){for(r in e)if(e.hasOwnProperty(r)&&(i=e[r],!1===t.call(i,r,i)))break}else for(o=0;o<n&&(i=e[o],!1!==t.call(i,o,i));o++);return e}function Qo(e,n){var r=[];return Jo(e,function(e,t){n(t,e)&&r.push(t)}),r}var Zo=j.document,ei=Array.prototype.push,ti=Array.prototype.slice,ni=/^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,ri=kr.Event,oi=Mn.makeMap("children,contents,next,prev"),ii=function(e,t,n,r){var o;if($o(t))t=Wo(t,hi(e[0]));else if(t.length&&!t.nodeType){if(t=vi.makeArray(t),r)for(o=t.length-1;0<=o;o--)ii(e,t[o],n,r);else for(o=0;o<t.length;o++)ii(e,t[o],n,r);return e}if(t.nodeType)for(o=e.length;o--;)n.call(e[o],t);return e},ai=Mn.makeMap("fillOpacity fontWeight lineHeight opacity orphans widows zIndex zoom"," "),ui=Mn.makeMap("checked compact declare defer disabled ismap multiple nohref noshade nowrap readonly selected"," "),si={"for":"htmlFor","class":"className",readonly:"readOnly"},ci={"float":"cssFloat"},li={},fi={},di=/^\s*|\s*$/g,hi=function(e){return e?9===e.nodeType?e:e.ownerDocument:Zo};Yo.fn=Yo.prototype={constructor:Yo,selector:"",context:null,length:0,init:function(e,t){var n,r,o=this;if(!e)return o;if(e.nodeType)return o.context=o[0]=e,o.length=1,o;if(t&&t.nodeType)o.context=t;else{if(t)return vi(e).attr(t);o.context=t=j.document}if($o(e)){if(!(n="<"===(o.selector=e).charAt(0)&&">"===e.charAt(e.length-1)&&3<=e.length?[null,e,null]:ni.exec(e)))return vi(t).find(e);if(n[1])for(r=Wo(e,hi(t)).firstChild;r;)ei.call(o,r),r=r.nextSibling;else{if(!(r=hi(t).getElementById(n[2])))return o;if(r.id!==n[2])return o.find(e);o.length=1,o[0]=r}}else this.add(e,!1);return o},toArray:function(){return Mn.toArray(this)},add:function(e,t){var n,r;if($o(e))return this.add(vi(e));if(!1!==t)for(n=vi.unique(this.toArray().concat(vi.makeArray(e))),this.length=n.length,r=0;r<n.length;r++)this[r]=n[r];else ei.apply(this,vi.makeArray(e));return this},attr:function(t,n){var e,r=this;if("object"==typeof t)Jo(t,function(e,t){r.attr(e,t)});else{if(!qo(n)){if(r[0]&&1===r[0].nodeType){if((e=li[t])&&e.get)return e.get(r[0],t);if(ui[t])return r.prop(t)?t:undefined;null===(n=r[0].getAttribute(t,2))&&(n=undefined)}return n}this.each(function(){var e;if(1===this.nodeType){if((e=li[t])&&e.set)return void e.set(this,n);null===n?this.removeAttribute(t,2):this.setAttribute(t,n,2)}})}return r},removeAttr:function(e){return this.attr(e,null)},prop:function(e,t){var n=this;if("object"==typeof(e=si[e]||e))Jo(e,function(e,t){n.prop(e,t)});else{if(!qo(t))return n[0]&&n[0].nodeType&&e in n[0]?n[0][e]:t;this.each(function(){1===this.nodeType&&(this[e]=t)})}return n},css:function(n,r){function e(e){return e.replace(/-(\D)/g,function(e,t){return t.toUpperCase()})}function o(e){return e.replace(/[A-Z]/g,function(e){return"-"+e})}var t,i,a=this;if("object"==typeof n)Jo(n,function(e,t){a.css(e,t)});else if(qo(r))n=e(n),"number"!=typeof r||ai[n]||(r=r.toString()+"px"),a.each(function(){var e=this.style;if((i=fi[n])&&i.set)i.set(this,r);else{try{this.style[ci[n]||n]=r}catch(t){}null!==r&&""!==r||(e.removeProperty?e.removeProperty(o(n)):e.removeAttribute(n))}});else{if(t=a[0],(i=fi[n])&&i.get)return i.get(t);if(!t.ownerDocument.defaultView)return t.currentStyle?t.currentStyle[e(n)]:"";try{return t.ownerDocument.defaultView.getComputedStyle(t,null).getPropertyValue(o(n))}catch(u){return undefined}}return a},remove:function(){for(var e,t=this.length;t--;)e=this[t],ri.clean(e),e.parentNode&&e.parentNode.removeChild(e);return this},empty:function(){for(var e,t=this.length;t--;)for(e=this[t];e.firstChild;)e.removeChild(e.firstChild);return this},html:function(e){var t,n=this;if(qo(e)){t=n.length;try{for(;t--;)n[t].innerHTML=e}catch(r){vi(n[t]).empty().append(e)}return n}return n[0]?n[0].innerHTML:""},text:function(e){var t;if(qo(e)){for(t=this.length;t--;)"innerText"in this[t]?this[t].innerText=e:this[0].textContent=e;return this}return this[0]?this[0].innerText||this[0].textContent:""},append:function(){return ii(this,arguments,function(e){(1===this.nodeType||this.host&&1===this.host.nodeType)&&this.appendChild(e)})},prepend:function(){return ii(this,arguments,function(e){(1===this.nodeType||this.host&&1===this.host.nodeType)&&this.insertBefore(e,this.firstChild)},!0)},before:function(){return this[0]&&this[0].parentNode?ii(this,arguments,function(e){this.parentNode.insertBefore(e,this)}):this},after:function(){return this[0]&&this[0].parentNode?ii(this,arguments,function(e){this.parentNode.insertBefore(e,this.nextSibling)},!0):this},appendTo:function(e){return vi(e).append(this),this},prependTo:function(e){return vi(e).prepend(this),this},replaceWith:function(e){return this.before(e).remove()},wrap:function(e){return Xo(this,e)},wrapAll:function(e){return Xo(this,e,!0)},wrapInner:function(e){return this.each(function(){vi(this).contents().wrapAll(e)}),this},unwrap:function(){return this.parent().each(function(){vi(this).replaceWith(this.childNodes)})},clone:function(){var e=[];return this.each(function(){e.push(this.cloneNode(!0))}),vi(e)},addClass:function(e){return this.toggleClass(e,!0)},removeClass:function(e){return this.toggleClass(e,!1)},toggleClass:function(o,i){var e=this;return"string"!=typeof o||(-1!==o.indexOf(" ")?Jo(o.split(" "),function(){e.toggleClass(this,i)}):e.each(function(e,t){var n,r;(r=Ko(t,o))!==i&&(n=t.className,r?t.className=Go((" "+n+" ").replace(" "+o+" "," ")):t.className+=n?" "+o:o)})),e},hasClass:function(e){return Ko(this[0],e)},each:function(e){return Jo(this,e)},on:function(e,t){return this.each(function(){ri.bind(this,e,t)})},off:function(e,t){return this.each(function(){ri.unbind(this,e,t)})},trigger:function(e){return this.each(function(){"object"==typeof e?ri.fire(this,e.type,e):ri.fire(this,e)})},show:function(){return this.css("display","")},hide:function(){return this.css("display","none")},slice:function(){return new vi(ti.apply(this,arguments))},eq:function(e){return-1===e?this.slice(e):this.slice(e,+e+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},find:function(e){var t,n,r=[];for(t=0,n=this.length;t<n;t++)vi.find(e,this[t],r);return vi(r)},filter:function(n){return vi("function"==typeof n?Qo(this.toArray(),function(e,t){return n(t,e)}):vi.filter(n,this.toArray()))},closest:function(n){var r=[];return n instanceof vi&&(n=n[0]),this.each(function(e,t){for(;t;){if("string"==typeof n&&vi(t).is(n)){r.push(t);break}if(t===n){r.push(t);break}t=t.parentNode}}),vi(r)},offset:function(e){var t,n,r,o,i=0,a=0;return e?this.css(e):((t=this[0])&&(r=(n=t.ownerDocument).documentElement,t.getBoundingClientRect&&(i=(o=t.getBoundingClientRect()).left+(r.scrollLeft||n.body.scrollLeft)-r.clientLeft,a=o.top+(r.scrollTop||n.body.scrollTop)-r.clientTop)),{left:i,top:a})},push:ei,sort:Array.prototype.sort,splice:Array.prototype.splice},Mn.extend(Yo,{extend:Mn.extend,makeArray:function(e){return function(e){return e&&e===e.window}(e)||e.nodeType?[e]:Mn.toArray(e)},inArray:function(e,t){var n;if(t.indexOf)return t.indexOf(e);for(n=t.length;n--;)if(t[n]===e)return n;return-1},isArray:Mn.isArray,each:Jo,trim:Go,grep:Qo,find:Ao,expr:Ao.selectors,unique:Ao.uniqueSort,text:Ao.getText,contains:Ao.contains,filter:function(e,t,n){var r=t.length;for(n&&(e=":not("+e+")");r--;)1!==t[r].nodeType&&t.splice(r,1);return t=1===t.length?vi.find.matchesSelector(t[0],e)?[t[0]]:[]:vi.find.matches(e,t)}});function mi(e,t,n){var r=[],o=e[t];for("string"!=typeof n&&n instanceof vi&&(n=n[0]);o&&9!==o.nodeType;){if(n!==undefined){if(o===n)break;if("string"==typeof n&&vi(o).is(n))break}1===o.nodeType&&r.push(o),o=o[t]}return r}function gi(e,t,n,r){var o=[];for(r instanceof vi&&(r=r[0]);e;e=e[t])if(!n||e.nodeType===n){if(r!==undefined){if(e===r)break;if("string"==typeof r&&vi(e).is(r))break}o.push(e)}return o}function pi(e,t,n){for(e=e[t];e;e=e[t])if(e.nodeType===n)return e;return null}Jo({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return mi(e,"parentNode")},next:function(e){return pi(e,"nextSibling",1)},prev:function(e){return pi(e,"previousSibling",1)},children:function(e){return gi(e.firstChild,"nextSibling",1)},contents:function(e){return Mn.toArray(("iframe"===e.nodeName?e.contentDocument||e.contentWindow.document:e).childNodes)}},function(r,o){Yo.fn[r]=function(t){var n=[];this.each(function(){var e=o.call(n,this,t,n);e&&(vi.isArray(e)?n.push.apply(n,e):n.push(e))}),1<this.length&&(oi[r]||(n=vi.unique(n)),0===r.indexOf("parents")&&(n=n.reverse()));var e=vi(n);return t?e.filter(t):e}}),Jo({parentsUntil:function(e,t){return mi(e,"parentNode",t)},nextUntil:function(e,t){return gi(e,"nextSibling",1,t).slice(1)},prevUntil:function(e,t){return gi(e,"previousSibling",1,t).slice(1)}},function(o,i){Yo.fn[o]=function(t,e){var n=[];this.each(function(){var e=i.call(n,this,t,n);e&&(vi.isArray(e)?n.push.apply(n,e):n.push(e))}),1<this.length&&(n=vi.unique(n),0!==o.indexOf("parents")&&"prevUntil"!==o||(n=n.reverse()));var r=vi(n);return e?r.filter(e):r}}),Yo.fn.is=function(e){return!!e&&0<this.filter(e).length},Yo.fn.init.prototype=Yo.fn,Yo.overrideDefaults=function(n){var r,o=function(e,t){return r=r||n(),0===arguments.length&&(e=r.element),t=t||r.context,new o.fn.init(e,t)};return vi.extend(o,this),o},Yo.attrHooks=li,Yo.cssHooks=fi;var vi=Yo,yi=(bi.prototype.current=function(){return this.node},bi.prototype.next=function(e){return this.node=this.findSibling(this.node,"firstChild","nextSibling",e),this.node},bi.prototype.prev=function(e){return this.node=this.findSibling(this.node,"lastChild","previousSibling",e),this.node},bi.prototype.prev2=function(e){return this.node=this.findPreviousNode(this.node,"lastChild","previousSibling",e),this.node},bi.prototype.findSibling=function(e,t,n,r){var o,i;if(e){if(!r&&e[t])return e[t];if(e!==this.rootNode){if(o=e[n])return o;for(i=e.parentNode;i&&i!==this.rootNode;i=i.parentNode)if(o=i[n])return o}}},bi.prototype.findPreviousNode=function(e,t,n,r){var o,i,a;if(e){if(o=e[n],this.rootNode&&o===this.rootNode)return;if(o){if(!r)for(a=o[t];a;a=a[t])if(!a[t])return a;return o}if((i=e.parentNode)&&i!==this.rootNode)return i}},bi);function bi(e,t){this.node=e,this.rootNode=t,this.current=this.current.bind(this),this.next=this.next.bind(this),this.prev=this.prev.bind(this),this.prev2=this.prev2.bind(this)}function Ci(t,n){Se(t).each(function(e){e.dom().insertBefore(n.dom(),t.dom())})}function wi(e,t){Te(e).fold(function(){Se(e).each(function(e){Di(e,t)})},function(e){Ci(e,t)})}function xi(t,n){_e(t).fold(function(){Di(t,n)},function(e){t.dom().insertBefore(n.dom(),e.dom())})}function zi(t,e){z(e,function(e){Di(t,e)})}function Ei(e){e.dom().textContent="",z(Re(e),function(e){_i(e)})}function Ni(e){var t=Re(e);0<t.length&&function(t,e){z(e,function(e){Ci(t,e)})}(e,t),_i(e)}function Si(e,t){return e!==undefined?e:t!==undefined?t:0}function ki(e){var t=e!==undefined?e.dom():j.document,n=t.body.scrollLeft||t.documentElement.scrollLeft,r=t.body.scrollTop||t.documentElement.scrollTop;return Oi(n,r)}function Ti(e,t,n){(n!==undefined?n.dom():j.document).defaultView.scrollTo(e,t)}function Ai(e,t){Pi&&D(e.dom().scrollIntoViewIfNeeded)?e.dom().scrollIntoViewIfNeeded(!1):e.dom().scrollIntoView(t)}function Mi(e,t,n,r){return{x:$(e),y:$(t),width:$(n),height:$(r),right:$(e+n),bottom:$(t+r)}}var Ri,Di=function(e,t){e.dom().appendChild(t.dom())},_i=function(e){var t=e.dom();null!==t.parentNode&&t.parentNode.removeChild(t)},Bi=function(n,r){return{left:$(n),top:$(r),translate:function(e,t){return Bi(n+e,r+t)}}},Oi=Bi,Hi=function(e){var t=e.dom(),n=t.ownerDocument.body;return n===t?Oi(n.offsetLeft,n.offsetTop):de(e)?function(e){var t=e.getBoundingClientRect();return Oi(t.left,t.top)}(t):Oi(0,0)},Pi=oe().browser.isSafari(),Li=function(e){var t=e===undefined?j.window:e,n=t.document,r=ki(yt.fromDom(n)),o=t.visualViewport;if(o!==undefined)return Mi(Math.max(o.pageLeft,r.left()),Math.max(o.pageTop,r.top()),o.width,o.height);var i=n.documentElement,a=i.clientWidth,u=i.clientHeight;return Mi(r.left(),r.top(),a,u)},Vi=Mn.each,Ii=Mn.grep,Fi=Nn.ie,Ui=/^([a-z0-9],?)+$/i,ji=/^[ \t\r\n]*$/,qi=function(n,r,o){var i=r.keep_values,e={set:function(e,t,n){r.url_converter&&(t=r.url_converter.call(r.url_converter_scope||o(),t,n,e[0])),e.attr("data-mce-"+n,t).attr(n,t)},get:function(e,t){return e.attr("data-mce-"+t)||e.attr(t)}},t={style:{set:function(e,t){null===t||"object"!=typeof t?(i&&e.attr("data-mce-style",t),e.attr("style",t)):e.css(t)},get:function(e){var t=e.attr("data-mce-style")||e.attr("style");return t=n.serialize(n.parse(t),e[0].nodeName)}}};return i&&(t.href=t.src=e),t},$i=function(e,t){var n=t.attr("style"),r=e.serialize(e.parse(n),t[0].nodeName);r=r||null,t.attr("data-mce-style",r)},Wi=function(e,t){var n,r,o=0;if(e)for(n=e.nodeType,e=e.previousSibling;e;e=e.previousSibling)r=e.nodeType,(!t||3!==r||r!==n&&e.nodeValue.length)&&(o++,n=r);return o};function Ki(a,u){var s,c=this;void 0===u&&(u={});function l(e){if(e&&a&&"string"==typeof e){var t=a.getElementById(e);return t&&t.id!==e?a.getElementsByName(e)[1]:t}return e}function f(e){return"string"==typeof e&&(e=l(e)),H(e)}function r(e,t,n){var r,o,i=f(e);return i.length&&(o=(r=s[t])&&r.get?r.get(i,t):i.attr(t)),void 0===o&&(o=n||""),o}function d(e){var t=l(e);return t?t.attributes:[]}function o(e,t,n){var r,o;""===n&&(n=null);var i=f(e);r=i.attr(t),i.length&&((o=s[t])&&o.set?o.set(i,n,t):i.attr(t,n),r!==n&&u.onSetAttrib&&u.onSetAttrib({attrElm:i,attrName:t,attrValue:n}))}function h(){return u.root_element||a.body}function i(e,t){return Ht.getPos(a.body,l(e),t)}function m(e,t,n){var r=f(e);return n?r.css(t):("float"===(t=t.replace(/-(\D)/g,function(e,t){return t.toUpperCase()}))&&(t=Nn.browser.isIE()?"styleFloat":"cssFloat"),r[0]&&r[0].style?r[0].style[t]:undefined)}function g(e){var t,n;return e=l(e),t=m(e,"width"),n=m(e,"height"),-1===t.indexOf("px")&&(t=0),-1===n.indexOf("px")&&(n=0),{w:parseInt(t,10)||e.offsetWidth||e.clientWidth,h:parseInt(n,10)||e.offsetHeight||e.clientHeight}}function p(e,t){var n;if(!e)return!1;if(!Array.isArray(e)){if("*"===t)return 1===e.nodeType;if(Ui.test(t)){var r=t.toLowerCase().split(/,/),o=e.nodeName.toLowerCase();for(n=r.length-1;0<=n;n--)if(r[n]===o)return!0;return!1}if(e.nodeType&&1!==e.nodeType)return!1}var i=Array.isArray(e)?e:[e];return 0<Ao(t,i[0].ownerDocument||i[0],null,i).length}function v(e,t,n,r){var o,i=[],a=l(e);for(r=r===undefined,n=n||("BODY"!==h().nodeName?h().parentNode:null),Mn.is(t,"string")&&(t="*"===(o=t)?function(e){return 1===e.nodeType}:function(e){return p(e,o)});a&&a!==n&&a.nodeType&&9!==a.nodeType;){if(!t||"function"==typeof t&&t(a)){if(!r)return[a];i.push(a)}a=a.parentNode}return r?i:null}function n(e,t,n){var r=t;if(e)for("string"==typeof t&&(r=function(e){return p(e,t)}),e=e[n];e;e=e[n])if("function"==typeof r&&r(e))return e;return null}function y(e,n,r){var o,t="string"==typeof e?l(e):e;if(!t)return!1;if(Mn.isArray(t)&&(t.length||0===t.length))return o=[],Vi(t,function(e,t){e&&("string"==typeof e&&(e=l(e)),o.push(n.call(r,e,t)))}),o;var i=r||c;return n.call(i,t)}function b(e,t){f(e).each(function(e,n){Vi(t,function(e,t){o(n,t,e)})})}function C(e,r){var t=f(e);Fi?t.each(function(e,t){if(!1!==t.canHaveHTML){for(;t.firstChild;)t.removeChild(t.firstChild);try{t.innerHTML="<br>"+r,t.removeChild(t.firstChild)}catch(n){vi("<div></div>").html("<br>"+r).contents().slice(1).appendTo(t)}return r}}):t.html(r)}function w(e,n,r,o,i){return y(e,function(e){var t="string"==typeof n?a.createElement(n):n;return b(t,r),o&&("string"!=typeof o&&o.nodeType?t.appendChild(o):"string"==typeof o&&C(t,o)),i?t:e.appendChild(t)})}function x(e,t,n){return w(a.createElement(e),e,t,n,!0)}function z(e,t){var n=f(e);return t?n.each(function(){for(var e;e=this.firstChild;)3===e.nodeType&&0===e.data.length?this.removeChild(e):this.parentNode.insertBefore(e,this)}).remove():n.remove(),1<n.length?n.toArray():n[0]}function E(e,t,n){f(e).toggleClass(t,n).each(function(){""===this.className&&vi(this).attr("class",null)})}function N(t,e,n){return y(e,function(e){return Mn.is(e,"array")&&(t=t.cloneNode(!0)),n&&Vi(Ii(e.childNodes),function(e){t.appendChild(e)}),e.parentNode.replaceChild(t,e)})}function S(){return a.createRange()}function k(e){if(e&&Ge.isElement(e)){var t=e.getAttribute("data-mce-contenteditable");return t&&"inherit"!==t?t:"inherit"!==e.contentEditable?e.contentEditable:null}return null}var T={},A=j.window,M={},t=0,e=function U(m,g){void 0===g&&(g={});var p,v=0,y={};function b(e){m.getElementsByTagName("head")[0].appendChild(e)}function n(e,t,n){function r(e){l.status=e,l.passed=[],l.failed=[],u&&(u.onload=null,u.onerror=null,u=null)}function o(){for(var e=l.passed,t=e.length;t--;)e[t]();r(2)}function i(){for(var e=l.failed,t=e.length;t--;)e[t]();r(3)}function a(e,t){e()||((new Date).getTime()-c<p?pn.setTimeout(t):i())}var u,s,c,l,f=function(){a(function(){for(var e,t,n=m.styleSheets,r=n.length;r--;)if((t=(e=n[r]).ownerNode?e.ownerNode:e.owningElement)&&t.id===u.id)return o(),!0},f)},d=function(){a(function(){try{var e=s.sheet.cssRules;return o(),!!e}catch(t){}},d)};if(e=Mn._addCacheSuffix(e),y[e]?l=y[e]:(l={passed:[],failed:[]},y[e]=l),t&&l.passed.push(t),n&&l.failed.push(n),1!==l.status)if(2!==l.status)if(3!==l.status){if(l.status=1,(u=m.createElement("link")).rel="stylesheet",u.type="text/css",u.id="u"+v++,u.async=!1,u.defer=!1,c=(new Date).getTime(),g.contentCssCors&&(u.crossOrigin="anonymous"),g.referrerPolicy&&Tt(yt.fromDom(u),"referrerpolicy",g.referrerPolicy),"onload"in u&&!((h=j.navigator.userAgent.match(/WebKit\/(\d*)/))&&parseInt(h[1],10)<536))u.onload=f,u.onerror=i;else{if(0<j.navigator.userAgent.indexOf("Firefox"))return(s=m.createElement("style")).textContent='@import "'+e+'"',d(),void b(s);f()}var h;b(u),u.href=e}else i();else o()}function t(t){return Xt.nu(function(e){n(t,q(e,$(Qt.value(t))),q(e,$(Qt.error(t))))})}function o(e){return e.fold(W,W)}return p=g.maxLoadTime||5e3,{load:n,loadAll:function(e,n,r){Yt(X(e,t)).get(function(e){var t=Y(e,function(e){return e.isValue()});0<t.fail.length?r(t.fail.map(o)):n(t.pass.map(o))})},_setReferrerPolicy:function(e){g.referrerPolicy=e}}}(a,{contentCssCors:u.contentCssCors,referrerPolicy:u.referrerPolicy}),R=[],D=u.schema?u.schema:pr({}),_=xr({url_converter:u.url_converter,url_converter_scope:u.url_converter_scope},u.schema),B=u.ownEvents?new kr:kr.Event,O=D.getBlockElements(),H=vi.overrideDefaults(function(){return{context:a,element:F.getRoot()}}),P=ir.decode,L=ir.encodeAllRaw,V=function(e,t,n,r){if(Mn.isArray(e)){for(var o=e.length,i=[];o--;)i[o]=V(e[o],t,n,r);return i}return!u.collect||e!==a&&e!==A||R.push([e,t,n,r]),B.bind(e,t,n,r||F)},I=function(e,t,n){var r;if(Mn.isArray(e)){r=e.length;for(var o=[];r--;)o[r]=I(e[r],t,n);return o}if(R&&(e===a||e===A))for(r=R.length;r--;){var i=R[r];e!==i[0]||t&&t!==i[1]||n&&n!==i[2]||B.unbind(i[0],i[1],i[2])}return B.unbind(e,t,n)},F={doc:a,settings:u,win:A,files:M,stdMode:!0,boxModel:!0,styleSheetLoader:e,boundEvents:R,styles:_,schema:D,events:B,isBlock:function(e){if("string"==typeof e)return!!O[e];if(e){var t=e.nodeType;if(t)return!(1!==t||!O[e.nodeName])}return!1},$:H,$$:f,root:null,clone:function(t,e){if(!Fi||1!==t.nodeType||e)return t.cloneNode(e);if(e)return null;var n=a.createElement(t.nodeName);return Vi(d(t),function(e){o(n,e.nodeName,r(t,e.nodeName))}),n},getRoot:h,getViewPort:function(e){var t=Li(e);return{x:t.x(),y:t.y(),w:t.width(),h:t.height()}},getRect:function(e){var t,n;return e=l(e),t=i(e),n=g(e),{x:t.x,y:t.y,w:n.w,h:n.h}},getSize:g,getParent:function(e,t,n){var r=v(e,t,n,!1);return r&&0<r.length?r[0]:null},getParents:v,get:l,getNext:function(e,t){return n(e,t,"nextSibling")},getPrev:function(e,t){return n(e,t,"previousSibling")},select:function(e,t){return Ao(e,l(t)||u.root_element||a,[])},is:p,add:w,create:x,createHTML:function(e,t,n){var r,o="";for(r in o+="<"+e,t)t.hasOwnProperty(r)&&null!==t[r]&&"undefined"!=typeof t[r]&&(o+=" "+r+'="'+L(t[r])+'"');return void 0!==n?o+">"+n+"</"+e+">":o+" />"},createFragment:function(e){var t,n=a.createElement("div"),r=a.createDocumentFragment();for(e&&(n.innerHTML=e);t=n.firstChild;)r.appendChild(t);return r},remove:z,setStyle:function(e,t,n){var r=K(t)?f(e).css(t,n):f(e).css(t);u.update_styles&&$i(_,r)},getStyle:m,setStyles:function(e,t){var n=f(e).css(t);u.update_styles&&$i(_,n)},removeAllAttribs:function(e){return y(e,function(e){var t,n=e.attributes;for(t=n.length-1;0<=t;t--)e.removeAttributeNode(n.item(t))})},setAttrib:o,setAttribs:b,getAttrib:r,getPos:i,parseStyle:function(e){return _.parse(e)},serializeStyle:function(e,t){return _.serialize(e,t)},addStyle:function(e){var t,n;if(F!==Ki.DOM&&a===j.document){if(T[e])return;T[e]=!0}(n=a.getElementById("mceDefaultStyles"))||((n=a.createElement("style")).id="mceDefaultStyles",n.type="text/css",(t=a.getElementsByTagName("head")[0]).firstChild?t.insertBefore(n,t.firstChild):t.appendChild(n)),n.styleSheet?n.styleSheet.cssText+=e:n.appendChild(a.createTextNode(e))},loadCSS:function(e){var n;F===Ki.DOM||a!==j.document?(e=e||"",n=a.getElementsByTagName("head")[0],Vi(e.split(","),function(e){var t;e=Mn._addCacheSuffix(e),M[e]||(M[e]=!0,t=x("link",G(G({rel:"stylesheet",type:"text/css",href:e},u.contentCssCors?{crossOrigin:"anonymous"}:{}),u.referrerPolicy?{referrerPolicy:u.referrerPolicy}:{})),n.appendChild(t))})):Ki.DOM.loadCSS(e)},addClass:function(e,t){f(e).addClass(t)},removeClass:function(e,t){E(e,t,!1)},hasClass:function(e,t){return f(e).hasClass(t)},toggleClass:E,show:function(e){f(e).show()},hide:function(e){f(e).hide()},isHidden:function(e){return"none"===f(e).css("display")},uniqueId:function(e){return(e||"mce_")+t++},setHTML:C,getOuterHTML:function(e){var t="string"==typeof e?l(e):e;return Ge.isElement(t)?t.outerHTML:vi("<div></div>").append(vi(t).clone()).html()},setOuterHTML:function(e,t){f(e).each(function(){try{if("outerHTML"in this)return void(this.outerHTML=t)}catch(e){}z(vi(this).html(t),!0)})},decode:P,encode:L,insertAfter:function(e,t){var r=l(t);return y(e,function(e){var t,n;return t=r.parentNode,(n=r.nextSibling)?t.insertBefore(e,n):t.appendChild(e),e})},replace:N,rename:function(t,e){var n;return t.nodeName!==e.toUpperCase()&&(n=x(e),Vi(d(t),function(e){o(n,e.nodeName,r(t,e.nodeName))}),N(n,t,!0)),n||t},findCommonAncestor:function(e,t){for(var n,r=e;r;){for(n=t;n&&r!==n;)n=n.parentNode;if(r===n)break;r=r.parentNode}return!r&&e.ownerDocument?e.ownerDocument.documentElement:r},toHex:function(e){return _.toHex(Mn.trim(e))},run:y,getAttribs:d,isEmpty:function(e,t){var n,r,o,i,a=0;if(e=e.firstChild){var u=new yi(e,e.parentNode),s=D?D.getWhiteSpaceElements():{};t=t||(D?D.getNonEmptyElements():null);do{if(o=e.nodeType,Ge.isElement(e)){var c=e.getAttribute("data-mce-bogus");if(c){e=u.next("all"===c);continue}if(i=e.nodeName.toLowerCase(),t&&t[i]){if("br"!==i)return!1;a++,e=u.next();continue}for(n=(r=d(e)).length;n--;)if("name"===(i=r[n].nodeName)||"data-mce-bookmark"===i)return!1}if(8===o)return!1;if(3===o&&!ji.test(e.nodeValue))return!1;if(3===o&&e.parentNode&&s[e.parentNode.nodeName]&&ji.test(e.nodeValue))return!1;e=u.next()}while(e)}return a<=1},createRng:S,nodeIndex:Wi,split:function(e,t,n){var r,o,i,a=S();if(e&&t)return a.setStart(e.parentNode,Wi(e)),a.setEnd(t.parentNode,Wi(t)),r=a.extractContents(),(a=S()).setStart(t.parentNode,Wi(t)+1),a.setEnd(e.parentNode,Wi(e)+1),o=a.extractContents(),(i=e.parentNode).insertBefore(Xn.trimNode(F,r),e),n?i.insertBefore(n,e):i.insertBefore(t,e),i.insertBefore(Xn.trimNode(F,o),e),z(e),n||t},bind:V,unbind:I,fire:function(e,t,n){return B.fire(e,t,n)},getContentEditable:k,getContentEditableParent:function(e){for(var t=h(),n=null;e&&e!==t&&null===(n=k(e));e=e.parentNode);return n},destroy:function(){if(R)for(var e=R.length;e--;){var t=R[e];B.unbind(t[0],t[1],t[2])}Ao.setDocument&&Ao.setDocument()},isChildOf:function(e,t){for(;e;){if(t===e)return!0;e=e.parentNode}return!1},dumpRng:function(e){return"startContainer: "+e.startContainer.nodeName+", startOffset: "+e.startOffset+", endContainer: "+e.endContainer.nodeName+", endOffset: "+e.endOffset}};return s=qi(_,u,function(){return F}),F}(Ri=Ki=Ki||{}).DOM=Ri(j.document),Ri.nodeIndex=Wi;var Xi=Ki,Yi=Xi.DOM,Gi=Mn.each,Ji=Mn.grep,Qi=(Zi.prototype._setReferrerPolicy=function(e){this.settings.referrerPolicy=e},Zi.prototype.loadScript=function(e,t,n){var r,o,i=Yi;o=i.uniqueId(),(r=j.document.createElement("script")).id=o,r.type="text/javascript",r.src=Mn._addCacheSuffix(e),this.settings.referrerPolicy&&i.setAttrib(r,"referrerpolicy",this.settings.referrerPolicy),r.onload=function(){i.remove(o),r&&(r.onreadystatechange=r.onload=r=null),t()},r.onerror=function(){D(n)?n():"undefined"!=typeof j.console&&j.console.log&&j.console.log("Failed to load script: "+e)},(j.document.getElementsByTagName("head")[0]||j.document.body).appendChild(r)},Zi.prototype.isDone=function(e){return 2===this.states[e]},Zi.prototype.markDone=function(e){this.states[e]=2},Zi.prototype.add=function(e,t,n,r){this.states[e]===undefined&&(this.queue.push(e),this.states[e]=0),t&&(this.scriptLoadedCallbacks[e]||(this.scriptLoadedCallbacks[e]=[]),this.scriptLoadedCallbacks[e].push({success:t,failure:r,scope:n||this}))},Zi.prototype.load=function(e,t,n,r){return this.add(e,t,n,r)},Zi.prototype.remove=function(e){delete this.states[e],delete this.scriptLoadedCallbacks[e]},Zi.prototype.loadQueue=function(e,t,n){this.loadScripts(this.queue,e,t,n)},Zi.prototype.loadScripts=function(n,e,t,r){function o(t,e){Gi(a.scriptLoadedCallbacks[e],function(e){D(e[t])&&e[t].call(e.scope)}),a.scriptLoadedCallbacks[e]=undefined}var i,a=this,u=[];a.queueLoadedCallbacks.push({success:e,failure:r,scope:t||this}),(i=function(){var e=Ji(n);if(n.length=0,Gi(e,function(e){2!==a.states[e]?3!==a.states[e]?1!==a.states[e]&&(a.states[e]=1,a.loading++,a.loadScript(e,function(){a.states[e]=2,a.loading--,o("success",e),i()},function(){a.states[e]=3,a.loading--,u.push(e),o("failure",e),i()})):o("failure",e):o("success",e)}),!a.loading){var t=a.queueLoadedCallbacks.slice(0);a.queueLoadedCallbacks.length=0,Gi(t,function(e){0===u.length?D(e.success)&&e.success.call(e.scope):D(e.failure)&&e.failure.call(e.scope,u)})}})()},Zi.ScriptLoader=new Zi,Zi);function Zi(e){void 0===e&&(e={}),this.states={},this.queue=[],this.scriptLoadedCallbacks={},this.queueLoadedCallbacks=[],this.loading=0,this.settings=e}var ea,ta={},na=Je("en"),ra={getData:function(){return se(ta,function(e){return G({},e)})},setCode:function(e){e&&na.set(e)},getCode:function(){return na.get()},add:function(e,t){var n=ta[e];for(var r in n||(ta[e]=n={}),t)n[r.toLowerCase()]=t[r]},translate:function(e){function r(e){return D(e)?Object.prototype.toString.call(e):a(e)?"":""+e}function t(e){var t=r(e),n=t.toLowerCase();return kt(i,n)?r(i[n]):t}function n(e){return e.replace(/{context:\w+}$/,"")}function o(e){return e}var i=ta[na.get()]||{},a=function(e){return""===e||null===e||e===undefined};if(a(e))return o("");if(function(e){return T(e)&&kt(e,"raw")}(e))return o(r(e.raw));if(function(e){return A(e)&&1<e.length}(e)){var u=e.slice(1);return o(n(t(e[0]).replace(/\{([0-9]+)\}/g,function(e,t){return kt(u,t)?r(u[t]):e})))}return o(n(t(e)))},isRtl:function(){return le(ta,na.get()).bind(function(e){return le(e,"_dir")}).exists(function(e){return"rtl"===e})},hasCode:function(e){return kt(ta,e)}},oa=Mn.each;function ia(){function i(e){var t;return c[e]&&(t=c[e].dependencies),t||[]}function a(e,t){return"object"==typeof t?t:"string"==typeof e?{prefix:"",resource:t,suffix:""}:{prefix:e.prefix,resource:t,suffix:e.suffix}}function u(e,n,t,r){var o=i(e);oa(o,function(e){var t=a(n,e);f(t.resource,t,undefined,undefined)}),t&&(r?t.call(r):t.call(Qi))}var r=this,o=[],s={},c={},l=[],f=function(e,t,n,r,o){if(!s[e]){var i="string"==typeof t?t:t.prefix+t.resource+t.suffix;0!==i.indexOf("/")&&-1===i.indexOf("://")&&(i=ia.baseURL+"/"+i),s[e]=i.substring(0,i.lastIndexOf("/")),c[e]?u(e,t,n,r):Qi.ScriptLoader.add(i,function(){return u(e,t,n,r)},r,o)}};return{items:o,urls:s,lookup:c,_listeners:l,get:function(e){return c[e]?c[e].instance:undefined},dependencies:i,requireLangPack:function(e,t){var n=ra.getCode();if(n&&!1!==ia.languageLoad){if(t)if(-1!==(t=","+t+",").indexOf(","+n.substr(0,2)+","))n=n.substr(0,2);else if(-1===t.indexOf(","+n+","))return;Qi.ScriptLoader.add(s[e]+"/langs/"+n+".js")}},add:function(t,e,n){o.push(e),c[t]={instance:e,dependencies:n};var r=Y(l,function(e){return e.name===t});return l=r.fail,oa(r.pass,function(e){e.callback()}),e},remove:function(e){delete s[e],delete c[e]},createUrl:a,addComponents:function(e,t){var n=r.urls[e];oa(t,function(e){Qi.ScriptLoader.add(n+"/"+e)})},load:f,waitFor:function(e,t){c.hasOwnProperty(e)?t():l.push({name:e,callback:t})}}}(ea=ia=ia||{}).PluginManager=ea(),ea.ThemeManager=ea();function aa(n,r){var o=null;return{cancel:function(){null!==o&&(j.clearTimeout(o),o=null)},throttle:function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];null===o&&(o=j.setTimeout(function(){n.apply(null,e),o=null},r))}}}function ua(e,t){var n=ge(e,t);return n===undefined||""===n?[]:n.split(" ")}function sa(e){return e.dom().classList!==undefined}function ca(e,t){return function(e,t,n){var r=ua(e,t).concat([n]);return Tt(e,t,r.join(" ")),!0}(e,"class",t)}function la(e,t){return function(e,t,n){var r=y(ua(e,t),function(e){return e!==n});return 0<r.length?Tt(e,t,r.join(" ")):pe(e,t),!1}(e,"class",t)}function fa(e,t){sa(e)?e.dom().classList.add(t):ca(e,t)}function da(e){0===(sa(e)?e.dom().classList:function(e){return ua(e,"class")}(e)).length&&pe(e,"class")}function ha(e,t){return sa(e)&&e.dom().classList.contains(t)}function ma(e,t){return function(e,t){var n=t===undefined?j.document:t.dom();return xe(n)?[]:X(n.querySelectorAll(e),yt.fromDom)}(t,e)}var ga=ia,pa=function(e,t){var n=[];return z(Re(e),function(e){t(e)&&(n=n.concat([e])),n=n.concat(pa(e,t))}),n};function va(e,t,n,r,o){return e(n,r)?k.some(n):D(o)&&o(n)?k.none():t(n,r,o)}function ya(e,t,n){for(var r=e.dom(),o=D(n)?n:$(!1);r.parentNode;){r=r.parentNode;var i=yt.fromDom(r);if(t(i))return k.some(i);if(o(i))break}return k.none()}function ba(e,t,n){return va(function(e,t){return t(e)},ya,e,t,n)}function Ca(e,t,n){return ya(e,function(e){return we(e,t)},n)}function wa(e,t){return function(e,t){var n=t===undefined?j.document:t.dom();return xe(n)?k.none():k.from(n.querySelector(e)).map(yt.fromDom)}(t,e)}function xa(e,t,n){return va(we,Ca,e,t,n)}function za(r,e){function t(e,t){return function(e,t){var n=e.dom();return!(!n||!n.hasAttribute)&&n.hasAttribute(t)}(e,t)?k.some(ge(e,t)):k.none()}var n=r.selection.getRng(),o=yt.fromDom(n.startContainer),i=yt.fromDom(r.getBody()),a=e.fold(function(){return"."+nu()},function(e){return"["+ru()+'="'+e+'"]'}),u=De(o,n.startOffset).getOr(o);return xa(u,a,function(e){return ze(e,i)}).bind(function(e){return t(e,""+ou()).bind(function(n){return t(e,""+ru()).map(function(e){var t=iu(r,n);return{uid:n,name:e,elements:t}})})})}function Ea(n,e){function a(e,t){r(e,function(e){return t(e),e})}var o=Je({}),r=function(e,t){var n=o.get(),r=t(n.hasOwnProperty(e)?n[e]:{listeners:[],previous:Je(k.none())});n[e]=r,o.set(n)},t=function(n,r){var o=null;return{cancel:function(){null!==o&&(j.clearTimeout(o),o=null)},throttle:function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];null!==o&&j.clearTimeout(o),o=j.setTimeout(function(){n.apply(null,e),o=null},r)}}}(function(){var e=o.get(),t=function(e,t){var n=B.call(e,0);return n.sort(t),n}(Et(e));z(t,function(e){r(e,function(o){var i=o.previous.get();return za(n,k.some(e)).fold(function(){i.isSome()&&(function(t){a(t,function(e){z(e.listeners,function(e){return e(!1,t)})})}(e),o.previous.set(k.none()))},function(e){var t=e.uid,n=e.name,r=e.elements;i.is(t)||(function(t,n,r){a(t,function(e){z(e.listeners,function(e){return e(!0,t,{uid:n,nodes:X(r,function(e){return e.dom()})})})})}(n,t,r),o.previous.set(k.some(t)))}),{previous:o.previous,listeners:o.listeners}})})},30);return n.on("remove",function(){t.cancel()}),n.on("NodeChange",function(){t.throttle()}),{addListener:function(e,t){r(e,function(e){return{previous:e.previous,listeners:e.listeners.concat([t])}})}}}function Na(e,n){e.on("init",function(){e.serializer.addNodeFilter("span",function(e){z(e,function(t){(function(e){return k.from(e.attr(ru())).bind(n.lookup)})(t).each(function(e){!1===e.persistent&&t.unwrap()})})})})}function Sa(e,t){return yt.fromDom(e.dom().cloneNode(t))}function ka(e){return Sa(e,!1)}function Ta(e){return Sa(e,!0)}function Aa(e,t){var n=Ee(e).dom(),r=yt.fromDom(n.createDocumentFragment()),o=function(e,t){var n=(t||j.document).createElement("div");return n.innerHTML=e,Re(yt.fromDom(n))}(t,n);zi(r,o),Ei(e),Di(e,r)}function Ma(e){return du(e)&&(e=e.parentNode),fu(e)&&e.hasAttribute("data-mce-caret")}function Ra(e){return du(e)&&su(e.data)}function Da(e){return Ma(e)||Ra(e)}function _a(e){return e.firstChild!==e.lastChild||!Ge.isBr(e.firstChild)}function Ba(e){var t=e.container();return!(!e||!Ge.isText(t))&&(t.data.charAt(e.offset())===cu||e.isAtStart()&&Ra(t.previousSibling))}function Oa(e){var t=e.container();return!(!e||!Ge.isText(t))&&(t.data.charAt(e.offset()-1)===cu||e.isAtEnd()&&Ra(t.nextSibling))}function Ha(e,t,n){var r,o;return(r=t.ownerDocument.createElement(e)).setAttribute("data-mce-caret",n?"before":"after"),r.setAttribute("data-mce-bogus","all"),r.appendChild(function(){var e=j.document.createElement("br");return e.setAttribute("data-mce-bogus","1"),e}()),o=t.parentNode,n?o.insertBefore(r,t):t.nextSibling?o.insertBefore(r,t.nextSibling):o.appendChild(r),r}function Pa(e){return e&&e.hasAttribute("data-mce-caret")?(function(e){var t=e.getElementsByTagName("br"),n=t[t.length-1];Ge.isBogus(n)&&n.parentNode.removeChild(n)}(e),e.removeAttribute("data-mce-caret"),e.removeAttribute("data-mce-bogus"),e.removeAttribute("style"),e.removeAttribute("_moz_abspos"),e):null}function La(e){return!xu(e)&&(yu(e)?!bu(e.parentNode):Cu(e)||vu(e)||wu(e)||zu(e))}function Va(e,t){return La(e)&&function(e,t){for(e=e.parentNode;e&&e!==t;e=e.parentNode){if(zu(e))return!1;if(gu(e))return!0}return!0}(e,t)}function Ia(e){return e?{left:Eu(e.left),top:Eu(e.top),bottom:Eu(e.bottom),right:Eu(e.right),width:Eu(e.width),height:Eu(e.height)}:{left:0,top:0,bottom:0,right:0,width:0,height:0}}function Fa(e,t){return e=Ia(e),t||(e.left=e.left+e.width),e.right=e.left,e.width=0,e}function Ua(e,t,n){return 0<=e&&e<=Math.min(t.height,n.height)/2}function ja(e,t){return e.bottom-e.height/2<t.top||!(e.top>t.bottom)&&Ua(t.top-e.bottom,e,t)}function qa(e,t){return e.top>t.bottom||!(e.bottom<t.top)&&Ua(t.bottom-e.top,e,t)}function $a(e,t,n){return t>=e.left&&t<=e.right&&n>=e.top&&n<=e.bottom}function Wa(e){var t=e.startContainer,n=e.startOffset;return t.hasChildNodes()&&e.endOffset===n+1?t.childNodes[n]:null}function Ka(e,t){return 1===e.nodeType&&e.hasChildNodes()&&(t>=e.childNodes.length&&(t=e.childNodes.length-1),e=e.childNodes[t]),e}function Xa(e){return"string"==typeof e&&768<=e.charCodeAt(0)&&Nu.test(e)}function Ya(e,t,n){return e.isSome()&&t.isSome()?k.some(n(e.getOrDie(),t.getOrDie())):k.none()}function Ga(e){return e&&/[\r\n\t ]/.test(e)}function Ja(e){return!!e.setStart&&!!e.setEnd}function Qa(e){var t,n=e.startContainer,r=e.startOffset;return!!(Ga(e.toString())&&Bu(n.parentNode)&&Ge.isText(n)&&(t=n.data,Ga(t[r-1])||Ga(t[r+1])))}function Za(e){return 0===e.left&&0===e.right&&0===e.top&&0===e.bottom}function eu(e,t){var n=Fa(e,t);return n.width=1,n.right=n.left+1,n}var tu,nu=$("mce-annotation"),ru=$("data-mce-annotation"),ou=$("data-mce-annotation-uid"),iu=function(e,t){var n=yt.fromDom(e.getBody());return ma(n,"["+ou()+'="'+t+'"]')},au=0,uu="\ufeff",su=function(e){return e===uu},cu=uu,lu=function(e){return e.replace(new RegExp(uu,"g"),"")},fu=Ge.isElement,du=Ge.isText,hu=function(e){return du(e)&&e.data[0]===cu},mu=function(e){return du(e)&&e.data[e.data.length-1]===cu},gu=Ge.isContentEditableTrue,pu=Ge.isContentEditableFalse,vu=Ge.isBr,yu=Ge.isText,bu=Ge.matchNodeNames(["script","style","textarea"]),Cu=Ge.matchNodeNames(["img","input","textarea","hr","iframe","video","audio","object"]),wu=Ge.matchNodeNames(["table"]),xu=Da,zu=function(e){return!1===function(e){return Ge.isElement(e)&&"true"===e.getAttribute("unselectable")}(e)&&pu(e)},Eu=Math.round,Nu=new RegExp("[\u0300-\u036f\u0483-\u0487\u0488-\u0489\u0591-\u05bd\u05bf\u05c1-\u05c2\u05c4-\u05c5\u05c7\u0610-\u061a\u064b-\u065f\u0670\u06d6-\u06dc\u06df-\u06e4\u06e7-\u06e8\u06ea-\u06ed\u0711\u0730-\u074a\u07a6-\u07b0\u07eb-\u07f3\u0816-\u0819\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0859-\u085b\u08e3-\u0902\u093a\u093c\u0941-\u0948\u094d\u0951-\u0957\u0962-\u0963\u0981\u09bc\u09be\u09c1-\u09c4\u09cd\u09d7\u09e2-\u09e3\u0a01-\u0a02\u0a3c\u0a41-\u0a42\u0a47-\u0a48\u0a4b-\u0a4d\u0a51\u0a70-\u0a71\u0a75\u0a81-\u0a82\u0abc\u0ac1-\u0ac5\u0ac7-\u0ac8\u0acd\u0ae2-\u0ae3\u0b01\u0b3c\u0b3e\u0b3f\u0b41-\u0b44\u0b4d\u0b56\u0b57\u0b62-\u0b63\u0b82\u0bbe\u0bc0\u0bcd\u0bd7\u0c00\u0c3e-\u0c40\u0c46-\u0c48\u0c4a-\u0c4d\u0c55-\u0c56\u0c62-\u0c63\u0c81\u0cbc\u0cbf\u0cc2\u0cc6\u0ccc-\u0ccd\u0cd5-\u0cd6\u0ce2-\u0ce3\u0d01\u0d3e\u0d41-\u0d44\u0d4d\u0d57\u0d62-\u0d63\u0dca\u0dcf\u0dd2-\u0dd4\u0dd6\u0ddf\u0e31\u0e34-\u0e3a\u0e47-\u0e4e\u0eb1\u0eb4-\u0eb9\u0ebb-\u0ebc\u0ec8-\u0ecd\u0f18-\u0f19\u0f35\u0f37\u0f39\u0f71-\u0f7e\u0f80-\u0f84\u0f86-\u0f87\u0f8d-\u0f97\u0f99-\u0fbc\u0fc6\u102d-\u1030\u1032-\u1037\u1039-\u103a\u103d-\u103e\u1058-\u1059\u105e-\u1060\u1071-\u1074\u1082\u1085-\u1086\u108d\u109d\u135d-\u135f\u1712-\u1714\u1732-\u1734\u1752-\u1753\u1772-\u1773\u17b4-\u17b5\u17b7-\u17bd\u17c6\u17c9-\u17d3\u17dd\u180b-\u180d\u18a9\u1920-\u1922\u1927-\u1928\u1932\u1939-\u193b\u1a17-\u1a18\u1a1b\u1a56\u1a58-\u1a5e\u1a60\u1a62\u1a65-\u1a6c\u1a73-\u1a7c\u1a7f\u1ab0-\u1abd\u1abe\u1b00-\u1b03\u1b34\u1b36-\u1b3a\u1b3c\u1b42\u1b6b-\u1b73\u1b80-\u1b81\u1ba2-\u1ba5\u1ba8-\u1ba9\u1bab-\u1bad\u1be6\u1be8-\u1be9\u1bed\u1bef-\u1bf1\u1c2c-\u1c33\u1c36-\u1c37\u1cd0-\u1cd2\u1cd4-\u1ce0\u1ce2-\u1ce8\u1ced\u1cf4\u1cf8-\u1cf9\u1dc0-\u1df5\u1dfc-\u1dff\u200c-\u200d\u20d0-\u20dc\u20dd-\u20e0\u20e1\u20e2-\u20e4\u20e5-\u20f0\u2cef-\u2cf1\u2d7f\u2de0-\u2dff\u302a-\u302d\u302e-\u302f\u3099-\u309a\ua66f\ua670-\ua672\ua674-\ua67d\ua69e-\ua69f\ua6f0-\ua6f1\ua802\ua806\ua80b\ua825-\ua826\ua8c4\ua8e0-\ua8f1\ua926-\ua92d\ua947-\ua951\ua980-\ua982\ua9b3\ua9b6-\ua9b9\ua9bc\ua9e5\uaa29-\uaa2e\uaa31-\uaa32\uaa35-\uaa36\uaa43\uaa4c\uaa7c\uaab0\uaab2-\uaab4\uaab7-\uaab8\uaabe-\uaabf\uaac1\uaaec-\uaaed\uaaf6\uabe5\uabe8\uabed\ufb1e\ufe00-\ufe0f\ufe20-\ufe2f\uff9e-\uff9f]"),Su=[].slice,ku=function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];var n=Su.call(arguments);return function(e){for(var t=0;t<n.length;t++)if(!n[t](e))return!1;return!0}},Tu=function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];var n=Su.call(arguments);return function(e){for(var t=0;t<n.length;t++)if(n[t](e))return!0;return!1}},Au=Ge.isElement,Mu=La,Ru=Ge.matchStyleValues("display","block table"),Du=Ge.matchStyleValues("float","left right"),_u=ku(Au,Mu,s(Du)),Bu=s(Ge.matchStyleValues("white-space","pre pre-line pre-wrap")),Ou=Ge.isText,Hu=Ge.isBr,Pu=Xi.nodeIndex,Lu=Ka,Vu=function(e){return"createRange"in e?e.createRange():Xi.DOM.createRng()},Iu=function(e){var t,n;return t=0<(n=e.getClientRects()).length?Ia(n[0]):Ia(e.getBoundingClientRect()),!Ja(e)&&Hu(e)&&Za(t)?function(e){var t,n=e.ownerDocument,r=Vu(n),o=n.createTextNode("\xa0"),i=e.parentNode;return i.insertBefore(o,e),r.setStart(o,0),r.setEnd(o,1),t=Ia(r.getBoundingClientRect()),i.removeChild(o),t}(e):Za(t)&&Ja(e)?function(e){var t=e.startContainer,n=e.endContainer,r=e.startOffset,o=e.endOffset;if(t===n&&Ge.isText(n)&&0===r&&1===o){var i=e.cloneRange();return i.setEndAfter(n),Iu(i)}return null}(e):t},Fu=function(e){function r(e){0!==e.height&&(0<i.length&&function(e,t){return e.left===t.left&&e.top===t.top&&e.bottom===t.bottom&&e.right===t.right}(e,i[i.length-1])||i.push(e))}function t(e,t){var n=Vu(e.ownerDocument);if(t<e.data.length){if(Xa(e.data[t]))return i;if(Xa(e.data[t-1])&&(n.setStart(e,t),n.setEnd(e,t+1),!Qa(n)))return r(eu(Iu(n),!1)),i}0<t&&(n.setStart(e,t-1),n.setEnd(e,t),Qa(n)||r(eu(Iu(n),!1))),t<e.data.length&&(n.setStart(e,t),n.setEnd(e,t+1),Qa(n)||r(eu(Iu(n),!0)))}var n,o,i=[];if(Ou(e.container()))return t(e.container(),e.offset()),i;if(Au(e.container()))if(e.isAtEnd())o=Lu(e.container(),e.offset()),Ou(o)&&t(o,o.data.length),_u(o)&&!Hu(o)&&r(eu(Iu(o),!1));else{if(o=Lu(e.container(),e.offset()),Ou(o)&&t(o,0),_u(o)&&e.isAtEnd())return r(eu(Iu(o),!1)),i;n=Lu(e.container(),e.offset()-1),_u(n)&&!Hu(n)&&(!Ru(n)&&!Ru(o)&&_u(o)||r(eu(Iu(n),!1))),_u(o)&&r(eu(Iu(o),!0))}return i};function Uu(t,n,e){function r(){return e=e||Fu(Uu(t,n))}return{container:$(t),offset:$(n),toRange:function(){var e;return(e=Vu(t.ownerDocument)).setStart(t,n),e.setEnd(t,n),e},getClientRects:r,isVisible:function(){return 0<r().length},isAtStart:function(){return Ou(t),0===n},isAtEnd:function(){return Ou(t)?n>=t.data.length:n>=t.childNodes.length},isEqual:function(e){return e&&t===e.container()&&n===e.offset()},getNode:function(e){return Lu(t,e?n-1:n)}}}(tu=Uu=Uu||{}).fromRangeStart=function(e){return tu(e.startContainer,e.startOffset)},tu.fromRangeEnd=function(e){return tu(e.endContainer,e.endOffset)},tu.after=function(e){return tu(e.parentNode,Pu(e)+1)},tu.before=function(e){return tu(e.parentNode,Pu(e))},tu.isAbove=function(e,t){return Ya(E(t.getClientRects()),N(e.getClientRects()),ja).getOr(!1)},tu.isBelow=function(e,t){return Ya(N(t.getClientRects()),E(e.getClientRects()),qa).getOr(!1)},tu.isAtStart=function(e){return!!e&&e.isAtStart()},tu.isAtEnd=function(e){return!!e&&e.isAtEnd()},tu.isTextPosition=function(e){return!!e&&Ge.isText(e.container())},tu.isElementPosition=function(e){return!1===tu.isTextPosition(e)};function ju(t){return function(e){return t===e}}function qu(e){return(_s(e)?"text()":e.nodeName.toLowerCase())+"["+function(e){var r,t,n;return r=Ps(Hs(e)),t=kn.findIndex(r,ju(e),e),r=r.slice(0,t+1),n=kn.reduce(r,function(e,t,n){return _s(t)&&_s(r[n-1])&&e++,e},0),r=kn.filter(r,Ge.matchNodeNames([e.nodeName])),(t=kn.findIndex(r,ju(e),e))-n}(e)+"]"}function $u(e,t){var n,r,o,i,a,u=[];return n=t.container(),r=t.offset(),_s(n)?o=function(e,t){for(;(e=e.previousSibling)&&_s(e);)t+=e.data.length;return t}(n,r):(r>=(i=n.childNodes).length?(o="after",r=i.length-1):o="before",n=i[r]),u.push(qu(n)),a=function(e,t,n){var r=[];for(t=t.parentNode;t!==e&&(!n||!n(t));t=t.parentNode)r.push(t);return r}(e,n),a=kn.filter(a,s(Ge.isBogus)),(u=u.concat(kn.map(a,function(e){return qu(e)}))).reverse().join("/")+","+o}function Wu(e,t){var n,r,o;return t?(t=(n=t.split(","))[0].split("/"),o=1<n.length?n[1]:"before",(r=kn.reduce(t,function(e,t){return(t=/([\w\-\(\)]+)\[([0-9]+)\]/.exec(t))?("text()"===t[1]&&(t[1]="#text"),function(e,t,n){var r=Ps(e);return r=kn.filter(r,function(e,t){return!_s(e)||!_s(r[t-1])}),(r=kn.filter(r,Ge.matchNodeNames([t])))[n]}(e,t[1],parseInt(t[2],10))):null},e))?_s(r)?function(e,t){for(var n,r=e,o=0;_s(r);){if(n=r.data.length,o<=t&&t<=o+n){e=r,t-=o;break}if(!_s(r.nextSibling)){e=r,t=n;break}o+=n,r=r.nextSibling}return _s(e)&&t>e.data.length&&(t=e.data.length),Ds(e,t)}(r,parseInt(o,10)):(o="after"===o?Os(r)+1:Os(r),Ds(r.parentNode,o)):null):null}function Ku(e,t){Ge.isText(t)&&0===t.data.length&&e.remove(t)}function Xu(e,t,n){Ge.isDocumentFragment(n)?function(t,e,n){var r=k.from(n.firstChild),o=k.from(n.lastChild);e.insertNode(n),r.each(function(e){return Ku(t,e.previousSibling)}),o.each(function(e){return Ku(t,e.nextSibling)})}(e,t,n):function(e,t,n){t.insertNode(n),Ku(e,n.previousSibling),Ku(e,n.nextSibling)}(e,t,n)}function Yu(e,t,n,r,o){var i,a=r[o?"startContainer":"endContainer"],u=r[o?"startOffset":"endOffset"],s=[],c=0,l=e.getRoot();for(Ge.isText(a)?s.push(n?function(e,t,n){var r,o;for(o=e(t.data.slice(0,n)).length,r=t.previousSibling;r&&Ge.isText(r);r=r.previousSibling)o+=e(r.data).length;return o}(t,a,u):u):(u>=(i=a.childNodes).length&&i.length&&(c=1,u=Math.max(0,i.length-1)),s.push(e.nodeIndex(i[u],n)+c));a&&a!==l;a=a.parentNode)s.push(e.nodeIndex(a,n));return s}function Gu(e,t,n){var r=0;return Mn.each(e.select(t),function(e){if("all"!==e.getAttribute("data-mce-bogus"))return e!==n&&void r++}),r}function Ju(e,t){var n,r,o,i=t?"start":"end";n=e[i+"Container"],r=e[i+"Offset"],Ge.isElement(n)&&"TR"===n.nodeName&&(n=(o=n.childNodes)[Math.min(t?r:r-1,o.length-1)])&&(r=t?0:n.childNodes.length,e["set"+(t?"Start":"End")](n,r))}function Qu(e){return Ju(e,!0),Ju(e,!1),e}function Zu(e,t){var n;if(Ge.isElement(e)&&(e=Ka(e,t),Ls(e)))return e;if(Da(e)){if(Ge.isText(e)&&Ma(e)&&(e=e.parentNode),n=e.previousSibling,Ls(n))return n;if(n=e.nextSibling,Ls(n))return n}}function es(e,t,n){var r=n.getNode(),o=r?r.nodeName:null,i=n.getRng();if(Ls(r)||"IMG"===o)return{name:o,index:Gu(n.dom,o,r)};var a=function(e){return Zu(e.startContainer,e.startOffset)||Zu(e.endContainer,e.endOffset)}(i);return a?{name:o=a.tagName,index:Gu(n.dom,o,a)}:function(e,t,n,r){var o=t.dom,i={};return i.start=Yu(o,e,n,r,!0),t.isCollapsed()||(i.end=Yu(o,e,n,r,!1)),i}(e,n,t,i)}function ts(e,t,n){var r={"data-mce-type":"bookmark",id:t,style:"overflow:hidden;line-height:0px"};return n?e.create("span",r,"&#xFEFF;"):e.create("span",r)}function ns(e,t){var n=e.dom,r=e.getRng(),o=n.uniqueId(),i=e.isCollapsed(),a=e.getNode(),u=a.nodeName;if("IMG"===u)return{name:u,index:Gu(n,u,a)};var s=Qu(r.cloneRange());if(!i){s.collapse(!1);var c=ts(n,o+"_end",t);Xu(n,s,c)}(r=Qu(r)).collapse(!0);var l=ts(n,o+"_start",t);return Xu(n,r,l),e.moveToBookmark({id:o,keep:1}),{id:o}}function rs(e){return Ge.isElement(e)&&e.id===Is}function os(e,t){for(;t&&t!==e;){if(t.id===Is)return t;t=t.parentNode}return null}function is(e){var t=e.parentNode;t&&t.removeChild(e)}function as(e,t){0===t.length?is(e):e.nodeValue=t}function us(e){var t=lu(e);return{count:e.length-t.length,text:t}}function ss(e,t){return js(e),t}function cs(e,t){var n=t.container(),r=function(e,t){var n=f(e,t);return-1===n?k.none():k.some(n)}(P(n.childNodes),e).map(function(e){return e<t.offset()?Ds(n,t.offset()-1):t}).getOr(t);return js(e),r}function ls(e,t){return Us(e)&&t.container()===e?function(e,t){var n=us(e.data.substr(0,t.offset())),r=us(e.data.substr(t.offset())),o=n.text+r.text;return 0<o.length?(as(e,o),Ds(e,t.offset()-n.count)):t}(e,t):ss(e,t)}function fs(e,t,n){var r,o,i,a,u,s=Fa(t.getBoundingClientRect(),n);return i="BODY"===e.tagName?(r=e.ownerDocument.documentElement,o=e.scrollLeft||r.scrollLeft,e.scrollTop||r.scrollTop):(u=e.getBoundingClientRect(),o=e.scrollLeft-u.left,e.scrollTop-u.top),s.left+=o,s.right+=o,s.top+=i,s.bottom+=i,s.width=1,0<(a=t.offsetWidth-t.clientWidth)&&(n&&(a*=-1),s.left+=a,s.right+=a),s}function ds(i,a,e){var t,u,s=Je(k.none()),c=function(){!function(e){var t,n,r,o,i;for(t=vi("*[contentEditable=false]",e),o=0;o<t.length;o++)r=(n=t[o]).previousSibling,mu(r)&&(1===(i=r.data).length?r.parentNode.removeChild(r):r.deleteData(i.length-1,1)),r=n.nextSibling,hu(r)&&(1===(i=r.data).length?r.parentNode.removeChild(r):r.deleteData(0,1))}(i),u&&(qs.remove(u),u=null),s.get().each(function(e){vi(e.caret).remove(),s.set(k.none())}),pn.clearInterval(t)},l=function(){t=pn.setInterval(function(){e()?vi("div.mce-visual-caret",i).toggleClass("mce-visual-caret-hidden"):vi("div.mce-visual-caret",i).addClass("mce-visual-caret-hidden")},500)};return{show:function(t,e){var n,r;if(c(),function(e){return Ge.isElement(e)&&/^(TD|TH)$/i.test(e.tagName)}(e))return null;if(!a(e))return u=function(e,t){var n,r,o;if(r=e.ownerDocument.createTextNode(cu),o=e.parentNode,t){if(n=e.previousSibling,du(n)){if(Da(n))return n;if(mu(n))return n.splitText(n.data.length-1)}o.insertBefore(r,e)}else{if(n=e.nextSibling,du(n)){if(Da(n))return n;if(hu(n))return n.splitText(1),n}e.nextSibling?o.insertBefore(r,e.nextSibling):o.appendChild(r)}return r}(e,t),r=e.ownerDocument.createRange(),Ws(u.nextSibling)?(r.setStart(u,0),r.setEnd(u,0)):(r.setStart(u,1),r.setEnd(u,1)),r;u=Ha("p",e,t),n=fs(i,e,t),vi(u).css("top",n.top);var o=vi('<div class="mce-visual-caret" data-mce-bogus="all"></div>').css(n).appendTo(i)[0];return s.set(k.some({caret:o,element:e,before:t})),s.get().each(function(e){t&&vi(e.caret).addClass("mce-visual-caret-before")}),l(),(r=e.ownerDocument.createRange()).setStart(u,0),r.setEnd(u,0),r},hide:c,getCss:function(){return".mce-visual-caret {position: absolute;background-color: black;background-color: currentcolor;}.mce-visual-caret-hidden {display: none;}*[data-mce-caret] {position: absolute;left: -1000px;right: auto;top: 0;margin: 0;padding: 0;}"},reposition:function(){s.get().each(function(e){var t=fs(i,e.element,e.before);vi(e.caret).css(G({},t))})},destroy:function(){return pn.clearInterval(t)}}}function hs(){return $s.isIE()||$s.isEdge()||$s.isFirefox()}function ms(e){return Ws(e)||Ge.isTable(e)&&hs()}function gs(e){return 0<e}function ps(e){return e<0}function vs(e,t){for(var n;n=e(t);)if(!Gs(n))return n;return null}function ys(e,t,n,r,o){var i=new yi(e,r);if(ps(t)){if((Ks(e)||Gs(e))&&n(e=vs(i.prev,!0)))return e;for(;e=vs(i.prev,o);)if(n(e))return e}if(gs(t)){if((Ks(e)||Gs(e))&&n(e=vs(i.next,!0)))return e;for(;e=vs(i.next,o);)if(n(e))return e}return null}function bs(e,t){for(;e&&e!==t;){if(Xs(e))return e;e=e.parentNode}return null}function Cs(e,t,n){return bs(e.container(),n)===bs(t.container(),n)}function ws(e,t){var n,r;return t?(n=t.container(),r=t.offset(),Js(n)?n.childNodes[r+e]:null):null}function xs(e,t){var n=t.ownerDocument.createRange();return e?(n.setStartBefore(t),n.setEndBefore(t)):(n.setStartAfter(t),n.setEndAfter(t)),n}function zs(e,t,n){var r,o,i,a;for(o=e?"previousSibling":"nextSibling";n&&n!==t;){if(r=n[o],Ys(r)&&(r=r[o]),Ks(r)){if(a=n,bs(r,i=t)===bs(a,i))return r;break}if(Qs(r))break;n=n.parentNode}return null}function Es(e,t,n){var r,o,i,a,u=d(zs,!0,t),s=d(zs,!1,t);if(o=n.startContainer,i=n.startOffset,Ma(o)){if(Js(o)||(o=o.parentNode),"before"===(a=o.getAttribute("data-mce-caret"))&&(r=o.nextSibling,ms(r)))return Zs(r);if("after"===a&&(r=o.previousSibling,ms(r)))return ec(r)}if(!n.collapsed)return n;if(Ge.isText(o)){if(Ys(o)){if(1===e){if(r=s(o))return Zs(r);if(r=u(o))return ec(r)}if(-1===e){if(r=u(o))return ec(r);if(r=s(o))return Zs(r)}return n}if(mu(o)&&i>=o.data.length-1)return 1===e&&(r=s(o))?Zs(r):n;if(hu(o)&&i<=1)return-1===e&&(r=u(o))?ec(r):n;if(i===o.data.length)return(r=s(o))?Zs(r):n;if(0===i)return(r=u(o))?ec(r):n}return n}function Ns(e,t){return k.from(ws(e?0:-1,t)).filter(Ks)}function Ss(e,t,n){var r=Es(e,t,n);return-1===e?Uu.fromRangeStart(r):Uu.fromRangeEnd(r)}function ks(e){return k.from(e.getNode()).map(yt.fromDom)}function Ts(e,t){for(;t=e(t);)if(t.isVisible())return t;return t}function As(e,t){var n=Cs(e,t);return!(n||!Ge.isBr(e.getNode()))||n}var Ms,Rs,Ds=Uu,_s=Ge.isText,Bs=Ge.isBogus,Os=Xi.nodeIndex,Hs=function(e){var t=e.parentNode;return Bs(t)?Hs(t):t},Ps=function(e){return e?kn.reduce(e.childNodes,function(e,t){return Bs(t)&&"BR"!==t.nodeName?e=e.concat(Ps(t)):e.push(t),e},[]):[]},Ls=Ge.isContentEditableFalse,Vs={getBookmark:function(e,t,n){return 2===t?es(lu,n,e):3===t?function(e){var t=e.getRng();return{start:$u(e.dom.getRoot(),Ds.fromRangeStart(t)),end:$u(e.dom.getRoot(),Ds.fromRangeEnd(t))}}(e):t?function(e){return{rng:e.getRng()}}(e):ns(e,!1)},getUndoBookmark:d(es,W,!0),getPersistentBookmark:ns},Is="_mce_caret",Fs=Ge.isElement,Us=Ge.isText,js=function(e){if(Fs(e)&&Da(e)&&(_a(e)?e.removeAttribute("data-mce-caret"):is(e)),Us(e)){var t=lu(function(e){try{return e.nodeValue}catch(t){return""}}(e));as(e,t)}},qs={removeAndReposition:function(e,t){return Ds.isTextPosition(t)?ls(e,t):function(e,t){return t.container()===e.parentNode?cs(e,t):ss(e,t)}(e,t)},remove:js},$s=oe().browser,Ws=Ge.isContentEditableFalse,Ks=Ge.isContentEditableFalse,Xs=Ge.matchStyleValues("display","block table table-cell table-caption list-item"),Ys=Da,Gs=Ma,Js=Ge.isElement,Qs=La,Zs=d(xs,!0),ec=d(xs,!1);(Rs=Ms=Ms||{})[Rs.Backwards=-1]="Backwards",Rs[Rs.Forwards=1]="Forwards";function tc(e,t){return e.hasChildNodes()&&t<e.childNodes.length?e.childNodes[t]:null}function nc(e,t){if(gs(e)){if(Ac(t.previousSibling)&&!Sc(t.previousSibling))return Ds.before(t);if(Sc(t))return Ds(t,0)}if(ps(e)){if(Ac(t.nextSibling)&&!Sc(t.nextSibling))return Ds.after(t);if(Sc(t))return Ds(t,t.data.length)}return ps(e)?Tc(t)?Ds.before(t):Ds.after(t):Ds.before(t)}function rc(t){return{next:function(e){return Dc(Ms.Forwards,e,t)},prev:function(e){return Dc(Ms.Backwards,e,t)}}}function oc(e){return Ds.isTextPosition(e)?0===e.offset():La(e.getNode())}function ic(e){if(Ds.isTextPosition(e)){var t=e.container();return e.offset()===t.data.length}return La(e.getNode(!0))}function ac(e,t){return!Ds.isTextPosition(e)&&!Ds.isTextPosition(t)&&e.getNode()===t.getNode(!0)}function uc(e,t,n){return e?!ac(t,n)&&!function(e){return!Ds.isTextPosition(e)&&Ge.isBr(e.getNode())}(t)&&ic(t)&&oc(n):!ac(n,t)&&oc(t)&&ic(n)}function sc(t,n,r){return _c(t,n,r).bind(function(e){return Cs(r,e,n)&&uc(t,r,e)?_c(t,n,e):k.some(e)})}function cc(e,t){var n=e?t.firstChild:t.lastChild;return Ge.isText(n)?k.some(Ds(n,e?0:n.data.length)):n?La(n)?k.some(e?Ds.before(n):function(e){return Ge.isBr(e)?Ds.before(e):Ds.after(e)}(n)):function(e,t,n){var r=e?Ds.before(n):Ds.after(n);return _c(e,t,r)}(e,t,n):k.none()}function lc(e,t){return Ge.isElement(t)&&e.isBlock(t)&&!t.innerHTML&&!Nn.ie&&(t.innerHTML='<br data-mce-bogus="1" />'),t}function fc(e,t){return Pc.lastPositionIn(e).fold(function(){return!1},function(e){return t.setStart(e.container(),e.offset()),t.setEnd(e.container(),e.offset()),!0})}function dc(e,t,n){return!(!function(e){return!1===e.hasChildNodes()}(t)||!os(e,t))&&(function(e,t){var n=e.ownerDocument.createTextNode(cu);e.appendChild(n),t.setStart(n,0),t.setEnd(n,0)}(t,n),!0)}function hc(e,t,n,r){var o,i,a,u,s=n[t?"start":"end"],c=e.getRoot();if(s){for(a=s[0],i=c,o=s.length-1;1<=o;o--){if(u=i.childNodes,dc(c,i,r))return!0;if(s[o]>u.length-1)return!!dc(c,i,r)||fc(i,r);i=u[s[o]]}3===i.nodeType&&(a=Math.min(s[0],i.nodeValue.length)),1===i.nodeType&&(a=Math.min(s[0],i.childNodes.length)),t?r.setStart(i,a):r.setEnd(i,a)}return!0}function mc(e){return Ge.isText(e)&&0<e.data.length}function gc(e,t,n){var r,o,i,a,u,s,c=e.get(n.id+"_"+t),l=n.keep;if(c){if(r=c.parentNode,s=(u=(o="start"===t?l?c.hasChildNodes()?(r=c.firstChild,1):mc(c.nextSibling)?(r=c.nextSibling,0):mc(c.previousSibling)?(r=c.previousSibling,c.previousSibling.data.length):(r=c.parentNode,e.nodeIndex(c)+1):e.nodeIndex(c):l?c.hasChildNodes()?(r=c.firstChild,1):mc(c.previousSibling)?(r=c.previousSibling,c.previousSibling.data.length):(r=c.parentNode,e.nodeIndex(c)):e.nodeIndex(c),r),o),!l){for(a=c.previousSibling,i=c.nextSibling,Mn.each(Mn.grep(c.childNodes),function(e){Ge.isText(e)&&(e.nodeValue=e.nodeValue.replace(/\uFEFF/g,""))});c=e.get(n.id+"_"+t);)e.remove(c,!0);a&&i&&a.nodeType===i.nodeType&&Ge.isText(a)&&!Nn.opera&&(o=a.nodeValue.length,a.appendData(i.nodeValue),e.remove(i),s=(u=a,o))}return k.some(Ds(u,s))}return k.none()}function pc(e){return e&&/^(IMG)$/.test(e.nodeName)}function vc(e,t,n){return"color"!==n&&"backgroundColor"!==n||(t=e.toHex(t)),"fontWeight"===n&&700===t&&(t="bold"),"fontFamily"===n&&(t=t.replace(/[\'\"]/g,"").replace(/,\s+/g,",")),""+t}function yc(e,t){for(void 0===t&&(t=3===e.nodeType?e.length:e.childNodes.length);e&&e.hasChildNodes();)(e=e.childNodes[t])&&(t=3===e.nodeType?e.length:e.childNodes.length);return{node:e,offset:t}}function bc(e,t){for(var n=t;n;){if(1===n.nodeType&&e.getContentEditable(n))return"false"===e.getContentEditable(n)?n:t;n=n.parentNode}return t}function Cc(e,t,n,r){var o,i,a=n.nodeValue;return void 0===r&&(r=e?a.length:0),e?(o=a.lastIndexOf(" ",r),-1!==(o=(i=a.lastIndexOf("\xa0",r))<o?o:i)&&!t&&(o<r||!e)&&o<=a.length&&o++):(o=a.indexOf(" ",r),i=a.indexOf("\xa0",r),o=-1!==o&&(-1===i||o<i)?o:i),o}function wc(e,t,n,r,o,i){var a,u,s;if(3===n.nodeType){if(-1!==(u=Cc(o,i,n,r)))return{container:n,offset:u};s=n}for(var c=new yi(n,e.getParent(n,e.isBlock)||t);a=c[o?"prev":"next"]();)if(3!==a.nodeType||qc(a.parentNode)){if(e.isBlock(a)||jc.isEq(a,"BR"))break}else if(-1!==(u=Cc(o,i,s=a)))return{container:a,offset:u};if(s)return{container:s,offset:r=o?0:s.length}}function xc(e,t,n,r,o){var i,a,u,s;for(3===r.nodeType&&0===r.nodeValue.length&&r[o]&&(r=r[o]),i=$c(e,r),a=0;a<i.length;a++)for(u=0;u<t.length;u++)if(!("collapsed"in(s=t[u])&&s.collapsed!==n.collapsed)&&e.is(i[a],s.selector))return i[a];return r}function zc(t,e,n,r){var o,i=t.dom,a=i.getRoot();if(e[0].wrapper||(o=i.getParent(n,e[0].block,a)),!o){var u=i.getParent(n,"LI,TD,TH");o=i.getParent(3===n.nodeType?n.parentNode:n,function(e){return e!==a&&Kc(t,e)},u)}if(o&&e[0].wrapper&&(o=$c(i,o,"ul,ol").reverse()[0]||o),!o)for(o=n;o[r]&&!i.isBlock(o[r])&&(o=o[r],!jc.isEq(o,"br")););return o||n}function Ec(e,t,n,r,o,i,a){var u,s,c,l,f,d;if(u=s=a?n:o,l=a?"previousSibling":"nextSibling",f=e.getRoot(),3===u.nodeType&&!Wc(u)&&(a?0<r:i<u.nodeValue.length))return u;for(;;){if(!t[0].block_expand&&e.isBlock(s))return s;for(c=s[l];c;c=c[l])if(!qc(c)&&!Wc(c)&&("BR"!==(d=c).nodeName||!d.getAttribute("data-mce-bogus")||d.nextSibling))return s;if(s===f||s.parentNode===f){u=s;break}s=s.parentNode}return u}var Nc=Ge.isContentEditableFalse,Sc=Ge.isText,kc=Ge.isElement,Tc=Ge.isBr,Ac=La,Mc=function(e){return Cu(e)||function(e){return!!zu(e)&&!0!==b(P(e.getElementsByTagName("*")),function(e,t){return e||gu(t)},!1)}(e)},Rc=Va,Dc=function(e,t,n){var r,o,i,a,u;if(!kc(n)||!t)return null;if(t.isEqual(Ds.after(n))&&n.lastChild){if(u=Ds.after(n.lastChild),ps(e)&&Ac(n.lastChild)&&kc(n.lastChild))return Tc(n.lastChild)?Ds.before(n.lastChild):u}else u=t;var s=u.container(),c=u.offset();if(Sc(s)){if(ps(e)&&0<c)return Ds(s,--c);if(gs(e)&&c<s.length)return Ds(s,++c);r=s}else{if(ps(e)&&0<c&&(o=tc(s,c-1),Ac(o)))return!Mc(o)&&(i=ys(o,e,Rc,o))?Sc(i)?Ds(i,i.data.length):Ds.after(i):Sc(o)?Ds(o,o.data.length):Ds.before(o);if(gs(e)&&c<s.childNodes.length&&(o=tc(s,c),Ac(o)))return Tc(o)?function(e,t){var n=t.nextSibling;return n&&Ac(n)?Sc(n)?Ds(n,0):Ds.before(n):Dc(Ms.Forwards,Ds.after(t),e)}(n,o):!Mc(o)&&(i=ys(o,e,Rc,o))?Sc(i)?Ds(i,0):Ds.before(i):Sc(o)?Ds(o,0):Ds.after(o);r=o||u.getNode()}return(gs(e)&&u.isAtEnd()||ps(e)&&u.isAtStart())&&(r=ys(r,e,$(!0),n,!0),Rc(r,n))?nc(e,r):(o=ys(r,e,Rc,n),!(a=kn.last(y(function(e,t){for(var n=[];e&&e!==t;)n.push(e),e=e.parentNode;return n}(s,n),Nc)))||o&&a.contains(o)?o?nc(e,o):null:u=gs(e)?Ds.after(a):Ds.before(a))},_c=function(e,t,n){var r=rc(t);return k.from(e?r.next(n):r.prev(n))},Bc=function(t,n,e,r){return sc(t,n,e).bind(function(e){return r(e)?Bc(t,n,e,r):k.some(e)})},Oc=d(_c,!0),Hc=d(_c,!1),Pc={fromPosition:_c,nextPosition:Oc,prevPosition:Hc,navigate:sc,navigateIgnore:Bc,positionIn:cc,firstPositionIn:d(cc,!0),lastPositionIn:d(cc,!1)},Lc=function(e,t){var n=e.dom;if(t){if(function(e){return Mn.isArray(e.start)}(t))return function(e,t){var n=e.createRng();return hc(e,!0,t,n)&&hc(e,!1,t,n)?k.some(n):k.none()}(n,t);if(function(e){return"string"==typeof e.start}(t))return k.some(function(e,t){var n,r;return n=e.createRng(),r=Wu(e.getRoot(),t.start),n.setStart(r.container(),r.offset()),r=Wu(e.getRoot(),t.end),n.setEnd(r.container(),r.offset()),n}(n,t));if(function(e){return e.hasOwnProperty("id")}(t))return function(r,e){var t=gc(r,"start",e),n=gc(r,"end",e);return Ya(t,n.or(t),function(e,t){var n=r.createRng();return n.setStart(lc(r,e.container()),e.offset()),n.setEnd(lc(r,t.container()),t.offset()),n})}(n,t);if(function(e){return e.hasOwnProperty("name")}(t))return function(n,e){return k.from(n.select(e.name)[e.index]).map(function(e){var t=n.createRng();return t.selectNode(e),t})}(n,t);if(function(e){return e.hasOwnProperty("rng")}(t))return k.some(t.rng)}return k.none()},Vc=function(e,t,n){return Vs.getBookmark(e,t,n)},Ic=function(t,e){Lc(t,e).each(function(e){t.setRng(e)})},Fc=function(e){return Ge.isElement(e)&&"SPAN"===e.tagName&&"bookmark"===e.getAttribute("data-mce-type")},Uc=function(e){return e&&3===e.nodeType&&/^([\t \r\n]+|)$/.test(e.nodeValue)},jc={isInlineBlock:pc,moveStart:function(e,t,n){var r,o,i,a=n.startOffset,u=n.startContainer;if((n.startContainer!==n.endContainer||!pc(n.startContainer.childNodes[n.startOffset]))&&1===u.nodeType)for(a<(i=u.childNodes).length?(u=i[a],r=new yi(u,e.getParent(u,e.isBlock))):(u=i[i.length-1],(r=new yi(u,e.getParent(u,e.isBlock))).next(!0)),o=r.current();o;o=r.next())if(3===o.nodeType&&!Uc(o))return n.setStart(o,0),void t.setRng(n)},getNonWhiteSpaceSibling:function(e,t,n){if(e)for(t=t?"nextSibling":"previousSibling",e=n?e:e[t];e;e=e[t])if(1===e.nodeType||!Uc(e))return e},isTextBlock:function(e,t){return t.nodeType&&(t=t.nodeName),!!e.schema.getTextBlockElements()[t.toLowerCase()]},isValid:function(e,t,n){return e.schema.isValidChild(t,n)},isWhiteSpaceNode:Uc,replaceVars:function(e,n){return"string"!=typeof e?e=e(n):n&&(e=e.replace(/%(\w+)/g,function(e,t){return n[t]||e})),e},isEq:function(e,t){return e=""+((e=e||"").nodeName||e),t=""+((t=t||"").nodeName||t),e.toLowerCase()===t.toLowerCase()},normalizeStyleValue:vc,getStyle:function(e,t,n){return vc(e,e.getStyle(t,n),n)},getTextDecoration:function(t,e){var n;return t.getParent(e,function(e){return(n=t.getStyle(e,"text-decoration"))&&"none"!==n}),n},getParents:function(e,t,n){return e.getParents(t,n,e.getRoot())}},qc=Fc,$c=jc.getParents,Wc=jc.isWhiteSpaceNode,Kc=jc.isTextBlock,Xc=function(e,t,n,r){var o,i=t.startContainer,a=t.startOffset,u=t.endContainer,s=t.endOffset,c=e.dom;return 1===i.nodeType&&i.hasChildNodes()&&3===(i=Ka(i,a)).nodeType&&(a=0),1===u.nodeType&&u.hasChildNodes()&&3===(u=Ka(u,t.collapsed?s:s-1)).nodeType&&(s=u.nodeValue.length),i=bc(c,i),u=bc(c,u),(qc(i.parentNode)||qc(i))&&(i=qc(i)?i:i.parentNode,3===(i=t.collapsed?i.previousSibling||i:i.nextSibling||i).nodeType&&(a=t.collapsed?i.length:0)),(qc(u.parentNode)||qc(u))&&(u=qc(u)?u:u.parentNode,3===(u=t.collapsed?u.nextSibling||u:u.previousSibling||u).nodeType&&(s=t.collapsed?0:u.length)),t.collapsed&&((o=wc(c,e.getBody(),i,a,!0,r))&&(i=o.container,a=o.offset),(o=wc(c,e.getBody(),u,s,!1,r))&&(u=o.container,s=o.offset)),n[0].inline&&(u=r?u:function(e,t){var n=yc(e,t);if(n.node){for(;n.node&&0===n.offset&&n.node.previousSibling;)n=yc(n.node.previousSibling);n.node&&0<n.offset&&3===n.node.nodeType&&" "===n.node.nodeValue.charAt(n.offset-1)&&1<n.offset&&(e=n.node).splitText(n.offset-1)}return e}(u,s)),(n[0].inline||n[0].block_expand)&&(n[0].inline&&3===i.nodeType&&0!==a||(i=Ec(c,n,i,a,u,s,!0)),n[0].inline&&3===u.nodeType&&s!==u.nodeValue.length||(u=Ec(c,n,i,a,u,s,!1))),n[0].selector&&!1!==n[0].expand&&!n[0].inline&&(i=xc(c,n,t,i,"previousSibling"),u=xc(c,n,t,u,"nextSibling")),(n[0].block||n[0].selector)&&(i=zc(e,n,i,"previousSibling"),u=zc(e,n,u,"nextSibling"),n[0].block&&(c.isBlock(i)||(i=Ec(c,n,i,a,u,s,!0)),c.isBlock(u)||(u=Ec(c,n,i,a,u,s,!1)))),1===i.nodeType&&(a=c.nodeIndex(i),i=i.parentNode),1===u.nodeType&&(s=c.nodeIndex(u)+1,u=u.parentNode),{startContainer:i,startOffset:a,endContainer:u,endOffset:s}},Yc=Mn.each,Gc=function(e,t,o){var n,r,i,a,u,s,c,l=t.startContainer,f=t.startOffset,d=t.endContainer,h=t.endOffset;if(0<(c=e.select("td[data-mce-selected],th[data-mce-selected]")).length)Yc(c,function(e){o([e])});else{var m=function(e){var t;return 3===(t=e[0]).nodeType&&t===l&&f>=t.nodeValue.length&&e.splice(0,1),t=e[e.length-1],0===h&&0<e.length&&t===d&&3===t.nodeType&&e.splice(e.length-1,1),e},g=function(e,t,n){for(var r=[];e&&e!==n;e=e[t])r.push(e);return r},p=function(e,t){do{if(e.parentNode===t)return e;e=e.parentNode}while(e)},v=function(e,t,n){var r=n?"nextSibling":"previousSibling";for(u=(a=e).parentNode;a&&a!==t;a=u)u=a.parentNode,(s=g(a===e?a:a[r],r)).length&&(n||s.reverse(),o(m(s)))};if(1===l.nodeType&&l.hasChildNodes()&&(l=l.childNodes[f]),1===d.nodeType&&d.hasChildNodes()&&(d=function(e,t){var n=e.childNodes;return--t>n.length-1?t=n.length-1:t<0&&(t=0),n[t]||e}(d,h)),l===d)return o(m([l]));for(n=e.findCommonAncestor(l,d),a=l;a;a=a.parentNode){if(a===d)return v(l,n,!0);if(a===n)break}for(a=d;a;a=a.parentNode){if(a===l)return v(d,n);if(a===n)break}r=p(l,n)||l,i=p(d,n)||d,v(l,r,!0),(s=g(r===l?r:r.nextSibling,"nextSibling",i===d?i.nextSibling:i)).length&&o(m(s)),v(d,i)}};function Jc(e){return ol.get(e)}function Qc(t,n,r,o){return Se(n).fold(function(){return"skipping"},function(e){return"br"===o||function(e){return zt(e)&&"\ufeff"===Jc(e)}(n)?"valid":function(e){return xt(e)&&ha(e,nu())}(n)?"existing":rs(n)?"caret":jc.isValid(t,r,o)&&jc.isValid(t,ie(e),r)?"valid":"invalid-child"})}function Zc(e,t,n,r){var o=t.uid,i=void 0===o?function(e){var t=(new Date).getTime();return e+"_"+Math.floor(1e9*Math.random())+ ++au+String(t)}("mce-annotation"):o,a=function h(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var o=0;for(r=Object.getOwnPropertySymbols(e);o<r.length;o++)t.indexOf(r[o])<0&&Object.prototype.propertyIsEnumerable.call(e,r[o])&&(n[r[o]]=e[r[o]])}return n}(t,["uid"]),u=yt.fromTag("span",e);fa(u,nu()),Tt(u,""+ou(),i),Tt(u,""+ru(),n);var s=r(i,a),c=s.attributes,l=void 0===c?{}:c,f=s.classes,d=void 0===f?[]:f;return me(u,l),function(t,e){z(e,function(e){fa(t,e)})}(u,d),u}function el(n,e,t,r,o){function i(){c.set(k.none())}function a(e){z(e,l)}var u=[],s=Zc(n.getDoc(),o,t,r),c=Je(k.none()),l=function(e){switch(Qc(n,e,"span",ie(e))){case"invalid-child":i();var t=Re(e);a(t),i();break;case"valid":!function(e,t){Ci(e,t),Di(t,e)}(e,c.get().getOrThunk(function(){var e=ka(s);return u.push(e),c.set(k.some(e)),e}))}};return Gc(n.dom,e,function(e){i(),function(e){var t=X(e,yt.fromDom);a(t)}(e)}),u}function tl(o,i,a,u){o.undoManager.transact(function(){var e=o.selection.getRng();if(e.collapsed&&function(e,t){var n=Xc(e,t,[{inline:!0}],function(e){return 3===e.startContainer.nodeType&&e.startContainer.nodeValue.length>=e.startOffset&&"\xa0"===e.startContainer.nodeValue[e.startOffset]}(t));t.setStart(n.startContainer,n.startOffset),t.setEnd(n.endContainer,n.endOffset),e.selection.setRng(t)}(o,e),o.selection.getRng().collapsed){var t=Zc(o.getDoc(),u,i,a.decorate);Aa(t,"\xa0"),o.selection.getRng().insertNode(t.dom()),o.selection.select(t.dom())}else{var n=Vs.getPersistentBookmark(o.selection,!1),r=o.selection.getRng();el(o,r,i,a.decorate,u),o.selection.moveToBookmark(n)}})}function nl(r){var o=function(){var n={};return{register:function(e,t){n[e]={name:e,settings:t}},lookup:function(e){return n.hasOwnProperty(e)?k.from(n[e]).map(function(e){return e.settings}):k.none()}}}();Na(r,o);var n=Ea(r);return{register:function(e,t){o.register(e,t)},annotate:function(t,n){o.lookup(t).each(function(e){tl(r,t,e,n)})},annotationChanged:function(e,t){n.addListener(e,t)},remove:function(e){za(r,k.some(e)).each(function(e){var t=e.elements;z(t,Ni)})},getAll:function(e){var t=function(e,t){var n=yt.fromDom(e.getBody()),r=ma(n,"["+ru()+'="'+t+'"]'),o={};return z(r,function(e){var t=ge(e,ou()),n=o.hasOwnProperty(t)?o[t]:[];o[t]=n.concat([e])}),o}(r,e);return se(t,function(e){return X(e,function(e){return e.dom()})})}}}function rl(e,t,n){var r=n?"lastChild":"firstChild",o=n?"prev":"next";if(e[r])return e[r];if(e!==t){var i=e[o];if(i)return i;for(var a=e.parent;a&&a!==t;a=a.parent)if(i=a[o])return i}}var ol=function bN(n,r){var t=function(e){return n(e)?k.from(e.dom().nodeValue):k.none()};return{get:function(e){if(!n(e))throw new Error("Can only get "+r+" value of a "+r+" node");return t(e).getOr("")},getOption:t,set:function(e,t){if(!n(e))throw new Error("Can only set raw "+r+" value of a "+r+" node");e.dom().nodeValue=t}}}(zt,"text"),il=/^[ \t\r\n]*$/,al={"#text":3,"#comment":8,"#cdata":4,"#pi":7,"#doctype":10,"#document-fragment":11},ul=(sl.create=function(e,t){var n=new sl(e,al[e]||1);if(t)for(var r in t)n.attr(r,t[r]);return n},sl.prototype.replace=function(e){return e.parent&&e.remove(),this.insert(e,this),this.remove(),this},sl.prototype.attr=function(e,t){var n;if("string"!=typeof e){for(var r in e)this.attr(r,e[r]);return this}if(n=this.attributes){if(t===undefined)return n.map[e];if(null===t){if(e in n.map){delete n.map[e];for(var o=n.length;o--;)if(n[o].name===e)return n.splice(o,1),this}return this}if(e in n.map){for(o=n.length;o--;)if(n[o].name===e){n[o].value=t;break}}else n.push({name:e,value:t});return n.map[e]=t,this}},sl.prototype.clone=function(){var e,t=new sl(this.name,this.type);if(e=this.attributes){var n=[];n.map={};for(var r=0,o=e.length;r<o;r++){var i=e[r];"id"!==i.name&&(n[n.length]={name:i.name,value:i.value},n.map[i.name]=i.value)}t.attributes=n}return t.value=this.value,t.shortEnded=this.shortEnded,t},sl.prototype.wrap=function(e){return this.parent.insert(e,this),e.append(this),this},sl.prototype.unwrap=function(){for(var e=this.firstChild;e;){var t=e.next;this.insert(e,this,!0),e=t}this.remove()},sl.prototype.remove=function(){var e=this.parent,t=this.next,n=this.prev;return e&&(e.firstChild===this?(e.firstChild=t)&&(t.prev=null):n.next=t,e.lastChild===this?(e.lastChild=n)&&(n.next=null):t.prev=n,this.parent=this.next=this.prev=null),this},sl.prototype.append=function(e){e.parent&&e.remove();var t=this.lastChild;return t?((t.next=e).prev=t,this.lastChild=e):this.lastChild=this.firstChild=e,e.parent=this,e},sl.prototype.insert=function(e,t,n){e.parent&&e.remove();var r=t.parent||this;return n?(t===r.firstChild?r.firstChild=e:t.prev.next=e,e.prev=t.prev,(e.next=t).prev=e):(t===r.lastChild?r.lastChild=e:t.next.prev=e,e.next=t.next,(e.prev=t).next=e),e.parent=r,e},sl.prototype.getAll=function(e){for(var t=[],n=this.firstChild;n;n=rl(n,this))n.name===e&&t.push(n);return t},sl.prototype.empty=function(){if(this.firstChild){for(var e=[],t=this.firstChild;t;t=rl(t,this))e.push(t);for(var n=e.length;n--;)(t=e[n]).parent=t.firstChild=t.lastChild=t.next=t.prev=null}return this.firstChild=this.lastChild=null,this},sl.prototype.isEmpty=function(e,t,n){void 0===t&&(t={});var r=this.firstChild;if(r)do{if(1===r.type){if(r.attr("data-mce-bogus"))continue;if(e[r.name])return!1;for(var o=r.attributes.length;o--;){var i=r.attributes[o].name;if("name"===i||0===i.indexOf("data-mce-bookmark"))return!1}}if(8===r.type)return!1;if(3===r.type&&!il.test(r.value))return!1;if(3===r.type&&r.parent&&t[r.parent.name]&&il.test(r.value))return!1;if(n&&n(r))return!1}while(r=rl(r,this));return!0},sl.prototype.walk=function(e){return rl(this,null,e)},sl);function sl(e,t){this.name=e,1===(this.type=t)&&(this.attributes=[],this.attributes.map={})}function cl(e,t,n){var r,o,i,a,u=1;for(a=e.getShortEndedElements(),(i=/<([!?\/])?([A-Za-z0-9\-_\:\.]+)((?:\s+[^"\'>]+(?:(?:"[^"]*")|(?:\'[^\']*\')|[^>]*))*|\/|\s+)>/g).lastIndex=r=n;o=i.exec(t);){if(r=i.lastIndex,"/"===o[1])u--;else if(!o[1]){if(o[2]in a)continue;u++}if(0===u)break}return r}function ll(e,t){var n=e.exec(t);if(n){var r=n[1],o=n[2];return"string"==typeof r&&"data-mce-bogus"===r.toLowerCase()?o:null}return null}function fl(V,I){void 0===I&&(I=pr());function e(){}!1!==(V=V||{}).fix_self_closing&&(V.fix_self_closing=!0);var F=V.comment?V.comment:e,U=V.cdata?V.cdata:e,j=V.text?V.text:e,q=V.start?V.start:e,$=V.end?V.end:e,W=V.pi?V.pi:e,K=V.doctype?V.doctype:e;return{parse:function(e){function t(e){var t,n;for(t=_.length;t--&&_[t].name!==e;);if(0<=t){for(n=_.length-1;t<=n;n--)(e=_[n]).valid&&$(e.name);_.length=t}}function n(e,t,n,r,o){var i,a;if(n=(t=t.toLowerCase())in h?t:O(n||r||o||""),g&&!l&&!1===function(e){return 0===e.indexOf("data-")||0===e.indexOf("aria-")}(t)){if(!(i=C[t])&&w){for(a=w.length;a--&&!(i=w[a]).pattern.test(t););-1===a&&(i=null)}if(!i)return;if(i.validValues&&!(n in i.validValues))return}if(H[t]&&!V.allow_script_urls){var u=n.replace(/[\s\u0000-\u001F]+/g,"");try{u=decodeURIComponent(u)}catch(s){u=unescape(u)}if(P.test(u))return;if(function(e,t){return!e.allow_html_data_urls&&(/^data:image\//i.test(t)?!1===e.allow_svg_data_urls&&/^data:image\/svg\+xml/i.test(t):/^data:/i.test(t))}(V,u))return}l&&(t in H||0===t.indexOf("on"))||(c.map[t]=n,c.push({name:t,value:n}))}var r,o,i,c,a,u,s,l,f,d,h,m,g,p,v,y,b,C,w,x,z,E,N,S,k,T,A,M,R,D=0,_=[],B=0,O=ir.decode,H=Mn.makeMap("src,href,data,background,formaction,poster,xlink:href"),P=/((java|vb)script|mhtml):/i;for(k=new RegExp("<(?:(?:!--([\\w\\W]*?)--!?>)|(?:!\\[CDATA\\[([\\w\\W]*?)\\]\\]>)|(?:!DOCTYPE([\\w\\W]*?)>)|(?:\\?([^\\s\\/<>]+) ?([\\w\\W]*?)[?/]>)|(?:\\/([A-Za-z][A-Za-z0-9\\-_\\:\\.]*)>)|(?:([A-Za-z][A-Za-z0-9\\-_\\:\\.]*)((?:\\s+[^\"'>]+(?:(?:\"[^\"]*\")|(?:'[^']*')|[^>]*))*|\\/|\\s+)>))","g"),T=/([\w:\-]+)(?:\s*=\s*(?:(?:\"((?:[^\"])*)\")|(?:\'((?:[^\'])*)\')|([^>\s]+)))?/g,d=I.getShortEndedElements(),S=V.self_closing_elements||I.getSelfClosingElements(),h=I.getBoolAttrs(),g=V.validate,f=V.remove_internals,R=V.fix_self_closing,A=I.getSpecialElements(),N=e+">";r=k.exec(N);){if(D<r.index&&j(O(e.substr(D,r.index-D))),o=r[6])":"===(o=o.toLowerCase()).charAt(0)&&(o=o.substr(1)),t(o);else if(o=r[7]){if(r.index+r[0].length>e.length){j(O(e.substr(r.index))),D=r.index+r[0].length;continue}":"===(o=o.toLowerCase()).charAt(0)&&(o=o.substr(1)),m=o in d,R&&S[o]&&0<_.length&&_[_.length-1].name===o&&t(o);var L=ll(T,r[8]);if(null!==L){if("all"===L){D=cl(I,e,k.lastIndex),k.lastIndex=D;continue}v=!1}if(!g||(p=I.getElementRule(o))){if(v=!0,g&&(C=p.attributes,w=p.attributePatterns),(b=r[8])?((l=-1!==b.indexOf("data-mce-type"))&&f&&(v=!1),(c=[]).map={},b.replace(T,n)):(c=[]).map={},g&&!l){if(x=p.attributesRequired,z=p.attributesDefault,E=p.attributesForced,p.removeEmptyAttrs&&!c.length&&(v=!1),E)for(a=E.length;a--;)s=(y=E[a]).name,"{$uid}"===(M=y.value)&&(M="mce_"+B++),c.map[s]=M,c.push({name:s,value:M});if(z)for(a=z.length;a--;)(s=(y=z[a]).name)in c.map||("{$uid}"===(M=y.value)&&(M="mce_"+B++),c.map[s]=M,c.push({name:s,value:M}));if(x){for(a=x.length;a--&&!(x[a]in c.map););-1===a&&(v=!1)}if(y=c.map["data-mce-bogus"]){if("all"===y){D=cl(I,e,k.lastIndex),k.lastIndex=D;continue}v=!1}}v&&q(o,c,m)}else v=!1;if(i=A[o]){i.lastIndex=D=r.index+r[0].length,D=(r=i.exec(e))?(v&&(u=e.substr(D,r.index-D)),r.index+r[0].length):(u=e.substr(D),e.length),v&&(0<u.length&&j(u,!0),$(o)),k.lastIndex=D;continue}m||(b&&b.indexOf("/")===b.length-1?v&&$(o):_.push({name:o,valid:v}))}else(o=r[1])?(">"===o.charAt(0)&&(o=" "+o),V.allow_conditional_comments||"[if"!==o.substr(0,3).toLowerCase()||(o=" "+o),F(o)):(o=r[2])?U(o.replace(/<!--|-->/g,"")):(o=r[3])?K(o):(o=r[4])&&W(o,r[5]);D=r.index+r[0].length}for(D<e.length&&j(O(e.substr(D))),a=_.length-1;0<=a;a--)(o=_[a]).valid&&$(o.name)}}}(fl=fl||{}).findEndTag=cl;function dl(e,t){var n,r,o,i,a,u=t,s=/<(\w+) [^>]*data-mce-bogus="all"[^>]*>/g,c=e.schema;for(u=function(e,t){var n=new RegExp(["\\s?("+e.join("|")+')="[^"]+"'].join("|"),"gi");return t.replace(n,"")}(e.getTempAttrs(),u),a=c.getShortEndedElements();i=s.exec(u);)r=s.lastIndex,o=i[0].length,n=a[i[1]]?r:of.findEndTag(c,u,r),u=u.substring(0,r-o)+u.substring(n),s.lastIndex=r-o;return lu(u)}function hl(e,t,n){var r=e.getParam(t,n);if(-1===r.indexOf("="))return r;var o=e.getParam(t,"","hash");return o.hasOwnProperty(e.id)?o[e.id]:n}function ml(e,t,n){var r;if(t.format=t.format?t.format:"html",t.get=!0,t.getInner=!0,t.no_events||e.fire("BeforeGetContent",t),"raw"===t.format)r=Mn.trim(af.trimExternal(e.serializer,n.innerHTML));else if("text"===t.format)r=lu(n.innerText||n.textContent);else{if("tree"===t.format)return e.serializer.serialize(n,t);r=function(e,t){var n=mf(e),r=new RegExp("^(<"+n+"[^>]*>(&nbsp;|&#160;|\\s|\xa0|<br \\/>|)<\\/"+n+">[\r\n]*|<br \\/>[\r\n]*)$");return t.replace(r,"")}(e,e.serializer.serialize(n,t))}return"text"===t.format||Wn(yt.fromDom(n))?t.content=r:t.content=Mn.trim(r),t.no_events||e.fire("GetContent",t),t.content}function gl(e){var u,s,c,l,f,d=[];return u=(e=e||{}).indent,s=Ff(e.indent_before||""),c=Ff(e.indent_after||""),l=ir.getEncodeFunc(e.entity_encoding||"raw",e.entities),f="html"===e.element_format,{start:function(e,t,n){var r,o,i,a;if(u&&s[e]&&0<d.length&&0<(a=d[d.length-1]).length&&"\n"!==a&&d.push("\n"),d.push("<",e),t)for(r=0,o=t.length;r<o;r++)i=t[r],d.push(" ",i.name,'="',l(i.value,!0),'"');d[d.length]=!n||f?">":" />",n&&u&&c[e]&&0<d.length&&0<(a=d[d.length-1]).length&&"\n"!==a&&d.push("\n")},end:function(e){var t;d.push("</",e,">"),u&&c[e]&&0<d.length&&0<(t=d[d.length-1]).length&&"\n"!==t&&d.push("\n")},text:function(e,t){0<e.length&&(d[d.length]=t?e:l(e))},cdata:function(e){d.push("<![CDATA[",e,"]]>")},comment:function(e){d.push("\x3c!--",e,"--\x3e")},pi:function(e,t){t?d.push("<?",e," ",l(t),"?>"):d.push("<?",e,"?>"),u&&d.push("\n")},doctype:function(e){d.push("<!DOCTYPE",e,">",u?"\n":"")},reset:function(){d.length=0},getContent:function(){return d.join("").replace(/\n$/,"")}}}function pl(t,m){void 0===m&&(m=pr());var g=gl(t);return(t=t||{}).validate=!("validate"in t)||t.validate,{serialize:function(e){var f,d;d=t.validate,f={3:function(e){g.text(e.value,e.raw)},8:function(e){g.comment(e.value)},7:function(e){g.pi(e.name,e.value)},10:function(e){g.doctype(e.value)},4:function(e){g.cdata(e.value)},11:function(e){if(e=e.firstChild)for(;h(e),e=e.next;);}},g.reset();var h=function(e){var t,n,r,o,i,a,u,s,c,l=f[e.type];if(l)l(e);else{if(t=e.name,n=e.shortEnded,r=e.attributes,d&&r&&1<r.length&&((a=[]).map={},c=m.getElementRule(e.name))){for(u=0,s=c.attributesOrder.length;u<s;u++)(o=c.attributesOrder[u])in r.map&&(i=r.map[o],a.map[o]=i,a.push({name:o,value:i}));for(u=0,s=r.length;u<s;u++)(o=r[u].name)in a.map||(i=r.map[o],a.map[o]=i,a.push({name:o,value:i}));r=a}if(g.start(e.name,r,n),!n){if(e=e.firstChild)for(;h(e),e=e.next;);g.end(t)}}};return 1!==e.type||t.inner?f[11](e):h(e),g.getContent()}}}function vl(e,t,n){var r=function(e,n,t){var r={},o={},i=[];for(var a in t.firstChild&&Uf(t.firstChild,function(t){z(e,function(e){e.name===t.name&&(r[e.name]?r[e.name].nodes.push(t):r[e.name]={filter:e,nodes:[t]})}),z(n,function(e){"string"==typeof t.attr(e.name)&&(o[e.name]?o[e.name].nodes.push(t):o[e.name]={filter:e,nodes:[t]})})}),r)r.hasOwnProperty(a)&&i.push(r[a]);for(var a in o)o.hasOwnProperty(a)&&i.push(o[a]);return i}(e,t,n);z(r,function(t){z(t.filter.callbacks,function(e){e(t.nodes,t.filter.name,{})})})}function yl(e){var t=Ee(e).dom();return e.dom()===t.activeElement}function bl(e){var t=e!==undefined?e.dom():j.document;return k.from(t.activeElement).map(yt.fromDom)}function Cl(e,t){var n=zt(t)?Jc(t).length:Re(t).length+1;return n<e?n:e<0?0:e}function wl(e){return Xf.range(e.start(),Cl(e.soffset(),e.start()),e.finish(),Cl(e.foffset(),e.finish()))}function xl(e,t){return!Ge.isRestrictedNode(t.dom())&&(Bt(e,t)||ze(e,t))}function zl(t){return function(e){return xl(t,e.start())&&xl(t,e.finish())}}function El(e){return!0===e.inline||Yf.isIE()}function Nl(e){return Xf.range(yt.fromDom(e.startContainer),e.startOffset,yt.fromDom(e.endContainer),e.endOffset)}function Sl(e){var t=e.getSelection();return(t&&0!==t.rangeCount?k.from(t.getRangeAt(0)):k.none()).map(Nl)}function kl(e){var t=Ne(e);return Sl(t.dom()).filter(zl(e))}function Tl(e,t){return k.from(t).filter(zl(e)).map(wl)}function Al(e){var t=j.document.createRange();try{return t.setStart(e.start().dom(),e.soffset()),t.setEnd(e.finish().dom(),e.foffset()),k.some(t)}catch(n){return k.none()}}function Ml(t){return(t.bookmark?t.bookmark:k.none()).bind(function(e){return Tl(yt.fromDom(t.getBody()),e)}).bind(Al)}function Rl(t,e){oe().browser.isIE()?function(e){e.on("focusout",function(){Gf(e)})}(t):function(e,t){e.on("mouseup touchend",function(e){t.throttle()})}(t,e),t.on("keyup NodeChange",function(e){!function(e){return"nodechange"===e.type&&e.selectionChange}(e)&&Gf(t)})}function Dl(e){return Zf.isEditorUIElement(e)}function _l(t,e){var n=t?t.settings.custom_ui_selector:"";return null!==td.getParent(e,function(e){return Dl(e)||!!n&&t.dom.is(e,n)})}function Bl(r,e){var t=e.editor;ed(t),t.on("focusin",function(){var e=r.focusedEditor;e!==this&&(e&&e.fire("blur",{focusedEditor:this}),r.setActive(this),(r.focusedEditor=this).fire("focus",{blurredEditor:e}),this.focus(!0))}),t.on("focusout",function(){var t=this;pn.setEditorTimeout(t,function(){var e=r.focusedEditor;_l(t,function(){try{return j.document.activeElement}catch(e){return j.document.body}}())||e!==t||(t.fire("blur",{focusedEditor:null}),r.focusedEditor=null)})}),rf||(rf=function(e){var t,n=r.activeEditor;t=e.target,n&&t.ownerDocument===j.document&&(t===j.document.body||_l(n,t)||r.focusedEditor!==n||(n.fire("blur",{focusedEditor:null}),r.focusedEditor=null))},td.bind(j.document,"focusin",rf))}function Ol(e,t){e.focusedEditor===t.editor&&(e.focusedEditor=null),e.activeEditor||(td.unbind(j.document,"focusin",rf),rf=null)}function Hl(t,e){return function(e){return e.collapsed?k.from(Ka(e.startContainer,e.startOffset)).map(yt.fromDom):k.none()}(e).bind(function(e){return qn(e)?k.some(e):!1===Bt(t,e)?k.some(t):k.none()})}function Pl(t,e){Hl(yt.fromDom(t.getBody()),e).bind(function(e){return Pc.firstPositionIn(e.dom())}).fold(function(){t.selection.normalize()},function(e){return t.selection.setRng(e.toRange())})}function Ll(e){if(e.setActive)try{e.setActive()}catch(t){e.focus()}else e.focus()}function Vl(e){return yl(e)||function(t){return bl(Ee(t)).filter(function(e){return t.dom().contains(e.dom())})}(e).isSome()}function Il(e){return e.inline?function(e){var t=e.getBody();return t&&Vl(yt.fromDom(t))}(e):function(e){return e.iframeElement&&yl(yt.fromDom(e.iframeElement))}(e)}function Fl(e){return e instanceof ul}function Ul(e,t){e.dom.setHTML(e.getBody(),t),function(r){ud(r)&&Pc.firstPositionIn(r.getBody()).each(function(e){var t=e.getNode(),n=Ge.isTable(t)?Pc.firstPositionIn(t).getOr(e):e;r.selection.setRng(n.toRange())})}(e)}function jl(t,n,r){return void 0===r&&(r={}),r.format=r.format?r.format:"html",r.set=!0,r.content=Fl(n)?"":n,Fl(n)||r.no_events||(t.fire("BeforeSetContent",r),n=r.content),k.from(t.getBody()).fold($(n),function(e){return Fl(n)?function(e,t,n,r){vl(e.parser.getNodeFilters(),e.parser.getAttributeFilters(),n);var o=pl({validate:e.validate},e.schema).serialize(n);return r.content=Wn(yt.fromDom(t))?o:Mn.trim(o),Ul(e,r.content),r.no_events||e.fire("SetContent",r),n}(t,e,n,r):function(e,t,n,r){var o,i;return 0===n.length||/^\s+$/.test(n)?(i='<br data-mce-bogus="1">',"TABLE"===t.nodeName?n="<tr><td>"+i+"</td></tr>":/^(UL|OL)$/.test(t.nodeName)&&(n="<li>"+i+"</li>"),n=(o=mf(e))&&e.schema.isValidChild(t.nodeName.toLowerCase(),o.toLowerCase())?(n=i,e.dom.createHTML(o,e.settings.forced_root_block_attrs,n)):n||'<br data-mce-bogus="1">',Ul(e,n),e.fire("SetContent",r)):("raw"!==r.format&&(n=pl({validate:e.validate},e.schema).serialize(e.parser.parse(n,{isRootContent:!0,insert:!0}))),r.content=Wn(yt.fromDom(t))?n:Mn.trim(n),Ul(e,r.content),r.no_events||e.fire("SetContent",r)),r.content}(t,e,n,r)})}function ql(e){return k.from(e).each(function(e){return e.destroy()})}function $l(e){if(!e.removed){var t=e._selectionOverrides,n=e.editorUpload,r=e.getBody(),o=e.getElement();r&&e.save({is_removing:!0}),e.removed=!0,e.unbindAllNativeEvents(),e.hasHiddenInput&&o&&pd.remove(o.nextSibling),fd(e),e.editorManager.remove(e),!e.inline&&r&&function(e){pd.setStyle(e.id,"display",e.orgDisplay)}(e),dd(e),pd.remove(e.getContainer()),ql(t),ql(n),e.destroy()}}function Wl(e,t){var n=e.selection,r=e.dom;e.destroyed||(t||e.removed?(t||(e.editorManager.off("beforeunload",e._beforeUnload),e.theme&&e.theme.destroy&&e.theme.destroy(),ql(n),ql(r)),function(e){var t=e.formElement;t&&(t._mceOldSubmit&&(t.submit=t._mceOldSubmit,t._mceOldSubmit=null),pd.unbind(t,"submit reset",e.formEventDelegate))}(e),function(e){e.contentAreaContainer=e.formElement=e.container=e.editorContainer=null,e.bodyElement=e.contentDocument=e.contentWindow=null,e.iframeElement=e.targetElm=null,e.selection&&(e.selection=e.selection.win=e.selection.dom=e.selection.dom.doc=null)}(e),e.destroyed=!0):e.remove())}function Kl(a){return function(){for(var e=new Array(arguments.length),t=0;t<e.length;t++)e[t]=arguments[t];if(0===e.length)throw new Error("Can't merge zero objects");for(var n={},r=0;r<e.length;r++){var o=e[r];for(var i in o)vd.call(o,i)&&(n[i]=a(n[i],o[i]))}return n}}function Xl(e){var t=A(e)?e.join(" "):e,n=X(K(t)?t.split(" "):[],te);return y(n,function(e){return 0<e.length})}function Yl(e,t){return e.sections().hasOwnProperty(t)}function Gl(e,t,n,r){var o=Xl(n.forced_plugins),i=Xl(r.plugins),a=function(e,t){return Yl(e,t)?e.sections()[t]:{}}(t,"mobile"),u=a.plugins?Xl(a.plugins):i,s=function(e,t){return[].concat(Xl(e)).concat(Xl(t))}(o,e&&function(e,t,n){var r=e.sections();return Yl(e,t)&&r[t].theme===n}(t,"mobile","mobile")?function(e){return y(e,d(h,Nd))}(u):e&&Yl(t,"mobile")?u:i);return Mn.extend(r,{plugins:s.join(" ")})}function Jl(e,t,n,r,o){var i=e?{mobile:function(e){return G(G(G({},Sd),{resize:!1,toolbar_drawer:"scrolling",toolbar_sticky:!1}),e?{menubar:!1}:{})}(t)}:{},a=function(n,e){var t=ce(e,function(e,t){return h(n,t)});return Cd(t.t,t.f)}(["mobile"],yd(i,o)),u=Mn.extend(n,r,a.settings(),function(e,t){return e&&Yl(t,"mobile")}(e,a)?function(e,t,n){void 0===n&&(n={});var r=e.sections(),o=r.hasOwnProperty(t)?r[t]:{};return Mn.extend({},n,o)}(a,"mobile"):{},{validate:!0,external_plugins:function(e,t){var n=t.external_plugins?t.external_plugins:{};return e&&e.external_plugins?Mn.extend({},e.external_plugins,n):n}(r,a.settings())});return Gl(e,a,r,u)}function Ql(e,t,n,r,o){var i=function(e,t,n,r){var o={id:e,theme:"silver",toolbar_drawer:"floating",plugins:"",document_base_url:t,add_form_submit_trigger:!0,submit_patch:!0,add_unload_trigger:!0,convert_urls:!0,relative_urls:!0,remove_script_host:!0,object_resizing:!0,doctype:"<!DOCTYPE html>",visual:!0,font_size_legacy_values:"xx-small,small,medium,large,x-large,xx-large,300%",forced_root_block:"p",hidden_input:!0,inline_styles:!0,convert_fonts_to_spans:!0,indent:!0,indent_before:"p,h1,h2,h3,h4,h5,h6,blockquote,div,title,style,pre,script,td,th,ul,ol,li,dl,dt,dd,area,table,thead,tfoot,tbody,tr,section,summary,article,hgroup,aside,figure,figcaption,option,optgroup,datalist",indent_after:"p,h1,h2,h3,h4,h5,h6,blockquote,div,title,style,pre,script,td,th,ul,ol,li,dl,dt,dd,area,table,thead,tfoot,tbody,tr,section,summary,article,hgroup,aside,figure,figcaption,option,optgroup,datalist",entity_encoding:"named",url_converter:r.convertURL,url_converter_scope:r};return G(G({},o),n?Sd:{})}(t,n,xd,e);return Jl(zd||Ed,zd,i,r,o)}function Zl(e,t,n){return k.from(t.settings[n]).filter(e)}function ef(e,t,n,r){var o=t in e.settings?e.settings[t]:n;return"hash"===r?function(e){var n={};return"string"==typeof e?z(0<e.indexOf("=")?e.split(/[;,](?![^=;,]*(?:[;,]|$))/):e.split(","),function(e){var t=e.split("=");1<t.length?n[Mn.trim(t[0])]=Mn.trim(t[1]):n[Mn.trim(t[0])]=Mn.trim(t[0])}):n=e,n}(o):"string"===r?Zl(K,e,t).getOr(n):"number"===r?Zl(_,e,t).getOr(n):"boolean"===r?Zl(R,e,t).getOr(n):"object"===r?Zl(T,e,t).getOr(n):"array"===r?Zl(A,e,t).getOr(n):"string[]"===r?Zl(function(t){return function(e){return A(e)&&w(e,t)}}(K),e,t).getOr(n):"function"===r?Zl(D,e,t).getOr(n):o}function tf(e,t){return t.dom()[e]}function nf(e,t){return parseInt(ve(t,e),10)}var rf,of=fl,af={trimExternal:dl,trimInternal:dl},uf=function(e){return e.getParam("iframe_attrs",{})},sf=function(e){return e.getParam("doctype","<!DOCTYPE html>")},cf=function(e){return e.getParam("document_base_url","")},lf=function(e){return hl(e,"body_id","tinymce")},ff=function(e){return hl(e,"body_class","")},df=function(e){return e.getParam("content_security_policy","")},hf=function(e){return e.getParam("br_in_pre",!0)},mf=function(e){if(e.getParam("force_p_newlines",!1))return"p";var t=e.getParam("forced_root_block","p");return!1===t?"":!0===t?"p":t},gf=function(e){return e.getParam("forced_root_block_attrs",{})},pf=function(e){return e.getParam("br_newline_selector",".mce-toc h2,figcaption,caption")},vf=function(e){return e.getParam("no_newline_selector","")},yf=function(e){return e.getParam("keep_styles",!0)},bf=function(e){return e.getParam("end_container_on_empty_block",!1)},Cf=function(e){return Mn.explode(e.getParam("font_size_style_values","xx-small,x-small,small,medium,large,x-large,xx-large"))},wf=function(e){return Mn.explode(e.getParam("font_size_classes",""))},xf=function(e){return e.getParam("icons","","string")},zf=function(e){return e.getParam("icons_url","","string")},Ef=function(e){return e.getParam("images_dataimg_filter",$(!0),"function")},Nf=function(e){return e.getParam("automatic_uploads",!0,"boolean")},Sf=function(e){return e.getParam("images_reuse_filename",!1,"boolean")},kf=function(e){return e.getParam("images_replace_blob_uris",!0,"boolean")},Tf=function(e){return e.getParam("images_upload_url","","string")},Af=function(e){return e.getParam("images_upload_base_path","","string")},Mf=function(e){return e.getParam("images_upload_credentials",!1,"boolean")},Rf=function(e){return e.getParam("images_upload_handler",null,"function")},Df=function(e){return e.getParam("content_css_cors",!1,"boolean")},_f=function(e){return e.getParam("referrer_policy","","string")},Bf=function(e){return e.getParam("language","en","string")},Of=function(e){return e.getParam("language_url","","string")},Hf=function(e){return e.getParam("indent_use_margin",!1)},Pf=function(e){return e.getParam("indentation","40px","string")},Lf=function(e){var t=e.settings.content_css;return K(t)?X(t.split(","),te):A(t)?t:!1===t||e.inline?[]:["default"]},Vf=function(e){return e.getParam("directionality",ra.isRtl()?"rtl":undefined)},If=function(e){return e.getParam("inline_boundaries_selector","a[href],code,.mce-annotation","string")},Ff=Mn.makeMap,Uf=function(e,t){t(e),e.firstChild&&Uf(e.firstChild,t),e.next&&Uf(e.next,t)},jf=function(a){if(!A(a))throw new Error("cases must be an array");if(0===a.length)throw new Error("there must be at least one case");var u=[],n={};return z(a,function(e,r){var t=Et(e);if(1!==t.length)throw new Error("one and only one name per case");var o=t[0],i=e[o];if(n[o]!==undefined)throw new Error("duplicate key detected:"+o);if("cata"===o)throw new Error("cannot have a case named cata (sorry)");if(!A(i))throw new Error("case arguments must be an array");u.push(o),n[o]=function(){var e=arguments.length;if(e!==i.length)throw new Error("Wrong number of arguments to case "+o+". Expected "+i.length+" ("+i+"), got "+e);for(var n=new Array(e),t=0;t<n.length;t++)n[t]=arguments[t];return{fold:function(){if(arguments.length!==a.length)throw new Error("Wrong number of arguments to fold. Expected "+a.length+", got "+arguments.length);return arguments[r].apply(null,n)},match:function(e){var t=Et(e);if(u.length!==t.length)throw new Error("Wrong number of arguments to match. Expected: "+u.join(",")+"\nActual: "+t.join(","));if(!w(u,function(e){return h(t,e)}))throw new Error("Not all branches were specified when using match. Specified: "+t.join(", ")+"\nRequired: "+u.join(", "));return e[o].apply(null,n)},log:function(e){j.console.log(e,{constructors:u,constructor:o,params:n})}}}}),n},qf={create:be("start","soffset","finish","foffset")},$f=jf([{before:["element"]},{on:["element","offset"]},{after:["element"]}]),Wf=($f.before,$f.on,$f.after,function(e){return e.fold(W,W,W)}),Kf=jf([{domRange:["rng"]},{relative:["startSitu","finishSitu"]},{exact:["start","soffset","finish","foffset"]}]),Xf={domRange:Kf.domRange,relative:Kf.relative,exact:Kf.exact,exactFromRange:function(e){return Kf.exact(e.start(),e.soffset(),e.finish(),e.foffset())},getWin:function(e){var t=function(e){return e.match({domRange:function(e){return yt.fromDom(e.startContainer)},relative:function(e,t){return Wf(e)},exact:function(e,t,n,r){return e}})}(e);return Ne(t)},range:qf.create},Yf=oe().browser,Gf=function(e){var t=El(e)?kl(yt.fromDom(e.getBody())):k.none();e.bookmark=t.isSome()?t:e.bookmark},Jf=function(t){Ml(t).each(function(e){t.selection.setRng(e)})},Qf=Ml,Zf={isEditorUIElement:function(e){var t=e.className.toString();return-1!==t.indexOf("tox-")||-1!==t.indexOf("mce-")}},ed=function(e){var t=aa(function(){Gf(e)},0);e.on("init",function(){e.inline&&function(e,t){function n(){t.throttle()}Xi.DOM.bind(j.document,"mouseup",n),e.on("remove",function(){Xi.DOM.unbind(j.document,"mouseup",n)})}(e,t),Rl(e,t)}),e.on("remove",function(){t.cancel()})},td=Xi.DOM,nd=function(e){e.on("AddEditor",d(Bl,e)),e.on("RemoveEditor",d(Ol,e))},rd=function(e){var t=e.classList;return t!==undefined&&(t.contains("tox-edit-area")||t.contains("tox-edit-area__iframe")||t.contains("mce-content-body"))},od=_l,id=function(e){return e.editorManager.setActive(e)},ad=function(e,t){e.removed||(t?id(e):function(t){var e=t.selection,n=t.getBody(),r=e.getRng();t.quirks.refreshContentEditable(),t.bookmark!==undefined&&!1===Il(t)&&Qf(t).each(function(e){t.selection.setRng(e),r=e});var o=function(t,e){return t.dom.getParent(e,function(e){return"true"===t.dom.getContentEditable(e)})}(t,e.getNode());if(t.$.contains(n,o))return Ll(o),Pl(t,r),id(t);t.inline||(Nn.opera||Ll(n),t.getWin().focus()),(Nn.gecko||t.inline)&&(Ll(n),Pl(t,r)),id(t)}(e))},ud=Il,sd=function(e){return Il(e)||function(t){return bl().filter(function(e){return!rd(e.dom())&&od(t,e.dom())}).isSome()}(e)},cd=function(e,t){return e.fire("PreProcess",t)},ld=function(e,t){return e.fire("PostProcess",t)},fd=function(e){return e.fire("remove")},dd=function(e){return e.fire("detach")},hd=function(e,t){return e.fire("SwitchMode",{mode:t})},md=function(e,t,n,r){e.fire("ObjectResizeStart",{target:t,width:n,height:r})},gd=function(e,t,n,r){e.fire("ObjectResized",{target:t,width:n,height:r})},pd=Xi.DOM,vd=Object.prototype.hasOwnProperty,yd=Kl(function(e,t){return T(e)&&T(t)?yd(e,t):t}),bd=Kl(function(e,t){return t}),Cd=be("sections","settings"),wd=oe().deviceType,xd=wd.isTouch(),zd=wd.isPhone(),Ed=wd.isTablet(),Nd=["lists","autolink","autosave"],Sd={table_grid:!1,object_resizing:!1,resize:!1},kd=d(tf,"clientWidth"),Td=d(tf,"clientHeight"),Ad=d(nf,"margin-top"),Md=d(nf,"margin-left"),Rd=function(e,t,n){var r=yt.fromDom(e.getBody()),o=e.inline?r:function(e){return yt.fromDom(e.dom().ownerDocument.documentElement)}(r),i=function(e,t,n,r){var o=function(e){return e.dom().getBoundingClientRect()}(t);return{x:n-(e?o.left+t.dom().clientLeft+Md(t):0),y:r-(e?o.top+t.dom().clientTop+Ad(t):0)}}(e.inline,o,t,n);return function(e,t,n){var r=kd(e),o=Td(e);return 0<=t&&0<=n&&t<=r&&n<=o}(o,i.x,i.y)},Dd=function(e){return function(e){return k.from(e).map(yt.fromDom)}(e.inline?e.getBody():e.getContentAreaContainer()).map(function(e){return Bt(Ee(e),e)}).getOr(!1)};function _d(n){function r(){var e=n.theme;return e&&e.getNotificationManagerImpl?e.getNotificationManagerImpl():function t(){function e(){throw new Error("Theme did not provide a NotificationManager implementation.")}return{open:e,close:e,reposition:e,getArgs:e}}()}function o(){0<u.length&&r().reposition(u)}function i(t){p(u,function(e){return e===t}).each(function(e){u.splice(e,1)})}function t(t){if(!n.removed&&Dd(n))return g(u,function(e){return function(e,t){return!(e.type!==t.type||e.text!==t.text||e.progressBar||e.timeout||t.progressBar||t.timeout)}(r().getArgs(e),t)}).getOrThunk(function(){n.editorManager.setActive(n);var e=r().open(t,function(){i(e),o()});return function(e){u.push(e)}(e),o(),e})}var a,u=[];return(a=n).on("SkinLoaded",function(){var e=a.settings.service_message;e&&t({text:e,type:"warning",timeout:0})}),a.on("ResizeEditor ResizeWindow NodeChange",function(){pn.requestAnimationFrame(o)}),a.on("remove",function(){z(u.slice(),function(e){r().close(e)})}),{open:t,close:function(){k.from(u[0]).each(function(e){r().close(e),i(e),o()})},getNotifications:function(){return u}}}function Bd(n){function r(){var e=n.theme;return e&&e.getWindowManagerImpl?e.getWindowManagerImpl():function t(){function e(){throw new Error("Theme did not provide a WindowManager implementation.")}return{open:e,openUrl:e,alert:e,confirm:e,close:e,getParams:e,setParams:e}}()}function o(e,t){return function(){return t?t.apply(e,arguments):undefined}}function i(e){s.push(e),function(e){n.fire("OpenWindow",{dialog:e})}(e)}function a(t){!function(e){n.fire("CloseWindow",{dialog:e})}(t),0===(s=y(s,function(e){return e!==t})).length&&n.focus()}function u(e){n.editorManager.setActive(n),Gf(n);var t=e();return i(t),t}var s=[];return n.on("remove",function(){z(s,function(e){r().close(e)})}),{open:function(e,t){return u(function(){return r().open(e,t,a)})},openUrl:function(e){return u(function(){return r().openUrl(e,a)})},alert:function(e,t,n){r().alert(e,o(n||this,t))},confirm:function(e,t,n){r().confirm(e,o(n||this,t))},close:function(){k.from(s[s.length-1]).each(function(e){r().close(e),a(e)})}}}function Od(e,t){e.notificationManager.open({type:"error",text:t})}function Hd(e,t){e._skinLoaded?Od(e,t):e.on("SkinLoaded",function(){Od(e,t)})}function Pd(e){j.console.error(e)}function Ld(e,t,n){return n?"Failed to load "+e+": "+n+" from url "+t:"Failed to load "+e+" url: "+t}var Vd,Id=function(e){for(var t=[],n=1;n<arguments.length;n++)t[n-1]=arguments[n];var r=j.window.console;r&&(r.error?r.error.apply(r,arguments):r.log.apply(r,arguments))},Fd={pluginLoadError:function(e,t){Pd(Ld("plugin",e,t))},iconsLoadError:function(e,t){Pd(Ld("icons",e,t))},languageLoadError:function(e,t){Pd(Ld("language",e,t))},pluginInitError:function(e,t,n){var r=ra.translate(["Failed to initialize plugin: {0}",t]);Id(r,n),Hd(e,r)},uploadError:function(e,t){Hd(e,ra.translate(["Failed to upload image: {0}",t]))},displayError:Hd,initError:Id},Ud=(Vd={},{add:function(e,t){Vd[e]=t},get:function(e){return Vd[e]?Vd[e]:{icons:{}}},has:function(e){return kt(Vd,e)}}),jd=ga.PluginManager,qd=ga.ThemeManager;function $d(s,a){function n(e,t,n,r){var o,i;(o=new j.XMLHttpRequest).open("POST",a.url),o.withCredentials=a.credentials,o.upload.onprogress=function(e){r(e.loaded/e.total*100)},o.onerror=function(){n("Image upload failed due to a XHR Transport error. Code: "+o.status)},o.onload=function(){var e;o.status<200||300<=o.status?n("HTTP Error: "+o.status):(e=JSON.parse(o.responseText))&&"string"==typeof e.location?t(function(e,t){return e?e.replace(/\/$/,"")+"/"+t.replace(/^\//,""):t}(a.basePath,e.location)):n("Invalid JSON: "+o.responseText)},(i=new j.FormData).append("file",e.blob(),e.filename()),o.send(i)}function c(e,t){return{url:t,blobInfo:e,status:!0}}function l(e,t){return{url:"",blobInfo:e,status:!1,error:t}}function f(e,t){Mn.each(o[e],function(e){e(t)}),delete o[e]}function r(e,t){return e=Mn.grep(e,function(e){return!s.isUploaded(e.blobUri())}),Zt.all(Mn.map(e,function(e){return s.isPending(e.blobUri())?function(e){var t=e.blobUri();return new Zt(function(e){o[t]=o[t]||[],o[t].push(e)})}(e):function(i,a,u){return s.markPending(i.blobUri()),new Zt(function(t){function e(){}var n;try{var r=function(){n&&(n.close(),e)};a(i,function(e){r(),s.markUploaded(i.blobUri(),e),f(i.blobUri(),c(i,e)),t(c(i,e))},function(e){r(),s.removeFailed(i.blobUri()),f(i.blobUri(),l(i,e)),t(l(i,e))},function(e){e<0||100<e||(n=n||u()).progressBar.value(e)})}catch(o){t(l(i,o.message))}})}(e,a.handler,t)}))}var o={};return!1===D(a.handler)&&(a.handler=n),{upload:function(e,t){return!a.url&&function(e){return e===n}(a.handler)?new Zt(function(e){e([])}):r(e,t)}}}function Wd(e){var t,n,r=decodeURIComponent(e).split(",");return(n=/data:([^;]+)/.exec(r[0]))&&(t=n[1]),{type:t,data:r[1]}}function Kd(e){return(e||"blobid")+Jd++}var Xd=function(e){return 0===e.indexOf("blob:")?function(i){return new Zt(function(e,t){function n(){t("Cannot convert "+i+" to Blob. Resource might not exist or is inaccessible.")}try{var r=new j.XMLHttpRequest;r.open("GET",i,!0),r.responseType="blob",r.onload=function(){200===this.status?e(this.response):n()},r.onerror=n,r.send()}catch(o){n()}})}(e):0===e.indexOf("data:")?function(i){return new Zt(function(e){var t,n,r,o=Wd(i);try{t=j.atob(o.data)}catch(yN){return void e(new j.Blob([]))}for(n=new Uint8Array(t.length),r=0;r<n.length;r++)n[r]=t.charCodeAt(r);e(new j.Blob([n],{type:o.type}))})}(e):null},Yd=function(n){return new Zt(function(e){var t=new j.FileReader;t.onloadend=function(){e(t.result)},t.readAsDataURL(n)})},Gd=Wd,Jd=0;function Qd(o,i){var a={};return{findAll:function(e,n){var t;n=n||$(!0),t=y(function(e){return e?P(e.getElementsByTagName("img")):[]}(e),function(e){var t=e.src;return!!Nn.fileApi&&(!e.hasAttribute("data-mce-bogus")&&(!e.hasAttribute("data-mce-placeholder")&&(!(!t||t===Nn.transparentSrc)&&(0===t.indexOf("blob:")?!o.isUploaded(t)&&n(e):0===t.indexOf("data:")&&n(e)))))});var r=X(t,function(n){if(a[n.src])return new Zt(function(t){a[n.src].then(function(e){if("string"==typeof e)return e;t({image:n,blobInfo:e.blobInfo})})});var e=new Zt(function(e,t){!function(n,r,o,t){var i,a;0!==r.src.indexOf("blob:")?(i=Gd(r.src).data,(a=n.findFirst(function(e){return e.base64()===i}))?o({image:r,blobInfo:a}):Xd(r.src).then(function(e){a=n.create(Kd(),e,i),n.add(a),o({image:r,blobInfo:a})},function(e){t(e)})):(a=n.getByUri(r.src))?o({image:r,blobInfo:a}):Xd(r.src).then(function(t){Yd(t).then(function(e){i=Gd(e).data,a=n.create(Kd(),t,i),n.add(a),o({image:r,blobInfo:a})})},function(e){t(e)})}(i,n,e,t)}).then(function(e){return delete a[e.image.src],e})["catch"](function(e){return delete a[n.src],e});return a[n.src]=e});return Zt.all(r)}}}var Zd=0,eh=function(e){return e+Zd+++function(){function e(){return Math.round(4294967295*Math.random()).toString(36)}return"s"+(new Date).getTime().toString(36)+e()+e()+e()}()};function th(o){function t(t){return function(e){return o.selection?t(e):[]}}function r(e,t,n){for(var r=0;-1!==(r=e.indexOf(t,r))&&(e=e.substring(0,r)+n+e.substr(r+t.length),r+=n.length-t.length+1),-1!==r;);return e}function i(e,t,n){return e=r(e,'src="'+t+'"','src="'+n+'"'),e=r(e,'data-mce-src="'+t+'"','data-mce-src="'+n+'"')}function n(t,n){z(o.undoManager.data,function(e){"fragmented"===e.type?e.fragments=X(e.fragments,function(e){return i(e,t,n)}):e.content=i(e.content,t,n)})}function a(){return o.notificationManager.open({text:o.translate("Image uploading..."),type:"info",timeout:-1,progressBar:!0})}function u(e,t){h.removeByUri(e.src),n(e.src,t),o.$(e).attr({src:Sf(o)?t+"?"+(new Date).getTime():t,"data-mce-src":o.convertURL(t,"src")})}function s(n){return f=f||$d(m,{url:Tf(o),basePath:Af(o),credentials:Mf(o),handler:Rf(o)}),p().then(t(function(r){var e;return e=X(r,function(e){return e.blobInfo}),f.upload(e,a).then(t(function(e){var t=X(e,function(e,t){var n=r[t].image;return e.status&&kf(o)?u(n,e.url):e.error&&Fd.uploadError(o,e.error),{element:n,status:e.status}});return n&&n(t),t}))}))}function e(e){if(Nf(o))return s(e)}function c(t){return!1!==w(g,function(e){return e(t)})&&(0!==t.getAttribute("src").indexOf("data:")||Ef(o)(t))}function l(e){return e.replace(/src="(blob:[^"]+)"/g,function(e,n){var t=m.getResultUri(n);if(t)return'src="'+t+'"';var r=h.getByUri(n);return(r=r||b(o.editorManager.get(),function(e,t){return e||t.editorUpload&&t.editorUpload.blobCache.getByUri(n)},null))?'src="data:'+r.blob().type+";base64,"+r.base64()+'"':e})}var f,d,h=function(){var n=[],o=function(e){var t,n;if(!e.blob||!e.base64)throw new Error("blob and base64 representations of the image are required for BlobInfo to be created");return t=e.id||eh("blobid"),n=e.name||t,{id:$(t),name:$(n),filename:$(n+"."+function(e){return{"image/jpeg":"jpg","image/jpg":"jpg","image/gif":"gif","image/png":"png"}[e.toLowerCase()]||"dat"}(e.blob.type)),blob:$(e.blob),base64:$(e.base64),blobUri:$(e.blobUri||j.URL.createObjectURL(e.blob)),uri:$(e.uri)}},t=function(t){return e(function(e){return e.id()===t})},e=function(e){return y(n,e)[0]};return{create:function(e,t,n,r){if(K(e))return o({id:e,name:r,blob:t,base64:n});if(T(e))return o(e);throw new Error("Unknown input type")},add:function(e){t(e.id())||n.push(e)},get:t,getByUri:function(t){return e(function(e){return e.blobUri()===t})},findFirst:e,removeByUri:function(t){n=y(n,function(e){return e.blobUri()!==t||(j.URL.revokeObjectURL(e.blobUri()),!1)})},destroy:function(){z(n,function(e){j.URL.revokeObjectURL(e.blobUri())}),n=[]}}}(),m=function v(){function n(e,t){return{status:e,resultUri:t}}function t(e){return e in r}var r={};return{hasBlobUri:t,getResultUri:function(e){var t=r[e];return t?t.resultUri:null},isPending:function(e){return!!t(e)&&1===r[e].status},isUploaded:function(e){return!!t(e)&&2===r[e].status},markPending:function(e){r[e]=n(1,null)},markUploaded:function(e,t){r[e]=n(2,t)},removeFailed:function(e){delete r[e]},destroy:function(){r={}}}}(),g=[],p=function(){return(d=d||Qd(m,h)).findAll(o.getBody(),c).then(t(function(e){return e=y(e,function(e){return"string"!=typeof e||(Fd.displayError(o,e),!1)}),z(e,function(e){n(e.image.src,e.blobInfo.blobUri()),e.image.src=e.blobInfo.blobUri(),e.image.removeAttribute("data-mce-src")}),e}))};return o.on("SetContent",function(){Nf(o)?e():p()}),o.on("RawSaveContent",function(e){e.content=l(e.content)}),o.on("GetContent",function(e){e.source_view||"raw"===e.format||(e.content=l(e.content))}),o.on("PostRender",function(){o.parser.addNodeFilter("img",function(e){z(e,function(e){var t=e.attr("src");if(!h.getByUri(t)){var n=m.getResultUri(t);n&&e.attr("src",n)}})})}),{blobCache:h,addFilter:function(e){g.push(e)},uploadImages:s,uploadImagesAuto:e,scanForImages:p,destroy:function(){h.destroy(),m.destroy(),d=f=null}}}function nh(e,t,n){return Bt(t,e)?function(e){return e.slice(0,-1)}(function(e,t){for(var n=D(t)?t:c,r=e.dom(),o=[];null!==r.parentNode&&r.parentNode!==undefined;){var i=r.parentNode,a=yt.fromDom(i);if(o.push(a),!0===n(a))break;r=i}return o}(e,function(e){return n(e)||ze(e,t)})):[]}function rh(e,t){return nh(e,t,$(!1))}function oh(e,t){return e.hasOwnProperty(t.nodeName)}function ih(e,t){if(Ge.isText(t)){if(0===t.nodeValue.length)return!0;if(/^\s+$/.test(t.nodeValue)&&(!t.nextSibling||oh(e,t.nextSibling)))return!0}return!1}function ah(e){var t,n,r,o,i,a,u,s,c,l,f=e.dom,d=e.selection,h=e.schema,m=h.getBlockElements(),g=d.getStart(),p=e.getBody(),v=mf(e);if(g&&Ge.isElement(g)&&v&&(l=p.nodeName.toLowerCase(),h.isValidChild(l,v.toLowerCase())&&!function(t,e,n){return C(lh(yt.fromDom(n),yt.fromDom(e)),function(e){return oh(t,e.dom())})}(m,p,g))){for(n=(t=d.getRng()).startContainer,r=t.startOffset,o=t.endContainer,i=t.endOffset,c=ud(e),g=p.firstChild;g;)if(y=m,b=g,Ge.isText(b)||Ge.isElement(b)&&!oh(y,b)&&!Fc(b)){if(ih(m,g)){g=(u=g).nextSibling,f.remove(u);continue}a||(a=f.create(v,gf(e)),g.parentNode.insertBefore(a,g),s=!0),g=(u=g).nextSibling,a.appendChild(u)}else a=null,g=g.nextSibling;var y,b;s&&c&&(t.setStart(n,r),t.setEnd(o,i),d.setRng(t),e.nodeChanged())}}function uh(o,e){return Ya(function(e){var t=e.startContainer,n=e.startOffset;return Ge.isText(t)?0===n?k.some(yt.fromDom(t)):k.none():k.from(t.childNodes[n]).map(yt.fromDom)}(e),function(e){var t=e.endContainer,n=e.endOffset;return Ge.isText(t)?n===t.data.length?k.some(yt.fromDom(t)):k.none():k.from(t.childNodes[n-1]).map(yt.fromDom)}(e),function(e,t){var n=g(mh(o),d(ze,e)),r=g(gh(o),d(ze,t));return n.isSome()&&r.isSome()}).getOr(!1)}function sh(e,t,n,r){var o=n,i=new yi(n,o),a=e.schema.getNonEmptyElements();do{if(3===n.nodeType&&0!==Mn.trim(n.nodeValue).length)return void(r?t.setStart(n,0):t.setEnd(n,n.nodeValue.length));if(a[n.nodeName]&&!/^(TD|TH)$/.test(n.nodeName))return void(r?t.setStartBefore(n):"BR"===n.nodeName?t.setEndBefore(n):t.setEndAfter(n))}while(n=r?i.next():i.prev());"BODY"===o.nodeName&&(r?t.setStart(o,0):t.setEnd(o,o.childNodes.length))}function ch(e){var t=e.selection.getSel();return t&&0<t.rangeCount}var lh=rh,fh=function(e,t){return[e].concat(rh(e,t))},dh=function(e){mf(e)&&e.on("NodeChange",d(ah,e))},hh=function(e,t){return e&&t&&e.startContainer===t.startContainer&&e.startOffset===t.startOffset&&e.endContainer===t.endContainer&&e.endOffset===t.endOffset},mh=function(t){return _e(t).fold($([t]),function(e){return[t].concat(mh(e))})},gh=function(t){return Be(t).fold($([t]),function(e){return"br"===ie(e)?ke(e).map(function(e){return[t].concat(gh(e))}).getOr([]):[t].concat(gh(e))})},ph=(vh.prototype.nodeChanged=function(e){var t,n,r,o=this.editor.selection;this.editor.initialized&&o&&!this.editor.settings.disable_nodechange&&!this.editor.readonly&&(r=this.editor.getBody(),(t=o.getStart(!0)||r).ownerDocument===this.editor.getDoc()&&this.editor.dom.isChildOf(t,r)||(t=r),n=[],this.editor.dom.getParent(t,function(e){if(e===r)return!0;n.push(e)}),(e=e||{}).element=t,e.parents=n,this.editor.fire("NodeChange",e))},vh.prototype.isSameElementPath=function(e){var t,n;if((n=this.editor.$(e).parentsUntil(this.editor.getBody()).add(e)).length===this.lastPath.length){for(t=n.length;0<=t&&n[t]===this.lastPath[t];t--);if(-1===t)return this.lastPath=n,!0}return this.lastPath=n,!1},vh);function vh(r){var o;this.lastPath=[],this.editor=r;var t=this;"onselectionchange"in r.getDoc()||r.on("NodeChange click mouseup keyup focus",function(e){var t,n;n={startContainer:(t=r.selection.getRng()).startContainer,startOffset:t.startOffset,endContainer:t.endContainer,endOffset:t.endOffset},"nodechange"!==e.type&&hh(n,o)||r.fire("SelectionChange"),o=n}),r.on("contextmenu",function(){r.fire("SelectionChange")}),r.on("SelectionChange",function(){var e=r.selection.getStart(!0);!e||!Nn.range&&r.selection.isCollapsed()||ch(r)&&!t.isSameElementPath(e)&&r.dom.isChildOf(e,r.getBody())&&r.nodeChanged({selectionChange:!0})}),r.on("mouseup",function(e){!e.isDefaultPrevented()&&ch(r)&&("IMG"===r.selection.getNode().nodeName?pn.setEditorTimeout(r,function(){r.nodeChanged()}):r.nodeChanged())})}function yh(e){return/^[\r\n\t ]$/.test(e)}function bh(e){return!yh(e)&&!Mh(e)}function Ch(n,r,o){return k.from(o.container()).filter(Ge.isText).exists(function(e){var t=n?0:-1;return r(e.data.charAt(o.offset()+t))})}function wh(e){var t=e.container();return Ge.isText(t)&&0===t.data.length}function xh(t,n){return function(e){return k.from(ws(t?0:-1,e)).filter(n).isSome()}}function zh(e){return"IMG"===e.nodeName&&"block"===ve(yt.fromDom(e),"display")}function Eh(e){return Ge.isContentEditableFalse(e)&&!Ge.isBogusAll(e)}function Nh(e){return b(e,function(e,t){return e.concat(function(t){function e(e){return X(e,function(e){return(e=Ia(e)).node=t,e})}if(Ge.isElement(t))return e(t.getClientRects());if(Ge.isText(t)){var n=t.ownerDocument.createRange();return n.setStart(t,0),n.setEnd(t,t.data.length),e(n.getClientRects())}}(t))},[])}var Sh,kh,Th,Ah={BACKSPACE:8,DELETE:46,DOWN:40,ENTER:13,LEFT:37,RIGHT:39,SPACEBAR:32,TAB:9,UP:38,END:35,HOME:36,modifierPressed:function(e){return e.shiftKey||e.ctrlKey||e.altKey||this.metaKeyPressed(e)},metaKeyPressed:function(e){return Nn.mac?e.metaKey:e.ctrlKey&&!e.altKey}},Mh=(Sh="\xa0",function(e){return Sh===e}),Rh=d(Ch,!0,yh),Dh=d(Ch,!1,yh),_h=xh(!0,zh),Bh=xh(!1,zh),Oh=xh(!0,Ge.isTable),Hh=xh(!1,Ge.isTable),Ph=xh(!0,Eh),Lh=xh(!1,Eh);(Th=kh=kh||{})[Th.Up=-1]="Up",Th[Th.Down=1]="Down";function Vh(o,i,a,e,u,t){function n(e){var t,n,r;for(r=Nh([e]),-1===o&&(r=r.reverse()),t=0;t<r.length;t++)if(n=r[t],!a(n,s)){if(0<l.length&&i(n,kn.last(l))&&c++,n.line=c,u(n))return!0;l.push(n)}}var r,s,c=0,l=[];return(s=kn.last(t.getClientRects()))&&(n(r=t.getNode()),function(e,t,n,r){for(;r=ys(r,e,Va,t);)if(n(r))return}(o,e,n,r)),l}function Ih(t){return function(e){return function(e,t){return t.line>e}(t,e)}}function Fh(t){return function(e){return function(e,t){return t.line===e}(t,e)}}function Uh(e,t){return Math.abs(e.left-t)}function jh(e,t){return Math.abs(e.right-t)}function qh(e,t){return e>=t.left&&e<=t.right}function $h(e,o){return kn.reduce(e,function(e,t){var n,r;return n=Math.min(Uh(e,o),jh(e,o)),r=Math.min(Uh(t,o),jh(t,o)),qh(o,t)?t:qh(o,e)?e:r===n&&Ym(t.node)?t:r<n?t:e})}function Wh(e,t,n,r){for(;r=Gm(r,e,Va,t);)if(n(r))return}function Kh(e,t,n){var r,o=Nh(function(e){return y(P(e.getElementsByTagName("*")),ms)}(e)),i=y(o,function(e){return n>=e.top&&n<=e.bottom});return(r=(r=$h(i,t))&&$h(function(e,r){function t(t,e){var n;return n=y(Nh([e]),function(e){return!t(e,r)}),o=o.concat(n),0===n.length}var o=[];return o.push(r),Wh(kh.Up,e,d(t,ja),r.node),Wh(kh.Down,e,d(t,qa),r.node),o}(e,r),t))&&ms(r.node)?function(e,t){return{node:e.node,before:Uh(e,t)<jh(e,t)}}(r,t):null}function Xh(e){var t,n,r,o;return o=e.getBoundingClientRect(),n=(t=e.ownerDocument).documentElement,r=t.defaultView,{top:o.top+r.pageYOffset-n.clientTop,left:o.left+r.pageXOffset-n.clientLeft}}function Yh(e){e&&e.parentNode&&e.parentNode.removeChild(e)}function Gh(i,a){return function(e){if(function(e){return 0===e.button}(e)){var t=g(a.dom.getParents(e.target),Tu(Zm,eg)).getOr(null);if(function(e,t){return Zm(t)&&t!==e}(a.getBody(),t)){var n=a.dom.getPos(t),r=a.getBody(),o=a.getDoc().documentElement;i.element=t,i.screenX=e.screenX,i.screenY=e.screenY,i.maxX=(a.inline?r.scrollWidth:o.offsetWidth)-2,i.maxY=(a.inline?r.scrollHeight:o.offsetHeight)-2,i.relX=e.pageX-n.x,i.relY=e.pageY-n.y,i.width=t.offsetWidth,i.height=t.offsetHeight,i.ghost=function(e,t,n,r){var o=t.cloneNode(!0);e.dom.setStyles(o,{width:n,height:r}),e.dom.setAttrib(o,"data-mce-selected",null);var i=e.dom.create("div",{"class":"mce-drag-container","data-mce-bogus":"all",unselectable:"on",contenteditable:"false"});return e.dom.setStyles(i,{position:"absolute",opacity:.5,overflow:"hidden",border:0,padding:0,margin:0,width:n,height:r}),e.dom.setStyles(o,{margin:0,boxSizing:"border-box"}),i.appendChild(o),i}(a,t,i.width,i.height)}}}}function Jh(r,o){return function(e){if(r.dragging&&function(e,t,n){return t!==n&&!e.dom.isChildOf(t,n)&&!Zm(t)}(o,function(e){var t=e.getSel().getRangeAt(0).startContainer;return 3===t.nodeType?t.parentNode:t}(o.selection),r.element)){var t=function(e){var t=e.cloneNode(!0);return t.removeAttribute("data-mce-selected"),t}(r.element),n=o.fire("drop",{targetClone:t,clientX:e.clientX,clientY:e.clientY});n.isDefaultPrevented()||(t=n.targetClone,o.undoManager.transact(function(){Yh(r.element),o.insertContent(o.dom.getOuterHTML(t)),o._selectionOverrides.hideFakeCaret()}))}tg(r)}}function Qh(e){var t,n,r,o,i,a,u={};t=Xi.DOM,a=j.document,n=Gh(u,e),r=function(r,o){var i=pn.throttle(function(e,t){o._selectionOverrides.hideFakeCaret(),o.selection.placeCaretAt(e,t)},0);return function(e){var t=Math.max(Math.abs(e.screenX-r.screenX),Math.abs(e.screenY-r.screenY));if(function(e){return e.element}(r)&&!r.dragging&&10<t){if(o.fire("dragstart",{target:r.element}).isDefaultPrevented())return;r.dragging=!0,o.focus()}if(r.dragging){var n=function(e,t){return{pageX:t.pageX-e.relX,pageY:t.pageY+5}}(r,Qm(o,e));!function(e,t){e.parentNode!==t&&t.appendChild(e)}(r.ghost,o.getBody()),function(e,t,n,r,o,i){var a=0,u=0;e.style.left=t.pageX+"px",e.style.top=t.pageY+"px",t.pageX+n>o&&(a=t.pageX+n-o),t.pageY+r>i&&(u=t.pageY+r-i),e.style.width=n-a+"px",e.style.height=r-u+"px"}(r.ghost,n,r.width,r.height,r.maxX,r.maxY),i(e.clientX,e.clientY)}}}(u,e),o=Jh(u,e),i=function(e,t){return function(){e.dragging&&t.fire("dragend"),tg(e)}}(u,e),e.on("mousedown",n),e.on("mousemove",r),e.on("mouseup",o),t.bind(a,"mousemove",r),t.bind(a,"mouseup",i),e.on("remove",function(){t.unbind(a,"mousemove",r),t.unbind(a,"mouseup",i)})}function Zh(e,t,n,r,o){return t._selectionOverrides.showCaret(e,n,r,o)}function em(e,t){return e.fire("BeforeObjectSelected",{target:t}).isDefaultPrevented()?null:function(e){var t=e.ownerDocument.createRange();return t.selectNode(e),t}(t)}function tm(e,t,n){var r=Es(1,e.getBody(),t),o=Ds.fromRangeStart(r),i=o.getNode();if(og(i))return Zh(1,e,i,!o.isAtEnd(),!1);var a=o.getNode(!0);if(og(a))return Zh(1,e,a,!1,!1);var u=e.dom.getParent(o.getNode(),function(e){return og(e)||rg(e)});return og(u)?Zh(1,e,u,!1,n):null}function nm(e,t,n){if(!t||!t.collapsed)return t;var r=tm(e,t,n);return r||t}function rm(e,t){for(var n=e.getBody();t&&t!==n;){if(ag(t)||ug(t))return t;t=t.parentNode}return null}function om(g){function a(e){e&&g.selection.setRng(e)}function o(){return g.selection.getRng()}function p(e,t,n,r){return void 0===r&&(r=!0),g.fire("ShowCaret",{target:t,direction:e,before:n}).isDefaultPrevented()?null:(r&&g.selection.scrollIntoView(t,-1===e),u.show(n,t))}function t(e){return Da(e)||hu(e)||mu(e)}var v,y=g.getBody(),u=ds(g.getBody(),function(e){return g.dom.isBlock(e)},function(){return ud(g)}),b="sel-"+g.dom.uniqueId(),C=function(e){return t(e.startContainer)||t(e.endContainer)},s=function(e){var t=g.schema.getShortEndedElements(),n=g.dom.createRng(),r=e.startContainer,o=e.startOffset,i=e.endContainer,a=e.endOffset;return kt(t,r.nodeName.toLowerCase())?0===o?n.setStartBefore(r):n.setStartAfter(r):n.setStart(r,o),kt(t,i.nodeName.toLowerCase())?0===a?n.setEndBefore(i):n.setEndAfter(i):n.setEnd(i,a),n},c=function(e,t){var n,r,o,i,a,u,s,c,l,f,d=g.$,h=g.dom;if(!e)return null;if(e.collapsed){if(!C(e))if(!1===t){if(c=Ss(-1,y,e),ms(c.getNode(!0)))return p(-1,c.getNode(!0),!1,!1);if(ms(c.getNode()))return p(-1,c.getNode(),!c.isAtEnd(),!1)}else{if(c=Ss(1,y,e),ms(c.getNode()))return p(1,c.getNode(),!c.isAtEnd(),!1);if(ms(c.getNode(!0)))return p(1,c.getNode(!0),!1,!1)}return null}if(i=e.startContainer,a=e.startOffset,u=e.endOffset,3===i.nodeType&&0===a&&ug(i.parentNode)&&(i=i.parentNode,a=h.nodeIndex(i),i=i.parentNode),1!==i.nodeType)return null;if(u===a+1&&i===e.endContainer&&(n=i.childNodes[a]),!ug(n))return null;if(l=f=n.cloneNode(!0),(s=g.fire("ObjectSelected",{target:n,targetClone:l})).isDefaultPrevented())return null;r=wa(yt.fromDom(g.getBody()),"#"+b).fold(function(){return d([])},function(e){return d([e.dom()])}),l=s.targetClone,0===r.length&&(r=d('<div data-mce-bogus="all" class="mce-offscreen-selection"></div>').attr("id",b)).appendTo(g.getBody()),e=g.dom.createRng(),l===f&&Nn.ie?(r.empty().append('<p style="font-size: 0" data-mce-bogus="all">\xa0</p>').append(l),e.setStartAfter(r[0].firstChild.firstChild),e.setEndAfter(l)):(r.empty().append("\xa0").append(l).append("\xa0"),e.setStart(r[0].firstChild,1),e.setEnd(r[0].lastChild,0)),r.css({top:h.getPos(n,g.getBody()).y}),r[0].focus(),(o=g.selection.getSel()).removeAllRanges(),o.addRange(e);var m=yt.fromDom(n);return z(ma(yt.fromDom(g.getBody()),"*[data-mce-selected]"),function(e){ze(m,e)||pe(e,"data-mce-selected")}),g.dom.getAttrib(n,"data-mce-selected")||n.setAttribute("data-mce-selected","1"),v=n,w(),e},l=function(){v&&(v.removeAttribute("data-mce-selected"),wa(yt.fromDom(g.getBody()),"#"+b).each(_i),v=null),wa(yt.fromDom(g.getBody()),"#"+b).each(_i),v=null},w=function(){u.hide()};return Nn.ceFalse&&function(){g.on("mouseup",function(e){var t=o();t.collapsed&&Rd(g,e.clientX,e.clientY)&&a(tm(g,t,!1))}),g.on("click",function(e){var t;(t=rm(g,e.target))&&(ug(t)&&(e.preventDefault(),g.focus()),ag(t)&&g.dom.isChildOf(t,g.selection.getNode())&&l())}),g.on("blur NewBlock",function(){l()}),g.on("ResizeWindow FullscreenStateChanged",function(){return u.reposition()});function i(e,t){var n=g.dom.getParent(e,g.dom.isBlock),r=g.dom.getParent(t,g.dom.isBlock);return!(!n||!g.dom.isChildOf(n,r)||!1!==ug(rm(g,n)))||n&&!function(e,t){return g.dom.getParent(e,g.dom.isBlock)===g.dom.getParent(t,g.dom.isBlock)}(n,r)&&function(e){var t=rc(e);if(!e.firstChild)return!1;var n=Ds.before(e.firstChild),r=t.next(n);return r&&!Ph(r)&&!Lh(r)}(n)}var n,r;r=!1,(n=g).on("touchstart",function(){r=!1}),n.on("touchmove",function(){r=!0}),n.on("touchend",function(e){if(!r){var t=rm(n,e.target);ug(t)&&(e.preventDefault(),c(em(n,t)))}},!0),g.on("mousedown",function(e){var t,n=e.target;if((n===y||"HTML"===n.nodeName||g.dom.isChildOf(n,y))&&!1!==Rd(g,e.clientX,e.clientY))if(t=rm(g,n))ug(t)?(e.preventDefault(),c(em(g,t))):(l(),ag(t)&&e.shiftKey||Jm(e.clientX,e.clientY,g.selection.getRng())||(w(),g.selection.placeCaretAt(e.clientX,e.clientY)));else if(!1===ms(n)){l(),w();var r=Kh(y,e.clientX,e.clientY);if(r&&!i(e.target,r.node)){e.preventDefault();var o=p(1,r.node,r.before,!1);g.getBody().focus(),a(o)}}}),g.on("keypress",function(e){Ah.modifierPressed(e)||(e.keyCode,ug(g.selection.getNode())&&e.preventDefault())}),g.on("GetSelectionRange",function(e){var t=e.range;if(v){if(!v.parentNode)return void(v=null);(t=t.cloneRange()).selectNode(v),e.range=t}}),g.on("SetSelectionRange",function(e){e.range=s(e.range);var t=c(e.range,e.forward);t&&(e.range=t)});g.on("AfterSetSelectionRange",function(e){var t=e.range;C(t)||function(e){return"mcepastebin"===e.id}(t.startContainer.parentNode)||w(),function(e){return g.dom.hasClass(e,"mce-offscreen-selection")}(t.startContainer.parentNode)||l()}),g.on("copy",function(e){var t=e.clipboardData;if(!e.isDefaultPrevented()&&e.clipboardData&&!Nn.ie){var n=function(){var e=g.dom.get(b);return e?e.getElementsByTagName("*")[0]:e}();n&&(e.preventDefault(),t.clearData(),t.setData("text/html",n.outerHTML),t.setData("text/plain",n.outerText))}}),ng(g),ig(g)}(),{showCaret:p,showBlockCaretContainer:function(e){e.hasAttribute("data-mce-caret")&&(Pa(e),a(o()),g.selection.scrollIntoView(e))},hideFakeCaret:w,destroy:function(){u.destroy(),v=null}}}function im(e){return Ge.isElement(e)?e.outerHTML:Ge.isText(e)?ir.encodeRaw(e.data,!1):Ge.isComment(e)?"\x3c!--"+e.data+"--\x3e":""}function am(e,t,n){var r=function(e){var t,n,r;for(r=j.document.createElement("div"),t=j.document.createDocumentFragment(),e&&(r.innerHTML=e);n=r.firstChild;)t.appendChild(n);return t}(t);if(e.hasChildNodes()&&n<e.childNodes.length){var o=e.childNodes[n];o.parentNode.insertBefore(r,o)}else e.appendChild(r)}function um(e){return{type:"fragmented",fragments:e,content:"",bookmark:null,beforeBookmark:null}}function sm(e){return{type:"complete",fragments:null,content:e,bookmark:null,beforeBookmark:null}}function cm(e){return"fragmented"===e.type?e.fragments.join(""):e.content}function lm(e){var t=yt.fromTag("body",mg.get().getOrThunk(function(){var e=j.document.implementation.createHTMLDocument("undo");return mg.set(k.some(e)),e}));return Aa(t,cm(e)),z(ma(t,"*[data-mce-bogus]"),Ni),function(e){return e.dom().innerHTML}(t)}function fm(e){return 0===e.get()}function dm(e,t,n){fm(n)&&(e.typing=t)}function hm(e,t){e.typing&&(dm(e,!1,t),e.add())}function mm(n){var r=Je(k.none()),o=Je(0),i=Je(0),a={data:[],typing:!1,beforeChange:function(){!function(e,t,n){fm(t)&&n.set(k.some(Vs.getUndoBookmark(e.selection)))}(n,o,r)},add:function(e,t){return function(e,t,n,r,o,i,a){var u=e.settings,s=gg(e);if(i=i||{},i=Mn.extend(i,s),!1===fm(r)||e.removed)return null;var c=t.data[n.get()];if(e.fire("BeforeAddUndo",{level:i,lastLevel:c,originalEvent:a}).isDefaultPrevented())return null;if(c&&vg(c,i))return null;if(t.data[n.get()]&&o.get().each(function(e){t.data[n.get()].beforeBookmark=e}),u.custom_undo_redo_levels&&t.data.length>u.custom_undo_redo_levels){for(var l=0;l<t.data.length-1;l++)t.data[l]=t.data[l+1];t.data.length--,n.set(t.data.length)}i.bookmark=Vs.getUndoBookmark(e.selection),n.get()<t.data.length-1&&(t.data.length=n.get()+1),t.data.push(i),n.set(t.data.length-1);var f={level:i,lastLevel:c,originalEvent:a};return e.fire("AddUndo",f),0<n.get()&&(e.setDirty(!0),e.fire("change",f)),i}(n,a,i,o,r,e,t)},undo:function(){return function(e,t,n,r){var o;return t.typing&&(t.add(),t.typing=!1,dm(t,!1,n)),0<r.get()&&(r.set(r.get()-1),o=t.data[r.get()],pg(e,o,!0),e.setDirty(!0),e.fire("Undo",{level:o})),o}(n,a,o,i)},redo:function(){return function(e,t,n){var r;return t.get()<n.length-1&&(t.set(t.get()+1),r=n[t.get()],pg(e,r,!1),e.setDirty(!0),e.fire("Redo",{level:r})),r}(n,i,a.data)},clear:function(){!function(e,t,n){t.data=[],n.set(0),t.typing=!1,e.fire("ClearUndos")}(n,a,i)},reset:function(){!function(e){e.clear(),e.add()}(a)},hasUndo:function(){return function(e,t,n){return 0<n.get()||t.typing&&t.data[0]&&!vg(gg(e),t.data[0])}(n,a,i)},hasRedo:function(){return function(e,t){return t.get()<e.data.length-1&&!e.typing}(a,i)},transact:function(e){return function(e,t,n){return hm(e,t),e.beforeChange(),e.ignore(n),e.add()}(a,o,e)},ignore:function(e){!function(e,t){try{e.set(e.get()+1),t()}finally{e.set(e.get()-1)}}(o,e)},extra:function(e,t){!function(e,t,n,r,o){if(t.transact(r)){var i=t.data[n.get()].bookmark,a=t.data[n.get()-1];pg(e,a,!0),t.transact(o)&&(t.data[n.get()-1].beforeBookmark=i)}}(n,a,i,e,t)}};return function(n,r,o){function i(e){dm(r,!1,o),r.add({},e)}var a=Je(!1);n.on("init",function(){r.add()}),n.on("BeforeExecCommand",function(e){var t=e.command;"Undo"!==t&&"Redo"!==t&&"mceRepaint"!==t&&(hm(r,o),r.beforeChange())}),n.on("ExecCommand",function(e){var t=e.command;"Undo"!==t&&"Redo"!==t&&"mceRepaint"!==t&&i(e)}),n.on("ObjectResizeStart cut",function(){r.beforeChange()}),n.on("SaveContent ObjectResized blur",i),n.on("dragend",i),n.on("keyup",function(e){var t=e.keyCode;e.isDefaultPrevented()||((33<=t&&t<=36||37<=t&&t<=40||45===t||e.ctrlKey)&&(i(),n.nodeChanged()),46!==t&&8!==t||n.nodeChanged(),a.get()&&r.typing&&!1===vg(gg(n),r.data[0])&&(!1===n.isDirty()&&(n.setDirty(!0),n.fire("change",{level:r.data[0],lastLevel:null})),n.fire("TypingUndo"),a.set(!1),n.nodeChanged()))}),n.on("keydown",function(e){var t=e.keyCode;if(!e.isDefaultPrevented())if(33<=t&&t<=36||37<=t&&t<=40||45===t)r.typing&&i(e);else{var n=e.ctrlKey&&!e.altKey||e.metaKey;!(t<16||20<t)||224===t||91===t||r.typing||n||(r.beforeChange(),dm(r,!0,o),r.add({},e),a.set(!0))}}),n.on("mousedown",function(e){r.typing&&i(e)});n.on("input",function(e){e.inputType&&(function(e){return"insertReplacementText"===e.inputType}(e)||function(e){return"insertText"===e.inputType&&null===e.data}(e))&&i(e)}),n.on("AddUndo Undo Redo ClearUndos",function(e){e.isDefaultPrevented()||n.nodeChanged()})}(n,a,o),function(e){e.addShortcut("meta+z","","Undo"),e.addShortcut("meta+y,meta+shift+z","","Redo")}(n),a}function gm(e,t,n){var r=e.formatter.get(n);if(r)for(var o=0;o<r.length;o++)if(!1===r[o].inherit&&e.dom.is(t,r[o].selector))return!0;return!1}function pm(t,e,n,r){var o=t.dom.getRoot();return e!==o&&(e=t.dom.getParent(e,function(e){return!!gm(t,e,n)||(e.parentNode===o||!!xg(t,e,n,r,!0))}),xg(t,e,n,r))}function vm(e,t,n){return!!wg(t,n.inline)||(!!wg(t,n.block)||(n.selector?1===t.nodeType&&e.is(t,n.selector):void 0))}function ym(e,t,n,r,o,i){var a,u,s,c=n[r];if(n.onmatch)return n.onmatch(t,n,r);if(c)if("undefined"==typeof c.length){for(a in c)if(c.hasOwnProperty(a)){if(u="attributes"===r?e.getAttrib(t,a):jc.getStyle(e,t,a),o&&!u&&!n.exact)return;if((!o||n.exact)&&!wg(u,jc.normalizeStyleValue(e,jc.replaceVars(c[a],i),a)))return}}else for(s=0;s<c.length;s++)if("attributes"===r?e.getAttrib(t,c[s]):jc.getStyle(e,t,c[s]))return n;return n}function bm(e,t){return e.splitText(t)}function Cm(e){var t=e.startContainer,n=e.startOffset,r=e.endContainer,o=e.endOffset;return t===r&&Ge.isText(t)?0<n&&n<t.nodeValue.length&&(t=(r=bm(t,n)).previousSibling,n<o?(t=r=bm(r,o-=n).previousSibling,o=r.nodeValue.length,n=0):o=0):(Ge.isText(t)&&0<n&&n<t.nodeValue.length&&(t=bm(t,n),n=0),Ge.isText(r)&&0<o&&o<r.nodeValue.length&&(o=(r=bm(r,o).previousSibling).nodeValue.length)),{startContainer:t,startOffset:n,endContainer:r,endOffset:o}}function wm(e,t,n){if(0!==n){var r=e.data.slice(t,t+n),o=t+n>=e.data.length,i=0===t;e.replaceData(t,n,function(n,r,o){return b(n,function(e,t){return function(e){return-1!==" \f\n\r\t\x0B".indexOf(e)}(t)||"\xa0"===t?e.previousCharIsSpace||""===e.str&&r||e.str.length===n.length-1&&o?{previousCharIsSpace:!1,str:e.str+"\xa0"}:{previousCharIsSpace:!0,str:e.str+" "}:{previousCharIsSpace:!1,str:e.str+t}},{previousCharIsSpace:!1,str:""}).str}(r,i,o))}}function xm(e,t){var n=e.data.slice(t),r=n.length-function(e){return e.replace(/^\s+/g,"")}(n).length;return wm(e,t,r)}function zm(e,t){var n=yt.fromDom(e);return function(e,t,n){return Ca(e,t,n).isSome()}(yt.fromDom(t),"pre,code",d(ze,n))}function Em(e,t){return La(t)&&!1===function(e,t){return Ge.isText(t)&&/^[ \t\r\n]*$/.test(t.data)&&!1===zm(e,t)}(e,t)||function(e){return Ge.isElement(e)&&"A"===e.nodeName&&e.hasAttribute("name")}(t)||Eg(t)}function Nm(e,t){return function(e,t){var n=e.container(),r=e.offset();return!1===Ds.isTextPosition(e)&&n===t.parentNode&&r>Ds.before(t).offset()}(t,e)?Ds(t.container(),t.offset()-1):t}function Sm(e){return La(e.previousSibling)?k.some(function(e){return Ge.isText(e)?Ds(e,e.data.length):Ds.after(e)}(e.previousSibling)):e.previousSibling?Pc.lastPositionIn(e.previousSibling):k.none()}function km(e){return La(e.nextSibling)?k.some(function(e){return Ge.isText(e)?Ds(e,0):Ds.before(e)}(e.nextSibling)):e.nextSibling?Pc.firstPositionIn(e.nextSibling):k.none()}function Tm(e,t){return Sm(t).orThunk(function(){return km(t)}).orThunk(function(){return function(e,t){var n=Ds.before(t.previousSibling?t.previousSibling:t.parentNode);return Pc.prevPosition(e,n).fold(function(){return Pc.nextPosition(e,Ds.after(t))},k.some)}(e,t)})}function Am(e,t){return km(t).orThunk(function(){return Sm(t)}).orThunk(function(){return function(e,t){return Pc.nextPosition(e,Ds.after(t)).fold(function(){return Pc.prevPosition(e,Ds.before(t))},k.some)}(e,t)})}function Mm(e,t,n){return function(e,t,n){return e?Am(t,n):Tm(t,n)}(e,t,n).map(d(Nm,n))}function Rm(t,n,e){e.fold(function(){t.focus()},function(e){t.selection.setRng(e.toRange(),n)})}function Dm(e,t){return t&&e.schema.getBlockElements().hasOwnProperty(ie(t))}function _m(e){if(kg(e)){var t=yt.fromHtml('<br data-mce-bogus="1">');return Ei(e),Di(e,t),k.some(Ds.before(t.dom()))}return k.none()}function Bm(e,t,a){var n=ke(e).filter(zt),r=Te(e).filter(zt);return _i(e),function(e,t,n,r){return e.isSome()&&t.isSome()&&n.isSome()?k.some(r(e.getOrDie(),t.getOrDie(),n.getOrDie())):k.none()}(n,r,t,function(e,t,n){var r=e.dom(),o=t.dom(),i=r.data.length;return function(e,t,n){var r=ne(e.data).length;e.appendData(t.data),_i(yt.fromDom(t)),n&&xm(e,r)}(r,o,a),n.container()===o?Ds(r,i):n}).orThunk(function(){return a&&(n.each(function(e){return function(e,t){var n=e.data.slice(0,t),r=n.length-ne(n).length;return wm(e,t-r,r)}(e.dom(),e.dom().length)}),r.each(function(e){return xm(e.dom(),0)})),t})}function Om(e){return 0<function(e){for(var t=[];e;){if(3===e.nodeType&&e.nodeValue!==Ag||1<e.childNodes.length)return[];1===e.nodeType&&t.push(e),e=e.firstChild}return t}(e).length}function Hm(e){if(e){var t=new yi(e,e);for(e=t.current();e;e=t.next())if(3===e.nodeType)return e}return null}function Pm(e){var t=yt.fromTag("span");return me(t,{id:Mg,"data-mce-bogus":"1","data-mce-type":"format-caret"}),e&&Di(t,yt.fromText(Ag)),t}function Lm(e,t,n){void 0===n&&(n=!0);var r=e.dom,o=e.selection;if(Om(t))Tg(e,!1,yt.fromDom(t),n);else{var i=o.getRng(),a=r.getParent(t,r.isBlock),u=function(e){var t=Hm(e);return t&&t.nodeValue.charAt(0)===Ag&&t.deleteData(0,1),t}(t);i.startContainer===u&&0<i.startOffset&&i.setStart(u,i.startOffset-1),i.endContainer===u&&0<i.endOffset&&i.setEnd(u,i.endOffset-1),r.remove(t,!0),a&&r.isEmpty(a)&&bg(yt.fromDom(a)),o.setRng(i)}}function Vm(e,t,n){void 0===n&&(n=!0);var r=e.dom,o=e.selection;if(t)Lm(e,t,n);else if(!(t=os(e.getBody(),o.getStart())))for(;t=r.get(Mg);)Lm(e,t,!1)}function Im(e,t,n){var r=e.dom,o=r.getParent(n,d(jc.isTextBlock,e));o&&r.isEmpty(o)?n.parentNode.replaceChild(t,n):(yg(yt.fromDom(n)),r.isEmpty(n)?n.parentNode.replaceChild(t,n):r.insertAfter(t,n))}function Fm(e,t){return e.appendChild(t),t}function Um(e,t){var n=m(e,function(e,t){return Fm(e,t.cloneNode(!1))},t);return Fm(n,n.ownerDocument.createTextNode(Ag))}function jm(t){t.on("mouseup keydown",function(e){!function(e,t){var n=e.selection,r=e.getBody();Vm(e,null,!1),8!==t&&46!==t||!n.isCollapsed()||n.getStart().innerHTML!==Ag||Vm(e,os(r,n.getStart())),37!==t&&39!==t||Vm(e,os(r,n.getStart()))}(t,e.keyCode)})}function qm(e,t){return e.schema.getTextInlineElements().hasOwnProperty(ie(t))&&!rs(t.dom())&&!Ge.isBogus(t.dom())}var $m,Wm,Km=d(Vh,kh.Up,ja,qa),Xm=d(Vh,kh.Down,qa,ja),Ym=Ge.isContentEditableFalse,Gm=ys,Jm=function(t,n,e){if(e.collapsed)return!1;if(Nn.browser.isIE()&&e.startOffset===e.endOffset-1&&e.startContainer===e.endContainer){var r=e.startContainer.childNodes[e.startOffset];if(Ge.isElement(r))return C(r.getClientRects(),function(e){return $a(e,t,n)})}return C(e.getClientRects(),function(e){return $a(e,t,n)})},Qm=function(e,t){return function(e,t,n){return{pageX:n.left-e.left+t.left,pageY:n.top-e.top+t.top}}(function(e){return e.inline?Xh(e.getBody()):{left:0,top:0}}(e),function(e){var t=e.getBody();return e.inline?{left:t.scrollLeft,top:t.scrollTop}:{left:0,top:0}}(e),function(e,t){if(t.target.ownerDocument===e.getDoc())return{left:t.pageX,top:t.pageY};var n=Xh(e.getContentAreaContainer()),r=function(e){var t=e.getBody(),n=e.getDoc().documentElement,r={left:t.scrollLeft,top:t.scrollTop},o={left:t.scrollLeft||n.scrollLeft,top:t.scrollTop||n.scrollTop};return e.inline?r:o}(e);return{left:t.pageX-n.left+r.left,top:t.pageY-n.top+r.top}}(e,t))},Zm=Ge.isContentEditableFalse,eg=Ge.isContentEditableTrue,tg=function(e){e.dragging=!1,e.element=null,Yh(e.ghost)},ng=function(e){Qh(e),function(n){n.on("drop",function(e){var t="undefined"!=typeof e.clientX?n.getDoc().elementFromPoint(e.clientX,e.clientY):null;(Zm(t)||Zm(n.dom.getContentEditableParent(t)))&&e.preventDefault()})}(e)},rg=Ge.isContentEditableTrue,og=Ge.isContentEditableFalse,ig=function(t){var e=aa(function(){if(!t.removed&&t.getBody().contains(j.document.activeElement)&&t.selection.getRng().collapsed){var e=nm(t,t.selection.getRng(),!1);t.selection.setRng(e)}},0);t.on("focus",function(){e.throttle()}),t.on("blur",function(){e.cancel()})},ag=Ge.isContentEditableTrue,ug=Ge.isContentEditableFalse,sg=0,cg=2,lg=1,fg=function(m,g){function p(e,t,n,r){for(var o=e;o-t<r&&o<n&&m[o]===g[o-t];)++o;return function(e,t,n){return{start:e,end:t,diag:n}}(e,o,t)}var e=m.length+g.length+2,v=new Array(e),y=new Array(e),c=function(e,t,n,r,o){var i=l(e,t,n,r);if(null===i||i.start===t&&i.diag===t-r||i.end===e&&i.diag===e-n)for(var a=e,u=n;a<t||u<r;)a<t&&u<r&&m[a]===g[u]?(o.push([0,m[a]]),++a,++u):r-n<t-e?(o.push([2,m[a]]),++a):(o.push([1,g[u]]),++u);else{c(e,i.start,n,i.start-i.diag,o);for(var s=i.start;s<i.end;++s)o.push([0,m[s]]);c(i.end,t,i.end-i.diag,r,o)}},l=function(e,t,n,r){var o=t-e,i=r-n;if(0==o||0==i)return null;var a,u,s,c,l,f=o-i,d=i+o,h=(d%2==0?d:1+d)/2;for(v[1+h]=e,y[1+h]=t+1,a=0;a<=h;++a){for(u=-a;u<=a;u+=2){for(s=u+h,u===-a||u!==a&&v[s-1]<v[s+1]?v[s]=v[s+1]:v[s]=v[s-1]+1,l=(c=v[s])-e+n-u;c<t&&l<r&&m[c]===g[l];)v[s]=++c,++l;if(f%2!=0&&f-a<=u&&u<=f+a&&y[s-f]<=v[s])return p(y[s-f],u+e-n,t,r)}for(u=f-a;u<=f+a;u+=2){for(s=u+h-f,u===f-a||u!==f+a&&y[s+1]<=y[s-1]?y[s]=y[s+1]-1:y[s]=y[s-1],l=(c=y[s]-1)-e+n-u;e<=c&&n<=l&&m[c]===g[l];)y[s]=c--,l--;if(f%2==0&&-a<=u&&u<=a&&y[s]<=v[s+f])return p(y[s],u+e-n,t,r)}}},t=[];return c(0,m.length,0,g.length,t),t},dg=function(e){return y(X(P(e.childNodes),im),function(e){return 0<e.length})},hg=function(e,t){var n=X(P(t.childNodes),im);return function(e,t){var n=0;z(e,function(e){e[0]===sg?n++:e[0]===lg?(am(t,e[1],n),n++):e[0]===cg&&function(e,t){if(e.hasChildNodes()&&t<e.childNodes.length){var n=e.childNodes[t];n.parentNode.removeChild(n)}}(t,n)})}(fg(n,e),t),t},mg=Je(k.none()),gg=function(n){var e,t,r;return e=dg(n.getBody()),function(e){return-1!==e.indexOf("</iframe>")}(t=(r=v(e,function(e){var t=af.trimInternal(n.serializer,e);return 0<t.length?[t]:[]})).join(""))?um(r):sm(t)},pg=function(e,t,n){"fragmented"===t.type?hg(t.fragments,e.getBody()):e.setContent(t.content,{format:"raw"}),e.selection.moveToBookmark(n?t.beforeBookmark:t.bookmark)},vg=function(e,t){return!(!e||!t)&&(!!function(e,t){return cm(e)===cm(t)}(e,t)||function(e,t){return lm(e)===lm(t)}(e,t))},yg=function(e){var t=ma(e,"br"),n=y(function(e){for(var t=[],n=e.dom();n;)t.push(yt.fromDom(n)),n=n.lastChild;return t}(e).slice(-1),_n);t.length===n.length&&z(n,_i)},bg=function(e){Ei(e),Di(e,yt.fromHtml('<br data-mce-bogus="1">'))},Cg=function(n){Be(n).each(function(t){ke(t).each(function(e){Vn(n)&&_n(t)&&Vn(e)&&_i(t)})})},wg=jc.isEq,xg=function(e,t,n,r,o){var i,a,u,s,c=e.formatter.get(n),l=e.dom;if(c&&t)for(a=0;a<c.length;a++)if(i=c[a],vm(e.dom,t,i)&&ym(l,t,i,"attributes",o,r)&&ym(l,t,i,"styles",o,r)){if(s=i.classes)for(u=0;u<s.length;u++)if(!e.dom.hasClass(t,s[u]))return;return i}},zg={matchNode:xg,matchName:vm,match:function(e,t,n,r){var o;return r?pm(e,r,t,n):(r=e.selection.getNode(),!!pm(e,r,t,n)||!((o=e.selection.getStart())===r||!pm(e,o,t,n)))},matchAll:function(r,o,i){var e,a=[],u={};return e=r.selection.getStart(),r.dom.getParent(e,function(e){var t,n;for(t=0;t<o.length;t++)n=o[t],!u[n]&&xg(r,e,n,i)&&(u[n]=!0,a.push(n))},r.dom.getRoot()),a},canApply:function(e,t){var n,r,o,i,a,u=e.formatter.get(t),s=e.dom;if(u)for(n=e.selection.getStart(),r=jc.getParents(s,n),i=u.length-1;0<=i;i--){if(!(a=u[i].selector)||u[i].defaultBlock)return!0;for(o=r.length-1;0<=o;o--)if(s.is(r[o],a))return!0}return!1},matchesUnInheritedFormatSelector:gm},Eg=Ge.hasAttribute("data-mce-bookmark"),Ng=Ge.hasAttribute("data-mce-bogus"),Sg=Ge.hasAttributeValue("data-mce-bogus","all"),kg=function(e){return function(e){var t,n=0;if(Em(e,e))return!1;if(!(t=e.firstChild))return!0;var r=new yi(t,e);do{if(Sg(t))t=r.next(!0);else if(Ng(t))t=r.next();else if(Ge.isBr(t))n++,t=r.next();else{if(Em(e,t))return!1;t=r.next()}}while(t);return n<=1}(e.dom())},Tg=function(t,n,e,r){void 0===r&&(r=!0);var o=Mm(n,t.getBody(),e.dom()),i=ya(e,d(Dm,t),function(t){return function(e){return e.dom()===t}}(t.getBody())),a=Bm(e,o,function(e,t){return kt(e.schema.getTextInlineElements(),ie(t))}(t,e));t.dom.isEmpty(t.getBody())?(t.setContent(""),t.selection.setCursorLocation()):i.bind(_m).fold(function(){r&&Rm(t,n,a)},function(e){r&&Rm(t,n,k.some(e))})},Ag=cu,Mg="_mce_caret",Rg={},Dg=kn.filter,_g=kn.each;Wm=function(e){var t,n,r=e.selection.getRng();t=Ge.matchNodeNames(["pre"]),r.collapsed||(n=e.selection.getSelectedBlocks(),_g(Dg(Dg(n,t),function(e){return t(e.previousSibling)&&-1!==kn.indexOf(n,e.previousSibling)}),function(e){!function(e,t){vi(t).remove(),vi(e).append("<br><br>").append(t.childNodes)}(e.previousSibling,e)}))},Rg[$m="pre"]||(Rg[$m]=[]),Rg[$m].push(Wm);function Bg(o){this.compare=function(e,t){if(e.nodeName!==t.nodeName)return!1;function n(n){var r={};return Gg(o.getAttribs(n),function(e){var t=e.nodeName.toLowerCase();0!==t.indexOf("_")&&"style"!==t&&0!==t.indexOf("data-")&&(r[t]=o.getAttrib(n,t))}),r}function r(e,t){var n,r;for(r in e)if(e.hasOwnProperty(r)){if(void 0===(n=t[r]))return!1;if(e[r]!==n)return!1;delete t[r]}for(r in t)if(t.hasOwnProperty(r))return!1;return!0}return!!r(n(e),n(t))&&(!!r(o.parseStyle(o.getAttrib(e,"style")),o.parseStyle(o.getAttrib(t,"style")))&&(!Fc(e)&&!Fc(t)))}}function Og(e,t,n){return e.isChildOf(t,n)&&t!==n&&!e.isBlock(n)}function Hg(e,t,n){var r,o,i;return r=t[n?"startContainer":"endContainer"],o=t[n?"startOffset":"endOffset"],Ge.isElement(r)&&(i=r.childNodes.length-1,!n&&o&&o--,r=r.childNodes[i<o?i:o]),Ge.isText(r)&&n&&o>=r.nodeValue.length&&(r=new yi(r,e.getBody()).next()||r),Ge.isText(r)&&!n&&0===o&&(r=new yi(r,e.getBody()).prev()||r),r}function Pg(e,t,n,r){var o=e.create(n,r);return t.parentNode.insertBefore(o,t),o.appendChild(t),o}function Lg(e,t,n,r,o){var i=yt.fromDom(t),a=yt.fromDom(e.create(r,o)),u=n?Me(i):Ae(i);return zi(a,u),n?(Ci(i,a),xi(a,i)):(wi(i,a),Di(a,i)),a.dom()}function Vg(e,t,n,r){return!(t=jc.getNonWhiteSpaceSibling(t,n,r))||"BR"===t.nodeName||e.isBlock(t)}function Ig(e,r,o,i,a){var t,n,u,s=e.dom;if(!function(e,t,n){return!!Zg(t,n.inline)||(!!Zg(t,n.block)||(n.selector?Ge.isElement(t)&&e.is(t,n.selector):void 0))}(s,i,r)&&!function(e,t){return t.links&&"A"===e.tagName}(i,r))return!1;if("all"!==r.remove)for(Qg(r.styles,function(e,t){e=jc.normalizeStyleValue(s,jc.replaceVars(e,o),t),"number"==typeof t&&(t=e,a=0),!r.remove_similar&&a&&!Zg(jc.getStyle(s,a,t),e)||s.setStyle(i,t,""),u=1}),u&&""===s.getAttrib(i,"style")&&(i.removeAttribute("style"),i.removeAttribute("data-mce-style")),Qg(r.attributes,function(e,t){var n;if(e=jc.replaceVars(e,o),"number"==typeof t&&(t=e,a=0),r.remove_similar||!a||Zg(s.getAttrib(a,t),e)){if("class"===t&&(e=s.getAttrib(i,t))&&(n="",Qg(e.split(/\s+/),function(e){/mce\-\w+/.test(e)&&(n+=(n?" ":"")+e)}),n))return void s.setAttrib(i,t,n);"class"===t&&i.removeAttribute("className"),Jg.test(t)&&i.removeAttribute("data-mce-"+t),i.removeAttribute(t)}}),Qg(r.classes,function(e){e=jc.replaceVars(e,o),a&&!s.hasClass(a,e)||s.removeClass(i,e)}),n=s.getAttribs(i),t=0;t<n.length;t++){var c=n[t].nodeName;if(0!==c.indexOf("_")&&0!==c.indexOf("data-"))return!1}return"none"!==r.remove?(function(t,e,n){var r,o=e.parentNode,i=t.dom,a=mf(t);n.block&&(a?o===i.getRoot()&&(n.list_block&&Zg(e,n.list_block)||Qg(Mn.grep(e.childNodes),function(e){jc.isValid(t,a,e.nodeName.toLowerCase())?r?r.appendChild(e):(r=Pg(i,e,a),i.setAttribs(r,t.settings.forced_root_block_attrs)):r=0})):i.isBlock(e)&&!i.isBlock(o)&&(Vg(i,e,!1)||Vg(i,e.firstChild,!0,1)||e.insertBefore(i.create("br"),e.firstChild),Vg(i,e,!0)||Vg(i,e.lastChild,!1,1)||e.appendChild(i.create("br")))),n.selector&&n.inline&&!Zg(n.inline,e)||i.remove(e,1)}(e,i,r),!0):void 0}function Fg(e){return e&&1===e.nodeType&&!Fc(e)&&!rs(e)&&!Ge.isBogus(e)}function Ug(e,t){var n;for(n=e;n;n=n[t]){if(3===n.nodeType&&0!==n.nodeValue.length)return e;if(1===n.nodeType&&!Fc(n))return n}return e}function jg(e,t,n){var r,o,i=new Bg(e);if(t&&n&&(t=Ug(t,"previousSibling"),n=Ug(n,"nextSibling"),i.compare(t,n))){for(r=t.nextSibling;r&&r!==n;)r=(o=r).nextSibling,t.appendChild(o);return e.remove(n),Mn.each(Mn.grep(n.childNodes),function(e){t.appendChild(e)}),t}return n}function qg(n,e){return d(function(e,t){return!(!t||!jc.getStyle(n,t,e))},e)}function $g(r,e,t){return d(function(e,t,n){r.setStyle(n,e,t),""===n.getAttribute("style")&&n.removeAttribute("style"),op(r,n)},e,t)}function Wg(e,t){var n;1===t.nodeType&&t.parentNode&&1===t.parentNode.nodeType&&(n=jc.getTextDecoration(e,t.parentNode),e.getStyle(t,"color")&&n?e.setStyle(t,"text-decoration",n):e.getStyle(t,"text-decoration")===n&&e.setStyle(t,"text-decoration",null))}function Kg(t){var n=Ds.fromRangeStart(t),r=Ds.fromRangeEnd(t),o=t.commonAncestorContainer;return Pc.fromPosition(!1,o,r).map(function(e){return!Cs(n,r,o)&&Cs(n,e,o)?function(e,t,n,r){var o=j.document.createRange();return o.setStart(e,t),o.setEnd(n,r),o}(n.container(),n.offset(),e.container(),e.offset()):t}).getOr(t)}function Xg(e,t,n,r,o){return null===t.get()&&function(t,n){var r=Je({});t.set({}),n.on("NodeChange",function(e){gp(n,e.element,r,t.get())})}(t,e),function(e,t,n,r){var o=e.get();z(t.split(","),function(e){o[e]||(o[e]={similar:r,callbacks:[]}),o[e].callbacks.push(n)}),e.set(o)}(t,n,r,o),{unbind:function(){return function(e,t,n){var r=e.get();z(t.split(","),function(e){r[e].callbacks=y(r[e].callbacks,function(e){return e!==n}),0===r[e].callbacks.length&&delete r[e]}),e.set(r)}(t,n,r)}}}var Yg=function(e,t){_g(Rg[e],function(e){e(t)})},Gg=Mn.each,Jg=/^(src|href|style)$/,Qg=Mn.each,Zg=jc.isEq,ep=Ig,tp=function(a,n,u,e,r){function i(e){var t=function(n,e,r,o,i){var a;return Qg(jc.getParents(n.dom,e.parentNode).reverse(),function(e){var t;a||"_start"===e.id||"_end"===e.id||(t=zg.matchNode(n,e,r,o,i))&&!1!==t.split&&(a=e)}),a}(a,e,n,u,r);return function(e,t,n,r,o,i,a,u){var s,c,l,f,d,h,m=e.dom;if(n){for(h=n.parentNode,s=r.parentNode;s&&s!==h;s=s.parentNode){for(c=m.clone(s,!1),d=0;d<t.length;d++)if(Ig(e,t[d],u,c,c)){c=0;break}c&&(l&&c.appendChild(l),f=f||c,l=c)}!i||a.mixed&&m.isBlock(n)||(r=m.split(n,r)),l&&(o.parentNode.insertBefore(l,o),f.appendChild(o))}return r}(a,l,t,e,e,!0,f,u)}function s(e){var t=h.get(e?"_start":"_end"),n=t[e?"firstChild":"lastChild"];return function(e){return Fc(e)&&Ge.isElement(e)&&("_start"===e.id||"_end"===e.id)}(n)&&(n=n[e?"firstChild":"lastChild"]),Ge.isText(n)&&0===n.data.length&&(n=e?t.previousSibling||t.nextSibling:t.nextSibling||t.previousSibling),h.remove(t,!0),n}function t(e){var t,n,r=e.commonAncestorContainer;if(e=Xc(a,e,l,!0),f.split){if(e=Cm(e),(t=Hg(a,e,!0))!==(n=Hg(a,e))){if(/^(TR|TH|TD)$/.test(t.nodeName)&&t.firstChild&&(t="TR"===t.nodeName?t.firstChild.firstChild||t:t.firstChild||t),r&&/^T(HEAD|BODY|FOOT|R)$/.test(r.nodeName)&&function(e){return/^(TH|TD)$/.test(e.nodeName)}(n)&&n.firstChild&&(n=n.firstChild||n),Og(h,t,n)){var o=k.from(t.firstChild).getOr(t);return i(Lg(h,o,!0,"span",{id:"_start","data-mce-type":"bookmark"})),void s(!0)}if(Og(h,n,t)){o=k.from(n.lastChild).getOr(n);return i(Lg(h,o,!1,"span",{id:"_end","data-mce-type":"bookmark"})),void s(!1)}t=Pg(h,t,"span",{id:"_start","data-mce-type":"bookmark"}),n=Pg(h,n,"span",{id:"_end","data-mce-type":"bookmark"}),i(t),i(n),t=s(!0),n=s()}else t=n=i(t);e.startContainer=t.parentNode?t.parentNode:t,e.startOffset=h.nodeIndex(t),e.endContainer=n.parentNode?n.parentNode:n,e.endOffset=h.nodeIndex(n)+1}Gc(h,e,function(e){Qg(e,function(e){g(e),Ge.isElement(e)&&"underline"===a.dom.getStyle(e,"text-decoration")&&e.parentNode&&"underline"===jc.getTextDecoration(h,e.parentNode)&&Ig(a,{deep:!1,exact:!0,inline:"span",styles:{textDecoration:"underline"}},null,e)})})}var o,c,l=a.formatter.get(n),f=l[0],d=!0,h=a.dom,m=a.selection,g=function(e){var t,n,r,o,i;if(Ge.isElement(e)&&h.getContentEditable(e)&&(o=d,d="true"===h.getContentEditable(e),i=!0),t=Mn.grep(e.childNodes),d&&!i)for(n=0,r=l.length;n<r&&!Ig(a,l[n],u,e,e);n++);if(f.deep&&t.length){for(n=0,r=t.length;n<r;n++)g(t[n]);i&&(d=o)}};if(e)e.nodeType?((c=h.createRng()).setStartBefore(e),c.setEndAfter(e),t(c)):t(e);else if("false"!==h.getContentEditable(m.getNode()))m.isCollapsed()&&f.inline&&!h.select("td[data-mce-selected],th[data-mce-selected]").length?function(e,t,n,r){var o,i,a,u,s,c,l,f=e.dom,d=e.selection,h=[],m=d.getRng();for(o=m.startContainer,i=m.startOffset,3===(s=o).nodeType&&(i!==o.nodeValue.length&&(u=!0),s=s.parentNode);s;){if(zg.matchNode(e,s,t,n,r)){c=s;break}s.nextSibling&&(u=!0),h.push(s),s=s.parentNode}if(c)if(u){a=d.getBookmark(),m.collapse(!0);var g=Xc(e,m,e.formatter.get(t),!0);g=Cm(g),e.formatter.remove(t,n,g),d.moveToBookmark(a)}else{l=os(e.getBody(),c);var p=Pm(!1).dom(),v=Um(h,p);Im(e,p,l||c),Lm(e,l,!1),d.setCursorLocation(v,1),f.isEmpty(c)&&f.remove(c)}}(a,n,u,r):(o=Vs.getPersistentBookmark(a.selection,!0),t(m.getRng()),m.moveToBookmark(o),f.inline&&zg.match(a,n,u,m.getStart())&&jc.moveStart(h,m,m.getRng()),a.nodeChanged());else{e=m.getNode();for(var p=0,v=l.length;p<v&&(!l[p].ceFalseOverride||!Ig(a,l[p],u,e,e));p++);}},np=Mn.each,rp=function(e,t,n){np(e.childNodes,function(e){Fg(e)&&(t(e)&&n(e),e.hasChildNodes()&&rp(e,t,n))})},op=function(e,t){"SPAN"===t.nodeName&&0===e.getAttribs(t).length&&e.remove(t,!0)},ip=function(n,e,r,o){np(e,function(t){np(n.dom.select(t.inline,o),function(e){Fg(e)&&ep(n,t,r,e,t.exact?e:null)}),function(r,e,t){if(e.clear_child_styles){var n=e.links?"*:not(a)":"*";np(r.select(n,t),function(n){Fg(n)&&np(e.styles,function(e,t){r.setStyle(n,t,"")})})}}(n.dom,t,o)})},ap=function(e,t,n,r){(t.styles.color||t.styles.textDecoration)&&(Mn.walk(r,d(Wg,e),"childNodes"),Wg(e,r))},up=function(e,t,n,r){t.styles&&t.styles.backgroundColor&&rp(r,qg(e,"fontSize"),$g(e,"backgroundColor",jc.replaceVars(t.styles.backgroundColor,n)))},sp=function(e,t,n,r){"sub"!==t.inline&&"sup"!==t.inline||(rp(r,qg(e,"fontSize"),$g(e,"fontSize","")),e.remove(e.select("sup"===t.inline?"sub":"sup",r),!0))},cp=function(e,t,n,r){r&&!1!==t.merge_siblings&&(r=jg(e,jc.getNonWhiteSpaceSibling(r),r),r=jg(e,r,jc.getNonWhiteSpaceSibling(r,!0)))},lp=function(t,n,r,o,i){zg.matchNode(t,i.parentNode,r,o)&&ep(t,n,o,i)||n.merge_with_parents&&t.dom.getParent(i.parentNode,function(e){if(zg.matchNode(t,e,r,o))return ep(t,n,o,i),!0})},fp=function(e){return e.collapsed?e:Kg(e)},dp=Mn.each,hp=function(m,g,p,r){function v(n,e){if(e=e||C,n){if(e.onformat&&e.onformat(n,e,p,r),dp(e.styles,function(e,t){i.setStyle(n,t,jc.replaceVars(e,p))}),e.styles){var t=i.getAttrib(n,"style");t&&n.setAttribute("data-mce-style",t)}dp(e.attributes,function(e,t){i.setAttrib(n,t,jc.replaceVars(e,p))}),dp(e.classes,function(e){e=jc.replaceVars(e,p),i.hasClass(n,e)||i.addClass(n,e)})}}function y(e,t){var n=!1;return!!C.selector&&(dp(e,function(e){if(!("collapsed"in e&&e.collapsed!==o))return i.is(t,e.selector)&&!rs(t)?(v(t,e),!(n=!0)):void 0}),n)}function e(s,e,t,c){var l,f,d=[],h=!0;l=C.inline||C.block,f=s.create(l),v(f),Gc(s,e,function(e){var a,u=function(e){var t,n,r,o;if(o=h,t=e.nodeName.toLowerCase(),n=e.parentNode.nodeName.toLowerCase(),1===e.nodeType&&s.getContentEditable(e)&&(o=h,h="true"===s.getContentEditable(e),r=!0),jc.isEq(t,"br"))return a=0,void(C.block&&s.remove(e));if(C.wrapper&&zg.matchNode(m,e,g,p))a=0;else{if(h&&!r&&C.block&&!C.wrapper&&jc.isTextBlock(m,t)&&jc.isValid(m,n,l))return e=s.rename(e,l),v(e),d.push(e),void(a=0);if(C.selector){var i=y(b,e);if(!C.inline||i)return void(a=0)}!h||r||!jc.isValid(m,l,t)||!jc.isValid(m,n,l)||!c&&3===e.nodeType&&1===e.nodeValue.length&&65279===e.nodeValue.charCodeAt(0)||rs(e)||C.inline&&s.isBlock(e)?(a=0,dp(Mn.grep(e.childNodes),u),r&&(h=o),a=0):(a||(a=s.clone(f,!1),e.parentNode.insertBefore(a,e),d.push(a)),a.appendChild(e))}};dp(e,u)}),!0===C.links&&dp(d,function(e){var t=function(e){"A"===e.nodeName&&v(e,C),dp(Mn.grep(e.childNodes),t)};t(e)}),dp(d,function(e){function t(e){var t=!1;return dp(e.childNodes,function(e){if(function(e){return e&&1===e.nodeType&&!Fc(e)&&!rs(e)&&!Ge.isBogus(e)}(e))return t=e,!1}),t}var n,r,o,i,a;(r=0,dp(e.childNodes,function(e){jc.isWhiteSpaceNode(e)||Fc(e)||r++}),n=r,!(1<d.length)&&s.isBlock(e)||0!==n)?(C.inline||C.wrapper)&&(C.exact||1!==n||((i=t(o=e))&&!Fc(i)&&zg.matchName(s,i,C)&&(a=s.clone(i,!1),v(a),s.replace(a,o,!0),s.remove(i,1)),e=a||o),ip(m,b,p,e),lp(m,C,g,p,e),up(s,C,p,e),sp(s,C,p,e),cp(s,C,p,e)):s.remove(e,1)})}var t,n,b=m.formatter.get(g),C=b[0],o=!r&&m.selection.isCollapsed(),i=m.dom,a=m.selection;if("false"!==i.getContentEditable(a.getNode())){if(C){if(r)r.nodeType?y(b,r)||((n=i.createRng()).setStartBefore(r),n.setEndAfter(r),e(i,Xc(m,n,b),0,!0)):e(i,r,0,!0);else if(o&&C.inline&&!i.select("td[data-mce-selected],th[data-mce-selected]").length)!function(e,t,n){var r,o,i,a,u,s,c=e.selection;a=(r=c.getRng()).startOffset,s=r.startContainer.nodeValue,(o=os(e.getBody(),c.getStart()))&&(i=Hm(o));var l=/[^\s\u00a0\u00ad\u200b\ufeff]/;s&&0<a&&a<s.length&&l.test(s.charAt(a))&&l.test(s.charAt(a-1))?(u=c.getBookmark(),r.collapse(!0),r=Xc(e,r,e.formatter.get(t)),r=Cm(r),e.formatter.apply(t,n,r),c.moveToBookmark(u)):(o&&i.nodeValue===Ag||(i=(o=function(e,t){return e.importNode(t,!0)}(e.getDoc(),Pm(!0).dom())).firstChild,r.insertNode(o),a=1),e.formatter.apply(t,n,o),c.setCursorLocation(i,a))}(m,g,p);else{var u=m.selection.getNode();m.settings.forced_root_block||!b[0].defaultBlock||i.getParent(u,i.isBlock)||hp(m,b[0].defaultBlock),m.selection.setRng(fp(m.selection.getRng())),t=Vs.getPersistentBookmark(m.selection,!0),e(i,Xc(m,a.getRng(),b)),C.styles&&ap(i,C,p,u),a.moveToBookmark(t),jc.moveStart(i,a,a.getRng()),m.nodeChanged()}Yg(g,m)}}else{r=a.getNode();for(var s=0,c=b.length;s<c;s++)if(b[s].ceFalseOverride&&i.is(r,b[s].selector))return void v(r,b[s])}},mp={applyFormat:hp},gp=function(r,e,t,n){var o=Et(t.get()),i={},a={},u=y(jc.getParents(r.dom,e),function(e){return 1===e.nodeType&&!e.getAttribute("data-mce-bogus")});ue(n,function(e,n){Mn.each(u,function(t){return r.formatter.matchNode(t,n,{},e.similar)?(-1===o.indexOf(n)&&(z(e.callbacks,function(e){e(!0,{node:t,format:n,parents:u})}),i[n]=e.callbacks),a[n]=e.callbacks,!1):!zg.matchesUnInheritedFormatSelector(r,t,n)&&void 0})});var s=pp(t.get(),a,e,u);t.set(G(G({},i),s))},pp=function(e,n,r,o){return ce(e,function(e,t){return!!kt(n,t)||(z(e,function(e){e(!1,{node:r,format:t,parents:o})}),!1)}).t},vp=function(r){var t={valigntop:[{selector:"td,th",styles:{verticalAlign:"top"}}],valignmiddle:[{selector:"td,th",styles:{verticalAlign:"middle"}}],valignbottom:[{selector:"td,th",styles:{verticalAlign:"bottom"}}],alignleft:[{selector:"figure.image",collapsed:!1,classes:"align-left",ceFalseOverride:!0,preview:"font-family font-size"},{selector:"figure,p,h1,h2,h3,h4,h5,h6,td,th,tr,div,ul,ol,li",styles:{textAlign:"left"},inherit:!1,preview:!1,defaultBlock:"div"},{selector:"img,table",collapsed:!1,styles:{"float":"left"},preview:"font-family font-size"}],aligncenter:[{selector:"figure,p,h1,h2,h3,h4,h5,h6,td,th,tr,div,ul,ol,li",styles:{textAlign:"center"},inherit:!1,preview:"font-family font-size",defaultBlock:"div"},{selector:"figure.image",collapsed:!1,classes:"align-center",ceFalseOverride:!0,preview:"font-family font-size"},{selector:"img",collapsed:!1,styles:{display:"block",marginLeft:"auto",marginRight:"auto"},preview:!1},{selector:"table",collapsed:!1,styles:{marginLeft:"auto",marginRight:"auto"},preview:"font-family font-size"}],alignright:[{selector:"figure.image",collapsed:!1,classes:"align-right",ceFalseOverride:!0,preview:"font-family font-size"},{selector:"figure,p,h1,h2,h3,h4,h5,h6,td,th,tr,div,ul,ol,li",styles:{textAlign:"right"},inherit:!1,preview:"font-family font-size",defaultBlock:"div"},{selector:"img,table",collapsed:!1,styles:{"float":"right"},preview:"font-family font-size"}],alignjustify:[{selector:"figure,p,h1,h2,h3,h4,h5,h6,td,th,tr,div,ul,ol,li",styles:{textAlign:"justify"},inherit:!1,defaultBlock:"div",preview:"font-family font-size"}],bold:[{inline:"strong",remove:"all"},{inline:"span",styles:{fontWeight:"bold"}},{inline:"b",remove:"all"}],italic:[{inline:"em",remove:"all"},{inline:"span",styles:{fontStyle:"italic"}},{inline:"i",remove:"all"}],underline:[{inline:"span",styles:{textDecoration:"underline"},exact:!0},{inline:"u",remove:"all"}],strikethrough:[{inline:"span",styles:{textDecoration:"line-through"},exact:!0},{inline:"strike",remove:"all"}],forecolor:{inline:"span",styles:{color:"%value"},links:!0,remove_similar:!0,clear_child_styles:!0},hilitecolor:{inline:"span",styles:{backgroundColor:"%value"},links:!0,remove_similar:!0,clear_child_styles:!0},fontname:{inline:"span",toggle:!1,styles:{fontFamily:"%value"},clear_child_styles:!0},fontsize:{inline:"span",toggle:!1,styles:{fontSize:"%value"},clear_child_styles:!0},fontsize_class:{inline:"span",attributes:{"class":"%value"}},blockquote:{block:"blockquote",wrapper:!0,remove:"all"},subscript:{inline:"sub"},superscript:{inline:"sup"},code:{inline:"code"},link:{inline:"a",selector:"a",remove:"all",split:!0,deep:!0,onmatch:function(){return!0},onformat:function(n,e,t){Mn.each(t,function(e,t){r.setAttrib(n,t,e)})}},removeformat:[{selector:"b,strong,em,i,font,u,strike,sub,sup,dfn,code,samp,kbd,var,cite,mark,q,del,ins",remove:"all",split:!0,expand:!1,block_expand:!0,deep:!0},{selector:"span",attributes:["style","class"],remove:"empty",split:!0,expand:!1,deep:!0},{selector:"*",attributes:["style","class"],split:!1,expand:!1,deep:!0}]};return Mn.each("p h1 h2 h3 h4 h5 h6 div address pre div dt dd samp".split(/\s/),function(e){t[e]={block:e,remove:"all"}}),t};function yp(e,t){function s(e){var t;return r="string"==typeof e?{name:e,classes:[],attrs:{}}:e,function(e,t){t.classes.length&&Rp.addClass(e,t.classes.join(" ")),Rp.setAttribs(e,t.attrs)}(t=Rp.create(r.name),r),t}var n,r,o,c=t&&t.schema||pr({}),l=function(n,e,t){var r,o,i,a=0<e.length&&e[0],u=a&&a.name;if(i=function(e,t){var n="string"!=typeof e?e.nodeName.toLowerCase():e,r=c.getElementRule(n),o=r&&r.parentsRequired;return!(!o||!o.length)&&(t&&-1!==Mn.inArray(o,t)?t:o[0])}(n,u))u===i?(o=e[0],e=e.slice(1)):o=i;else if(a)o=e[0],e=e.slice(1);else if(!t)return n;return o&&(r=s(o)).appendChild(n),t&&(r||(r=Rp.create("div")).appendChild(n),Mn.each(t,function(e){var t=s(e);r.insertBefore(t,n)})),l(r,e,o&&o.siblings)};return e&&e.length?(r=e[0],n=s(r),(o=Rp.create("div")).appendChild(l(n,e.slice(1),r.siblings)),o):""}function bp(e){var t,a={classes:[],attrs:{}};return"*"!==(e=a.selector=Mn.trim(e))&&(t=e.replace(/(?:([#\.]|::?)([\w\-]+)|(\[)([^\]]+)\]?)/g,function(e,t,n,r,o){switch(t){case"#":a.attrs.id=n;break;case".":a.classes.push(n);break;case":":-1!==Mn.inArray("checked disabled enabled read-only required".split(" "),n)&&(a.attrs[n]=n)}if("["===r){var i=o.match(/([\w\-]+)(?:\=\"([^\"]+))?/);i&&(a.attrs[i[1]]=i[2])}return""})),a.name=t||"div",a}function Cp(e){var t=function o(e){var n={},r=function(e,t){e&&("string"!=typeof e?Mn.each(e,function(e,t){r(t,e)}):(A(t)||(t=[t]),Mn.each(t,function(e){"undefined"==typeof e.deep&&(e.deep=!e.selector),"undefined"==typeof e.split&&(e.split=!e.selector||e.inline),"undefined"==typeof e.remove&&e.selector&&!e.inline&&(e.remove="none"),e.selector&&e.inline&&(e.mixed=!0,e.block_expand=!0),"string"==typeof e.classes&&(e.classes=e.classes.split(/\s+/))}),n[e]=t))};return r(vp(e.dom)),r(e.settings.formats),{get:function(e){return e?n[e]:n},has:function(e){return kt(n,e)},register:r,unregister:function(e){return e&&n[e]&&delete n[e],n}}}(e),n=Je(null);return Op(e),jm(e),{get:t.get,has:t.has,register:t.register,unregister:t.unregister,apply:d(mp.applyFormat,e),remove:d(tp,e),toggle:d(Bp,e,t),match:d(zg.match,e),matchAll:d(zg.matchAll,e),matchNode:d(zg.matchNode,e),canApply:d(zg.canApply,e),formatChanged:d(Xg,e,n),getCssText:d(_p,e)}}function wp(e,i,a){e.addNodeFilter("font",function(e){z(e,function(e){var t=i.parse(e.attr("style")),n=e.attr("color"),r=e.attr("face"),o=e.attr("size");n&&(t.color=n),r&&(t["font-family"]=r),o&&(t["font-size"]=a[parseInt(e.attr("size"),10)-1]),e.name="span",e.attr("style",i.serialize(t)),function(t,e){z(e,function(e){t.attr(e,null)})}(e,["color","face","size"])})})}function xp(e,t){var n=xr();t.convert_fonts_to_spans&&wp(e,n,Mn.explode(t.font_size_legacy_values)),function(e,n){e.addNodeFilter("strike",function(e){z(e,function(e){var t=n.parse(e.attr("style"));t["text-decoration"]="line-through",e.name="span",e.attr("style",n.serialize(t))})})}(e,n)}function zp(e,t,n,r){(e.padd_empty_with_br||t.insert)&&n[r.name]?r.empty().append(new ul("br",1)).shortEnded=!0:r.empty().append(new ul("#text",3)).value="\xa0"}function Ep(t,e,n,r){return r.isEmpty(e,n,function(e){return function(e,t){var n=e.getElementRule(t.name);return n&&n.paddEmpty}(t,e)})}function Np(T,A){void 0===A&&(A=pr());var M={},R=[],D={},_={};(T=T||{}).validate=!("validate"in T)||T.validate,T.root_name=T.root_name||"body";var B=function(e){var t,n,r;(n=e.name)in M&&((r=D[n])?r.push(e):D[n]=[e]),t=R.length;for(;t--;)(n=R[t].name)in e.attributes.map&&((r=_[n])?r.push(e):_[n]=[e]);return e},e={schema:A,addAttributeFilter:function(e,n){Up(jp(e),function(e){var t;for(t=0;t<R.length;t++)if(R[t].name===e)return void R[t].callbacks.push(n);R.push({name:e,callbacks:[n]})})},getAttributeFilters:function(){return[].concat(R)},addNodeFilter:function(e,n){Up(jp(e),function(e){var t=M[e];t||(M[e]=t=[]),t.push(n)})},getNodeFilters:function(){var e=[];for(var t in M)M.hasOwnProperty(t)&&e.push({name:t,callbacks:M[t]});return e},filterNode:B,parse:function(e,a){var t,n,r,o,i,u,s,c,l,f,d,h=[];a=a||{},D={},_={},l=qp(Fp("script,style,head,html,body,title,meta,param"),A.getBlockElements());var m,g=A.getNonEmptyElements(),p=A.children,v=T.validate,y="forced_root_block"in a?a.forced_root_block:T.forced_root_block,b=!1===(m=y)?"":!0===m?"p":m,C=A.getWhiteSpaceElements(),w=/^[ \t\r\n]+/,x=/[ \t\r\n]+$/,z=/[ \t\r\n]+/g,E=/^[ \t\r\n]+$/;f=C.hasOwnProperty(a.context)||C.hasOwnProperty(T.root_name);function N(e){var t,n,r,o,i=A.getBlockElements();for(t=e.prev;t&&3===t.type;){if(0<(r=t.value.replace(x,"")).length)return void(t.value=r);if(n=t.next){if(3===n.type&&n.value.length){t=t.prev;continue}if(!i[n.name]&&"script"!==n.name&&"style"!==n.name){t=t.prev;continue}}o=t.prev,t.remove(),t=o}}var S=function(e,t){var n,r=new ul(e,t);return e in M&&((n=D[e])?n.push(r):D[e]=[r]),r};t=of({validate:v,allow_script_urls:T.allow_script_urls,allow_conditional_comments:T.allow_conditional_comments,self_closing_elements:function(e){var t,n={};for(t in e)"li"!==t&&"p"!==t&&(n[t]=e[t]);return n}(A.getSelfClosingElements()),cdata:function(e){d.append(S("#cdata",4)).value=e},text:function(e,t){var n;f||(e=e.replace(z," "),function(e,t){return e&&(t[e.name]||"br"===e.name)}(d.lastChild,l)&&(e=e.replace(w,""))),0!==e.length&&((n=S("#text",3)).raw=!!t,d.append(n).value=e)},comment:function(e){d.append(S("#comment",8)).value=e},pi:function(e,t){d.append(S(e,7)).value=t,N(d)},doctype:function(e){d.append(S("#doctype",10)).value=e,N(d)},start:function(e,t,n){var r,o,i,a,u;if(i=v?A.getElementRule(e):{}){for((r=S(i.outputName||e,1)).attributes=t,r.shortEnded=n,d.append(r),(u=p[d.name])&&p[r.name]&&!u[r.name]&&h.push(r),o=R.length;o--;)(a=R[o].name)in t.map&&((s=_[a])?s.push(r):_[a]=[r]);l[e]&&N(r),n||(d=r),!f&&C[e]&&(f=!0)}},end:function(e){var t,n,r,o,i;if(n=v?A.getElementRule(e):{}){if(l[e]&&!f){if((t=d.firstChild)&&3===t.type)if(0<(r=t.value.replace(w,"")).length)t.value=r,t=t.next;else for(o=t.next,t.remove(),t=o;t&&3===t.type;)r=t.value,o=t.next,0!==r.length&&!E.test(r)||(t.remove(),t=o),t=o;if((t=d.lastChild)&&3===t.type)if(0<(r=t.value.replace(x,"")).length)t.value=r,t=t.prev;else for(o=t.prev,t.remove(),t=o;t&&3===t.type;)r=t.value,o=t.prev,0!==r.length&&!E.test(r)||(t.remove(),t=o),t=o}if(f&&C[e]&&(f=!1),n.removeEmpty&&Ep(A,g,C,d)&&!d.attr("name")&&!d.attr("id"))return i=d.parent,l[d.name]?d.empty().remove():d.unwrap(),void(d=i);n.paddEmpty&&(function(e){return Ip(e,"#text")&&"\xa0"===e.firstChild.value}(d)||Ep(A,g,C,d))&&zp(T,a,l,d),d=d.parent}}},A);var k=d=new ul(a.context||T.root_name,11);if(t.parse(e),v&&h.length&&(a.context?a.invalid=!0:function(e){var t,n,r,o,i,a,u,s,c,l,f,d,h,m,g,p;for(d=Fp("tr,td,th,tbody,thead,tfoot,table"),l=A.getNonEmptyElements(),f=A.getWhiteSpaceElements(),h=A.getTextBlockElements(),m=A.getSpecialElements(),t=0;t<e.length;t++)if((n=e[t]).parent&&!n.fixed)if(h[n.name]&&"li"===n.parent.name){for(g=n.next;g&&h[g.name];)g.name="li",g.fixed=!0,n.parent.insert(g,n.parent),g=g.next;n.unwrap(n)}else{for(o=[n],r=n.parent;r&&!A.isValidChild(r.name,n.name)&&!d[r.name];r=r.parent)o.push(r);if(r&&1<o.length){for(o.reverse(),i=a=B(o[0].clone()),c=0;c<o.length-1;c++){for(A.isValidChild(a.name,o[c].name)?(u=B(o[c].clone()),a.append(u)):u=a,s=o[c].firstChild;s&&s!==o[c+1];)p=s.next,u.append(s),s=p;a=u}Ep(A,l,f,i)?r.insert(n,o[0],!0):(r.insert(i,o[0],!0),r.insert(n,i)),r=o[0],(Ep(A,l,f,r)||Ip(r,"br"))&&r.empty().remove()}else if(n.parent){if("li"===n.name){if((g=n.prev)&&("ul"===g.name||"ul"===g.name)){g.append(n);continue}if((g=n.next)&&("ul"===g.name||"ul"===g.name)){g.insert(n,g.firstChild,!0);continue}n.wrap(B(new ul("ul",1)));continue}A.isValidChild(n.parent.name,"div")&&A.isValidChild("div",n.name)?n.wrap(B(new ul("div",1))):m[n.name]?n.empty().remove():n.unwrap()}}}(h)),b&&("body"===k.name||a.isRootContent)&&function(){function e(e){e&&((r=e.firstChild)&&3===r.type&&(r.value=r.value.replace(w,"")),(r=e.lastChild)&&3===r.type&&(r.value=r.value.replace(x,"")))}var t,n,r=k.firstChild;if(A.isValidChild(k.name,b.toLowerCase())){for(;r;)t=r.next,3===r.type||1===r.type&&"p"!==r.name&&!l[r.name]&&!r.attr("data-mce-type")?(n||((n=S(b,1)).attr(T.forced_root_block_attrs),k.insert(n,r)),n.append(r)):(e(n),n=null),r=t;e(n)}}(),!a.invalid){for(c in D)if(D.hasOwnProperty(c)){for(s=M[c],i=(n=D[c]).length;i--;)n[i].parent||n.splice(i,1);for(r=0,o=s.length;r<o;r++)s[r](n,c,a)}for(r=0,o=R.length;r<o;r++)if((s=R[r]).name in _){for(i=(n=_[s.name]).length;i--;)n[i].parent||n.splice(i,1);for(i=0,u=s.callbacks.length;i<u;i++)s.callbacks[i](n,s.name,a)}}return k}};return function(e,g){var p=e.schema;g.remove_trailing_brs&&e.addNodeFilter("br",function(e,t,n){var r,o,i,a,u,s,c,l,f=e.length,d=Mn.extend({},p.getBlockElements()),h=p.getNonEmptyElements(),m=p.getNonEmptyElements();for(d.body=1,r=0;r<f;r++)if(i=(o=e[r]).parent,d[o.parent.name]&&o===i.lastChild){for(u=o.prev;u;){if("span"!==(s=u.name)||"bookmark"!==u.attr("data-mce-type")){if("br"!==s)break;if("br"===s){o=null;break}}u=u.prev}o&&(o.remove(),Ep(p,h,m,i)&&(c=p.getElementRule(i.name))&&(c.removeEmpty?i.remove():c.paddEmpty&&zp(g,n,d,i)))}else{for(a=o;i&&i.firstChild===a&&i.lastChild===a&&!d[(a=i).name];)i=i.parent;a===i&&!0!==g.padd_empty_with_br&&((l=new ul("#text",3)).value="\xa0",o.replace(l))}}),e.addAttributeFilter("href",function(e){var t,n,r,o=e.length;if(!g.allow_unsafe_link_target)for(;o--;)"a"===(t=e[o]).name&&"_blank"===t.attr("target")&&t.attr("rel",(n=t.attr("rel"),void 0,r=n?Mn.trim(n):"",/\b(noopener)\b/g.test(r)?r:r.split(" ").filter(function(e){return 0<e.length}).concat(["noopener"]).sort().join(" ")))}),g.allow_html_in_named_anchor||e.addAttributeFilter("id,name",function(e){for(var t,n,r,o,i=e.length;i--;)if("a"===(o=e[i]).name&&o.firstChild&&!o.attr("href"))for(r=o.parent,t=o.lastChild;n=t.prev,r.insert(t,o),t=n;);}),g.fix_list_elements&&e.addNodeFilter("ul,ol",function(e){for(var t,n,r=e.length;r--;)if("ul"===(n=(t=e[r]).parent).name||"ol"===n.name)if(t.prev&&"li"===t.prev.name)t.prev.append(t);else{var o=new ul("li",1);o.attr("style","list-style-type: none"),t.wrap(o)}}),g.validate&&p.getValidClasses()&&e.addAttributeFilter("class",function(e){for(var t,n,r,o,i,a,u,s=e.length,c=p.getValidClasses();s--;){for(n=(t=e[s]).attr("class").split(" "),i="",r=0;r<n.length;r++)o=n[r],u=!1,(a=c["*"])&&a[o]&&(u=!0),a=c[t.name],!u&&a&&a[o]&&(u=!0),u&&(i&&(i+=" "),i+=o);i.length||(i=null),t.attr("class",i)}})}(e,T),Vp(e,T),e}function Sp(e,t,n){-1===Mn.inArray(t,n)&&(e.addAttributeFilter(n,function(e,t){for(var n=e.length;n--;)e[n].attr(t,null)}),t.push(n))}function kp(e,t,n,r,o){return function(e,t,n){return t.no_events||!e?n:ld(e,bd(t,{content:n})).content}(e,o,function(e,t,n){return pl(e,t).serialize(n)}(t,n,r))}function Tp(a,u){var s,c,l,e=["data-mce-selected"];return s=u&&u.dom?u.dom:Xi.DOM,c=u&&u.schema?u.schema:pr(a),a.entity_encoding=a.entity_encoding||"named",a.remove_trailing_brs=!("remove_trailing_brs"in a)||a.remove_trailing_brs,l=Np(a,c),Hp(l,a,s),{schema:c,addNodeFilter:l.addNodeFilter,addAttributeFilter:l.addAttributeFilter,serialize:function(e,t){var n=bd({format:"html"},t||{}),r=Lp(u,e,n),o=function(e,t,n){var r=lu(n.getInner?t.innerHTML:e.getOuterHTML(t));return n.selection||Wn(yt.fromDom(t))?r:Mn.trim(r)}(s,r,n),i=function(e,t,n){var r=n.selection?bd({forced_root_block:!1},n):n,o=e.parse(t,r);return Pp(o),o}(l,o,n);return"tree"===n.format?i:kp(u,a,c,i,n)},addRules:function(e){c.addValidElements(e)},setRules:function(e){c.setValidElements(e)},addTempAttr:d(Sp,l,e),getTempAttrs:function(){return e}}}function Ap(e,t){var n=Tp(e,t);return{schema:n.schema,addNodeFilter:n.addNodeFilter,addAttributeFilter:n.addAttributeFilter,serialize:n.serialize,addRules:n.addRules,setRules:n.setRules,addTempAttr:n.addTempAttr,getTempAttrs:n.getTempAttrs}}var Mp=Mn.each,Rp=Xi.DOM,Dp=function(e){return e&&"string"==typeof e?(e=(e=e.split(/\s*,\s*/)[0]).replace(/\s*(~\+|~|\+|>)\s*/g,"$1"),Mn.map(e.split(/(?:>|\s+(?![^\[\]]+\]))/),function(e){var t=Mn.map(e.split(/(?:~\+|~|\+)/),bp),n=t.pop();return t.length&&(n.siblings=t),n}).reverse()):[]},_p=function(n,e){var t,r,o,i,a,u,s="";if(!1===(u=n.settings.preview_styles))return"";"string"!=typeof u&&(u="font-family font-size font-weight font-style text-decoration text-transform color background-color border border-radius outline text-shadow");function c(e){return e.replace(/%(\w+)/g,"")}if("string"==typeof e){if(!(e=n.formatter.get(e)))return;e=e[0]}return"preview"in e&&!1===(u=e.preview)?"":(t=e.block||e.inline||"span",r=(i=Dp(e.selector)).length?(i[0].name||(i[0].name=t),t=e.selector,yp(i,n)):yp([t],n),o=Rp.select(t,r)[0]||r.firstChild,Mp(e.styles,function(e,t){(e=c(e))&&Rp.setStyle(o,t,e)}),Mp(e.attributes,function(e,t){(e=c(e))&&Rp.setAttrib(o,t,e)}),Mp(e.classes,function(e){e=c(e),Rp.hasClass(o,e)||Rp.addClass(o,e)}),n.fire("PreviewFormats"),Rp.setStyles(r,{position:"absolute",left:-65535}),n.getBody().appendChild(r),a=Rp.getStyle(n.getBody(),"fontSize",!0),a=/px$/.test(a)?parseInt(a,10):0,Mp(u.split(" "),function(e){var t=Rp.getStyle(o,e,!0);if(!("background-color"===e&&/transparent|rgba\s*\([^)]+,\s*0\)/.test(t)&&(t=Rp.getStyle(n.getBody(),e,!0),"#ffffff"===Rp.toHex(t).toLowerCase())||"color"===e&&"#000000"===Rp.toHex(t).toLowerCase())){if("font-size"===e&&/em|%$/.test(t)){if(0===a)return;t=parseFloat(t)/(/%$/.test(t)?100:1)*a+"px"}"border"===e&&t&&(s+="padding:0 2px;"),s+=e+":"+t+";"}}),n.fire("AfterPreviewFormats"),Rp.remove(r),s)},Bp=function(e,t,n,r,o){var i=t.get(n);!zg.match(e,n,r,o)||"toggle"in i[0]&&!i[0].toggle?mp.applyFormat(e,n,r,o):tp(e,n,r,o)},Op=function(e){e.addShortcut("meta+b","","Bold"),e.addShortcut("meta+i","","Italic"),e.addShortcut("meta+u","","Underline");for(var t=1;t<=6;t++)e.addShortcut("access+"+t,"",["FormatBlock",!1,"h"+t]);e.addShortcut("access+7","",["FormatBlock",!1,"p"]),e.addShortcut("access+8","",["FormatBlock",!1,"div"]),e.addShortcut("access+9","",["FormatBlock",!1,"address"])},Hp=function(t,s,c){t.addAttributeFilter("data-mce-tabindex",function(e,t){for(var n,r=e.length;r--;)(n=e[r]).attr("tabindex",n.attr("data-mce-tabindex")),n.attr(t,null)}),t.addAttributeFilter("src,href,style",function(e,t){for(var n,r,o=e.length,i="data-mce-"+t,a=s.url_converter,u=s.url_converter_scope;o--;)(r=(n=e[o]).attr(i))!==undefined?(n.attr(t,0<r.length?r:null),n.attr(i,null)):(r=n.attr(t),"style"===t?r=c.serializeStyle(c.parseStyle(r),n.name):a&&(r=a.call(u,r,t,n.name)),n.attr(t,0<r.length?r:null))}),t.addAttributeFilter("class",function(e){for(var t,n,r=e.length;r--;)(n=(t=e[r]).attr("class"))&&(n=t.attr("class").replace(/(?:^|\s)mce-item-\w+(?!\S)/g,""),t.attr("class",0<n.length?n:null))}),t.addAttributeFilter("data-mce-type",function(e,t,n){for(var r,o=e.length;o--;){if("bookmark"===(r=e[o]).attr("data-mce-type")&&!n.cleanup)k.from(r.firstChild).exists(function(e){return!su(e.value)})?r.unwrap():r.remove()}}),t.addNodeFilter("noscript",function(e){for(var t,n=e.length;n--;)(t=e[n].firstChild)&&(t.value=ir.decode(t.value))}),t.addNodeFilter("script,style",function(e,t){for(var n,r,o,i=e.length,a=function(e){return e.replace(/(<!--\[CDATA\[|\]\]-->)/g,"\n").replace(/^[\r\n]*|[\r\n]*$/g,"").replace(/^\s*((<!--)?(\s*\/\/)?\s*<!\[CDATA\[|(<!--\s*)?\/\*\s*<!\[CDATA\[\s*\*\/|(\/\/)?\s*<!--|\/\*\s*<!--\s*\*\/)\s*[\r\n]*/gi,"").replace(/\s*(\/\*\s*\]\]>\s*\*\/(-->)?|\s*\/\/\s*\]\]>(-->)?|\/\/\s*(-->)?|\]\]>|\/\*\s*-->\s*\*\/|\s*-->\s*)\s*$/g,"")};i--;)r=(n=e[i]).firstChild?n.firstChild.value:"","script"===t?((o=n.attr("type"))&&n.attr("type","mce-no/type"===o?null:o.replace(/^mce\-/,"")),"xhtml"===s.element_format&&0<r.length&&(n.firstChild.value="// <![CDATA[\n"+a(r)+"\n// ]]>")):"xhtml"===s.element_format&&0<r.length&&(n.firstChild.value="\x3c!--\n"+a(r)+"\n--\x3e")}),t.addNodeFilter("#comment",function(e){for(var t,n=e.length;n--;)0===(t=e[n]).value.indexOf("[CDATA[")?(t.name="#cdata",t.type=4,t.value=t.value.replace(/^\[CDATA\[|\]\]$/g,"")):0===t.value.indexOf("mce:protected ")&&(t.name="#text",t.type=3,t.raw=!0,t.value=unescape(t.value).substr(14))}),t.addNodeFilter("xml:namespace,input",function(e,t){for(var n,r=e.length;r--;)7===(n=e[r]).type?n.remove():1===n.type&&("input"!==t||n.attr("type")||n.attr("type","text"))}),t.addAttributeFilter("data-mce-type",function(e){z(e,function(e){"format-caret"===e.attr("data-mce-type")&&(e.isEmpty(t.schema.getNonEmptyElements())?e.remove():e.unwrap())})}),t.addAttributeFilter("data-mce-src,data-mce-href,data-mce-style,data-mce-selected,data-mce-expando,data-mce-type,data-mce-resize",function(e,t){for(var n=e.length;n--;)e[n].attr(t,null)})},Pp=function(e){function t(e){return e&&"br"===e.name}var n,r;t(n=e.lastChild)&&t(r=n.prev)&&(n.remove(),r.remove())},Lp=function(e,t,n){return function(e,t){return e&&e.hasEventListeners("PreProcess")&&!t.no_events}(e,n)?function(e,t,n){var r,o,i,a=e.dom;return t=t.cloneNode(!0),(r=j.document.implementation).createHTMLDocument&&(o=r.createHTMLDocument(""),Mn.each("BODY"===t.nodeName?t.childNodes:[t],function(e){o.body.appendChild(o.importNode(e,!0))}),t="BODY"!==t.nodeName?o.body.firstChild:o.body,i=a.doc,a.doc=o),cd(e,bd(n,{node:t})),i&&(a.doc=i),t}(e,t,n):t},Vp=function(e,t){t.inline_styles&&xp(e,t)},Ip=function(e,t){return e&&e.firstChild&&e.firstChild===e.lastChild&&e.firstChild.name===t},Fp=Mn.makeMap,Up=Mn.each,jp=Mn.explode,qp=Mn.extend;function $p(e){return{getBookmark:d(Vc,e),moveToBookmark:d(Ic,e)}}($p=$p||{}).isBookmarkNode=Fc;function Wp(r,a){var u,s,c,l,f,d,h,m,g,p,v,y,i,b,C,w,x,z=a.dom,E=Mn.each,N=a.getDoc(),S=j.document,k=Math.abs,T=Math.round,A=a.getBody();function M(e){return e&&("IMG"===e.nodeName||a.dom.is(e,"figure.image"))}function e(e){var t=e.target;!function(e,t){if("longpress"!==e.type&&0!==e.type.indexOf("touch"))return M(e.target)&&!Jm(e.clientX,e.clientY,t);var n=e.touches[0];return M(e.target)&&!Jm(n.clientX,n.clientY,t)}(e,a.selection.getRng())||e.isDefaultPrevented()||a.selection.select(t)}function R(e){return a.dom.is(e,"figure.image")?e.querySelector("img"):e}function D(e){var t=a.settings.object_resizing;return!1!==t&&!Nn.iOS&&("string"!=typeof t&&(t="table,img,figure.image,div"),"false"!==e.getAttribute("data-mce-resize")&&(e!==a.getBody()&&we(yt.fromDom(e),t)))}function _(e){var t,n,r,o;t=e.screenX-d,n=e.screenY-h,b=t*f[2]+p,C=n*f[3]+v,b=b<5?5:b,C=C<5?5:C,(M(u)&&!1!==a.settings.resize_img_proportional?!Ah.modifierPressed(e):Ah.modifierPressed(e)||M(u)&&f[2]*f[3]!=0)&&(k(t)>k(n)?(C=T(b*y),b=T(C/y)):(b=T(C/y),C=T(b*y))),z.setStyles(R(s),{width:b,height:C}),r=0<(r=f.startPos.x+t)?r:0,o=0<(o=f.startPos.y+n)?o:0,z.setStyles(c,{left:r,top:o,display:"block"}),c.innerHTML=b+" &times; "+C,f[2]<0&&s.clientWidth<=b&&z.setStyle(s,"left",m+(p-b)),f[3]<0&&s.clientHeight<=C&&z.setStyle(s,"top",g+(v-C)),(t=A.scrollWidth-w)+(n=A.scrollHeight-x)!==0&&z.setStyles(c,{left:r-t,top:o-n}),i||(md(a,u,p,v),i=!0)}function n(e){function t(e,t){if(e)do{if(e===t)return!0}while(e=e.parentNode)}var n;i||a.removed||(E(z.select("img[data-mce-selected],hr[data-mce-selected]"),function(e){e.removeAttribute("data-mce-selected")}),n="mousedown"===e.type?e.target:r.getNode(),t(n=z.$(n).closest("table,img,figure.image,hr")[0],A)&&(L(),t(r.getStart(!0),n)&&t(r.getEnd(!0),n))?O(n):H())}function o(e){return Xp(function(e,t){for(;t&&t!==e;){if(Yp(t)||Xp(t))return t;t=t.parentNode}return null}(a.getBody(),e))}l={nw:[0,0,-1,-1],ne:[1,0,1,-1],se:[1,1,1,1],sw:[0,1,-1,1]};var B=function(){i=!1;function e(e,t){t&&(u.style[e]||!a.schema.isValid(u.nodeName.toLowerCase(),e)?z.setStyle(R(u),e,t):z.setAttrib(R(u),e,t))}e("width",b),e("height",C),z.unbind(N,"mousemove",_),z.unbind(N,"mouseup",B),S!==N&&(z.unbind(S,"mousemove",_),z.unbind(S,"mouseup",B)),z.remove(s),z.remove(c),O(u),gd(a,u,b,C),z.setAttrib(u,"style",z.getAttrib(u,"style")),a.nodeChanged()},O=function(e){var t,r,o,n,i;H(),P(),t=z.getPos(e,A),m=t.x,g=t.y,i=e.getBoundingClientRect(),r=i.width||i.right-i.left,o=i.height||i.bottom-i.top,u!==e&&(u=e,b=C=0),n=a.fire("ObjectSelected",{target:e}),D(e)&&!n.isDefaultPrevented()?E(l,function(t,e){var n;(n=z.get("mceResizeHandle"+e))&&z.remove(n),n=z.add(A,"div",{id:"mceResizeHandle"+e,"data-mce-bogus":"all","class":"mce-resizehandle",unselectable:!0,style:"cursor:"+e+"-resize; margin:0; padding:0"}),11===Nn.ie&&(n.contentEditable=!1),z.bind(n,"mousedown",function(e){e.stopImmediatePropagation(),e.preventDefault(),function(e){d=e.screenX,h=e.screenY,p=R(u).clientWidth,v=R(u).clientHeight,y=v/p,(f=t).startPos={x:r*t[0]+m,y:o*t[1]+g},w=A.scrollWidth,x=A.scrollHeight,s=u.cloneNode(!0),z.addClass(s,"mce-clonedresizable"),z.setAttrib(s,"data-mce-bogus","all"),s.contentEditable=!1,s.unSelectabe=!0,z.setStyles(s,{left:m,top:g,margin:0}),s.removeAttribute("data-mce-selected"),A.appendChild(s),z.bind(N,"mousemove",_),z.bind(N,"mouseup",B),S!==N&&(z.bind(S,"mousemove",_),z.bind(S,"mouseup",B)),c=z.add(A,"div",{"class":"mce-resize-helper","data-mce-bogus":"all"},p+" &times; "+v)}(e)}),t.elm=n,z.setStyles(n,{left:r*t[0]+m-n.offsetWidth/2,top:o*t[1]+g-n.offsetHeight/2})}):H(),u.setAttribute("data-mce-selected","1")},H=function(){var e,t;for(e in P(),u&&u.removeAttribute("data-mce-selected"),l)(t=z.get("mceResizeHandle"+e))&&(z.unbind(t),z.remove(t))},P=function(){for(var e in l){var t=l[e];t.elm&&(z.unbind(t.elm),delete t.elm)}},L=function(){try{a.getDoc().execCommand("enableObjectResizing",!1,!1)}catch(e){}};return a.on("init",function(){L(),(Nn.browser.isIE()||Nn.browser.isEdge())&&(a.on("mousedown click",function(e){var t=e.target,n=t.nodeName;i||!/^(TABLE|IMG|HR)$/.test(n)||o(t)||(2!==e.button&&a.selection.select(t,"TABLE"===n),"mousedown"===e.type&&a.nodeChanged())}),a.dom.bind(A,"mscontrolselect",function(e){function t(e){pn.setEditorTimeout(a,function(){a.selection.select(e)})}if(o(e.target))return e.preventDefault(),void t(e.target);/^(TABLE|IMG|HR)$/.test(e.target.nodeName)&&(e.preventDefault(),"IMG"===e.target.tagName&&t(e.target))}));var t=pn.throttle(function(e){a.composing||n(e)});a.on("nodechange ResizeEditor ResizeWindow drop FullscreenStateChanged",t),a.on("keyup compositionend",function(e){u&&"TABLE"===u.nodeName&&t(e)}),a.on("hide blur",H),a.on("contextmenu longpress",e,!0)}),a.on("remove",P),{isResizable:D,showResizeRect:O,hideResizeRect:H,updateResizeRect:n,destroy:function(){u=s=null}}}var Kp=$p,Xp=Ge.isContentEditableFalse,Yp=Ge.isContentEditableTrue;function Gp(e){var t=yt.fromDom(j.document),n=ki(t),r=function(e,t){var n=t.owner(e);return Vv(t,n)}(e,Iv),o=Hi(e),i=m(r,function(e,t){var n=Hi(t);return{left:e.left+n.left(),top:e.top+n.top()}},{left:0,top:0});return Oi(i.left+o.left()+n.left(),i.top+o.top()+n.top())}function Jp(e){return"textarea"===ie(e)}function Qp(e,t){var n=function(e){var t=e.dom().ownerDocument,n=t.body,r=t.defaultView,o=t.documentElement;if(n===e.dom())return Oi(n.offsetLeft,n.offsetTop);var i=Si(r.pageYOffset,o.scrollTop),a=Si(r.pageXOffset,o.scrollLeft),u=Si(o.clientTop,n.clientTop),s=Si(o.clientLeft,n.clientLeft);return Hi(e).translate(a-s,i-u)}(e),r=function(e){return Lv.get(e)}(e);return{element:e,bottom:n.top()+r,pos:n,cleanup:t}}function Zp(e,t){var n=function(e,t){var n=Re(e);if(0===n.length||Jp(e))return{element:e,offset:t};if(t<n.length&&!Jp(n[t]))return{element:n[t],offset:0};var r=n[n.length-1];return Jp(r)?{element:e,offset:t}:"img"===ie(r)?{element:r,offset:1}:zt(r)?{element:r,offset:Jc(r).length}:{element:r,offset:Re(r).length}}(e,t),r=yt.fromHtml('<span data-mce-bogus="all">'+cu+"</span>");return Ci(n.element,r),Qp(r,function(){return _i(r)})}function ev(e){return Qp(yt.fromDom(e),i)}function tv(n,r,o,i){Uv(n,function(e,t){return Fv(n,r,o,i)},o)}function nv(e,t,n,r){var o=yt.fromDom(e.getDoc());n(o,ki(o).top(),t,r)}function rv(e,t,n,r){var o=e.pos;if(n)Ti(o.left(),o.top(),r);else{var i=o.top()-t+(e.bottom-o.top());Ti(o.left(),i,r)}}function ov(e,t,n,r,o){r.pos.top()<t?rv(r,n,!1!==o,e):r.bottom>n+t&&rv(r,n,!0===o,e)}function iv(e,t,n,r){var o=e.dom().defaultView.innerHeight;ov(e,t,o,n,r)}function av(e,t,n,r,o){var i=t.dom().defaultView.innerHeight;ov(t,n,i,r,o);var a=Gp(r.element),u=Li(j.window);a.top()<u.y()?Ai(r.element,!1!==o):a.top()>u.bottom()&&Ai(r.element,!0===o)}function uv(e,t,n){return tv(e,d(iv),t,n)}function sv(e,t,n){return nv(e,ev(t),d(iv),n)}function cv(e,t,n){return tv(e,d(av,e),t,n)}function lv(e,t,n){return nv(e,ev(t),d(av,e),n)}function fv(e){return Ge.isContentEditableTrue(e)||Ge.isContentEditableFalse(e)}function dv(e,t){var n=(t||j.document).createDocumentFragment();return z(e,function(e){n.appendChild(e.dom())}),yt.fromDom(n)}function hv(e,t){var n=parseInt(ge(e,t),10);return isNaN(n)?1:n}function mv(e){return b(e,function(e,t){return t.cells().length>e?t.cells().length:e},0)}function gv(e,t){for(var n=e.rows(),r=0;r<n.length;r++)for(var o=n[r].cells(),i=0;i<o.length;i++)if(ze(o[i],t))return k.some(Yv(i,r));return k.none()}function pv(e,t,n,r,o){for(var i=[],a=e.rows(),u=n;u<=o;u++){var s=a[u].cells(),c=t<r?s.slice(t,r+1):s.slice(r,t+1);i.push(Xv(a[u].element(),c))}return i}function vv(e){var t=[];if(e)for(var n=0;n<e.rangeCount;n++)t.push(e.getRangeAt(n));return t}function yv(e){return y(ey(e),$n)}function bv(e){return ma(e,"td[data-mce-selected],th[data-mce-selected]")}function Cv(e,t){var n=bv(t),r=yv(e);return 0<n.length?n:r}function wv(t,n){return g(t,function(e){return"li"===ie(e)&&uh(e,n)}).fold($([]),function(e){return function(e){return g(e,function(e){return"ul"===ie(e)||"ol"===ie(e)})}(t).map(function(e){return[yt.fromTag("li"),yt.fromTag(ie(e))]}).getOr([])})}function xv(e,t){var n=yt.fromDom(t.commonAncestorContainer),r=fh(n,e),o=y(r,function(e){return Dn(e)||Ln(e)}),i=wv(r,t),a=o.concat(i.length?i:function(t){return Un(t)?Se(t).filter(Fn).fold($([]),function(e){return[t,e]}):Fn(t)?[t]:[]}(n));return X(a,ka)}function zv(){return dv([])}function Ev(e,t){return function(e,t){var n=b(t,function(e,t){return Di(t,e),t},e);return 0<t.length?dv([n]):n}(yt.fromDom(t.cloneContents()),xv(e,t))}function Nv(e,o){return function(e,t){return Ca(t,"table",d(ze,e))}(e,o[0]).bind(function(e){var t=o[0],n=o[o.length-1],r=Gv(e);return Qv(r,t,n).map(function(e){return dv([Jv(e)])})}).getOrThunk(zv)}function Sv(e,t,n){return null!==function(e,t,n){for(;e&&e!==t;){if(n(e))return e;e=e.parentNode}return null}(e,t,n)}function kv(e,t,n){return Sv(e,t,function(e){return e.nodeName===n})}function Tv(e){return e&&"TABLE"===e.nodeName}function Av(e,t,n){for(var r=new yi(t,e.getParent(t.parentNode,e.isBlock)||e.getRoot());t=r[n?"prev":"next"]();)if(Ge.isBr(t))return!0}function Mv(e,t,n,r,o){var i,a,u=e.getRoot(),s=e.schema.getNonEmptyElements(),c=e.getParent(o.parentNode,e.isBlock)||u;if(r&&Ge.isBr(o)&&t&&e.isEmpty(c))return k.some(Uu(o.parentNode,e.nodeIndex(o)));for(var l,f,d=new yi(o,c);a=d[r?"prev":"next"]();){if("false"===e.getContentEditableParent(a)||(f=u,Da(l=a)&&!1===Sv(l,f,rs)))return k.none();if(Ge.isText(a)&&0<a.nodeValue.length)return!1===kv(a,u,"A")?k.some(Uu(a,r?a.nodeValue.length:0)):k.none();if(e.isBlock(a)||s[a.nodeName.toLowerCase()])return k.none();i=a}return n&&i?k.some(Uu(i,0)):k.none()}function Rv(e,t,n,r){var o,i,a,u,s,c,l,f=e.getRoot(),d=!1;if(o=r[(n?"start":"end")+"Container"],i=r[(n?"start":"end")+"Offset"],c=Ge.isElement(o)&&i===o.childNodes.length,u=e.schema.getNonEmptyElements(),s=n,Da(o))return k.none();if(Ge.isElement(o)&&i>o.childNodes.length-1&&(s=!1),Ge.isDocument(o)&&(o=f,i=0),o===f){if(s&&(a=o.childNodes[0<i?i-1:0])){if(Da(a))return k.none();if(u[a.nodeName]||Tv(a))return k.none()}if(o.hasChildNodes()){if(i=Math.min(!s&&0<i?i-1:i,o.childNodes.length-1),o=o.childNodes[i],i=Ge.isText(o)&&c?o.data.length:0,!t&&o===f.lastChild&&Tv(o))return k.none();if(function(e,t){for(;t&&t!==e;){if(Ge.isContentEditableFalse(t))return!0;t=t.parentNode}return!1}(f,o)||Da(o))return k.none();if(o.hasChildNodes()&&!1===Tv(o)){var h=new yi(a=o,f);do{if(Ge.isContentEditableFalse(a)||Da(a)){d=!1;break}if(Ge.isText(a)&&0<a.nodeValue.length){i=s?0:a.nodeValue.length,o=a,d=!0;break}if(u[a.nodeName.toLowerCase()]&&(!(l=a)||!/^(TD|TH|CAPTION)$/.test(l.nodeName))){i=e.nodeIndex(a),o=a.parentNode,s||i++,d=!0;break}}while(a=s?h.next():h.prev())}}}return t&&(Ge.isText(o)&&0===i&&Mv(e,c,t,!0,o).each(function(e){o=e.container(),i=e.offset(),d=!0}),Ge.isElement(o)&&(!(a=(a=o.childNodes[i])||o.childNodes[i-1])||!Ge.isBr(a)||function(e,t){return e.previousSibling&&e.previousSibling.nodeName===t}(a,"A")||Av(e,a,!1)||Av(e,a,!0)||Mv(e,c,t,!0,a).each(function(e){o=e.container(),i=e.offset(),d=!0}))),s&&!t&&Ge.isText(o)&&i===o.nodeValue.length&&Mv(e,c,t,!1,o).each(function(e){o=e.container(),i=e.offset(),d=!0}),d?k.some(Uu(o,i)):k.none()}function Dv(e){return 0===e.dom().length?(_i(e),k.none()):k.some(e)}function _v(e,t,n,r,o){var i=n?t.startContainer:t.endContainer,a=n?t.startOffset:t.endOffset;return k.from(i).map(yt.fromDom).map(function(e){return r&&t.collapsed?e:De(e,o(e,a)).getOr(e)}).bind(function(e){return xt(e)?k.some(e):Se(e)}).map(function(e){return e.dom()}).getOr(e)}function Bv(e,t,n){return _v(e,t,!0,n,function(e,t){return Math.min(function(e){return e.dom().childNodes.length}(e),t)})}function Ov(e,t,n){return _v(e,t,!1,n,function(e,t){return 0<t?t-1:t})}function Hv(e,t){for(var n=e;e&&Ge.isText(e)&&0===e.length;)e=t?e.nextSibling:e.previousSibling;return e||n}function Pv(e,t,n){if(e&&e.hasOwnProperty(t)){var r=y(e[t],function(e){return e!==n});0===r.length?delete e[t]:e[t]=r}}var Lv=function CN(r,o){function e(e){var t=o(e);if(t<=0||null===t){var n=ve(e,r);return parseFloat(n)||0}return t}function i(o,e){return b(e,function(e,t){var n=ve(o,t),r=n===undefined?0:parseInt(n,10);return isNaN(r)?e:e+r},0)}return{set:function(e,t){if(!_(t)&&!t.match(/^[0-9]+$/))throw new Error(r+".set accepts only positive integer values. Value was "+t);var n=e.dom();fe(n)&&(n.style[r]=t+"px")},get:e,getOuter:e,aggregate:i,max:function(e,t,n){var r=i(e,n);return r<t?t-r:0}}}("height",function(e){var t=e.dom();return de(e)?t.getBoundingClientRect().height:t.offsetHeight}),Vv=function(r,e){return r.view(e).fold($([]),function(e){var t=r.owner(e),n=Vv(r,t);return[e].concat(n)})},Iv=/* */Object.freeze({view:function(e){return(e.dom()===j.document?k.none():k.from(e.dom().defaultView.frameElement)).map(yt.fromDom)},owner:function(e){return Ee(e)}}),Fv=function(e,t,n,r){var o=yt.fromDom(e.getBody()),i=yt.fromDom(e.getDoc());!function(e){e.dom().offsetWidth}(o);var a=ki(i).top(),u=Zp(yt.fromDom(n.startContainer),n.startOffset);t(i,a,u,r),u.cleanup()},Uv=function(e,t,n){var r=n.startContainer,o=n.startOffset,i=n.endContainer,a=n.endOffset;t(yt.fromDom(r),yt.fromDom(i));var u=e.dom.createRng();u.setStart(r,o),u.setEnd(i,a),e.selection.setRng(n)},jv=function(e,t,n){!function(e,t,n){return e.fire("ScrollIntoView",{elm:t,alignToTop:n}).isDefaultPrevented()}(e,t,n)&&(e.inline?sv:lv)(e,t,n)},qv=function(e,t,n){(e.inline?uv:cv)(e,t,n)},$v=function(e,t,n){var r,o,i=n;if(i.caretPositionFromPoint)(o=i.caretPositionFromPoint(e,t))&&((r=n.createRange()).setStart(o.offsetNode,o.offset),r.collapse(!0));else if(n.caretRangeFromPoint)r=n.caretRangeFromPoint(e,t);else if(i.body.createTextRange){r=i.body.createTextRange();try{r.moveToPoint(e,t),r.collapse(!0)}catch(a){r=function(e,n,t){var r,o,i;if(r=t.elementFromPoint(e,n),o=t.body.createTextRange(),r&&"HTML"!==r.tagName||(r=t.body),o.moveToElementText(r),0<(i=(i=Mn.toArray(o.getClientRects())).sort(function(e,t){return(e=Math.abs(Math.max(e.top-n,e.bottom-n)))-(t=Math.abs(Math.max(t.top-n,t.bottom-n)))})).length){n=(i[0].bottom+i[0].top)/2;try{return o.moveToPoint(e,n),o.collapse(!0),o}catch(a){}}return null}(e,t,n)}return function(e,t){var n=e&&e.parentElement?e.parentElement():null;return Ge.isContentEditableFalse(function(e,t,n){for(;e&&e!==t;){if(n(e))return e;e=e.parentNode}return null}(n,t,fv))?null:e}(r,n.body)}return r},Wv=function(n,e){return X(e,function(e){var t=n.fire("GetSelectionRange",{range:e});return t.range!==e?t.range:e})},Kv=be("element","width","rows"),Xv=be("element","cells"),Yv=be("x","y"),Gv=function(e){var o=Kv(ka(e),0,[]);return z(ma(e,"tr"),function(n,r){z(ma(n,"td,th"),function(e,t){!function(e,t,n,r,o){for(var i=hv(o,"rowspan"),a=hv(o,"colspan"),u=e.rows(),s=n;s<n+i;s++){u[s]||(u[s]=Xv(Ta(r),[]));for(var c=t;c<t+a;c++){u[s].cells()[c]=s===n&&c===t?o:ka(o)}}}(o,function(e,t,n){for(;r=t,o=n,i=void 0,((i=e.rows())[o]?i[o].cells():[])[r];)t++;var r,o,i;return t}(o,t,r),r,n,e)})}),Kv(o.element(),mv(o.rows()),o.rows())},Jv=function(e){return function(e,t){var n=ka(e.element()),r=yt.fromTag("tbody");return zi(r,t),Di(n,r),n}(e,function(e){return X(e.rows(),function(e){var t=X(e.cells(),function(e){var t=Ta(e);return pe(t,"colspan"),pe(t,"rowspan"),t}),n=ka(e.element());return zi(n,t),n})}(e))},Qv=function(n,e,r){return gv(n,e).bind(function(t){return gv(n,r).map(function(e){return function(e,t,n){var r=t.x(),o=t.y(),i=n.x(),a=n.y(),u=o<a?pv(e,r,o,i,a):pv(e,r,a,i,o);return Kv(e.element(),mv(u),u)}(n,t,e)})})},Zv=vv,ey=function(e){return v(e,function(e){var t=Wa(e);return t?[yt.fromDom(t)]:[]})},ty=function(e){return 1<vv(e).length},ny=Cv,ry=function(e){return Cv(Zv(e.selection.getSel()),yt.fromDom(e.getBody()))},oy=function(e,t){var n=ny(t,e);return 0<n.length?Nv(e,n):function(e,t){return 0<t.length&&t[0].collapsed?zv():Ev(e,t[0])}(e,t)},iy=function(e,t){if(void 0===t&&(t={}),t.get=!0,t.format=t.format||"html",t.selection=!0,(t=e.fire("BeforeGetContent",t)).isDefaultPrevented())return e.fire("GetContent",t),t.content;if("text"===t.format)return function(r){return k.from(r.selection.getRng()).map(function(e){var t=r.dom.add(r.getBody(),"div",{"data-mce-bogus":"all",style:"overflow: hidden; opacity: 0;"},e.cloneContents()),n=lu(t.innerText);return r.dom.remove(t),n}).getOr("")}(e);t.getInner=!0;var n=function(e,t){var n,r=e.selection.getRng(),o=e.dom.create("body"),i=e.selection.getSel(),a=Wv(e,Zv(i));return(n=t.contextual?oy(yt.fromDom(e.getBody()),a).dom():r.cloneContents())&&o.appendChild(n),e.selection.serializer.serialize(o,t)}(e,t);return"tree"===t.format?n:(t.content=e.selection.isCollapsed()?"":n,e.fire("GetContent",t),t.content)},ay=function(e,t){var n=t.collapsed,r=t.cloneRange(),o=Uu.fromRangeStart(t);return Rv(e,n,!0,r).each(function(e){n&&Uu.isAbove(o,e)||r.setStart(e.container(),e.offset())}),n||Rv(e,n,!1,r).each(function(e){r.setEnd(e.container(),e.offset())}),n&&r.collapse(!0),hh(t,r)?k.none():k.some(r)},uy=function(e,t,n){if((n=function(e,t){return(e=e||{format:"html"}).set=!0,e.selection=!0,e.content=t,e}(n,t)).no_events||!(n=e.fire("BeforeSetContent",n)).isDefaultPrevented()){var r=e.selection.getRng();!function(r,e){var t=k.from(e.firstChild).map(yt.fromDom),n=k.from(e.lastChild).map(yt.fromDom);r.deleteContents(),r.insertNode(e);var o=t.bind(ke).filter(zt).bind(Dv),i=n.bind(Te).filter(zt).bind(Dv);Ya(o,t.filter(zt),function(e,t){!function(e,t){e.insertData(0,t)}(t.dom(),e.dom().data),_i(e)}),Ya(i,n.filter(zt),function(e,t){var n=t.dom().length;t.dom().appendData(e.dom().data),r.setEnd(t.dom(),n),_i(e)}),r.collapse(!1)}(r,r.createContextualFragment(n.content)),e.selection.setRng(r),qv(e,r),n.no_events||e.fire("SetContent",n)}else e.fire("SetContent",n)};function sy(e){return!!e.select}function cy(e){return!(!e||!e.ownerDocument)&&Bt(yt.fromDom(e.ownerDocument),yt.fromDom(e))}function ly(u,s,e,c){function t(e,t){return uy(c,e,t)}function r(){var e,t,n=d();return!(n&&n.anchorNode&&n.focusNode)||((e=u.createRng()).setStart(n.anchorNode,n.anchorOffset),e.collapse(!0),(t=u.createRng()).setStart(n.focusNode,n.focusOffset),t.collapse(!0),e.compareBoundaryPoints(e.START_TO_START,t)<=0)}var n,o,l,f,i=function p(i,n){var a,u;return{selectorChangedWithUnbind:function(e,t){return a||(a={},u={},n.on("NodeChange",function(e){var n=e.element,r=i.getParents(n,null,i.getRoot()),o={};Mn.each(a,function(e,n){Mn.each(r,function(t){if(i.is(t,n))return u[n]||(Mn.each(e,function(e){e(!0,{node:t,selector:n,parents:r})}),u[n]=e),o[n]=e,!1})}),Mn.each(u,function(e,t){o[t]||(delete u[t],Mn.each(e,function(e){e(!1,{node:n,selector:t,parents:r})}))})})),a[e]||(a[e]=[]),a[e].push(t),{unbind:function(){Pv(a,e,t),Pv(u,e,t)}}}}}(u,c).selectorChangedWithUnbind,a=function(e){var t=h();t.collapse(!!e),m(t)},d=function(){return s.getSelection?s.getSelection():s.document.selection},h=function(){function e(e,t,n){try{return t.compareBoundaryPoints(e,n)}catch(r){return-1}}var t,n,r,o;if(!s)return null;if(null==(o=s.document))return null;if(c.bookmark!==undefined&&!1===ud(c)){var i=Qf(c);if(i.isSome())return i.map(function(e){return Wv(c,[e])[0]}).getOr(o.createRange())}try{(t=d())&&!Ge.isRestrictedNode(t.anchorNode)&&(n=0<t.rangeCount?t.getRangeAt(0):t.createRange?t.createRange():o.createRange())}catch(a){}return(n=(n=Wv(c,[n])[0])||(o.createRange?o.createRange():o.body.createTextRange())).setStart&&9===n.startContainer.nodeType&&n.collapsed&&(r=u.getRoot(),n.setStart(r,0),n.setEnd(r,0)),l&&f&&(0===e(n.START_TO_START,n,l)&&0===e(n.END_TO_END,n,l)?n=f:f=l=null),n},m=function(e,t){var n,r;if(function(e){return!!e&&(!!sy(e)||cy(e.startContainer)&&cy(e.endContainer))}(e)){var o=sy(e)?e:null;if(o){f=null;try{o.select()}catch(i){}}else{if(n=d(),e=c.fire("SetSelectionRange",{range:e,forward:t}).range,n){f=e;try{n.removeAllRanges(),n.addRange(e)}catch(i){}!1===t&&n.extend&&(n.collapse(e.endContainer,e.endOffset),n.extend(e.startContainer,e.startOffset)),l=0<n.rangeCount?n.getRangeAt(0):null}e.collapsed||e.startContainer!==e.endContainer||!n.setBaseAndExtent||Nn.ie||e.endOffset-e.startOffset<2&&e.startContainer.hasChildNodes()&&(r=e.startContainer.childNodes[e.startOffset])&&"IMG"===r.tagName&&(n.setBaseAndExtent(e.startContainer,e.startOffset,e.endContainer,e.endOffset),n.anchorNode===e.startContainer&&n.focusNode===e.endContainer||n.setBaseAndExtent(r,0,r,1)),c.fire("AfterSetSelectionRange",{range:e,forward:t})}}},g={bookmarkManager:null,controlSelection:null,dom:u,win:s,serializer:e,editor:c,collapse:a,setCursorLocation:function(e,t){var n=u.createRng();e?(n.setStart(e,t),n.setEnd(e,t),m(n),a(!1)):(sh(u,n,c.getBody(),!0),m(n))},getContent:function(e){return iy(c,e)},setContent:t,getBookmark:function(e,t){return n.getBookmark(e,t)},moveToBookmark:function(e){return n.moveToBookmark(e)},select:function(e,t){return function(r,e,o){return k.from(e).map(function(e){var t=r.nodeIndex(e),n=r.createRng();return n.setStart(e.parentNode,t),n.setEnd(e.parentNode,t+1),o&&(sh(r,n,e,!0),sh(r,n,e,!1)),n})}(u,e,t).each(m),e},isCollapsed:function(){var e=h(),t=d();return!(!e||e.item)&&(e.compareEndPoints?0===e.compareEndPoints("StartToEnd",e):!t||e.collapsed)},isForward:r,setNode:function(e){return t(u.getOuterHTML(e)),e},getNode:function(){return function(e,t){var n,r,o,i,a;return t?(r=t.startContainer,o=t.endContainer,i=t.startOffset,a=t.endOffset,n=t.commonAncestorContainer,!t.collapsed&&(r===o&&a-i<2&&r.hasChildNodes()&&(n=r.childNodes[i]),3===r.nodeType&&3===o.nodeType&&(r=r.length===i?Hv(r.nextSibling,!0):r.parentNode,o=0===a?Hv(o.previousSibling,!1):o.parentNode,r&&r===o))?r:n&&3===n.nodeType?n.parentNode:n):e}(c.getBody(),h())},getSel:d,setRng:m,getRng:h,getStart:function(e){return Bv(c.getBody(),h(),e)},getEnd:function(e){return Ov(c.getBody(),h(),e)},getSelectedBlocks:function(e,t){return function(e,t,n,r){var o,i,a=[];if(i=e.getRoot(),n=e.getParent(n||Bv(i,t,t.collapsed),e.isBlock),r=e.getParent(r||Ov(i,t,t.collapsed),e.isBlock),n&&n!==i&&a.push(n),n&&r&&n!==r)for(var u=new yi(o=n,i);(o=u.next())&&o!==r;)e.isBlock(o)&&a.push(o);return r&&n!==r&&r!==i&&a.push(r),a}(u,h(),e,t)},normalize:function(){var e=h(),t=d();if(ty(t)||!ch(c))return e;var n=ay(u,e);return n.each(function(e){m(e,r())}),n.getOr(e)},selectorChanged:function(e,t){return i(e,t),g},selectorChangedWithUnbind:i,getScrollContainer:function(){for(var e,t=u.getRoot();t&&"BODY"!==t.nodeName;){if(t.scrollHeight>t.clientHeight){e=t;break}t=t.parentNode}return e},scrollIntoView:function(e,t){return jv(c,e,t)},placeCaretAt:function(e,t){return m($v(e,t,c.getDoc()))},getBoundingClientRect:function(){var e=h();return e.collapsed?Ds.fromRangeStart(e).getClientRects()[0]:e.getBoundingClientRect()},destroy:function(){s=l=f=null,o.destroy()}};return n=Kp(g),o=Wp(g,c),g.bookmarkManager=n,g.controlSelection=o,g}function fy(e){return Uy(e)&&e.data[0]===cu}function dy(e){return Uy(e)&&e.data[e.data.length-1]===cu}function hy(e){return e.ownerDocument.createTextNode(cu)}function my(e,t){return e?function(e){if(Uy(e.previousSibling))return dy(e.previousSibling)||e.previousSibling.appendData(cu),e.previousSibling;if(Uy(e))return fy(e)||e.insertData(0,cu),e;var t=hy(e);return e.parentNode.insertBefore(t,e),t}(t):function(e){if(Uy(e.nextSibling))return fy(e.nextSibling)||e.nextSibling.insertData(0,cu),e.nextSibling;if(Uy(e))return dy(e)||e.appendData(cu),e;var t=hy(e);return e.nextSibling?e.parentNode.insertBefore(t,e.nextSibling):e.parentNode.appendChild(t),t}(t)}function gy(e,t){return Ge.isText(e.container())?my(t,e.container()):my(t,e.getNode())}function py(e,t){var n=t.get();return n&&e.container()===n&&Ra(n)}function vy(e,t){if(!t)return t;var n=t.container(),r=t.offset();return e?Ra(n)?Ge.isText(n.nextSibling)?Ds(n.nextSibling,0):Ds.after(n):Ba(t)?Ds(n,r+1):t:Ra(n)?Ge.isText(n.previousSibling)?Ds(n.previousSibling,n.previousSibling.data.length):Ds.before(n):Oa(t)?Ds(n,r-1):t}function yy(e,t){var n=bs(t,e);return n||e}function by(e,t,n){var r=Ky.normalizeForwards(n),o=yy(t,r.container());return Ky.findRootInline(e,o,r).fold(function(){return Pc.nextPosition(o,r).bind(d(Ky.findRootInline,e,o)).map(function(e){return Yy.before(e)})},k.none)}function Cy(e,t){return null===os(e,t)}function wy(e,t,n){return Ky.findRootInline(e,t,n).filter(d(Cy,t))}function xy(e,t,n){var r=Ky.normalizeBackwards(n);return wy(e,t,r).bind(function(e){return Pc.prevPosition(e,r).isNone()?k.some(Yy.start(e)):k.none()})}function zy(e,t,n){var r=Ky.normalizeForwards(n);return wy(e,t,r).bind(function(e){return Pc.nextPosition(e,r).isNone()?k.some(Yy.end(e)):k.none()})}function Ey(e,t,n){var r=Ky.normalizeBackwards(n),o=yy(t,r.container());return Ky.findRootInline(e,o,r).fold(function(){return Pc.prevPosition(o,r).bind(d(Ky.findRootInline,e,o)).map(function(e){return Yy.after(e)})},k.none)}function Ny(e){return!1===Ky.isRtl(Gy(e))}function Sy(e,t,n){return Xy([by,xy,zy,Ey],[e,t,n]).filter(Ny)}function ky(e){return e.fold($("before"),$("start"),$("end"),$("after"))}function Ty(e){return e.fold(Yy.before,Yy.before,Yy.after,Yy.after)}function Ay(n,e,r,t,o,i){return Ya(Ky.findRootInline(e,r,t),Ky.findRootInline(e,r,o),function(e,t){return e!==t&&Ky.hasSameParentBlock(r,e,t)?Yy.after(n?e:t):i}).getOr(i)}function My(e,t){return e.fold($(!0),function(e){return!function(e,t){return ky(e)===ky(t)&&Gy(e)===Gy(t)}(e,t)})}function Ry(e,t){return e?t.fold(q(k.some,Yy.start),k.none,q(k.some,Yy.after),k.none):t.fold(k.none,q(k.some,Yy.before),k.none,q(k.some,Yy.end))}function Dy(e,t,n,r){var o=Ky.normalizePosition(e,r),i=Sy(t,n,o);return Sy(t,n,o).bind(d(Ry,e)).orThunk(function(){return function(t,n,r,o,e){var i=Ky.normalizePosition(t,e);return Pc.fromPosition(t,r,i).map(d(Ky.normalizePosition,t)).fold(function(){return o.map(Ty)},function(e){return Sy(n,r,e).map(d(Ay,t,n,r,i,e)).filter(d(My,o))}).filter(Ny)}(e,t,n,i,r)})}function _y(e){return D(e.selection.getSel().modify)}function By(e,t,n){var r=e?1:-1;return t.setRng(Ds(n.container(),n.offset()+r).toRange()),t.getSel().modify("move",e?"forward":"backward","word"),!0}function Oy(e,t){var n=e.dom.createRng();n.setStart(t.container(),t.offset()),n.setEnd(t.container(),t.offset()),e.selection.setRng(n)}function Hy(e){return!1!==e.settings.inline_boundaries}function Py(e,t){e?t.setAttribute("data-mce-selected","inline-boundary"):t.removeAttribute("data-mce-selected")}function Ly(t,e,n){return $y(e,n).map(function(e){return Oy(t,e),n})}function Vy(e,t,n){return function(){return!!Hy(t)&&tb(e,t)}}var Iy,Fy,Uy=Ge.isText,jy=d(my,!0),qy=d(my,!1),$y=function(n,e){return e.fold(function(e){qs.remove(n.get());var t=jy(e);return n.set(t),k.some(Ds(t,t.length-1))},function(e){return Pc.firstPositionIn(e).map(function(e){if(py(e,n))return Ds(n.get(),1);qs.remove(n.get());var t=gy(e,!0);return n.set(t),Ds(t,1)})},function(e){return Pc.lastPositionIn(e).map(function(e){if(py(e,n))return Ds(n.get(),n.get().length-1);qs.remove(n.get());var t=gy(e,!1);return n.set(t),Ds(t,t.length-1)})},function(e){qs.remove(n.get());var t=qy(e);return n.set(t),k.some(Ds(t,1))})},Wy=/[\u0591-\u07FF\uFB1D-\uFDFF\uFE70-\uFEFC]/,Ky={isInlineTarget:function(e,t){return we(yt.fromDom(t),If(e))},findRootInline:function(e,t,n){var r=function(e,t,n){return y(Xi.DOM.getParents(n.container(),"*",t),e)}(e,t,n);return k.from(r[r.length-1])},isRtl:function(e){return"rtl"===Xi.DOM.getStyle(e,"direction",!0)||function(e){return Wy.test(e)}(e.textContent)},isAtZwsp:function(e){return Ba(e)||Oa(e)},normalizePosition:vy,normalizeForwards:d(vy,!0),normalizeBackwards:d(vy,!1),hasSameParentBlock:function(e,t,n){var r=bs(t,e),o=bs(n,e);return r&&r===o}},Xy=function(e,t){for(var n=0;n<e.length;n++){var r=e[n].apply(null,t);if(r.isSome())return r}return k.none()},Yy=jf([{before:["element"]},{start:["element"]},{end:["element"]},{after:["element"]}]),Gy=function(e){return e.fold(W,W,W,W)},Jy=Sy,Qy=Dy,Zy=(d(Dy,!1),d(Dy,!0),Ty),eb=function(e){return e.fold(Yy.start,Yy.start,Yy.end,Yy.end)},tb=function(e,t){var n=t.selection.getRng(),r=e?Ds.fromRangeEnd(n):Ds.fromRangeStart(n);return!!_y(t)&&(e&&Ba(r)?By(!0,t.selection,r):!(e||!Oa(r))&&By(!1,t.selection,r))},nb={move:function(e,t,n){return function(){return!!Hy(e)&&function(t,n,e){var r=t.getBody(),o=Ds.fromRangeStart(t.selection.getRng()),i=d(Ky.isInlineTarget,t);return Qy(e,i,r,o).bind(function(e){return Ly(t,n,e)})}(e,t,n).isSome()}},moveNextWord:d(Vy,!0),movePrevWord:d(Vy,!1),setupSelectedState:function(t){var n=Je(null),r=d(Ky.isInlineTarget,t);return t.on("NodeChange",function(e){Hy(t)&&(function(e,t,n){var r=y(t.select('*[data-mce-selected="inline-boundary"]'),e),o=y(n,e);z(x(r,o),d(Py,!1)),z(x(o,r),d(Py,!0))}(r,t.dom,e.parents),function(e,t){if(e.selection.isCollapsed()&&!0!==e.composing&&t.get()){var n=Ds.fromRangeStart(e.selection.getRng());Ds.isTextPosition(n)&&!1===Ky.isAtZwsp(n)&&(Oy(e,qs.removeAndReposition(t.get(),n)),t.set(null))}}(t,n),function(n,r,o,e){if(r.selection.isCollapsed()){var t=y(e,n);z(t,function(e){var t=Ds.fromRangeStart(r.selection.getRng());Jy(n,r.getBody(),t).bind(function(e){return Ly(r,o,e)})})}}(r,t,n,e.parents))}),n},setCaretPosition:Oy};(Fy=Iy=Iy||{})[Fy.Br=0]="Br",Fy[Fy.Block=1]="Block",Fy[Fy.Wrap=2]="Wrap",Fy[Fy.Eol=3]="Eol";function rb(e,t){return e===Ms.Backwards?t.reverse():t}function ob(e,t,n,r){for(var o,i,a,u,s,c,l=rc(n),f=r,d=[];f&&(s=l,c=f,o=t===Ms.Forwards?s.next(c):s.prev(c));){if(Ge.isBr(o.getNode(!1)))return t===Ms.Forwards?{positions:rb(t,d).concat([o]),breakType:Iy.Br,breakAt:k.some(o)}:{positions:rb(t,d),breakType:Iy.Br,breakAt:k.some(o)};if(o.isVisible()){if(e(f,o)){var h=(i=t,a=f,u=o,Ge.isBr(u.getNode(i===Ms.Forwards))?Iy.Br:!1===Cs(a,u)?Iy.Block:Iy.Wrap);return{positions:rb(t,d),breakType:h,breakAt:k.some(o)}}d.push(o),f=o}else f=o}return{positions:rb(t,d),breakType:Iy.Eol,breakAt:k.none()}}function ib(n,r,o,e){return r(o,e).breakAt.map(function(e){var t=r(o,e).positions;return n===Ms.Backwards?t.concat(e):[e].concat(t)}).getOr([])}function ab(e,i){return b(e,function(e,o){return e.fold(function(){return k.some(o)},function(r){return Ya(E(r.getClientRects()),E(o.getClientRects()),function(e,t){var n=Math.abs(i-e.left);return Math.abs(i-t.left)<=n?o:r}).or(e)})},k.none())}function ub(t,e){return E(e.getClientRects()).bind(function(e){return ab(t,e.left)})}function sb(e,t,n,r){var o=e===Ms.Forwards,i=o?Ph:Lh;if(!r.collapsed){var a=bx(r);if(yx(a))return Zh(e,t,a,e===Ms.Backwards,!0)}var u=function(e){return Ma(e.startContainer)}(r),s=Ss(e,t.getBody(),r);if(i(s))return em(t,s.getNode(!o));var c=Ky.normalizePosition(o,n(s));if(!c)return u?r:null;if(i(c))return Zh(e,t,c.getNode(!o),o,!0);var l=n(c);return l&&i(l)&&As(c,l)?Zh(e,t,l.getNode(!o),o,!0):u?nm(t,c.toRange(),!0):null}function cb(e,t,n,r){var o,i,a,u,s,c,l,f,d;if(d=bx(r),o=Ss(e,t.getBody(),r),i=n(t.getBody(),Ih(1),o),a=y(i,Fh(1)),s=kn.last(o.getClientRects()),(Ph(o)||Oh(o))&&(d=o.getNode()),(Lh(o)||Hh(o))&&(d=o.getNode(!0)),!s)return null;if(c=s.left,(u=$h(a,c))&&yx(u.node))return l=Math.abs(c-u.left),f=Math.abs(c-u.right),Zh(e,t,u.node,l<f,!0);if(d){var h=function(e,t,n,r){function o(e){return kn.last(e.getClientRects())}var i,a,u,s,c,l,f=rc(t),d=[],h=0;l=o(s=1===e?(i=f.next,a=qa,u=ja,Ds.after(r)):(i=f.prev,a=ja,u=qa,Ds.before(r)));do{if(s.isVisible()&&!u(c=o(s),l)){if(0<d.length&&a(c,kn.last(d))&&h++,(c=Ia(c)).position=s,c.line=h,n(c))return d;d.push(c)}}while(s=i(s));return d}(e,t.getBody(),Ih(1),d);if(u=$h(y(h,Fh(1)),c))return nm(t,u.position.toRange(),!0);if(u=kn.last(y(h,Fh(0))))return nm(t,u.position.toRange(),!0)}}function lb(e,t,n){var r,o,i=rc(e.getBody()),a=d(Ts,i.next),u=d(Ts,i.prev);if(n.collapsed&&e.settings.forced_root_block){if(!(r=e.dom.getParent(n.startContainer,"PRE")))return;(1===t?a(Ds.fromRangeStart(n)):u(Ds.fromRangeStart(n)))||(o=function(e){var t=e.dom.create(mf(e));return(!Nn.ie||11<=Nn.ie)&&(t.innerHTML='<br data-mce-bogus="1">'),t}(e),1===t?e.$(r).after(o):e.$(r).before(o),e.selection.select(o,!0),e.selection.collapse())}}function fb(t,n){return function(){var e=function(e,t){var n,r=rc(e.getBody()),o=d(Ts,r.next),i=d(Ts,r.prev),a=t?Ms.Forwards:Ms.Backwards,u=t?o:i,s=e.selection.getRng();return(n=sb(a,e,u,s))?n:(n=lb(e,a,s))||null}(t,n);return!!e&&(t.selection.setRng(e),!0)}}function db(t,n){return function(){var e=function(e,t){var n,r=t?1:-1,o=t?Xm:Km,i=e.selection.getRng();return(n=cb(r,e,o,i))?n:(n=lb(e,r,i))||null}(t,n);return!!e&&(t.selection.setRng(e),!0)}}function hb(n,r){return function(){var e=r?Ds.fromRangeEnd(n.selection.getRng()):Ds.fromRangeStart(n.selection.getRng()),t=r?gx(n.getBody(),e):mx(n.getBody(),e);return(r?N(t.positions):E(t.positions)).filter(function(t){return function(e){return t?Lh(e):Ph(e)}}(r)).fold($(!1),function(e){return n.selection.setRng(e.toRange()),!0})}}function mb(e,t,n,r,o){var i=ma(yt.fromDom(n),"td,th,caption").map(function(e){return e.dom()});return function(e,o,i){return b(e,function(e,r){return e.fold(function(){return k.some(r)},function(e){var t=Math.sqrt(Math.abs(e.x-o)+Math.abs(e.y-i)),n=Math.sqrt(Math.abs(r.x-o)+Math.abs(r.y-i));return k.some(n<t?r:e)})},k.none())}(y(function(n,e){return v(e,function(e){var t=function(e,t){return{left:e.left-t,top:e.top-t,right:e.right+2*t,bottom:e.bottom+2*t,width:e.width+t,height:e.height+t}}(Ia(e.getBoundingClientRect()),-1);return[{x:t.left,y:n(t),cell:e},{x:t.right,y:n(t),cell:e}]})}(e,i),function(e){return t(e,o)}),r,o).map(function(e){return e.cell})}function gb(t,n){return E(n.getClientRects()).bind(function(e){return Cx(t,e.left,e.top)}).bind(function(e){return ub(function(t){return Pc.lastPositionIn(t).map(function(e){return mx(t,e).positions.concat(e)}).getOr([])}(e),n)})}function pb(t,n){return N(n.getClientRects()).bind(function(e){return wx(t,e.left,e.top)}).bind(function(e){return ub(function(t){return Pc.firstPositionIn(t).map(function(e){return[e].concat(gx(t,e).positions)}).getOr([])}(e),n)})}function vb(e,t){e.selection.setRng(t),qv(e,t)}function yb(e,t,n){var r=e(t,n);return function(e){return e.breakType===Iy.Wrap&&0===e.positions.length}(r)||!Ge.isBr(n.getNode())&&function(e){return e.breakType===Iy.Br&&1===e.positions.length}(r)?!function(t,n,e){return e.breakAt.map(function(e){return t(n,e).breakAt.isSome()}).getOr(!1)}(e,t,r):r.breakAt.isNone()}function bb(e,t,n,r){var o=e.selection.getRng(),i=t?1:-1;if(hs()&&function(e,t,n){var r=Ds.fromRangeStart(t);return Pc.positionIn(!e,n).map(function(e){return e.isEqual(r)}).getOr(!1)}(t,o,n)){var a=Zh(i,e,n,!t,!0);return vb(e,a),!0}return!1}function Cb(e,t){var n=t.getNode(e);return Ge.isElement(n)&&"TABLE"===n.nodeName?k.some(n):k.none()}function wb(n,r,o){var e=Cb(!!r,o),i=!1===r;e.fold(function(){return vb(n,o.toRange())},function(t){return Pc.positionIn(i,n.getBody()).filter(function(e){return e.isEqual(o)}).fold(function(){return vb(n,o.toRange())},function(e){return function(n,r,o,e){var i=mf(r);i?r.undoManager.transact(function(){var e=yt.fromTag(i);me(e,gf(r)),Di(e,yt.fromTag("br")),n?wi(yt.fromDom(o),e):Ci(yt.fromDom(o),e);var t=r.dom.createRng();t.setStart(e.dom(),0),t.setEnd(e.dom(),0),vb(r,t)}):vb(r,e.toRange())}(r,n,t,o)})})}function xb(e,t,n,r){var o=e.selection.getRng(),i=Ds.fromRangeStart(o),a=e.getBody();if(!t&&xx(r,i)){var u=function(t,n,e){return gb(n,e).orThunk(function(){return E(e.getClientRects()).bind(function(e){return ab(px(t,Ds.before(n)),e.left)})}).getOr(Ds.before(n))}(a,n,i);return wb(e,t,u),!0}if(t&&zx(r,i)){u=function(t,n,e){return pb(n,e).orThunk(function(){return E(e.getClientRects()).bind(function(e){return ab(vx(t,Ds.after(n)),e.left)})}).getOr(Ds.after(n))}(a,n,i);return wb(e,t,u),!0}return!1}function zb(t,n){return function(){return k.from(t.dom.getParent(t.selection.getNode(),"td,th")).bind(function(e){return k.from(t.dom.getParent(e,"table")).map(function(e){return bb(t,n,e)})}).getOr(!1)}}function Eb(n,r){return function(){return k.from(n.dom.getParent(n.selection.getNode(),"td,th")).bind(function(t){return k.from(n.dom.getParent(t,"table")).map(function(e){return xb(n,r,e,t)})}).getOr(!1)}}function Nb(e){return h(["figcaption"],ie(e))}function Sb(e){var t=j.document.createRange();return t.setStartBefore(e.dom()),t.setEndBefore(e.dom()),t}function kb(e,t,n){n?Di(e,t):xi(e,t)}function Tb(e,t,n,r){return""===t?function(e,t){var n=yt.fromTag("br");return kb(e,n,t),Sb(n)}(e,r):function(e,t,n,r){var o=yt.fromTag(n),i=yt.fromTag("br");return me(o,r),Di(o,i),kb(e,o,t),Sb(i)}(e,r,t,n)}function Ab(e,t,n){return t?function(e,t){return gx(e,t).breakAt.isNone()}(e.dom(),n):function(e,t){return mx(e,t).breakAt.isNone()}(e.dom(),n)}function Mb(t,n){var r=yt.fromDom(t.getBody()),o=Ds.fromRangeStart(t.selection.getRng()),i=mf(t),a=gf(t);return function(e,t){var n=d(ze,t);return ba(yt.fromDom(e.container()),Vn,n).filter(Nb)}(o,r).exists(function(){if(Ab(r,n,o)){var e=Tb(r,i,a,n);return t.selection.setRng(e),!0}return!1})}function Rb(e,t){return function(){return!!e.selection.isCollapsed()&&Mb(e,t)}}function Db(e,t){return v(function(e){return X(e,function(e){return bd({shiftKey:!1,altKey:!1,ctrlKey:!1,metaKey:!1,keyCode:0,action:i},e)})}(e),function(e){return function(e,t){return t.keyCode===e.keyCode&&t.shiftKey===e.shiftKey&&t.altKey===e.altKey&&t.ctrlKey===e.ctrlKey&&t.metaKey===e.metaKey}(e,t)?[e]:[]})}function _b(e,t){return{from:$(e),to:$(t)}}function Bb(e,t){var n=yt.fromDom(e),r=yt.fromDom(t.container());return kx(n,r).map(function(e){return function(e,t){return{block:$(e),position:$(t)}}(e,t)})}function Ob(t,n,e){var r=Bb(t,Ds.fromRangeStart(e)),o=r.bind(function(e){return Pc.fromPosition(n,t,e.position()).bind(function(e){return Bb(t,e).map(function(e){return function(t,n,r){return Ge.isBr(r.position().getNode())&&!1===kg(r.block())?Pc.positionIn(!1,r.block().dom()).bind(function(e){return e.isEqual(r.position())?Pc.fromPosition(n,t,e).bind(function(e){return Bb(t,e)}):k.some(r)}).getOr(r):r}(t,n,e)})})});return Ya(r,o,_b).filter(function(e){return function(e){return!1===ze(e.from().block(),e.to().block())}(e)&&function(e){return Se(e.from().block()).bind(function(t){return Se(e.to().block()).filter(function(e){return ze(t,e)})}).isSome()}(e)&&function(e){return!1===Ge.isContentEditableFalse(e.from().block().dom())&&!1===Ge.isContentEditableFalse(e.to().block().dom())}(e)})}function Hb(e){var t=function(e){var t=Re(e);return p(t,Vn).fold(function(){return t},function(e){return t.slice(0,e)})}(e);return z(t,_i),t}function Pb(e,t){var n=fh(t,e);return g(n.reverse(),kg).each(_i)}function Lb(e,t,n,r){if(kg(n))return bg(n),Pc.firstPositionIn(n.dom());(function(e){return 0===y(Ae(e),function(e){return!kg(e)}).length})(r)&&kg(t)&&Ci(r,yt.fromTag("br"));var o=Pc.prevPosition(n.dom(),Ds.before(r.dom()));return z(Hb(t),function(e){Ci(r,e)}),Pb(e,t),o}function Vb(e,t,n){if(kg(n))return _i(n),kg(t)&&bg(t),Pc.firstPositionIn(t.dom());var r=Pc.lastPositionIn(n.dom());return z(Hb(t),function(e){Di(n,e)}),Pb(e,t),r}function Ib(e,t){return Bt(t,e)?function(e,t){var n=fh(t,e);return k.from(n[n.length-1])}(t,e):k.none()}function Fb(e,t){Pc.positionIn(e,t.dom()).map(function(e){return e.getNode()}).map(yt.fromDom).filter(_n).each(_i)}function Ub(e,t,n){return Fb(!0,t),Fb(!1,n),Ib(t,n).fold(d(Vb,e,t,n),d(Lb,e,t,n))}function jb(e,t){var n=yt.fromDom(t),r=d(ze,e);return ya(n,$n,r).isSome()}function qb(e,t){var n=Pc.prevPosition(e.dom(),Ds.fromRangeStart(t)).isNone(),r=Pc.nextPosition(e.dom(),Ds.fromRangeEnd(t)).isNone();return!function(e,t){return jb(e,t.startContainer)||jb(e,t.endContainer)}(e,t)&&n&&r}function $b(e){var t=yt.fromDom(e.getBody()),n=e.selection.getRng();return qb(t,n)?function(e){return e.setContent(""),e.selection.setCursorLocation(),!0}(e):function(n,r){var o=r.getRng();return Ya(kx(n,yt.fromDom(o.startContainer)),kx(n,yt.fromDom(o.endContainer)),function(e,t){return!1===ze(e,t)&&(o.deleteContents(),Rx(n,!0,e,t).each(function(e){r.setRng(e.toRange())}),!0)}).getOr(!1)}(t,e.selection)}function Wb(e){return ks(e).exists(_n)}function Kb(e,t,n){var r=y(fh(yt.fromDom(n.container()),t),Vn),o=E(r).getOr(t);return Pc.fromPosition(e,o.dom(),n).filter(Wb)}function Xb(e,t){return ks(t).exists(_n)||Kb(!0,e,t).isSome()}function Yb(e,t){return function(e){return k.from(e.getNode(!0)).map(yt.fromDom)}(t).exists(_n)||Kb(!1,e,t).isSome()}function Gb(e,t,n,r){var o=r.getNode(!1===t);return kx(yt.fromDom(e),yt.fromDom(n.getNode())).map(function(e){return kg(e)?Hx.remove(e.dom()):Hx.moveToElement(o)}).orThunk(function(){return k.some(Hx.moveToElement(o))})}function Jb(t,n,r){return Pc.fromPosition(n,t,r).bind(function(e){return function(e){return $n(yt.fromDom(e))||Un(yt.fromDom(e))}(e.getNode())?k.none():function(t,e,n,r){function o(e){return Dn(yt.fromDom(e))&&!Cs(n,r,t)}return Ns(!e,n).fold(function(){return Ns(e,r).fold($(!1),o)},o)}(t,n,r,e)?k.none():n&&Ge.isContentEditableFalse(e.getNode())?Gb(t,n,r,e):!1===n&&Ge.isContentEditableFalse(e.getNode(!0))?Gb(t,n,r,e):n&&Lh(r)?k.some(Hx.moveToPosition(e)):!1===n&&Ph(r)?k.some(Hx.moveToPosition(e)):k.none()})}function Qb(t,e,n){return function(e,t){var n=t.getNode(!1===e),r=e?"after":"before";return Ge.isElement(n)&&n.getAttribute("data-mce-caret")===r}(e,n)?function(e,t){return e&&Ge.isContentEditableFalse(t.nextSibling)?k.some(Hx.moveToElement(t.nextSibling)):!1===e&&Ge.isContentEditableFalse(t.previousSibling)?k.some(Hx.moveToElement(t.previousSibling)):k.none()}(e,n.getNode(!1===e)).fold(function(){return Jb(t,e,n)},k.some):Jb(t,e,n).bind(function(e){return function(t,n,e){return e.fold(function(e){return k.some(Hx.remove(e))},function(e){return k.some(Hx.moveToElement(e))},function(e){return Cs(n,e,t)?k.none():k.some(Hx.moveToPosition(e))})}(t,n,e)})}function Zb(e,t){return k.from(Px(e.getBody(),t))}function eC(t,n){var e=t.selection.getNode();return Zb(t,e).filter(Ge.isContentEditableFalse).fold(function(){return function(e,t,n){var r=Es(t?1:-1,e,n),o=Ds.fromRangeStart(r),i=yt.fromDom(e);return!1===t&&Lh(o)?k.some(Hx.remove(o.getNode(!0))):t&&Ph(o)?k.some(Hx.remove(o.getNode())):!1===t&&Ph(o)&&Yb(i,o)?Bx(i,o).map(function(e){return Hx.remove(e.getNode())}):t&&Lh(o)&&Xb(i,o)?Ox(i,o).map(function(e){return Hx.remove(e.getNode())}):Qb(e,t,o)}(t.getBody(),n,t.selection.getRng()).map(function(e){return e.fold(function(t,n){return function(e){return t._selectionOverrides.hideFakeCaret(),Tg(t,n,yt.fromDom(e)),!0}}(t,n),function(n,r){return function(e){var t=r?Ds.before(e):Ds.after(e);return n.selection.setRng(t.toRange()),!0}}(t,n),function(t){return function(e){return t.selection.setRng(e.toRange()),!0}}(t))}).getOr(!1)},function(){return!0})}function tC(e,t){var n=e.selection.getNode();return!!Ge.isContentEditableFalse(n)&&Zb(e,n.parentNode).filter(Ge.isContentEditableFalse).fold(function(){return function(e){z(ma(e,".mce-offscreen-selection"),_i)}(yt.fromDom(e.getBody())),Tg(e,t,yt.fromDom(e.selection.getNode())),Tx(e),!0},function(){return!0})}function nC(e,t,n,r,o,i){var a=Zh(r,e,i.getNode(!o),o,!0);if(t.collapsed){var u=t.cloneRange();o?u.setEnd(a.startContainer,a.startOffset):u.setStart(a.endContainer,a.endOffset),u.deleteContents()}else t.deleteContents();return e.selection.setRng(a),function(e,t){Ge.isText(t)&&0===t.data.length&&e.remove(t)}(e.dom,n),!0}function rC(t,n){return function(e){return $y(n,e).map(function(e){return nb.setCaretPosition(t,e),!0}).getOr(!1)}}function oC(e,t,n,r){var o=e.getBody(),i=d(Ky.isInlineTarget,e);e.undoManager.ignore(function(){e.selection.setRng(function(e,t){var n=j.document.createRange();return n.setStart(e.container(),e.offset()),n.setEnd(t.container(),t.offset()),n}(n,r)),e.execCommand("Delete"),Jy(i,o,Ds.fromRangeStart(e.selection.getRng())).map(eb).map(rC(e,t))}),e.nodeChanged()}function iC(n,r,o,i){var a=function(e,t){var n=bs(t,e);return n||e}(n.getBody(),i.container()),u=d(Ky.isInlineTarget,n),s=Jy(u,a,i);return s.bind(function(e){return o?e.fold($(k.some(eb(e))),k.none,$(k.some(Zy(e))),k.none):e.fold(k.none,$(k.some(Zy(e))),k.none,$(k.some(eb(e))))}).map(rC(n,r)).getOrThunk(function(){var t=Pc.navigate(o,a,i),e=t.bind(function(e){return Jy(u,a,e)});return s.isSome()&&e.isSome()?Ky.findRootInline(u,a,i).map(function(e){return!!function(o){return Ya(Pc.firstPositionIn(o),Pc.lastPositionIn(o),function(e,t){var n=Ky.normalizePosition(!0,e),r=Ky.normalizePosition(!1,t);return Pc.nextPosition(o,n).map(function(e){return e.isEqual(r)}).getOr(!0)}).getOr(!0)}(e)&&(Tg(n,o,yt.fromDom(e)),!0)}).getOr(!1):e.bind(function(e){return t.map(function(e){return o?oC(n,r,i,e):oC(n,r,e,i),!0})}).getOr(!1)})}function aC(e){return 1===Re(e).length}function uC(e,t,n,r){var o=d(qm,t),i=X(y(r,o),function(e){return e.dom()});if(0===i.length)Tg(t,e,n);else{var a=function(e,t){var n=Pm(!1),r=Um(t,n.dom());return Ci(yt.fromDom(e),n),_i(yt.fromDom(e)),Ds(r,0)}(n.dom(),i);t.selection.setRng(a.toRange())}}function sC(n,r){var e=yt.fromDom(n.getBody()),t=yt.fromDom(n.selection.getStart()),o=y(function(e,t){var n=fh(t,e);return p(n,Vn).fold($(n),function(e){return n.slice(0,e)})}(e,t),aC);return N(o).map(function(e){var t=Ds.fromRangeStart(n.selection.getRng());return!(!Ax(r,t,e.dom())||function(e){return rs(e.dom())&&Om(e.dom())}(e))&&(uC(r,n,e,o),!0)}).getOr(!1)}function cC(e,t){return{start:$(e),end:$(t)}}function lC(e,t){return xa(yt.fromDom(e),"td,th",t)}function fC(e,t){return Ca(e,"table",t)}function dC(e){return!1===ze(e.start(),e.end())}function hC(e,n){return fC(e.start(),n).bind(function(t){return fC(e.end(),n).bind(function(e){return function(e,t){return e?k.some(t):k.none()}(ze(t,e),t)})})}function mC(e){return ma(e,"td,th")}function gC(n,e){var t=lC(e.startContainer,n),r=lC(e.endContainer,n);return e.collapsed?k.none():Ya(t,r,cC).fold(function(){return t.fold(function(){return r.bind(function(t){return fC(t,n).bind(function(e){return E(mC(e)).map(function(e){return cC(e,t)})})})},function(t){return fC(t,n).bind(function(e){return N(mC(e)).map(function(e){return cC(t,e)})})})},function(e){return qx(n,e)?k.none():function(t,e){return fC(t.start(),e).bind(function(e){return N(mC(e)).map(function(e){return cC(t.start(),e)})})}(e,n)})}function pC(t,e){return hC(t,e).map(function(e){return function(e,t,n){return{rng:$(e),table:$(t),cells:$(n)}}(t,e,mC(e))})}function vC(e,t){var n=function(t){return function(e){return ze(t,e)}}(e);return function(e,t){var n=lC(e.startContainer,t),r=lC(e.endContainer,t);return Ya(n,r,cC).filter(dC).filter(function(e){return qx(t,e)}).orThunk(function(){return gC(t,e)})}(t,n).bind(function(e){return pC(e,n)})}function yC(e,t){return p(e,function(e){return ze(e,t)})}function bC(n){return function(n){return Ya(yC(n.cells(),n.rng().start()),yC(n.cells(),n.rng().end()),function(e,t){return n.cells().slice(e,t+1)})}(n).map(function(e){var t=n.cells();return e.length===t.length?jx.removeTable(n.table()):jx.emptyCells(e)})}function CC(e,t){return z(t,bg),e.selection.setCursorLocation(t[0].dom(),0),!0}function wC(e,t){return Tg(e,!1,t),!0}function xC(t,e,n){return function(e,t){return vC(e,t).bind(bC)}(e,n).map(function(e){return e.fold(d(wC,t),d(CC,t))})}function zC(t,e,n,r){return $x(e,r).fold(function(){return xC(t,e,n)},function(e){return function(e,t){return Wx(e,t)}(t,e)}).getOr(!1)}function EC(e,t){return g(fh(t,e),$n)}function NC(t,n,r,o,i){return Pc.navigate(r,t.getBody(),i).bind(function(e){return function(e,n,r,o){return Pc.firstPositionIn(e.dom()).bind(function(t){return Pc.lastPositionIn(e.dom()).map(function(e){return n?r.isEqual(t)&&o.isEqual(e):r.isEqual(e)&&o.isEqual(t)})}).getOr(!0)}(o,r,i,e)?function(e,t){return Wx(e,t)}(t,o):function(e,t,n){return $x(e,yt.fromDom(n.getNode())).map(function(e){return!1===ze(e,t)})}(n,o,e)}).or(k.some(!0))}function SC(t,n,r,e){var o=Ds.fromRangeStart(t.selection.getRng());return EC(r,e).bind(function(e){return kg(e)?Wx(t,e):function(e,t,n,r,o){return Pc.navigate(n,e.getBody(),o).bind(function(e){return EC(t,yt.fromDom(e.getNode())).map(function(e){return!1===ze(e,r)})})}(t,r,n,e,o)}).getOr(!1)}function kC(e,t){return e?Oh(t):Hh(t)}function TC(t,n,e){var r=yt.fromDom(t.getBody());return $x(r,e).fold(function(){return SC(t,n,r,e)||function(e,t){var n=Ds.fromRangeStart(e.selection.getRng());return kC(t,n)||Pc.fromPosition(t,e.getBody(),n).map(function(e){return kC(t,e)}).getOr(!1)}(t,n)},function(e){return function(e,t,n,r){var o=Ds.fromRangeStart(e.selection.getRng());return kg(r)?Wx(e,r):NC(e,n,t,r,o)}(t,n,r,e).getOr(!1)})}function AC(e){var t=parseInt(e,10);return isNaN(t)?0:t}function MC(e,t){return(e||function(e){return"table"===ie(e)}(t)?"margin":"padding")+("rtl"===ve(t,"direction")?"-right":"-left")}function RC(e){var t=Yx(e);return!0!==e.readonly&&(1<t.length||function(r,e){return w(e,function(e){var t=MC(Hf(r),e),n=ye(e,t).map(AC).getOr(0);return"false"!==r.dom.getContentEditable(e.dom())&&0<n})}(e,t))}function DC(e){return Fn(e)||Un(e)}function _C(e,t){var n=e.dom,r=e.selection,o=e.formatter,i=Pf(e),a=/[a-z%]+$/i.exec(i)[0],u=parseInt(i,10),s=Hf(e),c=mf(e);e.queryCommandState("InsertUnorderedList")||e.queryCommandState("InsertOrderedList")||""!==c||n.getParent(r.getNode(),n.isBlock)||o.apply("div"),z(Yx(e),function(e){!function(e,t,n,r,o,i){var a=MC(n,yt.fromDom(i));if("outdent"===t){var u=Math.max(0,AC(i.style[a])-r);e.setStyle(i,a,u?u+o:"")}else{u=AC(i.style[a])+r+o;e.setStyle(i,a,u)}}(n,t,s,u,a,e.dom())})}function BC(e,t,n){return Pc.navigateIgnore(e,t,n,wh)}function OC(e,t){return g(fh(yt.fromDom(t.container()),e),Vn)}function HC(e,n,r){return BC(e,n.dom(),r).forall(function(t){return OC(n,r).fold(function(){return!1===Cs(t,r,n.dom())},function(e){return!1===Cs(t,r,n.dom())&&Bt(e,yt.fromDom(t.container()))})})}function PC(t,n,r){return OC(n,r).fold(function(){return BC(t,n.dom(),r).forall(function(e){return!1===Cs(e,r,n.dom())})},function(e){return BC(t,e.dom(),r).isNone()})}function LC(e){return k.from(e.dom.getParent(e.selection.getStart(!0),e.dom.isBlock))}function VC(e,t){return e&&e.parentNode&&e.parentNode.nodeName===t}function IC(e){return e&&/^(OL|UL|LI)$/.test(e.nodeName)}function FC(e){var t=e.parentNode;return/^(LI|DT|DD)$/.test(t.nodeName)?t:e}function UC(e,t,n){for(var r=e[n?"firstChild":"lastChild"];r&&!Ge.isElement(r);)r=r[n?"nextSibling":"previousSibling"];return r===t}function jC(e){e.innerHTML='<br data-mce-bogus="1">'}function qC(e,t){return e.nodeName===t||e.previousSibling&&e.previousSibling.nodeName===t}function $C(e,t){return t&&e.isBlock(t)&&!/^(TD|TH|CAPTION|FORM)$/.test(t.nodeName)&&!/^(fixed|absolute)/i.test(t.style.position)&&"true"!==e.getContentEditable(t)}function WC(e,t,n){return!1===Ge.isText(t)?n:e?1===n&&t.data.charAt(n-1)===cu?0:n:n===t.data.length-1&&t.data.charAt(n)===cu?t.data.length:n}function KC(e,t){var n,r,o=e.getRoot();for(n=t;n!==o&&"false"!==e.getContentEditable(n);)"true"===e.getContentEditable(n)&&(r=n),n=n.parentNode;return n!==o?r:o}function XC(e,t){var n=mf(e);n&&n.toLowerCase()===t.tagName.toLowerCase()&&e.dom.setAttribs(t,gf(e))}function YC(e,t,n){var r=e.create("span",{},"&nbsp;");n.parentNode.insertBefore(r,n),t.scrollIntoView(r),e.remove(r)}function GC(e,t,n,r){var o=e.createRng();r?(o.setStartBefore(n),o.setEndBefore(n)):(o.setStartAfter(n),o.setEndAfter(n)),t.setRng(o)}function JC(e,t){var n,r,o=e.selection,i=e.dom,a=o.getRng();ay(i,a).each(function(e){a.setStart(e.startContainer,e.startOffset),a.setEnd(e.endContainer,e.endOffset)});var u=a.startOffset,s=a.startContainer;if(1===s.nodeType&&s.hasChildNodes()){var c=u>s.childNodes.length-1;s=s.childNodes[Math.min(u,s.childNodes.length-1)]||s,u=c&&3===s.nodeType?s.nodeValue.length:0}var l=i.getParent(s,i.isBlock),f=l?i.getParent(l.parentNode,i.isBlock):null,d=f?f.nodeName.toUpperCase():"",h=!(!t||!t.ctrlKey);"LI"!==d||h||(l=f),s&&3===s.nodeType&&u>=s.nodeValue.length&&!function(e,t,n){for(var r,o=new yi(t,n),i=e.getNonEmptyElements();r=o.next();)if(i[r.nodeName.toLowerCase()]||0<r.length)return!0}(e.schema,s,l)&&(n=i.create("br"),a.insertNode(n),a.setStartAfter(n),a.setEndAfter(n),r=!0),n=i.create("br"),Xu(i,a,n),YC(i,o,n),GC(i,o,n,r),e.undoManager.add()}function QC(e,t){var n=yt.fromTag("br");Ci(yt.fromDom(t),n),e.undoManager.add()}function ZC(e,t){cz(e.getBody(),t)||wi(yt.fromDom(t),yt.fromTag("br"));var n=yt.fromTag("br");wi(yt.fromDom(t),n),YC(e.dom,e.selection,n.dom()),GC(e.dom,e.selection,n.dom(),!1),e.undoManager.add()}function ew(e){return e&&"A"===e.nodeName&&"href"in e}function tw(e){return e.fold($(!1),ew,ew,$(!1))}function nw(e,t){t.fold(i,d(QC,e),d(ZC,e),i)}function rw(e,t){return oz(e).filter(function(e){return 0<t.length&&we(yt.fromDom(e),t)}).isSome()}function ow(e,t){return dz(e)}function iw(n){return function(e,t){return""===mf(e)===n}}function aw(n){return function(e,t){return az(e)===n}}function uw(n,r){return function(e,t){return iz(e)===n.toUpperCase()===r}}function sw(e){return uw("pre",e)}function cw(n){return function(e,t){return hf(e)===n}}function lw(e,t){return fz(e)}function fw(e,t){return t}function dw(e){var t=mf(e),n=rz(e.dom,e.selection.getStart());return n&&e.schema.isValidChild(n.nodeName,t||"P")}function hw(e,t){return function(n,r){return b(e,function(e,t){return e&&t(n,r)},!0)?k.some(t):k.none()}}function mw(n,r){var e=r.container(),t=r.offset();return Ge.isText(e)?(e.insertData(t,n),k.some(Uu(e,t+n.length))):ks(r).map(function(e){var t=yt.fromText(n);return r.isAtEnd()?wi(e,t):Ci(e,t),Uu(t.dom(),n.length)})}function gw(e){return Uu.isTextPosition(e)&&!e.isAtStart()&&!e.isAtEnd()}function pw(e,t){var n=y(fh(yt.fromDom(t.container()),e),Vn);return E(n).getOr(e)}function vw(e,t){return gw(t)?Dh(t):Dh(t)||Pc.prevPosition(pw(e,t).dom(),t).exists(Dh)}function yw(e,t){return gw(t)?Rh(t):Rh(t)||Pc.nextPosition(pw(e,t).dom(),t).exists(Rh)}function bw(e){return ks(e).bind(function(e){return ba(e,xt)}).exists(function(e){return function(e){return h(["pre","pre-wrap"],e)}(ve(e,"white-space"))})}function Cw(e,t){return function(e,t){return Pc.prevPosition(e.dom(),t).isNone()}(e,t)||function(e,t){return Pc.nextPosition(e.dom(),t).isNone()}(e,t)||Gx(e,t)||Jx(e,t)||Yb(e,t)||Xb(e,t)}function ww(e,t){var n=function(e){var t=e.container(),n=e.offset();return Ge.isText(t)&&n<t.data.length?Uu(t,n+1):e}(t);return!bw(n)&&(Jx(e,n)||Zx(e,n)||Xb(e,n)||yw(e,n))}function xw(e,t){return function(e,t){return!bw(t)&&(Gx(e,t)||Qx(e,t)||Yb(e,t)||vw(e,t))}(e,t)||ww(e,t)}function zw(e,t){return Mh(e.charAt(t))}function Ew(e){var t=e.container();return Ge.isText(t)&&Z(t.data,"\xa0")}function Nw(e){var t=e.data,n=function(e){var n=e.split("");return X(n,function(e,t){return Mh(e)&&0<t&&t<n.length-1&&bh(n[t-1])&&bh(n[t+1])?" ":e}).join("")}(t);return n!==t&&(e.data=n,!0)}function Sw(n,e){return k.some(e).filter(Ew).bind(function(e){var t=e.container();return function(e,t){var n=t.data,r=Uu(t,0);return!(!zw(n,0)||xw(e,r))&&(t.data=" "+n.slice(1),!0)}(n,t)||Nw(t)||function(e,t){var n=t.data,r=Uu(t,n.length-1);return!(!zw(n,n.length-1)||xw(e,r))&&(t.data=n.slice(0,-1)+" ",!0)}(n,t)?k.some(e):k.none()})}function kw(t){var e=yt.fromDom(t.getBody());t.selection.isCollapsed()&&Sw(e,Uu.fromRangeStart(t.selection.getRng())).each(function(e){t.selection.setRng(e.toRange())})}function Tw(t,n){return function(e){return function(e,t){return!bw(t)&&(Cw(e,t)||vw(e,t)||yw(e,t))}(t,e)?vz(n):yz(n)}}function Aw(e){var t=Ds.fromRangeStart(e.selection.getRng()),n=yt.fromDom(e.getBody());if(e.selection.isCollapsed()){var r=d(Ky.isInlineTarget,e),o=Ds.fromRangeStart(e.selection.getRng());return Jy(r,e.getBody(),o).bind(function(t){return function(e){return e.fold(function(e){return Pc.prevPosition(t.dom(),Ds.before(e))},function(e){return Pc.firstPositionIn(e)},function(e){return Pc.lastPositionIn(e)},function(e){return Pc.nextPosition(t.dom(),Ds.after(e))})}}(n)).bind(Tw(n,t)).exists(function(t){return function(e){return t.selection.setRng(e.toRange()),t.nodeChanged(),!0}}(e))}return!1}function Mw(e,t){t.hasAttribute("data-mce-caret")&&(Pa(t),function(e){e.selection.setRng(e.selection.getRng())}(e),e.selection.scrollIntoView(t))}function Rw(e,t){var n=function(e){return wa(yt.fromDom(e.getBody()),"*[data-mce-caret]").fold($(null),function(e){return e.dom()})}(e);if(n)return"compositionstart"===t.type?(t.preventDefault(),t.stopPropagation(),void Mw(e,n)):void(_a(n)&&(Mw(e,n),e.undoManager.add()))}function Dw(t){!function(e){var t=aa(function(){e.composing||kw(e)},0);wz.isIE()&&(e.on("keypress",function(e){t.throttle()}),e.on("remove",function(e){t.cancel()}))}(t),t.on("input",function(e){!1===e.isComposing&&kw(t)})}function _w(a){function e(e,t){try{a.getDoc().execCommand(e,!1,t)}catch(n){}}function u(e){return e.isDefaultPrevented()}function t(){a.shortcuts.add("meta+a",null,"SelectAll")}function n(){a.on("keydown",function(e){if(!u(e)&&e.keyCode===i&&l.isCollapsed()&&0===l.getRng().startOffset){var t=l.getNode().previousSibling;if(t&&t.nodeName&&"table"===t.nodeName.toLowerCase())return e.preventDefault(),!1}})}function r(){a.inline||(a.contentStyles.push("body {min-height: 150px}"),a.on("click",function(e){var t;if("HTML"===e.target.nodeName){if(11<Nn.ie)return void a.getBody().focus();t=a.selection.getRng(),a.getBody().focus(),a.selection.setRng(t),a.selection.normalize(),a.nodeChanged()}}))}var o=Mn.each,i=Ah.BACKSPACE,s=Ah.DELETE,c=a.dom,l=a.selection,f=a.settings,d=a.parser,h=Nn.gecko,m=Nn.ie,g=Nn.webkit,p="data:text/mce-internal,",v=m?"Text":"URL";function y(e){var t=c.create("body"),n=e.cloneContents();return t.appendChild(n),l.serializer.serialize(t,{format:"html"})}function b(){var e=c.getAttribs(l.getStart().cloneNode(!1));return function(){var t=l.getStart();t!==a.getBody()&&(c.setAttrib(t,"style",null),o(e,function(e){t.setAttributeNode(e.cloneNode(!0))}))}}function C(){return!l.isCollapsed()&&c.getParent(l.getStart(),c.isBlock)!==c.getParent(l.getEnd(),c.isBlock)}return a.on("keydown",function(e){var t,n,r,o,i;if(!u(e)&&e.keyCode===Ah.BACKSPACE&&(n=(t=l.getRng()).startContainer,r=t.startOffset,o=c.getRoot(),i=n,t.collapsed&&0===r)){for(;i&&i.parentNode&&i.parentNode.firstChild===i&&i.parentNode!==o;)i=i.parentNode;"BLOCKQUOTE"===i.tagName&&(a.formatter.toggle("blockquote",null,i),(t=c.createRng()).setStart(n,0),t.setEnd(n,0),l.setRng(t))}}),a.on("keydown",function(e){var t,n,r=e.keyCode;if(!u(e)&&(r===s||r===i)){if(t=a.selection.isCollapsed(),n=a.getBody(),t&&!c.isEmpty(n))return;if(!t&&!function(e){var t=y(e),n=c.createRng();return n.selectNode(a.getBody()),t===y(n)}(a.selection.getRng()))return;e.preventDefault(),a.setContent(""),n.firstChild&&c.isBlock(n.firstChild)?a.selection.setCursorLocation(n.firstChild,0):a.selection.setCursorLocation(n,0),a.nodeChanged()}}),Nn.windowsPhone||a.on("keyup focusin mouseup",function(e){Ah.modifierPressed(e)||l.normalize()},!0),g&&(a.inline||c.bind(a.getDoc(),"mousedown mouseup",function(e){var t;if(e.target===a.getDoc().documentElement)if(t=l.getRng(),a.getBody().focus(),"mousedown"===e.type){if(Da(t.startContainer))return;l.placeCaretAt(e.clientX,e.clientY)}else l.setRng(t)}),a.on("click",function(e){var t=e.target;/^(IMG|HR)$/.test(t.nodeName)&&"false"!==c.getContentEditableParent(t)&&(e.preventDefault(),a.selection.select(t),a.nodeChanged()),"A"===t.nodeName&&c.hasClass(t,"mce-item-anchor")&&(e.preventDefault(),l.select(t))}),f.forced_root_block&&a.on("init",function(){e("DefaultParagraphSeparator",mf(a))}),a.on("init",function(){a.dom.bind(a.getBody(),"submit",function(e){e.preventDefault()})}),n(),d.addNodeFilter("br",function(e){for(var t=e.length;t--;)"Apple-interchange-newline"===e[t].attr("class")&&e[t].remove()}),Nn.iOS?(a.inline||a.on("keydown",function(){j.document.activeElement===j.document.body&&a.getWin().focus()}),r(),a.on("click",function(e){var t=e.target;do{if("A"===t.tagName)return void e.preventDefault()}while(t=t.parentNode)}),a.contentStyles.push(".mce-content-body {-webkit-touch-callout: none}")):t()),11<=Nn.ie&&(r(),n()),Nn.ie&&(t(),e("AutoUrlDetect",!1),a.on("dragstart",function(e){!function(e){var t,n;e.dataTransfer&&(a.selection.isCollapsed()&&"IMG"===e.target.tagName&&l.select(e.target),0<(t=a.selection.getContent()).length&&(n=p+escape(a.id)+","+escape(t),e.dataTransfer.setData(v,n)))}(e)}),a.on("drop",function(e){if(!u(e)){var t=function(e){var t;return e.dataTransfer&&(t=e.dataTransfer.getData(v))&&0<=t.indexOf(p)?(t=t.substr(p.length).split(","),{id:unescape(t[0]),html:unescape(t[1])}):null}(e);if(t&&t.id!==a.id){e.preventDefault();var n=$v(e.x,e.y,a.getDoc());l.setRng(n),function(e,t){a.queryCommandSupported("mceInsertClipboardContent")?a.execCommand("mceInsertClipboardContent",!1,{content:e,internal:t}):a.execCommand("mceInsertContent",!1,e)}(t.html,!0)}}})),h&&(a.on("keydown",function(e){if(!u(e)&&e.keyCode===i){if(!a.getBody().getElementsByTagName("hr").length)return;if(l.isCollapsed()&&0===l.getRng().startOffset){var t=l.getNode(),n=t.previousSibling;if("HR"===t.nodeName)return c.remove(t),void e.preventDefault();n&&n.nodeName&&"hr"===n.nodeName.toLowerCase()&&(c.remove(n),e.preventDefault())}}}),j.Range.prototype.getClientRects||a.on("mousedown",function(e){if(!u(e)&&"HTML"===e.target.nodeName){var t=a.getBody();t.blur(),pn.setEditorTimeout(a,function(){t.focus()})}}),a.on("keypress",function(e){var t;if(!u(e)&&(8===e.keyCode||46===e.keyCode)&&C())return t=b(),a.getDoc().execCommand("delete",!1,null),t(),e.preventDefault(),!1}),c.bind(a.getDoc(),"cut",function(e){var t;!u(e)&&C()&&(t=b(),pn.setEditorTimeout(a,function(){t()}))}),f.readonly||a.on("BeforeExecCommand mousedown",function(){e("StyleWithCSS",!1),e("enableInlineTableEditing",!1),f.object_resizing||e("enableObjectResizing",!1)}),a.on("SetContent ExecCommand",function(e){"setcontent"!==e.type&&"mceInsertLink"!==e.command||o(c.select("a"),function(e){var t=e.parentNode,n=c.getRoot();if(t.lastChild===e){for(;t&&!c.isBlock(t);){if(t.parentNode.lastChild!==t||t===n)return;t=t.parentNode}c.add(t,"br",{"data-mce-bogus":1})}})}),a.contentStyles.push("img:-moz-broken {-moz-force-broken-image-icon:1;min-width:24px;min-height:24px}"),Nn.mac&&a.on("keydown",function(e){!Ah.metaKeyPressed(e)||e.shiftKey||37!==e.keyCode&&39!==e.keyCode||(e.preventDefault(),a.selection.getSel().modify("move",37===e.keyCode?"backward":"forward","lineboundary"))}),n()),{refreshContentEditable:function(){},isHidden:function(){var e;return!(!h||a.removed)&&(!(e=a.selection.getSel())||!e.rangeCount||0===e.rangeCount)}}}function Bw(e){return Ge.isElement(e)&&In(yt.fromDom(e))}function Ow(t){t.on("click",function(e){3<=e.detail&&function(e){var t=e.selection.getRng(),n=Uu.fromRangeStart(t),r=Uu.fromRangeEnd(t);if(Uu.isElementPosition(n)){var o=n.container();Bw(o)&&Pc.firstPositionIn(o).each(function(e){return t.setStart(e.container(),e.offset())})}if(Uu.isElementPosition(r)){o=n.container();Bw(o)&&Pc.lastPositionIn(o).each(function(e){return t.setEnd(e.container(),e.offset())})}e.selection.setRng(fp(t))}(t)})}function Hw(e){!function(t){t.on("click",function(e){t.dom.getParent(e.target,"details")&&e.preventDefault()})}(e),function(e){e.parser.addNodeFilter("details",function(e){z(e,function(e){e.attr("data-mce-open",e.attr("open")),e.attr("open","open")})}),e.serializer.addNodeFilter("details",function(e){z(e,function(e){var t=e.attr("data-mce-open");e.attr("open",K(t)?t:null),e.attr("data-mce-open",null)})})}(e)}function Pw(e){e.bindPendingEventDelegates(),e.initialized=!0,e.fire("init"),e.focus(!0),e.nodeChanged({initial:!0}),e.execCallback("init_instance_callback",e),function(t){t.settings.auto_focus&&pn.setEditorTimeout(t,function(){var e;(e=!0===t.settings.auto_focus?t:t.editorManager.get(t.settings.auto_focus)).destroyed||e.focus()},100)}(e)}function Lw(e,t){var n=e.editorManager.translate("Rich Text Area. Press ALT-0 for help."),r=function(e,t,n,r){var o=yt.fromTag("iframe");return me(o,r),me(o,{id:e+"_ifr",frameBorder:"0",allowTransparency:"true",title:t}),fa(o,"tox-edit-area__iframe"),o}(e.id,n,t.height,uf(e)).dom();r.onload=function(){r.onload=null,e.fire("load")};var o=function(e,t){if(j.document.domain!==j.window.location.hostname&&Nn.browser.isIE()){var n=eh("mce");e[n]=function(){Nz(e)};var r='javascript:(function(){document.open();document.domain="'+j.document.domain+'";var ed = window.parent.tinymce.get("'+e.id+'");document.write(ed.iframeHTML);document.close();ed.'+n+"(true);})()";return Sz.setAttrib(t,"src",r),!0}return!1}(e,r);return e.contentAreaContainer=t.iframeContainer,e.iframeElement=r,e.iframeHTML=function(e){var t,n,r;return r=sf(e)+"<html><head>",cf(e)!==e.documentBaseUrl&&(r+='<base href="'+e.documentBaseURI.getURI()+'" />'),r+='<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />',t=lf(e),n=ff(e),df(e)&&(r+='<meta http-equiv="Content-Security-Policy" content="'+df(e)+'" />'),r+='</head><body id="'+t+'" class="mce-content-body '+n+'" data-id="'+e.id+'"><br></body></html>'}(e),Sz.add(t.iframeContainer,r),o}function Vw(e){e.contentCSS=e.contentCSS.concat(function(t){var e=Lf(t),n=t.editorManager.baseURL+"/skins/content",r="content"+t.editorManager.suffix+".css",o=!0===t.inline;return X(e,function(e){return function(e){return/^[a-z0-9\-]+$/i.test(e)}(e)&&!o?n+"/"+e+"/"+r:t.documentBaseURI.toAbsolute(e)})}(e))}function Iw(e){return e.replace(/^\-/,"")}function Fw(e){return{editorContainer:e,iframeContainer:e}}function Uw(e){var t=e.getElement();return e.inline?Fw(null):function(e){var t=Tz.create("div");return Tz.insertAfter(t,e),Fw(t)}(t)}function jw(e){return"-"===e.charAt(0)}function qw(t,e){(function(e){return k.from(zf(e)).filter(function(e){return 0<e.length}).map(function(e){return{url:e,name:k.none()}})})(e).orThunk(function(){return function(t){return k.from(xf(t)).filter(function(e){return 0<e.length&&!Ud.has(e)}).map(function(e){return{url:t.editorManager.baseURL+"/icons/"+e+"/icons.js",name:k.some(e)}})}(e)}).each(function(e){t.add(e.url,i,undefined,function(){Fd.iconsLoadError(e.url,e.name.getOrUndefined())})})}function $w(e,t){var n=Qi.ScriptLoader;!function(e,t,n,r){var o=t.settings,i=o.theme;if(K(i)){if(!jw(i)&&!qd.urls.hasOwnProperty(i)){var a=o.theme_url;a?qd.load(i,t.documentBaseURI.toAbsolute(a)):qd.load(i,"themes/"+i+"/theme"+n+".js")}e.loadQueue(function(){qd.waitFor(i,r)})}else r()}(n,e,t,function(){!function(e,t){var n=Bf(t),r=Of(t);if(!1===ra.hasCode(n)&&"en"!==n){var o=""!==r?r:t.editorManager.baseURL+"/langs/"+n+".js";e.add(o,i,undefined,function(){Fd.languageLoadError(o,n)})}}(n,e),qw(n,e),function(n,r){A(n.plugins)&&(n.plugins=n.plugins.join(" ")),Mn.each(n.external_plugins,function(e,t){jd.load(t,e,i,undefined,function(){Fd.pluginLoadError(t,e)}),n.plugins+=" "+t}),Mn.each(n.plugins.split(/[ ,]/),function(e){if((e=Mn.trim(e))&&!jd.urls[e])if(jw(e)){e=e.substr(1,e.length);var t=jd.dependencies(e);Mn.each(t,function(e){var t={prefix:"plugins/",resource:e,suffix:"/plugin"+r+".js"};e=jd.createUrl(t,e),jd.load(e.resource,e,i,undefined,function(){Fd.pluginLoadError(e.prefix+e.resource+e.suffix,e.resource)})})}else{var n={prefix:"plugins/",resource:e,suffix:"/plugin"+r+".js"};jd.load(e,n,i,undefined,function(){Fd.pluginLoadError(n.prefix+n.resource+n.suffix,e)})}})}(e.settings,t),n.loadQueue(function(){e.removed||Mz(e)},e,function(){e.removed||Mz(e)})})}function Ww(e,t,n){ha(e,t)&&!1===n?function(e,t){sa(e)?e.dom().classList.remove(t):la(e,t);da(e)}(e,t):n&&fa(e,t)}function Kw(e,t,n){try{e.getDoc().execCommand(t,!1,n)}catch(r){}}function Xw(e,t){e.dom().contentEditable=t?"true":"false"}function Yw(e,t){var n=yt.fromDom(e.getBody());Ww(n,"mce-content-readonly",t),t?(e.selection.controlSelection.hideResizeRect(),e._selectionOverrides.hideFakeCaret(),function(e){k.from(e.selection.getNode()).each(function(e){e.removeAttribute("data-mce-selected")})}(e),e.readonly=!0,Xw(n,!1),function(e){z(ma(e,'*[contenteditable="true"]'),function(e){Tt(e,_z,"true"),Xw(e,!1)})}(n)):(e.readonly=!1,Xw(n,!0),function(e){z(ma(e,"*["+_z+'="true"]'),function(e){pe(e,_z),Xw(e,!0)})}(n),Kw(e,"StyleWithCSS",!1),Kw(e,"enableInlineTableEditing",!1),Kw(e,"enableObjectResizing",!1),sd(e)&&e.focus(),function(e){e.selection.setRng(e.selection.getRng())}(e),e.nodeChanged())}function Gw(e){return!0===e.readonly}function Jw(t){t.parser.addAttributeFilter("contenteditable",function(e){Gw(t)&&z(e,function(e){e.attr(_z,e.attr("contenteditable")),e.attr("contenteditable","false")})}),t.serializer.addAttributeFilter(_z,function(e){Gw(t)&&z(e,function(e){e.attr("contenteditable",e.attr(_z))})}),t.serializer.addTempAttr(_z)}function Qw(e,t,n,r){var o=n[t.get()],i=n[r];try{i.activate()}catch(yN){return void j.console.error("problem while activating editor mode "+r+":",yN)}o.deactivate(),o.editorReadOnly!==i.editorReadOnly&&Yw(e,i.editorReadOnly),t.set(r),hd(e,r)}function Zw(t){var n=Je("design"),r=Je({design:{activate:i,deactivate:i,editorReadOnly:!1},readonly:{activate:i,deactivate:i,editorReadOnly:!0}});return function(e){e.serializer?Jw(e):e.on("PreInit",function(){Jw(e)})}(t),function(t){t.on("ShowCaret",function(e){Gw(t)&&e.preventDefault()}),t.on("ObjectSelected",function(e){Gw(t)&&e.preventDefault()})}(t),{isReadOnly:function(){return Gw(t)},set:function(e){return function(e,t,n,r){if(r!==n.get()){if(!kt(t,r))throw new Error("Editor mode '"+r+"' is invalid");e.initialized?Qw(e,n,t,r):e.on("init",function(){return Qw(e,n,t,r)})}}(t,r.get(),n,e)},get:function(){return n.get()},register:function(e,t){r.set(function(e,t,n){var r;if(h(Bz,t))throw new Error("Cannot override default mode "+t);return G(G({},e),((r={})[t]=G(G({},n),{deactivate:function(){try{n.deactivate()}catch(yN){j.console.error("problem while deactivating editor mode "+t+":",yN)}}}),r))}(r.get(),e,t))}}}function ex(e){return Mn.grep(e.childNodes,function(e){return"LI"===e.nodeName})}function tx(e){return e&&e.firstChild&&e.firstChild===e.lastChild&&function(e){return"\xa0"===e.data||Ge.isBr(e)}(e.firstChild)}function nx(e){return 0<e.length&&function(e){return!e.firstChild||tx(e)}(e[e.length-1])?e.slice(0,-1):e}function rx(e,t){var n=e.getParent(t,e.isBlock);return n&&"LI"===n.nodeName?n:null}function ox(e,t){var n=Ds.after(e),r=rc(t).prev(n);return r?r.toRange():null}function ix(t,e,n){var r=t.parentNode;return Mn.each(e,function(e){r.insertBefore(e,t)}),function(e,t){var n=Ds.before(e),r=rc(t).next(n);return r?r.toRange():null}(t,n)}function ax(e,t){var n=e.selection.getRng(),r=n.startContainer,o=n.startOffset;n.collapsed&&function(e,t){return Ge.isText(e)&&"\xa0"===e.nodeValue[t-1]}(r,o)&&Ge.isText(r)&&(r.insertData(o-1," "),r.deleteData(o,1),n.setStart(r,o),n.setEnd(r,o),e.selection.setRng(n)),e.selection.setContent(t)}function ux(e,t,n){var r,o,i,a,u,s,c,l,f,d,h,m=e.selection,g=e.dom;if(/^ | $/.test(t)&&(t=function(e,t){var n,r;n=e.startContainer,r=e.startOffset;function o(e){return n[e]&&3===n[e].nodeType}return 3===n.nodeType&&(0<r?t=t.replace(/^&nbsp;/," "):o("previousSibling")||(t=t.replace(/^ /,"&nbsp;")),r<n.length?t=t.replace(/&nbsp;(<br>|)$/," "):o("nextSibling")||(t=t.replace(/(&nbsp;| )(<br>|)$/,"&nbsp;"))),t}(m.getRng(),t)),r=e.parser,h=n.merge,o=pl({validate:e.settings.validate},e.schema),d='<span id="mce_marker" data-mce-type="bookmark">&#xFEFF;&#x200B;</span>',s={content:t,format:"html",selection:!0,paste:n.paste},(s=e.fire("BeforeSetContent",s)).isDefaultPrevented())e.fire("SetContent",{content:s.content,format:"html",selection:!0,paste:n.paste});else{-1===(t=s.content).indexOf("{$caret}")&&(t+="{$caret}"),t=t.replace(/\{\$caret\}/,d);var p=(l=m.getRng()).startContainer||(l.parentElement?l.parentElement():null),v=e.getBody();p===v&&m.isCollapsed()&&g.isBlock(v.firstChild)&&function(e,t){return t&&!e.schema.getShortEndedElements()[t.nodeName]}(e,v.firstChild)&&g.isEmpty(v.firstChild)&&((l=g.createRng()).setStart(v.firstChild,0),l.setEnd(v.firstChild,0),m.setRng(l)),m.isCollapsed()||(e.selection.setRng(fp(e.selection.getRng())),e.getDoc().execCommand("Delete",!1,null),t=function(e,t){var n,r;return n=e.startContainer,r=e.startOffset,3===n.nodeType&&e.collapsed&&("\xa0"===n.data[r]?(n.deleteData(r,1),/[\u00a0| ]$/.test(t)||(t+=" ")):"\xa0"===n.data[r-1]&&(n.deleteData(r-1,1),/[\u00a0| ]$/.test(t)||(t=" "+t))),t}(e.selection.getRng(),t));var y={context:(i=m.getNode()).nodeName.toLowerCase(),data:n.data,insert:!0};if(u=r.parse(t,y),!0===n.paste&&Oz(e.schema,u)&&Pz(g,i))return l=Hz(o,g,e.selection.getRng(),u),e.selection.setRng(l),void e.fire("SetContent",s);if(function(e){for(var t=e;t=t.walk();)1===t.type&&t.attr("data-mce-fragment","1")}(u),"mce_marker"===(f=u.lastChild).attr("id"))for(f=(c=f).prev;f;f=f.walk(!0))if(3===f.type||!g.isBlock(f.name)){e.schema.isValidChild(f.parent.name,"span")&&f.parent.insert(c,f,"br"===f.name);break}if(e._selectionOverrides.showBlockCaretContainer(i),y.invalid){for(ax(e,d),i=m.getNode(),a=e.getBody(),9===i.nodeType?i=f=a:f=i;f!==a;)f=(i=f).parentNode;t=i===a?a.innerHTML:g.getOuterHTML(i),t=o.serialize(r.parse(t.replace(/<span (id="mce_marker"|id=mce_marker).+?<\/span>/i,function(){return o.serialize(u)}))),i===a?g.setHTML(a,t):g.setOuterHTML(i,t)}else!function(e,t,n){if("all"===n.getAttribute("data-mce-bogus"))n.parentNode.insertBefore(e.dom.createFragment(t),n);else{var r=n.firstChild,o=n.lastChild;!r||r===o&&"BR"===r.nodeName?e.dom.setHTML(n,t):ax(e,t)}}(e,t=o.serialize(u),i);!function(e,t){var n=e.schema.getTextInlineElements(),r=e.dom;if(t){var o=e.getBody(),i=new Bg(r);Mn.each(r.select("*[data-mce-fragment]"),function(e){for(var t=e.parentNode;t&&t!==o;t=t.parentNode)n[e.nodeName.toLowerCase()]&&i.compare(t,e)&&r.remove(e,!0)})}}(e,h),function(n,e){var t,r,o,i,a,u=n.dom,s=n.selection;if(e){if(n.selection.scrollIntoView(e),t=function(e){for(var t=n.getBody();e&&e!==t;e=e.parentNode)if("false"===n.dom.getContentEditable(e))return e;return null}(e))return u.remove(e),s.select(t);var c=u.createRng();(i=e.previousSibling)&&3===i.nodeType?(c.setStart(i,i.nodeValue.length),Nn.ie||(a=e.nextSibling)&&3===a.nodeType&&(i.appendData(a.data),a.parentNode.removeChild(a))):(c.setStartBefore(e),c.setEndBefore(e));r=u.getParent(e,u.isBlock),u.remove(e),r&&u.isEmpty(r)&&(n.$(r).empty(),c.setStart(r,0),c.setEnd(r,0),Lz(r)||function(e){return!!e.getAttribute("data-mce-fragment")}(r)||!(o=function(e){var t=Ds.fromRangeStart(e);if(t=rc(n.getBody()).next(t))return t.toRange()}(c))?u.add(r,u.create("br",{"data-mce-bogus":"1"})):(c=o,u.remove(r))),s.setRng(c)}}(e,g.get("mce_marker")),function(e){Mn.each(e.getElementsByTagName("*"),function(e){e.removeAttribute("data-mce-fragment")})}(e.getBody()),function(e,t){k.from(e.getParent(t,"td,th")).map(yt.fromDom).each(Cg)}(e.dom,e.selection.getStart()),e.fire("SetContent",s),e.addVisual()}}function sx(e,t){e.getDoc().execCommand(t,!1,null)}function cx(n){return function(t,e){return k.from(e).map(yt.fromDom).filter(xt).bind(function(e){return function(t,n,e){function r(e){return ye(e,t)}return ba(yt.fromDom(e),function(e){return r(e).isSome()},function(e){return ze(yt.fromDom(n),e)}).bind(r)}(n,t,e.dom()).or(function(e,t){return k.from(Xi.DOM.getStyle(t,e,!0))}(n,e.dom()))}).getOr("")}}function lx(e){return Pc.firstPositionIn(e.getBody()).map(function(e){var t=e.container();return Ge.isText(t)?t.parentNode:t})}function fx(t){return k.from(t.selection.getRng()).bind(function(e){return function(e,t){return e.startContainer===t&&0===e.startOffset}(e,t.getBody())?k.none():k.from(t.selection.getStart(!0))})}function dx(e,t){if(/^[0-9\.]+$/.test(t)){var n=parseInt(t,10);if(1<=n&&n<=7){var r=Cf(e),o=wf(e);return o?o[n-1]||t:r[n-1]||t}return t}return t}function hx(e,t){var n=dx(e,t);e.formatter.toggle("fontname",{value:function(e){var t=e.split(/\s*,\s*/);return X(t,function(e){return-1===e.indexOf(" ")||ee(e,'"')||ee(e,"'")?e:"'"+e+"'"}).join(",")}(n)}),e.nodeChanged()}var mx=d(ob,Uu.isAbove,-1),gx=d(ob,Uu.isBelow,1),px=d(ib,-1,mx),vx=d(ib,1,gx),yx=Ge.isContentEditableFalse,bx=Wa,Cx=d(mb,function(e){return e.bottom},function(e,t){return e.y<t}),wx=d(mb,function(e){return e.top},function(e,t){return e.y>t}),xx=d(yb,mx),zx=d(yb,gx),Ex=function(e){for(var t=[],n=1;n<arguments.length;n++)t[n-1]=arguments[n];var r=Array.prototype.slice.call(arguments,1);return function(){return e.apply(null,r)}},Nx=function(e,t){return g(Db(e,t),function(e){return e.action()})},Sx=function(t,n){t.on("keydown",function(e){!1===e.isDefaultPrevented()&&function(e,t,n){var r=oe().os;Nx([{keyCode:Ah.RIGHT,action:fb(e,!0)},{keyCode:Ah.LEFT,action:fb(e,!1)},{keyCode:Ah.UP,action:db(e,!1)},{keyCode:Ah.DOWN,action:db(e,!0)},{keyCode:Ah.RIGHT,action:zb(e,!0)},{keyCode:Ah.LEFT,action:zb(e,!1)},{keyCode:Ah.UP,action:Eb(e,!1)},{keyCode:Ah.DOWN,action:Eb(e,!0)},{keyCode:Ah.RIGHT,action:nb.move(e,t,!0)},{keyCode:Ah.LEFT,action:nb.move(e,t,!1)},{keyCode:Ah.RIGHT,ctrlKey:!r.isOSX(),altKey:r.isOSX(),action:nb.moveNextWord(e,t)},{keyCode:Ah.LEFT,ctrlKey:!r.isOSX(),altKey:r.isOSX(),action:nb.movePrevWord(e,t)},{keyCode:Ah.UP,action:Rb(e,!1)},{keyCode:Ah.DOWN,action:Rb(e,!0)}],n).each(function(e){n.preventDefault()})}(t,n,e)})},kx=function(e,t){return Bt(e,t)?ba(t,function(e){return In(e)||Un(e)},function(t){return function(e){return ze(t,yt.fromDom(e.dom().parentNode))}}(e)):k.none()},Tx=function(e){e.dom.isEmpty(e.getBody())&&(e.setContent(""),function(e){var t=e.getBody(),n=t.firstChild&&e.dom.isBlock(t.firstChild)?t.firstChild:t;e.selection.setCursorLocation(n,0)}(e))},Ax=function(i,a,u){return Ya(Pc.firstPositionIn(u),Pc.lastPositionIn(u),function(e,t){var n=Ky.normalizePosition(!0,e),r=Ky.normalizePosition(!1,t),o=Ky.normalizePosition(!1,a);return i?Pc.nextPosition(u,o).map(function(e){return e.isEqual(r)&&a.isEqual(n)}).getOr(!1):Pc.prevPosition(u,o).map(function(e){return e.isEqual(n)&&a.isEqual(r)}).getOr(!1)}).getOr(!0)},Mx=function(e,t,n){return n.collapsed?Ob(e,t,n):k.none()},Rx=function(e,t,n,r){return t?Ub(e,r,n):Ub(e,n,r)},Dx=function(t,n){var r=yt.fromDom(t.getBody()),e=Mx(r.dom(),n,t.selection.getRng()).bind(function(e){return Rx(r,n,e.from().block(),e.to().block())});return e.each(function(e){t.selection.setRng(e.toRange())}),e.isSome()},_x=function(e,t){return!e.selection.isCollapsed()&&$b(e)},Bx=d(Kb,!1),Ox=d(Kb,!0),Hx=jf([{remove:["element"]},{moveToElement:["element"]},{moveToPosition:["position"]}]),Px=function(e,t){for(;t&&t!==e;){if(Ge.isContentEditableTrue(t)||Ge.isContentEditableFalse(t))return t;t=t.parentNode}return null},Lx=function(e,t){return e.selection.isCollapsed()?eC(e,t):tC(e,t)},Vx=function(e){var t,n=Px(e.getBody(),e.selection.getNode());return Ge.isContentEditableTrue(n)&&e.dom.isBlock(n)&&e.dom.isEmpty(n)&&(t=e.dom.create("br",{"data-mce-bogus":"1"}),e.dom.setHTML(n,""),n.appendChild(t),e.selection.setRng(Ds.before(t).toRange())),!0},Ix=function(e,t){return function(e,t){var n=e.selection.getRng();if(!Ge.isText(n.commonAncestorContainer))return!1;var r=t?Ms.Forwards:Ms.Backwards,o=rc(e.getBody()),i=d(Ts,o.next),a=d(Ts,o.prev),u=t?i:a,s=t?Ph:Lh,c=Ss(r,e.getBody(),n),l=Ky.normalizePosition(t,u(c));if(!l||!As(c,l))return!1;if(s(l))return nC(e,n,c.getNode(),r,t,l);var f=u(l);return!!(f&&s(f)&&As(l,f))&&nC(e,n,c.getNode(),r,t,f)}(e,t)},Fx=function(e,t,n){if(e.selection.isCollapsed()&&function(e){return!1!==e.settings.inline_boundaries}(e)){var r=Ds.fromRangeStart(e.selection.getRng());return iC(e,t,n,r)}return!1},Ux=function(e,t){return!!e.selection.isCollapsed()&&sC(e,t)},jx=jf([{removeTable:["element"]},{emptyCells:["cells"]}]),qx=function(e,t){return hC(t,e).isSome()},$x=function(e,t){return g(fh(t,e),function(e){return"caption"===ie(e)})},Wx=function(e,t){return bg(t),e.selection.setCursorLocation(t.dom(),0),k.some(!0)},Kx=function(e,t){var n=yt.fromDom(e.selection.getStart(!0)),r=ry(e);return e.selection.isCollapsed()&&0===r.length?TC(e,t,n):function(e,t){var n=yt.fromDom(e.getBody()),r=e.selection.getRng(),o=ry(e);return 0!==o.length?CC(e,o):zC(e,n,r,t)}(e,n)},Xx=function(e,t){return!!e.selection.isCollapsed()&&function(t,n){var e=Ds.fromRangeStart(t.selection.getRng());return Pc.fromPosition(n,t.getBody(),e).filter(function(e){return n?_h(e):Bh(e)}).bind(function(e){return k.from(ws(n?0:-1,e))}).map(function(e){return t.selection.select(e),!0}).getOr(!1)}(e,t)},Yx=function(e){return y(X(e.selection.getSelectedBlocks(),yt.fromDom),function(e){return!DC(e)&&!function(e){return Se(e).map(DC).getOr(!1)}(e)&&function(e){return ba(e,function(e){return Ge.isContentEditableTrue(e.dom())||Ge.isContentEditableFalse(e.dom())}).exists(function(e){return Ge.isContentEditableTrue(e.dom())})}(e)})},Gx=d(PC,!1),Jx=d(PC,!0),Qx=d(HC,!1),Zx=d(HC,!0),ez=function(e,t,n){if(e.selection.isCollapsed()&&RC(e)){var r=e.dom,o=e.selection.getRng(),i=Ds.fromRangeStart(o),a=r.getParent(o.startContainer,r.isBlock);if(null!==a&&Gx(yt.fromDom(a),i))return _C(e,"outdent"),!0}return!1},tz=function(t,n){t.on("keydown",function(e){!1===e.isDefaultPrevented()&&function(e,t,n){Nx([{keyCode:Ah.BACKSPACE,action:Ex(ez,e,!1)},{keyCode:Ah.BACKSPACE,action:Ex(Lx,e,!1)},{keyCode:Ah.DELETE,action:Ex(Lx,e,!0)},{keyCode:Ah.BACKSPACE,action:Ex(Ix,e,!1)},{keyCode:Ah.DELETE,action:Ex(Ix,e,!0)},{keyCode:Ah.BACKSPACE,action:Ex(Fx,e,t,!1)},{keyCode:Ah.DELETE,action:Ex(Fx,e,t,!0)},{keyCode:Ah.BACKSPACE,action:Ex(Kx,e,!1)},{keyCode:Ah.DELETE,action:Ex(Kx,e,!0)},{keyCode:Ah.BACKSPACE,action:Ex(Xx,e,!1)},{keyCode:Ah.DELETE,action:Ex(Xx,e,!0)},{keyCode:Ah.BACKSPACE,action:Ex(_x,e,!1)},{keyCode:Ah.DELETE,action:Ex(_x,e,!0)},{keyCode:Ah.BACKSPACE,action:Ex(Dx,e,!1)},{keyCode:Ah.DELETE,action:Ex(Dx,e,!0)},{keyCode:Ah.BACKSPACE,action:Ex(Ux,e,!1)},{keyCode:Ah.DELETE,action:Ex(Ux,e,!0)}],n).each(function(e){n.preventDefault()})}(t,n,e)}),t.on("keyup",function(e){!1===e.isDefaultPrevented()&&function(e,t){Nx([{keyCode:Ah.BACKSPACE,action:Ex(Vx,e)},{keyCode:Ah.DELETE,action:Ex(Vx,e)}],t)}(t,e)})},nz=function(e,t){var n,r,o=t,i=e.dom,a=e.schema.getMoveCaretBeforeOnEnterElements();if(t){if(/^(LI|DT|DD)$/.test(t.nodeName)){var u=function(e){for(;e;){if(1===e.nodeType||3===e.nodeType&&e.data&&/[\r\n\s]/.test(e.data))return e;e=e.nextSibling}}(t.firstChild);u&&/^(UL|OL|DL)$/.test(u.nodeName)&&t.insertBefore(i.doc.createTextNode("\xa0"),t.firstChild)}if(r=i.createRng(),t.normalize(),t.hasChildNodes()){for(var s=new yi(t,t);n=s.current();){if(Ge.isText(n)){r.setStart(n,0),r.setEnd(n,0);break}if(a[n.nodeName.toLowerCase()]){r.setStartBefore(n),r.setEndBefore(n);break}o=n,n=s.next()}n||(r.setStart(o,0),r.setEnd(o,0))}else Ge.isBr(t)?t.nextSibling&&i.isBlock(t.nextSibling)?(r.setStartBefore(t),r.setEndBefore(t)):(r.setStartAfter(t),r.setEndAfter(t)):(r.setStart(t,0),r.setEnd(t,0));e.selection.setRng(r),e.selection.scrollIntoView(t)}},rz=function(e,t){var n,r,o=e.getRoot();for(n=t;n!==o&&"false"!==e.getContentEditable(n);)"true"===e.getContentEditable(n)&&(r=n),n=n.parentNode;return n!==o?r:o},oz=LC,iz=function(e){return LC(e).fold($(""),function(e){return e.nodeName.toUpperCase()})},az=function(e){return LC(e).filter(function(e){return Un(yt.fromDom(e))}).isSome()},uz=function(e,t,n,r,o){var i=e.dom,a=e.selection.getRng();if(n!==e.getBody()){!function(e){return IC(e)&&IC(e.parentNode)}(n)||(o="LI");var u=o?t(o):i.create("BR");if(UC(n,r,!0)&&UC(n,r,!1))VC(n,"LI")?i.insertAfter(u,FC(n)):i.replace(u,n);else if(UC(n,r,!0))VC(n,"LI")?(i.insertAfter(u,FC(n)),u.appendChild(i.doc.createTextNode(" ")),u.appendChild(n)):n.parentNode.insertBefore(u,n);else if(UC(n,r,!1))i.insertAfter(u,FC(n));else{n=FC(n);var s=a.cloneRange();s.setStartAfter(r),s.setEndAfter(n);var c=s.extractContents();"LI"===o&&function(e,t){return e.firstChild&&e.firstChild.nodeName===t}(c,"LI")?(u=c.firstChild,i.insertAfter(c,n)):(i.insertAfter(c,n),i.insertAfter(u,n))}i.remove(r),nz(e,u)}},sz=function(a,e){function t(e){var t,n,r,o=s,i=b.getTextInlineElements();if(e||"TABLE"===m||"HR"===m?(t=y.create(e||p),XC(a,t)):t=c.cloneNode(!1),r=t,!1===yf(a))y.setAttrib(t,"style",null),y.setAttrib(t,"class",null);else do{if(i[o.nodeName]){if(rs(o)||Fc(o))continue;n=o.cloneNode(!1),y.setAttrib(n,"id",""),t.hasChildNodes()?n.appendChild(t.firstChild):r=n,t.appendChild(n)}}while((o=o.parentNode)&&o!==u);return jC(r),t}function n(e){var t,n,r=WC(e,s,i);if(Ge.isText(s)&&(e?0<r:r<s.nodeValue.length))return!1;if(s.parentNode===c&&v&&!e)return!0;if(e&&Ge.isElement(s)&&s===c.firstChild)return!0;if(qC(s,"TABLE")||qC(s,"HR"))return v&&!e||!v&&e;var o=new yi(s,c);for(Ge.isText(s)&&(e&&0===r?o.prev():e||r!==s.nodeValue.length||o.next());t=o.current();){if(Ge.isElement(t)){if(!t.getAttribute("data-mce-bogus")&&(n=t.nodeName.toLowerCase(),C[n]&&"br"!==n))return!1}else if(Ge.isText(t)&&!/^[ \t\r\n]*$/.test(t.nodeValue))return!1;e?o.prev():o.next()}return!0}function r(){f=/^(H[1-6]|PRE|FIGURE)$/.test(m)&&"HGROUP"!==g?t(p):t(),bf(a)&&$C(y,h)&&y.isEmpty(c)?f=y.split(h,c):y.insertAfter(f,c),nz(a,f)}var o,u,s,i,c,l,f,d,h,m,g,p,v,y=a.dom,b=a.schema,C=b.getNonEmptyElements(),w=a.selection.getRng();ay(y,w).each(function(e){w.setStart(e.startContainer,e.startOffset),w.setEnd(e.endContainer,e.endOffset)}),s=w.startContainer,i=w.startOffset,p=mf(a),l=!(!e||!e.shiftKey);var x=!(!e||!e.ctrlKey);Ge.isElement(s)&&s.hasChildNodes()&&(v=i>s.childNodes.length-1,s=s.childNodes[Math.min(i,s.childNodes.length-1)]||s,i=v&&Ge.isText(s)?s.nodeValue.length:0),(u=KC(y,s))&&((p&&!l||!p&&l)&&(s=function(e,t,n,r,o){var i,a,u,s,c,l,f=t||"P",d=e.dom,h=KC(d,r);if(!(a=d.getParent(r,d.isBlock))||!$C(d,a)){if(l=(a=a||h)===e.getBody()||function(e){return e&&/^(TD|TH|CAPTION)$/.test(e.nodeName)}(a)?a.nodeName.toLowerCase():a.parentNode.nodeName.toLowerCase(),!a.hasChildNodes())return i=d.create(f),XC(e,i),a.appendChild(i),n.setStart(i,0),n.setEnd(i,0),i;for(s=r;s.parentNode!==a;)s=s.parentNode;for(;s&&!d.isBlock(s);)s=(u=s).previousSibling;if(u&&e.schema.isValidChild(l,f.toLowerCase())){for(i=d.create(f),XC(e,i),u.parentNode.insertBefore(i,u),s=u;s&&!d.isBlock(s);)c=s.nextSibling,i.appendChild(s),s=c;n.setStart(r,o),n.setEnd(r,o)}}return r}(a,p,w,s,i)),c=y.getParent(s,y.isBlock),h=c?y.getParent(c.parentNode,y.isBlock):null,m=c?c.nodeName.toUpperCase():"","LI"!==(g=h?h.nodeName.toUpperCase():"")||x||(h=(c=h).parentNode,m=g),/^(LI|DT|DD)$/.test(m)&&y.isEmpty(c)?uz(a,t,h,c,p):p&&c===a.getBody()||(p=p||"P",Ma(c)?(f=Pa(c),y.isEmpty(c)&&jC(c),nz(a,f)):n()?r():n(!0)?(f=c.parentNode.insertBefore(t(),c),nz(a,qC(c,"HR")?f:c)):((o=function(e){var t=e.cloneRange();return t.setStart(e.startContainer,WC(!0,e.startContainer,e.startOffset)),t.setEnd(e.endContainer,WC(!1,e.endContainer,e.endOffset)),t}(w).cloneRange()).setEndAfter(c),function(e){z(pa(yt.fromDom(e),zt),function(e){var t=e.dom();t.nodeValue=lu(t.nodeValue)})}(d=o.extractContents()),function(e){for(;Ge.isText(e)&&(e.nodeValue=e.nodeValue.replace(/^[\r\n]+/,"")),e=e.firstChild;);}(d),f=d.firstChild,y.insertAfter(d,c),function(e,t,n){var r,o=n,i=[];if(o){for(;o=o.firstChild;){if(e.isBlock(o))return;Ge.isElement(o)&&!t[o.nodeName.toLowerCase()]&&i.push(o)}for(r=i.length;r--;)!(o=i[r]).hasChildNodes()||o.firstChild===o.lastChild&&""===o.firstChild.nodeValue?e.remove(o):(a=e,(u=o)&&"A"===u.nodeName&&a.isEmpty(u)&&e.remove(o));var a,u}}(y,C,f),function(e,t){var n;t.normalize(),(n=t.lastChild)&&!/^(left|right)$/gi.test(e.getStyle(n,"float",!0))||e.add(t,"br")}(y,c),y.isEmpty(c)&&jC(c),f.normalize(),y.isEmpty(f)?(y.remove(f),r()):nz(a,f)),y.setAttrib(f,"id",""),a.fire("NewBlock",{newBlock:f})))},cz=function(e,t){return!!function(e){return Ge.isBr(e.getNode())}(Ds.after(t))||Pc.nextPosition(e,Ds.after(t)).map(function(e){return Ge.isBr(e.getNode())}).getOr(!1)},lz=function(e,t){var n=function(e){var t=d(Ky.isInlineTarget,e),n=Ds.fromRangeStart(e.selection.getRng());return Jy(t,e.getBody(),n).filter(tw)}(e);n.isSome()?n.each(d(nw,e)):JC(e,t)},fz=function(e){return rw(e,pf(e))},dz=function(e){return rw(e,vf(e))},hz=jf([{br:[]},{block:[]},{none:[]}]),mz=function(e,t){return Xy([hw([ow],hz.none()),hw([uw("summary",!0)],hz.br()),hw([sw(!0),cw(!1),fw],hz.br()),hw([sw(!0),cw(!1)],hz.block()),hw([sw(!0),cw(!0),fw],hz.block()),hw([sw(!0),cw(!0)],hz.br()),hw([aw(!0),fw],hz.br()),hw([aw(!0)],hz.block()),hw([iw(!0),fw,dw],hz.block()),hw([iw(!0)],hz.br()),hw([lw],hz.br()),hw([iw(!1),fw],hz.br()),hw([dw],hz.block())],[e,!(!t||!t.shiftKey)]).getOr(hz.none())},gz=function(e,t){mz(e,t).fold(function(){lz(e,t)},function(){sz(e,t)},i)},pz=function(t){t.on("keydown",function(e){e.keyCode===Ah.ENTER&&function(e,t){t.isDefaultPrevented()||(t.preventDefault(),function(e){e.typing&&(e.typing=!1,e.add())}(e.undoManager),e.undoManager.transact(function(){!1===e.selection.isCollapsed()&&e.execCommand("Delete"),gz(e,t)}))}(t,e)})},vz=d(mw,"\xa0"),yz=d(mw," "),bz=function(t){t.on("keydown",function(e){!1===e.isDefaultPrevented()&&function(e,t){Nx([{keyCode:Ah.SPACEBAR,action:Ex(Aw,e)}],t).each(function(e){t.preventDefault()})}(t,e)})},Cz=function(e){e.on("keyup compositionstart",d(Rw,e))},wz=oe().browser,xz=function(t){t.on("keydown",function(e){!1===e.isDefaultPrevented()&&function(e,t){Nx([{keyCode:Ah.END,action:hb(e,!0)},{keyCode:Ah.HOME,action:hb(e,!1)}],t).each(function(e){t.preventDefault()})}(t,e)})},zz=function(e){var t=nb.setupSelectedState(e);Cz(e),Sx(e,t),tz(e,t),pz(e),bz(e),Dw(e),xz(e)},Ez=Xi.DOM,Nz=function(t,e){var n,r,o=t.settings,i=t.getElement(),a=t.getDoc();o.inline||(t.getElement().style.visibility=t.orgVisibility),e||t.inline||(a.open(),a.write(t.iframeHTML),a.close()),t.inline&&(t.on("remove",function(){var e=this.getBody();Ez.removeClass(e,"mce-content-body"),Ez.removeClass(e,"mce-edit-focus"),Ez.setAttrib(e,"contentEditable",null)}),Ez.addClass(i,"mce-content-body"),t.contentDocument=a=j.document,t.contentWindow=j.window,t.bodyElement=i,t.contentAreaContainer=i,o.root_name=i.nodeName.toLowerCase()),(n=t.getBody()).disabled=!0,t.readonly=o.readonly,t.readonly||(t.inline&&"static"===Ez.getStyle(n,"position",!0)&&(n.style.position="relative"),n.contentEditable=t.getParam("content_editable_state",!0)),n.disabled=!1,t.editorUpload=th(t),t.schema=pr(o),t.dom=Xi(a,{keep_values:!0,url_converter:t.convertURL,url_converter_scope:t,hex_colors:o.force_hex_style_colors,update_styles:!0,root_element:t.inline?t.getBody():null,collect:function(){return t.inline},schema:t.schema,contentCssCors:Df(t),referrerPolicy:_f(t),onSetAttrib:function(e){t.fire("SetAttrib",e)}}),t.parser=function(u){var e=Np(u.settings,u.schema);return e.addAttributeFilter("src,href,style,tabindex",function(e,t){for(var n,r,o,i=e.length,a=u.dom;i--;)if(r=(n=e[i]).attr(t),o="data-mce-"+t,!n.attr(o)){if(0===r.indexOf("data:")||0===r.indexOf("blob:"))continue;"style"===t?((r=a.serializeStyle(a.parseStyle(r),n.name)).length||(r=null),n.attr(o,r),n.attr(t,r)):"tabindex"===t?(n.attr(o,r),n.attr(t,null)):n.attr(o,u.convertURL(r,t,n.name))}}),e.addNodeFilter("script",function(e){for(var t,n,r=e.length;r--;)0!==(n=(t=e[r]).attr("type")||"no/type").indexOf("mce-")&&t.attr("type","mce-"+n)}),e.addNodeFilter("#cdata",function(e){for(var t,n=e.length;n--;)(t=e[n]).type=8,t.name="#comment",t.value="[CDATA["+t.value+"]]"}),e.addNodeFilter("p,h1,h2,h3,h4,h5,h6,div",function(e){for(var t,n=e.length,r=u.schema.getNonEmptyElements();n--;)(t=e[n]).isEmpty(r)&&0===t.getAll("br").length&&(t.append(new ul("br",1)).shortEnded=!0)}),e}(t),t.serializer=Ap(o,t),t.selection=ly(t.dom,t.getWin(),t.serializer,t),t.annotator=nl(t),t.formatter=Cp(t),t.undoManager=mm(t),t._nodeChangeDispatcher=new ph(t),t._selectionOverrides=om(t),Hw(t),Ow(t),zz(t),dh(t),t.fire("PreInit"),o.browser_spellcheck||o.gecko_spellcheck||(a.body.spellcheck=!1,Ez.setAttrib(n,"spellcheck","false")),t.quirks=_w(t),t.fire("PostRender");var u=Vf(t);u!==undefined&&(n.dir=u),o.protect&&t.on("BeforeSetContent",function(t){Mn.each(o.protect,function(e){t.content=t.content.replace(e,function(e){return"\x3c!--mce:protected "+escape(e)+"--\x3e"})})}),t.on("SetContent",function(){t.addVisual(t.getBody())}),t.load({initial:!0,format:"html"}),t.startContent=t.getContent({format:"raw"}),t.on("compositionstart compositionend",function(e){t.composing="compositionstart"===e.type}),0<t.contentStyles.length&&(r="",Mn.each(t.contentStyles,function(e){r+=e+"\r\n"}),t.dom.addStyle(r)),function(e){return e.inline?Ez.styleSheetLoader:e.dom.styleSheetLoader}(t).loadAll(t.contentCSS,function(e){Pw(t)},function(e){Pw(t)}),o.content_style&&function(e,t){var n=yt.fromDom(e.getDoc().head),r=yt.fromTag("style");Tt(r,"type","text/css"),Di(r,yt.fromText(t)),Di(n,r)}(t,o.content_style)},Sz=Xi.DOM,kz=function(e,t){var n=Lw(e,t);t.editorContainer&&(Sz.get(t.editorContainer).style.display=e.orgDisplay,e.hidden=Sz.isHidden(t.editorContainer)),e.getElement().style.display="none",Sz.setAttrib(e.id,"aria-hidden","true"),n||Nz(e)},Tz=Xi.DOM,Az=function(t,n,e){var r=jd.get(e),o=jd.urls[e]||t.documentBaseUrl.replace(/\/$/,"");if(e=Mn.trim(e),r&&-1===Mn.inArray(n,e)){if(Mn.each(jd.dependencies(e),function(e){Az(t,n,e)}),t.plugins[e])return;try{var i=new r(t,o,t.$);(t.plugins[e]=i).init&&(i.init(t,o),n.push(e))}catch(yN){Fd.pluginInitError(t,e,yN)}}},Mz=function(e){e.fire("ScriptsLoaded"),function(n){var e=Mn.trim(n.settings.icons),r=n.ui.registry.getAll().icons,t=G(G({},{"accessibility-check":'<svg width="24" height="24"><path d="M12 2a2 2 0 0 1 2 2 2 2 0 0 1-2 2 2 2 0 0 1-2-2c0-1.1.9-2 2-2zm8 7h-5v12c0 .6-.4 1-1 1a1 1 0 0 1-1-1v-5c0-.6-.4-1-1-1a1 1 0 0 0-1 1v5c0 .6-.4 1-1 1a1 1 0 0 1-1-1V9H4a1 1 0 1 1 0-2h16c.6 0 1 .4 1 1s-.4 1-1 1z" fill-rule="nonzero"/></svg>',"action-next":'<svg width="24" height="24"><path fill-rule="nonzero" d="M5.7 7.3a1 1 0 0 0-1.4 1.4l7.7 7.7 7.7-7.7a1 1 0 1 0-1.4-1.4L12 13.6 5.7 7.3z"/></svg>',"action-prev":'<svg width="24" height="24"><path fill-rule="nonzero" d="M18.3 15.7a1 1 0 0 0 1.4-1.4L12 6.6l-7.7 7.7a1 1 0 0 0 1.4 1.4L12 9.4l6.3 6.3z"/></svg>',"align-center":'<svg width="24" height="24"><path d="M5 5h14c.6 0 1 .4 1 1s-.4 1-1 1H5a1 1 0 1 1 0-2zm3 4h8c.6 0 1 .4 1 1s-.4 1-1 1H8a1 1 0 1 1 0-2zm0 8h8c.6 0 1 .4 1 1s-.4 1-1 1H8a1 1 0 0 1 0-2zm-3-4h14c.6 0 1 .4 1 1s-.4 1-1 1H5a1 1 0 0 1 0-2z" fill-rule="evenodd"/></svg>',"align-justify":'<svg width="24" height="24"><path d="M5 5h14c.6 0 1 .4 1 1s-.4 1-1 1H5a1 1 0 1 1 0-2zm0 4h14c.6 0 1 .4 1 1s-.4 1-1 1H5a1 1 0 1 1 0-2zm0 4h14c.6 0 1 .4 1 1s-.4 1-1 1H5a1 1 0 0 1 0-2zm0 4h14c.6 0 1 .4 1 1s-.4 1-1 1H5a1 1 0 0 1 0-2z" fill-rule="evenodd"/></svg>',"align-left":'<svg width="24" height="24"><path d="M5 5h14c.6 0 1 .4 1 1s-.4 1-1 1H5a1 1 0 1 1 0-2zm0 4h8c.6 0 1 .4 1 1s-.4 1-1 1H5a1 1 0 1 1 0-2zm0 8h8c.6 0 1 .4 1 1s-.4 1-1 1H5a1 1 0 0 1 0-2zm0-4h14c.6 0 1 .4 1 1s-.4 1-1 1H5a1 1 0 0 1 0-2z" fill-rule="evenodd"/></svg>',"align-none":'<svg width="24" height="24"><path d="M14.2 5L13 7H5a1 1 0 1 1 0-2h9.2zm4 0h.8a1 1 0 0 1 0 2h-2l1.2-2zm-6.4 4l-1.2 2H5a1 1 0 0 1 0-2h6.8zm4 0H19a1 1 0 0 1 0 2h-4.4l1.2-2zm-6.4 4l-1.2 2H5a1 1 0 0 1 0-2h4.4zm4 0H19a1 1 0 0 1 0 2h-6.8l1.2-2zM7 17l-1.2 2H5a1 1 0 0 1 0-2h2zm4 0h8a1 1 0 0 1 0 2H9.8l1.2-2zm5.2-13.5l1.3.7-9.7 16.3-1.3-.7 9.7-16.3z" fill-rule="evenodd"/></svg>',"align-right":'<svg width="24" height="24"><path d="M5 5h14c.6 0 1 .4 1 1s-.4 1-1 1H5a1 1 0 1 1 0-2zm6 4h8c.6 0 1 .4 1 1s-.4 1-1 1h-8a1 1 0 0 1 0-2zm0 8h8c.6 0 1 .4 1 1s-.4 1-1 1h-8a1 1 0 0 1 0-2zm-6-4h14c.6 0 1 .4 1 1s-.4 1-1 1H5a1 1 0 0 1 0-2z" fill-rule="evenodd"/></svg>',"arrow-left":'<svg width="24" height="24"><path d="M5.6 13l12 6a1 1 0 0 0 1.4-1V6a1 1 0 0 0-1.4-.9l-12 6a1 1 0 0 0 0 1.8z" fill-rule="evenodd"/></svg>',"arrow-right":'<svg width="24" height="24"><path d="M18.5 13l-12 6A1 1 0 0 1 5 18V6a1 1 0 0 1 1.4-.9l12 6a1 1 0 0 1 0 1.8z" fill-rule="evenodd"/></svg>',bold:'<svg width="24" height="24"><path d="M7.8 19c-.3 0-.5 0-.6-.2l-.2-.5V5.7c0-.2 0-.4.2-.5l.6-.2h5c1.5 0 2.7.3 3.5 1 .7.6 1.1 1.4 1.1 2.5a3 3 0 0 1-.6 1.9c-.4.6-1 1-1.6 1.2.4.1.9.3 1.3.6s.8.7 1 1.2c.4.4.5 1 .5 1.6 0 1.3-.4 2.3-1.3 3-.8.7-2.1 1-3.8 1H7.8zm5-8.3c.6 0 1.2-.1 1.6-.5.4-.3.6-.7.6-1.3 0-1.1-.8-1.7-2.3-1.7H9.3v3.5h3.4zm.5 6c.7 0 1.3-.1 1.7-.4.4-.4.6-.9.6-1.5s-.2-1-.7-1.4c-.4-.3-1-.4-2-.4H9.4v3.8h4z" fill-rule="evenodd"/></svg>',bookmark:'<svg width="24" height="24"><path d="M6 4v17l6-4 6 4V4c0-.6-.4-1-1-1H7a1 1 0 0 0-1 1z" fill-rule="nonzero"/></svg>',"border-width":'<svg width="24" height="24"><path d="M5 14.8h14a1 1 0 0 1 0 2H5a1 1 0 0 1 0-2zm-.5 3.7h15c.3 0 .5.2.5.5s-.2.5-.5.5h-15a.5.5 0 1 1 0-1zm.5-8.3h14c.6 0 1 .4 1 1v1c0 .5-.4 1-1 1H5a1 1 0 0 1-1-1v-1c0-.6.4-1 1-1zm0-5.7h14c.6 0 1 .4 1 1v2c0 .6-.4 1-1 1H5a1 1 0 0 1-1-1v-2c0-.6.4-1 1-1z" fill-rule="evenodd"/></svg>',brightness:'<svg width="24" height="24"><path d="M12 17c.3 0 .5.1.7.3.2.2.3.4.3.7v1c0 .3-.1.5-.3.7a1 1 0 0 1-.7.3 1 1 0 0 1-.7-.3 1 1 0 0 1-.3-.7v-1c0-.3.1-.5.3-.7.2-.2.4-.3.7-.3zm0-10a1 1 0 0 1-.7-.3A1 1 0 0 1 11 6V5c0-.3.1-.5.3-.7.2-.2.4-.3.7-.3.3 0 .5.1.7.3.2.2.3.4.3.7v1c0 .3-.1.5-.3.7a1 1 0 0 1-.7.3zm7 4c.3 0 .5.1.7.3.2.2.3.4.3.7 0 .3-.1.5-.3.7a1 1 0 0 1-.7.3h-1a1 1 0 0 1-.7-.3 1 1 0 0 1-.3-.7c0-.3.1-.5.3-.7.2-.2.4-.3.7-.3h1zM7 12c0 .3-.1.5-.3.7a1 1 0 0 1-.7.3H5a1 1 0 0 1-.7-.3A1 1 0 0 1 4 12c0-.3.1-.5.3-.7.2-.2.4-.3.7-.3h1c.3 0 .5.1.7.3.2.2.3.4.3.7zm10 3.5l.7.8c.2.1.3.4.3.6 0 .3-.1.6-.3.8a1 1 0 0 1-.8.3 1 1 0 0 1-.6-.3l-.8-.7a1 1 0 0 1-.3-.8c0-.2.1-.5.3-.7a1 1 0 0 1 1.4 0zm-10-7l-.7-.8a1 1 0 0 1-.3-.6c0-.3.1-.6.3-.8.2-.2.5-.3.8-.3.2 0 .5.1.7.3l.7.7c.2.2.3.5.3.8 0 .2-.1.5-.3.7a1 1 0 0 1-.7.3 1 1 0 0 1-.8-.3zm10 0a1 1 0 0 1-.8.3 1 1 0 0 1-.7-.3 1 1 0 0 1-.3-.7c0-.3.1-.6.3-.8l.8-.7c.1-.2.4-.3.6-.3.3 0 .6.1.8.3.2.2.3.5.3.8 0 .2-.1.5-.3.7l-.7.7zm-10 7c.2-.2.5-.3.8-.3.2 0 .5.1.7.3a1 1 0 0 1 0 1.4l-.8.8a1 1 0 0 1-.6.3 1 1 0 0 1-.8-.3 1 1 0 0 1-.3-.8c0-.2.1-.5.3-.6l.7-.8zM12 8a4 4 0 0 1 3.7 2.4 4 4 0 0 1 0 3.2A4 4 0 0 1 12 16a4 4 0 0 1-3.7-2.4 4 4 0 0 1 0-3.2A4 4 0 0 1 12 8zm0 6.5c.7 0 1.3-.2 1.8-.7.5-.5.7-1.1.7-1.8s-.2-1.3-.7-1.8c-.5-.5-1.1-.7-1.8-.7s-1.3.2-1.8.7c-.5.5-.7 1.1-.7 1.8s.2 1.3.7 1.8c.5.5 1.1.7 1.8.7z" fill-rule="evenodd"/></svg>',browse:'<svg width="24" height="24"><path d="M19 4a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2h-4v-2h4V8H5v10h4v2H5a2 2 0 0 1-2-2V6c0-1.1.9-2 2-2h14zm-8 9.4l-2.3 2.3a1 1 0 1 1-1.4-1.4l4-4a1 1 0 0 1 1.4 0l4 4a1 1 0 0 1-1.4 1.4L13 13.4V20a1 1 0 0 1-2 0v-6.6z" fill-rule="nonzero"/></svg>',cancel:'<svg width="24" height="24"><path d="M12 4.6a7.4 7.4 0 1 1 0 14.8 7.4 7.4 0 0 1 0-14.8zM12 3a9 9 0 1 0 0 18 9 9 0 0 0 0-18zm0 8L14.8 8l1 1.1-2.7 2.8 2.7 2.7-1.1 1.1-2.7-2.7-2.7 2.7-1-1.1 2.6-2.7-2.7-2.7 1-1.1 2.8 2.7z" fill-rule="nonzero"/></svg>',"change-case":'<svg width="24" height="24"><path d="M18.4 18.2v-.6c-.5.8-1.3 1.2-2.4 1.2-2.2 0-3.3-1.6-3.3-4.8 0-3.1 1-4.7 3.3-4.7 1.1 0 1.8.3 2.4 1.1v-.6c0-.5.4-.8.8-.8s.8.3.8.8v8.4c0 .5-.4.8-.8.8a.8.8 0 0 1-.8-.8zm-2-7.4c-1.3 0-1.8.9-1.8 3.2 0 2.4.5 3.3 1.7 3.3 1.3 0 1.8-.9 1.8-3.2 0-2.4-.5-3.3-1.7-3.3zM10 15.7H5.5l-.8 2.6a1 1 0 0 1-1 .7h-.2a.7.7 0 0 1-.7-1l4-12a1 1 0 1 1 2 0l4 12a.7.7 0 0 1-.8 1h-.2a1 1 0 0 1-1-.7l-.8-2.6zm-.3-1.5l-2-6.5-1.9 6.5h3.9z" fill-rule="evenodd"/></svg>',"character-count":'<svg width="24" height="24"><path d="M4 11.5h16v1H4v-1zm4.8-6.8V10H7.7V5.8h-1v-1h2zM11 8.3V9h2v1h-3V7.7l2-1v-.9h-2v-1h3v2.4l-2 1zm6.3-3.4V10h-3.1V9h2.1V8h-2.1V6.8h2.1v-1h-2.1v-1h3.1zM5.8 16.4c0-.5.2-.8.5-1 .2-.2.6-.3 1.2-.3l.8.1c.2 0 .4.2.5.3l.4.4v2.8l.2.3H8.2v-.1-.2l-.6.3H7c-.4 0-.7 0-1-.2a1 1 0 0 1-.3-.9c0-.3 0-.6.3-.8.3-.2.7-.4 1.2-.4l.6-.2h.3v-.2l-.1-.2a.8.8 0 0 0-.5-.1 1 1 0 0 0-.4 0l-.3.4h-1zm2.3.8h-.2l-.2.1-.4.1a1 1 0 0 0-.4.2l-.2.2.1.3.5.1h.4l.4-.4v-.6zm2-3.4h1.2v1.7l.5-.3h.5c.5 0 .9.1 1.2.5.3.4.5.8.5 1.4 0 .6-.2 1.1-.5 1.5-.3.4-.7.6-1.3.6l-.6-.1-.4-.4v.4h-1.1v-5.4zm1.1 3.3c0 .3 0 .6.2.8a.7.7 0 0 0 1.2 0l.2-.8c0-.4 0-.6-.2-.8a.7.7 0 0 0-.6-.3l-.6.3-.2.8zm6.1-.5c0-.2 0-.3-.2-.4a.8.8 0 0 0-.5-.2c-.3 0-.5.1-.6.3l-.2.9c0 .3 0 .6.2.8.1.2.3.3.6.3.2 0 .4 0 .5-.2l.2-.4h1.1c0 .5-.3.8-.6 1.1a2 2 0 0 1-1.3.4c-.5 0-1-.2-1.3-.6a2 2 0 0 1-.5-1.4c0-.6.1-1.1.5-1.5.3-.4.8-.5 1.4-.5.5 0 1 0 1.2.3.4.3.5.7.5 1.2h-1v-.1z" fill-rule="evenodd"/></svg>',"checklist-rtl":'<svg width="24" height="24"><path d="M5 17h8c.6 0 1 .4 1 1s-.4 1-1 1H5a1 1 0 0 1 0-2zm0-6h8c.6 0 1 .4 1 1s-.4 1-1 1H5a1 1 0 0 1 0-2zm0-6h8c.6 0 1 .4 1 1s-.4 1-1 1H5a1 1 0 1 1 0-2zm14.2 11c.2-.4.6-.5.9-.3.3.2.4.6.2 1L18 20c-.2.3-.7.4-1 0l-1.3-1.3a.7.7 0 0 1 0-1c.3-.2.7-.2 1 0l.7.9 1.7-2.8zm0-6c.2-.4.6-.5.9-.3.3.2.4.6.2 1L18 14c-.2.3-.7.4-1 0l-1.3-1.3a.7.7 0 0 1 0-1c.3-.2.7-.2 1 0l.7.9 1.7-2.8zm0-6c.2-.4.6-.5.9-.3.3.2.4.6.2 1L18 8c-.2.3-.7.4-1 0l-1.3-1.3a.7.7 0 0 1 0-1c.3-.2.7-.2 1 0l.7.9 1.7-2.8z" fill-rule="evenodd"/></svg>',checklist:'<svg width="24" height="24"><path d="M11 17h8c.6 0 1 .4 1 1s-.4 1-1 1h-8a1 1 0 0 1 0-2zm0-6h8c.6 0 1 .4 1 1s-.4 1-1 1h-8a1 1 0 0 1 0-2zm0-6h8a1 1 0 0 1 0 2h-8a1 1 0 0 1 0-2zM7.2 16c.2-.4.6-.5.9-.3.3.2.4.6.2 1L6 20c-.2.3-.7.4-1 0l-1.3-1.3a.7.7 0 0 1 0-1c.3-.2.7-.2 1 0l.7.9 1.7-2.8zm0-6c.2-.4.6-.5.9-.3.3.2.4.6.2 1L6 14c-.2.3-.7.4-1 0l-1.3-1.3a.7.7 0 0 1 0-1c.3-.2.7-.2 1 0l.7.9 1.7-2.8zm0-6c.2-.4.6-.5.9-.3.3.2.4.6.2 1L6 8c-.2.3-.7.4-1 0L3.8 6.9a.7.7 0 0 1 0-1c.3-.2.7-.2 1 0l.7.9 1.7-2.8z" fill-rule="evenodd"/></svg>',checkmark:'<svg width="24" height="24"><path d="M18.2 5.4a1 1 0 0 1 1.6 1.2l-8 12a1 1 0 0 1-1.5.1l-5-5a1 1 0 1 1 1.4-1.4l4.1 4.1 7.4-11z" fill-rule="nonzero"/></svg>',"chevron-down":'<svg width="10" height="10"><path d="M8.7 2.2c.3-.3.8-.3 1 0 .4.4.4.9 0 1.2L5.7 7.8c-.3.3-.9.3-1.2 0L.2 3.4a.8.8 0 0 1 0-1.2c.3-.3.8-.3 1.1 0L5 6l3.7-3.8z" fill-rule="nonzero"/></svg>',"chevron-left":'<svg width="10" height="10"><path d="M7.8 1.3L4 5l3.8 3.7c.3.3.3.8 0 1-.4.4-.9.4-1.2 0L2.2 5.7a.8.8 0 0 1 0-1.2L6.6.2C7 0 7.4 0 7.8.2c.3.3.3.8 0 1.1z" fill-rule="nonzero"/></svg>',"chevron-right":'<svg width="10" height="10"><path d="M2.2 1.3a.8.8 0 0 1 0-1c.4-.4.9-.4 1.2 0l4.4 4.1c.3.4.3.9 0 1.2L3.4 9.8c-.3.3-.8.3-1.2 0a.8.8 0 0 1 0-1.1L6 5 2.2 1.3z" fill-rule="nonzero"/></svg>',"chevron-up":'<svg width="10" height="10"><path d="M8.7 7.8L5 4 1.3 7.8c-.3.3-.8.3-1 0a.8.8 0 0 1 0-1.2l4.1-4.4c.3-.3.9-.3 1.2 0l4.2 4.4c.3.3.3.9 0 1.2-.3.3-.8.3-1.1 0z" fill-rule="nonzero"/></svg>',close:'<svg width="24" height="24"><path d="M17.3 8.2L13.4 12l3.9 3.8a1 1 0 0 1-1.5 1.5L12 13.4l-3.8 3.9a1 1 0 0 1-1.5-1.5l3.9-3.8-3.9-3.8a1 1 0 0 1 1.5-1.5l3.8 3.9 3.8-3.9a1 1 0 0 1 1.5 1.5z" fill-rule="evenodd"/></svg>',"code-sample":'<svg width="24" height="26"><path d="M7.1 11a2.8 2.8 0 0 1-.8 2 2.8 2.8 0 0 1 .8 2v1.7c0 .3.1.6.4.8.2.3.5.4.8.4.3 0 .4.2.4.4v.8c0 .2-.1.4-.4.4-.7 0-1.4-.3-2-.8-.5-.6-.8-1.3-.8-2V15c0-.3-.1-.6-.4-.8-.2-.3-.5-.4-.8-.4a.4.4 0 0 1-.4-.4v-.8c0-.2.2-.4.4-.4.3 0 .6-.1.8-.4.3-.2.4-.5.4-.8V9.3c0-.7.3-1.4.8-2 .6-.5 1.3-.8 2-.8.3 0 .4.2.4.4v.8c0 .2-.1.4-.4.4-.3 0-.6.1-.8.4-.3.2-.4.5-.4.8V11zm9.8 0V9.3c0-.3-.1-.6-.4-.8-.2-.3-.5-.4-.8-.4a.4.4 0 0 1-.4-.4V7c0-.2.1-.4.4-.4.7 0 1.4.3 2 .8.5.6.8 1.3.8 2V11c0 .3.1.6.4.8.2.3.5.4.8.4.2 0 .4.2.4.4v.8c0 .2-.2.4-.4.4-.3 0-.6.1-.8.4-.3.2-.4.5-.4.8v1.7c0 .7-.3 1.4-.8 2-.6.5-1.3.8-2 .8a.4.4 0 0 1-.4-.4v-.8c0-.2.1-.4.4-.4.3 0 .6-.1.8-.4.3-.2.4-.5.4-.8V15a2.8 2.8 0 0 1 .8-2 2.8 2.8 0 0 1-.8-2zm-3.3-.4c0 .4-.1.8-.5 1.1-.3.3-.7.5-1.1.5-.4 0-.8-.2-1.1-.5-.4-.3-.5-.7-.5-1.1 0-.5.1-.9.5-1.2.3-.3.7-.4 1.1-.4.4 0 .8.1 1.1.4.4.3.5.7.5 1.2zM12 13c.4 0 .8.1 1.1.5.4.3.5.7.5 1.1 0 1-.1 1.6-.5 2a3 3 0 0 1-1.1 1c-.4.3-.8.4-1.1.4a.5.5 0 0 1-.5-.5V17a3 3 0 0 0 1-.2l.6-.6c-.6 0-1-.2-1.3-.5-.2-.3-.3-.7-.3-1 0-.5.1-1 .5-1.2.3-.4.7-.5 1.1-.5z" fill-rule="evenodd"/></svg>',"color-levels":'<svg width="24" height="24"><path d="M17.5 11.4A9 9 0 0 1 18 14c0 .5 0 1-.2 1.4 0 .4-.3.9-.5 1.3a6.2 6.2 0 0 1-3.7 3 5.7 5.7 0 0 1-3.2 0A5.9 5.9 0 0 1 7.6 18a6.2 6.2 0 0 1-1.4-2.6 6.7 6.7 0 0 1 0-2.8c0-.4.1-.9.3-1.3a13.6 13.6 0 0 1 2.3-4A20 20 0 0 1 12 4a26.4 26.4 0 0 1 3.2 3.4 18.2 18.2 0 0 1 2.3 4zm-2 4.5c.4-.7.5-1.4.5-2a7.3 7.3 0 0 0-1-3.2c.2.6.2 1.2.2 1.9a4.5 4.5 0 0 1-1.3 3 5.3 5.3 0 0 1-2.3 1.5 4.9 4.9 0 0 1-2 .1 4.3 4.3 0 0 0 2.4.8 4 4 0 0 0 2-.6 4 4 0 0 0 1.5-1.5z" fill-rule="evenodd"/></svg>',"color-picker":'<svg width="24" height="24"><path d="M12 3a9 9 0 0 0 0 18 1.5 1.5 0 0 0 1.1-2.5c-.2-.3-.4-.6-.4-1 0-.8.7-1.5 1.5-1.5H16a5 5 0 0 0 5-5c0-4.4-4-8-9-8zm-5.5 9a1.5 1.5 0 1 1 0-3 1.5 1.5 0 0 1 0 3zm3-4a1.5 1.5 0 1 1 0-3 1.5 1.5 0 0 1 0 3zm5 0a1.5 1.5 0 1 1 0-3 1.5 1.5 0 0 1 0 3zm3 4a1.5 1.5 0 1 1 0-3 1.5 1.5 0 0 1 0 3z" fill-rule="nonzero"/></svg>',"color-swatch-remove-color":'<svg width="24" height="24"><path stroke="#000" stroke-width="2" d="M21 3L3 21" fill-rule="evenodd"/></svg>',"color-swatch":'<svg width="24" height="24"><rect x="3" y="3" width="18" height="18" rx="1" fill-rule="evenodd"/></svg>',"comment-add":'<svg width="24" height="24"><g fill-rule="nonzero"><path d="M9 19l3-2h7c.6 0 1-.4 1-1V6c0-.6-.4-1-1-1H5a1 1 0 0 0-1 1v10c0 .6.4 1 1 1h4v2zm-2 4v-4H5a3 3 0 0 1-3-3V6a3 3 0 0 1 3-3h14a3 3 0 0 1 3 3v10a3 3 0 0 1-3 3h-6.4L7 23z"/><path d="M13 10h2a1 1 0 0 1 0 2h-2v2a1 1 0 0 1-2 0v-2H9a1 1 0 0 1 0-2h2V8a1 1 0 0 1 2 0v2z"/></g></svg>',comment:'<svg width="24" height="24"><path fill-rule="nonzero" d="M9 19l3-2h7c.6 0 1-.4 1-1V6c0-.6-.4-1-1-1H5a1 1 0 0 0-1 1v10c0 .6.4 1 1 1h4v2zm-2 4v-4H5a3 3 0 0 1-3-3V6a3 3 0 0 1 3-3h14a3 3 0 0 1 3 3v10a3 3 0 0 1-3 3h-6.4L7 23z"/></svg>',contrast:'<svg width="24" height="24"><path d="M12 4a7.8 7.8 0 0 1 5.7 2.3A8 8 0 1 1 12 4zm-6 8a6 6 0 0 0 6 6V6a6 6 0 0 0-6 6z" fill-rule="evenodd"/></svg>',copy:'<svg width="24" height="24"><path d="M16 3H6a2 2 0 0 0-2 2v11h2V5h10V3zm1 4a2 2 0 0 1 2 2v10a2 2 0 0 1-2 2h-7a2 2 0 0 1-2-2V9c0-1.2.9-2 2-2h7zm0 12V9h-7v10h7z" fill-rule="nonzero"/></svg>',crop:'<svg width="24" height="24"><path d="M17 8v7h2c.6 0 1 .4 1 1s-.4 1-1 1h-2v2c0 .6-.4 1-1 1a1 1 0 0 1-1-1v-2H7V9H5a1 1 0 1 1 0-2h2V5c0-.6.4-1 1-1s1 .4 1 1v2h7l3-3 1 1-3 3zM9 9v5l5-5H9zm1 6h5v-5l-5 5z" fill-rule="evenodd"/></svg>',cut:'<svg width="24" height="24"><path d="M18 15c.6.7 1 1.4 1 2.3 0 .8-.2 1.5-.7 2l-.8.5-1 .2c-.4 0-.8 0-1.2-.3a3.9 3.9 0 0 1-2.1-2.2c-.2-.5-.3-1-.2-1.5l-1-1-1 1c0 .5 0 1-.2 1.5-.1.5-.4 1-.9 1.4-.3.4-.7.6-1.2.8l-1.2.3c-.4 0-.7 0-1-.2-.3 0-.6-.3-.8-.5-.5-.5-.8-1.2-.7-2 0-.9.4-1.6 1-2.2A3.7 3.7 0 0 1 8.6 14H9l1-1-4-4-.5-1a3.3 3.3 0 0 1 0-2c0-.4.3-.7.5-1l6 6 6-6 .5 1a3.3 3.3 0 0 1 0 2c0 .4-.3.7-.5 1l-4 4 1 1h.5c.4 0 .8 0 1.2.3.5.2.9.4 1.2.8zm-8.5 2.2l.1-.4v-.3-.4a1 1 0 0 0-.2-.5 1 1 0 0 0-.4-.2 1.6 1.6 0 0 0-.8 0 2.6 2.6 0 0 0-.8.3 2.5 2.5 0 0 0-.9 1.1l-.1.4v.7l.2.5.5.2h.7a2.5 2.5 0 0 0 .8-.3 2.8 2.8 0 0 0 1-1zm2.5-2.8c.4 0 .7-.1 1-.4.3-.3.4-.6.4-1s-.1-.7-.4-1c-.3-.3-.6-.4-1-.4s-.7.1-1 .4c-.3.3-.4.6-.4 1s.1.7.4 1c.3.3.6.4 1 .4zm5.4 4l.2-.5v-.4-.3a2.6 2.6 0 0 0-.3-.8 2.4 2.4 0 0 0-.7-.7 2.5 2.5 0 0 0-.8-.3 1.5 1.5 0 0 0-.8 0 1 1 0 0 0-.4.2 1 1 0 0 0-.2.5 1.5 1.5 0 0 0 0 .7v.4l.3.4.3.4a2.8 2.8 0 0 0 .8.5l.4.1h.7l.5-.2z" fill-rule="evenodd"/></svg>',"document-properties":'<svg width="24" height="24"><path d="M14.4 3H7a2 2 0 0 0-2 2v14c0 1.1.9 2 2 2h10a2 2 0 0 0 2-2V7.6L14.4 3zM17 19H7V5h6v4h4v10z" fill-rule="nonzero"/></svg>',drag:'<svg width="24" height="24"><path d="M13 5h2v2h-2V5zm0 4h2v2h-2V9zM9 9h2v2H9V9zm4 4h2v2h-2v-2zm-4 0h2v2H9v-2zm0 4h2v2H9v-2zm4 0h2v2h-2v-2zM9 5h2v2H9V5z" fill-rule="evenodd"/></svg>',duplicate:'<svg width="24" height="24"><g fill-rule="nonzero"><path d="M16 3v2H6v11H4V5c0-1.1.9-2 2-2h10zm3 8h-2V9h-7v10h9a2 2 0 0 1-2 2h-7a2 2 0 0 1-2-2V9c0-1.2.9-2 2-2h7a2 2 0 0 1 2 2v2z"/><path d="M17 14h1a1 1 0 0 1 0 2h-1v1a1 1 0 0 1-2 0v-1h-1a1 1 0 0 1 0-2h1v-1a1 1 0 0 1 2 0v1z"/></g></svg>',"edit-block":'<svg width="24" height="24"><path fill-rule="nonzero" d="M19.8 8.8l-9.4 9.4c-.2.2-.5.4-.9.4l-5.4 1.2 1.2-5.4.5-.8 9.4-9.4c.7-.7 1.8-.7 2.5 0l2.1 2.1c.7.7.7 1.8 0 2.5zm-2-.2l1-.9v-.3l-2.2-2.2a.3.3 0 0 0-.3 0l-1 1L18 8.5zm-1 1l-2.5-2.4-6 6 2.5 2.5 6-6zm-7 7.1l-2.6-2.4-.3.3-.1.2-.7 3 3.1-.6h.1l.4-.5z"/></svg>',"edit-image":'<svg width="24" height="24"><path d="M18 16h2V7a2 2 0 0 0-2-2H7v2h11v9zM6 17h15a1 1 0 0 1 0 2h-1v1a1 1 0 0 1-2 0v-1H6a2 2 0 0 1-2-2V7H3a1 1 0 1 1 0-2h1V4a1 1 0 1 1 2 0v13zm3-5.3l1.3 2 3-4.7 3.7 6H7l2-3.3z" fill-rule="nonzero"/></svg>',"embed-page":'<svg width="24" height="24"><path d="M19 6V5H5v14h2A13 13 0 0 1 19 6zm0 1.4c-.8.8-1.6 2.4-2.2 4.6H19V7.4zm0 5.6h-2.4c-.4 1.8-.6 3.8-.6 6h3v-6zm-4 6c0-2.2.2-4.2.6-6H13c-.7 1.8-1.1 3.8-1.1 6h3zm-4 0c0-2.2.4-4.2 1-6H9.6A12 12 0 0 0 8 19h3zM4 3h16c.6 0 1 .4 1 1v16c0 .6-.4 1-1 1H4a1 1 0 0 1-1-1V4c0-.6.4-1 1-1zm11.8 9c.4-1.9 1-3.4 1.8-4.5a9.2 9.2 0 0 0-4 4.5h2.2zm-3.4 0a12 12 0 0 1 2.8-4 12 12 0 0 0-5 4h2.2z" fill-rule="nonzero"/></svg>',embed:'<svg width="24" height="24"><path d="M4 3h16c.6 0 1 .4 1 1v16c0 .6-.4 1-1 1H4a1 1 0 0 1-1-1V4c0-.6.4-1 1-1zm1 2v14h14V5H5zm4.8 2.6l5.6 4a.5.5 0 0 1 0 .8l-5.6 4A.5.5 0 0 1 9 16V8a.5.5 0 0 1 .8-.4z" fill-rule="nonzero"/></svg>',emoji:'<svg width="24" height="24"><path d="M9 11c.6 0 1-.4 1-1s-.4-1-1-1a1 1 0 0 0-1 1c0 .6.4 1 1 1zm6 0c.6 0 1-.4 1-1s-.4-1-1-1a1 1 0 0 0-1 1c0 .6.4 1 1 1zm-3 5.5c2.1 0 4-1.5 4.4-3.5H7.6c.5 2 2.3 3.5 4.4 3.5zM12 4a8 8 0 1 0 0 16 8 8 0 0 0 0-16zm0 14.5a6.5 6.5 0 1 1 0-13 6.5 6.5 0 0 1 0 13z" fill-rule="nonzero"/></svg>',fill:'<svg width="24" height="26"><path d="M16.6 12l-9-9-1.4 1.4 2.4 2.4-5.2 5.1c-.5.6-.5 1.6 0 2.2L9 19.6a1.5 1.5 0 0 0 2.2 0l5.5-5.5c.5-.6.5-1.6 0-2.2zM5.2 13L10 8.2l4.8 4.8H5.2zM19 14.5s-2 2.2-2 3.5c0 1.1.9 2 2 2a2 2 0 0 0 2-2c0-1.3-2-3.5-2-3.5z" fill-rule="nonzero"/></svg>',"flip-horizontally":'<svg width="24" height="24"><path d="M14 19h2v-2h-2v2zm4-8h2V9h-2v2zM4 7v10c0 1.1.9 2 2 2h3v-2H6V7h3V5H6a2 2 0 0 0-2 2zm14-2v2h2a2 2 0 0 0-2-2zm-7 16h2V3h-2v18zm7-6h2v-2h-2v2zm-4-8h2V5h-2v2zm4 12a2 2 0 0 0 2-2h-2v2z" fill-rule="nonzero"/></svg>',"flip-vertically":'<svg width="24" height="24"><path d="M5 14v2h2v-2H5zm8 4v2h2v-2h-2zm4-14H7a2 2 0 0 0-2 2v3h2V6h10v3h2V6a2 2 0 0 0-2-2zm2 14h-2v2a2 2 0 0 0 2-2zM3 11v2h18v-2H3zm6 7v2h2v-2H9zm8-4v2h2v-2h-2zM5 18c0 1.1.9 2 2 2v-2H5z" fill-rule="nonzero"/></svg>',"format-painter":'<svg width="24" height="24"><path d="M18 5V4c0-.5-.4-1-1-1H5a1 1 0 0 0-1 1v4c0 .6.5 1 1 1h12c.6 0 1-.4 1-1V7h1v4H9v9c0 .6.4 1 1 1h2c.6 0 1-.4 1-1v-7h8V5h-3z" fill-rule="nonzero"/></svg>',fullscreen:'<svg width="24" height="24"><path d="M15.3 10l-1.2-1.3 2.9-3h-2.3a.9.9 0 1 1 0-1.7H19c.5 0 .9.4.9.9v4.4a.9.9 0 1 1-1.8 0V7l-2.9 3zm0 4l3 3v-2.3a.9.9 0 1 1 1.7 0V19c0 .5-.4.9-.9.9h-4.4a.9.9 0 1 1 0-1.8H17l-3-2.9 1.3-1.2zM10 15.4l-2.9 3h2.3a.9.9 0 1 1 0 1.7H5a.9.9 0 0 1-.9-.9v-4.4a.9.9 0 1 1 1.8 0V17l2.9-3 1.2 1.3zM8.7 10L5.7 7v2.3a.9.9 0 0 1-1.7 0V5c0-.5.4-.9.9-.9h4.4a.9.9 0 0 1 0 1.8H7l3 2.9-1.3 1.2z" fill-rule="nonzero"/></svg>',gallery:'<svg width="24" height="24"><path fill-rule="nonzero" d="M5 15.7l2.3-2.2c.3-.3.7-.3 1 0L11 16l5.1-5c.3-.4.8-.4 1 0l2 1.9V8H5v7.7zM5 18V19h3l1.8-1.9-2-2L5 17.9zm14-3l-2.5-2.4-6.4 6.5H19v-4zM4 6h16c.6 0 1 .4 1 1v13c0 .6-.4 1-1 1H4a1 1 0 0 1-1-1V7c0-.6.4-1 1-1zm6 7a2 2 0 1 1 0-4 2 2 0 0 1 0 4zM4.5 4h15a.5.5 0 1 1 0 1h-15a.5.5 0 0 1 0-1zm2-2h11a.5.5 0 1 1 0 1h-11a.5.5 0 0 1 0-1z"/></svg>',gamma:'<svg width="24" height="24"><path d="M4 3h16c.6 0 1 .4 1 1v16c0 .6-.4 1-1 1H4a1 1 0 0 1-1-1V4c0-.6.4-1 1-1zm1 2v14h14V5H5zm6.5 11.8V14L9.2 8.7a5.1 5.1 0 0 0-.4-.8l-.1-.2H8 8v-1l.3-.1.3-.1h.7a1 1 0 0 1 .6.5l.1.3a8.5 8.5 0 0 1 .3.6l1.9 4.6 2-5.2a1 1 0 0 1 1-.6.5.5 0 0 1 .5.6L13 14v2.8a.7.7 0 0 1-1.4 0z" fill-rule="nonzero"/></svg>',help:'<svg width="24" height="24"><g fill-rule="evenodd"><path d="M12 5.5a6.5 6.5 0 0 0-6 9 6.3 6.3 0 0 0 1.4 2l1 1a6.3 6.3 0 0 0 3.6 1 6.5 6.5 0 0 0 6-9 6.3 6.3 0 0 0-1.4-2l-1-1a6.3 6.3 0 0 0-3.6-1zM12 4a7.8 7.8 0 0 1 5.7 2.3A8 8 0 1 1 12 4z"/><path d="M9.6 9.7a.7.7 0 0 1-.7-.8c0-1.1 1.5-1.8 3.2-1.8 1.8 0 3.2.8 3.2 2.4 0 1.4-.4 2.1-1.5 2.8-.2 0-.3.1-.3.2a2 2 0 0 0-.8.8.8.8 0 0 1-1.4-.6c.3-.7.8-1 1.3-1.5l.4-.2c.7-.4.8-.6.8-1.5 0-.5-.6-.9-1.7-.9-.5 0-1 .1-1.4.3-.2 0-.3.1-.3.2v-.2c0 .4-.4.8-.8.8z" fill-rule="nonzero"/><circle cx="12" cy="16" r="1"/></g></svg>',"highlight-bg-color":'<svg width="24" height="24"><g fill-rule="evenodd"><path id="tox-icon-highlight-bg-color__color" d="M3 18h18v3H3z"/><path fill-rule="nonzero" d="M7.7 16.7H3l3.3-3.3-.7-.8L10.2 8l4 4.1-4 4.2c-.2.2-.6.2-.8 0l-.6-.7-1.1 1.1zm5-7.5L11 7.4l3-2.9a2 2 0 0 1 2.6 0L18 6c.7.7.7 2 0 2.7l-2.9 2.9-1.8-1.8-.5-.6"/></g></svg>',home:'<svg width="24" height="24"><path fill-rule="nonzero" d="M10 20v-6h4v6h5v-8h3L12 3 2 12h3v8z"/></svg>',"horizontal-rule":'<svg width="24" height="24"><path d="M4 11h16v2H4z" fill-rule="evenodd"/></svg>',"image-options":'<svg width="24" height="24"><path d="M6 10a2 2 0 0 0-2 2c0 1.1.9 2 2 2a2 2 0 0 0 2-2 2 2 0 0 0-2-2zm12 0a2 2 0 0 0-2 2c0 1.1.9 2 2 2a2 2 0 0 0 2-2 2 2 0 0 0-2-2zm-6 0a2 2 0 0 0-2 2c0 1.1.9 2 2 2a2 2 0 0 0 2-2 2 2 0 0 0-2-2z" fill-rule="nonzero"/></svg>',image:'<svg width="24" height="24"><path d="M5 15.7l3.3-3.2c.3-.3.7-.3 1 0L12 15l4.1-4c.3-.4.8-.4 1 0l2 1.9V5H5v10.7zM5 18V19h3l2.8-2.9-2-2L5 17.9zm14-3l-2.5-2.4-6.4 6.5H19v-4zM4 3h16c.6 0 1 .4 1 1v16c0 .6-.4 1-1 1H4a1 1 0 0 1-1-1V4c0-.6.4-1 1-1zm6 8a2 2 0 1 0 0-4 2 2 0 0 0 0 4z" fill-rule="nonzero"/></svg>',indent:'<svg width="24" height="24"><path d="M7 5h12c.6 0 1 .4 1 1s-.4 1-1 1H7a1 1 0 1 1 0-2zm5 4h7c.6 0 1 .4 1 1s-.4 1-1 1h-7a1 1 0 0 1 0-2zm0 4h7c.6 0 1 .4 1 1s-.4 1-1 1h-7a1 1 0 0 1 0-2zm-5 4h12a1 1 0 0 1 0 2H7a1 1 0 0 1 0-2zm-2.6-3.8L6.2 12l-1.8-1.2a1 1 0 0 1 1.2-1.6l3 2a1 1 0 0 1 0 1.6l-3 2a1 1 0 1 1-1.2-1.6z" fill-rule="evenodd"/></svg>',info:'<svg width="24" height="24"><path d="M12 4a7.8 7.8 0 0 1 5.7 2.3A8 8 0 1 1 12 4zm-1 3v2h2V7h-2zm3 10v-1h-1v-5h-3v1h1v4h-1v1h4z" fill-rule="evenodd"/></svg>',"insert-character":'<svg width="24" height="24"><path d="M15 18h4l1-2v4h-6v-3.3l1.4-1a6 6 0 0 0 1.8-2.9 6.3 6.3 0 0 0-.1-4.1 5.8 5.8 0 0 0-3-3.2c-.6-.3-1.3-.5-2.1-.5a5.1 5.1 0 0 0-3.9 1.8 6.3 6.3 0 0 0-1.3 6 6.2 6.2 0 0 0 1.8 3l1.4.9V20H4v-4l1 2h4v-.5l-2-1L5.4 15A6.5 6.5 0 0 1 4 11c0-1 .2-1.9.6-2.7A7 7 0 0 1 6.3 6C7.1 5.4 8 5 9 4.5c1-.3 2-.5 3.1-.5a8.8 8.8 0 0 1 5.7 2 7 7 0 0 1 1.7 2.3 6 6 0 0 1 .2 4.8c-.2.7-.6 1.3-1 1.9a7.6 7.6 0 0 1-3.6 2.5v.5z" fill-rule="evenodd"/></svg>',"insert-time":'<svg width="24" height="24"><g fill-rule="nonzero"><path d="M12 19a7 7 0 1 0 0-14 7 7 0 0 0 0 14zm0 2a9 9 0 1 1 0-18 9 9 0 0 1 0 18z"/><path d="M16 12h-3V7c0-.6-.4-1-1-1a1 1 0 0 0-1 1v7h5c.6 0 1-.4 1-1s-.4-1-1-1z"/></g></svg>',invert:'<svg width="24" height="24"><path d="M18 19.3L16.5 18a5.8 5.8 0 0 1-3.1 1.9 6.1 6.1 0 0 1-5.5-1.6A5.8 5.8 0 0 1 6 14v-.3l.1-1.2A13.9 13.9 0 0 1 7.7 9l-3-3 .7-.8 2.8 2.9 9 8.9 1.5 1.6-.7.6zm0-5.5v.3l-.1 1.1-.4 1-1.2-1.2a4.3 4.3 0 0 0 .2-1v-.2c0-.4 0-.8-.2-1.3l-.5-1.4a14.8 14.8 0 0 0-3-4.2L12 6a26.1 26.1 0 0 0-2.2 2.5l-1-1a20.9 20.9 0 0 1 2.9-3.3L12 4l1 .8a22.2 22.2 0 0 1 4 5.4c.6 1.2 1 2.4 1 3.6z" fill-rule="evenodd"/></svg>',italic:'<svg width="24" height="24"><path d="M16.7 4.7l-.1.9h-.3c-.6 0-1 0-1.4.3-.3.3-.4.6-.5 1.1l-2.1 9.8v.6c0 .5.4.8 1.4.8h.2l-.2.8H8l.2-.8h.2c1.1 0 1.8-.5 2-1.5l2-9.8.1-.5c0-.6-.4-.8-1.4-.8h-.3l.2-.9h5.8z" fill-rule="evenodd"/></svg>',line:'<svg width="24" height="24"><path d="M15 9l-8 8H4v-3l8-8 3 3zm1-1l-3-3 1-1h1c-.2 0 0 0 0 0l2 2s0 .2 0 0v1l-1 1zM4 18h16v2H4v-2z" fill-rule="evenodd"/></svg>',link:'<svg width="24" height="24"><path d="M6.2 12.3a1 1 0 0 1 1.4 1.4l-2.1 2a2 2 0 1 0 2.7 2.8l4.8-4.8a1 1 0 0 0 0-1.4 1 1 0 1 1 1.4-1.3 2.9 2.9 0 0 1 0 4L9.6 20a3.9 3.9 0 0 1-5.5-5.5l2-2zm11.6-.6a1 1 0 0 1-1.4-1.4l2-2a2 2 0 1 0-2.6-2.8L11 10.3a1 1 0 0 0 0 1.4A1 1 0 1 1 9.6 13a2.9 2.9 0 0 1 0-4L14.4 4a3.9 3.9 0 0 1 5.5 5.5l-2 2z" fill-rule="nonzero"/></svg>',"list-bull-circle":'<svg width="48" height="48"><g fill-rule="evenodd"><path d="M11 16a2 2 0 1 0 0-4 2 2 0 0 0 0 4zm0 1a3 3 0 1 1 0-6 3 3 0 0 1 0 6zM11 26a2 2 0 1 0 0-4 2 2 0 0 0 0 4zm0 1a3 3 0 1 1 0-6 3 3 0 0 1 0 6zM11 36a2 2 0 1 0 0-4 2 2 0 0 0 0 4zm0 1a3 3 0 1 1 0-6 3 3 0 0 1 0 6z" fill-rule="nonzero"/><path opacity=".2" d="M18 12h22v4H18zM18 22h22v4H18zM18 32h22v4H18z"/></g></svg>',"list-bull-default":'<svg width="48" height="48"><g fill-rule="evenodd"><circle cx="11" cy="14" r="3"/><circle cx="11" cy="24" r="3"/><circle cx="11" cy="34" r="3"/><path opacity=".2" d="M18 12h22v4H18zM18 22h22v4H18zM18 32h22v4H18z"/></g></svg>',"list-bull-square":'<svg width="48" height="48"><g fill-rule="evenodd"><path d="M8 11h6v6H8zM8 21h6v6H8zM8 31h6v6H8z"/><path opacity=".2" d="M18 12h22v4H18zM18 22h22v4H18zM18 32h22v4H18z"/></g></svg>',"list-num-default-rtl":'<svg width="48" height="48"><g fill-rule="evenodd"><path opacity=".2" d="M8 12h22v4H8zM8 22h22v4H8zM8 32h22v4H8z"/><path d="M37.4 17v-4.8l-1.6 1v-1.1l1.6-1h1.2V17zM33.3 17.1c-.5 0-.8-.3-.8-.7 0-.4.3-.7.8-.7.4 0 .7.3.7.7 0 .4-.3.7-.7.7zm1.7 5.7c0-1.2 1-2 2.2-2 1.3 0 2.1.8 2.1 1.8 0 .7-.3 1.2-1.3 2.2l-1.2 1v.2h2.6v1h-4.3v-.9l2-1.9c.8-.8 1-1.1 1-1.5 0-.5-.4-.8-1-.8-.5 0-.9.3-.9.9H35zm-1.7 4.3c-.5 0-.8-.3-.8-.7 0-.4.3-.7.8-.7.4 0 .7.3.7.7 0 .4-.3.7-.7.7zm3.2 7.3v-1h.7c.6 0 1-.3 1-.8 0-.4-.4-.7-1-.7s-1 .3-1 .8H35c0-1.1 1-1.8 2.2-1.8 1.2 0 2.1.6 2.1 1.6 0 .7-.4 1.2-1 1.3v.1c.7.1 1.3.7 1.3 1.4 0 1-1 1.9-2.4 1.9-1.3 0-2.2-.8-2.3-2h1.2c0 .6.5 1 1.1 1 .6 0 1-.4 1-1 0-.5-.3-.8-1-.8h-.7zm-3.3 2.7c-.4 0-.7-.3-.7-.7 0-.4.3-.7.7-.7.5 0 .8.3.8.7 0 .4-.3.7-.8.7z"/></g></svg>',"list-num-default":'<svg width="48" height="48"><g fill-rule="evenodd"><path opacity=".2" d="M18 12h22v4H18zM18 22h22v4H18zM18 32h22v4H18z"/><path d="M10 17v-4.8l-1.5 1v-1.1l1.6-1h1.2V17h-1.2zm3.6.1c-.4 0-.7-.3-.7-.7 0-.4.3-.7.7-.7.5 0 .7.3.7.7 0 .4-.2.7-.7.7zm-5 5.7c0-1.2.8-2 2.1-2s2.1.8 2.1 1.8c0 .7-.3 1.2-1.4 2.2l-1.1 1v.2h2.6v1H8.6v-.9l2-1.9c.8-.8 1-1.1 1-1.5 0-.5-.4-.8-1-.8-.5 0-.9.3-.9.9H8.5zm6.3 4.3c-.5 0-.7-.3-.7-.7 0-.4.2-.7.7-.7.4 0 .7.3.7.7 0 .4-.3.7-.7.7zM10 34.4v-1h.7c.6 0 1-.3 1-.8 0-.4-.4-.7-1-.7s-1 .3-1 .8H8.6c0-1.1 1-1.8 2.2-1.8 1.3 0 2.1.6 2.1 1.6 0 .7-.4 1.2-1 1.3v.1c.8.1 1.3.7 1.3 1.4 0 1-1 1.9-2.4 1.9-1.3 0-2.2-.8-2.3-2h1.2c0 .6.5 1 1.1 1 .7 0 1-.4 1-1 0-.5-.3-.8-1-.8h-.7zm4.7 2.7c-.4 0-.7-.3-.7-.7 0-.4.3-.7.7-.7.5 0 .8.3.8.7 0 .4-.3.7-.8.7z"/></g></svg>',"list-num-lower-alpha-rtl":'<svg width="48" height="48"><g fill-rule="evenodd"><path opacity=".2" d="M8 12h22v4H8zM8 22h22v4H8zM8 32h22v4H8z"/><path d="M36.5 16c-.9 0-1.5-.5-1.5-1.3s.6-1.3 1.8-1.4h1v-.4c0-.4-.2-.6-.7-.6-.4 0-.7.1-.8.4h-1.1c0-.8.8-1.4 2-1.4S39 12 39 13V16h-1.2v-.6c-.3.4-.8.7-1.4.7zm.4-.8c.6 0 1-.4 1-.9V14h-1c-.5.1-.7.3-.7.6 0 .4.3.6.7.6zM33.1 16.1c-.4 0-.7-.3-.7-.7 0-.4.3-.7.7-.7.5 0 .8.3.8.7 0 .4-.3.7-.8.7zM37.7 26c-.7 0-1.2-.2-1.5-.7v.7H35v-6.3h1.2v2.5c.3-.5.8-.9 1.5-.9 1.1 0 1.8 1 1.8 2.4 0 1.5-.7 2.4-1.8 2.4zm-.5-3.6c-.6 0-1 .5-1 1.3s.4 1.4 1 1.4c.7 0 1-.6 1-1.4 0-.8-.3-1.3-1-1.3zM33.2 26.1c-.4 0-.7-.3-.7-.7 0-.4.3-.7.7-.7.5 0 .8.3.8.7 0 .4-.3.7-.8.7zm6 7h-1c-.1-.5-.4-.8-1-.8s-1 .5-1 1.4c0 1 .4 1.4 1 1.4.5 0 .9-.2 1-.7h1c0 1-.8 1.7-2 1.7-1.4 0-2.2-.9-2.2-2.4s.8-2.4 2.2-2.4c1.2 0 2 .7 2 1.7zm-6.1 3c-.5 0-.7-.3-.7-.7 0-.4.2-.7.7-.7.4 0 .7.3.7.7 0 .4-.3.7-.7.7z"/></g></svg>',"list-num-lower-alpha":'<svg width="48" height="48"><g fill-rule="evenodd"><path opacity=".2" d="M18 12h22v4H18zM18 22h22v4H18zM18 32h22v4H18z"/><path d="M10.3 15.2c.5 0 1-.4 1-.9V14h-1c-.5.1-.8.3-.8.6 0 .4.3.6.8.6zm-.4.9c-1 0-1.5-.6-1.5-1.4 0-.8.6-1.3 1.7-1.4h1.1v-.4c0-.4-.2-.6-.7-.6-.5 0-.8.1-.9.4h-1c0-.8.8-1.4 2-1.4 1.1 0 1.8.6 1.8 1.6V16h-1.1v-.6h-.1c-.2.4-.7.7-1.3.7zm4.6 0c-.5 0-.7-.3-.7-.7 0-.4.2-.7.7-.7.4 0 .7.3.7.7 0 .4-.3.7-.7.7zm-3.2 10c-.6 0-1.2-.3-1.4-.8v.7H8.5v-6.3H10v2.5c.3-.5.8-.9 1.4-.9 1.2 0 1.9 1 1.9 2.4 0 1.5-.7 2.4-1.9 2.4zm-.4-3.7c-.7 0-1 .5-1 1.3s.3 1.4 1 1.4c.6 0 1-.6 1-1.4 0-.8-.4-1.3-1-1.3zm4 3.7c-.5 0-.7-.3-.7-.7 0-.4.2-.7.7-.7.4 0 .7.3.7.7 0 .4-.3.7-.7.7zm-2.2 7h-1.2c0-.5-.4-.8-.9-.8-.6 0-1 .5-1 1.4 0 1 .4 1.4 1 1.4.5 0 .8-.2 1-.7h1c0 1-.8 1.7-2 1.7-1.4 0-2.2-.9-2.2-2.4s.8-2.4 2.2-2.4c1.2 0 2 .7 2 1.7zm1.8 3c-.5 0-.8-.3-.8-.7 0-.4.3-.7.8-.7.4 0 .7.3.7.7 0 .4-.3.7-.7.7z"/></g></svg>',"list-num-lower-greek-rtl":'<svg width="48" height="48"><g fill-rule="evenodd"><path opacity=".2" d="M8 12h22v4H8zM8 22h22v4H8zM8 32h22v4H8z"/><path d="M37.4 16c-1.2 0-2-.8-2-2.3 0-1.5.8-2.4 2-2.4.6 0 1 .4 1.3 1v-.9H40v3.2c0 .4.1.5.4.5h.2v.9h-.6c-.6 0-1-.2-1-.7h-.2c-.2.4-.7.8-1.3.8zm.3-1c.6 0 1-.5 1-1.3s-.4-1.3-1-1.3-1 .5-1 1.3.4 1.4 1 1.4zM33.3 16.1c-.5 0-.8-.3-.8-.7 0-.4.3-.7.8-.7.4 0 .7.3.7.7 0 .4-.3.7-.7.7zM36 21.9c0-1.5.8-2.3 2.1-2.3 1.2 0 2 .6 2 1.6 0 .6-.3 1-.9 1.3.9.3 1.3.8 1.3 1.7 0 1.2-.7 1.9-1.8 1.9-.6 0-1.1-.3-1.4-.8v2.2H36V22zm1.8 1.2v-1h.3c.5 0 .9-.2.9-.7 0-.5-.3-.8-.9-.8-.5 0-.8.3-.8 1v2.2c0 .8.4 1.3 1 1.3s1-.4 1-1-.4-1-1.2-1h-.3zM33.3 26.1c-.5 0-.8-.3-.8-.7 0-.4.3-.7.8-.7.4 0 .7.3.7.7 0 .4-.3.7-.7.7zM37.1 34.6L34.8 30h1.4l1.7 3.5 1.7-3.5h1.1l-2.2 4.6v.1c.5.8.7 1.4.7 1.8 0 .4-.2.8-.4 1-.2.2-.6.3-1 .3-.9 0-1.3-.4-1.3-1.2 0-.5.2-1 .5-1.7l.1-.2zm.7 1a2 2 0 0 0-.4.9c0 .3.1.4.4.4.3 0 .4-.1.4-.4 0-.2-.1-.6-.4-1zM33.3 36.1c-.5 0-.8-.3-.8-.7 0-.4.3-.7.8-.7.4 0 .7.3.7.7 0 .4-.3.7-.7.7z"/></g></svg>',"list-num-lower-greek":'<svg width="48" height="48"><g fill-rule="evenodd"><path opacity=".2" d="M18 12h22v4H18zM18 22h22v4H18zM18 32h22v4H18z"/><path d="M10.5 15c.7 0 1-.5 1-1.3s-.3-1.3-1-1.3c-.5 0-.9.5-.9 1.3s.4 1.4 1 1.4zm-.3 1c-1.1 0-1.8-.8-1.8-2.3 0-1.5.7-2.4 1.8-2.4.7 0 1.1.4 1.3 1h.1v-.9h1.2v3.2c0 .4.1.5.4.5h.2v.9h-.6c-.6 0-1-.2-1.1-.7h-.1c-.2.4-.7.8-1.4.8zm5 .1c-.5 0-.8-.3-.8-.7 0-.4.3-.7.7-.7.5 0 .8.3.8.7 0 .4-.3.7-.8.7zm-4.9 7v-1h.3c.6 0 1-.2 1-.7 0-.5-.4-.8-1-.8-.5 0-.8.3-.8 1v2.2c0 .8.4 1.3 1.1 1.3.6 0 1-.4 1-1s-.5-1-1.3-1h-.3zM8.6 22c0-1.5.7-2.3 2-2.3 1.2 0 2 .6 2 1.6 0 .6-.3 1-.8 1.3.8.3 1.3.8 1.3 1.7 0 1.2-.8 1.9-1.9 1.9-.6 0-1.1-.3-1.3-.8v2.2H8.5V22zm6.2 4.2c-.4 0-.7-.3-.7-.7 0-.4.3-.7.7-.7.5 0 .7.3.7.7 0 .4-.2.7-.7.7zm-4.5 8.5L8 30h1.4l1.7 3.5 1.7-3.5h1.1l-2.2 4.6v.1c.5.8.7 1.4.7 1.8 0 .4-.1.8-.4 1-.2.2-.6.3-1 .3-.9 0-1.3-.4-1.3-1.2 0-.5.2-1 .5-1.7l.1-.2zm.7 1a2 2 0 0 0-.4.9c0 .3.1.4.4.4.3 0 .4-.1.4-.4 0-.2-.1-.6-.4-1zm4.5.5c-.5 0-.8-.3-.8-.7 0-.4.3-.7.8-.7.4 0 .7.3.7.7 0 .4-.3.7-.7.7z"/></g></svg>',"list-num-lower-roman-rtl":'<svg width="48" height="48"><g fill-rule="evenodd"><path opacity=".2" d="M8 12h22v4H8zM8 22h22v4H8zM8 32h22v4H8z"/><path d="M32.9 16v-1.2h-1.3V16H33zm0 10v-1.2h-1.3V26H33zm0 10v-1.2h-1.3V36H33z"/><path fill-rule="nonzero" d="M36 21h-1.5v5H36zM36 31h-1.5v5H36zM39 21h-1.5v5H39zM39 31h-1.5v5H39zM42 31h-1.5v5H42zM36 11h-1.5v5H36zM36 19h-1.5v1H36zM36 29h-1.5v1H36zM39 19h-1.5v1H39zM39 29h-1.5v1H39zM42 29h-1.5v1H42zM36 9h-1.5v1H36z"/></g></svg>',"list-num-lower-roman":'<svg width="48" height="48"><g fill-rule="evenodd"><path opacity=".2" d="M18 12h22v4H18zM18 22h22v4H18zM18 32h22v4H18z"/><path d="M15.1 16v-1.2h1.3V16H15zm0 10v-1.2h1.3V26H15zm0 10v-1.2h1.3V36H15z"/><path fill-rule="nonzero" d="M12 21h1.5v5H12zM12 31h1.5v5H12zM9 21h1.5v5H9zM9 31h1.5v5H9zM6 31h1.5v5H6zM12 11h1.5v5H12zM12 19h1.5v1H12zM12 29h1.5v1H12zM9 19h1.5v1H9zM9 29h1.5v1H9zM6 29h1.5v1H6zM12 9h1.5v1H12z"/></g></svg>',"list-num-upper-alpha-rtl":'<svg width="48" height="48"><g fill-rule="evenodd"><path opacity=".2" d="M8 12h22v4H8zM8 22h22v4H8zM8 32h22v4H8z"/><path d="M39.3 17l-.5-1.4h-2l-.5 1.4H35l2-6h1.6l2 6h-1.3zm-1.6-4.7l-.7 2.3h1.6l-.8-2.3zM33.4 17c-.4 0-.7-.3-.7-.7 0-.4.3-.7.7-.7.5 0 .7.3.7.7 0 .4-.2.7-.7.7zm4.7 9.9h-2.7v-6H38c1.2 0 1.9.6 1.9 1.5 0 .6-.5 1.2-1 1.3.7.1 1.3.7 1.3 1.5 0 1-.8 1.7-2 1.7zm-1.4-5v1.5h1c.6 0 1-.3 1-.8 0-.4-.4-.7-1-.7h-1zm0 4h1.1c.7 0 1.1-.3 1.1-.8 0-.6-.4-.9-1.1-.9h-1.1V26zM33 27.1c-.5 0-.8-.3-.8-.7 0-.4.3-.7.8-.7.4 0 .7.3.7.7 0 .4-.3.7-.7.7zm4.9 10c-1.8 0-2.8-1.1-2.8-3.1s1-3.1 2.8-3.1c1.4 0 2.5.9 2.6 2.2h-1.3c0-.7-.6-1.1-1.3-1.1-1 0-1.6.7-1.6 2s.6 2 1.6 2c.7 0 1.2-.4 1.4-1h1.2c-.1 1.3-1.2 2.2-2.6 2.2zm-4.5 0c-.5 0-.8-.3-.8-.7 0-.4.3-.7.8-.7.4 0 .7.3.7.7 0 .4-.3.7-.7.7z"/></g></svg>',"list-num-upper-alpha":'<svg width="48" height="48"><g fill-rule="evenodd"><path opacity=".2" d="M18 12h22v4H18zM18 22h22v4H18zM18 32h22v4H18z"/><path d="M12.6 17l-.5-1.4h-2L9.5 17H8.3l2-6H12l2 6h-1.3zM11 12.3l-.7 2.3h1.6l-.8-2.3zm4.7 4.8c-.4 0-.7-.3-.7-.7 0-.4.3-.7.7-.7.5 0 .7.3.7.7 0 .4-.2.7-.7.7zM11.4 27H8.7v-6h2.6c1.2 0 1.9.6 1.9 1.5 0 .6-.5 1.2-1 1.3.7.1 1.3.7 1.3 1.5 0 1-.8 1.7-2 1.7zM10 22v1.5h1c.6 0 1-.3 1-.8 0-.4-.4-.7-1-.7h-1zm0 4H11c.7 0 1.1-.3 1.1-.8 0-.6-.4-.9-1.1-.9H10V26zm5.4 1.1c-.5 0-.8-.3-.8-.7 0-.4.3-.7.8-.7.4 0 .7.3.7.7 0 .4-.3.7-.7.7zm-4.1 10c-1.8 0-2.8-1.1-2.8-3.1s1-3.1 2.8-3.1c1.4 0 2.5.9 2.6 2.2h-1.3c0-.7-.6-1.1-1.3-1.1-1 0-1.6.7-1.6 2s.6 2 1.6 2c.7 0 1.2-.4 1.4-1h1.2c-.1 1.3-1.2 2.2-2.6 2.2zm4.5 0c-.5 0-.8-.3-.8-.7 0-.4.3-.7.8-.7.4 0 .7.3.7.7 0 .4-.3.7-.7.7z"/></g></svg>',"list-num-upper-roman-rtl":'<svg width="48" height="48"><g fill-rule="evenodd"><path opacity=".2" d="M8 12h22v4H8zM8 22h22v4H8zM8 32h22v4H8z"/><path d="M31.6 17v-1.2H33V17h-1.3zm0 10v-1.2H33V27h-1.3zm0 10v-1.2H33V37h-1.3z"/><path fill-rule="nonzero" d="M34.5 20H36v7h-1.5zM34.5 30H36v7h-1.5zM37.5 20H39v7h-1.5zM37.5 30H39v7h-1.5zM40.5 30H42v7h-1.5zM34.5 10H36v7h-1.5z"/></g></svg>',"list-num-upper-roman":'<svg width="48" height="48"><g fill-rule="evenodd"><path opacity=".2" d="M18 12h22v4H18zM18 22h22v4H18zM18 32h22v4H18z"/><path d="M15.1 17v-1.2h1.3V17H15zm0 10v-1.2h1.3V27H15zm0 10v-1.2h1.3V37H15z"/><path fill-rule="nonzero" d="M12 20h1.5v7H12zM12 30h1.5v7H12zM9 20h1.5v7H9zM9 30h1.5v7H9zM6 30h1.5v7H6zM12 10h1.5v7H12z"/></g></svg>',lock:'<svg width="24" height="24"><path d="M16.3 11c.2 0 .3 0 .5.2l.2.6v7.4c0 .3 0 .4-.2.6l-.6.2H7.8c-.3 0-.4 0-.6-.2a.7.7 0 0 1-.2-.6v-7.4c0-.3 0-.4.2-.6l.5-.2H8V8c0-.8.3-1.5.9-2.1.6-.6 1.3-.9 2.1-.9h2c.8 0 1.5.3 2.1.9.6.6.9 1.3.9 2.1v3h.3zM10 8v3h4V8a1 1 0 0 0-.3-.7A1 1 0 0 0 13 7h-2a1 1 0 0 0-.7.3 1 1 0 0 0-.3.7z" fill-rule="evenodd"/></svg>',ltr:'<svg width="24" height="24"><path d="M11 5h7a1 1 0 0 1 0 2h-1v11a1 1 0 0 1-2 0V7h-2v11a1 1 0 0 1-2 0v-6c-.5 0-1 0-1.4-.3A3.4 3.4 0 0 1 7.8 10a3.3 3.3 0 0 1 0-2.8 3.4 3.4 0 0 1 1.8-1.8L11 5zM4.4 16.2L6.2 15l-1.8-1.2a1 1 0 0 1 1.2-1.6l3 2a1 1 0 0 1 0 1.6l-3 2a1 1 0 1 1-1.2-1.6z" fill-rule="evenodd"/></svg>',"more-drawer":'<svg width="24" height="24"><path d="M6 10a2 2 0 0 0-2 2c0 1.1.9 2 2 2a2 2 0 0 0 2-2 2 2 0 0 0-2-2zm12 0a2 2 0 0 0-2 2c0 1.1.9 2 2 2a2 2 0 0 0 2-2 2 2 0 0 0-2-2zm-6 0a2 2 0 0 0-2 2c0 1.1.9 2 2 2a2 2 0 0 0 2-2 2 2 0 0 0-2-2z" fill-rule="nonzero"/></svg>',"new-document":'<svg width="24" height="24"><path d="M14.4 3H7a2 2 0 0 0-2 2v14c0 1.1.9 2 2 2h10a2 2 0 0 0 2-2V7.6L14.4 3zM17 19H7V5h6v4h4v10z" fill-rule="nonzero"/></svg>',"new-tab":'<svg width="24" height="24"><path d="M15 13l2-2v8H5V7h8l-2 2H7v8h8v-4zm4-8v5.5l-2-2-5.6 5.5H10v-1.4L15.5 7l-2-2H19z" fill-rule="evenodd"/></svg>',"non-breaking":'<svg width="24" height="24"><path d="M11 11H8a1 1 0 1 1 0-2h3V6c0-.6.4-1 1-1s1 .4 1 1v3h3c.6 0 1 .4 1 1s-.4 1-1 1h-3v3c0 .6-.4 1-1 1a1 1 0 0 1-1-1v-3zm10 4v5H3v-5c0-.6.4-1 1-1s1 .4 1 1v3h14v-3c0-.6.4-1 1-1s1 .4 1 1z" fill-rule="evenodd"/></svg>',notice:'<svg width="24" height="24"><path d="M17.8 9.8L15.4 4 20 8.5v7L15.5 20h-7L4 15.5v-7L8.5 4h7l2.3 5.8zm0 0l2.2 5.7-2.3-5.8zM13 17v-2h-2v2h2zm0-4V7h-2v6h2z" fill-rule="evenodd"/></svg>',"ordered-list-rtl":'<svg width="24" height="24"><path d="M6 17h8a1 1 0 0 1 0 2H6a1 1 0 0 1 0-2zm0-6h8a1 1 0 0 1 0 2H6a1 1 0 0 1 0-2zm0-6h8a1 1 0 0 1 0 2H6a1 1 0 1 1 0-2zm13-1v3.5a.5.5 0 1 1-1 0V5h-.5a.5.5 0 1 1 0-1H19zm-1 8.8l.2.2h1.3a.5.5 0 1 1 0 1h-1.6a1 1 0 0 1-.9-1V13c0-.4.3-.8.6-1l1.2-.4.2-.3a.2.2 0 0 0-.2-.2h-1.3a.5.5 0 0 1-.5-.5c0-.3.2-.5.5-.5h1.6c.5 0 .9.4.9 1v.1c0 .4-.3.8-.6 1l-1.2.4-.2.3zm2 4.2v2c0 .6-.4 1-1 1h-1.5a.5.5 0 0 1 0-1h1.2a.3.3 0 1 0 0-.6h-1.3a.4.4 0 1 1 0-.8h1.3a.3.3 0 0 0 0-.6h-1.2a.5.5 0 1 1 0-1H19c.6 0 1 .4 1 1z" fill-rule="evenodd"/></svg>',"ordered-list":'<svg width="24" height="24"><path d="M10 17h8c.6 0 1 .4 1 1s-.4 1-1 1h-8a1 1 0 0 1 0-2zm0-6h8c.6 0 1 .4 1 1s-.4 1-1 1h-8a1 1 0 0 1 0-2zm0-6h8c.6 0 1 .4 1 1s-.4 1-1 1h-8a1 1 0 1 1 0-2zM6 4v3.5c0 .3-.2.5-.5.5a.5.5 0 0 1-.5-.5V5h-.5a.5.5 0 0 1 0-1H6zm-1 8.8l.2.2h1.3c.3 0 .5.2.5.5s-.2.5-.5.5H4.9a1 1 0 0 1-.9-1V13c0-.4.3-.8.6-1l1.2-.4.2-.3a.2.2 0 0 0-.2-.2H4.5a.5.5 0 0 1-.5-.5c0-.3.2-.5.5-.5h1.6c.5 0 .9.4.9 1v.1c0 .4-.3.8-.6 1l-1.2.4-.2.3zM7 17v2c0 .6-.4 1-1 1H4.5a.5.5 0 0 1 0-1h1.2c.2 0 .3-.1.3-.3 0-.2-.1-.3-.3-.3H4.4a.4.4 0 1 1 0-.8h1.3c.2 0 .3-.1.3-.3 0-.2-.1-.3-.3-.3H4.5a.5.5 0 1 1 0-1H6c.6 0 1 .4 1 1z" fill-rule="evenodd"/></svg>',orientation:'<svg width="24" height="24"><path d="M7.3 6.4L1 13l6.4 6.5 6.5-6.5-6.5-6.5zM3.7 13l3.6-3.7L11 13l-3.7 3.7-3.6-3.7zM12 6l2.8 2.7c.3.3.3.8 0 1-.3.4-.9.4-1.2 0L9.2 5.7a.8.8 0 0 1 0-1.2L13.6.2c.3-.3.9-.3 1.2 0 .3.3.3.8 0 1.1L12 4h1a9 9 0 1 1-4.3 16.9l1.5-1.5A7 7 0 1 0 13 6h-1z" fill-rule="nonzero"/></svg>',outdent:'<svg width="24" height="24"><path d="M7 5h12c.6 0 1 .4 1 1s-.4 1-1 1H7a1 1 0 1 1 0-2zm5 4h7c.6 0 1 .4 1 1s-.4 1-1 1h-7a1 1 0 0 1 0-2zm0 4h7c.6 0 1 .4 1 1s-.4 1-1 1h-7a1 1 0 0 1 0-2zm-5 4h12a1 1 0 0 1 0 2H7a1 1 0 0 1 0-2zm1.6-3.8a1 1 0 0 1-1.2 1.6l-3-2a1 1 0 0 1 0-1.6l3-2a1 1 0 0 1 1.2 1.6L6.8 12l1.8 1.2z" fill-rule="evenodd"/></svg>',"page-break":'<svg width="24" height="24"><g fill-rule="evenodd"><path d="M5 11c.6 0 1 .4 1 1s-.4 1-1 1a1 1 0 0 1 0-2zm3 0h1c.6 0 1 .4 1 1s-.4 1-1 1H8a1 1 0 0 1 0-2zm4 0c.6 0 1 .4 1 1s-.4 1-1 1a1 1 0 0 1 0-2zm3 0h1c.6 0 1 .4 1 1s-.4 1-1 1h-1a1 1 0 0 1 0-2zm4 0c.6 0 1 .4 1 1s-.4 1-1 1a1 1 0 0 1 0-2zM7 3v5h10V3c0-.6.4-1 1-1s1 .4 1 1v7H5V3c0-.6.4-1 1-1s1 .4 1 1zM6 22a1 1 0 0 1-1-1v-7h14v7c0 .6-.4 1-1 1a1 1 0 0 1-1-1v-5H7v5c0 .6-.4 1-1 1z"/></g></svg>',"paste-text":'<svg width="24" height="24"><path d="M18 9V5h-2v1c0 .6-.4 1-1 1H9a1 1 0 0 1-1-1V5H6v13h3V9h9zM9 20H6a2 2 0 0 1-2-2V5c0-1.1.9-2 2-2h3.2A3 3 0 0 1 12 1a3 3 0 0 1 2.8 2H18a2 2 0 0 1 2 2v4h1v12H9v-1zm1.5-9.5v9h9v-9h-9zM12 3a1 1 0 0 0-1 1c0 .5.4 1 1 1s1-.5 1-1-.4-1-1-1zm0 9h6v2h-.5l-.5-1h-1v4h.8v1h-3.6v-1h.8v-4h-1l-.5 1H12v-2z" fill-rule="nonzero"/></svg>',paste:'<svg width="24" height="24"><path d="M18 9V5h-2v1c0 .6-.4 1-1 1H9a1 1 0 0 1-1-1V5H6v13h3V9h9zM9 20H6a2 2 0 0 1-2-2V5c0-1.1.9-2 2-2h3.2A3 3 0 0 1 12 1a3 3 0 0 1 2.8 2H18a2 2 0 0 1 2 2v4h1v12H9v-1zm1.5-9.5v9h9v-9h-9zM12 3a1 1 0 0 0-1 1c0 .5.4 1 1 1s1-.5 1-1-.4-1-1-1z" fill-rule="nonzero"/></svg>',"permanent-pen":'<svg width="24" height="24"><path d="M10.5 17.5L8 20H3v-3l3.5-3.5a2 2 0 0 1 0-3L14 3l1 1-7.3 7.3a1 1 0 0 0 0 1.4l3.6 3.6c.4.4 1 .4 1.4 0L20 9l1 1-7.6 7.6a2 2 0 0 1-2.8 0l-.1-.1z" fill-rule="nonzero"/></svg>',plus:'<svg width="24" height="24"><g fill-rule="evenodd" stroke-linecap="round" stroke-linejoin="round" stroke="#000" stroke-width="2"><path d="M12 5v14M5 12h14"/></g></svg>',preferences:'<svg width="24" height="24"><path d="M20.1 13.5l-1.9.2a5.8 5.8 0 0 1-.6 1.5l1.2 1.5c.4.4.3 1 0 1.4l-.7.7a1 1 0 0 1-1.4 0l-1.5-1.2a6.2 6.2 0 0 1-1.5.6l-.2 1.9c0 .5-.5.9-1 .9h-1a1 1 0 0 1-1-.9l-.2-1.9a5.8 5.8 0 0 1-1.5-.6l-1.5 1.2a1 1 0 0 1-1.4 0l-.7-.7a1 1 0 0 1 0-1.4l1.2-1.5a6.2 6.2 0 0 1-.6-1.5l-1.9-.2a1 1 0 0 1-.9-1v-1c0-.5.4-1 .9-1l1.9-.2a5.8 5.8 0 0 1 .6-1.5L5.2 7.3a1 1 0 0 1 0-1.4l.7-.7a1 1 0 0 1 1.4 0l1.5 1.2a6.2 6.2 0 0 1 1.5-.6l.2-1.9c0-.5.5-.9 1-.9h1c.5 0 1 .4 1 .9l.2 1.9a5.8 5.8 0 0 1 1.5.6l1.5-1.2a1 1 0 0 1 1.4 0l.7.7c.3.4.4 1 0 1.4l-1.2 1.5a6.2 6.2 0 0 1 .6 1.5l1.9.2c.5 0 .9.5.9 1v1c0 .5-.4 1-.9 1zM12 15a3 3 0 1 0 0-6 3 3 0 0 0 0 6z" fill-rule="evenodd"/></svg>',preview:'<svg width="24" height="24"><path d="M3.5 12.5c.5.8 1.1 1.6 1.8 2.3 2 2 4.2 3.2 6.7 3.2s4.7-1.2 6.7-3.2a16.2 16.2 0 0 0 2.1-2.8 15.7 15.7 0 0 0-2.1-2.8c-2-2-4.2-3.2-6.7-3.2a9.3 9.3 0 0 0-6.7 3.2A16.2 16.2 0 0 0 3.2 12c0 .2.2.3.3.5zm-2.4-1l.7-1.2L4 7.8C6.2 5.4 8.9 4 12 4c3 0 5.8 1.4 8.1 3.8a18.2 18.2 0 0 1 2.8 3.7v1l-.7 1.2-2.1 2.5c-2.3 2.4-5 3.8-8.1 3.8-3 0-5.8-1.4-8.1-3.8a18.2 18.2 0 0 1-2.8-3.7 1 1 0 0 1 0-1zm12-3.3a2 2 0 1 0 2.7 2.6 4 4 0 1 1-2.6-2.6z" fill-rule="nonzero"/></svg>',print:'<svg width="24" height="24"><path d="M18 8H6a3 3 0 0 0-3 3v6h2v3h14v-3h2v-6a3 3 0 0 0-3-3zm-1 10H7v-4h10v4zm.5-5c-.8 0-1.5-.7-1.5-1.5s.7-1.5 1.5-1.5 1.5.7 1.5 1.5-.7 1.5-1.5 1.5zm.5-8H6v2h12V5z" fill-rule="nonzero"/></svg>',quote:'<svg width="24" height="24"><path d="M7.5 17h.9c.4 0 .7-.2.9-.6L11 13V8c0-.6-.4-1-1-1H6a1 1 0 0 0-1 1v4c0 .6.4 1 1 1h2l-1.3 2.7a1 1 0 0 0 .8 1.3zm8 0h.9c.4 0 .7-.2.9-.6L19 13V8c0-.6-.4-1-1-1h-4a1 1 0 0 0-1 1v4c0 .6.4 1 1 1h2l-1.3 2.7a1 1 0 0 0 .8 1.3z" fill-rule="nonzero"/></svg>',redo:'<svg width="24" height="24"><path d="M17.6 10H12c-2.8 0-4.4 1.4-4.9 3.5-.4 2 .3 4 1.4 4.6a1 1 0 1 1-1 1.8c-2-1.2-2.9-4.1-2.3-6.8.6-3 3-5.1 6.8-5.1h5.6l-3.3-3.3a1 1 0 1 1 1.4-1.4l5 5a1 1 0 0 1 0 1.4l-5 5a1 1 0 0 1-1.4-1.4l3.3-3.3z" fill-rule="nonzero"/></svg>',reload:'<svg width="24" height="24"><g fill-rule="nonzero"><path d="M5 22.1l-1.2-4.7v-.2a1 1 0 0 1 1-1l5 .4a1 1 0 1 1-.2 2l-2.2-.2a7.8 7.8 0 0 0 8.4.2 7.5 7.5 0 0 0 3.5-6.4 1 1 0 1 1 2 0 9.5 9.5 0 0 1-4.5 8 9.9 9.9 0 0 1-10.2 0l.4 1.4a1 1 0 1 1-2 .5zM13.6 7.4c0-.5.5-1 1-.9l2.8.2a8 8 0 0 0-9.5-1 7.5 7.5 0 0 0-3.6 7 1 1 0 0 1-2 0 9.5 9.5 0 0 1 4.5-8.6 10 10 0 0 1 10.9.3l-.3-1a1 1 0 0 1 2-.5l1.1 4.8a1 1 0 0 1-1 1.2l-5-.4a1 1 0 0 1-.9-1z"/></g></svg>',"remove-formatting":'<svg width="24" height="24"><path d="M13.2 6a1 1 0 0 1 0 .2l-2.6 10a1 1 0 0 1-1 .8h-.2a.8.8 0 0 1-.8-1l2.6-10H8a1 1 0 1 1 0-2h9a1 1 0 0 1 0 2h-3.8zM5 18h7a1 1 0 0 1 0 2H5a1 1 0 0 1 0-2zm13 1.5L16.5 18 15 19.5a.7.7 0 0 1-1-1l1.5-1.5-1.5-1.5a.7.7 0 0 1 1-1l1.5 1.5 1.5-1.5a.7.7 0 0 1 1 1L17.5 17l1.5 1.5a.7.7 0 0 1-1 1z" fill-rule="evenodd"/></svg>',remove:'<svg width="24" height="24"><path d="M16 7h3a1 1 0 0 1 0 2h-1v9a3 3 0 0 1-3 3H9a3 3 0 0 1-3-3V9H5a1 1 0 1 1 0-2h3V6a3 3 0 0 1 3-3h2a3 3 0 0 1 3 3v1zm-2 0V6c0-.6-.4-1-1-1h-2a1 1 0 0 0-1 1v1h4zm2 2H8v9c0 .6.4 1 1 1h6c.6 0 1-.4 1-1V9zm-7 3a1 1 0 0 1 2 0v4a1 1 0 0 1-2 0v-4zm4 0a1 1 0 0 1 2 0v4a1 1 0 0 1-2 0v-4z" fill-rule="nonzero"/></svg>',"resize-handle":'<svg width="10" height="10"><g fill-rule="nonzero"><path d="M8.1 1.1A.5.5 0 1 1 9 2l-7 7A.5.5 0 1 1 1 8l7-7zM8.1 5.1A.5.5 0 1 1 9 6l-3 3A.5.5 0 1 1 5 8l3-3z"/></g></svg>',resize:'<svg width="24" height="24"><path d="M4 5c0-.3.1-.5.3-.7.2-.2.4-.3.7-.3h6c.3 0 .5.1.7.3.2.2.3.4.3.7 0 .3-.1.5-.3.7a1 1 0 0 1-.7.3H7.4L18 16.6V13c0-.3.1-.5.3-.7.2-.2.4-.3.7-.3.3 0 .5.1.7.3.2.2.3.4.3.7v6c0 .3-.1.5-.3.7a1 1 0 0 1-.7.3h-6a1 1 0 0 1-.7-.3 1 1 0 0 1-.3-.7c0-.3.1-.5.3-.7.2-.2.4-.3.7-.3h3.6L6 7.4V11c0 .3-.1.5-.3.7a1 1 0 0 1-.7.3 1 1 0 0 1-.7-.3A1 1 0 0 1 4 11V5z" fill-rule="evenodd"/></svg>',"restore-draft":'<svg width="24" height="24"><g fill-rule="evenodd"><path d="M17 13c0 .6-.4 1-1 1h-4V8c0-.6.4-1 1-1s1 .4 1 1v4h2c.6 0 1 .4 1 1z"/><path d="M4.7 10H9a1 1 0 0 1 0 2H3a1 1 0 0 1-1-1V5a1 1 0 1 1 2 0v3l2.5-2.4a9.2 9.2 0 0 1 10.8-1.5A9 9 0 0 1 13.4 21c-2.4.1-4.7-.7-6.5-2.2a1 1 0 1 1 1.3-1.5 7.2 7.2 0 0 0 11.6-3.7 7 7 0 0 0-3.5-7.7A7.2 7.2 0 0 0 8 7L4.7 10z" fill-rule="nonzero"/></g></svg>',"rotate-left":'<svg width="24" height="24"><path d="M4.7 10H9a1 1 0 0 1 0 2H3a1 1 0 0 1-1-1V5a1 1 0 1 1 2 0v3l2.5-2.4a9.2 9.2 0 0 1 10.8-1.5A9 9 0 0 1 13.4 21c-2.4.1-4.7-.7-6.5-2.2a1 1 0 1 1 1.3-1.5 7.2 7.2 0 0 0 11.6-3.7 7 7 0 0 0-3.5-7.7A7.2 7.2 0 0 0 8 7L4.7 10z" fill-rule="nonzero"/></svg>',"rotate-right":'<svg width="24" height="24"><path d="M20 8V5a1 1 0 0 1 2 0v6c0 .6-.4 1-1 1h-6a1 1 0 0 1 0-2h4.3L16 7A7.2 7.2 0 0 0 7.7 6a7 7 0 0 0 3 13.1c1.9.1 3.7-.5 5-1.7a1 1 0 0 1 1.4 1.5A9.2 9.2 0 0 1 2.2 14c-.9-3.9 1-8 4.5-9.9 3.5-1.9 8-1.3 10.8 1.5L20 8z" fill-rule="nonzero"/></svg>',rtl:'<svg width="24" height="24"><path d="M8 5h8v2h-2v12h-2V7h-2v12H8v-7c-.5 0-1 0-1.4-.3A3.4 3.4 0 0 1 4.8 10a3.3 3.3 0 0 1 0-2.8 3.4 3.4 0 0 1 1.8-1.8L8 5zm12 11.2a1 1 0 1 1-1 1.6l-3-2a1 1 0 0 1 0-1.6l3-2a1 1 0 1 1 1 1.6L18.4 15l1.8 1.2z" fill-rule="evenodd"/></svg>',save:'<svg width="24" height="24"><path d="M5 16h14a2 2 0 0 1 2 2v2a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-2c0-1.1.9-2 2-2zm0 2v2h14v-2H5zm10 0h2v2h-2v-2zm-4-6.4L8.7 9.3a1 1 0 1 0-1.4 1.4l4 4c.4.4 1 .4 1.4 0l4-4a1 1 0 1 0-1.4-1.4L13 11.6V4a1 1 0 0 0-2 0v7.6z" fill-rule="nonzero"/></svg>',search:'<svg width="24" height="24"><path d="M16 17.3a8 8 0 1 1 1.4-1.4l4.3 4.4a1 1 0 0 1-1.4 1.4l-4.4-4.3zm-5-.3a6 6 0 1 0 0-12 6 6 0 0 0 0 12z" fill-rule="nonzero"/></svg>',"select-all":'<svg width="24" height="24"><path d="M3 5h2V3a2 2 0 0 0-2 2zm0 8h2v-2H3v2zm4 8h2v-2H7v2zM3 9h2V7H3v2zm10-6h-2v2h2V3zm6 0v2h2a2 2 0 0 0-2-2zM5 21v-2H3c0 1.1.9 2 2 2zm-2-4h2v-2H3v2zM9 3H7v2h2V3zm2 18h2v-2h-2v2zm8-8h2v-2h-2v2zm0 8a2 2 0 0 0 2-2h-2v2zm0-12h2V7h-2v2zm0 8h2v-2h-2v2zm-4 4h2v-2h-2v2zm0-16h2V3h-2v2zM7 17h10V7H7v10zm2-8h6v6H9V9z" fill-rule="nonzero"/></svg>',selected:'<svg width="24" height="24"><path fill-rule="nonzero" d="M6 4h12a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6c0-1.1.9-2 2-2zm3.6 10.9L7 12.3a.7.7 0 0 0-1 1L9.6 17 18 8.6a.7.7 0 0 0 0-1 .7.7 0 0 0-1 0l-7.4 7.3z"/></svg>',settings:'<svg width="24" height="24"><path d="M11 6h8c.6 0 1 .4 1 1s-.4 1-1 1h-8v.3c0 .2 0 .3-.2.5l-.6.2H7.8c-.3 0-.4 0-.6-.2a.7.7 0 0 1-.2-.6V8H5a1 1 0 1 1 0-2h2v-.3c0-.2 0-.3.2-.5l.5-.2h2.5c.3 0 .4 0 .6.2l.2.5V6zM8 8h2V6H8v2zm9 2.8v.2h2c.6 0 1 .4 1 1s-.4 1-1 1h-2v.3c0 .2 0 .3-.2.5l-.6.2h-2.4c-.3 0-.4 0-.6-.2a.7.7 0 0 1-.2-.6V13H5a1 1 0 0 1 0-2h8v-.3c0-.2 0-.3.2-.5l.6-.2h2.4c.3 0 .4 0 .6.2l.2.6zM14 13h2v-2h-2v2zm-3 2.8v.2h8c.6 0 1 .4 1 1s-.4 1-1 1h-8v.3c0 .2 0 .3-.2.5l-.6.2H7.8c-.3 0-.4 0-.6-.2a.7.7 0 0 1-.2-.6V18H5a1 1 0 0 1 0-2h2v-.3c0-.2 0-.3.2-.5l.5-.2h2.5c.3 0 .4 0 .6.2l.2.6zM8 18h2v-2H8v2z" fill-rule="evenodd"/></svg>',sharpen:'<svg width="24" height="24"><path d="M16 6l4 4-8 9-8-9 4-4h8zm-4 10.2l5.5-6.2-.1-.1H12v-.3h5.1l-.2-.2H12V9h4.6l-.2-.2H12v-.3h4.1l-.2-.2H12V8h3.6l-.2-.2H8.7L6.5 10l.1.1H12v.3H6.9l.2.2H12v.3H7.3l.2.2H12v.3H7.7l.3.2h4v.3H8.2l.2.2H12v.3H8.6l.3.2H12v.3H9l.3.2H12v.3H9.5l.2.2H12v.3h-2l.2.2H12v.3h-1.6l.2.2H12v.3h-1.1l.2.2h.9v.3h-.7l.2.2h.5v.3h-.3l.3.2z" fill-rule="evenodd"/></svg>',sourcecode:'<svg width="24" height="24"><g fill-rule="nonzero"><path d="M9.8 15.7c.3.3.3.8 0 1-.3.4-.9.4-1.2 0l-4.4-4.1a.8.8 0 0 1 0-1.2l4.4-4.2c.3-.3.9-.3 1.2 0 .3.3.3.8 0 1.1L6 12l3.8 3.7zM14.2 15.7c-.3.3-.3.8 0 1 .4.4.9.4 1.2 0l4.4-4.1c.3-.3.3-.9 0-1.2l-4.4-4.2a.8.8 0 0 0-1.2 0c-.3.3-.3.8 0 1.1L18 12l-3.8 3.7z"/></g></svg>',"spell-check":'<svg width="24" height="24"><path d="M6 8v3H5V5c0-.3.1-.5.3-.7.2-.2.4-.3.7-.3h2c.3 0 .5.1.7.3.2.2.3.4.3.7v6H8V8H6zm0-3v2h2V5H6zm13 0h-3v5h3v1h-3a1 1 0 0 1-.7-.3 1 1 0 0 1-.3-.7V5c0-.3.1-.5.3-.7.2-.2.4-.3.7-.3h3v1zm-5 1.5l-.1.7c-.1.2-.3.3-.6.3.3 0 .5.1.6.3l.1.7V10c0 .3-.1.5-.3.7a1 1 0 0 1-.7.3h-3V4h3c.3 0 .5.1.7.3.2.2.3.4.3.7v1.5zM13 10V8h-2v2h2zm0-3V5h-2v2h2zm3 5l1 1-6.5 7L7 15.5l1.3-1 2.2 2.2L16 12z" fill-rule="evenodd"/></svg>',"strike-through":'<svg width="24" height="24"><g fill-rule="evenodd"><path d="M15.6 8.5c-.5-.7-1-1.1-1.3-1.3-.6-.4-1.3-.6-2-.6-2.7 0-2.8 1.7-2.8 2.1 0 1.6 1.8 2 3.2 2.3 4.4.9 4.6 2.8 4.6 3.9 0 1.4-.7 4.1-5 4.1A6.2 6.2 0 0 1 7 16.4l1.5-1.1c.4.6 1.6 2 3.7 2 1.6 0 2.5-.4 3-1.2.4-.8.3-2-.8-2.6-.7-.4-1.6-.7-2.9-1-1-.2-3.9-.8-3.9-3.6C7.6 6 10.3 5 12.4 5c2.9 0 4.2 1.6 4.7 2.4l-1.5 1.1z"/><path d="M5 11h14a1 1 0 0 1 0 2H5a1 1 0 0 1 0-2z" fill-rule="nonzero"/></g></svg>',subscript:'<svg width="24" height="24"><path d="M10.4 10l4.6 4.6-1.4 1.4L9 11.4 4.4 16 3 14.6 7.6 10 3 5.4 4.4 4 9 8.6 13.6 4 15 5.4 10.4 10zM21 19h-5v-1l1-.8 1.7-1.6c.3-.4.5-.8.5-1.2 0-.3 0-.6-.2-.7-.2-.2-.5-.3-.9-.3a2 2 0 0 0-.8.2l-.7.3-.4-1.1 1-.6 1.2-.2c.8 0 1.4.3 1.8.7.4.4.6.9.6 1.5s-.2 1.1-.5 1.6a8 8 0 0 1-1.3 1.3l-.6.6h2.6V19z" fill-rule="nonzero"/></svg>',superscript:'<svg width="24" height="24"><path d="M15 9.4L10.4 14l4.6 4.6-1.4 1.4L9 15.4 4.4 20 3 18.6 7.6 14 3 9.4 4.4 8 9 12.6 13.6 8 15 9.4zm5.9 1.6h-5v-1l1-.8 1.7-1.6c.3-.5.5-.9.5-1.3 0-.3 0-.5-.2-.7-.2-.2-.5-.3-.9-.3l-.8.2-.7.4-.4-1.2c.2-.2.5-.4 1-.5.3-.2.8-.2 1.2-.2.8 0 1.4.2 1.8.6.4.4.6 1 .6 1.6 0 .5-.2 1-.5 1.5l-1.3 1.4-.6.5h2.6V11z" fill-rule="nonzero"/></svg>',"table-cell-properties":'<svg width="24" height="24"><path d="M4 5h16v14H4V5zm10 10h-4v3h4v-3zm0-8h-4v3h4V7zM9 7H5v3h4V7zm-4 4v3h4v-3H5zm10 0v3h4v-3h-4zm0-1h4V7h-4v3zM5 15v3h4v-3H5zm10 3h4v-3h-4v3z" fill-rule="evenodd"/></svg>',"table-cell-select-all":'<svg width="24" height="24"><path d="M12.5 5.5v6h6v-6h-6zm-1 0h-6v6h6v-6zm1 13h6v-6h-6v6zm-1 0v-6h-6v6h6zm-7-14h15v15h-15v-15z" fill-rule="nonzero"/></svg>',"table-cell-select-inner":'<svg width="24" height="24"><g fill-rule="nonzero"><path d="M5.5 5.5v13h13v-13h-13zm-1-1h15v15h-15v-15z" opacity=".2"/><path d="M11.5 11.5v-7h1v7h7v1h-7v7h-1v-7h-7v-1h7z"/></g></svg>',"table-delete-column":'<svg width="24" height="24"><path d="M9 11.2l1 1v.2l-1 1v-2.2zm5 1l1-1v2.2l-1-1v-.2zM20 5v14H4V5h16zm-1 2h-4v.8l-.2-.2-.8.8V7h-4v1.4l-.8-.8-.2.2V7H5v11h4v-1.8l.5.5.5-.4V18h4v-1.8l.8.8.2-.3V18h4V7zm-3.9 3.4l-1.8 1.9 1.8 1.9c.4.3.4.9 0 1.2-.3.3-.8.3-1.2 0L12 13.5l-1.8 1.9a.8.8 0 0 1-1.2 0 .9.9 0 0 1 0-1.2l1.8-1.9-1.9-2a.9.9 0 0 1 1.2-1.2l2 2 1.8-1.8c.3-.4.9-.4 1.2 0a.8.8 0 0 1 0 1.1z" fill-rule="evenodd"/></svg>',"table-delete-row":'<svg width="24" height="24"><path d="M16.7 8.8l1.1 1.2-2.4 2.5L18 15l-1.2 1.2-2.5-2.5-2.4 2.5-1.3-1.2 2.5-2.5-2.5-2.5 1.2-1.3 2.6 2.6 2.4-2.5zM4 5h16v14H4V5zm15 5V7H5v3h4.8l1 1H5v3h5.8l-1 1H5v3h14v-3h-.4l-1-1H19v-3h-1.3l1-1h.3z" fill-rule="evenodd"/></svg>',"table-delete-table":'<svg width="24" height="26"><path d="M4 6h16v14H4V6zm1 2v11h14V8H5zm11.7 8.7l-1.5 1.5L12 15l-3.3 3.2-1.4-1.5 3.2-3.2-3.3-3.2 1.5-1.5L12 12l3.2-3.2 1.5 1.5-3.2 3.2 3.2 3.2z" fill-rule="evenodd"/></svg>',"table-insert-column-after":'<svg width="24" height="24"><path d="M14.3 9c.4 0 .7.3.7.6v2.2h2.1c.4 0 .7.3.7.7 0 .4-.3.7-.7.7H15v2.2c0 .3-.3.6-.7.6a.7.7 0 0 1-.6-.6v-2.2h-2.2a.7.7 0 0 1 0-1.4h2.2V9.6c0-.3.3-.6.6-.6zM4 5h16v14H4V5zm5 13v-3H5v3h4zm0-4v-3H5v3h4zm0-4V7H5v3h4zm10 8V7h-9v11h9z" fill-rule="evenodd"/></svg>',"table-insert-column-before":'<svg width="24" height="24"><path d="M9.7 16a.7.7 0 0 1-.7-.6v-2.2H6.9a.7.7 0 0 1 0-1.4H9V9.6c0-.3.3-.6.7-.6.3 0 .6.3.6.6v2.2h2.2c.4 0 .8.3.8.7 0 .4-.4.7-.8.7h-2.2v2.2c0 .3-.3.6-.6.6zM4 5h16v14H4V5zm10 13V7H5v11h9zm5 0v-3h-4v3h4zm0-4v-3h-4v3h4zm0-4V7h-4v3h4z" fill-rule="evenodd"/></svg>',"table-insert-row-above":'<svg width="24" height="24"><path d="M14.8 10.5c0 .3-.2.5-.5.5h-1.8v1.8c0 .3-.2.5-.5.5a.5.5 0 0 1-.5-.6V11H9.7a.5.5 0 0 1 0-1h1.8V8.3c0-.3.2-.6.5-.6s.5.3.5.6V10h1.8c.3 0 .5.2.5.5zM4 5h16v14H4V5zm5 13v-3H5v3h4zm5 0v-3h-4v3h4zm5 0v-3h-4v3h4zm0-4V7H5v7h14z" fill-rule="evenodd"/></svg>',"table-insert-row-after":'<svg width="24" height="24"><path d="M9.2 14.5c0-.3.2-.5.5-.5h1.8v-1.8c0-.3.2-.5.5-.5s.5.2.5.6V14h1.8c.3 0 .5.2.5.5s-.2.5-.5.5h-1.8v1.7c0 .3-.2.6-.5.6a.5.5 0 0 1-.5-.6V15H9.7a.5.5 0 0 1-.5-.5zM4 5h16v14H4V5zm6 2v3h4V7h-4zM5 7v3h4V7H5zm14 11v-7H5v7h14zm0-8V7h-4v3h4z" fill-rule="evenodd"/></svg>',"table-left-header":'<svg width="24" height="24"><path d="M4 5h16v13H4V5zm10 12v-3h-4v3h4zm0-4v-3h-4v3h4zm0-4V6h-4v3h4zm5 8v-3h-4v3h4zm0-4v-3h-4v3h4zm0-4V6h-4v3h4z" fill-rule="evenodd"/></svg>',"table-merge-cells":'<svg width="24" height="24"><path d="M4 5h16v14H4V5zm6 13h9v-7h-9v7zm4-11h-4v3h4V7zM9 7H5v3h4V7zm-4 4v3h4v-3H5zm10-1h4V7h-4v3zM5 15v3h4v-3H5z" fill-rule="evenodd"/></svg>',"table-row-properties":'<svg width="24" height="24"><path d="M4 5h16v14H4V5zm10 10h-4v3h4v-3zm0-8h-4v3h4V7zM9 7H5v3h4V7zm6 3h4V7h-4v3zM5 15v3h4v-3H5zm10 3h4v-3h-4v3z" fill-rule="evenodd"/></svg>',"table-split-cells":'<svg width="24" height="24"><path d="M4 5h16v14H4V5zm6 2v3h4V7h-4zM9 18v-3H5v3h4zm0-4v-3H5v3h4zm0-4V7H5v3h4zm10 8v-7h-9v7h9zm0-8V7h-4v3h4zm-3.5 4.5l1.5 1.6c.3.2.3.7 0 1-.2.2-.7.2-1 0l-1.5-1.6-1.6 1.5c-.2.3-.7.3-1 0a.7.7 0 0 1 0-1l1.6-1.5-1.5-1.6a.7.7 0 0 1 1-1l1.5 1.6 1.6-1.5c.2-.3.7-.3 1 0 .2.2.2.7 0 1l-1.6 1.5z" fill-rule="evenodd"/></svg>',"table-top-header":'<svg width="24" height="24"><path d="M4 5h16v13H4V5zm5 12v-3H5v3h4zm0-4v-3H5v3h4zm5 4v-3h-4v3h4zm0-4v-3h-4v3h4zm5 4v-3h-4v3h4zm0-4v-3h-4v3h4z" fill-rule="evenodd"/></svg>',table:'<svg width="24" height="24"><path d="M4 5h16v14H4V5zm6 9h4v-3h-4v3zm4 1h-4v3h4v-3zm0-8h-4v3h4V7zM9 7H5v3h4V7zm-4 4v3h4v-3H5zm10 0v3h4v-3h-4zm0-1h4V7h-4v3zM5 15v3h4v-3H5zm10 3h4v-3h-4v3z" fill-rule="evenodd"/></svg>',template:'<svg width="24" height="24"><path d="M19 19v-1H5v1h14zM9 16v-4a5 5 0 1 1 6 0v4h4a2 2 0 0 1 2 2v3H3v-3c0-1.1.9-2 2-2h4zm4 0v-5l.8-.6a3 3 0 1 0-3.6 0l.8.6v5h2z" fill-rule="nonzero"/></svg>',"temporary-placeholder":'<svg width="24" height="24"><g fill-rule="evenodd"><path d="M9 7.6V6h2.5V4.5a.5.5 0 1 1 1 0V6H15v1.6a8 8 0 1 1-6 0zm-2.6 5.3a.5.5 0 0 0 .3.6c.3 0 .6 0 .6-.3l.1-.2a5 5 0 0 1 3.3-2.8c.3-.1.4-.4.4-.6-.1-.3-.4-.5-.6-.4a6 6 0 0 0-4.1 3.7z"/><circle cx="14" cy="4" r="1"/><circle cx="12" cy="2" r="1"/><circle cx="10" cy="4" r="1"/></g></svg>',"text-color":'<svg width="24" height="24"><g fill-rule="evenodd"><path id="tox-icon-text-color__color" d="M3 18h18v3H3z"/><path d="M8.7 16h-.8a.5.5 0 0 1-.5-.6l2.7-9c.1-.3.3-.4.5-.4h2.8c.2 0 .4.1.5.4l2.7 9a.5.5 0 0 1-.5.6h-.8a.5.5 0 0 1-.4-.4l-.7-2.2c0-.3-.3-.4-.5-.4h-3.4c-.2 0-.4.1-.5.4l-.7 2.2c0 .3-.2.4-.4.4zm2.6-7.6l-.6 2a.5.5 0 0 0 .5.6h1.6a.5.5 0 0 0 .5-.6l-.6-2c0-.3-.3-.4-.5-.4h-.4c-.2 0-.4.1-.5.4z"/></g></svg>',toc:'<svg width="24" height="24"><path d="M5 5c.6 0 1 .4 1 1s-.4 1-1 1a1 1 0 1 1 0-2zm3 0h11c.6 0 1 .4 1 1s-.4 1-1 1H8a1 1 0 1 1 0-2zm-3 8c.6 0 1 .4 1 1s-.4 1-1 1a1 1 0 0 1 0-2zm3 0h11c.6 0 1 .4 1 1s-.4 1-1 1H8a1 1 0 0 1 0-2zm0-4c.6 0 1 .4 1 1s-.4 1-1 1a1 1 0 1 1 0-2zm3 0h8c.6 0 1 .4 1 1s-.4 1-1 1h-8a1 1 0 0 1 0-2zm-3 8c.6 0 1 .4 1 1s-.4 1-1 1a1 1 0 0 1 0-2zm3 0h8c.6 0 1 .4 1 1s-.4 1-1 1h-8a1 1 0 0 1 0-2z" fill-rule="evenodd"/></svg>',translate:'<svg width="24" height="24"><path d="M12.7 14.3l-.3.7-.4.7-2.2-2.2-3.1 3c-.3.4-.8.4-1 0a.7.7 0 0 1 0-1l3.1-3A12.4 12.4 0 0 1 6.7 9H8a10.1 10.1 0 0 0 1.7 2.4c.5-.5 1-1.1 1.4-1.8l.9-2H4.7a.7.7 0 1 1 0-1.5h4.4v-.7c0-.4.3-.8.7-.8.4 0 .7.4.7.8v.7H15c.4 0 .8.3.8.7 0 .4-.4.8-.8.8h-1.4a12.3 12.3 0 0 1-1 2.4 13.5 13.5 0 0 1-1.7 2.3l1.9 1.8zm4.3-3l2.7 7.3a.5.5 0 0 1-.4.7 1 1 0 0 1-1-.7l-.6-1.5h-3.4l-.6 1.5a1 1 0 0 1-1 .7.5.5 0 0 1-.4-.7l2.7-7.4a1 1 0 1 1 2 0zm-2.2 4.4h2.4L16 12.5l-1.2 3.2z" fill-rule="evenodd"/></svg>',underline:'<svg width="24" height="24"><path d="M16 5c.6 0 1 .4 1 1v5.5a4 4 0 0 1-.4 1.8l-1 1.4a5.3 5.3 0 0 1-5.5 1 5 5 0 0 1-1.6-1c-.5-.4-.8-.9-1.1-1.4a4 4 0 0 1-.4-1.8V6c0-.6.4-1 1-1s1 .4 1 1v5.5c0 .3 0 .6.2 1l.6.7a3.3 3.3 0 0 0 2.2.8 3.4 3.4 0 0 0 2.2-.8c.3-.2.4-.5.6-.8l.2-.9V6c0-.6.4-1 1-1zM8 17h8c.6 0 1 .4 1 1s-.4 1-1 1H8a1 1 0 0 1 0-2z" fill-rule="evenodd"/></svg>',undo:'<svg width="24" height="24"><path d="M6.4 8H12c3.7 0 6.2 2 6.8 5.1.6 2.7-.4 5.6-2.3 6.8a1 1 0 0 1-1-1.8c1.1-.6 1.8-2.7 1.4-4.6-.5-2.1-2.1-3.5-4.9-3.5H6.4l3.3 3.3a1 1 0 1 1-1.4 1.4l-5-5a1 1 0 0 1 0-1.4l5-5a1 1 0 0 1 1.4 1.4L6.4 8z" fill-rule="nonzero"/></svg>',unlink:'<svg width="24" height="24"><path d="M6.2 12.3a1 1 0 0 1 1.4 1.4l-2 2a2 2 0 1 0 2.6 2.8l4.8-4.8a1 1 0 0 0 0-1.4 1 1 0 1 1 1.4-1.3 2.9 2.9 0 0 1 0 4L9.6 20a3.9 3.9 0 0 1-5.5-5.5l2-2zm11.6-.6a1 1 0 0 1-1.4-1.4l2.1-2a2 2 0 1 0-2.7-2.8L11 10.3a1 1 0 0 0 0 1.4A1 1 0 1 1 9.6 13a2.9 2.9 0 0 1 0-4L14.4 4a3.9 3.9 0 0 1 5.5 5.5l-2 2zM7.6 6.3a.8.8 0 0 1-1 1.1L3.3 4.2a.7.7 0 1 1 1-1l3.2 3.1zM5.1 8.6a.8.8 0 0 1 0 1.5H3a.8.8 0 0 1 0-1.5H5zm5-3.5a.8.8 0 0 1-1.5 0V3a.8.8 0 0 1 1.5 0V5zm6 11.8a.8.8 0 0 1 1-1l3.2 3.2a.8.8 0 0 1-1 1L16 17zm-2.2 2a.8.8 0 0 1 1.5 0V21a.8.8 0 0 1-1.5 0V19zm5-3.5a.7.7 0 1 1 0-1.5H21a.8.8 0 0 1 0 1.5H19z" fill-rule="nonzero"/></svg>',unlock:'<svg width="24" height="24"><path d="M16 5c.8 0 1.5.3 2.1.9.6.6.9 1.3.9 2.1v3h-2V8a1 1 0 0 0-.3-.7A1 1 0 0 0 16 7h-2a1 1 0 0 0-.7.3 1 1 0 0 0-.3.7v3h.3c.2 0 .3 0 .5.2l.2.6v7.4c0 .3 0 .4-.2.6l-.6.2H4.8c-.3 0-.4 0-.6-.2a.7.7 0 0 1-.2-.6v-7.4c0-.3 0-.4.2-.6l.5-.2H11V8c0-.8.3-1.5.9-2.1.6-.6 1.3-.9 2.1-.9h2z" fill-rule="evenodd"/></svg>',"unordered-list":'<svg width="24" height="24"><path d="M11 5h8c.6 0 1 .4 1 1s-.4 1-1 1h-8a1 1 0 0 1 0-2zm0 6h8c.6 0 1 .4 1 1s-.4 1-1 1h-8a1 1 0 0 1 0-2zm0 6h8c.6 0 1 .4 1 1s-.4 1-1 1h-8a1 1 0 0 1 0-2zM4.5 6c0-.4.1-.8.4-1 .3-.4.7-.5 1.1-.5.4 0 .8.1 1 .4.4.3.5.7.5 1.1 0 .4-.1.8-.4 1-.3.4-.7.5-1.1.5-.4 0-.8-.1-1-.4-.4-.3-.5-.7-.5-1.1zm0 6c0-.4.1-.8.4-1 .3-.4.7-.5 1.1-.5.4 0 .8.1 1 .4.4.3.5.7.5 1.1 0 .4-.1.8-.4 1-.3.4-.7.5-1.1.5-.4 0-.8-.1-1-.4-.4-.3-.5-.7-.5-1.1zm0 6c0-.4.1-.8.4-1 .3-.4.7-.5 1.1-.5.4 0 .8.1 1 .4.4.3.5.7.5 1.1 0 .4-.1.8-.4 1-.3.4-.7.5-1.1.5-.4 0-.8-.1-1-.4-.4-.3-.5-.7-.5-1.1z" fill-rule="evenodd"/></svg>',unselected:'<svg width="24" height="24"><path fill-rule="nonzero" d="M6 4h12a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6c0-1.1.9-2 2-2zm0 1a1 1 0 0 0-1 1v12c0 .6.4 1 1 1h12c.6 0 1-.4 1-1V6c0-.6-.4-1-1-1H6z"/></svg>',upload:'<svg width="24" height="24"><path d="M18 19v-2a1 1 0 0 1 2 0v3c0 .6-.4 1-1 1H5a1 1 0 0 1-1-1v-3a1 1 0 0 1 2 0v2h12zM11 6.4L8.7 8.7a1 1 0 0 1-1.4-1.4l4-4a1 1 0 0 1 1.4 0l4 4a1 1 0 1 1-1.4 1.4L13 6.4V16a1 1 0 0 1-2 0V6.4z" fill-rule="nonzero"/></svg>',user:'<svg width="24" height="24"><path d="M12 24a12 12 0 1 1 0-24 12 12 0 0 1 0 24zm-8.7-5.3a11 11 0 0 0 17.4 0C19.4 16.3 14.6 15 12 15c-2.6 0-7.4 1.3-8.7 3.7zM12 13c2.2 0 4-2 4-4.5S14.2 4 12 4 8 6 8 8.5 9.8 13 12 13z" fill-rule="nonzero"/></svg>',visualblocks:'<svg width="24" height="24"><path d="M9 19v2H7v-2h2zm-4 0v2a2 2 0 0 1-2-2h2zm8 0v2h-2v-2h2zm8 0a2 2 0 0 1-2 2v-2h2zm-4 0v2h-2v-2h2zM15 7a1 1 0 0 1 0 2v7a1 1 0 0 1-2 0V9h-1v7a1 1 0 0 1-2 0v-4a2.5 2.5 0 0 1-.2-5H15zM5 15v2H3v-2h2zm16 0v2h-2v-2h2zM5 11v2H3v-2h2zm16 0v2h-2v-2h2zM5 7v2H3V7h2zm16 0v2h-2V7h2zM5 3v2H3c0-1.1.9-2 2-2zm8 0v2h-2V3h2zm6 0a2 2 0 0 1 2 2h-2V3zM9 3v2H7V3h2zm8 0v2h-2V3h2z" fill-rule="evenodd"/></svg>',visualchars:'<svg width="24" height="24"><path d="M10 5h7a1 1 0 0 1 0 2h-1v11a1 1 0 0 1-2 0V7h-2v11a1 1 0 0 1-2 0v-6c-.5 0-1 0-1.4-.3A3.4 3.4 0 0 1 6.8 10a3.3 3.3 0 0 1 0-2.8 3.4 3.4 0 0 1 1.8-1.8L10 5z" fill-rule="evenodd"/></svg>',warning:'<svg width="24" height="24"><path d="M19.8 18.3c.2.5.3.9 0 1.2-.1.3-.5.5-1 .5H5.2c-.5 0-.9-.2-1-.5-.3-.3-.2-.7 0-1.2L11 4.7l.5-.5.5-.2c.2 0 .3 0 .5.2.2 0 .3.3.5.5l6.8 13.6zM12 18c.3 0 .5-.1.7-.3.2-.2.3-.4.3-.7a1 1 0 0 0-.3-.7 1 1 0 0 0-.7-.3 1 1 0 0 0-.7.3 1 1 0 0 0-.3.7c0 .3.1.5.3.7.2.2.4.3.7.3zm.7-3l.3-4a1 1 0 0 0-.3-.7 1 1 0 0 0-.7-.3 1 1 0 0 0-.7.3 1 1 0 0 0-.3.7l.3 4h1.4z" fill-rule="evenodd"/></svg>',"zoom-in":'<svg width="24" height="24"><path d="M16 17.3a8 8 0 1 1 1.4-1.4l4.3 4.4a1 1 0 0 1-1.4 1.4l-4.4-4.3zm-5-.3a6 6 0 1 0 0-12 6 6 0 0 0 0 12zm-1-9a1 1 0 0 1 2 0v6a1 1 0 0 1-2 0V8zm-2 4a1 1 0 0 1 0-2h6a1 1 0 0 1 0 2H8z" fill-rule="nonzero"/></svg>',"zoom-out":'<svg width="24" height="24"><path d="M16 17.3a8 8 0 1 1 1.4-1.4l4.3 4.4a1 1 0 0 1-1.4 1.4l-4.4-4.3zm-5-.3a6 6 0 1 0 0-12 6 6 0 0 0 0 12zm-3-5a1 1 0 0 1 0-2h6a1 1 0 0 1 0 2H8z" fill-rule="nonzero"/></svg>'}),Ud.get(e).icons);ue(t,function(e,t){kt(r,t)||n.ui.registry.addIcon(t,e)})}(e),function(e){var t=e.settings.theme;if(K(t)){e.settings.theme=Iw(t);var n=qd.get(t);e.theme=new n(e,qd.urls[t]),e.theme.init&&e.theme.init(e,qd.urls[t]||e.documentBaseUrl.replace(/\/$/,""),e.$)}else e.theme={}}(e),function(t){var n=[];Mn.each(t.settings.plugins.split(/[ ,]/),function(e){Az(t,n,Iw(e))})}(e);var t=function(e){var t=e.getElement();return e.orgDisplay=t.style.display,K(e.settings.theme)?function(e){return e.theme.renderUI()}(e):D(e.settings.theme)?function(e){var t=e.getElement(),n=(0,e.settings.theme)(e,t);return n.editorContainer.nodeType&&(n.editorContainer.id=n.editorContainer.id||e.id+"_parent"),n.iframeContainer&&n.iframeContainer.nodeType&&(n.iframeContainer.id=n.iframeContainer.id||e.id+"_iframecontainer"),n.height=n.iframeHeight?n.iframeHeight:t.offsetHeight,n}(e):Uw(e)}(e);return e.editorContainer=t.editorContainer?t.editorContainer:null,Vw(e),e.inline?Nz(e):kz(e,t)},Rz=Xi.DOM,Dz=function(t){var e=t.settings,n=t.id;ra.setCode(Bf(t));var r=function(){Rz.unbind(j.window,"ready",r),t.render()};if(kr.Event.domLoaded){if(t.getElement()&&Nn.contentEditable){e.inline?t.inline=!0:(t.orgVisibility=t.getElement().style.visibility,t.getElement().style.visibility="hidden");var o=t.getElement().form||Rz.getParent(n,"form");o&&(t.formElement=o,e.hidden_input&&!Ge.isTextareaOrInput(t.getElement())&&(Rz.insertAfter(Rz.create("input",{type:"hidden",name:n}),n),t.hasHiddenInput=!0),t.formEventDelegate=function(e){t.fire(e.type,e)},Rz.bind(o,"submit reset",t.formEventDelegate),t.on("reset",function(){t.resetContent()}),!e.submit_patch||o.submit.nodeType||o.submit.length||o._mceOldSubmit||(o._mceOldSubmit=o.submit,o.submit=function(){return t.editorManager.triggerSave(),t.setDirty(!1),o._mceOldSubmit(o)})),t.windowManager=Bd(t),t.notificationManager=_d(t),"xml"===e.encoding&&t.on("GetContent",function(e){e.save&&(e.content=Rz.encode(e.content))}),e.add_form_submit_trigger&&t.on("submit",function(){t.initialized&&t.save()}),e.add_unload_trigger&&(t._beforeUnload=function(){!t.initialized||t.destroyed||t.isHidden()||t.save({format:"raw",no_events:!0,set_dirty:!1})},t.editorManager.on("BeforeUnload",t._beforeUnload)),t.editorManager.add(t),$w(t,t.suffix)}}else Rz.bind(j.window,"ready",r)},_z="data-mce-contenteditable",Bz=["design","readonly"],Oz=function(e,t){var n=t.firstChild,r=t.lastChild;return n&&"meta"===n.name&&(n=n.next),r&&"mce_marker"===r.attr("id")&&(r=r.prev),function(e,t){var n=e.getNonEmptyElements();return t&&(t.isEmpty(n)||function(e,t){return e.getBlockElements()[t.name]&&function(e){return e.firstChild&&e.firstChild===e.lastChild}(t)&&function(e){return"br"===e.name||"\xa0"===e.value}(t.firstChild)}(e,t))}(e,r)&&(r=r.prev),!(!n||n!==r)&&("ul"===n.name||"ol"===n.name)},Hz=function(e,o,i,t){function n(e){var t=Ds.fromRangeStart(i),n=rc(o.getRoot()),r=1===e?n.prev(t):n.next(t);return!r||rx(o,r.getNode())!==a}var r=function(e,t,n){var r=t.serialize(n);return function(e){var t=e.firstChild,n=e.lastChild;return t&&"META"===t.nodeName&&t.parentNode.removeChild(t),n&&"mce_marker"===n.id&&n.parentNode.removeChild(n),e}(e.createFragment(r))}(o,e,t),a=rx(o,i.startContainer),u=nx(ex(r.firstChild)),s=o.getRoot();return n(1)?ix(a,u,s):n(2)?function(e,t,n,r){return r.insertAfter(t.reverse(),e),ox(t[0],n)}(a,u,s,o):function(t,e,n,r){var o=function(e,t){var n=t.cloneRange(),r=t.cloneRange();return n.setStartBefore(e),r.setEndAfter(e),[n.cloneContents(),r.cloneContents()]}(t,r),i=t.parentNode;return i.insertBefore(o[0],t),Mn.each(e,function(e){i.insertBefore(e,t)}),i.insertBefore(o[1],t),i.removeChild(t),ox(e[e.length-1],n)}(a,u,s,i)},Pz=function(e,t){return!!rx(e,t)},Lz=Ge.matchNodeNames(["td","th"]),Vz=function(e,t){var n=function(e){var t;return"string"!=typeof e?(t=Mn.extend({paste:e.paste,data:{paste:e.paste}},e),{content:e.content,details:t}):{content:e,details:{}}}(t);ux(e,n.content,n.details)},Iz=function(e){ez(e,!1)||Lx(e,!1)||Ix(e,!1)||Fx(e,!1)||Dx(e,!1)||Kx(e)||_x(e,!1)||Ux(e,!1)||(sx(e,"Delete"),Tx(e))},Fz=function(e){Lx(e,!0)||Ix(e,!0)||Fx(e,!0)||Dx(e,!0)||Kx(e)||_x(e,!0)||Ux(e,!0)||sx(e,"ForwardDelete")},Uz={getFontSize:cx("font-size"),getFontFamily:q(function(e){return e.replace(/[\'\"\\]/g,"").replace(/,\s+/g,",")},cx("font-family")),toPt:function(e,t){return/[0-9.]+px$/.test(e)?function(e,t){var n=Math.pow(10,t);return Math.round(e*n)/n}(72*parseInt(e,10)/96,t||0)+"pt":e}},jz=Mn.each,qz=Mn.map,$z=Mn.inArray,Wz=(Kz.prototype.execCommand=function(t,n,r,e){var o,i,a=!1,u=this;if(!u.editor.removed){if(/^(mceAddUndoLevel|mceEndUndoLevel|mceBeginUndoLevel|mceRepaint)$/.test(t)||e&&e.skip_focus?Jf(u.editor):u.editor.focus(),(e=u.editor.fire("BeforeExecCommand",{command:t,ui:n,value:r})).isDefaultPrevented())return!1;if(i=t.toLowerCase(),o=u.commands.exec[i])return o(i,n,r),u.editor.fire("ExecCommand",{command:t,ui:n,value:r}),!0;if(jz(this.editor.plugins,function(e){if(e.execCommand&&e.execCommand(t,n,r))return u.editor.fire("ExecCommand",{command:t,ui:n,value:r}),!(a=!0)}),a)return a;if(u.editor.theme&&u.editor.theme.execCommand&&u.editor.theme.execCommand(t,n,r))return u.editor.fire("ExecCommand",{command:t,ui:n,value:r}),!0;try{a=u.editor.getDoc().execCommand(t,n,r)}catch(s){}return!!a&&(u.editor.fire("ExecCommand",{command:t,ui:n,value:r}),!0)}},Kz.prototype.queryCommandState=function(e){var t;if(!this.editor.quirks.isHidden()&&!this.editor.removed){if(e=e.toLowerCase(),t=this.commands.state[e])return t(e);try{return this.editor.getDoc().queryCommandState(e)}catch(n){}return!1}},Kz.prototype.queryCommandValue=function(e){var t;if(!this.editor.quirks.isHidden()&&!this.editor.removed){if(e=e.toLowerCase(),t=this.commands.value[e])return t(e);try{return this.editor.getDoc().queryCommandValue(e)}catch(n){}}},Kz.prototype.addCommands=function(e,n){var r=this;n=n||"exec",jz(e,function(t,e){jz(e.toLowerCase().split(","),function(e){r.commands[n][e]=t})})},Kz.prototype.addCommand=function(e,o,i){var a=this;e=e.toLowerCase(),this.commands.exec[e]=function(e,t,n,r){return o.call(i||a.editor,t,n,r)}},Kz.prototype.queryCommandSupported=function(e){if(e=e.toLowerCase(),this.commands.exec[e])return!0;try{return this.editor.getDoc().queryCommandSupported(e)}catch(t){}return!1},Kz.prototype.addQueryStateHandler=function(e,t,n){var r=this;e=e.toLowerCase(),this.commands.state[e]=function(){return t.call(n||r.editor)}},Kz.prototype.addQueryValueHandler=function(e,t,n){var r=this;e=e.toLowerCase(),this.commands.value[e]=function(){return t.call(n||r.editor)}},Kz.prototype.hasCustomCommand=function(e){return e=e.toLowerCase(),!!this.commands.exec[e]},Kz.prototype.execNativeCommand=function(e,t,n){return t===undefined&&(t=!1),n===undefined&&(n=null),this.editor.getDoc().execCommand(e,t,n)},Kz.prototype.isFormatMatch=function(e){return this.editor.formatter.match(e)},Kz.prototype.toggleFormat=function(e,t){this.editor.formatter.toggle(e,t?{value:t}:undefined),this.editor.nodeChanged()},Kz.prototype.storeSelection=function(e){this.selectionBookmark=this.editor.selection.getBookmark(e)},Kz.prototype.restoreSelection=function(){this.editor.selection.moveToBookmark(this.selectionBookmark)},Kz.prototype.setupCommands=function(i){var a=this;function e(n){return function(){var e=i.selection.isCollapsed()?[i.dom.getParent(i.selection.getNode(),i.dom.isBlock)]:i.selection.getSelectedBlocks(),t=qz(e,function(e){return!!i.formatter.matchNode(e,n)});return-1!==$z(t,!0)}}this.addCommands({"mceResetDesignMode,mceBeginUndoLevel":function(){},"mceEndUndoLevel,mceAddUndoLevel":function(){i.undoManager.add()},"Cut,Copy,Paste":function(e){var t,n=i.getDoc();try{a.execNativeCommand(e)}catch(o){t=!0}if("paste"!==e||n.queryCommandEnabled(e)||(t=!0),t||!n.queryCommandSupported(e)){var r=i.translate("Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X/C/V keyboard shortcuts instead.");Nn.mac&&(r=r.replace(/Ctrl\+/g,"\u2318+")),i.notificationManager.open({text:r,type:"error"})}},unlink:function(){if(i.selection.isCollapsed()){var e=i.dom.getParent(i.selection.getStart(),"a");e&&i.dom.remove(e,!0)}else i.formatter.remove("link")},"JustifyLeft,JustifyCenter,JustifyRight,JustifyFull,JustifyNone":function(e){var t=e.substring(7);"full"===t&&(t="justify"),jz("left,center,right,justify".split(","),function(e){t!==e&&i.formatter.remove("align"+e)}),"none"!==t&&a.toggleFormat("align"+t)},"InsertUnorderedList,InsertOrderedList":function(e){var t,n;a.execNativeCommand(e),(t=i.dom.getParent(i.selection.getNode(),"ol,ul"))&&(n=t.parentNode,/^(H[1-6]|P|ADDRESS|PRE)$/.test(n.nodeName)&&(a.storeSelection(),i.dom.split(n,t),a.restoreSelection()))},"Bold,Italic,Underline,Strikethrough,Superscript,Subscript":function(e){a.toggleFormat(e)},"ForeColor,HiliteColor":function(e,t,n){a.toggleFormat(e,n)},FontName:function(e,t,n){hx(i,n)},FontSize:function(e,t,n){!function(e,t){e.formatter.toggle("fontsize",{value:dx(e,t)}),e.nodeChanged()}(i,n)},RemoveFormat:function(e){i.formatter.remove(e)},mceBlockQuote:function(){a.toggleFormat("blockquote")},FormatBlock:function(e,t,n){return a.toggleFormat(n||"p")},mceCleanup:function(){var e=i.selection.getBookmark();i.setContent(i.getContent()),i.selection.moveToBookmark(e)},mceRemoveNode:function(e,t,n){var r=n||i.selection.getNode();r!==i.getBody()&&(a.storeSelection(),i.dom.remove(r,!0),a.restoreSelection())},mceSelectNodeDepth:function(e,t,n){var r=0;i.dom.getParent(i.selection.getNode(),function(e){if(1===e.nodeType&&r++===n)return i.selection.select(e),!1},i.getBody())},mceSelectNode:function(e,t,n){i.selection.select(n)},mceInsertContent:function(e,t,n){Vz(i,n)},mceInsertRawHTML:function(e,t,n){i.selection.setContent("tiny_mce_marker");var r=i.getContent();i.setContent(r.replace(/tiny_mce_marker/g,function(){return n}))},mceInsertNewLine:function(e,t,n){gz(i,n)},mceToggleFormat:function(e,t,n){a.toggleFormat(n)},mceSetContent:function(e,t,n){i.setContent(n)},"Indent,Outdent":function(e){_C(i,e)},mceRepaint:function(){},InsertHorizontalRule:function(){i.execCommand("mceInsertContent",!1,"<hr />")},mceToggleVisualAid:function(){i.hasVisual=!i.hasVisual,i.addVisual()},mceReplaceContent:function(e,t,n){i.execCommand("mceInsertContent",!1,n.replace(/\{\$selection\}/g,i.selection.getContent({format:"text"})))},mceInsertLink:function(e,t,n){var r;"string"==typeof n&&(n={href:n}),r=i.dom.getParent(i.selection.getNode(),"a"),n.href=n.href.replace(/ /g,"%20"),r&&n.href||i.formatter.remove("link"),n.href&&i.formatter.apply("link",n,r)},selectAll:function(){var e=i.dom.getParent(i.selection.getStart(),Ge.isContentEditableTrue);if(e){var t=i.dom.createRng();t.selectNodeContents(e),i.selection.setRng(t)}},"delete":function(){Iz(i)},forwardDelete:function(){Fz(i)},mceNewDocument:function(){i.setContent("")},InsertLineBreak:function(e,t,n){return lz(i,n),!0}}),a.addCommands({JustifyLeft:e("alignleft"),JustifyCenter:e("aligncenter"),JustifyRight:e("alignright"),JustifyFull:e("alignjustify"),"Bold,Italic,Underline,Strikethrough,Superscript,Subscript":function(e){return a.isFormatMatch(e)},mceBlockQuote:function(){return a.isFormatMatch("blockquote")},Outdent:function(){return RC(i)},"InsertUnorderedList,InsertOrderedList":function(e){var t=i.dom.getParent(i.selection.getNode(),"ul,ol");return t&&("insertunorderedlist"===e&&"UL"===t.tagName||"insertorderedlist"===e&&"OL"===t.tagName)}},"state"),a.addCommands({Undo:function(){i.undoManager.undo()},Redo:function(){i.undoManager.redo()}}),a.addQueryValueHandler("FontName",function(){return function(t){return fx(t).fold(function(){return lx(t).map(function(e){return Uz.getFontFamily(t.getBody(),e)}).getOr("")},function(e){return Uz.getFontFamily(t.getBody(),e)})}(i)},this),a.addQueryValueHandler("FontSize",function(){return function(t){return fx(t).fold(function(){return lx(t).map(function(e){return Uz.getFontSize(t.getBody(),e)}).getOr("")},function(e){return Uz.getFontSize(t.getBody(),e)})}(i)},this)},Kz);function Kz(e){this.commands={state:{},exec:{},value:{}},this.editor=e,this.setupCommands(e)}var Xz=Mn.makeMap("focus blur focusin focusout click dblclick mousedown mouseup mousemove mouseover beforepaste paste cut copy selectionchange mouseout mouseenter mouseleave wheel keydown keypress keyup input beforeinput contextmenu dragstart dragend dragover draggesture dragdrop drop drag submit compositionstart compositionend compositionupdate touchstart touchmove touchend touchcancel"," "),Yz=(Gz.isNative=function(e){return!!Xz[e.toLowerCase()]},Gz.prototype.fire=function(e,t){var n,r,o,i;if(e=e.toLowerCase(),(t=t||{}).type=e,t.target||(t.target=this.scope),t.preventDefault||(t.preventDefault=function(){t.isDefaultPrevented=a},t.stopPropagation=function(){t.isPropagationStopped=a},t.stopImmediatePropagation=function(){t.isImmediatePropagationStopped=a},t.isDefaultPrevented=c,t.isPropagationStopped=c,t.isImmediatePropagationStopped=c),this.settings.beforeFire&&this.settings.beforeFire(t),n=this.bindings[e])for(r=0,o=n.length;r<o;r++){if((i=n[r]).once&&this.off(e,i.func),t.isImmediatePropagationStopped())return t.stopPropagation(),t;if(!1===i.func.call(this.scope,t))return t.preventDefault(),t}return t},Gz.prototype.on=function(e,t,n,r){var o,i,a;if(!1===t&&(t=c),t){var u={func:t};for(r&&Mn.extend(u,r),a=(i=e.toLowerCase().split(" ")).length;a--;)e=i[a],(o=this.bindings[e])||(o=this.bindings[e]=[],this.toggleEvent(e,!0)),n?o.unshift(u):o.push(u)}return this},Gz.prototype.off=function(e,t){var n,r,o,i,a;if(e)for(n=(i=e.toLowerCase().split(" ")).length;n--;){if(e=i[n],r=this.bindings[e],!e){for(o in this.bindings)this.toggleEvent(o,!1),delete this.bindings[o];return this}if(r){if(t)for(a=r.length;a--;)r[a].func===t&&(r=r.slice(0,a).concat(r.slice(a+1)),this.bindings[e]=r);else r.length=0;r.length||(this.toggleEvent(e,!1),delete this.bindings[e])}}else{for(e in this.bindings)this.toggleEvent(e,!1);this.bindings={}}return this},Gz.prototype.once=function(e,t,n){return this.on(e,t,n,{once:!0})},Gz.prototype.has=function(e){return e=e.toLowerCase(),!(!this.bindings[e]||0===this.bindings[e].length)},Gz);function Gz(e){this.bindings={},this.settings=e||{},this.scope=this.settings.scope||this,this.toggleEvent=this.settings.toggleEvent||c}function Jz(n){return n._eventDispatcher||(n._eventDispatcher=new Yz({scope:n,toggleEvent:function(e,t){Yz.isNative(e)&&n.toggleNativeEvent&&n.toggleNativeEvent(e,t)}})),n._eventDispatcher}function Qz(e,t){return"selectionchange"===t?e.getDoc():!e.inline&&/^mouse|touch|click|contextmenu|drop|dragover|dragend/.test(t)?e.getDoc().documentElement:e.settings.event_root?(e.eventRoot||(e.eventRoot=rE.select(e.settings.event_root)[0]),e.eventRoot):e.getBody()}function Zz(e,t,n){!function(e){return!e.hidden&&!Gw(e)}(e)?Gw(e)&&function(e){var t=e.target;!function(e){return"click"===e.type}(e)||"A"!==t.tagName||Ah.metaKeyPressed(e)||e.preventDefault()}(n):e.fire(t,n)}function eE(i,a){var e,t;if(i.delegates||(i.delegates={}),!i.delegates[a]&&!i.removed)if(e=Qz(i,a),i.settings.event_root){if(tE||(tE={},i.editorManager.on("removeEditor",function(){var e;if(!i.editorManager.activeEditor&&tE){for(e in tE)i.dom.unbind(Qz(i,e));tE=null}})),tE[a])return;t=function(e){for(var t=e.target,n=i.editorManager.get(),r=n.length;r--;){var o=n[r].getBody();o!==t&&!rE.isChildOf(t,o)||Zz(n[r],a,e)}},tE[a]=t,rE.bind(e,a,t)}else t=function(e){Zz(i,a,e)},rE.bind(e,a,t),i.delegates[a]=t}var tE,nE={fire:function(e,t,n){if(this.removed&&"remove"!==e&&"detach"!==e)return t;var r=Jz(this).fire(e,t);if(!1!==n&&this.parent)for(var o=this.parent();o&&!r.isPropagationStopped();)o.fire(e,r,!1),o=o.parent();return r},on:function(e,t,n){return Jz(this).on(e,t,n)},off:function(e,t){return Jz(this).off(e,t)},once:function(e,t){return Jz(this).once(e,t)},hasEventListeners:function(e){return Jz(this).has(e)}},rE=Xi.DOM,oE=G(G({},nE),{bindPendingEventDelegates:function(){var t=this;Mn.each(t._pendingNativeEvents,function(e){eE(t,e)})},toggleNativeEvent:function(e,t){var n=this;"focus"!==e&&"blur"!==e&&(t?n.initialized?eE(n,e):n._pendingNativeEvents?n._pendingNativeEvents.push(e):n._pendingNativeEvents=[e]:n.initialized&&(n.dom.unbind(Qz(n,e),e,n.delegates[e]),delete n.delegates[e]))},unbindAllNativeEvents:function(){var e,t=this,n=t.getBody(),r=t.dom;if(t.delegates){for(e in t.delegates)t.dom.unbind(Qz(t,e),e,t.delegates[e]);delete t.delegates}!t.inline&&n&&r&&(n.onload=null,r.unbind(t.getWin()),r.unbind(t.getDoc())),r&&(r.unbind(n),r.unbind(t.getContainer()))}}),iE=Mn.each,aE=Mn.explode,uE={f1:112,f2:113,f3:114,f4:115,f5:116,f6:117,f7:118,f8:119,f9:120,f10:121,f11:122,f12:123},sE=Mn.makeMap("alt,ctrl,shift,meta,access"),cE=(lE.prototype.add=function(e,n,r,o){var t,i=this;return"string"==typeof(t=r)?r=function(){i.editor.execCommand(t,!1,null)}:Mn.isArray(t)&&(r=function(){i.editor.execCommand(t[0],t[1],t[2])}),iE(aE(Mn.trim(e)),function(e){var t=i.createShortcut(e,n,r,o);i.shortcuts[t.id]=t}),!0},lE.prototype.remove=function(e){var t=this.createShortcut(e);return!!this.shortcuts[t.id]&&(delete this.shortcuts[t.id],!0)},lE.prototype.parseShortcut=function(e){var t,n,r={};for(n in iE(aE(e.toLowerCase(),"+"),function(e){e in sE?r[e]=!0:/^[0-9]{2,}$/.test(e)?r.keyCode=parseInt(e,10):(r.charCode=e.charCodeAt(0),r.keyCode=uE[e]||e.toUpperCase().charCodeAt(0))}),t=[r.keyCode],sE)r[n]?t.push(n):r[n]=!1;return r.id=t.join(","),r.access&&(r.alt=!0,Nn.mac?r.ctrl=!0:r.shift=!0),r.meta&&(Nn.mac?r.meta=!0:(r.ctrl=!0,r.meta=!1)),r},lE.prototype.createShortcut=function(e,t,n,r){var o;return(o=Mn.map(aE(e,">"),this.parseShortcut))[o.length-1]=Mn.extend(o[o.length-1],{func:n,scope:r||this.editor}),Mn.extend(o[0],{desc:this.editor.translate(t),subpatterns:o.slice(1)})},lE.prototype.hasModifier=function(e){return e.altKey||e.ctrlKey||e.metaKey},lE.prototype.isFunctionKey=function(e){return"keydown"===e.type&&112<=e.keyCode&&e.keyCode<=123},lE.prototype.matchShortcut=function(e,t){return!!t&&t.ctrl===e.ctrlKey&&t.meta===e.metaKey&&t.alt===e.altKey&&t.shift===e.shiftKey&&!!(e.keyCode===t.keyCode||e.charCode&&e.charCode===t.charCode)&&(e.preventDefault(),!0)},lE.prototype.executeShortcutAction=function(e){return e.func?e.func.call(e.scope):null},lE);function lE(e){this.shortcuts={},this.pendingPatterns=[],this.editor=e;var n=this;e.on("keyup keypress keydown",function(t){!n.hasModifier(t)&&!n.isFunctionKey(t)||t.isDefaultPrevented()||(iE(n.shortcuts,function(e){if(n.matchShortcut(t,e))return n.pendingPatterns=e.subpatterns.slice(0),"keydown"===t.type&&n.executeShortcutAction(e),!0}),n.matchShortcut(t,n.pendingPatterns[0])&&(1===n.pendingPatterns.length&&"keydown"===t.type&&n.executeShortcutAction(n.pendingPatterns[0]),n.pendingPatterns.shift()))})}var fE=Mn.each,dE=Mn.trim,hE="source protocol authority userInfo user password host port relative path directory file query anchor".split(" "),mE={ftp:21,http:80,https:443,mailto:25},gE=(pE.parseDataUri=function(e){var t,n=decodeURIComponent(e).split(","),r=/data:([^;]+)/.exec(n[0]);return r&&(t=r[1]),{type:t,data:n[1]}},pE.getDocumentBaseUrl=function(e){var t;return t=0!==e.protocol.indexOf("http")&&"file:"!==e.protocol?e.href:e.protocol+"//"+e.host+e.pathname,/^[^:]+:\/\/\/?[^\/]+\//.test(t)&&(t=t.replace(/[\?#].*$/,"").replace(/[\/\\][^\/]+$/,""),/[\/\\]$/.test(t)||(t+="/")),t},pE.prototype.setPath=function(e){var t=/^(.*?)\/?(\w+)?$/.exec(e);this.path=t[0],this.directory=t[1],this.file=t[2],this.source="",this.getURI()},pE.prototype.toRelative=function(e){var t;if("./"===e)return e;var n=new pE(e,{base_uri:this});if("mce_host"!==n.host&&this.host!==n.host&&n.host||this.port!==n.port||this.protocol!==n.protocol&&""!==n.protocol)return n.getURI();var r=this.getURI(),o=n.getURI();return r===o||"/"===r.charAt(r.length-1)&&r.substr(0,r.length-1)===o?r:(t=this.toRelPath(this.path,n.path),n.query&&(t+="?"+n.query),n.anchor&&(t+="#"+n.anchor),t)},pE.prototype.toAbsolute=function(e,t){var n=new pE(e,{base_uri:this});return n.getURI(t&&this.isSameOrigin(n))},pE.prototype.isSameOrigin=function(e){if(this.host==e.host&&this.protocol==e.protocol){if(this.port==e.port)return!0;var t=mE[this.protocol];if(t&&(this.port||t)==(e.port||t))return!0}return!1},pE.prototype.toRelPath=function(e,t){var n,r,o,i=0,a="",u=e.substring(0,e.lastIndexOf("/")).split("/");if(n=t.split("/"),u.length>=n.length)for(r=0,o=u.length;r<o;r++)if(r>=n.length||u[r]!==n[r]){i=r+1;break}if(u.length<n.length)for(r=0,o=n.length;r<o;r++)if(r>=u.length||u[r]!==n[r]){i=r+1;break}if(1===i)return t;for(r=0,o=u.length-(i-1);r<o;r++)a+="../";for(r=i-1,o=n.length;r<o;r++)a+=r!==i-1?"/"+n[r]:n[r];return a},pE.prototype.toAbsPath=function(e,t){var n,r,o,i=0,a=[];r=/\/$/.test(t)?"/":"";var u=e.split("/"),s=t.split("/");for(fE(u,function(e){e&&a.push(e)}),u=a,n=s.length-1,a=[];0<=n;n--)0!==s[n].length&&"."!==s[n]&&(".."!==s[n]?0<i?i--:a.push(s[n]):i++);return 0!==(o=(n=u.length-i)<=0?a.reverse().join("/"):u.slice(0,n).join("/")+"/"+a.reverse().join("/")).indexOf("/")&&(o="/"+o),r&&o.lastIndexOf("/")!==o.length-1&&(o+=r),o},pE.prototype.getURI=function(e){var t;return void 0===e&&(e=!1),this.source&&!e||(t="",e||(this.protocol?t+=this.protocol+"://":t+="//",this.userInfo&&(t+=this.userInfo+"@"),this.host&&(t+=this.host),this.port&&(t+=":"+this.port)),this.path&&(t+=this.path),this.query&&(t+="?"+this.query),this.anchor&&(t+="#"+this.anchor),this.source=t),this.source},pE);function pE(e,t){e=dE(e),this.settings=t||{};var n=this.settings.base_uri,r=this;if(/^([\w\-]+):([^\/]{2})/i.test(e)||/^\s*#/.test(e))r.source=e;else{var o=0===e.indexOf("//");if(0!==e.indexOf("/")||o||(e=(n&&n.protocol||"http")+"://mce_host"+e),!/^[\w\-]*:?\/\//.test(e)){var i=this.settings.base_uri?this.settings.base_uri.path:new pE(j.document.location.href).directory;if(this.settings.base_uri&&""==this.settings.base_uri.protocol)e="//mce_host"+r.toAbsPath(i,e);else{var a=/([^#?]*)([#?]?.*)/.exec(e);e=(n&&n.protocol||"http")+"://mce_host"+r.toAbsPath(i,a[1])+a[2]}}e=e.replace(/@@/g,"(mce_at)");var u=/^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@\/]*):?([^:@\/]*))?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/.exec(e);fE(hE,function(e,t){var n=u[t];n=n&&n.replace(/\(mce_at\)/g,"@@"),r[e]=n}),n&&(r.protocol||(r.protocol=n.protocol),r.userInfo||(r.userInfo=n.userInfo),r.port||"mce_host"!==r.host||(r.port=n.port),r.host&&"mce_host"!==r.host||(r.host=n.host),r.source=""),o&&(r.protocol="")}}function vE(){var e=function(){function e(n,r){return function(e,t){return n[e.toLowerCase()]=G(G({},t),{type:r})}}var t={},n={},r={},o={},i={},a={},u={};return{addButton:e(t,"button"),addToggleButton:e(t,"togglebutton"),addMenuButton:e(t,"menubutton"),addSplitButton:e(t,"splitbutton"),addMenuItem:e(n,"menuitem"),addNestedMenuItem:e(n,"nestedmenuitem"),addToggleMenuItem:e(n,"togglemenuitem"),addAutocompleter:e(r,"autocompleter"),addContextMenu:e(i,"contextmenu"),addContextToolbar:e(a,"contexttoolbar"),addContextForm:e(a,"contextform"),addSidebar:e(u,"sidebar"),addIcon:function(e,t){return o[e.toLowerCase()]=t},getAll:function(){return{buttons:t,menuItems:n,icons:o,popups:r,contextMenus:i,contextToolbars:a,sidebars:u}}}}();return{addAutocompleter:e.addAutocompleter,addButton:e.addButton,addContextForm:e.addContextForm,addContextMenu:e.addContextMenu,addContextToolbar:e.addContextToolbar,addIcon:e.addIcon,addMenuButton:e.addMenuButton,addMenuItem:e.addMenuItem,addNestedMenuItem:e.addNestedMenuItem,addSidebar:e.addSidebar,addSplitButton:e.addSplitButton,addToggleButton:e.addToggleButton,addToggleMenuItem:e.addToggleMenuItem,getAll:e.getAll}}var yE=Xi.DOM,bE=Mn.extend,CE=Mn.each,wE=Mn.resolve,xE=Nn.ie,zE=(EE.prototype.render=function(){Dz(this)},EE.prototype.focus=function(e){ad(this,e)},EE.prototype.hasFocus=function(){return ud(this)},EE.prototype.execCallback=function(e){for(var t=[],n=1;n<arguments.length;n++)t[n-1]=arguments[n];var r,o=this.settings[e];if(o)return this.callbackLookup&&(r=this.callbackLookup[e])&&(o=r.func,r=r.scope),"string"==typeof o&&(r=(r=o.replace(/\.\w+$/,""))?wE(r):0,o=wE(o),this.callbackLookup=this.callbackLookup||{},this.callbackLookup[e]={func:o,scope:r}),o.apply(r||this,Array.prototype.slice.call(arguments,1))},EE.prototype.translate=function(e){return ra.translate(e)},EE.prototype.getParam=function(e,t,n){return ef(this,e,t,n)},EE.prototype.nodeChanged=function(e){this._nodeChangeDispatcher.nodeChanged(e)},EE.prototype.addCommand=function(e,t,n){this.editorCommands.addCommand(e,t,n)},EE.prototype.addQueryStateHandler=function(e,t,n){this.editorCommands.addQueryStateHandler(e,t,n)},EE.prototype.addQueryValueHandler=function(e,t,n){this.editorCommands.addQueryValueHandler(e,t,n)},EE.prototype.addShortcut=function(e,t,n,r){this.shortcuts.add(e,t,n,r)},EE.prototype.execCommand=function(e,t,n,r){return this.editorCommands.execCommand(e,t,n,r)},EE.prototype.queryCommandState=function(e){return this.editorCommands.queryCommandState(e)},EE.prototype.queryCommandValue=function(e){return this.editorCommands.queryCommandValue(e)},EE.prototype.queryCommandSupported=function(e){return this.editorCommands.queryCommandSupported(e)},EE.prototype.show=function(){this.hidden&&(this.hidden=!1,this.inline?this.getBody().contentEditable="true":(yE.show(this.getContainer()),yE.hide(this.id)),this.load(),this.fire("show"))},EE.prototype.hide=function(){var e=this,t=e.getDoc();e.hidden||(xE&&t&&!e.inline&&t.execCommand("SelectAll"),e.save(),e.inline?(e.getBody().contentEditable="false",e===e.editorManager.focusedEditor&&(e.editorManager.focusedEditor=null)):(yE.hide(e.getContainer()),yE.setStyle(e.id,"display",e.orgDisplay)),e.hidden=!0,e.fire("hide"))},EE.prototype.isHidden=function(){return!!this.hidden},EE.prototype.setProgressState=function(e,t){this.fire("ProgressState",{state:e,time:t})},EE.prototype.load=function(e){var t,n=this.getElement();if(this.removed)return"";if(n){(e=e||{}).load=!0;var r=Ge.isTextareaOrInput(n)?n.value:n.innerHTML;return t=this.setContent(r,e),e.element=n,e.no_events||this.fire("LoadContent",e),e.element=n=null,t}},EE.prototype.save=function(e){var t,n,r=this,o=r.getElement();if(o&&r.initialized&&!r.removed)return(e=e||{}).save=!0,e.element=o,e.content=r.getContent(e),e.no_events||r.fire("SaveContent",e),"raw"===e.format&&r.fire("RawSaveContent",e),t=e.content,Ge.isTextareaOrInput(o)?o.value=t:(!e.is_removing&&r.inline||(o.innerHTML=t),(n=yE.getParent(r.id,"form"))&&CE(n.elements,function(e){if(e.name===r.id)return e.value=t,!1})),e.element=o=null,!1!==e.set_dirty&&r.setDirty(!1),t},EE.prototype.setContent=function(e,t){return jl(this,e,t)},EE.prototype.getContent=function(e){return function(t,n){return void 0===n&&(n={}),k.from(t.getBody()).fold($("tree"===n.format?new ul("body",11):""),function(e){return ml(t,n,e)})}(this,e)},EE.prototype.insertContent=function(e,t){t&&(e=bE({content:e},t)),this.execCommand("mceInsertContent",!1,e)},EE.prototype.resetContent=function(e){e===undefined?jl(this,this.startContent,{format:"raw"}):jl(this,e),this.undoManager.reset(),this.setDirty(!1),this.nodeChanged()},EE.prototype.isDirty=function(){return!this.isNotDirty},EE.prototype.setDirty=function(e){var t=!this.isNotDirty;this.isNotDirty=!e,e&&e!==t&&this.fire("dirty")},EE.prototype.getContainer=function(){return this.container||(this.container=yE.get(this.editorContainer||this.id+"_parent")),this.container},EE.prototype.getContentAreaContainer=function(){return this.contentAreaContainer},EE.prototype.getElement=function(){return this.targetElm||(this.targetElm=yE.get(this.id)),this.targetElm},EE.prototype.getWin=function(){var e;return this.contentWindow||(e=this.iframeElement)&&(this.contentWindow=e.contentWindow),this.contentWindow},EE.prototype.getDoc=function(){var e;return this.contentDocument||(e=this.getWin())&&(this.contentDocument=e.document),this.contentDocument},EE.prototype.getBody=function(){var e=this.getDoc();return this.bodyElement||(e?e.body:null)},EE.prototype.convertURL=function(e,t,n){var r=this.settings;return r.urlconverter_callback?this.execCallback("urlconverter_callback",e,n,!0,t):!r.convert_urls||n&&"LINK"===n.nodeName||0===e.indexOf("file:")||0===e.length?e:r.relative_urls?this.documentBaseURI.toRelative(e):e=this.documentBaseURI.toAbsolute(e,r.remove_script_host)},EE.prototype.addVisual=function(e){var n,r=this,o=r.settings,i=r.dom;e=e||r.getBody(),r.hasVisual===undefined&&(r.hasVisual=o.visual),CE(i.select("table,a",e),function(e){var t;switch(e.nodeName){case"TABLE":return n=o.visual_table_class||"mce-item-table",void((t=i.getAttrib(e,"border"))&&"0"!==t||!r.hasVisual?i.removeClass(e,n):i.addClass(e,n));case"A":return void(i.getAttrib(e,"href")||(t=i.getAttrib(e,"name")||e.id,n=o.visual_anchor_class||"mce-item-anchor",t&&r.hasVisual?i.addClass(e,n):i.removeClass(e,n)))}}),r.fire("VisualAid",{element:e,hasVisual:r.hasVisual})},EE.prototype.remove=function(){$l(this)},EE.prototype.destroy=function(e){Wl(this,e)},EE.prototype.uploadImages=function(e){return this.editorUpload.uploadImages(e)},EE.prototype._scanForImages=function(){return this.editorUpload.scanForImages()},EE.prototype.addButton=function(){throw new Error("editor.addButton has been removed in tinymce 5x, use editor.ui.registry.addButton or editor.ui.registry.addToggleButton or editor.ui.registry.addSplitButton instead")},EE.prototype.addSidebar=function(){throw new Error("editor.addSidebar has been removed in tinymce 5x, use editor.ui.registry.addSidebar instead")},EE.prototype.addMenuItem=function(){throw new Error("editor.addMenuItem has been removed in tinymce 5x, use editor.ui.registry.addMenuItem instead")},EE.prototype.addContextToolbar=function(){throw new Error("editor.addContextToolbar has been removed in tinymce 5x, use editor.ui.registry.addContextToolbar instead")},EE);function EE(e,t,n){var r=this;this.plugins={},this.contentCSS=[],this.contentStyles=[],this.loadedCSS={},this.isNotDirty=!1,this.editorManager=n,this.documentBaseUrl=n.documentBaseURL,bE(this,oE),this.settings=Ql(this,e,this.documentBaseUrl,n.defaultSettings,t),this.settings.suffix&&(n.suffix=this.settings.suffix),this.suffix=n.suffix,this.settings.base_url&&n._setBaseUrl(this.settings.base_url),this.baseUri=n.baseURI,this.settings.referrer_policy&&(Qi.ScriptLoader._setReferrerPolicy(this.settings.referrer_policy),Xi.DOM.styleSheetLoader._setReferrerPolicy(this.settings.referrer_policy)),ga.languageLoad=this.settings.language_load,ga.baseURL=n.baseURL,this.id=e,this.setDirty(!1),this.documentBaseURI=new gE(this.settings.document_base_url,{base_uri:this.baseUri}),this.baseURI=this.baseUri,this.inline=!!this.settings.inline,this.shortcuts=new cE(this),this.editorCommands=new Wz(this),this.settings.cache_suffix&&(Nn.cacheSuffix=this.settings.cache_suffix.replace(/^[\?\&]+/,"")),this.ui={registry:vE()};var o=Zw(this);this.mode=o,this.setMode=o.set,n.fire("SetupEditor",{editor:this}),this.execCallback("setup",this),this.$=vi.overrideDefaults(function(){return{context:r.inline?r.getBody():r.getDoc(),element:r.getBody()}})}function NE(t){var n=t.type;DE(VE.get(),function(e){switch(n){case"scroll":e.fire("ScrollWindow",t);break;case"resize":e.fire("ResizeWindow",t)}})}function SE(e){e!==OE&&(e?vi(window).on("resize scroll",NE):vi(window).off("resize scroll",NE),OE=e)}function kE(t){var e=PE;delete HE[t.id];for(var n=0;n<HE.length;n++)if(HE[n]===t){HE.splice(n,1);break}return PE=y(PE,function(e){return t!==e}),VE.activeEditor===t&&(VE.activeEditor=0<PE.length?PE[0]:null),VE.focusedEditor===t&&(VE.focusedEditor=null),e.length!==PE.length}var TE,AE,ME=Xi.DOM,RE=Mn.explode,DE=Mn.each,_E=Mn.extend,BE=0,OE=!1,HE=[],PE=[],LE="CSS1Compat"!==j.document.compatMode,VE=G(G({},nE),{baseURI:null,baseURL:null,defaultSettings:{},documentBaseURL:null,suffix:null,$:vi,majorVersion:"5",minorVersion:"1.5",releaseDate:"2019-12-19",editors:HE,i18n:ra,activeEditor:null,focusedEditor:null,settings:{},setup:function(){var e,t,n="";t=gE.getDocumentBaseUrl(j.document.location),/^[^:]+:\/\/\/?[^\/]+\//.test(t)&&(t=t.replace(/[\?#].*$/,"").replace(/[\/\\][^\/]+$/,""),/[\/\\]$/.test(t)||(t+="/"));var r=window.tinymce||window.tinyMCEPreInit;if(r)e=r.base||r.baseURL,n=r.suffix;else{for(var o=j.document.getElementsByTagName("script"),i=0;i<o.length;i++){var a;if(""!==(a=o[i].src||"")){var u=a.substring(a.lastIndexOf("/"));if(/tinymce(\.full|\.jquery|)(\.min|\.dev|)\.js/.test(a)){-1!==u.indexOf(".min")&&(n=".min"),e=a.substring(0,a.lastIndexOf("/"));break}}}if(!e&&j.document.currentScript)-1!==(a=j.document.currentScript.src).indexOf(".min")&&(n=".min"),e=a.substring(0,a.lastIndexOf("/"))}this.baseURL=new gE(t).toAbsolute(e),this.documentBaseURL=t,this.baseURI=new gE(this.baseURL),this.suffix=n,nd(this)},overrideDefaults:function(e){var t,n;(t=e.base_url)&&this._setBaseUrl(t),n=e.suffix,e.suffix&&(this.suffix=n);var r=(this.defaultSettings=e).plugin_base_urls;for(var o in r)ga.PluginManager.urls[o]=r[o]},init:function(r){var n,u,s=this;u=Mn.makeMap("area base basefont br col frame hr img input isindex link meta param embed source wbr track colgroup option table tbody tfoot thead tr th td script noscript style textarea video audio iframe object menu"," ");function c(e){var t=e.id;return t||(t=(t=e.name)&&!ME.get(t)?e.name:ME.uniqueId(),e.setAttribute("id",t)),t}function l(e,t){return t.constructor===RegExp?t.test(e.className):ME.hasClass(e,t)}var f=function(e){n=e},e=function(){function n(e,t,n){var r=new zE(e,t,s);a.push(r),r.on("init",function(){++i===o.length&&f(a)}),r.targetElm=r.targetElm||n,r.render()}var o,i=0,a=[];ME.unbind(window,"ready",e),function(e){var t=r[e];if(t)t.apply(s,Array.prototype.slice.call(arguments,2))}("onpageload"),o=vi.unique(function(t){var e,n=[];if(Nn.browser.isIE()&&Nn.browser.version.major<11)return Fd.initError("TinyMCE does not support the browser you are using. For a list of supported browsers please see: https://www.tinymce.com/docs/get-started/system-requirements/"),[];if(LE)return Fd.initError("Failed to initialize the editor as the document is not in standards mode. TinyMCE requires standards mode."),[];if(t.types)return DE(t.types,function(e){n=n.concat(ME.select(e.selector))}),n;if(t.selector)return ME.select(t.selector);if(t.target)return[t.target];switch(t.mode){case"exact":0<(e=t.elements||"").length&&DE(RE(e),function(t){var e;(e=ME.get(t))?n.push(e):DE(j.document.forms,function(e){DE(e.elements,function(e){e.name===t&&(t="mce_editor_"+BE++,ME.setAttrib(e,"id",t),n.push(e))})})});break;case"textareas":case"specific_textareas":DE(ME.select("textarea"),function(e){t.editor_deselector&&l(e,t.editor_deselector)||t.editor_selector&&!l(e,t.editor_selector)||n.push(e)})}return n}(r)),r.types?DE(r.types,function(t){Mn.each(o,function(e){return!ME.is(e,t.selector)||(n(c(e),_E({},r,t),e),!1)})}):(Mn.each(o,function(e){!function(e){e&&e.initialized&&!(e.getContainer()||e.getBody()).parentNode&&(kE(e),e.unbindAllNativeEvents(),e.destroy(!0),e.removed=!0,e=null)}(s.get(e.id))}),0===(o=Mn.grep(o,function(e){return!s.get(e.id)})).length?f([]):DE(o,function(e){!function(e,t){return e.inline&&t.tagName.toLowerCase()in u}(r,e)?n(c(e),r,e):Fd.initError("Could not initialize inline editor on invalid inline target element",e)}))};return s.settings=r,ME.bind(window,"ready",e),new Zt(function(t){n?t(n):f=function(e){t(e)}})},get:function(t){return 0===arguments.length?PE.slice(0):K(t)?g(PE,function(e){return e.id===t}).getOr(null):_(t)&&PE[t]?PE[t]:null},add:function(e){var n=this;return HE[e.id]===e||(null===n.get(e.id)&&(function(e){return"length"!==e}(e.id)&&(HE[e.id]=e),HE.push(e),PE.push(e)),SE(!0),n.activeEditor=e,n.fire("AddEditor",{editor:e}),TE||(TE=function(e){var t=n.fire("BeforeUnload");if(t.returnValue)return e.preventDefault(),e.returnValue=t.returnValue,t.returnValue},window.addEventListener("beforeunload",TE))),e},createEditor:function(e,t){return this.add(new zE(e,t,this))},remove:function(e){var t,n,r=this;if(e){if(!K(e))return n=e,M(r.get(n.id))?null:(kE(n)&&r.fire("RemoveEditor",{editor:n}),0===PE.length&&window.removeEventListener("beforeunload",TE),n.remove(),SE(0<PE.length),n);DE(ME.select(e),function(e){(n=r.get(e.id))&&r.remove(n)})}else for(t=PE.length-1;0<=t;t--)r.remove(PE[t])},execCommand:function(e,t,n){var r=this.get(n);switch(e){case"mceAddEditor":return this.get(n)||new zE(n,this.settings,this).render(),!0;case"mceRemoveEditor":return r&&r.remove(),!0;case"mceToggleEditor":return r?r.isHidden()?r.show():r.hide():this.execCommand("mceAddEditor",0,n),!0}return!!this.activeEditor&&this.activeEditor.execCommand(e,t,n)},triggerSave:function(){DE(PE,function(e){e.save()})},addI18n:function(e,t){ra.add(e,t)},translate:function(e){return ra.translate(e)},setActive:function(e){var t=this.activeEditor;this.activeEditor!==e&&(t&&t.fire("deactivate",{relatedTarget:e}),e.fire("activate",{relatedTarget:t})),this.activeEditor=e},_setBaseUrl:function(e){this.baseURL=new gE(this.documentBaseURL).toAbsolute(e.replace(/\/+$/,"")),this.baseURI=new gE(this.baseURL)}});function IE(n){return{walk:function(e,t){return Gc(n,e,t)},split:Cm,normalize:function(t){return ay(n,t).fold($(!1),function(e){return t.setStart(e.startContainer,e.startOffset),t.setEnd(e.endContainer,e.endOffset),!0})}}}VE.setup(),(AE=IE=IE||{}).compareRanges=hh,AE.getCaretRangeFromPoint=$v,AE.getSelectedNode=Wa,AE.getNode=Ka;function FE(e,t,n){var r,o,i,a,u,s;return r=t.x,o=t.y,i=e.w,a=e.h,u=t.w,s=t.h,"b"===(n=(n||"").split(""))[0]&&(o+=s),"r"===n[1]&&(r+=u),"c"===n[0]&&(o+=JE(s/2)),"c"===n[1]&&(r+=JE(u/2)),"b"===n[3]&&(o-=a),"r"===n[4]&&(r-=i),"c"===n[3]&&(o-=JE(a/2)),"c"===n[4]&&(r-=JE(i/2)),QE(r,o,i,a)}function UE(){}var jE,qE,$E,WE,KE=IE,XE=(jE={},qE={},{load:function(r,o){var i='Script at URL "'+o+'" failed to load',a='Script at URL "'+o+"\" did not call `tinymce.Resource.add('"+r+"', data)` within 1 second";if(jE[r]!==undefined)return jE[r];var e=new Zt(function(e,t){var n=function(e,t,n){function r(n){return function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];o||(o=!0,null!==i&&(j.clearTimeout(i),i=null),n.apply(null,e))}}void 0===n&&(n=1e3);var o=!1,i=null,a=r(e),u=r(t);return{start:function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];o||null!==i||(i=j.setTimeout(function(){return u.apply(null,e)},n))},resolve:a,reject:u}}(e,t);qE[r]=n.resolve,Qi.ScriptLoader.loadScript(o,function(){return n.start(a)},function(){return n.reject(i)})});return jE[r]=e},add:function(e,t){qE[e]!==undefined&&(qE[e](t),delete qE[e]),jE[e]=Zt.resolve(t)}}),YE=Math.min,GE=Math.max,JE=Math.round,QE=function(e,t,n,r){return{x:e,y:t,w:n,h:r}},ZE={inflate:function(e,t,n){return QE(e.x-t,e.y-n,e.w+2*t,e.h+2*n)},relativePosition:FE,findBestRelativePosition:function(e,t,n,r){var o,i;for(i=0;i<r.length;i++)if((o=FE(e,t,r[i])).x>=n.x&&o.x+o.w<=n.w+n.x&&o.y>=n.y&&o.y+o.h<=n.h+n.y)return r[i];return null},intersect:function(e,t){var n,r,o,i;return n=GE(e.x,t.x),r=GE(e.y,t.y),o=YE(e.x+e.w,t.x+t.w),i=YE(e.y+e.h,t.y+t.h),o-n<0||i-r<0?null:QE(n,r,o-n,i-r)},clamp:function(e,t,n){var r,o,i,a,u,s,c,l,f,d;return u=e.x,s=e.y,c=e.x+e.w,l=e.y+e.h,f=t.x+t.w,d=t.y+t.h,r=GE(0,t.x-u),o=GE(0,t.y-s),i=GE(0,c-f),a=GE(0,l-d),u+=r,s+=o,n&&(c+=r,l+=o,u-=i,s-=a),QE(u,s,(c-=i)-u,(l-=a)-s)},create:QE,fromClientRect:function(e){return QE(e.left,e.top,e.width,e.height)}},eN=Mn.each,tN=Mn.extend;UE.extend=$E=function(n){function r(){var e,t,n;if(!WE&&(this.init&&this.init.apply(this,arguments),t=this.Mixins))for(e=t.length;e--;)(n=t[e]).init&&n.init.apply(this,arguments)}function t(){return this}function e(n,r){return function(){var e,t=this._super;return this._super=u[n],e=r.apply(this,arguments),this._super=t,e}}var o,i,a,u=this.prototype;for(i in WE=!0,o=new this,WE=!1,n.Mixins&&(eN(n.Mixins,function(e){for(var t in e)"init"!==t&&(n[t]=e[t])}),u.Mixins&&(n.Mixins=u.Mixins.concat(n.Mixins))),n.Methods&&eN(n.Methods.split(","),function(e){n[e]=t}),n.Properties&&eN(n.Properties.split(","),function(e){var t="_"+e;n[e]=function(e){return e!==undefined?(this[t]=e,this):this[t]}}),n.Statics&&eN(n.Statics,function(e,t){r[t]=e}),n.Defaults&&u.Defaults&&(n.Defaults=tN({},u.Defaults,n.Defaults)),n)"function"==typeof(a=n[i])&&u[i]?o[i]=e(i,a):o[i]=a;return r.prototype=o,(r.constructor=r).extend=$E,r};var nN=Math.min,rN=Math.max,oN=Math.round,iN={serialize:function(e){var t=JSON.stringify(e);return K(t)?t.replace(/[\u0080-\uFFFF]/g,function(e){var t=e.charCodeAt(0).toString(16);return"\\u"+"0000".substring(t.length)+t}):t},parse:function(e){try{return JSON.parse(e)}catch(t){}}},aN={callbacks:{},count:0,send:function(t){var n=this,r=Xi.DOM,o=t.count!==undefined?t.count:n.count,i="tinymce_jsonp_"+o;n.callbacks[o]=function(e){r.remove(i),delete n.callbacks[o],t.callback(e)},r.add(r.doc.body,"script",{id:i,src:t.url,type:"text/javascript"}),n.count++}},uN=G(G({},nE),{send:function(e){var t,n=0,r=function(){!e.async||4===t.readyState||1e4<n++?(e.success&&n<1e4&&200===t.status?e.success.call(e.success_scope,""+t.responseText,t,e):e.error&&e.error.call(e.error_scope,1e4<n?"TIMED_OUT":"GENERAL",t,e),t=null):pn.setTimeout(r,10)};if(e.scope=e.scope||this,e.success_scope=e.success_scope||e.scope,e.error_scope=e.error_scope||e.scope,e.async=!1!==e.async,e.data=e.data||"",uN.fire("beforeInitialize",{settings:e}),t=new j.XMLHttpRequest){if(t.overrideMimeType&&t.overrideMimeType(e.content_type),t.open(e.type||(e.data?"POST":"GET"),e.url,e.async),e.crossDomain&&(t.withCredentials=!0),e.content_type&&t.setRequestHeader("Content-Type",e.content_type),e.requestheaders&&Mn.each(e.requestheaders,function(e){t.setRequestHeader(e.key,e.value)}),t.setRequestHeader("X-Requested-With","XMLHttpRequest"),(t=uN.fire("beforeSend",{xhr:t,settings:e}).xhr).send(e.data),!e.async)return r();pn.setTimeout(r,10)}}}),sN=Mn.extend,cN=(lN.sendRPC=function(e){return(new lN).send(e)},lN.prototype.send=function(e){var n=e.error,r=e.success,o=sN(this.settings,e);o.success=function(e,t){void 0===(e=iN.parse(e))&&(e={error:"JSON Parse error."}),e.error?n.call(o.error_scope||o.scope,e.error,t):r.call(o.success_scope||o.scope,e.result)},o.error=function(e,t){n&&n.call(o.error_scope||o.scope,e,t)},o.data=iN.serialize({id:e.id||"c"+this.count++,method:e.method,params:e.params}),o.content_type="application/json",uN.send(o)},lN);function lN(e){this.settings=sN({},e),this.count=0}var fN,dN,hN,mN;try{fN=j.window.localStorage}catch(yN){dN={},hN=[],mN={getItem:function(e){var t=dN[e];return t||null},setItem:function(e,t){hN.push(e),dN[e]=String(t)},key:function(e){return hN[e]},removeItem:function(t){hN=hN.filter(function(e){return e===t}),delete dN[t]},clear:function(){hN=[],dN={}},length:0},Object.defineProperty(mN,"length",{get:function(){return hN.length},configurable:!1,enumerable:!1}),fN=mN}var gN,pN={geom:{Rect:ZE},util:{Promise:Zt,Delay:pn,Tools:Mn,VK:Ah,URI:gE,Class:UE,EventDispatcher:Yz,Observable:nE,I18n:ra,XHR:uN,JSON:iN,JSONRequest:cN,JSONP:aN,LocalStorage:fN,Color:function(e){function t(e){var t;return"object"==typeof e?"r"in e?(u=e.r,s=e.g,c=e.b):"v"in e&&function(e,t,n){var r,o,i,a;if(e=(parseInt(e,10)||0)%360,t=parseInt(t,10)/100,n=parseInt(n,10)/100,t=rN(0,nN(t,1)),n=rN(0,nN(n,1)),0!==t){switch(r=e/60,i=(o=n*t)*(1-Math.abs(r%2-1)),a=n-o,Math.floor(r)){case 0:u=o,s=i,c=0;break;case 1:u=i,s=o,c=0;break;case 2:u=0,s=o,c=i;break;case 3:u=0,s=i,c=o;break;case 4:u=i,s=0,c=o;break;case 5:u=o,s=0,c=i;break;default:u=s=c=0}u=oN(255*(u+a)),s=oN(255*(s+a)),c=oN(255*(c+a))}else u=s=c=oN(255*n)}(e.h,e.s,e.v):(t=/rgb\s*\(\s*([0-9]+)\s*,\s*([0-9]+)\s*,\s*([0-9]+)[^\)]*\)/gi.exec(e))?(u=parseInt(t[1],10),s=parseInt(t[2],10),c=parseInt(t[3],10)):(t=/#([0-F]{2})([0-F]{2})([0-F]{2})/gi.exec(e))?(u=parseInt(t[1],16),s=parseInt(t[2],16),c=parseInt(t[3],16)):(t=/#([0-F])([0-F])([0-F])/gi.exec(e))&&(u=parseInt(t[1]+t[1],16),s=parseInt(t[2]+t[2],16),c=parseInt(t[3]+t[3],16)),u=u<0?0:255<u?255:u,s=s<0?0:255<s?255:s,c=c<0?0:255<c?255:c,n}var n={},u=0,s=0,c=0;return e&&t(e),n.toRgb=function(){return{r:u,g:s,b:c}},n.toHsv=function(){return function(e,t,n){var r,o,i,a;return o=0,(i=nN(e/=255,nN(t/=255,n/=255)))===(a=rN(e,rN(t,n)))?{h:0,s:0,v:100*(o=i)}:(r=(a-i)/a,{h:oN(60*((e===i?3:n===i?1:5)-(e===i?t-n:n===i?e-t:n-e)/((o=a)-i))),s:oN(100*r),v:oN(100*o)})}(u,s,c)},n.toHex=function(){function e(e){return 1<(e=parseInt(e,10).toString(16)).length?e:"0"+e}return"#"+e(u)+e(s)+e(c)},n.parse=t,n}},dom:{EventUtils:kr,Sizzle:Ao,DomQuery:vi,TreeWalker:yi,DOMUtils:Xi,ScriptLoader:Qi,RangeUtils:KE,Serializer:Ap,ControlSelection:Wp,BookmarkManager:Kp,Selection:ly,Event:kr.Event},html:{Styles:xr,Entities:ir,Node:ul,Schema:pr,SaxParser:of,DomParser:Np,Writer:gl,Serializer:pl},Env:Nn,AddOnManager:ga,Annotator:nl,Formatter:Cp,UndoManager:mm,EditorCommands:Wz,WindowManager:Bd,NotificationManager:_d,EditorObservable:oE,Shortcuts:cE,Editor:zE,FocusManager:Zf,EditorManager:VE,DOM:Xi.DOM,ScriptLoader:Qi.ScriptLoader,PluginManager:ga.PluginManager,ThemeManager:ga.ThemeManager,IconManager:Ud,Resource:XE,trim:Mn.trim,isArray:Mn.isArray,is:Mn.is,toArray:Mn.toArray,makeMap:Mn.makeMap,each:Mn.each,map:Mn.map,grep:Mn.grep,inArray:Mn.inArray,extend:Mn.extend,create:Mn.create,walk:Mn.walk,createNS:Mn.createNS,resolve:Mn.resolve,explode:Mn.explode,_addCacheSuffix:Mn._addCacheSuffix,isOpera:Nn.opera,isWebKit:Nn.webkit,isIE:Nn.ie,isGecko:Nn.gecko,isMac:Nn.mac},vN=Mn.extend(VE,pN);gN=vN,window.tinymce=gN,window.tinyMCE=gN,function(e){if("object"==typeof module)try{module.exports=e}catch(t){}}(vN)}(window);
\ No newline at end of file
index c02f016..a65e027 100644 (file)
@@ -1,13 +1,22 @@
 <?php
   $cfg = array(
-    "basepath" => "/ledf_lu/",
+    "basepath" => "/oldbell_lu/",
     "templatepath" => "tmpl/",
     "db"=> array(
       "type" => "pgsql",
-      "host" => "sql12.your-server.de",
-      "dbname" => "ledflu_db",
-      "user" =>  "ledflu_user",
-      "password" => "znWA9s3cgjEsRsWZ",
+      "host" => "dedi1781.your-server.de",
+      "dbname" => "oldbell_db",
+      "user" =>  "oldbell_user",
+      "password" => "reLH2MgvEsnWNHcy",
     ),
   );
+
+  function getparams(){
+    $get_arr = array();
+    foreach (explode("&", $_SERVER['QUERY_STRING']) as $tmp_arr_param) {
+      $split_param = explode("=", $tmp_arr_param);
+      $get_arr[$split_param[0]] = urldecode($split_param[1]);
+    }
+    return $get_arr; 
+  }
 ?>
\ No newline at end of file
index fd635a1..ff0518b 100644 (file)
@@ -2,7 +2,7 @@
 class database {
   private $conn;
   private $dbconf;
-  protected function __construct($pdbconf){
+  public function __construct($pdbconf){
     $this->dbconf = $pdbconf;
     try {
       //'mysql:host=<localhost>;dbname=<database>', $user, password
@@ -14,17 +14,17 @@ class database {
     }
   }
   
-  protected function securetext($text){
+  public function securetext($text){
     return str_replace("'","''",$text);
   }
-  protected function value($text){
+  public function value($text){
     if (($text == "") || ($text == null)){
       return 'null';
     }
     return "'".$text."'";
   }
 
-  protected function query($sql){
+  public function query($sql){
     try {
       if ($this->conn){
         return $this->conn->query($sql);
@@ -35,7 +35,7 @@ class database {
     return null;
   }
 
-  protected function queryarray($sql){
+  public function queryarray($sql){
     $result = null;
     try {
       if ($this->conn){
@@ -50,7 +50,7 @@ class database {
                return $result;
   }
 
-  protected function exec($sql){
+  public function exec($sql){
     try {
       if ($this->conn){
         return  $this->exec($sql);
@@ -61,7 +61,12 @@ class database {
                return -1;
   }
 
-  protected function __destruct(){
+  public function newuuid(){
+    $nid = $this->query("SELECT uuid_in(md5(random()::text || clock_timestamp()::text)::cstring) as id");
+    return $nid["id"];
+  }
+  
+  public function __destruct(){
     $this->conn = null;
   }
 }
diff --git a/website/manifest copy.json b/website/manifest copy.json
deleted file mode 100644 (file)
index 47c716e..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-{
-  "name": "Hello World",
-  "short_name": "Hello",
-  "icons": [{
-    "src": "images/hello-icon-128.png",
-      "sizes": "128x128",
-      "type": "image/png"
-    }, {
-      "src": "images/hello-icon-144.png",
-      "sizes": "144x144",
-      "type": "image/png"
-    }, {
-      "src": "images/hello-icon-152.png",
-      "sizes": "152x152",
-      "type": "image/png"
-    }, {
-      "src": "images/hello-icon-192.png",
-      "sizes": "192x192",
-      "type": "image/png"
-    }, {
-      "src": "images/hello-icon-256.png",
-      "sizes": "256x256",
-      "type": "image/png"
-    }, {
-      "src": "images/hello-icon-512.png",
-      "sizes": "512x512",
-      "type": "image/png"
-    }],
-  "lang": "en-US",
-  "start_url": "/index.html",
-  "display": "standalone",
-  "background_color": "white",
-  "theme_color": "white"
-}
diff --git a/website/manifest.json b/website/manifest.json
deleted file mode 100644 (file)
index 47c716e..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-{
-  "name": "Hello World",
-  "short_name": "Hello",
-  "icons": [{
-    "src": "images/hello-icon-128.png",
-      "sizes": "128x128",
-      "type": "image/png"
-    }, {
-      "src": "images/hello-icon-144.png",
-      "sizes": "144x144",
-      "type": "image/png"
-    }, {
-      "src": "images/hello-icon-152.png",
-      "sizes": "152x152",
-      "type": "image/png"
-    }, {
-      "src": "images/hello-icon-192.png",
-      "sizes": "192x192",
-      "type": "image/png"
-    }, {
-      "src": "images/hello-icon-256.png",
-      "sizes": "256x256",
-      "type": "image/png"
-    }, {
-      "src": "images/hello-icon-512.png",
-      "sizes": "512x512",
-      "type": "image/png"
-    }],
-  "lang": "en-US",
-  "start_url": "/index.html",
-  "display": "standalone",
-  "background_color": "white",
-  "theme_color": "white"
-}
index 9df4f49..d893dc4 100644 (file)
@@ -3,9 +3,11 @@
   <head>
     <meta charset="utf-8">
     
-    <title>LEDF - Letzebuerger Elecronique Darts Federation</title>
+    <title>OldBell - Marc Den Barbir</title>
     <meta name="author" content="Kilian Saffran - DKS sarl">
     <meta name="viewport" content="width=device-width, initial-scale=1">
+    <meta name="apple-mobile-web-app-capable" content="yes" /> 
+    <meta name="mobile-web-app-capable" content="yes">
     <!-- <meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate" />
     <meta http-equiv="Pragma" content="no-cache" />
     <meta http-equiv="Expires" content="0" /> -->
 <meta name="msapplication-TileColor" content="#ffffff">
 <meta name="msapplication-TileImage" content="/ms-icon-144x144.png">
 <meta name="theme-color" content="#ffffff">
+<link rel="stylesheet" href="js/vendor/tabulator/css/tabulator_site.css?v=1" />
     <link  rel="stylesheet" href="css/icons.css?v=1">
     <link  rel="stylesheet" href="css/theme.css?v=1">
-    <style>
-    
-    .bgimg {
-      background-image: url('img/bg.png');
-  min-height: 100%;
-  background-position: center;
-  background-size: cover;
-    }
-    </style>
+    <link  rel="stylesheet" href="css/style.css?v=1">
   </head>
-  <body>
-    
-    <div class="top hide-small hide-medium">
-      <div class="bar black" style="border-bottom: 2px solid #00bcd4;">
-        <div class="bar-item"><span class="xlarge">L.E.D.F.</span><br><small>Lëtzebuerger Electronique Darts Federation</small></div>
-        <a class="bar-item toolbarbtn" href="home.html">Home</a>
-        <a class="bar-item toolbarbtn" href="news.html">Nouveautés</a>
-        <a class="bar-item toolbarbtn" href="calendrier.html">Calendrier</a>
-        <a class="bar-item toolbarbtn" href="clubs.html">Clubs</a>
-        <a class="bar-item toolbarbtn" href="championnat.html">Championnat</a>
-        <a class="bar-item toolbarbtn" href="listederang.html">Liste de Rang</a>
-        <a class="bar-item toolbarbtn" href="coupe.html">Coupe</a>
-      </div>
-    </div>
-    <div class="top hide-large">
-      <div class="bar black" style="border-bottom: 2px solid #00bcd4;">
-        <div class="bar-item"><span class="xlarge">L.E.D.F.</span><br><small>Lëtzebuerger Electronique Darts Federation</small></div>
-        <button class="button bar-item right" onclick="togglemenu();"><span class="xxlarge icon-menu"></span></button>
-      </div>
-      <div class="bar-block black" id="mobilemenu" style="display: none;">
-          <a class="bar-item toolbarbtn border-bottom" href="home.html">Home</a>
-          <a class="bar-item toolbarbtn border-bottom" href="news.html">Nouveautés</a>
-          <a class="bar-item toolbarbtn border-bottom" href="calendrier.html">Calendrier</a>
-          <a class="bar-item toolbarbtn border-bottom" href="clubs.html">Clubs</a>
-          <a class="bar-item toolbarbtn border-bottom" href="championnat.html">Championnat</a>
-          <a class="bar-item toolbarbtn border-bottom" href="listederang.html">Liste de Rang</a>
-          <a class="bar-item toolbarbtn border-bottom" href="coupe.html">Coupe</a>
-      </div>
-    </div>
-    <div class="display-container bgimg" style="height: calc(100vh - 70px);margin-top: 70px; overflow-y: scroll;">
-      <div class="row" style="min-height: 500px;">
-        {{pagedata}}
-      </div>
-      <div class="row dark-grey" style="margin-top: 10px;border-top: 2px solid #00bcd4;">
-        <div class="third" style="padding: 20px;">
-        <address><span class="font-weight: bold;">Lëtzebuerger Electronique Darts Federation ASBL</span><br>
-        6, rue des Alliés<br/>
-L-4412 Belvaux</address>
-        </div>
-        <div class="third" style="padding: 20px;">
-          <div class="bar-block">
-            <a class="bar-item button" href="federation.html">La Fédération</a>
-            <a class="bar-item button" href="documents.html">Documents</a>
-          </div>
-        </div>
-        <div class="third" style="padding: 20px;">
-          <div class="bar-block">
-            <a class="bar-item button" href="impressum.html">Impressum</a>
-            <a class="bar-item button" href="terms.html">Conditions Générales</a>
-            <a class="bar-item button" href="privacy.html">Protection des données</a>
-          </div>
-        </div>
-      </div>
-      <div class="row center padding-large dark-grey">
-       Powered by <a href="https://www.dks.lu" target="_blank">DKS s.à r.l.</a>
-      </div>
-    </div>
-    
-    
-
+  <body class="fullscreen">
+    <div class="display-container" style="width: 100%;">
+      {{pagedata}}
+    </div> 
+    <script src="js/vendor/tabulator/js/tabulator.js"></script>
+  
   <script src="js/site.js"></script>
 </body>
 </html>
diff --git a/website/tmpl/pages/gallery.html.mustache b/website/tmpl/pages/gallery.html.mustache
new file mode 100644 (file)
index 0000000..35ee171
--- /dev/null
@@ -0,0 +1,72 @@
+<div class="top">
+      <div class="bar red-gold">
+        <a class="bar-item button red-gold" href="home.html"><span class="icon-arrow-left2" style="font-size: 30px;"></span><br/>retour</a>
+        <div class="bar-item">
+          <span class="large text-white">Gname{{ galleriename }}</span><br/>
+          <span>Gallerie</span>
+          
+        </div>
+      </div>
+    </div>
+    <div class="main" style="margin-top: 70px; margin-bottom: 70px;">
+
+    
+<div class="row">
+  <div class="col s4 padding">
+    <a href="#"><img src="img/thumb.jpg" style="width: 100%; border: 4px solid black; border-radius: 5px;"/>
+    <label class="label">Gallery</label></a>
+  </div>
+  <div class="col s4 padding">
+    <a href="#"><img src="img/thumb.jpg" style="width: 100%; border: 4px solid black; border-radius: 5px;"/>
+    <label class="label">Gallery</label></a>
+  </div>
+  <div class="col s4 padding">
+    <a href="#"><img src="img/thumb.jpg" style="width: 100%; border: 4px solid black; border-radius: 5px;"/>
+    <label class="label">Gallery</label></a>
+  </div>
+  <div class="col s4 padding">
+    <a href="#"><img src="img/thumb.jpg" style="width: 100%; border: 4px solid black; border-radius: 5px;"/>
+    <label class="label">Gallery</label></a>
+  </div>
+  <div class="col s4 padding">
+    <a href="#"><img src="img/thumb.jpg" style="width: 100%; border: 4px solid black; border-radius: 5px;"/>
+    <label class="label">Gallery</label></a>
+  </div>
+  <div class="col s4 padding">
+    <a href="#"><img src="img/thumb.jpg" style="width: 100%; border: 4px solid black; border-radius: 5px;"/>
+    <label class="label">Gallery</label></a>
+  </div>
+  <div class="col s4 padding">
+    <a href="#"><img src="img/thumb.jpg" style="width: 100%; border: 4px solid black; border-radius: 5px;"/>
+    <label class="label">Gallery</label></a>
+  </div>
+  <div class="col s4 padding">
+    <a href="#"><img src="img/thumb.jpg" style="width: 100%; border: 4px solid black; border-radius: 5px;"/>
+    <label class="label">Gallery</label></a>
+  </div>
+  <div class="col s4 padding">
+    <a href="#"><img src="img/thumb.jpg" style="width: 100%; border: 4px solid black; border-radius: 5px;"/>
+    <label class="label">Gallery</label></a>
+  </div>
+  <div class="col s4 padding">
+    <a href="#"><img src="img/thumb.jpg" style="width: 100%; border: 4px solid black; border-radius: 5px;"/>
+    <label class="label">Gallery</label></a>
+  </div>
+  <div class="col s4 padding">
+    <a href="#"><img src="img/thumb.jpg" style="width: 100%; border: 4px solid black; border-radius: 5px;"/>
+    <label class="label">Gallery</label></a>
+  </div>
+  <div class="col s4 padding">
+    <a href="#"><img src="img/thumb.jpg" style="width: 100%; border: 4px solid black; border-radius: 5px;"/>
+    <label class="label">Gallery</label></a>
+  </div>
+  <div class="col s4 padding">
+    <a href="#"><img src="img/thumb.jpg" style="width: 100%; border: 4px solid black; border-radius: 5px;"/>
+    <label class="label">Gallery</label></a>
+  </div>
+  <div class="col s4 padding">
+    <a href="#"><img src="img/thumb.jpg" style="width: 100%; border: 4px solid black; border-radius: 5px;"/>
+    <label class="label">Gallery</label></a>
+  </div>
+</div>
+</div>
\ No newline at end of file
index 6eb0aa3..9796a85 100644 (file)
@@ -1,40 +1,94 @@
 
-<div class="container padding-large twothird">
-        <div class="bar black">
-          <div class="bar-item">la féderation vous invite:</div>
-        </div>
-        <div class="container">
-          <img src="img/news.png" style="width: 100%; opacity: 0.7;"/>
-        </div>
+      <div class="top">
+      <div class="bar red-gold">
+        <img class="bar-item" src="img/logo1.png" style="height: 70px;" alt="logo oldbell" />
+        <div class="bar-item" style="color: #fff; font-variant: small-caps; padding: 8px 8px;">Marc de Barbir<br/>Haircuts & Shaves<br/>For Men </div>
+        <a class="bar-item right" style="padding-top: 15px;"><span class="icon-facebook2" style="font-size: 40px;color: #b0834c;"></span></a>
       </div>
-      <div class="container padding-large third">
-        <div class="bar black">
-          <div class="bar-item">prochaines événements:</div>
-        </div>
-        <div class="container white" style="opacity: 0.7;">
-          <div class="card" style="border-bottom: 1px solid #c6c6c6; margin-top: 5px; margin-bottom: 5px; opacity: 1;">
-            <header><small>DD.MM.YYYY</small></header>
-            <div class="container white large">
-              Championnnat
-            </div>
+    </div>
+    <div class="main" style="margin-top: 70px; margin-bottom: 70px;">
+      <div class="row" >
+      <div class="col s8">
+        <fieldset>
+          <legend>Nos Produits</legend>
+          <div class="col s4">
+            <img src="img/dose.jpg" style="border: 1px solid grey; border-radius: 5px; width: 80%;"><br/>
+            <label class="label">Produit 1</label>
           </div>
-          <div class="card" style="border-bottom: 1px solid #c6c6c6; margin-top: 5px; margin-bottom: 5px; opacity: 1;">
-            <header><small>DD.MM.YYYY</small></header>
-            <div class="container white large">
-              Championnnat
-            </div>
+          <div class="col s4">
+            <img src="img/dose.jpg" style="border: 1px solid grey; border-radius: 5px; width: 80%;"><br/>
+            <label class="label">Produit 2</label>
           </div>
-          <div class="card" style="border-bottom: 1px solid #c6c6c6; margin-top: 5px; margin-bottom: 5px; opacity:1;">
-            <header><small>DD.MM.YYYY</small></header>
-            <div class="container white large">
-              Championnnat
-            </div>
+          <div class="col s4">
+            <span class="icon-cart" style="font-size: 50px;"></span><br/>
+            <label class="label">Shop</label>
           </div>
-          <div class="card" style="border-bottom: 1px solid #c6c6c6; margin-top: 5px; margin-bottom: 5px; opacity: 1;">
-            <header><small>DD.MM.YYYY</small></header>
-            <div class="container white large">
-              Championnnat
-            </div>
+        </fieldset>
+      </div>
+      <div class="col s4 padding">
+        <a href="gallery.html?name=">
+        <img src="img/thumb.jpg" style="width: 100%; border: 4px solid black; border-radius: 5px;"/>
+        <label class="label">Gallery</label></a>
+      </div>
+      </div>
+      <div class="row">
+        <div class="col s4 padding">
+          <a href="gallery.html?name="><img src="img/thumb.jpg" style="width: 100%; border: 4px solid black; border-radius: 5px;"/>
+          <label class="label">Gallery</label></a>
+        </div>
+        <div class="col s4 padding">
+          <a href="gallery.html?name="><img src="img/thumb.jpg" style="width: 100%; border: 4px solid black; border-radius: 5px;"/>
+          <label class="label">Gallery</label></a>
+        </div>
+        <div class="col s4 padding">
+          <a href="gallery.html?name="><img src="img/thumb.jpg" style="width: 100%; border: 4px solid black; border-radius: 5px;"/>
+          <label class="label">Gallery</label></a>
+        </div>
+      </div>
+      <div class="bar gold-white">
+        <a class="bar-item button block mobile gold-white" href="rendezvous.html" style="vertical-align: text-top;font-size: 30px;"><span class="icon-calendar"></span>&nbsp;<span style="vertical-align: middle!important; font-size: 25px; ">prendre Rendez-Vous</span></a>
+      </div>
+      <div class="row">
+        <div class="col s4 padding">
+          <img src="img/thumb.jpg" style="width: 100%; border: 4px solid black; border-radius: 5px;"/>
+          <label class="label">Gallery</label>
+        </div>
+        <div class="col s4 padding">
+          <img src="img/thumb.jpg" style="width: 100%; border: 4px solid black; border-radius: 5px;"/>
+          <label class="label">Gallery</label>
+        </div>
+        <div class="col s4 padding">
+          <img src="img/thumb.jpg" style="width: 100%; border: 4px solid black; border-radius: 5px;"/>
+          <label class="label">Gallery</label>
+        </div>
+      </div>
+      <div class="row">
+        <div class="col s6">
+          <ul class="ul">
+            <li style="background-color: #c42027;color: #b0834c;font-weight:bold;">Events</li>
+            <li>Event 1</li>
+            <li>Event 2</li>
+          </ul>
+        </div>
+        <div class="col s6">
+          <ul class="ul">
+            <li class="red-gold" style="font-weight:bold;">Presse</li>
+            <li>Press 1</li>
+            <li>Press 2</li>
+          </ul>
+        </div>
+      </div>
+</div>
+      <div class="bottom">
+      <div class="bar red-gold">
+        <div class="dropup">
+          <button class="button red-gold" onclick="dropup('dru_address');">
+            <span class="icon-map2" style="font-size: 40px;"></span><br/>Salon
+          </button>
+          <div id="dru_address" class="dropup-content bar-block card red-gold">
+            <a href="#" class="bar-item button">34, rue du Fossé<br/>4123 Esch/Alzette</a>
+            <a class="bar-item button" href="tel:0035226532264">Tel: +352 2653 2264</a>
           </div>
         </div>
       </div>
+    </div>
diff --git a/website/tmpl/pages/rendezvous.html.mustache b/website/tmpl/pages/rendezvous.html.mustache
new file mode 100644 (file)
index 0000000..dc9b5a6
--- /dev/null
@@ -0,0 +1,66 @@
+<div class="top">
+      <div class="bar red-gold">
+        <a class="bar-item button red-gold" href="home.html"><span class="icon-arrow-left2" style="font-size: 30px;"></span><br/>retour</a>
+        <div class="bar-item">
+          <span class="xlarge text-white">Rendez-vous</span>
+        </div>
+      </div>
+    </div>
+    
+    <div class="display-container" style="margin-top: 66px; margin-bottom: 70px; width: 100%!important;">
+      <div class="panel" id="pnl_products">
+        <div class="bar red-gold" style="border-top: 1px solid black;">
+          <div class="bar-item">Choix du Produit / Service</div>
+        </div>
+      </div>
+      <!--<div class="panel" id="pnl_dates">
+        
+      </div>
+      <div class="panel" id="pnl_hours">
+        
+      </div>
+      <div class="panel" id="pnl_data">
+        <form>
+          <div class="row">
+          <div class="container">
+            <label class="label">Nom</label>
+            <input class="input data_client" type="text" id="client_name" name="client_name" />
+          </div>
+          <div class="container">
+            <label class="label">Téléphone</label>
+            <input class="input data_client" type="text" id="client_phone" name="client_phone" />
+          </div>
+          <div class="container">
+            <label class="label">E-Mail</label>
+            <input class="input data_client" type="text" id="client_email" name="client_email" />
+          </div>
+          <fieldset>
+            <legend>Détails Rendez-Vous</legend>
+            <div class="row">
+              <div class="container">
+                <label class="label">Produit / Service</label>
+                <input class="input data_client readonly" type="text" id="client_product" name="client_product" readonly/>
+              </div>
+              <div class="container">
+                <label class="label">Produit / Service</label>
+                <input class="input data_client readonly" type="text" id="client_date" name="client_date" readonly/>
+              </div>
+              <div class="container">
+                <label class="label">Produit / Service</label>
+                <input class="input data_client readonly" type="text" id="client_hour" name="client_hour" readonly/>
+              </div>
+            </div>
+          </fieldset>
+        </div>
+        </form>
+      </div>
+      <div class="panel" id="pnl_confirm">
+        
+      </div>-->
+    </div>
+    <div class="bottom">
+      <div class="bar red-gold">
+        <button class="bar-item button red-gold" onclick="rendezview.viewpanel('');"><span class="icon-circle-left" style="font-size: 30px;"></span><br/><span id="btnrdvprev">prev</span></button>
+        <button class="bar-item button red-gold right" onclick="rendezview.viewpanel('');"><span class="icon-circle-right" style="font-size: 30px;"></span><br/><span id="btnrdvnext">next</span></button>
+      </div>
+    </div>
index c8f80b9..57d2d01 100644 (file)
@@ -1,535 +1,6 @@
-
-<div class="twothird">
-  <div class="container padding-large">
-    <div class="bar black">
-      <div class="bar-item">Résultats (Jounée X)</div>
-    </div>
-    <div class="container white" style="opacity: 0.7;">
-      <div class="bar black">
-        <div class="bar-item">division nationale </div>
-      </div>
-      <table class="table table-all">
-        <thead>
-          <tr><th>Team home</th><th>Team visiteur</th><th style="width: 80px;">Résultat</th></tr>
-        </thead>
-        <tbody class="bordered  hoverable">
-          <tr><td>Team 1</td><td>Team 2</td><td class="right-align">00 - 00</td></tr>
-          <tr><td>Team 1</td><td>Team 2</td><td class="right-align">00 - 00</td></tr>
-          <tr><td>Team 1</td><td>Team 2</td><td class="right-align">00 - 00</td></tr>
-          <tr><td>Team 1</td><td>Team 2</td><td class="right-align">00 - 00</td></tr>
-          <tr><td>Team 1</td><td>Team 2</td><td class="right-align">00 - 00</td></tr>
-          <tr><td>Team 1</td><td>Team 2</td><td class="right-align">00 - 00</td></tr>
-          <tr><td>Team 1</td><td>Team 2</td><td class="right-align">00 - 00</td></tr>
-          <tr><td>Team 1</td><td>Team 2</td><td class="right-align">00 - 00</td></tr>
-        </tbody>
-      </table>
-      <div class="bar black">
-        <div class="bar-item">division d'honneur </div>
-      </div>
-      <table class="table table-all">
-        <thead>
-          <tr><th>Team home</th><th>Team visiteur</th><th style="width: 80px;">Résultat</th></tr>
-        </thead>
-        <tbody class="bordered  hoverable">
-          <tr><td>Team 1</td><td>Team 2</td><td class="right-align">00 - 00</td></tr>
-          <tr><td>Team 1</td><td>Team 2</td><td class="right-align">00 - 00</td></tr>
-          <tr><td>Team 1</td><td>Team 2</td><td class="right-align">00 - 00</td></tr>
-          <tr><td>Team 1</td><td>Team 2</td><td class="right-align">00 - 00</td></tr>
-          <tr><td>Team 1</td><td>Team 2</td><td class="right-align">00 - 00</td></tr>
-          <tr><td>Team 1</td><td>Team 2</td><td class="right-align">00 - 00</td></tr>
-          <tr><td>Team 1</td><td>Team 2</td><td class="right-align">00 - 00</td></tr>
-          <tr><td>Team 1</td><td>Team 2</td><td class="right-align">00 - 00</td></tr>
-        </tbody>
-      </table>
-      <div class="bar black">
-        <div class="bar-item">division 1 </div>
-      </div>
-      <table class="table table-all">
-        <thead>
-          <tr><th>Team home</th><th>Team visiteur</th><th style="width: 80px;">Résultat</th></tr>
-        </thead>
-        <tbody class="bordered  hoverable">
-          <tr><td>Team 1</td><td>Team 2</td><td class="right-align">00 - 00</td></tr>
-          <tr><td>Team 1</td><td>Team 2</td><td class="right-align">00 - 00</td></tr>
-          <tr><td>Team 1</td><td>Team 2</td><td class="right-align">00 - 00</td></tr>
-          <tr><td>Team 1</td><td>Team 2</td><td class="right-align">00 - 00</td></tr>
-          <tr><td>Team 1</td><td>Team 2</td><td class="right-align">00 - 00</td></tr>
-          <tr><td>Team 1</td><td>Team 2</td><td class="right-align">00 - 00</td></tr>
-          <tr><td>Team 1</td><td>Team 2</td><td class="right-align">00 - 00</td></tr>
-          <tr><td>Team 1</td><td>Team 2</td><td class="right-align">00 - 00</td></tr>
-        </tbody>
-      </table>
-    </div>
-  </div>
-    <div class="container padding-large">
-    <div class="bar black">
-      <div class="bar-item">Classement </div>
-    </div>
-    <div class="container white" style="opacity: 0.7;">
-      <div class="bar black">
-        <div class="bar-item">division nationale </div>
-      </div>
-      <table class="table table-all">
-        <thead>
-        <tr>
-          <th class="right-align">PL</th>
-          <th>TEAM</th>
-          <th class="right-align">GESP</th>
-          <th class="right-align">GEW</th>
-          <th class="right-align">GL</th>
-          <th class="right-align">VRL</th>
-          <th class="right-align">SCORE</th>
-          <th class="right-align">DIF</th>
-          <th class="right-align">SETS</th>
-          <th class="right-align">DIF</th>
-          <th class="right-align">PKT</th>
-        </tr>
-        </thead>
-        <tbody class="bordered hoverable">
-          <tr>
-            <td class="right-align" style="width: 20px;">1 </td>
-            <td>Team name</td>
-            <td class="right-align">0</td>
-            <td class="right-align">00</td>
-            <td class="right-align">00</td>
-            <td class="right-align">00</td>
-            <td class="right-align">000 - 000</td>
-            <td class="right-align">000</td>
-            <td class="right-align">000 - 000</td>
-            <td class="right-align">000</td>
-            <td class="right-align">000 - 000</td>
-          </tr>
-          <tr>
-            <td class="right-align" style="width: 20px;">1 </td>
-            <td>Team name</td>
-            <td class="right-align">0</td>
-            <td class="right-align">00</td>
-            <td class="right-align">00</td>
-            <td class="right-align">00</td>
-            <td class="right-align">000 - 000</td>
-            <td class="right-align">000</td>
-            <td class="right-align">000 - 000</td>
-            <td class="right-align">000</td>
-            <td class="right-align">000 - 000</td>
-          </tr>
-          <tr>
-            <td class="right-align" style="width: 20px;">1 </td>
-            <td>Team name</td>
-            <td class="right-align">0</td>
-            <td class="right-align">00</td>
-            <td class="right-align">00</td>
-            <td class="right-align">00</td>
-            <td class="right-align">000 - 000</td>
-            <td class="right-align">000</td>
-            <td class="right-align">000 - 000</td>
-            <td class="right-align">000</td>
-            <td class="right-align">000 - 000</td>
-          </tr>
-          <tr>
-            <td class="right-align" style="width: 20px;">1 </td>
-            <td>Team name</td>
-            <td class="right-align">0</td>
-            <td class="right-align">00</td>
-            <td class="right-align">00</td>
-            <td class="right-align">00</td>
-            <td class="right-align">000 - 000</td>
-            <td class="right-align">000</td>
-            <td class="right-align">000 - 000</td>
-            <td class="right-align">000</td>
-            <td class="right-align">000 - 000</td>
-          </tr>
-          <tr>
-            <td class="right-align" style="width: 20px;">1 </td>
-            <td>Team name</td>
-            <td class="right-align">0</td>
-            <td class="right-align">00</td>
-            <td class="right-align">00</td>
-            <td class="right-align">00</td>
-            <td class="right-align">000 - 000</td>
-            <td class="right-align">000</td>
-            <td class="right-align">000 - 000</td>
-            <td class="right-align">000</td>
-            <td class="right-align">000 - 000</td>
-          </tr>
-          <tr>
-            <td class="right-align" style="width: 20px;">1 </td>
-            <td>Team name</td>
-            <td class="right-align">0</td>
-            <td class="right-align">00</td>
-            <td class="right-align">00</td>
-            <td class="right-align">00</td>
-            <td class="right-align">000 - 000</td>
-            <td class="right-align">000</td>
-            <td class="right-align">000 - 000</td>
-            <td class="right-align">000</td>
-            <td class="right-align">000 - 000</td>
-          </tr>
-          <tr>
-            <td class="right-align" style="width: 20px;">1 </td>
-            <td>Team name</td>
-            <td class="right-align">0</td>
-            <td class="right-align">00</td>
-            <td class="right-align">00</td>
-            <td class="right-align">00</td>
-            <td class="right-align">000 - 000</td>
-            <td class="right-align">000</td>
-            <td class="right-align">000 - 000</td>
-            <td class="right-align">000</td>
-            <td class="right-align">000 - 000</td>
-          </tr>
-          <tr>
-            <td class="right-align" style="width: 20px;">1 </td>
-            <td>Team name</td>
-            <td class="right-align">0</td>
-            <td class="right-align">00</td>
-            <td class="right-align">00</td>
-            <td class="right-align">00</td>
-            <td class="right-align">000 - 000</td>
-            <td class="right-align">000</td>
-            <td class="right-align">000 - 000</td>
-            <td class="right-align">000</td>
-            <td class="right-align">000 - 000</td>
-          </tr>
-          <tr>
-            <td class="right-align" style="width: 20px;">1 </td>
-            <td>Team name</td>
-            <td class="right-align">0</td>
-            <td class="right-align">00</td>
-            <td class="right-align">00</td>
-            <td class="right-align">00</td>
-            <td class="right-align">000 - 000</td>
-            <td class="right-align">000</td>
-            <td class="right-align">000 - 000</td>
-            <td class="right-align">000</td>
-            <td class="right-align">000 - 000</td>
-          </tr>
-        </tbody>
-      </table>
-      <div class="bar black">
-        <div class="bar-item">division nationale </div>
-      </div>
-      <table class="table table-all">
-        <thead>
-        <tr>
-          <th class="right-align">PL</th>
-          <th>TEAM</th>
-          <th class="right-align">GESP</th>
-          <th class="right-align">GEW</th>
-          <th class="right-align">GL</th>
-          <th class="right-align">VRL</th>
-          <th class="right-align">SCORE</th>
-          <th class="right-align">DIF</th>
-          <th class="right-align">SETS</th>
-          <th class="right-align">DIF</th>
-          <th class="right-align">PKT</th>
-        </tr>
-        </thead>
-        <tbody class="bordered hoverable">
-          <tr>
-            <td class="right-align" style="width: 20px;">1 </td>
-            <td>Team name</td>
-            <td class="right-align">0</td>
-            <td class="right-align">00</td>
-            <td class="right-align">00</td>
-            <td class="right-align">00</td>
-            <td class="right-align">000 - 000</td>
-            <td class="right-align">000</td>
-            <td class="right-align">000 - 000</td>
-            <td class="right-align">000</td>
-            <td class="right-align">000 - 000</td>
-          </tr>
-          <tr>
-            <td class="right-align" style="width: 20px;">1 </td>
-            <td>Team name</td>
-            <td class="right-align">0</td>
-            <td class="right-align">00</td>
-            <td class="right-align">00</td>
-            <td class="right-align">00</td>
-            <td class="right-align">000 - 000</td>
-            <td class="right-align">000</td>
-            <td class="right-align">000 - 000</td>
-            <td class="right-align">000</td>
-            <td class="right-align">000 - 000</td>
-          </tr>
-          <tr>
-            <td class="right-align" style="width: 20px;">1 </td>
-            <td>Team name</td>
-            <td class="right-align">0</td>
-            <td class="right-align">00</td>
-            <td class="right-align">00</td>
-            <td class="right-align">00</td>
-            <td class="right-align">000 - 000</td>
-            <td class="right-align">000</td>
-            <td class="right-align">000 - 000</td>
-            <td class="right-align">000</td>
-            <td class="right-align">000 - 000</td>
-          </tr>
-          <tr>
-            <td class="right-align" style="width: 20px;">1 </td>
-            <td>Team name</td>
-            <td class="right-align">0</td>
-            <td class="right-align">00</td>
-            <td class="right-align">00</td>
-            <td class="right-align">00</td>
-            <td class="right-align">000 - 000</td>
-            <td class="right-align">000</td>
-            <td class="right-align">000 - 000</td>
-            <td class="right-align">000</td>
-            <td class="right-align">000 - 000</td>
-          </tr>
-          <tr>
-            <td class="right-align" style="width: 20px;">1 </td>
-            <td>Team name</td>
-            <td class="right-align">0</td>
-            <td class="right-align">00</td>
-            <td class="right-align">00</td>
-            <td class="right-align">00</td>
-            <td class="right-align">000 - 000</td>
-            <td class="right-align">000</td>
-            <td class="right-align">000 - 000</td>
-            <td class="right-align">000</td>
-            <td class="right-align">000 - 000</td>
-          </tr>
-          <tr>
-            <td class="right-align" style="width: 20px;">1 </td>
-            <td>Team name</td>
-            <td class="right-align">0</td>
-            <td class="right-align">00</td>
-            <td class="right-align">00</td>
-            <td class="right-align">00</td>
-            <td class="right-align">000 - 000</td>
-            <td class="right-align">000</td>
-            <td class="right-align">000 - 000</td>
-            <td class="right-align">000</td>
-            <td class="right-align">000 - 000</td>
-          </tr>
-          <tr>
-            <td class="right-align" style="width: 20px;">1 </td>
-            <td>Team name</td>
-            <td class="right-align">0</td>
-            <td class="right-align">00</td>
-            <td class="right-align">00</td>
-            <td class="right-align">00</td>
-            <td class="right-align">000 - 000</td>
-            <td class="right-align">000</td>
-            <td class="right-align">000 - 000</td>
-            <td class="right-align">000</td>
-            <td class="right-align">000 - 000</td>
-          </tr>
-          <tr>
-            <td class="right-align" style="width: 20px;">1 </td>
-            <td>Team name</td>
-            <td class="right-align">0</td>
-            <td class="right-align">00</td>
-            <td class="right-align">00</td>
-            <td class="right-align">00</td>
-            <td class="right-align">000 - 000</td>
-            <td class="right-align">000</td>
-            <td class="right-align">000 - 000</td>
-            <td class="right-align">000</td>
-            <td class="right-align">000 - 000</td>
-          </tr>
-          <tr>
-            <td class="right-align" style="width: 20px;">1 </td>
-            <td>Team name</td>
-            <td class="right-align">0</td>
-            <td class="right-align">00</td>
-            <td class="right-align">00</td>
-            <td class="right-align">00</td>
-            <td class="right-align">000 - 000</td>
-            <td class="right-align">000</td>
-            <td class="right-align">000 - 000</td>
-            <td class="right-align">000</td>
-            <td class="right-align">000 - 000</td>
-          </tr>
-        </tbody>
-      </table>
-      <div class="bar black">
-        <div class="bar-item">division nationale </div>
-      </div>
-      <table class="table table-all">
-        <thead>
-        <tr>
-          <th class="right-align">PL</th>
-          <th>TEAM</th>
-          <th class="right-align">GESP</th>
-          <th class="right-align">GEW</th>
-          <th class="right-align">GL</th>
-          <th class="right-align">VRL</th>
-          <th class="right-align">SCORE</th>
-          <th class="right-align">DIF</th>
-          <th class="right-align">SETS</th>
-          <th class="right-align">DIF</th>
-          <th class="right-align">PKT</th>
-        </tr>
-        </thead>
-        <tbody class="bordered hoverable">
-          <tr>
-            <td class="right-align" style="width: 20px;">1 </td>
-            <td>Team name</td>
-            <td class="right-align">0</td>
-            <td class="right-align">00</td>
-            <td class="right-align">00</td>
-            <td class="right-align">00</td>
-            <td class="right-align">000 - 000</td>
-            <td class="right-align">000</td>
-            <td class="right-align">000 - 000</td>
-            <td class="right-align">000</td>
-            <td class="right-align">000 - 000</td>
-          </tr>
-          <tr>
-            <td class="right-align" style="width: 20px;">1 </td>
-            <td>Team name</td>
-            <td class="right-align">0</td>
-            <td class="right-align">00</td>
-            <td class="right-align">00</td>
-            <td class="right-align">00</td>
-            <td class="right-align">000 - 000</td>
-            <td class="right-align">000</td>
-            <td class="right-align">000 - 000</td>
-            <td class="right-align">000</td>
-            <td class="right-align">000 - 000</td>
-          </tr>
-          <tr>
-            <td class="right-align" style="width: 20px;">1 </td>
-            <td>Team name</td>
-            <td class="right-align">0</td>
-            <td class="right-align">00</td>
-            <td class="right-align">00</td>
-            <td class="right-align">00</td>
-            <td class="right-align">000 - 000</td>
-            <td class="right-align">000</td>
-            <td class="right-align">000 - 000</td>
-            <td class="right-align">000</td>
-            <td class="right-align">000 - 000</td>
-          </tr>
-          <tr>
-            <td class="right-align" style="width: 20px;">1 </td>
-            <td>Team name</td>
-            <td class="right-align">0</td>
-            <td class="right-align">00</td>
-            <td class="right-align">00</td>
-            <td class="right-align">00</td>
-            <td class="right-align">000 - 000</td>
-            <td class="right-align">000</td>
-            <td class="right-align">000 - 000</td>
-            <td class="right-align">000</td>
-            <td class="right-align">000 - 000</td>
-          </tr>
-          <tr>
-            <td class="right-align" style="width: 20px;">1 </td>
-            <td>Team name</td>
-            <td class="right-align">0</td>
-            <td class="right-align">00</td>
-            <td class="right-align">00</td>
-            <td class="right-align">00</td>
-            <td class="right-align">000 - 000</td>
-            <td class="right-align">000</td>
-            <td class="right-align">000 - 000</td>
-            <td class="right-align">000</td>
-            <td class="right-align">000 - 000</td>
-          </tr>
-          <tr>
-            <td class="right-align" style="width: 20px;">1 </td>
-            <td>Team name</td>
-            <td class="right-align">0</td>
-            <td class="right-align">00</td>
-            <td class="right-align">00</td>
-            <td class="right-align">00</td>
-            <td class="right-align">000 - 000</td>
-            <td class="right-align">000</td>
-            <td class="right-align">000 - 000</td>
-            <td class="right-align">000</td>
-            <td class="right-align">000 - 000</td>
-          </tr>
-          <tr>
-            <td class="right-align" style="width: 20px;">1 </td>
-            <td>Team name</td>
-            <td class="right-align">0</td>
-            <td class="right-align">00</td>
-            <td class="right-align">00</td>
-            <td class="right-align">00</td>
-            <td class="right-align">000 - 000</td>
-            <td class="right-align">000</td>
-            <td class="right-align">000 - 000</td>
-            <td class="right-align">000</td>
-            <td class="right-align">000 - 000</td>
-          </tr>
-          <tr>
-            <td class="right-align" style="width: 20px;">1 </td>
-            <td>Team name</td>
-            <td class="right-align">0</td>
-            <td class="right-align">00</td>
-            <td class="right-align">00</td>
-            <td class="right-align">00</td>
-            <td class="right-align">000 - 000</td>
-            <td class="right-align">000</td>
-            <td class="right-align">000 - 000</td>
-            <td class="right-align">000</td>
-            <td class="right-align">000 - 000</td>
-          </tr>
-          <tr>
-            <td class="right-align" style="width: 20px;">1 </td>
-            <td>Team name</td>
-            <td class="right-align">0</td>
-            <td class="right-align">00</td>
-            <td class="right-align">00</td>
-            <td class="right-align">00</td>
-            <td class="right-align">000 - 000</td>
-            <td class="right-align">000</td>
-            <td class="right-align">000 - 000</td>
-            <td class="right-align">000</td>
-            <td class="right-align">000 - 000</td>
-          </tr>
-        </tbody>
-      </table>
-    </div>
-  </div>
-</div>
-<div class="container padding-large third">
-        
-  <div class="container white" style="opacity: 0.7;">
-    <div class="card" style="border-bottom: 1px solid #c6c6c6; margin-top: 5px; margin-bottom: 5px; opacity: 1;">
-      <div class="container white large">
-        <a href="#">Journée 1</a>
-      </div>
-    </div>
-    <div class="card" style="border-bottom: 1px solid #c6c6c6; margin-top: 5px; margin-bottom: 5px; opacity: 1;">
-      <div class="container white large">
-        <a href="#">Journée 1</a>
-      </div>
-    </div>
-    <div class="card" style="border-bottom: 1px solid #c6c6c6; margin-top: 5px; margin-bottom: 5px; opacity:1;">
-      <div class="container white large">
-        <a href="#">Journée 1</a>
-      </div>
-    </div>
-    <div class="card" style="border-bottom: 1px solid #c6c6c6; margin-top: 5px; margin-bottom: 5px; opacity: 1;">
-      <div class="container white large">
-        <a href="#">Journée 1</a>
-      </div>
-    </div>
-    <div class="card" style="border-bottom: 1px solid #c6c6c6; margin-top: 5px; margin-bottom: 5px; opacity: 1;">
-      <div class="container white large">
-        <a href="#">Journée 1</a>
-      </div>
-    </div>
-    <div class="card" style="border-bottom: 1px solid #c6c6c6; margin-top: 5px; margin-bottom: 5px; opacity: 1;">
-      <div class="container white large">
-        <a href="#">Journée 1</a>
-      </div>
-    </div>
-    <div class="card" style="border-bottom: 1px solid #c6c6c6; margin-top: 5px; margin-bottom: 5px; opacity:1;">
-      <div class="container white large">
-        <a href="#">Journée 1</a>
-      </div>
-    </div>
-    <div class="card" style="border-bottom: 1px solid #c6c6c6; margin-top: 5px; margin-bottom: 5px; opacity: 1;">
-      <div class="container white large">
-        <a href="#">Journée 1</a>
-      </div>
-    </div>
-  </div>
+<div class="bar red-gold">
+  <div class="bar-item PageHeadTitle">SHOP</div>
 </div>
+<div class="row">
 
-      
+</div>
\ No newline at end of file